diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f9470c2..b2fd7a7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,6 +22,8 @@ jobs: cache: maven - name: Regenerate SDK run: python3 scripts/generate.py + - name: Test generator edge cases + run: python3 scripts/test_generate.py - name: Check generated files run: git diff --exit-code - name: Test diff --git a/CHANGELOG.md b/CHANGELOG.md index 569343a..16d277a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## v1.51.0 + +- Stable release of the Crawlora SDKs. +- Regenerated from the public API contract (4731 operations). + ## v1.50.0 - Stable release of the Crawlora SDKs. diff --git a/docs/operations.md b/docs/operations.md index 2b20744..7e8b7c9 100644 --- a/docs/operations.md +++ b/docs/operations.md @@ -2,7 +2,7 @@ Generated from `openapi/public.json`. Deprecated, admin, and internal operations are excluded from this SDK contract. -Total operations: `4140` +Total operations: `4731` | Group | SDK method | Operation ID | HTTP | Params | Auth | Response | Notes | | --- | --- | --- | --- | --- | --- | --- | --- | @@ -97,7 +97,7 @@ Total operations: `4140` | alt | `alt.listing` | `alt-listing` | `GET /alt/listing` | `id` (query String required)
`listing_type` (query String required) | `ApiKeyAuth` | `AltListingResponse` | | | alt | `alt.marketTrends` | `alt-market-trends` | `GET /alt/market-trends` | `category` (query String) | `ApiKeyAuth` | `AltMarketTrendsResponse` | | | alt | `alt.search` | `alt-search` | `GET /alt/search` | `q` (query String)
`category` (query String)
`auction_house` (query String)
`grading_company` (query String)
`listing_type` (query String)
`sort` (query String)
`page` (query Integer)
`per_page` (query Integer) | `ApiKeyAuth` | `AltSearchResponse` | | -| alt | `alt.soldListings` | `alt-sold-listings` | `GET /alt/sold-listings` | `q` (query String)
`category` (query String)
`auction_house` (query String)
`grading_company` (query String)
`page` (query Integer)
`per_page` (query Integer) | `ApiKeyAuth` | `AltSoldListingsResponse` | | +| alt | `alt.soldListings` | `alt-sold-listings` | `GET /alt/sold-listings` | `q` (query String)
`category` (query String)
`auction_house` (query String)
`grading_company` (query String)
`listing_type` (query String)
`grade` (query String)
`subject` (query String)
`brand` (query String)
`card_number` (query String)
`sold_from` (query String)
`sold_to` (query String)
`added_from` (query String)
`added_to` (query String)
`year_min` (query Integer)
`year_max` (query Integer)
`price_min` (query Double)
`price_max` (query Double)
`pop_min` (query Integer)
`pop_max` (query Integer)
`has_serial` (query Boolean)
`has_print_run` (query Boolean)
`rookie_year_card` (query Boolean)
`sort` (query String)
`page` (query Integer)
`per_page` (query Integer) | `ApiKeyAuth` | `AltSoldListingsResponse` | | | alt | `alt.topMovers` | `alt-top-movers` | `GET /alt/top-movers` | `category` (query String)
`subject` (query String)
`limit` (query Integer) | `ApiKeyAuth` | `AltTopMoversResponse` | | | amazonJobs | `amazonJobs.categories` | `amazon-jobs-categories` | `GET /amazon-jobs/categories` | none | `ApiKeyAuth` | `AmazonJobsCategoriesResponse` | | | amazonJobs | `amazonJobs.job` | `amazon-jobs-job` | `GET /amazon-jobs/job` | `id` (query String required) | `ApiKeyAuth` | `AmazonJobsJobResponse` | | @@ -138,6 +138,7 @@ Total operations: `4140` | apNews | `apNews.apnewsNews` | `apnews-news` | `GET /apnews/news` | none | `ApiKeyAuth` | `ApNewsApnewsNewsResponse` | | | apNews | `apNews.apnewsSections` | `apnews-sections` | `GET /apnews/sections` | none | `ApiKeyAuth` | `ApNewsApnewsSectionsResponse` | | | appleBooks | `appleBooks.audiobookSeries` | `apple-books-audiobook-series` | `GET /apple-books/audiobook-series/{id}` | `id` (path String required)
`country` (query String)
`lang` (query String) | `ApiKeyAuth` | `AppleBooksAudiobookSeriesResponse` | | +| appleBooks | `appleBooks.audiobookCharts` | `apple-books-audiobook-charts` | `GET /apple-books/audiobook/charts` | `country` (query String)
`genre_id` (query String) | `ApiKeyAuth` | `AppleBooksAudiobookChartsResponse` | | | appleBooks | `appleBooks.audiobookSearch` | `apple-books-audiobook-search` | `GET /apple-books/audiobook/search` | `term` (query String required)
`country` (query String)
`lang` (query String)
`limit` (query Integer)
`page` (query Integer) | `ApiKeyAuth` | `AppleBooksAudiobookSearchResponse` | | | appleBooks | `appleBooks.audiobook` | `apple-books-audiobook` | `GET /apple-books/audiobook/{id}` | `id` (path String required)
`country` (query String)
`lang` (query String) | `ApiKeyAuth` | `AppleBooksAudiobookResponse` | | | appleBooks | `appleBooks.audiobookReviews` | `apple-books-audiobook-reviews` | `GET /apple-books/audiobook/{id}/reviews` | `id` (path String required)
`country` (query String)
`lang` (query String)
`page` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `AppleBooksAudiobookReviewsResponse` | | @@ -146,7 +147,8 @@ Total operations: `4140` | appleBooks | `appleBooks.book` | `apple-books-book` | `GET /apple-books/book/{id}` | `id` (path String required)
`country` (query String)
`lang` (query String) | `ApiKeyAuth` | `AppleBooksBookResponse` | | | appleBooks | `appleBooks.bookReviews` | `apple-books-book-reviews` | `GET /apple-books/book/{id}/reviews` | `id` (path String required)
`country` (query String)
`lang` (query String)
`page` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `AppleBooksBookReviewsResponse` | | | appleBooks | `appleBooks.bookSimilar` | `apple-books-book-similar` | `GET /apple-books/book/{id}/similar` | `id` (path String required)
`country` (query String)
`lang` (query String) | `ApiKeyAuth` | `AppleBooksBookSimilarResponse` | | -| appleBooks | `appleBooks.charts` | `apple-books-charts` | `GET /apple-books/charts` | `collection` (query String)
`genre` (query Integer)
`country` (query String)
`limit` (query Integer) | `ApiKeyAuth` | `AppleBooksChartsResponse` | | +| appleBooks | `appleBooks.charts` | `apple-books-charts` | `GET /apple-books/charts` | `collection` (query String)
`genre` (query String)
`country` (query String)
`limit` (query Integer) | `ApiKeyAuth` | `AppleBooksChartsResponse` | | +| appleBooks | `appleBooks.genres` | `apple-books-genres` | `GET /apple-books/genres` | `media` (query String required)
`country` (query String) | `ApiKeyAuth` | `AppleBooksGenresResponse` | | | appleBooks | `appleBooks.search` | `apple-books-search` | `GET /apple-books/search` | `term` (query String required)
`country` (query String)
`lang` (query String)
`limit` (query Integer)
`page` (query Integer) | `ApiKeyAuth` | `AppleBooksSearchResponse` | | | appleBooks | `appleBooks.series` | `apple-books-series` | `GET /apple-books/series/{id}` | `id` (path String required)
`country` (query String)
`lang` (query String) | `ApiKeyAuth` | `AppleBooksSeriesResponse` | | | appleJobs | `appleJobs.job` | `apple-jobs-job` | `GET /apple-jobs/job` | `id` (query String required) | `ApiKeyAuth` | `AppleJobsJobResponse` | | @@ -230,6 +232,12 @@ Total operations: `4140` | balenciaga | `balenciaga.search` | `balenciaga-search` | `GET /balenciaga/search` | `q` (query String required)
`sort` (query String)
`page` (query Integer)
`filters` (query String) | `ApiKeyAuth` | `BalenciagaSearchResponse` | | | balenciaga | `balenciaga.storeCountries` | `balenciaga-store-countries` | `GET /balenciaga/store-countries` | none | `ApiKeyAuth` | `BalenciagaStoreCountriesResponse` | | | balenciaga | `balenciaga.stores` | `balenciaga-stores` | `GET /balenciaga/stores` | `country` (query String required) | `ApiKeyAuth` | `BalenciagaStoresResponse` | | +| bandcamp | `bandcamp.artist` | `bandcamp-artist` | `GET /bandcamp/artist` | `artist` (query String required) | `ApiKeyAuth` | `BandcampArtistResponse` | | +| bandcamp | `bandcamp.discover` | `bandcamp-discover` | `GET /bandcamp/discover` | `tags` (query String)
`format` (query String)
`sort` (query String)
`time_facet` (query Integer)
`geoname_id` (query Integer)
`cursor` (query String)
`size` (query Integer) | `ApiKeyAuth` | `BandcampDiscoverResponse` | | +| bandcamp | `bandcamp.filters` | `bandcamp-filters` | `GET /bandcamp/filters` | none | `ApiKeyAuth` | `BandcampFiltersResponse` | | +| bandcamp | `bandcamp.relatedTags` | `bandcamp-related-tags` | `GET /bandcamp/related-tags` | `tag` (query String required)
`size` (query Integer) | `ApiKeyAuth` | `BandcampRelatedTagsResponse` | | +| bandcamp | `bandcamp.release` | `bandcamp-release` | `GET /bandcamp/release` | `url` (query String required) | `ApiKeyAuth` | `BandcampReleaseResponse` | | +| bandcamp | `bandcamp.search` | `bandcamp-search` | `GET /bandcamp/search` | `q` (query String required)
`type` (query String) | `ApiKeyAuth` | `BandcampSearchResponse` | | | barrons | `barrons.article` | `barrons-article` | `GET /barrons/article` | `url` (query String required) | `ApiKeyAuth` | `BarronsArticleResponse` | | | barrons | `barrons.headlines` | `barrons-headlines` | `GET /barrons/headlines` | `section` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `BarronsHeadlinesResponse` | | | barrons | `barrons.news` | `barrons-news` | `GET /barrons/news` | none | `ApiKeyAuth` | `BarronsNewsResponse` | | @@ -340,7 +348,7 @@ Total operations: `4140` | bo3 | `bo3.matchHistory` | `bo3-match-history` | `GET /bo3/match-history` | `game` (query String)
`status` (query String)
`tier` (query String)
`from` (query String)
`to` (query String)
`sort` (query String)
`offset` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `Bo3MatchHistoryResponse` | | | bo3 | `bo3.matchPlayers` | `bo3-match-players` | `GET /bo3/match-players` | `slug` (query String required) | `ApiKeyAuth` | `Bo3MatchPlayersResponse` | | | bo3 | `bo3.newsCategories` | `bo3-news-categories` | `GET /bo3/news-categories` | none | `ApiKeyAuth` | `Bo3NewsCategoriesResponse` | | -| bo3 | `bo3.newsFeed` | `bo3-news-feed` | `GET /bo3/news-feed` | `game` (query String)
`section` (query String)
`category` (query Integer)
`sort` (query String)
`offset` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `Bo3NewsFeedResponse` | | +| bo3 | `bo3.newsFeed` | `bo3-news-feed` | `GET /bo3/news-feed` | `game` (query String)
`section` (query String)
`tag` (query String)
`locale` (query String)
`category` (query Integer)
`sort` (query String)
`offset` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `Bo3NewsFeedResponse` | | | bo3 | `bo3.player` | `bo3-player` | `GET /bo3/player` | `slug` (query String required)
`game` (query String) | `ApiKeyAuth` | `Bo3PlayerResponse` | | | bo3 | `bo3.playerLeaderboard` | `bo3-player-leaderboard` | `GET /bo3/player-leaderboard` | `from` (query String)
`to` (query String)
`tier` (query String)
`sort` (query String)
`order` (query String)
`offset` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `Bo3PlayerLeaderboardResponse` | | | bo3 | `bo3.playerRecentMatches` | `bo3-player-recent-matches` | `GET /bo3/player-recent-matches` | `slug` (query String required)
`opponent` (query String)
`tournament` (query String)
`limit` (query Integer) | `ApiKeyAuth` | `Bo3PlayerRecentMatchesResponse` | | @@ -360,6 +368,20 @@ Total operations: `4140` | bo3 | `bo3.tournaments` | `bo3-tournaments` | `GET /bo3/tournaments` | `game` (query String)
`status` (query String)
`tier` (query String)
`event_type` (query String)
`sort` (query String)
`offset` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `Bo3TournamentsResponse` | | | bo3 | `bo3.transfers` | `bo3-transfers` | `GET /bo3/transfers` | `team_id` (query Integer)
`player_id` (query Integer)
`action` (query String)
`role` (query String)
`sort` (query String)
`offset` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `Bo3TransfersResponse` | | | bo3 | `bo3.valorantLeaderboard` | `bo3-valorant-leaderboard` | `GET /bo3/valorant-leaderboard` | `from` (query String)
`to` (query String)
`sort` (query String)
`order` (query String)
`offset` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `Bo3ValorantLeaderboardResponse` | | +| boardGameGeek | `boardGameGeek.boardgamegeekCardsets` | `boardgamegeek-cardsets` | `GET /boardgamegeek/cardsets/{id}` | `id` (path String required) | `ApiKeyAuth` | `BoardGameGeekBoardgamegeekCardsetsResponse` | | +| boardGameGeek | `boardGameGeek.boardgamegeekEntity` | `boardgamegeek-entity` | `GET /boardgamegeek/entity/{type}/{id}` | `type` (path String required)
`id` (path String required) | `ApiKeyAuth` | `BoardGameGeekBoardgamegeekEntityResponse` | | +| boardGameGeek | `boardGameGeek.boardgamegeekGame` | `boardgamegeek-game` | `GET /boardgamegeek/game/{id}` | `id` (path String required) | `ApiKeyAuth` | `BoardGameGeekBoardgamegeekGameResponse` | | +| boardGameGeek | `boardGameGeek.boardgamegeekGeeklist` | `boardgamegeek-geeklist` | `GET /boardgamegeek/geeklist/{id}` | `id` (path String required) | `ApiKeyAuth` | `BoardGameGeekBoardgamegeekGeeklistResponse` | | +| boardGameGeek | `boardGameGeek.boardgamegeekGeeklistItems` | `boardgamegeek-geeklist-items` | `GET /boardgamegeek/geeklist/{id}/items` | `id` (path String required)
`page` (query Integer) | `ApiKeyAuth` | `BoardGameGeekBoardgamegeekGeeklistItemsResponse` | | +| boardGameGeek | `boardGameGeek.boardgamegeekGeeklists` | `boardgamegeek-geeklists` | `GET /boardgamegeek/geeklists` | `objecttype` (query String)
`objectid` (query Integer required)
`category` (query String)
`sort` (query String)
`showcount` (query Integer)
`pageid` (query Integer) | `ApiKeyAuth` | `BoardGameGeekBoardgamegeekGeeklistsResponse` | | +| boardGameGeek | `boardGameGeek.boardgamegeekHotness` | `boardgamegeek-hotness` | `GET /boardgamegeek/hotness` | `objecttype` (query String)
`showcount` (query Integer) | `ApiKeyAuth` | `BoardGameGeekBoardgamegeekHotnessResponse` | | +| boardGameGeek | `boardGameGeek.boardgamegeekLinks` | `boardgamegeek-links` | `GET /boardgamegeek/links` | `objecttype` (query String required)
`objectid` (query Integer required)
`linktype` (query String required)
`showcount` (query Integer)
`pageid` (query Integer) | `ApiKeyAuth` | `BoardGameGeekBoardgamegeekLinksResponse` | | +| boardGameGeek | `boardGameGeek.boardgamegeekMedia` | `boardgamegeek-media` | `GET /boardgamegeek/media/{id}` | `id` (path String required)
`type` (query String)
`showcount` (query Integer)
`pageid` (query Integer)
`sort` (query String)
`interval` (query String)
`gallery` (query String)
`tag` (query String)
`license` (query String)
`languageid` (query String) | `ApiKeyAuth` | `BoardGameGeekBoardgamegeekMediaResponse` | | +| boardGameGeek | `boardGameGeek.boardgamegeekRecommendations` | `boardgamegeek-recommendations` | `GET /boardgamegeek/recommendations/{id}` | `id` (path String required)
`showcount` (query Integer) | `ApiKeyAuth` | `BoardGameGeekBoardgamegeekRecommendationsResponse` | | +| boardGameGeek | `boardGameGeek.boardgamegeekReviews` | `boardgamegeek-reviews` | `GET /boardgamegeek/reviews/{type}/{id}` | `type` (path String required)
`id` (path String required) | `ApiKeyAuth` | `BoardGameGeekBoardgamegeekReviewsResponse` | | +| boardGameGeek | `boardGameGeek.boardgamegeekTaxonomy` | `boardgamegeek-taxonomy` | `GET /boardgamegeek/taxonomy` | none | `ApiKeyAuth` | `BoardGameGeekBoardgamegeekTaxonomyResponse` | | +| boardGameGeek | `boardGameGeek.boardgamegeekThread` | `boardgamegeek-thread` | `GET /boardgamegeek/thread/{id}` | `id` (path String required)
`pageid` (query Integer) | `ApiKeyAuth` | `BoardGameGeekBoardgamegeekThreadResponse` | | +| boardGameGeek | `boardGameGeek.boardgamegeekThreads` | `boardgamegeek-threads` | `GET /boardgamegeek/threads` | `objecttype` (query String)
`objectid` (query Integer required)
`forumid` (query Integer)
`sort` (query String)
`showcount` (query Integer)
`pageid` (query Integer) | `ApiKeyAuth` | `BoardGameGeekBoardgamegeekThreadsResponse` | | | bonhams | `bonhams.auctionSearch` | `bonhams-auction-search` | `GET /bonhams/auctions/search` | `q` (query String)
`country` (query String)
`category` (query String)
`month` (query String)
`auction_type` (query String)
`status` (query String)
`page` (query Integer)
`per_page` (query Integer) | `ApiKeyAuth` | `BonhamsAuctionSearchResponse` | | | bonhams | `bonhams.auctionDetail` | `bonhams-auction-detail` | `GET /bonhams/auctions/{id}` | `id` (path String required) | `ApiKeyAuth` | `BonhamsAuctionDetailResponse` | | | bonhams | `bonhams.auctionLots` | `bonhams-auction-lots` | `GET /bonhams/auctions/{id}/lots` | `id` (path String required)
`q` (query String)
`department` (query String)
`page` (query Integer)
`per_page` (query Integer) | `ApiKeyAuth` | `BonhamsAuctionLotsResponse` | | @@ -373,6 +395,10 @@ Total operations: `4140` | booking | `booking.hotelDetail` | `booking-hotel-detail` | `GET /booking/hotel-detail` | `hotel_id` (query Integer required) | `ApiKeyAuth` | `BookingHotelDetailResponse` | | | booking | `booking.reviews` | `booking-reviews` | `GET /booking/reviews` | `hotel_id` (query Integer required)
`destination_id` (query Integer)
`hotel_country_code` (query String required)
`hotel_score` (query Double)
`search_text` (query String)
`page` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `BookingReviewsResponse` | | | booking | `booking.search` | `booking-search` | `GET /booking/search` | `query` (query String required)
`checkin` (query String required)
`checkout` (query String required)
`adults` (query Integer)
`rooms` (query Integer)
`children` (query Integer)
`page` (query Integer) | `ApiKeyAuth` | `BookingSearchResponse` | | +| booksy | `booksy.business` | `booksy-business` | `GET /booksy/business` | `id` (query Integer required)
`country` (query String) | `ApiKeyAuth` | `BooksyBusinessResponse` | | +| booksy | `booksy.businesses` | `booksy-businesses` | `GET /booksy/businesses` | `country` (query String)
`page` (query Integer)
`page_size` (query Integer)
`category` (query Integer)
`treatment` (query Integer)
`query` (query String)
`location_id` (query Integer)
`location_name` (query String)
`sort_order` (query String)
`gender` (query String)
`open_now` (query Boolean)
`has_special_offers` (query Boolean)
`business_ids` (query String) | `ApiKeyAuth` | `BooksyBusinessesResponse` | | +| booksy | `booksy.categories` | `booksy-categories` | `GET /booksy/categories` | `country` (query String) | `ApiKeyAuth` | `BooksyCategoriesResponse` | | +| booksy | `booksy.treatmentHints` | `booksy-treatment-hints` | `GET /booksy/treatment-hints` | `query` (query String required)
`country` (query String) | `ApiKeyAuth` | `BooksyTreatmentHintsResponse` | | | boots | `boots.search` | `boots-search` | `GET /boots/search` | `q` (query String)
`category` (query List)
`filter` (query List)
`price_min` (query Double)
`price_max` (query Double)
`in_stock` (query Boolean)
`page` (query Integer)
`page_size` (query Integer)
`sort` (query String) | `ApiKeyAuth` | `BootsSearchResponse` | | | boots | `boots.suggest` | `boots-suggest` | `GET /boots/suggest` | `q` (query String required) | `ApiKeyAuth` | `BootsSuggestResponse` | | | bostonGlobe | `bostonGlobe.bostonglobeNews` | `bostonglobe-news` | `GET /bostonglobe/news` | none | `ApiKeyAuth` | `BostonGlobeBostonglobeNewsResponse` | | @@ -408,6 +434,14 @@ Total operations: `4140` | breitbart | `breitbart.headlines` | `breitbart-headlines` | `GET /breitbart/headlines` | `section` (query String required) | `ApiKeyAuth` | `BreitbartHeadlinesResponse` | | | breitbart | `breitbart.news` | `breitbart-news` | `GET /breitbart/news` | none | `ApiKeyAuth` | `BreitbartNewsResponse` | | | breitbart | `breitbart.sections` | `breitbart-sections` | `GET /breitbart/sections` | none | `ApiKeyAuth` | `BreitbartSectionsResponse` | | +| bringATrailer | `bringATrailer.bringatrailerFilters` | `bringatrailer-filters` | `GET /bringatrailer/filters` | none | `ApiKeyAuth` | `BringAtrailerBringatrailerFiltersResponse` | | +| bringATrailer | `bringATrailer.bringatrailerListing` | `bringatrailer-listing` | `GET /bringatrailer/listing` | `slug` (query String required)
`bid_history` (query Boolean) | `ApiKeyAuth` | `BringAtrailerBringatrailerListingResponse` | | +| bringATrailer | `bringATrailer.bringatrailerLive` | `bringatrailer-live` | `GET /bringatrailer/live` | `q` (query String)
`category` (query String)
`era` (query String)
`country` (query String)
`ending_within` (query String)
`max_bid` (query Integer)
`no_reserve` (query Boolean)
`premium` (query Boolean)
`sort` (query String)
`page` (query Integer)
`per_page` (query Integer) | `ApiKeyAuth` | `BringAtrailerBringatrailerLiveResponse` | | +| bringATrailer | `bringATrailer.bringatrailerMakes` | `bringatrailer-makes` | `GET /bringatrailer/makes` | `q` (query String)
`make` (query String) | `ApiKeyAuth` | `BringAtrailerBringatrailerMakesResponse` | | +| bringATrailer | `bringATrailer.bringatrailerPriceHistory` | `bringatrailer-price-history` | `GET /bringatrailer/price-history` | `make` (query String)
`model_id` (query Integer)
`q` (query String)
`exclude` (query String)
`category` (query String)
`era` (query String)
`origin` (query String)
`country` (query String)
`type` (query String)
`recency` (query String)
`min_year` (query Integer)
`max_year` (query Integer)
`max_bid` (query Integer)
`points_limit` (query Integer) | `ApiKeyAuth` | `BringAtrailerBringatrailerPriceHistoryResponse` | | +| bringATrailer | `bringATrailer.bringatrailerResults` | `bringatrailer-results` | `GET /bringatrailer/results` | `make` (query String)
`model_id` (query Integer)
`q` (query String)
`exclude` (query String)
`category` (query String)
`era` (query String)
`origin` (query String)
`country` (query String)
`result` (query String)
`type` (query String)
`recency` (query String)
`min_year` (query Integer)
`max_year` (query Integer)
`max_bid` (query Integer)
`sort` (query String)
`page` (query Integer)
`per_page` (query Integer) | `ApiKeyAuth` | `BringAtrailerBringatrailerResultsResponse` | | +| bringATrailer | `bringATrailer.bringatrailerSearch` | `bringatrailer-search` | `GET /bringatrailer/search` | `q` (query String required)
`phrase` (query Boolean)
`section` (query String)
`page` (query Integer) | `ApiKeyAuth` | `BringAtrailerBringatrailerSearchResponse` | | +| bringATrailer | `bringATrailer.bringatrailerSuggest` | `bringatrailer-suggest` | `GET /bringatrailer/suggest` | `term` (query String required) | `ApiKeyAuth` | `BringAtrailerBringatrailerSuggestResponse` | | | brisbaneTimes | `brisbaneTimes.brisbanetimesArticle` | `brisbanetimes-article` | `GET /brisbanetimes/article` | `url` (query String required) | `ApiKeyAuth` | `BrisbaneTimesBrisbanetimesArticleResponse` | | | brisbaneTimes | `brisbaneTimes.brisbanetimesAuthor` | `brisbanetimes-author` | `GET /brisbanetimes/author` | `url` (query String required) | `ApiKeyAuth` | `BrisbaneTimesBrisbanetimesAuthorResponse` | | | brisbaneTimes | `brisbaneTimes.brisbanetimesHeadlines` | `brisbanetimes-headlines` | `GET /brisbanetimes/headlines` | `section` (query String required) | `ApiKeyAuth` | `BrisbaneTimesBrisbanetimesHeadlinesResponse` | | @@ -447,6 +481,11 @@ Total operations: `4140` | capterra | `capterra.product` | `capterra-product` | `GET /capterra/product` | `product_id` (query String required) | `ApiKeyAuth` | `CapterraProductResponse` | | | capterra | `capterra.reviews` | `capterra-reviews` | `GET /capterra/product/reviews` | `product_id` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `CapterraReviewsResponse` | | | capterra | `capterra.search` | `capterra-search` | `GET /capterra/search` | `q` (query String required) | `ApiKeyAuth` | `CapterraSearchResponse` | | +| cardmarket | `cardmarket.catalog` | `cardmarket-catalog` | `GET /cardmarket/catalog` | `kind` (query String)
`game_id` (query String)
`category_id` (query Integer)
`expansion_id` (query Integer)
`q` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `CardmarketCatalogResponse` | | +| cardmarket | `cardmarket.catalogCategories` | `cardmarket-catalog-categories` | `GET /cardmarket/catalog/categories` | `kind` (query String)
`game_id` (query String) | `ApiKeyAuth` | `CardmarketCatalogCategoriesResponse` | | +| cardmarket | `cardmarket.games` | `cardmarket-games` | `GET /cardmarket/games` | none | `ApiKeyAuth` | `CardmarketGamesResponse` | | +| cardmarket | `cardmarket.priceGuide` | `cardmarket-price-guide` | `GET /cardmarket/price-guide` | `kind` (query String)
`game_id` (query String)
`category_id` (query Integer)
`product_id` (query Integer)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `CardmarketPriceGuideResponse` | | +| cardmarket | `cardmarket.priceGuideCategories` | `cardmarket-price-guide-categories` | `GET /cardmarket/price-guide/categories` | `kind` (query String)
`game_id` (query String) | `ApiKeyAuth` | `CardmarketPriceGuideCategoriesResponse` | | | carMax | `carMax.carmaxSearch` | `carmax-search` | `GET /carmax/search` | `make` (query String)
`model` (query String)
`zip` (query String)
`sort` (query String)
`min_year` (query Integer)
`max_year` (query Integer)
`min_price` (query Integer)
`max_price` (query Integer)
`max_mileage` (query Integer)
`page` (query Integer) | `ApiKeyAuth` | `CarMaxCarmaxSearchResponse` | | | carMax | `carMax.carmaxSearchSuggestions` | `carmax-search-suggestions` | `GET /carmax/search/suggestions` | `search` (query String required)
`exact_match` (query Boolean) | `ApiKeyAuth` | `CarMaxCarmaxSearchSuggestionsResponse` | | | carMax | `carMax.carmaxShopByBrand` | `carmax-shop-by-brand` | `GET /carmax/shop-by-brand` | none | `ApiKeyAuth` | `CarMaxCarmaxShopByBrandResponse` | | @@ -607,6 +646,41 @@ Total operations: `4140` | courtListener | `courtListener.courtlistenerCourts` | `courtlistener-courts` | `GET /courtlistener/courts` | `court_id` (query String)
`page` (query Integer) | `ApiKeyAuth` | `CourtListenerCourtlistenerCourtsResponse` | | | courtListener | `courtListener.courtlistenerPeople` | `courtlistener-people` | `GET /courtlistener/people` | `person_id` (query Integer)
`cursor` (query String) | `ApiKeyAuth` | `CourtListenerCourtlistenerPeopleResponse` | | | courtListener | `courtListener.courtlistenerSearch` | `courtlistener-search` | `GET /courtlistener/search` | `q` (query String required)
`cursor` (query String) | `ApiKeyAuth` | `CourtListenerCourtlistenerSearchResponse` | | +| cricbuzz | `cricbuzz.archives` | `cricbuzz-archives` | `GET /cricbuzz/archives` | `year` (query Integer)
`category` (query String)
`q` (query String) | `ApiKeyAuth` | `CricbuzzArchivesResponse` | | +| cricbuzz | `cricbuzz.auctionInfo` | `cricbuzz-auction-info` | `GET /cricbuzz/auction/info` | `tournament` (query String)
`year` (query String) | `ApiKeyAuth` | `CricbuzzAuctionInfoResponse` | | +| cricbuzz | `cricbuzz.auctionLive` | `cricbuzz-auction-live` | `GET /cricbuzz/auction/live` | `tournament` (query String required)
`year` (query String required)
`currency` (query String required) | `ApiKeyAuth` | `CricbuzzAuctionLiveResponse` | | +| cricbuzz | `cricbuzz.auctionLiveBlog` | `cricbuzz-auction-live-blog` | `GET /cricbuzz/auction/live-blog` | `tournament` (query String required)
`year` (query String required) | `ApiKeyAuth` | `CricbuzzAuctionLiveBlogResponse` | | +| cricbuzz | `cricbuzz.auctionNews` | `cricbuzz-auction-news` | `GET /cricbuzz/auction/news` | `tournament` (query String required)
`year` (query String required) | `ApiKeyAuth` | `CricbuzzAuctionNewsResponse` | | +| cricbuzz | `cricbuzz.auctionOptions` | `cricbuzz-auction-options` | `GET /cricbuzz/auction/options` | `tournament` (query String)
`year` (query String) | `ApiKeyAuth` | `CricbuzzAuctionOptionsResponse` | | +| cricbuzz | `cricbuzz.auctionPlayerDetail` | `cricbuzz-auction-player-detail` | `GET /cricbuzz/auction/player` | `tournament` (query String required)
`year` (query String required)
`currency` (query String required)
`player_id` (query Integer required) | `ApiKeyAuth` | `CricbuzzAuctionPlayerDetailResponse` | | +| cricbuzz | `cricbuzz.auctionPlayerSearch` | `cricbuzz-auction-player-search` | `GET /cricbuzz/auction/player-search` | `tournament` (query String required)
`year` (query String required)
`q` (query String required) | `ApiKeyAuth` | `CricbuzzAuctionPlayerSearchResponse` | | +| cricbuzz | `cricbuzz.auctionResults` | `cricbuzz-auction-results` | `GET /cricbuzz/auction/results` | `tournament` (query String required)
`year` (query String required)
`currency` (query String required)
`page` (query Integer)
`country_ids` (query String)
`statuses` (query String)
`team_id` (query String)
`role` (query String)
`cap` (query String)
`sort` (query String) | `ApiKeyAuth` | `CricbuzzAuctionResultsResponse` | | +| cricbuzz | `cricbuzz.auctionSeasons` | `cricbuzz-auction-seasons` | `GET /cricbuzz/auction/seasons` | none | `ApiKeyAuth` | `CricbuzzAuctionSeasonsResponse` | | +| cricbuzz | `cricbuzz.auctionTeamDetail` | `cricbuzz-auction-team-detail` | `GET /cricbuzz/auction/team` | `tournament` (query String required)
`year` (query String required)
`currency` (query String required)
`team_id` (query Integer required) | `ApiKeyAuth` | `CricbuzzAuctionTeamDetailResponse` | | +| cricbuzz | `cricbuzz.auctionTeams` | `cricbuzz-auction-teams` | `GET /cricbuzz/auction/teams` | `tournament` (query String required)
`year` (query String required)
`currency` (query String required)
`sort` (query String) | `ApiKeyAuth` | `CricbuzzAuctionTeamsResponse` | | +| cricbuzz | `cricbuzz.auctionTeamsOptions` | `cricbuzz-auction-teams-options` | `GET /cricbuzz/auction/teams/options` | `tournament` (query String)
`year` (query String) | `ApiKeyAuth` | `CricbuzzAuctionTeamsOptionsResponse` | | +| cricbuzz | `cricbuzz.auctionUpcoming` | `cricbuzz-auction-upcoming` | `GET /cricbuzz/auction/upcoming` | `tournament` (query String required)
`year` (query String required)
`currency` (query String required)
`page` (query Integer)
`country_ids` (query String)
`role` (query String)
`cap` (query String)
`sort` (query String) | `ApiKeyAuth` | `CricbuzzAuctionUpcomingResponse` | | +| cricbuzz | `cricbuzz.auctionUpcomingOptions` | `cricbuzz-auction-upcoming-options` | `GET /cricbuzz/auction/upcoming/options` | `tournament` (query String)
`year` (query String) | `ApiKeyAuth` | `CricbuzzAuctionUpcomingOptionsResponse` | | +| cricbuzz | `cricbuzz.auctionVideos` | `cricbuzz-auction-videos` | `GET /cricbuzz/auction/videos` | `tournament` (query String required)
`year` (query String required) | `ApiKeyAuth` | `CricbuzzAuctionVideosResponse` | | +| cricbuzz | `cricbuzz.matchFacts` | `cricbuzz-match-facts` | `GET /cricbuzz/match-facts` | `match_url` (query String required) | `ApiKeyAuth` | `CricbuzzMatchFactsResponse` | | +| cricbuzz | `cricbuzz.matchGraphs` | `cricbuzz-match-graphs` | `GET /cricbuzz/match-graphs` | `match_url` (query String required) | `ApiKeyAuth` | `CricbuzzMatchGraphsResponse` | | +| cricbuzz | `cricbuzz.matchOvers` | `cricbuzz-match-overs` | `GET /cricbuzz/match-overs` | `match_url` (query String required) | `ApiKeyAuth` | `CricbuzzMatchOversResponse` | | +| cricbuzz | `cricbuzz.matches` | `cricbuzz-matches` | `GET /cricbuzz/matches` | `status` (query String)
`category` (query String) | `ApiKeyAuth` | `CricbuzzMatchesResponse` | | +| cricbuzz | `cricbuzz.navigation` | `cricbuzz-navigation` | `GET /cricbuzz/navigation` | none | `ApiKeyAuth` | `CricbuzzNavigationResponse` | | +| cricbuzz | `cricbuzz.newsStory` | `cricbuzz-news-story` | `GET /cricbuzz/news/story` | `url` (query String required) | `ApiKeyAuth` | `CricbuzzNewsStoryResponse` | | +| cricbuzz | `cricbuzz.newsTopics` | `cricbuzz-news-topics` | `GET /cricbuzz/news/topics` | `q` (query String) | `ApiKeyAuth` | `CricbuzzNewsTopicsResponse` | | +| cricbuzz | `cricbuzz.rankings` | `cricbuzz-rankings` | `GET /cricbuzz/rankings` | `gender` (query String)
`type` (query String)
`format` (query String) | `ApiKeyAuth` | `CricbuzzRankingsResponse` | | +| cricbuzz | `cricbuzz.records` | `cricbuzz-records` | `GET /cricbuzz/records` | `stat` (query String)
`format` (query String)
`year` (query String)
`team` (query String)
`opponent` (query String) | `ApiKeyAuth` | `CricbuzzRecordsResponse` | | +| cricbuzz | `cricbuzz.schedule` | `cricbuzz-schedule` | `GET /cricbuzz/schedule` | `category` (query String)
`q` (query String) | `ApiKeyAuth` | `CricbuzzScheduleResponse` | | +| cricbuzz | `cricbuzz.scorecard` | `cricbuzz-scorecard` | `GET /cricbuzz/scorecard` | `match_url` (query String required) | `ApiKeyAuth` | `CricbuzzScorecardResponse` | | +| cricbuzz | `cricbuzz.series` | `cricbuzz-series` | `GET /cricbuzz/series` | `category` (query String)
`live_stream` (query Boolean)
`q` (query String) | `ApiKeyAuth` | `CricbuzzSeriesResponse` | | +| cricbuzz | `cricbuzz.seriesStats` | `cricbuzz-series-stats` | `GET /cricbuzz/series/stats` | `series_url` (query String required)
`stat` (query String)
`format` (query String) | `ApiKeyAuth` | `CricbuzzSeriesStatsResponse` | | +| cricbuzz | `cricbuzz.teamStats` | `cricbuzz-team-stats` | `GET /cricbuzz/team/stats` | `category` (query String required)
`team_id` (query Integer required)
`stat` (query String required)
`format_id` (query String required)
`year` (query String required)
`opponent_id` (query String required) | `ApiKeyAuth` | `CricbuzzTeamStatsResponse` | | +| cricbuzz | `cricbuzz.teamStatsOptions` | `cricbuzz-team-stats-options` | `GET /cricbuzz/team/stats/options` | `category` (query String required)
`team_id` (query Integer required) | `ApiKeyAuth` | `CricbuzzTeamStatsOptionsResponse` | | +| cricbuzz | `cricbuzz.teams` | `cricbuzz-teams` | `GET /cricbuzz/teams` | `category` (query String)
`q` (query String) | `ApiKeyAuth` | `CricbuzzTeamsResponse` | | +| cricbuzz | `cricbuzz.videoCategories` | `cricbuzz-video-categories` | `GET /cricbuzz/videos/categories` | none | `ApiKeyAuth` | `CricbuzzVideoCategoriesResponse` | | +| cricbuzz | `cricbuzz.videoPlaylists` | `cricbuzz-video-playlists` | `GET /cricbuzz/videos/playlists` | none | `ApiKeyAuth` | `CricbuzzVideoPlaylistsResponse` | | +| cricbuzz | `cricbuzz.wtc` | `cricbuzz-wtc` | `GET /cricbuzz/wtc` | none | `ApiKeyAuth` | `CricbuzzWtcResponse` | | | cricinfo | `cricinfo.calendar` | `cricinfo-calendar` | `GET /cricinfo/calendar` | none | `ApiKeyAuth` | `CricinfoCalendarResponse` | | | cricinfo | `cricinfo.commentary` | `cricinfo-commentary` | `GET /cricinfo/commentary` | `url` (query String required)
`limit` (query Integer) | `ApiKeyAuth` | `CricinfoCommentaryResponse` | | | cricinfo | `cricinfo.grounds` | `cricinfo-grounds` | `GET /cricinfo/grounds` | `limit` (query Integer) | `ApiKeyAuth` | `CricinfoGroundsResponse` | | @@ -687,10 +761,16 @@ Total operations: `4140` | dailyWire | `dailyWire.dailywireNews` | `dailywire-news` | `GET /dailywire/news` | none | `ApiKeyAuth` | `DailyWireDailywireNewsResponse` | | | dailyWire | `dailyWire.dailywireSections` | `dailywire-sections` | `GET /dailywire/sections` | none | `ApiKeyAuth` | `DailyWireDailywireSectionsResponse` | | | datasets | `datasets.list` | `datasets-list` | `GET /datasets` | none | `ApiKeyAuth` | `DatasetsListResponse` | | +| datasets | `datasets.airbnbHostsFacets` | `datasets-airbnb-hosts-facets` | `GET /datasets/airbnb-hosts/facets` | `facet` (query String required)
`q` (query String)
`location` (query String)
`interest` (query String)
`verification` (query String)
`is_superhost` (query Boolean)
`is_home_host` (query Boolean)
`identity_verified` (query Boolean)
`min_listings` (query Integer)
`max_listings` (query Integer)
`min_reviews` (query Integer)
`min_hosting_years` (query Integer) | `ApiKeyAuth` | `DatasetsAirbnbHostsFacetsResponse` | | +| datasets | `datasets.airbnbHostsItem` | `datasets-airbnb-hosts-item` | `GET /datasets/airbnb-hosts/items/{id}` | `id` (path String required) | `ApiKeyAuth` | `DatasetsAirbnbHostsItemResponse` | | +| datasets | `datasets.airbnbHostsSearch` | `datasets-airbnb-hosts-search` | `GET /datasets/airbnb-hosts/search` | `q` (query String)
`location` (query String)
`interest` (query String)
`verification` (query String)
`is_superhost` (query Boolean)
`is_home_host` (query Boolean)
`identity_verified` (query Boolean)
`min_listings` (query Integer)
`max_listings` (query Integer)
`min_reviews` (query Integer)
`min_hosting_years` (query Integer)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsAirbnbHostsSearchResponse` | | | datasets | `datasets.airbnbMarketsFacets` | `datasets-airbnb-markets-facets` | `GET /datasets/airbnb-markets/facets` | `facet` (query String required)
`group_by` (query String)
`country` (query String)
`market` (query String)
`superhost` (query Boolean)
`guest_favorite` (query Boolean)
`min_rating` (query Double)
`min_review_count` (query Integer)
`active_since` (query String)
`min_listings` (query Integer) | `ApiKeyAuth` | `DatasetsAirbnbMarketsFacetsResponse` | | | datasets | `datasets.airbnbMarketsItem` | `datasets-airbnb-markets-item` | `GET /datasets/airbnb-markets/items/{country}` | `country` (path String required) | `ApiKeyAuth` | `DatasetsAirbnbMarketsItemResponse` | | | datasets | `datasets.airbnbMarketsNearby` | `datasets-airbnb-markets-nearby` | `GET /datasets/airbnb-markets/nearby` | `lat` (query Double required)
`lon` (query Double required)
`radius_m` (query Integer required)
`precision` (query Integer)
`min_listings` (query Integer)
`country` (query String)
`superhost` (query Boolean)
`min_rating` (query Double)
`active_since` (query String) | `ApiKeyAuth` | `DatasetsAirbnbMarketsNearbyResponse` | | | datasets | `datasets.airbnbMarketsSearch` | `datasets-airbnb-markets-search` | `GET /datasets/airbnb-markets/search` | `group_by` (query String)
`country` (query String)
`market` (query String)
`superhost` (query Boolean)
`guest_favorite` (query Boolean)
`min_rating` (query Double)
`min_review_count` (query Integer)
`active_since` (query String)
`min_listings` (query Integer)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsAirbnbMarketsSearchResponse` | | +| datasets | `datasets.appleBooksFacets` | `datasets-apple-books-facets` | `GET /datasets/apple-books/facets` | `facet` (query String required)
`q` (query String)
`kind` (query String)
`genre` (query String)
`artist` (query String)
`artist_id` (query String)
`publisher` (query String)
`series` (query String)
`narrator` (query String)
`provider` (query String)
`currency` (query String)
`country` (query String)
`discovery_source` (query String)
`free` (query Boolean)
`min_rating` (query Double)
`min_rating_count` (query Integer) | `ApiKeyAuth` | `DatasetsAppleBooksFacetsResponse` | | +| datasets | `datasets.appleBooksItem` | `datasets-apple-books-item` | `GET /datasets/apple-books/items/{kind}/{id}` | `kind` (path String required)
`id` (path String required) | `ApiKeyAuth` | `DatasetsAppleBooksItemResponse` | | +| datasets | `datasets.appleBooksSearch` | `datasets-apple-books-search` | `GET /datasets/apple-books/search` | `q` (query String)
`kind` (query String)
`genre` (query String)
`artist` (query String)
`artist_id` (query String)
`publisher` (query String)
`series` (query String)
`narrator` (query String)
`provider` (query String)
`currency` (query String)
`country` (query String)
`discovery_source` (query String)
`free` (query Boolean)
`min_rating` (query Double)
`min_rating_count` (query Integer)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsAppleBooksSearchResponse` | | | datasets | `datasets.appleMapsPlacesFacets` | `datasets-apple-maps-places-facets` | `GET /datasets/apple-maps-places/facets` | `facet` (query String required)
`q` (query String)
`category` (query String)
`city` (query String)
`state` (query String)
`country_code` (query String)
`postal_code` (query String)
`min_rating` (query Double)
`min_rating_count` (query Integer)
`has_website` (query Boolean)
`has_phone` (query Boolean)
`lat` (query Double)
`lon` (query Double)
`radius_m` (query Integer) | `ApiKeyAuth` | `DatasetsAppleMapsPlacesFacetsResponse` | | | datasets | `datasets.appleMapsPlacesItem` | `datasets-apple-maps-places-item` | `GET /datasets/apple-maps-places/items/{place_id}` | `place_id` (path String required) | `ApiKeyAuth` | `DatasetsAppleMapsPlacesItemResponse` | | | datasets | `datasets.appleMapsPlacesNearby` | `datasets-apple-maps-places-nearby` | `GET /datasets/apple-maps-places/nearby` | `lat` (query Double required)
`lon` (query Double required)
`radius_m` (query Integer required)
`category` (query String)
`min_rating` (query Double)
`min_rating_count` (query Integer)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsAppleMapsPlacesNearbyResponse` | | @@ -698,9 +778,15 @@ Total operations: `4140` | datasets | `datasets.applePodcastsShowsFacets` | `datasets-apple-podcasts-shows-facets` | `GET /datasets/apple-podcasts-shows/facets` | `facet` (query String required)
`q` (query String)
`genre` (query String)
`genre_id` (query String)
`country` (query String)
`explicitness` (query String)
`run_id` (query String)
`min_track_count` (query Integer) | `ApiKeyAuth` | `DatasetsApplePodcastsShowsFacetsResponse` | | | datasets | `datasets.applePodcastsShowsItem` | `datasets-apple-podcasts-shows-item` | `GET /datasets/apple-podcasts-shows/items/{id}` | `id` (path String required) | `ApiKeyAuth` | `DatasetsApplePodcastsShowsItemResponse` | | | datasets | `datasets.applePodcastsShowsSearch` | `datasets-apple-podcasts-shows-search` | `GET /datasets/apple-podcasts-shows/search` | `q` (query String)
`genre` (query String)
`genre_id` (query String)
`country` (query String)
`explicitness` (query String)
`run_id` (query String)
`min_track_count` (query Integer)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsApplePodcastsShowsSearchResponse` | | +| datasets | `datasets.appsChartsFacets` | `datasets-apps-charts-facets` | `GET /datasets/apps-charts/facets` | `facet` (query String required)
`q` (query String)
`store` (query String)
`collection` (query String)
`chart_type` (query String)
`platform` (query String)
`category` (query String)
`country` (query String)
`app_id` (query String)
`date` (query String)
`free` (query Boolean)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsAppsChartsFacetsResponse` | | +| datasets | `datasets.appsChartsItem` | `datasets-apps-charts-item` | `GET /datasets/apps-charts/items/{chart_uid}` | `chart_uid` (path String required) | `ApiKeyAuth` | `DatasetsAppsChartsItemResponse` | | | datasets | `datasets.appsChartsSearch` | `datasets-apps-charts-search` | `GET /datasets/apps-charts/search` | `q` (query String)
`store` (query String)
`chart_type` (query String)
`platform` (query String)
`collection` (query String)
`category` (query String)
`country` (query String)
`app_id` (query String)
`date` (query String)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsAppsChartsSearchResponse` | | +| datasets | `datasets.appsReviewsFacets` | `datasets-apps-reviews-facets` | `GET /datasets/apps-reviews/facets` | `facet` (query String required)
`q` (query String)
`store` (query String)
`app_id` (query String)
`country` (query String)
`min_score` (query Integer)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsAppsReviewsFacetsResponse` | | +| datasets | `datasets.appsReviewsItem` | `datasets-apps-reviews-item` | `GET /datasets/apps-reviews/items/{review_uid}` | `review_uid` (path String required) | `ApiKeyAuth` | `DatasetsAppsReviewsItemResponse` | | | datasets | `datasets.appsReviewsSearch` | `datasets-apps-reviews-search` | `GET /datasets/apps-reviews/search` | `q` (query String)
`store` (query String)
`app_id` (query String)
`country` (query String)
`min_score` (query Integer)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsAppsReviewsSearchResponse` | | -| datasets | `datasets.appsSearch` | `datasets-apps-search` | `GET /datasets/apps/search` | `q` (query String)
`store` (query String)
`platforms` (query List)
`category` (query String)
`country` (query String)
`developer` (query String)
`free` (query Boolean)
`min_rating` (query Double)
`min_reviews` (query Integer)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsAppsSearchResponse` | | +| datasets | `datasets.appsFacets` | `datasets-apps-facets` | `GET /datasets/apps/facets` | `facet` (query String required)
`q` (query String)
`store` (query String)
`platforms` (query String)
`category` (query String)
`country` (query String)
`developer` (query String)
`free` (query Boolean)
`min_rating` (query Double)
`min_reviews` (query Integer)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsAppsFacetsResponse` | | +| datasets | `datasets.appsItem` | `datasets-apps-item` | `GET /datasets/apps/items/{app_uid}` | `app_uid` (path String required) | `ApiKeyAuth` | `DatasetsAppsItemResponse` | | +| datasets | `datasets.appsSearch` | `datasets-apps-search` | `GET /datasets/apps/search` | `q` (query String)
`store` (query String)
`platforms` (query String)
`category` (query String)
`country` (query String)
`developer` (query String)
`free` (query Boolean)
`min_rating` (query Double)
`min_reviews` (query Integer)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsAppsSearchResponse` | | | datasets | `datasets.bbbBusinessesFacets` | `datasets-bbb-businesses-facets` | `GET /datasets/bbb-businesses/facets` | `facet` (query String required)
`limit` (query Integer)
`offset` (query Integer)
`q` (query String)
`category` (query String)
`country` (query String)
`address_country` (query String)
`state` (query String)
`city` (query String)
`rating` (query String)
`min_rating_rank` (query Integer)
`accredited` (query Boolean)
`has_alerts` (query Boolean)
`alert_title` (query String)
`min_complaints` (query Integer)
`entity_type` (query String)
`run_id` (query String) | `ApiKeyAuth` | `DatasetsBbbBusinessesFacetsResponse` | | | datasets | `datasets.bbbBusinessesItem` | `datasets-bbb-businesses-item` | `GET /datasets/bbb-businesses/items/{id}` | `id` (path String required) | `ApiKeyAuth` | `DatasetsBbbBusinessesItemResponse` | | | datasets | `datasets.bbbBusinessesSearch` | `datasets-bbb-businesses-search` | `GET /datasets/bbb-businesses/search` | `q` (query String)
`category` (query String)
`country` (query String)
`address_country` (query String)
`state` (query String)
`city` (query String)
`rating` (query String)
`min_rating_rank` (query Integer)
`accredited` (query Boolean)
`has_alerts` (query Boolean)
`alert_title` (query String)
`min_complaints` (query Integer)
`entity_type` (query String)
`run_id` (query String)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsBbbBusinessesSearchResponse` | | @@ -717,6 +803,8 @@ Total operations: `4140` | datasets | `datasets.chromeExtensionsMetrics` | `datasets-chrome-extensions-metrics` | `GET /datasets/chrome-extensions/metrics` | `days` (query String)
`limit` (query Integer) | `ApiKeyAuth` | `DatasetsChromeExtensionsMetricsResponse` | | | datasets | `datasets.chromeExtensionsSearch` | `datasets-chrome-extensions-search` | `GET /datasets/chrome-extensions/search` | `q` (query String)
`item_type` (query String)
`category` (query String)
`developer` (query String)
`developer_email` (query String)
`permission` (query String)
`status` (query String)
`manifest_version` (query String)
`collects_data` (query Boolean)
`has_broad_host_access` (query Boolean)
`min_users` (query Integer)
`min_rating` (query Double)
`min_rating_count` (query Integer)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsChromeExtensionsSearchResponse` | | | datasets | `datasets.chromeExtensionsTrending` | `datasets-chrome-extensions-trending` | `GET /datasets/chrome-extensions/trending` | `q` (query String)
`item_type` (query String)
`category` (query String)
`developer` (query String)
`developer_email` (query String)
`permission` (query String)
`status` (query String)
`manifest_version` (query String)
`collects_data` (query Boolean)
`has_broad_host_access` (query Boolean)
`min_users` (query Integer)
`min_rating` (query Double)
`min_rating_count` (query Integer)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsChromeExtensionsTrendingResponse` | | +| datasets | `datasets.creatorsFacets` | `datasets-creators-facets` | `GET /datasets/creators/facets` | `facet` (query String required)
`q` (query String)
`handle` (query String)
`niche` (query String)
`country` (query String)
`verified` (query Boolean)
`min_followers` (query Integer)
`has_email` (query Boolean)
`include_inactive` (query Boolean)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsCreatorsFacetsResponse` | | +| datasets | `datasets.creatorsItem` | `datasets-creators-item` | `GET /datasets/creators/items/{creator_uid}` | `creator_uid` (path String required)
`include_inactive` (query Boolean)
`include_email` (query Boolean) | `ApiKeyAuth` | `DatasetsCreatorsItemResponse` | | | datasets | `datasets.creatorsSearch` | `datasets-creators-search` | `GET /datasets/creators/search` | `q` (query String)
`handle` (query String)
`niche` (query String)
`country` (query String)
`verified` (query Boolean)
`min_followers` (query Integer)
`has_email` (query Boolean)
`include_email` (query Boolean)
`include_inactive` (query Boolean)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsCreatorsSearchResponse` | | | datasets | `datasets.doordashStoresFacets` | `datasets-doordash-stores-facets` | `GET /datasets/doordash-stores/facets` | `facet` (query String required)
`q` (query String)
`country` (query String)
`state` (query String)
`city` (query String)
`tag` (query String)
`dash_pass_only` (query Boolean) | `ApiKeyAuth` | `DatasetsDoordashStoresFacetsResponse` | | | datasets | `datasets.doordashStoresItem` | `datasets-doordash-stores-item` | `GET /datasets/doordash-stores/items/{store_id}` | `store_id` (path String required) | `ApiKeyAuth` | `DatasetsDoordashStoresItemResponse` | | @@ -788,6 +876,8 @@ Total operations: `4140` | datasets | `datasets.producthuntProductsSearch` | `datasets-producthunt-products-search` | `GET /datasets/producthunt-products/search` | `q` (query String)
`topic` (query String)
`maker` (query String)
`launched_after` (query String)
`launched_before` (query String)
`min_votes` (query Integer)
`min_rating` (query Double)
`pricing_type` (query String)
`has_website` (query Boolean)
`is_online` (query Boolean)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsProducthuntProductsSearchResponse` | | | datasets | `datasets.producthuntTrendsFacets` | `datasets-producthunt-trends-facets` | `GET /datasets/producthunt-trends/facets` | `facet` (query String required)
`group_by` (query String)
`topic` (query String)
`launched_after` (query String)
`launched_before` (query String)
`min_votes` (query Integer)
`min_launches` (query Integer) | `ApiKeyAuth` | `DatasetsProducthuntTrendsFacetsResponse` | | | datasets | `datasets.producthuntTrendsSearch` | `datasets-producthunt-trends-search` | `GET /datasets/producthunt-trends/search` | `group_by` (query String)
`topic` (query String)
`launched_after` (query String)
`launched_before` (query String)
`min_votes` (query Integer)
`min_launches` (query Integer)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsProducthuntTrendsSearchResponse` | | +| datasets | `datasets.redditTrendingFacets` | `datasets-reddit-trending-facets` | `GET /datasets/reddit-trending/facets` | `facet` (query String required)
`q` (query String)
`subreddit` (query String)
`date` (query String)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsRedditTrendingFacetsResponse` | | +| datasets | `datasets.redditTrendingItem` | `datasets-reddit-trending-item` | `GET /datasets/reddit-trending/items/{post_uid}` | `post_uid` (path String required) | `ApiKeyAuth` | `DatasetsRedditTrendingItemResponse` | | | datasets | `datasets.redditTrendingSearch` | `datasets-reddit-trending-search` | `GET /datasets/reddit-trending/search` | `q` (query String)
`subreddit` (query String)
`date` (query String)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsRedditTrendingSearchResponse` | | | datasets | `datasets.secCompaniesFacets` | `datasets-sec-companies-facets` | `GET /datasets/sec-companies/facets` | `facet` (query String required)
`q` (query String)
`ticker` (query String)
`sic` (query String)
`exchange` (query String)
`state_of_incorporation` (query String)
`entity_type` (query String)
`reporting_currency` (query String)
`has_financials` (query Boolean)
`min_revenue` (query Double)
`form_filed` (query String) | `ApiKeyAuth` | `DatasetsSecCompaniesFacetsResponse` | | | datasets | `datasets.secCompaniesFinancials` | `datasets-sec-companies-financials` | `GET /datasets/sec-companies/financials/{cik}` | `cik` (path String required)
`statement` (query String)
`period` (query String)
`from` (query Integer)
`to` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `DatasetsSecCompaniesFinancialsResponse` | | @@ -800,15 +890,30 @@ Total operations: `4140` | datasets | `datasets.starbucksStoresItem` | `datasets-starbucks-stores-item` | `GET /datasets/starbucks-stores/items/{store_number}` | `store_number` (path String required) | `ApiKeyAuth` | `DatasetsStarbucksStoresItemResponse` | | | datasets | `datasets.starbucksStoresNearby` | `datasets-starbucks-stores-nearby` | `GET /datasets/starbucks-stores/nearby` | `lat` (query Double required)
`lon` (query Double required)
`radius_m` (query Integer required)
`country` (query String)
`amenity` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsStarbucksStoresNearbyResponse` | | | datasets | `datasets.starbucksStoresSearch` | `datasets-starbucks-stores-search` | `GET /datasets/starbucks-stores/search` | `q` (query String)
`country` (query String)
`state` (query String)
`city` (query String)
`market` (query String)
`amenity` (query String)
`lat` (query Double)
`lon` (query Double)
`radius_m` (query Integer)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsStarbucksStoresSearchResponse` | | +| datasets | `datasets.steamAchievementsFacets` | `datasets-steam-achievements-facets` | `GET /datasets/steam-achievements/facets` | `facet` (query String required)
`app_id` (query String)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsSteamAchievementsFacetsResponse` | | +| datasets | `datasets.steamAchievementsItem` | `datasets-steam-achievements-item` | `GET /datasets/steam-achievements/items/{app_id}/{name}` | `app_id` (path String required)
`name` (path String required) | `ApiKeyAuth` | `DatasetsSteamAchievementsItemResponse` | | | datasets | `datasets.steamAchievementsSearch` | `datasets-steam-achievements-search` | `GET /datasets/steam-achievements/search` | `app_id` (query String)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsSteamAchievementsSearchResponse` | | +| datasets | `datasets.steamChartsFacets` | `datasets-steam-charts-facets` | `GET /datasets/steam-charts/facets` | `facet` (query String required)
`q` (query String)
`chart` (query String)
`country` (query String)
`app_id` (query String)
`date` (query String)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsSteamChartsFacetsResponse` | | +| datasets | `datasets.steamChartsItem` | `datasets-steam-charts-item` | `GET /datasets/steam-charts/items/{chart_uid}` | `chart_uid` (path String required) | `ApiKeyAuth` | `DatasetsSteamChartsItemResponse` | | | datasets | `datasets.steamChartsSearch` | `datasets-steam-charts-search` | `GET /datasets/steam-charts/search` | `q` (query String)
`chart` (query String)
`country` (query String)
`app_id` (query String)
`date` (query String)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsSteamChartsSearchResponse` | | | datasets | `datasets.steamGamesFacets` | `datasets-steam-games-facets` | `GET /datasets/steam-games/facets` | `facet` (query String required)
`q` (query String)
`type` (query String)
`developer` (query String)
`publisher` (query String)
`genre` (query String)
`category` (query String)
`tag` (query String)
`price_tier` (query String)
`review_tier` (query String)
`owners_bucket` (query String)
`run_id` (query String)
`is_free` (query Boolean)
`windows` (query Boolean)
`mac` (query Boolean)
`linux` (query Boolean)
`on_sale` (query Boolean)
`min_price_cents` (query Integer)
`max_price_cents` (query Integer)
`min_owners` (query Integer)
`min_positive` (query Integer)
`min_total_reviews` (query Integer)
`min_review_score` (query Double)
`min_metacritic` (query Integer)
`min_ccu` (query Integer)
`min_release_year` (query Integer)
`max_release_year` (query Integer) | `ApiKeyAuth` | `DatasetsSteamGamesFacetsResponse` | | | datasets | `datasets.steamGamesItem` | `datasets-steam-games-item` | `GET /datasets/steam-games/items/{appid}` | `appid` (path Integer required) | `ApiKeyAuth` | `DatasetsSteamGamesItemResponse` | | | datasets | `datasets.steamGamesSearch` | `datasets-steam-games-search` | `GET /datasets/steam-games/search` | `q` (query String)
`type` (query String)
`developer` (query String)
`publisher` (query String)
`genre` (query String)
`category` (query String)
`tag` (query String)
`price_tier` (query String)
`review_tier` (query String)
`owners_bucket` (query String)
`run_id` (query String)
`is_free` (query Boolean)
`windows` (query Boolean)
`mac` (query Boolean)
`linux` (query Boolean)
`on_sale` (query Boolean)
`min_price_cents` (query Integer)
`max_price_cents` (query Integer)
`min_owners` (query Integer)
`min_positive` (query Integer)
`min_total_reviews` (query Integer)
`min_review_score` (query Double)
`min_metacritic` (query Integer)
`min_ccu` (query Integer)
`min_release_year` (query Integer)
`max_release_year` (query Integer)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsSteamGamesSearchResponse` | | +| datasets | `datasets.steamNewsFacets` | `datasets-steam-news-facets` | `GET /datasets/steam-news/facets` | `facet` (query String required)
`q` (query String)
`app_id` (query String)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsSteamNewsFacetsResponse` | | +| datasets | `datasets.steamNewsItem` | `datasets-steam-news-item` | `GET /datasets/steam-news/items/{app_id}/{gid}` | `app_id` (path String required)
`gid` (path String required) | `ApiKeyAuth` | `DatasetsSteamNewsItemResponse` | | | datasets | `datasets.steamNewsSearch` | `datasets-steam-news-search` | `GET /datasets/steam-news/search` | `q` (query String)
`app_id` (query String)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsSteamNewsSearchResponse` | | +| datasets | `datasets.steamPlayercountsFacets` | `datasets-steam-playercounts-facets` | `GET /datasets/steam-playercounts/facets` | `facet` (query String required)
`app_id` (query String)
`date` (query String)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsSteamPlayercountsFacetsResponse` | | +| datasets | `datasets.steamPlayercountsItem` | `datasets-steam-playercounts-item` | `GET /datasets/steam-playercounts/items/{app_id}/{snapshot_date}` | `app_id` (path String required)
`snapshot_date` (path String required) | `ApiKeyAuth` | `DatasetsSteamPlayercountsItemResponse` | | | datasets | `datasets.steamPlayercountsSearch` | `datasets-steam-playercounts-search` | `GET /datasets/steam-playercounts/search` | `app_id` (query String)
`date` (query String)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsSteamPlayercountsSearchResponse` | | +| datasets | `datasets.steamPricesFacets` | `datasets-steam-prices-facets` | `GET /datasets/steam-prices/facets` | `facet` (query String required)
`app_id` (query String)
`date` (query String)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsSteamPricesFacetsResponse` | | +| datasets | `datasets.steamPricesItem` | `datasets-steam-prices-item` | `GET /datasets/steam-prices/items/{app_id}/{snapshot_date}` | `app_id` (path String required)
`snapshot_date` (path String required) | `ApiKeyAuth` | `DatasetsSteamPricesItemResponse` | | | datasets | `datasets.steamPricesSearch` | `datasets-steam-prices-search` | `GET /datasets/steam-prices/search` | `app_id` (query String)
`date` (query String)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsSteamPricesSearchResponse` | | +| datasets | `datasets.steamReviewsFacets` | `datasets-steam-reviews-facets` | `GET /datasets/steam-reviews/facets` | `facet` (query String required)
`q` (query String)
`app_id` (query String)
`language` (query String)
`voted_up` (query Boolean)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsSteamReviewsFacetsResponse` | | +| datasets | `datasets.steamReviewsItem` | `datasets-steam-reviews-item` | `GET /datasets/steam-reviews/items/{app_id}/{recommendation_id}` | `app_id` (path String required)
`recommendation_id` (path String required) | `ApiKeyAuth` | `DatasetsSteamReviewsItemResponse` | | | datasets | `datasets.steamReviewsSearch` | `datasets-steam-reviews-search` | `GET /datasets/steam-reviews/search` | `q` (query String)
`app_id` (query String)
`language` (query String)
`voted_up` (query String)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsSteamReviewsSearchResponse` | | +| datasets | `datasets.substackFacets` | `datasets-substack-facets` | `GET /datasets/substack/facets` | `facet` (query String required)
`q` (query String)
`kind` (query String)
`identifier` (query String)
`language` (query String)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsSubstackFacetsResponse` | | +| datasets | `datasets.substackItem` | `datasets-substack-item` | `GET /datasets/substack/items/{uid}` | `uid` (path String required) | `ApiKeyAuth` | `DatasetsSubstackItemResponse` | | +| datasets | `datasets.substackSearch` | `datasets-substack-search` | `GET /datasets/substack/search` | `q` (query String)
`kind` (query String)
`identifier` (query String)
`language` (query String)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsSubstackSearchResponse` | | | datasets | `datasets.techstackFacets` | `datasets-techstack-facets` | `GET /datasets/techstack/facets` | `facet` (query String required)
`q` (query String)
`technology` (query List)
`any_of` (query List)
`not` (query List)
`category` (query String)
`cms` (query String)
`ecommerce` (query String)
`cdn` (query String)
`web_server` (query String)
`server_language` (query String)
`tld` (query String)
`render_tier` (query String)
`seed_source` (query String)
`has_captcha` (query Boolean)
`is_infrastructure` (query Boolean)
`reachable` (query Boolean)
`min_tech_count` (query Integer)
`run_id` (query String) | `ApiKeyAuth` | `DatasetsTechstackFacetsResponse` | | | datasets | `datasets.techstackItem` | `datasets-techstack-item` | `GET /datasets/techstack/items/{domain}` | `domain` (path String required) | `ApiKeyAuth` | `DatasetsTechstackItemResponse` | | | datasets | `datasets.techstackSearch` | `datasets-techstack-search` | `GET /datasets/techstack/search` | `q` (query String)
`technology` (query List)
`any_of` (query List)
`not` (query List)
`category` (query String)
`cms` (query String)
`ecommerce` (query String)
`cdn` (query String)
`web_server` (query String)
`server_language` (query String)
`tld` (query String)
`render_tier` (query String)
`seed_source` (query String)
`has_captcha` (query Boolean)
`is_infrastructure` (query Boolean)
`reachable` (query Boolean)
`min_tech_count` (query Integer)
`run_id` (query String)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsTechstackSearchResponse` | | @@ -872,6 +977,24 @@ Total operations: `4140` | discogs | `discogs.master` | `discogs-master` | `GET /discogs/master/{id}` | `id` (path String required) | `ApiKeyAuth` | `DiscogsMasterResponse` | | | discogs | `discogs.release` | `discogs-release` | `GET /discogs/release/{id}` | `id` (path String required) | `ApiKeyAuth` | `DiscogsReleaseResponse` | | | discogs | `discogs.search` | `discogs-search` | `GET /discogs/search` | `q` (query String required)
`type` (query String)
`page` (query Integer)
`per_page` (query Integer) | `ApiKeyAuth` | `DiscogsSearchResponse` | | +| dollarTree | `dollarTree.dollartreeBlogArticle` | `dollartree-blog-article` | `GET /dollartree/blog/article` | `slug` (query String required)
`article_id` (query String required) | `ApiKeyAuth` | `DollarTreeDollartreeBlogArticleResponse` | | +| dollarTree | `dollarTree.dollartreeCategories` | `dollartree-categories` | `GET /dollartree/categories` | none | `ApiKeyAuth` | `DollarTreeDollartreeCategoriesResponse` | | +| dollarTree | `dollarTree.dollartreePrice` | `dollartree-price` | `GET /dollartree/price` | `product_id` (query String required) | `ApiKeyAuth` | `DollarTreeDollartreePriceResponse` | | +| dollarTree | `dollarTree.dollartreeProduct` | `dollartree-product` | `GET /dollartree/product` | `product_id` (query String required) | `ApiKeyAuth` | `DollarTreeDollartreeProductResponse` | | +| dollarTree | `dollarTree.dollartreeProducts` | `dollartree-products` | `GET /dollartree/products` | `product_ids` (query String required) | `ApiKeyAuth` | `DollarTreeDollartreeProductsResponse` | | +| dollarTree | `dollarTree.dollartreeSearch` | `dollartree-search` | `GET /dollartree/search` | `q` (query String)
`navigation_id` (query String)
`navigation_state` (query String)
`offset` (query Integer)
`page_size` (query String)
`sort` (query String) | `ApiKeyAuth` | `DollarTreeDollartreeSearchResponse` | | +| dollarTree | `dollarTree.dollartreeStockStatus` | `dollartree-stock-status` | `GET /dollartree/stock-status` | `product_id` (query String required)
`sku_id` (query String required) | `ApiKeyAuth` | `DollarTreeDollartreeStockStatusResponse` | | +| dollarTree | `dollarTree.dollartreeKeywordTypeahead` | `dollartree-keyword-typeahead` | `GET /dollartree/typeahead/keywords` | `q` (query String required)
`viewport` (query String) | `ApiKeyAuth` | `DollarTreeDollartreeKeywordTypeaheadResponse` | | +| dollarTree | `dollarTree.dollartreeProductTypeahead` | `dollartree-product-typeahead` | `GET /dollartree/typeahead/products` | `q` (query String required)
`viewport` (query String) | `ApiKeyAuth` | `DollarTreeDollartreeProductTypeaheadResponse` | | +| domain | `domain.dnsRecordTypes` | `domain-dns-record-types` | `GET /domain/dns/record-types` | none | `ApiKeyAuth` | `DomainDnsRecordTypesResponse` | | +| domain | `domain.dnsResolve` | `domain-dns-resolve` | `GET /domain/dns/resolve` | `name` (query String required)
`type` (query String required) | `ApiKeyAuth` | `DomainDnsResolveResponse` | | +| domain | `domain.rdapDomain` | `domain-rdap-domain` | `GET /domain/rdap/domain/{domain}` | `domain` (path String required) | `ApiKeyAuth` | `DomainRdapDomainResponse` | | +| domain | `domain.rdapIp` | `domain-rdap-ip` | `GET /domain/rdap/ip` | `ip` (query String required) | `ApiKeyAuth` | `DomainRdapIpResponse` | | +| domain | `domain.robots` | `domain-robots` | `GET /domain/robots/{domain}` | `domain` (path String required) | `ApiKeyAuth` | `DomainRobotsResponse` | | +| domain | `domain.site` | `domain-site` | `GET /domain/site/{domain}` | `domain` (path String required) | `ApiKeyAuth` | `DomainSiteResponse` | | +| domain | `domain.subdomains` | `domain-subdomains` | `GET /domain/subdomains/{domain}` | `domain` (path String required) | `ApiKeyAuth` | `DomainSubdomainsResponse` | | +| domain | `domain.waybackAvailability` | `domain-wayback-availability` | `GET /domain/wayback/availability/{domain}` | `domain` (path String required) | `ApiKeyAuth` | `DomainWaybackAvailabilityResponse` | | +| domain | `domain.waybackCdx` | `domain-wayback-cdx` | `GET /domain/wayback/cdx/{domain}` | `domain` (path String required) | `ApiKeyAuth` | `DomainWaybackCdxResponse` | | | dominos | `dominos.coupons` | `dominos-coupons` | `GET /dominos/coupons` | `store_id` (query String required) | `ApiKeyAuth` | `DominosCouponsResponse` | | | dominos | `dominos.customization` | `dominos-customization` | `GET /dominos/customization` | `store_id` (query String required) | `ApiKeyAuth` | `DominosCustomizationResponse` | | | dominos | `dominos.menu` | `dominos-menu` | `GET /dominos/menu` | `store_id` (query String required) | `ApiKeyAuth` | `DominosMenuResponse` | | @@ -1028,14 +1151,57 @@ Total operations: `4140` | theExpressTribune | `theExpressTribune.expresstribuneSections` | `expresstribune-sections` | `GET /expresstribune/sections` | none | `ApiKeyAuth` | `TheExpressTribuneExpresstribuneSectionsResponse` | | | facebook | `facebook.marketplaceSearch` | `facebook-marketplace-search` | `GET /facebook/marketplace/search` | `location` (query String required)
`query` (query String)
`category` (query String)
`min_price` (query Integer)
`max_price` (query Integer)
`sort_by` (query String)
`days_since_listed` (query String)
`condition` (query String) | `ApiKeyAuth` | `FacebookMarketplaceSearchResponse` | | | facebook | `facebook.page` | `facebook-page` | `GET /facebook/{page}` | `page` (path String required) | `ApiKeyAuth` | `FacebookPageResponse` | | +| faceit | `faceit.banReasons` | `faceit-ban-reasons` | `GET /faceit/ban-reasons` | none | `ApiKeyAuth` | `FaceitBanReasonsResponse` | | +| faceit | `faceit.banlist` | `faceit-banlist` | `GET /faceit/banlist` | `size` (query Integer)
`cursor` (query String)
`reason` (query String) | `ApiKeyAuth` | `FaceitBanlistResponse` | | +| faceit | `faceit.banlistStats` | `faceit-banlist-stats` | `GET /faceit/banlist-stats` | none | `ApiKeyAuth` | `FaceitBanlistStatsResponse` | | +| faceit | `faceit.bestClips` | `faceit-best-clips` | `GET /faceit/best-clips` | `game` (query String required)
`user_id` (query String required)
`from` (query String required)
`to` (query String required)
`limit` (query Integer) | `ApiKeyAuth` | `FaceitBestClipsResponse` | | +| faceit | `faceit.championship` | `faceit-championship` | `GET /faceit/championship` | `id` (query String required) | `ApiKeyAuth` | `FaceitChampionshipResponse` | | +| faceit | `faceit.championshipBracket` | `faceit-championship-bracket` | `GET /faceit/championship-bracket` | `id` (query String required)
`group` (query Integer required)
`round` (query Integer required)
`start` (query Integer)
`end` (query Integer) | `ApiKeyAuth` | `FaceitChampionshipBracketResponse` | | +| faceit | `faceit.championshipParticipants` | `faceit-championship-participants` | `GET /faceit/championship-participants` | `id` (query String required)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `FaceitChampionshipParticipantsResponse` | | +| faceit | `faceit.championshipSearch` | `faceit-championship-search` | `GET /faceit/championship-search` | `entity_type` (query String)
`type` (query String)
`status` (query String)
`subtype` (query String)
`country` (query String)
`game` (query String)
`has_drops` (query Boolean)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `FaceitChampionshipSearchResponse` | | +| faceit | `faceit.clip` | `faceit-clip` | `GET /faceit/clip` | `id` (query String required) | `ApiKeyAuth` | `FaceitClipResponse` | | +| faceit | `faceit.clips` | `faceit-clips` | `GET /faceit/clips` | `game` (query String required)
`user_id` (query String required)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `FaceitClipsResponse` | | +| faceit | `faceit.competitionMatches` | `faceit-competition-matches` | `GET /faceit/competition-matches` | `id` (query String required)
`type` (query String required)
`player_id` (query String)
`page` (query Integer)
`size` (query Integer) | `ApiKeyAuth` | `FaceitCompetitionMatchesResponse` | | +| faceit | `faceit.fpl` | `faceit-fpl` | `GET /faceit/fpl` | `game` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `FaceitFplResponse` | | +| faceit | `faceit.gameModes` | `faceit-game-modes` | `GET /faceit/game-modes` | `game` (query String required)
`region` (query String required) | `ApiKeyAuth` | `FaceitGameModesResponse` | | +| faceit | `faceit.games` | `faceit-games` | `GET /faceit/games` | none | `ApiKeyAuth` | `FaceitGamesResponse` | | +| faceit | `faceit.hub` | `faceit-hub` | `GET /faceit/hub` | `id` (query String required) | `ApiKeyAuth` | `FaceitHubResponse` | | +| faceit | `faceit.hubCategories` | `faceit-hub-categories` | `GET /faceit/hub-categories` | none | `ApiKeyAuth` | `FaceitHubCategoriesResponse` | | +| faceit | `faceit.hubMemberships` | `faceit-hub-memberships` | `GET /faceit/hub-memberships` | `user_id` (query String required)
`category` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `FaceitHubMembershipsResponse` | | +| faceit | `faceit.hubs` | `faceit-hubs` | `GET /faceit/hubs` | `ids` (query List required) | `ApiKeyAuth` | `FaceitHubsResponse` | | +| faceit | `faceit.hubsDetailed` | `faceit-hubs-detailed` | `GET /faceit/hubs-detailed` | `ids` (query List required) | `ApiKeyAuth` | `FaceitHubsDetailedResponse` | | +| faceit | `faceit.leaderboard` | `faceit-leaderboard` | `GET /faceit/leaderboard` | `game` (query String required)
`region` (query String required)
`season` (query Integer)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `FaceitLeaderboardResponse` | | +| faceit | `faceit.leaderboardDetail` | `faceit-leaderboard-detail` | `GET /faceit/leaderboard-detail` | `id` (query String required) | `ApiKeyAuth` | `FaceitLeaderboardDetailResponse` | | +| faceit | `faceit.leaderboardStatuses` | `faceit-leaderboard-statuses` | `GET /faceit/leaderboard-statuses` | none | `ApiKeyAuth` | `FaceitLeaderboardStatusesResponse` | | +| faceit | `faceit.maps` | `faceit-maps` | `GET /faceit/maps` | `game` (query String required) | `ApiKeyAuth` | `FaceitMapsResponse` | | +| faceit | `faceit.matchClips` | `faceit-match-clips` | `GET /faceit/match-clips` | `game` (query String required)
`match_id` (query String required)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `FaceitMatchClipsResponse` | | +| faceit | `faceit.organizer` | `faceit-organizer` | `GET /faceit/organizer` | `id` (query String required) | `ApiKeyAuth` | `FaceitOrganizerResponse` | | +| faceit | `faceit.player` | `faceit-player` | `GET /faceit/player` | `nickname` (query String)
`user_id` (query String) | `ApiKeyAuth` | `FaceitPlayerResponse` | | +| faceit | `faceit.playerRank` | `faceit-player-rank` | `GET /faceit/player-rank` | `game` (query String required)
`region` (query String required)
`nickname` (query String)
`user_id` (query String)
`season` (query Integer) | `ApiKeyAuth` | `FaceitPlayerRankResponse` | | +| faceit | `faceit.regions` | `faceit-regions` | `GET /faceit/regions` | none | `ApiKeyAuth` | `FaceitRegionsResponse` | | +| faceit | `faceit.rule` | `faceit-rule` | `GET /faceit/rule` | `id` (query String required) | `ApiKeyAuth` | `FaceitRuleResponse` | | +| faceit | `faceit.rules` | `faceit-rules` | `GET /faceit/rules` | `limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `FaceitRulesResponse` | | +| faceit | `faceit.skillLevels` | `faceit-skill-levels` | `GET /faceit/skill-levels` | `game` (query String required) | `ApiKeyAuth` | `FaceitSkillLevelsResponse` | | +| faceit | `faceit.standings` | `faceit-standings` | `GET /faceit/standings` | `entity_id` (query String required)
`group` (query Integer required)
`round` (query String required)
`segment` (query Integer)
`match` (query Integer) | `ApiKeyAuth` | `FaceitStandingsResponse` | | +| faceit | `faceit.team` | `faceit-team` | `GET /faceit/team` | `id` (query String required) | `ApiKeyAuth` | `FaceitTeamResponse` | | +| faceit | `faceit.tournamentsPast` | `faceit-tournaments-past` | `GET /faceit/tournaments-past` | `nickname` (query String required)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `FaceitTournamentsPastResponse` | | +| faceit | `faceit.userSkills` | `faceit-user-skills` | `GET /faceit/user-skills` | `user_ids` (query List required)
`game` (query String required) | `ApiKeyAuth` | `FaceitUserSkillsResponse` | | | fanatics | `fanatics.categories` | `fanatics-categories` | `GET /fanatics/categories` | none | `ApiKeyAuth` | `FanaticsCategoriesResponse` | | | fanatics | `fanatics.category` | `fanatics-category` | `GET /fanatics/category` | `url` (query String required)
`page_number` (query Integer)
`page_size` (query Integer)
`sort` (query String) | `ApiKeyAuth` | `FanaticsCategoryResponse` | | | fanatics | `fanatics.product` | `fanatics-product` | `GET /fanatics/product` | `url` (query String required) | `ApiKeyAuth` | `FanaticsProductResponse` | | | fanatics | `fanatics.search` | `fanatics-search` | `GET /fanatics/search` | `query` (query String required)
`page_number` (query Integer)
`page_size` (query Integer)
`sort` (query String) | `ApiKeyAuth` | `FanaticsSearchResponse` | | | fanaticsCollect | `fanaticsCollect.fanaticscollectAuctions` | `fanaticscollect-auctions` | `GET /fanaticscollect/auctions` | none | `ApiKeyAuth` | `FanaticsCollectFanaticscollectAuctionsResponse` | | | fanaticsCollect | `fanaticsCollect.fanaticscollectCategories` | `fanaticscollect-categories` | `GET /fanaticscollect/categories` | none | `ApiKeyAuth` | `FanaticsCollectFanaticscollectCategoriesResponse` | | +| fanaticsCollect | `fanaticsCollect.fanaticscollectInstantPackRelease` | `fanaticscollect-instant-pack-release` | `GET /fanaticscollect/instant-packs/release` | `checklist_id` (query String required) | `ApiKeyAuth` | `FanaticsCollectFanaticscollectInstantPackReleaseResponse` | | +| fanaticsCollect | `fanaticsCollect.fanaticscollectInstantPackReleases` | `fanaticscollect-instant-pack-releases` | `GET /fanaticscollect/instant-packs/releases` | none | `ApiKeyAuth` | `FanaticsCollectFanaticscollectInstantPackReleasesResponse` | | | fanaticsCollect | `fanaticsCollect.fanaticscollectInstantRipsCategories` | `fanaticscollect-instant-rips-categories` | `GET /fanaticscollect/instant-rips/categories` | none | `ApiKeyAuth` | `FanaticsCollectFanaticscollectInstantRipsCategoriesResponse` | | +| fanaticsCollect | `fanaticsCollect.fanaticscollectInstantRipsPackCategories` | `fanaticscollect-instant-rips-pack-categories` | `GET /fanaticscollect/instant-rips/pack-categories` | none | `ApiKeyAuth` | `FanaticsCollectFanaticscollectInstantRipsPackCategoriesResponse` | | +| fanaticsCollect | `fanaticsCollect.fanaticscollectInstantRipsPackChecklist` | `fanaticscollect-instant-rips-pack-checklist` | `GET /fanaticscollect/instant-rips/pack-checklist` | `checklist_id` (query String required)
`tier` (query String)
`cursor` (query String) | `ApiKeyAuth` | `FanaticsCollectFanaticscollectInstantRipsPackChecklistResponse` | | +| fanaticsCollect | `fanaticsCollect.fanaticscollectInstantRipsPacks` | `fanaticscollect-instant-rips-packs` | `GET /fanaticscollect/instant-rips/packs` | `category_id` (query String required) | `ApiKeyAuth` | `FanaticsCollectFanaticscollectInstantRipsPacksResponse` | | +| fanaticsCollect | `fanaticsCollect.fanaticscollectRecentlyRipped` | `fanaticscollect-recently-ripped` | `GET /fanaticscollect/instant-rips/recently-ripped` | `checklist_id` (query String) | `ApiKeyAuth` | `FanaticsCollectFanaticscollectRecentlyRippedResponse` | | | fanaticsCollect | `fanaticsCollect.fanaticscollectListing` | `fanaticscollect-listing` | `GET /fanaticscollect/listing/{id}` | `id` (path String required)
`type` (query String) | `ApiKeyAuth` | `FanaticsCollectFanaticscollectListingResponse` | | +| fanaticsCollect | `fanaticsCollect.fanaticscollectNewsroom` | `fanaticscollect-newsroom` | `GET /fanaticscollect/newsroom` | `page` (query Integer)
`category` (query String)
`tags` (query String)
`sort_by` (query String) | `ApiKeyAuth` | `FanaticsCollectFanaticscollectNewsroomResponse` | | +| fanaticsCollect | `fanaticsCollect.fanaticscollectNewsroomFilters` | `fanaticscollect-newsroom-filters` | `GET /fanaticscollect/newsroom/filters` | none | `ApiKeyAuth` | `FanaticsCollectFanaticscollectNewsroomFiltersResponse` | | | fanaticsCollect | `fanaticsCollect.fanaticscollectSearch` | `fanaticscollect-search` | `GET /fanaticscollect/search` | `q` (query String)
`marketplace` (query String)
`category_parent` (query String)
`sub_category` (query String)
`grading_service` (query String)
`certified_seller` (query String)
`seller_id` (query String)
`brand` (query String)
`auction_urn` (query String)
`status` (query String)
`allow_offers` (query Boolean)
`has_offers` (query Boolean)
`great_price` (query Boolean)
`min_price` (query Double)
`max_price` (query Double)
`min_year` (query Integer)
`max_year` (query Integer)
`min_grade` (query Double)
`max_grade` (query Double)
`sort` (query String)
`page` (query Integer)
`per_page` (query Integer) | `ApiKeyAuth` | `FanaticsCollectFanaticscollectSearchResponse` | | | fanaticsCollect | `fanaticsCollect.fanaticscollectSoldItems` | `fanaticscollect-sold-items` | `GET /fanaticscollect/sold-items` | `title` (query String)
`category` (query String)
`grading_service` (query String)
`eye_appeal_grade` (query String)
`min_year` (query Integer)
`max_year` (query Integer)
`min_price` (query Double)
`max_price` (query Double)
`sort` (query String)
`page` (query Integer)
`per_page` (query Integer) | `ApiKeyAuth` | `FanaticsCollectFanaticscollectSoldItemsResponse` | | | fanaticsCollect | `fanaticsCollect.fanaticscollectTrendingSearches` | `fanaticscollect-trending-searches` | `GET /fanaticscollect/trending-searches` | `limit` (query Integer) | `ApiKeyAuth` | `FanaticsCollectFanaticscollectTrendingSearchesResponse` | | @@ -1151,6 +1317,12 @@ Total operations: `4140` | fastCompany | `fastCompany.fastcompanyHeadlines` | `fastcompany-headlines` | `GET /fastcompany/headlines` | `section` (query String required) | `ApiKeyAuth` | `FastCompanyFastcompanyHeadlinesResponse` | | | fastCompany | `fastCompany.fastcompanyNews` | `fastcompany-news` | `GET /fastcompany/news` | none | `ApiKeyAuth` | `FastCompanyFastcompanyNewsResponse` | | | fastCompany | `fastCompany.fastcompanySections` | `fastcompany-sections` | `GET /fastcompany/sections` | none | `ApiKeyAuth` | `FastCompanyFastcompanySectionsResponse` | | +| fever | `fever.cities` | `fever-cities` | `GET /fever/cities` | `query` (query String required)
`locale` (query String) | `ApiKeyAuth` | `FeverCitiesResponse` | | +| fever | `fever.feed` | `fever-feed` | `GET /fever/feed` | `city_code` (query String required)
`pill_id` (query String) | `ApiKeyAuth` | `FeverFeedResponse` | | +| fever | `fever.filters` | `fever-filters` | `GET /fever/filters` | `city_code` (query String required) | `ApiKeyAuth` | `FeverFiltersResponse` | | +| fever | `fever.plan` | `fever-plan` | `GET /fever/plan` | `plan_id` (query Integer required) | `ApiKeyAuth` | `FeverPlanResponse` | | +| fever | `fever.plans` | `fever-plans` | `GET /fever/plans` | `city_code` (query String required)
`query` (query String)
`locale` (query String)
`latitude` (query Double)
`longitude` (query Double)
`page` (query Integer)
`page_size` (query Integer)
`whatplanfilter_id` (query String)
`date_start` (query Integer)
`date_end` (query Integer)
`sort_type` (query String) | `ApiKeyAuth` | `FeverPlansResponse` | | +| fever | `fever.topCities` | `fever-top-cities` | `GET /fever/top-cities` | none | `ApiKeyAuth` | `FeverTopCitiesResponse` | | | fiveGuys | `fiveGuys.fiveguysDirectory` | `fiveguys-directory` | `GET /fiveguys/directory` | `path` (query String) | `ApiKeyAuth` | `FiveGuysFiveguysDirectoryResponse` | | | fiveGuys | `fiveGuys.fiveguysFaq` | `fiveguys-faq` | `GET /fiveguys/faq` | `search` (query String)
`category` (query String)
`page` (query Integer)
`per_page` (query Integer)
`lang` (query String) | `ApiKeyAuth` | `FiveGuysFiveguysFaqResponse` | | | fiveGuys | `fiveGuys.fiveguysFaqCategories` | `fiveguys-faq-categories` | `GET /fiveguys/faq-categories` | `lang` (query String) | `ApiKeyAuth` | `FiveGuysFiveguysFaqCategoriesResponse` | | @@ -1169,9 +1341,11 @@ Total operations: `4140` | flashscore | `flashscore.competitions` | `flashscore-competitions` | `GET /flashscore/competitions` | `sport` (query String required)
`day_offset` (query Integer) | `ApiKeyAuth` | `FlashscoreCompetitionsResponse` | | | flashscore | `flashscore.entityNews` | `flashscore-entity-news` | `GET /flashscore/entity-news` | `type` (query String required)
`id` (query String required) | `ApiKeyAuth` | `FlashscoreEntityNewsResponse` | | | flashscore | `flashscore.matchBoxScore` | `flashscore-match-box-score` | `GET /flashscore/match-box-score` | `id` (query String required) | `ApiKeyAuth` | `FlashscoreMatchBoxScoreResponse` | | +| flashscore | `flashscore.matchCommentary` | `flashscore-match-commentary` | `GET /flashscore/match-commentary` | `id` (query String required) | `ApiKeyAuth` | `FlashscoreMatchCommentaryResponse` | | | flashscore | `flashscore.matchDarts` | `flashscore-match-darts` | `GET /flashscore/match-darts` | `id` (query String required) | `ApiKeyAuth` | `FlashscoreMatchDartsResponse` | | | flashscore | `flashscore.matchH2h` | `flashscore-match-h2h` | `GET /flashscore/match-h2h` | `id` (query String required) | `ApiKeyAuth` | `FlashscoreMatchH2hResponse` | | | flashscore | `flashscore.matchHighlights` | `flashscore-match-highlights` | `GET /flashscore/match-highlights` | `id` (query String required) | `ApiKeyAuth` | `FlashscoreMatchHighlightsResponse` | | +| flashscore | `flashscore.matchIncidents` | `flashscore-match-incidents` | `GET /flashscore/match-incidents` | `id` (query String required) | `ApiKeyAuth` | `FlashscoreMatchIncidentsResponse` | | | flashscore | `flashscore.matchInfo` | `flashscore-match-info` | `GET /flashscore/match-info` | `id` (query String required) | `ApiKeyAuth` | `FlashscoreMatchInfoResponse` | | | flashscore | `flashscore.matchLineups` | `flashscore-match-lineups` | `GET /flashscore/match-lineups` | `id` (query String required) | `ApiKeyAuth` | `FlashscoreMatchLineupsResponse` | | | flashscore | `flashscore.matchMissingPlayers` | `flashscore-match-missing-players` | `GET /flashscore/match-missing-players` | `id` (query String required) | `ApiKeyAuth` | `FlashscoreMatchMissingPlayersResponse` | | @@ -1181,6 +1355,7 @@ Total operations: `4140` | flashscore | `flashscore.matchPlayerStats` | `flashscore-match-player-stats` | `GET /flashscore/match-player-stats` | `id` (query String required)
`player_id` (query String)
`group` (query String) | `ApiKeyAuth` | `FlashscoreMatchPlayerStatsResponse` | | | flashscore | `flashscore.matchPointByPoint` | `flashscore-match-point-by-point` | `GET /flashscore/match-point-by-point` | `id` (query String required) | `ApiKeyAuth` | `FlashscoreMatchPointByPointResponse` | | | flashscore | `flashscore.matchPredictedLineups` | `flashscore-match-predicted-lineups` | `GET /flashscore/match-predicted-lineups` | `id` (query String required) | `ApiKeyAuth` | `FlashscoreMatchPredictedLineupsResponse` | | +| flashscore | `flashscore.matchPrematchScorers` | `flashscore-match-prematch-scorers` | `GET /flashscore/match-prematch-scorers` | `id` (query String required) | `ApiKeyAuth` | `FlashscoreMatchPrematchScorersResponse` | | | flashscore | `flashscore.matchReport` | `flashscore-match-report` | `GET /flashscore/match-report` | `id` (query String required) | `ApiKeyAuth` | `FlashscoreMatchReportResponse` | | | flashscore | `flashscore.matchStandings` | `flashscore-match-standings` | `GET /flashscore/match-standings` | `id` (query String required)
`view` (query String) | `ApiKeyAuth` | `FlashscoreMatchStandingsResponse` | | | flashscore | `flashscore.matchStats` | `flashscore-match-stats` | `GET /flashscore/match-stats` | `id` (query String required) | `ApiKeyAuth` | `FlashscoreMatchStatsResponse` | | @@ -1213,11 +1388,17 @@ Total operations: `4140` | flashscore | `flashscore.teamTransfers` | `flashscore-team-transfers` | `GET /flashscore/team-transfers` | `id` (query String required)
`type` (query String)
`page` (query Integer) | `ApiKeyAuth` | `FlashscoreTeamTransfersResponse` | | | flashscore | `flashscore.topSearch` | `flashscore-top-search` | `GET /flashscore/top-search` | none | `ApiKeyAuth` | `FlashscoreTopSearchResponse` | | | flashscore | `flashscore.tournamentArchiveSeasons` | `flashscore-tournament-archive-seasons` | `GET /flashscore/tournament-archive-seasons` | `stage_id` (query String required) | `ApiKeyAuth` | `FlashscoreTournamentArchiveSeasonsResponse` | | +| flashscore | `flashscore.tournamentDraw` | `flashscore-tournament-draw` | `GET /flashscore/tournament-draw` | `tournament_id` (query String required)
`stage_id` (query String required) | `ApiKeyAuth` | `FlashscoreTournamentDrawResponse` | | | flashscore | `flashscore.tournamentEvents` | `flashscore-tournament-events` | `GET /flashscore/tournament-events` | `path` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `FlashscoreTournamentEventsResponse` | | | flashscore | `flashscore.tournamentOutrightOdds` | `flashscore-tournament-outright-odds` | `GET /flashscore/tournament-outright-odds` | `tournament_id` (query String required)
`geo` (query String)
`subdivision` (query String) | `ApiKeyAuth` | `FlashscoreTournamentOutrightOddsResponse` | | | flashscore | `flashscore.tournamentSeasons` | `flashscore-tournament-seasons` | `GET /flashscore/tournament-seasons` | `path` (query String required) | `ApiKeyAuth` | `FlashscoreTournamentSeasonsResponse` | | | flashscore | `flashscore.tournamentStandings` | `flashscore-tournament-standings` | `GET /flashscore/tournament-standings` | `path` (query String required)
`view` (query String) | `ApiKeyAuth` | `FlashscoreTournamentStandingsResponse` | | | flashscore | `flashscore.tournamentStandingsViews` | `flashscore-tournament-standings-views` | `GET /flashscore/tournament-standings-views` | `path` (query String required) | `ApiKeyAuth` | `FlashscoreTournamentStandingsViewsResponse` | | +| flickReels | `flickReels.flickreelsClassify` | `flickreels-classify` | `GET /flickreels/classify` | `tag_id` (query Integer required)
`slug` (query String required)
`page` (query Integer)
`language` (query String) | `ApiKeyAuth` | `FlickReelsFlickreelsClassifyResponse` | | +| flickReels | `flickReels.flickreelsGenres` | `flickreels-genres` | `GET /flickreels/genres` | `language` (query String) | `ApiKeyAuth` | `FlickReelsFlickreelsGenresResponse` | | +| flickReels | `flickReels.flickreelsHome` | `flickreels-home` | `GET /flickreels/home` | `language` (query String) | `ApiKeyAuth` | `FlickReelsFlickreelsHomeResponse` | | +| flickReels | `flickReels.flickreelsMovie` | `flickreels-movie` | `GET /flickreels/movie` | `title_id` (query Integer required)
`slug` (query String required)
`language` (query String) | `ApiKeyAuth` | `FlickReelsFlickreelsMovieResponse` | | +| flickReels | `flickReels.flickreelsShelf` | `flickreels-shelf` | `GET /flickreels/shelf` | `shelf_id` (query Integer required)
`slug` (query String)
`page` (query Integer)
`language` (query String) | `ApiKeyAuth` | `FlickReelsFlickreelsShelfResponse` | | | foodpanda | `foodpanda.restaurant` | `foodpanda-restaurant` | `GET /foodpanda/restaurant` | `market` (query String)
`code` (query String required)
`latitude` (query Double)
`longitude` (query Double) | `ApiKeyAuth` | `FoodpandaRestaurantResponse` | | | foodpanda | `foodpanda.restaurantMenu` | `foodpanda-restaurant-menu` | `GET /foodpanda/restaurant/menu` | `market` (query String)
`code` (query String required) | `ApiKeyAuth` | `FoodpandaRestaurantMenuResponse` | | | foodpanda | `foodpanda.restaurantReviews` | `foodpanda-restaurant-reviews` | `GET /foodpanda/restaurant/reviews` | `market` (query String)
`code` (query String required) | `ApiKeyAuth` | `FoodpandaRestaurantReviewsResponse` | | @@ -1242,6 +1423,34 @@ Total operations: `4140` | foreignPolicy | `foreignPolicy.foreignpolicyProject` | `foreignpolicy-project` | `GET /foreignpolicy/project` | `project` (query String required) | `ApiKeyAuth` | `ForeignPolicyForeignpolicyProjectResponse` | | | foreignPolicy | `foreignPolicy.foreignpolicyProjects` | `foreignpolicy-projects` | `GET /foreignpolicy/projects` | `page` (query Integer) | `ApiKeyAuth` | `ForeignPolicyForeignpolicyProjectsResponse` | | | foreignPolicy | `foreignPolicy.foreignpolicyTopic` | `foreignpolicy-topic` | `GET /foreignpolicy/topic` | `type` (query String)
`topic` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `ForeignPolicyForeignpolicyTopicResponse` | | +| formula1 | `formula1.driver` | `formula1-driver` | `GET /formula1/driver` | `driver_slug` (query String required) | `ApiKeyAuth` | `Formula1DriverResponse` | | +| formula1 | `formula1.driverGrid` | `formula1-driver-grid` | `GET /formula1/driver-grid` | none | `ApiKeyAuth` | `Formula1DriverGridResponse` | | +| formula1 | `formula1.driverSeasonResults` | `formula1-driver-season-results` | `GET /formula1/driver-season-results` | `driver_code` (query String required)
`season` (query Integer)
`driver_slug` (query String) | `ApiKeyAuth` | `Formula1DriverSeasonResultsResponse` | | +| formula1 | `formula1.driverStandings` | `formula1-driver-standings` | `GET /formula1/driver-standings` | `season` (query Integer) | `ApiKeyAuth` | `Formula1DriverStandingsResponse` | | +| formula1 | `formula1.filters` | `formula1-filters` | `GET /formula1/filters` | none | `ApiKeyAuth` | `Formula1FiltersResponse` | | +| formula1 | `formula1.jsonAwards` | `formula1-json-awards` | `GET /formula1/json/awards` | `season` (query Integer required) | `ApiKeyAuth` | `Formula1JsonAwardsResponse` | | +| formula1 | `formula1.jsonConstructors` | `formula1-json-constructors` | `GET /formula1/json/constructors` | `season` (query Integer required) | `ApiKeyAuth` | `Formula1JsonConstructorsResponse` | | +| formula1 | `formula1.jsonDriverAssembly` | `formula1-json-driver-assembly` | `GET /formula1/json/driver-assembly` | `reference` (query String)
`identifier` (query String) | `ApiKeyAuth` | `Formula1JsonDriverAssemblyResponse` | | +| formula1 | `formula1.jsonDrivers` | `formula1-json-drivers` | `GET /formula1/json/drivers` | `season` (query Integer required) | `ApiKeyAuth` | `Formula1JsonDriversResponse` | | +| formula1 | `formula1.jsonEditorial` | `formula1-json-editorial` | `GET /formula1/json/editorial` | `resource` (query String required)
`season` (query Integer) | `ApiKeyAuth` | `Formula1JsonEditorialResponse` | | +| formula1 | `formula1.jsonEventTracker` | `formula1-json-event-tracker` | `GET /formula1/json/event-tracker` | none | `ApiKeyAuth` | `Formula1JsonEventTrackerResponse` | | +| formula1 | `formula1.jsonMeetingDatasets` | `formula1-json-meeting-datasets` | `GET /formula1/json/meeting-datasets` | `season` (query Integer required)
`meeting` (query Integer required) | `ApiKeyAuth` | `Formula1JsonMeetingDatasetsResponse` | | +| formula1 | `formula1.jsonMeetings` | `formula1-json-meetings` | `GET /formula1/json/meetings` | `season` (query Integer required) | `ApiKeyAuth` | `Formula1JsonMeetingsResponse` | | +| formula1 | `formula1.jsonRaceAssembly` | `formula1-json-race-assembly` | `GET /formula1/json/race-assembly` | `meeting` (query Integer)
`season` (query Integer)
`identifier` (query String) | `ApiKeyAuth` | `Formula1JsonRaceAssemblyResponse` | | +| formula1 | `formula1.jsonResults` | `formula1-json-results` | `GET /formula1/json/results` | `meeting` (query Integer required)
`dataset` (query String required)
`session` (query Integer) | `ApiKeyAuth` | `Formula1JsonResultsResponse` | | +| formula1 | `formula1.jsonSeasonAward` | `formula1-json-season-award` | `GET /formula1/json/season-award` | `season` (query Integer required)
`award` (query String required) | `ApiKeyAuth` | `Formula1JsonSeasonAwardResponse` | | +| formula1 | `formula1.jsonTeamAssembly` | `formula1-json-team-assembly` | `GET /formula1/json/team-assembly` | `key` (query String)
`identifier` (query String) | `ApiKeyAuth` | `Formula1JsonTeamAssemblyResponse` | | +| formula1 | `formula1.meetings` | `formula1-meetings` | `GET /formula1/meetings` | `season` (query Integer) | `ApiKeyAuth` | `Formula1MeetingsResponse` | | +| formula1 | `formula1.raceCalendar` | `formula1-race-calendar` | `GET /formula1/race-calendar` | `season` (query Integer) | `ApiKeyAuth` | `Formula1RaceCalendarResponse` | | +| formula1 | `formula1.raceHub` | `formula1-race-hub` | `GET /formula1/race-hub` | `event_slug` (query String required)
`season` (query Integer) | `ApiKeyAuth` | `Formula1RaceHubResponse` | | +| formula1 | `formula1.seasonAwards` | `formula1-season-awards` | `GET /formula1/season-awards` | `season` (query Integer)
`award` (query String required) | `ApiKeyAuth` | `Formula1SeasonAwardsResponse` | | +| formula1 | `formula1.seasonResults` | `formula1-season-results` | `GET /formula1/season-results` | `season` (query Integer) | `ApiKeyAuth` | `Formula1SeasonResultsResponse` | | +| formula1 | `formula1.seasons` | `formula1-seasons` | `GET /formula1/seasons` | none | `ApiKeyAuth` | `Formula1SeasonsResponse` | | +| formula1 | `formula1.sessionResults` | `formula1-session-results` | `GET /formula1/session-results` | `meeting_id` (query Integer required)
`session` (query String required)
`season` (query Integer)
`meeting_slug` (query String) | `ApiKeyAuth` | `Formula1SessionResultsResponse` | | +| formula1 | `formula1.team` | `formula1-team` | `GET /formula1/team` | `team_slug` (query String required) | `ApiKeyAuth` | `Formula1TeamResponse` | | +| formula1 | `formula1.teamGrid` | `formula1-team-grid` | `GET /formula1/team-grid` | none | `ApiKeyAuth` | `Formula1TeamGridResponse` | | +| formula1 | `formula1.teamSeasonResults` | `formula1-team-season-results` | `GET /formula1/team-season-results` | `team` (query String required)
`season` (query Integer) | `ApiKeyAuth` | `Formula1TeamSeasonResultsResponse` | | +| formula1 | `formula1.teamStandings` | `formula1-team-standings` | `GET /formula1/team-standings` | `season` (query Integer) | `ApiKeyAuth` | `Formula1TeamStandingsResponse` | | | fortune | `fortune.article` | `fortune-article` | `GET /fortune/article` | `url` (query String required) | `ApiKeyAuth` | `FortuneArticleResponse` | | | fortune | `fortune.author` | `fortune-author` | `GET /fortune/author` | `slug` (query String)
`url` (query String)
`page` (query Integer) | `ApiKeyAuth` | `FortuneAuthorResponse` | | | fortune | `fortune.companies` | `fortune-companies` | `GET /fortune/companies` | `search` (query String)
`country` (query String)
`industry` (query String)
`ranking` (query String)
`year` (query String)
`min_revenue` (query Integer)
`max_revenue` (query Integer)
`min_employees` (query Integer)
`max_employees` (query Integer)
`page` (query Integer) | `ApiKeyAuth` | `FortuneCompaniesResponse` | | @@ -1302,6 +1511,10 @@ Total operations: `4140` | france24 | `france24.france24Sections` | `france24-sections` | `GET /france24/sections` | none | `ApiKeyAuth` | `France24France24SectionsResponse` | | | freeMalaysiaToday | `freeMalaysiaToday.freemalaysiatodayNews` | `freemalaysiatoday-news` | `GET /freemalaysiatoday/news` | none | `ApiKeyAuth` | `FreeMalaysiaTodayFreemalaysiatodayNewsResponse` | | | freeMalaysiaToday | `freeMalaysiaToday.freemalaysiatodaySections` | `freemalaysiatoday-sections` | `GET /freemalaysiatoday/sections` | none | `ApiKeyAuth` | `FreeMalaysiaTodayFreemalaysiatodaySectionsResponse` | | +| fresha | `fresha.landingVenues` | `fresha-landing-venues` | `GET /fresha/landing-venues` | `city` (query String required)
`business_type` (query String)
`treatment_type` (query String) | `ApiKeyAuth` | `FreshaLandingVenuesResponse` | | +| fresha | `fresha.searchVenues` | `fresha-search-venues` | `GET /fresha/search-venues` | `query` (query String)
`latitude` (query Double)
`longitude` (query Double)
`sort` (query String)
`min_price` (query Double)
`service_gender` (query String)
`awards` (query String)
`treatment_category_id` (query String)
`treatment_tag_id` (query String)
`treatment_type_id` (query String)
`first` (query Integer)
`after` (query String) | `ApiKeyAuth` | `FreshaSearchVenuesResponse` | | +| fresha | `fresha.taxonomy` | `fresha-taxonomy` | `GET /fresha/taxonomy` | `query` (query String)
`first` (query Integer)
`start` (query Integer) | `ApiKeyAuth` | `FreshaTaxonomyResponse` | | +| fresha | `fresha.venue` | `fresha-venue` | `GET /fresha/venue` | `slug` (query String required) | `ApiKeyAuth` | `FreshaVenueResponse` | | | ft | `ft.article` | `ft-article` | `GET /ft/article` | `url` (query String required) | `ApiKeyAuth` | `FtArticleResponse` | | | ft | `ft.author` | `ft-author` | `GET /ft/author` | `slug` (query String)
`url` (query String)
`page` (query Integer) | `ApiKeyAuth` | `FtAuthorResponse` | | | ft | `ft.categories` | `ft-categories` | `GET /ft/categories` | none | `ApiKeyAuth` | `FtCategoriesResponse` | | @@ -1335,6 +1548,27 @@ Total operations: `4140` | fussballDe | `fussballDe.fussballdeTeamMatches` | `fussballde-team-matches` | `GET /fussballde/team-matches` | `team_id` (query String required)
`kind` (query String)
`date_from` (query String)
`date_to` (query String)
`competition_kind` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `FussballDeFussballdeTeamMatchesResponse` | | | fussballDe | `fussballDe.fussballdeTeamSquad` | `fussballde-team-squad` | `GET /fussballde/team-squad` | `team_id` (query String required)
`season` (query String)
`kind` (query String) | `ApiKeyAuth` | `FussballDeFussballdeTeamSquadResponse` | | | fussballDe | `fussballDe.fussballdeTopScorers` | `fussballde-top-scorers` | `GET /fussballde/top-scorers` | `competition_id` (query String required)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `FussballDeFussballdeTopScorersResponse` | | +| futGg | `futGg.futggFc27Catalog` | `futgg-fc27-catalog` | `GET /futgg/fc27/catalog` | none | `ApiKeyAuth` | `FutGgFutggFc27CatalogResponse` | | +| futGg | `futGg.futggFc27Definitions` | `futgg-fc27-definitions` | `GET /futgg/fc27/definitions` | `ids` (query String required) | `ApiKeyAuth` | `FutGgFutggFc27DefinitionsResponse` | | +| futGg | `futGg.futggFc27Evolutions` | `futgg-fc27-evolutions` | `GET /futgg/fc27/evolutions` | `page` (query Integer)
`page_size` (query Integer)
`name` (query String)
`only_expired` (query Boolean)
`include_cosmetics` (query Boolean)
`no_pagination` (query Boolean) | `ApiKeyAuth` | `FutGgFutggFc27EvolutionsResponse` | | +| futGg | `futGg.futggFc27Evolution` | `futgg-fc27-evolution` | `GET /futgg/fc27/evolutions/{slug}` | `slug` (path String required) | `ApiKeyAuth` | `FutGgFutggFc27EvolutionResponse` | | +| futGg | `futGg.futggFc27GgRatingRanks` | `futgg-fc27-gg-rating-ranks` | `GET /futgg/fc27/gg-rating-ranks` | none | `ApiKeyAuth` | `FutGgFutggFc27GgRatingRanksResponse` | | +| futGg | `futGg.futggFc27GgRatings` | `futgg-fc27-gg-ratings` | `GET /futgg/fc27/gg-ratings` | none | `ApiKeyAuth` | `FutGgFutggFc27GgRatingsResponse` | | +| futGg | `futGg.futggFc27ObjectiveCategories` | `futgg-fc27-objective-categories` | `GET /futgg/fc27/objective-categories` | none | `ApiKeyAuth` | `FutGgFutggFc27ObjectiveCategoriesResponse` | | +| futGg | `futGg.futggFc27ObjectiveGroups` | `futgg-fc27-objective-groups` | `GET /futgg/fc27/objectives` | `page` (query Integer)
`page_size` (query Integer)
`category_slug` (query String)
`no_pagination` (query Boolean)
`hide_expired` (query Boolean)
`include_unreleased` (query Boolean) | `ApiKeyAuth` | `FutGgFutggFc27ObjectiveGroupsResponse` | | +| futGg | `futGg.futggFc27ObjectiveGroupByEa` | `futgg-fc27-objective-group-by-ea` | `GET /futgg/fc27/objectives/by-ea/{id}` | `id` (path Integer required) | `ApiKeyAuth` | `FutGgFutggFc27ObjectiveGroupByEaResponse` | | +| futGg | `futGg.futggFc27ObjectiveGroupByObjective` | `futgg-fc27-objective-group-by-objective` | `GET /futgg/fc27/objectives/by-objective/{id}` | `id` (path Integer required) | `ApiKeyAuth` | `FutGgFutggFc27ObjectiveGroupByObjectiveResponse` | | +| futGg | `futGg.futggFc27ObjectiveGroup` | `futgg-fc27-objective-group` | `GET /futgg/fc27/objectives/{slug}` | `slug` (path String required) | `ApiKeyAuth` | `FutGgFutggFc27ObjectiveGroupResponse` | | +| futGg | `futGg.futggFc27PlayerSorts` | `futgg-fc27-player-sorts` | `GET /futgg/fc27/player-sorts` | `platform` (query String) | `ApiKeyAuth` | `FutGgFutggFc27PlayerSortsResponse` | | +| futGg | `futGg.futggFc27Players` | `futgg-fc27-players` | `GET /futgg/fc27/players` | `nation_id` (query Integer)
`league_id` (query Integer)
`club_id` (query Integer)
`rarity_id` (query Integer)
`positions` (query String)
`foot` (query String)
`gender` (query String)
`body_types` (query String)
`accelerate_types` (query String)
`name` (query String)
`skill_moves` (query String)
`weak_foot` (query String)
`holographic_type` (query String)
`show_holographics` (query String)
`overall__gte` (query Integer)
`overall__lte` (query Integer)
`grading_score__gte` (query Integer)
`grading_score__lte` (query Integer)
`price__gte` (query Integer)
`price__lte` (query Integer)
`number_of_positions__gte` (query Integer)
`number_of_positions__lte` (query Integer)
`playstyles_count__gte` (query Integer)
`playstyles_count__lte` (query Integer)
`playstyles_plus_count__gte` (query Integer)
`playstyles_plus_count__lte` (query Integer)
`role_plus_count__gte` (query Integer)
`role_plus_count__lte` (query Integer)
`role_plus_plus_count__gte` (query Integer)
`role_plus_plus_count__lte` (query Integer)
`pc_price__gte` (query Integer)
`pc_price__lte` (query Integer)
`page` (query Integer)
`count` (query Integer)
`sorts` (query String) | `ApiKeyAuth` | `FutGgFutggFc27PlayersResponse` | | +| futGg | `futGg.futggFc27PriceIndex` | `futgg-fc27-price-index` | `GET /futgg/fc27/price-index` | none | `ApiKeyAuth` | `FutGgFutggFc27PriceIndexResponse` | | +| futGg | `futGg.futggFc27Prices` | `futgg-fc27-prices` | `GET /futgg/fc27/prices` | `dataset` (query String) | `ApiKeyAuth` | `FutGgFutggFc27PricesResponse` | | +| futGg | `futGg.futggFc27SbcCategories` | `futgg-fc27-sbc-categories` | `GET /futgg/fc27/sbc/categories` | none | `ApiKeyAuth` | `FutGgFutggFc27SbcCategoriesResponse` | | +| futGg | `futGg.futggFc27SbcSets` | `futgg-fc27-sbc-sets` | `GET /futgg/fc27/sbc/sets` | `page` (query Integer)
`page_size` (query Integer)
`category_slug` (query String)
`search` (query String)
`expired_only` (query Boolean)
`expiring_soon` (query Boolean)
`no_pagination` (query Boolean) | `ApiKeyAuth` | `FutGgFutggFc27SbcSetsResponse` | | +| futGg | `futGg.futggFc27SbcSetByChallenge` | `futgg-fc27-sbc-set-by-challenge` | `GET /futgg/fc27/sbc/sets/by-challenge/{id}` | `id` (path Integer required) | `ApiKeyAuth` | `FutGgFutggFc27SbcSetByChallengeResponse` | | +| futGg | `futGg.futggFc27SbcSetByEa` | `futgg-fc27-sbc-set-by-ea` | `GET /futgg/fc27/sbc/sets/by-ea/{id}` | `id` (path Integer required) | `ApiKeyAuth` | `FutGgFutggFc27SbcSetByEaResponse` | | +| futGg | `futGg.futggFc27SbcSet` | `futgg-fc27-sbc-set` | `GET /futgg/fc27/sbc/sets/{slug}` | `slug` (path String required) | `ApiKeyAuth` | `FutGgFutggFc27SbcSetResponse` | | +| futGg | `futGg.futggFc27SeasonPass` | `futgg-fc27-season-pass` | `GET /futgg/fc27/season-pass` | none | `ApiKeyAuth` | `FutGgFutggFc27SeasonPassResponse` | | | gameRant | `gameRant.gamerantArticle` | `gamerant-article` | `GET /gamerant/article` | `url` (query String required) | `ApiKeyAuth` | `GameRantGamerantArticleResponse` | | | gameRant | `gameRant.gamerantAuthor` | `gamerant-author` | `GET /gamerant/author` | `url` (query String required) | `ApiKeyAuth` | `GameRantGamerantAuthorResponse` | | | gameRant | `gameRant.gamerantHeadlines` | `gamerant-headlines` | `GET /gamerant/headlines` | `section` (query String required) | `ApiKeyAuth` | `GameRantGamerantHeadlinesResponse` | | @@ -1406,6 +1640,16 @@ Total operations: `4140` | globeAndMail | `globeAndMail.globeandmailHeadlines` | `globeandmail-headlines` | `GET /globeandmail/headlines` | `section` (query String required) | `ApiKeyAuth` | `GlobeAndMailGlobeandmailHeadlinesResponse` | | | globeAndMail | `globeAndMail.globeandmailNews` | `globeandmail-news` | `GET /globeandmail/news` | none | `ApiKeyAuth` | `GlobeAndMailGlobeandmailNewsResponse` | | | globeAndMail | `globeAndMail.globeandmailSections` | `globeandmail-sections` | `GET /globeandmail/sections` | none | `ApiKeyAuth` | `GlobeAndMailGlobeandmailSectionsResponse` | | +| glovo | `glovo.categories` | `glovo-categories` | `GET /glovo/categories` | `country` (query String required)
`city` (query String required)
`language` (query String) | `ApiKeyAuth` | `GlovoCategoriesResponse` | | +| glovo | `glovo.cities` | `glovo-cities` | `GET /glovo/cities` | `country` (query String) | `ApiKeyAuth` | `GlovoCitiesResponse` | | +| glovo | `glovo.city` | `glovo-city` | `GET /glovo/city` | `country` (query String required)
`city` (query String required)
`language` (query String) | `ApiKeyAuth` | `GlovoCityResponse` | | +| glovo | `glovo.store` | `glovo-store` | `GET /glovo/store` | `country` (query String required)
`city` (query String required)
`store_id` (query Integer required)
`language` (query String) | `ApiKeyAuth` | `GlovoStoreResponse` | | +| glovo | `glovo.storeFees` | `glovo-store-fees` | `GET /glovo/store/fees` | `country` (query String required)
`city` (query String required)
`store_id` (query Integer required)
`address_id` (query Integer)
`language` (query String) | `ApiKeyAuth` | `GlovoStoreFeesResponse` | | +| glovo | `glovo.storeMenu` | `glovo-store-menu` | `GET /glovo/store/menu` | `country` (query String required)
`city` (query String required)
`store_id` (query Integer required)
`address_id` (query Integer)
`language` (query String) | `ApiKeyAuth` | `GlovoStoreMenuResponse` | | +| glovo | `glovo.storeProducts` | `glovo-store-products` | `GET /glovo/store/products` | `country` (query String required)
`city` (query String required)
`store_id` (query Integer required)
`address_id` (query Integer)
`collection` (query String)
`limit` (query Integer)
`language` (query String) | `ApiKeyAuth` | `GlovoStoreProductsResponse` | | +| glovo | `glovo.storeSearch` | `glovo-store-search` | `GET /glovo/store/search` | `country` (query String required)
`city` (query String required)
`store_id` (query Integer required)
`query` (query String required)
`limit` (query Integer)
`address_id` (query Integer)
`language` (query String) | `ApiKeyAuth` | `GlovoStoreSearchResponse` | | +| glovo | `glovo.stores` | `glovo-stores` | `GET /glovo/stores` | `country` (query String required)
`city` (query String required)
`category_id` (query Integer required)
`filter_id` (query Integer)
`limit` (query Integer)
`language` (query String) | `ApiKeyAuth` | `GlovoStoresResponse` | | +| glovo | `glovo.storesFilters` | `glovo-stores-filters` | `GET /glovo/stores/filters` | `country` (query String required)
`city` (query String required)
`category_id` (query Integer required)
`language` (query String) | `ApiKeyAuth` | `GlovoStoresFiltersResponse` | | | gmaNews | `gmaNews.gmanewsArticle` | `gmanews-article` | `GET /gmanews/article` | `url` (query String required) | `ApiKeyAuth` | `GmaNewsGmanewsArticleResponse` | | | gmaNews | `gmaNews.gmanewsHeadlines` | `gmanews-headlines` | `GET /gmanews/headlines` | `section` (query String required) | `ApiKeyAuth` | `GmaNewsGmanewsHeadlinesResponse` | | | gmaNews | `gmaNews.gmanewsNews` | `gmanews-news` | `GET /gmanews/news` | none | `ApiKeyAuth` | `GmaNewsGmanewsNewsResponse` | | @@ -1514,6 +1758,8 @@ Total operations: `4140` | googlePlay | `googlePlay.search` | `googleplay-search` | `GET /googleplay/search` | `term` (query String required)
`num` (query Integer)
`country` (query String)
`lang` (query String)
`full_detail` (query Boolean)
`price` (query String) | `ApiKeyAuth` | `GooglePlaySearchResponse` | | | googlePlay | `googlePlay.similar` | `googleplay-similar` | `GET /googleplay/similar` | `app_id` (query String required)
`num` (query Integer)
`country` (query String)
`lang` (query String)
`full_detail` (query Boolean) | `ApiKeyAuth` | `GooglePlaySimilarResponse` | | | googlePlay | `googlePlay.suggest` | `googleplay-suggest` | `GET /googleplay/suggest/{term}` | `term` (path String required)
`country` (query String)
`lang` (query String) | `ApiKeyAuth` | `GooglePlaySuggestResponse` | | +| gosuGamers | `gosuGamers.gosugamersArticle` | `gosugamers-article` | `GET /gosugamers/article` | `id` (query String required) | `ApiKeyAuth` | `GosuGamersGosugamersArticleResponse` | | +| gosuGamers | `gosuGamers.gosugamersArticles` | `gosugamers-articles` | `GET /gosugamers/articles` | `section` (query String)
`type` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `GosuGamersGosugamersArticlesResponse` | | | gosuGamers | `gosuGamers.gosugamersEncounters` | `gosugamers-encounters` | `GET /gosugamers/encounters` | `game` (query String required)
`match_id` (query String required)
`team1_id` (query String required)
`team2_id` (query String required) | `ApiKeyAuth` | `GosuGamersGosugamersEncountersResponse` | | | gosuGamers | `gosuGamers.gosugamersGames` | `gosugamers-games` | `GET /gosugamers/games` | none | `ApiKeyAuth` | `GosuGamersGosugamersGamesResponse` | | | gosuGamers | `gosuGamers.gosugamersMatch` | `gosugamers-match` | `GET /gosugamers/match` | `game` (query String required)
`tournament_id` (query String required)
`match_id` (query String required) | `ApiKeyAuth` | `GosuGamersGosugamersMatchResponse` | | @@ -1626,6 +1872,15 @@ Total operations: `4140` | hindustanTimes | `hindustanTimes.hindustantimesHeadlines` | `hindustantimes-headlines` | `GET /hindustantimes/headlines` | `section` (query String required) | `ApiKeyAuth` | `HindustanTimesHindustantimesHeadlinesResponse` | | | hindustanTimes | `hindustanTimes.hindustantimesNews` | `hindustantimes-news` | `GET /hindustantimes/news` | none | `ApiKeyAuth` | `HindustanTimesHindustantimesNewsResponse` | | | hindustanTimes | `hindustanTimes.hindustantimesSections` | `hindustantimes-sections` | `GET /hindustantimes/sections` | none | `ApiKeyAuth` | `HindustanTimesHindustantimesSectionsResponse` | | +| hltv | `hltv.event` | `hltv-event` | `GET /hltv/event` | `id` (query Integer required)
`slug` (query String) | `ApiKeyAuth` | `HltvEventResponse` | | +| hltv | `hltv.events` | `hltv-events` | `GET /hltv/events` | none | `ApiKeyAuth` | `HltvEventsResponse` | | +| hltv | `hltv.match` | `hltv-match` | `GET /hltv/match` | `id` (query Integer required)
`slug` (query String) | `ApiKeyAuth` | `HltvMatchResponse` | | +| hltv | `hltv.matches` | `hltv-matches` | `GET /hltv/matches` | none | `ApiKeyAuth` | `HltvMatchesResponse` | | +| hltv | `hltv.player` | `hltv-player` | `GET /hltv/player` | `id` (query Integer required)
`slug` (query String) | `ApiKeyAuth` | `HltvPlayerResponse` | | +| hltv | `hltv.rankings` | `hltv-rankings` | `GET /hltv/rankings` | `date` (query String)
`country` (query String) | `ApiKeyAuth` | `HltvRankingsResponse` | | +| hltv | `hltv.results` | `hltv-results` | `GET /hltv/results` | `offset` (query Integer)
`event` (query Integer) | `ApiKeyAuth` | `HltvResultsResponse` | | +| hltv | `hltv.search` | `hltv-search` | `GET /hltv/search` | `query` (query String required) | `ApiKeyAuth` | `HltvSearchResponse` | | +| hltv | `hltv.team` | `hltv-team` | `GET /hltv/team` | `id` (query Integer required)
`slug` (query String) | `ApiKeyAuth` | `HltvTeamResponse` | | | hM | `hM.hmCategories` | `hm-categories` | `GET /hm/categories` | `department` (query String) | `ApiKeyAuth` | `HMHmCategoriesResponse` | | | hM | `hM.hmListing` | `hm-listing` | `GET /hm/listing` | `category_id` (query String required)
`page` (query Integer)
`page_size` (query Integer)
`sort` (query String)
`is_new` (query Boolean) | `ApiKeyAuth` | `HMHmListingResponse` | | | hM | `hM.hmProduct` | `hm-product` | `GET /hm/product/{product_id}` | `product_id` (path String required) | `ApiKeyAuth` | `HMHmProductResponse` | | @@ -1772,6 +2027,20 @@ Total operations: `4140` | irishTimes | `irishTimes.irishtimesHeadlines` | `irishtimes-headlines` | `GET /irishtimes/headlines` | `section` (query String required) | `ApiKeyAuth` | `IrishTimesIrishtimesHeadlinesResponse` | | | irishTimes | `irishTimes.irishtimesNews` | `irishtimes-news` | `GET /irishtimes/news` | none | `ApiKeyAuth` | `IrishTimesIrishtimesNewsResponse` | | | irishTimes | `irishTimes.irishtimesSections` | `irishtimes-sections` | `GET /irishtimes/sections` | none | `ApiKeyAuth` | `IrishTimesIrishtimesSectionsResponse` | | +| itchIo | `itchIo.itchioBrowse` | `itchio-browse` | `GET /itchio/browse` | `path` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `ItchIoItchioBrowseResponse` | | +| itchIo | `itchIo.itchioBrowseOptions` | `itchio-browse-options` | `GET /itchio/browse/options` | `path` (query String required) | `ApiKeyAuth` | `ItchIoItchioBrowseOptionsResponse` | | +| itchIo | `itchIo.itchioCatalog` | `itchio-catalog` | `GET /itchio/catalogs/{classification}` | `classification` (path String required) | `ApiKeyAuth` | `ItchIoItchioCatalogResponse` | | +| itchIo | `itchIo.itchioTopRated` | `itchio-top-rated` | `GET /itchio/games/top-rated` | `page` (query Integer) | `ApiKeyAuth` | `ItchIoItchioTopRatedResponse` | | +| itchIo | `itchIo.itchioJamsBrowse` | `itchio-jams-browse` | `GET /itchio/jams/browse` | `path` (query String)
`page` (query Integer) | `ApiKeyAuth` | `ItchIoItchioJamsBrowseResponse` | | +| itchIo | `itchIo.itchioJamCalendar` | `itchio-jam-calendar` | `GET /itchio/jams/calendar` | none | `ApiKeyAuth` | `ItchIoItchioJamCalendarResponse` | | +| itchIo | `itchIo.itchioJamsEntries` | `itchio-jams-entries` | `GET /itchio/jams/entries` | `path` (query String required) | `ApiKeyAuth` | `ItchIoItchioJamsEntriesResponse` | | +| itchIo | `itchIo.itchioJamsOptions` | `itchio-jams-options` | `GET /itchio/jams/options` | `path` (query String) | `ApiKeyAuth` | `ItchIoItchioJamsOptionsResponse` | | +| itchIo | `itchIo.itchioJamsOverview` | `itchio-jams-overview` | `GET /itchio/jams/overview` | `path` (query String required) | `ApiKeyAuth` | `ItchIoItchioJamsOverviewResponse` | | +| itchIo | `itchIo.itchioJamsResults` | `itchio-jams-results` | `GET /itchio/jams/results` | `path` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `ItchIoItchioJamsResultsResponse` | | +| itchIo | `itchIo.itchioJamsResultsOptions` | `itchio-jams-results-options` | `GET /itchio/jams/results/options` | `path` (query String required) | `ApiKeyAuth` | `ItchIoItchioJamsResultsOptionsResponse` | | +| itchIo | `itchIo.itchioJamsSubmission` | `itchio-jams-submission` | `GET /itchio/jams/submission` | `path` (query String required) | `ApiKeyAuth` | `ItchIoItchioJamsSubmissionResponse` | | +| itchIo | `itchIo.itchioProject` | `itchio-project` | `GET /itchio/project` | `url` (query String required) | `ApiKeyAuth` | `ItchIoItchioProjectResponse` | | +| itchIo | `itchIo.itchioTags` | `itchio-tags` | `GET /itchio/tags/{classification}` | `classification` (path String required) | `ApiKeyAuth` | `ItchIoItchioTagsResponse` | | | theJapanTimes | `theJapanTimes.japantimesArticle` | `japantimes-article` | `GET /japantimes/article` | `url` (query String required) | `ApiKeyAuth` | `TheJapanTimesJapantimesArticleResponse` | | | theJapanTimes | `theJapanTimes.japantimesAuthor` | `japantimes-author` | `GET /japantimes/author` | `url` (query String required) | `ApiKeyAuth` | `TheJapanTimesJapantimesAuthorResponse` | | | theJapanTimes | `theJapanTimes.japantimesHeadlines` | `japantimes-headlines` | `GET /japantimes/headlines` | `section` (query String required) | `ApiKeyAuth` | `TheJapanTimesJapantimesHeadlinesResponse` | | @@ -1917,6 +2186,24 @@ Total operations: `4140` | kickstarter | `kickstarter.discover` | `kickstarter-discover` | `GET /kickstarter/discover` | `category_id` (query Integer)
`term` (query String)
`sort` (query String)
`page` (query Integer)
`state` (query String)
`staff_pick_only` (query Boolean) | `ApiKeyAuth` | `KickstarterDiscoverResponse` | | | kickstarter | `kickstarter.project` | `kickstarter-project` | `GET /kickstarter/project` | `creator` (query String required)
`slug` (query String required) | `ApiKeyAuth` | `KickstarterProjectResponse` | | | kickstarter | `kickstarter.updates` | `kickstarter-updates` | `GET /kickstarter/updates` | `creator` (query String required)
`slug` (query String required) | `ApiKeyAuth` | `KickstarterUpdatesResponse` | | +| klook | `klook.activity` | `klook-activity` | `GET /klook/activities/{activity_id}` | `activity_id` (path Integer required) | `ApiKeyAuth` | `KlookActivityResponse` | | +| klook | `klook.attractionsCategories` | `klook-attractions-categories` | `GET /klook/attractions/categories` | none | `ApiKeyAuth` | `KlookAttractionsCategoriesResponse` | | +| klook | `klook.attractionsDestinations` | `klook-attractions-destinations` | `GET /klook/attractions/destinations` | `city_id` (query Integer)
`country_id` (query Integer) | `ApiKeyAuth` | `KlookAttractionsDestinationsResponse` | | +| klook | `klook.attractionsHighlights` | `klook-attractions-highlights` | `GET /klook/attractions/highlights` | `city_id` (query Integer)
`country_id` (query Integer)
`type` (query String) | `ApiKeyAuth` | `KlookAttractionsHighlightsResponse` | | +| klook | `klook.attractionsSearch` | `klook-attractions-search` | `GET /klook/attractions/search` | `city_id` (query Integer)
`category_id` (query Integer)
`sort` (query String)
`price_min` (query Integer)
`price_max` (query Integer)
`service_lang_tag` (query Integer)
`duration_tag` (query Integer)
`other_filters_tag` (query Integer)
`page` (query Integer)
`per_page` (query Integer) | `ApiKeyAuth` | `KlookAttractionsSearchResponse` | | +| klook | `klook.attractionsSuggest` | `klook-attractions-suggest` | `GET /klook/attractions/suggest` | `query` (query String required)
`limit` (query Integer) | `ApiKeyAuth` | `KlookAttractionsSuggestResponse` | | +| klook | `klook.categories` | `klook-categories` | `GET /klook/categories` | none | `ApiKeyAuth` | `KlookCategoriesResponse` | | +| klook | `klook.destinations` | `klook-destinations` | `GET /klook/destinations` | none | `ApiKeyAuth` | `KlookDestinationsResponse` | | +| klook | `klook.hot` | `klook-hot` | `GET /klook/hot` | none | `ApiKeyAuth` | `KlookHotResponse` | | +| klook | `klook.interests` | `klook-interests` | `GET /klook/interests` | none | `ApiKeyAuth` | `KlookInterestsResponse` | | +| klook | `klook.recommendations` | `klook-recommendations` | `GET /klook/recommendations` | `city_id` (query Integer) | `ApiKeyAuth` | `KlookRecommendationsResponse` | | +| klook | `klook.reviews` | `klook-reviews` | `GET /klook/reviews` | `city_id` (query Integer required)
`vertical` (query String) | `ApiKeyAuth` | `KlookReviewsResponse` | | +| klook | `klook.search` | `klook-search` | `GET /klook/search` | `query` (query String)
`city_id` (query Integer)
`category_id` (query Integer)
`sort` (query String)
`price_min` (query Integer)
`price_max` (query Integer)
`interest_tag` (query Integer)
`service_lang_tag` (query Integer)
`duration_tag` (query Integer)
`other_filters_tag` (query Integer)
`page` (query Integer)
`per_page` (query Integer) | `ApiKeyAuth` | `KlookSearchResponse` | | +| klook | `klook.searchFilters` | `klook-search-filters` | `GET /klook/search/filters` | `vertical` (query String)
`city_id` (query Integer)
`category_id` (query Integer) | `ApiKeyAuth` | `KlookSearchFiltersResponse` | | +| klook | `klook.searchHotKeywords` | `klook-search-hot-keywords` | `GET /klook/search/hot-keywords` | `city_id` (query Integer)
`country_id` (query Integer) | `ApiKeyAuth` | `KlookSearchHotKeywordsResponse` | | +| klook | `klook.searchUnified` | `klook-search-unified` | `GET /klook/search/unified` | `query` (query String required) | `ApiKeyAuth` | `KlookSearchUnifiedResponse` | | +| klook | `klook.suggest` | `klook-suggest` | `GET /klook/suggest` | `query` (query String required)
`limit` (query Integer) | `ApiKeyAuth` | `KlookSuggestResponse` | | +| klook | `klook.verticals` | `klook-verticals` | `GET /klook/verticals` | none | `ApiKeyAuth` | `KlookVerticalsResponse` | | | kohlS | `kohlS.kohlsCategory` | `kohls-category` | `GET /kohls/category` | `category` (query String required) | `ApiKeyAuth` | `KohlSKohlsCategoryResponse` | | | kohlS | `kohlS.kohlsProductReviews` | `kohls-product-reviews` | `GET /kohls/product/reviews` | `web_id` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `KohlSKohlsProductReviewsResponse` | | | kohlS | `kohlS.kohlsStores` | `kohls-stores` | `GET /kohls/stores` | `search` (query String required) | `ApiKeyAuth` | `KohlSKohlsStoresResponse` | | @@ -2012,7 +2299,7 @@ Total operations: `4140` | loLEsports | `loLEsports.lolesportsNews` | `lolesports-news` | `GET /lolesports/news` | `hl` (query String)
`limit` (query Integer) | `ApiKeyAuth` | `LoLesportsLolesportsNewsResponse` | | | loLEsports | `loLEsports.lolesportsSchedule` | `lolesports-schedule` | `GET /lolesports/schedule` | `hl` (query String)
`league_id` (query String)
`page_token` (query String) | `ApiKeyAuth` | `LoLesportsLolesportsScheduleResponse` | | | loLEsports | `loLEsports.lolesportsSeasons` | `lolesports-seasons` | `GET /lolesports/seasons` | `hl` (query String)
`season_id` (query String)
`region` (query String)
`league_id` (query String) | `ApiKeyAuth` | `LoLesportsLolesportsSeasonsResponse` | | -| loLEsports | `loLEsports.lolesportsStandings` | `lolesports-standings` | `GET /lolesports/standings` | `hl` (query String)
`tournament_id` (query String required) | `ApiKeyAuth` | `LoLesportsLolesportsStandingsResponse` | | +| loLEsports | `loLEsports.lolesportsStandings` | `lolesports-standings` | `GET /lolesports/standings` | `hl` (query String)
`tournament_id` (query String required)
`rounds` (query String) | `ApiKeyAuth` | `LoLesportsLolesportsStandingsResponse` | | | loLEsports | `loLEsports.lolesportsTeams` | `lolesports-teams` | `GET /lolesports/teams` | `hl` (query String)
`slug` (query String)
`q` (query String)
`status` (query String)
`page` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `LoLesportsLolesportsTeamsResponse` | | | loLEsports | `loLEsports.lolesportsTournaments` | `lolesports-tournaments` | `GET /lolesports/tournaments` | `hl` (query String)
`league_id` (query String required) | `ApiKeyAuth` | `LoLesportsLolesportsTournamentsResponse` | | | lululemon | `lululemon.categories` | `lululemon-categories` | `GET /lululemon/categories` | `section` (query String) | `ApiKeyAuth` | `LululemonCategoriesResponse` | | @@ -2020,6 +2307,15 @@ Total operations: `4140` | lululemon | `lululemon.outfit` | `lululemon-outfit` | `GET /lululemon/outfit` | `unified_id` (query String required)
`color_code` (query String required) | `ApiKeyAuth` | `LululemonOutfitResponse` | | | lululemon | `lululemon.product` | `lululemon-product` | `GET /lululemon/product/{product_id}` | `product_id` (path String required) | `ApiKeyAuth` | `LululemonProductResponse` | | | lululemon | `lululemon.stores` | `lululemon-stores` | `GET /lululemon/stores` | `country` (query String)
`state` (query String)
`lat` (query Double)
`lng` (query Double)
`radius_miles` (query Double) | `ApiKeyAuth` | `LululemonStoresResponse` | | +| luma | `luma.calendar` | `luma-calendar` | `GET /luma/calendar` | `slug` (query String required) | `ApiKeyAuth` | `LumaCalendarResponse` | | +| luma | `luma.calendarEvents` | `luma-calendar-events` | `GET /luma/calendar-events` | `calendar_api_id` (query String required)
`period` (query String)
`after` (query String)
`before` (query String)
`pagination_limit` (query Integer)
`pagination_cursor` (query String) | `ApiKeyAuth` | `LumaCalendarEventsResponse` | | +| luma | `luma.categories` | `luma-categories` | `GET /luma/categories` | none | `ApiKeyAuth` | `LumaCategoriesResponse` | | +| luma | `luma.category` | `luma-category` | `GET /luma/category` | `slug` (query String required) | `ApiKeyAuth` | `LumaCategoryResponse` | | +| luma | `luma.categoryEvents` | `luma-category-events` | `GET /luma/category-events` | `slug` (query String required)
`query` (query String)
`pagination_limit` (query Integer)
`pagination_cursor` (query String)
`latitude` (query Double)
`longitude` (query Double) | `ApiKeyAuth` | `LumaCategoryEventsResponse` | | +| luma | `luma.event` | `luma-event` | `GET /luma/event` | `event_api_id` (query String required) | `ApiKeyAuth` | `LumaEventResponse` | | +| luma | `luma.place` | `luma-place` | `GET /luma/place` | `slug` (query String required) | `ApiKeyAuth` | `LumaPlaceResponse` | | +| luma | `luma.placeCalendars` | `luma-place-calendars` | `GET /luma/place-calendars` | `slug` (query String required) | `ApiKeyAuth` | `LumaPlaceCalendarsResponse` | | +| luma | `luma.placeEvents` | `luma-place-events` | `GET /luma/place-events` | `place_slug` (query String required)
`query` (query String)
`pagination_limit` (query Integer)
`pagination_cursor` (query String) | `ApiKeyAuth` | `LumaPlaceEventsResponse` | | | macRumors | `macRumors.macrumorsArticle` | `macrumors-article` | `GET /macrumors/article` | `url` (query String required) | `ApiKeyAuth` | `MacRumorsMacrumorsArticleResponse` | | | macRumors | `macRumors.macrumorsAuthor` | `macrumors-author` | `GET /macrumors/author` | `slug` (query String)
`url` (query String) | `ApiKeyAuth` | `MacRumorsMacrumorsAuthorResponse` | | | macRumors | `macRumors.macrumorsHeadlines` | `macrumors-headlines` | `GET /macrumors/headlines` | `section` (query String required) | `ApiKeyAuth` | `MacRumorsMacrumorsHeadlinesResponse` | | @@ -2053,6 +2349,26 @@ Total operations: `4140` | mashable | `mashable.headlines` | `mashable-headlines` | `GET /mashable/headlines` | `section` (query String required) | `ApiKeyAuth` | `MashableHeadlinesResponse` | | | mashable | `mashable.news` | `mashable-news` | `GET /mashable/news` | none | `ApiKeyAuth` | `MashableNewsResponse` | | | mashable | `mashable.sections` | `mashable-sections` | `GET /mashable/sections` | none | `ApiKeyAuth` | `MashableSectionsResponse` | | +| maxPreps | `maxPreps.maxprepsRankingsGroupings` | `maxpreps-rankings-groupings` | `GET /maxpreps/rankings-groupings` | `stateCode` (query String required)
`sportSeasonId` (query String required) | `ApiKeyAuth` | `MaxPrepsMaxprepsRankingsGroupingsResponse` | | +| maxPreps | `maxPreps.maxprepsRequestEnums` | `maxpreps-request-enums` | `GET /maxpreps/request-enums` | none | `ApiKeyAuth` | `MaxPrepsMaxprepsRequestEnumsResponse` | | +| maxPreps | `maxPreps.maxprepsSchool` | `maxpreps-school` | `GET /maxpreps/school` | `schoolId` (query String required) | `ApiKeyAuth` | `MaxPrepsMaxprepsSchoolResponse` | | +| maxPreps | `maxPreps.maxprepsSchoolContests` | `maxpreps-school-contests` | `GET /maxpreps/school-contests` | `schoolId` (query String required)
`maxLimit` (query Integer) | `ApiKeyAuth` | `MaxPrepsMaxprepsSchoolContestsResponse` | | +| maxPreps | `maxPreps.maxprepsSchoolProximal` | `maxpreps-school-proximal` | `GET /maxpreps/school-proximal` | `schoolId` (query String required)
`searchText` (query String)
`maxDistance` (query Integer)
`sortOrder` (query String)
`allSeasonId` (query String)
`sportSeasonId` (query String)
`zipCode` (query String)
`byState` (query Boolean)
`includeDeleted` (query Boolean)
`historicalOnly` (query Boolean)
`publishedOnly` (query Boolean)
`maxResults` (query Integer)
`startFrom` (query Integer) | `ApiKeyAuth` | `MaxPrepsMaxprepsSchoolProximalResponse` | | +| maxPreps | `maxPreps.maxprepsSchoolSearch` | `maxpreps-school-search` | `GET /maxpreps/school-search` | `query` (query String required)
`sortOrder` (query String)
`schoolId` (query String)
`allSeasonId` (query String)
`zipCode` (query String)
`includeDeleted` (query Boolean)
`historicalOnly` (query Boolean)
`publishedOnly` (query Boolean)
`maxResults` (query Integer)
`startFrom` (query Integer) | `ApiKeyAuth` | `MaxPrepsMaxprepsSchoolSearchResponse` | | +| maxPreps | `maxPreps.maxprepsSchoolSeasons` | `maxpreps-school-seasons` | `GET /maxpreps/school-seasons` | `schoolId` (query String required) | `ApiKeyAuth` | `MaxPrepsMaxprepsSchoolSeasonsResponse` | | +| maxPreps | `maxPreps.maxprepsSchoolZipSearch` | `maxpreps-school-zip-search` | `GET /maxpreps/school-zip-search` | `zipCode` (query String required)
`searchText` (query String)
`maxDistance` (query Integer)
`allSeasonId` (query String)
`sportSeasonId` (query String)
`searchByState` (query Boolean)
`searchCity` (query String)
`includeDeleted` (query Boolean)
`historicalOnly` (query Boolean)
`publishedOnly` (query Boolean)
`startFrom` (query Integer) | `ApiKeyAuth` | `MaxPrepsMaxprepsSchoolZipSearchResponse` | | +| maxPreps | `maxPreps.maxprepsScoreboard` | `maxpreps-scoreboard` | `GET /maxpreps/scoreboard` | `context` (query String required)
`id` (query String)
`genderSport` (query String required)
`level` (query String required)
`excludeTbaDate` (query Boolean)
`nationalTeamCount` (query Integer) | `ApiKeyAuth` | `MaxPrepsMaxprepsScoreboardResponse` | | +| maxPreps | `maxPreps.maxprepsSeasonNavigation` | `maxpreps-season-navigation` | `GET /maxpreps/season-navigation` | `allSeasonId` (query String required)
`season` (query String) | `ApiKeyAuth` | `MaxPrepsMaxprepsSeasonNavigationResponse` | | +| maxPreps | `maxPreps.maxprepsSports` | `maxpreps-sports` | `GET /maxpreps/sports` | none | `ApiKeyAuth` | `MaxPrepsMaxprepsSportsResponse` | | +| maxPreps | `maxPreps.maxprepsStates` | `maxpreps-states` | `GET /maxpreps/states` | none | `ApiKeyAuth` | `MaxPrepsMaxprepsStatesResponse` | | +| maxPreps | `maxPreps.maxprepsTeam` | `maxpreps-team` | `GET /maxpreps/team` | `teamId` (query String required)
`sportSeasonId` (query String required) | `ApiKeyAuth` | `MaxPrepsMaxprepsTeamResponse` | | +| maxPreps | `maxPreps.maxprepsTeamContext` | `maxpreps-team-context` | `GET /maxpreps/team-context` | `teamId` (query String required)
`sportSeasonId` (query String required) | `ApiKeyAuth` | `MaxPrepsMaxprepsTeamContextResponse` | | +| maxPreps | `maxPreps.maxprepsTeamNextContest` | `maxpreps-team-next-contest` | `GET /maxpreps/team-next-contest` | `teamId` (query String required)
`sportSeasonId` (query String required) | `ApiKeyAuth` | `MaxPrepsMaxprepsTeamNextContestResponse` | | +| maxPreps | `maxPreps.maxprepsTeamRankings` | `maxpreps-team-rankings` | `GET /maxpreps/team-rankings` | `type` (query String required)
`allSeasonId` (query String required)
`sportSeasonId` (query String required)
`stateCode` (query String)
`sectionId` (query String)
`count` (query Integer)
`teamSize` (query Integer)
`page` (query Integer) | `ApiKeyAuth` | `MaxPrepsMaxprepsTeamRankingsResponse` | | +| maxPreps | `maxPreps.maxprepsTeamRosterSummary` | `maxpreps-team-roster-summary` | `GET /maxpreps/team-roster-summary` | `teamId` (query String required)
`sportSeasonId` (query String required) | `ApiKeyAuth` | `MaxPrepsMaxprepsTeamRosterSummaryResponse` | | +| maxPreps | `maxPreps.maxprepsTeamSchedule` | `maxpreps-team-schedule` | `GET /maxpreps/team-schedule` | `teamId` (query String required)
`sportSeasonId` (query String required) | `ApiKeyAuth` | `MaxPrepsMaxprepsTeamScheduleResponse` | | +| maxPreps | `maxPreps.maxprepsTeamStatLeaders` | `maxpreps-team-stat-leaders` | `GET /maxpreps/team-stat-leaders` | `teamId` (query String required)
`sportSeasonId` (query String required) | `ApiKeyAuth` | `MaxPrepsMaxprepsTeamStatLeadersResponse` | | +| maxPreps | `maxPreps.maxprepsTournamentSports` | `maxpreps-tournament-sports` | `GET /maxpreps/tournament-sports` | `stateCode` (query String) | `ApiKeyAuth` | `MaxPrepsMaxprepsTournamentSportsResponse` | | | mcDonalds | `mcDonalds.mcdonaldsCategories` | `mcdonalds-categories` | `GET /mcdonalds/categories` | `country` (query String) | `ApiKeyAuth` | `McDonaldsMcdonaldsCategoriesResponse` | | | mcDonalds | `mcDonalds.mcdonaldsItem` | `mcdonalds-item` | `GET /mcdonalds/item` | `item_id` (query String required)
`country` (query String) | `ApiKeyAuth` | `McDonaldsMcdonaldsItemResponse` | | | mcDonalds | `mcDonalds.mcdonaldsItemList` | `mcdonalds-item-list` | `GET /mcdonalds/item-list` | `item_ids` (query String required)
`country` (query String) | `ApiKeyAuth` | `McDonaldsMcdonaldsItemListResponse` | | @@ -2198,6 +2514,40 @@ Total operations: `4140` | modaOperandi | `modaOperandi.modaoperandiDesigners` | `modaoperandi-designers` | `GET /modaoperandi/designers` | `gender` (query String required) | `ApiKeyAuth` | `ModaOperandiModaoperandiDesignersResponse` | | | modaOperandi | `modaOperandi.modaoperandiProduct` | `modaoperandi-product` | `GET /modaoperandi/product` | `url` (query String required) | `ApiKeyAuth` | `ModaOperandiModaoperandiProductResponse` | | | modaOperandi | `modaOperandi.modaoperandiSearch` | `modaoperandi-search` | `GET /modaoperandi/search` | `gender` (query String required)
`q` (query String)
`category` (query String)
`designer` (query String)
`color` (query String)
`size` (query String)
`attribute` (query String)
`availability` (query String)
`price_min` (query Double)
`price_max` (query Double)
`on_sale` (query Boolean)
`sort` (query String)
`page` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `ModaOperandiModaoperandiSearchResponse` | | +| modrinth | `modrinth.collection` | `modrinth-collection` | `GET /modrinth/collection/{id}` | `id` (path String required) | `ApiKeyAuth` | `ModrinthCollectionResponse` | | +| modrinth | `modrinth.collections` | `modrinth-collections` | `GET /modrinth/collections` | `ids` (query String required) | `ApiKeyAuth` | `ModrinthCollectionsResponse` | | +| modrinth | `modrinth.metadataLinkPlatforms` | `modrinth-metadata-link-platforms` | `GET /modrinth/metadata/link-platforms` | none | `ApiKeyAuth` | `ModrinthMetadataLinkPlatformsResponse` | | +| modrinth | `modrinth.metadataLoaderFields` | `modrinth-metadata-loader-fields` | `GET /modrinth/metadata/loader-fields` | none | `ApiKeyAuth` | `ModrinthMetadataLoaderFieldsResponse` | | +| modrinth | `modrinth.metadataLoaderFieldValues` | `modrinth-metadata-loader-field-values` | `GET /modrinth/metadata/loader-fields/{field}` | `field` (path String required) | `ApiKeyAuth` | `ModrinthMetadataLoaderFieldValuesResponse` | | +| modrinth | `modrinth.metadataLoaders` | `modrinth-metadata-loaders` | `GET /modrinth/metadata/loaders` | none | `ApiKeyAuth` | `ModrinthMetadataLoadersResponse` | | +| modrinth | `modrinth.organization` | `modrinth-organization` | `GET /modrinth/organization/{id}` | `id` (path String required) | `ApiKeyAuth` | `ModrinthOrganizationResponse` | | +| modrinth | `modrinth.organizationProjects` | `modrinth-organization-projects` | `GET /modrinth/organization/{id}/projects` | `id` (path String required) | `ApiKeyAuth` | `ModrinthOrganizationProjectsResponse` | | +| modrinth | `modrinth.organizations` | `modrinth-organizations` | `GET /modrinth/organizations` | `ids` (query String required) | `ApiKeyAuth` | `ModrinthOrganizationsResponse` | | +| modrinth | `modrinth.project` | `modrinth-project` | `GET /modrinth/project/{id}` | `id` (path String required) | `ApiKeyAuth` | `ModrinthProjectResponse` | | +| modrinth | `modrinth.checkProject` | `modrinth-check-project` | `GET /modrinth/project/{id}/check` | `id` (path String required) | `ApiKeyAuth` | `ModrinthCheckProjectResponse` | | +| modrinth | `modrinth.dependencies` | `modrinth-dependencies` | `GET /modrinth/project/{id}/dependencies` | `id` (path String required) | `ApiKeyAuth` | `ModrinthDependenciesResponse` | | +| modrinth | `modrinth.projectDisclosures` | `modrinth-project-disclosures` | `GET /modrinth/project/{id}/disclosures` | `id` (path String required) | `ApiKeyAuth` | `ModrinthProjectDisclosuresResponse` | | +| modrinth | `modrinth.projectVersions` | `modrinth-project-versions` | `GET /modrinth/project/{id}/version` | `id` (path String required)
`loaders` (query String)
`game_versions` (query String)
`featured` (query Boolean)
`include_changelog` (query Boolean) | `ApiKeyAuth` | `ModrinthProjectVersionsResponse` | | +| modrinth | `modrinth.projectVersion` | `modrinth-project-version` | `GET /modrinth/project/{id}/version/{number}` | `id` (path String required)
`number` (path String required) | `ApiKeyAuth` | `ModrinthProjectVersionResponse` | | +| modrinth | `modrinth.projects` | `modrinth-projects` | `GET /modrinth/projects` | `ids` (query String required) | `ApiKeyAuth` | `ModrinthProjectsResponse` | | +| modrinth | `modrinth.randomProjects` | `modrinth-random-projects` | `GET /modrinth/projects_random` | `count` (query Integer required) | `ApiKeyAuth` | `ModrinthRandomProjectsResponse` | | +| modrinth | `modrinth.search` | `modrinth-search` | `GET /modrinth/search` | `query` (query String)
`facets` (query String)
`index` (query String)
`offset` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `ModrinthSearchResponse` | | +| modrinth | `modrinth.statistics` | `modrinth-statistics` | `GET /modrinth/statistics` | none | `ApiKeyAuth` | `ModrinthStatisticsResponse` | | +| modrinth | `modrinth.license` | `modrinth-license` | `GET /modrinth/tag/license/{id}` | `id` (path String required) | `ApiKeyAuth` | `ModrinthLicenseResponse` | | +| modrinth | `modrinth.tags` | `modrinth-tags` | `GET /modrinth/tag/{type}` | `type` (path String required) | `ApiKeyAuth` | `ModrinthTagsResponse` | | +| modrinth | `modrinth.forgeUpdates` | `modrinth-forge-updates` | `GET /modrinth/updates/{id}/forge_updates.json` | `id` (path String required)
`neoforge` (query String) | `ApiKeyAuth` | `ModrinthForgeUpdatesResponse` | | +| modrinth | `modrinth.searchV3` | `modrinth-search-v3` | `GET /modrinth/v3/search` | `query` (query String)
`index` (query String)
`offset` (query Integer)
`limit` (query Integer)
`new_filters` (query String)
`facets` (query String)
`filters` (query String)
`version` (query String) | `ApiKeyAuth` | `ModrinthSearchV3Response` | | +| modrinth | `modrinth.searchV3Body` | `modrinth-search-v3-body` | `POST /modrinth/v3/search` | `body` (body String required) | `ApiKeyAuth` | `ModrinthSearchV3BodyResponse` | | +| modrinth | `modrinth.searchV3Options` | `modrinth-search-v3-options` | `GET /modrinth/v3/search/options` | none | `ApiKeyAuth` | `ModrinthSearchV3OptionsResponse` | | +| modrinth | `modrinth.version` | `modrinth-version` | `GET /modrinth/version/{id}` | `id` (path String required) | `ApiKeyAuth` | `ModrinthVersionResponse` | | +| modrinth | `modrinth.fileProjects` | `modrinth-file-projects` | `POST /modrinth/version_file/project` | `body` (body String required) | `ApiKeyAuth` | `ModrinthFileProjectsResponse` | | +| modrinth | `modrinth.fileVersion` | `modrinth-file-version` | `GET /modrinth/version_file/{hash}` | `hash` (path String required)
`algorithm` (query String) | `ApiKeyAuth` | `ModrinthFileVersionResponse` | | +| modrinth | `modrinth.fileUpdate` | `modrinth-file-update` | `POST /modrinth/version_file/{hash}/update` | `hash` (path String required)
`algorithm` (query String)
`body` (body String required) | `ApiKeyAuth` | `ModrinthFileUpdateResponse` | | +| modrinth | `modrinth.fileVersions` | `modrinth-file-versions` | `POST /modrinth/version_files` | `body` (body String required) | `ApiKeyAuth` | `ModrinthFileVersionsResponse` | | +| modrinth | `modrinth.filesUpdate` | `modrinth-files-update` | `POST /modrinth/version_files/update` | `body` (body String required) | `ApiKeyAuth` | `ModrinthFilesUpdateResponse` | | +| modrinth | `modrinth.filesUpdateIndividual` | `modrinth-files-update-individual` | `POST /modrinth/version_files/update_individual` | `body` (body String required) | `ApiKeyAuth` | `ModrinthFilesUpdateIndividualResponse` | | +| modrinth | `modrinth.filesUpdateMany` | `modrinth-files-update-many` | `POST /modrinth/version_files/update_many` | `body` (body String required) | `ApiKeyAuth` | `ModrinthFilesUpdateManyResponse` | | +| modrinth | `modrinth.versions` | `modrinth-versions` | `GET /modrinth/versions` | `ids` (query String required) | `ApiKeyAuth` | `ModrinthVersionsResponse` | | | moncler | `moncler.categories` | `moncler-categories` | `GET /moncler/categories` | `levels` (query Integer) | `ApiKeyAuth` | `MonclerCategoriesResponse` | | | moncler | `moncler.category` | `moncler-category` | `GET /moncler/category` | `category_id` (query String required)
`sort` (query String)
`filter` (query List)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `MonclerCategoryResponse` | | | moncler | `moncler.product` | `moncler-product` | `GET /moncler/product` | `product_id` (query String required) | `ApiKeyAuth` | `MonclerProductResponse` | | @@ -2220,6 +2570,31 @@ Total operations: `4140` | theMotleyFool | `theMotleyFool.motleyfoolHeadlines` | `motleyfool-headlines` | `GET /motleyfool/headlines` | `section` (query String required) | `ApiKeyAuth` | `TheMotleyFoolMotleyfoolHeadlinesResponse` | | | theMotleyFool | `theMotleyFool.motleyfoolNews` | `motleyfool-news` | `GET /motleyfool/news` | none | `ApiKeyAuth` | `TheMotleyFoolMotleyfoolNewsResponse` | | | theMotleyFool | `theMotleyFool.motleyfoolSections` | `motleyfool-sections` | `GET /motleyfool/sections` | none | `ApiKeyAuth` | `TheMotleyFoolMotleyfoolSectionsResponse` | | +| motoGp | `motoGp.motogpBmwAward` | `motogp-bmw-award` | `GET /motogp/bmw-award` | `season_year` (query Integer required) | `ApiKeyAuth` | `MotoGpMotogpBmwAwardResponse` | | +| motoGp | `motoGp.motogpCategories` | `motogp-categories` | `GET /motogp/categories` | `season_uuid` (query String)
`event_uuid` (query String) | `ApiKeyAuth` | `MotoGpMotogpCategoriesResponse` | | +| motoGp | `motoGp.motogpCircuitPoles` | `motogp-circuit-poles` | `GET /motogp/circuit-poles` | `circuit_uuid` (query String required)
`category_name` (query String required) | `ApiKeyAuth` | `MotoGpMotogpCircuitPolesResponse` | | +| motoGp | `motoGp.motogpCircuitRecords` | `motogp-circuit-records` | `GET /motogp/circuit-records` | `circuit_uuid` (query String required) | `ApiKeyAuth` | `MotoGpMotogpCircuitRecordsResponse` | | +| motoGp | `motoGp.motogpCircuitWins` | `motogp-circuit-wins` | `GET /motogp/circuit-wins` | `circuit_uuid` (query String required)
`category_name` (query String required) | `ApiKeyAuth` | `MotoGpMotogpCircuitWinsResponse` | | +| motoGp | `motoGp.motogpClassifications` | `motogp-classifications` | `GET /motogp/classifications` | `session_uuid` (query String required)
`test` (query Boolean) | `ApiKeyAuth` | `MotoGpMotogpClassificationsResponse` | | +| motoGp | `motoGp.motogpContentCategories` | `motogp-content-categories` | `GET /motogp/content/categories` | `season_year` (query Integer required) | `ApiKeyAuth` | `MotoGpMotogpContentCategoriesResponse` | | +| motoGp | `motoGp.motogpContentEvents` | `motogp-content-events` | `GET /motogp/content/events` | `season_year` (query Integer required) | `ApiKeyAuth` | `MotoGpMotogpContentEventsResponse` | | +| motoGp | `motoGp.motogpContentEvent` | `motogp-content-event` | `GET /motogp/content/events/{id}` | `id` (path String required) | `ApiKeyAuth` | `MotoGpMotogpContentEventResponse` | | +| motoGp | `motoGp.motogpLatestSession` | `motogp-latest-session` | `GET /motogp/content/sessions/latest` | `category_legacy_id` (query String)
`event_kind` (query String) | `ApiKeyAuth` | `MotoGpMotogpLatestSessionResponse` | | +| motoGp | `motoGp.motogpNextLiveSession` | `motogp-next-live-session` | `GET /motogp/content/sessions/next-live` | none | `ApiKeyAuth` | `MotoGpMotogpNextLiveSessionResponse` | | +| motoGp | `motoGp.motogpEntryList` | `motogp-entry-list` | `GET /motogp/entries` | `event_uuid` (query String required)
`category_uuid` (query String required) | `ApiKeyAuth` | `MotoGpMotogpEntryListResponse` | | +| motoGp | `motoGp.motogpEntryGridOptions` | `motogp-entry-grid-options` | `GET /motogp/entry-grid-options/{id}` | `id` (path String required) | `ApiKeyAuth` | `MotoGpMotogpEntryGridOptionsResponse` | | +| motoGp | `motoGp.motogpEventFiles` | `motogp-event-files` | `GET /motogp/event-files` | `event_uuid` (query String required)
`category_uuid` (query String required) | `ApiKeyAuth` | `MotoGpMotogpEventFilesResponse` | | +| motoGp | `motoGp.motogpEvents` | `motogp-events` | `GET /motogp/events` | `season_uuid` (query String required)
`is_finished` (query Boolean) | `ApiKeyAuth` | `MotoGpMotogpEventsResponse` | | +| motoGp | `motoGp.motogpSeasons` | `motogp-seasons` | `GET /motogp/seasons` | none | `ApiKeyAuth` | `MotoGpMotogpSeasonsResponse` | | +| motoGp | `motoGp.motogpSessions` | `motogp-sessions` | `GET /motogp/sessions` | `event_uuid` (query String required)
`category_uuid` (query String required) | `ApiKeyAuth` | `MotoGpMotogpSessionsResponse` | | +| motoGp | `motoGp.motogpStandings` | `motogp-standings` | `GET /motogp/standings` | `season_uuid` (query String required)
`category_uuid` (query String required) | `ApiKeyAuth` | `MotoGpMotogpStandingsResponse` | | +| motoGp | `motoGp.motogpStandingsFiles` | `motogp-standings-files` | `GET /motogp/standings-files` | `season_uuid` (query String required)
`category_uuid` (query String required) | `ApiKeyAuth` | `MotoGpMotogpStandingsFilesResponse` | | +| motoGp | `motoGp.motogpStartingGrid` | `motogp-starting-grid` | `GET /motogp/starting-grid` | `season_year` (query Integer required)
`shortname` (query String required)
`category_name` (query String required) | `ApiKeyAuth` | `MotoGpMotogpStartingGridResponse` | | +| nascar | `nascar.liveFeed` | `nascar-live-feed` | `GET /nascar/live-feed` | none | `ApiKeyAuth` | `NascarLiveFeedResponse` | | +| nascar | `nascar.races` | `nascar-races` | `GET /nascar/races` | none | `ApiKeyAuth` | `NascarRacesResponse` | | +| nascar | `nascar.seasonRaces` | `nascar-season-races` | `GET /nascar/races/{season}` | `season` (path Integer required) | `ApiKeyAuth` | `NascarSeasonRacesResponse` | | +| nascar | `nascar.series` | `nascar-series` | `GET /nascar/series` | `season` (query Integer) | `ApiKeyAuth` | `NascarSeriesResponse` | | +| nascar | `nascar.raceWeekend` | `nascar-race-weekend` | `GET /nascar/weekend/{season}/{series}/{race}` | `season` (path Integer required)
`series` (path Integer required)
`race` (path Integer required) | `ApiKeyAuth` | `NascarRaceWeekendResponse` | | | nationAfrica | `nationAfrica.nationafricaArticle` | `nationafrica-article` | `GET /nationafrica/article` | `url` (query String required) | `ApiKeyAuth` | `NationAfricaNationafricaArticleResponse` | | | nationAfrica | `nationAfrica.nationafricaAuthor` | `nationafrica-author` | `GET /nationafrica/author` | `slug` (query String)
`url` (query String) | `ApiKeyAuth` | `NationAfricaNationafricaAuthorResponse` | | | nationAfrica | `nationAfrica.nationafricaHeadlines` | `nationafrica-headlines` | `GET /nationafrica/headlines` | `section` (query String required) | `ApiKeyAuth` | `NationAfricaNationafricaHeadlinesResponse` | | @@ -2235,6 +2610,43 @@ Total operations: `4140` | nationalPost | `nationalPost.nationalpostHeadlines` | `nationalpost-headlines` | `GET /nationalpost/headlines` | `section` (query String required) | `ApiKeyAuth` | `NationalPostNationalpostHeadlinesResponse` | | | nationalPost | `nationalPost.nationalpostNews` | `nationalpost-news` | `GET /nationalpost/news` | none | `ApiKeyAuth` | `NationalPostNationalpostNewsResponse` | | | nationalPost | `nationalPost.nationalpostSections` | `nationalpost-sections` | `GET /nationalpost/sections` | none | `ApiKeyAuth` | `NationalPostNationalpostSectionsResponse` | | +| nba | `nba.boxScore` | `nba-box-score` | `GET /nba/box-score` | `game_id` (query String required)
`league_id` (query String)
`start_period` (query Integer)
`end_period` (query Integer) | `ApiKeyAuth` | `NbaBoxScoreResponse` | | +| nba | `nba.boxScoreAdvanced` | `nba-box-score-advanced` | `GET /nba/box-score-advanced` | `game_id` (query String required)
`league_id` (query String)
`start_period` (query Integer)
`end_period` (query Integer) | `ApiKeyAuth` | `NbaBoxScoreAdvancedResponse` | | +| nba | `nba.boxScoreFourFactors` | `nba-box-score-four-factors` | `GET /nba/box-score-four-factors` | `game_id` (query String required)
`league_id` (query String)
`start_period` (query Integer)
`end_period` (query Integer) | `ApiKeyAuth` | `NbaBoxScoreFourFactorsResponse` | | +| nba | `nba.boxScoreMisc` | `nba-box-score-misc` | `GET /nba/box-score-misc` | `game_id` (query String required)
`league_id` (query String)
`start_period` (query Integer)
`end_period` (query Integer) | `ApiKeyAuth` | `NbaBoxScoreMiscResponse` | | +| nba | `nba.boxScorePlayerTrack` | `nba-box-score-player-track` | `GET /nba/box-score-player-track` | `game_id` (query String required) | `ApiKeyAuth` | `NbaBoxScorePlayerTrackResponse` | | +| nba | `nba.boxScoreScoring` | `nba-box-score-scoring` | `GET /nba/box-score-scoring` | `game_id` (query String required)
`league_id` (query String)
`start_period` (query Integer)
`end_period` (query Integer) | `ApiKeyAuth` | `NbaBoxScoreScoringResponse` | | +| nba | `nba.boxScoreUsage` | `nba-box-score-usage` | `GET /nba/box-score-usage` | `game_id` (query String required)
`league_id` (query String)
`start_period` (query Integer)
`end_period` (query Integer) | `ApiKeyAuth` | `NbaBoxScoreUsageResponse` | | +| nba | `nba.commonAllPlayers` | `nba-common-all-players` | `GET /nba/common-all-players` | `league_id` (query String)
`season` (query String)
`is_only_current_season` (query Boolean) | `ApiKeyAuth` | `NbaCommonAllPlayersResponse` | | +| nba | `nba.draftCombineAnthro` | `nba-draft-combine-anthro` | `GET /nba/draft-combine-anthro` | `season_year` (query String required)
`league_id` (query String) | `ApiKeyAuth` | `NbaDraftCombineAnthroResponse` | | +| nba | `nba.enums` | `nba-enums` | `GET /nba/enums` | none | `ApiKeyAuth` | `NbaEnumsResponse` | | +| nba | `nba.franchiseHistory` | `nba-franchise-history` | `GET /nba/franchise-history` | `league_id` (query String)
`team_id` (query Integer) | `ApiKeyAuth` | `NbaFranchiseHistoryResponse` | | +| nba | `nba.gameDetail` | `nba-game-detail` | `GET /nba/game-detail` | `game_id` (query String required) | `ApiKeyAuth` | `NbaGameDetailResponse` | | +| nba | `nba.games` | `nba-games` | `GET /nba/games` | none | `ApiKeyAuth` | `NbaGamesResponse` | | +| nba | `nba.homepageLeaders` | `nba-homepage-leaders` | `GET /nba/homepage-leaders` | `league_id` (query String)
`stat_category` (query String)
`player_or_team` (query String)
`player_scope` (query String)
`game_scope` (query String) | `ApiKeyAuth` | `NbaHomepageLeadersResponse` | | +| nba | `nba.hustleStats` | `nba-hustle-stats` | `GET /nba/hustle-stats` | `game_id` (query String required) | `ApiKeyAuth` | `NbaHustleStatsResponse` | | +| nba | `nba.leagueGameLog` | `nba-league-game-log` | `GET /nba/league-game-log` | `league_id` (query String)
`season` (query String)
`season_type` (query String)
`direction` (query String)
`player_or_team` (query String)
`sorter` (query String) | `ApiKeyAuth` | `NbaLeagueGameLogResponse` | | +| nba | `nba.lineups` | `nba-lineups` | `GET /nba/lineups` | `league_id` (query String)
`season` (query String)
`season_type` (query String)
`measure_type` (query String)
`per_mode` (query String)
`group_quantity` (query String) | `ApiKeyAuth` | `NbaLineupsResponse` | | +| nba | `nba.news` | `nba-news` | `GET /nba/news` | none | `ApiKeyAuth` | `NbaNewsResponse` | | +| nba | `nba.playByPlay` | `nba-play-by-play` | `GET /nba/play-by-play` | `game_id` (query String required)
`start_period` (query Integer)
`end_period` (query Integer) | `ApiKeyAuth` | `NbaPlayByPlayResponse` | | +| nba | `nba.playerAwards` | `nba-player-awards` | `GET /nba/player-awards` | `player_id` (query Integer required) | `ApiKeyAuth` | `NbaPlayerAwardsResponse` | | +| nba | `nba.playerBioStats` | `nba-player-bio-stats` | `GET /nba/player-bio-stats` | `league_id` (query String)
`season` (query String)
`season_type` (query String)
`per_mode` (query String) | `ApiKeyAuth` | `NbaPlayerBioStatsResponse` | | +| nba | `nba.playerCareerStats` | `nba-player-career-stats` | `GET /nba/player-career-stats` | `player_id` (query Integer required)
`per_mode` (query String)
`league_id` (query String) | `ApiKeyAuth` | `NbaPlayerCareerStatsResponse` | | +| nba | `nba.playerDashPtShots` | `nba-player-dash-pt-shots` | `GET /nba/player-dash-pt-shots` | `player_id` (query Integer required)
`league_id` (query String)
`season` (query String)
`season_type` (query String)
`per_mode` (query String) | `ApiKeyAuth` | `NbaPlayerDashPtShotsResponse` | | +| nba | `nba.playerInfo` | `nba-player-info` | `GET /nba/player-info` | `player_id` (query Integer required)
`league_id` (query String) | `ApiKeyAuth` | `NbaPlayerInfoResponse` | | +| nba | `nba.playerStats` | `nba-player-stats` | `GET /nba/player-stats` | `league_id` (query String)
`season` (query String)
`season_type` (query String)
`measure_type` (query String)
`per_mode` (query String) | `ApiKeyAuth` | `NbaPlayerStatsResponse` | | +| nba | `nba.players` | `nba-players` | `GET /nba/players` | `league_id` (query String)
`season` (query String)
`team_id` (query Integer)
`active` (query Boolean) | `ApiKeyAuth` | `NbaPlayersResponse` | | +| nba | `nba.playoffPicture` | `nba-playoff-picture` | `GET /nba/playoff-picture` | `league_id` (query String)
`season_id` (query String) | `ApiKeyAuth` | `NbaPlayoffPictureResponse` | | +| nba | `nba.ptDefend` | `nba-pt-defend` | `GET /nba/pt-defend` | `league_id` (query String)
`season` (query String)
`season_type` (query String)
`per_mode` (query String)
`defense_category` (query String) | `ApiKeyAuth` | `NbaPtDefendResponse` | | +| nba | `nba.ptStats` | `nba-pt-stats` | `GET /nba/pt-stats` | `league_id` (query String)
`season` (query String)
`season_type` (query String)
`per_mode` (query String)
`pt_measure_type` (query String) | `ApiKeyAuth` | `NbaPtStatsResponse` | | +| nba | `nba.scoreboard` | `nba-scoreboard` | `GET /nba/scoreboard` | `league_id` (query String)
`game_date` (query String)
`day_offset` (query Integer) | `ApiKeyAuth` | `NbaScoreboardResponse` | | +| nba | `nba.standings` | `nba-standings` | `GET /nba/standings` | `league_id` (query String)
`season` (query String)
`season_type` (query String) | `ApiKeyAuth` | `NbaStandingsResponse` | | +| nba | `nba.synergyPlayTypes` | `nba-synergy-play-types` | `GET /nba/synergy-play-types` | `league_id` (query String)
`season_year` (query String)
`season_type` (query String)
`play_type` (query String)
`per_mode` (query String)
`player_or_team` (query String)
`type_grouping` (query String) | `ApiKeyAuth` | `NbaSynergyPlayTypesResponse` | | +| nba | `nba.teamDetails` | `nba-team-details` | `GET /nba/team-details` | `team_id` (query Integer required)
`league_id` (query String) | `ApiKeyAuth` | `NbaTeamDetailsResponse` | | +| nba | `nba.teamRoster` | `nba-team-roster` | `GET /nba/team-roster` | `team_id` (query Integer required)
`league_id` (query String)
`season` (query String) | `ApiKeyAuth` | `NbaTeamRosterResponse` | | +| nba | `nba.teamShotLocations` | `nba-team-shot-locations` | `GET /nba/team-shot-locations` | `league_id` (query String)
`season` (query String)
`season_type` (query String)
`measure_type` (query String)
`per_mode` (query String)
`distance_range` (query String) | `ApiKeyAuth` | `NbaTeamShotLocationsResponse` | | +| nba | `nba.teamStats` | `nba-team-stats` | `GET /nba/team-stats` | `league_id` (query String)
`season` (query String)
`season_type` (query String)
`measure_type` (query String)
`per_mode` (query String) | `ApiKeyAuth` | `NbaTeamStatsResponse` | | +| nba | `nba.teamStatsLeaders` | `nba-team-stats-leaders` | `GET /nba/team-stats-leaders` | `stat_category` (query String required)
`league_id` (query String)
`season` (query String)
`season_type` (query String)
`per_mode` (query String)
`scope` (query String) | `ApiKeyAuth` | `NbaTeamStatsLeadersResponse` | | | nbcNews | `nbcNews.nbcArticle` | `nbc-article` | `GET /nbc/article` | `url` (query String required) | `ApiKeyAuth` | `NbcNewsNbcArticleResponse` | | | nbcNews | `nbcNews.nbcAuthor` | `nbc-author` | `GET /nbc/author` | `url` (query String required) | `ApiKeyAuth` | `NbcNewsNbcAuthorResponse` | | | nbcNews | `nbcNews.nbcHeadlines` | `nbc-headlines` | `GET /nbc/headlines` | `section` (query String required) | `ApiKeyAuth` | `NbcNewsNbcHeadlinesResponse` | | @@ -2252,6 +2664,14 @@ Total operations: `4140` | ndtv | `ndtv.video` | `ndtv-video` | `GET /ndtv/video` | `url` (query String required) | `ApiKeyAuth` | `NdtvVideoResponse` | | | ndtv | `ndtv.videoCategories` | `ndtv-video-categories` | `GET /ndtv/video-categories` | none | `ApiKeyAuth` | `NdtvVideoCategoriesResponse` | | | ndtv | `ndtv.videos` | `ndtv-videos` | `GET /ndtv/videos` | `category` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `NdtvVideosResponse` | | +| netShort | `netShort.netshortBrowse` | `netshort-browse` | `GET /netshort/browse` | `language` (query String)
`page` (query Integer) | `ApiKeyAuth` | `NetShortNetshortBrowseResponse` | | +| netShort | `netShort.netshortGenres` | `netshort-genres` | `GET /netshort/genres` | `language` (query String) | `ApiKeyAuth` | `NetShortNetshortGenresResponse` | | +| netShort | `netShort.netshortHome` | `netshort-home` | `GET /netshort/home` | `language` (query String) | `ApiKeyAuth` | `NetShortNetshortHomeResponse` | | +| netShort | `netShort.netshortLabel` | `netshort-label` | `GET /netshort/label` | `label_id` (query String required)
`name` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `NetShortNetshortLabelResponse` | | +| netShort | `netShort.netshortPlots` | `netshort-plots` | `GET /netshort/plots` | `language` (query String)
`page` (query Integer) | `ApiKeyAuth` | `NetShortNetshortPlotsResponse` | | +| netShort | `netShort.netshortSearch` | `netshort-search` | `GET /netshort/search` | `query` (query String required)
`page` (query Integer)
`page_size` (query Integer)
`language` (query String) | `ApiKeyAuth` | `NetShortNetshortSearchResponse` | | +| netShort | `netShort.netshortTitle` | `netshort-title` | `GET /netshort/title` | `title_id` (query String required)
`slug` (query String) | `ApiKeyAuth` | `NetShortNetshortTitleResponse` | | +| netShort | `netShort.netshortToplist` | `netshort-toplist` | `GET /netshort/toplist` | `board` (query String required) | `ApiKeyAuth` | `NetShortNetshortToplistResponse` | | | news18 | `news18.article` | `news18-article` | `GET /news18/article` | `url` (query String required) | `ApiKeyAuth` | `News18ArticleResponse` | | | news18 | `news18.author` | `news18-author` | `GET /news18/author` | `url` (query String required) | `ApiKeyAuth` | `News18AuthorResponse` | | | news18 | `news18.headlines` | `news18-headlines` | `GET /news18/headlines` | `section` (query String required) | `ApiKeyAuth` | `News18HeadlinesResponse` | | @@ -2281,6 +2701,23 @@ Total operations: `4140` | theNewYorker | `theNewYorker.newyorkerHeadlines` | `newyorker-headlines` | `GET /newyorker/headlines` | `section` (query String required) | `ApiKeyAuth` | `TheNewYorkerNewyorkerHeadlinesResponse` | | | theNewYorker | `theNewYorker.newyorkerNews` | `newyorker-news` | `GET /newyorker/news` | none | `ApiKeyAuth` | `TheNewYorkerNewyorkerNewsResponse` | | | theNewYorker | `theNewYorker.newyorkerSections` | `newyorker-sections` | `GET /newyorker/sections` | none | `ApiKeyAuth` | `TheNewYorkerNewyorkerSectionsResponse` | | +| nfhs | `nfhs.activities` | `nfhs-activities` | `GET /nfhs/activities` | `is_sport` (query Boolean)
`is_top_sport` (query Boolean) | `ApiKeyAuth` | `NfhsActivitiesResponse` | | +| nfhs | `nfhs.affiliates` | `nfhs-affiliates` | `GET /nfhs/affiliates` | `search_term` (query String)
`state` (query String)
`is_network` (query Boolean)
`start` (query Integer)
`size` (query Integer) | `ApiKeyAuth` | `NfhsAffiliatesResponse` | | +| nfhs | `nfhs.affiliate` | `nfhs-affiliate` | `GET /nfhs/affiliates/{key}` | `key` (path String required) | `ApiKeyAuth` | `NfhsAffiliateResponse` | | +| nfhs | `nfhs.associations` | `nfhs-associations` | `GET /nfhs/associations` | `search_term` (query String)
`state` (query String)
`is_network` (query Boolean)
`start` (query Integer)
`size` (query Integer) | `ApiKeyAuth` | `NfhsAssociationsResponse` | | +| nfhs | `nfhs.association` | `nfhs-association` | `GET /nfhs/associations/{key}` | `key` (path String required) | `ApiKeyAuth` | `NfhsAssociationResponse` | | +| nfhs | `nfhs.events` | `nfhs-events` | `GET /nfhs/events` | `type` (query String)
`activity` (query String)
`state` (query String)
`gender` (query String)
`level` (query String)
`school_key` (query String)
`publisher_key` (query String)
`is_postseason` (query Boolean)
`download_to_own` (query Boolean)
`search_term` (query String)
`from` (query String)
`to` (query String)
`sort` (query String)
`start` (query Integer)
`size` (query Integer)
`cursor` (query String) | `ApiKeyAuth` | `NfhsEventsResponse` | | +| nfhs | `nfhs.event` | `nfhs-event` | `GET /nfhs/events/{key}` | `key` (path String required) | `ApiKeyAuth` | `NfhsEventResponse` | | +| nfhs | `nfhs.filters` | `nfhs-filters` | `GET /nfhs/filters` | none | `ApiKeyAuth` | `NfhsFiltersResponse` | | +| nfhs | `nfhs.highlights` | `nfhs-highlights` | `GET /nfhs/highlights` | `activity` (query String)
`state` (query String)
`gender` (query String)
`level` (query String)
`school_key` (query String)
`search_term` (query String)
`from` (query String)
`to` (query String)
`sort` (query String)
`start` (query Integer)
`size` (query Integer)
`cursor` (query String) | `ApiKeyAuth` | `NfhsHighlightsResponse` | | +| nfhs | `nfhs.producer` | `nfhs-producer` | `GET /nfhs/producers/{key}` | `key` (path String required) | `ApiKeyAuth` | `NfhsProducerResponse` | | +| nfhs | `nfhs.publisher` | `nfhs-publisher` | `GET /nfhs/publishers/{key}` | `key` (path String required) | `ApiKeyAuth` | `NfhsPublisherResponse` | | +| nfhs | `nfhs.schools` | `nfhs-schools` | `GET /nfhs/schools` | `state` (query String)
`search_term` (query String)
`sort` (query String)
`is_network` (query Boolean)
`start` (query Integer)
`size` (query Integer) | `ApiKeyAuth` | `NfhsSchoolsResponse` | | +| nfhs | `nfhs.school` | `nfhs-school` | `GET /nfhs/schools/{key}` | `key` (path String required) | `ApiKeyAuth` | `NfhsSchoolResponse` | | +| nfhs | `nfhs.search` | `nfhs-search` | `GET /nfhs/search` | `search_term` (query String required)
`state` (query String)
`activity` (query String)
`start` (query Integer)
`size` (query Integer)
`cursor` (query String) | `ApiKeyAuth` | `NfhsSearchResponse` | | +| nfhs | `nfhs.sports` | `nfhs-sports` | `GET /nfhs/sports` | none | `ApiKeyAuth` | `NfhsSportsResponse` | | +| nfhs | `nfhs.states` | `nfhs-states` | `GET /nfhs/states` | none | `ApiKeyAuth` | `NfhsStatesResponse` | | +| nfhs | `nfhs.suggest` | `nfhs-suggest` | `GET /nfhs/suggest` | `search_term` (query String required)
`scope` (query String)
`size` (query Integer) | `ApiKeyAuth` | `NfhsSuggestResponse` | | | nike | `nike.categories` | `nike-categories` | `GET /nike/categories` | none | `ApiKeyAuth` | `NikeCategoriesResponse` | | | nike | `nike.product` | `nike-product` | `GET /nike/product` | `slug` (query String required)
`style_color` (query String required) | `ApiKeyAuth` | `NikeProductResponse` | | | nike | `nike.productAvailability` | `nike-product-availability` | `GET /nike/product/availability` | `group_key` (query String required) | `ApiKeyAuth` | `NikeProductAvailabilityResponse` | | @@ -2358,10 +2795,13 @@ Total operations: `4140` | oldNavy | `oldNavy.oldnavySearch` | `oldnavy-search` | `GET /oldnavy/search` | `keyword` (query String required)
`brand` (query String)
`page` (query Integer) | `ApiKeyAuth` | `OldNavyOldnavySearchResponse` | | | oldNavy | `oldNavy.oldnavyStores` | `oldnavy-stores` | `GET /oldnavy/stores` | `search` (query String)
`lat` (query Double)
`lng` (query Double)
`brand` (query String) | `ApiKeyAuth` | `OldNavyOldnavyStoresResponse` | | | openDota | `openDota.opendotaAbilities` | `opendota-abilities` | `GET /opendota/abilities` | `q` (query String)
`limit` (query Integer) | `ApiKeyAuth` | `OpenDotaOpendotaAbilitiesResponse` | | -| openDota | `openDota.opendotaBenchmarks` | `opendota-benchmarks` | `GET /opendota/benchmarks` | `hero_id` (query Integer required) | `ApiKeyAuth` | `OpenDotaOpendotaBenchmarksResponse` | | +| openDota | `openDota.opendotaBenchmarks` | `opendota-benchmarks` | `GET /opendota/benchmarks` | `hero_id` (query Integer required)
`bracket` (query Integer)
`role` (query String) | `ApiKeyAuth` | `OpenDotaOpendotaBenchmarksResponse` | | | openDota | `openDota.opendotaConstants` | `opendota-constants` | `GET /opendota/constants` | `resource` (query String required) | `ApiKeyAuth` | `OpenDotaOpendotaConstantsResponse` | | +| openDota | `openDota.opendotaFindMatches` | `opendota-find-matches` | `GET /opendota/find-matches` | `team_a` (query String)
`team_b` (query String) | `ApiKeyAuth` | `OpenDotaOpendotaFindMatchesResponse` | | +| openDota | `openDota.opendotaHeroDescriptions` | `opendota-hero-descriptions` | `GET /opendota/hero-descriptions` | `hero_id` (query Integer)
`include_lore` (query Boolean) | `ApiKeyAuth` | `OpenDotaOpendotaHeroDescriptionsResponse` | | | openDota | `openDota.opendotaHeroDurations` | `opendota-hero-durations` | `GET /opendota/hero-durations` | `hero_id` (query Integer required) | `ApiKeyAuth` | `OpenDotaOpendotaHeroDurationsResponse` | | | openDota | `openDota.opendotaHeroItems` | `opendota-hero-items` | `GET /opendota/hero-items` | `hero_id` (query Integer required) | `ApiKeyAuth` | `OpenDotaOpendotaHeroItemsResponse` | | +| openDota | `openDota.opendotaHeroMatches` | `opendota-hero-matches` | `GET /opendota/hero-matches` | `hero_id` (query Integer required) | `ApiKeyAuth` | `OpenDotaOpendotaHeroMatchesResponse` | | | openDota | `openDota.opendotaHeroMatchups` | `opendota-hero-matchups` | `GET /opendota/hero-matchups` | `hero_id` (query Integer required) | `ApiKeyAuth` | `OpenDotaOpendotaHeroMatchupsResponse` | | | openDota | `openDota.opendotaHeroStats` | `opendota-hero-stats` | `GET /opendota/hero-stats` | `primary_attr` (query String)
`attack_type` (query String)
`role` (query String)
`sort` (query String)
`desc` (query Boolean)
`limit` (query Integer) | `ApiKeyAuth` | `OpenDotaOpendotaHeroStatsResponse` | | | openDota | `openDota.opendotaHeroes` | `opendota-heroes` | `GET /opendota/heroes` | none | `ApiKeyAuth` | `OpenDotaOpendotaHeroesResponse` | | @@ -2375,6 +2815,7 @@ Total operations: `4140` | openDota | `openDota.opendotaPatchNotes` | `opendota-patch-notes` | `GET /opendota/patch-notes` | `patch` (query String) | `ApiKeyAuth` | `OpenDotaOpendotaPatchNotesResponse` | | | openDota | `openDota.opendotaProMatches` | `opendota-pro-matches` | `GET /opendota/pro-matches` | `less_than_match_id` (query Integer) | `ApiKeyAuth` | `OpenDotaOpendotaProMatchesResponse` | | | openDota | `openDota.opendotaProPlayers` | `opendota-pro-players` | `GET /opendota/pro-players` | `team_id` (query Integer)
`q` (query String)
`limit` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `OpenDotaOpendotaProPlayersResponse` | | +| openDota | `openDota.opendotaPublicMatches` | `opendota-public-matches` | `GET /opendota/public-matches` | `min_rank` (query String)
`max_rank` (query String)
`less_than_match_id` (query Integer) | `ApiKeyAuth` | `OpenDotaOpendotaPublicMatchesResponse` | | | openDota | `openDota.opendotaRankDistribution` | `opendota-rank-distribution` | `GET /opendota/rank-distribution` | none | `ApiKeyAuth` | `OpenDotaOpendotaRankDistributionResponse` | | | openDota | `openDota.opendotaRecords` | `opendota-records` | `GET /opendota/records` | `field` (query String required) | `ApiKeyAuth` | `OpenDotaOpendotaRecordsResponse` | | | openDota | `openDota.opendotaScenarios` | `opendota-scenarios` | `GET /opendota/scenarios` | `kind` (query String required)
`hero_id` (query Integer)
`item` (query String)
`lane_role` (query Integer)
`scenario` (query String)
`limit` (query Integer) | `ApiKeyAuth` | `OpenDotaOpendotaScenariosResponse` | | @@ -2383,6 +2824,46 @@ Total operations: `4140` | openDota | `openDota.opendotaTeamMatches` | `opendota-team-matches` | `GET /opendota/team-matches` | `team_id` (query Integer required) | `ApiKeyAuth` | `OpenDotaOpendotaTeamMatchesResponse` | | | openDota | `openDota.opendotaTeamPlayers` | `opendota-team-players` | `GET /opendota/team-players` | `team_id` (query Integer required) | `ApiKeyAuth` | `OpenDotaOpendotaTeamPlayersResponse` | | | openDota | `openDota.opendotaTeams` | `opendota-teams` | `GET /opendota/teams` | `page` (query Integer) | `ApiKeyAuth` | `OpenDotaOpendotaTeamsResponse` | | +| openF1 | `openF1.openf1CarData` | `openf1-car-data` | `GET /openf1/car-data` | `session_key` (query String)
`meeting_key` (query String)
`driver_number` (query Integer)
`date_from` (query String)
`date_to` (query String)
`speed_gte` (query Integer)
`speed_lte` (query Integer)
`rpm_gte` (query Integer)
`rpm_lte` (query Integer)
`throttle_gte` (query Integer)
`throttle_lte` (query Integer)
`n_gear` (query Integer)
`drs` (query Integer)
`brake` (query Integer)
`filter` (query List) | `ApiKeyAuth` | `OpenF1Openf1CarDataResponse` | | +| openF1 | `openF1.openf1ChampionshipDrivers` | `openf1-championship-drivers` | `GET /openf1/championship-drivers` | `session_key` (query String)
`meeting_key` (query String)
`driver_number` (query Integer)
`filter` (query List) | `ApiKeyAuth` | `OpenF1Openf1ChampionshipDriversResponse` | | +| openF1 | `openF1.openf1ChampionshipTeams` | `openf1-championship-teams` | `GET /openf1/championship-teams` | `session_key` (query String)
`meeting_key` (query String)
`team_name` (query String)
`filter` (query List) | `ApiKeyAuth` | `OpenF1Openf1ChampionshipTeamsResponse` | | +| openF1 | `openF1.openf1Drivers` | `openf1-drivers` | `GET /openf1/drivers` | `session_key` (query String)
`meeting_key` (query String)
`driver_number` (query Integer)
`team_name` (query String)
`name_acronym` (query String)
`full_name` (query String)
`country_code` (query String)
`filter` (query List) | `ApiKeyAuth` | `OpenF1Openf1DriversResponse` | | +| openF1 | `openF1.openf1Intervals` | `openf1-intervals` | `GET /openf1/intervals` | `session_key` (query String)
`meeting_key` (query String)
`driver_number` (query Integer)
`date_from` (query String)
`date_to` (query String)
`interval_gt` (query Double)
`interval_lt` (query Double)
`gap_to_leader_gt` (query Double)
`gap_to_leader_lt` (query Double)
`filter` (query List) | `ApiKeyAuth` | `OpenF1Openf1IntervalsResponse` | | +| openF1 | `openF1.openf1Laps` | `openf1-laps` | `GET /openf1/laps` | `session_key` (query String)
`meeting_key` (query String)
`driver_number` (query Integer)
`lap_number` (query Integer)
`is_pit_out_lap` (query Boolean)
`lap_duration_gte` (query Double)
`lap_duration_lte` (query Double)
`date_from` (query String)
`date_to` (query String)
`filter` (query List) | `ApiKeyAuth` | `OpenF1Openf1LapsResponse` | | +| openF1 | `openF1.openf1Location` | `openf1-location` | `GET /openf1/location` | `session_key` (query String)
`meeting_key` (query String)
`driver_number` (query Integer)
`date_from` (query String)
`date_to` (query String)
`filter` (query List) | `ApiKeyAuth` | `OpenF1Openf1LocationResponse` | | +| openF1 | `openF1.openf1Meetings` | `openf1-meetings` | `GET /openf1/meetings` | `year` (query Integer)
`country_name` (query String)
`country_code` (query String)
`meeting_name` (query String)
`circuit_key` (query Integer)
`circuit_short_name` (query String)
`circuit_type` (query String)
`location` (query String)
`is_cancelled` (query Boolean)
`date_from` (query String)
`date_to` (query String)
`filter` (query List) | `ApiKeyAuth` | `OpenF1Openf1MeetingsResponse` | | +| openF1 | `openF1.openf1Overtakes` | `openf1-overtakes` | `GET /openf1/overtakes` | `session_key` (query String)
`meeting_key` (query String)
`overtaking_driver_number` (query Integer)
`overtaken_driver_number` (query Integer)
`position` (query Integer)
`date_from` (query String)
`date_to` (query String)
`filter` (query List) | `ApiKeyAuth` | `OpenF1Openf1OvertakesResponse` | | +| openF1 | `openF1.openf1Pit` | `openf1-pit` | `GET /openf1/pit` | `session_key` (query String)
`meeting_key` (query String)
`driver_number` (query Integer)
`lap_number` (query Integer)
`date_from` (query String)
`date_to` (query String)
`stop_duration_lt` (query Double)
`stop_duration_lte` (query Double)
`lane_duration_gte` (query Double)
`lane_duration_lte` (query Double)
`filter` (query List) | `ApiKeyAuth` | `OpenF1Openf1PitResponse` | | +| openF1 | `openF1.openf1Position` | `openf1-position` | `GET /openf1/position` | `session_key` (query String)
`meeting_key` (query String)
`driver_number` (query Integer)
`position_gte` (query Integer)
`position_lte` (query Integer)
`date_from` (query String)
`date_to` (query String)
`filter` (query List) | `ApiKeyAuth` | `OpenF1Openf1PositionResponse` | | +| openF1 | `openF1.openf1RaceControl` | `openf1-race-control` | `GET /openf1/race-control` | `session_key` (query String)
`meeting_key` (query String)
`driver_number` (query Integer)
`category` (query String)
`flag` (query String)
`scope` (query String)
`sector` (query Integer)
`lap_number` (query Integer)
`qualifying_phase` (query Integer)
`date_from` (query String)
`date_to` (query String)
`filter` (query List) | `ApiKeyAuth` | `OpenF1Openf1RaceControlResponse` | | +| openF1 | `openF1.openf1SessionResult` | `openf1-session-result` | `GET /openf1/session-result` | `session_key` (query String)
`meeting_key` (query String)
`driver_number` (query Integer)
`position_gte` (query Integer)
`position_lte` (query Integer)
`dnf` (query Boolean)
`dns` (query Boolean)
`dsq` (query Boolean)
`filter` (query List) | `ApiKeyAuth` | `OpenF1Openf1SessionResultResponse` | | +| openF1 | `openF1.openf1Sessions` | `openf1-sessions` | `GET /openf1/sessions` | `year` (query Integer)
`country_name` (query String)
`country_code` (query String)
`session_name` (query String)
`session_type` (query String)
`meeting_key` (query String)
`circuit_key` (query Integer)
`is_cancelled` (query Boolean)
`date_from` (query String)
`date_to` (query String)
`filter` (query List) | `ApiKeyAuth` | `OpenF1Openf1SessionsResponse` | | +| openF1 | `openF1.openf1StartingGrid` | `openf1-starting-grid` | `GET /openf1/starting-grid` | `session_key` (query String)
`meeting_key` (query String)
`driver_number` (query Integer)
`position_gte` (query Integer)
`position_lte` (query Integer)
`filter` (query List) | `ApiKeyAuth` | `OpenF1Openf1StartingGridResponse` | | +| openF1 | `openF1.openf1Stints` | `openf1-stints` | `GET /openf1/stints` | `session_key` (query String)
`meeting_key` (query String)
`driver_number` (query Integer)
`compound` (query String)
`stint_number` (query Integer)
`tyre_age_at_start_gte` (query Integer)
`tyre_age_at_start_lte` (query Integer)
`lap_start_gte` (query Integer)
`lap_start_lte` (query Integer)
`lap_end_gte` (query Integer)
`lap_end_lte` (query Integer)
`filter` (query List) | `ApiKeyAuth` | `OpenF1Openf1StintsResponse` | | +| openF1 | `openF1.openf1TeamRadio` | `openf1-team-radio` | `GET /openf1/team-radio` | `session_key` (query String)
`meeting_key` (query String)
`driver_number` (query Integer)
`date_from` (query String)
`date_to` (query String)
`filter` (query List) | `ApiKeyAuth` | `OpenF1Openf1TeamRadioResponse` | | +| openF1 | `openF1.openf1Weather` | `openf1-weather` | `GET /openf1/weather` | `session_key` (query String)
`meeting_key` (query String)
`date_from` (query String)
`date_to` (query String)
`air_temperature_gte` (query Double)
`air_temperature_lte` (query Double)
`track_temperature_gte` (query Double)
`track_temperature_lte` (query Double)
`humidity_gte` (query Double)
`humidity_lte` (query Double)
`pressure_gte` (query Double)
`pressure_lte` (query Double)
`wind_direction_gte` (query Double)
`wind_direction_lte` (query Double)
`wind_speed_gte` (query Double)
`wind_speed_lte` (query Double)
`rainfall` (query Integer)
`filter` (query List) | `ApiKeyAuth` | `OpenF1Openf1WeatherResponse` | | +| openLigaDb | `openLigaDb.openligadbCurrentGroup` | `openligadb-current-group` | `GET /openligadb/current-group` | `league_shortcut` (query String required) | `ApiKeyAuth` | `OpenLigaDbOpenligadbCurrentGroupResponse` | | +| openLigaDb | `openLigaDb.openligadbCurrentMatchday` | `openligadb-current-matchday` | `GET /openligadb/current-matchday` | `league_shortcut` (query String required) | `ApiKeyAuth` | `OpenLigaDbOpenligadbCurrentMatchdayResponse` | | +| openLigaDb | `openLigaDb.openligadbGoalGetters` | `openligadb-goal-getters` | `GET /openligadb/goal-getters` | `league_shortcut` (query String required)
`season` (query Integer required) | `ApiKeyAuth` | `OpenLigaDbOpenligadbGoalGettersResponse` | | +| openLigaDb | `openLigaDb.openligadbGroups` | `openligadb-groups` | `GET /openligadb/groups` | `league_shortcut` (query String required)
`season` (query Integer required) | `ApiKeyAuth` | `OpenLigaDbOpenligadbGroupsResponse` | | +| openLigaDb | `openLigaDb.openligadbLastChanged` | `openligadb-last-changed` | `GET /openligadb/last-changed` | `league_shortcut` (query String required)
`season` (query Integer required)
`group_order_id` (query Integer required) | `ApiKeyAuth` | `OpenLigaDbOpenligadbLastChangedResponse` | | +| openLigaDb | `openLigaDb.openligadbLastMatch` | `openligadb-last-match` | `GET /openligadb/last-match` | `league_shortcut` (query String required) | `ApiKeyAuth` | `OpenLigaDbOpenligadbLastMatchResponse` | | +| openLigaDb | `openLigaDb.openligadbLastTeamMatch` | `openligadb-last-team-match` | `GET /openligadb/last-team-match` | `league_id` (query Integer required)
`team_id` (query Integer required) | `ApiKeyAuth` | `OpenLigaDbOpenligadbLastTeamMatchResponse` | | +| openLigaDb | `openLigaDb.openligadbLeagueTeamMatches` | `openligadb-league-team-matches` | `GET /openligadb/league-team-matches` | `league_shortcut` (query String required)
`season` (query Integer required)
`team_filter` (query String required) | `ApiKeyAuth` | `OpenLigaDbOpenligadbLeagueTeamMatchesResponse` | | +| openLigaDb | `openLigaDb.openligadbLeagues` | `openligadb-leagues` | `GET /openligadb/leagues` | `season` (query Integer) | `ApiKeyAuth` | `OpenLigaDbOpenligadbLeaguesResponse` | | +| openLigaDb | `openLigaDb.openligadbMatch` | `openligadb-match` | `GET /openligadb/match` | `match_id` (query Integer required) | `ApiKeyAuth` | `OpenLigaDbOpenligadbMatchResponse` | | +| openLigaDb | `openLigaDb.openligadbMatchdayMatches` | `openligadb-matchday-matches` | `GET /openligadb/matchday-matches` | `league_shortcut` (query String required)
`season` (query Integer required)
`group_order_id` (query Integer required) | `ApiKeyAuth` | `OpenLigaDbOpenligadbMatchdayMatchesResponse` | | +| openLigaDb | `openLigaDb.openligadbLeagueMatches` | `openligadb-league-matches` | `GET /openligadb/matches` | `league_shortcut` (query String required)
`season` (query Integer required) | `ApiKeyAuth` | `OpenLigaDbOpenligadbLeagueMatchesResponse` | | +| openLigaDb | `openLigaDb.openligadbMatchesByTeam` | `openligadb-matches-by-team` | `GET /openligadb/matches-by-team` | `team_filter` (query String required)
`weeks_past` (query Integer required)
`weeks_future` (query Integer required) | `ApiKeyAuth` | `OpenLigaDbOpenligadbMatchesByTeamResponse` | | +| openLigaDb | `openLigaDb.openligadbMatchesByTeamId` | `openligadb-matches-by-team-id` | `GET /openligadb/matches-by-team-id` | `team_id` (query Integer required)
`weeks_past` (query Integer required)
`weeks_future` (query Integer required) | `ApiKeyAuth` | `OpenLigaDbOpenligadbMatchesByTeamIdResponse` | | +| openLigaDb | `openLigaDb.openligadbNextMatch` | `openligadb-next-match` | `GET /openligadb/next-match` | `league_shortcut` (query String required) | `ApiKeyAuth` | `OpenLigaDbOpenligadbNextMatchResponse` | | +| openLigaDb | `openLigaDb.openligadbNextTeamMatch` | `openligadb-next-team-match` | `GET /openligadb/next-team-match` | `league_id` (query Integer required)
`team_id` (query Integer required) | `ApiKeyAuth` | `OpenLigaDbOpenligadbNextTeamMatchResponse` | | +| openLigaDb | `openLigaDb.openligadbResultInfos` | `openligadb-result-infos` | `GET /openligadb/result-infos` | `league_id` (query Integer required) | `ApiKeyAuth` | `OpenLigaDbOpenligadbResultInfosResponse` | | +| openLigaDb | `openLigaDb.openligadbResultTypes` | `openligadb-result-types` | `GET /openligadb/result-types` | none | `ApiKeyAuth` | `OpenLigaDbOpenligadbResultTypesResponse` | | +| openLigaDb | `openLigaDb.openligadbSports` | `openligadb-sports` | `GET /openligadb/sports` | none | `ApiKeyAuth` | `OpenLigaDbOpenligadbSportsResponse` | | +| openLigaDb | `openLigaDb.openligadbTable` | `openligadb-table` | `GET /openligadb/table` | `league_shortcut` (query String required)
`season` (query Integer required) | `ApiKeyAuth` | `OpenLigaDbOpenligadbTableResponse` | | +| openLigaDb | `openLigaDb.openligadbTeamPairMatches` | `openligadb-team-pair-matches` | `GET /openligadb/team-pair-matches` | `team_id_1` (query Integer required)
`team_id_2` (query Integer required) | `ApiKeyAuth` | `OpenLigaDbOpenligadbTeamPairMatchesResponse` | | +| openLigaDb | `openLigaDb.openligadbTeams` | `openligadb-teams` | `GET /openligadb/teams` | `league_shortcut` (query String required)
`season` (query Integer required) | `ApiKeyAuth` | `OpenLigaDbOpenligadbTeamsResponse` | | | openSea | `openSea.openseaActivity` | `opensea-activity` | `GET /opensea/activity` | `limit` (query Integer)
`cursor` (query String)
`event_types` (query String) | `ApiKeyAuth` | `OpenSeaOpenseaActivityResponse` | | | openSea | `openSea.openseaCategories` | `opensea-categories` | `GET /opensea/categories` | none | `ApiKeyAuth` | `OpenSeaOpenseaCategoriesResponse` | | | openSea | `openSea.openseaChains` | `opensea-chains` | `GET /opensea/chains` | none | `ApiKeyAuth` | `OpenSeaOpenseaChainsResponse` | | @@ -2473,6 +2954,10 @@ Total operations: `4140` | papaJohnS | `papaJohnS.papajohnsPolandMenu` | `papajohns-poland-menu` | `GET /papajohns/poland/menu` | `category` (query String) | `ApiKeyAuth` | `PapaJohnSPapajohnsPolandMenuResponse` | | | papaJohnS | `papaJohnS.papajohnsRussiaMenu` | `papajohns-russia-menu` | `GET /papajohns/russia/menu` | `category` (query String) | `ApiKeyAuth` | `PapaJohnSPapajohnsRussiaMenuResponse` | | | papaJohnS | `papaJohnS.papajohnsStore` | `papajohns-store` | `GET /papajohns/store` | `path` (query String required) | `ApiKeyAuth` | `PapaJohnSPapajohnsStoreResponse` | | +| partiful | `partiful.cityFacets` | `partiful-city-facets` | `GET /partiful/city-facets` | `region` (query String required)
`facet` (query String required) | `ApiKeyAuth` | `PartifulCityFacetsResponse` | | +| partiful | `partiful.cityFeed` | `partiful-city-feed` | `GET /partiful/city-feed` | `region` (query String required) | `ApiKeyAuth` | `PartifulCityFeedResponse` | | +| partiful | `partiful.event` | `partiful-event` | `GET /partiful/event` | `event_id` (query String required) | `ApiKeyAuth` | `PartifulEventResponse` | | +| partiful | `partiful.exploreCities` | `partiful-explore-cities` | `GET /partiful/explore-cities` | none | `ApiKeyAuth` | `PartifulExploreCitiesResponse` | | | patreon | `patreon.creator` | `patreon-creator` | `GET /patreon/creator` | `handle` (query String required) | `ApiKeyAuth` | `PatreonCreatorResponse` | | | patreon | `patreon.creatorTiers` | `patreon-creator-tiers` | `GET /patreon/creator/tiers` | `handle` (query String required) | `ApiKeyAuth` | `PatreonCreatorTiersResponse` | | | patreon | `patreon.explore` | `patreon-explore` | `GET /patreon/explore` | `topic` (query String required) | `ApiKeyAuth` | `PatreonExploreResponse` | | @@ -2492,6 +2977,27 @@ Total operations: `4140` | people | `people.headlines` | `people-headlines` | `GET /people/headlines` | `section` (query String required) | `ApiKeyAuth` | `PeopleHeadlinesResponse` | | | people | `people.news` | `people-news` | `GET /people/news` | none | `ApiKeyAuth` | `PeopleNewsResponse` | | | people | `people.sections` | `people-sections` | `GET /people/sections` | none | `ApiKeyAuth` | `PeopleSectionsResponse` | | +| petSmart | `petSmart.petsmartCategories` | `petsmart-categories` | `GET /petsmart/categories` | `country` (query String)
`query` (query String)
`parent` (query String)
`depth` (query Integer)
`page` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `PetSmartPetsmartCategoriesResponse` | | +| petSmart | `petSmart.petsmartProduct` | `petsmart-product` | `GET /petsmart/product` | `country` (query String)
`id` (query Integer required) | `ApiKeyAuth` | `PetSmartPetsmartProductResponse` | | +| petSmart | `petSmart.petsmartProductInventory` | `petsmart-product-inventory` | `GET /petsmart/product/inventory` | `id` (query Integer required)
`store_id` (query Integer)
`min_quantity` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `PetSmartPetsmartProductInventoryResponse` | | +| petSmart | `petSmart.petsmartSearch` | `petsmart-search` | `GET /petsmart/search` | `country` (query String)
`query` (query String)
`category` (query String)
`brand` (query String)
`filter` (query String)
`min_price` (query Double)
`max_price` (query Double)
`min_rating` (query Double)
`sort` (query String)
`page` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `PetSmartPetsmartSearchResponse` | | +| petSmart | `petSmart.petsmartSearchFilters` | `petsmart-search-filters` | `GET /petsmart/search/filters` | `country` (query String)
`query` (query String)
`category` (query String)
`brand` (query String)
`filter` (query String)
`min_price` (query Double)
`max_price` (query Double)
`min_rating` (query Double)
`facet` (query String)
`facet_query` (query String)
`limit` (query Integer) | `ApiKeyAuth` | `PetSmartPetsmartSearchFiltersResponse` | | +| petSmart | `petSmart.petsmartSuggest` | `petsmart-suggest` | `GET /petsmart/suggest` | `country` (query String)
`query` (query String required)
`limit` (query Integer) | `ApiKeyAuth` | `PetSmartPetsmartSuggestResponse` | | +| pgaTour | `pgaTour.pgatourLeaderboard` | `pgatour-leaderboard` | `GET /pgatour/leaderboard` | `tour` (query String) | `ApiKeyAuth` | `PgaTourPgatourLeaderboardResponse` | | +| pgaTour | `pgaTour.pgatourPlayers` | `pgatour-players` | `GET /pgatour/players` | `tour` (query String) | `ApiKeyAuth` | `PgaTourPgatourPlayersResponse` | | +| pgaTour | `pgaTour.pgatourSchedule` | `pgatour-schedule` | `GET /pgatour/schedule` | `tour` (query String)
`season` (query Integer) | `ApiKeyAuth` | `PgaTourPgatourScheduleResponse` | | +| pgaTour | `pgaTour.pgatourScheduleSeasons` | `pgatour-schedule-seasons` | `GET /pgatour/schedule/seasons` | `tour` (query String) | `ApiKeyAuth` | `PgaTourPgatourScheduleSeasonsResponse` | | +| pgaTour | `pgaTour.pgatourStats` | `pgatour-stats` | `GET /pgatour/stats` | `tour` (query String) | `ApiKeyAuth` | `PgaTourPgatourStatsResponse` | | +| pgaTour | `pgaTour.pgatourStatDetail` | `pgatour-stat-detail` | `GET /pgatour/stats/{stat_id}` | `stat_id` (path String required)
`tour` (query String)
`year` (query Integer)
`query_type` (query String)
`tournament_id` (query String) | `ApiKeyAuth` | `PgaTourPgatourStatDetailResponse` | | +| pgaTour | `pgaTour.pgatourStatOptions` | `pgatour-stat-options` | `GET /pgatour/stats/{stat_id}/options` | `stat_id` (path String required)
`tour` (query String)
`year` (query Integer) | `ApiKeyAuth` | `PgaTourPgatourStatOptionsResponse` | | +| pgaTour | `pgaTour.pgatourTournamentLinks` | `pgatour-tournament-links` | `GET /pgatour/tournament-links` | none | `ApiKeyAuth` | `PgaTourPgatourTournamentLinksResponse` | | +| pgaTour | `pgaTour.pgatourTournamentBroadcast` | `pgatour-tournament-broadcast` | `GET /pgatour/tournaments/{year}/{slug}/{id}/broadcast` | `year` (path String required)
`slug` (path String required)
`id` (path String required) | `ApiKeyAuth` | `PgaTourPgatourTournamentBroadcastResponse` | | +| pgaTour | `pgaTour.pgatourTournamentCourseStats` | `pgatour-tournament-course-stats` | `GET /pgatour/tournaments/{year}/{slug}/{id}/course-stats` | `year` (path String required)
`slug` (path String required)
`id` (path String required) | `ApiKeyAuth` | `PgaTourPgatourTournamentCourseStatsResponse` | | +| pgaTour | `pgaTour.pgatourTournamentField` | `pgatour-tournament-field` | `GET /pgatour/tournaments/{year}/{slug}/{id}/field` | `year` (path String required)
`slug` (path String required)
`id` (path String required) | `ApiKeyAuth` | `PgaTourPgatourTournamentFieldResponse` | | +| pgaTour | `pgaTour.pgatourTournamentOverview` | `pgatour-tournament-overview` | `GET /pgatour/tournaments/{year}/{slug}/{id}/overview` | `year` (path String required)
`slug` (path String required)
`id` (path String required) | `ApiKeyAuth` | `PgaTourPgatourTournamentOverviewResponse` | | +| pgaTour | `pgaTour.pgatourTournamentPastResults` | `pgatour-tournament-past-results` | `GET /pgatour/tournaments/{year}/{slug}/{id}/past-results` | `year` (path String required)
`slug` (path String required)
`id` (path String required) | `ApiKeyAuth` | `PgaTourPgatourTournamentPastResultsResponse` | | +| pgaTour | `pgaTour.pgatourTournamentTeeTimes` | `pgatour-tournament-tee-times` | `GET /pgatour/tournaments/{year}/{slug}/{id}/tee-times` | `year` (path String required)
`slug` (path String required)
`id` (path String required) | `ApiKeyAuth` | `PgaTourPgatourTournamentTeeTimesResponse` | | +| pgaTour | `pgaTour.pgatourTournamentWeather` | `pgatour-tournament-weather` | `GET /pgatour/tournaments/{year}/{slug}/{id}/weather` | `year` (path String required)
`slug` (path String required)
`id` (path String required) | `ApiKeyAuth` | `PgaTourPgatourTournamentWeatherResponse` | | | philadelphiaInquirer | `philadelphiaInquirer.phillyinquirerArticle` | `phillyinquirer-article` | `GET /phillyinquirer/article` | `url` (query String required) | `ApiKeyAuth` | `PhiladelphiaInquirerPhillyinquirerArticleResponse` | | | philadelphiaInquirer | `philadelphiaInquirer.phillyinquirerAuthor` | `phillyinquirer-author` | `GET /phillyinquirer/author` | `slug` (query String)
`url` (query String) | `ApiKeyAuth` | `PhiladelphiaInquirerPhillyinquirerAuthorResponse` | | | philadelphiaInquirer | `philadelphiaInquirer.phillyinquirerHeadlines` | `phillyinquirer-headlines` | `GET /phillyinquirer/headlines` | `section` (query String required) | `ApiKeyAuth` | `PhiladelphiaInquirerPhillyinquirerHeadlinesResponse` | | @@ -2874,6 +3380,9 @@ Total operations: `4140` | rottenTomatoes | `rottenTomatoes.rottentomatoesBrowseFilters` | `rottentomatoes-browse-filters` | `GET /rottentomatoes/browse/filters` | `list` (query String) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesBrowseFiltersResponse` | | | rottenTomatoes | `rottenTomatoes.rottentomatoesBrowseMovies` | `rottentomatoes-browse-movies` | `GET /rottentomatoes/browse/movies` | `list` (query String)
`sort` (query String)
`genres` (query String)
`ratings` (query String)
`audience` (query String)
`critics` (query String)
`affiliates` (query String)
`after` (query String)
`limit` (query Integer) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesBrowseMoviesResponse` | | | rottenTomatoes | `rottenTomatoes.rottentomatoesBrowseTv` | `rottentomatoes-browse-tv` | `GET /rottentomatoes/browse/tv` | `list` (query String)
`sort` (query String)
`genres` (query String)
`ratings` (query String)
`audience` (query String)
`critics` (query String)
`affiliates` (query String)
`after` (query String)
`limit` (query Integer) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesBrowseTvResponse` | | +| rottenTomatoes | `rottenTomatoes.rottentomatoesCritic` | `rottentomatoes-critic` | `GET /rottentomatoes/critic` | `path` (query String)
`url` (query String) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesCriticResponse` | | +| rottenTomatoes | `rottenTomatoes.rottentomatoesCriticPublications` | `rottentomatoes-critic-publications` | `GET /rottentomatoes/critic/publications` | `path` (query String)
`url` (query String) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesCriticPublicationsResponse` | | +| rottenTomatoes | `rottenTomatoes.rottentomatoesCriticReviews` | `rottentomatoes-critic-reviews` | `GET /rottentomatoes/critic/reviews` | `path` (query String)
`url` (query String)
`limit` (query Integer)
`after` (query String) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesCriticReviewsResponse` | | | rottenTomatoes | `rottenTomatoes.rottentomatoesCriticsAuthors` | `rottentomatoes-critics-authors` | `GET /rottentomatoes/critics/authors` | `letter` (query String)
`search` (query String)
`inactive` (query Boolean)
`after` (query String)
`before` (query String)
`limit` (query Integer) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesCriticsAuthorsResponse` | | | rottenTomatoes | `rottenTomatoes.rottentomatoesEditorialContent` | `rottentomatoes-editorial-content` | `GET /rottentomatoes/editorial/content` | `type` (query String required)
`query` (query String)
`page` (query Integer)
`limit` (query Integer)
`taxonomy` (query String)
`term_ids` (query String)
`operator` (query String)
`include_children` (query Boolean) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesEditorialContentResponse` | | | rottenTomatoes | `rottenTomatoes.rottentomatoesEditorialDetail` | `rottentomatoes-editorial-detail` | `GET /rottentomatoes/editorial/detail` | `path` (query String required) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesEditorialDetailResponse` | | @@ -2883,11 +3392,17 @@ Total operations: `4140` | rottenTomatoes | `rottenTomatoes.rottentomatoesEditorialTerms` | `rottentomatoes-editorial-terms` | `GET /rottentomatoes/editorial/terms` | `taxonomy` (query String required)
`search` (query String)
`page` (query Integer)
`limit` (query Integer)
`hide_empty` (query Boolean)
`order` (query String)
`orderby` (query String)
`include` (query String)
`exclude` (query String)
`slug` (query String)
`post` (query Integer)
`offset` (query Integer)
`parent` (query Integer) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesEditorialTermsResponse` | | | rottenTomatoes | `rottenTomatoes.rottentomatoesEditorialTypes` | `rottentomatoes-editorial-types` | `GET /rottentomatoes/editorial/types` | none | `ApiKeyAuth` | `RottenTomatoesRottentomatoesEditorialTypesResponse` | | | rottenTomatoes | `rottenTomatoes.rottentomatoesEpisode` | `rottentomatoes-episode` | `GET /rottentomatoes/episode` | `path` (query String)
`url` (query String) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesEpisodeResponse` | | +| rottenTomatoes | `rottenTomatoes.rottentomatoesEpisodeReviews` | `rottentomatoes-episode-reviews` | `GET /rottentomatoes/episode/reviews` | `path` (query String)
`url` (query String)
`type` (query String)
`limit` (query Integer)
`after` (query String) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesEpisodeReviewsResponse` | | | rottenTomatoes | `rottenTomatoes.rottentomatoesMovie` | `rottentomatoes-movie` | `GET /rottentomatoes/movie` | `path` (query String)
`url` (query String) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesMovieResponse` | | | rottenTomatoes | `rottenTomatoes.rottentomatoesMovieReviews` | `rottentomatoes-movie-reviews` | `GET /rottentomatoes/movie/reviews` | `path` (query String)
`url` (query String)
`type` (query String)
`limit` (query Integer)
`after` (query String) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesMovieReviewsResponse` | | -| rottenTomatoes | `rottenTomatoes.rottentomatoesPerson` | `rottentomatoes-person` | `GET /rottentomatoes/person` | `path` (query String)
`url` (query String) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesPersonResponse` | | +| rottenTomatoes | `rottenTomatoes.rottentomatoesMovieVideos` | `rottentomatoes-movie-videos` | `GET /rottentomatoes/movie/videos` | `path` (query String)
`url` (query String) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesMovieVideosResponse` | | +| rottenTomatoes | `rottenTomatoes.rottentomatoesMovies` | `rottentomatoes-movies` | `GET /rottentomatoes/movies` | `ids` (query String)
`paths` (query String) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesMoviesResponse` | | +| rottenTomatoes | `rottenTomatoes.rottentomatoesPerson` | `rottentomatoes-person` | `GET /rottentomatoes/person` | `path` (query String)
`url` (query String)
`media_type` (query String)
`sort` (query String)
`after` (query String)
`limit` (query Integer) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesPersonResponse` | | +| rottenTomatoes | `rottenTomatoes.rottentomatoesPublication` | `rottentomatoes-publication` | `GET /rottentomatoes/publication` | `id` (query String required) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesPublicationResponse` | | +| rottenTomatoes | `rottenTomatoes.rottentomatoesPublicationReviews` | `rottentomatoes-publication-reviews` | `GET /rottentomatoes/publication/reviews` | `id` (query String required)
`limit` (query Integer)
`after` (query String) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesPublicationReviewsResponse` | | | rottenTomatoes | `rottenTomatoes.rottentomatoesSearch` | `rottentomatoes-search` | `GET /rottentomatoes/search` | `query` (query String required)
`limit` (query Integer) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesSearchResponse` | | | rottenTomatoes | `rottenTomatoes.rottentomatoesSeason` | `rottentomatoes-season` | `GET /rottentomatoes/season` | `path` (query String)
`url` (query String) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesSeasonResponse` | | +| rottenTomatoes | `rottenTomatoes.rottentomatoesSeasonReviews` | `rottentomatoes-season-reviews` | `GET /rottentomatoes/season/reviews` | `path` (query String)
`url` (query String)
`type` (query String)
`limit` (query Integer)
`after` (query String) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesSeasonReviewsResponse` | | | rottenTomatoes | `rottenTomatoes.rottentomatoesSeries` | `rottentomatoes-series` | `GET /rottentomatoes/series` | `path` (query String)
`url` (query String) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesSeriesResponse` | | | rottenTomatoes | `rottenTomatoes.rottentomatoesSitemapUrls` | `rottentomatoes-sitemap-urls` | `GET /rottentomatoes/sitemap/urls` | `name` (query String required)
`offset` (query Integer)
`limit` (query Integer) | `ApiKeyAuth` | `RottenTomatoesRottentomatoesSitemapUrlsResponse` | | | rottenTomatoes | `rottenTomatoes.rottentomatoesSitemaps` | `rottentomatoes-sitemaps` | `GET /rottentomatoes/sitemaps` | none | `ApiKeyAuth` | `RottenTomatoesRottentomatoesSitemapsResponse` | | @@ -3106,6 +3621,7 @@ Total operations: `4140` | sofaScore | `sofaScore.sofascoreEventLineups` | `sofascore-event-lineups` | `GET /sofascore/event-lineups` | `id` (query String required) | `ApiKeyAuth` | `SofaScoreSofascoreEventLineupsResponse` | | | sofaScore | `sofaScore.sofascoreEventManagers` | `sofascore-event-managers` | `GET /sofascore/event-managers` | `id` (query String required) | `ApiKeyAuth` | `SofaScoreSofascoreEventManagersResponse` | | | sofaScore | `sofaScore.sofascoreEventOdds` | `sofascore-event-odds` | `GET /sofascore/event-odds` | `id` (query String required) | `ApiKeyAuth` | `SofaScoreSofascoreEventOddsResponse` | | +| sofaScore | `sofaScore.sofascoreEventPlayerActions` | `sofascore-event-player-actions` | `GET /sofascore/event-player-actions` | `id` (query String required)
`player_id` (query String required) | `ApiKeyAuth` | `SofaScoreSofascoreEventPlayerActionsResponse` | | | sofaScore | `sofaScore.sofascoreEventPlayerHeatmap` | `sofascore-event-player-heatmap` | `GET /sofascore/event-player-heatmap` | `id` (query String required)
`player_id` (query String required) | `ApiKeyAuth` | `SofaScoreSofascoreEventPlayerHeatmapResponse` | | | sofaScore | `sofaScore.sofascoreEventPlayerStatistics` | `sofascore-event-player-statistics` | `GET /sofascore/event-player-statistics` | `id` (query String required)
`player_id` (query String required) | `ApiKeyAuth` | `SofaScoreSofascoreEventPlayerStatisticsResponse` | | | sofaScore | `sofaScore.sofascoreEventPointByPoint` | `sofascore-event-point-by-point` | `GET /sofascore/event-point-by-point` | `id` (query String required) | `ApiKeyAuth` | `SofaScoreSofascoreEventPointByPointResponse` | | @@ -3113,6 +3629,7 @@ Total operations: `4140` | sofaScore | `sofaScore.sofascoreEventShotmap` | `sofascore-event-shotmap` | `GET /sofascore/event-shotmap` | `id` (query String required) | `ApiKeyAuth` | `SofaScoreSofascoreEventShotmapResponse` | | | sofaScore | `sofaScore.sofascoreEventStatistics` | `sofascore-event-statistics` | `GET /sofascore/event-statistics` | `id` (query String required) | `ApiKeyAuth` | `SofaScoreSofascoreEventStatisticsResponse` | | | sofaScore | `sofaScore.sofascoreEventTeamHeatmap` | `sofascore-event-team-heatmap` | `GET /sofascore/event-team-heatmap` | `id` (query String required)
`team_id` (query String required) | `ApiKeyAuth` | `SofaScoreSofascoreEventTeamHeatmapResponse` | | +| sofaScore | `sofaScore.sofascoreEventTeamShotmap` | `sofascore-event-team-shotmap` | `GET /sofascore/event-team-shotmap` | `id` (query String required)
`team_id` (query String required) | `ApiKeyAuth` | `SofaScoreSofascoreEventTeamShotmapResponse` | | | sofaScore | `sofaScore.sofascoreEventTeamStreaks` | `sofascore-event-team-streaks` | `GET /sofascore/event-team-streaks` | `id` (query String required) | `ApiKeyAuth` | `SofaScoreSofascoreEventTeamStreaksResponse` | | | sofaScore | `sofaScore.sofascoreEventTennisPower` | `sofascore-event-tennis-power` | `GET /sofascore/event-tennis-power` | `id` (query String required) | `ApiKeyAuth` | `SofaScoreSofascoreEventTennisPowerResponse` | | | sofaScore | `sofaScore.sofascoreEventTvChannels` | `sofascore-event-tv-channels` | `GET /sofascore/event-tv-channels` | `id` (query String required)
`country` (query String) | `ApiKeyAuth` | `SofaScoreSofascoreEventTvChannelsResponse` | | @@ -3220,6 +3737,23 @@ Total operations: `4140` | sparkFun | `sparkFun.sparkfunCategory` | `sparkfun-category` | `GET /sparkfun/category` | `url_key` (query String required)
`page` (query Integer)
`per_page` (query Integer)
`filter` (query List) | `ApiKeyAuth` | `SparkFunSparkfunCategoryResponse` | | | sparkFun | `sparkFun.sparkfunProduct` | `sparkfun-product` | `GET /sparkfun/product` | `sku` (query String required) | `ApiKeyAuth` | `SparkFunSparkfunProductResponse` | | | sparkFun | `sparkFun.sparkfunSearch` | `sparkfun-search` | `GET /sparkfun/search` | `q` (query String required)
`page` (query Integer)
`per_page` (query Integer)
`filter` (query List) | `ApiKeyAuth` | `SparkFunSparkfunSearchResponse` | | +| speedrunCom | `speedrunCom.speedrunCatalog` | `speedrun-catalog` | `GET /speedrun/catalogs/{kind}` | `kind` (path String required)
`max` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `SpeedrunComSpeedrunCatalogResponse` | | +| speedrunCom | `speedrunCom.speedrunCategoryDetail` | `speedrun-category-detail` | `GET /speedrun/categories/{id}` | `id` (path String required)
`embed` (query String) | `ApiKeyAuth` | `SpeedrunComSpeedrunCategoryDetailResponse` | | +| speedrunCom | `speedrunCom.speedrunCategoryRecords` | `speedrun-category-records` | `GET /speedrun/categories/{id}/records` | `id` (path String required)
`embed` (query String)
`top` (query Integer)
`skip_empty` (query Boolean)
`max` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `SpeedrunComSpeedrunCategoryRecordsResponse` | | +| speedrunCom | `speedrunCom.speedrunCategoryVariables` | `speedrun-category-variables` | `GET /speedrun/categories/{id}/variables` | `id` (path String required)
`embed` (query String)
`orderby` (query String)
`direction` (query String) | `ApiKeyAuth` | `SpeedrunComSpeedrunCategoryVariablesResponse` | | +| speedrunCom | `speedrunCom.speedrunGames` | `speedrun-games` | `GET /speedrun/games` | `name` (query String)
`platform` (query String)
`region` (query String)
`gametype` (query String)
`max` (query Integer)
`offset` (query Integer)
`abbreviation` (query String)
`released` (query Integer)
`genre` (query String)
`engine` (query String)
`developer` (query String)
`publisher` (query String)
`orderby` (query String)
`direction` (query String)
`_bulk` (query Boolean)
`romhack` (query Boolean)
`embed` (query String) | `ApiKeyAuth` | `SpeedrunComSpeedrunGamesResponse` | | +| speedrunCom | `speedrunCom.speedrunGameDetail` | `speedrun-game-detail` | `GET /speedrun/games/{id}` | `id` (path String required)
`embed` (query String) | `ApiKeyAuth` | `SpeedrunComSpeedrunGameDetailResponse` | | +| speedrunCom | `speedrunCom.speedrunCategories` | `speedrun-categories` | `GET /speedrun/games/{id}/categories` | `id` (path String required)
`miscellaneous` (query Boolean)
`orderby` (query String)
`direction` (query String)
`embed` (query String) | `ApiKeyAuth` | `SpeedrunComSpeedrunCategoriesResponse` | | +| speedrunCom | `speedrunCom.speedrunLevels` | `speedrun-levels` | `GET /speedrun/games/{id}/levels` | `id` (path String required)
`orderby` (query String)
`direction` (query String)
`embed` (query String) | `ApiKeyAuth` | `SpeedrunComSpeedrunLevelsResponse` | | +| speedrunCom | `speedrunCom.speedrunRecords` | `speedrun-records` | `GET /speedrun/games/{id}/records` | `id` (path String required)
`max` (query Integer)
`offset` (query Integer)
`top` (query Integer)
`skip_empty` (query Boolean)
`embed` (query String) | `ApiKeyAuth` | `SpeedrunComSpeedrunRecordsResponse` | | +| speedrunCom | `speedrunCom.speedrunVariables` | `speedrun-variables` | `GET /speedrun/games/{id}/variables` | `id` (path String required)
`orderby` (query String)
`direction` (query String)
`embed` (query String) | `ApiKeyAuth` | `SpeedrunComSpeedrunVariablesResponse` | | +| speedrunCom | `speedrunCom.speedrunGameLeaderboard` | `speedrun-game-leaderboard` | `GET /speedrun/leaderboards/{game}/category/{category}` | `game` (path String required)
`category` (path String required)
`embed` (query String)
`top` (query Integer)
`platform` (query String)
`region` (query String)
`emulators` (query Boolean)
`video_only` (query Boolean)
`timing` (query String)
`date` (query String)
`variables` (query String) | `ApiKeyAuth` | `SpeedrunComSpeedrunGameLeaderboardResponse` | | +| speedrunCom | `speedrunCom.speedrunLevelLeaderboard` | `speedrun-level-leaderboard` | `GET /speedrun/leaderboards/{game}/level/{level}/{category}` | `game` (path String required)
`category` (path String required)
`level` (path String required)
`embed` (query String)
`top` (query Integer)
`platform` (query String)
`region` (query String)
`emulators` (query Boolean)
`video_only` (query Boolean)
`timing` (query String)
`date` (query String)
`variables` (query String) | `ApiKeyAuth` | `SpeedrunComSpeedrunLevelLeaderboardResponse` | | +| speedrunCom | `speedrunCom.speedrunLevelDetail` | `speedrun-level-detail` | `GET /speedrun/levels/{id}` | `id` (path String required)
`embed` (query String) | `ApiKeyAuth` | `SpeedrunComSpeedrunLevelDetailResponse` | | +| speedrunCom | `speedrunCom.speedrunLevelCategories` | `speedrun-level-categories` | `GET /speedrun/levels/{id}/categories` | `id` (path String required)
`embed` (query String)
`orderby` (query String)
`direction` (query String)
`miscellaneous` (query Boolean) | `ApiKeyAuth` | `SpeedrunComSpeedrunLevelCategoriesResponse` | | +| speedrunCom | `speedrunCom.speedrunLevelRecords` | `speedrun-level-records` | `GET /speedrun/levels/{id}/records` | `id` (path String required)
`embed` (query String)
`top` (query Integer)
`skip_empty` (query Boolean)
`max` (query Integer)
`offset` (query Integer) | `ApiKeyAuth` | `SpeedrunComSpeedrunLevelRecordsResponse` | | +| speedrunCom | `speedrunCom.speedrunLevelVariables` | `speedrun-level-variables` | `GET /speedrun/levels/{id}/variables` | `id` (path String required)
`embed` (query String)
`orderby` (query String)
`direction` (query String) | `ApiKeyAuth` | `SpeedrunComSpeedrunLevelVariablesResponse` | | +| speedrunCom | `speedrunCom.speedrunResourceOptions` | `speedrun-resource-options` | `GET /speedrun/options` | none | `ApiKeyAuth` | `SpeedrunComSpeedrunResourceOptionsResponse` | | | sportingNews | `sportingNews.sportingnewsArticle` | `sportingnews-article` | `GET /sportingnews/article` | `url` (query String required) | `ApiKeyAuth` | `SportingNewsSportingnewsArticleResponse` | | | sportingNews | `sportingNews.sportingnewsAuthor` | `sportingnews-author` | `GET /sportingnews/author` | `slug` (query String)
`url` (query String) | `ApiKeyAuth` | `SportingNewsSportingnewsAuthorResponse` | | | sportingNews | `sportingNews.sportingnewsHeadlines` | `sportingnews-headlines` | `GET /sportingnews/headlines` | `section` (query String required) | `ApiKeyAuth` | `SportingNewsSportingnewsHeadlinesResponse` | | @@ -3856,11 +4390,11 @@ Total operations: `4140` | vinted | `vinted.member` | `vinted-member` | `GET /vinted/member` | `id` (query String required) | `ApiKeyAuth` | `VintedMemberResponse` | | | vlr | `vlr.event` | `vlr-event` | `GET /vlr/event` | `id` (query String required) | `ApiKeyAuth` | `VlrEventResponse` | | | vlr | `vlr.eventAgents` | `vlr-event-agents` | `GET /vlr/event-agents` | `id` (query String required) | `ApiKeyAuth` | `VlrEventAgentsResponse` | | -| vlr | `vlr.eventMatches` | `vlr-event-matches` | `GET /vlr/event-matches` | `id` (query String required) | `ApiKeyAuth` | `VlrEventMatchesResponse` | | -| vlr | `vlr.eventStats` | `vlr-event-stats` | `GET /vlr/event-stats` | `id` (query String required)
`side` (query String) | `ApiKeyAuth` | `VlrEventStatsResponse` | | +| vlr | `vlr.eventMatches` | `vlr-event-matches` | `GET /vlr/event-matches` | `id` (query String required)
`series_id` (query String)
`group` (query String) | `ApiKeyAuth` | `VlrEventMatchesResponse` | | +| vlr | `vlr.eventStats` | `vlr-event-stats` | `GET /vlr/event-stats` | `id` (query String required)
`side` (query String)
`role` (query String)
`agent` (query String)
`map` (query String)
`stage` (query String)
`min_rounds` (query Integer)
`sort` (query String)
`dir` (query String) | `ApiKeyAuth` | `VlrEventStatsResponse` | | | vlr | `vlr.events` | `vlr-events` | `GET /vlr/events` | `tier` (query String)
`region` (query String)
`page` (query Integer) | `ApiKeyAuth` | `VlrEventsResponse` | | | vlr | `vlr.forumCategories` | `vlr-forum-categories` | `GET /vlr/forum-categories` | none | `ApiKeyAuth` | `VlrForumCategoriesResponse` | | -| vlr | `vlr.forumThreads` | `vlr-forum-threads` | `GET /vlr/forum-threads` | `category` (query String)
`page` (query Integer) | `ApiKeyAuth` | `VlrForumThreadsResponse` | | +| vlr | `vlr.forumThreads` | `vlr-forum-threads` | `GET /vlr/forum-threads` | `category` (query String)
`page` (query Integer)
`sort` (query String) | `ApiKeyAuth` | `VlrForumThreadsResponse` | | | vlr | `vlr.match` | `vlr-match` | `GET /vlr/match` | `id` (query String required) | `ApiKeyAuth` | `VlrMatchResponse` | | | vlr | `vlr.matchEconomy` | `vlr-match-economy` | `GET /vlr/match-economy` | `id` (query String required) | `ApiKeyAuth` | `VlrMatchEconomyResponse` | | | vlr | `vlr.matchPerformance` | `vlr-match-performance` | `GET /vlr/match-performance` | `id` (query String required) | `ApiKeyAuth` | `VlrMatchPerformanceResponse` | | @@ -3868,7 +4402,7 @@ Total operations: `4140` | vlr | `vlr.matches` | `vlr-matches` | `GET /vlr/matches` | `page` (query Integer) | `ApiKeyAuth` | `VlrMatchesResponse` | | | vlr | `vlr.news` | `vlr-news` | `GET /vlr/news` | `page` (query Integer) | `ApiKeyAuth` | `VlrNewsResponse` | | | vlr | `vlr.newsArticle` | `vlr-news-article` | `GET /vlr/news-article` | `id` (query String required) | `ApiKeyAuth` | `VlrNewsArticleResponse` | | -| vlr | `vlr.player` | `vlr-player` | `GET /vlr/player` | `id` (query String required) | `ApiKeyAuth` | `VlrPlayerResponse` | | +| vlr | `vlr.player` | `vlr-player` | `GET /vlr/player` | `id` (query String required)
`timespan` (query String) | `ApiKeyAuth` | `VlrPlayerResponse` | | | vlr | `vlr.playerMatches` | `vlr-player-matches` | `GET /vlr/player-matches` | `id` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `VlrPlayerMatchesResponse` | | | vlr | `vlr.rankings` | `vlr-rankings` | `GET /vlr/rankings` | `region` (query String)
`limit` (query Integer) | `ApiKeyAuth` | `VlrRankingsResponse` | | | vlr | `vlr.results` | `vlr-results` | `GET /vlr/results` | `page` (query Integer) | `ApiKeyAuth` | `VlrResultsResponse` | | @@ -3876,7 +4410,7 @@ Total operations: `4140` | vlr | `vlr.stats` | `vlr-stats` | `GET /vlr/stats` | `tier` (query String)
`region` (query String)
`timespan` (query String)
`side` (query String)
`role` (query String)
`agent` (query String)
`map` (query String)
`min_rounds` (query Integer)
`from` (query String)
`to` (query String)
`min_rating` (query String)
`sort` (query String)
`dir` (query String)
`page` (query Integer) | `ApiKeyAuth` | `VlrStatsResponse` | | | vlr | `vlr.team` | `vlr-team` | `GET /vlr/team` | `id` (query String required) | `ApiKeyAuth` | `VlrTeamResponse` | | | vlr | `vlr.teamMaps` | `vlr-team-maps` | `GET /vlr/team-maps` | `id` (query String required) | `ApiKeyAuth` | `VlrTeamMapsResponse` | | -| vlr | `vlr.teamMatches` | `vlr-team-matches` | `GET /vlr/team-matches` | `id` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `VlrTeamMatchesResponse` | | +| vlr | `vlr.teamMatches` | `vlr-team-matches` | `GET /vlr/team-matches` | `id` (query String required)
`page` (query Integer)
`group` (query String) | `ApiKeyAuth` | `VlrTeamMatchesResponse` | | | vox | `vox.article` | `vox-article` | `GET /vox/article` | `url` (query String required) | `ApiKeyAuth` | `VoxArticleResponse` | | | vox | `vox.author` | `vox-author` | `GET /vox/author` | `url` (query String required) | `ApiKeyAuth` | `VoxAuthorResponse` | | | vox | `vox.headlines` | `vox-headlines` | `GET /vox/headlines` | `section` (query String required) | `ApiKeyAuth` | `VoxHeadlinesResponse` | | @@ -3927,6 +4461,12 @@ Total operations: `4140` | wccftech | `wccftech.headlines` | `wccftech-headlines` | `GET /wccftech/headlines` | `section` (query String required) | `ApiKeyAuth` | `WccftechHeadlinesResponse` | | | wccftech | `wccftech.news` | `wccftech-news` | `GET /wccftech/news` | none | `ApiKeyAuth` | `WccftechNewsResponse` | | | wccftech | `wccftech.sections` | `wccftech-sections` | `GET /wccftech/sections` | none | `ApiKeyAuth` | `WccftechSectionsResponse` | | +| webtoon | `webtoon.genre` | `webtoon-genre` | `GET /webtoon/genre` | `genre` (query String required)
`sort` (query String) | `ApiKeyAuth` | `WebtoonGenreResponse` | | +| webtoon | `webtoon.genres` | `webtoon-genres` | `GET /webtoon/genres` | none | `ApiKeyAuth` | `WebtoonGenresResponse` | | +| webtoon | `webtoon.originals` | `webtoon-originals` | `GET /webtoon/originals` | `day` (query String required)
`sort` (query String) | `ApiKeyAuth` | `WebtoonOriginalsResponse` | | +| webtoon | `webtoon.rankings` | `webtoon-rankings` | `GET /webtoon/rankings` | `tab` (query String) | `ApiKeyAuth` | `WebtoonRankingsResponse` | | +| webtoon | `webtoon.search` | `webtoon-search` | `GET /webtoon/search` | `keyword` (query String required)
`scope` (query String)
`page` (query Integer) | `ApiKeyAuth` | `WebtoonSearchResponse` | | +| webtoon | `webtoon.series` | `webtoon-series` | `GET /webtoon/series` | `title_no` (query Integer required)
`page` (query Integer) | `ApiKeyAuth` | `WebtoonSeriesResponse` | | | wendys | `wendys.categories` | `wendys-categories` | `GET /wendys/categories` | none | `ApiKeyAuth` | `WendysCategoriesResponse` | | | wendys | `wendys.directory` | `wendys-directory` | `GET /wendys/directory` | `path` (query String) | `ApiKeyAuth` | `WendysDirectoryResponse` | | | wendys | `wendys.item` | `wendys-item` | `GET /wendys/item` | `category` (query String required)
`item` (query String required) | `ApiKeyAuth` | `WendysItemResponse` | | @@ -3970,6 +4510,16 @@ Total operations: `4140` | wolt | `wolt.searchFilters` | `wolt-search-filters` | `GET /wolt/search/filters` | `latitude` (query Double required)
`longitude` (query Double required) | `ApiKeyAuth` | `WoltSearchFiltersResponse` | | | wallStreetJournal | `wallStreetJournal.wsjArticle` | `wsj-article` | `GET /wsj/article` | `url` (query String required) | `ApiKeyAuth` | `WallStreetJournalWsjArticleResponse` | | | wallStreetJournal | `wallStreetJournal.wsjAuthor` | `wsj-author` | `GET /wsj/author` | `slug` (query String)
`url` (query String) | `ApiKeyAuth` | `WallStreetJournalWsjAuthorResponse` | | +| wta | `wta.countries` | `wta-countries` | `GET /wta/countries` | none | `ApiKeyAuth` | `WtaCountriesResponse` | | +| wta | `wta.matchStates` | `wta-match-states` | `GET /wta/match-states` | none | `ApiKeyAuth` | `WtaMatchStatesResponse` | | +| wta | `wta.rankings` | `wta-rankings` | `GET /wta/rankings/{view}` | `view` (path String required)
`country` (query String)
`at` (query String)
`type` (query String)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `WtaRankingsResponse` | | +| wta | `wta.tournamentSeasons` | `wta-tournament-seasons` | `GET /wta/tournament-seasons` | none | `ApiKeyAuth` | `WtaTournamentSeasonsResponse` | | +| wta | `wta.tournaments` | `wta-tournaments` | `GET /wta/tournaments` | `season` (query Integer)
`from` (query String)
`to` (query String)
`page_size` (query Integer)
`level` (query String)
`surface` (query String)
`page` (query Integer) | `ApiKeyAuth` | `WtaTournamentsResponse` | | +| wta | `wta.tournament` | `wta-tournament` | `GET /wta/tournaments/{group_id}/{year}` | `group_id` (path Integer required)
`year` (path Integer required) | `ApiKeyAuth` | `WtaTournamentResponse` | | +| wta | `wta.tournamentDraws` | `wta-tournament-draws` | `GET /wta/tournaments/{group_id}/{year}/draws` | `group_id` (path Integer required)
`year` (path Integer required) | `ApiKeyAuth` | `WtaTournamentDrawsResponse` | | +| wta | `wta.tournamentMatches` | `wta-tournament-matches` | `GET /wta/tournaments/{group_id}/{year}/matches` | `group_id` (path Integer required)
`year` (path Integer required)
`states` (query String) | `ApiKeyAuth` | `WtaTournamentMatchesResponse` | | +| wta | `wta.tournamentOrderOfPlay` | `wta-tournament-order-of-play` | `GET /wta/tournaments/{group_id}/{year}/order-of-play` | `group_id` (path Integer required)
`year` (path Integer required) | `ApiKeyAuth` | `WtaTournamentOrderOfPlayResponse` | | +| wta | `wta.tournamentPlayers` | `wta-tournament-players` | `GET /wta/tournaments/{group_id}/{year}/players` | `group_id` (path Integer required)
`year` (path Integer required) | `ApiKeyAuth` | `WtaTournamentPlayersResponse` | | | x | `x.post` | `x-post` | `GET /x/post/{id}` | `id` (path String required)
`username` (query String) | `ApiKeyAuth` | `XPostResponse` | | | x | `x.profile` | `x-profile` | `GET /x/profile/{username}` | `username` (path String required) | `ApiKeyAuth` | `XProfileResponse` | | | x | `x.profilePosts` | `x-profile-posts` | `GET /x/profile/{username}/posts` | `username` (path String required)
`limit` (query Integer) | `ApiKeyAuth` | `XProfilePostsResponse` | | @@ -4051,30 +4601,71 @@ Total operations: `4140` | yahooSearch | `yahooSearch.suggest` | `yahoo-search-suggest` | `GET /yahoo-search/suggest` | `q` (query String required)
`count` (query Integer) | `ApiKeyAuth` | `YahooSearchSuggestResponse` | | | yahooSearch | `yahooSearch.videos` | `yahoo-search-videos` | `GET /yahoo-search/videos` | `q` (query String required) | `ApiKeyAuth` | `YahooSearchVideosResponse` | | | yahooShopping | `yahooShopping.article` | `yahoo-shopping-article` | `GET /yahoo-shopping/article` | `url` (query String required) | `ApiKeyAuth` | `YahooShoppingArticleResponse` | | -| yahooShopping | `yahooShopping.category` | `yahoo-shopping-category` | `GET /yahoo-shopping/category` | `category` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `YahooShoppingCategoryResponse` | | -| yahooShopping | `yahooShopping.home` | `yahoo-shopping-home` | `GET /yahoo-shopping/home` | none | `ApiKeyAuth` | `YahooShoppingHomeResponse` | | +| yahooShopping | `yahooShopping.author` | `yahoo-shopping-author` | `GET /yahoo-shopping/author` | `author` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `YahooShoppingAuthorResponse` | | +| yahooShopping | `yahooShopping.categories` | `yahoo-shopping-categories` | `GET /yahoo-shopping/categories` | none | `ApiKeyAuth` | `YahooShoppingCategoriesResponse` | | +| yahooShopping | `yahooShopping.category` | `yahoo-shopping-category` | `GET /yahoo-shopping/category` | `category` (query String required)
`subcategory` (query String)
`page` (query Integer) | `ApiKeyAuth` | `YahooShoppingCategoryResponse` | | +| yahooShopping | `yahooShopping.experts` | `yahoo-shopping-experts` | `GET /yahoo-shopping/experts` | none | `ApiKeyAuth` | `YahooShoppingExpertsResponse` | | +| yahooShopping | `yahooShopping.home` | `yahoo-shopping-home` | `GET /yahoo-shopping/home` | `page` (query Integer) | `ApiKeyAuth` | `YahooShoppingHomeResponse` | | | yahooShopping | `yahooShopping.shoppingList` | `yahoo-shopping-shopping-list` | `GET /yahoo-shopping/shopping-list` | `list` (query String required) | `ApiKeyAuth` | `YahooShoppingShoppingListResponse` | | | yahooShopping | `yahooShopping.shoppingLists` | `yahoo-shopping-shopping-lists` | `GET /yahoo-shopping/shopping-lists` | none | `ApiKeyAuth` | `YahooShoppingShoppingListsResponse` | | +| yahooShopping | `yahooShopping.sitemap` | `yahoo-shopping-sitemap` | `GET /yahoo-shopping/sitemap` | `url` (query String required) | `ApiKeyAuth` | `YahooShoppingSitemapResponse` | | +| yahooShopping | `yahooShopping.sitemaps` | `yahoo-shopping-sitemaps` | `GET /yahoo-shopping/sitemaps` | none | `ApiKeyAuth` | `YahooShoppingSitemapsResponse` | | | yahooShopping | `yahooShopping.store` | `yahoo-shopping-store` | `GET /yahoo-shopping/store` | `store` (query String required) | `ApiKeyAuth` | `YahooShoppingStoreResponse` | | | yahooShopping | `yahooShopping.stores` | `yahoo-shopping-stores` | `GET /yahoo-shopping/stores` | none | `ApiKeyAuth` | `YahooShoppingStoresResponse` | | -| yahooSports | `yahooSports.game` | `yahoo-sports-game` | `GET /yahoo-sports/game` | `league` (query String required)
`game` (query String required) | `ApiKeyAuth` | `YahooSportsGameResponse` | | +| yahooShopping | `yahooShopping.suggest` | `yahoo-shopping-suggest` | `GET /yahoo-shopping/suggest` | `q` (query String required)
`count` (query Integer) | `ApiKeyAuth` | `YahooShoppingSuggestResponse` | | +| yahooSports | `yahooSports.collegeRankings` | `yahoo-sports-college-rankings` | `GET /yahoo-sports/college-rankings` | `league` (query String required)
`poll_type` (query String)
`date` (query String)
`tz` (query String) | `ApiKeyAuth` | `YahooSportsCollegeRankingsResponse` | | +| yahooSports | `yahooSports.draft` | `yahoo-sports-draft` | `GET /yahoo-sports/draft` | `league` (query String required)
`view` (query String) | `ApiKeyAuth` | `YahooSportsDraftResponse` | | +| yahooSports | `yahooSports.dropdownCatalog` | `yahoo-sports-dropdown-catalog` | `GET /yahoo-sports/dropdown-catalog` | none | `ApiKeyAuth` | `YahooSportsDropdownCatalogResponse` | | +| yahooSports | `yahooSports.game` | `yahoo-sports-game` | `GET /yahoo-sports/game` | `league` (query String required)
`game` (query String)
`game_url` (query String) | `ApiKeyAuth` | `YahooSportsGameResponse` | | | yahooSports | `yahooSports.golfLeaderboard` | `yahoo-sports-golf-leaderboard` | `GET /yahoo-sports/golf-leaderboard` | `tournament` (query String required)
`season` (query Integer) | `ApiKeyAuth` | `YahooSportsGolfLeaderboardResponse` | | +| yahooSports | `yahooSports.golfPlayer` | `yahoo-sports-golf-player` | `GET /yahoo-sports/golf-player` | `player_url` (query String required) | `ApiKeyAuth` | `YahooSportsGolfPlayerResponse` | | +| yahooSports | `yahooSports.golfPlayerNews` | `yahoo-sports-golf-player-news` | `GET /yahoo-sports/golf-player-news` | `player_url` (query String required)
`mode` (query String)
`cursor` (query String) | `ApiKeyAuth` | `YahooSportsGolfPlayerNewsResponse` | | +| yahooSports | `yahooSports.golfPlayers` | `yahoo-sports-golf-players` | `GET /yahoo-sports/golf-players` | none | `ApiKeyAuth` | `YahooSportsGolfPlayersResponse` | | | yahooSports | `yahooSports.golfSchedule` | `yahoo-sports-golf-schedule` | `GET /yahoo-sports/golf-schedule` | `tour` (query String required)
`season` (query Integer) | `ApiKeyAuth` | `YahooSportsGolfScheduleResponse` | | +| yahooSports | `yahooSports.home` | `yahoo-sports-home` | `GET /yahoo-sports/home` | none | `ApiKeyAuth` | `YahooSportsHomeResponse` | | +| yahooSports | `yahooSports.injuryReport` | `yahoo-sports-injury-report` | `GET /yahoo-sports/injury-report` | `league` (query String required)
`team_id` (query String) | `ApiKeyAuth` | `YahooSportsInjuryReportResponse` | | +| yahooSports | `yahooSports.leagueSchedule` | `yahoo-sports-league-schedule` | `GET /yahoo-sports/league-schedule` | `league` (query String required)
`season` (query Integer)
`date` (query String)
`week` (query Integer)
`seasonPhase` (query String)
`leagueFilter` (query String) | `ApiKeyAuth` | `YahooSportsLeagueScheduleResponse` | | +| yahooSports | `yahooSports.leagues` | `yahoo-sports-leagues` | `GET /yahoo-sports/leagues` | none | `ApiKeyAuth` | `YahooSportsLeaguesResponse` | | | yahooSports | `yahooSports.mmaFightCard` | `yahoo-sports-mma-fight-card` | `GET /yahoo-sports/mma-fight-card` | none | `ApiKeyAuth` | `YahooSportsMmaFightCardResponse` | | | yahooSports | `yahooSports.mmaSchedule` | `yahoo-sports-mma-schedule` | `GET /yahoo-sports/mma-schedule` | none | `ApiKeyAuth` | `YahooSportsMmaScheduleResponse` | | +| yahooSports | `yahooSports.moreNews` | `yahoo-sports-more-news` | `GET /yahoo-sports/more-news` | `page` (query Integer) | `ApiKeyAuth` | `YahooSportsMoreNewsResponse` | | | yahooSports | `yahooSports.motorsportsRace` | `yahoo-sports-motorsports-race` | `GET /yahoo-sports/motorsports-race` | `series` (query String required)
`race` (query String required) | `ApiKeyAuth` | `YahooSportsMotorsportsRaceResponse` | | | yahooSports | `yahooSports.motorsportsSchedule` | `yahoo-sports-motorsports-schedule` | `GET /yahoo-sports/motorsports-schedule` | `series` (query String required)
`season` (query Integer) | `ApiKeyAuth` | `YahooSportsMotorsportsScheduleResponse` | | +| yahooSports | `yahooSports.navigation` | `yahoo-sports-navigation` | `GET /yahoo-sports/navigation` | `section_url` (query String) | `ApiKeyAuth` | `YahooSportsNavigationResponse` | | +| yahooSports | `yahooSports.networkCatalog` | `yahoo-sports-network-catalog` | `GET /yahoo-sports/network-catalog` | none | `ApiKeyAuth` | `YahooSportsNetworkCatalogResponse` | | | yahooSports | `yahooSports.news` | `yahoo-sports-news` | `GET /yahoo-sports/news` | `league` (query String required) | `ApiKeyAuth` | `YahooSportsNewsResponse` | | +| yahooSports | `yahooSports.newsletterArchive` | `yahoo-sports-newsletter-archive` | `GET /yahoo-sports/newsletter-archive` | `newsletter` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `YahooSportsNewsletterArchiveResponse` | | +| yahooSports | `yahooSports.newsletters` | `yahoo-sports-newsletters` | `GET /yahoo-sports/newsletters` | none | `ApiKeyAuth` | `YahooSportsNewslettersResponse` | | +| yahooSports | `yahooSports.oddsFeatured` | `yahoo-sports-odds-featured` | `GET /yahoo-sports/odds-featured` | none | `ApiKeyAuth` | `YahooSportsOddsFeaturedResponse` | | +| yahooSports | `yahooSports.oddsGame` | `yahoo-sports-odds-game` | `GET /yahoo-sports/odds-game` | `game_id` (query String required)
`tz` (query String) | `ApiKeyAuth` | `YahooSportsOddsGameResponse` | | +| yahooSports | `yahooSports.oddsGames` | `yahoo-sports-odds-games` | `GET /yahoo-sports/odds-games` | `league` (query String required) | `ApiKeyAuth` | `YahooSportsOddsGamesResponse` | | +| yahooSports | `yahooSports.oddsTrending` | `yahoo-sports-odds-trending` | `GET /yahoo-sports/odds-trending` | none | `ApiKeyAuth` | `YahooSportsOddsTrendingResponse` | | | yahooSports | `yahooSports.olympicsMedals` | `yahoo-sports-olympics-medals` | `GET /yahoo-sports/olympics-medals` | none | `ApiKeyAuth` | `YahooSportsOlympicsMedalsResponse` | | | yahooSports | `yahooSports.player` | `yahoo-sports-player` | `GET /yahoo-sports/player` | `league` (query String required)
`player` (query String required) | `ApiKeyAuth` | `YahooSportsPlayerResponse` | | -| yahooSports | `yahooSports.scoreboard` | `yahoo-sports-scoreboard` | `GET /yahoo-sports/scoreboard` | `league` (query String required)
`date` (query String) | `ApiKeyAuth` | `YahooSportsScoreboardResponse` | | -| yahooSports | `yahooSports.standings` | `yahoo-sports-standings` | `GET /yahoo-sports/standings` | `league` (query String required) | `ApiKeyAuth` | `YahooSportsStandingsResponse` | | +| yahooSports | `yahooSports.playerSearch` | `yahoo-sports-player-search` | `GET /yahoo-sports/player-search` | `league` (query String required)
`name` (query String required) | `ApiKeyAuth` | `YahooSportsPlayerSearchResponse` | | +| yahooSports | `yahooSports.playoffBracket` | `yahoo-sports-playoff-bracket` | `GET /yahoo-sports/playoff-bracket` | `league` (query String required)
`season` (query Integer) | `ApiKeyAuth` | `YahooSportsPlayoffBracketResponse` | | +| yahooSports | `yahooSports.playoffBracketCatalog` | `yahoo-sports-playoff-bracket-catalog` | `GET /yahoo-sports/playoff-bracket-catalog` | `league` (query String required) | `ApiKeyAuth` | `YahooSportsPlayoffBracketCatalogResponse` | | +| yahooSports | `yahooSports.rssCatalog` | `yahoo-sports-rss-catalog` | `GET /yahoo-sports/rss-catalog` | none | `ApiKeyAuth` | `YahooSportsRssCatalogResponse` | | +| yahooSports | `yahooSports.rssFeed` | `yahoo-sports-rss-feed` | `GET /yahoo-sports/rss-feed` | `feed` (query String required) | `ApiKeyAuth` | `YahooSportsRssFeedResponse` | | +| yahooSports | `yahooSports.scheduleCatalog` | `yahoo-sports-schedule-catalog` | `GET /yahoo-sports/schedule-catalog` | `league` (query String required) | `ApiKeyAuth` | `YahooSportsScheduleCatalogResponse` | | +| yahooSports | `yahooSports.scoreboard` | `yahoo-sports-scoreboard` | `GET /yahoo-sports/scoreboard` | `league` (query String required)
`date` (query String)
`month` (query Integer)
`competition_id` (query String)
`season` (query Integer) | `ApiKeyAuth` | `YahooSportsScoreboardResponse` | | +| yahooSports | `yahooSports.sectionStream` | `yahoo-sports-section-stream` | `GET /yahoo-sports/section-stream` | `section_url` (query String required)
`page_offset` (query Integer) | `ApiKeyAuth` | `YahooSportsSectionStreamResponse` | | +| yahooSports | `yahooSports.soccerScoreboard` | `yahoo-sports-soccer-scoreboard` | `GET /yahoo-sports/soccer-scoreboard` | `date` (query String)
`month` (query Integer)
`competition_id` (query String) | `ApiKeyAuth` | `YahooSportsSoccerScoreboardResponse` | | +| yahooSports | `yahooSports.sportsbookCatalog` | `yahoo-sports-sportsbook-catalog` | `GET /yahoo-sports/sportsbook-catalog` | none | `ApiKeyAuth` | `YahooSportsSportsbookCatalogResponse` | | +| yahooSports | `yahooSports.standings` | `yahoo-sports-standings` | `GET /yahoo-sports/standings` | `league` (query String required)
`season` (query Integer) | `ApiKeyAuth` | `YahooSportsStandingsResponse` | | +| yahooSports | `yahooSports.stats` | `yahoo-sports-stats` | `GET /yahoo-sports/stats` | `league` (query String required)
`pageType` (query String)
`selectedTable` (query Integer)
`qualified` (query Boolean)
`leagueStructure` (query String)
`positionIds` (query String)
`cutTypeIds` (query String)
`sortStatId` (query String)
`week` (query Integer)
`weekSeasonPhase` (query String) | `ApiKeyAuth` | `YahooSportsStatsResponse` | | +| yahooSports | `yahooSports.statsCatalog` | `yahoo-sports-stats-catalog` | `GET /yahoo-sports/stats-catalog` | none | `ApiKeyAuth` | `YahooSportsStatsCatalogResponse` | | +| yahooSports | `yahooSports.statsDiscovery` | `yahoo-sports-stats-discovery` | `GET /yahoo-sports/stats-discovery` | `league` (query String required)
`pageType` (query String) | `ApiKeyAuth` | `YahooSportsStatsDiscoveryResponse` | | | yahooSports | `yahooSports.team` | `yahoo-sports-team` | `GET /yahoo-sports/team` | `league` (query String required)
`team` (query String required) | `ApiKeyAuth` | `YahooSportsTeamResponse` | | | yahooSports | `yahooSports.teamRoster` | `yahoo-sports-team-roster` | `GET /yahoo-sports/team-roster` | `league` (query String required)
`team` (query String required) | `ApiKeyAuth` | `YahooSportsTeamRosterResponse` | | | yahooSports | `yahooSports.teamSchedule` | `yahoo-sports-team-schedule` | `GET /yahoo-sports/team-schedule` | `league` (query String required)
`team` (query String required) | `ApiKeyAuth` | `YahooSportsTeamScheduleResponse` | | | yahooSports | `yahooSports.tennisRankings` | `yahoo-sports-tennis-rankings` | `GET /yahoo-sports/tennis-rankings` | `type` (query String required) | `ApiKeyAuth` | `YahooSportsTennisRankingsResponse` | | | yahooSports | `yahooSports.tennisSchedule` | `yahoo-sports-tennis-schedule` | `GET /yahoo-sports/tennis-schedule` | none | `ApiKeyAuth` | `YahooSportsTennisScheduleResponse` | | | yahooSports | `yahooSports.tennisScoreboard` | `yahoo-sports-tennis-scoreboard` | `GET /yahoo-sports/tennis-scoreboard` | none | `ApiKeyAuth` | `YahooSportsTennisScoreboardResponse` | | +| yahooSports | `yahooSports.topicNews` | `yahoo-sports-topic-news` | `GET /yahoo-sports/topic-news` | `topic` (query String)
`topic_url` (query String) | `ApiKeyAuth` | `YahooSportsTopicNewsResponse` | | +| yahooSports | `yahooSports.videoHeadlines` | `yahoo-sports-video-headlines` | `GET /yahoo-sports/video-headlines` | `list_id` (query String required)
`count` (query String) | `ApiKeyAuth` | `YahooSportsVideoHeadlinesResponse` | | +| yahooSports | `yahooSports.videoListCatalog` | `yahoo-sports-video-list-catalog` | `GET /yahoo-sports/video-list-catalog` | none | `ApiKeyAuth` | `YahooSportsVideoListCatalogResponse` | | +| yahooSports | `yahooSports.watchSchedule` | `yahoo-sports-watch-schedule` | `GET /yahoo-sports/watch-schedule` | none | `ApiKeyAuth` | `YahooSportsWatchScheduleResponse` | | | yahooTech | `yahooTech.article` | `yahoo-tech-article` | `GET /yahoo-tech/article` | `url` (query String required) | `ApiKeyAuth` | `YahooTechArticleResponse` | | | yahooTech | `yahooTech.category` | `yahoo-tech-category` | `GET /yahoo-tech/category` | `category` (query String required)
`page` (query Integer) | `ApiKeyAuth` | `YahooTechCategoryResponse` | | | yahooTech | `yahooTech.home` | `yahoo-tech-home` | `GET /yahoo-tech/home` | none | `ApiKeyAuth` | `YahooTechHomeResponse` | | diff --git a/docs/recipes.md b/docs/recipes.md index 8446020..4d187db 100644 --- a/docs/recipes.md +++ b/docs/recipes.md @@ -31,6 +31,17 @@ Object brand = client.brand().retrieve(Map.of("domain", "stripe.com")); Omit `include_metrics` for the 1-credit feed mode. Set it to `true` for the 3-credit anonymous HTML mode with public post and comment engagement metrics. +## Formula 1, BoardGameGeek, and Cricbuzz + +The 1.51.0 contract adds these public platform groups. The full generated +reference is in [`operations.md`](operations.md). + +```java +Object seasons = client.request("formula1-seasons", Map.of()); +Object taxonomy = client.request("boardgamegeek-taxonomy", Map.of()); +Object navigation = client.request("cricbuzz-navigation", Map.of()); +``` + ## Company Job Searches Search public job listings directly from employer career sites: diff --git a/openapi/public.json b/openapi/public.json index 625164f..2b47a9b 100644 --- a/openapi/public.json +++ b/openapi/public.json @@ -4616,6 +4616,11 @@ }, "alt.SoldListing": { "properties": { + "added_at": { + "description": "AddedAt is when Alt added the sale to its index (UTC, RFC 3339). It is\nlater than sold_date, typically by about a day and sometimes by several,\nand it is the field added_from/added_to and the added_* sorts act on.", + "example": "2026-11-04T07:00:45Z", + "type": "string" + }, "asset_id": { "type": "string" }, @@ -4640,6 +4645,13 @@ "grading_company": { "type": "string" }, + "has_print_run": { + "type": "boolean" + }, + "has_serial": { + "description": "HasSerial, HasPrintRun and RookieYearCard are Alt's own card flags and\nare omitted when false. They match the has_serial, has_print_run and\nrookie_year_card filters.", + "type": "boolean" + }, "id": { "type": "string" }, @@ -4677,6 +4689,9 @@ "price": { "type": "number" }, + "rookie_year_card": { + "type": "boolean" + }, "sold_date": { "type": "string" }, @@ -8000,6 +8015,113 @@ }, "type": "object" }, + "applebooks.AudiobookChartItem": { + "properties": { + "artist_id": { + "description": "Apple Books id of the author.", + "type": "integer" + }, + "artist_name": { + "description": "Name of the author as Apple Books lists it.", + "type": "string" + }, + "artist_url": { + "description": "Apple Books page URL of the author.", + "type": "string" + }, + "artwork_url": { + "description": "URL of the audiobook cover artwork.", + "type": "string" + }, + "book_id": { + "description": "Apple Books id of the matching ebook edition, when one exists.", + "type": "integer" + }, + "currency": { + "description": "Currency code of `price`, such as `USD`.", + "type": "string" + }, + "description": { + "description": "Audiobook description as shown on Apple Books.", + "type": "string" + }, + "duration_seconds": { + "description": "Length of the audiobook, in seconds.", + "type": "integer" + }, + "free": { + "description": "Whether the audiobook is free, meaning its price is 0.", + "type": "boolean" + }, + "genres": { + "description": "Genres Apple Books files the audiobook under.", + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "description": "Apple Books audiobook id.", + "type": "integer" + }, + "name": { + "description": "Title of the audiobook as Apple Books shows it.", + "type": "string" + }, + "narrator": { + "description": "Name of the narrator.", + "type": "string" + }, + "position": { + "type": "integer" + }, + "preview_url": { + "description": "URL of an audio preview sample.", + "type": "string" + }, + "price": { + "description": "Audiobook price in the currency given by `currency`.", + "type": "number" + }, + "provider": { + "description": "Publisher or provider Apple Books credits for the audiobook.", + "type": "string" + }, + "rating": { + "description": "Average customer rating of the audiobook.", + "type": "number" + }, + "rating_count": { + "description": "Number of customer ratings the audiobook has received.", + "type": "integer" + }, + "rating_histogram": { + "additionalProperties": { + "format": "int64", + "type": "integer" + }, + "description": "Number of ratings for each star value, keyed `1` to `5`.", + "type": "object" + }, + "release_date": { + "description": "Release date of the audiobook, in ISO 8601 format.", + "type": "string" + }, + "series_id": { + "description": "Apple Books id of the series the audiobook belongs to.", + "type": "integer" + }, + "series_name": { + "description": "Name of the series the audiobook belongs to.", + "type": "string" + }, + "url": { + "description": "Apple Books page URL of the audiobook.", + "type": "string" + } + }, + "type": "object" + }, "applebooks.AudiobookSeries": { "properties": { "audiobooks": { @@ -8171,6 +8293,85 @@ }, "type": "object" }, + "applebooks.Genre": { + "properties": { + "id": { + "enum": [ + "9008", + "9009", + "9026", + "9027", + "9028", + "9031", + "9025", + "9015", + "11086", + "9032", + "9002", + "9034", + "9018", + "9003", + "9020", + "9035", + "11165", + "50000042", + "50000043", + "50000040", + "50000049", + "50000044", + "50000051", + "50000052", + "50000053", + "50000069", + "50000055", + "50000054", + "50000056" + ], + "type": "string" + }, + "media": { + "enum": [ + "book", + "audiobook" + ], + "type": "string" + }, + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "applebooks.GenresResult": { + "properties": { + "country": { + "type": "string" + }, + "genres": { + "items": { + "$ref": "#/definitions/applebooks.Genre" + }, + "type": "array" + }, + "media": { + "enum": [ + "book", + "audiobook" + ], + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, "applebooks.Review": { "properties": { "date": { @@ -8220,6 +8421,25 @@ }, "type": "object" }, + "applebooks.audiobookChartsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "items": { + "$ref": "#/definitions/applebooks.AudiobookChartItem" + }, + "type": "array" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, "applebooks.audiobookResponseDoc": { "properties": { "code": { @@ -8360,6 +8580,22 @@ }, "type": "object" }, + "applebooks.genresResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/applebooks.GenresResult" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, "applebooks.reviewsResponseDoc": { "properties": { "code": { @@ -14802,6 +15038,585 @@ }, "type": "object" }, + "bandcamp.Album": { + "properties": { + "artist": { + "type": "string" + }, + "artist_id": { + "type": "integer" + }, + "artist_url": { + "type": "string" + }, + "duration_seconds": { + "type": "number" + }, + "formats": { + "items": { + "$ref": "#/definitions/bandcamp.Format" + }, + "type": "array" + }, + "free_download": { + "type": "boolean" + }, + "id": { + "type": "integer" + }, + "image_url": { + "type": "string" + }, + "location": { + "type": "string" + }, + "preorder": { + "type": "boolean" + }, + "price": { + "$ref": "#/definitions/bandcamp.Price" + }, + "release_date": { + "type": "string" + }, + "set_price": { + "type": "boolean" + }, + "title": { + "type": "string" + }, + "track_count": { + "type": "integer" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "bandcamp.ArtistRelease": { + "properties": { + "id": { + "type": "integer" + }, + "image_url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "bandcamp.ArtistResponse": { + "properties": { + "bio": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "image_url": { + "type": "string" + }, + "location": { + "type": "string" + }, + "name": { + "type": "string" + }, + "releases": { + "items": { + "$ref": "#/definitions/bandcamp.ArtistRelease" + }, + "type": "array" + }, + "total": { + "type": "integer" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "bandcamp.Choice": { + "properties": { + "id": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "bandcamp.DiscoverResponse": { + "properties": { + "albums": { + "items": { + "$ref": "#/definitions/bandcamp.Album" + }, + "type": "array" + }, + "next_cursor": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "bandcamp.FiltersResponse": { + "properties": { + "formats": { + "items": { + "$ref": "#/definitions/bandcamp.Choice" + }, + "type": "array" + }, + "genres": { + "items": { + "$ref": "#/definitions/bandcamp.Choice" + }, + "type": "array" + }, + "max_tags": { + "type": "integer" + }, + "size": { + "properties": { + "default": { + "type": "integer" + }, + "max": { + "type": "integer" + }, + "min": { + "type": "integer" + } + }, + "type": "object" + }, + "sorts": { + "items": { + "$ref": "#/definitions/bandcamp.Choice" + }, + "type": "array" + }, + "time_facets": { + "items": { + "$ref": "#/definitions/bandcamp.Choice" + }, + "type": "array" + } + }, + "type": "object" + }, + "bandcamp.Format": { + "properties": { + "format": { + "type": "string" + }, + "price": { + "$ref": "#/definitions/bandcamp.Price" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "bandcamp.Package": { + "properties": { + "description": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "price": { + "$ref": "#/definitions/bandcamp.Price" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "bandcamp.Price": { + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "type": "string" + } + }, + "type": "object" + }, + "bandcamp.RelatedTag": { + "properties": { + "is_location": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "relation": { + "type": "number" + }, + "tag": { + "type": "string" + } + }, + "type": "object" + }, + "bandcamp.RelatedTagsResponse": { + "properties": { + "name": { + "type": "string" + }, + "related": { + "items": { + "$ref": "#/definitions/bandcamp.RelatedTag" + }, + "type": "array" + }, + "tag": { + "type": "string" + } + }, + "type": "object" + }, + "bandcamp.ReleaseResponse": { + "properties": { + "about": { + "type": "string" + }, + "album": { + "type": "string" + }, + "album_url": { + "type": "string" + }, + "artist": { + "type": "string" + }, + "artist_id": { + "type": "integer" + }, + "artist_url": { + "type": "string" + }, + "credits": { + "type": "string" + }, + "free_download": { + "type": "boolean" + }, + "id": { + "type": "integer" + }, + "image_url": { + "type": "string" + }, + "isrc": { + "type": "string" + }, + "label": { + "type": "string" + }, + "minimum_price": { + "type": "number" + }, + "packages": { + "items": { + "$ref": "#/definitions/bandcamp.Package" + }, + "type": "array" + }, + "preorder": { + "type": "boolean" + }, + "price": { + "$ref": "#/definitions/bandcamp.Price" + }, + "release_date": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "track_count": { + "type": "integer" + }, + "tracks": { + "items": { + "$ref": "#/definitions/bandcamp.Track" + }, + "type": "array" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "bandcamp.SearchGenre": { + "properties": { + "genre": { + "type": "string" + }, + "subgenre": { + "type": "string" + } + }, + "type": "object" + }, + "bandcamp.SearchResponse": { + "properties": { + "genre": { + "$ref": "#/definitions/bandcamp.SearchGenre" + }, + "may_have_more": { + "type": "boolean" + }, + "query": { + "type": "string" + }, + "results": { + "items": { + "$ref": "#/definitions/bandcamp.SearchResult" + }, + "type": "array" + }, + "tags": { + "items": { + "$ref": "#/definitions/bandcamp.SearchTag" + }, + "type": "array" + }, + "total": { + "type": "integer" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "bandcamp.SearchResult": { + "properties": { + "album_id": { + "type": "integer" + }, + "album_name": { + "type": "string" + }, + "artist_id": { + "type": "integer" + }, + "artist_name": { + "type": "string" + }, + "artist_url": { + "type": "string" + }, + "genre": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "image_url": { + "type": "string" + }, + "is_label": { + "type": "boolean" + }, + "location": { + "type": "string" + }, + "name": { + "type": "string" + }, + "rank": { + "type": "integer" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "bandcamp.SearchTag": { + "properties": { + "count": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "tag": { + "type": "string" + } + }, + "type": "object" + }, + "bandcamp.Track": { + "properties": { + "duration_seconds": { + "type": "number" + }, + "id": { + "type": "integer" + }, + "lyrics": { + "type": "string" + }, + "number": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "bandcamp.artistResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/bandcamp.ArtistResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "bandcamp.discoverResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/bandcamp.DiscoverResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "bandcamp.filtersResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/bandcamp.FiltersResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "bandcamp.relatedTagsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/bandcamp.RelatedTagsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "bandcamp.releaseResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/bandcamp.ReleaseResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "bandcamp.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/bandcamp.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, "barrons.ArticleResponse": { "properties": { "archive_timestamp": { @@ -19008,6 +19823,11 @@ "type": "string" }, "amount_due_cents": { + "description": "AmountDueCents is retained as the legacy alias for the full upcoming invoice preview.", + "type": "integer" + }, + "amount_due_now_cents": { + "description": "AmountDueNowCents estimates the immediate upgrade invoice from proration\nlines and subscription-specific invoice items, including applicable taxes\nand the customer's existing Stripe balance.", "type": "integer" }, "currency": { @@ -19022,6 +19842,13 @@ "effective_at": { "type": "string" }, + "line_items": { + "description": "LineItems exposes the upcoming invoice preview with each line marked for\nwhether the subscription change will invoice it immediately.", + "items": { + "$ref": "#/definitions/billing.StripeSubscriptionChangePreviewLineItem" + }, + "type": "array" + }, "next_renewal_amount_cents": { "type": "integer" }, @@ -19049,12 +19876,42 @@ "target_rate_limit_per_minute": { "type": "integer" }, + "upcoming_invoice_total_cents": { + "description": "UpcomingInvoiceTotalCents is the full Stripe invoice preview total, which\ncan include the next renewal charge as well as immediate upgrade lines.", + "type": "integer" + }, "used_credits": { "type": "integer" } }, "type": "object" }, + "billing.StripeSubscriptionChangePreviewLineItem": { + "properties": { + "amount_cents": { + "type": "integer" + }, + "currency": { + "type": "string" + }, + "description": { + "type": "string" + }, + "due_now": { + "type": "boolean" + }, + "is_proration": { + "type": "boolean" + }, + "period_end": { + "type": "string" + }, + "period_start": { + "type": "string" + } + }, + "type": "object" + }, "billing.StripeSubscriptionChangeResult": { "properties": { "action": { @@ -19487,6 +20344,27 @@ "example": "crawlora_overage_credits", "type": "string" }, + "stripe_proration_invoice_earliest_due_date": { + "example": "2026-10-30T12:00:00Z", + "type": "string" + }, + "stripe_proration_invoice_ids": { + "example": [ + "in_proration_1", + "in_proration_2" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "stripe_proration_invoice_status_counts": { + "additionalProperties": { + "format": "int64", + "type": "integer" + }, + "type": "object" + }, "stripe_snapshot_updated_at": { "example": "2026-05-01T01:01:00Z", "type": "string" @@ -19570,6 +20448,12 @@ "accounts_receivable": { "$ref": "#/definitions/billing.billingStatementAccountsReceivableDoc" }, + "additional_invoices": { + "items": { + "$ref": "#/definitions/billing.billingStatementInvoiceEvidenceDoc" + }, + "type": "array" + }, "adjustment_events": { "items": { "$ref": "#/definitions/billing.billingStatementAdjustmentEvidenceDoc" @@ -22556,7 +23440,9 @@ "upcoming", "current", "finished", - "defwin" + "defwin", + "canceled", + "postponed" ], "example": "current", "type": "string" @@ -22704,7 +23590,9 @@ "upcoming", "current", "finished", - "defwin" + "defwin", + "canceled", + "postponed" ], "example": "current", "type": "string" @@ -22790,6 +23678,28 @@ "example": 20, "type": "integer" }, + "locale": { + "enum": [ + "en", + "ru", + "pt", + "es", + "de", + "fr", + "tr", + "pl", + "id", + "vi", + "ja", + "ko", + "ua", + "ms", + "tl", + "da" + ], + "example": "en", + "type": "string" + }, "offset": { "example": 0, "type": "integer" @@ -22799,7 +23709,8 @@ "news", "article", "wiki", - "predictions" + "predictions", + "reviews" ], "example": "news", "type": "string" @@ -22808,6 +23719,10 @@ "example": "https://bo3.gg/matches/current", "type": "string" }, + "tag": { + "example": "team-liquid", + "type": "string" + }, "total": { "example": 4401, "type": "integer" @@ -24148,7 +25063,9 @@ "enum": [ "current", "upcoming", - "finished" + "finished", + "canceled", + "postponed" ], "example": "current", "type": "string" @@ -24216,7 +25133,9 @@ "enum": [ "current", "upcoming", - "finished" + "finished", + "canceled", + "postponed" ], "example": "current", "type": "string" @@ -24785,259 +25704,2494 @@ }, "type": "object" }, - "bonhams.AuctionLotsResponse": { + "boardgamegeek.APILink": { "properties": { - "auction_id": { + "rel": { "type": "string" }, - "page": { + "uri": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.AlternateName": { + "properties": { + "name": { + "type": "string" + }, + "nameid": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.Article": { + "properties": { + "adminStatus": { + "$ref": "#/definitions/boardgamegeek.ArticleAdminStatus" + }, + "author": { "type": "integer" }, - "per_page": { + "body": { + "type": "string" + }, + "bodyXml": { + "type": "string" + }, + "canonical_link": { + "type": "string" + }, + "collapsed": { + "type": "boolean" + }, + "editdate": { + "type": "string" + }, + "firstPost": { + "type": "boolean" + }, + "href": { + "type": "string" + }, + "id": { + "type": "string" + }, + "links": { + "items": { + "$ref": "#/definitions/boardgamegeek.APILink" + }, + "type": "array" + }, + "postdate": { + "type": "string" + }, + "rollsCount": { "type": "integer" }, - "query": { + "rollsEnabled": { + "type": "boolean" + }, + "source": { + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.ArticleAdminStatus": { + "properties": { + "stub": { "type": "string" }, - "results": { + "visibility": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.CardSet": { + "properties": { + "addon": { + "type": "boolean" + }, + "cardTypes": { "items": { - "$ref": "#/definitions/bonhams.Lot" + "$ref": "#/definitions/boardgamegeek.CardType" }, "type": "array" }, - "total": { + "itemstate": { + "type": "string" + }, + "linkid": { + "type": "string" + }, + "linktype": { + "type": "string" + }, + "name": { + "type": "string" + }, + "notes": { + "type": "string" + }, + "objectid": { + "type": "string" + }, + "objecttype": { + "type": "string" + }, + "postdate": { + "type": "string" + }, + "rep_imageid": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.CardType": { + "properties": { + "height": { + "type": "string" + }, + "itemstate": { + "type": "string" + }, + "linkid": { + "type": "string" + }, + "linktype": { + "type": "string" + }, + "name": { + "type": "string" + }, + "objectid": { + "type": "string" + }, + "objecttype": { + "type": "string" + }, + "postdate": { + "type": "string" + }, + "quantity": { + "type": "string" + }, + "quantity_note": { + "type": "string" + }, + "rep_imageid": { + "type": "string" + }, + "width": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.CardsetsResponse": { + "properties": { + "cardSets": { + "items": { + "$ref": "#/definitions/boardgamegeek.CardSet" + }, + "type": "array" + }, + "count": { "type": "integer" }, - "total_pages": { + "fetched_at": { + "type": "string" + }, + "hasBaseOrExpansionCardSets": { + "type": "boolean" + }, + "objectid": { + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.Descriptor": { + "properties": { + "displayValue": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.DynamicInfo": { + "properties": { + "polls": { + "$ref": "#/definitions/boardgamegeek.Polls" + }, + "rankinfo": { + "items": { + "$ref": "#/definitions/boardgamegeek.RankInfo" + }, + "type": "array" + }, + "relatedcounts": { + "$ref": "#/definitions/boardgamegeek.RelatedCounts" + }, + "stats": { + "$ref": "#/definitions/boardgamegeek.DynamicStats" + } + }, + "type": "object" + }, + "boardgamegeek.DynamicStats": { + "properties": { + "average": { + "type": "string" + }, + "avgweight": { + "type": "string" + }, + "baverage": { + "type": "string" + }, + "numcomments": { + "type": "string" + }, + "numfans": {}, + "numgeeklists": { + "type": "string" + }, + "numhasparts": { + "type": "string" + }, + "numowned": { + "type": "string" + }, + "numplays": { + "description": "The source sends these three as numbers on some reads and strings on\nothers, so they are preserved as sent rather than coerced." + }, + "numplays_month": {}, + "numpreordered": { + "type": "string" + }, + "numprevowned": { + "type": "string" + }, + "numtrading": { + "type": "string" + }, + "numwanting": { + "type": "string" + }, + "numwantparts": { + "type": "string" + }, + "numwanttobuy": { + "type": "string" + }, + "numwanttoplay": { + "type": "string" + }, + "numweights": { + "type": "string" + }, + "numwish": { + "type": "string" + }, + "numwishlistcomments": { + "type": "string" + }, + "playmonth": { + "type": "string" + }, + "stddev": { + "type": "string" + }, + "usersrated": { + "type": "string" + }, + "views": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.EntityResponse": { + "properties": { + "count": { "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "item": { + "$ref": "#/definitions/boardgamegeek.Item" + }, + "objecttype": { + "type": "string" + }, + "schema": { + "items": { + "$ref": "#/definitions/boardgamegeek.FieldData" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "stats": { + "$ref": "#/definitions/boardgamegeek.DynamicInfo" } }, "type": "object" }, - "bonhams.AuctionSearchResponse": { + "boardgamegeek.FieldData": { "properties": { - "page": { + "alternate": { + "type": "boolean" + }, + "chain_index": { + "items": { + "type": "string" + }, + "type": "array" + }, + "chain_title": { + "type": "string" + }, + "datatype": { + "type": "string" + }, + "fieldname": { + "type": "string" + }, + "fullcredits": { + "type": "boolean" + }, + "keyname": { + "type": "string" + }, + "linktype": { + "type": "string" + }, + "lookup_subtype": { + "type": "string" + }, + "other_objecttype": { + "type": "string" + }, + "other_subtype": { + "type": "string" + }, + "primaryname": { + "type": "boolean" + }, + "required": { + "type": "boolean" + }, + "self_prefix": { + "type": "string" + }, + "title": { + "type": "string" + }, + "unclickable": { + "type": "boolean" + } + }, + "type": "object" + }, + "boardgamegeek.File": { + "properties": { + "description": {}, + "fileid": { + "type": "string" + }, + "filename": { + "type": "string" + }, + "filepageid": { + "type": "string" + }, + "href": { + "type": "string" + }, + "language": { + "type": "string" + }, + "languageid": { + "type": "string" + }, + "numcomments": { + "type": "string" + }, + "numpositive": { + "type": "string" + }, + "postdate": { + "type": "string" + }, + "size": { + "type": "string" + }, + "title": { + "type": "string" + }, + "user": { + "$ref": "#/definitions/boardgamegeek.UserRef" + }, + "userid": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.ForumRef": { + "properties": { + "adminonly": { + "type": "string" + }, + "description": { + "type": "string" + }, + "displayorder": { + "type": "string" + }, + "forumid": {}, + "geekmod": { + "type": "string" + }, + "groupid": { + "type": "string" + }, + "href": { + "type": "string" + }, + "lastpostdate": { + "type": "string" + }, + "noposting": { + "type": "string" + }, + "numposts": { + "type": "string" + }, + "numthreads": { "type": "integer" }, - "per_page": { + "objectid": { + "type": "string" + }, + "objecttype": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.GameResponse": { + "properties": { + "count": { "type": "integer" }, - "query": { + "fetched_at": { "type": "string" }, - "results": { + "item": { + "$ref": "#/definitions/boardgamegeek.Item" + }, + "schema": { "items": { - "$ref": "#/definitions/bonhams.AuctionSummary" + "$ref": "#/definitions/boardgamegeek.FieldData" }, "type": "array" }, - "total": { + "source_url": { + "type": "string" + }, + "stats": { + "$ref": "#/definitions/boardgamegeek.DynamicInfo" + } + }, + "type": "object" + }, + "boardgamegeek.GeeklistCategoryFilter": { + "properties": { + "title": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.GeeklistDetail": { + "properties": { + "body": { + "type": "string" + }, + "bodyXml": { + "type": "string" + }, + "canonical_link": { + "type": "string" + }, + "commentsAllowed": { + "type": "boolean" + }, + "creator": { "type": "integer" }, - "total_pages": { + "domains": { + "items": { + "type": "string" + }, + "type": "array" + }, + "editdate": { + "type": "string" + }, + "href": { + "type": "string" + }, + "id": { + "type": "string" + }, + "links": { + "items": { + "$ref": "#/definitions/boardgamegeek.APILink" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "ordinalDirection": { + "type": "string" + }, + "postdate": { + "type": "string" + }, + "private": { + "type": "boolean" + }, + "publicAdditionsAllowed": { + "type": "boolean" + }, + "sortType": { + "type": "string" + }, + "stealth": { + "type": "boolean" + }, + "submitted": { + "type": "boolean" + }, + "trade": { + "type": "boolean" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.GeeklistItem": { + "properties": { + "author": { "type": "integer" + }, + "body": { + "type": "string" + }, + "bodyXml": { + "type": "string" + }, + "editdate": { + "type": "string" + }, + "href": { + "type": "string" + }, + "id": { + "type": "string" + }, + "imageOverridden": { + "type": "boolean" + }, + "imageid": {}, + "item": { + "$ref": "#/definitions/boardgamegeek.ItemSummary" + }, + "linkedImage": {}, + "links": { + "items": { + "$ref": "#/definitions/boardgamegeek.APILink" + }, + "type": "array" + }, + "listid": { + "type": "string" + }, + "postdate": { + "type": "string" + }, + "rollsCount": { + "type": "integer" + }, + "rollsEnabled": { + "type": "boolean" + }, + "stats": { + "$ref": "#/definitions/boardgamegeek.GeeklistItemStats" + }, + "type": { + "type": "string" } }, "type": "object" }, - "bonhams.AuctionSummary": { + "boardgamegeek.GeeklistItemStats": { "properties": { - "auction_status": { + "average": { + "type": "number" + }, + "rank": { + "type": "integer" + }, + "usersrated": { + "type": "integer" + } + }, + "type": "object" + }, + "boardgamegeek.GeeklistItemsResponse": { + "properties": { + "count": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "auction_type": { + "items": { + "items": { + "$ref": "#/definitions/boardgamegeek.GeeklistItem" + }, + "type": "array" + }, + "listid": { "type": "string" }, - "bidding_status": { + "pageid": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "source_url": { "type": "string" }, - "brand": { + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "boardgamegeek.GeeklistResponse": { + "properties": { + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "geeklist": { + "$ref": "#/definitions/boardgamegeek.GeeklistDetail" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.GeeklistSummary": { + "properties": { + "href": { + "type": "string" + }, + "lastreplydate": { + "type": "string" + }, + "numitems": { + "type": "string" + }, + "numrecommend": { "type": "string" }, + "postdate": { + "type": "string" + }, + "title": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.GeeklistsResponse": { + "properties": { "categories": { "items": { - "$ref": "#/definitions/bonhams.NamedCode" + "$ref": "#/definitions/boardgamegeek.GeeklistCategoryFilter" }, "type": "array" }, - "country": { - "$ref": "#/definitions/bonhams.NamedCode" + "category": { + "type": "string" }, - "currency": { - "$ref": "#/definitions/bonhams.Currency" + "count": { + "type": "integer" }, - "departments": { + "end_page": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "lists": { "items": { - "$ref": "#/definitions/bonhams.NamedCode" + "$ref": "#/definitions/boardgamegeek.GeeklistSummary" }, "type": "array" }, - "end_date": { - "$ref": "#/definitions/bonhams.DateInfo" + "objectid": { + "type": "string" }, - "hammer_time": { - "$ref": "#/definitions/bonhams.DateInfo" + "objecttype": { + "type": "string" + }, + "pageid": { + "type": "integer" + }, + "showcount": { + "type": "integer" + }, + "sort": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "boardgamegeek.HotnessItem": { + "properties": { + "delta": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "href": { + "type": "string" }, "id": { "type": "string" }, - "image_url": { + "images": { + "additionalProperties": { + "$ref": "#/definitions/boardgamegeek.ImageSet" + }, + "type": "object" + }, + "imageurl": { "type": "string" }, - "is_auction_ended": { - "type": "boolean" + "name": { + "type": "string" }, - "is_exhibition": { + "objectid": { + "type": "string" + }, + "objecttype": { + "type": "string" + }, + "rank": { + "type": "string" + }, + "rep_imageid": { + "type": "string" + }, + "type": { + "type": "string" + }, + "yearpublished": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.HotnessResponse": { + "properties": { + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/boardgamegeek.HotnessItem" + }, + "type": "array" + }, + "objecttype": { + "type": "string" + }, + "showcount": { + "type": "integer" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.Image": { + "properties": { + "caption": { + "type": "string" + }, + "href": { + "type": "string" + }, + "imageid": { + "type": "string" + }, + "imageurl": { + "type": "string" + }, + "imageurl@2x": { + "type": "string" + }, + "imageurl_lg": { + "type": "string" + }, + "numcomments": { + "type": "string" + }, + "numrecommend": { + "type": "integer" + }, + "user": { + "$ref": "#/definitions/boardgamegeek.UserRef" + } + }, + "type": "object" + }, + "boardgamegeek.ImageSet": { + "properties": { + "src": { + "type": "string" + }, + "src@2x": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.Item": { + "properties": { + "alternatename": { + "type": "string" + }, + "alternatenames": { + "items": { + "$ref": "#/definitions/boardgamegeek.AlternateName" + }, + "type": "array" + }, + "alternatenamescount": { + "type": "integer" + }, + "bggstore_product": {}, + "canonical_link": { + "type": "string" + }, + "depth": { + "type": "string" + }, + "description": { + "type": "string" + }, + "dimensions": {}, + "focus_videoid": { + "type": "string" + }, + "howtoplay_videoid": { + "type": "string" + }, + "href": { + "type": "string" + }, + "id": { + "type": "string" + }, + "imageSets": { + "additionalProperties": { + "$ref": "#/definitions/boardgamegeek.ImageSet" + }, + "type": "object" + }, + "imageid": {}, + "imagepagehref": { + "type": "string" + }, + "images": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "imageurl": { + "type": "string" + }, + "imageurl@2x": { + "type": "string" + }, + "instructional_videoid": { + "type": "string" + }, + "itemid": { + "type": "integer" + }, + "itemstate": { + "type": "string" + }, + "label": { + "type": "string" + }, + "labelpl": { + "type": "string" + }, + "length": { + "type": "string" + }, + "linkcounts": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "linkcounts_chain": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "linkedname": { + "type": "string" + }, + "linkednameid": { + "type": "string" + }, + "links": { + "additionalProperties": { + "items": { + "$ref": "#/definitions/boardgamegeek.Link" + }, + "type": "array" + }, + "type": "object" + }, + "maxplayers": { + "type": "string" + }, + "maxplaytime": { + "type": "string" + }, + "minage": { + "type": "string" + }, + "minplayers": { + "type": "string" + }, + "minplaytime": { + "type": "string" + }, + "name": { + "type": "string" + }, + "objectid": { + "type": "integer" + }, + "objecttype": { + "type": "string" + }, + "orderenddate": { + "type": "string" + }, + "orderstartdate": { + "type": "string" + }, + "ordertype": {}, + "orderurl": { + "type": "string" + }, + "override_rankable": { + "type": "integer" + }, + "overridedate": { + "type": "string" + }, + "playthrough_videoid": { + "type": "string" + }, + "primaryname": { + "$ref": "#/definitions/boardgamegeek.NameRef" + }, + "productcode": { + "description": "Board-game-version-specific fields.", + "type": "string" + }, + "promoted_ad": {}, + "releasecomment": { + "type": "string" + }, + "releasedate": { + "type": "string" + }, + "releasestatus": {}, + "reviews_restricted": { + "type": "integer" + }, + "secondarynamescount": { + "type": "integer" + }, + "short_description": { + "type": "string" + }, + "shortlabel": { + "type": "string" + }, + "shortlabelpl": { + "type": "string" + }, + "special_user": { + "$ref": "#/definitions/boardgamegeek.UserRef" + }, + "subtype": { + "type": "string" + }, + "subtypes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "summary_videoid": { + "type": "string" + }, + "targetco_url": { + "type": "string" + }, + "topimageurl": { + "type": "string" + }, + "type": { + "type": "string" + }, + "versioninfo": {}, + "versionname": { + "type": "string" + }, + "walmart_id": { + "type": "string" + }, + "website": { + "$ref": "#/definitions/boardgamegeek.Website" + }, + "weight": { + "type": "string" + }, + "width": { + "type": "string" + }, + "wiki": { + "type": "string" + }, + "yearpublished": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.ItemSummary": { + "properties": { + "breadcrumbs": {}, + "descriptors": { + "items": { + "$ref": "#/definitions/boardgamegeek.Descriptor" + }, + "type": "array" + }, + "hasAngularLink": { "type": "boolean" }, - "lot_count": { + "href": { + "type": "string" + }, + "id": { + "type": "string" + }, + "imageSets": { + "additionalProperties": { + "$ref": "#/definitions/boardgamegeek.ImageSet" + }, + "type": "object" + }, + "imageid": {}, + "label": { + "type": "string" + }, + "labelpl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "nameSortIndex": { "type": "integer" }, - "month": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.Language": { + "properties": { + "id": { "type": "string" }, - "month_and_year": { + "name": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.Link": { + "properties": { + "canonical_link": { "type": "string" }, - "region": { - "$ref": "#/definitions/bonhams.NamedCode" + "href": { + "type": "string" }, - "slug": { + "itemstate": { "type": "string" }, - "start_date": { - "$ref": "#/definitions/bonhams.DateInfo" + "name": { + "type": "string" }, - "title": { + "objectid": { "type": "string" }, - "url": { + "objecttype": { "type": "string" }, - "year": { + "primarylink": { + "type": "integer" + }, + "sortindex": { "type": "string" } }, "type": "object" }, - "bonhams.Currency": { + "boardgamegeek.LinkedItem": { "properties": { - "bonhams_code": { + "href": { "type": "string" }, - "iso_code": { + "images": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "itemstate": { "type": "string" }, - "symbol": { + "linkid": { + "type": "string" + }, + "links": {}, + "linktype": { + "type": "string" + }, + "name": { + "type": "string" + }, + "objectid": { + "type": "string" + }, + "objecttype": { + "type": "string" + }, + "postdate": { + "type": "string" + }, + "rep_imageid": { + "type": "string" + }, + "subtype": { "type": "string" } }, "type": "object" }, - "bonhams.DateInfo": { + "boardgamegeek.LinksResponse": { "properties": { - "datetime": { + "count": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "timestamp": { + "items": { + "items": { + "$ref": "#/definitions/boardgamegeek.LinkedItem" + }, + "type": "array" + }, + "linktype": { + "type": "string" + }, + "objectid": { + "type": "string" + }, + "objecttype": { + "type": "string" + }, + "pageid": { "type": "integer" }, - "timezone": { + "showcount": { + "type": "integer" + }, + "source_url": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "bonhams.Lot": { + "boardgamegeek.MediaResponse": { "properties": { - "auction_bidding_status": { + "count": { + "type": "integer" + }, + "end_page": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "auction_id": { + "files": { + "items": { + "$ref": "#/definitions/boardgamegeek.File" + }, + "type": "array" + }, + "images": { + "items": { + "$ref": "#/definitions/boardgamegeek.Image" + }, + "type": "array" + }, + "objectid": { "type": "string" }, - "auction_status": { + "pageid": { + "type": "integer" + }, + "showcount": { + "type": "integer" + }, + "source_url": { "type": "string" }, - "auction_type": { + "total": { + "type": "integer" + }, + "type": { "type": "string" }, - "categories": { + "videos": { "items": { - "$ref": "#/definitions/bonhams.NamedCode" + "$ref": "#/definitions/boardgamegeek.Video" }, "type": "array" + } + }, + "type": "object" + }, + "boardgamegeek.NameRef": { + "properties": { + "name": { + "type": "string" }, - "condition_report_available": { - "type": "boolean" + "nameid": { + "type": "string" }, - "country": { - "$ref": "#/definitions/bonhams.NamedCode" + "primaryname": { + "type": "string" }, - "currency": { - "$ref": "#/definitions/bonhams.Currency" + "sortindex": { + "type": "string" }, - "department": { - "$ref": "#/definitions/bonhams.NamedCode" + "translit": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.PollRange": { + "properties": { + "max": { + "type": "integer" }, - "estimate_high": { - "type": "number" + "min": { + "type": "integer" + } + }, + "type": "object" + }, + "boardgamegeek.Polls": { + "properties": { + "boardgameweight": { + "$ref": "#/definitions/boardgamegeek.WeightPoll" }, - "estimate_high_gbp": { - "type": "number" + "languagedependence": { + "type": "string" }, - "estimate_low": { - "type": "number" + "playerage": { + "type": "string" }, - "estimate_low_gbp": { - "type": "number" + "subdomain": { + "type": "string" }, - "hammer_premium": { - "type": "number" + "userplayers": { + "$ref": "#/definitions/boardgamegeek.UserPlayersPoll" + } + }, + "type": "object" + }, + "boardgamegeek.RankInfo": { + "properties": { + "baverage": { + "type": "string" }, - "hammer_price": { - "type": "number" + "browsesubtype": { + "type": "string" }, - "id": { + "prettyname": { "type": "string" }, - "image_url": { + "rank": { "type": "string" }, - "lot_number": { + "rankobjectid": { + "type": "integer" + }, + "rankobjecttype": { "type": "string" }, - "sale_date": { - "$ref": "#/definitions/bonhams.DateInfo" + "shortprettyname": { + "type": "string" }, - "slug": { + "subdomain": { "type": "string" }, - "starting_bid_amount": { + "veryshortprettyname": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.Recommendation": { + "properties": { + "description": { + "type": "string" + }, + "image": { + "$ref": "#/definitions/boardgamegeek.ImageSet" + }, + "item": { + "$ref": "#/definitions/boardgamegeek.ItemSummary" + }, + "numfans": { + "type": "integer" + }, + "numvoters": { + "type": "integer" + }, + "rank": { + "type": "integer" + }, + "rating": { "type": "number" }, - "status": { + "topImage": { + "$ref": "#/definitions/boardgamegeek.ImageSet" + }, + "yearpublished": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.RecommendationsResponse": { + "properties": { + "count": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "symbols": { + "numrecs": { + "type": "integer" + }, + "objectid": { + "type": "string" + }, + "recs": { "items": { - "type": "string" + "$ref": "#/definitions/boardgamegeek.Recommendation" }, "type": "array" }, + "showcount": { + "type": "integer" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.RelatedCounts": { + "properties": { + "blogs": { + "type": "integer" + }, + "news": { + "type": "integer" + }, + "podcast": { + "type": "integer" + }, + "weblink": { + "type": "integer" + } + }, + "type": "object" + }, + "boardgamegeek.Review": { + "properties": { + "body": { + "type": "string" + }, + "extvideoid": { + "type": "string" + }, + "featured": { + "type": "string" + }, + "featuredPlacementSponsored": {}, + "forumid": { + "type": "string" + }, + "forumtitle": { + "type": "string" + }, + "forumuid": { + "type": "string" + }, + "frontpin": { + "type": "string" + }, + "gallery": { + "type": "string" + }, + "hidden": { + "type": "string" + }, + "hidefrontpage": { + "type": "string" + }, + "imageurl": { + "type": "string" + }, + "language": { + "type": "string" + }, + "languageid": { + "type": "string" + }, + "lastpostarticleid": { + "type": "string" + }, + "lastpostdate": { + "type": "string" + }, + "lastpostuserid": { + "type": "string" + }, + "linkname": { + "type": "string" + }, + "locked": { + "type": "string" + }, + "numposts": { + "type": "string" + }, + "numrecommend": { + "description": "NumRecommend is a number on some rows and a string on others." + }, + "objectid": { + "type": "string" + }, + "objecttype": { + "type": "string" + }, + "pin": { + "type": "string" + }, + "postdate": { + "type": "string" + }, + "shadowthreadid": { + "type": "string" + }, + "subject": { + "type": "string" + }, + "threadid": { + "description": "Text review thread fields.", + "type": "string" + }, "title": { "type": "string" }, - "url": { + "user": { + "$ref": "#/definitions/boardgamegeek.ReviewUser" + }, + "userid": { "type": "string" }, - "without_reserve": { + "videohost": { + "type": "string" + }, + "videoid": { + "description": "Video review fields.", + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.ReviewCounts": { + "properties": { + "thread": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "video": { + "type": "integer" + } + }, + "type": "object" + }, + "boardgamegeek.ReviewShowAll": { + "properties": { + "forum": { + "type": "string" + }, + "video": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.ReviewUser": { + "properties": { + "avatar": { + "type": "string" + }, + "avatarfile": { + "type": "string" + }, + "avatarurl_md": { + "type": "string" + }, + "textreviewcount": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "videoreviewcount": { + "type": "integer" + } + }, + "type": "object" + }, + "boardgamegeek.ReviewsResponse": { + "properties": { + "count": { + "type": "integer" + }, + "counts": { + "$ref": "#/definitions/boardgamegeek.ReviewCounts" + }, + "fetched_at": { + "type": "string" + }, + "hot": { + "items": { + "$ref": "#/definitions/boardgamegeek.Review" + }, + "type": "array" + }, + "objectid": { + "type": "string" + }, + "objecttype": { + "type": "string" + }, + "recent": { + "items": { + "$ref": "#/definitions/boardgamegeek.Review" + }, + "type": "array" + }, + "showall": { + "$ref": "#/definitions/boardgamegeek.ReviewShowAll" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.TaxonomyObjectType": { + "properties": { + "link_types": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "subtypes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "unverified_subtypes": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "boardgamegeek.TaxonomyResponse": { + "properties": { + "count": { + "type": "integer" + }, + "entity_types": { + "items": { + "type": "string" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "geeklist_categories": { + "items": { + "type": "string" + }, + "type": "array" + }, + "geeklist_sorts": { + "items": { + "type": "string" + }, + "type": "array" + }, + "hotness_object_types": { + "items": { + "type": "string" + }, + "type": "array" + }, + "media_file_languages": { + "items": { + "$ref": "#/definitions/boardgamegeek.Language" + }, + "type": "array" + }, + "media_galleries": { + "items": { + "type": "string" + }, + "type": "array" + }, + "media_intervals": { + "items": { + "type": "string" + }, + "type": "array" + }, + "media_licenses": { + "items": { + "type": "string" + }, + "type": "array" + }, + "media_sorts": { + "items": { + "type": "string" + }, + "type": "array" + }, + "media_tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "media_types": { + "items": { + "type": "string" + }, + "type": "array" + }, + "media_video_galleries": { + "items": { + "type": "string" + }, + "type": "array" + }, + "media_video_languages": { + "items": { + "$ref": "#/definitions/boardgamegeek.Language" + }, + "type": "array" + }, + "notes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "object_types": { + "items": { + "$ref": "#/definitions/boardgamegeek.TaxonomyObjectType" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "thread_sorts": { + "items": { + "type": "string" + }, + "type": "array" + }, + "verified_at": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.ThreadCrumb": { + "properties": { + "href": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.ThreadInfo": { + "properties": { + "blocks_ads": { + "type": "boolean" + }, + "canonical_link": { + "type": "string" + }, + "creator": { + "type": "integer" + }, + "crumbs": { + "items": { + "$ref": "#/definitions/boardgamegeek.ThreadCrumb" + }, + "type": "array" + }, + "editdate": { + "type": "string" + }, + "forumid": { + "type": "string" + }, + "forumuid": { + "type": "string" + }, + "frontpinned": { + "type": "boolean" + }, + "hidden": { + "type": "boolean" + }, + "hidefrontpage": { + "type": "boolean" + }, + "href": { + "type": "string" + }, + "id": { + "type": "string" + }, + "links": { + "items": { + "$ref": "#/definitions/boardgamegeek.APILink" + }, + "type": "array" + }, + "locked": { + "type": "boolean" + }, + "numpages": { + "type": "integer" + }, + "numposts": { + "type": "integer" + }, + "pagesize": { + "type": "integer" + }, + "pinned": { "type": "boolean" + }, + "postdate": { + "type": "string" + }, + "shadowthreadid": { + "type": "integer" + }, + "source": { + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "subject": { + "type": "string" + }, + "threadid": { + "type": "integer" + }, + "type": { + "type": "string" } }, "type": "object" }, - "bonhams.LotSearchResponse": { + "boardgamegeek.ThreadResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/boardgamegeek.Article" + }, + "type": "array" + }, + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "pageid": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "thread": { + "$ref": "#/definitions/boardgamegeek.ThreadInfo" + }, + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "boardgamegeek.ThreadSummary": { + "properties": { + "forum_href": { + "type": "string" + }, + "forum_name": { + "type": "string" + }, + "forumid": { + "type": "string" + }, + "forumlink": { + "type": "string" + }, + "forumtitle": { + "type": "string" + }, + "forumuid": { + "type": "string" + }, + "frontpin": { + "type": "string" + }, + "hidden": { + "type": "string" + }, + "hidefrontpage": { + "type": "string" + }, + "href": { + "type": "string" + }, + "lastpostarticleid": { + "type": "string" + }, + "lastpostdate": { + "type": "string" + }, + "lastpostuserid": { + "type": "string" + }, + "lastpostusername": { + "type": "string" + }, + "linkname": { + "type": "string" + }, + "locked": { + "type": "string" + }, + "numposts": { + "type": "string" + }, + "numrecommend": { + "type": "integer" + }, + "objecthref": { + "type": "string" + }, + "objectid": { + "type": "string" + }, + "objectlink": { + "type": "string" + }, + "objectname": { + "type": "string" + }, + "objecttype": { + "type": "string" + }, + "pagination": { + "type": "string" + }, + "pin": { + "type": "string" + }, + "postdate": { + "type": "string" + }, + "shadowthreadid": { + "type": "string" + }, + "subject": { + "type": "string" + }, + "threadid": { + "type": "string" + }, + "user": { + "$ref": "#/definitions/boardgamegeek.UserRef" + }, + "userid": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.ThreadsResponse": { + "properties": { + "count": { + "type": "integer" + }, + "end_page": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "forumid": { + "type": "integer" + }, + "forums": { + "items": { + "$ref": "#/definitions/boardgamegeek.ForumRef" + }, + "type": "array" + }, + "objectid": { + "type": "string" + }, + "objecttype": { + "type": "string" + }, + "pageid": { + "type": "integer" + }, + "showcount": { + "type": "integer" + }, + "sort": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "threads": { + "items": { + "$ref": "#/definitions/boardgamegeek.ThreadSummary" + }, + "type": "array" + }, + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "boardgamegeek.UserPlayersPoll": { + "properties": { + "best": { + "items": { + "$ref": "#/definitions/boardgamegeek.PollRange" + }, + "type": "array" + }, + "recommended": { + "items": { + "$ref": "#/definitions/boardgamegeek.PollRange" + }, + "type": "array" + }, + "totalvotes": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.UserRef": { + "properties": { + "avatar": { + "type": "string" + }, + "avatarfile": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.Video": { + "properties": { + "description": { + "type": "string" + }, + "duration": { + "type": "string" + }, + "extvideoid": { + "type": "string" + }, + "featured": { + "type": "string" + }, + "gallery": { + "type": "string" + }, + "hidden": { + "type": "string" + }, + "href": { + "type": "string" + }, + "images": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "language": { + "type": "string" + }, + "languageid": { + "type": "string" + }, + "numcomments": { + "type": "string" + }, + "numrecommend": { + "type": "integer" + }, + "objectid": { + "type": "string" + }, + "objecttype": { + "type": "string" + }, + "postdate": { + "type": "string" + }, + "title": { + "type": "string" + }, + "user": { + "$ref": "#/definitions/boardgamegeek.UserRef" + }, + "userid": { + "type": "string" + }, + "videohost": { + "type": "string" + }, + "videoid": { + "type": "string" + } + }, + "type": "object" + }, + "boardgamegeek.Website": { + "properties": { + "title": { + "type": "string" + }, + "url": {} + }, + "type": "object" + }, + "boardgamegeek.WeightPoll": { + "properties": { + "averageweight": { + "type": "number" + }, + "votes": { + "type": "string" + } + }, + "type": "object" + }, + "bonhams.AuctionLotsResponse": { + "properties": { + "auction_id": { + "type": "string" + }, + "page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "query": { + "type": "string" + }, + "results": { + "items": { + "$ref": "#/definitions/bonhams.Lot" + }, + "type": "array" + }, + "total": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + } + }, + "type": "object" + }, + "bonhams.AuctionSearchResponse": { + "properties": { + "page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "query": { + "type": "string" + }, + "results": { + "items": { + "$ref": "#/definitions/bonhams.AuctionSummary" + }, + "type": "array" + }, + "total": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + } + }, + "type": "object" + }, + "bonhams.AuctionSummary": { + "properties": { + "auction_status": { + "type": "string" + }, + "auction_type": { + "type": "string" + }, + "bidding_status": { + "type": "string" + }, + "brand": { + "type": "string" + }, + "categories": { + "items": { + "$ref": "#/definitions/bonhams.NamedCode" + }, + "type": "array" + }, + "country": { + "$ref": "#/definitions/bonhams.NamedCode" + }, + "currency": { + "$ref": "#/definitions/bonhams.Currency" + }, + "departments": { + "items": { + "$ref": "#/definitions/bonhams.NamedCode" + }, + "type": "array" + }, + "end_date": { + "$ref": "#/definitions/bonhams.DateInfo" + }, + "hammer_time": { + "$ref": "#/definitions/bonhams.DateInfo" + }, + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "is_auction_ended": { + "type": "boolean" + }, + "is_exhibition": { + "type": "boolean" + }, + "lot_count": { + "type": "integer" + }, + "month": { + "type": "string" + }, + "month_and_year": { + "type": "string" + }, + "region": { + "$ref": "#/definitions/bonhams.NamedCode" + }, + "slug": { + "type": "string" + }, + "start_date": { + "$ref": "#/definitions/bonhams.DateInfo" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + }, + "year": { + "type": "string" + } + }, + "type": "object" + }, + "bonhams.Currency": { + "properties": { + "bonhams_code": { + "type": "string" + }, + "iso_code": { + "type": "string" + }, + "symbol": { + "type": "string" + } + }, + "type": "object" + }, + "bonhams.DateInfo": { + "properties": { + "datetime": { + "type": "string" + }, + "timestamp": { + "type": "integer" + }, + "timezone": { + "type": "string" + } + }, + "type": "object" + }, + "bonhams.Lot": { + "properties": { + "auction_bidding_status": { + "type": "string" + }, + "auction_id": { + "type": "string" + }, + "auction_status": { + "type": "string" + }, + "auction_type": { + "type": "string" + }, + "categories": { + "items": { + "$ref": "#/definitions/bonhams.NamedCode" + }, + "type": "array" + }, + "condition_report_available": { + "type": "boolean" + }, + "country": { + "$ref": "#/definitions/bonhams.NamedCode" + }, + "currency": { + "$ref": "#/definitions/bonhams.Currency" + }, + "department": { + "$ref": "#/definitions/bonhams.NamedCode" + }, + "estimate_high": { + "type": "number" + }, + "estimate_high_gbp": { + "type": "number" + }, + "estimate_low": { + "type": "number" + }, + "estimate_low_gbp": { + "type": "number" + }, + "hammer_premium": { + "type": "number" + }, + "hammer_price": { + "type": "number" + }, + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "lot_number": { + "type": "string" + }, + "sale_date": { + "$ref": "#/definitions/bonhams.DateInfo" + }, + "slug": { + "type": "string" + }, + "starting_bid_amount": { + "type": "number" + }, + "status": { + "type": "string" + }, + "symbols": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + }, + "without_reserve": { + "type": "boolean" + } + }, + "type": "object" + }, + "bonhams.LotSearchResponse": { "properties": { "page": { "type": "integer" @@ -25889,6 +29043,902 @@ }, "type": "object" }, + "booksy.Amenity": { + "properties": { + "key": { + "example": "parking", + "type": "string" + }, + "label": { + "example": "Parking space", + "type": "string" + } + }, + "type": "object" + }, + "booksy.BusinessCategory": { + "properties": { + "id": { + "example": 6, + "type": "integer" + }, + "name": { + "example": "Barbershop", + "type": "string" + }, + "plural_name": { + "example": "Barbershops", + "type": "string" + }, + "slug": { + "example": "barber-shop", + "type": "string" + } + }, + "type": "object" + }, + "booksy.BusinessDetail": { + "properties": { + "accept_booksy_gift_cards": { + "example": false, + "type": "boolean" + }, + "accept_booksy_pay": { + "example": false, + "type": "boolean" + }, + "amenities": { + "description": "Amenities and payment methods the business publishes.", + "items": { + "$ref": "#/definitions/booksy.Amenity" + }, + "type": "array" + }, + "best_of_booksy_badge": { + "description": "Badge label the business carries, when any.", + "type": "string" + }, + "booking_mode": { + "description": "Booking mode and policy text the marketplace shows to clients. No booking\nor availability data is returned.", + "example": "A", + "type": "string" + }, + "booking_policy": { + "example": "Changes allowed up to 2 hours before visit", + "type": "string" + }, + "categories": { + "description": "Every category the business is filed under, with the website's slugs.", + "items": { + "$ref": "#/definitions/booksy.BusinessCategory" + }, + "type": "array" + }, + "credit_cards": { + "type": "string" + }, + "description": { + "description": "Partner-written description.", + "type": "string" + }, + "facebook_link": { + "type": "string" + }, + "has_online_services": { + "example": false, + "type": "boolean" + }, + "has_online_vouchers": { + "example": true, + "type": "boolean" + }, + "hidden_on_web": { + "example": false, + "type": "boolean" + }, + "id": { + "example": 481342, + "type": "integer" + }, + "instagram_link": { + "type": "string" + }, + "is_b_listing": { + "example": false, + "type": "boolean" + }, + "is_recommended": { + "example": false, + "type": "boolean" + }, + "location": { + "allOf": [ + { + "$ref": "#/definitions/booksy.BusinessLocation" + } + ], + "description": "Address and coordinates." + }, + "name": { + "type": "string" + }, + "new_on_marketplace": { + "description": "New-on-marketplace and profile-kind flags.", + "example": false, + "type": "boolean" + }, + "noindex": { + "example": false, + "type": "boolean" + }, + "open_hours": { + "description": "Opening hours by weekday, plus the partner's note.", + "items": { + "$ref": "#/definitions/booksy.OpenHour" + }, + "type": "array" + }, + "opening_hours_note": { + "type": "string" + }, + "photo": { + "description": "Cover photo and logo/thumbnail.", + "type": "string" + }, + "pricing_level": { + "description": "The partner's price tier, when set.", + "type": "string" + }, + "primary_category": { + "example": 6, + "type": "integer" + }, + "profile_type": { + "example": "normal", + "type": "string" + }, + "promoted": { + "description": "Paid-placement and indexing flags.", + "example": true, + "type": "boolean" + }, + "promoted_labels": { + "allOf": [ + { + "$ref": "#/definitions/booksy.PromotedLabels" + } + ], + "description": "Paid-placement disclosure text." + }, + "regions": { + "description": "Geographic chain from country down to zip, with numeric ids.", + "items": { + "$ref": "#/definitions/booksy.Region" + }, + "type": "array" + }, + "reviews_count": { + "description": "Aggregate review counters only.", + "example": 423, + "type": "integer" + }, + "reviews_rank": { + "example": 4.955082742316785, + "type": "number" + }, + "reviews_stars": { + "example": 5, + "type": "integer" + }, + "score": { + "description": "Ranking score as the detail route reports it.", + "example": 8, + "type": "number" + }, + "service_categories": { + "description": "The complete partner-defined service menu.", + "items": { + "$ref": "#/definitions/booksy.ServiceCategory" + }, + "type": "array" + }, + "slug": { + "example": "flawless-fades-hair-systems-installations", + "type": "string" + }, + "subdomain": { + "description": "The business's own subdomain on the website, when it has one.", + "example": "flawlessfadesbyyamilo", + "type": "string" + }, + "thumbnail_photo": { + "type": "string" + }, + "top_services": { + "description": "The cheapest and most-booked menu items the app promotes on the profile.", + "items": { + "$ref": "#/definitions/booksy.BusinessService" + }, + "type": "array" + }, + "url": { + "description": "The website's own listing path token:\n____. It is the join key\nbetween this API and the web listing.", + "example": "481342_flawless-fades-hair-systems-installations_barber-shop_134763_orlando", + "type": "string" + }, + "website": { + "description": "Public contact links the partner published.", + "type": "string" + } + }, + "type": "object" + }, + "booksy.BusinessLocation": { + "properties": { + "address": { + "description": "Full street address as the partner entered it.", + "example": "127 Allen St, New York, 10002", + "type": "string" + }, + "city": { + "description": "City as the partner entered it.", + "example": "New York", + "type": "string" + }, + "coordinates": { + "$ref": "#/definitions/booksy.Coordinates" + } + }, + "type": "object" + }, + "booksy.BusinessResponse": { + "properties": { + "business": { + "$ref": "#/definitions/booksy.BusinessDetail" + }, + "country": { + "example": "us", + "type": "string" + }, + "legal_footer_visible": { + "description": "True when the market wants the legal footer shown on the profile.", + "type": "boolean" + } + }, + "type": "object" + }, + "booksy.BusinessService": { + "properties": { + "category_name": { + "description": "The menu category label the partner grouped this service under.", + "type": "string" + }, + "description": { + "description": "Description as the partner wrote it. Menu copy only; no client or booking\ndata is involved.", + "type": "string" + }, + "id": { + "example": 3009599, + "type": "integer" + }, + "name": { + "example": "Specialty Haircut", + "type": "string" + }, + "online_service": { + "description": "Online and travelling flags are the marketplace's own service attributes.", + "example": false, + "type": "boolean" + }, + "price": { + "description": "Price of the cheapest variant and the app's formatted price line.", + "example": 38, + "type": "number" + }, + "service_price": { + "example": "$38.00", + "type": "string" + }, + "traveling_service": { + "example": false, + "type": "boolean" + }, + "treatment_id": { + "description": "The treatment id this service is filed under, when the partner set one.\nPass it to booksy-businesses as treatment.", + "example": 363, + "type": "integer" + }, + "treatment_name": { + "example": "Male Haircut", + "type": "string" + }, + "variants": { + "description": "Price and duration variants as the app lists them.", + "items": { + "$ref": "#/definitions/booksy.ServiceVariant" + }, + "type": "array" + } + }, + "type": "object" + }, + "booksy.BusinessSummary": { + "properties": { + "accept_booksy_gift_cards": { + "example": false, + "type": "boolean" + }, + "accept_booksy_pay": { + "example": false, + "type": "boolean" + }, + "best_of_booksy_badge": { + "description": "Booksy's own badge label, when the business carries one.", + "example": "Booksy Recommended", + "type": "string" + }, + "cover_image": { + "description": "Cover photo and logo, when the business has them. Image arrays are not\nreturned; these are the first usable URL of each kind.", + "type": "string" + }, + "distance": { + "description": "Distance in metres from the requested location, when the server computed\none. Null on queries that carry no geographic origin.", + "example": 1542, + "type": "number" + }, + "has_online_services": { + "example": false, + "type": "boolean" + }, + "has_online_vouchers": { + "example": true, + "type": "boolean" + }, + "id": { + "example": 481342, + "type": "integer" + }, + "is_recommended": { + "example": false, + "type": "boolean" + }, + "location": { + "allOf": [ + { + "$ref": "#/definitions/booksy.BusinessLocation" + } + ], + "description": "Address and city." + }, + "logo_image": { + "type": "string" + }, + "low_availability": { + "description": "Availability hints the app shows as badges. They are the marketplace's own\nflags, not a bookable slot.", + "example": false, + "type": "boolean" + }, + "max_discount_rate": { + "example": 0, + "type": "integer" + }, + "name": { + "description": "Business name as the partner entered it, including any emoji.", + "example": "Flawless Fades & Hair Systems Installations", + "type": "string" + }, + "primary_category": { + "description": "Top-level category id of the business. Compare it with the requested\ncategory: a category filter matches the category tree, so a child id can\nmatch a parent's primary_category.", + "example": 6, + "type": "integer" + }, + "promoted": { + "description": "Paid placement flags and disclosure labels.", + "example": true, + "type": "boolean" + }, + "reviews_count": { + "description": "Aggregate review counters. Review text and reviewer identities are never\nreturned.", + "example": 423, + "type": "integer" + }, + "reviews_rank": { + "example": 4.955082742316785, + "type": "number" + }, + "reviews_stars": { + "example": 5, + "type": "integer" + }, + "score": { + "description": "The listing's own ranking score. Relative to the query, not a rating.", + "example": 12065.132, + "type": "number" + } + }, + "type": "object" + }, + "booksy.BusinessesResponse": { + "properties": { + "applied_treatment_id": { + "description": "The treatment id the upstream echoed on a treatment-filtered listing.", + "example": 363, + "type": "integer" + }, + "businesses": { + "items": { + "$ref": "#/definitions/booksy.BusinessSummary" + }, + "type": "array" + }, + "category_id": { + "description": "The filters actually sent, echoed so a caller can tell which narrowing was\napplied.", + "example": 6, + "type": "integer" + }, + "country": { + "example": "us", + "type": "string" + }, + "has_next_page": { + "description": "True when this page was full, which is the only \"more pages\" signal the\nupstream offers. A past-end page is empty with has_next_page=false.", + "example": true, + "type": "boolean" + }, + "location": { + "allOf": [ + { + "$ref": "#/definitions/booksy.LocationDetails" + } + ], + "description": "The geo node the server resolved. Read this instead of assuming\nlocation_name was applied: an unknown name silently resolves to the\ncountry node." + }, + "location_id": { + "description": "The location inputs the caller supplied, echoed unchanged.", + "example": 30067, + "type": "integer" + }, + "location_name": { + "example": "New York City", + "type": "string" + }, + "page": { + "example": 1, + "type": "integer" + }, + "page_size": { + "example": 20, + "type": "integer" + }, + "promoted_labels": { + "allOf": [ + { + "$ref": "#/definitions/booksy.PromotedLabels" + } + ], + "description": "Paid-placement disclosure text for this market." + }, + "query": { + "example": "braids", + "type": "string" + }, + "total": { + "description": "The marketplace's total match count. It saturates at 10000, so\ntotal_capped reports when the number is a ceiling rather than an exact\ncount.", + "example": 647, + "type": "integer" + }, + "total_capped": { + "example": false, + "type": "boolean" + }, + "treatment_id": { + "example": 0, + "type": "integer" + } + }, + "type": "object" + }, + "booksy.CategoriesResponse": { + "properties": { + "categories": { + "description": "The complete top-level category enum for this market, in the upstream's own\norder.", + "items": { + "$ref": "#/definitions/booksy.Category" + }, + "type": "array" + }, + "country": { + "example": "us", + "type": "string" + } + }, + "type": "object" + }, + "booksy.Category": { + "properties": { + "icon": { + "type": "string" + }, + "id": { + "example": 6, + "type": "integer" + }, + "name": { + "example": "Barber", + "type": "string" + } + }, + "type": "object" + }, + "booksy.Coordinates": { + "properties": { + "latitude": { + "example": 40.712784, + "type": "number" + }, + "longitude": { + "example": -74.005941, + "type": "number" + } + }, + "type": "object" + }, + "booksy.LocationDetails": { + "properties": { + "businesses_count": { + "description": "The node's own business count as the upstream reports it, when present.", + "example": 135, + "type": "integer" + }, + "child_ids": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "full_name": { + "description": "Fully qualified name, e.g. \"New York, NY\".", + "example": "New York, NY", + "type": "string" + }, + "id": { + "example": 30067, + "type": "integer" + }, + "latitude": { + "example": 40.712784, + "type": "number" + }, + "longitude": { + "example": -74.005941, + "type": "number" + }, + "name": { + "description": "Display name, e.g. \"New York City\".", + "example": "New York City", + "type": "string" + }, + "parent_ids": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "slug": { + "example": "new-york-city", + "type": "string" + }, + "type": { + "description": "Node type: country, state, county, metropolis, city or zip. A geo search\nresolves to country because it filters by distance instead of resolving a\ncity.", + "example": "city", + "type": "string" + } + }, + "type": "object" + }, + "booksy.OpenHour": { + "properties": { + "day_of_week": { + "example": 1, + "type": "integer" + }, + "open_from": { + "example": "09:00", + "type": "string" + }, + "open_till": { + "example": "19:00", + "type": "string" + } + }, + "type": "object" + }, + "booksy.PromotedLabels": { + "properties": { + "promoted_hint": { + "type": "string" + }, + "promoted_label": { + "example": "Promoted", + "type": "string" + }, + "recommended_hint": { + "type": "string" + }, + "recommended_label": { + "example": "Booksy Recommended", + "type": "string" + } + }, + "type": "object" + }, + "booksy.Region": { + "properties": { + "full_name": { + "example": "Orlando, FL", + "type": "string" + }, + "id": { + "example": 134763, + "type": "integer" + }, + "latitude": { + "example": 28.4943825, + "type": "number" + }, + "longitude": { + "example": -81.3755824707769, + "type": "number" + }, + "name": { + "example": "Orlando", + "type": "string" + }, + "slug": { + "example": "orlando", + "type": "string" + }, + "type": { + "example": "city", + "type": "string" + } + }, + "type": "object" + }, + "booksy.ServiceCategory": { + "properties": { + "id": { + "example": 214180, + "type": "integer" + }, + "name": { + "example": "Popular Services", + "type": "string" + }, + "order": { + "example": 1, + "type": "integer" + }, + "services": { + "items": { + "$ref": "#/definitions/booksy.BusinessService" + }, + "type": "array" + } + }, + "type": "object" + }, + "booksy.ServiceVariant": { + "properties": { + "duration": { + "example": 30, + "type": "integer" + }, + "id": { + "example": 12704177, + "type": "integer" + }, + "price": { + "example": 38, + "type": "number" + }, + "service_price": { + "description": "Formatted price as the app prints it, including any \"+\" marker.", + "example": "$38.00", + "type": "string" + }, + "type": { + "example": "S", + "type": "string" + } + }, + "type": "object" + }, + "booksy.SuggestedBusiness": { + "properties": { + "address": { + "example": "Old kings rd, Jacksonville, 32257", + "type": "string" + }, + "id": { + "example": 288033, + "type": "integer" + }, + "is_b_listing": { + "description": "True when the record is a bare listing rather than a full profile.", + "example": true, + "type": "boolean" + }, + "name": { + "example": "Haircut", + "type": "string" + }, + "slug": { + "example": "haircut", + "type": "string" + }, + "url": { + "description": "The website's own listing path token.", + "example": "288033_haircut_barber-shop_15697_jacksonville", + "type": "string" + } + }, + "type": "object" + }, + "booksy.Suggestion": { + "properties": { + "business": { + "allOf": [ + { + "$ref": "#/definitions/booksy.SuggestedBusiness" + } + ], + "description": "Present when object_type is business." + }, + "label": { + "example": "Male Haircut", + "type": "string" + }, + "object_type": { + "description": "\"treatment\" or \"business\".", + "example": "treatment", + "type": "string" + }, + "treatment": { + "allOf": [ + { + "$ref": "#/definitions/booksy.Treatment" + } + ], + "description": "Present when object_type is treatment." + } + }, + "type": "object" + }, + "booksy.Treatment": { + "properties": { + "id": { + "example": 363, + "type": "integer" + }, + "name": { + "example": "Male Haircut", + "type": "string" + }, + "slug": { + "example": "male-haircut", + "type": "string" + }, + "type": { + "description": "The upstream's object type marker, \"T\" for a treatment.", + "example": "T", + "type": "string" + } + }, + "type": "object" + }, + "booksy.TreatmentHintsResponse": { + "properties": { + "business_count": { + "example": 10, + "type": "integer" + }, + "category_suggestion_count": { + "description": "The upstream's own category-suggestion counter, passed through.", + "type": "integer" + }, + "country": { + "example": "us", + "type": "string" + }, + "query": { + "example": "haircut", + "type": "string" + }, + "query_driven": { + "description": "Always true, and stated so a caller cannot mistake this for a taxonomy: the\nupstream route is query-driven, so a query returns the treatments and\nbusinesses it matches, never the complete treatment id space.", + "example": true, + "type": "boolean" + }, + "suggestions": { + "description": "The hints themselves, in the upstream's order.", + "items": { + "$ref": "#/definitions/booksy.Suggestion" + }, + "type": "array" + }, + "treatment_count": { + "description": "How many of the suggestions are treatments. The rest are businesses.", + "example": 6, + "type": "integer" + } + }, + "type": "object" + }, + "booksy.businessResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/booksy.BusinessResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "booksy.businessesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/booksy.BusinessesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "booksy.categoriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/booksy.CategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "booksy.treatmentHintsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/booksy.TreatmentHintsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, "boots.Facet": { "properties": { "key": { @@ -29600,6 +33650,842 @@ }, "type": "object" }, + "bringatrailer.Auction": { + "properties": { + "categories": { + "items": { + "type": "string" + }, + "type": "array" + }, + "comments": { + "type": "integer" + }, + "country": { + "type": "string" + }, + "country_code": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "ends_at": { + "type": "string" + }, + "era": { + "type": "string" + }, + "excerpt": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "model_ids": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "no_reserve": { + "type": "boolean" + }, + "premium": { + "type": "boolean" + }, + "price": { + "type": "integer" + }, + "price_text": { + "type": "string" + }, + "repeat": { + "type": "boolean" + }, + "result_text": { + "type": "string" + }, + "status": { + "type": "string" + }, + "thumbnail_url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + }, + "views": { + "type": "integer" + }, + "watchers": { + "type": "integer" + }, + "year": { + "type": "integer" + } + }, + "type": "object" + }, + "bringatrailer.BidEvent": { + "properties": { + "amount": { + "type": "integer" + }, + "at": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "ends_at": { + "type": "string" + }, + "extended": { + "type": "boolean" + } + }, + "type": "object" + }, + "bringatrailer.Choice": { + "properties": { + "id": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "bringatrailer.FiltersResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/bringatrailer.Choice" + }, + "type": "array" + }, + "eras": { + "items": { + "$ref": "#/definitions/bringatrailer.Choice" + }, + "type": "array" + }, + "live_ending_within_hours": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "max_bid_presets": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "origins": { + "items": { + "$ref": "#/definitions/bringatrailer.Choice" + }, + "type": "array" + }, + "per_page": { + "properties": { + "default": { + "type": "integer" + }, + "max": { + "type": "integer" + }, + "min": { + "type": "integer" + } + }, + "type": "object" + }, + "recency": { + "items": { + "$ref": "#/definitions/bringatrailer.Choice" + }, + "type": "array" + }, + "regions": { + "items": { + "$ref": "#/definitions/bringatrailer.Region" + }, + "type": "array" + }, + "results": { + "items": { + "$ref": "#/definitions/bringatrailer.Choice" + }, + "type": "array" + }, + "sorts": { + "items": { + "$ref": "#/definitions/bringatrailer.Choice" + }, + "type": "array" + }, + "types": { + "items": { + "$ref": "#/definitions/bringatrailer.Choice" + }, + "type": "array" + } + }, + "type": "object" + }, + "bringatrailer.ListingResponse": { + "properties": { + "bid_history": { + "description": "BidHistory is set only when bid_history was requested. BidHistoryComplete\nis true when it holds as many bids as the page's own bid count.", + "items": { + "$ref": "#/definitions/bringatrailer.BidEvent" + }, + "type": "array" + }, + "bid_history_complete": { + "type": "boolean" + }, + "bids": { + "type": "integer" + }, + "chassis": { + "type": "string" + }, + "comments": { + "type": "integer" + }, + "country": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "description": { + "type": "string" + }, + "details": { + "items": { + "type": "string" + }, + "type": "array" + }, + "ends_at": { + "type": "string" + }, + "engine": { + "type": "string" + }, + "exterior_color": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "image_url": { + "type": "string" + }, + "interior": { + "type": "string" + }, + "location": { + "type": "string" + }, + "lot_number": { + "type": "string" + }, + "mileage": { + "type": "integer" + }, + "mileage_rounded": { + "type": "boolean" + }, + "mileage_text": { + "type": "string" + }, + "mileage_unit": { + "type": "string" + }, + "mileage_unknown": { + "type": "boolean" + }, + "no_reserve": { + "type": "boolean" + }, + "price": { + "type": "integer" + }, + "reserve_not_met": { + "type": "boolean" + }, + "result_text": { + "type": "string" + }, + "seller": { + "type": "string" + }, + "seller_url": { + "type": "string" + }, + "status": { + "type": "string" + }, + "title": { + "type": "string" + }, + "transmission": { + "type": "string" + }, + "url": { + "type": "string" + }, + "views": { + "type": "integer" + }, + "watchers": { + "type": "integer" + } + }, + "type": "object" + }, + "bringatrailer.LiveResponse": { + "properties": { + "auctions": { + "items": { + "$ref": "#/definitions/bringatrailer.Auction" + }, + "type": "array" + }, + "live_total": { + "type": "integer" + }, + "page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "bringatrailer.Make": { + "properties": { + "models": { + "items": { + "$ref": "#/definitions/bringatrailer.Model" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "bringatrailer.MakesResponse": { + "properties": { + "makes": { + "items": { + "$ref": "#/definitions/bringatrailer.Make" + }, + "type": "array" + }, + "total_makes": { + "type": "integer" + }, + "total_models": { + "type": "integer" + } + }, + "type": "object" + }, + "bringatrailer.Model": { + "properties": { + "model_id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "bringatrailer.PriceHistoryResponse": { + "properties": { + "currency": { + "type": "string" + }, + "make": { + "type": "string" + }, + "model_id": { + "type": "integer" + }, + "points": { + "items": { + "$ref": "#/definitions/bringatrailer.PricePoint" + }, + "type": "array" + }, + "reserve_not_met": { + "$ref": "#/definitions/bringatrailer.PriceSummary" + }, + "scope": { + "type": "string" + }, + "sold": { + "$ref": "#/definitions/bringatrailer.PriceSummary" + }, + "sold_by_year": { + "items": { + "$ref": "#/definitions/bringatrailer.YearSummary" + }, + "type": "array" + }, + "truncated": { + "type": "boolean" + }, + "window_end": { + "type": "string" + }, + "window_start": { + "type": "string" + } + }, + "type": "object" + }, + "bringatrailer.PricePoint": { + "properties": { + "amount": { + "type": "integer" + }, + "date": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "status": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "bringatrailer.PriceSummary": { + "properties": { + "count": { + "type": "integer" + }, + "max": { + "type": "integer" + }, + "mean": { + "type": "integer" + }, + "median": { + "type": "integer" + }, + "min": { + "type": "integer" + } + }, + "type": "object" + }, + "bringatrailer.Region": { + "properties": { + "countries": { + "items": { + "$ref": "#/definitions/bringatrailer.Choice" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "bringatrailer.ResultsResponse": { + "properties": { + "auctions": { + "items": { + "$ref": "#/definitions/bringatrailer.Auction" + }, + "type": "array" + }, + "page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + } + }, + "type": "object" + }, + "bringatrailer.SearchEvent": { + "properties": { + "date_text": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "bringatrailer.SearchModel": { + "properties": { + "image_url": { + "type": "string" + }, + "make": { + "type": "string" + }, + "model": { + "type": "string" + }, + "path": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "bringatrailer.SearchRedirect": { + "properties": { + "kind": { + "type": "string" + }, + "path": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "bringatrailer.SearchResponse": { + "properties": { + "events": { + "items": { + "$ref": "#/definitions/bringatrailer.SearchEvent" + }, + "type": "array" + }, + "live_listings": { + "items": { + "$ref": "#/definitions/bringatrailer.Auction" + }, + "type": "array" + }, + "live_listings_truncated": { + "type": "boolean" + }, + "models": { + "items": { + "$ref": "#/definitions/bringatrailer.SearchModel" + }, + "type": "array" + }, + "page": { + "type": "integer" + }, + "per_page": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "phrase": { + "type": "boolean" + }, + "previous_auctions": { + "items": { + "$ref": "#/definitions/bringatrailer.Auction" + }, + "type": "array" + }, + "query": { + "type": "string" + }, + "redirect": { + "$ref": "#/definitions/bringatrailer.SearchRedirect" + }, + "section": { + "type": "string" + }, + "stories": { + "items": { + "$ref": "#/definitions/bringatrailer.SearchStory" + }, + "type": "array" + }, + "total": { + "type": "integer" + }, + "totals": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + } + }, + "type": "object" + }, + "bringatrailer.SearchStory": { + "properties": { + "image_url": { + "type": "string" + }, + "published_date": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "bringatrailer.SuggestResponse": { + "properties": { + "suggestions": { + "items": { + "$ref": "#/definitions/bringatrailer.Suggestion" + }, + "type": "array" + }, + "term": { + "type": "string" + }, + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "bringatrailer.Suggestion": { + "properties": { + "id": { + "description": "ID is the decade id for an era row and the category id for a category row,\nthe values the era and category parameters accept. Make and model rows\nhave none: use Title as the make parameter or look the model up in makes.", + "type": "string" + }, + "path": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "bringatrailer.YearSummary": { + "properties": { + "count": { + "type": "integer" + }, + "max": { + "type": "integer" + }, + "mean": { + "type": "integer" + }, + "median": { + "type": "integer" + }, + "min": { + "type": "integer" + }, + "year": { + "type": "integer" + } + }, + "type": "object" + }, + "bringatrailer.filtersResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/bringatrailer.FiltersResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "bringatrailer.listingResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/bringatrailer.ListingResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "bringatrailer.liveResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/bringatrailer.LiveResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "bringatrailer.makesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/bringatrailer.MakesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "bringatrailer.priceHistoryResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/bringatrailer.PriceHistoryResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "bringatrailer.resultsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/bringatrailer.ResultsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "bringatrailer.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/bringatrailer.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "bringatrailer.suggestResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/bringatrailer.SuggestResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, "brisbanetimes.ArticleResponse": { "properties": { "authors": { @@ -31090,6 +35976,462 @@ }, "type": "object" }, + "cardmarket.CatalogCategoriesResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/cardmarket.CatalogCategory" + }, + "type": "array" + }, + "category_total": { + "type": "integer" + }, + "created_at": { + "type": "string" + }, + "expansion_total": { + "type": "integer" + }, + "expansions": { + "items": { + "$ref": "#/definitions/cardmarket.CatalogExpansion" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "game_id": { + "type": "integer" + }, + "kind": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "stale": { + "type": "boolean" + }, + "version": { + "type": "integer" + } + }, + "type": "object" + }, + "cardmarket.CatalogCategory": { + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "product_count": { + "type": "integer" + } + }, + "type": "object" + }, + "cardmarket.CatalogExpansion": { + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "product_count": { + "type": "integer" + } + }, + "type": "object" + }, + "cardmarket.CatalogResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/cardmarket.CatalogCategory" + }, + "type": "array" + }, + "category_id": { + "type": "integer" + }, + "created_at": { + "type": "string" + }, + "empty_state": { + "type": "string" + }, + "expansion_id": { + "type": "integer" + }, + "expansions": { + "items": { + "$ref": "#/definitions/cardmarket.CatalogExpansion" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "game_id": { + "type": "integer" + }, + "items": { + "items": { + "$ref": "#/definitions/cardmarket.Product" + }, + "type": "array" + }, + "kind": { + "type": "string" + }, + "limit": { + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "q": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "stale": { + "type": "boolean" + }, + "total": { + "type": "integer" + }, + "version": { + "type": "integer" + } + }, + "type": "object" + }, + "cardmarket.Game": { + "properties": { + "catalog_available": { + "type": "boolean" + }, + "catalog_kinds": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "type": "integer" + }, + "price_guide_available": { + "type": "boolean" + } + }, + "type": "object" + }, + "cardmarket.GamesResponse": { + "properties": { + "fetched_at": { + "type": "string" + }, + "games": { + "items": { + "$ref": "#/definitions/cardmarket.Game" + }, + "type": "array" + }, + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "cardmarket.PriceGuideCategoriesResponse": { + "properties": { + "category_ids": { + "items": { + "$ref": "#/definitions/cardmarket.PriceGuideCategory" + }, + "type": "array" + }, + "created_at": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "game_id": { + "type": "integer" + }, + "kind": { + "type": "string" + }, + "price_redistribution_policy_status": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "stale": { + "type": "boolean" + }, + "total": { + "type": "integer" + }, + "version": { + "type": "integer" + } + }, + "type": "object" + }, + "cardmarket.PriceGuideCategory": { + "properties": { + "id": { + "type": "integer" + }, + "item_count": { + "type": "integer" + } + }, + "type": "object" + }, + "cardmarket.PriceGuideEntry": { + "properties": { + "average": { + "type": "number" + }, + "average_1d": { + "type": "number" + }, + "average_1d_foil": { + "type": "number" + }, + "average_1d_holo": { + "type": "number" + }, + "average_30d": { + "type": "number" + }, + "average_30d_foil": { + "type": "number" + }, + "average_30d_holo": { + "type": "number" + }, + "average_7d": { + "type": "number" + }, + "average_7d_foil": { + "type": "number" + }, + "average_7d_holo": { + "type": "number" + }, + "average_foil": { + "type": "number" + }, + "average_holo": { + "type": "number" + }, + "category_id": { + "type": "integer" + }, + "low": { + "type": "number" + }, + "low_foil": { + "type": "number" + }, + "low_holo": { + "type": "number" + }, + "product_id": { + "type": "integer" + }, + "trend": { + "type": "number" + }, + "trend_foil": { + "type": "number" + }, + "trend_holo": { + "type": "number" + } + }, + "type": "object" + }, + "cardmarket.PriceGuideResponse": { + "properties": { + "category_id": { + "type": "integer" + }, + "category_ids": { + "items": { + "$ref": "#/definitions/cardmarket.PriceGuideCategory" + }, + "type": "array" + }, + "created_at": { + "type": "string" + }, + "empty_state": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "game_id": { + "type": "integer" + }, + "items": { + "items": { + "$ref": "#/definitions/cardmarket.PriceGuideEntry" + }, + "type": "array" + }, + "kind": { + "type": "string" + }, + "limit": { + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "price_redistribution_policy_status": { + "type": "string" + }, + "product_id": { + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "stale": { + "type": "boolean" + }, + "total": { + "type": "integer" + }, + "version": { + "type": "integer" + } + }, + "type": "object" + }, + "cardmarket.Product": { + "properties": { + "category": { + "type": "string" + }, + "category_id": { + "type": "integer" + }, + "date_added": { + "type": "string" + }, + "expansion": { + "type": "string" + }, + "expansion_id": { + "type": "integer" + }, + "id": { + "type": "integer" + }, + "metacard_id": { + "type": "integer" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "cardmarket.catalogCategoriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/cardmarket.CatalogCategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "cardmarket.catalogResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/cardmarket.CatalogResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "cardmarket.gamesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/cardmarket.GamesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "cardmarket.priceGuideCategoriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/cardmarket.PriceGuideCategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "cardmarket.priceGuideResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/cardmarket.PriceGuideResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, "carmax.Efficiency": { "properties": { "battery_range_miles": { @@ -43286,381 +48628,263 @@ }, "type": "object" }, - "cricinfo.BowlingInning": { + "cricbuzz.ArchiveYear": { "properties": { - "maidens": { - "type": "integer" - }, - "overs": { - "type": "number" - }, - "player": { + "url": { "type": "string" }, - "runs": { - "type": "integer" - }, - "wickets": { + "year": { "type": "integer" } }, "type": "object" }, - "cricinfo.CalendarEvent": { + "cricbuzz.ArchivedSeries": { "properties": { - "date": { + "category": { "type": "string" }, - "name": { + "date_range": { "type": "string" }, - "series": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "cricinfo.CalendarResponse": { - "properties": { - "count": { + "id": { "type": "integer" }, - "events": { - "items": { - "$ref": "#/definitions/cricinfo.CalendarEvent" - }, - "type": "array" - }, - "fetched_at": { + "name": { "type": "string" }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "cricinfo.CommentaryEntry": { + "cricbuzz.ArchivesResponse": { "properties": { - "ball": { - "type": "integer" - }, - "batsman_runs": { - "type": "integer" - }, - "dismissal": { - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/cricbuzz.MatchCategory" + }, + "type": "array" }, - "id": { + "category": { "type": "string" }, - "inning": { - "type": "integer" - }, - "is_boundary": { - "type": "boolean" - }, - "is_wicket": { - "type": "boolean" - }, - "over": { - "type": "number" - }, - "runs": { + "current_year": { "type": "integer" }, - "text": { + "empty_state": { "type": "string" }, - "timestamp": { + "fetched_at": { "type": "string" }, - "title": { + "q": { "type": "string" }, - "total_inning_runs": { - "type": "integer" - }, - "total_inning_wickets": { - "type": "integer" - } - }, - "type": "object" - }, - "cricinfo.CommentaryResponse": { - "properties": { - "count": { + "selected_year": { "type": "integer" }, - "entries": { + "series": { "items": { - "$ref": "#/definitions/cricinfo.CommentaryEntry" + "$ref": "#/definitions/cricbuzz.ArchivedSeries" }, "type": "array" }, - "fetched_at": { + "source_url": { "type": "string" }, - "match": { - "$ref": "#/definitions/cricinfo.MatchSummary" + "stale": { + "type": "boolean" }, - "source_url": { - "type": "string" + "total": { + "type": "integer" + }, + "years": { + "items": { + "$ref": "#/definitions/cricbuzz.ArchiveYear" + }, + "type": "array" } }, "type": "object" }, - "cricinfo.GroundCountry": { + "cricbuzz.AuctionCurrency": { "properties": { - "abbreviation": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { + "label": { "type": "string" }, - "short_name": { + "symbol": { "type": "string" }, - "slug": { + "value": { "type": "string" } }, "type": "object" }, - "cricinfo.GroundsResponse": { + "cricbuzz.AuctionFilter": { "properties": { - "count": { - "type": "integer" + "input_type": { + "type": "string" }, - "countries": { - "items": { - "$ref": "#/definitions/cricinfo.GroundCountry" - }, - "type": "array" + "key": { + "type": "string" }, - "fetched_at": { + "label": { "type": "string" }, - "grounds": { + "options": { "items": { - "$ref": "#/definitions/cricinfo.Venue" + "$ref": "#/definitions/cricbuzz.AuctionFilterOption" }, "type": "array" - }, - "source_url": { - "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "cricinfo.Inning": { + "cricbuzz.AuctionFilterOption": { "properties": { - "batters": { - "items": { - "$ref": "#/definitions/cricinfo.PlayerInning" - }, - "type": "array" - }, - "bowlers": { - "items": { - "$ref": "#/definitions/cricinfo.BowlingInning" - }, - "type": "array" - }, - "number": { - "type": "integer" - }, - "overs": { - "type": "number" - }, - "runs": { + "image_id": { "type": "integer" }, - "team": { + "label": { "type": "string" }, - "wickets": { - "type": "integer" + "value": { + "type": "string" } }, "type": "object" }, - "cricinfo.LiveMatchesResponse": { + "cricbuzz.AuctionInfoBlock": { "properties": { - "count": { - "type": "integer" + "label": { + "type": "string" }, - "fetched_at": { + "text": { "type": "string" }, - "matches": { + "values": { "items": { - "$ref": "#/definitions/cricinfo.MatchSummary" + "type": "string" }, "type": "array" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "cricinfo.MatchResponse": { + "cricbuzz.AuctionInfoResponse": { "properties": { - "end_date": { - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "format": { - "type": "string" - }, - "id": { + "auction_title": { "type": "string" }, - "innings": { + "blocks": { "items": { - "$ref": "#/definitions/cricinfo.Inning" + "$ref": "#/definitions/cricbuzz.AuctionInfoBlock" }, "type": "array" }, - "series": { - "$ref": "#/definitions/cricinfo.Series" - }, - "start_date": { - "type": "string" - }, - "state": { + "fetched_at": { "type": "string" }, - "status": { + "page_title": { "type": "string" }, - "status_text": { + "season": { "type": "string" }, - "teams": { - "items": { - "$ref": "#/definitions/cricinfo.TeamScore" - }, - "type": "array" - }, - "title": { + "source_url": { "type": "string" }, - "url": { + "tournament": { "type": "string" }, - "venue": { + "year": { "type": "string" } }, "type": "object" }, - "cricinfo.MatchSummary": { + "cricbuzz.AuctionLiveBlogResponse": { "properties": { - "format": { - "type": "string" - }, - "id": { - "type": "string" - }, - "series": { - "$ref": "#/definitions/cricinfo.Series" - }, - "start_date": { - "type": "string" - }, - "state": { + "fetched_at": { "type": "string" }, - "status": { + "season": { "type": "string" }, - "status_text": { + "source_url": { "type": "string" }, - "teams": { - "items": { - "$ref": "#/definitions/cricinfo.TeamScore" - }, - "type": "array" + "story": { + "$ref": "#/definitions/cricbuzz.CricbuzzNewsStory" }, - "title": { + "tournament": { "type": "string" }, - "url": { + "year": { "type": "string" } }, "type": "object" }, - "cricinfo.NewsResponse": { + "cricbuzz.AuctionLiveResponse": { "properties": { - "count": { - "type": "integer" + "auction_title": { + "type": "string" }, - "fetched_at": { + "currency": { "type": "string" }, - "source_url": { + "current_status": { "type": "string" }, - "stories": { + "featured_players": { "items": { - "$ref": "#/definitions/cricinfo.NewsStory" + "$ref": "#/definitions/cricbuzz.AuctionPlayer" }, "type": "array" }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "cricinfo.NewsStory": { - "properties": { - "byline": { + "fetched_at": { "type": "string" }, - "genre": { - "type": "string" + "returned_count": { + "type": "integer" }, - "id": { + "season": { "type": "string" }, - "image_url": { + "source_url": { "type": "string" }, - "live": { - "type": "boolean" - }, - "live_blog": { - "type": "boolean" - }, - "match_id": { + "state": { "type": "string" }, - "modified_at": { + "tournament": { "type": "string" }, - "published_at": { + "year": { + "type": "string" + } + }, + "type": "object" + }, + "cricbuzz.AuctionNewsItem": { + "properties": { + "image_alt": { "type": "string" }, - "series_id": { + "image_id": { + "type": "integer" + }, + "slug": { "type": "string" }, - "summary": { + "story_id": { + "type": "integer" + }, + "time_ago": { "type": "string" }, "title": { @@ -43672,610 +48896,734 @@ }, "type": "object" }, - "cricinfo.Photo": { + "cricbuzz.AuctionNewsResponse": { "properties": { - "caption": { + "empty_state": { + "description": "EmptyState is populated only for Cricbuzz's explicit No News Available state.", + "enum": [ + "no_results" + ], "type": "string" }, - "credit": { + "fetched_at": { "type": "string" }, - "date_taken": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/cricbuzz.AuctionNewsItem" + }, + "type": "array" }, - "height": { + "returned_count": { "type": "integer" }, - "id": { + "season": { "type": "string" }, - "long_caption": { + "source_url": { "type": "string" }, - "peer_urls": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "topic": { + "type": "string" }, - "url": { + "tournament": { "type": "string" }, - "width": { - "type": "integer" + "year": { + "type": "string" } }, "type": "object" }, - "cricinfo.PhotosResponse": { + "cricbuzz.AuctionOptionsResponse": { "properties": { - "count": { - "type": "integer" - }, "fetched_at": { "type": "string" }, - "photos": { + "filters": { "items": { - "$ref": "#/definitions/cricinfo.Photo" + "$ref": "#/definitions/cricbuzz.AuctionFilter" }, "type": "array" }, + "season": { + "type": "string" + }, + "sort": { + "$ref": "#/definitions/cricbuzz.AuctionSortFilter" + }, "source_url": { "type": "string" }, - "total": { - "type": "integer" + "stale": { + "type": "boolean" + }, + "tournament": { + "type": "string" + }, + "year": { + "type": "string" } }, "type": "object" }, - "cricinfo.PlayerInning": { + "cricbuzz.AuctionPlayer": { "properties": { - "balls": { - "type": "integer" + "auction_price": { + "type": "string" }, - "fours": { - "type": "integer" + "auction_remarks": { + "type": "string" }, - "out": { - "type": "boolean" + "base_price": { + "type": "string" }, - "player": { + "capped_status": { "type": "string" }, - "runs": { + "country": { + "type": "string" + }, + "country_id": { "type": "integer" }, - "sixes": { + "id": { "type": "integer" - } - }, - "type": "object" - }, - "cricinfo.RSSItem": { - "properties": { - "description": { + }, + "name": { "type": "string" }, - "id": { + "player_id": { + "type": "integer" + }, + "player_image_id": { + "type": "integer" + }, + "player_overseas": { + "type": "boolean" + }, + "role": { "type": "string" }, - "image_url": { + "season": { "type": "string" }, - "published_at": { + "status": { "type": "string" }, - "title": { + "team": { "type": "string" }, - "url": { + "team_id": { + "type": "integer" + }, + "team_image_id": { + "type": "integer" + }, + "updated_time": { "type": "string" } }, "type": "object" }, - "cricinfo.RSSResponse": { + "cricbuzz.AuctionPlayerDetailResponse": { "properties": { - "count": { - "type": "integer" + "auction_earnings": { + "items": { + "$ref": "#/definitions/cricbuzz.AuctionPlayerEarning" + }, + "type": "array" }, - "description": { + "currency": { + "type": "string" + }, + "earnings_disclaimer": { "type": "string" }, "fetched_at": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/cricinfo.RSSItem" - }, - "type": "array" + "player": { + "$ref": "#/definitions/cricbuzz.AuctionPlayer" + }, + "season": { + "type": "string" }, "source_url": { "type": "string" }, - "title": { + "tournament": { + "type": "string" + }, + "year": { "type": "string" } }, "type": "object" }, - "cricinfo.RankingEntry": { + "cricbuzz.AuctionPlayerEarning": { "properties": { - "country": { - "type": "string" - }, - "format": { - "type": "string" - }, - "matches": { - "type": "integer" - }, - "name": { + "auction_price": { "type": "string" }, - "player_id": { + "team": { "type": "string" }, - "points": { + "team_id": { "type": "integer" }, - "rank": { + "team_image_id": { "type": "integer" }, - "rating": { + "year": { "type": "integer" - }, - "team_id": { - "type": "string" } }, "type": "object" }, - "cricinfo.RankingsResponse": { + "cricbuzz.AuctionPlayerSearchResponse": { "properties": { + "auction_title": { + "type": "string" + }, "fetched_at": { "type": "string" }, - "rankings": { + "items": { "items": { - "$ref": "#/definitions/cricinfo.RankingEntry" + "$ref": "#/definitions/cricbuzz.AuctionPlayer" }, "type": "array" - } - }, - "type": "object" - }, - "cricinfo.RecordCategory": { - "properties": { - "id": { + }, + "live_blog_id": { "type": "integer" }, - "long_name": { + "q": { "type": "string" }, - "name": { + "returned_count": { + "type": "integer" + }, + "season": { "type": "string" }, - "slug": { + "source_url": { + "type": "string" + }, + "tournament": { + "type": "string" + }, + "year": { "type": "string" } }, "type": "object" }, - "cricinfo.RecordClass": { + "cricbuzz.AuctionResultsResponse": { "properties": { - "id": { - "type": "integer" + "auction_title": { + "type": "string" }, - "long_name": { + "currency": { "type": "string" }, - "multiple_class": { + "current_status": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/cricbuzz.AuctionPlayer" + }, + "type": "array" + }, + "page": { "type": "integer" }, - "name": { + "returned_count": { + "type": "integer" + }, + "season": { "type": "string" }, - "slug": { + "selection": { + "$ref": "#/definitions/cricbuzz.AuctionResultsSelection" + }, + "source_url": { "type": "string" }, - "type": { + "tournament": { + "type": "string" + }, + "year": { "type": "string" } }, "type": "object" }, - "cricinfo.RecordEntity": { + "cricbuzz.AuctionResultsSelection": { "properties": { - "id": { + "cap": { "type": "string" }, - "name": { - "type": "string" + "country_ids": { + "items": { + "type": "string" + }, + "type": "array" }, - "short_name": { + "role": { "type": "string" }, - "slug": { - "type": "string" - } - }, - "type": "object" - }, - "cricinfo.RecordEntityGroup": { - "properties": { - "entities": { + "sort": { + "$ref": "#/definitions/cricbuzz.AuctionSortOption" + }, + "statuses": { "items": { - "$ref": "#/definitions/cricinfo.RecordEntity" + "type": "string" }, "type": "array" }, - "type_id": { - "type": "integer" + "team_id": { + "type": "string" } }, "type": "object" }, - "cricinfo.RecordsIndexResponse": { + "cricbuzz.AuctionSeason": { "properties": { - "ask_suggestions": { + "currencies": { "items": { "type": "string" }, "type": "array" }, - "categories": { - "items": { - "$ref": "#/definitions/cricinfo.RecordCategory" - }, - "type": "array" - }, - "classes": { + "currency_data": { "items": { - "$ref": "#/definitions/cricinfo.RecordClass" + "$ref": "#/definitions/cricbuzz.AuctionCurrency" }, "type": "array" }, - "fetched_at": { + "season": { "type": "string" }, - "groups": { - "items": { - "$ref": "#/definitions/cricinfo.RecordEntityGroup" - }, - "type": "array" + "series_id": { + "type": "integer" }, - "source_url": { + "year": { "type": "string" } }, "type": "object" }, - "cricinfo.RecordsResponse": { + "cricbuzz.AuctionSeasonDefaults": { "properties": { - "class": { - "type": "integer" + "currency": { + "type": "string" }, - "count": { - "type": "integer" + "tournament": { + "type": "string" }, - "fetched_at": { + "year": { "type": "string" + } + }, + "type": "object" + }, + "cricbuzz.AuctionSeasonsResponse": { + "properties": { + "defaults": { + "$ref": "#/definitions/cricbuzz.AuctionSeasonDefaults" }, - "headers": { - "items": { - "type": "string" - }, - "type": "array" + "fetched_at": { + "type": "string" }, - "record": { + "source_url": { "type": "string" }, - "rows": { + "stale": { + "type": "boolean" + }, + "tournaments": { "items": { - "$ref": "#/definitions/cricinfo.StatsRow" + "$ref": "#/definitions/cricbuzz.AuctionTournament" }, "type": "array" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "cricinfo.ScoresResponse": { + "cricbuzz.AuctionSortFilter": { "properties": { - "count": { - "type": "integer" + "key1": { + "type": "string" }, - "fetched_at": { + "key2": { "type": "string" }, - "matches": { + "label": { + "type": "string" + }, + "options": { "items": { - "$ref": "#/definitions/cricinfo.MatchSummary" + "$ref": "#/definitions/cricbuzz.AuctionSortOption" }, "type": "array" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "cricinfo.Series": { + "cricbuzz.AuctionSortOption": { "properties": { - "id": { + "is_default": { + "type": "boolean" + }, + "label": { "type": "string" }, - "name": { + "value1": { "type": "string" }, - "slug": { + "value2": { "type": "string" } }, "type": "object" }, - "cricinfo.SeriesResponse": { + "cricbuzz.AuctionTeamDetailResponse": { "properties": { + "currency": { + "type": "string" + }, "fetched_at": { "type": "string" }, - "matches": { + "groups": { "items": { - "$ref": "#/definitions/cricinfo.MatchSummary" + "$ref": "#/definitions/cricbuzz.AuctionTeamRosterGroup" }, "type": "array" }, - "series": { - "$ref": "#/definitions/cricinfo.Series" + "season": { + "type": "string" }, - "standings": { + "source_url": { + "type": "string" + }, + "team": { + "$ref": "#/definitions/cricbuzz.AuctionTeamSummary" + }, + "total": { + "type": "integer" + }, + "tournament": { + "type": "string" + }, + "year": { + "type": "string" + } + }, + "type": "object" + }, + "cricbuzz.AuctionTeamRosterGroup": { + "properties": { + "players": { "items": { - "$ref": "#/definitions/cricinfo.StandingsEntry" + "$ref": "#/definitions/cricbuzz.AuctionPlayer" }, "type": "array" + }, + "role": { + "type": "string" } }, "type": "object" }, - "cricinfo.Squad": { + "cricbuzz.AuctionTeamSummary": { "properties": { - "announced_at": { + "auction_spend": { "type": "string" }, - "id": { + "full_name": { "type": "string" }, - "modified_at": { - "type": "string" + "image_id": { + "type": "integer" }, - "players": { - "items": { - "$ref": "#/definitions/cricinfo.SquadPlayer" - }, - "type": "array" + "max_overseas_players": { + "type": "integer" }, - "series_id": { - "type": "string" + "max_players": { + "type": "integer" }, - "series_slug": { + "name": { "type": "string" }, - "slug": { + "player_slots_local": { + "type": "integer" + }, + "player_slots_overseas": { + "type": "integer" + }, + "players_bought": { + "type": "integer" + }, + "purse_at_start": { "type": "string" }, - "team_id": { + "purse_remaining": { "type": "string" }, - "team_name": { + "retention_spent": { "type": "string" }, - "team_slug": { + "season": { "type": "string" }, - "title": { + "team_id": { + "type": "integer" + }, + "total_purse": { "type": "string" } }, "type": "object" }, - "cricinfo.SquadPlayer": { + "cricbuzz.AuctionTeamsOptionsResponse": { "properties": { - "headshot_url": { + "fetched_at": { "type": "string" }, - "id": { + "season": { "type": "string" }, - "image_url": { + "sort": { + "$ref": "#/definitions/cricbuzz.AuctionSortFilter" + }, + "source_url": { "type": "string" }, - "is_overseas": { + "stale": { "type": "boolean" }, - "is_withdrawn": { - "type": "boolean" + "teams": { + "items": { + "$ref": "#/definitions/cricbuzz.AuctionTeamSummary" + }, + "type": "array" }, - "long_name": { + "total": { + "type": "integer" + }, + "tournament": { "type": "string" }, - "name": { + "year": { + "type": "string" + } + }, + "type": "object" + }, + "cricbuzz.AuctionTeamsResponse": { + "properties": { + "currency": { "type": "string" }, - "note": { + "fetched_at": { "type": "string" }, - "playing_roles": { + "items": { "items": { - "type": "string" + "$ref": "#/definitions/cricbuzz.AuctionTeamSummary" }, "type": "array" }, - "role": { + "season": { "type": "string" }, - "slug": { + "selection": { + "$ref": "#/definitions/cricbuzz.AuctionSortOption" + }, + "source_url": { + "type": "string" + }, + "total": { + "type": "integer" + }, + "tournament": { + "type": "string" + }, + "year": { "type": "string" } }, "type": "object" }, - "cricinfo.SquadsResponse": { + "cricbuzz.AuctionTournament": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { + "identifier": { "type": "string" }, - "source_url": { + "title": { "type": "string" }, - "squads": { + "years": { "items": { - "$ref": "#/definitions/cricinfo.Squad" + "$ref": "#/definitions/cricbuzz.AuctionSeason" }, "type": "array" - }, - "team": { - "$ref": "#/definitions/cricinfo.TeamInfo" } }, "type": "object" }, - "cricinfo.StandingsEntry": { + "cricbuzz.AuctionUpcomingResponse": { "properties": { - "losses": { - "type": "integer" + "auction_title": { + "type": "string" }, - "net_run_rate": { - "type": "number" + "currency": { + "type": "string" }, - "no_result": { - "type": "integer" + "current_status": { + "type": "string" }, - "played": { - "type": "integer" + "fetched_at": { + "type": "string" }, - "points": { + "items": { + "items": { + "$ref": "#/definitions/cricbuzz.AuctionPlayer" + }, + "type": "array" + }, + "page": { "type": "integer" }, - "position": { + "returned_count": { "type": "integer" }, - "team_id": { + "season": { "type": "string" }, - "team_name": { + "selection": { + "$ref": "#/definitions/cricbuzz.AuctionUpcomingSelection" + }, + "source_url": { "type": "string" }, - "team_slug": { + "tournament": { "type": "string" }, - "wins": { - "type": "integer" + "year": { + "type": "string" } }, "type": "object" }, - "cricinfo.StatsResponse": { + "cricbuzz.AuctionUpcomingSelection": { "properties": { - "class": { - "type": "integer" - }, - "count": { - "type": "integer" - }, - "fetched_at": { + "cap": { "type": "string" }, - "headers": { + "country_ids": { "items": { "type": "string" }, "type": "array" }, - "rows": { - "items": { - "$ref": "#/definitions/cricinfo.StatsRow" - }, - "type": "array" - }, - "source_url": { + "role": { "type": "string" }, - "type": { - "type": "string" + "sort": { + "$ref": "#/definitions/cricbuzz.AuctionSortOption" } }, "type": "object" }, - "cricinfo.StatsRow": { - "additionalProperties": { - "type": "string" - }, - "type": "object" - }, - "cricinfo.StoryBlock": { + "cricbuzz.AuctionVideoItem": { "properties": { - "caption": { + "duration": { "type": "string" }, - "html": { + "image_alt": { "type": "string" }, - "image_url": { + "image_id": { + "type": "integer" + }, + "slug": { "type": "string" }, - "type": { + "time_ago": { "type": "string" }, - "video_id": { + "title": { "type": "string" }, - "video_title": { + "url": { "type": "string" + }, + "video_id": { + "type": "integer" } }, "type": "object" }, - "cricinfo.StoryBlog": { + "cricbuzz.AuctionVideosResponse": { "properties": { - "blocks": { + "empty_state": { + "description": "EmptyState is populated only for Cricbuzz's explicit No Videos Available state.", + "enum": [ + "no_videos" + ], + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "items": { "items": { - "$ref": "#/definitions/cricinfo.StoryBlock" + "$ref": "#/definitions/cricbuzz.AuctionVideoItem" }, "type": "array" }, - "id": { + "returned_count": { + "type": "integer" + }, + "season": { "type": "string" }, - "pinned": { - "type": "boolean" + "source_url": { + "type": "string" }, - "published_at": { + "tournament": { "type": "string" }, - "title": { + "year": { "type": "string" } }, "type": "object" }, - "cricinfo.StoryLink": { + "cricbuzz.CricbuzzNewsAuthor": { "properties": { - "id": { + "image_url": { "type": "string" }, - "title": { + "name": { "type": "string" }, - "type": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "cricbuzz.CricbuzzNewsLink": { + "properties": { + "text": { "type": "string" }, "url": { @@ -44284,2142 +49632,2307 @@ }, "type": "object" }, - "cricinfo.StoryResponse": { + "cricbuzz.CricbuzzNewsStory": { "properties": { - "blocks": { - "items": { - "$ref": "#/definitions/cricinfo.StoryBlock" - }, - "type": "array" + "abstract": { + "type": "string" }, - "blog_entries": { + "authors": { "items": { - "$ref": "#/definitions/cricinfo.StoryBlog" + "$ref": "#/definitions/cricbuzz.CricbuzzNewsAuthor" }, "type": "array" }, - "fetched_at": { + "backstory": { "type": "string" }, - "related": { + "body_html": { + "type": "string" + }, + "body_links": { "items": { - "$ref": "#/definitions/cricinfo.StoryLink" + "$ref": "#/definitions/cricbuzz.CricbuzzNewsLink" }, "type": "array" }, - "source_url": { + "body_text": { "type": "string" }, - "story": { - "$ref": "#/definitions/cricinfo.NewsStory" - } - }, - "type": "object" - }, - "cricinfo.TeamGroup": { - "properties": { - "teams": { + "image_url": { + "type": "string" + }, + "modified_at": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "story_id": { + "type": "integer" + }, + "tags": { "items": { - "$ref": "#/definitions/cricinfo.TeamProfileBrief" + "$ref": "#/definitions/cricbuzz.CricbuzzNewsTag" }, "type": "array" }, "title": { "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "cricinfo.TeamInfo": { + "cricbuzz.CricbuzzNewsTag": { "properties": { - "id": { - "type": "string" - }, - "name": { + "type": { "type": "string" }, - "slug": { + "value": { "type": "string" } }, "type": "object" }, - "cricinfo.TeamProfile": { + "cricbuzz.GraphInnings": { "properties": { - "abbreviation": { - "type": "string" - }, - "country": { + "color": { "type": "string" }, "id": { - "type": "string" + "type": "integer" }, - "image_url": { + "label": { "type": "string" }, - "is_country": { - "type": "boolean" - }, - "name": { + "short_name": { "type": "string" }, - "primary_color": { - "type": "string" + "team_id": { + "type": "integer" }, - "slug": { + "team_name": { "type": "string" + } + }, + "type": "object" + }, + "cricbuzz.GraphPoint": { + "properties": { + "draw": { + "type": "number" }, - "total_images": { + "innings": { "type": "integer" }, - "total_players": { - "type": "integer" + "over": { + "type": "number" }, - "total_squads": { - "type": "integer" + "team1": { + "type": "number" }, - "total_stories": { - "type": "integer" + "team1_wicket": { + "type": "boolean" }, - "total_videos": { - "type": "integer" + "team2": { + "type": "number" + }, + "team2_wicket": { + "type": "boolean" } }, "type": "object" }, - "cricinfo.TeamProfileBrief": { + "cricbuzz.GraphTeam": { "properties": { - "abbreviation": { - "type": "string" - }, - "country": { + "color": { "type": "string" }, "id": { - "type": "string" - }, - "image_url": { - "type": "string" + "type": "integer" }, - "is_country": { - "type": "boolean" + "image_id": { + "type": "integer" }, "name": { "type": "string" }, - "primary_color": { - "type": "string" - }, - "slug": { + "short_name": { "type": "string" } }, "type": "object" }, - "cricinfo.TeamProfileResponse": { + "cricbuzz.GraphsResponse": { "properties": { - "fetched_at": { + "empty_state": { "type": "string" }, - "profile": { + "fetched_at": { "type": "string" }, - "recent_fixtures": { - "items": { - "$ref": "#/definitions/cricinfo.MatchSummary" - }, - "type": "array" - }, - "recent_results": { + "innings": { "items": { - "$ref": "#/definitions/cricinfo.MatchSummary" + "$ref": "#/definitions/cricbuzz.GraphInnings" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "team": { - "$ref": "#/definitions/cricinfo.TeamProfile" + "match_id": { + "type": "integer" }, - "top_batsmen": { + "run_rate": { "items": { - "$ref": "#/definitions/cricinfo.TeamStatLeader" + "$ref": "#/definitions/cricbuzz.GraphPoint" }, "type": "array" }, - "top_bowlers": { + "runs": { "items": { - "$ref": "#/definitions/cricinfo.TeamStatLeader" + "$ref": "#/definitions/cricbuzz.GraphPoint" }, "type": "array" - } - }, - "type": "object" - }, - "cricinfo.TeamScheduleResponse": { - "properties": { - "fetched_at": { - "type": "string" }, - "matches": { + "runs_per_over": { "items": { - "$ref": "#/definitions/cricinfo.MatchSummary" + "$ref": "#/definitions/cricbuzz.GraphPoint" }, "type": "array" }, - "team": { - "$ref": "#/definitions/cricinfo.TeamInfo" - } - }, - "type": "object" - }, - "cricinfo.TeamScore": { - "properties": { - "home": { - "type": "boolean" - }, - "id": { + "source_url": { "type": "string" }, - "live": { + "stale": { "type": "boolean" }, - "name": { - "type": "string" + "team1": { + "$ref": "#/definitions/cricbuzz.GraphTeam" }, - "score": { - "type": "string" + "team2": { + "$ref": "#/definitions/cricbuzz.GraphTeam" }, - "score_info": { - "type": "string" + "wicket_overs": { + "items": { + "type": "number" + }, + "type": "array" }, - "short_name": { - "type": "string" + "win_probability": { + "additionalProperties": { + "items": { + "$ref": "#/definitions/cricbuzz.GraphPoint" + }, + "type": "array" + }, + "type": "object" + }, + "win_probability_horizontal": { + "additionalProperties": { + "items": { + "$ref": "#/definitions/cricbuzz.GraphPoint" + }, + "type": "array" + }, + "type": "object" } }, "type": "object" }, - "cricinfo.TeamStatLeader": { + "cricbuzz.InningsScore": { "properties": { - "average": { - "type": "number" - }, - "balls": { - "type": "integer" - }, - "conceded": { + "id": { "type": "integer" }, - "economy": { + "overs": { "type": "number" }, - "innings": { - "type": "integer" - }, - "match_class": { - "type": "string" - }, - "matches": { - "type": "integer" - }, - "player_id": { - "type": "string" - }, - "player_name": { - "type": "string" - }, "runs": { "type": "integer" }, - "strike_rate": { - "type": "number" - }, "wickets": { "type": "integer" } }, "type": "object" }, - "cricinfo.TeamsResponse": { + "cricbuzz.MatchCategory": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { + "label": { "type": "string" }, - "groups": { - "items": { - "$ref": "#/definitions/cricinfo.TeamGroup" - }, - "type": "array" - }, - "source_url": { + "value": { "type": "string" } }, "type": "object" }, - "cricinfo.Venue": { + "cricbuzz.MatchCategoryGroup": { "properties": { - "address": { - "type": "string" - }, - "capacity": { - "type": "string" - }, - "country": { + "category": { "type": "string" }, - "end_names": { + "series": { "items": { - "type": "string" + "$ref": "#/definitions/cricbuzz.MatchSeries" }, "type": "array" - }, - "established": { - "type": "string" - }, - "floodlights": { + } + }, + "type": "object" + }, + "cricbuzz.MatchFactsResponse": { + "properties": { + "fetched_at": { "type": "string" }, - "has_stats": { - "type": "boolean" + "match_id": { + "type": "integer" }, - "id": { + "match_url": { "type": "string" }, - "long_name": { - "type": "string" + "officials": { + "$ref": "#/definitions/cricbuzz.MatchOfficials" }, - "name": { + "source_url": { "type": "string" }, - "pitch": { - "type": "string" + "stale": { + "type": "boolean" }, - "slug": { - "type": "string" + "teams": { + "items": { + "$ref": "#/definitions/cricbuzz.MatchTeamSquad" + }, + "type": "array" }, - "small_name": { + "title": { "type": "string" }, - "timezone": { + "toss": { "type": "string" }, - "total_images": { - "type": "integer" - }, - "total_stories": { - "type": "integer" - }, - "total_videos": { - "type": "integer" + "venue": { + "$ref": "#/definitions/cricbuzz.MatchFactsVenue" + } + }, + "type": "object" + }, + "cricbuzz.MatchFactsVenue": { + "properties": { + "name": { + "type": "string" }, - "town": { + "url": { "type": "string" } }, "type": "object" }, - "cricinfo.VenueMatchesResponse": { + "cricbuzz.MatchOfficials": { "properties": { - "count": { - "type": "integer" + "referee": { + "type": "string" }, - "fetched_at": { + "third_umpire": { "type": "string" }, - "matches": { + "umpires": { "items": { - "$ref": "#/definitions/cricinfo.MatchSummary" + "type": "string" }, "type": "array" - }, - "source_url": { - "type": "string" - }, - "venue": { - "$ref": "#/definitions/cricinfo.Venue" } }, "type": "object" }, - "cricinfo.VenueResponse": { + "cricbuzz.MatchScore": { "properties": { - "fetched_at": { - "type": "string" - }, - "home_teams": { + "team1": { "items": { - "$ref": "#/definitions/cricinfo.VenueTeam" + "$ref": "#/definitions/cricbuzz.InningsScore" }, "type": "array" }, - "profile": { + "team2": { "items": { - "type": "string" + "$ref": "#/definitions/cricbuzz.InningsScore" }, "type": "array" - }, - "source_url": { - "type": "string" - }, - "venue": { - "$ref": "#/definitions/cricinfo.Venue" } }, "type": "object" }, - "cricinfo.VenueTeam": { + "cricbuzz.MatchSeries": { "properties": { - "abbreviation": { - "type": "string" - }, - "country": { - "type": "string" - }, "id": { - "type": "string" + "type": "integer" }, - "name": { - "type": "string" + "matches": { + "items": { + "$ref": "#/definitions/cricbuzz.MatchSummary" + }, + "type": "array" }, - "slug": { + "name": { "type": "string" } }, "type": "object" }, - "cricinfo.Video": { + "cricbuzz.MatchSummary": { "properties": { - "duration_seconds": { + "category": { + "type": "string" + }, + "current_batting_team_id": { "type": "integer" }, - "genre": { + "description": { "type": "string" }, - "genre_id": { + "end_time": { "type": "string" }, - "id": { + "format": { "type": "string" }, - "image_url": { + "hide_score_status": { "type": "string" }, - "language": { - "type": "string" + "id": { + "type": "integer" }, - "modified_at": { - "type": "string" + "is_time_announced": { + "type": "boolean" }, - "published_at": { - "type": "string" + "score": { + "$ref": "#/definitions/cricbuzz.MatchScore" }, - "subtitle": { + "series_id": { + "type": "integer" + }, + "series_name": { "type": "string" }, - "summary": { + "short_status": { "type": "string" }, - "title": { + "start_time": { "type": "string" }, - "url": { + "state": { "type": "string" - } - }, - "type": "object" - }, - "cricinfo.VideoGenre": { - "properties": { - "id": { + }, + "state_title": { "type": "string" }, - "slug": { + "status": { "type": "string" }, - "title": { + "team1": { + "$ref": "#/definitions/cricbuzz.Team" + }, + "team2": { + "$ref": "#/definitions/cricbuzz.Team" + }, + "url": { "type": "string" + }, + "venue": { + "$ref": "#/definitions/cricbuzz.MatchVenue" } }, "type": "object" }, - "cricinfo.VideosResponse": { + "cricbuzz.MatchTeamSquad": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "genres": { + "groups": { "items": { - "$ref": "#/definitions/cricinfo.VideoGenre" + "$ref": "#/definitions/cricbuzz.SquadGroup" }, "type": "array" }, - "source_url": { + "team_name": { "type": "string" - }, - "videos": { - "items": { - "$ref": "#/definitions/cricinfo.Video" - }, - "type": "array" } }, "type": "object" }, - "cricinfo.calendarResponseDoc": { + "cricbuzz.MatchVenue": { "properties": { - "code": { - "example": 200, - "type": "integer" + "city": { + "type": "string" }, - "data": { - "$ref": "#/definitions/cricinfo.CalendarResponse" + "country": { + "type": "string" }, - "msg": { - "example": "OK", + "ground": { "type": "string" - } - }, - "type": "object" - }, - "cricinfo.commentaryResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/cricinfo.CommentaryResponse" + "id": { + "type": "integer" }, - "msg": { - "example": "OK", + "latitude": { "type": "string" - } - }, - "type": "object" - }, - "cricinfo.groundsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/cricinfo.GroundsResponse" + "longitude": { + "type": "string" }, - "msg": { - "example": "OK", + "timezone": { "type": "string" } }, "type": "object" }, - "cricinfo.liveMatchesResponseDoc": { + "cricbuzz.MatchesResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "categories": { + "items": { + "$ref": "#/definitions/cricbuzz.MatchCategory" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/cricinfo.LiveMatchesResponse" + "category": { + "type": "string" }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "cricinfo.matchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/cricinfo.MatchResponse" + "groups": { + "items": { + "$ref": "#/definitions/cricbuzz.MatchCategoryGroup" + }, + "type": "array" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" - } - }, - "type": "object" - }, - "cricinfo.newsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/cricinfo.NewsResponse" }, - "msg": { - "example": "OK", + "status": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "cricinfo.photosResponseDoc": { + "cricbuzz.NavigationItem": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/cricinfo.PhotosResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "cricinfo.rankingsResponseDoc": { + "cricbuzz.NavigationMenu": { "properties": { - "code": { - "example": 200, - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/cricbuzz.NavigationItem" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/cricinfo.RankingsResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "cricinfo.recordsIndexResponseDoc": { + "cricbuzz.NavigationResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "fetched_at": { + "type": "string" }, - "data": { - "$ref": "#/definitions/cricinfo.RecordsIndexResponse" + "menus": { + "items": { + "$ref": "#/definitions/cricbuzz.NavigationMenu" + }, + "type": "array" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" - } - }, - "type": "object" - }, - "cricinfo.recordsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/cricinfo.RecordsResponse" + "stale": { + "type": "boolean" }, - "msg": { - "example": "OK", - "type": "string" + "utility_links": { + "items": { + "$ref": "#/definitions/cricbuzz.NavigationItem" + }, + "type": "array" } }, "type": "object" }, - "cricinfo.rssResponseDoc": { + "cricbuzz.NewsSection": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/cricinfo.RSSResponse" + "access": { + "type": "string" }, - "msg": { - "example": "OK", + "label": { "type": "string" - } - }, - "type": "object" - }, - "cricinfo.scoresResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/cricinfo.ScoresResponse" + "path": { + "type": "string" }, - "msg": { - "example": "OK", + "value": { "type": "string" } }, "type": "object" }, - "cricinfo.seriesResponseDoc": { + "cricbuzz.NewsStoryResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/cricinfo.SeriesResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" + }, + "story": { + "$ref": "#/definitions/cricbuzz.CricbuzzNewsStory" } }, "type": "object" }, - "cricinfo.squadsResponseDoc": { + "cricbuzz.NewsTopic": { "properties": { - "code": { - "example": 200, - "type": "integer" + "description": { + "type": "string" }, - "data": { - "$ref": "#/definitions/cricinfo.SquadsResponse" + "id": { + "type": "integer" }, - "msg": { - "example": "OK", + "slug": { "type": "string" - } - }, - "type": "object" - }, - "cricinfo.statsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/cricinfo.StatsResponse" + "title": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "cricinfo.storyResponseDoc": { + "cricbuzz.NewsTopicsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/cricinfo.StoryResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "q": { "type": "string" - } - }, - "type": "object" - }, - "cricinfo.teamProfileResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/cricinfo.TeamProfileResponse" + "sections": { + "items": { + "$ref": "#/definitions/cricbuzz.NewsSection" + }, + "type": "array" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" - } - }, - "type": "object" - }, - "cricinfo.teamScheduleResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/cricinfo.TeamScheduleResponse" + "stale": { + "type": "boolean" }, - "msg": { - "example": "OK", - "type": "string" + "topics": { + "items": { + "$ref": "#/definitions/cricbuzz.NewsTopic" + }, + "type": "array" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "cricinfo.teamsResponseDoc": { + "cricbuzz.OverInningsFilter": { "properties": { - "code": { - "example": 200, + "id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/cricinfo.TeamsResponse" - }, - "msg": { - "example": "OK", + "label": { "type": "string" } }, "type": "object" }, - "cricinfo.venueMatchesResponseDoc": { + "cricbuzz.OverSummary": { "properties": { - "code": { - "example": 200, + "batting_team": { + "type": "string" + }, + "bowler_ids": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "bowler_maidens": { "type": "integer" }, - "data": { - "$ref": "#/definitions/cricinfo.VenueMatchesResponse" + "bowler_names": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "cricinfo.venueResponseDoc": { - "properties": { - "code": { - "example": 200, + "bowler_overs": { + "type": "number" + }, + "bowler_runs": { "type": "integer" }, - "data": { - "$ref": "#/definitions/cricinfo.VenueResponse" + "bowler_wickets": { + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "cricinfo.videosResponseDoc": { - "properties": { - "code": { - "example": 200, + "innings_id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/cricinfo.VideosResponse" + "non_striker_balls": { + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "ctvnews.AuthorResponse": { - "properties": { - "articles": { + "non_striker_ids": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "type": "integer" }, "type": "array" }, - "biography": { + "non_striker_names": { "items": { "type": "string" }, "type": "array" }, - "email": { - "type": "string" + "non_striker_runs": { + "type": "integer" }, - "image_url": { - "type": "string" + "over": { + "type": "integer" }, - "name": { - "type": "string" + "runs": { + "type": "integer" }, - "role": { - "type": "string" + "score": { + "type": "integer" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "culvers.CalendarFlavor": { - "properties": { - "date": { - "description": "Date is the calendar date (YYYY-MM-DD) this flavor is featured.", - "example": "2026-09-01", - "type": "string" + "striker_balls": { + "type": "integer" }, - "description": { - "type": "string" + "striker_ids": { + "items": { + "type": "integer" + }, + "type": "array" }, - "image_url": { - "type": "string" + "striker_names": { + "items": { + "type": "string" + }, + "type": "array" }, - "menu_item_id": { - "description": "MenuItemID matches the flavor's menu item. Culver's also publishes a\nseparate `flavorId` on each calendar entry, but it is redundant --\nacross 214 entries sampled from 4 restaurants it was identical to\nmenuItemId every time (2026-09-05) -- so it is not surfaced, keeping\nthis DTO's id field consistent with CalendarSoup's.", - "example": 69, + "striker_runs": { "type": "integer" }, - "name": { - "example": "Chocolate Covered Strawberry", + "summary": { "type": "string" }, - "slug": { - "example": "chocolate-covered-strawberry", + "timestamp": { "type": "string" + }, + "wickets": { + "type": "integer" } }, "type": "object" }, - "culvers.CalendarResponse": { + "cricbuzz.OversResponse": { "properties": { - "end_date": { - "example": "2026-10-31", + "coverage": { "type": "string" }, - "fetched_at": { + "empty_state": { "type": "string" }, - "flavor_count": { - "description": "FlavorCount and SoupCount are the entry counts, not distinct-day\ncounts -- several soups share one date.", - "example": 61, - "type": "integer" + "fetched_at": { + "type": "string" }, - "flavors": { + "innings_filters": { "items": { - "$ref": "#/definitions/culvers.CalendarFlavor" + "$ref": "#/definitions/cricbuzz.OverInningsFilter" }, "type": "array" }, - "name": { - "example": "Culver's of Waunakee, WI - E Main St", - "type": "string" - }, - "restaurant_id": { - "example": 11, - "type": "integer" - }, - "slug": { - "example": "waunakee", - "type": "string" - }, - "soup_count": { - "example": 133, - "type": "integer" + "is_complete": { + "type": "boolean" }, - "soups": { + "items": { "items": { - "$ref": "#/definitions/culvers.CalendarSoup" + "$ref": "#/definitions/cricbuzz.OverSummary" }, "type": "array" }, + "match_id": { + "type": "integer" + }, "source_url": { "type": "string" }, - "start_date": { - "description": "StartDate and EndDate bound the window Culver's currently publishes\n(roughly two months forward). Empty when the restaurant publishes no\ncalendar at all.", - "example": "2026-09-01", - "type": "string" + "stale": { + "type": "boolean" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "culvers.CalendarSoup": { + "cricbuzz.RankingEntry": { "properties": { - "date": { - "description": "Date is the calendar date (YYYY-MM-DD) this soup is served.", - "example": "2026-09-01", + "country": { "type": "string" }, - "description": { - "type": "string" + "face_image_id": { + "type": "integer" }, - "image_url": { - "type": "string" + "id": { + "type": "integer" }, - "menu_item_id": { - "example": 182, + "image_id": { + "type": "integer" + }, + "matches": { "type": "integer" }, "name": { - "example": "George's® Chili", "type": "string" }, - "slug": { - "example": "georges-chili", + "points": { + "type": "integer" + }, + "profile_url": { "type": "string" - } - }, - "type": "object" - }, - "culvers.CategoriesResponse": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/culvers.Category" - }, - "type": "array" }, - "count": { - "example": 12, + "rank": { "type": "integer" }, - "fetched_at": { - "type": "string" + "rating": { + "type": "integer" }, - "source_url": { + "trend": { "type": "string" } }, "type": "object" }, - "culvers.Category": { + "cricbuzz.RankingsResponse": { "properties": { - "category_id": { - "example": "71863", + "category": { "type": "string" }, - "description": { + "empty_state": { "type": "string" }, - "featured": { - "description": "Featured marks a category Culver's highlights on the menu landing\npage (larger card, shown first).", - "type": "boolean" + "entries": { + "items": { + "$ref": "#/definitions/cricbuzz.RankingEntry" + }, + "type": "array" }, - "id": { - "example": "124383:71863", + "fetched_at": { "type": "string" }, - "image_url": { + "format": { "type": "string" }, - "name": { - "example": "ButterBurgers", + "formats": { + "items": { + "type": "string" + }, + "type": "array" + }, + "gender": { "type": "string" }, - "slug": { - "example": "butterburgers", + "genders": { + "items": { + "type": "string" + }, + "type": "array" + }, + "source_url": { "type": "string" }, - "sort_order": { + "stale": { + "type": "boolean" + }, + "total": { "type": "integer" }, - "url": { - "description": "URL is the /culvers/menu category value (also this category's own\nculvers.com page path).", + "type": { "type": "string" + }, + "types": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "culvers.DirectoryEntry": { + "cricbuzz.RecordCategory": { "properties": { - "slug": { - "description": "Slug is the value /culvers/store takes.", - "example": "ann-arbor-mi-lohr-rd", + "name": { "type": "string" }, - "url": { - "type": "string" + "stats": { + "items": { + "$ref": "#/definitions/cricbuzz.RecordType" + }, + "type": "array" } }, "type": "object" }, - "culvers.DirectoryResponse": { + "cricbuzz.RecordFilter": { "properties": { - "count": { - "example": 100, - "type": "integer" + "name": { + "type": "string" }, - "entries": { + "options": { "items": { - "$ref": "#/definitions/culvers.DirectoryEntry" + "$ref": "#/definitions/cricbuzz.RecordOption" }, "type": "array" - }, - "fetched_at": { + } + }, + "type": "object" + }, + "cricbuzz.RecordOption": { + "properties": { + "id": { "type": "string" }, - "page": { - "example": 1, - "type": "integer" - }, - "source_url": { + "label": { "type": "string" - }, - "total": { - "example": 1121, - "type": "integer" - }, - "total_pages": { - "example": 12, - "type": "integer" } }, "type": "object" }, - "culvers.FlavorIngredient": { + "cricbuzz.RecordRow": { "properties": { - "details": { - "description": "Details is the component's full ingredient statement, including\nCulver's own upper-case allergen callouts (e.g. \"CONTAINS MILK, EGG\").", + "player_id": { "type": "string" }, - "title": { - "example": "Vanilla Frozen Custard", - "type": "string" + "values": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "culvers.FlavorOfTheDay": { + "cricbuzz.RecordSelection": { "properties": { - "date": { - "description": "Date is the calendar date (YYYY-MM-DD) this flavor is/was featured.", - "example": "2026-09-03", + "format": { "type": "string" }, - "description": { + "format_id": { "type": "string" }, - "image_url": { + "opponent": { "type": "string" }, - "name": { - "example": "Mint Cookie", + "stat": { "type": "string" }, - "slug": { - "example": "mint-cookie", + "team": { + "type": "string" + }, + "year": { "type": "string" } }, "type": "object" }, - "culvers.FlavorResponse": { + "cricbuzz.RecordTable": { "properties": { - "allergens": { - "description": "Allergens are the major allergens Culver's declares for this flavor,\nsplit from its comma-separated list, e.g. [\"Egg\",\"Milk\",\"Soy\"].", + "headers": { "items": { "type": "string" }, "type": "array" }, - "categories": { - "description": "Categories are Culver's own flavor-taxonomy labels, e.g.\n[\"Chocolate\",\"Fruit\",\"Vanilla\"].", + "rows": { "items": { - "type": "string" + "$ref": "#/definitions/cricbuzz.RecordRow" }, "type": "array" }, - "description": { - "description": "Description is Culver's own marketing description of the flavor.", + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "cricbuzz.RecordType": { + "properties": { + "category": { "type": "string" }, - "fetched_at": { + "label": { "type": "string" }, - "flavor_id": { - "example": 69, - "type": "integer" - }, - "image_url": { + "value": { "type": "string" - }, - "ingredients": { - "description": "Ingredients breaks the flavor into its components, each with its own\nfull ingredient statement.", + } + }, + "type": "object" + }, + "cricbuzz.RecordsResponse": { + "properties": { + "categories": { "items": { - "$ref": "#/definitions/culvers.FlavorIngredient" + "$ref": "#/definitions/cricbuzz.RecordCategory" }, "type": "array" }, - "menu_item_id": { - "example": 735, - "type": "integer" + "current_table": { + "$ref": "#/definitions/cricbuzz.RecordTable" }, - "name": { - "example": "Chocolate Covered Strawberry", + "data_url": { "type": "string" }, - "nutrition_url": { - "description": "NutritionURL is Culver's Nutritionix label for this flavor.", + "empty_state": { "type": "string" }, - "slug": { - "example": "chocolate-covered-strawberry", + "fetched_at": { "type": "string" }, + "filters": { + "items": { + "$ref": "#/definitions/cricbuzz.RecordFilter" + }, + "type": "array" + }, + "selected": { + "$ref": "#/definitions/cricbuzz.RecordSelection" + }, "source_url": { "type": "string" + }, + "stale": { + "type": "boolean" } }, "type": "object" }, - "culvers.ItemResponse": { + "cricbuzz.ScheduleDay": { "properties": { - "base_calories": { - "type": "integer" - }, - "category_name": { - "example": "ButterBurgers", - "type": "string" - }, - "category_slug": { - "example": "butterburgers", + "date": { "type": "string" }, + "series": { + "items": { + "$ref": "#/definitions/cricbuzz.ScheduleSeries" + }, + "type": "array" + } + }, + "type": "object" + }, + "cricbuzz.ScheduleMatch": { + "properties": { "description": { "type": "string" }, - "fetched_at": { + "end_time": { "type": "string" }, - "image_url": { + "format": { "type": "string" }, - "is_available": { - "type": "boolean" - }, - "item_id": { - "example": "575957", - "type": "string" + "id": { + "type": "integer" }, - "modifiers": { - "items": { - "$ref": "#/definitions/culvers.Modifier" - }, - "type": "array" + "series_id": { + "type": "integer" }, - "name": { - "example": "ButterBurger Cheese", + "series_name": { "type": "string" }, - "nutrition_url": { + "start_time": { "type": "string" }, - "primary_modifier": { - "$ref": "#/definitions/culvers.Modifier" + "team1": { + "$ref": "#/definitions/cricbuzz.Team" }, - "slug": { - "example": "butterburger-cheese", - "type": "string" + "team2": { + "$ref": "#/definitions/cricbuzz.Team" }, - "source_url": { + "url": { "type": "string" + }, + "venue": { + "$ref": "#/definitions/cricbuzz.MatchVenue" } }, "type": "object" }, - "culvers.MenuItemSummary": { + "cricbuzz.ScheduleResponse": { "properties": { - "banner": { - "description": "Banner is a promotional badge Culver's shows on the item card, e.g.\n\"Limited Time Only\". Empty when the item carries none.", - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/cricbuzz.MatchCategory" + }, + "type": "array" }, - "description": { + "category": { "type": "string" }, - "image_url": { - "type": "string" + "days": { + "items": { + "$ref": "#/definitions/cricbuzz.ScheduleDay" + }, + "type": "array" }, - "item_id": { - "example": "575957", + "empty_state": { "type": "string" }, - "name": { - "example": "ButterBurger Cheese", + "fetched_at": { "type": "string" }, - "nutrition_url": { + "q": { "type": "string" }, - "slug": { - "example": "butterburger-cheese", + "source_url": { "type": "string" }, - "sort_order": { - "type": "integer" + "stale": { + "type": "boolean" }, - "url": { - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "culvers.MenuResponse": { + "cricbuzz.ScheduleSeries": { "properties": { "category": { - "example": "butterburgers", "type": "string" }, - "count": { - "example": 6, + "id": { "type": "integer" }, - "description": { - "example": "Always made to order with fresh, never frozen beef.", - "type": "string" - }, - "featured": { - "type": "boolean" - }, - "fetched_at": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "items": { - "items": { - "$ref": "#/definitions/culvers.MenuItemSummary" - }, - "type": "array" + "matches": { + "items": { + "$ref": "#/definitions/cricbuzz.ScheduleMatch" + }, + "type": "array" }, "name": { - "description": "Name, Description, ImageURL and Featured are the category's own\nmetadata, carried on the same page as its items -- so a caller\nrendering a category page does not have to call /culvers/categories\njust to label it.", - "example": "ButterBurgers®", - "type": "string" - }, - "source_url": { "type": "string" } }, "type": "object" }, - "culvers.Modifier": { + "cricbuzz.ScorecardAward": { "properties": { - "description": { - "example": "Bun", + "face_image_id": { + "type": "integer" + }, + "full_name": { "type": "string" }, - "is_mandatory": { + "id": { + "type": "integer" + }, + "is_captain": { "type": "boolean" }, - "is_primary": { - "description": "IsPrimary marks the item's main size/quantity choice (e.g. Single/\nDouble/Triple patties), as opposed to a secondary topping/bun/sauce\ngroup.", + "is_keeper": { "type": "boolean" }, - "options": { - "items": { - "$ref": "#/definitions/culvers.ModifierOption" - }, - "type": "array" + "is_substitute": { + "type": "boolean" }, - "section_title": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "team_id": { + "type": "integer" + }, + "team_name": { "type": "string" } }, "type": "object" }, - "culvers.ModifierOption": { + "cricbuzz.ScorecardBatter": { "properties": { - "base_calories": { - "example": 700, + "balls": { "type": "integer" }, - "image_url": { - "type": "string" + "boundaries": { + "type": "integer" }, - "is_default": { - "description": "IsDefault marks the option Culver's pre-selects.", - "type": "boolean" + "bowler_id": { + "type": "integer" }, - "name": { - "example": "Double", - "type": "string" + "dots": { + "type": "integer" }, - "nutrition_url": { - "type": "string" + "fielder_id_1": { + "type": "integer" }, - "sort_order": { + "fielder_id_2": { "type": "integer" - } - }, - "type": "object" - }, - "culvers.StoreAddress": { - "properties": { - "city": { - "example": "Ann Arbor", - "type": "string" }, - "country": { - "example": "US", - "type": "string" + "fielder_id_3": { + "type": "integer" }, - "line1": { - "example": "3015 Lohr Rd", - "type": "string" + "fives": { + "type": "integer" }, - "postal_code": { - "example": "48108", - "type": "string" + "fours": { + "type": "integer" }, - "state": { - "example": "MI", + "id": { + "type": "integer" + }, + "in_match_change": { "type": "string" - } - }, - "type": "object" - }, - "culvers.StoreChannelStatus": { - "properties": { - "curbside_unavailable": { - "type": "boolean" }, - "dining_room_closed": { + "is_captain": { "type": "boolean" }, - "drive_thru_closed": { + "is_keeper": { "type": "boolean" }, - "lobby_closed": { + "is_overseas": { "type": "boolean" - } - }, - "type": "object" - }, - "culvers.StoreEvent": { - "properties": { - "description": { - "type": "string" }, - "end_date": { - "example": "2026-09-21", + "minutes": { + "type": "integer" + }, + "name": { "type": "string" }, - "end_time": { - "example": "8:00 PM", + "ones": { + "type": "integer" + }, + "out_description": { "type": "string" }, - "start_date": { - "description": "StartDate and EndDate are YYYY-MM-DD.", - "example": "2026-09-21", + "playing_xi_change": { "type": "string" }, - "start_time": { - "example": "5:00 PM", + "runs": { + "type": "integer" + }, + "short_name": { "type": "string" }, - "title": { - "example": "Lakeview Elementary PTO", + "sixers": { + "type": "integer" + }, + "sixes": { + "type": "integer" + }, + "strike_rate": { + "type": "number" + }, + "threes": { + "type": "integer" + }, + "twos": { + "type": "integer" + }, + "wicket_code": { "type": "string" } }, "type": "object" }, - "culvers.StoreHours": { + "cricbuzz.ScorecardBowler": { "properties": { - "closed": { - "description": "Closed is true when Culver's publishes the day with no open interval\nfor this channel.", - "example": false, + "balls": { + "type": "integer" + }, + "dots": { + "type": "integer" + }, + "economy": { + "type": "number" + }, + "id": { + "type": "integer" + }, + "in_match_change": { + "type": "string" + }, + "is_captain": { "type": "boolean" }, - "closes": { - "example": "10:00 PM", + "is_keeper": { + "type": "boolean" + }, + "is_overseas": { + "type": "boolean" + }, + "maidens": { + "type": "integer" + }, + "name": { "type": "string" }, - "day_of_week": { - "example": "Monday", + "no_balls": { + "type": "integer" + }, + "overs": { + "type": "number" + }, + "playing_xi_change": { "type": "string" }, - "opens": { - "example": "10:00 AM", + "runs": { + "type": "integer" + }, + "runs_per_ball": { + "type": "number" + }, + "short_name": { "type": "string" + }, + "wickets": { + "type": "integer" + }, + "wides": { + "type": "integer" } }, "type": "object" }, - "culvers.StoreHoursOverride": { + "cricbuzz.ScorecardExtras": { "properties": { - "all_day_closure": { - "description": "AllDayClosure is true when the restaurant is shut for the whole date\nrather than merely keeping different hours.", - "type": "boolean" - }, - "business_date": { - "description": "BusinessDate is the affected date (YYYY-MM-DD).", - "example": "2026-09-07", - "type": "string" + "byes": { + "type": "integer" }, - "channels": { - "description": "Channels is the fulfillment scope this override applies to, e.g. \"ALL\".", - "example": "ALL", - "type": "string" + "leg_byes": { + "type": "integer" }, - "closes": { - "example": "15:00:00", - "type": "string" + "no_balls": { + "type": "integer" }, - "message": { - "description": "Message is the customer-facing note Culver's shows for this override.", - "type": "string" + "penalty": { + "type": "integer" }, - "opens": { - "description": "Opens and Closes are 24-hour local times, empty on an all-day closure.", - "example": "10:00:00", - "type": "string" + "total": { + "type": "integer" }, - "reason": { - "example": "Closed for a Holiday", - "type": "string" + "wides": { + "type": "integer" } }, "type": "object" }, - "culvers.StoreResponse": { + "cricbuzz.ScorecardHeader": { "properties": { - "address": { - "$ref": "#/definitions/culvers.StoreAddress" + "description": { + "type": "string" }, - "channel_status": { - "allOf": [ - { - "$ref": "#/definitions/culvers.StoreChannelStatus" - } - ], - "description": "ChannelStatus is live availability per fulfillment channel, separate\nfrom the published Hours above." + "end_time": { + "type": "string" }, - "fetched_at": { + "format": { "type": "string" }, - "flavors_of_the_day": { - "items": { - "$ref": "#/definitions/culvers.FlavorOfTheDay" - }, - "type": "array" + "livestream_enabled": { + "type": "boolean" }, - "handoff_options": { - "description": "HandoffOptions are the fulfillment channels Culver's lists for this\nrestaurant, e.g. \"Pickup\", \"Curbside\".", + "match_not_covered": { + "type": "boolean" + }, + "players_of_the_match": { "items": { - "type": "string" + "$ref": "#/definitions/cricbuzz.ScorecardAward" }, "type": "array" }, - "hours": { - "$ref": "#/definitions/culvers.StoreServiceHours" - }, - "hours_overrides": { - "description": "HoursOverrides are one-off changes to a specific date's hours (holiday\nearly closes and the like); TemporalClosures are bounded closure\nwindows. Both are usually empty.", + "players_of_the_series": { "items": { - "$ref": "#/definitions/culvers.StoreHoursOverride" + "$ref": "#/definitions/cricbuzz.ScorecardAward" }, "type": "array" }, - "is_open_now": { - "type": "boolean" - }, - "is_temporarily_closed": { - "type": "boolean" - }, - "latitude": { - "example": 42.242039, - "type": "number" - }, - "longitude": { - "example": -83.764565, - "type": "number" + "result": { + "$ref": "#/definitions/cricbuzz.ScorecardResult" }, - "name": { - "example": "Culver's of Ann Arbor, MI - Lohr Rd", + "series_description": { "type": "string" }, - "next_open_time": { - "description": "NextOpenTime is when the restaurant next opens, as Culver's publishes\nit. TimeZoneOffset is the restaurant's UTC offset in hours, which is\nwhat NextOpenTime should be read against.", - "example": "2026-09-06T10:00:00Z", - "type": "string" + "series_id": { + "type": "integer" }, - "online_order_url": { + "series_name": { "type": "string" }, - "phone_number": { - "example": "(734) 821-0060", + "start_time": { "type": "string" }, - "restaurant_id": { - "example": "974", + "state": { "type": "string" }, - "restaurant_number": { - "example": "1001", + "status": { "type": "string" }, - "slug": { - "example": "ann-arbor-mi-lohr-rd", - "type": "string" + "team1": { + "$ref": "#/definitions/cricbuzz.ScorecardTeam" }, - "source_url": { - "type": "string" + "team2": { + "$ref": "#/definitions/cricbuzz.ScorecardTeam" }, - "temporal_closures": { - "items": { - "$ref": "#/definitions/culvers.StoreTemporalClosure" - }, - "type": "array" + "toss": { + "$ref": "#/definitions/cricbuzz.ScorecardToss" }, - "time_zone_offset": { - "example": -5, - "type": "integer" + "type": { + "type": "string" }, - "upcoming_events": { - "description": "UpcomingEvents are community events the restaurant is hosting.", - "items": { - "$ref": "#/definitions/culvers.StoreEvent" - }, - "type": "array" + "venue": { + "$ref": "#/definitions/cricbuzz.ScorecardVenue" } }, "type": "object" }, - "culvers.StoreServiceHours": { + "cricbuzz.ScorecardInnings": { "properties": { - "curbside": { + "batters": { "items": { - "$ref": "#/definitions/culvers.StoreHours" + "$ref": "#/definitions/cricbuzz.ScorecardBatter" }, "type": "array" }, - "delivery": { + "batting_team": { + "$ref": "#/definitions/cricbuzz.ScorecardTeam" + }, + "bowlers": { "items": { - "$ref": "#/definitions/culvers.StoreHours" + "$ref": "#/definitions/cricbuzz.ScorecardBowler" }, "type": "array" }, - "dine_in": { + "bowling_team": { + "$ref": "#/definitions/cricbuzz.ScorecardTeam" + }, + "extras": { + "$ref": "#/definitions/cricbuzz.ScorecardExtras" + }, + "innings_id": { + "type": "integer" + }, + "partnerships": { "items": { - "$ref": "#/definitions/culvers.StoreHours" + "$ref": "#/definitions/cricbuzz.ScorecardPartnership" }, "type": "array" }, - "drive_thru": { + "powerplays": { "items": { - "$ref": "#/definitions/culvers.StoreHours" + "$ref": "#/definitions/cricbuzz.ScorecardPowerPlay" }, "type": "array" }, - "late_night_drive_thru": { + "time": { + "type": "string" + }, + "totals": { + "$ref": "#/definitions/cricbuzz.ScorecardTotals" + }, + "wickets": { "items": { - "$ref": "#/definitions/culvers.StoreHours" + "$ref": "#/definitions/cricbuzz.ScorecardWicket" }, "type": "array" } }, "type": "object" }, - "culvers.StoreTemporalClosure": { + "cricbuzz.ScorecardPartnership": { "properties": { - "channel_status": { - "$ref": "#/definitions/culvers.StoreChannelStatus" + "batter_1_balls": { + "type": "integer" }, - "ends_at": { - "example": "2026-09-07T15:00:00", + "batter_1_fives": { + "type": "integer" + }, + "batter_1_fours": { + "type": "integer" + }, + "batter_1_id": { + "type": "integer" + }, + "batter_1_name": { "type": "string" }, - "fully_open": { - "description": "FullyOpen is Culver's own summary flag for the window.", - "type": "boolean" + "batter_1_ones": { + "type": "integer" }, - "message": { - "description": "Message is the customer-facing note Culver's shows for this closure.", + "batter_1_runs": { + "type": "integer" + }, + "batter_1_sixes": { + "type": "integer" + }, + "batter_1_threes": { + "type": "integer" + }, + "batter_1_twos": { + "type": "integer" + }, + "batter_2_balls": { + "type": "integer" + }, + "batter_2_fives": { + "type": "integer" + }, + "batter_2_fours": { + "type": "integer" + }, + "batter_2_id": { + "type": "integer" + }, + "batter_2_name": { "type": "string" }, - "reason": { - "example": "Closed for a Holiday", + "batter_2_ones": { + "type": "integer" + }, + "batter_2_runs": { + "type": "integer" + }, + "batter_2_sixes": { + "type": "integer" + }, + "batter_2_threes": { + "type": "integer" + }, + "batter_2_twos": { + "type": "integer" + }, + "total_balls": { + "type": "integer" + }, + "total_runs": { + "type": "integer" + } + }, + "type": "object" + }, + "cricbuzz.ScorecardPowerPlay": { + "properties": { + "id": { + "type": "integer" + }, + "overs_from": { + "type": "number" + }, + "overs_to": { + "type": "number" + }, + "runs": { + "type": "integer" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "cricbuzz.ScorecardResponse": { + "properties": { + "empty_state": { "type": "string" }, - "starts_at": { - "description": "StartsAt and EndsAt are local ISO-8601 datetimes.", - "example": "2026-09-07T10:00:00", + "fetched_at": { "type": "string" }, - "temporarily_closed": { + "header": { + "$ref": "#/definitions/cricbuzz.ScorecardHeader" + }, + "innings": { + "items": { + "$ref": "#/definitions/cricbuzz.ScorecardInnings" + }, + "type": "array" + }, + "match_complete": { + "type": "boolean" + }, + "match_id": { + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "stale": { "type": "boolean" + }, + "status": { + "type": "string" + }, + "upstream_updated_at": { + "type": "string" } }, "type": "object" }, - "culvers.calendarResponseDoc": { + "cricbuzz.ScorecardResult": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": { + "type": "string" + }, + "winning_margin": { "type": "integer" }, - "data": { - "$ref": "#/definitions/culvers.CalendarResponse" + "winning_team": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "winning_team_id": { + "type": "integer" + }, + "won_by_innings": { + "type": "boolean" + }, + "won_by_runs": { + "type": "boolean" } }, "type": "object" }, - "culvers.categoriesResponseDoc": { + "cricbuzz.ScorecardTeam": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/culvers.CategoriesResponse" + "name": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "short_name": { + "type": "string" } }, "type": "object" }, - "culvers.directoryResponseDoc": { + "cricbuzz.ScorecardToss": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "decision": { + "type": "string" }, - "data": { - "$ref": "#/definitions/culvers.DirectoryResponse" + "winner_id": { + "type": "integer" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "winner_name": { + "type": "string" } }, "type": "object" }, - "culvers.flavorResponseDoc": { + "cricbuzz.ScorecardTotals": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "ball_number": { "type": "integer" }, - "data": { - "$ref": "#/definitions/culvers.FlavorResponse" + "declared": { + "type": "boolean" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "follow_on": { + "type": "boolean" + }, + "overs": { + "type": "number" + }, + "revised_overs": { + "type": "number" + }, + "run_rate": { + "type": "number" + }, + "runs": { + "type": "integer" + }, + "runs_per_ball": { + "type": "number" + }, + "wickets": { + "type": "integer" } }, "type": "object" }, - "culvers.itemResponseDoc": { + "cricbuzz.ScorecardVenue": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/culvers.ItemResponse" + "latitude": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "longitude": { + "type": "string" + }, + "name": { + "type": "string" + }, + "timezone": { + "type": "string" } }, "type": "object" }, - "culvers.menuResponseDoc": { + "cricbuzz.ScorecardWicket": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "ball_number": { "type": "integer" }, - "data": { - "$ref": "#/definitions/culvers.MenuResponse" + "batter_id": { + "type": "integer" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "batter_name": { + "type": "string" + }, + "over": { + "type": "number" + }, + "runs": { + "type": "integer" + }, + "wicket_number": { + "type": "integer" } }, "type": "object" }, - "culvers.storeResponseDoc": { + "cricbuzz.Series": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "end_date": { + "type": "string" + }, + "id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/culvers.StoreResponse" + "name": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "start_date": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "cvs.Brand": { + "cricbuzz.SeriesFilter": { "properties": { - "name": { - "example": "Pepsi", + "id": { "type": "string" }, - "path": { - "example": "brand-shop/p/pepsi", + "name": { "type": "string" } }, "type": "object" }, - "cvs.BrandsResponse": { + "cricbuzz.SeriesMonth": { "properties": { - "brands": { + "month": { + "type": "string" + }, + "series": { "items": { - "$ref": "#/definitions/cvs.Brand" + "$ref": "#/definitions/cricbuzz.Series" }, "type": "array" - }, - "total_count": { - "example": 2758, - "type": "integer" } }, "type": "object" }, - "cvs.CategoriesResponse": { + "cricbuzz.SeriesResponse": { "properties": { "categories": { "items": { - "$ref": "#/definitions/cvs.CategoryNode" + "type": "string" + }, + "type": "array" + }, + "category": { + "type": "string" + }, + "empty_state": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "filters": { + "items": { + "$ref": "#/definitions/cricbuzz.SeriesFilter" + }, + "type": "array" + }, + "live_stream": { + "type": "boolean" + }, + "months": { + "items": { + "$ref": "#/definitions/cricbuzz.SeriesMonth" }, "type": "array" + }, + "q": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "stale": { + "type": "boolean" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "cvs.CategoryFacet": { + "cricbuzz.SeriesStatsResponse": { "properties": { - "key": { - "example": "brand", + "categories": { + "items": { + "$ref": "#/definitions/cricbuzz.RecordCategory" + }, + "type": "array" + }, + "data_url": { "type": "string" }, - "label": { - "example": "Brand", + "fetched_at": { "type": "string" }, - "values": { + "formats": { "items": { - "$ref": "#/definitions/cvs.CategoryFacetValue" + "$ref": "#/definitions/cricbuzz.RecordOption" + }, + "type": "array" + }, + "season_options": { + "items": { + "$ref": "#/definitions/cricbuzz.RecordOption" + }, + "type": "array" + }, + "selected_filters": { + "$ref": "#/definitions/cricbuzz.SeriesStatsSelection" + }, + "selected_stat": { + "$ref": "#/definitions/cricbuzz.RecordType" + }, + "series_id": { + "type": "integer" + }, + "series_name": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "stale": { + "type": "boolean" + }, + "tables": { + "items": { + "$ref": "#/definitions/cricbuzz.SeriesStatsTable" + }, + "type": "array" + }, + "team_options": { + "items": { + "$ref": "#/definitions/cricbuzz.RecordOption" }, "type": "array" } }, "type": "object" }, - "cvs.CategoryFacetValue": { + "cricbuzz.SeriesStatsSelection": { "properties": { - "count": { - "example": 37, - "type": "integer" + "match_type_id": { + "type": "string" }, - "name": { - "example": "CoverGirl", + "season_id": { + "type": "string" + }, + "team_id": { "type": "string" } }, "type": "object" }, - "cvs.CategoryNode": { + "cricbuzz.SeriesStatsTable": { "properties": { - "children": { + "format": { + "type": "string" + }, + "headers": { "items": { - "$ref": "#/definitions/cvs.CategoryNode" + "type": "string" }, "type": "array" }, - "id": { - "example": "cat510006", - "type": "string" + "rows": { + "items": { + "$ref": "#/definitions/cricbuzz.RecordRow" + }, + "type": "array" }, - "path": { - "example": "health-medicine/allergy-sinus", - "type": "string" + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "cricbuzz.SquadGroup": { + "properties": { + "members": { + "items": { + "$ref": "#/definitions/cricbuzz.SquadMember" + }, + "type": "array" }, - "title": { - "example": "Allergy & Sinus", + "name": { "type": "string" } }, "type": "object" }, - "cvs.CategoryProduct": { + "cricbuzz.SquadMember": { "properties": { - "brand": { - "example": "Crest", - "type": "string" + "is_captain": { + "type": "boolean" }, - "currency": { - "example": "USD", - "type": "string" + "is_keeper": { + "type": "boolean" }, - "id": { - "example": "478253", + "match_performance_url": { "type": "string" }, - "image_url": { + "name": { "type": "string" }, - "is_featured": { - "type": "boolean" - }, - "is_new_product": { - "type": "boolean" + "profile_url": { + "type": "string" + } + }, + "type": "object" + }, + "cricbuzz.Team": { + "properties": { + "country": { + "type": "string" }, - "is_sponsored": { - "type": "boolean" + "id": { + "type": "integer" }, - "list_price": { - "example": 4.99, - "type": "number" + "image_id": { + "type": "integer" }, - "sale_price": { - "example": 4.99, - "type": "number" + "name": { + "type": "string" }, - "title": { - "example": "Crest Pro-Health Breath Mist, Clean Mint, 0.44 OZ, 2 PK", + "profile_url": { "type": "string" }, - "url": { + "short_name": { "type": "string" } }, "type": "object" }, - "cvs.CategoryResponse": { + "cricbuzz.TeamGroup": { "properties": { - "facets": { + "name": { + "type": "string" + }, + "teams": { "items": { - "$ref": "#/definitions/cvs.CategoryFacet" + "$ref": "#/definitions/cricbuzz.Team" }, "type": "array" + } + }, + "type": "object" + }, + "cricbuzz.TeamStatsOptionsResponse": { + "properties": { + "category": { + "type": "string" }, - "page": { - "example": 1, - "type": "integer" + "fetched_at": { + "type": "string" }, - "products": { + "formats": { "items": { - "$ref": "#/definitions/cvs.CategoryProduct" + "$ref": "#/definitions/cricbuzz.RecordOption" }, "type": "array" }, - "total_count": { - "example": 8766, - "type": "integer" + "opponents": { + "items": { + "$ref": "#/definitions/cricbuzz.RecordOption" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "stale": { + "type": "boolean" + }, + "stats": { + "items": { + "$ref": "#/definitions/cricbuzz.RecordCategory" + }, + "type": "array" + }, + "team": { + "$ref": "#/definitions/cricbuzz.Team" + }, + "years": { + "items": { + "$ref": "#/definitions/cricbuzz.RecordOption" + }, + "type": "array" } }, "type": "object" }, - "cvs.DayHours": { + "cricbuzz.TeamStatsResponse": { "properties": { - "close_time": { - "example": "11:00 PM", + "data_url": { "type": "string" }, - "open_time": { - "example": "08:00 AM", + "empty_state": { "type": "string" }, - "weekday": { - "example": "MON", + "fetched_at": { + "type": "string" + }, + "selected": { + "$ref": "#/definitions/cricbuzz.TeamStatsSelection" + }, + "source_url": { "type": "string" + }, + "stale": { + "type": "boolean" + }, + "table": { + "$ref": "#/definitions/cricbuzz.RecordTable" + }, + "team": { + "$ref": "#/definitions/cricbuzz.Team" } }, "type": "object" }, - "cvs.Product": { + "cricbuzz.TeamStatsSelection": { "properties": { - "availability": { - "description": "Availability is the short form of the page's schema.org availability\n(e.g. \"InStock\", \"OutOfStock\", \"SoldOut\"). This reflects online\navailability only, not any particular store's shelf stock -- store-\nlevel availability is out of scope for this endpoint.", - "example": "InStock", + "category": { "type": "string" }, - "brand": { - "example": "Safe Home", + "format": { "type": "string" }, - "category": { - "example": "Household > Home & Kitchen > Kitchen Accessories", + "format_id": { "type": "string" }, - "currency": { - "example": "USD", + "opponent": { "type": "string" }, - "description": { + "opponent_id": { "type": "string" }, - "fetched_at": { + "stat": { "type": "string" }, - "id": { - "example": "945948", + "team_id": { + "type": "integer" + }, + "team_name": { "type": "string" }, - "images": { + "year": { + "type": "string" + } + }, + "type": "object" + }, + "cricbuzz.TeamsResponse": { + "properties": { + "category": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "groups": { "items": { - "type": "string" + "$ref": "#/definitions/cricbuzz.TeamGroup" }, "type": "array" }, - "price": { - "example": 14.99, - "type": "number" + "source_url": { + "type": "string" }, - "rating": { - "example": 5, - "type": "number" + "stale": { + "type": "boolean" }, - "review_count": { - "example": 1, + "total": { "type": "integer" + } + }, + "type": "object" + }, + "cricbuzz.VideoCategoriesResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/cricbuzz.VideoCategory" + }, + "type": "array" }, - "source_url": { + "fetched_at": { "type": "string" }, - "title": { - "example": "Safe Home Premium Radon Test Kit", - "type": "string" + "media_assets_included": { + "type": "boolean" }, - "url": { + "sections": { + "items": { + "$ref": "#/definitions/cricbuzz.VideoSection" + }, + "type": "array" + }, + "source_url": { "type": "string" + }, + "stale": { + "type": "boolean" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "cvs.ProductIngredients": { + "cricbuzz.VideoCategory": { "properties": { - "active_ingredients": { - "description": "ActiveIngredients and InactiveIngredients are the vendor's own\nstructured active/inactive ingredient fields when upstream populates\nthem separately from Paragraph. Many products (confirmed live) leave\nthese empty and only populate the combined Paragraph form below --\ncallers should prefer Paragraph as the more complete source.", - "example": "Menthol 1.1mg per drop", - "type": "string" + "id": { + "type": "integer" }, - "fetched_at": { + "name": { "type": "string" }, - "id": { - "example": "2370023", + "slug": { "type": "string" }, - "inactive_ingredients": { + "url": { "type": "string" }, - "paragraph": { - "description": "Paragraph is the vendor's full free-text ingredient statement. For\nOTC drug products this frequently also carries a Drug Facts-style\n\"Purpose\" note (e.g. \"Active Ingredient (in each drop): Menthol, 1.5\nmg - Purpose: Oral anesthetic ...\"), confirmed live.", - "type": "string" + "video_count": { + "type": "integer" + } + }, + "type": "object" + }, + "cricbuzz.VideoPlaylist": { + "properties": { + "id": { + "type": "integer" }, - "source_url": { + "name": { "type": "string" }, - "title": { - "example": "e.l.f. 16hr Camo Concealer", + "preview_slug": { "type": "string" }, + "preview_video_id": { + "type": "integer" + }, "url": { "type": "string" + }, + "video_count": { + "type": "integer" } }, "type": "object" }, - "cvs.Store": { + "cricbuzz.VideoPlaylistsResponse": { "properties": { - "address_line1": { - "example": "9045 WILSHIRE BOULEVARD", + "fetched_at": { "type": "string" }, - "city": { - "example": "BEVERLY HILLS", - "type": "string" + "media_assets_included": { + "type": "boolean" }, - "distance_miles": { - "example": 1.12, - "type": "number" + "playlists": { + "items": { + "$ref": "#/definitions/cricbuzz.VideoPlaylist" + }, + "type": "array" }, - "fax": { - "example": "3102736289", + "sections": { + "items": { + "$ref": "#/definitions/cricbuzz.VideoSection" + }, + "type": "array" + }, + "source_url": { "type": "string" }, - "has_pharmacy": { - "description": "HasPharmacy reflects only whether this location has a pharmacy\ncounter -- a fact-of-existence flag, not pharmacy hours, phone, or\nany prescription-specific data. See the package doc comment.", + "stale": { "type": "boolean" }, - "latitude": { - "example": 34.06741, - "type": "number" + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "cricbuzz.VideoSection": { + "properties": { + "label": { + "type": "string" }, - "longitude": { - "example": -118.38934, - "type": "number" + "path": { + "type": "string" }, - "phone": { - "example": "3102735252", + "value": { + "type": "string" + } + }, + "type": "object" + }, + "cricbuzz.WTCResponse": { + "properties": { + "current_season": { + "$ref": "#/definitions/cricbuzz.WTCSeason" + }, + "fetched_at": { "type": "string" }, - "services": { - "description": "Services is the raw list of upstream service-indicator codes for\nthis store (e.g. \"PH_Photo_Ind\", \"atmInd\", \"RS_BOPIS_Ind\"), passed\nthrough as-is rather than translated to friendly names.", + "seasons": { "items": { - "type": "string" + "$ref": "#/definitions/cricbuzz.WTCSeason" }, "type": "array" }, - "state": { - "example": "CA", + "source_url": { "type": "string" }, - "store_hours": { - "description": "StoreHours is the retail (front-of-store) weekly schedule only.", + "stale": { + "type": "boolean" + }, + "teams": { "items": { - "$ref": "#/definitions/cvs.DayHours" + "$ref": "#/definitions/cricbuzz.WTCTeam" }, "type": "array" }, - "store_id": { - "example": "9767", - "type": "string" - }, - "time_zone": { - "example": "PDT", - "type": "string" + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "cricbuzz.WTCSeason": { + "properties": { + "id": { + "type": "integer" }, - "zip": { - "example": "90211", + "name": { "type": "string" } }, "type": "object" }, - "cvs.StoresResponse": { + "cricbuzz.WTCTeam": { "properties": { - "stores": { - "items": { - "$ref": "#/definitions/cvs.Store" - }, - "type": "array" + "id": { + "type": "integer" }, - "total_count": { - "example": 5, + "image_id": { + "type": "integer" + }, + "matches_drawn": { + "type": "integer" + }, + "matches_lost": { + "type": "integer" + }, + "matches_played": { + "type": "integer" + }, + "matches_tied": { + "type": "integer" + }, + "matches_won": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "percentage": { + "type": "number" + }, + "rank": { + "type": "integer" + }, + "total_points": { "type": "integer" } }, "type": "object" }, - "cvs.brandsResponseDoc": { + "cricbuzz.archivesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/cvs.BrandsResponse" + "$ref": "#/definitions/cricbuzz.ArchivesResponse" }, "msg": { "example": "OK", @@ -46428,14 +51941,14 @@ }, "type": "object" }, - "cvs.categoriesResponseDoc": { + "cricbuzz.auctionInfoResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/cvs.CategoriesResponse" + "$ref": "#/definitions/cricbuzz.AuctionInfoResponse" }, "msg": { "example": "OK", @@ -46444,14 +51957,14 @@ }, "type": "object" }, - "cvs.categoryResponseDoc": { + "cricbuzz.auctionLiveBlogResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/cvs.CategoryResponse" + "$ref": "#/definitions/cricbuzz.AuctionLiveBlogResponse" }, "msg": { "example": "OK", @@ -46460,14 +51973,14 @@ }, "type": "object" }, - "cvs.productIngredientsResponseDoc": { + "cricbuzz.auctionLiveResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/cvs.ProductIngredients" + "$ref": "#/definitions/cricbuzz.AuctionLiveResponse" }, "msg": { "example": "OK", @@ -46476,14 +51989,14 @@ }, "type": "object" }, - "cvs.productResponseDoc": { + "cricbuzz.auctionNewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/cvs.Product" + "$ref": "#/definitions/cricbuzz.AuctionNewsResponse" }, "msg": { "example": "OK", @@ -46492,14 +52005,14 @@ }, "type": "object" }, - "cvs.storesResponseDoc": { + "cricbuzz.auctionOptionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/cvs.StoresResponse" + "$ref": "#/definitions/cricbuzz.AuctionOptionsResponse" }, "msg": { "example": "OK", @@ -46508,609 +52021,622 @@ }, "type": "object" }, - "dailycaller.AuthorResponse": { + "cricbuzz.auctionPlayerDetailResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "image_url": { - "type": "string" + "data": { + "$ref": "#/definitions/cricbuzz.AuctionPlayerDetailResponse" }, - "name": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "cricbuzz.auctionPlayerSearchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "social_links": { - "items": { - "$ref": "#/definitions/dailycaller.AuthorSocialLink" - }, - "type": "array" - }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/cricbuzz.AuctionPlayerSearchResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dailycaller.AuthorSocialLink": { + "cricbuzz.auctionResultsResponseDoc": { "properties": { - "type": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "url": { + "data": { + "$ref": "#/definitions/cricbuzz.AuctionResultsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dailyexpress.AuthorArticle": { + "cricbuzz.auctionSeasonsResponseDoc": { "properties": { - "title": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "url": { + "data": { + "$ref": "#/definitions/cricbuzz.AuctionSeasonsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dailyexpress.AuthorResponse": { + "cricbuzz.auctionTeamDetailResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/dailyexpress.AuthorArticle" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "bio": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/cricbuzz.AuctionTeamDetailResponse" }, - "email": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "cricbuzz.auctionTeamsOptionsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "job_title": { - "type": "string" + "data": { + "$ref": "#/definitions/cricbuzz.AuctionTeamsOptionsResponse" }, - "name": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "cricbuzz.auctionTeamsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "twitter": { - "type": "string" + "data": { + "$ref": "#/definitions/cricbuzz.AuctionTeamsResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dailymail.AuthorArticle": { + "cricbuzz.auctionUpcomingResponseDoc": { "properties": { - "description": { - "type": "string" - }, - "published_at": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/cricbuzz.AuctionUpcomingResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dailymail.AuthorResponse": { + "cricbuzz.auctionVideosResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/dailymail.AuthorArticle" - }, - "type": "array" - }, - "bio": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "job_title": { - "type": "string" + "data": { + "$ref": "#/definitions/cricbuzz.AuctionVideosResponse" }, - "name": { + "msg": { + "example": "OK", "type": "string" - }, - "page": { + } + }, + "type": "object" + }, + "cricbuzz.graphsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "profile_id": { - "type": "string" - }, - "social_accounts": { - "items": { - "$ref": "#/definitions/dailymail.AuthorSocialAccount" - }, - "type": "array" - }, - "total_pages": { - "type": "integer" + "data": { + "$ref": "#/definitions/cricbuzz.GraphsResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dailymail.AuthorSocialAccount": { + "cricbuzz.matchFactsResponseDoc": { "properties": { - "platform": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "url": { + "data": { + "$ref": "#/definitions/cricbuzz.MatchFactsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dailyrecord.AuthorArticle": { + "cricbuzz.matchesResponseDoc": { "properties": { - "label": { - "type": "string" - }, - "label_url": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/cricbuzz.MatchesResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dailyrecord.AuthorResponse": { + "cricbuzz.navigationResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/dailyrecord.AuthorArticle" - }, - "type": "array" - }, - "bio": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "email": { - "type": "string" + "data": { + "$ref": "#/definitions/cricbuzz.NavigationResponse" }, - "job_title": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "cricbuzz.newsStoryResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/cricbuzz.NewsStoryResponse" }, - "slug": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "cricbuzz.newsTopicsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "twitter": { - "type": "string" + "data": { + "$ref": "#/definitions/cricbuzz.NewsTopicsResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dailywire.AuthorArticle": { + "cricbuzz.oversResponseDoc": { "properties": { - "published_at": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "section": { - "type": "string" + "data": { + "$ref": "#/definitions/cricbuzz.OversResponse" }, - "summary": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "cricbuzz.rankingsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/cricbuzz.RankingsResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dailywire.AuthorResponse": { + "cricbuzz.recordsResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/dailywire.AuthorArticle" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "headshot": { - "type": "string" + "data": { + "$ref": "#/definitions/cricbuzz.RecordsResponse" }, - "instagram": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "cricbuzz.scheduleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/cricbuzz.ScheduleResponse" }, - "slug": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "cricbuzz.scorecardResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "twitter": { - "type": "string" + "data": { + "$ref": "#/definitions/cricbuzz.ScorecardResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "datasets.AirbnbMarketFacetResponse": { + "cricbuzz.seriesResponseDoc": { "properties": { - "coverage": { - "allOf": [ - { - "$ref": "#/definitions/es.AirbnbDimensionCoverage" - } - ], - "description": "Coverage over the filtered listing universe for enrichment-derived facets.\nOmitted for facets that do not depend on a partial field." + "code": { + "example": 200, + "type": "integer" }, - "dataset": { - "description": "Identifier of the dataset queried (`airbnb-markets`).", - "type": "string" + "data": { + "$ref": "#/definitions/cricbuzz.SeriesResponse" }, - "facet": { - "description": "Facet that was aggregated.", + "msg": { + "example": "OK", "type": "string" - }, - "items": { - "description": "Facet values with the number of matching records for each.", - "items": { - "$ref": "#/definitions/es.AirbnbMarketFacetItem" - }, - "type": "array" } }, "type": "object" }, - "datasets.AirbnbMarketNearbyResponse": { + "cricbuzz.seriesStatsResponseDoc": { "properties": { - "cells": { - "description": "Density cells within the radius, each with its geohash, centre and listing counts.", - "items": { - "$ref": "#/definitions/es.AirbnbDensityCell" - }, - "type": "array" - }, - "dataset": { - "description": "Identifier of the dataset queried (`airbnb-markets`).", - "type": "string" - }, - "lat": { - "description": "Latitude of the search centre, in degrees.", - "type": "number" - }, - "lon": { - "description": "Longitude of the search centre, in degrees.", - "type": "number" - }, - "precision": { - "description": "Geohash precision of the cells returned.", + "code": { + "example": 200, "type": "integer" }, - "radius_m": { - "description": "Search radius, in metres.", - "type": "integer" + "data": { + "$ref": "#/definitions/cricbuzz.SeriesStatsResponse" }, - "total": { - "description": "Number of cells returned.", - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "datasets.AirbnbMarketSearchResponse": { + "cricbuzz.teamStatsOptionsResponseDoc": { "properties": { - "coverage": { - "allOf": [ - { - "$ref": "#/definitions/es.AirbnbDimensionCoverage" - } - ], - "description": "Coverage over the filtered listing universe for enrichment-derived groupings.\nOmitted for country/market groupings that do not depend on a partial field." + "code": { + "example": 200, + "type": "integer" }, - "dataset": { - "description": "Identifier of the dataset queried (`airbnb-markets`).", - "type": "string" + "data": { + "$ref": "#/definitions/cricbuzz.TeamStatsOptionsResponse" }, - "group_by": { - "description": "Dimension the cells are grouped by: `country`, `market`, `admin1`, `locality`, `room_type` or `property_type`.", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "cricbuzz.teamStatsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "items": { - "description": "Aggregate market cells on this page, one per group.", - "items": { - "$ref": "#/definitions/es.AirbnbMarketCell" - }, - "type": "array" + "data": { + "$ref": "#/definitions/cricbuzz.TeamStatsResponse" }, - "min_listings": { - "description": "Minimum number of listings a cell needs to be included.", + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "cricbuzz.teamsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "page": { - "description": "Page number returned.", - "type": "integer" + "data": { + "$ref": "#/definitions/cricbuzz.TeamsResponse" }, - "page_size": { - "description": "Number of items per page.", + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "cricbuzz.videoCategoriesResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "sort": { - "description": "Sort order applied.", - "type": "string" + "data": { + "$ref": "#/definitions/cricbuzz.VideoCategoriesResponse" }, - "total": { - "description": "Total number of cells.", - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "datasets.ApplePlaceFacetResponse": { + "cricbuzz.videoPlaylistsResponseDoc": { "properties": { - "dataset": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "facet": { - "type": "string" + "data": { + "$ref": "#/definitions/cricbuzz.VideoPlaylistsResponse" }, - "items": { - "items": { - "$ref": "#/definitions/es.ApplePlaceDatasetFacetItem" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "datasets.ApplePlaceSearchResponse": { + "cricbuzz.wtcResponseDoc": { "properties": { - "dataset": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "items": { - "items": { - "$ref": "#/definitions/es.ApplePlaceDatasetItem" - }, - "type": "array" + "data": { + "$ref": "#/definitions/cricbuzz.WTCResponse" }, - "page": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "cricinfo.BowlingInning": { + "properties": { + "maidens": { "type": "integer" }, - "page_size": { - "type": "integer" + "overs": { + "type": "number" }, - "sort": { + "player": { "type": "string" }, - "total": { + "runs": { + "type": "integer" + }, + "wickets": { "type": "integer" } }, "type": "object" }, - "datasets.ApplePodcastsShowsFacetResponse": { + "cricinfo.CalendarEvent": { "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`apple-podcasts-shows`).", + "date": { "type": "string" }, - "facet": { - "description": "Facet that was aggregated.", + "name": { "type": "string" }, - "items": { - "description": "Facet values with the number of matching records for each.", + "series": { "items": { - "$ref": "#/definitions/es.ApplePodcastsShowsDatasetFacetItem" + "type": "string" }, "type": "array" } }, "type": "object" }, - "datasets.ApplePodcastsShowsSearchResponse": { + "cricinfo.CalendarResponse": { "properties": { - "dataset": { - "type": "string" + "count": { + "type": "integer" }, - "items": { + "events": { "items": { - "$ref": "#/definitions/es.ApplePodcastsShowRecord" + "$ref": "#/definitions/cricinfo.CalendarEvent" }, "type": "array" }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "sort": { + "fetched_at": { "type": "string" }, - "total": { - "type": "integer" + "source_url": { + "type": "string" } }, "type": "object" }, - "datasets.AppsSearchResponse": { + "cricinfo.CommentaryEntry": { "properties": { - "dataset": { - "type": "string" - }, - "items": { - "items": { - "$ref": "#/definitions/es.AppRecord" - }, - "type": "array" - }, - "page": { + "ball": { "type": "integer" }, - "page_size": { + "batsman_runs": { "type": "integer" }, - "sort": { + "dismissal": { "type": "string" }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "datasets.BBBBusinessesFacetResponse": { - "properties": { - "dataset": { - "description": "Dataset id, always bbb-businesses.", - "example": "bbb-businesses", + "id": { "type": "string" }, - "facet": { - "description": "The facet that was aggregated, as requested.", - "example": "city", - "type": "string" + "inning": { + "type": "integer" }, - "has_more": { - "description": "True while another page exists; request offset + limit next.", - "example": true, + "is_boundary": { "type": "boolean" }, - "items": { - "description": "One page of values, most frequent first, ties in value order.", - "items": { - "$ref": "#/definitions/es.BBBBusinessesFacetItem" - }, - "type": "array" + "is_wicket": { + "type": "boolean" }, - "limit": { - "description": "Values per page that was applied.", - "example": 50, - "type": "integer" + "over": { + "type": "number" }, - "missing": { - "description": "Number of matching records that have no value for this facet.", - "example": 0, + "runs": { "type": "integer" }, - "offset": { - "description": "Number of values skipped.", - "example": 0, - "type": "integer" + "text": { + "type": "string" }, - "total": { - "description": "Number of records matching the filters.", - "example": 44730, - "type": "integer" + "timestamp": { + "type": "string" }, - "total_values": { - "description": "Number of distinct values of the facet across all pages.", - "example": 1128, + "title": { + "type": "string" + }, + "total_inning_runs": { "type": "integer" }, - "values_truncated": { - "description": "Present and true only when the facet has more than 10000 values, the furthest offset can reach; add a filter such as state to split it. total_values is then an estimate.", - "type": "boolean" + "total_inning_wickets": { + "type": "integer" } }, "type": "object" }, - "datasets.BBBBusinessesSearchResponse": { + "cricinfo.CommentaryResponse": { "properties": { - "dataset": { - "type": "string" + "count": { + "type": "integer" }, - "items": { + "entries": { "items": { - "$ref": "#/definitions/es.BBBBusinessRecord" + "$ref": "#/definitions/cricinfo.CommentaryEntry" }, "type": "array" }, - "page": { - "type": "integer" + "fetched_at": { + "type": "string" }, - "page_size": { - "type": "integer" + "match": { + "$ref": "#/definitions/cricinfo.MatchSummary" }, - "sort": { + "source_url": { "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "datasets.BoxOfficeMojoFacetResponse": { + "cricinfo.GroundCountry": { "properties": { - "dataset": { + "abbreviation": { "type": "string" }, - "facet": { + "id": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.BoxOfficeMojoDatasetFacetItem" - }, - "type": "array" + "name": { + "type": "string" + }, + "short_name": { + "type": "string" + }, + "slug": { + "type": "string" } }, "type": "object" }, - "datasets.BoxOfficeMojoSearchResponse": { + "cricinfo.GroundsResponse": { "properties": { - "dataset": { - "type": "string" + "count": { + "type": "integer" }, - "items": { + "countries": { "items": { - "$ref": "#/definitions/es.BoxOfficeMojoTitleRecord" + "$ref": "#/definitions/cricinfo.GroundCountry" }, "type": "array" }, - "page": { - "type": "integer" + "fetched_at": { + "type": "string" }, - "page_size": { - "type": "integer" + "grounds": { + "items": { + "$ref": "#/definitions/cricinfo.Venue" + }, + "type": "array" }, - "sort": { + "source_url": { "type": "string" }, "total": { @@ -47119,1942 +52645,1230 @@ }, "type": "object" }, - "datasets.ChartsSearchResponse": { + "cricinfo.Inning": { "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`apps-charts`).", - "type": "string" + "batters": { + "items": { + "$ref": "#/definitions/cricinfo.PlayerInning" + }, + "type": "array" }, - "items": { - "description": "App chart entries on this page.", + "bowlers": { "items": { - "$ref": "#/definitions/es.ChartEntry" + "$ref": "#/definitions/cricinfo.BowlingInning" }, "type": "array" }, - "page": { - "description": "Page number returned.", + "number": { "type": "integer" }, - "page_size": { - "description": "Number of items per page.", - "type": "integer" + "overs": { + "type": "number" }, - "snapshot_date": { - "description": "Date of the chart snapshot returned, in YYYY-MM-DD.", - "type": "string" + "runs": { + "type": "integer" }, - "sort": { - "description": "Sort order applied.", + "team": { "type": "string" }, - "total": { - "description": "Total number of records matching the filters.", + "wickets": { "type": "integer" } }, "type": "object" }, - "datasets.ChromeExtensionChangesResponse": { + "cricinfo.LiveMatchesResponse": { "properties": { "count": { "type": "integer" }, - "dataset": { + "fetched_at": { "type": "string" }, - "items": { + "matches": { "items": { - "$ref": "#/definitions/es.ChromeExtensionHistoryPoint" + "$ref": "#/definitions/cricinfo.MatchSummary" }, "type": "array" - } - }, - "type": "object" - }, - "datasets.ChromeExtensionFacetResponse": { - "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`chrome-extensions`).", - "type": "string" }, - "facet": { - "description": "Facet that was aggregated.", + "source_url": { "type": "string" - }, - "items": { - "description": "Facet values with the number of matching records for each.", - "items": { - "$ref": "#/definitions/es.ChromeExtensionFacetItem" - }, - "type": "array" } }, "type": "object" }, - "datasets.ChromeExtensionHistoryResponse": { + "cricinfo.MatchResponse": { "properties": { - "count": { - "type": "integer" - }, - "dataset": { + "end_date": { "type": "string" }, - "id": { + "fetched_at": { "type": "string" }, - "points": { - "items": { - "$ref": "#/definitions/es.ChromeExtensionHistoryPoint" - }, - "type": "array" - } - }, - "type": "object" - }, - "datasets.ChromeExtensionMetricsResponse": { - "properties": { - "changes": { - "$ref": "#/definitions/es.ChromeExtensionChangeMetrics" - }, - "dataset": { + "format": { "type": "string" }, - "days": { - "type": "integer" - }, - "generated_at": { + "id": { "type": "string" }, - "item_types": { - "items": { - "$ref": "#/definitions/es.ChromeExtensionMetricBucket" - }, - "type": "array" - }, - "manifest_versions": { + "innings": { "items": { - "$ref": "#/definitions/es.ChromeExtensionMetricBucket" + "$ref": "#/definitions/cricinfo.Inning" }, "type": "array" }, - "rating_bands": { - "items": { - "$ref": "#/definitions/es.ChromeExtensionMetricBucket" - }, - "type": "array" + "series": { + "$ref": "#/definitions/cricinfo.Series" }, - "review_bands": { - "items": { - "$ref": "#/definitions/es.ChromeExtensionMetricBucket" - }, - "type": "array" + "start_date": { + "type": "string" }, - "risk_signals": { - "items": { - "$ref": "#/definitions/es.ChromeExtensionMetricBucket" - }, - "type": "array" + "state": { + "type": "string" }, - "statuses": { - "items": { - "$ref": "#/definitions/es.ChromeExtensionMetricBucket" - }, - "type": "array" + "status": { + "type": "string" }, - "summary": { - "$ref": "#/definitions/es.ChromeExtensionMetricSummary" + "status_text": { + "type": "string" }, - "top_categories": { + "teams": { "items": { - "$ref": "#/definitions/es.ChromeExtensionMetricBucket" + "$ref": "#/definitions/cricinfo.TeamScore" }, "type": "array" }, - "top_developers": { - "items": { - "$ref": "#/definitions/es.ChromeExtensionMetricBucket" - }, - "type": "array" + "title": { + "type": "string" }, - "top_permissions": { - "items": { - "$ref": "#/definitions/es.ChromeExtensionMetricBucket" - }, - "type": "array" + "url": { + "type": "string" }, - "user_bands": { - "items": { - "$ref": "#/definitions/es.ChromeExtensionMetricBucket" - }, - "type": "array" + "venue": { + "type": "string" } }, "type": "object" }, - "datasets.ChromeExtensionSearchResponse": { + "cricinfo.MatchSummary": { "properties": { - "dataset": { + "format": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.ChromeExtensionRecord" - }, - "type": "array" + "id": { + "type": "string" }, - "page": { - "type": "integer" + "series": { + "$ref": "#/definitions/cricinfo.Series" }, - "page_size": { - "type": "integer" + "start_date": { + "type": "string" }, - "sort": { + "state": { "type": "string" }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "datasets.CreatorsSearchResponse": { - "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`creators`).", + "status": { "type": "string" }, - "items": { - "description": "Matching creator records on this page.", + "status_text": { + "type": "string" + }, + "teams": { "items": { - "$ref": "#/definitions/es.CreatorRecord" + "$ref": "#/definitions/cricinfo.TeamScore" }, "type": "array" }, - "page": { - "description": "Page number returned.", - "type": "integer" - }, - "page_size": { - "description": "Number of items per page.", - "type": "integer" - }, - "sort": { - "description": "Sort order applied.", + "title": { "type": "string" }, - "total": { - "description": "Total number of records matching the filters.", - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "datasets.DatasetInfo": { + "cricinfo.NewsResponse": { "properties": { - "capabilities": { - "description": "Operations the dataset supports, such as `search`, `detail`, `facets` or `nearby`.", - "items": { - "type": "string" - }, - "type": "array" + "count": { + "type": "integer" }, - "description": { - "description": "Short description of what the dataset contains.", + "fetched_at": { "type": "string" }, - "id": { - "description": "Dataset identifier, for example `google-map-businesses`.", + "source_url": { "type": "string" }, - "name": { - "description": "Display name of the dataset.", - "type": "string" - } - }, - "type": "object" - }, - "datasets.DatasetListResponse": { - "properties": { - "items": { - "description": "Datasets available through the datasets endpoints.", + "stories": { "items": { - "$ref": "#/definitions/datasets.DatasetInfo" + "$ref": "#/definitions/cricinfo.NewsStory" }, "type": "array" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "datasets.DoorDashStoreFacetResponse": { + "cricinfo.NewsStory": { "properties": { - "dataset": { + "byline": { "type": "string" }, - "facet": { + "genre": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.DoorDashStoreDatasetFacetItem" - }, - "type": "array" - } - }, - "type": "object" - }, - "datasets.DoorDashStoreSearchResponse": { - "properties": { - "dataset": { + "id": { "type": "string" }, - "has_more": { + "image_url": { + "type": "string" + }, + "live": { "type": "boolean" }, - "items": { - "items": { - "$ref": "#/definitions/es.DoorDashStoreDatasetItem" - }, - "type": "array" + "live_blog": { + "type": "boolean" }, - "next_cursor": { + "match_id": { "type": "string" }, - "page": { - "type": "integer" + "modified_at": { + "type": "string" }, - "page_size": { - "type": "integer" + "published_at": { + "type": "string" }, - "pagination": { + "series_id": { "type": "string" }, - "sort": { + "summary": { "type": "string" }, - "total": { - "type": "integer" + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "datasets.FacebookPageFacetResponse": { + "cricinfo.Photo": { "properties": { - "dataset": { + "caption": { "type": "string" }, - "facet": { + "credit": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.FacebookPageDatasetFacetItem" - }, - "type": "array" + "date_taken": { + "type": "string" }, - "next_after": { + "height": { + "type": "integer" + }, + "id": { "type": "string" - } - }, - "type": "object" - }, - "datasets.FacebookPageSearchResponse": { - "properties": { - "dataset": { + }, + "long_caption": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.FacebookPageDatasetItem" + "peer_urls": { + "additionalProperties": { + "type": "string" }, - "type": "array" - }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" + "type": "object" }, - "sort": { + "url": { "type": "string" }, - "total": { + "width": { "type": "integer" } }, "type": "object" }, - "datasets.GithubUserFacetResponse": { + "cricinfo.PhotosResponse": { "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`github-users`).", - "type": "string" + "count": { + "type": "integer" }, - "facet": { - "description": "Facet that was aggregated.", + "fetched_at": { "type": "string" }, - "items": { - "description": "Facet values with the number of matching records for each.", + "photos": { "items": { - "$ref": "#/definitions/es.GithubUserDatasetFacetItem" + "$ref": "#/definitions/cricinfo.Photo" }, "type": "array" + }, + "source_url": { + "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "datasets.GithubUserSearchResponse": { + "cricinfo.PlayerInning": { "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`github-users`).", - "type": "string" - }, - "items": { - "description": "Matching GitHub user records on this page.", - "items": { - "$ref": "#/definitions/es.GithubUserDatasetItem" - }, - "type": "array" - }, - "page": { - "description": "Page number returned.", + "balls": { "type": "integer" }, - "page_size": { - "description": "Number of items per page.", + "fours": { "type": "integer" }, - "sort": { - "description": "Sort order applied.", + "out": { + "type": "boolean" + }, + "player": { "type": "string" }, - "total": { - "description": "Total number of records matching the filters.", + "runs": { + "type": "integer" + }, + "sixes": { "type": "integer" } }, "type": "object" }, - "datasets.GoodreadsAuthorFacetResponse": { + "cricinfo.RSSItem": { "properties": { - "dataset": { + "description": { "type": "string" }, - "facet": { + "id": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.GoodreadsAuthorDatasetFacetItem" - }, - "type": "array" - } - }, - "type": "object" - }, - "datasets.GoodreadsAuthorSearchResponse": { - "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`goodreads-authors`).", + "image_url": { "type": "string" }, - "items": { - "description": "Matching Goodreads author records on this page.", - "items": { - "$ref": "#/definitions/es.GoodreadsAuthorRecord" - }, - "type": "array" - }, - "page": { - "description": "Page number returned.", - "type": "integer" - }, - "page_size": { - "description": "Number of items per page.", - "type": "integer" + "published_at": { + "type": "string" }, - "sort": { - "description": "Sort order applied.", + "title": { "type": "string" }, - "total": { - "description": "Total number of records matching the filters.", - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "datasets.GoodreadsFacetResponse": { + "cricinfo.RSSResponse": { "properties": { - "dataset": { + "count": { + "type": "integer" + }, + "description": { "type": "string" }, - "facet": { + "fetched_at": { "type": "string" }, "items": { "items": { - "$ref": "#/definitions/es.GoodreadsBookDatasetFacetItem" + "$ref": "#/definitions/cricinfo.RSSItem" }, "type": "array" + }, + "source_url": { + "type": "string" + }, + "title": { + "type": "string" } }, "type": "object" }, - "datasets.GoodreadsSearchResponse": { + "cricinfo.RankingEntry": { "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`goodreads-books`).", + "country": { "type": "string" }, - "items": { - "description": "Matching Goodreads book records on this page.", - "items": { - "$ref": "#/definitions/es.GoodreadsBookRecord" - }, - "type": "array" + "format": { + "type": "string" }, - "page": { - "description": "Page number returned.", + "matches": { "type": "integer" }, - "page_size": { - "description": "Number of items per page.", - "type": "integer" + "name": { + "type": "string" }, - "sort": { - "description": "Sort order applied.", + "player_id": { "type": "string" }, - "total": { - "description": "Total number of records matching the filters.", + "points": { + "type": "integer" + }, + "rank": { + "type": "integer" + }, + "rating": { "type": "integer" + }, + "team_id": { + "type": "string" } }, "type": "object" }, - "datasets.GoogleBusinessFacetResponse": { + "cricinfo.RankingsResponse": { "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`google-map-businesses`).", - "type": "string" - }, - "facet": { - "description": "Facet that was aggregated.", + "fetched_at": { "type": "string" }, - "items": { - "description": "Facet values with the number of matching records for each.", + "rankings": { "items": { - "$ref": "#/definitions/es.GoogleBusinessDatasetFacetItem" + "$ref": "#/definitions/cricinfo.RankingEntry" }, "type": "array" } }, "type": "object" }, - "datasets.GoogleBusinessSearchResponse": { + "cricinfo.RecordCategory": { "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`google-map-businesses`).", - "type": "string" - }, - "items": { - "description": "Matching Google Maps business records on this page.", - "items": { - "$ref": "#/definitions/es.GoogleBusinessDatasetItem" - }, - "type": "array" - }, - "page": { - "description": "Page number returned.", - "type": "integer" - }, - "page_size": { - "description": "Number of items per page.", + "id": { "type": "integer" }, - "sort": { - "description": "Sort order applied.", + "long_name": { "type": "string" }, - "total": { - "description": "Total number of records matching the filters.", - "type": "integer" - } - }, - "type": "object" - }, - "datasets.HousingFacetResponse": { - "properties": { - "dataset": { + "name": { "type": "string" }, - "facet": { + "slug": { "type": "string" - }, - "items": { - "items": { - "$ref": "#/definitions/es.HousingMarketDatasetFacetItem" - }, - "type": "array" } }, "type": "object" }, - "datasets.HousingSearchResponse": { + "cricinfo.RecordClass": { "properties": { - "dataset": { - "type": "string" + "id": { + "type": "integer" }, - "items": { - "items": { - "$ref": "#/definitions/es.HousingMarketRecord" - }, - "type": "array" + "long_name": { + "type": "string" }, - "page": { + "multiple_class": { "type": "integer" }, - "page_size": { - "type": "integer" + "name": { + "type": "string" }, - "sort": { + "slug": { "type": "string" }, - "total": { - "type": "integer" + "type": { + "type": "string" } }, "type": "object" }, - "datasets.InstagramUserFacetResponse": { + "cricinfo.RecordEntity": { "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`instagram-users`).", + "id": { "type": "string" }, - "facet": { - "description": "Facet that was aggregated.", + "name": { "type": "string" }, - "items": { - "description": "Facet values with the number of matching records for each.", - "items": { - "$ref": "#/definitions/es.InstagramUserDatasetFacetItem" - }, - "type": "array" + "short_name": { + "type": "string" + }, + "slug": { + "type": "string" } }, "type": "object" }, - "datasets.InstagramUserSearchResponse": { + "cricinfo.RecordEntityGroup": { "properties": { - "dataset": { - "type": "string" - }, - "items": { + "entities": { "items": { - "$ref": "#/definitions/es.InstagramUserDatasetItem" + "$ref": "#/definitions/cricinfo.RecordEntity" }, "type": "array" }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "sort": { - "type": "string" - }, - "total": { + "type_id": { "type": "integer" } }, "type": "object" }, - "datasets.JobCompaniesResponse": { + "cricinfo.RecordsIndexResponse": { "properties": { - "companies": { + "ask_suggestions": { "items": { - "additionalProperties": {}, - "type": "object" + "type": "string" }, "type": "array" }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" + "categories": { + "items": { + "$ref": "#/definitions/cricinfo.RecordCategory" + }, + "type": "array" }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "datasets.JobsFacetResponse": { - "properties": { - "facets": { - "allOf": [ - { - "$ref": "#/definitions/es.JobPostingFacets" - } - ], - "description": "Counts of open job postings grouped by company, provider, department, location, employment type, skill and other attributes." - } - }, - "type": "object" - }, - "datasets.JobsSearchResponse": { - "properties": { - "jobs": { - "description": "Matching job postings on this page.", + "classes": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/cricinfo.RecordClass" }, "type": "array" }, - "page": { - "description": "Page number returned.", - "type": "integer" + "fetched_at": { + "type": "string" }, - "page_size": { - "description": "Number of items per page.", - "type": "integer" + "groups": { + "items": { + "$ref": "#/definitions/cricinfo.RecordEntityGroup" + }, + "type": "array" }, - "total": { - "description": "Total number of postings matching the filters.", - "type": "integer" + "source_url": { + "type": "string" } }, "type": "object" }, - "datasets.JournalistsFacetResponse": { + "cricinfo.RecordsResponse": { "properties": { - "dataset": { - "type": "string" + "class": { + "type": "integer" }, - "facet": { + "count": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "items": { + "headers": { "items": { - "$ref": "#/definitions/es.JournalistsFacetItem" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "datasets.JournalistsSearchResponse": { - "properties": { - "dataset": { + }, + "record": { "type": "string" }, - "items": { + "rows": { "items": { - "$ref": "#/definitions/es.JournalistRecord" + "$ref": "#/definitions/cricinfo.StatsRow" }, "type": "array" }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "sort": { + "source_url": { "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "datasets.LlmsFacetResponse": { + "cricinfo.ScoresResponse": { "properties": { - "dataset": { - "type": "string" + "count": { + "type": "integer" }, - "facet": { + "fetched_at": { "type": "string" }, - "items": { + "matches": { "items": { - "$ref": "#/definitions/es.LlmsDatasetFacetItem" + "$ref": "#/definitions/cricinfo.MatchSummary" }, "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "datasets.LlmsRecord": { + "cricinfo.Series": { "properties": { - "analyzer_version": { - "type": "string" - }, - "category": { - "type": "string" - }, - "domain": { - "type": "string" - }, - "full": { - "$ref": "#/definitions/es.LlmsFile" - }, - "home_blocked": { - "type": "boolean" - }, - "home_challenge": { - "type": "boolean" - }, - "home_status": { - "type": "integer" - }, - "is_infrastructure": { - "type": "boolean" - }, - "llms": { - "$ref": "#/definitions/es.LlmsFile" - }, - "method_version": { - "type": "string" - }, - "origin": { - "type": "string" - }, - "probe_error": { - "type": "string" - }, - "probed_at": { - "type": "string" - }, - "rank": { - "type": "integer" - }, - "reachable": { - "type": "boolean" - }, - "robots": { - "$ref": "#/definitions/es.LlmsRobots" - }, - "run_date": { - "type": "string" - }, - "run_id": { + "id": { "type": "string" }, - "seed_source": { + "name": { "type": "string" }, - "tld": { + "slug": { "type": "string" } }, "type": "object" }, - "datasets.LlmsSearchResponse": { + "cricinfo.SeriesResponse": { "properties": { - "dataset": { + "fetched_at": { "type": "string" }, - "items": { + "matches": { "items": { - "$ref": "#/definitions/datasets.LlmsRecord" + "$ref": "#/definitions/cricinfo.MatchSummary" }, "type": "array" }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "sort": { - "type": "string" - }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "datasets.NumbeoCityFacetResponse": { - "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`numbeo-cities`).", - "type": "string" - }, - "facet": { - "description": "Facet that was aggregated.", - "type": "string" + "series": { + "$ref": "#/definitions/cricinfo.Series" }, - "items": { - "description": "Facet values with the number of matching records for each.", + "standings": { "items": { - "$ref": "#/definitions/es.NumbeoDatasetFacetItem" + "$ref": "#/definitions/cricinfo.StandingsEntry" }, "type": "array" } }, "type": "object" }, - "datasets.NumbeoCitySearchResponse": { + "cricinfo.Squad": { "properties": { - "dataset": { + "announced_at": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.NumbeoCityRecord" - }, - "type": "array" - }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "sort": { + "id": { "type": "string" }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "datasets.NumbeoCountrySearchResponse": { - "properties": { - "dataset": { + "modified_at": { "type": "string" }, - "items": { + "players": { "items": { - "$ref": "#/definitions/es.NumbeoCountryRecord" + "$ref": "#/definitions/cricinfo.SquadPlayer" }, "type": "array" }, - "page": { - "type": "integer" + "series_id": { + "type": "string" }, - "page_size": { - "type": "integer" + "series_slug": { + "type": "string" }, - "sort": { + "slug": { "type": "string" }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "datasets.PitchbookAdvisorsFacetResponse": { - "properties": { - "dataset": { + "team_id": { "type": "string" }, - "facet": { + "team_name": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.PitchbookFacetItem" - }, - "type": "array" + "team_slug": { + "type": "string" + }, + "title": { + "type": "string" } }, "type": "object" }, - "datasets.PitchbookAdvisorsSearchResponse": { + "cricinfo.SquadPlayer": { "properties": { - "dataset": { + "headshot_url": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.PitchbookRecord" - }, - "type": "array" + "id": { + "type": "string" }, - "page": { - "type": "integer" + "image_url": { + "type": "string" }, - "page_size": { - "type": "integer" + "is_overseas": { + "type": "boolean" }, - "sort": { - "type": "string" + "is_withdrawn": { + "type": "boolean" }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "datasets.PitchbookCompaniesFacetResponse": { - "properties": { - "dataset": { + "long_name": { "type": "string" }, - "facet": { + "name": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.PitchbookFacetItem" - }, - "type": "array" - } - }, - "type": "object" - }, - "datasets.PitchbookCompaniesSearchResponse": { - "properties": { - "dataset": { + "note": { "type": "string" }, - "items": { + "playing_roles": { "items": { - "$ref": "#/definitions/es.PitchbookRecord" + "type": "string" }, "type": "array" }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "sort": { + "role": { "type": "string" }, - "total": { - "type": "integer" + "slug": { + "type": "string" } }, "type": "object" }, - "datasets.PitchbookFundsFacetResponse": { + "cricinfo.SquadsResponse": { "properties": { - "dataset": { + "count": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "facet": { + "source_url": { "type": "string" }, - "items": { + "squads": { "items": { - "$ref": "#/definitions/es.PitchbookFacetItem" + "$ref": "#/definitions/cricinfo.Squad" }, "type": "array" + }, + "team": { + "$ref": "#/definitions/cricinfo.TeamInfo" } }, "type": "object" }, - "datasets.PitchbookFundsSearchResponse": { + "cricinfo.StandingsEntry": { "properties": { - "dataset": { - "type": "string" + "losses": { + "type": "integer" }, - "items": { - "items": { - "$ref": "#/definitions/es.PitchbookRecord" - }, - "type": "array" + "net_run_rate": { + "type": "number" }, - "page": { + "no_result": { "type": "integer" }, - "page_size": { + "played": { "type": "integer" }, - "sort": { - "type": "string" + "points": { + "type": "integer" }, - "total": { + "position": { "type": "integer" - } - }, - "type": "object" - }, - "datasets.PitchbookInvestorsFacetResponse": { - "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`pitchbook-investors`).", - "type": "string" }, - "facet": { - "description": "Facet that was aggregated.", + "team_id": { "type": "string" }, - "items": { - "description": "Facet values with the number of matching records for each.", - "items": { - "$ref": "#/definitions/es.PitchbookFacetItem" - }, - "type": "array" - } - }, - "type": "object" - }, - "datasets.PitchbookInvestorsSearchResponse": { - "properties": { - "dataset": { + "team_name": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.PitchbookRecord" - }, - "type": "array" - }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "sort": { + "team_slug": { "type": "string" }, - "total": { + "wins": { "type": "integer" } }, "type": "object" }, - "datasets.PitchbookLimitedPartnersFacetResponse": { + "cricinfo.StatsResponse": { "properties": { - "dataset": { - "type": "string" + "class": { + "type": "integer" }, - "facet": { + "count": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "items": { + "headers": { "items": { - "$ref": "#/definitions/es.PitchbookFacetItem" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "datasets.PitchbookLimitedPartnersSearchResponse": { - "properties": { - "dataset": { - "type": "string" }, - "items": { + "rows": { "items": { - "$ref": "#/definitions/es.PitchbookRecord" + "$ref": "#/definitions/cricinfo.StatsRow" }, "type": "array" }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "sort": { + "source_url": { "type": "string" }, - "total": { - "type": "integer" + "type": { + "type": "string" } }, "type": "object" }, - "datasets.PlaystationFacetResponse": { - "properties": { - "dataset": { - "type": "string" - }, - "facet": { - "type": "string" - }, - "items": { - "items": { - "$ref": "#/definitions/es.PlaystationGameDatasetFacetItem" - }, - "type": "array" - } + "cricinfo.StatsRow": { + "additionalProperties": { + "type": "string" }, "type": "object" }, - "datasets.PlaystationSearchResponse": { + "cricinfo.StoryBlock": { "properties": { - "dataset": { + "caption": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.PlaystationGameRecord" - }, - "type": "array" - }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" + "html": { + "type": "string" }, - "sort": { + "image_url": { "type": "string" }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "datasets.ProductHuntMakersFacetResponse": { - "properties": { - "dataset": { + "type": { "type": "string" }, - "facet": { + "video_id": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.ProductHuntMakersFacetItem" - }, - "type": "array" + "video_title": { + "type": "string" } }, "type": "object" }, - "datasets.ProductHuntMakersSearchResponse": { + "cricinfo.StoryBlog": { "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`producthunt-makers`).", - "type": "string" - }, - "items": { - "description": "Matching Product Hunt maker records on this page.", + "blocks": { "items": { - "$ref": "#/definitions/es.ProductHuntMakerItem" + "$ref": "#/definitions/cricinfo.StoryBlock" }, "type": "array" }, - "page": { - "description": "Page number returned.", - "type": "integer" + "id": { + "type": "string" }, - "page_size": { - "description": "Number of items per page.", - "type": "integer" + "pinned": { + "type": "boolean" }, - "sort": { - "description": "Sort order applied.", + "published_at": { "type": "string" }, - "total": { - "description": "Total number of records matching the filters.", - "type": "integer" + "title": { + "type": "string" } }, "type": "object" }, - "datasets.ProductHuntProductsFacetResponse": { + "cricinfo.StoryLink": { "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`producthunt-products`).", + "id": { "type": "string" }, - "facet": { - "description": "Facet that was aggregated.", + "title": { "type": "string" }, - "items": { - "description": "Facet values with the number of matching records for each.", - "items": { - "$ref": "#/definitions/es.ProductHuntProductsFacetItem" - }, - "type": "array" + "type": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "datasets.ProductHuntProductsSearchResponse": { + "cricinfo.StoryResponse": { "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`producthunt-products`).", - "type": "string" + "blocks": { + "items": { + "$ref": "#/definitions/cricinfo.StoryBlock" + }, + "type": "array" }, - "items": { - "description": "Matching Product Hunt product records on this page.", + "blog_entries": { "items": { - "$ref": "#/definitions/es.ProductHuntProductItem" + "$ref": "#/definitions/cricinfo.StoryBlog" }, "type": "array" }, - "page": { - "description": "Page number returned.", - "type": "integer" + "fetched_at": { + "type": "string" }, - "page_size": { - "description": "Number of items per page.", - "type": "integer" + "related": { + "items": { + "$ref": "#/definitions/cricinfo.StoryLink" + }, + "type": "array" }, - "sort": { - "description": "Sort order applied.", + "source_url": { "type": "string" }, - "total": { - "description": "Total number of records matching the filters.", - "type": "integer" + "story": { + "$ref": "#/definitions/cricinfo.NewsStory" } }, "type": "object" }, - "datasets.ProductHuntTrendsFacetResponse": { + "cricinfo.TeamGroup": { "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`producthunt-trends`).", - "type": "string" - }, - "facet": { - "description": "Facet that was aggregated.", - "type": "string" - }, - "items": { - "description": "Facet values with the number of matching records for each.", + "teams": { "items": { - "$ref": "#/definitions/es.ProductHuntTrendsFacetItem" + "$ref": "#/definitions/cricinfo.TeamProfileBrief" }, "type": "array" + }, + "title": { + "type": "string" } }, "type": "object" }, - "datasets.ProductHuntTrendsSearchResponse": { + "cricinfo.TeamInfo": { "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`producthunt-trends`).", + "id": { "type": "string" }, - "group_by": { - "description": "Dimension the cells are grouped by: `topic_month`, `topic_year` or `topic`.", + "name": { "type": "string" }, - "items": { - "description": "Aggregate launch-trend cells on this page, one per group.", - "items": { - "$ref": "#/definitions/es.ProductHuntTrendCell" - }, - "type": "array" - }, - "min_launches": { - "description": "Minimum number of launches a cell needs to be included.", - "type": "integer" - }, - "page": { - "description": "Page number returned.", - "type": "integer" - }, - "page_size": { - "description": "Number of items per page.", - "type": "integer" - }, - "sort": { - "description": "Sort order applied.", + "slug": { "type": "string" - }, - "total": { - "description": "Total number of cells.", - "type": "integer" } }, "type": "object" }, - "datasets.RedditTrendingSearchResponse": { + "cricinfo.TeamProfile": { "properties": { - "dataset": { + "abbreviation": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.RedditTrendingEntry" - }, - "type": "array" + "country": { + "type": "string" }, - "page": { - "type": "integer" + "id": { + "type": "string" }, - "page_size": { - "type": "integer" + "image_url": { + "type": "string" }, - "snapshot_date": { + "is_country": { + "type": "boolean" + }, + "name": { "type": "string" }, - "sort": { + "primary_color": { "type": "string" }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "datasets.ReviewsSearchResponse": { - "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`apps-reviews`).", + "slug": { "type": "string" }, - "items": { - "description": "Matching app review records on this page.", - "items": { - "$ref": "#/definitions/es.AppReview" - }, - "type": "array" + "total_images": { + "type": "integer" }, - "page": { - "description": "Page number returned.", + "total_players": { "type": "integer" }, - "page_size": { - "description": "Number of items per page.", + "total_squads": { "type": "integer" }, - "sort": { - "description": "Sort order applied.", - "type": "string" + "total_stories": { + "type": "integer" }, - "total": { - "description": "Total number of records matching the filters.", + "total_videos": { "type": "integer" } }, "type": "object" }, - "datasets.ScamTrackerReportsFacetResponse": { + "cricinfo.TeamProfileBrief": { "properties": { - "dataset": { + "abbreviation": { "type": "string" }, - "facet": { + "country": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.ScamTrackerReportsFacetItem" - }, - "type": "array" - } - }, - "type": "object" - }, - "datasets.ScamTrackerReportsSearchResponse": { - "properties": { - "dataset": { + "id": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.ScamTrackerReport" - }, - "type": "array" + "image_url": { + "type": "string" }, - "page": { - "type": "integer" + "is_country": { + "type": "boolean" }, - "page_size": { - "type": "integer" + "name": { + "type": "string" }, - "sort": { + "primary_color": { "type": "string" }, - "total": { - "type": "integer" + "slug": { + "type": "string" } }, "type": "object" }, - "datasets.SecCompanyFacetResponse": { + "cricinfo.TeamProfileResponse": { "properties": { - "dataset": { + "fetched_at": { "type": "string" }, - "facet": { + "profile": { "type": "string" }, - "items": { + "recent_fixtures": { "items": { - "$ref": "#/definitions/es.SecCompanyFacetItem" + "$ref": "#/definitions/cricinfo.MatchSummary" }, "type": "array" - } - }, - "type": "object" - }, - "datasets.SecCompanyFinancialsResponse": { - "properties": { - "cik": { - "description": "SEC Central Index Key (CIK) of the company, as a number.", - "type": "integer" }, - "count": { - "description": "Number of data points returned.", - "type": "integer" - }, - "dataset": { - "description": "Identifier of the dataset queried (`sec-companies`).", - "type": "string" - }, - "points": { - "description": "Financial statement history points for the company, newest fiscal year first.", + "recent_results": { "items": { - "$ref": "#/definitions/es.SecFinancialsHistoryPoint" + "$ref": "#/definitions/cricinfo.MatchSummary" }, "type": "array" - } - }, - "type": "object" - }, - "datasets.SecCompanyInsiderResponse": { - "properties": { - "cik": { - "type": "integer" - }, - "count": { - "type": "integer" }, - "dataset": { + "source_url": { "type": "string" }, - "items": { + "team": { + "$ref": "#/definitions/cricinfo.TeamProfile" + }, + "top_batsmen": { "items": { - "$ref": "#/definitions/es.SecInsiderTransactionRecord" + "$ref": "#/definitions/cricinfo.TeamStatLeader" }, "type": "array" - } - }, - "type": "object" - }, - "datasets.SecCompanySearchResponse": { - "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`sec-companies`).", - "type": "string" }, - "items": { - "description": "Matching SEC-registered company records on this page.", + "top_bowlers": { "items": { - "$ref": "#/definitions/es.SecCompanyRecord" + "$ref": "#/definitions/cricinfo.TeamStatLeader" }, "type": "array" - }, - "page": { - "description": "Page number returned.", - "type": "integer" - }, - "page_size": { - "description": "Number of items per page.", - "type": "integer" - }, - "sort": { - "description": "Sort order applied.", - "type": "string" - }, - "total": { - "description": "Total number of records matching the filters.", - "type": "integer" } }, "type": "object" }, - "datasets.SecInstitutionalPositionsFacetResponse": { + "cricinfo.TeamScheduleResponse": { "properties": { - "dataset": { - "type": "string" - }, - "facet": { + "fetched_at": { "type": "string" }, - "items": { + "matches": { "items": { - "$ref": "#/definitions/es.SecInstitutionalPositionsFacetItem" + "$ref": "#/definitions/cricinfo.MatchSummary" }, "type": "array" + }, + "team": { + "$ref": "#/definitions/cricinfo.TeamInfo" } }, "type": "object" }, - "datasets.SecInstitutionalPositionsSearchResponse": { + "cricinfo.TeamScore": { "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`sec-institutional-positions`).", - "type": "string" - }, - "items": { - "description": "Matching institutional position records on this page.", - "items": { - "$ref": "#/definitions/es.SecInstitutionalPositionRecord" - }, - "type": "array" + "home": { + "type": "boolean" }, - "page": { - "description": "Page number returned.", - "type": "integer" + "id": { + "type": "string" }, - "page_size": { - "description": "Number of items per page.", - "type": "integer" + "live": { + "type": "boolean" }, - "sort": { - "description": "Sort order applied.", + "name": { "type": "string" }, - "total": { - "description": "Total number of records matching the filters.", - "type": "integer" - } - }, - "type": "object" - }, - "datasets.StarbucksStoreFacetResponse": { - "properties": { - "dataset": { + "score": { "type": "string" }, - "facet": { + "score_info": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.StarbucksStoreDatasetFacetItem" - }, - "type": "array" + "short_name": { + "type": "string" } }, "type": "object" }, - "datasets.StarbucksStoreSearchResponse": { + "cricinfo.TeamStatLeader": { "properties": { - "dataset": { - "type": "string" + "average": { + "type": "number" }, - "items": { - "items": { - "$ref": "#/definitions/es.StarbucksStoreDatasetItem" - }, - "type": "array" + "balls": { + "type": "integer" }, - "page": { + "conceded": { "type": "integer" }, - "page_size": { + "economy": { + "type": "number" + }, + "innings": { "type": "integer" }, - "sort": { + "match_class": { "type": "string" }, - "total": { + "matches": { "type": "integer" - } - }, - "type": "object" - }, - "datasets.SteamAchievementsSearchResponse": { - "properties": { - "dataset": { - "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.SteamAchievementRecord" - }, - "type": "array" + "player_id": { + "type": "string" }, - "page": { - "type": "integer" + "player_name": { + "type": "string" }, - "page_size": { + "runs": { "type": "integer" }, - "sort": { - "type": "string" + "strike_rate": { + "type": "number" }, - "total": { + "wickets": { "type": "integer" } }, "type": "object" }, - "datasets.SteamChartsSearchResponse": { + "cricinfo.TeamsResponse": { "properties": { - "dataset": { + "count": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "items": { + "groups": { "items": { - "$ref": "#/definitions/es.SteamChartEntry" + "$ref": "#/definitions/cricinfo.TeamGroup" }, "type": "array" }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "snapshot_date": { - "type": "string" - }, - "sort": { + "source_url": { "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "datasets.SteamFacetResponse": { + "cricinfo.Venue": { "properties": { - "dataset": { + "address": { "type": "string" }, - "facet": { + "capacity": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.SteamGameDatasetFacetItem" - }, - "type": "array" - } - }, - "type": "object" - }, - "datasets.SteamNewsSearchResponse": { - "properties": { - "dataset": { + "country": { "type": "string" }, - "items": { + "end_names": { "items": { - "$ref": "#/definitions/es.SteamNewsRecord" + "type": "string" }, "type": "array" }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "sort": { + "established": { "type": "string" }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "datasets.SteamPlayerCountsSearchResponse": { - "properties": { - "dataset": { + "floodlights": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.SteamPlayerCountRecord" - }, - "type": "array" - }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" + "has_stats": { + "type": "boolean" }, - "sort": { + "id": { "type": "string" }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "datasets.SteamPricesSearchResponse": { - "properties": { - "dataset": { + "long_name": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.SteamPriceRecord" - }, - "type": "array" + "name": { + "type": "string" }, - "page": { - "type": "integer" + "pitch": { + "type": "string" }, - "page_size": { - "type": "integer" + "slug": { + "type": "string" }, - "sort": { + "small_name": { "type": "string" }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "datasets.SteamReviewsSearchResponse": { - "properties": { - "dataset": { + "timezone": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.SteamReviewRecord" - }, - "type": "array" + "total_images": { + "type": "integer" }, - "page": { + "total_stories": { "type": "integer" }, - "page_size": { + "total_videos": { "type": "integer" }, - "sort": { + "town": { "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "datasets.SteamSearchResponse": { + "cricinfo.VenueMatchesResponse": { "properties": { - "dataset": { + "count": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "items": { + "matches": { "items": { - "$ref": "#/definitions/es.SteamGameRecord" + "$ref": "#/definitions/cricinfo.MatchSummary" }, "type": "array" }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "sort": { + "source_url": { "type": "string" }, - "total": { - "type": "integer" + "venue": { + "$ref": "#/definitions/cricinfo.Venue" } }, "type": "object" }, - "datasets.TechstackFacetResponse": { + "cricinfo.VenueResponse": { "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`techstack`).", - "type": "string" - }, - "facet": { - "description": "Facet that was aggregated.", + "fetched_at": { "type": "string" }, - "items": { - "description": "Facet values with the number of matching records for each.", + "home_teams": { "items": { - "$ref": "#/definitions/es.TechstackDatasetFacetItem" + "$ref": "#/definitions/cricinfo.VenueTeam" }, "type": "array" - } - }, - "type": "object" - }, - "datasets.TechstackSearchResponse": { - "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`techstack`).", - "type": "string" }, - "items": { - "description": "Matching website technology records on this page.", + "profile": { "items": { - "$ref": "#/definitions/es.TechstackRecord" + "type": "string" }, "type": "array" }, - "page": { - "description": "Page number returned.", - "type": "integer" - }, - "page_size": { - "description": "Number of items per page.", - "type": "integer" - }, - "sort": { - "description": "Sort order applied.", + "source_url": { "type": "string" }, - "total": { - "description": "Total number of records matching the filters.", - "type": "integer" + "venue": { + "$ref": "#/definitions/cricinfo.Venue" } }, "type": "object" }, - "datasets.TrustmrrFacetResponse": { + "cricinfo.VenueTeam": { "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`trustmrr`).", + "abbreviation": { "type": "string" }, - "facet": { - "description": "Facet that was aggregated.", + "country": { "type": "string" }, - "items": { - "description": "Facet values with the number of matching records for each.", - "items": { - "$ref": "#/definitions/es.TrustmrrDatasetFacetItem" - }, - "type": "array" - } - }, - "type": "object" - }, - "datasets.TrustmrrHistoryResponse": { - "properties": { - "count": { - "type": "integer" - }, - "dataset": { + "id": { "type": "string" }, - "points": { - "items": { - "$ref": "#/definitions/es.TrustmrrHistoryPoint" - }, - "type": "array" + "name": { + "type": "string" }, "slug": { "type": "string" @@ -49062,192 +53876,95 @@ }, "type": "object" }, - "datasets.TrustmrrSearchResponse": { + "cricinfo.Video": { "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`trustmrr`).", - "type": "string" - }, - "items": { - "description": "Matching startup records on this page.", - "items": { - "$ref": "#/definitions/es.TrustmrrStartupRecord" - }, - "type": "array" - }, - "page": { - "description": "Page number returned.", - "type": "integer" - }, - "page_size": { - "description": "Number of items per page.", + "duration_seconds": { "type": "integer" }, - "sort": { - "description": "Sort order applied.", - "type": "string" - }, - "total": { - "description": "Total number of records matching the filters.", - "type": "integer" - } - }, - "type": "object" - }, - "datasets.VehicleListingFacetResponse": { - "properties": { - "dataset": { + "genre": { "type": "string" }, - "facet": { + "genre_id": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.VehicleListingDatasetFacetItem" - }, - "type": "array" - } - }, - "type": "object" - }, - "datasets.VehicleListingPriceHistoryResponse": { - "properties": { "id": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.VehiclePriceHistoryRecord" - }, - "type": "array" - } - }, - "type": "object" - }, - "datasets.VehicleListingSearchResponse": { - "properties": { - "dataset": { + "image_url": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.VehicleListingRecord" - }, - "type": "array" + "language": { + "type": "string" }, - "page": { - "type": "integer" + "modified_at": { + "type": "string" }, - "page_size": { - "type": "integer" + "published_at": { + "type": "string" }, - "sort": { + "subtitle": { "type": "string" }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "datasets.XUserFacetResponse": { - "properties": { - "dataset": { - "description": "Identifier of the dataset queried (`x-users`).", + "summary": { "type": "string" }, - "facet": { - "description": "Facet that was aggregated.", + "title": { "type": "string" }, - "items": { - "description": "Facet values with the number of matching records for each.", - "items": { - "$ref": "#/definitions/es.XUserDatasetFacetItem" - }, - "type": "array" + "url": { + "type": "string" } }, "type": "object" }, - "datasets.XUserSearchResponse": { + "cricinfo.VideoGenre": { "properties": { - "dataset": { + "id": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/es.XUserDatasetItem" - }, - "type": "array" - }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "sort": { + "slug": { "type": "string" }, - "total": { - "type": "integer" + "title": { + "type": "string" } }, "type": "object" }, - "datasets.YoutubeCreatorFacetResponse": { + "cricinfo.VideosResponse": { "properties": { - "dataset": { - "type": "string" + "count": { + "type": "integer" }, - "facet": { + "fetched_at": { "type": "string" }, - "items": { + "genres": { "items": { - "$ref": "#/definitions/es.YoutubeCreatorDatasetFacetItem" + "$ref": "#/definitions/cricinfo.VideoGenre" }, "type": "array" - } - }, - "type": "object" - }, - "datasets.YoutubeCreatorSearchResponse": { - "properties": { - "dataset": { + }, + "source_url": { "type": "string" }, - "items": { + "videos": { "items": { - "$ref": "#/definitions/es.YoutubeCreatorDatasetItem" + "$ref": "#/definitions/cricinfo.Video" }, "type": "array" - }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "sort": { - "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "datasets.airbnbMarketResponseDoc": { + "cricinfo.calendarResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/es.AirbnbMarketDetail" + "$ref": "#/definitions/cricinfo.CalendarResponse" }, "msg": { "example": "OK", @@ -49256,14 +53973,14 @@ }, "type": "object" }, - "datasets.airbnbMarketsFacetResponseDoc": { + "cricinfo.commentaryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.AirbnbMarketFacetResponse" + "$ref": "#/definitions/cricinfo.CommentaryResponse" }, "msg": { "example": "OK", @@ -49272,14 +53989,14 @@ }, "type": "object" }, - "datasets.airbnbMarketsNearbyResponseDoc": { + "cricinfo.groundsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.AirbnbMarketNearbyResponse" + "$ref": "#/definitions/cricinfo.GroundsResponse" }, "msg": { "example": "OK", @@ -49288,14 +54005,14 @@ }, "type": "object" }, - "datasets.airbnbMarketsSearchResponseDoc": { + "cricinfo.liveMatchesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.AirbnbMarketSearchResponse" + "$ref": "#/definitions/cricinfo.LiveMatchesResponse" }, "msg": { "example": "OK", @@ -49304,14 +54021,14 @@ }, "type": "object" }, - "datasets.applePlaceResponseDoc": { + "cricinfo.matchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/es.ApplePlaceRecord" + "$ref": "#/definitions/cricinfo.MatchResponse" }, "msg": { "example": "OK", @@ -49320,14 +54037,14 @@ }, "type": "object" }, - "datasets.applePlacesFacetResponseDoc": { + "cricinfo.newsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.ApplePlaceFacetResponse" + "$ref": "#/definitions/cricinfo.NewsResponse" }, "msg": { "example": "OK", @@ -49336,14 +54053,14 @@ }, "type": "object" }, - "datasets.applePlacesSearchResponseDoc": { + "cricinfo.photosResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.ApplePlaceSearchResponse" + "$ref": "#/definitions/cricinfo.PhotosResponse" }, "msg": { "example": "OK", @@ -49352,14 +54069,14 @@ }, "type": "object" }, - "datasets.applePodcastsShowResponseDoc": { + "cricinfo.rankingsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/es.ApplePodcastsShowRecord" + "$ref": "#/definitions/cricinfo.RankingsResponse" }, "msg": { "example": "OK", @@ -49368,14 +54085,14 @@ }, "type": "object" }, - "datasets.applePodcastsShowsFacetResponseDoc": { + "cricinfo.recordsIndexResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.ApplePodcastsShowsFacetResponse" + "$ref": "#/definitions/cricinfo.RecordsIndexResponse" }, "msg": { "example": "OK", @@ -49384,14 +54101,14 @@ }, "type": "object" }, - "datasets.applePodcastsShowsSearchResponseDoc": { + "cricinfo.recordsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.ApplePodcastsShowsSearchResponse" + "$ref": "#/definitions/cricinfo.RecordsResponse" }, "msg": { "example": "OK", @@ -49400,14 +54117,14 @@ }, "type": "object" }, - "datasets.appsSearchResponseDoc": { + "cricinfo.rssResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.AppsSearchResponse" + "$ref": "#/definitions/cricinfo.RSSResponse" }, "msg": { "example": "OK", @@ -49416,14 +54133,14 @@ }, "type": "object" }, - "datasets.bbbBusinessResponseDoc": { + "cricinfo.scoresResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/es.BBBBusinessRecord" + "$ref": "#/definitions/cricinfo.ScoresResponse" }, "msg": { "example": "OK", @@ -49432,14 +54149,14 @@ }, "type": "object" }, - "datasets.bbbBusinessesFacetResponseDoc": { + "cricinfo.seriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.BBBBusinessesFacetResponse" + "$ref": "#/definitions/cricinfo.SeriesResponse" }, "msg": { "example": "OK", @@ -49448,14 +54165,14 @@ }, "type": "object" }, - "datasets.bbbBusinessesSearchResponseDoc": { + "cricinfo.squadsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.BBBBusinessesSearchResponse" + "$ref": "#/definitions/cricinfo.SquadsResponse" }, "msg": { "example": "OK", @@ -49464,14 +54181,14 @@ }, "type": "object" }, - "datasets.boxOfficeMojoFacetResponseDoc": { + "cricinfo.statsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.BoxOfficeMojoFacetResponse" + "$ref": "#/definitions/cricinfo.StatsResponse" }, "msg": { "example": "OK", @@ -49480,14 +54197,14 @@ }, "type": "object" }, - "datasets.boxOfficeMojoItemResponseDoc": { + "cricinfo.storyResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/es.BoxOfficeMojoTitleRecord" + "$ref": "#/definitions/cricinfo.StoryResponse" }, "msg": { "example": "OK", @@ -49496,14 +54213,14 @@ }, "type": "object" }, - "datasets.boxOfficeMojoSearchResponseDoc": { + "cricinfo.teamProfileResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.BoxOfficeMojoSearchResponse" + "$ref": "#/definitions/cricinfo.TeamProfileResponse" }, "msg": { "example": "OK", @@ -49512,14 +54229,14 @@ }, "type": "object" }, - "datasets.chartsSearchResponseDoc": { + "cricinfo.teamScheduleResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.ChartsSearchResponse" + "$ref": "#/definitions/cricinfo.TeamScheduleResponse" }, "msg": { "example": "OK", @@ -49528,14 +54245,14 @@ }, "type": "object" }, - "datasets.chromeExtensionChangesResponseDoc": { + "cricinfo.teamsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.ChromeExtensionChangesResponse" + "$ref": "#/definitions/cricinfo.TeamsResponse" }, "msg": { "example": "OK", @@ -49544,14 +54261,14 @@ }, "type": "object" }, - "datasets.chromeExtensionFacetResponseDoc": { + "cricinfo.venueMatchesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.ChromeExtensionFacetResponse" + "$ref": "#/definitions/cricinfo.VenueMatchesResponse" }, "msg": { "example": "OK", @@ -49560,14 +54277,14 @@ }, "type": "object" }, - "datasets.chromeExtensionHistoryResponseDoc": { + "cricinfo.venueResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.ChromeExtensionHistoryResponse" + "$ref": "#/definitions/cricinfo.VenueResponse" }, "msg": { "example": "OK", @@ -49576,14 +54293,14 @@ }, "type": "object" }, - "datasets.chromeExtensionItemResponseDoc": { + "cricinfo.videosResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/es.ChromeExtensionRecord" + "$ref": "#/definitions/cricinfo.VideosResponse" }, "msg": { "example": "OK", @@ -49592,1503 +54309,1300 @@ }, "type": "object" }, - "datasets.chromeExtensionMetricsResponseDoc": { + "ctvnews.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/datasets.ChromeExtensionMetricsResponse" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "email": { "type": "string" - } - }, - "type": "object" - }, - "datasets.chromeExtensionsSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.ChromeExtensionSearchResponse" + "image_url": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { "type": "string" - } - }, - "type": "object" - }, - "datasets.creatorsSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.CreatorsSearchResponse" + "role": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "datasets.doorDashStoreResponseDoc": { + "culvers.CalendarFlavor": { "properties": { - "code": { - "example": 200, - "type": "integer" + "date": { + "description": "Date is the calendar date (YYYY-MM-DD) this flavor is featured.", + "example": "2026-09-01", + "type": "string" }, - "data": { - "$ref": "#/definitions/es.DoorDashStoreRecord" + "description": { + "type": "string" }, - "msg": { - "example": "OK", + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "datasets.doorDashStoresFacetResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "menu_item_id": { + "description": "MenuItemID matches the flavor's menu item. Culver's also publishes a\nseparate `flavorId` on each calendar entry, but it is redundant --\nacross 214 entries sampled from 4 restaurants it was identical to\nmenuItemId every time (2026-09-05) -- so it is not surfaced, keeping\nthis DTO's id field consistent with CalendarSoup's.", + "example": 69, "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.DoorDashStoreFacetResponse" + "name": { + "example": "Chocolate Covered Strawberry", + "type": "string" }, - "msg": { - "example": "OK", + "slug": { + "example": "chocolate-covered-strawberry", "type": "string" } }, "type": "object" }, - "datasets.doorDashStoresSearchResponseDoc": { + "culvers.CalendarResponse": { "properties": { - "code": { - "example": 200, + "end_date": { + "example": "2026-10-31", + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "flavor_count": { + "description": "FlavorCount and SoupCount are the entry counts, not distinct-day\ncounts -- several soups share one date.", + "example": 61, "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.DoorDashStoreSearchResponse" + "flavors": { + "items": { + "$ref": "#/definitions/culvers.CalendarFlavor" + }, + "type": "array" }, - "msg": { - "example": "OK", + "name": { + "example": "Culver's of Waunakee, WI - E Main St", "type": "string" - } - }, - "type": "object" - }, - "datasets.facebookPageResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "restaurant_id": { + "example": 11, "type": "integer" }, - "data": { - "$ref": "#/definitions/es.FacebookPageCandidate" + "slug": { + "example": "waunakee", + "type": "string" }, - "msg": { - "example": "OK", + "soup_count": { + "example": 133, + "type": "integer" + }, + "soups": { + "items": { + "$ref": "#/definitions/culvers.CalendarSoup" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "start_date": { + "description": "StartDate and EndDate bound the window Culver's currently publishes\n(roughly two months forward). Empty when the restaurant publishes no\ncalendar at all.", + "example": "2026-09-01", "type": "string" } }, "type": "object" }, - "datasets.facebookPagesFacetResponseDoc": { + "culvers.CalendarSoup": { "properties": { - "code": { - "example": 200, + "date": { + "description": "Date is the calendar date (YYYY-MM-DD) this soup is served.", + "example": "2026-09-01", + "type": "string" + }, + "description": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "menu_item_id": { + "example": 182, "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.FacebookPageFacetResponse" + "name": { + "example": "George's® Chili", + "type": "string" }, - "msg": { - "example": "OK", + "slug": { + "example": "georges-chili", "type": "string" } }, "type": "object" }, - "datasets.facebookPagesSearchResponseDoc": { + "culvers.CategoriesResponse": { "properties": { - "code": { - "example": 200, + "categories": { + "items": { + "$ref": "#/definitions/culvers.Category" + }, + "type": "array" + }, + "count": { + "example": 12, "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.FacebookPageSearchResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" } }, "type": "object" }, - "datasets.githubUserResponseDoc": { + "culvers.Category": { "properties": { - "code": { - "example": 200, - "type": "integer" + "category_id": { + "example": "71863", + "type": "string" }, - "data": { - "$ref": "#/definitions/es.GithubUserRecord" + "description": { + "type": "string" }, - "msg": { - "example": "OK", + "featured": { + "description": "Featured marks a category Culver's highlights on the menu landing\npage (larger card, shown first).", + "type": "boolean" + }, + "id": { + "example": "124383:71863", + "type": "string" + }, + "image_url": { + "type": "string" + }, + "name": { + "example": "ButterBurgers", + "type": "string" + }, + "slug": { + "example": "butterburgers", + "type": "string" + }, + "sort_order": { + "type": "integer" + }, + "url": { + "description": "URL is the /culvers/menu category value (also this category's own\nculvers.com page path).", "type": "string" } }, "type": "object" }, - "datasets.githubUsersFacetResponseDoc": { + "culvers.DirectoryEntry": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/datasets.GithubUserFacetResponse" + "slug": { + "description": "Slug is the value /culvers/store takes.", + "example": "ann-arbor-mi-lohr-rd", + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "datasets.githubUsersSearchResponseDoc": { + "culvers.DirectoryResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 100, "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.GithubUserSearchResponse" + "entries": { + "items": { + "$ref": "#/definitions/culvers.DirectoryEntry" + }, + "type": "array" }, - "msg": { - "example": "OK", + "fetched_at": { + "type": "string" + }, + "page": { + "example": 1, + "type": "integer" + }, + "source_url": { "type": "string" + }, + "total": { + "example": 1121, + "type": "integer" + }, + "total_pages": { + "example": 12, + "type": "integer" } }, "type": "object" }, - "datasets.goodreadsAuthorResponseDoc": { + "culvers.FlavorIngredient": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/es.GoodreadsAuthorRecord" + "details": { + "description": "Details is the component's full ingredient statement, including\nCulver's own upper-case allergen callouts (e.g. \"CONTAINS MILK, EGG\").", + "type": "string" }, - "msg": { - "example": "OK", + "title": { + "example": "Vanilla Frozen Custard", "type": "string" } }, "type": "object" }, - "datasets.goodreadsAuthorsFacetResponseDoc": { + "culvers.FlavorOfTheDay": { "properties": { - "code": { - "example": 200, - "type": "integer" + "date": { + "description": "Date is the calendar date (YYYY-MM-DD) this flavor is/was featured.", + "example": "2026-09-03", + "type": "string" }, - "data": { - "$ref": "#/definitions/datasets.GoodreadsAuthorFacetResponse" + "description": { + "type": "string" }, - "msg": { - "example": "OK", + "image_url": { + "type": "string" + }, + "name": { + "example": "Mint Cookie", + "type": "string" + }, + "slug": { + "example": "mint-cookie", "type": "string" } }, "type": "object" }, - "datasets.goodreadsAuthorsSearchResponseDoc": { + "culvers.FlavorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "allergens": { + "description": "Allergens are the major allergens Culver's declares for this flavor,\nsplit from its comma-separated list, e.g. [\"Egg\",\"Milk\",\"Soy\"].", + "items": { + "type": "string" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/datasets.GoodreadsAuthorSearchResponse" + "categories": { + "description": "Categories are Culver's own flavor-taxonomy labels, e.g.\n[\"Chocolate\",\"Fruit\",\"Vanilla\"].", + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "description": { + "description": "Description is Culver's own marketing description of the flavor.", "type": "string" - } - }, - "type": "object" - }, - "datasets.goodreadsBookResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/es.GoodreadsBookRecord" }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "datasets.goodreadsBooksFacetResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.GoodreadsFacetResponse" + "flavor_id": { + "example": 69, + "type": "integer" }, - "msg": { - "example": "OK", + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "datasets.goodreadsBooksSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.GoodreadsSearchResponse" + "ingredients": { + "description": "Ingredients breaks the flavor into its components, each with its own\nfull ingredient statement.", + "items": { + "$ref": "#/definitions/culvers.FlavorIngredient" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "datasets.googleMapBusinessResponseDoc": { - "properties": { - "code": { - "example": 200, + "menu_item_id": { + "example": 735, "type": "integer" }, - "data": { - "$ref": "#/definitions/es.GoogleBusiness" + "name": { + "example": "Chocolate Covered Strawberry", + "type": "string" }, - "msg": { - "example": "OK", + "nutrition_url": { + "description": "NutritionURL is Culver's Nutritionix label for this flavor.", "type": "string" - } - }, - "type": "object" - }, - "datasets.googleMapBusinessesFacetResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.GoogleBusinessFacetResponse" + "slug": { + "example": "chocolate-covered-strawberry", + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" } }, "type": "object" }, - "datasets.googleMapBusinessesSearchResponseDoc": { + "culvers.ItemResponse": { "properties": { - "code": { - "example": 200, + "base_calories": { "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.GoogleBusinessSearchResponse" - }, - "msg": { - "example": "OK", + "category_name": { + "example": "ButterBurgers", "type": "string" - } - }, - "type": "object" - }, - "datasets.housingMarketItemResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/es.HousingMarketRecord" + "category_slug": { + "example": "butterburgers", + "type": "string" }, - "msg": { - "example": "OK", + "description": { "type": "string" - } - }, - "type": "object" - }, - "datasets.housingMarketsFacetResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.HousingFacetResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "datasets.housingMarketsSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.HousingSearchResponse" + "is_available": { + "type": "boolean" }, - "msg": { - "example": "OK", + "item_id": { + "example": "575957", "type": "string" - } - }, - "type": "object" - }, - "datasets.instagramUserResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/es.InstagramUserRecord" + "modifiers": { + "items": { + "$ref": "#/definitions/culvers.Modifier" + }, + "type": "array" }, - "msg": { - "example": "OK", + "name": { + "example": "ButterBurger Cheese", "type": "string" - } - }, - "type": "object" - }, - "datasets.instagramUsersFacetResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/datasets.InstagramUserFacetResponse" }, - "msg": { - "example": "OK", + "nutrition_url": { "type": "string" - } - }, - "type": "object" - }, - "datasets.instagramUsersSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.InstagramUserSearchResponse" + "primary_modifier": { + "$ref": "#/definitions/culvers.Modifier" }, - "msg": { - "example": "OK", + "slug": { + "example": "butterburger-cheese", "type": "string" - } - }, - "type": "object" - }, - "datasets.jobsCompaniesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/datasets.JobCompaniesResponse" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" } }, "type": "object" }, - "datasets.jobsFacetResponseDoc": { + "culvers.MenuItemSummary": { "properties": { - "code": { - "example": 200, - "type": "integer" + "banner": { + "description": "Banner is a promotional badge Culver's shows on the item card, e.g.\n\"Limited Time Only\". Empty when the item carries none.", + "type": "string" }, - "data": { - "$ref": "#/definitions/datasets.JobsFacetResponse" + "description": { + "type": "string" }, - "msg": { - "example": "OK", + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "datasets.jobsItemResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "additionalProperties": {}, - "type": "object" + "item_id": { + "example": "575957", + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "example": "ButterBurger Cheese", "type": "string" - } - }, - "type": "object" - }, - "datasets.jobsSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.JobsSearchResponse" + "nutrition_url": { + "type": "string" }, - "msg": { - "example": "OK", + "slug": { + "example": "butterburger-cheese", "type": "string" - } - }, - "type": "object" - }, - "datasets.journalistsFacetResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.JournalistsFacetResponse" + "sort_order": { + "type": "integer" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "datasets.journalistsItemResponseDoc": { + "culvers.MenuResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "category": { + "example": "butterburgers", + "type": "string" }, - "data": { - "$ref": "#/definitions/es.JournalistRecord" + "count": { + "example": 6, + "type": "integer" }, - "msg": { - "example": "OK", + "description": { + "example": "Always made to order with fresh, never frozen beef.", "type": "string" - } - }, - "type": "object" - }, - "datasets.journalistsSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.JournalistsSearchResponse" + "featured": { + "type": "boolean" }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "datasets.listResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.DatasetListResponse" - }, - "msg": { - "example": "OK", + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "datasets.llmsFacetResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.LlmsFacetResponse" + "items": { + "items": { + "$ref": "#/definitions/culvers.MenuItemSummary" + }, + "type": "array" }, - "msg": { - "example": "OK", + "name": { + "description": "Name, Description, ImageURL and Featured are the category's own\nmetadata, carried on the same page as its items -- so a caller\nrendering a category page does not have to call /culvers/categories\njust to label it.", + "example": "ButterBurgers®", "type": "string" - } - }, - "type": "object" - }, - "datasets.llmsItemResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.LlmsRecord" - }, - "msg": { - "example": "OK", + "source_url": { "type": "string" } }, "type": "object" }, - "datasets.llmsSearchResponseDoc": { + "culvers.Modifier": { "properties": { - "code": { - "example": 200, - "type": "integer" + "description": { + "example": "Bun", + "type": "string" }, - "data": { - "$ref": "#/definitions/datasets.LlmsSearchResponse" + "is_mandatory": { + "type": "boolean" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "datasets.numbeoCitiesFacetResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "is_primary": { + "description": "IsPrimary marks the item's main size/quantity choice (e.g. Single/\nDouble/Triple patties), as opposed to a secondary topping/bun/sauce\ngroup.", + "type": "boolean" }, - "data": { - "$ref": "#/definitions/datasets.NumbeoCityFacetResponse" + "options": { + "items": { + "$ref": "#/definitions/culvers.ModifierOption" + }, + "type": "array" }, - "msg": { - "example": "OK", + "section_title": { "type": "string" } }, "type": "object" }, - "datasets.numbeoCitiesSearchResponseDoc": { + "culvers.ModifierOption": { "properties": { - "code": { - "example": 200, + "base_calories": { + "example": 700, "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.NumbeoCitySearchResponse" - }, - "msg": { - "example": "OK", + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "datasets.numbeoCityResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/es.NumbeoCityRecord" + "is_default": { + "description": "IsDefault marks the option Culver's pre-selects.", + "type": "boolean" }, - "msg": { - "example": "OK", + "name": { + "example": "Double", "type": "string" - } - }, - "type": "object" - }, - "datasets.numbeoCountriesSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/datasets.NumbeoCountrySearchResponse" }, - "msg": { - "example": "OK", + "nutrition_url": { "type": "string" + }, + "sort_order": { + "type": "integer" } }, "type": "object" }, - "datasets.numbeoCountryResponseDoc": { + "culvers.StoreAddress": { "properties": { - "code": { - "example": 200, - "type": "integer" + "city": { + "example": "Ann Arbor", + "type": "string" }, - "data": { - "$ref": "#/definitions/es.NumbeoCountryRecord" + "country": { + "example": "US", + "type": "string" }, - "msg": { - "example": "OK", + "line1": { + "example": "3015 Lohr Rd", "type": "string" - } - }, - "type": "object" - }, - "datasets.pitchbookAdvisorResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/es.PitchbookRecord" + "postal_code": { + "example": "48108", + "type": "string" }, - "msg": { - "example": "OK", + "state": { + "example": "MI", "type": "string" } }, "type": "object" }, - "datasets.pitchbookAdvisorsFacetResponseDoc": { + "culvers.StoreChannelStatus": { "properties": { - "code": { - "example": 200, - "type": "integer" + "curbside_unavailable": { + "type": "boolean" }, - "data": { - "$ref": "#/definitions/datasets.PitchbookAdvisorsFacetResponse" + "dining_room_closed": { + "type": "boolean" }, - "msg": { - "example": "OK", - "type": "string" + "drive_thru_closed": { + "type": "boolean" + }, + "lobby_closed": { + "type": "boolean" } }, "type": "object" }, - "datasets.pitchbookAdvisorsSearchResponseDoc": { + "culvers.StoreEvent": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/datasets.PitchbookAdvisorsSearchResponse" + "description": { + "type": "string" }, - "msg": { - "example": "OK", + "end_date": { + "example": "2026-09-21", "type": "string" - } - }, - "type": "object" - }, - "datasets.pitchbookCompaniesFacetResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.PitchbookCompaniesFacetResponse" + "end_time": { + "example": "8:00 PM", + "type": "string" }, - "msg": { - "example": "OK", + "start_date": { + "description": "StartDate and EndDate are YYYY-MM-DD.", + "example": "2026-09-21", "type": "string" - } - }, - "type": "object" - }, - "datasets.pitchbookCompaniesSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.PitchbookCompaniesSearchResponse" + "start_time": { + "example": "5:00 PM", + "type": "string" }, - "msg": { - "example": "OK", + "title": { + "example": "Lakeview Elementary PTO", "type": "string" } }, "type": "object" }, - "datasets.pitchbookCompanyResponseDoc": { + "culvers.StoreHours": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/es.PitchbookRecord" + "closed": { + "description": "Closed is true when Culver's publishes the day with no open interval\nfor this channel.", + "example": false, + "type": "boolean" }, - "msg": { - "example": "OK", + "closes": { + "example": "10:00 PM", "type": "string" - } - }, - "type": "object" - }, - "datasets.pitchbookFundResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/es.PitchbookRecord" + "day_of_week": { + "example": "Monday", + "type": "string" }, - "msg": { - "example": "OK", + "opens": { + "example": "10:00 AM", "type": "string" } }, "type": "object" }, - "datasets.pitchbookFundsFacetResponseDoc": { + "culvers.StoreHoursOverride": { "properties": { - "code": { - "example": 200, - "type": "integer" + "all_day_closure": { + "description": "AllDayClosure is true when the restaurant is shut for the whole date\nrather than merely keeping different hours.", + "type": "boolean" }, - "data": { - "$ref": "#/definitions/datasets.PitchbookFundsFacetResponse" + "business_date": { + "description": "BusinessDate is the affected date (YYYY-MM-DD).", + "example": "2026-09-07", + "type": "string" }, - "msg": { - "example": "OK", + "channels": { + "description": "Channels is the fulfillment scope this override applies to, e.g. \"ALL\".", + "example": "ALL", "type": "string" - } - }, - "type": "object" - }, - "datasets.pitchbookFundsSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.PitchbookFundsSearchResponse" + "closes": { + "example": "15:00:00", + "type": "string" }, - "msg": { - "example": "OK", + "message": { + "description": "Message is the customer-facing note Culver's shows for this override.", "type": "string" - } - }, - "type": "object" - }, - "datasets.pitchbookInvestorResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/es.PitchbookRecord" + "opens": { + "description": "Opens and Closes are 24-hour local times, empty on an all-day closure.", + "example": "10:00:00", + "type": "string" }, - "msg": { - "example": "OK", + "reason": { + "example": "Closed for a Holiday", "type": "string" } }, "type": "object" }, - "datasets.pitchbookInvestorsFacetResponseDoc": { + "culvers.StoreResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "address": { + "$ref": "#/definitions/culvers.StoreAddress" }, - "data": { - "$ref": "#/definitions/datasets.PitchbookInvestorsFacetResponse" + "channel_status": { + "allOf": [ + { + "$ref": "#/definitions/culvers.StoreChannelStatus" + } + ], + "description": "ChannelStatus is live availability per fulfillment channel, separate\nfrom the published Hours above." }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "datasets.pitchbookInvestorsSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.PitchbookInvestorsSearchResponse" + "flavors_of_the_day": { + "items": { + "$ref": "#/definitions/culvers.FlavorOfTheDay" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "datasets.pitchbookLimitedPartnerResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "handoff_options": { + "description": "HandoffOptions are the fulfillment channels Culver's lists for this\nrestaurant, e.g. \"Pickup\", \"Curbside\".", + "items": { + "type": "string" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/es.PitchbookRecord" + "hours": { + "$ref": "#/definitions/culvers.StoreServiceHours" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "datasets.pitchbookLimitedPartnersFacetResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "hours_overrides": { + "description": "HoursOverrides are one-off changes to a specific date's hours (holiday\nearly closes and the like); TemporalClosures are bounded closure\nwindows. Both are usually empty.", + "items": { + "$ref": "#/definitions/culvers.StoreHoursOverride" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/datasets.PitchbookLimitedPartnersFacetResponse" + "is_open_now": { + "type": "boolean" }, - "msg": { - "example": "OK", + "is_temporarily_closed": { + "type": "boolean" + }, + "latitude": { + "example": 42.242039, + "type": "number" + }, + "longitude": { + "example": -83.764565, + "type": "number" + }, + "name": { + "example": "Culver's of Ann Arbor, MI - Lohr Rd", "type": "string" - } - }, - "type": "object" - }, - "datasets.pitchbookLimitedPartnersSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.PitchbookLimitedPartnersSearchResponse" + "next_open_time": { + "description": "NextOpenTime is when the restaurant next opens, as Culver's publishes\nit. TimeZoneOffset is the restaurant's UTC offset in hours, which is\nwhat NextOpenTime should be read against.", + "example": "2026-09-06T10:00:00Z", + "type": "string" }, - "msg": { - "example": "OK", + "online_order_url": { "type": "string" - } - }, - "type": "object" - }, - "datasets.playstationGameResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/es.PlaystationGameRecord" + "phone_number": { + "example": "(734) 821-0060", + "type": "string" }, - "msg": { - "example": "OK", + "restaurant_id": { + "example": "974", "type": "string" - } - }, - "type": "object" - }, - "datasets.playstationGamesFacetResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.PlaystationFacetResponse" + "restaurant_number": { + "example": "1001", + "type": "string" }, - "msg": { - "example": "OK", + "slug": { + "example": "ann-arbor-mi-lohr-rd", + "type": "string" + }, + "source_url": { "type": "string" + }, + "temporal_closures": { + "items": { + "$ref": "#/definitions/culvers.StoreTemporalClosure" + }, + "type": "array" + }, + "time_zone_offset": { + "example": -5, + "type": "integer" + }, + "upcoming_events": { + "description": "UpcomingEvents are community events the restaurant is hosting.", + "items": { + "$ref": "#/definitions/culvers.StoreEvent" + }, + "type": "array" } }, "type": "object" }, - "datasets.playstationGamesSearchResponseDoc": { + "culvers.StoreServiceHours": { "properties": { - "code": { - "example": 200, - "type": "integer" + "curbside": { + "items": { + "$ref": "#/definitions/culvers.StoreHours" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/datasets.PlaystationSearchResponse" + "delivery": { + "items": { + "$ref": "#/definitions/culvers.StoreHours" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "dine_in": { + "items": { + "$ref": "#/definitions/culvers.StoreHours" + }, + "type": "array" + }, + "drive_thru": { + "items": { + "$ref": "#/definitions/culvers.StoreHours" + }, + "type": "array" + }, + "late_night_drive_thru": { + "items": { + "$ref": "#/definitions/culvers.StoreHours" + }, + "type": "array" } }, "type": "object" }, - "datasets.producthuntMakerResponseDoc": { + "culvers.StoreTemporalClosure": { "properties": { - "code": { - "example": 200, - "type": "integer" + "channel_status": { + "$ref": "#/definitions/culvers.StoreChannelStatus" }, - "data": { - "$ref": "#/definitions/es.ProductHuntMakerItem" + "ends_at": { + "example": "2026-09-07T15:00:00", + "type": "string" }, - "msg": { - "example": "OK", + "fully_open": { + "description": "FullyOpen is Culver's own summary flag for the window.", + "type": "boolean" + }, + "message": { + "description": "Message is the customer-facing note Culver's shows for this closure.", "type": "string" - } - }, - "type": "object" - }, - "datasets.producthuntMakersFacetResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.ProductHuntMakersFacetResponse" + "reason": { + "example": "Closed for a Holiday", + "type": "string" }, - "msg": { - "example": "OK", + "starts_at": { + "description": "StartsAt and EndsAt are local ISO-8601 datetimes.", + "example": "2026-09-07T10:00:00", "type": "string" + }, + "temporarily_closed": { + "type": "boolean" } }, "type": "object" }, - "datasets.producthuntMakersSearchResponseDoc": { + "culvers.calendarResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.ProductHuntMakersSearchResponse" + "$ref": "#/definitions/culvers.CalendarResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "datasets.producthuntProductResponseDoc": { + "culvers.categoriesResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/es.ProductHuntProductItem" + "$ref": "#/definitions/culvers.CategoriesResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "datasets.producthuntProductsFacetResponseDoc": { + "culvers.directoryResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.ProductHuntProductsFacetResponse" + "$ref": "#/definitions/culvers.DirectoryResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "datasets.producthuntProductsSearchResponseDoc": { + "culvers.flavorResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.ProductHuntProductsSearchResponse" + "$ref": "#/definitions/culvers.FlavorResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "datasets.producthuntTrendsFacetResponseDoc": { + "culvers.itemResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.ProductHuntTrendsFacetResponse" + "$ref": "#/definitions/culvers.ItemResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "datasets.producthuntTrendsSearchResponseDoc": { + "culvers.menuResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.ProductHuntTrendsSearchResponse" + "$ref": "#/definitions/culvers.MenuResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "datasets.redditTrendingSearchResponseDoc": { + "culvers.storeResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.RedditTrendingSearchResponse" + "$ref": "#/definitions/culvers.StoreResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "datasets.reviewsSearchResponseDoc": { + "cvs.Brand": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/datasets.ReviewsSearchResponse" + "name": { + "example": "Pepsi", + "type": "string" }, - "msg": { - "example": "OK", + "path": { + "example": "brand-shop/p/pepsi", "type": "string" } }, "type": "object" }, - "datasets.scamTrackerReportResponseDoc": { + "cvs.BrandsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/es.ScamTrackerReport" + "brands": { + "items": { + "$ref": "#/definitions/cvs.Brand" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "total_count": { + "example": 2758, + "type": "integer" } }, "type": "object" }, - "datasets.scamTrackerReportsFacetResponseDoc": { + "cvs.CategoriesResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/datasets.ScamTrackerReportsFacetResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/cvs.CategoryNode" + }, + "type": "array" } }, "type": "object" }, - "datasets.scamTrackerReportsSearchResponseDoc": { + "cvs.CategoryFacet": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/datasets.ScamTrackerReportsSearchResponse" + "key": { + "example": "brand", + "type": "string" }, - "msg": { - "example": "OK", + "label": { + "example": "Brand", "type": "string" + }, + "values": { + "items": { + "$ref": "#/definitions/cvs.CategoryFacetValue" + }, + "type": "array" } }, "type": "object" }, - "datasets.secCompaniesFacetResponseDoc": { + "cvs.CategoryFacetValue": { "properties": { - "code": { - "example": 200, + "count": { + "example": 37, "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.SecCompanyFacetResponse" - }, - "msg": { - "example": "OK", + "name": { + "example": "CoverGirl", "type": "string" } }, "type": "object" }, - "datasets.secCompaniesFinancialsResponseDoc": { + "cvs.CategoryNode": { "properties": { - "code": { - "example": 200, - "type": "integer" + "children": { + "items": { + "$ref": "#/definitions/cvs.CategoryNode" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/datasets.SecCompanyFinancialsResponse" + "id": { + "example": "cat510006", + "type": "string" }, - "msg": { - "example": "OK", + "path": { + "example": "health-medicine/allergy-sinus", + "type": "string" + }, + "title": { + "example": "Allergy & Sinus", "type": "string" } }, "type": "object" }, - "datasets.secCompaniesInsiderResponseDoc": { + "cvs.CategoryProduct": { "properties": { - "code": { - "example": 200, - "type": "integer" + "brand": { + "example": "Crest", + "type": "string" }, - "data": { - "$ref": "#/definitions/datasets.SecCompanyInsiderResponse" + "currency": { + "example": "USD", + "type": "string" }, - "msg": { - "example": "OK", + "id": { + "example": "478253", "type": "string" - } - }, - "type": "object" - }, - "datasets.secCompaniesItemResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/es.SecCompanyRecord" + "image_url": { + "type": "string" }, - "msg": { - "example": "OK", + "is_featured": { + "type": "boolean" + }, + "is_new_product": { + "type": "boolean" + }, + "is_sponsored": { + "type": "boolean" + }, + "list_price": { + "example": 4.99, + "type": "number" + }, + "sale_price": { + "example": 4.99, + "type": "number" + }, + "title": { + "example": "Crest Pro-Health Breath Mist, Clean Mint, 0.44 OZ, 2 PK", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "datasets.secCompaniesSearchResponseDoc": { + "cvs.CategoryResponse": { "properties": { - "code": { - "example": 200, + "facets": { + "items": { + "$ref": "#/definitions/cvs.CategoryFacet" + }, + "type": "array" + }, + "page": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.SecCompanySearchResponse" + "products": { + "items": { + "$ref": "#/definitions/cvs.CategoryProduct" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "total_count": { + "example": 8766, + "type": "integer" } }, "type": "object" }, - "datasets.secInstitutionalPositionsFacetResponseDoc": { + "cvs.DayHours": { "properties": { - "code": { - "example": 200, - "type": "integer" + "close_time": { + "example": "11:00 PM", + "type": "string" }, - "data": { - "$ref": "#/definitions/datasets.SecInstitutionalPositionsFacetResponse" + "open_time": { + "example": "08:00 AM", + "type": "string" }, - "msg": { - "example": "OK", + "weekday": { + "example": "MON", "type": "string" } }, "type": "object" }, - "datasets.secInstitutionalPositionsSearchResponseDoc": { + "cvs.Product": { "properties": { - "code": { - "example": 200, - "type": "integer" + "availability": { + "description": "Availability is the short form of the page's schema.org availability\n(e.g. \"InStock\", \"OutOfStock\", \"SoldOut\"). This reflects online\navailability only, not any particular store's shelf stock -- store-\nlevel availability is out of scope for this endpoint.", + "example": "InStock", + "type": "string" }, - "data": { - "$ref": "#/definitions/datasets.SecInstitutionalPositionsSearchResponse" + "brand": { + "example": "Safe Home", + "type": "string" }, - "msg": { - "example": "OK", + "category": { + "example": "Household > Home & Kitchen > Kitchen Accessories", "type": "string" - } - }, - "type": "object" - }, - "datasets.starbucksStoreResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/es.StarbucksStoreRecord" + "currency": { + "example": "USD", + "type": "string" }, - "msg": { - "example": "OK", + "description": { "type": "string" - } - }, - "type": "object" - }, - "datasets.starbucksStoresFacetResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.StarbucksStoreFacetResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "id": { + "example": "945948", "type": "string" - } - }, - "type": "object" - }, - "datasets.starbucksStoresSearchResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "price": { + "example": 14.99, + "type": "number" + }, + "rating": { + "example": 5, + "type": "number" + }, + "review_count": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.StarbucksStoreSearchResponse" + "source_url": { + "type": "string" }, - "msg": { - "example": "OK", + "title": { + "example": "Safe Home Premium Radon Test Kit", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "datasets.steamAchievementsSearchResponseDoc": { + "cvs.ProductIngredients": { "properties": { - "code": { - "example": 200, - "type": "integer" + "active_ingredients": { + "description": "ActiveIngredients and InactiveIngredients are the vendor's own\nstructured active/inactive ingredient fields when upstream populates\nthem separately from Paragraph. Many products (confirmed live) leave\nthese empty and only populate the combined Paragraph form below --\ncallers should prefer Paragraph as the more complete source.", + "example": "Menthol 1.1mg per drop", + "type": "string" }, - "data": { - "$ref": "#/definitions/datasets.SteamAchievementsSearchResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "id": { + "example": "2370023", "type": "string" - } - }, - "type": "object" - }, - "datasets.steamChartsSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.SteamChartsSearchResponse" + "inactive_ingredients": { + "type": "string" }, - "msg": { - "example": "OK", + "paragraph": { + "description": "Paragraph is the vendor's full free-text ingredient statement. For\nOTC drug products this frequently also carries a Drug Facts-style\n\"Purpose\" note (e.g. \"Active Ingredient (in each drop): Menthol, 1.5\nmg - Purpose: Oral anesthetic ...\"), confirmed live.", "type": "string" - } - }, - "type": "object" - }, - "datasets.steamGameResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/es.SteamGameRecord" + "source_url": { + "type": "string" }, - "msg": { - "example": "OK", + "title": { + "example": "e.l.f. 16hr Camo Concealer", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "datasets.steamGamesFacetResponseDoc": { + "cvs.Store": { "properties": { - "code": { - "example": 200, - "type": "integer" + "address_line1": { + "example": "9045 WILSHIRE BOULEVARD", + "type": "string" }, - "data": { - "$ref": "#/definitions/datasets.SteamFacetResponse" + "city": { + "example": "BEVERLY HILLS", + "type": "string" }, - "msg": { - "example": "OK", + "distance_miles": { + "example": 1.12, + "type": "number" + }, + "fax": { + "example": "3102736289", "type": "string" - } - }, - "type": "object" - }, - "datasets.steamGamesSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.SteamSearchResponse" + "has_pharmacy": { + "description": "HasPharmacy reflects only whether this location has a pharmacy\ncounter -- a fact-of-existence flag, not pharmacy hours, phone, or\nany prescription-specific data. See the package doc comment.", + "type": "boolean" }, - "msg": { - "example": "OK", + "latitude": { + "example": 34.06741, + "type": "number" + }, + "longitude": { + "example": -118.38934, + "type": "number" + }, + "phone": { + "example": "3102735252", "type": "string" - } - }, - "type": "object" - }, - "datasets.steamNewsSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.SteamNewsSearchResponse" + "services": { + "description": "Services is the raw list of upstream service-indicator codes for\nthis store (e.g. \"PH_Photo_Ind\", \"atmInd\", \"RS_BOPIS_Ind\"), passed\nthrough as-is rather than translated to friendly names.", + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "state": { + "example": "CA", "type": "string" - } - }, - "type": "object" - }, - "datasets.steamPlayerCountsSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.SteamPlayerCountsSearchResponse" + "store_hours": { + "description": "StoreHours is the retail (front-of-store) weekly schedule only.", + "items": { + "$ref": "#/definitions/cvs.DayHours" + }, + "type": "array" }, - "msg": { - "example": "OK", + "store_id": { + "example": "9767", "type": "string" - } - }, - "type": "object" - }, - "datasets.steamPricesSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.SteamPricesSearchResponse" + "time_zone": { + "example": "PDT", + "type": "string" }, - "msg": { - "example": "OK", + "zip": { + "example": "90211", "type": "string" } }, "type": "object" }, - "datasets.steamReviewsSearchResponseDoc": { + "cvs.StoresResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/datasets.SteamReviewsSearchResponse" + "stores": { + "items": { + "$ref": "#/definitions/cvs.Store" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "total_count": { + "example": 5, + "type": "integer" } }, "type": "object" }, - "datasets.techstackFacetResponseDoc": { + "cvs.brandsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.TechstackFacetResponse" + "$ref": "#/definitions/cvs.BrandsResponse" }, "msg": { "example": "OK", @@ -51097,14 +55611,14 @@ }, "type": "object" }, - "datasets.techstackItemResponseDoc": { + "cvs.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/es.TechstackRecord" + "$ref": "#/definitions/cvs.CategoriesResponse" }, "msg": { "example": "OK", @@ -51113,14 +55627,14 @@ }, "type": "object" }, - "datasets.techstackSearchResponseDoc": { + "cvs.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.TechstackSearchResponse" + "$ref": "#/definitions/cvs.CategoryResponse" }, "msg": { "example": "OK", @@ -51129,14 +55643,14 @@ }, "type": "object" }, - "datasets.trustmrrFacetResponseDoc": { + "cvs.productIngredientsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.TrustmrrFacetResponse" + "$ref": "#/definitions/cvs.ProductIngredients" }, "msg": { "example": "OK", @@ -51145,14 +55659,14 @@ }, "type": "object" }, - "datasets.trustmrrHistoryResponseDoc": { + "cvs.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/datasets.TrustmrrHistoryResponse" + "$ref": "#/definitions/cvs.Product" }, "msg": { "example": "OK", @@ -51161,14 +55675,14 @@ }, "type": "object" }, - "datasets.trustmrrItemResponseDoc": { + "cvs.storesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/es.TrustmrrStartupRecord" + "$ref": "#/definitions/cvs.StoresResponse" }, "msg": { "example": "OK", @@ -51177,197 +55691,170 @@ }, "type": "object" }, - "datasets.trustmrrSearchResponseDoc": { + "dailycaller.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/datasets.TrustmrrSearchResponse" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "datasets.vehicleListingPriceHistoryResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.VehicleListingPriceHistoryResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "social_links": { + "items": { + "$ref": "#/definitions/dailycaller.AuthorSocialLink" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "datasets.vehicleListingResponseDoc": { + "dailycaller.AuthorSocialLink": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/es.VehicleListingRecord" + "type": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "datasets.vehicleListingsFacetResponseDoc": { + "dailyexpress.AuthorArticle": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/datasets.VehicleListingFacetResponse" + "title": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "datasets.vehicleListingsSearchResponseDoc": { + "dailyexpress.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/dailyexpress.AuthorArticle" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/datasets.VehicleListingSearchResponse" + "bio": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "email": { "type": "string" - } - }, - "type": "object" - }, - "datasets.xUserResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/es.XUserRecord" + "job_title": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { "type": "string" - } - }, - "type": "object" - }, - "datasets.xUsersFacetResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.XUserFacetResponse" + "twitter": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "datasets.xUsersSearchResponseDoc": { + "dailymail.AuthorArticle": { "properties": { - "code": { - "example": 200, - "type": "integer" + "description": { + "type": "string" }, - "data": { - "$ref": "#/definitions/datasets.XUserSearchResponse" + "published_at": { + "type": "string" }, - "msg": { - "example": "OK", + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "datasets.youtubeCreatorResponseDoc": { + "dailymail.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/dailymail.AuthorArticle" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/es.YoutubeChannelCandidate" + "bio": { + "type": "string" }, - "msg": { - "example": "OK", + "job_title": { "type": "string" - } - }, - "type": "object" - }, - "datasets.youtubeCreatorsFacetResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "name": { + "type": "string" + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/datasets.YoutubeCreatorFacetResponse" + "profile_id": { + "type": "string" }, - "msg": { - "example": "OK", + "social_accounts": { + "items": { + "$ref": "#/definitions/dailymail.AuthorSocialAccount" + }, + "type": "array" + }, + "total_pages": { + "type": "integer" + }, + "url": { "type": "string" } }, "type": "object" }, - "datasets.youtubeCreatorsSearchResponseDoc": { + "dailymail.AuthorSocialAccount": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/datasets.YoutubeCreatorSearchResponse" + "platform": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "dawn.AuthorResponse": { + "dailyrecord.AuthorArticle": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/dawn.HeadlineItem" - }, - "type": "array" + "label": { + "type": "string" }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "label_url": { + "type": "string" }, - "name": { + "title": { "type": "string" }, "url": { @@ -51376,24 +55863,30 @@ }, "type": "object" }, - "dawn.HeadlineItem": { + "dailyrecord.AuthorResponse": { "properties": { - "author": { + "articles": { + "items": { + "$ref": "#/definitions/dailyrecord.AuthorArticle" + }, + "type": "array" + }, + "bio": { "type": "string" }, - "image_url": { + "email": { "type": "string" }, - "published_at": { + "job_title": { "type": "string" }, - "summary": { + "name": { "type": "string" }, - "title": { + "slug": { "type": "string" }, - "type": { + "twitter": { "type": "string" }, "url": { @@ -51402,8 +55895,17 @@ }, "type": "object" }, - "deadline.AuthorArticle": { + "dailywire.AuthorArticle": { "properties": { + "published_at": { + "type": "string" + }, + "section": { + "type": "string" + }, + "summary": { + "type": "string" + }, "title": { "type": "string" }, @@ -51413,11 +55915,11 @@ }, "type": "object" }, - "deadline.AuthorResponse": { + "dailywire.AuthorResponse": { "properties": { "articles": { "items": { - "$ref": "#/definitions/deadline.AuthorArticle" + "$ref": "#/definitions/dailywire.AuthorArticle" }, "type": "array" }, @@ -51427,23 +55929,20 @@ }, "type": "array" }, - "headshot_url": { + "headshot": { "type": "string" }, - "job_title": { + "instagram": { "type": "string" }, "name": { "type": "string" }, - "page": { - "type": "integer" + "slug": { + "type": "string" }, - "social_links": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "twitter": { + "type": "string" }, "url": { "type": "string" @@ -51451,2692 +55950,2814 @@ }, "type": "object" }, - "deliveroo.FilterGroup": { + "datasets.AirbnbHostsFacetResponse": { "properties": { - "multiple": { - "type": "boolean" + "dataset": { + "description": "Identifier of the dataset queried (`airbnb-hosts`).", + "type": "string" }, - "name": { + "facet": { + "description": "Facet that was aggregated.", "type": "string" }, - "options": { + "items": { + "description": "Facet values with host counts.", "items": { - "$ref": "#/definitions/deliveroo.FilterOption" + "$ref": "#/definitions/es.AirbnbHostsFacetItem" }, "type": "array" - }, - "query_param": { - "type": "string" } }, "type": "object" }, - "deliveroo.FilterOption": { + "datasets.AirbnbHostsSearchResponse": { "properties": { - "count": { - "type": "integer" - }, - "currently_active": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "query_param": { + "dataset": { + "description": "Identifier of the dataset queried (`airbnb-hosts`).", "type": "string" }, - "query_value": { - "type": "string" - } - }, - "type": "object" - }, - "deliveroo.FiltersResponse": { - "properties": { - "filters": { + "items": { + "description": "Matching Airbnb host records on this page.", "items": { - "$ref": "#/definitions/deliveroo.FilterGroup" + "$ref": "#/definitions/es.AirbnbHostItem" }, "type": "array" }, - "sort_options": { - "items": { - "$ref": "#/definitions/deliveroo.SortOption" - }, - "type": "array" + "page": { + "description": "Page number returned.", + "type": "integer" }, - "total_count": { + "page_size": { + "description": "Number of items per page.", + "type": "integer" + }, + "sort": { + "description": "Sort order applied.", + "type": "string" + }, + "total": { + "description": "Total number of records matching the filters.", "type": "integer" } }, "type": "object" }, - "deliveroo.FulfillmentDay": { + "datasets.AirbnbMarketFacetResponse": { "properties": { - "day": { + "coverage": { + "allOf": [ + { + "$ref": "#/definitions/es.AirbnbDimensionCoverage" + } + ], + "description": "Coverage over the filtered listing universe for enrichment-derived facets.\nOmitted for facets that do not depend on a partial field." + }, + "dataset": { + "description": "Identifier of the dataset queried (`airbnb-markets`).", "type": "string" }, - "label": { + "facet": { + "description": "Facet that was aggregated.", "type": "string" }, - "times": { + "items": { + "description": "Facet values with the number of matching records for each.", "items": { - "$ref": "#/definitions/deliveroo.FulfillmentTimeSlot" + "$ref": "#/definitions/es.AirbnbMarketFacetItem" }, "type": "array" } }, "type": "object" }, - "deliveroo.FulfillmentMethodTimes": { + "datasets.AirbnbMarketNearbyResponse": { "properties": { - "asap": { - "$ref": "#/definitions/deliveroo.FulfillmentTimeSlot" - }, - "days": { + "cells": { + "description": "Density cells within the radius, each with its geohash, centre and listing counts.", "items": { - "$ref": "#/definitions/deliveroo.FulfillmentDay" + "$ref": "#/definitions/es.AirbnbDensityCell" }, "type": "array" }, - "label": { + "dataset": { + "description": "Identifier of the dataset queried (`airbnb-markets`).", "type": "string" }, - "method": { - "type": "string" - } - }, - "type": "object" - }, - "deliveroo.FulfillmentTimeSlot": { - "properties": { - "label": { - "type": "string" + "lat": { + "description": "Latitude of the search centre, in degrees.", + "type": "number" }, - "timestamp": { + "lon": { + "description": "Longitude of the search centre, in degrees.", + "type": "number" + }, + "precision": { + "description": "Geohash precision of the cells returned.", + "type": "integer" + }, + "radius_m": { + "description": "Search radius, in metres.", + "type": "integer" + }, + "total": { + "description": "Number of cells returned.", "type": "integer" } }, "type": "object" }, - "deliveroo.FulfillmentTimesResponse": { - "properties": { - "methods": { - "items": { - "$ref": "#/definitions/deliveroo.FulfillmentMethodTimes" - }, - "type": "array" - } - }, - "type": "object" - }, - "deliveroo.MenuCategory": { + "datasets.AirbnbMarketSearchResponse": { "properties": { - "id": { + "coverage": { + "allOf": [ + { + "$ref": "#/definitions/es.AirbnbDimensionCoverage" + } + ], + "description": "Coverage over the filtered listing universe for enrichment-derived groupings.\nOmitted for country/market groupings that do not depend on a partial field." + }, + "dataset": { + "description": "Identifier of the dataset queried (`airbnb-markets`).", + "type": "string" + }, + "group_by": { + "description": "Dimension the cells are grouped by: `country`, `market`, `admin1`, `locality`, `room_type` or `property_type`.", "type": "string" }, "items": { + "description": "Aggregate market cells on this page, one per group.", "items": { - "$ref": "#/definitions/deliveroo.MenuItem" + "$ref": "#/definitions/es.AirbnbMarketCell" }, "type": "array" }, - "name": { + "min_listings": { + "description": "Minimum number of listings a cell needs to be included.", + "type": "integer" + }, + "page": { + "description": "Page number returned.", + "type": "integer" + }, + "page_size": { + "description": "Number of items per page.", + "type": "integer" + }, + "sort": { + "description": "Sort order applied.", "type": "string" + }, + "total": { + "description": "Total number of cells.", + "type": "integer" } }, "type": "object" }, - "deliveroo.MenuItem": { + "datasets.AppleBooksDatasetItem": { "properties": { - "available": { - "type": "boolean" + "artist_id": { + "type": "integer" }, - "description": { + "artist_name": { "type": "string" }, - "id": { + "artist_url": { "type": "string" }, - "modifier_groups": { - "items": { - "$ref": "#/definitions/deliveroo.ModifierGroup" - }, - "type": "array" + "artwork_url": { + "type": "string" }, - "name": { + "audience": { "type": "string" }, - "price": { - "type": "number" + "audiobook_id": { + "type": "integer" }, - "product_meta": { - "type": "string" - } - }, - "type": "object" - }, - "deliveroo.MenuResponse": { - "properties": { - "categories": { + "audiobook_ids": { "items": { - "$ref": "#/definitions/deliveroo.MenuCategory" + "type": "integer" }, "type": "array" }, - "currency_code": { - "type": "string" - }, - "item_count": { + "book_id": { "type": "integer" }, - "name": { + "book_ids": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "crawled_at": { "type": "string" }, - "restaurant_id": { + "currency": { "type": "string" }, - "uname": { + "description": { "type": "string" - } - }, - "type": "object" - }, - "deliveroo.ModifierGroup": { - "properties": { - "id": { + }, + "discovery_country": { "type": "string" }, - "max_selection": { - "type": "integer" + "discovery_source": { + "type": "string" }, - "min_selection": { + "duration_seconds": { "type": "integer" }, - "multiselect": { + "free": { "type": "boolean" }, - "name": { - "type": "string" - }, - "options": { + "genres": { "items": { - "$ref": "#/definitions/deliveroo.ModifierOption" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "deliveroo.ModifierOption": { - "properties": { - "available": { - "type": "boolean" - }, - "description": { - "type": "string" }, "id": { "type": "string" }, - "name": { + "isbn": { "type": "string" }, - "price": { - "type": "number" - } - }, - "type": "object" - }, - "deliveroo.RestaurantResponse": { - "properties": { - "address1": { + "kind": { + "enum": [ + "book", + "audiobook", + "author", + "series", + "audiobook_series" + ], "type": "string" }, - "branch_type": { + "name": { "type": "string" }, - "city": { + "narrator": { "type": "string" }, - "country": { + "page_count": { + "type": "integer" + }, + "preview_url": { "type": "string" }, - "currency_code": { + "price": { + "type": "number" + }, + "provider": { "type": "string" }, - "currency_symbol": { + "publisher": { "type": "string" }, - "delivers_to_customer_location": { - "type": "boolean" + "rating": { + "type": "number" }, - "fulfillment_type": { - "type": "string" + "rating_count": { + "type": "integer" }, - "image_url": { + "rating_histogram": { + "additionalProperties": { + "format": "int64", + "type": "integer" + }, + "type": "object" + }, + "related_item_count": { + "type": "integer" + }, + "release_date": { "type": "string" }, - "menu_disabled": { - "type": "boolean" + "series_id": { + "type": "integer" }, - "name": { + "series_name": { "type": "string" }, - "neighborhood": { + "series_sequence": { "type": "string" }, - "rating": { - "type": "number" - }, - "restaurant_id": { - "type": "string" - }, - "review_count_text": { - "type": "string" - }, - "uname": { + "url": { "type": "string" } }, "type": "object" }, - "deliveroo.SearchResponse": { + "datasets.AppleBooksFacetResponse": { "properties": { - "restaurants": { + "dataset": { + "type": "string" + }, + "facet": { + "type": "string" + }, + "items": { "items": { - "$ref": "#/definitions/deliveroo.SearchRestaurant" + "$ref": "#/definitions/es.AppleBooksDatasetFacetItem" }, "type": "array" } }, "type": "object" }, - "deliveroo.SearchRestaurant": { + "datasets.AppleBooksSearchResponse": { "properties": { - "branch_type": { + "dataset": { "type": "string" }, - "delivery_time_minutes": { - "type": "integer" - }, - "distance_miles": { - "type": "number" - }, - "image_url": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/datasets.AppleBooksDatasetItem" + }, + "type": "array" }, - "name": { - "type": "string" + "page": { + "type": "integer" }, - "rating": { - "type": "number" + "page_size": { + "type": "integer" }, - "restaurant_id": { + "sort": { "type": "string" }, - "uname": { - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "deliveroo.SortOption": { + "datasets.ApplePlaceFacetResponse": { "properties": { - "default": { - "type": "boolean" - }, - "id": { + "dataset": { "type": "string" }, - "name": { + "facet": { "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/es.ApplePlaceDatasetFacetItem" + }, + "type": "array" } }, "type": "object" }, - "deliveroo.filtersResponseDoc": { + "datasets.ApplePlaceSearchResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "dataset": { + "type": "string" }, - "data": { - "$ref": "#/definitions/deliveroo.FiltersResponse" + "items": { + "items": { + "$ref": "#/definitions/es.ApplePlaceDatasetItem" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "deliveroo.fulfillmentTimesResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/deliveroo.FulfillmentTimesResponse" + "page_size": { + "type": "integer" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "sort": { + "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "deliveroo.menuResponseDoc": { + "datasets.ApplePodcastsShowsFacetResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "dataset": { + "description": "Identifier of the dataset queried (`apple-podcasts-shows`).", + "type": "string" }, - "data": { - "$ref": "#/definitions/deliveroo.MenuResponse" + "facet": { + "description": "Facet that was aggregated.", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "items": { + "description": "Facet values with the number of matching records for each.", + "items": { + "$ref": "#/definitions/es.ApplePodcastsShowsDatasetFacetItem" + }, + "type": "array" } }, "type": "object" }, - "deliveroo.restaurantResponseDoc": { + "datasets.ApplePodcastsShowsSearchResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "dataset": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/es.ApplePodcastsShowRecord" + }, + "type": "array" + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/deliveroo.RestaurantResponse" + "page_size": { + "type": "integer" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "sort": { + "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "deliveroo.searchResponseDoc": { + "datasets.AppsSearchResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "dataset": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/es.AppRecord" + }, + "type": "array" + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/deliveroo.SearchResponse" + "page_size": { + "type": "integer" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "sort": { + "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "denverpost.AuthorArticle": { + "datasets.BBBBusinessesFacetResponse": { "properties": { - "published_at": { + "dataset": { + "description": "Dataset id, always bbb-businesses.", + "example": "bbb-businesses", "type": "string" }, - "summary": { + "facet": { + "description": "The facet that was aggregated, as requested.", + "example": "city", "type": "string" }, - "title": { - "type": "string" + "has_more": { + "description": "True while another page exists; request offset + limit next.", + "example": true, + "type": "boolean" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "denverpost.AuthorResponse": { - "properties": { - "articles": { + "items": { + "description": "One page of values, most frequent first, ties in value order.", "items": { - "$ref": "#/definitions/denverpost.AuthorArticle" + "$ref": "#/definitions/es.BBBBusinessesFacetItem" }, "type": "array" }, - "bio": { - "type": "string" - }, - "email": { - "type": "string" + "limit": { + "description": "Values per page that was applied.", + "example": 50, + "type": "integer" }, - "job_title": { - "type": "string" + "missing": { + "description": "Number of matching records that have no value for this facet.", + "example": 0, + "type": "integer" }, - "name": { - "type": "string" + "offset": { + "description": "Number of values skipped.", + "example": 0, + "type": "integer" }, - "slug": { - "type": "string" + "total": { + "description": "Number of records matching the filters.", + "example": 44730, + "type": "integer" }, - "twitter": { - "type": "string" + "total_values": { + "description": "Number of distinct values of the facet across all pages.", + "example": 1128, + "type": "integer" }, - "url": { - "type": "string" + "values_truncated": { + "description": "Present and true only when the facet has more than 10000 values, the furthest offset can reach; add a filter such as state to split it. total_values is then an estimate.", + "type": "boolean" } }, "type": "object" }, - "depop.Brand": { + "datasets.BBBBusinessesSearchResponse": { "properties": { - "id": { - "type": "integer" - }, - "name": { + "dataset": { "type": "string" }, - "slug": { - "type": "string" - } - }, - "type": "object" - }, - "depop.BrandsResponse": { - "properties": { - "brands": { + "items": { "items": { - "$ref": "#/definitions/depop.Brand" + "$ref": "#/definitions/es.BBBBusinessRecord" }, "type": "array" }, + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "sort": { + "type": "string" + }, "total": { "type": "integer" } }, "type": "object" }, - "depop.CategoriesResponse": { + "datasets.BoxOfficeMojoFacetResponse": { "properties": { - "departments": { + "dataset": { + "type": "string" + }, + "facet": { + "type": "string" + }, + "items": { "items": { - "$ref": "#/definitions/depop.Department" + "$ref": "#/definitions/es.BoxOfficeMojoDatasetFacetItem" }, "type": "array" } }, "type": "object" }, - "depop.Category": { + "datasets.BoxOfficeMojoSearchResponse": { "properties": { - "name": { - "type": "string" - }, - "slug": { - "description": "maps to Search/Shop's category filter (-> groups=)", + "dataset": { "type": "string" }, - "subcategories": { + "items": { "items": { - "$ref": "#/definitions/depop.Subcategory" + "$ref": "#/definitions/es.BoxOfficeMojoTitleRecord" }, "type": "array" + }, + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "sort": { + "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "depop.Department": { + "datasets.ChartsSearchResponse": { "properties": { - "categories": { + "dataset": { + "description": "Identifier of the dataset queried (`apps-charts`).", + "type": "string" + }, + "items": { + "description": "App chart entries on this page.", "items": { - "$ref": "#/definitions/depop.Category" + "$ref": "#/definitions/es.ChartEntry" }, "type": "array" }, - "gender": { - "description": "female, male -- empty for kidswear and everything-else", - "type": "string" + "page": { + "description": "Page number returned.", + "type": "integer" }, - "id": { - "description": "womenswear, menswear, kidswear, everything-else", - "type": "string" + "page_size": { + "description": "Number of items per page.", + "type": "integer" }, - "is_kids": { - "description": "true for kidswear", - "type": "boolean" + "snapshot_date": { + "description": "Date of the chart snapshot returned, in YYYY-MM-DD.", + "type": "string" }, - "name": { + "sort": { + "description": "Sort order applied.", "type": "string" + }, + "total": { + "description": "Total number of records matching the filters.", + "type": "integer" } }, "type": "object" }, - "depop.DepartmentFacets": { + "datasets.ChromeExtensionChangesResponse": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/depop.FacetCount" - }, - "type": "array" - }, "count": { "type": "integer" }, - "department": { + "dataset": { "type": "string" }, - "subcategories": { + "items": { "items": { - "$ref": "#/definitions/depop.FacetCount" + "$ref": "#/definitions/es.ChromeExtensionHistoryPoint" }, "type": "array" } }, "type": "object" }, - "depop.FacetCount": { + "datasets.ChromeExtensionFacetResponse": { "properties": { - "count": { - "type": "integer" + "dataset": { + "description": "Identifier of the dataset queried (`chrome-extensions`).", + "type": "string" }, - "id": { + "facet": { + "description": "Facet that was aggregated.", "type": "string" + }, + "items": { + "description": "Facet values with the number of matching records for each.", + "items": { + "$ref": "#/definitions/es.ChromeExtensionFacetItem" + }, + "type": "array" } }, "type": "object" }, - "depop.ItemDetailResponse": { + "datasets.ChromeExtensionHistoryResponse": { "properties": { - "brand_name": { + "count": { + "type": "integer" + }, + "dataset": { "type": "string" }, - "colours": { + "id": { + "type": "string" + }, + "points": { "items": { - "type": "string" + "$ref": "#/definitions/es.ChromeExtensionHistoryPoint" }, "type": "array" + } + }, + "type": "object" + }, + "datasets.ChromeExtensionMetricsResponse": { + "properties": { + "changes": { + "$ref": "#/definitions/es.ChromeExtensionChangeMetrics" }, - "condition": { + "dataset": { "type": "string" }, - "currency": { - "type": "string" + "days": { + "type": "integer" }, - "description": { + "generated_at": { "type": "string" }, - "id": { - "type": "string" + "item_types": { + "items": { + "$ref": "#/definitions/es.ChromeExtensionMetricBucket" + }, + "type": "array" }, - "location": { - "type": "string" + "manifest_versions": { + "items": { + "$ref": "#/definitions/es.ChromeExtensionMetricBucket" + }, + "type": "array" }, - "original_price_cents": { - "type": "integer" + "rating_bands": { + "items": { + "$ref": "#/definitions/es.ChromeExtensionMetricBucket" + }, + "type": "array" }, - "photos": { + "review_bands": { "items": { - "type": "string" + "$ref": "#/definitions/es.ChromeExtensionMetricBucket" }, "type": "array" }, - "price_cents": { - "type": "integer" + "risk_signals": { + "items": { + "$ref": "#/definitions/es.ChromeExtensionMetricBucket" + }, + "type": "array" }, - "seller": { - "$ref": "#/definitions/depop.Seller" + "statuses": { + "items": { + "$ref": "#/definitions/es.ChromeExtensionMetricBucket" + }, + "type": "array" }, - "shipping_cents": { - "type": "integer" + "summary": { + "$ref": "#/definitions/es.ChromeExtensionMetricSummary" }, - "similar_items": { - "description": "SimilarItems is the item page's own \"Similar items\" carousel, when\npresent -- omitted (not an error) when the page doesn't carry one.", + "top_categories": { "items": { - "$ref": "#/definitions/depop.ItemSummary" + "$ref": "#/definitions/es.ChromeExtensionMetricBucket" }, "type": "array" }, - "sizes": { + "top_developers": { "items": { - "type": "string" + "$ref": "#/definitions/es.ChromeExtensionMetricBucket" }, "type": "array" }, - "title": { - "type": "string" + "top_permissions": { + "items": { + "$ref": "#/definitions/es.ChromeExtensionMetricBucket" + }, + "type": "array" }, - "url": { - "type": "string" + "user_bands": { + "items": { + "$ref": "#/definitions/es.ChromeExtensionMetricBucket" + }, + "type": "array" } }, "type": "object" }, - "depop.ItemSummary": { + "datasets.ChromeExtensionSearchResponse": { "properties": { - "brand_name": { + "dataset": { "type": "string" }, - "colours": { + "items": { "items": { - "type": "string" + "$ref": "#/definitions/es.ChromeExtensionRecord" }, "type": "array" }, - "condition": { - "type": "string" - }, - "currency": { - "type": "string" + "page": { + "type": "integer" }, - "description": { - "type": "string" + "page_size": { + "type": "integer" }, - "id": { + "sort": { "type": "string" }, - "like_count": { - "description": "LikeCount is the listing's like count. Depop's search API only\nincludes this field when the request asks for it -- this endpoint\nalways requests it, so this is populated on every search result.\nConfirmed live 2026-08-15.", + "total": { "type": "integer" - }, - "location": { + } + }, + "type": "object" + }, + "datasets.CreatorsSearchResponse": { + "properties": { + "dataset": { + "description": "Identifier of the dataset queried (`creators`).", "type": "string" }, - "photos": { + "items": { + "description": "Matching creator records on this page.", "items": { - "type": "string" + "$ref": "#/definitions/es.CreatorRecord" }, "type": "array" }, - "price_cents": { + "page": { + "description": "Page number returned.", "type": "integer" }, - "shipping_cents": { + "page_size": { + "description": "Number of items per page.", "type": "integer" }, - "sizes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "thumbnail_url": { + "sort": { + "description": "Sort order applied.", "type": "string" }, - "title": { + "total": { + "description": "Total number of records matching the filters.", + "type": "integer" + } + }, + "type": "object" + }, + "datasets.DatasetFacetResponse": { + "properties": { + "dataset": { "type": "string" }, - "url": { + "facet": { "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/es.DatasetFacetItem" + }, + "type": "array" } }, "type": "object" }, - "depop.SearchFacetsResponse": { + "datasets.DatasetInfo": { "properties": { - "departments": { + "capabilities": { + "description": "Operations the dataset supports, such as `search`, `detail`, `facets` or `nearby`.", "items": { - "$ref": "#/definitions/depop.DepartmentFacets" + "type": "string" }, "type": "array" }, - "query": { + "description": { + "description": "Short description of what the dataset contains.", + "type": "string" + }, + "id": { + "description": "Dataset identifier, for example `google-map-businesses`.", + "type": "string" + }, + "name": { + "description": "Display name of the dataset.", "type": "string" } }, "type": "object" }, - "depop.SearchResponse": { + "datasets.DatasetListResponse": { "properties": { - "has_more": { - "description": "HasMore indicates additional results exist beyond this page. When\ntrue, NextCursor can be passed as the next request's After field.", - "type": "boolean" - }, "items": { + "description": "Datasets available through the datasets endpoints.", "items": { - "$ref": "#/definitions/depop.ItemSummary" + "$ref": "#/definitions/datasets.DatasetInfo" }, "type": "array" - }, - "next_cursor": { - "type": "string" - }, - "query": { - "type": "string" - }, - "total_results": { - "type": "integer" } }, "type": "object" }, - "depop.SearchSellersResponse": { + "datasets.DoorDashStoreFacetResponse": { "properties": { - "query": { + "dataset": { "type": "string" }, - "sellers": { + "facet": { + "type": "string" + }, + "items": { "items": { - "$ref": "#/definitions/depop.SellerSummary" + "$ref": "#/definitions/es.DoorDashStoreDatasetFacetItem" }, "type": "array" } }, "type": "object" }, - "depop.Seller": { + "datasets.DoorDashStoreSearchResponse": { "properties": { - "first_name": { + "dataset": { "type": "string" }, - "id": { + "has_more": { + "type": "boolean" + }, + "items": { + "items": { + "$ref": "#/definitions/es.DoorDashStoreDatasetItem" + }, + "type": "array" + }, + "next_cursor": { + "type": "string" + }, + "page": { "type": "integer" }, - "picture_url": { + "page_size": { + "type": "integer" + }, + "pagination": { "type": "string" }, - "username": { + "sort": { "type": "string" }, - "verified": { - "type": "boolean" + "total": { + "type": "integer" } }, "type": "object" }, - "depop.SellerSummary": { + "datasets.FacebookPageFacetResponse": { "properties": { - "avatar_url": { + "dataset": { "type": "string" }, - "first_name": { + "facet": { "type": "string" }, - "id": { - "type": "integer" - }, - "last_name": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/es.FacebookPageDatasetFacetItem" + }, + "type": "array" }, - "username": { + "next_after": { "type": "string" } }, "type": "object" }, - "depop.ShopItem": { + "datasets.FacebookPageSearchResponse": { "properties": { - "currency": { + "dataset": { "type": "string" }, - "id": { - "description": "URL slug, same identifier space as ItemSummary.ID", - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/es.FacebookPageDatasetItem" + }, + "type": "array" }, - "original_price_cents": { + "page": { "type": "integer" }, - "price_cents": { + "page_size": { "type": "integer" }, - "thumbnail_url": { + "sort": { "type": "string" }, - "url": { - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "depop.ShopResponse": { + "datasets.GithubUserFacetResponse": { "properties": { - "activity_status": { - "type": "string" - }, - "avatar_url": { - "type": "string" - }, - "bio": { + "dataset": { + "description": "Identifier of the dataset queried (`github-users`).", "type": "string" }, - "display_name": { + "facet": { + "description": "Facet that was aggregated.", "type": "string" }, - "followers_count": { - "type": "integer" - }, - "following_count": { - "type": "integer" - }, "items": { + "description": "Facet values with the number of matching records for each.", "items": { - "$ref": "#/definitions/depop.ShopItem" + "$ref": "#/definitions/es.GithubUserDatasetFacetItem" }, "type": "array" - }, - "rating": { - "type": "number" - }, - "rating_count": { - "type": "integer" - }, - "sold_count": { - "type": "integer" - }, - "username": { - "type": "string" - }, - "verified": { - "type": "boolean" } }, "type": "object" }, - "depop.SimilarItemsResponse": { + "datasets.GithubUserSearchResponse": { "properties": { - "has_more": { - "description": "HasMore indicates additional results exist beyond this page. When\ntrue, NextCursor can be passed as the next request's After field.", - "type": "boolean" + "dataset": { + "description": "Identifier of the dataset queried (`github-users`).", + "type": "string" }, "items": { + "description": "Matching GitHub user records on this page.", "items": { - "$ref": "#/definitions/depop.ItemSummary" + "$ref": "#/definitions/es.GithubUserDatasetItem" }, "type": "array" }, - "next_cursor": { + "page": { + "description": "Page number returned.", + "type": "integer" + }, + "page_size": { + "description": "Number of items per page.", + "type": "integer" + }, + "sort": { + "description": "Sort order applied.", "type": "string" + }, + "total": { + "description": "Total number of records matching the filters.", + "type": "integer" } }, "type": "object" }, - "depop.SizeCategory": { + "datasets.GoodreadsAuthorFacetResponse": { "properties": { - "id": { + "dataset": { "type": "string" }, - "name": { + "facet": { "type": "string" }, - "regions": { + "items": { "items": { - "$ref": "#/definitions/depop.SizeRegion" + "$ref": "#/definitions/es.GoodreadsAuthorDatasetFacetItem" }, "type": "array" } }, "type": "object" }, - "depop.SizeDepartment": { + "datasets.GoodreadsAuthorSearchResponse": { "properties": { - "categories": { + "dataset": { + "description": "Identifier of the dataset queried (`goodreads-authors`).", + "type": "string" + }, + "items": { + "description": "Matching Goodreads author records on this page.", "items": { - "$ref": "#/definitions/depop.SizeCategory" + "$ref": "#/definitions/es.GoodreadsAuthorRecord" }, "type": "array" }, - "id": { - "type": "string" + "page": { + "description": "Page number returned.", + "type": "integer" }, - "name": { + "page_size": { + "description": "Number of items per page.", + "type": "integer" + }, + "sort": { + "description": "Sort order applied.", "type": "string" + }, + "total": { + "description": "Total number of records matching the filters.", + "type": "integer" } }, "type": "object" }, - "depop.SizeOption": { + "datasets.GoodreadsFacetResponse": { "properties": { - "id": { - "description": "ID is the value to pass in SearchOption.Sizes / ShopOption.Sizes\n(e.g. \"4.17\"). Built from Depop's own size_set_id and id\n(`{size_set_id}.{id}`) -- confirmed live 2026-08-15 that this bare\nform (without the \"-EUR\"/\"-UK\"/\"-US\"/\"-AU\" region suffix Depop's own\nUI appends for display, e.g. \"4.17-US\") is what both the search API\nand shop pages actually key off; the suffix is decorative only.", + "dataset": { "type": "string" }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "depop.SizeRegion": { - "properties": { - "region": { + "facet": { "type": "string" }, - "sizes": { + "items": { "items": { - "$ref": "#/definitions/depop.SizeOption" + "$ref": "#/definitions/es.GoodreadsBookDatasetFacetItem" }, "type": "array" } }, "type": "object" }, - "depop.SizesResponse": { + "datasets.GoodreadsSearchResponse": { "properties": { - "departments": { + "dataset": { + "description": "Identifier of the dataset queried (`goodreads-books`).", + "type": "string" + }, + "items": { + "description": "Matching Goodreads book records on this page.", "items": { - "$ref": "#/definitions/depop.SizeDepartment" + "$ref": "#/definitions/es.GoodreadsBookRecord" }, "type": "array" + }, + "page": { + "description": "Page number returned.", + "type": "integer" + }, + "page_size": { + "description": "Number of items per page.", + "type": "integer" + }, + "sort": { + "description": "Sort order applied.", + "type": "string" + }, + "total": { + "description": "Total number of records matching the filters.", + "type": "integer" } }, "type": "object" }, - "depop.Subcategory": { + "datasets.GoogleBusinessFacetResponse": { "properties": { - "name": { + "dataset": { + "description": "Identifier of the dataset queried (`google-map-businesses`).", "type": "string" }, - "slug": { - "description": "maps to Search's subcategory / Shop's subcategory filter", + "facet": { + "description": "Facet that was aggregated.", "type": "string" + }, + "items": { + "description": "Facet values with the number of matching records for each.", + "items": { + "$ref": "#/definitions/es.GoogleBusinessDatasetFacetItem" + }, + "type": "array" } }, "type": "object" }, - "depop.SuggestResponse": { + "datasets.GoogleBusinessSearchResponse": { "properties": { - "query": { + "dataset": { + "description": "Identifier of the dataset queried (`google-map-businesses`).", "type": "string" }, - "suggestions": { + "items": { + "description": "Matching Google Maps business records on this page.", "items": { - "$ref": "#/definitions/depop.Suggestion" + "$ref": "#/definitions/es.GoogleBusinessDatasetItem" }, "type": "array" + }, + "page": { + "description": "Page number returned.", + "type": "integer" + }, + "page_size": { + "description": "Number of items per page.", + "type": "integer" + }, + "sort": { + "description": "Sort order applied.", + "type": "string" + }, + "total": { + "description": "Total number of records matching the filters.", + "type": "integer" } }, "type": "object" }, - "depop.Suggestion": { + "datasets.HousingFacetResponse": { "properties": { - "gender": { - "type": "string" - }, - "group": { - "description": "Group and SuggestedFilterLabel are present when the suggestion maps\nto a specific category (e.g. Group \"tops\", SuggestedFilterLabel\n\"in Women's Tops\") -- both omitted for a plain free-text suggestion.", + "dataset": { "type": "string" }, - "suggested_filter_label": { + "facet": { "type": "string" }, - "value": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/es.HousingMarketDatasetFacetItem" + }, + "type": "array" } }, "type": "object" }, - "depop.brandsResponseDoc": { + "datasets.HousingSearchResponse": { "properties": { - "code": { - "example": 200, + "dataset": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/es.HousingMarketRecord" + }, + "type": "array" + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/depop.BrandsResponse" + "page_size": { + "type": "integer" }, - "msg": { - "example": "OK", + "sort": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "depop.categoriesResponseDoc": { + "datasets.InstagramUserFacetResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/depop.CategoriesResponse" + "dataset": { + "description": "Identifier of the dataset queried (`instagram-users`).", + "type": "string" }, - "msg": { - "example": "OK", + "facet": { + "description": "Facet that was aggregated.", "type": "string" + }, + "items": { + "description": "Facet values with the number of matching records for each.", + "items": { + "$ref": "#/definitions/es.InstagramUserDatasetFacetItem" + }, + "type": "array" } }, "type": "object" }, - "depop.searchFacetsResponseDoc": { + "datasets.InstagramUserSearchResponse": { "properties": { - "code": { - "example": 200, + "dataset": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/es.InstagramUserDatasetItem" + }, + "type": "array" + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/depop.SearchFacetsResponse" + "page_size": { + "type": "integer" }, - "msg": { - "example": "OK", + "sort": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "depop.searchResponseDoc": { + "datasets.JobCompaniesResponse": { "properties": { - "code": { - "example": 200, + "companies": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/depop.SearchResponse" + "page_size": { + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "depop.searchSellersResponseDoc": { + "datasets.JobsFacetResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/depop.SearchSellersResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "facets": { + "allOf": [ + { + "$ref": "#/definitions/es.JobPostingFacets" + } + ], + "description": "Counts of open job postings grouped by company, provider, department, location, employment type, skill and other attributes." } }, "type": "object" }, - "depop.shopResponseDoc": { + "datasets.JobsSearchResponse": { "properties": { - "code": { - "example": 200, + "jobs": { + "description": "Matching job postings on this page.", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "page": { + "description": "Page number returned.", "type": "integer" }, - "data": { - "$ref": "#/definitions/depop.ShopResponse" + "page_size": { + "description": "Number of items per page.", + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "total": { + "description": "Total number of postings matching the filters.", + "type": "integer" } }, "type": "object" }, - "depop.similarItemsResponseDoc": { + "datasets.JournalistsFacetResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/depop.SimilarItemsResponse" + "dataset": { + "type": "string" }, - "msg": { - "example": "OK", + "facet": { "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/es.JournalistsFacetItem" + }, + "type": "array" } }, "type": "object" }, - "depop.sizesResponseDoc": { + "datasets.JournalistsSearchResponse": { "properties": { - "code": { - "example": 200, + "dataset": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/es.JournalistRecord" + }, + "type": "array" + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/depop.SizesResponse" + "page_size": { + "type": "integer" }, - "msg": { - "example": "OK", + "sort": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "depop.suggestResponseDoc": { + "datasets.LlmsFacetResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/depop.SuggestResponse" + "dataset": { + "type": "string" }, - "msg": { - "example": "OK", + "facet": { "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/es.LlmsDatasetFacetItem" + }, + "type": "array" } }, "type": "object" }, - "developerretrieval.ArtifactType": { - "enum": [ - "doc", - "readme", - "issue", - "pull_request" - ], - "type": "string", - "x-enum-varnames": [ - "ArtifactDoc", - "ArtifactReadme", - "ArtifactIssue", - "ArtifactPullRequest" - ] - }, - "developerretrieval.DeveloperHit": { + "datasets.LlmsRecord": { "properties": { - "id": { + "analyzer_version": { "type": "string" }, - "indexed_at": { + "category": { "type": "string" }, - "passages": { - "items": { - "$ref": "#/definitions/retrievaltypes.Passage" - }, - "type": "array" + "domain": { + "type": "string" }, - "rank": { + "full": { + "$ref": "#/definitions/es.LlmsFile" + }, + "home_blocked": { + "type": "boolean" + }, + "home_challenge": { + "type": "boolean" + }, + "home_status": { "type": "integer" }, - "repository": { + "is_infrastructure": { + "type": "boolean" + }, + "llms": { + "$ref": "#/definitions/es.LlmsFile" + }, + "method_version": { "type": "string" }, - "revision": { + "origin": { "type": "string" }, - "source_id": { + "probe_error": { "type": "string" }, - "title": { + "probed_at": { "type": "string" }, - "type": { - "allOf": [ - { - "$ref": "#/definitions/developerretrieval.ArtifactType" - } - ], - "enum": [ - "doc", - "readme", - "issue", - "pull_request" - ] + "rank": { + "type": "integer" }, - "updated_at": { + "reachable": { + "type": "boolean" + }, + "robots": { + "$ref": "#/definitions/es.LlmsRobots" + }, + "run_date": { "type": "string" }, - "url": { + "run_id": { "type": "string" }, - "version": { + "seed_source": { + "type": "string" + }, + "tld": { "type": "string" } }, "type": "object" }, - "developerretrieval.DeveloperSearchRequest": { + "datasets.LlmsSearchResponse": { "properties": { - "cursor": { + "dataset": { "type": "string" }, - "limit": { + "items": { + "items": { + "$ref": "#/definitions/datasets.LlmsRecord" + }, + "type": "array" + }, + "page": { "type": "integer" }, - "passages_per_result": { + "page_size": { "type": "integer" }, - "q": { + "sort": { "type": "string" }, - "sources": { + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "datasets.NumbeoCityFacetResponse": { + "properties": { + "dataset": { + "description": "Identifier of the dataset queried (`numbeo-cities`).", + "type": "string" + }, + "facet": { + "description": "Facet that was aggregated.", + "type": "string" + }, + "items": { + "description": "Facet values with the number of matching records for each.", "items": { - "type": "string" + "$ref": "#/definitions/es.NumbeoDatasetFacetItem" }, "type": "array" + } + }, + "type": "object" + }, + "datasets.NumbeoCitySearchResponse": { + "properties": { + "dataset": { + "type": "string" }, - "types": { + "items": { "items": { - "$ref": "#/definitions/developerretrieval.ArtifactType", - "enum": [ - "doc", - "readme", - "issue", - "pull_request" - ] + "$ref": "#/definitions/es.NumbeoCityRecord" }, "type": "array" }, - "version": { + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "sort": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "developerretrieval.developerCoverageDoc": { + "datasets.NumbeoCountrySearchResponse": { "properties": { - "corpus_revision": { + "dataset": { "type": "string" }, - "failure": { - "$ref": "#/definitions/developerretrieval.developerFailureDoc" + "items": { + "items": { + "$ref": "#/definitions/es.NumbeoCountryRecord" + }, + "type": "array" }, - "indexed_at": { - "type": "string" + "page": { + "type": "integer" }, - "retrieved_at": { - "type": "string" + "page_size": { + "type": "integer" }, - "source_id": { + "sort": { "type": "string" }, - "status": { - "enum": [ - "ok", - "failed", - "not_indexed", - "unsupported" - ], - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "developerretrieval.developerFailureDoc": { + "datasets.PitchbookAdvisorsFacetResponse": { "properties": { - "message": { + "dataset": { "type": "string" }, - "reason": { - "enum": [ - "invalid_url", - "unsupported_content_type", - "blocked", - "not_found", - "rate_limited", - "timeout", - "upstream_error", - "internal_error", - "out_of_scope", - "robots_disallowed", - "duplicate", - "limit_reached", - "unsupported_filter", - "unknown_source", - "idempotency_conflict", - "invalid_cursor", - "result_expired", - "full_text_unavailable", - "budget_exhausted" - ], + "facet": { "type": "string" }, - "retry_after_seconds": { - "type": "integer" - }, - "retryable": { - "type": "boolean" + "items": { + "items": { + "$ref": "#/definitions/es.PitchbookFacetItem" + }, + "type": "array" } }, "type": "object" }, - "developerretrieval.developerSearchDataDoc": { + "datasets.PitchbookAdvisorsSearchResponse": { "properties": { - "coverage": { - "items": { - "$ref": "#/definitions/developerretrieval.developerCoverageDoc" - }, - "type": "array" - }, - "has_more": { - "type": "boolean" + "dataset": { + "type": "string" }, "items": { "items": { - "$ref": "#/definitions/developerretrieval.DeveloperHit" + "$ref": "#/definitions/es.PitchbookRecord" }, "type": "array" }, - "next_cursor": { + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "sort": { "type": "string" }, - "partial": { - "type": "boolean" + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "datasets.PitchbookCompaniesFacetResponse": { + "properties": { + "dataset": { + "type": "string" }, - "usage": { - "$ref": "#/definitions/retrievaltypes.Usage" + "facet": { + "type": "string" }, - "warnings": { + "items": { "items": { - "$ref": "#/definitions/developerretrieval.developerWarningDoc" + "$ref": "#/definitions/es.PitchbookFacetItem" }, "type": "array" } }, "type": "object" }, - "developerretrieval.developerSearchResponseDoc": { + "datasets.PitchbookCompaniesSearchResponse": { "properties": { - "code": { - "example": 200, + "dataset": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/es.PitchbookRecord" + }, + "type": "array" + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/developerretrieval.developerSearchDataDoc" + "page_size": { + "type": "integer" }, - "msg": { - "example": "Request successful", + "sort": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "developerretrieval.developerSourceDescriptorDoc": { + "datasets.PitchbookFundsFacetResponse": { "properties": { - "artifact_types": { - "items": { - "enum": [ - "doc", - "readme", - "issue", - "pull_request" - ], - "type": "string" - }, - "type": "array" - }, - "corpus": { - "enum": [ - "papers", - "developer" - ], + "dataset": { "type": "string" }, - "corpus_revision": { + "facet": { "type": "string" }, - "filters": { + "items": { "items": { - "enum": [ - "authors", - "published_from", - "published_to", - "types", - "version" - ], - "type": "string" + "$ref": "#/definitions/es.PitchbookFacetItem" }, "type": "array" - }, - "last_success_at": { - "type": "string" - }, - "name": { + } + }, + "type": "object" + }, + "datasets.PitchbookFundsSearchResponse": { + "properties": { + "dataset": { "type": "string" }, - "operations": { + "items": { "items": { - "enum": [ - "search", - "metadata", - "read", - "references", - "citers" - ], - "type": "string" + "$ref": "#/definitions/es.PitchbookRecord" }, "type": "array" }, - "source_id": { - "type": "string" + "page": { + "type": "integer" }, - "state": { - "enum": [ - "ready", - "refreshing", - "not_indexed", - "degraded" - ], - "type": "string" + "page_size": { + "type": "integer" }, - "url": { + "sort": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "developerretrieval.developerSourcesDataDoc": { + "datasets.PitchbookInvestorsFacetResponse": { "properties": { - "has_more": { - "type": "boolean" + "dataset": { + "description": "Identifier of the dataset queried (`pitchbook-investors`).", + "type": "string" + }, + "facet": { + "description": "Facet that was aggregated.", + "type": "string" }, "items": { + "description": "Facet values with the number of matching records for each.", "items": { - "$ref": "#/definitions/developerretrieval.developerSourceDescriptorDoc" + "$ref": "#/definitions/es.PitchbookFacetItem" }, "type": "array" - }, - "next_cursor": { - "type": "string" - }, - "registry_revision": { - "type": "string" } }, "type": "object" }, - "developerretrieval.developerSourcesResponseDoc": { + "datasets.PitchbookInvestorsSearchResponse": { "properties": { - "code": { - "example": 200, + "dataset": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/es.PitchbookRecord" + }, + "type": "array" + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/developerretrieval.developerSourcesDataDoc" + "page_size": { + "type": "integer" }, - "msg": { - "example": "Request successful", + "sort": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "developerretrieval.developerWarningDoc": { + "datasets.PitchbookLimitedPartnersFacetResponse": { "properties": { - "code": { - "enum": [ - "source_failed", - "source_not_indexed", - "discovery_truncated", - "ranking_window_limit", - "imprecise_date_excluded", - "content_unavailable", - "cached_source_stale" - ], + "dataset": { "type": "string" }, - "message": { + "facet": { "type": "string" }, - "source_id": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/es.PitchbookFacetItem" + }, + "type": "array" } }, "type": "object" }, - "dfs.DFSContestType": { + "datasets.PitchbookLimitedPartnersSearchResponse": { "properties": { - "description": { + "dataset": { "type": "string" }, - "name": { + "items": { + "items": { + "$ref": "#/definitions/es.PitchbookRecord" + }, + "type": "array" + }, + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "sort": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "dfs.DFSGlossaryResponse": { + "datasets.PlaystationFacetResponse": { "properties": { - "fetched_at": { + "dataset": { "type": "string" }, - "source_url": { + "facet": { "type": "string" }, - "term_count": { - "type": "integer" - }, - "terms": { + "items": { "items": { - "$ref": "#/definitions/dfs.DFSGlossaryTerm" + "$ref": "#/definitions/es.PlaystationGameDatasetFacetItem" }, "type": "array" } }, "type": "object" }, - "dfs.DFSGlossaryTerm": { + "datasets.PlaystationSearchResponse": { "properties": { - "definition": { + "dataset": { "type": "string" }, - "term": { + "items": { + "items": { + "$ref": "#/definitions/es.PlaystationGameRecord" + }, + "type": "array" + }, + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "sort": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "dfs.DFSGuideResponse": { + "datasets.ProductHuntMakersFacetResponse": { "properties": { - "contest_type_count": { - "type": "integer" - }, - "contest_types": { - "items": { - "$ref": "#/definitions/dfs.DFSContestType" - }, - "type": "array" - }, - "fetched_at": { + "dataset": { "type": "string" }, - "source_url": { + "facet": { "type": "string" }, - "sport_page_count": { - "type": "integer" - }, - "sport_pages": { + "items": { "items": { - "$ref": "#/definitions/dfs.DFSSportPage" + "$ref": "#/definitions/es.ProductHuntMakersFacetItem" }, "type": "array" } }, "type": "object" }, - "dfs.DFSNFLBestBallContest": { + "datasets.ProductHuntMakersSearchResponse": { "properties": { - "entry_fee_label": { + "dataset": { + "description": "Identifier of the dataset queried (`producthunt-makers`).", "type": "string" }, - "maximum_entries": { + "items": { + "description": "Matching Product Hunt maker records on this page.", + "items": { + "$ref": "#/definitions/es.ProductHuntMakerItem" + }, + "type": "array" + }, + "page": { + "description": "Page number returned.", "type": "integer" }, - "name": { - "type": "string" + "page_size": { + "description": "Number of items per page.", + "type": "integer" }, - "top_prize_label": { + "sort": { + "description": "Sort order applied.", "type": "string" + }, + "total": { + "description": "Total number of records matching the filters.", + "type": "integer" } }, "type": "object" }, - "dfs.DFSNFLBestBallContestsResponse": { + "datasets.ProductHuntProductsFacetResponse": { "properties": { - "contest_count": { - "type": "integer" + "dataset": { + "description": "Identifier of the dataset queried (`producthunt-products`).", + "type": "string" }, - "contests": { + "facet": { + "description": "Facet that was aggregated.", + "type": "string" + }, + "items": { + "description": "Facet values with the number of matching records for each.", "items": { - "$ref": "#/definitions/dfs.DFSNFLBestBallContest" + "$ref": "#/definitions/es.ProductHuntProductsFacetItem" }, "type": "array" - }, - "fetched_at": { - "type": "string" - }, - "season": { - "type": "integer" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "dfs.DFSRulesAndScoringResponse": { + "datasets.ProductHuntProductsSearchResponse": { "properties": { - "fetched_at": { + "dataset": { + "description": "Identifier of the dataset queried (`producthunt-products`).", "type": "string" }, - "game_type_count": { - "type": "integer" + "items": { + "description": "Matching Product Hunt product records on this page.", + "items": { + "$ref": "#/definitions/es.ProductHuntProductItem" + }, + "type": "array" }, - "overview": { - "$ref": "#/definitions/dfs.DFSScoringRule" + "page": { + "description": "Page number returned.", + "type": "integer" }, - "rule_count": { + "page_size": { + "description": "Number of items per page.", "type": "integer" }, - "source_url": { + "sort": { + "description": "Sort order applied.", "type": "string" }, - "sport_count": { + "total": { + "description": "Total number of records matching the filters.", "type": "integer" + } + }, + "type": "object" + }, + "datasets.ProductHuntTrendsFacetResponse": { + "properties": { + "dataset": { + "description": "Identifier of the dataset queried (`producthunt-trends`).", + "type": "string" }, - "sports": { + "facet": { + "description": "Facet that was aggregated.", + "type": "string" + }, + "items": { + "description": "Facet values with the number of matching records for each.", "items": { - "$ref": "#/definitions/dfs.DFSRulesSport" + "$ref": "#/definitions/es.ProductHuntTrendsFacetItem" }, "type": "array" } }, "type": "object" }, - "dfs.DFSRulesSport": { + "datasets.ProductHuntTrendsSearchResponse": { "properties": { - "id": { - "type": "integer" - }, - "name": { + "dataset": { + "description": "Identifier of the dataset queried (`producthunt-trends`).", "type": "string" }, - "rule_count": { - "type": "integer" + "group_by": { + "description": "Dimension the cells are grouped by: `topic_month`, `topic_year` or `topic`.", + "type": "string" }, - "rules": { + "items": { + "description": "Aggregate launch-trend cells on this page, one per group.", "items": { - "$ref": "#/definitions/dfs.DFSScoringRule" + "$ref": "#/definitions/es.ProductHuntTrendCell" }, "type": "array" }, - "slug": { + "min_launches": { + "description": "Minimum number of launches a cell needs to be included.", + "type": "integer" + }, + "page": { + "description": "Page number returned.", + "type": "integer" + }, + "page_size": { + "description": "Number of items per page.", + "type": "integer" + }, + "sort": { + "description": "Sort order applied.", "type": "string" }, - "sort_order": { + "total": { + "description": "Total number of cells.", "type": "integer" } }, "type": "object" }, - "dfs.DFSScoringRule": { + "datasets.RedditTrendingSearchResponse": { "properties": { - "content_html": { - "type": "string" - }, - "content_text": { + "dataset": { "type": "string" }, - "game_types": { + "items": { "items": { - "type": "integer" + "$ref": "#/definitions/es.RedditTrendingEntry" }, "type": "array" }, - "name": { + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "snapshot_date": { "type": "string" }, - "slug": { + "sort": { "type": "string" }, - "sort_order": { + "total": { "type": "integer" } }, "type": "object" }, - "dfs.DFSSport": { + "datasets.ReviewsSearchResponse": { "properties": { - "full_name": { + "dataset": { + "description": "Identifier of the dataset queried (`apps-reviews`).", "type": "string" }, - "has_public_contests": { - "type": "boolean" + "items": { + "description": "Matching app review records on this page.", + "items": { + "$ref": "#/definitions/es.AppReview" + }, + "type": "array" }, - "id": { + "page": { + "description": "Page number returned.", "type": "integer" }, - "is_enabled": { - "type": "boolean" + "page_size": { + "description": "Number of items per page.", + "type": "integer" }, - "region_full_name": { + "sort": { + "description": "Sort order applied.", "type": "string" }, - "sort_order": { + "total": { + "description": "Total number of records matching the filters.", "type": "integer" - }, - "sport_code": { - "type": "string" } }, "type": "object" }, - "dfs.DFSSportPage": { + "datasets.ScamTrackerReportsFacetResponse": { "properties": { - "name": { + "dataset": { "type": "string" }, - "url": { + "facet": { "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/es.ScamTrackerReportsFacetItem" + }, + "type": "array" } }, "type": "object" }, - "dfs.DFSSportsResponse": { + "datasets.ScamTrackerReportsSearchResponse": { "properties": { - "count": { + "dataset": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/es.ScamTrackerReport" + }, + "type": "array" + }, + "page": { "type": "integer" }, - "fetched_at": { + "page_size": { + "type": "integer" + }, + "sort": { "type": "string" }, - "region_code": { + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "datasets.SecCompanyFacetResponse": { + "properties": { + "dataset": { "type": "string" }, - "source_url": { + "facet": { "type": "string" }, - "sports": { + "items": { "items": { - "$ref": "#/definitions/dfs.DFSSport" + "$ref": "#/definitions/es.SecCompanyFacetItem" }, "type": "array" } }, "type": "object" }, - "dfs.dfsGlossaryResponseDoc": { + "datasets.SecCompanyFinancialsResponse": { "properties": { - "code": { - "example": 200, + "cik": { + "description": "SEC Central Index Key (CIK) of the company, as a number.", "type": "integer" }, - "data": { - "$ref": "#/definitions/dfs.DFSGlossaryResponse" + "count": { + "description": "Number of data points returned.", + "type": "integer" }, - "msg": { - "example": "OK", + "dataset": { + "description": "Identifier of the dataset queried (`sec-companies`).", "type": "string" + }, + "points": { + "description": "Financial statement history points for the company, newest fiscal year first.", + "items": { + "$ref": "#/definitions/es.SecFinancialsHistoryPoint" + }, + "type": "array" } }, "type": "object" }, - "dfs.dfsGuideResponseDoc": { + "datasets.SecCompanyInsiderResponse": { "properties": { - "code": { - "example": 200, + "cik": { "type": "integer" }, - "data": { - "$ref": "#/definitions/dfs.DFSGuideResponse" + "count": { + "type": "integer" }, - "msg": { - "example": "OK", + "dataset": { "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/es.SecInsiderTransactionRecord" + }, + "type": "array" } }, "type": "object" }, - "dfs.dfsNFLBestBallFeaturedContestsResponseDoc": { + "datasets.SecCompanySearchResponse": { "properties": { - "code": { - "example": 200, + "dataset": { + "description": "Identifier of the dataset queried (`sec-companies`).", + "type": "string" + }, + "items": { + "description": "Matching SEC-registered company records on this page.", + "items": { + "$ref": "#/definitions/es.SecCompanyRecord" + }, + "type": "array" + }, + "page": { + "description": "Page number returned.", "type": "integer" }, - "data": { - "$ref": "#/definitions/dfs.DFSNFLBestBallContestsResponse" + "page_size": { + "description": "Number of items per page.", + "type": "integer" }, - "msg": { - "example": "OK", + "sort": { + "description": "Sort order applied.", "type": "string" + }, + "total": { + "description": "Total number of records matching the filters.", + "type": "integer" } }, "type": "object" }, - "dfs.dfsRulesAndScoringResponseDoc": { + "datasets.SecInstitutionalPositionsFacetResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/dfs.DFSRulesAndScoringResponse" + "dataset": { + "type": "string" }, - "msg": { - "example": "OK", + "facet": { "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/es.SecInstitutionalPositionsFacetItem" + }, + "type": "array" } }, "type": "object" }, - "dfs.dfsSportsResponseDoc": { + "datasets.SecInstitutionalPositionsSearchResponse": { "properties": { - "code": { - "example": 200, + "dataset": { + "description": "Identifier of the dataset queried (`sec-institutional-positions`).", + "type": "string" + }, + "items": { + "description": "Matching institutional position records on this page.", + "items": { + "$ref": "#/definitions/es.SecInstitutionalPositionRecord" + }, + "type": "array" + }, + "page": { + "description": "Page number returned.", "type": "integer" }, - "data": { - "$ref": "#/definitions/dfs.DFSSportsResponse" + "page_size": { + "description": "Number of items per page.", + "type": "integer" }, - "msg": { - "example": "OK", + "sort": { + "description": "Sort order applied.", "type": "string" + }, + "total": { + "description": "Total number of records matching the filters.", + "type": "integer" } }, "type": "object" }, - "diagnostics.AntibotCheckRequest": { + "datasets.StarbucksStoreFacetResponse": { "properties": { - "fast": { - "description": "Fast (default true) escalates cheapest-transport-first and returns at the\nfirst tier that retrieves the page, so an unprotected page never spins up a\nbrowser. Set false for an exhaustive multi-run sweep across every backend.", - "type": "boolean" + "dataset": { + "type": "string" }, - "url": { - "description": "URL is the absolute http/https target to assess.", - "example": "https://www.crunchbase.com/organization/snowflake-computing", + "facet": { "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/es.StarbucksStoreDatasetFacetItem" + }, + "type": "array" } }, - "required": [ - "url" - ], "type": "object" }, - "diagnostics.antibotCheckResponseDoc": { + "datasets.StarbucksStoreSearchResponse": { "properties": { - "code": { - "example": 200, + "dataset": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/es.StarbucksStoreDatasetItem" + }, + "type": "array" + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/antibot.Verdict" + "page_size": { + "type": "integer" }, - "msg": { - "example": "OK", + "sort": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "discogs.ArtistCredit": { + "datasets.SteamAchievementsSearchResponse": { "properties": { - "anv": { - "example": "T. Bangalter", + "dataset": { "type": "string" }, - "id": { - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/es.SteamAchievementRecord" + }, + "type": "array" }, - "join": { - "type": "string" + "page": { + "type": "integer" }, - "name": { - "type": "string" + "page_size": { + "type": "integer" }, - "role": { - "example": "Vocals", + "sort": { "type": "string" }, - "tracks": { - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "discogs.ArtistReleaseItem": { + "datasets.SteamChartsSearchResponse": { "properties": { - "artist": { - "type": "string" - }, - "format": { + "dataset": { "type": "string" }, - "id": { - "type": "integer" - }, - "in_collection": { - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/es.SteamChartEntry" + }, + "type": "array" }, - "in_wantlist": { + "page": { "type": "integer" }, - "label": { - "type": "string" - }, - "main_release_id": { + "page_size": { "type": "integer" }, - "role": { - "example": "Main", + "snapshot_date": { "type": "string" }, - "thumb": { + "sort": { "type": "string" }, - "title": { + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "datasets.SteamFacetResponse": { + "properties": { + "dataset": { "type": "string" }, - "type": { - "example": "release", + "facet": { "type": "string" }, - "year": { - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/es.SteamGameDatasetFacetItem" + }, + "type": "array" } }, "type": "object" }, - "discogs.ArtistReleasesResponse": { + "datasets.SteamNewsSearchResponse": { "properties": { - "artist_id": { + "dataset": { "type": "string" }, "items": { - "type": "integer" + "items": { + "$ref": "#/definitions/es.SteamNewsRecord" + }, + "type": "array" }, "page": { "type": "integer" }, - "pages": { - "type": "integer" - }, - "per_page": { + "page_size": { "type": "integer" }, - "releases": { - "items": { - "$ref": "#/definitions/discogs.ArtistReleaseItem" - }, - "type": "array" + "sort": { + "type": "string" }, - "source_url": { - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "discogs.ArtistResponse": { + "datasets.SteamPlayerCountsSearchResponse": { "properties": { - "aliases": { - "description": "Other artist names this artist is known under, each with its Discogs id.", - "items": { - "$ref": "#/definitions/discogs.EntityRef" - }, - "type": "array" - }, - "data_quality": { - "description": "Discogs data quality rating of the profile, for example `Needs Vote`.", + "dataset": { "type": "string" }, - "groups": { - "description": "Groups or bands the artist belongs to or has belonged to.", + "items": { "items": { - "$ref": "#/definitions/discogs.EntityRef" + "$ref": "#/definitions/es.SteamPlayerCountRecord" }, "type": "array" }, - "id": { - "description": "Discogs artist id.", - "example": 1289, + "page": { "type": "integer" }, - "images": { - "description": "Photos of the artist.", - "items": { - "$ref": "#/definitions/discogs.Image" - }, - "type": "array" - }, - "members": { - "description": "Members of the artist, when the artist is a group or band.", - "items": { - "$ref": "#/definitions/discogs.EntityRef" - }, - "type": "array" - }, - "name": { - "description": "Artist name as Discogs lists it.", - "example": "Daft Punk", - "type": "string" - }, - "name_variations": { - "description": "Other spellings and variations of the artist name.", - "items": { - "type": "string" - }, - "type": "array" - }, - "profile": { - "description": "Biography text from the artist's Discogs profile.", - "type": "string" - }, - "real_name": { - "description": "Real name of the artist, when Discogs lists one.", - "type": "string" - }, - "source_url": { - "description": "URL the data was read from.", - "type": "string" - }, - "uri": { - "description": "Link to the artist's page on Discogs.", - "type": "string" - }, - "urls": { - "description": "External web links listed on the artist's profile.", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "discogs.Community": { - "properties": { - "have": { + "page_size": { "type": "integer" }, - "rating": { - "$ref": "#/definitions/discogs.CommunityRating" - }, - "want": { - "type": "integer" - } - }, - "type": "object" - }, - "discogs.CommunityRating": { - "properties": { - "average": { - "type": "number" + "sort": { + "type": "string" }, - "count": { + "total": { "type": "integer" } }, "type": "object" }, - "discogs.CompanyCredit": { + "datasets.SteamPricesSearchResponse": { "properties": { - "catno": { + "dataset": { "type": "string" }, - "entity_type": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/es.SteamPriceRecord" + }, + "type": "array" }, - "entity_type_name": { - "example": "Pressed By", - "type": "string" + "page": { + "type": "integer" }, - "id": { + "page_size": { "type": "integer" }, - "name": { + "sort": { "type": "string" - } - }, - "type": "object" - }, - "discogs.EntityRef": { - "properties": { - "active": { - "description": "True when Discogs marks the related artist as currently active. Omitted when inactive or when Discogs gives no status.", - "type": "boolean" }, - "id": { - "description": "Discogs artist id. Use it with the artist endpoint.", + "total": { "type": "integer" - }, - "name": { - "description": "Name of the artist as Discogs lists it.", - "type": "string" } }, "type": "object" }, - "discogs.Format": { + "datasets.SteamReviewsSearchResponse": { "properties": { - "descriptions": { - "example": [ - "LP", - "Album" - ], + "dataset": { + "type": "string" + }, + "items": { "items": { - "type": "string" + "$ref": "#/definitions/es.SteamReviewRecord" }, "type": "array" }, - "name": { - "example": "Vinyl", - "type": "string" + "page": { + "type": "integer" }, - "qty": { - "example": "2", - "type": "string" + "page_size": { + "type": "integer" }, - "text": { + "sort": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "discogs.Identifier": { + "datasets.SteamSearchResponse": { "properties": { - "description": { + "dataset": { "type": "string" }, - "type": { - "example": "Barcode", - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/es.SteamGameRecord" + }, + "type": "array" }, - "value": { - "type": "string" - } - }, - "type": "object" - }, - "discogs.Image": { - "properties": { - "height": { - "description": "Height of the image in pixels.", + "page": { "type": "integer" }, - "type": { - "description": "Kind of image, for example `primary`.", - "example": "primary", - "type": "string" - }, - "uri": { - "description": "URL of the full-size image.", - "type": "string" + "page_size": { + "type": "integer" }, - "uri150": { - "description": "URL of a 150 pixel version of the image.", + "sort": { "type": "string" }, - "width": { - "description": "Width of the image in pixels.", + "total": { "type": "integer" } }, "type": "object" }, - "discogs.LabelCredit": { + "datasets.SubstackDatasetFacetResponse": { "properties": { - "catno": { + "dataset": { "type": "string" }, - "id": { - "type": "integer" - }, - "name": { + "facet": { "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/es.SubstackDatasetFacetItem" + }, + "type": "array" } }, "type": "object" }, - "discogs.LabelReleaseItem": { + "datasets.SubstackDatasetRecord": { "properties": { - "artist": { + "hydrated_at": { + "example": "2026-10-16T09:53:00Z", "type": "string" }, - "catno": { + "identifier": { + "example": "example.substack.com", "type": "string" }, - "format": { + "kind": { + "example": "publication", "type": "string" }, - "id": { - "type": "integer" + "language": { + "example": "en", + "type": "string" }, - "status": { + "name": { + "example": "Example Publication", "type": "string" }, - "thumb": { + "publication": { + "$ref": "#/definitions/substack.Publication" + }, + "uid": { + "example": "publication:example.substack.com", "type": "string" }, - "title": { + "url": { + "example": "https://example.substack.com", "type": "string" }, - "year": { - "type": "integer" + "user": { + "$ref": "#/definitions/substack.User" } }, "type": "object" }, - "discogs.LabelReleasesResponse": { + "datasets.SubstackDatasetSearchResponse": { "properties": { - "items": { - "type": "integer" - }, - "label_id": { + "dataset": { "type": "string" }, - "page": { - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/datasets.SubstackDatasetRecord" + }, + "type": "array" }, - "pages": { + "page": { "type": "integer" }, - "per_page": { + "page_size": { "type": "integer" }, - "releases": { - "items": { - "$ref": "#/definitions/discogs.LabelReleaseItem" - }, - "type": "array" - }, - "source_url": { + "sort": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "discogs.LabelResponse": { + "datasets.TechstackFacetResponse": { "properties": { - "contact_info": { - "type": "string" - }, - "data_quality": { - "type": "string" - }, - "id": { - "example": 895, - "type": "integer" - }, - "images": { - "items": { - "$ref": "#/definitions/discogs.Image" - }, - "type": "array" - }, - "name": { - "example": "RCA", - "type": "string" - }, - "parent_label": { - "$ref": "#/definitions/discogs.EntityRef" - }, - "profile": { - "type": "string" - }, - "source_url": { + "dataset": { + "description": "Identifier of the dataset queried (`techstack`).", "type": "string" }, - "sub_labels": { - "items": { - "$ref": "#/definitions/discogs.EntityRef" - }, - "type": "array" - }, - "uri": { + "facet": { + "description": "Facet that was aggregated.", "type": "string" }, - "urls": { + "items": { + "description": "Facet values with the number of matching records for each.", "items": { - "type": "string" + "$ref": "#/definitions/es.TechstackDatasetFacetItem" }, "type": "array" } }, "type": "object" }, - "discogs.MasterResponse": { + "datasets.TechstackSearchResponse": { "properties": { - "artists": { - "items": { - "$ref": "#/definitions/discogs.ArtistCredit" - }, - "type": "array" - }, - "data_quality": { + "dataset": { + "description": "Identifier of the dataset queried (`techstack`).", "type": "string" }, - "genres": { - "example": [ - "Electronic" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "id": { - "example": 26647, - "type": "integer" - }, - "images": { + "items": { + "description": "Matching website technology records on this page.", "items": { - "$ref": "#/definitions/discogs.Image" + "$ref": "#/definitions/es.TechstackRecord" }, "type": "array" }, - "lowest_price": { - "type": "number" - }, - "main_release_id": { - "example": 2879, + "page": { + "description": "Page number returned.", "type": "integer" }, - "most_recent_release_id": { + "page_size": { + "description": "Number of items per page.", "type": "integer" }, - "notes": { + "sort": { + "description": "Sort order applied.", "type": "string" }, - "num_for_sale": { + "total": { + "description": "Total number of records matching the filters.", "type": "integer" - }, - "source_url": { - "type": "string" - }, - "styles": { - "example": [ - "House", - "Disco" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "title": { - "example": "Discovery", + } + }, + "type": "object" + }, + "datasets.TrustmrrFacetResponse": { + "properties": { + "dataset": { + "description": "Identifier of the dataset queried (`trustmrr`).", "type": "string" }, - "tracklist": { - "items": { - "$ref": "#/definitions/discogs.Track" - }, - "type": "array" - }, - "uri": { + "facet": { + "description": "Facet that was aggregated.", "type": "string" }, - "videos": { + "items": { + "description": "Facet values with the number of matching records for each.", "items": { - "$ref": "#/definitions/discogs.Video" + "$ref": "#/definitions/es.TrustmrrDatasetFacetItem" }, "type": "array" - }, - "year": { - "example": 2001, - "type": "integer" } }, "type": "object" }, - "discogs.ReleaseResponse": { + "datasets.TrustmrrHistoryResponse": { "properties": { - "artists": { - "items": { - "$ref": "#/definitions/discogs.ArtistCredit" - }, - "type": "array" + "count": { + "type": "integer" }, - "artists_sort": { - "example": "Rick Astley", + "dataset": { "type": "string" }, - "community": { - "$ref": "#/definitions/discogs.Community" - }, - "companies": { + "points": { "items": { - "$ref": "#/definitions/discogs.CompanyCredit" + "$ref": "#/definitions/es.TrustmrrHistoryPoint" }, "type": "array" }, - "country": { - "example": "UK", + "slug": { "type": "string" - }, - "data_quality": { + } + }, + "type": "object" + }, + "datasets.TrustmrrSearchResponse": { + "properties": { + "dataset": { + "description": "Identifier of the dataset queried (`trustmrr`).", "type": "string" }, - "extra_artists": { - "items": { - "$ref": "#/definitions/discogs.ArtistCredit" - }, - "type": "array" - }, - "format_quantity": { - "type": "integer" - }, - "formats": { - "items": { - "$ref": "#/definitions/discogs.Format" - }, - "type": "array" - }, - "genres": { - "example": [ - "Electronic", - "Pop" - ], + "items": { + "description": "Matching startup records on this page.", "items": { - "type": "string" + "$ref": "#/definitions/es.TrustmrrStartupRecord" }, "type": "array" }, - "id": { - "example": 249504, + "page": { + "description": "Page number returned.", "type": "integer" }, - "identifiers": { - "items": { - "$ref": "#/definitions/discogs.Identifier" - }, - "type": "array" - }, - "images": { - "items": { - "$ref": "#/definitions/discogs.Image" - }, - "type": "array" - }, - "labels": { - "items": { - "$ref": "#/definitions/discogs.LabelCredit" - }, - "type": "array" - }, - "master_id": { + "page_size": { + "description": "Number of items per page.", "type": "integer" }, - "notes": { - "type": "string" - }, - "released": { - "example": "1987-07-00", - "type": "string" - }, - "released_formatted": { - "example": "Jul 1987", - "type": "string" - }, - "source_url": { + "sort": { + "description": "Sort order applied.", "type": "string" }, - "status": { - "example": "Accepted", + "total": { + "description": "Total number of records matching the filters.", + "type": "integer" + } + }, + "type": "object" + }, + "datasets.VehicleListingFacetResponse": { + "properties": { + "dataset": { "type": "string" }, - "styles": { - "example": [ - "Euro-Disco" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "title": { - "example": "Never Gonna Give You Up", + "facet": { "type": "string" }, - "tracklist": { + "items": { "items": { - "$ref": "#/definitions/discogs.Track" + "$ref": "#/definitions/es.VehicleListingDatasetFacetItem" }, "type": "array" - }, - "uri": { + } + }, + "type": "object" + }, + "datasets.VehicleListingPriceHistoryResponse": { + "properties": { + "id": { "type": "string" }, - "videos": { + "items": { "items": { - "$ref": "#/definitions/discogs.Video" + "$ref": "#/definitions/es.VehiclePriceHistoryRecord" }, "type": "array" - }, - "year": { - "example": 1987, - "type": "integer" } }, "type": "object" }, - "discogs.SearchResponse": { + "datasets.VehicleListingSearchResponse": { "properties": { + "dataset": { + "type": "string" + }, "items": { - "description": "Total number of matching results across all pages.", - "type": "integer" + "items": { + "$ref": "#/definitions/es.VehicleListingRecord" + }, + "type": "array" }, "page": { - "description": "Page number returned.", - "type": "integer" - }, - "pages": { - "description": "Total number of pages.", "type": "integer" }, - "per_page": { - "description": "Number of results per page.", + "page_size": { "type": "integer" }, - "query": { - "description": "Search text that was run.", - "type": "string" - }, - "results": { - "description": "Matches on this page, one item per release, master, artist or label.", - "items": { - "$ref": "#/definitions/discogs.SearchResult" - }, - "type": "array" - }, - "source_url": { - "description": "URL the data was read from.", + "sort": { "type": "string" }, - "type": { - "description": "Result type the search was limited to: `release`, `master`, `artist` or `label`. Omitted when all types were searched.", - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "discogs.SearchResult": { + "datasets.XUserFacetResponse": { "properties": { - "barcodes": { - "description": "Barcodes printed on the release. Present for release and master hits.", - "items": { - "type": "string" - }, - "type": "array" - }, - "catno": { - "description": "Catalogue number of the release. Present for release and master hits.", - "type": "string" - }, - "country": { - "description": "Country the release was issued in. Present for release and master hits.", + "dataset": { + "description": "Identifier of the dataset queried (`x-users`).", "type": "string" }, - "cover_image": { - "description": "URL of the cover image.", + "facet": { + "description": "Facet that was aggregated.", "type": "string" }, - "formats": { - "description": "Formats of the release, for example `Vinyl` or `LP`. Present for release and master hits.", + "items": { + "description": "Facet values with the number of matching records for each.", "items": { - "type": "string" + "$ref": "#/definitions/es.XUserDatasetFacetItem" }, "type": "array" + } + }, + "type": "object" + }, + "datasets.XUserSearchResponse": { + "properties": { + "dataset": { + "type": "string" }, - "genres": { - "description": "Genres of the release. Present for release and master hits.", + "items": { "items": { - "type": "string" + "$ref": "#/definitions/es.XUserDatasetItem" }, "type": "array" }, - "id": { - "description": "Discogs id of the hit. Use it with the matching release, master, artist or label endpoint.", + "page": { "type": "integer" }, - "labels": { - "description": "Names of the labels that issued the release. Present for release and master hits.", - "items": { - "type": "string" - }, - "type": "array" - }, - "master_id": { - "description": "Discogs id of the master release this release belongs to, when there is one.", + "page_size": { "type": "integer" }, - "styles": { - "description": "Styles of the release, more specific than genres. Present for release and master hits.", - "items": { - "type": "string" - }, - "type": "array" - }, - "thumb": { - "description": "URL of a thumbnail image.", - "type": "string" - }, - "title": { - "description": "Title of the hit, for example `Daft Punk - Discovery` for a release.", - "type": "string" - }, - "type": { - "description": "Kind of hit: `release`, `master`, `artist` or `label`.", - "example": "release", - "type": "string" - }, - "uri": { - "description": "Link to the hit's page on Discogs.", - "example": "https://www.discogs.com/release/2879-Daft-Punk-Discovery", + "sort": { "type": "string" }, - "year": { - "description": "Year of release, as Discogs lists it.", - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "discogs.Track": { + "datasets.YoutubeCreatorFacetResponse": { "properties": { - "duration": { - "example": "3:32", + "dataset": { "type": "string" }, - "extra_artists": { + "facet": { + "type": "string" + }, + "items": { "items": { - "$ref": "#/definitions/discogs.ArtistCredit" + "$ref": "#/definitions/es.YoutubeCreatorDatasetFacetItem" }, "type": "array" - }, - "position": { - "example": "A1", - "type": "string" - }, - "title": { - "type": "string" - }, - "type": { - "example": "track", - "type": "string" } }, "type": "object" }, - "discogs.Video": { + "datasets.YoutubeCreatorSearchResponse": { "properties": { - "description": { + "dataset": { "type": "string" }, - "duration": { - "example": 322, + "items": { + "items": { + "$ref": "#/definitions/es.YoutubeCreatorDatasetItem" + }, + "type": "array" + }, + "page": { "type": "integer" }, - "title": { - "type": "string" + "page_size": { + "type": "integer" }, - "uri": { + "sort": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "discogs.artistReleasesResponseDoc": { + "datasets.airbnbHostResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/discogs.ArtistReleasesResponse" + "$ref": "#/definitions/es.AirbnbHostItem" }, "msg": { "example": "OK", @@ -54145,14 +58766,14 @@ }, "type": "object" }, - "discogs.artistResponseDoc": { + "datasets.airbnbHostsFacetResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/discogs.ArtistResponse" + "$ref": "#/definitions/datasets.AirbnbHostsFacetResponse" }, "msg": { "example": "OK", @@ -54161,14 +58782,14 @@ }, "type": "object" }, - "discogs.labelReleasesResponseDoc": { + "datasets.airbnbHostsSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/discogs.LabelReleasesResponse" + "$ref": "#/definitions/datasets.AirbnbHostsSearchResponse" }, "msg": { "example": "OK", @@ -54177,14 +58798,14 @@ }, "type": "object" }, - "discogs.labelResponseDoc": { + "datasets.airbnbMarketResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/discogs.LabelResponse" + "$ref": "#/definitions/es.AirbnbMarketDetail" }, "msg": { "example": "OK", @@ -54193,14 +58814,14 @@ }, "type": "object" }, - "discogs.masterResponseDoc": { + "datasets.airbnbMarketsFacetResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/discogs.MasterResponse" + "$ref": "#/definitions/datasets.AirbnbMarketFacetResponse" }, "msg": { "example": "OK", @@ -54209,14 +58830,14 @@ }, "type": "object" }, - "discogs.releaseResponseDoc": { + "datasets.airbnbMarketsNearbyResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/discogs.ReleaseResponse" + "$ref": "#/definitions/datasets.AirbnbMarketNearbyResponse" }, "msg": { "example": "OK", @@ -54225,14 +58846,14 @@ }, "type": "object" }, - "discogs.searchResponseDoc": { + "datasets.airbnbMarketsSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/discogs.SearchResponse" + "$ref": "#/definitions/datasets.AirbnbMarketSearchResponse" }, "msg": { "example": "OK", @@ -54241,1373 +58862,638 @@ }, "type": "object" }, - "dominos.CookingInstruction": { + "datasets.appChartDatasetItemResponseDoc": { "properties": { "code": { - "example": "PIECT", - "type": "string" + "example": 200, + "type": "integer" }, - "group": { - "example": "CUT", - "type": "string" + "data": { + "$ref": "#/definitions/es.ChartEntry" }, - "name": { - "example": "Pie Cut", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dominos.Coupon": { + "datasets.appReviewDatasetItemResponseDoc": { "properties": { - "bundle": { - "example": true, - "type": "boolean" - }, "code": { - "example": "3057", - "type": "string" - }, - "description": { - "type": "string" + "example": 200, + "type": "integer" }, - "local": { - "example": true, - "type": "boolean" + "data": { + "$ref": "#/definitions/es.AppReview" }, - "name": { - "example": "1 Medium Domino's Specialty Pizza", + "msg": { + "example": "OK", "type": "string" - }, - "price": { - "example": 13.99, - "type": "number" - }, - "valid_service_methods": { - "example": [ - "Carryout", - "Delivery" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "virtual_codes": { - "description": "VirtualCodes are alternate marketing/promo codes that resolve to this\ncoupon -- Domino's own VirtualCoupons map, inverted onto the coupon\neach virtual code points at, so a caller sees every alias without\ncross-referencing two separate maps.", - "example": [ - "1TDOMINO" - ], - "items": { - "type": "string" - }, - "type": "array" } }, "type": "object" }, - "dominos.CouponTier": { + "datasets.appleBooksFacetResponseDoc": { "properties": { "code": { - "example": "8651C", - "type": "string" + "example": 200, + "type": "integer" }, - "description": { - "type": "string" + "data": { + "$ref": "#/definitions/datasets.AppleBooksFacetResponse" }, - "name": { - "example": "15% off all pizzas", + "msg": { + "example": "OK", "type": "string" - }, - "percent_off": { - "example": 15, - "type": "number" - }, - "threshold": { - "example": 7, - "type": "integer" } }, "type": "object" }, - "dominos.CouponTierGroup": { + "datasets.appleBooksItemResponseDoc": { "properties": { "code": { - "example": "MultiplePizza", - "type": "string" - }, - "tiers": { - "items": { - "$ref": "#/definitions/dominos.CouponTier" - }, - "type": "array" - } - }, - "type": "object" - }, - "dominos.CouponsResponse": { - "properties": { - "count": { - "example": 17, + "example": 200, "type": "integer" }, - "coupons": { - "description": "Coupons is Domino's own standalone Coupons map, normalized to a\nsorted list. A store can genuinely have zero active coupons -- unlike\n/dominos/menu's items, an empty list here is not treated as a parser\nerror.", - "items": { - "$ref": "#/definitions/dominos.Coupon" - }, - "type": "array" - }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "store_id": { - "example": "4336", - "type": "string" + "data": { + "$ref": "#/definitions/datasets.AppleBooksDatasetItem" }, - "tier_groups": { - "description": "TierGroups is Domino's own volume-discount CouponTiers, normalized.", - "items": { - "$ref": "#/definitions/dominos.CouponTierGroup" - }, - "type": "array" - } - }, - "type": "object" - }, - "dominos.CustomizationGroup": { - "properties": { - "category": { - "example": "BuildYourOwnDomino", + "msg": { + "example": "OK", "type": "string" - }, - "flavors": { - "items": { - "$ref": "#/definitions/dominos.CustomizationOption" - }, - "type": "array" - }, - "sides": { - "items": { - "$ref": "#/definitions/dominos.CustomizationOption" - }, - "type": "array" - }, - "sizes": { - "items": { - "$ref": "#/definitions/dominos.CustomizationOption" - }, - "type": "array" - }, - "toppings": { - "items": { - "$ref": "#/definitions/dominos.CustomizationOption" - }, - "type": "array" } }, "type": "object" }, - "dominos.CustomizationOption": { + "datasets.appleBooksSearchResponseDoc": { "properties": { - "attributes": { - "additionalProperties": { - "type": "string" - }, - "type": "object" - }, "code": { - "example": "K", - "type": "string" - }, - "description": { - "type": "string" + "example": 200, + "type": "integer" }, - "flags": { - "example": [ - "Meat" - ], - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/datasets.AppleBooksSearchResponse" }, - "name": { - "example": "Bacon", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dominos.CustomizationResponse": { + "datasets.applePlaceResponseDoc": { "properties": { - "cooking_instructions": { - "description": "CookingInstructions is sorted by code, independent of Groups.", - "items": { - "$ref": "#/definitions/dominos.CookingInstruction" - }, - "type": "array" - }, - "count": { - "description": "Count is the total number of options across every group's sizes,\nflavors, toppings, and sides (cooking instructions are not counted).", - "example": 142, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "groups": { - "items": { - "$ref": "#/definitions/dominos.CustomizationGroup" - }, - "type": "array" - }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/es.ApplePlaceRecord" }, - "store_id": { - "example": "4336", - "type": "string" - } - }, - "type": "object" - }, - "dominos.DayHours": { - "properties": { - "week_day": { - "example": "Monday", + "msg": { + "example": "OK", "type": "string" - }, - "windows": { - "items": { - "$ref": "#/definitions/dominos.TimeWindow" - }, - "type": "array" } }, "type": "object" }, - "dominos.LocatorQuery": { + "datasets.applePlacesFacetResponseDoc": { "properties": { - "city": { - "example": "WASHINGTON", - "type": "string" - }, - "granularity": { - "description": "Granularity is Domino's own label for how precisely the address\nresolved, e.g. \"CityRegionStreetRange\", \"CityRegion\", \"PostalCode\", or\n\"None\" when nothing could be resolved.", - "example": "CityRegionStreetRange", - "type": "string" - }, - "postal_code": { - "example": "20500-0005", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "region": { - "example": "DC", - "type": "string" + "data": { + "$ref": "#/definitions/datasets.ApplePlaceFacetResponse" }, - "street": { - "example": "1600 PENNSYLVANIA AVE NW", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dominos.MenuCategory": { + "datasets.applePlacesSearchResponseDoc": { "properties": { "code": { - "example": "Pizza/Specialty", - "type": "string" + "example": 200, + "type": "integer" }, - "items": { - "items": { - "$ref": "#/definitions/dominos.MenuItem" - }, - "type": "array" + "data": { + "$ref": "#/definitions/datasets.ApplePlaceSearchResponse" }, - "name": { - "example": "Pizza > Specialty Pizzas", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dominos.MenuItem": { + "datasets.applePodcastsShowResponseDoc": { "properties": { "code": { - "example": "S_PIZZA", - "type": "string" - }, - "description": { - "type": "string" + "example": 200, + "type": "integer" }, - "name": { - "example": "Pizza", - "type": "string" + "data": { + "$ref": "#/definitions/es.ApplePodcastsShowRecord" }, - "product_type": { - "example": "Pizza", + "msg": { + "example": "OK", "type": "string" - }, - "variants": { - "items": { - "$ref": "#/definitions/dominos.MenuVariant" - }, - "type": "array" } }, "type": "object" }, - "dominos.MenuResponse": { + "datasets.applePodcastsShowsFacetResponseDoc": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/dominos.MenuCategory" - }, - "type": "array" - }, - "count": { - "example": 70, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/datasets.ApplePodcastsShowsFacetResponse" }, - "store_id": { - "example": "4336", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dominos.MenuVariant": { + "datasets.applePodcastsShowsSearchResponseDoc": { "properties": { "code": { - "example": "14SCREEN", - "type": "string" - }, - "name": { - "example": "Large (14\") Hand Tossed Pizza", - "type": "string" + "example": 200, + "type": "integer" }, - "price": { - "example": 14.99, - "type": "number" + "data": { + "$ref": "#/definitions/datasets.ApplePodcastsShowsSearchResponse" }, - "size_code": { - "example": "14", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dominos.NutritionResponse": { + "datasets.appsDatasetItemResponseDoc": { "properties": { - "base": { - "example": "HANDTOSS", - "type": "string" - }, - "calories": { - "example": "180 Calories / 1 slice (1/8 of pizza)", - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "name": { - "description": "Name is the resolved product/configuration name Domino's itself\nreturned -- for a named item this confirms which default variant was\npriced; for a build-your-own pizza it echoes the full description.", - "example": "Large (14\") Hand Tossed Pizza", - "type": "string" - }, - "product_code": { - "example": "S_PIZZA", - "type": "string" - }, - "size": { - "example": "14", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/es.AppRecord" }, - "store_id": { - "example": "4336", + "msg": { + "example": "OK", "type": "string" - }, - "toppings": { - "example": [ - "P" - ], - "items": { - "type": "string" - }, - "type": "array" } }, "type": "object" }, - "dominos.Store": { + "datasets.appsSearchResponseDoc": { "properties": { - "address": { - "$ref": "#/definitions/dominos.StoreAddress" - }, - "carryout_available": { - "example": true, - "type": "boolean" - }, - "contactless_carryout": { - "example": "DISABLED", - "type": "string" - }, - "contactless_delivery": { - "example": "AVAILABLE", - "type": "string" - }, - "delivery_available": { - "description": "DeliveryAvailable, CarryoutAvailable, and DriveUpCarryoutAvailable are\nthis store's own allowed-order-type flags, independent of whether it\nhappens to be open right now.", - "example": true, - "type": "boolean" - }, - "drive_up_carryout_available": { - "example": true, - "type": "boolean" - }, - "estimated_wait_minutes": { - "additionalProperties": { - "$ref": "#/definitions/dominos.WaitEstimate" - }, - "description": "EstimatedWaitMinutes is keyed by service method (Delivery, Carryout).", - "type": "object" - }, - "is_online_now": { - "example": true, - "type": "boolean" - }, - "is_open": { - "example": true, - "type": "boolean" - }, - "phone": { - "example": "202-639-8700", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "service_hours": { - "additionalProperties": { - "type": "string" - }, - "description": "ServiceHours is Domino's own free-text hours summary per service\nmethod (Carryout, Delivery, DriveUpCarryout, DeliverToMe).", - "type": "object" + "data": { + "$ref": "#/definitions/datasets.AppsSearchResponse" }, - "store_id": { - "example": "4336", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dominos.StoreAddress": { + "datasets.bbbBusinessResponseDoc": { "properties": { - "city": { - "example": "Washington", - "type": "string" - }, - "latitude": { - "example": 38.9036, - "type": "number" - }, - "longitude": { - "example": -77.03, - "type": "number" - }, - "postal_code": { - "example": "20005", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "region": { - "example": "DC", - "type": "string" + "data": { + "$ref": "#/definitions/es.BBBBusinessRecord" }, - "street": { - "example": "1300 L St Nw", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dominos.StoreDetailResponse": { + "datasets.bbbBusinessesFacetResponseDoc": { "properties": { - "address": { - "$ref": "#/definitions/dominos.StoreAddress" - }, - "carryout_available": { - "example": true, - "type": "boolean" - }, - "contactless_carryout": { - "example": "DISABLED", - "type": "string" - }, - "contactless_delivery": { - "example": "AVAILABLE", - "type": "string" - }, - "delivery_available": { - "example": true, - "type": "boolean" - }, - "dine_in_available": { - "example": false, - "type": "boolean" - }, - "drive_up_carryout_available": { - "example": true, - "type": "boolean" - }, - "estimated_wait_minutes": { - "additionalProperties": { - "$ref": "#/definitions/dominos.WaitEstimate" - }, - "description": "EstimatedWaitMinutes is keyed by service method (Delivery, Carryout),\nsame shape as /dominos/store-locator's per-store field.", - "type": "object" - }, - "fetched_at": { - "type": "string" - }, - "hours": { - "description": "Hours is the store's general weekly hours, Monday-first.", - "items": { - "$ref": "#/definitions/dominos.DayHours" - }, - "type": "array" - }, - "is_online_now": { - "example": true, - "type": "boolean" - }, - "is_open": { - "example": true, - "type": "boolean" - }, - "minimum_carryout_order_amount": { - "example": 0, - "type": "number" - }, - "minimum_delivery_order_amount": { - "example": 20, - "type": "number" - }, - "name": { - "example": "Downtown L St", - "type": "string" - }, - "phone": { - "example": "202-639-8700", - "type": "string" - }, - "service_hours": { - "additionalProperties": { - "items": { - "$ref": "#/definitions/dominos.DayHours" - }, - "type": "array" - }, - "description": "ServiceHours is the full weekly hours per service method (Carryout,\nDelivery, DriveUpCarryout, DeliverToMe), Monday-first.", - "type": "object" - }, - "service_hours_description": { - "additionalProperties": { - "type": "string" - }, - "description": "ServiceHoursDescription is Domino's own free-text summary per service\nmethod -- the same shape /dominos/store-locator's per-store\nservice_hours field carries.", - "type": "object" - }, - "source_url": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "status": { - "description": "Status is Domino's own legal/operating status label, e.g. \"Open\".", - "example": "Open", - "type": "string" + "data": { + "$ref": "#/definitions/datasets.BBBBusinessesFacetResponse" }, - "store_id": { - "example": "4336", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dominos.StoreLocatorResponse": { + "datasets.bbbBusinessesSearchResponseDoc": { "properties": { - "count": { - "example": 2, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "query": { - "$ref": "#/definitions/dominos.LocatorQuery" - }, - "service_method": { - "example": "Delivery", - "type": "string" - }, - "source_url": { - "type": "string" - }, - "stores": { - "items": { - "$ref": "#/definitions/dominos.Store" - }, - "type": "array" - } - }, - "type": "object" - }, - "dominos.TimeWindow": { - "properties": { - "closes": { - "example": "23:59", - "type": "string" + "data": { + "$ref": "#/definitions/datasets.BBBBusinessesSearchResponse" }, - "opens": { - "example": "10:00", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dominos.WaitEstimate": { - "properties": { - "max": { - "example": 29, - "type": "integer" - }, - "min": { - "example": 14, - "type": "integer" - } - }, - "type": "object" - }, - "dominos.couponsResponseDoc": { + "datasets.boxOfficeMojoFacetResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/dominos.CouponsResponse" + "$ref": "#/definitions/datasets.BoxOfficeMojoFacetResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "dominos.customizationResponseDoc": { + "datasets.boxOfficeMojoItemResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/dominos.CustomizationResponse" + "$ref": "#/definitions/es.BoxOfficeMojoTitleRecord" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "dominos.menuResponseDoc": { + "datasets.boxOfficeMojoSearchResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/dominos.MenuResponse" + "$ref": "#/definitions/datasets.BoxOfficeMojoSearchResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "dominos.nutritionResponseDoc": { + "datasets.chartsSearchResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/dominos.NutritionResponse" + "$ref": "#/definitions/datasets.ChartsSearchResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "dominos.storeDetailResponseDoc": { + "datasets.chromeExtensionChangesResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/dominos.StoreDetailResponse" + "$ref": "#/definitions/datasets.ChromeExtensionChangesResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "dominos.storeLocatorResponseDoc": { + "datasets.chromeExtensionFacetResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/dominos.StoreLocatorResponse" + "$ref": "#/definitions/datasets.ChromeExtensionFacetResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "doordash.Address": { - "properties": { - "city": { - "description": "City the store is in.", - "type": "string" - }, - "country": { - "description": "Country the store is in.", - "type": "string" - }, - "postalCode": { - "description": "Postal code of the store address.", - "type": "string" - }, - "region": { - "description": "State or region the store is in.", - "type": "string" - }, - "street": { - "description": "Street line of the store address.", + "example": "OK", "type": "string" } }, "type": "object" }, - "doordash.Cuisine": { + "datasets.chromeExtensionHistoryResponseDoc": { "properties": { - "animatedCoverImageUrl": { - "type": "string" - }, - "coverImageUrl": { - "type": "string" - }, - "friendlyName": { - "type": "string" - }, - "id": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "localizedFriendlyName": { - "type": "string" + "data": { + "$ref": "#/definitions/datasets.ChromeExtensionHistoryResponse" }, - "name": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "doordash.ExploreItem": { + "datasets.chromeExtensionItemResponseDoc": { "properties": { - "imageUrl": { - "type": "string" - }, - "itemId": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/es.ChromeExtensionRecord" }, - "price": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "doordash.ExploreResponse": { - "properties": { - "stores": { - "items": { - "$ref": "#/definitions/doordash.ExploreStore" - }, - "type": "array" - } - }, - "type": "object" - }, - "doordash.ExploreStore": { + "datasets.chromeExtensionMetricsResponseDoc": { "properties": { - "asapAvailable": { - "type": "boolean" - }, - "averageRating": { - "type": "number" - }, - "coverImageUrl": { - "type": "string" - }, - "dashPassEligible": { - "type": "boolean" - }, - "displayAsapTime": { - "type": "string" - }, - "displayStatus": { - "type": "string" - }, - "name": { - "type": "string" - }, - "numberOfRatings": { + "code": { + "example": 200, "type": "integer" }, - "pickupAvailable": { - "type": "boolean" - }, - "priceRange": { - "type": "integer" + "data": { + "$ref": "#/definitions/datasets.ChromeExtensionMetricsResponse" }, - "storeId": { + "msg": { + "example": "OK", "type": "string" - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "topItems": { - "items": { - "$ref": "#/definitions/doordash.ExploreItem" - }, - "type": "array" } }, "type": "object" }, - "doordash.FeedResponse": { - "properties": { - "stores": { - "items": { - "$ref": "#/definitions/doordash.FeedStore" - }, - "type": "array" - } - }, - "type": "object" - }, - "doordash.FeedStore": { + "datasets.chromeExtensionsSearchResponseDoc": { "properties": { - "averageRating": { - "type": "number" - }, - "coverImageUrl": { - "type": "string" - }, - "deliveryFee": { - "type": "string" - }, - "eta": { - "type": "string" - }, - "name": { - "type": "string" - }, - "priceRange": { - "type": "string" - }, - "ratingCount": { - "type": "string" - }, - "storeId": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "doordash.FilterValue": { - "properties": { - "displayName": { - "type": "string" + "data": { + "$ref": "#/definitions/datasets.ChromeExtensionSearchResponse" }, - "type": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "doordash.MenuItem": { + "datasets.creatorDatasetItemResponseDoc": { "properties": { - "description": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/es.CreatorRecord" }, - "price": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "doordash.MenuResponse": { + "datasets.creatorsSearchResponseDoc": { "properties": { - "sections": { - "items": { - "$ref": "#/definitions/doordash.MenuSection" - }, - "type": "array" - }, - "storeId": { - "type": "string" - }, - "storeName": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "doordash.MenuSection": { - "properties": { - "items": { - "items": { - "$ref": "#/definitions/doordash.MenuItem" - }, - "type": "array" + "data": { + "$ref": "#/definitions/datasets.CreatorsSearchResponse" }, - "name": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "doordash.ReviewItem": { + "datasets.datasetFacetResponseDoc": { "properties": { - "avatarInitial": { - "type": "string" - }, - "avatarUrl": { - "type": "string" - }, - "rating": { - "type": "number" - }, - "reviewerName": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "reviewerReviewsCount": { - "type": "string" + "data": { + "$ref": "#/definitions/datasets.DatasetFacetResponse" }, - "text": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "doordash.SearchAddress": { + "datasets.doorDashStoreResponseDoc": { "properties": { - "city": { - "type": "string" - }, - "displayAddress": { - "type": "string" - }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" + "code": { + "example": 200, + "type": "integer" }, - "region": { - "type": "string" + "data": { + "$ref": "#/definitions/es.DoorDashStoreRecord" }, - "street": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "doordash.SearchFilter": { + "datasets.doorDashStoresFacetResponseDoc": { "properties": { - "allowedValues": { - "items": { - "$ref": "#/definitions/doordash.FilterValue" - }, - "type": "array" - }, - "defaultValues": { - "items": { - "$ref": "#/definitions/doordash.FilterValue" - }, - "type": "array" - }, - "displayName": { - "type": "string" - }, - "id": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "rangeDirection": { - "type": "string" + "data": { + "$ref": "#/definitions/datasets.DoorDashStoreFacetResponse" }, - "type": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "doordash.SearchFiltersResponse": { - "properties": { - "cuisines": { - "items": { - "$ref": "#/definitions/doordash.Cuisine" - }, - "type": "array" - }, - "filters": { - "items": { - "$ref": "#/definitions/doordash.SearchFilter" - }, - "type": "array" - } - }, - "type": "object" - }, - "doordash.SearchItemResult": { + "datasets.doorDashStoresSearchResponseDoc": { "properties": { - "description": { - "type": "string" - }, - "distance": { - "type": "string" - }, - "itemId": { - "type": "string" - }, - "name": { - "type": "string" - }, - "price": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "storeId": { - "type": "string" + "data": { + "$ref": "#/definitions/datasets.DoorDashStoreSearchResponse" }, - "storeName": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "doordash.SearchItemsResponse": { + "datasets.facebookPageResponseDoc": { "properties": { - "query": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "results": { - "items": { - "$ref": "#/definitions/doordash.SearchItemResult" - }, - "type": "array" - } - }, - "type": "object" - }, - "doordash.SearchResponse": { - "properties": { - "query": { - "type": "string" + "data": { + "$ref": "#/definitions/es.FacebookPageCandidate" }, - "results": { - "items": { - "$ref": "#/definitions/doordash.SearchResult" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "doordash.SearchResult": { + "datasets.facebookPagesFacetResponseDoc": { "properties": { - "address": { - "$ref": "#/definitions/doordash.SearchAddress" - }, - "asapAvailable": { - "type": "boolean" - }, - "coverImageUrl": { - "type": "string" - }, - "dashPassEligible": { - "type": "boolean" - }, - "distance": { - "type": "string" - }, - "name": { - "type": "string" - }, - "pickupAvailable": { - "type": "boolean" - }, - "squareImageUrl": { - "type": "string" - }, - "storeId": { - "type": "string" - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "type": { - "type": "string" + "data": { + "$ref": "#/definitions/datasets.FacebookPageFacetResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "doordash.StoreDetail": { + "datasets.facebookPagesSearchResponseDoc": { "properties": { - "address": { - "allOf": [ - { - "$ref": "#/definitions/doordash.Address" - } - ], - "description": "Address of the store." - }, - "averageRating": { - "description": "Average customer rating of the store.", - "type": "number" - }, - "images": { - "description": "URLs of store images, such as its logo.", - "items": { - "type": "string" - }, - "type": "array" - }, - "latitude": { - "description": "Latitude of the store, in decimal degrees.", - "type": "number" - }, - "longitude": { - "description": "Longitude of the store, in decimal degrees.", - "type": "number" - }, - "menuItemCount": { - "description": "Total number of items across all menu sections.", - "type": "integer" - }, - "menuSectionCount": { - "description": "Number of sections on the store menu.", + "code": { + "example": 200, "type": "integer" }, - "name": { - "description": "Store name as shown on DoorDash.", - "type": "string" - }, - "priceRange": { - "description": "Price range indicator DoorDash shows for the store.", - "type": "string" - }, - "ratingCount": { - "description": "Number of ratings as DoorDash displays it. Not populated by this endpoint.", - "type": "string" - }, - "storeId": { - "description": "DoorDash store id.", - "type": "string" + "data": { + "$ref": "#/definitions/datasets.FacebookPageSearchResponse" }, - "url": { - "description": "URL of the store page on DoorDash.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "doordash.StoreFulfillmentResponse": { + "datasets.githubUserResponseDoc": { "properties": { - "deliverySubtitle": { - "type": "string" - }, - "deliveryTitle": { - "type": "string" - }, - "fulfillmentMethod": { - "type": "string" - }, - "isFreeDelivery": { - "type": "boolean" - }, - "offeredFulfillmentMethods": { - "items": { - "type": "string" - }, - "type": "array" - }, - "scheduleDescription": { - "type": "string" - }, - "storeId": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "storeName": { - "type": "string" + "data": { + "$ref": "#/definitions/es.GithubUserRecord" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "doordash.StoreInfoResponse": { + "datasets.githubUsersFacetResponseDoc": { "properties": { - "address": { - "description": "Full address of the store on one line.", - "type": "string" - }, - "businessName": { - "description": "Business name shown on the store's info card.", - "type": "string" - }, - "cityRegion": { - "description": "City and state or region line of the address, such as `San Francisco, CA`.", - "type": "string" - }, - "hasPhone": { - "description": "Whether DoorDash lists a phone number for the store.", - "type": "boolean" - }, - "hasWebsite": { - "description": "Whether DoorDash lists a website for the store.", - "type": "boolean" - }, - "latitude": { - "description": "Latitude of the store, in decimal degrees.", - "type": "number" - }, - "longitude": { - "description": "Longitude of the store, in decimal degrees.", - "type": "number" - }, - "phone": { - "description": "Store phone number as DoorDash lists it, such as `4157518000`.", - "type": "string" - }, - "storeId": { - "description": "DoorDash store id that was requested.", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "street": { - "description": "Street line of the store address.", - "type": "string" + "data": { + "$ref": "#/definitions/datasets.GithubUserFacetResponse" }, - "url": { - "description": "URL of the store page on DoorDash.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "doordash.StoreItemResponse": { + "datasets.githubUsersSearchResponseDoc": { "properties": { - "description": { - "type": "string" - }, - "itemId": { - "type": "string" - }, - "name": { - "type": "string" - }, - "price": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "storeId": { - "type": "string" + "data": { + "$ref": "#/definitions/datasets.GithubUserSearchResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "doordash.StoreReviewsResponse": { + "datasets.goodreadsAuthorResponseDoc": { "properties": { - "averageRating": { - "type": "number" - }, - "ratingCount": { - "type": "string" - }, - "reviews": { - "items": { - "$ref": "#/definitions/doordash.ReviewItem" - }, - "type": "array" - }, - "storeId": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "storeName": { - "type": "string" + "data": { + "$ref": "#/definitions/es.GoodreadsAuthorRecord" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "doordash.exploreResponseDoc": { + "datasets.goodreadsAuthorsFacetResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/doordash.ExploreResponse" + "$ref": "#/definitions/datasets.GoodreadsAuthorFacetResponse" }, "msg": { "example": "OK", @@ -55616,14 +59502,14 @@ }, "type": "object" }, - "doordash.feedResponseDoc": { + "datasets.goodreadsAuthorsSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/doordash.FeedResponse" + "$ref": "#/definitions/datasets.GoodreadsAuthorSearchResponse" }, "msg": { "example": "OK", @@ -55632,14 +59518,14 @@ }, "type": "object" }, - "doordash.menuResponseDoc": { + "datasets.goodreadsBookResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/doordash.MenuResponse" + "$ref": "#/definitions/es.GoodreadsBookRecord" }, "msg": { "example": "OK", @@ -55648,14 +59534,14 @@ }, "type": "object" }, - "doordash.searchFiltersResponseDoc": { + "datasets.goodreadsBooksFacetResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/doordash.SearchFiltersResponse" + "$ref": "#/definitions/datasets.GoodreadsFacetResponse" }, "msg": { "example": "OK", @@ -55664,14 +59550,14 @@ }, "type": "object" }, - "doordash.searchItemsResponseDoc": { + "datasets.goodreadsBooksSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/doordash.SearchItemsResponse" + "$ref": "#/definitions/datasets.GoodreadsSearchResponse" }, "msg": { "example": "OK", @@ -55680,14 +59566,14 @@ }, "type": "object" }, - "doordash.searchResponseDoc": { + "datasets.googleMapBusinessResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/doordash.SearchResponse" + "$ref": "#/definitions/es.GoogleBusiness" }, "msg": { "example": "OK", @@ -55696,14 +59582,14 @@ }, "type": "object" }, - "doordash.storeFulfillmentResponseDoc": { + "datasets.googleMapBusinessesFacetResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/doordash.StoreFulfillmentResponse" + "$ref": "#/definitions/datasets.GoogleBusinessFacetResponse" }, "msg": { "example": "OK", @@ -55712,14 +59598,14 @@ }, "type": "object" }, - "doordash.storeInfoResponseDoc": { + "datasets.googleMapBusinessesSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/doordash.StoreInfoResponse" + "$ref": "#/definitions/datasets.GoogleBusinessSearchResponse" }, "msg": { "example": "OK", @@ -55728,14 +59614,14 @@ }, "type": "object" }, - "doordash.storeItemResponseDoc": { + "datasets.housingMarketItemResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/doordash.StoreItemResponse" + "$ref": "#/definitions/es.HousingMarketRecord" }, "msg": { "example": "OK", @@ -55744,14 +59630,14 @@ }, "type": "object" }, - "doordash.storeResponseDoc": { + "datasets.housingMarketsFacetResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/doordash.StoreDetail" + "$ref": "#/definitions/datasets.HousingFacetResponse" }, "msg": { "example": "OK", @@ -55760,14 +59646,14 @@ }, "type": "object" }, - "doordash.storeReviewsResponseDoc": { + "datasets.housingMarketsSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/doordash.StoreReviewsResponse" + "$ref": "#/definitions/datasets.HousingSearchResponse" }, "msg": { "example": "OK", @@ -55776,825 +59662,831 @@ }, "type": "object" }, - "dramabox.AppTagRef": { + "datasets.instagramUserResponseDoc": { "properties": { - "id": { + "code": { + "example": 200, "type": "integer" }, - "name": { + "data": { + "$ref": "#/definitions/es.InstagramUserRecord" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dramabox.AppTitle": { + "datasets.instagramUsersFacetResponseDoc": { "properties": { - "cover_url": { - "type": "string" - }, - "description": { - "type": "string" - }, - "episodes": { + "code": { + "example": 200, "type": "integer" }, - "id": { - "type": "string" - }, - "in_library": { - "description": "InLibrary is always false for the shared guest session.", - "type": "boolean" + "data": { + "$ref": "#/definitions/datasets.InstagramUserFacetResponse" }, - "play_count": { - "description": "PlayCount is the app's displayed play count where the route carries it.", + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "datasets.instagramUsersSearchResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "protagonist": { - "description": "Protagonist lists the cast names as the app prints them.", - "type": "string" + "data": { + "$ref": "#/definitions/datasets.InstagramUserSearchResponse" }, - "shelf_time": { - "description": "ShelfTime is the app's listing time as printed (\"2026-09-27 16:42:18\").", + "msg": { + "example": "OK", "type": "string" - }, - "shelf_time_ms": { - "description": "ShelfTimeMS is the same listing time as Unix milliseconds.", + } + }, + "type": "object" + }, + "datasets.jobsCompaniesResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "tag_refs": { - "description": "TagRefs pairs each tag with its id; pass an id to dramabox-tag.", - "items": { - "$ref": "#/definitions/dramabox.AppTagRef" - }, - "type": "array" - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/datasets.JobCompaniesResponse" }, - "url": { - "description": "URL is the public DramaBox website page for the title.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dramabox.Book": { + "datasets.jobsFacetResponseDoc": { "properties": { - "cover_url": { - "type": "string" - }, - "description": { - "type": "string" - }, - "episodes": { - "type": "integer" - }, - "follows": { + "code": { + "example": 200, "type": "integer" }, - "genres": { - "items": { - "$ref": "#/definitions/dramabox.Genre" - }, - "type": "array" + "data": { + "$ref": "#/definitions/datasets.JobsFacetResponse" }, - "id": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "datasets.jobsItemResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "language": { - "type": "string" + "data": { + "additionalProperties": {}, + "type": "object" }, - "listed_at": { - "description": "ListedAt is the site's first-listing timestamp as printed\n(\"2026-10-24 10:00:00\"); its time zone is not stated by the site.", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "datasets.jobsSearchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "rating": { - "type": "number" + "data": { + "$ref": "#/definitions/datasets.JobsSearchResponse" }, - "status": { - "description": "Status is the site's update label, for example \"Completed\".", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "datasets.journalistsFacetResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/datasets.JournalistsFacetResponse" }, - "title": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "datasets.journalistsItemResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/es.JournalistRecord" }, - "views_display": { - "description": "ViewsDisplay is the view count as the site prints it (\"15.6K\"); it is\nempty where the list does not carry one.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dramabox.BrowseResponse": { + "datasets.journalistsSearchResponseDoc": { "properties": { - "books": { - "items": { - "$ref": "#/definitions/dramabox.Book" - }, - "type": "array" - }, - "genre_id": { + "code": { + "example": 200, "type": "integer" }, - "genre_name": { - "type": "string" + "data": { + "$ref": "#/definitions/datasets.JournalistsSearchResponse" }, - "language": { + "msg": { + "example": "OK", "type": "string" - }, - "page": { - "type": "integer" - }, - "total_pages": { - "type": "integer" } }, "type": "object" }, - "dramabox.CategoriesResponse": { + "datasets.listResponseDoc": { "properties": { - "groups": { - "items": { - "$ref": "#/definitions/dramabox.CategoryGroup" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/datasets.DatasetListResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "dramabox.CategoryBooksResponse": { + "datasets.llmsFacetResponseDoc": { "properties": { - "has_more": { - "type": "boolean" - }, - "limit": { + "code": { + "example": 200, "type": "integer" }, - "page": { - "type": "integer" + "data": { + "$ref": "#/definitions/datasets.LlmsFacetResponse" }, - "titles": { - "items": { - "$ref": "#/definitions/dramabox.AppTitle" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "dramabox.CategoryGroup": { + "datasets.llmsItemResponseDoc": { "properties": { - "key": { - "description": "Key is language, production, dub, genre_1, genre_2 or sort.", - "type": "string" - }, - "options": { - "items": { - "$ref": "#/definitions/dramabox.CategoryOption" - }, - "type": "array" - }, - "row": { - "description": "Row is the genre row index for the two type-4 groups (0 then 1). It is\nzero/omitted for every other group.", + "code": { + "example": 200, "type": "integer" }, - "type": { - "description": "Type is the upstream classify type id (1, 6, 2, 4, 4, 5 respectively,\nin the order above).", - "type": "integer" + "data": { + "$ref": "#/definitions/datasets.LlmsRecord" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "dramabox.CategoryOption": { + "datasets.llmsSearchResponseDoc": { "properties": { - "name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "value": { + "data": { + "$ref": "#/definitions/datasets.LlmsSearchResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dramabox.Channel": { + "datasets.numbeoCitiesFacetResponseDoc": { "properties": { - "id": { + "code": { + "example": 200, "type": "integer" }, - "name": { + "data": { + "$ref": "#/definitions/datasets.NumbeoCityFacetResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dramabox.ChannelsResponse": { + "datasets.numbeoCitiesSearchResponseDoc": { "properties": { - "channels": { - "items": { - "$ref": "#/definitions/dramabox.Channel" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/datasets.NumbeoCitySearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "dramabox.DramaResponse": { + "datasets.numbeoCityResponseDoc": { "properties": { - "available_languages": { - "items": { - "type": "string" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "cover_url": { - "type": "string" + "data": { + "$ref": "#/definitions/es.NumbeoCityRecord" }, - "description": { + "msg": { + "example": "OK", "type": "string" - }, - "episode_count": { + } + }, + "type": "object" + }, + "datasets.numbeoCountriesSearchResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "episodes": { - "items": { - "$ref": "#/definitions/dramabox.Episode" - }, - "type": "array" + "data": { + "$ref": "#/definitions/datasets.NumbeoCountrySearchResponse" }, - "follows": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "datasets.numbeoCountryResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "genres": { - "items": { - "$ref": "#/definitions/dramabox.Genre" - }, - "type": "array" + "data": { + "$ref": "#/definitions/es.NumbeoCountryRecord" }, - "id": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "datasets.pitchbookAdvisorResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "language": { - "type": "string" + "data": { + "$ref": "#/definitions/es.PitchbookRecord" }, - "listed_at": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "datasets.pitchbookAdvisorsFacetResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "related": { - "items": { - "$ref": "#/definitions/dramabox.Book" - }, - "type": "array" - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/datasets.PitchbookAdvisorsFacetResponse" }, - "title": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "datasets.pitchbookAdvisorsSearchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "updated_at": { - "type": "string" + "data": { + "$ref": "#/definitions/datasets.PitchbookAdvisorsSearchResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" - }, - "views": { - "type": "integer" } }, "type": "object" }, - "dramabox.Episode": { + "datasets.pitchbookCompaniesFacetResponseDoc": { "properties": { - "duration_ms": { + "code": { + "example": 200, "type": "integer" }, - "free": { - "description": "Free is true for episodes the site unlocks without payment.", - "type": "boolean" + "data": { + "$ref": "#/definitions/datasets.PitchbookCompaniesFacetResponse" }, - "id": { + "msg": { + "example": "OK", "type": "string" - }, - "number": { - "description": "Number is the 1-based episode number.", + } + }, + "type": "object" + }, + "datasets.pitchbookCompaniesSearchResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "thumbnail_url": { - "type": "string" + "data": { + "$ref": "#/definitions/datasets.PitchbookCompaniesSearchResponse" }, - "updated_at": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dramabox.Genre": { + "datasets.pitchbookCompanyResponseDoc": { "properties": { - "id": { + "code": { + "example": 200, "type": "integer" }, - "name": { + "data": { + "$ref": "#/definitions/es.PitchbookRecord" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dramabox.GenresResponse": { + "datasets.pitchbookFundResponseDoc": { "properties": { - "genres": { - "items": { - "$ref": "#/definitions/dramabox.Genre" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "language": { + "data": { + "$ref": "#/definitions/es.PitchbookRecord" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dramabox.HomeResponse": { + "datasets.pitchbookFundsFacetResponseDoc": { "properties": { - "featured": { - "items": { - "$ref": "#/definitions/dramabox.Book" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "language": { - "type": "string" + "data": { + "$ref": "#/definitions/datasets.PitchbookFundsFacetResponse" }, - "shelves": { - "items": { - "$ref": "#/definitions/dramabox.Shelf" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "dramabox.MoreResponse": { + "datasets.pitchbookFundsSearchResponseDoc": { "properties": { - "books": { - "items": { - "$ref": "#/definitions/dramabox.Book" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "language": { - "type": "string" + "data": { + "$ref": "#/definitions/datasets.PitchbookFundsSearchResponse" }, - "name": { + "msg": { + "example": "OK", "type": "string" - }, - "page": { + } + }, + "type": "object" + }, + "datasets.pitchbookInvestorResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "position": { - "type": "string" + "data": { + "$ref": "#/definitions/es.PitchbookRecord" }, - "total_pages": { - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "dramabox.PerformerResponse": { + "datasets.pitchbookInvestorsFacetResponseDoc": { "properties": { - "avatar": { - "type": "string" - }, - "followed": { - "type": "boolean" - }, - "gender": { + "code": { + "example": 200, "type": "integer" }, - "has_more": { - "type": "boolean" + "data": { + "$ref": "#/definitions/datasets.PitchbookInvestorsFacetResponse" }, - "id": { + "msg": { + "example": "OK", "type": "string" - }, - "limit": { + } + }, + "type": "object" + }, + "datasets.pitchbookInvestorsSearchResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/datasets.PitchbookInvestorsSearchResponse" }, - "page": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "datasets.pitchbookLimitedPartnerResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "titles": { - "items": { - "$ref": "#/definitions/dramabox.AppTitle" - }, - "type": "array" + "data": { + "$ref": "#/definitions/es.PitchbookRecord" }, - "video_count": { - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "dramabox.RankMeta": { + "datasets.pitchbookLimitedPartnersFacetResponseDoc": { "properties": { - "hot_code": { - "type": "string" - }, - "sort": { + "code": { + "example": 200, "type": "integer" }, - "type": { - "type": "integer" + "data": { + "$ref": "#/definitions/datasets.PitchbookLimitedPartnersFacetResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "dramabox.RankResponse": { + "datasets.pitchbookLimitedPartnersSearchResponseDoc": { "properties": { - "rank_type": { - "description": "RankType echoes the requested tab; 0 means the default tab was used.", + "code": { + "example": 200, "type": "integer" }, - "tabs": { - "description": "Tabs are the ranking tabs the app API offers; pass a tab's type as\nrank_type to read that list.", - "items": { - "$ref": "#/definitions/dramabox.RankTab" - }, - "type": "array" + "data": { + "$ref": "#/definitions/datasets.PitchbookLimitedPartnersSearchResponse" }, - "titles": { - "description": "Titles holds the ranking list (fixed at 20 titles upstream).", - "items": { - "$ref": "#/definitions/dramabox.RankedTitle" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "dramabox.RankTab": { + "datasets.playstationGameResponseDoc": { "properties": { - "name": { - "type": "string" - }, - "type": { - "description": "Type is the value to pass as rank_type.", + "code": { + "example": 200, "type": "integer" + }, + "data": { + "$ref": "#/definitions/es.PlaystationGameRecord" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "dramabox.RankedTitle": { + "datasets.playstationGamesFacetResponseDoc": { "properties": { - "cover_url": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "data_from": { - "description": "DataFrom is the app's recommendation-source label.", - "type": "string" + "data": { + "$ref": "#/definitions/datasets.PlaystationFacetResponse" }, - "description": { + "msg": { + "example": "OK", "type": "string" - }, - "episodes": { + } + }, + "type": "object" + }, + "datasets.playstationGamesSearchResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "id": { - "type": "string" - }, - "in_library": { - "description": "InLibrary reports whether the title is in the caller's library, which\nfor a guest session is always false.", - "type": "boolean" - }, - "position": { - "description": "Position is the title's ordinal in the ranking (1-based).", - "type": "integer" + "data": { + "$ref": "#/definitions/datasets.PlaystationSearchResponse" }, - "protagonist": { - "description": "Protagonist lists the cast names as the app prints them.", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "datasets.producthuntMakerResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "rank": { - "$ref": "#/definitions/dramabox.RankMeta" + "data": { + "$ref": "#/definitions/es.ProductHuntMakerItem" }, - "shelf_time": { - "description": "ShelfTime is the app's listing time as printed (\"2026-09-27 16:42:18\").", + "msg": { + "example": "OK", "type": "string" - }, - "shelf_time_ms": { - "description": "ShelfTimeMS is the same listing time as Unix milliseconds.", + } + }, + "type": "object" + }, + "datasets.producthuntMakersFacetResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/datasets.ProductHuntMakersFacetResponse" }, - "url": { - "description": "URL is the public DramaBox website page for the title.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dramabox.RecommendResponse": { + "datasets.producthuntMakersSearchResponseDoc": { "properties": { - "has_more": { - "type": "boolean" - }, - "page": { + "code": { + "example": 200, "type": "integer" }, - "page_size": { - "description": "PageSize is the upstream page size (the route takes no page-size\nparameter, so callers cannot choose it).", - "type": "integer" + "data": { + "$ref": "#/definitions/datasets.ProductHuntMakersSearchResponse" }, - "title": { + "msg": { + "example": "OK", "type": "string" - }, - "titles": { - "items": { - "$ref": "#/definitions/dramabox.AppTitle" - }, - "type": "array" } }, "type": "object" }, - "dramabox.SearchPerson": { + "datasets.producthuntProductResponseDoc": { "properties": { - "avatar": { - "description": "Avatar is the performer image URL the app serves (jpg); it is catalogue\nartwork, not playable media.", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "id": { - "type": "string" + "data": { + "$ref": "#/definitions/es.ProductHuntProductItem" }, - "name": { + "msg": { + "example": "OK", "type": "string" - }, - "videos": { - "description": "Videos is the number of series the performer appears in.", - "type": "integer" } }, "type": "object" }, - "dramabox.SearchResponse": { + "datasets.producthuntProductsFacetResponseDoc": { "properties": { - "is_more": { - "description": "HasMore is the answer's isMore flag (the app API's totalSize is not\nusable: it answers 0 even when more pages exist).", - "type": "boolean" - }, - "keyword": { - "description": "Keyword echoes the normalized keyword that was searched.", - "type": "string" - }, - "limit": { - "type": "integer" - }, - "page": { + "code": { + "example": 200, "type": "integer" }, - "people": { - "description": "People holds the performer rows.", - "items": { - "$ref": "#/definitions/dramabox.SearchPerson" - }, - "type": "array" + "data": { + "$ref": "#/definitions/datasets.ProductHuntProductsFacetResponse" }, - "titles": { - "description": "Titles holds the book rows.", - "items": { - "$ref": "#/definitions/dramabox.AppTitle" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "dramabox.Shelf": { + "datasets.producthuntProductsSearchResponseDoc": { "properties": { - "books": { - "items": { - "$ref": "#/definitions/dramabox.Book" - }, - "type": "array" - }, - "id": { + "code": { + "example": 200, "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/datasets.ProductHuntProductsSearchResponse" }, - "position": { - "description": "Position is the dramabox-more position that lists this shelf in full:\ntrending, must-sees or hidden-gems; empty for an unknown shelf.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dramabox.SuggestItem": { + "datasets.producthuntTrendsFacetResponseDoc": { "properties": { - "avatar": { - "description": "Avatar is the performer image (jpg) for kind \"actor\".", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "cover_url": { - "description": "CoverURL is the book cover image (jpg) for kind \"book\".", - "type": "string" + "data": { + "$ref": "#/definitions/datasets.ProductHuntTrendsFacetResponse" }, - "id": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "datasets.producthuntTrendsSearchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "kind": { - "type": "string" + "data": { + "$ref": "#/definitions/datasets.ProductHuntTrendsSearchResponse" }, - "name": { + "msg": { + "example": "OK", "type": "string" - }, - "videos": { - "description": "Videos is the performer's series count for kind \"actor\".", - "type": "integer" } }, "type": "object" }, - "dramabox.SuggestResponse": { + "datasets.redditTrendingDatasetItemResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/dramabox.SuggestItem" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "keyword": { + "data": { + "$ref": "#/definitions/es.RedditTrendingEntry" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dramabox.TagResponse": { + "datasets.redditTrendingSearchResponseDoc": { "properties": { - "has_more": { - "type": "boolean" - }, - "limit": { - "type": "integer" - }, - "page": { + "code": { + "example": 200, "type": "integer" }, - "tag_id": { - "type": "integer" + "data": { + "$ref": "#/definitions/datasets.RedditTrendingSearchResponse" }, - "tag_name": { + "msg": { + "example": "OK", "type": "string" - }, - "titles": { - "items": { - "$ref": "#/definitions/dramabox.AppTitle" - }, - "type": "array" } }, "type": "object" }, - "dramabox.TheaterBanner": { + "datasets.reviewsSearchResponseDoc": { "properties": { - "image_url": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/datasets.ReviewsSearchResponse" }, - "title_id": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dramabox.TheaterResponse": { + "datasets.scamTrackerReportResponseDoc": { "properties": { - "banners": { - "items": { - "$ref": "#/definitions/dramabox.TheaterBanner" - }, - "type": "array" - }, - "channel": { - "$ref": "#/definitions/dramabox.Channel" - }, - "has_more": { - "description": "HasMore reports whether the recommendation block has another page.", - "type": "boolean" - }, - "hot_words": { - "items": { - "type": "string" - }, - "type": "array" - }, - "limit": { + "code": { + "example": 200, "type": "integer" }, - "page": { - "type": "integer" + "data": { + "$ref": "#/definitions/es.ScamTrackerReport" }, - "sections": { - "items": { - "$ref": "#/definitions/dramabox.TheaterSection" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "dramabox.TheaterSection": { + "datasets.scamTrackerReportsFacetResponseDoc": { "properties": { - "style": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/datasets.ScamTrackerReportsFacetResponse" }, - "titles": { - "items": { - "$ref": "#/definitions/dramabox.AppTitle" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "dramabox.TrendingResponse": { + "datasets.scamTrackerReportsSearchResponseDoc": { "properties": { - "hot": { - "items": { - "$ref": "#/definitions/dramabox.AppTitle" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "new_releases": { - "description": "NewReleases is the app's new-release list.", - "items": { - "$ref": "#/definitions/dramabox.AppTitle" - }, - "type": "array" + "data": { + "$ref": "#/definitions/datasets.ScamTrackerReportsSearchResponse" }, - "preset_keyword": { - "description": "PresetKeyword is the word the app pre-fills in its search box.", + "msg": { + "example": "OK", "type": "string" - }, - "rank_tabs": { - "description": "RankTabs are the ranking tabs; a tab's type is a valid rank_type for\ndramabox-rank.", - "items": { - "$ref": "#/definitions/dramabox.RankTab" - }, - "type": "array" - }, - "trending": { - "description": "Trending is the app's trending list.", - "items": { - "$ref": "#/definitions/dramabox.AppTitle" - }, - "type": "array" } }, "type": "object" }, - "dramabox.browseResponseDoc": { + "datasets.secCompaniesFacetResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/dramabox.BrowseResponse" + "$ref": "#/definitions/datasets.SecCompanyFacetResponse" }, "msg": { "example": "OK", @@ -56603,14 +60495,14 @@ }, "type": "object" }, - "dramabox.categoriesResponseDoc": { + "datasets.secCompaniesFinancialsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/dramabox.CategoriesResponse" + "$ref": "#/definitions/datasets.SecCompanyFinancialsResponse" }, "msg": { "example": "OK", @@ -56619,14 +60511,14 @@ }, "type": "object" }, - "dramabox.categoryBooksResponseDoc": { + "datasets.secCompaniesInsiderResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/dramabox.CategoryBooksResponse" + "$ref": "#/definitions/datasets.SecCompanyInsiderResponse" }, "msg": { "example": "OK", @@ -56635,14 +60527,14 @@ }, "type": "object" }, - "dramabox.channelsResponseDoc": { + "datasets.secCompaniesItemResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/dramabox.ChannelsResponse" + "$ref": "#/definitions/es.SecCompanyRecord" }, "msg": { "example": "OK", @@ -56651,14 +60543,14 @@ }, "type": "object" }, - "dramabox.dramaResponseDoc": { + "datasets.secCompaniesSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/dramabox.DramaResponse" + "$ref": "#/definitions/datasets.SecCompanySearchResponse" }, "msg": { "example": "OK", @@ -56667,14 +60559,14 @@ }, "type": "object" }, - "dramabox.genresResponseDoc": { + "datasets.secInstitutionalPositionsFacetResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/dramabox.GenresResponse" + "$ref": "#/definitions/datasets.SecInstitutionalPositionsFacetResponse" }, "msg": { "example": "OK", @@ -56683,14 +60575,14 @@ }, "type": "object" }, - "dramabox.homeResponseDoc": { + "datasets.secInstitutionalPositionsSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/dramabox.HomeResponse" + "$ref": "#/definitions/datasets.SecInstitutionalPositionsSearchResponse" }, "msg": { "example": "OK", @@ -56699,14 +60591,14 @@ }, "type": "object" }, - "dramabox.moreResponseDoc": { + "datasets.starbucksStoreResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/dramabox.MoreResponse" + "$ref": "#/definitions/es.StarbucksStoreRecord" }, "msg": { "example": "OK", @@ -56715,14 +60607,14 @@ }, "type": "object" }, - "dramabox.performerResponseDoc": { + "datasets.starbucksStoresFacetResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/dramabox.PerformerResponse" + "$ref": "#/definitions/datasets.StarbucksStoreFacetResponse" }, "msg": { "example": "OK", @@ -56731,14 +60623,14 @@ }, "type": "object" }, - "dramabox.rankResponseDoc": { + "datasets.starbucksStoresSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/dramabox.RankResponse" + "$ref": "#/definitions/datasets.StarbucksStoreSearchResponse" }, "msg": { "example": "OK", @@ -56747,14 +60639,14 @@ }, "type": "object" }, - "dramabox.recommendResponseDoc": { + "datasets.steamAchievementDatasetItemResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/dramabox.RecommendResponse" + "$ref": "#/definitions/es.SteamAchievementRecord" }, "msg": { "example": "OK", @@ -56763,14 +60655,14 @@ }, "type": "object" }, - "dramabox.searchResponseDoc": { + "datasets.steamAchievementsSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/dramabox.SearchResponse" + "$ref": "#/definitions/datasets.SteamAchievementsSearchResponse" }, "msg": { "example": "OK", @@ -56779,14 +60671,14 @@ }, "type": "object" }, - "dramabox.suggestResponseDoc": { + "datasets.steamChartDatasetItemResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/dramabox.SuggestResponse" + "$ref": "#/definitions/es.SteamChartEntry" }, "msg": { "example": "OK", @@ -56795,14 +60687,14 @@ }, "type": "object" }, - "dramabox.tagResponseDoc": { + "datasets.steamChartsSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/dramabox.TagResponse" + "$ref": "#/definitions/datasets.SteamChartsSearchResponse" }, "msg": { "example": "OK", @@ -56811,14 +60703,14 @@ }, "type": "object" }, - "dramabox.theaterResponseDoc": { + "datasets.steamGameResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/dramabox.TheaterResponse" + "$ref": "#/definitions/es.SteamGameRecord" }, "msg": { "example": "OK", @@ -56827,14 +60719,14 @@ }, "type": "object" }, - "dramabox.trendingResponseDoc": { + "datasets.steamGamesFacetResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/dramabox.TrendingResponse" + "$ref": "#/definitions/datasets.SteamFacetResponse" }, "msg": { "example": "OK", @@ -56843,319 +60735,350 @@ }, "type": "object" }, - "duckduckgo.ImageResponse": { + "datasets.steamGamesSearchResponseDoc": { "properties": { - "pagination": { - "$ref": "#/definitions/duckduckgo.SearchPagination" + "code": { + "example": 200, + "type": "integer" }, - "query": { - "example": "openai", - "type": "string" + "data": { + "$ref": "#/definitions/datasets.SteamSearchResponse" }, - "results": { - "items": { - "$ref": "#/definitions/duckduckgo.ImageResult" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "duckduckgo.ImageResult": { + "datasets.steamNewsDatasetItemResponseDoc": { "properties": { - "height": { - "example": 800, + "code": { + "example": 200, "type": "integer" }, - "hostname": { - "example": "example.com", - "type": "string" + "data": { + "$ref": "#/definitions/es.SteamNewsRecord" }, - "image_url": { - "example": "https://example.com/openai-logo.jpg", + "msg": { + "example": "OK", "type": "string" - }, - "position": { - "example": 1, + } + }, + "type": "object" + }, + "datasets.steamNewsSearchResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "thumbnail": { - "example": "https://example.com/openai-logo-thumb.jpg", - "type": "string" - }, - "title": { - "example": "OpenAI logo", - "type": "string" + "data": { + "$ref": "#/definitions/datasets.SteamNewsSearchResponse" }, - "url": { - "example": "https://example.com/openai-logo", + "msg": { + "example": "OK", "type": "string" - }, - "width": { - "example": 1200, - "type": "integer" } }, "type": "object" }, - "duckduckgo.NewsResponse": { + "datasets.steamPlayerCountDatasetItemResponseDoc": { "properties": { - "pagination": { - "$ref": "#/definitions/duckduckgo.SearchPagination" + "code": { + "example": 200, + "type": "integer" }, - "query": { - "example": "openai", - "type": "string" + "data": { + "$ref": "#/definitions/es.SteamPlayerCountRecord" }, - "results": { - "items": { - "$ref": "#/definitions/duckduckgo.NewsResult" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "duckduckgo.NewsResult": { + "datasets.steamPlayerCountsSearchResponseDoc": { "properties": { - "excerpt": { - "example": "OpenAI today announced...", - "type": "string" - }, - "position": { - "example": 1, + "code": { + "example": 200, "type": "integer" }, - "published_at": { - "example": 1721418540, - "type": "integer" + "data": { + "$ref": "#/definitions/datasets.SteamPlayerCountsSearchResponse" }, - "relative_time": { - "example": "2 hours ago", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "datasets.steamPriceDatasetItemResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "source": { - "example": "TechCrunch", - "type": "string" + "data": { + "$ref": "#/definitions/es.SteamPriceRecord" }, - "thumbnail": { - "example": "https://example.com/thumb.jpg", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "datasets.steamPricesSearchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "title": { - "example": "OpenAI announces new model", - "type": "string" + "data": { + "$ref": "#/definitions/datasets.SteamPricesSearchResponse" }, - "url": { - "example": "https://example.com/openai-announces-new-model", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "duckduckgo.SearchPagination": { + "datasets.steamReviewDatasetItemResponseDoc": { "properties": { - "next_page": { - "example": 2, + "code": { + "example": 200, "type": "integer" }, - "page": { - "example": 1, - "type": "integer" + "data": { + "$ref": "#/definitions/es.SteamReviewRecord" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "duckduckgo.SearchResponse": { + "datasets.steamReviewsSearchResponseDoc": { "properties": { - "pagination": { - "$ref": "#/definitions/duckduckgo.SearchPagination" + "code": { + "example": 200, + "type": "integer" }, - "query": { - "example": "openai", - "type": "string" + "data": { + "$ref": "#/definitions/datasets.SteamReviewsSearchResponse" }, - "results": { - "items": { - "$ref": "#/definitions/duckduckgo.SearchResult" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "duckduckgo.SearchResult": { + "datasets.substackDatasetFacetResponseDoc": { "properties": { - "description": { - "example": "OpenAI is an AI research and deployment company. Our mission is to ensure that artificial general intelligence benefits all of humanity.", - "type": "string" - }, - "hostname": { - "example": "openai.com", - "type": "string" - }, - "position": { - "example": 1, + "code": { + "example": 200, "type": "integer" }, - "title": { - "example": "OpenAI | Research & Deployment", - "type": "string" + "data": { + "$ref": "#/definitions/datasets.SubstackDatasetFacetResponse" }, - "url": { - "example": "https://openai.com/", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "duckduckgo.ShoppingPageInfo": { + "datasets.substackDatasetItemResponseDoc": { "properties": { - "page": { - "example": 1, + "code": { + "example": 200, "type": "integer" }, - "total_pages": { - "example": 16, - "type": "integer" + "data": { + "$ref": "#/definitions/datasets.SubstackDatasetRecord" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "duckduckgo.ShoppingResponse": { + "datasets.substackDatasetSearchResponseDoc": { "properties": { - "page_info": { - "$ref": "#/definitions/duckduckgo.ShoppingPageInfo" + "code": { + "example": 200, + "type": "integer" }, - "query": { - "example": "running shoes", - "type": "string" + "data": { + "$ref": "#/definitions/datasets.SubstackDatasetSearchResponse" }, - "results": { - "items": { - "$ref": "#/definitions/duckduckgo.ShoppingResult" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "duckduckgo.ShoppingResult": { + "datasets.techstackFacetResponseDoc": { "properties": { - "brand": { - "example": "On", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "description": { - "example": "Lightweight running shoe with CloudTec cushioning.", - "type": "string" + "data": { + "$ref": "#/definitions/datasets.TechstackFacetResponse" }, - "image": { - "example": "https://example.com/shoe.jpg", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "datasets.techstackItemResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "low_price": { - "example": "$119.99", - "type": "string" + "data": { + "$ref": "#/definitions/es.TechstackRecord" }, - "merchant": { - "example": "www.example.com", + "msg": { + "example": "OK", "type": "string" - }, - "position": { - "example": 1, + } + }, + "type": "object" + }, + "datasets.techstackSearchResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "price": { - "example": "$139.99", - "type": "string" - }, - "rating": { - "example": 4.5, - "type": "number" + "data": { + "$ref": "#/definitions/datasets.TechstackSearchResponse" }, - "review_count": { - "example": 128, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "datasets.trustmrrFacetResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "title": { - "example": "On Running Cloud 6 Sneakers", + "data": { + "$ref": "#/definitions/datasets.TrustmrrFacetResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "duckduckgo.VideoResponse": { + "datasets.trustmrrHistoryResponseDoc": { "properties": { - "pagination": { - "$ref": "#/definitions/duckduckgo.SearchPagination" + "code": { + "example": 200, + "type": "integer" }, - "query": { - "example": "openai", - "type": "string" + "data": { + "$ref": "#/definitions/datasets.TrustmrrHistoryResponse" }, - "results": { - "items": { - "$ref": "#/definitions/duckduckgo.VideoResult" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "duckduckgo.VideoResult": { + "datasets.trustmrrItemResponseDoc": { "properties": { - "description": { - "example": "An introduction to OpenAI.", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "duration": { - "example": "5:32", - "type": "string" + "data": { + "$ref": "#/definitions/es.TrustmrrStartupRecord" }, - "position": { - "example": 1, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "datasets.trustmrrSearchResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "published_at": { - "example": "2023-03-01T12:00:00.0000000", - "type": "string" + "data": { + "$ref": "#/definitions/datasets.TrustmrrSearchResponse" }, - "publisher": { - "example": "YouTube", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "datasets.vehicleListingPriceHistoryResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "thumbnail": { - "example": "https://example.com/thumb.jpg", - "type": "string" + "data": { + "$ref": "#/definitions/datasets.VehicleListingPriceHistoryResponse" }, - "title": { - "example": "What is OpenAI?", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "datasets.vehicleListingResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "uploader": { - "example": "OpenAI", - "type": "string" + "data": { + "$ref": "#/definitions/es.VehicleListingRecord" }, - "url": { - "example": "https://www.youtube.com/watch?v=abc123", + "msg": { + "example": "OK", "type": "string" - }, - "view_count": { - "example": 123456, - "type": "integer" } }, "type": "object" }, - "duckduckgo.imageResponseDoc": { + "datasets.vehicleListingsFacetResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/duckduckgo.ImageResponse" + "$ref": "#/definitions/datasets.VehicleListingFacetResponse" }, "msg": { "example": "OK", @@ -57164,14 +61087,14 @@ }, "type": "object" }, - "duckduckgo.newsResponseDoc": { + "datasets.vehicleListingsSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/duckduckgo.NewsResponse" + "$ref": "#/definitions/datasets.VehicleListingSearchResponse" }, "msg": { "example": "OK", @@ -57180,14 +61103,14 @@ }, "type": "object" }, - "duckduckgo.searchResponseDoc": { + "datasets.xUserResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/duckduckgo.SearchResponse" + "$ref": "#/definitions/es.XUserRecord" }, "msg": { "example": "OK", @@ -57196,14 +61119,14 @@ }, "type": "object" }, - "duckduckgo.shoppingResponseDoc": { + "datasets.xUsersFacetResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/duckduckgo.ShoppingResponse" + "$ref": "#/definitions/datasets.XUserFacetResponse" }, "msg": { "example": "OK", @@ -57212,14 +61135,14 @@ }, "type": "object" }, - "duckduckgo.suggestResponseDoc": { + "datasets.xUsersSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/suggest.Response" + "$ref": "#/definitions/datasets.XUserSearchResponse" }, "msg": { "example": "OK", @@ -57228,14 +61151,14 @@ }, "type": "object" }, - "duckduckgo.videoResponseDoc": { + "datasets.youtubeCreatorResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/duckduckgo.VideoResponse" + "$ref": "#/definitions/es.YoutubeChannelCandidate" }, "msg": { "example": "OK", @@ -57244,470 +61167,488 @@ }, "type": "object" }, - "dunkin.DirectoryChild": { + "datasets.youtubeCreatorsFacetResponseDoc": { "properties": { - "is_store": { - "description": "IsStore marks a child that is a store rather than another directory\nlevel -- call /dunkin/store with its path.", - "example": false, - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "example": "New York", - "type": "string" + "data": { + "$ref": "#/definitions/datasets.YoutubeCreatorFacetResponse" }, - "path": { - "example": "ny", + "msg": { + "example": "OK", "type": "string" - }, - "store_count": { - "description": "StoreCount is how many stores sit under this branch. Absent on the\ndeepest level, where children are stores themselves.", - "example": 390, + } + }, + "type": "object" + }, + "datasets.youtubeCreatorsSearchResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "url": { + "data": { + "$ref": "#/definitions/datasets.YoutubeCreatorSearchResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "dunkin.DirectoryResponse": { + "dawn.AuthorResponse": { "properties": { - "children": { + "articles": { "items": { - "$ref": "#/definitions/dunkin.DirectoryChild" + "$ref": "#/definitions/dawn.HeadlineItem" }, "type": "array" }, - "count": { - "example": 58, - "type": "integer" - }, - "fetched_at": { - "type": "string" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, "name": { "type": "string" }, - "path": { - "example": "ny", - "type": "string" - }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "dunkin.MenuItem": { + "dawn.HeadlineItem": { "properties": { - "description": { - "example": "Freshly brewed and full of flavor, our Iced Coffee is the perfect pick-me-up any time of day or night.", + "author": { "type": "string" }, - "id": { - "example": "5404831120", + "image_url": { "type": "string" }, - "name": { - "example": "Original Blend Iced Coffee", + "published_at": { "type": "string" }, - "photo_url": { + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "dunkin.MenuResponse": { + "deadline.AuthorArticle": { "properties": { - "fetched_at": { + "title": { "type": "string" }, - "item_count": { - "example": 73, - "type": "integer" - }, - "name": { - "description": "Name is Yext's own name for this menu, e.g. \"Dunkin' Menu\".", - "example": "Dunkin' Menu", + "url": { "type": "string" + } + }, + "type": "object" + }, + "deadline.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/deadline.AuthorArticle" + }, + "type": "array" }, - "sections": { + "biography": { "items": { - "$ref": "#/definitions/dunkin.MenuSection" + "type": "string" }, "type": "array" }, - "source_url": { + "headshot_url": { + "type": "string" + }, + "job_title": { + "type": "string" + }, + "name": { + "type": "string" + }, + "page": { + "type": "integer" + }, + "social_links": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "url": { "type": "string" } }, "type": "object" }, - "dunkin.MenuSection": { + "deliveroo.FilterGroup": { "properties": { - "description": { - "example": "Crisp. Cold. Delicious. Ask to try your favorite beverages served over ice.", + "multiple": { + "type": "boolean" + }, + "name": { "type": "string" }, - "items": { + "options": { "items": { - "$ref": "#/definitions/dunkin.MenuItem" + "$ref": "#/definitions/deliveroo.FilterOption" }, "type": "array" }, - "name": { - "example": "Iced Drinks", + "query_param": { "type": "string" } }, "type": "object" }, - "dunkin.NearbyResponse": { + "deliveroo.FilterOption": { "properties": { "count": { - "example": 10, "type": "integer" }, - "fetched_at": { + "currently_active": { + "type": "boolean" + }, + "name": { "type": "string" }, - "radius": { - "example": 25, - "type": "integer" + "query_param": { + "type": "string" }, - "source_url": { + "query_value": { "type": "string" + } + }, + "type": "object" + }, + "deliveroo.FiltersResponse": { + "properties": { + "filters": { + "items": { + "$ref": "#/definitions/deliveroo.FilterGroup" + }, + "type": "array" }, - "stores": { + "sort_options": { "items": { - "$ref": "#/definitions/dunkin.NearbyStore" + "$ref": "#/definitions/deliveroo.SortOption" }, "type": "array" }, - "total_in_radius": { - "description": "TotalInRadius is how many stores fall inside the radius overall, which\nis usually far more than one page. Use it with `offset` to page.", - "example": 754, + "total_count": { "type": "integer" } }, "type": "object" }, - "dunkin.NearbyStore": { + "deliveroo.FulfillmentDay": { "properties": { - "address": { - "$ref": "#/definitions/dunkin.StoreAddress" + "day": { + "type": "string" }, - "amenities": { + "label": { + "type": "string" + }, + "times": { "items": { - "type": "string" + "$ref": "#/definitions/deliveroo.FulfillmentTimeSlot" }, "type": "array" + } + }, + "type": "object" + }, + "deliveroo.FulfillmentMethodTimes": { + "properties": { + "asap": { + "$ref": "#/definitions/deliveroo.FulfillmentTimeSlot" }, - "closed": { - "example": false, - "type": "boolean" - }, - "delivery_platforms": { + "days": { "items": { - "type": "string" + "$ref": "#/definitions/deliveroo.FulfillmentDay" }, "type": "array" }, - "distance_kilometers": { - "example": 0.18, - "type": "number" - }, - "distance_miles": { - "description": "DistanceMiles is measured from the requested coordinate.", - "example": 0.11, - "type": "number" + "label": { + "type": "string" }, - "faq": { - "description": "FAQ is Yext's own auto-generated per-store question/answer content.", - "items": { - "$ref": "#/definitions/dunkin.StoreFAQ" - }, - "type": "array" + "method": { + "type": "string" + } + }, + "type": "object" + }, + "deliveroo.FulfillmentTimeSlot": { + "properties": { + "label": { + "type": "string" }, - "features": { + "timestamp": { + "type": "integer" + } + }, + "type": "object" + }, + "deliveroo.FulfillmentTimesResponse": { + "properties": { + "methods": { "items": { - "type": "string" + "$ref": "#/definitions/deliveroo.FulfillmentMethodTimes" }, "type": "array" - }, - "google_place_id": { + } + }, + "type": "object" + }, + "deliveroo.MenuCategory": { + "properties": { + "id": { "type": "string" }, - "hours": { + "items": { "items": { - "$ref": "#/definitions/dunkin.StoreHours" + "$ref": "#/definitions/deliveroo.MenuItem" }, "type": "array" }, - "latitude": { - "example": 40.712975, - "type": "number" - }, - "longitude": { - "example": -74.007829, - "type": "number" - }, - "menu_url": { - "type": "string" - }, "name": { - "example": "Dunkin'", - "type": "string" - }, - "order_url": { "type": "string" + } + }, + "type": "object" + }, + "deliveroo.MenuItem": { + "properties": { + "available": { + "type": "boolean" }, - "path": { - "description": "Path is the store id -- pass it to /dunkin/store to chain directly.", + "description": { "type": "string" }, - "payment_options": { - "items": { - "type": "string" - }, - "type": "array" - }, - "phone_number": { - "example": "+12127320406", + "id": { "type": "string" }, - "photos": { - "description": "Photos is this store's photo gallery.", - "items": { - "$ref": "#/definitions/dunkin.StorePhoto" - }, - "type": "array" - }, - "pickup_delivery_services": { + "modifier_groups": { "items": { - "type": "string" + "$ref": "#/definitions/deliveroo.ModifierGroup" }, "type": "array" }, - "store_id": { - "example": "307107", + "name": { "type": "string" }, - "timezone": { - "example": "America/New_York", - "type": "string" + "price": { + "type": "number" }, - "website_url": { + "product_meta": { "type": "string" } }, "type": "object" }, - "dunkin.StoreAddress": { + "deliveroo.MenuResponse": { "properties": { - "city": { - "example": "New York", - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/deliveroo.MenuCategory" + }, + "type": "array" }, - "country": { - "example": "US", + "currency_code": { "type": "string" }, - "line1": { - "example": "250 Broadway", - "type": "string" + "item_count": { + "type": "integer" }, - "line2": { - "example": "Park Pl Between Church & B'Way", + "name": { "type": "string" }, - "postal_code": { - "example": "10007", + "restaurant_id": { "type": "string" }, - "region": { - "example": "NY", + "uname": { "type": "string" } }, "type": "object" }, - "dunkin.StoreFAQ": { + "deliveroo.ModifierGroup": { "properties": { - "answer": { - "example": "Dunkin' is open Monday to Friday from 5:30 AM to 6:00 PM, and on Saturday and Sunday from 6:00 AM to 4:00 PM.", + "id": { "type": "string" }, - "question": { - "example": "What are the operating hours of Dunkin' at 250 Broadway, New York, NY?", + "max_selection": { + "type": "integer" + }, + "min_selection": { + "type": "integer" + }, + "multiselect": { + "type": "boolean" + }, + "name": { "type": "string" + }, + "options": { + "items": { + "$ref": "#/definitions/deliveroo.ModifierOption" + }, + "type": "array" } }, "type": "object" }, - "dunkin.StoreHours": { + "deliveroo.ModifierOption": { "properties": { - "closed": { - "description": "Closed is true when Dunkin publishes the day with no open interval.", - "example": false, + "available": { "type": "boolean" }, - "closes": { - "example": "18:00", + "description": { "type": "string" }, - "day_of_week": { - "example": "Monday", + "id": { "type": "string" }, - "opens": { - "example": "05:30", + "name": { "type": "string" + }, + "price": { + "type": "number" } }, "type": "object" }, - "dunkin.StorePhoto": { + "deliveroo.RestaurantResponse": { "properties": { - "description": { - "example": "Cold Brew Dunkin'", + "address1": { "type": "string" }, - "height": { - "example": 571, - "type": "integer" + "branch_type": { + "type": "string" }, - "url": { - "example": "https://a.mktgcdn.com/p/QcZOFKXgjA12APmvcuFAD3tS2mDRp6fwK3R8kE0O7E0/570x571.png", + "city": { "type": "string" }, - "width": { - "example": 570, - "type": "integer" - } - }, - "type": "object" - }, - "dunkin.StoreResponse": { - "properties": { - "address": { - "$ref": "#/definitions/dunkin.StoreAddress" + "country": { + "type": "string" }, - "amenities": { - "description": "Amenities are the same class of information as Features, normalized\nout of Yext's dedicated boolean fields rather than the free-text\nlabel list: curbside_pickup, drive_thru, kosher, free_wifi,\nturbo_oven, k_cup_pods.", - "items": { - "type": "string" - }, - "type": "array" + "currency_code": { + "type": "string" }, - "closed": { - "description": "Closed is true for a permanently closed location, not an\nafter-hours/overnight closure -- see Hours for that.", - "example": false, + "currency_symbol": { + "type": "string" + }, + "delivers_to_customer_location": { "type": "boolean" }, - "delivery_platforms": { - "description": "DeliveryPlatforms lists the third-party platforms Dunkin marks active\nfor this store.", - "items": { - "type": "string" - }, - "type": "array" + "fulfillment_type": { + "type": "string" }, - "faq": { - "description": "FAQ is Yext's own auto-generated per-store question/answer content.", - "items": { - "$ref": "#/definitions/dunkin.StoreFAQ" - }, - "type": "array" + "image_url": { + "type": "string" }, - "features": { - "description": "Features are Dunkin's own free-text per-store labels\n(ON-THE-GO_MOBILE_ORDERING, FREE_WIFI, K-CUP_PODS, ...).", - "items": { - "type": "string" - }, - "type": "array" + "menu_disabled": { + "type": "boolean" }, - "fetched_at": { + "name": { "type": "string" }, - "google_place_id": { + "neighborhood": { "type": "string" }, - "hours": { - "items": { - "$ref": "#/definitions/dunkin.StoreHours" - }, - "type": "array" - }, - "latitude": { - "example": 40.712975, - "type": "number" - }, - "longitude": { - "example": -74.007829, + "rating": { "type": "number" }, - "menu_url": { - "type": "string" - }, - "name": { - "example": "Dunkin'", + "restaurant_id": { "type": "string" }, - "order_url": { + "review_count_text": { "type": "string" }, - "path": { - "description": "Path is the store id -- pass it back to /dunkin/store.", + "uname": { "type": "string" - }, - "payment_options": { - "description": "PaymentOptions lists the payment methods this store accepts, as\nYext's own enum (AMERICANEXPRESS, APPLEPAY, CASH, VISA, ...).", + } + }, + "type": "object" + }, + "deliveroo.SearchResponse": { + "properties": { + "restaurants": { "items": { - "type": "string" + "$ref": "#/definitions/deliveroo.SearchRestaurant" }, "type": "array" + } + }, + "type": "object" + }, + "deliveroo.SearchRestaurant": { + "properties": { + "branch_type": { + "type": "string" }, - "phone_number": { - "example": "+12127320406", + "delivery_time_minutes": { + "type": "integer" + }, + "distance_miles": { + "type": "number" + }, + "image_url": { "type": "string" }, - "photos": { - "description": "Photos is this store's photo gallery.", - "items": { - "$ref": "#/definitions/dunkin.StorePhoto" - }, - "type": "array" + "name": { + "type": "string" }, - "pickup_delivery_services": { - "description": "PickupDeliveryServices lists Yext's own service enum for this store\n(CURBSIDE_PICKUP, DELIVERY, DRIVE_THRU, ...), a structured\nalternative to the individual delivery-platform flags below.", - "items": { - "type": "string" - }, - "type": "array" + "rating": { + "type": "number" }, - "source_url": { + "restaurant_id": { "type": "string" }, - "store_id": { - "example": "307107", + "uname": { + "type": "string" + } + }, + "type": "object" + }, + "deliveroo.SortOption": { + "properties": { + "default": { + "type": "boolean" + }, + "id": { "type": "string" }, - "website_url": { - "description": "WebsiteURL is this store's live page on dunkindonuts.com.", + "name": { "type": "string" } }, "type": "object" }, - "dunkin.directoryResponseDoc": { + "deliveroo.filtersResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/dunkin.DirectoryResponse" + "$ref": "#/definitions/deliveroo.FiltersResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -57715,14 +61656,14 @@ }, "type": "object" }, - "dunkin.menuResponseDoc": { + "deliveroo.fulfillmentTimesResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/dunkin.MenuResponse" + "$ref": "#/definitions/deliveroo.FulfillmentTimesResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -57730,14 +61671,14 @@ }, "type": "object" }, - "dunkin.nearbyResponseDoc": { + "deliveroo.menuResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/dunkin.NearbyResponse" + "$ref": "#/definitions/deliveroo.MenuResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -57745,14 +61686,14 @@ }, "type": "object" }, - "dunkin.storeResponseDoc": { + "deliveroo.restaurantResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/dunkin.StoreResponse" + "$ref": "#/definitions/deliveroo.RestaurantResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -57760,40 +61701,23 @@ }, "type": "object" }, - "dw.AuthorResponse": { + "deliveroo.searchResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/dw.HeadlineItem" - }, - "type": "array" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/deliveroo.SearchResponse" }, - "expertise": { - "type": "string" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "dw.HeadlineItem": { + "denverpost.AuthorArticle": { "properties": { - "author": { - "type": "string" - }, - "image_url": { - "type": "string" - }, "published_at": { "type": "string" }, @@ -57803,1280 +61727,1015 @@ "title": { "type": "string" }, - "type": { - "type": "string" - }, "url": { "type": "string" } }, "type": "object" }, - "ebay.Item": { + "denverpost.AuthorResponse": { "properties": { - "availability": { - "description": "Stock status shown on the listing, such as `In Stock`.", - "example": "In Stock", - "type": "string" - }, - "condition": { - "description": "Item condition as listed, such as `Pre-Owned`.", - "example": "Pre-Owned", - "type": "string" - }, - "description": { - "description": "Seller's description of the item.", - "type": "string" - }, - "images": { - "description": "URLs of the listing photos.", + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/denverpost.AuthorArticle" }, "type": "array" }, - "item_feedback_count": { - "description": "Number of buyer feedback entries for this item.", - "example": 80, - "type": "integer" - }, - "item_id": { - "description": "eBay item ID of the listing. Use it with the item endpoint.", - "example": "196435705622", - "type": "string" - }, - "item_specifics": { - "additionalProperties": { - "type": "string" - }, - "description": "Item specifics table of the listing, mapping each label to its value.", - "type": "object" - }, - "link": { - "description": "URL of the listing on eBay.", - "example": "https://www.ebay.com/itm/196435705622", - "type": "string" - }, - "location": { - "description": "Item location shown on the listing, such as `Canada`.", - "example": "Canada", - "type": "string" - }, - "price": { - "description": "Item price as a number, in the listing's currency.", - "example": 49.95, - "type": "number" - }, - "price_text": { - "description": "Price as shown on the listing, such as `US $49.95`.", - "example": "US $49.95", - "type": "string" - }, - "rating": { - "description": "Average product star rating.", - "example": 4.8, - "type": "number" - }, - "rating_count": { - "description": "Number of product ratings.", - "example": 12, - "type": "integer" - }, - "sale_status": { - "description": "Approximate converted price or bid count shown on the listing, when present.", - "example": "Available", + "bio": { "type": "string" }, - "seller_categories": { - "description": "Names of the categories in the seller's store.", - "items": { - "type": "string" - }, - "type": "array" - }, - "seller_description": { - "description": "Seller's own description of their store.", + "email": { "type": "string" }, - "seller_detailed_ratings": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "description": "Seller's detailed ratings, mapping each criterion such as `Communication` to its average score.", - "type": "object" - }, - "seller_feedback_score": { - "description": "Seller's feedback score.", - "example": 2067, - "type": "integer" - }, - "seller_followers": { - "description": "Number of eBay users following the seller.", - "example": 13000, - "type": "integer" - }, - "seller_items_sold": { - "description": "Number of items the seller has sold.", - "example": 814000, - "type": "integer" - }, - "seller_link": { - "description": "URL of the seller's eBay profile.", - "example": "https://www.ebay.com/usr/soonerfan1949", + "job_title": { "type": "string" }, - "seller_logo_url": { - "description": "URL of the seller's store logo.", - "example": "https://i.ebayimg.com/images/g/4yUAAOSwsV9ns4CY/s-l140.jpg", + "name": { "type": "string" }, - "seller_member_since": { - "description": "When the seller joined eBay, such as `Mar 1998`.", - "example": "Mar 1998", + "slug": { "type": "string" }, - "seller_name": { - "description": "eBay username of the seller.", - "example": "soonerfan1949", + "twitter": { "type": "string" }, - "seller_positive_feedback": { - "description": "Share of the seller's feedback that is positive, as a percentage.", - "example": 100, - "type": "number" - }, - "seller_store_name": { - "description": "Name of the seller's eBay store.", - "example": "POLOBLADE COLLECTIBLES", + "url": { "type": "string" - }, - "seller_total_feedback_count": { - "description": "Total number of feedback entries the seller has received.", - "example": 291075, + } + }, + "type": "object" + }, + "depop.Brand": { + "properties": { + "id": { "type": "integer" }, - "shipping": { - "description": "Shipping cost as shown on the listing, such as `+$4.95 shipping`.", - "example": "+$4.95 shipping", + "name": { "type": "string" }, - "title": { - "description": "Listing title as shown on the item page.", - "example": "1983 TOPPS BASEBALL - 1952 TOPPS REPRINTS #311 MICKEY MANTLE", + "slug": { "type": "string" } }, "type": "object" }, - "ebay.LiveStream": { + "depop.BrandsResponse": { "properties": { - "channels": { - "example": [ - "SHOPLIVE" - ], + "brands": { "items": { - "type": "string" + "$ref": "#/definitions/depop.Brand" }, "type": "array" }, - "description": { - "example": "Brand NEW & Open Box Milwaukee tools, batteries, and bundles!", - "type": "string" - }, - "end_time": { - "type": "string" - }, - "hosts": { + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "depop.CategoriesResponse": { + "properties": { + "departments": { "items": { - "$ref": "#/definitions/ebay.LiveStreamHost" + "$ref": "#/definitions/depop.Department" }, "type": "array" - }, - "id": { - "example": "qrJnMkM8X2hJuIf3", - "type": "string" - }, - "is_case_break": { - "type": "boolean" - }, - "is_user_registered": { - "type": "boolean" - }, - "like_count": { - "type": "integer" - }, - "live_stream_url": { - "example": "https://live.us.shoplive.cloud/live/45-5WhDlPhrTUvioiwUb-ue2.m3u8", + } + }, + "type": "object" + }, + "depop.Category": { + "properties": { + "name": { "type": "string" }, - "preview_image_url": { - "example": "https://i.ebayimg.com/00/s/MTE4M1g3ODc=/z/840AAeSwE55qZjQL/$_45.JPG", + "slug": { + "description": "maps to Search/Shop's category filter (-> groups=)", "type": "string" }, - "preview_stream_url": { - "type": "string" + "subcategories": { + "items": { + "$ref": "#/definitions/depop.Subcategory" + }, + "type": "array" + } + }, + "type": "object" + }, + "depop.Department": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/depop.Category" + }, + "type": "array" }, - "start_time": { - "example": "2026-08-09T17:01:30Z", + "gender": { + "description": "female, male -- empty for kidswear and everything-else", "type": "string" }, - "state": { - "example": "LIVE", + "id": { + "description": "womenswear, menswear, kidswear, everything-else", "type": "string" }, - "tags": { - "example": [ - "Outdoor", - "Tools" - ], - "items": { - "type": "string" - }, - "type": "array" + "is_kids": { + "description": "true for kidswear", + "type": "boolean" }, - "title": { - "example": "Jules' Tools - Milwaukee, DeWALT, Ryobi Power TOOLS!!!", + "name": { "type": "string" - }, - "watched_count": { - "example": 196, - "type": "integer" } }, "type": "object" }, - "ebay.LiveStreamDetail": { + "depop.DepartmentFacets": { "properties": { - "channels": { - "example": [ - "SHOPLIVE" - ], + "categories": { "items": { - "type": "string" + "$ref": "#/definitions/depop.FacetCount" }, "type": "array" }, - "concurrent_viewer_count": { - "description": "ConcurrentViewerCount is the live viewer count at the time of the\nrequest. Zero for streams that are not currently LIVE.", - "example": 42, + "count": { "type": "integer" }, - "description": { - "example": "Brand NEW & Open Box Milwaukee tools, batteries, and bundles!", - "type": "string" - }, - "end_time": { + "department": { "type": "string" }, - "hosts": { + "subcategories": { "items": { - "$ref": "#/definitions/ebay.LiveStreamHost" + "$ref": "#/definitions/depop.FacetCount" }, "type": "array" + } + }, + "type": "object" + }, + "depop.FacetCount": { + "properties": { + "count": { + "type": "integer" }, "id": { - "example": "qrJnMkM8X2hJuIf3", "type": "string" - }, - "is_case_break": { - "type": "boolean" - }, - "is_user_registered": { - "type": "boolean" - }, - "like_count": { - "type": "integer" - }, - "live_stream_url": { - "example": "https://live.us.shoplive.cloud/live/45-5WhDlPhrTUvioiwUb-ue2.m3u8", + } + }, + "type": "object" + }, + "depop.ItemDetailResponse": { + "properties": { + "brand_name": { "type": "string" }, - "preview_image_url": { - "example": "https://i.ebayimg.com/00/s/MTE4M1g3ODc=/z/840AAeSwE55qZjQL/$_45.JPG", - "type": "string" + "colours": { + "items": { + "type": "string" + }, + "type": "array" }, - "preview_stream_url": { + "condition": { "type": "string" }, - "replay_url": { + "currency": { "type": "string" }, - "site_id": { - "example": "0", + "description": { "type": "string" }, - "start_time": { - "example": "2026-08-09T17:01:30Z", + "id": { "type": "string" }, - "state": { - "example": "LIVE", + "location": { "type": "string" }, - "tags": { - "example": [ - "Outdoor", - "Tools" - ], + "original_price_cents": { + "type": "integer" + }, + "photos": { "items": { "type": "string" }, "type": "array" }, - "title": { - "example": "Jules' Tools - Milwaukee, DeWALT, Ryobi Power TOOLS!!!", - "type": "string" - }, - "vendor_event_id": { - "type": "string" - }, - "watched_count": { - "example": 196, - "type": "integer" - } - }, - "type": "object" - }, - "ebay.LiveStreamHost": { - "properties": { - "communication_rating": { - "example": 4.99, - "type": "number" - }, - "feedback_negative_count": { - "example": 18, + "price_cents": { "type": "integer" }, - "feedback_neutral_count": { - "example": 15, - "type": "integer" + "seller": { + "$ref": "#/definitions/depop.Seller" }, - "feedback_positive_count": { - "description": "Feedback* / *Rating fields are only populated by Service.GetLiveStream\n(single-stream detail); Service.ListLiveStreams' hub feed does not\nrequest this data, so these are zero/omitted there. All scores are\nscoped to the seller's last 365 days of feedback.", - "example": 17315, + "shipping_cents": { "type": "integer" }, - "feedback_positive_percent": { - "example": 99.9, - "type": "number" - }, - "id": { - "example": "I92-9JgyS0C", - "type": "string" - }, - "item_as_described_rating": { - "example": 4.95, - "type": "number" - }, - "profile_picture_url": { - "example": "https://i.ebayimg.com/images/g/jGoAAOSwgLdn-B-P/s-l140.webp", - "type": "string" - }, - "shipping_cost_rating": { - "example": 4.97, - "type": "number" + "similar_items": { + "description": "SimilarItems is the item page's own \"Similar items\" carousel, when\npresent -- omitted (not an error) when the page doesn't carry one.", + "items": { + "$ref": "#/definitions/depop.ItemSummary" + }, + "type": "array" }, - "shipping_time_rating": { - "example": 4.99, - "type": "number" + "sizes": { + "items": { + "type": "string" + }, + "type": "array" }, - "store_name": { - "example": "Jules Tools", + "title": { "type": "string" }, - "username": { - "example": "julestools", + "url": { "type": "string" } }, "type": "object" }, - "ebay.LiveStreamItem": { + "depop.ItemSummary": { "properties": { - "auction_currency": { - "type": "string" - }, - "auction_ending_at": { + "brand_name": { "type": "string" }, - "auction_price": { - "type": "number" + "colours": { + "items": { + "type": "string" + }, + "type": "array" }, - "auction_status": { - "description": "Auction* fields reflect the live bidding state and are only meaningful\nfor saleType Auction. AuctionStatus is one of READY (queued, not yet\nstarted), LIVE (actively taking bids), or ENDED.", - "example": "READY", + "condition": { "type": "string" }, - "bid_count": { - "example": 22, - "type": "integer" - }, "currency": { - "example": "USD", "type": "string" }, - "end_date": { - "example": "2026-08-09T17:05:26Z", + "description": { "type": "string" }, - "image_url": { + "id": { "type": "string" }, - "is_exclusive": { - "description": "IsExclusive/Purchasable reflect eBay Live's own commerce-signal flags\nfor this listing (e.g. whether it can be bought outright vs. only won\nvia the live auction).", - "type": "boolean" - }, - "is_visible": { - "type": "boolean" - }, - "leader_username": { - "type": "string" + "like_count": { + "description": "LikeCount is the listing's like count. Depop's search API only\nincludes this field when the request asks for it -- this endpoint\nalways requests it, so this is populated on every search result.\nConfirmed live 2026-08-15.", + "type": "integer" }, - "listing_id": { - "example": "188766881103", + "location": { "type": "string" }, - "pin": { - "type": "boolean" + "photos": { + "items": { + "type": "string" + }, + "type": "array" }, - "price": { - "example": 1, - "type": "number" + "price_cents": { + "type": "integer" }, - "purchasable": { - "type": "boolean" + "shipping_cents": { + "type": "integer" }, - "sale_type": { - "example": "Auction", - "type": "string" + "sizes": { + "items": { + "type": "string" + }, + "type": "array" }, - "status": { - "example": "ACTIVE", + "thumbnail_url": { "type": "string" }, "title": { - "example": "#001 - Tool ONLY - Unless Specified! - Watch Auction", "type": "string" }, - "winner_username": { + "url": { "type": "string" } }, "type": "object" }, - "ebay.LiveStreamItemsResp": { + "depop.SearchFacetsResponse": { "properties": { - "event_id": { - "example": "qrJnMkM8X2hJuIf3", - "type": "string" - }, - "items": { + "departments": { "items": { - "$ref": "#/definitions/ebay.LiveStreamItem" + "$ref": "#/definitions/depop.DepartmentFacets" }, "type": "array" }, - "next_cursor": { - "description": "NextCursor is upstream's own pagination cursor for this listing set.\nCursor-based continuation is not yet exposed as a caller-facing input;\nthis field is surfaced for forward compatibility and informational use.", + "query": { "type": "string" } }, "type": "object" }, - "ebay.LiveStreamsBatchResp": { + "depop.SearchResponse": { "properties": { - "streams": { - "description": "Streams preserves the order returned by upstream, which is not\nguaranteed to match the requested id order. An id that does not\nresolve to a real event is silently omitted -- confirmed live that\nupstream returns 200 with a shorter events array rather than an error\nfor unknown ids, matching the plural-lookup semantics of a batch\nendpoint rather than the single-id GetLiveStream's typed 404.", + "has_more": { + "description": "HasMore indicates additional results exist beyond this page. When\ntrue, NextCursor can be passed as the next request's After field.", + "type": "boolean" + }, + "items": { "items": { - "$ref": "#/definitions/ebay.LiveStream" + "$ref": "#/definitions/depop.ItemSummary" }, "type": "array" + }, + "next_cursor": { + "type": "string" + }, + "query": { + "type": "string" + }, + "total_results": { + "type": "integer" } }, "type": "object" }, - "ebay.LiveStreamsResp": { + "depop.SearchSellersResponse": { "properties": { - "category": { - "example": "explore", - "type": "string" - }, - "next_request_number": { - "description": "NextRequestNumber and SessionID feed back into a follow-up call's\nrequest_number/session_id to fetch the next page.", - "example": 1, - "type": "integer" - }, - "session_id": { - "example": "12de43d1-1ab2-427b-a447-660797b06a88", + "query": { "type": "string" }, - "streams": { + "sellers": { "items": { - "$ref": "#/definitions/ebay.LiveStream" + "$ref": "#/definitions/depop.SellerSummary" }, "type": "array" } }, "type": "object" }, - "ebay.SearchItem": { + "depop.Seller": { "properties": { - "bid_count": { - "description": "Number of bids on an auction listing.", - "example": 9, - "type": "integer" - }, - "caption": { - "description": "Caption line shown on the search card.", - "example": "caption", - "type": "string" - }, - "image": { - "description": "URL of the listing's thumbnail image.", - "example": "https://i.ebayimg.com/images/g/b6wAAOSwLRdmZeHS/s-l500.jpg", - "type": "string" - }, - "is_authenticity_guaranteed": { - "description": "Whether the listing carries eBay's Authenticity Guarantee.", - "example": false, - "type": "boolean" - }, - "item_id": { - "description": "eBay item ID of the listing. Use it with the item endpoint.", - "example": "196435705622", + "first_name": { "type": "string" }, - "link": { - "description": "URL of the listing on eBay.", - "example": "https://www.ebay.com/itm/196435705622", - "type": "string" + "id": { + "type": "integer" }, - "location": { - "description": "Item location shown on the search card, such as `Canada`.", - "example": "Canada", + "picture_url": { "type": "string" }, - "logistic": { - "description": "Shipping information shown on the search card, such as `+$4.95 shipping`.", - "example": "+$4.95 shipping", + "username": { "type": "string" }, - "offer_note": { - "description": "Purchase option label shown on the card, such as `Buy It Now`.", - "example": "Buy It Now", + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "depop.SellerSummary": { + "properties": { + "avatar_url": { "type": "string" }, - "price": { - "description": "Listing price as a number. Set only when the card shows a single price, not a range.", - "example": 49.95, - "type": "number" - }, - "price_from": { - "description": "$10 to $20", - "example": 10, - "type": "number" - }, - "price_to": { - "description": "Upper end of the price when the card shows a price range.", - "example": 20, - "type": "number" - }, - "rating": { - "description": "Average product star rating.", - "example": 5, - "type": "number" - }, - "rating_num": { - "description": "Number of product ratings.", - "example": 1, - "type": "integer" - }, - "seller": { - "description": "Seller name with feedback count and positive percentage, as shown on the card, such as `soonerfan1949 (998) 100%`.", - "example": "soonerfan1949 (998) 100%", + "first_name": { "type": "string" }, - "sold_count": { - "description": "Number of units sold, as shown on the card.", - "example": 178, + "id": { "type": "integer" }, - "sub_title": { - "description": "Subtitle line shown on the card, such as `Pre-Owned`.", - "example": "Pre-Owned", + "last_name": { "type": "string" }, - "title": { - "description": "Listing title as shown on the search card.", - "example": "1983 TOPPS BASEBALL - 1952 TOPPS REPRINTS #311 MICKEY MANTLE", + "username": { "type": "string" - }, - "watcher_count": { - "description": "Number of users watching the listing.", - "example": 26, - "type": "integer" } }, "type": "object" }, - "ebay.SearchOption": { + "depop.ShopItem": { "properties": { - "keyword": { - "description": "keyword to search on Ebay", - "example": "1952 topps baseball mickey mantle #311", + "currency": { "type": "string" }, - "limit": { - "description": "Number of items per page", - "enum": [ - 60, - 120, - 240 - ], - "example": 60, - "type": "integer" - }, - "listing_type": { - "description": "Listing type to search", - "enum": [ - "active", - "sold", - "completed", - "sold_completed" - ], - "example": "active", + "id": { + "description": "URL slug, same identifier space as ItemSummary.ID", "type": "string" }, - "page": { - "description": "Page number", - "example": 1, + "original_price_cents": { "type": "integer" - } - }, - "required": [ - "keyword" - ], - "type": "object" - }, - "ebay.SearchResp": { - "properties": { - "has_more": { - "description": "Whether more results are available on later pages.", - "example": true, - "type": "boolean" }, - "page": { - "description": "Page number returned.", - "example": 1, + "price_cents": { "type": "integer" }, - "result": { - "description": "Listings on this page.", - "items": { - "$ref": "#/definitions/ebay.SearchItem" - }, - "type": "array" + "thumbnail_url": { + "type": "string" }, - "total": { - "description": "Total number of results eBay reports for the search.", - "example": 120, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "ebay.Seller": { + "depop.ShopResponse": { "properties": { - "description": { - "description": "Seller's description of their store.", - "example": "Vintage sports card seller", + "activity_status": { "type": "string" }, - "detailed_seller_ratings": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "description": "Seller's detailed ratings, mapping each criterion such as `Communication` to its average score.", - "type": "object" - }, - "display_name": { - "description": "Seller's display name on eBay.", - "example": "soonerfan1949", + "avatar_url": { "type": "string" }, - "feedback_count": { - "description": "Number of feedback entries the seller has received.", - "example": 2067, - "type": "integer" + "bio": { + "type": "string" }, - "feedback_summary": { - "additionalProperties": { - "format": "int64", - "type": "integer" - }, - "description": "Number of feedback entries by rating type, such as `positive`.", - "type": "object" + "display_name": { + "type": "string" }, - "followers": { - "description": "Number of eBay users following the seller.", - "example": 52, + "followers_count": { "type": "integer" }, - "items_sold": { - "description": "Number of items the seller has sold.", - "example": 970, + "following_count": { "type": "integer" }, - "location": { - "description": "Seller's location as shown on their profile.", - "example": "United States", - "type": "string" - }, - "member_since": { - "description": "When the seller joined eBay, such as `Jan 09, 2000`.", - "example": "Jan 09, 2000", - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/depop.ShopItem" + }, + "type": "array" }, - "positive_feedback_percent": { - "description": "Share of the seller's feedback that is positive, as a percentage.", - "example": 100, + "rating": { "type": "number" }, - "profile_url": { - "description": "URL of the seller's eBay profile.", - "example": "https://www.ebay.com/usr/soonerfan1949", - "type": "string" + "rating_count": { + "type": "integer" }, - "seller": { - "description": "eBay username of the seller.", - "example": "soonerfan1949", - "type": "string" + "sold_count": { + "type": "integer" }, - "store_name": { - "description": "Name of the seller's eBay store.", - "example": "Sooner Fan Cards", + "username": { "type": "string" }, - "store_url": { - "description": "URL of the seller's eBay store.", - "example": "https://www.ebay.com/str/example", - "type": "string" + "verified": { + "type": "boolean" } }, "type": "object" }, - "ebay.SellerAbout": { + "depop.SimilarItemsResponse": { "properties": { - "banner_url": { - "description": "URL of the seller's store banner image.", - "example": "https://i.ebayimg.com/images/g/2lEAAOSwR4Bjr23U/s-l1600.png", - "type": "string" + "has_more": { + "description": "HasMore indicates additional results exist beyond this page. When\ntrue, NextCursor can be passed as the next request's After field.", + "type": "boolean" }, - "categories": { - "description": "Categories in the seller's store, each with its subcategories.", + "items": { "items": { - "$ref": "#/definitions/ebay.SellerAboutCategory" + "$ref": "#/definitions/depop.ItemSummary" }, "type": "array" }, - "contact_seller_url": { - "description": "URL of eBay's contact page for the seller.", - "example": "https://contact.ebay.com/ws/eBayISAPI.dll?ShowSellerFAQ&iid=-1&requested=poloblade", - "type": "string" - }, - "description": { - "description": "Seller's description of their store.", - "type": "string" - }, - "followers": { - "description": "Number of eBay users following the seller.", - "example": 13000, - "type": "integer" - }, - "items_sold": { - "description": "Number of items the seller has sold.", - "example": 814000, - "type": "integer" - }, - "location": { - "description": "Seller's location as shown on the About page.", - "example": "United States", + "next_cursor": { "type": "string" - }, - "logo_url": { - "description": "URL of the seller's store logo.", - "example": "https://i.ebayimg.com/images/g/4yUAAOSwsV9ns4CY/s-l140.jpg", + } + }, + "type": "object" + }, + "depop.SizeCategory": { + "properties": { + "id": { "type": "string" }, - "member_since": { - "description": "When the seller joined eBay, such as `Jan 09, 2000`.", - "example": "Jan 09, 2000", + "name": { "type": "string" }, - "positive_feedback_percent": { - "description": "Share of the seller's feedback that is positive, as a percentage.", - "example": 99.9, - "type": "number" + "regions": { + "items": { + "$ref": "#/definitions/depop.SizeRegion" + }, + "type": "array" + } + }, + "type": "object" + }, + "depop.SizeDepartment": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/depop.SizeCategory" + }, + "type": "array" }, - "seller": { - "description": "eBay username of the seller.", - "example": "poloblade", + "id": { "type": "string" }, - "store_name": { - "description": "Name of the seller's eBay store.", - "example": "POLOBLADE COLLECTIBLES", + "name": { "type": "string" - }, - "store_url": { - "description": "URL of the seller's eBay store.", - "example": "https://www.ebay.com/str/poloblade", + } + }, + "type": "object" + }, + "depop.SizeOption": { + "properties": { + "id": { + "description": "ID is the value to pass in SearchOption.Sizes / ShopOption.Sizes\n(e.g. \"4.17\"). Built from Depop's own size_set_id and id\n(`{size_set_id}.{id}`) -- confirmed live 2026-08-15 that this bare\nform (without the \"-EUR\"/\"-UK\"/\"-US\"/\"-AU\" region suffix Depop's own\nUI appends for display, e.g. \"4.17-US\") is what both the search API\nand shop pages actually key off; the suffix is decorative only.", "type": "string" }, - "top_rated_seller": { - "description": "Whether the seller holds eBay's Top Rated Seller status.", - "example": true, - "type": "boolean" - }, - "top_rated_seller_summary": { - "description": "Text eBay shows to describe the seller's Top Rated status.", + "name": { "type": "string" } }, "type": "object" }, - "ebay.SellerAboutCategory": { + "depop.SizeRegion": { "properties": { - "name": { - "description": "Category name, such as `Coins & Paper Money`.", - "example": "Coins & Paper Money", + "region": { "type": "string" }, - "subcategories": { - "description": "Subcategories listed under this category.", + "sizes": { "items": { - "$ref": "#/definitions/ebay.SellerAboutSubcategory" + "$ref": "#/definitions/depop.SizeOption" }, "type": "array" - }, - "url": { - "description": "URL of this category within the seller's store.", - "example": "https://www.ebay.com/str/poloblade/Coins-Paper-Money/_i.html?_sacat=11116", - "type": "string" } }, "type": "object" }, - "ebay.SellerAboutSubcategory": { + "depop.SizesResponse": { + "properties": { + "departments": { + "items": { + "$ref": "#/definitions/depop.SizeDepartment" + }, + "type": "array" + } + }, + "type": "object" + }, + "depop.Subcategory": { "properties": { "name": { - "description": "Subcategory name, such as `Coins: US`.", - "example": "Coins: US", "type": "string" }, - "url": { - "description": "URL of this subcategory within the seller's store.", - "example": "https://www.ebay.com/str/poloblade/Coins-US/_i.html?_sacat=253", + "slug": { + "description": "maps to Search's subcategory / Shop's subcategory filter", "type": "string" } }, "type": "object" }, - "ebay.SellerFeedback": { + "depop.SuggestResponse": { "properties": { - "description": { - "description": "Seller's description of their store.", + "query": { "type": "string" }, - "detailed_seller_ratings": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "description": "Seller's detailed ratings, mapping each criterion such as `Communication` to its average score.", - "type": "object" - }, - "followers": { - "description": "Number of eBay users following the seller.", - "example": 13000, - "type": "integer" - }, - "has_more": { - "description": "Whether more feedback pages are available.", - "example": true, - "type": "boolean" - }, - "items_sold": { - "description": "Number of items the seller has sold.", - "example": 814000, - "type": "integer" - }, - "next_page": { - "description": "Page number to request next.", - "example": 2, - "type": "integer" - }, - "overall_rating_summary": { - "additionalProperties": { - "format": "int64", - "type": "integer" - }, - "description": "Number of feedback entries by rating type, such as `positive`.", - "type": "object" - }, - "page": { - "description": "Feedback page number returned.", - "example": 1, - "type": "integer" - }, - "per_page": { - "description": "Number of reviews per page.", - "example": 48, - "type": "integer" - }, - "positive_feedback_percent": { - "description": "Share of the seller's feedback that is positive, as a percentage.", - "example": 99.9, - "type": "number" - }, - "reviews": { - "description": "Buyer feedback entries on this page.", + "suggestions": { "items": { - "$ref": "#/definitions/ebay.SellerReview" + "$ref": "#/definitions/depop.Suggestion" }, "type": "array" - }, - "seller": { - "description": "eBay username of the seller.", - "example": "poloblade", - "type": "string" - }, - "store_name": { - "description": "Name of the seller's eBay store.", - "example": "POLOBLADE COLLECTIBLES", - "type": "string" - }, - "store_url": { - "description": "URL of the seller's eBay store.", - "example": "https://www.ebay.com/str/poloblade", - "type": "string" - }, - "total_feedback_count": { - "description": "Total number of feedback entries the seller has received.", - "example": 291071, - "type": "integer" } }, "type": "object" }, - "ebay.SellerReview": { + "depop.Suggestion": { "properties": { - "buyer": { - "description": "Buyer's username, partly masked, such as `w***n`.", - "example": "w***n", + "gender": { "type": "string" }, - "buyer_feedback": { - "description": "Feedback score of the buyer who left the review.", - "example": 3426, - "type": "integer" - }, - "comment": { - "description": "Feedback comment left by the buyer.", + "group": { + "description": "Group and SuggestedFilterLabel are present when the suggestion maps\nto a specific category (e.g. Group \"tops\", SuggestedFilterLabel\n\"in Women's Tops\") -- both omitted for a plain free-text suggestion.", "type": "string" }, - "period": { - "description": "When the feedback was left, as eBay words it, such as `Past 6 months`.", - "example": "Past 6 months", + "suggested_filter_label": { "type": "string" }, - "rating": { - "description": "Rating the buyer gave: `positive`, `neutral` or `negative`.", - "example": "positive", + "value": { "type": "string" - }, - "verified_purchase": { - "description": "Whether eBay marks the feedback as coming from a verified purchase.", - "example": true, - "type": "boolean" } }, "type": "object" }, - "ebay.itemResponseDoc": { + "depop.brandsResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ebay.Item" + "$ref": "#/definitions/depop.BrandsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "ebay.liveStreamItemsResponseDoc": { + "depop.categoriesResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ebay.LiveStreamItemsResp" + "$ref": "#/definitions/depop.CategoriesResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "ebay.liveStreamResponseDoc": { + "depop.searchFacetsResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ebay.LiveStreamDetail" + "$ref": "#/definitions/depop.SearchFacetsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "ebay.liveStreamsBatchResponseDoc": { + "depop.searchResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ebay.LiveStreamsBatchResp" + "$ref": "#/definitions/depop.SearchResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "ebay.liveStreamsResponseDoc": { + "depop.searchSellersResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ebay.LiveStreamsResp" + "$ref": "#/definitions/depop.SearchSellersResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "ebay.searchResponseDoc": { + "depop.shopResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ebay.SearchResp" + "$ref": "#/definitions/depop.ShopResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "ebay.sellerAboutResponseDoc": { + "depop.similarItemsResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ebay.SellerAbout" + "$ref": "#/definitions/depop.SimilarItemsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "ebay.sellerFeedbackResponseDoc": { + "depop.sizesResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ebay.SellerFeedback" + "$ref": "#/definitions/depop.SizesResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "ebay.sellerResponseDoc": { + "depop.suggestResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ebay.Seller" + "$ref": "#/definitions/depop.SuggestResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "ebay.sellerShopResponseDoc": { + "developerretrieval.ArtifactType": { + "enum": [ + "doc", + "readme", + "issue", + "pull_request" + ], + "type": "string", + "x-enum-varnames": [ + "ArtifactDoc", + "ArtifactReadme", + "ArtifactIssue", + "ArtifactPullRequest" + ] + }, + "developerretrieval.DeveloperHit": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "id": { + "type": "string" + }, + "indexed_at": { + "type": "string" + }, + "passages": { + "items": { + "$ref": "#/definitions/retrievaltypes.Passage" + }, + "type": "array" + }, + "rank": { "type": "integer" }, - "data": { - "$ref": "#/definitions/ebay.SearchResp" + "repository": { + "type": "string" + }, + "revision": { + "type": "string" + }, + "source_id": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "economictimes.AuthorArticle": { - "properties": { "title": { "type": "string" }, + "type": { + "allOf": [ + { + "$ref": "#/definitions/developerretrieval.ArtifactType" + } + ], + "enum": [ + "doc", + "readme", + "issue", + "pull_request" + ] + }, + "updated_at": { + "type": "string" + }, "url": { "type": "string" + }, + "version": { + "type": "string" } }, "type": "object" }, - "economictimes.AuthorResponse": { + "developerretrieval.DeveloperSearchRequest": { "properties": { - "articles": { + "cursor": { + "type": "string" + }, + "limit": { + "type": "integer" + }, + "passages_per_result": { + "type": "integer" + }, + "q": { + "type": "string" + }, + "sources": { "items": { - "$ref": "#/definitions/economictimes.AuthorArticle" + "type": "string" }, "type": "array" }, - "biography": { + "types": { "items": { - "type": "string" + "$ref": "#/definitions/developerretrieval.ArtifactType", + "enum": [ + "doc", + "readme", + "issue", + "pull_request" + ] }, "type": "array" }, - "image_url": { + "version": { + "type": "string" + } + }, + "type": "object" + }, + "developerretrieval.developerCoverageDoc": { + "properties": { + "corpus_revision": { "type": "string" }, - "job_title": { + "failure": { + "$ref": "#/definitions/developerretrieval.developerFailureDoc" + }, + "indexed_at": { "type": "string" }, - "name": { + "retrieved_at": { "type": "string" }, - "url": { + "source_id": { + "type": "string" + }, + "status": { + "enum": [ + "ok", + "failed", + "not_indexed", + "unsupported" + ], "type": "string" } }, "type": "object" }, - "engadget.AuthorResponse": { + "developerretrieval.developerFailureDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/engadget.HeadlineItem" - }, - "type": "array" + "message": { + "type": "string" }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "reason": { + "enum": [ + "invalid_url", + "unsupported_content_type", + "blocked", + "not_found", + "rate_limited", + "timeout", + "upstream_error", + "internal_error", + "out_of_scope", + "robots_disallowed", + "duplicate", + "limit_reached", + "unsupported_filter", + "unknown_source", + "idempotency_conflict", + "invalid_cursor", + "result_expired", + "full_text_unavailable", + "budget_exhausted" + ], + "type": "string" }, - "expertise": { + "retry_after_seconds": { + "type": "integer" + }, + "retryable": { + "type": "boolean" + } + }, + "type": "object" + }, + "developerretrieval.developerSearchDataDoc": { + "properties": { + "coverage": { "items": { - "type": "string" + "$ref": "#/definitions/developerretrieval.developerCoverageDoc" }, "type": "array" }, - "highlights": { + "has_more": { + "type": "boolean" + }, + "items": { "items": { - "type": "string" + "$ref": "#/definitions/developerretrieval.DeveloperHit" }, "type": "array" }, - "image_url": { - "type": "string" - }, - "location": { - "type": "string" - }, - "name": { + "next_cursor": { "type": "string" }, - "school": { - "type": "string" + "partial": { + "type": "boolean" }, - "slug": { - "type": "string" + "usage": { + "$ref": "#/definitions/retrievaltypes.Usage" }, - "social_links": { + "warnings": { "items": { - "$ref": "#/definitions/engadget.AuthorSocialLink" + "$ref": "#/definitions/developerretrieval.developerWarningDoc" }, "type": "array" - }, - "url": { - "type": "string" } }, "type": "object" }, - "engadget.AuthorSocialLink": { + "developerretrieval.developerSearchResponseDoc": { "properties": { - "platform": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "url": { + "data": { + "$ref": "#/definitions/developerretrieval.developerSearchDataDoc" + }, + "msg": { + "example": "Request successful", "type": "string" } }, "type": "object" }, - "engadget.HeadlineItem": { + "developerretrieval.developerSourceDescriptorDoc": { "properties": { - "author": { + "artifact_types": { + "items": { + "enum": [ + "doc", + "readme", + "issue", + "pull_request" + ], + "type": "string" + }, + "type": "array" + }, + "corpus": { + "enum": [ + "papers", + "developer" + ], "type": "string" }, - "image_url": { + "corpus_revision": { "type": "string" }, - "published_at": { + "filters": { + "items": { + "enum": [ + "authors", + "published_from", + "published_to", + "types", + "version" + ], + "type": "string" + }, + "type": "array" + }, + "last_success_at": { "type": "string" }, - "summary": { + "name": { "type": "string" }, - "title": { + "operations": { + "items": { + "enum": [ + "search", + "metadata", + "read", + "references", + "citers" + ], + "type": "string" + }, + "type": "array" + }, + "source_id": { "type": "string" }, - "type": { + "state": { + "enum": [ + "ready", + "refreshing", + "not_indexed", + "degraded" + ], "type": "string" }, "url": { @@ -59085,12343 +62744,12171 @@ }, "type": "object" }, - "eonline.AuthorResponse": { + "developerretrieval.developerSourcesDataDoc": { "properties": { - "articles": { + "has_more": { + "type": "boolean" + }, + "items": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/developerretrieval.developerSourceDescriptorDoc" }, "type": "array" }, - "name": { + "next_cursor": { "type": "string" }, - "url": { + "registry_revision": { "type": "string" } }, "type": "object" }, - "es.AirbnbDensityCell": { + "developerretrieval.developerSourcesResponseDoc": { "properties": { - "geohash": { - "description": "Geohash string that identifies the grid cell.", - "type": "string" - }, - "lat": { - "description": "Latitude of the cell centre, in decimal degrees.", - "type": "number" - }, - "listings": { - "description": "Number of listings in the cell.", + "code": { + "example": 200, "type": "integer" }, - "lon": { - "description": "Longitude of the cell centre, in decimal degrees.", - "type": "number" - }, - "superhost_listings": { - "description": "Number of listings in the cell seen with the Superhost badge.", - "type": "integer" + "data": { + "$ref": "#/definitions/developerretrieval.developerSourcesDataDoc" }, - "superhost_pct": { - "description": "Share of listings in the cell seen with the Superhost badge, from 0 to 100.", - "type": "number" + "msg": { + "example": "Request successful", + "type": "string" } }, "type": "object" }, - "es.AirbnbDimensionCoverage": { + "developerretrieval.developerWarningDoc": { "properties": { - "coverage_pct": { - "description": "Share of the filtered universe with the dimension, from 0 through 100.", - "type": "number" - }, - "covered_listings": { - "description": "Number of filtered listings with the dimension field populated.", - "type": "integer" - }, - "dimension": { - "description": "Dimension whose field coverage was measured (for example room_type).", + "code": { + "enum": [ + "source_failed", + "source_not_indexed", + "discovery_truncated", + "ranking_window_limit", + "imprecise_date_excluded", + "content_unavailable", + "cached_source_stale" + ], "type": "string" }, - "meets_threshold": { - "description": "Whether the existing presentation gate permits buckets for this result.", - "type": "boolean" - }, - "minimum_coverage_pct": { - "description": "Minimum coverage share required before buckets are returned.", - "type": "number" + "message": { + "type": "string" }, - "total_listings": { - "description": "Number of listings in the filtered universe, including those without the dimension.", - "type": "integer" + "source_id": { + "type": "string" } }, "type": "object" }, - "es.AirbnbGeoBounds": { + "dfs.DFSContestType": { "properties": { - "bottom_right": { - "allOf": [ - { - "$ref": "#/definitions/es.GeoPoint" - } - ], - "description": "South-east corner of the box that encloses the market's listings." + "description": { + "type": "string" }, - "top_left": { - "allOf": [ - { - "$ref": "#/definitions/es.GeoPoint" - } - ], - "description": "North-west corner of the box that encloses the market's listings." + "name": { + "type": "string" } }, "type": "object" }, - "es.AirbnbMarketCell": { + "dfs.DFSGlossaryResponse": { "properties": { - "avg_person_capacity": { - "description": "Average number of guests a listing sleeps, over the sampled listings. Omitted until the sample is large enough.", - "type": "number" - }, - "avg_rating": { - "description": "Average listing rating across rated listings. Omitted when the market has too few rated listings.", - "type": "number" - }, - "avg_review_count": { - "description": "Average number of reviews per listing.", - "type": "number" - }, - "distinct_hosts": { - "description": "Number of distinct hosts among the sampled listings. Omitted until the sample is large enough.", - "type": "integer" - }, - "enriched_listings": { - "description": "Number of listings in the detail-page sample behind the reliable rates. Omitted when no listing has been sampled.", - "type": "integer" - }, - "guest_favorite_listings": { - "description": "Number of listings seen with the Guest Favorite badge.", - "type": "integer" - }, - "guest_favorite_pct": { - "description": "Share of listings seen with the Guest Favorite badge, from 0 to 100. A lower bound, because the badge does not always show.", - "type": "number" - }, - "guest_favorite_pct_enriched": { - "description": "Share of sampled listings that are Guest Favorites, from 0 to 100, taken from listing detail pages. Omitted until the sample is large enough.", - "type": "number" - }, - "key": { - "description": "Market this row covers: a country code, metro name or other value of the chosen `group_by` dimension.", + "fetched_at": { "type": "string" }, - "last_seen": { - "description": "Most recent time a listing in this market was seen, in UTC (RFC 3339).", + "source_url": { "type": "string" }, - "listings": { - "description": "Number of listings in the market.", - "type": "integer" - }, - "listings_per_host": { - "description": "Sampled listings divided by distinct hosts, a sign of how concentrated hosting is. Omitted until the sample is large enough.", - "type": "number" - }, - "median_price_usd": { - "description": "Median nightly price in US dollars, converted with an approximate dated exchange rate. Omitted when too few listings have a price.", - "type": "number" - }, - "rated_listings": { - "description": "Number of listings that have a rating.", - "type": "integer" - }, - "superhost_listings": { - "description": "Number of listings seen with the Superhost badge on the search card.", + "term_count": { "type": "integer" }, - "superhost_pct": { - "description": "Share of listings seen with the Superhost badge, from 0 to 100. A lower bound, because the badge does not always show.", - "type": "number" - }, - "superhost_pct_enriched": { - "description": "Share of sampled listings that are Superhosts, from 0 to 100, taken from listing detail pages. Omitted until the sample is large enough.", - "type": "number" + "terms": { + "items": { + "$ref": "#/definitions/dfs.DFSGlossaryTerm" + }, + "type": "array" } }, "type": "object" }, - "es.AirbnbMarketDetail": { + "dfs.DFSGlossaryTerm": { "properties": { - "avg_person_capacity": { - "description": "Average number of guests a listing sleeps, over the sampled listings. Omitted until the sample is large enough.", - "type": "number" - }, - "avg_rating": { - "description": "Average listing rating across rated listings. Omitted when the country has too few rated listings.", - "type": "number" - }, - "avg_review_count": { - "description": "Average number of reviews per listing.", - "type": "number" - }, - "bounds": { - "allOf": [ - { - "$ref": "#/definitions/es.AirbnbGeoBounds" - } - ], - "description": "Box that encloses the country's listings." + "definition": { + "type": "string" }, - "country": { - "description": "ISO 3166-1 alpha-2 code of the country this profile covers.", + "term": { "type": "string" + } + }, + "type": "object" + }, + "dfs.DFSGuideResponse": { + "properties": { + "contest_type_count": { + "type": "integer" }, - "currencies": { - "description": "Nightly price percentiles for each currency that has enough priced listings.", + "contest_types": { "items": { - "$ref": "#/definitions/es.AirbnbPriceStats" + "$ref": "#/definitions/dfs.DFSContestType" }, "type": "array" }, - "distinct_hosts": { - "description": "Number of distinct hosts among the sampled listings. Omitted until the sample is large enough.", - "type": "integer" - }, - "enriched_listings": { - "description": "Number of listings in the detail-page sample behind the reliable rates. Omitted when no listing has been sampled.", - "type": "integer" - }, - "guest_favorite_listings": { - "description": "Number of listings seen with the Guest Favorite badge.", - "type": "integer" - }, - "guest_favorite_pct": { - "description": "Share of listings seen with the Guest Favorite badge, from 0 to 100. A lower bound, because the badge does not always show.", - "type": "number" - }, - "guest_favorite_pct_enriched": { - "description": "Share of sampled listings that are Guest Favorites, from 0 to 100, taken from listing detail pages. Omitted until the sample is large enough.", - "type": "number" + "fetched_at": { + "type": "string" }, - "last_seen": { - "description": "Most recent time a listing in the country was seen, in UTC (RFC 3339).", + "source_url": { "type": "string" }, - "listings": { - "description": "Number of listings in the country.", + "sport_page_count": { "type": "integer" }, - "listings_per_host": { - "description": "Sampled listings divided by distinct hosts, a sign of how concentrated hosting is. Omitted until the sample is large enough.", - "type": "number" - }, - "metros": { - "description": "Largest metro markets in the country, each with the same figures as a market row.", + "sport_pages": { "items": { - "$ref": "#/definitions/es.AirbnbMarketCell" + "$ref": "#/definitions/dfs.DFSSportPage" }, "type": "array" + } + }, + "type": "object" + }, + "dfs.DFSNFLBestBallContest": { + "properties": { + "entry_fee_label": { + "type": "string" }, - "price_usd": { - "allOf": [ - { - "$ref": "#/definitions/es.AirbnbPriceUSDStats" - } - ], - "description": "PriceUSD is the country-wide nightly-price distribution normalized to USD (approximate,\ndated FX snapshot) — the cross-country-comparable complement to the per-currency\nCurrencies medians. Present only when enough listings carry a USD-normalized price." - }, - "rated_listings": { - "description": "Number of listings that have a rating.", - "type": "integer" - }, - "superhost_listings": { - "description": "Number of listings seen with the Superhost badge on the search card.", + "maximum_entries": { "type": "integer" }, - "superhost_pct": { - "description": "Share of listings seen with the Superhost badge, from 0 to 100. A lower bound, because the badge does not always show.", - "type": "number" + "name": { + "type": "string" }, - "superhost_pct_enriched": { - "description": "Share of sampled listings that are Superhosts, from 0 to 100, taken from listing detail pages. Omitted until the sample is large enough.", - "type": "number" + "top_prize_label": { + "type": "string" } }, "type": "object" }, - "es.AirbnbMarketFacetItem": { + "dfs.DFSNFLBestBallContestsResponse": { "properties": { - "count": { - "description": "Number of listings with this value.", + "contest_count": { "type": "integer" }, - "value": { - "description": "Facet value, for example a country code, market name, currency or room type.", + "contests": { + "items": { + "$ref": "#/definitions/dfs.DFSNFLBestBallContest" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "season": { + "type": "integer" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "es.AirbnbPriceStats": { + "dfs.DFSRulesAndScoringResponse": { "properties": { - "currency": { - "description": "ISO currency code of the nightly prices.", + "fetched_at": { "type": "string" }, - "listings": { - "description": "Number of priced listings in this currency.", + "game_type_count": { "type": "integer" }, - "p25": { - "description": "25th percentile of the nightly price, in `currency`.", - "type": "number" + "overview": { + "$ref": "#/definitions/dfs.DFSScoringRule" }, - "p50": { - "description": "Median nightly price, in `currency`.", - "type": "number" + "rule_count": { + "type": "integer" }, - "p75": { - "description": "75th percentile of the nightly price, in `currency`.", - "type": "number" + "source_url": { + "type": "string" + }, + "sport_count": { + "type": "integer" + }, + "sports": { + "items": { + "$ref": "#/definitions/dfs.DFSRulesSport" + }, + "type": "array" } }, "type": "object" }, - "es.AirbnbPriceUSDStats": { + "dfs.DFSRulesSport": { "properties": { - "listings": { - "description": "Number of listings with a price converted to US dollars.", + "id": { "type": "integer" }, - "p25": { - "description": "25th percentile of the nightly price, in US dollars at an approximate dated exchange rate.", - "type": "number" + "name": { + "type": "string" }, - "p50": { - "description": "Median nightly price, in US dollars at an approximate dated exchange rate.", - "type": "number" + "rule_count": { + "type": "integer" }, - "p75": { - "description": "75th percentile of the nightly price, in US dollars at an approximate dated exchange rate.", - "type": "number" + "rules": { + "items": { + "$ref": "#/definitions/dfs.DFSScoringRule" + }, + "type": "array" + }, + "slug": { + "type": "string" + }, + "sort_order": { + "type": "integer" } }, "type": "object" }, - "es.AppRecord": { + "dfs.DFSScoringRule": { "properties": { - "android_max_installs": { - "type": "integer" - }, - "android_package": { - "type": "string" - }, - "app_uid": { + "content_html": { "type": "string" }, - "category": { + "content_text": { "type": "string" }, - "countries_available": { + "game_types": { "items": { - "type": "string" + "type": "integer" }, "type": "array" }, - "country": { + "name": { "type": "string" }, - "currency": { + "slug": { "type": "string" }, - "developer": { + "sort_order": { + "type": "integer" + } + }, + "type": "object" + }, + "dfs.DFSSport": { + "properties": { + "full_name": { "type": "string" }, - "developer_id": { - "type": "string" + "has_public_contests": { + "type": "boolean" }, - "discovery_sources": { - "description": "DiscoverySources lists the public catalogs that supplied this app ID.", - "items": { - "type": "string" - }, - "type": "array" + "id": { + "type": "integer" }, - "first_seen": { + "is_enabled": { + "type": "boolean" + }, + "region_full_name": { "type": "string" }, - "free": { - "type": "boolean" + "sort_order": { + "type": "integer" }, - "icon_url": { + "sport_code": { + "type": "string" + } + }, + "type": "object" + }, + "dfs.DFSSportPage": { + "properties": { + "name": { "type": "string" }, - "ios_app_id": { + "url": { "type": "string" + } + }, + "type": "object" + }, + "dfs.DFSSportsResponse": { + "properties": { + "count": { + "type": "integer" }, - "ios_bundle_id": { + "fetched_at": { "type": "string" }, - "last_crawled": { + "region_code": { "type": "string" }, - "platforms": { - "description": "Platforms is the set of store-specific device platforms this app is\nconfirmed on. iOS uses Apple's appPlatforms vocabulary (phone, pad, mac,\ntv, watch, vision). Android uses Google Play device-tab/source values\n(phone, tablet, tv, chromebook, watch, xr, car, windows). Empty means the\nrecord has not been classified by platform yet.", + "source_url": { + "type": "string" + }, + "sports": { "items": { - "type": "string" + "$ref": "#/definitions/dfs.DFSSport" }, "type": "array" - }, - "popularity": { - "description": "Popularity = ratings_count × score (\"total rating weight\"). Derived on write\n(recomputed every upsert), 0 for unrated apps. A proven-adoption ranking signal.", + } + }, + "type": "object" + }, + "dfs.dfsGlossaryResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "price_cents": { - "type": "integer" + "data": { + "$ref": "#/definitions/dfs.DFSGlossaryResponse" }, - "ratings_count": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "dfs.dfsGuideResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "released_at": { + "data": { + "$ref": "#/definitions/dfs.DFSGuideResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "dfs.dfsNFLBestBallFeaturedContestsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "score": { - "type": "number" + "data": { + "$ref": "#/definitions/dfs.DFSNFLBestBallContestsResponse" }, - "store": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "dfs.dfsRulesAndScoringResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "title": { + "data": { + "$ref": "#/definitions/dfs.DFSRulesAndScoringResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "dfs.dfsSportsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "updated_at": { + "data": { + "$ref": "#/definitions/dfs.DFSSportsResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "diagnostics.AntibotCheckRequest": { + "properties": { + "fast": { + "description": "Fast (default true) escalates cheapest-transport-first and returns at the\nfirst tier that retrieves the page, so an unprotected page never spins up a\nbrowser. Set false for an exhaustive multi-run sweep across every backend.", + "type": "boolean" }, "url": { + "description": "URL is the absolute http/https target to assess.", + "example": "https://www.crunchbase.com/organization/snowflake-computing", "type": "string" + } + }, + "required": [ + "url" + ], + "type": "object" + }, + "diagnostics.antibotCheckResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "version": { + "data": { + "$ref": "#/definitions/antibot.Verdict" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "es.AppReview": { + "discogs.ArtistCredit": { "properties": { - "app_id": { - "description": "App id in the store: the numeric App Store id or the Google Play package name.", + "anv": { + "example": "T. Bangalter", "type": "string" }, - "app_uid": { - "description": "Unique id of the reviewed app in the apps dataset.", - "type": "string" + "id": { + "type": "integer" }, - "country": { - "description": "Storefront country code the review was posted in, for example `us`.", + "join": { "type": "string" }, - "last_crawled": { - "description": "Time the review was last fetched, in UTC (RFC 3339).", + "name": { "type": "string" }, - "reply_text": { - "description": "Developer's public reply to the review. Set for Google Play reviews.", + "role": { + "example": "Vocals", "type": "string" }, - "review_id": { - "description": "Review id assigned by the store.", + "tracks": { "type": "string" - }, - "review_uid": { - "description": "Unique review id, combining the store, app id and review id.", + } + }, + "type": "object" + }, + "discogs.ArtistReleaseItem": { + "properties": { + "artist": { "type": "string" }, - "reviewed_at": { - "description": "Time the review was posted or last updated, as the store reports it.", + "format": { "type": "string" }, - "score": { - "description": "Star rating the reviewer gave, from 1 to 5.", + "id": { "type": "integer" }, - "store": { - "description": "Which store the review was posted on: `ios` or `android`.", - "type": "string" + "in_collection": { + "type": "integer" }, - "text": { - "description": "Full text of the review.", + "in_wantlist": { + "type": "integer" + }, + "label": { "type": "string" }, - "thumbs_up": { - "description": "Number of helpful votes the review received. Set for Google Play reviews.", + "main_release_id": { "type": "integer" }, - "title": { - "description": "Headline the reviewer gave the review.", + "role": { + "example": "Main", "type": "string" }, - "url": { - "description": "Link to the review on the store.", + "thumb": { "type": "string" }, - "user_name": { - "description": "Display name of the reviewer.", + "title": { "type": "string" }, - "version": { - "description": "App version the review refers to.", + "type": { + "example": "release", "type": "string" + }, + "year": { + "type": "integer" } }, "type": "object" }, - "es.ApplePlaceDatasetFacetItem": { + "discogs.ArtistReleasesResponse": { "properties": { - "count": { + "artist_id": { + "type": "string" + }, + "items": { "type": "integer" }, - "key": { + "page": { + "type": "integer" + }, + "pages": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "releases": { + "items": { + "$ref": "#/definitions/discogs.ArtistReleaseItem" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "es.ApplePlaceDatasetItem": { + "discogs.ArtistResponse": { "properties": { - "address": { - "type": "string" - }, - "alt_phones": { + "aliases": { + "description": "Other artist names this artist is known under, each with its Discogs id.", "items": { - "type": "string" + "$ref": "#/definitions/discogs.EntityRef" }, "type": "array" }, - "catalog_country": { + "data_quality": { + "description": "Discogs data quality rating of the profile, for example `Needs Vote`.", "type": "string" }, - "categories": { + "groups": { + "description": "Groups or bands the artist belongs to or has belonged to.", "items": { - "type": "string" + "$ref": "#/definitions/discogs.EntityRef" }, "type": "array" }, - "category": { - "description": "Category is the deepest named Apple category; Categories is the whole\ntaxonomy path (names) and CategoryIDs the matching Apple category ids.", - "type": "string" + "id": { + "description": "Discogs artist id.", + "example": 1289, + "type": "integer" }, - "category_ids": { + "images": { + "description": "Photos of the artist.", "items": { - "type": "string" + "$ref": "#/definitions/discogs.Image" }, "type": "array" }, - "city": { - "type": "string" - }, - "country": { - "type": "string" - }, - "country_code": { - "type": "string" - }, - "county": { - "type": "string" - }, - "crawled_at": { - "type": "string" - }, - "discovery_keyword": { - "type": "string" - }, - "distance_m": { - "type": "number" - }, - "first_seen_at": { - "type": "string" - }, - "hours": { + "members": { + "description": "Members of the artist, when the artist is a group or band.", "items": { - "$ref": "#/definitions/es.ApplePlaceHours" + "$ref": "#/definitions/discogs.EntityRef" }, "type": "array" }, - "hours_type": { - "type": "string" - }, - "id": { - "type": "string" - }, - "last_seen_at": { - "type": "string" - }, - "latitude": { - "type": "number" - }, - "location": { - "allOf": [ - { - "$ref": "#/definitions/es.GeoPoint" - } - ], - "description": "Location is a geo_point for radius search and distance sort." - }, - "longitude": { - "type": "number" - }, "name": { + "description": "Artist name as Discogs lists it.", + "example": "Daft Punk", "type": "string" }, - "neighborhood": { - "type": "string" + "name_variations": { + "description": "Other spellings and variations of the artist name.", + "items": { + "type": "string" + }, + "type": "array" }, - "phone": { + "profile": { + "description": "Biography text from the artist's Discogs profile.", "type": "string" }, - "photo_url": { + "real_name": { + "description": "Real name of the artist, when Discogs lists one.", "type": "string" }, - "place_id": { + "source_url": { + "description": "URL the data was read from.", "type": "string" }, - "postal_code": { + "uri": { + "description": "Link to the artist's page on Discogs.", "type": "string" }, - "price_level": { + "urls": { + "description": "External web links listed on the artist's profile.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "discogs.Community": { + "properties": { + "have": { "type": "integer" }, - "price_symbol": { - "type": "string" - }, "rating": { - "type": "number" - }, - "rating_count": { - "type": "integer" + "$ref": "#/definitions/discogs.CommunityRating" }, - "rating_max": { + "want": { "type": "integer" + } + }, + "type": "object" + }, + "discogs.CommunityRating": { + "properties": { + "average": { + "type": "number" }, - "schema_version": { + "count": { "type": "integer" - }, - "state": { - "type": "string" - }, - "state_code": { + } + }, + "type": "object" + }, + "discogs.CompanyCredit": { + "properties": { + "catno": { "type": "string" }, - "street": { + "entity_type": { "type": "string" }, - "type": { + "entity_type_name": { + "example": "Pressed By", "type": "string" }, - "url": { - "type": "string" + "id": { + "type": "integer" }, - "website": { + "name": { "type": "string" } }, "type": "object" }, - "es.ApplePlaceHours": { + "discogs.EntityRef": { "properties": { - "close": { - "type": "string" + "active": { + "description": "True when Discogs marks the related artist as currently active. Omitted when inactive or when Discogs gives no status.", + "type": "boolean" }, - "day": { - "type": "string" + "id": { + "description": "Discogs artist id. Use it with the artist endpoint.", + "type": "integer" }, - "open": { + "name": { + "description": "Name of the artist as Discogs lists it.", "type": "string" } }, "type": "object" }, - "es.ApplePlaceRecord": { + "discogs.Format": { "properties": { - "address": { - "type": "string" - }, - "alt_phones": { + "descriptions": { + "example": [ + "LP", + "Album" + ], "items": { "type": "string" }, "type": "array" }, - "catalog_country": { + "name": { + "example": "Vinyl", "type": "string" }, - "categories": { - "items": { - "type": "string" - }, - "type": "array" - }, - "category": { - "description": "Category is the deepest named Apple category; Categories is the whole\ntaxonomy path (names) and CategoryIDs the matching Apple category ids.", + "qty": { + "example": "2", "type": "string" }, - "category_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "city": { + "text": { "type": "string" - }, - "country": { + } + }, + "type": "object" + }, + "discogs.Identifier": { + "properties": { + "description": { "type": "string" }, - "country_code": { + "type": { + "example": "Barcode", "type": "string" }, - "county": { + "value": { "type": "string" + } + }, + "type": "object" + }, + "discogs.Image": { + "properties": { + "height": { + "description": "Height of the image in pixels.", + "type": "integer" }, - "crawled_at": { + "type": { + "description": "Kind of image, for example `primary`.", + "example": "primary", "type": "string" }, - "discovery_keyword": { + "uri": { + "description": "URL of the full-size image.", "type": "string" }, - "first_seen_at": { + "uri150": { + "description": "URL of a 150 pixel version of the image.", "type": "string" }, - "hours": { - "items": { - "$ref": "#/definitions/es.ApplePlaceHours" - }, - "type": "array" - }, - "hours_type": { + "width": { + "description": "Width of the image in pixels.", + "type": "integer" + } + }, + "type": "object" + }, + "discogs.LabelCredit": { + "properties": { + "catno": { "type": "string" }, "id": { - "type": "string" - }, - "last_seen_at": { - "type": "string" - }, - "latitude": { - "type": "number" - }, - "location": { - "allOf": [ - { - "$ref": "#/definitions/es.GeoPoint" - } - ], - "description": "Location is a geo_point for radius search and distance sort." - }, - "longitude": { - "type": "number" + "type": "integer" }, "name": { "type": "string" + } + }, + "type": "object" + }, + "discogs.LabelReleaseItem": { + "properties": { + "artist": { + "type": "string" }, - "neighborhood": { + "catno": { "type": "string" }, - "phone": { + "format": { "type": "string" }, - "photo_url": { + "id": { + "type": "integer" + }, + "status": { "type": "string" }, - "place_id": { + "thumb": { "type": "string" }, - "postal_code": { + "title": { "type": "string" }, - "price_level": { + "year": { + "type": "integer" + } + }, + "type": "object" + }, + "discogs.LabelReleasesResponse": { + "properties": { + "items": { "type": "integer" }, - "price_symbol": { + "label_id": { "type": "string" }, - "rating": { - "type": "number" - }, - "rating_count": { + "page": { "type": "integer" }, - "rating_max": { + "pages": { "type": "integer" }, - "schema_version": { + "per_page": { "type": "integer" }, - "state": { - "type": "string" - }, - "state_code": { - "type": "string" - }, - "street": { - "type": "string" - }, - "type": { - "type": "string" - }, - "url": { - "type": "string" + "releases": { + "items": { + "$ref": "#/definitions/discogs.LabelReleaseItem" + }, + "type": "array" }, - "website": { + "source_url": { "type": "string" } }, "type": "object" }, - "es.ApplePodcastsShowRecord": { + "discogs.LabelResponse": { "properties": { - "artist_id": { - "type": "integer" - }, - "artist_name": { - "type": "string" - }, - "artist_url": { - "type": "string" - }, - "artwork_url_600": { - "type": "string" - }, - "collection_explicitness": { + "contact_info": { "type": "string" }, - "collection_name": { + "data_quality": { "type": "string" }, - "content_advisory_rating": { - "type": "string" + "id": { + "example": 895, + "type": "integer" }, - "country": { - "type": "string" + "images": { + "items": { + "$ref": "#/definitions/discogs.Image" + }, + "type": "array" }, - "crawled_at": { + "name": { + "example": "RCA", "type": "string" }, - "currency": { - "type": "string" + "parent_label": { + "$ref": "#/definitions/discogs.EntityRef" }, - "discovery_collection": { + "profile": { "type": "string" }, - "discovery_country": { + "source_url": { "type": "string" }, - "discovery_genre_id": { - "type": "integer" - }, - "discovery_source": { - "description": "DiscoverySource is \"chart\", \"search\" (show-search term sweep), or\n\"episode_search\" (episode-search term sweep, M6 — the parent show of a\nmatching episode). DiscoveryCountry/DiscoveryGenreID/DiscoveryCollection\nrecord which chart grid cell first surfaced this show (empty genre\nid/collection for either search-sweep source).", - "type": "string" + "sub_labels": { + "items": { + "$ref": "#/definitions/discogs.EntityRef" + }, + "type": "array" }, - "feed_url": { + "uri": { "type": "string" }, - "genre_ids": { + "urls": { "items": { "type": "string" }, "type": "array" + } + }, + "type": "object" + }, + "discogs.MasterResponse": { + "properties": { + "artists": { + "items": { + "$ref": "#/definitions/discogs.ArtistCredit" + }, + "type": "array" + }, + "data_quality": { + "type": "string" }, "genres": { + "example": [ + "Electronic" + ], "items": { "type": "string" }, "type": "array" }, "id": { + "example": 26647, "type": "integer" }, - "primary_genre_name": { - "type": "string" - }, - "quality_checked_at": { - "type": "string" - }, - "quality_reason": { - "type": "string" - }, - "quality_state": { - "description": "Quality* records the terminal/backfill state without changing the last\nknown crawl snapshot. It is populated only for the targeted repair flow.", - "type": "string" - }, - "release_date": { - "type": "string" - }, - "run_id": { - "type": "string" + "images": { + "items": { + "$ref": "#/definitions/discogs.Image" + }, + "type": "array" }, - "schema_version": { - "type": "integer" + "lowest_price": { + "type": "number" }, - "seed_rank": { + "main_release_id": { + "example": 2879, "type": "integer" }, - "track_count": { - "description": "TrackCount is the episode count as reported by the iTunes lookup at crawl time.", + "most_recent_release_id": { "type": "integer" }, - "url": { + "notes": { "type": "string" - } - }, - "type": "object" - }, - "es.ApplePodcastsShowsDatasetFacetItem": { - "properties": { - "count": { - "description": "Number of shows with this value.", + }, + "num_for_sale": { "type": "integer" }, - "value": { - "description": "Facet value being counted.", - "type": "string" - } - }, - "type": "object" - }, - "es.BBBBusinessAlert": { - "properties": { - "id": { + "source_url": { "type": "string" }, - "links": { + "styles": { + "example": [ + "House", + "Disco" + ], "items": { - "$ref": "#/definitions/es.BBBBusinessAlertLink" + "type": "string" }, "type": "array" }, - "text": { - "type": "string" - }, "title": { + "example": "Discovery", "type": "string" }, - "type_id": { - "type": "integer" + "tracklist": { + "items": { + "$ref": "#/definitions/discogs.Track" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "es.BBBBusinessAlertLink": { - "properties": { - "text": { + "uri": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "es.BBBBusinessHoursDay": { - "properties": { - "day": { - "type": "string" + "videos": { + "items": { + "$ref": "#/definitions/discogs.Video" + }, + "type": "array" }, - "hours": { - "type": "string" + "year": { + "example": 2001, + "type": "integer" } }, "type": "object" }, - "es.BBBBusinessRecord": { + "discogs.ReleaseResponse": { "properties": { - "accredited": { - "type": "boolean" - }, - "accredited_since": { - "type": "string" - }, - "additional_phone_numbers": { + "artists": { "items": { - "type": "string" + "$ref": "#/definitions/discogs.ArtistCredit" }, "type": "array" }, - "additional_websites": { + "artists_sort": { + "example": "Rick Astley", + "type": "string" + }, + "community": { + "$ref": "#/definitions/discogs.Community" + }, + "companies": { "items": { - "type": "string" + "$ref": "#/definitions/discogs.CompanyCredit" }, "type": "array" }, - "address": { + "country": { + "example": "UK", "type": "string" }, - "address_country": { - "description": "AddressCountry is derived from the recognized US state/territory/military\nor Canadian province code at the end of Address. Empty when unrecognized.", - "enum": [ - "us", - "ca" - ], + "data_quality": { "type": "string" }, - "alert_titles": { + "extra_artists": { "items": { - "type": "string" + "$ref": "#/definitions/discogs.ArtistCredit" }, "type": "array" }, - "alerts": { + "format_quantity": { + "type": "integer" + }, + "formats": { "items": { - "$ref": "#/definitions/es.BBBBusinessAlert" + "$ref": "#/definitions/discogs.Format" }, "type": "array" }, - "alternate_names": { + "genres": { + "example": [ + "Electronic", + "Pop" + ], "items": { "type": "string" }, "type": "array" }, - "average_review_rating": { - "type": "number" - }, - "bbb_file_opened": { - "type": "string" - }, - "bbb_local_id": { - "type": "string" - }, - "business_id": { - "type": "string" - }, - "business_incorporated": { - "type": "string" - }, - "business_management": { - "type": "string" - }, - "business_started": { - "type": "string" + "id": { + "example": 249504, + "type": "integer" }, - "categories": { + "identifiers": { "items": { - "type": "string" + "$ref": "#/definitions/discogs.Identifier" }, "type": "array" }, - "category": { - "example": "Plumber", - "type": "string" - }, - "city": { - "type": "string" + "images": { + "items": { + "$ref": "#/definitions/discogs.Image" + }, + "type": "array" }, - "complaints_closed_last_12_months": { - "type": "integer" + "labels": { + "items": { + "$ref": "#/definitions/discogs.LabelCredit" + }, + "type": "array" }, - "complaints_closed_last_3_years": { + "master_id": { "type": "integer" }, - "complaints_url": { - "description": "On-demand pointers -- not crawled/embedded, see package doc above.", - "type": "string" - }, - "country": { - "description": "State/City are parsed from the profile URL's /us|ca///...\npath segments -- BusinessResponse.Address is a free-text joined string,\nnot structured, so it isn't a reliable filter/facet field on its own.", - "type": "string" - }, - "crawled_at": { - "type": "string" - }, - "discovery_source": { - "description": "Crawl bookkeeping. DiscoverySource records how the CURRENT document\ncontent was obtained (last-crawl mechanism), not first-discovery\nprovenance -- keyword-sweep, category-grid, and Common Crawl discovery\nare deduplicated against the same business, so the same business is\nnever double-enqueued no matter how many search/category cells or CC\nrecords surface it. A richer per-discovery-event location/category\nisn't tracked, only the coarse source.", - "type": "string" - }, - "entity_type": { - "example": "Limited Liability Company (LLC)", + "notes": { "type": "string" }, - "has_alerts": { - "description": "HasAlerts, AlertTitles and Alerts describe the notices BBB attaches to\nthe profile (pattern of complaints, investigation results, licensing\nfindings). A refreshed record with no alerts carries has_alerts=false\nand empty lists; a record not re-crawled since these were added has\nnone of the keys.", - "type": "boolean" - }, - "hours": { - "items": { - "$ref": "#/definitions/es.BBBBusinessHoursDay" - }, - "type": "array" - }, - "licensing_note": { + "released": { + "example": "1987-07-00", "type": "string" }, - "more_info_url": { + "released_formatted": { + "example": "Jul 1987", "type": "string" }, - "name": { + "source_url": { "type": "string" }, - "phone": { + "status": { + "example": "Accepted", "type": "string" }, - "products_and_services": { + "styles": { + "example": [ + "Euro-Disco" + ], "items": { "type": "string" }, "type": "array" }, - "rating": { - "example": "A+", + "title": { + "example": "Never Gonna Give You Up", "type": "string" }, - "rating_rank": { - "type": "integer" - }, - "rating_reasons": { + "tracklist": { "items": { - "type": "string" + "$ref": "#/definitions/discogs.Track" }, "type": "array" }, - "reviews_url": { - "type": "string" - }, - "run_id": { + "uri": { "type": "string" }, - "schema_version": { - "type": "integer" - }, - "social_media": { + "videos": { "items": { - "type": "string" + "$ref": "#/definitions/discogs.Video" }, "type": "array" }, - "state": { - "type": "string" - }, - "total_complaints": { - "description": "Complaint and review counts from the profile page, the same values\nbbb-business returns. A record not re-crawled since these were added\nhas none of the keys until its next refresh, and a count BBB did not\npublish is likewise absent, so 0 is a real zero.", - "example": 943, - "type": "integer" - }, - "total_reviews": { - "type": "integer" - }, - "url": { - "type": "string" - }, - "website": { - "type": "string" - }, - "years_in_business": { - "type": "string" - }, - "years_in_business_num": { - "description": "YearsInBusinessNum is a best-effort leading-digit parse of\nYearsInBusiness (a free-text upstream string, e.g. \"3\"), -1 when\nunparseable. Denormalized purely for numeric sorting -- YearsInBusiness\nitself stays a keyword, so a lexicographic string sort would wrongly\nrank \"9\" ahead of \"12\".", + "year": { + "example": 1987, "type": "integer" } }, "type": "object" }, - "es.BBBBusinessesFacetItem": { + "discogs.SearchResponse": { "properties": { - "count": { - "description": "Number of matching records with this value.", - "example": 3438, + "items": { + "description": "Total number of matching results across all pages.", "type": "integer" }, - "value": { - "description": "The facet value, to use as the matching search or facet filter. For the accredited and has_alerts facets it is 1 (true) or 0 (false).", - "example": "san-diego", - "type": "string" - } - }, - "type": "object" - }, - "es.BoxOfficeMojoDatasetFacetItem": { - "properties": { - "count": { + "page": { + "description": "Page number returned.", "type": "integer" }, - "value": { - "type": "string" - } - }, - "type": "object" - }, - "es.BoxOfficeMojoReleaseGroup": { - "properties": { - "domestic": { + "pages": { + "description": "Total number of pages.", "type": "integer" }, - "international": { + "per_page": { + "description": "Number of results per page.", "type": "integer" }, - "markets": { - "type": "string" - }, - "name": { + "query": { + "description": "Search text that was run.", "type": "string" }, - "path": { - "type": "string" + "results": { + "description": "Matches on this page, one item per release, master, artist or label.", + "items": { + "$ref": "#/definitions/discogs.SearchResult" + }, + "type": "array" }, - "rollout": { + "source_url": { + "description": "URL the data was read from.", "type": "string" }, - "url": { + "type": { + "description": "Result type the search was limited to: `release`, `master`, `artist` or `label`. Omitted when all types were searched.", "type": "string" - }, - "worldwide": { - "type": "integer" } }, "type": "object" }, - "es.BoxOfficeMojoTitleRecord": { + "discogs.SearchResult": { "properties": { - "brand_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "brand_names": { + "barcodes": { + "description": "Barcodes printed on the release. Present for release and master hits.", "items": { "type": "string" }, "type": "array" }, - "domestic_share": { - "type": "number" + "catno": { + "description": "Catalogue number of the release. Present for release and master hits.", + "type": "string" }, - "first_seen_at": { + "country": { + "description": "Country the release was issued in. Present for release and master hits.", "type": "string" }, - "foreign_share": { - "type": "number" + "cover_image": { + "description": "URL of the cover image.", + "type": "string" }, - "franchise_ids": { + "formats": { + "description": "Formats of the release, for example `Vinyl` or `LP`. Present for release and master hits.", "items": { "type": "string" }, "type": "array" }, - "franchise_names": { + "genres": { + "description": "Genres of the release. Present for release and master hits.", "items": { "type": "string" }, "type": "array" }, - "genre_ids": { + "id": { + "description": "Discogs id of the hit. Use it with the matching release, master, artist or label endpoint.", + "type": "integer" + }, + "labels": { + "description": "Names of the labels that issued the release. Present for release and master hits.", "items": { "type": "string" }, "type": "array" }, - "genre_names": { + "master_id": { + "description": "Discogs id of the master release this release belongs to, when there is one.", + "type": "integer" + }, + "styles": { + "description": "Styles of the release, more specific than genres. Present for release and master hits.", "items": { "type": "string" }, "type": "array" }, - "gross_band": { + "thumb": { + "description": "URL of a thumbnail image.", "type": "string" }, - "hydrate_attempts": { - "type": "integer" + "title": { + "description": "Title of the hit, for example `Daft Punk - Discovery` for a release.", + "type": "string" }, - "hydrate_failed": { - "type": "boolean" + "type": { + "description": "Kind of hit: `release`, `master`, `artist` or `label`.", + "example": "release", + "type": "string" }, - "hydrated": { - "type": "boolean" + "uri": { + "description": "Link to the hit's page on Discogs.", + "example": "https://www.discogs.com/release/2879-Daft-Punk-Discovery", + "type": "string" }, - "in_lifetime_top_1000_dom": { - "type": "boolean" + "year": { + "description": "Year of release, as Discogs lists it.", + "type": "string" + } + }, + "type": "object" + }, + "discogs.Track": { + "properties": { + "duration": { + "example": "3:32", + "type": "string" }, - "in_lifetime_top_1000_ww": { - "type": "boolean" + "extra_artists": { + "items": { + "$ref": "#/definitions/discogs.ArtistCredit" + }, + "type": "array" }, - "is_billion_dollar": { - "type": "boolean" + "position": { + "example": "A1", + "type": "string" }, - "last_crawled_at": { + "title": { "type": "string" }, - "last_hydrated_at": { + "type": { + "example": "track", + "type": "string" + } + }, + "type": "object" + }, + "discogs.Video": { + "properties": { + "description": { "type": "string" }, - "lifetime_gross_domestic": { + "duration": { + "example": 322, "type": "integer" }, - "lifetime_gross_worldwide": { - "type": "integer" + "title": { + "type": "string" }, - "lifetime_rank_domestic": { + "uri": { + "type": "string" + } + }, + "type": "object" + }, + "discogs.artistReleasesResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "lifetime_rank_worldwide": { - "type": "integer" + "data": { + "$ref": "#/definitions/discogs.ArtistReleasesResponse" }, - "lifetime_year": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "discogs.artistResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "market_count": { + "data": { + "$ref": "#/definitions/discogs.ArtistResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "discogs.labelReleasesResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "market_grosses": { - "description": "MarketGrosses keeps the hydrated region/market tables as opaque objects so\nthe mapping stays flexible; the public query surface can expand later.", - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "data": { + "$ref": "#/definitions/discogs.LabelReleasesResponse" }, - "peak_worldwide_gross": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "discogs.labelResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "peak_worldwide_year": { - "type": "integer" + "data": { + "$ref": "#/definitions/discogs.LabelResponse" }, - "primary_release_group_id": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "discogs.masterResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "primary_release_group_name": { - "type": "string" + "data": { + "$ref": "#/definitions/discogs.MasterResponse" }, - "release_group_count": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "discogs.releaseResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "release_group_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "release_groups": { - "items": { - "$ref": "#/definitions/es.BoxOfficeMojoReleaseGroup" - }, - "type": "array" + "data": { + "$ref": "#/definitions/discogs.ReleaseResponse" }, - "schema_version": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "discogs.searchResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "sources": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/discogs.SearchResponse" }, - "title": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "dollartree.BlogArticleResponse": { + "properties": { + "article": { + "additionalProperties": {}, + "type": "object" }, - "title_id": { + "article_id": { "type": "string" }, - "title_path": { + "canonical_route": { "type": "string" }, - "title_url": { + "fetched_at": { "type": "string" }, - "year_grosses": { - "items": { - "$ref": "#/definitions/es.BoxOfficeMojoYearGross" - }, - "type": "array" + "slug": { + "type": "string" }, - "years_active": { - "items": { - "type": "integer" - }, - "type": "array" + "source_url": { + "type": "string" } }, "type": "object" }, - "es.BoxOfficeMojoYearGross": { + "dollartree.CategoriesResponse": { "properties": { - "domestic": { - "type": "integer" - }, - "domestic_share": { - "type": "number" - }, - "foreign": { + "blog_count": { + "example": 48, "type": "integer" }, - "foreign_share": { - "type": "number" + "categories": { + "items": { + "$ref": "#/definitions/dollartree.Category" + }, + "type": "array" }, - "rank_worldwide": { + "count": { + "example": 570, "type": "integer" }, - "release_group_id": { + "fetched_at": { "type": "string" }, - "release_group_name": { - "type": "string" + "other_count": { + "example": 0, + "type": "integer" }, - "worldwide": { + "product_count": { + "example": 522, "type": "integer" }, - "year": { + "root_count": { + "example": 2, "type": "integer" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "es.ChartEntry": { + "dollartree.Category": { "properties": { - "app_id": { - "description": "App id in the store: the numeric App Store id or the Google Play package name.", + "active": { + "type": "boolean" + }, + "child_count": { + "type": "integer" + }, + "depth": { + "type": "integer" + }, + "description": { "type": "string" }, - "category": { - "description": "Store category or genre the chart covers. Empty for the overall chart.", + "dimension_id": { "type": "string" }, - "chart_type": { - "description": "Kind of chart: `top_free`, `top_paid`, `top_grossing` or `new`.", + "id": { "type": "string" }, - "chart_uid": { - "description": "Unique id of this chart entry, combining store, collection, category, country, snapshot date and rank.", + "name": { "type": "string" }, - "collection": { - "description": "Store's own id for the chart, for example `topgrossingapplications` or `GROSSING`.", + "parent_id": { "type": "string" }, - "country": { - "description": "Storefront country code of the chart, for example `us`.", + "parent_name": { "type": "string" }, - "crawled_at": { - "description": "Time the chart was fetched, in UTC (RFC 3339).", + "repository_id": { "type": "string" }, - "developer": { - "description": "Name of the app's developer or publisher as shown on the chart.", + "route": { "type": "string" }, - "free": { - "description": "Whether the app is free to download.", + "surface": { + "example": "product", + "type": "string" + } + }, + "type": "object" + }, + "dollartree.FilterGroup": { + "properties": { + "dimension_name": { + "type": "string" + }, + "multi_select": { "type": "boolean" }, - "platform": { - "description": "Platform is the Apple device platform this chart ranking is for — phone,\npad, or mac (Apple's appPlatforms vocabulary) — or empty for Google Play\n(Android has no separate device-family charts). A chart ranking is\nalways single-platform by construction, unlike AppRecord.Platforms.", + "name": { "type": "string" }, - "rank": { - "description": "Position of the app in the chart, starting at 1.", + "options": { + "items": { + "$ref": "#/definitions/dollartree.FilterOption" + }, + "type": "array" + } + }, + "type": "object" + }, + "dollartree.FilterOption": { + "properties": { + "count": { "type": "integer" }, - "score": { - "description": "Average user rating of the app. Set for Google Play charts.", - "type": "number" + "label": { + "type": "string" }, - "snapshot_date": { - "description": "Date the chart was captured, in UTC (YYYY-MM-DD).", + "navigation_id": { "type": "string" }, - "store": { - "description": "Which store the chart belongs to: `ios` or `android`.", + "navigation_state": { "type": "string" }, - "title": { - "description": "App name as shown on the chart.", + "selected": { + "type": "boolean" + }, + "status": { "type": "string" }, - "url": { - "description": "Store page of the app.", + "value": { "type": "string" } }, "type": "object" }, - "es.ChromeExtensionChangeDay": { + "dollartree.KeywordTypeaheadResponse": { "properties": { "count": { "type": "integer" }, - "date": { + "fetched_at": { "type": "string" }, - "rating_count_delta": { + "page_size": { "type": "integer" }, - "users_delta": { - "type": "integer" - } - }, - "type": "object" - }, - "es.ChromeExtensionChangeMetrics": { - "properties": { - "daily": { - "items": { - "$ref": "#/definitions/es.ChromeExtensionChangeDay" - }, - "type": "array" + "query": { + "type": "string" }, - "total": { - "type": "integer" + "source_url": { + "type": "string" }, - "types": { + "suggestions": { "items": { - "$ref": "#/definitions/es.ChromeExtensionMetricBucket" + "additionalProperties": {}, + "type": "object" }, "type": "array" - } - }, - "type": "object" - }, - "es.ChromeExtensionFacetItem": { - "properties": { - "count": { - "description": "Number of items with this value.", + }, + "total": { "type": "integer" }, - "value": { - "description": "Facet value being counted.", + "viewport": { "type": "string" } }, "type": "object" }, - "es.ChromeExtensionHistoryPoint": { + "dollartree.PriceResponse": { "properties": { - "category": { + "fetched_at": { "type": "string" }, - "change_types": { - "items": { - "type": "string" - }, - "type": "array" + "list": { + "type": "number" }, - "collects_data": { + "price_range": { "type": "boolean" }, - "data_collected": { + "product_id": { + "type": "string" + }, + "sku_prices": { "items": { - "type": "string" + "$ref": "#/definitions/dollartree.SKUPrice" }, "type": "array" }, - "developer": { + "source_url": { "type": "string" - }, - "developer_email": { + } + }, + "type": "object" + }, + "dollartree.ProductResponse": { + "properties": { + "fetched_at": { "type": "string" }, - "host_permissions": { - "items": { - "type": "string" - }, - "type": "array" + "product": { + "additionalProperties": {}, + "type": "object" }, - "id": { + "product_id": { "type": "string" }, - "item_type": { + "source_url": { "type": "string" + } + }, + "type": "object" + }, + "dollartree.ProductSummary": { + "properties": { + "attributes": { + "additionalProperties": {}, + "type": "object" }, - "manifest_version": { - "type": "integer" - }, - "name": { + "brand": { "type": "string" }, - "observed_at": { + "case_price": { "type": "string" }, - "optional_host_permissions": { - "items": { - "type": "string" - }, - "type": "array" - }, - "optional_permissions": { - "items": { - "type": "string" - }, - "type": "array" + "id": { + "type": "string" }, - "permissions": { - "items": { - "type": "string" - }, - "type": "array" + "name": { + "type": "string" }, - "privacy_declarations": { - "items": { - "type": "string" - }, - "type": "array" + "price": { + "type": "string" }, - "privacy_policy": { + "primary_image_url": { "type": "string" }, "rating": { - "type": "number" - }, - "rating_count": { - "type": "integer" - }, - "rating_count_delta": { - "type": "integer" - }, - "status": { "type": "string" }, - "users": { - "type": "integer" - }, - "users_delta": { - "type": "integer" - }, - "version": { + "review_count": { "type": "string" - } - }, - "type": "object" - }, - "es.ChromeExtensionMetricBucket": { - "properties": { - "count": { - "type": "integer" }, - "users": { - "type": "integer" + "route": { + "type": "string" }, - "value": { + "url": { "type": "string" } }, "type": "object" }, - "es.ChromeExtensionMetricSummary": { + "dollartree.ProductTypeaheadResponse": { "properties": { - "average_rating": { - "type": "number" - }, - "developer_emails": { + "count": { "type": "integer" }, - "last_crawled_at": { + "fetched_at": { "type": "string" }, - "named_developers": { - "type": "integer" - }, - "privacy_policies": { - "type": "integer" - }, - "total": { + "first_record_num": { "type": "integer" }, - "total_ratings": { + "last_record_num": { "type": "integer" }, - "total_users": { + "offset": { "type": "integer" - } - }, - "type": "object" - }, - "es.ChromeExtensionRecord": { - "properties": { - "all_permissions": { - "description": "Every permission and site pattern from the four permission lists, without duplicates.", - "items": { - "type": "string" - }, - "type": "array" }, - "blank_identity_streak": { - "description": "BlankIdentityStreak counts complete, ID-matching item payloads whose card\ntitle and literal manifest name are both unavailable. It is distinct from\nNotFoundStreak: malformed payloads are upstream errors and never update it.\nNo omitempty: a valid active snapshot must reset it through partial upsert.", + "page_size": { "type": "integer" }, - "category": { - "description": "Store category of the item.", + "query": { "type": "string" }, - "collects_data": { - "description": "Whether the store listing says the item collects user data.", - "type": "boolean" + "source_url": { + "type": "string" }, - "data_collected": { - "description": "Categories of user data the developer says the item collects.", + "suggestions": { "items": { - "type": "string" + "$ref": "#/definitions/dollartree.TypeaheadProductSuggestion" }, "type": "array" }, - "description": { - "description": "Full description from the store listing.", - "type": "string" + "total": { + "type": "integer" }, - "developer": { - "description": "Name of the item's developer as shown on the store listing.", + "viewport": { "type": "string" - }, - "developer_email": { - "description": "Developer contact email disclosed on the store listing, in lowercase.", + } + }, + "type": "object" + }, + "dollartree.ProductsResponse": { + "properties": { + "fetched_at": { "type": "string" }, - "discovery_sources": { - "description": "DiscoverySources lists the public catalogs that supplied this extension ID.", + "product_ids": { "items": { "type": "string" }, "type": "array" }, - "first_seen": { - "description": "Time the item was first recorded in the dataset, in UTC (RFC 3339).", - "type": "string" - }, - "has_broad_host_access": { - "description": "Whether the extension can reach all sites, for example through ``.", - "type": "boolean" - }, - "host_permissions": { - "description": "Site patterns the extension requests access to when installed.", + "products": { "items": { - "type": "string" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "icon": { - "description": "URL of the item's icon.", + "source_url": { "type": "string" + } + }, + "type": "object" + }, + "dollartree.SKUPrice": { + "properties": { + "list_price": { + "type": "number" }, - "id": { - "description": "Chrome Web Store item id. Use it with the item endpoint.", - "type": "string" + "sale_price": { + "type": "number" }, - "item_type": { - "description": "Kind of item: `extension`, `theme`, `app` or `unknown`.", + "sku_id": { "type": "string" + } + }, + "type": "object" + }, + "dollartree.SearchResponse": { + "properties": { + "count": { + "type": "integer" }, - "last_crawled_at": { - "description": "Time the item's data was last fetched, in UTC (RFC 3339).", + "fetched_at": { "type": "string" }, - "last_seen": { - "description": "Time the item was last seen on the store, in UTC (RFC 3339).", - "type": "string" + "filter_groups": { + "items": { + "$ref": "#/definitions/dollartree.FilterGroup" + }, + "type": "array" }, - "manifest_version": { - "description": "Manifest version of the extension: `2` or `3`.", + "first_record_num": { "type": "integer" }, - "min_browser_version": { - "description": "Minimum browser version the item requires.", - "type": "string" + "last_record_num": { + "type": "integer" }, - "name": { - "description": "Item name as shown on its store listing.", + "navigation_id": { "type": "string" }, - "not_found_streak": { - "description": "NotFoundStreak counts consecutive crawls that returned not-found for an\notherwise-active item. Removal is only confirmed once it reaches the\nworker's threshold, so a transient upstream block does not delist a live\nitem. No omitempty: a successful crawl must write 0 to reset the streak\nthrough the partial-merge upsert.", + "offset": { "type": "integer" }, - "optional_host_permissions": { - "description": "Site patterns the extension may ask for access to later.", - "items": { - "type": "string" - }, - "type": "array" - }, - "optional_permissions": { - "description": "Permissions the extension may ask for later.", - "items": { - "type": "string" - }, - "type": "array" + "page_size": { + "type": "integer" }, - "permissions": { - "description": "List of permissions the extension requests when installed.", + "page_sizes": { "items": { - "type": "string" + "type": "integer" }, "type": "array" }, - "privacy_declarations": { - "description": "Privacy commitments the developer declares on the store listing.", + "products": { "items": { - "type": "string" + "$ref": "#/definitions/dollartree.ProductSummary" }, "type": "array" }, - "privacy_policy": { - "description": "Link to the developer's privacy policy.", + "query": { "type": "string" }, - "rating": { - "description": "Average user rating shown on the store listing.", - "type": "number" - }, - "rating_count": { - "description": "Number of ratings behind the average rating.", - "type": "integer" - }, - "rating_count_delta": { - "description": "Change in `rating_count` since the previous observation.", - "type": "integer" - }, - "schema_version": { - "description": "Version of the record layout.", - "type": "integer" + "sort": { + "type": "string" }, - "screenshots": { - "description": "URLs of the screenshots on the store listing.", + "sort_values": { "items": { "type": "string" }, "type": "array" }, - "size": { - "description": "Package size of the item as the store shows it.", + "source_url": { "type": "string" }, - "status": { - "description": "Whether the item is still on the store: `active` or `removed`.", - "type": "string" + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "dollartree.StockStatusResponse": { + "properties": { + "back_orderable_quantity": { + "type": "integer" }, - "summary": { - "description": "Short summary shown at the top of the store listing.", + "catalog_id": { "type": "string" }, - "trend_score": { - "description": "Score for ranking trending items, built from `users_delta` and `rating_count_delta`.", - "type": "number" - }, - "updated": { - "description": "Date the item was last updated on the store (YYYY-MM-DD).", + "catalog_reference_id": { "type": "string" }, - "url": { - "description": "Link to the item's store listing.", + "fetched_at": { "type": "string" }, - "users": { - "description": "Number of users shown on the store listing.", + "in_stock_quantity": { "type": "integer" }, - "users_delta": { - "description": "Change in `users` since the previous observation.", + "orderable_quantity": { "type": "integer" }, - "version": { - "description": "Current version of the item.", - "type": "string" - } - }, - "type": "object" - }, - "es.CreatorRecord": { - "properties": { - "avatar_url": { - "description": "URL of the profile picture.", - "type": "string" - }, - "avg_views": { - "description": "top-level mirror of PostStats.AvgViews for sort/filter", + "pre_orderable_quantity": { "type": "integer" }, - "bio": { - "description": "Profile biography text.", - "type": "string" - }, - "bio_link": { - "description": "Link shown in the profile biography.", + "product_id": { "type": "string" }, - "brand_affiliations": { - "description": "Brands linked to the creator.", - "items": { - "type": "string" - }, - "type": "array" - }, - "country": { - "description": "Creator's country or region code in lowercase, for example `us`.", + "sku_id": { "type": "string" }, - "creator_uid": { - "description": "Unique creator id, made of the platform and the handle, for example `tiktok:@bubble`.", + "source_url": { "type": "string" }, - "email": { - "description": "Business contact email found for the creator.", + "stock_status": { "type": "string" + } + }, + "type": "object" + }, + "dollartree.TypeaheadProductSuggestion": { + "properties": { + "attributes": { + "additionalProperties": {}, + "type": "object" }, - "email_status": { - "description": "Verification status of the contact email.", + "brand": { "type": "string" }, - "engagement_rate": { - "description": "headline = by-view (TikTok standard); see PostStats for both", - "type": "number" - }, - "first_seen": { - "description": "FirstSeen is the discovery timestamp: set once when the creator is first\nindexed, and never changed by a later re-crawl. Values recorded before\n2026-08-29 are unreliable and should not be used for cohort or tenure\nanalysis.", + "case_price": { "type": "string" }, - "follower_count": { - "description": "Number of followers.", - "type": "integer" - }, - "following_count": { - "description": "Number of accounts the creator follows.", - "type": "integer" - }, - "language": { - "description": "Language code set on the creator's profile.", + "id": { "type": "string" }, - "last_crawled": { - "description": "Time the creator's profile was last fetched, in UTC (RFC 3339).", + "max_active_price": { "type": "string" }, - "last_post_at": { - "description": "top-level mirror of PostStats.LastPostAt for recency filter", + "min_active_price": { "type": "string" }, - "niche": { - "description": "Niche is the DISCOVERY SEED TERM that surfaced this creator (the keyword/hashtag/\nexplore-category the crawler used), NOT a content classification. It is single-valued\nand first-write-wins, so a creator found via the \"korean skincare\" keyword sweep is\ntagged \"skincare\" whatever they actually post about. Do not present it as a category;\nuse NicheClassified for that.", + "name": { "type": "string" }, - "niche_classified": { - "description": "NicheClassified is the content niche DERIVED FROM THE BIO by classifyNiche() in the\ncreatorsdb-enrich worker. Independent of Niche by construction: it is computed for\nevery creator with a bio, including those that already carry a seed term, so the two\nfields never contaminate each other and \"which is this?\" is answered by the field\nname rather than an unbackfillable provenance flag.", + "price": { "type": "string" }, - "nickname": { - "description": "Display name shown on the creator's profile.", + "primary_image_url": { "type": "string" }, - "platform": { - "description": "Social platform the creator is on, for example `tiktok`.", + "rating": { "type": "string" }, - "post_stats": { - "allOf": [ - { - "$ref": "#/definitions/es.PostStatsAgg" - } - ], - "description": "Averages and posting habits worked out from a sample of the creator's recent posts." - }, - "sec_uid": { - "description": "Stable account id the platform assigns to the creator.", + "review_count": { "type": "string" }, - "source": { - "description": "Label for where the creator entry came from.", + "route": { "type": "string" }, - "status": { - "description": "\"\" active | \"deleted\" | \"private\" — refresh marks these to skip future crawls", + "url": { "type": "string" - }, - "total_likes": { - "description": "Total likes received across the creator's videos.", + } + }, + "type": "object" + }, + "dollartree.blogArticleResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "unique_id": { - "description": "Creator's handle on the platform, without the `@`.", - "type": "string" - }, - "verified": { - "description": "Whether the profile has the platform's verified badge.", - "type": "boolean" + "data": { + "$ref": "#/definitions/dollartree.BlogArticleResponse" }, - "video_count": { - "description": "Number of videos posted.", - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "es.DoorDashStoreDatasetFacetItem": { + "dollartree.categoriesResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "key": { + "data": { + "$ref": "#/definitions/dollartree.CategoriesResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "es.DoorDashStoreDatasetItem": { + "dollartree.keywordTypeaheadResponseDoc": { "properties": { - "address": { - "type": "string" - }, - "asap_available": { - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "average_rating": { - "type": "number" + "data": { + "$ref": "#/definitions/dollartree.KeywordTypeaheadResponse" }, - "city": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "dollartree.priceResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "city_region": { - "type": "string" + "data": { + "$ref": "#/definitions/dollartree.PriceResponse" }, - "country": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "dollartree.productResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "cover_image_url": { - "type": "string" + "data": { + "$ref": "#/definitions/dollartree.ProductResponse" }, - "crawled_at": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "dollartree.productTypeaheadResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "dash_pass_eligible": { - "type": "boolean" + "data": { + "$ref": "#/definitions/dollartree.ProductTypeaheadResponse" }, - "discovery_city": { - "description": "Discovery geography identifies the GeoNames seed cell that produced this\nobservation. It is not a claim that the store's postal city matches the\nseed city's name; hydrated City/State come from the store-info card.", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "dollartree.productsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "discovery_country": { - "type": "string" + "data": { + "$ref": "#/definitions/dollartree.ProductsResponse" }, - "discovery_state": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "dollartree.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "display_asap_time": { - "type": "string" + "data": { + "$ref": "#/definitions/dollartree.SearchResponse" }, - "display_status": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "dollartree.stockStatusResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "distance_meters": { - "type": "number" + "data": { + "$ref": "#/definitions/dollartree.StockStatusResponse" }, - "first_seen_at": { + "msg": { + "example": "OK", "type": "string" - }, - "has_phone": { - "type": "boolean" - }, - "has_website": { + } + }, + "type": "object" + }, + "domainintel.DNSLookup": { + "properties": { + "authenticated_data": { "type": "boolean" }, - "id": { + "message": { "type": "string" }, - "last_seen_at": { + "name": { "type": "string" }, - "latitude": { - "type": "number" - }, - "location": { - "allOf": [ - { - "$ref": "#/definitions/es.GeoPoint" - } - ], - "description": "Location is a geo_point ([lon, lat] order in the GeoPoint helper)." - }, - "longitude": { - "type": "number" - }, - "name": { + "observed_at": { "type": "string" }, - "number_of_ratings": { + "records": { + "items": { + "$ref": "#/definitions/domainintel.DNSRecord" + }, + "type": "array" + }, + "response_code": { "type": "integer" }, - "phone": { + "source": { "type": "string" }, - "pickup_available": { - "type": "boolean" - }, - "postal_code": { + "status": { "type": "string" }, - "price_range": { - "type": "integer" - }, - "run_id": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "domainintel.DNSRecord": { + "properties": { + "name": { "type": "string" }, - "schema_version": { + "ttl": { "type": "integer" }, - "search_text": { + "type": { "type": "string" }, - "state": { + "value": { "type": "string" - }, - "store_id": { + } + }, + "type": "object" + }, + "domainintel.IPAddress": { + "properties": { + "address": { "type": "string" }, - "street": { + "allocation_country": { "type": "string" }, - "tags": { - "description": "Tags is the marketplace's own comma-split tag list, kept as a keyword so\nit can back a terms facet; SearchText is the free-text projection over\nname + address + tags.", + "cidrs": { "items": { "type": "string" }, "type": "array" }, - "top_items": { - "description": "TopItems is a bounded preview of the merchant's menu, stored unindexed.", + "network_name": { + "type": "string" + }, + "organization": { + "type": "string" + }, + "origin_asns": { "items": { - "$ref": "#/definitions/es.DoorDashStoreTopItem" + "type": "integer" }, "type": "array" }, - "url": { + "rdap_status": { "type": "string" }, - "website": { + "registry": { "type": "string" } }, "type": "object" }, - "es.DoorDashStoreRecord": { + "domainintel.RegistrationSection": { "properties": { - "address": { + "created": { "type": "string" }, - "asap_available": { + "dnssec": { "type": "boolean" }, - "average_rating": { - "type": "number" - }, - "city": { + "expires": { "type": "string" }, - "city_region": { + "message": { "type": "string" }, - "country": { - "type": "string" + "nameservers": { + "items": { + "type": "string" + }, + "type": "array" }, - "cover_image_url": { + "observed_at": { "type": "string" }, - "crawled_at": { + "registrar": { "type": "string" }, - "dash_pass_eligible": { - "type": "boolean" - }, - "discovery_city": { - "description": "Discovery geography identifies the GeoNames seed cell that produced this\nobservation. It is not a claim that the store's postal city matches the\nseed city's name; hydrated City/State come from the store-info card.", + "source": { "type": "string" }, - "discovery_country": { + "status": { "type": "string" }, - "discovery_state": { - "type": "string" + "statuses": { + "items": { + "type": "string" + }, + "type": "array" }, - "display_asap_time": { + "updated": { "type": "string" - }, - "display_status": { + } + }, + "type": "object" + }, + "domainintel.RobotsSection": { + "properties": { + "content": { "type": "string" }, - "first_seen_at": { + "final_url": { "type": "string" }, - "has_phone": { - "type": "boolean" - }, - "has_website": { - "type": "boolean" + "http_status": { + "type": "integer" }, - "id": { + "message": { "type": "string" }, - "last_seen_at": { + "observed_at": { "type": "string" }, - "latitude": { - "type": "number" - }, - "location": { - "allOf": [ - { - "$ref": "#/definitions/es.GeoPoint" - } - ], - "description": "Location is a geo_point ([lon, lat] order in the GeoPoint helper)." - }, - "longitude": { - "type": "number" - }, - "name": { + "source": { "type": "string" }, - "number_of_ratings": { - "type": "integer" - }, - "phone": { + "status": { "type": "string" }, - "pickup_available": { + "truncated": { "type": "boolean" + } + }, + "type": "object" + }, + "domainintel.SSLSection": { + "properties": { + "dns_names": { + "items": { + "type": "string" + }, + "type": "array" }, - "postal_code": { + "issuer": { "type": "string" }, - "price_range": { - "type": "integer" - }, - "run_id": { + "message": { "type": "string" }, - "schema_version": { - "type": "integer" - }, - "search_text": { + "observed_at": { "type": "string" }, - "state": { + "serial_number": { "type": "string" }, - "store_id": { + "signature_algorithm": { "type": "string" }, - "street": { + "source": { "type": "string" }, - "tags": { - "description": "Tags is the marketplace's own comma-split tag list, kept as a keyword so\nit can back a terms facet; SearchText is the free-text projection over\nname + address + tags.", - "items": { - "type": "string" - }, - "type": "array" - }, - "top_items": { - "description": "TopItems is a bounded preview of the merchant's menu, stored unindexed.", - "items": { - "$ref": "#/definitions/es.DoorDashStoreTopItem" - }, - "type": "array" - }, - "url": { + "status": { "type": "string" }, - "website": { - "type": "string" - } - }, - "type": "object" - }, - "es.DoorDashStoreTopItem": { - "properties": { - "image_url": { + "subject": { "type": "string" }, - "item_id": { - "type": "string" + "valid": { + "type": "boolean" }, - "name": { + "valid_from": { "type": "string" }, - "price": { + "valid_until": { "type": "string" } }, "type": "object" }, - "es.FacebookPageCandidate": { + "domainintel.SiteInspection": { "properties": { - "address": { + "domain": { "type": "string" }, - "category": { + "final_url": { "type": "string" }, - "contact_observed_at": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "http_status": { + "type": "integer" }, - "discovered_at": { + "message": { "type": "string" }, - "discovery_source": { + "observed_at": { "type": "string" }, - "email": { + "source": { "type": "string" }, - "hydrated_at": { + "status": { "type": "string" }, - "identifier": { - "type": "string" + "technology": { + "$ref": "#/definitions/domainintel.TechnologySection" }, - "likes": { + "tls": { + "$ref": "#/definitions/domainintel.SSLSection" + } + }, + "type": "object" + }, + "domainintel.SubdomainsSection": { + "properties": { + "count": { "type": "integer" }, - "page_id": { + "live_resolved": { + "type": "boolean" + }, + "message": { "type": "string" }, - "phones": { + "names": { "items": { "type": "string" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "status": { + "observed_at": { "type": "string" }, - "title": { + "source": { "type": "string" }, - "website": { + "status": { "type": "string" }, - "whatsapp": { - "type": "string" - } - }, - "type": "object" - }, - "es.FacebookPageDatasetFacetItem": { - "properties": { - "count": { + "total_reported": { "type": "integer" }, - "value": { - "type": "string" + "truncated": { + "type": "boolean" } }, "type": "object" }, - "es.FacebookPageDatasetItem": { + "domainintel.TechnologySection": { "properties": { - "address": { + "categories": { + "items": { + "type": "string" + }, + "type": "array" + }, + "detector_version": { "type": "string" }, - "category": { + "final_url": { "type": "string" }, - "contact_observed_at": { + "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, - "discovered_at": { - "type": "string" - }, - "discovery_source": { - "type": "string" + "http_status": { + "type": "integer" }, - "email": { + "message": { "type": "string" }, - "hydrated_at": { + "observed_at": { "type": "string" }, - "identifier": { + "source": { "type": "string" }, - "likes": { - "type": "integer" - }, - "page_id": { + "status": { "type": "string" }, - "phones": { + "technologies": { "items": { - "type": "string" + "$ref": "#/definitions/techstack.Technology" }, "type": "array" + } + }, + "type": "object" + }, + "domainintel.WaybackAvailabilitySection": { + "properties": { + "latest_capture": { + "type": "string" }, - "source_url": { + "latest_snapshot_url": { "type": "string" }, - "status": { + "message": { "type": "string" }, - "title": { + "observed_at": { "type": "string" }, - "website": { + "source": { "type": "string" }, - "whatsapp": { + "status": { "type": "string" } }, "type": "object" }, - "es.FacetItem": { + "domainintel.WaybackCDXSection": { "properties": { - "count": { - "description": "Number of open job postings with this value.", - "type": "integer" + "first_capture": { + "type": "string" }, - "key": { - "description": "Facet value, for example a company, department or location name.", + "message": { + "type": "string" + }, + "observed_at": { + "type": "string" + }, + "source": { "type": "string" + }, + "status": { + "type": "string" + }, + "years": { + "items": { + "$ref": "#/definitions/domainintel.WaybackYearEntry" + }, + "type": "array" } }, "type": "object" }, - "es.GeoPoint": { + "domainintel.WaybackYearEntry": { "properties": { - "lat": { - "description": "Latitude in decimal degrees.", - "type": "number" + "first_capture_seen": { + "type": "string" }, - "lon": { - "description": "Longitude in decimal degrees.", - "type": "number" + "year": { + "type": "integer" } }, "type": "object" }, - "es.GithubGeo": { + "domainintel.dnsLookupResponseDoc": { "properties": { - "city": { - "description": "Name of the city resolved from the profile location.", - "type": "string" - }, - "country": { - "description": "Name of the country resolved from the profile location.", - "type": "string" - }, - "country_code": { - "description": "Country code resolved from the profile location, for example `DE`.", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "location": { - "allOf": [ - { - "$ref": "#/definitions/es.GithubGeoPoint" - } - ], - "description": "Coordinates of the resolved place." + "data": { + "$ref": "#/definitions/domainintel.DNSLookup" }, - "state": { - "description": "Name of the state or region resolved from the profile location.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "es.GithubGeoPoint": { + "domainintel.dnsRecordTypesDataDoc": { "properties": { - "lat": { - "description": "Latitude in decimal degrees.", - "type": "number" - }, - "lon": { - "description": "Longitude in decimal degrees.", - "type": "number" + "record_types": { + "example": [ + "A", + "AAAA", + "CAA", + "CNAME", + "DS", + "HTTPS", + "MX", + "NS", + "SOA", + "TXT" + ], + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "es.GithubSocialLink": { + "domainintel.dnsRecordTypesResponseDoc": { "properties": { - "provider": { - "description": "Social network the link points to.", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "url": { - "description": "Link to the account on that network.", + "data": { + "$ref": "#/definitions/domainintel.dnsRecordTypesDataDoc" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "es.GithubUserDatasetFacetItem": { + "domainintel.rdapDomainResponseDoc": { "properties": { - "count": { - "description": "Number of users with this value.", + "code": { + "example": 200, "type": "integer" }, - "value": { - "description": "Facet value being counted.", + "data": { + "$ref": "#/definitions/domainintel.RegistrationSection" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "es.GithubUserDatasetItem": { + "domainintel.rdapIPResponseDoc": { "properties": { - "account_age_years": { - "description": "Age of the account in years, to one decimal, at the time of `crawled_at`.", - "type": "number" + "code": { + "example": 200, + "type": "integer" }, - "active_90d": { - "description": "Whether the user's latest activity was within 90 days of `crawled_at`.", - "type": "boolean" + "data": { + "$ref": "#/definitions/domainintel.IPAddress" }, - "avatar_url": { - "description": "URL of the profile picture.", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "domainintel.robotsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "bio": { - "description": "Profile biography text.", - "type": "string" + "data": { + "$ref": "#/definitions/domainintel.RobotsSection" }, - "blog": { - "description": "Website or blog address on the profile.", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "domainintel.siteInspectionResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "company": { - "description": "Employer name as written on the profile.", - "type": "string" + "data": { + "$ref": "#/definitions/domainintel.SiteInspection" }, - "company_normalized": { - "description": "Company name cleaned for matching: lowercased, with any leading `@` removed.", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "domainintel.subdomainsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "crawled_at": { - "description": "Time the profile was fetched, in UTC (RFC 3339).", - "type": "string" + "data": { + "$ref": "#/definitions/domainintel.SubdomainsSection" }, - "created_at": { - "description": "Time the GitHub account was created, in UTC (RFC 3339).", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "domainintel.waybackAvailabilityResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "distance_m": { - "description": "Distance from the query point in metres. Set when results are sorted by distance.", - "type": "number" - }, - "domains": { - "description": "Interest areas inferred from the profile text, for example `ml-ai`, `frontend` or `devops`.", - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/domainintel.WaybackAvailabilitySection" }, - "email": { - "description": "Public email address on the profile.", + "msg": { + "example": "OK", "type": "string" - }, - "follower_following_ratio": { - "description": "Followers divided by accounts followed, to two decimals. Equals `followers` when the user follows nobody.", - "type": "number" - }, - "followers": { - "description": "Number of followers.", - "type": "integer" - }, - "following": { - "description": "Number of accounts the user follows.", + } + }, + "type": "object" + }, + "domainintel.waybackCDXResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "geo": { - "allOf": [ - { - "$ref": "#/definitions/es.GithubGeo" - } - ], - "description": "Place resolved from the profile location." - }, - "has_blog": { - "description": "Whether the profile shows a website or blog.", - "type": "boolean" + "data": { + "$ref": "#/definitions/domainintel.WaybackCDXSection" }, - "has_email": { - "description": "Whether the profile shows a public email address.", - "type": "boolean" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "dominos.CookingInstruction": { + "properties": { + "code": { + "example": "PIECT", + "type": "string" }, - "has_twitter": { - "description": "Whether the profile shows a Twitter or X username.", - "type": "boolean" + "group": { + "example": "CUT", + "type": "string" }, - "hireable": { - "description": "Whether the user has marked themselves as available for hire.", + "name": { + "example": "Pie Cut", + "type": "string" + } + }, + "type": "object" + }, + "dominos.Coupon": { + "properties": { + "bundle": { + "example": true, "type": "boolean" }, - "html_url": { - "description": "Link to the user's GitHub profile page.", + "code": { + "example": "3057", "type": "string" }, - "id": { - "description": "Numeric GitHub user id.", - "type": "integer" - }, - "influence_tier": { - "description": "Follower-based tier: `nano` (under 50), `micro` (50 to 499), `mid` (500 to 4,999), `macro` (5,000 to 49,999) or `mega` (50,000 or more).", + "description": { "type": "string" }, - "is_bot": { - "description": "Whether the account is a bot.", + "local": { + "example": true, "type": "boolean" }, - "is_org": { - "description": "Whether the account is an organization.", - "type": "boolean" + "name": { + "example": "1 Medium Domino's Specialty Pizza", + "type": "string" }, - "is_suspected_automation": { - "description": "Whether the account looks like a commit farm or mass repository generator.", - "type": "boolean" + "price": { + "example": 13.99, + "type": "number" }, - "last_active_at": { - "description": "Time of the user's latest recorded activity, in UTC (RFC 3339).", - "type": "string" + "valid_service_methods": { + "example": [ + "Carryout", + "Delivery" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "location_raw": { - "description": "Free-text location as written on the profile.", + "virtual_codes": { + "description": "VirtualCodes are alternate marketing/promo codes that resolve to this\ncoupon -- Domino's own VirtualCoupons map, inverted onto the coupon\neach virtual code points at, so a caller sees every alias without\ncross-referencing two separate maps.", + "example": [ + "1TDOMINO" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "dominos.CouponTier": { + "properties": { + "code": { + "example": "8651C", "type": "string" }, - "login": { - "description": "GitHub username of the account.", + "description": { "type": "string" }, "name": { - "description": "Display name on the profile.", + "example": "15% off all pizzas", "type": "string" }, - "prs_30d": { - "description": "Number of pull request events the user had in the last 30 days.", - "type": "integer" - }, - "public_gists": { - "description": "Number of public gists.", - "type": "integer" - }, - "public_repos": { - "description": "Number of public repositories.", - "type": "integer" - }, - "pushes_30d": { - "description": "Number of pushes the user made in the last 30 days.", - "type": "integer" - }, - "rank_score": { - "description": "Overall notability score. Followers count most and recent activity adds a smaller amount. It is 0 for suspected automation.", - "type": "integer" - }, - "reachable": { - "description": "Whether the profile shows any public way to make contact: email, Twitter or X, a website or a linked social account.", - "type": "boolean" + "percent_off": { + "example": 15, + "type": "number" }, - "reviews_30d": { - "description": "Number of pull request review events, including review comments, the user made in the last 30 days.", + "threshold": { + "example": 7, "type": "integer" + } + }, + "type": "object" + }, + "dominos.CouponTierGroup": { + "properties": { + "code": { + "example": "MultiplePizza", + "type": "string" }, - "schema_version": { - "description": "Version of the record layout.", + "tiers": { + "items": { + "$ref": "#/definitions/dominos.CouponTier" + }, + "type": "array" + } + }, + "type": "object" + }, + "dominos.CouponsResponse": { + "properties": { + "count": { + "example": 17, "type": "integer" }, - "social_accounts": { - "description": "Social accounts linked on the profile.", + "coupons": { + "description": "Coupons is Domino's own standalone Coupons map, normalized to a\nsorted list. A store can genuinely have zero active coupons -- unlike\n/dominos/menu's items, an empty list here is not treated as a parser\nerror.", "items": { - "$ref": "#/definitions/es.GithubSocialLink" + "$ref": "#/definitions/dominos.Coupon" }, "type": "array" }, - "social_count": { - "description": "Number of social accounts linked on the profile.", - "type": "integer" + "fetched_at": { + "type": "string" }, - "twitter_username": { - "description": "Twitter or X username on the profile.", + "source_url": { "type": "string" }, - "type": { - "description": "Account type on GitHub, for example `User` or `Organization`.", + "store_id": { + "example": "4336", "type": "string" + }, + "tier_groups": { + "description": "TierGroups is Domino's own volume-discount CouponTiers, normalized.", + "items": { + "$ref": "#/definitions/dominos.CouponTierGroup" + }, + "type": "array" } }, "type": "object" }, - "es.GithubUserRecord": { + "dominos.CustomizationGroup": { "properties": { - "account_age_years": { - "description": "Age of the account in years, to one decimal, at the time of `crawled_at`.", - "type": "number" - }, - "active_90d": { - "description": "Whether the user's latest activity was within 90 days of `crawled_at`.", - "type": "boolean" - }, - "avatar_url": { - "description": "URL of the profile picture.", + "category": { + "example": "BuildYourOwnDomino", "type": "string" }, - "bio": { - "description": "Profile biography text.", - "type": "string" + "flavors": { + "items": { + "$ref": "#/definitions/dominos.CustomizationOption" + }, + "type": "array" }, - "blog": { - "description": "Website or blog address on the profile.", - "type": "string" + "sides": { + "items": { + "$ref": "#/definitions/dominos.CustomizationOption" + }, + "type": "array" }, - "company": { - "description": "Employer name as written on the profile.", - "type": "string" + "sizes": { + "items": { + "$ref": "#/definitions/dominos.CustomizationOption" + }, + "type": "array" }, - "company_normalized": { - "description": "Company name cleaned for matching: lowercased, with any leading `@` removed.", - "type": "string" + "toppings": { + "items": { + "$ref": "#/definitions/dominos.CustomizationOption" + }, + "type": "array" + } + }, + "type": "object" + }, + "dominos.CustomizationOption": { + "properties": { + "attributes": { + "additionalProperties": { + "type": "string" + }, + "type": "object" }, - "crawled_at": { - "description": "Time the profile was fetched, in UTC (RFC 3339).", + "code": { + "example": "K", "type": "string" }, - "created_at": { - "description": "Time the GitHub account was created, in UTC (RFC 3339).", + "description": { "type": "string" }, - "domains": { - "description": "Interest areas inferred from the profile text, for example `ml-ai`, `frontend` or `devops`.", + "flags": { + "example": [ + "Meat" + ], "items": { "type": "string" }, "type": "array" }, - "email": { - "description": "Public email address on the profile.", + "name": { + "example": "Bacon", "type": "string" + } + }, + "type": "object" + }, + "dominos.CustomizationResponse": { + "properties": { + "cooking_instructions": { + "description": "CookingInstructions is sorted by code, independent of Groups.", + "items": { + "$ref": "#/definitions/dominos.CookingInstruction" + }, + "type": "array" }, - "follower_following_ratio": { - "description": "Followers divided by accounts followed, to two decimals. Equals `followers` when the user follows nobody.", - "type": "number" - }, - "followers": { - "description": "Number of followers.", - "type": "integer" - }, - "following": { - "description": "Number of accounts the user follows.", + "count": { + "description": "Count is the total number of options across every group's sizes,\nflavors, toppings, and sides (cooking instructions are not counted).", + "example": 142, "type": "integer" }, - "geo": { - "allOf": [ - { - "$ref": "#/definitions/es.GithubGeo" - } - ], - "description": "Place resolved from the profile location." - }, - "has_blog": { - "description": "Whether the profile shows a website or blog.", - "type": "boolean" + "fetched_at": { + "type": "string" }, - "has_email": { - "description": "Whether the profile shows a public email address.", - "type": "boolean" + "groups": { + "items": { + "$ref": "#/definitions/dominos.CustomizationGroup" + }, + "type": "array" }, - "has_twitter": { - "description": "Whether the profile shows a Twitter or X username.", - "type": "boolean" + "source_url": { + "type": "string" }, - "hireable": { - "description": "Whether the user has marked themselves as available for hire.", - "type": "boolean" + "store_id": { + "example": "4336", + "type": "string" + } + }, + "type": "object" + }, + "dominos.DayHours": { + "properties": { + "week_day": { + "example": "Monday", + "type": "string" }, - "html_url": { - "description": "Link to the user's GitHub profile page.", + "windows": { + "items": { + "$ref": "#/definitions/dominos.TimeWindow" + }, + "type": "array" + } + }, + "type": "object" + }, + "dominos.LocatorQuery": { + "properties": { + "city": { + "example": "WASHINGTON", "type": "string" }, - "id": { - "description": "Numeric GitHub user id.", - "type": "integer" + "granularity": { + "description": "Granularity is Domino's own label for how precisely the address\nresolved, e.g. \"CityRegionStreetRange\", \"CityRegion\", \"PostalCode\", or\n\"None\" when nothing could be resolved.", + "example": "CityRegionStreetRange", + "type": "string" }, - "influence_tier": { - "description": "Follower-based tier: `nano` (under 50), `micro` (50 to 499), `mid` (500 to 4,999), `macro` (5,000 to 49,999) or `mega` (50,000 or more).", + "postal_code": { + "example": "20500-0005", "type": "string" }, - "is_bot": { - "description": "Whether the account is a bot.", - "type": "boolean" + "region": { + "example": "DC", + "type": "string" }, - "is_org": { - "description": "Whether the account is an organization.", - "type": "boolean" + "street": { + "example": "1600 PENNSYLVANIA AVE NW", + "type": "string" + } + }, + "type": "object" + }, + "dominos.MenuCategory": { + "properties": { + "code": { + "example": "Pizza/Specialty", + "type": "string" }, - "is_suspected_automation": { - "description": "Whether the account looks like a commit farm or mass repository generator.", - "type": "boolean" + "items": { + "items": { + "$ref": "#/definitions/dominos.MenuItem" + }, + "type": "array" }, - "last_active_at": { - "description": "Time of the user's latest recorded activity, in UTC (RFC 3339).", + "name": { + "example": "Pizza > Specialty Pizzas", "type": "string" - }, - "location_raw": { - "description": "Free-text location as written on the profile.", + } + }, + "type": "object" + }, + "dominos.MenuItem": { + "properties": { + "code": { + "example": "S_PIZZA", "type": "string" }, - "login": { - "description": "GitHub username of the account.", + "description": { "type": "string" }, "name": { - "description": "Display name on the profile.", + "example": "Pizza", "type": "string" }, - "prs_30d": { - "description": "Number of pull request events the user had in the last 30 days.", - "type": "integer" - }, - "public_gists": { - "description": "Number of public gists.", - "type": "integer" - }, - "public_repos": { - "description": "Number of public repositories.", - "type": "integer" - }, - "pushes_30d": { - "description": "Number of pushes the user made in the last 30 days.", - "type": "integer" - }, - "rank_score": { - "description": "Overall notability score. Followers count most and recent activity adds a smaller amount. It is 0 for suspected automation.", - "type": "integer" - }, - "reachable": { - "description": "Whether the profile shows any public way to make contact: email, Twitter or X, a website or a linked social account.", - "type": "boolean" - }, - "reviews_30d": { - "description": "Number of pull request review events, including review comments, the user made in the last 30 days.", - "type": "integer" - }, - "schema_version": { - "description": "Version of the record layout.", - "type": "integer" + "product_type": { + "example": "Pizza", + "type": "string" }, - "social_accounts": { - "description": "Social accounts linked on the profile.", + "variants": { "items": { - "$ref": "#/definitions/es.GithubSocialLink" + "$ref": "#/definitions/dominos.MenuVariant" + }, + "type": "array" + } + }, + "type": "object" + }, + "dominos.MenuResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/dominos.MenuCategory" }, "type": "array" }, - "social_count": { - "description": "Number of social accounts linked on the profile.", + "count": { + "example": 70, "type": "integer" }, - "twitter_username": { - "description": "Twitter or X username on the profile.", + "fetched_at": { "type": "string" }, - "type": { - "description": "Account type on GitHub, for example `User` or `Organization`.", + "source_url": { + "type": "string" + }, + "store_id": { + "example": "4336", "type": "string" } }, "type": "object" }, - "es.GoodreadsAuthorDatasetFacetItem": { + "dominos.MenuVariant": { "properties": { - "count": { - "type": "integer" + "code": { + "example": "14SCREEN", + "type": "string" }, - "value": { + "name": { + "example": "Large (14\") Hand Tossed Pizza", + "type": "string" + }, + "price": { + "example": 14.99, + "type": "number" + }, + "size_code": { + "example": "14", "type": "string" } }, "type": "object" }, - "es.GoodreadsAuthorRecord": { + "dominos.NutritionResponse": { "properties": { - "about": { - "description": "Author biography from the Goodreads page.", + "base": { + "example": "HANDTOSS", "type": "string" }, - "average_rating": { - "description": "Average rating across the author's books on Goodreads.", - "type": "number" + "calories": { + "example": "180 Calories / 1 slice (1/8 of pizza)", + "type": "string" }, - "birth_date": { - "description": "Birth date as Goodreads shows it, for example `August 11, 1962`.", + "fetched_at": { "type": "string" }, - "crawled_at": { - "description": "Time the author's data was fetched, in UTC (RFC 3339).", + "name": { + "description": "Name is the resolved product/configuration name Domino's itself\nreturned -- for a named item this confirms which default variant was\npriced; for a build-your-own pizza it echoes the full description.", + "example": "Large (14\") Hand Tossed Pizza", "type": "string" }, - "death_date": { - "description": "Date of death as Goodreads shows it.", + "product_code": { + "example": "S_PIZZA", "type": "string" }, - "discovery_source": { - "description": "DiscoverySource records how this id was found, e.g. \"book:2767052\",\n\"genre:fantasy\", \"search:mystery\" — useful for crawl provenance/debugging.", + "size": { + "example": "14", "type": "string" }, - "genres": { - "description": "List of genres Goodreads shows for the author.", + "source_url": { + "type": "string" + }, + "store_id": { + "example": "4336", + "type": "string" + }, + "toppings": { + "example": [ + "P" + ], "items": { "type": "string" }, "type": "array" + } + }, + "type": "object" + }, + "dominos.Store": { + "properties": { + "address": { + "$ref": "#/definitions/dominos.StoreAddress" }, - "id": { - "description": "Goodreads author id.", - "type": "string" + "carryout_available": { + "example": true, + "type": "boolean" }, - "image_url": { - "description": "URL of the author's photo.", + "contactless_carryout": { + "example": "DISABLED", "type": "string" }, - "name": { - "description": "Full name of the author.", + "contactless_delivery": { + "example": "AVAILABLE", "type": "string" }, - "ratings_count": { - "description": "Number of ratings the author's books have received.", - "type": "integer" + "delivery_available": { + "description": "DeliveryAvailable, CarryoutAvailable, and DriveUpCarryoutAvailable are\nthis store's own allowed-order-type flags, independent of whether it\nhappens to be open right now.", + "example": true, + "type": "boolean" }, - "reviews_count": { - "description": "Number of reviews the author's books have received.", - "type": "integer" + "drive_up_carryout_available": { + "example": true, + "type": "boolean" }, - "run_id": { - "description": "Identifier of the collection run that produced this record. Accepted as a `run_id` filter.", - "type": "string" + "estimated_wait_minutes": { + "additionalProperties": { + "$ref": "#/definitions/dominos.WaitEstimate" + }, + "description": "EstimatedWaitMinutes is keyed by service method (Delivery, Carryout).", + "type": "object" }, - "schema_version": { - "description": "Version of the record layout.", - "type": "integer" + "is_online_now": { + "example": true, + "type": "boolean" }, - "seed_rank": { - "description": "SeedRank is the discovery priority (lower = discovered earlier/higher\npriority), mirroring GoodreadsBookRecord.SeedRank.", - "type": "integer" + "is_open": { + "example": true, + "type": "boolean" }, - "source_url": { - "description": "URL the data was read from.", + "phone": { + "example": "202-639-8700", "type": "string" }, - "uri": { - "description": "Link to the author's Goodreads page.", - "type": "string" + "service_hours": { + "additionalProperties": { + "type": "string" + }, + "description": "ServiceHours is Domino's own free-text hours summary per service\nmethod (Carryout, Delivery, DriveUpCarryout, DeliverToMe).", + "type": "object" }, - "website": { - "description": "Author's website address.", + "store_id": { + "example": "4336", "type": "string" } }, "type": "object" }, - "es.GoodreadsBookDatasetFacetItem": { + "dominos.StoreAddress": { "properties": { - "count": { - "type": "integer" + "city": { + "example": "Washington", + "type": "string" }, - "value": { + "latitude": { + "example": 38.9036, + "type": "number" + }, + "longitude": { + "example": -77.03, + "type": "number" + }, + "postal_code": { + "example": "20005", + "type": "string" + }, + "region": { + "example": "DC", + "type": "string" + }, + "street": { + "example": "1300 L St Nw", "type": "string" } }, "type": "object" }, - "es.GoodreadsBookRecord": { + "dominos.StoreDetailResponse": { "properties": { - "author_ids": { - "description": "Goodreads ids of the credited authors.", - "items": { - "type": "string" - }, - "type": "array" + "address": { + "$ref": "#/definitions/dominos.StoreAddress" }, - "authors": { - "description": "Authors/AuthorIDs list every credited contributor (primary + secondary);\nPrimaryAuthor(ID) denormalizes the first for single-value filters/facets.", - "items": { - "type": "string" - }, - "type": "array" + "carryout_available": { + "example": true, + "type": "boolean" }, - "crawled_at": { - "description": "Time the book's data was fetched, in UTC (RFC 3339).", + "contactless_carryout": { + "example": "DISABLED", "type": "string" }, - "description": { - "description": "Book description from the Goodreads page.", + "contactless_delivery": { + "example": "AVAILABLE", "type": "string" }, - "discovery_source": { - "description": "DiscoverySource records how this id was found, e.g. \"list:1\",\n\"search:mystery\", \"author:153394\" — useful for crawl provenance/debugging.", - "type": "string" + "delivery_available": { + "example": true, + "type": "boolean" }, - "format": { - "description": "Book format, for example `Hardcover`.", + "dine_in_available": { + "example": false, + "type": "boolean" + }, + "drive_up_carryout_available": { + "example": true, + "type": "boolean" + }, + "estimated_wait_minutes": { + "additionalProperties": { + "$ref": "#/definitions/dominos.WaitEstimate" + }, + "description": "EstimatedWaitMinutes is keyed by service method (Delivery, Carryout),\nsame shape as /dominos/store-locator's per-store field.", + "type": "object" + }, + "fetched_at": { "type": "string" }, - "genres": { - "description": "List of genres Goodreads shows for the book.", + "hours": { + "description": "Hours is the store's general weekly hours, Monday-first.", "items": { - "type": "string" + "$ref": "#/definitions/dominos.DayHours" }, "type": "array" }, - "id": { - "description": "Goodreads book id.", - "type": "string" + "is_online_now": { + "example": true, + "type": "boolean" }, - "image_url": { - "description": "URL of the cover image.", + "is_open": { + "example": true, + "type": "boolean" + }, + "minimum_carryout_order_amount": { + "example": 0, + "type": "number" + }, + "minimum_delivery_order_amount": { + "example": 20, + "type": "number" + }, + "name": { + "example": "Downtown L St", "type": "string" }, - "isbn": { - "description": "ISBN-10 of the edition.", + "phone": { + "example": "202-639-8700", "type": "string" }, - "isbn13": { - "description": "ISBN-13 of the edition.", + "service_hours": { + "additionalProperties": { + "items": { + "$ref": "#/definitions/dominos.DayHours" + }, + "type": "array" + }, + "description": "ServiceHours is the full weekly hours per service method (Carryout,\nDelivery, DriveUpCarryout, DeliverToMe), Monday-first.", + "type": "object" + }, + "service_hours_description": { + "additionalProperties": { + "type": "string" + }, + "description": "ServiceHoursDescription is Domino's own free-text summary per service\nmethod -- the same shape /dominos/store-locator's per-store\nservice_hours field carries.", + "type": "object" + }, + "source_url": { "type": "string" }, - "language": { - "description": "Language the edition is written in, for example `English`.", + "status": { + "description": "Status is Domino's own legal/operating status label, e.g. \"Open\".", + "example": "Open", "type": "string" }, - "pages": { - "description": "Number of pages.", + "store_id": { + "example": "4336", + "type": "string" + } + }, + "type": "object" + }, + "dominos.StoreLocatorResponse": { + "properties": { + "count": { + "example": 2, "type": "integer" }, - "primary_author": { - "description": "Name of the first credited author.", + "fetched_at": { "type": "string" }, - "primary_author_id": { - "description": "Goodreads id of the first credited author.", - "type": "string" + "query": { + "$ref": "#/definitions/dominos.LocatorQuery" }, - "publication_date": { - "description": "Publication date as Goodreads shows it, for example `2008-10-14`.", + "service_method": { + "example": "Delivery", "type": "string" }, - "publication_year": { - "description": "Year of publication.", - "type": "integer" - }, - "publisher": { - "description": "Name of the book's publisher.", + "source_url": { "type": "string" }, - "rating_average": { - "description": "Average Goodreads rating of the book.", - "type": "number" + "stores": { + "items": { + "$ref": "#/definitions/dominos.Store" + }, + "type": "array" + } + }, + "type": "object" + }, + "dominos.TimeWindow": { + "properties": { + "closes": { + "example": "23:59", + "type": "string" }, - "rating_five_star": { - "description": "Number of 5-star ratings.", + "opens": { + "example": "10:00", + "type": "string" + } + }, + "type": "object" + }, + "dominos.WaitEstimate": { + "properties": { + "max": { + "example": 29, "type": "integer" }, - "rating_four_star": { - "description": "Number of 4-star ratings.", + "min": { + "example": 14, "type": "integer" - }, - "rating_one_star": { - "description": "Rating*Star is the flattened 1-5 star ratings-count distribution.", + } + }, + "type": "object" + }, + "dominos.couponsResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "rating_three_star": { - "description": "Number of 3-star ratings.", - "type": "integer" + "data": { + "$ref": "#/definitions/dominos.CouponsResponse" }, - "rating_two_star": { - "description": "Number of 2-star ratings.", + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "dominos.customizationResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "ratings_count": { - "description": "Number of ratings the book has received.", + "data": { + "$ref": "#/definitions/dominos.CustomizationResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "dominos.menuResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "reviews_count": { - "description": "Number of reviews the book has received.", + "data": { + "$ref": "#/definitions/dominos.MenuResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "dominos.nutritionResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "run_id": { - "description": "Identifier of the collection run that produced this record. Accepted as a `run_id` filter.", - "type": "string" + "data": { + "$ref": "#/definitions/dominos.NutritionResponse" }, - "schema_version": { - "description": "Version of the record layout.", + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "dominos.storeDetailResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "seed_rank": { - "description": "SeedRank is the discovery priority (lower = discovered earlier/higher\npriority): curated list/search seeds rank low; BFS-discovered books from\nauthor expansion rank higher so curated breadth crawls first.", + "data": { + "$ref": "#/definitions/dominos.StoreDetailResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "dominos.storeLocatorResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "series": { - "description": "Series is the display string (e.g. \"The Hunger Games #1\"); SeriesName is\nthe bare series title, split out for exact filtering/faceting.", + "data": { + "$ref": "#/definitions/dominos.StoreLocatorResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "doordash.Address": { + "properties": { + "city": { + "description": "City the store is in.", "type": "string" }, - "series_name": { - "description": "Title of the series the book belongs to, without the book number.", + "country": { + "description": "Country the store is in.", "type": "string" }, - "source_url": { - "description": "URL the data was read from.", + "postalCode": { + "description": "Postal code of the store address.", "type": "string" }, - "title": { - "description": "Title of the book.", + "region": { + "description": "State or region the store is in.", "type": "string" }, - "uri": { - "description": "Link to the book's Goodreads page.", + "street": { + "description": "Street line of the store address.", "type": "string" } }, "type": "object" }, - "es.GoogleBusiness": { + "doordash.Cuisine": { "properties": { - "address": { - "description": "Full street address as shown on Google Maps.", - "example": "250 Beach St, San Francisco, CA 94133", + "animatedCoverImageUrl": { "type": "string" }, - "amenities": { - "description": "List of amenities Google Maps shows for the business, for example `Free Wi-Fi`.", - "example": [ - "['Free Wi-Fi'", - " 'Air-conditioned'", - " 'Wi-Fi'", - " 'Parking']" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "category": { - "description": "Categories Google Maps lists for the business. Labels can be in the local language.", - "example": [ - "[\"hotel\"]" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "city": { - "description": "Name of the city the business is in.", - "example": "San Francisco", + "coverImageUrl": { "type": "string" }, - "contact": { - "allOf": [ - { - "$ref": "#/definitions/contact.Contact" - } - ], - "description": "🆕 Contact information" + "friendlyName": { + "type": "string" }, - "contact_is_updated": { - "description": "Whether the business's contact details have been collected.", - "type": "boolean" + "id": { + "type": "string" }, - "country": { - "description": "🆕 Geographic hierarchy", - "example": "United States", + "localizedFriendlyName": { "type": "string" }, - "county": { - "description": "Administrative area below state level, named as the country itself names it.", - "example": "San Francisco County", + "name": { + "type": "string" + } + }, + "type": "object" + }, + "doordash.ExploreItem": { + "properties": { + "imageUrl": { "type": "string" }, - "county_code": { - "description": "ISO 3166-2 code for the `county` value, for example `FR-59`.", - "example": "FR-59", + "itemId": { "type": "string" }, - "created_at": { - "description": "🆕 Timestamps", + "name": { "type": "string" }, - "description": { - "description": "Business description shown on Google Maps.", - "example": "A 3-minute walk from Pier 41 in the Fisherman's Wharf district...", + "price": { "type": "string" + } + }, + "type": "object" + }, + "doordash.ExploreResponse": { + "properties": { + "stores": { + "items": { + "$ref": "#/definitions/doordash.ExploreStore" + }, + "type": "array" + } + }, + "type": "object" + }, + "doordash.ExploreStore": { + "properties": { + "asapAvailable": { + "type": "boolean" }, - "geo": { - "allOf": [ - { - "$ref": "#/definitions/es.GeoPoint" - } - ], - "description": "Coordinates of the business. Omitted when no map location is available for it." + "averageRating": { + "type": "number" }, - "geo_is_updated": { - "description": "Whether the country, state, county, city and town fields have been filled in from the coordinates.", + "coverImageUrl": { + "type": "string" + }, + "dashPassEligible": { "type": "boolean" }, - "id": { - "description": "Unique id of the business record in the dataset.", - "example": "ChIJ99URUeOAhYAR0J5ZUxTesDQ", + "displayAsapTime": { "type": "string" }, - "image": { - "description": "URL of the business's main photo on Google Maps.", - "example": "https://lh5.googleusercontent.com/p/AF1QipP_O55x7gOwR3AaM09CVmzEUude9wMHMPwc--yp", + "displayStatus": { "type": "string" }, - "locations": { - "description": "Place names Google Maps lists with the business, for example `San Francisco`.", - "example": [ - "['San Francisco'", - " 'Los Angeles']" - ], - "items": { - "type": "string" - }, - "type": "array" - }, "name": { - "description": "Business name as shown on Google Maps.", - "example": "Hotel Zephyr San Francisco", "type": "string" }, - "permanently_closed": { - "description": "PermanentlyClosed reports Google's \"Permanently closed\" marker: true when\nGoogle marks the business permanently closed, false when a crawl confirmed it\ndoes not, and null when the business has not been re-crawled since status\ncapture shipped (2026-08-31) — which is most of the dataset. null therefore\nmeans UNKNOWN, never \"open\": a count that treats null as operational is\ncounting an unknown number of dead businesses. Use permanently_closed=false\nto exclude the confirmed-closed ones.", - "example": false, - "type": "boolean", - "x-nullable": true + "numberOfRatings": { + "type": "integer" }, - "phone": { - "description": "Business phone number as listed on Google Maps.", - "example": "14156176565", - "type": "string" + "pickupAvailable": { + "type": "boolean" }, - "place_id": { - "description": "Google place id of the business.", - "example": "ChIJ99URUeOAhYAR0J5ZUxTesDQ", + "priceRange": { + "type": "integer" + }, + "storeId": { "type": "string" }, - "rating": { - "description": "Rating is the aggregate Google rating (1.0–5.0). It is a pointer so a business\nwith NO aggregate Google rating serializes as `rating: null` rather than a\nmisleading 0 — Google never assigns a 0.x average, so 0 always meant \"unrated\".\nConsumers computing an average must skip nulls; use min_rating>0 to exclude them.", - "example": 4.1, - "type": "number", - "x-nullable": true + "tags": { + "items": { + "type": "string" + }, + "type": "array" }, - "review_count": { - "description": "ReviewCount is the aggregate Google review count. A null value means Google\ndid not return a count; numeric zero means Google confirmed zero reviews.", - "example": 3213, - "type": "integer", - "x-nullable": true + "topItems": { + "items": { + "$ref": "#/definitions/doordash.ExploreItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "doordash.FeedResponse": { + "properties": { + "stores": { + "items": { + "$ref": "#/definitions/doordash.FeedStore" + }, + "type": "array" + } + }, + "type": "object" + }, + "doordash.FeedStore": { + "properties": { + "averageRating": { + "type": "number" }, - "similarweb": { - "allOf": [ - { - "$ref": "#/definitions/similarweb.SimilarWebResp" - } - ], - "description": "Website traffic profile of the business website from SimilarWeb." + "coverImageUrl": { + "type": "string" }, - "state": { - "description": "State, region or province, named as the country itself names it.", - "example": "California", + "deliveryFee": { "type": "string" }, - "state_code": { - "description": "StateCode and CountyCode are the ISO 3166-2 subdivision codes behind `state` and\n`county` (e.g. US-CA / FR-HDF for a state or region, FR-59 / IT-RM for a county,\ndépartement or province). `state` and `county` deliberately keep each country's\nown administrative vocabulary (\"Regierungsbezirk Köln\", \"Provincia de Madrid\"),\nso these codes are the stable, country-agnostic join key for cross-country\ngrouping or ranking. Filled by reverse geocoding since 2026-09-07; empty for rows\nnot yet resolved.", - "example": "US-CA", + "eta": { "type": "string" }, - "town": { - "description": "Name of the town or neighbourhood the business is in.", - "example": "Fisherman's Wharf", + "name": { "type": "string" }, - "updated_at": { - "description": "Time the record was last updated, in UTC (RFC 3339).", + "priceRange": { "type": "string" }, - "url": { - "description": "Google Maps link to the business.", - "example": "https://www.google.com/maps/place/?q=place_id:ChIJ99URUeOAhYAR0J5ZUxTesDQ", + "ratingCount": { "type": "string" }, - "website": { - "description": "🆕 Website and status", - "example": "https://www.hotelzephyrsf.com/", + "storeId": { "type": "string" }, - "website_status": { - "allOf": [ - { - "$ref": "#/definitions/es.WebsiteStatus" - } - ], - "description": "Result of the last reachability check of the business website." + "tags": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "es.GoogleBusinessDatasetFacetItem": { + "doordash.FilterValue": { "properties": { - "count": { - "description": "Number of businesses with this value.", - "type": "integer" + "displayName": { + "type": "string" }, - "value": { - "description": "Facet value being counted.", + "type": { "type": "string" } }, "type": "object" }, - "es.GoogleBusinessDatasetItem": { + "doordash.MenuItem": { "properties": { - "address": { - "description": "Full street address as shown on Google Maps.", - "example": "250 Beach St, San Francisco, CA 94133", + "description": { "type": "string" }, - "amenities": { - "description": "List of amenities Google Maps shows for the business, for example `Free Wi-Fi`.", - "example": [ - "['Free Wi-Fi'", - " 'Air-conditioned'", - " 'Wi-Fi'", - " 'Parking']" - ], + "name": { + "type": "string" + }, + "price": { + "type": "string" + } + }, + "type": "object" + }, + "doordash.MenuResponse": { + "properties": { + "sections": { "items": { - "type": "string" + "$ref": "#/definitions/doordash.MenuSection" }, "type": "array" }, - "category": { - "description": "Categories Google Maps lists for the business. Labels can be in the local language.", - "example": [ - "[\"hotel\"]" - ], + "storeId": { + "type": "string" + }, + "storeName": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "doordash.MenuSection": { + "properties": { + "items": { "items": { - "type": "string" + "$ref": "#/definitions/doordash.MenuItem" }, "type": "array" }, - "city": { - "description": "Name of the city the business is in.", - "example": "San Francisco", + "name": { + "type": "string" + } + }, + "type": "object" + }, + "doordash.ReviewItem": { + "properties": { + "avatarInitial": { "type": "string" }, - "contact": { - "allOf": [ - { - "$ref": "#/definitions/contact.Contact" - } - ], - "description": "🆕 Contact information" + "avatarUrl": { + "type": "string" }, - "contact_is_updated": { - "description": "Whether the business's contact details have been collected.", - "type": "boolean" + "rating": { + "type": "number" }, - "country": { - "description": "🆕 Geographic hierarchy", - "example": "United States", + "reviewerName": { "type": "string" }, - "county": { - "description": "Administrative area below state level, named as the country itself names it.", - "example": "San Francisco County", + "reviewerReviewsCount": { "type": "string" }, - "county_code": { - "description": "ISO 3166-2 code for the `county` value, for example `FR-59`.", - "example": "FR-59", + "text": { "type": "string" - }, - "created_at": { - "description": "🆕 Timestamps", + } + }, + "type": "object" + }, + "doordash.SearchAddress": { + "properties": { + "city": { "type": "string" }, - "description": { - "description": "Business description shown on Google Maps.", - "example": "A 3-minute walk from Pier 41 in the Fisherman's Wharf district...", + "displayAddress": { "type": "string" }, - "distance_m": { - "description": "Distance from the query point in metres. Set when results are sorted by distance.", + "latitude": { "type": "number" }, - "geo": { - "allOf": [ - { - "$ref": "#/definitions/es.GeoPoint" - } - ], - "description": "Coordinates of the business. Omitted when no map location is available for it." - }, - "geo_is_updated": { - "description": "Whether the country, state, county, city and town fields have been filled in from the coordinates.", - "type": "boolean" + "longitude": { + "type": "number" }, - "id": { - "description": "Unique id of the business record in the dataset.", - "example": "ChIJ99URUeOAhYAR0J5ZUxTesDQ", + "region": { "type": "string" }, - "image": { - "description": "URL of the business's main photo on Google Maps.", - "example": "https://lh5.googleusercontent.com/p/AF1QipP_O55x7gOwR3AaM09CVmzEUude9wMHMPwc--yp", + "street": { "type": "string" + } + }, + "type": "object" + }, + "doordash.SearchFilter": { + "properties": { + "allowedValues": { + "items": { + "$ref": "#/definitions/doordash.FilterValue" + }, + "type": "array" }, - "locations": { - "description": "Place names Google Maps lists with the business, for example `San Francisco`.", - "example": [ - "['San Francisco'", - " 'Los Angeles']" - ], + "defaultValues": { "items": { - "type": "string" + "$ref": "#/definitions/doordash.FilterValue" }, "type": "array" }, - "name": { - "description": "Business name as shown on Google Maps.", - "example": "Hotel Zephyr San Francisco", + "displayName": { "type": "string" }, - "permanently_closed": { - "description": "PermanentlyClosed reports Google's \"Permanently closed\" marker: true when\nGoogle marks the business permanently closed, false when a crawl confirmed it\ndoes not, and null when the business has not been re-crawled since status\ncapture shipped (2026-08-31) — which is most of the dataset. null therefore\nmeans UNKNOWN, never \"open\": a count that treats null as operational is\ncounting an unknown number of dead businesses. Use permanently_closed=false\nto exclude the confirmed-closed ones.", - "example": false, - "type": "boolean", - "x-nullable": true - }, - "phone": { - "description": "Business phone number as listed on Google Maps.", - "example": "14156176565", + "id": { "type": "string" }, - "place_id": { - "description": "Google place id of the business.", - "example": "ChIJ99URUeOAhYAR0J5ZUxTesDQ", + "rangeDirection": { "type": "string" }, - "rating": { - "description": "Rating is the aggregate Google rating (1.0–5.0). It is a pointer so a business\nwith NO aggregate Google rating serializes as `rating: null` rather than a\nmisleading 0 — Google never assigns a 0.x average, so 0 always meant \"unrated\".\nConsumers computing an average must skip nulls; use min_rating>0 to exclude them.", - "example": 4.1, - "type": "number", - "x-nullable": true - }, - "review_count": { - "description": "ReviewCount is the aggregate Google review count. A null value means Google\ndid not return a count; numeric zero means Google confirmed zero reviews.", - "example": 3213, - "type": "integer", - "x-nullable": true - }, - "similarweb": { - "allOf": [ - { - "$ref": "#/definitions/similarweb.SimilarWebResp" - } - ], - "description": "Website traffic profile of the business website from SimilarWeb." + "type": { + "type": "string" + } + }, + "type": "object" + }, + "doordash.SearchFiltersResponse": { + "properties": { + "cuisines": { + "items": { + "$ref": "#/definitions/doordash.Cuisine" + }, + "type": "array" }, - "state": { - "description": "State, region or province, named as the country itself names it.", - "example": "California", + "filters": { + "items": { + "$ref": "#/definitions/doordash.SearchFilter" + }, + "type": "array" + } + }, + "type": "object" + }, + "doordash.SearchItemResult": { + "properties": { + "description": { "type": "string" }, - "state_code": { - "description": "StateCode and CountyCode are the ISO 3166-2 subdivision codes behind `state` and\n`county` (e.g. US-CA / FR-HDF for a state or region, FR-59 / IT-RM for a county,\ndépartement or province). `state` and `county` deliberately keep each country's\nown administrative vocabulary (\"Regierungsbezirk Köln\", \"Provincia de Madrid\"),\nso these codes are the stable, country-agnostic join key for cross-country\ngrouping or ranking. Filled by reverse geocoding since 2026-09-07; empty for rows\nnot yet resolved.", - "example": "US-CA", + "distance": { "type": "string" }, - "town": { - "description": "Name of the town or neighbourhood the business is in.", - "example": "Fisherman's Wharf", + "itemId": { "type": "string" }, - "updated_at": { - "description": "Time the record was last updated, in UTC (RFC 3339).", + "name": { "type": "string" }, - "url": { - "description": "Google Maps link to the business.", - "example": "https://www.google.com/maps/place/?q=place_id:ChIJ99URUeOAhYAR0J5ZUxTesDQ", + "price": { "type": "string" }, - "website": { - "description": "🆕 Website and status", - "example": "https://www.hotelzephyrsf.com/", + "storeId": { "type": "string" }, - "website_status": { - "allOf": [ - { - "$ref": "#/definitions/es.WebsiteStatus" - } - ], - "description": "Result of the last reachability check of the business website." + "storeName": { + "type": "string" } }, "type": "object" }, - "es.HousingMarketDatasetFacetItem": { + "doordash.SearchItemsResponse": { "properties": { - "count": { - "type": "integer" + "query": { + "type": "string" }, - "value": { + "results": { + "items": { + "$ref": "#/definitions/doordash.SearchItemResult" + }, + "type": "array" + } + }, + "type": "object" + }, + "doordash.SearchResponse": { + "properties": { + "query": { "type": "string" + }, + "results": { + "items": { + "$ref": "#/definitions/doordash.SearchResult" + }, + "type": "array" } }, "type": "object" }, - "es.HousingMarketRecord": { + "doordash.SearchResult": { "properties": { - "affordability_gap": { - "type": "integer" + "address": { + "$ref": "#/definitions/doordash.SearchAddress" }, - "avg_sale_to_list": { - "type": "number" + "asapAvailable": { + "type": "boolean" }, - "city": { + "coverImageUrl": { "type": "string" }, - "homes_sold": { - "type": "integer" + "dashPassEligible": { + "type": "boolean" }, - "income_geo_id": { + "distance": { "type": "string" }, - "income_vintage": { + "name": { "type": "string" }, - "inventory": { - "type": "integer" - }, - "is_latest": { - "description": "IsLatest is true only on the most recent period per\n(region_type_id, table_id, property_type_id); the loader maintains it.", + "pickupAvailable": { "type": "boolean" }, - "last_updated": { + "squareImageUrl": { "type": "string" }, - "list_price_to_income": { - "type": "number" - }, - "loaded_at": { + "storeId": { "type": "string" }, - "median_dom": { - "type": "number" - }, - "median_household_income": { - "description": "Affordability join (Census ACS 5-year median household income). Present only\nwhere the income geography matched and median_sale_price exists.", - "type": "integer" - }, - "median_list_ppsf": { - "type": "number" - }, - "median_list_ppsf_mom": { - "type": "number" - }, - "median_list_ppsf_yoy": { - "type": "number" - }, - "median_list_price": { - "type": "number" - }, - "median_list_price_mom": { - "type": "number" - }, - "median_list_price_yoy": { - "type": "number" - }, - "median_ppsf": { - "type": "number" + "tags": { + "items": { + "type": "string" + }, + "type": "array" }, - "median_ppsf_mom": { - "type": "number" + "type": { + "type": "string" }, - "median_ppsf_yoy": { - "type": "number" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "doordash.StoreDetail": { + "properties": { + "address": { + "allOf": [ + { + "$ref": "#/definitions/doordash.Address" + } + ], + "description": "Address of the store." }, - "median_sale_price": { + "averageRating": { + "description": "Average customer rating of the store.", "type": "number" }, - "median_sale_price_mom": { - "type": "number" + "images": { + "description": "URLs of store images, such as its logo.", + "items": { + "type": "string" + }, + "type": "array" }, - "median_sale_price_yoy": { + "latitude": { + "description": "Latitude of the store, in decimal degrees.", "type": "number" }, - "months_of_supply": { + "longitude": { + "description": "Longitude of the store, in decimal degrees.", "type": "number" }, - "mortgage_rate_pct": { - "type": "number" + "menuItemCount": { + "description": "Total number of items across all menu sections.", + "type": "integer" }, - "new_listings": { + "menuSectionCount": { + "description": "Number of sections on the store menu.", "type": "integer" }, - "off_market_in_two_weeks": { - "type": "number" + "name": { + "description": "Store name as shown on DoorDash.", + "type": "string" }, - "parent_metro": { + "priceRange": { + "description": "Price range indicator DoorDash shows for the store.", "type": "string" }, - "parent_metro_code": { + "ratingCount": { + "description": "Number of ratings as DoorDash displays it. Not populated by this endpoint.", "type": "string" }, - "pending_sales": { - "type": "integer" + "storeId": { + "description": "DoorDash store id.", + "type": "string" }, - "period_begin": { + "url": { + "description": "URL of the store page on DoorDash.", + "type": "string" + } + }, + "type": "object" + }, + "doordash.StoreFulfillmentResponse": { + "properties": { + "deliverySubtitle": { "type": "string" }, - "period_end": { + "deliveryTitle": { "type": "string" }, - "price_drops": { - "type": "number" + "fulfillmentMethod": { + "type": "string" }, - "price_to_income": { - "type": "number" + "isFreeDelivery": { + "type": "boolean" }, - "property_type": { + "offeredFulfillmentMethods": { + "items": { + "type": "string" + }, + "type": "array" + }, + "scheduleDescription": { "type": "string" }, - "property_type_id": { - "type": "integer" + "storeId": { + "type": "string" }, - "region": { + "storeName": { "type": "string" }, - "region_type": { - "description": "RegionType is the normalized region level: national, metro, county, city, zip.", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "doordash.StoreInfoResponse": { + "properties": { + "address": { + "description": "Full address of the store on one line.", "type": "string" }, - "region_type_id": { - "type": "integer" + "businessName": { + "description": "Business name shown on the store's info card.", + "type": "string" }, - "run_id": { + "cityRegion": { + "description": "City and state or region line of the address, such as `San Francisco, CA`.", "type": "string" }, - "salary_to_buy": { - "type": "integer" + "hasPhone": { + "description": "Whether DoorDash lists a phone number for the store.", + "type": "boolean" }, - "schema_version": { - "type": "integer" + "hasWebsite": { + "description": "Whether DoorDash lists a website for the store.", + "type": "boolean" }, - "sold_above_list": { + "latitude": { + "description": "Latitude of the store, in decimal degrees.", "type": "number" }, - "source": { - "type": "string" + "longitude": { + "description": "Longitude of the store, in decimal degrees.", + "type": "number" }, - "state": { + "phone": { + "description": "Store phone number as DoorDash lists it, such as `4157518000`.", "type": "string" }, - "state_code": { + "storeId": { + "description": "DoorDash store id that was requested.", "type": "string" }, - "table_id": { - "type": "integer" - }, - "zip_code": { - "description": "ZipCode is set on zip rows only, parsed from REGION (\"Zip Code: 60616\").", + "street": { + "description": "Street line of the store address.", "type": "string" - } - }, - "type": "object" - }, - "es.InstagramUserDatasetFacetItem": { - "properties": { - "count": { - "description": "Number of users with this value.", - "type": "integer" }, - "value": { - "description": "Facet value being counted.", + "url": { + "description": "URL of the store page on DoorDash.", "type": "string" } }, "type": "object" }, - "es.InstagramUserDatasetItem": { + "doordash.StoreItemResponse": { "properties": { - "avatar_url": { + "description": { "type": "string" }, - "biography": { + "itemId": { "type": "string" }, - "category_name": { + "name": { "type": "string" }, - "crawled_at": { + "price": { "type": "string" }, - "created_at": { + "storeId": { "type": "string" }, - "external_url": { + "url": { "type": "string" - }, - "follower_following_ratio": { + } + }, + "type": "object" + }, + "doordash.StoreReviewsResponse": { + "properties": { + "averageRating": { "type": "number" }, - "followers": { - "type": "integer" - }, - "following": { - "type": "integer" - }, - "full_name": { + "ratingCount": { "type": "string" }, - "has_bio": { - "type": "boolean" - }, - "has_external_url": { - "type": "boolean" + "reviews": { + "items": { + "$ref": "#/definitions/doordash.ReviewItem" + }, + "type": "array" }, - "id": { + "storeId": { "type": "string" }, - "is_business_account": { - "type": "boolean" - }, - "is_verified": { - "type": "boolean" - }, - "posts": { - "type": "integer" - }, - "schema_version": { - "type": "integer" - }, - "source_tier": { + "storeName": { "type": "string" }, - "username": { + "url": { "type": "string" } }, "type": "object" }, - "es.InstagramUserRecord": { + "doordash.exploreResponseDoc": { "properties": { - "avatar_url": { - "type": "string" - }, - "biography": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "category_name": { - "type": "string" + "data": { + "$ref": "#/definitions/doordash.ExploreResponse" }, - "crawled_at": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "doordash.feedResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "created_at": { - "type": "string" + "data": { + "$ref": "#/definitions/doordash.FeedResponse" }, - "external_url": { + "msg": { + "example": "OK", "type": "string" - }, - "follower_following_ratio": { - "type": "number" - }, - "followers": { + } + }, + "type": "object" + }, + "doordash.menuResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "following": { - "type": "integer" + "data": { + "$ref": "#/definitions/doordash.MenuResponse" }, - "full_name": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "doordash.searchFiltersResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "has_bio": { - "type": "boolean" - }, - "has_external_url": { - "type": "boolean" + "data": { + "$ref": "#/definitions/doordash.SearchFiltersResponse" }, - "id": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "doordash.searchItemsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "is_business_account": { - "type": "boolean" - }, - "is_verified": { - "type": "boolean" + "data": { + "$ref": "#/definitions/doordash.SearchItemsResponse" }, - "posts": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "doordash.searchResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "schema_version": { - "type": "integer" + "data": { + "$ref": "#/definitions/doordash.SearchResponse" }, - "source_tier": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "doordash.storeFulfillmentResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "username": { + "data": { + "$ref": "#/definitions/doordash.StoreFulfillmentResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "es.JobPostingFacets": { + "doordash.storeInfoResponseDoc": { "properties": { - "by_ai_tool": { - "description": "ByAITool counts canonical AI tool and platform names mentioned in open\njob postings.", - "items": { - "$ref": "#/definitions/es.FacetItem" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "by_benefit": { - "description": "ByBenefit, BySecurityClearance, and ByEducationLevel count canonical\nrequirements and offerings mentioned in open job postings.", - "items": { - "$ref": "#/definitions/es.FacetItem" - }, - "type": "array" + "data": { + "$ref": "#/definitions/doordash.StoreInfoResponse" }, - "by_department": { - "description": "Open posting counts by department.", - "items": { - "$ref": "#/definitions/es.FacetItem" - }, - "type": "array" - }, - "by_education_level": { - "description": "Open posting counts by education level mentioned in the posting.", - "items": { - "$ref": "#/definitions/es.FacetItem" - }, - "type": "array" - }, - "by_employment_type": { - "description": "Open posting counts by employment type, for example `Full-time`.", - "items": { - "$ref": "#/definitions/es.FacetItem" - }, - "type": "array" - }, - "by_job_family": { - "description": "ByJobFamily counts conservative ESCO/ISCO occupation-family\nclassifications; postings without sufficient evidence are omitted.", - "items": { - "$ref": "#/definitions/es.FacetItem" - }, - "type": "array" - }, - "by_location": { - "description": "Open posting counts by location.", - "items": { - "$ref": "#/definitions/es.FacetItem" - }, - "type": "array" - }, - "by_provider": { - "description": "Open posting counts by job source.", - "items": { - "$ref": "#/definitions/es.FacetItem" - }, - "type": "array" - }, - "by_security_clearance": { - "description": "Open posting counts by security clearance level mentioned in the posting.", - "items": { - "$ref": "#/definitions/es.FacetItem" - }, - "type": "array" - }, - "by_seniority": { - "description": "BySeniority counts the mutually exclusive entry/mid/senior\nclassification over open postings.", - "items": { - "$ref": "#/definitions/es.FacetItem" - }, - "type": "array" - }, - "by_skill": { - "description": "BySkill counts canonical ESCO skill labels mentioned in open job\npostings.", - "items": { - "$ref": "#/definitions/es.FacetItem" - }, - "type": "array" - }, - "remote_open": { - "description": "Number of open postings marked remote.", - "type": "integer" - }, - "top_companies": { - "description": "Companies with the most open postings, with the posting count for each.", - "items": { - "$ref": "#/definitions/es.FacetItem" - }, - "type": "array" - }, - "total_open": { - "description": "Total number of open postings.", - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "es.JournalistRecord": { + "doordash.storeItemResponseDoc": { "properties": { - "bio": { - "type": "string" - }, - "contact_email": { - "type": "string" - }, - "contact_source_url": { - "type": "string" - }, - "contact_type": { - "description": "email | social | none", - "type": "string" - }, - "crawled_at": { - "description": "RFC3339", - "type": "string" - }, - "email_domain": { - "type": "string" - }, - "email_kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "normalized_name": { - "type": "string" - }, - "outlet": { - "type": "string" - }, - "outlet_domain": { - "type": "string" - }, - "outlet_id": { - "type": "string" - }, - "outreach_quality_version": { - "type": "integer" - }, - "outreach_readiness_band": { - "type": "string" - }, - "outreach_readiness_reasons": { - "items": { - "type": "string" - }, - "type": "array" - }, - "outreach_readiness_score": { + "code": { + "example": 200, "type": "integer" }, - "profile_url": { - "type": "string" - }, - "record_type": { - "type": "string" - }, - "role_type": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "social_links": { - "additionalProperties": { - "type": "string" - }, - "type": "object" - }, - "title": { - "type": "string" - }, - "topics": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/doordash.StoreItemResponse" }, - "vertical": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "es.JournalistsFacetItem": { + "doordash.storeResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "value": { + "data": { + "$ref": "#/definitions/doordash.StoreDetail" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "es.LlmsCrawlerStance": { + "doordash.storeReviewsResponseDoc": { "properties": { - "explicit": { - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "stance": { + "data": { + "$ref": "#/definitions/doordash.StoreReviewsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "es.LlmsDatasetFacetItem": { + "dramabox.AppTagRef": { "properties": { - "count": { + "id": { "type": "integer" }, - "value": { + "name": { "type": "string" } }, "type": "object" }, - "es.LlmsFile": { + "dramabox.AppTitle": { "properties": { - "body": { - "description": "Body is the file content, capped by the worker (BodyTruncated says whether\nit was cut). Only present for a valid file.", - "type": "string" - }, - "body_sha256": { + "cover_url": { "type": "string" }, - "body_truncated": { - "type": "boolean" - }, - "body_withheld": { - "description": "BodyWithheld is set only on the public API, never stored: it names why a\nstored body was not returned (\"injection\").", + "description": { "type": "string" }, - "bots": { - "items": { - "type": "string" - }, - "type": "array" - }, - "bytes": { + "episodes": { "type": "integer" }, - "content_type": { + "id": { "type": "string" }, - "ctype_mismatch": { + "in_library": { + "description": "InLibrary is always false for the shared guest session.", "type": "boolean" }, - "external_hosts": { + "play_count": { + "description": "PlayCount is the app's displayed play count where the route carries it.", "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "final_url": { + "protagonist": { + "description": "Protagonist lists the cast names as the app prints them.", "type": "string" }, - "generator": { + "shelf_time": { + "description": "ShelfTime is the app's listing time as printed (\"2026-09-27 16:42:18\").", "type": "string" }, - "has_optional": { - "type": "boolean" - }, - "injection": { - "type": "boolean" - }, - "kind": { - "description": "Kind is the body classification (valid, html, robots, json, ...) for a 200.", - "type": "string" + "shelf_time_ms": { + "description": "ShelfTimeMS is the same listing time as Unix milliseconds.", + "type": "integer" }, - "link_hosts": { + "tag_refs": { + "description": "TagRefs pairs each tag with its id; pass an id to dramabox-tag.", "items": { - "type": "string" + "$ref": "#/definitions/dramabox.AppTagRef" }, "type": "array" }, - "links": { - "type": "integer" - }, - "links_with_note": { - "type": "integer" - }, - "llm_artifact": { - "type": "boolean" - }, - "markdown_links": { - "type": "integer" - }, - "mentions_api": { - "type": "boolean" - }, - "mentions_mcp": { - "type": "boolean" - }, - "mentions_openapi": { - "type": "boolean" - }, - "mentions_sitemap": { - "type": "boolean" - }, - "placeholder": { - "type": "boolean" - }, - "policy": { + "tags": { "items": { "type": "string" }, "type": "array" }, - "sections": { - "type": "integer" - }, - "source_kind": { - "type": "string" - }, - "state": { - "type": "string" - }, - "status": { - "type": "integer" - }, - "summary": { - "type": "string" - }, - "template_key": { - "type": "string" - }, "title": { "type": "string" }, - "valid": { - "type": "boolean" + "url": { + "description": "URL is the public DramaBox website page for the title.", + "type": "string" } }, "type": "object" }, - "es.LlmsRobots": { + "dramabox.Book": { "properties": { - "all_ai_blocked": { - "type": "boolean" - }, - "bytes": { - "type": "integer" - }, - "content_signal": { - "additionalProperties": { - "type": "string" - }, - "type": "object" - }, - "crawl_delay_secs": { - "type": "integer" - }, - "crawlers": { - "additionalProperties": { - "$ref": "#/definitions/es.LlmsCrawlerStance" - }, - "type": "object" - }, - "default_stance": { + "cover_url": { "type": "string" }, - "fetched_at": { + "description": { "type": "string" }, - "groups": { + "episodes": { "type": "integer" }, - "kind": { - "type": "string" - }, - "mentions_ai": { - "type": "boolean" - }, - "mentions_llms_txt": { - "type": "boolean" - }, - "rules": { + "follows": { "type": "integer" }, - "sitemaps": { + "genres": { "items": { - "type": "string" + "$ref": "#/definitions/dramabox.Genre" }, "type": "array" }, - "state": { + "id": { "type": "string" }, - "status": { - "type": "integer" - }, - "train_blocked": { - "type": "integer" - } - }, - "type": "object" - }, - "es.NumbeoCityRecord": { - "properties": { - "city": { + "language": { "type": "string" }, - "city_slug": { + "listed_at": { + "description": "ListedAt is the site's first-listing timestamp as printed\n(\"2026-10-24 10:00:00\"); its time zone is not stated by the site.", "type": "string" }, - "climate_index": { - "type": "number" - }, - "cost_of_living_index": { - "type": "number" - }, - "cost_of_living_plus_rent_index": { + "rating": { "type": "number" }, - "country": { + "status": { + "description": "Status is the site's update label, for example \"Completed\".", "type": "string" }, - "coverage": { - "description": "Coverage lists which of the seven families ranked this entity in the\ncurrent sync run, e.g. [\"cost-of-living\",\"crime\",\"quality-of-life\"].", + "tags": { "items": { "type": "string" }, "type": "array" }, - "crime_index": { - "type": "number" + "title": { + "type": "string" }, - "extra_indices": { - "description": "ExtraIndices carries any upstream ranking column not mapped to a typed\nfield above (future-proofing against Numbeo adding columns).", + "url": { + "type": "string" + }, + "views_display": { + "description": "ViewsDisplay is the view count as the site prints it (\"15.6K\"); it is\nempty where the list does not carry one.", + "type": "string" + } + }, + "type": "object" + }, + "dramabox.BrowseResponse": { + "properties": { + "books": { "items": { - "$ref": "#/definitions/es.NumbeoNamedValue" + "$ref": "#/definitions/dramabox.Book" }, "type": "array" }, - "groceries_index": { - "type": "number" - }, - "health_care_exp_index": { - "type": "number" - }, - "health_care_index": { - "type": "number" - }, - "local_purchasing_power_index": { - "type": "number" - }, - "pollution_exp_index": { - "type": "number" - }, - "pollution_index": { - "type": "number" - }, - "property_affordability_index": { - "type": "number" - }, - "property_gross_rental_yield_city_centre": { - "type": "number" - }, - "property_gross_rental_yield_outside_centre": { - "type": "number" - }, - "property_mortgage_pct_of_income": { - "type": "number" - }, - "property_price_to_income_ratio": { - "type": "number" - }, - "property_price_to_rent_ratio_city_centre": { - "type": "number" - }, - "property_price_to_rent_ratio_outside_centre": { - "type": "number" - }, - "quality_of_life_index": { - "type": "number" - }, - "rent_index": { - "type": "number" - }, - "restaurant_price_index": { - "type": "number" - }, - "safety_index": { - "type": "number" - }, - "schema_version": { + "genre_id": { "type": "integer" }, - "synced_at": { + "genre_name": { "type": "string" }, - "traffic_co2_emission_index": { - "type": "number" - }, - "traffic_index": { - "type": "number" - }, - "traffic_inefficiency_index": { - "type": "number" + "language": { + "type": "string" }, - "traffic_time_exp_index": { - "type": "number" + "page": { + "type": "integer" }, - "traffic_time_index_minutes": { - "type": "number" + "total_pages": { + "type": "integer" } }, "type": "object" }, - "es.NumbeoCountryRecord": { + "dramabox.CategoriesResponse": { "properties": { - "climate_index": { - "type": "number" - }, - "cost_of_living_index": { - "type": "number" - }, - "cost_of_living_plus_rent_index": { - "type": "number" - }, - "country": { - "type": "string" - }, - "coverage": { - "description": "Coverage lists which of the seven families ranked this entity in the\ncurrent sync run, e.g. [\"cost-of-living\",\"crime\",\"quality-of-life\"].", + "groups": { "items": { - "type": "string" + "$ref": "#/definitions/dramabox.CategoryGroup" }, "type": "array" + } + }, + "type": "object" + }, + "dramabox.CategoryBooksResponse": { + "properties": { + "has_more": { + "type": "boolean" }, - "crime_index": { - "type": "number" + "limit": { + "type": "integer" }, - "extra_indices": { - "description": "ExtraIndices carries any upstream ranking column not mapped to a typed\nfield above (future-proofing against Numbeo adding columns).", + "page": { + "type": "integer" + }, + "titles": { "items": { - "$ref": "#/definitions/es.NumbeoNamedValue" + "$ref": "#/definitions/dramabox.AppTitle" }, "type": "array" - }, - "groceries_index": { - "type": "number" - }, - "health_care_exp_index": { - "type": "number" - }, - "health_care_index": { - "type": "number" - }, - "local_purchasing_power_index": { - "type": "number" - }, - "pollution_exp_index": { - "type": "number" - }, - "pollution_index": { - "type": "number" - }, - "property_affordability_index": { - "type": "number" - }, - "property_gross_rental_yield_city_centre": { - "type": "number" - }, - "property_gross_rental_yield_outside_centre": { - "type": "number" - }, - "property_mortgage_pct_of_income": { - "type": "number" - }, - "property_price_to_income_ratio": { - "type": "number" - }, - "property_price_to_rent_ratio_city_centre": { - "type": "number" - }, - "property_price_to_rent_ratio_outside_centre": { - "type": "number" - }, - "quality_of_life_index": { - "type": "number" - }, - "rent_index": { - "type": "number" - }, - "restaurant_price_index": { - "type": "number" - }, - "safety_index": { - "type": "number" - }, - "schema_version": { - "type": "integer" - }, - "synced_at": { - "type": "string" - }, - "traffic_co2_emission_index": { - "type": "number" - }, - "traffic_index": { - "type": "number" - }, - "traffic_inefficiency_index": { - "type": "number" - }, - "traffic_time_exp_index": { - "type": "number" - }, - "traffic_time_index_minutes": { - "type": "number" } }, "type": "object" }, - "es.NumbeoDatasetFacetItem": { + "dramabox.CategoryGroup": { "properties": { - "count": { - "description": "Number of records with this value.", + "key": { + "description": "Key is language, production, dub, genre_1, genre_2 or sort.", + "type": "string" + }, + "options": { + "items": { + "$ref": "#/definitions/dramabox.CategoryOption" + }, + "type": "array" + }, + "row": { + "description": "Row is the genre row index for the two type-4 groups (0 then 1). It is\nzero/omitted for every other group.", "type": "integer" }, - "value": { - "description": "Facet value being counted.", - "type": "string" + "type": { + "description": "Type is the upstream classify type id (1, 6, 2, 4, 4, 5 respectively,\nin the order above).", + "type": "integer" } }, "type": "object" }, - "es.NumbeoNamedValue": { + "dramabox.CategoryOption": { "properties": { "name": { "type": "string" }, "value": { - "type": "number" + "type": "string" } }, "type": "object" }, - "es.PitchbookFAQRecord": { + "dramabox.Channel": { "properties": { - "answer": { - "type": "string" + "id": { + "type": "integer" }, - "question": { + "name": { "type": "string" } }, "type": "object" }, - "es.PitchbookFacetItem": { + "dramabox.ChannelsResponse": { "properties": { - "count": { - "description": "Number of records with this value.", - "type": "integer" - }, - "value": { - "description": "Facet value being counted.", - "type": "string" + "channels": { + "items": { + "$ref": "#/definitions/dramabox.Channel" + }, + "type": "array" } }, "type": "object" }, - "es.PitchbookRecord": { + "dramabox.DramaResponse": { "properties": { - "commitments_count": { - "type": "integer" - }, - "contact": { - "additionalProperties": { + "available_languages": { + "items": { "type": "string" }, - "type": "object" - }, - "contact_title": { - "type": "string" - }, - "content_hash": { - "description": "ContentHash is an internal fingerprint of this record's content,\nexcluding crawl bookkeeping fields, used to detect whether a\nre-crawled profile actually changed since it was last stored.", - "type": "string" + "type": "array" }, - "crawled_at": { + "cover_url": { "type": "string" }, - "crawled_at_ms": { - "type": "integer" - }, "description": { "type": "string" }, - "discovery_source": { - "type": "string" - }, - "employees": { - "type": "integer" - }, - "exits_count": { + "episode_count": { "type": "integer" }, - "faqs": { + "episodes": { "items": { - "$ref": "#/definitions/es.PitchbookFAQRecord" + "$ref": "#/definitions/dramabox.Episode" }, "type": "array" }, - "financing_status": { - "type": "string" + "follows": { + "type": "integer" }, - "formerly_known_as": { + "genres": { "items": { - "type": "string" + "$ref": "#/definitions/dramabox.Genre" }, "type": "array" }, - "fund_size": { + "id": { "type": "string" }, - "fund_status": { + "language": { "type": "string" }, - "fund_strategy": { - "description": "fund", + "listed_at": { "type": "string" }, - "hq_city": { - "type": "string" + "related": { + "items": { + "$ref": "#/definitions/dramabox.Book" + }, + "type": "array" }, - "hq_country": { - "type": "string" + "tags": { + "items": { + "type": "string" + }, + "type": "array" }, - "hq_state": { + "title": { "type": "string" }, - "id": { + "updated_at": { "type": "string" }, - "institution_type": { - "description": "limited partner", + "url": { "type": "string" }, - "investments_count": { + "views": { "type": "integer" - }, - "investor_count": { + } + }, + "type": "object" + }, + "dramabox.Episode": { + "properties": { + "duration_ms": { "type": "integer" }, - "investor_type": { - "description": "investor", - "type": "string" + "free": { + "description": "Free is true for episodes the site unlocks without payment.", + "type": "boolean" }, - "kind": { + "id": { "type": "string" }, - "latest_deal_type": { + "number": { + "description": "Number is the 1-based episode number.", + "type": "integer" + }, + "thumbnail_url": { "type": "string" }, - "managing_firm_name": { + "updated_at": { "type": "string" + } + }, + "type": "object" + }, + "dramabox.Genre": { + "properties": { + "id": { + "type": "integer" }, "name": { "type": "string" - }, - "other_industries": { + } + }, + "type": "object" + }, + "dramabox.GenresResponse": { + "properties": { + "genres": { "items": { - "type": "string" + "$ref": "#/definitions/dramabox.Genre" }, "type": "array" }, - "overview": { - "additionalProperties": { - "type": "string" + "language": { + "type": "string" + } + }, + "type": "object" + }, + "dramabox.HomeResponse": { + "properties": { + "featured": { + "items": { + "$ref": "#/definitions/dramabox.Book" }, - "type": "object" + "type": "array" }, - "ownership_status": { + "language": { "type": "string" }, - "portfolio_count": { - "type": "integer" + "shelves": { + "items": { + "$ref": "#/definitions/dramabox.Shelf" + }, + "type": "array" + } + }, + "type": "object" + }, + "dramabox.MoreResponse": { + "properties": { + "books": { + "items": { + "$ref": "#/definitions/dramabox.Book" + }, + "type": "array" }, - "primary_industry": { + "language": { "type": "string" }, - "run_id": { + "name": { "type": "string" }, - "schema_version": { - "type": "integer" - }, - "seed_rank": { + "page": { "type": "integer" }, - "service_type": { - "description": "advisor", + "position": { "type": "string" }, - "serviced_companies": { + "total_pages": { "type": "integer" + } + }, + "type": "object" + }, + "dramabox.PerformerResponse": { + "properties": { + "avatar": { + "type": "string" }, - "serviced_deals": { + "followed": { + "type": "boolean" + }, + "gender": { "type": "integer" }, - "sitemap_lastmod": { - "type": "string" + "has_more": { + "type": "boolean" }, - "source_url": { + "id": { "type": "string" }, - "status": { - "description": "company", + "limit": { + "type": "integer" + }, + "name": { "type": "string" }, - "tables": { - "items": { - "$ref": "#/definitions/es.PitchbookTableRecord" - }, - "type": "array" + "page": { + "type": "integer" }, - "verticals": { + "titles": { "items": { - "type": "string" + "$ref": "#/definitions/dramabox.AppTitle" }, "type": "array" }, - "vintage_year": { + "video_count": { "type": "integer" - }, - "website": { + } + }, + "type": "object" + }, + "dramabox.RankMeta": { + "properties": { + "hot_code": { "type": "string" }, - "year_founded": { + "sort": { + "type": "integer" + }, + "type": { "type": "integer" } }, "type": "object" }, - "es.PitchbookTableRecord": { + "dramabox.RankResponse": { "properties": { - "columns": { - "items": { - "type": "string" - }, - "type": "array" - }, - "name": { - "type": "string" + "rank_type": { + "description": "RankType echoes the requested tab; 0 means the default tab was used.", + "type": "integer" }, - "row_ids": { - "description": "RowIDs[i][j] is \"/\" when Rows[i][j]'s cell links to another\nPitchBook profile, \"\" otherwise.", + "tabs": { + "description": "Tabs are the ranking tabs the app API offers; pass a tab's type as\nrank_type to read that list.", "items": { - "items": { - "type": "string" - }, - "type": "array" + "$ref": "#/definitions/dramabox.RankTab" }, "type": "array" }, - "rows": { + "titles": { + "description": "Titles holds the ranking list (fixed at 20 titles upstream).", "items": { - "items": { - "type": "string" - }, - "type": "array" + "$ref": "#/definitions/dramabox.RankedTitle" }, "type": "array" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "es.PlaystationGameDatasetFacetItem": { + "dramabox.RankTab": { "properties": { - "count": { - "type": "integer" - }, - "value": { + "name": { "type": "string" + }, + "type": { + "description": "Type is the value to pass as rank_type.", + "type": "integer" } }, "type": "object" }, - "es.PlaystationGameRecord": { + "dramabox.RankedTitle": { "properties": { - "addon_count": { - "description": "Number of add-ons the game has on the PlayStation Store.", - "type": "integer" + "cover_url": { + "type": "string" }, - "base_price_value": { - "description": "List price before any discount, in minor units of `currency` (for example cents).", + "data_from": { + "description": "DataFrom is the app's recommendation-source label.", + "type": "string" + }, + "description": { + "type": "string" + }, + "episodes": { "type": "integer" }, - "classification": { - "description": "Classification is the storeDisplayClassification (FULL_GAME, PREMIUM_EDITION,\nGAME_BUNDLE, ADD_ON_PACK, VIRTUAL_CURRENCY, LEVEL, OTHER, ...).", + "id": { "type": "string" }, - "coming_soon": { - "description": "Whether the product is not yet purchasable and is listed as coming soon.", + "in_library": { + "description": "InLibrary reports whether the title is in the caller's library, which\nfor a guest session is always false.", "type": "boolean" }, - "concept_id": { - "description": "PlayStation Store id shared by all editions and add-ons of the same title.", + "position": { + "description": "Position is the title's ordinal in the ranking (1-based).", + "type": "integer" + }, + "protagonist": { + "description": "Protagonist lists the cast names as the app prints them.", "type": "string" }, - "content_descriptors": { - "description": "Content notices shown with the rating, for example `Blood` or `In-Game Purchases`.", + "rank": { + "$ref": "#/definitions/dramabox.RankMeta" + }, + "shelf_time": { + "description": "ShelfTime is the app's listing time as printed (\"2026-09-27 16:42:18\").", + "type": "string" + }, + "shelf_time_ms": { + "description": "ShelfTimeMS is the same listing time as Unix milliseconds.", + "type": "integer" + }, + "tags": { "items": { "type": "string" }, "type": "array" }, - "content_rating_authority": { - "description": "Organization that issued the age rating, for example `ESRB`.", + "title": { "type": "string" }, - "content_rating_desc": { - "description": "Description text of the age rating.", + "url": { + "description": "URL is the public DramaBox website page for the title.", "type": "string" + } + }, + "type": "object" + }, + "dramabox.RecommendResponse": { + "properties": { + "has_more": { + "type": "boolean" }, - "content_rating_name": { - "description": "Name of the age rating.", - "type": "string" + "page": { + "type": "integer" }, - "crawled_at": { - "description": "Time the product's data was fetched, in UTC (RFC 3339).", + "page_size": { + "description": "PageSize is the upstream page size (the route takes no page-size\nparameter, so callers cannot choose it).", + "type": "integer" + }, + "title": { "type": "string" }, - "currency": { - "description": "ISO currency code that the prices are in.", + "titles": { + "items": { + "$ref": "#/definitions/dramabox.AppTitle" + }, + "type": "array" + } + }, + "type": "object" + }, + "dramabox.SearchPerson": { + "properties": { + "avatar": { + "description": "Avatar is the performer image URL the app serves (jpg); it is catalogue\nartwork, not playable media.", "type": "string" }, - "description": { - "description": "Product description from the PlayStation Store.", + "id": { "type": "string" }, - "discount_end_time": { - "description": "Time the current discount ends, as the PlayStation Store reports it.", + "name": { "type": "string" }, - "discount_pct": { - "description": "Discount off the list price, as a percentage from 0 to 100.", + "videos": { + "description": "Videos is the number of series the performer appears in.", "type": "integer" + } + }, + "type": "object" + }, + "dramabox.SearchResponse": { + "properties": { + "is_more": { + "description": "HasMore is the answer's isMore flag (the app API's totalSize is not\nusable: it answers 0 even when more pages exist).", + "type": "boolean" }, - "discount_text": { - "description": "Discount label shown on the PlayStation Store.", + "keyword": { + "description": "Keyword echoes the normalized keyword that was searched.", "type": "string" }, - "discounted_value": { - "description": "Current price after any discount, in minor units of `currency` (for example cents).", + "limit": { "type": "integer" }, - "edition_count": { - "description": "Number of editions the title has on the PlayStation Store.", + "page": { "type": "integer" }, - "genres": { - "description": "List of genres the PlayStation Store shows for the title.", + "people": { + "description": "People holds the performer rows.", "items": { - "type": "string" + "$ref": "#/definitions/dramabox.SearchPerson" }, "type": "array" }, - "header_image": { - "description": "URL of the header image shown on the store page.", - "type": "string" - }, - "is_addon": { - "description": "Whether the product is an add-on such as DLC or in-game currency, rather than a game or edition.", - "type": "boolean" - }, - "is_free": { - "description": "Whether the product is free.", - "type": "boolean" - }, - "is_tied_to_subscription": { - "description": "Whether the product is included with a subscription such as PlayStation Plus.", - "type": "boolean" - }, - "name": { - "description": "Product name as shown on the PlayStation Store.", - "type": "string" - }, - "np_title_id": { - "description": "PlayStation title id shared by all SKUs of the same title.", - "type": "string" - }, - "platforms": { - "description": "Consoles the product runs on, for example `PS4` or `PS5`.", + "titles": { + "description": "Titles holds the book rows.", "items": { - "type": "string" + "$ref": "#/definitions/dramabox.AppTitle" + }, + "type": "array" + } + }, + "type": "object" + }, + "dramabox.Shelf": { + "properties": { + "books": { + "items": { + "$ref": "#/definitions/dramabox.Book" }, "type": "array" }, - "price_tier": { - "description": "Price band of the current price: `free`, `under_5`, `5_to_10`, `10_to_20`, `20_to_40`, `40_to_60` or `60_plus`.", - "type": "string" + "id": { + "type": "integer" }, - "product_id": { - "description": "PlayStation Store product id of this edition or add-on.", + "name": { "type": "string" }, - "publisher": { - "description": "Name of the book's publisher.", + "position": { + "description": "Position is the dramabox-more position that lists this shelf in full:\ntrending, must-sees or hidden-gems; empty for an unknown shelf.", "type": "string" - }, - "quality_checked_at": { - "description": "Time the record was last repaired, in UTC (RFC 3339). Present only for repaired records.", + } + }, + "type": "object" + }, + "dramabox.SuggestItem": { + "properties": { + "avatar": { + "description": "Avatar is the performer image (jpg) for kind \"actor\".", "type": "string" }, - "quality_reason": { - "description": "Outcome of the last completeness check on the record.", + "cover_url": { + "description": "CoverURL is the book cover image (jpg) for kind \"book\".", "type": "string" }, - "quality_state": { - "description": "Quality* records the terminal/backfill state without changing the last\nknown crawl snapshot. It is populated only for the targeted repair flow.", + "id": { "type": "string" }, - "region": { - "description": "Region is the store country code the record was crawled from (selects currency).", + "kind": { "type": "string" }, - "release_date": { - "description": "Release date as the PlayStation Store reports it.", + "name": { "type": "string" }, - "release_year": { - "description": "Year the title was released.", + "videos": { + "description": "Videos is the performer's series count for kind \"actor\".", "type": "integer" + } + }, + "type": "object" + }, + "dramabox.SuggestResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/dramabox.SuggestItem" + }, + "type": "array" }, - "run_id": { - "description": "Identifier of the collection run that produced this record. Accepted as a `run_id` filter.", + "keyword": { "type": "string" + } + }, + "type": "object" + }, + "dramabox.TagResponse": { + "properties": { + "has_more": { + "type": "boolean" }, - "schema_version": { - "description": "Version of the record layout.", + "limit": { "type": "integer" }, - "seed_rank": { - "description": "Discovery priority of the title; lower values mean it was found earlier.", + "page": { "type": "integer" }, - "service_branding": { - "description": "Subscription service labels shown on the product.", - "items": { - "type": "string" - }, - "type": "array" + "tag_id": { + "type": "integer" }, - "source_url": { - "description": "URL the data was read from.", + "tag_name": { "type": "string" }, - "star_rating_avg": { - "description": "Average user star rating of the title.", - "type": "number" - }, - "star_rating_count": { - "description": "Number of user ratings behind the star rating.", - "type": "integer" + "titles": { + "items": { + "$ref": "#/definitions/dramabox.AppTitle" + }, + "type": "array" } }, "type": "object" }, - "es.PostSound": { + "dramabox.TheaterBanner": { "properties": { - "author": { - "description": "Name of the account or artist credited for the sound.", - "type": "string" - }, - "music_id": { - "description": "TikTok identifier of the sound.", + "image_url": { "type": "string" }, - "original": { - "description": "Original marks TikTok-generated original audio. Titles cannot be used for this:\nTikTok localizes the label (`sonido original`, `оригинальный звук`, …), so a\ntitle match silently reclassifies original audio as a named track.", - "type": "boolean" - }, "title": { - "description": "Title of the sound as TikTok shows it.", "type": "string" }, - "uses": { - "description": "Number of the creator's sampled recent posts that used this sound.", - "type": "integer" + "title_id": { + "type": "string" } }, "type": "object" }, - "es.PostStatsAgg": { + "dramabox.TheaterResponse": { "properties": { - "analyzed_at": { - "description": "Time these post statistics were calculated, in UTC (RFC 3339).", - "type": "string" - }, - "avg_comments": { - "description": "Average comment count per sampled post.", - "type": "integer" - }, - "avg_likes": { - "description": "Average like count per sampled post.", - "type": "integer" - }, - "avg_saves": { - "description": "Average save (bookmark) count per sampled post.", - "type": "integer" - }, - "avg_shares": { - "description": "Average share count per sampled post.", - "type": "integer" + "banners": { + "items": { + "$ref": "#/definitions/dramabox.TheaterBanner" + }, + "type": "array" }, - "avg_video_duration_sec": { - "description": "Average video length of sampled posts, in seconds.", - "type": "number" + "channel": { + "$ref": "#/definitions/dramabox.Channel" }, - "avg_views": { - "description": "Average view count per sampled post.", - "type": "integer" + "has_more": { + "description": "HasMore reports whether the recommendation block has another page.", + "type": "boolean" }, - "best_post_id": { - "description": "TikTok identifier of the most viewed sampled post.", - "type": "string" + "hot_words": { + "items": { + "type": "string" + }, + "type": "array" }, - "best_post_views": { - "description": "View count of the most viewed sampled post.", + "limit": { "type": "integer" }, - "distinct_sounds": { - "description": "DistinctSounds is how many different sounds the sampled posts used. TopSounds\nkeeps only the five most-used, so without this a consumer cannot tell a\ncreator who reuses one sound across the sample from one who used a different\nsound every time — both surface five rows.", + "page": { "type": "integer" }, - "engagement_rate_by_follower": { - "description": "Average over sampled posts of likes, comments and shares divided by the creator's follower count, as a fraction.", - "type": "number" - }, - "engagement_rate_by_view": { - "description": "Likes, comments, shares and saves divided by views across sampled posts, as a fraction (0.05 means 5%).", - "type": "number" - }, - "first_post_at": { - "description": "Time of the oldest sampled post, in UTC (RFC 3339).", + "sections": { + "items": { + "$ref": "#/definitions/dramabox.TheaterSection" + }, + "type": "array" + } + }, + "type": "object" + }, + "dramabox.TheaterSection": { + "properties": { + "style": { "type": "string" }, - "last_post_at": { - "description": "Time of the most recent sampled post, in UTC (RFC 3339).", + "title": { "type": "string" }, - "median_likes": { - "description": "Median like count across sampled posts.", - "type": "integer" - }, - "median_views": { - "description": "Median view count across sampled posts.", - "type": "integer" - }, - "original_sound_ratio": { - "description": "Share of sampled posts that use the creator's own original sound, as a fraction from 0 to 1.", - "type": "number" + "titles": { + "items": { + "$ref": "#/definitions/dramabox.AppTitle" + }, + "type": "array" + } + }, + "type": "object" + }, + "dramabox.TrendingResponse": { + "properties": { + "hot": { + "items": { + "$ref": "#/definitions/dramabox.AppTitle" + }, + "type": "array" }, - "posts_per_week": { - "description": "Average number of posts per week between the oldest and newest sampled post.", - "type": "number" + "new_releases": { + "description": "NewReleases is the app's new-release list.", + "items": { + "$ref": "#/definitions/dramabox.AppTitle" + }, + "type": "array" }, - "sampled_posts": { - "description": "Number of the creator's recent posts included in these figures.", - "type": "integer" + "preset_keyword": { + "description": "PresetKeyword is the word the app pre-fills in its search box.", + "type": "string" }, - "top_hashtags": { - "description": "Most used hashtags across sampled posts, lowercase and without the leading `#`, most used first.", + "rank_tabs": { + "description": "RankTabs are the ranking tabs; a tab's type is a valid rank_type for\ndramabox-rank.", "items": { - "type": "string" + "$ref": "#/definitions/dramabox.RankTab" }, "type": "array" }, - "top_sounds": { - "description": "Most used sounds across sampled posts, most used first.", + "trending": { + "description": "Trending is the app's trending list.", "items": { - "$ref": "#/definitions/es.PostSound" + "$ref": "#/definitions/dramabox.AppTitle" }, "type": "array" - }, - "views_to_follower_ratio": { - "description": "Average views per sampled post divided by the creator's follower count.", - "type": "number" } }, "type": "object" }, - "es.ProductHuntLaunch": { + "dramabox.browseResponseDoc": { "properties": { - "daily_rank": { - "description": "Rank on the Product Hunt daily leaderboard for the launch day.", + "code": { + "example": 200, "type": "integer" }, - "date": { - "description": "Launch date, in YYYY-MM-DD format.", - "type": "string" + "data": { + "$ref": "#/definitions/dramabox.BrowseResponse" }, - "launch_day_score": { - "description": "Score the launch had on its launch day.", + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "dramabox.categoriesResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "launch_number": { - "description": "Sequence number of this launch among the product's Product Hunt launches.", - "type": "integer" + "data": { + "$ref": "#/definitions/dramabox.CategoriesResponse" }, - "monthly_rank": { - "description": "Rank on the Product Hunt monthly leaderboard.", + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "dramabox.categoryBooksResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "post_id": { - "description": "Product Hunt identifier of the launch post.", - "type": "string" + "data": { + "$ref": "#/definitions/dramabox.CategoryBooksResponse" }, - "post_slug": { - "description": "URL slug of the launch post on Product Hunt.", + "msg": { + "example": "OK", "type": "string" - }, - "score": { - "description": "Upvote count of the launch post.", - "type": "integer" - }, - "weekly_rank": { - "description": "Rank on the Product Hunt weekly leaderboard.", - "type": "integer" } }, "type": "object" }, - "es.ProductHuntMaker": { + "dramabox.channelsResponseDoc": { "properties": { - "avatar_url": { - "description": "URL of the maker's profile picture.", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "headline": { - "description": "Short headline from the maker's Product Hunt profile.", - "type": "string" + "data": { + "$ref": "#/definitions/dramabox.ChannelsResponse" }, - "maker_id": { - "description": "Product Hunt identifier of the maker.", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "dramabox.dramaResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "name": { - "description": "Maker's display name.", - "type": "string" + "data": { + "$ref": "#/definitions/dramabox.DramaResponse" }, - "username": { - "description": "Maker's Product Hunt username. Use it with the maker item endpoint.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "es.ProductHuntMakerItem": { + "dramabox.genresResponseDoc": { "properties": { - "avatar_url": { - "description": "URL of the maker's profile picture.", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "best_product": { - "allOf": [ - { - "$ref": "#/definitions/es.ProductHuntMakerProduct" - } - ], - "description": "The maker's product with the highest upvote count." + "data": { + "$ref": "#/definitions/dramabox.GenresResponse" }, - "first_launch_date": { - "description": "Date of the maker's earliest product launch, in YYYY-MM-DD format.", + "msg": { + "example": "OK", "type": "string" - }, - "followers_count": { - "description": "Number of Product Hunt users following the maker.", + } + }, + "type": "object" + }, + "dramabox.homeResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "headline": { - "description": "Short headline from the maker's Product Hunt profile.", - "type": "string" + "data": { + "$ref": "#/definitions/dramabox.HomeResponse" }, - "latest_launch_date": { - "description": "Date of the maker's most recent product launch, in YYYY-MM-DD format.", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "dramabox.moreResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "made_products": { - "description": "Products the maker is credited with on Product Hunt.", - "items": { - "$ref": "#/definitions/es.ProductHuntMakerProduct" - }, - "type": "array" - }, - "maker_id": { - "description": "Product Hunt identifier of the maker.", - "type": "string" + "data": { + "$ref": "#/definitions/dramabox.MoreResponse" }, - "name": { - "description": "Maker's display name.", + "msg": { + "example": "OK", "type": "string" - }, - "product_count": { - "description": "Number of products the maker is credited with.", + } + }, + "type": "object" + }, + "dramabox.performerResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "topics": { - "description": "Slugs of the topics the maker's products are filed under.", - "items": { - "type": "string" - }, - "type": "array" - }, - "total_votes": { - "description": "Total upvotes across the maker's products.", - "type": "integer" + "data": { + "$ref": "#/definitions/dramabox.PerformerResponse" }, - "username": { - "description": "Maker's Product Hunt username. Use it with the maker item endpoint.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "es.ProductHuntMakerProduct": { + "dramabox.rankResponseDoc": { "properties": { - "latest_score": { - "description": "Current upvote count of the product.", + "code": { + "example": 200, "type": "integer" }, - "name": { - "description": "Product name as shown on Product Hunt.", - "type": "string" - }, - "product_id": { - "description": "Product Hunt identifier of the product.", - "type": "string" + "data": { + "$ref": "#/definitions/dramabox.RankResponse" }, - "slug": { - "description": "URL slug of the product on Product Hunt.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "es.ProductHuntMakersFacetItem": { + "dramabox.recommendResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "value": { + "data": { + "$ref": "#/definitions/dramabox.RecommendResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "es.ProductHuntProductItem": { + "dramabox.searchResponseDoc": { "properties": { - "best_daily_rank": { - "description": "Best position the product reached on a Product Hunt daily leaderboard.", - "type": "integer" - }, - "best_monthly_rank": { - "description": "Best position the product reached on a Product Hunt monthly leaderboard.", + "code": { + "example": 200, "type": "integer" }, - "best_weekly_rank": { - "description": "Best position the product reached on a Product Hunt weekly leaderboard.", - "type": "integer" + "data": { + "$ref": "#/definitions/dramabox.SearchResponse" }, - "comments_count": { - "description": "Number of comments on the product's Product Hunt page.", + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "dramabox.suggestResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "description": { - "description": "Product description as the maker wrote it on Product Hunt.", - "type": "string" + "data": { + "$ref": "#/definitions/dramabox.SuggestResponse" }, - "first_launch_date": { - "description": "Date of the product's earliest launch, in YYYY-MM-DD format.", + "msg": { + "example": "OK", "type": "string" - }, - "followers_count": { - "description": "Number of Product Hunt users following the product.", + } + }, + "type": "object" + }, + "dramabox.tagResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "is_no_longer_online": { - "description": "Whether Product Hunt marks the product as no longer online.", - "type": "boolean" - }, - "is_top_product": { - "description": "Whether Product Hunt flags the product as a top product.", - "type": "boolean" + "data": { + "$ref": "#/definitions/dramabox.TagResponse" }, - "latest_launch_date": { - "description": "Date of the product's most recent launch, in YYYY-MM-DD format.", + "msg": { + "example": "OK", "type": "string" - }, - "latest_score": { - "description": "Current upvote count of the product.", + } + }, + "type": "object" + }, + "dramabox.theaterResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "launch_count": { - "description": "Number of times the product has launched on Product Hunt.", - "type": "integer" + "data": { + "$ref": "#/definitions/dramabox.TheaterResponse" }, - "launch_year": { - "description": "Year of the product's first launch.", + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "dramabox.trendingResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "launches": { - "description": "Each launch of the product on Product Hunt, with its date, ranks and score.", - "items": { - "$ref": "#/definitions/es.ProductHuntLaunch" - }, - "type": "array" + "data": { + "$ref": "#/definitions/dramabox.TrendingResponse" }, - "logo_uuid": { - "description": "Identifier of the product logo image on Product Hunt.", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "duckduckgo.ImageResponse": { + "properties": { + "pagination": { + "$ref": "#/definitions/duckduckgo.SearchPagination" }, - "makers": { - "description": "People credited as makers of the product.", + "query": { + "example": "openai", + "type": "string" + }, + "results": { "items": { - "$ref": "#/definitions/es.ProductHuntMaker" + "$ref": "#/definitions/duckduckgo.ImageResult" }, "type": "array" + } + }, + "type": "object" + }, + "duckduckgo.ImageResult": { + "properties": { + "height": { + "example": 800, + "type": "integer" }, - "name": { - "description": "Product name as shown on Product Hunt.", + "hostname": { + "example": "example.com", "type": "string" }, - "pricing_type": { - "description": "Pricing model of the product, such as `free`, `paid` or `freemium`.", + "image_url": { + "example": "https://example.com/openai-logo.jpg", "type": "string" }, - "primary_topic": { - "description": "Slug of the product's main topic.", + "position": { + "example": 1, + "type": "integer" + }, + "thumbnail": { + "example": "https://example.com/openai-logo-thumb.jpg", "type": "string" }, - "product_id": { - "description": "Product Hunt identifier of the product.", + "title": { + "example": "OpenAI logo", "type": "string" }, - "product_state": { - "description": "Lifecycle state of the product as Product Hunt reports it.", + "url": { + "example": "https://example.com/openai-logo", "type": "string" }, - "reviews_count": { - "description": "Number of reviews the product has on Product Hunt.", + "width": { + "example": 1200, "type": "integer" + } + }, + "type": "object" + }, + "duckduckgo.NewsResponse": { + "properties": { + "pagination": { + "$ref": "#/definitions/duckduckgo.SearchPagination" }, - "reviews_rating": { - "description": "Average review rating out of 5.", - "type": "number" - }, - "slug": { - "description": "URL slug of the product on Product Hunt. Use it with the product item endpoint.", - "type": "string" - }, - "tagline": { - "description": "One-line tagline of the product.", + "query": { + "example": "openai", "type": "string" }, - "topic_slugs": { - "description": "Slugs of all topics the product is filed under.", + "results": { "items": { - "type": "string" + "$ref": "#/definitions/duckduckgo.NewsResult" }, "type": "array" + } + }, + "type": "object" + }, + "duckduckgo.NewsResult": { + "properties": { + "excerpt": { + "example": "OpenAI today announced...", + "type": "string" }, - "topics": { - "description": "Topics the product is filed under.", - "items": { - "$ref": "#/definitions/es.ProductHuntTopic" - }, - "type": "array" + "position": { + "example": 1, + "type": "integer" }, - "twitter_url": { - "description": "URL of the product's X (Twitter) profile.", + "published_at": { + "example": 1721418540, + "type": "integer" + }, + "relative_time": { + "example": "2 hours ago", "type": "string" }, - "url": { - "description": "URL of the product's page on Product Hunt.", + "source": { + "example": "TechCrunch", "type": "string" }, - "website": { - "description": "URL of the product's own website.", + "thumbnail": { + "example": "https://example.com/thumb.jpg", "type": "string" }, - "won_daily": { - "description": "Whether the product ranked first on a Product Hunt daily leaderboard.", - "type": "boolean" + "title": { + "example": "OpenAI announces new model", + "type": "string" + }, + "url": { + "example": "https://example.com/openai-announces-new-model", + "type": "string" } }, "type": "object" }, - "es.ProductHuntProductsFacetItem": { + "duckduckgo.SearchPagination": { "properties": { - "count": { - "description": "Number of products in this bucket.", + "next_page": { + "example": 2, "type": "integer" }, - "value": { - "description": "Bucket value, such as a topic slug, a four-digit launch year, a pricing type or a product state.", - "type": "string" + "page": { + "example": 1, + "type": "integer" } }, "type": "object" }, - "es.ProductHuntTopic": { + "duckduckgo.SearchResponse": { "properties": { - "id": { - "description": "Product Hunt identifier of the topic.", - "type": "string" + "pagination": { + "$ref": "#/definitions/duckduckgo.SearchPagination" }, - "name": { - "description": "Topic name as Product Hunt shows it.", + "query": { + "example": "openai", "type": "string" }, - "slug": { - "description": "URL slug of the topic on Product Hunt.", - "type": "string" + "results": { + "items": { + "$ref": "#/definitions/duckduckgo.SearchResult" + }, + "type": "array" } }, "type": "object" }, - "es.ProductHuntTrendCell": { + "duckduckgo.SearchResult": { "properties": { - "avg_rating": { - "description": "Average review rating out of 5 across the cell's launches. Omitted when too few launches have ratings.", - "type": "number" + "description": { + "example": "OpenAI is an AI research and deployment company. Our mission is to ensure that artificial general intelligence benefits all of humanity.", + "type": "string" }, - "avg_votes": { - "description": "Average upvotes per launched product in the cell.", - "type": "number" + "hostname": { + "example": "openai.com", + "type": "string" }, - "launches": { - "description": "Number of product launches in the cell.", + "position": { + "example": 1, "type": "integer" }, - "period": { - "description": "\"2024-01\" | \"2024\" | \"\" for all-time", + "title": { + "example": "OpenAI | Research & Deployment", "type": "string" }, - "top_product": { - "allOf": [ - { - "$ref": "#/definitions/es.ProductHuntTrendTopProduct" - } - ], - "description": "Product with the most upvotes in the cell." - }, - "topic": { - "description": "Slug of the Product Hunt topic the cell covers.", + "url": { + "example": "https://openai.com/", "type": "string" - }, - "total_votes": { - "description": "Total upvotes across the launches in the cell.", - "type": "integer" } }, "type": "object" }, - "es.ProductHuntTrendTopProduct": { + "duckduckgo.ShoppingPageInfo": { "properties": { - "name": { - "description": "Product name as shown on Product Hunt.", - "type": "string" - }, - "slug": { - "description": "URL slug of the product on Product Hunt.", - "type": "string" + "page": { + "example": 1, + "type": "integer" }, - "votes": { - "description": "Upvote count of the product.", + "total_pages": { + "example": 16, "type": "integer" } }, "type": "object" }, - "es.ProductHuntTrendsFacetItem": { + "duckduckgo.ShoppingResponse": { "properties": { - "count": { - "description": "Number of products in this bucket.", - "type": "integer" + "page_info": { + "$ref": "#/definitions/duckduckgo.ShoppingPageInfo" }, - "value": { - "description": "Bucket value, either a topic slug or a four-digit launch year.", + "query": { + "example": "running shoes", "type": "string" + }, + "results": { + "items": { + "$ref": "#/definitions/duckduckgo.ShoppingResult" + }, + "type": "array" } }, "type": "object" }, - "es.RedditTrendingEntry": { + "duckduckgo.ShoppingResult": { "properties": { - "author": { - "type": "string" - }, - "crawled_at": { + "brand": { + "example": "On", "type": "string" }, - "created_utc": { - "type": "integer" - }, - "domain": { + "description": { + "example": "Lightweight running shoe with CloudTec cushioning.", "type": "string" }, - "permalink": { + "image": { + "example": "https://example.com/shoe.jpg", "type": "string" }, - "post_id": { + "low_price": { + "example": "$119.99", "type": "string" }, - "post_uid": { + "merchant": { + "example": "www.example.com", "type": "string" }, - "rank": { + "position": { + "example": 1, "type": "integer" }, - "snapshot_date": { + "price": { + "example": "$139.99", "type": "string" }, - "subreddit": { - "type": "string" + "rating": { + "example": 4.5, + "type": "number" }, - "title": { - "type": "string" + "review_count": { + "example": 128, + "type": "integer" }, - "url": { + "title": { + "example": "On Running Cloud 6 Sneakers", "type": "string" } }, "type": "object" }, - "es.ScamTrackerReport": { + "duckduckgo.VideoResponse": { "properties": { - "business_name": { - "type": "string" + "pagination": { + "$ref": "#/definitions/duckduckgo.SearchPagination" }, - "country": { + "query": { + "example": "openai", "type": "string" }, - "crawled_at": { + "results": { + "items": { + "$ref": "#/definitions/duckduckgo.VideoResult" + }, + "type": "array" + } + }, + "type": "object" + }, + "duckduckgo.VideoResult": { + "properties": { + "description": { + "example": "An introduction to OpenAI.", "type": "string" }, - "date_reported": { + "duration": { + "example": "5:32", "type": "string" }, - "description": { - "type": "string" + "position": { + "example": 1, + "type": "integer" }, - "discovery_source": { + "published_at": { + "example": "2023-03-01T12:00:00.0000000", "type": "string" }, - "dollars_lost": { + "publisher": { + "example": "YouTube", "type": "string" }, - "loss_amount": { - "type": "number" - }, - "report_id": { + "thumbnail": { + "example": "https://example.com/thumb.jpg", "type": "string" }, - "reported_at": { + "title": { + "example": "What is OpenAI?", "type": "string" }, - "scam_type": { + "uploader": { + "example": "OpenAI", "type": "string" }, - "scammer_email": { + "url": { + "example": "https://www.youtube.com/watch?v=abc123", "type": "string" }, - "scammer_location": { - "type": "string" + "view_count": { + "example": 123456, + "type": "integer" + } + }, + "type": "object" + }, + "duckduckgo.imageResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "scammer_phone": { - "type": "string" + "data": { + "$ref": "#/definitions/duckduckgo.ImageResponse" }, - "scammer_url": { + "msg": { + "example": "OK", "type": "string" - }, - "schema_version": { + } + }, + "type": "object" + }, + "duckduckgo.newsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/duckduckgo.NewsResponse" }, - "state": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "duckduckgo.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "targeted_location": { + "data": { + "$ref": "#/definitions/duckduckgo.SearchResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "es.ScamTrackerReportsFacetItem": { + "duckduckgo.shoppingResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "value": { + "data": { + "$ref": "#/definitions/duckduckgo.ShoppingResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "es.SecCompanyFacetItem": { + "duckduckgo.suggestResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "value": { + "data": { + "$ref": "#/definitions/suggest.Response" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "es.SecCompanyRecord": { + "duckduckgo.videoResponseDoc": { "properties": { - "cik": { - "description": "SEC Central Index Key of the company. Use it with the company item endpoint.", + "code": { + "example": 200, "type": "integer" }, - "cik_padded": { - "description": "CIK zero-padded to 10 digits, usually with a `CIK` prefix, such as `CIK0000320193`.", + "data": { + "$ref": "#/definitions/duckduckgo.VideoResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "dunkin.DirectoryChild": { + "properties": { + "is_store": { + "description": "IsStore marks a child that is a store rather than another directory\nlevel -- call /dunkin/store with its path.", + "example": false, + "type": "boolean" }, - "crawled_at": { - "description": "Time the company record was last collected, in UTC (RFC 3339).", + "name": { + "example": "New York", "type": "string" }, - "entity_type": { - "description": "Entity type EDGAR reports for the filer, such as `operating`.", + "path": { + "example": "ny", "type": "string" }, - "exchange": { - "description": "Stock exchanges the company is listed on, as EDGAR reports them, such as `Nasdaq` or `NYSE`.", - "items": { - "type": "string" - }, - "type": "array" - }, - "filing_count": { - "description": "Number of filings the company has on EDGAR.", + "store_count": { + "description": "StoreCount is how many stores sit under this branch. Absent on the\ndeepest level, where children are stores themselves.", + "example": 390, "type": "integer" }, - "financials_synced_at": { - "description": "Time the financial figures were last updated, in UTC (RFC 3339).", - "type": "string" - }, - "fiscal_year_end": { - "description": "Last day of the company's fiscal year as month and day (MMDD), for example `0928`.", + "url": { "type": "string" - }, - "former_names": { - "description": "Names the company filed under previously.", - "items": { - "type": "string" - }, - "type": "array" - }, - "forms_filed": { - "description": "Distinct SEC form types the company has filed.", + } + }, + "type": "object" + }, + "dunkin.DirectoryResponse": { + "properties": { + "children": { "items": { - "type": "string" + "$ref": "#/definitions/dunkin.DirectoryChild" }, "type": "array" }, - "insider_last_transaction_at": { - "description": "Date of the most recent insider transaction in the last 90 days.", - "type": "string" - }, - "insider_net_shares_90d": { - "description": "Shares insiders acquired minus shares they disposed of over the last 90 days. Negative when more were sold.", - "type": "number" - }, - "insider_txn_count_90d": { - "description": "Number of insider transactions reported over the last 90 days.", - "type": "integer" - }, - "latest_annual_fiscal_year": { - "description": "Fiscal year of the latest annual financial figures.", + "count": { + "example": 58, "type": "integer" }, - "latest_annual_net_income": { - "description": "Net income for the latest fiscal year, in the filer's reporting currency.", - "type": "number" - }, - "latest_annual_net_income_usd": { - "description": "Net income for the latest fiscal year, converted to US dollars at a fixed reference rate.", - "type": "number" - }, - "latest_annual_revenue": { - "description": "Revenue for the latest fiscal year, in the filer's reporting currency.", - "type": "number" - }, - "latest_annual_revenue_usd": { - "description": "Revenue for the latest fiscal year, converted to US dollars at a fixed reference rate.", - "type": "number" - }, - "latest_annual_total_assets": { - "description": "Total assets at the end of the latest fiscal year, in the filer's reporting currency.", - "type": "number" - }, - "latest_annual_total_assets_usd": { - "description": "Total assets at the end of the latest fiscal year, converted to US dollars at a fixed reference rate.", - "type": "number" - }, - "latest_filing_date": { - "description": "Date of the company's most recent filing, in YYYY-MM-DD format.", + "fetched_at": { "type": "string" }, - "latest_quarterly_fiscal_year": { - "description": "Fiscal year of the latest quarterly financial figures.", - "type": "integer" - }, - "latest_quarterly_revenue": { - "description": "Revenue for the latest reported quarter, in the filer's reporting currency.", - "type": "number" - }, "name": { - "description": "Company name as registered with the SEC.", "type": "string" }, - "primary_ticker": { - "description": "Main stock ticker symbol of the company.", + "path": { + "example": "ny", "type": "string" }, - "recent_filings": { - "description": "Most recent filings of the company, newest first.", - "items": { - "$ref": "#/definitions/es.SecFilingSummary" - }, - "type": "array" - }, - "reporting_currency": { - "description": "Native-currency figures are exactly as the filer reported them (see\nReportingCurrency); the *USD fields are the same values converted at fixed\nreference rates so they can be sorted, banded and range-filtered ACROSS\ncurrencies. Screen on the USD fields; display the native value + currency.", + "source_url": { "type": "string" - }, - "revenue_band": { - "description": "Size band of the latest annual revenue in US dollars: `under_1m`, `1m_10m`, `10m_100m`, `100m_1b`, `1b_10b`, `over_10b` or `unknown`.", + } + }, + "type": "object" + }, + "dunkin.MenuItem": { + "properties": { + "description": { + "example": "Freshly brewed and full of flavor, our Iced Coffee is the perfect pick-me-up any time of day or night.", "type": "string" }, - "schema_version": { - "description": "Version of the record format.", - "type": "integer" - }, - "seed_source": { - "description": "Label of the SEC company list this record was first built from.", + "id": { + "example": "5404831120", "type": "string" }, - "sic": { - "description": "Standard Industrial Classification code of the company.", + "name": { + "example": "Original Blend Iced Coffee", "type": "string" }, - "sic_description": { - "description": "Plain-text description of the company's SIC code.", + "photo_url": { "type": "string" - }, - "state_of_incorporation": { - "description": "Code of the state or country where the company is incorporated.", + } + }, + "type": "object" + }, + "dunkin.MenuResponse": { + "properties": { + "fetched_at": { "type": "string" }, - "submissions_synced_at": { - "description": "Time the filing history was last updated, in UTC (RFC 3339).", + "item_count": { + "example": 73, + "type": "integer" + }, + "name": { + "description": "Name is Yext's own name for this menu, e.g. \"Dunkin' Menu\".", + "example": "Dunkin' Menu", "type": "string" }, - "tickers": { - "description": "All stock ticker symbols of the company.", + "sections": { "items": { - "type": "string" + "$ref": "#/definitions/dunkin.MenuSection" }, "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "es.SecFilingSummary": { + "dunkin.MenuSection": { "properties": { - "accession_number": { - "description": "SEC accession number that uniquely identifies the filing.", - "type": "string" - }, - "filing_date": { - "description": "Date the filing was submitted to the SEC, in YYYY-MM-DD format.", + "description": { + "example": "Crisp. Cold. Delicious. Ask to try your favorite beverages served over ice.", "type": "string" }, - "form": { - "description": "SEC form type of the filing, such as `10-K`, `10-Q` or `8-K`.", - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/dunkin.MenuItem" + }, + "type": "array" }, - "primary_doc_url": { - "description": "URL of the filing's main document on SEC.gov.", + "name": { + "example": "Iced Drinks", "type": "string" } }, "type": "object" }, - "es.SecFinancialsHistoryPoint": { + "dunkin.NearbyResponse": { "properties": { - "cik": { - "description": "SEC Central Index Key of the company.", + "count": { + "example": 10, "type": "integer" }, - "currency": { - "description": "Currency the figures are reported in, such as `USD`.", - "type": "string" - }, - "end_date": { - "description": "Last day of the reporting period, in YYYY-MM-DD format.", - "type": "string" - }, - "fiscal_period": { - "description": "e.g. FY, Q1..Q4", + "fetched_at": { "type": "string" }, - "fiscal_year": { - "description": "Fiscal year the period belongs to.", + "radius": { + "example": 25, "type": "integer" }, - "form": { - "description": "SEC form the figures were reported in, such as `10-K`.", - "type": "string" - }, - "lines": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "description": "Financial statement line items for the period, keyed by name such as `revenue` or `net_income`.", - "type": "object" - }, - "period": { - "description": "annual | quarterly", + "source_url": { "type": "string" }, - "ratios": { - "additionalProperties": { - "format": "float64", - "type": "number" + "stores": { + "items": { + "$ref": "#/definitions/dunkin.NearbyStore" }, - "description": "Ratios calculated from the line items, keyed by name such as `gross_margin` or `net_margin`.", - "type": "object" - }, - "statement": { - "description": "income | balance | cash_flow", - "type": "string" + "type": "array" }, - "synced_at": { - "description": "Time this period was last updated, in UTC (RFC 3339).", - "type": "string" + "total_in_radius": { + "description": "TotalInRadius is how many stores fall inside the radius overall, which\nis usually far more than one page. Use it with `offset` to page.", + "example": 754, + "type": "integer" } }, "type": "object" }, - "es.SecInsiderTransactionRecord": { + "dunkin.NearbyStore": { "properties": { - "accession_number": { - "type": "string" + "address": { + "$ref": "#/definitions/dunkin.StoreAddress" }, - "acquired_or_disposed": { - "type": "string" + "amenities": { + "items": { + "type": "string" + }, + "type": "array" }, - "cik": { - "type": "integer" + "closed": { + "example": false, + "type": "boolean" }, - "code": { - "type": "string" + "delivery_platforms": { + "items": { + "type": "string" + }, + "type": "array" }, - "filing_date": { - "type": "string" + "distance_kilometers": { + "example": 0.18, + "type": "number" }, - "filing_url": { - "type": "string" + "distance_miles": { + "description": "DistanceMiles is measured from the requested coordinate.", + "example": 0.11, + "type": "number" }, - "form": { + "faq": { + "description": "FAQ is Yext's own auto-generated per-store question/answer content.", + "items": { + "$ref": "#/definitions/dunkin.StoreFAQ" + }, + "type": "array" + }, + "features": { + "items": { + "type": "string" + }, + "type": "array" + }, + "google_place_id": { "type": "string" }, - "is_director": { - "type": "boolean" + "hours": { + "items": { + "$ref": "#/definitions/dunkin.StoreHours" + }, + "type": "array" }, - "is_officer": { - "type": "boolean" + "latitude": { + "example": 40.712975, + "type": "number" }, - "is_ten_percent_owner": { - "type": "boolean" + "longitude": { + "example": -74.007829, + "type": "number" }, - "owner_name": { + "menu_url": { "type": "string" }, - "owner_title": { + "name": { + "example": "Dunkin'", "type": "string" }, - "price_per_share": { - "type": "number" + "order_url": { + "type": "string" }, - "security_title": { + "path": { + "description": "Path is the store id -- pass it to /dunkin/store to chain directly.", "type": "string" }, - "shares": { - "type": "number" + "payment_options": { + "items": { + "type": "string" + }, + "type": "array" }, - "shares_owned_after": { - "type": "number" + "phone_number": { + "example": "+12127320406", + "type": "string" }, - "synced_at": { + "photos": { + "description": "Photos is this store's photo gallery.", + "items": { + "$ref": "#/definitions/dunkin.StorePhoto" + }, + "type": "array" + }, + "pickup_delivery_services": { + "items": { + "type": "string" + }, + "type": "array" + }, + "store_id": { + "example": "307107", "type": "string" }, - "transaction_date": { + "timezone": { + "example": "America/New_York", + "type": "string" + }, + "website_url": { "type": "string" } }, "type": "object" }, - "es.SecInstitutionalPositionRecord": { + "dunkin.StoreAddress": { "properties": { - "accession_number": { - "description": "SEC accession number of the 13F filing that reported the position.", - "type": "string" - }, - "cusip": { - "description": "CUSIP identifier of the held security.", - "type": "string" - }, - "filing_date": { - "description": "Date the 13F filing was submitted, in YYYY-MM-DD format.", - "type": "string" - }, - "investment_discretion": { - "description": "Investment discretion the manager reports for the position, such as `SOLE`.", + "city": { + "example": "New York", "type": "string" }, - "issuer_name": { - "description": "Name of the company that issued the held security, as the manager reported it.", + "country": { + "example": "US", "type": "string" }, - "manager_cik": { - "description": "SEC Central Index Key of the institutional manager that filed.", - "type": "integer" - }, - "manager_name": { - "description": "Name of the institutional manager that filed.", + "line1": { + "example": "250 Broadway", "type": "string" }, - "put_call": { - "description": "Whether the position is a `Put` or `Call` option. Empty for other positions.", + "line2": { + "example": "Park Pl Between Church & B'Way", "type": "string" }, - "report_date": { - "description": "Quarter-end date the holdings are reported as of, in YYYY-MM-DD format.", + "postal_code": { + "example": "10007", "type": "string" }, - "share_type": { - "description": "Unit of the `shares` figure as reported, such as `SH` for shares.", + "region": { + "example": "NY", "type": "string" - }, - "shares": { - "description": "Quantity held, in the unit given by `share_type`.", - "type": "number" - }, - "synced_at": { - "description": "Time this position was last updated, in UTC (RFC 3339).", + } + }, + "type": "object" + }, + "dunkin.StoreFAQ": { + "properties": { + "answer": { + "example": "Dunkin' is open Monday to Friday from 5:30 AM to 6:00 PM, and on Saturday and Sunday from 6:00 AM to 4:00 PM.", "type": "string" }, - "title_of_class": { - "description": "Class of the held security as reported, such as `COM`.", + "question": { + "example": "What are the operating hours of Dunkin' at 250 Broadway, New York, NY?", "type": "string" - }, - "value": { - "description": "Value of the position as the manager reported it in the 13F filing, in US dollars.", - "type": "number" } }, "type": "object" }, - "es.SecInstitutionalPositionsFacetItem": { + "dunkin.StoreHours": { "properties": { - "count": { - "type": "integer" + "closed": { + "description": "Closed is true when Dunkin publishes the day with no open interval.", + "example": false, + "type": "boolean" }, - "value": { + "closes": { + "example": "18:00", + "type": "string" + }, + "day_of_week": { + "example": "Monday", + "type": "string" + }, + "opens": { + "example": "05:30", "type": "string" } }, "type": "object" }, - "es.StarbucksStoreDatasetFacetItem": { + "dunkin.StorePhoto": { "properties": { - "count": { + "description": { + "example": "Cold Brew Dunkin'", + "type": "string" + }, + "height": { + "example": 571, "type": "integer" }, - "key": { + "url": { + "example": "https://a.mktgcdn.com/p/QcZOFKXgjA12APmvcuFAD3tS2mDRp6fwK3R8kE0O7E0/570x571.png", "type": "string" + }, + "width": { + "example": 570, + "type": "integer" } }, "type": "object" }, - "es.StarbucksStoreDatasetItem": { + "dunkin.StoreResponse": { "properties": { "address": { - "type": "string" + "$ref": "#/definitions/dunkin.StoreAddress" }, "amenities": { + "description": "Amenities are the same class of information as Features, normalized\nout of Yext's dedicated boolean fields rather than the free-text\nlabel list: curbside_pickup, drive_thru, kosher, free_wifi,\nturbo_oven, k_cup_pods.", "items": { "type": "string" }, "type": "array" }, - "amenity_names": { + "closed": { + "description": "Closed is true for a permanently closed location, not an\nafter-hours/overnight closure -- see Hours for that.", + "example": false, + "type": "boolean" + }, + "delivery_platforms": { + "description": "DeliveryPlatforms lists the third-party platforms Dunkin marks active\nfor this store.", "items": { "type": "string" }, "type": "array" }, - "city": { - "type": "string" - }, - "country": { - "type": "string" - }, - "crawled_at": { - "type": "string" + "faq": { + "description": "FAQ is Yext's own auto-generated per-store question/answer content.", + "items": { + "$ref": "#/definitions/dunkin.StoreFAQ" + }, + "type": "array" }, - "distance_meters": { - "type": "number" + "features": { + "description": "Features are Dunkin's own free-text per-store labels\n(ON-THE-GO_MOBILE_ORDERING, FREE_WIFI, K-CUP_PODS, ...).", + "items": { + "type": "string" + }, + "type": "array" }, - "first_seen_at": { + "fetched_at": { "type": "string" }, - "id": { + "google_place_id": { "type": "string" }, - "last_seen_at": { - "type": "string" + "hours": { + "items": { + "$ref": "#/definitions/dunkin.StoreHours" + }, + "type": "array" }, "latitude": { + "example": 40.712975, "type": "number" }, - "location": { - "allOf": [ - { - "$ref": "#/definitions/es.GeoPoint" - } - ], - "description": "Location is a geo_point ([lon, lat] order in the GeoPoint helper)." - }, "longitude": { + "example": -74.007829, "type": "number" }, - "market": { - "description": "Market is crawl provenance (us/ca), not geography -- see the type doc.", - "type": "string" - }, - "mobile_ordering_availability": { + "menu_url": { "type": "string" }, "name": { + "example": "Dunkin'", "type": "string" }, - "ownership_type_code": { + "order_url": { "type": "string" }, - "phone": { + "path": { + "description": "Path is the store id -- pass it back to /dunkin/store.", "type": "string" }, - "pick_up_options": { + "payment_options": { + "description": "PaymentOptions lists the payment methods this store accepts, as\nYext's own enum (AMERICANEXPRESS, APPLEPAY, CASH, VISA, ...).", "items": { "type": "string" }, "type": "array" }, - "postal_code": { + "phone_number": { + "example": "+12127320406", "type": "string" }, - "run_id": { - "type": "string" + "photos": { + "description": "Photos is this store's photo gallery.", + "items": { + "$ref": "#/definitions/dunkin.StorePhoto" + }, + "type": "array" }, - "schema_version": { - "type": "integer" + "pickup_delivery_services": { + "description": "PickupDeliveryServices lists Yext's own service enum for this store\n(CURBSIDE_PICKUP, DELIVERY, DRIVE_THRU, ...), a structured\nalternative to the individual delivery-platform flags below.", + "items": { + "type": "string" + }, + "type": "array" }, - "state": { + "source_url": { "type": "string" }, "store_id": { + "example": "307107", "type": "string" }, - "store_number": { + "website_url": { + "description": "WebsiteURL is this store's live page on dunkindonuts.com.", "type": "string" + } + }, + "type": "object" + }, + "dunkin.directoryResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "time_zone": { - "type": "string" + "data": { + "$ref": "#/definitions/dunkin.DirectoryResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "es.StarbucksStoreRecord": { + "dunkin.menuResponseDoc": { "properties": { - "address": { - "type": "string" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "amenities": { + "data": { + "$ref": "#/definitions/dunkin.MenuResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "dunkin.nearbyResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/dunkin.NearbyResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "dunkin.storeResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/dunkin.StoreResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "dw.AuthorResponse": { + "properties": { + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/dw.HeadlineItem" }, "type": "array" }, - "amenity_names": { + "biography": { "items": { "type": "string" }, "type": "array" }, - "city": { + "expertise": { "type": "string" }, - "country": { + "name": { "type": "string" }, - "crawled_at": { + "url": { "type": "string" - }, - "first_seen_at": { + } + }, + "type": "object" + }, + "dw.HeadlineItem": { + "properties": { + "author": { "type": "string" }, - "id": { + "image_url": { "type": "string" }, - "last_seen_at": { + "published_at": { "type": "string" }, - "latitude": { - "type": "number" - }, - "location": { - "allOf": [ - { - "$ref": "#/definitions/es.GeoPoint" - } - ], - "description": "Location is a geo_point ([lon, lat] order in the GeoPoint helper)." - }, - "longitude": { - "type": "number" + "summary": { + "type": "string" }, - "market": { - "description": "Market is crawl provenance (us/ca), not geography -- see the type doc.", + "title": { "type": "string" }, - "mobile_ordering_availability": { + "type": { "type": "string" }, - "name": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "ebay.Item": { + "properties": { + "availability": { + "description": "Stock status shown on the listing, such as `In Stock`.", + "example": "In Stock", "type": "string" }, - "ownership_type_code": { + "condition": { + "description": "Item condition as listed, such as `Pre-Owned`.", + "example": "Pre-Owned", "type": "string" }, - "phone": { + "description": { + "description": "Seller's description of the item.", "type": "string" }, - "pick_up_options": { + "images": { + "description": "URLs of the listing photos.", "items": { "type": "string" }, "type": "array" }, - "postal_code": { - "type": "string" + "item_feedback_count": { + "description": "Number of buyer feedback entries for this item.", + "example": 80, + "type": "integer" }, - "run_id": { + "item_id": { + "description": "eBay item ID of the listing. Use it with the item endpoint.", + "example": "196435705622", "type": "string" }, - "schema_version": { - "type": "integer" + "item_specifics": { + "additionalProperties": { + "type": "string" + }, + "description": "Item specifics table of the listing, mapping each label to its value.", + "type": "object" }, - "state": { + "link": { + "description": "URL of the listing on eBay.", + "example": "https://www.ebay.com/itm/196435705622", "type": "string" }, - "store_id": { + "location": { + "description": "Item location shown on the listing, such as `Canada`.", + "example": "Canada", "type": "string" }, - "store_number": { - "type": "string" + "price": { + "description": "Item price as a number, in the listing's currency.", + "example": 49.95, + "type": "number" }, - "time_zone": { + "price_text": { + "description": "Price as shown on the listing, such as `US $49.95`.", + "example": "US $49.95", "type": "string" - } - }, - "type": "object" - }, - "es.SteamAchievementRecord": { - "properties": { - "appid": { + }, + "rating": { + "description": "Average product star rating.", + "example": 4.8, + "type": "number" + }, + "rating_count": { + "description": "Number of product ratings.", + "example": 12, "type": "integer" }, - "crawled_at": { + "sale_status": { + "description": "Approximate converted price or bid count shown on the listing, when present.", + "example": "Available", "type": "string" }, - "name": { + "seller_categories": { + "description": "Names of the categories in the seller's store.", + "items": { + "type": "string" + }, + "type": "array" + }, + "seller_description": { + "description": "Seller's own description of their store.", "type": "string" }, - "percent": { - "type": "number" + "seller_detailed_ratings": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "description": "Seller's detailed ratings, mapping each criterion such as `Communication` to its average score.", + "type": "object" }, - "rank": { - "description": "0 = most-unlocked", + "seller_feedback_score": { + "description": "Seller's feedback score.", + "example": 2067, "type": "integer" }, - "schema_version": { + "seller_followers": { + "description": "Number of eBay users following the seller.", + "example": 13000, "type": "integer" - } - }, - "type": "object" - }, - "es.SteamChartEntry": { - "properties": { - "app_id": { - "type": "string" }, - "chart": { - "type": "string" + "seller_items_sold": { + "description": "Number of items the seller has sold.", + "example": 814000, + "type": "integer" }, - "chart_uid": { + "seller_link": { + "description": "URL of the seller's eBay profile.", + "example": "https://www.ebay.com/usr/soonerfan1949", "type": "string" }, - "concurrent_in_game": { - "type": "integer" - }, - "country": { + "seller_logo_url": { + "description": "URL of the seller's store logo.", + "example": "https://i.ebayimg.com/images/g/4yUAAOSwsV9ns4CY/s-l140.jpg", "type": "string" }, - "crawled_at": { + "seller_member_since": { + "description": "When the seller joined eBay, such as `Mar 1998`.", + "example": "Mar 1998", "type": "string" }, - "final_price_cents": { - "type": "integer" + "seller_name": { + "description": "eBay username of the seller.", + "example": "soonerfan1949", + "type": "string" }, - "last_week_rank": { - "type": "integer" + "seller_positive_feedback": { + "description": "Share of the seller's feedback that is positive, as a percentage.", + "example": 100, + "type": "number" }, - "name": { + "seller_store_name": { + "description": "Name of the seller's eBay store.", + "example": "POLOBLADE COLLECTIBLES", "type": "string" }, - "peak_in_game": { - "type": "integer" - }, - "rank": { + "seller_total_feedback_count": { + "description": "Total number of feedback entries the seller has received.", + "example": 291075, "type": "integer" }, - "review_summary": { + "shipping": { + "description": "Shipping cost as shown on the listing, such as `+$4.95 shipping`.", + "example": "+$4.95 shipping", "type": "string" }, - "snapshot_date": { + "title": { + "description": "Listing title as shown on the item page.", + "example": "1983 TOPPS BASEBALL - 1952 TOPPS REPRINTS #311 MICKEY MANTLE", "type": "string" } }, "type": "object" }, - "es.SteamGameDatasetFacetItem": { + "ebay.LiveStream": { "properties": { - "count": { - "type": "integer" + "channels": { + "example": [ + "SHOPLIVE" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "value": { + "description": { + "example": "Brand NEW & Open Box Milwaukee tools, batteries, and bundles!", "type": "string" - } - }, - "type": "object" - }, - "es.SteamGameRecord": { - "properties": { - "achievements_count": { - "description": "Number of achievements the game has on Steam.", - "type": "integer" - }, - "appid": { - "description": "Steam application ID of the game.", - "type": "integer" - }, - "available": { - "description": "Available is false when the storefront returned no appdetails on the most recent\ncrawl (delisted, region-locked, or a fetch miss). The record is kept regardless.", - "type": "boolean" - }, - "average_2weeks_min": { - "description": "Average playtime per owner over the last two weeks, in minutes.", - "type": "integer" - }, - "average_forever_min": { - "description": "Average total playtime per owner, in minutes.", - "type": "integer" }, - "background": { - "description": "URL of the background image on the game's store page.", + "end_time": { "type": "string" }, - "categories": { - "description": "Store categories the game is listed under, such as `Single-player`.", + "hosts": { "items": { - "type": "string" + "$ref": "#/definitions/ebay.LiveStreamHost" }, "type": "array" }, - "ccu": { - "description": "Peak number of concurrent players on the previous day.", - "type": "integer" + "id": { + "example": "qrJnMkM8X2hJuIf3", + "type": "string" }, - "coming_soon": { - "description": "Whether the game is not yet released.", + "is_case_break": { "type": "boolean" }, - "content_descriptor_ids": { - "description": "Steam content descriptor IDs that flag mature content on the game.", - "items": { - "type": "integer" - }, - "type": "array" + "is_user_registered": { + "type": "boolean" }, - "controller_support": { - "description": "Level of controller support Steam lists for the game.", - "type": "string" + "like_count": { + "type": "integer" }, - "crawled_at": { - "description": "Time the record was last collected, in UTC (RFC 3339).", + "live_stream_url": { + "example": "https://live.us.shoplive.cloud/live/45-5WhDlPhrTUvioiwUb-ue2.m3u8", "type": "string" }, - "developer": { - "description": "Main developer of the game.", + "preview_image_url": { + "example": "https://i.ebayimg.com/00/s/MTE4M1g3ODc=/z/840AAeSwE55qZjQL/$_45.JPG", "type": "string" }, - "developers": { - "description": "All developers credited on the store page.", - "items": { - "type": "string" - }, - "type": "array" + "preview_stream_url": { + "type": "string" }, - "discount_pct": { - "description": "Current discount as a percentage, 0 when not on sale.", - "type": "integer" + "start_time": { + "example": "2026-08-09T17:01:30Z", + "type": "string" }, - "dlc_count": { - "description": "Number of DLC items listed for the game.", - "type": "integer" + "state": { + "example": "LIVE", + "type": "string" }, - "genres": { - "description": "Genres the game is listed under, such as `Action` or `Indie`.", + "tags": { + "example": [ + "Outdoor", + "Tools" + ], "items": { "type": "string" }, "type": "array" }, - "has_owner_estimate": { - "description": "HasOwnerEstimate is false for the floor bucket (\"0 .. 20,000\") / no SteamSpy\nestimate — i.e. the deep tail past the owner-differentiated head. Callers must\nnot treat floor-bucket owners as a real count.", - "type": "boolean" - }, - "header_image": { - "description": "URL of the header image on the game's store page.", + "title": { + "example": "Jules' Tools - Milwaukee, DeWALT, Ryobi Power TOOLS!!!", "type": "string" }, - "initial_price_cents": { - "description": "Price before any discount, in cents.", - "type": "integer" - }, - "is_free": { - "description": "Whether the game is free to play or has a price of 0.", - "type": "boolean" - }, - "language_count": { - "description": "Number of languages the game supports.", + "watched_count": { + "example": 196, "type": "integer" - }, - "languages": { - "description": "Languages the game supports.", + } + }, + "type": "object" + }, + "ebay.LiveStreamDetail": { + "properties": { + "channels": { + "example": [ + "SHOPLIVE" + ], "items": { "type": "string" }, "type": "array" }, - "median_2weeks_min": { - "description": "Median playtime per owner over the last two weeks, in minutes.", - "type": "integer" - }, - "median_forever_min": { - "description": "Median total playtime per owner, in minutes.", - "type": "integer" - }, - "metacritic": { - "description": "Metacritic score of the game, from 0 to 100.", + "concurrent_viewer_count": { + "description": "ConcurrentViewerCount is the live viewer count at the time of the\nrequest. Zero for streams that are not currently LIVE.", + "example": 42, "type": "integer" }, - "movie_count": { - "description": "Number of trailers and videos on the store page.", - "type": "integer" + "description": { + "example": "Brand NEW & Open Box Milwaukee tools, batteries, and bundles!", + "type": "string" }, - "name": { - "description": "Game title as shown on Steam.", + "end_time": { "type": "string" }, - "negative": { - "description": "Number of negative user reviews.", - "type": "integer" + "hosts": { + "items": { + "$ref": "#/definitions/ebay.LiveStreamHost" + }, + "type": "array" }, - "owners_bucket": { - "description": "Estimated range of owners as a text label, such as `1,000,000 .. 2,000,000`.", + "id": { + "example": "qrJnMkM8X2hJuIf3", "type": "string" }, - "owners_max": { - "description": "Upper end of the estimated owner range.", - "type": "integer" - }, - "owners_midpoint": { - "description": "Middle of the estimated owner range.", - "type": "integer" + "is_case_break": { + "type": "boolean" }, - "owners_min": { - "description": "Lower end of the estimated owner range.", - "type": "integer" + "is_user_registered": { + "type": "boolean" }, - "package_count": { - "description": "Number of store packages the game is sold in.", + "like_count": { "type": "integer" }, - "platform_linux": { - "description": "Whether the game supports Linux.", - "type": "boolean" - }, - "platform_mac": { - "description": "Whether the game supports macOS.", - "type": "boolean" + "live_stream_url": { + "example": "https://live.us.shoplive.cloud/live/45-5WhDlPhrTUvioiwUb-ue2.m3u8", + "type": "string" }, - "platform_windows": { - "description": "Whether the game supports Windows.", - "type": "boolean" + "preview_image_url": { + "example": "https://i.ebayimg.com/00/s/MTE4M1g3ODc=/z/840AAeSwE55qZjQL/$_45.JPG", + "type": "string" }, - "positive": { - "description": "Number of positive user reviews.", - "type": "integer" + "preview_stream_url": { + "type": "string" }, - "price_cents": { - "description": "Current price, in cents.", - "type": "integer" + "replay_url": { + "type": "string" }, - "price_tier": { - "description": "Price band: `free`, `under5`, `5to15`, `15to30`, `30to60` or `over60`.", + "site_id": { + "example": "0", "type": "string" }, - "primary_tag": { - "description": "Most heavily weighted community tag of the game.", + "start_time": { + "example": "2026-08-09T17:01:30Z", "type": "string" }, - "publisher": { - "description": "Main publisher of the game.", + "state": { + "example": "LIVE", "type": "string" }, - "publishers": { - "description": "All publishers credited on the store page.", + "tags": { + "example": [ + "Outdoor", + "Tools" + ], "items": { "type": "string" }, "type": "array" }, - "recommendations": { - "description": "Number of user recommendations Steam reports for the game.", - "type": "integer" - }, - "release_date": { - "description": "Release date in YYYY-MM-DD format. Empty when Steam gives only a year or quarter.", + "title": { + "example": "Jules' Tools - Milwaukee, DeWALT, Ryobi Power TOOLS!!!", "type": "string" }, - "release_year": { - "description": "Year the game was or will be released.", - "type": "integer" + "vendor_event_id": { + "type": "string" }, - "required_age": { - "description": "Minimum age set on the store page.", + "watched_count": { + "example": 196, "type": "integer" - }, - "review_score": { - "description": "Share of reviews that are positive, from 0 to 1.", + } + }, + "type": "object" + }, + "ebay.LiveStreamHost": { + "properties": { + "communication_rating": { + "example": 4.99, "type": "number" }, - "review_tier": { - "description": "Review band such as `very_positive`, `mixed` or `insufficient`, following Steam's rating labels.", - "type": "string" - }, - "run_id": { - "description": "Identifier of the collection run that produced this record.", - "type": "string" - }, - "schema_version": { - "description": "Version of the record format.", + "feedback_negative_count": { + "example": 18, "type": "integer" }, - "screenshot_count": { - "description": "Number of screenshots on the store page.", + "feedback_neutral_count": { + "example": 15, "type": "integer" }, - "seed_rank": { - "description": "Popularity rank when the game was collected, where 0 is the most popular. Games outside the popularity list carry values of 1,000,000 or more.", + "feedback_positive_count": { + "description": "Feedback* / *Rating fields are only populated by Service.GetLiveStream\n(single-stream detail); Service.ListLiveStreams' hub feed does not\nrequest this data, so these are zero/omitted there. All scores are\nscoped to the seller's last 365 days of feedback.", + "example": 17315, "type": "integer" }, - "short_description": { - "description": "v3 richer-record fields (expanded appFilters). Descriptions/creators/media\ncounts/languages/content flags from the full storefront appdetails set.", - "type": "string" - }, - "tag_ids": { - "description": "Steam IDs of the community tags, in the same order as the tags.", - "items": { - "type": "integer" - }, - "type": "array" + "feedback_positive_percent": { + "example": 99.9, + "type": "number" }, - "tag_schema_version": { - "description": "Version of the community-tag data on this record.", - "type": "integer" + "id": { + "example": "I92-9JgyS0C", + "type": "string" }, - "tags": { - "description": "Tags is the weighted community-tag taxonomy (Roguelike/Metroidvania/Cozy...),\nordered most-weighted first — the crowd tags appdetails genres omit.\nPopulated by a separate tag-enrichment pass, not the main crawl. TagIDs\nis the parallel raw id list; PrimaryTag is Tags[0].", - "items": { - "type": "string" - }, - "type": "array" + "item_as_described_rating": { + "example": 4.95, + "type": "number" }, - "tags_enriched_at": { - "description": "Time the community tags were last added to this record.", + "profile_picture_url": { + "example": "https://i.ebayimg.com/images/g/jGoAAOSwgLdn-B-P/s-l140.webp", "type": "string" }, - "total_reviews": { - "description": "Total number of user reviews, positive plus negative.", - "type": "integer" + "shipping_cost_rating": { + "example": 4.97, + "type": "number" }, - "type": { - "description": "Store item type, such as `game`, `dlc` or `demo`.", + "shipping_time_rating": { + "example": 4.99, + "type": "number" + }, + "store_name": { + "example": "Jules Tools", "type": "string" }, - "website": { - "description": "URL of the game's own website.", + "username": { + "example": "julestools", "type": "string" } }, "type": "object" }, - "es.SteamNewsRecord": { + "ebay.LiveStreamItem": { "properties": { - "appid": { - "type": "integer" - }, - "author": { + "auction_currency": { "type": "string" }, - "contents": { + "auction_ending_at": { "type": "string" }, - "crawled_at": { + "auction_price": { + "type": "number" + }, + "auction_status": { + "description": "Auction* fields reflect the live bidding state and are only meaningful\nfor saleType Auction. AuctionStatus is one of READY (queued, not yet\nstarted), LIVE (actively taking bids), or ENDED.", + "example": "READY", "type": "string" }, - "date": { - "description": "upstream epoch seconds", + "bid_count": { + "example": 22, "type": "integer" }, - "feed_label": { + "currency": { + "example": "USD", "type": "string" }, - "feed_name": { + "end_date": { + "example": "2026-08-09T17:05:26Z", "type": "string" }, - "gid": { + "image_url": { "type": "string" }, - "is_external_url": { + "is_exclusive": { + "description": "IsExclusive/Purchasable reflect eBay Live's own commerce-signal flags\nfor this listing (e.g. whether it can be bought outright vs. only won\nvia the live auction).", "type": "boolean" }, - "published_at": { - "description": "ISO, derived from Date", + "is_visible": { + "type": "boolean" + }, + "leader_username": { "type": "string" }, - "schema_version": { - "type": "integer" + "listing_id": { + "example": "188766881103", + "type": "string" }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" + "pin": { + "type": "boolean" + }, + "price": { + "example": 1, + "type": "number" + }, + "purchasable": { + "type": "boolean" + }, + "sale_type": { + "example": "Auction", + "type": "string" + }, + "status": { + "example": "ACTIVE", + "type": "string" }, "title": { + "example": "#001 - Tool ONLY - Unless Specified! - Watch Auction", "type": "string" }, - "url": { + "winner_username": { "type": "string" } }, "type": "object" }, - "es.SteamPlayerCountRecord": { + "ebay.LiveStreamItemsResp": { "properties": { - "appid": { - "type": "integer" - }, - "crawled_at": { - "type": "string" - }, - "name": { + "event_id": { + "example": "qrJnMkM8X2hJuIf3", "type": "string" }, - "player_count": { - "type": "integer" - }, - "schema_version": { - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/ebay.LiveStreamItem" + }, + "type": "array" }, - "snapshot_date": { + "next_cursor": { + "description": "NextCursor is upstream's own pagination cursor for this listing set.\nCursor-based continuation is not yet exposed as a caller-facing input;\nthis field is surfaced for forward compatibility and informational use.", "type": "string" } }, "type": "object" }, - "es.SteamPriceRecord": { + "ebay.LiveStreamsBatchResp": { "properties": { - "appid": { - "type": "integer" - }, - "crawled_at": { - "type": "string" - }, - "currency": { + "streams": { + "description": "Streams preserves the order returned by upstream, which is not\nguaranteed to match the requested id order. An id that does not\nresolve to a real event is silently omitted -- confirmed live that\nupstream returns 200 with a shorter events array rather than an error\nfor unknown ids, matching the plural-lookup semantics of a batch\nendpoint rather than the single-id GetLiveStream's typed 404.", + "items": { + "$ref": "#/definitions/ebay.LiveStream" + }, + "type": "array" + } + }, + "type": "object" + }, + "ebay.LiveStreamsResp": { + "properties": { + "category": { + "example": "explore", "type": "string" }, - "discount_pct": { - "type": "integer" - }, - "initial_price_cents": { + "next_request_number": { + "description": "NextRequestNumber and SessionID feed back into a follow-up call's\nrequest_number/session_id to fetch the next page.", + "example": 1, "type": "integer" }, - "is_free": { - "type": "boolean" - }, - "name": { + "session_id": { + "example": "12de43d1-1ab2-427b-a447-660797b06a88", "type": "string" }, - "price_cents": { - "type": "integer" - }, - "schema_version": { - "type": "integer" - }, - "snapshot_date": { - "type": "string" + "streams": { + "items": { + "$ref": "#/definitions/ebay.LiveStream" + }, + "type": "array" } }, "type": "object" }, - "es.SteamReviewRecord": { + "ebay.SearchItem": { "properties": { - "appid": { - "type": "integer" - }, - "author_playtime_forever_min": { - "type": "integer" - }, - "comment_count": { + "bid_count": { + "description": "Number of bids on an auction listing.", + "example": 9, "type": "integer" }, - "crawled_at": { + "caption": { + "description": "Caption line shown on the search card.", + "example": "caption", "type": "string" }, - "created_at": { - "description": "ISO, derived", + "image": { + "description": "URL of the listing's thumbnail image.", + "example": "https://i.ebayimg.com/images/g/b6wAAOSwLRdmZeHS/s-l500.jpg", "type": "string" }, - "language": { + "is_authenticity_guaranteed": { + "description": "Whether the listing carries eBay's Authenticity Guarantee.", + "example": false, + "type": "boolean" + }, + "item_id": { + "description": "eBay item ID of the listing. Use it with the item endpoint.", + "example": "196435705622", "type": "string" }, - "playtime_at_review_min": { - "type": "integer" + "link": { + "description": "URL of the listing on eBay.", + "example": "https://www.ebay.com/itm/196435705622", + "type": "string" }, - "received_for_free": { - "type": "boolean" + "location": { + "description": "Item location shown on the search card, such as `Canada`.", + "example": "Canada", + "type": "string" }, - "recommendation_id": { + "logistic": { + "description": "Shipping information shown on the search card, such as `+$4.95 shipping`.", + "example": "+$4.95 shipping", "type": "string" }, - "review": { + "offer_note": { + "description": "Purchase option label shown on the card, such as `Buy It Now`.", + "example": "Buy It Now", "type": "string" }, - "schema_version": { - "type": "integer" + "price": { + "description": "Listing price as a number. Set only when the card shows a single price, not a range.", + "example": 49.95, + "type": "number" }, - "steam_purchase": { - "type": "boolean" + "price_from": { + "description": "$10 to $20", + "example": 10, + "type": "number" }, - "timestamp_created": { - "type": "integer" + "price_to": { + "description": "Upper end of the price when the card shows a price range.", + "example": 20, + "type": "number" }, - "timestamp_updated": { + "rating": { + "description": "Average product star rating.", + "example": 5, + "type": "number" + }, + "rating_num": { + "description": "Number of product ratings.", + "example": 1, "type": "integer" }, - "voted_up": { - "type": "boolean" + "seller": { + "description": "Seller name with feedback count and positive percentage, as shown on the card, such as `soonerfan1949 (998) 100%`.", + "example": "soonerfan1949 (998) 100%", + "type": "string" }, - "votes_funny": { + "sold_count": { + "description": "Number of units sold, as shown on the card.", + "example": 178, "type": "integer" }, - "votes_up": { - "type": "integer" + "sub_title": { + "description": "Subtitle line shown on the card, such as `Pre-Owned`.", + "example": "Pre-Owned", + "type": "string" }, - "weighted_vote_score": { - "type": "number" + "title": { + "description": "Listing title as shown on the search card.", + "example": "1983 TOPPS BASEBALL - 1952 TOPPS REPRINTS #311 MICKEY MANTLE", + "type": "string" }, - "written_during_early_access": { - "type": "boolean" + "watcher_count": { + "description": "Number of users watching the listing.", + "example": 26, + "type": "integer" } }, "type": "object" }, - "es.TechstackDatasetFacetItem": { + "ebay.SearchOption": { "properties": { - "count": { - "description": "Number of sites in this bucket.", + "keyword": { + "description": "keyword to search on Ebay", + "example": "1952 topps baseball mickey mantle #311", + "type": "string" + }, + "limit": { + "description": "Number of items per page", + "enum": [ + 60, + 120, + 240 + ], + "example": 60, "type": "integer" }, - "value": { - "description": "Bucket value, such as a technology name, category, top-level domain or rendering tier.", + "listing_type": { + "description": "Listing type to search", + "enum": [ + "active", + "sold", + "completed", + "sold_completed" + ], + "example": "active", "type": "string" + }, + "page": { + "description": "Page number", + "example": 1, + "type": "integer" } }, + "required": [ + "keyword" + ], "type": "object" }, - "es.TechstackRecord": { + "ebay.SearchResp": { "properties": { - "analytics": { - "description": "Analytics, tag manager and tracking pixel technologies detected on the site.", - "items": { - "type": "string" - }, - "type": "array" + "has_more": { + "description": "Whether more results are available on later pages.", + "example": true, + "type": "boolean" }, - "block_matched": { - "description": "block/challenge marker strings that matched, when FailureReason is a block/challenge classification", - "items": { - "type": "string" - }, - "type": "array" + "page": { + "description": "Page number returned.", + "example": 1, + "type": "integer" }, - "categories": { - "description": "distinct, sorted; category facets", + "result": { + "description": "Listings on this page.", "items": { - "type": "string" + "$ref": "#/definitions/ebay.SearchItem" }, "type": "array" }, - "category": { - "description": "optional seed category (usually empty)", + "total": { + "description": "Total number of results eBay reports for the search.", + "example": 120, + "type": "integer" + } + }, + "type": "object" + }, + "ebay.Seller": { + "properties": { + "description": { + "description": "Seller's description of their store.", + "example": "Vintage sports card seller", "type": "string" }, - "cdn": { - "description": "Main CDN, hosting or platform provider detected on the site.", - "type": "string" + "detailed_seller_ratings": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "description": "Seller's detailed ratings, mapping each criterion such as `Communication` to its average score.", + "type": "object" }, - "cms": { - "description": "single-value rollups (denormalized from Technologies for cheap facets/filters)", + "display_name": { + "description": "Seller's display name on eBay.", + "example": "soonerfan1949", "type": "string" }, - "detector_version": { - "description": "Version of the technology detection rules used for this record.", + "feedback_count": { + "description": "Number of feedback entries the seller has received.", + "example": 2067, + "type": "integer" + }, + "feedback_summary": { + "additionalProperties": { + "format": "int64", + "type": "integer" + }, + "description": "Number of feedback entries by rating type, such as `positive`.", + "type": "object" + }, + "followers": { + "description": "Number of eBay users following the seller.", + "example": 52, + "type": "integer" + }, + "items_sold": { + "description": "Number of items the seller has sold.", + "example": 970, + "type": "integer" + }, + "location": { + "description": "Seller's location as shown on their profile.", + "example": "United States", "type": "string" }, - "domain": { - "description": "identity", + "member_since": { + "description": "When the seller joined eBay, such as `Jan 09, 2000`.", + "example": "Jan 09, 2000", "type": "string" }, - "ecommerce": { - "description": "Ecommerce platform detected on the site.", + "positive_feedback_percent": { + "description": "Share of the seller's feedback that is positive, as a percentage.", + "example": 100, + "type": "number" + }, + "profile_url": { + "description": "URL of the seller's eBay profile.", + "example": "https://www.ebay.com/usr/soonerfan1949", "type": "string" }, - "failure_reason": { - "description": "failure diagnostics: populated whenever a probe attempt didn't fully\npass, even if the site still counts as reachable (e.g. a blocked page\nreturning a non-5xx status). Unset for a fully passing site.", + "seller": { + "description": "eBay username of the seller.", + "example": "soonerfan1949", "type": "string" }, - "final_url": { - "description": "URL that produced the adopted body (after www. fallback / redirects)", + "store_name": { + "description": "Name of the seller's eBay store.", + "example": "Sooner Fan Cards", "type": "string" }, - "has_captcha": { - "description": "Whether a CAPTCHA technology was detected on the site.", - "type": "boolean" + "store_url": { + "description": "URL of the seller's eBay store.", + "example": "https://www.ebay.com/str/example", + "type": "string" + } + }, + "type": "object" + }, + "ebay.SellerAbout": { + "properties": { + "banner_url": { + "description": "URL of the seller's store banner image.", + "example": "https://i.ebayimg.com/images/g/2lEAAOSwR4Bjr23U/s-l1600.png", + "type": "string" }, - "is_infrastructure": { - "description": "IsInfrastructure flags a backend CDN/DNS/cloud-vendor/registry hostname\n(e.g. cloudfront.net, gtld-servers.net) rather than a real,\nhuman-navigable website. Best-effort heuristic: a false negative\n(unflagged) is not proof a domain is a real site.", - "type": "boolean" + "categories": { + "description": "Categories in the seller's store, each with its subcategories.", + "items": { + "$ref": "#/definitions/ebay.SellerAboutCategory" + }, + "type": "array" }, - "method_version": { - "description": "Version of the scan procedure used to collect this record.", + "contact_seller_url": { + "description": "URL of eBay's contact page for the seller.", + "example": "https://contact.ebay.com/ws/eBayISAPI.dll?ShowSellerFAQ&iid=-1&requested=poloblade", "type": "string" }, - "probe_error": { - "description": "raw transport error's first line (e.g. \"context deadline exceeded\", \"no such host\"), when there was one", + "description": { + "description": "Seller's description of their store.", "type": "string" }, - "probed_at": { - "description": "RFC3339 — when last probed", - "type": "string" + "followers": { + "description": "Number of eBay users following the seller.", + "example": 13000, + "type": "integer" }, - "rank": { - "description": "Tranco rank when seeded from the top-1M list", + "items_sold": { + "description": "Number of items the seller has sold.", + "example": 814000, "type": "integer" }, - "reachable": { - "description": "Whether the site answered the probe.", - "type": "boolean" + "location": { + "description": "Seller's location as shown on the About page.", + "example": "United States", + "type": "string" }, - "render_tier": { - "description": "provenance / reproducibility", + "logo_url": { + "description": "URL of the seller's store logo.", + "example": "https://i.ebayimg.com/images/g/4yUAAOSwsV9ns4CY/s-l140.jpg", "type": "string" }, - "run_date": { - "description": "Time the scan run started, in UTC (RFC 3339).", + "member_since": { + "description": "When the seller joined eBay, such as `Jan 09, 2000`.", + "example": "Jan 09, 2000", "type": "string" }, - "run_id": { - "description": "Identifier of the scan run that produced this record.", + "positive_feedback_percent": { + "description": "Share of the seller's feedback that is positive, as a percentage.", + "example": 99.9, + "type": "number" + }, + "seller": { + "description": "eBay username of the seller.", + "example": "poloblade", "type": "string" }, - "scan_method": { - "description": "Method used to scan the site, for example `http_scan`.", + "store_name": { + "description": "Name of the seller's eBay store.", + "example": "POLOBLADE COLLECTIBLES", "type": "string" }, - "schema_version": { - "description": "Version of the record format.", - "type": "integer" + "store_url": { + "description": "URL of the seller's eBay store.", + "example": "https://www.ebay.com/str/poloblade", + "type": "string" }, - "scheme": { - "description": "URL scheme the site was reached with, `https` or `http`.", + "top_rated_seller": { + "description": "Whether the seller holds eBay's Top Rated Seller status.", + "example": true, + "type": "boolean" + }, + "top_rated_seller_summary": { + "description": "Text eBay shows to describe the seller's Top Rated status.", + "type": "string" + } + }, + "type": "object" + }, + "ebay.SellerAboutCategory": { + "properties": { + "name": { + "description": "Category name, such as `Coins & Paper Money`.", + "example": "Coins & Paper Money", "type": "string" }, - "secondary_only_technology_names": { - "description": "technology names detected ONLY via a fetched secondary page, not the homepage alone; a subset of TechnologyNames", + "subcategories": { + "description": "Subcategories listed under this category.", "items": { - "type": "string" + "$ref": "#/definitions/ebay.SellerAboutSubcategory" }, "type": "array" }, - "secondary_page_categories": { - "description": "which categories were successfully fetched and contributed content, sorted (careers|login|blog|status|signup|docs|contact|trust|cart)", - "items": { - "type": "string" - }, - "type": "array" + "url": { + "description": "URL of this category within the seller's store.", + "example": "https://www.ebay.com/str/poloblade/Coins-Paper-Money/_i.html?_sacat=11116", + "type": "string" + } + }, + "type": "object" + }, + "ebay.SellerAboutSubcategory": { + "properties": { + "name": { + "description": "Subcategory name, such as `Coins: US`.", + "example": "Coins: US", + "type": "string" }, - "secondary_pages": { - "description": "full audit trail: every discovered candidate, fetched or not; detail view, stored not indexed", - "items": { - "$ref": "#/definitions/es.TechstackSecondaryPage" + "url": { + "description": "URL of this subcategory within the seller's store.", + "example": "https://www.ebay.com/str/poloblade/Coins-US/_i.html?_sacat=253", + "type": "string" + } + }, + "type": "object" + }, + "ebay.SellerFeedback": { + "properties": { + "description": { + "description": "Seller's description of their store.", + "type": "string" + }, + "detailed_seller_ratings": { + "additionalProperties": { + "format": "float64", + "type": "number" }, - "type": "array" + "description": "Seller's detailed ratings, mapping each criterion such as `Communication` to its average score.", + "type": "object" }, - "secondary_pages_discovered": { - "description": "secondary-page telemetry: populated when the crawl looked for extra\nnon-homepage pages (opt-in per run) and discovered at least one on the\nhomepage nav for this domain. \"Discovered\" and \"fetched\" are\ndeliberately distinct: a candidate can be found on the homepage nav\nbut still fail to fetch (e.g. blocked or timed out) — that failure is\nrecorded in SecondaryPages (Fetched=false), not silently dropped.", + "followers": { + "description": "Number of eBay users following the seller.", + "example": 13000, "type": "integer" }, - "secondary_pages_fetched": { - "description": "count that were ACTUALLY fetched successfully and contributed content; <= SecondaryPagesDiscovered", - "type": "integer" + "has_more": { + "description": "Whether more feedback pages are available.", + "example": true, + "type": "boolean" }, - "seed_source": { - "description": "tranco | internal-harvest", - "type": "string" + "items_sold": { + "description": "Number of items the seller has sold.", + "example": 814000, + "type": "integer" }, - "server_language": { - "description": "Server-side language or web framework detected on the site.", - "type": "string" + "next_page": { + "description": "Page number to request next.", + "example": 2, + "type": "integer" }, - "source_url": { - "description": "the exact seed URL probed", - "type": "string" + "overall_rating_summary": { + "additionalProperties": { + "format": "int64", + "type": "integer" + }, + "description": "Number of feedback entries by rating type, such as `positive`.", + "type": "object" }, - "status": { - "description": "HTTP status code of the last probe attempt.", + "page": { + "description": "Feedback page number returned.", + "example": 1, "type": "integer" }, - "tech_count": { - "description": "Number of distinct technologies detected on the site.", + "per_page": { + "description": "Number of reviews per page.", + "example": 48, "type": "integer" }, - "technologies": { - "description": "detections (the payload)", - "items": { - "$ref": "#/definitions/es.TechstackTechnology" - }, - "type": "array" + "positive_feedback_percent": { + "description": "Share of the seller's feedback that is positive, as a percentage.", + "example": 99.9, + "type": "number" }, - "technology_names": { - "description": "flattened for AND/NOT term filters + facets", + "reviews": { + "description": "Buyer feedback entries on this page.", "items": { - "type": "string" + "$ref": "#/definitions/ebay.SellerReview" }, "type": "array" }, - "tld": { - "description": "Top-level domain of the site, such as `com`.", + "seller": { + "description": "eBay username of the seller.", + "example": "poloblade", "type": "string" }, - "web_server": { - "description": "Web server software detected on the site.", + "store_name": { + "description": "Name of the seller's eBay store.", + "example": "POLOBLADE COLLECTIBLES", + "type": "string" + }, + "store_url": { + "description": "URL of the seller's eBay store.", + "example": "https://www.ebay.com/str/poloblade", "type": "string" + }, + "total_feedback_count": { + "description": "Total number of feedback entries the seller has received.", + "example": 291071, + "type": "integer" } }, "type": "object" }, - "es.TechstackSecondaryPage": { + "ebay.SellerReview": { "properties": { - "category": { - "description": "Kind of page found on the homepage navigation: `careers`, `login`, `blog`, `status`, `signup`, `docs`, `contact`, `trust` or `cart`.", + "buyer": { + "description": "Buyer's username, partly masked, such as `w***n`.", + "example": "w***n", "type": "string" }, - "fetched": { - "description": "Whether the page was loaded successfully. False when it was blocked or timed out.", - "type": "boolean" + "buyer_feedback": { + "description": "Feedback score of the buyer who left the review.", + "example": 3426, + "type": "integer" }, - "url": { - "description": "Address of the page found on the homepage navigation.", + "comment": { + "description": "Feedback comment left by the buyer.", + "type": "string" + }, + "period": { + "description": "When the feedback was left, as eBay words it, such as `Past 6 months`.", + "example": "Past 6 months", + "type": "string" + }, + "rating": { + "description": "Rating the buyer gave: `positive`, `neutral` or `negative`.", + "example": "positive", "type": "string" + }, + "verified_purchase": { + "description": "Whether eBay marks the feedback as coming from a verified purchase.", + "example": true, + "type": "boolean" } }, "type": "object" }, - "es.TechstackTechnology": { + "ebay.itemResponseDoc": { "properties": { - "categories": { - "description": "Categories the technology belongs to, such as `CDN` or `Analytics`.", - "items": { - "type": "string" - }, - "type": "array" - }, - "confidence": { - "description": "How sure the detection is: `high`, `medium` or `low`.", - "type": "string" - }, - "evidence": { - "description": "Signal the technology was recognised from, such as `header: cf-ray`.", - "type": "string" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "name": { - "description": "Technology name, such as `Shopify` or `Cloudflare`.", - "type": "string" + "data": { + "$ref": "#/definitions/ebay.Item" }, - "version": { - "description": "Version of the technology, when the site exposes it.", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "es.TrustmrrDatasetFacetItem": { + "ebay.liveStreamItemsResponseDoc": { "properties": { - "count": { - "description": "Number of startups in this bucket.", + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "value": { - "description": "Bucket value for the requested facet, such as a category name, country or payment provider.", - "type": "string" + "data": { + "$ref": "#/definitions/ebay.LiveStreamItemsResp" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "es.TrustmrrHistoryPoint": { + "ebay.liveStreamResponseDoc": { "properties": { - "asking_price": { - "type": "number" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "date": { - "description": "YYYY-MM-DD in UTC", - "type": "string" + "data": { + "$ref": "#/definitions/ebay.LiveStreamDetail" }, - "deal_score": { - "type": "number" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "ebay.liveStreamsBatchResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "growth_30d": { - "type": "number" + "data": { + "$ref": "#/definitions/ebay.LiveStreamsBatchResp" }, - "mrr": { - "type": "number" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "ebay.liveStreamsResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "multiple": { - "type": "number" + "data": { + "$ref": "#/definitions/ebay.LiveStreamsResp" }, - "offer_count": { + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "ebay.searchResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "on_sale": { - "type": "boolean" + "data": { + "$ref": "#/definitions/ebay.SearchResp" }, - "revenue_30d": { - "type": "number" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "ebay.sellerAboutResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "slug": { - "type": "string" + "data": { + "$ref": "#/definitions/ebay.SellerAbout" }, - "total_revenue": { - "type": "number" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "ebay.sellerFeedbackResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "traffic_12mo": { - "type": "number" + "data": { + "$ref": "#/definitions/ebay.SellerFeedback" }, - "traffic_30d": { - "type": "number" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "es.TrustmrrStartupRecord": { + "ebay.sellerResponseDoc": { "properties": { - "active_subscriptions": { - "description": "Number of active subscriptions the startup has.", + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "ahrefs_domain_rating": { - "description": "Ahrefs Domain Rating of the startup's website.", - "type": "integer" + "data": { + "$ref": "#/definitions/ebay.Seller" }, - "asking_price": { - "description": "Price the seller is asking for the startup, in US dollars. Omitted when TrustMRR shows none.", - "type": "number" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "ebay.sellerShopResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "business_type": { - "description": "Business type of the startup, such as `B2C`.", - "type": "string" + "data": { + "$ref": "#/definitions/ebay.SearchResp" }, - "category": { - "description": "TrustMRR category of the startup, such as `Mobile App`.", + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "economictimes.AuthorArticle": { + "properties": { + "title": { "type": "string" }, - "category_slug": { - "description": "URL slug of the TrustMRR category.", + "url": { "type": "string" + } + }, + "type": "object" + }, + "economictimes.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/economictimes.AuthorArticle" + }, + "type": "array" }, - "channels": { - "description": "Slugs of the marketing channels detected for the startup, such as `meta-ads`.", + "biography": { "items": { "type": "string" }, "type": "array" }, - "country": { - "description": "Country code of the startup, such as `PL`.", - "type": "string" - }, - "customers": { - "description": "Number of customers the startup has.", - "type": "integer" - }, - "deal_score": { - "description": "TrustMRR's recency-aware score for how attractive the startup is as an acquisition.", - "type": "number" - }, - "description": { - "description": "Description of the startup as listed on TrustMRR.", + "image_url": { "type": "string" }, - "estimated_user_count": { - "description": "Estimated number of users of the startup's product.", - "type": "integer" - }, - "first_listed_for_sale_at": { - "description": "Time the startup was first listed for sale (RFC 3339).", + "job_title": { "type": "string" }, - "first_seen": { - "description": "Time the startup first appeared in this dataset (RFC 3339).", + "name": { "type": "string" }, - "founded_date": { - "description": "Date the startup was founded.", - "type": "string" - }, - "funding_status": { - "description": "Funding status of the startup.", + "url": { "type": "string" + } + }, + "type": "object" + }, + "engadget.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/engadget.HeadlineItem" + }, + "type": "array" }, - "growth_30d": { - "description": "Revenue growth over the last 30 days, as a percentage.", - "type": "number" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "growth_mrr_30d": { - "description": "Growth in monthly recurring revenue over the last 30 days.", - "type": "number" + "expertise": { + "items": { + "type": "string" + }, + "type": "array" }, - "has_dofollow_backlink": { - "description": "Whether the startup's site links back to TrustMRR with a dofollow link.", - "type": "boolean" + "highlights": { + "items": { + "type": "string" + }, + "type": "array" }, - "has_google_analytics": { - "description": "Whether the startup has verified Google Analytics.", - "type": "boolean" + "image_url": { + "type": "string" }, - "has_insight_overrides": { - "description": "Whether the seller has replaced TrustMRR's AI-written business summary with their own.", - "type": "boolean" + "location": { + "type": "string" }, - "has_search_console": { - "description": "Whether the startup has verified Google Search Console.", - "type": "boolean" + "name": { + "type": "string" }, - "icon": { - "description": "URL of the startup's icon.", + "school": { "type": "string" }, - "is_merchant_of_record": { - "description": "Whether the startup acts as merchant of record for its payments.", - "type": "boolean" + "slug": { + "type": "string" }, - "is_sponsored": { - "description": "Whether the startup is a sponsored listing on TrustMRR.", - "type": "boolean" + "social_links": { + "items": { + "$ref": "#/definitions/engadget.AuthorSocialLink" + }, + "type": "array" }, - "last_crawled_at": { - "description": "Time the startup's data was last refreshed (RFC 3339).", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "engadget.AuthorSocialLink": { + "properties": { + "platform": { "type": "string" }, - "last_seen": { - "description": "Time the startup was last seen on TrustMRR (RFC 3339).", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "engadget.HeadlineItem": { + "properties": { + "author": { "type": "string" }, - "listing_tier": { - "description": "Tier of the for-sale listing, such as `pro`.", + "image_url": { "type": "string" }, - "looking_for_cofounder": { - "description": "Whether the founder is looking for a cofounder.", - "type": "boolean" + "published_at": { + "type": "string" }, - "merchant_category_code": { - "description": "Merchant category code (MCC) of the startup's payment processor, such as `7372`.", + "summary": { "type": "string" }, - "mrr": { - "description": "Verified monthly recurring revenue, in US dollars.", - "type": "number" + "title": { + "type": "string" }, - "mrr_last_synced_at": { - "description": "Time the monthly recurring revenue figure was last synced (RFC 3339).", + "type": { "type": "string" }, - "multiple": { - "description": "Asking price as a multiple of the startup's revenue.", - "type": "number" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "eonline.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, "name": { - "description": "Startup name as listed on TrustMRR.", "type": "string" }, - "offer_count": { - "description": "Number of offers the for-sale listing has received.", - "type": "integer" - }, - "on_sale": { - "description": "Whether the startup is currently listed for sale.", - "type": "boolean" - }, - "payment_provider": { - "description": "Payment provider the revenue is verified through, such as `revenuecat`.", + "url": { "type": "string" - }, - "pricing_model": { - "description": "Pricing model of the startup's product, as summarised by TrustMRR.", + } + }, + "type": "object" + }, + "es.AirbnbDensityCell": { + "properties": { + "geohash": { + "description": "Geohash string that identifies the grid cell.", "type": "string" }, - "problem_solved": { - "description": "Problem the startup's product solves, as summarised by TrustMRR.", - "type": "string" + "lat": { + "description": "Latitude of the cell centre, in decimal degrees.", + "type": "number" }, - "profit_margin_30d": { - "description": "Profit margin over the last 30 days.", + "listings": { + "description": "Number of listings in the cell.", + "type": "integer" + }, + "lon": { + "description": "Longitude of the cell centre, in decimal degrees.", "type": "number" }, - "revenue_30d": { - "description": "Verified revenue over the last 30 days, in US dollars.", + "superhost_listings": { + "description": "Number of listings in the cell seen with the Superhost badge.", + "type": "integer" + }, + "superhost_pct": { + "description": "Share of listings in the cell seen with the Superhost badge, from 0 to 100.", + "type": "number" + } + }, + "type": "object" + }, + "es.AirbnbDimensionCoverage": { + "properties": { + "coverage_pct": { + "description": "Share of the filtered universe with the dimension, from 0 through 100.", "type": "number" }, - "revenue_last_synced_at": { - "description": "Time the revenue figures were last synced (RFC 3339).", + "covered_listings": { + "description": "Number of filtered listings with the dimension field populated.", + "type": "integer" + }, + "dimension": { + "description": "Dimension whose field coverage was measured (for example room_type).", "type": "string" }, - "revenue_per_visitor_30d": { - "description": "Revenue per site visitor over the last 30 days.", + "meets_threshold": { + "description": "Whether the existing presentation gate permits buckets for this result.", + "type": "boolean" + }, + "minimum_coverage_pct": { + "description": "Minimum coverage share required before buckets are returned.", "type": "number" }, - "schema_version": { - "description": "Version of the record format.", + "total_listings": { + "description": "Number of listings in the filtered universe, including those without the dimension.", "type": "integer" + } + }, + "type": "object" + }, + "es.AirbnbGeoBounds": { + "properties": { + "bottom_right": { + "allOf": [ + { + "$ref": "#/definitions/es.GeoPoint" + } + ], + "description": "South-east corner of the box that encloses the market's listings." }, - "secondary_payment_provider": { - "description": "Second payment provider the revenue is verified through, when there is one.", + "top_left": { + "allOf": [ + { + "$ref": "#/definitions/es.GeoPoint" + } + ], + "description": "North-west corner of the box that encloses the market's listings." + } + }, + "type": "object" + }, + "es.AirbnbHostItem": { + "properties": { + "about": { + "description": "Bio text from the host's profile.", "type": "string" }, - "seller_message": { - "description": "Message the seller wrote on the for-sale listing.", + "fetched_at": { + "description": "When this host's profile was last fetched (RFC 3339).", "type": "string" }, - "slug": { - "description": "URL slug of the startup on TrustMRR. Use it with the item endpoint.", + "first_seen_at": { + "description": "When this host was first added to the dataset (RFC 3339).", "type": "string" }, - "status": { - "description": "Listing status of the startup: `active` or `removed`.", + "host_id": { + "description": "Airbnb host (user) id.", + "example": "65056940", "type": "string" }, - "stealth_mode": { - "description": "Whether the startup is listed in stealth mode.", - "type": "boolean" - }, - "tags": { - "description": "Tags describing the startup's business, as summarised by TrustMRR.", - "items": { - "type": "string" - }, - "type": "array" - }, - "target_audience": { - "description": "Audience the startup sells to, such as `B2C`.", - "type": "string" + "hosting_years": { + "description": "Number of years the host has been hosting on Airbnb.", + "example": 6, + "type": "integer" }, - "target_persona": { - "description": "Typical customer persona of the startup, as summarised by TrustMRR.", - "type": "string" + "identity_verified": { + "description": "True when the host's identity is verified on Airbnb.", + "type": "boolean" }, - "tech": { - "description": "Slugs of the technologies detected in the startup's stack, such as `reactnative`.", + "interests": { + "description": "Interests the host lists on the profile.", + "example": [ + "Architecture", + "Wine" + ], "items": { "type": "string" }, "type": "array" }, - "total_revenue": { - "description": "Verified all-time revenue, in US dollars.", - "type": "number" - }, - "traffic_12mo": { - "description": "Website traffic over the last 12 months.", - "type": "number" - }, - "traffic_24h": { - "description": "Website traffic over the last 24 hours.", - "type": "number" - }, - "traffic_30d": { - "description": "Website traffic over the last 30 days, in visits.", - "type": "number" + "is_home_host": { + "description": "True when Airbnb marks the host as a home host.", + "type": "boolean" }, - "traffic_7d": { - "description": "Website traffic over the last 7 days.", - "type": "number" + "is_superhost": { + "description": "True when the host carries the Superhost badge.", + "type": "boolean" }, - "url": { - "description": "URL of the startup's page on TrustMRR.", + "last_seen_at": { + "description": "When this host's profile was last confirmed (RFC 3339).", "type": "string" }, - "user_category": { - "description": "Category the seller chose for the startup, such as `Mobile Apps`.", - "type": "string" + "listing_count": { + "description": "Total number of listings the host manages.", + "example": 3, + "type": "integer" }, - "user_category_slug": { - "description": "URL slug of the seller-chosen category.", + "location": { + "description": "Location the host gives on the profile, free text such as `Lisbon, Portugal`.", "type": "string" }, - "value_proposition": { - "description": "What the startup offers customers, as summarised by TrustMRR.", - "type": "string" + "member_years": { + "description": "Number of years the host has had an Airbnb account.", + "example": 10, + "type": "integer" }, - "website": { - "description": "URL of the startup's own website.", + "name": { + "description": "Display name of the host.", "type": "string" }, - "x_follower_count": { - "description": "Number of followers the founder has on X (Twitter).", + "review_count": { + "description": "Total number of guest reviews the host has received.", + "example": 888, "type": "integer" }, - "x_founder_name": { - "description": "Founder's display name on X (Twitter).", - "type": "string" - }, - "x_handle": { - "description": "Founder's X (Twitter) handle.", + "url": { + "description": "Link to the host's public profile on Airbnb.", + "example": "https://www.airbnb.com/users/show/65056940", "type": "string" }, - "x_profile_picture": { - "description": "URL of the founder's X (Twitter) profile picture.", - "type": "string" + "verifications": { + "description": "Verifications shown on the profile, for example `Identity` or `Email address`.", + "example": [ + "Identity", + "Email address" + ], + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "es.VehicleListingDatasetFacetItem": { + "es.AirbnbHostsFacetItem": { "properties": { "count": { + "description": "Number of hosts with that value among the filtered hosts.", "type": "integer" }, "value": { + "description": "Facet value, for example `true`, `2-4` or an interest.", "type": "string" } }, "type": "object" }, - "es.VehicleListingRecord": { + "es.AirbnbMarketCell": { "properties": { - "accident_count": { - "description": "AccidentCount/OwnerCount come from a source's vehicle-history detail\n(CarMax's own /vehicle/{stock_number} History block as of 2026-08-20;\nreserved for other sources with an equivalent field). Pointers, not\nplain ints: 0 is a real, safety-relevant claim (\"confirmed zero\naccidents\") distinct from \"we haven't enriched this listing yet\".\nPopulated only for a bounded number of newly-discovered listings per\ncrawl pass, not backfilled for the whole catalog at once.", + "avg_person_capacity": { + "description": "Average number of guests a listing sleeps, over the sampled listings. Omitted until the sample is large enough.", + "type": "number" + }, + "avg_rating": { + "description": "Average listing rating across rated listings. Omitted when the market has too few rated listings.", + "type": "number" + }, + "avg_review_count": { + "description": "Average number of reviews per listing.", + "type": "number" + }, + "distinct_hosts": { + "description": "Number of distinct hosts among the sampled listings. Omitted until the sample is large enough.", "type": "integer" }, - "body_style": { - "type": "string" + "enriched_listings": { + "description": "Number of listings in the detail-page sample behind the reliable rates. Omitted when no listing has been sampled.", + "type": "integer" }, - "city": { - "type": "string" + "guest_favorite_listings": { + "description": "Number of listings seen with the Guest Favorite badge.", + "type": "integer" }, - "crawled_at": { - "type": "string" + "guest_favorite_pct": { + "description": "Share of listings seen with the Guest Favorite badge, from 0 to 100. A lower bound, because the badge does not always show.", + "type": "number" }, - "drive_type": { - "type": "string" + "guest_favorite_pct_enriched": { + "description": "Share of sampled listings that are Guest Favorites, from 0 to 100, taken from listing detail pages. Omitted until the sample is large enough.", + "type": "number" }, - "engine": { + "key": { + "description": "Market this row covers: a country code, metro name or other value of the chosen `group_by` dimension.", "type": "string" }, - "exterior_color": { + "last_seen": { + "description": "Most recent time a listing in this market was seen, in UTC (RFC 3339).", "type": "string" }, - "first_seen_at": { - "description": "FirstSeenAt/LastSeenAt are our own crawl-observed dates, not upstream\nfields -- see the type doc comment. Both are RFC3339.", - "type": "string" + "listings": { + "description": "Number of listings in the market.", + "type": "integer" }, - "fuel_type": { - "type": "string" + "listings_per_host": { + "description": "Sampled listings divided by distinct hosts, a sign of how concentrated hosting is. Omitted until the sample is large enough.", + "type": "number" }, - "id": { - "type": "string" + "median_price_usd": { + "description": "Median nightly price in US dollars, converted with an approximate dated exchange rate. Omitted when too few listings have a price.", + "type": "number" }, - "image_url": { - "type": "string" + "rated_listings": { + "description": "Number of listings that have a rating.", + "type": "integer" }, - "interior_color": { - "type": "string" + "superhost_listings": { + "description": "Number of listings seen with the Superhost badge on the search card.", + "type": "integer" }, - "is_price_reduced": { - "type": "boolean" + "superhost_pct": { + "description": "Share of listings seen with the Superhost badge, from 0 to 100. A lower bound, because the badge does not always show.", + "type": "number" }, - "last_seen_at": { - "type": "string" + "superhost_pct_enriched": { + "description": "Share of sampled listings that are Superhosts, from 0 to 100, taken from listing detail pages. Omitted until the sample is large enough.", + "type": "number" + } + }, + "type": "object" + }, + "es.AirbnbMarketDetail": { + "properties": { + "avg_person_capacity": { + "description": "Average number of guests a listing sleeps, over the sampled listings. Omitted until the sample is large enough.", + "type": "number" }, - "latitude": { + "avg_rating": { + "description": "Average listing rating across rated listings. Omitted when the country has too few rated listings.", "type": "number" }, - "longitude": { + "avg_review_count": { + "description": "Average number of reviews per listing.", "type": "number" }, - "make": { + "bounds": { + "allOf": [ + { + "$ref": "#/definitions/es.AirbnbGeoBounds" + } + ], + "description": "Box that encloses the country's listings." + }, + "country": { + "description": "ISO 3166-1 alpha-2 code of the country this profile covers.", "type": "string" }, - "mileage": { + "currencies": { + "description": "Nightly price percentiles for each currency that has enough priced listings.", + "items": { + "$ref": "#/definitions/es.AirbnbPriceStats" + }, + "type": "array" + }, + "distinct_hosts": { + "description": "Number of distinct hosts among the sampled listings. Omitted until the sample is large enough.", "type": "integer" }, - "model": { - "type": "string" + "enriched_listings": { + "description": "Number of listings in the detail-page sample behind the reliable rates. Omitted when no listing has been sampled.", + "type": "integer" }, - "owner_count": { + "guest_favorite_listings": { + "description": "Number of listings seen with the Guest Favorite badge.", "type": "integer" }, - "previous_price": { + "guest_favorite_pct": { + "description": "Share of listings seen with the Guest Favorite badge, from 0 to 100. A lower bound, because the badge does not always show.", "type": "number" }, - "price": { + "guest_favorite_pct_enriched": { + "description": "Share of sampled listings that are Guest Favorites, from 0 to 100, taken from listing detail pages. Omitted until the sample is large enough.", "type": "number" }, - "run_id": { + "last_seen": { + "description": "Most recent time a listing in the country was seen, in UTC (RFC 3339).", "type": "string" }, - "schema_version": { + "listings": { + "description": "Number of listings in the country.", "type": "integer" }, - "seller_name": { - "type": "string" - }, - "seller_type": { - "description": "SellerType is \"retailer\" for CarMax (its own inventory, not a dealer\nnetwork) and reserved \"dealer\"/\"private\" values for future sources\nthat aggregate third-party sellers (Autotrader, Cars.com).", - "type": "string" - }, - "source": { - "type": "string" - }, - "source_listing_id": { - "type": "string" + "listings_per_host": { + "description": "Sampled listings divided by distinct hosts, a sign of how concentrated hosting is. Omitted until the sample is large enough.", + "type": "number" }, - "state": { - "type": "string" + "metros": { + "description": "Largest metro markets in the country, each with the same figures as a market row.", + "items": { + "$ref": "#/definitions/es.AirbnbMarketCell" + }, + "type": "array" }, - "transmission": { - "type": "string" + "price_usd": { + "allOf": [ + { + "$ref": "#/definitions/es.AirbnbPriceUSDStats" + } + ], + "description": "PriceUSD is the country-wide nightly-price distribution normalized to USD (approximate,\ndated FX snapshot) — the cross-country-comparable complement to the per-currency\nCurrencies medians. Present only when enough listings carry a USD-normalized price." }, - "trim": { - "type": "string" + "rated_listings": { + "description": "Number of listings that have a rating.", + "type": "integer" }, - "url": { - "type": "string" + "superhost_listings": { + "description": "Number of listings seen with the Superhost badge on the search card.", + "type": "integer" }, - "vin": { - "type": "string" + "superhost_pct": { + "description": "Share of listings seen with the Superhost badge, from 0 to 100. A lower bound, because the badge does not always show.", + "type": "number" }, - "year": { - "type": "integer" + "superhost_pct_enriched": { + "description": "Share of sampled listings that are Superhosts, from 0 to 100, taken from listing detail pages. Omitted until the sample is large enough.", + "type": "number" } }, "type": "object" }, - "es.VehiclePriceHistoryRecord": { + "es.AirbnbMarketFacetItem": { "properties": { - "crawled_at": { - "type": "string" - }, - "id": { - "type": "string" - }, - "price": { - "type": "number" - }, - "schema_version": { + "count": { + "description": "Number of listings with this value.", "type": "integer" }, - "snapshot_date": { - "description": "SnapshotDate is the crawl date (YYYY-MM-DD) this price was observed on\n-- part of the doc id, so re-crawling the same listing twice in one\nday at a changed price overwrites that day's entry rather than\ncreating a second one for the same date.", - "type": "string" - }, - "source": { - "type": "string" - }, - "source_listing_id": { + "value": { + "description": "Facet value, for example a country code, market name, currency or room type.", "type": "string" } }, "type": "object" }, - "es.WebsiteStatus": { + "es.AirbnbPriceStats": { "properties": { - "checked_at": { - "description": "Time the website was checked, in UTC (RFC 3339).", + "currency": { + "description": "ISO currency code of the nightly prices.", "type": "string" }, - "dns_resolvable": { - "description": "Whether the website's domain name resolved.", - "type": "boolean" - }, - "error": { - "description": "Error message from the check. Omitted when the check raised no error.", - "type": "string" + "listings": { + "description": "Number of priced listings in this currency.", + "type": "integer" }, - "http_reachable": { - "description": "Whether the website answered an HTTP request.", - "type": "boolean" + "p25": { + "description": "25th percentile of the nightly price, in `currency`.", + "type": "number" }, - "status_code": { - "description": "HTTP status code the website returned.", - "type": "integer" + "p50": { + "description": "Median nightly price, in `currency`.", + "type": "number" }, - "url": { - "description": "Website address that was checked.", - "type": "string" + "p75": { + "description": "75th percentile of the nightly price, in `currency`.", + "type": "number" } }, "type": "object" }, - "es.XUserDatasetFacetItem": { + "es.AirbnbPriceUSDStats": { "properties": { - "count": { - "description": "Number of X users in this bucket.", + "listings": { + "description": "Number of listings with a price converted to US dollars.", "type": "integer" }, - "value": { - "description": "Bucket value for the requested facet, such as `true` or `false` for yes/no facets.", - "type": "string" + "p25": { + "description": "25th percentile of the nightly price, in US dollars at an approximate dated exchange rate.", + "type": "number" + }, + "p50": { + "description": "Median nightly price, in US dollars at an approximate dated exchange rate.", + "type": "number" + }, + "p75": { + "description": "75th percentile of the nightly price, in US dollars at an approximate dated exchange rate.", + "type": "number" } }, "type": "object" }, - "es.XUserDatasetItem": { + "es.AppRecord": { "properties": { - "avatar_url": { - "type": "string" + "android_max_installs": { + "type": "integer" }, - "banner_url": { + "android_package": { "type": "string" }, - "bio": { + "app_uid": { "type": "string" }, - "bio_url_host": { - "items": { - "type": "string" - }, - "type": "array" + "category": { + "type": "string" }, - "bio_urls": { - "description": "BioURLs are links written in the bio text, expanded from t.co. Distinct\nfrom ExternalURL (the single profile-header link).", + "countries_available": { "items": { "type": "string" }, "type": "array" }, - "crawled_at": { + "country": { "type": "string" }, - "created_at": { + "currency": { "type": "string" }, - "email": { - "description": "Email is an address the account self-published in its own bio. Extracted\nverbatim, never inferred or de-obfuscated. HasEmail is the faceting flag\n(an exists query on a keyword is fine, but a bool keeps parity with the\nother has_* fields and is cheaper to aggregate).", + "developer": { "type": "string" }, - "external_url": { + "developer_id": { "type": "string" }, - "follower_following_ratio": { - "type": "number" - }, - "followers": { - "type": "integer" + "discovery_sources": { + "description": "DiscoverySources lists the public catalogs that supplied this app ID.", + "items": { + "type": "string" + }, + "type": "array" }, - "following": { - "type": "integer" + "first_seen": { + "type": "string" }, - "has_bio": { + "free": { "type": "boolean" }, - "has_bio_url": { - "type": "boolean" + "icon_url": { + "type": "string" }, - "has_email": { - "type": "boolean" + "ios_app_id": { + "type": "string" }, - "has_external_url": { - "type": "boolean" + "ios_bundle_id": { + "type": "string" }, - "id": { + "last_crawled": { "type": "string" }, - "is_blue_verified": { - "type": "boolean" + "platforms": { + "description": "Platforms is the set of store-specific device platforms this app is\nconfirmed on. iOS uses Apple's appPlatforms vocabulary (phone, pad, mac,\ntv, watch, vision). Android uses Google Play device-tab/source values\n(phone, tablet, tv, chromebook, watch, xr, car, windows). Empty means the\nrecord has not been classified by platform yet.", + "items": { + "type": "string" + }, + "type": "array" }, - "is_default_profile_image": { - "description": "IsDefaultProfileImage marks never-customized shells.", - "type": "boolean" + "popularity": { + "description": "Popularity = ratings_count × score (\"total rating weight\"). Derived on write\n(recomputed every upsert), 0 for unrated apps. A proven-adoption ranking signal.", + "type": "integer" }, - "likes": { + "price_cents": { "type": "integer" }, - "listed": { - "description": "Listed is how many curated lists include the account -- the best\nauthority proxy available. Media/Likes are activity signals.", + "ratings_count": { "type": "integer" }, - "location_raw": { + "released_at": { "type": "string" }, - "media": { - "type": "integer" + "score": { + "type": "number" }, - "name": { + "store": { "type": "string" }, - "posts": { - "type": "integer" - }, - "schema_version": { - "type": "integer" + "title": { + "type": "string" }, - "source_tier": { + "updated_at": { "type": "string" }, - "username": { + "url": { "type": "string" }, - "verified_type": { - "description": "VerifiedType is the verification flavour (\"Business\", \"Government\", ...);\nempty for ordinary/blue accounts.", + "version": { "type": "string" } }, "type": "object" }, - "es.XUserRecord": { + "es.AppReview": { "properties": { - "avatar_url": { + "app_id": { + "description": "App id in the store: the numeric App Store id or the Google Play package name.", "type": "string" }, - "banner_url": { + "app_uid": { + "description": "Unique id of the reviewed app in the apps dataset.", "type": "string" }, - "bio": { + "country": { + "description": "Storefront country code the review was posted in, for example `us`.", "type": "string" }, - "bio_url_host": { - "items": { - "type": "string" - }, - "type": "array" - }, - "bio_urls": { - "description": "BioURLs are links written in the bio text, expanded from t.co. Distinct\nfrom ExternalURL (the single profile-header link).", - "items": { - "type": "string" - }, - "type": "array" - }, - "crawled_at": { + "last_crawled": { + "description": "Time the review was last fetched, in UTC (RFC 3339).", "type": "string" }, - "created_at": { + "reply_text": { + "description": "Developer's public reply to the review. Set for Google Play reviews.", "type": "string" }, - "email": { - "description": "Email is an address the account self-published in its own bio. Extracted\nverbatim, never inferred or de-obfuscated. HasEmail is the faceting flag\n(an exists query on a keyword is fine, but a bool keeps parity with the\nother has_* fields and is cheaper to aggregate).", + "review_id": { + "description": "Review id assigned by the store.", "type": "string" }, - "external_url": { + "review_uid": { + "description": "Unique review id, combining the store, app id and review id.", "type": "string" }, - "follower_following_ratio": { - "type": "number" - }, - "followers": { - "type": "integer" - }, - "following": { - "type": "integer" - }, - "has_bio": { - "type": "boolean" - }, - "has_bio_url": { - "type": "boolean" - }, - "has_email": { - "type": "boolean" - }, - "has_external_url": { - "type": "boolean" - }, - "id": { + "reviewed_at": { + "description": "Time the review was posted or last updated, as the store reports it.", "type": "string" }, - "is_blue_verified": { - "type": "boolean" - }, - "is_default_profile_image": { - "description": "IsDefaultProfileImage marks never-customized shells.", - "type": "boolean" - }, - "likes": { - "type": "integer" - }, - "listed": { - "description": "Listed is how many curated lists include the account -- the best\nauthority proxy available. Media/Likes are activity signals.", + "score": { + "description": "Star rating the reviewer gave, from 1 to 5.", "type": "integer" }, - "location_raw": { + "store": { + "description": "Which store the review was posted on: `ios` or `android`.", "type": "string" }, - "media": { - "type": "integer" - }, - "name": { + "text": { + "description": "Full text of the review.", "type": "string" }, - "posts": { + "thumbs_up": { + "description": "Number of helpful votes the review received. Set for Google Play reviews.", "type": "integer" }, - "schema_version": { - "type": "integer" + "title": { + "description": "Headline the reviewer gave the review.", + "type": "string" }, - "source_tier": { + "url": { + "description": "Link to the review on the store.", "type": "string" }, - "username": { + "user_name": { + "description": "Display name of the reviewer.", "type": "string" }, - "verified_type": { - "description": "VerifiedType is the verification flavour (\"Business\", \"Government\", ...);\nempty for ordinary/blue accounts.", + "version": { + "description": "App version the review refers to.", "type": "string" } }, "type": "object" }, - "es.YoutubeChannelCandidate": { + "es.AppleBooksDatasetFacetItem": { "properties": { - "bio": { - "type": "string" + "count": { + "type": "integer" }, - "channel_id": { + "value": { "type": "string" + } + }, + "type": "object" + }, + "es.ApplePlaceDatasetFacetItem": { + "properties": { + "count": { + "type": "integer" }, - "channel_name": { + "key": { "type": "string" - }, - "channel_url": { + } + }, + "type": "object" + }, + "es.ApplePlaceDatasetItem": { + "properties": { + "address": { "type": "string" }, - "discovered_at": { - "type": "string" + "alt_phones": { + "items": { + "type": "string" + }, + "type": "array" }, - "discovery_source": { + "catalog_country": { "type": "string" }, - "followers_count": { - "type": "integer" - }, - "followers_count_available": { - "type": "boolean" - }, - "hydrated_at": { - "type": "string" + "categories": { + "items": { + "type": "string" + }, + "type": "array" }, - "joined_date": { + "category": { + "description": "Category is the deepest named Apple category; Categories is the whole\ntaxonomy path (names) and CategoryIDs the matching Apple category ids.", "type": "string" }, - "links": { + "category_ids": { "items": { "type": "string" }, "type": "array" }, - "profile_pic": { + "city": { "type": "string" }, - "region": { + "country": { "type": "string" }, - "status": { + "country_code": { "type": "string" }, - "videos_count": { - "type": "integer" + "county": { + "type": "string" }, - "videos_count_available": { - "type": "boolean" + "crawled_at": { + "type": "string" }, - "views_count": { - "type": "integer" + "discovery_keyword": { + "type": "string" }, - "views_count_available": { - "type": "boolean" - } - }, - "type": "object" - }, - "es.YoutubeCreatorDatasetFacetItem": { - "properties": { - "count": { - "type": "integer" + "distance_m": { + "type": "number" }, - "value": { - "type": "string" - } - }, - "type": "object" - }, - "es.YoutubeCreatorDatasetItem": { - "properties": { - "bio": { + "first_seen_at": { "type": "string" }, - "channel_id": { - "type": "string" + "hours": { + "items": { + "$ref": "#/definitions/es.ApplePlaceHours" + }, + "type": "array" }, - "channel_name": { + "hours_type": { "type": "string" }, - "channel_url": { + "id": { "type": "string" }, - "discovered_at": { + "last_seen_at": { "type": "string" }, - "discovery_source": { - "type": "string" + "latitude": { + "type": "number" }, - "followers_count": { - "type": "integer" + "location": { + "allOf": [ + { + "$ref": "#/definitions/es.GeoPoint" + } + ], + "description": "Location is a geo_point for radius search and distance sort." }, - "followers_count_available": { - "type": "boolean" + "longitude": { + "type": "number" }, - "hydrated_at": { + "name": { "type": "string" }, - "joined_date": { + "neighborhood": { "type": "string" }, - "links": { - "items": { - "type": "string" - }, - "type": "array" + "phone": { + "type": "string" }, - "profile_pic": { + "photo_url": { "type": "string" }, - "region": { + "place_id": { "type": "string" }, - "status": { + "postal_code": { "type": "string" }, - "videos_count": { + "price_level": { "type": "integer" }, - "videos_count_available": { - "type": "boolean" + "price_symbol": { + "type": "string" }, - "views_count": { - "type": "integer" + "rating": { + "type": "number" }, - "views_count_available": { - "type": "boolean" - } - }, - "type": "object" - }, - "espn.Athlete": { - "properties": { - "age": { + "rating_count": { "type": "integer" }, - "display_height": { - "type": "string" + "rating_max": { + "type": "integer" }, - "display_name": { - "type": "string" + "schema_version": { + "type": "integer" }, - "display_weight": { + "state": { "type": "string" }, - "full_name": { + "state_code": { "type": "string" }, - "headshot": { + "street": { "type": "string" }, - "id": { + "type": { "type": "string" }, - "jersey": { + "url": { "type": "string" }, - "position": { + "website": { "type": "string" - }, - "team": { - "$ref": "#/definitions/espn.TeamRef" } }, "type": "object" }, - "espn.AthleteResponse": { + "es.ApplePlaceHours": { "properties": { - "athlete": { - "$ref": "#/definitions/espn.Athlete" - }, - "fetched_at": { - "type": "string" - }, - "league": { + "close": { "type": "string" }, - "source_url": { + "day": { "type": "string" }, - "sport": { + "open": { "type": "string" } }, "type": "object" }, - "espn.BoxscoreTeam": { + "es.ApplePlaceRecord": { "properties": { - "home_away": { - "description": "Whether the team is the `home` or `away` side.", + "address": { "type": "string" }, - "stats": { - "additionalProperties": { + "alt_phones": { + "items": { "type": "string" }, - "description": "Team stat totals keyed by stat label, with each value as ESPN displays it.", - "type": "object" + "type": "array" }, - "team": { - "allOf": [ - { - "$ref": "#/definitions/espn.TeamRef" - } - ], - "description": "Team these stat totals belong to." - } - }, - "type": "object" - }, - "espn.Competitor": { - "properties": { - "home_away": { - "description": "Whether the team is the `home` or `away` side.", - "example": "home", + "catalog_country": { "type": "string" }, - "record": { - "description": "Team's win-loss record, for example `10-2`.", - "example": "10-2", - "type": "string" + "categories": { + "items": { + "type": "string" + }, + "type": "array" }, - "score": { - "description": "Team's score in the game, as a string.", - "example": "27", + "category": { + "description": "Category is the deepest named Apple category; Categories is the whole\ntaxonomy path (names) and CategoryIDs the matching Apple category ids.", "type": "string" }, - "team": { - "allOf": [ - { - "$ref": "#/definitions/espn.TeamRef" - } - ], - "description": "Team playing in this game." - }, - "winner": { - "description": "Whether this team won the game.", - "type": "boolean" - } - }, - "type": "object" - }, - "espn.Game": { - "properties": { - "competitors": { - "description": "Both sides of the game, each with team, home or away role and score.", + "category_ids": { "items": { - "$ref": "#/definitions/espn.Competitor" + "type": "string" }, "type": "array" }, - "date": { - "description": "Scheduled start time of the game in ISO 8601, for example `2026-09-10T20:00Z`.", + "city": { "type": "string" }, - "id": { - "description": "ESPN event id of the game, for example `401816033`. Use it with the game summary endpoint.", - "example": "401816033", + "country": { "type": "string" }, - "name": { - "description": "Full matchup title of the game, as ESPN shows it.", + "country_code": { "type": "string" }, - "odds": { - "description": "Betting lines for the game, one entry per odds provider.", + "county": { + "type": "string" + }, + "crawled_at": { + "type": "string" + }, + "discovery_keyword": { + "type": "string" + }, + "first_seen_at": { + "type": "string" + }, + "hours": { "items": { - "$ref": "#/definitions/espn.GameOdds" + "$ref": "#/definitions/es.ApplePlaceHours" }, "type": "array" }, - "short_name": { - "description": "Short matchup title of the game, as ESPN shows it.", + "hours_type": { "type": "string" }, - "status": { + "id": { + "type": "string" + }, + "last_seen_at": { + "type": "string" + }, + "latitude": { + "type": "number" + }, + "location": { "allOf": [ { - "$ref": "#/definitions/espn.GameStatus" + "$ref": "#/definitions/es.GeoPoint" } ], - "description": "Current state of the game, such as scheduled, in progress or final." + "description": "Location is a geo_point for radius search and distance sort." }, - "venue": { - "description": "Name of the stadium or arena where the game is played.", - "type": "string" - } - }, - "type": "object" - }, - "espn.GameOdds": { - "properties": { - "details": { - "description": "Betting line summary text as the provider shows it, for example `ATL -1.5`.", + "longitude": { + "type": "number" + }, + "name": { "type": "string" }, - "over_under": { - "description": "Total points line for the game, as the provider lists it.", - "type": "number" + "neighborhood": { + "type": "string" }, - "provider": { - "description": "Name of the odds provider that published the line.", + "phone": { "type": "string" }, - "spread": { - "description": "Point spread for the game, as the provider lists it.", - "type": "number" - } - }, - "type": "object" - }, - "espn.GameStatus": { - "properties": { - "clock": { - "description": "Game clock text as ESPN displays it. Omitted when ESPN gives none.", + "photo_url": { "type": "string" }, - "completed": { - "description": "Whether the game has finished.", - "example": true, - "type": "boolean" + "place_id": { + "type": "string" }, - "detail": { - "description": "Full status text ESPN shows for the game, for example `Final`.", - "example": "Final", + "postal_code": { "type": "string" }, - "period": { - "description": "Current period of the game, such as the quarter, inning or half. Omitted when ESPN gives none.", + "price_level": { "type": "integer" }, - "short_detail": { - "description": "Short status text ESPN shows for the game, for example `Final`.", - "example": "Final", + "price_symbol": { "type": "string" }, + "rating": { + "type": "number" + }, + "rating_count": { + "type": "integer" + }, + "rating_max": { + "type": "integer" + }, + "schema_version": { + "type": "integer" + }, "state": { - "description": "Game state code as ESPN gives it, for example `pre` before the game or `post` after it.", - "example": "post", "type": "string" - } - }, - "type": "object" - }, - "espn.GameSummaryResponse": { - "properties": { - "boxscore_teams": { - "description": "Team stat totals for the game, one entry per team. Omitted when none are available.", - "items": { - "$ref": "#/definitions/espn.BoxscoreTeam" - }, - "type": "array" }, - "event": { - "description": "ESPN event id that was requested.", + "state_code": { "type": "string" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", + "street": { "type": "string" }, - "game": { - "allOf": [ - { - "$ref": "#/definitions/espn.Game" - } - ], - "description": "Matchup details for the game: teams, scores and status." - }, - "league": { - "description": "League key that was requested, for example `nfl`.", + "type": { "type": "string" }, - "odds": { - "description": "Betting lines for the game, one entry per odds provider. Omitted when none are available.", - "items": { - "$ref": "#/definitions/espn.GameOdds" - }, - "type": "array" - }, - "source_url": { - "description": "URL the data was read from.", + "url": { "type": "string" }, - "sport": { - "description": "Sport key that was requested, for example `football`.", + "website": { "type": "string" } }, "type": "object" }, - "espn.NewsArticle": { + "es.ApplePodcastsShowRecord": { "properties": { - "byline": { - "description": "Name of the article's author.", - "type": "string" + "artist_id": { + "type": "integer" }, - "description": { - "description": "Short summary of the article.", + "artist_name": { "type": "string" }, - "headline": { - "description": "Article headline as shown on ESPN.", + "artist_url": { "type": "string" }, - "link": { - "description": "URL of the article on ESPN.", + "artwork_url_600": { "type": "string" }, - "published": { - "description": "Time the article was published, in ISO 8601.", + "collection_explicitness": { "type": "string" }, - "type": { - "description": "Article type as ESPN labels it.", + "collection_name": { "type": "string" - } - }, - "type": "object" - }, - "espn.NewsResponse": { - "properties": { - "articles": { - "description": "Recent news articles for the league, one entry per article.", - "items": { - "$ref": "#/definitions/espn.NewsArticle" - }, - "type": "array" }, - "count": { - "description": "Number of articles returned.", - "type": "integer" + "content_advisory_rating": { + "type": "string" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", + "country": { "type": "string" }, - "league": { - "description": "League key that was requested, for example `nfl`.", + "crawled_at": { "type": "string" }, - "source_url": { - "description": "URL the data was read from.", + "currency": { "type": "string" }, - "sport": { - "description": "Sport key that was requested, for example `football`.", + "discovery_collection": { "type": "string" - } - }, - "type": "object" - }, - "espn.RankEntry": { - "properties": { - "current": { - "description": "Team's rank in this poll.", - "type": "integer" }, - "points": { - "description": "Total poll points the team received. Omitted when ESPN gives none.", - "type": "number" + "discovery_country": { + "type": "string" }, - "previous": { - "description": "Team's rank in the previous poll. Omitted when ESPN gives none.", + "discovery_genre_id": { "type": "integer" }, - "record": { - "description": "Team's win-loss record, for example `16-0`.", + "discovery_source": { + "description": "DiscoverySource is \"chart\", \"search\" (show-search term sweep), or\n\"episode_search\" (episode-search term sweep, M6 — the parent show of a\nmatching episode). DiscoveryCountry/DiscoveryGenreID/DiscoveryCollection\nrecord which chart grid cell first surfaced this show (empty genre\nid/collection for either search-sweep source).", "type": "string" }, - "team": { - "allOf": [ - { - "$ref": "#/definitions/espn.TeamRef" - } - ], - "description": "Team holding this rank." - }, - "trend": { - "description": "Change in rank since the previous poll, as ESPN shows it.", - "type": "string" - } - }, - "type": "object" - }, - "espn.RankingPoll": { - "properties": { - "name": { - "description": "Full poll name, for example `AP Top 25`.", + "feed_url": { "type": "string" }, - "ranks": { - "description": "Ranked teams in the poll, one entry per rank.", + "genre_ids": { "items": { - "$ref": "#/definitions/espn.RankEntry" + "type": "string" }, "type": "array" }, - "short_name": { - "description": "Short poll name as ESPN shows it.", - "type": "string" - } - }, - "type": "object" - }, - "espn.RankingsResponse": { - "properties": { - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "type": "string" - }, - "league": { - "description": "League key that was requested, for example `college-football`.", - "type": "string" - }, - "polls": { - "description": "Ranking polls published for the league, one entry per poll.", + "genres": { "items": { - "$ref": "#/definitions/espn.RankingPoll" + "type": "string" }, "type": "array" }, - "season": { - "allOf": [ - { - "$ref": "#/definitions/espn.Season" - } - ], - "description": "Season the rankings belong to." + "id": { + "type": "integer" }, - "source_url": { - "description": "URL the data was read from.", + "primary_genre_name": { "type": "string" }, - "sport": { - "description": "Sport key that was requested, for example `football`.", + "quality_checked_at": { "type": "string" - } - }, - "type": "object" - }, - "espn.RosterAthlete": { - "properties": { - "age": { - "description": "Player's age in years.", - "type": "integer" }, - "display_height": { - "description": "Player's height as ESPN displays it.", + "quality_reason": { "type": "string" }, - "display_weight": { - "description": "Player's weight as ESPN displays it.", + "quality_state": { + "description": "Quality* records the terminal/backfill state without changing the last\nknown crawl snapshot. It is populated only for the targeted repair flow.", "type": "string" }, - "experience_years": { - "description": "Number of years of experience the player has.", - "type": "integer" - }, - "full_name": { - "description": "Player's full name.", + "release_date": { "type": "string" }, - "id": { - "description": "ESPN athlete id of the player.", + "run_id": { "type": "string" }, - "jersey": { - "description": "Player's jersey number, as a string.", - "type": "string" + "schema_version": { + "type": "integer" }, - "position": { - "description": "Player's position on the team.", + "seed_rank": { + "type": "integer" + }, + "track_count": { + "description": "TrackCount is the episode count as reported by the iTunes lookup at crawl time.", + "type": "integer" + }, + "url": { "type": "string" } }, "type": "object" }, - "espn.RosterResponse": { + "es.ApplePodcastsShowsDatasetFacetItem": { "properties": { - "athletes": { - "description": "Players on the team roster, one entry per player.", - "items": { - "$ref": "#/definitions/espn.RosterAthlete" - }, - "type": "array" - }, - "coach": { - "description": "Name of the team's head coach. Omitted when ESPN lists none.", - "type": "string" - }, "count": { - "description": "Number of athletes returned.", + "description": "Number of shows with this value.", "type": "integer" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "type": "string" - }, - "league": { - "description": "League key that was requested, for example `nfl`.", - "type": "string" - }, - "source_url": { - "description": "URL the data was read from.", - "type": "string" - }, - "sport": { - "description": "Sport key that was requested, for example `football`.", + "value": { + "description": "Facet value being counted.", "type": "string" - }, - "team": { - "allOf": [ - { - "$ref": "#/definitions/espn.TeamRef" - } - ], - "description": "Team the roster belongs to." } }, "type": "object" }, - "espn.ScoreboardResponse": { + "es.BBBBusinessAlert": { "properties": { - "count": { - "example": 14, - "type": "integer" - }, - "day": { - "type": "string" - }, - "fetched_at": { + "id": { "type": "string" }, - "games": { + "links": { "items": { - "$ref": "#/definitions/espn.Game" + "$ref": "#/definitions/es.BBBBusinessAlertLink" }, "type": "array" }, - "league": { - "example": "nfl", + "text": { "type": "string" }, - "league_name": { - "example": "National Football League", + "title": { "type": "string" }, - "season": { - "$ref": "#/definitions/espn.Season" - }, - "source_url": { - "type": "string" + "type_id": { + "type": "integer" }, - "sport": { - "example": "football", + "url": { "type": "string" } }, "type": "object" }, - "espn.Season": { + "es.BBBBusinessAlertLink": { "properties": { - "name": { - "description": "Season type name as ESPN shows it.", + "text": { "type": "string" }, - "type": { - "description": "Season type code: 1 preseason, 2 regular season, 3 postseason, 4 offseason.", - "example": 2, - "type": "integer" - }, - "year": { - "description": "Season year, for example `2024`.", - "example": 2024, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "espn.StandingsEntry": { + "es.BBBBusinessHoursDay": { "properties": { - "note": { + "day": { "type": "string" }, - "stats": { - "additionalProperties": { - "type": "string" - }, - "type": "object" - }, - "team": { - "$ref": "#/definitions/espn.TeamRef" + "hours": { + "type": "string" } }, "type": "object" }, - "espn.StandingsGroup": { + "es.BBBBusinessRecord": { "properties": { - "abbreviation": { + "accredited": { + "type": "boolean" + }, + "accredited_since": { "type": "string" }, - "entries": { + "additional_phone_numbers": { "items": { - "$ref": "#/definitions/espn.StandingsEntry" + "type": "string" }, "type": "array" }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "espn.StandingsResponse": { - "properties": { - "fetched_at": { - "type": "string" - }, - "groups": { + "additional_websites": { "items": { - "$ref": "#/definitions/espn.StandingsGroup" + "type": "string" }, "type": "array" }, - "league": { + "address": { "type": "string" }, - "league_name": { + "address_country": { + "description": "AddressCountry is derived from the recognized US state/territory/military\nor Canadian province code at the end of Address. Empty when unrecognized.", + "enum": [ + "us", + "ca" + ], "type": "string" }, - "season": { - "$ref": "#/definitions/espn.Season" + "alert_titles": { + "items": { + "type": "string" + }, + "type": "array" }, - "source_url": { - "type": "string" + "alerts": { + "items": { + "$ref": "#/definitions/es.BBBBusinessAlert" + }, + "type": "array" }, - "sport": { - "type": "string" - } - }, - "type": "object" - }, - "espn.TeamDetail": { - "properties": { - "abbreviation": { - "description": "Short team code, for example `KC`.", - "example": "KC", - "type": "string" + "alternate_names": { + "items": { + "type": "string" + }, + "type": "array" }, - "alternate_color": { - "description": "Team's secondary colour code, as ESPN gives it.", - "type": "string" + "average_review_rating": { + "type": "number" }, - "color": { - "description": "Team's primary colour code, as ESPN gives it.", + "bbb_file_opened": { "type": "string" }, - "display_name": { - "description": "Full team name, for example `Kansas City Chiefs`.", - "example": "Kansas City Chiefs", + "bbb_local_id": { "type": "string" }, - "id": { - "description": "ESPN team id, for example `12`. Use it as the `team` parameter of the team and roster endpoints.", - "example": "12", + "business_id": { "type": "string" }, - "location": { - "description": "Team's city or region, for example `Kansas City`.", - "example": "Kansas City", + "business_incorporated": { "type": "string" }, - "logo": { - "description": "URL of the team logo image.", + "business_management": { "type": "string" }, - "name": { - "description": "Team nickname without the location, for example `Chiefs`.", - "example": "Chiefs", + "business_started": { "type": "string" }, - "record": { - "description": "Team's overall win-loss record, for example `10-2`.", - "type": "string" + "categories": { + "items": { + "type": "string" + }, + "type": "array" }, - "short_display_name": { - "description": "Shortened team name, for example `Chiefs`.", - "example": "Chiefs", + "category": { + "example": "Plumber", "type": "string" }, - "standing_summary": { - "description": "Short text describing the team's place in its division or conference standings.", + "city": { "type": "string" }, - "uid": { - "description": "ESPN's unique identifier string for the team.", - "type": "string" - } - }, - "type": "object" - }, - "espn.TeamRef": { - "properties": { - "abbreviation": { - "description": "Short team code, for example `KC`.", - "example": "KC", - "type": "string" + "complaints_closed_last_12_months": { + "type": "integer" }, - "alternate_color": { - "description": "Team's secondary colour code, as ESPN gives it.", - "type": "string" + "complaints_closed_last_3_years": { + "type": "integer" }, - "color": { - "description": "Team's primary colour code, as ESPN gives it.", + "complaints_url": { + "description": "On-demand pointers -- not crawled/embedded, see package doc above.", "type": "string" }, - "display_name": { - "description": "Full team name, for example `Kansas City Chiefs`.", - "example": "Kansas City Chiefs", + "country": { + "description": "State/City are parsed from the profile URL's /us|ca///...\npath segments -- BusinessResponse.Address is a free-text joined string,\nnot structured, so it isn't a reliable filter/facet field on its own.", "type": "string" }, - "id": { - "description": "ESPN team id, for example `12`. Use it as the `team` parameter of the team and roster endpoints.", - "example": "12", + "crawled_at": { "type": "string" }, - "location": { - "description": "Team's city or region, for example `Kansas City`.", - "example": "Kansas City", + "discovery_source": { + "description": "Crawl bookkeeping. DiscoverySource records how the CURRENT document\ncontent was obtained (last-crawl mechanism), not first-discovery\nprovenance -- keyword-sweep, category-grid, and Common Crawl discovery\nare deduplicated against the same business, so the same business is\nnever double-enqueued no matter how many search/category cells or CC\nrecords surface it. A richer per-discovery-event location/category\nisn't tracked, only the coarse source.", "type": "string" }, - "logo": { - "description": "URL of the team logo image.", + "entity_type": { + "example": "Limited Liability Company (LLC)", "type": "string" }, - "name": { - "description": "Team nickname without the location, for example `Chiefs`.", - "example": "Chiefs", - "type": "string" + "has_alerts": { + "description": "HasAlerts, AlertTitles and Alerts describe the notices BBB attaches to\nthe profile (pattern of complaints, investigation results, licensing\nfindings). A refreshed record with no alerts carries has_alerts=false\nand empty lists; a record not re-crawled since these were added has\nnone of the keys.", + "type": "boolean" }, - "short_display_name": { - "description": "Shortened team name, for example `Chiefs`.", - "example": "Chiefs", - "type": "string" + "hours": { + "items": { + "$ref": "#/definitions/es.BBBBusinessHoursDay" + }, + "type": "array" }, - "uid": { - "description": "ESPN's unique identifier string for the team.", + "licensing_note": { "type": "string" - } - }, - "type": "object" - }, - "espn.TeamResponse": { - "properties": { - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", + }, + "more_info_url": { "type": "string" }, - "league": { - "description": "League key that was requested, for example `nfl`.", + "name": { "type": "string" }, - "source_url": { - "description": "URL the data was read from.", + "phone": { "type": "string" }, - "sport": { - "description": "Sport key that was requested, for example `football`.", + "products_and_services": { + "items": { + "type": "string" + }, + "type": "array" + }, + "rating": { + "example": "A+", "type": "string" }, - "team": { - "allOf": [ - { - "$ref": "#/definitions/espn.TeamDetail" - } - ], - "description": "Details for the requested team, including record and standing." - } - }, - "type": "object" - }, - "espn.TeamsResponse": { - "properties": { - "count": { - "description": "Number of teams returned.", - "example": 32, + "rating_rank": { "type": "integer" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "type": "string" + "rating_reasons": { + "items": { + "type": "string" + }, + "type": "array" }, - "league": { - "description": "League key that was requested, for example `nfl`.", + "reviews_url": { "type": "string" }, - "source_url": { - "description": "URL the data was read from.", + "run_id": { "type": "string" }, - "sport": { - "description": "Sport key that was requested, for example `football`.", - "type": "string" + "schema_version": { + "type": "integer" }, - "teams": { - "description": "Teams in the league, one entry per team.", + "social_media": { "items": { - "$ref": "#/definitions/espn.TeamRef" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "espn.athleteResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/espn.AthleteResponse" }, - "msg": { - "example": "OK", + "state": { "type": "string" - } - }, - "type": "object" - }, - "espn.gameSummaryResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/espn.GameSummaryResponse" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "espn.newsResponseDoc": { - "properties": { - "code": { - "example": 200, + "total_complaints": { + "description": "Complaint and review counts from the profile page, the same values\nbbb-business returns. A record not re-crawled since these were added\nhas none of the keys until its next refresh, and a count BBB did not\npublish is likewise absent, so 0 is a real zero.", + "example": 943, "type": "integer" }, - "data": { - "$ref": "#/definitions/espn.NewsResponse" + "total_reviews": { + "type": "integer" }, - "msg": { - "example": "OK", + "url": { "type": "string" - } - }, - "type": "object" - }, - "espn.rankingsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/espn.RankingsResponse" + "website": { + "type": "string" }, - "msg": { - "example": "OK", + "years_in_business": { "type": "string" + }, + "years_in_business_num": { + "description": "YearsInBusinessNum is a best-effort leading-digit parse of\nYearsInBusiness (a free-text upstream string, e.g. \"3\"), -1 when\nunparseable. Denormalized purely for numeric sorting -- YearsInBusiness\nitself stays a keyword, so a lexicographic string sort would wrongly\nrank \"9\" ahead of \"12\".", + "type": "integer" } }, "type": "object" }, - "espn.rosterResponseDoc": { + "es.BBBBusinessesFacetItem": { "properties": { - "code": { - "example": 200, + "count": { + "description": "Number of matching records with this value.", + "example": 3438, "type": "integer" }, - "data": { - "$ref": "#/definitions/espn.RosterResponse" - }, - "msg": { - "example": "OK", + "value": { + "description": "The facet value, to use as the matching search or facet filter. For the accredited and has_alerts facets it is 1 (true) or 0 (false).", + "example": "san-diego", "type": "string" } }, "type": "object" }, - "espn.scoreboardResponseDoc": { + "es.BoxOfficeMojoDatasetFacetItem": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/espn.ScoreboardResponse" - }, - "msg": { - "example": "OK", + "value": { "type": "string" } }, "type": "object" }, - "espn.standingsResponseDoc": { + "es.BoxOfficeMojoReleaseGroup": { "properties": { - "code": { - "example": 200, + "domestic": { "type": "integer" }, - "data": { - "$ref": "#/definitions/espn.StandingsResponse" + "international": { + "type": "integer" }, - "msg": { - "example": "OK", + "markets": { "type": "string" - } - }, - "type": "object" - }, - "espn.teamResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/espn.TeamResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "path": { "type": "string" - } - }, - "type": "object" - }, - "espn.teamsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/espn.TeamsResponse" + "rollout": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" + }, + "worldwide": { + "type": "integer" } }, "type": "object" }, - "etsy.MobileListing": { + "es.BoxOfficeMojoTitleRecord": { "properties": { - "category_name": { - "type": "string" + "brand_ids": { + "items": { + "type": "string" + }, + "type": "array" }, - "create_date": { - "type": "integer" + "brand_names": { + "items": { + "type": "string" + }, + "type": "array" }, - "currency": { - "example": "USD", - "type": "string" + "domestic_share": { + "type": "number" }, - "description": { + "first_seen_at": { "type": "string" }, - "favorites": { - "type": "integer" + "foreign_share": { + "type": "number" }, - "images": { + "franchise_ids": { "items": { "type": "string" }, "type": "array" }, - "is_customizable": { - "type": "boolean" - }, - "is_digital": { - "type": "boolean" - }, - "is_sold_out": { - "type": "boolean" - }, - "listing_id": { - "example": "1044347578", - "type": "string" - }, - "materials": { + "franchise_names": { "items": { "type": "string" }, "type": "array" }, - "price": { - "example": "$29.99", - "type": "string" - }, - "price_int": { - "example": 2999, - "type": "integer" - }, - "quantity": { - "type": "integer" - }, - "ships_from_country": { - "type": "string" - }, - "shop_id": { - "type": "string" - }, - "shop_name": { - "type": "string" - }, - "state": { - "example": "active", - "type": "string" + "genre_ids": { + "items": { + "type": "string" + }, + "type": "array" }, - "tags": { + "genre_names": { "items": { "type": "string" }, "type": "array" }, - "title": { + "gross_band": { "type": "string" }, - "update_date": { + "hydrate_attempts": { "type": "integer" }, - "url": { - "type": "string" + "hydrate_failed": { + "type": "boolean" }, - "views": { - "type": "integer" + "hydrated": { + "type": "boolean" }, - "when_made": { - "type": "string" - } - }, - "type": "object" - }, - "etsy.MobileListingCard": { - "properties": { - "currency": { - "type": "string" + "in_lifetime_top_1000_dom": { + "type": "boolean" }, - "image": { - "type": "string" + "in_lifetime_top_1000_ww": { + "type": "boolean" }, - "is_sold_out": { + "is_billion_dollar": { "type": "boolean" }, - "listing_id": { - "example": "1044347578", + "last_crawled_at": { "type": "string" }, - "price": { - "example": "$29.99", + "last_hydrated_at": { "type": "string" }, - "price_int": { + "lifetime_gross_domestic": { "type": "integer" }, - "quantity": { + "lifetime_gross_worldwide": { "type": "integer" }, - "shop_id": { - "type": "string" + "lifetime_rank_domestic": { + "type": "integer" }, - "shop_name": { - "type": "string" + "lifetime_rank_worldwide": { + "type": "integer" }, - "shop_rating": { - "type": "number" + "lifetime_year": { + "type": "integer" }, - "title": { - "type": "string" + "market_count": { + "type": "integer" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "etsy.MobileListingReviews": { - "properties": { - "avg_rating": { - "example": 4.9, - "type": "number" + "market_grosses": { + "description": "MarketGrosses keeps the hydrated region/market tables as opaque objects so\nthe mapping stays flexible; the public query surface can expand later.", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "count": { - "example": 123, + "peak_worldwide_gross": { "type": "integer" }, - "listing_id": { - "example": "1044347578", + "peak_worldwide_year": { + "type": "integer" + }, + "primary_release_group_id": { "type": "string" }, - "offset": { - "example": 0, + "primary_release_group_name": { + "type": "string" + }, + "release_group_count": { "type": "integer" }, - "reviews": { + "release_group_ids": { "items": { - "$ref": "#/definitions/etsy.MobileReview" + "type": "string" }, "type": "array" }, - "total_rating_count": { - "type": "integer" - } - }, - "type": "object" - }, - "etsy.MobileReview": { - "properties": { - "buyer_avatar": { - "type": "string" - }, - "buyer_login": { - "type": "string" - }, - "buyer_name": { - "type": "string" - }, - "buyer_user_id": { - "type": "string" + "release_groups": { + "items": { + "$ref": "#/definitions/es.BoxOfficeMojoReleaseGroup" + }, + "type": "array" }, - "date": { + "schema_version": { "type": "integer" }, - "language": { - "type": "string" + "sources": { + "items": { + "type": "string" + }, + "type": "array" }, - "listing_id": { + "title": { "type": "string" }, - "listing_image": { + "title_id": { "type": "string" }, - "listing_title": { + "title_path": { "type": "string" }, - "rating": { - "example": 5, - "type": "integer" - }, - "receipt_id": { + "title_url": { "type": "string" }, - "seller_replied": { - "type": "boolean" + "year_grosses": { + "items": { + "$ref": "#/definitions/es.BoxOfficeMojoYearGross" + }, + "type": "array" }, - "text": { - "type": "string" + "years_active": { + "items": { + "type": "integer" + }, + "type": "array" } }, "type": "object" }, - "etsy.MobileSearchResponse": { + "es.BoxOfficeMojoYearGross": { "properties": { - "count": { - "example": 112886, + "domestic": { "type": "integer" }, - "offset": { - "example": 0, + "domestic_share": { + "type": "number" + }, + "foreign": { "type": "integer" }, - "query": { - "example": "handmade mug", + "foreign_share": { + "type": "number" + }, + "rank_worldwide": { + "type": "integer" + }, + "release_group_id": { "type": "string" }, - "results": { - "items": { - "$ref": "#/definitions/etsy.MobileListingCard" - }, - "type": "array" + "release_group_name": { + "type": "string" + }, + "worldwide": { + "type": "integer" + }, + "year": { + "type": "integer" } }, "type": "object" }, - "etsy.MobileShop": { + "es.ChartEntry": { "properties": { - "average_rating": { - "example": 4.9, - "type": "number" + "app_id": { + "description": "App id in the store: the numeric App Store id or the Google Play package name.", + "type": "string" }, - "headline": { + "category": { + "description": "Store category or genre the chart covers. Empty for the overall chart.", "type": "string" }, - "icon": { + "chart_type": { + "description": "Kind of chart: `top_free`, `top_paid`, `top_grossing` or `new`.", "type": "string" }, - "is_star_seller": { - "type": "boolean" + "chart_uid": { + "description": "Unique id of this chart entry, combining store, collection, category, country, snapshot date and rank.", + "type": "string" }, - "open_date": { - "type": "integer" + "collection": { + "description": "Store's own id for the chart, for example `topgrossingapplications` or `GROSSING`.", + "type": "string" }, - "reviews_count": { - "example": 363, - "type": "integer" + "country": { + "description": "Storefront country code of the chart, for example `us`.", + "type": "string" }, - "seller_avatar": { + "crawled_at": { + "description": "Time the chart was fetched, in UTC (RFC 3339).", "type": "string" }, - "seller_login": { + "developer": { + "description": "Name of the app's developer or publisher as shown on the chart.", "type": "string" }, - "seller_name": { + "free": { + "description": "Whether the app is free to download.", + "type": "boolean" + }, + "platform": { + "description": "Platform is the Apple device platform this chart ranking is for — phone,\npad, or mac (Apple's appPlatforms vocabulary) — or empty for Google Play\n(Android has no separate device-family charts). A chart ranking is\nalways single-platform by construction, unlike AppRecord.Platforms.", "type": "string" }, - "shop_id": { - "example": "12345678", + "rank": { + "description": "Position of the app in the chart, starting at 1.", + "type": "integer" + }, + "score": { + "description": "Average user rating of the app. Set for Google Play charts.", + "type": "number" + }, + "snapshot_date": { + "description": "Date the chart was captured, in UTC (YYYY-MM-DD).", "type": "string" }, - "shop_name": { + "store": { + "description": "Which store the chart belongs to: `ios` or `android`.", "type": "string" }, - "sold_count": { - "type": "integer" + "title": { + "description": "App name as shown on the chart.", + "type": "string" + }, + "url": { + "description": "Store page of the app.", + "type": "string" } }, "type": "object" }, - "etsy.MobileShopCard": { + "es.ChromeExtensionChangeDay": { "properties": { - "active_listing_count": { + "count": { "type": "integer" }, - "is_vacation": { - "type": "boolean" - }, - "location": { + "date": { "type": "string" }, - "open_date": { + "rating_count_delta": { "type": "integer" }, - "seller_avatar": { - "type": "string" - }, - "shop_id": { - "example": "12345678", - "type": "string" - }, - "shop_name": { - "type": "string" + "users_delta": { + "type": "integer" } }, "type": "object" }, - "etsy.MobileShopListings": { + "es.ChromeExtensionChangeMetrics": { "properties": { - "listings": { + "daily": { "items": { - "$ref": "#/definitions/etsy.MobileListingCard" + "$ref": "#/definitions/es.ChromeExtensionChangeDay" }, "type": "array" }, - "offset": { - "example": 0, + "total": { "type": "integer" }, - "query": { - "type": "string" - }, - "shop_id": { - "example": "12345678", - "type": "string" + "types": { + "items": { + "$ref": "#/definitions/es.ChromeExtensionMetricBucket" + }, + "type": "array" + } + }, + "type": "object" + }, + "es.ChromeExtensionFacetItem": { + "properties": { + "count": { + "description": "Number of items with this value.", + "type": "integer" }, - "shop_name": { + "value": { + "description": "Facet value being counted.", "type": "string" } }, "type": "object" }, - "etsy.MobileShopReviews": { + "es.ChromeExtensionHistoryPoint": { "properties": { - "avg_rating": { - "example": 4.9, - "type": "number" + "category": { + "type": "string" }, - "count": { - "type": "integer" + "change_types": { + "items": { + "type": "string" + }, + "type": "array" }, - "offset": { - "example": 0, - "type": "integer" + "collects_data": { + "type": "boolean" }, - "reviews": { + "data_collected": { "items": { - "$ref": "#/definitions/etsy.MobileReview" + "type": "string" }, "type": "array" }, - "shop_id": { - "example": "12345678", + "developer": { "type": "string" }, - "shop_name": { + "developer_email": { "type": "string" }, - "total_rating_count": { + "host_permissions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "item_type": { + "type": "string" + }, + "manifest_version": { "type": "integer" - } - }, - "type": "object" - }, - "etsy.MobileShopSearchResponse": { - "properties": { - "query": { - "example": "ceramic", + }, + "name": { "type": "string" }, - "shops": { + "observed_at": { + "type": "string" + }, + "optional_host_permissions": { "items": { - "$ref": "#/definitions/etsy.MobileShopCard" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "etsy.listingResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/etsy.MobileListing" + "optional_permissions": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "permissions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "privacy_declarations": { + "items": { + "type": "string" + }, + "type": "array" + }, + "privacy_policy": { "type": "string" - } - }, - "type": "object" - }, - "etsy.listingReviewsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "rating": { + "type": "number" + }, + "rating_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/etsy.MobileListingReviews" + "rating_count_delta": { + "type": "integer" }, - "msg": { - "example": "OK", + "status": { "type": "string" - } - }, - "type": "object" - }, - "etsy.searchResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "users": { "type": "integer" }, - "data": { - "$ref": "#/definitions/etsy.MobileSearchResponse" + "users_delta": { + "type": "integer" }, - "msg": { - "example": "OK", + "version": { "type": "string" } }, "type": "object" }, - "etsy.shopListingsResponseDoc": { + "es.ChromeExtensionMetricBucket": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/etsy.MobileShopListings" + "users": { + "type": "integer" }, - "msg": { - "example": "OK", + "value": { "type": "string" } }, "type": "object" }, - "etsy.shopResponseDoc": { + "es.ChromeExtensionMetricSummary": { "properties": { - "code": { - "example": 200, - "type": "integer" + "average_rating": { + "type": "number" }, - "data": { - "$ref": "#/definitions/etsy.MobileShop" + "developer_emails": { + "type": "integer" }, - "msg": { - "example": "OK", + "last_crawled_at": { "type": "string" - } - }, - "type": "object" - }, - "etsy.shopReviewsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "named_developers": { "type": "integer" }, - "data": { - "$ref": "#/definitions/etsy.MobileShopReviews" + "privacy_policies": { + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "etsy.shopSearchResponseDoc": { - "properties": { - "code": { - "example": 200, + "total": { "type": "integer" }, - "data": { - "$ref": "#/definitions/etsy.MobileShopSearchResponse" + "total_ratings": { + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "total_users": { + "type": "integer" } }, "type": "object" }, - "euronews.AuthorResponse": { + "es.ChromeExtensionRecord": { "properties": { - "articles": { + "all_permissions": { + "description": "Every permission and site pattern from the four permission lists, without duplicates.", "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "type": "string" }, "type": "array" }, - "job_title": { - "description": "JobTitle is read directly from the page's own Person structured data.\nEuronews currently sends the same value (\"Journaliste\") for every\nprofile checked, regardless of the author's actual role -- it is\nreproduced as-is rather than translated or normalized.", - "type": "string" + "blank_identity_streak": { + "description": "BlankIdentityStreak counts complete, ID-matching item payloads whose card\ntitle and literal manifest name are both unavailable. It is distinct from\nNotFoundStreak: malformed payloads are upstream errors and never update it.\nNo omitempty: a valid active snapshot must reset it through partial upsert.", + "type": "integer" }, - "name": { + "category": { + "description": "Store category of the item.", "type": "string" }, - "social_links": { - "description": "SocialLinks lists whatever external profile link(s) the page's own\nstructured data provides (typically a single X/Twitter profile URL).\nNot every author has one.", + "collects_data": { + "description": "Whether the store listing says the item collects user data.", + "type": "boolean" + }, + "data_collected": { + "description": "Categories of user data the developer says the item collects.", "items": { "type": "string" }, "type": "array" }, - "team": { - "description": "Team is the editorial/language-desk label from the page's own Person\nstructured data (e.g. \"Equipe de langue anglaise\"), reproduced as-is.", + "description": { + "description": "Full description from the store listing.", "type": "string" }, - "url": { + "developer": { + "description": "Name of the item's developer as shown on the store listing.", "type": "string" - } - }, - "type": "object" - }, - "ew.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/ew.HeadlineItem" - }, - "type": "array" }, - "biography": { + "developer_email": { + "description": "Developer contact email disclosed on the store listing, in lowercase.", + "type": "string" + }, + "discovery_sources": { + "description": "DiscoverySources lists the public catalogs that supplied this extension ID.", "items": { "type": "string" }, "type": "array" }, - "highlights": { + "first_seen": { + "description": "Time the item was first recorded in the dataset, in UTC (RFC 3339).", + "type": "string" + }, + "has_broad_host_access": { + "description": "Whether the extension can reach all sites, for example through ``.", + "type": "boolean" + }, + "host_permissions": { + "description": "Site patterns the extension requests access to when installed.", "items": { "type": "string" }, "type": "array" }, - "job_title": { + "icon": { + "description": "URL of the item's icon.", "type": "string" }, - "name": { + "id": { + "description": "Chrome Web Store item id. Use it with the item endpoint.", "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "ew.HeadlineItem": { - "properties": { - "author": { + "item_type": { + "description": "Kind of item: `extension`, `theme`, `app` or `unknown`.", "type": "string" }, - "image_url": { + "last_crawled_at": { + "description": "Time the item's data was last fetched, in UTC (RFC 3339).", "type": "string" }, - "published_at": { + "last_seen": { + "description": "Time the item was last seen on the store, in UTC (RFC 3339).", "type": "string" }, - "summary": { - "type": "string" + "manifest_version": { + "description": "Manifest version of the extension: `2` or `3`.", + "type": "integer" }, - "title": { + "min_browser_version": { + "description": "Minimum browser version the item requires.", "type": "string" }, - "type": { + "name": { + "description": "Item name as shown on its store listing.", "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "expedia.ActivityListing": { - "properties": { - "duration": { - "type": "string" + "not_found_streak": { + "description": "NotFoundStreak counts consecutive crawls that returned not-found for an\notherwise-active item. Removal is only confirmed once it reaches the\nworker's threshold, so a transient upstream block does not delist a live\nitem. No omitempty: a successful crawl must write 0 to reset the streak\nthrough the partial-merge upsert.", + "type": "integer" }, - "free_cancellation": { - "type": "boolean" + "optional_host_permissions": { + "description": "Site patterns the extension may ask for access to later.", + "items": { + "type": "string" + }, + "type": "array" }, - "id": { - "type": "string" + "optional_permissions": { + "description": "Permissions the extension may ask for later.", + "items": { + "type": "string" + }, + "type": "array" }, - "name": { - "type": "string" + "permissions": { + "description": "List of permissions the extension requests when installed.", + "items": { + "type": "string" + }, + "type": "array" }, - "price": { + "privacy_declarations": { + "description": "Privacy commitments the developer declares on the store listing.", + "items": { + "type": "string" + }, + "type": "array" + }, + "privacy_policy": { + "description": "Link to the developer's privacy policy.", "type": "string" }, - "review_count": { + "rating": { + "description": "Average user rating shown on the store listing.", + "type": "number" + }, + "rating_count": { + "description": "Number of ratings behind the average rating.", "type": "integer" }, - "review_label": { - "type": "string" + "rating_count_delta": { + "description": "Change in `rating_count` since the previous observation.", + "type": "integer" }, - "review_score": { - "type": "string" + "schema_version": { + "description": "Version of the record layout.", + "type": "integer" }, - "thumbnail_url": { + "screenshots": { + "description": "URLs of the screenshots on the store listing.", + "items": { + "type": "string" + }, + "type": "array" + }, + "size": { + "description": "Package size of the item as the store shows it.", "type": "string" - } - }, - "type": "object" - }, - "expedia.ActivitySearchOption": { - "properties": { - "currency": { - "example": "USD", + }, + "status": { + "description": "Whether the item is still on the store: `active` or `removed`.", "type": "string" }, - "destination": { - "example": "Miami", + "summary": { + "description": "Short summary shown at the top of the store listing.", "type": "string" }, - "end_date": { - "example": "2026-08-17", + "trend_score": { + "description": "Score for ranking trending items, built from `users_delta` and `rating_count_delta`.", + "type": "number" + }, + "updated": { + "description": "Date the item was last updated on the store (YYYY-MM-DD).", "type": "string" }, - "locale": { - "example": "en_US", + "url": { + "description": "Link to the item's store listing.", "type": "string" }, - "page": { - "example": 1, + "users": { + "description": "Number of users shown on the store listing.", "type": "integer" }, - "page_size": { - "example": 20, + "users_delta": { + "description": "Change in `users` since the previous observation.", "type": "integer" }, - "start_date": { - "example": "2026-08-04", + "version": { + "description": "Current version of the item.", "type": "string" } }, - "required": [ - "destination", - "end_date", - "start_date" - ], "type": "object" }, - "expedia.ActivitySearchResponse": { + "es.CreatorRecord": { "properties": { - "activities": { - "items": { - "$ref": "#/definitions/expedia.ActivityListing" - }, - "type": "array" - }, - "destination": { + "avatar_url": { + "description": "URL of the profile picture.", "type": "string" }, - "page": { + "avg_views": { + "description": "top-level mirror of PostStats.AvgViews for sort/filter", "type": "integer" }, - "region_id": { + "bio": { + "description": "Profile biography text.", "type": "string" }, - "total_count": { - "type": "integer" - } - }, - "type": "object" - }, - "expedia.FlightOffer": { - "properties": { - "airline": { + "bio_link": { + "description": "Link shown in the profile biography.", "type": "string" }, - "arrival_time": { - "type": "string" + "brand_affiliations": { + "description": "Brands linked to the creator.", + "items": { + "type": "string" + }, + "type": "array" }, - "departure_time": { + "country": { + "description": "Creator's country or region code in lowercase, for example `us`.", "type": "string" }, - "duration_summary": { + "creator_uid": { + "description": "Unique creator id, made of the platform and the handle, for example `tiktok:@bubble`.", "type": "string" }, - "price": { + "email": { + "description": "Business contact email found for the creator.", "type": "string" }, - "price_note": { + "email_status": { + "description": "Verification status of the contact email.", "type": "string" }, - "route": { + "engagement_rate": { + "description": "headline = by-view (TikTok standard); see PostStats for both", + "type": "number" + }, + "first_seen": { + "description": "FirstSeen is the discovery timestamp: set once when the creator is first\nindexed, and never changed by a later re-crawl. Values recorded before\n2026-08-29 are unreliable and should not be used for cohort or tenure\nanalysis.", "type": "string" }, - "stops": { + "follower_count": { + "description": "Number of followers.", "type": "integer" - } - }, - "type": "object" - }, - "expedia.FlightsSearchOption": { - "properties": { - "adults": { - "example": 1, + }, + "following_count": { + "description": "Number of accounts the creator follows.", "type": "integer" }, - "cabin_class": { - "example": "COACH", + "language": { + "description": "Language code set on the creator's profile.", "type": "string" }, - "currency": { - "example": "USD", + "last_crawled": { + "description": "Time the creator's profile was last fetched, in UTC (RFC 3339).", "type": "string" }, - "departure_date": { - "example": "2026-08-17", + "last_post_at": { + "description": "top-level mirror of PostStats.LastPostAt for recency filter", "type": "string" }, - "destination": { - "example": "LAX", + "niche": { + "description": "Niche is the DISCOVERY SEED TERM that surfaced this creator (the keyword/hashtag/\nexplore-category the crawler used), NOT a content classification. It is single-valued\nand first-write-wins, so a creator found via the \"korean skincare\" keyword sweep is\ntagged \"skincare\" whatever they actually post about. Do not present it as a category;\nuse NicheClassified for that.", "type": "string" }, - "locale": { - "example": "en_US", + "niche_classified": { + "description": "NicheClassified is the content niche DERIVED FROM THE BIO by classifyNiche() in the\ncreatorsdb-enrich worker. Independent of Niche by construction: it is computed for\nevery creator with a bio, including those that already carry a seed term, so the two\nfields never contaminate each other and \"which is this?\" is answered by the field\nname rather than an unbackfillable provenance flag.", "type": "string" }, - "origin": { - "example": "JFK", + "nickname": { + "description": "Display name shown on the creator's profile.", "type": "string" }, - "return_date": { - "example": "2026-08-18", + "platform": { + "description": "Social platform the creator is on, for example `tiktok`.", "type": "string" }, - "trip_type": { - "example": "round_trip", + "post_stats": { + "allOf": [ + { + "$ref": "#/definitions/es.PostStatsAgg" + } + ], + "description": "Averages and posting habits worked out from a sample of the creator's recent posts." + }, + "sec_uid": { + "description": "Stable account id the platform assigns to the creator.", "type": "string" - } - }, - "required": [ - "departure_date", - "destination", - "origin" - ], - "type": "object" - }, - "expedia.FlightsSearchResponse": { - "properties": { - "departure_date": { + }, + "source": { + "description": "Label for where the creator entry came from.", "type": "string" }, - "destination": { + "status": { + "description": "\"\" active | \"deleted\" | \"private\" — refresh marks these to skip future crawls", "type": "string" }, - "offers": { - "items": { - "$ref": "#/definitions/expedia.FlightOffer" - }, - "type": "array" + "total_likes": { + "description": "Total likes received across the creator's videos.", + "type": "integer" }, - "origin": { + "unique_id": { + "description": "Creator's handle on the platform, without the `@`.", "type": "string" }, - "return_date": { - "type": "string" + "verified": { + "description": "Whether the profile has the platform's verified badge.", + "type": "boolean" + }, + "video_count": { + "description": "Number of videos posted.", + "type": "integer" } }, "type": "object" }, - "expedia.LocationSearchOption": { + "es.DatasetFacetItem": { "properties": { - "currency": { - "example": "USD", - "type": "string" - }, - "locale": { - "example": "en_US", - "type": "string" + "count": { + "type": "integer" }, - "term": { - "example": "Miami", + "value": { "type": "string" } }, - "required": [ - "term" - ], "type": "object" }, - "expedia.LocationSearchResponse": { + "es.DoorDashStoreDatasetFacetItem": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/expedia.LocationSuggestion" - }, - "type": "array" + "count": { + "type": "integer" }, - "term": { + "key": { "type": "string" } }, "type": "object" }, - "expedia.LocationSuggestion": { + "es.DoorDashStoreDatasetItem": { "properties": { - "airport_code": { + "address": { "type": "string" }, - "geo_type": { - "type": "string" + "asap_available": { + "type": "boolean" }, - "latitude": { + "average_rating": { "type": "number" }, - "location_full_name": { + "city": { "type": "string" }, - "longitude": { - "type": "number" - }, - "primary_text": { + "city_region": { "type": "string" }, - "property_id": { + "country": { "type": "string" }, - "region_id": { + "cover_image_url": { "type": "string" }, - "secondary_text": { + "crawled_at": { "type": "string" }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "expedia.PropertyDetailOption": { - "properties": { - "adults": { - "example": 2, - "type": "integer" + "dash_pass_eligible": { + "type": "boolean" }, - "check_in": { - "example": "2026-08-04", + "discovery_city": { + "description": "Discovery geography identifies the GeoNames seed cell that produced this\nobservation. It is not a claim that the store's postal city matches the\nseed city's name; hydrated City/State come from the store-info card.", "type": "string" }, - "check_out": { - "example": "2026-08-05", + "discovery_country": { "type": "string" }, - "currency": { - "example": "USD", + "discovery_state": { "type": "string" }, - "locale": { - "example": "en_US", + "display_asap_time": { "type": "string" }, - "property_id": { - "example": "111893452", + "display_status": { "type": "string" - } - }, - "required": [ - "check_in", - "check_out", - "property_id" - ], - "type": "object" - }, - "expedia.PropertyDetailResponse": { - "properties": { - "address": { + }, + "distance_meters": { + "type": "number" + }, + "first_seen_at": { "type": "string" }, - "amenities": { - "items": { - "type": "string" - }, - "type": "array" + "has_phone": { + "type": "boolean" }, - "city": { + "has_website": { + "type": "boolean" + }, + "id": { "type": "string" }, - "country_code": { + "last_seen_at": { "type": "string" }, "latitude": { "type": "number" }, + "location": { + "allOf": [ + { + "$ref": "#/definitions/es.GeoPoint" + } + ], + "description": "Location is a geo_point ([lon, lat] order in the GeoPoint helper)." + }, "longitude": { "type": "number" }, "name": { "type": "string" }, - "property_id": { + "number_of_ratings": { + "type": "integer" + }, + "phone": { "type": "string" }, - "province": { + "pickup_available": { + "type": "boolean" + }, + "postal_code": { "type": "string" }, - "star_rating": { - "type": "number" + "price_range": { + "type": "integer" }, - "vip_message": { + "run_id": { "type": "string" - } - }, - "type": "object" - }, - "expedia.PropertyFilterField": { - "properties": { - "label": { + }, + "schema_version": { + "type": "integer" + }, + "search_text": { "type": "string" }, - "options": { + "state": { + "type": "string" + }, + "store_id": { + "type": "string" + }, + "street": { + "type": "string" + }, + "tags": { + "description": "Tags is the marketplace's own comma-split tag list, kept as a keyword so\nit can back a terms facet; SearchText is the free-text projection over\nname + address + tags.", "items": { - "$ref": "#/definitions/expedia.PropertyFilterOption" + "type": "string" }, "type": "array" }, - "range_max": { - "type": "number" + "top_items": { + "description": "TopItems is a bounded preview of the merchant's menu, stored unindexed.", + "items": { + "$ref": "#/definitions/es.DoorDashStoreTopItem" + }, + "type": "array" }, - "range_min": { - "type": "number" + "url": { + "type": "string" }, - "type": { + "website": { "type": "string" } }, "type": "object" }, - "expedia.PropertyFilterOption": { + "es.DoorDashStoreRecord": { "properties": { - "filter_id": { - "type": "string" - }, - "label": { + "address": { "type": "string" }, - "selected": { + "asap_available": { "type": "boolean" }, - "value": { + "average_rating": { + "type": "number" + }, + "city": { "type": "string" - } - }, - "type": "object" - }, - "expedia.PropertyFilterSection": { - "properties": { - "fields": { - "items": { - "$ref": "#/definitions/expedia.PropertyFilterField" - }, - "type": "array" }, - "title": { + "city_region": { "type": "string" - } - }, - "type": "object" - }, - "expedia.PropertyFiltersOption": { - "properties": { - "adults": { - "example": 2, - "type": "integer" }, - "check_in": { - "example": "2026-08-04", + "country": { "type": "string" }, - "check_out": { - "example": "2026-08-05", + "cover_image_url": { "type": "string" }, - "currency": { - "example": "USD", + "crawled_at": { "type": "string" }, - "destination": { - "example": "Miami", + "dash_pass_eligible": { + "type": "boolean" + }, + "discovery_city": { + "description": "Discovery geography identifies the GeoNames seed cell that produced this\nobservation. It is not a claim that the store's postal city matches the\nseed city's name; hydrated City/State come from the store-info card.", "type": "string" }, - "locale": { - "example": "en_US", + "discovery_country": { "type": "string" }, - "rooms": { - "example": 1, - "type": "integer" - } - }, - "required": [ - "check_in", - "check_out", - "destination" - ], - "type": "object" - }, - "expedia.PropertyFiltersResponse": { - "properties": { - "destination": { + "discovery_state": { "type": "string" }, - "region_id": { + "display_asap_time": { "type": "string" }, - "sections": { - "items": { - "$ref": "#/definitions/expedia.PropertyFilterSection" - }, - "type": "array" + "display_status": { + "type": "string" }, - "sort_options": { - "items": { - "$ref": "#/definitions/expedia.PropertyFilterOption" - }, - "type": "array" - } - }, - "type": "object" - }, - "expedia.PropertyListing": { - "properties": { - "amenities": { - "items": { - "type": "string" - }, - "type": "array" + "first_seen_at": { + "type": "string" }, - "badges": { - "items": { - "type": "string" - }, - "type": "array" + "has_phone": { + "type": "boolean" + }, + "has_website": { + "type": "boolean" }, "id": { "type": "string" }, + "last_seen_at": { + "type": "string" + }, + "latitude": { + "type": "number" + }, + "location": { + "allOf": [ + { + "$ref": "#/definitions/es.GeoPoint" + } + ], + "description": "Location is a geo_point ([lon, lat] order in the GeoPoint helper)." + }, + "longitude": { + "type": "number" + }, "name": { "type": "string" }, - "nightly_price": { + "number_of_ratings": { + "type": "integer" + }, + "phone": { "type": "string" }, - "price": { + "pickup_available": { + "type": "boolean" + }, + "postal_code": { "type": "string" }, - "review_count": { + "price_range": { "type": "integer" }, - "review_score": { - "type": "number" + "run_id": { + "type": "string" }, - "review_title": { + "schema_version": { + "type": "integer" + }, + "search_text": { "type": "string" }, - "strikeout_price": { + "state": { "type": "string" }, - "thumbnail_url": { + "store_id": { + "type": "string" + }, + "street": { "type": "string" }, + "tags": { + "description": "Tags is the marketplace's own comma-split tag list, kept as a keyword so\nit can back a terms facet; SearchText is the free-text projection over\nname + address + tags.", + "items": { + "type": "string" + }, + "type": "array" + }, + "top_items": { + "description": "TopItems is a bounded preview of the merchant's menu, stored unindexed.", + "items": { + "$ref": "#/definitions/es.DoorDashStoreTopItem" + }, + "type": "array" + }, "url": { "type": "string" + }, + "website": { + "type": "string" } }, "type": "object" }, - "expedia.PropertyReview": { + "es.DoorDashStoreTopItem": { "properties": { - "date": { + "image_url": { "type": "string" }, - "message": { + "item_id": { "type": "string" }, - "rating_label": { + "name": { "type": "string" }, - "reviewer_name": { + "price": { "type": "string" - }, - "verified": { - "type": "boolean" } }, "type": "object" }, - "expedia.PropertyReviewsOption": { + "es.FacebookPageCandidate": { "properties": { - "adults": { - "example": 2, - "type": "integer" + "address": { + "type": "string" }, - "check_in": { - "example": "2026-08-04", + "category": { "type": "string" }, - "check_out": { - "example": "2026-08-05", + "contact_observed_at": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "discovered_at": { "type": "string" }, - "currency": { - "example": "USD", + "discovery_source": { "type": "string" }, - "locale": { - "example": "en_US", + "email": { "type": "string" }, - "property_id": { - "example": "111893452", + "hydrated_at": { "type": "string" - } - }, - "required": [ - "check_in", - "check_out", - "property_id" - ], - "type": "object" - }, - "expedia.PropertyReviewsResponse": { - "properties": { - "overall_rating": { + }, + "identifier": { "type": "string" }, - "property_id": { + "likes": { + "type": "integer" + }, + "page_id": { "type": "string" }, - "reviews": { + "phones": { "items": { - "$ref": "#/definitions/expedia.PropertyReview" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "expedia.PropertySearchOption": { - "properties": { - "adults": { - "example": 2, - "type": "integer" }, - "check_in": { - "example": "2026-08-04", + "source_url": { "type": "string" }, - "check_out": { - "example": "2026-08-05", + "status": { "type": "string" }, - "currency": { - "example": "USD", + "title": { "type": "string" }, - "destination": { - "example": "Miami", + "website": { "type": "string" }, - "locale": { - "example": "en_US", + "whatsapp": { "type": "string" - }, - "page": { - "example": 1, - "type": "integer" - }, - "page_size": { - "example": 20, + } + }, + "type": "object" + }, + "es.FacebookPageDatasetFacetItem": { + "properties": { + "count": { "type": "integer" }, - "rooms": { - "example": 1, - "type": "integer" + "value": { + "type": "string" } }, - "required": [ - "check_in", - "check_out", - "destination" - ], "type": "object" }, - "expedia.PropertySearchResponse": { + "es.FacebookPageDatasetItem": { "properties": { - "check_in": { + "address": { "type": "string" }, - "check_out": { + "category": { "type": "string" }, - "destination": { + "contact_observed_at": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "discovered_at": { "type": "string" }, - "page": { + "discovery_source": { + "type": "string" + }, + "email": { + "type": "string" + }, + "hydrated_at": { + "type": "string" + }, + "identifier": { + "type": "string" + }, + "likes": { "type": "integer" }, - "properties": { + "page_id": { + "type": "string" + }, + "phones": { "items": { - "$ref": "#/definitions/expedia.PropertyListing" + "type": "string" }, "type": "array" }, - "region_id": { + "source_url": { "type": "string" }, - "results_label": { + "status": { "type": "string" - } - }, - "type": "object" - }, - "expedia.expediaActivitySearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/expedia.ActivitySearchResponse" + "title": { + "type": "string" }, - "msg": { - "example": "OK", + "website": { + "type": "string" + }, + "whatsapp": { "type": "string" } }, "type": "object" }, - "expedia.expediaFlightsSearchResponseDoc": { + "es.FacetItem": { "properties": { - "code": { - "example": 200, + "count": { + "description": "Number of open job postings with this value.", "type": "integer" }, - "data": { - "$ref": "#/definitions/expedia.FlightsSearchResponse" - }, - "msg": { - "example": "OK", + "key": { + "description": "Facet value, for example a company, department or location name.", "type": "string" } }, "type": "object" }, - "expedia.expediaLocationSearchResponseDoc": { + "es.GeoPoint": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/expedia.LocationSearchResponse" + "lat": { + "description": "Latitude in decimal degrees.", + "type": "number" }, - "msg": { - "example": "OK", - "type": "string" + "lon": { + "description": "Longitude in decimal degrees.", + "type": "number" } }, "type": "object" }, - "expedia.expediaPropertyDetailResponseDoc": { + "es.GithubGeo": { "properties": { - "code": { - "example": 200, - "type": "integer" + "city": { + "description": "Name of the city resolved from the profile location.", + "type": "string" }, - "data": { - "$ref": "#/definitions/expedia.PropertyDetailResponse" + "country": { + "description": "Name of the country resolved from the profile location.", + "type": "string" }, - "msg": { - "example": "OK", + "country_code": { + "description": "Country code resolved from the profile location, for example `DE`.", + "type": "string" + }, + "location": { + "allOf": [ + { + "$ref": "#/definitions/es.GithubGeoPoint" + } + ], + "description": "Coordinates of the resolved place." + }, + "state": { + "description": "Name of the state or region resolved from the profile location.", "type": "string" } }, "type": "object" }, - "expedia.expediaPropertyFiltersResponseDoc": { + "es.GithubGeoPoint": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/expedia.PropertyFiltersResponse" + "lat": { + "description": "Latitude in decimal degrees.", + "type": "number" }, - "msg": { - "example": "OK", - "type": "string" + "lon": { + "description": "Longitude in decimal degrees.", + "type": "number" } }, "type": "object" }, - "expedia.expediaPropertyReviewsResponseDoc": { + "es.GithubSocialLink": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/expedia.PropertyReviewsResponse" + "provider": { + "description": "Social network the link points to.", + "type": "string" }, - "msg": { - "example": "OK", + "url": { + "description": "Link to the account on that network.", "type": "string" } }, "type": "object" }, - "expedia.expediaPropertySearchResponseDoc": { + "es.GithubUserDatasetFacetItem": { "properties": { - "code": { - "example": 200, + "count": { + "description": "Number of users with this value.", "type": "integer" }, - "data": { - "$ref": "#/definitions/expedia.PropertySearchResponse" - }, - "msg": { - "example": "OK", + "value": { + "description": "Facet value being counted.", "type": "string" } }, "type": "object" }, - "expresstribune.AuthorResponse": { + "es.GithubUserDatasetItem": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" + "account_age_years": { + "description": "Age of the account in years, to one decimal, at the time of `crawled_at`.", + "type": "number" }, - "has_next_page": { + "active_90d": { + "description": "Whether the user's latest activity was within 90 days of `crawled_at`.", "type": "boolean" }, - "name": { + "avatar_url": { + "description": "URL of the profile picture.", "type": "string" }, - "page": { - "type": "integer" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "extract.Option": { - "properties": { - "instructions": { - "example": "Extract the product name and current price.", + "bio": { + "description": "Profile biography text.", "type": "string" }, - "render": { - "enum": [ - "auto", - "http", - "browser" - ], - "example": "auto", + "blog": { + "description": "Website or blog address on the profile.", "type": "string" }, - "schema": { - "additionalProperties": {}, - "type": "object" + "company": { + "description": "Employer name as written on the profile.", + "type": "string" }, - "url": { - "example": "https://example.com/product", + "company_normalized": { + "description": "Company name cleaned for matching: lowercased, with any leading `@` removed.", "type": "string" - } - }, - "required": [ - "schema", - "url" - ], - "type": "object" - }, - "extract.Result": { - "properties": { - "data": {}, - "final_url": { + }, + "crawled_at": { + "description": "Time the profile was fetched, in UTC (RFC 3339).", "type": "string" }, - "model": { + "created_at": { + "description": "Time the GitHub account was created, in UTC (RFC 3339).", "type": "string" }, - "truncated": { - "description": "Truncated is true when the page was longer than the extraction input\nlimit, so only its first part was considered.", - "example": false, - "type": "boolean" + "distance_m": { + "description": "Distance from the query point in metres. Set when results are sorted by distance.", + "type": "number" }, - "url": { + "domains": { + "description": "Interest areas inferred from the profile text, for example `ml-ai`, `frontend` or `devops`.", + "items": { + "type": "string" + }, + "type": "array" + }, + "email": { + "description": "Public email address on the profile.", "type": "string" }, - "usage": { - "$ref": "#/definitions/extract.Usage" - } - }, - "type": "object" - }, - "extract.Usage": { - "properties": { - "input_tokens": { - "type": "integer" + "follower_following_ratio": { + "description": "Followers divided by accounts followed, to two decimals. Equals `followers` when the user follows nobody.", + "type": "number" }, - "output_tokens": { + "followers": { + "description": "Number of followers.", "type": "integer" }, - "total_tokens": { - "type": "integer" - } - }, - "type": "object" - }, - "extract.responseDoc": { - "properties": { - "code": { - "example": 200, + "following": { + "description": "Number of accounts the user follows.", "type": "integer" }, - "data": { - "$ref": "#/definitions/extract.Result" + "geo": { + "allOf": [ + { + "$ref": "#/definitions/es.GithubGeo" + } + ], + "description": "Place resolved from the profile location." }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "facebook.MarketplaceListing": { - "properties": { - "city": { - "example": "Austin", + "has_blog": { + "description": "Whether the profile shows a website or blog.", + "type": "boolean" + }, + "has_email": { + "description": "Whether the profile shows a public email address.", + "type": "boolean" + }, + "has_twitter": { + "description": "Whether the profile shows a Twitter or X username.", + "type": "boolean" + }, + "hireable": { + "description": "Whether the user has marked themselves as available for hire.", + "type": "boolean" + }, + "html_url": { + "description": "Link to the user's GitHub profile page.", "type": "string" }, "id": { - "example": "1548909030206114", - "type": "string" + "description": "Numeric GitHub user id.", + "type": "integer" }, - "image": { - "example": "https://scontent.fsgn12-1.fna.fbcdn.net/v/t39.84726-6/763156366_1318061980540811_5053765390157515593_n.jpg", + "influence_tier": { + "description": "Follower-based tier: `nano` (under 50), `micro` (50 to 499), `mid` (500 to 4,999), `macro` (5,000 to 49,999) or `mega` (50,000 or more).", "type": "string" }, - "price": { - "$ref": "#/definitions/facebook.MarketplacePrice" + "is_bot": { + "description": "Whether the account is a bot.", + "type": "boolean" }, - "state": { - "example": "TX", - "type": "string" + "is_org": { + "description": "Whether the account is an organization.", + "type": "boolean" }, - "title": { - "example": "Electric bike", - "type": "string" + "is_suspected_automation": { + "description": "Whether the account looks like a commit farm or mass repository generator.", + "type": "boolean" }, - "url": { - "example": "https://www.facebook.com/marketplace/item/1548909030206114/", - "type": "string" - } - }, - "type": "object" - }, - "facebook.MarketplacePrice": { - "properties": { - "amount": { - "example": "4500.00", + "last_active_at": { + "description": "Time of the user's latest recorded activity, in UTC (RFC 3339).", "type": "string" }, - "currency": { - "example": "USD", + "location_raw": { + "description": "Free-text location as written on the profile.", "type": "string" }, - "formatted": { - "description": "Formatted is Facebook's own display string, e.g. \"$4,500\" or \"FREE\".", - "example": "$4,500", + "login": { + "description": "GitHub username of the account.", "type": "string" }, - "isFree": { - "description": "IsFree is true when the listing has no price (Formatted == \"FREE\").", - "example": false, - "type": "boolean" - } - }, - "type": "object" - }, - "facebook.MarketplaceSearchResult": { - "properties": { - "category": { - "example": "vehicles", + "name": { + "description": "Display name on the profile.", "type": "string" }, - "hasMore": { - "example": true, + "prs_30d": { + "description": "Number of pull request events the user had in the last 30 days.", + "type": "integer" + }, + "public_gists": { + "description": "Number of public gists.", + "type": "integer" + }, + "public_repos": { + "description": "Number of public repositories.", + "type": "integer" + }, + "pushes_30d": { + "description": "Number of pushes the user made in the last 30 days.", + "type": "integer" + }, + "rank_score": { + "description": "Overall notability score. Followers count most and recent activity adds a smaller amount. It is 0 for suspected automation.", + "type": "integer" + }, + "reachable": { + "description": "Whether the profile shows any public way to make contact: email, Twitter or X, a website or a linked social account.", "type": "boolean" }, - "listings": { + "reviews_30d": { + "description": "Number of pull request review events, including review comments, the user made in the last 30 days.", + "type": "integer" + }, + "schema_version": { + "description": "Version of the record layout.", + "type": "integer" + }, + "social_accounts": { + "description": "Social accounts linked on the profile.", "items": { - "$ref": "#/definitions/facebook.MarketplaceListing" + "$ref": "#/definitions/es.GithubSocialLink" }, "type": "array" }, - "location": { - "example": "austin", - "type": "string" + "social_count": { + "description": "Number of social accounts linked on the profile.", + "type": "integer" }, - "query": { - "example": "bike", + "twitter_username": { + "description": "Twitter or X username on the profile.", "type": "string" }, - "sourceUrl": { - "example": "https://www.facebook.com/marketplace/austin/search/?query=bike", + "type": { + "description": "Account type on GitHub, for example `User` or `Organization`.", "type": "string" } }, "type": "object" }, - "facebook.Page": { + "es.GithubUserRecord": { "properties": { - "address": { - "example": "9985 Arthur Hills CT, Sacramento, CA, United States, California", + "account_age_years": { + "description": "Age of the account in years, to one decimal, at the time of `crawled_at`.", + "type": "number" + }, + "active_90d": { + "description": "Whether the user's latest activity was within 90 days of `crawled_at`.", + "type": "boolean" + }, + "avatar_url": { + "description": "URL of the profile picture.", "type": "string" }, - "category": { - "example": "Marketing Agency", + "bio": { + "description": "Profile biography text.", + "type": "string" + }, + "blog": { + "description": "Website or blog address on the profile.", "type": "string" }, "company": { - "example": "Seo Marketing Wiz", + "description": "Employer name as written on the profile.", "type": "string" }, - "email": { - "example": "contact@seomarketingwiz.com", + "company_normalized": { + "description": "Company name cleaned for matching: lowercased, with any leading `@` removed.", "type": "string" }, - "emails": { - "description": "Fields populated by the Go-native browser-rendered extractor (parse.go).", - "example": [ - "[\"contact@seomarketingwiz.com\"]" - ], + "crawled_at": { + "description": "Time the profile was fetched, in UTC (RFC 3339).", + "type": "string" + }, + "created_at": { + "description": "Time the GitHub account was created, in UTC (RFC 3339).", + "type": "string" + }, + "domains": { + "description": "Interest areas inferred from the profile text, for example `ml-ai`, `frontend` or `devops`.", "items": { "type": "string" }, "type": "array" }, - "hours": { - "description": "Hours is the About panel's business-hours summary text (e.g. \"Open now\",\n\"Closes at 9 PM\", \"Opening soon\"), when the Page publishes one. Not a\nstructured weekly schedule.", - "example": "Open now", + "email": { + "description": "Public email address on the profile.", "type": "string" }, - "intro": { - "example": "Marketing professionals with 20 years of experience wanting to provide digital marketing services to", - "type": "string" + "follower_following_ratio": { + "description": "Followers divided by accounts followed, to two decimals. Equals `followers` when the user follows nobody.", + "type": "number" }, - "latestPostAt": { - "example": "2020-11-26T00:00:00.000Z", - "type": "string" + "followers": { + "description": "Number of followers.", + "type": "integer" }, - "og": { - "properties": { - "description": { - "example": "SEO Marketing Wiz, Sacramento, California. 521 likes. Marketing professionals with 20 years of experience wanting to provide digital marketing services to", - "type": "string" - }, - "image": { - "example": "https://scontent-dfw5-2.xx.fbcdn.net/v/t39.30808-1/279690292_375554114584870_8657447943866659854_n.png?cstp=mx200x200&ctp=s200x200&_nc_cat=100&ccb=1-7&_nc_sid=3ab345&_nc_ohc=cJ5c41eGYbkQ7kNvwFpyUu7&_nc_oc=AdmE_uznxjhjbFVzL_VatcILSjMcv56Yft-_-icARncJRyR5i3CLrlh-9ZnkTHvyQWg&_nc_zt=24&_nc_ht=scontent-dfw5-2.xx&_nc_gid=JfTmimRDWsc3S1tfuZSW1A&oh=00_AfIjr4QtVdPoXb42NKwayq1Ud-aqW3G8YNoQ8Q9d2eDFEQ&oe=6827F32E", - "type": "string" - }, - "title": { - "example": "SEO Marketing Wiz | Sacramento CA", - "type": "string" + "following": { + "description": "Number of accounts the user follows.", + "type": "integer" + }, + "geo": { + "allOf": [ + { + "$ref": "#/definitions/es.GithubGeo" } - }, - "type": "object" + ], + "description": "Place resolved from the profile location." }, - "pageId": { - "description": "PageID is Facebook's stable numeric Page identifier -- unlike the vanity\nname/handle, it never changes even if the Page is renamed.", - "example": "100063763354867", - "type": "string" + "has_blog": { + "description": "Whether the profile shows a website or blog.", + "type": "boolean" }, - "phones": { - "example": [ - "[\"+1 555 123 4567\"]" - ], - "items": { - "type": "string" - }, - "type": "array" + "has_email": { + "description": "Whether the profile shows a public email address.", + "type": "boolean" }, - "priceRange": { - "description": "PriceRange is the About panel's price-tier text (e.g. \"Price range · $$\"),\nwhen the Page publishes one.", - "example": "Price range · $$", + "has_twitter": { + "description": "Whether the profile shows a Twitter or X username.", + "type": "boolean" + }, + "hireable": { + "description": "Whether the user has marked themselves as available for hire.", + "type": "boolean" + }, + "html_url": { + "description": "Link to the user's GitHub profile page.", "type": "string" }, - "reviewCount": { - "example": 0, + "id": { + "description": "Numeric GitHub user id.", "type": "integer" }, - "sourceUrl": { - "example": "https://www.facebook.com/nike/about", + "influence_tier": { + "description": "Follower-based tier: `nano` (under 50), `micro` (50 to 499), `mid` (500 to 4,999), `macro` (5,000 to 49,999) or `mega` (50,000 or more).", "type": "string" }, - "stats": { - "properties": { - "followers": { - "example": 526, - "type": "integer" - }, - "likes": { - "example": 521, - "type": "integer" - } - }, - "type": "object" + "is_bot": { + "description": "Whether the account is a bot.", + "type": "boolean" }, - "talking": { - "example": 12, - "type": "integer" + "is_org": { + "description": "Whether the account is an organization.", + "type": "boolean" }, - "title": { - "example": "SEO Marketing Wiz", + "is_suspected_automation": { + "description": "Whether the account looks like a commit farm or mass repository generator.", + "type": "boolean" + }, + "last_active_at": { + "description": "Time of the user's latest recorded activity, in UTC (RFC 3339).", "type": "string" }, - "website": { - "example": "http://www.seomarketingwiz.com/", + "location_raw": { + "description": "Free-text location as written on the profile.", "type": "string" }, - "wereHere": { - "example": 3, - "type": "integer" + "login": { + "description": "GitHub username of the account.", + "type": "string" }, - "whatsapp": { - "description": "WhatsApp is the Page's configured WhatsApp Business \"Message us\" number,\nwhen set up. See ParsePage's field_type extraction.", - "example": "+1 800-242-8478", + "name": { + "description": "Display name on the profile.", "type": "string" - } - }, - "type": "object" - }, - "facebook.marketplaceSearchResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "prs_30d": { + "description": "Number of pull request events the user had in the last 30 days.", "type": "integer" }, - "data": { - "$ref": "#/definitions/facebook.MarketplaceSearchResult" + "public_gists": { + "description": "Number of public gists.", + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "facebook.pageResponseDoc": { - "properties": { - "code": { - "example": 200, + "public_repos": { + "description": "Number of public repositories.", "type": "integer" }, - "data": { - "$ref": "#/definitions/facebook.Page" + "pushes_30d": { + "description": "Number of pushes the user made in the last 30 days.", + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "fanatics.CategoriesResponse": { - "properties": { - "fetched_at": { - "type": "string" + "rank_score": { + "description": "Overall notability score. Followers count most and recent activity adds a smaller amount. It is 0 for suspected automation.", + "type": "integer" }, - "leagues": { + "reachable": { + "description": "Whether the profile shows any public way to make contact: email, Twitter or X, a website or a linked social account.", + "type": "boolean" + }, + "reviews_30d": { + "description": "Number of pull request review events, including review comments, the user made in the last 30 days.", + "type": "integer" + }, + "schema_version": { + "description": "Version of the record layout.", + "type": "integer" + }, + "social_accounts": { + "description": "Social accounts linked on the profile.", "items": { - "$ref": "#/definitions/fanatics.League" + "$ref": "#/definitions/es.GithubSocialLink" }, "type": "array" }, - "source_url": { + "social_count": { + "description": "Number of social accounts linked on the profile.", + "type": "integer" + }, + "twitter_username": { + "description": "Twitter or X username on the profile.", + "type": "string" + }, + "type": { + "description": "Account type on GitHub, for example `User` or `Organization`.", "type": "string" } }, "type": "object" }, - "fanatics.League": { + "es.GoodreadsAuthorDatasetFacetItem": { "properties": { - "name": { - "example": "NFL", - "type": "string" - }, - "teams": { - "items": { - "$ref": "#/definitions/fanatics.Team" - }, - "type": "array" + "count": { + "type": "integer" }, - "url": { - "example": "/nfl/o-3572+z-953036859-1253393850", + "value": { "type": "string" } }, "type": "object" }, - "fanatics.ListingItem": { + "es.GoodreadsAuthorRecord": { "properties": { - "availability": { - "example": "InStock", + "about": { + "description": "Author biography from the Goodreads page.", "type": "string" }, - "brand": { - "type": "string" + "average_rating": { + "description": "Average rating across the author's books on Goodreads.", + "type": "number" }, - "category": { + "birth_date": { + "description": "Birth date as Goodreads shows it, for example `August 11, 1962`.", "type": "string" }, - "currency_code": { - "example": "USD", + "crawled_at": { + "description": "Time the author's data was fetched, in UTC (RFC 3339).", "type": "string" }, - "image": { + "death_date": { + "description": "Date of death as Goodreads shows it.", "type": "string" }, - "name": { + "discovery_source": { + "description": "DiscoverySource records how this id was found, e.g. \"book:2767052\",\n\"genre:fantasy\", \"search:mystery\" — useful for crawl provenance/debugging.", "type": "string" }, - "price": { - "type": "number" + "genres": { + "description": "List of genres Goodreads shows for the author.", + "items": { + "type": "string" + }, + "type": "array" }, - "product_id": { - "example": "204125114", + "id": { + "description": "Goodreads author id.", "type": "string" }, - "url": { + "image_url": { + "description": "URL of the author's photo.", "type": "string" - } - }, - "type": "object" - }, - "fanatics.ListingResponse": { - "properties": { - "fetched_at": { + }, + "name": { + "description": "Full name of the author.", "type": "string" }, - "has_next_page": { - "type": "boolean" + "ratings_count": { + "description": "Number of ratings the author's books have received.", + "type": "integer" }, - "items": { - "items": { - "$ref": "#/definitions/fanatics.ListingItem" - }, - "type": "array" + "reviews_count": { + "description": "Number of reviews the author's books have received.", + "type": "integer" }, - "page_number": { - "example": 1, + "run_id": { + "description": "Identifier of the collection run that produced this record. Accepted as a `run_id` filter.", + "type": "string" + }, + "schema_version": { + "description": "Version of the record layout.", "type": "integer" }, - "page_size": { - "example": 24, + "seed_rank": { + "description": "SeedRank is the discovery priority (lower = discovered earlier/higher\npriority), mirroring GoodreadsBookRecord.SeedRank.", "type": "integer" }, - "query": { - "example": "colts jersey", + "source_url": { + "description": "URL the data was read from.", "type": "string" }, - "sort_option": { - "example": "TopSellers", + "uri": { + "description": "Link to the author's Goodreads page.", "type": "string" }, - "source_url": { + "website": { + "description": "Author's website address.", "type": "string" - }, - "total_items": { - "example": 318, - "type": "integer" } }, "type": "object" }, - "fanatics.Product": { + "es.GoodreadsBookDatasetFacetItem": { "properties": { - "availability": { - "example": "InStock", - "type": "string" - }, - "brand": { - "example": "Fanatics", - "type": "string" + "count": { + "type": "integer" }, - "category": { - "example": "Shorts", + "value": { "type": "string" + } + }, + "type": "object" + }, + "es.GoodreadsBookRecord": { + "properties": { + "author_ids": { + "description": "Goodreads ids of the credited authors.", + "items": { + "type": "string" + }, + "type": "array" }, - "comparable_products": { + "authors": { + "description": "Authors/AuthorIDs list every credited contributor (primary + secondary);\nPrimaryAuthor(ID) denormalizes the first for single-value filters/facets.", "items": { - "$ref": "#/definitions/fanatics.RelatedProduct" + "type": "string" }, "type": "array" }, - "condition": { - "example": "NewCondition", + "crawled_at": { + "description": "Time the book's data was fetched, in UTC (RFC 3339).", "type": "string" }, - "currency_code": { - "example": "USD", + "description": { + "description": "Book description from the Goodreads page.", "type": "string" }, - "description": { + "discovery_source": { + "description": "DiscoverySource records how this id was found, e.g. \"list:1\",\n\"search:mystery\", \"author:153394\" — useful for crawl provenance/debugging.", "type": "string" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" + "format": { + "description": "Book format, for example `Hardcover`.", + "type": "string" }, - "media": { + "genres": { + "description": "List of genres Goodreads shows for the book.", "items": { - "$ref": "#/definitions/fanatics.ProductMedia" + "type": "string" }, "type": "array" }, - "name": { - "example": "Indianapolis Colts Fanatics Slice Shorts - Royal", + "id": { + "description": "Goodreads book id.", "type": "string" }, - "price": { - "example": 49.99, - "type": "number" - }, - "product_id": { - "example": "5227968", + "image_url": { + "description": "URL of the cover image.", "type": "string" }, - "rating": { - "type": "number" - }, - "review_count": { - "type": "integer" - }, - "reviews": { - "$ref": "#/definitions/fanatics.ReviewsSummary" - }, - "sizes": { - "items": { - "$ref": "#/definitions/fanatics.ProductSize" - }, - "type": "array" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "fanatics.ProductMedia": { - "properties": { - "thumbnail": { + "isbn": { + "description": "ISBN-10 of the edition.", "type": "string" }, - "type": { - "example": "Image", + "isbn13": { + "description": "ISBN-13 of the edition.", "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "fanatics.ProductResponse": { - "properties": { - "fetched_at": { + "language": { + "description": "Language the edition is written in, for example `English`.", "type": "string" }, - "product": { - "$ref": "#/definitions/fanatics.Product" + "pages": { + "description": "Number of pages.", + "type": "integer" }, - "source_url": { + "primary_author": { + "description": "Name of the first credited author.", "type": "string" - } - }, - "type": "object" - }, - "fanatics.ProductSize": { - "properties": { - "available": { - "example": true, - "type": "boolean" }, - "label": { - "example": "L", + "primary_author_id": { + "description": "Goodreads id of the first credited author.", "type": "string" }, - "price": { - "example": 149.99, - "type": "number" - } - }, - "type": "object" - }, - "fanatics.RatingBreakdown": { - "properties": { - "count": { - "example": 10411, + "publication_date": { + "description": "Publication date as Goodreads shows it, for example `2008-10-14`.", + "type": "string" + }, + "publication_year": { + "description": "Year of publication.", "type": "integer" }, - "label": { - "example": "True to Size", + "publisher": { + "description": "Name of the book's publisher.", "type": "string" }, - "rating": { - "example": 5, - "type": "integer" - } - }, - "type": "object" - }, - "fanatics.RatingSummary": { - "properties": { - "average_rating": { - "example": 4.4, + "rating_average": { + "description": "Average Goodreads rating of the book.", "type": "number" }, - "breakdown": { - "items": { - "$ref": "#/definitions/fanatics.RatingBreakdown" - }, - "type": "array" - }, - "rating_count": { - "example": 13728, + "rating_five_star": { + "description": "Number of 5-star ratings.", "type": "integer" - } - }, - "type": "object" - }, - "fanatics.RelatedProduct": { - "properties": { - "currency_code": { - "example": "USD", - "type": "string" }, - "description": { - "example": "Limited", - "type": "string" + "rating_four_star": { + "description": "Number of 4-star ratings.", + "type": "integer" }, - "image": { - "type": "string" + "rating_one_star": { + "description": "Rating*Star is the flattened 1-5 star ratings-count distribution.", + "type": "integer" }, - "price": { - "example": 199.99, - "type": "number" + "rating_three_star": { + "description": "Number of 3-star ratings.", + "type": "integer" }, - "product_id": { - "example": "46226601215300", - "type": "string" + "rating_two_star": { + "description": "Number of 2-star ratings.", + "type": "integer" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "fanatics.ReviewsSummary": { - "properties": { - "fit": { - "$ref": "#/definitions/fanatics.RatingSummary" + "ratings_count": { + "description": "Number of ratings the book has received.", + "type": "integer" }, - "has_reviews": { - "type": "boolean" + "reviews_count": { + "description": "Number of reviews the book has received.", + "type": "integer" }, - "overall": { - "$ref": "#/definitions/fanatics.RatingSummary" + "run_id": { + "description": "Identifier of the collection run that produced this record. Accepted as a `run_id` filter.", + "type": "string" }, - "quality": { - "$ref": "#/definitions/fanatics.RatingSummary" + "schema_version": { + "description": "Version of the record layout.", + "type": "integer" }, - "review_count": { - "example": 3248, + "seed_rank": { + "description": "SeedRank is the discovery priority (lower = discovered earlier/higher\npriority): curated list/search seeds rank low; BFS-discovered books from\nauthor expansion rank higher so curated breadth crawls first.", "type": "integer" }, - "value": { - "$ref": "#/definitions/fanatics.RatingSummary" - } - }, - "type": "object" - }, - "fanatics.Team": { - "properties": { - "name": { - "example": "Indianapolis Colts", + "series": { + "description": "Series is the display string (e.g. \"The Hunger Games #1\"); SeriesName is\nthe bare series title, split out for exact filtering/faceting.", "type": "string" }, - "product_count": { - "example": 6138, - "type": "integer" + "series_name": { + "description": "Title of the series the book belongs to, without the book number.", + "type": "string" }, - "url": { - "example": "/nfl/indianapolis-colts/o-2483+t-03378189+z-90650-4056854214", + "source_url": { + "description": "URL the data was read from.", "type": "string" - } - }, - "type": "object" - }, - "fanatics.categoriesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/fanatics.CategoriesResponse" + "title": { + "description": "Title of the book.", + "type": "string" }, - "msg": { - "example": "OK", + "uri": { + "description": "Link to the book's Goodreads page.", "type": "string" } }, "type": "object" }, - "fanatics.categoryResponseDoc": { + "es.GoogleBusiness": { "properties": { - "code": { - "example": 200, - "type": "integer" + "address": { + "description": "Full street address as shown on Google Maps.", + "example": "250 Beach St, San Francisco, CA 94133", + "type": "string" }, - "data": { - "$ref": "#/definitions/fanatics.ListingResponse" + "amenities": { + "description": "List of amenities Google Maps shows for the business, for example `Free Wi-Fi`.", + "example": [ + "['Free Wi-Fi'", + " 'Air-conditioned'", + " 'Wi-Fi'", + " 'Parking']" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "category": { + "description": "Categories Google Maps lists for the business. Labels can be in the local language.", + "example": [ + "[\"hotel\"]" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "city": { + "description": "Name of the city the business is in.", + "example": "San Francisco", "type": "string" - } - }, - "type": "object" - }, - "fanatics.productResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/fanatics.ProductResponse" + "contact": { + "allOf": [ + { + "$ref": "#/definitions/contact.Contact" + } + ], + "description": "🆕 Contact information" }, - "msg": { - "example": "OK", + "contact_is_updated": { + "description": "Whether the business's contact details have been collected.", + "type": "boolean" + }, + "country": { + "description": "🆕 Geographic hierarchy", + "example": "United States", "type": "string" - } - }, - "type": "object" - }, - "fanatics.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/fanatics.ListingResponse" + "county": { + "description": "Administrative area below state level, named as the country itself names it.", + "example": "San Francisco County", + "type": "string" }, - "msg": { - "example": "OK", + "county_code": { + "description": "ISO 3166-2 code for the `county` value, for example `FR-59`.", + "example": "FR-59", "type": "string" - } - }, - "type": "object" - }, - "fanaticscollect.Auction": { - "properties": { - "auction_integer_id": { - "type": "integer" }, - "ends_at": { + "created_at": { + "description": "🆕 Timestamps", "type": "string" }, - "id": { + "description": { + "description": "Business description shown on Google Maps.", + "example": "A 3-minute walk from Pier 41 in the Fisherman's Wharf district...", "type": "string" }, - "integer_id": { - "type": "integer" + "geo": { + "allOf": [ + { + "$ref": "#/definitions/es.GeoPoint" + } + ], + "description": "Coordinates of the business. Omitted when no map location is available for it." }, - "marketplace": { - "example": "WEEKLY", - "type": "string" + "geo_is_updated": { + "description": "Whether the country, state, county, city and town fields have been filled in from the coordinates.", + "type": "boolean" }, - "name": { - "example": "2022 Weekly Auction #1", + "id": { + "description": "Unique id of the business record in the dataset.", + "example": "ChIJ99URUeOAhYAR0J5ZUxTesDQ", "type": "string" }, - "payout_date": { + "image": { + "description": "URL of the business's main photo on Google Maps.", + "example": "https://lh5.googleusercontent.com/p/AF1QipP_O55x7gOwR3AaM09CVmzEUude9wMHMPwc--yp", "type": "string" }, - "short_name": { - "example": "WA1", + "locations": { + "description": "Place names Google Maps lists with the business, for example `San Francisco`.", + "example": [ + "['San Francisco'", + " 'Los Angeles']" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "description": "Business name as shown on Google Maps.", + "example": "Hotel Zephyr San Francisco", "type": "string" }, - "starts_at": { + "permanently_closed": { + "description": "PermanentlyClosed reports Google's \"Permanently closed\" marker: true when\nGoogle marks the business permanently closed, false when a crawl confirmed it\ndoes not, and null when the business has not been re-crawled since status\ncapture shipped (2026-08-31) — which is most of the dataset. null therefore\nmeans UNKNOWN, never \"open\": a count that treats null as operational is\ncounting an unknown number of dead businesses. Use permanently_closed=false\nto exclude the confirmed-closed ones.", + "example": false, + "type": "boolean", + "x-nullable": true + }, + "phone": { + "description": "Business phone number as listed on Google Maps.", + "example": "14156176565", "type": "string" }, - "status": { - "example": "CLOSED", + "place_id": { + "description": "Google place id of the business.", + "example": "ChIJ99URUeOAhYAR0J5ZUxTesDQ", "type": "string" }, - "timer": { - "$ref": "#/definitions/fanaticscollect.AuctionTimer" + "rating": { + "description": "Rating is the aggregate Google rating (1.0–5.0). It is a pointer so a business\nwith NO aggregate Google rating serializes as `rating: null` rather than a\nmisleading 0 — Google never assigns a 0.x average, so 0 always meant \"unrated\".\nConsumers computing an average must skip nulls; use min_rating>0 to exclude them.", + "example": 4.1, + "type": "number", + "x-nullable": true }, - "type": { - "example": "CollectWeeklyAuction", + "review_count": { + "description": "ReviewCount is the aggregate Google review count. A null value means Google\ndid not return a count; numeric zero means Google confirmed zero reviews.", + "example": 3213, + "type": "integer", + "x-nullable": true + }, + "similarweb": { + "allOf": [ + { + "$ref": "#/definitions/similarweb.SimilarWebResp" + } + ], + "description": "Website traffic profile of the business website from SimilarWeb." + }, + "state": { + "description": "State, region or province, named as the country itself names it.", + "example": "California", "type": "string" }, - "urn": { - "example": "WEEKLY:8d27de96-6f1d-11ed-ab20-0a58a9feac02", + "state_code": { + "description": "StateCode and CountyCode are the ISO 3166-2 subdivision codes behind `state` and\n`county` (e.g. US-CA / FR-HDF for a state or region, FR-59 / IT-RM for a county,\ndépartement or province). `state` and `county` deliberately keep each country's\nown administrative vocabulary (\"Regierungsbezirk Köln\", \"Provincia de Madrid\"),\nso these codes are the stable, country-agnostic join key for cross-country\ngrouping or ranking. Filled by reverse geocoding since 2026-09-07; empty for rows\nnot yet resolved.", + "example": "US-CA", "type": "string" - } - }, - "type": "object" - }, - "fanaticscollect.AuctionTimer": { - "properties": { - "auction_ends_at": { - "example": "2022-01-24T03:00:00Z", + }, + "town": { + "description": "Name of the town or neighbourhood the business is in.", + "example": "Fisherman's Wharf", "type": "string" }, - "auction_starts_at": { - "example": "2022-01-14T03:00:00Z", + "updated_at": { + "description": "Time the record was last updated, in UTC (RFC 3339).", "type": "string" }, - "window_duration_seconds": { - "type": "integer" + "url": { + "description": "Google Maps link to the business.", + "example": "https://www.google.com/maps/place/?q=place_id:ChIJ99URUeOAhYAR0J5ZUxTesDQ", + "type": "string" }, - "window_ends_at": { + "website": { + "description": "🆕 Website and status", + "example": "https://www.hotelzephyrsf.com/", "type": "string" }, - "window_ordinal": { - "type": "integer" - } - }, - "type": "object" - }, - "fanaticscollect.AuctionsResponse": { - "properties": { - "auctions": { - "items": { - "$ref": "#/definitions/fanaticscollect.Auction" - }, - "type": "array" + "website_status": { + "allOf": [ + { + "$ref": "#/definitions/es.WebsiteStatus" + } + ], + "description": "Result of the last reachability check of the business website." } }, "type": "object" }, - "fanaticscollect.CardLadderEstimate": { + "es.GoogleBusinessDatasetFacetItem": { "properties": { - "estimated_max": { - "$ref": "#/definitions/fanaticscollect.Money" - }, - "estimated_min": { - "$ref": "#/definitions/fanaticscollect.Money" + "count": { + "description": "Number of businesses with this value.", + "type": "integer" }, - "estimated_value": { - "$ref": "#/definitions/fanaticscollect.Money" + "value": { + "description": "Facet value being counted.", + "type": "string" } }, "type": "object" }, - "fanaticscollect.Categories": { + "es.GoogleBusinessDatasetItem": { "properties": { - "category_parents": { - "items": { - "type": "string" - }, - "type": "array" + "address": { + "description": "Full street address as shown on Google Maps.", + "example": "250 Beach St, San Francisco, CA 94133", + "type": "string" }, - "eye_appeal_grades": { + "amenities": { + "description": "List of amenities Google Maps shows for the business, for example `Free Wi-Fi`.", + "example": [ + "['Free Wi-Fi'", + " 'Air-conditioned'", + " 'Wi-Fi'", + " 'Parking']" + ], "items": { "type": "string" }, "type": "array" }, - "grading_services": { + "category": { + "description": "Categories Google Maps lists for the business. Labels can be in the local language.", + "example": [ + "[\"hotel\"]" + ], "items": { "type": "string" }, "type": "array" }, - "marketplaces": { - "items": { - "type": "string" - }, - "type": "array" + "city": { + "description": "Name of the city the business is in.", + "example": "San Francisco", + "type": "string" }, - "sold_item_categories": { - "items": { - "type": "string" - }, - "type": "array" + "contact": { + "allOf": [ + { + "$ref": "#/definitions/contact.Contact" + } + ], + "description": "🆕 Contact information" }, - "sold_item_grading_services": { - "items": { - "type": "string" - }, - "type": "array" + "contact_is_updated": { + "description": "Whether the business's contact details have been collected.", + "type": "boolean" }, - "sold_item_sort_options": { - "items": { - "$ref": "#/definitions/fanaticscollect.SortOption" - }, - "type": "array" + "country": { + "description": "🆕 Geographic hierarchy", + "example": "United States", + "type": "string" }, - "sort_options": { - "items": { - "$ref": "#/definitions/fanaticscollect.SortOption" - }, - "type": "array" + "county": { + "description": "Administrative area below state level, named as the country itself names it.", + "example": "San Francisco County", + "type": "string" }, - "statuses": { - "items": { - "type": "string" - }, - "type": "array" + "county_code": { + "description": "ISO 3166-2 code for the `county` value, for example `FR-59`.", + "example": "FR-59", + "type": "string" }, - "sub_categories": { - "items": { - "$ref": "#/definitions/fanaticscollect.SubCategory" - }, - "type": "array" - } - }, - "type": "object" - }, - "fanaticscollect.Images": { - "properties": { - "large": { + "created_at": { + "description": "🆕 Timestamps", "type": "string" }, - "medium": { + "description": { + "description": "Business description shown on Google Maps.", + "example": "A 3-minute walk from Pier 41 in the Fisherman's Wharf district...", "type": "string" }, - "small": { + "distance_m": { + "description": "Distance from the query point in metres. Set when results are sorted by distance.", + "type": "number" + }, + "geo": { + "allOf": [ + { + "$ref": "#/definitions/es.GeoPoint" + } + ], + "description": "Coordinates of the business. Omitted when no map location is available for it." + }, + "geo_is_updated": { + "description": "Whether the country, state, county, city and town fields have been filled in from the coordinates.", + "type": "boolean" + }, + "id": { + "description": "Unique id of the business record in the dataset.", + "example": "ChIJ99URUeOAhYAR0J5ZUxTesDQ", "type": "string" }, - "thumbnail": { + "image": { + "description": "URL of the business's main photo on Google Maps.", + "example": "https://lh5.googleusercontent.com/p/AF1QipP_O55x7gOwR3AaM09CVmzEUude9wMHMPwc--yp", "type": "string" - } - }, - "type": "object" - }, - "fanaticscollect.InstantRipsCategoriesResponse": { - "properties": { - "categories": { + }, + "locations": { + "description": "Place names Google Maps lists with the business, for example `San Francisco`.", + "example": [ + "['San Francisco'", + " 'Los Angeles']" + ], "items": { - "$ref": "#/definitions/fanaticscollect.InstantRipsCategory" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "fanaticscollect.InstantRipsCategory": { - "properties": { - "id": { - "description": "ID is the pack-tile listing id the category tile currently links to\n-- a real FIXED/BO listing id, fetchable via GetListing (type=FIXED)\nfor that entry point's own full detail (see listing_type.go's doc\ncomment on how Instant Rips packs resolve as FIXED/BO listings).\nInstant Rips categories have no separate id space of their own in\nthe server-rendered page -- this is simply which specific pack tile\nthe category tile currently links to, confirmed live 2026-09-16.", - "example": "92c2820e-3248-4b02-a4cc-6e32ee0e7660", + }, + "name": { + "description": "Business name as shown on Google Maps.", + "example": "Hotel Zephyr San Francisco", "type": "string" }, - "max_price": { - "$ref": "#/definitions/fanaticscollect.Money" + "permanently_closed": { + "description": "PermanentlyClosed reports Google's \"Permanently closed\" marker: true when\nGoogle marks the business permanently closed, false when a crawl confirmed it\ndoes not, and null when the business has not been re-crawled since status\ncapture shipped (2026-08-31) — which is most of the dataset. null therefore\nmeans UNKNOWN, never \"open\": a count that treats null as operational is\ncounting an unknown number of dead businesses. Use permanently_closed=false\nto exclude the confirmed-closed ones.", + "example": false, + "type": "boolean", + "x-nullable": true }, - "min_price": { + "phone": { + "description": "Business phone number as listed on Google Maps.", + "example": "14156176565", + "type": "string" + }, + "place_id": { + "description": "Google place id of the business.", + "example": "ChIJ99URUeOAhYAR0J5ZUxTesDQ", + "type": "string" + }, + "rating": { + "description": "Rating is the aggregate Google rating (1.0–5.0). It is a pointer so a business\nwith NO aggregate Google rating serializes as `rating: null` rather than a\nmisleading 0 — Google never assigns a 0.x average, so 0 always meant \"unrated\".\nConsumers computing an average must skip nulls; use min_rating>0 to exclude them.", + "example": 4.1, + "type": "number", + "x-nullable": true + }, + "review_count": { + "description": "ReviewCount is the aggregate Google review count. A null value means Google\ndid not return a count; numeric zero means Google confirmed zero reviews.", + "example": 3213, + "type": "integer", + "x-nullable": true + }, + "similarweb": { "allOf": [ { - "$ref": "#/definitions/fanaticscollect.Money" + "$ref": "#/definitions/similarweb.SimilarWebResp" } ], - "description": "MinPrice/MaxPrice are the category's advertised price range, e.g.\n$10.00-$100.00 for \"Collector Packs\". Either may be absent if the\npage's price-range text for a tile doesn't parse as two dollar\namounts (not observed live, but not assumed impossible)." + "description": "Website traffic profile of the business website from SimilarWeb." }, - "name": { - "description": "Name is the category's display label, e.g. \"Collector Packs\".", - "example": "Collector Packs", + "state": { + "description": "State, region or province, named as the country itself names it.", + "example": "California", + "type": "string" + }, + "state_code": { + "description": "StateCode and CountyCode are the ISO 3166-2 subdivision codes behind `state` and\n`county` (e.g. US-CA / FR-HDF for a state or region, FR-59 / IT-RM for a county,\ndépartement or province). `state` and `county` deliberately keep each country's\nown administrative vocabulary (\"Regierungsbezirk Köln\", \"Provincia de Madrid\"),\nso these codes are the stable, country-agnostic join key for cross-country\ngrouping or ranking. Filled by reverse geocoding since 2026-09-07; empty for rows\nnot yet resolved.", + "example": "US-CA", + "type": "string" + }, + "town": { + "description": "Name of the town or neighbourhood the business is in.", + "example": "Fisherman's Wharf", + "type": "string" + }, + "updated_at": { + "description": "Time the record was last updated, in UTC (RFC 3339).", "type": "string" }, "url": { - "description": "URL is the category tile's own link -- an Instant Rips pack detail\npage (an alias for the same FIXED/BO listing ID resolves to).", + "description": "Google Maps link to the business.", + "example": "https://www.google.com/maps/place/?q=place_id:ChIJ99URUeOAhYAR0J5ZUxTesDQ", + "type": "string" + }, + "website": { + "description": "🆕 Website and status", + "example": "https://www.hotelzephyrsf.com/", "type": "string" + }, + "website_status": { + "allOf": [ + { + "$ref": "#/definitions/es.WebsiteStatus" + } + ], + "description": "Result of the last reachability check of the business website." } }, "type": "object" }, - "fanaticscollect.Listing": { + "es.HousingMarketDatasetFacetItem": { "properties": { - "asking_price": { - "allOf": [ - { - "$ref": "#/definitions/fanaticscollect.Money" - } - ], - "description": "AskingPrice is set only for FIXED listings (the \"buy now\" price);\nWEEKLY/PREMIER auction lots price through StartingPrice/CurrentBid/\nSoldFor instead." - }, - "auction": { - "$ref": "#/definitions/fanaticscollect.Auction" + "count": { + "type": "integer" }, - "bid_count": { + "value": { + "type": "string" + } + }, + "type": "object" + }, + "es.HousingMarketRecord": { + "properties": { + "affordability_gap": { "type": "integer" }, - "card_ladder": { - "$ref": "#/definitions/fanaticscollect.CardLadderEstimate" + "avg_sale_to_list": { + "type": "number" }, - "certified_seller": { - "example": "Fanatics Collect", + "city": { "type": "string" }, - "current_bid": { - "$ref": "#/definitions/fanaticscollect.Money" + "homes_sold": { + "type": "integer" }, - "default_item_description": { + "income_geo_id": { "type": "string" }, - "description": { + "income_vintage": { "type": "string" }, - "favorited_count": { + "inventory": { "type": "integer" }, - "id": { + "is_latest": { + "description": "IsLatest is true only on the most recent period per\n(region_type_id, table_id, property_type_id); the loader maintains it.", + "type": "boolean" + }, + "last_updated": { "type": "string" }, - "images": { - "items": { - "$ref": "#/definitions/fanaticscollect.Images" - }, - "type": "array" + "list_price_to_income": { + "type": "number" }, - "inserted_at": { + "loaded_at": { "type": "string" }, - "integer_id": { + "median_dom": { + "type": "number" + }, + "median_household_income": { + "description": "Affordability join (Census ACS 5-year median household income). Present only\nwhere the income geography matched and median_sale_price exists.", "type": "integer" }, - "is_closed": { - "type": "boolean" + "median_list_ppsf": { + "type": "number" }, - "is_fanatics_authentic": { - "type": "boolean" + "median_list_ppsf_mom": { + "type": "number" }, - "is_flash": { - "type": "boolean" + "median_list_ppsf_yoy": { + "type": "number" }, - "listing_type": { - "example": "WEEKLY", - "type": "string" + "median_list_price": { + "type": "number" }, - "lot_string": { - "example": "WA1 Lot: 1417", + "median_list_price_mom": { + "type": "number" + }, + "median_list_price_yoy": { + "type": "number" + }, + "median_ppsf": { + "type": "number" + }, + "median_ppsf_mom": { + "type": "number" + }, + "median_ppsf_yoy": { + "type": "number" + }, + "median_sale_price": { + "type": "number" + }, + "median_sale_price_mom": { + "type": "number" + }, + "median_sale_price_yoy": { + "type": "number" + }, + "months_of_supply": { + "type": "number" + }, + "mortgage_rate_pct": { + "type": "number" + }, + "new_listings": { + "type": "integer" + }, + "off_market_in_two_weeks": { + "type": "number" + }, + "parent_metro": { "type": "string" }, - "marketplace_eye_appeal": { + "parent_metro_code": { "type": "string" }, - "sale_history": { - "items": { - "$ref": "#/definitions/fanaticscollect.Sale" - }, - "type": "array" + "pending_sales": { + "type": "integer" }, - "slug": { + "period_begin": { "type": "string" }, - "sold_date": { + "period_end": { "type": "string" }, - "sold_for": { - "$ref": "#/definitions/fanaticscollect.Money" + "price_drops": { + "type": "number" }, - "starting_price": { - "$ref": "#/definitions/fanaticscollect.Money" + "price_to_income": { + "type": "number" }, - "status": { - "example": "STATUS_SOLD", + "property_type": { "type": "string" }, - "subtitle": { + "property_type_id": { + "type": "integer" + }, + "region": { "type": "string" }, - "title": { + "region_type": { + "description": "RegionType is the normalized region level: national, metro, county, city, zip.", "type": "string" }, - "updated_at": { + "region_type_id": { + "type": "integer" + }, + "run_id": { "type": "string" }, - "url": { + "salary_to_buy": { + "type": "integer" + }, + "schema_version": { + "type": "integer" + }, + "sold_above_list": { + "type": "number" + }, + "source": { "type": "string" }, - "vault_item": { - "$ref": "#/definitions/fanaticscollect.VaultItem" + "state": { + "type": "string" + }, + "state_code": { + "type": "string" + }, + "table_id": { + "type": "integer" + }, + "zip_code": { + "description": "ZipCode is set on zip rows only, parsed from REGION (\"Zip Code: 60616\").", + "type": "string" } }, "type": "object" }, - "fanaticscollect.Money": { + "es.InstagramUserDatasetFacetItem": { "properties": { - "amount": { - "example": 13.2, - "type": "number" + "count": { + "description": "Number of users with this value.", + "type": "integer" }, - "currency": { - "example": "USD", + "value": { + "description": "Facet value being counted.", "type": "string" } }, "type": "object" }, - "fanaticscollect.Sale": { + "es.InstagramUserDatasetItem": { "properties": { - "sold_date": { + "avatar_url": { "type": "string" }, - "sold_for": { - "$ref": "#/definitions/fanaticscollect.Money" - } - }, - "type": "object" - }, - "fanaticscollect.SearchResponse": { - "properties": { - "page": { + "biography": { + "type": "string" + }, + "category_name": { + "type": "string" + }, + "crawled_at": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "external_url": { + "type": "string" + }, + "follower_following_ratio": { + "type": "number" + }, + "followers": { "type": "integer" }, - "per_page": { + "following": { "type": "integer" }, - "query": { + "full_name": { "type": "string" }, - "results": { - "items": { - "$ref": "#/definitions/fanaticscollect.SearchResult" - }, - "type": "array" + "has_bio": { + "type": "boolean" }, - "total": { + "has_external_url": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "is_business_account": { + "type": "boolean" + }, + "is_verified": { + "type": "boolean" + }, + "posts": { "type": "integer" }, - "total_pages": { + "schema_version": { "type": "integer" + }, + "source_tier": { + "type": "string" + }, + "username": { + "type": "string" } }, "type": "object" }, - "fanaticscollect.SearchResult": { + "es.InstagramUserRecord": { "properties": { - "allow_offers": { - "type": "boolean" - }, - "asking_price": { - "$ref": "#/definitions/fanaticscollect.Money" - }, - "auction_name": { + "avatar_url": { "type": "string" }, - "auction_urn": { + "biography": { "type": "string" }, - "brand": { + "category_name": { "type": "string" }, - "card_number": { + "crawled_at": { "type": "string" }, - "category_parent": { + "created_at": { "type": "string" }, - "certified_seller": { + "external_url": { "type": "string" }, - "current_price": { - "$ref": "#/definitions/fanaticscollect.Money" - }, - "fanatics_authentic": { - "type": "boolean" + "follower_following_ratio": { + "type": "number" }, - "favorited_count": { + "followers": { "type": "integer" }, - "grade": { - "type": "number" + "following": { + "type": "integer" }, - "grading_service": { + "full_name": { "type": "string" }, - "great_price": { + "has_bio": { "type": "boolean" }, - "has_offers": { + "has_external_url": { "type": "boolean" }, "id": { "type": "string" }, - "image_primary": { - "type": "string" + "is_business_account": { + "type": "boolean" }, - "image_secondary": { - "type": "string" + "is_verified": { + "type": "boolean" }, - "lot_number": { - "type": "string" + "posts": { + "type": "integer" }, - "marketplace": { - "type": "string" + "schema_version": { + "type": "integer" }, - "seller_id": { + "source_tier": { "type": "string" }, - "serial": { + "username": { "type": "string" + } + }, + "type": "object" + }, + "es.JobPostingFacets": { + "properties": { + "by_ai_tool": { + "description": "ByAITool counts canonical AI tool and platform names mentioned in open\njob postings.", + "items": { + "$ref": "#/definitions/es.FacetItem" + }, + "type": "array" }, - "status": { - "type": "string" + "by_benefit": { + "description": "ByBenefit, BySecurityClearance, and ByEducationLevel count canonical\nrequirements and offerings mentioned in open job postings.", + "items": { + "$ref": "#/definitions/es.FacetItem" + }, + "type": "array" }, - "sub_categories": { + "by_department": { + "description": "Open posting counts by department.", "items": { - "type": "string" + "$ref": "#/definitions/es.FacetItem" }, "type": "array" }, - "subtitle": { - "type": "string" + "by_education_level": { + "description": "Open posting counts by education level mentioned in the posting.", + "items": { + "$ref": "#/definitions/es.FacetItem" + }, + "type": "array" }, - "teams": { + "by_employment_type": { + "description": "Open posting counts by employment type, for example `Full-time`.", "items": { - "type": "string" + "$ref": "#/definitions/es.FacetItem" }, "type": "array" }, - "title": { - "type": "string" + "by_job_family": { + "description": "ByJobFamily counts conservative ESCO/ISCO occupation-family\nclassifications; postings without sufficient evidence are omitted.", + "items": { + "$ref": "#/definitions/es.FacetItem" + }, + "type": "array" }, - "url": { - "type": "string" + "by_location": { + "description": "Open posting counts by location.", + "items": { + "$ref": "#/definitions/es.FacetItem" + }, + "type": "array" }, - "year": { + "by_provider": { + "description": "Open posting counts by job source.", + "items": { + "$ref": "#/definitions/es.FacetItem" + }, + "type": "array" + }, + "by_security_clearance": { + "description": "Open posting counts by security clearance level mentioned in the posting.", + "items": { + "$ref": "#/definitions/es.FacetItem" + }, + "type": "array" + }, + "by_seniority": { + "description": "BySeniority counts the mutually exclusive entry/mid/senior\nclassification over open postings.", + "items": { + "$ref": "#/definitions/es.FacetItem" + }, + "type": "array" + }, + "by_skill": { + "description": "BySkill counts canonical ESCO skill labels mentioned in open job\npostings.", + "items": { + "$ref": "#/definitions/es.FacetItem" + }, + "type": "array" + }, + "remote_open": { + "description": "Number of open postings marked remote.", + "type": "integer" + }, + "top_companies": { + "description": "Companies with the most open postings, with the posting count for each.", + "items": { + "$ref": "#/definitions/es.FacetItem" + }, + "type": "array" + }, + "total_open": { + "description": "Total number of open postings.", "type": "integer" } }, "type": "object" }, - "fanaticscollect.SoldItem": { + "es.JournalistRecord": { "properties": { - "category": { - "type": "string" - }, - "eye_appeal_grade": { + "bio": { "type": "string" }, - "grade": { - "type": "number" - }, - "grading_service": { + "contact_email": { "type": "string" }, - "id": { + "contact_source_url": { "type": "string" }, - "image_medium": { + "contact_type": { + "description": "email | social | none", "type": "string" }, - "image_thumbnail": { + "crawled_at": { + "description": "RFC3339", "type": "string" }, - "listing_id": { + "email_domain": { "type": "string" }, - "marketplace": { - "example": "FIXED", + "email_kind": { "type": "string" }, - "purchase_price": { - "$ref": "#/definitions/fanaticscollect.Money" - }, - "serial": { + "name": { "type": "string" }, - "sold_date": { + "normalized_name": { "type": "string" }, - "subtitle": { + "outlet": { "type": "string" }, - "title": { + "outlet_domain": { "type": "string" }, - "url": { + "outlet_id": { "type": "string" }, - "year": { - "type": "integer" - } - }, - "type": "object" - }, - "fanaticscollect.SoldItemsResponse": { - "properties": { - "page": { + "outreach_quality_version": { "type": "integer" }, - "per_page": { - "type": "integer" + "outreach_readiness_band": { + "type": "string" }, - "results": { + "outreach_readiness_reasons": { "items": { - "$ref": "#/definitions/fanaticscollect.SoldItem" + "type": "string" }, "type": "array" }, - "total": { + "outreach_readiness_score": { "type": "integer" }, - "total_pages": { - "type": "integer" - } - }, - "type": "object" - }, - "fanaticscollect.SortOption": { - "properties": { - "display_name": { - "example": "Best Value", + "profile_url": { "type": "string" }, - "value": { - "example": "best_value", - "type": "string" - } - }, - "type": "object" - }, - "fanaticscollect.SubCategory": { - "properties": { - "category_parent": { - "example": "Sports Cards", + "record_type": { "type": "string" }, - "name": { - "example": "Baseball", + "role_type": { "type": "string" }, - "path": { - "example": "Sports Cards > Baseball", + "slug": { "type": "string" - } - }, - "type": "object" - }, - "fanaticscollect.TrendingSearchesResponse": { - "properties": { - "terms": { - "items": { + }, + "social_links": { + "additionalProperties": { "type": "string" }, - "type": "array" - } - }, - "type": "object" - }, - "fanaticscollect.VaultItem": { - "properties": { - "grading_service_url": { - "example": "https://www.psacard.com/cert/43185259/psa", - "type": "string" - }, - "id": { - "type": "string" - }, - "integer_id": { - "type": "integer" - }, - "origin_label": { - "type": "string" + "type": "object" }, - "origin_type": { + "title": { "type": "string" }, - "safe_market_value": { - "$ref": "#/definitions/fanaticscollect.Money" - }, - "similar_item_transactions": { + "topics": { "items": { - "$ref": "#/definitions/fanaticscollect.Sale" + "type": "string" }, "type": "array" }, - "suggested_asking_price": { - "$ref": "#/definitions/fanaticscollect.Money" - }, - "video_url": { + "vertical": { "type": "string" } }, "type": "object" }, - "fanaticscollect.auctionsResponseDoc": { + "es.JournalistsFacetItem": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fanaticscollect.AuctionsResponse" - }, - "msg": { - "example": "OK", + "value": { "type": "string" } }, "type": "object" }, - "fanaticscollect.categoriesResponseDoc": { + "es.LlmsCrawlerStance": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/fanaticscollect.Categories" + "explicit": { + "type": "boolean" }, - "msg": { - "example": "OK", + "stance": { "type": "string" } }, "type": "object" }, - "fanaticscollect.instantRipsCategoriesResponseDoc": { + "es.LlmsDatasetFacetItem": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fanaticscollect.InstantRipsCategoriesResponse" - }, - "msg": { - "example": "OK", + "value": { "type": "string" } }, "type": "object" }, - "fanaticscollect.listingResponseDoc": { + "es.LlmsFile": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/fanaticscollect.Listing" + "body": { + "description": "Body is the file content, capped by the worker (BodyTruncated says whether\nit was cut). Only present for a valid file.", + "type": "string" }, - "msg": { - "example": "OK", + "body_sha256": { "type": "string" - } - }, - "type": "object" - }, - "fanaticscollect.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/fanaticscollect.SearchResponse" + "body_truncated": { + "type": "boolean" }, - "msg": { - "example": "OK", + "body_withheld": { + "description": "BodyWithheld is set only on the public API, never stored: it names why a\nstored body was not returned (\"injection\").", "type": "string" - } - }, - "type": "object" - }, - "fanaticscollect.soldItemsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/fanaticscollect.SoldItemsResponse" + "bots": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "fanaticscollect.trendingSearchesResponseDoc": { - "properties": { - "code": { - "example": 200, + "bytes": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fanaticscollect.TrendingSearchesResponse" - }, - "msg": { - "example": "OK", + "content_type": { "type": "string" - } - }, - "type": "object" - }, - "fanaticslive.BreakSpotsCounts": { - "properties": { - "available": { - "type": "integer" }, - "claimed": { - "type": "integer" + "ctype_mismatch": { + "type": "boolean" }, - "total": { + "external_hosts": { "type": "integer" - } - }, - "type": "object" - }, - "fanaticslive.BreakSummary": { - "properties": { - "id": { - "type": "string" - }, - "minimum_bid": { - "$ref": "#/definitions/fanaticslive.Money" }, - "pricing_type": { - "enum": [ - "SET_PRICE" - ], - "example": "SET_PRICE", + "fetched_at": { "type": "string" }, - "status": { - "enum": [ - "READY", - "RIPPING", - "COMPLETE" - ], - "example": "READY", + "final_url": { "type": "string" }, - "title": { + "generator": { "type": "string" }, - "type": { - "enum": [ - "PERSONAL", - "GROUP" - ], - "example": "PERSONAL", - "type": "string" - } - }, - "type": "object" - }, - "fanaticslive.BrowseResponse": { - "properties": { - "league": { - "type": "string" + "has_optional": { + "type": "boolean" }, - "shows": { - "items": { - "$ref": "#/definitions/fanaticslive.LiveShow" - }, - "type": "array" - } - }, - "type": "object" - }, - "fanaticslive.ChannelResponse": { - "properties": { - "id": { + "injection": { + "type": "boolean" + }, + "kind": { + "description": "Kind is the body classification (valid, html, robots, json, ...) for a 200.", "type": "string" }, - "live_shows": { - "description": "LiveShows and ReplayShows are each capped to the first page (see\nGET /fanaticslive/shop/{slug}/shows for cursor-paginated access to a\nchannel's full show history via its parent shop).", + "link_hosts": { "items": { - "$ref": "#/definitions/fanaticslive.LiveShow" + "type": "string" }, "type": "array" }, - "logo_url": { - "type": "string" + "links": { + "type": "integer" }, - "name": { - "type": "string" + "links_with_note": { + "type": "integer" }, - "replay_shows": { + "llm_artifact": { + "type": "boolean" + }, + "markdown_links": { + "type": "integer" + }, + "mentions_api": { + "type": "boolean" + }, + "mentions_mcp": { + "type": "boolean" + }, + "mentions_openapi": { + "type": "boolean" + }, + "mentions_sitemap": { + "type": "boolean" + }, + "placeholder": { + "type": "boolean" + }, + "policy": { "items": { - "$ref": "#/definitions/fanaticslive.LiveShow" + "type": "string" }, "type": "array" }, - "shop": { - "$ref": "#/definitions/fanaticslive.ChannelShopSummary" - } - }, - "type": "object" - }, - "fanaticslive.ChannelShopSummary": { - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" + "sections": { + "type": "integer" }, - "slug": { + "source_kind": { "type": "string" - } - }, - "type": "object" - }, - "fanaticslive.CurrentBreak": { - "properties": { - "break_spots_counts": { - "$ref": "#/definitions/fanaticslive.BreakSpotsCounts" }, - "id": { + "state": { "type": "string" }, - "minimum_bid": { - "$ref": "#/definitions/fanaticslive.Money" + "status": { + "type": "integer" }, - "pricing_type": { - "description": "PricingType: SET_PRICE was observed live; Fanatics Live's own bid/\nbidV2 mutations and currentBreakSpotAuction field strongly imply an\nauction-priced value also exists but it was not observed live.", - "enum": [ - "SET_PRICE" - ], - "example": "SET_PRICE", + "summary": { "type": "string" }, - "status": { - "description": "Status: READY, RIPPING, and COMPLETE were observed live; other\ntransitional states almost certainly also exist but were not\nobserved.", - "enum": [ - "READY", - "RIPPING", - "COMPLETE" - ], - "example": "READY", + "template_key": { "type": "string" }, "title": { "type": "string" }, - "type": { - "description": "Type: PERSONAL (single buyer) and GROUP (sold by the spot) were\nobserved live.", - "enum": [ - "PERSONAL", - "GROUP" - ], - "example": "PERSONAL", - "type": "string" + "valid": { + "type": "boolean" } }, "type": "object" }, - "fanaticslive.CurrentInstantRipBreakSpot": { + "es.LlmsRobots": { "properties": { - "digital_rip_status": { - "type": "string" + "all_ai_blocked": { + "type": "boolean" }, - "id": { - "type": "string" + "bytes": { + "type": "integer" }, - "items": { - "items": { - "$ref": "#/definitions/fanaticslive.InstantRipItem" + "content_signal": { + "additionalProperties": { + "type": "string" }, - "type": "array" + "type": "object" }, - "user": { - "$ref": "#/definitions/fanaticslive.InstantRipUser" - } - }, - "type": "object" - }, - "fanaticslive.InstantRipBreakProduct": { - "properties": { - "is_digital": { - "type": "boolean" + "crawl_delay_secs": { + "type": "integer" }, - "product_id": { - "type": "string" - } - }, - "type": "object" - }, - "fanaticslive.InstantRipBreakSpot": { - "properties": { - "digital_rip_status": { - "type": "string" + "crawlers": { + "additionalProperties": { + "$ref": "#/definitions/es.LlmsCrawlerStance" + }, + "type": "object" }, - "id": { + "default_stance": { "type": "string" - } - }, - "type": "object" - }, - "fanaticslive.InstantRipItem": { - "properties": { - "grading_service": { + }, + "fetched_at": { "type": "string" }, - "id": { + "groups": { + "type": "integer" + }, + "kind": { "type": "string" }, - "image_urls": { + "mentions_ai": { + "type": "boolean" + }, + "mentions_llms_txt": { + "type": "boolean" + }, + "rules": { + "type": "integer" + }, + "sitemaps": { "items": { "type": "string" }, "type": "array" }, - "item_type": { - "description": "ItemType and RevealState value spaces are unconfirmed -- see the\nInstantRipBreakSpot doc comment; no live instant rip was in progress\nduring research to observe real values.", + "state": { "type": "string" }, - "reveal_state": { - "type": "string" + "status": { + "type": "integer" }, - "title": { - "type": "string" + "train_blocked": { + "type": "integer" } }, "type": "object" }, - "fanaticslive.InstantRipUser": { + "es.NumbeoCityRecord": { "properties": { - "avatar_url": { + "city": { "type": "string" }, - "id": { + "city_slug": { "type": "string" }, - "username": { - "type": "string" - } - }, - "type": "object" - }, - "fanaticslive.InstantRipsBreak": { - "properties": { - "current_instant_rip_break_spot": { - "$ref": "#/definitions/fanaticslive.CurrentInstantRipBreakSpot" + "climate_index": { + "type": "number" }, - "id": { + "cost_of_living_index": { + "type": "number" + }, + "cost_of_living_plus_rent_index": { + "type": "number" + }, + "country": { "type": "string" }, - "products": { + "coverage": { + "description": "Coverage lists which of the seven families ranked this entity in the\ncurrent sync run, e.g. [\"cost-of-living\",\"crime\",\"quality-of-life\"].", "items": { - "$ref": "#/definitions/fanaticslive.InstantRipBreakProduct" + "type": "string" }, "type": "array" }, - "spots": { + "crime_index": { + "type": "number" + }, + "extra_indices": { + "description": "ExtraIndices carries any upstream ranking column not mapped to a typed\nfield above (future-proofing against Numbeo adding columns).", "items": { - "$ref": "#/definitions/fanaticslive.InstantRipBreakSpot" + "$ref": "#/definitions/es.NumbeoNamedValue" }, "type": "array" }, - "status": { - "enum": [ - "READY", - "RIPPING", - "COMPLETE" - ], - "example": "READY", - "type": "string" - } - }, - "type": "object" - }, - "fanaticslive.InstantRipsResponse": { - "properties": { - "channel_name": { - "type": "string" + "groceries_index": { + "type": "number" }, - "current_break": { - "allOf": [ - { - "$ref": "#/definitions/fanaticslive.InstantRipsBreak" - } - ], - "description": "CurrentBreak is nil when the show has no active break at request\ntime (confirmed live: mirrors Show.CurrentBreak's nullability)." + "health_care_exp_index": { + "type": "number" }, - "shop_name": { - "type": "string" + "health_care_index": { + "type": "number" }, - "show_id": { - "type": "string" - } - }, - "type": "object" - }, - "fanaticslive.League": { - "properties": { - "id": { - "type": "string" + "local_purchasing_power_index": { + "type": "number" }, - "logo_url": { - "type": "string" + "pollution_exp_index": { + "type": "number" }, - "name": { - "type": "string" + "pollution_index": { + "type": "number" }, - "type": { + "property_affordability_index": { + "type": "number" + }, + "property_gross_rental_yield_city_centre": { + "type": "number" + }, + "property_gross_rental_yield_outside_centre": { + "type": "number" + }, + "property_mortgage_pct_of_income": { + "type": "number" + }, + "property_price_to_income_ratio": { + "type": "number" + }, + "property_price_to_rent_ratio_city_centre": { + "type": "number" + }, + "property_price_to_rent_ratio_outside_centre": { + "type": "number" + }, + "quality_of_life_index": { + "type": "number" + }, + "rent_index": { + "type": "number" + }, + "restaurant_price_index": { + "type": "number" + }, + "safety_index": { + "type": "number" + }, + "schema_version": { + "type": "integer" + }, + "synced_at": { "type": "string" + }, + "traffic_co2_emission_index": { + "type": "number" + }, + "traffic_index": { + "type": "number" + }, + "traffic_inefficiency_index": { + "type": "number" + }, + "traffic_time_exp_index": { + "type": "number" + }, + "traffic_time_index_minutes": { + "type": "number" } }, "type": "object" }, - "fanaticslive.LeaguesResponse": { - "properties": { - "leagues": { - "items": { - "$ref": "#/definitions/fanaticslive.League" - }, - "type": "array" - } - }, - "type": "object" - }, - "fanaticslive.LiveShow": { + "es.NumbeoCountryRecord": { "properties": { - "channel": { - "$ref": "#/definitions/fanaticslive.LiveShowChannel" + "climate_index": { + "type": "number" }, - "cover_image_url": { - "type": "string" + "cost_of_living_index": { + "type": "number" }, - "description": { - "type": "string" + "cost_of_living_plus_rent_index": { + "type": "number" }, - "id": { - "description": "pass as the :id path param to /fanaticslive/show/{id}", + "country": { "type": "string" }, - "leagues": { + "coverage": { + "description": "Coverage lists which of the seven families ranked this entity in the\ncurrent sync run, e.g. [\"cost-of-living\",\"crime\",\"quality-of-life\"].", "items": { "type": "string" }, "type": "array" }, - "name": { - "type": "string" + "crime_index": { + "type": "number" }, - "starts_at": { - "type": "string" + "extra_indices": { + "description": "ExtraIndices carries any upstream ranking column not mapped to a typed\nfield above (future-proofing against Numbeo adding columns).", + "items": { + "$ref": "#/definitions/es.NumbeoNamedValue" + }, + "type": "array" }, - "status": { - "description": "Status is the show's own lifecycle state: ACTIVE (currently live),\nPREPARING (scheduled, not yet started), or COMPLETE (ended -- confirmed\nlive 2026-09-16 via a shop's replay list; ended shows drop out of\nFanatics Live's own league/browse feeds essentially immediately, which\nis why COMPLETE only ever surfaces through a replay-scoped list like\nGET /fanaticslive/shop/{slug}/shows?status=replay, never from Browse).", - "enum": [ - "ACTIVE", - "PREPARING", - "COMPLETE" - ], - "example": "ACTIVE", - "type": "string" + "groceries_index": { + "type": "number" }, - "viewers": { + "health_care_exp_index": { + "type": "number" + }, + "health_care_index": { + "type": "number" + }, + "local_purchasing_power_index": { + "type": "number" + }, + "pollution_exp_index": { + "type": "number" + }, + "pollution_index": { + "type": "number" + }, + "property_affordability_index": { + "type": "number" + }, + "property_gross_rental_yield_city_centre": { + "type": "number" + }, + "property_gross_rental_yield_outside_centre": { + "type": "number" + }, + "property_mortgage_pct_of_income": { + "type": "number" + }, + "property_price_to_income_ratio": { + "type": "number" + }, + "property_price_to_rent_ratio_city_centre": { + "type": "number" + }, + "property_price_to_rent_ratio_outside_centre": { + "type": "number" + }, + "quality_of_life_index": { + "type": "number" + }, + "rent_index": { + "type": "number" + }, + "restaurant_price_index": { + "type": "number" + }, + "safety_index": { + "type": "number" + }, + "schema_version": { "type": "integer" - } - }, - "type": "object" - }, - "fanaticslive.LiveShowChannel": { - "properties": { - "id": { - "type": "string" }, - "name": { + "synced_at": { "type": "string" }, - "shop": { - "$ref": "#/definitions/fanaticslive.LiveShowShop" + "traffic_co2_emission_index": { + "type": "number" + }, + "traffic_index": { + "type": "number" + }, + "traffic_inefficiency_index": { + "type": "number" + }, + "traffic_time_exp_index": { + "type": "number" + }, + "traffic_time_index_minutes": { + "type": "number" } }, "type": "object" }, - "fanaticslive.LiveShowShop": { + "es.NumbeoDatasetFacetItem": { "properties": { - "id": { - "type": "string" - }, - "logo_url": { - "type": "string" - }, - "name": { - "type": "string" + "count": { + "description": "Number of records with this value.", + "type": "integer" }, - "slug": { + "value": { + "description": "Facet value being counted.", "type": "string" } }, "type": "object" }, - "fanaticslive.Money": { + "es.NumbeoNamedValue": { "properties": { - "amount": { - "type": "number" - }, - "amount_display": { + "name": { "type": "string" }, - "currency": { - "type": "string" + "value": { + "type": "number" } }, "type": "object" }, - "fanaticslive.ShopChannel": { + "es.PitchbookFAQRecord": { "properties": { - "id": { + "answer": { "type": "string" }, - "name": { + "question": { "type": "string" } }, "type": "object" }, - "fanaticslive.ShopLinks": { + "es.PitchbookFacetItem": { "properties": { - "instagram": { - "type": "string" - }, - "tiktok": { - "type": "string" - }, - "web": { - "type": "string" - }, - "x": { - "type": "string" + "count": { + "description": "Number of records with this value.", + "type": "integer" }, - "youtube": { + "value": { + "description": "Facet value being counted.", "type": "string" } }, "type": "object" }, - "fanaticslive.ShopResponse": { + "es.PitchbookRecord": { "properties": { - "channels": { - "items": { - "$ref": "#/definitions/fanaticslive.ShopChannel" + "commitments_count": { + "type": "integer" + }, + "contact": { + "additionalProperties": { + "type": "string" }, - "type": "array" + "type": "object" }, - "country": { + "contact_title": { "type": "string" }, - "description": { + "content_hash": { + "description": "ContentHash is an internal fingerprint of this record's content,\nexcluding crawl bookkeeping fields, used to detect whether a\nre-crawled profile actually changed since it was last stored.", "type": "string" }, - "follower_count": { - "type": "integer" - }, - "id": { + "crawled_at": { "type": "string" }, - "links": { - "$ref": "#/definitions/fanaticslive.ShopLinks" + "crawled_at_ms": { + "type": "integer" }, - "logo_url": { + "description": { "type": "string" }, - "name": { + "discovery_source": { "type": "string" }, - "slug": { - "type": "string" + "employees": { + "type": "integer" }, - "staffers": { + "exits_count": { + "type": "integer" + }, + "faqs": { "items": { - "$ref": "#/definitions/fanaticslive.ShopStaffer" + "$ref": "#/definitions/es.PitchbookFAQRecord" }, "type": "array" - } - }, - "type": "object" - }, - "fanaticslive.ShopShowsResponse": { - "properties": { - "has_more": { - "type": "boolean" }, - "next_cursor": { + "financing_status": { "type": "string" }, - "shows": { + "formerly_known_as": { "items": { - "$ref": "#/definitions/fanaticslive.LiveShow" + "type": "string" }, "type": "array" }, - "slug": { + "fund_size": { "type": "string" }, - "status": { - "enum": [ - "live", - "replay" - ], - "example": "live", - "type": "string" - } - }, - "type": "object" - }, - "fanaticslive.ShopStaffer": { - "properties": { - "id": { + "fund_status": { "type": "string" }, - "username": { + "fund_strategy": { + "description": "fund", "type": "string" - } - }, - "type": "object" - }, - "fanaticslive.ShopSummary": { - "properties": { - "follower_count": { - "type": "integer" }, - "id": { + "hq_city": { "type": "string" }, - "logo_url": { + "hq_country": { "type": "string" }, - "name": { + "hq_state": { "type": "string" }, - "slug": { - "description": "pass as the :slug path param to /fanaticslive/shop/{slug}", - "type": "string" - } - }, - "type": "object" - }, - "fanaticslive.ShopsResponse": { - "properties": { - "shops": { - "items": { - "$ref": "#/definitions/fanaticslive.ShopSummary" - }, - "type": "array" - } - }, - "type": "object" - }, - "fanaticslive.ShowChannel": { - "properties": { "id": { "type": "string" }, - "name": { + "institution_type": { + "description": "limited partner", "type": "string" }, - "shop": { - "$ref": "#/definitions/fanaticslive.ShowChannelShop" - } - }, - "type": "object" - }, - "fanaticslive.ShowChannelShop": { - "properties": { - "description": { - "type": "string" + "investments_count": { + "type": "integer" }, - "follower_count": { + "investor_count": { "type": "integer" }, - "id": { + "investor_type": { + "description": "investor", "type": "string" }, - "logo_url": { + "kind": { "type": "string" }, - "name": { + "latest_deal_type": { "type": "string" }, - "slug": { - "type": "string" - } - }, - "type": "object" - }, - "fanaticslive.ShowResponse": { - "properties": { - "breaks": { - "items": { - "$ref": "#/definitions/fanaticslive.BreakSummary" - }, - "type": "array" - }, - "channel": { - "$ref": "#/definitions/fanaticslive.ShowChannel" - }, - "country": { - "type": "string" - }, - "cover_image_url": { - "type": "string" - }, - "current_break": { - "$ref": "#/definitions/fanaticslive.CurrentBreak" - }, - "description": { + "managing_firm_name": { "type": "string" }, - "id": { + "name": { "type": "string" }, - "leagues": { + "other_industries": { "items": { "type": "string" }, "type": "array" }, - "name": { - "type": "string" - }, - "starts_at": { - "type": "string" + "overview": { + "additionalProperties": { + "type": "string" + }, + "type": "object" }, - "status": { - "description": "Status: see LiveShow.Status for the full confirmed enum.", - "enum": [ - "ACTIVE", - "PREPARING", - "COMPLETE" - ], - "example": "ACTIVE", + "ownership_status": { "type": "string" }, - "viewers": { - "type": "integer" - } - }, - "type": "object" - }, - "fanaticslive.browseResponseDoc": { - "properties": { - "code": { - "example": 200, + "portfolio_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fanaticslive.BrowseResponse" - }, - "msg": { - "example": "OK", + "primary_industry": { "type": "string" - } - }, - "type": "object" - }, - "fanaticslive.channelResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/fanaticslive.ChannelResponse" }, - "msg": { - "example": "OK", + "run_id": { "type": "string" - } - }, - "type": "object" - }, - "fanaticslive.instantRipsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/fanaticslive.InstantRipsResponse" - }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "fanaticslive.leaguesResponseDoc": { - "properties": { - "code": { - "example": 200, + "schema_version": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fanaticslive.LeaguesResponse" - }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "fanaticslive.shopResponseDoc": { - "properties": { - "code": { - "example": 200, + "seed_rank": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fanaticslive.ShopResponse" - }, - "msg": { - "example": "OK", + "service_type": { + "description": "advisor", "type": "string" - } - }, - "type": "object" - }, - "fanaticslive.shopShowsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/fanaticslive.ShopShowsResponse" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "fanaticslive.shopsResponseDoc": { - "properties": { - "code": { - "example": 200, + "serviced_companies": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fanaticslive.ShopsResponse" - }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "fanaticslive.showResponseDoc": { - "properties": { - "code": { - "example": 200, + "serviced_deals": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fanaticslive.ShowResponse" - }, - "msg": { - "example": "OK", + "sitemap_lastmod": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.CasinoCategoriesResponse": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/fanduel.CasinoCategory" - }, - "type": "array" }, - "fetched_at": { + "source_url": { "type": "string" }, - "lobby": { + "status": { + "description": "company", "type": "string" }, - "region": { - "type": "string" + "tables": { + "items": { + "$ref": "#/definitions/es.PitchbookTableRecord" + }, + "type": "array" }, - "regions": { + "verticals": { "items": { "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "fanduel.CasinoCategory": { - "properties": { - "note": { - "type": "string" }, - "slug": { - "type": "string" + "vintage_year": { + "type": "integer" }, - "title": { + "website": { "type": "string" + }, + "year_founded": { + "type": "integer" } }, "type": "object" }, - "fanduel.CasinoCategoryResponse": { + "es.PitchbookTableRecord": { "properties": { - "badges": { + "columns": { "items": { - "$ref": "#/definitions/fanduel.CasinoCount" + "type": "string" }, "type": "array" }, - "cached_at": { - "type": "string" - }, - "category": { - "$ref": "#/definitions/fanduel.CasinoCategory" - }, - "category_total": { - "type": "integer" - }, - "fetched_at": { + "name": { "type": "string" }, - "games": { + "row_ids": { + "description": "RowIDs[i][j] is \"/\" when Rows[i][j]'s cell links to another\nPitchBook profile, \"\" otherwise.", "items": { - "$ref": "#/definitions/fanduel.CasinoGame" + "items": { + "type": "string" + }, + "type": "array" }, "type": "array" }, - "limit": { - "type": "integer" - }, - "lobby": { - "type": "string" - }, - "offset": { - "type": "integer" - }, - "providers": { + "rows": { "items": { - "$ref": "#/definitions/fanduel.CasinoCount" + "items": { + "type": "string" + }, + "type": "array" }, "type": "array" }, - "region": { - "type": "string" - }, "total": { "type": "integer" } }, "type": "object" }, - "fanduel.CasinoCount": { + "es.PlaystationGameDatasetFacetItem": { "properties": { "count": { "type": "integer" @@ -71432,7537 +74919,9120 @@ }, "type": "object" }, - "fanduel.CasinoGame": { + "es.PlaystationGameRecord": { "properties": { - "badge": { - "type": "string" + "addon_count": { + "description": "Number of add-ons the game has on the PlayStation Store.", + "type": "integer" }, - "game_url": { - "type": "string" + "base_price_value": { + "description": "List price before any discount, in minor units of `currency` (for example cents).", + "type": "integer" }, - "name": { + "classification": { + "description": "Classification is the storeDisplayClassification (FULL_GAME, PREMIUM_EDITION,\nGAME_BUNDLE, ADD_ON_PACK, VIRTUAL_CURRENCY, LEVEL, OTHER, ...).", "type": "string" }, - "position": { - "type": "integer" + "coming_soon": { + "description": "Whether the product is not yet purchasable and is listed as coming soon.", + "type": "boolean" }, - "provider": { + "concept_id": { + "description": "PlayStation Store id shared by all editions and add-ons of the same title.", "type": "string" }, - "site_wide_jackpot": { - "type": "boolean" + "content_descriptors": { + "description": "Content notices shown with the rating, for example `Blood` or `In-Game Purchases`.", + "items": { + "type": "string" + }, + "type": "array" }, - "slug": { + "content_rating_authority": { + "description": "Organization that issued the age rating, for example `ESRB`.", "type": "string" - } - }, - "type": "object" - }, - "fanduel.CasinoGameResponse": { - "properties": { - "badge": { + }, + "content_rating_desc": { + "description": "Description text of the age rating.", "type": "string" }, - "bet_range": { + "content_rating_name": { + "description": "Name of the age rating.", "type": "string" }, - "category": { + "crawled_at": { + "description": "Time the product's data was fetched, in UTC (RFC 3339).", + "type": "string" + }, + "currency": { + "description": "ISO currency code that the prices are in.", "type": "string" }, "description": { + "description": "Product description from the PlayStation Store.", "type": "string" }, - "features": { + "discount_end_time": { + "description": "Time the current discount ends, as the PlayStation Store reports it.", + "type": "string" + }, + "discount_pct": { + "description": "Discount off the list price, as a percentage from 0 to 100.", + "type": "integer" + }, + "discount_text": { + "description": "Discount label shown on the PlayStation Store.", + "type": "string" + }, + "discounted_value": { + "description": "Current price after any discount, in minor units of `currency` (for example cents).", + "type": "integer" + }, + "edition_count": { + "description": "Number of editions the title has on the PlayStation Store.", + "type": "integer" + }, + "genres": { + "description": "List of genres the PlayStation Store shows for the title.", "items": { "type": "string" }, "type": "array" }, - "fetched_at": { + "header_image": { + "description": "URL of the header image shown on the store page.", "type": "string" }, - "game_id": { - "type": "string" + "is_addon": { + "description": "Whether the product is an add-on such as DLC or in-game currency, rather than a game or edition.", + "type": "boolean" }, - "max_bet": { - "type": "number" + "is_free": { + "description": "Whether the product is free.", + "type": "boolean" }, - "min_bet": { - "type": "number" + "is_tied_to_subscription": { + "description": "Whether the product is included with a subscription such as PlayStation Plus.", + "type": "boolean" }, "name": { + "description": "Product name as shown on the PlayStation Store.", "type": "string" }, - "players_now": { - "type": "integer" + "np_title_id": { + "description": "PlayStation title id shared by all SKUs of the same title.", + "type": "string" }, - "provider_name": { + "platforms": { + "description": "Consoles the product runs on, for example `PS4` or `PS5`.", + "items": { + "type": "string" + }, + "type": "array" + }, + "price_tier": { + "description": "Price band of the current price: `free`, `under_5`, `5_to_10`, `10_to_20`, `20_to_40`, `40_to_60` or `60_plus`.", "type": "string" }, - "provider_ref": { + "product_id": { + "description": "PlayStation Store product id of this edition or add-on.", "type": "string" }, - "region": { + "publisher": { + "description": "Name of the book's publisher.", "type": "string" }, - "slug": { + "quality_checked_at": { + "description": "Time the record was last repaired, in UTC (RFC 3339). Present only for repaired records.", "type": "string" }, - "studio": { + "quality_reason": { + "description": "Outcome of the last completeness check on the record.", "type": "string" }, - "summary_tag": { + "quality_state": { + "description": "Quality* records the terminal/backfill state without changing the last\nknown crawl snapshot. It is populated only for the targeted repair flow.", "type": "string" }, - "themes": { + "region": { + "description": "Region is the store country code the record was crawled from (selects currency).", + "type": "string" + }, + "release_date": { + "description": "Release date as the PlayStation Store reports it.", + "type": "string" + }, + "release_year": { + "description": "Year the title was released.", + "type": "integer" + }, + "run_id": { + "description": "Identifier of the collection run that produced this record. Accepted as a `run_id` filter.", + "type": "string" + }, + "schema_version": { + "description": "Version of the record layout.", + "type": "integer" + }, + "seed_rank": { + "description": "Discovery priority of the title; lower values mean it was found earlier.", + "type": "integer" + }, + "service_branding": { + "description": "Subscription service labels shown on the product.", "items": { "type": "string" }, "type": "array" }, - "trend": { + "source_url": { + "description": "URL the data was read from.", "type": "string" }, - "url": { - "type": "string" + "star_rating_avg": { + "description": "Average user star rating of the title.", + "type": "number" }, - "volatility": { - "type": "string" + "star_rating_count": { + "description": "Number of user ratings behind the star rating.", + "type": "integer" } }, "type": "object" }, - "fanduel.QuickPicksDailyEpisode": { + "es.PostSound": { "properties": { - "duration_seconds": { - "type": "number" - }, - "id": { + "author": { + "description": "Name of the account or artist credited for the sound.", "type": "string" }, - "image_url": { + "music_id": { + "description": "TikTok identifier of the sound.", "type": "string" }, - "in_rss_playlist": { + "original": { + "description": "Original marks TikTok-generated original audio. Titles cannot be used for this:\nTikTok localizes the label (`sonido original`, `оригинальный звук`, …), so a\ntitle match silently reclassifies original audio as a named track.", "type": "boolean" }, - "published_at": { - "type": "string" - }, - "summary": { - "type": "string" - }, "title": { + "description": "Title of the sound as TikTok shows it.", "type": "string" }, - "url": { - "type": "string" + "uses": { + "description": "Number of the creator's sampled recent posts that used this sound.", + "type": "integer" } }, "type": "object" }, - "fanduel.QuickPicksDailyResponse": { + "es.PostStatsAgg": { "properties": { - "episodes": { - "items": { - "$ref": "#/definitions/fanduel.QuickPicksDailyEpisode" - }, - "type": "array" - }, - "fetched_at": { + "analyzed_at": { + "description": "Time these post statistics were calculated, in UTC (RFC 3339).", "type": "string" }, - "next_cursor": { - "type": "string" + "avg_comments": { + "description": "Average comment count per sampled post.", + "type": "integer" }, - "page": { + "avg_likes": { + "description": "Average like count per sampled post.", "type": "integer" }, - "page_size": { + "avg_saves": { + "description": "Average save (bookmark) count per sampled post.", "type": "integer" }, - "podcast": { - "type": "string" + "avg_shares": { + "description": "Average share count per sampled post.", + "type": "integer" }, - "publisher": { + "avg_video_duration_sec": { + "description": "Average video length of sampled posts, in seconds.", + "type": "number" + }, + "avg_views": { + "description": "Average view count per sampled post.", + "type": "integer" + }, + "best_post_id": { + "description": "TikTok identifier of the most viewed sampled post.", "type": "string" }, - "show_url": { + "best_post_views": { + "description": "View count of the most viewed sampled post.", + "type": "integer" + }, + "distinct_sounds": { + "description": "DistinctSounds is how many different sounds the sampled posts used. TopSounds\nkeeps only the five most-used, so without this a consumer cannot tell a\ncreator who reuses one sound across the sample from one who used a different\nsound every time — both surface five rows.", + "type": "integer" + }, + "engagement_rate_by_follower": { + "description": "Average over sampled posts of likes, comments and shares divided by the creator's follower count, as a fraction.", + "type": "number" + }, + "engagement_rate_by_view": { + "description": "Likes, comments, shares and saves divided by views across sampled posts, as a fraction (0.05 means 5%).", + "type": "number" + }, + "first_post_at": { + "description": "Time of the oldest sampled post, in UTC (RFC 3339).", "type": "string" }, - "source_url": { + "last_post_at": { + "description": "Time of the most recent sampled post, in UTC (RFC 3339).", "type": "string" }, - "total_count": { + "median_likes": { + "description": "Median like count across sampled posts.", "type": "integer" - } - }, - "type": "object" - }, - "fanduel.RacingAveragePace": { - "properties": { - "early": { - "type": "number" }, - "finish": { + "median_views": { + "description": "Median view count across sampled posts.", + "type": "integer" + }, + "original_sound_ratio": { + "description": "Share of sampled posts that use the creator's own original sound, as a fraction from 0 to 1.", "type": "number" }, - "middle": { + "posts_per_week": { + "description": "Average number of posts per week between the oldest and newest sampled post.", "type": "number" }, - "races": { + "sampled_posts": { + "description": "Number of the creator's recent posts included in these figures.", "type": "integer" + }, + "top_hashtags": { + "description": "Most used hashtags across sampled posts, lowercase and without the leading `#`, most used first.", + "items": { + "type": "string" + }, + "type": "array" + }, + "top_sounds": { + "description": "Most used sounds across sampled posts, most used first.", + "items": { + "$ref": "#/definitions/es.PostSound" + }, + "type": "array" + }, + "views_to_follower_ratio": { + "description": "Average views per sampled post divided by the creator's follower count.", + "type": "number" } }, "type": "object" }, - "fanduel.RacingCarryoverPool": { + "es.ProductHuntLaunch": { "properties": { - "amount": { - "type": "number" + "daily_rank": { + "description": "Rank on the Product Hunt daily leaderboard for the launch day.", + "type": "integer" }, - "mtp": { + "date": { + "description": "Launch date, in YYYY-MM-DD format.", + "type": "string" + }, + "launch_day_score": { + "description": "Score the launch had on its launch day.", "type": "integer" }, - "pool_type": { + "launch_number": { + "description": "Sequence number of this launch among the product's Product Hunt launches.", + "type": "integer" + }, + "monthly_rank": { + "description": "Rank on the Product Hunt monthly leaderboard.", + "type": "integer" + }, + "post_id": { + "description": "Product Hunt identifier of the launch post.", "type": "string" }, - "post_time": { + "post_slug": { + "description": "URL slug of the launch post on Product Hunt.", "type": "string" }, - "race_number": { + "score": { + "description": "Upvote count of the launch post.", "type": "integer" }, - "race_status": { - "$ref": "#/definitions/fanduel.RacingCodeName" + "weekly_rank": { + "description": "Rank on the Product Hunt weekly leaderboard.", + "type": "integer" + } + }, + "type": "object" + }, + "es.ProductHuntMaker": { + "properties": { + "avatar_url": { + "description": "URL of the maker's profile picture.", + "type": "string" }, - "track_code": { + "headline": { + "description": "Short headline from the maker's Product Hunt profile.", "type": "string" }, - "track_name": { + "maker_id": { + "description": "Product Hunt identifier of the maker.", "type": "string" }, - "wager_type": { - "$ref": "#/definitions/fanduel.RacingCodeName" + "name": { + "description": "Maker's display name.", + "type": "string" + }, + "username": { + "description": "Maker's Product Hunt username. Use it with the maker item endpoint.", + "type": "string" } }, "type": "object" }, - "fanduel.RacingCarryoverResponse": { + "es.ProductHuntMakerItem": { "properties": { - "fetched_at": { + "avatar_url": { + "description": "URL of the maker's profile picture.", "type": "string" }, - "limit": { - "type": "integer" + "best_product": { + "allOf": [ + { + "$ref": "#/definitions/es.ProductHuntMakerProduct" + } + ], + "description": "The maker's product with the highest upvote count." }, - "page": { + "first_launch_date": { + "description": "Date of the maker's earliest product launch, in YYYY-MM-DD format.", + "type": "string" + }, + "followers_count": { + "description": "Number of Product Hunt users following the maker.", "type": "integer" }, - "pools": { + "headline": { + "description": "Short headline from the maker's Product Hunt profile.", + "type": "string" + }, + "latest_launch_date": { + "description": "Date of the maker's most recent product launch, in YYYY-MM-DD format.", + "type": "string" + }, + "made_products": { + "description": "Products the maker is credited with on Product Hunt.", "items": { - "$ref": "#/definitions/fanduel.RacingCarryoverPool" + "$ref": "#/definitions/es.ProductHuntMakerProduct" }, "type": "array" }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "fanduel.RacingCodeName": { - "properties": { - "code": { + "maker_id": { + "description": "Product Hunt identifier of the maker.", "type": "string" }, "name": { + "description": "Maker's display name.", + "type": "string" + }, + "product_count": { + "description": "Number of products the maker is credited with.", + "type": "integer" + }, + "topics": { + "description": "Slugs of the topics the maker's products are filed under.", + "items": { + "type": "string" + }, + "type": "array" + }, + "total_votes": { + "description": "Total upvotes across the maker's products.", + "type": "integer" + }, + "username": { + "description": "Maker's Product Hunt username. Use it with the maker item endpoint.", "type": "string" } }, "type": "object" }, - "fanduel.RacingCombo": { + "es.ProductHuntMakerProduct": { "properties": { - "payout": { + "latest_score": { + "description": "Current upvote count of the product.", + "type": "integer" + }, + "name": { + "description": "Product name as shown on Product Hunt.", "type": "string" }, - "runner1": { + "product_id": { + "description": "Product Hunt identifier of the product.", "type": "string" }, - "runner2": { + "slug": { + "description": "URL slug of the product on Product Hunt.", "type": "string" } }, "type": "object" }, - "fanduel.RacingCount": { + "es.ProductHuntMakersFacetItem": { "properties": { - "code": { - "type": "string" - }, "count": { "type": "integer" }, - "name": { + "value": { "type": "string" } }, "type": "object" }, - "fanduel.RacingEntry": { + "es.ProductHuntProductItem": { "properties": { - "current_odds": { - "$ref": "#/definitions/fanduel.RacingOdds" + "best_daily_rank": { + "description": "Best position the product reached on a Product Hunt daily leaderboard.", + "type": "integer" }, - "favorite": { - "type": "boolean" + "best_monthly_rank": { + "description": "Best position the product reached on a Product Hunt monthly leaderboard.", + "type": "integer" }, - "morning_line": { - "$ref": "#/definitions/fanduel.RacingOdds" + "best_weekly_rank": { + "description": "Best position the product reached on a Product Hunt weekly leaderboard.", + "type": "integer" }, - "number": { + "comments_count": { + "description": "Number of comments on the product's Product Hunt page.", "type": "integer" }, - "number_color": { + "description": { + "description": "Product description as the maker wrote it on Product Hunt.", "type": "string" }, - "pool_grids": { - "description": "include=pool_grids", - "items": { - "$ref": "#/definitions/fanduel.RacingPoolGrid" - }, - "type": "array" + "first_launch_date": { + "description": "Date of the product's earliest launch, in YYYY-MM-DD format.", + "type": "string" }, - "recent_odds": { - "items": { - "$ref": "#/definitions/fanduel.RacingRecentOdd" - }, - "type": "array" + "followers_count": { + "description": "Number of Product Hunt users following the product.", + "type": "integer" }, - "runners": { - "items": { - "$ref": "#/definitions/fanduel.RacingRunner" - }, - "type": "array" + "is_no_longer_online": { + "description": "Whether Product Hunt marks the product as no longer online.", + "type": "boolean" }, - "saddle_color": { + "is_top_product": { + "description": "Whether Product Hunt flags the product as a top product.", + "type": "boolean" + }, + "latest_launch_date": { + "description": "Date of the product's most recent launch, in YYYY-MM-DD format.", "type": "string" - } - }, - "type": "object" - }, - "fanduel.RacingFavoriteRank": { - "properties": { - "current_odds": { - "type": "integer" }, - "high_speed": { + "latest_score": { + "description": "Current upvote count of the product.", "type": "integer" }, - "morning_line": { + "launch_count": { + "description": "Number of times the product has launched on Product Hunt.", "type": "integer" }, - "power_rating": { + "launch_year": { + "description": "Year of the product's first launch.", "type": "integer" - } - }, - "type": "object" - }, - "fanduel.RacingFiltersResponse": { - "properties": { - "classes": { + }, + "launches": { + "description": "Each launch of the product on Product Hunt, with its date, ranks and score.", "items": { - "$ref": "#/definitions/fanduel.RacingCount" + "$ref": "#/definitions/es.ProductHuntLaunch" }, "type": "array" }, - "countries": { + "logo_uuid": { + "description": "Identifier of the product logo image on Product Hunt.", + "type": "string" + }, + "makers": { + "description": "People credited as makers of the product.", "items": { - "$ref": "#/definitions/fanduel.RacingCount" + "$ref": "#/definitions/es.ProductHuntMaker" }, "type": "array" }, - "fetched_at": { + "name": { + "description": "Product name as shown on Product Hunt.", "type": "string" }, - "race_count": { + "pricing_type": { + "description": "Pricing model of the product, such as `free`, `paid` or `freemium`.", + "type": "string" + }, + "primary_topic": { + "description": "Slug of the product's main topic.", + "type": "string" + }, + "product_id": { + "description": "Product Hunt identifier of the product.", + "type": "string" + }, + "product_state": { + "description": "Lifecycle state of the product as Product Hunt reports it.", + "type": "string" + }, + "reviews_count": { + "description": "Number of reviews the product has on Product Hunt.", "type": "integer" }, - "race_date": { + "reviews_rating": { + "description": "Average review rating out of 5.", + "type": "number" + }, + "slug": { + "description": "URL slug of the product on Product Hunt. Use it with the product item endpoint.", "type": "string" }, - "race_sorts": { + "tagline": { + "description": "One-line tagline of the product.", + "type": "string" + }, + "topic_slugs": { + "description": "Slugs of all topics the product is filed under.", "items": { "type": "string" }, "type": "array" }, - "race_types": { + "topics": { + "description": "Topics the product is filed under.", "items": { - "$ref": "#/definitions/fanduel.RacingCount" + "$ref": "#/definitions/es.ProductHuntTopic" }, "type": "array" }, - "statuses": { - "items": { - "$ref": "#/definitions/fanduel.RacingCount" - }, - "type": "array" + "twitter_url": { + "description": "URL of the product's X (Twitter) profile.", + "type": "string" }, - "surfaces": { - "items": { - "$ref": "#/definitions/fanduel.RacingCount" - }, - "type": "array" + "url": { + "description": "URL of the product's page on Product Hunt.", + "type": "string" }, - "track_count": { - "type": "integer" + "website": { + "description": "URL of the product's own website.", + "type": "string" }, - "track_sorts": { - "items": { - "type": "string" - }, - "type": "array" + "won_daily": { + "description": "Whether the product ranked first on a Product Hunt daily leaderboard.", + "type": "boolean" } }, "type": "object" }, - "fanduel.RacingFinisher": { + "es.ProductHuntProductsFacetItem": { "properties": { - "entry": { - "description": "Set only with include=timeform.", + "count": { + "description": "Number of products in this bucket.", "type": "integer" }, - "finish_status": { + "value": { + "description": "Bucket value, such as a topic slug, a four-digit launch year, a pricing type or a product state.", "type": "string" - }, - "number": { + } + }, + "type": "object" + }, + "es.ProductHuntTopic": { + "properties": { + "id": { + "description": "Product Hunt identifier of the topic.", "type": "string" }, - "place_payoff": { - "type": "number" - }, - "position": { - "type": "integer" - }, - "runner": { + "name": { + "description": "Topic name as Product Hunt shows it.", "type": "string" }, - "show_payoff": { - "type": "number" - }, - "silk_url": { + "slug": { + "description": "URL slug of the topic on Product Hunt.", "type": "string" - }, - "timeform": { - "$ref": "#/definitions/fanduel.RacingFinisherTimeform" - }, - "win_payoff": { - "type": "number" } }, "type": "object" }, - "fanduel.RacingFinisherTimeform": { + "es.ProductHuntTrendCell": { "properties": { - "beaten_lengths": { + "avg_rating": { + "description": "Average review rating out of 5 across the cell's launches. Omitted when too few launches have ratings.", "type": "number" }, - "beaten_text": { - "type": "string" + "avg_votes": { + "description": "Average upvotes per launched product in the cell.", + "type": "number" }, - "post_race_report": { - "type": "string" + "launches": { + "description": "Number of product launches in the cell.", + "type": "integer" }, - "starting_price": { - "type": "number" + "period": { + "description": "\"2024-01\" | \"2024\" | \"\" for all-time", + "type": "string" }, - "total_beaten_lengths": { - "type": "number" + "top_product": { + "allOf": [ + { + "$ref": "#/definitions/es.ProductHuntTrendTopProduct" + } + ], + "description": "Product with the most upvotes in the cell." }, - "total_beaten_text": { + "topic": { + "description": "Slug of the Product Hunt topic the cell covers.", "type": "string" + }, + "total_votes": { + "description": "Total upvotes across the launches in the cell.", + "type": "integer" } }, "type": "object" }, - "fanduel.RacingFreePick": { + "es.ProductHuntTrendTopProduct": { "properties": { - "info": { + "name": { + "description": "Product name as shown on Product Hunt.", "type": "string" }, - "number": { + "slug": { + "description": "URL slug of the product on Product Hunt.", + "type": "string" + }, + "votes": { + "description": "Upvote count of the product.", "type": "integer" } }, "type": "object" }, - "fanduel.RacingHandicapping": { + "es.ProductHuntTrendsFacetItem": { "properties": { - "average_pace": { - "$ref": "#/definitions/fanduel.RacingAveragePace" - }, - "free_pick": { - "$ref": "#/definitions/fanduel.RacingFreePick" - }, - "jockey_trainer": { - "$ref": "#/definitions/fanduel.RacingJockeyTrainer" - }, - "past_results": { - "$ref": "#/definitions/fanduel.RacingPastResults" - }, - "snapshot": { - "$ref": "#/definitions/fanduel.RacingSnapshot" + "count": { + "description": "Number of products in this bucket.", + "type": "integer" }, - "speed_and_class": { - "$ref": "#/definitions/fanduel.RacingSpeedAndClass" + "value": { + "description": "Bucket value, either a topic slug or a four-digit launch year.", + "type": "string" } }, "type": "object" }, - "fanduel.RacingHorseRace": { + "es.RedditTrendingEntry": { "properties": { - "claiming_price": { - "type": "number" - }, - "date": { + "author": { "type": "string" }, - "description": { + "crawled_at": { "type": "string" }, - "distance": { - "$ref": "#/definitions/fanduel.RacingPastDistance" + "created_utc": { + "type": "integer" }, - "id": { + "domain": { "type": "string" }, - "number": { + "permalink": { "type": "string" }, - "post_time": { + "post_id": { "type": "string" }, - "purse": { - "type": "number" - }, - "race_class": { - "$ref": "#/definitions/fanduel.RacingCodeName" - }, - "race_type": { - "$ref": "#/definitions/fanduel.RacingCodeName" - }, - "result": { - "$ref": "#/definitions/fanduel.RacingFinisher" + "post_uid": { + "type": "string" }, - "runner_count": { + "rank": { "type": "integer" }, - "surface": { - "$ref": "#/definitions/fanduel.RacingCodeName" - }, - "track_code": { + "snapshot_date": { "type": "string" }, - "track_condition": { + "subreddit": { "type": "string" }, - "track_name": { + "title": { "type": "string" }, - "winning_time": { - "type": "number" + "url": { + "type": "string" } }, "type": "object" }, - "fanduel.RacingHorseResponse": { + "es.ScamTrackerReport": { "properties": { - "fetched_at": { + "business_name": { "type": "string" }, - "id": { + "country": { "type": "string" }, - "limit": { - "type": "integer" - }, - "page": { - "type": "integer" + "crawled_at": { + "type": "string" }, - "races": { - "items": { - "$ref": "#/definitions/fanduel.RacingHorseRace" - }, - "type": "array" + "date_reported": { + "type": "string" }, - "starts": { - "type": "integer" + "description": { + "type": "string" }, - "top3": { - "type": "integer" + "discovery_source": { + "type": "string" }, - "total": { - "type": "integer" + "dollars_lost": { + "type": "string" }, - "win_percentage": { + "loss_amount": { "type": "number" }, - "wins": { - "type": "integer" - } - }, - "type": "object" - }, - "fanduel.RacingJockeyTrainer": { - "properties": { - "jockey_entity_id": { - "type": "integer" - }, - "jockey_name": { + "report_id": { "type": "string" }, - "places": { - "type": "integer" - }, - "shows": { - "type": "integer" - }, - "starts": { - "type": "integer" + "reported_at": { + "type": "string" }, - "trainer_entity_id": { - "type": "integer" + "scam_type": { + "type": "string" }, - "trainer_name": { + "scammer_email": { "type": "string" }, - "wins": { - "type": "integer" - } - }, - "type": "object" - }, - "fanduel.RacingLastEvent": { - "properties": { - "date": { + "scammer_location": { "type": "string" }, - "race": { - "type": "integer" + "scammer_phone": { + "type": "string" }, - "track": { + "scammer_url": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.RacingLegResult": { - "properties": { - "leg": { - "type": "integer" }, - "winning_entry": { - "type": "integer" - } - }, - "type": "object" - }, - "fanduel.RacingNextRace": { - "properties": { - "mtp": { + "schema_version": { "type": "integer" }, - "number": { + "source_url": { "type": "string" }, - "post_time": { + "state": { "type": "string" }, - "status": { - "$ref": "#/definitions/fanduel.RacingCodeName" + "targeted_location": { + "type": "string" } }, "type": "object" }, - "fanduel.RacingOdds": { + "es.ScamTrackerReportsFacetItem": { "properties": { - "decimal": { - "type": "number" + "count": { + "type": "integer" }, - "fractional": { + "value": { "type": "string" } }, "type": "object" }, - "fanduel.RacingPastDistance": { + "es.SecCompanyFacetItem": { "properties": { - "code": { - "type": "string" - }, - "unit": { - "type": "string" + "count": { + "type": "integer" }, "value": { - "type": "number" + "type": "string" } }, "type": "object" }, - "fanduel.RacingPastEntry": { + "es.SecCompanyRecord": { "properties": { - "favorite": { - "type": "boolean" - }, - "final_odds": { - "$ref": "#/definitions/fanduel.RacingOdds" + "cik": { + "description": "SEC Central Index Key of the company. Use it with the company item endpoint.", + "type": "integer" }, - "morning_line": { - "$ref": "#/definitions/fanduel.RacingOdds" + "cik_padded": { + "description": "CIK zero-padded to 10 digits, usually with a `CIK` prefix, such as `CIK0000320193`.", + "type": "string" }, - "number": { - "type": "integer" + "crawled_at": { + "description": "Time the company record was last collected, in UTC (RFC 3339).", + "type": "string" }, - "number_color": { + "entity_type": { + "description": "Entity type EDGAR reports for the filer, such as `operating`.", "type": "string" }, - "runners": { + "exchange": { + "description": "Stock exchanges the company is listed on, as EDGAR reports them, such as `Nasdaq` or `NYSE`.", "items": { - "$ref": "#/definitions/fanduel.RacingPastRunner" + "type": "string" }, "type": "array" }, - "saddle_color": { - "type": "string" - } - }, - "type": "object" - }, - "fanduel.RacingPastRaceResponse": { - "properties": { - "claiming_price": { - "type": "number" + "filing_count": { + "description": "Number of filings the company has on EDGAR.", + "type": "integer" }, - "date": { + "financials_synced_at": { + "description": "Time the financial figures were last updated, in UTC (RFC 3339).", "type": "string" }, - "description": { + "fiscal_year_end": { + "description": "Last day of the company's fiscal year as month and day (MMDD), for example `0928`.", "type": "string" }, - "distance": { - "$ref": "#/definitions/fanduel.RacingPastDistance" + "former_names": { + "description": "Names the company filed under previously.", + "items": { + "type": "string" + }, + "type": "array" }, - "entries": { + "forms_filed": { + "description": "Distinct SEC form types the company has filed.", "items": { - "$ref": "#/definitions/fanduel.RacingPastEntry" + "type": "string" }, "type": "array" }, - "fetched_at": { + "insider_last_transaction_at": { + "description": "Date of the most recent insider transaction in the last 90 days.", "type": "string" }, - "has_replay": { - "type": "boolean" - }, - "id": { - "type": "string" + "insider_net_shares_90d": { + "description": "Shares insiders acquired minus shares they disposed of over the last 90 days. Negative when more were sold.", + "type": "number" }, - "number": { - "type": "string" + "insider_txn_count_90d": { + "description": "Number of insider transactions reported over the last 90 days.", + "type": "integer" }, - "post_time": { - "type": "string" + "latest_annual_fiscal_year": { + "description": "Fiscal year of the latest annual financial figures.", + "type": "integer" }, - "purse": { + "latest_annual_net_income": { + "description": "Net income for the latest fiscal year, in the filer's reporting currency.", "type": "number" }, - "race_class": { - "$ref": "#/definitions/fanduel.RacingCodeName" + "latest_annual_net_income_usd": { + "description": "Net income for the latest fiscal year, converted to US dollars at a fixed reference rate.", + "type": "number" }, - "race_type": { - "$ref": "#/definitions/fanduel.RacingCodeName" + "latest_annual_revenue": { + "description": "Revenue for the latest fiscal year, in the filer's reporting currency.", + "type": "number" }, - "results": { - "$ref": "#/definitions/fanduel.RacingResults" + "latest_annual_revenue_usd": { + "description": "Revenue for the latest fiscal year, converted to US dollars at a fixed reference rate.", + "type": "number" }, - "runner_count": { - "type": "integer" + "latest_annual_total_assets": { + "description": "Total assets at the end of the latest fiscal year, in the filer's reporting currency.", + "type": "number" }, - "surface": { - "$ref": "#/definitions/fanduel.RacingCodeName" + "latest_annual_total_assets_usd": { + "description": "Total assets at the end of the latest fiscal year, converted to US dollars at a fixed reference rate.", + "type": "number" }, - "track_code": { + "latest_filing_date": { + "description": "Date of the company's most recent filing, in YYYY-MM-DD format.", "type": "string" }, - "track_condition": { - "type": "string" + "latest_quarterly_fiscal_year": { + "description": "Fiscal year of the latest quarterly financial figures.", + "type": "integer" }, - "track_name": { - "type": "string" - } - }, - "type": "object" - }, - "fanduel.RacingPastRaceSummary": { - "properties": { - "claiming_price": { + "latest_quarterly_revenue": { + "description": "Revenue for the latest reported quarter, in the filer's reporting currency.", "type": "number" }, - "date": { + "name": { + "description": "Company name as registered with the SEC.", "type": "string" }, - "description": { + "primary_ticker": { + "description": "Main stock ticker symbol of the company.", "type": "string" }, - "distance": { - "$ref": "#/definitions/fanduel.RacingPastDistance" - }, - "id": { - "type": "string" + "recent_filings": { + "description": "Most recent filings of the company, newest first.", + "items": { + "$ref": "#/definitions/es.SecFilingSummary" + }, + "type": "array" }, - "number": { + "reporting_currency": { + "description": "Native-currency figures are exactly as the filer reported them (see\nReportingCurrency); the *USD fields are the same values converted at fixed\nreference rates so they can be sorted, banded and range-filtered ACROSS\ncurrencies. Screen on the USD fields; display the native value + currency.", "type": "string" }, - "post_time": { + "revenue_band": { + "description": "Size band of the latest annual revenue in US dollars: `under_1m`, `1m_10m`, `10m_100m`, `100m_1b`, `1b_10b`, `over_10b` or `unknown`.", "type": "string" }, - "purse": { - "type": "number" - }, - "race_class": { - "$ref": "#/definitions/fanduel.RacingCodeName" - }, - "race_type": { - "$ref": "#/definitions/fanduel.RacingCodeName" - }, - "runner_count": { + "schema_version": { + "description": "Version of the record format.", "type": "integer" }, - "surface": { - "$ref": "#/definitions/fanduel.RacingCodeName" + "seed_source": { + "description": "Label of the SEC company list this record was first built from.", + "type": "string" }, - "track_code": { + "sic": { + "description": "Standard Industrial Classification code of the company.", "type": "string" }, - "track_condition": { + "sic_description": { + "description": "Plain-text description of the company's SIC code.", "type": "string" }, - "track_name": { + "state_of_incorporation": { + "description": "Code of the state or country where the company is incorporated.", + "type": "string" + }, + "submissions_synced_at": { + "description": "Time the filing history was last updated, in UTC (RFC 3339).", "type": "string" + }, + "tickers": { + "description": "All stock ticker symbols of the company.", + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "fanduel.RacingPastRacesResponse": { + "es.SecFilingSummary": { "properties": { - "date": { + "accession_number": { + "description": "SEC accession number that uniquely identifies the filing.", "type": "string" }, - "fetched_at": { + "filing_date": { + "description": "Date the filing was submitted to the SEC, in YYYY-MM-DD format.", "type": "string" }, - "limit": { - "type": "integer" - }, - "page": { - "type": "integer" - }, - "races": { - "items": { - "$ref": "#/definitions/fanduel.RacingPastRaceSummary" - }, - "type": "array" - }, - "total": { - "type": "integer" + "form": { + "description": "SEC form type of the filing, such as `10-K`, `10-Q` or `8-K`.", + "type": "string" }, - "track": { + "primary_doc_url": { + "description": "URL of the filing's main document on SEC.gov.", "type": "string" } }, "type": "object" }, - "fanduel.RacingPastResults": { + "es.SecFinancialsHistoryPoint": { "properties": { - "first": { + "cik": { + "description": "SEC Central Index Key of the company.", "type": "integer" }, - "second": { - "type": "integer" + "currency": { + "description": "Currency the figures are reported in, such as `USD`.", + "type": "string" }, - "starts": { - "type": "integer" + "end_date": { + "description": "Last day of the reporting period, in YYYY-MM-DD format.", + "type": "string" }, - "third": { + "fiscal_period": { + "description": "e.g. FY, Q1..Q4", + "type": "string" + }, + "fiscal_year": { + "description": "Fiscal year the period belongs to.", "type": "integer" }, - "top3_percentage": { - "type": "number" + "form": { + "description": "SEC form the figures were reported in, such as `10-K`.", + "type": "string" }, - "top3_percentage_ranking": { + "lines": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "description": "Financial statement line items for the period, keyed by name such as `revenue` or `net_income`.", + "type": "object" + }, + "period": { + "description": "annual | quarterly", "type": "string" }, - "win_percentage": { - "type": "number" + "ratios": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "description": "Ratios calculated from the line items, keyed by name such as `gross_margin` or `net_margin`.", + "type": "object" }, - "win_percentage_ranking": { + "statement": { + "description": "income | balance | cash_flow", + "type": "string" + }, + "synced_at": { + "description": "Time this period was last updated, in UTC (RFC 3339).", "type": "string" } }, "type": "object" }, - "fanduel.RacingPastRunner": { + "es.SecInsiderTransactionRecord": { "properties": { - "age": { - "type": "integer" + "accession_number": { + "type": "string" }, - "birth_year": { + "acquired_or_disposed": { + "type": "string" + }, + "cik": { "type": "integer" }, - "dam": { + "code": { "type": "string" }, - "dam_sire": { + "filing_date": { "type": "string" }, - "entity_id": { + "filing_url": { "type": "string" }, - "jockey": { + "form": { "type": "string" }, - "medication": { - "type": "string" + "is_director": { + "type": "boolean" }, - "name": { - "type": "string" + "is_officer": { + "type": "boolean" }, - "owner": { + "is_ten_percent_owner": { + "type": "boolean" + }, + "owner_name": { "type": "string" }, - "runner_id": { + "owner_title": { "type": "string" }, - "scratched": { - "type": "boolean" + "price_per_share": { + "type": "number" }, - "sex": { + "security_title": { "type": "string" }, - "sire": { - "type": "string" + "shares": { + "type": "number" }, - "trainer": { + "shares_owned_after": { + "type": "number" + }, + "synced_at": { "type": "string" }, - "weight": { - "type": "integer" + "transaction_date": { + "type": "string" } }, "type": "object" }, - "fanduel.RacingPastTrack": { + "es.SecInstitutionalPositionRecord": { "properties": { - "city": { + "accession_number": { + "description": "SEC accession number of the 13F filing that reported the position.", "type": "string" }, - "code": { + "cusip": { + "description": "CUSIP identifier of the held security.", "type": "string" }, - "country": { + "filing_date": { + "description": "Date the 13F filing was submitted, in YYYY-MM-DD format.", "type": "string" }, - "dates": { - "items": { - "type": "string" - }, - "type": "array" - }, - "dates_total": { - "type": "integer" - }, - "name": { + "investment_discretion": { + "description": "Investment discretion the manager reports for the position, such as `SOLE`.", "type": "string" }, - "race_types": { - "items": { - "type": "string" - }, - "type": "array" + "issuer_name": { + "description": "Name of the company that issued the held security, as the manager reported it.", + "type": "string" }, - "races_on_date": { + "manager_cik": { + "description": "SEC Central Index Key of the institutional manager that filed.", "type": "integer" }, - "state": { - "type": "string" - } - }, - "type": "object" - }, - "fanduel.RacingPastTracksResponse": { - "properties": { - "date": { + "manager_name": { + "description": "Name of the institutional manager that filed.", "type": "string" }, - "fetched_at": { + "put_call": { + "description": "Whether the position is a `Put` or `Call` option. Empty for other positions.", "type": "string" }, - "limit": { - "type": "integer" + "report_date": { + "description": "Quarter-end date the holdings are reported as of, in YYYY-MM-DD format.", + "type": "string" }, - "page": { - "type": "integer" + "share_type": { + "description": "Unit of the `shares` figure as reported, such as `SH` for shares.", + "type": "string" }, - "total": { - "type": "integer" + "shares": { + "description": "Quantity held, in the unit given by `share_type`.", + "type": "number" }, - "track": { + "synced_at": { + "description": "Time this position was last updated, in UTC (RFC 3339).", "type": "string" }, - "tracks": { - "items": { - "$ref": "#/definitions/fanduel.RacingPastTrack" - }, - "type": "array" - } - }, - "type": "object" - }, - "fanduel.RacingPayoff": { - "properties": { - "selections": { - "items": { - "$ref": "#/definitions/fanduel.RacingPayoffSelection" - }, - "type": "array" + "title_of_class": { + "description": "Class of the held security as reported, such as `COM`.", + "type": "string" }, - "wager_amount": { + "value": { + "description": "Value of the position as the manager reported it in the 13F filing, in US dollars.", "type": "number" - }, - "wager_type": { - "$ref": "#/definitions/fanduel.RacingCodeName" } }, "type": "object" }, - "fanduel.RacingPayoffSelection": { + "es.SecInstitutionalPositionsFacetItem": { "properties": { - "payout": { - "type": "number" - }, - "qualifier": { - "type": "string" + "count": { + "type": "integer" }, - "selection": { + "value": { "type": "string" } }, "type": "object" }, - "fanduel.RacingPool": { + "es.StarbucksStoreDatasetFacetItem": { "properties": { - "amount": { - "type": "number" + "count": { + "type": "integer" }, - "wager_type": { - "$ref": "#/definitions/fanduel.RacingCodeName" + "key": { + "type": "string" } }, "type": "object" }, - "fanduel.RacingPoolCell": { + "es.StarbucksStoreDatasetItem": { "properties": { - "amount": { - "type": "number" - }, - "status": { + "address": { "type": "string" }, - "target": { - "type": "integer" - } - }, - "type": "object" - }, - "fanduel.RacingPoolGrid": { - "properties": { - "cells": { + "amenities": { "items": { - "$ref": "#/definitions/fanduel.RacingPoolCell" + "type": "string" }, "type": "array" }, - "wager_type": { - "$ref": "#/definitions/fanduel.RacingCodeName" - } - }, - "type": "object" - }, - "fanduel.RacingProbable": { - "properties": { - "amount": { - "type": "number" - }, - "combos": { + "amenity_names": { "items": { - "$ref": "#/definitions/fanduel.RacingCombo" + "type": "string" }, "type": "array" }, - "min_wager": { - "type": "number" - }, - "pool_amount_total": { - "type": "number" + "city": { + "type": "string" }, - "wager_type": { - "$ref": "#/definitions/fanduel.RacingCodeName" - } - }, - "type": "object" - }, - "fanduel.RacingRaceResponse": { - "properties": { - "age_restriction": { + "country": { "type": "string" }, - "analyst_verdict": { + "crawled_at": { "type": "string" }, - "claiming_price": { + "distance_meters": { "type": "number" }, - "country": { + "first_seen_at": { "type": "string" }, - "description": { + "id": { "type": "string" }, - "distance": { + "last_seen_at": { "type": "string" }, - "entries": { - "items": { - "$ref": "#/definitions/fanduel.RacingEntry" - }, - "type": "array" + "latitude": { + "type": "number" }, - "fetched_at": { - "type": "string" + "location": { + "allOf": [ + { + "$ref": "#/definitions/es.GeoPoint" + } + ], + "description": "Location is a geo_point ([lon, lat] order in the GeoPoint helper)." }, - "has_replay": { - "type": "boolean" + "longitude": { + "type": "number" }, - "id": { + "market": { + "description": "Market is crawl provenance (us/ca), not geography -- see the type doc.", "type": "string" }, - "included": { - "items": { - "type": "string" - }, - "type": "array" - }, - "last_updated_ms": { - "type": "integer" - }, - "live_streaming": { - "type": "boolean" - }, - "mtp": { - "type": "integer" + "mobile_ordering_availability": { + "type": "string" }, - "number": { + "name": { "type": "string" }, - "pools": { - "items": { - "$ref": "#/definitions/fanduel.RacingPool" - }, - "type": "array" + "ownership_type_code": { + "type": "string" }, - "post_time": { + "phone": { "type": "string" }, - "probables": { + "pick_up_options": { "items": { - "$ref": "#/definitions/fanduel.RacingProbable" + "type": "string" }, "type": "array" }, - "purse": { - "type": "number" - }, - "race_class": { - "$ref": "#/definitions/fanduel.RacingCodeName" - }, - "race_date": { + "postal_code": { "type": "string" }, - "race_type": { - "$ref": "#/definitions/fanduel.RacingCodeName" - }, - "results": { - "$ref": "#/definitions/fanduel.RacingResults" + "run_id": { + "type": "string" }, - "runner_count": { + "schema_version": { "type": "integer" }, - "status": { - "$ref": "#/definitions/fanduel.RacingCodeName" - }, - "surface": { - "$ref": "#/definitions/fanduel.RacingCodeName" - }, - "track_code": { + "state": { "type": "string" }, - "track_condition": { + "store_id": { "type": "string" }, - "track_name": { + "store_number": { "type": "string" }, - "tvg_race_id": { - "type": "integer" - }, - "wagerable_runner_count": { - "type": "integer" + "time_zone": { + "type": "string" + } + }, + "type": "object" + }, + "es.StarbucksStoreRecord": { + "properties": { + "address": { + "type": "string" }, - "wagers": { + "amenities": { "items": { - "$ref": "#/definitions/fanduel.RacingWager" + "type": "string" }, "type": "array" }, - "will_pays": { + "amenity_names": { "items": { - "$ref": "#/definitions/fanduel.RacingWillPay" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "fanduel.RacingRaceSummary": { - "properties": { + }, + "city": { + "type": "string" + }, "country": { "type": "string" }, - "distance": { + "crawled_at": { + "type": "string" + }, + "first_seen_at": { "type": "string" }, "id": { "type": "string" }, - "live_streaming": { - "type": "boolean" + "last_seen_at": { + "type": "string" }, - "mtp": { - "type": "integer" + "latitude": { + "type": "number" }, - "number": { + "location": { + "allOf": [ + { + "$ref": "#/definitions/es.GeoPoint" + } + ], + "description": "Location is a geo_point ([lon, lat] order in the GeoPoint helper)." + }, + "longitude": { + "type": "number" + }, + "market": { + "description": "Market is crawl provenance (us/ca), not geography -- see the type doc.", "type": "string" }, - "post_time": { + "mobile_ordering_availability": { "type": "string" }, - "purse": { - "type": "number" + "name": { + "type": "string" }, - "race_class": { - "$ref": "#/definitions/fanduel.RacingCodeName" + "ownership_type_code": { + "type": "string" }, - "race_date": { + "phone": { "type": "string" }, - "race_type": { - "$ref": "#/definitions/fanduel.RacingCodeName" + "pick_up_options": { + "items": { + "type": "string" + }, + "type": "array" }, - "runner_count": { + "postal_code": { + "type": "string" + }, + "run_id": { + "type": "string" + }, + "schema_version": { "type": "integer" }, - "status": { - "$ref": "#/definitions/fanduel.RacingCodeName" + "state": { + "type": "string" }, - "surface": { - "$ref": "#/definitions/fanduel.RacingCodeName" + "store_id": { + "type": "string" }, - "track_code": { + "store_number": { "type": "string" }, - "track_name": { + "time_zone": { "type": "string" } }, "type": "object" }, - "fanduel.RacingRacesResponse": { + "es.SteamAchievementRecord": { "properties": { - "fetched_at": { - "type": "string" - }, - "limit": { + "appid": { "type": "integer" }, - "page": { - "type": "integer" + "crawled_at": { + "type": "string" }, - "race_date": { + "name": { "type": "string" }, - "races": { - "items": { - "$ref": "#/definitions/fanduel.RacingRaceSummary" - }, - "type": "array" + "percent": { + "type": "number" }, - "total": { + "rank": { + "description": "0 = most-unlocked", "type": "integer" - } - }, - "type": "object" - }, - "fanduel.RacingRecentOdd": { - "properties": { - "odds": { - "type": "string" }, - "trending": { - "type": "boolean" + "schema_version": { + "type": "integer" } }, "type": "object" }, - "fanduel.RacingResultEntry": { + "es.SteamChartEntry": { "properties": { - "country": { + "app_id": { "type": "string" }, - "distance": { + "chart": { "type": "string" }, - "id": { + "chart_uid": { "type": "string" }, - "live_streaming": { - "type": "boolean" - }, - "mtp": { + "concurrent_in_game": { "type": "integer" }, - "number": { + "country": { "type": "string" }, - "post_time": { + "crawled_at": { "type": "string" }, - "purse": { - "type": "number" + "final_price_cents": { + "type": "integer" }, - "race_class": { - "$ref": "#/definitions/fanduel.RacingCodeName" + "last_week_rank": { + "type": "integer" }, - "race_date": { + "name": { "type": "string" }, - "race_type": { - "$ref": "#/definitions/fanduel.RacingCodeName" - }, - "results": { - "$ref": "#/definitions/fanduel.RacingResults" - }, - "runner_count": { + "peak_in_game": { "type": "integer" }, - "status": { - "$ref": "#/definitions/fanduel.RacingCodeName" - }, - "surface": { - "$ref": "#/definitions/fanduel.RacingCodeName" + "rank": { + "type": "integer" }, - "track_code": { + "review_summary": { "type": "string" }, - "track_name": { + "snapshot_date": { "type": "string" } }, "type": "object" }, - "fanduel.RacingResults": { + "es.SteamGameDatasetFacetItem": { "properties": { - "finishers": { - "items": { - "$ref": "#/definitions/fanduel.RacingFinisher" - }, - "type": "array" - }, - "payoffs": { - "items": { - "$ref": "#/definitions/fanduel.RacingPayoff" - }, - "type": "array" + "count": { + "type": "integer" }, - "winning_time": { - "type": "number" + "value": { + "type": "string" } }, "type": "object" }, - "fanduel.RacingResultsResponse": { + "es.SteamGameRecord": { "properties": { - "fetched_at": { - "type": "string" + "achievements_count": { + "description": "Number of achievements the game has on Steam.", + "type": "integer" }, - "limit": { + "appid": { + "description": "Steam application ID of the game.", "type": "integer" }, - "page": { + "available": { + "description": "Available is false when the storefront returned no appdetails on the most recent\ncrawl (delisted, region-locked, or a fetch miss). The record is kept regardless.", + "type": "boolean" + }, + "average_2weeks_min": { + "description": "Average playtime per owner over the last two weeks, in minutes.", "type": "integer" }, - "race_date": { + "average_forever_min": { + "description": "Average total playtime per owner, in minutes.", + "type": "integer" + }, + "background": { + "description": "URL of the background image on the game's store page.", "type": "string" }, - "results": { + "categories": { + "description": "Store categories the game is listed under, such as `Single-player`.", "items": { - "$ref": "#/definitions/fanduel.RacingResultEntry" + "type": "string" }, "type": "array" }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "fanduel.RacingRunner": { - "properties": { - "age": { + "ccu": { + "description": "Peak number of concurrent players on the previous day.", "type": "integer" }, - "dam": { - "type": "string" - }, - "dam_sire": { - "type": "string" + "coming_soon": { + "description": "Whether the game is not yet released.", + "type": "boolean" }, - "favorite_rank": { - "$ref": "#/definitions/fanduel.RacingFavoriteRank" + "content_descriptor_ids": { + "description": "Steam content descriptor IDs that flag mature content on the game.", + "items": { + "type": "integer" + }, + "type": "array" }, - "form_figures": { + "controller_support": { + "description": "Level of controller support Steam lists for the game.", "type": "string" }, - "handicapping": { - "$ref": "#/definitions/fanduel.RacingHandicapping" - }, - "jockey": { + "crawled_at": { + "description": "Time the record was last collected, in UTC (RFC 3339).", "type": "string" }, - "jockey_changed": { - "type": "boolean" - }, - "medication": { + "developer": { + "description": "Main developer of the game.", "type": "string" }, - "name": { - "type": "string" + "developers": { + "description": "All developers credited on the store page.", + "items": { + "type": "string" + }, + "type": "array" }, - "owner": { - "type": "string" + "discount_pct": { + "description": "Current discount as a percentage, 0 when not on sale.", + "type": "integer" }, - "rating_stars": { + "dlc_count": { + "description": "Number of DLC items listed for the game.", "type": "integer" }, - "runner_id": { - "type": "string" + "genres": { + "description": "Genres the game is listed under, such as `Action` or `Indie`.", + "items": { + "type": "string" + }, + "type": "array" }, - "scratched": { + "has_owner_estimate": { + "description": "HasOwnerEstimate is false for the floor bucket (\"0 .. 20,000\") / no SteamSpy\nestimate — i.e. the deep tail past the owner-differentiated head. Callers must\nnot treat floor-bucket owners as a real count.", "type": "boolean" }, - "sex": { - "type": "string" - }, - "sire": { + "header_image": { + "description": "URL of the header image on the game's store page.", "type": "string" }, - "timeform": { - "allOf": [ - { - "$ref": "#/definitions/fanduel.RacingRunnerTimeform" - } - ], - "description": "Set only with include=timeform and include=handicapping." + "initial_price_cents": { + "description": "Price before any discount, in cents.", + "type": "integer" }, - "trainer": { - "type": "string" + "is_free": { + "description": "Whether the game is free to play or has a price of 0.", + "type": "boolean" }, - "weight": { + "language_count": { + "description": "Number of languages the game supports.", "type": "integer" }, - "win_probability": { - "type": "number" - } - }, - "type": "object" - }, - "fanduel.RacingRunnerTimeform": { - "properties": { - "analyst_comment": { - "type": "string" - }, - "flags": { + "languages": { + "description": "Languages the game supports.", "items": { "type": "string" }, "type": "array" }, - "free_pick": { - "$ref": "#/definitions/fanduel.RacingFreePick" + "median_2weeks_min": { + "description": "Median playtime per owner over the last two weeks, in minutes.", + "type": "integer" }, - "production_comment": { + "median_forever_min": { + "description": "Median total playtime per owner, in minutes.", + "type": "integer" + }, + "metacritic": { + "description": "Metacritic score of the game, from 0 to 100.", + "type": "integer" + }, + "movie_count": { + "description": "Number of trailers and videos on the store page.", + "type": "integer" + }, + "name": { + "description": "Game title as shown on Steam.", "type": "string" }, - "tissue_price": { - "type": "number" - } - }, - "type": "object" - }, - "fanduel.RacingSearchCounts": { - "properties": { - "jockey": { + "negative": { + "description": "Number of negative user reviews.", "type": "integer" }, - "owner": { + "owners_bucket": { + "description": "Estimated range of owners as a text label, such as `1,000,000 .. 2,000,000`.", + "type": "string" + }, + "owners_max": { + "description": "Upper end of the estimated owner range.", "type": "integer" }, - "runner": { + "owners_midpoint": { + "description": "Middle of the estimated owner range.", "type": "integer" }, - "trainer": { + "owners_min": { + "description": "Lower end of the estimated owner range.", "type": "integer" - } - }, - "type": "object" - }, - "fanduel.RacingSearchItem": { - "properties": { - "birth_year": { + }, + "package_count": { + "description": "Number of store packages the game is sold in.", "type": "integer" }, - "id": { + "platform_linux": { + "description": "Whether the game supports Linux.", + "type": "boolean" + }, + "platform_mac": { + "description": "Whether the game supports macOS.", + "type": "boolean" + }, + "platform_windows": { + "description": "Whether the game supports Windows.", + "type": "boolean" + }, + "positive": { + "description": "Number of positive user reviews.", "type": "integer" }, - "last_event": { - "$ref": "#/definitions/fanduel.RacingLastEvent" + "price_cents": { + "description": "Current price, in cents.", + "type": "integer" }, - "name": { + "price_tier": { + "description": "Price band: `free`, `under5`, `5to15`, `15to30`, `30to60` or `over60`.", "type": "string" }, - "type": { + "primary_tag": { + "description": "Most heavily weighted community tag of the game.", "type": "string" - } - }, - "type": "object" - }, - "fanduel.RacingSearchResponse": { - "properties": { - "counts": { - "$ref": "#/definitions/fanduel.RacingSearchCounts" }, - "fetched_at": { + "publisher": { + "description": "Main publisher of the game.", "type": "string" }, - "items": { + "publishers": { + "description": "All publishers credited on the store page.", "items": { - "$ref": "#/definitions/fanduel.RacingSearchItem" + "type": "string" }, "type": "array" }, - "limit": { + "recommendations": { + "description": "Number of user recommendations Steam reports for the game.", "type": "integer" }, - "order": { + "release_date": { + "description": "Release date in YYYY-MM-DD format. Empty when Steam gives only a year or quarter.", "type": "string" }, - "page": { + "release_year": { + "description": "Year the game was or will be released.", "type": "integer" }, - "query": { + "required_age": { + "description": "Minimum age set on the store page.", + "type": "integer" + }, + "review_score": { + "description": "Share of reviews that are positive, from 0 to 1.", + "type": "number" + }, + "review_tier": { + "description": "Review band such as `very_positive`, `mixed` or `insufficient`, following Steam's rating labels.", "type": "string" }, - "sort": { + "run_id": { + "description": "Identifier of the collection run that produced this record.", "type": "string" }, - "total": { + "schema_version": { + "description": "Version of the record format.", "type": "integer" }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "fanduel.RacingSnapshot": { - "properties": { - "days_off": { + "screenshot_count": { + "description": "Number of screenshots on the store page.", "type": "integer" }, - "horse_starts": { + "seed_rank": { + "description": "Popularity rank when the game was collected, where 0 is the most popular. Games outside the popularity list carry values of 1,000,000 or more.", "type": "integer" }, - "horse_wins": { + "short_description": { + "description": "v3 richer-record fields (expanded appFilters). Descriptions/creators/media\ncounts/languages/content flags from the full storefront appdetails set.", + "type": "string" + }, + "tag_ids": { + "description": "Steam IDs of the community tags, in the same order as the tags.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "tag_schema_version": { + "description": "Version of the community-tag data on this record.", "type": "integer" }, - "normalised_power_rating": { - "type": "number" + "tags": { + "description": "Tags is the weighted community-tag taxonomy (Roguelike/Metroidvania/Cozy...),\nordered most-weighted first — the crowd tags appdetails genres omit.\nPopulated by a separate tag-enrichment pass, not the main crawl. TagIDs\nis the parallel raw id list; PrimaryTag is Tags[0].", + "items": { + "type": "string" + }, + "type": "array" }, - "power_rating": { - "type": "number" + "tags_enriched_at": { + "description": "Time the community tags were last added to this record.", + "type": "string" }, - "power_rating_ranking": { + "total_reviews": { + "description": "Total number of user reviews, positive plus negative.", + "type": "integer" + }, + "type": { + "description": "Store item type, such as `game`, `dlc` or `demo`.", + "type": "string" + }, + "website": { + "description": "URL of the game's own website.", "type": "string" } }, "type": "object" }, - "fanduel.RacingSpeedAndClass": { + "es.SteamNewsRecord": { "properties": { - "avg_class_rating": { - "type": "number" - }, - "avg_distance": { - "type": "number" + "appid": { + "type": "integer" }, - "avg_speed": { - "type": "number" + "author": { + "type": "string" }, - "high_speed": { - "type": "number" + "contents": { + "type": "string" }, - "high_speed_ranking": { + "crawled_at": { "type": "string" }, - "last_class_rating": { - "type": "number" + "date": { + "description": "upstream epoch seconds", + "type": "integer" }, - "normalised_speed_rating": { - "type": "number" - } - }, - "type": "object" - }, - "fanduel.RacingTrack": { - "properties": { - "city": { + "feed_label": { "type": "string" }, - "code": { + "feed_name": { "type": "string" }, - "country": { + "gid": { "type": "string" }, - "current_race": { - "$ref": "#/definitions/fanduel.RacingNextRace" - }, - "featured": { - "type": "boolean" - }, - "is_finished": { + "is_external_url": { "type": "boolean" }, - "ivr_code": { - "type": "integer" - }, - "name": { + "published_at": { + "description": "ISO, derived from Date", "type": "string" }, - "number_of_races": { + "schema_version": { "type": "integer" }, - "race_types": { + "tags": { "items": { "type": "string" }, "type": "array" }, - "short_name": { + "title": { "type": "string" }, - "state": { + "url": { "type": "string" } }, "type": "object" }, - "fanduel.RacingTrackResponse": { + "es.SteamPlayerCountRecord": { "properties": { - "city": { - "type": "string" - }, - "code": { - "type": "string" - }, - "country": { - "type": "string" - }, - "current_race": { - "$ref": "#/definitions/fanduel.RacingNextRace" - }, - "featured": { - "type": "boolean" + "appid": { + "type": "integer" }, - "fetched_at": { + "crawled_at": { "type": "string" }, - "is_finished": { - "type": "boolean" - }, - "ivr_code": { - "type": "integer" - }, "name": { "type": "string" }, - "number_of_races": { + "player_count": { "type": "integer" }, - "race_types": { - "items": { - "type": "string" - }, - "type": "array" - }, - "races": { - "items": { - "$ref": "#/definitions/fanduel.RacingRaceSummary" - }, - "type": "array" - }, - "short_name": { - "type": "string" + "schema_version": { + "type": "integer" }, - "state": { + "snapshot_date": { "type": "string" } }, "type": "object" }, - "fanduel.RacingTracksResponse": { + "es.SteamPriceRecord": { "properties": { - "fetched_at": { + "appid": { + "type": "integer" + }, + "crawled_at": { "type": "string" }, - "limit": { + "currency": { + "type": "string" + }, + "discount_pct": { "type": "integer" }, - "page": { + "initial_price_cents": { "type": "integer" }, - "race_date": { + "is_free": { + "type": "boolean" + }, + "name": { "type": "string" }, - "total": { + "price_cents": { "type": "integer" }, - "tracks": { - "items": { - "$ref": "#/definitions/fanduel.RacingTrack" - }, - "type": "array" - } - }, - "type": "object" - }, - "fanduel.RacingWager": { - "properties": { - "max_wager": { - "type": "number" - }, - "min_wager": { - "type": "number" + "schema_version": { + "type": "integer" }, - "wager_type": { - "$ref": "#/definitions/fanduel.RacingCodeName" + "snapshot_date": { + "type": "string" } }, "type": "object" }, - "fanduel.RacingWagerType": { + "es.SteamReviewRecord": { "properties": { - "code": { - "type": "string" + "appid": { + "type": "integer" }, - "column_count": { + "author_playtime_forever_min": { "type": "integer" }, - "column_type": { + "comment_count": { + "type": "integer" + }, + "crawled_at": { "type": "string" }, - "description": { + "created_at": { + "description": "ISO, derived", "type": "string" }, - "group": { - "$ref": "#/definitions/fanduel.RacingCodeName" + "language": { + "type": "string" }, - "id": { + "playtime_at_review_min": { "type": "integer" }, - "is_box": { + "received_for_free": { "type": "boolean" }, - "is_key": { - "type": "boolean" + "recommendation_id": { + "type": "string" }, - "is_wheel": { - "type": "boolean" + "review": { + "type": "string" }, - "leg_count": { + "schema_version": { "type": "integer" }, - "max_wager": { - "type": "number" - }, - "min_wager": { - "type": "number" + "steam_purchase": { + "type": "boolean" }, - "name": { - "type": "string" + "timestamp_created": { + "type": "integer" }, - "pools_per_entry": { + "timestamp_updated": { "type": "integer" }, - "position_count": { + "voted_up": { + "type": "boolean" + }, + "votes_funny": { "type": "integer" - } - }, - "type": "object" - }, - "fanduel.RacingWagerTypesResponse": { - "properties": { - "count": { + }, + "votes_up": { "type": "integer" }, - "fetched_at": { - "type": "string" + "weighted_vote_score": { + "type": "number" }, - "wager_types": { - "items": { - "$ref": "#/definitions/fanduel.RacingWagerType" - }, - "type": "array" + "written_during_early_access": { + "type": "boolean" } }, "type": "object" }, - "fanduel.RacingWillPay": { + "es.SubstackDatasetFacetItem": { "properties": { - "leg_results": { - "items": { - "$ref": "#/definitions/fanduel.RacingLegResult" - }, - "type": "array" + "count": { + "type": "integer" }, - "payoff_type": { + "value": { "type": "string" - }, - "payouts": { - "items": { - "$ref": "#/definitions/fanduel.RacingWillPayment" - }, - "type": "array" - }, - "wager_amount": { - "type": "number" - }, - "wager_type": { - "$ref": "#/definitions/fanduel.RacingCodeName" } }, "type": "object" }, - "fanduel.RacingWillPayment": { + "es.TechstackDatasetFacetItem": { "properties": { - "entry": { + "count": { + "description": "Number of sites in this bucket.", "type": "integer" }, - "payout": { - "type": "number" - }, - "required": { - "type": "number" + "value": { + "description": "Bucket value, such as a technology name, category, top-level domain or rendering tier.", + "type": "string" } }, "type": "object" }, - "fanduel.ResearchArticleResponse": { + "es.TechstackRecord": { "properties": { - "author": { - "$ref": "#/definitions/fanduel.ResearchAuthorRef" - }, - "blocks": { + "analytics": { + "description": "Analytics, tag manager and tracking pixel technologies detected on the site.", "items": { - "$ref": "#/definitions/fanduel.ResearchBlock" + "type": "string" }, "type": "array" }, - "description": { - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "hero_type": { - "type": "string" - }, - "id": { - "type": "string" - }, - "keywords": { + "block_matched": { + "description": "block/challenge marker strings that matched, when FailureReason is a block/challenge classification", "items": { "type": "string" }, "type": "array" }, - "omitted_blocks": { - "additionalProperties": { - "type": "integer" + "categories": { + "description": "distinct, sorted; category facets", + "items": { + "type": "string" }, - "type": "object" + "type": "array" }, - "published_at": { + "category": { + "description": "optional seed category (usually empty)", "type": "string" }, - "slug": { + "cdn": { + "description": "Main CDN, hosting or platform provider detected on the site.", "type": "string" }, - "sport": { - "$ref": "#/definitions/fanduel.ResearchSportRef" + "cms": { + "description": "single-value rollups (denormalized from Technologies for cheap facets/filters)", + "type": "string" }, - "sub_heading": { + "detector_version": { + "description": "Version of the technology detection rules used for this record.", "type": "string" }, - "tags": { - "items": { - "$ref": "#/definitions/fanduel.ResearchTag" - }, - "type": "array" + "domain": { + "description": "identity", + "type": "string" }, - "text": { + "ecommerce": { + "description": "Ecommerce platform detected on the site.", "type": "string" }, - "thumbnail_url": { + "failure_reason": { + "description": "failure diagnostics: populated whenever a probe attempt didn't fully\npass, even if the site still counts as reachable (e.g. a blocked page\nreturning a non-5xx status). Unset for a fully passing site.", "type": "string" }, - "title": { + "final_url": { + "description": "URL that produced the adopted body (after www. fallback / redirects)", "type": "string" }, - "updated_at": { + "has_captcha": { + "description": "Whether a CAPTCHA technology was detected on the site.", + "type": "boolean" + }, + "is_infrastructure": { + "description": "IsInfrastructure flags a backend CDN/DNS/cloud-vendor/registry hostname\n(e.g. cloudfront.net, gtld-servers.net) rather than a real,\nhuman-navigable website. Best-effort heuristic: a false negative\n(unflagged) is not proof a domain is a real site.", + "type": "boolean" + }, + "method_version": { + "description": "Version of the scan procedure used to collect this record.", "type": "string" }, - "url": { + "probe_error": { + "description": "raw transport error's first line (e.g. \"context deadline exceeded\", \"no such host\"), when there was one", "type": "string" - } - }, - "type": "object" - }, - "fanduel.ResearchArticleSummary": { - "properties": { - "author": { - "$ref": "#/definitions/fanduel.ResearchAuthorRef" }, - "description": { + "probed_at": { + "description": "RFC3339 — when last probed", "type": "string" }, - "hero_type": { + "rank": { + "description": "Tranco rank when seeded from the top-1M list", + "type": "integer" + }, + "reachable": { + "description": "Whether the site answered the probe.", + "type": "boolean" + }, + "render_tier": { + "description": "provenance / reproducibility", "type": "string" }, - "id": { + "run_date": { + "description": "Time the scan run started, in UTC (RFC 3339).", "type": "string" }, - "published_at": { + "run_id": { + "description": "Identifier of the scan run that produced this record.", "type": "string" }, - "slug": { + "scan_method": { + "description": "Method used to scan the site, for example `http_scan`.", "type": "string" }, - "sport": { - "$ref": "#/definitions/fanduel.ResearchSportRef" + "schema_version": { + "description": "Version of the record format.", + "type": "integer" }, - "sub_heading": { + "scheme": { + "description": "URL scheme the site was reached with, `https` or `http`.", "type": "string" }, - "tags": { + "secondary_only_technology_names": { + "description": "technology names detected ONLY via a fetched secondary page, not the homepage alone; a subset of TechnologyNames", "items": { - "$ref": "#/definitions/fanduel.ResearchTag" + "type": "string" }, "type": "array" }, - "thumbnail_url": { - "type": "string" - }, - "title": { - "type": "string" - }, - "updated_at": { - "type": "string" + "secondary_page_categories": { + "description": "which categories were successfully fetched and contributed content, sorted (careers|login|blog|status|signup|docs|contact|trust|cart)", + "items": { + "type": "string" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "fanduel.ResearchArticlesResponse": { - "properties": { - "articles": { + "secondary_pages": { + "description": "full audit trail: every discovered candidate, fetched or not; detail view, stored not indexed", "items": { - "$ref": "#/definitions/fanduel.ResearchArticleSummary" + "$ref": "#/definitions/es.TechstackSecondaryPage" }, "type": "array" }, - "fetched_at": { - "type": "string" + "secondary_pages_discovered": { + "description": "secondary-page telemetry: populated when the crawl looked for extra\nnon-homepage pages (opt-in per run) and discovered at least one on the\nhomepage nav for this domain. \"Discovered\" and \"fetched\" are\ndeliberately distinct: a candidate can be found on the homepage nav\nbut still fail to fetch (e.g. blocked or timed out) — that failure is\nrecorded in SecondaryPages (Fetched=false), not silently dropped.", + "type": "integer" }, - "has_more": { - "type": "boolean" + "secondary_pages_fetched": { + "description": "count that were ACTUALLY fetched successfully and contributed content; <= SecondaryPagesDiscovered", + "type": "integer" }, - "next_cursor": { - "type": "string" - } - }, - "type": "object" - }, - "fanduel.ResearchAuthor": { - "properties": { - "bio": { + "seed_source": { + "description": "tranco | internal-harvest", "type": "string" }, - "id": { + "server_language": { + "description": "Server-side language or web framework detected on the site.", "type": "string" }, - "name": { + "source_url": { + "description": "the exact seed URL probed", "type": "string" }, - "profile_image_url": { - "type": "string" + "status": { + "description": "HTTP status code of the last probe attempt.", + "type": "integer" }, - "slug": { - "type": "string" + "tech_count": { + "description": "Number of distinct technologies detected on the site.", + "type": "integer" }, - "social": { + "technologies": { + "description": "detections (the payload)", "items": { - "$ref": "#/definitions/fanduel.ResearchSocial" + "$ref": "#/definitions/es.TechstackTechnology" }, "type": "array" }, - "sports": { + "technology_names": { + "description": "flattened for AND/NOT term filters + facets", "items": { "type": "string" }, "type": "array" }, - "sub_categories": { - "items": { - "type": "string" - }, - "type": "array" + "tld": { + "description": "Top-level domain of the site, such as `com`.", + "type": "string" }, - "thumbnail_url": { + "web_server": { + "description": "Web server software detected on the site.", "type": "string" } }, "type": "object" }, - "fanduel.ResearchAuthorRef": { + "es.TechstackSecondaryPage": { "properties": { - "id": { + "category": { + "description": "Kind of page found on the homepage navigation: `careers`, `login`, `blog`, `status`, `signup`, `docs`, `contact`, `trust` or `cart`.", "type": "string" }, - "name": { - "type": "string" + "fetched": { + "description": "Whether the page was loaded successfully. False when it was blocked or timed out.", + "type": "boolean" }, - "slug": { + "url": { + "description": "Address of the page found on the homepage navigation.", "type": "string" } }, "type": "object" }, - "fanduel.ResearchAuthorResponse": { + "es.TechstackTechnology": { "properties": { - "bio": { - "type": "string" + "categories": { + "description": "Categories the technology belongs to, such as `CDN` or `Analytics`.", + "items": { + "type": "string" + }, + "type": "array" }, - "fetched_at": { + "confidence": { + "description": "How sure the detection is: `high`, `medium` or `low`.", "type": "string" }, - "id": { + "evidence": { + "description": "Signal the technology was recognised from, such as `header: cf-ray`.", "type": "string" }, "name": { + "description": "Technology name, such as `Shopify` or `Cloudflare`.", "type": "string" }, - "profile_image_url": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "social": { - "items": { - "$ref": "#/definitions/fanduel.ResearchSocial" - }, - "type": "array" - }, - "sports": { - "items": { - "type": "string" - }, - "type": "array" - }, - "sub_categories": { - "items": { - "type": "string" - }, - "type": "array" - }, - "thumbnail_url": { + "version": { + "description": "Version of the technology, when the site exposes it.", "type": "string" } }, "type": "object" }, - "fanduel.ResearchAuthorsResponse": { + "es.TrustmrrDatasetFacetItem": { "properties": { - "authors": { - "items": { - "$ref": "#/definitions/fanduel.ResearchAuthor" - }, - "type": "array" - }, - "fetched_at": { - "type": "string" - }, - "has_more": { - "type": "boolean" + "count": { + "description": "Number of startups in this bucket.", + "type": "integer" }, - "next_cursor": { + "value": { + "description": "Bucket value for the requested facet, such as a category name, country or payment provider.", "type": "string" } }, "type": "object" }, - "fanduel.ResearchBetLine": { + "es.TrustmrrHistoryPoint": { "properties": { - "market_id": { - "type": "string" + "asking_price": { + "type": "number" }, - "odds": { + "date": { + "description": "YYYY-MM-DD in UTC", "type": "string" }, - "selection_id": { - "type": "string" + "deal_score": { + "type": "number" }, - "url": { - "type": "string" + "growth_30d": { + "type": "number" }, - "value": { + "mrr": { + "type": "number" + }, + "multiple": { + "type": "number" + }, + "offer_count": { + "type": "integer" + }, + "on_sale": { + "type": "boolean" + }, + "revenue_30d": { + "type": "number" + }, + "slug": { "type": "string" + }, + "total_revenue": { + "type": "number" + }, + "traffic_12mo": { + "type": "number" + }, + "traffic_30d": { + "type": "number" } }, "type": "object" }, - "fanduel.ResearchBlock": { + "es.TrustmrrStartupRecord": { "properties": { - "event_id": { + "active_subscriptions": { + "description": "Number of active subscriptions the startup has.", "type": "integer" }, - "event_name": { + "ahrefs_domain_rating": { + "description": "Ahrefs Domain Rating of the startup's website.", + "type": "integer" + }, + "asking_price": { + "description": "Price the seller is asking for the startup, in US dollars. Omitted when TrustMRR shows none.", + "type": "number" + }, + "business_type": { + "description": "Business type of the startup, such as `B2C`.", "type": "string" }, - "headers": { + "category": { + "description": "TrustMRR category of the startup, such as `Mobile App`.", + "type": "string" + }, + "category_slug": { + "description": "URL slug of the TrustMRR category.", + "type": "string" + }, + "channels": { + "description": "Slugs of the marketing channels detected for the startup, such as `meta-ads`.", "items": { "type": "string" }, "type": "array" }, - "league": { + "country": { + "description": "Country code of the startup, such as `PL`.", "type": "string" }, - "level": { + "customers": { + "description": "Number of customers the startup has.", "type": "integer" }, - "market_id": { - "type": "string" + "deal_score": { + "description": "TrustMRR's recency-aware score for how attractive the startup is as an acquisition.", + "type": "number" }, - "market_name": { + "description": { + "description": "Description of the startup as listed on TrustMRR.", "type": "string" }, - "rows": { - "items": { - "items": { - "type": "string" - }, - "type": "array" - }, - "type": "array" + "estimated_user_count": { + "description": "Estimated number of users of the startup's product.", + "type": "integer" }, - "selection_ids": { - "items": { - "type": "integer" - }, - "type": "array" + "first_listed_for_sale_at": { + "description": "Time the startup was first listed for sale (RFC 3339).", + "type": "string" }, - "text": { + "first_seen": { + "description": "Time the startup first appeared in this dataset (RFC 3339).", "type": "string" }, - "title": { + "founded_date": { + "description": "Date the startup was founded.", "type": "string" }, - "type": { + "funding_status": { + "description": "Funding status of the startup.", "type": "string" - } - }, - "type": "object" - }, - "fanduel.ResearchClosingLines": { - "properties": { - "spread": { + }, + "growth_30d": { + "description": "Revenue growth over the last 30 days, as a percentage.", "type": "number" }, - "total": { + "growth_mrr_30d": { + "description": "Growth in monthly recurring revenue over the last 30 days.", "type": "number" - } - }, - "type": "object" - }, - "fanduel.ResearchFeaturedArticlesResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/fanduel.ResearchArticleSummary" - }, - "type": "array" }, - "count": { - "type": "integer" + "has_dofollow_backlink": { + "description": "Whether the startup's site links back to TrustMRR with a dofollow link.", + "type": "boolean" }, - "fetched_at": { - "type": "string" + "has_google_analytics": { + "description": "Whether the startup has verified Google Analytics.", + "type": "boolean" }, - "sport": { - "$ref": "#/definitions/fanduel.ResearchSportRef" - } - }, - "type": "object" - }, - "fanduel.ResearchFixture": { - "properties": { - "event_url": { - "type": "string" + "has_insight_overrides": { + "description": "Whether the seller has replaced TrustMRR's AI-written business summary with their own.", + "type": "boolean" }, - "game_clock": { - "type": "string" + "has_search_console": { + "description": "Whether the startup has verified Google Search Console.", + "type": "boolean" }, - "head_to_head_slug": { + "icon": { + "description": "URL of the startup's icon.", "type": "string" }, - "id": { + "is_merchant_of_record": { + "description": "Whether the startup acts as merchant of record for its payments.", + "type": "boolean" + }, + "is_sponsored": { + "description": "Whether the startup is a sponsored listing on TrustMRR.", + "type": "boolean" + }, + "last_crawled_at": { + "description": "Time the startup's data was last refreshed (RFC 3339).", "type": "string" }, - "network": { + "last_seen": { + "description": "Time the startup was last seen on TrustMRR (RFC 3339).", "type": "string" }, - "scheduled_end": { + "listing_tier": { + "description": "Tier of the for-sale listing, such as `pro`.", "type": "string" }, - "scheduled_start": { + "looking_for_cofounder": { + "description": "Whether the founder is looking for a cofounder.", + "type": "boolean" + }, + "merchant_category_code": { + "description": "Merchant category code (MCC) of the startup's payment processor, such as `7372`.", "type": "string" }, - "sport": { - "$ref": "#/definitions/fanduel.ResearchSportRef" + "mrr": { + "description": "Verified monthly recurring revenue, in US dollars.", + "type": "number" }, - "status": { + "mrr_last_synced_at": { + "description": "Time the monthly recurring revenue figure was last synced (RFC 3339).", "type": "string" }, - "teams": { - "items": { - "$ref": "#/definitions/fanduel.ResearchFixtureTeam" - }, - "type": "array" - } - }, - "type": "object" - }, - "fanduel.ResearchFixtureLine": { - "properties": { - "market_id": { + "multiple": { + "description": "Asking price as a multiple of the startup's revenue.", + "type": "number" + }, + "name": { + "description": "Startup name as listed on TrustMRR.", "type": "string" }, - "odds": { + "offer_count": { + "description": "Number of offers the for-sale listing has received.", "type": "integer" }, - "points": { - "type": "number" + "on_sale": { + "description": "Whether the startup is currently listed for sale.", + "type": "boolean" }, - "selection_id": { + "payment_provider": { + "description": "Payment provider the revenue is verified through, such as `revenuecat`.", "type": "string" }, - "side": { + "pricing_model": { + "description": "Pricing model of the startup's product, as summarised by TrustMRR.", "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "fanduel.ResearchFixtureTeam": { - "properties": { - "abbreviation": { + "problem_solved": { + "description": "Problem the startup's product solves, as summarised by TrustMRR.", "type": "string" }, - "id": { - "type": "string" + "profit_margin_30d": { + "description": "Profit margin over the last 30 days.", + "type": "number" }, - "money_line": { - "$ref": "#/definitions/fanduel.ResearchFixtureLine" + "revenue_30d": { + "description": "Verified revenue over the last 30 days, in US dollars.", + "type": "number" }, - "name": { + "revenue_last_synced_at": { + "description": "Time the revenue figures were last synced (RFC 3339).", "type": "string" }, - "number_fire_id": { - "type": "integer" + "revenue_per_visitor_30d": { + "description": "Revenue per site visitor over the last 30 days.", + "type": "number" }, - "score": { + "schema_version": { + "description": "Version of the record format.", "type": "integer" }, - "side": { + "secondary_payment_provider": { + "description": "Second payment provider the revenue is verified through, when there is one.", "type": "string" }, - "spread": { - "$ref": "#/definitions/fanduel.ResearchFixtureLine" + "seller_message": { + "description": "Message the seller wrote on the for-sale listing.", + "type": "string" }, - "total": { - "$ref": "#/definitions/fanduel.ResearchFixtureLine" + "slug": { + "description": "URL slug of the startup on TrustMRR. Use it with the item endpoint.", + "type": "string" }, - "win_probability": { - "type": "number" - } - }, - "type": "object" - }, - "fanduel.ResearchFixturesResponse": { - "properties": { - "count": { - "type": "integer" + "status": { + "description": "Listing status of the startup: `active` or `removed`.", + "type": "string" }, - "fetched_at": { + "stealth_mode": { + "description": "Whether the startup is listed in stealth mode.", + "type": "boolean" + }, + "tags": { + "description": "Tags describing the startup's business, as summarised by TrustMRR.", + "items": { + "type": "string" + }, + "type": "array" + }, + "target_audience": { + "description": "Audience the startup sells to, such as `B2C`.", "type": "string" }, - "fixtures": { + "target_persona": { + "description": "Typical customer persona of the startup, as summarised by TrustMRR.", + "type": "string" + }, + "tech": { + "description": "Slugs of the technologies detected in the startup's stack, such as `reactnative`.", "items": { - "$ref": "#/definitions/fanduel.ResearchFixture" + "type": "string" }, "type": "array" }, - "sport": { + "total_revenue": { + "description": "Verified all-time revenue, in US dollars.", + "type": "number" + }, + "traffic_12mo": { + "description": "Website traffic over the last 12 months.", + "type": "number" + }, + "traffic_24h": { + "description": "Website traffic over the last 24 hours.", + "type": "number" + }, + "traffic_30d": { + "description": "Website traffic over the last 30 days, in visits.", + "type": "number" + }, + "traffic_7d": { + "description": "Website traffic over the last 7 days.", + "type": "number" + }, + "url": { + "description": "URL of the startup's page on TrustMRR.", "type": "string" - } - }, - "type": "object" - }, - "fanduel.ResearchItem": { - "properties": { - "guid": { + }, + "user_category": { + "description": "Category the seller chose for the startup, such as `Mobile Apps`.", "type": "string" }, - "image_url": { + "user_category_slug": { + "description": "URL slug of the seller-chosen category.", "type": "string" }, - "published_at": { + "value_proposition": { + "description": "What the startup offers customers, as summarised by TrustMRR.", "type": "string" }, - "summary": { + "website": { + "description": "URL of the startup's own website.", "type": "string" }, - "title": { + "x_follower_count": { + "description": "Number of followers the founder has on X (Twitter).", + "type": "integer" + }, + "x_founder_name": { + "description": "Founder's display name on X (Twitter).", "type": "string" }, - "url": { + "x_handle": { + "description": "Founder's X (Twitter) handle.", + "type": "string" + }, + "x_profile_picture": { + "description": "URL of the founder's X (Twitter) profile picture.", "type": "string" } }, "type": "object" }, - "fanduel.ResearchNewsType": { + "es.VehicleListingDatasetFacetItem": { "properties": { - "code": { - "type": "string" + "count": { + "type": "integer" }, - "name": { + "value": { "type": "string" } }, "type": "object" }, - "fanduel.ResearchNflGame": { + "es.VehicleListingRecord": { "properties": { - "away_team": { - "$ref": "#/definitions/fanduel.ResearchNflTeam" + "accident_count": { + "description": "AccidentCount/OwnerCount come from a source's vehicle-history detail\n(CarMax's own /vehicle/{stock_number} History block as of 2026-08-20;\nreserved for other sources with an equivalent field). Pointers, not\nplain ints: 0 is a real, safety-relevant claim (\"confirmed zero\naccidents\") distinct from \"we haven't enriched this listing yet\".\nPopulated only for a bounded number of newly-discovered listings per\ncrawl pass, not backfilled for the whole catalog at once.", + "type": "integer" }, - "clock": { + "body_style": { "type": "string" }, - "closing_lines": { - "$ref": "#/definitions/fanduel.ResearchClosingLines" - }, - "head_to_head_slug": { + "city": { "type": "string" }, - "home_team": { - "$ref": "#/definitions/fanduel.ResearchNflTeam" - }, - "id": { + "crawled_at": { "type": "string" }, - "network": { + "drive_type": { "type": "string" }, - "number_fire_id": { - "type": "integer" + "engine": { + "type": "string" }, - "odds": { - "$ref": "#/definitions/fanduel.ResearchNflOdds" + "exterior_color": { + "type": "string" }, - "quarter": { + "first_seen_at": { + "description": "FirstSeenAt/LastSeenAt are our own crawl-observed dates, not upstream\nfields -- see the type doc comment. Both are RFC3339.", "type": "string" }, - "scheduled_time": { + "fuel_type": { "type": "string" }, - "season_type": { + "id": { "type": "string" }, - "status": { + "image_url": { "type": "string" }, - "venue": { + "interior_color": { "type": "string" }, - "venue_type": { + "is_price_reduced": { + "type": "boolean" + }, + "last_seen_at": { "type": "string" }, - "weather": { - "$ref": "#/definitions/fanduel.ResearchWeather" + "latitude": { + "type": "number" }, - "week": { - "type": "integer" - } - }, - "type": "object" - }, - "fanduel.ResearchNflGameStats": { - "properties": { - "fumbles_forced": { - "type": "integer" + "longitude": { + "type": "number" }, - "interceptions_thrown": { - "type": "integer" + "make": { + "type": "string" }, - "passing_yards": { + "mileage": { "type": "integer" }, - "points": { - "type": "integer" + "model": { + "type": "string" }, - "rushing_yards": { - "type": "integer" - } - }, - "type": "object" - }, - "fanduel.ResearchNflLeader": { - "properties": { - "attempts": { + "owner_count": { "type": "integer" }, - "carries": { - "type": "integer" + "previous_price": { + "type": "number" }, - "completions": { + "price": { + "type": "number" + }, + "run_id": { + "type": "string" + }, + "schema_version": { "type": "integer" }, - "name": { + "seller_name": { "type": "string" }, - "position": { + "seller_type": { + "description": "SellerType is \"retailer\" for CarMax (its own inventory, not a dealer\nnetwork) and reserved \"dealer\"/\"private\" values for future sources\nthat aggregate third-party sellers (Autotrader, Cars.com).", "type": "string" }, - "receptions": { - "type": "integer" + "source": { + "type": "string" }, - "targets": { - "type": "integer" + "source_listing_id": { + "type": "string" }, - "touchdowns": { - "type": "integer" + "state": { + "type": "string" }, - "yards": { + "transmission": { + "type": "string" + }, + "trim": { + "type": "string" + }, + "url": { + "type": "string" + }, + "vin": { + "type": "string" + }, + "year": { "type": "integer" } }, "type": "object" }, - "fanduel.ResearchNflLeaders": { + "es.VehiclePriceHistoryRecord": { "properties": { - "passing": { - "$ref": "#/definitions/fanduel.ResearchNflLeader" + "crawled_at": { + "type": "string" }, - "receiving": { - "$ref": "#/definitions/fanduel.ResearchNflLeader" + "id": { + "type": "string" }, - "rushing": { - "$ref": "#/definitions/fanduel.ResearchNflLeader" - } - }, - "type": "object" - }, - "fanduel.ResearchNflOdds": { - "properties": { - "away": { - "$ref": "#/definitions/fanduel.ResearchNflSideOdds" + "price": { + "type": "number" }, - "event_id": { + "schema_version": { "type": "integer" }, - "home": { - "$ref": "#/definitions/fanduel.ResearchNflSideOdds" + "snapshot_date": { + "description": "SnapshotDate is the crawl date (YYYY-MM-DD) this price was observed on\n-- part of the doc id, so re-crawling the same listing twice in one\nday at a changed price overwrites that day's entry rather than\ncreating a second one for the same date.", + "type": "string" }, - "scheduled_time": { + "source": { "type": "string" }, - "url": { + "source_listing_id": { "type": "string" } }, "type": "object" }, - "fanduel.ResearchNflRanks": { + "es.WebsiteStatus": { "properties": { - "defense": { - "type": "integer" + "checked_at": { + "description": "Time the website was checked, in UTC (RFC 3339).", + "type": "string" }, - "offense": { - "type": "integer" + "dns_resolvable": { + "description": "Whether the website's domain name resolved.", + "type": "boolean" }, - "passing_yards_per_game": { - "type": "integer" + "error": { + "description": "Error message from the check. Omitted when the check raised no error.", + "type": "string" }, - "rushing_yards_per_game": { + "http_reachable": { + "description": "Whether the website answered an HTTP request.", + "type": "boolean" + }, + "status_code": { + "description": "HTTP status code the website returned.", "type": "integer" + }, + "url": { + "description": "Website address that was checked.", + "type": "string" } }, "type": "object" }, - "fanduel.ResearchNflRecord": { + "es.XUserDatasetFacetItem": { "properties": { - "losses": { - "type": "integer" - }, - "ties": { + "count": { + "description": "Number of X users in this bucket.", "type": "integer" }, - "wins": { - "type": "integer" + "value": { + "description": "Bucket value for the requested facet, such as `true` or `false` for yes/no facets.", + "type": "string" } }, "type": "object" }, - "fanduel.ResearchNflScheduleResponse": { + "es.XUserDatasetItem": { "properties": { - "count": { - "type": "integer" + "avatar_url": { + "type": "string" }, - "fetched_at": { + "banner_url": { "type": "string" }, - "games": { + "bio": { + "type": "string" + }, + "bio_url_host": { "items": { - "$ref": "#/definitions/fanduel.ResearchNflGame" + "type": "string" }, "type": "array" }, - "season_type": { + "bio_urls": { + "description": "BioURLs are links written in the bio text, expanded from t.co. Distinct\nfrom ExternalURL (the single profile-header link).", + "items": { + "type": "string" + }, + "type": "array" + }, + "crawled_at": { "type": "string" }, - "week": { - "type": "integer" - } - }, - "type": "object" - }, - "fanduel.ResearchNflSideOdds": { - "properties": { - "money_line": { - "$ref": "#/definitions/fanduel.ResearchBetLine" + "created_at": { + "type": "string" }, - "spread": { - "$ref": "#/definitions/fanduel.ResearchBetLine" + "email": { + "description": "Email is an address the account self-published in its own bio. Extracted\nverbatim, never inferred or de-obfuscated. HasEmail is the faceting flag\n(an exists query on a keyword is fine, but a bool keeps parity with the\nother has_* fields and is cheaper to aggregate).", + "type": "string" }, - "team_code": { + "external_url": { "type": "string" }, - "total": { - "$ref": "#/definitions/fanduel.ResearchBetLine" - } - }, - "type": "object" - }, - "fanduel.ResearchNflTeam": { - "properties": { - "average_passing_yards_per_game": { + "follower_following_ratio": { "type": "number" }, - "average_rushing_yards_per_game": { - "type": "number" + "followers": { + "type": "integer" }, - "code": { - "type": "string" + "following": { + "type": "integer" }, - "conference": { - "type": "string" + "has_bio": { + "type": "boolean" }, - "division": { - "type": "string" + "has_bio_url": { + "type": "boolean" }, - "game_stats": { - "$ref": "#/definitions/fanduel.ResearchNflGameStats" + "has_email": { + "type": "boolean" }, - "leaders": { - "$ref": "#/definitions/fanduel.ResearchNflLeaders" + "has_external_url": { + "type": "boolean" }, - "logo_url": { + "id": { "type": "string" }, - "name": { - "type": "string" + "is_blue_verified": { + "type": "boolean" }, - "number_fire_id": { + "is_default_profile_image": { + "description": "IsDefaultProfileImage marks never-customized shells.", + "type": "boolean" + }, + "likes": { "type": "integer" }, - "primary_color": { - "type": "string" + "listed": { + "description": "Listed is how many curated lists include the account -- the best\nauthority proxy available. Media/Likes are activity signals.", + "type": "integer" }, - "ranks": { - "$ref": "#/definitions/fanduel.ResearchNflRanks" + "location_raw": { + "type": "string" }, - "record": { - "$ref": "#/definitions/fanduel.ResearchNflRecord" + "media": { + "type": "integer" }, - "secondary_color": { + "name": { "type": "string" }, - "short_name": { - "type": "string" + "posts": { + "type": "integer" }, - "slug": { + "schema_version": { + "type": "integer" + }, + "source_tier": { "type": "string" }, - "sportsbook_link": { + "username": { "type": "string" }, - "win_probability": { - "type": "number" + "verified_type": { + "description": "VerifiedType is the verification flavour (\"Business\", \"Government\", ...);\nempty for ordinary/blue accounts.", + "type": "string" } }, "type": "object" }, - "fanduel.ResearchPlayerNewsItem": { + "es.XUserRecord": { "properties": { - "analysis": { + "avatar_url": { "type": "string" }, - "attribution": { + "banner_url": { "type": "string" }, - "author": { - "$ref": "#/definitions/fanduel.ResearchAuthorRef" - }, - "fact": { + "bio": { "type": "string" }, - "id": { - "type": "string" + "bio_url_host": { + "items": { + "type": "string" + }, + "type": "array" }, - "news_type": { - "$ref": "#/definitions/fanduel.ResearchNewsType" + "bio_urls": { + "description": "BioURLs are links written in the bio text, expanded from t.co. Distinct\nfrom ExternalURL (the single profile-header link).", + "items": { + "type": "string" + }, + "type": "array" }, - "published_at": { + "crawled_at": { "type": "string" }, - "quant": { + "created_at": { "type": "string" }, - "slug": { + "email": { + "description": "Email is an address the account self-published in its own bio. Extracted\nverbatim, never inferred or de-obfuscated. HasEmail is the faceting flag\n(an exists query on a keyword is fine, but a bool keeps parity with the\nother has_* fields and is cheaper to aggregate).", "type": "string" }, - "sport": { - "$ref": "#/definitions/fanduel.ResearchSportRef" + "external_url": { + "type": "string" }, - "subject": { - "$ref": "#/definitions/fanduel.ResearchSubject" + "follower_following_ratio": { + "type": "number" }, - "title": { - "type": "string" + "followers": { + "type": "integer" }, - "updated_at": { - "type": "string" - } - }, - "type": "object" - }, - "fanduel.ResearchPlayerNewsResponse": { - "properties": { - "fetched_at": { - "type": "string" + "following": { + "type": "integer" }, - "has_more": { + "has_bio": { "type": "boolean" }, - "items": { - "items": { - "$ref": "#/definitions/fanduel.ResearchPlayerNewsItem" - }, - "type": "array" + "has_bio_url": { + "type": "boolean" }, - "next_cursor": { + "has_email": { + "type": "boolean" + }, + "has_external_url": { + "type": "boolean" + }, + "id": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.ResearchPlayerTeam": { - "properties": { - "abbreviation": { + }, + "is_blue_verified": { + "type": "boolean" + }, + "is_default_profile_image": { + "description": "IsDefaultProfileImage marks never-customized shells.", + "type": "boolean" + }, + "likes": { + "type": "integer" + }, + "listed": { + "description": "Listed is how many curated lists include the account -- the best\nauthority proxy available. Media/Likes are activity signals.", + "type": "integer" + }, + "location_raw": { "type": "string" }, + "media": { + "type": "integer" + }, "name": { "type": "string" }, - "number_fire_id": { + "posts": { "type": "integer" - } - }, - "type": "object" - }, - "fanduel.ResearchProjectionEvent": { - "properties": { - "id": { - "type": "string" }, - "name": { + "schema_version": { + "type": "integer" + }, + "source_tier": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.ResearchProjectionGame": { - "properties": { - "away_team": { - "$ref": "#/definitions/fanduel.ResearchProjectionTeam" }, - "game_time": { + "username": { "type": "string" }, - "home_team": { - "$ref": "#/definitions/fanduel.ResearchProjectionTeam" + "verified_type": { + "description": "VerifiedType is the verification flavour (\"Business\", \"Government\", ...);\nempty for ordinary/blue accounts.", + "type": "string" } }, "type": "object" }, - "fanduel.ResearchProjectionPlayer": { + "es.YoutubeChannelCandidate": { "properties": { - "handedness": { + "bio": { "type": "string" }, - "id": { - "type": "integer" + "channel_id": { + "type": "string" }, - "image_url": { + "channel_name": { "type": "string" }, - "name": { + "channel_url": { "type": "string" }, - "page_url": { + "discovered_at": { "type": "string" }, - "position": { + "discovery_source": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.ResearchProjectionPosition": { - "properties": { - "default": { + }, + "followers_count": { + "type": "integer" + }, + "followers_count_available": { "type": "boolean" }, - "label": { + "hydrated_at": { "type": "string" }, - "matches": { + "joined_date": { + "type": "string" + }, + "links": { "items": { "type": "string" }, "type": "array" }, - "player_kind": { + "profile_pic": { "type": "string" }, - "slug": { + "region": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.ResearchProjectionRow": { - "properties": { - "game": { - "$ref": "#/definitions/fanduel.ResearchProjectionGame" }, - "player": { - "$ref": "#/definitions/fanduel.ResearchProjectionPlayer" + "status": { + "type": "string" }, - "salary": { - "description": "Salary is the FanDuel DFS salary in dollars; Value is points per $1,000 of salary.", + "videos_count": { "type": "integer" }, - "stats": { - "additionalProperties": {}, - "type": "object" + "videos_count_available": { + "type": "boolean" }, - "team": { - "$ref": "#/definitions/fanduel.ResearchProjectionTeam" + "views_count": { + "type": "integer" }, - "value": { - "type": "number" + "views_count_available": { + "type": "boolean" } }, "type": "object" }, - "fanduel.ResearchProjectionSlate": { + "es.YoutubeCreatorDatasetFacetItem": { "properties": { - "id": { - "type": "string" + "count": { + "type": "integer" }, - "name": { + "value": { "type": "string" } }, "type": "object" }, - "fanduel.ResearchProjectionSlatesResponse": { + "es.YoutubeCreatorDatasetItem": { "properties": { - "count": { - "type": "integer" - }, - "date": { + "bio": { "type": "string" }, - "events": { - "items": { - "$ref": "#/definitions/fanduel.ResearchProjectionEvent" - }, - "type": "array" + "channel_id": { + "type": "string" }, - "fetched_at": { + "channel_name": { "type": "string" }, - "season": { - "type": "integer" + "channel_url": { + "type": "string" }, - "slates": { - "items": { - "$ref": "#/definitions/fanduel.ResearchProjectionSlate" - }, - "type": "array" + "discovered_at": { + "type": "string" }, - "sport": { + "discovery_source": { "type": "string" }, - "week": { + "followers_count": { "type": "integer" - } - }, - "type": "object" - }, - "fanduel.ResearchProjectionTable": { - "properties": { - "name": { - "type": "string" }, - "needs_event": { + "followers_count_available": { "type": "boolean" }, - "needs_slate": { - "type": "boolean" + "hydrated_at": { + "type": "string" }, - "positions": { - "items": { - "$ref": "#/definitions/fanduel.ResearchProjectionPosition" - }, - "type": "array" + "joined_date": { + "type": "string" }, - "scopes": { + "links": { "items": { "type": "string" }, "type": "array" }, - "sport": { - "type": "string" - }, - "table": { + "profile_pic": { "type": "string" }, - "type": { + "region": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.ResearchProjectionTablesResponse": { - "properties": { - "count": { - "type": "integer" }, - "fetched_at": { + "status": { "type": "string" }, - "sports": { - "items": { - "type": "string" - }, - "type": "array" - }, - "tables": { - "items": { - "$ref": "#/definitions/fanduel.ResearchProjectionTable" - }, - "type": "array" + "videos_count": { + "type": "integer" }, - "types": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "fanduel.ResearchProjectionTeam": { - "properties": { - "abbreviation": { - "type": "string" + "videos_count_available": { + "type": "boolean" }, - "id": { + "views_count": { "type": "integer" }, - "image_url": { - "type": "string" - }, - "name": { - "type": "string" + "views_count_available": { + "type": "boolean" } }, "type": "object" }, - "fanduel.ResearchProjectionsResponse": { + "espn.Athlete": { "properties": { - "event_id": { - "type": "string" - }, - "event_name": { - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "limit": { - "type": "integer" - }, - "page": { + "age": { "type": "integer" }, - "position": { + "display_height": { "type": "string" }, - "position_label": { + "display_name": { "type": "string" }, - "rows": { - "items": { - "$ref": "#/definitions/fanduel.ResearchProjectionRow" - }, - "type": "array" - }, - "scope": { + "display_weight": { "type": "string" }, - "slate_id": { + "full_name": { "type": "string" }, - "slate_name": { + "headshot": { "type": "string" }, - "sport": { + "id": { "type": "string" }, - "table": { + "jersey": { "type": "string" }, - "table_name": { + "position": { "type": "string" }, - "total": { - "type": "integer" - }, - "type": { - "type": "string" + "team": { + "$ref": "#/definitions/espn.TeamRef" } }, "type": "object" }, - "fanduel.ResearchResponse": { + "espn.AthleteResponse": { "properties": { - "copyright": { - "type": "string" - }, - "description": { - "type": "string" + "athlete": { + "$ref": "#/definitions/espn.Athlete" }, "fetched_at": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/fanduel.ResearchItem" - }, - "type": "array" - }, - "language": { - "type": "string" - }, - "last_build_date": { - "type": "string" - }, - "site_url": { + "league": { "type": "string" }, "source_url": { "type": "string" }, - "title": { + "sport": { "type": "string" } }, "type": "object" }, - "fanduel.ResearchSocial": { + "espn.BoxscoreTeam": { "properties": { - "account": { + "home_away": { + "description": "Whether the team is the `home` or `away` side.", "type": "string" }, - "type": { - "type": "string" + "stats": { + "additionalProperties": { + "type": "string" + }, + "description": "Team stat totals keyed by stat label, with each value as ESPN displays it.", + "type": "object" }, - "url": { - "type": "string" + "team": { + "allOf": [ + { + "$ref": "#/definitions/espn.TeamRef" + } + ], + "description": "Team these stat totals belong to." } }, "type": "object" }, - "fanduel.ResearchSport": { + "espn.Competitor": { "properties": { - "content_sport": { + "home_away": { + "description": "Whether the team is the `home` or `away` side.", + "example": "home", "type": "string" }, - "has_live_scoring": { - "type": "boolean" - }, - "has_player_updates": { - "type": "boolean" + "record": { + "description": "Team's win-loss record, for example `10-2`.", + "example": "10-2", + "type": "string" }, - "name": { + "score": { + "description": "Team's score in the game, as a string.", + "example": "27", "type": "string" }, - "player_news_types": { - "items": { - "type": "string" - }, - "type": "array" + "team": { + "allOf": [ + { + "$ref": "#/definitions/espn.TeamRef" + } + ], + "description": "Team playing in this game." }, - "positions": { + "winner": { + "description": "Whether this team won the game.", + "type": "boolean" + } + }, + "type": "object" + }, + "espn.Game": { + "properties": { + "competitors": { + "description": "Both sides of the game, each with team, home or away role and score.", "items": { - "type": "string" + "$ref": "#/definitions/espn.Competitor" }, "type": "array" }, - "show_authors": { - "type": "boolean" + "date": { + "description": "Scheduled start time of the game in ISO 8601, for example `2026-09-10T20:00Z`.", + "type": "string" }, - "slug": { + "id": { + "description": "ESPN event id of the game, for example `401816033`. Use it with the game summary endpoint.", + "example": "401816033", "type": "string" }, - "team_count": { - "type": "integer" + "name": { + "description": "Full matchup title of the game, as ESPN shows it.", + "type": "string" }, - "teams": { + "odds": { + "description": "Betting lines for the game, one entry per odds provider.", "items": { - "$ref": "#/definitions/fanduel.ResearchTeam" + "$ref": "#/definitions/espn.GameOdds" }, "type": "array" + }, + "short_name": { + "description": "Short matchup title of the game, as ESPN shows it.", + "type": "string" + }, + "status": { + "allOf": [ + { + "$ref": "#/definitions/espn.GameStatus" + } + ], + "description": "Current state of the game, such as scheduled, in progress or final." + }, + "venue": { + "description": "Name of the stadium or arena where the game is played.", + "type": "string" } }, "type": "object" }, - "fanduel.ResearchSportRef": { + "espn.GameOdds": { "properties": { - "name": { + "details": { + "description": "Betting line summary text as the provider shows it, for example `ATL -1.5`.", "type": "string" }, - "slug": { + "over_under": { + "description": "Total points line for the game, as the provider lists it.", + "type": "number" + }, + "provider": { + "description": "Name of the odds provider that published the line.", "type": "string" + }, + "spread": { + "description": "Point spread for the game, as the provider lists it.", + "type": "number" } }, "type": "object" }, - "fanduel.ResearchSportsResponse": { + "espn.GameStatus": { "properties": { - "count": { + "clock": { + "description": "Game clock text as ESPN displays it. Omitted when ESPN gives none.", + "type": "string" + }, + "completed": { + "description": "Whether the game has finished.", + "example": true, + "type": "boolean" + }, + "detail": { + "description": "Full status text ESPN shows for the game, for example `Final`.", + "example": "Final", + "type": "string" + }, + "period": { + "description": "Current period of the game, such as the quarter, inning or half. Omitted when ESPN gives none.", "type": "integer" }, - "fetched_at": { + "short_detail": { + "description": "Short status text ESPN shows for the game, for example `Final`.", + "example": "Final", "type": "string" }, - "sports": { - "items": { - "$ref": "#/definitions/fanduel.ResearchSport" - }, - "type": "array" + "state": { + "description": "Game state code as ESPN gives it, for example `pre` before the game or `post` after it.", + "example": "post", + "type": "string" } }, "type": "object" }, - "fanduel.ResearchSubCategoriesResponse": { + "espn.GameSummaryResponse": { "properties": { - "count": { - "type": "integer" + "boxscore_teams": { + "description": "Team stat totals for the game, one entry per team. Omitted when none are available.", + "items": { + "$ref": "#/definitions/espn.BoxscoreTeam" + }, + "type": "array" + }, + "event": { + "description": "ESPN event id that was requested.", + "type": "string" }, "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", "type": "string" }, - "sub_categories": { + "game": { + "allOf": [ + { + "$ref": "#/definitions/espn.Game" + } + ], + "description": "Matchup details for the game: teams, scores and status." + }, + "league": { + "description": "League key that was requested, for example `nfl`.", + "type": "string" + }, + "odds": { + "description": "Betting lines for the game, one entry per odds provider. Omitted when none are available.", "items": { - "$ref": "#/definitions/fanduel.ResearchSubCategory" + "$ref": "#/definitions/espn.GameOdds" }, "type": "array" - } - }, - "type": "object" - }, - "fanduel.ResearchSubCategory": { - "properties": { - "slug": { + }, + "source_url": { + "description": "URL the data was read from.", "type": "string" }, "sport": { - "$ref": "#/definitions/fanduel.ResearchSportRef" - }, - "title": { + "description": "Sport key that was requested, for example `football`.", "type": "string" } }, "type": "object" }, - "fanduel.ResearchSubject": { + "espn.NewsArticle": { "properties": { - "abbreviation": { + "byline": { + "description": "Name of the article's author.", "type": "string" }, - "name": { + "description": { + "description": "Short summary of the article.", "type": "string" }, - "number": { - "type": "integer" - }, - "number_fire_id": { - "type": "integer" - }, - "page_url": { + "headline": { + "description": "Article headline as shown on ESPN.", "type": "string" }, - "position": { + "link": { + "description": "URL of the article on ESPN.", "type": "string" }, - "slug": { + "published": { + "description": "Time the article was published, in ISO 8601.", "type": "string" }, - "team": { - "$ref": "#/definitions/fanduel.ResearchPlayerTeam" - }, "type": { + "description": "Article type as ESPN labels it.", "type": "string" } }, "type": "object" }, - "fanduel.ResearchTag": { + "espn.NewsResponse": { "properties": { - "name": { + "articles": { + "description": "Recent news articles for the league, one entry per article.", + "items": { + "$ref": "#/definitions/espn.NewsArticle" + }, + "type": "array" + }, + "count": { + "description": "Number of articles returned.", + "type": "integer" + }, + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", "type": "string" }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "fanduel.ResearchTeam": { - "properties": { - "abbreviation": { + "league": { + "description": "League key that was requested, for example `nfl`.", "type": "string" }, - "identifier": { + "source_url": { + "description": "URL the data was read from.", "type": "string" }, - "name": { + "sport": { + "description": "Sport key that was requested, for example `football`.", "type": "string" - }, - "number_fire_id": { - "type": "integer" } }, "type": "object" }, - "fanduel.ResearchWeather": { + "espn.RankEntry": { "properties": { - "condition": { - "type": "string" - }, - "humidity_pct": { + "current": { + "description": "Team's rank in this poll.", "type": "integer" }, - "temp_f": { + "points": { + "description": "Total poll points the team received. Omitted when ESPN gives none.", + "type": "number" + }, + "previous": { + "description": "Team's rank in the previous poll. Omitted when ESPN gives none.", "type": "integer" }, - "wind_direction": { + "record": { + "description": "Team's win-loss record, for example `16-0`.", "type": "string" }, - "wind_mph": { - "type": "integer" + "team": { + "allOf": [ + { + "$ref": "#/definitions/espn.TeamRef" + } + ], + "description": "Team holding this rank." + }, + "trend": { + "description": "Change in rank since the previous poll, as ESPN shows it.", + "type": "string" } }, "type": "object" }, - "fanduel.SportsbookAutocompleteResponse": { + "espn.RankingPoll": { "properties": { - "fetched_at": { - "type": "string" - }, - "query": { + "name": { + "description": "Full poll name, for example `AP Top 25`.", "type": "string" }, - "suggestions": { + "ranks": { + "description": "Ranked teams in the poll, one entry per rank.", "items": { - "$ref": "#/definitions/fanduel.SportsbookSuggestion" + "$ref": "#/definitions/espn.RankEntry" }, "type": "array" - } - }, - "type": "object" - }, - "fanduel.SportsbookBetRecords": { - "properties": { - "against_spread": { - "$ref": "#/definitions/fanduel.SportsbookWinLoss" }, - "money_line": { - "$ref": "#/definitions/fanduel.SportsbookWinLoss" - }, - "over_under": { - "$ref": "#/definitions/fanduel.SportsbookWinLoss" + "short_name": { + "description": "Short poll name as ESPN shows it.", + "type": "string" } }, "type": "object" }, - "fanduel.SportsbookBoxScoreColumn": { + "espn.RankingsResponse": { "properties": { - "key": { + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", "type": "string" }, - "label": { + "league": { + "description": "League key that was requested, for example `college-football`.", "type": "string" - } - }, - "type": "object" - }, - "fanduel.SportsbookBoxScoreGroup": { - "properties": { - "columns": { + }, + "polls": { + "description": "Ranking polls published for the league, one entry per poll.", "items": { - "$ref": "#/definitions/fanduel.SportsbookBoxScoreColumn" + "$ref": "#/definitions/espn.RankingPoll" }, "type": "array" }, - "key": { - "type": "string" + "season": { + "allOf": [ + { + "$ref": "#/definitions/espn.Season" + } + ], + "description": "Season the rankings belong to." }, - "label": { + "source_url": { + "description": "URL the data was read from.", "type": "string" }, - "rows": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookBoxScoreRow" - }, - "type": "array" + "sport": { + "description": "Sport key that was requested, for example `football`.", + "type": "string" } }, "type": "object" }, - "fanduel.SportsbookBoxScoreResponse": { + "espn.RosterAthlete": { "properties": { - "available": { - "type": "boolean" + "age": { + "description": "Player's age in years.", + "type": "integer" }, - "event_id": { + "display_height": { + "description": "Player's height as ESPN displays it.", + "type": "string" + }, + "display_weight": { + "description": "Player's weight as ESPN displays it.", + "type": "string" + }, + "experience_years": { + "description": "Number of years of experience the player has.", "type": "integer" }, - "fetched_at": { + "full_name": { + "description": "Player's full name.", "type": "string" }, - "groups": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookBoxScoreGroup" - }, - "type": "array" + "id": { + "description": "ESPN athlete id of the player.", + "type": "string" }, - "score": { - "$ref": "#/definitions/fanduel.SportsbookScore" + "jersey": { + "description": "Player's jersey number, as a string.", + "type": "string" }, - "status": { + "position": { + "description": "Player's position on the team.", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookBoxScoreRow": { + "espn.RosterResponse": { "properties": { - "id": { + "athletes": { + "description": "Players on the team roster, one entry per player.", + "items": { + "$ref": "#/definitions/espn.RosterAthlete" + }, + "type": "array" + }, + "coach": { + "description": "Name of the team's head coach. Omitted when ESPN lists none.", "type": "string" }, - "name": { + "count": { + "description": "Number of athletes returned.", + "type": "integer" + }, + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", "type": "string" }, - "player_id": { + "league": { + "description": "League key that was requested, for example `nfl`.", "type": "string" }, - "position": { + "source_url": { + "description": "URL the data was read from.", "type": "string" }, - "stats": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "sport": { + "description": "Sport key that was requested, for example `football`.", + "type": "string" }, "team": { - "type": "string" + "allOf": [ + { + "$ref": "#/definitions/espn.TeamRef" + } + ], + "description": "Team the roster belongs to." } }, "type": "object" }, - "fanduel.SportsbookBuilderCard": { + "espn.ScoreboardResponse": { "properties": { - "available_options": { - "additionalProperties": {}, - "type": "object" + "count": { + "example": 14, + "type": "integer" }, - "description_template": { + "day": { "type": "string" }, - "id": { + "fetched_at": { "type": "string" }, - "legs": { + "games": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/espn.Game" }, "type": "array" }, - "prop_key": { + "league": { + "example": "nfl", "type": "string" }, - "props": { - "items": { - "type": "string" - }, - "type": "array" + "league_name": { + "example": "National Football League", + "type": "string" }, - "selected_options": { - "additionalProperties": {}, - "type": "object" + "season": { + "$ref": "#/definitions/espn.Season" }, - "title": { + "source_url": { "type": "string" }, - "type": { + "sport": { + "example": "football", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookBuilderChoice": { + "espn.Season": { "properties": { - "choice_id": { - "type": "string" - }, - "description": { + "name": { + "description": "Season type name as ESPN shows it.", "type": "string" }, - "status": { - "type": "string" + "type": { + "description": "Season type code: 1 preseason, 2 regular season, 3 postseason, 4 offseason.", + "example": 2, + "type": "integer" }, - "template_id": { - "type": "string" + "year": { + "description": "Season year, for example `2024`.", + "example": 2024, + "type": "integer" } }, "type": "object" }, - "fanduel.SportsbookBuilderCompetition": { + "espn.StandingsEntry": { "properties": { - "competition_id": { - "type": "integer" + "note": { + "type": "string" }, - "event_ids": { - "items": { - "type": "integer" + "stats": { + "additionalProperties": { + "type": "string" }, - "type": "array" - }, - "first_event_id": { - "type": "integer" - }, - "logo_url": { - "type": "string" + "type": "object" }, - "name": { - "type": "string" + "team": { + "$ref": "#/definitions/espn.TeamRef" } }, "type": "object" }, - "fanduel.SportsbookBuilderEvent": { + "espn.StandingsGroup": { "properties": { "abbreviation": { "type": "string" }, - "away_logo_url": { - "type": "string" - }, - "competition": { - "type": "string" - }, - "competition_id": { - "type": "integer" - }, - "event_id": { - "type": "integer" - }, - "home_logo_url": { - "type": "string" + "entries": { + "items": { + "$ref": "#/definitions/espn.StandingsEntry" + }, + "type": "array" }, "name": { "type": "string" - }, - "start_time": { - "type": "string" } }, "type": "object" }, - "fanduel.SportsbookBuilderEventsResponse": { + "espn.StandingsResponse": { "properties": { - "competitions": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookBuilderCompetition" - }, - "type": "array" + "fetched_at": { + "type": "string" }, - "events": { + "groups": { "items": { - "$ref": "#/definitions/fanduel.SportsbookBuilderEvent" + "$ref": "#/definitions/espn.StandingsGroup" }, "type": "array" }, - "experience": { + "league": { "type": "string" }, - "fetched_at": { + "league_name": { "type": "string" }, - "first_event_id": { - "type": "integer" + "season": { + "$ref": "#/definitions/espn.Season" }, - "state": { + "source_url": { + "type": "string" + }, + "sport": { "type": "string" } }, "type": "object" }, - "fanduel.SportsbookBuilderGroup": { + "espn.TeamDetail": { "properties": { - "card_ids": { - "items": { - "type": "string" - }, - "type": "array" + "abbreviation": { + "description": "Short team code, for example `KC`.", + "example": "KC", + "type": "string" }, - "id": { + "alternate_color": { + "description": "Team's secondary colour code, as ESPN gives it.", "type": "string" }, - "layout_type": { + "color": { + "description": "Team's primary colour code, as ESPN gives it.", "type": "string" }, - "title": { + "display_name": { + "description": "Full team name, for example `Kansas City Chiefs`.", + "example": "Kansas City Chiefs", "type": "string" }, - "type": { + "id": { + "description": "ESPN team id, for example `12`. Use it as the `team` parameter of the team and roster endpoints.", + "example": "12", "type": "string" - } - }, - "type": "object" - }, - "fanduel.SportsbookBuilderPlayer": { - "properties": { - "headshot_url": { + }, + "location": { + "description": "Team's city or region, for example `Kansas City`.", + "example": "Kansas City", "type": "string" }, - "id": { + "logo": { + "description": "URL of the team logo image.", "type": "string" }, "name": { + "description": "Team nickname without the location, for example `Chiefs`.", + "example": "Chiefs", "type": "string" }, - "short_name": { + "record": { + "description": "Team's overall win-loss record, for example `10-2`.", "type": "string" }, - "team_id": { + "short_display_name": { + "description": "Shortened team name, for example `Chiefs`.", + "example": "Chiefs", + "type": "string" + }, + "standing_summary": { + "description": "Short text describing the team's place in its division or conference standings.", + "type": "string" + }, + "uid": { + "description": "ESPN's unique identifier string for the team.", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookBuilderResponse": { + "espn.TeamRef": { "properties": { - "cards": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookBuilderCard" - }, - "type": "array" - }, - "choices": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookBuilderChoice" - }, - "type": "array" - }, - "competition": { + "abbreviation": { + "description": "Short team code, for example `KC`.", + "example": "KC", "type": "string" }, - "competition_id": { - "type": "integer" - }, - "event_id": { - "type": "integer" - }, - "event_name": { + "alternate_color": { + "description": "Team's secondary colour code, as ESPN gives it.", "type": "string" }, - "experience": { + "color": { + "description": "Team's primary colour code, as ESPN gives it.", "type": "string" }, - "fetched_at": { + "display_name": { + "description": "Full team name, for example `Kansas City Chiefs`.", + "example": "Kansas City Chiefs", "type": "string" }, - "game_status": { + "id": { + "description": "ESPN team id, for example `12`. Use it as the `team` parameter of the team and roster endpoints.", + "example": "12", "type": "string" }, - "groups": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookBuilderGroup" - }, - "type": "array" - }, - "layout": { - "items": { - "type": "string" - }, - "type": "array" - }, - "periods": { - "items": { - "type": "string" - }, - "type": "array" - }, - "players": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookBuilderPlayer" - }, - "type": "array" - }, - "ramp_event_id": { - "type": "integer" + "location": { + "description": "Team's city or region, for example `Kansas City`.", + "example": "Kansas City", + "type": "string" }, - "start_time": { + "logo": { + "description": "URL of the team logo image.", "type": "string" }, - "state": { + "name": { + "description": "Team nickname without the location, for example `Chiefs`.", + "example": "Chiefs", "type": "string" }, - "status": { + "short_display_name": { + "description": "Shortened team name, for example `Chiefs`.", + "example": "Chiefs", "type": "string" }, - "teams": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookBuilderTeam" - }, - "type": "array" + "uid": { + "description": "ESPN's unique identifier string for the team.", + "type": "string" } }, "type": "object" }, - "fanduel.SportsbookBuilderTeam": { + "espn.TeamResponse": { "properties": { - "abbr": { - "type": "string" - }, - "id": { + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", "type": "string" }, - "logo_url": { + "league": { + "description": "League key that was requested, for example `nfl`.", "type": "string" }, - "name": { + "source_url": { + "description": "URL the data was read from.", "type": "string" }, - "side": { - "type": "string" - } - }, - "type": "object" - }, - "fanduel.SportsbookChoiceFailure": { - "properties": { - "choice_id": { + "sport": { + "description": "Sport key that was requested, for example `football`.", "type": "string" }, - "code": { - "type": "string" + "team": { + "allOf": [ + { + "$ref": "#/definitions/espn.TeamDetail" + } + ], + "description": "Details for the requested team, including record and standing." } }, "type": "object" }, - "fanduel.SportsbookChoiceQuote": { + "espn.TeamsResponse": { "properties": { - "american_odds": { + "count": { + "description": "Number of teams returned.", + "example": 32, "type": "integer" }, - "bet_type": { + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", "type": "string" }, - "choice_id": { + "league": { + "description": "League key that was requested, for example `nfl`.", "type": "string" }, - "decimal_odds": { - "type": "number" + "source_url": { + "description": "URL the data was read from.", + "type": "string" }, - "display_decimal_odds": { - "type": "number" + "sport": { + "description": "Sport key that was requested, for example `football`.", + "type": "string" }, - "features": { + "teams": { + "description": "Teams in the league, one entry per team.", "items": { - "type": "string" + "$ref": "#/definitions/espn.TeamRef" }, "type": "array" - }, - "fractional_odds": { - "type": "string" - }, - "same_game_multi": { - "type": "boolean" } }, "type": "object" }, - "fanduel.SportsbookChoiceQuotesResponse": { + "espn.athleteResponseDoc": { "properties": { - "failures": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookChoiceFailure" - }, - "type": "array" - }, - "fetched_at": { - "type": "string" - }, - "quotes": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookChoiceQuote" - }, - "type": "array" - }, - "ramp_event_id": { + "code": { + "example": 200, "type": "integer" }, - "state": { + "data": { + "$ref": "#/definitions/espn.AthleteResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookCompetition": { + "espn.gameSummaryResponseDoc": { "properties": { - "competition_id": { - "type": "integer" - }, - "event_type_id": { + "code": { + "example": 200, "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/espn.GameSummaryResponse" }, - "region": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookDepthChartPlayer": { + "espn.newsResponseDoc": { "properties": { - "age": { + "code": { + "example": 200, "type": "integer" }, - "college": { - "type": "string" - }, - "draft_pick": { - "type": "string" - }, - "draft_round": { - "type": "string" + "data": { + "$ref": "#/definitions/espn.NewsResponse" }, - "draft_year": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "espn.rankingsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/espn.RankingsResponse" }, - "position": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "espn.rosterResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "rank": { - "type": "string" + "data": { + "$ref": "#/definitions/espn.RosterResponse" }, - "slug": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookDepthChartResponse": { + "espn.scoreboardResponseDoc": { "properties": { - "fetched_at": { - "type": "string" - }, - "league": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "players": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookDepthChartPlayer" - }, - "type": "array" + "data": { + "$ref": "#/definitions/espn.ScoreboardResponse" }, - "team": { + "msg": { + "example": "OK", "type": "string" - }, - "team_leaders": { - "additionalProperties": {}, - "type": "object" } }, "type": "object" }, - "fanduel.SportsbookDirectoryPlayer": { + "espn.standingsResponseDoc": { "properties": { - "name": { - "type": "string" - }, - "player_id": { + "code": { + "example": 200, "type": "integer" }, - "slug": { + "data": { + "$ref": "#/definitions/espn.StandingsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookEvent": { + "espn.teamResponseDoc": { "properties": { - "competition_id": { + "code": { + "example": 200, "type": "integer" }, - "event_id": { - "type": "integer" + "data": { + "$ref": "#/definitions/espn.TeamResponse" }, - "event_type_id": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "espn.teamsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "in_play": { - "type": "boolean" - }, - "markets": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookMarket" - }, - "type": "array" - }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/espn.TeamsResponse" }, - "open_date": { + "msg": { + "example": "OK", "type": "string" - }, - "video_available": { - "type": "boolean" } }, "type": "object" }, - "fanduel.SportsbookEventPlayersResponse": { + "etsy.MobileListing": { "properties": { - "away_team": { - "$ref": "#/definitions/fanduel.SportsbookTeam" - }, - "competition": { + "category_name": { "type": "string" }, - "event_id": { + "create_date": { "type": "integer" }, - "event_name": { + "currency": { + "example": "USD", "type": "string" }, - "fetched_at": { + "description": { "type": "string" }, - "home_team": { - "$ref": "#/definitions/fanduel.SportsbookTeam" + "favorites": { + "type": "integer" }, - "players": { + "images": { "items": { - "$ref": "#/definitions/fanduel.SportsbookPlayer" + "type": "string" }, "type": "array" }, - "scheduled_at": { - "type": "string" - } - }, - "type": "object" - }, - "fanduel.SportsbookEventResponse": { - "properties": { - "competition": { - "$ref": "#/definitions/fanduel.SportsbookCompetition" + "is_customizable": { + "type": "boolean" }, - "default_tab": { - "type": "string" + "is_digital": { + "type": "boolean" }, - "event": { - "$ref": "#/definitions/fanduel.SportsbookEvent" + "is_sold_out": { + "type": "boolean" }, - "fetched_at": { + "listing_id": { + "example": "1044347578", "type": "string" }, - "market_types": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookMarketTypeCount" - }, - "type": "array" - }, - "notes": { + "materials": { "items": { "type": "string" }, "type": "array" }, - "selected_tab": { + "price": { + "example": "$29.99", "type": "string" }, - "state": { - "type": "string" + "price_int": { + "example": 2999, + "type": "integer" }, - "tabs": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookTab" - }, - "type": "array" - } - }, - "type": "object" - }, - "fanduel.SportsbookEventScoreResponse": { - "properties": { - "event_id": { + "quantity": { "type": "integer" }, - "fetched_at": { + "ships_from_country": { "type": "string" }, - "live": { - "$ref": "#/definitions/fanduel.SportsbookLiveStatus" + "shop_id": { + "type": "string" }, - "media_types": { + "shop_name": { + "type": "string" + }, + "state": { + "example": "active", + "type": "string" + }, + "tags": { "items": { "type": "string" }, "type": "array" }, - "score": { - "$ref": "#/definitions/fanduel.SportsbookScore" - } - }, - "type": "object" - }, - "fanduel.SportsbookEventStats": { - "properties": { - "competition": { + "title": { "type": "string" }, - "competition_id": { - "type": "integer" - }, - "event_id": { + "update_date": { "type": "integer" }, - "last_five_games": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookFormLine" - }, - "type": "array" - }, - "other_widgets": { - "additionalProperties": {}, - "type": "object" - }, - "spread_bets_percent": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookSplit" - }, - "type": "array" + "url": { + "type": "string" }, - "spread_money_percent": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookSplit" - }, - "type": "array" + "views": { + "type": "integer" }, - "teams": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookStatsTeam" - }, - "type": "array" - } - }, - "type": "object" - }, - "fanduel.SportsbookEventStatsResponse": { - "properties": { - "fetched_at": { + "when_made": { "type": "string" - }, - "stats": { - "$ref": "#/definitions/fanduel.SportsbookEventStats" } }, "type": "object" }, - "fanduel.SportsbookEventStatus": { + "etsy.MobileListingCard": { "properties": { - "event_id": { - "type": "integer" - }, - "game_phase": { + "currency": { "type": "string" }, - "price_clock": { + "image": { "type": "string" }, - "status": { + "is_sold_out": { + "type": "boolean" + }, + "listing_id": { + "example": "1044347578", "type": "string" }, - "status_clock": { + "price": { + "example": "$29.99", "type": "string" }, - "structure_clock": { + "price_int": { + "type": "integer" + }, + "quantity": { + "type": "integer" + }, + "shop_id": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.SportsbookEventsStatusResponse": { - "properties": { - "events": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookEventStatus" - }, - "type": "array" }, - "fetched_at": { + "shop_name": { "type": "string" }, - "not_found": { - "items": { - "type": "integer" - }, - "type": "array" + "shop_rating": { + "type": "number" }, - "state": { + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "fanduel.SportsbookFormLine": { + "etsy.MobileListingReviews": { "properties": { - "name": { + "avg_rating": { + "example": 4.9, + "type": "number" + }, + "count": { + "example": 123, + "type": "integer" + }, + "listing_id": { + "example": "1044347578", "type": "string" }, - "results": { + "offset": { + "example": 0, + "type": "integer" + }, + "reviews": { "items": { - "type": "string" + "$ref": "#/definitions/etsy.MobileReview" }, "type": "array" }, - "selection_id": { + "total_rating_count": { "type": "integer" } }, "type": "object" }, - "fanduel.SportsbookFutureOdd": { + "etsy.MobileReview": { "properties": { - "description": { + "buyer_avatar": { "type": "string" }, - "market_type": { + "buyer_login": { "type": "string" }, - "odds": { + "buyer_name": { "type": "string" }, - "team": { + "buyer_user_id": { "type": "string" }, - "team_slug": { - "type": "string" - } - }, - "type": "object" - }, - "fanduel.SportsbookGameLine": { - "properties": { - "odds": { - "type": "string" + "date": { + "type": "integer" }, - "value": { + "language": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.SportsbookGameSummary": { - "properties": { - "away_score": { - "type": "integer" }, - "away_slug": { + "listing_id": { "type": "string" }, - "away_team": { + "listing_image": { "type": "string" }, - "date": { + "listing_title": { "type": "string" }, - "home_score": { + "rating": { + "example": 5, "type": "integer" }, - "home_slug": { - "type": "string" - }, - "home_team": { + "receipt_id": { "type": "string" }, - "title": { - "type": "string" + "seller_replied": { + "type": "boolean" }, - "venue": { + "text": { "type": "string" } }, "type": "object" }, - "fanduel.SportsbookLeagueGame": { + "etsy.MobileSearchResponse": { "properties": { - "away_code": { - "type": "string" + "count": { + "example": 112886, + "type": "integer" }, - "away_score": { + "offset": { + "example": 0, "type": "integer" }, - "away_slug": { + "query": { + "example": "handmade mug", "type": "string" }, - "away_team": { - "type": "string" + "results": { + "items": { + "$ref": "#/definitions/etsy.MobileListingCard" + }, + "type": "array" + } + }, + "type": "object" + }, + "etsy.MobileShop": { + "properties": { + "average_rating": { + "example": 4.9, + "type": "number" }, - "broadcast": { + "headline": { "type": "string" }, - "bye_week": { - "type": "boolean" + "icon": { + "type": "string" }, - "conference_game": { + "is_star_seller": { "type": "boolean" }, - "home_code": { - "type": "string" - }, - "home_score": { + "open_date": { "type": "integer" }, - "home_slug": { - "type": "string" + "reviews_count": { + "example": 363, + "type": "integer" }, - "home_team": { + "seller_avatar": { "type": "string" }, - "scheduled_time": { + "seller_login": { "type": "string" }, - "status": { + "seller_name": { "type": "string" }, - "title": { + "shop_id": { + "example": "12345678", "type": "string" }, - "venue": { + "shop_name": { "type": "string" }, - "week": { + "sold_count": { "type": "integer" } }, "type": "object" }, - "fanduel.SportsbookLeagueScheduleResponse": { + "etsy.MobileShopCard": { "properties": { - "date": { - "type": "string" + "active_listing_count": { + "type": "integer" }, - "end_date": { - "type": "string" + "is_vacation": { + "type": "boolean" }, - "fetched_at": { + "location": { "type": "string" }, - "game_count": { + "open_date": { "type": "integer" }, - "groups": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookScheduleGroup" - }, - "type": "array" - }, - "league": { + "seller_avatar": { "type": "string" }, - "week": { - "$ref": "#/definitions/fanduel.SportsbookScheduleWeek" - }, - "weeks": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookScheduleWeek" - }, - "type": "array" - } - }, - "type": "object" - }, - "fanduel.SportsbookLiveCountResponse": { - "properties": { - "fetched_at": { + "shop_id": { + "example": "12345678", "type": "string" }, - "live_events": { - "type": "integer" - }, - "state": { + "shop_name": { "type": "string" } }, "type": "object" }, - "fanduel.SportsbookLiveDataResponse": { + "etsy.MobileShopListings": { "properties": { - "events": { + "listings": { "items": { - "$ref": "#/definitions/fanduel.SportsbookLiveEvent" + "$ref": "#/definitions/etsy.MobileListingCard" }, "type": "array" }, - "fetched_at": { + "offset": { + "example": 0, + "type": "integer" + }, + "query": { "type": "string" }, - "missing": { - "items": { - "type": "integer" - }, - "type": "array" + "shop_id": { + "example": "12345678", + "type": "string" + }, + "shop_name": { + "type": "string" } }, "type": "object" }, - "fanduel.SportsbookLiveEvent": { + "etsy.MobileShopReviews": { "properties": { - "away_score": { - "type": "integer" - }, - "details": { - "additionalProperties": {}, - "type": "object" + "avg_rating": { + "example": 4.9, + "type": "number" }, - "event_id": { + "count": { "type": "integer" }, - "home_score": { + "offset": { + "example": 0, "type": "integer" }, - "live": { - "type": "boolean" - }, - "media_types": { + "reviews": { "items": { - "type": "string" + "$ref": "#/definitions/etsy.MobileReview" }, "type": "array" }, - "player_progress": { - "additionalProperties": {}, - "type": "object" - }, - "player_stats": { - "additionalProperties": {}, - "type": "object" - }, - "provider": { + "shop_id": { + "example": "12345678", "type": "string" }, - "sport": { + "shop_name": { "type": "string" + }, + "total_rating_count": { + "type": "integer" } }, "type": "object" }, - "fanduel.SportsbookLiveScore": { + "etsy.MobileShopSearchResponse": { "properties": { - "away_score": { - "type": "integer" - }, - "current_period": { - "type": "integer" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "event_id": { - "type": "integer" - }, - "home_score": { - "type": "integer" + "query": { + "example": "ceramic", + "type": "string" }, - "media_types": { + "shops": { "items": { - "type": "string" + "$ref": "#/definitions/etsy.MobileShopCard" }, "type": "array" - }, - "model_type": { - "type": "string" - }, - "period": { - "type": "string" - }, - "period_remaining_milliseconds": { + } + }, + "type": "object" + }, + "etsy.listingResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "provider": { - "type": "string" + "data": { + "$ref": "#/definitions/etsy.MobileListing" }, - "sport": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookLiveScoresResponse": { + "etsy.listingReviewsResponseDoc": { "properties": { - "events": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookLiveScore" - }, - "type": "array" - }, - "fetched_at": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "not_found": { - "items": { - "type": "integer" - }, - "type": "array" + "data": { + "$ref": "#/definitions/etsy.MobileListingReviews" }, - "state": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookLiveStatus": { + "etsy.searchResponseDoc": { "properties": { - "box_score_available": { - "type": "boolean" - }, - "competition": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "play_by_play_available": { - "type": "boolean" + "data": { + "$ref": "#/definitions/etsy.MobileSearchResponse" }, - "provider": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "etsy.shopListingsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "quick_bets_available": { - "type": "boolean" - }, - "score_available": { - "type": "boolean" + "data": { + "$ref": "#/definitions/etsy.MobileShopListings" }, - "status": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookMarket": { + "etsy.shopResponseDoc": { "properties": { - "betting_type": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "in_play": { - "type": "boolean" + "data": { + "$ref": "#/definitions/etsy.MobileShop" }, - "market_id": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "etsy.shopReviewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "market_time": { - "type": "string" + "data": { + "$ref": "#/definitions/etsy.MobileShopReviews" }, - "name": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "etsy.shopSearchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "runners": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookRunner" - }, - "type": "array" - }, - "same_game_parlay_eligible": { - "type": "boolean" - }, - "status": { - "type": "string" + "data": { + "$ref": "#/definitions/etsy.MobileShopSearchResponse" }, - "type": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookMarketPrice": { + "euronews.AuthorResponse": { "properties": { - "bet_delay_seconds": { - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "betting_type": { + "job_title": { + "description": "JobTitle is read directly from the page's own Person structured data.\nEuronews currently sends the same value (\"Journaliste\") for every\nprofile checked, regardless of the author's actual role -- it is\nreproduced as-is rather than translated or normalized.", "type": "string" }, - "in_play": { - "type": "boolean" - }, - "market_id": { + "name": { "type": "string" }, - "runners": { + "social_links": { + "description": "SocialLinks lists whatever external profile link(s) the page's own\nstructured data provides (typically a single X/Twitter profile URL).\nNot every author has one.", "items": { - "$ref": "#/definitions/fanduel.SportsbookPriceRunner" + "type": "string" }, "type": "array" }, - "same_game_parlay_eligible": { - "type": "boolean" + "team": { + "description": "Team is the editorial/language-desk label from the page's own Person\nstructured data (e.g. \"Equipe de langue anglaise\"), reproduced as-is.", + "type": "string" }, - "status": { + "url": { "type": "string" } }, "type": "object" }, - "fanduel.SportsbookMarketPricesResponse": { + "ew.AuthorResponse": { "properties": { - "fetched_at": { - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/ew.HeadlineItem" + }, + "type": "array" }, - "markets": { + "biography": { "items": { - "$ref": "#/definitions/fanduel.SportsbookMarketPrice" + "type": "string" }, "type": "array" }, - "missing": { + "highlights": { "items": { "type": "string" }, "type": "array" }, - "state": { + "job_title": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.SportsbookMarketTypeCount": { - "properties": { - "count": { - "type": "integer" }, - "type": { + "name": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "fanduel.SportsbookNavLink": { + "ew.HeadlineItem": { "properties": { - "custom_page_id": { + "author": { "type": "string" }, - "display_order": { - "type": "integer" - }, - "icon": { + "image_url": { "type": "string" }, - "id": { - "type": "integer" + "published_at": { + "type": "string" }, - "kind": { + "summary": { "type": "string" }, "title": { "type": "string" }, + "type": { + "type": "string" + }, "url": { "type": "string" } }, "type": "object" }, - "fanduel.SportsbookPageResponse": { + "expedia.ActivityListing": { "properties": { - "competition_id": { - "type": "integer" + "duration": { + "type": "string" }, - "competitions": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookCompetition" - }, - "type": "array" + "free_cancellation": { + "type": "boolean" }, - "custom_page_id": { + "id": { "type": "string" }, - "default_tab": { + "name": { "type": "string" }, - "description": { + "price": { "type": "string" }, - "event_type_id": { + "review_count": { "type": "integer" }, - "events": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookEvent" - }, - "type": "array" - }, - "fetched_at": { - "type": "string" - }, - "market_types": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookMarketTypeCount" - }, - "type": "array" - }, - "page_type": { - "type": "string" - }, - "selected_tab": { + "review_label": { "type": "string" }, - "state": { + "review_score": { "type": "string" }, - "tabs": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookTab" - }, - "type": "array" - }, - "title": { + "thumbnail_url": { "type": "string" } }, "type": "object" }, - "fanduel.SportsbookParlay": { + "expedia.ActivitySearchOption": { "properties": { - "american_odds": { - "type": "integer" - }, - "away_team": { - "type": "string" - }, - "competition_id": { - "type": "integer" - }, - "competition_name": { - "type": "string" - }, - "decimal_odds": { - "type": "number" - }, - "event_id": { - "type": "integer" - }, - "event_name": { + "currency": { + "example": "USD", "type": "string" }, - "featured_by": { + "destination": { + "example": "Miami", "type": "string" }, - "home_team": { + "end_date": { + "example": "2026-08-17", "type": "string" }, - "id": { + "locale": { + "example": "en_US", "type": "string" }, - "is_editable": { - "type": "boolean" + "page": { + "example": 1, + "type": "integer" }, - "is_manually_created": { - "type": "boolean" + "page_size": { + "example": 20, + "type": "integer" }, - "legs": { + "start_date": { + "example": "2026-08-04", + "type": "string" + } + }, + "required": [ + "destination", + "end_date", + "start_date" + ], + "type": "object" + }, + "expedia.ActivitySearchResponse": { + "properties": { + "activities": { "items": { - "$ref": "#/definitions/fanduel.SportsbookParlayLeg" + "$ref": "#/definitions/expedia.ActivityListing" }, "type": "array" }, - "narrative": { + "destination": { "type": "string" }, - "total_bets": { + "page": { "type": "integer" }, - "type": { + "region_id": { "type": "string" + }, + "total_count": { + "type": "integer" } }, "type": "object" }, - "fanduel.SportsbookParlayEventGroup": { + "expedia.FlightOffer": { "properties": { - "away_team": { + "airline": { "type": "string" }, - "event_id": { - "type": "integer" - }, - "event_name": { + "arrival_time": { "type": "string" }, - "home_team": { + "departure_time": { "type": "string" }, - "open_date": { + "duration_summary": { "type": "string" }, - "parlay_ids": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "fanduel.SportsbookParlayFilter": { - "properties": { - "competition_ids": { - "items": { - "type": "integer" - }, - "type": "array" + "price": { + "type": "string" }, - "id": { + "price_note": { "type": "string" }, - "text": { + "route": { "type": "string" + }, + "stops": { + "type": "integer" } }, "type": "object" }, - "fanduel.SportsbookParlayLeg": { + "expedia.FlightsSearchOption": { "properties": { - "competition_id": { + "adults": { + "example": 1, "type": "integer" }, - "event_id": { - "type": "integer" + "cabin_class": { + "example": "COACH", + "type": "string" }, - "event_name": { + "currency": { + "example": "USD", "type": "string" }, - "market": { + "departure_date": { + "example": "2026-08-17", "type": "string" }, - "market_id": { + "destination": { + "example": "LAX", "type": "string" }, - "market_type": { + "locale": { + "example": "en_US", "type": "string" }, - "selection": { + "origin": { + "example": "JFK", "type": "string" }, - "selection_id": { - "type": "integer" - } - }, - "type": "object" - }, - "fanduel.SportsbookParlayTypeCount": { - "properties": { - "count": { - "type": "integer" + "return_date": { + "example": "2026-08-18", + "type": "string" }, - "type": { + "trip_type": { + "example": "round_trip", "type": "string" } }, + "required": [ + "departure_date", + "destination", + "origin" + ], "type": "object" }, - "fanduel.SportsbookParlaysResponse": { + "expedia.FlightsSearchResponse": { "properties": { - "card_cap": { - "type": "integer" - }, - "event_groups": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookParlayEventGroup" - }, - "type": "array" - }, - "event_id": { - "type": "integer" - }, - "fetched_at": { + "departure_date": { "type": "string" }, - "filters": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookParlayFilter" - }, - "type": "array" + "destination": { + "type": "string" }, - "parlays": { + "offers": { "items": { - "$ref": "#/definitions/fanduel.SportsbookParlay" + "$ref": "#/definitions/expedia.FlightOffer" }, "type": "array" }, - "state": { + "origin": { "type": "string" }, - "truncated": { - "type": "boolean" - }, - "types": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookParlayTypeCount" - }, - "type": "array" - }, - "view": { + "return_date": { "type": "string" } }, "type": "object" }, - "fanduel.SportsbookPeriodScore": { + "expedia.LocationSearchOption": { "properties": { - "away": { - "type": "integer" + "currency": { + "example": "USD", + "type": "string" }, - "home": { - "type": "integer" + "locale": { + "example": "en_US", + "type": "string" }, - "period": { + "term": { + "example": "Miami", "type": "string" } }, + "required": [ + "term" + ], "type": "object" }, - "fanduel.SportsbookPlacement": { + "expedia.LocationSearchResponse": { "properties": { - "placement": { - "type": "string" - }, - "promo_codes": { + "items": { "items": { - "type": "string" + "$ref": "#/definitions/expedia.LocationSuggestion" }, "type": "array" + }, + "term": { + "type": "string" } }, "type": "object" }, - "fanduel.SportsbookPlayByPlayResponse": { + "expedia.LocationSuggestion": { "properties": { - "available": { - "type": "boolean" + "airport_code": { + "type": "string" }, - "current": { - "type": "boolean" + "geo_type": { + "type": "string" }, - "event_id": { - "type": "integer" + "latitude": { + "type": "number" }, - "feed": { - "additionalProperties": {}, - "type": "object" + "location_full_name": { + "type": "string" }, - "fetched_at": { + "longitude": { + "type": "number" + }, + "primary_text": { "type": "string" }, - "status": { + "property_id": { + "type": "string" + }, + "region_id": { + "type": "string" + }, + "secondary_text": { + "type": "string" + }, + "type": { "type": "string" } }, "type": "object" }, - "fanduel.SportsbookPlayer": { + "expedia.PropertyDetailOption": { "properties": { - "abbreviated_name": { - "type": "string" + "adults": { + "example": 2, + "type": "integer" }, - "name": { + "check_in": { + "example": "2026-08-04", "type": "string" }, - "number": { + "check_out": { + "example": "2026-08-05", "type": "string" }, - "player_id": { + "currency": { + "example": "USD", "type": "string" }, - "position": { + "locale": { + "example": "en_US", "type": "string" }, - "team": { + "property_id": { + "example": "111893452", "type": "string" } }, + "required": [ + "check_in", + "check_out", + "property_id" + ], "type": "object" }, - "fanduel.SportsbookPlayerNewsResponse": { + "expedia.PropertyDetailResponse": { "properties": { - "articles": { + "address": { + "type": "string" + }, + "amenities": { "items": { - "$ref": "#/definitions/fanduel.SportsbookTeamArticle" + "type": "string" }, "type": "array" }, - "fetched_at": { + "city": { "type": "string" }, - "has_more": { - "type": "boolean" - }, - "league": { + "country_code": { "type": "string" }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, "name": { "type": "string" }, - "next_cursor": { + "property_id": { "type": "string" }, - "player": { + "province": { "type": "string" }, - "player_updates": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "star_rating": { + "type": "number" + }, + "vip_message": { + "type": "string" } }, "type": "object" }, - "fanduel.SportsbookPlayerPropEvent": { + "expedia.PropertyFilterField": { "properties": { - "date": { - "type": "string" - }, - "event_id": { - "type": "integer" - }, - "event_name": { + "label": { "type": "string" }, - "markets": { + "options": { "items": { - "$ref": "#/definitions/fanduel.SportsbookPlayerPropMarket" + "$ref": "#/definitions/expedia.PropertyFilterOption" }, "type": "array" + }, + "range_max": { + "type": "number" + }, + "range_min": { + "type": "number" + }, + "type": { + "type": "string" } }, "type": "object" }, - "fanduel.SportsbookPlayerPropMarket": { + "expedia.PropertyFilterOption": { "properties": { - "market_id": { + "filter_id": { "type": "string" }, - "market_type": { + "label": { "type": "string" }, - "name": { - "type": "string" + "selected": { + "type": "boolean" }, - "selections": { + "value": { + "type": "string" + } + }, + "type": "object" + }, + "expedia.PropertyFilterSection": { + "properties": { + "fields": { "items": { - "$ref": "#/definitions/fanduel.SportsbookPlayerPropSelection" + "$ref": "#/definitions/expedia.PropertyFilterField" }, "type": "array" + }, + "title": { + "type": "string" } }, "type": "object" }, - "fanduel.SportsbookPlayerPropSelection": { + "expedia.PropertyFiltersOption": { "properties": { - "handicap": { - "type": "number" + "adults": { + "example": 2, + "type": "integer" }, - "odds": { + "check_in": { + "example": "2026-08-04", "type": "string" }, - "runner": { + "check_out": { + "example": "2026-08-05", "type": "string" }, - "selection_id": { + "currency": { + "example": "USD", + "type": "string" + }, + "destination": { + "example": "Miami", + "type": "string" + }, + "locale": { + "example": "en_US", + "type": "string" + }, + "rooms": { + "example": 1, "type": "integer" } }, + "required": [ + "check_in", + "check_out", + "destination" + ], "type": "object" }, - "fanduel.SportsbookPlayerProps": { + "expedia.PropertyFiltersResponse": { "properties": { - "events": { + "destination": { + "type": "string" + }, + "region_id": { + "type": "string" + }, + "sections": { "items": { - "$ref": "#/definitions/fanduel.SportsbookPlayerPropEvent" + "$ref": "#/definitions/expedia.PropertyFilterSection" }, "type": "array" }, - "player": { - "type": "string" - }, - "slug": { - "type": "string" + "sort_options": { + "items": { + "$ref": "#/definitions/expedia.PropertyFilterOption" + }, + "type": "array" } }, "type": "object" }, - "fanduel.SportsbookPlayerPropsResponse": { + "expedia.PropertyListing": { "properties": { - "content_text": { - "type": "string" - }, - "events": { + "amenities": { "items": { - "$ref": "#/definitions/fanduel.SportsbookPlayerPropEvent" + "type": "string" }, "type": "array" }, - "fetched_at": { - "type": "string" + "badges": { + "items": { + "type": "string" + }, + "type": "array" }, - "league": { + "id": { "type": "string" }, "name": { "type": "string" }, - "player": { - "type": "string" - } - }, - "type": "object" - }, - "fanduel.SportsbookPlayerResponse": { - "properties": { - "fetched_at": { + "nightly_price": { "type": "string" }, - "game_log": {}, - "league": { + "price": { "type": "string" }, - "name": { - "type": "string" + "review_count": { + "type": "integer" }, - "news": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookTeamArticle" - }, - "type": "array" + "review_score": { + "type": "number" }, - "player": { + "review_title": { "type": "string" }, - "player_updates": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "strikeout_price": { + "type": "string" }, - "position": { + "thumbnail_url": { "type": "string" }, - "projections": {}, - "season": { - "additionalProperties": {}, - "type": "object" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "expedia.PropertyReview": { + "properties": { + "date": { + "type": "string" }, - "season_totals": {}, - "stats": { - "additionalProperties": {}, - "type": "object" + "message": { + "type": "string" }, - "team": { + "rating_label": { "type": "string" }, - "team_slug": { + "reviewer_name": { "type": "string" + }, + "verified": { + "type": "boolean" } }, "type": "object" }, - "fanduel.SportsbookPlayerStatsResponse": { + "expedia.PropertyReviewsOption": { "properties": { - "fetched_at": { - "type": "string" + "adults": { + "example": 2, + "type": "integer" }, - "league": { + "check_in": { + "example": "2026-08-04", "type": "string" }, - "name": { + "check_out": { + "example": "2026-08-05", "type": "string" }, - "player": { + "currency": { + "example": "USD", "type": "string" }, - "position": { + "locale": { + "example": "en_US", "type": "string" }, - "stats": { - "additionalProperties": {}, - "type": "object" + "property_id": { + "example": "111893452", + "type": "string" } }, + "required": [ + "check_in", + "check_out", + "property_id" + ], "type": "object" }, - "fanduel.SportsbookPlayersResponse": { + "expedia.PropertyReviewsResponse": { "properties": { - "fetched_at": { + "overall_rating": { "type": "string" }, - "league": { + "property_id": { "type": "string" }, - "limit": { - "type": "integer" - }, - "offset": { - "type": "integer" - }, - "players": { + "reviews": { "items": { - "$ref": "#/definitions/fanduel.SportsbookDirectoryPlayer" + "$ref": "#/definitions/expedia.PropertyReview" }, "type": "array" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "fanduel.SportsbookPriceRunner": { + "expedia.PropertySearchOption": { "properties": { - "american_odds": { + "adults": { + "example": 2, "type": "integer" }, - "decimal_odds": { - "type": "number" + "check_in": { + "example": "2026-08-04", + "type": "string" }, - "fractional_odds": { + "check_out": { + "example": "2026-08-05", "type": "string" }, - "handicap": { - "type": "number" + "currency": { + "example": "USD", + "type": "string" }, - "previous_american_odds": { - "description": "PreviousAmericanOdds and PreviousDecimalOdds are the price immediately\nbefore the current one, present once the price has moved.", - "type": "integer" + "destination": { + "example": "Miami", + "type": "string" }, - "previous_decimal_odds": { - "type": "number" + "locale": { + "example": "en_US", + "type": "string" }, - "selection_id": { + "page": { + "example": 1, "type": "integer" }, - "status": { - "type": "string" + "page_size": { + "example": 20, + "type": "integer" + }, + "rooms": { + "example": 1, + "type": "integer" } }, + "required": [ + "check_in", + "check_out", + "destination" + ], "type": "object" }, - "fanduel.SportsbookPromotion": { + "expedia.PropertySearchResponse": { "properties": { - "button_text": { - "type": "string" - }, - "button_url": { + "check_in": { "type": "string" }, - "ends_at": { + "check_out": { "type": "string" }, - "image_url": { + "destination": { "type": "string" }, - "name": { - "type": "string" + "page": { + "type": "integer" }, - "products": { + "properties": { "items": { - "type": "string" + "$ref": "#/definitions/expedia.PropertyListing" }, "type": "array" }, - "promo_code": { + "region_id": { "type": "string" }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "title": { + "results_label": { "type": "string" } }, "type": "object" }, - "fanduel.SportsbookPromotionsResponse": { + "expedia.expediaActivitySearchResponseDoc": { "properties": { - "context": { - "type": "string" - }, - "custom_page_id": { - "type": "string" - }, - "event_type_id": { + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "placements": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookPlacement" - }, - "type": "array" - }, - "promotions": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookPromotion" - }, - "type": "array" + "data": { + "$ref": "#/definitions/expedia.ActivitySearchResponse" }, - "state": { + "msg": { + "example": "OK", "type": "string" - }, - "tags": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookTagCount" - }, - "type": "array" } }, "type": "object" }, - "fanduel.SportsbookRosterPlayer": { + "expedia.expediaFlightsSearchResponseDoc": { "properties": { - "college": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "experience": { - "type": "string" + "data": { + "$ref": "#/definitions/expedia.FlightsSearchResponse" }, - "height": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "expedia.expediaLocationSearchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "injury_status": { - "type": "string" + "data": { + "$ref": "#/definitions/expedia.LocationSearchResponse" }, - "name": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "expedia.expediaPropertyDetailResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "number": { - "type": "string" + "data": { + "$ref": "#/definitions/expedia.PropertyDetailResponse" }, - "photo_url": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "expedia.expediaPropertyFiltersResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "position": { - "type": "string" + "data": { + "$ref": "#/definitions/expedia.PropertyFiltersResponse" }, - "slug": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "expedia.expediaPropertyReviewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "status": { - "type": "string" + "data": { + "$ref": "#/definitions/expedia.PropertyReviewsResponse" }, - "weight": { - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "fanduel.SportsbookRosterResponse": { + "expedia.expediaPropertySearchResponseDoc": { "properties": { - "fetched_at": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "injury_statuses": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookValueCount" - }, - "type": "array" + "data": { + "$ref": "#/definitions/expedia.PropertySearchResponse" }, - "league": { + "msg": { + "example": "OK", "type": "string" - }, - "players": { + } + }, + "type": "object" + }, + "expresstribune.AuthorResponse": { + "properties": { + "articles": { "items": { - "$ref": "#/definitions/fanduel.SportsbookRosterPlayer" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "positions": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookValueCount" - }, - "type": "array" + "has_next_page": { + "type": "boolean" }, - "statuses": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookValueCount" - }, - "type": "array" + "name": { + "type": "string" }, - "team": { + "page": { + "type": "integer" + }, + "url": { "type": "string" } }, "type": "object" }, - "fanduel.SportsbookRunner": { + "extract.Option": { "properties": { - "abbreviation": { + "instructions": { + "example": "Extract the product name and current price.", "type": "string" }, - "american_odds": { - "type": "integer" - }, - "decimal_odds": { - "type": "number" - }, - "fractional_odds": { + "render": { + "enum": [ + "auto", + "http", + "browser" + ], + "example": "auto", "type": "string" }, - "handicap": { - "type": "number" - }, - "is_player": { - "type": "boolean" + "schema": { + "additionalProperties": {}, + "type": "object" }, - "jersey_number": { + "url": { + "example": "https://example.com/product", + "type": "string" + } + }, + "required": [ + "schema", + "url" + ], + "type": "object" + }, + "extract.Result": { + "properties": { + "data": {}, + "final_url": { "type": "string" }, - "logo_url": { + "model": { "type": "string" }, - "name": { + "truncated": { + "description": "Truncated is true when the page was longer than the extraction input\nlimit, so only its first part was considered.", + "example": false, + "type": "boolean" + }, + "url": { "type": "string" }, - "previous_american_odds": { - "description": "PreviousAmericanOdds and PreviousDecimalOdds are the price immediately\nbefore the current one, present once the price has moved. The Sportsbook\nkeeps a single previous price, not a series.", + "usage": { + "$ref": "#/definitions/extract.Usage" + } + }, + "type": "object" + }, + "extract.Usage": { + "properties": { + "input_tokens": { "type": "integer" }, - "previous_decimal_odds": { - "type": "number" + "output_tokens": { + "type": "integer" }, - "selection_id": { + "total_tokens": { + "type": "integer" + } + }, + "type": "object" + }, + "extract.responseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "side": { - "type": "string" + "data": { + "$ref": "#/definitions/extract.Result" }, - "status": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookScheduleGame": { + "facebook.MarketplaceListing": { "properties": { - "bye_week": { - "type": "boolean" - }, - "cancelled": { - "type": "boolean" + "city": { + "example": "Austin", + "type": "string" }, - "date": { + "id": { + "example": "1548909030206114", "type": "string" }, - "location": { + "image": { + "example": "https://scontent.fsgn12-1.fna.fbcdn.net/v/t39.84726-6/763156366_1318061980540811_5053765390157515593_n.jpg", "type": "string" }, - "opponent": { - "$ref": "#/definitions/fanduel.SportsbookTeamRef" + "price": { + "$ref": "#/definitions/facebook.MarketplacePrice" }, - "opponent_record": { + "state": { + "example": "TX", "type": "string" }, - "opponent_score": { - "type": "integer" + "title": { + "example": "Electric bike", + "type": "string" }, - "postponed": { - "type": "boolean" + "url": { + "example": "https://www.facebook.com/marketplace/item/1548909030206114/", + "type": "string" + } + }, + "type": "object" + }, + "facebook.MarketplacePrice": { + "properties": { + "amount": { + "example": "4500.00", + "type": "string" }, - "team_score": { - "type": "integer" + "currency": { + "example": "USD", + "type": "string" }, - "venue": { + "formatted": { + "description": "Formatted is Facebook's own display string, e.g. \"$4,500\" or \"FREE\".", + "example": "$4,500", "type": "string" }, - "week": { - "type": "integer" + "isFree": { + "description": "IsFree is true when the listing has no price (Formatted == \"FREE\").", + "example": false, + "type": "boolean" } }, "type": "object" }, - "fanduel.SportsbookScheduleGroup": { + "facebook.MarketplaceSearchResult": { "properties": { - "games": { + "category": { + "example": "vehicles", + "type": "string" + }, + "hasMore": { + "example": true, + "type": "boolean" + }, + "listings": { "items": { - "$ref": "#/definitions/fanduel.SportsbookLeagueGame" + "$ref": "#/definitions/facebook.MarketplaceListing" }, "type": "array" }, - "season_type": { + "location": { + "example": "austin", "type": "string" }, - "title": { + "query": { + "example": "bike", + "type": "string" + }, + "sourceUrl": { + "example": "https://www.facebook.com/marketplace/austin/search/?query=bike", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookScheduleResponse": { + "facebook.Page": { "properties": { - "fetched_at": { + "address": { + "example": "9985 Arthur Hills CT, Sacramento, CA, United States, California", "type": "string" }, - "league": { + "category": { + "example": "Marketing Agency", "type": "string" }, - "next_game": { - "$ref": "#/definitions/fanduel.SportsbookGameSummary" + "company": { + "example": "Seo Marketing Wiz", + "type": "string" }, - "previous_game": { - "$ref": "#/definitions/fanduel.SportsbookGameSummary" + "email": { + "example": "contact@seomarketingwiz.com", + "type": "string" }, - "seasons": { + "emails": { + "description": "Fields populated by the Go-native browser-rendered extractor (parse.go).", + "example": [ + "[\"contact@seomarketingwiz.com\"]" + ], "items": { - "$ref": "#/definitions/fanduel.SportsbookScheduleSeason" + "type": "string" }, "type": "array" }, - "team": { + "hours": { + "description": "Hours is the About panel's business-hours summary text (e.g. \"Open now\",\n\"Closes at 9 PM\", \"Opening soon\"), when the Page publishes one. Not a\nstructured weekly schedule.", + "example": "Open now", "type": "string" - } - }, - "type": "object" - }, - "fanduel.SportsbookScheduleSeason": { - "properties": { - "games": { + }, + "intro": { + "example": "Marketing professionals with 20 years of experience wanting to provide digital marketing services to", + "type": "string" + }, + "latestPostAt": { + "example": "2020-11-26T00:00:00.000Z", + "type": "string" + }, + "og": { + "properties": { + "description": { + "example": "SEO Marketing Wiz, Sacramento, California. 521 likes. Marketing professionals with 20 years of experience wanting to provide digital marketing services to", + "type": "string" + }, + "image": { + "example": "https://scontent-dfw5-2.xx.fbcdn.net/v/t39.30808-1/279690292_375554114584870_8657447943866659854_n.png?cstp=mx200x200&ctp=s200x200&_nc_cat=100&ccb=1-7&_nc_sid=3ab345&_nc_ohc=cJ5c41eGYbkQ7kNvwFpyUu7&_nc_oc=AdmE_uznxjhjbFVzL_VatcILSjMcv56Yft-_-icARncJRyR5i3CLrlh-9ZnkTHvyQWg&_nc_zt=24&_nc_ht=scontent-dfw5-2.xx&_nc_gid=JfTmimRDWsc3S1tfuZSW1A&oh=00_AfIjr4QtVdPoXb42NKwayq1Ud-aqW3G8YNoQ8Q9d2eDFEQ&oe=6827F32E", + "type": "string" + }, + "title": { + "example": "SEO Marketing Wiz | Sacramento CA", + "type": "string" + } + }, + "type": "object" + }, + "pageId": { + "description": "PageID is Facebook's stable numeric Page identifier -- unlike the vanity\nname/handle, it never changes even if the Page is renamed.", + "example": "100063763354867", + "type": "string" + }, + "phones": { + "example": [ + "[\"+1 555 123 4567\"]" + ], "items": { - "$ref": "#/definitions/fanduel.SportsbookScheduleGame" + "type": "string" }, "type": "array" }, - "season_type": { + "priceRange": { + "description": "PriceRange is the About panel's price-tier text (e.g. \"Price range · $$\"),\nwhen the Page publishes one.", + "example": "Price range · $$", "type": "string" }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "fanduel.SportsbookScheduleWeek": { - "properties": { - "current_week": { - "type": "boolean" + "reviewCount": { + "example": 0, + "type": "integer" }, - "end_date": { + "sourceUrl": { + "example": "https://www.facebook.com/nike/about", "type": "string" }, - "id": { + "stats": { + "properties": { + "followers": { + "example": 526, + "type": "integer" + }, + "likes": { + "example": 521, + "type": "integer" + } + }, + "type": "object" + }, + "talking": { + "example": 12, "type": "integer" }, - "label": { + "title": { + "example": "SEO Marketing Wiz", "type": "string" }, - "season_type": { + "website": { + "example": "http://www.seomarketingwiz.com/", "type": "string" }, - "start_date": { + "wereHere": { + "example": 3, + "type": "integer" + }, + "whatsapp": { + "description": "WhatsApp is the Page's configured WhatsApp Business \"Message us\" number,\nwhen set up. See ParsePage's field_type extraction.", + "example": "+1 800-242-8478", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookScore": { + "facebook.marketplaceSearchResponseDoc": { "properties": { - "away": { + "code": { + "example": 200, "type": "integer" }, - "clock": { - "type": "string" - }, - "home": { - "type": "integer" + "data": { + "$ref": "#/definitions/facebook.MarketplaceSearchResult" }, - "period_scores": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookPeriodScore" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "fanduel.SportsbookSearchAncestor": { + "facebook.pageResponseDoc": { "properties": { - "id": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "name": { + "data": { + "$ref": "#/definitions/facebook.Page" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookSearchCompetition": { + "faceit.Ban": { "properties": { - "competition_id": { - "type": "integer" + "avatar": { + "type": "string" }, - "event_type_id": { + "country": { + "example": "pl", + "type": "string" + }, + "duration_in_millis": { + "example": 2592000000, "type": "integer" }, - "event_type_name": { + "ends_at": { + "example": "2026-12-09T10:31:00Z", "type": "string" }, - "match_count": { - "type": "integer" + "id": { + "example": "6af1a0f50e490c15f7d4b702", + "type": "string" }, - "name": { + "nickname": { + "example": "Sveg_3", + "type": "string" + }, + "reason": { + "example": "toxicity", + "type": "string" + }, + "starts_at": { + "example": "2026-11-09T10:31:00Z", + "type": "string" + }, + "user_id": { + "example": "f7c7415f-8d32-463e-8aa4-25a6de2c9c02", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookSearchEvent": { + "faceit.BanReasonsResponse": { "properties": { - "competition_id": { - "type": "integer" - }, - "competition_name": { - "type": "string" - }, - "event_id": { - "type": "integer" - }, - "event_type_id": { + "count": { + "example": 2, "type": "integer" }, - "event_type_name": { + "fetched_at": { + "example": "2026-11-09T11:30:00Z", "type": "string" }, - "in_play": { - "type": "boolean" + "reasons": { + "example": [ + "toxicity" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "name": { + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" }, - "open_date": { + "verified_at": { + "example": "2026-11-09", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookSearchHit": { + "faceit.BanlistResponse": { "properties": { - "ancestry": { + "bans": { "items": { - "$ref": "#/definitions/fanduel.SportsbookSearchAncestor" + "$ref": "#/definitions/faceit.Ban" }, "type": "array" }, - "competition": { - "type": "string" - }, - "competition_id": { - "type": "string" - }, - "event_category": { - "type": "integer" - }, - "exchange_id": { + "count": { + "example": 2, "type": "integer" }, - "result_id": { - "type": "string" - }, - "sport": { - "type": "string" - }, - "sport_id": { - "type": "string" - }, - "start_date": { + "cursor": { "type": "string" }, - "subtype": { + "fetched_at": { + "example": "2026-11-09T11:30:00Z", "type": "string" }, - "title": { - "type": "string" + "size": { + "example": 25, + "type": "integer" }, - "type": { + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookSearchPill": { + "faceit.BanlistStatsResponse": { "properties": { - "id": { + "count": { + "example": 2, "type": "integer" }, - "title": { + "fetched_at": { + "example": "2026-11-09T11:30:00Z", + "type": "string" + }, + "last_12_months": { + "example": 283717, + "type": "integer" + }, + "last_30_days": { + "example": 27701, + "type": "integer" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookSearchResponse": { + "faceit.BestClipsResponse": { "properties": { - "competitions": { + "clips": { "items": { - "$ref": "#/definitions/fanduel.SportsbookSearchCompetition" + "$ref": "#/definitions/faceit.Clip" }, "type": "array" }, - "events": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookSearchEvent" - }, - "type": "array" + "count": { + "example": 2, + "type": "integer" }, "fetched_at": { + "example": "2026-11-09T11:30:00Z", "type": "string" }, - "query": { + "from": { + "example": "2026-01-01T00:00:00Z", "type": "string" }, - "state": { + "game": { + "example": "cs2", "type": "string" }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "fanduel.SportsbookSearchTab": { - "properties": { - "id": { + "limit": { + "example": 10, + "type": "integer" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" }, - "title": { + "to": { + "example": "2026-11-10T00:00:00Z", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookSearchTabsResponse": { + "faceit.Championship": { "properties": { - "fetched_at": { - "type": "string" + "ac_required": { + "type": "boolean" }, - "found": { + "admin_tool_enabled": { + "type": "boolean" + }, + "archived": { + "type": "boolean" + }, + "calculate_elo": { + "type": "boolean" + }, + "championship_start": { "type": "integer" }, - "next_start_index": { + "checkin_clear": { "type": "integer" }, - "page_size": { + "checkin_enabled": { + "type": "boolean" + }, + "checkin_start": { "type": "integer" }, - "pill": { + "current_subscriptions": { + "type": "integer" + }, + "featured": { + "type": "boolean" + }, + "full": { + "type": "boolean" + }, + "game": { "type": "string" }, - "pills": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookSearchPill" + "group_seeding_strategy": { + "type": "string" + }, + "groups": { + "additionalProperties": { + "$ref": "#/definitions/faceit.ChampionshipGroup" }, - "type": "array" + "type": "object" }, - "query": { + "id": { "type": "string" }, - "results": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookSearchHit" + "join_checks": { + "$ref": "#/definitions/faceit.ChampionshipJoinChecks" + }, + "leaderboard_points": { + "additionalProperties": { + "type": "integer" }, - "type": "array" + "type": "object" }, - "start_index": { - "type": "integer" + "match_configuration": { + "$ref": "#/definitions/faceit.ChampionshipMatchConfiguration" }, - "state": { + "name": { "type": "string" }, - "tab": { + "organizer": { + "$ref": "#/definitions/faceit.ChampionshipOrganizer" + }, + "organizer_id": { "type": "string" }, - "tabs": { + "participants": { + "$ref": "#/definitions/faceit.ChampionshipParticipants" + }, + "published": { + "type": "boolean" + }, + "ranking_type": { + "type": "string" + }, + "region": { + "type": "string" + }, + "roles": { "items": { - "$ref": "#/definitions/fanduel.SportsbookSearchTab" + "$ref": "#/definitions/faceit.ChampionshipRole" }, "type": "array" }, - "total_results": { + "round_seeding_strategy": { + "type": "string" + }, + "schedule": { + "additionalProperties": { + "$ref": "#/definitions/faceit.ChampionshipSchedule" + }, + "type": "object" + }, + "slots": { + "type": "integer" + }, + "status": { + "type": "string" + }, + "subscription_end": { + "type": "integer" + }, + "subscription_start": { + "type": "integer" + }, + "subscriptions_locked": { + "type": "boolean" + }, + "substitution": { + "$ref": "#/definitions/faceit.ChampionshipSubstitution" + }, + "total_groups": { + "type": "integer" + }, + "total_rounds": { "type": "integer" + }, + "type": { + "type": "string" } }, "type": "object" }, - "fanduel.SportsbookSplit": { + "faceit.ChampionshipBracketGroup": { "properties": { - "name": { + "championship_id": { "type": "string" }, - "percent": { + "delimiter": { "type": "integer" }, - "selection_id": { + "group": { + "type": "integer" + }, + "matches": { + "items": { + "$ref": "#/definitions/faceit.ChampionshipBracketMatch" + }, + "type": "array" + }, + "number": { "type": "integer" + }, + "status": { + "type": "string" } }, "type": "object" }, - "fanduel.SportsbookSport": { + "faceit.ChampionshipBracketMatch": { "properties": { - "event_type_id": { + "bracket_placement": { "type": "integer" }, - "name": { + "factions": { + "items": { + "$ref": "#/definitions/faceit.ChampionshipFaction" + }, + "type": "array" + }, + "status": { "type": "string" + }, + "total_factions": { + "type": "integer" } }, "type": "object" }, - "fanduel.SportsbookSportsResponse": { + "faceit.ChampionshipBracketResponse": { "properties": { + "count": { + "example": 2, + "type": "integer" + }, + "end": { + "example": 1, + "type": "integer" + }, "fetched_at": { + "example": "2026-11-09T11:30:00Z", "type": "string" }, - "popular_links": { + "items": { "items": { - "$ref": "#/definitions/fanduel.SportsbookNavLink" + "$ref": "#/definitions/faceit.ChampionshipBracketGroup" }, "type": "array" }, - "quick_links": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookNavLink" - }, - "type": "array" + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", + "type": "string" }, - "sports": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookSport" - }, - "type": "array" + "start": { + "example": 0, + "type": "integer" }, - "state": { + "total": { + "example": 1, + "type": "integer" + } + }, + "type": "object" + }, + "faceit.ChampionshipFaction": { + "properties": { + "id": { "type": "string" }, - "states": { + "number": { + "type": "integer" + } + }, + "type": "object" + }, + "faceit.ChampionshipGroup": { + "properties": { + "capacity": { + "type": "integer" + } + }, + "type": "object" + }, + "faceit.ChampionshipJoinChecks": { + "properties": { + "allowed_team_types": { + "example": [ + "user" + ], "items": { - "$ref": "#/definitions/fanduel.SportsbookState" + "type": "string" }, "type": "array" }, - "teaser_competitions": { + "blacklist_geo_countries": { "items": { - "$ref": "#/definitions/fanduel.SportsbookTeaserCompetition" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "fanduel.SportsbookStandingsResponse": { - "properties": { - "fetched_at": { - "type": "string" }, - "league": { + "join_policy": { + "example": "public", "type": "string" }, - "team_count": { + "max_skill_level": { + "example": 10, "type": "integer" }, - "teams": { + "min_skill_level": { + "example": 1, + "type": "integer" + }, + "whitelist_geo_countries": { "items": { - "$ref": "#/definitions/fanduel.SportsbookStandingsTeam" + "type": "string" }, "type": "array" } }, "type": "object" }, - "fanduel.SportsbookStandingsTeam": { + "faceit.ChampionshipMatchConfiguration": { "properties": { - "code": { + "best_of": { + "type": "integer" + }, + "elo_type": { "type": "string" }, - "conference": { + "game": { "type": "string" }, - "division": { + "game_type": { "type": "string" }, - "logo_url": { + "id": { "type": "string" }, - "name": { + "label_en": { "type": "string" }, - "short_name": { + "max_players": { + "type": "integer" + }, + "name": { "type": "string" }, - "slug": { + "region": { "type": "string" }, - "standing": { - "additionalProperties": {}, - "type": "object" + "team_size": { + "type": "integer" } }, "type": "object" }, - "fanduel.SportsbookState": { + "faceit.ChampionshipMember": { "properties": { - "code": { + "championship": { + "$ref": "#/definitions/faceit.ChampionshipMemberEvent" + }, + "championship_status": { "type": "string" }, - "name": { + "id": { "type": "string" + }, + "roles": { + "items": { + "type": "string" + }, + "type": "array" + }, + "user": { + "$ref": "#/definitions/faceit.ChampionshipMemberUser" } }, "type": "object" }, - "fanduel.SportsbookStatsListResponse": { + "faceit.ChampionshipMemberEvent": { "properties": { - "events": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookEventStats" - }, - "type": "array" + "game": { + "type": "string" }, - "fetched_at": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "organizer_id": { "type": "string" } }, "type": "object" }, - "fanduel.SportsbookStatsTeam": { + "faceit.ChampionshipMemberUser": { "properties": { - "name": { + "avatar_url": { "type": "string" }, - "primary_color": { + "country": { "type": "string" }, - "secondary_color": { - "type": "string" + "games": { + "items": { + "type": "string" + }, + "type": "array" }, - "selection_id": { - "type": "integer" + "id": { + "type": "string" }, - "side": { + "nickname": { "type": "string" } }, "type": "object" }, - "fanduel.SportsbookSuggestion": { + "faceit.ChampionshipOrganizer": { "properties": { - "highlighted": { - "type": "string" + "features": { + "items": { + "type": "string" + }, + "type": "array" }, - "text": { + "name": { + "example": "Extreme Competitions", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookTab": { + "faceit.ChampionshipParticipants": { "properties": { - "event_count": { + "total": { "type": "integer" }, - "id": { + "with_reserved_slot": { + "type": "integer" + } + }, + "type": "object" + }, + "faceit.ChampionshipParticipantsResponse": { + "properties": { + "count": { + "example": 2, + "type": "integer" + }, + "end": { + "example": 20, + "type": "integer" + }, + "fetched_at": { + "example": "2026-11-09T11:30:00Z", "type": "string" }, - "live_count": { + "items": { + "items": { + "$ref": "#/definitions/faceit.ChampionshipMember" + }, + "type": "array" + }, + "limit": { + "example": 20, "type": "integer" }, - "market_count": { + "offset": { + "example": 0, "type": "integer" }, - "slug": { + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" }, - "title": { - "type": "string" + "start": { + "example": 0, + "type": "integer" } }, "type": "object" }, - "fanduel.SportsbookTagCount": { + "faceit.ChampionshipResponse": { "properties": { + "championship": { + "$ref": "#/definitions/faceit.Championship" + }, "count": { + "example": 2, "type": "integer" }, - "tag": { + "fetched_at": { + "example": "2026-11-09T11:30:00Z", + "type": "string" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookTeam": { + "faceit.ChampionshipRole": { "properties": { - "abbreviation": { - "type": "string" - }, - "color": { - "type": "string" - }, - "conference": { - "type": "string" - }, - "logo_url": { + "id": { "type": "string" }, "name": { "type": "string" - }, - "short_name": { - "type": "string" } }, "type": "object" }, - "fanduel.SportsbookTeamArticle": { + "faceit.ChampionshipSchedule": { "properties": { - "author": { - "type": "string" + "date": { + "type": "integer" }, - "id": { + "status": { "type": "string" }, - "published_at": { + "type": { "type": "string" + } + }, + "type": "object" + }, + "faceit.ChampionshipSearchResponse": { + "properties": { + "count": { + "example": 2, + "type": "integer" }, - "source": { + "fetched_at": { + "example": "2026-11-09T11:30:00Z", "type": "string" }, - "summary": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/faceit.Leaderboard" + }, + "type": "array" }, - "thumbnail_url": { - "type": "string" + "limit": { + "example": 20, + "type": "integer" }, - "title": { - "type": "string" + "offset": { + "example": 0, + "type": "integer" }, - "url": { + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookTeamGameOdds": { + "faceit.ChampionshipSubstitution": { "properties": { - "money_line": { - "$ref": "#/definitions/fanduel.SportsbookGameLine" + "max_substitutes": { + "type": "integer" }, - "spread": { - "$ref": "#/definitions/fanduel.SportsbookGameLine" + "max_substitutions": { + "type": "integer" }, - "total": { - "$ref": "#/definitions/fanduel.SportsbookGameLine" + "substitution_time": { + "type": "integer" + }, + "substitutions_per_round_enabled": { + "type": "boolean" } }, "type": "object" }, - "fanduel.SportsbookTeamGameRef": { + "faceit.Clip": { "properties": { - "event_url": { + "created_at": { + "example": "2026-07-15T19:57:51.637Z", "type": "string" }, - "home_game": { - "type": "boolean" + "demo": { + "example": "1-bef84e57-4ce3-41aa-b5e5-2918228c1c28-1-1.dem.zst", + "type": "string" }, - "opponent": { + "faceit_round": { + "example": 1, + "type": "integer" + }, + "id": { + "example": "6a57e63f8d9a5a0549f503c8", "type": "string" }, - "scheduled_time": { + "map": { + "example": "Dust 2", "type": "string" }, + "match_id": { + "example": "1-bef84e57-4ce3-41aa-b5e5-2918228c1c28", + "type": "string" + }, + "match_instance_id": { + "example": "1-bef84e57-4ce3-41aa-b5e5-2918228c1c28-1-1", + "type": "string" + }, + "reason": { + "example": "premium", + "type": "string" + }, + "round": { + "example": 15, + "type": "integer" + }, "status": { + "example": "CLIP_STATUS_PROCESSED", + "type": "string" + }, + "thumbnail_url": { + "type": "string" + }, + "title": { + "example": "Dust 2 AK-47 1V5 Clutch", + "type": "string" + }, + "updated_at": { + "example": "2026-07-15T20:00:48.827Z", + "type": "string" + }, + "url": { + "type": "string" + }, + "user_id": { + "example": "74df0e6b-5b41-42d7-93b4-05dc78b9a699", + "type": "string" + }, + "views": { + "example": "893", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookTeamGroup": { + "faceit.ClipResponse": { "properties": { - "teams": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookTeamSummary" - }, - "type": "array" + "clip": { + "$ref": "#/definitions/faceit.Clip" }, - "title": { + "count": { + "example": 2, + "type": "integer" + }, + "fetched_at": { + "example": "2026-11-09T11:30:00Z", + "type": "string" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookTeamNewsResponse": { + "faceit.ClipsResponse": { "properties": { - "articles": { + "clips": { "items": { - "$ref": "#/definitions/fanduel.SportsbookTeamArticle" + "$ref": "#/definitions/faceit.Clip" }, "type": "array" }, + "count": { + "example": 2, + "type": "integer" + }, "fetched_at": { + "example": "2026-11-09T11:30:00Z", "type": "string" }, "has_more": { + "example": true, "type": "boolean" }, - "league": { + "limit": { + "example": 10, + "type": "integer" + }, + "offset": { + "example": 0, + "type": "integer" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" + } + }, + "type": "object" + }, + "faceit.CompetitionMatchesResponse": { + "properties": { + "count": { + "example": 2, + "type": "integer" }, - "next_cursor": { + "fetched_at": { + "example": "2026-11-09T11:30:00Z", "type": "string" }, - "player_updates": { - "items": { - "additionalProperties": {}, - "type": "object" - }, + "matches": { + "items": {}, "type": "array" }, - "team": { + "page": { + "example": 0, + "type": "integer" + }, + "size": { + "example": 20, + "type": "integer" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookTeamOddsResponse": { + "faceit.FPLCircuit": { "properties": { - "championship": { + "default": { + "example": false, + "type": "boolean" + }, + "game": { + "example": "cs2", "type": "string" }, - "championship_tab": { + "id": { + "example": "67444abee4404b6b2c55f15e", "type": "string" }, - "fetched_at": { + "name": { + "example": "FPL Middle East", "type": "string" }, - "future_odds": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookFutureOdd" - }, - "type": "array" + "ranking_source": { + "$ref": "#/definitions/faceit.FPLRankingSource" }, - "league": { + "region": { + "example": "EU", "type": "string" }, - "next_games": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookUpcomingGame" - }, - "type": "array" - }, - "player_props": { + "seasons": { "items": { - "$ref": "#/definitions/fanduel.SportsbookPlayerProps" + "$ref": "#/definitions/faceit.FPLSeason" }, "type": "array" - }, - "team": { - "$ref": "#/definitions/fanduel.SportsbookTeamRef" } }, "type": "object" }, - "fanduel.SportsbookTeamRef": { + "faceit.FPLRankingSource": { "properties": { - "code": { + "source": { + "example": "fpl", "type": "string" + } + }, + "type": "object" + }, + "faceit.FPLResponse": { + "properties": { + "circuits": { + "items": { + "$ref": "#/definitions/faceit.FPLCircuit" + }, + "type": "array" }, - "logo_url": { - "type": "string" + "count": { + "example": 2, + "type": "integer" }, - "name": { + "fetched_at": { + "example": "2026-11-09T11:30:00Z", "type": "string" }, - "short_name": { - "type": "string" + "has_more": { + "example": false, + "type": "boolean" }, - "slug": { + "limit": { + "example": 20, + "type": "integer" + }, + "offset": { + "example": 0, + "type": "integer" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookTeamStatsResponse": { + "faceit.FPLSeason": { "properties": { - "fetched_at": { - "type": "string" - }, - "league": { + "ended_at": { "type": "string" }, - "stats": { - "additionalProperties": {}, - "type": "object" + "number": { + "example": 7, + "type": "integer" }, - "team": { + "started_at": { + "example": "2025-12-12T16:51:35.196Z", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookTeamSummary": { + "faceit.Game": { "properties": { - "bet_records": { - "$ref": "#/definitions/fanduel.SportsbookBetRecords" + "clips": { + "example": true, + "type": "boolean" }, - "code": { - "type": "string" + "leaderboard_verified": { + "example": true, + "type": "boolean" }, - "conference": { + "map_configuration": { + "example": true, + "type": "boolean" + }, + "slug": { + "example": "cs2", + "type": "string" + } + }, + "type": "object" + }, + "faceit.GameMap": { + "properties": { + "class_name": { + "example": "de_dust2", "type": "string" }, - "division": { + "game_map_id": { + "example": "de_dust2", "type": "string" }, - "head_coach": { + "guid": { + "example": "de_dust2", "type": "string" }, - "logo_url": { + "image_lg": { "type": "string" }, - "market": { + "image_sm": { "type": "string" }, "name": { + "example": "Dust2", "type": "string" - }, - "next_game": { - "$ref": "#/definitions/fanduel.SportsbookTeamGameRef" - }, - "primary_color": { + } + }, + "type": "object" + }, + "faceit.GameMode": { + "properties": { + "group_id": { + "example": "ad8f1821-bfbf-42c4-b351-6fbde91dba46", "type": "string" }, - "secondary_color": { + "id": { + "example": "8bf954ec-30ce-4483-8694-7a2d305f9071", "type": "string" }, - "short_name": { - "type": "string" + "label": { + "additionalProperties": { + "type": "string" + }, + "type": "object" }, - "slug": { - "type": "string" + "spectators": { + "example": false, + "type": "boolean" }, - "sub_division": { - "type": "string" + "team_size": { + "example": 2, + "type": "integer" } }, "type": "object" }, - "fanduel.SportsbookTeamsResponse": { + "faceit.GameModesResponse": { "properties": { + "count": { + "example": 2, + "type": "integer" + }, "fetched_at": { + "example": "2026-11-09T11:30:00Z", "type": "string" }, - "groups": { - "items": { - "$ref": "#/definitions/fanduel.SportsbookTeamGroup" - }, - "type": "array" - }, - "league": { + "game": { + "example": "cs2", "type": "string" }, - "sections": { + "modes": { "items": { - "type": "string" + "$ref": "#/definitions/faceit.GameMode" }, "type": "array" }, - "team_count": { - "type": "integer" + "region": { + "example": "EU", + "type": "string" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", + "type": "string" } }, "type": "object" }, - "fanduel.SportsbookTeaserCompetition": { + "faceit.GameSkill": { "properties": { - "competition_id": { + "latest_delta": { + "example": 31, "type": "integer" }, - "icon": { - "type": "string" + "level": { + "example": 10, + "type": "integer" }, - "name": { - "type": "string" + "ranked_match_count": { + "example": 5081, + "type": "integer" }, - "starting_spread": { - "type": "number" + "value": { + "example": 5342, + "type": "integer" + }, + "win_streak": { + "example": 1, + "type": "integer" } }, "type": "object" }, - "fanduel.SportsbookTrendingItem": { + "faceit.GamesResponse": { "properties": { - "competition": { - "type": "string" - }, - "display_name": { - "type": "string" + "complete": { + "example": false, + "type": "boolean" }, - "event_id": { + "count": { + "example": 2, "type": "integer" }, - "event_name": { - "type": "string" - }, - "expires_at": { + "fetched_at": { + "example": "2026-11-09T11:30:00Z", "type": "string" }, - "metadata": { - "additionalProperties": {}, - "type": "object" + "games": { + "items": { + "$ref": "#/definitions/faceit.Game" + }, + "type": "array" }, - "term": { + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" }, - "type": { + "verified_at": { + "example": "2026-11-09", "type": "string" } }, "type": "object" }, - "fanduel.SportsbookTrendingResponse": { + "faceit.Hub": { "properties": { - "enriched": { + "admin_tool_enabled": { "type": "boolean" }, - "fetched_at": { + "application_configuration": { + "$ref": "#/definitions/faceit.HubApplicationSettings" + }, + "archived": { + "type": "boolean" + }, + "avatar": { "type": "string" }, - "results": { + "category": { + "type": "string" + }, + "chat_settings": { + "$ref": "#/definitions/faceit.HubChatSettings" + }, + "check_game": { + "type": "boolean" + }, + "check_geo_location": { + "type": "boolean" + }, + "check_region": { + "type": "boolean" + }, + "child_ids": { "items": { - "$ref": "#/definitions/fanduel.SportsbookTrendingItem" + "type": "string" }, "type": "array" }, - "terms": { + "children": { "items": { - "type": "string" + "$ref": "#/definitions/faceit.HubChild" }, "type": "array" - } - }, - "type": "object" - }, - "fanduel.SportsbookUpcomingGame": { - "properties": { - "away_odds": { - "$ref": "#/definitions/fanduel.SportsbookTeamGameOdds" }, - "event_url": { - "type": "string" + "clash_slots_available": { + "type": "boolean" }, - "home_game": { + "club": { "type": "boolean" }, - "home_odds": { - "$ref": "#/definitions/fanduel.SportsbookTeamGameOdds" + "cover_image": { + "type": "string" }, - "opponent": { + "created_at": { "type": "string" }, - "opponent_team": { - "$ref": "#/definitions/fanduel.SportsbookTeamRef" + "current_players_joined": { + "type": "integer" }, - "scheduled_time": { + "custom_prizes_count": { + "type": "integer" + }, + "description": { "type": "string" }, - "status": { + "faceit_points_equivalent_total": { + "type": "integer" + }, + "faceit_points_total": { + "type": "integer" + }, + "featured": { + "type": "boolean" + }, + "game": { "type": "string" }, - "venue": { + "guid": { "type": "string" }, - "venue_type": { + "join_permissions": { "type": "string" }, - "week": { + "max_skill_level": { "type": "integer" - } - }, - "type": "object" - }, - "fanduel.SportsbookValueCount": { - "properties": { - "count": { + }, + "min_skill_level": { "type": "integer" }, - "value": { + "name": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.SportsbookWinLoss": { - "properties": { - "losses": { - "type": "integer" }, - "ties": { - "type": "integer" + "organizer_guid": { + "type": "string" }, - "wins": { - "type": "integer" - } - }, - "type": "object" - }, - "fanduel.casinoCategoriesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "organizer_name": { + "type": "string" }, - "data": { - "$ref": "#/definitions/fanduel.CasinoCategoriesResponse" + "published": { + "type": "boolean" }, - "msg": { - "example": "OK", + "region": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.casinoCategoryResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.CasinoCategoryResponse" + "relationship_type": { + "type": "string" }, - "msg": { - "example": "OK", + "roles": { + "items": { + "$ref": "#/definitions/faceit.HubRole" + }, + "type": "array" + }, + "rules_guid": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.casinoGameResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.CasinoGameResponse" + "selection_settings": { + "$ref": "#/definitions/faceit.HubSelectionSettings" }, - "msg": { - "example": "OK", + "sensitive": { + "type": "boolean" + }, + "slots": { + "type": "integer" + }, + "supporter_badge_image": { "type": "string" } }, "type": "object" }, - "fanduel.quickPicksDailyResponseDoc": { + "faceit.HubApplicationSettings": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/fanduel.QuickPicksDailyResponse" + "applicant_input_required": { + "type": "boolean" }, - "msg": { - "example": "OK", - "type": "string" + "applications_enabled": { + "type": "boolean" } }, "type": "object" }, - "fanduel.racingCarryoverResponseDoc": { + "faceit.HubCategoriesResponse": { "properties": { - "code": { - "example": 200, + "categories": { + "example": [ + "community" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "count": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.RacingCarryoverResponse" + "fetched_at": { + "example": "2026-11-09T11:30:00Z", + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", + "type": "string" + }, + "verified_at": { + "example": "2026-11-09", "type": "string" } }, "type": "object" }, - "fanduel.racingFiltersResponseDoc": { + "faceit.HubChatSettings": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/fanduel.RacingFiltersResponse" + "join_announcements": { + "type": "boolean" }, - "msg": { - "example": "OK", + "subscription_announcements": { "type": "string" } }, "type": "object" }, - "fanduel.racingHorseResponseDoc": { + "faceit.HubChild": { "properties": { - "code": { - "example": 200, + "category": { + "type": "string" + }, + "current_players_joined": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.RacingHorseResponse" + "game": { + "type": "string" }, - "msg": { - "example": "OK", + "guid": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.racingPastRaceResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.RacingPastRaceResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "parent_id": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.racingPastRacesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.RacingPastRacesResponse" + "published": { + "type": "boolean" }, - "msg": { - "example": "OK", + "region": { + "type": "string" + }, + "relationship_type": { "type": "string" } }, "type": "object" }, - "fanduel.racingPastTracksResponseDoc": { + "faceit.HubCompetition": { "properties": { - "code": { - "example": 200, - "type": "integer" + "announcement": { + "type": "string" }, - "data": { - "$ref": "#/definitions/fanduel.RacingPastTracksResponse" + "avatar": { + "type": "string" }, - "msg": { - "example": "OK", + "category": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.racingRaceResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "child_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "current_players_joined": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.RacingRaceResponse" + "custom_prizes_count": { + "type": "integer" }, - "msg": { - "example": "OK", + "game": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.racingRacesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.RacingRacesResponse" + "guid": { + "type": "string" }, - "msg": { - "example": "OK", + "join_permissions": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.racingResultsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "max_skill_level": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.RacingResultsResponse" + "min_skill_level": { + "type": "integer" }, - "msg": { - "example": "OK", + "name": { "type": "string" + }, + "organizer_name": { + "type": "string" + }, + "published": { + "type": "boolean" + }, + "whitelist_geo_countries": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "fanduel.racingSearchResponseDoc": { + "faceit.HubDetailed": { "properties": { - "code": { - "example": 200, - "type": "integer" + "admin_tool_enabled": { + "type": "boolean" }, - "data": { - "$ref": "#/definitions/fanduel.RacingSearchResponse" + "application_configuration": { + "$ref": "#/definitions/faceit.HubApplicationSettings" }, - "msg": { - "example": "OK", + "archived": { + "type": "boolean" + }, + "avatar": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.racingTrackResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.RacingTrackResponse" + "category": { + "type": "string" }, - "msg": { - "example": "OK", + "chat_settings": { + "$ref": "#/definitions/faceit.HubChatSettings" + }, + "check_game": { + "type": "boolean" + }, + "check_geo_location": { + "type": "boolean" + }, + "check_region": { + "type": "boolean" + }, + "child_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "clash_slots_available": { + "type": "boolean" + }, + "club": { + "type": "boolean" + }, + "cover_image": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.racingTracksResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "created_at": { + "type": "string" + }, + "current_players_joined": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.RacingTracksResponse" + "custom_prizes_count": { + "type": "integer" }, - "msg": { - "example": "OK", + "description": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.racingWagerTypesResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "faceit_points_equivalent_total": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.RacingWagerTypesResponse" + "faceit_points_total": { + "type": "integer" }, - "msg": { - "example": "OK", + "featured": { + "type": "boolean" + }, + "game": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.researchArticleResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.ResearchArticleResponse" + "guid": { + "type": "string" }, - "msg": { - "example": "OK", + "join_permissions": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.researchArticlesResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "max_skill_level": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.ResearchArticlesResponse" + "min_skill_level": { + "type": "integer" }, - "msg": { - "example": "OK", + "name": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.researchAuthorResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.ResearchAuthorResponse" + "organizer_guid": { + "type": "string" }, - "msg": { - "example": "OK", + "owner": { + "$ref": "#/definitions/faceit.HubOwner" + }, + "published": { + "type": "boolean" + }, + "region": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.researchAuthorsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.ResearchAuthorsResponse" + "relationship_type": { + "type": "string" }, - "msg": { - "example": "OK", + "roles": { + "items": { + "$ref": "#/definitions/faceit.HubRole" + }, + "type": "array" + }, + "rules_guid": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.researchFeaturedArticlesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.ResearchFeaturedArticlesResponse" + "selection_settings": { + "$ref": "#/definitions/faceit.HubSelectionSettings" }, - "msg": { - "example": "OK", + "sensitive": { + "type": "boolean" + }, + "slots": { + "type": "integer" + }, + "supporter_badge_image": { "type": "string" } }, "type": "object" }, - "fanduel.researchFixturesResponseDoc": { + "faceit.HubMemberUser": { "properties": { - "code": { - "example": 200, - "type": "integer" + "avatar_url": { + "type": "string" }, - "data": { - "$ref": "#/definitions/fanduel.ResearchFixturesResponse" + "guid": { + "type": "string" }, - "msg": { - "example": "OK", + "nickname": { "type": "string" } }, "type": "object" }, - "fanduel.researchNflScheduleResponseDoc": { + "faceit.HubMembership": { "properties": { - "code": { - "example": 200, - "type": "integer" + "competition": { + "$ref": "#/definitions/faceit.HubCompetition" }, - "data": { - "$ref": "#/definitions/fanduel.ResearchNflScheduleResponse" + "created_at": { + "type": "string" }, - "msg": { - "example": "OK", + "highest_role_ranking": { + "type": "integer" + }, + "membership_id": { "type": "string" + }, + "roles": { + "items": { + "type": "string" + }, + "type": "array" + }, + "user": { + "$ref": "#/definitions/faceit.HubMemberUser" } }, "type": "object" }, - "fanduel.researchPlayerNewsResponseDoc": { + "faceit.HubMembershipsResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.ResearchPlayerNewsResponse" + "end": { + "example": 20, + "type": "integer" }, - "msg": { - "example": "OK", + "fetched_at": { + "example": "2026-11-09T11:30:00Z", "type": "string" - } - }, - "type": "object" - }, - "fanduel.researchProjectionSlatesResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "items": { + "items": { + "$ref": "#/definitions/faceit.HubMembership" + }, + "type": "array" + }, + "limit": { + "example": 20, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.ResearchProjectionSlatesResponse" + "offset": { + "example": 0, + "type": "integer" }, - "msg": { - "example": "OK", + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" + }, + "start": { + "example": 0, + "type": "integer" } }, "type": "object" }, - "fanduel.researchProjectionTablesResponseDoc": { + "faceit.HubOwner": { "properties": { - "code": { - "example": 200, - "type": "integer" + "avatar_url": { + "type": "string" }, - "data": { - "$ref": "#/definitions/fanduel.ResearchProjectionTablesResponse" + "guid": { + "type": "string" }, - "msg": { - "example": "OK", + "nickname": { + "example": "Stark", "type": "string" } }, "type": "object" }, - "fanduel.researchProjectionsResponseDoc": { + "faceit.HubResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.ResearchProjectionsResponse" + "fetched_at": { + "example": "2026-11-09T11:30:00Z", + "type": "string" }, - "msg": { - "example": "OK", + "hub": { + "$ref": "#/definitions/faceit.Hub" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" } }, "type": "object" }, - "fanduel.researchResponseDoc": { + "faceit.HubRole": { "properties": { - "code": { - "example": 200, - "type": "integer" + "color": { + "type": "string" }, - "data": { - "$ref": "#/definitions/fanduel.ResearchResponse" + "guid": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.researchSportsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.ResearchSportsResponse" + "ranking": { + "type": "integer" }, - "msg": { - "example": "OK", + "type": { "type": "string" } }, "type": "object" }, - "fanduel.researchSubCategoriesResponseDoc": { + "faceit.HubSelectionSettings": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/fanduel.ResearchSubCategoriesResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "enabled": { + "type": "boolean" } }, "type": "object" }, - "fanduel.sportsbookAutocompleteResponseDoc": { + "faceit.HubSummary": { "properties": { - "code": { - "example": 200, + "avatar": { + "type": "string" + }, + "category": { + "type": "string" + }, + "child_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "club": { + "type": "boolean" + }, + "current_players_joined": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookAutocompleteResponse" + "game": { + "type": "string" }, - "msg": { - "example": "OK", + "guid": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.sportsbookBoxScoreResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookBoxScoreResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "organizer_guid": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.sportsbookBuilderEventsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "organizer_tier": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookBuilderEventsResponse" + "published": { + "type": "boolean" }, - "msg": { - "example": "OK", + "region": { + "type": "string" + }, + "relationship_type": { "type": "string" } }, "type": "object" }, - "fanduel.sportsbookBuilderResponseDoc": { + "faceit.HubsDetailedResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookBuilderResponse" + "fetched_at": { + "example": "2026-11-09T11:30:00Z", + "type": "string" }, - "msg": { - "example": "OK", + "items": { + "items": { + "$ref": "#/definitions/faceit.HubDetailed" + }, + "type": "array" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" } }, "type": "object" }, - "fanduel.sportsbookChoiceQuotesResponseDoc": { + "faceit.HubsResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookChoiceQuotesResponse" + "fetched_at": { + "example": "2026-11-09T11:30:00Z", + "type": "string" }, - "msg": { - "example": "OK", + "items": { + "items": { + "$ref": "#/definitions/faceit.HubSummary" + }, + "type": "array" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" } }, "type": "object" }, - "fanduel.sportsbookDepthChartResponseDoc": { + "faceit.Leaderboard": { "properties": { - "code": { - "example": 200, + "bracket_placement": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookDepthChartResponse" + "bye_team_result_action": { + "type": "string" }, - "msg": { - "example": "OK", + "conclusion_criteria": { "type": "string" - } - }, - "type": "object" - }, - "fanduel.sportsbookEventPlayersResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "country_restriction": { + "type": "string" + }, + "delimiter": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookEventPlayersResponse" + "drops_information": {}, + "end_date": { + "type": "string" }, - "msg": { - "example": "OK", + "entity_id": { + "type": "string" + }, + "entity_type": { + "type": "string" + }, + "ffa_points": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "game": { + "type": "string" + }, + "group": { + "type": "integer" + }, + "hidden": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "leaderboard_mode": { + "type": "string" + }, + "leaderboard_name": { + "type": "string" + }, + "leaderboard_type": { + "type": "string" + }, + "min_matches": { + "type": "integer" + }, + "organizer_id": { + "type": "string" + }, + "points_per_draw": { + "type": "integer" + }, + "points_per_loss": { + "type": "integer" + }, + "points_per_win": { + "type": "integer" + }, + "points_type": { + "type": "string" + }, + "prize_pool": {}, + "prizes": {}, + "ranking_type": { + "type": "string" + }, + "region": { + "type": "string" + }, + "round": { + "type": "integer" + }, + "rules": {}, + "schedule": { + "type": "string" + }, + "season": { + "type": "integer" + }, + "start_date": { + "type": "string" + }, + "starting_points": { + "type": "integer" + }, + "status": { + "type": "string" + }, + "technical_name": { "type": "string" } }, "type": "object" }, - "fanduel.sportsbookEventResponseDoc": { + "faceit.LeaderboardDetail": { "properties": { - "code": { - "example": 200, + "balanced_scoring": {}, + "bracket_placement": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookEventResponse" + "bye_team_result_action": { + "type": "string" }, - "msg": { - "example": "OK", + "conclusion_criteria": { + "type": "string" + }, + "country_restriction": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "delimiter": { + "type": "integer" + }, + "drops_information": {}, + "end_date": { + "type": "string" + }, + "entities": { + "items": { + "$ref": "#/definitions/faceit.LeaderboardEntityRef" + }, + "type": "array" + }, + "entity_id": { + "type": "string" + }, + "entity_type": { + "type": "string" + }, + "ffa_points": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "game": { + "type": "string" + }, + "group": { + "type": "integer" + }, + "hidden": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "last_modified": { + "type": "string" + }, + "leaderboard_mode": { + "type": "string" + }, + "leaderboard_name": { + "type": "string" + }, + "leaderboard_type": { + "type": "string" + }, + "membership_requirement": {}, + "metadata": {}, + "min_matches": { + "type": "integer" + }, + "notify_points_updates": { + "type": "boolean" + }, + "organizer_id": { + "type": "string" + }, + "penalty": {}, + "points_per": {}, + "points_per_draw": { + "type": "integer" + }, + "points_per_loss": { + "type": "integer" + }, + "points_per_win": { + "type": "integer" + }, + "points_type": { + "type": "string" + }, + "prize_pool": {}, + "prizes": {}, + "promotion_target": {}, + "ranking_boost": { + "type": "integer" + }, + "ranking_fields": {}, + "ranking_type": { + "type": "string" + }, + "region": { + "type": "string" + }, + "relegation_target": {}, + "requirement": {}, + "round": { + "type": "integer" + }, + "rules": {}, + "schedule": { + "type": "string" + }, + "season": { + "type": "integer" + }, + "start_date": { + "type": "string" + }, + "starting_points": { + "type": "integer" + }, + "status": { + "type": "string" + }, + "subtype": {}, + "tag_requirement": {}, + "technical_name": { "type": "string" + }, + "version": { + "example": 1, + "type": "integer" } }, "type": "object" }, - "fanduel.sportsbookEventScoreResponseDoc": { + "faceit.LeaderboardDetailResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookEventScoreResponse" + "fetched_at": { + "example": "2026-11-09T11:30:00Z", + "type": "string" }, - "msg": { - "example": "OK", + "leaderboard": { + "$ref": "#/definitions/faceit.LeaderboardDetail" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" } }, "type": "object" }, - "fanduel.sportsbookEventStatsResponseDoc": { + "faceit.LeaderboardEntityRef": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookEventStatsResponse" + "id": { + "type": "string" }, - "msg": { - "example": "OK", + "type": { + "example": "championship", "type": "string" } }, "type": "object" }, - "fanduel.sportsbookEventsStatusResponseDoc": { + "faceit.LeaderboardResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookEventsStatusResponse" + "entries": { + "items": { + "$ref": "#/definitions/faceit.RankingEntry" + }, + "type": "array" }, - "msg": { - "example": "OK", + "fetched_at": { + "example": "2026-11-09T11:30:00Z", + "type": "string" + }, + "game": { + "example": "cs2", + "type": "string" + }, + "limit": { + "example": 20, + "type": "integer" + }, + "offset": { + "example": 0, + "type": "integer" + }, + "region": { + "example": "EU", + "type": "string" + }, + "season": { + "example": 10, + "type": "integer" + }, + "season_history": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" } }, "type": "object" }, - "fanduel.sportsbookLeagueScheduleResponseDoc": { + "faceit.LeaderboardStatusesResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookLeagueScheduleResponse" + "entity_types": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "fetched_at": { + "example": "2026-11-09T11:30:00Z", + "type": "string" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", + "type": "string" + }, + "statuses": { + "example": [ + "ONGOING" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "types": { + "items": { + "type": "string" + }, + "type": "array" + }, + "verified_at": { + "example": "2026-11-09", "type": "string" } }, "type": "object" }, - "fanduel.sportsbookLiveCountResponseDoc": { + "faceit.MapsResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookLiveCountResponse" + "fetched_at": { + "example": "2026-11-09T11:30:00Z", + "type": "string" }, - "msg": { - "example": "OK", + "game": { + "example": "cs2", + "type": "string" + }, + "maps": { + "items": { + "$ref": "#/definitions/faceit.GameMap" + }, + "type": "array" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" } }, "type": "object" }, - "fanduel.sportsbookLiveDataResponseDoc": { + "faceit.MatchClipsResponse": { "properties": { - "code": { - "example": 200, + "clips": { + "items": { + "$ref": "#/definitions/faceit.Clip" + }, + "type": "array" + }, + "count": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookLiveDataResponse" + "fetched_at": { + "example": "2026-11-09T11:30:00Z", + "type": "string" }, - "msg": { - "example": "OK", + "has_more": { + "example": true, + "type": "boolean" + }, + "limit": { + "example": 10, + "type": "integer" + }, + "offset": { + "example": 0, + "type": "integer" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" } }, "type": "object" }, - "fanduel.sportsbookLiveScoresResponseDoc": { + "faceit.Organizer": { "properties": { - "code": { - "example": 200, - "type": "integer" + "admin_list_public": { + "type": "boolean" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookLiveScoresResponse" + "admins": { + "items": { + "$ref": "#/definitions/faceit.OrganizerAdmin" + }, + "type": "array" }, - "msg": { - "example": "OK", + "avatar": { + "type": "string" + }, + "countries": { + "items": { + "type": "string" + }, + "type": "array" + }, + "cover": { + "type": "string" + }, + "description": { + "type": "string" + }, + "donations_enabled": { + "type": "boolean" + }, + "facebook": { + "type": "string" + }, + "featured": { + "type": "boolean" + }, + "features": { + "items": { + "type": "string" + }, + "type": "array" + }, + "featuring_countries": { + "items": { + "type": "string" + }, + "type": "array" + }, + "freemium_hub_enabled": { + "type": "boolean" + }, + "games": { + "items": { + "type": "string" + }, + "type": "array" + }, + "geo_regions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "guid": { + "type": "string" + }, + "live_streaming_enabled": { + "type": "boolean" + }, + "name": { + "example": "Extreme Competitions", + "type": "string" + }, + "published": { + "type": "boolean" + }, + "sponsors": { + "items": { + "$ref": "#/definitions/faceit.OrganizerSponsor" + }, + "type": "array" + }, + "tier": { + "$ref": "#/definitions/faceit.OrganizerTier" + }, + "twitch": { + "type": "string" + }, + "twitter": { + "type": "string" + }, + "type": { + "example": "organization", + "type": "string" + }, + "website": { "type": "string" } }, "type": "object" }, - "fanduel.sportsbookMarketPricesResponseDoc": { + "faceit.OrganizerAdmin": { "properties": { - "code": { - "example": 200, - "type": "integer" + "avatar_url": { + "type": "string" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookMarketPricesResponse" + "nickname": { + "example": "Sabin_3", + "type": "string" }, - "msg": { - "example": "OK", + "role": { + "example": "owner", "type": "string" } }, "type": "object" }, - "fanduel.sportsbookPageResponseDoc": { + "faceit.OrganizerResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookPageResponse" + "fetched_at": { + "example": "2026-11-09T11:30:00Z", + "type": "string" }, - "msg": { - "example": "OK", + "organizer": { + "$ref": "#/definitions/faceit.Organizer" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" } }, "type": "object" }, - "fanduel.sportsbookParlaysResponseDoc": { + "faceit.OrganizerSponsor": { "properties": { - "code": { - "example": 200, - "type": "integer" + "guid": { + "type": "string" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookParlaysResponse" + "image": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "example": "SPONSOR", + "type": "string" + }, + "priority": { + "type": "integer" + }, + "url": { "type": "string" } }, "type": "object" }, - "fanduel.sportsbookPlayByPlayResponseDoc": { + "faceit.OrganizerTier": { "properties": { - "code": { - "example": 200, + "allowed_concurrent_competitions": { + "example": 10, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookPlayByPlayResponse" + "allowed_concurrent_hubs": { + "example": 15, + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "custom_prizes_enabled": { + "type": "boolean" + }, + "faceit_points_prizes_enabled": { + "type": "boolean" + }, + "level": { + "example": 80, + "type": "integer" + }, + "max_competition_slots": { + "example": 128, + "type": "integer" + }, + "max_rules": { + "example": 40, + "type": "integer" + }, + "min_competition_slots": { + "example": 2, + "type": "integer" + }, + "prize_money_settings_enabled": { + "type": "boolean" } }, "type": "object" }, - "fanduel.sportsbookPlayerNewsResponseDoc": { + "faceit.Player": { "properties": { - "code": { - "example": 200, - "type": "integer" + "activated_at": { + "example": "2018-12-11T13:16:39.327Z", + "type": "string" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookPlayerNewsResponse" + "active_team_id": { + "example": "dff3a43b-a069-4a8c-a23a-a32bb0624730", + "type": "string" }, - "msg": { - "example": "OK", + "avatar": { + "example": "https://distribution.faceit-cdn.net/images/af16c75c-407e-4b43-96e6-badf2646c806.jpeg", + "type": "string" + }, + "country": { + "example": "is", + "type": "string" + }, + "cover_image_url": { + "example": "https://distribution.faceit-cdn.net/images/2af7644d-e74d-4022-aab9-709e54cf918f.jpeg", + "type": "string" + }, + "created_at": { + "example": "2018-12-11T13:16:39.327Z", + "type": "string" + }, + "flag": { + "example": "cs2", + "type": "string" + }, + "games": { + "additionalProperties": { + "$ref": "#/definitions/faceit.PlayerGame" + }, + "type": "object" + }, + "id": { + "example": "74df0e6b-5b41-42d7-93b4-05dc78b9a699", + "type": "string" + }, + "matching_sound": { + "example": "default", + "type": "string" + }, + "memberships": { + "example": [ + "free" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "nickname": { + "example": "dem0nnnnnnnn", + "type": "string" + }, + "registration_status": { + "example": "active", + "type": "string" + }, + "registration_status_v2": { + "example": "ACTIVE", + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "timezone": { + "example": "Atlantic/Reykjavik", + "type": "string" + }, + "user_type": { + "example": "normal", "type": "string" + }, + "verified": { + "example": true, + "type": "boolean" } }, "type": "object" }, - "fanduel.sportsbookPlayerPropsResponseDoc": { + "faceit.PlayerGame": { "properties": { - "code": { - "example": 200, + "elo_refreshed_by_user_at": { + "example": "2026-11-08T09:00:00.000Z", + "type": "string" + }, + "faceit_elo": { + "example": 5342, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookPlayerPropsResponse" + "game_id": { + "example": "cs2", + "type": "string" }, - "msg": { - "example": "OK", + "game_name": { + "example": "Counter-Strike 2", + "type": "string" + }, + "region": { + "example": "EU", + "type": "string" + }, + "region_updated_at": { + "example": "2026-11-08T09:00:00.000Z", + "type": "string" + }, + "region_updated_at_v2": { + "example": "2026-11-08T09:00:00.000Z", + "type": "string" + }, + "skill_level": { + "example": 10, + "type": "integer" + }, + "skill_level_label": { + "example": "Level 10", "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "fanduel.sportsbookPlayerResponseDoc": { + "faceit.PlayerRankResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookPlayerResponse" + "fetched_at": { + "example": "2026-11-09T11:30:00Z", + "type": "string" }, - "msg": { - "example": "OK", + "game": { + "example": "cs2", + "type": "string" + }, + "position": { + "example": 1, + "type": "integer" + }, + "region": { + "example": "EU", + "type": "string" + }, + "season": { + "example": 10, + "type": "integer" + }, + "season_history": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", + "type": "string" + }, + "user_id": { + "example": "74df0e6b-5b41-42d7-93b4-05dc78b9a699", "type": "string" } }, "type": "object" }, - "fanduel.sportsbookPlayerStatsResponseDoc": { + "faceit.PlayerResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookPlayerStatsResponse" + "fetched_at": { + "example": "2026-11-09T11:30:00Z", + "type": "string" }, - "msg": { - "example": "OK", + "player": { + "$ref": "#/definitions/faceit.Player" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" } }, "type": "object" }, - "fanduel.sportsbookPlayersResponseDoc": { + "faceit.RankingEntry": { "properties": { - "code": { - "example": 200, + "elo": { + "example": 5342, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookPlayersResponse" + "global_position": { + "example": 1, + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "position": { + "example": 1, + "type": "integer" + }, + "skill_level": { + "example": 10, + "type": "integer" + }, + "user": { + "$ref": "#/definitions/faceit.RankingUser" + }, + "verification_level": { + "example": 0, + "type": "integer" } }, "type": "object" }, - "fanduel.sportsbookPromotionsResponseDoc": { + "faceit.RankingUser": { "properties": { - "code": { - "example": 200, - "type": "integer" + "country": { + "example": "is", + "type": "string" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookPromotionsResponse" + "id": { + "example": "74df0e6b-5b41-42d7-93b4-05dc78b9a699", + "type": "string" }, - "msg": { - "example": "OK", + "nickname": { + "example": "dem0nnnnnnnn", "type": "string" } }, "type": "object" }, - "fanduel.sportsbookRosterResponseDoc": { + "faceit.Region": { "properties": { "code": { - "example": 200, - "type": "integer" + "example": "EU", + "type": "string" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookRosterResponse" + "excluded": { + "example": false, + "type": "boolean" }, - "msg": { - "example": "OK", + "source": { + "example": "client_geo_region", "type": "string" } }, "type": "object" }, - "fanduel.sportsbookScheduleResponseDoc": { + "faceit.RegionsResponse": { "properties": { - "code": { - "example": 200, + "closed": { + "example": false, + "type": "boolean" + }, + "count": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookScheduleResponse" + "fetched_at": { + "example": "2026-11-09T11:30:00Z", + "type": "string" }, - "msg": { - "example": "OK", + "regions": { + "items": { + "$ref": "#/definitions/faceit.Region" + }, + "type": "array" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", + "type": "string" + }, + "verified_at": { + "example": "2026-11-09", "type": "string" } }, "type": "object" }, - "fanduel.sportsbookSearchResponseDoc": { + "faceit.Rule": { "properties": { - "code": { - "example": 200, - "type": "integer" + "body": { + "type": "string" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookSearchResponse" + "created_at": { + "type": "string" }, - "msg": { - "example": "OK", + "game": { + "example": "cs2", + "type": "string" + }, + "guid": { + "type": "string" + }, + "name": { + "example": "November 2026 — Neon Rider Duo", + "type": "string" + }, + "organizer": { + "type": "string" + }, + "updated_at": { "type": "string" } }, "type": "object" }, - "fanduel.sportsbookSearchTabsResponseDoc": { + "faceit.RuleResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookSearchTabsResponse" + "fetched_at": { + "example": "2026-11-09T11:30:00Z", + "type": "string" }, - "msg": { - "example": "OK", + "rule": { + "$ref": "#/definitions/faceit.Rule" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" } }, "type": "object" }, - "fanduel.sportsbookSportsResponseDoc": { + "faceit.RulesResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookSportsResponse" + "fetched_at": { + "example": "2026-11-09T11:30:00Z", + "type": "string" }, - "msg": { - "example": "OK", + "limit": { + "example": 20, + "type": "integer" + }, + "offset": { + "example": 0, + "type": "integer" + }, + "rules": { + "items": { + "$ref": "#/definitions/faceit.Rule" + }, + "type": "array" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" } }, "type": "object" }, - "fanduel.sportsbookStandingsResponseDoc": { + "faceit.SkillLevel": { "properties": { - "code": { - "example": 200, + "max": { + "example": 500, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookStandingsResponse" + "min": { + "example": 100, + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "skill_level": { + "example": 1, + "type": "integer" } }, "type": "object" }, - "fanduel.sportsbookStatsListResponseDoc": { + "faceit.SkillLevelsResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookStatsListResponse" + "fetched_at": { + "example": "2026-11-09T11:30:00Z", + "type": "string" }, - "msg": { - "example": "OK", + "game": { + "example": "cs2", + "type": "string" + }, + "levels": { + "items": { + "$ref": "#/definitions/faceit.SkillLevel" + }, + "type": "array" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" } }, "type": "object" }, - "fanduel.sportsbookTeamNewsResponseDoc": { + "faceit.StandingsEntry": { "properties": { - "code": { - "example": 200, + "leaderboard": { + "$ref": "#/definitions/faceit.StandingsLeaderboard" + }, + "rankings": { + "items": { + "$ref": "#/definitions/faceit.StandingsRanking" + }, + "type": "array" + } + }, + "type": "object" + }, + "faceit.StandingsLeaderboard": { + "properties": { + "bracket_placement": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookTeamNewsResponse" + "delimiter": { + "type": "integer" }, - "msg": { - "example": "OK", + "entity_id": { + "type": "string" + }, + "entity_type": { + "type": "string" + }, + "group": { + "type": "integer" + }, + "id": { "type": "string" + }, + "round": { + "type": "integer" } }, "type": "object" }, - "fanduel.sportsbookTeamOddsResponseDoc": { + "faceit.StandingsPlacement": { "properties": { - "code": { - "example": 200, + "entity_avatar": { + "type": "string" + }, + "entity_country": { + "example": "gb", + "type": "string" + }, + "entity_id": { + "type": "string" + }, + "entity_memberships": { + "items": { + "type": "string" + }, + "type": "array" + }, + "entity_name": { + "example": "SabinSabin", + "type": "string" + }, + "entity_skill_level": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookTeamOddsResponse" + "entity_verified": { + "type": "boolean" }, - "msg": { - "example": "OK", + "entity_verified_level": { + "type": "string" + }, + "roster_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "roster_memberships": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "example": "solo", "type": "string" } }, "type": "object" }, - "fanduel.sportsbookTeamStatsResponseDoc": { + "faceit.StandingsRanking": { "properties": { - "code": { - "example": 200, + "placement": { + "$ref": "#/definitions/faceit.StandingsPlacement" + }, + "played": { + "example": 0, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookTeamStatsResponse" + "points": { + "example": 0, + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "position": { + "example": 1, + "type": "integer" } }, "type": "object" }, - "fanduel.sportsbookTeamsResponseDoc": { + "faceit.StandingsResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookTeamsResponse" + "entries": { + "items": { + "$ref": "#/definitions/faceit.StandingsEntry" + }, + "type": "array" }, - "msg": { - "example": "OK", + "fetched_at": { + "example": "2026-11-09T11:30:00Z", + "type": "string" + }, + "group": { + "example": 1, + "type": "integer" + }, + "round": { + "example": "1", + "type": "string" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" } }, "type": "object" }, - "fanduel.sportsbookTrendingResponseDoc": { + "faceit.Team": { "properties": { - "code": { - "example": 200, - "type": "integer" + "avatar": { + "type": "string" }, - "data": { - "$ref": "#/definitions/fanduel.SportsbookTrendingResponse" + "country": { + "example": "de", + "type": "string" }, - "msg": { - "example": "OK", + "cover": { + "type": "string" + }, + "created_at": { + "example": "Fri Sep 29 09:25:59 UTC 2023", + "type": "string" + }, + "description": { + "type": "string" + }, + "entity_type": { + "example": "team", + "type": "string" + }, + "facebook": { + "type": "string" + }, + "game": { + "example": "cs2", + "type": "string" + }, + "guid": { + "type": "string" + }, + "leader": { + "example": "2c207775-bdac-493a-a80e-f556c5e58a76", + "type": "string" + }, + "members": { + "items": { + "$ref": "#/definitions/faceit.TeamMember" + }, + "type": "array" + }, + "members_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "example": "teamKR eSport Club", + "type": "string" + }, + "nickname": { + "example": "TKR-", + "type": "string" + }, + "pending_members_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "status": { + "example": "PERMANENT", + "type": "string" + }, + "team_type": { + "example": "premade", + "type": "string" + }, + "twitter": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "website": { + "type": "string" + }, + "youtube": { "type": "string" } }, "type": "object" }, - "farfetch.CategoriesResponse": { + "faceit.TeamMember": { "properties": { - "genders": { + "avatar": { + "type": "string" + }, + "country": { + "example": "de", + "type": "string" + }, + "games": { "items": { - "$ref": "#/definitions/farfetch.GenderCategories" + "type": "string" }, "type": "array" + }, + "guid": { + "example": "b0963d5e-1c81-4f04-91c4-5b4f3922cfab", + "type": "string" + }, + "nickname": { + "example": "ShaZ1337", + "type": "string" } }, "type": "object" }, - "farfetch.Category": { + "faceit.TeamResponse": { "properties": { - "name": { - "type": "string" + "count": { + "example": 2, + "type": "integer" }, - "slug": { + "fetched_at": { + "example": "2026-11-09T11:30:00Z", "type": "string" }, - "url": { + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" + }, + "team": { + "$ref": "#/definitions/faceit.Team" } }, "type": "object" }, - "farfetch.Designer": { + "faceit.TournamentsPastResponse": { "properties": { - "name": { + "count": { + "example": 2, + "type": "integer" + }, + "fetched_at": { + "example": "2026-11-09T11:30:00Z", "type": "string" }, - "slug": { + "limit": { + "example": 20, + "type": "integer" + }, + "offset": { + "example": 0, + "type": "integer" + }, + "result": { + "example": "ok", "type": "string" }, - "url": { + "size": { + "example": 0, + "type": "integer" + }, + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" + }, + "tournaments": { + "items": {}, + "type": "array" } }, "type": "object" }, - "farfetch.DesignersResponse": { + "faceit.UserSkill": { + "properties": { + "expiration": { + "example": "2026-11-17T01:55:45.017480113Z", + "type": "string" + }, + "game_skill": { + "$ref": "#/definitions/faceit.GameSkill" + }, + "is_professional_player": { + "example": true, + "type": "boolean" + }, + "user_id": { + "example": "74df0e6b-5b41-42d7-93b4-05dc78b9a699", + "type": "string" + } + }, + "type": "object" + }, + "faceit.UserSkillsResponse": { "properties": { "count": { + "example": 2, "type": "integer" }, - "designers": { + "fetched_at": { + "example": "2026-11-09T11:30:00Z", + "type": "string" + }, + "game": { + "example": "cs2", + "type": "string" + }, + "skills": { "items": { - "$ref": "#/definitions/farfetch.Designer" + "$ref": "#/definitions/faceit.UserSkill" }, "type": "array" }, - "gender": { + "source_url": { + "example": "https://api.faceit.com/ranking/v1/globalranking/cs2/EU?limit=20", "type": "string" } }, "type": "object" }, - "farfetch.GenderCategories": { + "fanatics.CategoriesResponse": { "properties": { - "categories": { + "fetched_at": { + "type": "string" + }, + "leagues": { "items": { - "$ref": "#/definitions/farfetch.Category" + "$ref": "#/definitions/fanatics.League" }, "type": "array" }, - "gender": { + "source_url": { "type": "string" } }, "type": "object" }, - "farfetch.ProductDetailResponse": { + "fanatics.League": { "properties": { - "brand": { + "name": { + "example": "NFL", "type": "string" }, - "category_path": { + "teams": { "items": { - "$ref": "#/definitions/farfetch.Category" + "$ref": "#/definitions/fanatics.Team" }, "type": "array" }, - "color": { + "url": { + "example": "/nfl/o-3572+z-953036859-1253393850", + "type": "string" + } + }, + "type": "object" + }, + "fanatics.ListingItem": { + "properties": { + "availability": { + "example": "InStock", "type": "string" }, - "description": { + "brand": { "type": "string" }, - "fetched_at": { + "category": { "type": "string" }, - "gender": { + "currency_code": { + "example": "USD", "type": "string" }, - "id": { + "image": { "type": "string" }, - "images": { + "name": { + "type": "string" + }, + "price": { + "type": "number" + }, + "product_id": { + "example": "204125114", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "fanatics.ListingResponse": { + "properties": { + "fetched_at": { + "type": "string" + }, + "has_next_page": { + "type": "boolean" + }, + "items": { "items": { - "type": "string" + "$ref": "#/definitions/fanatics.ListingItem" }, "type": "array" }, - "name": { + "page_number": { + "example": 1, + "type": "integer" + }, + "page_size": { + "example": 24, + "type": "integer" + }, + "query": { + "example": "colts jersey", + "type": "string" + }, + "sort_option": { + "example": "TopSellers", "type": "string" }, "source_url": { "type": "string" }, - "variants": { - "items": { - "$ref": "#/definitions/farfetch.ProductVariant" - }, - "type": "array" + "total_items": { + "example": 318, + "type": "integer" } }, "type": "object" }, - "farfetch.ProductSummary": { + "fanatics.Product": { "properties": { + "availability": { + "example": "InStock", + "type": "string" + }, "brand": { + "example": "Fanatics", "type": "string" }, - "currency": { + "category": { + "example": "Shorts", "type": "string" }, - "id": { + "comparable_products": { + "items": { + "$ref": "#/definitions/fanatics.RelatedProduct" + }, + "type": "array" + }, + "condition": { + "example": "NewCondition", "type": "string" }, - "image_url": { + "currency_code": { + "example": "USD", "type": "string" }, - "in_stock": { - "type": "boolean" + "description": { + "type": "string" + }, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "media": { + "items": { + "$ref": "#/definitions/fanatics.ProductMedia" + }, + "type": "array" }, "name": { + "example": "Indianapolis Colts Fanatics Slice Shorts - Royal", "type": "string" }, "price": { + "example": 49.99, + "type": "number" + }, + "product_id": { + "example": "5227968", + "type": "string" + }, + "rating": { "type": "number" }, + "review_count": { + "type": "integer" + }, + "reviews": { + "$ref": "#/definitions/fanatics.ReviewsSummary" + }, + "sizes": { + "items": { + "$ref": "#/definitions/fanatics.ProductSize" + }, + "type": "array" + }, "url": { "type": "string" } }, "type": "object" }, - "farfetch.ProductVariant": { + "fanatics.ProductMedia": { "properties": { - "currency": { + "thumbnail": { "type": "string" }, - "in_stock": { - "type": "boolean" - }, - "price": { - "type": "number" - }, - "size": { + "type": { + "example": "Image", "type": "string" }, - "sku": { + "url": { "type": "string" } }, "type": "object" }, - "farfetch.SearchResponse": { + "fanatics.ProductResponse": { "properties": { - "category": { + "fetched_at": { "type": "string" }, - "count": { - "type": "integer" + "product": { + "$ref": "#/definitions/fanatics.Product" }, - "designer": { + "source_url": { "type": "string" + } + }, + "type": "object" + }, + "fanatics.ProductSize": { + "properties": { + "available": { + "example": true, + "type": "boolean" }, - "fetched_at": { + "label": { + "example": "L", "type": "string" }, - "gender": { + "price": { + "example": 149.99, + "type": "number" + } + }, + "type": "object" + }, + "fanatics.RatingBreakdown": { + "properties": { + "count": { + "example": 10411, + "type": "integer" + }, + "label": { + "example": "True to Size", "type": "string" }, - "page": { + "rating": { + "example": 5, "type": "integer" + } + }, + "type": "object" + }, + "fanatics.RatingSummary": { + "properties": { + "average_rating": { + "example": 4.4, + "type": "number" }, - "products": { + "breakdown": { "items": { - "$ref": "#/definitions/farfetch.ProductSummary" + "$ref": "#/definitions/fanatics.RatingBreakdown" }, "type": "array" }, - "source_url": { + "rating_count": { + "example": 13728, + "type": "integer" + } + }, + "type": "object" + }, + "fanatics.RelatedProduct": { + "properties": { + "currency_code": { + "example": "USD", "type": "string" }, - "total_pages": { + "description": { + "example": "Limited", + "type": "string" + }, + "image": { + "type": "string" + }, + "price": { + "example": 199.99, + "type": "number" + }, + "product_id": { + "example": "46226601215300", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "fanatics.ReviewsSummary": { + "properties": { + "fit": { + "$ref": "#/definitions/fanatics.RatingSummary" + }, + "has_reviews": { + "type": "boolean" + }, + "overall": { + "$ref": "#/definitions/fanatics.RatingSummary" + }, + "quality": { + "$ref": "#/definitions/fanatics.RatingSummary" + }, + "review_count": { + "example": 3248, "type": "integer" + }, + "value": { + "$ref": "#/definitions/fanatics.RatingSummary" } }, "type": "object" }, - "farfetch.categoriesResponseDoc": { + "fanatics.Team": { + "properties": { + "name": { + "example": "Indianapolis Colts", + "type": "string" + }, + "product_count": { + "example": 6138, + "type": "integer" + }, + "url": { + "example": "/nfl/indianapolis-colts/o-2483+t-03378189+z-90650-4056854214", + "type": "string" + } + }, + "type": "object" + }, + "fanatics.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/farfetch.CategoriesResponse" + "$ref": "#/definitions/fanatics.CategoriesResponse" }, "msg": { "example": "OK", @@ -78971,14 +84041,14 @@ }, "type": "object" }, - "farfetch.designersResponseDoc": { + "fanatics.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/farfetch.DesignersResponse" + "$ref": "#/definitions/fanatics.ListingResponse" }, "msg": { "example": "OK", @@ -78987,14 +84057,14 @@ }, "type": "object" }, - "farfetch.productResponseDoc": { + "fanatics.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/farfetch.ProductDetailResponse" + "$ref": "#/definitions/fanatics.ProductResponse" }, "msg": { "example": "OK", @@ -79003,14 +84073,14 @@ }, "type": "object" }, - "farfetch.searchResponseDoc": { + "fanatics.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/farfetch.SearchResponse" + "$ref": "#/definitions/fanatics.ListingResponse" }, "msg": { "example": "OK", @@ -79019,1144 +84089,1028 @@ }, "type": "object" }, - "fastcompany.AuthorResponse": { + "fanaticscollect.Auction": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/fastcompany.HeadlineItem" - }, - "type": "array" + "auction_integer_id": { + "type": "integer" }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "ends_at": { + "type": "string" }, - "name": { + "id": { "type": "string" }, - "url": { + "integer_id": { + "type": "integer" + }, + "marketplace": { + "example": "WEEKLY", "type": "string" - } - }, - "type": "object" - }, - "fastcompany.HeadlineItem": { - "properties": { - "author": { + }, + "name": { + "example": "2022 Weekly Auction #1", "type": "string" }, - "image_url": { + "payout_date": { "type": "string" }, - "published_at": { + "short_name": { + "example": "WA1", "type": "string" }, - "summary": { + "starts_at": { "type": "string" }, - "title": { + "status": { + "example": "CLOSED", "type": "string" }, + "timer": { + "$ref": "#/definitions/fanaticscollect.AuctionTimer" + }, "type": { + "example": "CollectWeeklyAuction", "type": "string" }, - "url": { + "urn": { + "example": "WEEKLY:8d27de96-6f1d-11ed-ab20-0a58a9feac02", "type": "string" } }, "type": "object" }, - "finance.About": { + "fanaticscollect.AuctionTimer": { "properties": { - "about": { - "description": "Information about the company.", - "example": "SAP SE is a European multinational software company based in Walldorf, Baden-Württemberg, Germany...", + "auction_ends_at": { + "example": "2022-01-24T03:00:00Z", "type": "string" }, - "ceo": { - "description": "The CEO of the company.", - "example": "Christian Klein", + "auction_starts_at": { + "example": "2022-01-14T03:00:00Z", "type": "string" }, - "employees": { - "description": "The number of employees.", - "example": 107583, + "window_duration_seconds": { "type": "integer" }, - "founded": { - "description": "The founding date of the company.", - "example": "1972-04-01T00:00:00Z", - "type": "string" - }, - "headquarters": { - "description": "The headquarters of the company.", - "example": "Walldorf, Baden-Württemberg, Germany", + "window_ends_at": { "type": "string" }, - "website": { - "description": "The company's website.", - "example": "https://www.sap.com/", - "type": "string" + "window_ordinal": { + "type": "integer" } }, "type": "object" }, - "finance.BalanceSheet": { + "fanaticscollect.AuctionsResponse": { "properties": { - "cash_and_short_term_change_yy": { - "description": "Year-over-year change in cash and short-term investments (%)", - "example": 5.87, - "type": "number" - }, - "cash_and_short_term_investments": { - "description": "Cash and short-term investments in USD", - "example": 65170000000, - "type": "number" + "auctions": { + "items": { + "$ref": "#/definitions/fanaticscollect.Auction" + }, + "type": "array" + } + }, + "type": "object" + }, + "fanaticscollect.CardLadderEstimate": { + "properties": { + "estimated_max": { + "$ref": "#/definitions/fanaticscollect.Money" }, - "price_to_book": { - "description": "Price to book ratio", - "example": 67.71, - "type": "number" + "estimated_min": { + "$ref": "#/definitions/fanaticscollect.Money" }, - "quarter": { - "description": "The fiscal quarter", - "example": 4, - "type": "integer" + "estimated_value": { + "$ref": "#/definitions/fanaticscollect.Money" + } + }, + "type": "object" + }, + "fanaticscollect.Categories": { + "properties": { + "category_parents": { + "items": { + "type": "string" + }, + "type": "array" }, - "return_on_assets": { - "description": "Return on assets (%)", - "example": 21.24, - "type": "number" + "eye_appeal_grades": { + "items": { + "type": "string" + }, + "type": "array" }, - "return_on_capital": { - "description": "Return on capital (%)", - "example": 43.01, - "type": "number" + "grading_services": { + "items": { + "type": "string" + }, + "type": "array" }, - "shares_outstanding": { - "description": "Shares outstanding", - "example": 15120000000, - "type": "number" + "marketplaces": { + "items": { + "type": "string" + }, + "type": "array" }, - "total_assets": { - "description": "Total assets in USD", - "example": 364980000000, - "type": "number" + "sold_item_categories": { + "items": { + "type": "string" + }, + "type": "array" }, - "total_assets_change_yy": { - "description": "Year-over-year change in total assets (%)", - "example": 3.52, - "type": "number" + "sold_item_grading_services": { + "items": { + "type": "string" + }, + "type": "array" }, - "total_equity": { - "description": "Total equity in USD", - "example": 56950000000, - "type": "number" + "sold_item_sort_options": { + "items": { + "$ref": "#/definitions/fanaticscollect.SortOption" + }, + "type": "array" }, - "total_liabilities": { - "description": "Total liabilities in USD", - "example": 308030000000, - "type": "number" + "sort_options": { + "items": { + "$ref": "#/definitions/fanaticscollect.SortOption" + }, + "type": "array" }, - "total_liabilities_change_yy": { - "description": "Year-over-year change in total liabilities (%)", - "example": 6.06, - "type": "number" + "statuses": { + "items": { + "type": "string" + }, + "type": "array" }, - "year": { - "description": "The fiscal year", - "example": 2024, - "type": "integer" + "sub_categories": { + "items": { + "$ref": "#/definitions/fanaticscollect.SubCategory" + }, + "type": "array" } }, "type": "object" }, - "finance.CashFlow": { + "fanaticscollect.Images": { "properties": { - "cash_from_financing": { - "description": "Cash from financing in USD", - "example": -24950000000, - "type": "number" + "large": { + "type": "string" }, - "cash_from_financing_change_yy": { - "description": "Year-over-year change in cash from financing (%)", - "example": -7.75, - "type": "number" + "medium": { + "type": "string" }, - "cash_from_investing": { - "description": "Cash from investing in USD", - "example": 1450000000, - "type": "number" + "small": { + "type": "string" }, - "cash_from_investing_change_yy": { - "description": "Year-over-year change in cash from investing (%)", - "example": -39.64, - "type": "number" + "thumbnail": { + "type": "string" + } + }, + "type": "object" + }, + "fanaticscollect.InstantPackRelease": { + "properties": { + "cards_per_pack": { + "type": "integer" }, - "cash_from_operations": { - "description": "Cash from operations in USD", - "example": 26810000000, - "type": "number" + "checklist_id": { + "type": "string" }, - "cash_from_operations_change_yy": { - "description": "Year-over-year change in cash from operations (%)", - "example": 24.14, - "type": "number" + "checklist_url": { + "type": "string" }, - "free_cash_flow": { - "description": "Free cash flow in USD", - "example": 34540000000, - "type": "number" + "id": { + "type": "string" }, - "free_cash_flow_change_yy": { - "description": "Year-over-year change in free cash flow (%)", - "example": 180.6, - "type": "number" + "launch_at": { + "type": "string" }, - "net_change_in_cash": { - "description": "Net change in cash in USD", - "example": 3310000000, - "type": "number" + "listing_id": { + "type": "string" }, - "net_change_in_cash_change_yy": { - "description": "Year-over-year change in net change in cash (%)", - "example": 294.28, - "type": "number" + "odds": { + "items": { + "$ref": "#/definitions/fanaticscollect.InstantPackTreatment" + }, + "type": "array" }, - "net_income": { - "description": "Net income in USD", - "example": 14740000000, - "type": "number" + "price_amount_in_cents": { + "type": "integer" }, - "net_income_change_yy": { - "description": "Year-over-year change in net income (%)", - "example": -35.81, - "type": "number" + "released_at": { + "type": "string" }, - "quarter": { - "description": "The fiscal quarter", - "example": 4, - "type": "integer" + "status": { + "type": "string" }, - "year": { - "description": "The fiscal year", - "example": 2024, - "type": "integer" + "subtitle": { + "type": "string" + }, + "title": { + "type": "string" } }, "type": "object" }, - "finance.CategoryNewsResponse": { + "fanaticscollect.InstantPackReleaseRef": { "properties": { - "category": { - "description": "Google Finance category id that was requested.", - "example": "18", + "checklist_id": { "type": "string" }, - "items": { - "description": "News articles listed for the category.", - "items": { - "$ref": "#/definitions/finance.FinanceArticle" - }, - "type": "array" + "id": { + "type": "string" }, - "offset": { - "description": "Number of articles skipped before this page.", - "example": 0, - "type": "integer" + "launch_at": { + "type": "string" + }, + "listing_id": { + "type": "string" } }, "type": "object" }, - "finance.CategoryStocksResponse": { + "fanaticscollect.InstantPackReleasesResponse": { "properties": { - "category": { - "description": "Google Finance category id that was requested.", - "example": "18", - "type": "string" - }, - "items": { - "description": "Instruments listed for the category.", + "releases": { "items": { - "$ref": "#/definitions/finance.Instrument" + "$ref": "#/definitions/fanaticscollect.InstantPackReleaseRef" }, "type": "array" - }, - "offset": { - "description": "Number of instruments skipped before this page.", - "example": 0, - "type": "integer" } }, "type": "object" }, - "finance.ChartResponse": { + "fanaticscollect.InstantPackTreatment": { "properties": { - "instrument": { - "allOf": [ - { - "$ref": "#/definitions/finance.Instrument" - } - ], - "description": "Instrument the chart is for." - }, - "points": { - "description": "Chart data points in time order, each with a time, a price and a volume.", - "items": { - "$ref": "#/definitions/finance.Ticker" - }, - "type": "array" - }, - "previous_close": { - "description": "Closing price of the previous trading day.", - "example": 236.35, + "cards_per_pack": { "type": "number" }, - "window": { - "description": "Chart window that was returned: `1d`, `5d`, `1m`, `6m`, `ytd`, `1y`, `5y` or `max`.", - "example": "1m", + "name": { + "type": "string" + }, + "odds_display": { "type": "string" + }, + "reveal_order": { + "type": "integer" } }, "type": "object" }, - "finance.ClassificationResponse": { + "fanaticscollect.InstantRipsCategoriesResponse": { "properties": { "categories": { - "description": "Sector or category labels Google Finance assigns to the instrument, for example `Technology`.", "items": { - "type": "string" + "$ref": "#/definitions/fanaticscollect.InstantRipsCategory" }, "type": "array" + } + }, + "type": "object" + }, + "fanaticscollect.InstantRipsCategory": { + "properties": { + "id": { + "description": "ID is the pack-tile listing id the category tile currently links to\n-- a real FIXED/BO listing id, fetchable via GetListing (type=FIXED)\nfor that entry point's own full detail (see listing_type.go's doc\ncomment on how Instant Rips packs resolve as FIXED/BO listings).\nInstant Rips categories have no separate id space of their own in\nthe server-rendered page -- this is simply which specific pack tile\nthe category tile currently links to, confirmed live 2026-09-16.", + "example": "92c2820e-3248-4b02-a4cc-6e32ee0e7660", + "type": "string" }, - "instrument": { + "max_price": { + "$ref": "#/definitions/fanaticscollect.Money" + }, + "min_price": { "allOf": [ { - "$ref": "#/definitions/finance.Instrument" + "$ref": "#/definitions/fanaticscollect.Money" } ], - "description": "Instrument the labels belong to." + "description": "MinPrice/MaxPrice are the category's advertised price range, e.g.\n$10.00-$100.00 for \"Collector Packs\". Either may be absent if the\npage's price-range text for a tile doesn't parse as two dollar\namounts (not observed live, but not assumed impossible)." + }, + "name": { + "description": "Name is the category's display label, e.g. \"Collector Packs\".", + "example": "Collector Packs", + "type": "string" + }, + "url": { + "description": "URL is the category tile's own link -- an Instant Rips pack detail\npage (an alias for the same FIXED/BO listing ID resolves to).", + "type": "string" } }, "type": "object" }, - "finance.CompanyInfo": { + "fanaticscollect.InstantRipsOddsTier": { "properties": { - "ceo": { - "description": "Name of the company's chief executive.", - "example": "Tim Cook", - "type": "string" + "count": { + "type": "integer" }, - "description": { - "description": "Company description shown on Google Finance.", + "hit_rate_percentage": { + "type": "number" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "fanaticscollect.InstantRipsPack": { + "properties": { + "badge": { "type": "string" }, - "employees": { - "description": "Number of employees.", - "example": 166000, + "cards_per_pack": { "type": "integer" }, - "fifty_two_week_high": { - "description": "Highest price over the last 52 weeks.", - "example": 288.61, - "type": "number" - }, - "fifty_two_week_low": { - "description": "Lowest price over the last 52 weeks.", - "example": 169.21, - "type": "number" + "checklist_id": { + "type": "string" }, - "headquarters": { - "description": "Location of the company's headquarters, for example `Cupertino, CA, US`.", - "example": "Cupertino, CA, US", + "image_url": { "type": "string" }, - "high": { - "description": "Highest price of the trading day.", - "example": 272.4, - "type": "number" + "listing_id": { + "type": "string" }, - "low": { - "description": "Lowest price of the trading day.", - "example": 269.1, - "type": "number" + "odds": { + "items": { + "$ref": "#/definitions/fanaticscollect.InstantRipsOddsTier" + }, + "type": "array" }, - "market_cap": { - "description": "Market capitalisation of the company, as a plain number.", - "example": 4010000000000, - "type": "number" + "price": { + "$ref": "#/definitions/fanaticscollect.Money" }, - "open": { - "description": "Opening price of the trading day.", - "example": 270.9, - "type": "number" + "status": { + "type": "string" }, - "pe_ratio": { - "description": "Price-to-earnings ratio of the stock.", - "example": 34.56, - "type": "number" + "tier": { + "type": "integer" }, - "sector": { - "description": "Sector the company belongs to, for example `Technology`.", - "example": "Technology", + "title": { "type": "string" }, - "volume": { - "description": "Number of shares traded, as Google Finance shows it.", - "example": 41339643, - "type": "integer" + "variant": { + "type": "string" } }, "type": "object" }, - "finance.ContextResponse": { + "fanaticscollect.InstantRipsPackCategoriesResponse": { "properties": { - "items": { + "categories": { "items": { - "$ref": "#/definitions/finance.Instrument" + "$ref": "#/definitions/fanaticscollect.InstantRipsPackCategory" }, "type": "array" + } + }, + "type": "object" + }, + "fanaticscollect.InstantRipsPackCategory": { + "properties": { + "default_listing_id": { + "type": "string" }, - "query": { - "example": "apple", + "id": { + "type": "string" + }, + "name": { "type": "string" } }, "type": "object" }, - "finance.EarningsCalendarResponse": { + "fanaticscollect.InstantRipsPacksResponse": { "properties": { - "items": { - "description": "Upcoming earnings events from the Google Finance earnings calendar.", + "category_id": { + "type": "string" + }, + "packs": { "items": { - "$ref": "#/definitions/finance.EarningsEvent" + "$ref": "#/definitions/fanaticscollect.InstantRipsPack" }, "type": "array" } }, "type": "object" }, - "finance.EarningsEvent": { + "fanaticscollect.Listing": { "properties": { - "company_name": { - "description": "Name of the company reporting earnings.", - "type": "string" + "asking_price": { + "allOf": [ + { + "$ref": "#/definitions/fanaticscollect.Money" + } + ], + "description": "AskingPrice is set only for FIXED listings (the \"buy now\" price);\nWEEKLY/PREMIER auction lots price through StartingPrice/CurrentBid/\nSoldFor instead." }, - "conference_phone": { - "description": "Phone number for the earnings call.", + "auction": { + "$ref": "#/definitions/fanaticscollect.Auction" + }, + "bid_count": { + "type": "integer" + }, + "card_ladder": { + "$ref": "#/definitions/fanaticscollect.CardLadderEstimate" + }, + "certified_seller": { + "example": "Fanatics Collect", "type": "string" }, - "conference_url": { - "description": "URL of the earnings call.", + "current_bid": { + "$ref": "#/definitions/fanaticscollect.Money" + }, + "default_item_description": { "type": "string" }, - "event_time": { - "description": "Time of the earnings event, in UTC (RFC 3339).", + "description": { "type": "string" }, - "event_unix": { - "description": "Time of the earnings event, in Unix seconds.", + "favorited_count": { "type": "integer" }, - "fiscal_period": { - "description": "Fiscal period the earnings report covers.", + "id": { "type": "string" }, - "instrument": { - "allOf": [ - { - "$ref": "#/definitions/finance.Instrument" - } - ], - "description": "Instrument of the company reporting earnings." - } - }, - "type": "object" - }, - "finance.FinanceArticle": { - "properties": { - "published_at": { - "description": "Time the article was published, in UTC (RFC 3339).", + "images": { + "items": { + "$ref": "#/definitions/fanaticscollect.Images" + }, + "type": "array" + }, + "inserted_at": { "type": "string" }, - "published_unix": { - "description": "Time the article was published, in Unix seconds.", - "example": 1777077000, + "integer_id": { "type": "integer" }, - "related": { - "description": "Instruments mentioned in the article.", + "is_closed": { + "type": "boolean" + }, + "is_fanatics_authentic": { + "type": "boolean" + }, + "is_flash": { + "type": "boolean" + }, + "listing_type": { + "example": "WEEKLY", + "type": "string" + }, + "lot_string": { + "example": "WA1 Lot: 1417", + "type": "string" + }, + "marketplace_eye_appeal": { + "type": "string" + }, + "sale_history": { "items": { - "$ref": "#/definitions/finance.Instrument" + "$ref": "#/definitions/fanaticscollect.Sale" }, "type": "array" }, - "source": { - "description": "Name of the publisher of the article.", - "example": "Reuters", + "slug": { "type": "string" }, - "thumbnail_url": { - "description": "URL of the article thumbnail image.", + "sold_date": { + "type": "string" + }, + "sold_for": { + "$ref": "#/definitions/fanaticscollect.Money" + }, + "starting_price": { + "$ref": "#/definitions/fanaticscollect.Money" + }, + "status": { + "example": "STATUS_SOLD", + "type": "string" + }, + "subtitle": { "type": "string" }, "title": { - "description": "Headline of the article.", - "example": "Apple announces an update", + "type": "string" + }, + "updated_at": { "type": "string" }, "url": { - "description": "URL of the article on the publisher's site.", - "example": "https://example.com/news", "type": "string" + }, + "vault_item": { + "$ref": "#/definitions/fanaticscollect.VaultItem" } }, "type": "object" }, - "finance.FinancialPeriod": { + "fanaticscollect.Money": { "properties": { - "capital_expenditure": { - "description": "Capital expenditure for the period.", - "type": "number" - }, - "ebitda": { - "description": "Earnings before interest, taxes, depreciation and amortisation for the period.", + "amount": { + "example": 13.2, "type": "number" }, - "eps": { - "description": "Earnings per share for the period.", - "type": "number" + "currency": { + "example": "USD", + "type": "string" + } + }, + "type": "object" + }, + "fanaticscollect.NewsroomFilter": { + "properties": { + "id": { + "type": "integer" }, - "eps_diluted": { - "description": "Diluted earnings per share for the period.", - "type": "number" + "name": { + "type": "string" + } + }, + "type": "object" + }, + "fanaticscollect.NewsroomFiltersResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/fanaticscollect.NewsroomFilter" + }, + "type": "array" }, - "free_cash_flow": { - "description": "Free cash flow for the period.", - "type": "number" + "sorts": { + "items": { + "$ref": "#/definitions/fanaticscollect.NewsroomSort" + }, + "type": "array" }, - "net_income": { - "description": "Net income for the period, in the response currency.", - "type": "number" - }, - "operating_cash_flow": { - "description": "Cash flow from operations for the period.", - "type": "number" - }, - "operating_income": { - "description": "Operating income for the period.", - "type": "number" - }, - "operating_margin": { - "description": "Operating margin for the period.", - "type": "number" + "tags": { + "items": { + "$ref": "#/definitions/fanaticscollect.NewsroomFilter" + }, + "type": "array" + } + }, + "type": "object" + }, + "fanaticscollect.NewsroomPost": { + "properties": { + "category": { + "type": "string" }, - "pe_ratio": { - "description": "Price-to-earnings ratio for the period.", - "type": "number" + "id": { + "type": "integer" }, - "period": { - "description": "Period label: `annual` when the period ends in December, otherwise `quarterly`.", - "example": "annual", + "image_url": { "type": "string" }, - "period_end": { - "description": "End date of the reporting period, in UTC (RFC 3339).", + "published_at": { "type": "string" }, - "profit_margin": { - "description": "Profit margin for the period.", - "type": "number" - }, - "revenue": { - "description": "Total revenue for the period, in the response currency.", - "type": "number" - }, - "revenue_growth_yoy": { - "description": "Revenue growth compared with the same period a year earlier.", - "type": "number" - }, - "shares_outstanding": { - "description": "Number of shares outstanding for the period.", - "type": "number" + "thumbnail_url": { + "type": "string" }, - "total_assets": { - "description": "Total assets at the end of the period.", - "type": "number" + "title": { + "type": "string" }, - "total_equity": { - "description": "Total shareholder equity at the end of the period.", - "type": "number" + "type": { + "type": "string" }, - "total_liabilities": { - "description": "Total liabilities at the end of the period.", - "type": "number" + "url": { + "type": "string" } }, "type": "object" }, - "finance.FinancialsResponse": { + "fanaticscollect.NewsroomResponse": { "properties": { - "annual": { - "description": "Annual financial statement rows.", - "items": { - "$ref": "#/definitions/finance.FinancialPeriod" - }, - "type": "array" + "page": { + "type": "integer" }, - "currency": { - "description": "Currency code the amounts are reported in, for example `USD`.", - "example": "USD", - "type": "string" + "per_page": { + "type": "integer" }, - "quarterly": { - "description": "Quarterly financial statement rows.", + "posts": { "items": { - "$ref": "#/definitions/finance.FinancialPeriod" + "$ref": "#/definitions/fanaticscollect.NewsroomPost" }, "type": "array" + }, + "total": { + "type": "integer" + }, + "total_pages": { + "type": "integer" } }, "type": "object" }, - "finance.HeadlineResponse": { + "fanaticscollect.NewsroomSort": { "properties": { - "article": { - "$ref": "#/definitions/finance.FinanceArticle" + "key": { + "enum": [ + "newest", + "oldest" + ], + "type": "string" + }, + "label": { + "type": "string" } }, "type": "object" }, - "finance.IncomeStatement": { + "fanaticscollect.PackChecklistCard": { "properties": { - "earnings_per_share": { - "description": "Earnings per share in USD", - "example": 1.64, - "type": "number" - }, - "earnings_per_share_change_yy": { - "description": "Year-over-year change in earnings per share (%)", - "example": 12.33, - "type": "number" - }, - "ebitda": { - "description": "EBITDA (Earnings Before Interest, Taxes, Depreciation, and Amortization) in USD", - "example": 32502000000, - "type": "number" - }, - "ebitda_change_yy": { - "description": "Year-over-year change in EBITDA (%)", - "example": 9.72, - "type": "number" - }, - "effective_tax_rate": { - "description": "Effective tax rate (%)", - "example": 50.23, - "type": "number" + "brand": { + "type": "string" }, - "net_income": { - "description": "Net income in USD", - "example": 14740000000, - "type": "number" + "card_number": { + "type": "string" }, - "net_income_change_yy": { - "description": "Year-over-year change in net income (%)", - "example": -35.81, + "grade": { "type": "number" }, - "net_profit_margin": { - "description": "Net profit margin (%)", - "example": 15.52, - "type": "number" + "grader": { + "type": "string" }, - "net_profit_margin_change_yy": { - "description": "Year-over-year change in net profit margin (%)", - "example": -39.49, - "type": "number" + "id": { + "type": "string" }, - "operating_expense": { - "description": "Total operating expense in USD", - "example": 14736000000, - "type": "number" + "population": { + "type": "integer" }, - "operating_expense_change_yy": { - "description": "Year-over-year change in operating expense (%)", - "example": 6.17, - "type": "number" + "set": { + "type": "string" }, - "quarter": { - "description": "The fiscal quarter", - "example": 4, - "type": "integer" + "subject": { + "type": "string" }, - "revenue": { - "description": "Total revenue in USD", - "example": 94930000000, - "type": "number" + "tier": { + "type": "string" }, - "revenue_change_yy": { - "description": "Year-over-year change in revenue (%)", - "example": 6.07, - "type": "number" + "title": { + "type": "string" }, "year": { - "description": "The fiscal year", - "example": 2024, - "type": "integer" + "type": "string" } }, "type": "object" }, - "finance.Instrument": { + "fanaticscollect.PackChecklistResponse": { "properties": { - "after_hours": { - "allOf": [ - { - "$ref": "#/definitions/finance.PriceChange" - } - ], - "description": "Price and change in after-hours trading." - }, - "change": { - "description": "Price change shown by Google Finance, in the same unit as `price`.", - "example": -3.37, - "type": "number" - }, - "change_percent": { - "description": "Price change as a percentage, as Google Finance shows it.", - "example": -1.3, - "type": "number" + "cards": { + "items": { + "$ref": "#/definitions/fanaticscollect.PackChecklistCard" + }, + "type": "array" }, - "country": { - "description": "Country code of the instrument, for example `US`.", - "example": "US", + "checklist_id": { "type": "string" }, - "currency": { - "description": "Currency code the instrument is priced in, for example `USD`.", - "example": "USD", - "type": "string" + "has_next": { + "type": "boolean" }, - "exchange": { - "description": "Exchange the instrument trades on, for example `NASDAQ`.", - "example": "NASDAQ", + "next_cursor": { "type": "string" }, - "google_id": { - "description": "Google's id for the instrument, for example `/m/07zmbvf`.", - "example": "/m/07zmbvf", + "tier": { "type": "string" - }, - "identifier": { - "description": "Instrument identifier in `TICKER:EXCHANGE` form, for example `AAPL:NASDAQ`. Use it as the `quote` path parameter.", - "example": "AAPL:NASDAQ", + } + }, + "type": "object" + }, + "fanaticscollect.RecentlyRip": { + "properties": { + "card_image_url": { "type": "string" }, - "last_update_unix": { - "description": "Time of the latest price update, in Unix seconds.", - "example": 1777077000, - "type": "integer" - }, - "name": { - "description": "Instrument name, for example `Apple Inc`.", - "example": "Apple Inc", + "card_title": { "type": "string" }, - "previous_close": { - "description": "Closing price of the previous trading day.", - "example": 236.35, - "type": "number" - }, - "price": { - "description": "Latest price of the instrument.", - "example": 255.65, - "type": "number" + "item_type": { + "type": "string" }, - "ticker": { - "description": "Ticker symbol of the instrument.", - "example": "AAPL", + "pack_image_url": { "type": "string" }, - "timezone": { - "description": "IANA time zone of the instrument's market, for example `America/New_York`.", - "example": "America/New_York", + "pack_name": { "type": "string" }, - "type": { - "description": "Kind of instrument: `stock`, `index`, `crypto`, `etf` or `other`.", - "example": "stock", + "revealed_at": { "type": "string" } }, "type": "object" }, - "finance.Investment": { + "fanaticscollect.RecentlyRippedResponse": { "properties": { - "balance_sheet": { - "description": "The balance sheet data.", - "items": { - "$ref": "#/definitions/finance.BalanceSheet" - }, - "type": "array" + "checklist_id": { + "type": "string" }, - "cash_flow": { - "description": "The cash flow data.", + "items": { "items": { - "$ref": "#/definitions/finance.CashFlow" + "$ref": "#/definitions/fanaticscollect.RecentlyRip" }, "type": "array" + } + }, + "type": "object" + }, + "fanaticscollect.Sale": { + "properties": { + "sold_date": { + "type": "string" }, - "income_statement": { - "description": "The income statement data.", + "sold_for": { + "$ref": "#/definitions/fanaticscollect.Money" + } + }, + "type": "object" + }, + "fanaticscollect.SearchResponse": { + "properties": { + "page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "query": { + "type": "string" + }, + "results": { "items": { - "$ref": "#/definitions/finance.IncomeStatement" + "$ref": "#/definitions/fanaticscollect.SearchResult" }, "type": "array" + }, + "total": { + "type": "integer" + }, + "total_pages": { + "type": "integer" } }, "type": "object" }, - "finance.KeyStats": { + "fanaticscollect.SearchResult": { "properties": { - "avg_volume": { - "description": "The average trading volume.", - "example": 1510000, - "type": "integer" + "allow_offers": { + "type": "boolean" }, - "climate_change_score": { - "description": "The climate change score of the company.", - "example": "B", + "asking_price": { + "$ref": "#/definitions/fanaticscollect.Money" + }, + "auction_name": { "type": "string" }, - "currency": { - "description": "The currency of the stock price.", - "example": "EUR", + "auction_urn": { "type": "string" }, - "day_range": { - "allOf": [ - { - "$ref": "#/definitions/finance.Range" - } - ], - "description": "The day's price range." + "brand": { + "type": "string" }, - "dividend_yield": { - "description": "The dividend yield percentage.", - "example": 0.0092, - "type": "number" + "card_number": { + "type": "string" }, - "market_cap": { - "description": "The market capitalization of the company.", - "example": 291570000000, + "category_parent": { + "type": "string" + }, + "certified_seller": { + "type": "string" + }, + "current_price": { + "$ref": "#/definitions/fanaticscollect.Money" + }, + "fanatics_authentic": { + "type": "boolean" + }, + "favorited_count": { "type": "integer" }, - "pe_ratio": { - "description": "The price-to-earnings ratio.", - "example": 99.95, + "grade": { "type": "number" }, - "previous_close": { - "description": "The previous closing price of the stock.", - "example": 236.35, - "type": "number" + "grading_service": { + "type": "string" }, - "primary_exchange": { - "description": "The primary exchange where the stock is listed.", - "example": "ETR", + "great_price": { + "type": "boolean" + }, + "has_offers": { + "type": "boolean" + }, + "id": { "type": "string" }, - "tags": { - "description": "Tags describing the stock.", - "example": [ - "[\"Stock\"", - " \"DE listed security\"", - " \"DE headquartered\"]" - ], + "image_primary": { + "type": "string" + }, + "image_secondary": { + "type": "string" + }, + "lot_number": { + "type": "string" + }, + "marketplace": { + "type": "string" + }, + "seller_id": { + "type": "string" + }, + "serial": { + "type": "string" + }, + "status": { + "type": "string" + }, + "sub_categories": { "items": { "type": "string" }, "type": "array" }, - "year_range": { - "allOf": [ - { - "$ref": "#/definitions/finance.Range" - } - ], - "description": "The year's price range." - } - }, - "type": "object" - }, - "finance.MarketMoversResponse": { - "properties": { - "categories": { - "description": "Numeric category ids the movers were filtered by.", + "subtitle": { + "type": "string" + }, + "teams": { "items": { - "type": "integer" + "type": "string" }, "type": "array" }, - "count": { - "description": "Number of instruments requested.", - "example": 20, - "type": "integer" + "title": { + "type": "string" }, - "items": { - "description": "Market mover instruments.", - "items": { - "$ref": "#/definitions/finance.Instrument" - }, - "type": "array" + "url": { + "type": "string" }, - "offset": { - "description": "Number of instruments skipped before this page.", - "example": 0, + "year": { "type": "integer" } }, "type": "object" }, - "finance.News": { + "fanaticscollect.SoldItem": { "properties": { - "source": { - "description": "The source of the news.", - "example": "Reuters", + "category": { "type": "string" }, - "time": { - "description": "The publication time of the news.", - "example": "2024-12-27T09:03:00Z", + "eye_appeal_grade": { "type": "string" }, - "title": { - "description": "The title of the news article.", - "example": "SAP Announces Q3 Earnings", + "grade": { + "type": "number" + }, + "grading_service": { "type": "string" }, - "url": { - "description": "The URL to the news article.", - "example": "https://www.reuters.com/article/sap-q3", + "id": { "type": "string" - } - }, - "type": "object" - }, - "finance.PriceChange": { - "properties": { - "change": { - "description": "Price change, in the same unit as `price`.", - "example": -3.37, - "type": "number" }, - "change_percent": { - "description": "Price change as a percentage.", - "example": -1.3, - "type": "number" + "image_medium": { + "type": "string" }, - "price": { - "description": "Price in after-hours trading.", - "example": 255.65, - "type": "number" - } - }, - "type": "object" - }, - "finance.QuoteResp": { - "properties": { - "about": { - "allOf": [ - { - "$ref": "#/definitions/finance.About" - } - ], - "description": "Information about the company." + "image_thumbnail": { + "type": "string" }, - "investment": { - "allOf": [ - { - "$ref": "#/definitions/finance.Investment" - } - ], - "description": "The investment-related data." + "listing_id": { + "type": "string" }, - "key_stats": { - "allOf": [ - { - "$ref": "#/definitions/finance.KeyStats" - } - ], - "description": "The key statistics about the stock." + "marketplace": { + "example": "FIXED", + "type": "string" }, - "news": { - "description": "The news related to the stock/company.", - "items": { - "$ref": "#/definitions/finance.News" - }, - "type": "array" + "purchase_price": { + "$ref": "#/definitions/fanaticscollect.Money" }, - "tickers": { - "description": "Historical ticker data.", - "items": { - "$ref": "#/definitions/finance.Ticker" - }, - "type": "array" + "serial": { + "type": "string" + }, + "sold_date": { + "type": "string" + }, + "subtitle": { + "type": "string" }, "title": { - "description": "The title or name of the stock/company.", - "example": "SAP SE", "type": "string" - } - }, - "type": "object" - }, - "finance.Range": { - "properties": { - "from": { - "description": "The lower bound of the range.", - "example": 237.95, - "type": "number" }, - "to": { - "description": "The upper bound of the range.", - "example": 241.4, - "type": "number" + "url": { + "type": "string" + }, + "year": { + "type": "integer" } }, "type": "object" }, - "finance.RelatedResponse": { + "fanaticscollect.SoldItemsResponse": { "properties": { - "instrument": { - "allOf": [ - { - "$ref": "#/definitions/finance.Instrument" - } - ], - "description": "Instrument the related list is for." + "page": { + "type": "integer" }, - "items": { - "description": "Instruments Google Finance lists as related.", + "per_page": { + "type": "integer" + }, + "results": { "items": { - "$ref": "#/definitions/finance.Instrument" + "$ref": "#/definitions/fanaticscollect.SoldItem" }, "type": "array" + }, + "total": { + "type": "integer" + }, + "total_pages": { + "type": "integer" } }, "type": "object" }, - "finance.StockData": { + "fanaticscollect.SortOption": { "properties": { - "change": { - "description": "The absolute change in the stock price compared to the previous close.", - "example": -3.369995, - "type": "number" - }, - "company_name": { - "description": "The name of the company associated with the stock ticker.", - "example": "Apple Inc", - "type": "string" - }, - "currency": { - "description": "The currency in which the stock price is denominated.", - "example": "USD", - "type": "string" - }, - "exchange": { - "description": "The stock exchange where the stock is listed.", - "example": "NASDAQ", + "display_name": { + "example": "Best Value", "type": "string" }, - "percentage": { - "description": "The percentage change in the stock price compared to the previous close.", - "example": -1.301056, - "type": "number" - }, - "price": { - "description": "The current price of the stock.", - "example": 255.65, - "type": "number" - }, - "ticker": { - "description": "The stock ticker symbol.", - "example": "AAPL", + "value": { + "example": "best_value", "type": "string" } }, "type": "object" }, - "finance.Ticker": { + "fanaticscollect.SubCategory": { "properties": { - "price": { - "description": "The price at the given time.", - "example": 239.5, - "type": "number" + "category_parent": { + "example": "Sports Cards", + "type": "string" }, - "time": { - "description": "The time of the ticker record.", - "example": "2024-12-27T09:03:00Z", + "name": { + "example": "Baseball", "type": "string" }, - "volume": { - "description": "The trading volume at the given time.", - "example": 131032, - "type": "integer" + "path": { + "example": "Sports Cards > Baseball", + "type": "string" } }, "type": "object" }, - "finance.TopStocksResponse": { + "fanaticscollect.TrendingSearchesResponse": { "properties": { - "items": { - "description": "Top instruments for the selected metric.", + "terms": { "items": { - "$ref": "#/definitions/finance.Instrument" + "type": "string" }, "type": "array" - }, - "metric": { - "description": "Google Finance metric id that was applied.", - "example": 6, - "type": "integer" - }, - "page": { - "description": "Page number returned.", - "example": 1, - "type": "integer" } }, "type": "object" }, - "finance.articlesResponseDoc": { + "fanaticscollect.VaultItem": { "properties": { - "code": { - "example": 200, + "grading_service_url": { + "example": "https://www.psacard.com/cert/43185259/psa", + "type": "string" + }, + "id": { + "type": "string" + }, + "integer_id": { "type": "integer" }, - "data": { + "origin_label": { + "type": "string" + }, + "origin_type": { + "type": "string" + }, + "safe_market_value": { + "$ref": "#/definitions/fanaticscollect.Money" + }, + "similar_item_transactions": { "items": { - "$ref": "#/definitions/finance.FinanceArticle" + "$ref": "#/definitions/fanaticscollect.Sale" }, "type": "array" }, - "msg": { - "example": "OK", + "suggested_asking_price": { + "$ref": "#/definitions/fanaticscollect.Money" + }, + "video_url": { "type": "string" } }, "type": "object" }, - "finance.categoryNewsResponseDoc": { + "fanaticscollect.auctionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/finance.CategoryNewsResponse" + "$ref": "#/definitions/fanaticscollect.AuctionsResponse" }, "msg": { "example": "OK", @@ -80165,14 +85119,14 @@ }, "type": "object" }, - "finance.categoryStocksResponseDoc": { + "fanaticscollect.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/finance.CategoryStocksResponse" + "$ref": "#/definitions/fanaticscollect.Categories" }, "msg": { "example": "OK", @@ -80181,14 +85135,14 @@ }, "type": "object" }, - "finance.chartResponseDoc": { + "fanaticscollect.instantRipsCategoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/finance.ChartResponse" + "$ref": "#/definitions/fanaticscollect.InstantRipsCategoriesResponse" }, "msg": { "example": "OK", @@ -80197,14 +85151,14 @@ }, "type": "object" }, - "finance.classificationResponseDoc": { + "fanaticscollect.listingResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/finance.ClassificationResponse" + "$ref": "#/definitions/fanaticscollect.Listing" }, "msg": { "example": "OK", @@ -80213,14 +85167,14 @@ }, "type": "object" }, - "finance.companyResponseDoc": { + "fanaticscollect.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/finance.CompanyInfo" + "$ref": "#/definitions/fanaticscollect.SearchResponse" }, "msg": { "example": "OK", @@ -80229,14 +85183,14 @@ }, "type": "object" }, - "finance.contextResponseDoc": { + "fanaticscollect.soldItemsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/finance.ContextResponse" + "$ref": "#/definitions/fanaticscollect.SoldItemsResponse" }, "msg": { "example": "OK", @@ -80245,14 +85199,14 @@ }, "type": "object" }, - "finance.earningsResponseDoc": { + "fanaticscollect.trendingSearchesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/finance.EarningsCalendarResponse" + "$ref": "#/definitions/fanaticscollect.TrendingSearchesResponse" }, "msg": { "example": "OK", @@ -80261,378 +85215,655 @@ }, "type": "object" }, - "finance.financialsResponseDoc": { + "fanaticslive.BreakSpotsCounts": { "properties": { - "code": { - "example": 200, + "available": { "type": "integer" }, - "data": { - "$ref": "#/definitions/finance.FinancialsResponse" + "claimed": { + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "finance.headlineResponseDoc": { + "fanaticslive.BreakSummary": { "properties": { - "code": { - "example": 200, - "type": "integer" + "id": { + "type": "string" }, - "data": { - "$ref": "#/definitions/finance.HeadlineResponse" + "minimum_bid": { + "$ref": "#/definitions/fanaticslive.Money" }, - "msg": { - "example": "OK", + "pricing_type": { + "enum": [ + "SET_PRICE" + ], + "example": "SET_PRICE", + "type": "string" + }, + "status": { + "enum": [ + "READY", + "RIPPING", + "COMPLETE" + ], + "example": "READY", + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "enum": [ + "PERSONAL", + "GROUP" + ], + "example": "PERSONAL", "type": "string" } }, "type": "object" }, - "finance.instrumentsResponseDoc": { + "fanaticslive.BrowseResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "league": { + "type": "string" }, - "data": { + "shows": { "items": { - "$ref": "#/definitions/finance.Instrument" + "$ref": "#/definitions/fanaticslive.LiveShow" }, "type": "array" - }, - "msg": { - "example": "OK", - "type": "string" } }, "type": "object" }, - "finance.marketMoversResponseDoc": { + "fanaticslive.ChannelResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "id": { + "type": "string" }, - "data": { - "$ref": "#/definitions/finance.MarketMoversResponse" + "live_shows": { + "description": "LiveShows and ReplayShows are each capped to the first page (see\nGET /fanaticslive/shop/{slug}/shows for cursor-paginated access to a\nchannel's full show history via its parent shop).", + "items": { + "$ref": "#/definitions/fanaticslive.LiveShow" + }, + "type": "array" }, - "msg": { - "example": "OK", + "logo_url": { + "type": "string" + }, + "name": { "type": "string" + }, + "replay_shows": { + "items": { + "$ref": "#/definitions/fanaticslive.LiveShow" + }, + "type": "array" + }, + "shop": { + "$ref": "#/definitions/fanaticslive.ChannelShopSummary" } }, "type": "object" }, - "finance.quoteResponseDoc": { + "fanaticslive.ChannelShopSummary": { "properties": { - "code": { - "example": 200, - "type": "integer" + "id": { + "type": "string" }, - "data": { - "$ref": "#/definitions/finance.QuoteResp" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "slug": { "type": "string" } }, "type": "object" }, - "finance.relatedResponseDoc": { + "fanaticslive.CurrentBreak": { "properties": { - "code": { - "example": 200, - "type": "integer" + "break_spots_counts": { + "$ref": "#/definitions/fanaticslive.BreakSpotsCounts" }, - "data": { - "$ref": "#/definitions/finance.RelatedResponse" + "id": { + "type": "string" }, - "msg": { - "example": "OK", + "minimum_bid": { + "$ref": "#/definitions/fanaticslive.Money" + }, + "pricing_type": { + "description": "PricingType: SET_PRICE was observed live; Fanatics Live's own bid/\nbidV2 mutations and currentBreakSpotAuction field strongly imply an\nauction-priced value also exists but it was not observed live.", + "enum": [ + "SET_PRICE" + ], + "example": "SET_PRICE", + "type": "string" + }, + "status": { + "description": "Status: READY, RIPPING, and COMPLETE were observed live; other\ntransitional states almost certainly also exist but were not\nobserved.", + "enum": [ + "READY", + "RIPPING", + "COMPLETE" + ], + "example": "READY", + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "description": "Type: PERSONAL (single buyer) and GROUP (sold by the spot) were\nobserved live.", + "enum": [ + "PERSONAL", + "GROUP" + ], + "example": "PERSONAL", "type": "string" } }, "type": "object" }, - "finance.searchResponseDoc": { + "fanaticslive.CurrentInstantRipBreakSpot": { "properties": { - "code": { - "example": 200, - "type": "integer" + "digital_rip_status": { + "type": "string" }, - "data": { + "id": { + "type": "string" + }, + "items": { "items": { - "$ref": "#/definitions/finance.StockData" + "$ref": "#/definitions/fanaticslive.InstantRipItem" }, "type": "array" }, - "msg": { - "example": "OK", + "user": { + "$ref": "#/definitions/fanaticslive.InstantRipUser" + } + }, + "type": "object" + }, + "fanaticslive.InstantRipBreakProduct": { + "properties": { + "is_digital": { + "type": "boolean" + }, + "product_id": { "type": "string" } }, "type": "object" }, - "finance.tickerResponseDoc": { + "fanaticslive.InstantRipBreakSpot": { "properties": { - "code": { - "example": 200, - "type": "integer" + "digital_rip_status": { + "type": "string" }, - "data": { + "id": { + "type": "string" + } + }, + "type": "object" + }, + "fanaticslive.InstantRipItem": { + "properties": { + "grading_service": { + "type": "string" + }, + "id": { + "type": "string" + }, + "image_urls": { "items": { - "$ref": "#/definitions/finance.Ticker" + "type": "string" }, "type": "array" }, - "msg": { - "example": "OK", + "item_type": { + "description": "ItemType and RevealState value spaces are unconfirmed -- see the\nInstantRipBreakSpot doc comment; no live instant rip was in progress\nduring research to observe real values.", + "type": "string" + }, + "reveal_state": { + "type": "string" + }, + "title": { "type": "string" } }, "type": "object" }, - "finance.topStocksResponseDoc": { + "fanaticslive.InstantRipUser": { "properties": { - "code": { - "example": 200, - "type": "integer" + "avatar_url": { + "type": "string" }, - "data": { - "$ref": "#/definitions/finance.TopStocksResponse" + "id": { + "type": "string" }, - "msg": { - "example": "OK", + "username": { "type": "string" } }, "type": "object" }, - "firstdibs.CategoriesResponse": { + "fanaticslive.InstantRipsBreak": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/firstdibs.Category" - }, - "type": "array" + "current_instant_rip_break_spot": { + "$ref": "#/definitions/fanaticslive.CurrentInstantRipBreakSpot" }, - "filter_values": { - "additionalProperties": { - "items": { - "type": "string" - }, - "type": "array" - }, - "type": "object" + "id": { + "type": "string" }, - "price_presets": { + "products": { "items": { - "type": "string" + "$ref": "#/definitions/fanaticslive.InstantRipBreakProduct" }, "type": "array" }, - "sorts": { + "spots": { "items": { - "type": "string" + "$ref": "#/definitions/fanaticslive.InstantRipBreakSpot" }, "type": "array" + }, + "status": { + "enum": [ + "READY", + "RIPPING", + "COMPLETE" + ], + "example": "READY", + "type": "string" } }, "type": "object" }, - "firstdibs.Category": { + "fanaticslive.InstantRipsResponse": { "properties": { - "name": { + "channel_name": { "type": "string" }, - "slug": { + "current_break": { + "allOf": [ + { + "$ref": "#/definitions/fanaticslive.InstantRipsBreak" + } + ], + "description": "CurrentBreak is nil when the show has no active break at request\ntime (confirmed live: mirrors Show.CurrentBreak's nullability)." + }, + "shop_name": { "type": "string" }, - "url": { + "show_id": { "type": "string" } }, "type": "object" }, - "firstdibs.Designer": { + "fanaticslive.League": { "properties": { - "name": { + "id": { "type": "string" }, - "slug": { + "logo_url": { "type": "string" }, - "url": { + "name": { + "type": "string" + }, + "type": { "type": "string" } }, "type": "object" }, - "firstdibs.DesignersResponse": { + "fanaticslive.LeaguesResponse": { "properties": { - "count": { - "type": "integer" - }, - "designers": { + "leagues": { "items": { - "$ref": "#/definitions/firstdibs.Designer" + "$ref": "#/definitions/fanaticslive.League" }, "type": "array" } }, "type": "object" }, - "firstdibs.Detail": { + "fanaticslive.LiveShow": { "properties": { - "brand": { - "type": "string" - }, - "category": { - "type": "string" + "channel": { + "$ref": "#/definitions/fanaticslive.LiveShowChannel" }, - "currency": { + "cover_image_url": { "type": "string" }, "description": { "type": "string" }, "id": { + "description": "pass as the :id path param to /fanaticslive/show/{id}", "type": "string" }, - "images": { + "leagues": { "items": { "type": "string" }, "type": "array" }, - "in_stock": { - "type": "boolean" + "name": { + "type": "string" + }, + "starts_at": { + "type": "string" + }, + "status": { + "description": "Status is the show's own lifecycle state: ACTIVE (currently live),\nPREPARING (scheduled, not yet started), or COMPLETE (ended -- confirmed\nlive 2026-09-16 via a shop's replay list; ended shows drop out of\nFanatics Live's own league/browse feeds essentially immediately, which\nis why COMPLETE only ever surfaces through a replay-scoped list like\nGET /fanaticslive/shop/{slug}/shows?status=replay, never from Browse).", + "enum": [ + "ACTIVE", + "PREPARING", + "COMPLETE" + ], + "example": "ACTIVE", + "type": "string" + }, + "viewers": { + "type": "integer" + } + }, + "type": "object" + }, + "fanaticslive.LiveShowChannel": { + "properties": { + "id": { + "type": "string" }, "name": { "type": "string" }, - "price": { + "shop": { + "$ref": "#/definitions/fanaticslive.LiveShowShop" + } + }, + "type": "object" + }, + "fanaticslive.LiveShowShop": { + "properties": { + "id": { + "type": "string" + }, + "logo_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "slug": { + "type": "string" + } + }, + "type": "object" + }, + "fanaticslive.Money": { + "properties": { + "amount": { "type": "number" }, - "url": { + "amount_display": { + "type": "string" + }, + "currency": { "type": "string" } }, "type": "object" }, - "firstdibs.Facets": { + "fanaticslive.ShopChannel": { "properties": { - "categories": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "fanaticslive.ShopLinks": { + "properties": { + "instagram": { + "type": "string" + }, + "tiktok": { + "type": "string" + }, + "web": { + "type": "string" + }, + "x": { + "type": "string" + }, + "youtube": { + "type": "string" + } + }, + "type": "object" + }, + "fanaticslive.ShopResponse": { + "properties": { + "channels": { "items": { - "$ref": "#/definitions/firstdibs.Category" + "$ref": "#/definitions/fanaticslive.ShopChannel" }, "type": "array" }, - "designers": { + "country": { + "type": "string" + }, + "description": { + "type": "string" + }, + "follower_count": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "links": { + "$ref": "#/definitions/fanaticslive.ShopLinks" + }, + "logo_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "staffers": { "items": { - "$ref": "#/definitions/firstdibs.Designer" + "$ref": "#/definitions/fanaticslive.ShopStaffer" }, "type": "array" + } + }, + "type": "object" + }, + "fanaticslive.ShopShowsResponse": { + "properties": { + "has_more": { + "type": "boolean" }, - "price_presets": { + "next_cursor": { + "type": "string" + }, + "shows": { "items": { - "type": "string" + "$ref": "#/definitions/fanaticslive.LiveShow" }, "type": "array" }, - "sorts": { + "slug": { + "type": "string" + }, + "status": { + "enum": [ + "live", + "replay" + ], + "example": "live", + "type": "string" + } + }, + "type": "object" + }, + "fanaticslive.ShopStaffer": { + "properties": { + "id": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "fanaticslive.ShopSummary": { + "properties": { + "follower_count": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "logo_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "slug": { + "description": "pass as the :slug path param to /fanaticslive/shop/{slug}", + "type": "string" + } + }, + "type": "object" + }, + "fanaticslive.ShopsResponse": { + "properties": { + "shops": { "items": { - "type": "string" + "$ref": "#/definitions/fanaticslive.ShopSummary" }, "type": "array" } }, "type": "object" }, - "firstdibs.Product": { + "fanaticslive.ShowChannel": { "properties": { - "brand": { - "type": "string" - }, - "category": { + "id": { "type": "string" }, - "currency": { + "name": { "type": "string" }, + "shop": { + "$ref": "#/definitions/fanaticslive.ShowChannelShop" + } + }, + "type": "object" + }, + "fanaticslive.ShowChannelShop": { + "properties": { "description": { "type": "string" }, + "follower_count": { + "type": "integer" + }, "id": { "type": "string" }, - "image_url": { + "logo_url": { "type": "string" }, - "in_stock": { - "type": "boolean" - }, "name": { "type": "string" }, - "price": { - "type": "number" - }, - "url": { + "slug": { "type": "string" } }, "type": "object" }, - "firstdibs.SearchResponse": { + "fanaticslive.ShowResponse": { "properties": { - "category": { + "breaks": { + "items": { + "$ref": "#/definitions/fanaticslive.BreakSummary" + }, + "type": "array" + }, + "channel": { + "$ref": "#/definitions/fanaticslive.ShowChannel" + }, + "country": { "type": "string" }, - "count": { - "type": "integer" + "cover_image_url": { + "type": "string" }, - "facets": { - "$ref": "#/definitions/firstdibs.Facets" + "current_break": { + "$ref": "#/definitions/fanaticslive.CurrentBreak" }, - "page": { - "type": "integer" + "description": { + "type": "string" }, - "per_page": { - "type": "integer" + "id": { + "type": "string" }, - "products": { + "leagues": { "items": { - "$ref": "#/definitions/firstdibs.Product" + "type": "string" }, "type": "array" }, - "query": { + "name": { "type": "string" }, - "source_url": { + "starts_at": { "type": "string" }, - "total": { + "status": { + "description": "Status: see LiveShow.Status for the full confirmed enum.", + "enum": [ + "ACTIVE", + "PREPARING", + "COMPLETE" + ], + "example": "ACTIVE", + "type": "string" + }, + "viewers": { "type": "integer" } }, "type": "object" }, - "firstdibs.categoriesDoc": { + "fanaticslive.browseResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/firstdibs.CategoriesResponse" + "$ref": "#/definitions/fanaticslive.BrowseResponse" }, "msg": { "example": "OK", @@ -80641,14 +85872,14 @@ }, "type": "object" }, - "firstdibs.designersDoc": { + "fanaticslive.channelResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/firstdibs.DesignersResponse" + "$ref": "#/definitions/fanaticslive.ChannelResponse" }, "msg": { "example": "OK", @@ -80657,14 +85888,14 @@ }, "type": "object" }, - "firstdibs.productDoc": { + "fanaticslive.instantRipsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/firstdibs.Detail" + "$ref": "#/definitions/fanaticslive.InstantRipsResponse" }, "msg": { "example": "OK", @@ -80673,14 +85904,14 @@ }, "type": "object" }, - "firstdibs.searchDoc": { + "fanaticslive.leaguesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/firstdibs.SearchResponse" + "$ref": "#/definitions/fanaticslive.LeaguesResponse" }, "msg": { "example": "OK", @@ -80689,2010 +85920,2352 @@ }, "type": "object" }, - "fiveguys.DayHours": { + "fanaticslive.shopResponseDoc": { "properties": { - "closed": { - "example": false, - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "open_intervals": { - "items": { - "$ref": "#/definitions/fiveguys.TimeInterval" - }, - "type": "array" + "data": { + "$ref": "#/definitions/fanaticslive.ShopResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "fiveguys.DirectoryChild": { + "fanaticslive.shopShowsResponseDoc": { "properties": { - "city": { - "description": "City/Region are set only on a store-level child.", - "example": "Chicago", - "type": "string" - }, - "geomodifier": { - "description": "Geomodifier is the per-restaurant area/plaza label, set only on a\nstore-level child (e.g. \"Medical District\").", - "example": "Medical District", - "type": "string" - }, - "is_location": { - "description": "IsLocation marks a child that is a restaurant rather than another\ndirectory level -- call GET /fiveguys/store with its path.", - "example": false, - "type": "boolean" - }, - "location_count": { - "description": "LocationCount is how many restaurants sit under this branch, as Yext\nreports it. Absent at the deepest level, where children are\nrestaurants themselves.", - "example": 38, + "code": { + "example": 200, "type": "integer" }, - "name": { - "description": "Name is the state or city name. Empty on a store-level child, whose\nname is always the generic brand name -- read Geomodifier there.", - "example": "Illinois", - "type": "string" - }, - "path": { - "example": "il", - "type": "string" - }, - "region": { - "example": "IL", - "type": "string" + "data": { + "$ref": "#/definitions/fanaticslive.ShopShowsResponse" }, - "url": { - "example": "https://restaurants.fiveguys.com/il", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "fiveguys.DirectoryCrumb": { + "fanaticslive.shopsResponseDoc": { "properties": { - "name": { - "example": "Illinois", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "path": { - "description": "Path feeds GET /fiveguys/directory's path. Empty on the root crumb,\nwhich is that endpoint's own default (omit path for the root).", - "example": "il", + "data": { + "$ref": "#/definitions/fanaticslive.ShopsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "fiveguys.DirectoryResponse": { + "fanaticslive.showResponseDoc": { "properties": { - "children": { - "items": { - "$ref": "#/definitions/fiveguys.DirectoryChild" - }, - "type": "array" - }, - "count": { - "example": 34, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "example": "2026-09-05T12:00:00Z", - "type": "string" - }, - "name": { - "example": "Illinois", - "type": "string" - }, - "path": { - "example": "il", - "type": "string" + "data": { + "$ref": "#/definitions/fanaticslive.ShowResponse" }, - "source_url": { - "example": "https://restaurants.fiveguys.com/il", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "fiveguys.FAQCategoriesResponse": { + "fanduel.CasinoCategoriesResponse": { "properties": { "categories": { "items": { - "$ref": "#/definitions/fiveguys.FAQCategory" + "$ref": "#/definitions/fanduel.CasinoCategory" }, "type": "array" }, - "count": { - "example": 17, - "type": "integer" - }, "fetched_at": { "type": "string" }, - "source_url": { + "lobby": { + "type": "string" + }, + "region": { "type": "string" + }, + "regions": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "fiveguys.FAQCategory": { + "fanduel.CasinoCategory": { "properties": { - "entry_count": { - "description": "EntryCount is how many published FAQ entries carry this category, as\nreported by WordPress's own term counter.", - "example": 34, - "type": "integer" - }, - "id": { - "example": 21, - "type": "integer" - }, - "name": { - "example": "Menu", + "note": { "type": "string" }, "slug": { - "example": "menu", + "type": "string" + }, + "title": { "type": "string" } }, "type": "object" }, - "fiveguys.FAQEntry": { + "fanduel.CasinoCategoryResponse": { "properties": { - "answer": { + "badges": { + "items": { + "$ref": "#/definitions/fanduel.CasinoCount" + }, + "type": "array" + }, + "cached_at": { "type": "string" }, - "answer_html": { + "category": { + "$ref": "#/definitions/fanduel.CasinoCategory" + }, + "category_total": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "categories": { + "games": { "items": { - "$ref": "#/definitions/fiveguys.TaxonomyRef" + "$ref": "#/definitions/fanduel.CasinoGame" }, "type": "array" }, - "id": { - "example": 4817, + "limit": { "type": "integer" }, - "modified_at": { - "example": "2026-06-30T20:29:34Z", + "lobby": { "type": "string" }, - "page_url": { - "type": "string" + "offset": { + "type": "integer" }, - "question": { - "example": "I'm writing a story about Five Guys. Who should I contact?", + "providers": { + "items": { + "$ref": "#/definitions/fanduel.CasinoCount" + }, + "type": "array" + }, + "region": { "type": "string" }, - "slug": { - "example": "im-writing-a-story-about-five-guys-who-should-i-contact", + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "fanduel.CasinoCount": { + "properties": { + "count": { + "type": "integer" + }, + "value": { "type": "string" } }, "type": "object" }, - "fiveguys.FAQResponse": { + "fanduel.CasinoGame": { "properties": { - "entries": { - "items": { - "$ref": "#/definitions/fiveguys.FAQEntry" - }, - "type": "array" + "badge": { + "type": "string" }, - "fetched_at": { + "game_url": { "type": "string" }, - "pagination": { - "$ref": "#/definitions/fiveguys.pagination" + "name": { + "type": "string" }, - "source_url": { + "position": { + "type": "integer" + }, + "provider": { + "type": "string" + }, + "site_wide_jackpot": { + "type": "boolean" + }, + "slug": { "type": "string" } }, "type": "object" }, - "fiveguys.Location": { + "fanduel.CasinoGameResponse": { "properties": { - "address": { - "$ref": "#/definitions/fiveguys.LocationAddress" - }, - "delivery_hours": { - "allOf": [ - { - "$ref": "#/definitions/fiveguys.WeeklyHours" - } - ], - "description": "DeliveryHours is this location's delivery-order cutoff schedule, kept\nseparate from Hours (in-store hours) because Yext publishes the two\nindependently and they can differ -- confirmed live 2026-09-05: a\nChicago location open in-store until midnight cuts delivery off at\n23:45. Nil when Yext has not published a delivery schedule for this\nlocation (e.g. it does not offer delivery)." - }, - "delivery_url": { + "badge": { "type": "string" }, - "distance_kilometers": { - "example": 0.74, - "type": "number" - }, - "distance_miles": { - "description": "DistanceMiles/DistanceKilometers are measured from the resolved\nsearch center -- the coordinate GET /fiveguys/nearby was given, or\nthe location GET /fiveguys/search's `query` text resolved to.", - "example": 0.46, - "type": "number" + "bet_range": { + "type": "string" }, - "geomodifier": { - "description": "Geomodifier is Yext's short area/plaza descriptor for this location\n(e.g. \"Michigan Ave\", \"Medical District\") -- every location's Name is\nthe generic brand name \"Five Guys\", so Geomodifier is the field that\nactually distinguishes one result from another the way\nrestaurants.fiveguys.com's own location pages title themselves\n(\"Five Guys Medical District\"). Empty when Yext has not published one.", - "example": "Michigan Ave", + "category": { "type": "string" }, - "google_place_id": { - "description": "GooglePlaceID is this location's Google Places identifier, when Yext\nhas published one, matching this repo's other Yext-family locators.", - "example": "ChIJHTEJ8EgtDogRepA4KPyvUCU", + "description": { "type": "string" }, - "hours": { - "$ref": "#/definitions/fiveguys.WeeklyHours" + "features": { + "items": { + "type": "string" + }, + "type": "array" }, - "id": { - "description": "ID is Yext's internal entity id for this restaurant.", - "example": "4020", + "fetched_at": { "type": "string" }, - "latitude": { - "description": "Latitude/Longitude are Yext's display coordinate (rooftop-accurate\npin location), falling back to the raw geocoded coordinate when Yext\nhas not published a display override.", - "example": 41.885572, + "game_id": { + "type": "string" + }, + "max_bet": { "type": "number" }, - "longitude": { - "example": -87.624864, + "min_bet": { "type": "number" }, - "menu_url": { + "name": { "type": "string" }, - "name": { - "example": "Five Guys", + "players_now": { + "type": "integer" + }, + "provider_name": { "type": "string" }, - "order_url": { - "description": "OrderURL and DeliveryURL point at order.fiveguys.com, which this\nrepo cannot reach (confirmed hard wall -- see service.go); they are\nstill published here since Five Guys publishes them and a caller may\nwant to hand the URL to an end user.", + "provider_ref": { "type": "string" }, - "path": { - "description": "Path is the restaurants.fiveguys.com slug for this location.", - "example": "180-n-michigan-ave", + "region": { "type": "string" }, - "phone": { - "example": "+13122919686", + "slug": { "type": "string" }, - "pickup_and_delivery_services": { - "description": "PickupAndDeliveryServices are Five Guys' own fulfillment-channel\nlabels, e.g. \"In-Store Pickup\".", - "items": { - "type": "string" - }, - "type": "array" + "studio": { + "type": "string" }, - "price_range": { - "example": "$", + "summary_tag": { "type": "string" }, - "services": { - "description": "Services are Five Guys' own restaurant-amenity labels for this\nlocation, e.g. \"Takeout\", \"Dine In\", \"Curbside\", \"Mobile Ordering\".", + "themes": { "items": { "type": "string" }, "type": "array" }, - "timezone": { - "example": "America/Chicago", + "trend": { "type": "string" }, - "website_url": { - "example": "https://restaurants.fiveguys.com/180-n-michigan-ave", + "url": { + "type": "string" + }, + "volatility": { "type": "string" } }, "type": "object" }, - "fiveguys.LocationAddress": { + "fanduel.QuickPicksDailyEpisode": { "properties": { - "city": { - "example": "Chicago", + "duration_seconds": { + "type": "number" + }, + "id": { "type": "string" }, - "country": { - "example": "US", + "image_url": { "type": "string" }, - "line1": { - "example": "180 N Michigan Ave", + "in_rss_playlist": { + "type": "boolean" + }, + "published_at": { "type": "string" }, - "line2": { + "summary": { "type": "string" }, - "postal_code": { - "example": "60601", + "title": { "type": "string" }, - "region": { - "example": "IL", + "url": { "type": "string" } }, "type": "object" }, - "fiveguys.MenuCategory": { + "fanduel.QuickPicksDailyResponse": { "properties": { - "description": { - "description": "Description is fiveguys.com's own short category blurb (e.g. \"Fresh,\nhand-formed patties hot off the grill with as many toppings as you'd\nlike.\"), distinct from Name (the page's long SEO title) and from any\none item's own Description.", - "example": "Fresh, hand-formed patties hot off the grill with as many toppings as you'd like.", + "episodes": { + "items": { + "$ref": "#/definitions/fanduel.QuickPicksDailyEpisode" + }, + "type": "array" + }, + "fetched_at": { "type": "string" }, - "image_url": { - "description": "ImageURL is this category's own hero/cover image, resolved from the\nsite's WordPress media library. Empty when the category has none set.", + "next_cursor": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/fiveguys.MenuItem" - }, - "type": "array" + "page": { + "type": "integer" }, - "modified_at": { - "description": "ModifiedAt is fiveguys.com's own last-modified timestamp for this\ncategory's content (UTC, RFC3339), when published.", - "example": "2026-04-16T18:10:38Z", + "page_size": { + "type": "integer" + }, + "podcast": { "type": "string" }, - "name": { - "example": "Burger Menu: Hamburgers, Cheeseburgers, and more", + "publisher": { "type": "string" }, - "slug": { - "example": "burgers", + "show_url": { "type": "string" }, "source_url": { - "description": "SourceURL is the live fiveguys.com page this category's content mirrors.", - "example": "https://www.fiveguys.com/menu/burgers/", "type": "string" + }, + "total_count": { + "type": "integer" } }, "type": "object" }, - "fiveguys.MenuItem": { + "fanduel.RacingAveragePace": { "properties": { - "calories": { - "allOf": [ - { - "$ref": "#/definitions/fiveguys.MenuItemCalories" - } - ], - "description": "Calories is nil when fiveguys.com does not publish a figure for this\nitem -- genuinely absent for drink categories (Coca-Cola Freestyle,\nDr Pepper, Bottled Drinks) and a couple of build-your-own items (e.g.\n\"Burger Bowl\"), not parser drift." - }, - "description": { - "description": "Description is fiveguys.com's own marketing copy for the item, exactly\nas published (may mention e.g. \"Available at select locations.\").", - "example": "Fresh, hand-formed patties hot off the grill and placed on a soft, toasted sesame seed bun. Add as many toppings as you want.", - "type": "string" + "early": { + "type": "number" }, - "image_url": { - "type": "string" + "finish": { + "type": "number" }, - "name": { - "example": "Hamburger", - "type": "string" + "middle": { + "type": "number" }, - "slug": { - "example": "hamburger", - "type": "string" + "races": { + "type": "integer" } }, "type": "object" }, - "fiveguys.MenuItemCalories": { + "fanduel.RacingCarryoverPool": { "properties": { - "max": { - "example": 1100, - "type": "integer" + "amount": { + "type": "number" }, - "min": { - "example": 530, + "mtp": { "type": "integer" }, - "text": { - "example": "530-1100", + "pool_type": { "type": "string" - } - }, - "type": "object" - }, - "fiveguys.MenuResponse": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/fiveguys.MenuCategory" - }, - "type": "array" }, - "count": { - "description": "Count is the total item count across every returned category.", - "example": 53, + "post_time": { + "type": "string" + }, + "race_number": { "type": "integer" }, - "fetched_at": { + "race_status": { + "$ref": "#/definitions/fanduel.RacingCodeName" + }, + "track_code": { "type": "string" }, - "source_url": { + "track_name": { "type": "string" + }, + "wager_type": { + "$ref": "#/definitions/fanduel.RacingCodeName" } }, "type": "object" }, - "fiveguys.NearbyResponse": { + "fanduel.RacingCarryoverResponse": { "properties": { - "count": { - "example": 10, - "type": "integer" - }, "fetched_at": { "type": "string" }, - "locations": { - "items": { - "$ref": "#/definitions/fiveguys.Location" - }, - "type": "array" + "limit": { + "type": "integer" }, - "radius": { - "example": 25, + "page": { "type": "integer" }, - "source_url": { - "type": "string" + "pools": { + "items": { + "$ref": "#/definitions/fanduel.RacingCarryoverPool" + }, + "type": "array" }, - "total_results": { - "description": "TotalResults is how many restaurants fall inside the radius overall,\nusually more than one page. Use it with offset to page.", - "example": 18, + "total": { "type": "integer" } }, "type": "object" }, - "fiveguys.NutritionGuideResponse": { + "fanduel.RacingCodeName": { "properties": { - "content_type": { - "description": "ContentType, SizeBytes and LastModified are read from PDFURL's own\nresponse headers, best-effort -- a failure fetching them does not fail\nthe whole response, since PDFURL is the primary result.", - "example": "application/pdf", - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "last_modified": { - "example": "2026-09-02T14:06:41Z", - "type": "string" - }, - "link_text": { - "description": "LinkText is the visible link text PDFURL was found under, when more\nthan one link on the page pointed at it.", - "example": "Nutrition & Allergen PDF", - "type": "string" - }, - "page_url": { - "description": "PageURL is the fiveguys.com page PDFURL was discovered on.", - "example": "https://www.fiveguys.com/nutritional-allergy-information/", + "code": { "type": "string" }, - "pdf_url": { - "description": "PDFURL is the current nutrition & allergen guide's direct download\nlink, resolved live -- its path changes when fiveguys.com republishes\nthe guide (observed monthly).", - "example": "https://www.fiveguys.com/wp-content/uploads/2026/09/Five-Guys-US-Nutrition-Allergen-Guide-English-September-2026.pdf", + "name": { "type": "string" - }, - "size_bytes": { - "example": 172740, - "type": "integer" } }, "type": "object" }, - "fiveguys.OrderingCalendar": { + "fanduel.RacingCombo": { "properties": { - "label": { - "description": "Label is the platform's display label when it publishes one, e.g.\n\"Delivery\".", - "example": "Delivery", + "payout": { "type": "string" }, - "ranges": { - "items": { - "$ref": "#/definitions/fiveguys.OrderingCalendarRange" - }, - "type": "array" + "runner1": { + "type": "string" }, - "type": { - "description": "Type is the ordering platform's own calendar type, e.g. \"business\",\n\"dispatch\".", - "example": "business", + "runner2": { "type": "string" } }, "type": "object" }, - "fiveguys.OrderingCalendarRange": { + "fanduel.RacingCount": { "properties": { - "end": { - "example": "20260906 23:00", + "code": { "type": "string" }, - "start": { - "description": "Start and End are published as \"YYYYMMDD HH:MM\" in the store's own\nlocal time, passed through unchanged rather than reinterpreted into\na timezone this API would have to guess.", - "example": "20260906 10:00", - "type": "string" + "count": { + "type": "integer" }, - "weekday": { - "example": "Sun", + "name": { "type": "string" } }, "type": "object" }, - "fiveguys.OrderingFulfillment": { + "fanduel.RacingEntry": { "properties": { - "calories_displayed": { - "example": true, - "type": "boolean" + "current_odds": { + "$ref": "#/definitions/fanduel.RacingOdds" }, - "coupons": { - "example": true, + "favorite": { "type": "boolean" }, - "curbside": { - "example": false, - "type": "boolean" + "morning_line": { + "$ref": "#/definitions/fanduel.RacingOdds" }, - "delivery": { - "example": false, - "type": "boolean" + "number": { + "type": "integer" }, - "dine_in": { - "example": false, - "type": "boolean" + "number_color": { + "type": "string" }, - "dispatch": { - "example": true, - "type": "boolean" + "pool_grids": { + "description": "include=pool_grids", + "items": { + "$ref": "#/definitions/fanduel.RacingPoolGrid" + }, + "type": "array" }, - "drive_thru": { - "example": false, - "type": "boolean" + "recent_odds": { + "items": { + "$ref": "#/definitions/fanduel.RacingRecentOdd" + }, + "type": "array" }, - "group_orders": { - "example": true, - "type": "boolean" + "runners": { + "items": { + "$ref": "#/definitions/fanduel.RacingRunner" + }, + "type": "array" }, - "loyalty": { - "example": false, - "type": "boolean" + "saddle_color": { + "type": "string" + } + }, + "type": "object" + }, + "fanduel.RacingFavoriteRank": { + "properties": { + "current_odds": { + "type": "integer" }, - "pickup": { - "example": true, - "type": "boolean" + "high_speed": { + "type": "integer" + }, + "morning_line": { + "type": "integer" + }, + "power_rating": { + "type": "integer" } }, "type": "object" }, - "fiveguys.OrderingLocation": { + "fanduel.RacingFiltersResponse": { "properties": { - "address": { - "$ref": "#/definitions/fiveguys.LocationAddress" + "classes": { + "items": { + "$ref": "#/definitions/fanduel.RacingCount" + }, + "type": "array" }, - "advance_only": { - "description": "AdvanceOnly marks a store that takes only scheduled orders, never ASAP.", - "type": "boolean" + "countries": { + "items": { + "$ref": "#/definitions/fanduel.RacingCount" + }, + "type": "array" }, - "advance_order_days": { - "description": "AdvanceOrderDays is how many days ahead an order may be scheduled.", - "example": 7, + "fetched_at": { + "type": "string" + }, + "race_count": { "type": "integer" }, - "availability_message": { + "race_date": { "type": "string" }, - "calendars": { - "description": "Calendars are this store's dated operating windows, present only\nwhen include_hours was requested. Unlike the weekly recurring\nschedule GET /fiveguys/search and /fiveguys/nearby publish, these\nare concrete dated ranges, so they reflect holiday and special\nhours a recurring schedule cannot express.", + "race_sorts": { "items": { - "$ref": "#/definitions/fiveguys.OrderingCalendar" + "type": "string" }, "type": "array" }, - "customer_message": { - "type": "string" + "race_types": { + "items": { + "$ref": "#/definitions/fanduel.RacingCount" + }, + "type": "array" }, - "delivery_fee": { - "description": "Ordering economics, in the store's own currency. DeliveryFee and the\nminimums are published as 0 when the store sets none.", - "example": 0, - "type": "number" + "statuses": { + "items": { + "$ref": "#/definitions/fanduel.RacingCount" + }, + "type": "array" }, - "distance_miles": { - "description": "DistanceMiles is measured from the requested coordinate.", - "example": 0.4, - "type": "number" + "surfaces": { + "items": { + "$ref": "#/definitions/fanduel.RacingCount" + }, + "type": "array" }, - "fulfillment": { - "allOf": [ - { - "$ref": "#/definitions/fiveguys.OrderingFulfillment" - } - ], - "description": "Fulfillment is what the ordering platform will actually accept for\nthis store right now. This is a different thing from the locator's\namenity labels (GET /fiveguys/search's `services`), which describe\nwhat the restaurant offers in general -- these describe what an order\nplaced now could use." + "track_count": { + "type": "integer" }, - "id": { - "description": "ID is the ordering platform's restaurant id.", - "example": "23841", + "track_sorts": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "fanduel.RacingFinisher": { + "properties": { + "entry": { + "description": "Set only with include=timeform.", + "type": "integer" + }, + "finish_status": { "type": "string" }, - "is_available": { - "description": "IsAvailable reports whether the ordering platform is currently\naccepting orders for this restaurant at all. AvailabilityMessage and\nCustomerMessage carry the store's own explanation when it publishes\none (e.g. a delivery caveat, a temporary notice).", - "example": true, - "type": "boolean" + "number": { + "type": "string" }, - "latitude": { - "description": "Latitude/Longitude come from the ordering platform's own record.", - "example": 30.396, + "place_payoff": { "type": "number" }, - "longitude": { - "example": -97.72, + "position": { + "type": "integer" + }, + "runner": { + "type": "string" + }, + "show_payoff": { "type": "number" }, - "minimum_delivery_order": { - "example": 15, - "type": "number" - }, - "minimum_pickup_order": { - "example": 0, - "type": "number" - }, - "name": { - "description": "Name is the ordering platform's per-store label (\"Five Guys Fig @ 7th\nDowntown LA\"), unlike the locator's generic \"Five Guys\".", - "example": "Five Guys Austin Arbor", + "silk_url": { "type": "string" }, - "order_url": { - "description": "OrderURL is the ordering platform's own menu/order page for this\nstore. Note it is hosted on a domain this API cannot itself read (see\nthe endpoint description) -- it is published for handing to an end\nuser, not for further scraping.", - "type": "string" + "timeform": { + "$ref": "#/definitions/fanduel.RacingFinisherTimeform" }, - "phone": { - "example": "(512) 719-3300", - "type": "string" + "win_payoff": { + "type": "number" + } + }, + "type": "object" + }, + "fanduel.RacingFinisherTimeform": { + "properties": { + "beaten_lengths": { + "type": "number" }, - "slug": { - "example": "five-guys-656", + "beaten_text": { "type": "string" }, - "store_number": { - "description": "StoreNumber is Five Guys' own internal store number.", - "example": "656", + "post_race_report": { "type": "string" }, - "supported_time_modes": { - "description": "SupportedTimeModes are the ordering platform's own labels, e.g.\n\"asap\", \"advance\".", - "items": { - "type": "string" - }, - "type": "array" + "starting_price": { + "type": "number" }, - "utc_offset": { - "description": "UTCOffset is the store's current offset in hours.", - "example": -7, + "total_beaten_lengths": { "type": "number" + }, + "total_beaten_text": { + "type": "string" } }, "type": "object" }, - "fiveguys.OrderingLocationsResponse": { + "fanduel.RacingFreePick": { "properties": { - "count": { - "example": 3, - "type": "integer" - }, - "fetched_at": { - "example": "2026-09-06T12:00:00Z", + "info": { "type": "string" }, - "locations": { - "items": { - "$ref": "#/definitions/fiveguys.OrderingLocation" - }, - "type": "array" - }, - "radius": { - "example": 20, + "number": { "type": "integer" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "fiveguys.OrderingMenuCategory": { + "fanduel.RacingHandicapping": { "properties": { - "description": { - "type": "string" + "average_pace": { + "$ref": "#/definitions/fanduel.RacingAveragePace" }, - "id": { - "example": "87071", - "type": "string" + "free_pick": { + "$ref": "#/definitions/fanduel.RacingFreePick" }, - "items": { - "items": { - "$ref": "#/definitions/fiveguys.OrderingMenuItem" - }, - "type": "array" + "jockey_trainer": { + "$ref": "#/definitions/fanduel.RacingJockeyTrainer" }, - "name": { - "example": "Burgers", - "type": "string" + "past_results": { + "$ref": "#/definitions/fanduel.RacingPastResults" }, - "slug": { - "example": "burgers", - "type": "string" + "snapshot": { + "$ref": "#/definitions/fanduel.RacingSnapshot" + }, + "speed_and_class": { + "$ref": "#/definitions/fanduel.RacingSpeedAndClass" } }, "type": "object" }, - "fiveguys.OrderingMenuItem": { + "fanduel.RacingHorseRace": { "properties": { - "available_always": { - "type": "boolean" - }, - "available_now": { - "description": "AvailableNow and AvailableAlways report the platform's own live\navailability for this item at this store, independent of the store's\nown open/closed state -- an item can be permanently 86'd\n(AvailableAlways false, AvailableNow false) or time-boxed to certain\nhours (AvailableAlways false, AvailableNow reflecting the current\ntime).", - "type": "boolean" - }, - "calories": { - "$ref": "#/definitions/fiveguys.OrderingMenuItemCalories" - }, - "cost": { - "description": "Cost is the item's price in the store's own currency, exactly as\npublished -- this is the field every other Five Guys endpoint in this\nfamily cannot surface (see the package doc's pricing section).", - "example": 11.79, + "claiming_price": { "type": "number" }, + "date": { + "type": "string" + }, "description": { "type": "string" }, + "distance": { + "$ref": "#/definitions/fanduel.RacingPastDistance" + }, "id": { - "example": "1883259", "type": "string" }, - "image_url": { + "number": { "type": "string" }, - "name": { - "example": "Hamburger", + "post_time": { "type": "string" }, - "short_description": { + "purse": { + "type": "number" + }, + "race_class": { + "$ref": "#/definitions/fanduel.RacingCodeName" + }, + "race_type": { + "$ref": "#/definitions/fanduel.RacingCodeName" + }, + "result": { + "$ref": "#/definitions/fanduel.RacingFinisher" + }, + "runner_count": { + "type": "integer" + }, + "surface": { + "$ref": "#/definitions/fanduel.RacingCodeName" + }, + "track_code": { "type": "string" }, - "slug": { - "example": "hamburger", + "track_condition": { + "type": "string" + }, + "track_name": { "type": "string" + }, + "winning_time": { + "type": "number" } }, "type": "object" }, - "fiveguys.OrderingMenuItemCalories": { + "fanduel.RacingHorseResponse": { "properties": { - "max": { - "example": 840, + "fetched_at": { + "type": "string" + }, + "id": { + "type": "string" + }, + "limit": { "type": "integer" }, - "min": { - "example": 840, + "page": { "type": "integer" - } - }, - "type": "object" - }, - "fiveguys.OrderingMenuResponse": { - "properties": { - "categories": { + }, + "races": { "items": { - "$ref": "#/definitions/fiveguys.OrderingMenuCategory" + "$ref": "#/definitions/fanduel.RacingHorseRace" }, "type": "array" }, - "count": { - "description": "Count is the total item count across every returned category.", - "example": 36, + "starts": { "type": "integer" }, - "fetched_at": { - "example": "2026-09-06T12:00:00Z", - "type": "string" + "top3": { + "type": "integer" }, - "id": { - "description": "ID echoes the requested ordering-platform restaurant id.", - "example": "23841", - "type": "string" + "total": { + "type": "integer" }, - "source_url": { - "type": "string" + "win_percentage": { + "type": "number" + }, + "wins": { + "type": "integer" } }, "type": "object" }, - "fiveguys.SearchResponse": { + "fanduel.RacingJockeyTrainer": { "properties": { - "count": { - "example": 10, + "jockey_entity_id": { "type": "integer" }, - "fetched_at": { + "jockey_name": { "type": "string" }, - "locations": { - "items": { - "$ref": "#/definitions/fiveguys.Location" - }, - "type": "array" + "places": { + "type": "integer" }, - "query": { - "example": "Chicago, IL", - "type": "string" + "shows": { + "type": "integer" }, - "source_url": { + "starts": { + "type": "integer" + }, + "trainer_entity_id": { + "type": "integer" + }, + "trainer_name": { "type": "string" }, - "total_results": { - "description": "TotalResults is how many restaurants matched overall, usually more\nthan one page. Use it with offset to page.", - "example": 18, + "wins": { "type": "integer" } }, "type": "object" }, - "fiveguys.StoreFAQEntry": { + "fanduel.RacingLastEvent": { "properties": { - "answer": { + "date": { "type": "string" }, - "question": { - "example": "What are the operating hours of Five Guys in the Medical District?", + "race": { + "type": "integer" + }, + "track": { "type": "string" } }, "type": "object" }, - "fiveguys.StorePhoto": { + "fanduel.RacingLegResult": { "properties": { - "alternate_text": { - "description": "AlternateText is the image's accessibility text, when published.", + "leg": { + "type": "integer" + }, + "winning_entry": { + "type": "integer" + } + }, + "type": "object" + }, + "fanduel.RacingNextRace": { + "properties": { + "mtp": { + "type": "integer" + }, + "number": { "type": "string" }, - "description": { - "description": "Description is Yext's caption for the image, when published.", - "example": "A close-up view of regular order of Five Guys fries.", + "post_time": { "type": "string" }, - "height": { - "example": 800, - "type": "integer" + "status": { + "$ref": "#/definitions/fanduel.RacingCodeName" + } + }, + "type": "object" + }, + "fanduel.RacingOdds": { + "properties": { + "decimal": { + "type": "number" }, - "url": { - "example": "https://a.mktgcdn.com/p/example/1200x800.jpg", + "fractional": { "type": "string" - }, - "width": { - "example": 1200, - "type": "integer" } }, "type": "object" }, - "fiveguys.StoreProfile": { + "fanduel.RacingPastDistance": { "properties": { - "directory_listing_url": { - "description": "DirectoryListingURL is the location's page on Yext's public\nlocation.com directory.", + "code": { "type": "string" }, - "facebook_store_id": { + "unit": { "type": "string" }, - "facebook_vanity_url": { - "description": "FacebookVanityURL is this location's own Facebook vanity handle (e.g.\n\"FiveGuysChicagoIL\"), distinct per location -- unlike the brand-wide\nfacebookPageUrl/instagramHandle/twitterHandle this family already\nchecked and excluded. Sparse: some locations publish none.", + "value": { + "type": "number" + } + }, + "type": "object" + }, + "fanduel.RacingPastEntry": { + "properties": { + "favorite": { + "type": "boolean" + }, + "final_odds": { + "$ref": "#/definitions/fanduel.RacingOdds" + }, + "morning_line": { + "$ref": "#/definitions/fanduel.RacingOdds" + }, + "number": { + "type": "integer" + }, + "number_color": { "type": "string" }, - "faq": { - "description": "FAQ is this restaurant's own auto-generated question set -- its\naddress, hours, reservation policy and services answered for this\nspecific store (\"What are the operating hours of Five Guys in the\nMedical District?\"). Confirmed distinct across every sampled\nlocation, unlike the brand-level FAQ corpus, which is national and\nalready served in full by GET /fiveguys/faq.", + "runners": { "items": { - "$ref": "#/definitions/fiveguys.StoreFAQEntry" + "$ref": "#/definitions/fanduel.RacingPastRunner" }, "type": "array" }, - "featured_message": { - "description": "FeaturedMessage is the store's current promotional message, when it\npublishes one (e.g. \"Try our fan-favorite Patty Melt today!\").", + "saddle_color": { "type": "string" + } + }, + "type": "object" + }, + "fanduel.RacingPastRaceResponse": { + "properties": { + "claiming_price": { + "type": "number" }, - "featured_message_url": { + "date": { "type": "string" }, - "franchisee_group": { - "description": "FranchiseeGroup is the operator of this specific restaurant --\ncorporate-owned locations publish a short internal code (\"FGO\");\nfranchised locations publish the franchisee's own company name (e.g.\n\"Bighorn Five Guys Acquisitions\", \"Evergreen Burgers, Inc.\"). Not\nexposed anywhere else in this family. Confirmed genuinely\nper-location across a multi-state live sample, unlike most of this\nentity's other social/brand fields.", + "description": { "type": "string" }, - "google_attributes": { - "additionalProperties": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": "GoogleAttributes are Yext's structured amenity flags as published to\nGoogle, e.g. \"has_takeout\", \"has_delivery\", \"wheelchair_accessible_\nentrance\". Richer and more machine-readable than the display labels\non Location.Services, and confirmed to differ between locations.", - "type": "object" - }, - "google_cid": { - "description": "GoogleCID and FacebookStoreID are this location's ids on those\nplatforms -- useful for joining against external datasets. Both\nconfirmed distinct per location.", - "type": "string" + "distance": { + "$ref": "#/definitions/fanduel.RacingPastDistance" }, - "meals_served": { - "description": "MealsServed are the dayparts this location serves, e.g. \"LUNCH\".", + "entries": { "items": { - "type": "string" + "$ref": "#/definitions/fanduel.RacingPastEntry" }, "type": "array" }, - "payment_options": { - "description": "PaymentOptions are accepted payment methods, e.g. \"APPLEPAY\", \"CASH\".", - "items": { - "type": "string" - }, - "type": "array" + "fetched_at": { + "type": "string" }, - "permanently_closed": { - "description": "PermanentlyClosed reports Yext's own closed flag for this location.", + "has_replay": { "type": "boolean" }, - "review_invite_url": { + "id": { "type": "string" }, - "review_page_url": { - "description": "ReviewPageURL and ReviewInviteURL are this restaurant's own\nfirst-party review pages, distinct per location.", + "number": { "type": "string" }, - "routable_latitude": { - "description": "RoutableLatitude/RoutableLongitude are Yext's driving-destination\ncoordinate, which differs from the display pin (Location.Latitude)\n-- use it for routing, not for map placement.", - "type": "number" + "post_time": { + "type": "string" }, - "routable_longitude": { + "purse": { "type": "number" }, - "services": { - "description": "Services are Yext's plain service labels (\"Dine-In\", \"Takeout\"),\npublished separately from Location.Services' amenity labels.", - "items": { - "type": "string" - }, - "type": "array" + "race_class": { + "$ref": "#/definitions/fanduel.RacingCodeName" + }, + "race_type": { + "$ref": "#/definitions/fanduel.RacingCodeName" + }, + "results": { + "$ref": "#/definitions/fanduel.RacingResults" + }, + "runner_count": { + "type": "integer" + }, + "surface": { + "$ref": "#/definitions/fanduel.RacingCodeName" + }, + "track_code": { + "type": "string" + }, + "track_condition": { + "type": "string" + }, + "track_name": { + "type": "string" } }, "type": "object" }, - "fiveguys.StoreResponse": { + "fanduel.RacingPastRaceSummary": { "properties": { - "breadcrumbs": { - "description": "Breadcrumbs is the directory trail from the root down to this\nrestaurant, outermost first. Each entry's Path feeds straight back\ninto GET /fiveguys/directory, so a caller landing on a store can\nnavigate back up without a second lookup. The Answers API publishes\na trail too, but with entity ids and no slugs -- only these page\ndocuments carry a usable path, which is why this is store-only.", - "items": { - "$ref": "#/definitions/fiveguys.DirectoryCrumb" - }, - "type": "array" + "claiming_price": { + "type": "number" }, - "description": { - "description": "Description is this restaurant's own published blurb. It is\ntemplated but genuinely per-location (each interpolates its own\nstreet address and city -- confirmed distinct across every sampled\nlocation), unlike the nationally-identical FAQ text this family\ndeliberately does not surface.", + "date": { "type": "string" }, - "fetched_at": { - "example": "2026-09-05T12:00:00Z", + "description": { "type": "string" }, - "location": { - "$ref": "#/definitions/fiveguys.Location" + "distance": { + "$ref": "#/definitions/fanduel.RacingPastDistance" }, - "photos": { - "description": "Photos are this restaurant's own published gallery images. Sparse:\nmany locations publish none, in which case this is omitted.", - "items": { - "$ref": "#/definitions/fiveguys.StorePhoto" - }, - "type": "array" + "id": { + "type": "string" }, - "profile": { - "allOf": [ - { - "$ref": "#/definitions/fiveguys.StoreProfile" - } - ], - "description": "Profile is extra per-restaurant detail from Yext's Content Delivery\nAPI -- structured Google amenity attributes, per-location review\nlinks, the store's current featured message, external platform ids,\nand a routing coordinate. Populated best-effort: when the lookup\nfails the rest of the response is still returned, since it is\nenrichment rather than core data." + "number": { + "type": "string" }, - "source_url": { - "example": "https://restaurants.fiveguys.com/703-s-seely-ave", + "post_time": { "type": "string" - } - }, - "type": "object" - }, - "fiveguys.TaxonomyRef": { - "properties": { - "id": { - "example": 21, + }, + "purse": { + "type": "number" + }, + "race_class": { + "$ref": "#/definitions/fanduel.RacingCodeName" + }, + "race_type": { + "$ref": "#/definitions/fanduel.RacingCodeName" + }, + "runner_count": { "type": "integer" }, - "name": { - "example": "Menu", - "type": "string" + "surface": { + "$ref": "#/definitions/fanduel.RacingCodeName" }, - "slug": { - "example": "menu", + "track_code": { "type": "string" - } - }, - "type": "object" - }, - "fiveguys.TimeInterval": { - "properties": { - "end": { - "example": "23:00", + }, + "track_condition": { "type": "string" }, - "start": { - "example": "10:00", + "track_name": { "type": "string" } }, "type": "object" }, - "fiveguys.WeeklyHours": { + "fanduel.RacingPastRacesResponse": { "properties": { - "friday": { - "$ref": "#/definitions/fiveguys.DayHours" + "date": { + "type": "string" }, - "monday": { - "$ref": "#/definitions/fiveguys.DayHours" + "fetched_at": { + "type": "string" }, - "saturday": { - "$ref": "#/definitions/fiveguys.DayHours" + "limit": { + "type": "integer" }, - "sunday": { - "$ref": "#/definitions/fiveguys.DayHours" + "page": { + "type": "integer" }, - "thursday": { - "$ref": "#/definitions/fiveguys.DayHours" + "races": { + "items": { + "$ref": "#/definitions/fanduel.RacingPastRaceSummary" + }, + "type": "array" }, - "tuesday": { - "$ref": "#/definitions/fiveguys.DayHours" + "total": { + "type": "integer" }, - "wednesday": { - "$ref": "#/definitions/fiveguys.DayHours" + "track": { + "type": "string" } }, "type": "object" }, - "fiveguys.directoryResponseDoc": { + "fanduel.RacingPastResults": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "first": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fiveguys.DirectoryResponse" + "second": { + "type": "integer" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "fiveguys.faqCategoriesResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "starts": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fiveguys.FAQCategoriesResponse" + "third": { + "type": "integer" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "top3_percentage": { + "type": "number" + }, + "top3_percentage_ranking": { + "type": "string" + }, + "win_percentage": { + "type": "number" + }, + "win_percentage_ranking": { + "type": "string" } }, "type": "object" }, - "fiveguys.faqResponseDoc": { + "fanduel.RacingPastRunner": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "age": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fiveguys.FAQResponse" + "birth_year": { + "type": "integer" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "dam": { + "type": "string" + }, + "dam_sire": { + "type": "string" + }, + "entity_id": { + "type": "string" + }, + "jockey": { + "type": "string" + }, + "medication": { + "type": "string" + }, + "name": { + "type": "string" + }, + "owner": { + "type": "string" + }, + "runner_id": { + "type": "string" + }, + "scratched": { + "type": "boolean" + }, + "sex": { + "type": "string" + }, + "sire": { + "type": "string" + }, + "trainer": { + "type": "string" + }, + "weight": { + "type": "integer" } }, "type": "object" }, - "fiveguys.menuResponseDoc": { + "fanduel.RacingPastTrack": { "properties": { + "city": { + "type": "string" + }, "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "string" + }, + "country": { + "type": "string" + }, + "dates": { + "items": { + "type": "string" + }, + "type": "array" + }, + "dates_total": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fiveguys.MenuResponse" + "name": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "race_types": { + "items": { + "type": "string" + }, + "type": "array" + }, + "races_on_date": { + "type": "integer" + }, + "state": { + "type": "string" } }, "type": "object" }, - "fiveguys.nearbyResponseDoc": { + "fanduel.RacingPastTracksResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "date": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "limit": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fiveguys.NearbyResponse" + "page": { + "type": "integer" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "total": { + "type": "integer" + }, + "track": { + "type": "string" + }, + "tracks": { + "items": { + "$ref": "#/definitions/fanduel.RacingPastTrack" + }, + "type": "array" } }, "type": "object" }, - "fiveguys.nutritionResponseDoc": { + "fanduel.RacingPayoff": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "selections": { + "items": { + "$ref": "#/definitions/fanduel.RacingPayoffSelection" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/fiveguys.NutritionGuideResponse" + "wager_amount": { + "type": "number" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "wager_type": { + "$ref": "#/definitions/fanduel.RacingCodeName" } }, "type": "object" }, - "fiveguys.orderingLocationsResponseDoc": { + "fanduel.RacingPayoffSelection": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "payout": { + "type": "number" }, - "data": { - "$ref": "#/definitions/fiveguys.OrderingLocationsResponse" + "qualifier": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "selection": { + "type": "string" } }, "type": "object" }, - "fiveguys.orderingMenuResponseDoc": { + "fanduel.RacingPool": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" - }, - "data": { - "$ref": "#/definitions/fiveguys.OrderingMenuResponse" + "amount": { + "type": "number" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "wager_type": { + "$ref": "#/definitions/fanduel.RacingCodeName" } }, "type": "object" }, - "fiveguys.pagination": { + "fanduel.RacingPoolCell": { "properties": { - "page": { - "example": 1, - "type": "integer" - }, - "per_page": { - "example": 20, - "type": "integer" + "amount": { + "type": "number" }, - "total": { - "example": 142, - "type": "integer" + "status": { + "type": "string" }, - "total_pages": { - "example": 8, + "target": { "type": "integer" } }, "type": "object" }, - "fiveguys.searchResponseDoc": { + "fanduel.RacingPoolGrid": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" - }, - "data": { - "$ref": "#/definitions/fiveguys.SearchResponse" + "cells": { + "items": { + "$ref": "#/definitions/fanduel.RacingPoolCell" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "wager_type": { + "$ref": "#/definitions/fanduel.RacingCodeName" } }, "type": "object" }, - "fiveguys.storeResponseDoc": { + "fanduel.RacingProbable": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "amount": { + "type": "number" }, - "data": { - "$ref": "#/definitions/fiveguys.StoreResponse" + "combos": { + "items": { + "$ref": "#/definitions/fanduel.RacingCombo" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "min_wager": { + "type": "number" + }, + "pool_amount_total": { + "type": "number" + }, + "wager_type": { + "$ref": "#/definitions/fanduel.RacingCodeName" } }, "type": "object" }, - "fiverr.GigPackage": { + "fanduel.RacingRaceResponse": { "properties": { - "delivery_days": { - "description": "Delivery time of the package, in days.", - "type": "integer" + "age_restriction": { + "type": "string" }, - "description": { - "description": "What the package includes, as written by the seller.", + "analyst_verdict": { "type": "string" }, - "price": { - "description": "Package price in dollars.", + "claiming_price": { "type": "number" }, - "tier": { - "description": "Name of the pricing tier, usually Basic, Standard or Premium.", + "country": { "type": "string" }, - "title": { - "description": "Title of the package as Fiverr shows it.", + "description": { "type": "string" - } - }, - "type": "object" - }, - "fiverr.GigResponse": { - "properties": { - "category_name": { - "description": "Name of the Fiverr category the gig is listed in.", + }, + "distance": { "type": "string" }, - "description": { - "description": "Gig description written by the seller.", + "entries": { + "items": { + "$ref": "#/definitions/fanduel.RacingEntry" + }, + "type": "array" + }, + "fetched_at": { "type": "string" }, + "has_replay": { + "type": "boolean" + }, "id": { - "description": "Fiverr gig id.", "type": "string" }, - "images": { - "description": "URLs of the images in the gig gallery.", + "included": { "items": { "type": "string" }, "type": "array" }, - "is_pro": { - "description": "Whether the gig is part of Fiverr Pro.", + "last_updated_ms": { + "type": "integer" + }, + "live_streaming": { "type": "boolean" }, - "orders_in_queue": { - "description": "Number of orders currently in the queue for the gig.", + "mtp": { "type": "integer" }, - "packages": { - "description": "Pricing packages the gig offers, one per tier.", + "number": { + "type": "string" + }, + "pools": { "items": { - "$ref": "#/definitions/fiverr.GigPackage" + "$ref": "#/definitions/fanduel.RacingPool" }, "type": "array" }, - "rating": { - "description": "Average rating of the gig.", + "post_time": { + "type": "string" + }, + "probables": { + "items": { + "$ref": "#/definitions/fanduel.RacingProbable" + }, + "type": "array" + }, + "purse": { "type": "number" }, - "review_count": { - "description": "Number of reviews the gig has received.", + "race_class": { + "$ref": "#/definitions/fanduel.RacingCodeName" + }, + "race_date": { + "type": "string" + }, + "race_type": { + "$ref": "#/definitions/fanduel.RacingCodeName" + }, + "results": { + "$ref": "#/definitions/fanduel.RacingResults" + }, + "runner_count": { "type": "integer" }, - "seller": { - "allOf": [ - { - "$ref": "#/definitions/fiverr.GigSeller" - } - ], - "description": "Seller who offers the gig." + "status": { + "$ref": "#/definitions/fanduel.RacingCodeName" }, - "sub_category_name": { - "description": "Name of the Fiverr subcategory the gig is listed in.", + "surface": { + "$ref": "#/definitions/fanduel.RacingCodeName" + }, + "track_code": { "type": "string" }, - "tags": { - "description": "Search tags attached to the gig.", + "track_condition": { + "type": "string" + }, + "track_name": { + "type": "string" + }, + "tvg_race_id": { + "type": "integer" + }, + "wagerable_runner_count": { + "type": "integer" + }, + "wagers": { "items": { - "type": "string" + "$ref": "#/definitions/fanduel.RacingWager" }, "type": "array" }, - "title": { - "description": "Gig title as shown on the gig page.", - "type": "string" - }, - "url": { - "description": "URL of the gig page on Fiverr.", - "type": "string" + "will_pays": { + "items": { + "$ref": "#/definitions/fanduel.RacingWillPay" + }, + "type": "array" } }, "type": "object" }, - "fiverr.GigSeller": { + "fanduel.RacingRaceSummary": { "properties": { "country": { - "description": "Seller's country code, such as `BD`.", "type": "string" }, - "description": { - "description": "Seller's profile description.", + "distance": { "type": "string" }, - "display_name": { - "description": "Seller's display name.", + "id": { "type": "string" }, - "languages": { - "description": "Language codes the seller speaks, such as `en`.", - "items": { - "type": "string" - }, - "type": "array" + "live_streaming": { + "type": "boolean" }, - "level": { - "description": "Seller level: `new_seller`, `level_one_seller`, `level_two_seller` or `top_rated_seller`.", - "enum": [ - "new_seller", - "level_one_seller", - "level_two_seller", - "top_rated_seller" - ], + "mtp": { + "type": "integer" + }, + "number": { "type": "string" }, - "profile_image": { - "description": "URL of the seller's profile image.", + "post_time": { "type": "string" }, - "rating": { - "description": "Seller's average rating.", + "purse": { "type": "number" }, - "response_time_hours": { - "description": "Typical time the seller takes to respond, in hours.", - "type": "integer" + "race_class": { + "$ref": "#/definitions/fanduel.RacingCodeName" }, - "review_count": { - "description": "Number of reviews the seller has received.", + "race_date": { + "type": "string" + }, + "race_type": { + "$ref": "#/definitions/fanduel.RacingCodeName" + }, + "runner_count": { "type": "integer" }, - "username": { - "description": "Seller's Fiverr username.", + "status": { + "$ref": "#/definitions/fanduel.RacingCodeName" + }, + "surface": { + "$ref": "#/definitions/fanduel.RacingCodeName" + }, + "track_code": { + "type": "string" + }, + "track_name": { "type": "string" } }, "type": "object" }, - "fiverr.GigSummary": { + "fanduel.RacingRacesResponse": { "properties": { - "category_id": { + "fetched_at": { + "type": "string" + }, + "limit": { "type": "integer" }, - "id": { - "type": "string" + "page": { + "type": "integer" }, - "image": { + "race_date": { "type": "string" }, - "is_pro": { - "type": "boolean" - }, - "rating": { - "type": "number" + "races": { + "items": { + "$ref": "#/definitions/fanduel.RacingRaceSummary" + }, + "type": "array" }, - "review_count": { + "total": { "type": "integer" + } + }, + "type": "object" + }, + "fanduel.RacingRecentOdd": { + "properties": { + "odds": { + "type": "string" }, - "seller_country": { + "trending": { + "type": "boolean" + } + }, + "type": "object" + }, + "fanduel.RacingResultEntry": { + "properties": { + "country": { "type": "string" }, - "seller_image": { + "distance": { "type": "string" }, - "seller_level": { - "enum": [ - "new_seller", - "level_one_seller", - "level_two_seller", - "top_rated_seller" - ], + "id": { "type": "string" }, - "seller_name": { + "live_streaming": { + "type": "boolean" + }, + "mtp": { + "type": "integer" + }, + "number": { "type": "string" }, - "seller_username": { + "post_time": { "type": "string" }, - "starting_price": { + "purse": { "type": "number" }, - "sub_category_id": { + "race_class": { + "$ref": "#/definitions/fanduel.RacingCodeName" + }, + "race_date": { + "type": "string" + }, + "race_type": { + "$ref": "#/definitions/fanduel.RacingCodeName" + }, + "results": { + "$ref": "#/definitions/fanduel.RacingResults" + }, + "runner_count": { "type": "integer" }, - "title": { + "status": { + "$ref": "#/definitions/fanduel.RacingCodeName" + }, + "surface": { + "$ref": "#/definitions/fanduel.RacingCodeName" + }, + "track_code": { "type": "string" }, - "url": { + "track_name": { "type": "string" } }, "type": "object" }, - "fiverr.SearchResponse": { + "fanduel.RacingResults": { "properties": { - "gigs": { + "finishers": { "items": { - "$ref": "#/definitions/fiverr.GigSummary" + "$ref": "#/definitions/fanduel.RacingFinisher" + }, + "type": "array" + }, + "payoffs": { + "items": { + "$ref": "#/definitions/fanduel.RacingPayoff" }, "type": "array" }, + "winning_time": { + "type": "number" + } + }, + "type": "object" + }, + "fanduel.RacingResultsResponse": { + "properties": { + "fetched_at": { + "type": "string" + }, + "limit": { + "type": "integer" + }, "page": { "type": "integer" }, - "query": { + "race_date": { "type": "string" + }, + "results": { + "items": { + "$ref": "#/definitions/fanduel.RacingResultEntry" + }, + "type": "array" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "fiverr.SellerResponse": { + "fanduel.RacingRunner": { "properties": { - "approved_gigs_count": { + "age": { "type": "integer" }, - "country": { + "dam": { "type": "string" }, - "description": { + "dam_sire": { "type": "string" }, - "display_name": { + "favorite_rank": { + "$ref": "#/definitions/fanduel.RacingFavoriteRank" + }, + "form_figures": { "type": "string" }, - "gig_ids": { - "items": { - "type": "string" - }, - "type": "array" + "handicapping": { + "$ref": "#/definitions/fanduel.RacingHandicapping" }, - "hourly_rate": { - "type": "number" + "jockey": { + "type": "string" }, - "is_pro": { + "jockey_changed": { "type": "boolean" }, - "is_verified": { + "medication": { + "type": "string" + }, + "name": { + "type": "string" + }, + "owner": { + "type": "string" + }, + "rating_stars": { + "type": "integer" + }, + "runner_id": { + "type": "string" + }, + "scratched": { "type": "boolean" }, - "joined_at": { + "sex": { "type": "string" }, - "languages": { + "sire": { + "type": "string" + }, + "timeform": { + "allOf": [ + { + "$ref": "#/definitions/fanduel.RacingRunnerTimeform" + } + ], + "description": "Set only with include=timeform and include=handicapping." + }, + "trainer": { + "type": "string" + }, + "weight": { + "type": "integer" + }, + "win_probability": { + "type": "number" + } + }, + "type": "object" + }, + "fanduel.RacingRunnerTimeform": { + "properties": { + "analyst_comment": { + "type": "string" + }, + "flags": { "items": { "type": "string" }, "type": "array" }, - "level": { - "enum": [ - "new_seller", - "level_one_seller", - "level_two_seller", - "top_rated_seller" - ], - "type": "string" + "free_pick": { + "$ref": "#/definitions/fanduel.RacingFreePick" }, - "one_liner_title": { + "production_comment": { "type": "string" }, - "profile_image": { - "type": "string" + "tissue_price": { + "type": "number" + } + }, + "type": "object" + }, + "fanduel.RacingSearchCounts": { + "properties": { + "jockey": { + "type": "integer" }, - "url": { + "owner": { + "type": "integer" + }, + "runner": { + "type": "integer" + }, + "trainer": { + "type": "integer" + } + }, + "type": "object" + }, + "fanduel.RacingSearchItem": { + "properties": { + "birth_year": { + "type": "integer" + }, + "id": { + "type": "integer" + }, + "last_event": { + "$ref": "#/definitions/fanduel.RacingLastEvent" + }, + "name": { "type": "string" }, - "username": { + "type": { "type": "string" } }, "type": "object" }, - "fiverr.gigResponseDoc": { + "fanduel.RacingSearchResponse": { "properties": { - "code": { - "example": 200, + "counts": { + "$ref": "#/definitions/fanduel.RacingSearchCounts" + }, + "fetched_at": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/fanduel.RacingSearchItem" + }, + "type": "array" + }, + "limit": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fiverr.GigResponse" + "order": { + "type": "string" }, - "msg": { - "example": "OK", + "page": { + "type": "integer" + }, + "query": { + "type": "string" + }, + "sort": { + "type": "string" + }, + "total": { + "type": "integer" + }, + "type": { "type": "string" } }, "type": "object" }, - "fiverr.searchResponseDoc": { + "fanduel.RacingSnapshot": { "properties": { - "code": { - "example": 200, + "days_off": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fiverr.SearchResponse" + "horse_starts": { + "type": "integer" }, - "msg": { - "example": "OK", + "horse_wins": { + "type": "integer" + }, + "normalised_power_rating": { + "type": "number" + }, + "power_rating": { + "type": "number" + }, + "power_rating_ranking": { "type": "string" } }, "type": "object" }, - "fiverr.sellerResponseDoc": { + "fanduel.RacingSpeedAndClass": { "properties": { - "code": { - "example": 200, - "type": "integer" + "avg_class_rating": { + "type": "number" }, - "data": { - "$ref": "#/definitions/fiverr.SellerResponse" + "avg_distance": { + "type": "number" }, - "msg": { - "example": "OK", + "avg_speed": { + "type": "number" + }, + "high_speed": { + "type": "number" + }, + "high_speed_ranking": { "type": "string" + }, + "last_class_rating": { + "type": "number" + }, + "normalised_speed_rating": { + "type": "number" } }, "type": "object" }, - "flashscore.ArchiveSeason": { + "fanduel.RacingTrack": { "properties": { - "end_year": { + "city": { "type": "string" }, - "is_current": { + "code": { + "type": "string" + }, + "country": { + "type": "string" + }, + "current_race": { + "$ref": "#/definitions/fanduel.RacingNextRace" + }, + "featured": { "type": "boolean" }, - "is_requested": { + "is_finished": { "type": "boolean" }, - "season": { + "ivr_code": { + "type": "integer" + }, + "name": { "type": "string" }, - "stage_ids": { + "number_of_races": { + "type": "integer" + }, + "race_types": { "items": { "type": "string" }, "type": "array" }, - "start_year": { + "short_name": { "type": "string" }, - "tournament_id": { - "description": "TournamentID is the season-level tournament id (the tournament_id of\nevent competition blocks), accepted by flashscore-tournament-outright-odds.", + "state": { "type": "string" - }, - "winners": { - "items": { - "$ref": "#/definitions/flashscore.ArchiveWinner" - }, - "type": "array" } }, "type": "object" }, - "flashscore.ArchiveStage": { + "fanduel.RacingTrackResponse": { "properties": { - "country": { + "city": { "type": "string" }, - "end_estimated": { + "code": { "type": "string" }, - "group": { + "country": { "type": "string" }, - "id": { + "current_race": { + "$ref": "#/definitions/fanduel.RacingNextRace" + }, + "featured": { + "type": "boolean" + }, + "fetched_at": { "type": "string" }, - "is_final": { + "is_finished": { "type": "boolean" }, + "ivr_code": { + "type": "integer" + }, "name": { "type": "string" }, - "start_estimated": { - "type": "string" + "number_of_races": { + "type": "integer" }, - "tabs": { + "race_types": { "items": { - "$ref": "#/definitions/flashscore.ArchiveTab" + "type": "string" }, "type": "array" }, - "tournament": { + "races": { + "items": { + "$ref": "#/definitions/fanduel.RacingRaceSummary" + }, + "type": "array" + }, + "short_name": { "type": "string" }, - "type_id": { - "type": "integer" + "state": { + "type": "string" } }, "type": "object" }, - "flashscore.ArchiveTab": { + "fanduel.RacingTracksResponse": { "properties": { - "id": { - "enum": [ - "SU", - "OD", - "TA", - "RE", - "FI", - "DR", - "NF" - ], + "fetched_at": { "type": "string" }, - "name": { + "limit": { + "type": "integer" + }, + "page": { + "type": "integer" + }, + "race_date": { "type": "string" + }, + "total": { + "type": "integer" + }, + "tracks": { + "items": { + "$ref": "#/definitions/fanduel.RacingTrack" + }, + "type": "array" } }, "type": "object" }, - "flashscore.ArchiveWinner": { + "fanduel.RacingWager": { "properties": { - "id": { - "type": "string" + "max_wager": { + "type": "number" }, - "name": { - "type": "string" + "min_wager": { + "type": "number" }, - "slug": { - "type": "string" + "wager_type": { + "$ref": "#/definitions/fanduel.RacingCodeName" } }, "type": "object" }, - "flashscore.CareerCompetition": { + "fanduel.RacingWagerType": { "properties": { - "name": { + "code": { "type": "string" }, - "path": { + "column_count": { + "type": "integer" + }, + "column_type": { + "type": "string" + }, + "description": { + "type": "string" + }, + "group": { + "$ref": "#/definitions/fanduel.RacingCodeName" + }, + "id": { + "type": "integer" + }, + "is_box": { + "type": "boolean" + }, + "is_key": { + "type": "boolean" + }, + "is_wheel": { + "type": "boolean" + }, + "leg_count": { + "type": "integer" + }, + "max_wager": { + "type": "number" + }, + "min_wager": { + "type": "number" + }, + "name": { "type": "string" + }, + "pools_per_entry": { + "type": "integer" + }, + "position_count": { + "type": "integer" } }, "type": "object" }, - "flashscore.CareerPart": { + "fanduel.RacingWagerTypesResponse": { "properties": { - "stage": { + "count": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "stats": { - "additionalProperties": {}, - "type": "object" + "wager_types": { + "items": { + "$ref": "#/definitions/fanduel.RacingWagerType" + }, + "type": "array" } }, "type": "object" }, - "flashscore.CareerRow": { + "fanduel.RacingWillPay": { "properties": { - "competition": { - "$ref": "#/definitions/flashscore.CareerCompetition" - }, - "parts": { + "leg_results": { "items": { - "$ref": "#/definitions/flashscore.CareerPart" + "$ref": "#/definitions/fanduel.RacingLegResult" }, "type": "array" }, - "season": { + "payoff_type": { "type": "string" }, - "stats": { - "additionalProperties": {}, - "type": "object" + "payouts": { + "items": { + "$ref": "#/definitions/fanduel.RacingWillPayment" + }, + "type": "array" }, - "team": { - "$ref": "#/definitions/flashscore.CareerTeam" + "wager_amount": { + "type": "number" + }, + "wager_type": { + "$ref": "#/definitions/fanduel.RacingCodeName" } }, "type": "object" }, - "flashscore.CareerTab": { + "fanduel.RacingWillPayment": { "properties": { - "columns": { + "entry": { + "type": "integer" + }, + "payout": { + "type": "number" + }, + "required": { + "type": "number" + } + }, + "type": "object" + }, + "fanduel.ResearchArticleResponse": { + "properties": { + "author": { + "$ref": "#/definitions/fanduel.ResearchAuthorRef" + }, + "blocks": { "items": { - "$ref": "#/definitions/flashscore.SquadColumn" + "$ref": "#/definitions/fanduel.ResearchBlock" }, "type": "array" }, - "key": { + "description": { "type": "string" }, - "name": { + "fetched_at": { "type": "string" }, - "rows": { + "hero_type": { + "type": "string" + }, + "id": { + "type": "string" + }, + "keywords": { "items": { - "$ref": "#/definitions/flashscore.CareerRow" + "type": "string" }, "type": "array" }, - "total": { - "additionalProperties": {}, + "omitted_blocks": { + "additionalProperties": { + "type": "integer" + }, "type": "object" - } - }, - "type": "object" - }, - "flashscore.CareerTeam": { - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" }, - "path": { + "published_at": { "type": "string" }, "slug": { "type": "string" - } - }, - "type": "object" - }, - "flashscore.EntityNewsResponse": { - "properties": { - "article_count": { - "type": "integer" }, - "entity": { - "$ref": "#/definitions/flashscore.EntityNewsTag" + "sport": { + "$ref": "#/definitions/fanduel.ResearchSportRef" }, - "id": { + "sub_heading": { "type": "string" }, - "sections": { + "tags": { "items": { - "$ref": "#/definitions/flashscore.EntityNewsSection" + "$ref": "#/definitions/fanduel.ResearchTag" }, "type": "array" }, - "source_url": { + "text": { + "type": "string" + }, + "thumbnail_url": { "type": "string" }, "title": { "type": "string" }, - "type": { - "enum": [ - "team", - "player", - "tournament", - "sport" - ], + "updated_at": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "flashscore.EntityNewsSection": { + "fanduel.ResearchArticleSummary": { "properties": { - "article_count": { - "type": "integer" + "author": { + "$ref": "#/definitions/fanduel.ResearchAuthorRef" }, - "article_ids": { + "description": { + "type": "string" + }, + "hero_type": { + "type": "string" + }, + "id": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "sport": { + "$ref": "#/definitions/fanduel.ResearchSportRef" + }, + "sub_heading": { + "type": "string" + }, + "tags": { "items": { - "type": "string" + "$ref": "#/definitions/fanduel.ResearchTag" }, "type": "array" }, - "section_type": { - "enum": [ - "MOST_RECENT", - "TOPPED" - ], + "thumbnail_url": { "type": "string" }, "title": { "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "flashscore.EntityNewsTag": { + "fanduel.ResearchArticlesResponse": { "properties": { - "entity_id": { - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/fanduel.ResearchArticleSummary" + }, + "type": "array" }, - "entity_type": { - "enum": [ - "PARTICIPANT", - "TOURNAMENT_TEMPLATE", - "SPORT" - ], + "fetched_at": { "type": "string" }, - "label": { - "type": "string" + "has_more": { + "type": "boolean" }, - "slug": { + "next_cursor": { "type": "string" } }, "type": "object" }, - "flashscore.EventCompetition": { + "fanduel.ResearchAuthor": { "properties": { - "country": { - "type": "string" - }, - "full_name": { + "bio": { "type": "string" }, "id": { - "description": "ID is the tournament template (competition) id.", "type": "string" }, "name": { "type": "string" }, - "path": { + "profile_image_url": { "type": "string" }, - "stage_id": { - "description": "StageID is the legacy name of TournamentID and carries the same value.", + "slug": { "type": "string" }, - "tournament_id": { - "description": "TournamentID is the season-level tournament id (feed key ZE), the input\nof flashscore-tournament-outright-odds.", - "type": "string" + "social": { + "items": { + "$ref": "#/definitions/fanduel.ResearchSocial" + }, + "type": "array" }, - "tournament_stage_id": { - "description": "TournamentStageID is the tournament stage id (feed key ZC), the input of\nflashscore-tournament-archive-seasons.", + "sports": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sub_categories": { + "items": { + "type": "string" + }, + "type": "array" + }, + "thumbnail_url": { "type": "string" } }, "type": "object" }, - "flashscore.EventSide": { + "fanduel.ResearchAuthorRef": { "properties": { "id": { "type": "string" }, - "logo_url": { - "type": "string" - }, "name": { "type": "string" }, - "short_name": { - "type": "string" - }, "slug": { "type": "string" } }, "type": "object" }, - "flashscore.MostReadArticle": { + "fanduel.ResearchAuthorResponse": { "properties": { - "edited_at": { - "type": "integer" + "bio": { + "type": "string" }, - "id": { + "fetched_at": { "type": "string" }, - "image_alt": { + "id": { "type": "string" }, - "image_credit": { + "name": { "type": "string" }, - "image_url": { + "profile_image_url": { "type": "string" }, - "path": { + "slug": { "type": "string" }, - "published_at": { - "type": "integer" + "social": { + "items": { + "$ref": "#/definitions/fanduel.ResearchSocial" + }, + "type": "array" }, - "published_at_iso": { - "type": "string" + "sports": { + "items": { + "type": "string" + }, + "type": "array" }, - "slug": { + "sub_categories": { + "items": { + "type": "string" + }, + "type": "array" + }, + "thumbnail_url": { "type": "string" + } + }, + "type": "object" + }, + "fanduel.ResearchAuthorsResponse": { + "properties": { + "authors": { + "items": { + "$ref": "#/definitions/fanduel.ResearchAuthor" + }, + "type": "array" }, - "title": { + "fetched_at": { "type": "string" }, - "type": { + "has_more": { + "type": "boolean" + }, + "next_cursor": { "type": "string" } }, "type": "object" }, - "flashscore.NewsArticleBody": { + "fanduel.ResearchBetLine": { "properties": { - "author": { + "market_id": { "type": "string" }, - "block_count": { - "type": "integer" - }, - "blocks": { - "items": { - "$ref": "#/definitions/flashscore.NewsBodyBlock" - }, - "type": "array" + "odds": { + "type": "string" }, - "credit": { + "selection_id": { "type": "string" }, - "edited_at": { - "type": "integer" + "url": { + "type": "string" }, - "edited_at_iso": { + "value": { "type": "string" + } + }, + "type": "object" + }, + "fanduel.ResearchBlock": { + "properties": { + "event_id": { + "type": "integer" }, - "id": { + "event_name": { "type": "string" }, - "image": { - "$ref": "#/definitions/flashscore.NewsCoverImage" + "headers": { + "items": { + "type": "string" + }, + "type": "array" }, - "perex": { + "league": { "type": "string" }, - "published_at": { + "level": { "type": "integer" }, - "published_at_iso": { + "market_id": { "type": "string" }, - "slug": { + "market_name": { "type": "string" }, - "tags": { + "rows": { "items": { - "$ref": "#/definitions/flashscore.NewsArticleTag" + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "array" + }, + "selection_ids": { + "items": { + "type": "integer" }, "type": "array" }, @@ -82704,129 +88277,94 @@ }, "type": { "type": "string" - }, - "url": { - "type": "string" } }, "type": "object" }, - "flashscore.NewsArticleBodyResponse": { + "fanduel.ResearchClosingLines": { "properties": { - "article": { - "$ref": "#/definitions/flashscore.NewsArticleBody" + "spread": { + "type": "number" }, - "source_url": { - "type": "string" + "total": { + "type": "number" } }, "type": "object" }, - "flashscore.NewsArticleTag": { + "fanduel.ResearchFeaturedArticlesResponse": { "properties": { - "entity_id": { - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/fanduel.ResearchArticleSummary" + }, + "type": "array" }, - "entity_type": { - "enum": [ - "SPORT", - "PARTICIPANT", - "TOURNAMENT_TEMPLATE", - "TAG" - ], - "type": "string" + "count": { + "type": "integer" }, - "label": { + "fetched_at": { "type": "string" }, - "slug": { - "type": "string" + "sport": { + "$ref": "#/definitions/fanduel.ResearchSportRef" } }, "type": "object" }, - "flashscore.NewsBodyBlock": { + "fanduel.ResearchFixture": { "properties": { - "alt": { + "event_url": { "type": "string" }, - "credit": { + "game_clock": { "type": "string" }, - "height": { - "type": "integer" + "head_to_head_slug": { + "type": "string" }, "id": { "type": "string" }, - "level": { - "type": "integer" - }, - "links": { - "items": { - "$ref": "#/definitions/flashscore.NewsBodyLink" - }, - "type": "array" - }, - "provider": { + "network": { "type": "string" }, - "text": { + "scheduled_end": { "type": "string" }, - "type": { - "enum": [ - "paragraph", - "heading", - "embed", - "image", - "infobox" - ], + "scheduled_start": { "type": "string" }, - "url": { + "sport": { + "$ref": "#/definitions/fanduel.ResearchSportRef" + }, + "status": { "type": "string" }, - "width": { - "type": "integer" + "teams": { + "items": { + "$ref": "#/definitions/fanduel.ResearchFixtureTeam" + }, + "type": "array" } }, "type": "object" }, - "flashscore.NewsBodyLink": { + "fanduel.ResearchFixtureLine": { "properties": { - "id": { - "type": "string" - }, - "kind": { - "enum": [ - "link", - "participant", - "player", - "event", - "tournament", - "article" - ], + "market_id": { "type": "string" }, - "sport_id": { + "odds": { "type": "integer" }, - "text": { - "type": "string" + "points": { + "type": "number" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "flashscore.NewsCoverImage": { - "properties": { - "alt_text": { + "selection_id": { "type": "string" }, - "credit": { + "side": { "type": "string" }, "url": { @@ -82835,587 +88373,544 @@ }, "type": "object" }, - "flashscore.NewsMostReadResponse": { + "fanduel.ResearchFixtureTeam": { "properties": { - "article_count": { - "type": "integer" - }, - "articles": { - "items": { - "$ref": "#/definitions/flashscore.MostReadArticle" - }, - "type": "array" - }, - "source_url": { + "abbreviation": { "type": "string" - } - }, - "type": "object" - }, - "flashscore.OddsBookmaker": { - "properties": { + }, "id": { - "type": "integer" + "type": "string" + }, + "money_line": { + "$ref": "#/definitions/fanduel.ResearchFixtureLine" }, "name": { "type": "string" - } - }, - "type": "object" - }, - "flashscore.OutrightOffer": { - "properties": { - "active": { - "type": "boolean" }, - "best": { - "type": "boolean" + "number_fire_id": { + "type": "integer" }, - "bookmaker_id": { + "score": { "type": "integer" }, - "change": { - "enum": [ - "UP", - "DOWN" - ], + "side": { "type": "string" }, - "odds": { + "spread": { + "$ref": "#/definitions/fanduel.ResearchFixtureLine" + }, + "total": { + "$ref": "#/definitions/fanduel.ResearchFixtureLine" + }, + "win_probability": { "type": "number" } }, "type": "object" }, - "flashscore.OutrightParticipant": { + "fanduel.ResearchFixturesResponse": { "properties": { - "id": { - "type": "string" + "count": { + "type": "integer" }, - "name": { + "fetched_at": { "type": "string" }, - "offers": { + "fixtures": { "items": { - "$ref": "#/definitions/flashscore.OutrightOffer" + "$ref": "#/definitions/fanduel.ResearchFixture" }, "type": "array" + }, + "sport": { + "type": "string" } }, "type": "object" }, - "flashscore.OutrightTournament": { + "fanduel.ResearchItem": { "properties": { - "id": { + "guid": { "type": "string" }, - "name": { + "image_url": { "type": "string" }, - "offers": { - "items": { - "$ref": "#/definitions/flashscore.OutrightOffer" - }, - "type": "array" + "published_at": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "flashscore.PlayerDetail": { + "fanduel.ResearchNewsType": { "properties": { - "label": { + "code": { "type": "string" }, - "value": { + "name": { "type": "string" } }, "type": "object" }, - "flashscore.PlayerEventsResponse": { + "fanduel.ResearchNflGame": { "properties": { - "event_count": { - "type": "integer" + "away_team": { + "$ref": "#/definitions/fanduel.ResearchNflTeam" }, - "events": { - "items": { - "$ref": "#/definitions/flashscore.TeamEvent" - }, - "type": "array" + "clock": { + "type": "string" }, - "page": { - "type": "integer" + "closing_lines": { + "$ref": "#/definitions/fanduel.ResearchClosingLines" }, - "player_id": { + "head_to_head_slug": { "type": "string" }, - "player_name": { - "type": "string" + "home_team": { + "$ref": "#/definitions/fanduel.ResearchNflTeam" }, - "section": { + "id": { "type": "string" }, - "source_url": { + "network": { "type": "string" - } - }, - "type": "object" - }, - "flashscore.PlayerInjuriesResponse": { - "properties": { - "injuries": { - "items": { - "$ref": "#/definitions/flashscore.PlayerInjury" - }, - "type": "array" }, - "injury_count": { + "number_fire_id": { "type": "integer" }, - "page_url": { - "type": "string" - }, - "player": { - "$ref": "#/definitions/flashscore.PlayerProfile" + "odds": { + "$ref": "#/definitions/fanduel.ResearchNflOdds" }, - "source_url": { + "quarter": { "type": "string" - } - }, - "type": "object" - }, - "flashscore.PlayerInjury": { - "properties": { - "from": { + }, + "scheduled_time": { "type": "string" }, - "type": { + "season_type": { "type": "string" }, - "until": { + "status": { "type": "string" - } - }, - "type": "object" - }, - "flashscore.PlayerMatchLogAbsence": { - "properties": { - "category": { + }, + "venue": { "type": "string" }, - "detail": { + "venue_type": { "type": "string" + }, + "weather": { + "$ref": "#/definitions/fanduel.ResearchWeather" + }, + "week": { + "type": "integer" } }, "type": "object" }, - "flashscore.PlayerMatchLogResponse": { + "fanduel.ResearchNflGameStats": { "properties": { - "has_more": { - "type": "boolean" - }, - "page": { + "fumbles_forced": { "type": "integer" }, - "player": { - "$ref": "#/definitions/flashscore.PlayerProfile" + "interceptions_thrown": { + "type": "integer" }, - "row_count": { + "passing_yards": { "type": "integer" }, - "rows": { - "items": { - "$ref": "#/definitions/flashscore.PlayerMatchLogRow" - }, - "type": "array" + "points": { + "type": "integer" }, - "source_url": { - "type": "string" + "rushing_yards": { + "type": "integer" } }, "type": "object" }, - "flashscore.PlayerMatchLogRow": { + "fanduel.ResearchNflLeader": { "properties": { - "absence": { - "$ref": "#/definitions/flashscore.PlayerMatchLogAbsence" + "attempts": { + "type": "integer" }, - "away": { - "$ref": "#/definitions/flashscore.PlayerMatchLogSide" + "carries": { + "type": "integer" }, - "date": { - "type": "string" + "completions": { + "type": "integer" }, - "date_text": { + "name": { "type": "string" }, - "event_id": { + "position": { "type": "string" }, - "home": { - "$ref": "#/definitions/flashscore.PlayerMatchLogSide" - }, - "rating": { - "type": "number" - }, - "rating_rank": { + "receptions": { "type": "integer" }, - "result": { - "enum": [ - "win", - "draw", - "loss" - ], - "type": "string" - }, - "stage": { - "enum": [ - "finished", - "finished_after_extra_time", - "finished_after_penalties", - "other" - ], - "type": "string" + "targets": { + "type": "integer" }, - "stage_code": { + "touchdowns": { "type": "integer" }, - "stats": { - "items": { - "$ref": "#/definitions/flashscore.PlayerMatchLogStat" - }, - "type": "array" + "yards": { + "type": "integer" + } + }, + "type": "object" + }, + "fanduel.ResearchNflLeaders": { + "properties": { + "passing": { + "$ref": "#/definitions/fanduel.ResearchNflLeader" }, - "stats_available": { - "type": "boolean" + "receiving": { + "$ref": "#/definitions/fanduel.ResearchNflLeader" }, - "tournament": { - "$ref": "#/definitions/flashscore.PlayerMatchLogTournament" + "rushing": { + "$ref": "#/definitions/fanduel.ResearchNflLeader" } }, "type": "object" }, - "flashscore.PlayerMatchLogSide": { + "fanduel.ResearchNflOdds": { "properties": { - "full_time_score": { + "away": { + "$ref": "#/definitions/fanduel.ResearchNflSideOdds" + }, + "event_id": { "type": "integer" }, - "id": { - "type": "string" + "home": { + "$ref": "#/definitions/fanduel.ResearchNflSideOdds" }, - "logo_url": { + "scheduled_time": { "type": "string" }, - "name": { + "url": { "type": "string" - }, - "penalties_score": { + } + }, + "type": "object" + }, + "fanduel.ResearchNflRanks": { + "properties": { + "defense": { "type": "integer" }, - "score": { + "offense": { "type": "integer" }, - "score_after_extra_time": { + "passing_yards_per_game": { "type": "integer" }, - "short_name": { - "type": "string" - }, - "slug": { - "type": "string" + "rushing_yards_per_game": { + "type": "integer" } }, "type": "object" }, - "flashscore.PlayerMatchLogStat": { + "fanduel.ResearchNflRecord": { "properties": { - "id": { - "description": "ID is Flashscore's numeric statistic id.", + "losses": { "type": "integer" }, - "key": { - "type": "string" - }, - "label": { - "type": "string" + "ties": { + "type": "integer" }, - "value": { - "description": "Value is the displayed value: \"90'\", \"29:21\", \"32-33\", \"97.00%\" or a number.", - "type": "string" + "wins": { + "type": "integer" } }, "type": "object" }, - "flashscore.PlayerMatchLogTournament": { + "fanduel.ResearchNflScheduleResponse": { "properties": { - "country": { - "type": "string" - }, - "country_id": { + "count": { "type": "integer" }, - "name": { + "fetched_at": { "type": "string" }, - "path": { - "type": "string" + "games": { + "items": { + "$ref": "#/definitions/fanduel.ResearchNflGame" + }, + "type": "array" }, - "season": { + "season_type": { "type": "string" }, - "short_code": { - "type": "string" + "week": { + "type": "integer" } }, "type": "object" }, - "flashscore.PlayerNewsResponse": { + "fanduel.ResearchNflSideOdds": { "properties": { - "item_count": { - "type": "integer" - }, - "items": { - "items": { - "$ref": "#/definitions/flashscore.TeamNewsItem" - }, - "type": "array" + "money_line": { + "$ref": "#/definitions/fanduel.ResearchBetLine" }, - "player_id": { - "type": "string" + "spread": { + "$ref": "#/definitions/fanduel.ResearchBetLine" }, - "player_name": { + "team_code": { "type": "string" }, - "source_url": { - "type": "string" + "total": { + "$ref": "#/definitions/fanduel.ResearchBetLine" } }, "type": "object" }, - "flashscore.PlayerProfile": { + "fanduel.ResearchNflTeam": { "properties": { - "birth_date": { - "type": "string" + "average_passing_yards_per_game": { + "type": "number" }, - "country": { + "average_rushing_yards_per_game": { + "type": "number" + }, + "code": { "type": "string" }, - "country_id": { - "type": "integer" + "conference": { + "type": "string" }, - "full_name": { + "division": { "type": "string" }, - "id": { + "game_stats": { + "$ref": "#/definitions/fanduel.ResearchNflGameStats" + }, + "leaders": { + "$ref": "#/definitions/fanduel.ResearchNflLeaders" + }, + "logo_url": { "type": "string" }, "name": { "type": "string" }, - "path": { + "number_fire_id": { + "type": "integer" + }, + "primary_color": { "type": "string" }, - "photo_url": { + "ranks": { + "$ref": "#/definitions/fanduel.ResearchNflRanks" + }, + "record": { + "$ref": "#/definitions/fanduel.ResearchNflRecord" + }, + "secondary_color": { "type": "string" }, - "ranking": { + "short_name": { "type": "string" }, "slug": { "type": "string" }, - "sport": { + "sportsbook_link": { "type": "string" }, - "sport_id": { - "type": "integer" - }, - "team": { - "$ref": "#/definitions/flashscore.PlayerTeam" - }, - "url": { - "type": "string" + "win_probability": { + "type": "number" } }, "type": "object" }, - "flashscore.PlayerResponse": { + "fanduel.ResearchPlayerNewsItem": { "properties": { - "age": { - "type": "integer" - }, - "career": { - "items": { - "$ref": "#/definitions/flashscore.CareerTab" - }, - "type": "array" + "analysis": { + "type": "string" }, - "contract_expires": { + "attribution": { "type": "string" }, - "details": { - "items": { - "$ref": "#/definitions/flashscore.PlayerDetail" - }, - "type": "array" + "author": { + "$ref": "#/definitions/fanduel.ResearchAuthorRef" }, - "market_value": { + "fact": { "type": "string" }, - "page_url": { + "id": { "type": "string" }, - "player": { - "$ref": "#/definitions/flashscore.PlayerProfile" + "news_type": { + "$ref": "#/definitions/fanduel.ResearchNewsType" }, - "position": { + "published_at": { "type": "string" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "flashscore.PlayerTeam": { - "properties": { - "id": { + "quant": { "type": "string" }, - "logo_url": { + "slug": { "type": "string" }, - "name": { - "type": "string" + "sport": { + "$ref": "#/definitions/fanduel.ResearchSportRef" }, - "path": { + "subject": { + "$ref": "#/definitions/fanduel.ResearchSubject" + }, + "title": { "type": "string" }, - "slug": { + "updated_at": { "type": "string" } }, "type": "object" }, - "flashscore.PlayerTransfer": { + "fanduel.ResearchPlayerNewsResponse": { "properties": { - "date": { - "type": "string" - }, - "fee": { + "fetched_at": { "type": "string" }, - "from": { - "allOf": [ - { - "$ref": "#/definitions/flashscore.TransferTeam" - } - ], - "description": "From and To are null when the page shows no club on that side." + "has_more": { + "type": "boolean" }, - "to": { - "$ref": "#/definitions/flashscore.TransferTeam" + "items": { + "items": { + "$ref": "#/definitions/fanduel.ResearchPlayerNewsItem" + }, + "type": "array" }, - "type": { + "next_cursor": { "type": "string" } }, "type": "object" }, - "flashscore.PlayerTransfersResponse": { + "fanduel.ResearchPlayerTeam": { "properties": { - "page_url": { + "abbreviation": { "type": "string" }, - "player": { - "$ref": "#/definitions/flashscore.PlayerProfile" - }, - "source_url": { + "name": { "type": "string" }, - "transfer_count": { + "number_fire_id": { "type": "integer" - }, - "transfers": { - "items": { - "$ref": "#/definitions/flashscore.PlayerTransfer" - }, - "type": "array" } }, "type": "object" }, - "flashscore.SquadColumn": { + "fanduel.ResearchProjectionEvent": { "properties": { - "key": { + "id": { "type": "string" }, - "label": { + "name": { "type": "string" } }, "type": "object" }, - "flashscore.SquadGroup": { + "fanduel.ResearchProjectionGame": { "properties": { - "columns": { - "items": { - "$ref": "#/definitions/flashscore.SquadColumn" - }, - "type": "array" + "away_team": { + "$ref": "#/definitions/fanduel.ResearchProjectionTeam" }, - "name": { + "game_time": { "type": "string" }, - "players": { - "items": { - "$ref": "#/definitions/flashscore.SquadPlayer" - }, - "type": "array" + "home_team": { + "$ref": "#/definitions/fanduel.ResearchProjectionTeam" } }, "type": "object" }, - "flashscore.SquadPlayer": { + "fanduel.ResearchProjectionPlayer": { "properties": { - "absence": { + "handedness": { "type": "string" }, - "age": { + "id": { "type": "integer" }, - "club": { + "image_url": { "type": "string" }, - "country": { + "name": { "type": "string" }, - "jersey_number": { + "page_url": { "type": "string" }, - "name": { + "position": { "type": "string" + } + }, + "type": "object" + }, + "fanduel.ResearchProjectionPosition": { + "properties": { + "default": { + "type": "boolean" }, - "path": { + "label": { "type": "string" }, - "player_id": { + "matches": { + "items": { + "type": "string" + }, + "type": "array" + }, + "player_kind": { "type": "string" }, "slug": { "type": "string" + } + }, + "type": "object" + }, + "fanduel.ResearchProjectionRow": { + "properties": { + "game": { + "$ref": "#/definitions/fanduel.ResearchProjectionGame" + }, + "player": { + "$ref": "#/definitions/fanduel.ResearchProjectionPlayer" + }, + "salary": { + "description": "Salary is the FanDuel DFS salary in dollars; Value is points per $1,000 of salary.", + "type": "integer" }, "stats": { "additionalProperties": {}, "type": "object" + }, + "team": { + "$ref": "#/definitions/fanduel.ResearchProjectionTeam" + }, + "value": { + "type": "number" } }, "type": "object" }, - "flashscore.SquadScope": { + "fanduel.ResearchProjectionSlate": { "properties": { - "key": { + "id": { "type": "string" }, "name": { @@ -83424,285 +88919,355 @@ }, "type": "object" }, - "flashscore.TeamCompetition": { + "fanduel.ResearchProjectionSlatesResponse": { "properties": { - "country": { - "type": "string" + "count": { + "type": "integer" }, - "full_name": { + "date": { "type": "string" }, - "name": { + "events": { + "items": { + "$ref": "#/definitions/fanduel.ResearchProjectionEvent" + }, + "type": "array" + }, + "fetched_at": { "type": "string" }, - "path": { + "season": { + "type": "integer" + }, + "slates": { + "items": { + "$ref": "#/definitions/fanduel.ResearchProjectionSlate" + }, + "type": "array" + }, + "sport": { "type": "string" + }, + "week": { + "type": "integer" } }, "type": "object" }, - "flashscore.TeamEvent": { + "fanduel.ResearchProjectionTable": { "properties": { - "away": { - "$ref": "#/definitions/flashscore.EventSide" + "name": { + "type": "string" }, - "away_score": { - "type": "integer" + "needs_event": { + "type": "boolean" }, - "competition": { - "$ref": "#/definitions/flashscore.EventCompetition" + "needs_slate": { + "type": "boolean" }, - "home": { - "$ref": "#/definitions/flashscore.EventSide" + "positions": { + "items": { + "$ref": "#/definitions/fanduel.ResearchProjectionPosition" + }, + "type": "array" }, - "home_score": { - "type": "integer" + "scopes": { + "items": { + "type": "string" + }, + "type": "array" }, - "id": { + "sport": { "type": "string" }, - "stage": { + "table": { "type": "string" }, - "stage_code": { - "type": "integer" - }, - "start_time": { - "type": "integer" - }, - "start_time_iso": { + "type": { "type": "string" - }, - "status_code": { - "type": "integer" } }, "type": "object" }, - "flashscore.TeamEventsResponse": { + "fanduel.ResearchProjectionTablesResponse": { "properties": { - "event_count": { + "count": { "type": "integer" }, - "events": { + "fetched_at": { + "type": "string" + }, + "sports": { "items": { - "$ref": "#/definitions/flashscore.TeamEvent" + "type": "string" }, "type": "array" }, - "page": { - "type": "integer" + "tables": { + "items": { + "$ref": "#/definitions/fanduel.ResearchProjectionTable" + }, + "type": "array" }, - "section": { + "types": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "fanduel.ResearchProjectionTeam": { + "properties": { + "abbreviation": { "type": "string" }, - "source_url": { - "type": "string" + "id": { + "type": "integer" }, - "team_id": { + "image_url": { "type": "string" }, - "team_name": { + "name": { "type": "string" } }, "type": "object" }, - "flashscore.TeamNewsItem": { + "fanduel.ResearchProjectionsResponse": { "properties": { - "id": { + "event_id": { "type": "string" }, - "image_url": { + "event_name": { "type": "string" }, - "link": { + "fetched_at": { "type": "string" }, - "published_at": { + "limit": { "type": "integer" }, - "published_at_iso": { - "type": "string" + "page": { + "type": "integer" }, - "publisher": { + "position": { "type": "string" }, - "title": { + "position_label": { "type": "string" - } - }, - "type": "object" - }, - "flashscore.TeamNewsResponse": { - "properties": { - "item_count": { - "type": "integer" }, - "items": { + "rows": { "items": { - "$ref": "#/definitions/flashscore.TeamNewsItem" + "$ref": "#/definitions/fanduel.ResearchProjectionRow" }, "type": "array" }, - "source_url": { + "scope": { "type": "string" }, - "team_id": { + "slate_id": { "type": "string" }, - "team_name": { + "slate_name": { + "type": "string" + }, + "sport": { + "type": "string" + }, + "table": { + "type": "string" + }, + "table_name": { + "type": "string" + }, + "total": { + "type": "integer" + }, + "type": { "type": "string" } }, "type": "object" }, - "flashscore.TeamOutrightOddsResponse": { + "fanduel.ResearchResponse": { "properties": { - "bookmakers": { + "copyright": { + "type": "string" + }, + "description": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "items": { "items": { - "$ref": "#/definitions/flashscore.OddsBookmaker" + "$ref": "#/definitions/fanduel.ResearchItem" }, "type": "array" }, - "geo": { + "language": { "type": "string" }, - "has_more": { - "type": "boolean" - }, - "source_url": { + "last_build_date": { "type": "string" }, - "subdivision": { + "site_url": { "type": "string" }, - "team_id": { + "source_url": { "type": "string" }, - "team_name": { + "title": { "type": "string" - }, - "tournaments": { - "items": { - "$ref": "#/definitions/flashscore.OutrightTournament" - }, - "type": "array" } }, "type": "object" }, - "flashscore.TeamProfile": { + "fanduel.ResearchSocial": { "properties": { - "country": { + "account": { "type": "string" }, - "country_id": { - "type": "integer" - }, - "full_name": { + "type": { "type": "string" }, - "id": { + "url": { "type": "string" - }, - "logo_url": { + } + }, + "type": "object" + }, + "fanduel.ResearchSport": { + "properties": { + "content_sport": { "type": "string" }, + "has_live_scoring": { + "type": "boolean" + }, + "has_player_updates": { + "type": "boolean" + }, "name": { "type": "string" }, - "path": { - "type": "string" + "player_news_types": { + "items": { + "type": "string" + }, + "type": "array" }, - "slug": { - "type": "string" + "positions": { + "items": { + "type": "string" + }, + "type": "array" }, - "sport": { + "show_authors": { + "type": "boolean" + }, + "slug": { "type": "string" }, - "sport_id": { + "team_count": { "type": "integer" }, - "url": { - "type": "string" + "teams": { + "items": { + "$ref": "#/definitions/fanduel.ResearchTeam" + }, + "type": "array" } }, "type": "object" }, - "flashscore.TeamResponse": { + "fanduel.ResearchSportRef": { "properties": { - "competitions": { - "items": { - "$ref": "#/definitions/flashscore.TeamCompetition" - }, - "type": "array" - }, - "page_url": { + "name": { "type": "string" }, - "source_url": { + "slug": { "type": "string" - }, - "team": { - "$ref": "#/definitions/flashscore.TeamProfile" - }, - "venue": { - "$ref": "#/definitions/flashscore.TeamVenue" } }, "type": "object" }, - "flashscore.TeamSquadResponse": { + "fanduel.ResearchSportsResponse": { "properties": { - "groups": { + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "sports": { "items": { - "$ref": "#/definitions/flashscore.SquadGroup" + "$ref": "#/definitions/fanduel.ResearchSport" }, "type": "array" + } + }, + "type": "object" + }, + "fanduel.ResearchSubCategoriesResponse": { + "properties": { + "count": { + "type": "integer" }, - "scope": { - "$ref": "#/definitions/flashscore.SquadScope" + "fetched_at": { + "type": "string" }, - "scopes": { + "sub_categories": { "items": { - "$ref": "#/definitions/flashscore.SquadScope" + "$ref": "#/definitions/fanduel.ResearchSubCategory" }, "type": "array" - }, - "source_url": { + } + }, + "type": "object" + }, + "fanduel.ResearchSubCategory": { + "properties": { + "slug": { "type": "string" }, - "team": { - "$ref": "#/definitions/flashscore.TeamProfile" + "sport": { + "$ref": "#/definitions/fanduel.ResearchSportRef" + }, + "title": { + "type": "string" } }, "type": "object" }, - "flashscore.TeamTransfer": { + "fanduel.ResearchSubject": { "properties": { - "date": { + "abbreviation": { "type": "string" }, - "direction": { + "name": { "type": "string" }, - "fee": { + "number": { + "type": "integer" + }, + "number_fire_id": { + "type": "integer" + }, + "page_url": { "type": "string" }, - "from": { - "allOf": [ - { - "$ref": "#/definitions/flashscore.TransferTeam" - } - ], - "description": "From and To are null when the player had no club on that side (for\nexample a free agent released at the end of a contract)." + "position": { + "type": "string" }, - "player": { - "$ref": "#/definitions/flashscore.TransferPlayer" + "slug": { + "type": "string" }, - "to": { - "$ref": "#/definitions/flashscore.TransferTeam" + "team": { + "$ref": "#/definitions/fanduel.ResearchPlayerTeam" }, "type": { "type": "string" @@ -83710,4122 +89275,3458 @@ }, "type": "object" }, - "flashscore.TeamTransfersResponse": { + "fanduel.ResearchTag": { "properties": { - "page": { - "type": "integer" + "name": { + "type": "string" }, - "source_url": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "fanduel.ResearchTeam": { + "properties": { + "abbreviation": { "type": "string" }, - "team_id": { + "identifier": { "type": "string" }, - "team_name": { + "name": { "type": "string" }, - "transfer_count": { + "number_fire_id": { "type": "integer" - }, - "transfers": { - "items": { - "$ref": "#/definitions/flashscore.TeamTransfer" - }, - "type": "array" - }, - "type": { - "type": "string" } }, "type": "object" }, - "flashscore.TeamVenue": { + "fanduel.ResearchWeather": { "properties": { - "capacity": { + "condition": { + "type": "string" + }, + "humidity_pct": { "type": "integer" }, - "city": { - "type": "string" + "temp_f": { + "type": "integer" }, - "stadium": { + "wind_direction": { "type": "string" + }, + "wind_mph": { + "type": "integer" } }, "type": "object" }, - "flashscore.TournamentArchiveSeasonsResponse": { + "fanduel.SportsbookAutocompleteResponse": { "properties": { - "league_key": { + "fetched_at": { "type": "string" }, - "season_count": { - "type": "integer" + "query": { + "type": "string" }, - "seasons": { + "suggestions": { "items": { - "$ref": "#/definitions/flashscore.ArchiveSeason" + "$ref": "#/definitions/fanduel.SportsbookSuggestion" }, "type": "array" + } + }, + "type": "object" + }, + "fanduel.SportsbookBetRecords": { + "properties": { + "against_spread": { + "$ref": "#/definitions/fanduel.SportsbookWinLoss" }, - "source_url": { - "type": "string" - }, - "stage": { - "$ref": "#/definitions/flashscore.ArchiveStage" + "money_line": { + "$ref": "#/definitions/fanduel.SportsbookWinLoss" }, - "stage_id": { + "over_under": { + "$ref": "#/definitions/fanduel.SportsbookWinLoss" + } + }, + "type": "object" + }, + "fanduel.SportsbookBoxScoreColumn": { + "properties": { + "key": { "type": "string" }, - "tournament_template_id": { + "label": { "type": "string" } }, "type": "object" }, - "flashscore.TournamentOutrightOddsResponse": { + "fanduel.SportsbookBoxScoreGroup": { "properties": { - "bookmakers": { + "columns": { "items": { - "$ref": "#/definitions/flashscore.OddsBookmaker" + "$ref": "#/definitions/fanduel.SportsbookBoxScoreColumn" }, "type": "array" }, - "geo": { + "key": { "type": "string" }, - "has_more": { - "type": "boolean" + "label": { + "type": "string" }, - "participants": { + "rows": { "items": { - "$ref": "#/definitions/flashscore.OutrightParticipant" + "$ref": "#/definitions/fanduel.SportsbookBoxScoreRow" }, "type": "array" - }, - "source_url": { - "type": "string" - }, - "subdivision": { - "type": "string" - }, - "tournament_id": { - "type": "string" } }, "type": "object" }, - "flashscore.TransferPlayer": { + "fanduel.SportsbookBoxScoreResponse": { "properties": { - "country": { - "type": "string" + "available": { + "type": "boolean" }, - "id": { - "type": "string" + "event_id": { + "type": "integer" }, - "name": { + "fetched_at": { "type": "string" }, - "path": { - "type": "string" + "groups": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookBoxScoreGroup" + }, + "type": "array" }, - "slug": { + "score": { + "$ref": "#/definitions/fanduel.SportsbookScore" + }, + "status": { "type": "string" } }, "type": "object" }, - "flashscore.TransferTeam": { + "fanduel.SportsbookBoxScoreRow": { "properties": { "id": { "type": "string" }, - "logo_url": { + "name": { "type": "string" }, - "name": { + "player_id": { "type": "string" }, - "path": { + "position": { "type": "string" }, - "slug": { + "stats": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "team": { "type": "string" } }, "type": "object" }, - "flashscore.broadcasterDoc": { + "fanduel.SportsbookBuilderCard": { "properties": { - "affiliate": { - "description": "Affiliate marks entries the provider flags as affiliate links; their tracking URL is omitted.", - "example": false, - "type": "boolean" - }, - "id": { - "example": 680, - "type": "integer" + "available_options": { + "additionalProperties": {}, + "type": "object" }, - "name": { - "example": "Sky Sports Premier League (Gbr)", + "description_template": { "type": "string" }, - "url": { - "example": "http://www.skysports.com/", + "id": { "type": "string" - } - }, - "type": "object" - }, - "flashscore.calendarCategoriesDataDoc": { - "properties": { - "categories": { + }, + "legs": { "items": { - "$ref": "#/definitions/flashscore.calendarCategoryDoc" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "source_url": { - "example": "https://www.flashscore.com/", + "prop_key": { "type": "string" - } - }, - "type": "object" - }, - "flashscore.calendarCategoriesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/flashscore.calendarCategoriesDataDoc" + "props": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "selected_options": { + "additionalProperties": {}, + "type": "object" + }, + "title": { + "type": "string" + }, + "type": { "type": "string" } }, "type": "object" }, - "flashscore.calendarCategoryDoc": { + "fanduel.SportsbookBuilderChoice": { "properties": { - "key": { - "example": "tennis-atp", + "choice_id": { "type": "string" }, - "name": { - "example": "ATP Tour Calendar", + "description": { "type": "string" }, - "path": { - "example": "/tennis/calendar/atp/", + "status": { "type": "string" }, - "sport": { - "example": "tennis", + "template_id": { "type": "string" } }, "type": "object" }, - "flashscore.calendarDataDoc": { + "fanduel.SportsbookBuilderCompetition": { "properties": { - "category": { - "$ref": "#/definitions/flashscore.calendarCategoryDoc" + "competition_id": { + "type": "integer" }, - "events": { + "event_ids": { "items": { - "$ref": "#/definitions/flashscore.calendarEventDoc" + "type": "integer" }, "type": "array" }, - "source_url": { - "example": "https://2.ds.lsapp.eu/pq_graphql?_hash=scs&projectId=2&sportId=2", + "first_event_id": { + "type": "integer" + }, + "logo_url": { "type": "string" }, - "year": { - "example": 2026, - "type": "integer" + "name": { + "type": "string" } }, "type": "object" }, - "flashscore.calendarEventDoc": { + "fanduel.SportsbookBuilderEvent": { "properties": { - "country": { - "example": "France", + "abbreviation": { "type": "string" }, - "date": { - "example": "24.05. - 07.06.", + "away_logo_url": { "type": "string" }, - "end_time": { - "example": "2026-06-07T13:00:00Z", + "competition": { "type": "string" }, - "month": { - "example": "May 2026", + "competition_id": { + "type": "integer" + }, + "event_id": { + "type": "integer" + }, + "home_logo_url": { "type": "string" }, "name": { - "example": "French Open ATP, clay", "type": "string" }, - "path": { - "example": "/tennis/atp-singles/french-open/", + "start_time": { "type": "string" + } + }, + "type": "object" + }, + "fanduel.SportsbookBuilderEventsResponse": { + "properties": { + "competitions": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookBuilderCompetition" + }, + "type": "array" }, - "start_time": { - "example": "2026-05-24T09:00:00Z", + "events": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookBuilderEvent" + }, + "type": "array" + }, + "experience": { "type": "string" }, - "winner": { - "example": "Zverev Alexander", + "fetched_at": { "type": "string" }, - "winner_path": { - "example": "/player/zverev-alexander/dGbUhw9m/", + "first_event_id": { + "type": "integer" + }, + "state": { "type": "string" } }, "type": "object" }, - "flashscore.calendarResponseDoc": { + "fanduel.SportsbookBuilderGroup": { "properties": { - "code": { - "example": 200, - "type": "integer" + "card_ids": { + "items": { + "type": "string" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/flashscore.calendarDataDoc" + "id": { + "type": "string" }, - "msg": { - "example": "OK", + "layout_type": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { "type": "string" } }, "type": "object" }, - "flashscore.competitionDoc": { + "fanduel.SportsbookBuilderPlayer": { "properties": { - "event_count": { - "example": 10, - "type": "integer" + "headshot_url": { + "type": "string" }, "id": { - "example": "8bP2bXmH", "type": "string" }, "name": { - "example": "AFRICA: Africa Cup of Nations - Qualification", "type": "string" }, - "path": { - "example": "/football/africa/africa-cup-of-nations/", + "short_name": { "type": "string" }, - "region": { - "example": "Africa", + "team_id": { "type": "string" } }, "type": "object" }, - "flashscore.competitionsDataDoc": { + "fanduel.SportsbookBuilderResponse": { "properties": { - "competitions": { + "cards": { "items": { - "$ref": "#/definitions/flashscore.competitionDoc" + "$ref": "#/definitions/fanduel.SportsbookBuilderCard" }, "type": "array" }, - "day_offset": { - "example": 0, - "type": "integer" + "choices": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookBuilderChoice" + }, + "type": "array" }, - "source_url": { - "example": "https://global.flashscore.ninja/2/x/feed/f_1_0_8_en_1", + "competition": { "type": "string" }, - "sport": { - "example": "football", - "type": "string" - } - }, - "type": "object" - }, - "flashscore.competitionsResponseDoc": { - "properties": { - "code": { - "example": 200, + "competition_id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/flashscore.competitionsDataDoc" - }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "flashscore.dartsLegDoc": { - "properties": { - "away_legs": { - "example": 1, + "event_id": { "type": "integer" }, - "checkout": { - "example": 84, - "type": "integer" + "event_name": { + "type": "string" }, - "home_legs": { - "example": 0, - "type": "integer" + "experience": { + "type": "string" }, - "in_progress": { - "description": "True only for the leg being played in a live match.", - "example": true, - "type": "boolean" + "fetched_at": { + "type": "string" }, - "number": { - "example": 1, - "type": "integer" + "game_status": { + "type": "string" }, - "set": { - "description": "Only present for set-play matches: the set the leg belongs to.", - "example": 1, - "type": "integer" + "groups": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookBuilderGroup" + }, + "type": "array" }, - "start_score": { - "example": 501, - "type": "integer" + "layout": { + "items": { + "type": "string" + }, + "type": "array" }, - "starter": { - "enum": [ - "home", - "away" - ], - "example": "away", - "type": "string" + "periods": { + "items": { + "type": "string" + }, + "type": "array" }, - "visits": { + "players": { "items": { - "$ref": "#/definitions/flashscore.dartsVisitDoc" + "$ref": "#/definitions/fanduel.SportsbookBuilderPlayer" }, "type": "array" }, - "winner": { - "description": "Empty while the leg is still being played.", - "enum": [ - "home", - "away" - ], - "example": "away", - "type": "string" - } - }, - "type": "object" - }, - "flashscore.dartsSetStatisticsDoc": { - "properties": { - "set": { - "example": 1, + "ramp_event_id": { "type": "integer" }, - "statistics": { + "start_time": { + "type": "string" + }, + "state": { + "type": "string" + }, + "status": { + "type": "string" + }, + "teams": { "items": { - "$ref": "#/definitions/flashscore.dartsStatisticDoc" + "$ref": "#/definitions/fanduel.SportsbookBuilderTeam" }, "type": "array" } }, "type": "object" }, - "flashscore.dartsStatisticDoc": { + "fanduel.SportsbookBuilderTeam": { "properties": { - "away": { - "example": "97.05", - "type": "string" - }, - "home": { - "example": "92.91", + "abbr": { "type": "string" }, "id": { - "example": "55", "type": "string" }, - "key": { - "enum": [ - "average_3_darts", - "180_thrown", - "140_plus_thrown", - "100_plus_thrown", - "checkouts", - "checkouts_100_plus", - "highest_checkout", - "legs_won" - ], - "example": "average_3_darts", + "logo_url": { "type": "string" }, "name": { - "example": "Average (3 darts)", + "type": "string" + }, + "side": { "type": "string" } }, "type": "object" }, - "flashscore.dartsVisitDoc": { + "fanduel.SportsbookChoiceFailure": { "properties": { - "highlight": { - "enum": [ - "180", - "140_plus" - ], - "example": "180", + "choice_id": { "type": "string" }, - "number": { - "example": 5, - "type": "integer" - }, - "remaining": { - "example": 165, - "type": "integer" - }, - "scored": { - "example": 180, - "type": "integer" - }, - "side": { - "enum": [ - "home", - "away" - ], - "example": "away", + "code": { "type": "string" } }, "type": "object" }, - "flashscore.formationLineDoc": { + "fanduel.SportsbookChoiceQuote": { "properties": { - "number": { - "example": 1, + "american_odds": { "type": "integer" }, - "rows": { + "bet_type": { + "type": "string" + }, + "choice_id": { + "type": "string" + }, + "decimal_odds": { + "type": "number" + }, + "display_decimal_odds": { + "type": "number" + }, + "features": { "items": { - "$ref": "#/definitions/flashscore.formationRowDoc" + "type": "string" }, "type": "array" + }, + "fractional_odds": { + "type": "string" + }, + "same_game_multi": { + "type": "boolean" } }, "type": "object" }, - "flashscore.formationRowDoc": { + "fanduel.SportsbookChoiceQuotesResponse": { "properties": { - "player_ids": { - "example": [ - "x2zyKcHK" - ], + "failures": { "items": { - "type": "string" + "$ref": "#/definitions/fanduel.SportsbookChoiceFailure" }, "type": "array" }, - "sort_key": { - "example": 0, - "type": "integer" - } - }, - "type": "object" - }, - "flashscore.lineupAggregatedStatsDoc": { - "properties": { - "average_age": { - "example": 26.6, - "type": "number" + "fetched_at": { + "type": "string" }, - "average_height_cm": { - "example": 181.1, - "type": "number" + "quotes": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookChoiceQuote" + }, + "type": "array" }, - "average_rating": { - "example": 6.7, - "type": "number" + "ramp_event_id": { + "type": "integer" }, - "sum_market_value": { - "example": 47598854, - "type": "number" + "state": { + "type": "string" } }, "type": "object" }, - "flashscore.lineupGroupDoc": { + "fanduel.SportsbookCompetition": { "properties": { + "competition_id": { + "type": "integer" + }, + "event_type_id": { + "type": "integer" + }, "name": { - "example": "Predicted lineups", "type": "string" }, - "player_ids": { - "example": [ - "x2zyKcHK" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "type": { - "example": "PREDICTED_STARTERS", + "region": { "type": "string" } }, "type": "object" }, - "flashscore.lineupPlayerDoc": { + "fanduel.SportsbookDepthChartPlayer": { "properties": { "age": { - "example": 35, - "type": "number" - }, - "average_rating": { - "example": 7, - "type": "number" + "type": "integer" }, - "country": { - "example": "Brazil", + "college": { "type": "string" }, - "height_cm": { - "example": 189, - "type": "number" - }, - "id": { - "example": "x2zyKcHK", + "draft_pick": { "type": "string" }, - "list_name": { - "example": "Tiago Volpi", + "draft_round": { "type": "string" }, - "market_value": { - "example": 880751, - "type": "number" + "draft_year": { + "type": "string" }, "name": { - "example": "Tiago Volpi", "type": "string" }, - "number": { - "example": "18", + "position": { "type": "string" }, - "roles": { - "items": { - "$ref": "#/definitions/flashscore.lineupRoleDoc" - }, - "type": "array" + "rank": { + "type": "string" }, "slug": { - "example": "tiago-volpi", "type": "string" } }, "type": "object" }, - "flashscore.lineupRoleDoc": { + "fanduel.SportsbookDepthChartResponse": { "properties": { - "suffix": { - "example": "(G)", + "fetched_at": { "type": "string" }, - "title": { - "example": "Goalkeeper", + "league": { + "type": "string" + }, + "players": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookDepthChartPlayer" + }, + "type": "array" + }, + "team": { "type": "string" + }, + "team_leaders": { + "additionalProperties": {}, + "type": "object" } }, "type": "object" }, - "flashscore.matchBoxScoreColumnDoc": { + "fanduel.SportsbookDirectoryPlayer": { "properties": { - "format": { - "enum": [ - "num", - "time", - "fg" - ], - "example": "num", + "name": { "type": "string" }, - "key": { - "example": "PTS", - "type": "string" + "player_id": { + "type": "integer" }, - "label": { - "example": "Points", + "slug": { "type": "string" } }, "type": "object" }, - "flashscore.matchBoxScoreDataDoc": { + "fanduel.SportsbookEvent": { "properties": { - "match_id": { - "example": "KzoOQu6j", - "type": "string" + "competition_id": { + "type": "integer" }, - "source_url": { - "example": "https://global.flashscore.ninja/2/x/feed/df_psn_1_KzoOQu6j", - "type": "string" + "event_id": { + "type": "integer" }, - "teams": { + "event_type_id": { + "type": "integer" + }, + "in_play": { + "type": "boolean" + }, + "markets": { "items": { - "$ref": "#/definitions/flashscore.matchBoxScoreTeamDoc" + "$ref": "#/definitions/fanduel.SportsbookMarket" }, "type": "array" + }, + "name": { + "type": "string" + }, + "open_date": { + "type": "string" + }, + "video_available": { + "type": "boolean" } }, "type": "object" }, - "flashscore.matchBoxScorePlayerDoc": { + "fanduel.SportsbookEventPlayersResponse": { "properties": { - "country": { - "example": "USA", - "type": "string" + "away_team": { + "$ref": "#/definitions/fanduel.SportsbookTeam" }, - "name": { - "example": "Soares R.", + "competition": { "type": "string" }, - "player_id": { - "example": "lGyAxL74", + "event_id": { + "type": "integer" + }, + "event_name": { "type": "string" }, - "slug": { - "example": "soares-rivaldo", + "fetched_at": { "type": "string" }, - "stats": { - "additionalProperties": { - "type": "string" + "home_team": { + "$ref": "#/definitions/fanduel.SportsbookTeam" + }, + "players": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookPlayer" }, - "description": "Stats maps each column key to the displayed value; a dash from the provider is null.", - "type": "object" + "type": "array" }, - "status": { + "scheduled_at": { "type": "string" } }, "type": "object" }, - "flashscore.matchBoxScoreResponseDoc": { + "fanduel.SportsbookEventResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "competition": { + "$ref": "#/definitions/fanduel.SportsbookCompetition" }, - "data": { - "$ref": "#/definitions/flashscore.matchBoxScoreDataDoc" + "default_tab": { + "type": "string" }, - "msg": { - "example": "OK", + "event": { + "$ref": "#/definitions/fanduel.SportsbookEvent" + }, + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "flashscore.matchBoxScoreTableDoc": { - "properties": { - "columns": { + }, + "market_types": { "items": { - "$ref": "#/definitions/flashscore.matchBoxScoreColumnDoc" + "$ref": "#/definitions/fanduel.SportsbookMarketTypeCount" }, "type": "array" }, - "player_label": { - "example": "Player", - "type": "string" - }, - "players": { + "notes": { "items": { - "$ref": "#/definitions/flashscore.matchBoxScorePlayerDoc" + "type": "string" }, "type": "array" }, - "type": { - "enum": [ - "player", - "goalkeeper", - "pitcher" - ], - "example": "player", + "selected_tab": { "type": "string" + }, + "state": { + "type": "string" + }, + "tabs": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookTab" + }, + "type": "array" } }, "type": "object" }, - "flashscore.matchBoxScoreTeamDoc": { + "fanduel.SportsbookEventScoreResponse": { "properties": { - "name": { - "example": "Hapoel Holon", - "type": "string" + "event_id": { + "type": "integer" }, - "side": { - "enum": [ - "home", - "away" - ], - "example": "home", + "fetched_at": { "type": "string" }, - "tables": { + "live": { + "$ref": "#/definitions/fanduel.SportsbookLiveStatus" + }, + "media_types": { "items": { - "$ref": "#/definitions/flashscore.matchBoxScoreTableDoc" + "type": "string" }, "type": "array" + }, + "score": { + "$ref": "#/definitions/fanduel.SportsbookScore" } }, "type": "object" }, - "flashscore.matchDartsDataDoc": { + "fanduel.SportsbookEventStats": { "properties": { - "legs": { + "competition": { + "type": "string" + }, + "competition_id": { + "type": "integer" + }, + "event_id": { + "type": "integer" + }, + "last_five_games": { "items": { - "$ref": "#/definitions/flashscore.dartsLegDoc" + "$ref": "#/definitions/fanduel.SportsbookFormLine" }, "type": "array" }, - "match_id": { - "example": "KMrRR6R1", - "type": "string" + "other_widgets": { + "additionalProperties": {}, + "type": "object" }, - "set_statistics": { - "description": "Only present for set-play matches: the statistics of each set.", + "spread_bets_percent": { "items": { - "$ref": "#/definitions/flashscore.dartsSetStatisticsDoc" + "$ref": "#/definitions/fanduel.SportsbookSplit" }, "type": "array" }, - "source_url": { - "example": "https://global.flashscore.ninja/2/x/feed/df_mhn_1_KMrRR6R1", - "type": "string" - }, - "statistics": { + "spread_money_percent": { "items": { - "$ref": "#/definitions/flashscore.dartsStatisticDoc" + "$ref": "#/definitions/fanduel.SportsbookSplit" }, "type": "array" }, - "statistics_url": { - "example": "https://global.flashscore.ninja/2/x/feed/df_stn_1_KMrRR6R1", - "type": "string" + "teams": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookStatsTeam" + }, + "type": "array" } }, "type": "object" }, - "flashscore.matchDartsResponseDoc": { + "fanduel.SportsbookEventStatsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/flashscore.matchDartsDataDoc" - }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" + }, + "stats": { + "$ref": "#/definitions/fanduel.SportsbookEventStats" } }, "type": "object" }, - "flashscore.matchMissingPlayersDataDoc": { + "fanduel.SportsbookEventStatus": { "properties": { - "match_id": { - "example": "f75igXFG", + "event_id": { + "type": "integer" + }, + "game_phase": { "type": "string" }, - "source_url": { - "example": "https://2.ds.lsapp.eu/pq_graphql?_hash=dmpe2&eventId=f75igXFG&projectId=2", + "price_clock": { "type": "string" }, - "teams": { - "items": { - "$ref": "#/definitions/flashscore.missingPlayersTeamDoc" - }, - "type": "array" - } - }, - "type": "object" - }, - "flashscore.matchMissingPlayersResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "status": { + "type": "string" }, - "data": { - "$ref": "#/definitions/flashscore.matchMissingPlayersDataDoc" + "status_clock": { + "type": "string" }, - "msg": { - "example": "OK", + "structure_clock": { "type": "string" } }, "type": "object" }, - "flashscore.matchMomentumDataDoc": { + "fanduel.SportsbookEventsStatusResponse": { "properties": { - "event_types": { - "items": { - "$ref": "#/definitions/flashscore.momentumEventTypeDoc" - }, - "type": "array" - }, "events": { "items": { - "$ref": "#/definitions/flashscore.momentumEventDoc" + "$ref": "#/definitions/fanduel.SportsbookEventStatus" }, "type": "array" }, - "match_id": { - "example": "j52jHsN8", + "fetched_at": { "type": "string" }, - "momentum": { + "not_found": { "items": { - "$ref": "#/definitions/flashscore.momentumFrameDoc" + "type": "integer" }, "type": "array" }, - "source_url": { - "example": "https://2.ds.lsapp.eu/pq_graphql?_hash=mmts&eventId=j52jHsN8&providerId=7", + "state": { "type": "string" - }, - "teams": { - "items": { - "$ref": "#/definitions/flashscore.momentumTeamDoc" - }, - "type": "array" } }, "type": "object" }, - "flashscore.matchMomentumResponseDoc": { + "fanduel.SportsbookFormLine": { "properties": { - "code": { - "example": 200, - "type": "integer" + "name": { + "type": "string" }, - "data": { - "$ref": "#/definitions/flashscore.matchMomentumDataDoc" + "results": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "selection_id": { + "type": "integer" } }, "type": "object" }, - "flashscore.matchNewsArticleRefDoc": { + "fanduel.SportsbookFutureOdd": { "properties": { - "article": { - "$ref": "#/definitions/flashscore.matchNewsArticleSortKeyDoc" + "description": { + "type": "string" }, - "id": { - "example": "GYDHQ2yR", + "market_type": { + "type": "string" + }, + "odds": { + "type": "string" + }, + "team": { + "type": "string" + }, + "team_slug": { "type": "string" } }, "type": "object" }, - "flashscore.matchNewsArticleSortKeyDoc": { + "fanduel.SportsbookGameLine": { "properties": { - "sort_key": { - "example": 1790163122, - "type": "integer" + "odds": { + "type": "string" + }, + "value": { + "type": "string" } }, "type": "object" }, - "flashscore.matchNewsDataDoc": { + "fanduel.SportsbookGameSummary": { "properties": { - "layout_id": { - "example": 80103, + "away_score": { "type": "integer" }, - "match_id": { - "example": "xtmHKGT0", + "away_slug": { "type": "string" }, - "name": { - "example": "Default EVENT layout", + "away_team": { "type": "string" }, - "sections": { - "items": { - "$ref": "#/definitions/flashscore.matchNewsSectionDoc" - }, - "type": "array" - }, - "source_url": { - "example": "https://2.ds.lsapp.eu/pq_graphql?_hash=fsned&entityId=xtmHKGT0&layoutTypeId=2&projectId=2", + "date": { "type": "string" - } - }, - "type": "object" - }, - "flashscore.matchNewsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "home_score": { "type": "integer" }, - "data": { - "$ref": "#/definitions/flashscore.matchNewsDataDoc" + "home_slug": { + "type": "string" }, - "msg": { - "example": "OK", + "home_team": { + "type": "string" + }, + "title": { + "type": "string" + }, + "venue": { "type": "string" } }, "type": "object" }, - "flashscore.matchNewsSectionDoc": { + "fanduel.SportsbookLeagueGame": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/flashscore.matchNewsArticleRefDoc" - }, - "type": "array" + "away_code": { + "type": "string" }, - "id": { - "example": 1, + "away_score": { "type": "integer" }, - "name": { - "example": "articlesOnParticipants", + "away_slug": { "type": "string" - } - }, - "type": "object" - }, - "flashscore.matchOddsDataDoc": { - "properties": { - "bookmakers": { - "items": { - "$ref": "#/definitions/flashscore.oddsBookmakerDoc" - }, - "type": "array" }, - "geo": { - "example": "GB", + "away_team": { "type": "string" }, - "markets": { - "items": { - "$ref": "#/definitions/flashscore.oddsMarketDoc" - }, - "type": "array" + "broadcast": { + "type": "string" }, - "match_id": { - "example": "p0aFxkkn", + "bye_week": { + "type": "boolean" + }, + "conference_game": { + "type": "boolean" + }, + "home_code": { "type": "string" }, - "participants": { - "items": { - "$ref": "#/definitions/flashscore.oddsParticipantDoc" - }, - "type": "array" + "home_score": { + "type": "integer" }, - "source_url": { - "example": "https://global.ds.lsapp.eu/odds/pq_graphql?_hash=oce&eventId=p0aFxkkn&geoIpCode=GB&geoIpSubdivisionCode=&projectId=2", + "home_slug": { "type": "string" }, - "subdivision": { - "example": "NJ", + "home_team": { "type": "string" - } - }, - "type": "object" - }, - "flashscore.matchOddsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/flashscore.matchOddsDataDoc" + "scheduled_time": { + "type": "string" }, - "msg": { - "example": "OK", + "status": { + "type": "string" + }, + "title": { + "type": "string" + }, + "venue": { "type": "string" + }, + "week": { + "type": "integer" } }, "type": "object" }, - "flashscore.matchPlayerStatsDataDoc": { + "fanduel.SportsbookLeagueScheduleResponse": { "properties": { - "groups": { - "items": { - "$ref": "#/definitions/flashscore.playerStatGroupDoc" - }, - "type": "array" + "date": { + "type": "string" }, - "match_id": { - "example": "j52jHsN8", + "end_date": { "type": "string" }, - "players": { + "fetched_at": { + "type": "string" + }, + "game_count": { + "type": "integer" + }, + "groups": { "items": { - "$ref": "#/definitions/flashscore.playerMatchStatsDoc" + "$ref": "#/definitions/fanduel.SportsbookScheduleGroup" }, "type": "array" }, - "source_url": { - "example": "https://2.ds.lsapp.eu/pq_graphql?_hash=epmsd&eventId=j52jHsN8&providerId=7", + "league": { "type": "string" }, - "stat_types": { - "items": { - "$ref": "#/definitions/flashscore.playerStatTypeDoc" - }, - "type": "array" + "week": { + "$ref": "#/definitions/fanduel.SportsbookScheduleWeek" }, - "teams": { + "weeks": { "items": { - "$ref": "#/definitions/flashscore.playerStatTeamDoc" + "$ref": "#/definitions/fanduel.SportsbookScheduleWeek" }, "type": "array" } }, "type": "object" }, - "flashscore.matchPlayerStatsResponseDoc": { + "fanduel.SportsbookLiveCountResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "fetched_at": { + "type": "string" }, - "data": { - "$ref": "#/definitions/flashscore.matchPlayerStatsDataDoc" + "live_events": { + "type": "integer" }, - "msg": { - "example": "OK", + "state": { "type": "string" } }, "type": "object" }, - "flashscore.matchPointByPointDataDoc": { + "fanduel.SportsbookLiveDataResponse": { "properties": { - "current_game": { - "$ref": "#/definitions/flashscore.pointByPointCurrentGameDoc" + "events": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookLiveEvent" + }, + "type": "array" }, - "match_id": { - "example": "8v653Rz9", + "fetched_at": { "type": "string" }, - "periods": { + "missing": { "items": { - "$ref": "#/definitions/flashscore.pointByPointPeriodDoc" + "type": "integer" }, "type": "array" - }, - "source_url": { - "example": "https://global.flashscore.ninja/2/x/feed/df_mh_1_8v653Rz9", - "type": "string" } }, "type": "object" }, - "flashscore.matchPointByPointResponseDoc": { + "fanduel.SportsbookLiveEvent": { "properties": { - "code": { - "example": 200, + "away_score": { "type": "integer" }, - "data": { - "$ref": "#/definitions/flashscore.matchPointByPointDataDoc" + "details": { + "additionalProperties": {}, + "type": "object" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "flashscore.matchPredictedLineupsDataDoc": { - "properties": { - "match_id": { - "example": "f75igXFG", + "event_id": { + "type": "integer" + }, + "home_score": { + "type": "integer" + }, + "live": { + "type": "boolean" + }, + "media_types": { + "items": { + "type": "string" + }, + "type": "array" + }, + "player_progress": { + "additionalProperties": {}, + "type": "object" + }, + "player_stats": { + "additionalProperties": {}, + "type": "object" + }, + "provider": { "type": "string" }, - "source_url": { - "example": "https://2.ds.lsapp.eu/pq_graphql?_hash=dplie&eventId=f75igXFG&projectId=2", + "sport": { "type": "string" + } + }, + "type": "object" + }, + "fanduel.SportsbookLiveScore": { + "properties": { + "away_score": { + "type": "integer" }, - "teams": { + "current_period": { + "type": "integer" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "event_id": { + "type": "integer" + }, + "home_score": { + "type": "integer" + }, + "media_types": { "items": { - "$ref": "#/definitions/flashscore.predictedLineupTeamDoc" + "type": "string" }, "type": "array" + }, + "model_type": { + "type": "string" + }, + "period": { + "type": "string" + }, + "period_remaining_milliseconds": { + "type": "integer" + }, + "provider": { + "type": "string" + }, + "sport": { + "type": "string" } }, "type": "object" }, - "flashscore.matchPredictedLineupsResponseDoc": { + "fanduel.SportsbookLiveScoresResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "events": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookLiveScore" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/flashscore.matchPredictedLineupsDataDoc" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "not_found": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "state": { "type": "string" } }, "type": "object" }, - "flashscore.matchReportDataDoc": { + "fanduel.SportsbookLiveStatus": { "properties": { - "match_id": { - "example": "j52jHsN8", + "box_score_available": { + "type": "boolean" + }, + "competition": { "type": "string" }, - "report": { - "$ref": "#/definitions/flashscore.matchReportDoc" + "play_by_play_available": { + "type": "boolean" }, - "source_url": { - "example": "https://global.flashscore.ninja/2/x/feed/df_rr_j52jHsN8/", + "provider": { + "type": "string" + }, + "quick_bets_available": { + "type": "boolean" + }, + "score_available": { + "type": "boolean" + }, + "status": { "type": "string" } }, "type": "object" }, - "flashscore.matchReportDoc": { + "fanduel.SportsbookMarket": { "properties": { - "author": { - "example": "Adam Clancy", + "betting_type": { "type": "string" }, - "content": { - "items": { - "$ref": "#/definitions/flashscore.reportBlockDoc" - }, - "type": "array" + "in_play": { + "type": "boolean" }, - "edited_at": { - "example": "2026-09-19T15:55:26Z", + "market_id": { "type": "string" }, - "id": { - "example": "ALRieYFJ", + "market_time": { "type": "string" }, - "images": { + "name": { + "type": "string" + }, + "runners": { "items": { - "$ref": "#/definitions/flashscore.reportImageDoc" + "$ref": "#/definitions/fanduel.SportsbookRunner" }, "type": "array" }, - "published_at": { - "example": "2026-09-19T15:55:23Z", - "type": "string" + "same_game_parlay_eligible": { + "type": "boolean" }, - "text": { + "status": { "type": "string" }, - "title": { - "example": "Seagulls soar as Arsenal gunned down", + "type": { "type": "string" } }, "type": "object" }, - "flashscore.matchReportResponseDoc": { + "fanduel.SportsbookMarketPrice": { "properties": { - "code": { - "example": 200, + "bet_delay_seconds": { "type": "integer" }, - "data": { - "$ref": "#/definitions/flashscore.matchReportDataDoc" + "betting_type": { + "type": "string" }, - "msg": { - "example": "OK", + "in_play": { + "type": "boolean" + }, + "market_id": { + "type": "string" + }, + "runners": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookPriceRunner" + }, + "type": "array" + }, + "same_game_parlay_eligible": { + "type": "boolean" + }, + "status": { "type": "string" } }, "type": "object" }, - "flashscore.matchTVDataDoc": { + "fanduel.SportsbookMarketPricesResponse": { "properties": { - "broadcasters": { + "fetched_at": { + "type": "string" + }, + "markets": { "items": { - "$ref": "#/definitions/flashscore.broadcasterDoc" + "$ref": "#/definitions/fanduel.SportsbookMarketPrice" }, "type": "array" }, - "geo": { - "example": "GB", - "type": "string" - }, - "match_id": { - "example": "p0aFxkkn", - "type": "string" + "missing": { + "items": { + "type": "string" + }, + "type": "array" }, - "source_url": { - "example": "https://global.flashscore.ninja/2/x/feed/df_dos_1_p0aFxkkn_", + "state": { "type": "string" } }, "type": "object" }, - "flashscore.matchTVResponseDoc": { + "fanduel.SportsbookMarketTypeCount": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/flashscore.matchTVDataDoc" - }, - "msg": { - "example": "OK", + "type": { "type": "string" } }, "type": "object" }, - "flashscore.missingPlayerDoc": { + "fanduel.SportsbookNavLink": { "properties": { - "country": { - "example": "Brazil", + "custom_page_id": { "type": "string" }, - "list_name": { - "example": "Davi Gomes", - "type": "string" + "display_order": { + "type": "integer" }, - "name": { - "example": "Davi Gomes", + "icon": { "type": "string" }, - "player_id": { - "example": "E9BtZaJL", + "id": { + "type": "integer" + }, + "kind": { "type": "string" }, - "reason": { - "example": "Knee Injury", + "title": { "type": "string" }, - "slug": { - "example": "davi-gomes", + "url": { "type": "string" } }, "type": "object" }, - "flashscore.missingPlayersTeamDoc": { + "fanduel.SportsbookPageResponse": { "properties": { - "doubtful": { - "items": { - "$ref": "#/definitions/flashscore.missingPlayerDoc" - }, - "type": "array" + "competition_id": { + "type": "integer" }, - "missing": { + "competitions": { "items": { - "$ref": "#/definitions/flashscore.missingPlayerDoc" + "$ref": "#/definitions/fanduel.SportsbookCompetition" }, "type": "array" }, - "participant_id": { - "example": "2FbjCJan", + "custom_page_id": { "type": "string" }, - "side": { - "enum": [ - "home", - "away" - ], - "example": "home", - "type": "string" - } - }, - "type": "object" - }, - "flashscore.momentumEventDoc": { - "properties": { - "id": { - "example": "jqIssqqn", + "default_tab": { "type": "string" }, - "label": { - "example": "Goal", + "description": { "type": "string" }, - "minute": { - "example": "31'", - "type": "string" + "event_type_id": { + "type": "integer" }, - "period": { - "enum": [ - "first_half", - "second_half", - "extra_time", - "first_extra_time", - "second_extra_time", - "unknown" - ], - "example": "first_half", - "type": "string" + "events": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookEvent" + }, + "type": "array" }, - "player_id": { - "example": "trpxfbO3", + "fetched_at": { "type": "string" }, - "player_name": { - "example": "Gross Pascal", - "type": "string" + "market_types": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookMarketTypeCount" + }, + "type": "array" }, - "side": { - "enum": [ - "home", - "away" - ], - "example": "home", + "page_type": { "type": "string" }, - "stage_id": { - "example": 12, - "type": "integer" - }, - "team_id": { - "example": "2XrRecc3", + "selected_tab": { "type": "string" }, - "type": { - "enum": [ - "yellow_red_card", - "red_card", - "goal", - "own_goal", - "penalty_goal" - ], - "example": "goal", - "type": "string" - } - }, - "type": "object" - }, - "flashscore.momentumEventTypeDoc": { - "properties": { - "label": { - "example": "Goal", + "state": { "type": "string" }, - "type": { - "enum": [ - "yellow_red_card", - "red_card", - "goal", - "own_goal", - "penalty_goal" - ], - "example": "goal", + "tabs": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookTab" + }, + "type": "array" + }, + "title": { "type": "string" } }, "type": "object" }, - "flashscore.momentumFrameDoc": { + "fanduel.SportsbookParlay": { "properties": { - "added_time": { - "example": 1, + "american_odds": { "type": "integer" }, - "elapsed_minute": { - "example": 45, - "type": "integer" + "away_team": { + "type": "string" }, - "elapsed_second": { - "example": 59, + "competition_id": { "type": "integer" }, - "minute": { - "example": "45+1'", + "competition_name": { "type": "string" }, - "period": { - "enum": [ - "first_half", - "second_half", - "extra_time", - "first_extra_time", - "second_extra_time", - "unknown" - ], - "example": "first_half", - "type": "string" + "decimal_odds": { + "type": "number" }, - "stage_id": { - "example": 12, + "event_id": { "type": "integer" }, - "value": { - "example": 0.29, - "type": "number" - } - }, - "type": "object" - }, - "flashscore.momentumTeamDoc": { - "properties": { - "code": { - "example": "BHA", + "event_name": { + "type": "string" + }, + "featured_by": { + "type": "string" + }, + "home_team": { "type": "string" }, "id": { - "example": "2XrRecc3", "type": "string" }, - "side": { - "enum": [ - "home", - "away" - ], - "example": "home", + "is_editable": { + "type": "boolean" + }, + "is_manually_created": { + "type": "boolean" + }, + "legs": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookParlayLeg" + }, + "type": "array" + }, + "narrative": { + "type": "string" + }, + "total_bets": { + "type": "integer" + }, + "type": { "type": "string" } }, "type": "object" }, - "flashscore.navigationDataDoc": { + "fanduel.SportsbookParlayEventGroup": { "properties": { - "groups": { - "items": { - "$ref": "#/definitions/flashscore.navigationGroupDoc" - }, - "type": "array" + "away_team": { + "type": "string" }, - "path": { - "example": "/basketball/usa/", + "event_id": { + "type": "integer" + }, + "event_name": { "type": "string" }, - "source_url": { - "example": "https://www.flashscore.com/basketball/usa/", + "home_team": { "type": "string" }, - "title": { - "example": "Basketball USA - NBA, NCAA, live scores and livescore", + "open_date": { "type": "string" + }, + "parlay_ids": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "flashscore.navigationGroupDoc": { + "fanduel.SportsbookParlayFilter": { "properties": { - "items": { + "competition_ids": { "items": { - "$ref": "#/definitions/flashscore.navigationItemDoc" + "type": "integer" }, "type": "array" }, - "name": { - "example": "USA", + "id": { + "type": "string" + }, + "text": { "type": "string" } }, "type": "object" }, - "flashscore.navigationItemDoc": { + "fanduel.SportsbookParlayLeg": { "properties": { - "id": { - "example": 1234, + "competition_id": { "type": "integer" }, - "name": { - "example": "NBA", + "event_id": { + "type": "integer" + }, + "event_name": { "type": "string" }, - "path": { - "example": "/basketball/usa/nba/", + "market": { "type": "string" }, - "sport_id": { - "example": 3, - "type": "integer" - } - }, - "type": "object" - }, - "flashscore.navigationResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "market_id": { + "type": "string" }, - "data": { - "$ref": "#/definitions/flashscore.navigationDataDoc" + "market_type": { + "type": "string" }, - "msg": { - "example": "OK", + "selection": { "type": "string" + }, + "selection_id": { + "type": "integer" } }, "type": "object" }, - "flashscore.newsArticleDataDoc": { + "fanduel.SportsbookParlayTypeCount": { "properties": { - "article": { - "$ref": "#/definitions/flashscore.newsArticleDoc" + "count": { + "type": "integer" }, - "source_url": { - "example": "https://2.ds.lsapp.eu/pq_graphql?_hash=nah&articleId=GYDHQ2yR", + "type": { "type": "string" } }, "type": "object" }, - "flashscore.newsArticleDoc": { + "fanduel.SportsbookParlaysResponse": { "properties": { - "edited_at": { + "card_cap": { "type": "integer" }, - "id": { - "example": "GYDHQ2yR", - "type": "string" - }, - "images": { + "event_groups": { "items": { - "$ref": "#/definitions/flashscore.newsImageDoc" + "$ref": "#/definitions/fanduel.SportsbookParlayEventGroup" }, "type": "array" }, - "published_at": { - "example": 1790163122, + "event_id": { "type": "integer" }, - "slug": { - "example": "premier-league-panel-admits-penalty-awarded-to-sunderland-vs-arsenal-was-wrong", + "fetched_at": { "type": "string" }, - "title": { - "example": "Premier League panel admits penalty awarded to Sunderland vs Arsenal was wrong", + "filters": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookParlayFilter" + }, + "type": "array" + }, + "parlays": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookParlay" + }, + "type": "array" + }, + "state": { "type": "string" }, - "type": { - "example": "STANDARD", + "truncated": { + "type": "boolean" + }, + "types": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookParlayTypeCount" + }, + "type": "array" + }, + "view": { "type": "string" } }, "type": "object" }, - "flashscore.newsArticleResponseDoc": { + "fanduel.SportsbookPeriodScore": { "properties": { - "code": { - "example": 200, + "away": { "type": "integer" }, - "data": { - "$ref": "#/definitions/flashscore.newsArticleDataDoc" + "home": { + "type": "integer" }, - "msg": { - "example": "OK", + "period": { "type": "string" } }, "type": "object" }, - "flashscore.newsCategoriesDataDoc": { + "fanduel.SportsbookPlacement": { "properties": { - "categories": { + "placement": { + "type": "string" + }, + "promo_codes": { "items": { - "$ref": "#/definitions/flashscore.newsCategoryDoc" + "type": "string" }, "type": "array" - }, - "source_url": { - "example": "https://www.flashscore.com/news/", - "type": "string" } }, "type": "object" }, - "flashscore.newsCategoriesResponseDoc": { + "fanduel.SportsbookPlayByPlayResponse": { "properties": { - "code": { - "example": 200, + "available": { + "type": "boolean" + }, + "current": { + "type": "boolean" + }, + "event_id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/flashscore.newsCategoriesDataDoc" + "feed": { + "additionalProperties": {}, + "type": "object" }, - "msg": { - "example": "OK", + "fetched_at": { + "type": "string" + }, + "status": { "type": "string" } }, "type": "object" }, - "flashscore.newsCategoryDoc": { + "fanduel.SportsbookPlayer": { "properties": { - "entity_id": { - "description": "EntityID and EntityType are empty for the All section.", - "example": "SW9D1eZo", - "type": "string" - }, - "entity_type": { - "enum": [ - "SPORT", - "TOURNAMENT_TEMPLATE", - "TAG" - ], - "example": "SPORT", - "type": "string" - }, - "key": { - "example": "football", + "abbreviated_name": { "type": "string" }, "name": { - "example": "Football", "type": "string" }, - "path": { - "example": "/news/football/", - "type": "string" - } - }, - "type": "object" - }, - "flashscore.newsImageDoc": { - "properties": { - "alt_text": { - "example": "Arteta on the touchline", + "number": { "type": "string" }, - "credit": { - "example": "REUTERS / Scott Heppell", + "player_id": { "type": "string" }, - "url": { - "example": "https://livesport-ott-images.ssl.cdn.cra.cz/d9623cbc-957c-4955-bdc9-e82567576136", + "position": { "type": "string" }, - "variant_type_id": { - "example": 1, - "type": "integer" + "team": { + "type": "string" } }, "type": "object" }, - "flashscore.newsListDataDoc": { + "fanduel.SportsbookPlayerNewsResponse": { "properties": { "articles": { "items": { - "$ref": "#/definitions/flashscore.newsPreviewDoc" + "$ref": "#/definitions/fanduel.SportsbookTeamArticle" }, "type": "array" }, - "category": { - "$ref": "#/definitions/flashscore.newsCategoryDoc" + "fetched_at": { + "type": "string" }, "has_more": { - "example": true, "type": "boolean" }, - "page": { - "example": 1, - "type": "integer" + "league": { + "type": "string" }, - "source_url": { - "example": "https://www.flashscore.com/news/football/", + "name": { + "type": "string" + }, + "next_cursor": { + "type": "string" + }, + "player": { "type": "string" + }, + "player_updates": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" } }, "type": "object" }, - "flashscore.newsListResponseDoc": { + "fanduel.SportsbookPlayerPropEvent": { "properties": { - "code": { - "example": 200, - "type": "integer" + "date": { + "type": "string" }, - "data": { - "$ref": "#/definitions/flashscore.newsListDataDoc" + "event_id": { + "type": "integer" }, - "msg": { - "example": "OK", + "event_name": { "type": "string" + }, + "markets": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookPlayerPropMarket" + }, + "type": "array" } }, "type": "object" }, - "flashscore.newsPreviewDoc": { + "fanduel.SportsbookPlayerPropMarket": { "properties": { - "date": { - "example": "25.09.2026 18:20", + "market_id": { "type": "string" }, - "id": { - "example": "Y9WFYvHj", + "market_type": { "type": "string" }, - "image_alt": { - "example": "Erling Haaland celebrates", + "name": { "type": "string" }, - "image_url": { - "example": "https://livesport-ott-images.ssl.cdn.cra.cz/r900xfq60/example.jpeg", - "type": "string" + "selections": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookPlayerPropSelection" + }, + "type": "array" + } + }, + "type": "object" + }, + "fanduel.SportsbookPlayerPropSelection": { + "properties": { + "handicap": { + "type": "number" }, - "path": { - "example": "/news/haaland-brace-helps-norway-to-first-win-over-scandinavian-rivals-denmark-in-28-years/Y9WFYvHj/", + "odds": { "type": "string" }, - "title": { - "example": "Haaland brace helps Norway to first win over Scandinavian rivals Denmark", + "runner": { "type": "string" + }, + "selection_id": { + "type": "integer" } }, "type": "object" }, - "flashscore.oddsBookmakerDoc": { + "fanduel.SportsbookPlayerProps": { "properties": { - "id": { - "example": 16, - "type": "integer" + "events": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookPlayerPropEvent" + }, + "type": "array" }, - "name": { - "example": "bet365", + "player": { + "type": "string" + }, + "slug": { "type": "string" } }, "type": "object" }, - "flashscore.oddsGeoDoc": { + "fanduel.SportsbookPlayerPropsResponse": { "properties": { - "code": { - "example": "GB", + "content_text": { "type": "string" }, - "has_bookmakers": { - "example": true, - "type": "boolean" + "events": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookPlayerPropEvent" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "league": { + "type": "string" }, "name": { - "example": "United Kingdom", + "type": "string" + }, + "player": { "type": "string" } }, "type": "object" }, - "flashscore.oddsGeosDataDoc": { + "fanduel.SportsbookPlayerResponse": { "properties": { - "betting_scopes": { - "example": [ - "FULL_TIME" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "betting_types": { - "example": [ - "HOME_DRAW_AWAY" - ], - "items": { - "type": "string" - }, - "type": "array" + "fetched_at": { + "type": "string" }, - "default_geo": { - "example": "GB", + "game_log": {}, + "league": { "type": "string" }, - "geos": { - "items": { - "$ref": "#/definitions/flashscore.oddsGeoDoc" - }, - "type": "array" + "name": { + "type": "string" }, - "handicap_types": { - "example": [ - "UNKNOWN" - ], + "news": { "items": { - "type": "string" + "$ref": "#/definitions/fanduel.SportsbookTeamArticle" }, "type": "array" }, - "subdivision_notes": { - "example": "subdivision is accepted only with geo US or CA, where it changes which bookmakers are licensed.", + "player": { "type": "string" }, - "subdivisions": { + "player_updates": { "items": { - "$ref": "#/definitions/flashscore.oddsSubdivisionDoc" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "verified_on": { - "example": "2026-10-07", + "position": { "type": "string" - } - }, - "type": "object" - }, - "flashscore.oddsGeosResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/flashscore.oddsGeosDataDoc" + "projections": {}, + "season": { + "additionalProperties": {}, + "type": "object" }, - "msg": { - "example": "OK", + "season_totals": {}, + "stats": { + "additionalProperties": {}, + "type": "object" + }, + "team": { + "type": "string" + }, + "team_slug": { "type": "string" } }, "type": "object" }, - "flashscore.oddsMarketDoc": { + "fanduel.SportsbookPlayerStatsResponse": { "properties": { - "betting_type": { - "enum": [ - "HOME_DRAW_AWAY", - "HOME_AWAY", - "DRAW_NO_BET", - "DOUBLE_CHANCE", - "ASIAN_HANDICAP", - "EUROPEAN_HANDICAP", - "OVER_UNDER", - "BOTH_TEAMS_TO_SCORE", - "CORRECT_SCORE", - "HALF_FULL_TIME", - "ODD_OR_EVEN", - "TO_QUALIFY", - "NEXT_GOAL", - "TOP_POSITION_MERGED", - "TO_WIN_AND_TOP_POSITION", - "WIN_EACH_WAY" - ], - "example": "HOME_DRAW_AWAY", + "fetched_at": { "type": "string" }, - "offers": { - "items": { - "$ref": "#/definitions/flashscore.oddsOfferDoc" - }, - "type": "array" + "league": { + "type": "string" }, - "scope": { - "enum": [ - "FULL_TIME", - "FULL_TIME_OVER_TIME", - "FIRST_HALF", - "SECOND_HALF", - "FIRST_PERIOD", - "FIRST_QUARTER", - "FIRST_SET", - "SECOND_SET" - ], - "example": "FULL_TIME", + "name": { + "type": "string" + }, + "player": { + "type": "string" + }, + "position": { "type": "string" + }, + "stats": { + "additionalProperties": {}, + "type": "object" } }, "type": "object" }, - "flashscore.oddsOfferDoc": { + "fanduel.SportsbookPlayersResponse": { "properties": { - "bookmaker_id": { - "example": 16, + "fetched_at": { + "type": "string" + }, + "league": { + "type": "string" + }, + "limit": { "type": "integer" }, - "outcomes": { + "offset": { + "type": "integer" + }, + "players": { "items": { - "$ref": "#/definitions/flashscore.oddsOutcomeDoc" + "$ref": "#/definitions/fanduel.SportsbookDirectoryPlayer" }, "type": "array" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "flashscore.oddsOutcomeDoc": { + "fanduel.SportsbookPriceRunner": { "properties": { - "active": { - "example": true, - "type": "boolean" - }, - "half_full_time": { - "example": "1/1", - "type": "string" + "american_odds": { + "type": "integer" }, - "handicap": { - "example": 2.5, + "decimal_odds": { "type": "number" }, - "handicap_type": { - "enum": [ - "UNKNOWN", - "GOALS", - "GAMES", - "SETS", - "POINTS", - "FRAMES", - "LEGS", - "RUNS" - ], - "example": "UNKNOWN", + "fractional_odds": { "type": "string" }, - "odds": { - "example": 2.6, - "type": "number" - }, - "opening_odds": { - "example": 3, + "handicap": { "type": "number" }, - "participant_id": { - "example": "Gzrm3lW6", - "type": "string" + "previous_american_odds": { + "description": "PreviousAmericanOdds and PreviousDecimalOdds are the price immediately\nbefore the current one, present once the price has moved.", + "type": "integer" }, - "score": { - "example": "2:1", - "type": "string" + "previous_decimal_odds": { + "type": "number" }, - "selection": { - "example": "home", - "type": "string" + "selection_id": { + "type": "integer" }, - "side": { - "enum": [ - "home", - "away" - ], - "example": "home", + "status": { "type": "string" } }, "type": "object" }, - "flashscore.oddsParticipantDoc": { + "fanduel.SportsbookPromotion": { "properties": { - "id": { - "example": "Gzrm3lW6", + "button_text": { "type": "string" }, - "side": { - "enum": [ - "home", - "away" - ], - "example": "home", + "button_url": { "type": "string" - } - }, - "type": "object" - }, - "flashscore.oddsSubdivisionDoc": { - "properties": { - "code": { - "example": "NJ", + }, + "ends_at": { "type": "string" }, - "geo": { - "example": "US", + "image_url": { "type": "string" }, "name": { - "example": "New Jersey", "type": "string" - } - }, - "type": "object" - }, - "flashscore.playerMatchStatsDoc": { - "properties": { - "highlights": { - "example": [ - "goals", - "assists" - ], + }, + "products": { "items": { "type": "string" }, "type": "array" }, - "id": { - "example": "trpxfbO3", + "promo_code": { "type": "string" }, - "name": { - "example": "Gross Pascal", - "type": "string" + "tags": { + "items": { + "type": "string" + }, + "type": "array" }, - "position": { - "example": "Midfielder", + "title": { "type": "string" - }, - "rating": { - "example": 8.3, - "type": "number" - }, - "short_name": { - "example": "Gross P.", + } + }, + "type": "object" + }, + "fanduel.SportsbookPromotionsResponse": { + "properties": { + "context": { "type": "string" }, - "side": { - "enum": [ - "home", - "away" - ], - "example": "home", + "custom_page_id": { "type": "string" }, - "slug": { - "example": "gross-pascal", + "event_type_id": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "starter": { - "example": true, - "type": "boolean" + "placements": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookPlacement" + }, + "type": "array" }, - "stats": { - "additionalProperties": { - "$ref": "#/definitions/flashscore.playerStatValueDoc" + "promotions": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookPromotion" }, - "description": "Stats maps a statistic key from stat_types to this player's value.", - "type": "object" + "type": "array" }, - "team_id": { - "example": "2XrRecc3", + "state": { "type": "string" }, - "top_rated": { - "example": true, - "type": "boolean" - } - }, - "type": "object" - }, - "flashscore.playerStatCombinedDoc": { - "properties": { - "stats": { - "example": [ - "passes_accurate", - "passes_total", - "passes_accuracy" - ], + "tags": { "items": { - "type": "string" + "$ref": "#/definitions/fanduel.SportsbookTagCount" }, "type": "array" - }, - "template": { - "example": "%s/%s (%s)", - "type": "string" } }, "type": "object" }, - "flashscore.playerStatGroupDoc": { + "fanduel.SportsbookRosterPlayer": { "properties": { - "goalkeeper_only": { - "example": false, - "type": "boolean" + "college": { + "type": "string" }, - "key": { - "enum": [ - "top_stats", - "shots", - "attack", - "passes", - "defense", - "goalkeeping", - "general" - ], - "example": "shots", + "experience": { "type": "string" }, - "label": { - "example": "Shots", + "height": { "type": "string" }, - "stats": { - "example": [ - "shots_total", - "goals" - ], - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "flashscore.playerStatTeamDoc": { - "properties": { - "id": { - "example": "2XrRecc3", + "injury_status": { "type": "string" }, "name": { - "example": "Brighton", "type": "string" }, - "side": { - "enum": [ - "home", - "away" - ], - "example": "home", + "number": { + "type": "string" + }, + "photo_url": { + "type": "string" + }, + "position": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "status": { "type": "string" + }, + "weight": { + "type": "integer" } }, "type": "object" }, - "flashscore.playerStatTypeDoc": { + "fanduel.SportsbookRosterResponse": { "properties": { - "combined": { - "$ref": "#/definitions/flashscore.playerStatCombinedDoc" - }, - "format": { - "enum": [ - "count", - "percentage", - "count_two_decimal_places" - ], - "example": "count", + "fetched_at": { "type": "string" }, - "groups": { + "injury_statuses": { "items": { - "enum": [ - "top_stats", - "shots", - "attack", - "passes", - "defense", - "goalkeeping", - "general" - ], - "type": "string" + "$ref": "#/definitions/fanduel.SportsbookValueCount" }, "type": "array" }, - "key": { - "example": "shots_total", + "league": { "type": "string" }, - "label": { - "example": "Total shots", - "type": "string" + "players": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookRosterPlayer" + }, + "type": "array" }, - "sentiment": { - "enum": [ - "positive", - "negative" - ], - "example": "positive", + "positions": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookValueCount" + }, + "type": "array" + }, + "statuses": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookValueCount" + }, + "type": "array" + }, + "team": { "type": "string" } }, "type": "object" }, - "flashscore.playerStatValueDoc": { + "fanduel.SportsbookRunner": { "properties": { - "rank": { - "example": 9, + "abbreviation": { + "type": "string" + }, + "american_odds": { "type": "integer" }, - "raw": { - "example": 0.1074, + "decimal_odds": { "type": "number" }, - "value": { - "example": "0.11", + "fractional_odds": { "type": "string" - } - }, - "type": "object" - }, - "flashscore.pointByPointCurrentGameDoc": { - "properties": { - "points": { - "items": { - "$ref": "#/definitions/flashscore.pointScoreDoc" - }, - "type": "array" }, - "server": { - "enum": [ - "home", - "away" - ], - "example": "away", + "handicap": { + "type": "number" + }, + "is_player": { + "type": "boolean" + }, + "jersey_number": { "type": "string" }, - "title": { - "example": "Current game", + "logo_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "previous_american_odds": { + "description": "PreviousAmericanOdds and PreviousDecimalOdds are the price immediately\nbefore the current one, present once the price has moved. The Sportsbook\nkeeps a single previous price, not a series.", + "type": "integer" + }, + "previous_decimal_odds": { + "type": "number" + }, + "selection_id": { + "type": "integer" + }, + "side": { + "type": "string" + }, + "status": { "type": "string" } }, "type": "object" }, - "flashscore.pointByPointEntryDoc": { + "fanduel.SportsbookScheduleGame": { "properties": { - "away_score": { - "example": 0, - "type": "integer" + "bye_week": { + "type": "boolean" }, - "away_tiebreak_score": { - "example": 3, - "type": "integer" + "cancelled": { + "type": "boolean" }, - "home_score": { - "example": 1, - "type": "integer" + "date": { + "type": "string" }, - "home_tiebreak_score": { - "example": 7, - "type": "integer" + "location": { + "type": "string" }, - "lead": { - "$ref": "#/definitions/flashscore.pointByPointLeadDoc" + "opponent": { + "$ref": "#/definitions/fanduel.SportsbookTeamRef" }, - "markers": { - "items": { - "$ref": "#/definitions/flashscore.pointMarkerDoc" - }, - "type": "array" + "opponent_record": { + "type": "string" }, - "number": { - "example": 1, + "opponent_score": { "type": "integer" }, - "points": { - "items": { - "$ref": "#/definitions/flashscore.pointScoreDoc" - }, - "type": "array" - }, - "server": { - "enum": [ - "home", - "away" - ], - "example": "home", - "type": "string" - }, - "server_lost": { - "example": false, + "postponed": { "type": "boolean" }, - "winner": { - "enum": [ - "home", - "away" - ], - "example": "home", + "team_score": { + "type": "integer" + }, + "venue": { "type": "string" + }, + "week": { + "type": "integer" } }, "type": "object" }, - "flashscore.pointByPointLeadDoc": { + "fanduel.SportsbookScheduleGroup": { "properties": { - "margin": { - "example": 4, - "type": "integer" + "games": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookLeagueGame" + }, + "type": "array" }, - "narrowed": { - "example": true, - "type": "boolean" + "season_type": { + "type": "string" }, - "side": { - "enum": [ - "home", - "away" - ], - "example": "away", + "title": { "type": "string" } }, "type": "object" }, - "flashscore.pointByPointPeriodDoc": { + "fanduel.SportsbookScheduleResponse": { "properties": { - "sections": { + "fetched_at": { + "type": "string" + }, + "league": { + "type": "string" + }, + "next_game": { + "$ref": "#/definitions/fanduel.SportsbookGameSummary" + }, + "previous_game": { + "$ref": "#/definitions/fanduel.SportsbookGameSummary" + }, + "seasons": { "items": { - "$ref": "#/definitions/flashscore.pointByPointSectionDoc" + "$ref": "#/definitions/fanduel.SportsbookScheduleSeason" }, "type": "array" }, - "title": { - "example": "Set 1", + "team": { "type": "string" } }, "type": "object" }, - "flashscore.pointByPointSectionDoc": { + "fanduel.SportsbookScheduleSeason": { "properties": { - "entries": { + "games": { "items": { - "$ref": "#/definitions/flashscore.pointByPointEntryDoc" + "$ref": "#/definitions/fanduel.SportsbookScheduleGame" }, "type": "array" }, + "season_type": { + "type": "string" + }, "title": { - "example": "Point by point - Set 1", "type": "string" } }, "type": "object" }, - "flashscore.pointMarkerDoc": { + "fanduel.SportsbookScheduleWeek": { "properties": { - "side": { - "enum": [ - "home", - "away" - ], - "example": "home", + "current_week": { + "type": "boolean" + }, + "end_date": { "type": "string" }, - "type": { - "enum": [ - "break_point", - "set_point", - "match_point" - ], - "example": "break_point", + "id": { + "type": "integer" + }, + "label": { + "type": "string" + }, + "season_type": { + "type": "string" + }, + "start_date": { "type": "string" } }, "type": "object" }, - "flashscore.pointScoreDoc": { + "fanduel.SportsbookScore": { "properties": { "away": { - "example": "30", + "type": "integer" + }, + "clock": { "type": "string" }, "home": { - "example": "40", - "type": "string" + "type": "integer" }, - "markers": { + "period_scores": { "items": { - "$ref": "#/definitions/flashscore.pointMarkerDoc" + "$ref": "#/definitions/fanduel.SportsbookPeriodScore" }, "type": "array" } }, "type": "object" }, - "flashscore.predictedFormationDoc": { + "fanduel.SportsbookSearchAncestor": { "properties": { - "lines": { - "items": { - "$ref": "#/definitions/flashscore.formationLineDoc" - }, - "type": "array" + "id": { + "type": "string" }, "name": { - "example": "4-2-3-1", "type": "string" } }, "type": "object" }, - "flashscore.predictedLineupTeamDoc": { + "fanduel.SportsbookSearchCompetition": { "properties": { - "aggregated_stats": { - "$ref": "#/definitions/flashscore.lineupAggregatedStatsDoc" - }, - "coaches": { - "items": { - "$ref": "#/definitions/flashscore.lineupPlayerDoc" - }, - "type": "array" - }, - "formation": { - "$ref": "#/definitions/flashscore.predictedFormationDoc" - }, - "groups": { - "items": { - "$ref": "#/definitions/flashscore.lineupGroupDoc" - }, - "type": "array" + "competition_id": { + "type": "integer" }, - "name": { - "example": "Bragantino", - "type": "string" + "event_type_id": { + "type": "integer" }, - "participant_id": { - "example": "2FbjCJan", + "event_type_name": { "type": "string" }, - "players": { - "items": { - "$ref": "#/definitions/flashscore.lineupPlayerDoc" - }, - "type": "array" + "match_count": { + "type": "integer" }, - "side": { - "enum": [ - "home", - "away" - ], - "example": "home", + "name": { "type": "string" } }, "type": "object" }, - "flashscore.rankingCategoriesDataDoc": { + "fanduel.SportsbookSearchEvent": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/flashscore.rankingCategoryDoc" - }, - "type": "array" + "competition_id": { + "type": "integer" }, - "source_url": { - "example": "https://www.flashscore.com/", + "competition_name": { "type": "string" - } - }, - "type": "object" - }, - "flashscore.rankingCategoriesResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "event_id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/flashscore.rankingCategoriesDataDoc" + "event_type_id": { + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "flashscore.rankingCategoryDoc": { - "properties": { - "key": { - "example": "tennis-atp", + "event_type_name": { "type": "string" }, - "live": { - "example": false, + "in_play": { "type": "boolean" }, "name": { - "example": "ATP Singles", - "type": "string" - }, - "path": { - "example": "/tennis/rankings/atp/", "type": "string" }, - "sport": { - "example": "tennis", + "open_date": { "type": "string" } }, "type": "object" }, - "flashscore.rankingDataDoc": { + "fanduel.SportsbookSearchHit": { "properties": { - "category": { - "$ref": "#/definitions/flashscore.rankingCategoryDoc" - }, - "pages": { + "ancestry": { "items": { - "$ref": "#/definitions/flashscore.rankingPageDoc" + "$ref": "#/definitions/fanduel.SportsbookSearchAncestor" }, "type": "array" }, - "source_url": { - "example": "https://www.flashscore.com/tennis/rankings/atp/", - "type": "string" - } - }, - "type": "object" - }, - "flashscore.rankingPageDoc": { - "properties": { - "data": { - "example": "TS÷ME¬TS÷TAB¬TE÷RW¬...", + "competition": { "type": "string" }, - "feed_url": { - "example": "https://global.flashscore.ninja/2/x/feed/ran_dSJr14Y8_1", + "competition_id": { "type": "string" }, - "page": { - "example": 1, + "event_category": { "type": "integer" }, - "rows": { - "example": 100, - "type": "integer" - } - }, - "type": "object" - }, - "flashscore.rankingResponseDoc": { - "properties": { - "code": { - "example": 200, + "exchange_id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/flashscore.rankingDataDoc" - }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "flashscore.reportBlockDoc": { - "properties": { - "alt": { - "example": "Momentum", + "result_id": { "type": "string" }, - "bold": { - "example": true, - "type": "boolean" + "sport": { + "type": "string" }, - "credit": { - "example": "Flashscore", + "sport_id": { "type": "string" }, - "height": { - "example": 2160, - "type": "integer" + "start_date": { + "type": "string" }, - "links": { - "items": { - "$ref": "#/definitions/flashscore.reportLinkDoc" - }, - "type": "array" + "subtype": { + "type": "string" }, - "text": { + "title": { "type": "string" }, "type": { - "enum": [ - "paragraph", - "image" - ], - "example": "paragraph", "type": "string" + } + }, + "type": "object" + }, + "fanduel.SportsbookSearchPill": { + "properties": { + "id": { + "type": "integer" }, - "url": { + "title": { "type": "string" - }, - "width": { - "example": 3840, - "type": "integer" } }, "type": "object" }, - "flashscore.reportImageDoc": { + "fanduel.SportsbookSearchResponse": { "properties": { - "alt": { + "competitions": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookSearchCompetition" + }, + "type": "array" + }, + "events": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookSearchEvent" + }, + "type": "array" + }, + "fetched_at": { "type": "string" }, - "credit": { - "example": "GLYN KIRK / AFP", + "query": { "type": "string" }, - "thumbnail_url": { + "state": { "type": "string" }, - "url": { + "type": { "type": "string" } }, "type": "object" }, - "flashscore.reportLinkDoc": { + "fanduel.SportsbookSearchTab": { "properties": { "id": { - "example": "hA1Zm19f", - "type": "string" - }, - "text": { - "example": "Arsenal", - "type": "string" - }, - "type": { - "enum": [ - "team", - "player", - "competition", - "page" - ], - "example": "team", "type": "string" }, - "url": { - "example": "https://www.flashscore.com/team/arsenal/hA1Zm19f/", + "title": { "type": "string" } }, "type": "object" }, - "flashscore.responseDoc": { + "fanduel.SportsbookSearchTabsResponse": { "properties": { - "code": { - "example": 200, + "fetched_at": { + "type": "string" + }, + "found": { "type": "integer" }, - "data": { - "$ref": "#/definitions/flashscore.sourceDataDoc" + "next_start_index": { + "type": "integer" }, - "msg": { - "example": "OK", + "page_size": { + "type": "integer" + }, + "pill": { "type": "string" - } - }, - "type": "object" - }, - "flashscore.searchDataDoc": { - "properties": { + }, + "pills": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookSearchPill" + }, + "type": "array" + }, "query": { - "example": "Arsenal", "type": "string" }, "results": { "items": { - "$ref": "#/definitions/flashscore.searchResultDoc" + "$ref": "#/definitions/fanduel.SportsbookSearchHit" }, "type": "array" }, - "source_url": { - "example": "https://s.livesport.services/api/v2/search/?q=Arsenal", + "start_index": { + "type": "integer" + }, + "state": { + "type": "string" + }, + "tab": { "type": "string" + }, + "tabs": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookSearchTab" + }, + "type": "array" + }, + "total_results": { + "type": "integer" } }, "type": "object" }, - "flashscore.searchImageDoc": { + "fanduel.SportsbookSplit": { "properties": { - "path": { - "example": "fwtiqyQt-vcNAdtF9.png", + "name": { "type": "string" }, - "usageId": { - "example": 2, + "percent": { "type": "integer" }, - "variantTypeId": { - "example": 2, + "selection_id": { "type": "integer" } }, "type": "object" }, - "flashscore.searchNamedIDDoc": { + "fanduel.SportsbookSport": { "properties": { - "id": { - "example": 2, + "event_type_id": { "type": "integer" }, "name": { - "example": "Team", "type": "string" } }, "type": "object" }, - "flashscore.searchResponseDoc": { + "fanduel.SportsbookSportsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/flashscore.searchDataDoc" - }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "flashscore.searchResultDoc": { - "properties": { - "defaultCountry": { - "additionalProperties": true, - "type": "object" - }, - "defaultTournament": { - "additionalProperties": true, - "type": "object" }, - "gender": { - "$ref": "#/definitions/flashscore.searchNamedIDDoc" + "popular_links": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookNavLink" + }, + "type": "array" }, - "id": { - "example": "hA1Zm19f", - "type": "string" + "quick_links": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookNavLink" + }, + "type": "array" }, - "images": { + "sports": { "items": { - "$ref": "#/definitions/flashscore.searchImageDoc" + "$ref": "#/definitions/fanduel.SportsbookSport" }, "type": "array" }, - "name": { - "example": "Arsenal", + "state": { "type": "string" }, - "participantTypes": { + "states": { "items": { - "$ref": "#/definitions/flashscore.searchNamedIDDoc" + "$ref": "#/definitions/fanduel.SportsbookState" }, "type": "array" }, - "sport": { - "$ref": "#/definitions/flashscore.searchNamedIDDoc" - }, - "superTemplate": { - "additionalProperties": true, - "type": "object" - }, - "teams": { + "teaser_competitions": { "items": { - "additionalProperties": true, - "type": "object" + "$ref": "#/definitions/fanduel.SportsbookTeaserCompetition" }, "type": "array" - }, - "type": { - "$ref": "#/definitions/flashscore.searchNamedIDDoc" - }, - "url": { - "example": "arsenal", - "type": "string" } }, "type": "object" }, - "flashscore.sourceDataDoc": { + "fanduel.SportsbookStandingsResponse": { "properties": { - "data": { - "example": "SE÷Match¬~SF÷Top stats¬~SD÷432¬SG÷Expected goals (xG)¬SH÷0.00¬SI÷0.00¬~", + "fetched_at": { "type": "string" }, - "source_url": { - "example": "https://global.flashscore.ninja/2/x/feed/df_st_2_xtmHKGT0", + "league": { "type": "string" + }, + "team_count": { + "type": "integer" + }, + "teams": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookStandingsTeam" + }, + "type": "array" } }, "type": "object" }, - "flashscore.sportItemDoc": { + "fanduel.SportsbookStandingsTeam": { "properties": { - "event_count": { - "example": 159, - "type": "integer" + "code": { + "type": "string" }, - "id": { - "example": 1, - "type": "integer" + "conference": { + "type": "string" }, - "key": { - "example": "football", + "division": { "type": "string" }, - "league_count": { - "example": 11, - "type": "integer" + "logo_url": { + "type": "string" }, "name": { - "example": "Football", "type": "string" }, - "path": { - "example": "/", + "short_name": { "type": "string" - } - }, - "type": "object" - }, - "flashscore.sportsDataDoc": { - "properties": { - "source_url": { - "example": "https://global.flashscore.ninja/2/x/feed/mc_8", + }, + "slug": { "type": "string" }, - "sports": { - "items": { - "$ref": "#/definitions/flashscore.sportItemDoc" - }, - "type": "array" + "standing": { + "additionalProperties": {}, + "type": "object" } }, "type": "object" }, - "flashscore.sportsResponseDoc": { + "fanduel.SportsbookState": { "properties": { "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/flashscore.sportsDataDoc" + "type": "string" }, - "msg": { - "example": "OK", + "name": { "type": "string" } }, "type": "object" }, - "flashscore.topSearchDataDoc": { + "fanduel.SportsbookStatsListResponse": { "properties": { - "results": { + "events": { "items": { - "$ref": "#/definitions/flashscore.searchResultDoc" + "$ref": "#/definitions/fanduel.SportsbookEventStats" }, "type": "array" }, - "source_url": { - "example": "https://s.livesport.services/api/v2/top-search/?lang-id=1&limit=10&project-id=2&project-type-id=1&type-ids=1%2C2%2C3%2C4", + "fetched_at": { "type": "string" } }, "type": "object" }, - "flashscore.topSearchResponseDoc": { + "fanduel.SportsbookStatsTeam": { "properties": { - "code": { - "example": 200, - "type": "integer" + "name": { + "type": "string" }, - "data": { - "$ref": "#/definitions/flashscore.topSearchDataDoc" + "primary_color": { + "type": "string" }, - "msg": { - "example": "OK", + "secondary_color": { + "type": "string" + }, + "selection_id": { + "type": "integer" + }, + "side": { "type": "string" } }, "type": "object" }, - "flashscore.tournamentEventsDataDoc": { + "fanduel.SportsbookSuggestion": { "properties": { - "data": { - "example": "SA÷1¬~ZA÷ENGLAND: Premier League¬ZEE÷dYlOSQOD¬ZB÷198¬~AA÷byL7b0nn¬AD÷1797692400¬", + "highlighted": { "type": "string" }, + "text": { + "type": "string" + } + }, + "type": "object" + }, + "fanduel.SportsbookTab": { + "properties": { "event_count": { - "example": 83, "type": "integer" }, - "page": { - "example": 2, + "id": { + "type": "string" + }, + "live_count": { "type": "integer" }, - "path": { - "example": "/football/england/premier-league-2026-2027/fixtures/", - "type": "string" + "market_count": { + "type": "integer" }, - "section": { - "example": "fixtures", + "slug": { "type": "string" }, - "source_url": { - "example": "https://global.flashscore.ninja/2/x/feed/tf_1_198_dYlOSQOD_190_1_8_en_1", + "title": { "type": "string" - }, - "total_events": { - "example": 330, - "type": "integer" } }, "type": "object" }, - "flashscore.tournamentEventsResponseDoc": { + "fanduel.SportsbookTagCount": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/flashscore.tournamentEventsDataDoc" - }, - "msg": { - "example": "OK", + "tag": { "type": "string" } }, "type": "object" }, - "flashscore.tournamentSeasonDoc": { + "fanduel.SportsbookTeam": { "properties": { - "fixtures_path": { - "example": "/football/europe/champions-league-2025-2026/fixtures/", - "type": "string" - }, - "name": { - "example": "Champions League 2025/2026", + "abbreviation": { "type": "string" }, - "path": { - "example": "/football/europe/champions-league-2025-2026/", + "color": { "type": "string" }, - "results_path": { - "example": "/football/europe/champions-league-2025-2026/results/", + "conference": { "type": "string" }, - "season": { - "example": "2025/2026", + "logo_url": { "type": "string" }, - "winner": { - "description": "Winner joins every winner's name with \" / \"; WinnerPath is set only for a\nsingle winner.", - "example": "PSG", + "name": { "type": "string" }, - "winner_path": { - "example": "/team/psg/CjhkPw0k/", + "short_name": { "type": "string" - }, - "winners": { - "items": { - "$ref": "#/definitions/flashscore.tournamentSeasonWinnerDoc" - }, - "type": "array" } }, "type": "object" }, - "flashscore.tournamentSeasonWinnerDoc": { + "fanduel.SportsbookTeamArticle": { "properties": { - "name": { - "example": "PSG", + "author": { "type": "string" }, - "path": { - "example": "/team/psg/CjhkPw0k/", + "id": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "source": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "thumbnail_url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "flashscore.tournamentSeasonsDataDoc": { + "fanduel.SportsbookTeamGameOdds": { "properties": { - "path": { - "example": "/football/europe/champions-league/archive/", - "type": "string" + "money_line": { + "$ref": "#/definitions/fanduel.SportsbookGameLine" }, - "seasons": { - "items": { - "$ref": "#/definitions/flashscore.tournamentSeasonDoc" - }, - "type": "array" + "spread": { + "$ref": "#/definitions/fanduel.SportsbookGameLine" }, - "source_url": { - "example": "https://www.flashscore.com/football/europe/champions-league/archive/", - "type": "string" + "total": { + "$ref": "#/definitions/fanduel.SportsbookGameLine" } }, "type": "object" }, - "flashscore.tournamentSeasonsResponseDoc": { + "fanduel.SportsbookTeamGameRef": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/flashscore.tournamentSeasonsDataDoc" - }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "flashscore.tournamentStandingsResponseDoc": { - "properties": { - "data": { - "example": "TZ÷Standings¬TN÷Premier League¬~", + "event_url": { "type": "string" }, - "path": { - "example": "/football/england/premier-league/", + "home_game": { + "type": "boolean" + }, + "opponent": { "type": "string" }, - "source_url": { - "example": "https://global.flashscore.ninja/2/x/feed/to_SY30SsKF_CfoA8Dmm_1", + "scheduled_time": { "type": "string" }, - "view": { - "example": "overall", + "status": { "type": "string" } }, "type": "object" }, - "flashscore.tournamentStandingsViewsResponseDoc": { + "fanduel.SportsbookTeamGroup": { "properties": { - "path": { - "example": "/football/england/premier-league/", - "type": "string" - }, - "source_url": { - "example": "https://www.flashscore.com/football/england/premier-league/standings/", - "type": "string" - }, - "views": { - "example": [ - "overall", - "home", - "away", - "form_overall", - "overunder_overall", - "htft_overall", - "top_scorers" - ], + "teams": { "items": { - "type": "string" + "$ref": "#/definitions/fanduel.SportsbookTeamSummary" }, "type": "array" - } - }, - "type": "object" - }, - "foodpanda.Cuisine": { - "properties": { - "id": { - "type": "integer" }, - "name": { + "title": { "type": "string" } }, "type": "object" }, - "foodpanda.CuisineFilter": { + "fanduel.SportsbookTeamNewsResponse": { "properties": { - "count": { - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookTeamArticle" + }, + "type": "array" }, - "id": { - "type": "integer" + "fetched_at": { + "type": "string" }, - "name": { + "has_more": { + "type": "boolean" + }, + "league": { "type": "string" }, - "slug": { + "next_cursor": { "type": "string" - } - }, - "type": "object" - }, - "foodpanda.CuisinesResponse": { - "properties": { - "available_count": { - "type": "integer" }, - "cuisines": { + "player_updates": { "items": { - "$ref": "#/definitions/foodpanda.CuisineFilter" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "market": { + "team": { "type": "string" } }, "type": "object" }, - "foodpanda.Discount": { + "fanduel.SportsbookTeamOddsResponse": { "properties": { - "id": { + "championship": { "type": "string" }, - "value": { - "type": "number" - } - }, - "type": "object" - }, - "foodpanda.LegalInformation": { - "properties": { - "legal_name": { + "championship_tab": { "type": "string" }, - "trade_register_number": { + "fetched_at": { + "type": "string" + }, + "future_odds": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookFutureOdd" + }, + "type": "array" + }, + "league": { "type": "string" + }, + "next_games": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookUpcomingGame" + }, + "type": "array" + }, + "player_props": { + "items": { + "$ref": "#/definitions/fanduel.SportsbookPlayerProps" + }, + "type": "array" + }, + "team": { + "$ref": "#/definitions/fanduel.SportsbookTeamRef" } }, "type": "object" }, - "foodpanda.MenuCategory": { + "fanduel.SportsbookTeamRef": { "properties": { - "description": { + "code": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/foodpanda.MenuItem" - }, - "type": "array" + "logo_url": { + "type": "string" }, - "title": { + "name": { + "type": "string" + }, + "short_name": { + "type": "string" + }, + "slug": { "type": "string" } }, "type": "object" }, - "foodpanda.MenuItem": { + "fanduel.SportsbookTeamStatsResponse": { "properties": { - "description": { + "fetched_at": { "type": "string" }, - "discounted_price": { - "type": "number" - }, - "image_url": { + "league": { "type": "string" }, - "is_sold_out": { - "type": "boolean" - }, - "original_price": { - "type": "number" + "stats": { + "additionalProperties": {}, + "type": "object" }, - "title": { + "team": { "type": "string" } }, "type": "object" }, - "foodpanda.MenuResponse": { + "fanduel.SportsbookTeamSummary": { "properties": { - "aggregate_rating": { - "type": "number" - }, - "categories": { - "items": { - "$ref": "#/definitions/foodpanda.MenuCategory" - }, - "type": "array" + "bet_records": { + "$ref": "#/definitions/fanduel.SportsbookBetRecords" }, "code": { "type": "string" }, - "item_count": { - "type": "integer" + "conference": { + "type": "string" + }, + "division": { + "type": "string" + }, + "head_coach": { + "type": "string" + }, + "logo_url": { + "type": "string" }, "market": { "type": "string" }, - "opening_hours": { - "items": { - "$ref": "#/definitions/foodpanda.OpeningHours" - }, - "type": "array" + "name": { + "type": "string" }, - "price_range": { + "next_game": { + "$ref": "#/definitions/fanduel.SportsbookTeamGameRef" + }, + "primary_color": { "type": "string" }, - "rating_count": { - "type": "integer" + "secondary_color": { + "type": "string" }, - "serves_cuisine": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "foodpanda.OpeningHours": { - "properties": { - "closes": { + "short_name": { "type": "string" }, - "days": { - "items": { - "type": "string" - }, - "type": "array" + "slug": { + "type": "string" }, - "opens": { + "sub_division": { "type": "string" } }, "type": "object" }, - "foodpanda.Restaurant": { + "fanduel.SportsbookTeamsResponse": { "properties": { - "address": { - "type": "string" - }, - "budget": { - "type": "integer" - }, - "city": { - "type": "string" - }, - "code": { + "fetched_at": { "type": "string" }, - "cuisines": { + "groups": { "items": { - "$ref": "#/definitions/foodpanda.Cuisine" + "$ref": "#/definitions/fanduel.SportsbookTeamGroup" }, "type": "array" }, - "customer_phone": { + "league": { "type": "string" }, - "discounts": { + "sections": { "items": { - "$ref": "#/definitions/foodpanda.Discount" + "type": "string" }, "type": "array" }, - "distance_km": { - "type": "number" - }, - "has_discount": { - "type": "boolean" + "team_count": { + "type": "integer" + } + }, + "type": "object" + }, + "fanduel.SportsbookTeaserCompetition": { + "properties": { + "competition_id": { + "type": "integer" }, - "hero_image_url": { + "icon": { "type": "string" }, - "is_delivery_available": { - "type": "boolean" - }, - "is_pickup_available": { - "type": "boolean" - }, - "latitude": { - "type": "number" - }, - "legal_information": { - "$ref": "#/definitions/foodpanda.LegalInformation" - }, - "longitude": { - "type": "number" + "name": { + "type": "string" }, - "minimum_delivery_fee": { + "starting_spread": { "type": "number" + } + }, + "type": "object" + }, + "fanduel.SportsbookTrendingItem": { + "properties": { + "competition": { + "type": "string" }, - "minimum_delivery_time_minutes": { - "type": "number" + "display_name": { + "type": "string" }, - "minimum_order_amount": { - "type": "number" + "event_id": { + "type": "integer" }, - "name": { + "event_name": { "type": "string" }, - "rating": { - "type": "number" - }, - "review_count": { - "type": "integer" + "expires_at": { + "type": "string" }, - "tags": { - "items": { - "$ref": "#/definitions/foodpanda.Tag" - }, - "type": "array" + "metadata": { + "additionalProperties": {}, + "type": "object" }, - "timezone": { + "term": { "type": "string" }, - "web_path": { + "type": { "type": "string" } }, "type": "object" }, - "foodpanda.RestaurantResponse": { + "fanduel.SportsbookTrendingResponse": { "properties": { - "address": { - "type": "string" - }, - "budget": { - "type": "integer" - }, - "city": { - "type": "string" + "enriched": { + "type": "boolean" }, - "code": { + "fetched_at": { "type": "string" }, - "cuisines": { + "results": { "items": { - "$ref": "#/definitions/foodpanda.Cuisine" + "$ref": "#/definitions/fanduel.SportsbookTrendingItem" }, "type": "array" }, - "customer_phone": { - "type": "string" - }, - "discounts": { + "terms": { "items": { - "$ref": "#/definitions/foodpanda.Discount" + "type": "string" }, "type": "array" + } + }, + "type": "object" + }, + "fanduel.SportsbookUpcomingGame": { + "properties": { + "away_odds": { + "$ref": "#/definitions/fanduel.SportsbookTeamGameOdds" }, - "distance_km": { - "type": "number" - }, - "has_discount": { - "type": "boolean" - }, - "hero_image_url": { + "event_url": { "type": "string" }, - "is_delivery_available": { - "type": "boolean" - }, - "is_pickup_available": { + "home_game": { "type": "boolean" }, - "latitude": { - "type": "number" - }, - "legal_information": { - "$ref": "#/definitions/foodpanda.LegalInformation" - }, - "longitude": { - "type": "number" + "home_odds": { + "$ref": "#/definitions/fanduel.SportsbookTeamGameOdds" }, - "market": { + "opponent": { "type": "string" }, - "minimum_delivery_fee": { - "type": "number" - }, - "minimum_delivery_time_minutes": { - "type": "number" - }, - "minimum_order_amount": { - "type": "number" + "opponent_team": { + "$ref": "#/definitions/fanduel.SportsbookTeamRef" }, - "name": { + "scheduled_time": { "type": "string" }, - "rating": { - "type": "number" - }, - "review_count": { - "type": "integer" - }, - "tags": { - "items": { - "$ref": "#/definitions/foodpanda.Tag" - }, - "type": "array" + "status": { + "type": "string" }, - "timezone": { + "venue": { "type": "string" }, - "web_path": { + "venue_type": { "type": "string" + }, + "week": { + "type": "integer" } }, "type": "object" }, - "foodpanda.Review": { + "fanduel.SportsbookValueCount": { "properties": { - "author": { - "type": "string" - }, - "body": { - "type": "string" + "count": { + "type": "integer" }, - "date_published": { + "value": { "type": "string" - }, - "rating": { - "type": "number" } }, "type": "object" }, - "foodpanda.ReviewsResponse": { + "fanduel.SportsbookWinLoss": { "properties": { - "code": { - "type": "string" - }, - "market": { - "type": "string" + "losses": { + "type": "integer" }, - "review_count": { + "ties": { "type": "integer" }, - "reviews": { - "items": { - "$ref": "#/definitions/foodpanda.Review" - }, - "type": "array" + "wins": { + "type": "integer" } }, "type": "object" }, - "foodpanda.SearchResponse": { + "fanduel.casinoCategoriesResponseDoc": { "properties": { - "available_count": { - "type": "integer" - }, - "market": { - "type": "string" - }, - "offset": { + "code": { + "example": 200, "type": "integer" }, - "restaurants": { - "items": { - "$ref": "#/definitions/foodpanda.Restaurant" - }, - "type": "array" + "data": { + "$ref": "#/definitions/fanduel.CasinoCategoriesResponse" }, - "returned_count": { - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "foodpanda.Tag": { + "fanduel.casinoCategoryResponseDoc": { "properties": { "code": { - "type": "string" + "example": 200, + "type": "integer" }, - "text": { + "data": { + "$ref": "#/definitions/fanduel.CasinoCategoryResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "foodpanda.cuisinesResponseDoc": { + "fanduel.casinoGameResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/foodpanda.CuisinesResponse" + "$ref": "#/definitions/fanduel.CasinoGameResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "foodpanda.menuResponseDoc": { + "fanduel.quickPicksDailyResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/foodpanda.MenuResponse" + "$ref": "#/definitions/fanduel.QuickPicksDailyResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "foodpanda.restaurantResponseDoc": { + "fanduel.racingCarryoverResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/foodpanda.RestaurantResponse" + "$ref": "#/definitions/fanduel.RacingCarryoverResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "foodpanda.reviewsResponseDoc": { + "fanduel.racingFiltersResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/foodpanda.ReviewsResponse" + "$ref": "#/definitions/fanduel.RacingFiltersResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "foodpanda.searchResponseDoc": { + "fanduel.racingHorseResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/foodpanda.SearchResponse" + "$ref": "#/definitions/fanduel.RacingHorseResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "forbes.ArticleEmbed": { + "fanduel.racingPastRaceResponseDoc": { "properties": { - "data": { - "additionalProperties": {}, - "type": "object" - }, - "id": { + "code": { + "example": 200, "type": "integer" }, - "position": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.RacingPastRaceResponse" }, - "type": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "forbes.ArticleResponse": { + "fanduel.racingPastRacesResponseDoc": { "properties": { - "author": { - "type": "string" - }, - "body_html": { - "type": "string" - }, - "channel": { - "type": "string" - }, - "content_paywall": { - "type": "string" - }, - "description": { - "type": "string" - }, - "embeds": { - "items": { - "$ref": "#/definitions/forbes.ArticleEmbed" - }, - "type": "array" - }, - "headings": { - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { - "type": "string" - }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" - }, - "published_at": { - "type": "string" - }, - "section": { - "type": "string" - }, - "template_type": { - "type": "string" - }, - "title": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "updated_at": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.RacingPastRacesResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "forbes.AuthorArticle": { + "fanduel.racingPastTracksResponseDoc": { "properties": { - "description": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "published_at": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.RacingPastTracksResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "forbes.AuthorResponse": { + "fanduel.racingRaceResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/forbes.AuthorArticle" - }, - "type": "array" - }, - "bio": { - "type": "string" - }, - "display_type": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "short_bio": { - "type": "string" - }, - "slug": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "twitter_url": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.RacingRaceResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "forbes.Billionaire": { + "fanduel.racingRacesResponseDoc": { "properties": { - "age": { + "code": { + "example": 200, "type": "integer" }, - "bios": { - "items": { - "type": "string" - }, - "type": "array" - }, - "category": { - "type": "string" - }, - "country_of_citizenship": { - "type": "string" - }, - "final_worth": { - "type": "number" - }, - "first_name": { - "type": "string" - }, - "gender": { - "type": "string" - }, - "industries": { - "items": { - "type": "string" - }, - "type": "array" - }, - "last_name": { - "type": "string" - }, - "organization": { - "type": "string" - }, - "person": { - "additionalProperties": {}, - "type": "object" + "data": { + "$ref": "#/definitions/fanduel.RacingRacesResponse" }, - "person_name": { + "msg": { + "example": "OK", "type": "string" - }, - "qas": {}, - "rank": { + } + }, + "type": "object" + }, + "fanduel.racingResultsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "source": { - "type": "string" - }, - "square_image": { - "type": "string" - }, - "status": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.RacingResultsResponse" }, - "uri": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "forbes.BillionairesResponse": { + "fanduel.racingSearchResponseDoc": { "properties": { - "count": { - "type": "integer" - }, - "items": { - "items": { - "$ref": "#/definitions/forbes.Billionaire" - }, - "type": "array" - }, - "limit": { + "code": { + "example": 200, "type": "integer" }, - "start": { - "type": "integer" + "data": { + "$ref": "#/definitions/fanduel.RacingSearchResponse" }, - "year": { - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "forbes.CategoriesResponse": { + "fanduel.racingTrackResponseDoc": { "properties": { - "sections": { - "items": { - "$ref": "#/definitions/forbes.Section" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/fanduel.RacingTrackResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "forbes.Education": { + "fanduel.racingTracksResponseDoc": { "properties": { - "degree": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "school": { + "data": { + "$ref": "#/definitions/fanduel.RacingTracksResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "forbes.HeadlineItem": { + "fanduel.racingWagerTypesResponseDoc": { "properties": { - "author": { - "type": "string" - }, - "description": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "published_at": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.RacingWagerTypesResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "forbes.HeadlinesResponse": { + "fanduel.researchArticleResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/forbes.HeadlineItem" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "section": { + "data": { + "$ref": "#/definitions/fanduel.ResearchArticleResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "forbes.PersonList": { + "fanduel.researchArticlesResponseDoc": { "properties": { - "list_uri": { - "type": "string" - }, - "name": { - "type": "string" - }, - "position": { + "code": { + "example": 200, "type": "integer" }, - "rank": { - "type": "integer" + "data": { + "$ref": "#/definitions/fanduel.ResearchArticlesResponse" }, - "year": { - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "forbes.PersonProfile": { + "fanduel.researchAuthorResponseDoc": { "properties": { - "birth_date": { - "type": "integer" - }, - "city": { - "type": "string" - }, - "country_id": { + "code": { + "example": 200, "type": "integer" }, - "country_of_citizenship": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.ResearchAuthorResponse" }, - "country_of_residence": { + "msg": { + "example": "OK", "type": "string" - }, - "deceased": { - "type": "boolean" - }, - "educations": { - "items": { - "$ref": "#/definitions/forbes.Education" - }, - "type": "array" - }, - "final_worth": { - "type": "number" - }, - "final_worth_date": { + } + }, + "type": "object" + }, + "fanduel.researchAuthorsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "first_name": { - "type": "string" - }, - "gender": { - "type": "string" - }, - "image_exists": { - "type": "boolean" - }, - "industries": { - "items": { - "type": "string" - }, - "type": "array" - }, - "last_name": { - "type": "string" - }, - "list_images": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "marital_status": { - "type": "string" - }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.ResearchAuthorsResponse" }, - "natural_id": { + "msg": { + "example": "OK", "type": "string" - }, - "number_of_children": { + } + }, + "type": "object" + }, + "fanduel.researchFeaturedArticlesResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "person_lists": { - "items": { - "$ref": "#/definitions/forbes.PersonList" - }, - "type": "array" - }, - "related_entities": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "self_made": { - "type": "boolean" - }, - "self_made_type": { - "type": "string" - }, - "short_uri": { - "type": "string" - }, - "source": { - "type": "string" - }, - "square_image": { - "type": "string" - }, - "status": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.ResearchFeaturedArticlesResponse" }, - "uri": { + "msg": { + "example": "OK", "type": "string" - }, - "uris": { - "items": { - "type": "string" - }, - "type": "array" - }, - "visible": { - "type": "boolean" } }, "type": "object" }, - "forbes.PersonResponse": { + "fanduel.researchFixturesResponseDoc": { "properties": { - "biography": { - "items": { - "type": "string" - }, - "type": "array" - }, - "did_you_know": { - "items": { - "type": "string" - }, - "type": "array" - }, - "editor_updated_at": { - "type": "string" - }, - "image_credit": { - "type": "string" - }, - "list_appearances": { + "code": { + "example": 200, "type": "integer" }, - "personal_stats": { - "additionalProperties": { - "type": "string" - }, - "type": "object" - }, - "profile": { - "$ref": "#/definitions/forbes.PersonProfile" - }, - "real_time_disclaimer": { - "type": "string" - }, - "real_time_net_worth": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.ResearchFixturesResponse" }, - "real_time_net_worth_as_of": { + "msg": { + "example": "OK", "type": "string" - }, - "real_time_rank": { - "type": "integer" - }, - "wealth_history": { - "items": { - "$ref": "#/definitions/forbes.WealthPoint" - }, - "type": "array" } }, "type": "object" }, - "forbes.Section": { + "fanduel.researchNflScheduleResponseDoc": { "properties": { - "name": { - "type": "string" - }, - "parent": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "path": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.ResearchNflScheduleResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "forbes.WealthPoint": { + "fanduel.researchPlayerNewsResponseDoc": { "properties": { - "date": { - "type": "string" - }, - "name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "percent": { - "type": "number" + "data": { + "$ref": "#/definitions/fanduel.ResearchPlayerNewsResponse" }, - "worth": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "forbes.articleResponseDoc": { + "fanduel.researchProjectionSlatesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/forbes.ArticleResponse" + "$ref": "#/definitions/fanduel.ResearchProjectionSlatesResponse" }, "msg": { "example": "OK", @@ -87834,14 +92735,14 @@ }, "type": "object" }, - "forbes.authorResponseDoc": { + "fanduel.researchProjectionTablesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/forbes.AuthorResponse" + "$ref": "#/definitions/fanduel.ResearchProjectionTablesResponse" }, "msg": { "example": "OK", @@ -87850,14 +92751,14 @@ }, "type": "object" }, - "forbes.billionairesResponseDoc": { + "fanduel.researchProjectionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/forbes.BillionairesResponse" + "$ref": "#/definitions/fanduel.ResearchProjectionsResponse" }, "msg": { "example": "OK", @@ -87866,14 +92767,14 @@ }, "type": "object" }, - "forbes.categoriesResponseDoc": { + "fanduel.researchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/forbes.CategoriesResponse" + "$ref": "#/definitions/fanduel.ResearchResponse" }, "msg": { "example": "OK", @@ -87882,14 +92783,14 @@ }, "type": "object" }, - "forbes.headlinesResponseDoc": { + "fanduel.researchSportsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/forbes.HeadlinesResponse" + "$ref": "#/definitions/fanduel.ResearchSportsResponse" }, "msg": { "example": "OK", @@ -87898,14 +92799,14 @@ }, "type": "object" }, - "forbes.personResponseDoc": { + "fanduel.researchSubCategoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/forbes.PersonResponse" + "$ref": "#/definitions/fanduel.ResearchSubCategoriesResponse" }, "msg": { "example": "OK", @@ -87914,180 +92815,142 @@ }, "type": "object" }, - "foreignaffairs.ArticleResponse": { + "fanduel.sportsbookAutocompleteResponseDoc": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "categories": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "is_gated": { - "type": "boolean" - }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" - }, - "published_at": { - "type": "string" - }, - "title": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "updated_at": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.SportsbookAutocompleteResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "foreignaffairs.AuthorArticle": { + "fanduel.sportsbookBoxScoreResponseDoc": { "properties": { - "dek": { - "type": "string" - }, - "issue_label": { - "type": "string" - }, - "issue_url": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.SportsbookBoxScoreResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "foreignaffairs.AuthorResponse": { + "fanduel.sportsbookBuilderEventsResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/foreignaffairs.AuthorArticle" - }, - "type": "array" - }, - "bio": { - "type": "string" - }, - "name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "slug": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.SportsbookBuilderEventsResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "foreignaffairs.HeadlineItem": { + "fanduel.sportsbookBuilderResponseDoc": { "properties": { - "author": { - "type": "string" - }, - "categories": { - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { - "type": "string" - }, - "published_at": { - "type": "string" - }, - "summary": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.SportsbookBuilderResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "foreignaffairs.HeadlinesResponse": { + "fanduel.sportsbookChoiceQuotesResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/foreignaffairs.HeadlineItem" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/fanduel.SportsbookChoiceQuotesResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "foreignaffairs.Topic": { + "fanduel.sportsbookDepthChartResponseDoc": { "properties": { - "feed_url": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.SportsbookDepthChartResponse" }, - "slug": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "foreignaffairs.TopicResponse": { + "fanduel.sportsbookEventPlayersResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/foreignaffairs.HeadlineItem" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "topic": { - "$ref": "#/definitions/foreignaffairs.Topic" + "data": { + "$ref": "#/definitions/fanduel.SportsbookEventPlayersResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "foreignaffairs.TopicsResponse": { + "fanduel.sportsbookEventResponseDoc": { "properties": { - "topics": { - "items": { - "$ref": "#/definitions/foreignaffairs.Topic" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/fanduel.SportsbookEventResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "foreignaffairs.articleResponseDoc": { + "fanduel.sportsbookEventScoreResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/foreignaffairs.ArticleResponse" + "$ref": "#/definitions/fanduel.SportsbookEventScoreResponse" }, "msg": { "example": "OK", @@ -88096,14 +92959,14 @@ }, "type": "object" }, - "foreignaffairs.authorResponseDoc": { + "fanduel.sportsbookEventStatsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/foreignaffairs.AuthorResponse" + "$ref": "#/definitions/fanduel.SportsbookEventStatsResponse" }, "msg": { "example": "OK", @@ -88112,14 +92975,14 @@ }, "type": "object" }, - "foreignaffairs.headlinesResponseDoc": { + "fanduel.sportsbookEventsStatusResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/foreignaffairs.HeadlinesResponse" + "$ref": "#/definitions/fanduel.SportsbookEventsStatusResponse" }, "msg": { "example": "OK", @@ -88128,14 +92991,14 @@ }, "type": "object" }, - "foreignaffairs.topicResponseDoc": { + "fanduel.sportsbookLeagueScheduleResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/foreignaffairs.TopicResponse" + "$ref": "#/definitions/fanduel.SportsbookLeagueScheduleResponse" }, "msg": { "example": "OK", @@ -88144,14 +93007,14 @@ }, "type": "object" }, - "foreignaffairs.topicsResponseDoc": { + "fanduel.sportsbookLiveCountResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/foreignaffairs.TopicsResponse" + "$ref": "#/definitions/fanduel.SportsbookLiveCountResponse" }, "msg": { "example": "OK", @@ -88160,320 +93023,270 @@ }, "type": "object" }, - "foreignpolicy.ArticleResponse": { + "fanduel.sportsbookLiveDataResponseDoc": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "is_gated": { - "type": "boolean" - }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" - }, - "published_at": { - "type": "string" - }, - "section": { - "type": "string" - }, - "title": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "updated_at": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.SportsbookLiveDataResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "foreignpolicy.AuthorArticle": { + "fanduel.sportsbookLiveScoresResponseDoc": { "properties": { - "published_at": { - "type": "string" - }, - "section": { - "type": "string" - }, - "section_url": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.SportsbookLiveScoresResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "foreignpolicy.AuthorResponse": { + "fanduel.sportsbookMarketPricesResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/foreignpolicy.AuthorArticle" - }, - "type": "array" - }, - "bio": { - "type": "string" - }, - "name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "slug": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.SportsbookMarketPricesResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "foreignpolicy.HeadlineItem": { + "fanduel.sportsbookPageResponseDoc": { "properties": { - "author": { - "type": "string" - }, - "categories": { - "items": { - "type": "string" - }, - "type": "array" - }, - "is_gated": { - "type": "boolean" - }, - "published_at": { - "type": "string" - }, - "summary": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.SportsbookPageResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "foreignpolicy.HeadlinesResponse": { + "fanduel.sportsbookParlaysResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/foreignpolicy.HeadlineItem" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/fanduel.SportsbookParlaysResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "foreignpolicy.LiveDetailResponse": { + "fanduel.sportsbookPlayByPlayResponseDoc": { "properties": { - "date": { - "type": "string" - }, - "description": { - "type": "string" - }, - "highlights": { - "items": { - "$ref": "#/definitions/foreignpolicy.LiveHighlight" - }, - "type": "array" - }, - "slug": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.SportsbookPlayByPlayResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "foreignpolicy.LiveHighlight": { + "fanduel.sportsbookPlayerNewsResponseDoc": { "properties": { - "title": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "video_url": { + "data": { + "$ref": "#/definitions/fanduel.SportsbookPlayerNewsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "foreignpolicy.LiveItem": { + "fanduel.sportsbookPlayerPropsResponseDoc": { "properties": { - "date": { - "type": "string" - }, - "description": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "slug": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.SportsbookPlayerPropsResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "foreignpolicy.LiveResponse": { + "fanduel.sportsbookPlayerResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/foreignpolicy.LiveItem" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/fanduel.SportsbookPlayerResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "foreignpolicy.ProjectItem": { + "fanduel.sportsbookPlayerStatsResponseDoc": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "section": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.SportsbookPlayerStatsResponse" }, - "summary": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "fanduel.sportsbookPlayersResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.SportsbookPlayersResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "foreignpolicy.ProjectResponse": { + "fanduel.sportsbookPromotionsResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/foreignpolicy.ProjectItem" - }, - "type": "array" - }, - "name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "slug": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.SportsbookPromotionsResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "foreignpolicy.ProjectSummary": { + "fanduel.sportsbookRosterResponseDoc": { "properties": { - "name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "slug": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.SportsbookRosterResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "foreignpolicy.ProjectsResponse": { + "fanduel.sportsbookScheduleResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/foreignpolicy.ProjectSummary" - }, - "type": "array" - }, - "next_page": { + "code": { + "example": 200, "type": "integer" }, - "page": { - "type": "integer" + "data": { + "$ref": "#/definitions/fanduel.SportsbookScheduleResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "foreignpolicy.TopicItem": { + "fanduel.sportsbookSearchResponseDoc": { "properties": { - "published_at": { - "type": "string" - }, - "summary": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.SportsbookSearchResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "foreignpolicy.TopicResponse": { + "fanduel.sportsbookSearchTabsResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/foreignpolicy.TopicItem" - }, - "type": "array" - }, - "page": { + "code": { + "example": 200, "type": "integer" }, - "topic": { - "type": "string" + "data": { + "$ref": "#/definitions/fanduel.SportsbookSearchTabsResponse" }, - "type": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "foreignpolicy.articleResponseDoc": { + "fanduel.sportsbookSportsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/foreignpolicy.ArticleResponse" + "$ref": "#/definitions/fanduel.SportsbookSportsResponse" }, "msg": { "example": "OK", @@ -88482,14 +93295,14 @@ }, "type": "object" }, - "foreignpolicy.authorResponseDoc": { + "fanduel.sportsbookStandingsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/foreignpolicy.AuthorResponse" + "$ref": "#/definitions/fanduel.SportsbookStandingsResponse" }, "msg": { "example": "OK", @@ -88498,14 +93311,14 @@ }, "type": "object" }, - "foreignpolicy.headlinesResponseDoc": { + "fanduel.sportsbookStatsListResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/foreignpolicy.HeadlinesResponse" + "$ref": "#/definitions/fanduel.SportsbookStatsListResponse" }, "msg": { "example": "OK", @@ -88514,14 +93327,14 @@ }, "type": "object" }, - "foreignpolicy.liveDetailResponseDoc": { + "fanduel.sportsbookTeamNewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/foreignpolicy.LiveDetailResponse" + "$ref": "#/definitions/fanduel.SportsbookTeamNewsResponse" }, "msg": { "example": "OK", @@ -88530,14 +93343,14 @@ }, "type": "object" }, - "foreignpolicy.liveResponseDoc": { + "fanduel.sportsbookTeamOddsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/foreignpolicy.LiveResponse" + "$ref": "#/definitions/fanduel.SportsbookTeamOddsResponse" }, "msg": { "example": "OK", @@ -88546,14 +93359,14 @@ }, "type": "object" }, - "foreignpolicy.projectResponseDoc": { + "fanduel.sportsbookTeamStatsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/foreignpolicy.ProjectResponse" + "$ref": "#/definitions/fanduel.SportsbookTeamStatsResponse" }, "msg": { "example": "OK", @@ -88562,14 +93375,14 @@ }, "type": "object" }, - "foreignpolicy.projectsResponseDoc": { + "fanduel.sportsbookTeamsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/foreignpolicy.ProjectsResponse" + "$ref": "#/definitions/fanduel.SportsbookTeamsResponse" }, "msg": { "example": "OK", @@ -88578,14 +93391,14 @@ }, "type": "object" }, - "foreignpolicy.topicResponseDoc": { + "fanduel.sportsbookTrendingResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/foreignpolicy.TopicResponse" + "$ref": "#/definitions/fanduel.SportsbookTrendingResponse" }, "msg": { "example": "OK", @@ -88594,24 +93407,23 @@ }, "type": "object" }, - "fortune.AuthorArticle": { + "farfetch.CategoriesResponse": { "properties": { - "authors": { + "genders": { "items": { - "type": "string" + "$ref": "#/definitions/farfetch.GenderCategories" }, "type": "array" - }, - "published_at": { - "type": "string" - }, - "section": { - "type": "string" - }, - "section_url": { + } + }, + "type": "object" + }, + "farfetch.Category": { + "properties": { + "name": { "type": "string" }, - "title": { + "slug": { "type": "string" }, "url": { @@ -88620,244 +93432,287 @@ }, "type": "object" }, - "fortune.AuthorResponse": { + "farfetch.Designer": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/fortune.AuthorArticle" - }, - "type": "array" - }, - "bio": { + "name": { "type": "string" }, - "email": { + "slug": { "type": "string" }, - "name": { + "url": { "type": "string" - }, - "page": { + } + }, + "type": "object" + }, + "farfetch.DesignersResponse": { + "properties": { + "count": { "type": "integer" }, - "slug": { - "type": "string" - }, - "social_accounts": { + "designers": { "items": { - "$ref": "#/definitions/fortune.AuthorSocialAccount" + "$ref": "#/definitions/farfetch.Designer" }, "type": "array" }, - "total_pages": { - "type": "integer" - }, - "url": { + "gender": { "type": "string" } }, "type": "object" }, - "fortune.AuthorSocialAccount": { + "farfetch.GenderCategories": { "properties": { - "platform": { - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/farfetch.Category" + }, + "type": "array" }, - "url": { + "gender": { "type": "string" } }, "type": "object" }, - "fortune.CompaniesResponse": { + "farfetch.ProductDetailResponse": { "properties": { - "country": { + "brand": { "type": "string" }, - "has_more": { - "type": "boolean" + "category_path": { + "items": { + "$ref": "#/definitions/farfetch.Category" + }, + "type": "array" }, - "industry": { + "color": { "type": "string" }, - "items": { + "description": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "gender": { + "type": "string" + }, + "id": { + "type": "string" + }, + "images": { "items": { - "$ref": "#/definitions/fortune.CompanyListItem" + "type": "string" }, "type": "array" }, - "page": { - "type": "integer" + "name": { + "type": "string" }, - "per_page": { - "type": "integer" + "source_url": { + "type": "string" }, - "ranking": { + "variants": { + "items": { + "$ref": "#/definitions/farfetch.ProductVariant" + }, + "type": "array" + } + }, + "type": "object" + }, + "farfetch.ProductSummary": { + "properties": { + "brand": { "type": "string" }, - "search": { + "currency": { "type": "string" }, - "total": { - "type": "integer" + "id": { + "type": "string" }, - "total_pages": { - "type": "integer" + "image_url": { + "type": "string" + }, + "in_stock": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "price": { + "type": "number" + }, + "url": { + "type": "string" } }, "type": "object" }, - "fortune.CompanyBreadcrumb": { + "farfetch.ProductVariant": { "properties": { - "label": { + "currency": { "type": "string" }, - "link": { + "in_stock": { + "type": "boolean" + }, + "price": { + "type": "number" + }, + "size": { + "type": "string" + }, + "sku": { "type": "string" } }, "type": "object" }, - "fortune.CompanyDataTable": { + "farfetch.SearchResponse": { "properties": { - "change_header": { + "category": { "type": "string" }, - "footnote": { + "count": { + "type": "integer" + }, + "designer": { "type": "string" }, - "title": { + "fetched_at": { "type": "string" }, - "value_header": { + "gender": { "type": "string" }, - "values": { + "page": { + "type": "integer" + }, + "products": { "items": { - "$ref": "#/definitions/fortune.CompanyDataTableRow" + "$ref": "#/definitions/farfetch.ProductSummary" }, "type": "array" - } - }, - "type": "object" - }, - "fortune.CompanyDataTableRow": { - "properties": { - "change": { - "type": "string" }, - "title": { + "source_url": { "type": "string" }, - "value": { - "type": "string" + "total_pages": { + "type": "integer" } }, "type": "object" }, - "fortune.CompanyEarningReport": { + "farfetch.categoriesResponseDoc": { "properties": { - "slug": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/farfetch.CategoriesResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "fortune.CompanyFilterOption": { + "farfetch.designersResponseDoc": { "properties": { - "slug": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { + "data": { + "$ref": "#/definitions/farfetch.DesignersResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "fortune.CompanyFilterRange": { + "farfetch.productResponseDoc": { "properties": { - "max": { + "code": { + "example": 200, "type": "integer" }, - "min": { - "type": "integer" + "data": { + "$ref": "#/definitions/farfetch.ProductDetailResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "fortune.CompanyFilterRanking": { + "farfetch.searchResponseDoc": { "properties": { - "slug": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/farfetch.SearchResponse" }, - "years": { - "items": { - "type": "integer" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "fortune.CompanyFiltersResponse": { + "fastcompany.AuthorResponse": { "properties": { - "countries": { + "articles": { "items": { - "$ref": "#/definitions/fortune.CompanyFilterOption" + "$ref": "#/definitions/fastcompany.HeadlineItem" }, "type": "array" }, - "employee_range": { - "$ref": "#/definitions/fortune.CompanyFilterRange" - }, - "industries": { + "biography": { "items": { - "$ref": "#/definitions/fortune.CompanyFilterOption" + "type": "string" }, "type": "array" }, - "rankings": { - "items": { - "$ref": "#/definitions/fortune.CompanyFilterRanking" - }, - "type": "array" + "name": { + "type": "string" }, - "revenue_range": { - "$ref": "#/definitions/fortune.CompanyFilterRange" + "url": { + "type": "string" } }, "type": "object" }, - "fortune.CompanyInfo": { - "additionalProperties": { - "type": "string" - }, - "type": "object" - }, - "fortune.CompanyListItem": { + "fastcompany.HeadlineItem": { "properties": { - "country": { + "author": { "type": "string" }, - "description": { + "image_url": { "type": "string" }, - "name": { + "published_at": { "type": "string" }, - "revenues": { + "summary": { "type": "string" }, - "slug": { + "title": { + "type": "string" + }, + "type": { "type": "string" }, "url": { @@ -88866,315 +93721,581 @@ }, "type": "object" }, - "fortune.CompanyRankingEntry": { + "fever.CitiesResponse": { "properties": { - "description": { - "type": "string" - }, - "rank": { - "type": "integer" + "groups": { + "items": { + "$ref": "#/definitions/fever.CityGroup" + }, + "type": "array" }, - "slug": { - "type": "string" + "has_results": { + "description": "The upstream's own \"did anything match\" flag.", + "example": true, + "type": "boolean" }, - "title": { + "locale": { + "example": "en-US", "type": "string" }, - "url": { + "query": { + "example": "new york", "type": "string" - }, - "year": { - "type": "integer" } }, "type": "object" }, - "fortune.CompanyResponse": { + "fever.City": { "properties": { - "accolades": {}, - "breadcrumbs": { - "items": { - "$ref": "#/definitions/fortune.CompanyBreadcrumb" - }, - "type": "array" + "city_code": { + "example": "NYC", + "type": "string" }, - "data_tables": { - "items": { - "$ref": "#/definitions/fortune.CompanyDataTable" - }, - "type": "array" + "city_id": { + "example": 6, + "type": "integer" }, - "description": { + "city_name": { + "example": "New York", "type": "string" }, - "earning_reports": { - "items": { - "$ref": "#/definitions/fortune.CompanyEarningReport" - }, - "type": "array" + "country_code": { + "description": "ISO country code.", + "example": "US", + "type": "string" }, - "executive_profiles": {}, - "info": { - "$ref": "#/definitions/fortune.CompanyInfo" + "country_name": { + "description": "Country name as the record prints it.", + "example": "United States", + "type": "string" }, - "rankings": { - "items": { - "$ref": "#/definitions/fortune.CompanyRankingEntry" - }, - "type": "array" + "hidden": { + "description": "Fever's own hidden flag. Hidden cities are returned; they are still real\ncity codes.", + "type": "boolean" }, - "slug": { + "is_top_city": { + "description": "True when the city is one of the fixed top-city rows.", + "example": true, + "type": "boolean" + }, + "language": { + "description": "Content language for the city.", + "example": "en", "type": "string" }, - "social_accounts": { - "items": { - "$ref": "#/definitions/fortune.CompanySocialAccount" - }, - "type": "array" + "latitude": { + "description": "City centre. This is the coordinate fever-plans defaults to.", + "example": 40.736009, + "type": "number" }, - "title": { + "longitude": { + "example": -73.984188, + "type": "number" + }, + "region_abbreviation": { + "description": "Region or state abbreviation when the record carries one.", + "example": "NY", "type": "string" }, - "url": { + "slug": { + "description": "URL slug used on feverup.com, e.g. new-york.", + "example": "new-york", "type": "string" - } - }, - "type": "object" - }, - "fortune.CompanySocialAccount": { - "properties": { - "account": { + }, + "slug_language": { + "description": "Language part of the slug, e.g. en.", + "example": "en", "type": "string" }, - "platform": { + "thumbnail_url": { + "description": "City thumbnail image URL.", "type": "string" } }, "type": "object" }, - "fortune.RankingFiltersResponse": { + "fever.CityGroup": { "properties": { - "list": { - "type": "string" - }, - "search_fields": { + "cities": { "items": { - "$ref": "#/definitions/fortune.RankingSearchField" + "$ref": "#/definitions/fever.City" }, "type": "array" }, - "sortable_fields": { - "items": { - "$ref": "#/definitions/fortune.RankingSortableField" + "count": { + "description": "The group's own match count.", + "example": 4, + "type": "integer" + }, + "name": { + "example": "Suggested cities", + "type": "string" + }, + "type": { + "description": "The upstream's own group type, e.g. \"suggested_cities\".", + "example": "suggested_cities", + "type": "string" + } + }, + "type": "object" + }, + "fever.FeedPill": { + "properties": { + "id": { + "description": "Pill id to pass as pill_id.", + "example": "foodie", + "type": "string" + }, + "label": { + "description": "Display label as the feed prints it.", + "example": "Foodie", + "type": "string" + } + }, + "type": "object" + }, + "fever.FeedResponse": { + "properties": { + "city_code": { + "description": "The city code the request asked for.", + "example": "NYC", + "type": "string" + }, + "pill_id": { + "description": "The pill filter that was applied, empty when none was requested.", + "example": "foodie", + "type": "string" + }, + "pills": { + "description": "The feed's complete pill enum. Always the unfiltered set: the upstream\nreturns all pills even when pill_id filters the rows.", + "items": { + "$ref": "#/definitions/fever.FeedPill" }, "type": "array" }, - "year": { - "type": "string" + "row_count": { + "description": "Number of rows returned.", + "example": 22, + "type": "integer" }, - "years": { + "rows": { + "description": "The curated rows, in the feed's own order. Each row is a carousel of plans,\nnot a plan list: the rows' items are reached through fever-plans with the\nrow's whatplanfilter_id.", "items": { - "type": "string" + "$ref": "#/definitions/fever.FeedRow" }, "type": "array" } }, "type": "object" }, - "fortune.RankingItem": { + "fever.FeedRow": { "properties": { - "data": { - "additionalProperties": { - "type": "string" - }, - "type": "object" - }, - "name": { + "carousel_type": { + "description": "The row's display layout, e.g. cards, top_x, multi_column_plans or\nupcoming_events.", + "example": "top_x", "type": "string" }, - "order": { + "index": { + "description": "The row's position in the feed's own order.", + "example": 0, "type": "integer" }, - "rank": { - "type": "integer" + "is_multicity": { + "description": "True when the row covers several cities rather than just the requested\none. A display hint, not a coverage claim.", + "example": false, + "type": "boolean" }, - "slug": { + "subtype": { + "description": "Row subtype, e.g. whatplanfilter, happening_soon or upcoming_events.", + "example": "whatplanfilter", "type": "string" }, - "url": { + "title": { + "description": "Row title as the feed prints it, e.g. \"Top 10 in New York\".", + "example": "Top 10 in New York", + "type": "string" + }, + "whatplanfilter_id": { + "description": "The row's Fever category id, when it has one. Pass it to fever-plans as\nwhatplanfilter_id. These are the values fever-filters does not list: Fever\nruns two category id spaces.", + "example": "851", "type": "string" } }, "type": "object" }, - "fortune.RankingList": { + "fever.FilterValue": { "properties": { - "region": { + "category_url": { + "description": "Canonical city+category page, present on the what group only.", "type": "string" }, - "slug": { + "disallow_indexing": { + "description": "Fever's own signal that the category should not be indexed. Informational.", + "type": "boolean" + }, + "id": { + "description": "The id to pass upstream. For the what group this is the value\nplans.whatplanfilter_id accepts.", + "example": "1040", "type": "string" }, - "title": { + "slug": { + "description": "URL slug, present on the what group only.", + "example": "music-events", "type": "string" }, - "url": { + "title": { + "description": "Display label as the site prints it.", + "example": "Music Events", "type": "string" } }, "type": "object" }, - "fortune.RankingListsResponse": { + "fever.FiltersResponse": { "properties": { - "lists": { + "city_code": { + "example": "NYC", + "type": "string" + }, + "what": { + "description": "Categories. Pass a value's id to fever-plans as whatplanfilter_id.", "items": { - "$ref": "#/definitions/fortune.RankingList" + "$ref": "#/definitions/fever.FilterValue" + }, + "type": "array" + }, + "when": { + "description": "Date windows. The ids match the site's own date shortcuts; the search\nendpoint takes epoch-second bounds derived from them, not these ids.", + "items": { + "$ref": "#/definitions/fever.FilterValue" + }, + "type": "array" + }, + "where": { + "description": "Place filters. Measured empty for NYC; kept separate so a city that\npublishes them is passed through unchanged.", + "items": { + "$ref": "#/definitions/fever.FilterValue" }, "type": "array" } }, "type": "object" }, - "fortune.RankingResponse": { + "fever.Plan": { "properties": { - "filters": { - "additionalProperties": { - "items": { - "type": "string" - }, - "type": "array" - }, - "type": "object" + "city_code": { + "description": "The plan's own city code. Compare it with requested_city_code: the search\nindex widens beyond the requested city on larger pages.", + "example": "NYC", + "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/fortune.RankingItem" - }, - "type": "array" + "city_name": { + "example": "New York", + "type": "string" }, - "limit": { + "cover_image_url": { + "description": "Cover image URL.", + "type": "string" + }, + "id": { + "example": 178922, "type": "integer" }, - "list": { + "location_name": { + "description": "Venue name as printed.", + "example": "Sony Hall", "type": "string" }, - "offset": { - "type": "integer" + "location_type": { + "description": "What kind of place the plan happens at, e.g. \"venue\".", + "example": "venue", + "type": "string" }, - "search": { + "name": { + "description": "Plan name as the site prints it.", + "example": "Candlelight Jazz: Tribute to Frank Sinatra", "type": "string" }, - "search_fields": { + "next_available_session_times": { + "description": "The next session start times the index advertises, ISO-8601 with offset.\nDates only: this is not an availability or inventory claim.", "items": { - "$ref": "#/definitions/fortune.RankingSearchField" + "type": "string" }, "type": "array" }, - "sort_by": { - "type": "string" + "price": { + "allOf": [ + { + "$ref": "#/definitions/fever.PriceInfo" + } + ], + "description": "Advertised price quote. Volatile display information, never a final price." }, - "sort_order": { + "rating": { + "description": "Average rating as the index reports it.", + "example": 4.57, + "type": "number" + }, + "rating_count": { + "description": "Number of ratings behind Rating.", + "example": 208, + "type": "integer" + }, + "timezone": { + "description": "IANA timezone of the plan's city.", + "example": "America/New_York", "type": "string" }, - "sortable_fields": { + "translation_languages": { + "description": "Languages the plan is translated into.", "items": { - "$ref": "#/definitions/fortune.RankingSortableField" + "type": "string" }, "type": "array" }, - "total": { - "type": "integer" - }, - "year": { + "url": { + "description": "Canonical public page on feverup.com.", "type": "string" + }, + "venue_ids": { + "description": "Fever venue ids, for callers that key their own store by venue.", + "items": { + "type": "integer" + }, + "type": "array" } }, "type": "object" }, - "fortune.RankingSearchField": { + "fever.PlanResponse": { "properties": { - "field_name": { + "categories": { + "description": "Category labels, not ids. The ids are whatplanfilter_id values, which the\ndetail record does not carry.", + "items": { + "type": "string" + }, + "type": "array" + }, + "city_code": { + "example": "NYC", "type": "string" }, - "options": { + "city_slug": { + "example": "new-york", + "type": "string" + }, + "description": { + "description": "Full plan description. May be empty for a plan that keeps its copy in the\npage's own modules instead.", + "type": "string" + }, + "first_active_session_date": { + "description": "The active window, which can differ from the session window above.", + "type": "string" + }, + "first_session_date": { + "description": "First and last session dates as the record reports them, ISO-8601 with\noffset. Dates only: never an availability claim.", + "type": "string" + }, + "gallery": { + "description": "Gallery image URLs.", "items": { "type": "string" }, "type": "array" }, - "title": { + "has_multiple_sessions": { + "description": "True when the plan runs several sessions rather than one fixed slot.", + "type": "boolean" + }, + "id": { + "example": 431445, + "type": "integer" + }, + "is_timeless": { + "description": "True when the plan has no fixed session dates.", + "type": "boolean" + }, + "last_active_session_date": { "type": "string" }, + "last_session_date": { + "type": "string" + }, + "name": { + "description": "Plan name as the site prints it.", + "example": "Ballet of Lights: Cinderella in a Sparkling Show", + "type": "string" + }, + "places": { + "description": "Every place the plan happens at, in the record's own order.", + "items": { + "$ref": "#/definitions/fever.Venue" + }, + "type": "array" + }, + "price": { + "allOf": [ + { + "$ref": "#/definitions/fever.PriceInfo" + } + ], + "description": "Advertised price quote. Volatile display information, never a final price." + }, + "rating": { + "description": "Average rating as the record reports it.", + "example": 3.87, + "type": "number" + }, + "rating_count": { + "description": "Number of ratings behind Rating.", + "example": 165, + "type": "integer" + }, + "translation_languages": { + "description": "Languages the plan is translated into (language part, e.g. \"de\").", + "items": { + "type": "string" + }, + "type": "array" + }, "type": { + "description": "The record's own plan type, e.g. \"standard\".", + "example": "standard", + "type": "string" + }, + "url": { + "description": "Canonical public page on feverup.com.", "type": "string" } }, "type": "object" }, - "fortune.RankingSortableField": { + "fever.PlansResponse": { "properties": { - "title": { + "count": { + "description": "The search index's own match count for the city. It is NOT the web page's\ntotal_plans and the two differ materially; see the endpoint documentation.", + "example": 2382, + "type": "integer" + }, + "date_end": { + "type": "integer" + }, + "date_start": { + "description": "The epoch-seconds window actually sent, when one was sent.", + "example": 1794096000, + "type": "integer" + }, + "has_next_page": { + "description": "True when the upstream reported a further page.", + "example": true, + "type": "boolean" + }, + "has_previous_page": { + "description": "True when a previous page exists.", + "type": "boolean" + }, + "locale": { + "example": "en", "type": "string" }, - "type": { + "page": { + "example": 1, + "type": "integer" + }, + "page_size": { + "example": 20, + "type": "integer" + }, + "plans": { + "items": { + "$ref": "#/definitions/fever.Plan" + }, + "type": "array" + }, + "query": { + "type": "string" + }, + "requested_city_code": { + "description": "The city code the request asked for.", + "example": "NYC", + "type": "string" + }, + "sort_type": { + "example": "popularity", + "type": "string" + }, + "whatplanfilter_id": { + "example": "1040", "type": "string" } }, "type": "object" }, - "fortune.RankingYearsResponse": { + "fever.PriceInfo": { "properties": { - "current_year": { - "type": "string" + "amount": { + "description": "Advertised price. Volatile; never a final price.", + "example": 34.56, + "type": "number" }, - "list": { + "currency": { + "description": "ISO currency code.", + "example": "USD", "type": "string" }, - "years": { - "items": { - "type": "string" - }, - "type": "array" + "max_amount": { + "description": "Highest advertised price when the plan quotes a range.", + "example": 76, + "type": "number" + }, + "type": { + "description": "Quote kind. \"from\" is an advertised starting price; \"single\" is a\nsingle-price item such as a gift card.", + "example": "from", + "type": "string" } }, "type": "object" }, - "fotmob.fifaRankingPeriodData": { + "fever.TopCitiesResponse": { "properties": { - "data": { + "cities": { + "description": "The fixed 25-city list, in the upstream's own order.", "items": { - "$ref": "#/definitions/fotmob.fifaRankingPeriodItemDoc" + "$ref": "#/definitions/fever.City" }, "type": "array" - }, - "source_url": { - "example": "https://www.fotmob.com/api/data/fifarankings/period?gender=men", - "type": "string" } }, "type": "object" }, - "fotmob.fifaRankingPeriodItemDoc": { + "fever.Venue": { "properties": { - "periodId": { - "example": "20260720", + "address": { "type": "string" }, - "periodName": { - "example": "20.07.2026", + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "name": { + "example": "Kaye Playhouse", + "type": "string" + }, + "slug": { "type": "string" } }, "type": "object" }, - "fotmob.fifaRankingPeriodsResponseDoc": { + "fever.citiesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/fotmob.fifaRankingPeriodData" + "$ref": "#/definitions/fever.CitiesResponse" }, "msg": { "example": "OK", @@ -89183,66 +94304,62 @@ }, "type": "object" }, - "fotmob.fifaRankingRowDoc": { + "fever.feedResponseDoc": { "properties": { - "gainedRank": { - "example": true, - "type": "boolean" - }, - "id": { - "example": 6720, + "code": { + "example": 200, "type": "integer" }, - "lostRank": { - "example": false, - "type": "boolean" + "data": { + "$ref": "#/definitions/fever.FeedResponse" }, - "name": { - "example": "Spain", + "msg": { + "example": "OK", "type": "string" - }, - "pointsDiff": { - "example": 121, - "type": "integer" - }, - "previousPoints": { - "example": 1875, + } + }, + "type": "object" + }, + "fever.filtersResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "rank": { - "example": 1, - "type": "integer" + "data": { + "$ref": "#/definitions/fever.FiltersResponse" }, - "totalPoints": { - "example": 1996, - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "fotmob.fifaRankingRowsDataDoc": { + "fever.planResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "items": { - "$ref": "#/definitions/fotmob.fifaRankingRowDoc" - }, - "type": "array" + "$ref": "#/definitions/fever.PlanResponse" }, - "source_url": { - "example": "https://www.fotmob.com/api/data/fifarankings/ranking?gender=men&periodId=20260720", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "fotmob.fifaRankingsResponseDoc": { + "fever.plansResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/fotmob.fifaRankingRowsDataDoc" + "$ref": "#/definitions/fever.PlansResponse" }, "msg": { "example": "OK", @@ -89251,300 +94368,1095 @@ }, "type": "object" }, - "fotmob.newsItemDoc": { + "fever.topCitiesResponseDoc": { "properties": { - "gmtTime": { - "example": "2026-09-26T15:24:07.000Z", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "id": { - "example": "evfncmhqwgeg1xgdmv21cayfj", - "type": "string" + "data": { + "$ref": "#/definitions/fever.TopCitiesResponse" }, - "imageUrl": { - "example": "https://images.example/story.jpg", + "msg": { + "example": "OK", "type": "string" - }, - "language": { - "example": "en", + } + }, + "type": "object" + }, + "finance.About": { + "properties": { + "about": { + "description": "Information about the company.", + "example": "SAP SE is a European multinational software company based in Walldorf, Baden-Württemberg, Germany...", "type": "string" }, - "lead": { - "example": "Article preview text.", + "ceo": { + "description": "The CEO of the company.", + "example": "Christian Klein", "type": "string" }, - "page": { - "$ref": "#/definitions/fotmob.newsItemPageDoc" + "employees": { + "description": "The number of employees.", + "example": 107583, + "type": "integer" }, - "sourceIconUrl": { - "example": "https://images.fotmob.com/image_resources/news/fotmob.png", + "founded": { + "description": "The founding date of the company.", + "example": "1972-04-01T00:00:00Z", "type": "string" }, - "sourceStr": { - "example": "FotMob", + "headquarters": { + "description": "The headquarters of the company.", + "example": "Walldorf, Baden-Württemberg, Germany", "type": "string" }, - "title": { - "example": "Latest football headline", + "website": { + "description": "The company's website.", + "example": "https://www.sap.com/", "type": "string" } }, "type": "object" }, - "fotmob.newsItemPageDoc": { + "finance.BalanceSheet": { "properties": { - "url": { - "example": "/news/evfncmhqwgeg1xgdmv21cayfj-latest-football-headline", - "type": "string" + "cash_and_short_term_change_yy": { + "description": "Year-over-year change in cash and short-term investments (%)", + "example": 5.87, + "type": "number" + }, + "cash_and_short_term_investments": { + "description": "Cash and short-term investments in USD", + "example": 65170000000, + "type": "number" + }, + "price_to_book": { + "description": "Price to book ratio", + "example": 67.71, + "type": "number" + }, + "quarter": { + "description": "The fiscal quarter", + "example": 4, + "type": "integer" + }, + "return_on_assets": { + "description": "Return on assets (%)", + "example": 21.24, + "type": "number" + }, + "return_on_capital": { + "description": "Return on capital (%)", + "example": 43.01, + "type": "number" + }, + "shares_outstanding": { + "description": "Shares outstanding", + "example": 15120000000, + "type": "number" + }, + "total_assets": { + "description": "Total assets in USD", + "example": 364980000000, + "type": "number" + }, + "total_assets_change_yy": { + "description": "Year-over-year change in total assets (%)", + "example": 3.52, + "type": "number" + }, + "total_equity": { + "description": "Total equity in USD", + "example": 56950000000, + "type": "number" + }, + "total_liabilities": { + "description": "Total liabilities in USD", + "example": 308030000000, + "type": "number" + }, + "total_liabilities_change_yy": { + "description": "Year-over-year change in total liabilities (%)", + "example": 6.06, + "type": "number" + }, + "year": { + "description": "The fiscal year", + "example": 2024, + "type": "integer" } }, "type": "object" }, - "fotmob.newsListResponseDoc": { + "finance.CashFlow": { "properties": { - "code": { - "example": 200, - "type": "integer" + "cash_from_financing": { + "description": "Cash from financing in USD", + "example": -24950000000, + "type": "number" }, - "data": { - "$ref": "#/definitions/fotmob.sourceNewsListDoc" + "cash_from_financing_change_yy": { + "description": "Year-over-year change in cash from financing (%)", + "example": -7.75, + "type": "number" }, - "msg": { - "example": "OK", - "type": "string" + "cash_from_investing": { + "description": "Cash from investing in USD", + "example": 1450000000, + "type": "number" + }, + "cash_from_investing_change_yy": { + "description": "Year-over-year change in cash from investing (%)", + "example": -39.64, + "type": "number" + }, + "cash_from_operations": { + "description": "Cash from operations in USD", + "example": 26810000000, + "type": "number" + }, + "cash_from_operations_change_yy": { + "description": "Year-over-year change in cash from operations (%)", + "example": 24.14, + "type": "number" + }, + "free_cash_flow": { + "description": "Free cash flow in USD", + "example": 34540000000, + "type": "number" + }, + "free_cash_flow_change_yy": { + "description": "Year-over-year change in free cash flow (%)", + "example": 180.6, + "type": "number" + }, + "net_change_in_cash": { + "description": "Net change in cash in USD", + "example": 3310000000, + "type": "number" + }, + "net_change_in_cash_change_yy": { + "description": "Year-over-year change in net change in cash (%)", + "example": 294.28, + "type": "number" + }, + "net_income": { + "description": "Net income in USD", + "example": 14740000000, + "type": "number" + }, + "net_income_change_yy": { + "description": "Year-over-year change in net income (%)", + "example": -35.81, + "type": "number" + }, + "quarter": { + "description": "The fiscal quarter", + "example": 4, + "type": "integer" + }, + "year": { + "description": "The fiscal year", + "example": 2024, + "type": "integer" } }, "type": "object" }, - "fotmob.responseDoc": { + "finance.CategoryNewsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "category": { + "description": "Google Finance category id that was requested.", + "example": "18", + "type": "string" }, - "data": { - "$ref": "#/definitions/fotmob.sourceDataDoc" + "items": { + "description": "News articles listed for the category.", + "items": { + "$ref": "#/definitions/finance.FinanceArticle" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "offset": { + "description": "Number of articles skipped before this page.", + "example": 0, + "type": "integer" } }, "type": "object" }, - "fotmob.sourceDataDoc": { + "finance.CategoryStocksResponse": { "properties": { - "data": { - "additionalProperties": true, - "type": "object" - }, - "source_url": { - "example": "https://www.fotmob.com/api/data/matches?date=20260925&timezone=UTC", + "category": { + "description": "Google Finance category id that was requested.", + "example": "18", "type": "string" + }, + "items": { + "description": "Instruments listed for the category.", + "items": { + "$ref": "#/definitions/finance.Instrument" + }, + "type": "array" + }, + "offset": { + "description": "Number of instruments skipped before this page.", + "example": 0, + "type": "integer" } }, "type": "object" }, - "fotmob.sourceNewsListDoc": { + "finance.ChartResponse": { "properties": { - "data": { + "instrument": { + "allOf": [ + { + "$ref": "#/definitions/finance.Instrument" + } + ], + "description": "Instrument the chart is for." + }, + "points": { + "description": "Chart data points in time order, each with a time, a price and a volume.", "items": { - "$ref": "#/definitions/fotmob.newsItemDoc" + "$ref": "#/definitions/finance.Ticker" }, "type": "array" }, - "source_url": { - "example": "https://www.fotmob.com/api/news/latestNews?lang=en&page=1&startIndex=0", + "previous_close": { + "description": "Closing price of the previous trading day.", + "example": 236.35, + "type": "number" + }, + "window": { + "description": "Chart window that was returned: `1d`, `5d`, `1m`, `6m`, `ytd`, `1y`, `5y` or `max`.", + "example": "1m", "type": "string" } }, "type": "object" }, - "foxnews.ArticleResponse": { + "finance.ClassificationResponse": { "properties": { - "authors": { + "categories": { + "description": "Sector or category labels Google Finance assigns to the instrument, for example `Technology`.", "items": { "type": "string" }, "type": "array" }, + "instrument": { + "allOf": [ + { + "$ref": "#/definitions/finance.Instrument" + } + ], + "description": "Instrument the labels belong to." + } + }, + "type": "object" + }, + "finance.CompanyInfo": { + "properties": { + "ceo": { + "description": "Name of the company's chief executive.", + "example": "Tim Cook", + "type": "string" + }, "description": { + "description": "Company description shown on Google Finance.", "type": "string" }, - "image_url": { + "employees": { + "description": "Number of employees.", + "example": 166000, + "type": "integer" + }, + "fifty_two_week_high": { + "description": "Highest price over the last 52 weeks.", + "example": 288.61, + "type": "number" + }, + "fifty_two_week_low": { + "description": "Lowest price over the last 52 weeks.", + "example": 169.21, + "type": "number" + }, + "headquarters": { + "description": "Location of the company's headquarters, for example `Cupertino, CA, US`.", + "example": "Cupertino, CA, US", "type": "string" }, - "paragraphs": { + "high": { + "description": "Highest price of the trading day.", + "example": 272.4, + "type": "number" + }, + "low": { + "description": "Lowest price of the trading day.", + "example": 269.1, + "type": "number" + }, + "market_cap": { + "description": "Market capitalisation of the company, as a plain number.", + "example": 4010000000000, + "type": "number" + }, + "open": { + "description": "Opening price of the trading day.", + "example": 270.9, + "type": "number" + }, + "pe_ratio": { + "description": "Price-to-earnings ratio of the stock.", + "example": 34.56, + "type": "number" + }, + "sector": { + "description": "Sector the company belongs to, for example `Technology`.", + "example": "Technology", + "type": "string" + }, + "volume": { + "description": "Number of shares traded, as Google Finance shows it.", + "example": 41339643, + "type": "integer" + } + }, + "type": "object" + }, + "finance.ContextResponse": { + "properties": { + "items": { "items": { - "type": "string" + "$ref": "#/definitions/finance.Instrument" }, "type": "array" }, - "published_at": { + "query": { + "example": "apple", + "type": "string" + } + }, + "type": "object" + }, + "finance.EarningsCalendarResponse": { + "properties": { + "items": { + "description": "Upcoming earnings events from the Google Finance earnings calendar.", + "items": { + "$ref": "#/definitions/finance.EarningsEvent" + }, + "type": "array" + } + }, + "type": "object" + }, + "finance.EarningsEvent": { + "properties": { + "company_name": { + "description": "Name of the company reporting earnings.", "type": "string" }, - "section": { + "conference_phone": { + "description": "Phone number for the earnings call.", "type": "string" }, - "title": { + "conference_url": { + "description": "URL of the earnings call.", "type": "string" }, - "updated_at": { + "event_time": { + "description": "Time of the earnings event, in UTC (RFC 3339).", "type": "string" }, - "url": { + "event_unix": { + "description": "Time of the earnings event, in Unix seconds.", + "type": "integer" + }, + "fiscal_period": { + "description": "Fiscal period the earnings report covers.", "type": "string" + }, + "instrument": { + "allOf": [ + { + "$ref": "#/definitions/finance.Instrument" + } + ], + "description": "Instrument of the company reporting earnings." } }, "type": "object" }, - "foxnews.AuthorArticle": { + "finance.FinanceArticle": { "properties": { "published_at": { + "description": "Time the article was published, in UTC (RFC 3339).", "type": "string" }, - "summary": { + "published_unix": { + "description": "Time the article was published, in Unix seconds.", + "example": 1777077000, + "type": "integer" + }, + "related": { + "description": "Instruments mentioned in the article.", + "items": { + "$ref": "#/definitions/finance.Instrument" + }, + "type": "array" + }, + "source": { + "description": "Name of the publisher of the article.", + "example": "Reuters", + "type": "string" + }, + "thumbnail_url": { + "description": "URL of the article thumbnail image.", "type": "string" }, "title": { + "description": "Headline of the article.", + "example": "Apple announces an update", "type": "string" }, "url": { + "description": "URL of the article on the publisher's site.", + "example": "https://example.com/news", "type": "string" } }, "type": "object" }, - "foxnews.AuthorResponse": { + "finance.FinancialPeriod": { "properties": { - "articles": { + "capital_expenditure": { + "description": "Capital expenditure for the period.", + "type": "number" + }, + "ebitda": { + "description": "Earnings before interest, taxes, depreciation and amortisation for the period.", + "type": "number" + }, + "eps": { + "description": "Earnings per share for the period.", + "type": "number" + }, + "eps_diluted": { + "description": "Diluted earnings per share for the period.", + "type": "number" + }, + "free_cash_flow": { + "description": "Free cash flow for the period.", + "type": "number" + }, + "net_income": { + "description": "Net income for the period, in the response currency.", + "type": "number" + }, + "operating_cash_flow": { + "description": "Cash flow from operations for the period.", + "type": "number" + }, + "operating_income": { + "description": "Operating income for the period.", + "type": "number" + }, + "operating_margin": { + "description": "Operating margin for the period.", + "type": "number" + }, + "pe_ratio": { + "description": "Price-to-earnings ratio for the period.", + "type": "number" + }, + "period": { + "description": "Period label: `annual` when the period ends in December, otherwise `quarterly`.", + "example": "annual", + "type": "string" + }, + "period_end": { + "description": "End date of the reporting period, in UTC (RFC 3339).", + "type": "string" + }, + "profit_margin": { + "description": "Profit margin for the period.", + "type": "number" + }, + "revenue": { + "description": "Total revenue for the period, in the response currency.", + "type": "number" + }, + "revenue_growth_yoy": { + "description": "Revenue growth compared with the same period a year earlier.", + "type": "number" + }, + "shares_outstanding": { + "description": "Number of shares outstanding for the period.", + "type": "number" + }, + "total_assets": { + "description": "Total assets at the end of the period.", + "type": "number" + }, + "total_equity": { + "description": "Total shareholder equity at the end of the period.", + "type": "number" + }, + "total_liabilities": { + "description": "Total liabilities at the end of the period.", + "type": "number" + } + }, + "type": "object" + }, + "finance.FinancialsResponse": { + "properties": { + "annual": { + "description": "Annual financial statement rows.", "items": { - "$ref": "#/definitions/foxnews.AuthorArticle" + "$ref": "#/definitions/finance.FinancialPeriod" }, "type": "array" }, - "bio": { + "currency": { + "description": "Currency code the amounts are reported in, for example `USD`.", + "example": "USD", "type": "string" }, - "name": { - "type": "string" + "quarterly": { + "description": "Quarterly financial statement rows.", + "items": { + "$ref": "#/definitions/finance.FinancialPeriod" + }, + "type": "array" + } + }, + "type": "object" + }, + "finance.HeadlineResponse": { + "properties": { + "article": { + "$ref": "#/definitions/finance.FinanceArticle" + } + }, + "type": "object" + }, + "finance.IncomeStatement": { + "properties": { + "earnings_per_share": { + "description": "Earnings per share in USD", + "example": 1.64, + "type": "number" }, - "slug": { - "type": "string" + "earnings_per_share_change_yy": { + "description": "Year-over-year change in earnings per share (%)", + "example": 12.33, + "type": "number" }, - "url": { - "type": "string" + "ebitda": { + "description": "EBITDA (Earnings Before Interest, Taxes, Depreciation, and Amortization) in USD", + "example": 32502000000, + "type": "number" + }, + "ebitda_change_yy": { + "description": "Year-over-year change in EBITDA (%)", + "example": 9.72, + "type": "number" + }, + "effective_tax_rate": { + "description": "Effective tax rate (%)", + "example": 50.23, + "type": "number" + }, + "net_income": { + "description": "Net income in USD", + "example": 14740000000, + "type": "number" + }, + "net_income_change_yy": { + "description": "Year-over-year change in net income (%)", + "example": -35.81, + "type": "number" + }, + "net_profit_margin": { + "description": "Net profit margin (%)", + "example": 15.52, + "type": "number" + }, + "net_profit_margin_change_yy": { + "description": "Year-over-year change in net profit margin (%)", + "example": -39.49, + "type": "number" + }, + "operating_expense": { + "description": "Total operating expense in USD", + "example": 14736000000, + "type": "number" + }, + "operating_expense_change_yy": { + "description": "Year-over-year change in operating expense (%)", + "example": 6.17, + "type": "number" + }, + "quarter": { + "description": "The fiscal quarter", + "example": 4, + "type": "integer" + }, + "revenue": { + "description": "Total revenue in USD", + "example": 94930000000, + "type": "number" + }, + "revenue_change_yy": { + "description": "Year-over-year change in revenue (%)", + "example": 6.07, + "type": "number" + }, + "year": { + "description": "The fiscal year", + "example": 2024, + "type": "integer" } }, "type": "object" }, - "foxnews.HeadlineItem": { + "finance.Instrument": { "properties": { - "author": { + "after_hours": { + "allOf": [ + { + "$ref": "#/definitions/finance.PriceChange" + } + ], + "description": "Price and change in after-hours trading." + }, + "change": { + "description": "Price change shown by Google Finance, in the same unit as `price`.", + "example": -3.37, + "type": "number" + }, + "change_percent": { + "description": "Price change as a percentage, as Google Finance shows it.", + "example": -1.3, + "type": "number" + }, + "country": { + "description": "Country code of the instrument, for example `US`.", + "example": "US", "type": "string" }, - "image_url": { + "currency": { + "description": "Currency code the instrument is priced in, for example `USD`.", + "example": "USD", "type": "string" }, - "published_at": { + "exchange": { + "description": "Exchange the instrument trades on, for example `NASDAQ`.", + "example": "NASDAQ", "type": "string" }, - "summary": { + "google_id": { + "description": "Google's id for the instrument, for example `/m/07zmbvf`.", + "example": "/m/07zmbvf", "type": "string" }, - "title": { + "identifier": { + "description": "Instrument identifier in `TICKER:EXCHANGE` form, for example `AAPL:NASDAQ`. Use it as the `quote` path parameter.", + "example": "AAPL:NASDAQ", + "type": "string" + }, + "last_update_unix": { + "description": "Time of the latest price update, in Unix seconds.", + "example": 1777077000, + "type": "integer" + }, + "name": { + "description": "Instrument name, for example `Apple Inc`.", + "example": "Apple Inc", + "type": "string" + }, + "previous_close": { + "description": "Closing price of the previous trading day.", + "example": 236.35, + "type": "number" + }, + "price": { + "description": "Latest price of the instrument.", + "example": 255.65, + "type": "number" + }, + "ticker": { + "description": "Ticker symbol of the instrument.", + "example": "AAPL", + "type": "string" + }, + "timezone": { + "description": "IANA time zone of the instrument's market, for example `America/New_York`.", + "example": "America/New_York", "type": "string" }, "type": { + "description": "Kind of instrument: `stock`, `index`, `crypto`, `etf` or `other`.", + "example": "stock", "type": "string" + } + }, + "type": "object" + }, + "finance.Investment": { + "properties": { + "balance_sheet": { + "description": "The balance sheet data.", + "items": { + "$ref": "#/definitions/finance.BalanceSheet" + }, + "type": "array" }, - "url": { + "cash_flow": { + "description": "The cash flow data.", + "items": { + "$ref": "#/definitions/finance.CashFlow" + }, + "type": "array" + }, + "income_statement": { + "description": "The income statement data.", + "items": { + "$ref": "#/definitions/finance.IncomeStatement" + }, + "type": "array" + } + }, + "type": "object" + }, + "finance.KeyStats": { + "properties": { + "avg_volume": { + "description": "The average trading volume.", + "example": 1510000, + "type": "integer" + }, + "climate_change_score": { + "description": "The climate change score of the company.", + "example": "B", + "type": "string" + }, + "currency": { + "description": "The currency of the stock price.", + "example": "EUR", + "type": "string" + }, + "day_range": { + "allOf": [ + { + "$ref": "#/definitions/finance.Range" + } + ], + "description": "The day's price range." + }, + "dividend_yield": { + "description": "The dividend yield percentage.", + "example": 0.0092, + "type": "number" + }, + "market_cap": { + "description": "The market capitalization of the company.", + "example": 291570000000, + "type": "integer" + }, + "pe_ratio": { + "description": "The price-to-earnings ratio.", + "example": 99.95, + "type": "number" + }, + "previous_close": { + "description": "The previous closing price of the stock.", + "example": 236.35, + "type": "number" + }, + "primary_exchange": { + "description": "The primary exchange where the stock is listed.", + "example": "ETR", "type": "string" + }, + "tags": { + "description": "Tags describing the stock.", + "example": [ + "[\"Stock\"", + " \"DE listed security\"", + " \"DE headquartered\"]" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "year_range": { + "allOf": [ + { + "$ref": "#/definitions/finance.Range" + } + ], + "description": "The year's price range." } }, "type": "object" }, - "foxnews.HeadlinesResponse": { + "finance.MarketMoversResponse": { "properties": { + "categories": { + "description": "Numeric category ids the movers were filtered by.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "count": { + "description": "Number of instruments requested.", + "example": 20, + "type": "integer" + }, "items": { + "description": "Market mover instruments.", "items": { - "$ref": "#/definitions/foxnews.HeadlineItem" + "$ref": "#/definitions/finance.Instrument" }, "type": "array" }, - "section": { + "offset": { + "description": "Number of instruments skipped before this page.", + "example": 0, + "type": "integer" + } + }, + "type": "object" + }, + "finance.News": { + "properties": { + "source": { + "description": "The source of the news.", + "example": "Reuters", + "type": "string" + }, + "time": { + "description": "The publication time of the news.", + "example": "2024-12-27T09:03:00Z", + "type": "string" + }, + "title": { + "description": "The title of the news article.", + "example": "SAP Announces Q3 Earnings", + "type": "string" + }, + "url": { + "description": "The URL to the news article.", + "example": "https://www.reuters.com/article/sap-q3", "type": "string" } }, "type": "object" }, - "foxnews.NewsResponse": { + "finance.PriceChange": { "properties": { - "items": { + "change": { + "description": "Price change, in the same unit as `price`.", + "example": -3.37, + "type": "number" + }, + "change_percent": { + "description": "Price change as a percentage.", + "example": -1.3, + "type": "number" + }, + "price": { + "description": "Price in after-hours trading.", + "example": 255.65, + "type": "number" + } + }, + "type": "object" + }, + "finance.QuoteResp": { + "properties": { + "about": { + "allOf": [ + { + "$ref": "#/definitions/finance.About" + } + ], + "description": "Information about the company." + }, + "investment": { + "allOf": [ + { + "$ref": "#/definitions/finance.Investment" + } + ], + "description": "The investment-related data." + }, + "key_stats": { + "allOf": [ + { + "$ref": "#/definitions/finance.KeyStats" + } + ], + "description": "The key statistics about the stock." + }, + "news": { + "description": "The news related to the stock/company.", "items": { - "$ref": "#/definitions/foxnews.HeadlineItem" + "$ref": "#/definitions/finance.News" + }, + "type": "array" + }, + "tickers": { + "description": "Historical ticker data.", + "items": { + "$ref": "#/definitions/finance.Ticker" }, "type": "array" + }, + "title": { + "description": "The title or name of the stock/company.", + "example": "SAP SE", + "type": "string" } }, "type": "object" }, - "foxnews.SearchResponse": { + "finance.Range": { + "properties": { + "from": { + "description": "The lower bound of the range.", + "example": 237.95, + "type": "number" + }, + "to": { + "description": "The upper bound of the range.", + "example": 241.4, + "type": "number" + } + }, + "type": "object" + }, + "finance.RelatedResponse": { "properties": { + "instrument": { + "allOf": [ + { + "$ref": "#/definitions/finance.Instrument" + } + ], + "description": "Instrument the related list is for." + }, "items": { + "description": "Instruments Google Finance lists as related.", "items": { - "$ref": "#/definitions/foxnews.HeadlineItem" + "$ref": "#/definitions/finance.Instrument" }, "type": "array" + } + }, + "type": "object" + }, + "finance.StockData": { + "properties": { + "change": { + "description": "The absolute change in the stock price compared to the previous close.", + "example": -3.369995, + "type": "number" }, - "query": { + "company_name": { + "description": "The name of the company associated with the stock ticker.", + "example": "Apple Inc", "type": "string" }, - "start": { - "type": "integer" + "currency": { + "description": "The currency in which the stock price is denominated.", + "example": "USD", + "type": "string" }, - "total": { - "type": "integer" + "exchange": { + "description": "The stock exchange where the stock is listed.", + "example": "NASDAQ", + "type": "string" }, - "type": { + "percentage": { + "description": "The percentage change in the stock price compared to the previous close.", + "example": -1.301056, + "type": "number" + }, + "price": { + "description": "The current price of the stock.", + "example": 255.65, + "type": "number" + }, + "ticker": { + "description": "The stock ticker symbol.", + "example": "AAPL", "type": "string" } }, "type": "object" }, - "foxnews.Section": { + "finance.Ticker": { "properties": { - "name": { - "type": "string" + "price": { + "description": "The price at the given time.", + "example": 239.5, + "type": "number" }, - "slug": { + "time": { + "description": "The time of the ticker record.", + "example": "2024-12-27T09:03:00Z", "type": "string" }, - "url": { - "type": "string" + "volume": { + "description": "The trading volume at the given time.", + "example": 131032, + "type": "integer" } }, "type": "object" }, - "foxnews.SectionsResponse": { + "finance.TopStocksResponse": { "properties": { - "sections": { + "items": { + "description": "Top instruments for the selected metric.", "items": { - "$ref": "#/definitions/foxnews.Section" + "$ref": "#/definitions/finance.Instrument" }, "type": "array" + }, + "metric": { + "description": "Google Finance metric id that was applied.", + "example": 6, + "type": "integer" + }, + "page": { + "description": "Page number returned.", + "example": 1, + "type": "integer" } }, "type": "object" }, - "foxnews.articleResponseDoc": { + "finance.articlesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/foxnews.ArticleResponse" + "items": { + "$ref": "#/definitions/finance.FinanceArticle" + }, + "type": "array" }, "msg": { "example": "OK", @@ -89553,14 +95465,14 @@ }, "type": "object" }, - "foxnews.authorResponseDoc": { + "finance.categoryNewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/foxnews.AuthorResponse" + "$ref": "#/definitions/finance.CategoryNewsResponse" }, "msg": { "example": "OK", @@ -89569,14 +95481,14 @@ }, "type": "object" }, - "foxnews.headlinesResponseDoc": { + "finance.categoryStocksResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/foxnews.HeadlinesResponse" + "$ref": "#/definitions/finance.CategoryStocksResponse" }, "msg": { "example": "OK", @@ -89585,14 +95497,14 @@ }, "type": "object" }, - "foxnews.newsResponseDoc": { + "finance.chartResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/foxnews.NewsResponse" + "$ref": "#/definitions/finance.ChartResponse" }, "msg": { "example": "OK", @@ -89601,14 +95513,14 @@ }, "type": "object" }, - "foxnews.searchResponseDoc": { + "finance.classificationResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/foxnews.SearchResponse" + "$ref": "#/definitions/finance.ClassificationResponse" }, "msg": { "example": "OK", @@ -89617,14 +95529,14 @@ }, "type": "object" }, - "foxnews.sectionsResponseDoc": { + "finance.companyResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/foxnews.SectionsResponse" + "$ref": "#/definitions/finance.CompanyInfo" }, "msg": { "example": "OK", @@ -89633,91 +95545,97 @@ }, "type": "object" }, - "france24.AuthorResponse": { + "finance.contextResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/france24.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { - "type": "string" - }, - "job_title": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/finance.ContextResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "france24.HeadlineItem": { + "finance.earningsResponseDoc": { "properties": { - "author": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "published_at": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "summary": { - "type": "string" + "data": { + "$ref": "#/definitions/finance.EarningsCalendarResponse" }, - "title": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "finance.financialsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "type": { - "type": "string" + "data": { + "$ref": "#/definitions/finance.FinancialsResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "freemalaysiatoday.NewsResponse": { + "finance.headlineResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/finance.HeadlineResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "freemalaysiatoday.SectionsResponse": { + "finance.instrumentsResponseDoc": { "properties": { - "sections": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { "items": { - "$ref": "#/definitions/newsplatform.Section" + "$ref": "#/definitions/finance.Instrument" }, "type": "array" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "freemalaysiatoday.newsResponseDoc": { + "finance.marketMoversResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/freemalaysiatoday.NewsResponse" + "$ref": "#/definitions/finance.MarketMoversResponse" }, "msg": { "example": "OK", @@ -89726,14 +95644,14 @@ }, "type": "object" }, - "freemalaysiatoday.sectionsResponseDoc": { + "finance.quoteResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/freemalaysiatoday.SectionsResponse" + "$ref": "#/definitions/finance.QuoteResp" }, "msg": { "example": "OK", @@ -89742,117 +95660,109 @@ }, "type": "object" }, - "ft.ArticleResponse": { + "finance.relatedResponseDoc": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "published_at": { - "type": "string" + "data": { + "$ref": "#/definitions/finance.RelatedResponse" }, - "section": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "finance.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "tags": { + "data": { "items": { - "type": "string" + "$ref": "#/definitions/finance.StockData" }, "type": "array" }, - "title": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "url": { + "msg": { + "example": "OK", "type": "string" - }, - "word_count": { - "type": "integer" } }, "type": "object" }, - "ft.AuthorResponse": { + "finance.tickerResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/ft.HeadlineItem" - }, - "type": "array" - }, - "email": { - "type": "string" - }, - "has_more": { - "type": "boolean" - }, - "image_url": { - "type": "string" - }, - "job_title": { - "type": "string" - }, - "name": { - "type": "string" - }, - "page": { + "code": { + "example": 200, "type": "integer" }, - "slug": { - "type": "string" - }, - "social_accounts": { + "data": { "items": { - "$ref": "#/definitions/ft.AuthorSocialAccount" + "$ref": "#/definitions/finance.Ticker" }, "type": "array" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "ft.AuthorSocialAccount": { + "finance.topStocksResponseDoc": { "properties": { - "platform": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "url": { + "data": { + "$ref": "#/definitions/finance.TopStocksResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "ft.CategoriesResponse": { + "firstdibs.CategoriesResponse": { "properties": { - "sections": { + "categories": { "items": { - "$ref": "#/definitions/ft.CategorySection" + "$ref": "#/definitions/firstdibs.Category" + }, + "type": "array" + }, + "filter_values": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "object" + }, + "price_presets": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sorts": { + "items": { + "type": "string" }, "type": "array" } }, "type": "object" }, - "ft.CategoryLink": { + "firstdibs.Category": { "properties": { "name": { "type": "string" @@ -89866,17 +95776,11 @@ }, "type": "object" }, - "ft.CategorySection": { + "firstdibs.Designer": { "properties": { "name": { "type": "string" }, - "sections": { - "items": { - "$ref": "#/definitions/ft.CategoryLink" - }, - "type": "array" - }, "slug": { "type": "string" }, @@ -89886,56 +95790,51 @@ }, "type": "object" }, - "ft.HeadlineItem": { + "firstdibs.DesignersResponse": { "properties": { - "image_url": { - "type": "string" + "count": { + "type": "integer" }, - "published_at": { + "designers": { + "items": { + "$ref": "#/definitions/firstdibs.Designer" + }, + "type": "array" + } + }, + "type": "object" + }, + "firstdibs.Detail": { + "properties": { + "brand": { "type": "string" }, - "section": { + "category": { "type": "string" }, - "summary": { + "currency": { "type": "string" }, - "title": { + "description": { "type": "string" }, - "url": { + "id": { "type": "string" - } - }, - "type": "object" - }, - "ft.HeadlinesResponse": { - "properties": { - "has_more": { - "type": "boolean" }, - "items": { + "images": { "items": { - "$ref": "#/definitions/ft.HeadlineItem" + "type": "string" }, "type": "array" }, - "page": { - "type": "integer" + "in_stock": { + "type": "boolean" }, - "section": { - "type": "string" - } - }, - "type": "object" - }, - "ft.NewsItem": { - "properties": { - "published_at": { + "name": { "type": "string" }, - "title": { - "type": "string" + "price": { + "type": "number" }, "url": { "type": "string" @@ -89943,83 +95842,113 @@ }, "type": "object" }, - "ft.NewsResponse": { + "firstdibs.Facets": { "properties": { - "items": { + "categories": { "items": { - "$ref": "#/definitions/ft.NewsItem" + "$ref": "#/definitions/firstdibs.Category" + }, + "type": "array" + }, + "designers": { + "items": { + "$ref": "#/definitions/firstdibs.Designer" + }, + "type": "array" + }, + "price_presets": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sorts": { + "items": { + "type": "string" }, "type": "array" } }, "type": "object" }, - "ft.SearchResponse": { + "firstdibs.Product": { "properties": { - "date_range": { + "brand": { "type": "string" }, - "has_more": { - "type": "boolean" + "category": { + "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/ft.HeadlineItem" - }, - "type": "array" + "currency": { + "type": "string" }, - "page": { - "type": "integer" + "description": { + "type": "string" }, - "q": { + "id": { "type": "string" }, - "sort": { + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "ft.articleResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/ft.ArticleResponse" + "in_stock": { + "type": "boolean" }, - "msg": { - "example": "OK", + "name": { + "type": "string" + }, + "price": { + "type": "number" + }, + "url": { "type": "string" } }, "type": "object" }, - "ft.authorResponseDoc": { + "firstdibs.SearchResponse": { "properties": { - "code": { - "example": 200, + "category": { + "type": "string" + }, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/ft.AuthorResponse" + "facets": { + "$ref": "#/definitions/firstdibs.Facets" }, - "msg": { - "example": "OK", + "page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "products": { + "items": { + "$ref": "#/definitions/firstdibs.Product" + }, + "type": "array" + }, + "query": { + "type": "string" + }, + "source_url": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "ft.categoriesResponseDoc": { + "firstdibs.categoriesDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ft.CategoriesResponse" + "$ref": "#/definitions/firstdibs.CategoriesResponse" }, "msg": { "example": "OK", @@ -90028,14 +95957,14 @@ }, "type": "object" }, - "ft.headlinesResponseDoc": { + "firstdibs.designersDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ft.HeadlinesResponse" + "$ref": "#/definitions/firstdibs.DesignersResponse" }, "msg": { "example": "OK", @@ -90044,14 +95973,14 @@ }, "type": "object" }, - "ft.newsResponseDoc": { + "firstdibs.productDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ft.NewsResponse" + "$ref": "#/definitions/firstdibs.Detail" }, "msg": { "example": "OK", @@ -90060,14 +95989,14 @@ }, "type": "object" }, - "ft.searchResponseDoc": { + "firstdibs.searchDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ft.SearchResponse" + "$ref": "#/definitions/firstdibs.SearchResponse" }, "msg": { "example": "OK", @@ -90076,1608 +96005,1460 @@ }, "type": "object" }, - "fussballde.AmateurStatRow": { + "fiveguys.DayHours": { "properties": { - "away": { - "$ref": "#/definitions/fussballde.TeamRef" - }, - "competition_id": { - "type": "string" - }, - "home": { - "$ref": "#/definitions/fussballde.TeamRef" - }, - "league": { - "example": "Kreisliga C", - "type": "string" - }, - "match_id": { - "type": "string" - }, - "player": { - "example": "Dominik Milaszewski", - "type": "string" - }, - "player_id": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "result": { - "example": "0:30", - "type": "string" - }, - "team": { - "$ref": "#/definitions/fussballde.TeamRef" - }, - "team_type": { - "example": "Herren", - "type": "string" + "closed": { + "example": false, + "type": "boolean" }, - "values": { + "open_intervals": { "items": { - "$ref": "#/definitions/fussballde.StatValue" + "$ref": "#/definitions/fiveguys.TimeInterval" }, "type": "array" } }, "type": "object" }, - "fussballde.AmateurStatsResponse": { + "fiveguys.DirectoryChild": { "properties": { - "count": { - "type": "integer" + "city": { + "description": "City/Region are set only on a store-level child.", + "example": "Chicago", + "type": "string" }, - "federation_id": { + "geomodifier": { + "description": "Geomodifier is the per-restaurant area/plaza label, set only on a\nstore-level child (e.g. \"Medical District\").", + "example": "Medical District", "type": "string" }, - "final": { + "is_location": { + "description": "IsLocation marks a child that is a restaurant rather than another\ndirectory level -- call GET /fiveguys/store with its path.", "example": false, "type": "boolean" }, - "limit": { - "type": "integer" - }, - "offset": { + "location_count": { + "description": "LocationCount is how many restaurants sit under this branch, as Yext\nreports it. Absent at the deepest level, where children are\nrestaurants themselves.", + "example": 38, "type": "integer" }, - "rows": { - "items": { - "$ref": "#/definitions/fussballde.AmateurStatRow" - }, - "type": "array" - }, - "season": { + "name": { + "description": "Name is the state or city name. Empty on a store-level child, whose\nname is always the generic brand name -- read Geomodifier there.", + "example": "Illinois", "type": "string" }, - "stat": { + "path": { + "example": "il", "type": "string" }, - "stat_name": { + "region": { + "example": "IL", "type": "string" }, - "team_type": { + "url": { + "example": "https://restaurants.fiveguys.com/il", "type": "string" } }, "type": "object" }, - "fussballde.ClubDetail": { + "fiveguys.DirectoryCrumb": { "properties": { - "club_id": { - "type": "string" - }, - "federation": { - "type": "string" - }, - "federation_id": { - "type": "string" - }, - "junior_team_count": { - "type": "integer" - }, "name": { - "example": "Borussia Dortmund", - "type": "string" - }, - "profile": { - "items": { - "$ref": "#/definitions/fussballde.FactRow" - }, - "type": "array" - }, - "season": { - "example": "2627", + "example": "Illinois", "type": "string" }, - "senior_team_count": { - "type": "integer" - }, - "team_count": { - "type": "integer" - }, - "teams": { - "items": { - "$ref": "#/definitions/fussballde.ClubTeam" - }, - "type": "array" - }, - "url": { + "path": { + "description": "Path feeds GET /fiveguys/directory's path. Empty on the root crumb,\nwhich is that endpoint's own default (omit path for the root).", + "example": "il", "type": "string" } }, "type": "object" }, - "fussballde.ClubHit": { + "fiveguys.DirectoryResponse": { "properties": { - "city": { - "example": "Dortmund", - "type": "string" + "children": { + "items": { + "$ref": "#/definitions/fiveguys.DirectoryChild" + }, + "type": "array" }, - "club_id": { - "example": "00ES8GN8N400008VVV0AG08LVUPGND5I", - "type": "string" + "count": { + "example": 34, + "type": "integer" }, - "logo_url": { + "fetched_at": { + "example": "2026-09-05T12:00:00Z", "type": "string" }, "name": { - "example": "Borussia Dortmund", + "example": "Illinois", "type": "string" }, - "postal_code": { - "example": "44139", + "path": { + "example": "il", "type": "string" }, - "url": { + "source_url": { + "example": "https://restaurants.fiveguys.com/il", "type": "string" } }, "type": "object" }, - "fussballde.ClubMatchesResponse": { + "fiveguys.FAQCategoriesResponse": { "properties": { - "club_id": { - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/fiveguys.FAQCategory" + }, + "type": "array" }, "count": { + "example": 17, "type": "integer" }, - "date_from": { - "type": "string" - }, - "date_to": { + "fetched_at": { "type": "string" }, - "final": { - "type": "boolean" - }, - "kind": { + "source_url": { "type": "string" - }, - "limit": { - "type": "integer" - }, - "matches": { - "items": { - "$ref": "#/definitions/fussballde.MatchRow" - }, - "type": "array" - }, - "offset": { - "type": "integer" } }, "type": "object" }, - "fussballde.ClubSearchResponse": { + "fiveguys.FAQCategory": { "properties": { - "clubs": { - "items": { - "$ref": "#/definitions/fussballde.ClubHit" - }, - "type": "array" - }, - "count": { - "type": "integer" - }, - "final": { - "example": false, - "type": "boolean" - }, - "limit": { + "entry_count": { + "description": "EntryCount is how many published FAQ entries carry this category, as\nreported by WordPress's own term counter.", + "example": 34, "type": "integer" }, - "offset": { + "id": { + "example": 21, "type": "integer" }, - "place": { + "name": { + "example": "Menu", "type": "string" }, - "text": { + "slug": { + "example": "menu", "type": "string" - }, - "total": { - "example": 102, - "type": "integer" } }, "type": "object" }, - "fussballde.ClubTeam": { + "fiveguys.FAQEntry": { "properties": { - "competition": { + "answer": { "type": "string" }, - "competition_id": { + "answer_html": { "type": "string" }, - "competition_type": { - "example": "Freundschaftsspiele", - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/fiveguys.TaxonomyRef" + }, + "type": "array" }, - "name": { - "example": "Herren - Borussia Dortmund", + "id": { + "example": 4817, + "type": "integer" + }, + "modified_at": { + "example": "2026-06-30T20:29:34Z", "type": "string" }, - "team_id": { + "page_url": { "type": "string" }, - "team_type": { - "example": "Herren", + "question": { + "example": "I'm writing a story about Five Guys. Who should I contact?", "type": "string" }, - "url": { + "slug": { + "example": "im-writing-a-story-about-five-guys-who-should-i-contact", "type": "string" } }, "type": "object" }, - "fussballde.ComparisonRow": { + "fiveguys.FAQResponse": { "properties": { - "away": { - "example": "50", - "type": "string" + "entries": { + "items": { + "$ref": "#/definitions/fiveguys.FAQEntry" + }, + "type": "array" }, - "home": { - "example": "50", + "fetched_at": { "type": "string" }, - "label": { - "example": "Duelle", + "pagination": { + "$ref": "#/definitions/fiveguys.pagination" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "fussballde.CompetitionLink": { + "fiveguys.Location": { "properties": { - "id": { - "type": "string" + "address": { + "$ref": "#/definitions/fiveguys.LocationAddress" }, - "kind": { - "example": "Meisterschaft", - "type": "string" + "delivery_hours": { + "allOf": [ + { + "$ref": "#/definitions/fiveguys.WeeklyHours" + } + ], + "description": "DeliveryHours is this location's delivery-order cutoff schedule, kept\nseparate from Hours (in-store hours) because Yext publishes the two\nindependently and they can differ -- confirmed live 2026-09-05: a\nChicago location open in-store until midnight cuts delivery off at\n23:45. Nil when Yext has not published a delivery schedule for this\nlocation (e.g. it does not offer delivery)." }, - "name": { - "example": "Bundesliga", + "delivery_url": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "fussballde.CompetitionOptionsResponse": { - "properties": { - "competition_type": { - "example": "1", - "type": "string" + "distance_kilometers": { + "example": 0.74, + "type": "number" }, - "federation_id": { - "example": "89", - "type": "string" + "distance_miles": { + "description": "DistanceMiles/DistanceKilometers are measured from the resolved\nsearch center -- the coordinate GET /fiveguys/nearby was given, or\nthe location GET /fiveguys/search's `query` text resolved to.", + "example": 0.46, + "type": "number" }, - "season": { - "example": "2627", + "geomodifier": { + "description": "Geomodifier is Yext's short area/plaza descriptor for this location\n(e.g. \"Michigan Ave\", \"Medical District\") -- every location's Name is\nthe generic brand name \"Five Guys\", so Geomodifier is the field that\nactually distinguishes one result from another the way\nrestaurants.fiveguys.com's own location pages title themselves\n(\"Five Guys Medical District\"). Empty when Yext has not published one.", + "example": "Michigan Ave", "type": "string" }, - "team_types": { - "items": { - "$ref": "#/definitions/fussballde.TeamTypeOption" - }, - "type": "array" - } - }, - "type": "object" - }, - "fussballde.CompetitionRef": { - "properties": { - "area_id": { + "google_place_id": { + "description": "GooglePlaceID is this location's Google Places identifier, when Yext\nhas published one, matching this repo's other Yext-family locators.", + "example": "ChIJHTEJ8EgtDogRepA4KPyvUCU", "type": "string" }, + "hours": { + "$ref": "#/definitions/fiveguys.WeeklyHours" + }, "id": { - "example": "031BFREJC800001BVS5489BUVUR5FS5A-G", + "description": "ID is Yext's internal entity id for this restaurant.", + "example": "4020", "type": "string" }, - "league_id": { - "example": "1", + "latitude": { + "description": "Latitude/Longitude are Yext's display coordinate (rooftop-accurate\npin location), falling back to the raw geocoded coordinate when Yext\nhas not published a display override.", + "example": 41.885572, + "type": "number" + }, + "longitude": { + "example": -87.624864, + "type": "number" + }, + "menu_url": { "type": "string" }, "name": { - "example": "Bundesliga", + "example": "Five Guys", "type": "string" }, - "url": { + "order_url": { + "description": "OrderURL and DeliveryURL point at order.fiveguys.com, which this\nrepo cannot reach (confirmed hard wall -- see service.go); they are\nstill published here since Five Guys publishes them and a caller may\nwant to hand the URL to an end user.", "type": "string" - } - }, - "type": "object" - }, - "fussballde.CompetitionsResponse": { - "properties": { - "area": { + }, + "path": { + "description": "Path is the restaurants.fiveguys.com slug for this location.", + "example": "180-n-michigan-ave", "type": "string" }, - "competition_type": { + "phone": { + "example": "+13122919686", "type": "string" }, - "competitions": { + "pickup_and_delivery_services": { + "description": "PickupAndDeliveryServices are Five Guys' own fulfillment-channel\nlabels, e.g. \"In-Store Pickup\".", "items": { - "$ref": "#/definitions/fussballde.CompetitionRef" + "type": "string" }, "type": "array" }, - "federation_id": { + "price_range": { + "example": "$", "type": "string" }, - "league": { - "type": "string" + "services": { + "description": "Services are Five Guys' own restaurant-amenity labels for this\nlocation, e.g. \"Takeout\", \"Dine In\", \"Curbside\", \"Mobile Ordering\".", + "items": { + "type": "string" + }, + "type": "array" }, - "season": { + "timezone": { + "example": "America/Chicago", "type": "string" }, - "team_type": { + "website_url": { + "example": "https://restaurants.fiveguys.com/180-n-michigan-ave", "type": "string" } }, "type": "object" }, - "fussballde.FactRow": { + "fiveguys.LocationAddress": { "properties": { - "label": { - "example": "Gründungsjahr", + "city": { + "example": "Chicago", "type": "string" }, - "url": { + "country": { + "example": "US", "type": "string" }, - "value": { - "example": "1909", + "line1": { + "example": "180 N Michigan Ave", "type": "string" - } - }, - "type": "object" - }, - "fussballde.Federation": { - "properties": { - "id": { - "example": "89", + }, + "line2": { "type": "string" }, - "name": { - "example": "Deutschland", + "postal_code": { + "example": "60601", + "type": "string" + }, + "region": { + "example": "IL", "type": "string" } }, "type": "object" }, - "fussballde.FederationDetail": { + "fiveguys.MenuCategory": { "properties": { - "federation_id": { - "example": "21", + "description": { + "description": "Description is fiveguys.com's own short category blurb (e.g. \"Fresh,\nhand-formed patties hot off the grill with as many toppings as you'd\nlike.\"), distinct from Name (the page's long SEO title) and from any\none item's own Description.", + "example": "Fresh, hand-formed patties hot off the grill with as many toppings as you'd like.", "type": "string" }, - "name": { - "example": "Fußball- und Leichtathletik-Verband Westfalen", + "image_url": { + "description": "ImageURL is this category's own hero/cover image, resolved from the\nsite's WordPress media library. Empty when the category has none set.", "type": "string" }, - "news": { - "items": { - "$ref": "#/definitions/fussballde.NewsItem" - }, - "type": "array" - }, - "profile": { + "items": { "items": { - "$ref": "#/definitions/fussballde.FactRow" + "$ref": "#/definitions/fiveguys.MenuItem" }, "type": "array" }, - "regional_association": { - "example": "west", + "modified_at": { + "description": "ModifiedAt is fiveguys.com's own last-modified timestamp for this\ncategory's content (UTC, RFC3339), when published.", + "example": "2026-04-16T18:10:38Z", "type": "string" }, - "summary": { - "items": { - "$ref": "#/definitions/fussballde.FactRow" - }, - "type": "array" + "name": { + "example": "Burger Menu: Hamburgers, Cheeseburgers, and more", + "type": "string" }, - "url": { + "slug": { + "example": "burgers", "type": "string" }, - "verband_id": { - "example": "0123456789ABCDEF0123456700004130", + "source_url": { + "description": "SourceURL is the live fiveguys.com page this category's content mirrors.", + "example": "https://www.fiveguys.com/menu/burgers/", "type": "string" } }, "type": "object" }, - "fussballde.FiltersResponse": { + "fiveguys.MenuItem": { "properties": { - "competition_types": { - "additionalProperties": { - "additionalProperties": { - "items": { - "$ref": "#/definitions/fussballde.Option" - }, - "type": "array" - }, - "type": "object" - }, - "type": "object" + "calories": { + "allOf": [ + { + "$ref": "#/definitions/fiveguys.MenuItemCalories" + } + ], + "description": "Calories is nil when fiveguys.com does not publish a figure for this\nitem -- genuinely absent for drink categories (Coca-Cola Freestyle,\nDr Pepper, Bottled Drinks) and a couple of build-your-own items (e.g.\n\"Burger Bowl\"), not parser drift." }, - "current_season": { - "example": "2627", + "description": { + "description": "Description is fiveguys.com's own marketing copy for the item, exactly\nas published (may mention e.g. \"Available at select locations.\").", + "example": "Fresh, hand-formed patties hot off the grill and placed on a soft, toasted sesame seed bun. Add as many toppings as you want.", "type": "string" }, - "default_competition_type": { - "example": "1", + "image_url": { "type": "string" }, - "federations": { - "items": { - "$ref": "#/definitions/fussballde.Federation" - }, - "type": "array" + "name": { + "example": "Hamburger", + "type": "string" }, - "seasons": { - "additionalProperties": { - "items": { - "$ref": "#/definitions/fussballde.Option" - }, - "type": "array" - }, - "type": "object" + "slug": { + "example": "hamburger", + "type": "string" } }, "type": "object" }, - "fussballde.GoalEntry": { + "fiveguys.MenuItemCalories": { "properties": { - "minute": { - "example": 80, + "max": { + "example": 1100, "type": "integer" }, - "player": { - "example": "Daniel Jonathan Svensson", - "type": "string" - }, - "stoppage_minute": { - "example": 2, + "min": { + "example": 530, "type": "integer" + }, + "text": { + "example": "530-1100", + "type": "string" } }, "type": "object" }, - "fussballde.LeagueOption": { + "fiveguys.MenuResponse": { "properties": { - "areas": { + "categories": { "items": { - "$ref": "#/definitions/fussballde.Option" + "$ref": "#/definitions/fiveguys.MenuCategory" }, "type": "array" }, - "id": { - "example": "1", + "count": { + "description": "Count is the total item count across every returned category.", + "example": 53, + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "name": { - "example": "Bundesliga", + "source_url": { "type": "string" } }, "type": "object" }, - "fussballde.MatchCalendarResponse": { + "fiveguys.NearbyResponse": { "properties": { "count": { + "example": 10, "type": "integer" }, - "date_from": { - "type": "string" - }, - "date_to": { + "fetched_at": { "type": "string" }, - "matches": { + "locations": { "items": { - "$ref": "#/definitions/fussballde.MatchRow" + "$ref": "#/definitions/fiveguys.Location" }, "type": "array" }, - "postal_code": { + "radius": { + "example": 25, + "type": "integer" + }, + "source_url": { "type": "string" }, - "truncated": { - "example": false, - "type": "boolean" + "total_results": { + "description": "TotalResults is how many restaurants fall inside the radius overall,\nusually more than one page. Use it with offset to page.", + "example": 18, + "type": "integer" } }, "type": "object" }, - "fussballde.MatchComparisonResponse": { + "fiveguys.NutritionGuideResponse": { "properties": { - "match_id": { + "content_type": { + "description": "ContentType, SizeBytes and LastModified are read from PDFURL's own\nresponse headers, best-effort -- a failure fetching them does not fail\nthe whole response, since PDFURL is the primary result.", + "example": "application/pdf", "type": "string" }, - "meetings": { - "items": { - "$ref": "#/definitions/fussballde.MatchRow" - }, - "type": "array" - }, - "rows": { - "items": { - "$ref": "#/definitions/fussballde.ComparisonRow" - }, - "type": "array" - }, - "view": { + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "fussballde.MatchDetail": { - "properties": { - "assistants": { - "items": { - "type": "string" - }, - "type": "array" - }, - "away": { - "$ref": "#/definitions/fussballde.TeamRef" - }, - "away_goals": { - "items": { - "$ref": "#/definitions/fussballde.GoalEntry" - }, - "type": "array" - }, - "away_score": { - "type": "integer" }, - "competition": { - "example": "Bundesliga", + "last_modified": { + "example": "2026-09-02T14:06:41Z", "type": "string" }, - "competition_id": { + "link_text": { + "description": "LinkText is the visible link text PDFURL was found under, when more\nthan one link on the page pointed at it.", + "example": "Nutrition & Allergen PDF", "type": "string" }, - "date": { - "example": "2026-10-09", + "page_url": { + "description": "PageURL is the fiveguys.com page PDFURL was discovered on.", + "example": "https://www.fiveguys.com/nutritional-allergy-information/", "type": "string" }, - "events": { - "items": { - "$ref": "#/definitions/fussballde.MatchEvent" - }, - "type": "array" - }, - "fourth_official": { + "pdf_url": { + "description": "PDFURL is the current nutrition & allergen guide's direct download\nlink, resolved live -- its path changes when fiveguys.com republishes\nthe guide (observed monthly).", + "example": "https://www.fiveguys.com/wp-content/uploads/2026/09/Five-Guys-US-Nutrition-Allergen-Guide-English-September-2026.pdf", "type": "string" }, - "halftime_score": { - "example": "0 : 0", + "size_bytes": { + "example": 172740, + "type": "integer" + } + }, + "type": "object" + }, + "fiveguys.OrderingCalendar": { + "properties": { + "label": { + "description": "Label is the platform's display label when it publishes one, e.g.\n\"Delivery\".", + "example": "Delivery", "type": "string" }, - "home": { - "$ref": "#/definitions/fussballde.TeamRef" - }, - "home_goals": { + "ranges": { "items": { - "$ref": "#/definitions/fussballde.GoalEntry" + "$ref": "#/definitions/fiveguys.OrderingCalendarRange" }, "type": "array" }, - "home_score": { - "type": "integer" - }, - "id": { + "type": { + "description": "Type is the ordering platform's own calendar type, e.g. \"business\",\n\"dispatch\".", + "example": "business", "type": "string" - }, - "match_number": { + } + }, + "type": "object" + }, + "fiveguys.OrderingCalendarRange": { + "properties": { + "end": { + "example": "20260906 23:00", "type": "string" }, - "matchday": { - "example": "5. Spieltag", + "start": { + "description": "Start and End are published as \"YYYYMMDD HH:MM\" in the store's own\nlocal time, passed through unchanged rather than reinterpreted into\na timezone this API would have to guess.", + "example": "20260906 10:00", "type": "string" }, - "note": { - "description": "Note is the site's own marker, such as nE or Absetzung.", - "example": "nE", + "weekday": { + "example": "Sun", "type": "string" + } + }, + "type": "object" + }, + "fiveguys.OrderingFulfillment": { + "properties": { + "calories_displayed": { + "example": true, + "type": "boolean" }, - "referee": { - "type": "string" + "coupons": { + "example": true, + "type": "boolean" }, - "result_qualifier": { - "description": "ResultQualifier says how a result was reached when it was not simply played out.", - "enum": [ - "after_extra_time", - "after_penalties", - "awarded", - "court_ruling", - "administrative_decision", - "test_match" - ], - "example": "after_penalties", - "type": "string" + "curbside": { + "example": false, + "type": "boolean" }, - "spectators": { - "type": "string" + "delivery": { + "example": false, + "type": "boolean" }, - "status": { - "enum": [ - "finished", - "scheduled", - "cancelled", - "annulled", - "abandoned", - "no_show", - "other" - ], - "example": "finished", - "type": "string" + "dine_in": { + "example": false, + "type": "boolean" }, - "time": { - "example": "20:30", - "type": "string" + "dispatch": { + "example": true, + "type": "boolean" }, - "url": { - "type": "string" + "drive_thru": { + "example": false, + "type": "boolean" }, - "venue": { - "type": "string" - } - }, - "type": "object" - }, - "fussballde.MatchEvent": { - "properties": { - "minute": { - "type": "integer" + "group_orders": { + "example": true, + "type": "boolean" }, - "side": { - "example": "home", - "type": "string" + "loyalty": { + "example": false, + "type": "boolean" }, - "type": { - "example": "substitute", - "type": "string" + "pickup": { + "example": true, + "type": "boolean" } }, "type": "object" }, - "fussballde.MatchPlanResponse": { + "fiveguys.OrderingLocation": { "properties": { - "competition_id": { - "type": "string" + "address": { + "$ref": "#/definitions/fiveguys.LocationAddress" }, - "count": { + "advance_only": { + "description": "AdvanceOnly marks a store that takes only scheduled orders, never ASAP.", + "type": "boolean" + }, + "advance_order_days": { + "description": "AdvanceOrderDays is how many days ahead an order may be scheduled.", + "example": 7, "type": "integer" }, - "matches": { - "items": { - "$ref": "#/definitions/fussballde.MatchRow" - }, - "type": "array" + "availability_message": { + "type": "string" }, - "rounds": { - "description": "Rounds lists the rounds of a cup or tournament; pass a round id as competition_id to read that round alone.", + "calendars": { + "description": "Calendars are this store's dated operating windows, present only\nwhen include_hours was requested. Unlike the weekly recurring\nschedule GET /fiveguys/search and /fiveguys/nearby publish, these\nare concrete dated ranges, so they reflect holiday and special\nhours a recurring schedule cannot express.", "items": { - "$ref": "#/definitions/fussballde.RoundRef" + "$ref": "#/definitions/fiveguys.OrderingCalendar" }, "type": "array" }, - "title": { + "customer_message": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "fussballde.MatchRow": { - "properties": { - "away": { - "$ref": "#/definitions/fussballde.TeamRef" + "delivery_fee": { + "description": "Ordering economics, in the store's own currency. DeliveryFee and the\nminimums are published as 0 when the store sets none.", + "example": 0, + "type": "number" }, - "away_score": { - "type": "integer" + "distance_miles": { + "description": "DistanceMiles is measured from the requested coordinate.", + "example": 0.4, + "type": "number" }, - "competition": { - "example": "Bundesliga", - "type": "string" + "fulfillment": { + "allOf": [ + { + "$ref": "#/definitions/fiveguys.OrderingFulfillment" + } + ], + "description": "Fulfillment is what the ordering platform will actually accept for\nthis store right now. This is a different thing from the locator's\namenity labels (GET /fiveguys/search's `services`), which describe\nwhat the restaurant offers in general -- these describe what an order\nplaced now could use." }, - "date": { - "example": "2026-10-09", + "id": { + "description": "ID is the ordering platform's restaurant id.", + "example": "23841", "type": "string" }, - "home": { - "$ref": "#/definitions/fussballde.TeamRef" + "is_available": { + "description": "IsAvailable reports whether the ordering platform is currently\naccepting orders for this restaurant at all. AvailabilityMessage and\nCustomerMessage carry the store's own explanation when it publishes\none (e.g. a delivery caveat, a temporary notice).", + "example": true, + "type": "boolean" }, - "home_score": { - "type": "integer" + "latitude": { + "description": "Latitude/Longitude come from the ordering platform's own record.", + "example": 30.396, + "type": "number" }, - "id": { - "example": "031BFTHDCC000000VS5489BUVUR5FS5A", - "type": "string" + "longitude": { + "example": -97.72, + "type": "number" }, - "league": { - "example": "Kreisfreundschaftsspiele", - "type": "string" + "minimum_delivery_order": { + "example": 15, + "type": "number" }, - "match_number": { - "example": "037", - "type": "string" + "minimum_pickup_order": { + "example": 0, + "type": "number" }, - "note": { - "description": "Note is the site's own marker, such as nE or Absetzung.", - "example": "nE", + "name": { + "description": "Name is the ordering platform's per-store label (\"Five Guys Fig @ 7th\nDowntown LA\"), unlike the locator's generic \"Five Guys\".", + "example": "Five Guys Austin Arbor", "type": "string" }, - "result_qualifier": { - "description": "ResultQualifier says how a result was reached when it was not simply played out.", - "enum": [ - "after_extra_time", - "after_penalties", - "awarded", - "court_ruling", - "administrative_decision", - "test_match" - ], - "example": "after_penalties", + "order_url": { + "description": "OrderURL is the ordering platform's own menu/order page for this\nstore. Note it is hosted on a domain this API cannot itself read (see\nthe endpoint description) -- it is published for handing to an end\nuser, not for further scraping.", "type": "string" }, - "round": { - "description": "Round is the round of a cup or tournament match, such as 1. Hauptrunde.", - "example": "2. Hauptrunde", + "phone": { + "example": "(512) 719-3300", "type": "string" }, - "status": { - "enum": [ - "finished", - "scheduled", - "cancelled", - "annulled", - "abandoned", - "no_show", - "other" - ], - "example": "finished", + "slug": { + "example": "five-guys-656", "type": "string" }, - "team_type": { - "example": "D-Junioren", + "store_number": { + "description": "StoreNumber is Five Guys' own internal store number.", + "example": "656", "type": "string" }, - "time": { - "example": "20:30", - "type": "string" + "supported_time_modes": { + "description": "SupportedTimeModes are the ordering platform's own labels, e.g.\n\"asap\", \"advance\".", + "items": { + "type": "string" + }, + "type": "array" }, - "url": { - "type": "string" + "utc_offset": { + "description": "UTCOffset is the store's current offset in hours.", + "example": -7, + "type": "number" } }, "type": "object" }, - "fussballde.MatchdayResponse": { + "fiveguys.OrderingLocationsResponse": { "properties": { - "competition_id": { - "type": "string" - }, "count": { + "example": 3, "type": "integer" }, - "date": { + "fetched_at": { + "example": "2026-09-06T12:00:00Z", "type": "string" }, - "matchday": { - "example": 7, - "type": "integer" - }, - "matchday_count": { - "example": 34, - "type": "integer" - }, - "matches": { - "items": { - "$ref": "#/definitions/fussballde.MatchRow" - }, - "type": "array" - }, - "rounds": { - "description": "Rounds lists the rounds of a cup or tournament; pass a round id as competition_id to read that round.", + "locations": { "items": { - "$ref": "#/definitions/fussballde.RoundRef" + "$ref": "#/definitions/fiveguys.OrderingLocation" }, "type": "array" }, - "title": { - "type": "string" + "radius": { + "example": 20, + "type": "integer" }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "fussballde.NationalScorer": { + "fiveguys.OrderingMenuCategory": { "properties": { - "club": { - "example": "VfB Oldenburg", - "type": "string" - }, - "club_id": { - "type": "string" - }, - "goals": { - "type": "integer" - }, - "matches": { - "type": "integer" - }, - "name": { - "example": "Mats Facklam", + "description": { "type": "string" }, - "player_id": { + "id": { + "example": "87071", "type": "string" }, - "position": { - "type": "integer" - } - }, - "type": "object" - }, - "fussballde.NationalTopScorersResponse": { - "properties": { - "levels": { + "items": { "items": { - "$ref": "#/definitions/fussballde.ScorerLevel" + "$ref": "#/definitions/fiveguys.OrderingMenuItem" }, "type": "array" }, - "note": { + "name": { + "example": "Burgers", "type": "string" }, - "team_type": { + "slug": { + "example": "burgers", "type": "string" } }, "type": "object" }, - "fussballde.NewsArticle": { + "fiveguys.OrderingMenuItem": { "properties": { - "category": { - "type": "string" + "available_always": { + "type": "boolean" }, - "date": { - "type": "string" + "available_now": { + "description": "AvailableNow and AvailableAlways report the platform's own live\navailability for this item at this store, independent of the store's\nown open/closed state -- an item can be permanently 86'd\n(AvailableAlways false, AvailableNow false) or time-boxed to certain\nhours (AvailableAlways false, AvailableNow reflecting the current\ntime).", + "type": "boolean" }, - "id": { + "calories": { + "$ref": "#/definitions/fiveguys.OrderingMenuItemCalories" + }, + "cost": { + "description": "Cost is the item's price in the store's own currency, exactly as\npublished -- this is the field every other Five Guys endpoint in this\nfamily cannot surface (see the package doc's pricing section).", + "example": 11.79, + "type": "number" + }, + "description": { "type": "string" }, - "image_caption": { + "id": { + "example": "1883259", "type": "string" }, "image_url": { "type": "string" }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" - }, - "time": { + "name": { + "example": "Hamburger", "type": "string" }, - "title": { + "short_description": { "type": "string" }, - "url": { + "slug": { + "example": "hamburger", "type": "string" } }, "type": "object" }, - "fussballde.NewsItem": { + "fiveguys.OrderingMenuItemCalories": { "properties": { - "category": { - "example": "Magazin", - "type": "string" - }, - "date": { - "example": "2026-10-22", - "type": "string" - }, - "excerpt": { - "type": "string" - }, - "id": { - "example": "10067512", - "type": "string" - }, - "time": { - "example": "14:00", - "type": "string" - }, - "title": { - "type": "string" + "max": { + "example": 840, + "type": "integer" }, - "url": { - "type": "string" + "min": { + "example": 840, + "type": "integer" } }, "type": "object" }, - "fussballde.NewsResponse": { + "fiveguys.OrderingMenuResponse": { "properties": { - "count": { - "type": "integer" - }, - "final": { - "example": false, - "type": "boolean" - }, - "items": { + "categories": { "items": { - "$ref": "#/definitions/fussballde.NewsItem" + "$ref": "#/definitions/fiveguys.OrderingMenuCategory" }, "type": "array" }, - "limit": { + "count": { + "description": "Count is the total item count across every returned category.", + "example": 36, "type": "integer" }, - "offset": { - "type": "integer" + "fetched_at": { + "example": "2026-09-06T12:00:00Z", + "type": "string" }, - "stream": { + "id": { + "description": "ID echoes the requested ordering-platform restaurant id.", + "example": "23841", + "type": "string" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "fussballde.NewsSearchResponse": { + "fiveguys.SearchResponse": { "properties": { - "channel": { - "type": "string" - }, "count": { + "example": 10, "type": "integer" }, - "final": { - "example": false, - "type": "boolean" + "fetched_at": { + "type": "string" }, - "items": { + "locations": { "items": { - "$ref": "#/definitions/fussballde.NewsItem" + "$ref": "#/definitions/fiveguys.Location" }, "type": "array" }, - "limit": { - "type": "integer" - }, - "offset": { - "type": "integer" + "query": { + "example": "Chicago, IL", + "type": "string" }, - "q": { + "source_url": { "type": "string" }, - "total": { - "example": 1974, + "total_results": { + "description": "TotalResults is how many restaurants matched overall, usually more\nthan one page. Use it with offset to page.", + "example": 18, "type": "integer" } }, "type": "object" }, - "fussballde.Option": { + "fiveguys.StoreFAQEntry": { "properties": { - "id": { - "example": "2627", + "answer": { "type": "string" }, - "name": { - "example": "26/27", + "question": { + "example": "What are the operating hours of Five Guys in the Medical District?", "type": "string" } }, "type": "object" }, - "fussballde.PlayerAppearance": { + "fiveguys.StorePhoto": { "properties": { - "goals": { - "type": "integer" + "alternate_text": { + "description": "AlternateText is the image's accessibility text, when published.", + "type": "string" }, - "match": { - "$ref": "#/definitions/fussballde.MatchRow" + "description": { + "description": "Description is Yext's caption for the image, when published.", + "example": "A close-up view of regular order of Five Guys fries.", + "type": "string" }, - "minutes": { + "height": { + "example": 800, "type": "integer" }, - "subbed_in_minute": { - "type": "integer" + "url": { + "example": "https://a.mktgcdn.com/p/example/1200x800.jpg", + "type": "string" }, - "subbed_out_minute": { + "width": { + "example": 1200, "type": "integer" } }, "type": "object" }, - "fussballde.PlayerDetail": { + "fiveguys.StoreProfile": { "properties": { - "birth_date": { - "example": "1993-02-09", - "type": "string" - }, - "facts": { - "items": { - "$ref": "#/definitions/fussballde.FactRow" - }, - "type": "array" - }, - "name": { - "example": "Niclas Füllkrug", + "directory_listing_url": { + "description": "DirectoryListingURL is the location's page on Yext's public\nlocation.com directory.", "type": "string" }, - "player_id": { + "facebook_store_id": { "type": "string" }, - "profile_type": { - "example": "full", + "facebook_vanity_url": { + "description": "FacebookVanityURL is this location's own Facebook vanity handle (e.g.\n\"FiveGuysChicagoIL\"), distinct per location -- unlike the brand-wide\nfacebookPageUrl/instagramHandle/twitterHandle this family already\nchecked and excluded. Sparse: some locations publish none.", "type": "string" }, - "stats": { + "faq": { + "description": "FAQ is this restaurant's own auto-generated question set -- its\naddress, hours, reservation policy and services answered for this\nspecific store (\"What are the operating hours of Five Guys in the\nMedical District?\"). Confirmed distinct across every sampled\nlocation, unlike the brand-level FAQ corpus, which is national and\nalready served in full by GET /fiveguys/faq.", "items": { - "$ref": "#/definitions/fussballde.StatEntry" + "$ref": "#/definitions/fiveguys.StoreFAQEntry" }, "type": "array" }, - "stats_season": { - "example": "26/27", - "type": "string" - }, - "team": { - "example": "SV Werder Bremen", - "type": "string" - }, - "team_id": { - "type": "string" - }, - "team_type": { - "example": "Herren", - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "fussballde.PlayerHit": { - "properties": { - "birth_date": { - "example": "1993-02-09", + "featured_message": { + "description": "FeaturedMessage is the store's current promotional message, when it\npublishes one (e.g. \"Try our fan-favorite Patty Melt today!\").", "type": "string" }, - "name": { - "example": "Niclas Füllkrug", + "featured_message_url": { "type": "string" }, - "player_id": { - "example": "01MH0AKR7C000007VV0AG13EVSFDFGE6", + "franchisee_group": { + "description": "FranchiseeGroup is the operator of this specific restaurant --\ncorporate-owned locations publish a short internal code (\"FGO\");\nfranchised locations publish the franchisee's own company name (e.g.\n\"Bighorn Five Guys Acquisitions\", \"Evergreen Burgers, Inc.\"). Not\nexposed anywhere else in this family. Confirmed genuinely\nper-location across a multi-state live sample, unlike most of this\nentity's other social/brand fields.", "type": "string" }, - "team": { - "example": "SV Werder Bremen", - "type": "string" + "google_attributes": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "description": "GoogleAttributes are Yext's structured amenity flags as published to\nGoogle, e.g. \"has_takeout\", \"has_delivery\", \"wheelchair_accessible_\nentrance\". Richer and more machine-readable than the display labels\non Location.Services, and confirmed to differ between locations.", + "type": "object" }, - "team_type": { - "example": "Herren", + "google_cid": { + "description": "GoogleCID and FacebookStoreID are this location's ids on those\nplatforms -- useful for joining against external datasets. Both\nconfirmed distinct per location.", "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "fussballde.PlayerMatchesResponse": { - "properties": { - "appearances": { + "meals_served": { + "description": "MealsServed are the dayparts this location serves, e.g. \"LUNCH\".", "items": { - "$ref": "#/definitions/fussballde.PlayerAppearance" + "type": "string" }, "type": "array" }, - "competition": { - "example": "SV Werder Bremen (Herren), Bundesliga", - "type": "string" - }, - "competitions": { + "payment_options": { + "description": "PaymentOptions are accepted payment methods, e.g. \"APPLEPAY\", \"CASH\".", "items": { - "$ref": "#/definitions/fussballde.Option" + "type": "string" }, "type": "array" }, - "count": { - "type": "integer" + "permanently_closed": { + "description": "PermanentlyClosed reports Yext's own closed flag for this location.", + "type": "boolean" }, - "player_id": { + "review_invite_url": { "type": "string" }, - "season": { + "review_page_url": { + "description": "ReviewPageURL and ReviewInviteURL are this restaurant's own\nfirst-party review pages, distinct per location.", "type": "string" }, - "team_id": { - "type": "string" + "routable_latitude": { + "description": "RoutableLatitude/RoutableLongitude are Yext's driving-destination\ncoordinate, which differs from the display pin (Location.Latitude)\n-- use it for routing, not for map placement.", + "type": "number" }, - "teams": { + "routable_longitude": { + "type": "number" + }, + "services": { + "description": "Services are Yext's plain service labels (\"Dine-In\", \"Takeout\"),\npublished separately from Location.Services' amenity labels.", "items": { - "$ref": "#/definitions/fussballde.Option" + "type": "string" }, "type": "array" } }, "type": "object" }, - "fussballde.PlayerSearchResponse": { + "fiveguys.StoreResponse": { "properties": { - "count": { - "type": "integer" - }, - "final": { - "example": false, - "type": "boolean" + "breadcrumbs": { + "description": "Breadcrumbs is the directory trail from the root down to this\nrestaurant, outermost first. Each entry's Path feeds straight back\ninto GET /fiveguys/directory, so a caller landing on a store can\nnavigate back up without a second lookup. The Answers API publishes\na trail too, but with entity ids and no slugs -- only these page\ndocuments carry a usable path, which is why this is store-only.", + "items": { + "$ref": "#/definitions/fiveguys.DirectoryCrumb" + }, + "type": "array" }, - "first_name": { + "description": { + "description": "Description is this restaurant's own published blurb. It is\ntemplated but genuinely per-location (each interpolates its own\nstreet address and city -- confirmed distinct across every sampled\nlocation), unlike the nationally-identical FAQ text this family\ndeliberately does not surface.", "type": "string" }, - "last_name": { + "fetched_at": { + "example": "2026-09-05T12:00:00Z", "type": "string" }, - "limit": { - "type": "integer" - }, - "offset": { - "type": "integer" - }, - "place": { - "type": "string" + "location": { + "$ref": "#/definitions/fiveguys.Location" }, - "players": { + "photos": { + "description": "Photos are this restaurant's own published gallery images. Sparse:\nmany locations publish none, in which case this is omitted.", "items": { - "$ref": "#/definitions/fussballde.PlayerHit" + "$ref": "#/definitions/fiveguys.StorePhoto" }, "type": "array" }, - "total": { - "example": 1067, - "type": "integer" + "profile": { + "allOf": [ + { + "$ref": "#/definitions/fiveguys.StoreProfile" + } + ], + "description": "Profile is extra per-restaurant detail from Yext's Content Delivery\nAPI -- structured Google amenity attributes, per-location review\nlinks, the store's current featured message, external platform ids,\nand a routing coordinate. Populated best-effort: when the lookup\nfails the rest of the response is still returned, since it is\nenrichment rather than core data." + }, + "source_url": { + "example": "https://restaurants.fiveguys.com/703-s-seely-ave", + "type": "string" } }, "type": "object" }, - "fussballde.PositionHistoryResponse": { + "fiveguys.TaxonomyRef": { "properties": { - "competition_id": { - "type": "string" - }, - "matchdays": { + "id": { + "example": 21, "type": "integer" }, - "teams": { - "items": { - "$ref": "#/definitions/fussballde.TeamPositions" - }, - "type": "array" + "name": { + "example": "Menu", + "type": "string" + }, + "slug": { + "example": "menu", + "type": "string" } }, "type": "object" }, - "fussballde.PostalCode": { + "fiveguys.TimeInterval": { "properties": { - "city": { - "example": "Dortmund", - "type": "string" - }, - "district": { - "example": "Mitte", + "end": { + "example": "23:00", "type": "string" }, - "postal_code": { - "example": "44139", + "start": { + "example": "10:00", "type": "string" } }, "type": "object" }, - "fussballde.PostalCodesResponse": { + "fiveguys.WeeklyHours": { "properties": { - "count": { - "type": "integer" + "friday": { + "$ref": "#/definitions/fiveguys.DayHours" }, - "postal_codes": { - "items": { - "$ref": "#/definitions/fussballde.PostalCode" - }, - "type": "array" + "monday": { + "$ref": "#/definitions/fiveguys.DayHours" }, - "q": { - "type": "string" + "saturday": { + "$ref": "#/definitions/fiveguys.DayHours" + }, + "sunday": { + "$ref": "#/definitions/fiveguys.DayHours" + }, + "thursday": { + "$ref": "#/definitions/fiveguys.DayHours" + }, + "tuesday": { + "$ref": "#/definitions/fiveguys.DayHours" + }, + "wednesday": { + "$ref": "#/definitions/fiveguys.DayHours" } }, "type": "object" }, - "fussballde.RoundRef": { + "fiveguys.directoryResponseDoc": { "properties": { - "id": { - "example": "0316JUVAIC000000VS5489BTVU7GTVLE-R", - "type": "string" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "name": { - "example": "2. Hauptrunde", - "type": "string" + "data": { + "$ref": "#/definitions/fiveguys.DirectoryResponse" }, - "open": { - "description": "Open reports whether the page shows the round's matches inline.", - "type": "boolean" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "fussballde.ScorerLevel": { + "fiveguys.faqCategoriesResponseDoc": { "properties": { - "level": { - "example": "Ebene 4", - "type": "string" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "scorers": { - "items": { - "$ref": "#/definitions/fussballde.NationalScorer" - }, - "type": "array" + "data": { + "$ref": "#/definitions/fiveguys.FAQCategoriesResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "fussballde.ScorerRow": { + "fiveguys.faqResponseDoc": { "properties": { - "goals": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "name": { - "example": "Niclas Füllkrug", - "type": "string" - }, - "player_id": { - "type": "string" - }, - "position": { - "type": "integer" + "data": { + "$ref": "#/definitions/fiveguys.FAQResponse" }, - "team": { - "$ref": "#/definitions/fussballde.TeamRef" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "fussballde.SeasonResult": { + "fiveguys.menuResponseDoc": { "properties": { - "competition": { - "example": "Bundesliga / Bundesliga", - "type": "string" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "result": { - "example": "2. PLATZ", - "type": "string" + "data": { + "$ref": "#/definitions/fiveguys.MenuResponse" }, - "season": { - "example": "25/26", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "fussballde.SquadPlayer": { + "fiveguys.nearbyResponseDoc": { "properties": { - "appearances": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "cells": { - "items": { - "type": "string" - }, - "type": "array" - }, - "goals": { - "type": "integer" + "data": { + "$ref": "#/definitions/fiveguys.NearbyResponse" }, - "minutes": { + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "fiveguys.nutritionResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "name": { - "example": "Anton, Waldemar", - "type": "string" + "data": { + "$ref": "#/definitions/fiveguys.NutritionGuideResponse" }, - "player_id": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "fussballde.StandingsRow": { + "fiveguys.orderingLocationsResponseDoc": { "properties": { - "cells": { - "items": { - "type": "string" - }, - "type": "array" - }, - "drawn": { - "type": "integer" - }, - "goal_difference": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "goals_against": { - "type": "integer" + "data": { + "$ref": "#/definitions/fiveguys.OrderingLocationsResponse" }, - "goals_for": { + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "fiveguys.orderingMenuResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "lost": { - "type": "integer" + "data": { + "$ref": "#/definitions/fiveguys.OrderingMenuResponse" }, - "played": { + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "fiveguys.pagination": { + "properties": { + "page": { + "example": 1, "type": "integer" }, - "points": { + "per_page": { + "example": 20, "type": "integer" }, - "position": { + "total": { + "example": 142, "type": "integer" }, - "team": { - "$ref": "#/definitions/fussballde.TeamRef" - }, - "won": { + "total_pages": { + "example": 8, "type": "integer" } }, "type": "object" }, - "fussballde.StandingsTable": { + "fiveguys.searchResponseDoc": { "properties": { - "columns": { - "items": { - "type": "string" - }, - "type": "array" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "rows": { - "items": { - "$ref": "#/definitions/fussballde.StandingsRow" - }, - "type": "array" + "data": { + "$ref": "#/definitions/fiveguys.SearchResponse" }, - "title": { - "example": "Heimtabelle", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "fussballde.StatEntry": { + "fiveguys.storeResponseDoc": { "properties": { - "label": { - "example": "Tore", - "type": "string" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "value": { - "example": "6", - "type": "string" + "data": { + "$ref": "#/definitions/fiveguys.StoreResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "fussballde.StatValue": { + "fiverr.GigPackage": { "properties": { - "label": { - "example": "Tore", + "delivery_days": { + "description": "Delivery time of the package, in days.", + "type": "integer" + }, + "description": { + "description": "What the package includes, as written by the seller.", "type": "string" }, - "value": { - "example": "47", + "price": { + "description": "Package price in dollars.", + "type": "number" + }, + "tier": { + "description": "Name of the pricing tier, usually Basic, Standard or Premium.", + "type": "string" + }, + "title": { + "description": "Title of the package as Fiverr shows it.", "type": "string" } }, "type": "object" }, - "fussballde.TableResponse": { + "fiverr.GigResponse": { "properties": { - "competition_id": { + "category_name": { + "description": "Name of the Fiverr category the gig is listed in.", "type": "string" }, - "matchday": { - "example": 3, - "type": "integer" + "description": { + "description": "Gig description written by the seller.", + "type": "string" }, - "tables": { + "id": { + "description": "Fiverr gig id.", + "type": "string" + }, + "images": { + "description": "URLs of the images in the gig gallery.", "items": { - "$ref": "#/definitions/fussballde.StandingsTable" + "type": "string" }, "type": "array" }, - "view": { - "example": "overall", - "type": "string" - } - }, - "type": "object" - }, - "fussballde.TeamDetail": { - "properties": { - "club_id": { - "type": "string" + "is_pro": { + "description": "Whether the gig is part of Fiverr Pro.", + "type": "boolean" }, - "club_profile": { + "orders_in_queue": { + "description": "Number of orders currently in the queue for the gig.", + "type": "integer" + }, + "packages": { + "description": "Pricing packages the gig offers, one per tier.", "items": { - "$ref": "#/definitions/fussballde.FactRow" + "$ref": "#/definitions/fiverr.GigPackage" }, "type": "array" }, - "club_url": { + "rating": { + "description": "Average rating of the gig.", + "type": "number" + }, + "review_count": { + "description": "Number of reviews the gig has received.", + "type": "integer" + }, + "seller": { + "allOf": [ + { + "$ref": "#/definitions/fiverr.GigSeller" + } + ], + "description": "Seller who offers the gig." + }, + "sub_category_name": { + "description": "Name of the Fiverr subcategory the gig is listed in.", "type": "string" }, - "competitions": { + "tags": { + "description": "Search tags attached to the gig.", "items": { - "$ref": "#/definitions/fussballde.CompetitionLink" + "type": "string" }, "type": "array" }, - "federation": { - "example": "Westfalen", + "title": { + "description": "Gig title as shown on the gig page.", "type": "string" }, - "federation_id": { + "url": { + "description": "URL of the gig page on Fiverr.", "type": "string" - }, - "highest_league": { - "example": "Bundesliga", + } + }, + "type": "object" + }, + "fiverr.GigSeller": { + "properties": { + "country": { + "description": "Seller's country code, such as `BD`.", "type": "string" }, - "history": { - "items": { - "$ref": "#/definitions/fussballde.SeasonResult" - }, - "type": "array" - }, - "logo_url": { + "description": { + "description": "Seller's profile description.", "type": "string" }, - "name": { - "example": "Borussia Dortmund", + "display_name": { + "description": "Seller's display name.", "type": "string" }, - "summary": { + "languages": { + "description": "Language codes the seller speaks, such as `en`.", "items": { - "$ref": "#/definitions/fussballde.FactRow" + "type": "string" }, "type": "array" }, - "team_id": { + "level": { + "description": "Seller level: `new_seller`, `level_one_seller`, `level_two_seller` or `top_rated_seller`.", + "enum": [ + "new_seller", + "level_one_seller", + "level_two_seller", + "top_rated_seller" + ], "type": "string" }, - "team_type": { - "example": "Herren", + "profile_image": { + "description": "URL of the seller's profile image.", "type": "string" }, - "url": { - "type": "string" + "rating": { + "description": "Seller's average rating.", + "type": "number" }, - "venues": { - "items": { - "$ref": "#/definitions/fussballde.FactRow" - }, - "type": "array" + "response_time_hours": { + "description": "Typical time the seller takes to respond, in hours.", + "type": "integer" + }, + "review_count": { + "description": "Number of reviews the seller has received.", + "type": "integer" + }, + "username": { + "description": "Seller's Fiverr username.", + "type": "string" } }, "type": "object" }, - "fussballde.TeamMatchesResponse": { + "fiverr.GigSummary": { "properties": { - "count": { + "category_id": { "type": "integer" }, - "date_from": { + "id": { "type": "string" }, - "date_to": { + "image": { "type": "string" }, - "final": { + "is_pro": { "type": "boolean" }, - "kind": { - "type": "string" + "rating": { + "type": "number" }, - "limit": { + "review_count": { "type": "integer" }, - "matches": { - "items": { - "$ref": "#/definitions/fussballde.MatchRow" - }, - "type": "array" - }, - "offset": { - "type": "integer" + "seller_country": { + "type": "string" }, - "team_id": { + "seller_image": { "type": "string" - } - }, - "type": "object" - }, - "fussballde.TeamPositions": { - "properties": { - "positions": { - "items": { - "type": "integer" - }, - "type": "array" }, - "team": { - "$ref": "#/definitions/fussballde.TeamRef" - } - }, - "type": "object" - }, - "fussballde.TeamRef": { - "properties": { - "club_id": { - "example": "00ES8GN8N400008VVV0AG08LVUPGND5I", + "seller_level": { + "enum": [ + "new_seller", + "level_one_seller", + "level_two_seller", + "top_rated_seller" + ], "type": "string" }, - "logo_url": { + "seller_name": { "type": "string" }, - "name": { - "example": "Borussia Dortmund", + "seller_username": { "type": "string" }, - "team_id": { - "example": "011MI8V6UC000000VTVG0001VTR8C1K7", + "starting_price": { + "type": "number" + }, + "sub_category_id": { + "type": "integer" + }, + "title": { "type": "string" }, "url": { @@ -91686,92 +97467,93 @@ }, "type": "object" }, - "fussballde.TeamSquadResponse": { + "fiverr.SearchResponse": { "properties": { - "columns": { + "gigs": { "items": { - "type": "string" + "$ref": "#/definitions/fiverr.GigSummary" }, "type": "array" }, - "count": { + "page": { "type": "integer" }, - "kind": { - "type": "string" - }, - "players": { - "items": { - "$ref": "#/definitions/fussballde.SquadPlayer" - }, - "type": "array" - }, - "season": { - "type": "string" - }, - "team_id": { + "query": { "type": "string" } }, "type": "object" }, - "fussballde.TeamTypeOption": { + "fiverr.SellerResponse": { "properties": { - "id": { - "example": "1", + "approved_gigs_count": { + "type": "integer" + }, + "country": { "type": "string" }, - "leagues": { + "description": { + "type": "string" + }, + "display_name": { + "type": "string" + }, + "gig_ids": { "items": { - "$ref": "#/definitions/fussballde.LeagueOption" + "type": "string" }, "type": "array" }, - "name": { - "example": "Herren", - "type": "string" - } - }, - "type": "object" - }, - "fussballde.TopScorersResponse": { - "properties": { - "competition_id": { - "type": "string" - }, - "count": { - "type": "integer" + "hourly_rate": { + "type": "number" }, - "final": { - "example": false, + "is_pro": { "type": "boolean" }, - "limit": { - "type": "integer" + "is_verified": { + "type": "boolean" }, - "offset": { - "type": "integer" + "joined_at": { + "type": "string" }, - "scorers": { + "languages": { "items": { - "$ref": "#/definitions/fussballde.ScorerRow" + "type": "string" }, "type": "array" }, - "title": { + "level": { + "enum": [ + "new_seller", + "level_one_seller", + "level_two_seller", + "top_rated_seller" + ], + "type": "string" + }, + "one_liner_title": { + "type": "string" + }, + "profile_image": { + "type": "string" + }, + "url": { + "type": "string" + }, + "username": { "type": "string" } }, "type": "object" }, - "fussballde.amateurStatsResponseDoc": { + "fiverr.gigResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/fussballde.AmateurStatsResponse" + "$ref": "#/definitions/fiverr.GigResponse" }, "msg": { "example": "OK", @@ -91780,14 +97562,14 @@ }, "type": "object" }, - "fussballde.clubMatchesResponseDoc": { + "fiverr.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/fussballde.ClubMatchesResponse" + "$ref": "#/definitions/fiverr.SearchResponse" }, "msg": { "example": "OK", @@ -91796,14 +97578,14 @@ }, "type": "object" }, - "fussballde.clubResponseDoc": { + "fiverr.sellerResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/fussballde.ClubDetail" + "$ref": "#/definitions/fiverr.SellerResponse" }, "msg": { "example": "OK", @@ -91812,1983 +97594,1991 @@ }, "type": "object" }, - "fussballde.clubSearchResponseDoc": { + "flashscore.ArchiveSeason": { "properties": { - "code": { - "example": 200, - "type": "integer" + "end_year": { + "type": "string" }, - "data": { - "$ref": "#/definitions/fussballde.ClubSearchResponse" + "is_current": { + "type": "boolean" }, - "msg": { - "example": "OK", + "is_requested": { + "type": "boolean" + }, + "season": { + "type": "string" + }, + "stage_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "start_year": { + "type": "string" + }, + "tournament_id": { + "description": "TournamentID is the season-level tournament id (the tournament_id of\nevent competition blocks), accepted by flashscore-tournament-outright-odds.", "type": "string" + }, + "winners": { + "items": { + "$ref": "#/definitions/flashscore.ArchiveWinner" + }, + "type": "array" } }, "type": "object" }, - "fussballde.competitionOptionsResponseDoc": { + "flashscore.ArchiveStage": { "properties": { - "code": { - "example": 200, - "type": "integer" + "country": { + "type": "string" }, - "data": { - "$ref": "#/definitions/fussballde.CompetitionOptionsResponse" + "end_estimated": { + "type": "string" }, - "msg": { - "example": "OK", + "group": { + "type": "string" + }, + "id": { + "type": "string" + }, + "is_final": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "start_estimated": { + "type": "string" + }, + "tabs": { + "items": { + "$ref": "#/definitions/flashscore.ArchiveTab" + }, + "type": "array" + }, + "tournament": { "type": "string" + }, + "type_id": { + "type": "integer" } }, "type": "object" }, - "fussballde.competitionsResponseDoc": { + "flashscore.ArchiveTab": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/fussballde.CompetitionsResponse" + "id": { + "enum": [ + "SU", + "OD", + "TA", + "RE", + "FI", + "DR", + "NF" + ], + "type": "string" }, - "msg": { - "example": "OK", + "name": { "type": "string" } }, "type": "object" }, - "fussballde.federationResponseDoc": { + "flashscore.ArchiveWinner": { "properties": { - "code": { - "example": 200, - "type": "integer" + "id": { + "type": "string" }, - "data": { - "$ref": "#/definitions/fussballde.FederationDetail" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "slug": { "type": "string" } }, "type": "object" }, - "fussballde.filtersResponseDoc": { + "flashscore.CareerCompetition": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/fussballde.FiltersResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "path": { "type": "string" } }, "type": "object" }, - "fussballde.matchCalendarResponseDoc": { + "flashscore.CareerPart": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/fussballde.MatchCalendarResponse" - }, - "msg": { - "example": "OK", + "stage": { "type": "string" + }, + "stats": { + "additionalProperties": {}, + "type": "object" } }, "type": "object" }, - "fussballde.matchComparisonResponseDoc": { + "flashscore.CareerRow": { "properties": { - "code": { - "example": 200, - "type": "integer" + "competition": { + "$ref": "#/definitions/flashscore.CareerCompetition" }, - "data": { - "$ref": "#/definitions/fussballde.MatchComparisonResponse" + "parts": { + "items": { + "$ref": "#/definitions/flashscore.CareerPart" + }, + "type": "array" }, - "msg": { - "example": "OK", + "season": { "type": "string" + }, + "stats": { + "additionalProperties": {}, + "type": "object" + }, + "team": { + "$ref": "#/definitions/flashscore.CareerTeam" } }, "type": "object" }, - "fussballde.matchPlanResponseDoc": { + "flashscore.CareerTab": { "properties": { - "code": { - "example": 200, - "type": "integer" + "columns": { + "items": { + "$ref": "#/definitions/flashscore.SquadColumn" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/fussballde.MatchPlanResponse" + "key": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { "type": "string" + }, + "rows": { + "items": { + "$ref": "#/definitions/flashscore.CareerRow" + }, + "type": "array" + }, + "total": { + "additionalProperties": {}, + "type": "object" } }, "type": "object" }, - "fussballde.matchResponseDoc": { + "flashscore.CareerTeam": { "properties": { - "code": { - "example": 200, - "type": "integer" + "id": { + "type": "string" }, - "data": { - "$ref": "#/definitions/fussballde.MatchDetail" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "path": { + "type": "string" + }, + "slug": { "type": "string" } }, "type": "object" }, - "fussballde.matchdayResponseDoc": { + "flashscore.CommentaryLine": { "properties": { - "code": { - "example": 200, - "type": "integer" + "clock": { + "type": "string" }, - "data": { - "$ref": "#/definitions/fussballde.MatchdayResponse" + "minute": { + "type": "string" }, - "msg": { - "example": "OK", + "text": { + "type": "string" + }, + "type": { "type": "string" } }, "type": "object" }, - "fussballde.nationalTopScorersResponseDoc": { + "flashscore.EntityNewsResponse": { "properties": { - "code": { - "example": 200, + "article_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fussballde.NationalTopScorersResponse" + "entity": { + "$ref": "#/definitions/flashscore.EntityNewsTag" }, - "msg": { - "example": "OK", + "id": { + "type": "string" + }, + "sections": { + "items": { + "$ref": "#/definitions/flashscore.EntityNewsSection" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "enum": [ + "team", + "player", + "tournament", + "sport" + ], "type": "string" } }, "type": "object" }, - "fussballde.newsArticleResponseDoc": { + "flashscore.EntityNewsSection": { "properties": { - "code": { - "example": 200, + "article_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fussballde.NewsArticle" + "article_ids": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "section_type": { + "enum": [ + "MOST_RECENT", + "TOPPED" + ], + "type": "string" + }, + "title": { "type": "string" } }, "type": "object" }, - "fussballde.newsResponseDoc": { + "flashscore.EntityNewsTag": { "properties": { - "code": { - "example": 200, - "type": "integer" + "entity_id": { + "type": "string" }, - "data": { - "$ref": "#/definitions/fussballde.NewsResponse" + "entity_type": { + "enum": [ + "PARTICIPANT", + "TOURNAMENT_TEMPLATE", + "SPORT" + ], + "type": "string" }, - "msg": { - "example": "OK", + "label": { + "type": "string" + }, + "slug": { "type": "string" } }, "type": "object" }, - "fussballde.newsSearchResponseDoc": { + "flashscore.EventCompetition": { "properties": { - "code": { - "example": 200, - "type": "integer" + "country": { + "type": "string" }, - "data": { - "$ref": "#/definitions/fussballde.NewsSearchResponse" + "full_name": { + "type": "string" }, - "msg": { - "example": "OK", + "id": { + "description": "ID is the tournament template (competition) id.", + "type": "string" + }, + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "stage_id": { + "description": "StageID is the legacy name of TournamentID and carries the same value.", + "type": "string" + }, + "tournament_id": { + "description": "TournamentID is the season-level tournament id (feed key ZE), the input\nof flashscore-tournament-outright-odds.", + "type": "string" + }, + "tournament_stage_id": { + "description": "TournamentStageID is the tournament stage id (feed key ZC), the input of\nflashscore-tournament-archive-seasons.", "type": "string" } }, "type": "object" }, - "fussballde.playerMatchesResponseDoc": { + "flashscore.EventSide": { "properties": { - "code": { - "example": 200, - "type": "integer" + "id": { + "type": "string" }, - "data": { - "$ref": "#/definitions/fussballde.PlayerMatchesResponse" + "logo_url": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "type": "string" + }, + "short_name": { + "type": "string" + }, + "slug": { "type": "string" } }, "type": "object" }, - "fussballde.playerResponseDoc": { + "flashscore.IncidentAction": { "properties": { - "code": { - "example": 200, + "away_score": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fussballde.PlayerDetail" + "home_score": { + "type": "integer" }, - "msg": { - "example": "OK", + "label": { "type": "string" - } - }, - "type": "object" - }, - "fussballde.playerSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/fussballde.PlayerSearchResponse" - }, - "msg": { - "example": "OK", + "player": { "type": "string" - } - }, - "type": "object" - }, - "fussballde.positionHistoryResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/fussballde.PositionHistoryResponse" }, - "msg": { - "example": "OK", + "player_id": { "type": "string" - } - }, - "type": "object" - }, - "fussballde.postalCodesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/fussballde.PostalCodesResponse" + "player_path": { + "type": "string" }, - "msg": { - "example": "OK", + "reason": { "type": "string" + }, + "type_code": { + "type": "integer" } }, "type": "object" }, - "fussballde.tableResponseDoc": { + "flashscore.MatchCommentaryResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "comments": { + "items": { + "$ref": "#/definitions/flashscore.CommentaryLine" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/fussballde.TableResponse" + "match_id": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" } }, "type": "object" }, - "fussballde.teamMatchesResponseDoc": { + "flashscore.MatchIncident": { "properties": { - "code": { - "example": 200, - "type": "integer" + "actions": { + "items": { + "$ref": "#/definitions/flashscore.IncidentAction" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/fussballde.TeamMatchesResponse" + "id": { + "type": "string" }, - "msg": { - "example": "OK", + "period": { "type": "string" - } - }, - "type": "object" - }, - "fussballde.teamResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/fussballde.TeamDetail" + "side": { + "enum": [ + "home", + "away" + ], + "type": "string" }, - "msg": { - "example": "OK", + "time": { "type": "string" } }, "type": "object" }, - "fussballde.teamSquadResponseDoc": { + "flashscore.MatchIncidentsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "incidents": { + "items": { + "$ref": "#/definitions/flashscore.MatchIncident" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/fussballde.TeamSquadResponse" + "match_id": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" } }, "type": "object" }, - "fussballde.topScorersResponseDoc": { + "flashscore.MostReadArticle": { "properties": { - "code": { - "example": 200, + "edited_at": { "type": "integer" }, - "data": { - "$ref": "#/definitions/fussballde.TopScorersResponse" + "id": { + "type": "string" }, - "msg": { - "example": "OK", + "image_alt": { "type": "string" - } - }, - "type": "object" - }, - "gamerant.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" }, - "biography": { + "image_credit": { "type": "string" }, "image_url": { "type": "string" }, - "name": { + "path": { "type": "string" }, - "social_links": { - "items": { - "$ref": "#/definitions/valnet.AuthorSocialLink" - }, - "type": "array" + "published_at": { + "type": "integer" + }, + "published_at_iso": { + "type": "string" + }, + "slug": { + "type": "string" }, "title": { "type": "string" }, - "url": { + "type": { "type": "string" } }, "type": "object" }, - "gamesradar.AuthorResponse": { + "flashscore.NewsArticleBody": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" + "author": { + "type": "string" }, - "biography": { + "block_count": { + "type": "integer" + }, + "blocks": { "items": { - "type": "string" + "$ref": "#/definitions/flashscore.NewsBodyBlock" }, "type": "array" }, - "has_next_page": { - "type": "boolean" + "credit": { + "type": "string" }, - "job_title": { + "edited_at": { + "type": "integer" + }, + "edited_at_iso": { "type": "string" }, - "name": { + "id": { "type": "string" }, - "page": { + "image": { + "$ref": "#/definitions/flashscore.NewsCoverImage" + }, + "perex": { + "type": "string" + }, + "published_at": { "type": "integer" }, + "published_at_iso": { + "type": "string" + }, "slug": { "type": "string" }, - "social_links": { + "tags": { "items": { - "$ref": "#/definitions/gamesradar.AuthorSocialLink" + "$ref": "#/definitions/flashscore.NewsArticleTag" }, "type": "array" }, + "text": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, "url": { "type": "string" } }, "type": "object" }, - "gamesradar.AuthorSocialLink": { + "flashscore.NewsArticleBodyResponse": { "properties": { - "platform": { - "type": "string" + "article": { + "$ref": "#/definitions/flashscore.NewsArticleBody" }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "gbnews.AuthorResponse": { + "flashscore.NewsArticleTag": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { + "entity_id": { "type": "string" }, - "name": { + "entity_type": { + "enum": [ + "SPORT", + "PARTICIPANT", + "TOURNAMENT_TEMPLATE", + "TAG" + ], "type": "string" }, - "role": { + "label": { "type": "string" }, "slug": { "type": "string" - }, - "url": { - "type": "string" } }, "type": "object" }, - "gdelt.Article": { + "flashscore.NewsBodyBlock": { "properties": { - "domain": { - "example": "example.com", + "alt": { "type": "string" }, - "language": { - "example": "English", + "credit": { "type": "string" }, - "seen_at": { - "example": "2026-08-19T23:00:00Z", + "height": { + "type": "integer" + }, + "id": { "type": "string" }, - "social_image_url": { - "example": "https://www.example.com/images/social.jpg", + "level": { + "type": "integer" + }, + "links": { + "items": { + "$ref": "#/definitions/flashscore.NewsBodyLink" + }, + "type": "array" + }, + "provider": { "type": "string" }, - "source_country": { - "example": "United States", + "text": { "type": "string" }, - "title": { - "example": "Climate report warns of rising sea levels", + "type": { + "enum": [ + "paragraph", + "heading", + "embed", + "image", + "infobox" + ], "type": "string" }, "url": { - "example": "https://www.example.com/news/climate-report", "type": "string" + }, + "width": { + "type": "integer" } }, "type": "object" }, - "gdelt.ContextArticle": { + "flashscore.NewsBodyLink": { "properties": { - "context": { - "example": "The report, released Tuesday, warns that coastal cities face rising seas driven by accelerating climate change. Officials called for immediate action.", + "id": { "type": "string" }, - "domain": { - "example": "example.com", + "kind": { + "enum": [ + "link", + "participant", + "player", + "event", + "tournament", + "article" + ], "type": "string" }, - "is_quote": { - "example": false, - "type": "boolean" - }, - "language": { - "example": "ENGLISH", - "type": "string" + "sport_id": { + "type": "integer" }, - "seen_at": { - "example": "2026-08-19T23:00:00Z", + "text": { "type": "string" }, - "sentence": { - "example": "Coastal cities face rising seas driven by accelerating climate change.", + "url": { "type": "string" - }, - "social_image_url": { - "example": "https://www.example.com/images/social.jpg", + } + }, + "type": "object" + }, + "flashscore.NewsCoverImage": { + "properties": { + "alt_text": { "type": "string" }, - "title": { - "example": "Climate report warns of rising sea levels", + "credit": { "type": "string" }, "url": { - "example": "https://www.example.com/news/climate-report", "type": "string" } }, "type": "object" }, - "gdelt.ContextResponse": { + "flashscore.NewsMostReadResponse": { "properties": { + "article_count": { + "type": "integer" + }, "articles": { "items": { - "$ref": "#/definitions/gdelt.ContextArticle" + "$ref": "#/definitions/flashscore.MostReadArticle" }, "type": "array" }, - "count": { - "example": 8, - "type": "integer" - }, - "fetched_at": { - "example": "2026-08-20T10:00:00Z", - "type": "string" - }, - "maxrecords": { - "example": 75, - "type": "integer" - }, - "query": { - "example": "climate change", - "type": "string" - }, - "sort": { - "example": "relevance", - "type": "string" - }, "source_url": { - "example": "https://api.gdeltproject.org/api/v2/context/context?format=json&maxrecords=75&mode=artlist&query=climate+change×pan=24h", "type": "string" } }, "type": "object" }, - "gdelt.SearchResponse": { + "flashscore.OddsBookmaker": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/gdelt.Article" - }, - "type": "array" - }, - "count": { - "example": 12, + "id": { "type": "integer" }, - "fetched_at": { - "example": "2026-08-20T10:00:00Z", + "name": { "type": "string" + } + }, + "type": "object" + }, + "flashscore.OutrightOffer": { + "properties": { + "active": { + "type": "boolean" }, - "maxrecords": { - "example": 75, - "type": "integer" + "best": { + "type": "boolean" }, - "query": { - "example": "climate change", - "type": "string" + "bookmaker_id": { + "type": "integer" }, - "sort": { - "example": "relevance", + "change": { + "enum": [ + "UP", + "DOWN" + ], "type": "string" }, - "source_url": { - "example": "https://api.gdeltproject.org/api/v2/doc/doc?format=json&maxrecords=75&mode=artlist&query=climate+change", - "type": "string" + "odds": { + "type": "number" } }, "type": "object" }, - "gdelt.TVCapNlpEntityDetailsResponse": { + "flashscore.OutrightParticipant": { "properties": { - "entities": { - "items": { - "$ref": "#/definitions/gdelt.TVConceptEntity" - }, - "type": "array" - }, - "fetched_at": { - "example": "2026-08-20T10:00:00Z", + "id": { "type": "string" }, - "source_url": { - "example": "https://api.gdeltproject.org/api/v2/tvai/tvai?format=json&mode=capnlpentitydetails&maxrecords=100", + "name": { "type": "string" + }, + "offers": { + "items": { + "$ref": "#/definitions/flashscore.OutrightOffer" + }, + "type": "array" } }, "type": "object" }, - "gdelt.TVClip": { + "flashscore.OutrightTournament": { "properties": { - "caption": { - "example": "climate", + "id": { "type": "string" }, - "caption_concepts": { - "example": "/M/0d063v", + "name": { "type": "string" }, - "clip_url": { - "example": "https://archive.org/details/CNNW_20190503_160000_Inside_Politics/start/3656", + "offers": { + "items": { + "$ref": "#/definitions/flashscore.OutrightOffer" + }, + "type": "array" + } + }, + "type": "object" + }, + "flashscore.PlayerDetail": { + "properties": { + "label": { "type": "string" }, - "matched_at": { - "example": "2019-05-03T17:00:56Z", + "value": { "type": "string" + } + }, + "type": "object" + }, + "flashscore.PlayerEventsResponse": { + "properties": { + "event_count": { + "type": "integer" }, - "onscreen_text": { - "example": "BREAKING NEWS: SEA LEVELS RISING", - "type": "string" + "events": { + "items": { + "$ref": "#/definitions/flashscore.TeamEvent" + }, + "type": "array" }, - "show": { - "example": "Inside Politics", - "type": "string" + "page": { + "type": "integer" }, - "show_start_at": { - "example": "2019-05-03T16:00:00Z", + "player_id": { "type": "string" }, - "station": { - "example": "cnn", + "player_name": { "type": "string" }, - "thumbnail_url": { - "example": "http://data.gdeltproject.org/televisionexplorer/thumbnails/CNNW_20190503_160000_Inside_Politics-003656.jpg", + "section": { "type": "string" }, - "transcript": { - "example": "climate change the", + "source_url": { "type": "string" - }, - "visual_entities": { - "example": [ - "person", - "news", - "weather" - ], - "items": { - "type": "string" - }, - "type": "array" } }, "type": "object" }, - "gdelt.TVClipSearchResponse": { + "flashscore.PlayerInjuriesResponse": { "properties": { - "clips": { + "injuries": { "items": { - "$ref": "#/definitions/gdelt.TVClip" + "$ref": "#/definitions/flashscore.PlayerInjury" }, "type": "array" }, - "count": { - "example": 3, + "injury_count": { "type": "integer" }, - "fetched_at": { - "example": "2026-08-20T10:00:00Z", + "page_url": { "type": "string" }, - "maxrecords": { - "example": 50, - "type": "integer" + "player": { + "$ref": "#/definitions/flashscore.PlayerProfile" }, - "query": { - "example": "cap:\"climate change\" station:CNN", + "source_url": { "type": "string" - }, - "sort": { - "example": "relevance", + } + }, + "type": "object" + }, + "flashscore.PlayerInjury": { + "properties": { + "from": { "type": "string" }, - "source_url": { - "example": "https://api.gdeltproject.org/api/v2/tvai/tvai?format=json&maxrecords=50&mode=clipgallery&query=cap%3A%22climate+change%22+station%3ACNN", + "type": { "type": "string" }, - "station": { - "example": "CNN", + "until": { "type": "string" } }, "type": "object" }, - "gdelt.TVConceptEntity": { + "flashscore.PlayerMatchLogAbsence": { "properties": { - "label": { - "example": "DONALD TRUMP", + "category": { "type": "string" }, - "mid": { - "example": "/m/0cqt90", + "detail": { "type": "string" } }, "type": "object" }, - "gdelt.TVShowChartResponse": { + "flashscore.PlayerMatchLogResponse": { "properties": { - "fetched_at": { - "example": "2026-08-20T10:00:00Z", - "type": "string" + "has_more": { + "type": "boolean" }, - "query": { - "example": "cap:\"trump\" station:CNN", - "type": "string" + "page": { + "type": "integer" }, - "shows": { + "player": { + "$ref": "#/definitions/flashscore.PlayerProfile" + }, + "row_count": { + "type": "integer" + }, + "rows": { "items": { - "$ref": "#/definitions/gdelt.TVShowCount" + "$ref": "#/definitions/flashscore.PlayerMatchLogRow" }, "type": "array" }, "source_url": { - "example": "https://api.gdeltproject.org/api/v2/tvai/tvai?format=json&mode=showchart&query=cap%3A%22trump%22+station%3ACNN", "type": "string" } }, "type": "object" }, - "gdelt.TVShowCount": { + "flashscore.PlayerMatchLogRow": { "properties": { - "count": { - "example": 7.8383, - "type": "number" + "absence": { + "$ref": "#/definitions/flashscore.PlayerMatchLogAbsence" }, - "show": { - "example": "Anderson Cooper 360", - "type": "string" - } - }, - "type": "object" - }, - "gdelt.TVStation": { - "properties": { - "id": { - "example": "CNN", - "type": "string" + "away": { + "$ref": "#/definitions/flashscore.PlayerMatchLogSide" }, - "label": { - "example": "CNN", + "date": { "type": "string" }, - "label_long": { - "example": "CNN (1/1/2020 - Now)", + "date_text": { "type": "string" - } - }, - "type": "object" - }, - "gdelt.TVStationChartResponse": { - "properties": { - "fetched_at": { - "example": "2026-08-20T10:00:00Z", + }, + "event_id": { "type": "string" }, - "query": { - "example": "cap:\"trump\" (station:CNN OR station:MSNBC)", + "home": { + "$ref": "#/definitions/flashscore.PlayerMatchLogSide" + }, + "rating": { + "type": "number" + }, + "rating_rank": { + "type": "integer" + }, + "result": { + "enum": [ + "win", + "draw", + "loss" + ], "type": "string" }, - "source_url": { - "example": "https://api.gdeltproject.org/api/v2/tvai/tvai?format=json&mode=stationchart&query=cap%3A%22trump%22+%28station%3ACNN+OR+station%3AMSNBC%29", + "stage": { + "enum": [ + "finished", + "finished_after_extra_time", + "finished_after_penalties", + "other" + ], "type": "string" }, - "stations": { + "stage_code": { + "type": "integer" + }, + "stats": { "items": { - "$ref": "#/definitions/gdelt.TVStationCount" + "$ref": "#/definitions/flashscore.PlayerMatchLogStat" }, "type": "array" + }, + "stats_available": { + "type": "boolean" + }, + "tournament": { + "$ref": "#/definitions/flashscore.PlayerMatchLogTournament" } }, "type": "object" }, - "gdelt.TVStationCount": { + "flashscore.PlayerMatchLogSide": { "properties": { - "count": { - "example": 877267, + "full_time_score": { "type": "integer" }, - "station": { - "example": "CNN", + "id": { + "type": "string" + }, + "logo_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "penalties_score": { + "type": "integer" + }, + "score": { + "type": "integer" + }, + "score_after_extra_time": { + "type": "integer" + }, + "short_name": { + "type": "string" + }, + "slug": { "type": "string" } }, "type": "object" }, - "gdelt.TVStationDetailsResponse": { + "flashscore.PlayerMatchLogStat": { "properties": { - "fetched_at": { - "example": "2026-08-20T10:00:00Z", + "id": { + "description": "ID is Flashscore's numeric statistic id.", + "type": "integer" + }, + "key": { "type": "string" }, - "source_url": { - "example": "https://api.gdeltproject.org/api/v2/tvai/tvai?format=json&mode=stationdetails", + "label": { "type": "string" }, - "stations": { - "items": { - "$ref": "#/definitions/gdelt.TVStation" - }, - "type": "array" + "value": { + "description": "Value is the displayed value: \"90'\", \"29:21\", \"32-33\", \"97.00%\" or a number.", + "type": "string" } }, "type": "object" }, - "gdelt.TVTimelineResponse": { + "flashscore.PlayerMatchLogTournament": { "properties": { - "fetched_at": { - "example": "2026-08-20T10:00:00Z", + "country": { "type": "string" }, - "query": { - "example": "cap:\"climate change\" station:CNN", - "type": "string" + "country_id": { + "type": "integer" }, - "series": { - "items": { - "$ref": "#/definitions/gdelt.TimelineSeries" - }, - "type": "array" + "name": { + "type": "string" }, - "source_url": { - "example": "https://api.gdeltproject.org/api/v2/tvai/tvai?format=json&mode=timelinevol&query=cap%3A%22climate+change%22+station%3ACNN", + "path": { "type": "string" }, - "station": { - "example": "CNN", + "season": { "type": "string" - } - }, - "type": "object" - }, - "gdelt.TVVisualEntity": { - "properties": { - "label": { - "example": "person", + }, + "short_code": { "type": "string" } }, "type": "object" }, - "gdelt.TVVisualEntityDetailsResponse": { + "flashscore.PlayerNewsResponse": { "properties": { - "entities": { + "item_count": { + "type": "integer" + }, + "items": { "items": { - "$ref": "#/definitions/gdelt.TVVisualEntity" + "$ref": "#/definitions/flashscore.TeamNewsItem" }, "type": "array" }, - "fetched_at": { - "example": "2026-08-20T10:00:00Z", + "player_id": { "type": "string" }, - "source_url": { - "example": "https://api.gdeltproject.org/api/v2/tvai/tvai?format=json&mode=visualentitydetails&maxrecords=100", + "player_name": { "type": "string" - } - }, - "type": "object" - }, - "gdelt.TVWordCloudEntry": { - "properties": { - "count": { - "example": 100, - "type": "number" }, - "label": { - "example": "Trump", + "source_url": { "type": "string" } }, "type": "object" }, - "gdelt.TVWordCloudResponse": { + "flashscore.PlayerProfile": { "properties": { - "channel": { - "example": "caption", + "birth_date": { "type": "string" }, - "fetched_at": { - "example": "2026-08-20T10:00:00Z", + "country": { "type": "string" }, - "query": { - "example": "cap:\"trump\" station:CNN", - "type": "string" + "country_id": { + "type": "integer" }, - "source_url": { - "example": "https://api.gdeltproject.org/api/v2/tvai/tvai?format=json&mode=wordcloudcap&query=cap%3A%22trump%22+station%3ACNN", + "full_name": { "type": "string" }, - "words": { - "items": { - "$ref": "#/definitions/gdelt.TVWordCloudEntry" - }, - "type": "array" - } - }, - "type": "object" - }, - "gdelt.TimelinePoint": { - "properties": { - "date": { - "example": "2026-08-19T00:00:00Z", + "id": { "type": "string" }, - "value": { - "example": 1.42, - "type": "number" - } - }, - "type": "object" - }, - "gdelt.TimelineResponse": { - "properties": { - "fetched_at": { - "example": "2026-08-20T10:00:00Z", + "name": { "type": "string" }, - "metric": { - "example": "volume", + "path": { "type": "string" }, - "query": { - "example": "climate change", + "photo_url": { "type": "string" }, - "series": { - "items": { - "$ref": "#/definitions/gdelt.TimelineSeries" - }, - "type": "array" - }, - "source_url": { - "example": "https://api.gdeltproject.org/api/v2/doc/doc?format=json&mode=timelinevol&query=climate+change", + "ranking": { "type": "string" - } - }, - "type": "object" - }, - "gdelt.TimelineSeries": { - "properties": { - "points": { - "items": { - "$ref": "#/definitions/gdelt.TimelinePoint" - }, - "type": "array" }, - "series": { - "example": "climate change", + "slug": { "type": "string" - } - }, - "type": "object" - }, - "gdelt.ToneChartArticle": { - "properties": { - "title": { - "example": "Climate report warns of rising sea levels", + }, + "sport": { "type": "string" }, + "sport_id": { + "type": "integer" + }, + "team": { + "$ref": "#/definitions/flashscore.PlayerTeam" + }, "url": { - "example": "https://www.example.com/news/climate-report", "type": "string" } }, "type": "object" }, - "gdelt.ToneChartBin": { + "flashscore.PlayerResponse": { "properties": { - "bin": { - "example": -5, - "type": "integer" - }, - "count": { - "example": 12, + "age": { "type": "integer" }, - "top_articles": { + "career": { "items": { - "$ref": "#/definitions/gdelt.ToneChartArticle" + "$ref": "#/definitions/flashscore.CareerTab" }, "type": "array" - } - }, - "type": "object" - }, - "gdelt.ToneChartResponse": { - "properties": { - "bins": { + }, + "contract_expires": { + "type": "string" + }, + "details": { "items": { - "$ref": "#/definitions/gdelt.ToneChartBin" + "$ref": "#/definitions/flashscore.PlayerDetail" }, "type": "array" }, - "fetched_at": { - "example": "2026-08-20T10:00:00Z", + "market_value": { "type": "string" }, - "query": { - "example": "climate change", + "page_url": { + "type": "string" + }, + "player": { + "$ref": "#/definitions/flashscore.PlayerProfile" + }, + "position": { "type": "string" }, "source_url": { - "example": "https://api.gdeltproject.org/api/v2/doc/doc?format=json&mode=tonechart&query=climate+change", "type": "string" } }, "type": "object" }, - "gdelt.contextResponseDoc": { + "flashscore.PlayerTeam": { "properties": { - "code": { - "example": 200, - "type": "integer" + "id": { + "type": "string" }, - "data": { - "$ref": "#/definitions/gdelt.ContextResponse" + "logo_url": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "slug": { "type": "string" } }, "type": "object" }, - "gdelt.searchResponseDoc": { + "flashscore.PlayerTransfer": { "properties": { - "code": { - "example": 200, - "type": "integer" + "date": { + "type": "string" }, - "data": { - "$ref": "#/definitions/gdelt.SearchResponse" + "fee": { + "type": "string" }, - "msg": { - "example": "OK", + "from": { + "allOf": [ + { + "$ref": "#/definitions/flashscore.TransferTeam" + } + ], + "description": "From and To are null when the page shows no club on that side." + }, + "to": { + "$ref": "#/definitions/flashscore.TransferTeam" + }, + "type": { "type": "string" } }, "type": "object" }, - "gdelt.timelineResponseDoc": { + "flashscore.PlayerTransfersResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "page_url": { + "type": "string" }, - "data": { - "$ref": "#/definitions/gdelt.TimelineResponse" + "player": { + "$ref": "#/definitions/flashscore.PlayerProfile" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" + }, + "transfer_count": { + "type": "integer" + }, + "transfers": { + "items": { + "$ref": "#/definitions/flashscore.PlayerTransfer" + }, + "type": "array" } }, "type": "object" }, - "gdelt.toneChartResponseDoc": { + "flashscore.PrematchScorer": { "properties": { - "code": { - "example": 200, + "goals": { "type": "integer" }, - "data": { - "$ref": "#/definitions/gdelt.ToneChartResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "player_id": { "type": "string" } }, "type": "object" }, - "gdelt.tvCapNlpEntityDetailsResponseDoc": { + "flashscore.PrematchScorerGoal": { "properties": { - "code": { - "example": 200, + "goals": { "type": "integer" }, - "data": { - "$ref": "#/definitions/gdelt.TVCapNlpEntityDetailsResponse" - }, - "msg": { - "example": "OK", + "player_id": { "type": "string" } }, "type": "object" }, - "gdelt.tvSearchResponseDoc": { + "flashscore.PrematchScorerMatch": { "properties": { - "code": { - "example": 200, - "type": "integer" + "id": { + "type": "string" }, - "data": { - "$ref": "#/definitions/gdelt.TVClipSearchResponse" + "player_goals": { + "items": { + "$ref": "#/definitions/flashscore.PrematchScorerGoal" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "start_time": { + "type": "integer" } }, "type": "object" }, - "gdelt.tvShowChartResponseDoc": { + "flashscore.PrematchScorerStat": { "properties": { - "code": { - "example": 200, - "type": "integer" + "raw_value": { + "type": "string" }, - "data": { - "$ref": "#/definitions/gdelt.TVShowChartResponse" + "type_id": { + "type": "string" }, - "msg": { - "example": "OK", + "value": { "type": "string" } }, "type": "object" }, - "gdelt.tvStationChartResponseDoc": { + "flashscore.PrematchScorerTeam": { "properties": { - "code": { - "example": 200, - "type": "integer" + "competition_stats": { + "items": { + "$ref": "#/definitions/flashscore.PrematchScorerStat" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/gdelt.TVStationChartResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "recent_matches": { + "items": { + "$ref": "#/definitions/flashscore.PrematchScorerMatch" + }, + "type": "array" + }, + "recent_stats": { + "items": { + "$ref": "#/definitions/flashscore.PrematchScorerStat" + }, + "type": "array" + }, + "side": { + "enum": [ + "home", + "away" + ], "type": "string" + }, + "top_scorers": { + "items": { + "$ref": "#/definitions/flashscore.PrematchScorer" + }, + "type": "array" } }, "type": "object" }, - "gdelt.tvStationDetailsResponseDoc": { + "flashscore.PrematchScorersResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/gdelt.TVStationDetailsResponse" + "match_id": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" + }, + "stat_types": { + "items": { + "$ref": "#/definitions/flashscore.ScorerStatType" + }, + "type": "array" + }, + "teams": { + "items": { + "$ref": "#/definitions/flashscore.PrematchScorerTeam" + }, + "type": "array" } }, "type": "object" }, - "gdelt.tvTimelineResponseDoc": { + "flashscore.ScorerStatType": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/gdelt.TVTimelineResponse" + "id": { + "type": "string" }, - "msg": { - "example": "OK", + "label": { "type": "string" } }, "type": "object" }, - "gdelt.tvVisualEntityDetailsResponseDoc": { + "flashscore.SquadColumn": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/gdelt.TVVisualEntityDetailsResponse" + "key": { + "type": "string" }, - "msg": { - "example": "OK", + "label": { "type": "string" } }, "type": "object" }, - "gdelt.tvWordCloudResponseDoc": { + "flashscore.SquadGroup": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/gdelt.TVWordCloudResponse" + "columns": { + "items": { + "$ref": "#/definitions/flashscore.SquadColumn" + }, + "type": "array" }, - "msg": { - "example": "OK", + "name": { "type": "string" + }, + "players": { + "items": { + "$ref": "#/definitions/flashscore.SquadPlayer" + }, + "type": "array" } }, "type": "object" }, - "geocoding.Address": { + "flashscore.SquadPlayer": { "properties": { - "ISO3166-2-lvl4": { - "description": "ISO 3166-2 code for the state or region level, such as `US-NY`.", - "example": "US-NY", + "absence": { "type": "string" }, - "ISO3166-2-lvl6": { - "description": "ISO 3166-2 code for the level-6 administrative area, when one exists.", - "type": "string" + "age": { + "type": "integer" }, - "city": { - "description": "City of the place.", - "example": "New York", + "club": { "type": "string" }, "country": { - "description": "Country name of the place.", - "example": "United States", - "type": "string" - }, - "country_code": { - "description": "Two-letter country code of the place in lowercase, such as `us`.", - "example": "us", - "type": "string" - }, - "county": { - "description": "County of the place.", - "example": "New York County", - "type": "string" - }, - "house_number": { - "description": "House number of the place.", - "example": "350", - "type": "string" - }, - "neighbourhood": { - "description": "Neighbourhood of the place.", - "example": "Koreatown", - "type": "string" - }, - "office": { - "description": "Office name of the place, such as `Empire State Building`.", - "example": "Empire State Building", - "type": "string" - }, - "postcode": { - "description": "Postal code of the place.", - "example": "10118", "type": "string" }, - "road": { - "description": "Street name of the place.", - "example": "5th Avenue", + "jersey_number": { "type": "string" }, - "state": { - "description": "State or region of the place.", - "example": "New York", + "name": { "type": "string" }, - "state_district": { - "description": "State district of the place.", + "path": { "type": "string" }, - "suburb": { - "description": "Suburb or borough of the place.", - "example": "Manhattan", + "player_id": { "type": "string" }, - "town": { - "description": "Town of the place.", + "slug": { "type": "string" }, - "village": { - "description": "Village of the place.", - "type": "string" + "stats": { + "additionalProperties": {}, + "type": "object" } }, "type": "object" }, - "geocoding.LookupResponse": { + "flashscore.SquadScope": { "properties": { - "query": { - "example": "W34633854,N123", + "key": { "type": "string" }, - "results": { - "items": { - "$ref": "#/definitions/geocoding.Place" - }, - "type": "array" + "name": { + "type": "string" } }, "type": "object" }, - "geocoding.Place": { + "flashscore.TeamCompetition": { "properties": { - "address": { - "allOf": [ - { - "$ref": "#/definitions/geocoding.Address" - } - ], - "description": "Structured address breakdown of the place." - }, - "addresstype": { - "description": "Type of address the place represents, such as `office`.", - "example": "office", + "country": { "type": "string" }, - "boundingbox": { - "description": "Bounding box of the place as four decimal-degree strings: south latitude, north latitude, west longitude, east longitude.", - "example": [ - "40.7479255", - "40.7489585", - "-73.9865012", - "-73.9848166" - ], - "items": { - "type": "string" - }, - "type": "array" + "full_name": { + "type": "string" }, - "category": { - "description": "OpenStreetMap category of the place, such as `office`.", - "example": "office", + "name": { "type": "string" }, - "display_name": { - "description": "Full address of the place as a comma-separated string.", - "example": "Empire State Building, 350, 5th Avenue, New York, United States", + "path": { "type": "string" + } + }, + "type": "object" + }, + "flashscore.TeamEvent": { + "properties": { + "away": { + "$ref": "#/definitions/flashscore.EventSide" }, - "extratags": { - "additionalProperties": { - "type": "string" - }, - "description": "Additional OpenStreetMap tags of the place. Present only when `extratags` is requested.", - "type": "object" + "away_score": { + "type": "integer" }, - "importance": { - "description": "Importance score of the place; higher values mean a more prominent place.", - "example": 0.5803438355141769, - "type": "number" + "competition": { + "$ref": "#/definitions/flashscore.EventCompetition" }, - "lat": { - "description": "Latitude of the place in decimal degrees, as a string.", - "example": "40.7484421", - "type": "string" + "home": { + "$ref": "#/definitions/flashscore.EventSide" }, - "licence": { - "description": "Licence notice for the OpenStreetMap data.", - "example": "Data © OpenStreetMap contributors, ODbL 1.0. http://osm.org/copyright", - "type": "string" + "home_score": { + "type": "integer" }, - "lon": { - "description": "Longitude of the place in decimal degrees, as a string.", - "example": "-73.9856589", + "id": { "type": "string" }, - "name": { - "description": "Name of the place.", - "example": "Empire State Building", + "stage": { "type": "string" }, - "namedetails": { - "additionalProperties": { - "type": "string" - }, - "description": "Alternative names of the place. Present only when `namedetails` is requested.", - "type": "object" + "stage_code": { + "type": "integer" }, - "osm_id": { - "description": "OpenStreetMap id of the object.", - "example": 34633854, + "start_time": { "type": "integer" }, - "osm_type": { - "description": "OpenStreetMap object type, such as `way`.", - "example": "way", + "start_time_iso": { "type": "string" }, - "place_id": { - "description": "Numeric id of the place in the geocoding results.", - "example": 358220252, - "type": "integer" - }, - "place_rank": { - "description": "Address rank of the place; for example `30` for a building.", - "example": 30, + "status_code": { "type": "integer" - }, - "type": { - "description": "OpenStreetMap type of the place within its `category`, such as `yes`.", - "example": "yes", - "type": "string" } }, "type": "object" }, - "geocoding.SearchResponse": { + "flashscore.TeamEventsResponse": { "properties": { - "query": { - "description": "Query that was run. For a structured search, the address fields joined with commas.", - "example": "Empire State Building", - "type": "string" + "event_count": { + "type": "integer" }, - "results": { - "description": "Places matching the query.", + "events": { "items": { - "$ref": "#/definitions/geocoding.Place" + "$ref": "#/definitions/flashscore.TeamEvent" }, "type": "array" - } - }, - "type": "object" - }, - "geocoding.lookupResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/geocoding.LookupResponse" + "section": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" - } - }, - "type": "object" - }, - "geocoding.reverseResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/geocoding.Place" + "team_id": { + "type": "string" }, - "msg": { - "example": "OK", + "team_name": { "type": "string" } }, "type": "object" }, - "geocoding.searchResponseDoc": { + "flashscore.TeamNewsItem": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/geocoding.SearchResponse" + "id": { + "type": "string" }, - "msg": { - "example": "OK", + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "ghanaweb.ArchiveItem": { - "properties": { - "updated_at": { + }, + "link": { "type": "string" }, - "url": { + "published_at": { + "type": "integer" + }, + "published_at_iso": { "type": "string" - } - }, - "type": "object" - }, - "ghanaweb.ArchiveMonth": { - "properties": { - "month": { + }, + "publisher": { "type": "string" }, - "updated_at": { + "title": { "type": "string" } }, "type": "object" }, - "ghanaweb.ArchiveMonthsResponse": { - "properties": { - "months": { - "items": { - "$ref": "#/definitions/ghanaweb.ArchiveMonth" - }, - "type": "array" - } - }, - "type": "object" - }, - "ghanaweb.ArchiveResponse": { + "flashscore.TeamNewsResponse": { "properties": { + "item_count": { + "type": "integer" + }, "items": { "items": { - "$ref": "#/definitions/ghanaweb.ArchiveItem" + "$ref": "#/definitions/flashscore.TeamNewsItem" }, "type": "array" }, - "limit": { - "type": "integer" - }, - "month": { + "source_url": { "type": "string" }, - "page": { - "type": "integer" + "team_id": { + "type": "string" }, - "total": { - "type": "integer" + "team_name": { + "type": "string" } }, "type": "object" }, - "ghanaweb.VideoItem": { + "flashscore.TeamOutrightOddsResponse": { "properties": { - "id": { - "type": "string" + "bookmakers": { + "items": { + "$ref": "#/definitions/flashscore.OddsBookmaker" + }, + "type": "array" }, - "image_url": { + "geo": { "type": "string" }, - "published_at": { + "has_more": { + "type": "boolean" + }, + "source_url": { "type": "string" }, - "title": { + "subdivision": { "type": "string" }, - "url": { + "team_id": { "type": "string" }, - "views": { + "team_name": { "type": "string" + }, + "tournaments": { + "items": { + "$ref": "#/definitions/flashscore.OutrightTournament" + }, + "type": "array" } }, "type": "object" }, - "ghanaweb.VideoResponse": { + "flashscore.TeamProfile": { "properties": { - "embed_url": { + "country": { + "type": "string" + }, + "country_id": { + "type": "integer" + }, + "full_name": { "type": "string" }, "id": { "type": "string" }, - "image_url": { + "logo_url": { "type": "string" }, - "published_at": { + "name": { "type": "string" }, - "title": { + "path": { "type": "string" }, - "updated_at": { + "slug": { + "type": "string" + }, + "sport": { "type": "string" }, + "sport_id": { + "type": "integer" + }, "url": { "type": "string" } }, "type": "object" }, - "ghanaweb.VideoSection": { + "flashscore.TeamResponse": { "properties": { - "name": { - "type": "string" + "competitions": { + "items": { + "$ref": "#/definitions/flashscore.TeamCompetition" + }, + "type": "array" }, - "slug": { + "page_url": { "type": "string" }, - "url": { + "source_url": { "type": "string" + }, + "team": { + "$ref": "#/definitions/flashscore.TeamProfile" + }, + "venue": { + "$ref": "#/definitions/flashscore.TeamVenue" } }, "type": "object" }, - "ghanaweb.VideoSectionsResponse": { + "flashscore.TeamSquadResponse": { "properties": { - "sections": { + "groups": { "items": { - "$ref": "#/definitions/ghanaweb.VideoSection" + "$ref": "#/definitions/flashscore.SquadGroup" + }, + "type": "array" + }, + "scope": { + "$ref": "#/definitions/flashscore.SquadScope" + }, + "scopes": { + "items": { + "$ref": "#/definitions/flashscore.SquadScope" }, "type": "array" + }, + "source_url": { + "type": "string" + }, + "team": { + "$ref": "#/definitions/flashscore.TeamProfile" } }, "type": "object" }, - "ghanaweb.VideosResponse": { + "flashscore.TeamTransfer": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/ghanaweb.VideoItem" - }, - "type": "array" + "date": { + "type": "string" }, - "section": { + "direction": { + "type": "string" + }, + "fee": { + "type": "string" + }, + "from": { + "allOf": [ + { + "$ref": "#/definitions/flashscore.TransferTeam" + } + ], + "description": "From and To are null when the player had no club on that side (for\nexample a free agent released at the end of a contract)." + }, + "player": { + "$ref": "#/definitions/flashscore.TransferPlayer" + }, + "to": { + "$ref": "#/definitions/flashscore.TransferTeam" + }, + "type": { "type": "string" } }, "type": "object" }, - "gizmodo.AuthorResponse": { + "flashscore.TeamTransfersResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "page": { + "type": "integer" }, - "image_url": { + "source_url": { "type": "string" }, - "name": { + "team_id": { "type": "string" }, - "role": { + "team_name": { "type": "string" }, - "social_links": { + "transfer_count": { + "type": "integer" + }, + "transfers": { "items": { - "$ref": "#/definitions/gizmodo.AuthorSocialLink" + "$ref": "#/definitions/flashscore.TeamTransfer" }, "type": "array" }, - "url": { + "type": { "type": "string" } }, "type": "object" }, - "gizmodo.AuthorSocialLink": { + "flashscore.TeamVenue": { "properties": { - "type": { + "capacity": { + "type": "integer" + }, + "city": { "type": "string" }, - "url": { + "stadium": { "type": "string" } }, "type": "object" }, - "globalnews.AuthorResponse": { + "flashscore.TournamentArchiveSeasonsResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" + "league_key": { + "type": "string" }, - "biography": { + "season_count": { + "type": "integer" + }, + "seasons": { "items": { - "type": "string" + "$ref": "#/definitions/flashscore.ArchiveSeason" }, "type": "array" }, - "image_url": { + "source_url": { "type": "string" }, - "name": { - "type": "string" + "stage": { + "$ref": "#/definitions/flashscore.ArchiveStage" }, - "title": { + "stage_id": { "type": "string" }, - "url": { + "tournament_template_id": { "type": "string" } }, "type": "object" }, - "globeandmail.ArticleResponse": { + "flashscore.TournamentDrawMatch": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" + "away_extra_time_score": { + "type": "integer" }, - "dateline": { - "type": "string" + "away_index": { + "type": "integer" }, - "description": { - "type": "string" + "away_penalty_score": { + "type": "integer" }, - "image_url": { + "away_regular_score": { + "type": "integer" + }, + "event_id": { "type": "string" }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" + "home_extra_time_score": { + "type": "integer" }, - "published_at": { - "type": "string" + "home_index": { + "type": "integer" }, - "section": { - "type": "string" + "home_penalty_score": { + "type": "integer" }, - "title": { - "type": "string" + "home_regular_score": { + "type": "integer" }, - "updated_at": { + "score": { "type": "string" }, - "url": { - "type": "string" + "start_time": { + "type": "integer" } }, "type": "object" }, - "globeandmail.AuthorResponse": { + "flashscore.TournamentDrawParticipant": { "properties": { - "articles": { + "index": { + "type": "integer" + }, + "member_ids": { "items": { - "$ref": "#/definitions/globeandmail.HeadlineItem" + "type": "string" }, "type": "array" }, - "biography": { + "name": { + "type": "string" + } + }, + "type": "object" + }, + "flashscore.TournamentDrawResponse": { + "properties": { + "participants": { "items": { - "type": "string" + "$ref": "#/definitions/flashscore.TournamentDrawParticipant" }, "type": "array" }, - "email": { - "type": "string" + "rounds": { + "items": { + "$ref": "#/definitions/flashscore.TournamentDrawRound" + }, + "type": "array" }, - "image_url": { + "source_url": { "type": "string" }, - "job_title": { + "stage_id": { "type": "string" }, - "location": { + "tournament_id": { "type": "string" + } + }, + "type": "object" + }, + "flashscore.TournamentDrawRound": { + "properties": { + "id": { + "type": "integer" }, "name": { "type": "string" }, - "social_links": { + "slots": { "items": { - "type": "string" + "$ref": "#/definitions/flashscore.TournamentDrawSlot" }, "type": "array" - }, - "url": { - "type": "string" } }, "type": "object" }, - "globeandmail.HeadlineItem": { + "flashscore.TournamentDrawSlot": { "properties": { - "author": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "published_at": { - "type": "string" + "away_index": { + "type": "integer" }, - "summary": { + "away_seed": { "type": "string" }, - "title": { - "type": "string" + "home_index": { + "type": "integer" }, - "type": { + "home_seed": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "globeandmail.HeadlinesResponse": { - "properties": { - "items": { + "matches": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/flashscore.TournamentDrawMatch" }, "type": "array" }, - "section": { + "winner_side": { + "enum": [ + "home", + "away" + ], "type": "string" } }, "type": "object" }, - "globeandmail.NewsResponse": { + "flashscore.TournamentOutrightOddsResponse": { "properties": { - "items": { + "bookmakers": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/flashscore.OddsBookmaker" }, "type": "array" - } - }, - "type": "object" - }, - "globeandmail.SectionsResponse": { - "properties": { - "sections": { + }, + "geo": { + "type": "string" + }, + "has_more": { + "type": "boolean" + }, + "participants": { "items": { - "$ref": "#/definitions/newsplatform.Section" + "$ref": "#/definitions/flashscore.OutrightParticipant" }, "type": "array" + }, + "source_url": { + "type": "string" + }, + "subdivision": { + "type": "string" + }, + "tournament_id": { + "type": "string" } }, "type": "object" }, - "globeandmail.articleResponseDoc": { + "flashscore.TransferPlayer": { "properties": { - "code": { - "example": 200, - "type": "integer" + "country": { + "type": "string" }, - "data": { - "$ref": "#/definitions/globeandmail.ArticleResponse" + "id": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "slug": { "type": "string" } }, "type": "object" }, - "globeandmail.authorResponseDoc": { + "flashscore.TransferTeam": { "properties": { - "code": { - "example": 200, - "type": "integer" + "id": { + "type": "string" }, - "data": { - "$ref": "#/definitions/globeandmail.AuthorResponse" + "logo_url": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "slug": { "type": "string" } }, "type": "object" }, - "globeandmail.headlinesResponseDoc": { + "flashscore.broadcasterDoc": { "properties": { - "code": { - "example": 200, + "affiliate": { + "description": "Affiliate marks entries the provider flags as affiliate links; their tracking URL is omitted.", + "example": false, + "type": "boolean" + }, + "id": { + "example": 680, "type": "integer" }, - "data": { - "$ref": "#/definitions/globeandmail.HeadlinesResponse" + "name": { + "example": "Sky Sports Premier League (Gbr)", + "type": "string" }, - "msg": { - "example": "OK", + "url": { + "example": "http://www.skysports.com/", "type": "string" } }, "type": "object" }, - "globeandmail.newsResponseDoc": { + "flashscore.calendarCategoriesDataDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/globeandmail.NewsResponse" + "categories": { + "items": { + "$ref": "#/definitions/flashscore.calendarCategoryDoc" + }, + "type": "array" }, - "msg": { - "example": "OK", + "source_url": { + "example": "https://www.flashscore.com/", "type": "string" } }, "type": "object" }, - "globeandmail.sectionsResponseDoc": { + "flashscore.calendarCategoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/globeandmail.SectionsResponse" + "$ref": "#/definitions/flashscore.calendarCategoriesDataDoc" }, "msg": { "example": "OK", @@ -93797,804 +99587,850 @@ }, "type": "object" }, - "goat.CollectionProduct": { + "flashscore.calendarCategoryDoc": { "properties": { - "category": { - "example": "shoes", - "type": "string" - }, - "id": { - "example": "1481726", - "type": "string" - }, - "image_url": { - "type": "string" - }, - "release_year": { - "example": "2025", + "key": { + "example": "tennis-atp", "type": "string" }, - "slug": { - "example": "air-jordan-4-retro-rare-air-fv5029-003", + "name": { + "example": "ATP Tour Calendar", "type": "string" }, - "source_url": { - "example": "https://www.goat.com/sneakers/air-jordan-4-retro-rare-air-fv5029-003", + "path": { + "example": "/tennis/calendar/atp/", "type": "string" }, - "title": { - "example": "Air Jordan 4 Retro 'Rare Air - White Lettering'", + "sport": { + "example": "tennis", "type": "string" } }, "type": "object" }, - "goat.CollectionResponse": { + "flashscore.calendarDataDoc": { "properties": { - "limit": { - "example": 12, - "type": "integer" - }, - "page": { - "example": 1, - "type": "integer" + "category": { + "$ref": "#/definitions/flashscore.calendarCategoryDoc" }, - "products": { + "events": { "items": { - "$ref": "#/definitions/goat.CollectionProduct" + "$ref": "#/definitions/flashscore.calendarEventDoc" }, "type": "array" }, - "slug": { - "example": "top-trending-uk", + "source_url": { + "example": "https://2.ds.lsapp.eu/pq_graphql?_hash=scs&projectId=2&sportId=2", "type": "string" }, - "total_results": { - "example": 48, - "type": "integer" - } - }, - "type": "object" - }, - "goat.CountriesResponse": { - "properties": { - "countries": { - "items": { - "$ref": "#/definitions/goat.Country" - }, - "type": "array" - }, - "ships_to_total": { - "description": "ShipsToTotal counts the subset GOAT ships to.", - "example": 170, - "type": "integer" - }, - "total": { - "example": 249, + "year": { + "example": 2026, "type": "integer" } }, "type": "object" }, - "goat.Country": { + "flashscore.calendarEventDoc": { "properties": { - "country_code": { - "example": "US", - "type": "string" - }, - "currency": { - "example": "USD", + "country": { + "example": "France", "type": "string" }, - "display_name": { - "example": "United States", + "date": { + "example": "24.05. - 07.06.", "type": "string" }, - "flag": { - "example": "🇺🇸", + "end_time": { + "example": "2026-06-07T13:00:00Z", "type": "string" }, - "local_name": { - "example": "United States", + "month": { + "example": "May 2026", "type": "string" }, "name": { - "example": "United States", + "example": "French Open ATP, clay", "type": "string" }, - "phone_code": { - "example": "1", + "path": { + "example": "/tennis/atp-singles/french-open/", "type": "string" }, - "returns_from": { - "example": true, - "type": "boolean" - }, - "ships_to": { - "description": "ShipsTo reports whether GOAT ships orders to this country. It does\nnot gate country_code, which is accepted for every country here.", - "example": true, - "type": "boolean" + "start_time": { + "example": "2026-05-24T09:00:00Z", + "type": "string" }, - "size_unit": { - "description": "SizeUnit is the size system GOAT shows for this country: us, uk, eu.", - "example": "us", + "winner": { + "example": "Zverev Alexander", "type": "string" }, - "tax_included": { - "example": false, - "type": "boolean" + "winner_path": { + "example": "/player/zverev-alexander/dGbUhw9m/", + "type": "string" } }, "type": "object" }, - "goat.CuratedLink": { + "flashscore.calendarResponseDoc": { "properties": { - "collection_slug": { - "description": "CollectionSlug is GOAT's own collection identifier. A readable slug\nworks on GET /goat/collection; a bare numeric id (which GOAT also\nemits here) belongs to an internal id space that endpoint does not\naccept and returns no results. Confirmed live 2026-09-07 --\nback-to-school-2026 returns 470 products, 31841 returns none.", - "example": "back-to-school-2026", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "filter_key": { - "example": "group_id", + "data": { + "$ref": "#/definitions/flashscore.calendarDataDoc" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "flashscore.competitionDoc": { + "properties": { + "event_count": { + "example": 10, + "type": "integer" }, - "filter_value": { - "example": "all", + "id": { + "example": "8bP2bXmH", "type": "string" }, - "query": { - "example": "Awake NY x Air Jordan 6", + "name": { + "example": "AFRICA: Africa Cup of Nations - Qualification", "type": "string" }, - "title": { - "example": "Back To School", + "path": { + "example": "/football/africa/africa-cup-of-nations/", "type": "string" }, - "type": { - "enum": [ - "collection", - "search", - "browse" - ], - "example": "collection", + "region": { + "example": "Africa", "type": "string" } }, "type": "object" }, - "goat.CuratedResponse": { + "flashscore.competitionsDataDoc": { "properties": { - "links": { + "competitions": { "items": { - "$ref": "#/definitions/goat.CuratedLink" + "$ref": "#/definitions/flashscore.competitionDoc" }, "type": "array" }, - "total": { - "example": 10, + "day_offset": { + "example": 0, "type": "integer" - } - }, - "type": "object" - }, - "goat.FeaturedLink": { - "properties": { - "name": { - "example": "Jordan 3 True Blue 2026", - "type": "string" }, "source_url": { - "example": "https://www.goat.com/sneakers/air-jordan-3-true-blue-2026-if4396-104", + "example": "https://global.flashscore.ninja/2/x/feed/f_1_0_8_en_1", + "type": "string" + }, + "sport": { + "example": "football", "type": "string" } }, "type": "object" }, - "goat.ListingsCountResponse": { - "properties": { - "total_listings": { - "example": 601141, - "type": "integer" - } - }, - "type": "object" - }, - "goat.Price": { + "flashscore.competitionsResponseDoc": { "properties": { - "amount_cents": { - "example": 49100, + "code": { + "example": 200, "type": "integer" }, - "currency": { - "example": "USD", + "data": { + "$ref": "#/definitions/flashscore.competitionsDataDoc" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "goat.ProductDetail": { + "flashscore.dartsLegDoc": { "properties": { - "brand_name": { - "example": "Air Jordan", - "type": "string" + "away_legs": { + "example": 1, + "type": "integer" }, - "category": { - "example": "shoes", - "type": "string" + "checkout": { + "example": 84, + "type": "integer" }, - "colorway": { - "example": "Cream", - "type": "string" + "home_legs": { + "example": 0, + "type": "integer" }, - "colorway_detail": { - "example": "Varsity Red/Black/Sail/Muslin", - "type": "string" + "in_progress": { + "description": "True only for the leg being played in a live match.", + "example": true, + "type": "boolean" }, - "designer": { - "example": "Peter Moore", - "type": "string" + "number": { + "example": 1, + "type": "integer" }, - "featured_in": { - "items": { - "$ref": "#/definitions/goat.FeaturedLink" - }, - "type": "array" + "set": { + "description": "Only present for set-play matches: the set the leg belongs to.", + "example": 1, + "type": "integer" }, - "gender": { - "example": [ - "men" + "start_score": { + "example": 501, + "type": "integer" + }, + "starter": { + "enum": [ + "home", + "away" ], + "example": "away", + "type": "string" + }, + "visits": { "items": { - "type": "string" + "$ref": "#/definitions/flashscore.dartsVisitDoc" }, "type": "array" }, - "id": { - "example": "1469452", + "winner": { + "description": "Empty while the leg is still being played.", + "enum": [ + "home", + "away" + ], + "example": "away", "type": "string" + } + }, + "type": "object" + }, + "flashscore.dartsSetStatisticsDoc": { + "properties": { + "set": { + "example": 1, + "type": "integer" }, - "images": { + "statistics": { "items": { - "$ref": "#/definitions/goat.ProductImage" + "$ref": "#/definitions/flashscore.dartsStatisticDoc" }, "type": "array" - }, - "midsole": { - "example": "Air", + } + }, + "type": "object" + }, + "flashscore.dartsStatisticDoc": { + "properties": { + "away": { + "example": "97.05", "type": "string" }, - "name": { - "example": "Fragment Design x Travis Scott x Air Jordan 1 Retro Low OG SP 'Sail Military Blue'", + "home": { + "example": "92.91", "type": "string" }, - "nickname": { - "example": "Sail Military Blue", + "id": { + "example": "55", "type": "string" }, - "picture_url": { + "key": { + "enum": [ + "average_3_darts", + "180_thrown", + "140_plus_thrown", + "100_plus_thrown", + "checkouts", + "checkouts_100_plus", + "highest_checkout", + "legs_won" + ], + "example": "average_3_darts", "type": "string" }, - "product_type": { - "example": "sneakers", + "name": { + "example": "Average (3 darts)", "type": "string" - }, - "release_date": { - "example": "2025-11-15", + } + }, + "type": "object" + }, + "flashscore.dartsVisitDoc": { + "properties": { + "highlight": { + "enum": [ + "180", + "140_plus" + ], + "example": "180", "type": "string" }, - "retail_price": { - "$ref": "#/definitions/goat.Price" + "number": { + "example": 5, + "type": "integer" }, - "silhouette": { - "example": "Air Jordan 1", + "remaining": { + "example": 165, + "type": "integer" + }, + "scored": { + "example": 180, + "type": "integer" + }, + "side": { + "enum": [ + "home", + "away" + ], + "example": "away", "type": "string" + } + }, + "type": "object" + }, + "flashscore.formationLineDoc": { + "properties": { + "number": { + "example": 1, + "type": "integer" }, - "size_range": { + "rows": { "items": { - "type": "number" + "$ref": "#/definitions/flashscore.formationRowDoc" }, "type": "array" - }, - "size_unit": { - "example": "us", - "type": "string" - }, - "sizes": { + } + }, + "type": "object" + }, + "flashscore.formationRowDoc": { + "properties": { + "player_ids": { + "example": [ + "x2zyKcHK" + ], "items": { - "$ref": "#/definitions/goat.SizePrice" + "type": "string" }, "type": "array" }, - "sku": { - "example": "DM7866 104", - "type": "string" + "sort_key": { + "example": 0, + "type": "integer" + } + }, + "type": "object" + }, + "flashscore.lineupAggregatedStatsDoc": { + "properties": { + "average_age": { + "example": 26.6, + "type": "number" }, - "slug": { - "example": "fragment-design-x-travis-scott-x-air-jordan-1-low-og-sp-sail-military-blue-dm7866-104", - "type": "string" + "average_height_cm": { + "example": 181.1, + "type": "number" }, - "source_url": { - "example": "https://www.goat.com/sneakers/fragment-design-x-travis-scott-x-air-jordan-1-low-og-sp-sail-military-blue-dm7866-104", - "type": "string" + "average_rating": { + "example": 6.7, + "type": "number" }, - "story": { + "sum_market_value": { + "example": 47598854, + "type": "number" + } + }, + "type": "object" + }, + "flashscore.lineupGroupDoc": { + "properties": { + "name": { + "example": "Predicted lineups", "type": "string" }, - "taxonomy": { + "player_ids": { + "example": [ + "x2zyKcHK" + ], "items": { "type": "string" }, "type": "array" }, - "upper_material": { - "example": "Leather", + "type": { + "example": "PREDICTED_STARTERS", "type": "string" } }, "type": "object" }, - "goat.ProductImage": { + "flashscore.lineupIncidentDoc": { "properties": { - "aspect": { - "example": 1.5, - "type": "number" + "hidden": { + "example": false, + "type": "boolean" }, - "image_url": { + "minute": { + "example": "60'", "type": "string" }, - "order": { - "example": 1, - "type": "integer" + "player_in_id": { + "example": "S4KKxXdC", + "type": "string" + }, + "reasons": { + "example": [ + "Tripping" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "example": "YellowCard", + "type": "string" } }, "type": "object" }, - "goat.ProductSummary": { + "flashscore.lineupPlayerDoc": { "properties": { - "brand_name": { - "example": "Air Jordan", - "type": "string" + "age": { + "example": 35, + "type": "number" }, - "category": { - "example": "shoes", - "type": "string" + "average_rating": { + "example": 7, + "type": "number" }, - "gender": { - "example": "men", + "country": { + "example": "Brazil", "type": "string" }, + "height_cm": { + "example": 189, + "type": "number" + }, "id": { - "example": "1469452", + "example": "x2zyKcHK", "type": "string" }, - "image_url": { + "list_name": { + "example": "Tiago Volpi", "type": "string" }, - "in_stock": { - "example": true, - "type": "boolean" - }, - "instant_lowest_price": { - "$ref": "#/definitions/goat.Price" - }, - "lowest_price": { - "$ref": "#/definitions/goat.Price" + "market_value": { + "example": 880751, + "type": "number" }, - "product_type": { - "example": "sneakers", + "name": { + "example": "Tiago Volpi", "type": "string" }, - "release_date": { - "example": "2025-11-15", + "number": { + "example": "18", "type": "string" }, - "retail_price": { - "$ref": "#/definitions/goat.Price" - }, - "silhouette": { - "example": "Air Jordan 1", - "type": "string" + "roles": { + "items": { + "$ref": "#/definitions/flashscore.lineupRoleDoc" + }, + "type": "array" }, "slug": { - "example": "fragment-design-x-travis-scott-x-air-jordan-1-low-og-sp-sail-military-blue-dm7866-104", + "example": "tiago-volpi", "type": "string" + } + }, + "type": "object" + }, + "flashscore.lineupRatingDoc": { + "properties": { + "is_best": { + "example": false, + "type": "boolean" }, - "source_url": { - "example": "https://www.goat.com/sneakers/fragment-design-x-travis-scott-x-air-jordan-1-low-og-sp-sail-military-blue-dm7866-104", + "value": { + "example": 8, + "type": "number" + } + }, + "type": "object" + }, + "flashscore.lineupRoleDoc": { + "properties": { + "suffix": { + "example": "(G)", "type": "string" }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, "title": { - "example": "Fragment Design x Travis Scott x Air Jordan 1 Retro Low OG SP 'Sail Military Blue'", + "example": "Goalkeeper", "type": "string" - }, - "under_retail": { - "example": false, - "type": "boolean" } }, "type": "object" }, - "goat.RecommendedProduct": { + "flashscore.lineupSubstitutionDoc": { "properties": { - "brand_name": { - "example": "Nike", + "id": { + "example": "AkY1pAJH", "type": "string" }, - "category": { - "example": "shoes", + "minute": { + "example": "46'", "type": "string" }, - "colorway": { - "example": "Black", + "player_in_id": { + "example": "S4KKxXdC", "type": "string" }, - "id": { - "example": "585882", + "player_out_id": { + "example": "6DGXE64C", + "type": "string" + } + }, + "type": "object" + }, + "flashscore.matchBoxScoreColumnDoc": { + "properties": { + "format": { + "enum": [ + "num", + "time", + "fg" + ], + "example": "num", "type": "string" }, - "name": { - "example": "Travis Scott x Nike Dunk Low Premium QS SB 'Cactus Jack'", + "key": { + "example": "PTS", "type": "string" }, - "product_type": { - "example": "sneakers", + "label": { + "example": "Points", + "type": "string" + } + }, + "type": "object" + }, + "flashscore.matchBoxScoreDataDoc": { + "properties": { + "match_id": { + "example": "KzoOQu6j", "type": "string" }, - "release_date": { - "example": "2020-02-29", + "source_url": { + "example": "https://global.flashscore.ninja/2/x/feed/df_psn_1_KzoOQu6j", "type": "string" }, - "retail_price": { - "$ref": "#/definitions/goat.Price" + "teams": { + "items": { + "$ref": "#/definitions/flashscore.matchBoxScoreTeamDoc" + }, + "type": "array" + } + }, + "type": "object" + }, + "flashscore.matchBoxScorePlayerDoc": { + "properties": { + "country": { + "example": "USA", + "type": "string" }, - "sku": { - "example": "CT5053 001", + "name": { + "example": "Soares R.", + "type": "string" + }, + "player_id": { + "example": "lGyAxL74", "type": "string" }, "slug": { - "example": "travis-scott-x-dunk-low-sb-ct5053-101", + "example": "soares-rivaldo", "type": "string" }, - "source_url": { - "example": "https://www.goat.com/sneakers/travis-scott-x-dunk-low-sb-ct5053-101", + "stats": { + "additionalProperties": { + "type": "string" + }, + "description": "Stats maps each column key to the displayed value; a dash from the provider is null.", + "type": "object" + }, + "status": { "type": "string" } }, "type": "object" }, - "goat.RecommendedResponse": { + "flashscore.matchBoxScoreResponseDoc": { "properties": { - "products": { - "items": { - "$ref": "#/definitions/goat.RecommendedProduct" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "slug": { - "example": "fragment-design-x-travis-scott-x-air-jordan-1-low-og-sp-sail-military-blue-dm7866-104", + "data": { + "$ref": "#/definitions/flashscore.matchBoxScoreDataDoc" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "goat.SearchFacetsResponse": { + "flashscore.matchBoxScoreTableDoc": { "properties": { - "activities": { - "example": [ - "lifestyle", - "basketball", - "running", - "skateboarding" - ], + "columns": { "items": { - "type": "string" + "$ref": "#/definitions/flashscore.matchBoxScoreColumnDoc" }, "type": "array" }, - "brands": { - "description": "Brands is ordered by product count descending and is GOAT's top\nbrands, not its whole brand universe -- upstream truncates this\nbucket (see BrandsTruncated).", - "example": [ - "nike", - "adidas", - "new-balance", - "puma", - "supreme" - ], + "player_label": { + "example": "Player", + "type": "string" + }, + "players": { "items": { - "type": "string" + "$ref": "#/definitions/flashscore.matchBoxScorePlayerDoc" }, "type": "array" }, - "brands_truncated": { - "description": "BrandsTruncated reports that upstream returned its maximum brand\nbucket size, so brands beyond it exist but are not listed. A brand\nmissing from Brands is still a valid goat_search brands value.", - "example": true, - "type": "boolean" + "type": { + "enum": [ + "player", + "goalkeeper", + "pitcher" + ], + "example": "player", + "type": "string" + } + }, + "type": "object" + }, + "flashscore.matchBoxScoreTeamDoc": { + "properties": { + "name": { + "example": "Hapoel Holon", + "type": "string" }, - "categories": { - "example": [ - "footwear", - "apparel", - "accessories", - "bags", - "collectibles", - "media", - "sports", - "jewelry", + "side": { + "enum": [ "home", - "objects", - "other", - "art" + "away" ], - "items": { - "type": "string" - }, - "type": "array" + "example": "home", + "type": "string" }, - "colors": { - "example": [ - "black", - "white", - "blue", - "grey", - "red", - "green", - "pink", - "cream", - "brown", - "purple", - "multi-color", - "orange", - "tan", - "yellow", - "silver", - "gold", - "teal", - "copper" - ], + "tables": { "items": { - "type": "string" + "$ref": "#/definitions/flashscore.matchBoxScoreTableDoc" }, "type": "array" - }, - "conditions": { - "example": [ - "new_no_defects", - "used", - "new_with_defects", - "goat_clean" - ], + } + }, + "type": "object" + }, + "flashscore.matchDartsDataDoc": { + "properties": { + "legs": { "items": { - "type": "string" + "$ref": "#/definitions/flashscore.dartsLegDoc" }, "type": "array" }, - "genders": { - "example": [ - "men", - "youth", - "infant", - "women" - ], - "items": { - "type": "string" - }, - "type": "array" + "match_id": { + "example": "KMrRR6R1", + "type": "string" }, - "product_types": { - "description": "ProductTypes and Activities are statically maintained, not live --\nGOAT never returns them as aggregation buckets.", - "example": [ - "sneakers", - "sandals", - "cleats", - "boots", - "slip-ons" - ], + "set_statistics": { + "description": "Only present for set-play matches: the statistics of each set.", "items": { - "type": "string" + "$ref": "#/definitions/flashscore.dartsSetStatisticsDoc" }, "type": "array" }, - "years": { - "description": "Years is the vocabulary for goat_search's years parameter, which\nfilters on a product's season year.", - "example": [ - "2026", - "2025", - "2024", - "2023" - ], + "source_url": { + "example": "https://global.flashscore.ninja/2/x/feed/df_mhn_1_KMrRR6R1", + "type": "string" + }, + "statistics": { "items": { - "type": "string" + "$ref": "#/definitions/flashscore.dartsStatisticDoc" }, "type": "array" + }, + "statistics_url": { + "example": "https://global.flashscore.ninja/2/x/feed/df_stn_1_KMrRR6R1", + "type": "string" } }, "type": "object" }, - "goat.SearchResponse": { + "flashscore.matchDartsResponseDoc": { "properties": { - "limit": { - "example": 12, - "type": "integer" - }, - "page": { - "example": 1, + "code": { + "example": 200, "type": "integer" }, - "products": { - "items": { - "$ref": "#/definitions/goat.ProductSummary" - }, - "type": "array" + "data": { + "$ref": "#/definitions/flashscore.matchDartsDataDoc" }, - "query": { - "example": "jordan 1", + "msg": { + "example": "OK", "type": "string" - }, - "total_results": { - "example": 5540, - "type": "integer" - }, - "total_results_capped": { - "description": "TotalResultsCapped reports that upstream saturated total_results at\nits ceiling, so the real match count is higher and unknown. Deeper\npages still return products past that ceiling.", - "example": false, - "type": "boolean" } }, "type": "object" }, - "goat.SizePrice": { + "flashscore.matchLineupPlayerDoc": { "properties": { - "box_condition": { - "example": "good_condition", - "type": "string" - }, - "highest_offer": { - "$ref": "#/definitions/goat.Price" - }, - "instant_ship_lowest_price": { - "$ref": "#/definitions/goat.Price" - }, - "last_sold_price": { - "$ref": "#/definitions/goat.Price" + "age": { + "example": 37, + "type": "number" }, - "lowest_price": { - "$ref": "#/definitions/goat.Price" + "average_rating": { + "example": 6.8, + "type": "number" }, - "shoe_condition": { - "example": "new_no_defects", + "country": { + "example": "Brazil", "type": "string" }, - "size": { - "example": "9", - "type": "string" + "height_cm": { + "example": 192, + "type": "number" }, - "stock_status": { - "example": "single_in_stock", - "type": "string" - } - }, - "type": "object" - }, - "goat.SuggestCollection": { - "properties": { "id": { - "example": "2fbf8b62-8899-4323-89ab-efdbc672d9d0", + "example": "Cx5lvlAM", "type": "string" }, - "slug": { - "example": "michael-jordan", - "type": "string" + "incidents": { + "items": { + "$ref": "#/definitions/flashscore.lineupIncidentDoc" + }, + "type": "array" }, - "title": { - "example": "Michael Jordan", + "list_name": { + "example": "Rafael", "type": "string" }, - "type": { - "example": "StaticCollection", - "type": "string" - } - }, - "type": "object" - }, - "goat.SuggestProduct": { - "properties": { - "category": { - "example": "shoes", - "type": "string" + "market_value": { + "example": 380099, + "type": "number" }, - "id": { - "example": "1403298", + "name": { + "example": "Rafael", "type": "string" }, - "image_url": { + "number": { + "example": "23", "type": "string" }, - "slug": { - "example": "air-jordan-5-og-metallic-2025-hf3975-001", - "type": "string" + "rating": { + "$ref": "#/definitions/flashscore.lineupRatingDoc" }, - "source_url": { - "example": "https://www.goat.com/sneakers/air-jordan-5-og-metallic-2025-hf3975-001", - "type": "string" + "roles": { + "items": { + "$ref": "#/definitions/flashscore.lineupRoleDoc" + }, + "type": "array" }, - "title": { - "example": "Air Jordan 5 Retro OG 'Black Metallic Reimagined'", + "slug": { + "example": "rafael", "type": "string" } }, "type": "object" }, - "goat.SuggestResponse": { + "flashscore.matchLineupTeamDoc": { "properties": { - "collections": { + "aggregated_stats": { + "$ref": "#/definitions/flashscore.lineupAggregatedStatsDoc" + }, + "average_rating": { + "example": 7.1, + "type": "number" + }, + "coaches": { "items": { - "$ref": "#/definitions/goat.SuggestCollection" + "$ref": "#/definitions/flashscore.lineupPlayerDoc" }, "type": "array" }, - "products": { + "formation": { + "$ref": "#/definitions/flashscore.predictedFormationDoc" + }, + "groups": { "items": { - "$ref": "#/definitions/goat.SuggestProduct" + "$ref": "#/definitions/flashscore.lineupGroupDoc" }, "type": "array" }, - "query": { - "example": "jord", + "name": { + "example": "Brighton", "type": "string" - } - }, - "type": "object" - }, - "goat.TrendingSearchesResponse": { - "properties": { - "searches": { - "example": [ - "Jordan 4", - "Jordan 1", - "Kobe 6" - ], + }, + "participant_id": { + "example": "4zJjW8Rb", + "type": "string" + }, + "players": { "items": { - "type": "string" + "$ref": "#/definitions/flashscore.matchLineupPlayerDoc" }, "type": "array" }, - "total": { - "example": 25, - "type": "integer" + "side": { + "enum": [ + "home", + "away" + ], + "example": "home", + "type": "string" + }, + "substitutions": { + "items": { + "$ref": "#/definitions/flashscore.lineupSubstitutionDoc" + }, + "type": "array" } }, "type": "object" }, - "goat.collectionResponseDoc": { + "flashscore.matchLineupsDataDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/goat.CollectionResponse" + "match_id": { + "example": "j52jHsN8", + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { + "example": "https://2.ds.lsapp.eu/pq_graphql?_hash=dlie2&eventId=j52jHsN8&projectId=2", "type": "string" + }, + "teams": { + "items": { + "$ref": "#/definitions/flashscore.matchLineupTeamDoc" + }, + "type": "array" } }, "type": "object" }, - "goat.countriesResponseDoc": { + "flashscore.matchLineupsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/goat.CountriesResponse" + "$ref": "#/definitions/flashscore.matchLineupsDataDoc" }, "msg": { "example": "OK", @@ -94603,30 +100439,33 @@ }, "type": "object" }, - "goat.curatedResponseDoc": { + "flashscore.matchMissingPlayersDataDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/goat.CuratedResponse" + "match_id": { + "example": "f75igXFG", + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { + "example": "https://2.ds.lsapp.eu/pq_graphql?_hash=dmpe2&eventId=f75igXFG&projectId=2", "type": "string" + }, + "teams": { + "items": { + "$ref": "#/definitions/flashscore.missingPlayersTeamDoc" + }, + "type": "array" } }, "type": "object" }, - "goat.facetsResponseDoc": { + "flashscore.matchMissingPlayersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/goat.SearchFacetsResponse" + "$ref": "#/definitions/flashscore.matchMissingPlayersDataDoc" }, "msg": { "example": "OK", @@ -94635,30 +100474,51 @@ }, "type": "object" }, - "goat.listingsCountResponseDoc": { + "flashscore.matchMomentumDataDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" + "event_types": { + "items": { + "$ref": "#/definitions/flashscore.momentumEventTypeDoc" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/goat.ListingsCountResponse" + "events": { + "items": { + "$ref": "#/definitions/flashscore.momentumEventDoc" + }, + "type": "array" }, - "msg": { - "example": "OK", + "match_id": { + "example": "j52jHsN8", + "type": "string" + }, + "momentum": { + "items": { + "$ref": "#/definitions/flashscore.momentumFrameDoc" + }, + "type": "array" + }, + "source_url": { + "example": "https://2.ds.lsapp.eu/pq_graphql?_hash=mmts&eventId=j52jHsN8&providerId=7", "type": "string" + }, + "teams": { + "items": { + "$ref": "#/definitions/flashscore.momentumTeamDoc" + }, + "type": "array" } }, "type": "object" }, - "goat.productResponseDoc": { + "flashscore.matchMomentumResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/goat.ProductDetail" + "$ref": "#/definitions/flashscore.matchMomentumDataDoc" }, "msg": { "example": "OK", @@ -94667,62 +100527,62 @@ }, "type": "object" }, - "goat.recommendedResponseDoc": { + "flashscore.matchNewsArticleRefDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/goat.RecommendedResponse" + "article": { + "$ref": "#/definitions/flashscore.matchNewsArticleSortKeyDoc" }, - "msg": { - "example": "OK", + "id": { + "example": "GYDHQ2yR", "type": "string" } }, "type": "object" }, - "goat.searchResponseDoc": { + "flashscore.matchNewsArticleSortKeyDoc": { "properties": { - "code": { - "example": 200, + "sort_key": { + "example": 1790163122, "type": "integer" - }, - "data": { - "$ref": "#/definitions/goat.SearchResponse" - }, - "msg": { - "example": "OK", - "type": "string" } }, "type": "object" }, - "goat.suggestResponseDoc": { + "flashscore.matchNewsDataDoc": { "properties": { - "code": { - "example": 200, + "layout_id": { + "example": 80103, "type": "integer" }, - "data": { - "$ref": "#/definitions/goat.SuggestResponse" + "match_id": { + "example": "xtmHKGT0", + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "example": "Default EVENT layout", + "type": "string" + }, + "sections": { + "items": { + "$ref": "#/definitions/flashscore.matchNewsSectionDoc" + }, + "type": "array" + }, + "source_url": { + "example": "https://2.ds.lsapp.eu/pq_graphql?_hash=fsned&entityId=xtmHKGT0&layoutTypeId=2&projectId=2", "type": "string" } }, "type": "object" }, - "goat.trendingSearchesResponseDoc": { + "flashscore.matchNewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/goat.TrendingSearchesResponse" + "$ref": "#/definitions/flashscore.matchNewsDataDoc" }, "msg": { "example": "OK", @@ -94731,330 +100591,125 @@ }, "type": "object" }, - "goldin.Auction": { + "flashscore.matchNewsSectionDoc": { "properties": { - "id": { - "description": "ID is Goldin's own auction id -- pass as auction_id to Search.", - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/flashscore.matchNewsArticleRefDoc" + }, + "type": "array" }, - "lot_count": { - "description": "LotCount is how many lots currently carry this auction id, read\nlive from the same facets response.", + "id": { + "example": 1, "type": "integer" }, "name": { - "description": "Name is Goldin's own auction title, e.g. \"2026 Weekly Auction Sep\n8 - Sep 17\".", - "type": "string" - } - }, - "type": "object" - }, - "goldin.AuctionListing": { - "properties": { - "buyer_premium": { - "type": "number" - }, - "end_time": { - "type": "string" - }, - "extended_bidding_status": { - "type": "string" - }, - "id": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "start_time": { - "type": "string" - }, - "status": { - "type": "string" - }, - "title": { - "type": "string" - }, - "type": { + "example": "articlesOnParticipants", "type": "string" } }, "type": "object" }, - "goldin.AuctionsResponse": { + "flashscore.matchOddsDataDoc": { "properties": { - "auctions": { + "bookmakers": { "items": { - "$ref": "#/definitions/goldin.AuctionListing" + "$ref": "#/definitions/flashscore.oddsBookmakerDoc" }, "type": "array" }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "goldin.CategoriesResponse": { - "properties": { - "auction_type": { + "geo": { + "example": "GB", "type": "string" }, - "auctions": { - "items": { - "$ref": "#/definitions/goldin.Auction" - }, - "type": "array" - }, - "category": { - "items": { - "type": "string" - }, - "type": "array" - }, - "certification": { - "items": { - "type": "string" - }, - "type": "array" - }, - "item_type": { - "items": { - "type": "string" - }, - "type": "array" - }, - "sort": { - "items": { - "type": "string" - }, - "type": "array" - }, - "sub_category": { + "markets": { "items": { - "type": "string" + "$ref": "#/definitions/flashscore.oddsMarketDoc" }, "type": "array" - } - }, - "type": "object" - }, - "goldin.ListingLotRef": { - "properties": { - "lot_number": { - "type": "integer" - }, - "slug": { - "type": "string" - } - }, - "type": "object" - }, - "goldin.ListingResult": { - "properties": { - "allow_offers": { - "description": "AllowOffers, SoldAt, and FinalPrice are only present for\nAuctionType \"Fixed_Price\" lots (Goldin's Buy Now marketplace).", - "type": "boolean" - }, - "auction_id": { - "type": "string" - }, - "auction_name": { - "type": "string" - }, - "auction_type": { - "type": "string" - }, - "buyer_premium": { - "type": "number" - }, - "category": { - "type": "string" - }, - "current_price": { - "type": "integer" - }, - "description": { - "type": "string" - }, - "end_time": { - "type": "string" - }, - "final_price": { - "type": "integer" }, - "grading_company": { - "description": "GradingCompany is the third-party grader, e.g. \"PSA\" -- present only\nfor graded items. Not the same enum as Search's certification\nfilter, which also includes \"Ungraded\".", + "match_id": { + "example": "p0aFxkkn", "type": "string" }, - "images": { + "participants": { "items": { - "type": "string" + "$ref": "#/definitions/flashscore.oddsParticipantDoc" }, "type": "array" }, - "item_type": { - "type": "string" - }, - "lot_id": { - "type": "string" - }, - "lot_number": { - "type": "integer" - }, - "min_bid_price": { - "type": "integer" - }, - "next_lot": { - "$ref": "#/definitions/goldin.ListingLotRef" - }, - "number_of_bids": { - "type": "integer" - }, - "number_of_views": { - "type": "integer" - }, - "previous_lot": { - "$ref": "#/definitions/goldin.ListingLotRef" - }, - "reserve_amount": { - "type": "number" - }, - "serial_number": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "sold_at": { - "type": "string" - }, "source_url": { + "example": "https://global.ds.lsapp.eu/odds/pq_graphql?_hash=oce&eventId=p0aFxkkn&geoIpCode=GB&geoIpSubdivisionCode=&projectId=2", "type": "string" }, - "start_time": { - "type": "string" - }, - "status": { - "type": "string" - }, - "sub_category": { - "type": "string" - }, - "title": { + "subdivision": { + "example": "NJ", "type": "string" } }, "type": "object" }, - "goldin.SearchLot": { + "flashscore.matchOddsResponseDoc": { "properties": { - "allow_offers": { - "description": "AllowOffers, SoldAt, and FinalPrice are only present for\nAuctionTypeFixedPrice lots.", - "type": "boolean" - }, - "auction_id": { - "type": "string" - }, - "auction_type": { - "type": "string" - }, - "buyer_premium": { - "type": "number" - }, - "current_price": { - "description": "CurrentPrice is the current bid (AuctionTypeAuction) or the Buy Now\nprice (AuctionTypeFixedPrice) -- always present regardless of pool.", - "type": "integer" - }, - "end_time": { - "type": "string" - }, - "final_price": { - "type": "integer" - }, - "image_url": { - "type": "string" - }, - "lot_id": { - "type": "string" - }, - "lot_number": { - "description": "LotNumber, MinBidPrice, NumberOfBids, ReserveAmount, StartTime, and\nEndTime are only present for AuctionTypeAuction lots -- omitted\n(not just zero) for AuctionTypeFixedPrice, which has no lot\nnumbering, bidding, or auction window.", - "type": "integer" - }, - "min_bid_price": { - "type": "integer" - }, - "number_of_bids": { + "code": { + "example": 200, "type": "integer" }, - "reserve_amount": { - "type": "number" - }, - "slug": { - "description": "Slug is the lot's meta_slug -- pass as slug to goldin-listing for\nfull lot detail.", - "type": "string" - }, - "sold_at": { - "type": "string" - }, - "start_time": { - "type": "string" - }, - "status": { - "type": "string" + "data": { + "$ref": "#/definitions/flashscore.matchOddsDataDoc" }, - "title": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "goldin.SearchResponse": { + "flashscore.matchPlayerStatsDataDoc": { "properties": { - "auction_type": { + "groups": { + "items": { + "$ref": "#/definitions/flashscore.playerStatGroupDoc" + }, + "type": "array" + }, + "match_id": { + "example": "j52jHsN8", "type": "string" }, - "lots": { + "players": { "items": { - "$ref": "#/definitions/goldin.SearchLot" + "$ref": "#/definitions/flashscore.playerMatchStatsDoc" }, "type": "array" }, - "page": { - "type": "integer" - }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "goldin.SuggestResponse": { - "properties": { - "keyword": { + "source_url": { + "example": "https://2.ds.lsapp.eu/pq_graphql?_hash=epmsd&eventId=j52jHsN8&providerId=7", "type": "string" }, - "suggestions": { + "stat_types": { "items": { - "type": "string" + "$ref": "#/definitions/flashscore.playerStatTypeDoc" }, "type": "array" }, - "total": { - "description": "Total is Goldin's own count of lots the raw keyword itself would\nmatch, not the number of suggestions returned.", - "type": "integer" + "teams": { + "items": { + "$ref": "#/definitions/flashscore.playerStatTeamDoc" + }, + "type": "array" } }, "type": "object" }, - "goldin.auctionsResponseDoc": { + "flashscore.matchPlayerStatsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/goldin.AuctionsResponse" + "$ref": "#/definitions/flashscore.matchPlayerStatsDataDoc" }, "msg": { "example": "OK", @@ -95063,30 +100718,36 @@ }, "type": "object" }, - "goldin.categoriesResponseDoc": { + "flashscore.matchPointByPointDataDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" + "current_game": { + "$ref": "#/definitions/flashscore.pointByPointCurrentGameDoc" }, - "data": { - "$ref": "#/definitions/goldin.CategoriesResponse" + "match_id": { + "example": "8v653Rz9", + "type": "string" }, - "msg": { - "example": "OK", + "periods": { + "items": { + "$ref": "#/definitions/flashscore.pointByPointPeriodDoc" + }, + "type": "array" + }, + "source_url": { + "example": "https://global.flashscore.ninja/2/x/feed/df_mh_1_8v653Rz9", "type": "string" } }, "type": "object" }, - "goldin.listingResponseDoc": { + "flashscore.matchPointByPointResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/goldin.ListingResult" + "$ref": "#/definitions/flashscore.matchPointByPointDataDoc" }, "msg": { "example": "OK", @@ -95095,30 +100756,33 @@ }, "type": "object" }, - "goldin.searchResponseDoc": { + "flashscore.matchPredictedLineupsDataDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/goldin.SearchResponse" + "match_id": { + "example": "f75igXFG", + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { + "example": "https://2.ds.lsapp.eu/pq_graphql?_hash=dplie&eventId=f75igXFG&projectId=2", "type": "string" + }, + "teams": { + "items": { + "$ref": "#/definitions/flashscore.predictedLineupTeamDoc" + }, + "type": "array" } }, "type": "object" }, - "goldin.suggestResponseDoc": { + "flashscore.matchPredictedLineupsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/goldin.SuggestResponse" + "$ref": "#/definitions/flashscore.matchPredictedLineupsDataDoc" }, "msg": { "example": "OK", @@ -95127,604 +100791,450 @@ }, "type": "object" }, - "goodreads.AuthorBooksResponse": { + "flashscore.matchReportDataDoc": { "properties": { - "author_id": { + "match_id": { + "example": "j52jHsN8", "type": "string" }, - "books": { - "items": { - "$ref": "#/definitions/goodreads.BookListItem" - }, - "type": "array" - }, - "page": { - "type": "integer" + "report": { + "$ref": "#/definitions/flashscore.matchReportDoc" }, "source_url": { + "example": "https://global.flashscore.ninja/2/x/feed/df_rr_j52jHsN8/", "type": "string" } }, "type": "object" }, - "goodreads.AuthorQuotesResponse": { + "flashscore.matchReportDoc": { "properties": { - "author_id": { + "author": { + "example": "Adam Clancy", "type": "string" }, - "page": { - "type": "integer" - }, - "quotes": { + "content": { "items": { - "$ref": "#/definitions/goodreads.Quote" + "$ref": "#/definitions/flashscore.reportBlockDoc" }, "type": "array" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "goodreads.AuthorResponse": { - "properties": { - "about": { - "type": "string" - }, - "average_rating": { - "example": 4.3, - "type": "number" - }, - "birth_date": { - "example": "August 11, 1962", + "edited_at": { + "example": "2026-09-19T15:55:26Z", "type": "string" }, - "death_date": { + "id": { + "example": "ALRieYFJ", "type": "string" }, - "genres": { + "images": { "items": { - "type": "string" + "$ref": "#/definitions/flashscore.reportImageDoc" }, "type": "array" }, - "id": { - "example": "153394", - "type": "string" - }, - "image_url": { - "type": "string" - }, - "name": { - "example": "Suzanne Collins", - "type": "string" - }, - "ratings_count": { - "type": "integer" - }, - "reviews_count": { - "type": "integer" - }, - "source_url": { + "published_at": { + "example": "2026-09-19T15:55:23Z", "type": "string" }, - "uri": { + "text": { "type": "string" }, - "website": { + "title": { + "example": "Seagulls soar as Arsenal gunned down", "type": "string" } }, "type": "object" }, - "goodreads.BookContributor": { + "flashscore.matchReportResponseDoc": { "properties": { - "name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "role": { - "example": "Author", - "type": "string" + "data": { + "$ref": "#/definitions/flashscore.matchReportDataDoc" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "goodreads.BookListItem": { + "flashscore.matchTVDataDoc": { "properties": { - "author": { - "type": "string" - }, - "average_rating": { - "example": 4.35, - "type": "number" + "broadcasters": { + "items": { + "$ref": "#/definitions/flashscore.broadcasterDoc" + }, + "type": "array" }, - "id": { + "geo": { + "example": "GB", "type": "string" }, - "ratings_count": { - "type": "integer" - }, - "title": { + "match_id": { + "example": "p0aFxkkn", "type": "string" }, - "uri": { + "source_url": { + "example": "https://global.flashscore.ninja/2/x/feed/df_dos_1_p0aFxkkn_", "type": "string" } }, "type": "object" }, - "goodreads.BookRating": { + "flashscore.matchTVResponseDoc": { "properties": { - "average": { - "example": 4.35, - "type": "number" - }, - "distribution": { - "$ref": "#/definitions/goodreads.BookRatingDistribution" - }, - "ratings_count": { - "example": 10177796, + "code": { + "example": 200, "type": "integer" }, - "reviews_count": { - "example": 272857, - "type": "integer" + "data": { + "$ref": "#/definitions/flashscore.matchTVDataDoc" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "goodreads.BookRatingDistribution": { + "flashscore.missingPlayerDoc": { "properties": { - "five_star": { - "type": "integer" + "country": { + "example": "Brazil", + "type": "string" }, - "four_star": { - "type": "integer" + "list_name": { + "example": "Davi Gomes", + "type": "string" }, - "one_star": { - "type": "integer" + "name": { + "example": "Davi Gomes", + "type": "string" }, - "three_star": { - "type": "integer" + "player_id": { + "example": "E9BtZaJL", + "type": "string" }, - "two_star": { - "type": "integer" + "reason": { + "example": "Knee Injury", + "type": "string" + }, + "slug": { + "example": "davi-gomes", + "type": "string" } }, "type": "object" }, - "goodreads.BookResponse": { + "flashscore.missingPlayersTeamDoc": { "properties": { - "authors": { + "doubtful": { "items": { - "$ref": "#/definitions/goodreads.BookContributor" + "$ref": "#/definitions/flashscore.missingPlayerDoc" }, "type": "array" }, - "description": { - "type": "string" - }, - "format": { - "example": "Hardcover", - "type": "string" - }, - "genres": { + "missing": { "items": { - "type": "string" + "$ref": "#/definitions/flashscore.missingPlayerDoc" }, "type": "array" }, - "id": { - "example": "2767052", - "type": "string" - }, - "image_url": { - "type": "string" - }, - "isbn": { - "type": "string" - }, - "isbn13": { - "type": "string" - }, - "language": { - "example": "English", - "type": "string" - }, - "pages": { - "example": 374, - "type": "integer" - }, - "publication_date": { - "example": "2008-10-14", - "type": "string" - }, - "publisher": { - "type": "string" - }, - "rating": { - "$ref": "#/definitions/goodreads.BookRating" - }, - "series": { - "example": "The Hunger Games #1", - "type": "string" - }, - "source_url": { - "type": "string" - }, - "title": { - "example": "The Hunger Games", + "participant_id": { + "example": "2FbjCJan", "type": "string" }, - "uri": { + "side": { + "enum": [ + "home", + "away" + ], + "example": "home", "type": "string" } }, "type": "object" }, - "goodreads.Edition": { + "flashscore.momentumEventDoc": { "properties": { - "asin": { - "description": "Amazon ASIN of the edition.", - "type": "string" - }, - "authors": { - "description": "Names of the authors credited on the edition.", - "items": { - "type": "string" - }, - "type": "array" - }, - "average_rating": { - "description": "Average rating of the edition out of 5.", - "example": 4.35, - "type": "number" - }, - "book_id": { - "description": "Goodreads book id of this edition.", + "id": { + "example": "jqIssqqn", "type": "string" }, - "format": { - "description": "Binding or format of the edition, such as `Hardcover`.", - "example": "Hardcover", + "label": { + "example": "Goal", "type": "string" }, - "isbn": { - "description": "ISBN-10 of the edition.", + "minute": { + "example": "31'", "type": "string" }, - "isbn13": { - "description": "ISBN-13 of the edition.", + "period": { + "enum": [ + "first_half", + "second_half", + "extra_time", + "first_extra_time", + "second_extra_time", + "unknown" + ], + "example": "first_half", "type": "string" }, - "language": { - "description": "Language the edition is published in.", + "player_id": { + "example": "trpxfbO3", "type": "string" }, - "pages": { - "description": "Number of pages in the edition.", - "type": "integer" - }, - "publication_date": { - "description": "Publication date as Goodreads shows it, such as `October 14th 2008`.", - "example": "October 14th 2008", + "player_name": { + "example": "Gross Pascal", "type": "string" }, - "publisher": { - "description": "Publisher of the edition.", + "side": { + "enum": [ + "home", + "away" + ], + "example": "home", "type": "string" }, - "ratings_count": { - "description": "Number of ratings the edition has received.", + "stage_id": { + "example": 12, "type": "integer" }, - "title": { - "description": "Title of the edition.", + "team_id": { + "example": "2XrRecc3", "type": "string" }, - "uri": { - "description": "Goodreads URL of the edition's book page.", + "type": { + "enum": [ + "yellow_red_card", + "red_card", + "goal", + "own_goal", + "penalty_goal" + ], + "example": "goal", "type": "string" } }, "type": "object" }, - "goodreads.EditionsResponse": { + "flashscore.momentumEventTypeDoc": { "properties": { - "book_id": { - "description": "Goodreads book id that was requested.", - "type": "string" - }, - "editions": { - "description": "Editions of the work on this page.", - "items": { - "$ref": "#/definitions/goodreads.Edition" - }, - "type": "array" - }, - "page": { - "description": "Page number of editions returned.", - "type": "integer" - }, - "source_url": { - "description": "URL the data was read from.", - "type": "string" - }, - "title": { - "description": "Title of the work as shown on the editions page.", + "label": { + "example": "Goal", "type": "string" }, - "work_id": { - "description": "Goodreads work id shared by all the editions listed.", + "type": { + "enum": [ + "yellow_red_card", + "red_card", + "goal", + "own_goal", + "penalty_goal" + ], + "example": "goal", "type": "string" } }, "type": "object" }, - "goodreads.GenreBookItem": { + "flashscore.momentumFrameDoc": { "properties": { - "author": { - "type": "string" - }, - "author_id": { - "type": "string" - }, - "average_rating": { - "example": 4.47, - "type": "number" - }, - "id": { - "type": "string" - }, - "publication_year": { + "added_time": { + "example": 1, "type": "integer" }, - "ratings_count": { + "elapsed_minute": { + "example": 45, "type": "integer" }, - "shelved_count": { - "description": "ShelvedCount is how many users have shelved this specific book under\nthis genre tag — a per-genre popularity signal distinct from the\nbook's overall ratings_count.", + "elapsed_second": { + "example": 59, "type": "integer" }, - "title": { + "minute": { + "example": "45+1'", "type": "string" }, - "uri": { + "period": { + "enum": [ + "first_half", + "second_half", + "extra_time", + "first_extra_time", + "second_extra_time", + "unknown" + ], + "example": "first_half", "type": "string" - } - }, - "type": "object" - }, - "goodreads.GenreResponse": { - "properties": { - "books": { - "items": { - "$ref": "#/definitions/goodreads.GenreBookItem" - }, - "type": "array" }, - "name": { - "type": "string" + "stage_id": { + "example": 12, + "type": "integer" }, - "source_url": { - "type": "string" + "value": { + "example": 0.29, + "type": "number" } }, "type": "object" }, - "goodreads.ListDirectoryItem": { + "flashscore.momentumTeamDoc": { "properties": { - "category": { - "example": "general", + "code": { + "example": "BHA", "type": "string" }, "id": { - "example": "1", + "example": "2XrRecc3", "type": "string" }, - "name": { - "example": "Best Books Ever", + "side": { + "enum": [ + "home", + "away" + ], + "example": "home", "type": "string" } }, "type": "object" }, - "goodreads.ListResponse": { + "flashscore.navigationDataDoc": { "properties": { - "books": { + "groups": { "items": { - "$ref": "#/definitions/goodreads.BookListItem" + "$ref": "#/definitions/flashscore.navigationGroupDoc" }, "type": "array" }, - "id": { + "path": { + "example": "/basketball/usa/", "type": "string" }, - "page": { - "type": "integer" - }, "source_url": { + "example": "https://www.flashscore.com/basketball/usa/", "type": "string" }, "title": { - "example": "Best Books Ever", + "example": "Basketball USA - NBA, NCAA, live scores and livescore", "type": "string" } }, "type": "object" }, - "goodreads.ListsResponse": { + "flashscore.navigationGroupDoc": { "properties": { - "lists": { + "items": { "items": { - "$ref": "#/definitions/goodreads.ListDirectoryItem" + "$ref": "#/definitions/flashscore.navigationItemDoc" }, "type": "array" + }, + "name": { + "example": "USA", + "type": "string" } }, "type": "object" }, - "goodreads.Quote": { + "flashscore.navigationItemDoc": { "properties": { - "author": { - "type": "string" - }, - "book_id": { - "type": "string" - }, - "book_title": { - "type": "string" - }, "id": { - "type": "string" - }, - "likes": { + "example": 1234, "type": "integer" }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "text": { + "name": { + "example": "NBA", "type": "string" }, - "uri": { + "path": { + "example": "/basketball/usa/nba/", "type": "string" }, - "work_id": { - "type": "string" + "sport_id": { + "example": 3, + "type": "integer" } }, "type": "object" }, - "goodreads.Review": { + "flashscore.navigationResponseDoc": { "properties": { - "comment_count": { - "type": "integer" - }, - "contains_spoilers": { - "type": "boolean" - }, - "date": { - "example": "2020-09-18", - "type": "string" - }, - "like_count": { - "type": "integer" - }, - "rating": { - "example": 5, + "code": { + "example": 200, "type": "integer" }, - "reviewer": { - "type": "string" - }, - "reviewer_url": { - "type": "string" + "data": { + "$ref": "#/definitions/flashscore.navigationDataDoc" }, - "text": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "goodreads.ReviewsResponse": { + "flashscore.newsArticleDataDoc": { "properties": { - "id": { - "type": "string" - }, - "reviews": { - "items": { - "$ref": "#/definitions/goodreads.Review" - }, - "type": "array" + "article": { + "$ref": "#/definitions/flashscore.newsArticleDoc" }, "source_url": { + "example": "https://2.ds.lsapp.eu/pq_graphql?_hash=nah&articleId=GYDHQ2yR", "type": "string" } }, "type": "object" }, - "goodreads.SearchResponse": { + "flashscore.newsArticleDoc": { "properties": { - "query": { - "description": "Search query that was run.", + "edited_at": { + "type": "integer" + }, + "id": { + "example": "GYDHQ2yR", "type": "string" }, - "results": { - "description": "Books matching the query.", + "images": { "items": { - "$ref": "#/definitions/goodreads.SearchResult" + "$ref": "#/definitions/flashscore.newsImageDoc" }, "type": "array" }, - "source_url": { - "description": "URL the data was read from.", - "type": "string" - } - }, - "type": "object" - }, - "goodreads.SearchResult": { - "properties": { - "author": { - "description": "Name of the book's author.", - "type": "string" - }, - "author_id": { - "description": "Goodreads author id.", - "type": "string" - }, - "average_rating": { - "description": "Average rating of the book out of 5.", - "example": 4.35, - "type": "number" - }, - "description": { - "description": "Book description, shortened to a short excerpt.", - "type": "string" - }, - "id": { - "description": "Goodreads book id.", - "type": "string" - }, - "image_url": { - "description": "URL of the book cover image.", - "type": "string" - }, - "pages": { - "description": "Number of pages in the book.", + "published_at": { + "example": 1790163122, "type": "integer" }, - "ratings_count": { - "description": "Number of ratings the book has received.", - "type": "integer" + "slug": { + "example": "premier-league-panel-admits-penalty-awarded-to-sunderland-vs-arsenal-was-wrong", + "type": "string" }, "title": { - "description": "Title of the book as Goodreads shows it.", + "example": "Premier League panel admits penalty awarded to Sunderland vs Arsenal was wrong", "type": "string" }, - "uri": { - "description": "Goodreads URL of the book page.", + "type": { + "example": "STANDARD", "type": "string" } }, "type": "object" }, - "goodreads.authorBooksResponseDoc": { + "flashscore.newsArticleResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/goodreads.AuthorBooksResponse" + "$ref": "#/definitions/flashscore.newsArticleDataDoc" }, "msg": { "example": "OK", @@ -95733,30 +101243,29 @@ }, "type": "object" }, - "goodreads.authorQuotesResponseDoc": { + "flashscore.newsCategoriesDataDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/goodreads.AuthorQuotesResponse" + "categories": { + "items": { + "$ref": "#/definitions/flashscore.newsCategoryDoc" + }, + "type": "array" }, - "msg": { - "example": "OK", + "source_url": { + "example": "https://www.flashscore.com/news/", "type": "string" } }, "type": "object" }, - "goodreads.authorResponseDoc": { + "flashscore.newsCategoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/goodreads.AuthorResponse" + "$ref": "#/definitions/flashscore.newsCategoriesDataDoc" }, "msg": { "example": "OK", @@ -95765,78 +101274,92 @@ }, "type": "object" }, - "goodreads.bookResponseDoc": { + "flashscore.newsCategoryDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" + "entity_id": { + "description": "EntityID and EntityType are empty for the All section.", + "example": "SW9D1eZo", + "type": "string" }, - "data": { - "$ref": "#/definitions/goodreads.BookResponse" + "entity_type": { + "enum": [ + "SPORT", + "TOURNAMENT_TEMPLATE", + "TAG" + ], + "example": "SPORT", + "type": "string" }, - "msg": { - "example": "OK", + "key": { + "example": "football", "type": "string" - } - }, - "type": "object" - }, - "goodreads.editionsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/goodreads.EditionsResponse" + "name": { + "example": "Football", + "type": "string" }, - "msg": { - "example": "OK", + "path": { + "example": "/news/football/", "type": "string" } }, "type": "object" }, - "goodreads.genreResponseDoc": { + "flashscore.newsImageDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" + "alt_text": { + "example": "Arteta on the touchline", + "type": "string" }, - "data": { - "$ref": "#/definitions/goodreads.GenreResponse" + "credit": { + "example": "REUTERS / Scott Heppell", + "type": "string" }, - "msg": { - "example": "OK", + "url": { + "example": "https://livesport-ott-images.ssl.cdn.cra.cz/d9623cbc-957c-4955-bdc9-e82567576136", "type": "string" + }, + "variant_type_id": { + "example": 1, + "type": "integer" } }, "type": "object" }, - "goodreads.listResponseDoc": { + "flashscore.newsListDataDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/flashscore.newsPreviewDoc" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/goodreads.ListResponse" + "category": { + "$ref": "#/definitions/flashscore.newsCategoryDoc" }, - "msg": { - "example": "OK", + "has_more": { + "example": true, + "type": "boolean" + }, + "page": { + "example": 1, + "type": "integer" + }, + "source_url": { + "example": "https://www.flashscore.com/news/football/", "type": "string" } }, "type": "object" }, - "goodreads.listsResponseDoc": { + "flashscore.newsListResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/goodreads.ListsResponse" + "$ref": "#/definitions/flashscore.newsListDataDoc" }, "msg": { "example": "OK", @@ -95845,1915 +101368,1708 @@ }, "type": "object" }, - "goodreads.reviewsResponseDoc": { + "flashscore.newsPreviewDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" + "date": { + "example": "25.09.2026 18:20", + "type": "string" }, - "data": { - "$ref": "#/definitions/goodreads.ReviewsResponse" + "id": { + "example": "Y9WFYvHj", + "type": "string" }, - "msg": { - "example": "OK", + "image_alt": { + "example": "Erling Haaland celebrates", "type": "string" - } - }, - "type": "object" - }, - "goodreads.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/goodreads.SearchResponse" + "image_url": { + "example": "https://livesport-ott-images.ssl.cdn.cra.cz/r900xfq60/example.jpeg", + "type": "string" }, - "msg": { - "example": "OK", + "path": { + "example": "/news/haaland-brace-helps-norway-to-first-win-over-scandinavian-rivals-denmark-in-28-years/Y9WFYvHj/", + "type": "string" + }, + "title": { + "example": "Haaland brace helps Norway to first win over Scandinavian rivals Denmark", "type": "string" } }, "type": "object" }, - "goodrx.AnswerDrug": { + "flashscore.oddsBookmakerDoc": { "properties": { - "info_url": { - "type": "string" + "id": { + "example": 16, + "type": "integer" }, "name": { - "type": "string" - }, - "slug": { + "example": "bet365", "type": "string" } }, "type": "object" }, - "goodrx.AnswerRef": { + "flashscore.oddsGeoDoc": { "properties": { - "drug": { - "type": "string" - }, - "question": { + "code": { + "example": "GB", "type": "string" }, - "slug": { - "type": "string" + "has_bookmakers": { + "example": true, + "type": "boolean" }, - "url": { + "name": { + "example": "United Kingdom", "type": "string" } }, "type": "object" }, - "goodrx.AnswerResponse": { + "flashscore.oddsGeosDataDoc": { "properties": { - "answer": { - "type": "string" - }, - "articles": { + "betting_scopes": { + "example": [ + "FULL_TIME" + ], "items": { - "$ref": "#/definitions/goodrx.ArticleRef" + "type": "string" }, "type": "array" }, - "drug": { - "$ref": "#/definitions/goodrx.AnswerDrug" - }, - "more_questions": { - "items": { - "$ref": "#/definitions/goodrx.AnswerRef" - }, - "type": "array" - }, - "paragraphs": { + "betting_types": { + "example": [ + "HOME_DRAW_AWAY" + ], "items": { "type": "string" }, "type": "array" }, - "question": { + "default_geo": { + "example": "GB", "type": "string" }, - "related_drugs": { + "geos": { "items": { - "$ref": "#/definitions/goodrx.DrugLink" + "$ref": "#/definitions/flashscore.oddsGeoDoc" }, "type": "array" }, - "slug": { - "type": "string" + "handicap_types": { + "example": [ + "UNKNOWN" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "source_url": { + "subdivision_notes": { + "example": "subdivision is accepted only with geo US or CA, where it changes which bookmakers are licensed.", "type": "string" }, - "url": { + "subdivisions": { + "items": { + "$ref": "#/definitions/flashscore.oddsSubdivisionDoc" + }, + "type": "array" + }, + "verified_on": { + "example": "2026-10-07", "type": "string" } }, "type": "object" }, - "goodrx.AnswersResponse": { + "flashscore.oddsGeosResponseDoc": { "properties": { - "questions": { - "items": { - "$ref": "#/definitions/goodrx.AnswerRef" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "top_questions": { - "items": { - "$ref": "#/definitions/goodrx.AnswerRef" - }, - "type": "array" + "data": { + "$ref": "#/definitions/flashscore.oddsGeosDataDoc" }, - "total": { - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "goodrx.ArticleRef": { + "flashscore.oddsMarketDoc": { "properties": { - "title": { + "betting_type": { + "enum": [ + "HOME_DRAW_AWAY", + "HOME_AWAY", + "DRAW_NO_BET", + "DOUBLE_CHANCE", + "ASIAN_HANDICAP", + "EUROPEAN_HANDICAP", + "OVER_UNDER", + "BOTH_TEAMS_TO_SCORE", + "CORRECT_SCORE", + "HALF_FULL_TIME", + "ODD_OR_EVEN", + "TO_QUALIFY", + "NEXT_GOAL", + "TOP_POSITION_MERGED", + "TO_WIN_AND_TOP_POSITION", + "WIN_EACH_WAY" + ], + "example": "HOME_DRAW_AWAY", "type": "string" }, - "url": { + "offers": { + "items": { + "$ref": "#/definitions/flashscore.oddsOfferDoc" + }, + "type": "array" + }, + "scope": { + "enum": [ + "FULL_TIME", + "FULL_TIME_OVER_TIME", + "FIRST_HALF", + "SECOND_HALF", + "FIRST_PERIOD", + "FIRST_QUARTER", + "FIRST_SET", + "SECOND_SET" + ], + "example": "FULL_TIME", "type": "string" } }, "type": "object" }, - "goodrx.BrandsResponse": { + "flashscore.oddsOfferDoc": { "properties": { - "drugs": { + "bookmaker_id": { + "example": 16, + "type": "integer" + }, + "outcomes": { "items": { - "$ref": "#/definitions/goodrx.DrugLink" + "$ref": "#/definitions/flashscore.oddsOutcomeDoc" }, "type": "array" } }, "type": "object" }, - "goodrx.ClassRef": { + "flashscore.oddsOutcomeDoc": { "properties": { - "name": { - "type": "string" + "active": { + "example": true, + "type": "boolean" }, - "slug": { + "half_full_time": { + "example": "1/1", "type": "string" }, - "url": { + "handicap": { + "example": 2.5, + "type": "number" + }, + "handicap_type": { + "enum": [ + "UNKNOWN", + "GOALS", + "GAMES", + "SETS", + "POINTS", + "FRAMES", + "LEGS", + "RUNS" + ], + "example": "UNKNOWN", "type": "string" - } - }, - "type": "object" - }, - "goodrx.ClassResponse": { - "properties": { - "drugs": { - "items": { - "$ref": "#/definitions/goodrx.DrugLink" - }, - "type": "array" }, - "name": { + "odds": { + "example": 2.6, + "type": "number" + }, + "opening_odds": { + "example": 3, + "type": "number" + }, + "participant_id": { + "example": "Gzrm3lW6", "type": "string" }, - "overview": { - "description": "Overview is the class description (\"Why are ... prescribed?\").", + "score": { + "example": "2:1", "type": "string" }, - "slug": { + "selection": { + "example": "home", "type": "string" }, - "url": { + "side": { + "enum": [ + "home", + "away" + ], + "example": "home", "type": "string" } }, "type": "object" }, - "goodrx.ClassesResponse": { - "properties": { - "classes": { - "items": { - "$ref": "#/definitions/goodrx.ClassRef" - }, - "type": "array" - } - }, - "type": "object" - }, - "goodrx.ComparisonDrug": { + "flashscore.oddsParticipantDoc": { "properties": { - "info_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "prescription": { - "type": "string" - }, - "slug": { + "id": { + "example": "Gzrm3lW6", "type": "string" }, - "url": { + "side": { + "enum": [ + "home", + "away" + ], + "example": "home", "type": "string" } }, "type": "object" }, - "goodrx.ComparisonRef": { + "flashscore.oddsSubdivisionDoc": { "properties": { - "name": { + "code": { + "example": "NJ", "type": "string" }, - "slug": { + "geo": { + "example": "US", "type": "string" }, - "url": { + "name": { + "example": "New Jersey", "type": "string" } }, "type": "object" }, - "goodrx.ComparisonResponse": { + "flashscore.playerMatchStatsDoc": { "properties": { - "drugs": { - "items": { - "$ref": "#/definitions/goodrx.ComparisonDrug" - }, - "type": "array" - }, - "key_takeaways": { + "highlights": { + "example": [ + "goals", + "assists" + ], "items": { "type": "string" }, "type": "array" }, - "slug": { + "id": { + "example": "trpxfbO3", "type": "string" }, - "title": { + "name": { + "example": "Gross Pascal", "type": "string" }, - "url": { + "position": { + "example": "Midfielder", "type": "string" - } - }, - "type": "object" - }, - "goodrx.ComparisonTopic": { - "properties": { - "comparisons": { - "items": { - "$ref": "#/definitions/goodrx.ComparisonRef" + }, + "rating": { + "example": 8.3, + "type": "number" + }, + "short_name": { + "example": "Gross P.", + "type": "string" + }, + "side": { + "enum": [ + "home", + "away" + ], + "example": "home", + "type": "string" + }, + "slug": { + "example": "gross-pascal", + "type": "string" + }, + "starter": { + "example": true, + "type": "boolean" + }, + "stats": { + "additionalProperties": { + "$ref": "#/definitions/flashscore.playerStatValueDoc" }, - "type": "array" + "description": "Stats maps a statistic key from stat_types to this player's value.", + "type": "object" }, - "name": { + "team_id": { + "example": "2XrRecc3", "type": "string" + }, + "top_rated": { + "example": true, + "type": "boolean" } }, "type": "object" }, - "goodrx.ComparisonsResponse": { + "flashscore.playerStatCombinedDoc": { "properties": { - "topics": { + "stats": { + "example": [ + "passes_accurate", + "passes_total", + "passes_accuracy" + ], "items": { - "$ref": "#/definitions/goodrx.ComparisonTopic" + "type": "string" }, "type": "array" + }, + "template": { + "example": "%s/%s (%s)", + "type": "string" } }, "type": "object" }, - "goodrx.Condition": { + "flashscore.playerStatGroupDoc": { "properties": { - "has_medications": { + "goalkeeper_only": { + "example": false, "type": "boolean" }, - "name": { + "key": { + "enum": [ + "top_stats", + "shots", + "attack", + "passes", + "defense", + "goalkeeping", + "general" + ], + "example": "shots", "type": "string" }, - "slug": { + "label": { + "example": "Shots", "type": "string" }, - "url": { - "type": "string" + "stats": { + "example": [ + "shots_total", + "goals" + ], + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "goodrx.ConditionDrugsResponse": { + "flashscore.playerStatTeamDoc": { "properties": { - "drugs": { - "items": { - "$ref": "#/definitions/goodrx.DrugLink" - }, - "type": "array" - }, - "name": { + "id": { + "example": "2XrRecc3", "type": "string" }, - "slug": { + "name": { + "example": "Brighton", "type": "string" }, - "url": { + "side": { + "enum": [ + "home", + "away" + ], + "example": "home", "type": "string" } }, "type": "object" }, - "goodrx.ConditionResponse": { + "flashscore.playerStatTypeDoc": { "properties": { - "alternate_name": { - "type": "string" + "combined": { + "$ref": "#/definitions/flashscore.playerStatCombinedDoc" }, - "articles": { - "items": { - "$ref": "#/definitions/goodrx.ArticleRef" - }, - "type": "array" + "format": { + "enum": [ + "count", + "percentage", + "count_two_decimal_places" + ], + "example": "count", + "type": "string" }, - "authors": { + "groups": { "items": { + "enum": [ + "top_stats", + "shots", + "attack", + "passes", + "defense", + "goalkeeping", + "general" + ], "type": "string" }, "type": "array" }, - "date_modified": { - "type": "string" - }, - "date_published": { + "key": { + "example": "shots_total", "type": "string" }, - "description": { + "label": { + "example": "Total shots", "type": "string" }, - "headline": { + "sentiment": { + "enum": [ + "positive", + "negative" + ], + "example": "positive", "type": "string" + } + }, + "type": "object" + }, + "flashscore.playerStatValueDoc": { + "properties": { + "rank": { + "example": 9, + "type": "integer" }, - "medications_url": { - "type": "string" + "raw": { + "example": 0.1074, + "type": "number" }, - "name": { + "value": { + "example": "0.11", "type": "string" - }, - "sections": { + } + }, + "type": "object" + }, + "flashscore.pointByPointCurrentGameDoc": { + "properties": { + "points": { "items": { - "$ref": "#/definitions/goodrx.InfoSection" + "$ref": "#/definitions/flashscore.pointScoreDoc" }, "type": "array" }, - "slug": { + "server": { + "enum": [ + "home", + "away" + ], + "example": "away", "type": "string" }, - "url": { + "title": { + "example": "Current game", "type": "string" } }, "type": "object" }, - "goodrx.ConditionsResponse": { + "flashscore.pointByPointEntryDoc": { "properties": { - "conditions": { + "away_score": { + "example": 0, + "type": "integer" + }, + "away_tiebreak_score": { + "example": 3, + "type": "integer" + }, + "home_score": { + "example": 1, + "type": "integer" + }, + "home_tiebreak_score": { + "example": 7, + "type": "integer" + }, + "lead": { + "$ref": "#/definitions/flashscore.pointByPointLeadDoc" + }, + "markers": { "items": { - "$ref": "#/definitions/goodrx.Condition" + "$ref": "#/definitions/flashscore.pointMarkerDoc" }, "type": "array" - } - }, - "type": "object" - }, - "goodrx.Configuration": { - "properties": { - "dosage": { - "type": "string" }, - "drug_id": { - "type": "string" + "number": { + "example": 1, + "type": "integer" }, - "form": { - "type": "string" + "points": { + "items": { + "$ref": "#/definitions/flashscore.pointScoreDoc" + }, + "type": "array" }, - "label": { + "server": { + "enum": [ + "home", + "away" + ], + "example": "home", "type": "string" }, - "quantity": { - "type": "integer" + "server_lost": { + "example": false, + "type": "boolean" }, - "summary": { + "winner": { + "enum": [ + "home", + "away" + ], + "example": "home", "type": "string" } }, "type": "object" }, - "goodrx.DosageOption": { + "flashscore.pointByPointLeadDoc": { "properties": { - "default_quantity": { - "description": "DefaultQuantity is GoodRx's default quantity for this dosage.", + "margin": { + "example": 4, "type": "integer" }, - "drug_id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "quantities": { - "items": { - "type": "integer" - }, - "type": "array" + "narrowed": { + "example": true, + "type": "boolean" }, - "slug": { + "side": { + "enum": [ + "home", + "away" + ], + "example": "away", "type": "string" } }, "type": "object" }, - "goodrx.DosagePriceRow": { + "flashscore.pointByPointPeriodDoc": { "properties": { - "dosage": { - "type": "string" - }, - "price": { - "type": "number" - }, - "price_url": { - "type": "string" + "sections": { + "items": { + "$ref": "#/definitions/flashscore.pointByPointSectionDoc" + }, + "type": "array" }, - "quantity": { + "title": { + "example": "Set 1", "type": "string" - }, - "unit_price": { - "type": "number" } }, "type": "object" }, - "goodrx.DosagePriceTable": { + "flashscore.pointByPointSectionDoc": { "properties": { - "form": { - "type": "string" - }, - "rows": { + "entries": { "items": { - "$ref": "#/definitions/goodrx.DosagePriceRow" + "$ref": "#/definitions/flashscore.pointByPointEntryDoc" }, "type": "array" + }, + "title": { + "example": "Point by point - Set 1", + "type": "string" } }, "type": "object" }, - "goodrx.DrugGuideRef": { + "flashscore.pointMarkerDoc": { "properties": { - "last_modified": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "title": { - "type": "string" - }, - "topic": { + "side": { "enum": [ - "side-effects", - "dosage", - "interactions" + "home", + "away" ], + "example": "home", "type": "string" }, - "url": { + "type": { + "enum": [ + "break_point", + "set_point", + "match_point" + ], + "example": "break_point", "type": "string" } }, "type": "object" }, - "goodrx.DrugGuideResponse": { + "flashscore.pointScoreDoc": { "properties": { - "drug": { + "away": { + "example": "30", "type": "string" }, - "last_reviewed": { + "home": { + "example": "40", "type": "string" }, - "price_tables": { + "markers": { "items": { - "$ref": "#/definitions/goodrx.DosagePriceTable" + "$ref": "#/definitions/flashscore.pointMarkerDoc" }, "type": "array" - }, - "related": { + } + }, + "type": "object" + }, + "flashscore.predictedFormationDoc": { + "properties": { + "lines": { "items": { - "$ref": "#/definitions/goodrx.DrugGuideRef" + "$ref": "#/definitions/flashscore.formationLineDoc" }, "type": "array" }, - "reviewed_by": { + "name": { + "example": "4-2-3-1", + "type": "string" + } + }, + "type": "object" + }, + "flashscore.predictedLineupTeamDoc": { + "properties": { + "aggregated_stats": { + "$ref": "#/definitions/flashscore.lineupAggregatedStatsDoc" + }, + "coaches": { "items": { - "type": "string" + "$ref": "#/definitions/flashscore.lineupPlayerDoc" }, "type": "array" }, - "sections": { + "formation": { + "$ref": "#/definitions/flashscore.predictedFormationDoc" + }, + "groups": { "items": { - "$ref": "#/definitions/goodrx.GuideSection" + "$ref": "#/definitions/flashscore.lineupGroupDoc" }, "type": "array" }, - "slug": { + "name": { + "example": "Bragantino", "type": "string" }, - "source_url": { + "participant_id": { + "example": "2FbjCJan", "type": "string" }, - "summary": { + "players": { "items": { - "type": "string" + "$ref": "#/definitions/flashscore.lineupPlayerDoc" }, "type": "array" }, - "title": { - "type": "string" - }, - "topic": { + "side": { "enum": [ - "side-effects", - "dosage", - "interactions" + "home", + "away" ], - "type": "string" - }, - "url": { + "example": "home", "type": "string" } }, "type": "object" }, - "goodrx.DrugGuidesResponse": { + "flashscore.rankingCategoriesDataDoc": { "properties": { - "guides": { + "categories": { "items": { - "$ref": "#/definitions/goodrx.DrugGuideRef" + "$ref": "#/definitions/flashscore.rankingCategoryDoc" }, "type": "array" }, - "letter": { - "type": "string" - }, - "topic": { + "source_url": { + "example": "https://www.flashscore.com/", "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "goodrx.DrugInfo": { + "flashscore.rankingCategoriesResponseDoc": { "properties": { - "administration_route": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "alternate_name": { - "type": "string" + "data": { + "$ref": "#/definitions/flashscore.rankingCategoriesDataDoc" }, - "description": { + "msg": { + "example": "OK", "type": "string" - }, - "drug_class": { - "$ref": "#/definitions/goodrx.ClassRef" - }, - "image_url": { + } + }, + "type": "object" + }, + "flashscore.rankingCategoryDoc": { + "properties": { + "key": { + "example": "tennis-atp", "type": "string" }, - "legal_status": { - "type": "string" + "live": { + "example": false, + "type": "boolean" }, "name": { + "example": "ATP Singles", "type": "string" }, - "non_proprietary_name": { - "type": "string" - }, - "prescription_status": { - "type": "string" - }, - "slug": { + "path": { + "example": "/tennis/rankings/atp/", "type": "string" }, - "url": { + "sport": { + "example": "tennis", "type": "string" } }, "type": "object" }, - "goodrx.DrugInfoResponse": { + "flashscore.rankingDataDoc": { "properties": { - "alternatives": { - "items": { - "$ref": "#/definitions/goodrx.ComparisonRef" - }, - "type": "array" - }, - "audience": { - "enum": [ - "people", - "pets" - ], - "type": "string" - }, - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "date_modified": { - "type": "string" - }, - "date_published": { - "type": "string" - }, - "faqs": { - "items": { - "$ref": "#/definitions/goodrx.FAQ" - }, - "type": "array" + "category": { + "$ref": "#/definitions/flashscore.rankingCategoryDoc" }, - "sections": { + "pages": { "items": { - "$ref": "#/definitions/goodrx.InfoSection" + "$ref": "#/definitions/flashscore.rankingPageDoc" }, "type": "array" }, - "slug": { - "type": "string" - }, - "title": { - "type": "string" - }, - "url": { + "source_url": { + "example": "https://www.flashscore.com/tennis/rankings/atp/", "type": "string" } }, "type": "object" }, - "goodrx.DrugLink": { + "flashscore.rankingPageDoc": { "properties": { - "description": { - "type": "string" - }, - "info_url": { + "data": { + "example": "TS÷ME¬TS÷TAB¬TE÷RW¬...", "type": "string" }, - "lowest_price": { - "type": "number" - }, - "name": { + "feed_url": { + "example": "https://global.flashscore.ninja/2/x/feed/ran_dSJr14Y8_1", "type": "string" }, - "slug": { - "type": "string" + "page": { + "example": 1, + "type": "integer" }, - "url": { - "type": "string" + "rows": { + "example": 100, + "type": "integer" } }, "type": "object" }, - "goodrx.DrugOptionsResponse": { + "flashscore.rankingResponseDoc": { "properties": { - "default": { - "$ref": "#/definitions/goodrx.Configuration" + "code": { + "example": 200, + "type": "integer" }, - "drug": { - "$ref": "#/definitions/goodrx.DrugInfo" + "data": { + "$ref": "#/definitions/flashscore.rankingDataDoc" }, - "options": { - "items": { - "$ref": "#/definitions/goodrx.LabelOption" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "goodrx.DrugPricesResponse": { + "flashscore.reportBlockDoc": { "properties": { - "configuration": { - "$ref": "#/definitions/goodrx.Configuration" + "alt": { + "example": "Momentum", + "type": "string" }, - "drug": { - "$ref": "#/definitions/goodrx.DrugInfo" + "bold": { + "example": true, + "type": "boolean" }, - "location": { - "$ref": "#/definitions/goodrx.Location" + "credit": { + "example": "Flashscore", + "type": "string" }, - "offers": { - "items": { - "$ref": "#/definitions/goodrx.PharmacyOffer" - }, - "type": "array" + "height": { + "example": 2160, + "type": "integer" }, - "options": { - "items": { - "$ref": "#/definitions/goodrx.LabelOption" - }, - "type": "array" - } - }, - "type": "object" - }, - "goodrx.DrugsResponse": { - "properties": { - "drugs": { + "links": { "items": { - "$ref": "#/definitions/goodrx.DrugLink" + "$ref": "#/definitions/flashscore.reportLinkDoc" }, "type": "array" }, - "letter": { + "text": { "type": "string" - } - }, - "type": "object" - }, - "goodrx.FAQ": { - "properties": { - "answer": { + }, + "type": { + "enum": [ + "paragraph", + "image" + ], + "example": "paragraph", "type": "string" }, - "question": { + "url": { "type": "string" + }, + "width": { + "example": 3840, + "type": "integer" } }, "type": "object" }, - "goodrx.FormOption": { + "flashscore.reportImageDoc": { "properties": { - "dosages": { - "items": { - "$ref": "#/definitions/goodrx.DosageOption" - }, - "type": "array" + "alt": { + "type": "string" }, - "name": { + "credit": { + "example": "GLYN KIRK / AFP", "type": "string" }, - "slug": { + "thumbnail_url": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "goodrx.GuideItem": { + "flashscore.reportLinkDoc": { "properties": { - "detail": { + "id": { + "example": "hA1Zm19f", "type": "string" }, - "frequency": { + "text": { + "example": "Arsenal", "type": "string" }, - "name": { + "type": { + "enum": [ + "team", + "player", + "competition", + "page" + ], + "example": "team", "type": "string" }, - "slug": { + "url": { + "example": "https://www.flashscore.com/team/arsenal/hA1Zm19f/", "type": "string" } }, "type": "object" }, - "goodrx.GuideList": { + "flashscore.responseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/goodrx.GuideItem" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "label": { - "type": "string" + "data": { + "$ref": "#/definitions/flashscore.sourceDataDoc" }, - "severity": { - "enum": [ - "not_recommended", - "usually_not_recommended", - "increased_risk" - ], + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "goodrx.GuideSection": { + "flashscore.searchDataDoc": { "properties": { - "lists": { - "items": { - "$ref": "#/definitions/goodrx.GuideList" - }, - "type": "array" + "query": { + "example": "Arsenal", + "type": "string" }, - "paragraphs": { + "results": { "items": { - "type": "string" + "$ref": "#/definitions/flashscore.searchResultDoc" }, "type": "array" }, - "title": { + "source_url": { + "example": "https://s.livesport.services/api/v2/search/?q=Arsenal", "type": "string" } }, "type": "object" }, - "goodrx.HealthArticleRef": { + "flashscore.searchImageDoc": { "properties": { - "last_modified": { - "type": "string" - }, "path": { + "example": "fwtiqyQt-vcNAdtF9.png", "type": "string" }, - "section": { - "type": "string" - }, - "slug": { - "type": "string" + "usageId": { + "example": 2, + "type": "integer" }, - "topic": { - "type": "string" + "variantTypeId": { + "example": 2, + "type": "integer" + } + }, + "type": "object" + }, + "flashscore.searchNamedIDDoc": { + "properties": { + "id": { + "example": 2, + "type": "integer" }, - "url": { + "name": { + "example": "Team", "type": "string" } }, "type": "object" }, - "goodrx.HealthArticleResponse": { + "flashscore.searchResponseDoc": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "date_modified": { - "type": "string" + "data": { + "$ref": "#/definitions/flashscore.searchDataDoc" }, - "date_published": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "flashscore.searchResultDoc": { + "properties": { + "defaultCountry": { + "additionalProperties": true, + "type": "object" }, - "description": { - "type": "string" + "defaultTournament": { + "additionalProperties": true, + "type": "object" }, - "faqs": { - "items": { - "$ref": "#/definitions/goodrx.FAQ" - }, - "type": "array" + "gender": { + "$ref": "#/definitions/flashscore.searchNamedIDDoc" }, - "headline": { + "id": { + "example": "hA1Zm19f", "type": "string" }, - "key_takeaways": { + "images": { "items": { - "type": "string" + "$ref": "#/definitions/flashscore.searchImageDoc" }, "type": "array" }, - "path": { + "name": { + "example": "Arsenal", "type": "string" }, - "references": { - "items": { - "type": "string" - }, - "type": "array" - }, - "related_drugs": { - "items": { - "$ref": "#/definitions/goodrx.DrugLink" - }, - "type": "array" - }, - "reviewed_by": { + "participantTypes": { "items": { - "type": "string" + "$ref": "#/definitions/flashscore.searchNamedIDDoc" }, "type": "array" }, - "section": { - "type": "string" - }, - "sections": { - "items": { - "$ref": "#/definitions/goodrx.GuideSection" - }, - "type": "array" + "sport": { + "$ref": "#/definitions/flashscore.searchNamedIDDoc" }, - "slug": { - "type": "string" + "superTemplate": { + "additionalProperties": true, + "type": "object" }, - "tags": { + "teams": { "items": { - "type": "string" + "additionalProperties": true, + "type": "object" }, "type": "array" }, - "topic": { - "type": "string" + "type": { + "$ref": "#/definitions/flashscore.searchNamedIDDoc" }, "url": { + "example": "arsenal", "type": "string" } }, "type": "object" }, - "goodrx.HealthArticlesResponse": { + "flashscore.sourceDataDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/goodrx.HealthArticleRef" - }, - "type": "array" - }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "section": { + "data": { + "example": "SE÷Match¬~SF÷Top stats¬~SD÷432¬SG÷Expected goals (xG)¬SH÷0.00¬SI÷0.00¬~", "type": "string" }, - "topic": { + "source_url": { + "example": "https://global.flashscore.ninja/2/x/feed/df_st_2_xtmHKGT0", "type": "string" - }, - "total": { - "type": "integer" - }, - "total_pages": { - "type": "integer" } }, "type": "object" }, - "goodrx.HealthTopic": { + "flashscore.sportItemDoc": { "properties": { - "article_count": { + "event_count": { + "example": 159, "type": "integer" }, - "last_modified": { + "id": { + "example": 1, + "type": "integer" + }, + "key": { + "example": "football", "type": "string" }, - "section": { - "enum": [ - "conditions", - "health-topic", - "well-being", - "pet-health", - "insurance", - "classes", - "drugs", - "healthcare-access", - "corporate", - "hcp", - "drug" - ], + "league_count": { + "example": 11, + "type": "integer" + }, + "name": { + "example": "Football", "type": "string" }, - "topic": { + "path": { + "example": "/", "type": "string" } }, "type": "object" }, - "goodrx.HealthTopicsResponse": { + "flashscore.sportsDataDoc": { "properties": { - "section": { + "source_url": { + "example": "https://global.flashscore.ninja/2/x/feed/mc_8", "type": "string" }, - "topics": { + "sports": { "items": { - "$ref": "#/definitions/goodrx.HealthTopic" + "$ref": "#/definitions/flashscore.sportItemDoc" }, "type": "array" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "goodrx.InfoSection": { + "flashscore.sportsResponseDoc": { "properties": { - "id": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "items": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/flashscore.sportsDataDoc" }, - "title": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "goodrx.LabelOption": { + "flashscore.topSearchDataDoc": { "properties": { - "forms": { + "results": { "items": { - "$ref": "#/definitions/goodrx.FormOption" + "$ref": "#/definitions/flashscore.searchResultDoc" }, "type": "array" }, - "name": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "type": { + "source_url": { + "example": "https://s.livesport.services/api/v2/top-search/?lang-id=1&limit=10&project-id=2&project-type-id=1&type-ids=1%2C2%2C3%2C4", "type": "string" } }, "type": "object" }, - "goodrx.Location": { + "flashscore.topSearchResponseDoc": { "properties": { - "city": { - "type": "string" - }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" - }, - "state": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "zip_code": { - "type": "string" - } - }, - "type": "object" - }, - "goodrx.PetMedicationRef": { - "properties": { - "slug": { - "type": "string" + "data": { + "$ref": "#/definitions/flashscore.topSearchDataDoc" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "goodrx.PetMedicationsResponse": { - "properties": { - "drugs": { - "items": { - "$ref": "#/definitions/goodrx.PetMedicationRef" - }, - "type": "array" - } - }, - "type": "object" - }, - "goodrx.PharmacyOffer": { + "flashscore.tournamentEventsDataDoc": { "properties": { - "logo_url": { - "type": "string" - }, - "lowest_price": { - "type": "number" - }, - "membership": { - "description": "Membership names the paid program behind an UPSELL price, for example\n\"COMPANION\" (observed value; returned as data).", + "data": { + "example": "SA÷1¬~ZA÷ENGLAND: Premier League¬ZEE÷dYlOSQOD¬ZB÷198¬~AA÷byL7b0nn¬AD÷1797692400¬", "type": "string" }, - "order_url": { - "type": "string" + "event_count": { + "example": 83, + "type": "integer" }, - "pharmacy_id": { - "type": "string" + "page": { + "example": 2, + "type": "integer" }, - "pharmacy_name": { + "path": { + "example": "/football/england/premier-league-2026-2027/fixtures/", "type": "string" }, - "pharmacy_type": { - "description": "PharmacyType is \"PharmacyChain\" (retail) or \"PharmacyOnlineStore\"\n(mail order) as observed; returned as data.", + "section": { + "example": "fixtures", "type": "string" }, - "price": { - "type": "number" - }, - "pricing_type": { - "description": "PricingType is GoodRx's pricing kind, for example \"COUPON\",\n\"UPSELL\", or \"HOME_DELIVERY\" (observed values; returned as data).", + "source_url": { + "example": "https://global.flashscore.ninja/2/x/feed/tf_1_198_dYlOSQOD_190_1_8_en_1", "type": "string" }, - "retail_price": { - "type": "number" - } - }, - "type": "object" - }, - "goodrx.answerResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/goodrx.AnswerResponse" - } - }, - "type": "object" - }, - "goodrx.answersResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/goodrx.AnswersResponse" - } - }, - "type": "object" - }, - "goodrx.brandsResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/goodrx.BrandsResponse" - } - }, - "type": "object" - }, - "goodrx.classResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/goodrx.ClassResponse" - } - }, - "type": "object" - }, - "goodrx.classesResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/goodrx.ClassesResponse" - } - }, - "type": "object" - }, - "goodrx.comparisonResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/goodrx.ComparisonResponse" - } - }, - "type": "object" - }, - "goodrx.comparisonsResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/goodrx.ComparisonsResponse" - } - }, - "type": "object" - }, - "goodrx.conditionDrugsResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/goodrx.ConditionDrugsResponse" - } - }, - "type": "object" - }, - "goodrx.conditionResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/goodrx.ConditionResponse" - } - }, - "type": "object" - }, - "goodrx.conditionsResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/goodrx.ConditionsResponse" - } - }, - "type": "object" - }, - "goodrx.drugGuideResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/goodrx.DrugGuideResponse" - } - }, - "type": "object" - }, - "goodrx.drugGuidesResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/goodrx.DrugGuidesResponse" - } - }, - "type": "object" - }, - "goodrx.drugInfoResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/goodrx.DrugInfoResponse" - } - }, - "type": "object" - }, - "goodrx.drugOptionsResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/goodrx.DrugOptionsResponse" - } - }, - "type": "object" - }, - "goodrx.drugPricesResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/goodrx.DrugPricesResponse" - } - }, - "type": "object" - }, - "goodrx.drugsResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/goodrx.DrugsResponse" - } - }, - "type": "object" - }, - "goodrx.healthArticleResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/goodrx.HealthArticleResponse" - } - }, - "type": "object" - }, - "goodrx.healthArticlesResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/goodrx.HealthArticlesResponse" - } - }, - "type": "object" - }, - "goodrx.healthTopicsResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/goodrx.HealthTopicsResponse" + "total_events": { + "example": 330, + "type": "integer" } }, "type": "object" }, - "goodrx.petMedicationsResponseDoc": { + "flashscore.tournamentEventsResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/goodrx.PetMedicationsResponse" + "$ref": "#/definitions/flashscore.tournamentEventsDataDoc" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "google.JobItem": { + "flashscore.tournamentSeasonDoc": { "properties": { - "company": { - "description": "Name of the hiring company.", + "fixtures_path": { + "example": "/football/europe/champions-league-2025-2026/fixtures/", "type": "string" }, - "employment": { - "description": "Employment type shown on the job card, for example full-time.", + "name": { + "example": "Champions League 2025/2026", "type": "string" }, - "location": { - "description": "Job location as shown on the job card.", + "path": { + "example": "/football/europe/champions-league-2025-2026/", "type": "string" }, - "posted_at": { - "description": "How long ago the job was posted, as Google shows it, for example `3 days ago`.", + "results_path": { + "example": "/football/europe/champions-league-2025-2026/results/", "type": "string" }, - "snippet": { - "description": "Short description text from the job card.", + "season": { + "example": "2025/2026", "type": "string" }, - "source": { - "description": "Site or board Google lists the job from.", + "winner": { + "description": "Winner joins every winner's name with \" / \"; WinnerPath is set only for a\nsingle winner.", + "example": "PSG", "type": "string" }, - "title": { - "description": "Job title as shown on the job card.", + "winner_path": { + "example": "/team/psg/CjhkPw0k/", "type": "string" }, - "url": { - "description": "URL of the job posting.", - "type": "string" + "winners": { + "items": { + "$ref": "#/definitions/flashscore.tournamentSeasonWinnerDoc" + }, + "type": "array" } }, "type": "object" }, - "google.JobsOption": { + "flashscore.tournamentSeasonWinnerDoc": { "properties": { - "location": { - "example": "San Francisco, CA", + "name": { + "example": "PSG", "type": "string" }, - "page": { - "example": 1, - "type": "integer" - }, - "query": { - "example": "software engineer", + "path": { + "example": "/team/psg/CjhkPw0k/", "type": "string" } }, - "required": [ - "query" - ], "type": "object" }, - "google.JobsResponse": { + "flashscore.tournamentSeasonsDataDoc": { "properties": { - "location": { - "description": "Location filter that was applied. Omitted when none was given.", - "example": "San Francisco, CA", - "type": "string" - }, - "page": { - "description": "Page number returned, starting at 1.", - "example": 1, - "type": "integer" - }, - "query": { - "description": "Search query that was run.", - "example": "software engineer", + "path": { + "example": "/football/europe/champions-league/archive/", "type": "string" }, - "results": { - "description": "Job postings on this page.", + "seasons": { "items": { - "$ref": "#/definitions/google.JobItem" + "$ref": "#/definitions/flashscore.tournamentSeasonDoc" }, "type": "array" - } - }, - "type": "object" - }, - "google.MapSearchOption": { - "properties": { - "country": { - "example": "us", - "type": "string" - }, - "keyword": { - "example": "hotel san francisco", - "type": "string" }, - "language": { - "example": "en", + "source_url": { + "example": "https://www.flashscore.com/football/europe/champions-league/archive/", "type": "string" } }, "type": "object" }, - "google.NewsResponse": { + "flashscore.tournamentSeasonsResponseDoc": { "properties": { - "pagination": { - "allOf": [ - { - "$ref": "#/definitions/google.VerticalPagination" - } - ], - "description": "Paging information for this response." + "code": { + "example": 200, + "type": "integer" }, - "results": { - "description": "Google News results in Google's order.", - "items": { - "$ref": "#/definitions/google.NewsResult" - }, - "type": "array" + "data": { + "$ref": "#/definitions/flashscore.tournamentSeasonsDataDoc" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "google.NewsResult": { + "flashscore.tournamentStandingsResponseDoc": { "properties": { - "age": { - "description": "How long ago the article was published, as Google shows it.", - "example": "2 hours ago", - "type": "string" - }, - "description": { - "description": "Article snippet as shown on the Google results page.", - "example": "OpenAI announced an update.", - "type": "string" - }, - "position": { - "description": "Rank of the article across all pages for the query, starting at 1.", - "example": 1, - "type": "integer" - }, - "source": { - "description": "Name of the publication, for example `Example News`.", - "example": "Example News", + "data": { + "example": "TZ÷Standings¬TN÷Premier League¬~", "type": "string" }, - "thumbnail": { - "description": "URL of the article thumbnail.", - "example": "https://example.com/thumb.jpg", + "path": { + "example": "/football/england/premier-league/", "type": "string" }, - "title": { - "description": "Article headline as shown on the Google results page.", - "example": "OpenAI announces update", + "source_url": { + "example": "https://global.flashscore.ninja/2/x/feed/to_SY30SsKF_CfoA8Dmm_1", "type": "string" }, - "url": { - "description": "URL of the news article.", - "example": "https://example.com/openai-news", + "view": { + "example": "overall", "type": "string" } }, "type": "object" }, - "google.NewsSearchResp": { - "properties": { - "result": { - "items": { - "$ref": "#/definitions/google.SearchItem" - }, - "type": "array" - } - }, - "type": "object" - }, - "google.Place": { + "flashscore.tournamentStandingsViewsResponseDoc": { "properties": { - "address": { - "description": "Full street address of the place as shown on Google Maps.", - "example": "250 Beach St, San Francisco, CA 94133", - "type": "string" - }, - "amenities": { - "description": "Amenities Google Maps lists for the place, for example `Free Wi-Fi`.", - "example": [ - "['Free Wi-Fi'", - " 'Air-conditioned'", - " 'Wi-Fi'", - " 'Parking']" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "category": { - "description": "Business categories Google Maps assigns to the place.", - "example": [ - "['hotel']" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { - "description": "Description of the place from its Google Maps listing.", - "example": "A 3-minute walk from Pier 41 in the Fisherman's Wharf district...", + "path": { + "example": "/football/england/premier-league/", "type": "string" }, - "image": { - "description": "URL of the main photo of the place.", - "example": "https://lh5.googleusercontent.com/p/AF1QipP_O55x7gOwR3AaM09CVmzEUude9wMHMPwc--yp", + "source_url": { + "example": "https://www.flashscore.com/football/england/premier-league/standings/", "type": "string" }, - "latitude": { - "description": "Latitude of the place in decimal degrees.", - "example": 37.8077617, - "type": "number" - }, - "locations": { - "description": "Location names Google Maps associates with the place, such as nearby areas.", + "views": { "example": [ - "['San Francisco'", - " 'Los Angeles']" + "overall", + "home", + "away", + "form_overall", + "overunder_overall", + "htft_overall", + "top_scorers" ], "items": { "type": "string" }, "type": "array" - }, - "longitude": { - "description": "Longitude of the place in decimal degrees.", - "example": -122.4132228, - "type": "number" - }, + } + }, + "type": "object" + }, + "flickreels.Category": { + "properties": { "name": { - "description": "Name of the place as shown on Google Maps.", - "example": "Hotel Zephyr San Francisco", - "type": "string" - }, - "phone": { - "description": "Phone number of the place, as digits.", - "example": "14156176565", + "description": "Display name as the site prints it for this locale.", + "example": "Takedown", "type": "string" }, - "place_id": { - "description": "Google Place ID. Use it with the place, reviews and photos endpoints.", - "example": "ChIJ99URUeOAhYAR0J5ZUxTesDQ", + "slug": { + "description": "Slug the listing route requires, e.g. \"takedown\". Empty when the locale\ndoes not link the category.", + "example": "takedown", "type": "string" }, - "rating": { - "description": "Rating is the aggregate Google rating (1.0–5.0), or null when the place has no\naggregate rating on Google (Google never assigns a 0.x average, so 0 always meant\n\"unrated\"). A pointer so unrated serializes as `rating: null`, not a misleading 0.", - "example": 4.1, - "type": "number", - "x-nullable": true - }, - "review_count": { - "description": "Number of Google reviews for the place.", - "example": 3213, + "tag_id": { + "description": "Tag id the listing route requires, e.g. 2269. The id is locale-scoped.", + "example": 2269, "type": "integer" }, "url": { - "description": "Google Maps URL of the place.", - "example": "https://www.google.com/maps/place/?q=place_id:ChIJ99URUeOAhYAR0J5ZUxTesDQ", - "type": "string" - }, - "website": { - "description": "Website of the place.", - "example": "https://www.hotelzephyrsf.com/", + "description": "Listing URL for page 1 of this category on flickreels.net.", + "example": "https://www.flickreels.net/classify/takedown/2269/1", "type": "string" } }, "type": "object" }, - "google.PlacePhoto": { + "flickreels.ClassifyResponse": { "properties": { - "height": { - "description": "Pixel height of the image at its URL. 0 when Google does not report it.", - "example": 100, - "type": "integer" - }, - "url": { - "description": "URL is Google's image URL exactly as served, including its size suffix\n(e.g. `=w203-h100-k-no`). Swap that suffix to request other dimensions.", - "example": "https://lh3.googleusercontent.com/gps-cs-s/AHRPTWlbepbs69mWZVN7SNi4FYseIr1JvRCpGHgpFfN5wOf02mKOVdfv2REVb896InfULrDb_yQmqdxmQcSnmwHp2VncbLzYxzWtsUFFbKH3buF34st-Nhlg1fEIH0_tkmvNKJmWKEHKv45RBu4=w203-h100-k-no", - "type": "string" + "empty": { + "description": "True when the requested page was past the end. The upstream answers 200\nwith an empty list in that case, so this is a result, not an error.", + "type": "boolean" }, - "width": { - "description": "Width and Height are the pixel dimensions of the URL as served, when\nGoogle reports them. 0 means not captured.", - "example": 203, - "type": "integer" - } - }, - "type": "object" - }, - "google.PlaceReview": { - "properties": { - "author_id": { - "description": "AuthorID is the reviewer's stable Google contributor id.", - "example": "112997636113922766481", - "type": "string" + "has_next_page": { + "description": "True when page*page_size is still below the site's own total.", + "example": true, + "type": "boolean" }, - "author_name": { - "description": "AuthorName is the reviewer's display name.", - "example": "Supisara Darnchaloemwong", + "name": { + "description": "Category display name for this locale, when the page carried the\ntaxonomy alongside the listing.", + "example": "Takedown", "type": "string" }, - "author_photo": { - "description": "AuthorPhoto is the reviewer's avatar URL.", - "example": "https://lh3.googleusercontent.com/a-/ALV-UjWc6XFX9IKHJiQ4vZoY7o_EVCYkjMbWjGfdPZrLEw", - "type": "string" + "page": { + "description": "Page returned, the site's fixed page size, and its own total for the tag.", + "example": 1, + "type": "integer" }, - "author_review_count": { - "description": "AuthorReviewCount is how many reviews this contributor has written in\ntotal, as reported by Google. 0 means not captured, and is normal for a\nreview syndicated from another site.", - "example": 23, + "page_size": { + "example": 12, "type": "integer" }, - "author_url": { - "description": "AuthorURL is the reviewer's public Google Maps contributor page.", - "example": "https://www.google.com/maps/contrib/112997636113922766481", + "slug": { + "example": "takedown", "type": "string" }, - "id": { - "description": "ID is Google's opaque review identifier, stable across fetches.", - "example": "Ci9DQUlRQUNvZENodHljRjlvT201dFRHSk1aRU54T0U5cmRFVjNlbGRmU1RJNFkzYxAB", - "type": "string" + "tag_id": { + "example": 2269, + "type": "integer" }, - "photos": { - "description": "Photos are the images attached to this review, largest variant first.", + "titles": { "items": { - "$ref": "#/definitions/google.PlacePhoto" + "$ref": "#/definitions/flickreels.Title" }, "type": "array" }, - "published_at": { - "description": "PublishedAt is the review timestamp in RFC3339 (UTC). Empty when Google\ndid not report one.", - "example": "2026-01-01T14:39:25Z", - "type": "string" - }, - "rating": { - "description": "Rating is the star rating this reviewer gave, 1-5.", - "example": 5, + "total": { + "example": 358, "type": "integer" - }, - "relative_time": { - "description": "RelativeTime is Google's own human-readable age for the review, in the\nrequested language (e.g. \"6 months ago\").", - "example": "6 months ago", - "type": "string" - }, - "source": { - "description": "Source is the site the review came from. Google's place pages syndicate\nreviews from partner sites (notably for hotels), so this is \"Google\" for a\nnative Google review and the partner's name (e.g. \"Tripadvisor\",\n\"TrustYou\") otherwise.", - "example": "Google", - "type": "string" - }, - "text": { - "description": "Text is the review body. Empty for a photo-only review, which Google allows.", - "example": "I never knew pork could taste this good.", - "type": "string" } }, "type": "object" }, - "google.SearchItem": { + "flickreels.Episode": { "properties": { - "Snippet": { - "example": "Never run out of your favorite coffees, teas and powders again with our auto-delivery subscription. Select how often your products arrive, pause and cancel ...", - "type": "string" + "duration_seconds": { + "description": "Episode duration in seconds, from the site's own duration field.", + "example": 119, + "type": "integer" }, - "icon": { - "type": "string" + "id": { + "description": "Chapter id.", + "example": 621691, + "type": "integer" }, - "link": { - "example": "https://www.coffeebean.com/", - "type": "string" + "locked": { + "description": "True when the episode is locked for an anonymous visitor.", + "type": "boolean" }, - "position": { + "number": { + "description": "1-based episode number.", "example": 1, "type": "integer" }, - "time": { - "example": "7 hours ago", - "type": "string" - }, "title": { - "example": "Home | The Coffee Bean & Tea Leaf", - "type": "string" - }, - "website_name": { - "example": "OpenAI", + "description": "Episode title as the site prints it.", + "example": "They Don't Know I'm the Don's Pregnant Queen-EP.1", "type": "string" } }, "type": "object" }, - "google.SearchOption": { + "flickreels.GenresResponse": { "properties": { - "country": { - "description": "Country code", - "example": "us", - "type": "string" - }, - "keyword": { - "example": "chatgpt", - "type": "string" + "categories": { + "description": "Every category the site lists, in its own navigation order, starting with\nAll (tag id 0).", + "items": { + "$ref": "#/definitions/flickreels.Category" + }, + "type": "array" }, "language": { - "description": "language code", "example": "en", "type": "string" }, - "limit": { - "description": "Number of items, from 10 to 100, inclusive", - "example": 10, - "type": "integer" - }, - "page": { - "example": 1, - "type": "integer" + "languages": { + "description": "The site's own language list, the value space of the language parameter.", + "items": { + "$ref": "#/definitions/flickreels.Language" + }, + "type": "array" } }, - "required": [ - "country", - "keyword", - "language" - ], "type": "object" }, - "google.SuggestResponse": { + "flickreels.HomeResponse": { "properties": { - "query": { - "description": "Query prefix the suggestions were requested for.", - "example": "openai", - "type": "string" - }, - "source": { - "description": "Suggestion list used: `web`, `youtube` or `shopping`.", - "example": "web", + "language": { + "example": "en", "type": "string" }, - "suggestions": { - "description": "Search suggestions Google returned, in order.", + "shelves": { + "description": "Every shelf the home page renders, in the site's own order.", "items": { - "$ref": "#/definitions/google.SuggestionResult" + "$ref": "#/definitions/flickreels.Shelf" }, "type": "array" } }, "type": "object" }, - "google.SuggestionResult": { + "flickreels.Language": { "properties": { - "description": { - "description": "Short descriptor Google shows beside the suggestion. Only set when the request used `rich=true`.", - "example": "OpenAI Blog", + "code": { + "description": "Code to pass as the language parameter, e.g. \"en\".", + "example": "en", "type": "string" }, - "position": { - "description": "Rank of the suggestion in the list, starting at 1.", - "example": 1, - "type": "integer" - }, - "query": { - "description": "Suggested search query.", - "example": "openai api", + "id": { + "description": "Site id for the language. Ids are not contiguous upstream (9 is absent).", + "example": "1", "type": "string" }, - "relevance": { - "description": "Relevance score Google gives the suggestion. Only set when the request used `rich=true`.", - "example": 601, - "type": "integer" + "name": { + "description": "Endonym the site prints, e.g. \"English\".", + "example": "English", + "type": "string" }, - "type": { - "description": "Suggestion type as Google labels it, for example `QUERY`. Only set when the request used `rich=true`.", - "example": "QUERY", + "name_zh": { + "description": "The site's Chinese label for the same language.", + "example": "英语", "type": "string" } }, "type": "object" }, - "google.VerticalPagination": { + "flickreels.MovieResponse": { "properties": { - "next_page": { - "description": "Page number of the next page. Omitted when there is no next page.", - "example": 2, - "type": "integer" + "cover": { + "type": "string" }, - "page": { - "description": "Page number of this response, starting at 1.", - "example": 1, + "episode_count": { + "description": "Episode count from the site's own upload_num.", + "example": 42, "type": "integer" }, - "previous_page": { - "description": "Page number of the previous page. Omitted on the first page.", - "example": 1, + "episodes": { + "description": "The full episode list, in the site's own order.", + "items": { + "$ref": "#/definitions/flickreels.Episode" + }, + "type": "array" + }, + "id": { + "example": 9321, "type": "integer" - } - }, - "type": "object" - }, - "google.VideoResult": { - "properties": { - "age": { - "description": "When the video was published, as Google shows it.", - "example": "2 days ago", - "type": "string" }, - "description": { - "description": "Video description snippet as shown on the Google results page.", - "example": "Watch the OpenAI DevDay keynote.", - "type": "string" + "labels": { + "description": "Tag display names (genre/trope labels).", + "items": { + "type": "string" + }, + "type": "array" }, - "duration": { - "description": "Video length as Google shows it, for example `45:12`.", - "example": "45:12", + "published_at": { + "description": "Release date as the site prints it, e.g. \"2026-08-15 08:00:00\".", + "example": "2026-08-15 08:00:00", "type": "string" }, - "platform": { - "description": "Platform hosting the video, for example `YouTube`.", - "example": "YouTube", - "type": "string" + "related": { + "description": "Titles from the detail page's own related shelf.", + "items": { + "$ref": "#/definitions/flickreels.Title" + }, + "type": "array" }, - "position": { - "description": "Rank of the video across all pages for the query, starting at 1.", - "example": 1, - "type": "integer" + "slug": { + "example": "they-dont-know-im-the-dons-pregnant-queen", + "type": "string" }, - "thumbnail": { - "description": "URL of the video thumbnail.", - "example": "https://example.com/thumb.jpg", + "synopsis": { + "description": "Synopsis from the site's own introduce field.", "type": "string" }, "title": { - "description": "Video title as shown on the Google results page.", - "example": "OpenAI DevDay keynote - YouTube", + "example": "They Don't Know I'm the Don's Pregnant Queen", "type": "string" }, "url": { - "description": "URL of the video page.", - "example": "https://www.youtube.com/watch?v=openai-devday", + "description": "Canonical movie URL on flickreels.net.", "type": "string" } }, "type": "object" }, - "google.VideosResponse": { + "flickreels.Shelf": { "properties": { - "pagination": { - "allOf": [ - { - "$ref": "#/definitions/google.VerticalPagination" - } - ], - "description": "Paging information for this response." + "id": { + "description": "Column id, the id flickreels-shelf requires.", + "example": 9236, + "type": "integer" }, - "results": { - "description": "Video results in Google's order.", + "slug": { + "description": "Shelf slug from the row's own /more link, when it has one.", + "example": "hot-picks", + "type": "string" + }, + "title": { + "description": "Shelf title as the site prints it.", + "example": "🔥🔥🔥Hot Picks", + "type": "string" + }, + "titles": { + "description": "The rows this response carried.", "items": { - "$ref": "#/definitions/google.VideoResult" + "$ref": "#/definitions/flickreels.Title" }, "type": "array" + }, + "total": { + "description": "The site's own count for the shelf, which can exceed the rendered rows.", + "example": 87, + "type": "integer" } }, "type": "object" }, - "google.mapPlacePhotosResponseDoc": { + "flickreels.ShelfResponse": { "properties": { - "code": { - "example": 200, + "empty": { + "description": "True when the requested page was past the end: the upstream answers 200\nwith no rows in that case.", + "type": "boolean" + }, + "id": { + "description": "Column id this shelf belongs to.", + "example": 11860, "type": "integer" }, - "data": { + "page": { + "description": "Page returned.", + "example": 1, + "type": "integer" + }, + "slug": { + "description": "Shelf slug used for the request.", + "example": "all-episodes-one-go", + "type": "string" + }, + "title": { + "description": "Shelf title as the site prints it.", + "example": "All Episodes. One Go", + "type": "string" + }, + "titles": { "items": { - "$ref": "#/definitions/google.PlacePhoto" + "$ref": "#/definitions/flickreels.Title" }, "type": "array" }, - "msg": { - "example": "ok", - "type": "string" + "total": { + "description": "The site's own count for the shelf, which can exceed the rendered rows.", + "example": 87, + "type": "integer" } }, "type": "object" }, - "google.mapPlaceResponseDoc": { + "flickreels.Title": { "properties": { - "code": { - "example": 200, + "cover": { + "description": "Cover image URL.", + "type": "string" + }, + "episode_count": { + "description": "Episode count from the site's own upload_num.", + "example": 42, "type": "integer" }, - "data": { - "$ref": "#/definitions/google.Place" + "id": { + "description": "Playlet id, the id the movie route requires.", + "example": 9321, + "type": "integer" }, - "msg": { - "example": "OK", + "slug": { + "description": "Title slug from the card's own playlist link. Pass it to flickreels-movie\nas slug: the movie route is slug+id keyed.", + "example": "they-dont-know-im-the-dons-pregnant-queen", "type": "string" - } - }, - "type": "object" - }, - "google.mapPlaceReviewsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { + "tags": { + "description": "Tag display names (genre/trope labels) carried by the card.", "items": { - "$ref": "#/definitions/google.PlaceReview" + "type": "string" }, "type": "array" }, - "msg": { - "example": "ok", + "title": { + "description": "Title as the site prints it for this locale.", + "example": "They Don't Know I'm the Don's Pregnant Queen", + "type": "string" + }, + "url": { + "description": "Canonical movie URL on flickreels.net, when the card carried a slug.", + "example": "https://www.flickreels.net/movie/they-dont-know-im-the-dons-pregnant-queen-9321", "type": "string" } }, "type": "object" }, - "google.mapSearchResponseDoc": { + "flickreels.classifyResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "items": { - "$ref": "#/definitions/google.Place" - }, - "type": "array" + "$ref": "#/definitions/flickreels.ClassifyResponse" }, "msg": { "example": "OK", @@ -97762,14 +103078,14 @@ }, "type": "object" }, - "google.newsResponseDoc": { + "flickreels.genresResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/google.NewsResponse" + "$ref": "#/definitions/flickreels.GenresResponse" }, "msg": { "example": "OK", @@ -97778,14 +103094,14 @@ }, "type": "object" }, - "google.newsSearchResponseDoc": { + "flickreels.homeResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/google.NewsSearchResp" + "$ref": "#/definitions/flickreels.HomeResponse" }, "msg": { "example": "OK", @@ -97794,14 +103110,14 @@ }, "type": "object" }, - "google.suggestResponseDoc": { + "flickreels.movieResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/google.SuggestResponse" + "$ref": "#/definitions/flickreels.MovieResponse" }, "msg": { "example": "OK", @@ -97810,14 +103126,14 @@ }, "type": "object" }, - "google.videosResponseDoc": { + "flickreels.shelfResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/google.VideosResponse" + "$ref": "#/definitions/flickreels.ShelfResponse" }, "msg": { "example": "OK", @@ -97826,667 +103142,1000 @@ }, "type": "object" }, - "googlejobs.GoogleJob": { + "foodpanda.Cuisine": { "properties": { - "apply_url": { - "type": "string" + "id": { + "type": "integer" }, - "company": { - "example": "Google", + "name": { "type": "string" + } + }, + "type": "object" + }, + "foodpanda.CuisineFilter": { + "properties": { + "count": { + "type": "integer" }, - "country": { - "example": "TW", + "id": { + "type": "integer" + }, + "name": { "type": "string" }, - "description": { + "slug": { "type": "string" + } + }, + "type": "object" + }, + "foodpanda.CuisinesResponse": { + "properties": { + "available_count": { + "type": "integer" + }, + "cuisines": { + "items": { + "$ref": "#/definitions/foodpanda.CuisineFilter" + }, + "type": "array" }, + "market": { + "type": "string" + } + }, + "type": "object" + }, + "foodpanda.Discount": { + "properties": { "id": { - "example": "85207000467546822", "type": "string" }, - "location": { - "example": "New Taipei, Banqiao District, New Taipei City, Taiwan", + "value": { + "type": "number" + } + }, + "type": "object" + }, + "foodpanda.LegalInformation": { + "properties": { + "legal_name": { "type": "string" }, - "locations": { + "trade_register_number": { + "type": "string" + } + }, + "type": "object" + }, + "foodpanda.MenuCategory": { + "properties": { + "description": { + "type": "string" + }, + "items": { "items": { - "type": "string" + "$ref": "#/definitions/foodpanda.MenuItem" }, "type": "array" }, - "minimum_qualifications": { + "title": { "type": "string" - }, - "posted_at": { - "example": "2026-07-22T14:10:44Z", + } + }, + "type": "object" + }, + "foodpanda.MenuItem": { + "properties": { + "description": { "type": "string" }, - "preferred_qualifications": { - "type": "string" + "discounted_price": { + "type": "number" }, - "responsibilities": { + "image_url": { "type": "string" }, - "title": { - "example": "Software Engineer, Embedded Software, Silicon", - "type": "string" + "is_sold_out": { + "type": "boolean" }, - "url": { - "example": "https://www.google.com/about/careers/applications/jobs/results/85207000467546822-software-engineer-embedded-software-silicon", + "original_price": { + "type": "number" + }, + "title": { "type": "string" } }, "type": "object" }, - "googlejobs.SearchResponse": { + "foodpanda.MenuResponse": { "properties": { - "jobs": { + "aggregate_rating": { + "type": "number" + }, + "categories": { "items": { - "$ref": "#/definitions/googlejobs.GoogleJob" + "$ref": "#/definitions/foodpanda.MenuCategory" }, "type": "array" }, - "location": { - "example": "Singapore", + "code": { "type": "string" }, - "page": { - "example": 1, + "item_count": { "type": "integer" }, - "query": { - "example": "software engineer", + "market": { "type": "string" }, - "source_url": { + "opening_hours": { + "items": { + "$ref": "#/definitions/foodpanda.OpeningHours" + }, + "type": "array" + }, + "price_range": { "type": "string" }, - "total": { - "example": 1722, + "rating_count": { "type": "integer" + }, + "serves_cuisine": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "googlejobs.jobResponseDoc": { + "foodpanda.OpeningHours": { "properties": { - "code": { - "example": 200, - "type": "integer" + "closes": { + "type": "string" }, - "data": { - "$ref": "#/definitions/googlejobs.GoogleJob" + "days": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "opens": { "type": "string" } }, "type": "object" }, - "googlejobs.searchResponseDoc": { + "foodpanda.Restaurant": { "properties": { - "code": { - "example": 200, + "address": { + "type": "string" + }, + "budget": { "type": "integer" }, - "data": { - "$ref": "#/definitions/googlejobs.SearchResponse" + "city": { + "type": "string" }, - "msg": { - "example": "OK", + "code": { "type": "string" - } - }, - "type": "object" - }, - "googlepatents.CitedPatent": { - "properties": { - "assignee": { - "example": "Netzsch Maschinenfabrik", + }, + "cuisines": { + "items": { + "$ref": "#/definitions/foodpanda.Cuisine" + }, + "type": "array" + }, + "customer_phone": { "type": "string" }, - "priority_date": { - "example": "1985-12-27", + "discounts": { + "items": { + "$ref": "#/definitions/foodpanda.Discount" + }, + "type": "array" + }, + "distance_km": { + "type": "number" + }, + "has_discount": { + "type": "boolean" + }, + "hero_image_url": { "type": "string" }, - "publication_date": { - "example": "1987-05-19", + "is_delivery_available": { + "type": "boolean" + }, + "is_pickup_available": { + "type": "boolean" + }, + "latitude": { + "type": "number" + }, + "legal_information": { + "$ref": "#/definitions/foodpanda.LegalInformation" + }, + "longitude": { + "type": "number" + }, + "minimum_delivery_fee": { + "type": "number" + }, + "minimum_delivery_time_minutes": { + "type": "number" + }, + "minimum_order_amount": { + "type": "number" + }, + "name": { "type": "string" }, - "publication_number": { - "example": "US4665582A", + "rating": { + "type": "number" + }, + "review_count": { + "type": "integer" + }, + "tags": { + "items": { + "$ref": "#/definitions/foodpanda.Tag" + }, + "type": "array" + }, + "timezone": { "type": "string" }, - "title": { - "example": "Apparatus for shaking foundry moulds in a casting installation", + "web_path": { "type": "string" } }, "type": "object" }, - "googlepatents.Classification": { + "foodpanda.RestaurantResponse": { "properties": { - "code": { - "example": "A47L9/00", + "address": { "type": "string" }, - "description": { - "example": "Details or accessories of suction cleaners", + "budget": { + "type": "integer" + }, + "city": { "type": "string" }, - "is_cpc": { - "example": true, - "type": "boolean" - } - }, - "type": "object" - }, - "googlepatents.ClassificationRelation": { - "properties": { "code": { - "example": "A61", "type": "string" }, - "description": { + "cuisines": { + "items": { + "$ref": "#/definitions/foodpanda.Cuisine" + }, + "type": "array" + }, + "customer_phone": { "type": "string" }, - "is_child": { + "discounts": { + "items": { + "$ref": "#/definitions/foodpanda.Discount" + }, + "type": "array" + }, + "distance_km": { + "type": "number" + }, + "has_discount": { "type": "boolean" }, - "is_parent": { + "hero_image_url": { + "type": "string" + }, + "is_delivery_available": { "type": "boolean" }, - "is_related": { + "is_pickup_available": { "type": "boolean" }, - "name": { - "example": "A61 - MEDICAL OR VETERINARY SCIENCE; HYGIENE", - "type": "string" - } - }, - "type": "object" - }, - "googlepatents.ClassificationResponse": { - "properties": { - "code": { - "example": "A61K31/00", - "type": "string" + "latitude": { + "type": "number" }, - "description": { - "items": { - "type": "string" - }, - "type": "array" + "legal_information": { + "$ref": "#/definitions/foodpanda.LegalInformation" }, - "fetched_at": { + "longitude": { + "type": "number" + }, + "market": { "type": "string" }, + "minimum_delivery_fee": { + "type": "number" + }, + "minimum_delivery_time_minutes": { + "type": "number" + }, + "minimum_order_amount": { + "type": "number" + }, "name": { - "example": "A61K31/00 - Medicinal preparations containing organic active ingredients", "type": "string" }, - "relations": { + "rating": { + "type": "number" + }, + "review_count": { + "type": "integer" + }, + "tags": { "items": { - "$ref": "#/definitions/googlepatents.ClassificationRelation" + "$ref": "#/definitions/foodpanda.Tag" }, "type": "array" }, - "source_url": { + "timezone": { + "type": "string" + }, + "web_path": { "type": "string" } }, "type": "object" }, - "googlepatents.CountryStatus": { + "foodpanda.Review": { "properties": { - "country_code": { - "example": "US", + "author": { "type": "string" }, - "state": { - "example": "ACTIVE", + "body": { + "type": "string" + }, + "date_published": { "type": "string" + }, + "rating": { + "type": "number" } }, "type": "object" }, - "googlepatents.CoverageCountry": { + "foodpanda.ReviewsResponse": { "properties": { - "country_code": { - "example": "US", + "code": { "type": "string" }, - "years": { + "market": { + "type": "string" + }, + "review_count": { + "type": "integer" + }, + "reviews": { "items": { - "$ref": "#/definitions/googlepatents.CoverageYear" + "$ref": "#/definitions/foodpanda.Review" }, "type": "array" } }, "type": "object" }, - "googlepatents.CoverageResponse": { + "foodpanda.SearchResponse": { "properties": { - "countries": { + "available_count": { + "type": "integer" + }, + "market": { + "type": "string" + }, + "offset": { + "type": "integer" + }, + "restaurants": { "items": { - "$ref": "#/definitions/googlepatents.CoverageCountry" + "$ref": "#/definitions/foodpanda.Restaurant" }, "type": "array" }, - "fetched_at": { + "returned_count": { + "type": "integer" + } + }, + "type": "object" + }, + "foodpanda.Tag": { + "properties": { + "code": { "type": "string" }, - "source_url": { + "text": { "type": "string" } }, "type": "object" }, - "googlepatents.CoverageYear": { + "foodpanda.cuisinesResponseDoc": { "properties": { - "applications": { - "example": "1712467", - "type": "string" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "grants": { - "example": "2802408", - "type": "string" + "data": { + "$ref": "#/definitions/foodpanda.CuisinesResponse" }, - "year": { - "example": 2025, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "foodpanda.menuResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" + }, + "data": { + "$ref": "#/definitions/foodpanda.MenuResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "googlepatents.DetailResponse": { + "foodpanda.restaurantResponseDoc": { "properties": { - "abstract": { - "example": "Battery-powered upright vacuum cleaners are disclosed.", + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/foodpanda.RestaurantResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "foodpanda.reviewsResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/foodpanda.ReviewsResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "foodpanda.searchResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/foodpanda.SearchResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "forbes.ArticleEmbed": { + "properties": { + "data": { + "additionalProperties": {}, + "type": "object" + }, + "id": { + "type": "integer" + }, + "position": { "type": "string" }, - "application_number": { - "example": "US15/620,213", + "type": { + "type": "string" + } + }, + "type": "object" + }, + "forbes.ArticleResponse": { + "properties": { + "author": { "type": "string" }, - "citations": { - "items": { - "$ref": "#/definitions/googlepatents.CitedPatent" - }, - "type": "array" + "body_html": { + "type": "string" }, - "cited_by": { + "channel": { + "type": "string" + }, + "content_paywall": { + "type": "string" + }, + "description": { + "type": "string" + }, + "embeds": { "items": { - "$ref": "#/definitions/googlepatents.CitedPatent" + "$ref": "#/definitions/forbes.ArticleEmbed" }, "type": "array" }, - "claims": { + "headings": { "items": { "type": "string" }, "type": "array" }, - "claims_count": { - "example": 19, - "type": "integer" + "image_url": { + "type": "string" }, - "classifications": { + "paragraphs": { "items": { - "$ref": "#/definitions/googlepatents.Classification" + "type": "string" }, "type": "array" }, - "country_code": { - "example": "US", + "published_at": { "type": "string" }, - "country_name": { - "example": "United States", + "section": { "type": "string" }, - "current_assignees": { - "items": { - "type": "string" - }, - "type": "array" + "template_type": { + "type": "string" }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "forbes.AuthorArticle": { + "properties": { "description": { - "items": { - "type": "string" - }, - "type": "array" + "type": "string" }, - "expiration_date": { - "example": "2038-04-26", + "image_url": { "type": "string" }, - "family_members": { + "published_at": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "forbes.AuthorResponse": { + "properties": { + "articles": { "items": { - "$ref": "#/definitions/googlepatents.FamilyMember" + "$ref": "#/definitions/forbes.AuthorArticle" }, "type": "array" }, - "fetched_at": { - "example": "2026-08-15T12:00:00Z", + "bio": { "type": "string" }, - "filing_date": { - "example": "2017-06-12", + "display_type": { "type": "string" }, - "inventors": { - "items": { - "type": "string" - }, - "type": "array" + "image_url": { + "type": "string" }, - "kind_code": { - "example": "B2", + "name": { "type": "string" }, - "legal_status": { - "example": "Active", + "short_bio": { "type": "string" }, - "original_assignees": { + "slug": { + "type": "string" + }, + "twitter_url": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "forbes.Billionaire": { + "properties": { + "age": { + "type": "integer" + }, + "bios": { "items": { "type": "string" }, "type": "array" }, - "pdf_url": { - "example": "https://patentimages.storage.googleapis.com/ae/9f/51/f34dc3bf93426e/US10758101.pdf", + "category": { "type": "string" }, - "prior_art_keywords": { + "country_of_citizenship": { + "type": "string" + }, + "final_worth": { + "type": "number" + }, + "first_name": { + "type": "string" + }, + "gender": { + "type": "string" + }, + "industries": { "items": { "type": "string" }, "type": "array" }, - "priority_date": { - "example": "2017-06-12", + "last_name": { "type": "string" }, - "publication_date": { - "example": "2020-09-01", + "organization": { "type": "string" }, - "publication_number": { - "example": "US10758101B2", + "person": { + "additionalProperties": {}, + "type": "object" + }, + "person_name": { "type": "string" }, - "similar_documents": { - "items": { - "$ref": "#/definitions/googlepatents.SimilarDocument" - }, - "type": "array" + "qas": {}, + "rank": { + "type": "integer" }, - "source_url": { - "example": "https://patents.google.com/patent/US10758101B2/en", + "source": { "type": "string" }, - "title": { - "example": "Upright vacuum cleaner with battery support plate", + "square_image": { + "type": "string" + }, + "status": { + "type": "string" + }, + "uri": { "type": "string" } }, "type": "object" }, - "googlepatents.FacetEntry": { + "forbes.BillionairesResponse": { "properties": { - "key": { - "example": "Emerson Electric Co.", - "type": "string" + "count": { + "type": "integer" }, - "value": { - "example": 666, + "items": { + "items": { + "$ref": "#/definitions/forbes.Billionaire" + }, + "type": "array" + }, + "limit": { + "type": "integer" + }, + "start": { + "type": "integer" + }, + "year": { "type": "integer" } }, "type": "object" }, - "googlepatents.FamilyMember": { + "forbes.CategoriesResponse": { "properties": { - "publication_date": { - "example": "2018-12-13", + "sections": { + "items": { + "$ref": "#/definitions/forbes.Section" + }, + "type": "array" + } + }, + "type": "object" + }, + "forbes.Education": { + "properties": { + "degree": { "type": "string" }, - "publication_number": { - "example": "US20180353038A1", + "school": { "type": "string" } }, "type": "object" }, - "googlepatents.RecentEntry": { + "forbes.HeadlineItem": { "properties": { - "publication_number": { - "example": "US10758101B2", + "author": { + "type": "string" + }, + "description": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "published_at": { "type": "string" }, "title": { - "example": "Adjustable venous cannula and method of treating a patient", "type": "string" }, "url": { - "example": "https://patents.google.com/patent/US10758101B2/en", "type": "string" } }, "type": "object" }, - "googlepatents.RecentResponse": { + "forbes.HeadlinesResponse": { "properties": { - "count": { - "example": 329, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "results": { + "items": { "items": { - "$ref": "#/definitions/googlepatents.RecentEntry" + "$ref": "#/definitions/forbes.HeadlineItem" }, "type": "array" }, - "source_url": { + "section": { + "type": "string" + } + }, + "type": "object" + }, + "forbes.PersonList": { + "properties": { + "list_uri": { "type": "string" }, - "week": { - "example": "2026-W20", + "name": { "type": "string" + }, + "position": { + "type": "integer" + }, + "rank": { + "type": "integer" + }, + "year": { + "type": "integer" } }, "type": "object" }, - "googlepatents.SearchResponse": { + "forbes.PersonProfile": { "properties": { - "fetched_at": { - "type": "string" + "birth_date": { + "type": "integer" }, - "many_results": { - "example": false, - "type": "boolean" + "city": { + "type": "string" }, - "page": { - "example": 0, + "country_id": { "type": "integer" }, - "query": { - "example": "battery", + "country_of_citizenship": { "type": "string" }, - "results": { + "country_of_residence": { + "type": "string" + }, + "deceased": { + "type": "boolean" + }, + "educations": { "items": { - "$ref": "#/definitions/googlepatents.SearchResult" + "$ref": "#/definitions/forbes.Education" }, "type": "array" }, - "source_url": { + "final_worth": { + "type": "number" + }, + "final_worth_date": { + "type": "integer" + }, + "first_name": { "type": "string" }, - "top_assignees": { - "items": { - "$ref": "#/definitions/googlepatents.FacetEntry" - }, - "type": "array" + "gender": { + "type": "string" }, - "top_classifications": { - "items": { - "$ref": "#/definitions/googlepatents.FacetEntry" - }, - "type": "array" + "image_exists": { + "type": "boolean" }, - "top_inventors": { + "industries": { "items": { - "$ref": "#/definitions/googlepatents.FacetEntry" + "type": "string" }, "type": "array" }, - "total_pages": { - "example": 100, - "type": "integer" - }, - "total_results": { - "example": 112795, - "type": "integer" - } - }, - "type": "object" - }, - "googlepatents.SearchResult": { - "properties": { - "assignee": { - "example": "Emerson Electric Co", + "last_name": { "type": "string" }, - "country_status": { + "list_images": { "items": { - "$ref": "#/definitions/googlepatents.CountryStatus" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "detail_url": { - "example": "https://patents.google.com/patent/US10758101B2/en", + "marital_status": { "type": "string" }, - "filing_date": { - "example": "2017-06-12", + "name": { "type": "string" }, - "grant_date": { - "example": "2020-09-01", + "natural_id": { "type": "string" }, - "inventor": { - "example": "Thomas E. Fogarty, Jr.", - "type": "string" + "number_of_children": { + "type": "integer" }, - "is_similar_document": { - "example": false, + "person_lists": { + "items": { + "$ref": "#/definitions/forbes.PersonList" + }, + "type": "array" + }, + "related_entities": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "self_made": { "type": "boolean" }, - "language": { - "example": "en", + "self_made_type": { "type": "string" }, - "pdf_url": { + "short_uri": { "type": "string" }, - "priority_date": { - "example": "2017-06-12", + "source": { "type": "string" }, - "publication_date": { - "example": "2020-09-01", + "square_image": { "type": "string" }, - "publication_number": { - "example": "US10758101B2", + "status": { "type": "string" }, - "snippet": { - "example": "a battery support plate adapted to support a battery...", + "uri": { "type": "string" }, - "thumbnail_url": { - "type": "string" + "uris": { + "items": { + "type": "string" + }, + "type": "array" }, - "title": { - "example": "Upright vacuum cleaner with battery support plate", - "type": "string" + "visible": { + "type": "boolean" } }, "type": "object" }, - "googlepatents.SimilarDocument": { + "forbes.PersonResponse": { "properties": { - "publication_date": { - "example": "1990-06-26", + "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "did_you_know": { + "items": { + "type": "string" + }, + "type": "array" + }, + "editor_updated_at": { "type": "string" }, - "publication_number": { - "example": "CA1270625A", + "image_credit": { "type": "string" }, - "title": { - "example": "Method and apparatus for setting pattern frame and press die", + "list_appearances": { + "type": "integer" + }, + "personal_stats": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "profile": { + "$ref": "#/definitions/forbes.PersonProfile" + }, + "real_time_disclaimer": { + "type": "string" + }, + "real_time_net_worth": { + "type": "string" + }, + "real_time_net_worth_as_of": { "type": "string" + }, + "real_time_rank": { + "type": "integer" + }, + "wealth_history": { + "items": { + "$ref": "#/definitions/forbes.WealthPoint" + }, + "type": "array" } }, "type": "object" }, - "googlepatents.SuggestEntry": { + "forbes.Section": { "properties": { - "description": { + "name": { "type": "string" }, - "value": { - "example": "John Cronin", + "parent": { + "type": "string" + }, + "path": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "googlepatents.SuggestResponse": { + "forbes.WealthPoint": { "properties": { - "fetched_at": { - "type": "string" - }, - "field": { - "example": "inventor", + "date": { "type": "string" }, - "source_url": { + "name": { "type": "string" }, - "suggestions": { - "items": { - "$ref": "#/definitions/googlepatents.SuggestEntry" - }, - "type": "array" + "percent": { + "type": "number" }, - "value": { - "example": "John", + "worth": { "type": "string" } }, "type": "object" }, - "googlepatents.classificationResponseDoc": { + "forbes.articleResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/googlepatents.ClassificationResponse" + "$ref": "#/definitions/forbes.ArticleResponse" }, "msg": { "example": "OK", @@ -98495,14 +104144,14 @@ }, "type": "object" }, - "googlepatents.coverageResponseDoc": { + "forbes.authorResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/googlepatents.CoverageResponse" + "$ref": "#/definitions/forbes.AuthorResponse" }, "msg": { "example": "OK", @@ -98511,14 +104160,14 @@ }, "type": "object" }, - "googlepatents.detailResponseDoc": { + "forbes.billionairesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/googlepatents.DetailResponse" + "$ref": "#/definitions/forbes.BillionairesResponse" }, "msg": { "example": "OK", @@ -98527,14 +104176,14 @@ }, "type": "object" }, - "googlepatents.recentResponseDoc": { + "forbes.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/googlepatents.RecentResponse" + "$ref": "#/definitions/forbes.CategoriesResponse" }, "msg": { "example": "OK", @@ -98543,14 +104192,14 @@ }, "type": "object" }, - "googlepatents.searchResponseDoc": { + "forbes.headlinesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/googlepatents.SearchResponse" + "$ref": "#/definitions/forbes.HeadlinesResponse" }, "msg": { "example": "OK", @@ -98559,14 +104208,14 @@ }, "type": "object" }, - "googlepatents.suggestResponseDoc": { + "forbes.personResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/googlepatents.SuggestResponse" + "$ref": "#/definitions/forbes.PersonResponse" }, "msg": { "example": "OK", @@ -98575,350 +104224,212 @@ }, "type": "object" }, - "googleplay.App": { + "foreignaffairs.ArticleResponse": { "properties": { - "ad_supported": { - "description": "Whether the app shows ads, as declared on its Google Play page.", - "example": false, - "type": "boolean" - }, - "android_max_version": { - "description": "Highest Android version the app supports, such as `15`. Shows `VARY` when none is listed.", - "example": "15", - "type": "string" - }, - "android_version": { - "description": "Minimum Android version the app requires, such as `8.0`.", - "example": "8.0", - "type": "string" - }, - "android_version_text": { - "description": "Minimum Android version as Google Play words it, such as `8.0 and up`. Shows `Varies with device` when none is listed.", - "example": "8.0 and up", - "type": "string" - }, - "app_id": { - "description": "Package name of the app on Google Play, such as `com.openai.chatgpt`. Use it with the other Google Play endpoints.", - "example": "com.openai.chatgpt", - "type": "string" - }, - "available": { - "description": "Whether the app is available on Google Play.", - "example": true, - "type": "boolean" - }, - "categories": { - "description": "Categories the app is listed under on Google Play.", + "authors": { "items": { - "$ref": "#/definitions/googleplay.Category" + "type": "string" }, "type": "array" }, - "comments": { - "description": "Up to five user review texts shown on the app's details page.", - "example": [ - "[\"Great app\"", - "\"Very useful\"]" - ], + "categories": { "items": { "type": "string" }, "type": "array" }, - "content_rating": { - "description": "Content rating label shown on the app page, such as `Teen`.", - "example": "Teen", - "type": "string" - }, - "content_rating_description": { - "description": "Content descriptors listed with the rating, such as `Users Interact, In-App Purchases`.", - "example": "Users Interact, In-App Purchases", - "type": "string" - }, - "currency": { - "description": "Currency code of the price, such as `USD`.", - "example": "USD", - "type": "string" - }, "description": { - "description": "Full app description as plain text.", - "example": "Introducing ChatGPT for Android: OpenAI's latest advancements at your fingertips.", "type": "string" }, - "description_html": { - "description": "Full app description with its HTML formatting kept.", - "example": "Introducing ChatGPT for Android: OpenAI's latest advancements at your fingertips.

This official app is free.", + "image_url": { "type": "string" }, - "developer": { - "description": "Name of the app's developer or publisher.", - "example": "OpenAI", - "type": "string" + "is_gated": { + "type": "boolean" }, - "developer_address": { - "description": "Developer's postal address as listed on the app page.", - "example": "1455 3RD St, San Francisco, CA 94158-2210, United States", - "type": "string" + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" }, - "developer_email": { - "description": "Developer's contact email as listed on the app page.", - "example": "support@openai.com", + "published_at": { "type": "string" }, - "developer_id": { - "description": "Google Play developer ID. Use it with the developer endpoint.", - "example": "7577165439232992817", + "title": { "type": "string" }, - "developer_internal_id": { - "description": "Google Play developer ID, the same value as `developer_id`.", - "example": "7577165439232992817", + "updated_at": { "type": "string" }, - "developer_legal_address": { - "description": "Developer's legal address as listed on the app page, on one line.", - "example": "1455 3RD St, San Francisco, CA 94158-2210, United States", + "url": { "type": "string" - }, - "developer_legal_email": { - "description": "Developer's legal contact email as listed on the app page.", - "example": "support@openai.com", + } + }, + "type": "object" + }, + "foreignaffairs.AuthorArticle": { + "properties": { + "dek": { "type": "string" }, - "developer_legal_name": { - "description": "Developer's registered legal name as listed on the app page.", - "example": "OpenAI Opco, LLC", + "issue_label": { "type": "string" }, - "developer_legal_phone_number": { - "description": "Developer's legal contact phone number as listed on the app page.", - "example": "+1 415-231-2395", + "issue_url": { "type": "string" }, - "developer_website": { - "description": "URL of the developer's website.", - "example": "https://help.openai.com", + "title": { "type": "string" }, - "discount_end_date": { - "description": "End date of the current discounted price, when the app is on sale.", - "example": "2026-03-31T23:59:59Z", + "url": { "type": "string" - }, - "early_access_enabled": { - "description": "Whether the app is in Google Play early access.", - "example": false, - "type": "boolean" - }, - "features": { - "description": "Feature highlights listed on the app page, each with a title and description.", + } + }, + "type": "object" + }, + "foreignaffairs.AuthorResponse": { + "properties": { + "articles": { "items": { - "$ref": "#/definitions/googleplay.Feature" + "$ref": "#/definitions/foreignaffairs.AuthorArticle" }, "type": "array" }, - "free": { - "description": "Whether the app is free to install.", - "example": true, - "type": "boolean" - }, - "genre": { - "description": "Main category name of the app, such as `Productivity`.", - "example": "Productivity", - "type": "string" - }, - "genre_id": { - "description": "ID of the app's main category, such as `PRODUCTIVITY`.", - "example": "PRODUCTIVITY", + "bio": { "type": "string" }, - "header_image": { - "description": "URL of the app's header image.", - "example": "https://play-lh.googleusercontent.com/sample-header-image", + "name": { "type": "string" }, - "histogram": { - "description": "Number of ratings at each star level, keyed `1` to `5`.", - "type": "object" - }, - "iap_range": { - "description": "Price range of in-app purchases as Google Play shows it, such as `$0.99 - $199.99 per item`.", - "example": "$0.99 - $199.99 per item", + "slug": { "type": "string" }, - "icon": { - "description": "URL of the app icon.", - "example": "https://play-lh.googleusercontent.com/lmG9HlI0awHie0cyBieWXeNjpyXvHPwDBb8MNOVIyp0P8VEh95AiBHtUZSDVR3HLe3A", + "url": { "type": "string" - }, - "installs": { - "description": "Install count band as Google Play shows it, such as `100,000,000+`.", - "example": "100,000,000+", + } + }, + "type": "object" + }, + "foreignaffairs.HeadlineItem": { + "properties": { + "author": { "type": "string" }, - "is_available_in_play_pass": { - "description": "Whether the app is part of Google Play Pass.", - "example": false, - "type": "boolean" - }, - "max_installs": { - "description": "Larger of the two install-count figures Google Play reports for the app.", - "example": 500000000, - "type": "integer" - }, - "min_installs": { - "description": "Smaller of the two install-count figures Google Play reports, matching the `installs` band.", - "example": 100000000, - "type": "integer" - }, - "more_by_developer": { - "description": "Other apps from the same developer, from the \"More by\" list on the app page.", - "items": { - "$ref": "#/definitions/googleplay.ListApp" - }, - "type": "array" - }, - "offers_iap": { - "description": "Whether the app offers in-app purchases.", - "example": true, - "type": "boolean" - }, - "original_price": { - "description": "Price before the discount, in the same currency as `price`. Omitted when there is no original price.", - "example": 4.99, - "type": "number" - }, - "platforms": { - "description": "Device types the app supports, such as `phone`, `tablet` or `chromebook`.", - "example": [ - "[\"phone\"", - "\"tablet\"", - "\"chromebook\"]" - ], + "categories": { "items": { "type": "string" }, "type": "array" }, - "preregister": { - "description": "Whether the app is open for pre-registration.", - "example": false, - "type": "boolean" - }, - "preview_video": { - "description": "URL of the app's preview video.", - "example": "https://play.google.com/preview/sample", + "image_url": { "type": "string" }, - "price": { - "description": "Price of the app in the currency given by `currency`. `0` for free apps.", - "example": 0, - "type": "number" - }, - "price_text": { - "description": "Price as Google Play displays it, such as `Free`.", - "example": "Free", + "published_at": { "type": "string" }, - "privacy_policy": { - "description": "URL of the app's privacy policy.", - "example": "https://openai.com/policies/privacy-policy", + "summary": { "type": "string" }, - "ratings": { - "description": "Total number of star ratings the app has received.", - "example": 40123456, - "type": "integer" - }, - "recent_changes": { - "description": "Text of the latest release notes.", - "example": "Bug fixes and performance improvements.", + "title": { "type": "string" }, - "released": { - "description": "Release date of the app as listed on Google Play.", - "example": "2023-07-19", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "foreignaffairs.HeadlinesResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/foreignaffairs.HeadlineItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "foreignaffairs.Topic": { + "properties": { + "feed_url": { "type": "string" }, - "reviews": { - "description": "Total number of written reviews the app has received.", - "example": 1234567, - "type": "integer" - }, - "score": { - "description": "Average star rating of the app, out of 5.", - "example": 4.8, - "type": "number" - }, - "score_text": { - "description": "Average rating as Google Play displays it, such as `4.8`.", - "example": "4.8", + "name": { "type": "string" }, - "screenshots": { - "description": "URLs of the app's screenshots.", - "example": [ - "[\"https://play-lh.googleusercontent.com/sample-screenshot-1\"", - "\"https://play-lh.googleusercontent.com/sample-screenshot-2\"]" - ], + "slug": { + "type": "string" + } + }, + "type": "object" + }, + "foreignaffairs.TopicResponse": { + "properties": { + "items": { "items": { - "type": "string" + "$ref": "#/definitions/foreignaffairs.HeadlineItem" }, "type": "array" }, - "similar_apps": { - "description": "Apps Google Play lists as similar to this one on the app page.", + "topic": { + "$ref": "#/definitions/foreignaffairs.Topic" + } + }, + "type": "object" + }, + "foreignaffairs.TopicsResponse": { + "properties": { + "topics": { "items": { - "$ref": "#/definitions/googleplay.ListApp" + "$ref": "#/definitions/foreignaffairs.Topic" }, "type": "array" - }, - "summary": { - "description": "Short tagline shown under the app title.", - "example": "The official app by OpenAI", - "type": "string" - }, - "title": { - "description": "App name as shown on Google Play.", - "example": "ChatGPT", - "type": "string" - }, - "updated": { - "description": "Time the app was last updated, in Unix seconds.", - "example": 1736899200, + } + }, + "type": "object" + }, + "foreignaffairs.articleResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "url": { - "description": "Google Play details page URL for the app, in the requested language and country.", - "example": "https://play.google.com/store/apps/details?id=com.openai.chatgpt&hl=en&gl=us", - "type": "string" + "data": { + "$ref": "#/definitions/foreignaffairs.ArticleResponse" }, - "version": { - "description": "Current app version string. Shows `VARY` when the version differs by device.", - "example": "1.2026.056", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "foreignaffairs.authorResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "video": { - "description": "URL of the app's promo video.", - "example": "https://play.google.com/video/sample", - "type": "string" + "data": { + "$ref": "#/definitions/foreignaffairs.AuthorResponse" }, - "video_image": { - "description": "URL of the cover image for the app's promo video.", - "example": "https://play-lh.googleusercontent.com/sample-video-cover", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "googleplay.AppDetailsResponse": { + "foreignaffairs.headlinesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/googleplay.App" + "$ref": "#/definitions/foreignaffairs.HeadlinesResponse" }, "msg": { "example": "OK", @@ -98927,373 +104438,352 @@ }, "type": "object" }, - "googleplay.Category": { + "foreignaffairs.topicResponseDoc": { "properties": { - "id": { - "description": "Category ID on Google Play, such as `PRODUCTIVITY`.", - "example": "PRODUCTIVITY", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "description": "Category name as shown on Google Play, such as `Productivity`.", - "example": "Productivity", + "data": { + "$ref": "#/definitions/foreignaffairs.TopicResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "googleplay.DataSafetyEntry": { + "foreignaffairs.topicsResponseDoc": { "properties": { - "data": { - "description": "Kind of data covered by this disclosure, such as `Email address`.", - "example": "Email address", - "type": "string" - }, - "optional": { - "description": "Whether providing this data is optional for the user.", - "example": false, - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "purpose": { - "description": "Reason the developer gives for using this data, such as `Analytics`.", - "example": "Analytics", - "type": "string" + "data": { + "$ref": "#/definitions/foreignaffairs.TopicsResponse" }, - "type": { - "description": "Data group this item belongs to, such as `Personal info`.", - "example": "Personal info", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "googleplay.DataSafetyResult": { + "foreignpolicy.ArticleResponse": { "properties": { - "collected_data": { - "description": "Data the app says it collects, one entry per data item.", + "authors": { "items": { - "$ref": "#/definitions/googleplay.DataSafetyEntry" + "type": "string" }, "type": "array" }, - "privacy_policy_url": { - "description": "URL of the app's privacy policy.", - "example": "https://openai.com/policies/privacy-policy", + "description": { "type": "string" }, - "security_practices": { - "description": "Security practices the developer declares for the app.", - "items": { - "$ref": "#/definitions/googleplay.SecurityPractice" - }, - "type": "array" + "image_url": { + "type": "string" }, - "shared_data": { - "description": "Data the app says it shares with third parties, one entry per data item.", + "is_gated": { + "type": "boolean" + }, + "paragraphs": { "items": { - "$ref": "#/definitions/googleplay.DataSafetyEntry" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "googleplay.DeviceRating": { - "properties": { - "device": { - "description": "Device type the rating breakdown covers: `phone`, `tablet` or `chromebook`.", - "example": "phone", - "type": "string" }, - "histogram": { - "description": "Number of ratings at each star level on this device type, keyed `1` to `5`.", - "type": "object" + "published_at": { + "type": "string" }, - "ratings": { - "description": "Total number of star ratings on this device type.", - "example": 326809, - "type": "integer" + "section": { + "type": "string" }, - "reviews": { - "description": "Total number of written reviews on this device type.", - "example": 8946, - "type": "integer" + "title": { + "type": "string" }, - "score": { - "description": "Average star rating on this device type, out of 5.", - "example": 4.7, - "type": "number" + "updated_at": { + "type": "string" }, - "score_text": { - "description": "Average rating on this device type as Google Play displays it, such as `4.7`.", - "example": "4.7", + "url": { "type": "string" } }, "type": "object" }, - "googleplay.Feature": { + "foreignpolicy.AuthorArticle": { "properties": { - "description": { - "description": "Short explanation of the feature.", - "example": "Get answers, writing help, and image generation.", + "published_at": { + "type": "string" + }, + "section": { + "type": "string" + }, + "section_url": { "type": "string" }, "title": { - "description": "Name of the feature highlight.", - "example": "AI assistant", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "googleplay.ListApp": { + "foreignpolicy.AuthorResponse": { "properties": { - "app_id": { - "description": "Package name of the app on Google Play, such as `com.openai.chatgpt`.", - "example": "com.openai.chatgpt", - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/foreignpolicy.AuthorArticle" + }, + "type": "array" }, - "currency": { - "description": "Currency code of the price, such as `USD`.", - "example": "USD", + "bio": { "type": "string" }, - "developer": { - "description": "Name of the app's developer or publisher.", - "example": "OpenAI", + "name": { "type": "string" }, - "developer_id": { - "description": "Google Play developer ID. Use it with the developer endpoint.", - "example": "7577165439232992817", + "slug": { "type": "string" }, - "free": { - "description": "Whether the app is free to install.", - "example": true, - "type": "boolean" - }, - "icon": { - "description": "URL of the app icon.", - "example": "https://play-lh.googleusercontent.com/lmG9HlI0awHie0cyBieWXeNjpyXvHPwDBb8MNOVIyp0P8VEh95AiBHtUZSDVR3HLe3A", + "url": { "type": "string" - }, - "price": { - "description": "Price of the app in the currency given by `currency`. `0` for free apps.", - "example": 0, - "type": "number" - }, - "price_text": { - "description": "Price as Google Play displays it on the card, such as `FREE`.", - "example": "FREE", + } + }, + "type": "object" + }, + "foreignpolicy.HeadlineItem": { + "properties": { + "author": { "type": "string" }, - "score": { - "description": "Average star rating of the app, out of 5.", - "example": 4.8, - "type": "number" + "categories": { + "items": { + "type": "string" + }, + "type": "array" }, - "score_text": { - "description": "Average rating as Google Play displays it, such as `4.8`.", - "example": "4.8", + "is_gated": { + "type": "boolean" + }, + "published_at": { "type": "string" }, "summary": { - "description": "Short tagline shown under the app title.", - "example": "The official app by OpenAI", "type": "string" }, "title": { - "description": "App name as shown on Google Play.", - "example": "ChatGPT", "type": "string" }, "url": { - "description": "Google Play details page URL for the app.", - "example": "https://play.google.com/store/apps/details?id=com.openai.chatgpt", "type": "string" } }, "type": "object" }, - "googleplay.Review": { + "foreignpolicy.HeadlinesResponse": { "properties": { - "criterias": { - "description": "Per-criterion ratings attached to the review, when Google Play shows them.", + "items": { "items": { - "$ref": "#/definitions/googleplay.ReviewCriteria" + "$ref": "#/definitions/foreignpolicy.HeadlineItem" }, "type": "array" - }, + } + }, + "type": "object" + }, + "foreignpolicy.LiveDetailResponse": { + "properties": { "date": { - "description": "Time the review was posted, in UTC (RFC 3339).", - "example": "2026-02-18T12:34:56Z", "type": "string" }, - "id": { - "description": "Google Play review ID.", - "example": "5b4e4d89-ce22-4f13-b676-bb3a7aafe278", + "description": { "type": "string" }, - "reply_date": { - "description": "Time the developer replied, in UTC (RFC 3339).", - "example": "2026-02-20T08:00:00Z", - "type": "string" + "highlights": { + "items": { + "$ref": "#/definitions/foreignpolicy.LiveHighlight" + }, + "type": "array" }, - "reply_text": { - "description": "Developer's reply to the review. `null` when there is no reply.", - "example": "Thanks for the feedback!", + "slug": { "type": "string" }, - "score": { - "description": "Star rating the reviewer gave, from 1 to 5.", - "example": 5, - "type": "integer" - }, - "score_text": { - "description": "Star rating as a string, such as `5`.", - "example": "5", + "title": { "type": "string" }, - "text": { - "description": "Body text of the review.", - "example": "Very helpful for quick answers and brainstorming.", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "foreignpolicy.LiveHighlight": { + "properties": { + "title": { "type": "string" }, - "thumbs_up": { - "description": "Number of users who marked the review as helpful.", - "example": 124, - "type": "integer" + "video_url": { + "type": "string" + } + }, + "type": "object" + }, + "foreignpolicy.LiveItem": { + "properties": { + "date": { + "type": "string" }, - "title": { - "description": "Review headline. Currently always `null`.", - "example": "Great app", + "description": { "type": "string" }, - "url": { - "description": "Google Play link to this review.", - "example": "https://play.google.com/store/apps/details?id=com.openai.chatgpt&reviewId=5b4e4d89-ce22-4f13-b676-bb3a7aafe278", + "image_url": { "type": "string" }, - "user_image": { - "description": "URL of the reviewer's profile picture.", - "example": "https://play-lh.googleusercontent.com/a-/ALV-UjVsample", + "slug": { "type": "string" }, - "user_name": { - "description": "Display name of the reviewer.", - "example": "Jane Doe", + "title": { "type": "string" }, - "version": { - "description": "App version the review was written for. `null` when not shown.", - "example": "1.2026.056", + "url": { "type": "string" } }, "type": "object" }, - "googleplay.ReviewCriteria": { + "foreignpolicy.LiveResponse": { "properties": { - "criteria": { - "description": "Name of the aspect being rated, such as `Accuracy`.", - "example": "Accuracy", - "type": "string" - }, - "rating": { - "description": "Rating given for this aspect. `null` when no rating is shown.", - "example": 5, - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/foreignpolicy.LiveItem" + }, + "type": "array" } }, "type": "object" }, - "googleplay.ReviewsResult": { + "foreignpolicy.ProjectItem": { "properties": { - "data": { - "description": "Reviews on this page, newest or sorted as requested.", + "authors": { "items": { - "$ref": "#/definitions/googleplay.Review" + "type": "string" }, "type": "array" }, - "next_pagination_token": { - "description": "Token to pass as `next_pagination_token` to fetch the next page of reviews.", - "example": "CscBIr4BAb_yELvAqtSacgExc3y_bO88_b1Q", + "section": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "googleplay.SecurityPractice": { + "foreignpolicy.ProjectResponse": { "properties": { - "description": { - "description": "Longer explanation of the security practice.", - "example": "Your data is transferred over a secure connection", + "items": { + "items": { + "$ref": "#/definitions/foreignpolicy.ProjectItem" + }, + "type": "array" + }, + "name": { "type": "string" }, - "practice": { - "description": "Security practice declared by the developer, such as `Data is encrypted in transit`.", - "example": "Data is encrypted in transit", + "slug": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "googleplay.Suggestion": { + "foreignpolicy.ProjectSummary": { "properties": { - "term": { - "example": "chatgpt", + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "googleplay.categoriesResponseDoc": { + "foreignpolicy.ProjectsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { + "items": { "items": { - "type": "string" + "$ref": "#/definitions/foreignpolicy.ProjectSummary" }, "type": "array" }, - "msg": { - "example": "OK", + "next_page": { + "type": "integer" + }, + "page": { + "type": "integer" + } + }, + "type": "object" + }, + "foreignpolicy.TopicItem": { + "properties": { + "published_at": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "googleplay.dataSafetyResponseDoc": { + "foreignpolicy.TopicResponse": { "properties": { - "code": { - "example": 200, + "items": { + "items": { + "$ref": "#/definitions/foreignpolicy.TopicItem" + }, + "type": "array" + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/googleplay.DataSafetyResult" + "topic": { + "type": "string" }, - "msg": { - "example": "OK", + "type": { "type": "string" } }, "type": "object" }, - "googleplay.developerResultsResponseDoc": { + "foreignpolicy.articleResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "items": {}, - "type": "array" + "$ref": "#/definitions/foreignpolicy.ArticleResponse" }, "msg": { "example": "OK", @@ -99302,15 +104792,14 @@ }, "type": "object" }, - "googleplay.listResultsResponseDoc": { + "foreignpolicy.authorResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "items": {}, - "type": "array" + "$ref": "#/definitions/foreignpolicy.AuthorResponse" }, "msg": { "example": "OK", @@ -99319,15 +104808,14 @@ }, "type": "object" }, - "googleplay.permissionsResultsResponseDoc": { + "foreignpolicy.headlinesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "items": {}, - "type": "array" + "$ref": "#/definitions/foreignpolicy.HeadlinesResponse" }, "msg": { "example": "OK", @@ -99336,17 +104824,14 @@ }, "type": "object" }, - "googleplay.ratingsResponseDoc": { + "foreignpolicy.liveDetailResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "items": { - "$ref": "#/definitions/googleplay.DeviceRating" - }, - "type": "array" + "$ref": "#/definitions/foreignpolicy.LiveDetailResponse" }, "msg": { "example": "OK", @@ -99355,14 +104840,14 @@ }, "type": "object" }, - "googleplay.reviewsResponseDoc": { + "foreignpolicy.liveResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/googleplay.ReviewsResult" + "$ref": "#/definitions/foreignpolicy.LiveResponse" }, "msg": { "example": "OK", @@ -99371,15 +104856,14 @@ }, "type": "object" }, - "googleplay.searchResultsResponseDoc": { + "foreignpolicy.projectResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "items": {}, - "type": "array" + "$ref": "#/definitions/foreignpolicy.ProjectResponse" }, "msg": { "example": "OK", @@ -99388,15 +104872,14 @@ }, "type": "object" }, - "googleplay.similarResultsResponseDoc": { + "foreignpolicy.projectsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "items": {}, - "type": "array" + "$ref": "#/definitions/foreignpolicy.ProjectsResponse" }, "msg": { "example": "OK", @@ -99405,17 +104888,14 @@ }, "type": "object" }, - "googleplay.suggestResponseDoc": { + "foreignpolicy.topicResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "items": { - "$ref": "#/definitions/googleplay.Suggestion" - }, - "type": "array" + "$ref": "#/definitions/foreignpolicy.TopicResponse" }, "msg": { "example": "OK", @@ -99424,1971 +104904,2252 @@ }, "type": "object" }, - "gosugamers.BattleRoyalePlayer": { + "formula1.AwardEnum": { "properties": { - "country_code": { - "example": "IQ", - "type": "string" - }, - "id": { - "example": "505275", - "type": "string" - }, - "name": { - "example": "AZHY", + "label": { "type": "string" }, - "slug": { - "example": "azhy", + "value": { "type": "string" } }, "type": "object" }, - "gosugamers.BattleRoyaleTeam": { + "formula1.AwardRound": { "properties": { - "country_code": { - "example": "IQ", - "type": "string" - }, - "id": { - "example": "52872", + "grand_prix": { + "description": "GrandPrix is the short Grand Prix name.", + "example": "Australia", "type": "string" }, - "kill_points": { - "example": 11, - "type": "integer" - }, - "kills": { - "example": 11, + "meeting_id": { + "description": "MeetingID is the numeric meeting key the round links to.", + "example": 1279, "type": "integer" }, - "name": { - "example": "4K Esports", - "type": "string" - }, - "placement": { + "round": { + "description": "Round is the 1-based championship round.", "example": 1, "type": "integer" }, - "placement_points": { - "example": 0, - "type": "integer" - }, - "players": { - "items": { - "$ref": "#/definitions/gosugamers.BattleRoyalePlayer" - }, - "type": "array" - }, - "points_addition": { - "type": "integer" + "team": { + "description": "Team is the winner's team for a driver award.", + "example": "Mercedes", + "type": "string" }, - "points_deduction": { - "type": "integer" + "time": { + "description": "Time is the award time or value the row renders.", + "example": "1:18.518", + "type": "string" }, - "slug": { - "example": "4k-esports", + "winner": { + "description": "Winner is the award winner's name or, for the fastest-pit-stop\naward, the winning team.", + "example": "George Russell", "type": "string" }, - "total_points": { - "example": 11, - "type": "integer" + "winner_tla": { + "description": "WinnerTLA is the winner's three-letter abbreviation when the award\nis a driver award.", + "example": "RUS", + "type": "string" } }, "type": "object" }, - "gosugamers.BroadcastTalent": { + "formula1.CalendarMeeting": { "properties": { - "country_code": { - "example": "GB", + "completed": { + "description": "Completed reports whether the card shows the completed-round marker\n(the chequered-flag badge icon).", + "example": true, + "type": "boolean" + }, + "country": { + "description": "Country is the country name from the card's flag title.", + "example": "Brazil", "type": "string" }, - "country_name": { - "example": "United Kingdom", + "date_text": { + "description": "DateText is the raw weekend date text the card renders.", + "example": "06 - 08 Nov", "type": "string" }, - "game": { - "example": "valorant", + "end_date": { + "description": "EndDate is the parsed weekend end date in YYYY-MM-DD, when parseable.", + "example": "2026-11-08", "type": "string" }, - "id": { - "example": "597", + "event_slug": { + "description": "EventSlug is the race-hub slug for the weekend. It is a different\nslug space from the results-archive slug.", + "example": "brazil", "type": "string" }, - "image_url": { + "is_test_event": { + "description": "IsTestEvent marks pre-season testing.", + "example": false, + "type": "boolean" + }, + "official_name": { + "description": "OfficialName is the full official Grand Prix name.", + "example": "FORMULA 1 MSC CRUISES GRANDE PRÊMIO DE SÃO PAULO 2026", "type": "string" }, - "language_code": { - "example": "EN", + "round": { + "description": "Round is the championship round; null for a pre-season test.", + "example": 20, + "type": "integer" + }, + "short_name": { + "description": "ShortName is the short event name the card renders.", + "example": "Brazil", + "type": "string" + }, + "start_date": { + "description": "StartDate is the parsed weekend start date in YYYY-MM-DD, when the\ncard's date text could be parsed.", + "example": "2026-11-06", + "type": "string" + }, + "status": { + "description": "Status is completed or upcoming.", + "example": "completed", + "type": "string" + } + }, + "type": "object" + }, + "formula1.Circuit": { + "properties": { + "first_grand_prix": { + "description": "FirstGrandPrix is the year the circuit first hosted a Grand Prix.", + "example": 1973, + "type": "integer" + }, + "laps": { + "description": "Laps is the scheduled race lap count.", + "example": 71, + "type": "integer" + }, + "length_km": { + "description": "LengthKM is the parsed circuit length in kilometres.", + "example": 4.309, + "type": "number" + }, + "length_text": { + "description": "LengthText is the rendered circuit length, such as 4.309km.", + "example": "4.309km", "type": "string" }, "name": { - "example": "Frankie", + "description": "Name is the circuit short name from the page title.", + "example": "Sao Paulo", "type": "string" + } + }, + "type": "object" + }, + "formula1.DriverGridResponse": { + "properties": { + "count": { + "description": "Count is the number of rows in this response.", + "example": 23, + "type": "integer" }, - "roles": { - "example": [ - "Host" - ], + "drivers": { + "description": "Drivers is the current race grid.", "items": { - "type": "string" + "$ref": "#/definitions/formula1.GridDriver" }, "type": "array" }, - "slug": { - "example": "frankie", + "fetched_at": { + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "url": { + "season": { + "description": "Season is the season the site's grid page currently displays.", + "example": 2026, + "type": "integer" + }, + "source_url": { + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", "type": "string" } }, "type": "object" }, - "gosugamers.EncountersResponse": { + "formula1.DriverInfo": { "properties": { - "count": { - "example": 1, - "type": "integer" + "career_stats": { + "description": "CareerStats are the career statistics.", + "items": { + "$ref": "#/definitions/formula1.Stat" + }, + "type": "array" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "country": { + "description": "Country is the nationality line the profile renders, when present.", + "example": "Italy", "type": "string" }, - "game": { - "example": "valorant", + "first_name": { + "description": "FirstName and LastName are the two name parts the page title\ncarries.", + "example": "Kimi", "type": "string" }, - "match_id": { - "example": "660816", + "full_name": { + "description": "FullName is the title's full name.", + "example": "Kimi Antonelli", "type": "string" }, - "matches": { + "last_name": { + "example": "Antonelli", + "type": "string" + }, + "number": { + "description": "Number is the car number line the profile renders, when present.", + "example": "12", + "type": "string" + }, + "profile_stats": { + "description": "ProfileStats are the identity facts such as date and place of birth.", "items": { - "$ref": "#/definitions/gosugamers.MatchSummary" + "$ref": "#/definitions/formula1.Stat" }, "type": "array" }, - "source_url": { - "example": "https://www.gosugamers.net/valorant/matches", - "type": "string" + "season": { + "description": "Season is the season the season statistics describe.", + "example": 2026, + "type": "integer" }, - "team1_id": { - "example": "38335", + "season_stats": { + "description": "SeasonStats are the current-season statistics.", + "items": { + "$ref": "#/definitions/formula1.Stat" + }, + "type": "array" + }, + "slug": { + "description": "Slug is the requested profile slug.", + "example": "kimi-antonelli", "type": "string" }, - "team2_id": { - "example": "37547", + "team": { + "description": "Team is the constructor the profile title names.", + "example": "Mercedes", "type": "string" } }, "type": "object" }, - "gosugamers.Game": { + "formula1.DriverLink": { "properties": { "name": { - "example": "Valorant", + "description": "Name is the driver's full name.", + "example": "George Russell", "type": "string" }, "slug": { - "enum": [ - "dota2", - "counterstrike", - "lol", - "valorant", - "mobile-legends", - "pubg-mobile", - "wild-rift", - "free-fire", - "battlegrounds-mobile-india" - ], - "example": "valorant", + "description": "Slug is the driver profile slug.", + "example": "george-russell", + "type": "string" + }, + "url": { + "description": "URL is the driver profile page.", "type": "string" } }, "type": "object" }, - "gosugamers.GameMap": { + "formula1.DriverResponse": { "properties": { - "id": { - "example": "453", - "type": "string" + "count": { + "description": "Count is the number of rows in this response.", + "example": 23, + "type": "integer" }, - "image_url": { + "driver": { + "allOf": [ + { + "$ref": "#/definitions/formula1.DriverInfo" + } + ], + "description": "Driver is the parsed profile." + }, + "fetched_at": { + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "name": { - "example": "Summit", + "source_url": { + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", "type": "string" } }, "type": "object" }, - "gosugamers.GamePick": { + "formula1.DriverSeasonResultsResponse": { "properties": { - "image_url": { + "count": { + "description": "Count is the number of rows in this response.", + "example": 23, + "type": "integer" + }, + "driver": { + "description": "Driver is the display name from the page title.", + "example": "KIMI ANTONELLI", "type": "string" }, - "pick": { - "example": "Neon", + "driver_code": { + "description": "DriverCode is the site's driver code, the real key of the page.", + "example": "ANDANT01", "type": "string" }, - "player": { - "$ref": "#/definitions/gosugamers.GamePlayer" + "driver_slug": { + "description": "DriverSlug is the driver profile slug from the request (decorative on\nthe upstream page).", + "example": "kimi-antonelli", + "type": "string" }, - "slot": { - "example": 6, - "type": "integer" + "fetched_at": { + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", + "type": "string" }, - "type": { - "example": 1, + "rounds": { + "description": "Rounds is the round-ordered result list.", + "items": { + "$ref": "#/definitions/formula1.DriverSeasonRound" + }, + "type": "array" + }, + "season": { + "description": "Season is the season the rows belong to.", + "example": 2026, "type": "integer" + }, + "source_url": { + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", + "type": "string" } }, "type": "object" }, - "gosugamers.GamePlayer": { + "formula1.DriverSeasonRound": { "properties": { - "id": { - "example": "373491", + "date": { + "description": "Date is the raw weekend date text the page renders.", + "example": "08 Mar", "type": "string" }, - "name": { - "example": "Ninebody", + "grand_prix": { + "description": "GrandPrix is the short Grand Prix name.", + "example": "Australia", "type": "string" }, - "slug": { - "example": "ninebody", - "type": "string" - } - }, - "type": "object" - }, - "gosugamers.GameRef": { - "properties": { - "id": { - "example": "1361936", - "type": "string" + "points": { + "description": "Points is the points the driver scored in that round.", + "example": 18, + "type": "number" }, - "number": { - "example": 1, + "position": { + "description": "Position is the numeric finishing position, when the cell is numeric.", + "example": 2, "type": "integer" - } - }, - "type": "object" - }, - "gosugamers.GameRound": { - "properties": { - "overtime": { - "example": false, - "type": "boolean" }, - "period": { - "example": 0, - "type": "integer" + "position_text": { + "description": "PositionText carries a non-numeric classification such as DNF, NC or\nDSQ; the numeric position stays null for those rows.", + "example": "DNF", + "type": "string" }, - "team1_score": { - "example": 6, + "round": { + "description": "Round is the 1-based championship round.", + "example": 1, "type": "integer" }, - "team2_score": { - "example": 6, - "type": "integer" + "team": { + "description": "Team is the constructor the driver raced for in that round.", + "example": "Mercedes", + "type": "string" } }, "type": "object" }, - "gosugamers.GameTeam": { + "formula1.DriverStanding": { "properties": { - "first_pick": { - "example": false, - "type": "boolean" - }, - "id": { - "example": "58674", + "driver": { + "description": "Driver is the driver's full name.", + "example": "Kimi Antonelli", "type": "string" }, - "lineup": { - "items": { - "$ref": "#/definitions/gosugamers.GamePlayer" - }, - "type": "array" - }, - "logo_url": { + "driver_code": { + "description": "DriverCode is the site's driver code from the profile link.", + "example": "ANDANT01", "type": "string" }, - "name": { - "example": "Unsettled Resentment", + "driver_slug": { + "description": "DriverSlug is the driver profile slug from the same link.", + "example": "kimi-antonelli", "type": "string" }, - "picks": { - "items": { - "$ref": "#/definitions/gosugamers.GamePick" - }, - "type": "array" - }, - "placement": { - "example": 1, - "type": "integer" - }, - "score": { - "example": 17, - "type": "integer" - }, - "side": { - "example": "Radiant", + "driver_tla": { + "description": "DriverTLA is the driver's three-letter abbreviation.", + "example": "ANT", "type": "string" }, - "slug": { - "example": "unsettled-resentment", + "driver_url": { + "description": "DriverURL is the driver's season standings page.", "type": "string" }, - "winner": { - "example": true, - "type": "boolean" - } - }, - "type": "object" - }, - "gosugamers.GameVOD": { - "properties": { - "channel": { + "nationality": { + "description": "Nationality is the three-letter nationality the table renders.", + "example": "ITA", "type": "string" }, - "host": { - "example": 0, + "points": { + "description": "Points is the season points total.", + "example": 390, + "type": "number" + }, + "position": { + "description": "Position is the championship position.", + "example": 1, "type": "integer" }, - "thumb_url": { + "team": { + "description": "Team is the constructor the driver scored for.", + "example": "Mercedes", "type": "string" }, - "title": { + "team_slug": { + "description": "TeamSlug is the team identifier from the team link.", + "example": "mercedes", "type": "string" }, - "video_id": { - "example": "qqauxAJWoFw", + "team_url": { + "description": "TeamURL is the team's season standings page.", "type": "string" } }, "type": "object" }, - "gosugamers.GamesResponse": { + "formula1.DriverStandingsResponse": { "properties": { "count": { - "example": 6, + "description": "Count is the number of rows in this response.", + "example": 23, "type": "integer" }, "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "games": { - "items": { - "$ref": "#/definitions/gosugamers.Game" - }, - "type": "array" + "season": { + "description": "Season is the season the standings belong to.", + "example": 2026, + "type": "integer" }, "source_url": { - "example": "https://www.gosugamers.net/valorant/matches", + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", "type": "string" + }, + "standings": { + "description": "Standings is the position-ordered table.", + "items": { + "$ref": "#/definitions/formula1.DriverStanding" + }, + "type": "array" } }, "type": "object" }, - "gosugamers.MatchDetail": { + "formula1.EnumValue": { "properties": { - "best_of": { - "example": 3, - "type": "integer" - }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "value": { "type": "string" + } + }, + "type": "object" + }, + "formula1.FiltersData": { + "properties": { + "awards": { + "items": { + "$ref": "#/definitions/formula1.AwardEnum" + }, + "type": "array" }, - "finished": { - "example": false, - "type": "boolean" - }, - "game": { - "example": "valorant", - "type": "string" + "current_season": { + "type": "integer" }, - "game_numbers": { - "example": [ - 1 - ], + "json_assemblies": { + "description": "JSONAssemblies are the editorial assembly content types with their\neither/or input contracts.", "items": { - "type": "integer" + "$ref": "#/definitions/formula1.EnumValue" }, "type": "array" }, - "games": { + "json_awards": { "items": { - "$ref": "#/definitions/gosugamers.GameRef" + "$ref": "#/definitions/formula1.EnumValue" }, "type": "array" }, - "group": { - "example": "Week 2", - "type": "string" - }, - "id": { - "example": "663300", - "type": "string" - }, - "opponents": { + "json_editorial_resources": { "items": { - "$ref": "#/definitions/gosugamers.Opponent" + "$ref": "#/definitions/formula1.EnumValue" }, "type": "array" }, - "round": { - "example": "Round 1", - "type": "string" - }, - "source_url": { - "example": "https://www.gosugamers.net/valorant/matches", - "type": "string" - }, - "stage": { - "type": "string" - }, - "start_time": { - "example": "2026-10-27T12:45:00Z", - "type": "string" - }, - "streams": { + "json_results_datasets": { + "description": "JSONResultsDatasets, JSONAwards and JSONEditorialResources are the\nclosed sets of the JSON API routes.", "items": { - "$ref": "#/definitions/gosugamers.Stream" + "$ref": "#/definitions/formula1.EnumValue" }, "type": "array" }, - "tournament": { - "$ref": "#/definitions/gosugamers.TournamentRef" - }, - "url": { - "type": "string" - }, - "venue": { - "type": "string" - } - }, - "type": "object" - }, - "gosugamers.MatchGameResponse": { - "properties": { - "battle_royale_teams": { - "description": "BattleRoyaleTeams is filled for battle-royale titles (PUBG Mobile), which list every\nteam's placement and points instead of two sides.", + "json_season_ranges": { "items": { - "$ref": "#/definitions/gosugamers.BattleRoyaleTeam" + "$ref": "#/definitions/formula1.SeasonRange" }, "type": "array" }, - "best_of": { - "example": 3, - "type": "integer" - }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" - }, - "game": { - "example": "valorant", - "type": "string" - }, - "id": { - "example": "1361936", - "type": "string" - }, - "map": { - "$ref": "#/definitions/gosugamers.GameMap" - }, - "match_number": { - "example": 1, - "type": "integer" - }, - "number": { - "example": 1, - "type": "integer" - }, - "player_based": { - "example": false, - "type": "boolean" - }, - "round": { - "example": "Round 1", - "type": "string" - }, - "rounds": { + "notes": { "items": { - "$ref": "#/definitions/gosugamers.GameRound" + "type": "string" }, "type": "array" }, - "source_url": { - "example": "https://www.gosugamers.net/valorant/matches", - "type": "string" - }, - "start_time": { - "example": "2026-10-27T01:00:00Z", - "type": "string" - }, - "teams": { + "season_ranges": { "items": { - "$ref": "#/definitions/gosugamers.GameTeam" + "$ref": "#/definitions/formula1.SeasonRange" }, "type": "array" }, - "vods": { + "session_views": { "items": { - "$ref": "#/definitions/gosugamers.GameVOD" + "$ref": "#/definitions/formula1.SessionEnum" }, "type": "array" + }, + "verified_on": { + "type": "string" } }, "type": "object" }, - "gosugamers.MatchListResponse": { + "formula1.FiltersResponse": { "properties": { "count": { - "example": 10, + "description": "Count is the number of rows in this response.", + "example": 23, "type": "integer" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" + "data": { + "$ref": "#/definitions/formula1.FiltersData" }, - "game": { - "example": "valorant", + "fetched_at": { + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "matches": { - "items": { - "$ref": "#/definitions/gosugamers.MatchSummary" - }, - "type": "array" - }, - "page": { - "example": 1, - "type": "integer" - }, - "page_size": { - "example": 10, - "type": "integer" - }, "source_url": { - "example": "https://www.gosugamers.net/valorant/matches", + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", "type": "string" - }, - "total_pages": { - "example": 165, - "type": "integer" - }, - "total_rows": { - "example": 1647, - "type": "integer" } }, "type": "object" }, - "gosugamers.MatchSummary": { + "formula1.GridDriver": { "properties": { - "finished": { - "example": false, - "type": "boolean" + "country": { + "description": "Country is the nationality from the card's flag, when present.", + "example": "Thailand", + "type": "string" }, - "game": { - "example": "valorant", + "first_name": { + "description": "FirstName and LastName are the two name parts the card renders.", + "example": "Alexander", "type": "string" }, - "group": { - "example": "Week 2", + "full_name": { + "description": "FullName is the joined name.", + "example": "Alexander Albon", "type": "string" }, - "id": { - "example": "663300", + "last_name": { + "example": "Albon", "type": "string" }, - "match_number": { - "example": 2, - "type": "integer" + "slug": { + "description": "Slug is the driver profile slug.", + "example": "alexander-albon", + "type": "string" }, - "round": { - "example": "Round 1", + "team": { + "description": "Team is the constructor the card names.", + "example": "Williams", "type": "string" }, - "stage": { - "example": "Main Event", + "team_colour": { + "description": "TeamColour is the card's team colour hex value, when present.", + "example": "#1868db", "type": "string" }, - "start_time": { - "example": "2026-10-27T12:45:00Z", + "url": { + "description": "URL is the driver profile page.", + "type": "string" + } + }, + "type": "object" + }, + "formula1.GridTeam": { + "properties": { + "colour": { + "description": "Colour is the card's team colour hex value, when present.", + "example": "#00a1e8", "type": "string" }, - "teams": { + "drivers": { + "description": "Drivers are the drivers the card names.", "items": { - "$ref": "#/definitions/gosugamers.Team" + "$ref": "#/definitions/formula1.GridTeamDriver" }, "type": "array" }, - "tournament": { - "$ref": "#/definitions/gosugamers.TournamentRef" + "name": { + "description": "Name is the team name the card renders.", + "example": "Alpine", + "type": "string" }, - "url": { + "slug": { + "description": "Slug is the team profile slug.", + "example": "alpine", "type": "string" }, - "venue": { - "example": "The Hub, Shanghai, China", + "url": { + "description": "URL is the team profile page.", "type": "string" } }, "type": "object" }, - "gosugamers.Opponent": { + "formula1.GridTeamDriver": { "properties": { - "country": { - "example": "China", + "first_name": { + "description": "FirstName and LastName are the two name parts the card renders.", + "example": "Pierre", "type": "string" }, - "country_code": { - "example": "CN", + "full_name": { + "description": "FullName is the joined name.", + "example": "Pierre Gasly", "type": "string" }, - "id": { - "example": "51203", + "last_name": { + "example": "Gasly", "type": "string" - }, - "logo_url": { + } + }, + "type": "object" + }, + "formula1.HubResultRow": { + "properties": { + "driver": { + "description": "Driver is the driver's name.", + "example": "Lando Norris", "type": "string" }, - "name": { - "example": "Wolves Esports", + "driver_tla": { + "description": "DriverTLA is the driver's three-letter abbreviation.", + "example": "NOR", "type": "string" }, - "placement": { - "example": 1, - "type": "integer" + "points": { + "description": "Points is the points scored.", + "example": 25, + "type": "number" }, - "score": { - "example": 2, + "position": { + "description": "Position is the classification position.", + "example": 1, "type": "integer" }, - "slug": { - "example": "wolves-esports", - "type": "string" - }, - "tag": { - "example": "WOL", + "time": { + "description": "Time is the classified time or gap.", + "example": "1:35:23.504", "type": "string" - }, - "winner": { - "example": true, - "type": "boolean" - }, - "world_ranking": { - "example": 69, - "type": "integer" } }, "type": "object" }, - "gosugamers.Participant": { + "formula1.HubSession": { "properties": { - "country_code": { - "example": "US", - "type": "string" - }, - "country_name": { - "example": "United States", - "type": "string" - }, - "id": { - "example": "37547", + "anchor": { + "description": "Anchor is the schedule anchor the page uses, such as #Race.", + "example": "#Race", "type": "string" }, - "logo_url": { + "end": { + "example": "2026-11-08T19:00:00.000Z", "type": "string" }, "name": { - "example": "100T", - "type": "string" - }, - "ranking": { - "example": 1, - "type": "integer" - }, - "slug": { - "example": "100-thieves", - "type": "string" - }, - "type": { - "example": "Team", + "description": "Name is the session name, such as Practice 1 - São Paulo Grand Prix.", + "example": "Race - São Paulo Grand Prix", "type": "string" }, - "url": { + "start": { + "description": "Start and End are the scheduled UTC timestamps.", + "example": "2026-11-08T17:00:00.000Z", "type": "string" } }, "type": "object" }, - "gosugamers.PlayerDetail": { + "formula1.JSONAwardOption": { "properties": { - "about": { - "type": "string" - }, - "country": { - "example": "Taiwan", + "text": { + "example": "Pirelli Pole Position", "type": "string" }, - "country_code": { - "example": "TW", + "value": { + "example": "/v1/fom-results-extension/pole-positions?season=2026", "type": "string" + } + }, + "type": "object" + }, + "formula1.JSONAwardsResponse": { + "properties": { + "awards": { + "items": { + "$ref": "#/definitions/formula1.JSONAwardOption" + }, + "type": "array" }, - "current_team": { - "$ref": "#/definitions/gosugamers.TeamStint" - }, - "draws": { - "example": 0, - "type": "integer" - }, - "earnings_usd": { - "example": 27692, - "type": "number" - }, - "elo_rating": { - "example": 952, + "count": { + "description": "Count is the number of rows in this response.", + "example": 23, "type": "integer" }, - "facebook": { - "type": "string" - }, "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" - }, - "first_name": { - "example": "Chun-ting", + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "game": { - "example": "valorant", - "type": "string" + "season": { + "example": 2026, + "type": "integer" }, - "id": { - "example": "368742", + "source_url": { + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", "type": "string" - }, - "image_url": { + } + }, + "type": "object" + }, + "formula1.JSONConstructorOption": { + "properties": { + "teamAccessibleColourCode": { + "example": "5c0012", "type": "string" }, - "last_name": { - "example": "Liu", + "teamColourCode": { + "example": "e8002d", "type": "string" }, - "losses": { - "example": 267, - "type": "integer" + "teamLogoImage": { + "$ref": "#/definitions/formula1.JSONImage" }, - "name": { - "example": "Spring", + "text": { + "example": "Ferrari", "type": "string" }, - "previous_teams": { + "value": { + "example": "Ferrari", + "type": "string" + } + }, + "type": "object" + }, + "formula1.JSONConstructorsResponse": { + "properties": { + "constructors": { "items": { - "$ref": "#/definitions/gosugamers.TeamStint" + "$ref": "#/definitions/formula1.JSONConstructorOption" }, "type": "array" }, - "region": { - "example": "China", - "type": "string" - }, - "region_ranking": { - "example": 16, + "count": { + "description": "Count is the number of rows in this response.", + "example": 23, "type": "integer" }, - "source_url": { - "example": "https://www.gosugamers.net/valorant/matches", + "fetched_at": { + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "streak": { - "example": -1, + "season": { + "example": 2026, "type": "integer" }, - "twitter": { + "source_url": { + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", "type": "string" - }, - "url": { + } + }, + "type": "object" + }, + "formula1.JSONDatasetOption": { + "properties": { + "editorialSessionType": { + "example": "Race", "type": "string" }, - "win_rate_percent": { - "example": 46, - "type": "integer" + "isAvailable": { + "example": true, + "type": "boolean" }, - "wins": { - "example": 228, - "type": "integer" + "isSessionResult": { + "example": true, + "type": "boolean" }, - "world_ranking": { - "example": 69, - "type": "integer" + "text": { + "example": "Race Result", + "type": "string" }, - "youtube": { + "value": { + "example": "race?meeting=1299", "type": "string" } }, "type": "object" }, - "gosugamers.RankRegion": { + "formula1.JSONDriverAssemblyResponse": { "properties": { - "id": { - "example": 33, + "count": { + "description": "Count is the number of rows in this response.", + "example": 23, "type": "integer" }, - "name": { - "example": "EMEA", + "data": { + "description": "Data is the upstream JSON payload, unchanged.", + "type": "object" + }, + "fetched_at": { + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", + "type": "string" + }, + "params": { + "additionalProperties": { + "type": "string" + }, + "description": "Params echoes the validated selectors used for the read.", + "type": "object" + }, + "resource": { + "description": "Resource is the upstream resource family, such as fom-results.", + "example": "fom-results", + "type": "string" + }, + "source_url": { + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", "type": "string" } }, "type": "object" }, - "gosugamers.RankedTeam": { + "formula1.JSONDriverOption": { "properties": { - "elo": { - "example": 2078.5, - "type": "number" + "driverAvatarImage": { + "$ref": "#/definitions/formula1.JSONImage" }, - "id": { - "example": "51203", + "driverFirstName": { + "example": "Kimi", "type": "string" }, - "logo_url": { + "driverLastName": { + "example": "Antonelli", "type": "string" }, - "name": { - "example": "100 Thieves", + "driverNameFormat": { + "example": "LastNameIsPrimary", "type": "string" }, - "previous_rank": { - "example": 2, - "type": "integer" - }, - "rank": { - "example": 1, - "type": "integer" - }, - "rank_change": { - "example": 1, - "type": "integer" + "driverShortName": { + "example": "K. Antonelli", + "type": "string" }, - "rank_change_name": { - "example": "up", + "teamAccessibleColourCode": { + "example": "067e6a", "type": "string" }, - "slug": { - "example": "100-thieves", + "teamColourCode": { + "example": "27f4d2", "type": "string" }, - "tag": { - "example": "100T", + "text": { + "example": "Antonelli, Kimi", "type": "string" }, - "url": { + "value": { + "example": "ANDANT01", "type": "string" } }, "type": "object" }, - "gosugamers.RankingsResponse": { + "formula1.JSONDriversResponse": { "properties": { "count": { - "example": 10, - "type": "integer" - }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" - }, - "game": { - "example": "valorant", - "type": "string" - }, - "page": { - "example": 1, - "type": "integer" - }, - "page_size": { - "example": 10, - "type": "integer" - }, - "q": { - "example": "Te", - "type": "string" - }, - "region_id": { - "example": 0, + "description": "Count is the number of rows in this response.", + "example": 23, "type": "integer" }, - "regions": { + "drivers": { "items": { - "$ref": "#/definitions/gosugamers.RankRegion" + "$ref": "#/definitions/formula1.JSONDriverOption" }, "type": "array" }, - "source_url": { - "example": "https://www.gosugamers.net/valorant/matches", + "fetched_at": { + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "teams": { - "items": { - "$ref": "#/definitions/gosugamers.RankedTeam" - }, - "type": "array" - }, - "total_pages": { - "example": 39, + "season": { + "example": 2026, "type": "integer" }, - "total_rows": { - "example": 384, - "type": "integer" + "source_url": { + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", + "type": "string" } }, "type": "object" }, - "gosugamers.RosterPlayer": { + "formula1.JSONEditorialResponse": { "properties": { - "country": { - "example": "Taiwan", - "type": "string" - }, - "country_code": { - "example": "TW", - "type": "string" + "count": { + "description": "Count is the number of rows in this response.", + "example": 23, + "type": "integer" }, - "id": { - "example": "368742", - "type": "string" + "data": { + "description": "Data is the upstream JSON payload, unchanged.", + "type": "object" }, - "joined_at": { - "example": "2024-01-16T16:00:00Z", + "fetched_at": { + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "left_at": { - "type": "string" + "params": { + "additionalProperties": { + "type": "string" + }, + "description": "Params echoes the validated selectors used for the read.", + "type": "object" }, - "name": { - "example": "Spring", + "resource": { + "description": "Resource is the upstream resource family, such as fom-results.", + "example": "fom-results", "type": "string" }, - "slug": { - "example": "spring-2", + "source_url": { + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", "type": "string" } }, "type": "object" }, - "gosugamers.StageGroup": { + "formula1.JSONEventTrackerResponse": { "properties": { - "format": { - "example": "Knockout", - "type": "string" + "count": { + "description": "Count is the number of rows in this response.", + "example": 23, + "type": "integer" }, - "id": { - "example": "71594", - "type": "string" + "data": { + "description": "Data is the upstream JSON payload, unchanged.", + "type": "object" }, - "name": { - "example": "Group C", + "fetched_at": { + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "participant_count": { - "example": 4, - "type": "integer" - }, - "participants": { - "items": { - "$ref": "#/definitions/gosugamers.Participant" + "params": { + "additionalProperties": { + "type": "string" }, - "type": "array" + "description": "Params echoes the validated selectors used for the read.", + "type": "object" }, - "result_type": { - "example": "Bracket", + "resource": { + "description": "Resource is the upstream resource family, such as fom-results.", + "example": "fom-results", "type": "string" }, - "start_time": { - "example": "2026-09-24T09:00:00Z", + "source_url": { + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", + "type": "string" + } + }, + "type": "object" + }, + "formula1.JSONImage": { + "properties": { + "default_image": { "type": "string" }, - "status": { - "example": "COMPLETED", + "public_id": { + "example": "common/f1/2026/mercedes/2026mercedeslogowhite", "type": "string" } }, "type": "object" }, - "gosugamers.StageGroupsResponse": { + "formula1.JSONMeetingDatasetsResponse": { "properties": { "count": { - "example": 5, + "description": "Count is the number of rows in this response.", + "example": 23, "type": "integer" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" - }, - "groups": { + "datasets": { "items": { - "$ref": "#/definitions/gosugamers.StageGroup" + "$ref": "#/definitions/formula1.JSONDatasetOption" }, "type": "array" }, - "source_url": { - "example": "https://www.gosugamers.net/valorant/matches", + "fetched_at": { + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "stage_id": { - "example": "28413", - "type": "string" + "meeting_id": { + "example": 1299, + "type": "integer" }, - "stage_name": { - "example": "Main Event", - "type": "string" + "season": { + "example": 2026, + "type": "integer" }, - "tournament_id": { - "example": "63147", + "source_url": { + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", "type": "string" } }, "type": "object" }, - "gosugamers.StageInfo": { + "formula1.JSONMeetingOption": { "properties": { - "id": { - "example": "28500", - "type": "string" - }, - "live": { + "isDefault": { "example": true, "type": "boolean" }, - "name": { - "example": "Main Event", + "meetingCountryCode": { + "example": "BRA", "type": "string" }, - "order": { - "example": 1, - "type": "integer" + "meetingIsoCountryName": { + "example": "Brazil", + "type": "string" }, - "status": { - "example": "Progressing", + "text": { + "example": "Brazil", "type": "string" + }, + "value": { + "example": 1299, + "type": "integer" } }, "type": "object" }, - "gosugamers.Stream": { + "formula1.JSONMeetingsResponse": { "properties": { - "language": { - "example": "zh", - "type": "string" - }, - "live": { - "example": true, - "type": "boolean" - }, - "platform_id": { - "example": 11, + "count": { + "description": "Count is the number of rows in this response.", + "example": 23, "type": "integer" }, - "thumbnail_url": { + "fetched_at": { + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "title": { - "example": "VALORANT Champions Tour CN", - "type": "string" + "meetings": { + "items": { + "$ref": "#/definitions/formula1.JSONMeetingOption" + }, + "type": "array" }, - "viewer_count": { - "example": 534, + "season": { + "example": 2026, "type": "integer" + }, + "source_url": { + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", + "type": "string" } }, "type": "object" }, - "gosugamers.Team": { + "formula1.JSONRaceAssemblyResponse": { "properties": { - "id": { - "example": "51203", - "type": "string" + "count": { + "description": "Count is the number of rows in this response.", + "example": 23, + "type": "integer" }, - "logo_url": { - "type": "string" + "data": { + "description": "Data is the upstream JSON payload, unchanged.", + "type": "object" }, - "name": { - "example": "Wolves Esports", + "fetched_at": { + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "score": { - "example": 2, - "type": "integer" + "params": { + "additionalProperties": { + "type": "string" + }, + "description": "Params echoes the validated selectors used for the read.", + "type": "object" }, - "slug": { - "example": "wolves-esports", + "resource": { + "description": "Resource is the upstream resource family, such as fom-results.", + "example": "fom-results", "type": "string" }, - "tag": { - "example": "WOL", + "source_url": { + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", "type": "string" - }, - "winner": { - "example": true, - "type": "boolean" } }, "type": "object" }, - "gosugamers.TeamDetail": { + "formula1.JSONResultsResponse": { "properties": { - "about": { - "type": "string" + "count": { + "description": "Count is the number of rows in this response.", + "example": 23, + "type": "integer" }, - "country": { - "example": "China", - "type": "string" + "data": { + "description": "Data is the upstream JSON payload, unchanged.", + "type": "object" }, - "country_code": { - "example": "CN", + "fetched_at": { + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "draws": { - "example": 0, - "type": "integer" + "params": { + "additionalProperties": { + "type": "string" + }, + "description": "Params echoes the validated selectors used for the read.", + "type": "object" }, - "earnings_usd": { - "example": 132662.49, - "type": "number" + "resource": { + "description": "Resource is the upstream resource family, such as fom-results.", + "example": "fom-results", + "type": "string" }, - "elo_rating": { - "example": 952, + "source_url": { + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", + "type": "string" + } + }, + "type": "object" + }, + "formula1.JSONSeasonAwardResponse": { + "properties": { + "count": { + "description": "Count is the number of rows in this response.", + "example": 23, "type": "integer" }, - "facebook": { - "type": "string" + "data": { + "description": "Data is the upstream JSON payload, unchanged.", + "type": "object" }, "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "game": { - "example": "valorant", - "type": "string" + "params": { + "additionalProperties": { + "type": "string" + }, + "description": "Params echoes the validated selectors used for the read.", + "type": "object" }, - "id": { - "example": "51203", + "resource": { + "description": "Resource is the upstream resource family, such as fom-results.", + "example": "fom-results", "type": "string" }, - "logo_url": { + "source_url": { + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", "type": "string" - }, - "losses": { - "example": 55, + } + }, + "type": "object" + }, + "formula1.JSONTeamAssemblyResponse": { + "properties": { + "count": { + "description": "Count is the number of rows in this response.", + "example": 23, "type": "integer" }, - "name": { - "example": "Wolves Esports", - "type": "string" + "data": { + "description": "Data is the upstream JSON payload, unchanged.", + "type": "object" }, - "region": { - "example": "China", + "fetched_at": { + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "region_ranking": { - "example": 16, - "type": "integer" - }, - "roster": { - "items": { - "$ref": "#/definitions/gosugamers.RosterPlayer" + "params": { + "additionalProperties": { + "type": "string" }, - "type": "array" + "description": "Params echoes the validated selectors used for the read.", + "type": "object" }, - "slug": { - "example": "wolves-esports", + "resource": { + "description": "Resource is the upstream resource family, such as fom-results.", + "example": "fom-results", "type": "string" }, "source_url": { - "example": "https://www.gosugamers.net/valorant/matches", + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", "type": "string" - }, - "streak": { - "example": -1, - "type": "integer" - }, - "tag": { - "example": "WOL", + } + }, + "type": "object" + }, + "formula1.Meeting": { + "properties": { + "date": { + "description": "Date is the raw weekend date text the upstream table renders.", + "example": "08 Nov", "type": "string" }, - "twitter": { + "grand_prix": { + "description": "GrandPrix is the short Grand Prix name the table renders.", + "example": "Brazil", "type": "string" }, - "upcoming_matches": { - "items": { - "$ref": "#/definitions/gosugamers.MatchSummary" - }, - "type": "array" + "laps": { + "description": "Laps is the winner's completed lap count.", + "example": 71, + "type": "integer" }, - "url": { + "meeting_id": { + "description": "MeetingID is the site's numeric meeting key, the only stable race id.", + "example": 1299, + "type": "integer" + }, + "results_slug": { + "description": "ResultsSlug is the results-archive slug for the meeting. It is a\ndifferent slug space from the race-hub event slug.", + "example": "brazil", "type": "string" }, - "win_rate_percent": { - "example": 41, + "round": { + "description": "Round is the 1-based championship round in the season's results order.", + "example": 20, "type": "integer" }, - "wins": { - "example": 39, - "type": "integer" + "team": { + "description": "Team is the winner's team.", + "example": "McLaren", + "type": "string" }, - "world_ranking": { - "example": 69, - "type": "integer" + "time": { + "description": "Time is the winner's race time.", + "example": "1:35:23.504", + "type": "string" }, - "youtube": { + "winner": { + "description": "Winner is the race winner's name, empty until the race runs.", + "example": "Lando Norris", + "type": "string" + }, + "winner_tla": { + "description": "WinnerTLA is the winner's three-letter abbreviation.", + "example": "NOR", "type": "string" } }, "type": "object" }, - "gosugamers.TeamResultsResponse": { + "formula1.MeetingsResponse": { "properties": { "count": { - "example": 10, + "description": "Count is the number of rows in this response.", + "example": 23, "type": "integer" }, "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "matches": { + "meetings": { + "description": "Meetings is the round-ordered meeting list.", "items": { - "$ref": "#/definitions/gosugamers.MatchSummary" + "$ref": "#/definitions/formula1.Meeting" }, "type": "array" }, - "page": { - "example": 1, - "type": "integer" - }, - "page_size": { - "example": 10, + "season": { + "description": "Season is the season the meetings belong to.", + "example": 2026, "type": "integer" }, "source_url": { - "example": "https://www.gosugamers.net/valorant/matches", - "type": "string" - }, - "team_id": { - "example": "37547", + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", "type": "string" - }, - "total_pages": { - "example": 23, - "type": "integer" - }, - "total_rows": { - "example": 229, - "type": "integer" } }, "type": "object" }, - "gosugamers.TeamStint": { + "formula1.RaceCalendarResponse": { "properties": { - "joined_at": { - "example": "2024-01-16T16:00:00Z", - "type": "string" - }, - "left_at": { - "type": "string" - }, - "name": { - "example": "Wolves Esports", - "type": "string" + "count": { + "description": "Count is the number of rows in this response.", + "example": 23, + "type": "integer" }, - "position": { - "example": "Member", + "fetched_at": { + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "slug": { - "example": "wolves-esports", - "type": "string" + "meetings": { + "description": "Meetings is the calendar in page order. Completed status is derived\nfrom the card's own chequered-flag badge; winners come from the\nseason-results route.", + "items": { + "$ref": "#/definitions/formula1.CalendarMeeting" + }, + "type": "array" }, - "tag": { - "example": "WOL", - "type": "string" + "season": { + "description": "Season is the season the calendar belongs to.", + "example": 2026, + "type": "integer" }, - "team_id": { - "example": "51203", + "source_url": { + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", "type": "string" } }, "type": "object" }, - "gosugamers.TournamentDetail": { + "formula1.RaceHubResponse": { "properties": { - "country": { - "example": "China", + "address": { + "example": "São Paulo, Brazil", "type": "string" }, + "circuit": { + "allOf": [ + { + "$ref": "#/definitions/formula1.Circuit" + } + ], + "description": "Circuit is the circuit facts block." + }, + "count": { + "description": "Count is the number of rows in this response.", + "example": 23, + "type": "integer" + }, "description": { + "description": "Description is the hub's own summary line.", "type": "string" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "end_date": { + "example": "2026-11-08T23:59:59.999Z", "type": "string" }, - "game": { - "example": "valorant", + "event_slug": { + "description": "EventSlug is the requested race-hub slug.", + "example": "brazil", "type": "string" }, - "game_name": { - "example": "Valorant", + "event_status": { + "description": "EventStatus is the schema.org event status URL.", + "example": "https://schema.org/EventScheduled", "type": "string" }, - "image_url": { + "fetched_at": { + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "lan": { - "example": true, - "type": "boolean" + "location": { + "description": "Location and Address are the host city and country.", + "example": "São Paulo", + "type": "string" }, - "prize_pool_usd": { - "example": 500000, - "type": "number" + "name": { + "description": "Name is the official Grand Prix name from the structured data.", + "example": "FORMULA 1 MSC CRUISES GRANDE PRÊMIO DE SÃO PAULO 2026", + "type": "string" }, - "source_url": { - "example": "https://www.gosugamers.net/valorant/matches", + "official_name": { + "description": "OfficialName is the card's official name when the hub renders one.", "type": "string" }, - "sponsors": { - "items": { - "type": "string" - }, - "type": "array" + "season": { + "description": "Season is the season the weekend belongs to.", + "example": 2026, + "type": "integer" }, - "stages": { + "sessions": { + "description": "Sessions is the published session schedule.", "items": { - "$ref": "#/definitions/gosugamers.StageInfo" + "$ref": "#/definitions/formula1.HubSession" }, "type": "array" }, - "start_time": { - "example": "2026-10-20T04:00:00Z", + "source_url": { + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", "type": "string" }, - "status": { - "example": "Live", + "start_date": { + "description": "StartDate and EndDate are the weekend bounds from the structured\ndata.", + "example": "2026-11-06T00:00:00.000Z", "type": "string" }, - "tournament": { - "$ref": "#/definitions/gosugamers.TournamentRef" - }, - "upcoming_matches": { + "top_results": { + "description": "TopResults is the completed race's top-five table; it is empty\nbefore the race runs.", "items": { - "$ref": "#/definitions/gosugamers.MatchSummary" + "$ref": "#/definitions/formula1.HubResultRow" }, "type": "array" + } + }, + "type": "object" + }, + "formula1.Season": { + "properties": { + "current": { + "description": "Current marks the season the site is currently showing.", + "example": true, + "type": "boolean" }, - "venue": { + "season": { + "description": "Season is the four-digit championship year.", + "example": 2026, + "type": "integer" + }, + "url": { + "description": "URL is the season's results page.", + "example": "https://www.formula1.com/en/results/2026/races", "type": "string" } }, "type": "object" }, - "gosugamers.TournamentParticipantsResponse": { + "formula1.SeasonAwardsResponse": { "properties": { + "award": { + "description": "Award is the requested canonical award value.", + "example": "pole-positions", + "type": "string" + }, + "award_label": { + "description": "AwardLabel is the page's own award title.", + "example": "Pirelli Pole Position", + "type": "string" + }, "count": { - "example": 16, + "description": "Count is the number of rows in this response.", + "example": 23, "type": "integer" }, "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" - }, - "game": { - "example": "valorant", + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "participants": { + "rounds": { + "description": "Rounds is the round-ordered winner list.", "items": { - "$ref": "#/definitions/gosugamers.Participant" + "$ref": "#/definitions/formula1.AwardRound" }, "type": "array" }, - "source_url": { - "example": "https://www.gosugamers.net/valorant/matches", - "type": "string" + "season": { + "description": "Season is the season the award belongs to.", + "example": 2026, + "type": "integer" }, - "tournament_id": { - "example": "63147", + "source_url": { + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", "type": "string" } }, "type": "object" }, - "gosugamers.TournamentRef": { + "formula1.SeasonRange": { "properties": { - "id": { - "example": "63208", - "type": "string" + "max": { + "type": "integer" }, - "name": { - "example": "VCT Threshold China 2026", - "type": "string" + "min": { + "type": "integer" }, - "slug": { - "example": "vct-threshold-china-2026", + "resource": { "type": "string" } }, "type": "object" }, - "gosugamers.TournamentRow": { + "formula1.SeasonResult": { "properties": { - "featured": { - "example": false, - "type": "boolean" - }, - "game": { - "example": "valorant", - "type": "string" - }, - "game_name": { - "example": "VALORANT", - "type": "string" - }, - "id": { - "example": "63208", + "date": { + "description": "Date is the raw date text the upstream table renders.", + "example": "08 Nov", "type": "string" }, - "image_url": { + "grand_prix": { + "description": "GrandPrix is the short Grand Prix name.", + "example": "Brazil", "type": "string" }, - "name": { - "example": "VCT Threshold China 2026", - "type": "string" + "laps": { + "description": "Laps is the winner's completed lap count.", + "example": 71, + "type": "integer" }, - "participant_count": { - "example": 8, + "meeting_id": { + "description": "MeetingID is the site's numeric meeting key.", + "example": 1299, "type": "integer" }, - "prize_currency": { - "example": "USD", + "results_slug": { + "description": "ResultsSlug is the results-archive slug for the meeting.", + "example": "brazil", "type": "string" }, - "prize_pool": { - "example": 500000, - "type": "number" - }, - "prize_pool_usd": { - "example": 500000, - "type": "number" + "round": { + "description": "Round is the 1-based championship round.", + "example": 20, + "type": "integer" }, - "slug": { - "example": "vct-threshold-china-2026", + "team": { + "description": "Team is the winner's team.", + "example": "McLaren", "type": "string" }, - "start_time": { - "example": "2026-10-20T04:00:00Z", + "time": { + "description": "Time is the winner's race time.", + "example": "1:35:23.504", "type": "string" }, - "status": { - "example": "Ongoing", + "winner": { + "description": "Winner is the race winner's name.", + "example": "Lando Norris", "type": "string" }, - "url": { + "winner_tla": { + "description": "WinnerTLA is the winner's three-letter abbreviation.", + "example": "NOR", "type": "string" } }, "type": "object" }, - "gosugamers.TournamentTalentsResponse": { + "formula1.SeasonResultsResponse": { "properties": { "count": { - "example": 10, + "description": "Count is the number of rows in this response.", + "example": 23, "type": "integer" }, "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" - }, - "source_url": { - "example": "https://www.gosugamers.net/valorant/matches", + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "talents": { + "results": { + "description": "Results is the round-ordered result list; a season that has not\nstarted yet is a valid empty list.", "items": { - "$ref": "#/definitions/gosugamers.BroadcastTalent" + "$ref": "#/definitions/formula1.SeasonResult" }, "type": "array" }, - "tournament_id": { - "example": "63147", + "season": { + "description": "Season is the season the rows belong to.", + "example": 2026, + "type": "integer" + }, + "source_url": { + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", "type": "string" } }, "type": "object" }, - "gosugamers.TournamentsResponse": { + "formula1.SeasonsResponse": { "properties": { "count": { - "example": 10, + "description": "Count is the number of rows in this response.", + "example": 23, + "type": "integer" + }, + "current_season": { + "description": "CurrentSeason is the season the site currently defaults to.", + "example": 2026, "type": "integer" }, "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "game": { - "example": "valorant", + "seasons": { + "description": "Seasons is the complete season list, newest first.", + "items": { + "$ref": "#/definitions/formula1.Season" + }, + "type": "array" + }, + "source_url": { + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", + "type": "string" + } + }, + "type": "object" + }, + "formula1.SessionEnum": { + "properties": { + "label": { "type": "string" }, - "page": { + "value": { + "type": "string" + } + }, + "type": "object" + }, + "formula1.SessionResult": { + "properties": { + "avg_speed": { + "description": "AvgSpeed is the fastest lap's average speed in km/h.", + "example": 213.407, + "type": "number" + }, + "driver": { + "description": "Driver is the driver's full name.", + "example": "Lando Norris", + "type": "string" + }, + "driver_tla": { + "description": "DriverTLA is the driver's three-letter abbreviation.", + "example": "NOR", + "type": "string" + }, + "gap": { + "description": "Gap is the practice session gap to the fastest lap.", + "example": "+0.253s", + "type": "string" + }, + "lap": { + "description": "Lap is the lap the pit stop or fastest lap happened on.", + "example": 55, + "type": "integer" + }, + "laps": { + "description": "Laps is the completed or scheduled lap count.", + "example": 71, + "type": "integer" + }, + "number": { + "description": "Number is the driver's car number.", "example": 1, "type": "integer" }, - "page_size": { - "example": 10, + "points": { + "description": "Points is the championship points the row scored.", + "example": 25, + "type": "number" + }, + "position": { + "description": "Position is the numeric classification, when the cell is numeric.", + "example": 1, "type": "integer" }, - "q": { - "example": "VCT", + "position_text": { + "description": "PositionText carries a non-numeric classification such as NC, DNF,\nDNS or DSQ; the numeric fields stay null for those rows.", + "example": "NC", "type": "string" }, - "source_url": { - "example": "https://www.gosugamers.net/valorant/matches", + "q1": { + "description": "Q1, Q2 and Q3 are the qualifying segment times; a driver who did not\nset a segment time keeps an empty string.", + "example": "1:30.939", "type": "string" }, - "state": { - "enum": [ - "all", - "ongoing", - "upcoming", - "past" - ], - "example": "all", + "q2": { + "example": "1:29.207", "type": "string" }, - "total_pages": { - "example": 152, - "type": "integer" + "q3": { + "example": "1:27.470", + "type": "string" }, - "total_rows": { - "example": 1511, + "stop_time": { + "description": "StopTime is a pit stop's own duration.", + "example": "24.394", + "type": "string" + }, + "stops": { + "description": "Stops is the pit-stop sequence number on the pit-stop summary.", + "example": 1, "type": "integer" }, - "tournaments": { - "items": { - "$ref": "#/definitions/gosugamers.TournamentRow" - }, - "type": "array" + "team": { + "description": "Team is the constructor the row shows.", + "example": "McLaren", + "type": "string" + }, + "time": { + "description": "Time is the classified time, retired text, practice time or grid time.", + "example": "1:35:23.504", + "type": "string" + }, + "time_of_day": { + "description": "TimeOfDay is the clock time of a pit stop or fastest lap.", + "example": "15:17:01", + "type": "string" + }, + "total_time": { + "description": "TotalTime is a pit stop's cumulative time.", + "example": "24.394", + "type": "string" } }, "type": "object" }, - "gq.AuthorArticle": { + "formula1.SessionResultsResponse": { "properties": { - "image_url": { + "circuit": { + "description": "Circuit is the circuit and city line the page renders.", + "example": "Autódromo José Carlos Pace, São Paulo", "type": "string" }, - "published_at": { - "type": "string" + "count": { + "description": "Count is the number of rows in this response.", + "example": 23, + "type": "integer" }, - "summary": { + "date_text": { + "description": "DateText is the raw weekend date text the page renders.", + "example": "06 - 08 Nov 2026", "type": "string" }, - "title": { + "fetched_at": { + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "url": { + "grand_prix": { + "description": "GrandPrix is the official Grand Prix name from the page heading.", + "example": "FORMULA 1 MSC CRUISES GRANDE PRÊMIO DE SÃO PAULO 2026", "type": "string" - } - }, - "type": "object" - }, - "gq.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/gq.AuthorArticle" - }, - "type": "array" }, - "biography": { + "meeting_id": { + "description": "MeetingID is the numeric meeting key.", + "example": 1299, + "type": "integer" + }, + "results": { + "description": "Results is the classified row list; a session the site has no data\nfor is a valid empty list.", "items": { - "type": "string" + "$ref": "#/definitions/formula1.SessionResult" }, "type": "array" }, - "has_next_page": { - "type": "boolean" + "season": { + "description": "Season is the season the meeting belongs to.", + "example": 2026, + "type": "integer" }, - "image_url": { + "session": { + "description": "Session is the requested canonical session value.", + "example": "race-result", "type": "string" }, - "job_title": { + "session_label": { + "description": "SessionLabel is the page's own session label, such as RACE RESULT.", + "example": "RACE RESULT", "type": "string" }, + "source_url": { + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", + "type": "string" + } + }, + "type": "object" + }, + "formula1.Stat": { + "properties": { "name": { + "description": "Name is the profile's own label, such as Season Points.", + "example": "Season Points", "type": "string" }, - "page": { + "value": { + "description": "Value is the rendered value, kept as text so ratios and suffixed\nvalues such as 1 (x9) survive unchanged.", + "example": "390", + "type": "string" + } + }, + "type": "object" + }, + "formula1.TeamGridResponse": { + "properties": { + "count": { + "description": "Count is the number of rows in this response.", + "example": 23, "type": "integer" }, - "slug": { + "fetched_at": { + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "social_links": { + "season": { + "description": "Season is the season the site's team grid page currently displays.", + "example": 2026, + "type": "integer" + }, + "source_url": { + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", + "type": "string" + }, + "teams": { + "description": "Teams is the current team grid.", "items": { - "type": "string" + "$ref": "#/definitions/formula1.GridTeam" }, "type": "array" - }, - "url": { - "type": "string" } }, "type": "object" }, - "grailed.CategoriesResponse": { + "formula1.TeamInfo": { "properties": { - "categories": { + "career_stats": { + "description": "CareerStats are the career statistics.", "items": { - "$ref": "#/definitions/grailed.FacetCount" + "$ref": "#/definitions/formula1.Stat" }, "type": "array" }, - "category_paths": { + "drivers": { + "description": "Drivers are the current drivers the profile lists.", "items": { - "$ref": "#/definitions/grailed.FacetCount" + "$ref": "#/definitions/formula1.DriverLink" }, "type": "array" }, - "colors": { - "items": { - "$ref": "#/definitions/grailed.FacetCount" - }, - "type": "array" + "name": { + "description": "Name is the team name from the page title.", + "example": "Mercedes", + "type": "string" }, - "conditions": { - "items": { - "$ref": "#/definitions/grailed.FacetCount" - }, - "type": "array" + "season": { + "description": "Season is the season the season statistics describe.", + "example": 2026, + "type": "integer" }, - "departments": { + "season_stats": { + "description": "SeasonStats are the current-season statistics.", "items": { - "$ref": "#/definitions/grailed.FacetCount" + "$ref": "#/definitions/formula1.Stat" }, "type": "array" }, - "fetched_at": { + "slug": { + "description": "Slug is the requested profile slug.", + "example": "mercedes", "type": "string" }, - "sizes": { + "team_stats": { + "description": "TeamStats are the profile facts such as base and team chief.", "items": { - "$ref": "#/definitions/grailed.FacetCount" + "$ref": "#/definitions/formula1.Stat" }, "type": "array" } }, "type": "object" }, - "grailed.CollectionListing": { + "formula1.TeamResponse": { "properties": { - "buy_now": { - "type": "boolean" - }, - "category_path": { - "type": "string" + "count": { + "description": "Count is the number of rows in this response.", + "example": 23, + "type": "integer" }, - "condition": { + "fetched_at": { + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "cover_photo_url": { + "source_url": { + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", "type": "string" }, - "currency": { - "type": "string" + "team": { + "allOf": [ + { + "$ref": "#/definitions/formula1.TeamInfo" + } + ], + "description": "Team is the parsed profile." + } + }, + "type": "object" + }, + "formula1.TeamSeasonResultsResponse": { + "properties": { + "count": { + "description": "Count is the number of rows in this response.", + "example": 23, + "type": "integer" }, - "department": { + "fetched_at": { + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, - "designers": { + "rounds": { + "description": "Rounds is the round-ordered points list.", "items": { - "type": "string" + "$ref": "#/definitions/formula1.TeamSeasonRound" }, "type": "array" }, - "follower_count": { - "type": "integer" - }, - "id": { - "type": "integer" - }, - "make_offer": { - "type": "boolean" - }, - "price": { - "type": "number" - }, - "seller_id": { + "season": { + "description": "Season is the season the rows belong to.", + "example": 2026, "type": "integer" }, - "seller_rating": { - "type": "number" - }, - "size": { + "source_url": { + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", "type": "string" }, - "sold": { - "type": "boolean" - }, - "sold_price": { - "type": "number" - }, - "title": { + "team": { + "description": "Team is the display name from the page title.", + "example": "MERCEDES", "type": "string" }, - "url": { + "team_slug": { + "description": "TeamSlug is the team value from the request; the upstream page treats\nit case-insensitively.", + "example": "mercedes", "type": "string" } }, "type": "object" }, - "grailed.CollectionResponse": { + "formula1.TeamSeasonRound": { "properties": { - "count": { - "type": "integer" - }, - "external_id": { - "type": "string" - }, - "fetched_at": { + "date": { + "description": "Date is the raw weekend date text the page renders.", + "example": "08 Mar", "type": "string" }, - "id": { - "type": "integer" - }, - "last_refreshed_at": { + "grand_prix": { + "description": "GrandPrix is the short Grand Prix name.", + "example": "Australia", "type": "string" }, - "listings": { - "items": { - "$ref": "#/definitions/grailed.CollectionListing" - }, - "type": "array" - }, - "source_url": { - "type": "string" + "points": { + "description": "Points is the points the team scored in that round.", + "example": 43, + "type": "number" }, - "title": { - "type": "string" + "round": { + "description": "Round is the 1-based championship round.", + "example": 1, + "type": "integer" } }, "type": "object" }, - "grailed.CollectionSummary": { + "formula1.TeamStanding": { "properties": { - "external_id": { - "type": "string" + "points": { + "description": "Points is the season points total.", + "example": 652, + "type": "number" }, - "id": { + "position": { + "description": "Position is the championship position.", + "example": 1, "type": "integer" }, - "last_refreshed_at": { + "team": { + "description": "Team is the constructor name.", + "example": "Mercedes", "type": "string" }, - "preview_photos": { - "items": { - "type": "string" - }, - "type": "array" - }, - "title": { + "team_slug": { + "description": "TeamSlug is the team identifier from the standings link.", + "example": "mercedes", "type": "string" }, - "top_designers": { - "items": { - "type": "string" - }, - "type": "array" + "team_url": { + "description": "TeamURL is the constructor's season standings page.", + "type": "string" } }, "type": "object" }, - "grailed.CollectionsResponse": { + "formula1.TeamStandingsResponse": { "properties": { - "collections": { - "items": { - "$ref": "#/definitions/grailed.CollectionSummary" - }, - "type": "array" + "available": { + "description": "Available reports whether the site publishes a constructors' table\nfor the season. The constructors' championship started in 1958, so a\npre-1958 season is a valid response with no standings and\navailable=false; the page carries no explicit empty marker there.", + "example": true, + "type": "boolean" }, "count": { + "description": "Count is the number of rows in this response.", + "example": 23, "type": "integer" }, "fetched_at": { + "description": "FetchedAt is the UTC fetch timestamp in RFC3339.", + "example": "2026-11-09T10:30:00Z", "type": "string" }, + "season": { + "description": "Season is the season the standings belong to.", + "example": 2026, + "type": "integer" + }, "source_url": { + "description": "SourceURL is the upstream page that produced the response.", + "example": "https://www.formula1.com/en/results/2026/races", "type": "string" + }, + "standings": { + "description": "Standings is the position-ordered table.", + "items": { + "$ref": "#/definitions/formula1.TeamStanding" + }, + "type": "array" } }, "type": "object" }, - "grailed.Designer": { + "fortune.AuthorArticle": { "properties": { - "departments": { + "authors": { "items": { "type": "string" }, "type": "array" }, - "id": { - "type": "integer" + "published_at": { + "type": "string" }, - "listings_count": { - "type": "integer" + "section": { + "type": "string" }, - "logo_url": { + "section_url": { "type": "string" }, - "name": { + "title": { "type": "string" }, - "slug": { + "url": { "type": "string" } }, "type": "object" }, - "grailed.DesignersResponse": { + "fortune.AuthorResponse": { "properties": { - "count": { - "type": "integer" - }, - "designers": { + "articles": { "items": { - "$ref": "#/definitions/grailed.Designer" + "$ref": "#/definitions/fortune.AuthorArticle" }, "type": "array" }, - "fetched_at": { + "bio": { "type": "string" }, - "limit": { - "type": "integer" + "email": { + "type": "string" + }, + "name": { + "type": "string" }, "page": { "type": "integer" }, - "query": { + "slug": { "type": "string" }, - "source_url": { - "type": "string" + "social_accounts": { + "items": { + "$ref": "#/definitions/fortune.AuthorSocialAccount" + }, + "type": "array" }, "total_pages": { "type": "integer" }, - "total_results": { - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "grailed.FacetCount": { + "fortune.AuthorSocialAccount": { "properties": { - "count": { - "type": "integer" + "platform": { + "type": "string" }, - "value": { + "url": { "type": "string" } }, "type": "object" }, - "grailed.Listing": { + "fortune.CompaniesResponse": { "properties": { - "bumped_at": { + "country": { "type": "string" }, - "buy_now": { + "has_more": { "type": "boolean" }, - "category": { + "industry": { "type": "string" }, - "category_path": { + "items": { + "items": { + "$ref": "#/definitions/fortune.CompanyListItem" + }, + "type": "array" + }, + "page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "ranking": { "type": "string" }, - "color": { + "search": { "type": "string" }, - "condition": { + "total": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + } + }, + "type": "object" + }, + "fortune.CompanyBreadcrumb": { + "properties": { + "label": { "type": "string" }, - "cover_photo_url": { + "link": { + "type": "string" + } + }, + "type": "object" + }, + "fortune.CompanyDataTable": { + "properties": { + "change_header": { "type": "string" }, - "created_at": { + "footnote": { "type": "string" }, - "currency": { + "title": { "type": "string" }, - "department": { + "value_header": { "type": "string" }, - "designers": { + "values": { "items": { - "type": "string" + "$ref": "#/definitions/fortune.CompanyDataTableRow" }, "type": "array" - }, - "follower_count": { - "type": "integer" - }, - "id": { - "type": "integer" - }, - "location": { + } + }, + "type": "object" + }, + "fortune.CompanyDataTableRow": { + "properties": { + "change": { "type": "string" }, - "make_offer": { - "type": "boolean" - }, - "photo_count": { - "type": "integer" - }, - "price": { - "type": "number" - }, - "seller": { - "$ref": "#/definitions/grailed.ListingSeller" - }, - "size": { + "title": { "type": "string" }, - "sold": { - "type": "boolean" - }, - "sold_at": { + "value": { + "type": "string" + } + }, + "type": "object" + }, + "fortune.CompanyEarningReport": { + "properties": { + "slug": { "type": "string" - }, - "sold_price": { - "type": "number" }, "title": { "type": "string" @@ -101399,583 +107160,782 @@ }, "type": "object" }, - "grailed.ListingDesigner": { + "fortune.CompanyFilterOption": { "properties": { - "departments": { - "items": { - "type": "string" - }, - "type": "array" + "slug": { + "type": "string" }, - "id": { + "title": { + "type": "string" + } + }, + "type": "object" + }, + "fortune.CompanyFilterRange": { + "properties": { + "max": { "type": "integer" }, - "logo_url": { + "min": { + "type": "integer" + } + }, + "type": "object" + }, + "fortune.CompanyFilterRanking": { + "properties": { + "slug": { "type": "string" }, - "name": { + "title": { "type": "string" }, - "slug": { - "type": "string" + "years": { + "items": { + "type": "integer" + }, + "type": "array" } }, "type": "object" }, - "grailed.ListingResponse": { + "fortune.CompanyFiltersResponse": { "properties": { - "buy_now": { - "type": "boolean" + "countries": { + "items": { + "$ref": "#/definitions/fortune.CompanyFilterOption" + }, + "type": "array" }, - "category": { - "type": "string" + "employee_range": { + "$ref": "#/definitions/fortune.CompanyFilterRange" }, - "category_path": { - "type": "string" + "industries": { + "items": { + "$ref": "#/definitions/fortune.CompanyFilterOption" + }, + "type": "array" }, - "collaboration": { - "type": "string" + "rankings": { + "items": { + "$ref": "#/definitions/fortune.CompanyFilterRanking" + }, + "type": "array" }, - "condition": { + "revenue_range": { + "$ref": "#/definitions/fortune.CompanyFilterRange" + } + }, + "type": "object" + }, + "fortune.CompanyInfo": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "fortune.CompanyListItem": { + "properties": { + "country": { "type": "string" }, - "created_at": { + "description": { "type": "string" }, - "currency": { + "name": { "type": "string" }, - "deleted": { - "type": "boolean" + "revenues": { + "type": "string" }, - "department": { + "slug": { "type": "string" }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "fortune.CompanyRankingEntry": { + "properties": { "description": { "type": "string" }, - "designers": { - "items": { - "$ref": "#/definitions/grailed.ListingDesigner" - }, - "type": "array" - }, - "dropped": { - "type": "boolean" + "rank": { + "type": "integer" }, - "exact_size": { + "slug": { "type": "string" }, - "expired": { - "type": "boolean" - }, - "fetched_at": { + "title": { "type": "string" }, - "follower_count": { - "type": "integer" + "url": { + "type": "string" }, - "id": { + "year": { "type": "integer" - }, - "make_offer": { - "type": "boolean" - }, - "measurements": { + } + }, + "type": "object" + }, + "fortune.CompanyResponse": { + "properties": { + "accolades": {}, + "breadcrumbs": { "items": { - "$ref": "#/definitions/grailed.Measurement" + "$ref": "#/definitions/fortune.CompanyBreadcrumb" }, "type": "array" }, - "photos": { + "data_tables": { "items": { - "type": "string" + "$ref": "#/definitions/fortune.CompanyDataTable" }, "type": "array" }, - "pretty_size": { + "description": { "type": "string" }, - "price": { - "type": "number" - }, - "price_updated_at": { - "type": "string" + "earning_reports": { + "items": { + "$ref": "#/definitions/fortune.CompanyEarningReport" + }, + "type": "array" }, - "published": { - "type": "boolean" + "executive_profiles": {}, + "info": { + "$ref": "#/definitions/fortune.CompanyInfo" }, - "seller": { - "$ref": "#/definitions/grailed.SellerProfile" + "rankings": { + "items": { + "$ref": "#/definitions/fortune.CompanyRankingEntry" + }, + "type": "array" }, - "size": { + "slug": { "type": "string" }, - "sold": { - "type": "boolean" + "social_accounts": { + "items": { + "$ref": "#/definitions/fortune.CompanySocialAccount" + }, + "type": "array" }, - "sold_at": { + "title": { "type": "string" }, - "sold_price": { - "type": "number" - }, - "sold_shipping_price": { - "type": "number" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "fortune.CompanySocialAccount": { + "properties": { + "account": { + "type": "string" }, - "source_url": { + "platform": { + "type": "string" + } + }, + "type": "object" + }, + "fortune.RankingFiltersResponse": { + "properties": { + "list": { "type": "string" }, - "styles": { + "search_fields": { "items": { - "type": "string" + "$ref": "#/definitions/fortune.RankingSearchField" }, "type": "array" }, - "subcategory": { - "type": "string" + "sortable_fields": { + "items": { + "$ref": "#/definitions/fortune.RankingSortableField" + }, + "type": "array" }, - "title": { + "year": { "type": "string" }, - "traits": { - "additionalProperties": { + "years": { + "items": { "type": "string" }, - "type": "object" - }, - "url": { - "type": "string" + "type": "array" } }, "type": "object" }, - "grailed.ListingSeller": { + "fortune.RankingItem": { "properties": { - "avatar_url": { - "type": "string" - }, - "id": { - "type": "integer" + "data": { + "additionalProperties": { + "type": "string" + }, + "type": "object" }, - "rating_average": { - "type": "number" + "name": { + "type": "string" }, - "rating_count": { + "order": { "type": "integer" }, - "total_bought_and_sold": { + "rank": { "type": "integer" }, - "trusted_seller": { - "type": "boolean" + "slug": { + "type": "string" }, - "username": { + "url": { "type": "string" } }, "type": "object" }, - "grailed.Measurement": { + "fortune.RankingList": { "properties": { - "department_mapping_id": { - "type": "integer" + "region": { + "type": "string" }, - "inches": { - "type": "number" + "slug": { + "type": "string" }, - "measurement_type_id": { - "type": "integer" + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "grailed.SearchResponse": { + "fortune.RankingListsResponse": { "properties": { - "category": { - "type": "string" + "lists": { + "items": { + "$ref": "#/definitions/fortune.RankingList" + }, + "type": "array" + } + }, + "type": "object" + }, + "fortune.RankingResponse": { + "properties": { + "filters": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "object" }, - "color": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/fortune.RankingItem" + }, + "type": "array" }, - "condition": { + "limit": { + "type": "integer" + }, + "list": { "type": "string" }, - "count": { + "offset": { "type": "integer" }, - "department": { + "search": { "type": "string" }, - "designer": { - "type": "string" + "search_fields": { + "items": { + "$ref": "#/definitions/fortune.RankingSearchField" + }, + "type": "array" }, - "fetched_at": { + "sort_by": { "type": "string" }, - "limit": { - "type": "integer" + "sort_order": { + "type": "string" }, - "listings": { + "sortable_fields": { "items": { - "$ref": "#/definitions/grailed.Listing" + "$ref": "#/definitions/fortune.RankingSortableField" }, "type": "array" }, - "max_price": { - "type": "number" - }, - "min_price": { - "type": "number" - }, - "page": { + "total": { "type": "integer" }, - "query": { + "year": { "type": "string" - }, - "size": { + } + }, + "type": "object" + }, + "fortune.RankingSearchField": { + "properties": { + "field_name": { "type": "string" }, - "sort": { - "type": "string" + "options": { + "items": { + "type": "string" + }, + "type": "array" }, - "source_url": { + "title": { "type": "string" }, - "total_pages": { - "type": "integer" - }, - "total_results": { - "type": "integer" + "type": { + "type": "string" } }, "type": "object" }, - "grailed.SellerProfile": { + "fortune.RankingSortableField": { "properties": { - "avatar_url": { + "title": { "type": "string" }, - "banned": { - "type": "boolean" - }, - "confirmed": { - "type": "boolean" - }, - "created_at": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "fortune.RankingYearsResponse": { + "properties": { + "current_year": { "type": "string" }, - "follower_count": { - "type": "integer" + "list": { + "type": "string" }, - "following_count": { - "type": "integer" + "years": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "fotmob.fifaRankingPeriodData": { + "properties": { + "data": { + "items": { + "$ref": "#/definitions/fotmob.fifaRankingPeriodItemDoc" + }, + "type": "array" }, - "id": { - "type": "integer" + "source_url": { + "example": "https://www.fotmob.com/api/data/fifarankings/period?gender=men", + "type": "string" + } + }, + "type": "object" + }, + "fotmob.fifaRankingPeriodItemDoc": { + "properties": { + "periodId": { + "example": "20260720", + "type": "string" }, - "listings_for_sale_count": { + "periodName": { + "example": "20.07.2026", + "type": "string" + } + }, + "type": "object" + }, + "fotmob.fifaRankingPeriodsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "location": { + "data": { + "$ref": "#/definitions/fotmob.fifaRankingPeriodData" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "fotmob.fifaRankingRowDoc": { + "properties": { + "gainedRank": { + "example": true, + "type": "boolean" }, - "quick_responder": { + "id": { + "example": 6720, + "type": "integer" + }, + "lostRank": { + "example": false, "type": "boolean" }, - "rating_average": { - "type": "number" + "name": { + "example": "Spain", + "type": "string" }, - "rating_count": { + "pointsDiff": { + "example": 121, "type": "integer" }, - "sold_count": { + "previousPoints": { + "example": 1875, "type": "integer" }, - "speedy_shipper": { - "type": "boolean" + "rank": { + "example": 1, + "type": "integer" }, - "tag_list": { + "totalPoints": { + "example": 1996, + "type": "integer" + } + }, + "type": "object" + }, + "fotmob.fifaRankingRowsDataDoc": { + "properties": { + "data": { "items": { - "type": "string" + "$ref": "#/definitions/fotmob.fifaRankingRowDoc" }, "type": "array" }, - "total_bought_and_sold": { + "source_url": { + "example": "https://www.fotmob.com/api/data/fifarankings/ranking?gender=men&periodId=20260720", + "type": "string" + } + }, + "type": "object" + }, + "fotmob.fifaRankingsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "trusted_seller": { - "type": "boolean" + "data": { + "$ref": "#/definitions/fotmob.fifaRankingRowsDataDoc" }, - "username": { + "msg": { + "example": "OK", "type": "string" - }, - "verified": { - "type": "boolean" } }, "type": "object" }, - "grailed.SellerResponse": { + "fotmob.newsItemDoc": { "properties": { - "active_listings_count": { - "type": "integer" + "gmtTime": { + "example": "2026-09-26T15:24:07.000Z", + "type": "string" }, - "count": { - "type": "integer" + "id": { + "example": "evfncmhqwgeg1xgdmv21cayfj", + "type": "string" }, - "fetched_at": { + "imageUrl": { + "example": "https://images.example/story.jpg", "type": "string" }, - "limit": { - "type": "integer" + "language": { + "example": "en", + "type": "string" }, - "listings": { - "items": { - "$ref": "#/definitions/grailed.Listing" - }, - "type": "array" + "lead": { + "example": "Article preview text.", + "type": "string" }, "page": { - "type": "integer" - }, - "profile": { - "$ref": "#/definitions/grailed.SellerProfile" + "$ref": "#/definitions/fotmob.newsItemPageDoc" }, - "source_url": { + "sourceIconUrl": { + "example": "https://images.fotmob.com/image_resources/news/fotmob.png", "type": "string" }, - "total_pages": { - "type": "integer" + "sourceStr": { + "example": "FotMob", + "type": "string" }, - "username": { + "title": { + "example": "Latest football headline", "type": "string" } }, "type": "object" }, - "grailed.SellerReview": { + "fotmob.newsItemPageDoc": { "properties": { - "created_at": { + "url": { + "example": "/news/evfncmhqwgeg1xgdmv21cayfj-latest-football-headline", "type": "string" - }, - "id": { + } + }, + "type": "object" + }, + "fotmob.newsListResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "listing": { - "$ref": "#/definitions/grailed.SellerReviewListing" + "data": { + "$ref": "#/definitions/fotmob.sourceNewsListDoc" }, - "note": { + "msg": { + "example": "OK", "type": "string" - }, - "rating": { - "type": "number" - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" } }, "type": "object" }, - "grailed.SellerReviewListing": { + "fotmob.responseDoc": { "properties": { - "id": { + "code": { + "example": 200, "type": "integer" }, - "price": { - "type": "number" - }, - "sold": { - "type": "boolean" - }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/fotmob.sourceDataDoc" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "grailed.SellerReviewsResponse": { + "fotmob.sourceDataDoc": { "properties": { - "count": { - "type": "integer" + "data": { + "additionalProperties": true, + "type": "object" }, - "fetched_at": { + "source_url": { + "example": "https://www.fotmob.com/api/data/matches?date=20260925&timezone=UTC", "type": "string" - }, - "has_more": { - "type": "boolean" - }, - "page": { - "type": "integer" - }, - "reviews": { + } + }, + "type": "object" + }, + "fotmob.sourceNewsListDoc": { + "properties": { + "data": { "items": { - "$ref": "#/definitions/grailed.SellerReview" + "$ref": "#/definitions/fotmob.newsItemDoc" }, "type": "array" }, "source_url": { - "type": "string" - }, - "user_id": { - "type": "integer" - }, - "username": { + "example": "https://www.fotmob.com/api/news/latestNews?lang=en&page=1&startIndex=0", "type": "string" } }, "type": "object" }, - "grailed.SimilarListingsResponse": { + "foxnews.ArticleResponse": { "properties": { - "count": { - "type": "integer" + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "fetched_at": { + "description": { "type": "string" }, - "id": { - "type": "integer" - }, - "limit": { - "type": "integer" + "image_url": { + "type": "string" }, - "listings": { + "paragraphs": { "items": { - "$ref": "#/definitions/grailed.Listing" + "type": "string" }, "type": "array" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "grailed.SoldListingsResponse": { - "properties": { - "category": { + "published_at": { "type": "string" }, - "color": { + "section": { "type": "string" }, - "condition": { + "title": { "type": "string" }, - "count": { - "type": "integer" - }, - "department": { + "updated_at": { "type": "string" }, - "designer": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "foxnews.AuthorArticle": { + "properties": { + "published_at": { "type": "string" }, - "fetched_at": { + "summary": { "type": "string" }, - "limit": { - "type": "integer" + "title": { + "type": "string" }, - "listings": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "foxnews.AuthorResponse": { + "properties": { + "articles": { "items": { - "$ref": "#/definitions/grailed.Listing" + "$ref": "#/definitions/foxnews.AuthorArticle" }, "type": "array" }, - "max_price": { - "type": "number" + "bio": { + "type": "string" }, - "min_price": { - "type": "number" + "name": { + "type": "string" }, - "page": { - "type": "integer" + "slug": { + "type": "string" }, - "query": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "foxnews.HeadlineItem": { + "properties": { + "author": { "type": "string" }, - "size": { + "image_url": { "type": "string" }, - "sort": { + "published_at": { "type": "string" }, - "source_url": { + "summary": { "type": "string" }, - "total_pages": { - "type": "integer" + "title": { + "type": "string" }, - "total_results": { - "type": "integer" + "type": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "grailed.SuggestResponse": { + "foxnews.HeadlinesResponse": { "properties": { - "fetched_at": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/foxnews.HeadlineItem" + }, + "type": "array" }, - "query": { + "section": { "type": "string" - }, - "suggestions": { + } + }, + "type": "object" + }, + "foxnews.NewsResponse": { + "properties": { + "items": { "items": { - "$ref": "#/definitions/grailed.Suggestion" + "$ref": "#/definitions/foxnews.HeadlineItem" }, "type": "array" } }, "type": "object" }, - "grailed.Suggestion": { + "foxnews.SearchResponse": { "properties": { - "popularity": { - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/foxnews.HeadlineItem" + }, + "type": "array" }, "query": { "type": "string" }, - "total_results": { + "start": { "type": "integer" + }, + "total": { + "type": "integer" + }, + "type": { + "type": "string" } }, "type": "object" }, - "grailed.categoriesResponseDoc": { + "foxnews.Section": { "properties": { - "code": { - "example": 200, - "type": "integer" + "name": { + "type": "string" }, - "data": { - "$ref": "#/definitions/grailed.CategoriesResponse" + "slug": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "grailed.collectionResponseDoc": { + "foxnews.SectionsResponse": { + "properties": { + "sections": { + "items": { + "$ref": "#/definitions/foxnews.Section" + }, + "type": "array" + } + }, + "type": "object" + }, + "foxnews.articleResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/grailed.CollectionResponse" + "$ref": "#/definitions/foxnews.ArticleResponse" }, "msg": { "example": "OK", @@ -101984,14 +107944,14 @@ }, "type": "object" }, - "grailed.collectionsResponseDoc": { + "foxnews.authorResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/grailed.CollectionsResponse" + "$ref": "#/definitions/foxnews.AuthorResponse" }, "msg": { "example": "OK", @@ -102000,14 +107960,14 @@ }, "type": "object" }, - "grailed.designersResponseDoc": { + "foxnews.headlinesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/grailed.DesignersResponse" + "$ref": "#/definitions/foxnews.HeadlinesResponse" }, "msg": { "example": "OK", @@ -102016,14 +107976,14 @@ }, "type": "object" }, - "grailed.listingResponseDoc": { + "foxnews.newsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/grailed.ListingResponse" + "$ref": "#/definitions/foxnews.NewsResponse" }, "msg": { "example": "OK", @@ -102032,14 +107992,14 @@ }, "type": "object" }, - "grailed.searchResponseDoc": { + "foxnews.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/grailed.SearchResponse" + "$ref": "#/definitions/foxnews.SearchResponse" }, "msg": { "example": "OK", @@ -102048,14 +108008,14 @@ }, "type": "object" }, - "grailed.sellerResponseDoc": { + "foxnews.sectionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/grailed.SellerResponse" + "$ref": "#/definitions/foxnews.SectionsResponse" }, "msg": { "example": "OK", @@ -102064,46 +108024,91 @@ }, "type": "object" }, - "grailed.sellerReviewsResponseDoc": { + "france24.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/france24.HeadlineItem" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/grailed.SellerReviewsResponse" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "image_url": { + "type": "string" + }, + "job_title": { + "type": "string" + }, + "name": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "grailed.similarListingsResponseDoc": { + "france24.HeadlineItem": { "properties": { - "code": { - "example": 200, - "type": "integer" + "author": { + "type": "string" }, - "data": { - "$ref": "#/definitions/grailed.SimilarListingsResponse" + "image_url": { + "type": "string" }, - "msg": { - "example": "OK", + "published_at": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "grailed.soldListingsResponseDoc": { + "freemalaysiatoday.NewsResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "freemalaysiatoday.SectionsResponse": { + "properties": { + "sections": { + "items": { + "$ref": "#/definitions/newsplatform.Section" + }, + "type": "array" + } + }, + "type": "object" + }, + "freemalaysiatoday.newsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/grailed.SoldListingsResponse" + "$ref": "#/definitions/freemalaysiatoday.NewsResponse" }, "msg": { "example": "OK", @@ -102112,14 +108117,14 @@ }, "type": "object" }, - "grailed.suggestResponseDoc": { + "freemalaysiatoday.sectionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/grailed.SuggestResponse" + "$ref": "#/definitions/freemalaysiatoday.SectionsResponse" }, "msg": { "example": "OK", @@ -102128,753 +108133,935 @@ }, "type": "object" }, - "greystar.Article": { + "fresha.LandingVenue": { "properties": { - "blocks": { + "business_types": { + "description": "The venue's published business types, e.g. HealthAndBeautyBusiness and\nHairSalon. These are the page's own schema.org labels, not Fresha's\nbusiness-type slugs.", "items": { - "$ref": "#/definitions/greystar.ContentBlock" + "type": "string" }, "type": "array" }, - "category": { + "city": { + "description": "City name.", + "example": "New York", "type": "string" }, - "description": { + "country_code": { + "description": "ISO country code.", + "example": "US", "type": "string" }, "image_url": { + "description": "Image URL.", "type": "string" }, - "published_at": { + "latitude": { + "description": "Latitude.", + "example": 40.7545329, + "type": "number" + }, + "longitude": { + "description": "Longitude.", + "example": -73.9758854, + "type": "number" + }, + "name": { + "description": "Venue name as the page prints it.", + "example": "Grand Central", "type": "string" }, - "published_date": { + "postal_code": { + "description": "Postal code.", + "example": "10169", "type": "string" }, - "section": { + "price_range": { + "description": "The venue's own coarse price band as the page publishes it, e.g.\n\"From $7\". It is a provider-declared string, not a service price and not\nthis API's price surface: the venue's own service menu is.", + "example": "From $7", "type": "string" }, - "slug": { + "rating": { + "description": "Average rating as the page publishes it.", + "example": 5, + "type": "number" + }, + "region": { + "description": "Region or state.", + "example": "New York", "type": "string" }, - "title": { + "reviews_count": { + "description": "Number of ratings behind Rating.", + "example": 1886, + "type": "integer" + }, + "street": { + "description": "Street address line.", + "example": "230 Park Avenue, Suite ST-1D", "type": "string" }, "url": { + "description": "Canonical public page for this venue.", + "example": "https://www.fresha.com/a/grand-central-new-york-230-park-avenue-wbtw1564", "type": "string" } }, "type": "object" }, - "greystar.CityItem": { + "fresha.LandingVenuesResponse": { "properties": { + "business_type": { + "description": "The business-type facet actually read.", + "example": "hair-salons", + "type": "string" + }, "city": { + "description": "The city landing value actually read.", + "example": "us-new-york", "type": "string" }, "count": { + "description": "Number of venues on the page. This is the page's own pre-rendered list and\nis not a total: the same city's search result count is much larger.", + "example": 130, "type": "integer" }, - "country_code": { + "declared_count": { + "description": "The page's declared item count. It is reported separately from Count\nbecause a page can declare more items than it renders; a mismatch is the\npage's, not this API's, and Count is the number of venues actually\nreturned.", + "example": 130, + "type": "integer" + }, + "treatment_type": { + "description": "The treatment-type facet actually read.", + "example": "hair-colouring", "type": "string" }, - "state": { + "url": { + "description": "The landing page URL actually read.", + "example": "https://www.fresha.com/lp/en/bt/hair-salons/in/us-new-york", "type": "string" + }, + "venues": { + "description": "Venues in the page's own order.", + "items": { + "$ref": "#/definitions/fresha.LandingVenue" + }, + "type": "array" } }, "type": "object" }, - "greystar.ContentBlock": { + "fresha.SearchVenuesResponse": { "properties": { - "text": { + "after": { + "description": "The cursor actually sent, empty on the first page.", "type": "string" }, - "type": { - "description": "heading, subheading, paragraph, list_item", - "type": "string" - } - }, - "type": "object" - }, - "greystar.ContentEntry": { - "properties": { - "last_modified": { + "awards": { + "description": "The award filter actually sent.", + "example": "BEST_IN_CLASS", "type": "string" }, - "section": { + "count": { + "description": "The gateway's own match count for this filter set. It counts venues, not\npages, and it is stable across pages of one walk.", + "example": 480, + "type": "integer" + }, + "currency": { + "description": "Currency the market's prices are quoted in, as the gateway reports it. It\nis a market attribute, not a price: this endpoint returns no price at all.", + "example": "USD", "type": "string" }, - "slug": { + "first": { + "description": "Venues per page actually sent.", + "example": 20, + "type": "integer" + }, + "has_next_page": { + "description": "True when the gateway reports a further page.", + "example": true, + "type": "boolean" + }, + "latitude": { + "description": "The geocode actually sent. Zero for both when the caller sent none, in\nwhich case the gateway used its own default centre.", + "example": 40.7128, + "type": "number" + }, + "longitude": { + "example": -74.006, + "type": "number" + }, + "min_price": { + "description": "The price floor actually sent, in Currency.", + "example": 100, + "type": "number" + }, + "next_cursor": { + "description": "Cursor for the next page; empty when there is none. Pass it back as after.", + "example": "WzEuMCwxLjEyOTY0NTMxMjM1ODQzNDIsMjgzMjcxXQ==", "type": "string" }, - "url": { + "query": { + "description": "The query actually sent.", + "example": "haircut", "type": "string" - } - }, - "type": "object" - }, - "greystar.ContentList": { - "properties": { - "entries": { - "items": { - "$ref": "#/definitions/greystar.ContentEntry" - }, - "type": "array" }, - "page": { - "type": "integer" + "service_gender": { + "description": "The gender filter actually sent.", + "example": "FEMALE", + "type": "string" }, - "per_page": { - "type": "integer" + "sort": { + "description": "The ordering actually sent.", + "example": "RATING", + "type": "string" }, - "total_count": { - "type": "integer" + "treatment_category_id": { + "description": "The taxonomy filters actually sent.", + "example": "category:nails", + "type": "string" }, - "total_pages": { - "type": "integer" - } - }, - "type": "object" - }, - "greystar.CountryItem": { - "properties": { - "count": { - "type": "integer" + "treatment_tag_id": { + "example": "tag:haircut", + "type": "string" }, - "country_code": { + "treatment_type_id": { + "example": "treatment:nails/wedding-nails", "type": "string" + }, + "venues": { + "description": "Venues on this page, in the gateway's own order. Empty is an honest result\nfor a valid filter set.", + "items": { + "$ref": "#/definitions/fresha.Venue" + }, + "type": "array" } }, "type": "object" }, - "greystar.FAQ": { + "fresha.ServiceGroup": { "properties": { - "answer": { + "id": { + "description": "Group id, e.g. \"recommended\" for the venue's featured group.", + "example": "recommended", "type": "string" }, - "question": { + "name": { + "description": "Group name as the venue prints it, e.g. \"Featured\".", + "example": "Featured", "type": "string" + }, + "services": { + "description": "Services in this group, in the venue's own order.", + "items": { + "$ref": "#/definitions/fresha.VenueService" + }, + "type": "array" } }, "type": "object" }, - "greystar.FacetCount": { + "fresha.ServicePrice": { "properties": { - "count": { - "type": "integer" + "currency": { + "description": "ISO currency code, which is the venue's currency.", + "example": "USD", + "type": "string" }, "value": { - "type": "string" + "description": "Amount in that currency. Published as the venue lists it and volatile:\nit is the provider's own menu price, never a quote, a booking price or a\nfinal price.", + "example": 75, + "type": "number" } }, "type": "object" }, - "greystar.Fee": { + "fresha.TaxonomyNode": { "properties": { - "amount": { - "type": "number" - }, - "category": { - "type": "string" - }, - "disclaimer": { + "icon_url": { + "description": "Icon URL, present on categories only.", "type": "string" }, - "due_at": { + "id": { + "description": "The id to pass to fresha-search-venues as treatment_category_id,\ntreatment_tag_id or treatment_type_id. The prefix states which one.", + "example": "category:nails", "type": "string" }, - "frequency": { + "kind": { + "description": "Node kind, one of: TreatmentCategory, TreatmentTag, TreatmentType.", + "enum": [ + "TreatmentCategory", + "TreatmentTag", + "TreatmentType" + ], + "example": "TreatmentCategory", "type": "string" }, - "group": { + "name": { + "description": "Display label as Fresha prints it.", + "example": "Nails", "type": "string" + } + }, + "type": "object" + }, + "fresha.TaxonomyResponse": { + "properties": { + "categories": { + "description": "Category values on this page.", + "items": { + "$ref": "#/definitions/fresha.TaxonomyNode" + }, + "type": "array" }, - "is_included": { - "type": "boolean" - }, - "is_per_applicant": { - "type": "boolean" + "count": { + "description": "The gateway's own match count for this query. It counts every taxonomy\nnode it matched, not just the ones on this page.", + "example": 137, + "type": "integer" }, - "is_refundable": { - "type": "boolean" + "first": { + "description": "Nodes per page actually sent.", + "example": 200, + "type": "integer" }, - "is_required": { + "has_next_page": { + "description": "True when the gateway reports more nodes beyond this page.", + "example": false, "type": "boolean" }, - "is_taxable": { - "type": "boolean" + "next_start": { + "description": "Offset to pass back as start for the next page; 0 when there is none.", + "example": 200, + "type": "integer" }, - "label": { + "query": { + "description": "The query actually sent.", + "example": "nail", "type": "string" }, - "max_amount": { - "type": "number" - }, - "min_amount": { - "type": "number" - }, - "percentage_amount": { - "type": "number" - }, - "text_amount": { - "type": "string" + "start": { + "description": "Offset actually sent.", + "example": 0, + "type": "integer" }, - "type": { - "type": "string" + "tags": { + "description": "Tag values on this page.", + "items": { + "$ref": "#/definitions/fresha.TaxonomyNode" + }, + "type": "array" }, - "value_type": { - "type": "string" + "types": { + "description": "Treatment-type values on this page.", + "items": { + "$ref": "#/definitions/fresha.TaxonomyNode" + }, + "type": "array" } }, "type": "object" }, - "greystar.Floorplan": { + "fresha.Venue": { "properties": { - "bathrooms": { - "type": "integer" - }, - "bedrooms": { - "type": "integer" + "address": { + "allOf": [ + { + "$ref": "#/definitions/fresha.VenueAddress" + } + ], + "description": "Postal address and coordinates." }, - "id": { + "business_type": { + "description": "Fresha's own business-type label, e.g. \"Hair Salon\".", + "example": "Hair Salon", "type": "string" }, - "image_url": { + "distance": { + "description": "Distance from the search centre, as the gateway's own display string.\nEmpty when no geocode was sent.", + "example": "0.5 mi", "type": "string" }, - "label": { - "type": "string" - } - }, - "type": "object" - }, - "greystar.Image": { - "properties": { - "alt": { - "type": "string" + "featured": { + "description": "True when the venue is featured in this result set.", + "example": false, + "type": "boolean" }, - "height": { - "type": "integer" + "has_deals": { + "description": "True when the venue currently advertises deals.", + "example": false, + "type": "boolean" }, - "url": { + "id": { + "description": "Fresha's own venue id.", + "example": "539807", "type": "string" }, - "width": { - "type": "integer" - } - }, - "type": "object" - }, - "greystar.ListedUnit": { - "properties": { - "banner": { + "image_url": { + "description": "Cover image URL.", + "example": "https://images.fresha.com/locations/location-profile-images/504590/2037086/101eaf63-937c-4ac5-9740-087f729afe68.jpg", "type": "string" }, - "bathrooms": { - "type": "number" + "is_fresha_verified": { + "description": "True when Fresha has verified the venue.", + "example": true, + "type": "boolean" }, - "bedrooms": { - "type": "number" + "is_new": { + "description": "True when Fresha marks the venue as new.", + "example": false, + "type": "boolean" }, - "floorplan": { + "name": { + "description": "Venue name as the site prints it.", + "example": "Toto Hair", "type": "string" }, - "max_price": { - "type": "number" - }, - "min_base_rent_lease_term": { - "type": "integer" - }, - "min_price": { + "rating": { + "description": "Average rating as the venue publishes it.", + "example": 4.9, "type": "number" }, - "price": { - "type": "number" + "rating_level": { + "description": "Fresha's rating badge for the venue, one of: DEFAULT, BEST_IN_CLASS,\nHIGHLY_RECOMMENDED.", + "enum": [ + "DEFAULT", + "BEST_IN_CLASS", + "HIGHLY_RECOMMENDED" + ], + "example": "BEST_IN_CLASS", + "type": "string" }, - "required_monthly_fees_max": { - "type": "number" + "rating_title": { + "description": "The badge's display label, e.g. \"Best in Class\".", + "example": "Best in Class", + "type": "string" }, - "required_monthly_fees_min": { - "type": "number" + "reviews_count": { + "description": "Number of ratings behind Rating. Aggregate only: this API never returns a\nreview, a reviewer or a reviewer's name.", + "example": 4838, + "type": "integer" }, - "unit_id": { + "slug": { + "description": "URL slug which fresha-venue accepts.", + "example": "toto-hair-new-york-201-grand-street-oqiknjih", "type": "string" }, - "unit_number": { + "url": { + "description": "Canonical public page for this venue.", + "example": "https://www.fresha.com/a/toto-hair-new-york-201-grand-street-oqiknjih", "type": "string" } }, "type": "object" }, - "greystar.Location": { + "fresha.VenueAddress": { "properties": { - "address": { - "type": "string" - }, "city": { + "description": "City name.", + "example": "New York", "type": "string" }, "country_code": { + "description": "ISO country code.", + "example": "US", + "type": "string" + }, + "district": { + "description": "District or neighbourhood when the venue publishes one.", + "example": "Manhattan", + "type": "string" + }, + "formatted": { + "description": "The venue's own one-line address label, e.g. \"Manhattan, New York\".", + "example": "Manhattan, New York", "type": "string" }, "latitude": { + "description": "Latitude.", + "example": 40.718711853027344, "type": "number" }, "longitude": { + "description": "Longitude.", + "example": -73.99961853027344, "type": "number" }, - "market_area": { - "type": "string" - }, - "neighborhood": { - "type": "string" - }, "postal_code": { + "description": "Postal code.", + "example": "10013", "type": "string" }, - "slug": { - "type": "string" - }, - "state": { + "region": { + "description": "Region or state.", + "example": "New York", "type": "string" }, - "state_name": { + "street": { + "description": "Street address line as the venue prints it.", + "example": "201 Grand Street", "type": "string" } }, "type": "object" }, - "greystar.LocationCommunity": { + "fresha.VenueResponse": { "properties": { "address": { - "type": "string" + "allOf": [ + { + "$ref": "#/definitions/fresha.VenueAddress" + } + ], + "description": "Postal address and coordinates." }, - "id": { + "business_type": { + "description": "Fresha's own business-type label.", + "example": "Hair Salon", "type": "string" }, - "name": { + "country_code": { + "description": "ISO country code of the venue.", + "example": "US", "type": "string" }, - "price_text": { + "currency": { + "description": "The venue's own currency, which every price on this record is quoted in.", + "example": "USD", "type": "string" }, - "slug": { + "description": { + "description": "The venue's own description, as written by the venue.", "type": "string" }, - "url": { + "featured": { + "description": "True when the venue is featured.", + "example": false, + "type": "boolean" + }, + "has_deals": { + "description": "True when the venue currently advertises deals.", + "example": false, + "type": "boolean" + }, + "id": { + "description": "Fresha's own venue id.", + "example": "539807", "type": "string" - } - }, - "type": "object" - }, - "greystar.LocationDetail": { - "properties": { - "blocks": { - "items": { - "$ref": "#/definitions/greystar.ContentBlock" - }, - "type": "array" }, - "city": { + "image_url": { + "description": "Cover image URL.", "type": "string" }, - "communities": { + "images": { + "description": "Gallery image URLs.", "items": { - "$ref": "#/definitions/greystar.LocationCommunity" + "type": "string" }, "type": "array" }, - "description": { - "type": "string" + "is_bookable": { + "description": "True when the venue can currently be booked. This is the venue's own flag,\nnot an availability or inventory claim: this API returns no slots.", + "example": true, + "type": "boolean" }, - "faqs": { - "items": { - "$ref": "#/definitions/greystar.FAQ" - }, - "type": "array" + "is_fresha_verified": { + "description": "True when Fresha has verified the venue.", + "example": true, + "type": "boolean" }, - "level": { + "is_new": { + "description": "True when Fresha marks the venue as new.", + "example": false, + "type": "boolean" + }, + "name": { + "description": "Venue name.", + "example": "Toto Hair", "type": "string" }, - "neighborhood": { + "rating": { + "description": "Average rating as the venue publishes it.", + "example": 4.9, + "type": "number" + }, + "rating_formatted": { + "description": "The venue's own formatted rating, e.g. \"4.9\".", + "example": "4.9", "type": "string" }, - "path": { + "rating_level": { + "description": "Fresha's rating badge, one of: DEFAULT, BEST_IN_CLASS, HIGHLY_RECOMMENDED.", + "enum": [ + "DEFAULT", + "BEST_IN_CLASS", + "HIGHLY_RECOMMENDED" + ], + "example": "BEST_IN_CLASS", "type": "string" }, - "state": { + "rating_title": { + "description": "The badge's display label, e.g. \"Best in Class\".", + "example": "Best in Class", "type": "string" }, - "sub_locations": { + "reviews_count": { + "description": "Number of ratings behind Rating. Aggregate only.", + "example": 4838, + "type": "integer" + }, + "service_count": { + "description": "Number of services the venue publishes.", + "example": 22, + "type": "integer" + }, + "service_groups": { + "description": "The venue's own service menu, grouped as the venue groups it. This is the\nonly surface on which this API publishes a price.", "items": { - "$ref": "#/definitions/greystar.SubLocation" + "$ref": "#/definitions/fresha.ServiceGroup" }, "type": "array" }, - "title": { + "slug": { + "description": "URL slug.", + "example": "toto-hair-new-york-201-grand-street-oqiknjih", "type": "string" }, "url": { + "description": "Canonical public page for this venue.", + "example": "https://www.fresha.com/a/toto-hair-new-york-201-grand-street-oqiknjih", "type": "string" + }, + "working_hours": { + "allOf": [ + { + "$ref": "#/definitions/fresha.WorkingHours" + } + ], + "description": "Published opening hours." } }, "type": "object" }, - "greystar.LocationEntry": { + "fresha.VenueService": { "properties": { - "city": { + "caption": { + "description": "Duration caption as the venue prints it, e.g. \"1 hr, 15 min\".", + "example": "1 hr, 15 min", "type": "string" }, - "last_modified": { + "description": { + "description": "Optional service description.", + "example": "Shampoo / Cut (Master Stylist)", "type": "string" }, - "level": { - "description": "state, city, neighborhood", + "formatted_price": { + "description": "The venue's own formatted price, e.g. \"$75\".", + "example": "$75", "type": "string" }, - "neighborhood": { + "id": { + "description": "Fresha's own service id.", + "example": "s:16128313", "type": "string" }, - "path": { - "type": "string" + "max_seconds": { + "description": "Longest duration in seconds.", + "example": 4500, + "type": "integer" }, - "state": { + "min_seconds": { + "description": "Shortest duration in seconds.", + "example": 4500, + "type": "integer" + }, + "name": { + "description": "Service name as the venue lists it.", + "example": "1.2A Shampoo / Cut (1.5)", "type": "string" }, - "url": { + "price": { + "allOf": [ + { + "$ref": "#/definitions/fresha.ServicePrice" + } + ], + "description": "The service's retail price, in the venue's currency." + }, + "price_type": { + "description": "The venue's own price-type label, e.g. \"FIXED\".", + "example": "FIXED", "type": "string" } }, "type": "object" }, - "greystar.LocationList": { + "fresha.WorkingHours": { "properties": { - "locations": { + "days": { + "description": "One entry per day, in the venue's own order.", "items": { - "$ref": "#/definitions/greystar.LocationEntry" + "$ref": "#/definitions/fresha.WorkingHoursDay" }, "type": "array" }, - "page": { - "type": "integer" - }, - "per_page": { - "type": "integer" - }, - "total_count": { - "type": "integer" - }, - "total_pages": { - "type": "integer" + "status": { + "allOf": [ + { + "$ref": "#/definitions/fresha.WorkingHoursStatus" + } + ], + "description": "Current open/closed state at read time." } }, "type": "object" }, - "greystar.MarketItem": { + "fresha.WorkingHoursDay": { "properties": { - "count": { - "type": "integer" + "is_closed": { + "description": "True when the venue is closed that day.", + "example": false, + "type": "boolean" }, - "country_code": { - "type": "string" + "is_today": { + "description": "True for the day the record was read on.", + "example": false, + "type": "boolean" }, - "market_area": { + "name": { + "description": "Day name as the venue's record prints it, e.g. \"Monday\".", + "example": "Monday", "type": "string" - } - }, - "type": "object" - }, - "greystar.Markets": { - "properties": { - "cities": { - "items": { - "$ref": "#/definitions/greystar.CityItem" - }, - "type": "array" - }, - "countries": { - "items": { - "$ref": "#/definitions/greystar.CountryItem" - }, - "type": "array" - }, - "market_areas": { - "items": { - "$ref": "#/definitions/greystar.MarketItem" - }, - "type": "array" }, - "neighborhoods": { - "items": { - "$ref": "#/definitions/greystar.Neighborhood" - }, - "type": "array" - }, - "states": { + "values": { + "description": "The venue's own rendered opening ranges for that day, e.g.\n\"9:30 AM - 7:00 PM\". These are display strings, not machine times.", "items": { - "$ref": "#/definitions/greystar.StateItem" + "type": "string" }, "type": "array" - }, - "total_properties": { - "type": "integer" } }, "type": "object" }, - "greystar.Neighborhood": { + "fresha.WorkingHoursStatus": { "properties": { - "count": { - "type": "integer" - }, - "country_code": { + "details": { + "description": "Extra display detail, e.g. \"- opens at 9:30 AM\".", + "example": "- opens at 9:30 AM", "type": "string" }, - "market_area": { + "name": { + "description": "Display label, e.g. \"Closed\".", + "example": "Closed", "type": "string" }, - "neighborhood": { + "state": { + "description": "Machine state, e.g. \"OPEN\", \"CLOSED\".", + "example": "CLOSED", "type": "string" } }, "type": "object" }, - "greystar.OfficeHour": { + "fresha.landingVenuesResponseDoc": { "properties": { - "close": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "open": { + "data": { + "$ref": "#/definitions/fresha.LandingVenuesResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "greystar.Property": { + "fresha.searchVenuesResponseDoc": { "properties": { - "address": { - "type": "string" - }, - "city": { - "type": "string" - }, - "country_code": { - "type": "string" - }, - "display_price": { - "type": "number" - }, - "id": { - "type": "string" - }, - "market_area": { - "type": "string" - }, - "min_base_rent_lease_term": { + "code": { + "example": 200, "type": "integer" }, - "min_price": { - "type": "number" - }, - "name": { - "type": "string" - }, - "neighborhood": { - "type": "string" + "data": { + "$ref": "#/definitions/fresha.SearchVenuesResponse" }, - "postal_code": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "fresha.taxonomyResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "required_monthly_fees_max": { - "type": "number" - }, - "required_monthly_fees_min": { - "type": "number" + "data": { + "$ref": "#/definitions/fresha.TaxonomyResponse" }, - "state": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "fresha.venueResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "state_name": { - "type": "string" + "data": { + "$ref": "#/definitions/fresha.VenueResponse" }, - "thumbnail_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "greystar.PropertyDetails": { + "ft.ArticleResponse": { "properties": { - "amenities": { + "authors": { "items": { "type": "string" }, "type": "array" }, - "available_units": { + "description": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "paragraphs": { "items": { - "$ref": "#/definitions/greystar.Unit" + "type": "string" }, "type": "array" }, - "bike_score": { - "type": "integer" - }, - "building_type": { - "type": "string" - }, - "email": { + "published_at": { "type": "string" }, - "facebook_url": { + "section": { "type": "string" }, - "features": { + "tags": { "items": { "type": "string" }, "type": "array" }, - "fees": { - "items": { - "$ref": "#/definitions/greystar.Fee" - }, - "type": "array" + "title": { + "type": "string" }, - "floorplans": { + "updated_at": { + "type": "string" + }, + "url": { + "type": "string" + }, + "word_count": { + "type": "integer" + } + }, + "type": "object" + }, + "ft.AuthorResponse": { + "properties": { + "articles": { "items": { - "$ref": "#/definitions/greystar.Floorplan" + "$ref": "#/definitions/ft.HeadlineItem" }, "type": "array" }, - "highlights": { - "additionalProperties": { - "type": "boolean" - }, - "type": "object" - }, - "id": { + "email": { "type": "string" }, - "image": { - "$ref": "#/definitions/greystar.Image" + "has_more": { + "type": "boolean" }, - "instagram_url": { + "image_url": { "type": "string" }, - "location": { - "$ref": "#/definitions/greystar.Location" - }, - "long_description": { + "job_title": { "type": "string" }, "name": { "type": "string" }, - "office_hours": { - "additionalProperties": { - "$ref": "#/definitions/greystar.OfficeHour" - }, - "type": "object" - }, - "phone": { - "type": "string" - }, - "required_monthly_fees_max": { - "type": "number" - }, - "required_monthly_fees_min": { - "type": "number" + "page": { + "type": "integer" }, - "short_description": { + "slug": { "type": "string" }, - "tours": { + "social_accounts": { "items": { - "$ref": "#/definitions/greystar.Tour" + "$ref": "#/definitions/ft.AuthorSocialAccount" }, "type": "array" }, - "transit_score": { - "type": "integer" - }, "url": { "type": "string" - }, - "walk_score": { - "type": "integer" - }, - "website_url": { - "type": "string" } }, "type": "object" }, - "greystar.SearchResult": { + "ft.AuthorSocialAccount": { "properties": { - "page": { - "type": "integer" - }, - "per_page": { - "type": "integer" - }, - "properties": { - "items": { - "$ref": "#/definitions/greystar.Property" - }, - "type": "array" - }, - "total_count": { - "type": "integer" + "platform": { + "type": "string" }, - "total_pages": { - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "greystar.StateItem": { + "ft.CategoriesResponse": { "properties": { - "count": { - "type": "integer" - }, - "country_code": { - "type": "string" - }, - "state": { - "type": "string" - }, - "state_name": { - "type": "string" + "sections": { + "items": { + "$ref": "#/definitions/ft.CategorySection" + }, + "type": "array" } }, "type": "object" }, - "greystar.SubLocation": { + "ft.CategoryLink": { "properties": { "name": { "type": "string" }, - "path": { - "type": "string" - }, "slug": { "type": "string" }, - "summary": { - "type": "string" - }, "url": { "type": "string" } }, "type": "object" }, - "greystar.Tour": { + "ft.CategorySection": { "properties": { - "provider": { + "name": { "type": "string" }, - "title": { + "sections": { + "items": { + "$ref": "#/definitions/ft.CategoryLink" + }, + "type": "array" + }, + "slug": { "type": "string" }, "url": { @@ -102883,79 +109070,55 @@ }, "type": "object" }, - "greystar.Unit": { + "ft.HeadlineItem": { "properties": { - "area": { - "type": "integer" - }, - "available_on": { - "type": "string" - }, - "building": { + "image_url": { "type": "string" }, - "floor": { + "published_at": { "type": "string" }, - "floorplan_id": { + "section": { "type": "string" }, - "floorplan_label": { + "summary": { "type": "string" }, - "max_price": { - "type": "number" - }, - "min_base_rent_lease_term": { - "type": "integer" - }, - "min_price": { - "type": "number" - }, - "unit_id": { + "title": { "type": "string" }, - "unit_number": { + "url": { "type": "string" } }, "type": "object" }, - "greystar.UnitFacets": { + "ft.HeadlinesResponse": { "properties": { - "bathrooms": { - "items": { - "$ref": "#/definitions/greystar.FacetCount" - }, - "type": "array" + "has_more": { + "type": "boolean" }, - "bedrooms": { + "items": { "items": { - "$ref": "#/definitions/greystar.FacetCount" + "$ref": "#/definitions/ft.HeadlineItem" }, "type": "array" }, - "building_types": { - "items": { - "$ref": "#/definitions/greystar.FacetCount" - }, - "type": "array" + "page": { + "type": "integer" }, - "highlights": { - "items": { - "$ref": "#/definitions/greystar.FacetCount" - }, - "type": "array" + "section": { + "type": "string" } }, "type": "object" }, - "greystar.UnitLocation": { + "ft.NewsItem": { "properties": { - "location": { + "published_at": { "type": "string" }, - "parent": { + "title": { "type": "string" }, "url": { @@ -102964,1030 +109127,943 @@ }, "type": "object" }, - "greystar.UnitLocationList": { + "ft.NewsResponse": { "properties": { - "locations": { + "items": { "items": { - "$ref": "#/definitions/greystar.UnitLocation" + "$ref": "#/definitions/ft.NewsItem" }, "type": "array" - }, - "total_count": { - "type": "integer" } }, "type": "object" }, - "greystar.UnitProperty": { + "ft.SearchResponse": { "properties": { - "address": { - "type": "string" - }, - "city": { + "date_range": { "type": "string" }, - "latitude": { - "type": "number" + "has_more": { + "type": "boolean" }, - "longitude": { - "type": "number" + "items": { + "items": { + "$ref": "#/definitions/ft.HeadlineItem" + }, + "type": "array" }, - "matching_units": { + "page": { "type": "integer" }, - "name": { + "q": { "type": "string" }, - "postal_code": { + "sort": { "type": "string" + } + }, + "type": "object" + }, + "ft.articleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "property_id": { - "type": "string" + "data": { + "$ref": "#/definitions/ft.ArticleResponse" }, - "state": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "ft.authorResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "state_name": { - "type": "string" + "data": { + "$ref": "#/definitions/ft.AuthorResponse" }, - "thumbnail_url": { + "msg": { + "example": "OK", "type": "string" - }, - "units": { - "items": { - "$ref": "#/definitions/greystar.ListedUnit" - }, - "type": "array" - }, - "units_truncated": { - "type": "boolean" } }, "type": "object" }, - "greystar.UnitSearchResult": { + "ft.categoriesResponseDoc": { "properties": { - "facets": { - "$ref": "#/definitions/greystar.UnitFacets" - }, - "location": { - "type": "string" - }, - "page": { - "type": "integer" - }, - "per_page": { + "code": { + "example": 200, "type": "integer" }, - "properties": { - "items": { - "$ref": "#/definitions/greystar.UnitProperty" - }, - "type": "array" - }, - "total_count": { - "type": "integer" + "data": { + "$ref": "#/definitions/ft.CategoriesResponse" }, - "total_pages": { - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "grubhub.AvailabilityResponse": { + "ft.headlinesResponseDoc": { "properties": { - "count": { - "example": 2, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "requested": { - "description": "Requested is the id list as asked for, so a caller can tell which\nids Grubhub returned nothing for.", - "items": { - "type": "string" - }, - "type": "array" - }, - "restaurants": { - "items": { - "$ref": "#/definitions/grubhub.RestaurantAvailability" - }, - "type": "array" + "data": { + "$ref": "#/definitions/ft.HeadlinesResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "grubhub.MenuCategory": { + "ft.newsResponseDoc": { "properties": { - "available": { - "example": true, - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "category_id": { - "example": "275127198073", + "data": { + "$ref": "#/definitions/ft.NewsResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "ft.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "items": { - "items": { - "$ref": "#/definitions/grubhub.MenuItem" - }, - "type": "array" + "data": { + "$ref": "#/definitions/ft.SearchResponse" }, - "name": { - "example": "Burgers", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "grubhub.MenuItem": { + "fussballde.AmateurStatRow": { "properties": { - "available": { - "example": true, - "type": "boolean" + "away": { + "$ref": "#/definitions/fussballde.TeamRef" }, - "delivery_price": { - "$ref": "#/definitions/grubhub.Money" + "competition_id": { + "type": "string" }, - "description": { + "home": { + "$ref": "#/definitions/fussballde.TeamRef" + }, + "league": { + "example": "Kreisliga C", "type": "string" }, - "image_url": { + "match_id": { "type": "string" }, - "item_id": { - "example": "275127198449", + "player": { + "example": "Dominik Milaszewski", "type": "string" }, - "max_price": { - "$ref": "#/definitions/grubhub.Money" + "player_id": { + "type": "string" }, - "min_price": { - "allOf": [ - { - "$ref": "#/definitions/grubhub.Money" - } - ], - "description": "MinPrice/MaxPrice bound an item whose price varies by the options\nchosen; they equal Price for a fixed-price item." + "position": { + "type": "integer" }, - "name": { - "example": "Cheeseburger", + "result": { + "example": "0:30", "type": "string" }, - "pickup_price": { - "$ref": "#/definitions/grubhub.Money" - }, - "popular": { - "example": true, - "type": "boolean" + "team": { + "$ref": "#/definitions/fussballde.TeamRef" }, - "price": { - "$ref": "#/definitions/grubhub.Money" + "team_type": { + "example": "Herren", + "type": "string" }, - "tags": { + "values": { "items": { - "type": "string" + "$ref": "#/definitions/fussballde.StatValue" }, "type": "array" } }, "type": "object" }, - "grubhub.MenuResponse": { + "fussballde.AmateurStatsResponse": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/grubhub.MenuCategory" - }, - "type": "array" + "count": { + "type": "integer" }, - "fetched_at": { + "federation_id": { "type": "string" }, - "item_count": { - "example": 8, + "final": { + "example": false, + "type": "boolean" + }, + "limit": { "type": "integer" }, - "name": { - "type": "string" + "offset": { + "type": "integer" }, - "restaurant_id": { - "example": "6238960", + "rows": { + "items": { + "$ref": "#/definitions/fussballde.AmateurStatRow" + }, + "type": "array" + }, + "season": { "type": "string" }, - "source_url": { + "stat": { "type": "string" - } - }, - "type": "object" - }, - "grubhub.Money": { - "properties": { - "amount": { - "example": 399, - "type": "integer" }, - "currency": { - "example": "USD", + "stat_name": { "type": "string" }, - "value": { - "example": 3.99, - "type": "number" + "team_type": { + "type": "string" } }, "type": "object" }, - "grubhub.Offer": { + "fussballde.ClubDetail": { "properties": { - "amount": { - "$ref": "#/definitions/grubhub.OfferAmount" - }, - "description": { - "description": "Description is the full offer copy, including its fine print --\nminimum order rules, exclusions, redemption limits.", + "club_id": { "type": "string" }, - "end_date": { + "federation": { "type": "string" }, - "entitlement_id": { + "federation_id": { "type": "string" }, - "entitlement_type": { - "example": "UNIFIED_REWARD", - "type": "string" + "junior_team_count": { + "type": "integer" }, - "offer_type": { - "example": "ENTERPRISE_REWARD", + "name": { + "example": "Borussia Dortmund", "type": "string" }, - "pill_text": { - "description": "PillText is the short badge Grubhub's own UI shows on a restaurant\ncard, e.g. \"$10 off\".", - "example": "$10 off", + "profile": { + "items": { + "$ref": "#/definitions/fussballde.FactRow" + }, + "type": "array" + }, + "season": { + "example": "2627", "type": "string" }, - "redeem_item_count": { - "example": 1, + "senior_team_count": { "type": "integer" }, - "title": { - "example": "Free Double Cheeseburger", + "team_count": { + "type": "integer" + }, + "teams": { + "items": { + "$ref": "#/definitions/fussballde.ClubTeam" + }, + "type": "array" + }, + "url": { "type": "string" } }, "type": "object" }, - "grubhub.OfferAmount": { + "fussballde.ClubHit": { "properties": { - "amount_maximum": { - "example": 10, - "type": "number" + "city": { + "example": "Dortmund", + "type": "string" }, - "currency": { - "example": "USD", + "club_id": { + "example": "00ES8GN8N400008VVV0AG08LVUPGND5I", "type": "string" }, - "order_minimum": { - "example": 20, - "type": "number" + "logo_url": { + "type": "string" }, - "type": { - "example": "MENU_ITEM", + "name": { + "example": "Borussia Dortmund", "type": "string" }, - "value": { - "example": 0, - "type": "number" + "postal_code": { + "example": "44139", + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "grubhub.OffersResponse": { + "fussballde.ClubMatchesResponse": { "properties": { + "club_id": { + "type": "string" + }, "count": { - "example": 1, "type": "integer" }, - "fetched_at": { + "date_from": { "type": "string" }, - "offers": { - "items": { - "$ref": "#/definitions/grubhub.Offer" - }, - "type": "array" - }, - "restaurant_id": { - "example": "1338141", + "date_to": { "type": "string" }, - "source_url": { + "final": { + "type": "boolean" + }, + "kind": { "type": "string" - } - }, - "type": "object" - }, - "grubhub.Rating": { - "properties": { - "count": { - "example": 65, + }, + "limit": { "type": "integer" }, - "value": { - "example": 4.6, - "type": "number" + "matches": { + "items": { + "$ref": "#/definitions/fussballde.MatchRow" + }, + "type": "array" + }, + "offset": { + "type": "integer" } }, "type": "object" }, - "grubhub.RestaurantAvailability": { + "fussballde.ClubSearchResponse": { "properties": { - "available_for_delivery": { - "description": "AvailableFor* is whether the channel is offered at all, as distinct\nfrom whether it is open right now.", - "example": true, - "type": "boolean" - }, - "available_for_pickup": { - "example": true, - "type": "boolean" - }, - "blacked_out": { - "example": false, - "type": "boolean" - }, - "cuisines": { + "clubs": { "items": { - "type": "string" + "$ref": "#/definitions/fussballde.ClubHit" }, "type": "array" }, - "delivers_to_location": { - "description": "DeliversToLocation is whether this restaurant delivers to the\ncoordinate supplied in the request.", - "example": true, + "count": { + "type": "integer" + }, + "final": { + "example": false, "type": "boolean" }, - "delivery_estimate_minutes": { - "example": 25, + "limit": { "type": "integer" }, - "delivery_fee": { - "$ref": "#/definitions/grubhub.Money" + "offset": { + "type": "integer" }, - "distance_miles": { - "example": 0.23, - "type": "number" + "place": { + "type": "string" }, - "inundated": { - "description": "Inundated marks a restaurant Grubhub flags as overloaded.", - "example": false, - "type": "boolean" + "text": { + "type": "string" }, - "logo_url": { + "total": { + "example": 102, + "type": "integer" + } + }, + "type": "object" + }, + "fussballde.ClubTeam": { + "properties": { + "competition": { "type": "string" }, - "next_delivery_time": { - "description": "NextDeliveryTime is when Grubhub says the next delivery order can be\nsent, useful when open_delivery is false.", + "competition_id": { "type": "string" }, - "next_pickup_time": { + "competition_type": { + "example": "Freundschaftsspiele", "type": "string" }, - "open": { - "description": "Open is the restaurant's overall state; the two channel flags below\ncan differ from it and from each other.", - "example": false, - "type": "boolean" + "name": { + "example": "Herren - Borussia Dortmund", + "type": "string" }, - "open_delivery": { - "example": false, - "type": "boolean" + "team_id": { + "type": "string" }, - "open_pickup": { - "example": false, - "type": "boolean" + "team_type": { + "example": "Herren", + "type": "string" }, - "order_minimum": { - "$ref": "#/definitions/grubhub.Money" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "fussballde.ComparisonRow": { + "properties": { + "away": { + "example": "50", + "type": "string" }, - "pickup_estimate_minutes": { - "example": 10, - "type": "integer" + "home": { + "example": "50", + "type": "string" }, - "restaurant_id": { - "example": "6238960", + "label": { + "example": "Duelle", "type": "string" } }, "type": "object" }, - "grubhub.RestaurantHours": { + "fussballde.CompetitionLink": { "properties": { - "day_of_week": { - "example": "Monday", + "id": { "type": "string" }, - "end_time": { - "example": "23:59:59.000", + "kind": { + "example": "Meisterschaft", "type": "string" }, - "hours": { - "description": "Hours is Grubhub's own human-readable window.", - "example": "12:00 AM - 12:00 AM", + "name": { + "example": "Bundesliga", "type": "string" }, - "start_time": { - "example": "00:00:00.000", + "url": { "type": "string" } }, "type": "object" }, - "grubhub.RestaurantResponse": { + "fussballde.CompetitionOptionsResponse": { "properties": { - "address": { + "competition_type": { + "example": "1", "type": "string" }, - "chain_name": { + "federation_id": { + "example": "89", "type": "string" }, - "city": { + "season": { + "example": "2627", "type": "string" }, - "cuisines": { + "team_types": { "items": { - "type": "string" + "$ref": "#/definitions/fussballde.TeamTypeOption" }, "type": "array" - }, - "delivery_fee": { - "allOf": [ - { - "$ref": "#/definitions/grubhub.Money" - } - ], - "description": "Note the detail endpoint publishes fewer economics than the search\ncard: delivery_minimum and the ETA estimates come back null here, so\nuse /grubhub/search for those." - }, - "fetched_at": { + } + }, + "type": "object" + }, + "fussballde.CompetitionRef": { + "properties": { + "area_id": { "type": "string" }, - "has_coupons": { - "type": "boolean" - }, - "hours": { - "items": { - "$ref": "#/definitions/grubhub.RestaurantHours" - }, - "type": "array" - }, - "is_new": { - "type": "boolean" - }, - "latitude": { - "type": "number" - }, - "logo_url": { + "id": { + "example": "031BFREJC800001BVS5489BUVUR5FS5A-G", "type": "string" }, - "longitude": { - "type": "number" - }, - "menu_path": { + "league_id": { + "example": "1", "type": "string" }, "name": { - "example": "7th Street Burger Financial District", + "example": "Bundesliga", "type": "string" }, - "offers_delivery": { - "type": "boolean" - }, - "offers_pickup": { - "type": "boolean" - }, - "online_ordering": { - "example": true, - "type": "boolean" - }, - "phone_number": { + "url": { "type": "string" - }, - "postal_code": { + } + }, + "type": "object" + }, + "fussballde.CompetitionsResponse": { + "properties": { + "area": { "type": "string" }, - "price_rating": { - "type": "number" + "competition_type": { + "type": "string" }, - "rating": { - "$ref": "#/definitions/grubhub.Rating" + "competitions": { + "items": { + "$ref": "#/definitions/fussballde.CompetitionRef" + }, + "type": "array" }, - "restaurant_id": { - "example": "6238960", + "federation_id": { "type": "string" }, - "source_url": { + "league": { "type": "string" }, - "state": { + "season": { "type": "string" }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "timezone": { - "example": "America/New_York", + "team_type": { "type": "string" } }, "type": "object" }, - "grubhub.Review": { + "fussballde.FactRow": { "properties": { - "author_name": { - "example": "Annie", - "type": "string" - }, - "created_at": { - "description": "CreatedAt is RFC3339, converted from the upstream's epoch millis.", - "example": "2026-08-09T12:05:42Z", - "type": "string" - }, - "diner_type": { - "description": "DinerType distinguishes e.g. a Regular from a first-time diner.", - "example": "Regular", - "type": "string" - }, - "items": { - "description": "Items are the menu items this review is attached to -- Grubhub ties\neach review to what the diner actually ordered.", - "items": { - "$ref": "#/definitions/grubhub.ReviewedItem" - }, - "type": "array" - }, - "rating": { - "example": 5, - "type": "integer" - }, - "review_id": { + "label": { + "example": "Gründungsjahr", "type": "string" }, - "reviewer_review_count": { - "description": "ReviewerReviewCount is how many reviews this diner has written.", - "example": 21, - "type": "integer" - }, - "sentiment": { - "description": "Sentiment is Grubhub's own classification of the review.", - "example": "Positive", + "url": { "type": "string" }, - "text": { - "example": "Staff are great and burgers are great!", + "value": { + "example": "1909", "type": "string" } }, "type": "object" }, - "grubhub.ReviewedItem": { + "fussballde.Federation": { "properties": { - "item_id": { - "example": "275127198449", + "id": { + "example": "89", "type": "string" }, "name": { - "example": "Cheeseburger", + "example": "Deutschland", "type": "string" } }, "type": "object" }, - "grubhub.ReviewsResponse": { + "fussballde.FederationDetail": { "properties": { - "available_sorts": { - "items": { - "type": "string" - }, - "type": "array" - }, - "fetched_at": { + "federation_id": { + "example": "21", "type": "string" }, - "page": { - "example": 1, - "type": "integer" - }, - "rating_count": { - "type": "integer" - }, - "restaurant_id": { - "example": "6238960", + "name": { + "example": "Fußball- und Leichtathletik-Verband Westfalen", "type": "string" }, - "restaurant_score": { - "type": "number" - }, - "reviews": { + "news": { "items": { - "$ref": "#/definitions/grubhub.Review" + "$ref": "#/definitions/fussballde.NewsItem" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "star_breakdown": { - "$ref": "#/definitions/grubhub.StarBreakdown" - }, - "total_count": { - "example": 0, - "type": "integer" - }, - "total_pages": { - "example": 0, - "type": "integer" - } - }, - "type": "object" - }, - "grubhub.SearchResponse": { - "properties": { - "count": { - "example": 20, - "type": "integer" + "profile": { + "items": { + "$ref": "#/definitions/fussballde.FactRow" + }, + "type": "array" }, - "fetched_at": { + "regional_association": { + "example": "west", "type": "string" }, - "page": { - "example": 1, - "type": "integer" - }, - "restaurants": { + "summary": { "items": { - "$ref": "#/definitions/grubhub.SearchRestaurant" + "$ref": "#/definitions/fussballde.FactRow" }, "type": "array" }, - "source_url": { + "url": { "type": "string" }, - "total_hits": { - "example": 1457, - "type": "integer" - }, - "total_pages": { - "example": 73, - "type": "integer" + "verband_id": { + "example": "0123456789ABCDEF0123456700004130", + "type": "string" } }, "type": "object" }, - "grubhub.SearchRestaurant": { + "fussballde.FiltersResponse": { "properties": { - "address": { - "example": "199 Water Street", - "type": "string" + "competition_types": { + "additionalProperties": { + "additionalProperties": { + "items": { + "$ref": "#/definitions/fussballde.Option" + }, + "type": "array" + }, + "type": "object" + }, + "type": "object" }, - "chain_name": { + "current_season": { + "example": "2627", "type": "string" }, - "city": { - "example": "New York", + "default_competition_type": { + "example": "1", "type": "string" }, - "coupons_available": { - "description": "CouponsAvailable and TotalOffers describe promotions without\nreproducing their (volatile) terms.", - "example": false, - "type": "boolean" - }, - "cuisines": { + "federations": { "items": { - "type": "string" + "$ref": "#/definitions/fussballde.Federation" }, "type": "array" }, - "delivery_fee": { - "allOf": [ - { - "$ref": "#/definitions/grubhub.Money" - } - ], - "description": "Delivery and pickup economics." - }, - "delivery_minimum": { - "$ref": "#/definitions/grubhub.Money" - }, - "delivery_time_minutes": { - "example": 30, + "seasons": { + "additionalProperties": { + "items": { + "$ref": "#/definitions/fussballde.Option" + }, + "type": "array" + }, + "type": "object" + } + }, + "type": "object" + }, + "fussballde.GoalEntry": { + "properties": { + "minute": { + "example": 80, "type": "integer" }, - "distance_miles": { - "description": "DistanceMiles is the distance from the search coordinate.", - "example": "0.4", - "type": "string" - }, - "latitude": { - "type": "number" - }, - "logo_url": { + "player": { + "example": "Daniel Jonathan Svensson", "type": "string" }, - "longitude": { - "type": "number" + "stoppage_minute": { + "example": 2, + "type": "integer" + } + }, + "type": "object" + }, + "fussballde.LeagueOption": { + "properties": { + "areas": { + "items": { + "$ref": "#/definitions/fussballde.Option" + }, + "type": "array" }, - "menu_path": { + "id": { + "example": "1", "type": "string" }, "name": { - "example": "NYC Bagel and Coffee House", - "type": "string" - }, - "offers_delivery": { - "example": true, - "type": "boolean" - }, - "offers_pickup": { - "example": true, - "type": "boolean" - }, - "open": { - "example": true, - "type": "boolean" - }, - "phone_number": { + "example": "Bundesliga", "type": "string" - }, - "pickup_time_minutes": { - "example": 15, + } + }, + "type": "object" + }, + "fussballde.MatchCalendarResponse": { + "properties": { + "count": { "type": "integer" }, - "postal_code": { - "example": "10038", + "date_from": { "type": "string" }, - "price_rating": { - "description": "PriceRating is Grubhub's 1-4 \"$\" tier.", - "example": 2, - "type": "number" - }, - "rating": { - "$ref": "#/definitions/grubhub.Rating" - }, - "restaurant_id": { - "example": "14344720", + "date_to": { "type": "string" }, - "service_fee": { - "$ref": "#/definitions/grubhub.Money" + "matches": { + "items": { + "$ref": "#/definitions/fussballde.MatchRow" + }, + "type": "array" }, - "state": { - "example": "NY", + "postal_code": { "type": "string" }, - "total_menu_items": { - "type": "integer" - }, - "total_offers": { - "type": "integer" + "truncated": { + "example": false, + "type": "boolean" } }, "type": "object" }, - "grubhub.StarBreakdown": { + "fussballde.MatchComparisonResponse": { "properties": { - "1": { - "example": 0, - "type": "integer" - }, - "2": { - "example": 1, - "type": "integer" + "match_id": { + "type": "string" }, - "3": { - "example": 0, - "type": "integer" + "meetings": { + "items": { + "$ref": "#/definitions/fussballde.MatchRow" + }, + "type": "array" }, - "4": { - "example": 5, - "type": "integer" + "rows": { + "items": { + "$ref": "#/definitions/fussballde.ComparisonRow" + }, + "type": "array" }, - "5": { - "example": 94, - "type": "integer" + "view": { + "type": "string" } }, "type": "object" }, - "grubhub.TimeSlotDay": { + "fussballde.MatchDetail": { "properties": { - "date": { - "example": "2026-09-01", - "type": "string" - }, - "times": { - "description": "Times is every orderable slot on this date, as RFC3339 timestamps\ncarrying the restaurant's real UTC offset for that instant -- Grubhub\nreports the grid in local wall-clock hours and quarter-hours, so this\nresolves DST rather than requiring the caller to.", + "assistants": { "items": { "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "grubhub.TimepickerResponse": { - "properties": { - "days": { + }, + "away": { + "$ref": "#/definitions/fussballde.TeamRef" + }, + "away_goals": { "items": { - "$ref": "#/definitions/grubhub.TimeSlotDay" + "$ref": "#/definitions/fussballde.GoalEntry" }, "type": "array" }, - "earliest_order_send_time": { - "description": "EarliestOrderSendTime is the very next moment Grubhub will accept an\norder for this restaurant, ASAP or scheduled.", - "type": "string" + "away_score": { + "type": "integer" }, - "fetched_at": { + "competition": { + "example": "Bundesliga", "type": "string" }, - "location_mode": { - "example": "DELIVERY", + "competition_id": { "type": "string" }, - "restaurant_id": { - "example": "698307", + "date": { + "example": "2026-10-09", "type": "string" }, - "source_url": { + "events": { + "items": { + "$ref": "#/definitions/fussballde.MatchEvent" + }, + "type": "array" + }, + "fourth_official": { "type": "string" }, - "time_zone": { - "example": "America/New_York", + "halftime_score": { + "example": "0 : 0", "type": "string" - } - }, - "type": "object" - }, - "grubhub.availabilityResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" }, - "data": { - "$ref": "#/definitions/grubhub.AvailabilityResponse" + "home": { + "$ref": "#/definitions/fussballde.TeamRef" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "grubhub.menuResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "home_goals": { + "items": { + "$ref": "#/definitions/fussballde.GoalEntry" + }, + "type": "array" + }, + "home_score": { "type": "integer" }, - "data": { - "$ref": "#/definitions/grubhub.MenuResponse" + "id": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "grubhub.offersResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "match_number": { + "type": "string" }, - "data": { - "$ref": "#/definitions/grubhub.OffersResponse" + "matchday": { + "example": "5. Spieltag", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "grubhub.restaurantResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "note": { + "description": "Note is the site's own marker, such as nE or Absetzung.", + "example": "nE", + "type": "string" }, - "data": { - "$ref": "#/definitions/grubhub.RestaurantResponse" + "referee": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "grubhub.reviewsResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "result_qualifier": { + "description": "ResultQualifier says how a result was reached when it was not simply played out.", + "enum": [ + "after_extra_time", + "after_penalties", + "awarded", + "court_ruling", + "administrative_decision", + "test_match" + ], + "example": "after_penalties", + "type": "string" }, - "data": { - "$ref": "#/definitions/grubhub.ReviewsResponse" + "spectators": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "status": { + "enum": [ + "finished", + "scheduled", + "cancelled", + "annulled", + "abandoned", + "no_show", + "other" + ], + "example": "finished", + "type": "string" + }, + "time": { + "example": "20:30", + "type": "string" + }, + "url": { + "type": "string" + }, + "venue": { + "type": "string" } }, "type": "object" }, - "grubhub.searchResponseDoc": { + "fussballde.MatchEvent": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "minute": { "type": "integer" }, - "data": { - "$ref": "#/definitions/grubhub.SearchResponse" + "side": { + "example": "home", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "type": { + "example": "substitute", + "type": "string" } }, "type": "object" }, - "grubhub.timepickerResponseDoc": { + "fussballde.MatchPlanResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "competition_id": { + "type": "string" + }, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/grubhub.TimepickerResponse" + "matches": { + "items": { + "$ref": "#/definitions/fussballde.MatchRow" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "rounds": { + "description": "Rounds lists the rounds of a cup or tournament; pass a round id as competition_id to read that round alone.", + "items": { + "$ref": "#/definitions/fussballde.RoundRef" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "guardian.ArticleResponse": { + "fussballde.MatchRow": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" + "away": { + "$ref": "#/definitions/fussballde.TeamRef" }, - "description": { + "away_score": { + "type": "integer" + }, + "competition": { + "example": "Bundesliga", "type": "string" }, - "image_url": { + "date": { + "example": "2026-10-09", "type": "string" }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" + "home": { + "$ref": "#/definitions/fussballde.TeamRef" }, - "published_at": { + "home_score": { + "type": "integer" + }, + "id": { + "example": "031BFTHDCC000000VS5489BUVUR5FS5A", "type": "string" }, - "section": { + "league": { + "example": "Kreisfreundschaftsspiele", "type": "string" }, - "title": { + "match_number": { + "example": "037", "type": "string" }, - "updated_at": { + "note": { + "description": "Note is the site's own marker, such as nE or Absetzung.", + "example": "nE", "type": "string" }, - "url": { + "result_qualifier": { + "description": "ResultQualifier says how a result was reached when it was not simply played out.", + "enum": [ + "after_extra_time", + "after_penalties", + "awarded", + "court_ruling", + "administrative_decision", + "test_match" + ], + "example": "after_penalties", "type": "string" - } - }, - "type": "object" - }, - "guardian.AuthorArticle": { - "properties": { - "image_url": { + }, + "round": { + "description": "Round is the round of a cup or tournament match, such as 1. Hauptrunde.", + "example": "2. Hauptrunde", "type": "string" }, - "published_at": { + "status": { + "enum": [ + "finished", + "scheduled", + "cancelled", + "annulled", + "abandoned", + "no_show", + "other" + ], + "example": "finished", "type": "string" }, - "section": { + "team_type": { + "example": "D-Junioren", "type": "string" }, - "title": { + "time": { + "example": "20:30", "type": "string" }, "url": { @@ -103996,36 +110072,39 @@ }, "type": "object" }, - "guardian.AuthorResponse": { + "fussballde.MatchdayResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/guardian.AuthorArticle" - }, - "type": "array" - }, - "bio": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "name": { + "competition_id": { "type": "string" }, - "page": { + "count": { "type": "integer" }, - "slug": { + "date": { "type": "string" }, - "total_pages": { + "matchday": { + "example": 7, "type": "integer" }, - "total_results": { + "matchday_count": { + "example": 34, "type": "integer" }, - "twitter_handle": { + "matches": { + "items": { + "$ref": "#/definitions/fussballde.MatchRow" + }, + "type": "array" + }, + "rounds": { + "description": "Rounds lists the rounds of a cup or tournament; pass a round id as competition_id to read that round.", + "items": { + "$ref": "#/definitions/fussballde.RoundRef" + }, + "type": "array" + }, + "title": { "type": "string" }, "url": { @@ -104034,92 +110113,75 @@ }, "type": "object" }, - "guardian.HeadlineItem": { + "fussballde.NationalScorer": { "properties": { - "author": { + "club": { + "example": "VfB Oldenburg", "type": "string" }, - "published_at": { + "club_id": { "type": "string" }, - "section": { - "type": "string" + "goals": { + "type": "integer" }, - "summary": { - "type": "string" + "matches": { + "type": "integer" }, - "title": { + "name": { + "example": "Mats Facklam", "type": "string" }, - "url": { + "player_id": { "type": "string" + }, + "position": { + "type": "integer" } }, "type": "object" }, - "guardian.HeadlinesResponse": { + "fussballde.NationalTopScorersResponse": { "properties": { - "items": { + "levels": { "items": { - "$ref": "#/definitions/guardian.HeadlineItem" + "$ref": "#/definitions/fussballde.ScorerLevel" }, "type": "array" }, - "section": { + "note": { + "type": "string" + }, + "team_type": { "type": "string" } }, "type": "object" }, - "guardian.LiveBlock": { + "fussballde.NewsArticle": { "properties": { - "author": { + "category": { "type": "string" }, - "id": { + "date": { "type": "string" }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" - }, - "published_at": { + "id": { "type": "string" }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "guardian.LiveKeyEvent": { - "properties": { - "published_at": { + "image_caption": { "type": "string" }, - "title": { + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "guardian.LiveResponse": { - "properties": { - "blocks": { - "items": { - "$ref": "#/definitions/guardian.LiveBlock" - }, - "type": "array" }, - "key_events": { + "paragraphs": { "items": { - "$ref": "#/definitions/guardian.LiveKeyEvent" + "type": "string" }, "type": "array" }, - "last_updated": { + "time": { "type": "string" }, "title": { @@ -104131,19 +110193,25 @@ }, "type": "object" }, - "guardian.TopicItem": { + "fussballde.NewsItem": { "properties": { - "kicker": { - "description": "Kicker is the series or blog label Guardian shows above the headline.", + "category": { + "example": "Magazin", "type": "string" }, - "published_at": { + "date": { + "example": "2026-10-22", "type": "string" }, - "section": { + "excerpt": { "type": "string" }, - "summary": { + "id": { + "example": "10067512", + "type": "string" + }, + "time": { + "example": "14:00", "type": "string" }, "title": { @@ -104155,849 +110223,739 @@ }, "type": "object" }, - "guardian.TopicPagination": { + "fussballde.NewsResponse": { "properties": { - "has_next": { + "count": { + "type": "integer" + }, + "final": { + "example": false, "type": "boolean" }, - "next_page": { - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/fussballde.NewsItem" + }, + "type": "array" }, - "page": { + "limit": { "type": "integer" }, - "total_pages": { - "description": "TotalPages is the archive's last page (1 for a section front).", + "offset": { "type": "integer" }, - "total_results": { - "description": "TotalResults is Guardian's article count for a tag archive.", - "type": "integer" + "stream": { + "type": "string" } }, "type": "object" }, - "guardian.TopicResponse": { + "fussballde.NewsSearchResponse": { "properties": { - "is_front": { - "description": "IsFront is true for a curated section front (no archive paging) and\nfalse for a paginated tag archive.", + "channel": { + "type": "string" + }, + "count": { + "type": "integer" + }, + "final": { + "example": false, "type": "boolean" }, "items": { "items": { - "$ref": "#/definitions/guardian.TopicItem" + "$ref": "#/definitions/fussballde.NewsItem" }, "type": "array" }, - "pagination": { - "$ref": "#/definitions/guardian.TopicPagination" + "limit": { + "type": "integer" }, - "resolved_topic": { - "description": "ResolvedTopic is the path Guardian actually served, which differs from\nTopic for edition-scoped fronts (technology -> uk/technology).", - "type": "string" + "offset": { + "type": "integer" }, - "topic": { + "q": { "type": "string" + }, + "total": { + "example": 1974, + "type": "integer" } }, "type": "object" }, - "guardian.articleResponseDoc": { + "fussballde.Option": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/guardian.ArticleResponse" + "id": { + "example": "2627", + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "example": "26/27", "type": "string" } }, "type": "object" }, - "guardian.authorResponseDoc": { + "fussballde.PlayerAppearance": { "properties": { - "code": { - "example": 200, + "goals": { "type": "integer" }, - "data": { - "$ref": "#/definitions/guardian.AuthorResponse" + "match": { + "$ref": "#/definitions/fussballde.MatchRow" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "guardian.headlinesResponseDoc": { - "properties": { - "code": { - "example": 200, + "minutes": { "type": "integer" }, - "data": { - "$ref": "#/definitions/guardian.HeadlinesResponse" + "subbed_in_minute": { + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "subbed_out_minute": { + "type": "integer" } }, "type": "object" }, - "guardian.liveResponseDoc": { + "fussballde.PlayerDetail": { "properties": { - "code": { - "example": 200, - "type": "integer" + "birth_date": { + "example": "1993-02-09", + "type": "string" }, - "data": { - "$ref": "#/definitions/guardian.LiveResponse" + "facts": { + "items": { + "$ref": "#/definitions/fussballde.FactRow" + }, + "type": "array" }, - "msg": { - "example": "OK", + "name": { + "example": "Niclas Füllkrug", "type": "string" - } - }, - "type": "object" - }, - "guardian.topicResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/guardian.TopicResponse" + "player_id": { + "type": "string" }, - "msg": { - "example": "OK", + "profile_type": { + "example": "full", "type": "string" - } - }, - "type": "object" - }, - "gucci.CategoriesResponse": { - "properties": { - "categories": { + }, + "stats": { "items": { - "$ref": "#/definitions/gucci.Category" + "$ref": "#/definitions/fussballde.StatEntry" }, "type": "array" }, - "country": { + "stats_season": { + "example": "26/27", "type": "string" }, - "departments": { - "items": { - "type": "string" - }, - "type": "array" + "team": { + "example": "SV Werder Bremen", + "type": "string" }, - "fetched_at": { + "team_id": { "type": "string" }, - "language": { + "team_type": { + "example": "Herren", "type": "string" }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "gucci.Category": { + "fussballde.PlayerHit": { "properties": { - "category": { + "birth_date": { + "example": "1993-02-09", "type": "string" }, - "department": { + "name": { + "example": "Niclas Füllkrug", "type": "string" }, - "label": { + "player_id": { + "example": "01MH0AKR7C000007VV0AG13EVSFDFGE6", "type": "string" }, - "path": { + "team": { + "example": "SV Werder Bremen", "type": "string" - } - }, - "type": "object" - }, - "gucci.CategoryFacet": { - "properties": { - "count": { - "type": "integer" }, - "path": { + "team_type": { + "example": "Herren", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "gucci.CategoryProduct": { + "fussballde.PlayerMatchesResponse": { "properties": { - "colors": { + "appearances": { "items": { - "type": "string" + "$ref": "#/definitions/fussballde.PlayerAppearance" }, "type": "array" }, - "currency": { + "competition": { + "example": "SV Werder Bremen (Herren), Bundesliga", "type": "string" }, - "images": { + "competitions": { "items": { - "type": "string" + "$ref": "#/definitions/fussballde.Option" }, "type": "array" }, - "in_stock": { - "type": "boolean" - }, - "in_stock_online": { - "type": "boolean" - }, - "in_stock_stores": { - "type": "boolean" + "count": { + "type": "integer" }, - "name": { + "player_id": { "type": "string" }, - "price": { - "type": "number" - }, - "style_code": { + "season": { "type": "string" }, - "url": { + "team_id": { "type": "string" }, - "variation_description": { - "type": "string" + "teams": { + "items": { + "$ref": "#/definitions/fussballde.Option" + }, + "type": "array" } }, "type": "object" }, - "gucci.CategoryResponse": { + "fussballde.PlayerSearchResponse": { "properties": { - "category": { - "type": "string" - }, - "country": { - "type": "string" + "count": { + "type": "integer" }, - "facets": { - "items": { - "$ref": "#/definitions/gucci.CategoryFacet" - }, - "type": "array" + "final": { + "example": false, + "type": "boolean" }, - "fetched_at": { + "first_name": { "type": "string" }, - "language": { + "last_name": { "type": "string" }, - "page": { + "limit": { "type": "integer" }, - "pages_count": { + "offset": { "type": "integer" }, - "products": { - "items": { - "$ref": "#/definitions/gucci.CategoryProduct" - }, - "type": "array" - }, - "products_count": { - "type": "integer" + "place": { + "type": "string" }, - "sort_options": { + "players": { "items": { - "type": "string" + "$ref": "#/definitions/fussballde.PlayerHit" }, "type": "array" }, - "source_url": { - "type": "string" + "total": { + "example": 1067, + "type": "integer" } }, "type": "object" }, - "gucci.Product": { + "fussballde.PositionHistoryResponse": { "properties": { - "brand": { + "competition_id": { "type": "string" }, - "categories": { - "items": { - "type": "string" - }, - "type": "array" - }, - "category_codes": { - "items": { - "type": "string" - }, - "type": "array" + "matchdays": { + "type": "integer" }, - "colors": { + "teams": { "items": { - "type": "string" + "$ref": "#/definitions/fussballde.TeamPositions" }, "type": "array" - }, - "currency": { + } + }, + "type": "object" + }, + "fussballde.PostalCode": { + "properties": { + "city": { + "example": "Dortmund", "type": "string" }, - "description": { + "district": { + "example": "Mitte", "type": "string" }, - "gender": { + "postal_code": { + "example": "44139", "type": "string" + } + }, + "type": "object" + }, + "fussballde.PostalCodesResponse": { + "properties": { + "count": { + "type": "integer" }, - "images": { + "postal_codes": { "items": { - "type": "string" + "$ref": "#/definitions/fussballde.PostalCode" }, "type": "array" }, - "in_stock": { - "type": "boolean" + "q": { + "type": "string" + } + }, + "type": "object" + }, + "fussballde.RoundRef": { + "properties": { + "id": { + "example": "0316JUVAIC000000VS5489BTVU7GTVLE-R", + "type": "string" }, - "in_stock_online": { - "type": "boolean" + "name": { + "example": "2. Hauptrunde", + "type": "string" }, - "in_stock_stores": { + "open": { + "description": "Open reports whether the page shows the round's matches inline.", "type": "boolean" - }, - "line": { + } + }, + "type": "object" + }, + "fussballde.ScorerLevel": { + "properties": { + "level": { + "example": "Ebene 4", "type": "string" }, - "materials": { + "scorers": { "items": { - "type": "string" + "$ref": "#/definitions/fussballde.NationalScorer" }, "type": "array" + } + }, + "type": "object" + }, + "fussballde.ScorerRow": { + "properties": { + "goals": { + "type": "integer" }, "name": { + "example": "Niclas Füllkrug", "type": "string" }, - "price": { - "type": "number" - }, - "sizes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "sku": { + "player_id": { "type": "string" }, - "style_code": { + "position": { + "type": "integer" + }, + "team": { + "$ref": "#/definitions/fussballde.TeamRef" + } + }, + "type": "object" + }, + "fussballde.SeasonResult": { + "properties": { + "competition": { + "example": "Bundesliga / Bundesliga", "type": "string" }, - "thumbnail_url": { + "result": { + "example": "2. PLATZ", "type": "string" }, - "url": { + "season": { + "example": "25/26", "type": "string" } }, "type": "object" }, - "gucci.ProductDetailResponse": { + "fussballde.SquadPlayer": { "properties": { - "availability": { - "type": "string" - }, - "brand": { - "type": "string" + "appearances": { + "type": "integer" }, - "breadcrumbs": { + "cells": { "items": { "type": "string" }, "type": "array" }, - "categories": { - "items": { - "type": "string" - }, - "type": "array" + "goals": { + "type": "integer" }, - "category_codes": { - "items": { - "type": "string" - }, - "type": "array" + "minutes": { + "type": "integer" }, - "colors": { + "name": { + "example": "Anton, Waldemar", + "type": "string" + }, + "player_id": { + "type": "string" + } + }, + "type": "object" + }, + "fussballde.StandingsRow": { + "properties": { + "cells": { "items": { "type": "string" }, "type": "array" }, - "currency": { - "type": "string" + "drawn": { + "type": "integer" }, - "description": { - "type": "string" + "goal_difference": { + "type": "integer" }, - "fetched_at": { - "type": "string" + "goals_against": { + "type": "integer" }, - "gender": { - "type": "string" + "goals_for": { + "type": "integer" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" + "lost": { + "type": "integer" }, - "in_stock": { - "type": "boolean" + "played": { + "type": "integer" }, - "in_stock_online": { - "type": "boolean" + "points": { + "type": "integer" }, - "in_stock_stores": { - "type": "boolean" + "position": { + "type": "integer" }, - "line": { - "type": "string" + "team": { + "$ref": "#/definitions/fussballde.TeamRef" }, - "materials": { + "won": { + "type": "integer" + } + }, + "type": "object" + }, + "fussballde.StandingsTable": { + "properties": { + "columns": { "items": { "type": "string" }, "type": "array" }, - "name": { - "type": "string" - }, - "price": { - "type": "number" - }, - "sizes": { + "rows": { "items": { - "type": "string" + "$ref": "#/definitions/fussballde.StandingsRow" }, "type": "array" }, - "sku": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "style_code": { - "type": "string" - }, - "url": { + "title": { + "example": "Heimtabelle", "type": "string" } }, "type": "object" }, - "gucci.RecommendationsResponse": { + "fussballde.StatEntry": { "properties": { - "count": { - "type": "integer" - }, - "country": { - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "model": { - "type": "string" - }, - "products": { - "items": { - "$ref": "#/definitions/gucci.RecommendedProduct" - }, - "type": "array" - }, - "source_url": { + "label": { + "example": "Tore", "type": "string" }, - "style_code": { + "value": { + "example": "6", "type": "string" } }, "type": "object" }, - "gucci.RecommendedProduct": { + "fussballde.StatValue": { "properties": { - "currency": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "in_stock_online": { - "type": "boolean" - }, - "in_stock_stores": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "price": { - "type": "number" - }, - "style_code": { + "label": { + "example": "Tore", "type": "string" }, - "url": { + "value": { + "example": "47", "type": "string" } }, "type": "object" }, - "gucci.SearchResponse": { + "fussballde.TableResponse": { "properties": { - "count": { - "type": "integer" - }, - "country": { - "type": "string" - }, - "fetched_at": { + "competition_id": { "type": "string" }, - "limit": { - "type": "integer" - }, - "page": { + "matchday": { + "example": 3, "type": "integer" }, - "products": { + "tables": { "items": { - "$ref": "#/definitions/gucci.Product" + "$ref": "#/definitions/fussballde.StandingsTable" }, "type": "array" }, - "query": { - "type": "string" - }, - "size": { - "type": "string" - }, - "size_facets": { - "additionalProperties": { - "type": "integer" - }, - "description": "SizeFacets lists the live size values and counts returned by Gucci's\ncatalog for this query. A value can be passed back as Size.", - "type": "object" - }, - "source_url": { + "view": { + "example": "overall", "type": "string" - }, - "total_pages": { - "type": "integer" - }, - "total_results": { - "type": "integer" } }, "type": "object" }, - "gucci.SizeGuideResponse": { + "fussballde.TeamDetail": { "properties": { - "available": { - "type": "boolean" - }, - "fetched_at": { + "club_id": { "type": "string" }, - "headers": { + "club_profile": { "items": { - "type": "string" + "$ref": "#/definitions/fussballde.FactRow" }, "type": "array" }, - "rows": { + "club_url": { + "type": "string" + }, + "competitions": { "items": { - "items": { - "type": "string" - }, - "type": "array" + "$ref": "#/definitions/fussballde.CompetitionLink" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "style_code": { - "type": "string" - }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "gucci.Store": { - "properties": { - "address": { + "federation": { + "example": "Westfalen", "type": "string" }, - "book_appointment_url": { + "federation_id": { "type": "string" }, - "city": { + "highest_league": { + "example": "Bundesliga", "type": "string" }, - "departments": { + "history": { "items": { - "type": "string" + "$ref": "#/definitions/fussballde.SeasonResult" }, "type": "array" }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" - }, - "name": { + "logo_url": { "type": "string" }, - "phone": { + "name": { + "example": "Borussia Dortmund", "type": "string" }, - "slug": { - "type": "string" + "summary": { + "items": { + "$ref": "#/definitions/fussballde.FactRow" + }, + "type": "array" }, - "store_code": { + "team_id": { "type": "string" }, - "type": { + "team_type": { + "example": "Herren", "type": "string" }, "url": { "type": "string" + }, + "venues": { + "items": { + "$ref": "#/definitions/fussballde.FactRow" + }, + "type": "array" } }, "type": "object" }, - "gucci.StoreDetailResponse": { + "fussballde.TeamMatchesResponse": { "properties": { - "city": { - "type": "string" + "count": { + "type": "integer" }, - "country": { + "date_from": { "type": "string" }, - "fetched_at": { + "date_to": { "type": "string" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" + "final": { + "type": "boolean" }, - "name": { + "kind": { "type": "string" }, - "opening_hours": { + "limit": { + "type": "integer" + }, + "matches": { "items": { - "$ref": "#/definitions/gucci.StoreOpeningHours" + "$ref": "#/definitions/fussballde.MatchRow" }, "type": "array" }, - "phone": { - "type": "string" - }, - "postal_code": { - "type": "string" - }, - "region": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "street_address": { - "type": "string" + "offset": { + "type": "integer" }, - "url": { + "team_id": { "type": "string" } }, "type": "object" }, - "gucci.StoreOpeningHours": { + "fussballde.TeamPositions": { "properties": { - "closes": { - "type": "string" - }, - "days": { + "positions": { "items": { - "type": "string" + "type": "integer" }, "type": "array" }, - "opens": { - "type": "string" + "team": { + "$ref": "#/definitions/fussballde.TeamRef" } }, "type": "object" }, - "gucci.StoreSearchResponse": { + "fussballde.TeamRef": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { + "club_id": { + "example": "00ES8GN8N400008VVV0AG08LVUPGND5I", "type": "string" }, - "language": { + "logo_url": { "type": "string" }, - "market": { + "name": { + "example": "Borussia Dortmund", "type": "string" }, - "source_url": { + "team_id": { + "example": "011MI8V6UC000000VTVG0001VTR8C1K7", "type": "string" }, - "stores": { - "items": { - "$ref": "#/definitions/gucci.StoreSearchResult" - }, - "type": "array" + "url": { + "type": "string" } }, "type": "object" }, - "gucci.StoreSearchResult": { + "fussballde.TeamSquadResponse": { "properties": { - "active": { - "type": "boolean" - }, - "address": { - "type": "string" - }, - "categories": { + "columns": { "items": { "type": "string" }, "type": "array" }, - "city": { - "type": "string" - }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" - }, - "name": { - "type": "string" - }, - "number": { + "count": { "type": "integer" }, - "phone": { + "kind": { "type": "string" }, - "services": { + "players": { "items": { - "type": "string" + "$ref": "#/definitions/fussballde.SquadPlayer" }, "type": "array" }, - "type": { + "season": { + "type": "string" + }, + "team_id": { "type": "string" } }, "type": "object" }, - "gucci.StoresResponse": { + "fussballde.TeamTypeOption": { "properties": { - "count": { - "type": "integer" - }, - "country": { + "id": { + "example": "1", "type": "string" }, - "departments": { + "leagues": { "items": { - "type": "string" + "$ref": "#/definitions/fussballde.LeagueOption" }, "type": "array" }, - "fetched_at": { - "type": "string" - }, - "source_url": { + "name": { + "example": "Herren", "type": "string" - }, - "stores": { - "items": { - "$ref": "#/definitions/gucci.Store" - }, - "type": "array" } }, "type": "object" }, - "gucci.SuggestResponse": { + "fussballde.TopScorersResponse": { "properties": { - "fetched_at": { + "competition_id": { "type": "string" }, - "query": { - "type": "string" + "count": { + "type": "integer" }, - "source_url": { - "type": "string" + "final": { + "example": false, + "type": "boolean" }, - "suggestions": { + "limit": { + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "scorers": { "items": { - "$ref": "#/definitions/gucci.SuggestedQuery" + "$ref": "#/definitions/fussballde.ScorerRow" }, "type": "array" - } - }, - "type": "object" - }, - "gucci.SuggestedQuery": { - "properties": { - "query": { - "type": "string" }, - "result_count": { - "type": "integer" + "title": { + "type": "string" } }, "type": "object" }, - "gucci.categoriesResponseDoc": { + "fussballde.amateurStatsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/gucci.CategoriesResponse" + "$ref": "#/definitions/fussballde.AmateurStatsResponse" }, "msg": { "example": "OK", @@ -105006,14 +110964,14 @@ }, "type": "object" }, - "gucci.categoryResponseDoc": { + "fussballde.clubMatchesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/gucci.CategoryResponse" + "$ref": "#/definitions/fussballde.ClubMatchesResponse" }, "msg": { "example": "OK", @@ -105022,14 +110980,14 @@ }, "type": "object" }, - "gucci.productResponseDoc": { + "fussballde.clubResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/gucci.ProductDetailResponse" + "$ref": "#/definitions/fussballde.ClubDetail" }, "msg": { "example": "OK", @@ -105038,14 +110996,14 @@ }, "type": "object" }, - "gucci.recommendationsResponseDoc": { + "fussballde.clubSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/gucci.RecommendationsResponse" + "$ref": "#/definitions/fussballde.ClubSearchResponse" }, "msg": { "example": "OK", @@ -105054,14 +111012,14 @@ }, "type": "object" }, - "gucci.searchResponseDoc": { + "fussballde.competitionOptionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/gucci.SearchResponse" + "$ref": "#/definitions/fussballde.CompetitionOptionsResponse" }, "msg": { "example": "OK", @@ -105070,14 +111028,14 @@ }, "type": "object" }, - "gucci.sizeGuideResponseDoc": { + "fussballde.competitionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/gucci.SizeGuideResponse" + "$ref": "#/definitions/fussballde.CompetitionsResponse" }, "msg": { "example": "OK", @@ -105086,14 +111044,14 @@ }, "type": "object" }, - "gucci.storeResponseDoc": { + "fussballde.federationResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/gucci.StoreDetailResponse" + "$ref": "#/definitions/fussballde.FederationDetail" }, "msg": { "example": "OK", @@ -105102,14 +111060,14 @@ }, "type": "object" }, - "gucci.storeSearchResponseDoc": { + "fussballde.filtersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/gucci.StoreSearchResponse" + "$ref": "#/definitions/fussballde.FiltersResponse" }, "msg": { "example": "OK", @@ -105118,14 +111076,14 @@ }, "type": "object" }, - "gucci.storesResponseDoc": { + "fussballde.matchCalendarResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/gucci.StoresResponse" + "$ref": "#/definitions/fussballde.MatchCalendarResponse" }, "msg": { "example": "OK", @@ -105134,14 +111092,14 @@ }, "type": "object" }, - "gucci.suggestResponseDoc": { + "fussballde.matchComparisonResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/gucci.SuggestResponse" + "$ref": "#/definitions/fussballde.MatchComparisonResponse" }, "msg": { "example": "OK", @@ -105150,199 +111108,174 @@ }, "type": "object" }, - "gulfnews.AuthorArticle": { + "fussballde.matchPlanResponseDoc": { "properties": { - "summary": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/fussballde.MatchPlanResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "gulfnews.AuthorResponse": { + "fussballde.matchResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/gulfnews.AuthorArticle" - }, - "type": "array" - }, - "bio": { - "type": "string" - }, - "job_title": { - "type": "string" - }, - "name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "slug": { - "type": "string" + "data": { + "$ref": "#/definitions/fussballde.MatchDetail" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "hbr.ArticleResponse": { + "fussballde.matchdayResponseDoc": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "body": { - "type": "string" - }, - "description": { - "type": "string" - }, - "from_magazine": { - "type": "boolean" - }, - "image_url": { - "type": "string" - }, - "published_at": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/fussballde.MatchdayResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "hbr.CategoriesResponse": { + "fussballde.nationalTopScorersResponseDoc": { "properties": { - "groups": { - "items": { - "$ref": "#/definitions/hbr.CategoryGroup" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/fussballde.NationalTopScorersResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "hbr.Category": { + "fussballde.newsArticleResponseDoc": { "properties": { - "name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "slug": { + "data": { + "$ref": "#/definitions/fussballde.NewsArticle" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "hbr.CategoryGroup": { + "fussballde.newsResponseDoc": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/hbr.Category" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "name": { + "data": { + "$ref": "#/definitions/fussballde.NewsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "hbr.HeadlineItem": { + "fussballde.newsSearchResponseDoc": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "content_type": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "summary": { - "type": "string" - }, - "title": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "topic": { - "type": "string" + "data": { + "$ref": "#/definitions/fussballde.NewsSearchResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "hbr.HeadlinesResponse": { + "fussballde.playerMatchesResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/hbr.HeadlineItem" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/fussballde.PlayerMatchesResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "hbr.TopicItem": { + "fussballde.playerResponseDoc": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { - "type": "string" - }, - "from_magazine": { - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/fussballde.PlayerDetail" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "hbr.TopicResponse": { + "fussballde.playerSearchResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/hbr.TopicItem" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "topic": { + "data": { + "$ref": "#/definitions/fussballde.PlayerSearchResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "hbr.articleResponseDoc": { + "fussballde.positionHistoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hbr.ArticleResponse" + "$ref": "#/definitions/fussballde.PositionHistoryResponse" }, "msg": { "example": "OK", @@ -105351,14 +111284,14 @@ }, "type": "object" }, - "hbr.categoriesResponseDoc": { + "fussballde.postalCodesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hbr.CategoriesResponse" + "$ref": "#/definitions/fussballde.PostalCodesResponse" }, "msg": { "example": "OK", @@ -105367,14 +111300,14 @@ }, "type": "object" }, - "hbr.headlinesResponseDoc": { + "fussballde.tableResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hbr.HeadlinesResponse" + "$ref": "#/definitions/fussballde.TableResponse" }, "msg": { "example": "OK", @@ -105383,14 +111316,14 @@ }, "type": "object" }, - "hbr.topicResponseDoc": { + "fussballde.teamMatchesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hbr.TopicResponse" + "$ref": "#/definitions/fussballde.TeamMatchesResponse" }, "msg": { "example": "OK", @@ -105399,252 +111332,236 @@ }, "type": "object" }, - "healthgrades.AwardHospital": { + "fussballde.teamResponseDoc": { "properties": { - "address": { - "$ref": "#/definitions/healthgrades.FacilityAddress" - }, - "awards": { - "items": { - "$ref": "#/definitions/healthgrades.HospitalAwardEntry" - }, - "type": "array" - }, - "description": { - "type": "string" - }, - "distance_miles": { - "type": "number" - }, - "id": { - "type": "string" - }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" - }, - "name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "phone": { - "type": "string" + "data": { + "$ref": "#/definitions/fussballde.TeamDetail" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "healthgrades.CommunityAnswer": { + "fussballde.teamSquadResponseDoc": { "properties": { - "no": { + "code": { + "example": 200, "type": "integer" }, - "question": { - "type": "string" + "data": { + "$ref": "#/definitions/fussballde.TeamSquadResponse" }, - "yes": { - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "healthgrades.FacilityAddress": { + "fussballde.topScorersResponseDoc": { "properties": { - "city": { - "type": "string" - }, - "postal_code": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "state": { - "type": "string" + "data": { + "$ref": "#/definitions/fussballde.TopScorersResponse" }, - "street": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "healthgrades.FacilityFAQ": { + "futgg.PlayerSortCatalog": { "properties": { - "answer": { + "game": { "type": "string" }, - "question": { + "groups": { + "items": { + "$ref": "#/definitions/futgg.PlayerSortGroup" + }, + "type": "array" + }, + "platform": { "type": "string" } }, "type": "object" }, - "healthgrades.FacilityFiltersResponse": { + "futgg.PlayerSortChoice": { "properties": { - "filters": { - "items": { - "$ref": "#/definitions/healthgrades.PhysicianFilterGroup" - }, - "type": "array" - }, - "query": { + "ascending": { "type": "string" }, - "sorts": { - "items": { - "$ref": "#/definitions/healthgrades.PhysicianSortOption" - }, - "type": "array" - }, - "type": { + "descending": { "type": "string" }, - "where": { + "label": { "type": "string" } }, "type": "object" }, - "healthgrades.FacilityHours": { + "futgg.PlayerSortGroup": { "properties": { - "day": { + "label": { "type": "string" }, - "hours": { - "type": "string" + "values": { + "items": { + "$ref": "#/definitions/futgg.PlayerSortChoice" + }, + "type": "array" } }, "type": "object" }, - "healthgrades.FacilityLocation": { + "futgg.PlayerSortResponseDoc": { "properties": { - "address": { - "type": "string" - }, - "name": { - "type": "string" + "code": { + "type": "integer" }, - "phone": { - "type": "string" + "data": { + "$ref": "#/definitions/futgg.PlayerSortCatalog" }, - "url": { + "msg": { "type": "string" } }, "type": "object" }, - "healthgrades.FacilityProvider": { + "futgg.ResponseDoc": { "properties": { - "name": { - "type": "string" - }, - "rating": { - "type": "number" - }, - "rating_count": { + "code": { "type": "integer" }, - "specialty": { - "type": "string" + "data": { + "additionalProperties": true, + "type": "object" }, - "url": { + "msg": { "type": "string" } }, "type": "object" }, - "healthgrades.FacilityResponse": { + "gamerant.AuthorResponse": { "properties": { - "address": { - "$ref": "#/definitions/healthgrades.FacilityAddress" - }, - "categories": { + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "community_answers": { - "items": { - "$ref": "#/definitions/healthgrades.CommunityAnswer" - }, - "type": "array" + "biography": { + "type": "string" }, - "description": { + "image_url": { "type": "string" }, - "faqs": { + "name": { + "type": "string" + }, + "social_links": { "items": { - "$ref": "#/definitions/healthgrades.FacilityFAQ" + "$ref": "#/definitions/valnet.AuthorSocialLink" }, "type": "array" }, - "hours": { + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "gamesradar.AuthorResponse": { + "properties": { + "articles": { "items": { - "$ref": "#/definitions/healthgrades.FacilityHours" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "languages": { + "biography": { "items": { "type": "string" }, "type": "array" }, - "latitude": { - "type": "number" + "has_next_page": { + "type": "boolean" }, - "locations": { - "items": { - "$ref": "#/definitions/healthgrades.FacilityLocation" - }, - "type": "array" + "job_title": { + "type": "string" }, - "longitude": { - "type": "number" + "name": { + "type": "string" }, - "medical_services": { - "items": { - "type": "string" - }, - "type": "array" + "page": { + "type": "integer" }, - "name": { + "slug": { "type": "string" }, - "nearby": { + "social_links": { "items": { - "$ref": "#/definitions/healthgrades.NearbyFacility" + "$ref": "#/definitions/gamesradar.AuthorSocialLink" }, "type": "array" }, - "phone": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "gamesradar.AuthorSocialLink": { + "properties": { + "platform": { "type": "string" }, - "providers": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "gbnews.AuthorResponse": { + "properties": { + "articles": { "items": { - "$ref": "#/definitions/healthgrades.FacilityProvider" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "rating": { - "type": "number" - }, - "services": { + "biography": { "items": { "type": "string" }, "type": "array" }, - "subtitle": { + "image_url": { "type": "string" }, - "type": { - "enum": [ - "pharmacy", - "urgent_care", - "group_practice" - ], + "name": { + "type": "string" + }, + "role": { + "type": "string" + }, + "slug": { "type": "string" }, "url": { @@ -105653,1156 +111570,1051 @@ }, "type": "object" }, - "healthgrades.FacilityResult": { + "gdelt.Article": { "properties": { - "about": { + "domain": { + "example": "example.com", "type": "string" }, - "affiliated_provider_count": { - "type": "integer" + "language": { + "example": "English", + "type": "string" }, - "awards": { - "items": { - "type": "string" - }, - "type": "array" + "seen_at": { + "example": "2026-08-19T23:00:00Z", + "type": "string" }, - "city": { + "social_image_url": { + "example": "https://www.example.com/images/social.jpg", "type": "string" }, - "distance_miles": { - "type": "number" - }, - "five_star_ratings_count": { - "type": "integer" - }, - "id": { - "type": "string" - }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" - }, - "name": { - "type": "string" - }, - "phone": { - "type": "string" - }, - "postal_code": { - "type": "string" - }, - "ratings_count": { - "type": "integer" - }, - "state": { - "type": "string" - }, - "street": { - "type": "string" - }, - "type": { + "source_country": { + "example": "United States", "type": "string" }, - "type_code": { + "title": { + "example": "Climate report warns of rising sea levels", "type": "string" }, "url": { + "example": "https://www.example.com/news/climate-report", "type": "string" } }, "type": "object" }, - "healthgrades.FacilitySearchResponse": { + "gdelt.ContextArticle": { "properties": { - "facilities": { - "items": { - "$ref": "#/definitions/healthgrades.FacilityResult" - }, - "type": "array" - }, - "filters": { - "items": { - "$ref": "#/definitions/healthgrades.PhysicianFilterGroup" - }, - "type": "array" - }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "query": { + "context": { + "example": "The report, released Tuesday, warns that coastal cities face rising seas driven by accelerating climate change. Officials called for immediate action.", "type": "string" }, - "sort": { + "domain": { + "example": "example.com", "type": "string" }, - "sorts": { - "items": { - "$ref": "#/definitions/healthgrades.PhysicianSortOption" - }, - "type": "array" - }, - "total_pages": { - "type": "integer" - }, - "total_results": { - "type": "integer" + "is_quote": { + "example": false, + "type": "boolean" }, - "type": { + "language": { + "example": "ENGLISH", "type": "string" }, - "where": { + "seen_at": { + "example": "2026-08-19T23:00:00Z", "type": "string" - } - }, - "type": "object" - }, - "healthgrades.HealthArticleRef": { - "properties": { - "last_modified": { + }, + "sentence": { + "example": "Coastal cities face rising seas driven by accelerating climate change.", "type": "string" }, - "slug": { + "social_image_url": { + "example": "https://www.example.com/images/social.jpg", "type": "string" }, - "topic": { + "title": { + "example": "Climate report warns of rising sea levels", "type": "string" }, "url": { + "example": "https://www.example.com/news/climate-report", "type": "string" } }, "type": "object" }, - "healthgrades.HealthArticleResponse": { + "gdelt.ContextResponse": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "conditions": { + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/gdelt.ContextArticle" }, "type": "array" }, - "date_modified": { - "type": "string" - }, - "date_published": { - "type": "string" - }, - "description": { - "type": "string" - }, - "headline": { - "type": "string" - }, - "image_url": { - "type": "string" + "count": { + "example": 8, + "type": "integer" }, - "label": { + "fetched_at": { + "example": "2026-08-20T10:00:00Z", "type": "string" }, - "reviewed_by": { - "items": { - "type": "string" - }, - "type": "array" - }, - "sections": { - "items": { - "$ref": "#/definitions/healthgrades.HealthArticleSection" - }, - "type": "array" - }, - "slug": { - "type": "string" + "maxrecords": { + "example": 75, + "type": "integer" }, - "topic": { + "query": { + "example": "climate change", "type": "string" }, - "url": { + "sort": { + "example": "relevance", "type": "string" - } - }, - "type": "object" - }, - "healthgrades.HealthArticleSection": { - "properties": { - "lists": { - "items": { - "items": { - "type": "string" - }, - "type": "array" - }, - "type": "array" - }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" }, - "title": { + "source_url": { + "example": "https://api.gdeltproject.org/api/v2/context/context?format=json&maxrecords=75&mode=artlist&query=climate+change×pan=24h", "type": "string" } }, "type": "object" }, - "healthgrades.HealthArticlesResponse": { + "gdelt.SearchResponse": { "properties": { "articles": { "items": { - "$ref": "#/definitions/healthgrades.HealthArticleRef" + "$ref": "#/definitions/gdelt.Article" }, "type": "array" }, - "page": { - "type": "integer" - }, - "page_size": { + "count": { + "example": 12, "type": "integer" }, - "topic": { + "fetched_at": { + "example": "2026-08-20T10:00:00Z", "type": "string" }, - "total": { - "type": "integer" - }, - "total_pages": { - "type": "integer" - } - }, - "type": "object" - }, - "healthgrades.HealthTopic": { - "properties": { - "article_count": { + "maxrecords": { + "example": 75, "type": "integer" }, - "last_modified": { + "query": { + "example": "climate change", "type": "string" }, - "slug": { + "sort": { + "example": "relevance", "type": "string" }, - "url": { + "source_url": { + "example": "https://api.gdeltproject.org/api/v2/doc/doc?format=json&maxrecords=75&mode=artlist&query=climate+change", "type": "string" } }, "type": "object" }, - "healthgrades.HealthTopicsResponse": { + "gdelt.TVCapNlpEntityDetailsResponse": { "properties": { - "topics": { + "entities": { "items": { - "$ref": "#/definitions/healthgrades.HealthTopic" + "$ref": "#/definitions/gdelt.TVConceptEntity" }, "type": "array" }, - "total": { - "type": "integer" + "fetched_at": { + "example": "2026-08-20T10:00:00Z", + "type": "string" + }, + "source_url": { + "example": "https://api.gdeltproject.org/api/v2/tvai/tvai?format=json&mode=capnlpentitydetails&maxrecords=100", + "type": "string" } }, "type": "object" }, - "healthgrades.HospitalAward": { + "gdelt.TVClip": { "properties": { - "category": { + "caption": { + "example": "climate", "type": "string" }, - "description": { + "caption_concepts": { + "example": "/M/0d063v", "type": "string" }, - "name": { + "clip_url": { + "example": "https://archive.org/details/CNNW_20190503_160000_Inside_Politics/start/3656", "type": "string" }, - "years": { - "items": { - "type": "integer" - }, - "type": "array" - } - }, - "type": "object" - }, - "healthgrades.HospitalAwardEntry": { - "properties": { - "code": { + "matched_at": { + "example": "2019-05-03T17:00:56Z", "type": "string" }, - "matched": { - "type": "boolean" + "onscreen_text": { + "example": "BREAKING NEWS: SEA LEVELS RISING", + "type": "string" }, - "name": { + "show": { + "example": "Inside Politics", "type": "string" }, - "years": { - "items": { - "type": "integer" - }, - "type": "array" - } - }, - "type": "object" - }, - "healthgrades.HospitalAwardFiltersResponse": { - "properties": { - "award": { + "show_start_at": { + "example": "2019-05-03T16:00:00Z", "type": "string" }, - "filters": { - "items": { - "$ref": "#/definitions/healthgrades.PhysicianFilterGroup" - }, - "type": "array" + "station": { + "example": "cnn", + "type": "string" }, - "sorts": { + "thumbnail_url": { + "example": "http://data.gdeltproject.org/televisionexplorer/thumbnails/CNNW_20190503_160000_Inside_Politics-003656.jpg", + "type": "string" + }, + "transcript": { + "example": "climate change the", + "type": "string" + }, + "visual_entities": { + "example": [ + "person", + "news", + "weather" + ], "items": { - "$ref": "#/definitions/healthgrades.PhysicianSortOption" + "type": "string" }, "type": "array" } }, "type": "object" }, - "healthgrades.HospitalAwardsResponse": { + "gdelt.TVClipSearchResponse": { "properties": { - "award": { - "enum": [ - "americas-best-hospitals", - "specialty-excellence-americas-best-care", - "patient-safety-excellence-award", - "outstanding-patient-experience-award", - "ob-gyn-care-excellence-awards", - "state-rankings" - ], - "type": "string" - }, - "city": { - "type": "string" - }, - "hospitals": { + "clips": { "items": { - "$ref": "#/definitions/healthgrades.AwardHospital" + "$ref": "#/definitions/gdelt.TVClip" }, "type": "array" }, - "page": { - "type": "integer" - }, - "page_size": { + "count": { + "example": 3, "type": "integer" }, - "region": { - "type": "string" - }, - "sort": { - "enum": [ - "name", - "distance" - ], - "type": "string" - }, - "title": { + "fetched_at": { + "example": "2026-08-20T10:00:00Z", "type": "string" }, - "total": { - "type": "integer" - }, - "total_pages": { + "maxrecords": { + "example": 50, "type": "integer" }, - "year": { - "type": "string" - } - }, - "type": "object" - }, - "healthgrades.HospitalClinicalRating": { - "properties": { - "measure": { + "query": { + "example": "cap:\"climate change\" station:CNN", "type": "string" }, - "procedure_or_condition": { + "sort": { + "example": "relevance", "type": "string" }, - "rating": { - "description": "Rating is Healthgrades' outcome label, for example \"Better than\nExpected\", \"As Expected\", or \"Worse than Expected\" (returned as data).", + "source_url": { + "example": "https://api.gdeltproject.org/api/v2/tvai/tvai?format=json&maxrecords=50&mode=clipgallery&query=cap%3A%22climate+change%22+station%3ACNN", "type": "string" }, - "stars": { - "type": "integer" - }, - "type": { - "description": "Type is the rating family, for example \"Complication Based Ratings\" or\n\"Mortality Based Ratings\" (observed; returned as data).", + "station": { + "example": "CNN", "type": "string" } }, "type": "object" }, - "healthgrades.HospitalPatientExperience": { + "gdelt.TVConceptEntity": { "properties": { - "comparison": { + "label": { + "example": "DONALD TRUMP", "type": "string" }, - "measure": { + "mid": { + "example": "/m/0cqt90", "type": "string" - }, - "percent": { - "type": "integer" } }, "type": "object" }, - "healthgrades.HospitalResponse": { + "gdelt.TVShowChartResponse": { "properties": { - "address": { - "type": "string" - }, - "awards": { - "items": { - "$ref": "#/definitions/healthgrades.HospitalAward" - }, - "type": "array" - }, - "clinical_ratings": { - "items": { - "$ref": "#/definitions/healthgrades.HospitalServiceLine" - }, - "type": "array" - }, - "description": { + "fetched_at": { + "example": "2026-08-20T10:00:00Z", "type": "string" }, - "name": { + "query": { + "example": "cap:\"trump\" station:CNN", "type": "string" }, - "patient_experience": { + "shows": { "items": { - "$ref": "#/definitions/healthgrades.HospitalPatientExperience" + "$ref": "#/definitions/gdelt.TVShowCount" }, "type": "array" }, - "phone": { - "type": "string" - }, - "url": { + "source_url": { + "example": "https://api.gdeltproject.org/api/v2/tvai/tvai?format=json&mode=showchart&query=cap%3A%22trump%22+station%3ACNN", "type": "string" } }, "type": "object" }, - "healthgrades.HospitalServiceLine": { + "gdelt.TVShowCount": { "properties": { - "name": { - "type": "string" + "count": { + "example": 7.8383, + "type": "number" }, - "ratings": { - "items": { - "$ref": "#/definitions/healthgrades.HospitalClinicalRating" - }, - "type": "array" + "show": { + "example": "Anderson Cooper 360", + "type": "string" } }, "type": "object" }, - "healthgrades.NearbyFacility": { + "gdelt.TVStation": { "properties": { - "address": { - "type": "string" - }, - "name": { + "id": { + "example": "CNN", "type": "string" }, - "status": { + "label": { + "example": "CNN", "type": "string" }, - "url": { + "label_long": { + "example": "CNN (1/1/2020 - Now)", "type": "string" } }, "type": "object" }, - "healthgrades.PhysicianFilterGroup": { + "gdelt.TVStationChartResponse": { "properties": { - "label": { + "fetched_at": { + "example": "2026-08-20T10:00:00Z", "type": "string" }, - "param": { + "query": { + "example": "cap:\"trump\" (station:CNN OR station:MSNBC)", "type": "string" }, - "values": { + "source_url": { + "example": "https://api.gdeltproject.org/api/v2/tvai/tvai?format=json&mode=stationchart&query=cap%3A%22trump%22+%28station%3ACNN+OR+station%3AMSNBC%29", + "type": "string" + }, + "stations": { "items": { - "$ref": "#/definitions/healthgrades.PhysicianFilterValue" + "$ref": "#/definitions/gdelt.TVStationCount" }, "type": "array" } }, "type": "object" }, - "healthgrades.PhysicianFilterPlan": { + "gdelt.TVStationCount": { "properties": { - "id": { - "type": "string" + "count": { + "example": 877267, + "type": "integer" }, - "name": { + "station": { + "example": "CNN", "type": "string" } }, "type": "object" }, - "healthgrades.PhysicianFilterValue": { + "gdelt.TVStationDetailsResponse": { "properties": { - "count": { - "type": "integer" + "fetched_at": { + "example": "2026-08-20T10:00:00Z", + "type": "string" }, - "label": { + "source_url": { + "example": "https://api.gdeltproject.org/api/v2/tvai/tvai?format=json&mode=stationdetails", "type": "string" }, - "plans": { + "stations": { "items": { - "$ref": "#/definitions/healthgrades.PhysicianFilterPlan" + "$ref": "#/definitions/gdelt.TVStation" }, "type": "array" - }, - "selected": { - "type": "boolean" - }, - "value": { - "type": "string" } }, "type": "object" }, - "healthgrades.PhysicianFiltersResponse": { + "gdelt.TVTimelineResponse": { "properties": { - "filters": { + "fetched_at": { + "example": "2026-08-20T10:00:00Z", + "type": "string" + }, + "query": { + "example": "cap:\"climate change\" station:CNN", + "type": "string" + }, + "series": { "items": { - "$ref": "#/definitions/healthgrades.PhysicianFilterGroup" + "$ref": "#/definitions/gdelt.TimelineSeries" }, "type": "array" }, - "query": { + "source_url": { + "example": "https://api.gdeltproject.org/api/v2/tvai/tvai?format=json&mode=timelinevol&query=cap%3A%22climate+change%22+station%3ACNN", "type": "string" }, - "where": { + "station": { + "example": "CNN", "type": "string" } }, "type": "object" }, - "healthgrades.PhysicianOffice": { + "gdelt.TVVisualEntity": { "properties": { - "city": { - "type": "string" - }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" - }, - "name": { - "type": "string" - }, - "phone": { - "type": "string" - }, - "postal_code": { - "type": "string" - }, - "state": { - "type": "string" - }, - "street": { + "label": { + "example": "person", "type": "string" } }, "type": "object" }, - "healthgrades.PhysicianPractice": { + "gdelt.TVVisualEntityDetailsResponse": { "properties": { - "city": { - "type": "string" - }, - "country": { - "type": "string" - }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" - }, - "name": { - "type": "string" - }, - "postal_code": { - "type": "string" + "entities": { + "items": { + "$ref": "#/definitions/gdelt.TVVisualEntity" + }, + "type": "array" }, - "region": { + "fetched_at": { + "example": "2026-08-20T10:00:00Z", "type": "string" }, - "street": { + "source_url": { + "example": "https://api.gdeltproject.org/api/v2/tvai/tvai?format=json&mode=visualentitydetails&maxrecords=100", "type": "string" } }, "type": "object" }, - "healthgrades.PhysicianRating": { + "gdelt.TVWordCloudEntry": { "properties": { "count": { - "type": "integer" - }, - "score": { + "example": 100, "type": "number" + }, + "label": { + "example": "Trump", + "type": "string" } }, "type": "object" }, - "healthgrades.PhysicianResponse": { + "gdelt.TVWordCloudResponse": { "properties": { - "awards": { - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { + "channel": { + "example": "caption", "type": "string" }, - "name": { + "fetched_at": { + "example": "2026-08-20T10:00:00Z", "type": "string" }, - "npi": { + "query": { + "example": "cap:\"trump\" station:CNN", "type": "string" }, - "practices": { - "items": { - "$ref": "#/definitions/healthgrades.PhysicianPractice" - }, - "type": "array" - }, - "profile_url": { + "source_url": { + "example": "https://api.gdeltproject.org/api/v2/tvai/tvai?format=json&mode=wordcloudcap&query=cap%3A%22trump%22+station%3ACNN", "type": "string" }, - "specialties": { + "words": { "items": { - "type": "string" + "$ref": "#/definitions/gdelt.TVWordCloudEntry" }, "type": "array" } }, "type": "object" }, - "healthgrades.PhysicianSearchResponse": { + "gdelt.TimelinePoint": { "properties": { - "filters": { - "items": { - "$ref": "#/definitions/healthgrades.PhysicianFilterGroup" - }, - "type": "array" - }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "physicians": { - "items": { - "$ref": "#/definitions/healthgrades.PhysicianSearchResult" - }, - "type": "array" - }, - "query": { - "type": "string" - }, - "sort": { + "date": { + "example": "2026-08-19T00:00:00Z", "type": "string" }, - "sorts": { - "items": { - "$ref": "#/definitions/healthgrades.PhysicianSortOption" - }, - "type": "array" - }, - "total_pages": { - "type": "integer" - }, - "total_results": { - "type": "integer" - }, - "where": { - "type": "string" + "value": { + "example": 1.42, + "type": "number" } }, "type": "object" }, - "healthgrades.PhysicianSearchResult": { + "gdelt.TimelineResponse": { "properties": { - "about": { - "type": "string" - }, - "accepts_new_patients": { - "type": "boolean" - }, - "affiliated_hospital_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "age": { - "type": "integer" - }, - "distance_miles": { - "type": "number" - }, - "gender": { - "type": "string" - }, - "id": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "insurers": { - "items": { - "type": "string" - }, - "type": "array" - }, - "name": { + "fetched_at": { + "example": "2026-08-20T10:00:00Z", "type": "string" }, - "npi": { + "metric": { + "example": "volume", "type": "string" }, - "office": { - "$ref": "#/definitions/healthgrades.PhysicianOffice" - }, - "profile_url": { + "query": { + "example": "climate change", "type": "string" }, - "rating": { - "$ref": "#/definitions/healthgrades.PhysicianRating" - }, - "specialist_descriptions": { + "series": { "items": { - "type": "string" + "$ref": "#/definitions/gdelt.TimelineSeries" }, "type": "array" }, - "specialty": { - "type": "string" - }, - "telehealth_available": { - "type": "boolean" - }, - "telehealth_only": { - "type": "boolean" - }, - "years_experience": { - "type": "integer" - } - }, - "type": "object" - }, - "healthgrades.PhysicianSortOption": { - "properties": { - "key": { - "type": "string" - }, - "label": { + "source_url": { + "example": "https://api.gdeltproject.org/api/v2/doc/doc?format=json&mode=timelinevol&query=climate+change", "type": "string" } }, "type": "object" }, - "healthgrades.SpecialtiesResponse": { + "gdelt.TimelineSeries": { "properties": { - "specialties": { + "points": { "items": { - "$ref": "#/definitions/healthgrades.Specialty" + "$ref": "#/definitions/gdelt.TimelinePoint" }, "type": "array" - } - }, - "type": "object" - }, - "healthgrades.Specialty": { - "properties": { - "name": { - "type": "string" }, - "url": { + "series": { + "example": "climate change", "type": "string" } }, "type": "object" }, - "healthgrades.Suggestion": { + "gdelt.ToneChartArticle": { "properties": { - "label": { + "title": { + "example": "Climate report warns of rising sea levels", "type": "string" }, - "value": { + "url": { + "example": "https://www.example.com/news/climate-report", "type": "string" } }, "type": "object" }, - "healthgrades.SuggestionGroup": { + "gdelt.ToneChartBin": { "properties": { - "category": { - "type": "string" + "bin": { + "example": -5, + "type": "integer" }, - "suggestions": { + "count": { + "example": 12, + "type": "integer" + }, + "top_articles": { "items": { - "$ref": "#/definitions/healthgrades.Suggestion" + "$ref": "#/definitions/gdelt.ToneChartArticle" }, "type": "array" - }, - "title": { - "type": "string" } }, "type": "object" }, - "healthgrades.SuggestionResponse": { + "gdelt.ToneChartResponse": { "properties": { - "groups": { + "bins": { "items": { - "$ref": "#/definitions/healthgrades.SuggestionGroup" + "$ref": "#/definitions/gdelt.ToneChartBin" }, "type": "array" + }, + "fetched_at": { + "example": "2026-08-20T10:00:00Z", + "type": "string" + }, + "query": { + "example": "climate change", + "type": "string" + }, + "source_url": { + "example": "https://api.gdeltproject.org/api/v2/doc/doc?format=json&mode=tonechart&query=climate+change", + "type": "string" } }, "type": "object" }, - "healthgrades.facilityFiltersResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/healthgrades.FacilityFiltersResponse" - } - }, - "type": "object" - }, - "healthgrades.facilityResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/healthgrades.FacilityResponse" - } - }, - "type": "object" - }, - "healthgrades.facilitySearchResponseDoc": { + "gdelt.contextResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/healthgrades.FacilitySearchResponse" + "$ref": "#/definitions/gdelt.ContextResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "healthgrades.healthArticleResponseDoc": { + "gdelt.searchResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/healthgrades.HealthArticleResponse" + "$ref": "#/definitions/gdelt.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "healthgrades.healthArticlesResponseDoc": { + "gdelt.timelineResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/healthgrades.HealthArticlesResponse" + "$ref": "#/definitions/gdelt.TimelineResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "healthgrades.healthTopicsResponseDoc": { + "gdelt.toneChartResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/healthgrades.HealthTopicsResponse" + "$ref": "#/definitions/gdelt.ToneChartResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "healthgrades.hospitalAwardFiltersResponseDoc": { + "gdelt.tvCapNlpEntityDetailsResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/healthgrades.HospitalAwardFiltersResponse" + "$ref": "#/definitions/gdelt.TVCapNlpEntityDetailsResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "healthgrades.hospitalAwardsResponseDoc": { + "gdelt.tvSearchResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/healthgrades.HospitalAwardsResponse" + "$ref": "#/definitions/gdelt.TVClipSearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "healthgrades.hospitalResponseDoc": { + "gdelt.tvShowChartResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/healthgrades.HospitalResponse" + "$ref": "#/definitions/gdelt.TVShowChartResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "healthgrades.physicianFiltersResponseDoc": { + "gdelt.tvStationChartResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/healthgrades.PhysicianFiltersResponse" + "$ref": "#/definitions/gdelt.TVStationChartResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "healthgrades.physicianResponseDoc": { + "gdelt.tvStationDetailsResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/healthgrades.PhysicianResponse" + "$ref": "#/definitions/gdelt.TVStationDetailsResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "healthgrades.physicianSearchResponseDoc": { + "gdelt.tvTimelineResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/healthgrades.PhysicianSearchResponse" + "$ref": "#/definitions/gdelt.TVTimelineResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "healthgrades.specialtiesResponseDoc": { + "gdelt.tvVisualEntityDetailsResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/healthgrades.SpecialtiesResponse" + "$ref": "#/definitions/gdelt.TVVisualEntityDetailsResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "healthgrades.suggestionsResponseDoc": { + "gdelt.tvWordCloudResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/healthgrades.SuggestionResponse" + "$ref": "#/definitions/gdelt.TVWordCloudResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "hermes.CatalogueProduct": { + "geocoding.Address": { "properties": { - "last_modified": { + "ISO3166-2-lvl4": { + "description": "ISO 3166-2 code for the state or region level, such as `US-NY`.", + "example": "US-NY", "type": "string" }, - "product_id": { - "description": "ProductID is the identifier Hermès uses in the product URL. It is NOT\nthe same string as the sku returned by hermes-category/hermes-search --\nsee the type doc on ProductsResponse.", + "ISO3166-2-lvl6": { + "description": "ISO 3166-2 code for the level-6 administrative area, when one exists.", "type": "string" }, - "slug": { + "city": { + "description": "City of the place.", + "example": "New York", "type": "string" }, - "url": { + "country": { + "description": "Country name of the place.", + "example": "United States", "type": "string" - } - }, - "type": "object" - }, - "hermes.CategoriesResponse": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/hermes.Category" - }, - "type": "array" }, - "locale": { + "country_code": { + "description": "Two-letter country code of the place in lowercase, such as `us`.", + "example": "us", "type": "string" }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "hermes.Category": { - "properties": { - "children": { - "type": "integer" + "county": { + "description": "County of the place.", + "example": "New York County", + "type": "string" }, - "code": { + "house_number": { + "description": "House number of the place.", + "example": "350", "type": "string" }, - "depth": { - "type": "integer" + "neighbourhood": { + "description": "Neighbourhood of the place.", + "example": "Koreatown", + "type": "string" }, - "name": { + "office": { + "description": "Office name of the place, such as `Empire State Building`.", + "example": "Empire State Building", "type": "string" }, - "parent_code": { + "postcode": { + "description": "Postal code of the place.", + "example": "10118", "type": "string" }, - "path": { + "road": { + "description": "Street name of the place.", + "example": "5th Avenue", "type": "string" }, - "url": { + "state": { + "description": "State or region of the place.", + "example": "New York", + "type": "string" + }, + "state_district": { + "description": "State district of the place.", + "type": "string" + }, + "suburb": { + "description": "Suburb or borough of the place.", + "example": "Manhattan", + "type": "string" + }, + "town": { + "description": "Town of the place.", + "type": "string" + }, + "village": { + "description": "Village of the place.", "type": "string" } }, "type": "object" }, - "hermes.CategoryResponse": { + "geocoding.LookupResponse": { "properties": { - "code": { + "query": { + "example": "W34633854,N123", "type": "string" }, - "description": { + "results": { + "items": { + "$ref": "#/definitions/geocoding.Place" + }, + "type": "array" + } + }, + "type": "object" + }, + "geocoding.Place": { + "properties": { + "address": { + "allOf": [ + { + "$ref": "#/definitions/geocoding.Address" + } + ], + "description": "Structured address breakdown of the place." + }, + "addresstype": { + "description": "Type of address the place represents, such as `office`.", + "example": "office", "type": "string" }, - "filters": { + "boundingbox": { + "description": "Bounding box of the place as four decimal-degree strings: south latitude, north latitude, west longitude, east longitude.", + "example": [ + "40.7479255", + "40.7489585", + "-73.9865012", + "-73.9848166" + ], "items": { - "$ref": "#/definitions/hermes.Filter" + "type": "string" }, "type": "array" }, - "locale": { + "category": { + "description": "OpenStreetMap category of the place, such as `office`.", + "example": "office", "type": "string" }, - "name": { + "display_name": { + "description": "Full address of the place as a comma-separated string.", + "example": "Empire State Building, 350, 5th Avenue, New York, United States", "type": "string" }, - "page": { - "type": "integer" + "extratags": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional OpenStreetMap tags of the place. Present only when `extratags` is requested.", + "type": "object" }, - "page_size": { - "type": "integer" + "importance": { + "description": "Importance score of the place; higher values mean a more prominent place.", + "example": 0.5803438355141769, + "type": "number" }, - "path": { + "lat": { + "description": "Latitude of the place in decimal degrees, as a string.", + "example": "40.7484421", "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/hermes.Product" - }, - "type": "array" + "licence": { + "description": "Licence notice for the OpenStreetMap data.", + "example": "Data © OpenStreetMap contributors, ODbL 1.0. http://osm.org/copyright", + "type": "string" }, - "sort": { + "lon": { + "description": "Longitude of the place in decimal degrees, as a string.", + "example": "-73.9856589", "type": "string" }, - "title": { + "name": { + "description": "Name of the place.", + "example": "Empire State Building", "type": "string" }, - "total": { + "namedetails": { + "additionalProperties": { + "type": "string" + }, + "description": "Alternative names of the place. Present only when `namedetails` is requested.", + "type": "object" + }, + "osm_id": { + "description": "OpenStreetMap id of the object.", + "example": 34633854, "type": "integer" }, - "url": { + "osm_type": { + "description": "OpenStreetMap object type, such as `way`.", + "example": "way", + "type": "string" + }, + "place_id": { + "description": "Numeric id of the place in the geocoding results.", + "example": 358220252, + "type": "integer" + }, + "place_rank": { + "description": "Address rank of the place; for example `30` for a building.", + "example": 30, + "type": "integer" + }, + "type": { + "description": "OpenStreetMap type of the place within its `category`, such as `yes`.", + "example": "yes", "type": "string" } }, "type": "object" }, - "hermes.Filter": { + "geocoding.SearchResponse": { "properties": { - "attribute": { - "type": "string" - }, - "name": { + "query": { + "description": "Query that was run. For a structured search, the address fields joined with commas.", + "example": "Empire State Building", "type": "string" }, - "values": { + "results": { + "description": "Places matching the query.", "items": { - "$ref": "#/definitions/hermes.FilterValue" + "$ref": "#/definitions/geocoding.Place" }, "type": "array" } }, "type": "object" }, - "hermes.FilterValue": { + "geocoding.lookupResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/geocoding.LookupResponse" }, - "value": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "hermes.Product": { + "geocoding.reverseResponseDoc": { "properties": { - "color": { - "type": "string" - }, - "colorless": { - "type": "boolean" - }, - "currency": { - "type": "string" - }, - "department_code": { - "type": "string" - }, - "division_code": { - "type": "string" - }, - "family_code": { - "type": "string" - }, - "images": { - "items": { - "type": "string" - }, - "type": "array" - }, - "in_stock": { - "type": "boolean" - }, - "in_store": { - "type": "boolean" - }, - "more_colors": { - "type": "boolean" - }, - "personalizable": { - "type": "boolean" - }, - "price": { - "type": "number" - }, - "price_type": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "product_code": { - "type": "string" + "data": { + "$ref": "#/definitions/geocoding.Place" }, - "size": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "geocoding.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "sku": { - "type": "string" + "data": { + "$ref": "#/definitions/geocoding.SearchResponse" }, - "slug": { + "msg": { + "example": "OK", "type": "string" - }, - "title": { + } + }, + "type": "object" + }, + "ghanaweb.ArchiveItem": { + "properties": { + "updated_at": { "type": "string" }, "url": { @@ -106811,252 +112623,247 @@ }, "type": "object" }, - "hermes.ProductResponse": { + "ghanaweb.ArchiveMonth": { "properties": { - "care_instructions": { - "description": "CareInstructions, Gift and DeliveryReturns are Hermès' own HTML\nfragments, returned verbatim because their markup carries links and\nstructure that flattening to text would lose.", + "month": { "type": "string" }, - "categories": { + "updated_at": { + "type": "string" + } + }, + "type": "object" + }, + "ghanaweb.ArchiveMonthsResponse": { + "properties": { + "months": { "items": { - "type": "string" + "$ref": "#/definitions/ghanaweb.ArchiveMonth" }, "type": "array" - }, - "color_name": { - "type": "string" - }, - "colors": { + } + }, + "type": "object" + }, + "ghanaweb.ArchiveResponse": { + "properties": { + "items": { "items": { - "type": "string" + "$ref": "#/definitions/ghanaweb.ArchiveItem" }, "type": "array" }, - "currency": { - "type": "string" - }, - "delivery_and_returns": { - "type": "string" + "limit": { + "type": "integer" }, - "department_code": { + "month": { "type": "string" }, - "description": { - "type": "string" + "page": { + "type": "integer" }, - "dimensions": { + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "ghanaweb.VideoItem": { + "properties": { + "id": { "type": "string" }, - "division_code": { + "image_url": { "type": "string" }, - "family_code": { + "published_at": { "type": "string" }, - "gender": { - "items": { - "type": "string" - }, - "type": "array" - }, - "gift": { + "title": { "type": "string" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" - }, - "in_stock": { - "type": "boolean" - }, - "in_store": { - "type": "boolean" - }, - "locale": { + "url": { "type": "string" }, - "made_in": { + "views": { "type": "string" - }, - "materials": { - "items": { - "type": "string" - }, - "type": "array" - }, - "personalizable": { - "type": "boolean" - }, - "price": { - "type": "number" - }, - "price_type": { + } + }, + "type": "object" + }, + "ghanaweb.VideoResponse": { + "properties": { + "embed_url": { "type": "string" }, - "product_code": { + "id": { "type": "string" }, - "size": { + "image_url": { "type": "string" }, - "sku": { + "published_at": { "type": "string" }, - "slug": { + "title": { "type": "string" }, - "title": { + "updated_at": { "type": "string" }, "url": { "type": "string" - }, - "variants": { - "$ref": "#/definitions/hermes.Variants" } }, "type": "object" }, - "hermes.ProductsResponse": { + "ghanaweb.VideoSection": { "properties": { - "limit": { - "type": "integer" - }, - "locale": { + "name": { "type": "string" }, - "page": { - "type": "integer" + "slug": { + "type": "string" }, - "products": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "ghanaweb.VideoSectionsResponse": { + "properties": { + "sections": { "items": { - "$ref": "#/definitions/hermes.CatalogueProduct" + "$ref": "#/definitions/ghanaweb.VideoSection" }, "type": "array" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "hermes.RecommendationsResponse": { + "ghanaweb.VideosResponse": { "properties": { - "locale": { - "type": "string" - }, - "shelves": { + "items": { "items": { - "$ref": "#/definitions/hermes.Shelf" + "$ref": "#/definitions/ghanaweb.VideoItem" }, "type": "array" }, - "sku": { + "section": { "type": "string" } }, "type": "object" }, - "hermes.SearchResponse": { + "gizmodo.AuthorResponse": { "properties": { - "filters": { + "articles": { "items": { - "$ref": "#/definitions/hermes.Filter" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "locale": { + "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "image_url": { "type": "string" }, - "page": { - "type": "integer" + "name": { + "type": "string" }, - "page_size": { - "type": "integer" + "role": { + "type": "string" }, - "products": { + "social_links": { "items": { - "$ref": "#/definitions/hermes.Product" + "$ref": "#/definitions/gizmodo.AuthorSocialLink" }, "type": "array" }, - "query": { - "type": "string" - }, - "results_for": { - "description": "ResultsFor is the term Hermès actually searched for, which can differ\nfrom query when it applies its own spelling correction. Empty when\nupstream reports no correction.", + "url": { "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "hermes.Shelf": { + "gizmodo.AuthorSocialLink": { "properties": { - "name": { + "type": { "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/hermes.Product" - }, - "type": "array" - }, - "total": { - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "hermes.Store": { + "globalnews.AuthorResponse": { "properties": { - "appointment_in_store": { - "type": "boolean" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "city": { - "type": "string" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "continent": { + "image_url": { "type": "string" }, - "country": { + "name": { "type": "string" }, - "country_code": { + "title": { "type": "string" }, - "id": { + "url": { "type": "string" - }, - "images": { + } + }, + "type": "object" + }, + "globeandmail.ArticleResponse": { + "properties": { + "authors": { "items": { "type": "string" }, "type": "array" }, - "latitude": { - "type": "number" + "dateline": { + "type": "string" }, - "longitude": { - "type": "number" + "description": { + "type": "string" }, - "name": { + "image_url": { "type": "string" }, - "opening_hours": { + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "published_at": { "type": "string" }, - "phone": { + "section": { "type": "string" }, - "postal_code": { + "title": { "type": "string" }, - "street": { + "updated_at": { "type": "string" }, "url": { @@ -107065,70 +112872,40 @@ }, "type": "object" }, - "hermes.StoresResponse": { + "globeandmail.AuthorResponse": { "properties": { - "locale": { - "type": "string" - }, - "stores": { + "articles": { "items": { - "$ref": "#/definitions/hermes.Store" + "$ref": "#/definitions/globeandmail.HeadlineItem" }, "type": "array" }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "hermes.SuggestResponse": { - "properties": { - "categories": { + "biography": { "items": { - "$ref": "#/definitions/hermes.SuggestedCategory" + "type": "string" }, "type": "array" }, - "locale": { + "email": { "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/hermes.SuggestedProduct" - }, - "type": "array" - }, - "query": { - "type": "string" - } - }, - "type": "object" - }, - "hermes.SuggestedCategory": { - "properties": { - "code": { + "image_url": { "type": "string" }, - "label": { + "job_title": { "type": "string" }, - "results": { - "type": "integer" - } - }, - "type": "object" - }, - "hermes.SuggestedProduct": { - "properties": { - "image": { + "location": { "type": "string" }, - "label": { + "name": { "type": "string" }, - "sku": { - "type": "string" + "social_links": { + "items": { + "type": "string" + }, + "type": "array" }, "url": { "type": "string" @@ -107136,1364 +112913,1682 @@ }, "type": "object" }, - "hermes.Variant": { + "globeandmail.HeadlineItem": { "properties": { - "color": { + "author": { "type": "string" }, - "image": { + "image_url": { "type": "string" }, - "in_stock": { - "type": "boolean" - }, - "price": { - "type": "number" - }, - "size": { + "published_at": { "type": "string" }, - "sku": { + "summary": { "type": "string" }, "title": { "type": "string" }, + "type": { + "type": "string" + }, "url": { "type": "string" } }, "type": "object" }, - "hermes.Variants": { + "globeandmail.HeadlinesResponse": { "properties": { - "colors": { + "items": { "items": { - "$ref": "#/definitions/hermes.Variant" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "sizes": { + "section": { + "type": "string" + } + }, + "type": "object" + }, + "globeandmail.NewsResponse": { + "properties": { + "items": { "items": { - "$ref": "#/definitions/hermes.Variant" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" } }, "type": "object" }, - "hermes.categoriesResponseDoc": { + "globeandmail.SectionsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/hermes.CategoriesResponse" - }, - "msg": { - "example": "ok", - "type": "string" + "sections": { + "items": { + "$ref": "#/definitions/newsplatform.Section" + }, + "type": "array" } }, "type": "object" }, - "hermes.categoryResponseDoc": { + "globeandmail.articleResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hermes.CategoryResponse" + "$ref": "#/definitions/globeandmail.ArticleResponse" }, "msg": { - "example": "ok", + "example": "OK", "type": "string" } }, "type": "object" }, - "hermes.productResponseDoc": { + "globeandmail.authorResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hermes.ProductResponse" + "$ref": "#/definitions/globeandmail.AuthorResponse" }, "msg": { - "example": "ok", + "example": "OK", "type": "string" } }, "type": "object" }, - "hermes.productsResponseDoc": { + "globeandmail.headlinesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hermes.ProductsResponse" + "$ref": "#/definitions/globeandmail.HeadlinesResponse" }, "msg": { - "example": "ok", + "example": "OK", "type": "string" } }, "type": "object" }, - "hermes.recommendationsResponseDoc": { + "globeandmail.newsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hermes.RecommendationsResponse" + "$ref": "#/definitions/globeandmail.NewsResponse" }, "msg": { - "example": "ok", + "example": "OK", "type": "string" } }, "type": "object" }, - "hermes.searchResponseDoc": { + "globeandmail.sectionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hermes.SearchResponse" + "$ref": "#/definitions/globeandmail.SectionsResponse" }, "msg": { - "example": "ok", + "example": "OK", "type": "string" } }, "type": "object" }, - "hermes.storesResponseDoc": { + "glovo.Attribute": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/hermes.StoresResponse" - }, - "msg": { - "example": "ok", + "name": { "type": "string" + }, + "price_impact": { + "type": "number" } }, "type": "object" }, - "hermes.suggestResponseDoc": { + "glovo.AttributeGroup": { "properties": { - "code": { - "example": 200, + "attributes": { + "items": { + "$ref": "#/definitions/glovo.Attribute" + }, + "type": "array" + }, + "max": { "type": "integer" }, - "data": { - "$ref": "#/definitions/hermes.SuggestResponse" + "min": { + "type": "integer" }, - "msg": { - "example": "ok", + "multiple_selection": { + "type": "boolean" + }, + "name": { "type": "string" } }, "type": "object" }, - "hindustantimes.AuthorResponse": { + "glovo.CategoriesResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/hindustantimes.HeadlineItem" - }, - "type": "array" - }, - "biography": { + "categories": { "items": { - "type": "string" + "$ref": "#/definitions/glovo.Category" }, "type": "array" }, - "email": { - "type": "string" - }, - "facebook_url": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "linkedin_url": { + "city": { "type": "string" }, - "name": { + "city_code": { "type": "string" }, - "twitter_url": { + "country": { "type": "string" }, - "url": { + "language": { "type": "string" } }, "type": "object" }, - "hindustantimes.HeadlineItem": { + "glovo.Category": { "properties": { - "author": { - "type": "string" + "enabled": { + "type": "boolean" }, - "image_url": { - "type": "string" + "id": { + "description": "ID is the value /glovo/stores/filters and /glovo/stores take as\ncategory_id.", + "type": "integer" }, - "published_at": { + "name": { + "description": "Name is Glovo's internal category key (for example RESTAURANT).", "type": "string" }, - "summary": { + "open": { + "type": "boolean" + }, + "single_store_slug": { "type": "string" }, "title": { "type": "string" }, "type": { - "type": "string" - }, - "url": { + "description": "Type is STORES for a store category; other types (for example SHIPMENT\nfor package delivery) have no store list.", "type": "string" } }, "type": "object" }, - "hm.CategoriesResponse": { + "glovo.CitiesResponse": { "properties": { - "categories": { + "cities": { "items": { - "$ref": "#/definitions/hm.CategoryEntry" + "$ref": "#/definitions/glovo.CityRef" }, "type": "array" }, - "fetched_at": { - "type": "string" + "countries": { + "description": "Countries lists every country code Glovo serves, regardless of the\ncountry filter, so the filter's value space is discoverable.", + "items": { + "type": "string" + }, + "type": "array" }, - "source_url": { + "country": { "type": "string" + }, + "total_results": { + "type": "integer" } }, "type": "object" }, - "hm.CategoryEntry": { + "glovo.CityRef": { "properties": { - "category_id": { - "type": "string" - }, - "department": { - "type": "string" - }, - "name": { + "code": { "type": "string" }, - "section": { + "country": { "type": "string" }, - "url": { + "slug": { "type": "string" } }, "type": "object" }, - "hm.ColorSwatch": { + "glovo.CityResponse": { "properties": { - "article_id": { + "code": { "type": "string" }, - "color_code": { + "content_language_code": { "type": "string" }, - "image_url": { + "country": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "language_code": { "type": "string" }, "name": { "type": "string" }, - "url": { + "slug": { + "type": "string" + }, + "supported_languages": { + "items": { + "type": "string" + }, + "type": "array" + }, + "timezone": { "type": "string" } }, "type": "object" }, - "hm.ListingResponse": { + "glovo.Collection": { "properties": { - "category_id": { - "type": "string" - }, - "count": { - "type": "integer" + "children": { + "items": { + "$ref": "#/definitions/glovo.Collection" + }, + "type": "array" }, - "fetched_at": { + "name": { "type": "string" }, - "is_new": { - "type": "boolean" - }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" + "slug": { + "description": "Slug is the value /glovo/store/products takes as collection.", + "type": "string" + } + }, + "type": "object" + }, + "glovo.FeeTier": { + "properties": { + "currency": { + "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/hm.ProductSummary" - }, - "type": "array" + "lower_bound": { + "description": "LowerBound and UpperBound are the basket values the tier covers.", + "type": "number" }, - "sort": { + "strategy": { + "description": "Strategy is Glovo's name for how the surcharge is applied, for example CAPPED.", "type": "string" }, - "source_url": { + "surcharge": { + "description": "Surcharge is the extra fee charged while the basket is in this tier.", + "type": "number" + }, + "upper_bound": { + "type": "number" + } + }, + "type": "object" + }, + "glovo.Filter": { + "properties": { + "group": { + "description": "Group is Glovo's name for the filter family, for example \"Food type\".", "type": "string" }, - "total_hits": { + "id": { + "description": "ID is the value /glovo/stores takes as filter_id.", "type": "integer" }, - "total_pages": { - "type": "integer" + "title": { + "type": "string" } }, "type": "object" }, - "hm.ProductDetailColor": { + "glovo.FiltersResponse": { "properties": { - "image_url": { + "category_id": { + "type": "integer" + }, + "city": { "type": "string" }, - "name": { + "city_code": { "type": "string" }, - "sizes": { + "country": { + "type": "string" + }, + "filters": { "items": { - "$ref": "#/definitions/hm.ProductDetailSize" + "$ref": "#/definitions/glovo.Filter" }, "type": "array" } }, "type": "object" }, - "hm.ProductDetailRating": { + "glovo.MenuResponse": { "properties": { - "count": { + "address_id": { "type": "integer" }, - "value": { - "type": "number" + "collections": { + "items": { + "$ref": "#/definitions/glovo.Collection" + }, + "type": "array" + }, + "store_id": { + "type": "integer" } }, "type": "object" }, - "hm.ProductDetailResponse": { + "glovo.Product": { "properties": { - "brand": { + "currency": { "type": "string" }, - "colors": { - "items": { - "$ref": "#/definitions/hm.ProductDetailColor" - }, - "type": "array" - }, "description": { "type": "string" }, - "fetched_at": { + "display_price": { "type": "string" }, - "gender": { + "external_id": { "type": "string" }, - "material": { - "type": "string" + "id": { + "type": "integer" }, - "name": { + "image_url": { "type": "string" }, - "pattern": { + "name": { "type": "string" }, - "product_id": { - "type": "string" + "option_groups": { + "items": { + "$ref": "#/definitions/glovo.AttributeGroup" + }, + "type": "array" }, - "rating": { - "$ref": "#/definitions/hm.ProductDetailRating" + "out_of_stock": { + "type": "boolean" }, - "reviews": { + "price": { + "type": "number" + } + }, + "type": "object" + }, + "glovo.ProductSection": { + "properties": { + "products": { "items": { - "$ref": "#/definitions/hm.ProductDetailReview" + "$ref": "#/definitions/glovo.Product" }, "type": "array" }, - "source_url": { + "slug": { "type": "string" }, - "url": { + "title": { "type": "string" } }, "type": "object" }, - "hm.ProductDetailReview": { + "glovo.ProductsResponse": { "properties": { - "author": { - "type": "string" + "address_id": { + "type": "integer" }, - "body": { + "collection": { "type": "string" }, - "date": { - "type": "string" + "returned": { + "type": "integer" }, - "dimensions": { + "sections": { "items": { - "$ref": "#/definitions/hm.ProductDetailReviewDimension" + "$ref": "#/definitions/glovo.ProductSection" }, "type": "array" }, - "rating": { - "type": "number" + "store_id": { + "type": "integer" + }, + "truncated": { + "type": "boolean" } }, "type": "object" }, - "hm.ProductDetailReviewDimension": { + "glovo.Promotion": { "properties": { - "label": { + "benefit": { "type": "string" }, - "value": { + "description": { + "type": "string" + }, + "type": { "type": "string" } }, "type": "object" }, - "hm.ProductDetailSize": { + "glovo.StoreFeesResponse": { "properties": { - "availability": { - "type": "string" + "address_id": { + "type": "integer" }, - "currency": { - "type": "string" + "store_id": { + "type": "integer" }, - "price": { - "type": "number" + "tiers": { + "items": { + "$ref": "#/definitions/glovo.FeeTier" + }, + "type": "array" + } + }, + "type": "object" + }, + "glovo.StoreFilter": { + "properties": { + "id": { + "type": "integer" }, - "size": { + "name": { "type": "string" }, - "sku": { + "slug": { "type": "string" }, - "url": { + "title": { "type": "string" } }, "type": "object" }, - "hm.ProductSummary": { + "glovo.StoreResponse": { "properties": { - "availability": { + "address": { "type": "string" }, - "brand": { - "type": "string" + "address_id": { + "description": "AddressID is the store location id the menu and products endpoints take.", + "type": "integer" }, - "category_code": { + "business_unit": { "type": "string" }, - "colors": { - "items": { - "$ref": "#/definitions/hm.ColorSwatch" - }, - "type": "array" + "category": { + "type": "string" }, - "coming_soon": { - "type": "boolean" + "category_id": { + "type": "integer" }, - "currency": { + "city_code": { "type": "string" }, - "formatted_price": { + "delivery_fee": { + "type": "number" + }, + "description": { "type": "string" }, + "enabled": { + "type": "boolean" + }, + "filters": { + "items": { + "$ref": "#/definitions/glovo.StoreFilter" + }, + "type": "array" + }, "id": { - "type": "string" + "type": "integer" }, - "image_url": { - "type": "string" + "latitude": { + "type": "number" }, - "model_image_url": { - "type": "string" + "longitude": { + "type": "number" }, "name": { "type": "string" }, - "new_arrival": { + "open": { "type": "boolean" }, - "price": { - "type": "number" + "prime_available": { + "type": "boolean" }, - "sizes": { + "promotions": { "items": { - "$ref": "#/definitions/hm.SizeStock" + "$ref": "#/definitions/glovo.Promotion" }, "type": "array" }, - "url": { + "rating": { + "type": "string" + }, + "rating_count": { + "type": "integer" + }, + "rating_label": { + "type": "string" + }, + "scheduling_enabled": { + "type": "boolean" + }, + "service_fee": { + "type": "number" + }, + "slug": { + "type": "string" + }, + "vertical": { "type": "string" } }, "type": "object" }, - "hm.RelatedList": { + "glovo.StoreSearchResponse": { "properties": { - "label": { - "type": "string" + "address_id": { + "type": "integer" }, "products": { "items": { - "$ref": "#/definitions/hm.ProductSummary" + "$ref": "#/definitions/glovo.Product" }, "type": "array" - } - }, - "type": "object" - }, - "hm.RelatedResponse": { - "properties": { - "fetched_at": { - "type": "string" - }, - "lists": { - "items": { - "$ref": "#/definitions/hm.RelatedList" - }, - "type": "array" - }, - "product_id": { - "type": "string" }, - "source_url": { + "query": { "type": "string" - } - }, - "type": "object" - }, - "hm.SearchMeta": { - "properties": { - "blocked": { - "type": "boolean" }, - "did_you_mean": { - "items": { - "type": "string" - }, - "type": "array" + "returned": { + "type": "integer" }, - "query": { - "type": "string" + "store_id": { + "type": "integer" }, - "related_searches": { - "items": { - "type": "string" - }, - "type": "array" + "total_products": { + "description": "TotalProducts is how many products matched in the store.", + "type": "integer" } }, "type": "object" }, - "hm.SearchResponse": { + "glovo.StoreSummary": { "properties": { - "count": { + "address_id": { "type": "integer" }, - "fetched_at": { + "base_delivery_fee": { "type": "string" }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "products": { - "items": { - "$ref": "#/definitions/hm.ProductSummary" - }, - "type": "array" - }, - "query": { + "currency": { "type": "string" }, - "search_meta": { - "$ref": "#/definitions/hm.SearchMeta" - }, - "source_url": { + "delivery_fee": { "type": "string" }, - "total_hits": { - "type": "integer" + "delivery_fee_amount": { + "type": "number" }, - "total_pages": { - "type": "integer" - } - }, - "type": "object" - }, - "hm.SizeStock": { - "properties": { - "id": { + "distance": { "type": "string" }, - "label": { + "eta": { "type": "string" }, - "stock": { + "free_delivery": { + "type": "boolean" + }, + "id": { + "description": "ID and AddressID are the values /glovo/store, /glovo/store/menu and\n/glovo/store/products take as store_id and address_id.", "type": "integer" - } - }, - "type": "object" - }, - "hm.Store": { - "properties": { - "address": { - "type": "string" }, - "city": { - "type": "string" + "is_new": { + "type": "boolean" }, - "country": { + "is_top_rated": { + "type": "boolean" + }, + "name": { "type": "string" }, - "latitude": { - "type": "number" + "promotions": { + "items": { + "$ref": "#/definitions/glovo.Promotion" + }, + "type": "array" }, - "longitude": { - "type": "number" + "rank_position": { + "type": "integer" }, - "name": { + "rating": { + "description": "Rating is Glovo's percentage label (for example \"100%\") and\nRatingVotes its count label (for example \"(10)\"); both are empty for a\nstore with no ratings yet.", "type": "string" }, - "phone": { + "rating_votes": { "type": "string" }, - "postal_code": { + "slug": { "type": "string" }, - "state": { - "type": "string" + "sponsored": { + "type": "boolean" }, - "store_class": { + "status": { "type": "string" }, - "store_code": { + "tag": { "type": "string" } }, "type": "object" }, - "hm.StoreResponse": { + "glovo.StoresResponse": { "properties": { - "count": { + "category_id": { "type": "integer" }, - "fetched_at": { + "city": { "type": "string" }, - "lat": { - "type": "number" + "city_code": { + "type": "string" }, - "lng": { - "type": "number" + "country": { + "type": "string" }, - "radius_meters": { + "filter_id": { "type": "integer" }, - "search": { - "type": "string" - }, - "source_url": { - "type": "string" + "returned": { + "type": "integer" }, "stores": { "items": { - "$ref": "#/definitions/hm.Store" + "$ref": "#/definitions/glovo.StoreSummary" }, "type": "array" + }, + "total_entries": { + "description": "TotalEntries is how many stores match in the city. Only the first page\nof up to 50 is reachable anonymously; narrow with filter_id to reach\nothers.", + "type": "integer" } }, "type": "object" }, - "hm.SuggestResponse": { + "glovo.categoriesResponseDoc": { "properties": { - "blocked": { - "type": "boolean" - }, - "content_suggestions": { - "items": { - "$ref": "#/definitions/hm.SuggestionLink" - }, - "type": "array" - }, - "fetched_at": { - "type": "string" - }, - "phrase_suggestions": { - "items": { - "type": "string" - }, - "type": "array" - }, - "popular_searches": { - "items": { - "$ref": "#/definitions/hm.SuggestionLink" - }, - "type": "array" - }, - "query": { - "type": "string" - }, - "search_history": { - "items": { - "type": "string" - }, - "type": "array" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/glovo.CategoriesResponse" }, - "trending_searches": { - "items": { - "type": "string" - }, - "type": "array" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "hm.SuggestionLink": { + "glovo.citiesResponseDoc": { "properties": { - "content_type": { - "type": "string" - }, - "deep_link": { - "type": "string" - }, - "image_url": { - "type": "string" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "link": { - "type": "string" + "data": { + "$ref": "#/definitions/glovo.CitiesResponse" }, - "title": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "hm.categoriesResponseDoc": { + "glovo.cityResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/hm.CategoriesResponse" + "$ref": "#/definitions/glovo.CityResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "hm.listingResponseDoc": { + "glovo.filtersResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/hm.ListingResponse" + "$ref": "#/definitions/glovo.FiltersResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "hm.productDetailResponseDoc": { + "glovo.menuResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/hm.ProductDetailResponse" + "$ref": "#/definitions/glovo.MenuResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "hm.relatedResponseDoc": { + "glovo.productsResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/hm.RelatedResponse" + "$ref": "#/definitions/glovo.ProductsResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "hm.searchResponseDoc": { + "glovo.storeFeesResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/hm.SearchResponse" + "$ref": "#/definitions/glovo.StoreFeesResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "hm.storesResponseDoc": { + "glovo.storeResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/hm.StoreResponse" + "$ref": "#/definitions/glovo.StoreResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "hm.suggestResponseDoc": { + "glovo.storeSearchResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/hm.SuggestResponse" + "$ref": "#/definitions/glovo.StoreSearchResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "hollywoodreporter.AuthorArticle": { + "glovo.storesResponseDoc": { "properties": { - "title": { - "type": "string" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/glovo.StoresResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "hollywoodreporter.AuthorResponse": { + "goat.CollectionProduct": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/hollywoodreporter.AuthorArticle" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "category": { + "example": "shoes", + "type": "string" }, - "headshot_url": { + "id": { + "example": "1481726", "type": "string" }, - "job_title": { + "image_url": { "type": "string" }, - "name": { + "release_year": { + "example": "2025", "type": "string" }, - "page": { - "type": "integer" + "slug": { + "example": "air-jordan-4-retro-rare-air-fv5029-003", + "type": "string" }, - "social_links": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "source_url": { + "example": "https://www.goat.com/sneakers/air-jordan-4-retro-rare-air-fv5029-003", + "type": "string" }, - "url": { + "title": { + "example": "Air Jordan 4 Retro 'Rare Air - White Lettering'", "type": "string" } }, "type": "object" }, - "homedepot.CategoriesResponse": { + "goat.CollectionResponse": { "properties": { - "count": { - "example": 26, + "limit": { + "example": 12, "type": "integer" }, - "departments": { + "page": { + "example": 1, + "type": "integer" + }, + "products": { "items": { - "$ref": "#/definitions/homedepot.Department" + "$ref": "#/definitions/goat.CollectionProduct" }, "type": "array" }, - "fetched_at": { + "slug": { + "example": "top-trending-uk", "type": "string" }, - "source_url": { - "type": "string" + "total_results": { + "example": 48, + "type": "integer" } }, "type": "object" }, - "homedepot.CategoryFacet": { + "goat.CountriesResponse": { "properties": { - "name": { - "example": "Cordless", - "type": "string" + "countries": { + "items": { + "$ref": "#/definitions/goat.Country" + }, + "type": "array" }, - "path": { - "example": "Cordless/N-5yc1vZc29xZ1z140i3", - "type": "string" + "ships_to_total": { + "description": "ShipsToTotal counts the subset GOAT ships to.", + "example": 170, + "type": "integer" }, - "url": { - "type": "string" + "total": { + "example": 249, + "type": "integer" } }, "type": "object" }, - "homedepot.CategoryProduct": { + "goat.Country": { "properties": { - "id": { - "example": "320326875", + "country_code": { + "example": "US", "type": "string" }, - "image": { + "currency": { + "example": "USD", "type": "string" }, - "model": { - "example": "2953-20", + "display_name": { + "example": "United States", "type": "string" }, - "original_price": { - "example": 199, - "type": "number" - }, - "price": { - "example": 179, - "type": "number" + "flag": { + "example": "🇺🇸", + "type": "string" }, - "rating": { - "example": 4.7, - "type": "number" + "local_name": { + "example": "United States", + "type": "string" }, - "review_count": { - "example": 1542, - "type": "integer" + "name": { + "example": "United States", + "type": "string" }, - "title": { - "example": "M18 FUEL 18V Lithium-Ion Brushless Cordless 1/4 in. Hex Impact Driver (Tool-Only)", + "phone_code": { + "example": "1", "type": "string" }, - "url": { + "returns_from": { + "example": true, + "type": "boolean" + }, + "ships_to": { + "description": "ShipsTo reports whether GOAT ships orders to this country. It does\nnot gate country_code, which is accepted for every country here.", + "example": true, + "type": "boolean" + }, + "size_unit": { + "description": "SizeUnit is the size system GOAT shows for this country: us, uk, eu.", + "example": "us", "type": "string" + }, + "tax_included": { + "example": false, + "type": "boolean" } }, "type": "object" }, - "homedepot.CategoryResponse": { + "goat.CuratedLink": { "properties": { - "count": { - "type": "integer" - }, - "facets": { - "description": "Facets are the refinement links this browse page offers. Each facet's\npath is directly usable as this endpoint's own path parameter.", - "items": { - "$ref": "#/definitions/homedepot.CategoryFacet" - }, - "type": "array" - }, - "fetched_at": { + "collection_slug": { + "description": "CollectionSlug is GOAT's own collection identifier. A readable slug\nworks on GET /goat/collection; a bare numeric id (which GOAT also\nemits here) belongs to an internal id space that endpoint does not\naccept and returns no results. Confirmed live 2026-09-07 --\nback-to-school-2026 returns 470 products, 31841 returns none.", + "example": "back-to-school-2026", "type": "string" }, - "page": { - "description": "Page is the 1-indexed page this response carries.", - "example": 1, - "type": "integer" - }, - "path": { + "filter_key": { + "example": "group_id", "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/homedepot.CategoryProduct" - }, - "type": "array" - }, - "sort": { - "description": "Sort echoes the requested sort value, or \"\" when the upstream default\nordering was used.", - "example": "top_sellers", + "filter_value": { + "example": "all", "type": "string" }, - "source_url": { + "query": { + "example": "Awake NY x Air Jordan 6", "type": "string" }, "title": { + "example": "Back To School", "type": "string" }, + "type": { + "enum": [ + "collection", + "search", + "browse" + ], + "example": "collection", + "type": "string" + } + }, + "type": "object" + }, + "goat.CuratedResponse": { + "properties": { + "links": { + "items": { + "$ref": "#/definitions/goat.CuratedLink" + }, + "type": "array" + }, "total": { + "example": 10, "type": "integer" } }, "type": "object" }, - "homedepot.Department": { + "goat.FeaturedLink": { "properties": { "name": { - "example": "Tools", - "type": "string" - }, - "path": { - "example": "Tools/N-5yc1vZc1xy", + "example": "Jordan 3 True Blue 2026", "type": "string" }, - "url": { + "source_url": { + "example": "https://www.goat.com/sneakers/air-jordan-3-true-blue-2026-if4396-104", "type": "string" } }, "type": "object" }, - "homedepot.KeyFeature": { + "goat.ListingsCountResponse": { "properties": { - "name": { - "example": "Motor Type", - "type": "string" - }, - "value": { - "example": "Brushed", - "type": "string" + "total_listings": { + "example": 601141, + "type": "integer" } }, "type": "object" }, - "homedepot.Product": { + "goat.Price": { "properties": { - "brand": { - "example": "Milwaukee", - "type": "string" + "amount_cents": { + "example": 49100, + "type": "integer" }, "currency": { "example": "USD", "type": "string" + } + }, + "type": "object" + }, + "goat.ProductDetail": { + "properties": { + "brand_name": { + "example": "Air Jordan", + "type": "string" }, - "description": { + "category": { + "example": "shoes", "type": "string" }, - "fetched_at": { + "colorway": { + "example": "Cream", "type": "string" }, - "gtin": { - "example": "0045242637867", + "colorway_detail": { + "example": "Varsity Red/Black/Sail/Muslin", "type": "string" }, - "id": { - "example": "320326875", + "designer": { + "example": "Peter Moore", "type": "string" }, - "images": { + "featured_in": { + "items": { + "$ref": "#/definitions/goat.FeaturedLink" + }, + "type": "array" + }, + "gender": { + "example": [ + "men" + ], "items": { "type": "string" }, "type": "array" }, - "key_features": { + "id": { + "example": "1469452", + "type": "string" + }, + "images": { "items": { - "$ref": "#/definitions/homedepot.KeyFeature" + "$ref": "#/definitions/goat.ProductImage" }, "type": "array" }, - "model": { - "example": "2953-20", + "midsole": { + "example": "Air", "type": "string" }, - "price": { - "example": 179, - "type": "number" + "name": { + "example": "Fragment Design x Travis Scott x Air Jordan 1 Retro Low OG SP 'Sail Military Blue'", + "type": "string" }, - "rating": { - "example": 4.7, - "type": "number" + "nickname": { + "example": "Sail Military Blue", + "type": "string" }, - "review_count": { - "example": 1544, - "type": "integer" + "picture_url": { + "type": "string" }, - "reviews": { + "product_type": { + "example": "sneakers", + "type": "string" + }, + "release_date": { + "example": "2025-11-15", + "type": "string" + }, + "retail_price": { + "$ref": "#/definitions/goat.Price" + }, + "silhouette": { + "example": "Air Jordan 1", + "type": "string" + }, + "size_range": { "items": { - "$ref": "#/definitions/homedepot.ProductReview" + "type": "number" + }, + "type": "array" + }, + "size_unit": { + "example": "us", + "type": "string" + }, + "sizes": { + "items": { + "$ref": "#/definitions/goat.SizePrice" }, "type": "array" }, "sku": { - "example": "1007901520", + "example": "DM7866 104", + "type": "string" + }, + "slug": { + "example": "fragment-design-x-travis-scott-x-air-jordan-1-low-og-sp-sail-military-blue-dm7866-104", "type": "string" }, "source_url": { + "example": "https://www.goat.com/sneakers/fragment-design-x-travis-scott-x-air-jordan-1-low-og-sp-sail-military-blue-dm7866-104", "type": "string" }, - "specifications": { + "story": { + "type": "string" + }, + "taxonomy": { "items": { - "$ref": "#/definitions/homedepot.Specification" + "type": "string" }, "type": "array" }, - "title": { - "example": "Milwaukee M18 FUEL 18V Lithium-Ion Brushless Cordless 1/4 in. Hex Impact Driver (Tool-Only) 2953-20", + "upper_material": { + "example": "Leather", "type": "string" + } + }, + "type": "object" + }, + "goat.ProductImage": { + "properties": { + "aspect": { + "example": 1.5, + "type": "number" }, - "url": { + "image_url": { "type": "string" + }, + "order": { + "example": 1, + "type": "integer" } }, "type": "object" }, - "homedepot.ProductQuestionsResponse": { + "goat.ProductSummary": { "properties": { - "count": { - "example": 8, - "type": "integer" + "brand_name": { + "example": "Air Jordan", + "type": "string" }, - "fetched_at": { + "category": { + "example": "shoes", + "type": "string" + }, + "gender": { + "example": "men", "type": "string" }, "id": { - "example": "328425526", + "example": "1469452", "type": "string" }, - "questions": { + "image_url": { + "type": "string" + }, + "in_stock": { + "example": true, + "type": "boolean" + }, + "instant_lowest_price": { + "$ref": "#/definitions/goat.Price" + }, + "lowest_price": { + "$ref": "#/definitions/goat.Price" + }, + "product_type": { + "example": "sneakers", + "type": "string" + }, + "release_date": { + "example": "2025-11-15", + "type": "string" + }, + "retail_price": { + "$ref": "#/definitions/goat.Price" + }, + "silhouette": { + "example": "Air Jordan 1", + "type": "string" + }, + "slug": { + "example": "fragment-design-x-travis-scott-x-air-jordan-1-low-og-sp-sail-military-blue-dm7866-104", + "type": "string" + }, + "source_url": { + "example": "https://www.goat.com/sneakers/fragment-design-x-travis-scott-x-air-jordan-1-low-og-sp-sail-military-blue-dm7866-104", + "type": "string" + }, + "tags": { "items": { - "$ref": "#/definitions/homedepot.Question" + "type": "string" }, "type": "array" }, - "source_url": { + "title": { + "example": "Fragment Design x Travis Scott x Air Jordan 1 Retro Low OG SP 'Sail Military Blue'", "type": "string" }, - "total": { - "example": 575, - "type": "integer" + "under_retail": { + "example": false, + "type": "boolean" } }, "type": "object" }, - "homedepot.ProductReview": { + "goat.RecommendedProduct": { "properties": { - "author": { - "example": "HomeDepotCustomer", + "brand_name": { + "example": "Nike", "type": "string" }, - "body": { - "example": "The impact is just what I needed.", + "category": { + "example": "shoes", "type": "string" }, - "headline": { - "example": "Great tool", + "colorway": { + "example": "Black", "type": "string" }, - "rating": { - "example": 5, - "type": "number" - } - }, - "type": "object" - }, - "homedepot.Question": { - "properties": { - "answer_count": { - "type": "integer" + "id": { + "example": "585882", + "type": "string" }, - "answers": { - "items": { - "$ref": "#/definitions/homedepot.QuestionAnswer" - }, - "type": "array" + "name": { + "example": "Travis Scott x Nike Dunk Low Premium QS SB 'Cactus Jack'", + "type": "string" }, - "author": { + "product_type": { + "example": "sneakers", "type": "string" }, - "date": { + "release_date": { + "example": "2020-02-29", "type": "string" }, - "id": { + "retail_price": { + "$ref": "#/definitions/goat.Price" + }, + "sku": { + "example": "CT5053 001", "type": "string" }, - "text": { + "slug": { + "example": "travis-scott-x-dunk-low-sb-ct5053-101", + "type": "string" + }, + "source_url": { + "example": "https://www.goat.com/sneakers/travis-scott-x-dunk-low-sb-ct5053-101", "type": "string" } }, "type": "object" }, - "homedepot.QuestionAnswer": { + "goat.RecommendedResponse": { "properties": { - "author": { - "type": "string" + "products": { + "items": { + "$ref": "#/definitions/goat.RecommendedProduct" + }, + "type": "array" }, - "date": { + "slug": { + "example": "fragment-design-x-travis-scott-x-air-jordan-1-low-og-sp-sail-military-blue-dm7866-104", "type": "string" + } + }, + "type": "object" + }, + "goat.SearchFacetsResponse": { + "properties": { + "activities": { + "example": [ + "lifestyle", + "basketball", + "running", + "skateboarding" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "helpful_count": { - "type": "integer" - }, - "id": { - "type": "string" + "brands": { + "description": "Brands is ordered by product count descending and is GOAT's top\nbrands, not its whole brand universe -- upstream truncates this\nbucket (see BrandsTruncated).", + "example": [ + "nike", + "adidas", + "new-balance", + "puma", + "supreme" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "is_brand_answer": { + "brands_truncated": { + "description": "BrandsTruncated reports that upstream returned its maximum brand\nbucket size, so brands beyond it exist but are not listed. A brand\nmissing from Brands is still a valid goat_search brands value.", + "example": true, "type": "boolean" }, - "text": { - "type": "string" + "categories": { + "example": [ + "footwear", + "apparel", + "accessories", + "bags", + "collectibles", + "media", + "sports", + "jewelry", + "home", + "objects", + "other", + "art" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "colors": { + "example": [ + "black", + "white", + "blue", + "grey", + "red", + "green", + "pink", + "cream", + "brown", + "purple", + "multi-color", + "orange", + "tan", + "yellow", + "silver", + "gold", + "teal", + "copper" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "conditions": { + "example": [ + "new_no_defects", + "used", + "new_with_defects", + "goat_clean" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "genders": { + "example": [ + "men", + "youth", + "infant", + "women" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "product_types": { + "description": "ProductTypes and Activities are statically maintained, not live --\nGOAT never returns them as aggregation buckets.", + "example": [ + "sneakers", + "sandals", + "cleats", + "boots", + "slip-ons" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "years": { + "description": "Years is the vocabulary for goat_search's years parameter, which\nfilters on a product's season year.", + "example": [ + "2026", + "2025", + "2024", + "2023" + ], + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "homedepot.SearchResponse": { + "goat.SearchResponse": { "properties": { - "count": { - "example": 24, + "limit": { + "example": 12, "type": "integer" }, - "fetched_at": { - "type": "string" - }, "page": { "example": 1, "type": "integer" }, "products": { "items": { - "$ref": "#/definitions/homedepot.CategoryProduct" + "$ref": "#/definitions/goat.ProductSummary" }, "type": "array" }, "query": { - "example": "impact driver", + "example": "jordan 1", "type": "string" }, - "source_url": { + "total_results": { + "example": 5540, + "type": "integer" + }, + "total_results_capped": { + "description": "TotalResultsCapped reports that upstream saturated total_results at\nits ceiling, so the real match count is higher and unknown. Deeper\npages still return products past that ceiling.", + "example": false, + "type": "boolean" + } + }, + "type": "object" + }, + "goat.SizePrice": { + "properties": { + "box_condition": { + "example": "good_condition", "type": "string" }, - "total": { - "example": 1962, - "type": "integer" + "highest_offer": { + "$ref": "#/definitions/goat.Price" + }, + "instant_ship_lowest_price": { + "$ref": "#/definitions/goat.Price" + }, + "last_sold_price": { + "$ref": "#/definitions/goat.Price" + }, + "lowest_price": { + "$ref": "#/definitions/goat.Price" + }, + "shoe_condition": { + "example": "new_no_defects", + "type": "string" + }, + "size": { + "example": "9", + "type": "string" + }, + "stock_status": { + "example": "single_in_stock", + "type": "string" } }, "type": "object" }, - "homedepot.Specification": { + "goat.SuggestCollection": { "properties": { - "name": { - "example": "Battery Power Type", + "id": { + "example": "2fbf8b62-8899-4323-89ab-efdbc672d9d0", "type": "string" }, - "value": { - "example": "Lithium Ion", + "slug": { + "example": "michael-jordan", + "type": "string" + }, + "title": { + "example": "Michael Jordan", + "type": "string" + }, + "type": { + "example": "StaticCollection", "type": "string" } }, "type": "object" }, - "homedepot.SuggestResponse": { + "goat.SuggestProduct": { "properties": { - "count": { - "example": 10, - "type": "integer" + "category": { + "example": "shoes", + "type": "string" }, - "fetched_at": { + "id": { + "example": "1403298", + "type": "string" + }, + "image_url": { + "type": "string" + }, + "slug": { + "example": "air-jordan-5-og-metallic-2025-hf3975-001", "type": "string" }, "source_url": { + "example": "https://www.goat.com/sneakers/air-jordan-5-og-metallic-2025-hf3975-001", "type": "string" }, - "suggestions": { + "title": { + "example": "Air Jordan 5 Retro OG 'Black Metallic Reimagined'", + "type": "string" + } + }, + "type": "object" + }, + "goat.SuggestResponse": { + "properties": { + "collections": { "items": { - "$ref": "#/definitions/homedepot.Suggestion" + "$ref": "#/definitions/goat.SuggestCollection" }, "type": "array" }, - "term": { - "example": "drill", + "products": { + "items": { + "$ref": "#/definitions/goat.SuggestProduct" + }, + "type": "array" + }, + "query": { + "example": "jord", "type": "string" } }, "type": "object" }, - "homedepot.Suggestion": { + "goat.TrendingSearchesResponse": { "properties": { - "position": { - "description": "Position is the suggestion's 1-indexed rank in Home Depot's own\ntypeahead ordering.", - "example": 2, - "type": "integer" + "searches": { + "example": [ + "Jordan 4", + "Jordan 1", + "Kobe 6" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "term": { - "example": "drill bits", - "type": "string" + "total": { + "example": 25, + "type": "integer" } }, "type": "object" }, - "homedepot.categoriesResponseDoc": { + "goat.collectionResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/homedepot.CategoriesResponse" + "$ref": "#/definitions/goat.CollectionResponse" }, "msg": { "example": "OK", @@ -108502,14 +114597,14 @@ }, "type": "object" }, - "homedepot.categoryResponseDoc": { + "goat.countriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/homedepot.CategoryResponse" + "$ref": "#/definitions/goat.CountriesResponse" }, "msg": { "example": "OK", @@ -108518,14 +114613,14 @@ }, "type": "object" }, - "homedepot.productQuestionsResponseDoc": { + "goat.curatedResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/homedepot.ProductQuestionsResponse" + "$ref": "#/definitions/goat.CuratedResponse" }, "msg": { "example": "OK", @@ -108534,14 +114629,14 @@ }, "type": "object" }, - "homedepot.productResponseDoc": { + "goat.facetsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/homedepot.Product" + "$ref": "#/definitions/goat.SearchFacetsResponse" }, "msg": { "example": "OK", @@ -108550,14 +114645,14 @@ }, "type": "object" }, - "homedepot.searchResponseDoc": { + "goat.listingsCountResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/homedepot.SearchResponse" + "$ref": "#/definitions/goat.ListingsCountResponse" }, "msg": { "example": "OK", @@ -108566,14 +114661,14 @@ }, "type": "object" }, - "homedepot.suggestResponseDoc": { + "goat.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/homedepot.SuggestResponse" + "$ref": "#/definitions/goat.ProductDetail" }, "msg": { "example": "OK", @@ -108582,620 +114677,394 @@ }, "type": "object" }, - "hotels.Address": { - "properties": { - "country": { - "type": "string" - }, - "locality": { - "type": "string" - }, - "postal_code": { - "type": "string" - }, - "region": { - "type": "string" - }, - "street_address": { - "type": "string" - } - }, - "type": "object" - }, - "hotels.AutocompleteResponse": { - "properties": { - "query": { - "type": "string" - }, - "suggestions": { - "items": { - "$ref": "#/definitions/hotels.Suggestion" - }, - "type": "array" - } - }, - "type": "object" - }, - "hotels.OffersOption": { + "goat.recommendedResponseDoc": { "properties": { - "adults": { - "example": 2, + "code": { + "example": 200, "type": "integer" }, - "check_in": { - "example": "2026-09-10", - "type": "string" - }, - "check_out": { - "example": "2026-09-11", - "type": "string" - }, - "currency": { - "example": "USD", - "type": "string" - }, - "locale": { - "example": "en_US", - "type": "string" + "data": { + "$ref": "#/definitions/goat.RecommendedResponse" }, - "property_id": { - "example": "19681371", + "msg": { + "example": "OK", "type": "string" } }, - "required": [ - "check_in", - "check_out", - "property_id" - ], "type": "object" }, - "hotels.OffersResponse": { + "goat.searchResponseDoc": { "properties": { - "check_in": { - "type": "string" - }, - "check_out": { - "type": "string" - }, - "header": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "offers": { - "items": { - "$ref": "#/definitions/hotels.RoomOffer" - }, - "type": "array" + "data": { + "$ref": "#/definitions/goat.SearchResponse" }, - "property_id": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "hotels.Property": { + "goat.suggestResponseDoc": { "properties": { - "address": { - "$ref": "#/definitions/hotels.Address" - }, - "amenities": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { - "type": "string" - }, - "guest_rating": { - "type": "number" - }, - "id": { - "type": "string" - }, - "images": { - "items": { - "type": "string" - }, - "type": "array" - }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" - }, - "name": { - "type": "string" - }, - "review_count": { + "code": { + "example": 200, "type": "integer" }, - "star_rating": { - "type": "number" + "data": { + "$ref": "#/definitions/goat.SuggestResponse" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "hotels.PropertyOption": { - "properties": { - "url": { - "example": "https://www.hotels.com/ho107229/hilton-san-francisco-financial-district-san-francisco-united-states-of-america/", + "msg": { + "example": "OK", "type": "string" } }, - "required": [ - "url" - ], - "type": "object" - }, - "hotels.PropertyResponse": { - "properties": { - "property": { - "$ref": "#/definitions/hotels.Property" - } - }, "type": "object" }, - "hotels.RatesOption": { + "goat.trendingSearchesResponseDoc": { "properties": { - "adults": { - "example": 2, + "code": { + "example": 200, "type": "integer" }, - "check_in": { - "example": "2026-09-10", - "type": "string" - }, - "check_out": { - "example": "2026-09-11", - "type": "string" - }, - "currency": { - "example": "USD", - "type": "string" - }, - "locale": { - "example": "en_US", - "type": "string" + "data": { + "$ref": "#/definitions/goat.TrendingSearchesResponse" }, - "property_id": { - "example": "19681371", + "msg": { + "example": "OK", "type": "string" } }, - "required": [ - "check_in", - "check_out", - "property_id" - ], "type": "object" }, - "hotels.RatesResponse": { + "goldin.Auction": { "properties": { - "check_in": { - "type": "string" - }, - "check_out": { + "id": { + "description": "ID is Goldin's own auction id -- pass as auction_id to Search.", "type": "string" }, - "properties": { - "items": { - "$ref": "#/definitions/hotels.SearchProperty" - }, - "type": "array" + "lot_count": { + "description": "LotCount is how many lots currently carry this auction id, read\nlive from the same facets response.", + "type": "integer" }, - "property_id": { + "name": { + "description": "Name is Goldin's own auction title, e.g. \"2026 Weekly Auction Sep\n8 - Sep 17\".", "type": "string" } }, "type": "object" }, - "hotels.Review": { + "goldin.AuctionListing": { "properties": { - "date": { - "type": "string" - }, - "message": { - "type": "string" - }, - "rating_label": { - "type": "string" + "buyer_premium": { + "type": "number" }, - "reviewer_name": { + "end_time": { "type": "string" }, - "verified": { - "type": "boolean" - } - }, - "type": "object" - }, - "hotels.ReviewArchive": { - "properties": { - "date": { + "extended_bidding_status": { "type": "string" }, "id": { "type": "string" }, - "message": { + "slug": { "type": "string" }, - "rating_label": { + "start_time": { "type": "string" }, - "reviewer_name": { + "status": { "type": "string" }, "title": { "type": "string" }, - "traveler_type": { + "type": { "type": "string" } }, "type": "object" }, - "hotels.ReviewCategory": { + "goldin.AuctionsResponse": { "properties": { - "name": { - "type": "string" + "auctions": { + "items": { + "$ref": "#/definitions/goldin.AuctionListing" + }, + "type": "array" }, - "score": { - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "hotels.ReviewsArchiveOption": { + "goldin.CategoriesResponse": { "properties": { - "adults": { - "example": 2, - "type": "integer" - }, - "check_in": { - "example": "2026-09-10", + "auction_type": { "type": "string" }, - "check_out": { - "example": "2026-09-11", - "type": "string" + "auctions": { + "items": { + "$ref": "#/definitions/goldin.Auction" + }, + "type": "array" }, - "currency": { - "example": "USD", - "type": "string" + "category": { + "items": { + "type": "string" + }, + "type": "array" }, - "locale": { - "example": "en_US", - "type": "string" + "certification": { + "items": { + "type": "string" + }, + "type": "array" }, - "page": { - "example": 1, - "type": "integer" + "item_type": { + "items": { + "type": "string" + }, + "type": "array" }, - "page_size": { - "example": 10, - "type": "integer" + "sort": { + "items": { + "type": "string" + }, + "type": "array" }, - "property_id": { - "example": "19681371", - "type": "string" + "sub_category": { + "items": { + "type": "string" + }, + "type": "array" } }, - "required": [ - "check_in", - "check_out", - "property_id" - ], "type": "object" }, - "hotels.ReviewsArchiveResponse": { + "goldin.ListingLotRef": { "properties": { - "has_more": { - "type": "boolean" - }, - "page": { - "type": "integer" - }, - "page_size": { + "lot_number": { "type": "integer" }, - "property_id": { + "slug": { "type": "string" - }, - "reviews": { - "items": { - "$ref": "#/definitions/hotels.ReviewArchive" - }, - "type": "array" } }, "type": "object" }, - "hotels.ReviewsOption": { + "goldin.ListingResult": { "properties": { - "adults": { - "example": 2, - "type": "integer" + "allow_offers": { + "description": "AllowOffers, SoldAt, and FinalPrice are only present for\nAuctionType \"Fixed_Price\" lots (Goldin's Buy Now marketplace).", + "type": "boolean" }, - "check_in": { - "example": "2026-09-10", + "auction_id": { "type": "string" }, - "check_out": { - "example": "2026-09-11", + "auction_name": { "type": "string" }, - "currency": { - "example": "USD", + "auction_type": { "type": "string" }, - "locale": { - "example": "en_US", - "type": "string" + "buyer_premium": { + "type": "number" }, - "property_id": { - "example": "19681371", + "category": { "type": "string" - } - }, - "required": [ - "check_in", - "check_out", - "property_id" - ], - "type": "object" - }, - "hotels.ReviewsResponse": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/hotels.ReviewCategory" - }, - "type": "array" }, - "overall_rating": { + "current_price": { + "type": "integer" + }, + "description": { "type": "string" }, - "property_id": { + "end_time": { "type": "string" }, - "reviews": { - "items": { - "$ref": "#/definitions/hotels.Review" - }, - "type": "array" + "final_price": { + "type": "integer" }, - "superlative": { - "type": "string" - } - }, - "type": "object" - }, - "hotels.RoomOffer": { - "properties": { - "id": { + "grading_company": { + "description": "GradingCompany is the third-party grader, e.g. \"PSA\" -- present only\nfor graded items. Not the same enum as Search's certification\nfilter, which also includes \"Ungraded\".", "type": "string" }, - "messages": { + "images": { "items": { "type": "string" }, "type": "array" }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "hotels.SearchOption": { - "properties": { - "adults": { - "example": 2, - "type": "integer" - }, - "check_in": { - "example": "2026-09-10", - "type": "string" - }, - "check_out": { - "example": "2026-09-11", - "type": "string" - }, - "currency": { - "example": "USD", + "item_type": { "type": "string" }, - "locale": { - "example": "en_US", + "lot_id": { "type": "string" }, - "page": { - "example": 1, + "lot_number": { "type": "integer" }, - "page_size": { - "example": 20, + "min_bid_price": { "type": "integer" }, - "query": { - "example": "New York", - "type": "string" + "next_lot": { + "$ref": "#/definitions/goldin.ListingLotRef" }, - "region_id": { - "example": "2621", - "type": "string" + "number_of_bids": { + "type": "integer" }, - "rooms": { - "example": 1, + "number_of_views": { "type": "integer" - } - }, - "required": [ - "check_in", - "check_out" - ], - "type": "object" - }, - "hotels.SearchProperty": { - "properties": { - "amenities": { - "items": { - "type": "string" - }, - "type": "array" }, - "badges": { - "items": { - "type": "string" - }, - "type": "array" + "previous_lot": { + "$ref": "#/definitions/goldin.ListingLotRef" }, - "id": { - "type": "string" + "reserve_amount": { + "type": "number" }, - "location": { + "serial_number": { "type": "string" }, - "name": { + "slug": { "type": "string" }, - "nightly_price": { + "sold_at": { "type": "string" }, - "price": { + "source_url": { "type": "string" }, - "review_count": { - "type": "integer" - }, - "review_score": { - "type": "number" - }, - "review_title": { + "start_time": { "type": "string" }, - "strikeout_price": { + "status": { "type": "string" }, - "thumbnail_url": { + "sub_category": { "type": "string" }, - "url": { + "title": { "type": "string" } }, "type": "object" }, - "hotels.SearchResponse": { + "goldin.SearchLot": { "properties": { - "check_in": { - "type": "string" + "allow_offers": { + "description": "AllowOffers, SoldAt, and FinalPrice are only present for\nAuctionTypeFixedPrice lots.", + "type": "boolean" }, - "check_out": { + "auction_id": { "type": "string" }, - "destination": { + "auction_type": { "type": "string" }, - "page": { - "type": "integer" + "buyer_premium": { + "type": "number" }, - "properties": { - "items": { - "$ref": "#/definitions/hotels.SearchProperty" - }, - "type": "array" + "current_price": { + "description": "CurrentPrice is the current bid (AuctionTypeAuction) or the Buy Now\nprice (AuctionTypeFixedPrice) -- always present regardless of pool.", + "type": "integer" }, - "region_id": { + "end_time": { "type": "string" }, - "results_label": { - "type": "string" - } - }, - "type": "object" - }, - "hotels.Suggestion": { - "properties": { - "airport_code": { + "final_price": { + "type": "integer" + }, + "image_url": { "type": "string" }, - "geo_type": { + "lot_id": { "type": "string" }, - "latitude": { - "type": "number" + "lot_number": { + "description": "LotNumber, MinBidPrice, NumberOfBids, ReserveAmount, StartTime, and\nEndTime are only present for AuctionTypeAuction lots -- omitted\n(not just zero) for AuctionTypeFixedPrice, which has no lot\nnumbering, bidding, or auction window.", + "type": "integer" }, - "location_full_name": { - "type": "string" + "min_bid_price": { + "type": "integer" }, - "longitude": { + "number_of_bids": { + "type": "integer" + }, + "reserve_amount": { "type": "number" }, - "primary_text": { + "slug": { + "description": "Slug is the lot's meta_slug -- pass as slug to goldin-listing for\nfull lot detail.", "type": "string" }, - "property_id": { + "sold_at": { "type": "string" }, - "region_id": { + "start_time": { "type": "string" }, - "secondary_text": { + "status": { "type": "string" }, - "type": { + "title": { "type": "string" } }, "type": "object" }, - "hotels.autocompleteResponseDoc": { + "goldin.SearchResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "auction_type": { + "type": "string" }, - "data": { - "$ref": "#/definitions/hotels.AutocompleteResponse" + "lots": { + "items": { + "$ref": "#/definitions/goldin.SearchLot" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "page": { + "type": "integer" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "hotels.offersResponseDoc": { + "goldin.SuggestResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "keyword": { + "type": "string" }, - "data": { - "$ref": "#/definitions/hotels.OffersResponse" + "suggestions": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "total": { + "description": "Total is Goldin's own count of lots the raw keyword itself would\nmatch, not the number of suggestions returned.", + "type": "integer" } }, "type": "object" }, - "hotels.propertyResponseDoc": { + "goldin.auctionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hotels.PropertyResponse" + "$ref": "#/definitions/goldin.AuctionsResponse" }, "msg": { "example": "OK", @@ -109204,14 +115073,14 @@ }, "type": "object" }, - "hotels.ratesResponseDoc": { + "goldin.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hotels.RatesResponse" + "$ref": "#/definitions/goldin.CategoriesResponse" }, "msg": { "example": "OK", @@ -109220,14 +115089,14 @@ }, "type": "object" }, - "hotels.reviewsArchiveResponseDoc": { + "goldin.listingResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hotels.ReviewsArchiveResponse" + "$ref": "#/definitions/goldin.ListingResult" }, "msg": { "example": "OK", @@ -109236,14 +115105,14 @@ }, "type": "object" }, - "hotels.reviewsResponseDoc": { + "goldin.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hotels.ReviewsResponse" + "$ref": "#/definitions/goldin.SearchResponse" }, "msg": { "example": "OK", @@ -109252,14 +115121,14 @@ }, "type": "object" }, - "hotels.searchResponseDoc": { + "goldin.suggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/hotels.SearchResponse" + "$ref": "#/definitions/goldin.SuggestResponse" }, "msg": { "example": "OK", @@ -109268,93 +115137,104 @@ }, "type": "object" }, - "houstonchronicle.AuthorArticle": { + "goodreads.AuthorBooksResponse": { "properties": { - "summary": { + "author_id": { "type": "string" }, - "title": { - "type": "string" + "books": { + "items": { + "$ref": "#/definitions/goodreads.BookListItem" + }, + "type": "array" }, - "url": { + "page": { + "type": "integer" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "houstonchronicle.AuthorResponse": { + "goodreads.AuthorQuotesResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/houstonchronicle.AuthorArticle" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { - "type": "string" - }, - "job_title": { + "author_id": { "type": "string" }, - "name": { - "type": "string" + "page": { + "type": "integer" }, - "same_as": { + "quotes": { "items": { - "type": "string" + "$ref": "#/definitions/goodreads.Quote" }, "type": "array" }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "huffpost.AuthorResponse": { + "goodreads.AuthorResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/huffpost.HeadlineItem" - }, - "type": "array" + "about": { + "type": "string" }, - "biography": { + "average_rating": { + "example": 4.3, + "type": "number" + }, + "birth_date": { + "example": "August 11, 1962", + "type": "string" + }, + "death_date": { + "type": "string" + }, + "genres": { "items": { "type": "string" }, "type": "array" }, - "image_url": { + "id": { + "example": "153394", "type": "string" }, - "job_title": { + "image_url": { "type": "string" }, "name": { + "example": "Suzanne Collins", "type": "string" }, - "social_links": { - "items": { - "$ref": "#/definitions/huffpost.AuthorSocialLink" - }, - "type": "array" + "ratings_count": { + "type": "integer" }, - "url": { + "reviews_count": { + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "uri": { + "type": "string" + }, + "website": { "type": "string" } }, "type": "object" }, - "huffpost.AuthorSocialLink": { + "goodreads.BookContributor": { "properties": { - "platform": { + "name": { + "type": "string" + }, + "role": { + "example": "Author", "type": "string" }, "url": { @@ -109363,930 +115243,514 @@ }, "type": "object" }, - "huffpost.HeadlineItem": { + "goodreads.BookListItem": { "properties": { "author": { "type": "string" }, - "image_url": { - "type": "string" + "average_rating": { + "example": 4.35, + "type": "number" }, - "published_at": { + "id": { "type": "string" }, - "summary": { - "type": "string" + "ratings_count": { + "type": "integer" }, "title": { "type": "string" }, - "type": { - "type": "string" - }, - "url": { + "uri": { "type": "string" } }, "type": "object" }, - "ign.AuthorResponse": { + "goodreads.BookRating": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/ign.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { - "type": "string" - }, - "job_title": { - "type": "string" - }, - "location": { - "type": "string" - }, - "name": { - "type": "string" + "average": { + "example": 4.35, + "type": "number" }, - "social_links": { - "items": { - "$ref": "#/definitions/ign.AuthorSocialLink" - }, - "type": "array" + "distribution": { + "$ref": "#/definitions/goodreads.BookRatingDistribution" }, - "url": { - "type": "string" + "ratings_count": { + "example": 10177796, + "type": "integer" }, - "username": { - "type": "string" + "reviews_count": { + "example": 272857, + "type": "integer" } }, "type": "object" }, - "ign.AuthorSocialLink": { + "goodreads.BookRatingDistribution": { "properties": { - "platform": { - "type": "string" + "five_star": { + "type": "integer" }, - "url": { - "type": "string" + "four_star": { + "type": "integer" + }, + "one_star": { + "type": "integer" + }, + "three_star": { + "type": "integer" + }, + "two_star": { + "type": "integer" } }, "type": "object" }, - "ign.HeadlineItem": { + "goodreads.BookResponse": { "properties": { - "author": { - "type": "string" + "authors": { + "items": { + "$ref": "#/definitions/goodreads.BookContributor" + }, + "type": "array" }, - "image_url": { + "description": { "type": "string" }, - "published_at": { + "format": { + "example": "Hardcover", "type": "string" }, - "summary": { + "genres": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "example": "2767052", "type": "string" }, - "title": { + "image_url": { "type": "string" }, - "type": { + "isbn": { "type": "string" }, - "url": { + "isbn13": { "type": "string" - } - }, - "type": "object" - }, - "ikea.AvailabilityResponse": { - "properties": { - "available_for_click_collect": { - "type": "boolean" }, - "available_for_home_delivery": { - "type": "boolean" + "language": { + "example": "English", + "type": "string" }, - "click_collect": { - "$ref": "#/definitions/ikea.PickupAvailability" + "pages": { + "example": 374, + "type": "integer" }, - "country": { - "example": "us", + "publication_date": { + "example": "2008-10-14", "type": "string" }, - "fetched_at": { + "publisher": { "type": "string" }, - "home_delivery": { - "$ref": "#/definitions/ikea.DeliveryAvailability" + "rating": { + "$ref": "#/definitions/goodreads.BookRating" }, - "item_no": { - "example": "80213074", + "series": { + "example": "The Hunger Games #1", "type": "string" }, "source_url": { "type": "string" + }, + "title": { + "example": "The Hunger Games", + "type": "string" + }, + "uri": { + "type": "string" } }, "type": "object" }, - "ikea.CategoriesResponse": { + "goodreads.Edition": { "properties": { - "categories": { + "asin": { + "description": "Amazon ASIN of the edition.", + "type": "string" + }, + "authors": { + "description": "Names of the authors credited on the edition.", "items": { - "$ref": "#/definitions/ikea.CategoryEntry" + "type": "string" }, "type": "array" }, - "country": { - "example": "us", + "average_rating": { + "description": "Average rating of the edition out of 5.", + "example": 4.35, + "type": "number" + }, + "book_id": { + "description": "Goodreads book id of this edition.", "type": "string" }, - "fetched_at": { + "format": { + "description": "Binding or format of the edition, such as `Hardcover`.", + "example": "Hardcover", "type": "string" }, - "has_next": { - "example": true, - "type": "boolean" + "isbn": { + "description": "ISBN-10 of the edition.", + "type": "string" + }, + "isbn13": { + "description": "ISBN-13 of the edition.", + "type": "string" }, "language": { - "example": "en", + "description": "Language the edition is published in.", "type": "string" }, - "page": { - "example": 1, + "pages": { + "description": "Number of pages in the edition.", "type": "integer" }, - "page_size": { - "example": 100, - "type": "integer" + "publication_date": { + "description": "Publication date as Goodreads shows it, such as `October 14th 2008`.", + "example": "October 14th 2008", + "type": "string" }, - "source_url": { + "publisher": { + "description": "Publisher of the edition.", "type": "string" }, - "total": { - "example": 929, + "ratings_count": { + "description": "Number of ratings the edition has received.", "type": "integer" + }, + "title": { + "description": "Title of the edition.", + "type": "string" + }, + "uri": { + "description": "Goodreads URL of the edition's book page.", + "type": "string" } }, "type": "object" }, - "ikea.CategoryEntry": { + "goodreads.EditionsResponse": { "properties": { - "key": { - "example": "20649", + "book_id": { + "description": "Goodreads book id that was requested.", "type": "string" }, - "level": { - "description": "Level is this category's depth in the taxonomy tree: 1 for a\ntop-level department, 2 for its direct children, and so on.", - "example": 2, + "editions": { + "description": "Editions of the work on this page.", + "items": { + "$ref": "#/definitions/goodreads.Edition" + }, + "type": "array" + }, + "page": { + "description": "Page number of editions returned.", "type": "integer" }, - "name": { - "example": "Desks & computer desks", + "source_url": { + "description": "URL the data was read from.", "type": "string" }, - "parent_key": { - "description": "ParentKey is the immediate parent category's own key, empty for a\ntop-level department. Some categories are cross-listed under more\nthan one parent in IKEA's own taxonomy (e.g. \"Knobs and handles\"\nunder both PAX and BESTÅ) -- ParentKey records one such parent, not\nevery one; see this file's doc comment.", - "example": "20649", + "title": { + "description": "Title of the work as shown on the editions page.", "type": "string" }, - "url": { + "work_id": { + "description": "Goodreads work id shared by all the editions listed.", "type": "string" } }, "type": "object" }, - "ikea.CategoryRef": { + "goodreads.GenreBookItem": { "properties": { - "key": { - "example": "20649", + "author": { "type": "string" }, - "name": { - "example": "Desks & computer desks", - "type": "string" - } - }, - "type": "object" - }, - "ikea.CategoryResponse": { - "properties": { - "category_key": { - "example": "20649", + "author_id": { "type": "string" }, - "category_name": { - "example": "Desks & computer desks", - "type": "string" + "average_rating": { + "example": 4.47, + "type": "number" }, - "category_url": { + "id": { "type": "string" }, - "count": { - "description": "Count is the number of products returned in this page; Total is\nIKEA's own total match count for the category. A request whose\nOffset is beyond Total returns Count 0 and Total 0 (IKEA's own\nresponse omits total-count metadata once the offset runs past the\nend of the result set -- confirmed live 2026-08-20).", - "example": 24, + "publication_year": { "type": "integer" }, - "country": { - "example": "us", - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "language": { - "example": "en", - "type": "string" - }, - "offset": { - "example": 0, + "ratings_count": { "type": "integer" }, - "products": { - "items": { - "$ref": "#/definitions/ikea.ProductSummary" - }, - "type": "array" - }, - "sort": { - "example": "relevance", - "type": "string" - }, - "source_url": { - "type": "string" - }, - "total": { - "example": 263, + "shelved_count": { + "description": "ShelvedCount is how many users have shelved this specific book under\nthis genre tag — a per-genre popularity signal distinct from the\nbook's overall ratings_count.", "type": "integer" - } - }, - "type": "object" - }, - "ikea.Color": { - "properties": { - "hex": { - "example": "ffffff", - "type": "string" }, - "id": { - "example": "10156", + "title": { "type": "string" }, - "name": { - "example": "white", + "uri": { "type": "string" } }, "type": "object" }, - "ikea.DeliveryAvailability": { + "goodreads.GenreResponse": { "properties": { - "in_range": { - "type": "boolean" + "books": { + "items": { + "$ref": "#/definitions/goodreads.GenreBookItem" + }, + "type": "array" }, - "message_type": { - "description": "MessageType is IKEA's own stock-probability code, e.g.\n\"HIGH_IN_STOCK\", \"LOW_IN_STOCK\", \"OUT_OF_STOCK\" -- values other than\nthese three were not observed live this pass; surfaced verbatim\nrather than validated against a closed enum since it is response\ndata from IKEA's own system, not a caller-supplied parameter.", - "example": "HIGH_IN_STOCK", + "name": { "type": "string" }, - "updated_at": { + "source_url": { "type": "string" } }, "type": "object" }, - "ikea.PickupAvailability": { - "properties": { - "in_range": { - "type": "boolean" - } - }, - "type": "object" - }, - "ikea.Price": { + "goodreads.ListDirectoryItem": { "properties": { - "currency_code": { - "example": "USD", - "type": "string" - }, - "current": { - "example": 99.99, - "type": "number" - }, - "discount_amount": { - "example": 15.01, - "type": "number" - }, - "discount_percentage": { - "example": 15, - "type": "number" - }, - "formatted": { - "example": "$99.99", - "type": "string" - }, - "previous": { - "example": 95, - "type": "number" - }, - "previous_formatted": { - "example": "$95.00", - "type": "string" - }, - "tag": { - "description": "Tag is IKEA's own price-badge code, e.g. \"FAMILY_PRICE\" for an IKEA\nFamily member price. TagText is its human-readable label, e.g. \"IKEA\nFamily price\".", - "example": "FAMILY_PRICE", - "type": "string" - }, - "tag_text": { - "example": "IKEA Family price", + "category": { + "example": "general", "type": "string" }, - "valid_from": { - "example": "2026-08-03", + "id": { + "example": "1", "type": "string" }, - "valid_to": { - "example": "2026-09-07", + "name": { + "example": "Best Books Ever", "type": "string" } }, "type": "object" }, - "ikea.Product": { + "goodreads.ListResponse": { "properties": { - "category_path": { - "items": { - "$ref": "#/definitions/ikea.CategoryRef" - }, - "type": "array" - }, - "colors": { - "items": { - "$ref": "#/definitions/ikea.Color" - }, - "type": "array" - }, - "filter_class": { - "description": "FilterClass is IKEA's own product-type slug, e.g. \"desks\" -- usable as\na coarse category signal, though it is not currently accepted back as\na category-browse filter by this endpoint (see this package's doc\ncomment).", - "example": "desks", - "type": "string" - }, - "image_url": { - "type": "string" - }, - "images": { - "items": { - "$ref": "#/definitions/ikea.ProductImage" - }, - "type": "array" - }, - "item_no": { - "example": "80213074", - "type": "string" - }, - "measure_text": { - "example": "41 3/8x19 5/8 \"", - "type": "string" - }, - "name": { - "example": "MICKE", - "type": "string" - }, - "price": { - "$ref": "#/definitions/ikea.Price" - }, - "product_url": { - "type": "string" - }, - "quick_facts": { + "books": { "items": { - "$ref": "#/definitions/ikea.QuickFact" + "$ref": "#/definitions/goodreads.BookListItem" }, "type": "array" }, - "rating": { - "$ref": "#/definitions/ikea.Rating" - }, - "type_name": { - "example": "Desk", - "type": "string" - }, - "valid_design": { - "description": "ValidDesign is IKEA's own color/finish descriptor for this exact item,\ne.g. \"white\" or \"black-brown\" -- the design this specific item number\nrepresents, as opposed to Colors below (every color swatch shown for\nthe product family).", - "example": "white", + "id": { "type": "string" }, - "variant_count": { - "description": "VariantCount is the total number of other purchasable size/color/design\noptions this product has, which may exceed len(Variants) -- the search\nendpoint's own gprDescription block does not always enumerate every\nvariant.", - "example": 3, + "page": { "type": "integer" }, - "variants": { - "items": { - "$ref": "#/definitions/ikea.Variant" - }, - "type": "array" - } - }, - "type": "object" - }, - "ikea.ProductImage": { - "properties": { - "alt_text": { - "type": "string" - }, - "type": { - "example": "MAIN_PRODUCT_IMAGE", + "source_url": { "type": "string" }, - "url": { + "title": { + "example": "Best Books Ever", "type": "string" } }, "type": "object" }, - "ikea.ProductResponse": { + "goodreads.ListsResponse": { "properties": { - "fetched_at": { - "type": "string" - }, - "product": { - "$ref": "#/definitions/ikea.Product" - }, - "source_url": { - "type": "string" + "lists": { + "items": { + "$ref": "#/definitions/goodreads.ListDirectoryItem" + }, + "type": "array" } }, "type": "object" }, - "ikea.ProductSummary": { + "goodreads.Quote": { "properties": { - "colors": { - "items": { - "$ref": "#/definitions/ikea.Color" - }, - "type": "array" - }, - "filter_class": { - "description": "FilterClass is IKEA's own product-type slug, e.g. \"desks\" -- usable as\na coarse category signal, though it is not currently accepted back as\na category-browse filter by this endpoint (see this package's doc\ncomment).", - "example": "desks", - "type": "string" - }, - "image_url": { - "type": "string" - }, - "item_no": { - "example": "80213074", - "type": "string" - }, - "measure_text": { - "example": "41 3/8x19 5/8 \"", - "type": "string" - }, - "name": { - "example": "MICKE", + "author": { "type": "string" }, - "price": { - "$ref": "#/definitions/ikea.Price" - }, - "product_url": { + "book_id": { "type": "string" }, - "rating": { - "$ref": "#/definitions/ikea.Rating" - }, - "type_name": { - "example": "Desk", + "book_title": { "type": "string" }, - "valid_design": { - "description": "ValidDesign is IKEA's own color/finish descriptor for this exact item,\ne.g. \"white\" or \"black-brown\" -- the design this specific item number\nrepresents, as opposed to Colors below (every color swatch shown for\nthe product family).", - "example": "white", + "id": { "type": "string" }, - "variant_count": { - "description": "VariantCount is the total number of other purchasable size/color/design\noptions this product has, which may exceed len(Variants) -- the search\nendpoint's own gprDescription block does not always enumerate every\nvariant.", - "example": 3, + "likes": { "type": "integer" }, - "variants": { + "tags": { "items": { - "$ref": "#/definitions/ikea.Variant" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "ikea.QuickFact": { - "properties": { - "name": { - "example": "Firm", - "type": "string" - }, - "type_name": { - "example": "Firmness", - "type": "string" - } - }, - "type": "object" - }, - "ikea.Rating": { - "properties": { - "count": { - "example": 6367, - "type": "integer" - }, - "value": { - "example": 4.5, - "type": "number" - } - }, - "type": "object" - }, - "ikea.RelatedSearch": { - "properties": { - "count": { - "example": 48, - "type": "integer" }, "text": { - "example": "desk chair", - "type": "string" - } - }, - "type": "object" - }, - "ikea.Review": { - "properties": { - "author": { - "example": "Alexis", - "type": "string" - }, - "author_country": { - "description": "AuthorCountry is the reviewer's own self-reported country, as IKEA\ndisplays it (e.g. \"United States\") -- not a normalized country code.", - "example": "United States", "type": "string" }, - "rating": { - "example": 5, - "type": "integer" - }, - "text": { + "uri": { "type": "string" }, - "title": { - "example": "Great buy", + "work_id": { "type": "string" } }, "type": "object" }, - "ikea.ReviewsResponse": { + "goodreads.Review": { "properties": { - "average_rating": { - "example": 4.5, - "type": "number" - }, - "count": { - "example": 3, + "comment_count": { "type": "integer" }, - "fetched_at": { - "type": "string" + "contains_spoilers": { + "type": "boolean" }, - "item_no": { - "example": "80213074", + "date": { + "example": "2020-09-18", "type": "string" }, - "rating_count": { - "example": 6367, + "like_count": { "type": "integer" }, - "reviews": { - "items": { - "$ref": "#/definitions/ikea.Review" - }, - "type": "array" - }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "ikea.SearchResponse": { - "properties": { - "count": { - "description": "Count is the number of products returned in this response; Total is\nIKEA's own total match count across the full result set (there is no\nconfirmed-working pagination parameter for retrieving results beyond\nSize in one call -- see this package's doc comment).", - "example": 24, + "rating": { + "example": 5, "type": "integer" }, - "country": { - "example": "us", - "type": "string" - }, - "did_you_mean": { - "description": "DidYouMean is populated only when IKEA's own spell-correction\nsuggests a different query than the one submitted.", - "items": { - "type": "string" - }, - "type": "array" - }, - "fetched_at": { - "type": "string" - }, - "language": { - "example": "en", + "reviewer": { "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/ikea.ProductSummary" - }, - "type": "array" - }, - "query": { - "example": "desk", + "reviewer_url": { "type": "string" }, - "related_searches": { - "description": "RelatedSearches are IKEA's own suggested related queries with their\nown result counts.", - "items": { - "$ref": "#/definitions/ikea.RelatedSearch" - }, - "type": "array" - }, - "source_url": { + "text": { "type": "string" - }, - "total": { - "example": 203, - "type": "integer" } }, "type": "object" }, - "ikea.StoreAddress": { + "goodreads.ReviewsResponse": { "properties": { - "city": { - "example": "Burbank", - "type": "string" - }, - "country": { - "example": "US", - "type": "string" - }, - "postal_code": { - "example": "91502", - "type": "string" - }, - "state": { - "example": "CA", - "type": "string" - }, - "street": { - "example": "600 South IKEA Way", + "id": { "type": "string" - } - }, - "type": "object" - }, - "ikea.StoreAndDetail": { - "properties": { - "address": { - "$ref": "#/definitions/ikea.StoreAddress" - }, - "geo": { - "$ref": "#/definitions/ikea.StoreGeo" }, - "hours": { + "reviews": { "items": { - "$ref": "#/definitions/ikea.StoreHours" + "$ref": "#/definitions/goodreads.Review" }, "type": "array" }, - "location_type": { - "example": "Store", - "type": "string" - }, - "name": { - "example": "IKEA Burbank", - "type": "string" - }, - "price_range": { - "example": "$$", - "type": "string" - }, - "slug": { - "example": "burbank", - "type": "string" - }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "ikea.StoreGeo": { - "properties": { - "latitude": { - "example": 34.1745, - "type": "number" - }, - "longitude": { - "example": -118.3032, - "type": "number" - } - }, - "type": "object" - }, - "ikea.StoreHours": { + "goodreads.SearchResponse": { "properties": { - "closes": { - "example": "21:00", + "query": { + "description": "Search query that was run.", "type": "string" }, - "days": { - "example": [ - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Sunday" - ], + "results": { + "description": "Books matching the query.", "items": { - "type": "string" + "$ref": "#/definitions/goodreads.SearchResult" }, "type": "array" }, - "opens": { - "example": "10:00", + "source_url": { + "description": "URL the data was read from.", "type": "string" } }, "type": "object" }, - "ikea.StoreRef": { + "goodreads.SearchResult": { "properties": { - "location_type": { - "description": "LocationType is IKEA's own location-type label, e.g. \"Store\",\n\"Small store\", \"Plan & order point with pick-up\", \"Order point\",\n\"Pick-up point\" -- surfaced verbatim rather than validated against a\nclosed enum since it is response data from IKEA's own directory, not\na caller-supplied parameter.", - "example": "Store", + "author": { + "description": "Name of the book's author.", "type": "string" }, - "name": { - "example": "IKEA Burbank, CA", + "author_id": { + "description": "Goodreads author id.", "type": "string" }, - "region": { - "description": "Region is the directory's own grouping heading for this location\n(e.g. \"Los Angeles Area & Southern California\"). Empty for the\ndirectory's leading entries, which appear before any region heading\n-- confirmed live 2026-08-20.", - "example": "Los Angeles Area & Southern California", - "type": "string" + "average_rating": { + "description": "Average rating of the book out of 5.", + "example": 4.35, + "type": "number" }, - "slug": { - "example": "burbank", + "description": { + "description": "Book description, shortened to a short excerpt.", "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "ikea.StoreResponse": { - "properties": { - "fetched_at": { + "id": { + "description": "Goodreads book id.", "type": "string" }, - "source_url": { + "image_url": { + "description": "URL of the book cover image.", "type": "string" }, - "store": { - "$ref": "#/definitions/ikea.StoreAndDetail" - } - }, - "type": "object" - }, - "ikea.StoresResponse": { - "properties": { - "count": { - "example": 84, + "pages": { + "description": "Number of pages in the book.", "type": "integer" }, - "country": { - "example": "us", - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "language": { - "example": "en", - "type": "string" - }, - "source_url": { - "type": "string" - }, - "stores": { - "items": { - "$ref": "#/definitions/ikea.StoreRef" - }, - "type": "array" - } - }, - "type": "object" - }, - "ikea.SuggestResponse": { - "properties": { - "count": { - "example": 5, + "ratings_count": { + "description": "Number of ratings the book has received.", "type": "integer" }, - "country": { - "example": "us", - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "language": { - "example": "en", - "type": "string" - }, - "products": { - "items": { - "$ref": "#/definitions/ikea.ProductSummary" - }, - "type": "array" - }, - "query": { - "example": "des", + "title": { + "description": "Title of the book as Goodreads shows it.", "type": "string" }, - "source_url": { + "uri": { + "description": "Goodreads URL of the book page.", "type": "string" - }, - "suggestions": { - "items": { - "$ref": "#/definitions/ikea.RelatedSearch" - }, - "type": "array" } }, "type": "object" }, - "ikea.Variant": { + "goodreads.authorBooksResponseDoc": { "properties": { - "image_url": { - "type": "string" - }, - "item_no": { - "example": "10244743", - "type": "string" - }, - "name": { - "example": "MICKE", - "type": "string" - }, - "price": { - "$ref": "#/definitions/ikea.Price" - }, - "product_url": { - "type": "string" - }, - "rating": { - "$ref": "#/definitions/ikea.Rating" + "code": { + "example": 200, + "type": "integer" }, - "type_name": { - "example": "Desk", - "type": "string" + "data": { + "$ref": "#/definitions/goodreads.AuthorBooksResponse" }, - "valid_design": { - "example": "black-brown", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "ikea.availabilityResponseDoc": { + "goodreads.authorQuotesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ikea.AvailabilityResponse" + "$ref": "#/definitions/goodreads.AuthorQuotesResponse" }, "msg": { "example": "OK", @@ -110295,14 +115759,14 @@ }, "type": "object" }, - "ikea.categoriesResponseDoc": { + "goodreads.authorResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ikea.CategoriesResponse" + "$ref": "#/definitions/goodreads.AuthorResponse" }, "msg": { "example": "OK", @@ -110311,14 +115775,14 @@ }, "type": "object" }, - "ikea.categoryResponseDoc": { + "goodreads.bookResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ikea.CategoryResponse" + "$ref": "#/definitions/goodreads.BookResponse" }, "msg": { "example": "OK", @@ -110327,14 +115791,14 @@ }, "type": "object" }, - "ikea.productResponseDoc": { + "goodreads.editionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ikea.ProductResponse" + "$ref": "#/definitions/goodreads.EditionsResponse" }, "msg": { "example": "OK", @@ -110343,14 +115807,14 @@ }, "type": "object" }, - "ikea.reviewsResponseDoc": { + "goodreads.genreResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ikea.ReviewsResponse" + "$ref": "#/definitions/goodreads.GenreResponse" }, "msg": { "example": "OK", @@ -110359,14 +115823,14 @@ }, "type": "object" }, - "ikea.searchResponseDoc": { + "goodreads.listResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ikea.SearchResponse" + "$ref": "#/definitions/goodreads.ListResponse" }, "msg": { "example": "OK", @@ -110375,14 +115839,14 @@ }, "type": "object" }, - "ikea.storeResponseDoc": { + "goodreads.listsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ikea.StoreResponse" + "$ref": "#/definitions/goodreads.ListsResponse" }, "msg": { "example": "OK", @@ -110391,14 +115855,14 @@ }, "type": "object" }, - "ikea.storesResponseDoc": { + "goodreads.reviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ikea.StoresResponse" + "$ref": "#/definitions/goodreads.ReviewsResponse" }, "msg": { "example": "OK", @@ -110407,14 +115871,14 @@ }, "type": "object" }, - "ikea.suggestResponseDoc": { + "goodreads.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/ikea.SuggestResponse" + "$ref": "#/definitions/goodreads.SearchResponse" }, "msg": { "example": "OK", @@ -110423,2338 +115887,1845 @@ }, "type": "object" }, - "imdb.AlternateTitle": { + "goodrx.AnswerDrug": { "properties": { - "country": { - "description": "Country or region the alternate title is used in.", - "example": "United States", + "info_url": { "type": "string" }, - "title": { - "description": "Alternate title as listed for that country.", - "example": "Inception", + "name": { "type": "string" }, - "type": { - "description": "Kind of alternate title, when IMDb gives one.", - "example": "original title", + "slug": { "type": "string" } }, "type": "object" }, - "imdb.AwardItem": { + "goodrx.AnswerRef": { "properties": { - "award": { - "description": "Name of the award given, for example `Oscar`.", - "example": "Oscar", + "drug": { "type": "string" }, - "category": { - "description": "Award category, for example `Best Motion Picture of the Year`.", - "example": "Best Motion Picture of the Year", + "question": { "type": "string" }, - "event": { - "description": "Name of the awards event, for example `Academy Awards, USA`.", - "example": "Academy Awards, USA", + "slug": { "type": "string" }, - "notes": { - "description": "Extra note IMDb attaches to the award entry.", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "goodrx.AnswerResponse": { + "properties": { + "answer": { "type": "string" }, - "public_signals": { - "description": "Number of details filled in on this entry, counted across event, year, category, result, award, recipients, titles and notes.", - "example": 6, - "type": "integer" - }, - "recipients": { - "description": "People who received the award.", + "articles": { "items": { - "$ref": "#/definitions/imdb.Person" + "$ref": "#/definitions/goodrx.ArticleRef" }, "type": "array" }, - "result": { - "description": "Outcome of the entry, for example `nomination`.", - "example": "nomination", - "type": "string" + "drug": { + "$ref": "#/definitions/goodrx.AnswerDrug" }, - "titles": { - "description": "Titles the award entry refers to.", + "more_questions": { "items": { - "$ref": "#/definitions/imdb.AwardTitle" + "$ref": "#/definitions/goodrx.AnswerRef" }, "type": "array" }, - "year": { - "description": "Year of the award entry, for example `2011`.", - "example": "2011", - "type": "string" - } - }, - "type": "object" - }, - "imdb.AwardTitle": { - "properties": { - "id": { - "description": "IMDb title ID, for example `tt1375666`.", - "example": "tt1375666", - "type": "string" + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" }, - "title": { - "description": "Name of the title the award entry refers to.", - "example": "Inception", + "question": { "type": "string" }, - "url": { - "description": "IMDb page URL of the title.", - "example": "https://www.imdb.com/title/tt1375666/", - "type": "string" - } - }, - "type": "object" - }, - "imdb.ChartResponse": { - "properties": { - "chart": { - "example": "top_rated_movies", - "type": "string" + "related_drugs": { + "items": { + "$ref": "#/definitions/goodrx.DrugLink" + }, + "type": "array" }, - "fetched_at": { - "example": "2026-08-22T14:46:16Z", + "slug": { "type": "string" }, - "limit": { - "example": 25, - "type": "integer" - }, "source_url": { - "example": "https://www.imdb.com/chart/top/", "type": "string" }, - "titles": { - "items": { - "$ref": "#/definitions/imdb.ChartTitle" - }, - "type": "array" + "url": { + "type": "string" } }, "type": "object" }, - "imdb.ChartTitle": { + "goodrx.AnswersResponse": { "properties": { - "cast": { + "questions": { "items": { - "$ref": "#/definitions/imdb.Person" + "$ref": "#/definitions/goodrx.AnswerRef" }, "type": "array" }, - "directors": { + "top_questions": { "items": { - "$ref": "#/definitions/imdb.Person" + "$ref": "#/definitions/goodrx.AnswerRef" }, "type": "array" }, - "id": { - "example": "tt0111161", - "type": "string" - }, - "rank": { - "example": 1, - "type": "integer" - }, - "rating_count": { - "example": 3227390, + "total": { "type": "integer" - }, - "rating_value": { - "example": 9.3, - "type": "number" - }, + } + }, + "type": "object" + }, + "goodrx.ArticleRef": { + "properties": { "title": { - "example": "The Shawshank Redemption", "type": "string" }, "url": { - "example": "https://www.imdb.com/title/tt0111161/", "type": "string" - }, - "writers": { + } + }, + "type": "object" + }, + "goodrx.BrandsResponse": { + "properties": { + "drugs": { "items": { - "$ref": "#/definitions/imdb.Person" + "$ref": "#/definitions/goodrx.DrugLink" }, "type": "array" - }, - "year": { - "example": 1994, - "type": "integer" } }, "type": "object" }, - "imdb.CompanyItem": { + "goodrx.ClassRef": { "properties": { "name": { - "description": "Company name as listed on IMDb.", - "example": "Warner Bros.", "type": "string" }, - "note": { - "description": "Note shown next to the company, for example `presents`.", - "example": "presents", + "slug": { "type": "string" }, - "public_signals": { - "description": "Number of details filled in on this entry, counted across name, URL and note.", - "example": 2, - "type": "integer" - }, "url": { - "description": "IMDb page URL of the company.", - "example": "https://www.imdb.com/company/co0002663/", "type": "string" } }, "type": "object" }, - "imdb.CompanySection": { + "goodrx.ClassResponse": { "properties": { - "companies": { - "description": "Companies listed in this section.", + "drugs": { "items": { - "$ref": "#/definitions/imdb.CompanyItem" + "$ref": "#/definitions/goodrx.DrugLink" }, "type": "array" }, "name": { - "description": "Section heading, for example `Production Companies`.", - "example": "Production Companies", + "type": "string" + }, + "overview": { + "description": "Overview is the class description (\"Why are ... prescribed?\").", "type": "string" }, "slug": { - "description": "Lowercase, hyphenated form of the section name, for example `production-companies`.", - "example": "production-companies", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "imdb.ConnectionAssociatedTitle": { + "goodrx.ClassesResponse": { "properties": { - "id": { - "example": "tt1936736", + "classes": { + "items": { + "$ref": "#/definitions/goodrx.ClassRef" + }, + "type": "array" + } + }, + "type": "object" + }, + "goodrx.ComparisonDrug": { + "properties": { + "info_url": { "type": "string" }, - "title": { - "example": "Why Gump? Why Now?", + "name": { "type": "string" }, - "title_type": { - "example": "TV Episode", + "prescription": { "type": "string" }, - "url": { - "example": "https://www.imdb.com/title/tt1936736/", + "slug": { "type": "string" }, - "year": { - "example": 1994, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "imdb.ConnectionItem": { + "goodrx.ComparisonRef": { "properties": { - "associated_title": { - "$ref": "#/definitions/imdb.ConnectionAssociatedTitle" + "name": { + "type": "string" }, - "category": { - "example": "Featured in", + "slug": { "type": "string" }, - "note": { - "example": "Clips appear in the teaser for next week's show.", + "url": { "type": "string" } }, "type": "object" }, - "imdb.CreditItem": { + "goodrx.ComparisonResponse": { "properties": { - "character": { - "example": "Dom Cobb", - "type": "string" + "drugs": { + "items": { + "$ref": "#/definitions/goodrx.ComparisonDrug" + }, + "type": "array" }, - "name": { - "example": "Christopher Nolan", + "key_takeaways": { + "items": { + "type": "string" + }, + "type": "array" + }, + "slug": { "type": "string" }, - "role": { - "example": "written by", + "title": { "type": "string" }, "url": { - "example": "https://www.imdb.com/name/nm0634240/", "type": "string" } }, "type": "object" }, - "imdb.CreditSection": { + "goodrx.ComparisonTopic": { "properties": { - "credits": { + "comparisons": { "items": { - "$ref": "#/definitions/imdb.CreditItem" + "$ref": "#/definitions/goodrx.ComparisonRef" }, "type": "array" }, - "has_more": { - "example": true, - "type": "boolean" - }, "name": { - "example": "Directed by", - "type": "string" - }, - "slug": { - "example": "directed-by", "type": "string" - }, - "total": { - "example": 145, - "type": "integer" } }, "type": "object" }, - "imdb.CreditsResponse": { + "goodrx.ComparisonsResponse": { "properties": { - "fetched_at": { - "example": "2026-06-07T14:46:16Z", - "type": "string" - }, - "id": { - "example": "tt1375666", - "type": "string" - }, - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "sections": { + "topics": { "items": { - "$ref": "#/definitions/imdb.CreditSection" + "$ref": "#/definitions/goodrx.ComparisonTopic" }, "type": "array" - }, - "source_url": { - "example": "https://www.imdb.com/title/tt1375666/fullcredits/", - "type": "string" - }, - "url": { - "example": "https://www.imdb.com/title/tt1375666/fullcredits/", - "type": "string" } }, "type": "object" }, - "imdb.EpisodeItem": { + "goodrx.Condition": { "properties": { - "air_date": { - "description": "Air date as IMDb shows it, for example `17 Apr 2011`, or just the year when only that is known. Omitted when IMDb has no date.", - "example": "17 Apr 2011", - "type": "string" - }, - "episode": { - "description": "Episode number within the season.", - "example": 1, - "type": "integer" - }, - "id": { - "description": "IMDb title ID of the episode.", - "example": "tt1480055", - "type": "string" + "has_medications": { + "type": "boolean" }, - "plot": { - "description": "Plot summary of the episode.", + "name": { "type": "string" }, - "public_signals": { - "description": "Number of details filled in on this episode, counted across title, season, episode number, rating, vote count and plot.", - "example": 6, - "type": "integer" - }, - "rating_count": { - "description": "Number of votes behind the episode rating.", - "example": 52000, - "type": "integer" - }, - "rating_value": { - "description": "Average IMDb user rating of the episode.", - "example": 8.9, - "type": "number" - }, - "season": { - "description": "Season number of the episode.", - "example": 1, - "type": "integer" - }, - "title": { - "description": "Title of the episode as shown on IMDb.", - "example": "Winter Is Coming", + "slug": { "type": "string" }, "url": { - "description": "IMDb page URL of the episode.", - "example": "https://www.imdb.com/title/tt1480055/", "type": "string" } }, "type": "object" }, - "imdb.EpisodesResponse": { + "goodrx.ConditionDrugsResponse": { "properties": { - "episodes": { - "description": "Episodes of the requested season, or of the first season when none was requested.", + "drugs": { "items": { - "$ref": "#/definitions/imdb.EpisodeItem" + "$ref": "#/definitions/goodrx.DrugLink" }, "type": "array" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:46:16Z", - "type": "string" - }, - "has_more": { - "description": "`true` when IMDb lists more episodes for the season than were returned.", - "example": true, - "type": "boolean" - }, - "id": { - "description": "IMDb title ID of the series, for example `tt0944947`.", - "example": "tt0944947", + "name": { "type": "string" }, - "limit": { - "description": "Maximum number of episodes requested.", - "example": 10, - "type": "integer" - }, - "public_page_derived": { - "description": "Always `true`. The data comes from IMDb's public pages.", - "example": true, - "type": "boolean" - }, - "season": { - "description": "Season number that was requested. Omitted when no season was requested.", - "example": 1, - "type": "integer" - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.imdb.com/title/tt0944947/episodes/?season=1", + "slug": { "type": "string" }, - "total": { - "description": "Number of episodes IMDb lists for the season.", - "example": 11, - "type": "integer" - }, "url": { - "description": "IMDb episodes page of the series.", - "example": "https://www.imdb.com/title/tt0944947/episodes/", "type": "string" } }, "type": "object" }, - "imdb.ImageItem": { + "goodrx.ConditionResponse": { "properties": { - "caption": { - "example": "Elisabeth Wiedemann in Holly - The Movie (1984)", + "alternate_name": { "type": "string" }, - "copyright": { - "example": "2013 Getty Images", - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/goodrx.ArticleRef" + }, + "type": "array" }, - "countries": { + "authors": { "items": { - "$ref": "#/definitions/imdb.ImageLocale" + "type": "string" }, "type": "array" }, - "created_by": { - "example": "Stanley Bielecki Movie Collection", + "date_modified": { "type": "string" }, - "created_on": { - "example": "February 16, 2026", + "date_published": { "type": "string" }, - "height": { - "example": 3024, - "type": "integer" - }, - "id": { - "example": "rm1894298369", + "description": { "type": "string" }, - "languages": { - "items": { - "$ref": "#/definitions/imdb.ImageLocale" - }, - "type": "array" - }, - "names": { - "items": { - "$ref": "#/definitions/imdb.ImageName" - }, - "type": "array" + "headline": { + "type": "string" }, - "position": { - "example": 1, - "type": "integer" + "medications_url": { + "type": "string" }, - "source": { - "example": "gettyimages.com", + "name": { "type": "string" }, - "titles": { + "sections": { "items": { - "$ref": "#/definitions/imdb.ImageTitle" + "$ref": "#/definitions/goodrx.InfoSection" }, "type": "array" }, - "type": { - "example": "still_frame", + "slug": { "type": "string" }, "url": { - "example": "https://m.media-amazon.com/images/M/MV5BZjczNmIzMjEtYmM4MC00ZjQxLTk4NjctMTA2MzEzOWI3NWRhXkEyXkFqcGc@._V1_.jpg", "type": "string" - }, - "width": { - "example": 4032, - "type": "integer" } }, "type": "object" }, - "imdb.ImageLocale": { + "goodrx.ConditionsResponse": { "properties": { - "code": { - "example": "SE", - "type": "string" - }, - "name": { - "example": "Sweden", - "type": "string" + "conditions": { + "items": { + "$ref": "#/definitions/goodrx.Condition" + }, + "type": "array" } }, "type": "object" }, - "imdb.ImageName": { + "goodrx.Configuration": { "properties": { - "id": { - "example": "nm0000151", - "type": "string" - }, - "name": { - "example": "Morgan Freeman", + "dosage": { "type": "string" }, - "url": { - "example": "https://www.imdb.com/name/nm0000151/", - "type": "string" - } - }, - "type": "object" - }, - "imdb.ImageTitle": { - "properties": { - "id": { - "example": "tt0068646", + "drug_id": { "type": "string" }, - "title": { - "example": "The Godfather", + "form": { "type": "string" }, - "url": { - "example": "https://www.imdb.com/title/tt0068646/", + "label": { "type": "string" }, - "year": { - "example": 1972, + "quantity": { "type": "integer" + }, + "summary": { + "type": "string" } }, "type": "object" }, - "imdb.ImageType": { + "goodrx.DosageOption": { "properties": { - "description": { - "example": "A frame captured from the production itself.", + "default_quantity": { + "description": "DefaultQuantity is GoodRx's default quantity for this dosage.", + "type": "integer" + }, + "drug_id": { "type": "string" }, - "label": { - "example": "Still Frame", + "name": { "type": "string" }, - "type": { - "example": "still_frame", + "quantities": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "slug": { "type": "string" } }, "type": "object" }, - "imdb.ImageTypeCount": { + "goodrx.DosagePriceRow": { "properties": { - "label": { - "example": "Still Frame", + "dosage": { "type": "string" }, - "total": { - "example": 381, - "type": "integer" + "price": { + "type": "number" }, - "type": { - "example": "still_frame", + "price_url": { "type": "string" + }, + "quantity": { + "type": "string" + }, + "unit_price": { + "type": "number" } }, "type": "object" }, - "imdb.ImageTypesResponse": { + "goodrx.DosagePriceTable": { "properties": { - "fetched_at": { - "example": "2026-09-09T14:46:16Z", + "form": { "type": "string" }, - "total": { - "example": 8, - "type": "integer" - }, - "types": { + "rows": { "items": { - "$ref": "#/definitions/imdb.ImageType" + "$ref": "#/definitions/goodrx.DosagePriceRow" }, "type": "array" } }, "type": "object" }, - "imdb.KeywordItem": { + "goodrx.DrugGuideRef": { "properties": { - "keyword": { - "description": "Keyword IMDb has tagged the title with.", - "example": "dream", + "last_modified": { "type": "string" }, - "public_signals": { - "description": "Number of details filled in on this entry, counted across keyword and URL.", - "example": 2, - "type": "integer" + "slug": { + "type": "string" }, - "url": { - "description": "IMDb page that lists titles with this keyword.", - "example": "https://www.imdb.com/search/keyword/?keywords=dream", + "title": { "type": "string" - } - }, - "type": "object" - }, - "imdb.LifetimeGross": { - "properties": { - "domestic": { - "$ref": "#/definitions/imdb.Money" }, - "international": { - "$ref": "#/definitions/imdb.Money" + "topic": { + "enum": [ + "side-effects", + "dosage", + "interactions" + ], + "type": "string" }, - "worldwide": { - "$ref": "#/definitions/imdb.Money" + "url": { + "type": "string" } }, "type": "object" }, - "imdb.LocationItem": { + "goodrx.DrugGuideResponse": { "properties": { - "location": { - "description": "Filming location name, for example `Paris, France`.", - "example": "Paris, France", + "drug": { "type": "string" }, - "note": { - "description": "Note IMDb adds about the location, such as the scene shot there.", - "example": "Ariadne learns to build dreams", + "last_reviewed": { "type": "string" }, - "public_signals": { - "description": "Number of details filled in on this entry, counted across location and note.", - "example": 2, - "type": "integer" - } - }, - "type": "object" - }, - "imdb.Money": { - "properties": { - "amount": { - "example": 28767189, - "type": "integer" + "price_tables": { + "items": { + "$ref": "#/definitions/goodrx.DosagePriceTable" + }, + "type": "array" }, - "currency": { - "example": "USD", - "type": "string" - } - }, - "type": "object" - }, - "imdb.NameAwardsResponse": { - "properties": { - "awards": { - "description": "Award entries IMDb lists for the person.", + "related": { "items": { - "$ref": "#/definitions/imdb.AwardItem" + "$ref": "#/definitions/goodrx.DrugGuideRef" }, "type": "array" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:46:16Z", - "type": "string" + "reviewed_by": { + "items": { + "type": "string" + }, + "type": "array" }, - "has_more": { - "description": "`true` when IMDb lists more award entries than were returned.", - "example": true, - "type": "boolean" + "sections": { + "items": { + "$ref": "#/definitions/goodrx.GuideSection" + }, + "type": "array" }, - "id": { - "description": "IMDb name ID of the person, for example `nm0634240`.", - "example": "nm0634240", + "slug": { "type": "string" }, - "public_page_derived": { - "description": "Always `true`. The data comes from IMDb's public pages.", - "example": true, - "type": "boolean" - }, "source_url": { - "description": "URL the data was read from.", - "example": "https://www.imdb.com/name/nm0634240/awards/", - "type": "string" - }, - "total": { - "description": "Number of award entries IMDb lists for the person.", - "example": 64, - "type": "integer" - }, - "url": { - "description": "IMDb awards page of the person.", - "example": "https://www.imdb.com/name/nm0634240/awards/", - "type": "string" - } - }, - "type": "object" - }, - "imdb.NameCreditItem": { - "properties": { - "episodes": { - "description": "Number of episodes the person is credited on, as IMDb words it, for example `3 episodes`.", - "example": "3 episodes", - "type": "string" - }, - "id": { - "description": "IMDb title ID of the credited title.", - "example": "tt1375666", "type": "string" }, - "role": { - "description": "Role or character credited for the person on the title, for example `Self`.", - "example": "directed by", - "type": "string" + "summary": { + "items": { + "type": "string" + }, + "type": "array" }, "title": { - "description": "Name of the credited title.", - "example": "Inception", "type": "string" }, - "url": { - "description": "IMDb page URL of the credited title.", - "example": "https://www.imdb.com/title/tt1375666/", + "topic": { + "enum": [ + "side-effects", + "dosage", + "interactions" + ], "type": "string" }, - "year": { - "description": "Release year of the credited title.", - "example": "2010", + "url": { "type": "string" } }, "type": "object" }, - "imdb.NameCreditSection": { + "goodrx.DrugGuidesResponse": { "properties": { - "credits": { - "description": "Credits the person has in this section.", + "guides": { "items": { - "$ref": "#/definitions/imdb.NameCreditItem" + "$ref": "#/definitions/goodrx.DrugGuideRef" }, "type": "array" }, - "has_more": { - "description": "`true` when IMDb lists more credits in this section than were returned.", - "example": true, - "type": "boolean" - }, - "name": { - "description": "Section heading, usually the job, for example `Director`.", - "example": "Director", + "letter": { "type": "string" }, - "slug": { - "description": "Lowercase, hyphenated form of the section name, for example `director`.", - "example": "director", + "topic": { "type": "string" }, "total": { - "description": "Number of credits IMDb lists in this section.", - "example": 152, "type": "integer" } }, "type": "object" }, - "imdb.NameCreditsResponse": { + "goodrx.DrugInfo": { "properties": { - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:46:16Z", + "administration_route": { "type": "string" }, - "id": { - "description": "IMDb name ID of the person, for example `nm0634240`.", - "example": "nm0634240", + "alternate_name": { "type": "string" }, - "public_page_derived": { - "description": "Always `true`. The data comes from IMDb's public pages.", - "example": true, - "type": "boolean" + "description": { + "type": "string" }, - "sections": { - "description": "Credits of the person, grouped by job.", - "items": { - "$ref": "#/definitions/imdb.NameCreditSection" - }, - "type": "array" + "drug_class": { + "$ref": "#/definitions/goodrx.ClassRef" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.imdb.com/name/nm0634240/", + "image_url": { + "type": "string" + }, + "legal_status": { + "type": "string" + }, + "name": { + "type": "string" + }, + "non_proprietary_name": { + "type": "string" + }, + "prescription_status": { + "type": "string" + }, + "slug": { "type": "string" }, "url": { - "description": "IMDb page URL of the person.", - "example": "https://www.imdb.com/name/nm0634240/", "type": "string" } }, "type": "object" }, - "imdb.NameImagesResponse": { + "goodrx.DrugInfoResponse": { "properties": { - "fetched_at": { - "example": "2026-09-09T14:46:16Z", - "type": "string" - }, - "has_more": { - "example": true, - "type": "boolean" + "alternatives": { + "items": { + "$ref": "#/definitions/goodrx.ComparisonRef" + }, + "type": "array" }, - "id": { - "example": "nm0000151", + "audience": { + "enum": [ + "people", + "pets" + ], "type": "string" }, - "images": { + "authors": { "items": { - "$ref": "#/definitions/imdb.ImageItem" + "type": "string" }, "type": "array" }, - "limit": { - "example": 50, - "type": "integer" - }, - "name": { - "example": "Morgan Freeman", + "date_modified": { "type": "string" }, - "source_url": { - "example": "https://www.imdb.com/name/nm0000151/mediaindex/", + "date_published": { "type": "string" }, - "total": { - "example": 1262, - "type": "integer" - }, - "type_counts": { + "faqs": { "items": { - "$ref": "#/definitions/imdb.ImageTypeCount" + "$ref": "#/definitions/goodrx.FAQ" }, "type": "array" }, - "types": { + "sections": { "items": { - "type": "string" + "$ref": "#/definitions/goodrx.InfoSection" }, "type": "array" }, - "url": { - "example": "https://www.imdb.com/name/nm0000151/mediaindex/", - "type": "string" - } - }, - "type": "object" - }, - "imdb.NameKnownForItem": { - "properties": { - "category": { - "description": "Credit category of the person on this title, for example `Director`.", - "example": "Director", - "type": "string" - }, - "id": { - "description": "IMDb title ID of the title.", - "example": "tt1375666", + "slug": { "type": "string" }, "title": { - "description": "Name of the title.", - "example": "Inception", "type": "string" }, "url": { - "description": "IMDb page URL of the title.", - "example": "https://www.imdb.com/title/tt1375666/", - "type": "string" - }, - "year": { - "description": "Release year of the title.", - "example": "2010", "type": "string" } }, "type": "object" }, - "imdb.NameResponse": { + "goodrx.DrugLink": { "properties": { - "bio": { - "description": "Full biography text of the person.", + "description": { "type": "string" }, - "birth_date": { - "description": "Date of birth as `YYYY-MM-DD`, or `YYYY-MM` or `YYYY` when IMDb records only part of it.", - "example": "1970-07-30", + "info_url": { "type": "string" }, - "birth_place": { - "description": "Place of birth, for example `London, England, UK`.", - "example": "London, England, UK", - "type": "string" + "lowest_price": { + "type": "number" }, - "death_date": { - "description": "Date of death as `YYYY-MM-DD`, or `YYYY-MM` or `YYYY` when IMDb records only part of it.", + "name": { "type": "string" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:46:16Z", + "slug": { "type": "string" }, - "id": { - "description": "IMDb name ID of the person, for example `nm0634240`.", - "example": "nm0634240", + "url": { "type": "string" + } + }, + "type": "object" + }, + "goodrx.DrugOptionsResponse": { + "properties": { + "default": { + "$ref": "#/definitions/goodrx.Configuration" }, - "image_url": { - "description": "URL of the person's main photo.", - "type": "string" + "drug": { + "$ref": "#/definitions/goodrx.DrugInfo" }, - "known_for": { - "description": "Titles IMDb lists the person as known for.", + "options": { "items": { - "$ref": "#/definitions/imdb.NameKnownForItem" + "$ref": "#/definitions/goodrx.LabelOption" }, "type": "array" + } + }, + "type": "object" + }, + "goodrx.DrugPricesResponse": { + "properties": { + "configuration": { + "$ref": "#/definitions/goodrx.Configuration" }, - "name": { - "description": "Name of the person as shown on IMDb.", - "example": "Christopher Nolan", - "type": "string" + "drug": { + "$ref": "#/definitions/goodrx.DrugInfo" }, - "professions": { - "description": "Professions IMDb lists for the person.", + "location": { + "$ref": "#/definitions/goodrx.Location" + }, + "offers": { "items": { - "type": "string" + "$ref": "#/definitions/goodrx.PharmacyOffer" }, "type": "array" }, - "public_page_derived": { - "description": "Always `true`. The data comes from IMDb's public pages.", - "example": true, - "type": "boolean" - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.imdb.com/name/nm0634240/", - "type": "string" + "options": { + "items": { + "$ref": "#/definitions/goodrx.LabelOption" + }, + "type": "array" + } + }, + "type": "object" + }, + "goodrx.DrugsResponse": { + "properties": { + "drugs": { + "items": { + "$ref": "#/definitions/goodrx.DrugLink" + }, + "type": "array" }, - "url": { - "description": "IMDb page URL of the person.", - "example": "https://www.imdb.com/name/nm0634240/", + "letter": { "type": "string" } }, "type": "object" }, - "imdb.NameVideosResponse": { + "goodrx.FAQ": { "properties": { - "fetched_at": { - "example": "2026-09-14T14:46:16Z", + "answer": { "type": "string" }, - "has_more": { - "example": true, - "type": "boolean" - }, - "id": { - "example": "nm0000151", + "question": { "type": "string" - }, - "limit": { - "example": 50, - "type": "integer" + } + }, + "type": "object" + }, + "goodrx.FormOption": { + "properties": { + "dosages": { + "items": { + "$ref": "#/definitions/goodrx.DosageOption" + }, + "type": "array" }, "name": { - "example": "Morgan Freeman", - "type": "string" - }, - "source_url": { - "example": "https://www.imdb.com/name/nm0000151/videogallery/", "type": "string" }, - "total": { - "example": 214, - "type": "integer" - }, - "url": { - "example": "https://www.imdb.com/name/nm0000151/videogallery/", + "slug": { "type": "string" - }, - "videos": { - "items": { - "$ref": "#/definitions/imdb.VideoItem" - }, - "type": "array" } }, "type": "object" }, - "imdb.OpeningWeekend": { + "goodrx.GuideItem": { "properties": { - "gross": { - "$ref": "#/definitions/imdb.Money" + "detail": { + "type": "string" }, - "theater_count": { - "example": 3, - "type": "integer" + "frequency": { + "type": "string" }, - "weekend_end_date": { - "example": "1994-09-25", + "name": { "type": "string" }, - "weekend_start_date": { - "example": "1994-09-23", + "slug": { "type": "string" } }, "type": "object" }, - "imdb.ParentalGuideCategory": { + "goodrx.GuideList": { "properties": { "items": { - "description": "Guide entries for this category. Entries IMDb files as spoilers are not included.", "items": { - "type": "string" + "$ref": "#/definitions/goodrx.GuideItem" }, "type": "array" }, - "name": { - "description": "Category name, for example `Violence & Gore`.", - "example": "Violence & Gore", + "label": { "type": "string" }, "severity": { - "description": "Community severity vote: `none`, `mild`, `moderate` or `severe`. Omitted when IMDb has no vote.", - "example": "moderate", - "type": "string" - }, - "slug": { - "description": "Lowercase, hyphenated form of the category name, for example `violence-gore`.", - "example": "violence-gore", + "enum": [ + "not_recommended", + "usually_not_recommended", + "increased_risk" + ], "type": "string" } }, "type": "object" }, - "imdb.ParentalGuideResponse": { + "goodrx.GuideSection": { "properties": { - "categories": { - "description": "Parental guide categories IMDb lists for the title.", + "lists": { "items": { - "$ref": "#/definitions/imdb.ParentalGuideCategory" + "$ref": "#/definitions/goodrx.GuideList" }, "type": "array" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:46:16Z", + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "goodrx.HealthArticleRef": { + "properties": { + "last_modified": { "type": "string" }, - "id": { - "description": "IMDb title ID, for example `tt1375666`.", - "example": "tt1375666", + "path": { "type": "string" }, - "public_page_derived": { - "description": "Always `true`. The data comes from IMDb's public pages.", - "example": true, - "type": "boolean" + "section": { + "type": "string" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.imdb.com/title/tt1375666/parentalguide/", + "slug": { "type": "string" }, - "summary": { - "allOf": [ - { - "$ref": "#/definitions/imdb.ParentalGuideSummary" - } - ], - "description": "Counts and highest severity across all returned categories." + "topic": { + "type": "string" }, "url": { - "description": "IMDb parental guide page of the title.", - "example": "https://www.imdb.com/title/tt1375666/parentalguide/", "type": "string" } }, "type": "object" }, - "imdb.ParentalGuideSummary": { + "goodrx.HealthArticleResponse": { "properties": { - "categories_count": { - "description": "Number of guide categories returned.", - "example": 5, - "type": "integer" + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "highest_severity": { - "description": "Highest severity among the categories: `none`, `mild`, `moderate` or `severe`.", - "example": "severe", + "date_modified": { "type": "string" }, - "item_count": { - "description": "Total number of guide entries across all categories.", - "example": 24, - "type": "integer" + "date_published": { + "type": "string" }, - "present_categories": { - "description": "Slugs of the categories returned.", + "description": { + "type": "string" + }, + "faqs": { "items": { - "type": "string" + "$ref": "#/definitions/goodrx.FAQ" }, "type": "array" }, - "public_page_signals": { - "description": "Count of details in the guide: entries, named categories and categories that have a severity.", - "example": 12, - "type": "integer" + "headline": { + "type": "string" }, - "severity_counts": { - "additionalProperties": { - "type": "integer" + "key_takeaways": { + "items": { + "type": "string" }, - "description": "Number of categories at each severity level, keyed by severity.", - "type": "object" - } - }, - "type": "object" - }, - "imdb.Person": { - "properties": { - "name": { - "description": "Name of the person.", - "example": "Christopher Nolan", + "type": "array" + }, + "path": { "type": "string" }, - "url": { - "description": "IMDb page URL of the person.", - "example": "https://www.imdb.com/name/nm0634240/", + "references": { + "items": { + "type": "string" + }, + "type": "array" + }, + "related_drugs": { + "items": { + "$ref": "#/definitions/goodrx.DrugLink" + }, + "type": "array" + }, + "reviewed_by": { + "items": { + "type": "string" + }, + "type": "array" + }, + "section": { "type": "string" - } - }, - "type": "object" - }, - "imdb.PublicFactItem": { - "properties": { - "category": { - "description": "Category is IMDb's own grouping for the row, e.g. \"Continuity\" or\n\"Revealing mistakes\" for goofs. Empty when IMDb files the row under an\nunnamed group, which is the usual case for trivia.", - "example": "Continuity", + }, + "sections": { + "items": { + "$ref": "#/definitions/goodrx.GuideSection" + }, + "type": "array" + }, + "slug": { "type": "string" }, - "public_signals": { - "description": "Number of details filled in on this entry, counted across text and spoiler marker.", - "example": 1, - "type": "integer" + "tags": { + "items": { + "type": "string" + }, + "type": "array" }, - "spoiler": { - "description": "`true` when IMDb marks the entry as a spoiler.", - "example": false, - "type": "boolean" + "topic": { + "type": "string" }, - "text": { - "description": "Text of the trivia, goof or quote entry.", - "example": "The hallway fight was filmed with a rotating set.", + "url": { "type": "string" } }, "type": "object" }, - "imdb.PublicFactsAnalysisSummary": { + "goodrx.HealthArticlesResponse": { "properties": { - "company_count": { - "example": 9, - "type": "integer" - }, - "company_section_count": { - "example": 3, - "type": "integer" - }, - "filming_location_count": { - "example": 6, - "type": "integer" - }, - "goof_count": { - "example": 4, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/goodrx.HealthArticleRef" + }, + "type": "array" }, - "keyword_count": { - "example": 20, + "page": { "type": "integer" }, - "public_fact_coverage_pages": { - "example": 6, + "page_size": { "type": "integer" }, - "public_page_signals": { - "example": 64, - "type": "integer" + "section": { + "type": "string" }, - "quote_count": { - "example": 8, - "type": "integer" + "topic": { + "type": "string" }, - "spoiler_fact_count": { - "example": 2, + "total": { "type": "integer" }, - "trivia_count": { - "example": 12, + "total_pages": { "type": "integer" } }, "type": "object" }, - "imdb.RatingCountrySummary": { + "goodrx.HealthTopic": { "properties": { - "aggregate": { - "type": "number" + "article_count": { + "type": "integer" }, - "country": { + "last_modified": { "type": "string" }, - "vote_count": { - "type": "integer" + "section": { + "enum": [ + "conditions", + "health-topic", + "well-being", + "pet-health", + "insurance", + "classes", + "drugs", + "healthcare-access", + "corporate", + "hcp", + "drug" + ], + "type": "string" + }, + "topic": { + "type": "string" } }, "type": "object" }, - "imdb.RatingHistogramBucket": { + "goodrx.HealthTopicsResponse": { "properties": { - "rating": { - "type": "integer" + "section": { + "type": "string" }, - "vote_count": { + "topics": { + "items": { + "$ref": "#/definitions/goodrx.HealthTopic" + }, + "type": "array" + }, + "total": { "type": "integer" } }, "type": "object" }, - "imdb.RatingsResponse": { + "goodrx.InfoSection": { "properties": { - "countries": { + "id": { + "type": "string" + }, + "items": { "items": { - "$ref": "#/definitions/imdb.RatingCountrySummary" + "type": "string" }, "type": "array" }, - "fetched_at": { + "title": { "type": "string" - }, - "histogram": { + } + }, + "type": "object" + }, + "goodrx.LabelOption": { + "properties": { + "forms": { "items": { - "$ref": "#/definitions/imdb.RatingHistogramBucket" + "$ref": "#/definitions/goodrx.FormOption" }, "type": "array" }, - "id": { + "name": { "type": "string" }, - "rating_count": { - "type": "integer" + "slug": { + "type": "string" }, - "rating_value": { + "type": { + "type": "string" + } + }, + "type": "object" + }, + "goodrx.Location": { + "properties": { + "city": { + "type": "string" + }, + "latitude": { "type": "number" }, - "source_url": { - "type": "string" + "longitude": { + "type": "number" }, - "title": { + "state": { "type": "string" }, - "url": { + "zip_code": { "type": "string" } }, "type": "object" }, - "imdb.ReleaseInfoItem": { + "goodrx.PetMedicationRef": { "properties": { - "country": { - "description": "Country or region of the release.", - "example": "United States", - "type": "string" - }, - "date": { - "description": "Release date as IMDb shows it, for example `16 July 2010`.", - "example": "16 July 2010", + "slug": { "type": "string" }, - "note": { - "description": "Note on the release, for example `theatrical`.", - "example": "theatrical", + "url": { "type": "string" } }, "type": "object" }, - "imdb.ReleaseInfoResponse": { + "goodrx.PetMedicationsResponse": { "properties": { - "alternate_titles": { - "description": "Alternate titles (also known as) IMDb lists for the title.", + "drugs": { "items": { - "$ref": "#/definitions/imdb.AlternateTitle" + "$ref": "#/definitions/goodrx.PetMedicationRef" }, "type": "array" + } + }, + "type": "object" + }, + "goodrx.PharmacyOffer": { + "properties": { + "logo_url": { + "type": "string" }, - "alternate_titles_total": { - "description": "Number of alternate titles IMDb lists for the title.", - "example": 82, - "type": "integer" + "lowest_price": { + "type": "number" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:46:16Z", + "membership": { + "description": "Membership names the paid program behind an UPSELL price, for example\n\"COMPANION\" (observed value; returned as data).", "type": "string" }, - "has_more": { - "description": "`true` when IMDb lists more release dates than were returned.", - "example": true, - "type": "boolean" - }, - "id": { - "description": "IMDb title ID, for example `tt1375666`.", - "example": "tt1375666", + "order_url": { "type": "string" }, - "public_page_derived": { - "description": "Always `true`. The data comes from IMDb's public pages.", - "example": true, - "type": "boolean" + "pharmacy_id": { + "type": "string" }, - "releases": { - "description": "Release dates of the title by country.", - "items": { - "$ref": "#/definitions/imdb.ReleaseInfoItem" - }, - "type": "array" + "pharmacy_name": { + "type": "string" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.imdb.com/title/tt1375666/releaseinfo/", + "pharmacy_type": { + "description": "PharmacyType is \"PharmacyChain\" (retail) or \"PharmacyOnlineStore\"\n(mail order) as observed; returned as data.", "type": "string" }, - "total": { - "description": "Number of release dates IMDb lists for the title.", - "example": 71, - "type": "integer" + "price": { + "type": "number" }, - "url": { - "description": "IMDb release info page of the title.", - "example": "https://www.imdb.com/title/tt1375666/releaseinfo/", + "pricing_type": { + "description": "PricingType is GoodRx's pricing kind, for example \"COUPON\",\n\"UPSELL\", or \"HOME_DELIVERY\" (observed values; returned as data).", "type": "string" + }, + "retail_price": { + "type": "number" } }, "type": "object" }, - "imdb.ReviewItem": { + "goodrx.answerResponseDoc": { "properties": { - "author": { - "description": "Username of the reviewer.", - "example": "movie_fan", + "data": { + "$ref": "#/definitions/goodrx.AnswerResponse" + } + }, + "type": "object" + }, + "goodrx.answersResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/goodrx.AnswersResponse" + } + }, + "type": "object" + }, + "goodrx.brandsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/goodrx.BrandsResponse" + } + }, + "type": "object" + }, + "goodrx.classResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/goodrx.ClassResponse" + } + }, + "type": "object" + }, + "goodrx.classesResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/goodrx.ClassesResponse" + } + }, + "type": "object" + }, + "goodrx.comparisonResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/goodrx.ComparisonResponse" + } + }, + "type": "object" + }, + "goodrx.comparisonsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/goodrx.ComparisonsResponse" + } + }, + "type": "object" + }, + "goodrx.conditionDrugsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/goodrx.ConditionDrugsResponse" + } + }, + "type": "object" + }, + "goodrx.conditionResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/goodrx.ConditionResponse" + } + }, + "type": "object" + }, + "goodrx.conditionsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/goodrx.ConditionsResponse" + } + }, + "type": "object" + }, + "goodrx.drugGuideResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/goodrx.DrugGuideResponse" + } + }, + "type": "object" + }, + "goodrx.drugGuidesResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/goodrx.DrugGuidesResponse" + } + }, + "type": "object" + }, + "goodrx.drugInfoResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/goodrx.DrugInfoResponse" + } + }, + "type": "object" + }, + "goodrx.drugOptionsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/goodrx.DrugOptionsResponse" + } + }, + "type": "object" + }, + "goodrx.drugPricesResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/goodrx.DrugPricesResponse" + } + }, + "type": "object" + }, + "goodrx.drugsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/goodrx.DrugsResponse" + } + }, + "type": "object" + }, + "goodrx.healthArticleResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/goodrx.HealthArticleResponse" + } + }, + "type": "object" + }, + "goodrx.healthArticlesResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/goodrx.HealthArticlesResponse" + } + }, + "type": "object" + }, + "goodrx.healthTopicsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/goodrx.HealthTopicsResponse" + } + }, + "type": "object" + }, + "goodrx.petMedicationsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/goodrx.PetMedicationsResponse" + } + }, + "type": "object" + }, + "google.JobItem": { + "properties": { + "company": { + "description": "Name of the hiring company.", "type": "string" }, - "date": { - "description": "Date the review was posted, for example `2024-01-02`.", - "example": "2024-01-02", + "employment": { + "description": "Employment type shown on the job card, for example full-time.", "type": "string" }, - "helpful_votes": { - "description": "Number of users who marked the review as helpful.", - "example": 123, - "type": "integer" - }, - "helpfulness": { - "description": "Share of votes that marked the review as helpful, as a percentage such as `82%`.", - "example": "82%", + "location": { + "description": "Job location as shown on the job card.", "type": "string" }, - "id": { - "description": "IMDb review ID, for example `rw1234567`.", - "example": "rw1234567", + "posted_at": { + "description": "How long ago the job was posted, as Google shows it, for example `3 days ago`.", "type": "string" }, - "public_signals": { - "description": "Number of details filled in on this review, counted across title, author, date, rating, text and votes.", - "example": 5, - "type": "integer" - }, - "rating": { - "description": "Rating the reviewer gave the title.", - "example": 9, - "type": "integer" - }, - "spoiler": { - "description": "`true` when the review is marked as containing spoilers.", - "example": false, - "type": "boolean" + "snippet": { + "description": "Short description text from the job card.", + "type": "string" }, - "text": { - "description": "Full text of the review.", + "source": { + "description": "Site or board Google lists the job from.", "type": "string" }, "title": { - "description": "Headline the reviewer gave the review.", - "example": "A smart blockbuster", + "description": "Job title as shown on the job card.", "type": "string" }, - "total_votes": { - "description": "Total number of helpful and not helpful votes the review received.", - "example": 150, - "type": "integer" - }, "url": { - "description": "IMDb page URL of the review.", - "example": "https://www.imdb.com/review/rw1234567/", + "description": "URL of the job posting.", "type": "string" } }, "type": "object" }, - "imdb.ReviewsResponse": { + "google.JobsOption": { "properties": { - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:46:16Z", + "location": { + "example": "San Francisco, CA", "type": "string" }, - "has_more": { - "description": "`true` when IMDb lists more reviews than were returned.", - "example": true, - "type": "boolean" + "page": { + "example": 1, + "type": "integer" }, - "id": { - "description": "IMDb title ID, for example `tt1375666`.", - "example": "tt1375666", + "query": { + "example": "software engineer", + "type": "string" + } + }, + "required": [ + "query" + ], + "type": "object" + }, + "google.JobsResponse": { + "properties": { + "location": { + "description": "Location filter that was applied. Omitted when none was given.", + "example": "San Francisco, CA", "type": "string" }, - "limit": { - "description": "Maximum number of reviews requested.", - "example": 10, + "page": { + "description": "Page number returned, starting at 1.", + "example": 1, "type": "integer" }, - "public_page_derived": { - "description": "Always `true`. The data comes from IMDb's public pages.", - "example": true, - "type": "boolean" + "query": { + "description": "Search query that was run.", + "example": "software engineer", + "type": "string" }, - "reviews": { - "description": "User reviews of the title.", + "results": { + "description": "Job postings on this page.", "items": { - "$ref": "#/definitions/imdb.ReviewItem" + "$ref": "#/definitions/google.JobItem" }, "type": "array" - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.imdb.com/title/tt1375666/reviews/", - "type": "string" - }, - "total": { - "description": "Number of reviews IMDb lists for the title.", - "example": 11940, - "type": "integer" - }, - "url": { - "description": "IMDb reviews page of the title.", - "example": "https://www.imdb.com/title/tt1375666/reviews/", - "type": "string" } }, "type": "object" }, - "imdb.SearchItem": { + "google.MapSearchOption": { "properties": { - "description": { - "description": "Lead cast of the title, when IMDb shows it.", - "type": "string" - }, - "id": { - "description": "IMDb title ID, for example `tt1375666`.", - "example": "tt1375666", - "type": "string" - }, - "image_url": { - "description": "URL of the image IMDb shows for the title in search results.", - "type": "string" - }, - "title": { - "description": "Title name as shown in search results.", - "example": "Inception", - "type": "string" - }, - "title_type": { - "description": "Kind of title, for example `Movie`.", - "example": "Movie", + "country": { + "example": "us", "type": "string" }, - "url": { - "description": "IMDb page URL of the title.", - "example": "https://www.imdb.com/title/tt1375666/", + "keyword": { + "example": "hotel san francisco", "type": "string" }, - "year": { - "description": "Release year of the title.", - "example": "2010", + "language": { + "example": "en", "type": "string" } }, "type": "object" }, - "imdb.SearchResponse": { + "google.NewsResponse": { "properties": { - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:46:16Z", - "type": "string" - }, - "limit": { - "description": "Maximum number of results requested.", - "example": 10, - "type": "integer" - }, - "query": { - "description": "Search query that was run.", - "example": "inception", - "type": "string" + "pagination": { + "allOf": [ + { + "$ref": "#/definitions/google.VerticalPagination" + } + ], + "description": "Paging information for this response." }, "results": { - "description": "Titles matching the query.", + "description": "Google News results in Google's order.", "items": { - "$ref": "#/definitions/imdb.SearchItem" + "$ref": "#/definitions/google.NewsResult" }, "type": "array" - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.imdb.com/find/?q=inception&s=tt", - "type": "string" } }, "type": "object" }, - "imdb.SearchTitleItem": { + "google.NewsResult": { "properties": { - "certificate": { - "example": "PG-13", - "type": "string" - }, - "genres": { - "example": [ - "Action" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "id": { - "example": "tt1375666", + "age": { + "description": "How long ago the article was published, as Google shows it.", + "example": "2 hours ago", "type": "string" }, - "image_url": { + "description": { + "description": "Article snippet as shown on the Google results page.", + "example": "OpenAI announced an update.", "type": "string" }, - "metascore": { - "example": 74, + "position": { + "description": "Rank of the article across all pages for the query, starting at 1.", + "example": 1, "type": "integer" }, - "plot": { + "source": { + "description": "Name of the publication, for example `Example News`.", + "example": "Example News", "type": "string" }, - "rating_count": { - "example": 2600000, - "type": "integer" - }, - "rating_value": { - "example": 8.8, - "type": "number" - }, - "release_date": { - "example": "2010-07-16", + "thumbnail": { + "description": "URL of the article thumbnail.", + "example": "https://example.com/thumb.jpg", "type": "string" }, - "runtime_minutes": { - "example": 148, - "type": "integer" - }, "title": { - "example": "Inception", - "type": "string" - }, - "title_type": { - "example": "movie", + "description": "Article headline as shown on the Google results page.", + "example": "OpenAI announces update", "type": "string" }, "url": { - "example": "https://www.imdb.com/title/tt1375666/", + "description": "URL of the news article.", + "example": "https://example.com/openai-news", "type": "string" - }, - "year": { - "example": 2010, - "type": "integer" } }, "type": "object" }, - "imdb.SearchTitleResponse": { + "google.NewsSearchResp": { "properties": { - "fetched_at": { - "example": "2026-06-07T14:46:16Z", - "type": "string" - }, - "has_more": { - "example": true, - "type": "boolean" - }, - "limit": { - "example": 25, - "type": "integer" - }, - "results": { + "result": { "items": { - "$ref": "#/definitions/imdb.SearchTitleItem" + "$ref": "#/definitions/google.SearchItem" }, "type": "array" - }, - "source_url": { - "example": "https://www.imdb.com/search/title/?genres=Action&title_type=feature", - "type": "string" - }, - "total": { - "example": 1968, - "type": "integer" } }, "type": "object" }, - "imdb.SimilarResponse": { + "google.Place": { "properties": { - "fetched_at": { - "type": "string" - }, - "id": { + "address": { + "description": "Full street address of the place as shown on Google Maps.", + "example": "250 Beach St, San Francisco, CA 94133", "type": "string" }, - "source_url": { - "type": "string" + "amenities": { + "description": "Amenities Google Maps lists for the place, for example `Free Wi-Fi`.", + "example": [ + "['Free Wi-Fi'", + " 'Air-conditioned'", + " 'Wi-Fi'", + " 'Parking']" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "titles": { + "category": { + "description": "Business categories Google Maps assigns to the place.", + "example": [ + "['hotel']" + ], "items": { - "$ref": "#/definitions/imdb.SimilarTitle" + "type": "string" }, "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "imdb.SimilarTitle": { - "properties": { - "content_rating": { + "description": { + "description": "Description of the place from its Google Maps listing.", + "example": "A 3-minute walk from Pier 41 in the Fisherman's Wharf district...", "type": "string" }, - "id": { + "image": { + "description": "URL of the main photo of the place.", + "example": "https://lh5.googleusercontent.com/p/AF1QipP_O55x7gOwR3AaM09CVmzEUude9wMHMPwc--yp", "type": "string" }, - "image_url": { - "type": "string" + "latitude": { + "description": "Latitude of the place in decimal degrees.", + "example": 37.8077617, + "type": "number" }, - "rating_count": { - "type": "integer" + "locations": { + "description": "Location names Google Maps associates with the place, such as nearby areas.", + "example": [ + "['San Francisco'", + " 'Los Angeles']" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "rating_value": { + "longitude": { + "description": "Longitude of the place in decimal degrees.", + "example": -122.4132228, "type": "number" }, - "runtime_minutes": { - "type": "integer" - }, - "title": { + "name": { + "description": "Name of the place as shown on Google Maps.", + "example": "Hotel Zephyr San Francisco", "type": "string" }, - "title_type": { + "phone": { + "description": "Phone number of the place, as digits.", + "example": "14156176565", "type": "string" }, - "url": { + "place_id": { + "description": "Google Place ID. Use it with the place, reviews and photos endpoints.", + "example": "ChIJ99URUeOAhYAR0J5ZUxTesDQ", "type": "string" }, - "year": { + "rating": { + "description": "Rating is the aggregate Google rating (1.0–5.0), or null when the place has no\naggregate rating on Google (Google never assigns a 0.x average, so 0 always meant\n\"unrated\"). A pointer so unrated serializes as `rating: null`, not a misleading 0.", + "example": 4.1, + "type": "number", + "x-nullable": true + }, + "review_count": { + "description": "Number of Google reviews for the place.", + "example": 3213, "type": "integer" - } - }, - "type": "object" - }, - "imdb.TechnicalSpecItem": { - "properties": { - "name": { - "description": "Name of the technical spec, for example `Runtime`.", - "example": "Runtime", - "type": "string" }, - "slug": { - "description": "Lowercase, hyphenated form of the spec name, for example `runtime`.", - "example": "runtime", + "url": { + "description": "Google Maps URL of the place.", + "example": "https://www.google.com/maps/place/?q=place_id:ChIJ99URUeOAhYAR0J5ZUxTesDQ", "type": "string" }, - "values": { - "description": "Values IMDb lists for the spec.", - "items": { - "type": "string" - }, - "type": "array" + "website": { + "description": "Website of the place.", + "example": "https://www.hotelzephyrsf.com/", + "type": "string" } }, "type": "object" }, - "imdb.TechnicalSpecsResponse": { + "google.PlacePhoto": { "properties": { - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:46:16Z", - "type": "string" - }, - "id": { - "description": "IMDb title ID, for example `tt1375666`.", - "example": "tt1375666", - "type": "string" - }, - "public_page_derived": { - "description": "Always `true`. The data comes from IMDb's public pages.", - "example": true, - "type": "boolean" - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.imdb.com/title/tt1375666/technical/", - "type": "string" - }, - "specs": { - "description": "Technical specifications IMDb lists for the title.", - "items": { - "$ref": "#/definitions/imdb.TechnicalSpecItem" - }, - "type": "array" + "height": { + "description": "Pixel height of the image at its URL. 0 when Google does not report it.", + "example": 100, + "type": "integer" }, "url": { - "description": "IMDb technical specs page of the title.", - "example": "https://www.imdb.com/title/tt1375666/technical/", + "description": "URL is Google's image URL exactly as served, including its size suffix\n(e.g. `=w203-h100-k-no`). Swap that suffix to request other dimensions.", + "example": "https://lh3.googleusercontent.com/gps-cs-s/AHRPTWlbepbs69mWZVN7SNi4FYseIr1JvRCpGHgpFfN5wOf02mKOVdfv2REVb896InfULrDb_yQmqdxmQcSnmwHp2VncbLzYxzWtsUFFbKH3buF34st-Nhlg1fEIH0_tkmvNKJmWKEHKv45RBu4=w203-h100-k-no", "type": "string" + }, + "width": { + "description": "Width and Height are the pixel dimensions of the URL as served, when\nGoogle reports them. 0 means not captured.", + "example": 203, + "type": "integer" } }, "type": "object" }, - "imdb.TitleAwardsResponse": { + "google.PlaceReview": { "properties": { - "awards": { - "items": { - "$ref": "#/definitions/imdb.AwardItem" - }, - "type": "array" - }, - "fetched_at": { - "example": "2026-06-07T14:46:16Z", + "author_id": { + "description": "AuthorID is the reviewer's stable Google contributor id.", + "example": "112997636113922766481", "type": "string" }, - "has_more": { - "example": true, - "type": "boolean" - }, - "id": { - "example": "tt1375666", + "author_name": { + "description": "AuthorName is the reviewer's display name.", + "example": "Supisara Darnchaloemwong", "type": "string" }, - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "source_url": { - "example": "https://www.imdb.com/title/tt1375666/awards/", + "author_photo": { + "description": "AuthorPhoto is the reviewer's avatar URL.", + "example": "https://lh3.googleusercontent.com/a-/ALV-UjWc6XFX9IKHJiQ4vZoY7o_EVCYkjMbWjGfdPZrLEw", "type": "string" }, - "total": { - "example": 64, + "author_review_count": { + "description": "AuthorReviewCount is how many reviews this contributor has written in\ntotal, as reported by Google. 0 means not captured, and is normal for a\nreview syndicated from another site.", + "example": 23, "type": "integer" }, - "url": { - "example": "https://www.imdb.com/title/tt1375666/awards/", - "type": "string" - } - }, - "type": "object" - }, - "imdb.TitleBoxOfficeResponse": { - "properties": { - "fetched_at": { - "example": "2026-09-17T14:46:16Z", + "author_url": { + "description": "AuthorURL is the reviewer's public Google Maps contributor page.", + "example": "https://www.google.com/maps/contrib/112997636113922766481", "type": "string" }, - "has_box_office": { - "example": true, - "type": "boolean" - }, "id": { - "example": "tt0111161", + "description": "ID is Google's opaque review identifier, stable across fetches.", + "example": "Ci9DQUlRQUNvZENodHljRjlvT201dFRHSk1aRU54T0U5cmRFVjNlbGRmU1RJNFkzYxAB", "type": "string" }, - "lifetime_gross": { - "$ref": "#/definitions/imdb.LifetimeGross" + "photos": { + "description": "Photos are the images attached to this review, largest variant first.", + "items": { + "$ref": "#/definitions/google.PlacePhoto" + }, + "type": "array" }, - "opening_weekend": { - "$ref": "#/definitions/imdb.OpeningWeekend" + "published_at": { + "description": "PublishedAt is the review timestamp in RFC3339 (UTC). Empty when Google\ndid not report one.", + "example": "2026-01-01T14:39:25Z", + "type": "string" }, - "production_budget": { - "$ref": "#/definitions/imdb.Money" + "rating": { + "description": "Rating is the star rating this reviewer gave, 1-5.", + "example": 5, + "type": "integer" }, - "source_url": { - "example": "https://www.imdb.com/title/tt0111161/", + "relative_time": { + "description": "RelativeTime is Google's own human-readable age for the review, in the\nrequested language (e.g. \"6 months ago\").", + "example": "6 months ago", "type": "string" }, - "title": { - "example": "The Shawshank Redemption", + "source": { + "description": "Source is the site the review came from. Google's place pages syndicate\nreviews from partner sites (notably for hotels), so this is \"Google\" for a\nnative Google review and the partner's name (e.g. \"Tripadvisor\",\n\"TrustYou\") otherwise.", + "example": "Google", "type": "string" }, - "url": { - "example": "https://www.imdb.com/title/tt0111161/", + "text": { + "description": "Text is the review body. Empty for a photo-only review, which Google allows.", + "example": "I never knew pork could taste this good.", "type": "string" } }, "type": "object" }, - "imdb.TitleConnectionsResponse": { + "google.SearchItem": { "properties": { - "connections": { - "items": { - "$ref": "#/definitions/imdb.ConnectionItem" - }, - "type": "array" - }, - "fetched_at": { - "example": "2026-09-17T14:46:16Z", + "Snippet": { + "example": "Never run out of your favorite coffees, teas and powders again with our auto-delivery subscription. Select how often your products arrive, pause and cancel ...", "type": "string" }, - "has_more": { - "example": true, - "type": "boolean" + "icon": { + "type": "string" }, - "id": { - "example": "tt0111161", + "link": { + "example": "https://www.coffeebean.com/", "type": "string" }, - "limit": { - "example": 50, + "position": { + "example": 1, "type": "integer" }, - "source_url": { - "example": "https://www.imdb.com/title/tt0111161/", + "time": { + "example": "7 hours ago", "type": "string" }, "title": { - "example": "The Shawshank Redemption", + "example": "Home | The Coffee Bean & Tea Leaf", "type": "string" }, - "total": { - "example": 999, - "type": "integer" - }, - "url": { - "example": "https://www.imdb.com/title/tt0111161/", + "website_name": { + "example": "OpenAI", "type": "string" } }, "type": "object" }, - "imdb.TitleImagesResponse": { + "google.SearchOption": { "properties": { - "fetched_at": { - "example": "2026-09-09T14:46:16Z", + "country": { + "description": "Country code", + "example": "us", "type": "string" }, - "has_more": { - "example": false, - "type": "boolean" - }, - "id": { - "example": "tt0089753", + "keyword": { + "example": "chatgpt", "type": "string" }, - "images": { - "items": { - "$ref": "#/definitions/imdb.ImageItem" - }, - "type": "array" + "language": { + "description": "language code", + "example": "en", + "type": "string" }, "limit": { - "example": 50, + "description": "Number of items, from 10 to 100, inclusive", + "example": 10, "type": "integer" }, - "source_url": { - "example": "https://www.imdb.com/title/tt0089753/mediaindex/", - "type": "string" - }, - "title": { - "example": "Holly - The Movie", - "type": "string" - }, - "total": { - "example": 38, + "page": { + "example": 1, "type": "integer" - }, - "type_counts": { - "items": { - "$ref": "#/definitions/imdb.ImageTypeCount" - }, - "type": "array" - }, - "types": { - "items": { - "type": "string" - }, - "type": "array" - }, - "url": { - "example": "https://www.imdb.com/title/tt0089753/mediaindex/", - "type": "string" } }, + "required": [ + "country", + "keyword", + "language" + ], "type": "object" }, - "imdb.TitlePublicFactsAnalysisResponse": { + "google.SuggestResponse": { "properties": { - "company_credits": { - "$ref": "#/definitions/imdb.TitlePublicFactsResponse" - }, - "filming_locations": { - "$ref": "#/definitions/imdb.TitlePublicFactsResponse" - }, - "goofs": { - "$ref": "#/definitions/imdb.TitlePublicFactsResponse" + "query": { + "description": "Query prefix the suggestions were requested for.", + "example": "openai", + "type": "string" }, - "keywords": { - "$ref": "#/definitions/imdb.TitlePublicFactsResponse" + "source": { + "description": "Suggestion list used: `web`, `youtube` or `shopping`.", + "example": "web", + "type": "string" }, - "missing_sections": { - "description": "MissingSections names the sections that failed, using the same keys as\nthe fields above (trivia, goofs, quotes, keywords, filming_locations,\ncompany_credits).", + "suggestions": { + "description": "Search suggestions Google returned, in order.", "items": { - "type": "string" + "$ref": "#/definitions/google.SuggestionResult" }, "type": "array" - }, - "not_viewing_advice": { - "example": true, - "type": "boolean" - }, - "partial": { - "description": "Partial is true when at least one section could not be fetched. The\nsections that did arrive are still populated and Summary still counts\nthem, so callers that need a complete analysis must check this rather\nthan infer completeness from a 200.", - "example": false, - "type": "boolean" - }, - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "quotes": { - "$ref": "#/definitions/imdb.TitlePublicFactsResponse" - }, - "summary": { - "$ref": "#/definitions/imdb.PublicFactsAnalysisSummary" - }, - "trivia": { - "$ref": "#/definitions/imdb.TitlePublicFactsResponse" } }, "type": "object" }, - "imdb.TitlePublicFactsResponse": { + "google.SuggestionResult": { "properties": { - "company_credits": { - "description": "Company credits grouped by section. Filled when `type` is `company_credits`.", - "items": { - "$ref": "#/definitions/imdb.CompanySection" - }, - "type": "array" - }, - "facts": { - "description": "Trivia, goof or quote entries. Filled when `type` is `trivia`, `goofs` or `quotes`.", - "items": { - "$ref": "#/definitions/imdb.PublicFactItem" - }, - "type": "array" - }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:46:16Z", - "type": "string" - }, - "has_more": { - "description": "`true` when IMDb lists more entries of this type than were returned.", - "example": true, - "type": "boolean" - }, - "id": { - "description": "IMDb title ID, for example `tt1375666`.", - "example": "tt1375666", + "description": { + "description": "Short descriptor Google shows beside the suggestion. Only set when the request used `rich=true`.", + "example": "OpenAI Blog", "type": "string" }, - "keywords": { - "description": "Keywords tagged on the title. Filled when `type` is `keywords`.", - "items": { - "$ref": "#/definitions/imdb.KeywordItem" - }, - "type": "array" - }, - "locations": { - "description": "Filming locations of the title. Filled when `type` is `filming_locations`.", - "items": { - "$ref": "#/definitions/imdb.LocationItem" - }, - "type": "array" - }, - "public_page_derived": { - "description": "Always `true`. The data comes from IMDb's public pages.", - "example": true, - "type": "boolean" + "position": { + "description": "Rank of the suggestion in the list, starting at 1.", + "example": 1, + "type": "integer" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.imdb.com/title/tt1375666/trivia/", + "query": { + "description": "Suggested search query.", + "example": "openai api", "type": "string" }, - "total": { - "description": "Number of entries IMDb lists for this type.", - "example": 21, + "relevance": { + "description": "Relevance score Google gives the suggestion. Only set when the request used `rich=true`.", + "example": 601, "type": "integer" }, "type": { - "description": "Kind of data returned: `trivia`, `goofs`, `quotes`, `keywords`, `filming_locations` or `company_credits`.", - "example": "trivia", - "type": "string" - }, - "url": { - "description": "IMDb page of the title for this kind of data.", - "example": "https://www.imdb.com/title/tt1375666/trivia/", + "description": "Suggestion type as Google labels it, for example `QUERY`. Only set when the request used `rich=true`.", + "example": "QUERY", "type": "string" } }, "type": "object" }, - "imdb.TitleResponse": { + "google.VerticalPagination": { "properties": { - "cast": { - "description": "Up to three lead cast members.", - "items": { - "$ref": "#/definitions/imdb.Person" - }, - "type": "array" - }, - "content_rating": { - "description": "Age rating shown for the title, for example `PG-13`.", - "example": "PG-13", - "type": "string" - }, - "directors": { - "description": "Directors of the title.", - "items": { - "$ref": "#/definitions/imdb.Person" - }, - "type": "array" - }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:46:16Z", - "type": "string" - }, - "genres": { - "description": "Genres IMDb lists for the title.", - "example": [ - "Action" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "id": { - "description": "IMDb title ID, for example `tt1375666`.", - "example": "tt1375666", - "type": "string" - }, - "image_url": { - "description": "URL of the title's main image.", - "type": "string" - }, - "plot": { - "description": "Plot summary of the title.", - "type": "string" - }, - "popularity_rank": { - "description": "Current IMDb popularity rank of the title.", - "example": 82, + "next_page": { + "description": "Page number of the next page. Omitted when there is no next page.", + "example": 2, "type": "integer" }, - "public_page_derived": { - "description": "Always `true`. The data comes from IMDb's public pages.", - "example": true, - "type": "boolean" - }, - "rating_count": { - "description": "Number of user ratings behind the rating value.", - "example": 2600000, + "page": { + "description": "Page number of this response, starting at 1.", + "example": 1, "type": "integer" }, - "rating_value": { - "description": "Average IMDb user rating of the title.", - "example": 8.8, - "type": "number" - }, - "release_date": { - "description": "Release date of the title, for example `2010-07-16`.", - "example": "2010-07-16", - "type": "string" - }, - "runtime_minutes": { - "description": "Running time of the title in minutes.", - "example": 148, + "previous_page": { + "description": "Page number of the previous page. Omitted on the first page.", + "example": 1, "type": "integer" - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.imdb.com/title/tt1375666/", - "type": "string" - }, - "title": { - "description": "Title name as shown on IMDb.", - "example": "Inception", - "type": "string" - }, - "title_type": { - "description": "Kind of title, for example `Movie`.", - "example": "Movie", - "type": "string" - }, - "url": { - "description": "IMDb page URL of the title.", - "example": "https://www.imdb.com/title/tt1375666/", - "type": "string" - }, - "year": { - "description": "Release year of the title.", - "example": "2010", - "type": "string" } }, "type": "object" }, - "imdb.TitleVideosResponse": { + "google.VideoResult": { "properties": { - "fetched_at": { - "example": "2026-09-14T14:46:16Z", - "type": "string" - }, - "has_more": { - "example": true, - "type": "boolean" - }, - "id": { - "example": "tt1375666", - "type": "string" - }, - "limit": { - "example": 50, - "type": "integer" - }, - "source_url": { - "example": "https://www.imdb.com/title/tt1375666/videogallery/", - "type": "string" - }, - "title": { - "example": "Inception", + "age": { + "description": "When the video was published, as Google shows it.", + "example": "2 days ago", "type": "string" }, - "total": { - "example": 35, - "type": "integer" - }, - "url": { - "example": "https://www.imdb.com/title/tt1375666/videogallery/", + "description": { + "description": "Video description snippet as shown on the Google results page.", + "example": "Watch the OpenAI DevDay keynote.", "type": "string" }, - "videos": { - "items": { - "$ref": "#/definitions/imdb.VideoItem" - }, - "type": "array" - } - }, - "type": "object" - }, - "imdb.VideoItem": { - "properties": { - "content_type": { - "example": "Trailer", + "duration": { + "description": "Video length as Google shows it, for example `45:12`.", + "example": "45:12", "type": "string" }, - "duration_seconds": { - "example": 105, - "type": "integer" - }, - "id": { - "example": "vi2959588889", + "platform": { + "description": "Platform hosting the video, for example `YouTube`.", + "example": "YouTube", "type": "string" }, "position": { + "description": "Rank of the video across all pages for the query, starting at 1.", "example": 1, "type": "integer" }, - "primary_title": { - "$ref": "#/definitions/imdb.VideoPrimaryTitle" - }, "thumbnail": { - "$ref": "#/definitions/imdb.VideoThumbnail" - }, - "title": { - "example": "10th Anniversary Dream Trailer", - "type": "string" - } - }, - "type": "object" - }, - "imdb.VideoPrimaryTitle": { - "properties": { - "id": { - "example": "tt1375666", + "description": "URL of the video thumbnail.", + "example": "https://example.com/thumb.jpg", "type": "string" }, "title": { - "example": "Inception", + "description": "Video title as shown on the Google results page.", + "example": "OpenAI DevDay keynote - YouTube", "type": "string" }, "url": { - "example": "https://www.imdb.com/title/tt1375666/", + "description": "URL of the video page.", + "example": "https://www.youtube.com/watch?v=openai-devday", "type": "string" } }, "type": "object" }, - "imdb.VideoThumbnail": { + "google.VideosResponse": { "properties": { - "height": { - "example": 1071, - "type": "integer" - }, - "url": { - "example": "https://m.media-amazon.com/images/M/MV5BMTQ1ZmIzOTAtNDcwZi00NDVkLWE4NWItYWNhZGY1MmVlZGU0XkEyXkFqcGdeQWRvb2xpbmhk._V1_.jpg", - "type": "string" + "pagination": { + "allOf": [ + { + "$ref": "#/definitions/google.VerticalPagination" + } + ], + "description": "Paging information for this response." }, - "width": { - "example": 1905, - "type": "integer" + "results": { + "description": "Video results in Google's order.", + "items": { + "$ref": "#/definitions/google.VideoResult" + }, + "type": "array" } }, "type": "object" }, - "imdb.chartsResponseDoc": { + "google.mapPlacePhotosResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/imdb.ChartResponse" + "items": { + "$ref": "#/definitions/google.PlacePhoto" + }, + "type": "array" }, "msg": { - "example": "OK", + "example": "ok", "type": "string" } }, "type": "object" }, - "imdb.creditsResponseDoc": { + "google.mapPlaceResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/imdb.CreditsResponse" + "$ref": "#/definitions/google.Place" }, "msg": { "example": "OK", @@ -112763,30 +117734,36 @@ }, "type": "object" }, - "imdb.episodesResponseDoc": { + "google.mapPlaceReviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/imdb.EpisodesResponse" + "items": { + "$ref": "#/definitions/google.PlaceReview" + }, + "type": "array" }, "msg": { - "example": "OK", + "example": "ok", "type": "string" } }, "type": "object" }, - "imdb.imageTypesResponseDoc": { + "google.mapSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/imdb.ImageTypesResponse" + "items": { + "$ref": "#/definitions/google.Place" + }, + "type": "array" }, "msg": { "example": "OK", @@ -112795,14 +117772,14 @@ }, "type": "object" }, - "imdb.nameAwardsResponseDoc": { + "google.newsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/imdb.NameAwardsResponse" + "$ref": "#/definitions/google.NewsResponse" }, "msg": { "example": "OK", @@ -112811,14 +117788,14 @@ }, "type": "object" }, - "imdb.nameCreditsResponseDoc": { + "google.newsSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/imdb.NameCreditsResponse" + "$ref": "#/definitions/google.NewsSearchResp" }, "msg": { "example": "OK", @@ -112827,14 +117804,14 @@ }, "type": "object" }, - "imdb.nameImagesResponseDoc": { + "google.suggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/imdb.NameImagesResponse" + "$ref": "#/definitions/google.SuggestResponse" }, "msg": { "example": "OK", @@ -112843,14 +117820,14 @@ }, "type": "object" }, - "imdb.nameResponseDoc": { + "google.videosResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/imdb.NameResponse" + "$ref": "#/definitions/google.VideosResponse" }, "msg": { "example": "OK", @@ -112859,110 +117836,98 @@ }, "type": "object" }, - "imdb.nameVideosResponseDoc": { + "googlejobs.GoogleJob": { "properties": { - "code": { - "example": 200, - "type": "integer" + "apply_url": { + "type": "string" }, - "data": { - "$ref": "#/definitions/imdb.NameVideosResponse" + "company": { + "example": "Google", + "type": "string" }, - "msg": { - "example": "OK", + "country": { + "example": "TW", "type": "string" - } - }, - "type": "object" - }, - "imdb.parentalGuideResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/imdb.ParentalGuideResponse" + "description": { + "type": "string" }, - "msg": { - "example": "OK", + "id": { + "example": "85207000467546822", "type": "string" - } - }, - "type": "object" - }, - "imdb.ratingsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/imdb.RatingsResponse" + "location": { + "example": "New Taipei, Banqiao District, New Taipei City, Taiwan", + "type": "string" }, - "msg": { - "example": "OK", + "locations": { + "items": { + "type": "string" + }, + "type": "array" + }, + "minimum_qualifications": { "type": "string" - } - }, - "type": "object" - }, - "imdb.releaseInfoResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/imdb.ReleaseInfoResponse" + "posted_at": { + "example": "2026-07-22T14:10:44Z", + "type": "string" }, - "msg": { - "example": "OK", + "preferred_qualifications": { "type": "string" - } - }, - "type": "object" - }, - "imdb.reviewsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/imdb.ReviewsResponse" + "responsibilities": { + "type": "string" }, - "msg": { - "example": "OK", + "title": { + "example": "Software Engineer, Embedded Software, Silicon", + "type": "string" + }, + "url": { + "example": "https://www.google.com/about/careers/applications/jobs/results/85207000467546822-software-engineer-embedded-software-silicon", "type": "string" } }, "type": "object" }, - "imdb.searchResponseDoc": { + "googlejobs.SearchResponse": { "properties": { - "code": { - "example": 200, + "jobs": { + "items": { + "$ref": "#/definitions/googlejobs.GoogleJob" + }, + "type": "array" + }, + "location": { + "example": "Singapore", + "type": "string" + }, + "page": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/imdb.SearchResponse" + "query": { + "example": "software engineer", + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" + }, + "total": { + "example": 1722, + "type": "integer" } }, "type": "object" }, - "imdb.searchTitleResponseDoc": { + "googlejobs.jobResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/imdb.SearchTitleResponse" + "$ref": "#/definitions/googlejobs.GoogleJob" }, "msg": { "example": "OK", @@ -112971,14 +117936,14 @@ }, "type": "object" }, - "imdb.similarResponseDoc": { + "googlejobs.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/imdb.SimilarResponse" + "$ref": "#/definitions/googlejobs.SearchResponse" }, "msg": { "example": "OK", @@ -112987,464 +117952,567 @@ }, "type": "object" }, - "imdb.technicalSpecsResponseDoc": { + "googlepatents.CitedPatent": { "properties": { - "code": { - "example": 200, - "type": "integer" + "assignee": { + "example": "Netzsch Maschinenfabrik", + "type": "string" }, - "data": { - "$ref": "#/definitions/imdb.TechnicalSpecsResponse" + "priority_date": { + "example": "1985-12-27", + "type": "string" }, - "msg": { - "example": "OK", + "publication_date": { + "example": "1987-05-19", "type": "string" - } - }, - "type": "object" - }, - "imdb.titleAwardsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/imdb.TitleAwardsResponse" + "publication_number": { + "example": "US4665582A", + "type": "string" }, - "msg": { - "example": "OK", + "title": { + "example": "Apparatus for shaking foundry moulds in a casting installation", "type": "string" } }, "type": "object" }, - "imdb.titleBoxOfficeResponseDoc": { + "googlepatents.Classification": { "properties": { "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/imdb.TitleBoxOfficeResponse" + "example": "A47L9/00", + "type": "string" }, - "msg": { - "example": "OK", + "description": { + "example": "Details or accessories of suction cleaners", "type": "string" + }, + "is_cpc": { + "example": true, + "type": "boolean" } }, "type": "object" }, - "imdb.titleConnectionsResponseDoc": { + "googlepatents.ClassificationRelation": { "properties": { "code": { - "example": 200, - "type": "integer" + "example": "A61", + "type": "string" }, - "data": { - "$ref": "#/definitions/imdb.TitleConnectionsResponse" + "description": { + "type": "string" }, - "msg": { - "example": "OK", + "is_child": { + "type": "boolean" + }, + "is_parent": { + "type": "boolean" + }, + "is_related": { + "type": "boolean" + }, + "name": { + "example": "A61 - MEDICAL OR VETERINARY SCIENCE; HYGIENE", "type": "string" } }, "type": "object" }, - "imdb.titleImagesResponseDoc": { + "googlepatents.ClassificationResponse": { "properties": { "code": { - "example": 200, - "type": "integer" + "example": "A61K31/00", + "type": "string" }, - "data": { - "$ref": "#/definitions/imdb.TitleImagesResponse" + "description": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "fetched_at": { + "type": "string" + }, + "name": { + "example": "A61K31/00 - Medicinal preparations containing organic active ingredients", + "type": "string" + }, + "relations": { + "items": { + "$ref": "#/definitions/googlepatents.ClassificationRelation" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "imdb.titlePublicFactsAnalysisResponseDoc": { + "googlepatents.CountryStatus": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/imdb.TitlePublicFactsAnalysisResponse" + "country_code": { + "example": "US", + "type": "string" }, - "msg": { - "example": "OK", + "state": { + "example": "ACTIVE", "type": "string" } }, "type": "object" }, - "imdb.titlePublicFactsResponseDoc": { + "googlepatents.CoverageCountry": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/imdb.TitlePublicFactsResponse" - }, - "msg": { - "example": "OK", + "country_code": { + "example": "US", "type": "string" + }, + "years": { + "items": { + "$ref": "#/definitions/googlepatents.CoverageYear" + }, + "type": "array" } }, "type": "object" }, - "imdb.titleResponseDoc": { + "googlepatents.CoverageResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "countries": { + "items": { + "$ref": "#/definitions/googlepatents.CoverageCountry" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/imdb.TitleResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" } }, "type": "object" }, - "imdb.titleVideosResponseDoc": { + "googlepatents.CoverageYear": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/imdb.TitleVideosResponse" + "applications": { + "example": "1712467", + "type": "string" }, - "msg": { - "example": "OK", + "grants": { + "example": "2802408", "type": "string" + }, + "year": { + "example": 2025, + "type": "integer" } }, "type": "object" }, - "importyeti.Company": { + "googlepatents.DetailResponse": { "properties": { - "address": { - "example": "Minneapolis, Mn 55402, Us", + "abstract": { + "example": "Battery-powered upright vacuum cleaners are disclosed.", "type": "string" }, - "also_known_as_addresses": { - "example": 145, - "type": "integer" + "application_number": { + "example": "US15/620,213", + "type": "string" }, - "also_known_as_names": { - "example": 229, + "citations": { + "items": { + "$ref": "#/definitions/googlepatents.CitedPatent" + }, + "type": "array" + }, + "cited_by": { + "items": { + "$ref": "#/definitions/googlepatents.CitedPatent" + }, + "type": "array" + }, + "claims": { + "items": { + "type": "string" + }, + "type": "array" + }, + "claims_count": { + "example": 19, "type": "integer" }, - "avg_teu_per_month": { - "example": 48.52, - "type": "number" + "classifications": { + "items": { + "$ref": "#/definitions/googlepatents.Classification" + }, + "type": "array" }, - "avg_teu_per_shipment": { - "example": 7.19, - "type": "number" + "country_code": { + "example": "US", + "type": "string" }, - "est_shipping_spend": { - "example": "$27M", + "country_name": { + "example": "United States", "type": "string" }, - "hs_codes": { + "current_assignees": { "items": { - "$ref": "#/definitions/importyeti.HSCode" + "type": "string" }, "type": "array" }, - "last_shipment_date": { - "example": "07/16/2026", + "description": { + "items": { + "type": "string" + }, + "type": "array" + }, + "expiration_date": { + "example": "2038-04-26", "type": "string" }, - "name": { - "example": "Target 33 South 6Th Street Cc", + "family_members": { + "items": { + "$ref": "#/definitions/googlepatents.FamilyMember" + }, + "type": "array" + }, + "fetched_at": { + "example": "2026-08-15T12:00:00Z", "type": "string" }, - "phone": { - "example": "XXX-XXX-X296", + "filing_date": { + "example": "2017-06-12", "type": "string" }, - "recent_shipments": { + "inventors": { "items": { - "$ref": "#/definitions/importyeti.Shipment" + "type": "string" }, "type": "array" }, - "region_breakdown": { + "kind_code": { + "example": "B2", + "type": "string" + }, + "legal_status": { + "example": "Active", + "type": "string" + }, + "original_assignees": { "items": { - "$ref": "#/definitions/importyeti.RegionBreakdown" + "type": "string" }, "type": "array" }, - "slug": { - "example": "target-33-south-6th-street-cc", + "pdf_url": { + "example": "https://patentimages.storage.googleapis.com/ae/9f/51/f34dc3bf93426e/US10758101.pdf", "type": "string" }, - "source_url": { - "example": "https://www.importyeti.com/company/target", + "prior_art_keywords": { + "items": { + "type": "string" + }, + "type": "array" + }, + "priority_date": { + "example": "2017-06-12", "type": "string" }, - "suppliers": { + "publication_date": { + "example": "2020-09-01", + "type": "string" + }, + "publication_number": { + "example": "US10758101B2", + "type": "string" + }, + "similar_documents": { "items": { - "$ref": "#/definitions/importyeti.Supplier" + "$ref": "#/definitions/googlepatents.SimilarDocument" }, "type": "array" }, - "total_shipments": { - "example": 9123, - "type": "integer" - }, - "url": { - "example": "https://www.importyeti.com/company/target-33-south-6th-street-cc", + "source_url": { + "example": "https://patents.google.com/patent/US10758101B2/en", "type": "string" }, - "website": { - "example": "www.target.com", + "title": { + "example": "Upright vacuum cleaner with battery support plate", "type": "string" } }, "type": "object" }, - "importyeti.CountryShipments": { + "googlepatents.FacetEntry": { "properties": { - "country": { - "example": "China", + "key": { + "example": "Emerson Electric Co.", "type": "string" }, - "shipments": { - "example": 4267, + "value": { + "example": 666, "type": "integer" } }, "type": "object" }, - "importyeti.HSCode": { + "googlepatents.FamilyMember": { "properties": { - "code": { - "example": "6404.19.9092", + "publication_date": { + "example": "2018-12-13", "type": "string" }, - "description": { - "example": "Valued over $12/pair", + "publication_number": { + "example": "US20180353038A1", + "type": "string" + } + }, + "type": "object" + }, + "googlepatents.RecentEntry": { + "properties": { + "publication_number": { + "example": "US10758101B2", "type": "string" }, - "product_description": { - "example": "Footwear Po- 1101064043 Hs Code-6404199092", + "title": { + "example": "Adjustable venous cannula and method of treating a patient", "type": "string" }, - "sample_bill_of_lading": { - "example": "APLU050437011", + "url": { + "example": "https://patents.google.com/patent/US10758101B2/en", "type": "string" } }, "type": "object" }, - "importyeti.RegionBreakdown": { + "googlepatents.RecentResponse": { "properties": { - "countries": { + "count": { + "example": 329, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "results": { "items": { - "$ref": "#/definitions/importyeti.CountryShipments" + "$ref": "#/definitions/googlepatents.RecentEntry" }, "type": "array" }, - "percent": { - "example": 80.3, - "type": "number" + "source_url": { + "type": "string" }, - "region": { - "example": "Asia", + "week": { + "example": "2026-W20", "type": "string" } }, "type": "object" }, - "importyeti.SearchResponse": { + "googlepatents.SearchResponse": { "properties": { + "fetched_at": { + "type": "string" + }, + "many_results": { + "example": false, + "type": "boolean" + }, "page": { - "example": 1, + "example": 0, "type": "integer" }, "query": { - "example": "nike", + "example": "battery", "type": "string" }, "results": { "items": { - "$ref": "#/definitions/importyeti.SearchResult" + "$ref": "#/definitions/googlepatents.SearchResult" }, "type": "array" }, "source_url": { "type": "string" }, - "total_hits": { - "example": 135, - "type": "integer" + "top_assignees": { + "items": { + "$ref": "#/definitions/googlepatents.FacetEntry" + }, + "type": "array" + }, + "top_classifications": { + "items": { + "$ref": "#/definitions/googlepatents.FacetEntry" + }, + "type": "array" + }, + "top_inventors": { + "items": { + "$ref": "#/definitions/googlepatents.FacetEntry" + }, + "type": "array" }, "total_pages": { - "example": 14, + "example": 100, + "type": "integer" + }, + "total_results": { + "example": 112795, "type": "integer" } }, "type": "object" }, - "importyeti.SearchResult": { + "googlepatents.SearchResult": { "properties": { - "address": { - "example": "1 Bowerman Dr, Beaverton, Or 97005, Us", + "assignee": { + "example": "Emerson Electric Co", "type": "string" }, - "country_code": { - "example": "US", + "country_status": { + "items": { + "$ref": "#/definitions/googlepatents.CountryStatus" + }, + "type": "array" + }, + "detail_url": { + "example": "https://patents.google.com/patent/US10758101B2/en", "type": "string" }, - "kind": { - "example": "company", + "filing_date": { + "example": "2017-06-12", "type": "string" }, - "most_recent_shipment": { - "example": "23/11/2024", + "grant_date": { + "example": "2020-09-01", "type": "string" }, - "other_addresses_count": { - "example": 27, - "type": "integer" + "inventor": { + "example": "Thomas E. Fogarty, Jr.", + "type": "string" }, - "other_names_count": { - "example": 17, - "type": "integer" + "is_similar_document": { + "example": false, + "type": "boolean" }, - "slug": { - "example": "nike", + "language": { + "example": "en", "type": "string" }, - "title": { - "example": "Nike", + "pdf_url": { "type": "string" }, - "total_shipments": { - "example": 560, - "type": "integer" - } - }, - "type": "object" - }, - "importyeti.Shipment": { - "properties": { - "bill_of_lading": { - "example": "MOSJMK0H2607003", + "priority_date": { + "example": "2017-06-12", "type": "string" }, - "containers": { - "example": "1", + "publication_date": { + "example": "2020-09-01", "type": "string" }, - "date": { - "example": "07/16/2026", + "publication_number": { + "example": "US10758101B2", "type": "string" }, - "description": { - "example": "Kart Chains", + "snippet": { + "example": "a battery support plate adapted to support a battery...", "type": "string" }, - "estimated_freight_cost": { - "example": "$ 2,563.26", + "thumbnail_url": { "type": "string" }, - "quantity": { - "example": "2 ctn", + "title": { + "example": "Upright vacuum cleaner with battery support plate", "type": "string" - }, - "route": { - "example": "Asia US Pacific", + } + }, + "type": "object" + }, + "googlepatents.SimilarDocument": { + "properties": { + "publication_date": { + "example": "1990-06-26", "type": "string" }, - "supplier_location": { - "example": "Kaga Shi, Japan", + "publication_number": { + "example": "CA1270625A", "type": "string" }, - "supplier_name": { - "example": "Enuma Chain Mfg Co Ltd", + "title": { + "example": "Method and apparatus for setting pattern frame and press die", "type": "string" - }, - "supplier_slug": { - "example": "enuma-chain-mfg", + } + }, + "type": "object" + }, + "googlepatents.SuggestEntry": { + "properties": { + "description": { "type": "string" }, - "weight": { - "example": "959 kg", + "value": { + "example": "John Cronin", "type": "string" } }, "type": "object" }, - "importyeti.Supplier": { + "googlepatents.SuggestResponse": { "properties": { - "city": { - "example": "Maria Fe", + "fetched_at": { "type": "string" }, - "country": { - "example": "Philippines", + "field": { + "example": "inventor", "type": "string" }, - "description": { + "source_url": { "type": "string" }, - "hs_codes": { - "example": [ - "4602.19", - "8504.40" - ], + "suggestions": { "items": { - "type": "string" + "$ref": "#/definitions/googlepatents.SuggestEntry" }, "type": "array" }, - "name": { - "example": "Durus Industries", + "value": { + "example": "John", "type": "string" + } + }, + "type": "object" + }, + "googlepatents.classificationResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "product_categories": { - "example": [ - "Furnitures", - "Toys" - ], - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/googlepatents.ClassificationResponse" }, - "slug": { - "example": "durus-industries", + "msg": { + "example": "OK", "type": "string" - }, - "total_shipments": { - "example": 308, - "type": "integer" } }, "type": "object" }, - "importyeti.companyResponseDoc": { + "googlepatents.coverageResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/importyeti.Company" + "$ref": "#/definitions/googlepatents.CoverageResponse" }, "msg": { "example": "OK", @@ -113453,14 +118521,14 @@ }, "type": "object" }, - "importyeti.searchResponseDoc": { + "googlepatents.detailResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/importyeti.SearchResponse" + "$ref": "#/definitions/googlepatents.DetailResponse" }, "msg": { "example": "OK", @@ -113469,311 +118537,398 @@ }, "type": "object" }, - "indeed.Job": { + "googlepatents.recentResponseDoc": { "properties": { - "benefits": { - "items": { - "type": "string" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "city": { - "example": "New York", - "type": "string" + "data": { + "$ref": "#/definitions/googlepatents.RecentResponse" }, - "company": { - "example": "dv01", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "googlepatents.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "company_rating": { - "example": 3.5, - "type": "number" + "data": { + "$ref": "#/definitions/googlepatents.SearchResponse" }, - "company_review_count": { - "example": 20, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "googlepatents.suggestResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "company_url": { - "example": "https://www.indeed.com/cmp/Dv01", + "data": { + "$ref": "#/definitions/googlepatents.SuggestResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "googleplay.App": { + "properties": { + "ad_supported": { + "description": "Whether the app shows ads, as declared on its Google Play page.", + "example": false, + "type": "boolean" + }, + "android_max_version": { + "description": "Highest Android version the app supports, such as `15`. Shows `VARY` when none is listed.", + "example": "15", "type": "string" }, - "country": { - "example": "US", + "android_version": { + "description": "Minimum Android version the app requires, such as `8.0`.", + "example": "8.0", "type": "string" }, - "description_html": { + "android_version_text": { + "description": "Minimum Android version as Google Play words it, such as `8.0 and up`. Shows `Varies with device` when none is listed.", + "example": "8.0 and up", "type": "string" }, - "description_text": { + "app_id": { + "description": "Package name of the app on Google Play, such as `com.openai.chatgpt`. Use it with the other Google Play endpoints.", + "example": "com.openai.chatgpt", "type": "string" }, - "direct_apply": { + "available": { + "description": "Whether the app is available on Google Play.", "example": true, "type": "boolean" }, - "employment_type": { + "categories": { + "description": "Categories the app is listed under on Google Play.", + "items": { + "$ref": "#/definitions/googleplay.Category" + }, + "type": "array" + }, + "comments": { + "description": "Up to five user review texts shown on the app's details page.", + "example": [ + "[\"Great app\"", + "\"Very useful\"]" + ], "items": { "type": "string" }, "type": "array" }, - "job_key": { - "example": "a055dc6ab3a91a3b", + "content_rating": { + "description": "Content rating label shown on the app page, such as `Teen`.", + "example": "Teen", "type": "string" }, - "location": { - "example": "New York, NY 10003", + "content_rating_description": { + "description": "Content descriptors listed with the rating, such as `Users Interact, In-App Purchases`.", + "example": "Users Interact, In-App Purchases", "type": "string" }, - "postal_code": { - "example": "10003", + "currency": { + "description": "Currency code of the price, such as `USD`.", + "example": "USD", "type": "string" }, - "posted_at": { - "example": "2026-06-29T16:52:09Z", + "description": { + "description": "Full app description as plain text.", + "example": "Introducing ChatGPT for Android: OpenAI's latest advancements at your fingertips.", "type": "string" }, - "remote": { - "example": false, - "type": "boolean" - }, - "salary_currency": { - "example": "USD", + "description_html": { + "description": "Full app description with its HTML formatting kept.", + "example": "Introducing ChatGPT for Android: OpenAI's latest advancements at your fingertips.

This official app is free.", "type": "string" }, - "salary_max": { - "example": 160000, - "type": "number" + "developer": { + "description": "Name of the app's developer or publisher.", + "example": "OpenAI", + "type": "string" }, - "salary_min": { - "example": 140000, - "type": "number" + "developer_address": { + "description": "Developer's postal address as listed on the app page.", + "example": "1455 3RD St, San Francisco, CA 94158-2210, United States", + "type": "string" }, - "salary_period": { - "example": "yearly", + "developer_email": { + "description": "Developer's contact email as listed on the app page.", + "example": "support@openai.com", "type": "string" }, - "salary_text": { - "example": "$140,000 - $160,000 a year", + "developer_id": { + "description": "Google Play developer ID. Use it with the developer endpoint.", + "example": "7577165439232992817", "type": "string" }, - "state": { - "example": "NY", + "developer_internal_id": { + "description": "Google Play developer ID, the same value as `developer_id`.", + "example": "7577165439232992817", "type": "string" }, - "title": { - "example": "Senior Backend Engineer", + "developer_legal_address": { + "description": "Developer's legal address as listed on the app page, on one line.", + "example": "1455 3RD St, San Francisco, CA 94158-2210, United States", "type": "string" }, - "url": { - "example": "https://www.indeed.com/viewjob?jk=a055dc6ab3a91a3b", + "developer_legal_email": { + "description": "Developer's legal contact email as listed on the app page.", + "example": "support@openai.com", "type": "string" }, - "valid_through": { - "example": "2026-11-10T07:28:05Z", + "developer_legal_name": { + "description": "Developer's registered legal name as listed on the app page.", + "example": "OpenAI Opco, LLC", "type": "string" - } - }, - "type": "object" - }, - "indeed.JobCard": { - "properties": { - "city": { - "example": "New York", + }, + "developer_legal_phone_number": { + "description": "Developer's legal contact phone number as listed on the app page.", + "example": "+1 415-231-2395", "type": "string" }, - "company": { - "example": "dv01", + "developer_website": { + "description": "URL of the developer's website.", + "example": "https://help.openai.com", "type": "string" }, - "company_rating": { - "example": 3.6, - "type": "number" + "discount_end_date": { + "description": "End date of the current discounted price, when the app is on sale.", + "example": "2026-03-31T23:59:59Z", + "type": "string" }, - "company_review_count": { - "example": 20, - "type": "integer" + "early_access_enabled": { + "description": "Whether the app is in Google Play early access.", + "example": false, + "type": "boolean" }, - "indeed_applyable": { + "features": { + "description": "Feature highlights listed on the app page, each with a title and description.", + "items": { + "$ref": "#/definitions/googleplay.Feature" + }, + "type": "array" + }, + "free": { + "description": "Whether the app is free to install.", "example": true, "type": "boolean" }, - "job_key": { - "example": "a055dc6ab3a91a3b", + "genre": { + "description": "Main category name of the app, such as `Productivity`.", + "example": "Productivity", "type": "string" }, - "job_types": { - "items": { - "type": "string" - }, - "type": "array" + "genre_id": { + "description": "ID of the app's main category, such as `PRODUCTIVITY`.", + "example": "PRODUCTIVITY", + "type": "string" }, - "location": { - "example": "New York, NY 10003", + "header_image": { + "description": "URL of the app's header image.", + "example": "https://play-lh.googleusercontent.com/sample-header-image", "type": "string" }, - "new_job": { - "example": false, - "type": "boolean" + "histogram": { + "description": "Number of ratings at each star level, keyed `1` to `5`.", + "type": "object" }, - "postal_code": { - "example": "10003", + "iap_range": { + "description": "Price range of in-app purchases as Google Play shows it, such as `$0.99 - $199.99 per item`.", + "example": "$0.99 - $199.99 per item", "type": "string" }, - "posted_at": { - "example": "2026-06-29T16:52:09Z", + "icon": { + "description": "URL of the app icon.", + "example": "https://play-lh.googleusercontent.com/lmG9HlI0awHie0cyBieWXeNjpyXvHPwDBb8MNOVIyp0P8VEh95AiBHtUZSDVR3HLe3A", "type": "string" }, - "posted_relative": { - "example": "13 days ago", + "installs": { + "description": "Install count band as Google Play shows it, such as `100,000,000+`.", + "example": "100,000,000+", "type": "string" }, - "remote": { + "is_available_in_play_pass": { + "description": "Whether the app is part of Google Play Pass.", "example": false, "type": "boolean" }, - "salary_currency": { - "example": "USD", - "type": "string" + "max_installs": { + "description": "Larger of the two install-count figures Google Play reports for the app.", + "example": 500000000, + "type": "integer" }, - "salary_max": { - "example": 160000, - "type": "number" + "min_installs": { + "description": "Smaller of the two install-count figures Google Play reports, matching the `installs` band.", + "example": 100000000, + "type": "integer" }, - "salary_min": { - "example": 140000, + "more_by_developer": { + "description": "Other apps from the same developer, from the \"More by\" list on the app page.", + "items": { + "$ref": "#/definitions/googleplay.ListApp" + }, + "type": "array" + }, + "offers_iap": { + "description": "Whether the app offers in-app purchases.", + "example": true, + "type": "boolean" + }, + "original_price": { + "description": "Price before the discount, in the same currency as `price`. Omitted when there is no original price.", + "example": 4.99, "type": "number" }, - "salary_period": { - "example": "yearly", + "platforms": { + "description": "Device types the app supports, such as `phone`, `tablet` or `chromebook`.", + "example": [ + "[\"phone\"", + "\"tablet\"", + "\"chromebook\"]" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "preregister": { + "description": "Whether the app is open for pre-registration.", + "example": false, + "type": "boolean" + }, + "preview_video": { + "description": "URL of the app's preview video.", + "example": "https://play.google.com/preview/sample", "type": "string" }, - "salary_text": { - "example": "$140,000 - $160,000 a year", + "price": { + "description": "Price of the app in the currency given by `currency`. `0` for free apps.", + "example": 0, + "type": "number" + }, + "price_text": { + "description": "Price as Google Play displays it, such as `Free`.", + "example": "Free", "type": "string" }, - "snippet": { - "example": "Interact with a diverse team...", + "privacy_policy": { + "description": "URL of the app's privacy policy.", + "example": "https://openai.com/policies/privacy-policy", "type": "string" }, - "sponsored": { - "example": true, - "type": "boolean" + "ratings": { + "description": "Total number of star ratings the app has received.", + "example": 40123456, + "type": "integer" }, - "state": { - "example": "NY", + "recent_changes": { + "description": "Text of the latest release notes.", + "example": "Bug fixes and performance improvements.", "type": "string" }, - "title": { - "example": "Senior Backend Engineer", + "released": { + "description": "Release date of the app as listed on Google Play.", + "example": "2023-07-19", "type": "string" }, - "urgently_hiring": { - "example": false, - "type": "boolean" + "reviews": { + "description": "Total number of written reviews the app has received.", + "example": 1234567, + "type": "integer" }, - "url": { - "example": "https://www.indeed.com/viewjob?jk=a055dc6ab3a91a3b", - "type": "string" - } - }, - "type": "object" - }, - "indeed.LocationSuggestResponse": { - "properties": { - "query": { - "example": "Austin", + "score": { + "description": "Average star rating of the app, out of 5.", + "example": 4.8, + "type": "number" + }, + "score_text": { + "description": "Average rating as Google Play displays it, such as `4.8`.", + "example": "4.8", "type": "string" }, - "suggestions": { + "screenshots": { + "description": "URLs of the app's screenshots.", + "example": [ + "[\"https://play-lh.googleusercontent.com/sample-screenshot-1\"", + "\"https://play-lh.googleusercontent.com/sample-screenshot-2\"]" + ], "items": { - "$ref": "#/definitions/indeed.LocationSuggestion" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "indeed.LocationSuggestion": { - "properties": { - "name": { - "example": "Austin, TX (Travis County)", - "type": "string" }, - "source": { - "example": "PRECISELY", - "type": "string" - } - }, - "type": "object" - }, - "indeed.SearchResponse": { - "properties": { - "jobs": { + "similar_apps": { + "description": "Apps Google Play lists as similar to this one on the app page.", "items": { - "$ref": "#/definitions/indeed.JobCard" + "$ref": "#/definitions/googleplay.ListApp" }, "type": "array" }, - "location": { - "example": "New York, NY", + "summary": { + "description": "Short tagline shown under the app title.", + "example": "The official app by OpenAI", "type": "string" }, - "page": { - "example": 1, - "type": "integer" - }, - "query": { - "example": "software engineer", + "title": { + "description": "App name as shown on Google Play.", + "example": "ChatGPT", "type": "string" }, - "total": { - "example": 3040, - "type": "integer" - } - }, - "type": "object" - }, - "indeed.jobResponseDoc": { - "properties": { - "code": { - "example": 200, + "updated": { + "description": "Time the app was last updated, in Unix seconds.", + "example": 1736899200, "type": "integer" }, - "data": { - "$ref": "#/definitions/indeed.Job" + "url": { + "description": "Google Play details page URL for the app, in the requested language and country.", + "example": "https://play.google.com/store/apps/details?id=com.openai.chatgpt&hl=en&gl=us", + "type": "string" }, - "msg": { - "example": "OK", + "version": { + "description": "Current app version string. Shows `VARY` when the version differs by device.", + "example": "1.2026.056", "type": "string" - } - }, - "type": "object" - }, - "indeed.locationSuggestResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/indeed.LocationSuggestResponse" + "video": { + "description": "URL of the app's promo video.", + "example": "https://play.google.com/video/sample", + "type": "string" }, - "msg": { - "example": "OK", + "video_image": { + "description": "URL of the cover image for the app's promo video.", + "example": "https://play-lh.googleusercontent.com/sample-video-cover", "type": "string" } }, "type": "object" }, - "indeed.searchResponseDoc": { + "googleplay.AppDetailsResponse": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/indeed.SearchResponse" + "$ref": "#/definitions/googleplay.App" }, "msg": { "example": "OK", @@ -113782,546 +118937,407 @@ }, "type": "object" }, - "independent.AuthorArticle": { + "googleplay.Category": { "properties": { - "section": { - "type": "string" - }, - "section_url": { - "type": "string" - }, - "title": { + "id": { + "description": "Category ID on Google Play, such as `PRODUCTIVITY`.", + "example": "PRODUCTIVITY", "type": "string" }, - "url": { + "name": { + "description": "Category name as shown on Google Play, such as `Productivity`.", + "example": "Productivity", "type": "string" } }, "type": "object" }, - "independent.AuthorResponse": { + "googleplay.DataSafetyEntry": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/independent.AuthorArticle" - }, - "type": "array" - }, - "bio": { - "type": "string" - }, - "job_title": { - "type": "string" - }, - "name": { + "data": { + "description": "Kind of data covered by this disclosure, such as `Email address`.", + "example": "Email address", "type": "string" }, - "slug": { - "type": "string" + "optional": { + "description": "Whether providing this data is optional for the user.", + "example": false, + "type": "boolean" }, - "twitter": { + "purpose": { + "description": "Reason the developer gives for using this data, such as `Analytics`.", + "example": "Analytics", "type": "string" }, - "url": { + "type": { + "description": "Data group this item belongs to, such as `Personal info`.", + "example": "Personal info", "type": "string" } }, "type": "object" }, - "indianexpress.AuthorArticle": { + "googleplay.DataSafetyResult": { "properties": { - "image_url": { - "type": "string" - }, - "published_at": { - "type": "string" - }, - "summary": { - "type": "string" + "collected_data": { + "description": "Data the app says it collects, one entry per data item.", + "items": { + "$ref": "#/definitions/googleplay.DataSafetyEntry" + }, + "type": "array" }, - "title": { + "privacy_policy_url": { + "description": "URL of the app's privacy policy.", + "example": "https://openai.com/policies/privacy-policy", "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "indianexpress.AuthorResponse": { - "properties": { - "articles": { + "security_practices": { + "description": "Security practices the developer declares for the app.", "items": { - "$ref": "#/definitions/indianexpress.AuthorArticle" + "$ref": "#/definitions/googleplay.SecurityPractice" }, "type": "array" }, - "biography": { + "shared_data": { + "description": "Data the app says it shares with third parties, one entry per data item.", "items": { - "type": "string" + "$ref": "#/definitions/googleplay.DataSafetyEntry" }, "type": "array" - }, - "image_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" } }, "type": "object" }, - "indiatoday.AuthorArticle": { + "googleplay.DeviceRating": { "properties": { - "image_url": { + "device": { + "description": "Device type the rating breakdown covers: `phone`, `tablet` or `chromebook`.", + "example": "phone", "type": "string" }, - "section": { - "type": "string" + "histogram": { + "description": "Number of ratings at each star level on this device type, keyed `1` to `5`.", + "type": "object" }, - "summary": { - "type": "string" + "ratings": { + "description": "Total number of star ratings on this device type.", + "example": 326809, + "type": "integer" }, - "title": { - "type": "string" + "reviews": { + "description": "Total number of written reviews on this device type.", + "example": 8946, + "type": "integer" }, - "url": { + "score": { + "description": "Average star rating on this device type, out of 5.", + "example": 4.7, + "type": "number" + }, + "score_text": { + "description": "Average rating on this device type as Google Play displays it, such as `4.7`.", + "example": "4.7", "type": "string" } }, "type": "object" }, - "indiatoday.AuthorResponse": { + "googleplay.Feature": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/indiatoday.AuthorArticle" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { - "type": "string" - }, - "name": { + "description": { + "description": "Short explanation of the feature.", + "example": "Get answers, writing help, and image generation.", "type": "string" }, "title": { - "type": "string" - }, - "url": { + "description": "Name of the feature highlight.", + "example": "AI assistant", "type": "string" } }, "type": "object" }, - "indiewire.AuthorArticle": { + "googleplay.ListApp": { "properties": { - "published_at": { - "type": "string" - }, - "section": { + "app_id": { + "description": "Package name of the app on Google Play, such as `com.openai.chatgpt`.", + "example": "com.openai.chatgpt", "type": "string" }, - "summary": { + "currency": { + "description": "Currency code of the price, such as `USD`.", + "example": "USD", "type": "string" }, - "title": { + "developer": { + "description": "Name of the app's developer or publisher.", + "example": "OpenAI", "type": "string" }, - "url": { + "developer_id": { + "description": "Google Play developer ID. Use it with the developer endpoint.", + "example": "7577165439232992817", "type": "string" - } - }, - "type": "object" - }, - "indiewire.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/indiewire.AuthorArticle" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" }, - "has_next_page": { + "free": { + "description": "Whether the app is free to install.", + "example": true, "type": "boolean" }, - "headshot_url": { - "type": "string" - }, - "name": { + "icon": { + "description": "URL of the app icon.", + "example": "https://play-lh.googleusercontent.com/lmG9HlI0awHie0cyBieWXeNjpyXvHPwDBb8MNOVIyp0P8VEh95AiBHtUZSDVR3HLe3A", "type": "string" }, - "page": { - "type": "integer" - }, - "social_links": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "price": { + "description": "Price of the app in the currency given by `currency`. `0` for free apps.", + "example": 0, + "type": "number" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "inews.AuthorArticle": { - "properties": { - "image_url": { + "price_text": { + "description": "Price as Google Play displays it on the card, such as `FREE`.", + "example": "FREE", "type": "string" }, - "published_at": { - "type": "string" + "score": { + "description": "Average star rating of the app, out of 5.", + "example": 4.8, + "type": "number" }, - "section": { + "score_text": { + "description": "Average rating as Google Play displays it, such as `4.8`.", + "example": "4.8", "type": "string" }, "summary": { + "description": "Short tagline shown under the app title.", + "example": "The official app by OpenAI", "type": "string" }, "title": { + "description": "App name as shown on Google Play.", + "example": "ChatGPT", "type": "string" }, "url": { + "description": "Google Play details page URL for the app.", + "example": "https://play.google.com/store/apps/details?id=com.openai.chatgpt", "type": "string" } }, "type": "object" }, - "inews.AuthorResponse": { + "googleplay.Review": { "properties": { - "articles": { + "criterias": { + "description": "Per-criterion ratings attached to the review, when Google Play shows them.", "items": { - "$ref": "#/definitions/inews.AuthorArticle" + "$ref": "#/definitions/googleplay.ReviewCriteria" }, "type": "array" }, - "bio": { + "date": { + "description": "Time the review was posted, in UTC (RFC 3339).", + "example": "2026-02-18T12:34:56Z", "type": "string" }, - "image_url": { + "id": { + "description": "Google Play review ID.", + "example": "5b4e4d89-ce22-4f13-b676-bb3a7aafe278", "type": "string" }, - "name": { + "reply_date": { + "description": "Time the developer replied, in UTC (RFC 3339).", + "example": "2026-02-20T08:00:00Z", "type": "string" }, - "same_as": { - "items": { - "type": "string" - }, - "type": "array" - }, - "url": { + "reply_text": { + "description": "Developer's reply to the review. `null` when there is no reply.", + "example": "Thanks for the feedback!", "type": "string" - } - }, - "type": "object" - }, - "inquirer.AuthorArticle": { - "properties": { - "category": { + }, + "score": { + "description": "Star rating the reviewer gave, from 1 to 5.", + "example": 5, + "type": "integer" + }, + "score_text": { + "description": "Star rating as a string, such as `5`.", + "example": "5", "type": "string" }, - "published_at": { + "text": { + "description": "Body text of the review.", + "example": "Very helpful for quick answers and brainstorming.", "type": "string" }, + "thumbs_up": { + "description": "Number of users who marked the review as helpful.", + "example": 124, + "type": "integer" + }, "title": { + "description": "Review headline. Currently always `null`.", + "example": "Great app", "type": "string" }, "url": { + "description": "Google Play link to this review.", + "example": "https://play.google.com/store/apps/details?id=com.openai.chatgpt&reviewId=5b4e4d89-ce22-4f13-b676-bb3a7aafe278", "type": "string" - } - }, - "type": "object" - }, - "inquirer.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/inquirer.AuthorArticle" - }, - "type": "array" }, - "name": { + "user_image": { + "description": "URL of the reviewer's profile picture.", + "example": "https://play-lh.googleusercontent.com/a-/ALV-UjVsample", "type": "string" }, - "page": { - "type": "integer" + "user_name": { + "description": "Display name of the reviewer.", + "example": "Jane Doe", + "type": "string" }, - "url": { + "version": { + "description": "App version the review was written for. `null` when not shown.", + "example": "1.2026.056", "type": "string" } }, "type": "object" }, - "instacart.Department": { + "googleplay.ReviewCriteria": { "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "slug": { + "criteria": { + "description": "Name of the aspect being rated, such as `Accuracy`.", + "example": "Accuracy", "type": "string" }, - "subcategories": { - "items": { - "$ref": "#/definitions/instacart.Subcategory" - }, - "type": "array" + "rating": { + "description": "Rating given for this aspect. `null` when no rating is shown.", + "example": 5, + "type": "integer" } }, "type": "object" }, - "instacart.DepartmentsResponse": { + "googleplay.ReviewsResult": { "properties": { - "departments": { + "data": { + "description": "Reviews on this page, newest or sorted as requested.", "items": { - "$ref": "#/definitions/instacart.Department" + "$ref": "#/definitions/googleplay.Review" }, "type": "array" }, - "shop_id": { + "next_pagination_token": { + "description": "Token to pass as `next_pagination_token` to fetch the next page of reviews.", + "example": "CscBIr4BAb_yELvAqtSacgExc3y_bO88_b1Q", "type": "string" } }, "type": "object" }, - "instacart.ItemNutrition": { + "googleplay.SecurityPractice": { "properties": { - "label": { - "type": "string" - }, - "unit": { + "description": { + "description": "Longer explanation of the security practice.", + "example": "Your data is transferred over a secure connection", "type": "string" }, - "value": { + "practice": { + "description": "Security practice declared by the developer, such as `Data is encrypted in transit`.", + "example": "Data is encrypted in transit", "type": "string" } }, "type": "object" }, - "instacart.ItemPrice": { + "googleplay.Suggestion": { "properties": { - "current_price": { - "type": "number" - }, - "offer_label": { - "type": "string" - }, - "on_sale": { - "type": "boolean" - }, - "pricing_unit": { + "term": { + "example": "chatgpt", "type": "string" - }, - "regular_price": { - "type": "number" } }, "type": "object" }, - "instacart.ItemResponse": { + "googleplay.categoriesResponseDoc": { "properties": { - "available": { - "type": "boolean" - }, - "brand_name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "dietary_labels": { + "data": { "items": { "type": "string" }, "type": "array" }, - "id": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "nutrition": { - "items": { - "$ref": "#/definitions/instacart.ItemNutrition" - }, - "type": "array" - }, - "price": { - "$ref": "#/definitions/instacart.ItemPrice" - }, - "product_id": { - "type": "string" - }, - "size": { - "type": "string" - }, - "stock_level": { - "type": "string" - }, - "variant_options_summary": { - "type": "string" - } - }, - "type": "object" - }, - "instacart.SearchNearbyResponse": { - "properties": { - "postal_code": { - "type": "string" - }, - "query": { - "type": "string" - }, - "suggestions": { - "items": { - "$ref": "#/definitions/instacart.SearchSuggestion" - }, - "type": "array" - } - }, - "type": "object" - }, - "instacart.SearchResponse": { - "properties": { - "query": { - "type": "string" - }, - "shop_id": { + "msg": { + "example": "OK", "type": "string" - }, - "suggestions": { - "items": { - "$ref": "#/definitions/instacart.SearchSuggestion" - }, - "type": "array" } }, "type": "object" }, - "instacart.SearchSuggestion": { + "googleplay.dataSafetyResponseDoc": { "properties": { - "relative_url": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "term": { - "type": "string" + "data": { + "$ref": "#/definitions/googleplay.DataSafetyResult" }, - "thumbnail_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "instacart.Store": { + "googleplay.developerResultsResponseDoc": { "properties": { - "accepts_ebt": { - "description": "AcceptsEBT, SaverStore, and DeliveryETA are best-effort enrichment:\nseparate upstream calls (ShopTags, GetAccurateVisitorRetailerEtas)\nmade after the base store list, matched back by shop/retailer id. A\nfailure fetching either leaves these fields at their zero value\nrather than failing the whole Stores response -- see Service.Stores.", - "type": "boolean" - }, - "delivery_eta": { - "type": "string" - }, - "logo_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "retailer_id": { - "type": "string" - }, - "retailer_location_id": { - "type": "string" - }, - "retailer_type": { - "type": "string" - }, - "saver_store": { - "type": "boolean" - }, - "service_type": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "shop_id": { - "type": "string" + "data": { + "items": {}, + "type": "array" }, - "slug": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "instacart.StoreSearchResponse": { + "googleplay.listResultsResponseDoc": { "properties": { - "postal_code": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "stores": { - "items": { - "$ref": "#/definitions/instacart.Store" - }, + "data": { + "items": {}, "type": "array" - } - }, - "type": "object" - }, - "instacart.Subcategory": { - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" }, - "slug": { - "type": "string" - } - }, - "type": "object" - }, - "instacart.TrendingResponse": { - "properties": { - "postal_code": { + "msg": { + "example": "OK", "type": "string" - }, - "terms": { - "items": { - "$ref": "#/definitions/instacart.SearchSuggestion" - }, - "type": "array" } }, "type": "object" }, - "instacart.departmentsResponseDoc": { + "googleplay.permissionsResultsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/instacart.DepartmentsResponse" + "items": {}, + "type": "array" }, "msg": { "example": "OK", @@ -114330,14 +119346,17 @@ }, "type": "object" }, - "instacart.itemResponseDoc": { + "googleplay.ratingsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/instacart.ItemResponse" + "items": { + "$ref": "#/definitions/googleplay.DeviceRating" + }, + "type": "array" }, "msg": { "example": "OK", @@ -114346,14 +119365,14 @@ }, "type": "object" }, - "instacart.searchNearbyResponseDoc": { + "googleplay.reviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/instacart.SearchNearbyResponse" + "$ref": "#/definitions/googleplay.ReviewsResult" }, "msg": { "example": "OK", @@ -114362,14 +119381,15 @@ }, "type": "object" }, - "instacart.searchResponseDoc": { + "googleplay.searchResultsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/instacart.SearchResponse" + "items": {}, + "type": "array" }, "msg": { "example": "OK", @@ -114378,14 +119398,15 @@ }, "type": "object" }, - "instacart.storesResponseDoc": { + "googleplay.similarResultsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/instacart.StoreSearchResponse" + "items": {}, + "type": "array" }, "msg": { "example": "OK", @@ -114394,14 +119415,17 @@ }, "type": "object" }, - "instacart.trendingResponseDoc": { + "googleplay.suggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/instacart.TrendingResponse" + "items": { + "$ref": "#/definitions/googleplay.Suggestion" + }, + "type": "array" }, "msg": { "example": "OK", @@ -114410,1127 +119434,877 @@ }, "type": "object" }, - "instagram.BusinessAddress": { + "gosugamers.ArticleAuthor": { "properties": { - "city_name": { - "description": "City and region of the business location, such as `Mountain View, California`.", - "example": "Mountain View, California", - "type": "string" - }, - "latitude": { - "description": "Latitude of the business location, in decimal degrees.", - "example": 37.4221, - "type": "number" - }, - "longitude": { - "description": "Longitude of the business location, in decimal degrees.", - "example": -122.08432, - "type": "number" - }, - "street_address": { - "description": "Street address of the business location.", - "example": "1600 Amphitheatre Pkwy", + "name": { + "example": "Timaugustin", "type": "string" }, - "zip_code": { - "description": "Postal code of the business location.", - "example": "94043", + "url": { "type": "string" } }, "type": "object" }, - "instagram.Caption": { + "gosugamers.ArticleDetail": { "properties": { - "text": { - "description": "Caption text of the reel.", - "type": "string" + "authors": { + "items": { + "$ref": "#/definitions/gosugamers.ArticleAuthor" + }, + "type": "array" }, - "user": { - "allOf": [ - { - "$ref": "#/definitions/instagram.User" - } - ], - "description": "Account that wrote the caption." - } - }, - "type": "object" - }, - "instagram.ClipsMetadata": { - "properties": { - "audio_type": { - "description": "Kind of audio used by the reel, as Instagram labels it.", + "fetched_at": { + "example": "2026-10-27T10:00:00Z", "type": "string" }, - "is_shared_to_fb": { - "description": "Whether the reel was also shared to Facebook.", - "type": "boolean" - }, - "original_sound_info": { - "allOf": [ - { - "$ref": "#/definitions/instagram.OriginalSoundInfo" - } - ], - "description": "Details of the original sound used in the reel." - } - }, - "type": "object" - }, - "instagram.IGArtist": { - "properties": { "id": { - "description": "Instagram ID of the account credited for the sound.", + "example": "79434", "type": "string" }, - "username": { - "description": "Username of the account credited for the sound.", + "image_caption": { "type": "string" - } - }, - "type": "object" - }, - "instagram.IGCaption": { - "properties": { - "created_at": { - "description": "Time the caption was written, in Unix seconds.", - "type": "integer" }, - "pk": { - "description": "Instagram ID of the caption.", + "image_url": { "type": "string" }, - "text": { - "description": "Caption text of the post.", - "type": "string" - } - }, - "type": "object" - }, - "instagram.IGOwner": { - "properties": { - "id": { - "description": "Instagram ID of the account that owns the post.", + "published_at": { + "example": "2026-10-28T15:25:00Z", "type": "string" }, - "is_private": { - "description": "Whether the owning account is private.", - "type": "boolean" + "related": { + "items": { + "$ref": "#/definitions/gosugamers.RelatedArticle" + }, + "type": "array" }, - "pk": { - "description": "Instagram primary key of the account that owns the post.", + "section": { + "example": "entertainment", "type": "string" }, - "profile_pic_url": { - "description": "URL of the owning account's profile picture.", + "source_url": { + "example": "https://www.gosugamers.net/valorant/matches", "type": "string" }, - "username": { - "description": "Username of the account that owns the post.", - "type": "string" - } - }, - "type": "object" - }, - "instagram.IGUser": { - "properties": { - "full_name": { - "description": "Display name of the account that posted the media.", + "teaser": { "type": "string" }, - "id": { - "description": "Instagram ID of the account that posted the media.", + "text": { "type": "string" }, - "is_private": { - "description": "Whether the account is private.", - "type": "boolean" - }, - "is_verified": { - "description": "Whether the account has Instagram's verified badge.", - "type": "boolean" - }, - "pk": { - "description": "Instagram primary key of the account that posted the media.", + "title": { "type": "string" }, - "profile_pic_url": { - "description": "URL of the account's profile picture.", + "type": { + "enum": [ + "news", + "features" + ], + "example": "news", "type": "string" }, - "username": { - "description": "Username of the account that posted the media.", + "updated_at": { + "example": "2026-10-28T15:30:39Z", "type": "string" - } - }, - "type": "object" - }, - "instagram.ImageCandidate": { - "properties": { - "height": { - "description": "Height of this image version, in pixels.", - "type": "integer" }, "url": { - "description": "URL of this image version.", "type": "string" - }, - "width": { - "description": "Width of this image version, in pixels.", - "type": "integer" - } - }, - "type": "object" - }, - "instagram.ImageVersions2": { - "properties": { - "candidates": { - "description": "Available versions of the post image, each at its own size and URL.", - "items": { - "$ref": "#/definitions/instagram.ImageCandidate" - }, - "type": "array" } }, "type": "object" }, - "instagram.InstagramComment": { + "gosugamers.ArticleSummary": { "properties": { - "comment_like_count": { - "type": "integer" - }, - "created_at": { - "type": "integer" + "author": { + "example": "Timaugustin", + "type": "string" }, "id": { + "example": "79434", "type": "string" }, - "parent_comment_id": { + "image_url": { "type": "string" }, - "reply_count": { - "type": "integer" + "published_at": { + "example": "2026-10-28T15:25:00Z", + "type": "string" }, - "text": { + "section": { + "example": "entertainment", "type": "string" }, - "user": { - "$ref": "#/definitions/instagram.InstagramCommentUser" - } - }, - "type": "object" - }, - "instagram.InstagramCommentUser": { - "properties": { - "id": { + "teaser": { "type": "string" }, - "profile_pic_url": { + "title": { "type": "string" }, - "username": { + "type": { + "enum": [ + "news", + "features" + ], + "example": "news", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "instagram.InstagramCommentsResponse": { + "gosugamers.ArticlesResponse": { "properties": { - "comments": { + "articles": { "items": { - "$ref": "#/definitions/instagram.InstagramComment" + "$ref": "#/definitions/gosugamers.ArticleSummary" }, "type": "array" }, - "paging_info": { - "$ref": "#/definitions/instagram.PagingInfo" - }, - "shortcode": { - "type": "string" - } - }, - "type": "object" - }, - "instagram.InstagramPostAuthor": { - "properties": { - "id": { - "type": "string" + "count": { + "example": 10, + "type": "integer" }, - "username": { - "type": "string" - } - }, - "type": "object" - }, - "instagram.InstagramUserPost": { - "properties": { - "accessibility_caption": { + "fetched_at": { + "example": "2026-10-27T10:00:00Z", "type": "string" }, - "caption": { - "type": "string" + "page": { + "example": 1, + "type": "integer" }, - "carousel_media_count": { + "page_size": { + "example": 10, "type": "integer" }, - "display_uri": { + "section": { + "example": "valorant", "type": "string" }, - "id": { + "source_url": { + "example": "https://www.gosugamers.net/valorant/matches", "type": "string" }, - "media_type": { + "total_pages": { + "example": 5106, "type": "integer" }, - "product_type": { - "type": "string" + "total_rows": { + "example": 51051, + "type": "integer" }, - "shortcode": { + "type": { + "enum": [ + "news", + "features" + ], + "example": "news", "type": "string" - }, - "user": { - "$ref": "#/definitions/instagram.InstagramPostAuthor" } }, "type": "object" }, - "instagram.InstagramUserPostsResponse": { + "gosugamers.BattleRoyalePlayer": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/instagram.InstagramUserPost" - }, - "type": "array" + "country_code": { + "example": "IQ", + "type": "string" }, - "paging_info": { - "$ref": "#/definitions/instagram.PagingInfo" + "id": { + "example": "505275", + "type": "string" }, - "username": { + "name": { + "example": "AZHY", + "type": "string" + }, + "slug": { + "example": "azhy", "type": "string" } }, "type": "object" }, - "instagram.Item": { - "properties": { - "media": { - "allOf": [ - { - "$ref": "#/definitions/instagram.Media" - } - ], - "description": "The reel in this entry." - } - }, - "type": "object" - }, - "instagram.Media": { + "gosugamers.BattleRoyaleTeam": { "properties": { - "caption": { - "allOf": [ - { - "$ref": "#/definitions/instagram.Caption" - } - ], - "description": "pointer so it can be nil" + "country_code": { + "example": "IQ", + "type": "string" }, - "code": { + "id": { + "example": "52872", "type": "string" }, - "comment_count": { - "description": "Number of comments on the reel.", + "kill_points": { + "example": 11, "type": "integer" }, - "display_uri": { - "description": "URL of the reel's thumbnail image.", - "type": "string" + "kills": { + "example": 11, + "type": "integer" }, - "id": { - "description": "Instagram media ID of the reel.", + "name": { + "example": "4K Esports", "type": "string" }, - "image_versions2": { - "allOf": [ - { - "$ref": "#/definitions/instagram.ReelImageVersions" - } - ], - "description": "Available versions of the reel's thumbnail, each with its own URL." + "placement": { + "example": 1, + "type": "integer" }, - "like_count": { - "description": "Number of likes on the reel.", + "placement_points": { + "example": 0, "type": "integer" }, - "media_type": { - "description": "1=Image 2=Video 8=Album", + "players": { + "items": { + "$ref": "#/definitions/gosugamers.BattleRoyalePlayer" + }, + "type": "array" + }, + "points_addition": { "type": "integer" }, - "play_count": { - "description": "Number of times the reel has been played.", + "points_deduction": { "type": "integer" }, - "taken_at": { - "description": "Time the reel was posted, in Unix seconds. Not available for public reels, so currently omitted.", + "slug": { + "example": "4k-esports", + "type": "string" + }, + "total_points": { + "example": 11, "type": "integer" } }, "type": "object" }, - "instagram.MediaItem": { + "gosugamers.BroadcastTalent": { "properties": { - "accessibility_caption": { - "description": "Image description (alt text) Instagram provides for accessibility.", + "country_code": { + "example": "GB", "type": "string" }, - "caption": { - "allOf": [ - { - "$ref": "#/definitions/instagram.IGCaption" - } - ], - "description": "Caption of the post." - }, - "clips_metadata": { - "allOf": [ - { - "$ref": "#/definitions/instagram.ClipsMetadata" - } - ], - "description": "Reel-specific details such as the audio used." - }, - "code": { + "country_name": { + "example": "United Kingdom", "type": "string" }, - "comment_count": { - "description": "Number of comments on the post.", - "type": "integer" - }, - "display_uri": { - "description": "URL of the post's display image.", + "game": { + "example": "valorant", "type": "string" }, - "has_audio": { - "description": "Whether the media has an audio track.", - "type": "boolean" - }, "id": { - "description": "Instagram media ID, such as `3693449175561021455_1067259270`.", + "example": "597", "type": "string" }, - "image_versions2": { - "allOf": [ - { - "$ref": "#/definitions/instagram.ImageVersions2" - } - ], - "description": "Available versions of the post image, each with its own URL and size." - }, - "like_count": { - "description": "Number of likes on the post.", - "type": "integer" - }, - "link": { - "description": "Link Instagram returns with the media, when present.", + "image_url": { "type": "string" }, - "media_type": { - "description": "Kind of media: `1` for image, `2` for video and `8` for album.", - "type": "integer" - }, - "original_height": { - "description": "Height of the original media, in pixels.", - "type": "integer" - }, - "original_width": { - "description": "Width of the original media, in pixels.", - "type": "integer" - }, - "owner": { - "allOf": [ - { - "$ref": "#/definitions/instagram.IGOwner" - } - ], - "description": "Account that owns the post." - }, - "pk": { - "description": "Numeric Instagram ID of the post, the first part of `id`.", + "language_code": { + "example": "EN", "type": "string" }, - "product_type": { - "description": "Kind of post, such as `clips` for a Reel or `feed` for a standard post.", + "name": { + "example": "Frankie", "type": "string" }, - "taken_at": { - "description": "Time the post was published, in Unix seconds.", - "type": "integer" - }, - "user": { - "allOf": [ - { - "$ref": "#/definitions/instagram.IGUser" - } + "roles": { + "example": [ + "Host" ], - "description": "Account that posted the media." - }, - "video_versions": { - "description": "Available renditions of the video, each with its own URL and size.", "items": { - "$ref": "#/definitions/instagram.VideoVersion" + "type": "string" }, "type": "array" }, - "view_count": { - "description": "Number of views on the video.", - "type": "integer" + "slug": { + "example": "frankie", + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "instagram.OriginalSoundInfo": { + "gosugamers.EncountersResponse": { "properties": { - "audio_asset_id": { - "description": "Instagram ID of the audio asset.", + "count": { + "example": 1, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", "type": "string" }, - "ig_artist": { - "allOf": [ - { - "$ref": "#/definitions/instagram.IGArtist" - } - ], - "description": "Account credited for the sound." + "game": { + "example": "valorant", + "type": "string" }, - "is_explicit": { - "description": "Whether the sound is marked explicit.", - "type": "boolean" + "match_id": { + "example": "660816", + "type": "string" }, - "original_audio_title": { - "description": "Title of the original sound.", + "matches": { + "items": { + "$ref": "#/definitions/gosugamers.MatchSummary" + }, + "type": "array" + }, + "source_url": { + "example": "https://www.gosugamers.net/valorant/matches", "type": "string" }, - "should_mute_audio": { - "description": "Whether Instagram flags the audio to be muted.", - "type": "boolean" + "team1_id": { + "example": "38335", + "type": "string" + }, + "team2_id": { + "example": "37547", + "type": "string" } }, "type": "object" }, - "instagram.PagingInfo": { + "gosugamers.Game": { "properties": { - "max_id": { - "description": "Cursor to pass unchanged as `max_id` to fetch the next page of reels.", + "name": { + "example": "Valorant", "type": "string" }, - "more_available": { - "description": "Whether more reels are available after this page.", - "type": "boolean" + "slug": { + "enum": [ + "dota2", + "counterstrike", + "lol", + "valorant", + "mobile-legends", + "pubg-mobile", + "wild-rift", + "free-fire", + "battlegrounds-mobile-india" + ], + "example": "valorant", + "type": "string" } }, "type": "object" }, - "instagram.Post": { + "gosugamers.GameMap": { "properties": { - "caption": { - "description": "Caption text of the post.", - "example": "You popped the big question. For all the questions that follow, try AI Mode in Search.", - "type": "string" - }, - "children": { - "description": "nested carousel media", - "items": { - "$ref": "#/definitions/instagram.Post" - }, - "type": "array" - }, - "comment_count": { - "description": "Number of comments on the post.", - "example": 43, - "type": "integer" - }, - "height": { - "description": "Height of the post media, in pixels.", - "example": 1000, - "type": "integer" - }, "id": { - "description": "Instagram media ID of the post.", - "example": "3694065742636342530", + "example": "453", "type": "string" }, - "is_video": { - "description": "Whether the post is a video.", - "example": false, - "type": "boolean" - }, - "like_count": { - "description": "Number of likes on the post.", - "example": 1880, - "type": "integer" - }, - "media_url": { - "description": "URL of the post's image, or its cover image for a video.", - "example": "https://scontent-lax3-2.cdninstagram.com/v/t51.2885-15/…n.jpg", + "image_url": { "type": "string" }, - "product_type": { - "description": "Kind of post, such as `clips` for a Reel or `feed` for a standard post.", - "example": "", + "name": { + "example": "Summit", "type": "string" - }, - "shortcode": { - "description": "Short code from the post URL. Use it as `post_id` with the post endpoint.", - "example": "DND9TiOx10C", + } + }, + "type": "object" + }, + "gosugamers.GamePick": { + "properties": { + "image_url": { "type": "string" }, - "taken_at": { - "example": "2025-08-07T17:16:14Z", + "pick": { + "example": "Neon", "type": "string" }, - "video_url": { - "description": "URL of the post's video. Present only for video posts.", - "example": "", - "type": "string" + "player": { + "$ref": "#/definitions/gosugamers.GamePlayer" }, - "view_count": { - "description": "counters become pointers so they vanish when nil", - "example": 25023, + "slot": { + "example": 6, "type": "integer" }, - "width": { - "description": "Width of the post media, in pixels.", - "example": 750, + "type": { + "example": 1, "type": "integer" } }, "type": "object" }, - "instagram.ReelImageCandidate": { + "gosugamers.GamePlayer": { "properties": { - "height": { - "description": "Height of this thumbnail version, in pixels. Omitted when unknown.", - "type": "integer" + "id": { + "example": "373491", + "type": "string" }, - "url": { - "description": "URL of this thumbnail version.", + "name": { + "example": "Ninebody", "type": "string" }, - "width": { - "description": "Width of this thumbnail version, in pixels. Omitted when unknown.", - "type": "integer" - } - }, - "type": "object" - }, - "instagram.ReelImageVersions": { - "properties": { - "candidates": { - "description": "Available versions of the reel thumbnail, each with its own URL.", - "items": { - "$ref": "#/definitions/instagram.ReelImageCandidate" - }, - "type": "array" + "slug": { + "example": "ninebody", + "type": "string" } }, "type": "object" }, - "instagram.ReelResponse": { + "gosugamers.GameRef": { "properties": { - "items": { - "description": "Reels on this page.", - "items": { - "$ref": "#/definitions/instagram.Item" - }, - "type": "array" + "id": { + "example": "1361936", + "type": "string" }, - "paging_info": { - "allOf": [ - { - "$ref": "#/definitions/instagram.PagingInfo" - } - ], - "description": "Cursor details for fetching the next page of reels." + "number": { + "example": 1, + "type": "integer" } }, "type": "object" }, - "instagram.RelatedProfile": { + "gosugamers.GameRound": { "properties": { - "full_name": { - "description": "Display name of the suggested account.", - "example": "Gmail", - "type": "string" - }, - "id": { - "description": "Numeric Instagram user ID of the suggested account.", - "example": "1234567890", - "type": "string" - }, - "is_private": { - "description": "Whether the suggested account is private.", + "overtime": { "example": false, "type": "boolean" }, - "is_verified": { - "description": "Whether the suggested account has Instagram's verified badge.", - "example": true, - "type": "boolean" + "period": { + "example": 0, + "type": "integer" }, - "profile_pic_url": { - "description": "URL of the suggested account's profile picture.", - "example": "https://…/profile.jpg", - "type": "string" + "team1_score": { + "example": 6, + "type": "integer" }, - "username": { - "description": "Username of the suggested account.", - "example": "gmail", - "type": "string" + "team2_score": { + "example": 6, + "type": "integer" } }, "type": "object" }, - "instagram.User": { + "gosugamers.GameTeam": { "properties": { - "full_name": { - "description": "Display name of the account.", - "type": "string" + "first_pick": { + "example": false, + "type": "boolean" }, "id": { - "description": "Numeric Instagram user ID of the account.", + "example": "58674", "type": "string" }, - "username": { - "description": "Username of the account.", - "type": "string" - } - }, - "type": "object" - }, - "instagram.UserProfile": { - "properties": { - "bio_links": { - "description": "Links listed in the profile bio.", - "example": [ - "[\"https://linkin.bio/google\"]" - ], + "lineup": { "items": { - "type": "string" + "$ref": "#/definitions/gosugamers.GamePlayer" }, "type": "array" }, - "biography": { - "description": "Bio text shown on the profile.", - "example": "Here to help.", - "type": "string" - }, - "category_name": { - "description": "not present in sample", - "example": "", + "logo_url": { "type": "string" }, - "external_url": { - "description": "Website link shown on the profile.", - "example": "https://linkin.bio/google", + "name": { + "example": "Unsettled Resentment", "type": "string" }, - "fbid": { - "description": "Alternate numeric ID of the account, as Instagram returns it.", - "example": "17841401778116675", - "type": "string" + "picks": { + "items": { + "$ref": "#/definitions/gosugamers.GamePick" + }, + "type": "array" }, - "followers_count": { - "description": "Number of accounts following this profile.", - "example": 15607284, + "placement": { + "example": 1, "type": "integer" }, - "following_count": { - "description": "Number of accounts this profile follows.", - "example": 38, + "score": { + "example": 17, "type": "integer" }, - "full_name": { - "description": "Display name shown on the profile.", - "example": "Google", + "side": { + "example": "Radiant", "type": "string" }, - "id": { - "description": "Numeric Instagram user ID. Use it with the reels endpoint.", - "example": "1067259270", + "slug": { + "example": "unsettled-resentment", "type": "string" }, - "is_private": { - "description": "Whether the account is private.", - "example": false, - "type": "boolean" - }, - "is_verified": { - "description": "Whether the account has Instagram's verified badge.", + "winner": { "example": true, "type": "boolean" - }, - "location": { - "allOf": [ - { - "$ref": "#/definitions/instagram.BusinessAddress" - } - ], - "description": "Business address shown on the profile." - }, - "posts": { - "description": "Recent posts shown on the profile.", - "items": { - "$ref": "#/definitions/instagram.Post" - }, - "type": "array" - }, - "posts_count": { - "description": "Total number of posts on the profile.", - "example": 2867, - "type": "integer" - }, - "profile_pic_url": { - "description": "URL of the profile picture.", - "example": "https://scontent-lax3-1.cdninstagram.com/v/t51.2885-19/…n.jpg", - "type": "string" - }, - "related_profiles": { - "description": "Accounts Instagram suggests as related to this profile.", - "items": { - "$ref": "#/definitions/instagram.RelatedProfile" - }, - "type": "array" - }, - "username": { - "description": "Instagram username of the profile.", - "example": "google", - "type": "string" } }, "type": "object" }, - "instagram.VideoVersion": { + "gosugamers.GameVOD": { "properties": { - "height": { - "description": "Height of this video rendition, in pixels.", - "type": "integer" - }, - "type": { - "description": "Instagram's numeric code for this video rendition.", - "type": "integer" - }, - "url": { - "description": "URL of this video rendition.", + "channel": { "type": "string" }, - "width": { - "description": "Width of this video rendition, in pixels.", - "type": "integer" - } - }, - "type": "object" - }, - "instagram.commentsResponseDoc": { - "properties": { - "code": { - "example": 200, + "host": { + "example": 0, "type": "integer" }, - "data": { - "$ref": "#/definitions/instagram.InstagramCommentsResponse" - }, - "msg": { - "example": "OK", + "thumb_url": { "type": "string" - } - }, - "type": "object" - }, - "instagram.postResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/instagram.MediaItem" + "title": { + "type": "string" }, - "msg": { - "example": "OK", + "video_id": { + "example": "qqauxAJWoFw", "type": "string" } }, "type": "object" }, - "instagram.profileResponseDoc": { + "gosugamers.GamesResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 6, "type": "integer" }, - "data": { - "$ref": "#/definitions/instagram.UserProfile" - }, - "msg": { - "example": "OK", + "fetched_at": { + "example": "2026-10-27T10:00:00Z", "type": "string" - } - }, - "type": "object" - }, - "instagram.reelsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/instagram.ReelResponse" + "games": { + "items": { + "$ref": "#/definitions/gosugamers.Game" + }, + "type": "array" }, - "msg": { - "example": "OK", + "source_url": { + "example": "https://www.gosugamers.net/valorant/matches", "type": "string" } }, "type": "object" }, - "instagram.userPostsResponseDoc": { + "gosugamers.MatchDetail": { "properties": { - "code": { - "example": 200, + "best_of": { + "example": 3, "type": "integer" }, - "data": { - "$ref": "#/definitions/instagram.InstagramUserPostsResponse" - }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "investopedia.AuthorInfoItem": { - "properties": { - "label": { + "fetched_at": { + "example": "2026-10-27T10:00:00Z", "type": "string" }, - "url": { - "type": "string" + "finished": { + "example": false, + "type": "boolean" }, - "value": { + "game": { + "example": "valorant", "type": "string" - } - }, - "type": "object" - }, - "investopedia.AuthorResponse": { - "properties": { - "articles": { + }, + "game_numbers": { + "example": [ + 1 + ], "items": { - "$ref": "#/definitions/investopedia.HeadlineItem" + "type": "integer" }, "type": "array" }, - "biography": { + "games": { "items": { - "type": "string" + "$ref": "#/definitions/gosugamers.GameRef" }, "type": "array" }, - "description": { + "group": { + "example": "Week 2", "type": "string" }, - "image_url": { + "id": { + "example": "663300", "type": "string" }, - "info": { + "opponents": { "items": { - "$ref": "#/definitions/investopedia.AuthorInfoItem" + "$ref": "#/definitions/gosugamers.Opponent" }, "type": "array" }, - "job_title": { + "round": { + "example": "Round 1", "type": "string" }, - "name": { + "source_url": { + "example": "https://www.gosugamers.net/valorant/matches", "type": "string" }, - "quote": { + "stage": { + "type": "string" + }, + "start_time": { + "example": "2026-10-27T12:45:00Z", "type": "string" }, + "streams": { + "items": { + "$ref": "#/definitions/gosugamers.Stream" + }, + "type": "array" + }, + "tournament": { + "$ref": "#/definitions/gosugamers.TournamentRef" + }, "url": { "type": "string" + }, + "venue": { + "type": "string" } }, "type": "object" }, - "investopedia.HeadlineItem": { + "gosugamers.MatchGameResponse": { "properties": { - "author": { - "type": "string" + "battle_royale_teams": { + "description": "BattleRoyaleTeams is filled for battle-royale titles (PUBG Mobile), which list every\nteam's placement and points instead of two sides.", + "items": { + "$ref": "#/definitions/gosugamers.BattleRoyaleTeam" + }, + "type": "array" }, - "image_url": { + "best_of": { + "example": 3, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", "type": "string" }, - "published_at": { + "game": { + "example": "valorant", "type": "string" }, - "summary": { + "id": { + "example": "1361936", "type": "string" }, - "title": { + "map": { + "$ref": "#/definitions/gosugamers.GameMap" + }, + "match_number": { + "example": 1, + "type": "integer" + }, + "number": { + "example": 1, + "type": "integer" + }, + "player_based": { + "example": false, + "type": "boolean" + }, + "round": { + "example": "Round 1", "type": "string" }, - "type": { + "rounds": { + "items": { + "$ref": "#/definitions/gosugamers.GameRound" + }, + "type": "array" + }, + "source_url": { + "example": "https://www.gosugamers.net/valorant/matches", "type": "string" }, - "url": { + "start_time": { + "example": "2026-10-27T01:00:00Z", "type": "string" + }, + "teams": { + "items": { + "$ref": "#/definitions/gosugamers.GameTeam" + }, + "type": "array" + }, + "vods": { + "items": { + "$ref": "#/definitions/gosugamers.GameVOD" + }, + "type": "array" } }, "type": "object" }, - "iol.AuthorArticle": { + "gosugamers.MatchListResponse": { "properties": { - "published_date": { - "description": "PublishedDate is the YYYY-MM-DD date IOL puts in the article URL. The\nauthor page itself only shows a relative \"2 days ago\" label, so this is\nomitted for the rare undated (partnered) URL.", - "type": "string" - }, - "section": { - "type": "string" + "count": { + "example": 10, + "type": "integer" }, - "summary": { + "fetched_at": { + "example": "2026-10-27T10:00:00Z", "type": "string" }, - "title": { + "game": { + "example": "valorant", "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "iol.AuthorResponse": { - "properties": { - "articles": { + "matches": { "items": { - "$ref": "#/definitions/iol.AuthorArticle" + "$ref": "#/definitions/gosugamers.MatchSummary" }, "type": "array" }, - "image_url": { - "type": "string" + "page": { + "example": 1, + "type": "integer" }, - "name": { - "type": "string" + "page_size": { + "example": 10, + "type": "integer" }, - "role": { + "source_url": { + "example": "https://www.gosugamers.net/valorant/matches", "type": "string" }, - "slug": { - "type": "string" + "total_pages": { + "example": 165, + "type": "integer" }, - "url": { - "type": "string" + "total_rows": { + "example": 1647, + "type": "integer" } }, "type": "object" }, - "irishindependent.AuthorArticle": { + "gosugamers.MatchSummary": { "properties": { - "image_url": { - "type": "string" - }, - "paywalled": { - "description": "Paywalled is true when the article is premium (subscriber) content.", + "finished": { + "example": false, "type": "boolean" }, - "published_at": { + "game": { + "example": "valorant", "type": "string" }, - "section": { + "group": { + "example": "Week 2", "type": "string" }, - "summary": { + "id": { + "example": "663300", "type": "string" }, - "title": { + "match_number": { + "example": 2, + "type": "integer" + }, + "round": { + "example": "Round 1", + "type": "string" + }, + "stage": { + "example": "Main Event", + "type": "string" + }, + "start_time": { + "example": "2026-10-27T12:45:00Z", "type": "string" }, + "teams": { + "items": { + "$ref": "#/definitions/gosugamers.Team" + }, + "type": "array" + }, + "tournament": { + "$ref": "#/definitions/gosugamers.TournamentRef" + }, "url": { "type": "string" + }, + "venue": { + "example": "The Hub, Shanghai, China", + "type": "string" } }, "type": "object" }, - "irishindependent.AuthorResponse": { + "gosugamers.Opponent": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/irishindependent.AuthorArticle" - }, - "type": "array" + "country": { + "example": "China", + "type": "string" }, - "bio": { + "country_code": { + "example": "CN", "type": "string" }, - "email": { + "id": { + "example": "51203", "type": "string" }, - "image_url": { + "logo_url": { "type": "string" }, "name": { + "example": "Wolves Esports", "type": "string" }, - "same_as": { - "items": { - "type": "string" - }, - "type": "array" - }, - "title": { - "type": "string" + "placement": { + "example": 1, + "type": "integer" }, - "total_articles": { - "description": "TotalArticles is the number of articles the profile lists in total; the\nArticles slice holds only the first page of them.", + "score": { + "example": 2, "type": "integer" }, - "url": { + "slug": { + "example": "wolves-esports", + "type": "string" + }, + "tag": { + "example": "WOL", "type": "string" + }, + "winner": { + "example": true, + "type": "boolean" + }, + "world_ranking": { + "example": 69, + "type": "integer" } }, "type": "object" }, - "irishtimes.AuthorResponse": { + "gosugamers.Participant": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "country_code": { + "example": "US", + "type": "string" }, - "email": { + "country_name": { + "example": "United States", "type": "string" }, - "image_url": { + "id": { + "example": "37547", "type": "string" }, - "job_title": { + "logo_url": { "type": "string" }, "name": { + "example": "100T", "type": "string" }, - "twitter": { + "ranking": { + "example": 1, + "type": "integer" + }, + "slug": { + "example": "100-thieves", + "type": "string" + }, + "type": { + "example": "Team", "type": "string" }, "url": { @@ -115539,849 +120313,1284 @@ }, "type": "object" }, - "japantimes.AuthorResponse": { + "gosugamers.PlayerDetail": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" + "about": { + "type": "string" }, - "name": { + "country": { + "example": "Taiwan", "type": "string" }, - "url": { + "country_code": { + "example": "TW", "type": "string" - } - }, - "type": "object" - }, - "jcrew.CategoriesResponse": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/jcrew.NavCategory" - }, - "type": "array" }, - "departments": { - "items": { - "type": "string" - }, - "type": "array" + "current_team": { + "$ref": "#/definitions/gosugamers.TeamStint" + }, + "draws": { + "example": 0, + "type": "integer" + }, + "earnings_usd": { + "example": 27692, + "type": "number" + }, + "elo_rating": { + "example": 952, + "type": "integer" + }, + "facebook": { + "type": "string" }, "fetched_at": { + "example": "2026-10-27T10:00:00Z", "type": "string" }, - "site": { + "first_name": { + "example": "Chun-ting", "type": "string" }, - "source_url": { + "game": { + "example": "valorant", "type": "string" - } - }, - "type": "object" - }, - "jcrew.CategoryProduct": { - "properties": { - "average_rating": { - "type": "number" }, - "badge": { + "id": { + "example": "368742", "type": "string" }, - "color_codes": { + "image_url": { + "type": "string" + }, + "last_name": { + "example": "Liu", + "type": "string" + }, + "losses": { + "example": 267, + "type": "integer" + }, + "name": { + "example": "Spring", + "type": "string" + }, + "previous_teams": { "items": { - "type": "string" + "$ref": "#/definitions/gosugamers.TeamStint" }, "type": "array" }, - "currency": { + "region": { + "example": "China", "type": "string" }, - "default_color_code": { + "region_ranking": { + "example": 16, + "type": "integer" + }, + "source_url": { + "example": "https://www.gosugamers.net/valorant/matches", "type": "string" }, - "discount_max_percent": { + "streak": { + "example": -1, "type": "integer" }, - "discount_min_percent": { + "twitter": { + "type": "string" + }, + "url": { + "type": "string" + }, + "win_rate_percent": { + "example": 46, "type": "integer" }, - "family_id": { + "wins": { + "example": 228, + "type": "integer" + }, + "world_ranking": { + "example": 69, + "type": "integer" + }, + "youtube": { + "type": "string" + } + }, + "type": "object" + }, + "gosugamers.RankRegion": { + "properties": { + "id": { + "example": 33, + "type": "integer" + }, + "name": { + "example": "EMEA", "type": "string" + } + }, + "type": "object" + }, + "gosugamers.RankedTeam": { + "properties": { + "elo": { + "example": 2078.5, + "type": "number" }, "id": { + "example": "51203", + "type": "string" + }, + "logo_url": { "type": "string" }, "name": { + "example": "100 Thieves", "type": "string" }, - "price": { - "type": "number" + "previous_rank": { + "example": 2, + "type": "integer" }, - "review_count": { + "rank": { + "example": 1, + "type": "integer" + }, + "rank_change": { + "example": 1, "type": "integer" }, + "rank_change_name": { + "example": "up", + "type": "string" + }, + "slug": { + "example": "100-thieves", + "type": "string" + }, + "tag": { + "example": "100T", + "type": "string" + }, "url": { "type": "string" } }, "type": "object" }, - "jcrew.CategoryResponse": { + "gosugamers.RankingsResponse": { "properties": { - "category": { - "type": "string" - }, "count": { + "example": 10, "type": "integer" }, "fetched_at": { + "example": "2026-10-27T10:00:00Z", "type": "string" }, - "gender": { + "game": { + "example": "valorant", "type": "string" }, - "label": { + "page": { + "example": 1, + "type": "integer" + }, + "page_size": { + "example": 10, + "type": "integer" + }, + "q": { + "example": "Te", "type": "string" }, - "page": { + "region_id": { + "example": 0, "type": "integer" }, - "products": { + "regions": { "items": { - "$ref": "#/definitions/jcrew.CategoryProduct" + "$ref": "#/definitions/gosugamers.RankRegion" }, "type": "array" }, - "result_count": { + "source_url": { + "example": "https://www.gosugamers.net/valorant/matches", + "type": "string" + }, + "teams": { + "items": { + "$ref": "#/definitions/gosugamers.RankedTeam" + }, + "type": "array" + }, + "total_pages": { + "example": 39, "type": "integer" }, - "site": { + "total_rows": { + "example": 384, + "type": "integer" + } + }, + "type": "object" + }, + "gosugamers.RelatedArticle": { + "properties": { + "id": { + "example": "79433", "type": "string" }, - "source_url": { + "section": { + "example": "entertainment", "type": "string" }, - "total_pages": { - "description": "TotalPages is computed from ResultCount at the upstream's own fixed\n60-per-page size.", - "type": "integer" + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "jcrew.Facet": { + "gosugamers.RosterPlayer": { "properties": { - "is_range": { - "type": "boolean" + "country": { + "example": "Taiwan", + "type": "string" }, - "label": { + "country_code": { + "example": "TW", + "type": "string" + }, + "id": { + "example": "368742", + "type": "string" + }, + "joined_at": { + "example": "2024-01-16T16:00:00Z", + "type": "string" + }, + "left_at": { "type": "string" }, "name": { + "example": "Spring", "type": "string" }, - "options": { + "slug": { + "example": "spring-2", + "type": "string" + } + }, + "type": "object" + }, + "gosugamers.StageGroup": { + "properties": { + "format": { + "example": "Knockout", + "type": "string" + }, + "id": { + "example": "71594", + "type": "string" + }, + "name": { + "example": "Group C", + "type": "string" + }, + "participant_count": { + "example": 4, + "type": "integer" + }, + "participants": { "items": { - "$ref": "#/definitions/jcrew.FacetOption" + "$ref": "#/definitions/gosugamers.Participant" }, "type": "array" }, - "range_max": { - "type": "number" + "result_type": { + "example": "Bracket", + "type": "string" }, - "range_min": { - "type": "number" + "start_time": { + "example": "2026-09-24T09:00:00Z", + "type": "string" }, - "type": { + "status": { + "example": "COMPLETED", "type": "string" } }, "type": "object" }, - "jcrew.FacetOption": { + "gosugamers.StageGroupsResponse": { "properties": { "count": { + "example": 5, "type": "integer" }, - "label": { + "fetched_at": { + "example": "2026-10-27T10:00:00Z", "type": "string" }, - "value": { + "groups": { + "items": { + "$ref": "#/definitions/gosugamers.StageGroup" + }, + "type": "array" + }, + "source_url": { + "example": "https://www.gosugamers.net/valorant/matches", + "type": "string" + }, + "stage_id": { + "example": "28413", + "type": "string" + }, + "stage_name": { + "example": "Main Event", + "type": "string" + }, + "tournament_id": { + "example": "63147", "type": "string" } }, "type": "object" }, - "jcrew.Hour": { + "gosugamers.StageInfo": { "properties": { - "open_intervals": { - "items": { - "$ref": "#/definitions/jcrew.TimeInterval" - }, - "type": "array" + "id": { + "example": "28500", + "type": "string" + }, + "live": { + "example": true, + "type": "boolean" + }, + "name": { + "example": "Main Event", + "type": "string" + }, + "order": { + "example": 1, + "type": "integer" + }, + "status": { + "example": "Progressing", + "type": "string" } }, "type": "object" }, - "jcrew.NavCategory": { + "gosugamers.Stream": { "properties": { - "category": { + "language": { + "example": "zh", "type": "string" }, - "department": { - "type": "string" + "live": { + "example": true, + "type": "boolean" }, - "label": { + "platform_id": { + "example": 11, + "type": "integer" + }, + "thumbnail_url": { "type": "string" }, - "section": { + "title": { + "example": "VALORANT Champions Tour CN", "type": "string" + }, + "viewer_count": { + "example": 534, + "type": "integer" } }, "type": "object" }, - "jcrew.ProductColor": { + "gosugamers.Team": { "properties": { - "code": { + "id": { + "example": "51203", "type": "string" }, - "image_url": { + "logo_url": { "type": "string" }, "name": { + "example": "Wolves Esports", + "type": "string" + }, + "score": { + "example": 2, + "type": "integer" + }, + "slug": { + "example": "wolves-esports", + "type": "string" + }, + "tag": { + "example": "WOL", "type": "string" + }, + "winner": { + "example": true, + "type": "boolean" } }, "type": "object" }, - "jcrew.ProductDetailResponse": { + "gosugamers.TeamDetail": { "properties": { - "average_rating": { - "type": "number" + "about": { + "type": "string" }, - "brand": { + "country": { + "example": "China", "type": "string" }, - "category_id": { + "country_code": { + "example": "CN", "type": "string" }, - "colors": { - "items": { - "$ref": "#/definitions/jcrew.ProductColor" - }, - "type": "array" + "draws": { + "example": 0, + "type": "integer" }, - "currency": { - "type": "string" + "earnings_usd": { + "example": 132662.49, + "type": "number" }, - "description": { + "elo_rating": { + "example": 952, + "type": "integer" + }, + "facebook": { "type": "string" }, "fetched_at": { + "example": "2026-10-27T10:00:00Z", "type": "string" }, - "fit_description": { - "items": { - "type": "string" - }, - "type": "array" + "game": { + "example": "valorant", + "type": "string" }, - "gender": { + "id": { + "example": "51203", "type": "string" }, - "list_price": { - "type": "number" + "logo_url": { + "type": "string" + }, + "losses": { + "example": 55, + "type": "integer" }, "name": { + "example": "Wolves Esports", "type": "string" }, - "pid": { + "region": { + "example": "China", "type": "string" }, - "rating_count": { + "region_ranking": { + "example": 16, "type": "integer" }, - "site": { - "type": "string" - }, - "sizes": { + "roster": { "items": { - "type": "string" + "$ref": "#/definitions/gosugamers.RosterPlayer" }, "type": "array" }, - "skus": { + "slug": { + "example": "wolves-esports", + "type": "string" + }, + "source_url": { + "example": "https://www.gosugamers.net/valorant/matches", + "type": "string" + }, + "streak": { + "example": -1, + "type": "integer" + }, + "tag": { + "example": "WOL", + "type": "string" + }, + "twitter": { + "type": "string" + }, + "upcoming_matches": { "items": { - "$ref": "#/definitions/jcrew.ProductSKU" + "$ref": "#/definitions/gosugamers.MatchSummary" }, "type": "array" }, - "source_url": { + "url": { "type": "string" }, - "url": { + "win_rate_percent": { + "example": 41, + "type": "integer" + }, + "wins": { + "example": 39, + "type": "integer" + }, + "world_ranking": { + "example": 69, + "type": "integer" + }, + "youtube": { "type": "string" } }, "type": "object" }, - "jcrew.ProductReviewsResponse": { + "gosugamers.TeamResultsResponse": { "properties": { - "average_rating": { - "type": "number" - }, "count": { + "example": 10, "type": "integer" }, "fetched_at": { + "example": "2026-10-27T10:00:00Z", "type": "string" }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "pid": { - "type": "string" - }, - "rating_count": { - "type": "integer" - }, - "rating_histogram": { - "description": "RatingHistogram is the count of ratings per star, ascending: index 0\nis 1-star, index 4 is 5-star.", + "matches": { "items": { - "type": "integer" + "$ref": "#/definitions/gosugamers.MatchSummary" }, "type": "array" }, - "recommended_ratio": { - "type": "number" + "page": { + "example": 1, + "type": "integer" }, - "reviews": { - "items": { - "$ref": "#/definitions/jcrew.Review" - }, - "type": "array" + "page_size": { + "example": 10, + "type": "integer" }, - "site": { + "source_url": { + "example": "https://www.gosugamers.net/valorant/matches", "type": "string" }, - "source_url": { + "team_id": { + "example": "37547", "type": "string" }, "total_pages": { + "example": 23, "type": "integer" }, - "total_reviews": { + "total_rows": { + "example": 229, "type": "integer" } }, "type": "object" }, - "jcrew.ProductSKU": { + "gosugamers.TeamStint": { "properties": { - "color_code": { + "joined_at": { + "example": "2024-01-16T16:00:00Z", "type": "string" }, - "color_name": { + "left_at": { "type": "string" }, - "currency": { + "name": { + "example": "Wolves Esports", "type": "string" }, - "orderable": { - "type": "boolean" + "position": { + "example": "Member", + "type": "string" }, - "price": { - "type": "number" + "slug": { + "example": "wolves-esports", + "type": "string" }, - "size": { + "tag": { + "example": "WOL", + "type": "string" + }, + "team_id": { + "example": "51203", "type": "string" } }, "type": "object" }, - "jcrew.ProductSummary": { + "gosugamers.TournamentDetail": { "properties": { - "description": { + "country": { + "example": "China", "type": "string" }, - "family_id": { + "description": { "type": "string" }, - "gender": { + "fetched_at": { + "example": "2026-10-27T10:00:00Z", "type": "string" }, - "id": { + "game": { + "example": "valorant", "type": "string" }, - "image_url": { + "game_name": { + "example": "Valorant", "type": "string" }, - "name": { + "image_url": { "type": "string" }, - "orderable": { + "lan": { + "example": true, "type": "boolean" }, - "price_max": { + "prize_pool_usd": { + "example": 500000, "type": "number" }, - "price_min": { - "type": "number" + "source_url": { + "example": "https://www.gosugamers.net/valorant/matches", + "type": "string" }, - "sale_price_max": { - "type": "number" + "sponsors": { + "items": { + "type": "string" + }, + "type": "array" }, - "sale_price_min": { - "type": "number" + "stages": { + "items": { + "$ref": "#/definitions/gosugamers.StageInfo" + }, + "type": "array" }, - "url": { + "start_time": { + "example": "2026-10-20T04:00:00Z", + "type": "string" + }, + "status": { + "example": "Live", + "type": "string" + }, + "tournament": { + "$ref": "#/definitions/gosugamers.TournamentRef" + }, + "upcoming_matches": { + "items": { + "$ref": "#/definitions/gosugamers.MatchSummary" + }, + "type": "array" + }, + "venue": { "type": "string" } }, "type": "object" }, - "jcrew.Review": { + "gosugamers.TournamentParticipantsResponse": { "properties": { - "author": { + "count": { + "example": 16, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", "type": "string" }, - "body": { + "game": { + "example": "valorant", "type": "string" }, - "created_at": { + "participants": { + "items": { + "$ref": "#/definitions/gosugamers.Participant" + }, + "type": "array" + }, + "source_url": { + "example": "https://www.gosugamers.net/valorant/matches", "type": "string" }, - "headline": { + "tournament_id": { + "example": "63147", + "type": "string" + } + }, + "type": "object" + }, + "gosugamers.TournamentRef": { + "properties": { + "id": { + "example": "63208", "type": "string" }, - "helpful_votes": { - "type": "integer" + "name": { + "example": "VCT Threshold China 2026", + "type": "string" + }, + "slug": { + "example": "vct-threshold-china-2026", + "type": "string" + } + }, + "type": "object" + }, + "gosugamers.TournamentRow": { + "properties": { + "featured": { + "example": false, + "type": "boolean" + }, + "game": { + "example": "valorant", + "type": "string" + }, + "game_name": { + "example": "VALORANT", + "type": "string" }, "id": { + "example": "63208", "type": "string" }, - "location": { + "image_url": { "type": "string" }, - "not_helpful_votes": { - "type": "integer" + "name": { + "example": "VCT Threshold China 2026", + "type": "string" }, - "rating": { + "participant_count": { + "example": 8, "type": "integer" }, - "updated_at": { + "prize_currency": { + "example": "USD", "type": "string" }, - "verified_purchase": { - "type": "boolean" + "prize_pool": { + "example": 500000, + "type": "number" + }, + "prize_pool_usd": { + "example": 500000, + "type": "number" + }, + "slug": { + "example": "vct-threshold-china-2026", + "type": "string" + }, + "start_time": { + "example": "2026-10-20T04:00:00Z", + "type": "string" + }, + "status": { + "example": "Ongoing", + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "jcrew.SearchResponse": { + "gosugamers.TournamentTalentsResponse": { "properties": { "count": { + "example": 10, "type": "integer" }, - "facets": { + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "source_url": { + "example": "https://www.gosugamers.net/valorant/matches", + "type": "string" + }, + "talents": { "items": { - "$ref": "#/definitions/jcrew.Facet" + "$ref": "#/definitions/gosugamers.BroadcastTalent" }, "type": "array" }, - "fetched_at": { + "tournament_id": { + "example": "63147", "type": "string" + } + }, + "type": "object" + }, + "gosugamers.TournamentsResponse": { + "properties": { + "count": { + "example": 10, + "type": "integer" }, - "filter": { + "fetched_at": { + "example": "2026-10-27T10:00:00Z", "type": "string" }, - "keyword": { + "game": { + "example": "valorant", "type": "string" }, "page": { + "example": 1, "type": "integer" }, - "per_page": { + "page_size": { + "example": 10, "type": "integer" }, - "products": { - "items": { - "$ref": "#/definitions/jcrew.ProductSummary" - }, - "type": "array" - }, - "site": { + "q": { + "example": "VCT", "type": "string" }, - "sort": { + "source_url": { + "example": "https://www.gosugamers.net/valorant/matches", "type": "string" }, - "source_url": { + "state": { + "enum": [ + "all", + "ongoing", + "upcoming", + "past" + ], + "example": "all", "type": "string" }, "total_pages": { + "example": 152, "type": "integer" }, - "total_products": { + "total_rows": { + "example": 1511, "type": "integer" + }, + "tournaments": { + "items": { + "$ref": "#/definitions/gosugamers.TournamentRow" + }, + "type": "array" } }, "type": "object" }, - "jcrew.SizeChartResponse": { + "gq.AuthorArticle": { "properties": { - "columns": { + "image_url": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "gq.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/gq.AuthorArticle" + }, + "type": "array" + }, + "biography": { "items": { "type": "string" }, "type": "array" }, - "fetched_at": { + "has_next_page": { + "type": "boolean" + }, + "image_url": { "type": "string" }, - "pid": { + "job_title": { "type": "string" }, - "site": { + "name": { "type": "string" }, - "sizes": { + "page": { + "type": "integer" + }, + "slug": { + "type": "string" + }, + "social_links": { "items": { - "$ref": "#/definitions/jcrew.SizeChartRow" + "type": "string" }, "type": "array" }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "jcrew.SizeChartRow": { + "grailed.CategoriesResponse": { "properties": { - "imperial": { - "additionalProperties": { - "format": "float64", - "type": "number" + "categories": { + "items": { + "$ref": "#/definitions/grailed.FacetCount" }, - "type": "object" + "type": "array" }, - "metric": { - "additionalProperties": { - "format": "float64", - "type": "number" + "category_paths": { + "items": { + "$ref": "#/definitions/grailed.FacetCount" }, - "type": "object" + "type": "array" }, - "size": { + "colors": { + "items": { + "$ref": "#/definitions/grailed.FacetCount" + }, + "type": "array" + }, + "conditions": { + "items": { + "$ref": "#/definitions/grailed.FacetCount" + }, + "type": "array" + }, + "departments": { + "items": { + "$ref": "#/definitions/grailed.FacetCount" + }, + "type": "array" + }, + "fetched_at": { "type": "string" + }, + "sizes": { + "items": { + "$ref": "#/definitions/grailed.FacetCount" + }, + "type": "array" } }, "type": "object" }, - "jcrew.Store": { + "grailed.CollectionListing": { "properties": { - "address": { + "buy_now": { + "type": "boolean" + }, + "category_path": { "type": "string" }, - "city": { + "condition": { "type": "string" }, - "country": { + "cover_photo_url": { "type": "string" }, - "distance_miles": { - "type": "number" + "currency": { + "type": "string" }, - "hours": { - "additionalProperties": { - "$ref": "#/definitions/jcrew.Hour" + "department": { + "type": "string" + }, + "designers": { + "items": { + "type": "string" }, - "type": "object" + "type": "array" + }, + "follower_count": { + "type": "integer" }, "id": { - "type": "string" + "type": "integer" }, - "latitude": { + "make_offer": { + "type": "boolean" + }, + "price": { "type": "number" }, - "longitude": { + "seller_id": { + "type": "integer" + }, + "seller_rating": { "type": "number" }, - "name": { + "size": { "type": "string" }, - "phone": { - "type": "string" + "sold": { + "type": "boolean" }, - "postal_code": { - "type": "string" + "sold_price": { + "type": "number" }, - "region": { + "title": { "type": "string" }, - "services": { - "items": { - "type": "string" - }, - "type": "array" + "url": { + "type": "string" } }, "type": "object" }, - "jcrew.StoreResponse": { + "grailed.CollectionResponse": { "properties": { "count": { "type": "integer" }, - "fetched_at": { + "external_id": { "type": "string" }, - "site": { + "fetched_at": { "type": "string" }, - "source_url": { + "id": { + "type": "integer" + }, + "last_refreshed_at": { "type": "string" }, - "stores": { + "listings": { "items": { - "$ref": "#/definitions/jcrew.Store" + "$ref": "#/definitions/grailed.CollectionListing" }, "type": "array" + }, + "source_url": { + "type": "string" + }, + "title": { + "type": "string" } }, "type": "object" }, - "jcrew.SuggestResponse": { + "grailed.CollectionSummary": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { + "external_id": { "type": "string" }, - "query": { - "type": "string" + "id": { + "type": "integer" }, - "site": { + "last_refreshed_at": { "type": "string" }, - "source_url": { + "preview_photos": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { "type": "string" }, - "suggestions": { + "top_designers": { "items": { - "$ref": "#/definitions/jcrew.Suggestion" + "type": "string" }, "type": "array" } }, "type": "object" }, - "jcrew.Suggestion": { + "grailed.CollectionsResponse": { "properties": { - "query": { - "type": "string" + "collections": { + "items": { + "$ref": "#/definitions/grailed.CollectionSummary" + }, + "type": "array" }, - "total_results": { + "count": { "type": "integer" - } - }, - "type": "object" - }, - "jcrew.TimeInterval": { - "properties": { - "end": { + }, + "fetched_at": { "type": "string" }, - "start": { + "source_url": { "type": "string" } }, "type": "object" }, - "jcrew.categoriesResponseDoc": { + "grailed.Designer": { "properties": { - "code": { - "example": 200, + "departments": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/jcrew.CategoriesResponse" + "listings_count": { + "type": "integer" }, - "msg": { - "example": "OK", + "logo_url": { "type": "string" - } - }, - "type": "object" - }, - "jcrew.categoryResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/jcrew.CategoryResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "slug": { "type": "string" } }, "type": "object" }, - "jcrew.productResponseDoc": { + "grailed.DesignersResponse": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/jcrew.ProductDetailResponse" + "designers": { + "items": { + "$ref": "#/definitions/grailed.Designer" + }, + "type": "array" }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "jcrew.productReviewsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/jcrew.ProductReviewsResponse" + "limit": { + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "jcrew.searchResponseDoc": { - "properties": { - "code": { - "example": 200, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/jcrew.SearchResponse" + "query": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" - } - }, - "type": "object" - }, - "jcrew.sizeChartResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/jcrew.SizeChartResponse" + "total_pages": { + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "total_results": { + "type": "integer" } }, "type": "object" }, - "jcrew.storesResponseDoc": { + "grailed.FacetCount": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/jcrew.StoreResponse" - }, - "msg": { - "example": "OK", + "value": { "type": "string" } }, "type": "object" }, - "jcrew.suggestResponseDoc": { + "grailed.Listing": { "properties": { - "code": { - "example": 200, - "type": "integer" + "bumped_at": { + "type": "string" }, - "data": { - "$ref": "#/definitions/jcrew.SuggestResponse" + "buy_now": { + "type": "boolean" }, - "msg": { - "example": "OK", + "category": { "type": "string" - } - }, - "type": "object" - }, - "jerusalempost.AuthorArticle": { - "properties": { - "published_at": { + }, + "category_path": { "type": "string" }, - "summary": { + "color": { "type": "string" }, - "title": { + "condition": { "type": "string" }, - "url": { + "cover_photo_url": { "type": "string" - } - }, - "type": "object" - }, - "jerusalempost.AuthorRef": { - "properties": { - "slug": { + }, + "created_at": { "type": "string" }, - "type": { + "currency": { "type": "string" }, - "url": { + "department": { "type": "string" - } - }, - "type": "object" - }, - "jerusalempost.AuthorResponse": { - "properties": { - "articles": { + }, + "designers": { "items": { - "$ref": "#/definitions/jerusalempost.AuthorArticle" + "type": "string" }, "type": "array" }, - "description": { + "follower_count": { + "type": "integer" + }, + "id": { + "type": "integer" + }, + "location": { "type": "string" }, - "image_url": { + "make_offer": { + "type": "boolean" + }, + "photo_count": { + "type": "integer" + }, + "price": { + "type": "number" + }, + "seller": { + "$ref": "#/definitions/grailed.ListingSeller" + }, + "size": { "type": "string" }, - "name": { + "sold": { + "type": "boolean" + }, + "sold_at": { "type": "string" }, - "type": { + "sold_price": { + "type": "number" + }, + "title": { "type": "string" }, "url": { @@ -116390,295 +121599,400 @@ }, "type": "object" }, - "jerusalempost.AuthorsResponse": { + "grailed.ListingDesigner": { "properties": { - "authors": { + "departments": { "items": { - "$ref": "#/definitions/jerusalempost.AuthorRef" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "jimmyjohns.MenuCategory": { - "properties": { - "category_id": { - "example": 69933, + }, + "id": { "type": "integer" }, + "logo_url": { + "type": "string" + }, "name": { - "example": "Originals", "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/jimmyjohns.MenuProduct" - }, - "type": "array" + "slug": { + "type": "string" } }, "type": "object" }, - "jimmyjohns.MenuProduct": { + "grailed.ListingResponse": { "properties": { - "base_calories": { - "description": "BaseCalories and MaxCalories bound the calorie range across this\nitem's size/customization options. Both arrive from upstream as\nstrings (e.g. a \"-\" separator is rendered client-side), so they are\nkept as strings rather than coerced to a number.", - "example": "370", - "type": "string" + "buy_now": { + "type": "boolean" }, - "chain_product_id": { - "description": "ChainProductID identifies this item across every Jimmy John's\nrestaurant; ProductID is specific to this restaurant's menu.", - "example": 353441, - "type": "integer" + "category": { + "type": "string" }, - "cost": { - "description": "Cost is the base price. Many sandwiches price entirely through a size\nmodifier rather than a base cost, so this is commonly 0 -- it is not\na parsing gap.", - "example": 8.69, - "type": "number" + "category_path": { + "type": "string" }, - "description": { - "example": "HAM, PROVOLONE, lettuce, tomato & mayo", + "collaboration": { "type": "string" }, - "image_url": { + "condition": { "type": "string" }, - "max_calories": { - "example": "650", + "created_at": { "type": "string" }, - "name": { - "example": "#1 The Pepe®", + "currency": { "type": "string" }, - "product_id": { - "example": 33276056, - "type": "integer" + "deleted": { + "type": "boolean" }, - "short_description": { + "department": { "type": "string" - } - }, - "type": "object" - }, - "jimmyjohns.MenuResponse": { - "properties": { - "categories": { + }, + "description": { + "type": "string" + }, + "designers": { "items": { - "$ref": "#/definitions/jimmyjohns.MenuCategory" + "$ref": "#/definitions/grailed.ListingDesigner" }, "type": "array" }, - "category_count": { - "example": 20, - "type": "integer" + "dropped": { + "type": "boolean" + }, + "exact_size": { + "type": "string" + }, + "expired": { + "type": "boolean" }, "fetched_at": { "type": "string" }, - "product_count": { - "example": 180, + "follower_count": { "type": "integer" }, - "restaurant_id": { - "example": 67182, + "id": { "type": "integer" }, - "source_url": { + "make_offer": { + "type": "boolean" + }, + "measurements": { + "items": { + "$ref": "#/definitions/grailed.Measurement" + }, + "type": "array" + }, + "photos": { + "items": { + "type": "string" + }, + "type": "array" + }, + "pretty_size": { "type": "string" - } - }, - "type": "object" - }, - "jimmyjohns.ModifierChoice": { - "properties": { - "base_calories": { - "description": "BaseCalories is this choice's calorie delta, which can be negative\nfor a \"light\"/\"no\" ingredient choice.", - "example": "70", + }, + "price": { + "type": "number" + }, + "price_updated_at": { "type": "string" }, - "chain_option_id": { - "example": 2476875, - "type": "integer" + "published": { + "type": "boolean" }, - "cost": { - "description": "Cost is this choice's price delta. Many choices are free (the\nincluded default); an upcharge choice (e.g. \"Xtra Smoked Ham\") or a\nsize step carries a positive cost.", - "example": 8.69, + "seller": { + "$ref": "#/definitions/grailed.SellerProfile" + }, + "size": { + "type": "string" + }, + "sold": { + "type": "boolean" + }, + "sold_at": { + "type": "string" + }, + "sold_price": { "type": "number" }, - "groups": { + "sold_shipping_price": { + "type": "number" + }, + "source_url": { + "type": "string" + }, + "styles": { "items": { - "$ref": "#/definitions/jimmyjohns.ModifierGroup" + "type": "string" }, "type": "array" }, - "is_default": { - "type": "boolean" - }, - "max_calories": { + "subcategory": { "type": "string" }, - "name": { - "example": "REGULAR", + "title": { "type": "string" }, - "option_id": { - "example": 5265915696, - "type": "integer" + "traits": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "url": { + "type": "string" } }, "type": "object" }, - "jimmyjohns.ModifierGroup": { + "grailed.ListingSeller": { "properties": { - "chain_modifier_id": { - "example": 480998, - "type": "integer" - }, - "choices": { - "items": { - "$ref": "#/definitions/jimmyjohns.ModifierChoice" - }, - "type": "array" + "avatar_url": { + "type": "string" }, - "group_id": { - "example": 1176354037, + "id": { "type": "integer" }, - "mandatory": { - "type": "boolean" + "rating_average": { + "type": "number" }, - "max_selects": { + "rating_count": { "type": "integer" }, - "min_selects": { + "total_bought_and_sold": { "type": "integer" }, - "name": { - "example": "Choose Your Size", + "trusted_seller": { + "type": "boolean" + }, + "username": { "type": "string" } }, "type": "object" }, - "jimmyjohns.ModifiersResponse": { + "grailed.Measurement": { "properties": { - "fetched_at": { - "type": "string" - }, - "group_count": { - "example": 9, + "department_mapping_id": { "type": "integer" }, - "groups": { - "items": { - "$ref": "#/definitions/jimmyjohns.ModifierGroup" - }, - "type": "array" + "inches": { + "type": "number" }, - "product_id": { - "example": 33276056, + "measurement_type_id": { "type": "integer" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "jimmyjohns.NearbyResponse": { + "grailed.SearchResponse": { "properties": { + "category": { + "type": "string" + }, + "color": { + "type": "string" + }, + "condition": { + "type": "string" + }, "count": { - "example": 10, "type": "integer" }, + "department": { + "type": "string" + }, + "designer": { + "type": "string" + }, "fetched_at": { "type": "string" }, - "radius_miles": { - "example": 15, + "limit": { "type": "integer" }, - "restaurants": { + "listings": { "items": { - "$ref": "#/definitions/jimmyjohns.NearbyRestaurant" + "$ref": "#/definitions/grailed.Listing" }, "type": "array" }, + "max_price": { + "type": "number" + }, + "min_price": { + "type": "number" + }, + "page": { + "type": "integer" + }, + "query": { + "type": "string" + }, + "size": { + "type": "string" + }, + "sort": { + "type": "string" + }, "source_url": { "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" } }, "type": "object" }, - "jimmyjohns.NearbyRestaurant": { + "grailed.SellerProfile": { "properties": { - "accepts_delivery": { + "avatar_url": { + "type": "string" + }, + "banned": { "type": "boolean" }, - "accepts_pickup": { + "confirmed": { "type": "boolean" }, - "address": { - "$ref": "#/definitions/jimmyjohns.StoreAddress" + "created_at": { + "type": "string" }, - "distance_miles": { - "example": 0.4, - "type": "number" + "follower_count": { + "type": "integer" }, - "is_open": { + "following_count": { + "type": "integer" + }, + "id": { + "type": "integer" + }, + "listings_for_sale_count": { + "type": "integer" + }, + "location": { + "type": "string" + }, + "quick_responder": { "type": "boolean" }, - "latitude": { - "example": 44.9401301, + "rating_average": { "type": "number" }, - "longitude": { - "example": -93.1411487, - "type": "number" + "rating_count": { + "type": "integer" }, - "name": { - "example": "JJ0004", - "type": "string" + "sold_count": { + "type": "integer" }, - "order_url": { - "example": "https://online.jimmyjohns.com/menu/jj0004/", + "speedy_shipper": { + "type": "boolean" + }, + "tag_list": { + "items": { + "type": "string" + }, + "type": "array" + }, + "total_bought_and_sold": { + "type": "integer" + }, + "trusted_seller": { + "type": "boolean" + }, + "username": { "type": "string" }, - "phone_number": { - "example": "(651) 222-2221", + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "grailed.SellerResponse": { + "properties": { + "active_listings_count": { + "type": "integer" + }, + "count": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "restaurant_id": { - "example": 67182, + "limit": { "type": "integer" }, - "slug": { - "example": "jj0004", + "listings": { + "items": { + "$ref": "#/definitions/grailed.Listing" + }, + "type": "array" + }, + "page": { + "type": "integer" + }, + "profile": { + "$ref": "#/definitions/grailed.SellerProfile" + }, + "source_url": { "type": "string" }, - "timezone": { - "example": "America/Chicago", + "total_pages": { + "type": "integer" + }, + "username": { "type": "string" } }, "type": "object" }, - "jimmyjohns.SitemapEntry": { + "grailed.SellerReview": { "properties": { - "kind": { - "description": "Kind distinguishes the three page variants Jimmy John's publishes per\nstore: sandwiches, delivery and catering. All three describe the same\nrestaurant; `sandwiches` is the canonical one.", - "example": "sandwiches", + "created_at": { "type": "string" }, - "path": { - "example": "in/columbus/sandwiches-1414.html", + "id": { + "type": "integer" + }, + "listing": { + "$ref": "#/definitions/grailed.SellerReviewListing" + }, + "note": { "type": "string" }, - "store_number": { - "description": "StoreNumber is the trailing id shared by all three variants.", - "example": "1414", + "rating": { + "type": "number" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "grailed.SellerReviewListing": { + "properties": { + "id": { + "type": "integer" + }, + "price": { + "type": "number" + }, + "sold": { + "type": "boolean" + }, + "title": { "type": "string" }, "url": { @@ -116687,974 +122001,1161 @@ }, "type": "object" }, - "jimmyjohns.SitemapResponse": { + "grailed.SellerReviewsResponse": { "properties": { "count": { - "example": 100, "type": "integer" }, - "entries": { - "items": { - "$ref": "#/definitions/jimmyjohns.SitemapEntry" - }, - "type": "array" - }, "fetched_at": { "type": "string" }, - "page": { - "example": 1, - "type": "integer" + "has_more": { + "type": "boolean" }, - "shard": { - "example": 0, + "page": { "type": "integer" }, - "shard_count": { - "example": 1, - "type": "integer" + "reviews": { + "items": { + "$ref": "#/definitions/grailed.SellerReview" + }, + "type": "array" }, "source_url": { "type": "string" }, - "total_in_shard": { - "example": 9789, + "user_id": { "type": "integer" }, - "total_pages": { - "example": 98, - "type": "integer" + "username": { + "type": "string" } }, "type": "object" }, - "jimmyjohns.StoreAddress": { + "grailed.SimilarListingsResponse": { "properties": { - "city": { - "example": "Columbus", - "type": "string" + "count": { + "type": "integer" }, - "country": { - "example": "US", + "fetched_at": { "type": "string" }, - "postal_code": { - "example": "47201", - "type": "string" + "id": { + "type": "integer" }, - "region": { - "example": "IN", - "type": "string" + "limit": { + "type": "integer" }, - "street": { - "example": "2115 W Jonathan Moore Pike", + "listings": { + "items": { + "$ref": "#/definitions/grailed.Listing" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "jimmyjohns.StoreHours": { + "grailed.SoldListingsResponse": { "properties": { - "closes": { - "example": "22:00", + "category": { "type": "string" }, - "day_of_week": { - "example": "Monday", + "color": { "type": "string" }, - "opens": { - "example": "10:30", + "condition": { + "type": "string" + }, + "count": { + "type": "integer" + }, + "department": { + "type": "string" + }, + "designer": { "type": "string" - } - }, - "type": "object" - }, - "jimmyjohns.StoreResponse": { - "properties": { - "address": { - "$ref": "#/definitions/jimmyjohns.StoreAddress" }, "fetched_at": { "type": "string" }, - "hours": { + "limit": { + "type": "integer" + }, + "listings": { "items": { - "$ref": "#/definitions/jimmyjohns.StoreHours" + "$ref": "#/definitions/grailed.Listing" }, "type": "array" }, - "image_url": { - "type": "string" - }, - "latitude": { - "example": 39.1994347, + "max_price": { "type": "number" }, - "longitude": { - "example": -85.9470667, + "min_price": { "type": "number" }, - "name": { - "example": "Jimmy John's", - "type": "string" + "page": { + "type": "integer" }, - "path": { + "query": { "type": "string" }, - "phone_number": { + "size": { "type": "string" }, - "serves_cuisine": { + "sort": { "type": "string" }, "source_url": { "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" } }, "type": "object" }, - "jimmyjohns.menuResponseDoc": { + "grailed.SuggestResponse": { + "properties": { + "fetched_at": { + "type": "string" + }, + "query": { + "type": "string" + }, + "suggestions": { + "items": { + "$ref": "#/definitions/grailed.Suggestion" + }, + "type": "array" + } + }, + "type": "object" + }, + "grailed.Suggestion": { + "properties": { + "popularity": { + "type": "integer" + }, + "query": { + "type": "string" + }, + "total_results": { + "type": "integer" + } + }, + "type": "object" + }, + "grailed.categoriesResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/jimmyjohns.MenuResponse" + "$ref": "#/definitions/grailed.CategoriesResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "jimmyjohns.modifiersResponseDoc": { + "grailed.collectionResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/jimmyjohns.ModifiersResponse" + "$ref": "#/definitions/grailed.CollectionResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "jimmyjohns.nearbyResponseDoc": { + "grailed.collectionsResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/jimmyjohns.NearbyResponse" + "$ref": "#/definitions/grailed.CollectionsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "jimmyjohns.sitemapResponseDoc": { + "grailed.designersResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/jimmyjohns.SitemapResponse" + "$ref": "#/definitions/grailed.DesignersResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "jimmyjohns.storeResponseDoc": { + "grailed.listingResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/jimmyjohns.StoreResponse" + "$ref": "#/definitions/grailed.ListingResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "jobs.BoardResponse": { + "grailed.searchResponseDoc": { "properties": { - "company": { - "description": "Company or board name the postings belong to.", - "type": "string" - }, - "count": { - "description": "Number of jobs returned in this response.", + "code": { + "example": 200, "type": "integer" }, - "jobs": { - "description": "Job postings on the board, one item per posting.", - "items": { - "$ref": "#/definitions/jobs.Job" - }, - "type": "array" + "data": { + "$ref": "#/definitions/grailed.SearchResponse" }, - "provider": { - "description": "Applicant tracking system the board was read from, for example `greenhouse` or `lever`.", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "grailed.sellerResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "source_url": { - "description": "URL the data was read from.", - "type": "string" + "data": { + "$ref": "#/definitions/grailed.SellerResponse" }, - "total": { - "description": "Total number of open postings on the board, when the provider reports it.", - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "jobs.CompanySearchResponse": { + "grailed.sellerReviewsResponseDoc": { "properties": { - "count": { - "description": "Number of providers where the slug has a board with open roles.", + "code": { + "example": 200, "type": "integer" }, - "found": { - "description": "Providers where the slug resolves to a board, ranked by open roles.", - "items": { - "$ref": "#/definitions/jobs.ProviderHit" - }, - "type": "array" + "data": { + "$ref": "#/definitions/grailed.SellerReviewsResponse" }, - "slug": { - "description": "Company careers slug that was searched.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "jobs.Count": { + "grailed.similarListingsResponseDoc": { "properties": { - "count": { - "description": "Number of open roles with that name.", + "code": { + "example": 200, "type": "integer" }, - "name": { - "description": "Department, location or job title being counted.", + "data": { + "$ref": "#/definitions/grailed.SimilarListingsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "jobs.HiringSignals": { + "grailed.soldListingsResponseDoc": { "properties": { - "as_of": { - "description": "Time the snapshot was taken, in UTC (RFC 3339).", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "by_department": { - "description": "Open roles per department, largest first, up to 20 entries.", - "items": { - "$ref": "#/definitions/jobs.Count" - }, - "type": "array" + "data": { + "$ref": "#/definitions/grailed.SoldListingsResponse" }, - "by_location": { - "description": "Open roles per location, largest first, up to 20 entries.", - "items": { - "$ref": "#/definitions/jobs.Count" - }, - "type": "array" - }, - "company": { - "description": "Company or board identifier that was queried.", - "type": "string" - }, - "new_last_30d": { - "description": "Number of sampled roles posted in the last 30 days. Counts only postings with a usable posting date.", - "type": "integer" - }, - "new_last_7d": { - "description": "Number of sampled roles posted in the last 7 days. Counts only postings with a usable posting date.", - "type": "integer" - }, - "provider": { - "description": "Applicant tracking system the board was read from, for example `greenhouse`.", + "msg": { + "example": "OK", "type": "string" - }, - "remote_count": { - "description": "Number of sampled roles marked as remote.", + } + }, + "type": "object" + }, + "grailed.suggestResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "remote_pct": { - "description": "Share of sampled roles marked as remote, as a percentage rounded to one decimal.", - "type": "number" - }, - "sampled_roles": { - "description": "Number of postings the breakdowns below were computed from.", - "type": "integer" + "data": { + "$ref": "#/definitions/grailed.SuggestResponse" }, - "source_url": { - "description": "URL the data was read from.", + "msg": { + "example": "OK", "type": "string" - }, - "top_titles": { - "description": "Most common job titles with their counts, up to 10 entries.", - "items": { - "$ref": "#/definitions/jobs.Count" - }, - "type": "array" - }, - "total_open_roles": { - "description": "Number of open roles on the board. Uses the provider's own total when it gives one.", - "type": "integer" } }, "type": "object" }, - "jobs.Job": { + "greystar.Article": { "properties": { - "ai_tools_mentioned": { - "description": "AITools lists canonical AI tool and platform names mentioned in the job\ntitle or description, such as \"ChatGPT\" or \"GitHub Copilot\".", + "blocks": { "items": { - "type": "string" + "$ref": "#/definitions/greystar.ContentBlock" }, "type": "array" }, - "apply_url": { - "description": "Link to the application page for the job.", + "category": { "type": "string" }, - "benefits_mentioned": { - "description": "Benefits, Clearance, and Education contain canonical requirements and\nofferings mentioned in the job title or description.", - "items": { - "type": "string" - }, - "type": "array" + "description": { + "type": "string" }, - "company": { - "description": "Name of the hiring company.", + "image_url": { "type": "string" }, - "company_logo_url": { - "description": "URL of the company's logo.", + "published_at": { "type": "string" }, - "compensation": { - "description": "Compensation is the raw provider summary; the *Min/*Max/*Currency fields are\nparsed from it when the summary contains a recognizable pay range/amount.\nCompensationPeriod is the pay period (\"hourly\", \"daily\", \"weekly\",\n\"monthly\", \"yearly\") when the summary states one explicitly; empty when\nno period is stated (most single \"$150K – $190K\"-style ranges are\nimplicitly annual but that is never asserted here).", + "published_date": { "type": "string" }, - "compensation_currency": { - "description": "Currency code of the pay range, for example `USD`.", + "section": { "type": "string" }, - "compensation_max": { - "description": "Upper end of the pay range stated in the posting.", - "type": "number" + "slug": { + "type": "string" }, - "compensation_min": { - "description": "Lower end of the pay range stated in the posting.", - "type": "number" + "title": { + "type": "string" }, - "compensation_period": { - "description": "Pay period the posting states: `hourly`, `daily`, `weekly`, `monthly` or `yearly`. Omitted when the posting names none.", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "greystar.CityItem": { + "properties": { + "city": { "type": "string" }, - "department": { - "description": "Department the job belongs to.", + "count": { + "type": "integer" + }, + "country_code": { "type": "string" }, - "description_html": { - "description": "Job description as HTML.", + "state": { + "type": "string" + } + }, + "type": "object" + }, + "greystar.ContentBlock": { + "properties": { + "text": { "type": "string" }, - "description_text": { - "description": "Job description as plain text.", + "type": { + "description": "heading, subheading, paragraph, list_item", + "type": "string" + } + }, + "type": "object" + }, + "greystar.ContentEntry": { + "properties": { + "last_modified": { "type": "string" }, - "education_level_required": { - "description": "Education levels mentioned in the job title or description.", + "section": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "greystar.ContentList": { + "properties": { + "entries": { "items": { - "type": "string" + "$ref": "#/definitions/greystar.ContentEntry" }, "type": "array" }, - "employment_type": { - "description": "Employment type the provider lists, such as full-time or contract.", - "type": "string" + "page": { + "type": "integer" }, - "id": { - "description": "Posting id within the provider. Use it with the provider's job endpoint.", - "type": "string" + "per_page": { + "type": "integer" }, - "location": { - "description": "Primary job location as the provider shows it.", + "total_count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + } + }, + "type": "object" + }, + "greystar.CountryItem": { + "properties": { + "count": { + "type": "integer" + }, + "country_code": { + "type": "string" + } + }, + "type": "object" + }, + "greystar.FAQ": { + "properties": { + "answer": { "type": "string" }, - "location_city": { - "description": "LocationCity/State/Country are the structured components behind Location\nwhen the provider exposes them (or once the geo-enrich worker has\nresolved them from the free-text Location string) -- present only for\nthe primary/first location, matching Location itself.", + "question": { "type": "string" + } + }, + "type": "object" + }, + "greystar.FacetCount": { + "properties": { + "count": { + "type": "integer" }, - "location_country": { - "description": "Country of the primary location.", + "value": { "type": "string" + } + }, + "type": "object" + }, + "greystar.Fee": { + "properties": { + "amount": { + "type": "number" }, - "location_state": { - "description": "State or region of the primary location.", + "category": { "type": "string" }, - "locations": { - "description": "All locations listed for the job.", - "items": { - "type": "string" - }, - "type": "array" + "disclaimer": { + "type": "string" }, - "posted_age_text": { - "description": "Workday relative age (\"Posted Today\")", + "due_at": { "type": "string" }, - "posted_at": { - "description": "RFC3339 / date when the provider gives one", + "frequency": { "type": "string" }, - "provider": { - "description": "Applicant tracking system the posting comes from, for example `greenhouse` or `lever`.", + "group": { "type": "string" }, - "remote": { - "description": "True when the posting is marked as remote.", + "is_included": { "type": "boolean" }, - "req_id": { - "description": "Requisition id the company uses for the job.", - "type": "string" + "is_per_applicant": { + "type": "boolean" }, - "security_clearance_required": { - "description": "Security clearances mentioned in the job title or description.", - "items": { - "type": "string" - }, - "type": "array" + "is_refundable": { + "type": "boolean" }, - "skills_mentioned": { - "description": "Skills lists canonical ESCO skill labels mentioned in the job title or\ndescription.", - "items": { - "type": "string" - }, - "type": "array" + "is_required": { + "type": "boolean" }, - "team": { - "description": "Team the job belongs to.", + "is_taxable": { + "type": "boolean" + }, + "label": { "type": "string" }, - "title": { - "description": "Job title as the company posted it.", + "max_amount": { + "type": "number" + }, + "min_amount": { + "type": "number" + }, + "percentage_amount": { + "type": "number" + }, + "text_amount": { "type": "string" }, - "url": { - "description": "Link to the job posting page.", + "type": { "type": "string" }, - "workplace_type": { - "description": "Workplace arrangement the provider lists, such as remote, hybrid or on-site.", + "value_type": { "type": "string" } }, "type": "object" }, - "jobs.ProviderHit": { + "greystar.Floorplan": { "properties": { - "board_url": { - "description": "URL of the company's public careers board on that provider.", - "type": "string" + "bathrooms": { + "type": "integer" }, - "company": { - "description": "Company or board name on that provider.", + "bedrooms": { + "type": "integer" + }, + "id": { "type": "string" }, - "provider": { - "description": "Applicant tracking system the board is on, for example `greenhouse`.", + "image_url": { "type": "string" }, - "total_open_roles": { - "description": "Number of open roles on the board.", - "type": "integer" + "label": { + "type": "string" } }, "type": "object" }, - "jobs.boardResponseDoc": { + "greystar.Image": { "properties": { - "code": { - "example": 200, - "type": "integer" + "alt": { + "type": "string" }, - "data": { - "$ref": "#/definitions/jobs.BoardResponse" + "height": { + "type": "integer" }, - "msg": { - "example": "OK", + "url": { "type": "string" + }, + "width": { + "type": "integer" } }, "type": "object" }, - "jobs.jobResponseDoc": { + "greystar.ListedUnit": { "properties": { - "code": { - "example": 200, + "banner": { + "type": "string" + }, + "bathrooms": { + "type": "number" + }, + "bedrooms": { + "type": "number" + }, + "floorplan": { + "type": "string" + }, + "max_price": { + "type": "number" + }, + "min_base_rent_lease_term": { "type": "integer" }, - "data": { - "$ref": "#/definitions/jobs.Job" + "min_price": { + "type": "number" }, - "msg": { - "example": "OK", + "price": { + "type": "number" + }, + "required_monthly_fees_max": { + "type": "number" + }, + "required_monthly_fees_min": { + "type": "number" + }, + "unit_id": { + "type": "string" + }, + "unit_number": { "type": "string" } }, "type": "object" }, - "jobs.searchResponseDoc": { + "greystar.Location": { "properties": { - "code": { - "example": 200, - "type": "integer" + "address": { + "type": "string" }, - "data": { - "$ref": "#/definitions/jobs.CompanySearchResponse" + "city": { + "type": "string" }, - "msg": { - "example": "OK", + "country_code": { + "type": "string" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "market_area": { + "type": "string" + }, + "neighborhood": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "state": { + "type": "string" + }, + "state_name": { "type": "string" } }, "type": "object" }, - "jobs.signalsResponseDoc": { + "greystar.LocationCommunity": { "properties": { - "code": { - "example": 200, - "type": "integer" + "address": { + "type": "string" }, - "data": { - "$ref": "#/definitions/jobs.HiringSignals" + "id": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "type": "string" + }, + "price_text": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "jumia.CategoriesResponse": { + "greystar.LocationDetail": { "properties": { - "categories": { + "blocks": { "items": { - "$ref": "#/definitions/jumia.CategoryNode" + "$ref": "#/definitions/greystar.ContentBlock" }, "type": "array" }, - "category": { - "example": "phones-tablets", + "city": { "type": "string" }, - "count": { - "example": 12, - "type": "integer" + "communities": { + "items": { + "$ref": "#/definitions/greystar.LocationCommunity" + }, + "type": "array" }, - "country": { - "example": "ng", + "description": { "type": "string" }, - "fetched_at": { + "faqs": { + "items": { + "$ref": "#/definitions/greystar.FAQ" + }, + "type": "array" + }, + "level": { "type": "string" }, - "source_url": { + "neighborhood": { + "type": "string" + }, + "path": { + "type": "string" + }, + "state": { + "type": "string" + }, + "sub_locations": { + "items": { + "$ref": "#/definitions/greystar.SubLocation" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "jumia.CategoryNode": { + "greystar.LocationEntry": { "properties": { - "children": { - "items": { - "$ref": "#/definitions/jumia.CategoryNode" - }, - "type": "array" + "city": { + "type": "string" }, - "id": { - "example": "8070", + "last_modified": { "type": "string" }, - "name": { - "example": "Phones & Tablets", + "level": { + "description": "state, city, neighborhood", "type": "string" }, - "slug": { - "example": "phones-tablets", + "neighborhood": { + "type": "string" + }, + "path": { + "type": "string" + }, + "state": { "type": "string" }, "url": { - "example": "https://www.jumia.com.ng/phones-tablets/", "type": "string" } }, "type": "object" }, - "jumia.CountriesResponse": { + "greystar.LocationList": { + "properties": { + "locations": { + "items": { + "$ref": "#/definitions/greystar.LocationEntry" + }, + "type": "array" + }, + "page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total_count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + } + }, + "type": "object" + }, + "greystar.MarketItem": { "properties": { "count": { - "example": 4, "type": "integer" }, + "country_code": { + "type": "string" + }, + "market_area": { + "type": "string" + } + }, + "type": "object" + }, + "greystar.Markets": { + "properties": { + "cities": { + "items": { + "$ref": "#/definitions/greystar.CityItem" + }, + "type": "array" + }, "countries": { "items": { - "$ref": "#/definitions/jumia.Country" + "$ref": "#/definitions/greystar.CountryItem" + }, + "type": "array" + }, + "market_areas": { + "items": { + "$ref": "#/definitions/greystar.MarketItem" + }, + "type": "array" + }, + "neighborhoods": { + "items": { + "$ref": "#/definitions/greystar.Neighborhood" + }, + "type": "array" + }, + "states": { + "items": { + "$ref": "#/definitions/greystar.StateItem" }, "type": "array" + }, + "total_properties": { + "type": "integer" } }, "type": "object" }, - "jumia.Country": { + "greystar.Neighborhood": { "properties": { - "code": { - "example": "ng", + "count": { + "type": "integer" + }, + "country_code": { "type": "string" }, - "currency": { - "example": "NGN", + "market_area": { "type": "string" }, - "domain": { - "example": "www.jumia.com.ng", + "neighborhood": { + "type": "string" + } + }, + "type": "object" + }, + "greystar.OfficeHour": { + "properties": { + "close": { "type": "string" }, - "name": { - "example": "Nigeria", + "open": { "type": "string" } }, "type": "object" }, - "jumia.Listing": { + "greystar.Property": { "properties": { - "brand": { - "example": "Samsung", + "address": { "type": "string" }, - "categories": { - "items": { - "type": "string" - }, - "type": "array" + "city": { + "type": "string" }, - "currency": { - "example": "NGN", + "country_code": { "type": "string" }, - "discount_percent": { - "example": 20, - "type": "integer" + "display_price": { + "type": "number" }, - "image": { + "id": { "type": "string" }, - "jumia_express": { - "type": "boolean" - }, - "name": { - "example": "Galaxy A07 6.7\" 4GB RAM/128GB ROM - Black", + "market_area": { "type": "string" }, - "official_store": { - "type": "boolean" + "min_base_rent_lease_term": { + "type": "integer" }, - "original_price": { - "example": 250000, + "min_price": { "type": "number" }, - "out_of_stock": { - "type": "boolean" + "name": { + "type": "string" }, - "price": { - "example": 199999, - "type": "number" + "neighborhood": { + "type": "string" }, - "price_max": { + "postal_code": { + "type": "string" + }, + "required_monthly_fees_max": { "type": "number" }, - "rating": { - "example": 4.1, + "required_monthly_fees_min": { "type": "number" }, - "rating_count": { - "example": 396, - "type": "integer" + "state": { + "type": "string" }, - "sku": { - "example": "SA948MP6Z6LPDNAFAMZ", + "state_name": { "type": "string" }, - "url": { - "example": "https://www.jumia.com.ng/samsung-galaxy-a07-418619812.html", + "thumbnail_url": { "type": "string" } }, "type": "object" }, - "jumia.ListingResponse": { + "greystar.PropertyDetails": { "properties": { - "category": { - "example": "phones-tablets", - "type": "string" - }, - "count": { - "example": 40, - "type": "integer" - }, - "country": { - "example": "ng", - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "has_next": { - "example": true, - "type": "boolean" - }, - "page": { - "example": 1, - "type": "integer" + "amenities": { + "items": { + "type": "string" + }, + "type": "array" }, - "products": { + "available_units": { "items": { - "$ref": "#/definitions/jumia.Listing" + "$ref": "#/definitions/greystar.Unit" }, "type": "array" }, - "query": { - "example": "wireless earbuds", - "type": "string" + "bike_score": { + "type": "integer" }, - "source_url": { + "building_type": { "type": "string" }, - "total_count": { - "example": 7522, - "type": "integer" - } - }, - "type": "object" - }, - "jumia.Product": { - "properties": { - "availability": { - "example": "InStock", + "email": { "type": "string" }, - "brand": { - "example": "Samsung", + "facebook_url": { "type": "string" }, - "categories": { + "features": { "items": { "type": "string" }, "type": "array" }, - "country": { - "example": "ng", - "type": "string" + "fees": { + "items": { + "$ref": "#/definitions/greystar.Fee" + }, + "type": "array" }, - "currency": { - "example": "NGN", - "type": "string" + "floorplans": { + "items": { + "$ref": "#/definitions/greystar.Floorplan" + }, + "type": "array" }, - "description": { + "highlights": { + "additionalProperties": { + "type": "boolean" + }, + "type": "object" + }, + "id": { "type": "string" }, - "discount_percent": { - "example": 20, - "type": "integer" + "image": { + "$ref": "#/definitions/greystar.Image" }, - "fetched_at": { + "instagram_url": { "type": "string" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" + "location": { + "$ref": "#/definitions/greystar.Location" }, - "key_features": { + "long_description": { "type": "string" }, "name": { "type": "string" }, - "original_price": { - "example": 250000, - "type": "number" + "office_hours": { + "additionalProperties": { + "$ref": "#/definitions/greystar.OfficeHour" + }, + "type": "object" }, - "price": { - "example": 199999, + "phone": { + "type": "string" + }, + "required_monthly_fees_max": { "type": "number" }, - "rating": { - "example": 4.1, + "required_monthly_fees_min": { "type": "number" }, - "rating_count": { - "example": 396, + "short_description": { + "type": "string" + }, + "tours": { + "items": { + "$ref": "#/definitions/greystar.Tour" + }, + "type": "array" + }, + "transit_score": { "type": "integer" }, - "seller": { - "$ref": "#/definitions/jumia.Seller" + "url": { + "type": "string" }, - "sku": { - "example": "SA948MP6Z6LPDNAFAMZ", + "walk_score": { + "type": "integer" + }, + "website_url": { "type": "string" + } + }, + "type": "object" + }, + "greystar.SearchResult": { + "properties": { + "page": { + "type": "integer" }, - "specifications": { + "per_page": { + "type": "integer" + }, + "properties": { "items": { - "$ref": "#/definitions/jumia.Specification" + "$ref": "#/definitions/greystar.Property" }, "type": "array" }, - "url": { - "type": "string" + "total_count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" } }, "type": "object" }, - "jumia.RatingBucket": { + "greystar.StateItem": { "properties": { "count": { - "example": 220, "type": "integer" }, - "stars": { - "example": 5, - "type": "integer" + "country_code": { + "type": "string" + }, + "state": { + "type": "string" + }, + "state_name": { + "type": "string" } }, "type": "object" }, - "jumia.Review": { + "greystar.SubLocation": { "properties": { - "author": { - "example": "Victor", + "name": { "type": "string" }, - "date": { - "example": "2026-10-19", + "path": { "type": "string" }, - "rating": { - "example": 5, - "type": "integer" + "slug": { + "type": "string" }, - "text": { + "summary": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "greystar.Tour": { + "properties": { + "provider": { "type": "string" }, "title": { - "example": "i love it", "type": "string" }, - "verified": { - "type": "boolean" + "url": { + "type": "string" } }, "type": "object" }, - "jumia.ReviewsResponse": { + "greystar.Unit": { "properties": { - "average_rating": { - "example": 4.1, - "type": "number" - }, - "count": { - "example": 10, + "area": { "type": "integer" }, - "country": { - "example": "ng", + "available_on": { "type": "string" }, - "fetched_at": { + "building": { "type": "string" }, - "has_next": { - "example": true, - "type": "boolean" + "floor": { + "type": "string" }, - "histogram": { - "items": { - "$ref": "#/definitions/jumia.RatingBucket" - }, - "type": "array" + "floorplan_id": { + "type": "string" }, - "page": { - "example": 1, - "type": "integer" + "floorplan_label": { + "type": "string" }, - "rating_count": { - "example": 396, - "type": "integer" + "max_price": { + "type": "number" }, - "review_count": { - "example": 147, + "min_base_rent_lease_term": { "type": "integer" }, - "reviews": { - "items": { - "$ref": "#/definitions/jumia.Review" - }, - "type": "array" + "min_price": { + "type": "number" }, - "sku": { - "example": "SA948MP6Z6LPDNAFAMZ", + "unit_id": { "type": "string" }, - "source_url": { + "unit_number": { "type": "string" } }, "type": "object" }, - "jumia.Seller": { + "greystar.UnitFacets": { "properties": { - "followers": { - "example": 3387, - "type": "integer" + "bathrooms": { + "items": { + "$ref": "#/definitions/greystar.FacetCount" + }, + "type": "array" }, - "id": { - "example": "338501", - "type": "string" + "bedrooms": { + "items": { + "$ref": "#/definitions/greystar.FacetCount" + }, + "type": "array" }, - "name": { - "example": "CHEAP ZONE - AC", - "type": "string" + "building_types": { + "items": { + "$ref": "#/definitions/greystar.FacetCount" + }, + "type": "array" }, - "score_percent": { - "example": 96, - "type": "number" + "highlights": { + "items": { + "$ref": "#/definitions/greystar.FacetCount" + }, + "type": "array" + } + }, + "type": "object" + }, + "greystar.UnitLocation": { + "properties": { + "location": { + "type": "string" }, - "shipping_speed": { - "example": "Excellent", + "parent": { "type": "string" }, "url": { @@ -117663,487 +123164,883 @@ }, "type": "object" }, - "jumia.SitemapFile": { + "greystar.UnitLocationList": { "properties": { - "language": { - "example": "en", + "locations": { + "items": { + "$ref": "#/definitions/greystar.UnitLocation" + }, + "type": "array" + }, + "total_count": { + "type": "integer" + } + }, + "type": "object" + }, + "greystar.UnitProperty": { + "properties": { + "address": { "type": "string" }, - "last_modified": { - "example": "2026-10-19", + "city": { "type": "string" }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "matching_units": { + "type": "integer" + }, "name": { - "example": "products-sitemap-9.xml.gz", "type": "string" }, - "type": { - "example": "products", + "postal_code": { "type": "string" }, - "url": { + "property_id": { "type": "string" - } - }, - "type": "object" - }, - "jumia.SitemapURL": { - "properties": { - "image": { + }, + "state": { "type": "string" }, - "last_modified": { - "example": "2026-04-11", + "state_name": { "type": "string" }, - "url": { + "thumbnail_url": { "type": "string" + }, + "units": { + "items": { + "$ref": "#/definitions/greystar.ListedUnit" + }, + "type": "array" + }, + "units_truncated": { + "type": "boolean" } }, "type": "object" }, - "jumia.SitemapURLsResponse": { + "greystar.UnitSearchResult": { "properties": { - "count": { - "example": 1000, - "type": "integer" - }, - "country": { - "example": "ng", - "type": "string" + "facets": { + "$ref": "#/definitions/greystar.UnitFacets" }, - "fetched_at": { + "location": { "type": "string" }, - "has_next": { - "example": true, - "type": "boolean" - }, "page": { - "example": 1, "type": "integer" }, - "page_size": { - "example": 1000, + "per_page": { "type": "integer" }, - "sitemap": { - "example": "products-sitemap-9.xml.gz", - "type": "string" - }, - "source_url": { - "type": "string" + "properties": { + "items": { + "$ref": "#/definitions/greystar.UnitProperty" + }, + "type": "array" }, "total_count": { - "example": 16000, "type": "integer" }, - "urls": { - "items": { - "$ref": "#/definitions/jumia.SitemapURL" - }, - "type": "array" + "total_pages": { + "type": "integer" } }, "type": "object" }, - "jumia.SitemapsResponse": { + "grubhub.AvailabilityResponse": { "properties": { "count": { - "example": 61, + "example": 2, "type": "integer" }, - "country": { - "example": "ng", - "type": "string" - }, "fetched_at": { "type": "string" }, - "sitemaps": { + "requested": { + "description": "Requested is the id list as asked for, so a caller can tell which\nids Grubhub returned nothing for.", "items": { - "$ref": "#/definitions/jumia.SitemapFile" + "type": "string" }, "type": "array" }, - "source_url": { - "type": "string" + "restaurants": { + "items": { + "$ref": "#/definitions/grubhub.RestaurantAvailability" + }, + "type": "array" }, - "type": { + "source_url": { "type": "string" } }, "type": "object" }, - "jumia.Specification": { + "grubhub.MenuCategory": { "properties": { - "name": { - "example": "GTIN Barcode", + "available": { + "example": true, + "type": "boolean" + }, + "category_id": { + "example": "275127198073", "type": "string" }, - "value": { - "example": "07205341072713", + "items": { + "items": { + "$ref": "#/definitions/grubhub.MenuItem" + }, + "type": "array" + }, + "name": { + "example": "Burgers", "type": "string" } }, "type": "object" }, - "jumia.categoriesResponseDoc": { + "grubhub.MenuItem": { "properties": { - "code": { - "example": 200, - "type": "integer" + "available": { + "example": true, + "type": "boolean" }, - "data": { - "$ref": "#/definitions/jumia.CategoriesResponse" + "delivery_price": { + "$ref": "#/definitions/grubhub.Money" }, - "msg": { - "example": "OK", + "description": { "type": "string" - } - }, - "type": "object" - }, - "jumia.countriesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/jumia.CountriesResponse" + "image_url": { + "type": "string" }, - "msg": { - "example": "OK", + "item_id": { + "example": "275127198449", + "type": "string" + }, + "max_price": { + "$ref": "#/definitions/grubhub.Money" + }, + "min_price": { + "allOf": [ + { + "$ref": "#/definitions/grubhub.Money" + } + ], + "description": "MinPrice/MaxPrice bound an item whose price varies by the options\nchosen; they equal Price for a fixed-price item." + }, + "name": { + "example": "Cheeseburger", "type": "string" + }, + "pickup_price": { + "$ref": "#/definitions/grubhub.Money" + }, + "popular": { + "example": true, + "type": "boolean" + }, + "price": { + "$ref": "#/definitions/grubhub.Money" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "jumia.listingResponseDoc": { + "grubhub.MenuResponse": { "properties": { - "code": { - "example": 200, + "categories": { + "items": { + "$ref": "#/definitions/grubhub.MenuCategory" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "item_count": { + "example": 8, "type": "integer" }, - "data": { - "$ref": "#/definitions/jumia.ListingResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "restaurant_id": { + "example": "6238960", + "type": "string" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "jumia.productResponseDoc": { + "grubhub.Money": { "properties": { - "code": { - "example": 200, + "amount": { + "example": 399, "type": "integer" }, - "data": { - "$ref": "#/definitions/jumia.Product" - }, - "msg": { - "example": "OK", + "currency": { + "example": "USD", "type": "string" + }, + "value": { + "example": 3.99, + "type": "number" } }, "type": "object" }, - "jumia.reviewsResponseDoc": { + "grubhub.Offer": { "properties": { - "code": { - "example": 200, - "type": "integer" + "amount": { + "$ref": "#/definitions/grubhub.OfferAmount" }, - "data": { - "$ref": "#/definitions/jumia.ReviewsResponse" + "description": { + "description": "Description is the full offer copy, including its fine print --\nminimum order rules, exclusions, redemption limits.", + "type": "string" }, - "msg": { - "example": "OK", + "end_date": { + "type": "string" + }, + "entitlement_id": { + "type": "string" + }, + "entitlement_type": { + "example": "UNIFIED_REWARD", + "type": "string" + }, + "offer_type": { + "example": "ENTERPRISE_REWARD", + "type": "string" + }, + "pill_text": { + "description": "PillText is the short badge Grubhub's own UI shows on a restaurant\ncard, e.g. \"$10 off\".", + "example": "$10 off", + "type": "string" + }, + "redeem_item_count": { + "example": 1, + "type": "integer" + }, + "title": { + "example": "Free Double Cheeseburger", "type": "string" } }, "type": "object" }, - "jumia.sitemapURLsResponseDoc": { + "grubhub.OfferAmount": { "properties": { - "code": { - "example": 200, - "type": "integer" + "amount_maximum": { + "example": 10, + "type": "number" }, - "data": { - "$ref": "#/definitions/jumia.SitemapURLsResponse" + "currency": { + "example": "USD", + "type": "string" }, - "msg": { - "example": "OK", + "order_minimum": { + "example": 20, + "type": "number" + }, + "type": { + "example": "MENU_ITEM", "type": "string" + }, + "value": { + "example": 0, + "type": "number" } }, "type": "object" }, - "jumia.sitemapsResponseDoc": { + "grubhub.OffersResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/jumia.SitemapsResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "offers": { + "items": { + "$ref": "#/definitions/grubhub.Offer" + }, + "type": "array" + }, + "restaurant_id": { + "example": "1338141", + "type": "string" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "justeat.FilterOption": { + "grubhub.Rating": { "properties": { "count": { + "example": 65, "type": "integer" }, - "filter": { - "type": "string" + "value": { + "example": 4.6, + "type": "number" } }, "type": "object" }, - "justeat.FiltersResponse": { + "grubhub.RestaurantAvailability": { "properties": { - "filters": { + "available_for_delivery": { + "description": "AvailableFor* is whether the channel is offered at all, as distinct\nfrom whether it is open right now.", + "example": true, + "type": "boolean" + }, + "available_for_pickup": { + "example": true, + "type": "boolean" + }, + "blacked_out": { + "example": false, + "type": "boolean" + }, + "cuisines": { "items": { - "$ref": "#/definitions/justeat.FilterOption" + "type": "string" }, "type": "array" }, - "postcode": { + "delivers_to_location": { + "description": "DeliversToLocation is whether this restaurant delivers to the\ncoordinate supplied in the request.", + "example": true, + "type": "boolean" + }, + "delivery_estimate_minutes": { + "example": 25, + "type": "integer" + }, + "delivery_fee": { + "$ref": "#/definitions/grubhub.Money" + }, + "distance_miles": { + "example": 0.23, + "type": "number" + }, + "inundated": { + "description": "Inundated marks a restaurant Grubhub flags as overloaded.", + "example": false, + "type": "boolean" + }, + "logo_url": { "type": "string" }, - "total_count": { + "next_delivery_time": { + "description": "NextDeliveryTime is when Grubhub says the next delivery order can be\nsent, useful when open_delivery is false.", + "type": "string" + }, + "next_pickup_time": { + "type": "string" + }, + "open": { + "description": "Open is the restaurant's overall state; the two channel flags below\ncan differ from it and from each other.", + "example": false, + "type": "boolean" + }, + "open_delivery": { + "example": false, + "type": "boolean" + }, + "open_pickup": { + "example": false, + "type": "boolean" + }, + "order_minimum": { + "$ref": "#/definitions/grubhub.Money" + }, + "pickup_estimate_minutes": { + "example": 10, "type": "integer" + }, + "restaurant_id": { + "example": "6238960", + "type": "string" } }, "type": "object" }, - "justeat.MenuCategory": { + "grubhub.RestaurantHours": { "properties": { - "id": { + "day_of_week": { + "example": "Monday", "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/justeat.MenuItem" - }, - "type": "array" + "end_time": { + "example": "23:59:59.000", + "type": "string" }, - "name": { + "hours": { + "description": "Hours is Grubhub's own human-readable window.", + "example": "12:00 AM - 12:00 AM", + "type": "string" + }, + "start_time": { + "example": "00:00:00.000", "type": "string" } }, "type": "object" }, - "justeat.MenuItem": { + "grubhub.RestaurantResponse": { "properties": { - "description": { + "address": { "type": "string" }, - "energy_display": { + "chain_name": { "type": "string" }, - "id": { + "city": { "type": "string" }, - "image_url": { + "cuisines": { + "items": { + "type": "string" + }, + "type": "array" + }, + "delivery_fee": { + "allOf": [ + { + "$ref": "#/definitions/grubhub.Money" + } + ], + "description": "Note the detail endpoint publishes fewer economics than the search\ncard: delivery_minimum and the ETA estimates come back null here, so\nuse /grubhub/search for those." + }, + "fetched_at": { "type": "string" }, - "modifier_groups": { + "has_coupons": { + "type": "boolean" + }, + "hours": { "items": { - "$ref": "#/definitions/justeat.ModifierGroup" + "$ref": "#/definitions/grubhub.RestaurantHours" }, "type": "array" }, + "is_new": { + "type": "boolean" + }, + "latitude": { + "type": "number" + }, + "logo_url": { + "type": "string" + }, + "longitude": { + "type": "number" + }, + "menu_path": { + "type": "string" + }, "name": { + "example": "7th Street Burger Financial District", "type": "string" }, - "price": { + "offers_delivery": { + "type": "boolean" + }, + "offers_pickup": { + "type": "boolean" + }, + "online_ordering": { + "example": true, + "type": "boolean" + }, + "phone_number": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "price_rating": { "type": "number" + }, + "rating": { + "$ref": "#/definitions/grubhub.Rating" + }, + "restaurant_id": { + "example": "6238960", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "state": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "timezone": { + "example": "America/New_York", + "type": "string" } }, "type": "object" }, - "justeat.MenuResponse": { + "grubhub.Review": { "properties": { - "categories": { + "author_name": { + "example": "Annie", + "type": "string" + }, + "created_at": { + "description": "CreatedAt is RFC3339, converted from the upstream's epoch millis.", + "example": "2026-08-09T12:05:42Z", + "type": "string" + }, + "diner_type": { + "description": "DinerType distinguishes e.g. a Regular from a first-time diner.", + "example": "Regular", + "type": "string" + }, + "items": { + "description": "Items are the menu items this review is attached to -- Grubhub ties\neach review to what the diner actually ordered.", "items": { - "$ref": "#/definitions/justeat.MenuCategory" + "$ref": "#/definitions/grubhub.ReviewedItem" }, "type": "array" }, - "currency_code": { + "rating": { + "example": 5, + "type": "integer" + }, + "review_id": { "type": "string" }, - "item_count": { + "reviewer_review_count": { + "description": "ReviewerReviewCount is how many reviews this diner has written.", + "example": 21, "type": "integer" }, - "name": { + "sentiment": { + "description": "Sentiment is Grubhub's own classification of the review.", + "example": "Positive", "type": "string" }, - "restaurant_id": { + "text": { + "example": "Staff are great and burgers are great!", + "type": "string" + } + }, + "type": "object" + }, + "grubhub.ReviewedItem": { + "properties": { + "item_id": { + "example": "275127198449", "type": "string" }, - "unique_name": { + "name": { + "example": "Cheeseburger", "type": "string" } }, "type": "object" }, - "justeat.ModifierGroup": { + "grubhub.ReviewsResponse": { "properties": { - "id": { + "available_sorts": { + "items": { + "type": "string" + }, + "type": "array" + }, + "fetched_at": { "type": "string" }, - "max_choices": { + "page": { + "example": 1, "type": "integer" }, - "min_choices": { + "rating_count": { "type": "integer" }, - "name": { + "restaurant_id": { + "example": "6238960", "type": "string" }, - "options": { + "restaurant_score": { + "type": "number" + }, + "reviews": { "items": { - "$ref": "#/definitions/justeat.ModifierOption" + "$ref": "#/definitions/grubhub.Review" }, "type": "array" + }, + "source_url": { + "type": "string" + }, + "star_breakdown": { + "$ref": "#/definitions/grubhub.StarBreakdown" + }, + "total_count": { + "example": 0, + "type": "integer" + }, + "total_pages": { + "example": 0, + "type": "integer" } }, "type": "object" }, - "justeat.ModifierOption": { + "grubhub.SearchResponse": { "properties": { - "addition_price": { - "type": "number" + "count": { + "example": 20, + "type": "integer" }, - "energy_display": { + "fetched_at": { "type": "string" }, - "id": { - "type": "string" + "page": { + "example": 1, + "type": "integer" }, - "name": { + "restaurants": { + "items": { + "$ref": "#/definitions/grubhub.SearchRestaurant" + }, + "type": "array" + }, + "source_url": { "type": "string" }, - "remove_price": { - "type": "number" + "total_hits": { + "example": 1457, + "type": "integer" + }, + "total_pages": { + "example": 73, + "type": "integer" } }, "type": "object" }, - "justeat.RestaurantResponse": { + "grubhub.SearchRestaurant": { "properties": { "address": { + "example": "199 Water Street", + "type": "string" + }, + "chain_name": { "type": "string" }, "city": { + "example": "New York", "type": "string" }, - "country": { + "coupons_available": { + "description": "CouponsAvailable and TotalOffers describe promotions without\nreproducing their (volatile) terms.", + "example": false, + "type": "boolean" + }, + "cuisines": { + "items": { + "type": "string" + }, + "type": "array" + }, + "delivery_fee": { + "allOf": [ + { + "$ref": "#/definitions/grubhub.Money" + } + ], + "description": "Delivery and pickup economics." + }, + "delivery_minimum": { + "$ref": "#/definitions/grubhub.Money" + }, + "delivery_time_minutes": { + "example": 30, + "type": "integer" + }, + "distance_miles": { + "description": "DistanceMiles is the distance from the search coordinate.", + "example": "0.4", "type": "string" }, - "image_url": { + "latitude": { + "type": "number" + }, + "logo_url": { "type": "string" }, - "is_active": { - "type": "boolean" + "longitude": { + "type": "number" + }, + "menu_path": { + "type": "string" }, "name": { + "example": "NYC Bagel and Coffee House", "type": "string" }, - "postal_code": { + "offers_delivery": { + "example": true, + "type": "boolean" + }, + "offers_pickup": { + "example": true, + "type": "boolean" + }, + "open": { + "example": true, + "type": "boolean" + }, + "phone_number": { "type": "string" }, - "primary_cuisine": { + "pickup_time_minutes": { + "example": 15, + "type": "integer" + }, + "postal_code": { + "example": "10038", "type": "string" }, - "rating": { + "price_rating": { + "description": "PriceRating is Grubhub's 1-4 \"$\" tier.", + "example": 2, "type": "number" }, - "rating_count": { - "type": "integer" + "rating": { + "$ref": "#/definitions/grubhub.Rating" }, "restaurant_id": { + "example": "14344720", "type": "string" }, - "unique_name": { + "service_fee": { + "$ref": "#/definitions/grubhub.Money" + }, + "state": { + "example": "NY", "type": "string" + }, + "total_menu_items": { + "type": "integer" + }, + "total_offers": { + "type": "integer" } }, "type": "object" }, - "justeat.SearchResponse": { + "grubhub.StarBreakdown": { "properties": { - "restaurants": { - "items": { - "$ref": "#/definitions/justeat.SearchRestaurant" - }, - "type": "array" + "1": { + "example": 0, + "type": "integer" }, - "total_count": { + "2": { + "example": 1, + "type": "integer" + }, + "3": { + "example": 0, + "type": "integer" + }, + "4": { + "example": 5, + "type": "integer" + }, + "5": { + "example": 94, "type": "integer" } }, "type": "object" }, - "justeat.SearchRestaurant": { + "grubhub.TimeSlotDay": { "properties": { - "city": { + "date": { + "example": "2026-09-01", "type": "string" }, - "delivery_eta_max_minutes": { - "type": "integer" - }, - "delivery_eta_min_minutes": { - "type": "integer" + "times": { + "description": "Times is every orderable slot on this date, as RFC3339 timestamps\ncarrying the restaurant's real UTC offset for that instant -- Grubhub\nreports the grid in local wall-clock hours and quarter-hours, so this\nresolves DST rather than requiring the caller to.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "grubhub.TimepickerResponse": { + "properties": { + "days": { + "items": { + "$ref": "#/definitions/grubhub.TimeSlotDay" + }, + "type": "array" }, - "image_url": { + "earliest_order_send_time": { + "description": "EarliestOrderSendTime is the very next moment Grubhub will accept an\norder for this restaurant, ASAP or scheduled.", "type": "string" }, - "is_open_now": { - "type": "boolean" - }, - "name": { + "fetched_at": { "type": "string" }, - "postal_code": { + "location_mode": { + "example": "DELIVERY", "type": "string" }, - "rating": { - "type": "number" - }, - "rating_count": { - "type": "integer" - }, "restaurant_id": { + "example": "698307", "type": "string" }, - "unique_name": { + "source_url": { + "type": "string" + }, + "time_zone": { + "example": "America/New_York", "type": "string" } }, "type": "object" }, - "justeat.filtersResponseDoc": { + "grubhub.availabilityResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/justeat.FiltersResponse" + "$ref": "#/definitions/grubhub.AvailabilityResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -118151,14 +124048,14 @@ }, "type": "object" }, - "justeat.menuResponseDoc": { + "grubhub.menuResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/justeat.MenuResponse" + "$ref": "#/definitions/grubhub.MenuResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -118166,14 +124063,14 @@ }, "type": "object" }, - "justeat.restaurantResponseDoc": { + "grubhub.offersResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/justeat.RestaurantResponse" + "$ref": "#/definitions/grubhub.OffersResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -118181,14 +124078,14 @@ }, "type": "object" }, - "justeat.searchResponseDoc": { + "grubhub.restaurantResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/justeat.SearchResponse" + "$ref": "#/definitions/grubhub.RestaurantResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -118196,1194 +124093,1111 @@ }, "type": "object" }, - "justwatch.AgeCertification": { + "grubhub.reviewsResponseDoc": { "properties": { - "technical_name": { - "description": "Age certification code used by JustWatch, for example `PG-13`.", - "example": "PG-13", - "type": "string" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/grubhub.ReviewsResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "justwatch.AgeCertificationsResponse": { + "grubhub.searchResponseDoc": { "properties": { - "age_certifications": { - "description": "Age certifications used in the country.", - "items": { - "$ref": "#/definitions/justwatch.AgeCertification" - }, - "type": "array" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "country": { - "description": "Two-letter ISO country code the certifications apply to.", - "example": "US", - "type": "string" + "data": { + "$ref": "#/definitions/grubhub.SearchResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "justwatch.AnalysisResponse": { + "grubhub.timepickerResponseDoc": { "properties": { - "summary": { - "allOf": [ - { - "$ref": "#/definitions/justwatch.AnalysisSummary" - } - ], - "description": "Availability summary computed from the title's offers." + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "title": { - "allOf": [ - { - "$ref": "#/definitions/justwatch.TitleResponse" - } - ], - "description": "Title the summary was computed for." + "data": { + "$ref": "#/definitions/grubhub.TimepickerResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "justwatch.AnalysisSummary": { + "guardian.ArticleResponse": { "properties": { - "available": { - "description": "Whether the title has at least one offer.", - "example": true, - "type": "boolean" - }, - "best_buy": { - "allOf": [ - { - "$ref": "#/definitions/justwatch.Offer" - } - ], - "description": "Cheapest `BUY` offer for the title. Omitted when there is none." - }, - "best_free": { - "allOf": [ - { - "$ref": "#/definitions/justwatch.Offer" - } - ], - "description": "Cheapest `FREE` offer for the title. Omitted when there is none." + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "best_rent": { - "allOf": [ - { - "$ref": "#/definitions/justwatch.Offer" - } - ], - "description": "Cheapest `RENT` offer for the title. Omitted when there is none." + "description": { + "type": "string" }, - "best_subscription": { - "allOf": [ - { - "$ref": "#/definitions/justwatch.Offer" - } - ], - "description": "Cheapest `FLATRATE` or `ADS` offer for the title. Omitted when there is none." + "image_url": { + "type": "string" }, - "format_counts": { - "additionalProperties": { - "type": "integer" + "paragraphs": { + "items": { + "type": "string" }, - "description": "Number of offers per picture format, keyed by format such as `HD` or `4K`.", - "type": "object" + "type": "array" }, - "monetization_counts": { - "additionalProperties": { - "type": "integer" - }, - "description": "Number of offers per monetization type, keyed by type such as `RENT` or `BUY`.", - "type": "object" + "published_at": { + "type": "string" }, - "price_ranges": { - "additionalProperties": { - "$ref": "#/definitions/justwatch.PriceRange" - }, - "description": "Lowest and highest price per monetization type, keyed by type. Only offers with a price are counted.", - "type": "object" + "section": { + "type": "string" }, - "provider_count": { - "description": "Number of distinct providers that carry the title.", - "example": 6, - "type": "integer" + "title": { + "type": "string" }, - "total_offers": { - "description": "Total number of offers found for the title.", - "example": 15, - "type": "integer" + "updated_at": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "justwatch.Backdrop": { + "guardian.AuthorArticle": { "properties": { + "image_url": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "section": { + "type": "string" + }, + "title": { + "type": "string" + }, "url": { - "description": "URL of a backdrop image for the title.", - "example": "https://images.justwatch.com/backdrop/8735151/s1920/inception.jpg", "type": "string" } }, "type": "object" }, - "justwatch.Clip": { + "guardian.AuthorResponse": { "properties": { - "external_id": { - "description": "Video id of the clip on the hosting site.", - "example": "8hP9D6kZseM", + "articles": { + "items": { + "$ref": "#/definitions/guardian.AuthorArticle" + }, + "type": "array" + }, + "bio": { "type": "string" }, - "provider": { - "description": "Site hosting the clip, for example `YOUTUBE`.", - "example": "YOUTUBE", + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "page": { + "type": "integer" + }, + "slug": { + "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "twitter_handle": { "type": "string" }, "url": { - "description": "URL where the clip can be watched.", - "example": "https://www.youtube.com/watch?v=8hP9D6kZseM", "type": "string" } }, "type": "object" }, - "justwatch.Credit": { + "guardian.HeadlineItem": { "properties": { - "character_name": { - "description": "Character the person plays. Omitted for crew roles.", - "example": "Dom Cobb", + "author": { "type": "string" }, - "name": { - "description": "Full name of the person.", - "example": "Leonardo DiCaprio", + "published_at": { "type": "string" }, - "person_id": { - "description": "JustWatch id of the person.", - "example": 1641, - "type": "integer" + "section": { + "type": "string" }, - "role": { - "description": "Role of the person on the title, for example `ACTOR`.", - "example": "ACTOR", + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "justwatch.DiscoverResponse": { + "guardian.HeadlinesResponse": { "properties": { - "country": { - "description": "Two-letter ISO country code the results are for.", - "example": "US", - "type": "string" - }, - "genres": { - "description": "Genre short names that were used as filters.", - "example": [ - "act" - ], + "items": { "items": { - "type": "string" + "$ref": "#/definitions/guardian.HeadlineItem" }, "type": "array" }, - "language": { - "description": "Two-letter language code used for titles and descriptions.", - "example": "en", + "section": { + "type": "string" + } + }, + "type": "object" + }, + "guardian.LiveBlock": { + "properties": { + "author": { "type": "string" }, - "monetization_types": { - "description": "Monetization types that were used as filters, for example `FLATRATE`.", - "example": [ - "FLATRATE" - ], - "items": { - "type": "string" - }, - "type": "array" + "id": { + "type": "string" }, - "production_countries": { - "description": "Production country codes that were used as filters.", - "example": [ - "KR" - ], + "paragraphs": { "items": { "type": "string" }, "type": "array" }, - "providers": { - "description": "Provider short names that were used as filters, for example `nfx`.", - "example": [ - "nfx" - ], - "items": { - "type": "string" - }, - "type": "array" + "published_at": { + "type": "string" }, - "results": { - "description": "Titles matching the request, one item per title.", - "items": { - "$ref": "#/definitions/justwatch.SearchTitle" - }, - "type": "array" - }, - "type": { - "description": "Content type filter applied: `all`, `movie` or `show`.", - "example": "all", + "title": { "type": "string" - }, - "year_max": { - "description": "Latest release year used as a filter.", - "example": 2026, - "type": "integer" - }, - "year_min": { - "description": "Earliest release year used as a filter.", - "example": 2020, - "type": "integer" } }, "type": "object" }, - "justwatch.EpisodeByIDResponse": { + "guardian.LiveKeyEvent": { "properties": { - "country": { - "description": "Two-letter ISO country code the results are for.", - "example": "US", + "published_at": { "type": "string" }, - "episode": { - "allOf": [ - { - "$ref": "#/definitions/justwatch.EpisodeSummary" - } - ], - "description": "Episode that matches the requested id." - }, - "language": { - "description": "Two-letter language code used for titles and descriptions.", - "example": "en", + "title": { "type": "string" } }, "type": "object" }, - "justwatch.EpisodeCountryOffers": { + "guardian.LiveResponse": { "properties": { - "country": { - "description": "Two-letter ISO country code the offers apply to.", - "example": "US", - "type": "string" - }, - "episode": { - "allOf": [ - { - "$ref": "#/definitions/justwatch.EpisodeSummary" - } - ], - "description": "Episode details as listed in this country." + "blocks": { + "items": { + "$ref": "#/definitions/guardian.LiveBlock" + }, + "type": "array" }, - "offers": { - "description": "Offers for the episode in this country.", + "key_events": { "items": { - "$ref": "#/definitions/justwatch.Offer" + "$ref": "#/definitions/guardian.LiveKeyEvent" }, "type": "array" + }, + "last_updated": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "justwatch.EpisodeOffersResponse": { + "guardian.TopicItem": { "properties": { - "countries": { - "description": "Offers for the episode, one item per country.", - "items": { - "$ref": "#/definitions/justwatch.EpisodeCountryOffers" - }, - "type": "array" + "kicker": { + "description": "Kicker is the series or blog label Guardian shows above the headline.", + "type": "string" }, - "id": { - "description": "JustWatch episode id the offers belong to, for example `tse5550494`.", - "example": "tse5550494", + "published_at": { "type": "string" }, - "language": { - "description": "Two-letter language code used for titles and descriptions.", - "example": "en", + "section": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "justwatch.EpisodeSummary": { + "guardian.TopicPagination": { "properties": { - "description": { - "description": "Short synopsis of the episode.", - "type": "string" + "has_next": { + "type": "boolean" }, - "episode_number": { - "description": "Number of the episode within its season.", - "example": 1, + "next_page": { "type": "integer" }, - "id": { - "description": "JustWatch episode id, for example `tse5550494`.", - "example": "tse5550494", - "type": "string" + "page": { + "type": "integer" }, - "object_id": { - "description": "Numeric JustWatch id of the episode.", - "example": 5550494, + "total_pages": { + "description": "TotalPages is the archive's last page (1 for a section front).", "type": "integer" }, - "object_type": { - "description": "JustWatch object type, `SHOW_EPISODE` for episodes.", - "example": "SHOW_EPISODE", - "type": "string" + "total_results": { + "description": "TotalResults is Guardian's article count for a tag archive.", + "type": "integer" + } + }, + "type": "object" + }, + "guardian.TopicResponse": { + "properties": { + "is_front": { + "description": "IsFront is true for a curated section front (no archive paging) and\nfalse for a paginated tag archive.", + "type": "boolean" }, - "offers": { - "description": "Offers for the episode, when requested.", + "items": { "items": { - "$ref": "#/definitions/justwatch.Offer" + "$ref": "#/definitions/guardian.TopicItem" }, "type": "array" }, - "path": { - "description": "JustWatch page path of the episode.", - "type": "string" - }, - "poster_url": { - "description": "URL of the still or poster image for the episode.", - "type": "string" + "pagination": { + "$ref": "#/definitions/guardian.TopicPagination" }, - "title": { - "description": "Episode title in the requested language.", - "example": "Long Day's Journey Into Night", + "resolved_topic": { + "description": "ResolvedTopic is the path Guardian actually served, which differs from\nTopic for edition-scoped fronts (technology -> uk/technology).", "type": "string" }, - "url": { - "description": "Full JustWatch page URL of the episode.", + "topic": { "type": "string" - }, - "year": { - "description": "Release year of the episode.", - "example": 2022, - "type": "integer" } }, "type": "object" }, - "justwatch.Genre": { + "guardian.articleResponseDoc": { "properties": { - "short_name": { - "description": "Short genre code accepted as a filter, for example `act`.", - "example": "act", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "translation": { - "description": "Genre name in the requested language, for example `Action & Adventure`.", - "example": "Action & Adventure", + "data": { + "$ref": "#/definitions/guardian.ArticleResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "justwatch.GenreTitlesResponse": { + "guardian.authorResponseDoc": { "properties": { - "country": { - "description": "Two-letter ISO country code the results are for.", - "example": "US", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "genre": { - "description": "Genre short name the titles belong to, for example `act`.", - "example": "act", - "type": "string" + "data": { + "$ref": "#/definitions/guardian.AuthorResponse" }, - "language": { - "description": "Two-letter language code used for titles and descriptions.", - "example": "en", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "guardian.headlinesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "results": { - "description": "Titles matching the request, one item per title.", - "items": { - "$ref": "#/definitions/justwatch.SearchTitle" - }, - "type": "array" + "data": { + "$ref": "#/definitions/guardian.HeadlinesResponse" }, - "type": { - "description": "Content type filter applied: `all`, `movie` or `show`.", - "example": "all", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "justwatch.GenresResponse": { + "guardian.liveResponseDoc": { "properties": { - "genres": { - "description": "Genres available on JustWatch.", - "items": { - "$ref": "#/definitions/justwatch.Genre" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "language": { - "description": "Two-letter language code the genre names are translated into.", - "example": "en", + "data": { + "$ref": "#/definitions/guardian.LiveResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "justwatch.MonetizationTitlesResponse": { + "guardian.topicResponseDoc": { "properties": { - "country": { - "description": "Two-letter ISO country code the results are for.", - "example": "US", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "language": { - "description": "Two-letter language code used for titles and descriptions.", - "example": "en", + "data": { + "$ref": "#/definitions/guardian.TopicResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "gucci.CategoriesResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/gucci.Category" + }, + "type": "array" }, - "monetization_type": { - "description": "Monetization type the titles are offered under: `FLATRATE`, `FREE`, `ADS`, `RENT` or `BUY`.", - "example": "FLATRATE", + "country": { "type": "string" }, - "results": { - "description": "Titles matching the request, one item per title.", + "departments": { "items": { - "$ref": "#/definitions/justwatch.SearchTitle" + "type": "string" }, "type": "array" }, - "type": { - "description": "Content type filter applied: `all`, `movie` or `show`.", - "example": "all", + "fetched_at": { + "type": "string" + }, + "language": { + "type": "string" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "justwatch.NewTitlesResponse": { + "gucci.Category": { "properties": { - "country": { - "description": "Two-letter ISO country code the results are for.", - "example": "US", + "category": { "type": "string" }, - "language": { - "description": "Two-letter language code used for titles and descriptions.", - "example": "en", + "department": { "type": "string" }, - "results": { - "description": "Newly added titles, one item per title.", - "items": { - "$ref": "#/definitions/justwatch.SearchTitle" - }, - "type": "array" + "label": { + "type": "string" }, - "type": { - "description": "Content type filter applied: `all`, `movie` or `show`.", - "example": "all", + "path": { "type": "string" } }, "type": "object" }, - "justwatch.Offer": { + "gucci.CategoryFacet": { "properties": { - "availability": { - "description": "Availability of the offer as a schema.org URL, for example `https://schema.org/InStock`.", - "example": "https://schema.org/InStock", - "type": "string" + "count": { + "type": "integer" }, - "category": { - "description": "Format label shown for the offer, for example `Blu-Ray`.", - "example": "Blu-Ray", + "path": { "type": "string" + } + }, + "type": "object" + }, + "gucci.CategoryProduct": { + "properties": { + "colors": { + "items": { + "type": "string" + }, + "type": "array" }, "currency": { - "description": "Currency of `price`, as an ISO 4217 code such as `USD`.", - "example": "USD", "type": "string" }, - "monetization_type": { - "description": "How the title is offered: `FLATRATE`, `FREE`, `ADS`, `RENT` or `BUY`.", - "example": "RENT", - "type": "string" + "images": { + "items": { + "type": "string" + }, + "type": "array" }, - "presentation_type": { - "description": "Picture format of the offer, for example `HD` or `4K`.", - "example": "4K", - "type": "string" + "in_stock": { + "type": "boolean" }, - "price": { - "description": "Price of the offer in `currency`. Omitted for free and subscription offers without a price.", - "example": 4.99, - "type": "number" + "in_stock_online": { + "type": "boolean" }, - "provider": { - "description": "Name of the provider offering the title, for example `Amazon Video`.", - "example": "Amazon Video", + "in_stock_stores": { + "type": "boolean" + }, + "name": { "type": "string" }, - "provider_id": { - "description": "JustWatch id of the provider.", - "example": 10, - "type": "integer" + "price": { + "type": "number" }, - "provider_short": { - "description": "Short provider code, for example `amz`.", - "example": "amz", + "style_code": { "type": "string" }, - "provider_technical": { - "description": "Technical provider name used by JustWatch, for example `amazon`.", - "example": "amazon", + "url": { "type": "string" }, - "url": { - "description": "Link to watch or buy the title at the provider.", + "variation_description": { "type": "string" } }, "type": "object" }, - "justwatch.PopularResponse": { + "gucci.CategoryResponse": { "properties": { - "country": { - "description": "Two-letter ISO country code the results are for.", - "example": "US", - "type": "string" - }, - "has_next_page": { - "description": "Whether more popular titles are available after this page.", - "example": true, - "type": "boolean" - }, - "language": { - "description": "Two-letter language code used for titles and descriptions.", - "example": "en", + "category": { "type": "string" }, - "next_cursor": { - "description": "Cursor to pass as `cursor` to get the next page.", - "example": "Mg==", + "country": { "type": "string" }, - "results": { - "description": "Popular titles in ranked order, one item per title.", + "facets": { "items": { - "$ref": "#/definitions/justwatch.SearchTitle" + "$ref": "#/definitions/gucci.CategoryFacet" }, "type": "array" }, - "type": { - "description": "Content type filter applied: `all`, `movie` or `show`.", - "example": "all", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "justwatch.PriceRange": { - "properties": { - "currency": { - "description": "Currency of the prices, as an ISO 4217 code such as `USD`.", - "example": "USD", + }, + "language": { "type": "string" }, - "max": { - "description": "Highest price among the offers of this type.", - "example": 14.99, - "type": "number" + "page": { + "type": "integer" }, - "min": { - "description": "Lowest price among the offers of this type.", - "example": 2.99, - "type": "number" - } - }, - "type": "object" - }, - "justwatch.Provider": { - "properties": { - "clear_name": { - "description": "Display name of the provider, for example `Netflix`.", - "example": "Netflix", - "type": "string" + "pages_count": { + "type": "integer" }, - "icon_url": { - "description": "URL of the provider's icon image.", - "example": "https://images.justwatch.com/icon/207360008/s100/netflix.jpg", - "type": "string" + "products": { + "items": { + "$ref": "#/definitions/gucci.CategoryProduct" + }, + "type": "array" }, - "id": { - "description": "JustWatch id of the provider.", - "example": 8, + "products_count": { "type": "integer" }, - "short_name": { - "description": "Short provider code accepted as a filter, for example `nfx`.", - "example": "nfx", - "type": "string" + "sort_options": { + "items": { + "type": "string" + }, + "type": "array" }, - "technical_name": { - "description": "Technical provider name used by JustWatch, for example `netflix`.", - "example": "netflix", + "source_url": { "type": "string" } }, "type": "object" }, - "justwatch.ProviderTitlesResponse": { + "gucci.Product": { "properties": { - "country": { - "description": "Two-letter ISO country code the results are for.", - "example": "US", + "brand": { "type": "string" }, - "language": { - "description": "Two-letter language code used for titles and descriptions.", - "example": "en", - "type": "string" + "categories": { + "items": { + "type": "string" + }, + "type": "array" }, - "provider": { - "description": "Provider short name the titles are available on, for example `nfx`.", - "example": "nfx", - "type": "string" + "category_codes": { + "items": { + "type": "string" + }, + "type": "array" }, - "results": { - "description": "Titles matching the request, one item per title.", + "colors": { "items": { - "$ref": "#/definitions/justwatch.SearchTitle" + "type": "string" }, "type": "array" }, - "type": { - "description": "Content type filter applied: `all`, `movie` or `show`.", - "example": "all", + "currency": { "type": "string" - } - }, - "type": "object" - }, - "justwatch.ProvidersResponse": { - "properties": { - "country": { - "description": "Two-letter ISO country code the providers are available in.", - "example": "US", + }, + "description": { "type": "string" }, - "providers": { - "description": "Streaming and purchase providers available in the country.", + "gender": { + "type": "string" + }, + "images": { "items": { - "$ref": "#/definitions/justwatch.Provider" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "justwatch.Scoring": { - "properties": { - "best_rating": { - "description": "Top of the scale for `justwatch_rating`, for example `100`.", - "example": "100", - "type": "string" }, - "certified_fresh": { - "description": "Whether the title carries the Rotten Tomatoes Certified Fresh badge.", - "example": true, + "in_stock": { "type": "boolean" }, - "imdb_score": { - "description": "IMDb user rating out of 10.", - "example": 8.8, - "type": "number" + "in_stock_online": { + "type": "boolean" }, - "imdb_votes": { - "description": "Number of IMDb votes behind `imdb_score`.", - "example": 2798306, - "type": "integer" + "in_stock_stores": { + "type": "boolean" }, - "justwatch_rating": { - "description": "JustWatch user rating, on the scale given by `best_rating`.", - "example": 97, - "type": "number" + "line": { + "type": "string" }, - "rating_count": { - "description": "Number of ratings behind `justwatch_rating`.", - "example": 77696, - "type": "integer" + "materials": { + "items": { + "type": "string" + }, + "type": "array" }, - "tmdb_popularity": { - "description": "TMDB popularity score for the title.", - "example": 38.5801, - "type": "number" + "name": { + "type": "string" }, - "tmdb_score": { - "description": "TMDB user rating for the title.", - "example": 8.372, + "price": { "type": "number" }, - "tomato_meter": { - "description": "Rotten Tomatoes Tomatometer score, as a percentage.", - "example": 87, - "type": "integer" + "sizes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sku": { + "type": "string" + }, + "style_code": { + "type": "string" + }, + "thumbnail_url": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "justwatch.SearchResponse": { + "gucci.ProductDetailResponse": { "properties": { - "country": { - "description": "Two-letter ISO country code the results are for.", - "example": "US", + "availability": { "type": "string" }, - "language": { - "description": "Two-letter language code used for titles and descriptions.", - "example": "en", + "brand": { "type": "string" }, - "query": { - "description": "Search text that was run.", - "example": "inception", - "type": "string" + "breadcrumbs": { + "items": { + "type": "string" + }, + "type": "array" }, - "results": { - "description": "Titles matching the search text, one item per title.", + "categories": { "items": { - "$ref": "#/definitions/justwatch.SearchTitle" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "justwatch.SearchTitle": { - "properties": { - "id": { - "description": "JustWatch title id, for example `tm92641` for a movie.", - "example": "tm92641", + }, + "category_codes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "colors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "currency": { "type": "string" }, - "object_id": { - "description": "Numeric JustWatch id of the title.", - "example": 92641, - "type": "integer" + "description": { + "type": "string" }, - "object_type": { - "description": "JustWatch object type of the title, for example `MOVIE` or `SHOW`.", - "example": "MOVIE", + "fetched_at": { "type": "string" }, - "offers": { - "description": "Streaming, rental and purchase offers for the title.", + "gender": { + "type": "string" + }, + "images": { "items": { - "$ref": "#/definitions/justwatch.Offer" + "type": "string" }, "type": "array" }, - "path": { - "description": "JustWatch page path of the title, for example `/us/movie/inception`.", - "example": "/us/movie/inception", + "in_stock": { + "type": "boolean" + }, + "in_stock_online": { + "type": "boolean" + }, + "in_stock_stores": { + "type": "boolean" + }, + "line": { "type": "string" }, - "poster_url": { - "description": "URL of the poster image for the title.", - "example": "https://images.justwatch.com/poster/302449148/s718/inception.jpg", + "materials": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { "type": "string" }, - "production_countries": { - "description": "ProductionCountries lists the title's country of origin as two-letter ISO\ncodes. It is only populated on surfaces that request it, such as discover.", - "example": [ - "KR" - ], + "price": { + "type": "number" + }, + "sizes": { "items": { "type": "string" }, "type": "array" }, - "title": { - "description": "Name of the title in the requested language.", - "example": "Inception", + "sku": { "type": "string" }, - "url": { - "description": "Full JustWatch page URL of the title.", - "example": "https://www.justwatch.com/us/movie/inception", + "source_url": { "type": "string" }, - "year": { - "description": "Release year of the title.", - "example": 2010, - "type": "integer" + "style_code": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "justwatch.SeasonByIDResponse": { + "gucci.RecommendationsResponse": { "properties": { + "count": { + "type": "integer" + }, "country": { - "description": "Two-letter ISO country code the results are for.", - "example": "US", "type": "string" }, - "language": { - "description": "Two-letter language code used for titles and descriptions.", - "example": "en", + "fetched_at": { "type": "string" }, - "season": { - "allOf": [ - { - "$ref": "#/definitions/justwatch.SeasonSummary" - } - ], - "description": "Season that matches the requested id." - } - }, - "type": "object" - }, - "justwatch.SeasonEpisodesResponse": { - "properties": { - "country": { - "description": "Two-letter ISO country code the results are for.", - "example": "US", + "model": { "type": "string" }, - "episodes": { - "description": "Episodes of the season, in order.", + "products": { "items": { - "$ref": "#/definitions/justwatch.EpisodeSummary" + "$ref": "#/definitions/gucci.RecommendedProduct" }, "type": "array" }, - "language": { - "description": "Two-letter language code used for titles and descriptions.", - "example": "en", + "source_url": { "type": "string" }, - "season": { - "allOf": [ - { - "$ref": "#/definitions/justwatch.SeasonSummary" - } - ], - "description": "Season the episodes belong to." + "style_code": { + "type": "string" } }, "type": "object" }, - "justwatch.SeasonSummary": { + "gucci.RecommendedProduct": { "properties": { - "description": { - "description": "Short synopsis of the season.", + "currency": { "type": "string" }, - "id": { - "description": "JustWatch season id, for example `tss297253`.", - "example": "tss297253", + "image_url": { "type": "string" }, - "object_id": { - "description": "Numeric JustWatch id of the season.", - "example": 297253, - "type": "integer" - }, - "object_type": { - "description": "JustWatch object type, `SHOW_SEASON` for seasons.", - "example": "SHOW_SEASON", - "type": "string" + "in_stock_online": { + "type": "boolean" }, - "path": { - "description": "JustWatch page path of the season.", - "example": "/us/tv-show/from/season-1", - "type": "string" + "in_stock_stores": { + "type": "boolean" }, - "poster_url": { - "description": "URL of the poster image for the season.", - "example": "https://images.justwatch.com/poster/320190730/s718/season-1.jpg", + "name": { "type": "string" }, - "season_number": { - "description": "Number of the season within the show.", - "example": 1, - "type": "integer" + "price": { + "type": "number" }, - "title": { - "description": "Season title, for example `Season 1`.", - "example": "Season 1", + "style_code": { "type": "string" }, "url": { - "description": "Full JustWatch page URL of the season.", - "example": "https://www.justwatch.com/us/tv-show/from/season-1", "type": "string" - }, - "year": { - "description": "Release year of the season.", - "example": 2022, - "type": "integer" } }, "type": "object" }, - "justwatch.ShowSeasonsResponse": { + "gucci.SearchResponse": { "properties": { + "count": { + "type": "integer" + }, "country": { - "description": "Two-letter ISO country code the results are for.", - "example": "US", "type": "string" }, - "language": { - "description": "Two-letter language code used for titles and descriptions.", - "example": "en", + "fetched_at": { "type": "string" }, - "seasons": { - "description": "Seasons of the show, in order.", + "limit": { + "type": "integer" + }, + "page": { + "type": "integer" + }, + "products": { "items": { - "$ref": "#/definitions/justwatch.SeasonSummary" + "$ref": "#/definitions/gucci.Product" }, "type": "array" }, - "show": { - "allOf": [ - { - "$ref": "#/definitions/justwatch.TitleResponse" - } - ], - "description": "Show the seasons belong to." + "query": { + "type": "string" + }, + "size": { + "type": "string" + }, + "size_facets": { + "additionalProperties": { + "type": "integer" + }, + "description": "SizeFacets lists the live size values and counts returned by Gucci's\ncatalog for this query. A value can be passed back as Size.", + "type": "object" + }, + "source_url": { + "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" } }, "type": "object" }, - "justwatch.SimilarTitlesResponse": { + "gucci.SizeGuideResponse": { "properties": { - "country": { - "description": "Two-letter ISO country code the results are for.", - "example": "US", - "type": "string" + "available": { + "type": "boolean" }, - "id": { - "description": "JustWatch title id the similar titles are based on, for example `tm92641`.", - "example": "tm92641", + "fetched_at": { "type": "string" }, - "language": { - "description": "Two-letter language code used for titles and descriptions.", - "example": "en", - "type": "string" + "headers": { + "items": { + "type": "string" + }, + "type": "array" }, - "results": { - "description": "Titles similar to the requested one, one item per title.", + "rows": { "items": { - "$ref": "#/definitions/justwatch.SearchTitle" + "items": { + "type": "string" + }, + "type": "array" }, "type": "array" + }, + "source_url": { + "type": "string" + }, + "style_code": { + "type": "string" + }, + "title": { + "type": "string" } }, "type": "object" }, - "justwatch.TitleCountryOffers": { + "gucci.Store": { "properties": { - "country": { - "description": "Two-letter ISO country code the offers apply to.", - "example": "US", + "address": { "type": "string" }, - "offers": { - "description": "Offers for the title in this country.", + "book_appointment_url": { + "type": "string" + }, + "city": { + "type": "string" + }, + "departments": { "items": { - "$ref": "#/definitions/justwatch.Offer" + "type": "string" }, "type": "array" }, - "title": { - "allOf": [ - { - "$ref": "#/definitions/justwatch.TitleResponse" - } - ], - "description": "Title details as listed in this country." + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "name": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "store_code": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "justwatch.TitleMediaResponse": { + "gucci.StoreDetailResponse": { "properties": { - "backdrops": { - "description": "Backdrop images for the title.", - "items": { - "$ref": "#/definitions/justwatch.Backdrop" - }, - "type": "array" + "city": { + "type": "string" }, - "clips": { - "description": "Trailers and other video clips for the title.", + "country": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "images": { "items": { - "$ref": "#/definitions/justwatch.Clip" + "type": "string" }, "type": "array" }, - "country": { - "description": "Two-letter ISO country code the results are for.", - "example": "US", + "name": { "type": "string" }, - "credits": { - "description": "Cast and crew credited on the title.", + "opening_hours": { "items": { - "$ref": "#/definitions/justwatch.Credit" + "$ref": "#/definitions/gucci.StoreOpeningHours" }, "type": "array" }, - "id": { - "description": "JustWatch title id the media belongs to, for example `tm92641`.", - "example": "tm92641", + "phone": { "type": "string" }, - "language": { - "description": "Two-letter language code used for titles and descriptions.", - "example": "en", + "postal_code": { "type": "string" }, - "title": { - "description": "Name of the title in the requested language.", - "example": "Inception", + "region": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "street_address": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "justwatch.TitleOffersResponse": { + "gucci.StoreOpeningHours": { "properties": { - "countries": { - "description": "Offers for the title, one item per country.", + "closes": { + "type": "string" + }, + "days": { "items": { - "$ref": "#/definitions/justwatch.TitleCountryOffers" + "type": "string" }, "type": "array" }, - "id": { - "description": "JustWatch title id the offers belong to, for example `tm92641`.", - "example": "tm92641", + "opens": { + "type": "string" + } + }, + "type": "object" + }, + "gucci.StoreSearchResponse": { + "properties": { + "count": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, "language": { - "description": "Two-letter language code used for titles and descriptions.", - "example": "en", "type": "string" + }, + "market": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "stores": { + "items": { + "$ref": "#/definitions/gucci.StoreSearchResult" + }, + "type": "array" } }, "type": "object" }, - "justwatch.TitleResponse": { + "gucci.StoreSearchResult": { "properties": { - "content_rating": { - "description": "Age or content rating shown for the title.", - "type": "string" + "active": { + "type": "boolean" }, - "description": { - "description": "Synopsis of the title.", + "address": { "type": "string" }, - "genres": { - "description": "Genre names of the title.", + "categories": { "items": { "type": "string" }, "type": "array" }, - "id": { - "description": "JustWatch title id, for example `tm92641` for a movie.", - "example": "tm92641", + "city": { "type": "string" }, - "object_id": { - "description": "Numeric JustWatch id of the title.", - "example": 92641, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "name": { + "type": "string" + }, + "number": { "type": "integer" }, - "object_type": { - "description": "JustWatch object type of the title, for example `MOVIE` or `SHOW`.", - "example": "MOVIE", + "phone": { "type": "string" }, - "offers": { - "description": "Streaming, rental and purchase offers for the title.", + "services": { "items": { - "$ref": "#/definitions/justwatch.Offer" + "type": "string" }, "type": "array" }, - "path": { - "description": "JustWatch page path of the title, for example `/us/movie/inception`.", - "example": "/us/movie/inception", + "type": { "type": "string" + } + }, + "type": "object" + }, + "gucci.StoresResponse": { + "properties": { + "count": { + "type": "integer" }, - "poster_url": { - "description": "URL of the poster image for the title.", - "example": "https://images.justwatch.com/poster/302449148/s718/inception.jpg", + "country": { "type": "string" }, - "release_date": { - "description": "Release date of the title, for example `2010-07-14`.", - "example": "2010-07-14", + "departments": { + "items": { + "type": "string" + }, + "type": "array" + }, + "fetched_at": { "type": "string" }, - "runtime": { - "description": "Running time as an ISO 8601 duration, for example `PT2H28M0S`.", - "example": "PT2H28M0S", + "source_url": { "type": "string" }, - "scoring": { - "allOf": [ - { - "$ref": "#/definitions/justwatch.Scoring" - } - ], - "description": "User and critic ratings for the title." + "stores": { + "items": { + "$ref": "#/definitions/gucci.Store" + }, + "type": "array" + } + }, + "type": "object" + }, + "gucci.SuggestResponse": { + "properties": { + "fetched_at": { + "type": "string" }, - "title": { - "description": "Name of the title in the requested language.", - "example": "Inception", + "query": { "type": "string" }, - "url": { - "description": "Full JustWatch page URL of the title.", - "example": "https://www.justwatch.com/us/movie/inception", + "source_url": { "type": "string" }, - "year": { - "description": "Release year of the title.", - "example": 2010, + "suggestions": { + "items": { + "$ref": "#/definitions/gucci.SuggestedQuery" + }, + "type": "array" + } + }, + "type": "object" + }, + "gucci.SuggestedQuery": { + "properties": { + "query": { + "type": "string" + }, + "result_count": { "type": "integer" } }, "type": "object" }, - "justwatch.ageCertificationsResponseDoc": { + "gucci.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/justwatch.AgeCertificationsResponse" + "$ref": "#/definitions/gucci.CategoriesResponse" }, "msg": { "example": "OK", @@ -119392,14 +125206,14 @@ }, "type": "object" }, - "justwatch.analysisResponseDoc": { + "gucci.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/justwatch.AnalysisResponse" + "$ref": "#/definitions/gucci.CategoryResponse" }, "msg": { "example": "OK", @@ -119408,14 +125222,14 @@ }, "type": "object" }, - "justwatch.discoverResponseDoc": { + "gucci.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/justwatch.DiscoverResponse" + "$ref": "#/definitions/gucci.ProductDetailResponse" }, "msg": { "example": "OK", @@ -119424,14 +125238,14 @@ }, "type": "object" }, - "justwatch.episodeByIDResponseDoc": { + "gucci.recommendationsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/justwatch.EpisodeByIDResponse" + "$ref": "#/definitions/gucci.RecommendationsResponse" }, "msg": { "example": "OK", @@ -119440,14 +125254,14 @@ }, "type": "object" }, - "justwatch.episodeOffersResponseDoc": { + "gucci.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/justwatch.EpisodeOffersResponse" + "$ref": "#/definitions/gucci.SearchResponse" }, "msg": { "example": "OK", @@ -119456,14 +125270,14 @@ }, "type": "object" }, - "justwatch.genreTitlesResponseDoc": { + "gucci.sizeGuideResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/justwatch.GenreTitlesResponse" + "$ref": "#/definitions/gucci.SizeGuideResponse" }, "msg": { "example": "OK", @@ -119472,14 +125286,14 @@ }, "type": "object" }, - "justwatch.genresResponseDoc": { + "gucci.storeResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/justwatch.GenresResponse" + "$ref": "#/definitions/gucci.StoreDetailResponse" }, "msg": { "example": "OK", @@ -119488,14 +125302,14 @@ }, "type": "object" }, - "justwatch.monetizationTitlesResponseDoc": { + "gucci.storeSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/justwatch.MonetizationTitlesResponse" + "$ref": "#/definitions/gucci.StoreSearchResponse" }, "msg": { "example": "OK", @@ -119504,14 +125318,14 @@ }, "type": "object" }, - "justwatch.newTitlesResponseDoc": { + "gucci.storesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/justwatch.NewTitlesResponse" + "$ref": "#/definitions/gucci.StoresResponse" }, "msg": { "example": "OK", @@ -119520,14 +125334,14 @@ }, "type": "object" }, - "justwatch.popularResponseDoc": { + "gucci.suggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/justwatch.PopularResponse" + "$ref": "#/definitions/gucci.SuggestResponse" }, "msg": { "example": "OK", @@ -119536,110 +125350,199 @@ }, "type": "object" }, - "justwatch.providerTitlesResponseDoc": { + "gulfnews.AuthorArticle": { "properties": { - "code": { - "example": 200, - "type": "integer" + "summary": { + "type": "string" }, - "data": { - "$ref": "#/definitions/justwatch.ProviderTitlesResponse" + "title": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "justwatch.providersResponseDoc": { + "gulfnews.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/gulfnews.AuthorArticle" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/justwatch.ProvidersResponse" + "bio": { + "type": "string" }, - "msg": { - "example": "OK", + "job_title": { + "type": "string" + }, + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "justwatch.searchResponseDoc": { + "hbr.ArticleResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/justwatch.SearchResponse" + "body": { + "type": "string" }, - "msg": { - "example": "OK", + "description": { + "type": "string" + }, + "from_magazine": { + "type": "boolean" + }, + "image_url": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "justwatch.seasonByIDResponseDoc": { + "hbr.CategoriesResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "groups": { + "items": { + "$ref": "#/definitions/hbr.CategoryGroup" + }, + "type": "array" + } + }, + "type": "object" + }, + "hbr.Category": { + "properties": { + "name": { + "type": "string" }, - "data": { - "$ref": "#/definitions/justwatch.SeasonByIDResponse" + "slug": { + "type": "string" + } + }, + "type": "object" + }, + "hbr.CategoryGroup": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/hbr.Category" + }, + "type": "array" }, - "msg": { - "example": "OK", + "name": { "type": "string" } }, "type": "object" }, - "justwatch.seasonEpisodesResponseDoc": { + "hbr.HeadlineItem": { "properties": { - "code": { - "example": 200, - "type": "integer" + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/justwatch.SeasonEpisodesResponse" + "content_type": { + "type": "string" }, - "msg": { - "example": "OK", + "image_url": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "topic": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "justwatch.showSeasonsResponseDoc": { + "hbr.HeadlinesResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/hbr.HeadlineItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "hbr.TopicItem": { + "properties": { + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/justwatch.ShowSeasonsResponse" + "description": { + "type": "string" }, - "msg": { - "example": "OK", + "from_magazine": { + "type": "boolean" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "justwatch.similarTitlesResponseDoc": { + "hbr.TopicResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/hbr.TopicItem" + }, + "type": "array" + }, + "topic": { + "type": "string" + } + }, + "type": "object" + }, + "hbr.articleResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/justwatch.SimilarTitlesResponse" + "$ref": "#/definitions/hbr.ArticleResponse" }, "msg": { "example": "OK", @@ -119648,14 +125551,14 @@ }, "type": "object" }, - "justwatch.titleMediaResponseDoc": { + "hbr.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/justwatch.TitleMediaResponse" + "$ref": "#/definitions/hbr.CategoriesResponse" }, "msg": { "example": "OK", @@ -119664,14 +125567,14 @@ }, "type": "object" }, - "justwatch.titleOffersResponseDoc": { + "hbr.headlinesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/justwatch.TitleOffersResponse" + "$ref": "#/definitions/hbr.HeadlinesResponse" }, "msg": { "example": "OK", @@ -119680,14 +125583,14 @@ }, "type": "object" }, - "justwatch.titleResponseDoc": { + "hbr.topicResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/justwatch.TitleResponse" + "$ref": "#/definitions/hbr.TopicResponse" }, "msg": { "example": "OK", @@ -119696,2224 +125599,1947 @@ }, "type": "object" }, - "kalshi.BatchMarketHistoryResponse": { + "healthgrades.AwardHospital": { "properties": { - "end_ts": { - "description": "End of the requested range, in Unix seconds.", - "example": 1780804800, - "type": "integer" - }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:00:00Z", - "type": "string" - }, - "include_latest_before_start": { - "description": "Whether the latest candle before `start_ts` was requested.", - "example": false, - "type": "boolean" + "address": { + "$ref": "#/definitions/healthgrades.FacilityAddress" }, - "markets": { - "description": "Candlestick history for each requested market.", + "awards": { "items": { - "$ref": "#/definitions/kalshi.MarketHistoryResponse" + "$ref": "#/definitions/healthgrades.HospitalAwardEntry" }, "type": "array" }, - "period_interval": { - "description": "Length of each candlestick period, in minutes.", - "example": 1440, + "description": { + "type": "string" + }, + "distance_miles": { + "type": "number" + }, + "id": { + "type": "string" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "name": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "healthgrades.CommunityAnswer": { + "properties": { + "no": { "type": "integer" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://external-api.kalshi.com/trade-api/v2/markets/candlesticks", + "question": { "type": "string" }, - "start_ts": { - "description": "Start of the requested range, in Unix seconds.", - "example": 1780286400, + "yes": { "type": "integer" + } + }, + "type": "object" + }, + "healthgrades.FacilityAddress": { + "properties": { + "city": { + "type": "string" }, - "tickers": { - "description": "Tickers of the Kalshi markets that were requested.", - "example": [ - "KXELONMARS-99" - ], - "items": { - "type": "string" - }, - "type": "array" + "postal_code": { + "type": "string" + }, + "state": { + "type": "string" + }, + "street": { + "type": "string" } }, "type": "object" }, - "kalshi.BatchOrderBookResponse": { + "healthgrades.FacilityFAQ": { "properties": { - "books": { - "description": "Order book for each requested market.", + "answer": { + "type": "string" + }, + "question": { + "type": "string" + } + }, + "type": "object" + }, + "healthgrades.FacilityFiltersResponse": { + "properties": { + "filters": { "items": { - "$ref": "#/definitions/kalshi.OrderBookResponse" + "$ref": "#/definitions/healthgrades.PhysicianFilterGroup" }, "type": "array" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:00:00Z", - "type": "string" - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://external-api.kalshi.com/trade-api/v2/markets/orderbooks", + "query": { "type": "string" }, - "tickers": { - "description": "Tickers of the Kalshi markets that were requested.", - "example": [ - "KXELONMARS-99" - ], + "sorts": { "items": { - "type": "string" + "$ref": "#/definitions/healthgrades.PhysicianSortOption" }, "type": "array" + }, + "type": { + "type": "string" + }, + "where": { + "type": "string" } }, "type": "object" }, - "kalshi.CandleOHLC": { + "healthgrades.FacilityHours": { "properties": { - "close": { - "description": "Value at the end of the period, in US dollars per contract.", - "example": 0.08, - "type": "number" - }, - "high": { - "description": "Highest value during the period, in US dollars per contract.", - "example": 0.11, - "type": "number" - }, - "low": { - "description": "Lowest value during the period, in US dollars per contract.", - "example": 0.08, - "type": "number" - }, - "mean": { - "description": "Average value over the period, in US dollars per contract.", - "example": 0.1014, - "type": "number" - }, - "open": { - "description": "Value at the start of the period, in US dollars per contract.", - "example": 0.11, - "type": "number" + "day": { + "type": "string" }, - "previous": { - "description": "Last value from before the period, in US dollars per contract.", - "example": 0.08, - "type": "number" + "hours": { + "type": "string" } }, "type": "object" }, - "kalshi.Competition": { + "healthgrades.FacilityLocation": { "properties": { - "id": { - "description": "Kalshi identifier of the competition.", + "address": { "type": "string" }, "name": { - "description": "Name of the competition.", + "type": "string" + }, + "phone": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "kalshi.EventHistoryResponse": { + "healthgrades.FacilityProvider": { "properties": { - "adjusted_end_ts": { - "description": "End of the range after Kalshi adjusted it, in Unix seconds.", - "example": 1780804800, - "type": "integer" + "name": { + "type": "string" }, - "end_ts": { - "description": "End of the requested range, in Unix seconds.", - "example": 1780804800, + "rating": { + "type": "number" + }, + "rating_count": { "type": "integer" }, - "event_ticker": { - "description": "Ticker of the Kalshi event the history is for.", - "example": "KXELONMARS-99", + "specialty": { "type": "string" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:00:00Z", + "url": { "type": "string" + } + }, + "type": "object" + }, + "healthgrades.FacilityResponse": { + "properties": { + "address": { + "$ref": "#/definitions/healthgrades.FacilityAddress" }, - "include_latest_before_start": { - "description": "Whether the latest candle before `start_ts` was requested.", - "example": false, - "type": "boolean" - }, - "market_tickers": { - "description": "Tickers of the markets in the event that have history.", - "example": [ - "KXELONMARS-99" - ], + "categories": { "items": { "type": "string" }, "type": "array" }, - "markets": { - "description": "Candlestick history for each market in the event.", + "community_answers": { "items": { - "$ref": "#/definitions/kalshi.MarketHistoryResponse" + "$ref": "#/definitions/healthgrades.CommunityAnswer" }, "type": "array" }, - "period_interval": { - "description": "Length of each candlestick period, in minutes.", - "example": 1440, - "type": "integer" - }, - "series_ticker": { - "description": "Ticker of the series the event belongs to.", - "example": "KXELONMARS", + "description": { "type": "string" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://external-api.kalshi.com/trade-api/v2/series/KXELONMARS/events/KXELONMARS-99/candlesticks", - "type": "string" + "faqs": { + "items": { + "$ref": "#/definitions/healthgrades.FacilityFAQ" + }, + "type": "array" }, - "start_ts": { - "description": "Start of the requested range, in Unix seconds.", - "example": 1780286400, - "type": "integer" - } - }, - "type": "object" - }, - "kalshi.EventMetadataResponse": { - "properties": { - "competition": { - "allOf": [ - { - "$ref": "#/definitions/kalshi.Competition" - } - ], - "description": "Competition the event is part of. Omitted when the event has none." + "hours": { + "items": { + "$ref": "#/definitions/healthgrades.FacilityHours" + }, + "type": "array" }, - "competition_scope": { - "description": "Scope of the competition the event is part of, as Kalshi labels it.", - "type": "string" + "languages": { + "items": { + "type": "string" + }, + "type": "array" }, - "event_ticker": { - "description": "Ticker of the Kalshi event the metadata belongs to.", - "example": "KXELONMARS-99", - "type": "string" + "latitude": { + "type": "number" }, - "featured_image_url": { - "description": "URL of the event's featured image.", - "type": "string" + "locations": { + "items": { + "$ref": "#/definitions/healthgrades.FacilityLocation" + }, + "type": "array" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:00:00Z", + "longitude": { + "type": "number" + }, + "medical_services": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { "type": "string" }, - "image_url": { - "description": "URL of the event's image.", - "example": "https://kalshi-public-docs.s3.amazonaws.com/series-images-webp/KXELONMARS.webp", + "nearby": { + "items": { + "$ref": "#/definitions/healthgrades.NearbyFacility" + }, + "type": "array" + }, + "phone": { "type": "string" }, - "market_details": { - "description": "Display details for each market in the event.", + "providers": { "items": { - "$ref": "#/definitions/kalshi.MarketDetail" + "$ref": "#/definitions/healthgrades.FacilityProvider" }, "type": "array" }, - "settlement_sources": { - "description": "Sources Kalshi uses to settle the event's markets.", + "rating": { + "type": "number" + }, + "services": { "items": { - "$ref": "#/definitions/kalshi.SettlementSource" + "type": "string" }, "type": "array" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://external-api.kalshi.com/trade-api/v2/events/KXELONMARS-99/metadata", + "subtitle": { + "type": "string" + }, + "type": { + "enum": [ + "pharmacy", + "urgent_care", + "group_practice" + ], + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "kalshi.EventResponse": { + "healthgrades.FacilityResult": { "properties": { - "event": { - "allOf": [ - { - "$ref": "#/definitions/kalshi.EventRow" - } - ], - "description": "The Kalshi event that was requested." - }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:00:00Z", + "about": { "type": "string" }, - "markets": { - "description": "Markets that belong to the event.", + "affiliated_provider_count": { + "type": "integer" + }, + "awards": { "items": { - "$ref": "#/definitions/kalshi.MarketRow" + "type": "string" }, "type": "array" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://external-api.kalshi.com/trade-api/v2/events/KXELONMARS-99", + "city": { "type": "string" - } - }, - "type": "object" - }, - "kalshi.EventRow": { - "properties": { - "available_on_brokers": { - "description": "Whether the event's markets can be traded through Kalshi's broker partners.", - "example": false, - "type": "boolean" }, - "category": { - "description": "Kalshi category of the event, such as `World`.", - "example": "World", + "distance_miles": { + "type": "number" + }, + "five_star_ratings_count": { + "type": "integer" + }, + "id": { "type": "string" }, - "collateral_return_type": { - "description": "Collateral return type Kalshi assigns to the event, such as `MECNET`.", - "example": "MECNET", + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "name": { "type": "string" }, - "event_ticker": { - "description": "Kalshi ticker that identifies the event.", - "example": "KXELONMARS-99", + "phone": { "type": "string" }, - "last_updated": { - "description": "Time the event was last updated, in UTC (RFC 3339).", - "example": "2026-05-10T00:33:53Z", + "postal_code": { "type": "string" }, - "markets": { - "description": "Markets that belong to the event. Omitted when the response does not include them.", - "items": { - "$ref": "#/definitions/kalshi.MarketRow" - }, - "type": "array" + "ratings_count": { + "type": "integer" }, - "mutually_exclusive": { - "description": "Whether at most one market in the event can resolve to Yes.", - "example": false, - "type": "boolean" + "state": { + "type": "string" }, - "series_ticker": { - "description": "Ticker of the series the event belongs to.", - "example": "KXELONMARS", + "street": { "type": "string" }, - "strike_period": { - "description": "Strike period of the event, as Kalshi labels it.", + "type": { "type": "string" }, - "sub_title": { - "description": "Short qualifier shown under the event title, such as a date or deadline.", - "example": "Before 2099", + "type_code": { "type": "string" }, - "title": { - "description": "Event title as shown on Kalshi.", - "example": "Will Elon Musk visit Mars in his lifetime?", + "url": { "type": "string" } }, "type": "object" }, - "kalshi.EventsResponse": { + "healthgrades.FacilitySearchResponse": { "properties": { - "cursor": { - "description": "Cursor to pass in the next request to get the following page. Omitted when Kalshi returns none.", - "type": "string" + "facilities": { + "items": { + "$ref": "#/definitions/healthgrades.FacilityResult" + }, + "type": "array" }, - "events": { - "description": "Kalshi events on this page.", + "filters": { "items": { - "$ref": "#/definitions/kalshi.EventRow" + "$ref": "#/definitions/healthgrades.PhysicianFilterGroup" }, "type": "array" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:00:00Z", - "type": "string" + "page": { + "type": "integer" }, - "limit": { - "description": "Number of events requested per page.", - "example": 25, + "page_size": { "type": "integer" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://external-api.kalshi.com/trade-api/v2/events?limit=25", - "type": "string" - } - }, - "type": "object" - }, - "kalshi.ExchangeHoursBlock": { - "properties": { - "close_time": { - "example": "00:00", + "query": { "type": "string" }, - "open_time": { - "example": "00:00", - "type": "string" - } - }, - "type": "object" - }, - "kalshi.ExchangeMaintenanceWindow": { - "properties": { - "end_time": { + "sort": { "type": "string" }, - "reason": { + "sorts": { + "items": { + "$ref": "#/definitions/healthgrades.PhysicianSortOption" + }, + "type": "array" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "type": { "type": "string" }, - "start_time": { + "where": { "type": "string" } }, "type": "object" }, - "kalshi.ExchangeScheduleResponse": { + "healthgrades.HealthArticleRef": { "properties": { - "fetched_at": { - "example": "2026-06-07T14:00:00Z", + "last_modified": { "type": "string" }, - "maintenance_windows": { - "items": { - "$ref": "#/definitions/kalshi.ExchangeMaintenanceWindow" - }, - "type": "array" + "slug": { + "type": "string" }, - "source_url": { - "example": "https://external-api.kalshi.com/trade-api/v2/exchange/schedule", + "topic": { "type": "string" }, - "standard_hours": { - "items": { - "$ref": "#/definitions/kalshi.ExchangeStandardHours" - }, - "type": "array" + "url": { + "type": "string" } }, "type": "object" }, - "kalshi.ExchangeStandardHours": { + "healthgrades.HealthArticleResponse": { "properties": { - "end_time": { - "example": "2200-12-01T00:00:00Z", - "type": "string" - }, - "friday": { + "authors": { "items": { - "$ref": "#/definitions/kalshi.ExchangeHoursBlock" + "type": "string" }, "type": "array" }, - "monday": { + "conditions": { "items": { - "$ref": "#/definitions/kalshi.ExchangeHoursBlock" + "type": "string" }, "type": "array" }, - "saturday": { - "items": { - "$ref": "#/definitions/kalshi.ExchangeHoursBlock" - }, - "type": "array" + "date_modified": { + "type": "string" }, - "start_time": { - "example": "2024-12-01T00:00:00Z", + "date_published": { "type": "string" }, - "sunday": { + "description": { + "type": "string" + }, + "headline": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "label": { + "type": "string" + }, + "reviewed_by": { "items": { - "$ref": "#/definitions/kalshi.ExchangeHoursBlock" + "type": "string" }, "type": "array" }, - "thursday": { + "sections": { "items": { - "$ref": "#/definitions/kalshi.ExchangeHoursBlock" + "$ref": "#/definitions/healthgrades.HealthArticleSection" }, "type": "array" }, - "tuesday": { + "slug": { + "type": "string" + }, + "topic": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "healthgrades.HealthArticleSection": { + "properties": { + "lists": { "items": { - "$ref": "#/definitions/kalshi.ExchangeHoursBlock" + "items": { + "type": "string" + }, + "type": "array" }, "type": "array" }, - "wednesday": { + "paragraphs": { "items": { - "$ref": "#/definitions/kalshi.ExchangeHoursBlock" + "type": "string" }, "type": "array" + }, + "title": { + "type": "string" } }, "type": "object" }, - "kalshi.ExchangeStatusResponse": { + "healthgrades.HealthArticlesResponse": { "properties": { - "exchange_active": { - "example": true, - "type": "boolean" + "articles": { + "items": { + "$ref": "#/definitions/healthgrades.HealthArticleRef" + }, + "type": "array" }, - "fetched_at": { - "example": "2026-06-07T14:00:00Z", - "type": "string" + "page": { + "type": "integer" }, - "source_url": { - "example": "https://external-api.kalshi.com/trade-api/v2/exchange/status", + "page_size": { + "type": "integer" + }, + "topic": { "type": "string" }, - "trading_active": { - "example": true, - "type": "boolean" + "total": { + "type": "integer" + }, + "total_pages": { + "type": "integer" } }, "type": "object" }, - "kalshi.HistoricalCutoffResponse": { + "healthgrades.HealthTopic": { "properties": { - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:00:00Z", - "type": "string" + "article_count": { + "type": "integer" }, - "market_settled_at": { - "description": "Cutoff time for settled markets, in UTC (RFC 3339). Markets settled before it are served by the historical endpoints.", - "example": "2026-04-08T00:00:00Z", + "last_modified": { "type": "string" }, - "orders_updated_at": { - "description": "Cutoff time for order updates, in UTC (RFC 3339).", - "example": "2026-04-08T00:00:00Z", + "slug": { "type": "string" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://external-api.kalshi.com/trade-api/v2/historical/cutoff", + "url": { "type": "string" + } + }, + "type": "object" + }, + "healthgrades.HealthTopicsResponse": { + "properties": { + "topics": { + "items": { + "$ref": "#/definitions/healthgrades.HealthTopic" + }, + "type": "array" }, - "trades_created_at": { - "description": "Cutoff time for trades, in UTC (RFC 3339). Trades created before it are served by the historical trades endpoint.", - "example": "2026-04-08T00:00:00Z", - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "kalshi.HistoricalMarketResponse": { + "healthgrades.HospitalAward": { "properties": { - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:00:00Z", + "category": { "type": "string" }, - "market": { - "allOf": [ - { - "$ref": "#/definitions/kalshi.MarketRow" - } - ], - "description": "The historical Kalshi market that was requested." - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://external-api.kalshi.com/trade-api/v2/historical/markets/KXMVECROSSCATEGORY-S2026144E784A147-ED367B84557", - "type": "string" - } - }, - "type": "object" - }, - "kalshi.HistoricalMarketsResponse": { - "properties": { - "cursor": { - "description": "Cursor to pass in the next request to get the following page. Omitted when Kalshi returns none.", + "description": { "type": "string" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:00:00Z", + "name": { "type": "string" }, - "limit": { - "description": "Number of markets requested per page.", - "example": 25, - "type": "integer" - }, - "markets": { - "description": "Historical Kalshi markets on this page.", + "years": { "items": { - "$ref": "#/definitions/kalshi.MarketRow" + "type": "integer" }, "type": "array" - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://external-api.kalshi.com/trade-api/v2/historical/markets?limit=25", - "type": "string" } }, "type": "object" }, - "kalshi.HistoricalTradesResponse": { + "healthgrades.HospitalAwardEntry": { "properties": { - "cursor": { - "description": "Cursor to pass in the next request to get the following page. Omitted when Kalshi returns none.", - "type": "string" - }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:00:00Z", + "code": { "type": "string" }, - "limit": { - "description": "Number of trades requested per page.", - "example": 25, - "type": "integer" - }, - "max_ts": { - "description": "Latest trade creation time that was requested, in Unix seconds.", - "example": 1775689200, - "type": "integer" - }, - "min_ts": { - "description": "Earliest trade creation time that was requested, in Unix seconds.", - "example": 1775602800, - "type": "integer" - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://external-api.kalshi.com/trade-api/v2/historical/trades?limit=25", - "type": "string" + "matched": { + "type": "boolean" }, - "ticker": { - "description": "Market ticker the trades were filtered by. Omitted when no ticker filter was used.", - "example": "KXMVECROSSCATEGORY-S2026144E784A147-ED367B84557", + "name": { "type": "string" }, - "trades": { - "description": "Historical trades on this page.", + "years": { "items": { - "$ref": "#/definitions/kalshi.TradeRow" + "type": "integer" }, "type": "array" } }, "type": "object" }, - "kalshi.MarketCandlestick": { + "healthgrades.HospitalAwardFiltersResponse": { "properties": { - "end_period_at": { - "description": "End of the candlestick period, in UTC (RFC 3339).", - "example": "2026-06-01T00:00:00Z", + "award": { "type": "string" }, - "end_period_ts": { - "description": "End of the candlestick period, in Unix seconds.", - "example": 1780286400, - "type": "integer" - }, - "open_interest": { - "description": "Number of contracts open at the end of the period.", - "example": 32980.77, - "type": "number" - }, - "price": { - "allOf": [ - { - "$ref": "#/definitions/kalshi.CandleOHLC" - } - ], - "description": "Open, high, low, close, mean and previous trade price for the period, in US dollars per contract." - }, - "volume": { - "description": "Number of contracts traded during the period.", - "example": 7, - "type": "number" - }, - "yes_ask": { - "allOf": [ - { - "$ref": "#/definitions/kalshi.CandleOHLC" - } - ], - "description": "Open, high, low, close, mean and previous Yes ask price for the period, in US dollars per contract." + "filters": { + "items": { + "$ref": "#/definitions/healthgrades.PhysicianFilterGroup" + }, + "type": "array" }, - "yes_bid": { - "allOf": [ - { - "$ref": "#/definitions/kalshi.CandleOHLC" - } - ], - "description": "Open, high, low, close, mean and previous Yes bid price for the period, in US dollars per contract." + "sorts": { + "items": { + "$ref": "#/definitions/healthgrades.PhysicianSortOption" + }, + "type": "array" } }, "type": "object" }, - "kalshi.MarketDetail": { + "healthgrades.HospitalAwardsResponse": { "properties": { - "color_code": { - "description": "Display colour of the market on Kalshi, as a hex code.", - "example": "#AA00FF", + "award": { + "enum": [ + "americas-best-hospitals", + "specialty-excellence-americas-best-care", + "patient-safety-excellence-award", + "outstanding-patient-experience-award", + "ob-gyn-care-excellence-awards", + "state-rankings" + ], "type": "string" }, - "image_url": { - "description": "URL of the market's image.", + "city": { "type": "string" }, - "market_ticker": { - "description": "Ticker of the market the details belong to.", - "example": "KXELONMARS-99", - "type": "string" - } - }, - "type": "object" - }, - "kalshi.MarketHistoryResponse": { - "properties": { - "candlesticks": { - "description": "Price candlesticks for the market, one per period.", + "hospitals": { "items": { - "$ref": "#/definitions/kalshi.MarketCandlestick" + "$ref": "#/definitions/healthgrades.AwardHospital" }, "type": "array" }, - "end_ts": { - "description": "End of the requested range, in Unix seconds.", - "example": 1780804800, + "page": { "type": "integer" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:00:00Z", - "type": "string" - }, - "include_latest_before_start": { - "description": "Whether the latest candle before `start_ts` was requested.", - "example": false, - "type": "boolean" - }, - "period_interval": { - "description": "Length of each candlestick period, in minutes.", - "example": 1440, + "page_size": { "type": "integer" }, - "series_ticker": { - "description": "Ticker of the series the market belongs to.", - "example": "KXELONMARS", + "region": { "type": "string" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://external-api.kalshi.com/trade-api/v2/series/KXELONMARS/markets/KXELONMARS-99/candlesticks", + "sort": { + "enum": [ + "name", + "distance" + ], "type": "string" }, - "start_ts": { - "description": "Start of the requested range, in Unix seconds.", - "example": 1780286400, + "title": { + "type": "string" + }, + "total": { "type": "integer" }, - "ticker": { - "description": "Ticker of the Kalshi market the history is for.", - "example": "KXELONMARS-99", + "total_pages": { + "type": "integer" + }, + "year": { "type": "string" } }, "type": "object" }, - "kalshi.MarketResponse": { + "healthgrades.HospitalClinicalRating": { "properties": { - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:00:00Z", + "measure": { "type": "string" }, - "market": { - "allOf": [ - { - "$ref": "#/definitions/kalshi.MarketRow" - } - ], - "description": "The Kalshi market that was requested." + "procedure_or_condition": { + "type": "string" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://external-api.kalshi.com/trade-api/v2/markets/KXELONMARS-99", + "rating": { + "description": "Rating is Healthgrades' outcome label, for example \"Better than\nExpected\", \"As Expected\", or \"Worse than Expected\" (returned as data).", + "type": "string" + }, + "stars": { + "type": "integer" + }, + "type": { + "description": "Type is the rating family, for example \"Complication Based Ratings\" or\n\"Mortality Based Ratings\" (observed; returned as data).", "type": "string" } }, "type": "object" }, - "kalshi.MarketRow": { + "healthgrades.HospitalPatientExperience": { "properties": { - "close_time": { - "description": "Time trading closes, in UTC (RFC 3339).", - "example": "2099-08-01T04:59:00Z", + "comparison": { "type": "string" }, - "event_ticker": { - "description": "Ticker of the event the market belongs to.", - "example": "KXELONMARS-99", + "measure": { "type": "string" }, - "expiration_time": { - "description": "Time the market expires, in UTC (RFC 3339).", - "example": "2099-08-08T15:00:00Z", + "percent": { + "type": "integer" + } + }, + "type": "object" + }, + "healthgrades.HospitalResponse": { + "properties": { + "address": { "type": "string" }, - "last_price": { - "description": "Price of the most recent trade, in US dollars per contract.", - "example": 0.08, - "type": "number" + "awards": { + "items": { + "$ref": "#/definitions/healthgrades.HospitalAward" + }, + "type": "array" }, - "liquidity": { - "description": "Market liquidity, in US dollars.", - "example": 0, - "type": "number" + "clinical_ratings": { + "items": { + "$ref": "#/definitions/healthgrades.HospitalServiceLine" + }, + "type": "array" }, - "market_type": { - "description": "Market type, such as `binary`.", - "example": "binary", + "description": { "type": "string" }, - "no_ask": { - "description": "Lowest price asked for a No contract, in US dollars.", - "example": 0.92, - "type": "number" - }, - "no_bid": { - "description": "Highest price offered for a No contract, in US dollars.", - "example": 0.9, - "type": "number" + "name": { + "type": "string" }, - "open_interest": { - "description": "Number of contracts currently open in the market.", - "example": 32773.57, - "type": "number" + "patient_experience": { + "items": { + "$ref": "#/definitions/healthgrades.HospitalPatientExperience" + }, + "type": "array" }, - "open_time": { - "description": "Time trading opened, in UTC (RFC 3339).", - "example": "2025-08-28T20:45:00Z", + "phone": { "type": "string" }, - "previous_price": { - "description": "Earlier reference price of the market, in US dollars per contract.", - "example": 0.1, - "type": "number" - }, - "response_price_unit": { - "description": "Price unit label Kalshi attaches to the market, such as `usd_cent`.", - "example": "usd_cent", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "healthgrades.HospitalServiceLine": { + "properties": { + "name": { "type": "string" }, - "result": { - "description": "Outcome the market settled on. Empty or omitted until it settles.", + "ratings": { + "items": { + "$ref": "#/definitions/healthgrades.HospitalClinicalRating" + }, + "type": "array" + } + }, + "type": "object" + }, + "healthgrades.NearbyFacility": { + "properties": { + "address": { "type": "string" }, - "rules_primary": { - "description": "Primary rules text that governs how the market settles.", + "name": { "type": "string" }, "status": { - "description": "Market status as Kalshi reports it, such as `active`.", - "example": "active", "type": "string" }, - "sub_title": { - "description": "Short label of the outcome the market covers, shown under the title.", - "example": "Mars", + "url": { "type": "string" - }, - "ticker": { - "description": "Kalshi ticker that identifies the market.", - "example": "KXELONMARS-99", + } + }, + "type": "object" + }, + "healthgrades.PhysicianFilterGroup": { + "properties": { + "label": { "type": "string" }, - "title": { - "description": "Market title as shown on Kalshi.", - "example": "Will Elon Musk visit Mars before Aug 1, 2099?", + "param": { "type": "string" }, - "volume": { - "description": "Total number of contracts traded in the market.", - "example": 94840.88, - "type": "number" - }, - "volume_24h": { - "description": "Number of contracts traded in the last 24 hours.", - "example": 16, - "type": "number" - }, - "yes_ask": { - "description": "Lowest price asked for a Yes contract, in US dollars.", - "example": 0.1, - "type": "number" - }, - "yes_bid": { - "description": "Highest price offered for a Yes contract, in US dollars.", - "example": 0.08, - "type": "number" + "values": { + "items": { + "$ref": "#/definitions/healthgrades.PhysicianFilterValue" + }, + "type": "array" } }, "type": "object" }, - "kalshi.MarketsResponse": { + "healthgrades.PhysicianFilterPlan": { "properties": { - "cursor": { - "description": "Cursor to pass in the next request to get the following page. Omitted when Kalshi returns none.", + "id": { "type": "string" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:00:00Z", + "name": { "type": "string" - }, - "limit": { - "description": "Number of markets requested per page.", - "example": 25, + } + }, + "type": "object" + }, + "healthgrades.PhysicianFilterValue": { + "properties": { + "count": { "type": "integer" }, - "markets": { - "description": "Kalshi markets on this page.", + "label": { + "type": "string" + }, + "plans": { "items": { - "$ref": "#/definitions/kalshi.MarketRow" + "$ref": "#/definitions/healthgrades.PhysicianFilterPlan" }, "type": "array" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://external-api.kalshi.com/trade-api/v2/markets?limit=25", + "selected": { + "type": "boolean" + }, + "value": { "type": "string" } }, "type": "object" }, - "kalshi.MultivariateEventsResponse": { + "healthgrades.PhysicianFiltersResponse": { "properties": { - "cursor": { - "description": "Cursor to pass in the next request to get the following page. Omitted when Kalshi returns none.", - "type": "string" - }, - "events": { - "description": "Kalshi multivariate events on this page.", + "filters": { "items": { - "$ref": "#/definitions/kalshi.EventRow" + "$ref": "#/definitions/healthgrades.PhysicianFilterGroup" }, "type": "array" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:00:00Z", + "query": { "type": "string" }, - "limit": { - "description": "Number of events requested per page.", - "example": 25, - "type": "integer" - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://external-api.kalshi.com/trade-api/v2/events/multivariate?limit=25", + "where": { "type": "string" } }, "type": "object" }, - "kalshi.OrderBookLevel": { + "healthgrades.PhysicianOffice": { "properties": { - "price": { - "description": "Price of the level, in US dollars per contract.", - "example": 0.08, + "city": { + "type": "string" + }, + "latitude": { "type": "number" }, - "size": { - "description": "Number of contracts resting at this price.", - "example": 185.72, + "longitude": { "type": "number" + }, + "name": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "state": { + "type": "string" + }, + "street": { + "type": "string" } }, "type": "object" }, - "kalshi.OrderBookResponse": { + "healthgrades.PhysicianPractice": { "properties": { - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:00:00Z", + "city": { "type": "string" }, - "no": { - "description": "Price levels on the No side of the book, highest price first.", - "items": { - "$ref": "#/definitions/kalshi.OrderBookLevel" - }, - "type": "array" + "country": { + "type": "string" }, - "raw_unit_hint": { - "description": "Unit of the level prices, always `dollars`.", - "example": "dollars", + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "name": { "type": "string" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://external-api.kalshi.com/trade-api/v2/markets/KXELONMARS-99/orderbook", + "postal_code": { "type": "string" }, - "ticker": { - "description": "Ticker of the Kalshi market the order book is for.", - "example": "KXELONMARS-99", + "region": { "type": "string" }, - "yes": { - "description": "Price levels on the Yes side of the book, highest price first.", - "items": { - "$ref": "#/definitions/kalshi.OrderBookLevel" - }, - "type": "array" + "street": { + "type": "string" } }, "type": "object" }, - "kalshi.SeriesDetailResponse": { + "healthgrades.PhysicianRating": { "properties": { - "fetched_at": { - "example": "2026-06-07T14:00:00Z", - "type": "string" - }, - "series": { - "$ref": "#/definitions/kalshi.SeriesRow" + "count": { + "type": "integer" }, - "source_url": { - "example": "https://external-api.kalshi.com/trade-api/v2/series/KXELONMARS", - "type": "string" + "score": { + "type": "number" } }, "type": "object" }, - "kalshi.SeriesResponse": { + "healthgrades.PhysicianResponse": { "properties": { - "cursor": { - "description": "Cursor returned by Kalshi with the series list. Omitted when Kalshi returns none.", + "awards": { + "items": { + "type": "string" + }, + "type": "array" + }, + "image_url": { "type": "string" }, - "fetched_at": { - "description": "Time the series list was last fetched from Kalshi, in UTC (RFC 3339).", - "example": "2026-06-07T14:00:00Z", + "name": { "type": "string" }, - "limit": { - "description": "Number of series requested.", - "example": 25, - "type": "integer" + "npi": { + "type": "string" }, - "series": { - "description": "Kalshi series in the response.", + "practices": { "items": { - "$ref": "#/definitions/kalshi.SeriesRow" + "$ref": "#/definitions/healthgrades.PhysicianPractice" }, "type": "array" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://external-api.kalshi.com/trade-api/v2/series?limit=25", + "profile_url": { "type": "string" + }, + "specialties": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "kalshi.SeriesRow": { + "healthgrades.PhysicianSearchResponse": { "properties": { - "category": { - "description": "Kalshi category of the series, such as `Politics`.", - "example": "Politics", - "type": "string" - }, - "contract_terms_url": { - "description": "Link to the series' contract terms document.", - "type": "string" - }, - "contract_url": { - "description": "Link to the series' contract document.", - "type": "string" + "filters": { + "items": { + "$ref": "#/definitions/healthgrades.PhysicianFilterGroup" + }, + "type": "array" }, - "fee_multiplier": { - "description": "Multiplier applied to the series' fee calculation.", - "example": 1, - "type": "number" + "page": { + "type": "integer" }, - "fee_type": { - "description": "Fee model Kalshi applies to the series, such as `quadratic`.", - "example": "quadratic", - "type": "string" + "page_size": { + "type": "integer" }, - "frequency": { - "description": "How often the series produces events, such as `custom`.", - "example": "custom", - "type": "string" + "physicians": { + "items": { + "$ref": "#/definitions/healthgrades.PhysicianSearchResult" + }, + "type": "array" }, - "last_updated": { - "description": "Time the series was last updated, in UTC (RFC 3339).", - "example": "2026-06-01T15:24:00Z", + "query": { "type": "string" }, - "series_ticker": { - "description": "Kalshi ticker that identifies the series.", - "example": "KXELONMARS", + "sort": { "type": "string" }, - "settlement_sources": { - "description": "Sources Kalshi uses to settle the series' markets.", + "sorts": { "items": { - "$ref": "#/definitions/kalshi.SettlementSource" + "$ref": "#/definitions/healthgrades.PhysicianSortOption" }, "type": "array" }, - "title": { - "description": "Series title as shown on Kalshi.", - "example": "Will Elon Musk visit Mars in his lifetime?", + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" + }, + "where": { "type": "string" } }, "type": "object" }, - "kalshi.SettlementSource": { + "healthgrades.PhysicianSearchResult": { "properties": { - "name": { - "description": "Name of the source used to settle markets, such as `The Guardian`.", - "example": "The Guardian", + "about": { "type": "string" }, - "url": { - "description": "Link to the settlement source's website.", - "example": "https://www.theguardian.com", - "type": "string" - } - }, - "type": "object" - }, - "kalshi.TradeRow": { - "properties": { - "count": { - "description": "Number of contracts traded.", - "example": 2, - "type": "number" + "accepts_new_patients": { + "type": "boolean" }, - "created_time": { - "description": "Time the trade was created, in UTC (RFC 3339).", - "example": "2026-06-07T07:23:05Z", - "type": "string" + "affiliated_hospital_ids": { + "items": { + "type": "string" + }, + "type": "array" }, - "created_ts": { - "description": "Time the trade was created, in Unix seconds.", - "example": 1780816985, + "age": { "type": "integer" }, - "is_block_trade": { - "description": "Whether the trade was a block trade.", - "example": false, - "type": "boolean" - }, - "no_price": { - "description": "Trade price of the No contract, in US dollars.", - "example": 0.91, + "distance_miles": { "type": "number" }, - "taker_book_side": { - "description": "Order book side of the taker's order, such as `bid` or `ask`.", - "example": "ask", + "gender": { "type": "string" }, - "taker_outcome_side": { - "description": "Outcome side of the taker's order, such as `yes` or `no`.", - "example": "no", + "id": { "type": "string" }, - "taker_side": { - "description": "Side the taker traded, `yes` or `no`.", - "example": "no", + "image_url": { "type": "string" }, - "ticker": { - "description": "Ticker of the market the trade happened in.", - "example": "KXELONMARS-99", + "insurers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { "type": "string" }, - "trade_id": { - "description": "Kalshi identifier of the trade.", - "example": "9126fe1f-7233-7c75-2c37-06ce7841bbe3", + "npi": { "type": "string" }, - "yes_price": { - "description": "Trade price of the Yes contract, in US dollars.", - "example": 0.09, - "type": "number" - } - }, - "type": "object" - }, - "kalshi.TradesResponse": { - "properties": { - "cursor": { - "description": "Cursor to pass in the next request to get the following page. Omitted when Kalshi returns none.", + "office": { + "$ref": "#/definitions/healthgrades.PhysicianOffice" + }, + "profile_url": { "type": "string" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:00:00Z", + "rating": { + "$ref": "#/definitions/healthgrades.PhysicianRating" + }, + "specialist_descriptions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "specialty": { "type": "string" }, - "limit": { - "description": "Number of trades requested per page.", - "example": 25, - "type": "integer" + "telehealth_available": { + "type": "boolean" }, - "max_ts": { - "description": "Latest trade creation time that was requested, in Unix seconds.", - "example": 1780873200, - "type": "integer" + "telehealth_only": { + "type": "boolean" }, - "min_ts": { - "description": "Earliest trade creation time that was requested, in Unix seconds.", - "example": 1780786800, + "years_experience": { "type": "integer" - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://external-api.kalshi.com/trade-api/v2/markets/trades?limit=25", + } + }, + "type": "object" + }, + "healthgrades.PhysicianSortOption": { + "properties": { + "key": { "type": "string" }, - "ticker": { - "description": "Market ticker the trades were filtered by. Omitted when no ticker filter was used.", - "example": "KXELONMARS-99", + "label": { "type": "string" - }, - "trades": { - "description": "Recent trades on this page.", + } + }, + "type": "object" + }, + "healthgrades.SpecialtiesResponse": { + "properties": { + "specialties": { "items": { - "$ref": "#/definitions/kalshi.TradeRow" + "$ref": "#/definitions/healthgrades.Specialty" }, "type": "array" } }, "type": "object" }, - "kalshi.batchMarketHistoryResponseDoc": { + "healthgrades.Specialty": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/kalshi.BatchMarketHistoryResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "kalshi.batchOrderBookResponseDoc": { + "healthgrades.Suggestion": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/kalshi.BatchOrderBookResponse" + "label": { + "type": "string" }, - "msg": { - "example": "OK", + "value": { "type": "string" } }, "type": "object" }, - "kalshi.eventHistoryResponseDoc": { + "healthgrades.SuggestionGroup": { "properties": { - "code": { - "example": 200, - "type": "integer" + "category": { + "type": "string" }, - "data": { - "$ref": "#/definitions/kalshi.EventHistoryResponse" + "suggestions": { + "items": { + "$ref": "#/definitions/healthgrades.Suggestion" + }, + "type": "array" }, - "msg": { - "example": "OK", + "title": { "type": "string" } }, "type": "object" }, - "kalshi.eventMetadataResponseDoc": { + "healthgrades.SuggestionResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/kalshi.EventMetadataResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "groups": { + "items": { + "$ref": "#/definitions/healthgrades.SuggestionGroup" + }, + "type": "array" } }, "type": "object" }, - "kalshi.eventResponseDoc": { + "healthgrades.facilityFiltersResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/kalshi.EventResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/healthgrades.FacilityFiltersResponse" } }, "type": "object" }, - "kalshi.eventsResponseDoc": { + "healthgrades.facilityResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/kalshi.EventsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/healthgrades.FacilityResponse" } }, "type": "object" }, - "kalshi.exchangeScheduleResponseDoc": { + "healthgrades.facilitySearchResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/kalshi.ExchangeScheduleResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/healthgrades.FacilitySearchResponse" } }, "type": "object" }, - "kalshi.exchangeStatusResponseDoc": { + "healthgrades.healthArticleResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/kalshi.ExchangeStatusResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/healthgrades.HealthArticleResponse" } }, "type": "object" }, - "kalshi.historicalCutoffResponseDoc": { + "healthgrades.healthArticlesResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/kalshi.HistoricalCutoffResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/healthgrades.HealthArticlesResponse" } }, "type": "object" }, - "kalshi.historicalMarketResponseDoc": { + "healthgrades.healthTopicsResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/kalshi.HistoricalMarketResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/healthgrades.HealthTopicsResponse" } }, "type": "object" }, - "kalshi.historicalMarketsResponseDoc": { + "healthgrades.hospitalAwardFiltersResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/kalshi.HistoricalMarketsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/healthgrades.HospitalAwardFiltersResponse" } }, "type": "object" }, - "kalshi.historicalTradesResponseDoc": { + "healthgrades.hospitalAwardsResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/kalshi.HistoricalTradesResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/healthgrades.HospitalAwardsResponse" } }, "type": "object" }, - "kalshi.marketHistoryResponseDoc": { + "healthgrades.hospitalResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/kalshi.MarketHistoryResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/healthgrades.HospitalResponse" } }, "type": "object" }, - "kalshi.marketResponseDoc": { + "healthgrades.physicianFiltersResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/kalshi.MarketResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/healthgrades.PhysicianFiltersResponse" } }, "type": "object" }, - "kalshi.marketsResponseDoc": { + "healthgrades.physicianResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/kalshi.MarketsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/healthgrades.PhysicianResponse" } }, "type": "object" }, - "kalshi.multivariateEventsResponseDoc": { + "healthgrades.physicianSearchResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/kalshi.MultivariateEventsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/healthgrades.PhysicianSearchResponse" } }, "type": "object" }, - "kalshi.orderBookResponseDoc": { + "healthgrades.specialtiesResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/kalshi.OrderBookResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/healthgrades.SpecialtiesResponse" } }, "type": "object" }, - "kalshi.seriesDetailResponseDoc": { + "healthgrades.suggestionsResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/kalshi.SeriesDetailResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/healthgrades.SuggestionResponse" } }, "type": "object" }, - "kalshi.seriesResponseDoc": { + "hermes.CatalogueProduct": { "properties": { - "code": { - "example": 200, - "type": "integer" + "last_modified": { + "type": "string" }, - "data": { - "$ref": "#/definitions/kalshi.SeriesResponse" + "product_id": { + "description": "ProductID is the identifier Hermès uses in the product URL. It is NOT\nthe same string as the sku returned by hermes-category/hermes-search --\nsee the type doc on ProductsResponse.", + "type": "string" }, - "msg": { - "example": "OK", + "slug": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "kalshi.tradesResponseDoc": { + "hermes.CategoriesResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/kalshi.TradesResponse" + "categories": { + "items": { + "$ref": "#/definitions/hermes.Category" + }, + "type": "array" }, - "msg": { - "example": "OK", + "locale": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "kfc.Address": { + "hermes.Category": { "properties": { - "address1": { - "example": "600 Terminal Drive", - "type": "string" + "children": { + "type": "integer" }, - "address2": { - "example": "Louisville International Airport - Pre Security", + "code": { "type": "string" }, - "city": { - "example": "Louisville", - "type": "string" + "depth": { + "type": "integer" }, - "country_code": { - "example": "US", + "name": { "type": "string" }, - "latitude": { - "example": 38.1857, - "type": "number" - }, - "longitude": { - "example": -85.7445, - "type": "number" - }, - "phone": { - "example": "+15023633000", + "parent_code": { "type": "string" }, - "postal_code": { - "example": "40209", + "path": { "type": "string" }, - "state": { - "example": "KY", + "url": { "type": "string" } }, "type": "object" }, - "kfc.DeliveryEstimateResponse": { + "hermes.CategoryResponse": { "properties": { - "delivery_provider": { - "example": "DOORDASH", + "code": { "type": "string" }, - "dropoff_at": { + "description": { "type": "string" }, - "fee": { - "allOf": [ - { - "$ref": "#/definitions/kfc.Money" - } - ], - "description": "Fee is the total delivery fee; Fees breaks it down by line item." - }, - "fees": { + "filters": { "items": { - "$ref": "#/definitions/kfc.DeliveryFeeLine" + "$ref": "#/definitions/hermes.Filter" }, "type": "array" }, - "fetched_at": { + "locale": { "type": "string" }, - "pickup_at": { + "name": { "type": "string" }, - "reason": { - "example": "Marketplace store is inactive", - "type": "string" + "page": { + "type": "integer" }, - "serviceable": { - "description": "Serviceable is true only when the upstream returned a real estimate.\nA false value with Reason populated covers every other case this\nfamily has seen live: the provider not enabled at this store, the\naddress being outside the delivery zone, or the upstream delivery\nmarketplace itself reporting the store inactive -- KFC's schema\nrepresents all of these as distinct typed results, not one boolean.", - "example": false, - "type": "boolean" + "page_size": { + "type": "integer" }, - "source_url": { + "path": { "type": "string" }, - "store_number": { - "example": "K750015", + "products": { + "items": { + "$ref": "#/definitions/hermes.Product" + }, + "type": "array" + }, + "sort": { "type": "string" - } - }, - "type": "object" - }, - "kfc.DeliveryFeeLine": { - "properties": { - "amount": { - "$ref": "#/definitions/kfc.Money" }, - "name": { - "example": "Delivery Fee", + "title": { "type": "string" }, - "type": { - "example": "DELIVERY", + "total": { + "type": "integer" + }, + "url": { "type": "string" } }, "type": "object" }, - "kfc.MenuCategory": { + "hermes.Filter": { "properties": { - "category_code": { - "example": "combos", + "attribute": { "type": "string" }, - "description": { - "example": "Combos", + "name": { "type": "string" }, - "items": { + "values": { "items": { - "$ref": "#/definitions/kfc.MenuItem" + "$ref": "#/definitions/hermes.FilterValue" }, "type": "array" + } + }, + "type": "object" + }, + "hermes.FilterValue": { + "properties": { + "count": { + "type": "integer" }, "name": { - "example": "Combos", + "type": "string" + }, + "value": { "type": "string" } }, "type": "object" }, - "kfc.MenuItem": { + "hermes.Product": { "properties": { - "code": { - "example": "chocolate-chunk-cookie", + "color": { "type": "string" }, - "description": { + "colorless": { + "type": "boolean" + }, + "currency": { "type": "string" }, - "image_url": { + "department_code": { "type": "string" }, - "name": { - "example": "Chocolate Chunk Cookie", + "division_code": { + "type": "string" + }, + "family_code": { "type": "string" }, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "in_stock": { + "type": "boolean" + }, + "in_store": { + "type": "boolean" + }, + "more_colors": { + "type": "boolean" + }, + "personalizable": { + "type": "boolean" + }, "price": { - "$ref": "#/definitions/kfc.Money" + "type": "number" }, - "type": { - "example": "product", + "price_type": { "type": "string" }, - "variant_code": { - "description": "VariantCode is the specific priced variant this item's Price reflects\n(present for type=product, whose price comes from its default\nvariant). It is the id GraphQL calls use to select a specific size/\nconfiguration; this family does not currently expose variant-level\nbrowsing beyond the default.", - "example": "VC_ChocolateChunkCookie|0|||||", + "product_code": { + "type": "string" + }, + "size": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "kfc.MenuResponse": { + "hermes.ProductResponse": { "properties": { + "care_instructions": { + "description": "CareInstructions, Gift and DeliveryReturns are Hermès' own HTML\nfragments, returned verbatim because their markup carries links and\nstructure that flattening to text would lose.", + "type": "string" + }, "categories": { "items": { - "$ref": "#/definitions/kfc.MenuCategory" + "type": "string" }, "type": "array" }, - "channel": { - "example": "WEB", + "color_name": { "type": "string" }, + "colors": { + "items": { + "type": "string" + }, + "type": "array" + }, "currency": { - "example": "USD", "type": "string" }, - "fetched_at": { + "delivery_and_returns": { "type": "string" }, - "item_count": { - "example": 52, - "type": "integer" - }, - "menu_id": { - "example": "845791b0-7bdb-4ff0-92f2-344a89aa4b57", + "department_code": { "type": "string" }, - "source_url": { + "description": { "type": "string" }, - "store_number": { - "example": "I824001", + "dimensions": { "type": "string" - } - }, - "type": "object" - }, - "kfc.Money": { - "properties": { - "amount": { - "example": 4.99, - "type": "number" }, - "amount_cents": { - "example": 499, - "type": "integer" - }, - "currency_code": { - "example": "USD", + "division_code": { "type": "string" - } - }, - "type": "object" - }, - "kfc.NearbyResponse": { - "properties": { - "count": { - "example": 20, - "type": "integer" }, - "fetched_at": { + "family_code": { "type": "string" }, - "has_more": { - "example": true, - "type": "boolean" + "gender": { + "items": { + "type": "string" + }, + "type": "array" }, - "source_url": { + "gift": { "type": "string" }, - "stores": { + "images": { "items": { - "$ref": "#/definitions/kfc.NearbyStore" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "kfc.NearbyStore": { - "properties": { - "accepting_online_orders": { - "example": true, + }, + "in_stock": { "type": "boolean" }, - "address": { - "$ref": "#/definitions/kfc.Address" + "in_store": { + "type": "boolean" }, - "archived": { - "example": false, + "locale": { + "type": "string" + }, + "made_in": { + "type": "string" + }, + "materials": { + "items": { + "type": "string" + }, + "type": "array" + }, + "personalizable": { "type": "boolean" }, - "distance_miles": { - "example": 1.408, + "price": { "type": "number" }, - "name": { - "example": "KFC 600 Terminal Drive", + "price_type": { "type": "string" }, - "store_number": { - "example": "I824001", + "product_code": { "type": "string" }, - "timezone": { - "example": "America/New_York", + "size": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" + }, + "variants": { + "$ref": "#/definitions/hermes.Variants" } }, "type": "object" }, - "kfc.OccasionHours": { + "hermes.ProductsResponse": { "properties": { - "enabled": { - "example": true, - "type": "boolean" + "limit": { + "type": "integer" }, - "occasion": { - "example": "DELIVERY", + "locale": { "type": "string" }, - "windows": { + "page": { + "type": "integer" + }, + "products": { "items": { - "$ref": "#/definitions/kfc.TimeWindow" + "$ref": "#/definitions/hermes.CatalogueProduct" }, "type": "array" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "kfc.Promotion": { + "hermes.RecommendationsResponse": { "properties": { - "automatic": { - "example": true, - "type": "boolean" + "locale": { + "type": "string" }, - "description": { + "shelves": { + "items": { + "$ref": "#/definitions/hermes.Shelf" + }, + "type": "array" + }, + "sku": { "type": "string" + } + }, + "type": "object" + }, + "hermes.SearchResponse": { + "properties": { + "filters": { + "items": { + "$ref": "#/definitions/hermes.Filter" + }, + "type": "array" }, - "display_name": { - "example": "50% off Chicken Sandwich", + "locale": { "type": "string" }, - "name": { - "example": "Digital-Q324 - 50% off Chicken Sandwich", + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "products": { + "items": { + "$ref": "#/definitions/hermes.Product" + }, + "type": "array" + }, + "query": { "type": "string" }, - "promotion_id": { - "example": "6815f409-5b1e-44dc-9f99-26b1c1a2699a", + "results_for": { + "description": "ResultsFor is the term Hermès actually searched for, which can differ\nfrom query when it applies its own spelling correction. Empty when\nupstream reports no correction.", "type": "string" }, - "redemption_codes": { - "description": "RedemptionCodes is populated from the public promotion's active code\nconnection. It gives callers a durable discovery path for\nPromotionByCode instead of requiring a guessed or stale code.", - "example": [ - "WALMART5DOLLARSOFF" - ], + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "hermes.Shelf": { + "properties": { + "name": { + "type": "string" + }, + "products": { "items": { - "type": "string" + "$ref": "#/definitions/hermes.Product" }, "type": "array" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "kfc.PromotionResponse": { + "hermes.Store": { "properties": { - "automatic": { - "example": true, + "appointment_in_store": { "type": "boolean" }, - "code_status": { + "city": { "type": "string" }, - "description": { + "continent": { "type": "string" }, - "display_name": { - "example": "50% off Chicken Sandwich", + "country": { "type": "string" }, - "effective_date": { + "country_code": { "type": "string" }, - "expiration_date": { + "id": { "type": "string" }, - "fetched_at": { + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "name": { "type": "string" }, - "group_status": { + "opening_hours": { "type": "string" }, - "name": { - "example": "Digital-Q324 - 50% off Chicken Sandwich", + "phone": { "type": "string" }, - "promotion_id": { - "example": "6815f409-5b1e-44dc-9f99-26b1c1a2699a", + "postal_code": { "type": "string" }, - "redemption_code": { - "description": "The fields below are populated only when looked up by\nserialized_code -- a serialized code carries its own usage metadata\ndistinct from the promotion it resolves to.", - "example": "WELCOME10", + "street": { "type": "string" }, - "redemption_codes": { - "description": "RedemptionCodes is populated from the public promotion's active code\nconnection. It gives callers a durable discovery path for\nPromotionByCode instead of requiring a guessed or stale code.", - "example": [ - "WALMART5DOLLARSOFF" - ], + "url": { + "type": "string" + } + }, + "type": "object" + }, + "hermes.StoresResponse": { + "properties": { + "locale": { + "type": "string" + }, + "stores": { "items": { - "type": "string" + "$ref": "#/definitions/hermes.Store" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "times_used": { - "example": 0, + "total": { "type": "integer" } }, "type": "object" }, - "kfc.PromotionsResponse": { + "hermes.SuggestResponse": { "properties": { - "count": { - "example": 15, - "type": "integer" + "categories": { + "items": { + "$ref": "#/definitions/hermes.SuggestedCategory" + }, + "type": "array" }, - "fetched_at": { + "locale": { "type": "string" }, - "promotions": { + "products": { "items": { - "$ref": "#/definitions/kfc.Promotion" + "$ref": "#/definitions/hermes.SuggestedProduct" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "store_number": { - "example": "I824001", + "query": { "type": "string" } }, "type": "object" }, - "kfc.Store": { + "hermes.SuggestedCategory": { "properties": { - "accepting_online_orders": { - "example": true, - "type": "boolean" + "code": { + "type": "string" }, - "address": { - "$ref": "#/definitions/kfc.Address" + "label": { + "type": "string" }, - "archived": { - "example": false, - "type": "boolean" + "results": { + "type": "integer" + } + }, + "type": "object" + }, + "hermes.SuggestedProduct": { + "properties": { + "image": { + "type": "string" }, - "name": { - "example": "KFC 600 Terminal Drive", + "label": { "type": "string" }, - "store_number": { - "example": "I824001", + "sku": { "type": "string" }, - "timezone": { - "example": "America/New_York", + "url": { "type": "string" } }, "type": "object" }, - "kfc.StoreResponse": { + "hermes.Variant": { "properties": { - "accepting_online_orders": { - "example": true, - "type": "boolean" + "color": { + "type": "string" }, - "address": { - "$ref": "#/definitions/kfc.Address" + "image": { + "type": "string" }, - "archived": { - "example": false, + "in_stock": { "type": "boolean" }, - "fetched_at": { - "type": "string" - }, - "hours": { - "description": "Hours is this restaurant's recurring open windows per order channel\n(occasion) -- CARRYOUT, DELIVERY, DINE_IN, DRIVE_THRU,\nCATERING_CARRYOUT. A restaurant that does not offer a given occasion\nat all omits it from this list.", - "items": { - "$ref": "#/definitions/kfc.OccasionHours" - }, - "type": "array" + "price": { + "type": "number" }, - "name": { - "example": "KFC 600 Terminal Drive", + "size": { "type": "string" }, - "source_url": { + "sku": { "type": "string" }, - "store_number": { - "example": "I824001", + "title": { "type": "string" }, - "timezone": { - "example": "America/New_York", + "url": { "type": "string" } }, "type": "object" }, - "kfc.StoresResponse": { + "hermes.Variants": { "properties": { - "count": { - "example": 5, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "has_more": { - "example": true, - "type": "boolean" - }, - "source_url": { - "type": "string" - }, - "stores": { + "colors": { "items": { - "$ref": "#/definitions/kfc.Store" + "$ref": "#/definitions/hermes.Variant" }, "type": "array" }, - "total_count": { - "description": "TotalCount is how many restaurants matched upstream; it can exceed\nCount when more results exist than max_results asked for.", - "example": 33, - "type": "integer" + "sizes": { + "items": { + "$ref": "#/definitions/hermes.Variant" + }, + "type": "array" } }, "type": "object" }, - "kfc.TimeWindow": { + "hermes.categoriesResponseDoc": { "properties": { - "blackout": { - "example": false, - "type": "boolean" - }, - "days": { - "example": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7 - ], - "items": { - "type": "integer" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "duration": { - "example": "09:00:00", - "type": "string" + "data": { + "$ref": "#/definitions/hermes.CategoriesResponse" }, - "start_time": { - "example": "10:00:00", + "msg": { + "example": "ok", "type": "string" } }, "type": "object" }, - "kfc.deliveryEstimateResponseDoc": { + "hermes.categoryResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kfc.DeliveryEstimateResponse" + "$ref": "#/definitions/hermes.CategoryResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "ok", + "type": "string" } }, "type": "object" }, - "kfc.menuResponseDoc": { + "hermes.productResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kfc.MenuResponse" + "$ref": "#/definitions/hermes.ProductResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "ok", + "type": "string" } }, "type": "object" }, - "kfc.nearbyResponseDoc": { + "hermes.productsResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kfc.NearbyResponse" + "$ref": "#/definitions/hermes.ProductsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "ok", + "type": "string" } }, "type": "object" }, - "kfc.promotionResponseDoc": { + "hermes.recommendationsResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kfc.PromotionResponse" + "$ref": "#/definitions/hermes.RecommendationsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "ok", + "type": "string" } }, "type": "object" }, - "kfc.promotionsResponseDoc": { + "hermes.searchResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kfc.PromotionsResponse" + "$ref": "#/definitions/hermes.SearchResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "ok", + "type": "string" } }, "type": "object" }, - "kfc.storeResponseDoc": { + "hermes.storesResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kfc.StoreResponse" + "$ref": "#/definitions/hermes.StoresResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "ok", + "type": "string" } }, "type": "object" }, - "kfc.storesResponseDoc": { + "hermes.suggestResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kfc.StoresResponse" + "$ref": "#/definitions/hermes.SuggestResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "ok", + "type": "string" } }, "type": "object" }, - "khaleejtimes.AuthorResponse": { + "hindustantimes.AuthorResponse": { "properties": { "articles": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/hindustantimes.HeadlineItem" }, "type": "array" }, "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "email": { "type": "string" }, - "image_url": { + "facebook_url": { "type": "string" }, - "name": { + "image_url": { "type": "string" }, - "slug": { + "linkedin_url": { "type": "string" }, - "total_articles": { - "type": "integer" + "name": { + "type": "string" }, - "twitter_handle": { + "twitter_url": { "type": "string" }, "url": { @@ -121922,67 +127548,71 @@ }, "type": "object" }, - "kick.CategoriesResponse": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/kick.Category" - }, - "type": "array" - } - }, - "type": "object" - }, - "kick.Category": { + "hindustantimes.HeadlineItem": { "properties": { - "icon": { + "author": { "type": "string" }, - "id": { - "type": "integer" + "image_url": { + "type": "string" }, - "name": { + "published_at": { "type": "string" }, - "slug": { + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "kick.CategoryHit": { + "hltv.Event": { "properties": { + "end_date": { + "type": "string" + }, "id": { "type": "integer" }, - "mature": { - "type": "boolean" + "location": { + "type": "string" }, "name": { "type": "string" }, - "slug": { + "prize_pool": { "type": "string" }, - "tags": { + "start_date": { + "type": "string" + }, + "status": { + "type": "string" + }, + "teams": { "items": { - "type": "string" + "$ref": "#/definitions/hltv.TeamRef" }, "type": "array" }, - "thumbnail_url": { + "type": { "type": "string" }, "url": { "type": "string" - }, - "viewers": { - "type": "integer" } }, "type": "object" }, - "kick.CategoryRef": { + "hltv.EventRef": { "properties": { "id": { "type": "integer" @@ -121990,457 +127620,318 @@ "name": { "type": "string" }, - "slug": { + "url": { "type": "string" } }, "type": "object" }, - "kick.ChannelChatroomResponse": { + "hltv.EventResponse": { "properties": { - "account_age": { - "$ref": "#/definitions/kick.ChatMode" + "end_date": { + "type": "string" }, - "chatroom_id": { + "id": { "type": "integer" }, - "emotes_only": { - "$ref": "#/definitions/kick.ChatMode" - }, - "followers_only": { - "$ref": "#/definitions/kick.ChatMode" - }, - "gifts_enabled": { - "type": "boolean" + "location": { + "type": "string" }, - "rules": { - "description": "Rules is the channel's chat rules text; empty when none are set.", + "name": { "type": "string" }, - "slow_mode": { - "$ref": "#/definitions/kick.ChatMode" + "prize_pool": { + "type": "string" }, - "slug": { + "start_date": { "type": "string" }, - "subscribers_only": { - "$ref": "#/definitions/kick.ChatMode" - } - }, - "type": "object" - }, - "kick.ChannelEmotesResponse": { - "properties": { - "channel": { - "items": { - "$ref": "#/definitions/kick.Emote" - }, - "type": "array" + "status": { + "type": "string" }, - "emoji": { - "items": { - "$ref": "#/definitions/kick.Emote" - }, - "type": "array" + "team_count": { + "type": "integer" }, - "global": { + "teams": { "items": { - "$ref": "#/definitions/kick.Emote" + "$ref": "#/definitions/hltv.EventTeam" }, "type": "array" }, - "slug": { + "url": { "type": "string" } }, "type": "object" }, - "kick.ChannelHit": { + "hltv.EventTeam": { "properties": { - "followers": { - "type": "integer" - }, "id": { "type": "integer" }, - "live": { - "type": "boolean" - }, - "profile_picture": { + "logo_url": { "type": "string" }, - "slug": { + "name": { "type": "string" }, - "url": { + "vrs_rank": { "type": "string" }, - "username": { + "world_rank": { "type": "string" - }, - "verified": { - "type": "boolean" } }, "type": "object" }, - "kick.ChannelLink": { + "hltv.EventsResponse": { "properties": { - "description": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "image_url": { - "type": "string" - }, - "kind": { - "description": "Kind is \"link\" for a panel with a URL and \"text\" for one that is only\na title and description.", - "type": "string" - }, - "order": { - "description": "Order is the position Kick shows the panel in; Kick numbers from 0 on\nsome channels and from 1 on others.", + "count": { "type": "integer" }, - "title": { - "type": "string" - }, - "url": { - "description": "URL is empty for a text panel.", - "type": "string" - } - }, - "type": "object" - }, - "kick.ChannelLinksResponse": { - "properties": { - "links": { + "events": { "items": { - "$ref": "#/definitions/kick.ChannelLink" + "$ref": "#/definitions/hltv.Event" }, "type": "array" - }, - "slug": { - "type": "string" } }, "type": "object" }, - "kick.ChannelRef": { + "hltv.LineupPlayer": { "properties": { "id": { "type": "integer" }, - "profile_picture": { + "nickname": { "type": "string" }, - "slug": { + "real_name": { "type": "string" }, - "url": { + "role": { "type": "string" }, - "username": { + "url": { "type": "string" - }, - "verified": { - "type": "boolean" } }, "type": "object" }, - "kick.ChannelResponse": { + "hltv.Match": { "properties": { - "affiliate": { - "type": "boolean" + "event": { + "$ref": "#/definitions/hltv.EventRef" }, - "banned": { + "format": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "lan": { "type": "boolean" }, - "banner_url": { + "region": { "type": "string" }, - "bio": { + "stage": { "type": "string" }, - "followers": { - "type": "integer" - }, - "id": { + "stars": { "type": "integer" }, - "live": { - "$ref": "#/definitions/kick.LiveStream" + "starts_at": { + "type": "string" }, - "profile_picture": { + "status": { "type": "string" }, - "recent_categories": { + "teams": { "items": { - "$ref": "#/definitions/kick.CategoryRef" + "$ref": "#/definitions/hltv.TeamRef" }, "type": "array" }, - "slug": { - "type": "string" - }, - "socials": { - "$ref": "#/definitions/kick.Socials" - }, - "subscription_enabled": { - "type": "boolean" - }, "url": { "type": "string" - }, - "username": { - "type": "string" - }, - "verified": { - "type": "boolean" - }, - "vod_enabled": { - "type": "boolean" } }, "type": "object" }, - "kick.ChannelStreamsResponse": { + "hltv.MatchLineup": { "properties": { - "slug": { - "type": "string" - }, - "streams": { + "players": { "items": { - "$ref": "#/definitions/kick.StreamSession" + "$ref": "#/definitions/hltv.LineupPlayer" }, "type": "array" + }, + "team": { + "$ref": "#/definitions/hltv.TeamRef" } }, "type": "object" }, - "kick.ChannelVideosResponse": { + "hltv.MatchMap": { "properties": { - "slug": { + "halves": { + "items": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "type": "array" + }, + "name": { "type": "string" }, - "videos": { + "picked_by": { + "type": "integer" + }, + "played": { + "type": "boolean" + }, + "score": { "items": { - "$ref": "#/definitions/kick.Video" + "type": "integer" }, "type": "array" + }, + "stats_id": { + "type": "integer" + }, + "stats_url": { + "type": "string" + }, + "winner": { + "type": "integer" } }, "type": "object" }, - "kick.ChatMode": { + "hltv.MatchMapStats": { "properties": { - "enabled": { - "type": "boolean" + "map_name": { + "type": "string" }, - "interval_seconds": { - "description": "IntervalSeconds is the delay between a viewer's messages, for slow mode.", - "type": "integer" + "rows": { + "items": { + "$ref": "#/definitions/hltv.MatchStatsRow" + }, + "type": "array" }, - "minutes": { - "description": "Minutes is the minimum follow time or account age, in minutes, for\nfollowers-only and account-age modes; zero for the others.", + "stats_id": { "type": "integer" } }, "type": "object" }, - "kick.Clip": { + "hltv.MatchResponse": { "properties": { - "category": { - "$ref": "#/definitions/kick.CategoryRef" - }, - "channel": { - "$ref": "#/definitions/kick.ChannelRef" - }, - "created_at": { + "date": { "type": "string" }, - "duration_seconds": { - "type": "integer" + "event": { + "$ref": "#/definitions/hltv.EventRef" }, - "id": { + "format": { "type": "string" }, - "likes": { + "id": { "type": "integer" }, - "mature": { + "lan": { "type": "boolean" }, - "started_at": { - "type": "string" + "lineups": { + "items": { + "$ref": "#/definitions/hltv.MatchLineup" + }, + "type": "array" }, - "thumbnail_url": { - "type": "string" + "map_stats": { + "items": { + "$ref": "#/definitions/hltv.MatchMapStats" + }, + "type": "array" }, - "title": { - "type": "string" + "maps": { + "items": { + "$ref": "#/definitions/hltv.MatchMap" + }, + "type": "array" }, - "url": { + "stage": { "type": "string" }, - "video_id": { + "stats": { + "items": { + "$ref": "#/definitions/hltv.MatchStatsRow" + }, + "type": "array" + }, + "status": { "type": "string" }, - "video_offset_seconds": { - "type": "integer" - }, - "views": { - "type": "integer" - } - }, - "type": "object" - }, - "kick.ClipResponse": { - "properties": { - "clip": { - "$ref": "#/definitions/kick.Clip" - } - }, - "type": "object" - }, - "kick.ClipsResponse": { - "properties": { - "category": { - "description": "Category is the category slug a category clip list was read for.", - "type": "string" - }, - "clips": { + "teams": { "items": { - "$ref": "#/definitions/kick.Clip" + "$ref": "#/definitions/hltv.MatchTeam" }, "type": "array" }, - "next_cursor": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "sort": { - "type": "string" - }, - "time": { - "type": "string" - } - }, - "type": "object" - }, - "kick.DirectoryStream": { - "properties": { - "category": { - "$ref": "#/definitions/kick.CategoryRef" - }, - "channel": { - "$ref": "#/definitions/kick.ChannelRef" - }, - "id": { - "type": "string" - }, - "language": { - "type": "string" - }, - "mature": { - "type": "boolean" - }, - "started_at": { + "url": { "type": "string" }, - "tags": { + "veto": { "items": { - "type": "string" + "$ref": "#/definitions/hltv.VetoEntry" }, "type": "array" - }, - "thumbnail_url": { - "type": "string" - }, - "title": { - "type": "string" - }, - "viewers": { - "type": "integer" } }, "type": "object" }, - "kick.DropCampaign": { + "hltv.MatchStatsRow": { "properties": { - "category": { - "$ref": "#/definitions/kick.CategoryRef" + "adr": { + "type": "number" }, - "channel_count": { + "deaths": { "type": "integer" }, - "channels": { - "items": { - "$ref": "#/definitions/kick.DropChannel" - }, - "type": "array" - }, - "ends_at": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { + "kast": { "type": "string" }, - "organization": { - "$ref": "#/definitions/kick.DropOrganization" - }, - "rewards": { - "items": { - "$ref": "#/definitions/kick.DropReward" - }, - "type": "array" - }, - "rule": { - "type": "string" + "kd_diff": { + "type": "integer" }, - "starts_at": { - "type": "string" + "kills": { + "type": "integer" }, - "status": { + "nickname": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "kick.DropChannel": { - "properties": { - "id": { + "player_id": { "type": "integer" }, - "profile_picture": { - "type": "string" - }, - "slug": { - "type": "string" + "rating": { + "type": "number" }, - "url": { + "swing": { "type": "string" }, - "username": { + "team": { "type": "string" } }, "type": "object" }, - "kick.DropOrganization": { + "hltv.MatchTeam": { "properties": { "id": { - "type": "string" + "type": "integer" }, "logo_url": { "type": "string" @@ -122448,314 +127939,184 @@ "name": { "type": "string" }, - "url": { - "type": "string" + "score": { + "type": "integer" } }, "type": "object" }, - "kick.DropReward": { + "hltv.MatchesResponse": { "properties": { - "category_id": { + "count": { "type": "integer" }, - "id": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "required_units": { - "description": "RequiredUnits is Kick's threshold for the reward. For the\n\"Watch to redeem\" campaigns it reads as watch time (60, 120, 180 ...);\nKick does not state the unit.", - "type": "integer" - } - }, - "type": "object" - }, - "kick.DropsResponse": { - "properties": { - "campaigns": { + "matches": { "items": { - "$ref": "#/definitions/kick.DropCampaign" + "$ref": "#/definitions/hltv.Match" }, "type": "array" - }, - "status": { - "type": "string" - }, - "total": { - "description": "Total is the number of campaigns Kick lists in all (active and\nexpired); Campaigns holds those matching Status.", - "type": "integer" } }, "type": "object" }, - "kick.Emote": { + "hltv.PlayerResponse": { "properties": { - "id": { - "type": "integer" - }, - "image_url": { + "age": { "type": "string" }, - "name": { + "country": { "type": "string" }, - "subscribers_only": { - "type": "boolean" - } - }, - "type": "object" - }, - "kick.Gift": { - "properties": { - "character_limit": { - "description": "CharacterLimit is the message length a level-up gift allows (0 = none).", - "type": "integer" - }, - "id": { + "date_of_birth": { "type": "string" }, - "kicks": { + "id": { "type": "integer" }, - "name": { + "nickname": { "type": "string" }, - "pinned_seconds": { - "description": "PinnedSeconds is how long a level-up gift pins its message in chat.", - "type": "integer" - }, - "tier": { - "description": "Tier is BASIC, MID or HIGHER; Type is BASIC or LEVEL_UP.", + "real_name": { "type": "string" }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "kick.GiftsResponse": { - "properties": { - "gifts": { + "role_stats": { "items": { - "$ref": "#/definitions/kick.Gift" + "$ref": "#/definitions/hltv.PlayerRoleStat" }, "type": "array" + }, + "team": { + "$ref": "#/definitions/hltv.TeamRef" + }, + "url": { + "type": "string" } }, "type": "object" }, - "kick.Language": { + "hltv.PlayerRoleStat": { "properties": { - "code": { + "name": { "type": "string" }, - "name": { + "value": { "type": "string" } }, "type": "object" }, - "kick.LanguagesResponse": { - "properties": { - "languages": { - "items": { - "$ref": "#/definitions/kick.Language" - }, - "type": "array" - } - }, - "type": "object" - }, - "kick.LiveStream": { + "hltv.RankingEntry": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/kick.CategoryRef" - }, - "type": "array" - }, - "id": { - "type": "integer" - }, - "language": { - "type": "string" - }, - "mature": { - "type": "boolean" - }, - "started_at": { + "change": { "type": "string" }, - "tags": { + "players": { "items": { - "type": "string" + "$ref": "#/definitions/hltv.RankingPlayer" }, "type": "array" }, - "thumbnail_url": { - "type": "string" - }, - "title": { - "type": "string" + "points": { + "type": "integer" }, - "viewers": { + "rank": { "type": "integer" + }, + "team": { + "$ref": "#/definitions/hltv.TeamRef" } }, "type": "object" }, - "kick.LivestreamsResponse": { + "hltv.RankingPlayer": { "properties": { - "category_id": { + "id": { "type": "integer" }, - "language": { - "type": "string" - }, - "livestreams": { - "items": { - "$ref": "#/definitions/kick.DirectoryStream" - }, - "type": "array" - }, - "next_cursor": { + "nickname": { "type": "string" }, - "sort": { + "url": { "type": "string" } }, "type": "object" }, - "kick.SearchCategoriesResponse": { + "hltv.RankingsResponse": { "properties": { - "categories": { + "countries": { "items": { - "$ref": "#/definitions/kick.CategoryHit" + "type": "string" }, "type": "array" }, - "query": { + "country": { "type": "string" - } - }, - "type": "object" - }, - "kick.SearchChannelsResponse": { - "properties": { - "channels": { + }, + "date": { + "type": "string" + }, + "entries": { "items": { - "$ref": "#/definitions/kick.ChannelHit" + "$ref": "#/definitions/hltv.RankingEntry" }, "type": "array" - }, - "query": { - "type": "string" } }, "type": "object" }, - "kick.Socials": { + "hltv.Result": { "properties": { - "discord": { - "type": "string" - }, - "facebook": { + "date": { "type": "string" }, - "instagram": { - "type": "string" + "event": { + "$ref": "#/definitions/hltv.EventRef" }, - "tiktok": { + "format": { "type": "string" }, - "twitter": { - "type": "string" + "match_id": { + "type": "integer" }, - "youtube": { - "type": "string" - } - }, - "type": "object" - }, - "kick.StreamSession": { - "properties": { - "categories": { + "score": { "items": { - "$ref": "#/definitions/kick.CategoryRef" + "type": "integer" }, "type": "array" }, - "duration_ms": { - "type": "integer" - }, - "id": { + "stars": { "type": "integer" }, - "language": { - "type": "string" - }, - "live": { - "type": "boolean" - }, - "mature": { - "type": "boolean" - }, - "started_at": { - "type": "string" - }, - "tags": { + "teams": { "items": { - "type": "string" + "$ref": "#/definitions/hltv.TeamRef" }, "type": "array" }, - "thumbnail_url": { - "type": "string" - }, - "title": { - "type": "string" - }, - "video_url": { - "type": "string" - }, - "video_uuid": { - "description": "VideoUUID, VideoViews and VideoURL describe the recording; empty when\nthe broadcast has none.", + "url": { "type": "string" }, - "video_views": { - "type": "integer" - }, - "viewer_count": { - "description": "ViewerCount is the viewer figure Kick reports for the broadcast; the\nupstream does not say whether it is a peak or an average.", + "winner": { "type": "integer" } }, "type": "object" }, - "kick.SubcategoriesResponse": { + "hltv.ResultsResponse": { "properties": { - "category": { - "type": "string" - }, - "limit": { + "next_offset": { "type": "integer" }, - "page": { + "offset": { "type": "integer" }, - "reachable": { + "per_page": { "type": "integer" }, - "subcategories": { + "results": { "items": { - "$ref": "#/definitions/kick.Subcategory" + "$ref": "#/definitions/hltv.Result" }, "type": "array" }, @@ -122765,237 +128126,177 @@ }, "type": "object" }, - "kick.Subcategory": { + "hltv.RosterMember": { "properties": { - "banner_url": { - "type": "string" - }, - "description": { - "type": "string" - }, - "followers": { - "type": "integer" - }, "id": { "type": "integer" }, - "mature": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "parent_id": { - "type": "integer" - }, - "parent_name": { + "nickname": { "type": "string" }, - "parent_slug": { + "real_name": { "type": "string" }, - "slug": { + "role": { "type": "string" }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, "url": { "type": "string" - }, - "viewers": { - "type": "integer" - } - }, - "type": "object" - }, - "kick.SubcategoryResponse": { - "properties": { - "subcategory": { - "$ref": "#/definitions/kick.Subcategory" } }, "type": "object" }, - "kick.TopChannelsResponse": { + "hltv.SearchGroup": { "properties": { - "channels": { + "items": { "items": { - "$ref": "#/definitions/kick.ChannelHit" + "$ref": "#/definitions/hltv.SearchItem" }, "type": "array" + }, + "name": { + "type": "string" } }, "type": "object" }, - "kick.Video": { + "hltv.SearchItem": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/kick.CategoryRef" - }, - "type": "array" - }, - "duration_ms": { - "type": "integer" - }, - "id": { - "type": "integer" - }, - "language": { + "author": { "type": "string" }, - "live": { - "type": "boolean" + "author_url": { + "type": "string" }, - "mature": { - "type": "boolean" + "country": { + "type": "string" }, - "started_at": { + "date": { "type": "string" }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" + "id": { + "type": "integer" }, - "thumbnail_url": { + "logo_url": { "type": "string" }, - "title": { + "name": { "type": "string" }, - "url": { + "slug": { "type": "string" }, - "uuid": { + "type": { "type": "string" }, - "views": { - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "kick.VideoResponse": { + "hltv.SearchResponse": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/kick.CategoryRef" - }, - "type": "array" - }, - "channel": { - "$ref": "#/definitions/kick.ChannelRef" - }, - "created_at": { - "type": "string" - }, - "duration_ms": { - "type": "integer" - }, - "id": { + "count": { "type": "integer" }, - "language": { - "type": "string" - }, - "mature": { - "type": "boolean" - }, - "started_at": { - "type": "string" - }, - "status": { - "type": "string" - }, - "tags": { + "groups": { "items": { - "type": "string" + "$ref": "#/definitions/hltv.SearchGroup" }, "type": "array" }, - "thumbnail_url": { + "query": { "type": "string" - }, - "title": { + } + }, + "type": "object" + }, + "hltv.TeamRanking": { + "properties": { + "name": { "type": "string" }, - "url": { + "rank": { "type": "string" }, - "uuid": { + "region": { "type": "string" - }, - "viewer_count": { - "type": "integer" - }, - "views": { - "type": "integer" } }, "type": "object" }, - "kick.categoriesResponseDoc": { + "hltv.TeamRef": { "properties": { - "code": { - "example": 200, + "id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/kick.CategoriesResponse" + "logo_url": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { "type": "string" } }, "type": "object" }, - "kick.categoryClipsResponseDoc": { + "hltv.TeamResponse": { "properties": { - "code": { - "example": 200, + "country": { + "type": "string" + }, + "id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/kick.ClipsResponse" + "logo_url": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "type": "string" + }, + "rankings": { + "items": { + "$ref": "#/definitions/hltv.TeamRanking" + }, + "type": "array" + }, + "roster": { + "items": { + "$ref": "#/definitions/hltv.RosterMember" + }, + "type": "array" + }, + "url": { "type": "string" } }, "type": "object" }, - "kick.channelChatroomResponseDoc": { + "hltv.VetoEntry": { "properties": { - "code": { - "example": 200, - "type": "integer" + "action": { + "type": "string" }, - "data": { - "$ref": "#/definitions/kick.ChannelChatroomResponse" + "map": { + "type": "string" }, - "msg": { - "example": "OK", + "order": { + "type": "integer" + }, + "team": { "type": "string" } }, "type": "object" }, - "kick.channelClipsResponseDoc": { + "hltv.eventResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kick.ClipsResponse" + "$ref": "#/definitions/hltv.EventResponse" }, "msg": { "example": "OK", @@ -123004,14 +128305,14 @@ }, "type": "object" }, - "kick.channelEmotesResponseDoc": { + "hltv.eventsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kick.ChannelEmotesResponse" + "$ref": "#/definitions/hltv.EventsResponse" }, "msg": { "example": "OK", @@ -123020,14 +128321,14 @@ }, "type": "object" }, - "kick.channelLinksResponseDoc": { + "hltv.matchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kick.ChannelLinksResponse" + "$ref": "#/definitions/hltv.MatchResponse" }, "msg": { "example": "OK", @@ -123036,14 +128337,14 @@ }, "type": "object" }, - "kick.channelResponseDoc": { + "hltv.matchesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kick.ChannelResponse" + "$ref": "#/definitions/hltv.MatchesResponse" }, "msg": { "example": "OK", @@ -123052,14 +128353,14 @@ }, "type": "object" }, - "kick.channelStreamsResponseDoc": { + "hltv.playerResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kick.ChannelStreamsResponse" + "$ref": "#/definitions/hltv.PlayerResponse" }, "msg": { "example": "OK", @@ -123068,14 +128369,14 @@ }, "type": "object" }, - "kick.channelVideosResponseDoc": { + "hltv.rankingsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kick.ChannelVideosResponse" + "$ref": "#/definitions/hltv.RankingsResponse" }, "msg": { "example": "OK", @@ -123084,14 +128385,14 @@ }, "type": "object" }, - "kick.clipResponseDoc": { + "hltv.resultsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kick.ClipResponse" + "$ref": "#/definitions/hltv.ResultsResponse" }, "msg": { "example": "OK", @@ -123100,14 +128401,14 @@ }, "type": "object" }, - "kick.clipsResponseDoc": { + "hltv.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kick.ClipsResponse" + "$ref": "#/definitions/hltv.SearchResponse" }, "msg": { "example": "OK", @@ -123116,14 +128417,14 @@ }, "type": "object" }, - "kick.dropsResponseDoc": { + "hltv.teamResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kick.DropsResponse" + "$ref": "#/definitions/hltv.TeamResponse" }, "msg": { "example": "OK", @@ -123132,164 +128433,231 @@ }, "type": "object" }, - "kick.giftsResponseDoc": { + "hm.CategoriesResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "categories": { + "items": { + "$ref": "#/definitions/hm.CategoryEntry" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/kick.GiftsResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" } }, "type": "object" }, - "kick.languagesResponseDoc": { + "hm.CategoryEntry": { "properties": { - "code": { - "example": 200, - "type": "integer" + "category_id": { + "type": "string" }, - "data": { - "$ref": "#/definitions/kick.LanguagesResponse" + "department": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "type": "string" + }, + "section": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "kick.livestreamsResponseDoc": { + "hm.ColorSwatch": { "properties": { - "code": { - "example": 200, - "type": "integer" + "article_id": { + "type": "string" }, - "data": { - "$ref": "#/definitions/kick.LivestreamsResponse" + "color_code": { + "type": "string" }, - "msg": { - "example": "OK", + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "kick.searchCategoriesResponseDoc": { + "hm.ListingResponse": { "properties": { - "code": { - "example": 200, + "category_id": { + "type": "string" + }, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/kick.SearchCategoriesResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "is_new": { + "type": "boolean" + }, + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "products": { + "items": { + "$ref": "#/definitions/hm.ProductSummary" + }, + "type": "array" + }, + "sort": { + "type": "string" + }, + "source_url": { "type": "string" + }, + "total_hits": { + "type": "integer" + }, + "total_pages": { + "type": "integer" } }, "type": "object" }, - "kick.searchChannelsResponseDoc": { + "hm.ProductDetailColor": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/kick.SearchChannelsResponse" + "image_url": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { "type": "string" + }, + "sizes": { + "items": { + "$ref": "#/definitions/hm.ProductDetailSize" + }, + "type": "array" } }, "type": "object" }, - "kick.subcategoriesResponseDoc": { + "hm.ProductDetailRating": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/kick.SubcategoriesResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "value": { + "type": "number" } }, "type": "object" }, - "kick.subcategoryResponseDoc": { + "hm.ProductDetailResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "brand": { + "type": "string" }, - "data": { - "$ref": "#/definitions/kick.SubcategoryResponse" + "colors": { + "items": { + "$ref": "#/definitions/hm.ProductDetailColor" + }, + "type": "array" }, - "msg": { - "example": "OK", + "description": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "gender": { + "type": "string" + }, + "material": { + "type": "string" + }, + "name": { + "type": "string" + }, + "pattern": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "rating": { + "$ref": "#/definitions/hm.ProductDetailRating" + }, + "reviews": { + "items": { + "$ref": "#/definitions/hm.ProductDetailReview" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "kick.topChannelsResponseDoc": { + "hm.ProductDetailReview": { "properties": { - "code": { - "example": 200, - "type": "integer" + "author": { + "type": "string" }, - "data": { - "$ref": "#/definitions/kick.TopChannelsResponse" + "body": { + "type": "string" }, - "msg": { - "example": "OK", + "date": { "type": "string" + }, + "dimensions": { + "items": { + "$ref": "#/definitions/hm.ProductDetailReviewDimension" + }, + "type": "array" + }, + "rating": { + "type": "number" } }, "type": "object" }, - "kick.videoResponseDoc": { + "hm.ProductDetailReviewDimension": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/kick.VideoResponse" + "label": { + "type": "string" }, - "msg": { - "example": "OK", + "value": { "type": "string" } }, "type": "object" }, - "kickstarter.Category": { + "hm.ProductDetailSize": { "properties": { - "id": { - "type": "integer" + "availability": { + "type": "string" }, - "name": { - "example": "Technology", + "currency": { "type": "string" }, - "parent_id": { - "type": "integer" + "price": { + "type": "number" }, - "slug": { - "example": "technology", + "size": { + "type": "string" + }, + "sku": { "type": "string" }, "url": { @@ -123298,365 +128666,364 @@ }, "type": "object" }, - "kickstarter.Comment": { + "hm.ProductSummary": { "properties": { - "author_name": { + "availability": { "type": "string" }, - "body": { + "brand": { "type": "string" }, - "is_creator": { - "type": "boolean" - }, - "posted_at": { + "category_code": { "type": "string" - } - }, - "type": "object" - }, - "kickstarter.CommentsResult": { - "properties": { - "comments": { + }, + "colors": { "items": { - "$ref": "#/definitions/kickstarter.Comment" + "$ref": "#/definitions/hm.ColorSwatch" }, "type": "array" }, - "total_count": { - "type": "integer" - } - }, - "type": "object" - }, - "kickstarter.Creator": { - "properties": { - "avatar": { + "coming_soon": { + "type": "boolean" + }, + "currency": { + "type": "string" + }, + "formatted_price": { "type": "string" }, "id": { - "type": "integer" + "type": "string" + }, + "image_url": { + "type": "string" + }, + "model_image_url": { + "type": "string" }, "name": { "type": "string" }, + "new_arrival": { + "type": "boolean" + }, + "price": { + "type": "number" + }, + "sizes": { + "items": { + "$ref": "#/definitions/hm.SizeStock" + }, + "type": "array" + }, "url": { "type": "string" } }, "type": "object" }, - "kickstarter.DiscoverResult": { + "hm.RelatedList": { "properties": { - "page": { - "type": "integer" + "label": { + "type": "string" }, - "projects": { + "products": { "items": { - "$ref": "#/definitions/kickstarter.Project" + "$ref": "#/definitions/hm.ProductSummary" }, "type": "array" - }, - "total_hits": { - "type": "integer" } }, "type": "object" }, - "kickstarter.Location": { + "hm.RelatedResponse": { "properties": { - "country": { - "example": "US", - "type": "string" - }, - "displayable_name": { - "example": "Los Angeles, CA", + "fetched_at": { "type": "string" }, - "id": { - "type": "integer" + "lists": { + "items": { + "$ref": "#/definitions/hm.RelatedList" + }, + "type": "array" }, - "name": { - "example": "Los Angeles", + "product_id": { "type": "string" }, - "short_name": { - "example": "Los Angeles, CA", + "source_url": { "type": "string" } }, "type": "object" }, - "kickstarter.Photo": { + "hm.SearchMeta": { "properties": { - "full": { + "blocked": { + "type": "boolean" + }, + "did_you_mean": { + "items": { + "type": "string" + }, + "type": "array" + }, + "query": { "type": "string" + }, + "related_searches": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "kickstarter.Project": { + "hm.SearchResponse": { "properties": { - "backers_count": { + "count": { "type": "integer" }, - "blurb": { + "fetched_at": { "type": "string" }, - "category": { - "$ref": "#/definitions/kickstarter.Category" - }, - "comments_count": { + "page": { "type": "integer" }, - "converted_pledged_amount": { - "type": "number" - }, - "country": { - "example": "US", - "type": "string" - }, - "created_at": { - "type": "string" + "page_size": { + "type": "integer" }, - "creator": { - "$ref": "#/definitions/kickstarter.Creator" + "products": { + "items": { + "$ref": "#/definitions/hm.ProductSummary" + }, + "type": "array" }, - "currency": { - "example": "USD", + "query": { "type": "string" }, - "currency_symbol": { - "example": "$", - "type": "string" + "search_meta": { + "$ref": "#/definitions/hm.SearchMeta" }, - "deadline": { + "source_url": { "type": "string" }, - "faq_count": { + "total_hits": { "type": "integer" }, - "goal": { - "type": "number" - }, - "has_video": { - "type": "boolean" - }, - "id": { - "example": 1114436418, + "total_pages": { "type": "integer" - }, - "is_launched": { - "type": "boolean" - }, - "launched_at": { + } + }, + "type": "object" + }, + "hm.SizeStock": { + "properties": { + "id": { "type": "string" }, - "location": { - "$ref": "#/definitions/kickstarter.Location" - }, - "name": { + "label": { "type": "string" }, - "percent_funded": { + "stock": { "type": "integer" + } + }, + "type": "object" + }, + "hm.Store": { + "properties": { + "address": { + "type": "string" }, - "photo": { - "$ref": "#/definitions/kickstarter.Photo" - }, - "pledged": { - "type": "number" - }, - "reward_tiers": { - "description": "RewardTiers is the campaign's pledge/reward tier list, captured from\nkickstarter.com's own natural GraphQL traffic when the campaign's\n/rewards sub-page renders -- see doc.go's \"Reward tiers\" section.\nBest-effort: omitted (not an error) if the capture-capable render\nbackends are unavailable or the campaign has no reward tiers.", - "items": { - "$ref": "#/definitions/kickstarter.RewardTier" - }, - "type": "array" - }, - "risks_and_challenges": { + "city": { "type": "string" }, - "slug": { + "country": { "type": "string" }, - "spotlight": { - "type": "boolean" + "latitude": { + "type": "number" }, - "staff_pick": { - "type": "boolean" + "longitude": { + "type": "number" }, - "state": { - "example": "live", + "name": { "type": "string" }, - "state_changed_at": { + "phone": { "type": "string" }, - "story": { + "postal_code": { "type": "string" }, - "updates_count": { - "type": "integer" + "state": { + "type": "string" }, - "url": { + "store_class": { "type": "string" }, - "usd_pledged": { - "type": "number" + "store_code": { + "type": "string" } }, "type": "object" }, - "kickstarter.RewardAddOn": { + "hm.StoreResponse": { "properties": { - "amount": { - "type": "number" + "count": { + "type": "integer" }, - "currency": { + "fetched_at": { "type": "string" }, - "description": { - "type": "string" + "lat": { + "type": "number" }, - "id": { - "type": "string" + "lng": { + "type": "number" }, - "name": { + "radius_meters": { + "type": "integer" + }, + "search": { "type": "string" - } - }, - "type": "object" - }, - "kickstarter.RewardItem": { - "properties": { - "name": { + }, + "source_url": { "type": "string" }, - "quantity": { - "type": "integer" + "stores": { + "items": { + "$ref": "#/definitions/hm.Store" + }, + "type": "array" } }, "type": "object" }, - "kickstarter.RewardTier": { + "hm.SuggestResponse": { "properties": { - "add_ons": { + "blocked": { + "type": "boolean" + }, + "content_suggestions": { "items": { - "$ref": "#/definitions/kickstarter.RewardAddOn" + "$ref": "#/definitions/hm.SuggestionLink" }, "type": "array" }, - "amount": { - "type": "number" - }, - "available": { - "type": "boolean" - }, - "backers_count": { - "type": "integer" - }, - "currency": { - "example": "USD", + "fetched_at": { "type": "string" }, - "description": { - "type": "string" + "phrase_suggestions": { + "items": { + "type": "string" + }, + "type": "array" }, - "ends_at": { - "type": "string" + "popular_searches": { + "items": { + "$ref": "#/definitions/hm.SuggestionLink" + }, + "type": "array" }, - "estimated_delivery_on": { - "example": "2026-06-01", + "query": { "type": "string" }, - "featured": { - "type": "boolean" - }, - "id": { - "type": "string" + "search_history": { + "items": { + "type": "string" + }, + "type": "array" }, - "image": { + "source_url": { "type": "string" }, - "items": { + "trending_searches": { "items": { - "$ref": "#/definitions/kickstarter.RewardItem" + "type": "string" }, "type": "array" - }, - "limit": { - "type": "integer" - }, - "name": { + } + }, + "type": "object" + }, + "hm.SuggestionLink": { + "properties": { + "content_type": { "type": "string" }, - "remaining_quantity": { - "type": "integer" + "deep_link": { + "type": "string" }, - "shipping_enabled": { - "type": "boolean" + "image_url": { + "type": "string" }, - "shipping_preference": { - "example": "unrestricted", + "link": { "type": "string" }, - "shipping_summary": { + "title": { "type": "string" } }, "type": "object" }, - "kickstarter.Update": { + "hm.categoriesResponseDoc": { "properties": { - "author_name": { - "type": "string" - }, - "body": { - "type": "string" - }, - "comments_count": { + "code": { + "example": 200, "type": "integer" }, - "is_creator": { - "type": "boolean" - }, - "number": { - "example": 7, - "type": "integer" + "data": { + "$ref": "#/definitions/hm.CategoriesResponse" }, - "published_at": { - "example": "July 10, 2026", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "hm.listingResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/hm.ListingResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "kickstarter.UpdatesResult": { + "hm.productDetailResponseDoc": { "properties": { - "updates": { - "items": { - "$ref": "#/definitions/kickstarter.Update" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/hm.ProductDetailResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "kickstarter.commentsResponseDoc": { + "hm.relatedResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kickstarter.CommentsResult" + "$ref": "#/definitions/hm.RelatedResponse" }, "msg": { "example": "OK", @@ -123665,14 +129032,14 @@ }, "type": "object" }, - "kickstarter.discoverResponseDoc": { + "hm.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kickstarter.DiscoverResult" + "$ref": "#/definitions/hm.SearchResponse" }, "msg": { "example": "OK", @@ -123681,14 +129048,14 @@ }, "type": "object" }, - "kickstarter.projectResponseDoc": { + "hm.storesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kickstarter.Project" + "$ref": "#/definitions/hm.StoreResponse" }, "msg": { "example": "OK", @@ -123697,14 +129064,14 @@ }, "type": "object" }, - "kickstarter.updatesResponseDoc": { + "hm.suggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kickstarter.UpdatesResult" + "$ref": "#/definitions/hm.SuggestResponse" }, "msg": { "example": "OK", @@ -123713,396 +129080,479 @@ }, "type": "object" }, - "kohls.CategoryFacet": { + "hollywoodreporter.AuthorArticle": { "properties": { - "label": { - "example": "Department", + "title": { "type": "string" }, - "name": { - "example": "Department", + "url": { "type": "string" - }, - "options": { - "items": { - "$ref": "#/definitions/kohls.CategoryFacetOption" - }, - "type": "array" } }, "type": "object" }, - "kohls.CategoryFacetOption": { + "hollywoodreporter.AuthorResponse": { "properties": { - "active": { - "type": "boolean" + "articles": { + "items": { + "$ref": "#/definitions/hollywoodreporter.AuthorArticle" + }, + "type": "array" }, - "category": { - "example": "Room:Dorm+Department:Bedding", + "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "headshot_url": { + "type": "string" + }, + "job_title": { "type": "string" }, "name": { - "example": "Bedding", "type": "string" }, - "product_count": { - "example": 479, + "page": { "type": "integer" + }, + "social_links": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "url": { + "type": "string" } }, "type": "object" }, - "kohls.CategoryPriceRange": { + "homedepot.CategoriesResponse": { "properties": { - "max_price": { - "example": 9.99, - "type": "number" + "count": { + "example": 26, + "type": "integer" }, - "min_price": { - "example": 2.99, - "type": "number" + "departments": { + "items": { + "$ref": "#/definitions/homedepot.Department" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "kohls.CategoryProduct": { + "homedepot.CategoryFacet": { "properties": { - "available_for_pickup": { - "example": false, - "type": "boolean" + "name": { + "example": "Cordless", + "type": "string" }, - "available_for_ship": { - "example": true, - "type": "boolean" + "path": { + "example": "Cordless/N-5yc1vZc29xZ1z140i3", + "type": "string" }, - "colors": { - "items": { - "type": "string" - }, - "type": "array" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "homedepot.CategoryProduct": { + "properties": { + "id": { + "example": "320326875", + "type": "string" }, - "currency_code": { - "example": "USD", + "image": { "type": "string" }, - "image_url": { + "model": { + "example": "2953-20", "type": "string" }, - "on_sale": { - "example": true, - "type": "boolean" + "original_price": { + "example": 199, + "type": "number" }, - "rating": { - "example": 3.9, + "price": { + "example": 179, "type": "number" }, - "regular_price": { - "$ref": "#/definitions/kohls.CategoryPriceRange" + "rating": { + "example": 4.7, + "type": "number" }, "review_count": { - "example": 27103, + "example": 1542, "type": "integer" }, - "sale_price": { - "$ref": "#/definitions/kohls.CategoryPriceRange" - }, "title": { - "example": "The Big One® Solid Bath Towel, Bath Sheet, Hand Towel or Washcloth", + "example": "M18 FUEL 18V Lithium-Ion Brushless Cordless 1/4 in. Hex Impact Driver (Tool-Only)", "type": "string" }, "url": { "type": "string" - }, - "web_id": { - "example": "4569328", - "type": "string" } }, "type": "object" }, - "kohls.CategoryResponse": { + "homedepot.CategoryResponse": { "properties": { - "category": { - "example": "Room:Dorm", - "type": "string" - }, "count": { - "example": 120, "type": "integer" }, "facets": { + "description": "Facets are the refinement links this browse page offers. Each facet's\npath is directly usable as this endpoint's own path parameter.", "items": { - "$ref": "#/definitions/kohls.CategoryFacet" + "$ref": "#/definitions/homedepot.CategoryFacet" }, "type": "array" }, "fetched_at": { "type": "string" }, - "limit": { - "example": 120, + "page": { + "description": "Page is the 1-indexed page this response carries.", + "example": 1, "type": "integer" }, - "product_count": { - "example": 1317, - "type": "integer" + "path": { + "type": "string" }, "products": { "items": { - "$ref": "#/definitions/kohls.CategoryProduct" + "$ref": "#/definitions/homedepot.CategoryProduct" }, "type": "array" }, + "sort": { + "description": "Sort echoes the requested sort value, or \"\" when the upstream default\nordering was used.", + "example": "top_sellers", + "type": "string" + }, "source_url": { "type": "string" }, "title": { - "example": "Essential Dorm Items for College-Bound Students | Kohl's", "type": "string" }, - "total_pages": { - "example": 11, + "total": { "type": "integer" } }, "type": "object" }, - "kohls.ProductReviewsResponse": { + "homedepot.Department": { "properties": { - "fetched_at": { + "name": { + "example": "Tools", "type": "string" }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "reviews": { - "items": { - "$ref": "#/definitions/kohls.Review" - }, - "type": "array" - }, - "source_url": { + "path": { + "example": "Tools/N-5yc1vZc1xy", "type": "string" }, - "total_count": { - "type": "integer" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "homedepot.KeyFeature": { + "properties": { + "name": { + "example": "Motor Type", + "type": "string" }, - "web_id": { + "value": { + "example": "Brushed", "type": "string" } }, "type": "object" }, - "kohls.Review": { + "homedepot.Product": { "properties": { - "author": { + "brand": { + "example": "Milwaukee", "type": "string" }, - "id": { + "currency": { + "example": "USD", "type": "string" }, - "location": { + "description": { "type": "string" }, - "photo_urls": { + "fetched_at": { + "type": "string" + }, + "gtin": { + "example": "0045242637867", + "type": "string" + }, + "id": { + "example": "320326875", + "type": "string" + }, + "images": { "items": { "type": "string" }, "type": "array" }, + "key_features": { + "items": { + "$ref": "#/definitions/homedepot.KeyFeature" + }, + "type": "array" + }, + "model": { + "example": "2953-20", + "type": "string" + }, + "price": { + "example": 179, + "type": "number" + }, "rating": { - "type": "integer" + "example": 4.7, + "type": "number" }, - "recommended": { - "type": "boolean" + "review_count": { + "example": 1544, + "type": "integer" }, - "secondary_ratings": { + "reviews": { "items": { - "$ref": "#/definitions/kohls.ReviewSecondaryRating" + "$ref": "#/definitions/homedepot.ProductReview" }, "type": "array" }, - "submitted_at": { + "sku": { + "example": "1007901520", "type": "string" }, - "text": { + "source_url": { "type": "string" }, + "specifications": { + "items": { + "$ref": "#/definitions/homedepot.Specification" + }, + "type": "array" + }, "title": { + "example": "Milwaukee M18 FUEL 18V Lithium-Ion Brushless Cordless 1/4 in. Hex Impact Driver (Tool-Only) 2953-20", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "kohls.ReviewSecondaryRating": { + "homedepot.ProductQuestionsResponse": { "properties": { - "max_value": { - "example": 5, + "count": { + "example": 8, "type": "integer" }, - "name": { - "example": "Quality", + "fetched_at": { "type": "string" }, - "value": { - "example": 4, + "id": { + "example": "328425526", + "type": "string" + }, + "questions": { + "items": { + "$ref": "#/definitions/homedepot.Question" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "total": { + "example": 575, "type": "integer" } }, "type": "object" }, - "kohls.Store": { + "homedepot.ProductReview": { "properties": { - "address": { - "example": "17150 SOUTHCENTER PKWY", + "author": { + "example": "HomeDepotCustomer", "type": "string" }, - "badges": { - "example": [ - "Sephora", - "Baby Gifting Shop" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "city": { - "example": "TUKWILA", + "body": { + "example": "The impact is just what I needed.", "type": "string" }, - "country": { - "example": "US", + "headline": { + "example": "Great tool", "type": "string" }, - "distance_miles": { - "example": 11.3, + "rating": { + "example": 5, "type": "number" + } + }, + "type": "object" + }, + "homedepot.Question": { + "properties": { + "answer_count": { + "type": "integer" }, - "hours": { + "answers": { "items": { - "$ref": "#/definitions/kohls.StoreHours" + "$ref": "#/definitions/homedepot.QuestionAnswer" }, "type": "array" }, - "id": { - "example": "1152", - "type": "string" - }, - "latitude": { - "example": 47.450079, - "type": "number" - }, - "longitude": { - "example": -122.2581113, - "type": "number" - }, - "name": { - "example": "Kohl's Tukwila", - "type": "string" - }, - "phone": { - "example": "(206) 394-0078", + "author": { "type": "string" }, - "postal_code": { - "example": "98188", + "date": { "type": "string" }, - "services": { - "example": [ - "In-Store Pickup", - "Wifi Enabled" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "state": { - "example": "WA", + "id": { "type": "string" }, - "url": { + "text": { "type": "string" } }, "type": "object" }, - "kohls.StoreHours": { + "homedepot.QuestionAnswer": { "properties": { - "close": { - "example": "21:00", + "author": { "type": "string" }, - "day": { - "example": "Monday", + "date": { "type": "string" }, - "open": { - "example": "09:00", + "helpful_count": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "is_brand_answer": { + "type": "boolean" + }, + "text": { "type": "string" } }, "type": "object" }, - "kohls.StoresResponse": { + "homedepot.SearchResponse": { "properties": { "count": { + "example": 24, "type": "integer" }, "fetched_at": { "type": "string" }, - "search": { + "page": { + "example": 1, + "type": "integer" + }, + "products": { + "items": { + "$ref": "#/definitions/homedepot.CategoryProduct" + }, + "type": "array" + }, + "query": { + "example": "impact driver", "type": "string" }, "source_url": { "type": "string" }, - "stores": { - "items": { - "$ref": "#/definitions/kohls.Store" - }, - "type": "array" + "total": { + "example": 1962, + "type": "integer" } }, "type": "object" }, - "kohls.SuggestResponse": { + "homedepot.Specification": { + "properties": { + "name": { + "example": "Battery Power Type", + "type": "string" + }, + "value": { + "example": "Lithium Ion", + "type": "string" + } + }, + "type": "object" + }, + "homedepot.SuggestResponse": { "properties": { "count": { + "example": 10, "type": "integer" }, "fetched_at": { "type": "string" }, - "query": { - "type": "string" - }, "source_url": { "type": "string" }, "suggestions": { "items": { - "type": "string" + "$ref": "#/definitions/homedepot.Suggestion" }, "type": "array" + }, + "term": { + "example": "drill", + "type": "string" } }, "type": "object" }, - "kohls.categoryResponseDoc": { + "homedepot.Suggestion": { + "properties": { + "position": { + "description": "Position is the suggestion's 1-indexed rank in Home Depot's own\ntypeahead ordering.", + "example": 2, + "type": "integer" + }, + "term": { + "example": "drill bits", + "type": "string" + } + }, + "type": "object" + }, + "homedepot.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kohls.CategoryResponse" + "$ref": "#/definitions/homedepot.CategoriesResponse" }, "msg": { "example": "OK", @@ -124111,14 +129561,14 @@ }, "type": "object" }, - "kohls.productReviewsResponseDoc": { + "homedepot.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kohls.ProductReviewsResponse" + "$ref": "#/definitions/homedepot.CategoryResponse" }, "msg": { "example": "OK", @@ -124127,14 +129577,14 @@ }, "type": "object" }, - "kohls.storesResponseDoc": { + "homedepot.productQuestionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kohls.StoresResponse" + "$ref": "#/definitions/homedepot.ProductQuestionsResponse" }, "msg": { "example": "OK", @@ -124143,14 +129593,14 @@ }, "type": "object" }, - "kohls.suggestResponseDoc": { + "homedepot.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kohls.SuggestResponse" + "$ref": "#/definitions/homedepot.Product" }, "msg": { "example": "OK", @@ -124159,752 +129609,540 @@ }, "type": "object" }, - "kotaku.AuthorResponse": { + "homedepot.searchResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { - "type": "string" - }, - "name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "social_links": { - "items": { - "$ref": "#/definitions/kotaku.AuthorSocialLink" - }, - "type": "array" + "data": { + "$ref": "#/definitions/homedepot.SearchResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "kotaku.AuthorSocialLink": { + "homedepot.suggestResponseDoc": { "properties": { - "type": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "url": { + "data": { + "$ref": "#/definitions/homedepot.SuggestResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "kroger.CategoriesResponse": { + "hotels.Address": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/kroger.CategoryTaxon" - }, - "type": "array" + "country": { + "type": "string" }, - "count": { - "type": "integer" + "locality": { + "type": "string" }, - "departments": { - "description": "Departments lists the top-level departments that contributed at least\none category below, in Kroger's own menu order.", - "items": { - "type": "string" - }, - "type": "array" + "postal_code": { + "type": "string" }, - "source_url": { + "region": { + "type": "string" + }, + "street_address": { "type": "string" } }, "type": "object" }, - "kroger.CategoryResponse": { + "hotels.AutocompleteResponse": { "properties": { - "category_id": { + "query": { "type": "string" }, - "facets": { + "suggestions": { "items": { - "$ref": "#/definitions/kroger.SearchFacetGroup" + "$ref": "#/definitions/hotels.Suggestion" }, "type": "array" - }, - "has_more": { - "description": "HasMore, Source and Facets carry the same meaning as on\nSearchResponse -- see that type and Search's doc comment.", - "type": "boolean" - }, - "page": { + } + }, + "type": "object" + }, + "hotels.OffersOption": { + "properties": { + "adults": { + "example": 2, "type": "integer" }, - "products": { - "items": { - "$ref": "#/definitions/kroger.SearchResultProduct" - }, - "type": "array" + "check_in": { + "example": "2026-09-10", + "type": "string" }, - "slug": { + "check_out": { + "example": "2026-09-11", "type": "string" }, - "source": { + "currency": { + "example": "USD", "type": "string" }, - "total_count": { - "type": "integer" + "locale": { + "example": "en_US", + "type": "string" + }, + "property_id": { + "example": "19681371", + "type": "string" } }, + "required": [ + "check_in", + "check_out", + "property_id" + ], "type": "object" }, - "kroger.CategoryTaxon": { + "hotels.OffersResponse": { "properties": { - "breadcrumb": { - "description": "Breadcrumb is the full department > aisle > category path, deduplicated\nwhere Kroger's own menu repeats a level's name at the next level down.", - "items": { - "type": "string" - }, - "type": "array" - }, - "category_id": { + "check_in": { "type": "string" }, - "department": { - "description": "Department is the top-level department this category rolls up under\n(Breadcrumb[0]), included as a convenience field for grouping/filtering\nwithout parsing Breadcrumb.", + "check_out": { "type": "string" }, - "name": { + "header": { "type": "string" }, - "slug": { - "type": "string" + "offers": { + "items": { + "$ref": "#/definitions/hotels.RoomOffer" + }, + "type": "array" }, - "url": { - "description": "URL is the canonical kroger.com category-browse page URL.", + "property_id": { "type": "string" } }, "type": "object" }, - "kroger.Coupon": { + "hotels.Property": { "properties": { - "brand": { - "type": "string" + "address": { + "$ref": "#/definitions/hotels.Address" }, - "categories": { + "amenities": { "items": { "type": "string" }, "type": "array" }, - "display_description": { - "type": "string" - }, - "end_date": { + "description": { "type": "string" }, - "expiration_date": { - "type": "string" + "guest_rating": { + "type": "number" }, "id": { "type": "string" }, - "image_url": { - "type": "string" - }, - "kroger_coupon_number": { - "type": "string" - }, - "modalities": { + "images": { "items": { "type": "string" }, "type": "array" }, - "redemptions_allowed": { - "type": "integer" + "latitude": { + "type": "number" }, - "requirement_description": { + "longitude": { + "type": "number" + }, + "name": { "type": "string" }, - "requirement_quantity": { + "review_count": { "type": "integer" }, - "savings": { + "star_rating": { "type": "number" }, - "savings_tags": { - "items": { - "$ref": "#/definitions/kroger.CouponSavingsTag" - }, - "type": "array" - }, - "short_description": { + "url": { "type": "string" - }, - "start_date": { + } + }, + "type": "object" + }, + "hotels.PropertyOption": { + "properties": { + "url": { + "example": "https://www.hotels.com/ho107229/hilton-san-francisco-financial-district-san-francisco-united-states-of-america/", "type": "string" + } + }, + "required": [ + "url" + ], + "type": "object" + }, + "hotels.PropertyResponse": { + "properties": { + "property": { + "$ref": "#/definitions/hotels.Property" + } + }, + "type": "object" + }, + "hotels.RatesOption": { + "properties": { + "adults": { + "example": 2, + "type": "integer" }, - "status": { + "check_in": { + "example": "2026-09-10", "type": "string" }, - "title": { + "check_out": { + "example": "2026-09-11", "type": "string" }, - "total_downloads": { - "type": "integer" + "currency": { + "example": "USD", + "type": "string" }, - "type": { + "locale": { + "example": "en_US", "type": "string" }, - "value": { - "type": "number" + "property_id": { + "example": "19681371", + "type": "string" } }, + "required": [ + "check_in", + "check_out", + "property_id" + ], "type": "object" }, - "kroger.CouponSavingsTag": { + "hotels.RatesResponse": { "properties": { - "description": { + "check_in": { "type": "string" }, - "display_name": { + "check_out": { "type": "string" }, - "name": { + "properties": { + "items": { + "$ref": "#/definitions/hotels.SearchProperty" + }, + "type": "array" + }, + "property_id": { "type": "string" } }, "type": "object" }, - "kroger.CouponsResponse": { + "hotels.Review": { "properties": { - "brand": { + "date": { "type": "string" }, - "count": { - "type": "integer" - }, - "coupons": { - "items": { - "$ref": "#/definitions/kroger.Coupon" - }, - "type": "array" - }, - "location_id": { + "message": { "type": "string" }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" + "rating_label": { + "type": "string" }, - "upc": { + "reviewer_name": { "type": "string" + }, + "verified": { + "type": "boolean" } }, "type": "object" }, - "kroger.NutritionFact": { + "hotels.ReviewArchive": { "properties": { - "daily_value": { + "date": { "type": "string" }, - "name": { + "id": { "type": "string" }, - "unit": { + "message": { "type": "string" }, - "value": { + "rating_label": { + "type": "string" + }, + "reviewer_name": { + "type": "string" + }, + "title": { + "type": "string" + }, + "traveler_type": { "type": "string" } }, "type": "object" }, - "kroger.ProductCategory": { + "hotels.ReviewCategory": { "properties": { - "commodity": { - "type": "string" - }, - "department": { + "name": { "type": "string" }, - "sub_commodity": { + "score": { "type": "string" } }, "type": "object" }, - "kroger.ProductDetail": { + "hotels.ReviewsArchiveOption": { "properties": { - "alcohol": { - "type": "boolean" + "adults": { + "example": 2, + "type": "integer" }, - "brand": { + "check_in": { + "example": "2026-09-10", "type": "string" }, - "categories": { - "items": { - "type": "string" - }, - "type": "array" - }, - "category": { - "$ref": "#/definitions/kroger.ProductCategory" - }, - "country_of_origin": { + "check_out": { + "example": "2026-09-11", "type": "string" }, - "image_url": { + "currency": { + "example": "USD", "type": "string" }, - "images": { - "items": { - "$ref": "#/definitions/kroger.ProductImage" - }, - "type": "array" - }, - "inventory": { - "$ref": "#/definitions/kroger.ProductInventory" - }, - "name": { + "locale": { + "example": "en_US", "type": "string" }, - "nutrition": { - "$ref": "#/definitions/kroger.ProductNutrition" - }, - "price": { - "$ref": "#/definitions/kroger.ProductPrice" - }, - "rating": { - "$ref": "#/definitions/kroger.ProductRating" - }, - "size": { - "type": "string" + "page": { + "example": 1, + "type": "integer" }, - "upc": { - "type": "string" + "page_size": { + "example": 10, + "type": "integer" }, - "url": { + "property_id": { + "example": "19681371", "type": "string" } }, + "required": [ + "check_in", + "check_out", + "property_id" + ], "type": "object" }, - "kroger.ProductImage": { + "hotels.ReviewsArchiveResponse": { "properties": { - "perspective": { - "type": "string" - }, - "size": { - "type": "string" + "has_more": { + "type": "boolean" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "kroger.ProductInventory": { - "properties": { - "available": { + "page": { "type": "integer" }, - "location_id": { - "type": "string" + "page_size": { + "type": "integer" }, - "stock_level": { - "type": "string" - } - }, - "type": "object" - }, - "kroger.ProductNutrition": { - "properties": { - "allergens": { + "property_id": { "type": "string" }, - "facts": { + "reviews": { "items": { - "$ref": "#/definitions/kroger.NutritionFact" + "$ref": "#/definitions/hotels.ReviewArchive" }, "type": "array" - }, - "gluten_free": { - "type": "boolean" - }, - "ingredients": { - "type": "string" - }, - "kosher": { - "type": "boolean" - }, - "non_gmo": { - "type": "boolean" - }, - "organic": { - "type": "boolean" - }, - "product_warning": { - "type": "string" - }, - "serving_size": { - "type": "string" - }, - "servings_per_container": { - "type": "string" - } - }, - "type": "object" - }, - "kroger.ProductOffer": { - "properties": { - "availability": { - "type": "string" - }, - "currency": { - "type": "string" - }, - "original_price": { - "type": "number" - }, - "price": { - "type": "number" } }, "type": "object" }, - "kroger.ProductPrice": { + "hotels.ReviewsOption": { "properties": { - "amount": { - "type": "number" - }, - "currency": { - "type": "string" + "adults": { + "example": 2, + "type": "integer" }, - "display": { + "check_in": { + "example": "2026-09-10", "type": "string" }, - "location_id": { + "check_out": { + "example": "2026-09-11", "type": "string" }, - "seller_id": { + "currency": { + "example": "USD", "type": "string" }, - "seller_name": { + "locale": { + "example": "en_US", "type": "string" }, - "unit_price_text": { + "property_id": { + "example": "19681371", "type": "string" } }, + "required": [ + "check_in", + "check_out", + "property_id" + ], "type": "object" }, - "kroger.ProductRating": { - "properties": { - "average": { - "type": "number" - }, - "count": { - "type": "integer" - }, - "five_stars": { - "type": "integer" - }, - "four_stars": { - "type": "integer" - }, - "one_star": { - "type": "integer" - }, - "three_stars": { - "type": "integer" - }, - "two_stars": { - "type": "integer" - } - }, - "type": "object" - }, - "kroger.ProductResponse": { + "hotels.ReviewsResponse": { "properties": { - "brand": { - "type": "string" - }, "categories": { "items": { - "type": "string" + "$ref": "#/definitions/hotels.ReviewCategory" }, "type": "array" }, - "description": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "offer": { - "$ref": "#/definitions/kroger.ProductOffer" - }, - "rating_count": { - "type": "integer" - }, - "rating_value": { - "type": "number" - }, - "title": { - "type": "string" - }, - "upc": { - "type": "string" - }, - "url": { + "overall_rating": { "type": "string" - } - }, - "type": "object" - }, - "kroger.ProductsResponse": { - "properties": { - "count": { - "type": "integer" }, - "location_id": { + "property_id": { "type": "string" }, - "products": { + "reviews": { "items": { - "$ref": "#/definitions/kroger.ProductDetail" + "$ref": "#/definitions/hotels.Review" }, "type": "array" - } - }, - "type": "object" - }, - "kroger.RelatedTag": { - "properties": { - "position": { - "type": "integer" - }, - "query": { - "type": "string" }, - "source": { - "type": "string" - }, - "tag": { + "superlative": { "type": "string" } }, "type": "object" }, - "kroger.RelatedTagsResponse": { + "hotels.RoomOffer": { "properties": { - "count": { - "type": "integer" - }, - "location_id": { - "type": "string" - }, - "query": { + "id": { "type": "string" }, - "related_tags": { + "messages": { "items": { - "$ref": "#/definitions/kroger.RelatedTag" + "type": "string" }, "type": "array" + }, + "name": { + "type": "string" } }, "type": "object" }, - "kroger.Review": { + "hotels.SearchOption": { "properties": { - "featured": { - "type": "boolean" - }, - "helpful_vote_count": { - "type": "integer" - }, - "id": { - "type": "string" - }, - "not_helpful_vote_count": { - "type": "integer" - }, - "photos": { - "items": { - "$ref": "#/definitions/kroger.ReviewPhoto" - }, - "type": "array" - }, - "rating": { + "adults": { + "example": 2, "type": "integer" }, - "ratings_only": { - "type": "boolean" - }, - "recommended": { - "type": "boolean" - }, - "submitted_at": { + "check_in": { + "example": "2026-09-10", "type": "string" }, - "text": { + "check_out": { + "example": "2026-09-11", "type": "string" }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "kroger.ReviewPhoto": { - "properties": { - "size": { + "currency": { + "example": "USD", "type": "string" }, - "url": { + "locale": { + "example": "en_US", "type": "string" - } - }, - "type": "object" - }, - "kroger.ReviewsResponse": { - "properties": { - "average_rating": { - "type": "number" }, "page": { + "example": 1, "type": "integer" }, "page_size": { + "example": 20, "type": "integer" }, - "rating": { - "$ref": "#/definitions/kroger.ProductRating" - }, - "reviews": { - "items": { - "$ref": "#/definitions/kroger.Review" - }, - "type": "array" - }, - "total_count": { - "type": "integer" - }, - "upc": { - "type": "string" - } - }, - "type": "object" - }, - "kroger.SearchFacetGroup": { - "properties": { - "group": { + "query": { + "example": "New York", "type": "string" }, - "values": { - "items": { - "$ref": "#/definitions/kroger.SearchFacetValue" - }, - "type": "array" - } - }, - "type": "object" - }, - "kroger.SearchFacetValue": { - "properties": { - "count": { - "type": "integer" - }, - "name": { + "region_id": { + "example": "2621", "type": "string" }, - "slug": { - "type": "string" + "rooms": { + "example": 1, + "type": "integer" } }, + "required": [ + "check_in", + "check_out" + ], "type": "object" }, - "kroger.SearchResponse": { + "hotels.SearchProperty": { "properties": { - "facets": { + "amenities": { "items": { - "$ref": "#/definitions/kroger.SearchFacetGroup" + "type": "string" }, "type": "array" }, - "has_more": { - "description": "HasMore reports whether Kroger says more results exist past this page.\nOnly meaningful on the JSON-API path; false on the HTML fallback.", - "type": "boolean" - }, - "page": { - "type": "integer" - }, - "products": { + "badges": { "items": { - "$ref": "#/definitions/kroger.SearchResultProduct" + "type": "string" }, "type": "array" }, - "query": { - "type": "string" - }, - "source": { - "description": "Source is which upstream path served this response: \"json_api\" (the\nprimary path) or \"html\" (the fallback). See Search's doc comment.", + "id": { "type": "string" }, - "total_count": { - "type": "integer" - } - }, - "type": "object" - }, - "kroger.SearchResultProduct": { - "properties": { - "brand": { - "description": "Brand and StockLevel are populated by the JSON-API path only (the\nHTML result cards carry neither); both are omitted when the HTML\nfallback served the response. See Search's doc comment.", + "location": { "type": "string" }, - "currency": { + "name": { "type": "string" }, - "image_url": { + "nightly_price": { "type": "string" }, - "low_stock": { - "type": "boolean" - }, - "original_price": { - "type": "number" - }, "price": { - "type": "number" - }, - "size": { "type": "string" }, - "snap_ebt_eligible": { - "type": "boolean" + "review_count": { + "type": "integer" }, - "stock_level": { - "type": "string" + "review_score": { + "type": "number" }, - "title": { + "review_title": { "type": "string" }, - "unit_price": { + "strikeout_price": { "type": "string" }, - "upc": { + "thumbnail_url": { "type": "string" }, "url": { @@ -124913,135 +130151,78 @@ }, "type": "object" }, - "kroger.StoreAddress": { + "hotels.SearchResponse": { "properties": { - "address_lines": { - "items": { - "type": "string" - }, - "type": "array" + "check_in": { + "type": "string" }, - "city": { + "check_out": { "type": "string" }, - "country": { + "destination": { "type": "string" }, - "postal_code": { + "page": { + "type": "integer" + }, + "properties": { + "items": { + "$ref": "#/definitions/hotels.SearchProperty" + }, + "type": "array" + }, + "region_id": { "type": "string" }, - "state": { + "results_label": { "type": "string" } }, "type": "object" }, - "kroger.StoreHours": { + "hotels.Suggestion": { "properties": { - "days": { + "airport_code": { "type": "string" }, - "hours": { + "geo_type": { "type": "string" }, - "is_today": { - "type": "boolean" - } - }, - "type": "object" - }, - "kroger.StoreLocation": { - "properties": { "latitude": { "type": "number" }, - "longitude": { - "type": "number" - } - }, - "type": "object" - }, - "kroger.StoreResponse": { - "properties": { - "address": { - "$ref": "#/definitions/kroger.StoreAddress" - }, - "brand": { - "type": "string" - }, - "break_hours": { - "items": { - "$ref": "#/definitions/kroger.StoreHours" - }, - "type": "array" - }, - "has_drive_thru": { - "type": "boolean" - }, - "hours": { - "items": { - "$ref": "#/definitions/kroger.StoreHours" - }, - "type": "array" - }, - "location": { - "$ref": "#/definitions/kroger.StoreLocation" - }, - "name": { + "location_full_name": { "type": "string" }, - "open_text": { - "type": "string" + "longitude": { + "type": "number" }, - "phone": { + "primary_text": { "type": "string" }, - "store_id": { - "type": "string" - } - }, - "type": "object" - }, - "kroger.SuggestResponse": { - "properties": { - "location_id": { + "property_id": { "type": "string" }, - "query": { + "region_id": { "type": "string" }, - "spelling_correction": { - "description": "SpellingCorrection is Kroger's own suggested respelling of Query, set\nonly when Query returned zero suggestions and Kroger judged it a\nlikely typo (confirmed live: \"Marble cake\" -> \"maple cake\" with an\nempty Suggestions list).", + "secondary_text": { "type": "string" }, - "suggestions": { - "items": { - "$ref": "#/definitions/kroger.Suggestion" - }, - "type": "array" - } - }, - "type": "object" - }, - "kroger.Suggestion": { - "properties": { "type": { "type": "string" - }, - "value": { - "type": "string" } }, "type": "object" }, - "kroger.categoriesResponseDoc": { + "hotels.autocompleteResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kroger.CategoriesResponse" + "$ref": "#/definitions/hotels.AutocompleteResponse" }, "msg": { "example": "OK", @@ -125050,14 +130231,14 @@ }, "type": "object" }, - "kroger.categoryResponseDoc": { + "hotels.offersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kroger.CategoryResponse" + "$ref": "#/definitions/hotels.OffersResponse" }, "msg": { "example": "OK", @@ -125066,14 +130247,14 @@ }, "type": "object" }, - "kroger.couponsResponseDoc": { + "hotels.propertyResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kroger.CouponsResponse" + "$ref": "#/definitions/hotels.PropertyResponse" }, "msg": { "example": "OK", @@ -125082,14 +130263,14 @@ }, "type": "object" }, - "kroger.productResponseDoc": { + "hotels.ratesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kroger.ProductResponse" + "$ref": "#/definitions/hotels.RatesResponse" }, "msg": { "example": "OK", @@ -125098,14 +130279,14 @@ }, "type": "object" }, - "kroger.productsResponseDoc": { + "hotels.reviewsArchiveResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kroger.ProductsResponse" + "$ref": "#/definitions/hotels.ReviewsArchiveResponse" }, "msg": { "example": "OK", @@ -125114,14 +130295,14 @@ }, "type": "object" }, - "kroger.relatedTagsResponseDoc": { + "hotels.reviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kroger.RelatedTagsResponse" + "$ref": "#/definitions/hotels.ReviewsResponse" }, "msg": { "example": "OK", @@ -125130,14 +130311,14 @@ }, "type": "object" }, - "kroger.reviewsResponseDoc": { + "hotels.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/kroger.ReviewsResponse" + "$ref": "#/definitions/hotels.SearchResponse" }, "msg": { "example": "OK", @@ -125146,87 +130327,93 @@ }, "type": "object" }, - "kroger.searchResponseDoc": { + "houstonchronicle.AuthorArticle": { "properties": { - "code": { - "example": 200, - "type": "integer" + "summary": { + "type": "string" }, - "data": { - "$ref": "#/definitions/kroger.SearchResponse" + "title": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "kroger.storeResponseDoc": { + "houstonchronicle.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/houstonchronicle.AuthorArticle" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/kroger.StoreResponse" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "kroger.suggestResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/kroger.SuggestResponse" + "job_title": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "type": "string" + }, + "same_as": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { "type": "string" } }, "type": "object" }, - "latimes.ArticleResponse": { + "huffpost.AuthorResponse": { "properties": { - "authors": { + "articles": { + "items": { + "$ref": "#/definitions/huffpost.HeadlineItem" + }, + "type": "array" + }, + "biography": { "items": { "type": "string" }, "type": "array" }, - "description": { + "image_url": { "type": "string" }, - "headline": { + "job_title": { "type": "string" }, - "image_url": { + "name": { "type": "string" }, - "is_accessible_for_free": { - "type": "boolean" - }, - "paragraphs": { + "social_links": { "items": { - "type": "string" + "$ref": "#/definitions/huffpost.AuthorSocialLink" }, "type": "array" }, - "published_at": { - "type": "string" - }, - "section": { + "url": { "type": "string" - }, - "updated_at": { + } + }, + "type": "object" + }, + "huffpost.AuthorSocialLink": { + "properties": { + "platform": { "type": "string" }, "url": { @@ -125235,8 +130422,11 @@ }, "type": "object" }, - "latimes.AuthorArticle": { + "huffpost.HeadlineItem": { "properties": { + "author": { + "type": "string" + }, "image_url": { "type": "string" }, @@ -125249,25 +130439,28 @@ "title": { "type": "string" }, + "type": { + "type": "string" + }, "url": { "type": "string" } }, "type": "object" }, - "latimes.AuthorResponse": { + "ign.AuthorResponse": { "properties": { "articles": { "items": { - "$ref": "#/definitions/latimes.AuthorArticle" + "$ref": "#/definitions/ign.HeadlineItem" }, "type": "array" }, - "bio": { - "type": "string" - }, - "email": { - "type": "string" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, "image_url": { "type": "string" @@ -125275,22 +130468,28 @@ "job_title": { "type": "string" }, + "location": { + "type": "string" + }, "name": { "type": "string" }, - "social_accounts": { + "social_links": { "items": { - "$ref": "#/definitions/latimes.AuthorSocialAccount" + "$ref": "#/definitions/ign.AuthorSocialLink" }, "type": "array" }, "url": { "type": "string" + }, + "username": { + "type": "string" } }, "type": "object" }, - "latimes.AuthorSocialAccount": { + "ign.AuthorSocialLink": { "properties": { "platform": { "type": "string" @@ -125301,14 +130500,11 @@ }, "type": "object" }, - "latimes.HeadlineItem": { + "ign.HeadlineItem": { "properties": { "author": { "type": "string" }, - "image_caption": { - "type": "string" - }, "image_url": { "type": "string" }, @@ -125321,1102 +130517,851 @@ "title": { "type": "string" }, + "type": { + "type": "string" + }, "url": { "type": "string" } }, "type": "object" }, - "latimes.HeadlinesResponse": { + "ikea.AvailabilityResponse": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/latimes.HeadlineItem" - }, - "type": "array" + "available_for_click_collect": { + "type": "boolean" }, - "section": { + "available_for_home_delivery": { + "type": "boolean" + }, + "click_collect": { + "$ref": "#/definitions/ikea.PickupAvailability" + }, + "country": { + "example": "us", "type": "string" - } - }, - "type": "object" - }, - "latimes.SectionInfo": { - "properties": { - "feed_url": { + }, + "fetched_at": { "type": "string" }, - "name": { + "home_delivery": { + "$ref": "#/definitions/ikea.DeliveryAvailability" + }, + "item_no": { + "example": "80213074", "type": "string" }, - "slug": { + "source_url": { "type": "string" } }, "type": "object" }, - "latimes.SectionsResponse": { + "ikea.CategoriesResponse": { "properties": { - "sections": { + "categories": { "items": { - "$ref": "#/definitions/latimes.SectionInfo" + "$ref": "#/definitions/ikea.CategoryEntry" }, "type": "array" - } - }, - "type": "object" - }, - "latimes.articleResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/latimes.ArticleResponse" - }, - "msg": { - "example": "OK", + "country": { + "example": "us", "type": "string" - } - }, - "type": "object" - }, - "latimes.authorResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/latimes.AuthorResponse" - }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "latimes.headlinesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/latimes.HeadlinesResponse" + "has_next": { + "example": true, + "type": "boolean" }, - "msg": { - "example": "OK", + "language": { + "example": "en", "type": "string" - } - }, - "type": "object" - }, - "latimes.sectionsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "page": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/latimes.SectionsResponse" + "page_size": { + "example": 100, + "type": "integer" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" + }, + "total": { + "example": 929, + "type": "integer" } }, "type": "object" }, - "lazada.CategoryDirectoryResponse": { + "ikea.CategoryEntry": { "properties": { - "fetched_at": { - "example": "2026-08-28T04:00:00Z", + "key": { + "example": "20649", "type": "string" }, - "groups": { - "items": { - "$ref": "#/definitions/lazada.CategoryGroup" - }, - "type": "array" + "level": { + "description": "Level is this category's depth in the taxonomy tree: 1 for a\ntop-level department, 2 for its direct children, and so on.", + "example": 2, + "type": "integer" }, - "region": { - "example": "ID", + "name": { + "example": "Desks & computer desks", "type": "string" }, - "source_url": { - "example": "https://pages.lazada.co.id/wow/i/id/LandingPage/lazmall?wh_weex=true", + "parent_key": { + "description": "ParentKey is the immediate parent category's own key, empty for a\ntop-level department. Some categories are cross-listed under more\nthan one parent in IKEA's own taxonomy (e.g. \"Knobs and handles\"\nunder both PAX and BESTÅ) -- ParentKey records one such parent, not\nevery one; see this file's doc comment.", + "example": "20649", "type": "string" - } - }, - "type": "object" - }, - "lazada.CategoryGroup": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/lazada.CategoryNode" - }, - "type": "array" }, - "name": { - "example": "Elektronik", + "url": { "type": "string" } }, "type": "object" }, - "lazada.CategoryLink": { + "ikea.CategoryRef": { "properties": { - "name": { - "example": "Handphone", + "key": { + "example": "20649", "type": "string" }, - "url": { - "example": "https://www.lazada.co.id/beli-handphone", + "name": { + "example": "Desks & computer desks", "type": "string" } }, "type": "object" }, - "lazada.CategoryNode": { + "ikea.CategoryResponse": { "properties": { - "children": { - "items": { - "$ref": "#/definitions/lazada.CategoryNode" - }, - "type": "array" - }, - "name": { - "example": "Laptop", + "category_key": { + "example": "20649", "type": "string" }, - "url": { - "example": "https://www.lazada.co.id/shop-beli-laptop/", + "category_name": { + "example": "Desks & computer desks", "type": "string" - } - }, - "type": "object" - }, - "lazada.CategoryProductsResponse": { - "properties": { - "brand": { - "example": "lazada6910077_crown-127197821", + }, + "category_url": { "type": "string" }, - "category": { - "example": "shop-karaoke-systems", + "count": { + "description": "Count is the number of products returned in this page; Total is\nIKEA's own total match count for the category. A request whose\nOffset is beyond Total returns Count 0 and Total 0 (IKEA's own\nresponse omits total-count metadata once the offset runs past the\nend of the result set -- confirmed live 2026-08-20).", + "example": 24, + "type": "integer" + }, + "country": { + "example": "us", "type": "string" }, "fetched_at": { - "example": "2026-09-02T04:00:00Z", "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/lazada.ListingItem" - }, - "type": "array" - }, - "page": { - "example": 1, - "type": "integer" + "language": { + "example": "en", + "type": "string" }, - "page_size": { - "example": 40, + "offset": { + "example": 0, "type": "integer" }, - "region": { - "example": "PH", - "type": "string" + "products": { + "items": { + "$ref": "#/definitions/ikea.ProductSummary" + }, + "type": "array" }, "sort": { - "example": "popularity", + "example": "relevance", "type": "string" }, "source_url": { - "example": "https://www.lazada.com.ph/shop-karaoke-systems/?ajax=true&page=1", "type": "string" }, - "total_results": { - "example": 2400, + "total": { + "example": 263, "type": "integer" } }, "type": "object" }, - "lazada.HomeResponse": { + "ikea.Color": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/lazada.CategoryLink" - }, - "type": "array" - }, - "fetched_at": { - "example": "2026-08-28T04:00:00Z", + "hex": { + "example": "ffffff", "type": "string" }, - "flash_sale_items": { - "items": { - "$ref": "#/definitions/lazada.ProductSummary" - }, - "type": "array" - }, - "official_stores": { - "description": "OfficialStores lists featured official-store shops from the same\nhomepage. This carousel was observed absent on one storefront\n(Philippines) during a live check; treat an empty list as \"not\ncurrently shown\", not as evidence of parser drift.", - "items": { - "$ref": "#/definitions/lazada.OfficialStore" - }, - "type": "array" - }, - "region": { - "example": "ID", + "id": { + "example": "10156", "type": "string" }, - "source_url": { - "example": "https://www.lazada.co.id/", + "name": { + "example": "white", "type": "string" } }, "type": "object" }, - "lazada.ListingItem": { + "ikea.DeliveryAvailability": { "properties": { - "currency": { - "example": "PHP", - "type": "string" + "in_range": { + "type": "boolean" }, - "discount": { - "example": "77% Off", + "message_type": { + "description": "MessageType is IKEA's own stock-probability code, e.g.\n\"HIGH_IN_STOCK\", \"LOW_IN_STOCK\", \"OUT_OF_STOCK\" -- values other than\nthese three were not observed live this pass; surfaced verbatim\nrather than validated against a closed enum since it is response\ndata from IKEA's own system, not a caller-supplied parameter.", + "example": "HIGH_IN_STOCK", "type": "string" }, - "image": { - "example": "https://ph-live-01.slatic.net/p/example.png", + "updated_at": { "type": "string" - }, - "item_id": { - "example": 15396167084, - "type": "integer" - }, - "location": { - "example": "Benguet", + } + }, + "type": "object" + }, + "ikea.PickupAvailability": { + "properties": { + "in_range": { + "type": "boolean" + } + }, + "type": "object" + }, + "ikea.Price": { + "properties": { + "currency_code": { + "example": "USD", "type": "string" }, - "price": { - "example": 159, + "current": { + "example": 99.99, "type": "number" }, - "rating": { - "description": "Rating and Reviews are omitted entirely when the listing card has no\nrating yet (a brand-new or unrated listing) rather than defaulting to 0.", - "example": 5, + "discount_amount": { + "example": 15.01, "type": "number" }, - "reviews": { - "example": 3, - "type": "integer" + "discount_percentage": { + "example": 15, + "type": "number" }, - "title": { - "example": "Digilab Original K12 Bluetooth Portable Karaoke Speaker", + "formatted": { + "example": "$99.99", "type": "string" }, - "url": { - "example": "https://www.lazada.com.ph/products/pdp-i15396167084.html", + "previous": { + "example": 95, + "type": "number" + }, + "previous_formatted": { + "example": "$95.00", "type": "string" - } - }, - "type": "object" - }, - "lazada.OfficialStore": { - "properties": { - "brand_image": { - "example": "https://img.lazcdn.com/g/p/example.jpg", + }, + "tag": { + "description": "Tag is IKEA's own price-badge code, e.g. \"FAMILY_PRICE\" for an IKEA\nFamily member price. TagText is its human-readable label, e.g. \"IKEA\nFamily price\".", + "example": "FAMILY_PRICE", "type": "string" }, - "name": { - "example": "Alfalink", + "tag_text": { + "example": "IKEA Family price", "type": "string" }, - "shop_image": { - "example": "https://img.lazcdn.com/g/shop/example.jpeg", + "valid_from": { + "example": "2026-08-03", "type": "string" }, - "url": { - "example": "https://www.lazada.co.id/shop/alfalink", + "valid_to": { + "example": "2026-09-07", "type": "string" } }, "type": "object" }, - "lazada.ProductResponse": { + "ikea.Product": { "properties": { - "brand": { - "example": "Pantene", - "type": "string" - }, - "brand_url": { - "example": "https://www.lazada.co.id/pantene/", - "type": "string" - }, - "category": { - "example": [ - "Kecantikan" - ], + "category_path": { "items": { - "type": "string" + "$ref": "#/definitions/ikea.CategoryRef" }, "type": "array" }, - "currency": { - "example": "IDR", - "type": "string" - }, - "description": { - "type": "string" + "colors": { + "items": { + "$ref": "#/definitions/ikea.Color" + }, + "type": "array" }, - "fetched_at": { - "example": "2026-09-02T04:00:00Z", + "filter_class": { + "description": "FilterClass is IKEA's own product-type slug, e.g. \"desks\" -- usable as\na coarse category signal, though it is not currently accepted back as\na category-browse filter by this endpoint (see this package's doc\ncomment).", + "example": "desks", "type": "string" }, - "highlights": { + "image_url": { "type": "string" }, "images": { "items": { - "type": "string" + "$ref": "#/definitions/ikea.ProductImage" }, "type": "array" }, - "item_id": { - "example": 159992555, - "type": "integer" + "item_no": { + "example": "80213074", + "type": "string" + }, + "measure_text": { + "example": "41 3/8x19 5/8 \"", + "type": "string" + }, + "name": { + "example": "MICKE", + "type": "string" }, "price": { - "example": 190500, - "type": "number" + "$ref": "#/definitions/ikea.Price" }, - "region": { - "example": "ID", + "product_url": { "type": "string" }, - "seller_id": { - "example": 100161156, - "type": "integer" + "quick_facts": { + "items": { + "$ref": "#/definitions/ikea.QuickFact" + }, + "type": "array" }, - "sku_id": { - "example": 181803572, - "type": "integer" + "rating": { + "$ref": "#/definitions/ikea.Rating" }, - "source_url": { - "example": "https://www.lazada.co.id/products/pdp-i159992555-s181803572.html", + "type_name": { + "example": "Desk", "type": "string" }, - "title": { - "example": "PANTENE Shampoo Hair Fall Control 990ml", + "valid_design": { + "description": "ValidDesign is IKEA's own color/finish descriptor for this exact item,\ne.g. \"white\" or \"black-brown\" -- the design this specific item number\nrepresents, as opposed to Colors below (every color swatch shown for\nthe product family).", + "example": "white", "type": "string" }, - "url": { - "example": "https://www.lazada.co.id/products/pantene-shampoo-hair-fall-control-990ml-i159992555-s181803572.html", - "type": "string" + "variant_count": { + "description": "VariantCount is the total number of other purchasable size/color/design\noptions this product has, which may exceed len(Variants) -- the search\nendpoint's own gprDescription block does not always enumerate every\nvariant.", + "example": 3, + "type": "integer" }, "variants": { "items": { - "$ref": "#/definitions/lazada.ProductVariant" + "$ref": "#/definitions/ikea.Variant" }, "type": "array" } }, "type": "object" }, - "lazada.ProductSummary": { + "ikea.ProductImage": { "properties": { - "currency": { - "example": "IDR", - "type": "string" - }, - "discount": { - "example": "-32%", - "type": "string" - }, - "image": { - "example": "https://img.lazcdn.com/g/p/example.jpg", + "alt_text": { "type": "string" }, - "item_id": { - "example": 159992555, - "type": "integer" - }, - "original_price": { - "example": 190500, - "type": "number" - }, - "price": { - "example": 129000, - "type": "number" - }, - "title": { - "example": "PANTENE Shampoo Hair Fall Control 990ml", + "type": { + "example": "MAIN_PRODUCT_IMAGE", "type": "string" }, "url": { - "example": "https://www.lazada.co.id/products/pdp-i159992555-s181803572.html", "type": "string" } }, "type": "object" }, - "lazada.ProductVariant": { + "ikea.ProductResponse": { "properties": { - "name": { - "example": "Volume", + "fetched_at": { "type": "string" }, - "values": { - "example": [ - "990 ml" - ], - "items": { - "type": "string" - }, - "type": "array" + "product": { + "$ref": "#/definitions/ikea.Product" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "lazada.SearchResponse": { + "ikea.ProductSummary": { "properties": { - "fetched_at": { - "example": "2026-09-02T04:00:00Z", - "type": "string" - }, - "items": { + "colors": { "items": { - "$ref": "#/definitions/lazada.ListingItem" + "$ref": "#/definitions/ikea.Color" }, "type": "array" }, - "page": { - "example": 1, - "type": "integer" + "filter_class": { + "description": "FilterClass is IKEA's own product-type slug, e.g. \"desks\" -- usable as\na coarse category signal, though it is not currently accepted back as\na category-browse filter by this endpoint (see this package's doc\ncomment).", + "example": "desks", + "type": "string" }, - "page_size": { - "example": 40, - "type": "integer" + "image_url": { + "type": "string" }, - "query": { - "example": "karaoke", + "item_no": { + "example": "80213074", "type": "string" }, - "region": { - "example": "PH", + "measure_text": { + "example": "41 3/8x19 5/8 \"", "type": "string" }, - "sort": { - "example": "popularity", + "name": { + "example": "MICKE", "type": "string" }, - "source_url": { - "example": "https://www.lazada.com.ph/catalog/?q=karaoke&ajax=true&page=1", + "price": { + "$ref": "#/definitions/ikea.Price" + }, + "product_url": { "type": "string" }, - "total_results": { - "example": 2400, - "type": "integer" - } - }, - "type": "object" - }, - "lazada.categoriesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "rating": { + "$ref": "#/definitions/ikea.Rating" }, - "data": { - "$ref": "#/definitions/lazada.CategoryDirectoryResponse" + "type_name": { + "example": "Desk", + "type": "string" }, - "msg": { - "example": "OK", + "valid_design": { + "description": "ValidDesign is IKEA's own color/finish descriptor for this exact item,\ne.g. \"white\" or \"black-brown\" -- the design this specific item number\nrepresents, as opposed to Colors below (every color swatch shown for\nthe product family).", + "example": "white", "type": "string" - } - }, - "type": "object" - }, - "lazada.categoryProductsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/lazada.CategoryProductsResponse" + "variant_count": { + "description": "VariantCount is the total number of other purchasable size/color/design\noptions this product has, which may exceed len(Variants) -- the search\nendpoint's own gprDescription block does not always enumerate every\nvariant.", + "example": 3, + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "variants": { + "items": { + "$ref": "#/definitions/ikea.Variant" + }, + "type": "array" } }, "type": "object" }, - "lazada.homeResponseDoc": { + "ikea.QuickFact": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/lazada.HomeResponse" + "name": { + "example": "Firm", + "type": "string" }, - "msg": { - "example": "OK", + "type_name": { + "example": "Firmness", "type": "string" } }, "type": "object" }, - "lazada.productResponseDoc": { + "ikea.Rating": { "properties": { - "code": { - "example": 200, + "count": { + "example": 6367, "type": "integer" }, - "data": { - "$ref": "#/definitions/lazada.ProductResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "value": { + "example": 4.5, + "type": "number" } }, "type": "object" }, - "lazada.searchResponseDoc": { + "ikea.RelatedSearch": { "properties": { - "code": { - "example": 200, + "count": { + "example": 48, "type": "integer" }, - "data": { - "$ref": "#/definitions/lazada.SearchResponse" - }, - "msg": { - "example": "OK", + "text": { + "example": "desk chair", "type": "string" } }, "type": "object" }, - "leboncoin.ListingCard": { + "ikea.Review": { "properties": { - "category": { - "type": "string" - }, - "id": { + "author": { + "example": "Alexis", "type": "string" }, - "image_url": { + "author_country": { + "description": "AuthorCountry is the reviewer's own self-reported country, as IKEA\ndisplays it (e.g. \"United States\") -- not a normalized country code.", + "example": "United States", "type": "string" }, - "price_eur": { + "rating": { + "example": 5, "type": "integer" }, - "title": { + "text": { "type": "string" }, - "url": { + "title": { + "example": "Great buy", "type": "string" } }, "type": "object" }, - "leboncoin.ListingResponse": { + "ikea.ReviewsResponse": { "properties": { - "availability": { - "type": "string" - }, - "category": { - "type": "string" - }, - "condition": { - "type": "string" - }, - "currency": { - "type": "string" + "average_rating": { + "example": 4.5, + "type": "number" }, - "description": { - "type": "string" + "count": { + "example": 3, + "type": "integer" }, - "id": { + "fetched_at": { "type": "string" }, - "image_url": { + "item_no": { + "example": "80213074", "type": "string" }, - "price_eur": { + "rating_count": { + "example": 6367, "type": "integer" }, - "title": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "leboncoin.SearchResponse": { - "properties": { - "listings": { + "reviews": { "items": { - "$ref": "#/definitions/leboncoin.ListingCard" + "$ref": "#/definitions/ikea.Review" }, "type": "array" }, - "location": { - "type": "string" - }, "source_url": { "type": "string" } }, "type": "object" }, - "leboncoin.listingResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/leboncoin.ListingResponse" - }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "leboncoin.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/leboncoin.SearchResponse" - }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "letterboxd.FilmRating": { + "ikea.SearchResponse": { "properties": { - "average": { - "description": "Average Letterboxd member rating, out of 5.", - "example": 4.52, - "type": "number" - }, "count": { - "description": "Number of member ratings behind the average.", - "example": 5553202, - "type": "integer" - }, - "review_count": { - "description": "Number of written reviews. Omitted when Letterboxd shows none.", - "example": 740173, + "description": "Count is the number of products returned in this response; Total is\nIKEA's own total match count across the full result set (there is no\nconfirmed-working pagination parameter for retrieving results beyond\nSize in one call -- see this package's doc comment).", + "example": 24, "type": "integer" - } - }, - "type": "object" - }, - "letterboxd.FilmRef": { - "properties": { - "slug": { - "description": "Letterboxd film slug. Use it with the film endpoint for full detail.", - "type": "string" - }, - "title": { - "description": "Title of the film.", - "type": "string" }, - "uri": { - "description": "Link to the film's page on Letterboxd.", + "country": { + "example": "us", "type": "string" - } - }, - "type": "object" - }, - "letterboxd.FilmResponse": { - "properties": { - "cast": { - "description": "Cast members of the film, up to 25 credits.", - "items": { - "$ref": "#/definitions/letterboxd.PersonCredit" - }, - "type": "array" }, - "countries": { - "description": "Countries the film was made in.", + "did_you_mean": { + "description": "DidYouMean is populated only when IKEA's own spell-correction\nsuggests a different query than the one submitted.", "items": { "type": "string" }, "type": "array" }, - "directors": { - "description": "Directors of the film.", - "items": { - "$ref": "#/definitions/letterboxd.PersonCredit" - }, - "type": "array" + "fetched_at": { + "type": "string" }, - "genres": { - "description": "Genres of the film.", - "items": { - "type": "string" - }, - "type": "array" + "language": { + "example": "en", + "type": "string" }, - "languages": { - "description": "Languages used in the film, as Letterboxd lists them.", + "products": { "items": { - "type": "string" + "$ref": "#/definitions/ikea.ProductSummary" }, "type": "array" }, - "poster_url": { - "description": "URL of the film's poster image.", + "query": { + "example": "desk", "type": "string" }, - "production_companies": { - "description": "Names of the production companies behind the film.", + "related_searches": { + "description": "RelatedSearches are IKEA's own suggested related queries with their\nown result counts.", "items": { - "type": "string" + "$ref": "#/definitions/ikea.RelatedSearch" }, "type": "array" }, - "rating": { - "allOf": [ - { - "$ref": "#/definitions/letterboxd.FilmRating" - } - ], - "description": "Aggregate Letterboxd member rating. Omitted when the film has no ratings." - }, - "release_date": { - "description": "Release date of the film, in YYYY-MM-DD format.", - "example": "2019-05-21", + "source_url": { "type": "string" }, - "runtime_minutes": { - "description": "Running time of the film in minutes.", - "example": 133, + "total": { + "example": 203, "type": "integer" - }, - "slug": { - "description": "Letterboxd film slug, for example `parasite-2019`. Use it with the film endpoints.", - "example": "parasite-2019", + } + }, + "type": "object" + }, + "ikea.StoreAddress": { + "properties": { + "city": { + "example": "Burbank", "type": "string" }, - "source_url": { - "description": "URL the data was read from.", + "country": { + "example": "US", "type": "string" }, - "synopsis": { - "description": "Short plot synopsis of the film.", + "postal_code": { + "example": "91502", "type": "string" }, - "title": { - "description": "Title of the film.", - "example": "Parasite", + "state": { + "example": "CA", "type": "string" }, - "uri": { - "description": "Link to the film's page on Letterboxd.", + "street": { + "example": "600 South IKEA Way", "type": "string" - }, - "year": { - "description": "Year the film was released.", - "example": 2019, - "type": "integer" } }, "type": "object" }, - "letterboxd.MemberResponse": { + "ikea.StoreAndDetail": { "properties": { - "display_name": { - "type": "string" - }, - "films_this_year": { - "type": "integer" + "address": { + "$ref": "#/definitions/ikea.StoreAddress" }, - "films_watched": { - "type": "integer" + "geo": { + "$ref": "#/definitions/ikea.StoreGeo" }, - "followers": { - "type": "integer" + "hours": { + "items": { + "$ref": "#/definitions/ikea.StoreHours" + }, + "type": "array" }, - "following": { - "type": "integer" + "location_type": { + "example": "Store", + "type": "string" }, - "lists": { - "type": "integer" + "name": { + "example": "IKEA Burbank", + "type": "string" }, - "source_url": { + "price_range": { + "example": "$$", "type": "string" }, - "uri": { + "slug": { + "example": "burbank", "type": "string" }, - "username": { + "url": { "type": "string" } }, "type": "object" }, - "letterboxd.PersonCredit": { + "ikea.StoreGeo": { "properties": { - "name": { - "description": "Name of the person.", - "type": "string" + "latitude": { + "example": 34.1745, + "type": "number" }, - "slug": { - "description": "Letterboxd slug of the person. Use it with the person endpoint.", - "type": "string" + "longitude": { + "example": -118.3032, + "type": "number" } }, "type": "object" }, - "letterboxd.PersonResponse": { + "ikea.StoreHours": { "properties": { - "films": { + "closes": { + "example": "21:00", + "type": "string" + }, + "days": { + "example": [ + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Sunday" + ], "items": { - "$ref": "#/definitions/letterboxd.FilmRef" + "type": "string" }, "type": "array" }, + "opens": { + "example": "10:00", + "type": "string" + } + }, + "type": "object" + }, + "ikea.StoreRef": { + "properties": { + "location_type": { + "description": "LocationType is IKEA's own location-type label, e.g. \"Store\",\n\"Small store\", \"Plan & order point with pick-up\", \"Order point\",\n\"Pick-up point\" -- surfaced verbatim rather than validated against a\nclosed enum since it is response data from IKEA's own directory, not\na caller-supplied parameter.", + "example": "Store", + "type": "string" + }, "name": { + "example": "IKEA Burbank, CA", "type": "string" }, - "role": { + "region": { + "description": "Region is the directory's own grouping heading for this location\n(e.g. \"Los Angeles Area & Southern California\"). Empty for the\ndirectory's leading entries, which appear before any region heading\n-- confirmed live 2026-08-20.", + "example": "Los Angeles Area & Southern California", "type": "string" }, "slug": { + "example": "burbank", "type": "string" }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "letterboxd.PopularResponse": { + "ikea.StoreResponse": { "properties": { - "decade": { - "description": "Decade filter that was applied, for example `2010s`. Omitted when none was set.", - "type": "string" - }, - "films": { - "description": "Films in the chart, most popular first.", - "items": { - "$ref": "#/definitions/letterboxd.FilmRef" - }, - "type": "array" - }, - "genre": { - "description": "Genre filter that was applied. Omitted when none was set.", - "type": "string" - }, - "period": { - "description": "Time window of the chart: `day`, `week`, `month` or `year`. Omitted for the all-time chart.", + "fetched_at": { "type": "string" }, "source_url": { - "description": "URL the data was read from.", "type": "string" + }, + "store": { + "$ref": "#/definitions/ikea.StoreAndDetail" } }, "type": "object" }, - "letterboxd.RatingBucket": { + "ikea.StoresResponse": { "properties": { "count": { + "example": 84, "type": "integer" }, - "percent": { - "type": "integer" + "country": { + "example": "us", + "type": "string" }, - "stars": { - "example": 4.5, - "type": "number" - } - }, - "type": "object" - }, - "letterboxd.RatingHistogramResponse": { - "properties": { - "buckets": { - "items": { - "$ref": "#/definitions/letterboxd.RatingBucket" - }, - "type": "array" + "fetched_at": { + "type": "string" }, - "slug": { + "language": { + "example": "en", "type": "string" }, "source_url": { "type": "string" }, - "total_ratings": { - "type": "integer" + "stores": { + "items": { + "$ref": "#/definitions/ikea.StoreRef" + }, + "type": "array" } }, "type": "object" }, - "letterboxd.Review": { + "ikea.SuggestResponse": { "properties": { - "comment_count": { + "count": { + "example": 5, "type": "integer" }, - "contains_spoilers": { - "type": "boolean" - }, - "date": { - "example": "2019-08-14", + "country": { + "example": "us", "type": "string" }, - "display_name": { + "fetched_at": { "type": "string" }, - "like_count": { - "type": "integer" - }, - "liked": { - "type": "boolean" - }, - "rating": { - "example": 4.5, - "type": "number" - }, - "text": { + "language": { + "example": "en", "type": "string" }, - "username": { - "type": "string" - } - }, - "type": "object" - }, - "letterboxd.ReviewsResponse": { - "properties": { - "reviews": { + "products": { "items": { - "$ref": "#/definitions/letterboxd.Review" + "$ref": "#/definitions/ikea.ProductSummary" }, "type": "array" }, - "slug": { + "query": { + "example": "des", "type": "string" }, "source_url": { "type": "string" - } - }, - "type": "object" - }, - "letterboxd.SearchResponse": { - "properties": { - "query": { - "description": "Search text that was run.", - "type": "string" }, - "results": { - "description": "Search hits, one item per film, person, list or tag.", + "suggestions": { "items": { - "$ref": "#/definitions/letterboxd.SearchResult" + "$ref": "#/definitions/ikea.RelatedSearch" }, "type": "array" - }, - "source_url": { - "description": "URL the data was read from.", - "type": "string" - }, - "type": { - "description": "Result type the search was limited to, `film`. Omitted for a mixed search.", - "type": "string" } }, "type": "object" }, - "letterboxd.SearchResult": { + "ikea.Variant": { "properties": { - "owner": { - "description": "Username of the member who made the list. Present for list hits.", + "image_url": { "type": "string" }, - "role": { - "description": "Role of the person, `actor` or `director`. Present for person hits.", - "example": "director", + "item_no": { + "example": "10244743", "type": "string" }, - "slug": { - "description": "Letterboxd slug of the film or person. Present for film and person hits.", + "name": { + "example": "MICKE", "type": "string" }, - "title": { - "description": "Title of the film or list, name of the person, or the tag.", - "type": "string" + "price": { + "$ref": "#/definitions/ikea.Price" }, - "type": { - "description": "Kind of hit: `film`, `person`, `list` or `tag`.", - "example": "film", + "product_url": { "type": "string" }, - "uri": { - "description": "Link to the hit's page on Letterboxd.", + "rating": { + "$ref": "#/definitions/ikea.Rating" + }, + "type_name": { + "example": "Desk", "type": "string" }, - "year": { - "description": "Year the film was released. Present for film hits.", - "type": "integer" + "valid_design": { + "example": "black-brown", + "type": "string" } }, "type": "object" }, - "letterboxd.SimilarResponse": { + "ikea.availabilityResponseDoc": { "properties": { - "films": { - "description": "Films Letterboxd lists as similar.", - "items": { - "$ref": "#/definitions/letterboxd.FilmRef" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "slug": { - "description": "Slug of the film the similar films are for.", - "type": "string" + "data": { + "$ref": "#/definitions/ikea.AvailabilityResponse" }, - "source_url": { - "description": "URL the data was read from.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "letterboxd.filmResponseDoc": { + "ikea.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/letterboxd.FilmResponse" + "$ref": "#/definitions/ikea.CategoriesResponse" }, "msg": { "example": "OK", @@ -126425,14 +131370,14 @@ }, "type": "object" }, - "letterboxd.memberResponseDoc": { + "ikea.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/letterboxd.MemberResponse" + "$ref": "#/definitions/ikea.CategoryResponse" }, "msg": { "example": "OK", @@ -126441,14 +131386,14 @@ }, "type": "object" }, - "letterboxd.personResponseDoc": { + "ikea.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/letterboxd.PersonResponse" + "$ref": "#/definitions/ikea.ProductResponse" }, "msg": { "example": "OK", @@ -126457,14 +131402,14 @@ }, "type": "object" }, - "letterboxd.popularResponseDoc": { + "ikea.reviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/letterboxd.PopularResponse" + "$ref": "#/definitions/ikea.ReviewsResponse" }, "msg": { "example": "OK", @@ -126473,14 +131418,14 @@ }, "type": "object" }, - "letterboxd.ratingHistogramResponseDoc": { + "ikea.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/letterboxd.RatingHistogramResponse" + "$ref": "#/definitions/ikea.SearchResponse" }, "msg": { "example": "OK", @@ -126489,14 +131434,14 @@ }, "type": "object" }, - "letterboxd.reviewsResponseDoc": { + "ikea.storeResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/letterboxd.ReviewsResponse" + "$ref": "#/definitions/ikea.StoreResponse" }, "msg": { "example": "OK", @@ -126505,14 +131450,14 @@ }, "type": "object" }, - "letterboxd.searchResponseDoc": { + "ikea.storesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/letterboxd.SearchResponse" + "$ref": "#/definitions/ikea.StoresResponse" }, "msg": { "example": "OK", @@ -126521,14 +131466,14 @@ }, "type": "object" }, - "letterboxd.similarResponseDoc": { + "ikea.suggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/letterboxd.SimilarResponse" + "$ref": "#/definitions/ikea.SuggestResponse" }, "msg": { "example": "OK", @@ -126537,1696 +131482,1602 @@ }, "type": "object" }, - "linkedin.Customer": { + "imdb.AlternateTitle": { "properties": { - "follower_count": { - "description": "Number of LinkedIn followers of the customer's company page.", - "example": 12345, - "type": "integer" - }, - "industry": { - "description": "Industry listed for the customer company.", - "example": "Information Technology & Services", - "type": "string" - }, - "link": { - "description": "LinkedIn URL of the customer's company page.", - "example": "https://www.linkedin.com/company/contoso/", + "country": { + "description": "Country or region the alternate title is used in.", + "example": "United States", "type": "string" }, - "logo": { - "description": "URL of the customer's logo image.", - "example": "https://media.licdn.com/dms/image/v2/company-logo_100_100/company-logo_100_100/0/123456789/logo?e=2147483647&v=beta&t=xyz", + "title": { + "description": "Alternate title as listed for that country.", + "example": "Inception", "type": "string" }, - "name": { - "description": "Name of the featured customer company.", - "example": "Contoso Ltd.", + "type": { + "description": "Kind of alternate title, when IMDb gives one.", + "example": "original title", "type": "string" } }, "type": "object" }, - "linkedin.LinkedinCompanyResponse": { + "imdb.AwardItem": { "properties": { - "about": { - "description": "Company description from the About section.", - "example": "We’re a team of scientists, engineers...", - "type": "string" - }, - "affiliated_pages": { - "description": "Related company pages listed as affiliated with this company.", - "items": { - "$ref": "#/definitions/linkedin.Page" - }, - "type": "array" - }, - "company_size": { - "description": "Employee count range listed on the page, for example `501-1,000`.", - "example": "501-1,000", - "type": "string" - }, - "follower_count": { - "description": "Number of LinkedIn followers of the company page.", - "example": 1176422, - "type": "integer" - }, - "founded_on": { - "description": "Year the company was founded.", - "example": 2010, - "type": "integer" - }, - "headline": { - "description": "Tagline shown under the company name.", - "example": "We're committed to solving intelligence, to advance science and benefit humanity.", - "type": "string" - }, - "headquarters": { - "description": "Headquarters location as listed on the page.", - "example": "London, London", - "type": "string" - }, - "industry": { - "description": "Industry listed on the company page, for example `Research Services`.", - "example": "Research Services", + "award": { + "description": "Name of the award given, for example `Oscar`.", + "example": "Oscar", "type": "string" }, - "link": { - "description": "LinkedIn URL of the company page.", - "example": "https://www.linkedin.com/company/googledeepmind", + "category": { + "description": "Award category, for example `Best Motion Picture of the Year`.", + "example": "Best Motion Picture of the Year", "type": "string" }, - "locations": { - "description": "Office locations listed on the company page.", - "items": { - "$ref": "#/definitions/linkedin.Location" - }, - "type": "array" - }, - "logo": { - "description": "URL of the company logo image.", - "example": "https://static.licdn.com/.../linkedin-bug-color.png", + "event": { + "description": "Name of the awards event, for example `Academy Awards, USA`.", + "example": "Academy Awards, USA", "type": "string" }, - "name": { - "description": "Company name as shown on its LinkedIn page.", - "example": "Google DeepMind", + "notes": { + "description": "Extra note IMDb attaches to the award entry.", "type": "string" }, - "num_of_employees_on_linkedin": { - "description": "Number of employees who list the company on their LinkedIn profile.", - "example": 5590, + "public_signals": { + "description": "Number of details filled in on this entry, counted across event, year, category, result, award, recipients, titles and notes.", + "example": 6, "type": "integer" }, - "products": { - "description": "Product Pages LinkedIn lists under the page's Products section.", - "items": { - "$ref": "#/definitions/linkedin.Product" - }, - "type": "array" - }, - "similar_pages": { - "description": "Company pages LinkedIn suggests as similar to this company.", + "recipients": { + "description": "People who received the award.", "items": { - "$ref": "#/definitions/linkedin.Page" + "$ref": "#/definitions/imdb.Person" }, "type": "array" }, - "specialties": { - "description": "Specialties listed on the company page.", - "example": "Artificial Intelligence and Machine Learning", - "type": "string" - }, - "type": { - "description": "Organization type listed on the page, for example `Privately Held`.", - "example": "Privately Held", + "result": { + "description": "Outcome of the entry, for example `nomination`.", + "example": "nomination", "type": "string" }, - "updates": { - "description": "Recent posts shown on the company page.", + "titles": { + "description": "Titles the award entry refers to.", "items": { - "$ref": "#/definitions/linkedin.Update" + "$ref": "#/definitions/imdb.AwardTitle" }, "type": "array" }, - "website": { - "description": "Company website address as listed on the page.", - "example": "https://www.deepmind.google", + "year": { + "description": "Year of the award entry, for example `2011`.", + "example": "2011", "type": "string" } }, "type": "object" }, - "linkedin.LinkedinProductResponse": { + "imdb.AwardTitle": { "properties": { - "about": { - "description": "Product description from the About section.", - "example": "Streamline, manage, and grow your business with Dynamics 365 Business Central - a flexible, scalable, comprehensive business management solution for small and medium-sized businesses.", + "id": { + "description": "IMDb title ID, for example `tt1375666`.", + "example": "tt1375666", "type": "string" }, - "category_link": { - "description": "LinkedIn URL of the product category page.", - "example": "https://www.linkedin.com/products/categories/business-management-software", + "title": { + "description": "Name of the title the award entry refers to.", + "example": "Inception", "type": "string" }, - "category_name": { - "description": "Name of the LinkedIn product category the product is listed in.", - "example": "Business Management Software", + "url": { + "description": "IMDb page URL of the title.", + "example": "https://www.imdb.com/title/tt1375666/", + "type": "string" + } + }, + "type": "object" + }, + "imdb.ChartResponse": { + "properties": { + "chart": { + "example": "top_rated_movies", "type": "string" }, - "cover_image": { - "description": "URL of the product page cover image.", - "example": "https://media.licdn.com/dms/image/v2/D4E1BAQF2jwQmfmDSiA/company-background_10000/B4EZYQcR0_HkAU-/0/1744032571051/microsoft_dynamics_cover?e=2147483647&v=beta&t=fUrpht_xQ4tCJkUKJcGr5hFyqQzXLxbETOV14KE5qk4", + "fetched_at": { + "example": "2026-08-22T14:46:16Z", "type": "string" }, - "external_link": { - "description": "URL of the product's own website, from the visit button on the page.", - "example": "https://dynamics.microsoft.com/en-us/business-central/overview/", + "limit": { + "example": 25, + "type": "integer" + }, + "source_url": { + "example": "https://www.imdb.com/chart/top/", "type": "string" }, - "featured_customers": { - "description": "Customer companies featured on the product page.", + "titles": { "items": { - "$ref": "#/definitions/linkedin.Customer" + "$ref": "#/definitions/imdb.ChartTitle" + }, + "type": "array" + } + }, + "type": "object" + }, + "imdb.ChartTitle": { + "properties": { + "cast": { + "items": { + "$ref": "#/definitions/imdb.Person" }, "type": "array" }, - "link": { - "description": "LinkedIn URL of the product page.", - "example": "https://www.linkedin.com/products/microsoft-dynamics-microsoft-dynamics-365-business-central", - "type": "string" - }, - "logo": { - "description": "URL of the product logo image.", - "example": "https://media.licdn.com/dms/image/v2/C4E0BAQFXmfZJomhCcg/company-logo_100_100/company-logo_100_100/0/1630612268078/microsoft_dynamics_logo?e=2147483647&v=beta&t=2bAeeYjEdtNwIAdeHTqLAo6Av0AN3Ofe1vdzvN2ihpI", - "type": "string" - }, - "medias": { - "description": "Media items shown on the product page, one entry per thumbnail.", + "directors": { "items": { - "$ref": "#/definitions/linkedin.Media" + "$ref": "#/definitions/imdb.Person" }, "type": "array" }, - "name": { - "description": "Product name as shown on its LinkedIn page.", - "example": "Microsoft Dynamics 365 Business Central", + "id": { + "example": "tt0111161", "type": "string" }, - "organization_link": { - "description": "LinkedIn URL of the page of the company that makes the product.", - "example": "https://www.linkedin.com/company/microsoft-dynamics/", + "rank": { + "example": 1, + "type": "integer" + }, + "rating_count": { + "example": 3227390, + "type": "integer" + }, + "rating_value": { + "example": 9.3, + "type": "number" + }, + "title": { + "example": "The Shawshank Redemption", "type": "string" }, - "organization_name": { - "description": "Name of the company that makes the product.", - "example": "Microsoft Dynamics 365", + "url": { + "example": "https://www.imdb.com/title/tt0111161/", "type": "string" }, - "other_products": { - "description": "Other products listed on the page, such as more products from the same company.", + "writers": { "items": { - "$ref": "#/definitions/linkedin.Product" + "$ref": "#/definitions/imdb.Person" }, "type": "array" }, - "similar_products": { - "description": "Products LinkedIn suggests as similar to this one.", - "items": { - "$ref": "#/definitions/linkedin.Product" - }, - "type": "array" + "year": { + "example": 1994, + "type": "integer" } }, "type": "object" }, - "linkedin.Location": { + "imdb.CompanyItem": { "properties": { - "address": { - "description": "Full street address of the location, as listed on the company page.", - "example": "Kings Cross, London, London N1C4AG, GB", + "name": { + "description": "Company name as listed on IMDb.", + "example": "Warner Bros.", "type": "string" }, - "is_primary": { - "description": "Whether this is the company's primary location on LinkedIn.", - "example": true, - "type": "boolean" - } - }, - "type": "object" - }, - "linkedin.Media": { - "properties": { - "link": { - "description": "URL of the media thumbnail image.", - "example": "https://media.licdn.com/media/sample-video.mp4", + "note": { + "description": "Note shown next to the company, for example `presents`.", + "example": "presents", "type": "string" }, - "name": { - "description": "Caption of the media item on the product page.", - "example": "Product Demo Video", + "public_signals": { + "description": "Number of details filled in on this entry, counted across name, URL and note.", + "example": 2, + "type": "integer" + }, + "url": { + "description": "IMDb page URL of the company.", + "example": "https://www.imdb.com/company/co0002663/", "type": "string" } }, "type": "object" }, - "linkedin.Page": { + "imdb.CompanySection": { "properties": { - "address": { - "description": "Location shown on the page card, for example `San Francisco, CA`.", - "example": "San Francisco, CA", - "type": "string" - }, - "industry": { - "description": "Industry listed on the company page.", - "example": "Research Services", - "type": "string" + "companies": { + "description": "Companies listed in this section.", + "items": { + "$ref": "#/definitions/imdb.CompanyItem" + }, + "type": "array" }, - "link": { - "description": "LinkedIn URL of the company page.", - "example": "https://www.linkedin.com/company/openai", + "name": { + "description": "Section heading, for example `Production Companies`.", + "example": "Production Companies", "type": "string" }, - "name": { - "description": "Name of the company page.", - "example": "OpenAI", + "slug": { + "description": "Lowercase, hyphenated form of the section name, for example `production-companies`.", + "example": "production-companies", "type": "string" } }, "type": "object" }, - "linkedin.Product": { + "imdb.ConnectionAssociatedTitle": { "properties": { - "category_link": { - "description": "LinkedIn URL of the product category page.", - "example": "https://www.linkedin.com/products/categories/business-management-software", - "type": "string" - }, - "category_name": { - "description": "Name of the LinkedIn product category the product is listed in.", - "example": "Business Management Software", + "id": { + "example": "tt1936736", "type": "string" }, - "link": { - "description": "LinkedIn URL of the product page.", - "example": "https://www.linkedin.com/products/odoo/", + "title": { + "example": "Why Gump? Why Now?", "type": "string" }, - "logo": { - "description": "URL of the product logo image.", - "example": "https://media.licdn.com/dms/image/v2/D4E0BAQF91OMQCIi4dQ/company-logo_100_100/company-logo_100_100/0/1691657301051/odoo_logo?e=2147483647&v=beta&t=JfXKr0197Ib_ujXsUsYwXtga3l87Seko0icAH53nrHo", + "title_type": { + "example": "TV Episode", "type": "string" }, - "name": { - "description": "Product name as shown on LinkedIn.", - "example": "Odoo", + "url": { + "example": "https://www.imdb.com/title/tt1936736/", "type": "string" - } - }, - "type": "object" - }, - "linkedin.ProductCategoriesResponse": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/linkedin.ProductCategoryItem" - }, - "type": "array" }, - "total": { - "example": 620, + "year": { + "example": 1994, "type": "integer" } }, "type": "object" }, - "linkedin.ProductCategoryItem": { + "imdb.ConnectionItem": { "properties": { - "id": { - "example": "1620", - "type": "string" - }, - "link": { - "example": "https://www.linkedin.com/products/categories/healthcare-crm-software", - "type": "string" - }, - "name": { - "example": "Healthcare CRM Software", - "type": "string" + "associated_title": { + "$ref": "#/definitions/imdb.ConnectionAssociatedTitle" }, - "universal_name": { - "example": "healthcare-crm-software", + "category": { + "example": "Featured in", "type": "string" }, - "urn": { - "example": "urn:li:standardizedProductCategory:1620", + "note": { + "example": "Clips appear in the teaser for next week's show.", "type": "string" } }, "type": "object" }, - "linkedin.ProductSearchResultItem": { + "imdb.CreditItem": { "properties": { - "category_link": { - "example": "https://www.linkedin.com/products/categories/sales-intelligence-software", - "type": "string" - }, - "category_name": { - "example": "Sales Intelligence Software", - "type": "string" - }, - "description": { - "example": "Sales Navigator helps sellers have high-quality conversations with the people that matter, at scale.", - "type": "string" - }, - "id": { - "example": "linkedin-sales-navigator", - "type": "string" - }, - "link": { - "example": "https://www.linkedin.com/products/linkedin-sales-navigator", + "character": { + "example": "Dom Cobb", "type": "string" }, - "logo": { - "example": "https://media.licdn.com/dms/image/v2/D4E33AQFKTZDLqpinzQ/productpage-logo-image_100_100/B4EZX4WGqkHUAY-/0/1743628299227/linkedin_sales_navigator_logo", + "name": { + "example": "Christopher Nolan", "type": "string" }, - "name": { - "example": "LinkedIn Sales Navigator", + "role": { + "example": "written by", "type": "string" }, - "organization_name": { - "example": "LinkedIn", + "url": { + "example": "https://www.imdb.com/name/nm0634240/", "type": "string" } }, "type": "object" }, - "linkedin.ProductsSearchResponse": { + "imdb.CreditSection": { "properties": { - "next_start": { - "description": "NextStart is the offset for the following page, omitted once LinkedIn's\nguest search stops returning results (see ProductSearchResultCap).", - "example": 10, - "type": "integer" - }, - "products": { + "credits": { "items": { - "$ref": "#/definitions/linkedin.ProductSearchResultItem" + "$ref": "#/definitions/imdb.CreditItem" }, "type": "array" }, - "start": { - "example": 0, - "type": "integer" + "has_more": { + "example": true, + "type": "boolean" + }, + "name": { + "example": "Directed by", + "type": "string" + }, + "slug": { + "example": "directed-by", + "type": "string" }, "total": { - "description": "Total is only populated on the first page (start=0), where it is read\nfrom LinkedIn's server-rendered result count.", - "example": 145986, + "example": 145, "type": "integer" } }, "type": "object" }, - "linkedin.Update": { + "imdb.CreditsResponse": { "properties": { - "author": { - "description": "Name of the page that published the post.", - "example": "Google DeepMind", + "fetched_at": { + "example": "2026-06-07T14:46:16Z", "type": "string" }, - "author_link": { - "description": "LinkedIn URL of the page that published the post.", - "example": "https://uk.linkedin.com/company/googledeepmind", + "id": { + "example": "tt1375666", "type": "string" }, - "images": { - "description": "URLs of the images attached to the post.", - "example": [ - "[\"https://example.com/image1.jpg\"]" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "is_reposted": { - "description": "Whether the post is a repost of another LinkedIn post.", - "example": false, + "public_page_derived": { + "example": true, "type": "boolean" }, - "logo": { - "description": "URL of the logo image of the page that published the post.", - "example": "https://media.licdn.com/dms/image/v2/D4E0BAQEntrYwxPlbQA/company-logo_100_100/0/googledeepmind_logo", - "type": "string" - }, - "num_of_comments": { - "description": "Number of comments on the post.", - "example": 21, - "type": "integer" - }, - "num_of_reactions": { - "description": "Number of reactions on the post.", - "example": 571, - "type": "integer" - }, - "post_link": { - "description": "LinkedIn URL of the post.", - "example": "https://www.linkedin.com/posts/googledeepmind_thomas-story-activity-7313245349987385346-5COL", - "type": "string" - }, - "published_at": { - "description": "How long ago the post was published, as LinkedIn shows it, for example `1w`.", - "example": "1w", - "type": "string" - }, - "summary": { - "description": "Text of the post.", - "example": "When his son was diagnosed with a rare disease, Googler Thomas Wagner...", - "type": "string" - }, - "videos": { - "description": "URLs of the videos attached to the post.", - "example": [ - "[\"https://example.com/video1.mp4\"]" - ], + "sections": { "items": { - "type": "string" + "$ref": "#/definitions/imdb.CreditSection" }, "type": "array" - } - }, - "type": "object" - }, - "linkedin.companyResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/linkedin.LinkedinCompanyResponse" + "source_url": { + "example": "https://www.imdb.com/title/tt1375666/fullcredits/", + "type": "string" }, - "msg": { - "example": "OK", + "url": { + "example": "https://www.imdb.com/title/tt1375666/fullcredits/", "type": "string" } }, "type": "object" }, - "linkedin.productCategoriesResponseDoc": { + "imdb.EpisodeItem": { "properties": { - "code": { - "example": 200, + "air_date": { + "description": "Air date as IMDb shows it, for example `17 Apr 2011`, or just the year when only that is known. Omitted when IMDb has no date.", + "example": "17 Apr 2011", + "type": "string" + }, + "episode": { + "description": "Episode number within the season.", + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/linkedin.ProductCategoriesResponse" + "id": { + "description": "IMDb title ID of the episode.", + "example": "tt1480055", + "type": "string" }, - "msg": { - "example": "OK", + "plot": { + "description": "Plot summary of the episode.", "type": "string" - } - }, - "type": "object" - }, - "linkedin.productResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/linkedin.LinkedinProductResponse" + "public_signals": { + "description": "Number of details filled in on this episode, counted across title, season, episode number, rating, vote count and plot.", + "example": 6, + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "linkedin.productsSearchResponseDoc": { - "properties": { - "code": { - "example": 200, + "rating_count": { + "description": "Number of votes behind the episode rating.", + "example": 52000, "type": "integer" }, - "data": { - "$ref": "#/definitions/linkedin.ProductsSearchResponse" + "rating_value": { + "description": "Average IMDb user rating of the episode.", + "example": 8.9, + "type": "number" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "linkedin.showcaseResponseDoc": { - "properties": { - "code": { - "example": 200, + "season": { + "description": "Season number of the episode.", + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/linkedin.LinkedinCompanyResponse" + "title": { + "description": "Title of the episode as shown on IMDb.", + "example": "Winter Is Coming", + "type": "string" }, - "msg": { - "example": "OK", + "url": { + "description": "IMDb page URL of the episode.", + "example": "https://www.imdb.com/title/tt1480055/", "type": "string" } }, "type": "object" }, - "livemint.AuthorResponse": { + "imdb.EpisodesResponse": { "properties": { - "biography": { + "episodes": { + "description": "Episodes of the requested season, or of the first season when none was requested.", "items": { - "type": "string" + "$ref": "#/definitions/imdb.EpisodeItem" }, "type": "array" }, - "facebook_url": { + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:46:16Z", "type": "string" }, - "image_url": { - "type": "string" + "has_more": { + "description": "`true` when IMDb lists more episodes for the season than were returned.", + "example": true, + "type": "boolean" }, - "instagram_url": { + "id": { + "description": "IMDb title ID of the series, for example `tt0944947`.", + "example": "tt0944947", "type": "string" }, - "job_title": { - "type": "string" + "limit": { + "description": "Maximum number of episodes requested.", + "example": 10, + "type": "integer" }, - "linkedin_url": { - "type": "string" + "public_page_derived": { + "description": "Always `true`. The data comes from IMDb's public pages.", + "example": true, + "type": "boolean" }, - "name": { - "type": "string" + "season": { + "description": "Season number that was requested. Omitted when no season was requested.", + "example": 1, + "type": "integer" }, - "twitter_url": { + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.imdb.com/title/tt0944947/episodes/?season=1", "type": "string" }, + "total": { + "description": "Number of episodes IMDb lists for the season.", + "example": 11, + "type": "integer" + }, "url": { + "description": "IMDb episodes page of the series.", + "example": "https://www.imdb.com/title/tt0944947/episodes/", "type": "string" } }, "type": "object" }, - "livescience.AuthorResponse": { + "imdb.ImageItem": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" + "caption": { + "example": "Elisabeth Wiedemann in Holly - The Movie (1984)", + "type": "string" }, - "biography": { + "copyright": { + "example": "2013 Getty Images", + "type": "string" + }, + "countries": { "items": { - "type": "string" + "$ref": "#/definitions/imdb.ImageLocale" }, "type": "array" }, - "has_next_page": { - "type": "boolean" + "created_by": { + "example": "Stanley Bielecki Movie Collection", + "type": "string" }, - "job_title": { + "created_on": { + "example": "February 16, 2026", "type": "string" }, - "name": { + "height": { + "example": 3024, + "type": "integer" + }, + "id": { + "example": "rm1894298369", "type": "string" }, - "page": { + "languages": { + "items": { + "$ref": "#/definitions/imdb.ImageLocale" + }, + "type": "array" + }, + "names": { + "items": { + "$ref": "#/definitions/imdb.ImageName" + }, + "type": "array" + }, + "position": { + "example": 1, "type": "integer" }, - "slug": { + "source": { + "example": "gettyimages.com", "type": "string" }, - "social_links": { + "titles": { "items": { - "$ref": "#/definitions/livescience.AuthorSocialLink" + "$ref": "#/definitions/imdb.ImageTitle" }, "type": "array" }, + "type": { + "example": "still_frame", + "type": "string" + }, "url": { + "example": "https://m.media-amazon.com/images/M/MV5BZjczNmIzMjEtYmM4MC00ZjQxLTk4NjctMTA2MzEzOWI3NWRhXkEyXkFqcGc@._V1_.jpg", "type": "string" + }, + "width": { + "example": 4032, + "type": "integer" } }, "type": "object" }, - "livescience.AuthorSocialLink": { + "imdb.ImageLocale": { "properties": { - "platform": { + "code": { + "example": "SE", "type": "string" }, - "url": { + "name": { + "example": "Sweden", "type": "string" } }, "type": "object" }, - "livescore.livescoreNewsFeedItemDoc": { + "imdb.ImageName": { "properties": { - "author": { - "example": "LiveScore", + "id": { + "example": "nm0000151", "type": "string" }, - "categories": { - "example": [ - "football" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "content": { - "example": "

The complete RSS story body.

", + "name": { + "example": "Morgan Freeman", "type": "string" }, - "description": { - "example": "A short summary of the latest story.", + "url": { + "example": "https://www.imdb.com/name/nm0000151/", "type": "string" - }, - "guid": { - "example": "https://www.livescore.com/en/news/football/example-story/", + } + }, + "type": "object" + }, + "imdb.ImageTitle": { + "properties": { + "id": { + "example": "tt0068646", "type": "string" }, - "link": { - "example": "https://www.livescore.com/en/news/football/example-story/", + "title": { + "example": "The Godfather", "type": "string" }, - "published_at": { - "example": "Sat, 26 Sep 2026 08:45:00 GMT", + "url": { + "example": "https://www.imdb.com/title/tt0068646/", "type": "string" }, - "title": { - "example": "Latest football news", - "type": "string" + "year": { + "example": 1972, + "type": "integer" } }, "type": "object" }, - "livescore.livescoreNewsFeedResponseDoc": { + "imdb.ImageType": { "properties": { - "code": { - "example": 200, - "type": "integer" + "description": { + "example": "A frame captured from the production itself.", + "type": "string" }, - "data": { - "properties": { - "count": { - "example": 75, - "type": "integer" - }, - "items": { - "items": { - "$ref": "#/definitions/livescore.livescoreNewsFeedItemDoc" - }, - "type": "array" - }, - "source_url": { - "example": "https://www.livescore.com/en/news/rss.xml", - "type": "string" - } - }, - "type": "object" + "label": { + "example": "Still Frame", + "type": "string" }, - "msg": { - "example": "OK", + "type": { + "example": "still_frame", "type": "string" } }, "type": "object" }, - "livescore.livescoreNewsPublisherDoc": { + "imdb.ImageTypeCount": { "properties": { - "contact": { - "example": "https://www.statsperform.com/contact/", - "type": "string" - }, - "logo_url": { - "example": "https://www.livescore.com/ls-web-assets/images/publishers-stats-perform.webp", - "type": "string" - }, - "name": { - "example": "Stats Perform", + "label": { + "example": "Still Frame", "type": "string" }, - "telephone": { - "example": "+1 866 221 1426", - "type": "string" + "total": { + "example": 381, + "type": "integer" }, - "website": { - "example": "https://www.statsperform.com/", + "type": { + "example": "still_frame", "type": "string" } }, "type": "object" }, - "livescore.livescoreNewsPublishersResponseDoc": { + "imdb.ImageTypesResponse": { "properties": { - "code": { - "example": 200, + "fetched_at": { + "example": "2026-09-09T14:46:16Z", + "type": "string" + }, + "total": { + "example": 8, "type": "integer" }, - "data": { - "properties": { - "count": { - "example": 6, - "type": "integer" - }, - "publishers": { - "items": { - "$ref": "#/definitions/livescore.livescoreNewsPublisherDoc" - }, - "type": "array" - }, - "source_url": { - "example": "https://www.livescore.com/en/news/publishers/", - "type": "string" - } + "types": { + "items": { + "$ref": "#/definitions/imdb.ImageType" }, - "type": "object" - }, - "msg": { - "example": "OK", - "type": "string" + "type": "array" } }, "type": "object" }, - "livescore.livescoreSearchResponseDoc": { + "imdb.KeywordItem": { "properties": { - "code": { - "example": 200, - "type": "integer" + "keyword": { + "description": "Keyword IMDb has tagged the title with.", + "example": "dream", + "type": "string" }, - "data": { - "properties": { - "query": { - "example": "Manchester City", - "type": "string" - }, - "results": { - "additionalProperties": true, - "type": "object" - }, - "source_url": { - "example": "https://prod-cdn-search-api.lsmedia1.com/api/v2/search/soccer?categories=true&locale=en&query=Manchester+City&stages=true&teams=true&limit=10", - "type": "string" - }, - "sport": { - "example": "soccer", - "type": "string" - } - }, - "type": "object" + "public_signals": { + "description": "Number of details filled in on this entry, counted across keyword and URL.", + "example": 2, + "type": "integer" }, - "msg": { - "example": "OK", + "url": { + "description": "IMDb page that lists titles with this keyword.", + "example": "https://www.imdb.com/search/keyword/?keywords=dream", "type": "string" } }, "type": "object" }, - "livescore.newsCategoriesResponseDoc": { + "imdb.LifetimeGross": { "properties": { - "code": { - "example": 200, - "type": "integer" + "domestic": { + "$ref": "#/definitions/imdb.Money" }, - "data": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/livescore.newsCategoryDoc" - }, - "type": "array" - } - }, - "type": "object" + "international": { + "$ref": "#/definitions/imdb.Money" }, - "msg": { - "example": "OK", - "type": "string" + "worldwide": { + "$ref": "#/definitions/imdb.Money" } }, "type": "object" }, - "livescore.newsCategoryDoc": { + "imdb.LocationItem": { "properties": { - "id": { - "example": "football", - "type": "string" - }, - "name": { - "example": "Football", + "location": { + "description": "Filming location name, for example `Paris, France`.", + "example": "Paris, France", "type": "string" }, - "type": { - "example": "sport", + "note": { + "description": "Note IMDb adds about the location, such as the scene shot there.", + "example": "Ariadne learns to build dreams", "type": "string" }, - "url": { - "example": "https://www.livescore.com/en/news/football/", - "type": "string" + "public_signals": { + "description": "Number of details filled in on this entry, counted across location and note.", + "example": 2, + "type": "integer" } }, "type": "object" }, - "livescore.responseDoc": { + "imdb.Money": { "properties": { - "code": { - "example": 200, + "amount": { + "example": 28767189, "type": "integer" }, - "data": { - "$ref": "#/definitions/livescore.sourceDataDoc" - }, - "msg": { - "example": "OK", + "currency": { + "example": "USD", "type": "string" } }, "type": "object" }, - "livescore.sourceDataDoc": { + "imdb.NameAwardsResponse": { "properties": { - "data": { - "additionalProperties": true, - "type": "object" + "awards": { + "description": "Award entries IMDb lists for the person.", + "items": { + "$ref": "#/definitions/imdb.AwardItem" + }, + "type": "array" + }, + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:46:16Z", + "type": "string" + }, + "has_more": { + "description": "`true` when IMDb lists more award entries than were returned.", + "example": true, + "type": "boolean" + }, + "id": { + "description": "IMDb name ID of the person, for example `nm0634240`.", + "example": "nm0634240", + "type": "string" + }, + "public_page_derived": { + "description": "Always `true`. The data comes from IMDb's public pages.", + "example": true, + "type": "boolean" }, "source_url": { - "example": "https://www.livescore.com/en/football/uefa-nations-league/league-b-group-3/austria-vs-israel/1738267/", + "description": "URL the data was read from.", + "example": "https://www.imdb.com/name/nm0634240/awards/", + "type": "string" + }, + "total": { + "description": "Number of award entries IMDb lists for the person.", + "example": 64, + "type": "integer" + }, + "url": { + "description": "IMDb awards page of the person.", + "example": "https://www.imdb.com/name/nm0634240/awards/", "type": "string" } }, "type": "object" }, - "livescore.sportDoc": { + "imdb.NameCreditItem": { "properties": { + "episodes": { + "description": "Number of episodes the person is credited on, as IMDb words it, for example `3 episodes`.", + "example": "3 episodes", + "type": "string" + }, "id": { - "example": "soccer", + "description": "IMDb title ID of the credited title.", + "example": "tt1375666", "type": "string" }, - "name": { - "example": "Football", + "role": { + "description": "Role or character credited for the person on the title, for example `Self`.", + "example": "directed by", "type": "string" - } - }, - "type": "object" - }, - "livescore.sportsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "properties": { - "sports": { - "items": { - "$ref": "#/definitions/livescore.sportDoc" - }, - "type": "array" - } - }, - "type": "object" + "title": { + "description": "Name of the credited title.", + "example": "Inception", + "type": "string" }, - "msg": { - "example": "OK", + "url": { + "description": "IMDb page URL of the credited title.", + "example": "https://www.imdb.com/title/tt1375666/", + "type": "string" + }, + "year": { + "description": "Release year of the credited title.", + "example": "2010", "type": "string" } }, "type": "object" }, - "lolesports.CompletedEventsResponse": { + "imdb.NameCreditSection": { "properties": { - "count": { - "example": 54, - "type": "integer" - }, - "events": { + "credits": { + "description": "Credits the person has in this section.", "items": { - "$ref": "#/definitions/lolesports.Event" + "$ref": "#/definitions/imdb.NameCreditItem" }, "type": "array" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" + "has_more": { + "description": "`true` when IMDb lists more credits in this section than were returned.", + "example": true, + "type": "boolean" }, - "source_url": { - "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", + "name": { + "description": "Section heading, usually the job, for example `Director`.", + "example": "Director", "type": "string" }, - "tournament_id": { - "example": "115548681802226458", + "slug": { + "description": "Lowercase, hyphenated form of the section name, for example `director`.", + "example": "director", "type": "string" + }, + "total": { + "description": "Number of credits IMDb lists in this section.", + "example": 152, + "type": "integer" } }, "type": "object" }, - "lolesports.DetailsFrame": { + "imdb.NameCreditsResponse": { "properties": { - "participants": { + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:46:16Z", + "type": "string" + }, + "id": { + "description": "IMDb name ID of the person, for example `nm0634240`.", + "example": "nm0634240", + "type": "string" + }, + "public_page_derived": { + "description": "Always `true`. The data comes from IMDb's public pages.", + "example": true, + "type": "boolean" + }, + "sections": { + "description": "Credits of the person, grouped by job.", "items": { - "$ref": "#/definitions/lolesports.DetailsParticipant" + "$ref": "#/definitions/imdb.NameCreditSection" }, "type": "array" }, - "timestamp": { - "example": "2026-10-07T10:53:11.481Z", + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.imdb.com/name/nm0634240/", + "type": "string" + }, + "url": { + "description": "IMDb page URL of the person.", + "example": "https://www.imdb.com/name/nm0634240/", "type": "string" } }, "type": "object" }, - "lolesports.DetailsParticipant": { + "imdb.NameImagesResponse": { "properties": { - "ability_power": { - "example": 0, - "type": "integer" - }, - "armor": { - "example": 90, - "type": "integer" - }, - "assists": { - "example": 0, - "type": "integer" - }, - "attack_damage": { - "example": 110, - "type": "integer" - }, - "attack_speed": { - "example": 125, - "type": "integer" - }, - "champion_damage_share": { - "example": 0.19, - "type": "number" - }, - "creep_score": { - "example": 251, - "type": "integer" + "fetched_at": { + "example": "2026-09-09T14:46:16Z", + "type": "string" }, - "critical_chance": { - "example": 0, - "type": "number" + "has_more": { + "example": true, + "type": "boolean" }, - "deaths": { - "example": 5, - "type": "integer" + "id": { + "example": "nm0000151", + "type": "string" }, - "items": { + "images": { "items": { - "type": "integer" + "$ref": "#/definitions/imdb.ImageItem" }, "type": "array" }, - "kill_participation": { - "example": 0.2, - "type": "number" - }, - "kills": { - "example": 1, - "type": "integer" - }, - "level": { - "example": 16, + "limit": { + "example": 50, "type": "integer" }, - "life_steal": { - "example": 0, - "type": "integer" + "name": { + "example": "Morgan Freeman", + "type": "string" }, - "magic_resistance": { - "example": 60, - "type": "integer" + "source_url": { + "example": "https://www.imdb.com/name/nm0000151/mediaindex/", + "type": "string" }, - "participant_id": { - "example": 1, + "total": { + "example": 1262, "type": "integer" }, - "rune_ids": { + "type_counts": { "items": { - "type": "integer" + "$ref": "#/definitions/imdb.ImageTypeCount" }, "type": "array" }, - "rune_style_id": { - "example": 8200, - "type": "integer" - }, - "rune_sub_style_id": { - "example": 8400, - "type": "integer" - }, - "skill_order": { - "example": [ - "Q" - ], + "types": { "items": { "type": "string" }, "type": "array" }, - "tenacity": { - "example": 0, - "type": "number" - }, - "total_gold_earned": { - "example": 10852, - "type": "integer" - }, - "wards_destroyed": { - "example": 5, - "type": "integer" - }, - "wards_placed": { - "example": 13, - "type": "integer" + "url": { + "example": "https://www.imdb.com/name/nm0000151/mediaindex/", + "type": "string" } }, "type": "object" }, - "lolesports.Event": { + "imdb.NameKnownForItem": { "properties": { - "block_name": { - "example": "Week 1", + "category": { + "description": "Credit category of the person on this title, for example `Director`.", + "example": "Director", "type": "string" }, - "games": { - "items": { - "$ref": "#/definitions/lolesports.GameVods" - }, - "type": "array" - }, - "league": { - "$ref": "#/definitions/lolesports.EventLeague" - }, - "match": { - "$ref": "#/definitions/lolesports.Match" + "id": { + "description": "IMDb title ID of the title.", + "example": "tt1375666", + "type": "string" }, - "start_time": { - "example": "2026-07-24T14:30:00Z", + "title": { + "description": "Name of the title.", + "example": "Inception", "type": "string" }, - "state": { - "enum": [ - "unstarted", - "inProgress", - "completed" - ], - "example": "completed", + "url": { + "description": "IMDb page URL of the title.", + "example": "https://www.imdb.com/title/tt1375666/", "type": "string" }, - "type": { - "example": "match", + "year": { + "description": "Release year of the title.", + "example": "2010", "type": "string" } }, "type": "object" }, - "lolesports.EventDetailResponse": { + "imdb.NameResponse": { "properties": { - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "bio": { + "description": "Full biography text of the person.", "type": "string" }, - "games": { - "items": { - "$ref": "#/definitions/lolesports.Game" - }, - "type": "array" + "birth_date": { + "description": "Date of birth as `YYYY-MM-DD`, or `YYYY-MM` or `YYYY` when IMDb records only part of it.", + "example": "1970-07-30", + "type": "string" }, - "id": { - "example": "117133816701918802", + "birth_place": { + "description": "Place of birth, for example `London, England, UK`.", + "example": "London, England, UK", "type": "string" }, - "league": { - "$ref": "#/definitions/lolesports.EventLeague" + "death_date": { + "description": "Date of death as `YYYY-MM-DD`, or `YYYY-MM` or `YYYY` when IMDb records only part of it.", + "type": "string" }, - "source_url": { - "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:46:16Z", "type": "string" }, - "strategy": { - "$ref": "#/definitions/lolesports.Strategy" + "id": { + "description": "IMDb name ID of the person, for example `nm0634240`.", + "example": "nm0634240", + "type": "string" }, - "streams": { + "image_url": { + "description": "URL of the person's main photo.", + "type": "string" + }, + "known_for": { + "description": "Titles IMDb lists the person as known for.", "items": { - "$ref": "#/definitions/lolesports.Stream" + "$ref": "#/definitions/imdb.NameKnownForItem" }, "type": "array" }, - "teams": { + "name": { + "description": "Name of the person as shown on IMDb.", + "example": "Christopher Nolan", + "type": "string" + }, + "professions": { + "description": "Professions IMDb lists for the person.", "items": { - "$ref": "#/definitions/lolesports.Team" + "type": "string" }, "type": "array" }, - "tournament_id": { - "example": "117133773242499009", + "public_page_derived": { + "description": "Always `true`. The data comes from IMDb's public pages.", + "example": true, + "type": "boolean" + }, + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.imdb.com/name/nm0634240/", "type": "string" }, - "type": { - "example": "match", + "url": { + "description": "IMDb page URL of the person.", + "example": "https://www.imdb.com/name/nm0634240/", "type": "string" } }, "type": "object" }, - "lolesports.EventLeague": { + "imdb.NameVideosResponse": { "properties": { - "id": { - "example": "98767991302996019", + "fetched_at": { + "example": "2026-09-14T14:46:16Z", "type": "string" }, - "name": { - "example": "LEC", - "type": "string" + "has_more": { + "example": true, + "type": "boolean" }, - "slug": { - "example": "lec", - "type": "string" - } - }, - "type": "object" - }, - "lolesports.GPRLeague": { - "properties": { "id": { + "example": "nm0000151", "type": "string" }, - "name": { - "example": "CBLOL", - "type": "string" + "limit": { + "example": 50, + "type": "integer" }, - "slug": { - "example": "cblol-brazil", + "name": { + "example": "Morgan Freeman", "type": "string" }, - "teams": { - "example": 4, - "type": "integer" - } - }, - "type": "object" - }, - "lolesports.GPRPoint": { - "properties": { - "date": { - "example": "2026-10-27T05:00:00Z", + "source_url": { + "example": "https://www.imdb.com/name/nm0000151/videogallery/", "type": "string" }, - "elo": { - "example": 1247, + "total": { + "example": 214, "type": "integer" }, - "rank": { - "example": 41, - "type": "integer" + "url": { + "example": "https://www.imdb.com/name/nm0000151/videogallery/", + "type": "string" }, - "score": { - "example": 1177, - "type": "integer" + "videos": { + "items": { + "$ref": "#/definitions/imdb.VideoItem" + }, + "type": "array" } }, "type": "object" }, - "lolesports.GPRRecord": { + "imdb.OpeningWeekend": { "properties": { - "losses": { - "example": 37, - "type": "integer" + "gross": { + "$ref": "#/definitions/imdb.Money" }, - "wins": { - "example": 46, + "theater_count": { + "example": 3, "type": "integer" + }, + "weekend_end_date": { + "example": "1994-09-25", + "type": "string" + }, + "weekend_start_date": { + "example": "1994-09-23", + "type": "string" } }, "type": "object" }, - "lolesports.GPRResponse": { + "imdb.ParentalGuideCategory": { "properties": { - "count": { - "example": 58, - "type": "integer" - }, - "end_date": { - "example": "2026-10-28", - "type": "string" - }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" - }, - "leagues": { + "items": { + "description": "Guide entries for this category. Entries IMDb files as spoilers are not included.", "items": { - "$ref": "#/definitions/lolesports.GPRLeague" + "type": "string" }, "type": "array" }, - "season": { - "enum": [ - "current", - "2025", - "2024" - ], - "example": "current", + "name": { + "description": "Category name, for example `Violence & Gore`.", + "example": "Violence & Gore", "type": "string" }, - "seasons": { - "items": { - "$ref": "#/definitions/lolesports.GPRSeasonLink" - }, - "type": "array" - }, - "source_url": { - "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", + "severity": { + "description": "Community severity vote: `none`, `mild`, `moderate` or `severe`. Omitted when IMDb has no vote.", + "example": "moderate", "type": "string" }, - "start_date": { - "example": "2026-01-01", + "slug": { + "description": "Lowercase, hyphenated form of the category name, for example `violence-gore`.", + "example": "violence-gore", "type": "string" - }, - "teams": { - "items": { - "$ref": "#/definitions/lolesports.GPRTeam" - }, - "type": "array" - }, - "total": { - "example": 58, - "type": "integer" } }, "type": "object" }, - "lolesports.GPRSeasonLink": { + "imdb.ParentalGuideResponse": { "properties": { - "kind": { - "enum": [ - "current", - "worlds" - ], - "example": "worlds", + "categories": { + "description": "Parental guide categories IMDb lists for the title.", + "items": { + "$ref": "#/definitions/imdb.ParentalGuideCategory" + }, + "type": "array" + }, + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:46:16Z", "type": "string" }, - "season": { - "example": "2025", + "id": { + "description": "IMDb title ID, for example `tt1375666`.", + "example": "tt1375666", "type": "string" }, - "url": { + "public_page_derived": { + "description": "Always `true`. The data comes from IMDb's public pages.", + "example": true, + "type": "boolean" + }, + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.imdb.com/title/tt1375666/parentalguide/", "type": "string" }, - "year": { - "example": "2025", + "summary": { + "allOf": [ + { + "$ref": "#/definitions/imdb.ParentalGuideSummary" + } + ], + "description": "Counts and highest severity across all returned categories." + }, + "url": { + "description": "IMDb parental guide page of the title.", + "example": "https://www.imdb.com/title/tt1375666/parentalguide/", "type": "string" } }, "type": "object" }, - "lolesports.GPRTeam": { + "imdb.ParentalGuideSummary": { "properties": { - "average_opponent_gpr": { - "example": 1132, + "categories_count": { + "description": "Number of guide categories returned.", + "example": 5, "type": "integer" }, - "date_calculated": { - "example": "2026-10-27T05:00:00Z", + "highest_severity": { + "description": "Highest severity among the categories: `none`, `mild`, `moderate` or `severe`.", + "example": "severe", "type": "string" }, - "elo": { - "example": 1247, + "item_count": { + "description": "Total number of guide entries across all categories.", + "example": 24, "type": "integer" }, - "game_record": { - "$ref": "#/definitions/lolesports.GPRRecord" - }, - "history": { + "present_categories": { + "description": "Slugs of the categories returned.", "items": { - "$ref": "#/definitions/lolesports.GPRPoint" + "type": "string" }, "type": "array" }, - "match_record": { - "$ref": "#/definitions/lolesports.GPRRecord" - }, - "previous_rank": { - "example": 42, - "type": "integer" - }, - "previous_score": { - "example": 1170, - "type": "integer" - }, - "rank": { - "example": 41, - "type": "integer" - }, - "rank_change": { - "example": 1, - "type": "integer" - }, - "score": { - "example": 1177, + "public_page_signals": { + "description": "Count of details in the guide: entries, named categories and categories that have a severity.", + "example": 12, "type": "integer" }, - "team": { - "$ref": "#/definitions/lolesports.GPRTeamRef" - }, - "tournaments": { - "items": { - "$ref": "#/definitions/lolesports.GPRTournament" + "severity_counts": { + "additionalProperties": { + "type": "integer" }, - "type": "array" + "description": "Number of categories at each severity level, keyed by severity.", + "type": "object" } }, "type": "object" }, - "lolesports.GPRTeamRef": { + "imdb.Person": { "properties": { - "code": { - "example": "LOUD", - "type": "string" - }, - "id": { - "example": "105397404796640412", - "type": "string" - }, - "image_url": { + "name": { + "description": "Name of the person.", + "example": "Christopher Nolan", "type": "string" }, - "league": { - "example": "CBLOL", + "url": { + "description": "IMDb page URL of the person.", + "example": "https://www.imdb.com/name/nm0634240/", "type": "string" - }, - "league_id": { + } + }, + "type": "object" + }, + "imdb.PublicFactItem": { + "properties": { + "category": { + "description": "Category is IMDb's own grouping for the row, e.g. \"Continuity\" or\n\"Revealing mistakes\" for goofs. Empty when IMDb files the row under an\nunnamed group, which is the usual case for trivia.", + "example": "Continuity", "type": "string" }, - "league_slug": { - "example": "cblol-brazil", - "type": "string" + "public_signals": { + "description": "Number of details filled in on this entry, counted across text and spoiler marker.", + "example": 1, + "type": "integer" }, - "name": { - "example": "LOUD", - "type": "string" + "spoiler": { + "description": "`true` when IMDb marks the entry as a spoiler.", + "example": false, + "type": "boolean" }, - "slug": { - "example": "loud", + "text": { + "description": "Text of the trivia, goof or quote entry.", + "example": "The hallway fight was filmed with a rotating set.", "type": "string" } }, "type": "object" }, - "lolesports.GPRTournament": { + "imdb.PublicFactsAnalysisSummary": { "properties": { - "end_time": { - "type": "string" - }, - "id": { - "example": "115548668059523728", - "type": "string" + "company_count": { + "example": 9, + "type": "integer" }, - "league": { - "example": "LEC", - "type": "string" + "company_section_count": { + "example": 3, + "type": "integer" }, - "losses": { + "filming_location_count": { "example": 6, "type": "integer" }, - "name": { - "example": "lec_2026_season", - "type": "string" + "goof_count": { + "example": 4, + "type": "integer" }, - "placement": { - "example": 2, + "keyword_count": { + "example": 20, "type": "integer" }, - "region_slug": { - "example": "europe", - "type": "string" + "public_fact_coverage_pages": { + "example": 6, + "type": "integer" }, - "slug": { - "type": "string" + "public_page_signals": { + "example": 64, + "type": "integer" }, - "start_time": { - "type": "string" + "quote_count": { + "example": 8, + "type": "integer" }, - "state": { - "example": "completed", - "type": "string" + "spoiler_fact_count": { + "example": 2, + "type": "integer" }, - "wins": { + "trivia_count": { "example": 12, "type": "integer" } }, "type": "object" }, - "lolesports.Game": { + "imdb.RatingCountrySummary": { "properties": { - "id": { - "example": "117133816701918803", - "type": "string" - }, - "number": { - "example": 1, - "type": "integer" - }, - "sides": { - "items": { - "$ref": "#/definitions/lolesports.GameSide" - }, - "type": "array" + "aggregate": { + "type": "number" }, - "state": { - "enum": [ - "unneeded", - "unstarted", - "inProgress", - "completed" - ], - "example": "completed", + "country": { "type": "string" }, - "vods": { - "items": { - "$ref": "#/definitions/lolesports.VOD" - }, - "type": "array" + "vote_count": { + "type": "integer" } }, "type": "object" }, - "lolesports.GameDetailsResponse": { + "imdb.RatingHistogramBucket": { "properties": { - "count": { - "example": 10, + "rating": { + "type": "integer" + }, + "vote_count": { "type": "integer" + } + }, + "type": "object" + }, + "imdb.RatingsResponse": { + "properties": { + "countries": { + "items": { + "$ref": "#/definitions/imdb.RatingCountrySummary" + }, + "type": "array" }, "fetched_at": { - "example": "2026-10-27T10:00:00Z", "type": "string" }, - "frames": { + "histogram": { "items": { - "$ref": "#/definitions/lolesports.DetailsFrame" + "$ref": "#/definitions/imdb.RatingHistogramBucket" }, "type": "array" }, - "game_id": { - "example": "117133816701918803", + "id": { "type": "string" }, + "rating_count": { + "type": "integer" + }, + "rating_value": { + "type": "number" + }, "source_url": { - "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "lolesports.GameSide": { + "imdb.ReleaseInfoItem": { "properties": { - "side": { - "enum": [ - "blue", - "red" - ], - "example": "blue", + "country": { + "description": "Country or region of the release.", + "example": "United States", "type": "string" }, - "team_id": { - "example": "111504538396430510", + "date": { + "description": "Release date as IMDb shows it, for example `16 July 2010`.", + "example": "16 July 2010", + "type": "string" + }, + "note": { + "description": "Note on the release, for example `theatrical`.", + "example": "theatrical", "type": "string" } }, "type": "object" }, - "lolesports.GameVods": { + "imdb.ReleaseInfoResponse": { "properties": { + "alternate_titles": { + "description": "Alternate titles (also known as) IMDb lists for the title.", + "items": { + "$ref": "#/definitions/imdb.AlternateTitle" + }, + "type": "array" + }, + "alternate_titles_total": { + "description": "Number of alternate titles IMDb lists for the title.", + "example": 82, + "type": "integer" + }, + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:46:16Z", + "type": "string" + }, + "has_more": { + "description": "`true` when IMDb lists more release dates than were returned.", + "example": true, + "type": "boolean" + }, "id": { - "example": "115548681803406276", + "description": "IMDb title ID, for example `tt1375666`.", + "example": "tt1375666", "type": "string" }, - "vods": { + "public_page_derived": { + "description": "Always `true`. The data comes from IMDb's public pages.", + "example": true, + "type": "boolean" + }, + "releases": { + "description": "Release dates of the title by country.", "items": { - "$ref": "#/definitions/lolesports.VOD" + "$ref": "#/definitions/imdb.ReleaseInfoItem" }, "type": "array" + }, + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.imdb.com/title/tt1375666/releaseinfo/", + "type": "string" + }, + "total": { + "description": "Number of release dates IMDb lists for the title.", + "example": 71, + "type": "integer" + }, + "url": { + "description": "IMDb release info page of the title.", + "example": "https://www.imdb.com/title/tt1375666/releaseinfo/", + "type": "string" } }, "type": "object" }, - "lolesports.GameWindowResponse": { + "imdb.ReviewItem": { "properties": { - "blue": { - "$ref": "#/definitions/lolesports.TeamMetadata" + "author": { + "description": "Username of the reviewer.", + "example": "movie_fan", + "type": "string" }, - "count": { - "example": 10, + "date": { + "description": "Date the review was posted, for example `2024-01-02`.", + "example": "2024-01-02", + "type": "string" + }, + "helpful_votes": { + "description": "Number of users who marked the review as helpful.", + "example": 123, "type": "integer" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "helpfulness": { + "description": "Share of votes that marked the review as helpful, as a percentage such as `82%`.", + "example": "82%", "type": "string" }, - "frames": { - "items": { - "$ref": "#/definitions/lolesports.WindowFrame" - }, - "type": "array" - }, - "game_id": { - "example": "117133816701918803", + "id": { + "description": "IMDb review ID, for example `rw1234567`.", + "example": "rw1234567", "type": "string" }, - "match_id": { - "example": "117133816701918802", + "public_signals": { + "description": "Number of details filled in on this review, counted across title, author, date, rating, text and votes.", + "example": 5, + "type": "integer" + }, + "rating": { + "description": "Rating the reviewer gave the title.", + "example": 9, + "type": "integer" + }, + "spoiler": { + "description": "`true` when the review is marked as containing spoilers.", + "example": false, + "type": "boolean" + }, + "text": { + "description": "Full text of the review.", "type": "string" }, - "patch": { - "example": "16.18.819.1060", + "title": { + "description": "Headline the reviewer gave the review.", + "example": "A smart blockbuster", "type": "string" }, - "red": { - "$ref": "#/definitions/lolesports.TeamMetadata" + "total_votes": { + "description": "Total number of helpful and not helpful votes the review received.", + "example": 150, + "type": "integer" }, - "source_url": { - "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", + "url": { + "description": "IMDb page URL of the review.", + "example": "https://www.imdb.com/review/rw1234567/", "type": "string" } }, "type": "object" }, - "lolesports.HomeLeague": { + "imdb.ReviewsResponse": { "properties": { - "name": { - "example": "LCK", + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:46:16Z", "type": "string" }, - "region": { - "example": "KOREA", + "has_more": { + "description": "`true` when IMDb lists more reviews than were returned.", + "example": true, + "type": "boolean" + }, + "id": { + "description": "IMDb title ID, for example `tt1375666`.", + "example": "tt1375666", + "type": "string" + }, + "limit": { + "description": "Maximum number of reviews requested.", + "example": 10, + "type": "integer" + }, + "public_page_derived": { + "description": "Always `true`. The data comes from IMDb's public pages.", + "example": true, + "type": "boolean" + }, + "reviews": { + "description": "User reviews of the title.", + "items": { + "$ref": "#/definitions/imdb.ReviewItem" + }, + "type": "array" + }, + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.imdb.com/title/tt1375666/reviews/", + "type": "string" + }, + "total": { + "description": "Number of reviews IMDb lists for the title.", + "example": 11940, + "type": "integer" + }, + "url": { + "description": "IMDb reviews page of the title.", + "example": "https://www.imdb.com/title/tt1375666/reviews/", "type": "string" } }, "type": "object" }, - "lolesports.League": { + "imdb.SearchItem": { "properties": { - "display_status": { - "enum": [ - "force_selected", - "selected", - "not_selected", - "hidden" - ], - "example": "selected", + "description": { + "description": "Lead cast of the title, when IMDb shows it.", "type": "string" }, "id": { - "example": "98767991302996019", + "description": "IMDb title ID, for example `tt1375666`.", + "example": "tt1375666", "type": "string" }, "image_url": { - "example": "https://static.lolesports.com/leagues/lec.png", + "description": "URL of the image IMDb shows for the title in search results.", "type": "string" }, - "name": { - "example": "LEC", + "title": { + "description": "Title name as shown in search results.", + "example": "Inception", "type": "string" }, - "priority": { - "example": 1, - "type": "integer" + "title_type": { + "description": "Kind of title, for example `Movie`.", + "example": "Movie", + "type": "string" }, - "region": { - "example": "EMEA", + "url": { + "description": "IMDb page URL of the title.", + "example": "https://www.imdb.com/title/tt1375666/", "type": "string" }, - "slug": { - "example": "lec", + "year": { + "description": "Release year of the title.", + "example": "2010", "type": "string" } }, "type": "object" }, - "lolesports.LeaguesResponse": { + "imdb.SearchResponse": { "properties": { - "count": { - "example": 51, - "type": "integer" - }, "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:46:16Z", "type": "string" }, - "leagues": { - "items": { - "$ref": "#/definitions/lolesports.League" - }, - "type": "array" + "limit": { + "description": "Maximum number of results requested.", + "example": 10, + "type": "integer" }, - "source_url": { - "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", + "query": { + "description": "Search query that was run.", + "example": "inception", "type": "string" - } - }, - "type": "object" - }, - "lolesports.LiveResponse": { - "properties": { - "count": { - "example": 0, - "type": "integer" }, - "events": { + "results": { + "description": "Titles matching the query.", "items": { - "$ref": "#/definitions/lolesports.Event" + "$ref": "#/definitions/imdb.SearchItem" }, "type": "array" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" - }, "source_url": { - "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", + "description": "URL the data was read from.", + "example": "https://www.imdb.com/find/?q=inception&s=tt", "type": "string" } }, "type": "object" }, - "lolesports.Match": { + "imdb.SearchTitleItem": { "properties": { - "flags": { + "certificate": { + "example": "PG-13", + "type": "string" + }, + "genres": { "example": [ - "hasVod" + "Action" ], "items": { "type": "string" @@ -128234,1397 +133085,1722 @@ "type": "array" }, "id": { - "example": "115548681803406275", + "example": "tt1375666", "type": "string" }, - "strategy": { - "$ref": "#/definitions/lolesports.Strategy" - }, - "teams": { - "items": { - "$ref": "#/definitions/lolesports.Team" - }, - "type": "array" - } - }, - "type": "object" - }, - "lolesports.NewsArticle": { - "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { - "example": "Everything You Need To Know About Worlds!", + "image_url": { "type": "string" }, - "external": { - "example": false, - "type": "boolean" + "metascore": { + "example": 74, + "type": "integer" }, - "external_url": { - "example": "https://www.youtube.com/watch?v=H_B91cxvCRQ", + "plot": { "type": "string" }, - "id": { - "example": "e18c9f59-8497-4196-af3f-18b2fac2b920.en-us", - "type": "string" + "rating_count": { + "example": 2600000, + "type": "integer" }, - "image_url": { - "example": "https://cdn.sanity.io/images/dsfx7636/news_live/0286cc9daee206f55cf722a3b2830ca3fdad7d59-1600x900.jpg", - "type": "string" + "rating_value": { + "example": 8.8, + "type": "number" }, - "path": { - "example": "/news/worlds-2026-primer", + "release_date": { + "example": "2010-07-16", "type": "string" }, - "published_at": { - "example": "2026-10-05T15:00:00.000Z", - "type": "string" + "runtime_minutes": { + "example": 148, + "type": "integer" }, "title": { - "example": "Worlds 2026 Primer", + "example": "Inception", + "type": "string" + }, + "title_type": { + "example": "movie", "type": "string" }, "url": { - "example": "https://lolesports.com/en-US/news/worlds-2026-primer", + "example": "https://www.imdb.com/title/tt1375666/", "type": "string" + }, + "year": { + "example": 2010, + "type": "integer" } }, "type": "object" }, - "lolesports.NewsResponse": { + "imdb.SearchTitleResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/lolesports.NewsArticle" - }, - "type": "array" - }, - "count": { - "example": 100, - "type": "integer" - }, "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "example": "2026-06-07T14:46:16Z", "type": "string" }, - "hl": { - "example": "en-US", - "type": "string" + "has_more": { + "example": true, + "type": "boolean" + }, + "limit": { + "example": 25, + "type": "integer" + }, + "results": { + "items": { + "$ref": "#/definitions/imdb.SearchTitleItem" + }, + "type": "array" }, "source_url": { - "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", + "example": "https://www.imdb.com/search/title/?genres=Action&title_type=feature", "type": "string" }, "total": { - "example": 100, + "example": 1968, "type": "integer" } }, "type": "object" }, - "lolesports.ParticipantMetadata": { + "imdb.SimilarResponse": { "properties": { - "champion_id": { - "example": "Sion", + "fetched_at": { "type": "string" }, - "participant_id": { - "example": 1, - "type": "integer" - }, - "player_id": { - "example": "102206337829139149", + "id": { "type": "string" }, - "role": { - "enum": [ - "top", - "jungle", - "mid", - "bottom", - "support" - ], - "example": "top", + "source_url": { "type": "string" }, - "summoner_name": { - "example": "SR Fudge", + "titles": { + "items": { + "$ref": "#/definitions/imdb.SimilarTitle" + }, + "type": "array" + }, + "url": { "type": "string" } }, "type": "object" }, - "lolesports.Player": { + "imdb.SimilarTitle": { "properties": { - "first_name": { - "example": "Sanghyeok", + "content_rating": { "type": "string" }, "id": { - "example": "98767991747728851", "type": "string" }, "image_url": { "type": "string" }, - "last_name": { - "example": "Lee", + "rating_count": { + "type": "integer" + }, + "rating_value": { + "type": "number" + }, + "runtime_minutes": { + "type": "integer" + }, + "title": { "type": "string" }, - "role": { - "enum": [ - "top", - "jungle", - "mid", - "bottom", - "support", - "none" - ], - "example": "mid", + "title_type": { "type": "string" }, - "summoner_name": { - "example": "Faker", + "url": { "type": "string" + }, + "year": { + "type": "integer" } }, "type": "object" }, - "lolesports.Ranking": { + "imdb.TechnicalSpecItem": { "properties": { - "ordinal": { - "example": 1, - "type": "integer" + "name": { + "description": "Name of the technical spec, for example `Runtime`.", + "example": "Runtime", + "type": "string" }, - "teams": { + "slug": { + "description": "Lowercase, hyphenated form of the spec name, for example `runtime`.", + "example": "runtime", + "type": "string" + }, + "values": { + "description": "Values IMDb lists for the spec.", "items": { - "$ref": "#/definitions/lolesports.Team" + "type": "string" }, "type": "array" } }, "type": "object" }, - "lolesports.Record": { + "imdb.TechnicalSpecsResponse": { "properties": { - "losses": { - "example": 0, - "type": "integer" + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:46:16Z", + "type": "string" }, - "wins": { - "example": 9, - "type": "integer" + "id": { + "description": "IMDb title ID, for example `tt1375666`.", + "example": "tt1375666", + "type": "string" + }, + "public_page_derived": { + "description": "Always `true`. The data comes from IMDb's public pages.", + "example": true, + "type": "boolean" + }, + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.imdb.com/title/tt1375666/technical/", + "type": "string" + }, + "specs": { + "description": "Technical specifications IMDb lists for the title.", + "items": { + "$ref": "#/definitions/imdb.TechnicalSpecItem" + }, + "type": "array" + }, + "url": { + "description": "IMDb technical specs page of the title.", + "example": "https://www.imdb.com/title/tt1375666/technical/", + "type": "string" } }, "type": "object" }, - "lolesports.ScheduleResponse": { + "imdb.TitleAwardsResponse": { "properties": { - "count": { - "example": 80, - "type": "integer" - }, - "events": { + "awards": { "items": { - "$ref": "#/definitions/lolesports.Event" + "$ref": "#/definitions/imdb.AwardItem" }, "type": "array" }, "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "example": "2026-06-07T14:46:16Z", "type": "string" }, - "newer_page_token": { - "type": "string" + "has_more": { + "example": true, + "type": "boolean" }, - "older_page_token": { + "id": { + "example": "tt1375666", "type": "string" }, + "public_page_derived": { + "example": true, + "type": "boolean" + }, "source_url": { - "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", + "example": "https://www.imdb.com/title/tt1375666/awards/", + "type": "string" + }, + "total": { + "example": 64, + "type": "integer" + }, + "url": { + "example": "https://www.imdb.com/title/tt1375666/awards/", "type": "string" } }, "type": "object" }, - "lolesports.Season": { + "imdb.TitleBoxOfficeResponse": { "properties": { - "end_time": { - "example": "2026-12-31T22:59:00Z", + "fetched_at": { + "example": "2026-09-17T14:46:16Z", "type": "string" }, - "id": { - "example": "115547545029543948", - "type": "string" + "has_box_office": { + "example": true, + "type": "boolean" }, - "name": { - "example": "lolesports_2026", + "id": { + "example": "tt0111161", "type": "string" }, - "slug": { - "example": "lolesports_2026", - "type": "string" + "lifetime_gross": { + "$ref": "#/definitions/imdb.LifetimeGross" }, - "split_count": { - "example": 6, - "type": "integer" + "opening_weekend": { + "$ref": "#/definitions/imdb.OpeningWeekend" }, - "splits": { - "items": { - "$ref": "#/definitions/lolesports.Split" - }, - "type": "array" + "production_budget": { + "$ref": "#/definitions/imdb.Money" }, - "start_time": { - "example": "2026-01-01T08:00:00Z", - "type": "string" - } - }, - "type": "object" - }, - "lolesports.SeasonLeague": { - "properties": { - "id": { - "example": "98767991302996019", + "source_url": { + "example": "https://www.imdb.com/title/tt0111161/", "type": "string" }, - "image_url": { + "title": { + "example": "The Shawshank Redemption", "type": "string" }, - "name": { - "example": "LEC", + "url": { + "example": "https://www.imdb.com/title/tt0111161/", "type": "string" } }, "type": "object" }, - "lolesports.SeasonsResponse": { + "imdb.TitleConnectionsResponse": { "properties": { - "count": { - "example": 2, - "type": "integer" + "connections": { + "items": { + "$ref": "#/definitions/imdb.ConnectionItem" + }, + "type": "array" }, "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "example": "2026-09-17T14:46:16Z", "type": "string" }, - "league_id": { - "example": "98767991302996019", + "has_more": { + "example": true, + "type": "boolean" + }, + "id": { + "example": "tt0111161", "type": "string" }, - "region": { + "limit": { + "example": 50, + "type": "integer" + }, + "source_url": { + "example": "https://www.imdb.com/title/tt0111161/", "type": "string" }, - "season_id": { - "example": "115547545029543948", + "title": { + "example": "The Shawshank Redemption", "type": "string" }, - "seasons": { - "items": { - "$ref": "#/definitions/lolesports.Season" - }, - "type": "array" + "total": { + "example": 999, + "type": "integer" }, - "source_url": { - "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", + "url": { + "example": "https://www.imdb.com/title/tt0111161/", "type": "string" } }, "type": "object" }, - "lolesports.Split": { + "imdb.TitleImagesResponse": { "properties": { - "description": { + "fetched_at": { + "example": "2026-09-09T14:46:16Z", "type": "string" }, - "end_time": { - "example": "2026-09-27T22:00:00Z", - "type": "string" + "has_more": { + "example": false, + "type": "boolean" }, "id": { - "example": "115548016979679447", + "example": "tt0089753", "type": "string" }, - "name": { - "example": "Split 3", - "type": "string" + "images": { + "items": { + "$ref": "#/definitions/imdb.ImageItem" + }, + "type": "array" }, - "region": { - "example": "REGIONAL", - "type": "string" + "limit": { + "example": 50, + "type": "integer" }, - "slug": { - "example": "split_3", + "source_url": { + "example": "https://www.imdb.com/title/tt0089753/mediaindex/", "type": "string" }, - "start_time": { - "example": "2026-07-19T22:00:00Z", + "title": { + "example": "Holly - The Movie", "type": "string" }, - "tournaments": { + "total": { + "example": 38, + "type": "integer" + }, + "type_counts": { "items": { - "$ref": "#/definitions/lolesports.SplitTournament" + "$ref": "#/definitions/imdb.ImageTypeCount" + }, + "type": "array" + }, + "types": { + "items": { + "type": "string" }, "type": "array" + }, + "url": { + "example": "https://www.imdb.com/title/tt0089753/mediaindex/", + "type": "string" } }, "type": "object" }, - "lolesports.SplitTournament": { + "imdb.TitlePublicFactsAnalysisResponse": { "properties": { - "id": { - "example": "115548681802226458", - "type": "string" + "company_credits": { + "$ref": "#/definitions/imdb.TitlePublicFactsResponse" }, - "league": { - "$ref": "#/definitions/lolesports.SeasonLeague" + "filming_locations": { + "$ref": "#/definitions/imdb.TitlePublicFactsResponse" }, - "name": { - "example": "Summer 2026", - "type": "string" + "goofs": { + "$ref": "#/definitions/imdb.TitlePublicFactsResponse" + }, + "keywords": { + "$ref": "#/definitions/imdb.TitlePublicFactsResponse" + }, + "missing_sections": { + "description": "MissingSections names the sections that failed, using the same keys as\nthe fields above (trivia, goofs, quotes, keywords, filming_locations,\ncompany_credits).", + "items": { + "type": "string" + }, + "type": "array" + }, + "not_viewing_advice": { + "example": true, + "type": "boolean" + }, + "partial": { + "description": "Partial is true when at least one section could not be fetched. The\nsections that did arrive are still populated and Summary still counts\nthem, so callers that need a complete analysis must check this rather\nthan infer completeness from a 200.", + "example": false, + "type": "boolean" + }, + "public_page_derived": { + "example": true, + "type": "boolean" + }, + "quotes": { + "$ref": "#/definitions/imdb.TitlePublicFactsResponse" + }, + "summary": { + "$ref": "#/definitions/imdb.PublicFactsAnalysisSummary" + }, + "trivia": { + "$ref": "#/definitions/imdb.TitlePublicFactsResponse" } }, "type": "object" }, - "lolesports.StandingMatch": { + "imdb.TitlePublicFactsResponse": { "properties": { - "flags": { + "company_credits": { + "description": "Company credits grouped by section. Filled when `type` is `company_credits`.", "items": { - "type": "string" + "$ref": "#/definitions/imdb.CompanySection" + }, + "type": "array" + }, + "facts": { + "description": "Trivia, goof or quote entries. Filled when `type` is `trivia`, `goofs` or `quotes`.", + "items": { + "$ref": "#/definitions/imdb.PublicFactItem" }, "type": "array" }, + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:46:16Z", + "type": "string" + }, + "has_more": { + "description": "`true` when IMDb lists more entries of this type than were returned.", + "example": true, + "type": "boolean" + }, "id": { - "example": "115548681803340575", + "description": "IMDb title ID, for example `tt1375666`.", + "example": "tt1375666", "type": "string" }, - "previous_match_ids": { + "keywords": { + "description": "Keywords tagged on the title. Filled when `type` is `keywords`.", "items": { - "type": "string" + "$ref": "#/definitions/imdb.KeywordItem" }, "type": "array" }, - "state": { - "example": "completed", - "type": "string" - }, - "teams": { + "locations": { + "description": "Filming locations of the title. Filled when `type` is `filming_locations`.", "items": { - "$ref": "#/definitions/lolesports.Team" + "$ref": "#/definitions/imdb.LocationItem" }, "type": "array" + }, + "public_page_derived": { + "description": "Always `true`. The data comes from IMDb's public pages.", + "example": true, + "type": "boolean" + }, + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.imdb.com/title/tt1375666/trivia/", + "type": "string" + }, + "total": { + "description": "Number of entries IMDb lists for this type.", + "example": 21, + "type": "integer" + }, + "type": { + "description": "Kind of data returned: `trivia`, `goofs`, `quotes`, `keywords`, `filming_locations` or `company_credits`.", + "example": "trivia", + "type": "string" + }, + "url": { + "description": "IMDb page of the title for this kind of data.", + "example": "https://www.imdb.com/title/tt1375666/trivia/", + "type": "string" } }, "type": "object" }, - "lolesports.StandingSection": { + "imdb.TitleResponse": { "properties": { - "matches": { + "cast": { + "description": "Up to three lead cast members.", "items": { - "$ref": "#/definitions/lolesports.StandingMatch" + "$ref": "#/definitions/imdb.Person" }, "type": "array" }, - "name": { - "example": "Regular Season", + "content_rating": { + "description": "Age rating shown for the title, for example `PG-13`.", + "example": "PG-13", "type": "string" }, - "rankings": { + "directors": { + "description": "Directors of the title.", "items": { - "$ref": "#/definitions/lolesports.Ranking" + "$ref": "#/definitions/imdb.Person" }, "type": "array" - } - }, - "type": "object" - }, - "lolesports.StandingStage": { - "properties": { - "id": { - "example": "115548681802750747", - "type": "string" }, - "name": { - "example": "Regular Season", + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:46:16Z", "type": "string" }, - "sections": { + "genres": { + "description": "Genres IMDb lists for the title.", + "example": [ + "Action" + ], "items": { - "$ref": "#/definitions/lolesports.StandingSection" + "type": "string" }, "type": "array" }, - "slug": { - "example": "regular_season", + "id": { + "description": "IMDb title ID, for example `tt1375666`.", + "example": "tt1375666", "type": "string" }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "lolesports.StandingsResponse": { - "properties": { - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "image_url": { + "description": "URL of the title's main image.", "type": "string" }, - "source_url": { - "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", + "plot": { + "description": "Plot summary of the title.", "type": "string" }, - "stages": { - "items": { - "$ref": "#/definitions/lolesports.StandingStage" - }, - "type": "array" + "popularity_rank": { + "description": "Current IMDb popularity rank of the title.", + "example": 82, + "type": "integer" }, - "tournament_id": { - "example": "115548681802226458", + "public_page_derived": { + "description": "Always `true`. The data comes from IMDb's public pages.", + "example": true, + "type": "boolean" + }, + "rating_count": { + "description": "Number of user ratings behind the rating value.", + "example": 2600000, + "type": "integer" + }, + "rating_value": { + "description": "Average IMDb user rating of the title.", + "example": 8.8, + "type": "number" + }, + "release_date": { + "description": "Release date of the title, for example `2010-07-16`.", + "example": "2010-07-16", "type": "string" - } - }, - "type": "object" - }, - "lolesports.Strategy": { - "properties": { - "count": { - "example": 3, + }, + "runtime_minutes": { + "description": "Running time of the title in minutes.", + "example": 148, "type": "integer" }, - "type": { - "example": "bestOf", + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.imdb.com/title/tt1375666/", "type": "string" - } - }, - "type": "object" - }, - "lolesports.Stream": { - "properties": { - "locale": { - "example": "en-GB", + }, + "title": { + "description": "Title name as shown on IMDb.", + "example": "Inception", "type": "string" }, - "parameter": { - "example": "lec", + "title_type": { + "description": "Kind of title, for example `Movie`.", + "example": "Movie", "type": "string" }, - "provider": { - "example": "twitch", + "url": { + "description": "IMDb page URL of the title.", + "example": "https://www.imdb.com/title/tt1375666/", + "type": "string" + }, + "year": { + "description": "Release year of the title.", + "example": "2010", "type": "string" } }, "type": "object" }, - "lolesports.Team": { + "imdb.TitleVideosResponse": { "properties": { - "code": { - "example": "T1", + "fetched_at": { + "example": "2026-09-14T14:46:16Z", "type": "string" }, - "game_wins": { - "example": 2, - "type": "integer" + "has_more": { + "example": true, + "type": "boolean" }, "id": { - "example": "98767991853197861", + "example": "tt1375666", "type": "string" }, - "image_url": { - "example": "https://static.lolesports.com/teams/t1.png", - "type": "string" + "limit": { + "example": 50, + "type": "integer" }, - "name": { - "example": "T1", + "source_url": { + "example": "https://www.imdb.com/title/tt1375666/videogallery/", "type": "string" }, - "outcome": { - "enum": [ - "win", - "loss" - ], - "example": "win", + "title": { + "example": "Inception", "type": "string" }, - "record": { - "$ref": "#/definitions/lolesports.Record" + "total": { + "example": 35, + "type": "integer" }, - "slug": { - "example": "t1", + "url": { + "example": "https://www.imdb.com/title/tt1375666/videogallery/", "type": "string" + }, + "videos": { + "items": { + "$ref": "#/definitions/imdb.VideoItem" + }, + "type": "array" } }, "type": "object" }, - "lolesports.TeamDetail": { + "imdb.VideoItem": { "properties": { - "code": { - "example": "T1", + "content_type": { + "example": "Trailer", "type": "string" }, - "home_league": { - "$ref": "#/definitions/lolesports.HomeLeague" + "duration_seconds": { + "example": 105, + "type": "integer" }, "id": { - "example": "98767991853197861", - "type": "string" - }, - "image_url": { + "example": "vi2959588889", "type": "string" }, - "name": { - "example": "T1", - "type": "string" + "position": { + "example": 1, + "type": "integer" }, - "players": { - "items": { - "$ref": "#/definitions/lolesports.Player" - }, - "type": "array" + "primary_title": { + "$ref": "#/definitions/imdb.VideoPrimaryTitle" }, - "slug": { - "example": "t1", - "type": "string" + "thumbnail": { + "$ref": "#/definitions/imdb.VideoThumbnail" }, - "status": { - "enum": [ - "active", - "archived" - ], - "example": "active", + "title": { + "example": "10th Anniversary Dream Trailer", "type": "string" } }, "type": "object" }, - "lolesports.TeamMetadata": { + "imdb.VideoPrimaryTitle": { "properties": { - "participants": { - "items": { - "$ref": "#/definitions/lolesports.ParticipantMetadata" - }, - "type": "array" + "id": { + "example": "tt1375666", + "type": "string" }, - "team_id": { - "example": "111504538396430510", + "title": { + "example": "Inception", + "type": "string" + }, + "url": { + "example": "https://www.imdb.com/title/tt1375666/", "type": "string" } }, "type": "object" }, - "lolesports.TeamTotals": { + "imdb.VideoThumbnail": { "properties": { - "barons": { - "example": 0, + "height": { + "example": 1071, "type": "integer" }, - "dragons": { - "example": [ - "infernal" - ], - "items": { - "type": "string" - }, - "type": "array" + "url": { + "example": "https://m.media-amazon.com/images/M/MV5BMTQ1ZmIzOTAtNDcwZi00NDVkLWE4NWItYWNhZGY1MmVlZGU0XkEyXkFqcGdeQWRvb2xpbmhk._V1_.jpg", + "type": "string" }, - "inhibitors": { - "example": 0, + "width": { + "example": 1905, "type": "integer" - }, - "participants": { - "items": { - "$ref": "#/definitions/lolesports.WindowParticipant" - }, - "type": "array" - }, - "total_gold": { - "example": 15621, + } + }, + "type": "object" + }, + "imdb.chartsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "total_kills": { - "example": 4, - "type": "integer" + "data": { + "$ref": "#/definitions/imdb.ChartResponse" }, - "towers": { - "example": 1, - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "lolesports.TeamsResponse": { + "imdb.creditsResponseDoc": { "properties": { - "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" - }, - "has_more": { - "example": false, - "type": "boolean" - }, - "limit": { - "example": 25, + "code": { + "example": 200, "type": "integer" }, - "page": { - "example": 1, - "type": "integer" + "data": { + "$ref": "#/definitions/imdb.CreditsResponse" }, - "source_url": { - "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", + "msg": { + "example": "OK", "type": "string" - }, - "teams": { - "items": { - "$ref": "#/definitions/lolesports.TeamDetail" - }, - "type": "array" - }, - "total": { - "example": 1, - "type": "integer" } }, "type": "object" }, - "lolesports.Tournament": { + "imdb.episodesResponseDoc": { "properties": { - "end_date": { - "example": "2026-09-20", - "type": "string" - }, - "id": { - "example": "115548681802226458", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "slug": { - "example": "lec_split_3_2026", - "type": "string" + "data": { + "$ref": "#/definitions/imdb.EpisodesResponse" }, - "start_date": { - "example": "2026-07-23", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "lolesports.TournamentsResponse": { + "imdb.imageTypesResponseDoc": { "properties": { - "count": { - "example": 12, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" - }, - "league_id": { - "example": "98767991302996019", - "type": "string" + "data": { + "$ref": "#/definitions/imdb.ImageTypesResponse" }, - "source_url": { - "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", + "msg": { + "example": "OK", "type": "string" - }, - "tournaments": { - "items": { - "$ref": "#/definitions/lolesports.Tournament" - }, - "type": "array" } }, "type": "object" }, - "lolesports.VOD": { + "imdb.nameAwardsResponseDoc": { "properties": { - "end_millis": { - "example": 2525000, + "code": { + "example": 200, "type": "integer" }, - "id": { - "example": "117401850612643795", - "type": "string" + "data": { + "$ref": "#/definitions/imdb.NameAwardsResponse" }, - "locale": { - "example": "fr-FR", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "imdb.nameCreditsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "parameter": { - "example": "xtq9wDAT3zg", - "type": "string" + "data": { + "$ref": "#/definitions/imdb.NameCreditsResponse" }, - "provider": { - "example": "youtube", + "msg": { + "example": "OK", "type": "string" - }, - "start_millis": { - "example": 121000, - "type": "integer" } }, "type": "object" }, - "lolesports.WindowFrame": { + "imdb.nameImagesResponseDoc": { "properties": { - "blue": { - "$ref": "#/definitions/lolesports.TeamTotals" - }, - "game_state": { - "enum": [ - "in_game", - "paused", - "finished" - ], - "example": "in_game", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "red": { - "$ref": "#/definitions/lolesports.TeamTotals" + "data": { + "$ref": "#/definitions/imdb.NameImagesResponse" }, - "timestamp": { - "example": "2026-10-07T10:20:00.000Z", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "lolesports.WindowParticipant": { + "imdb.nameResponseDoc": { "properties": { - "assists": { - "example": 2, + "code": { + "example": 200, "type": "integer" }, - "creep_score": { - "example": 54, - "type": "integer" + "data": { + "$ref": "#/definitions/imdb.NameResponse" }, - "current_health": { - "example": 640, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "imdb.nameVideosResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "deaths": { - "example": 0, - "type": "integer" + "data": { + "$ref": "#/definitions/imdb.NameVideosResponse" }, - "kills": { - "example": 1, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "imdb.parentalGuideResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "level": { - "example": 6, - "type": "integer" + "data": { + "$ref": "#/definitions/imdb.ParentalGuideResponse" }, - "max_health": { - "example": 1100, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "imdb.ratingsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "participant_id": { - "example": 1, - "type": "integer" + "data": { + "$ref": "#/definitions/imdb.RatingsResponse" }, - "total_gold": { - "example": 3200, - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "lululemon.CategoriesResponse": { + "imdb.releaseInfoResponseDoc": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/lululemon.CategoryEntry" - }, - "type": "array" - }, - "count": { + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" + "data": { + "$ref": "#/definitions/imdb.ReleaseInfoResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "lululemon.CategoryEntry": { + "imdb.reviewsResponseDoc": { "properties": { - "category": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "cdp_hash": { - "type": "string" + "data": { + "$ref": "#/definitions/imdb.ReviewsResponse" }, - "name": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "imdb.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "path": { - "items": { - "type": "string" - }, - "type": "array" - }, - "section": { - "type": "string" + "data": { + "$ref": "#/definitions/imdb.SearchResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "lululemon.CategoryResponse": { + "imdb.searchTitleResponseDoc": { "properties": { - "category": { - "description": "Category slug that was requested, such as `women-new-styles`.", - "type": "string" - }, - "cdp_hash": { - "description": "Short id segment of the category URL that was requested.", - "type": "string" - }, - "count": { - "description": "Number of products returned on this page.", + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "type": "string" - }, - "page": { - "description": "Page number returned, starting at 1.", - "type": "integer" + "data": { + "$ref": "#/definitions/imdb.SearchTitleResponse" }, - "page_size": { - "description": "Maximum number of products on a page.", + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "imdb.similarResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "products": { - "description": "Products listed on this page of the category.", - "items": { - "$ref": "#/definitions/lululemon.ProductSummary" - }, - "type": "array" + "data": { + "$ref": "#/definitions/imdb.SimilarResponse" }, - "source_url": { - "description": "URL the data was read from.", + "msg": { + "example": "OK", "type": "string" - }, - "total_products": { - "description": "Total number of products in the category.", - "type": "integer" } }, "type": "object" }, - "lululemon.OutfitItem": { + "imdb.technicalSpecsResponseDoc": { "properties": { - "category": { - "type": "string" - }, - "currency": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "id": { - "type": "string" + "data": { + "$ref": "#/definitions/imdb.TechnicalSpecsResponse" }, - "image_url": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "imdb.titleAwardsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "list_price": { - "type": "number" - }, - "on_sale": { - "type": "boolean" - }, - "sale_price": { - "type": "number" + "data": { + "$ref": "#/definitions/imdb.TitleAwardsResponse" }, - "title": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "imdb.titleBoxOfficeResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "url": { + "data": { + "$ref": "#/definitions/imdb.TitleBoxOfficeResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "lululemon.OutfitLook": { + "imdb.titleConnectionsResponseDoc": { "properties": { - "id": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "items": { - "items": { - "$ref": "#/definitions/lululemon.OutfitItem" - }, - "type": "array" + "data": { + "$ref": "#/definitions/imdb.TitleConnectionsResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "lululemon.OutfitResponse": { + "imdb.titleImagesResponseDoc": { "properties": { - "color_code": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "fetched_at": { - "type": "string" + "data": { + "$ref": "#/definitions/imdb.TitleImagesResponse" }, - "item": { - "$ref": "#/definitions/lululemon.OutfitItem" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "imdb.titlePublicFactsAnalysisResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "looks": { - "items": { - "$ref": "#/definitions/lululemon.OutfitLook" - }, - "type": "array" + "data": { + "$ref": "#/definitions/imdb.TitlePublicFactsAnalysisResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "imdb.titlePublicFactsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "unified_id": { + "data": { + "$ref": "#/definitions/imdb.TitlePublicFactsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "lululemon.ProductDetailColor": { + "imdb.titleResponseDoc": { "properties": { "code": { - "type": "string" + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/imdb.TitleResponse" }, - "swatch_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "lululemon.ProductDetailRating": { + "imdb.titleVideosResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "value": { - "type": "number" + "data": { + "$ref": "#/definitions/imdb.TitleVideosResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "lululemon.ProductDetailResponse": { + "importyeti.Company": { "properties": { - "activities": { - "items": { - "type": "string" - }, - "type": "array" - }, - "category": { + "address": { + "example": "Minneapolis, Mn 55402, Us", "type": "string" }, - "category_id": { + "also_known_as_addresses": { + "example": 145, + "type": "integer" + }, + "also_known_as_names": { + "example": 229, + "type": "integer" + }, + "avg_teu_per_month": { + "example": 48.52, + "type": "number" + }, + "avg_teu_per_shipment": { + "example": 7.19, + "type": "number" + }, + "est_shipping_spend": { + "example": "$27M", "type": "string" }, - "colors": { + "hs_codes": { "items": { - "$ref": "#/definitions/lululemon.ProductDetailColor" + "$ref": "#/definitions/importyeti.HSCode" }, "type": "array" }, - "currency": { + "last_shipment_date": { + "example": "07/16/2026", "type": "string" }, - "description": { + "name": { + "example": "Target 33 South 6Th Street Cc", "type": "string" }, - "fetched_at": { + "phone": { + "example": "XXX-XXX-X296", "type": "string" }, - "gender": { + "recent_shipments": { "items": { - "type": "string" + "$ref": "#/definitions/importyeti.Shipment" }, "type": "array" }, - "highlights": { + "region_breakdown": { "items": { - "type": "string" + "$ref": "#/definitions/importyeti.RegionBreakdown" }, "type": "array" }, - "name": { + "slug": { + "example": "target-33-south-6th-street-cc", "type": "string" }, - "on_sale": { - "type": "boolean" - }, - "price": { - "type": "number" - }, - "product_id": { + "source_url": { + "example": "https://www.importyeti.com/company/target", "type": "string" }, - "rating": { - "$ref": "#/definitions/lululemon.ProductDetailRating" - }, - "reviews": { - "items": { - "$ref": "#/definitions/lululemon.ProductDetailReview" - }, - "type": "array" - }, - "sizes": { + "suppliers": { "items": { - "type": "string" + "$ref": "#/definitions/importyeti.Supplier" }, "type": "array" }, - "skus": { - "items": { - "$ref": "#/definitions/lululemon.ProductDetailSKU" - }, - "type": "array" + "total_shipments": { + "example": 9123, + "type": "integer" }, - "source_url": { + "url": { + "example": "https://www.importyeti.com/company/target-33-south-6th-street-cc", "type": "string" }, - "unified_id": { + "website": { + "example": "www.target.com", "type": "string" - }, - "url": { + } + }, + "type": "object" + }, + "importyeti.CountryShipments": { + "properties": { + "country": { + "example": "China", "type": "string" + }, + "shipments": { + "example": 4267, + "type": "integer" } }, "type": "object" }, - "lululemon.ProductDetailReview": { + "importyeti.HSCode": { "properties": { - "badge": { + "code": { + "example": "6404.19.9092", "type": "string" }, - "body": { + "description": { + "example": "Valued over $12/pair", "type": "string" }, - "fit": { + "product_description": { + "example": "Footwear Po- 1101064043 Hs Code-6404199092", "type": "string" }, - "id": { + "sample_bill_of_lading": { + "example": "APLU050437011", "type": "string" + } + }, + "type": "object" + }, + "importyeti.RegionBreakdown": { + "properties": { + "countries": { + "items": { + "$ref": "#/definitions/importyeti.CountryShipments" + }, + "type": "array" }, - "rating": { + "percent": { + "example": 80.3, "type": "number" }, - "size_purchased": { + "region": { + "example": "Asia", "type": "string" + } + }, + "type": "object" + }, + "importyeti.SearchResponse": { + "properties": { + "page": { + "example": 1, + "type": "integer" }, - "submitted_at": { + "query": { + "example": "nike", "type": "string" }, - "title": { + "results": { + "items": { + "$ref": "#/definitions/importyeti.SearchResult" + }, + "type": "array" + }, + "source_url": { "type": "string" }, - "verified_buyer": { - "type": "boolean" + "total_hits": { + "example": 135, + "type": "integer" + }, + "total_pages": { + "example": 14, + "type": "integer" } }, "type": "object" }, - "lululemon.ProductDetailSKU": { + "importyeti.SearchResult": { "properties": { - "available": { - "type": "boolean" - }, - "color_code": { + "address": { + "example": "1 Bowerman Dr, Beaverton, Or 97005, Us", "type": "string" }, - "color_name": { + "country_code": { + "example": "US", "type": "string" }, - "id": { + "kind": { + "example": "company", "type": "string" }, - "on_sale": { - "type": "boolean" - }, - "price": { - "type": "number" + "most_recent_shipment": { + "example": "23/11/2024", + "type": "string" }, - "sale_price": { - "type": "number" + "other_addresses_count": { + "example": 27, + "type": "integer" }, - "size": { - "type": "string" + "other_names_count": { + "example": 17, + "type": "integer" }, - "style_id": { + "slug": { + "example": "nike", "type": "string" }, - "style_number": { + "title": { + "example": "Nike", "type": "string" }, - "url": { - "type": "string" + "total_shipments": { + "example": 560, + "type": "integer" } }, "type": "object" }, - "lululemon.ProductSummary": { + "importyeti.Shipment": { "properties": { - "activities": { - "description": "Activities the product is designed for, such as `Casual` or `Lounge`.", - "items": { - "type": "string" - }, - "type": "array" + "bill_of_lading": { + "example": "MOSJMK0H2607003", + "type": "string" }, - "category": { - "description": "Name of the product's category, such as `Sweatpants`.", + "containers": { + "example": "1", "type": "string" }, - "category_id": { - "description": "Id of the product's category, such as `womens-sweatpants`.", + "date": { + "example": "07/16/2026", "type": "string" }, - "colors": { - "description": "Names of the colors the product comes in. Positions match `style_numbers`.", - "items": { - "type": "string" - }, - "type": "array" + "description": { + "example": "Kart Chains", + "type": "string" }, - "currency": { - "description": "Currency code of the prices, such as `USD`.", + "estimated_freight_cost": { + "example": "$ 2,563.26", "type": "string" }, - "id": { - "description": "lululemon product id.", + "quantity": { + "example": "2 ctn", "type": "string" }, - "image_url": { - "description": "URL of the first image lululemon lists for the product.", + "route": { + "example": "Asia US Pacific", "type": "string" }, - "list_price": { - "description": "List price of the product.", - "type": "number" + "supplier_location": { + "example": "Kaga Shi, Japan", + "type": "string" }, - "name": { - "description": "Product name as shown on lululemon.", + "supplier_name": { + "example": "Enuma Chain Mfg Co Ltd", "type": "string" }, - "new_arrival": { - "description": "Whether lululemon flags the product as a new arrival.", - "type": "boolean" + "supplier_slug": { + "example": "enuma-chain-mfg", + "type": "string" }, - "on_sale": { - "description": "Whether the product is on sale.", - "type": "boolean" + "weight": { + "example": "959 kg", + "type": "string" + } + }, + "type": "object" + }, + "importyeti.Supplier": { + "properties": { + "city": { + "example": "Maria Fe", + "type": "string" }, - "price": { - "description": "Current price of the product.", - "type": "number" + "country": { + "example": "Philippines", + "type": "string" }, - "sale_price": { - "description": "Sale price of the product. Set only when `on_sale` is `true`.", - "type": "number" + "description": { + "type": "string" }, - "sizes": { - "description": "Sizes the product is available in.", + "hs_codes": { + "example": [ + "4602.19", + "8504.40" + ], "items": { "type": "string" }, "type": "array" }, - "style_numbers": { - "description": "Style numbers of the product, one per color. Positions match `colors`.", + "name": { + "example": "Durus Industries", + "type": "string" + }, + "product_categories": { + "example": [ + "Furnitures", + "Toys" + ], "items": { "type": "string" }, "type": "array" }, - "unified_id": { - "description": "lululemon's unified product id, a slug such as `Scuba-Evolve-Straight-Leg-Pant-Regular`.", + "slug": { + "example": "durus-industries", "type": "string" }, - "url": { - "description": "URL of the product page on lululemon.", - "type": "string" + "total_shipments": { + "example": 308, + "type": "integer" } }, "type": "object" }, - "lululemon.Store": { + "importyeti.companyResponseDoc": { "properties": { - "address": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/importyeti.Company" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "importyeti.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "amenities": { - "$ref": "#/definitions/lululemon.StoreAmenities" + "data": { + "$ref": "#/definitions/importyeti.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "indeed.Job": { + "properties": { + "benefits": { + "items": { + "type": "string" + }, + "type": "array" }, "city": { + "example": "New York", "type": "string" }, - "country": { + "company": { + "example": "dv01", "type": "string" }, - "distance_miles": { + "company_rating": { + "example": 3.5, "type": "number" }, - "hours": { + "company_review_count": { + "example": 20, + "type": "integer" + }, + "company_url": { + "example": "https://www.indeed.com/cmp/Dv01", + "type": "string" + }, + "country": { + "example": "US", + "type": "string" + }, + "description_html": { + "type": "string" + }, + "description_text": { + "type": "string" + }, + "direct_apply": { + "example": true, + "type": "boolean" + }, + "employment_type": { "items": { - "$ref": "#/definitions/lululemon.StoreHours" + "type": "string" }, "type": "array" }, - "id": { + "job_key": { + "example": "a055dc6ab3a91a3b", "type": "string" }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" + "location": { + "example": "New York, NY 10003", + "type": "string" }, - "message": { + "postal_code": { + "example": "10003", "type": "string" }, - "name": { + "posted_at": { + "example": "2026-06-29T16:52:09Z", "type": "string" }, - "slug": { + "remote": { + "example": false, + "type": "boolean" + }, + "salary_currency": { + "example": "USD", "type": "string" }, - "state": { + "salary_max": { + "example": 160000, + "type": "number" + }, + "salary_min": { + "example": 140000, + "type": "number" + }, + "salary_period": { + "example": "yearly", "type": "string" }, - "state_name": { + "salary_text": { + "example": "$140,000 - $160,000 a year", "type": "string" }, - "status": { + "state": { + "example": "NY", "type": "string" }, - "store_type": { + "title": { + "example": "Senior Backend Engineer", "type": "string" }, "url": { + "example": "https://www.indeed.com/viewjob?jk=a055dc6ab3a91a3b", + "type": "string" + }, + "valid_through": { + "example": "2026-11-10T07:28:05Z", "type": "string" } }, "type": "object" }, - "lululemon.StoreAmenities": { + "indeed.JobCard": { "properties": { - "buy_online_pickup_store": { - "type": "boolean" + "city": { + "example": "New York", + "type": "string" }, - "complementary_hemming": { - "type": "boolean" + "company": { + "example": "dv01", + "type": "string" }, - "curbside_pickup": { - "type": "boolean" + "company_rating": { + "example": 3.6, + "type": "number" }, - "footwear": { - "type": "boolean" + "company_review_count": { + "example": 20, + "type": "integer" }, - "has_mirror": { + "indeed_applyable": { + "example": true, "type": "boolean" }, - "like_new": { + "job_key": { + "example": "a055dc6ab3a91a3b", + "type": "string" + }, + "job_types": { + "items": { + "type": "string" + }, + "type": "array" + }, + "location": { + "example": "New York, NY 10003", + "type": "string" + }, + "new_job": { + "example": false, "type": "boolean" }, - "personal_shopping": { + "postal_code": { + "example": "10003", + "type": "string" + }, + "posted_at": { + "example": "2026-06-29T16:52:09Z", + "type": "string" + }, + "posted_relative": { + "example": "13 days ago", + "type": "string" + }, + "remote": { + "example": false, "type": "boolean" }, - "returns_exchanges": { + "salary_currency": { + "example": "USD", + "type": "string" + }, + "salary_max": { + "example": 160000, + "type": "number" + }, + "salary_min": { + "example": 140000, + "type": "number" + }, + "salary_period": { + "example": "yearly", + "type": "string" + }, + "salary_text": { + "example": "$140,000 - $160,000 a year", + "type": "string" + }, + "snippet": { + "example": "Interact with a diverse team...", + "type": "string" + }, + "sponsored": { + "example": true, "type": "boolean" - } - }, - "type": "object" - }, - "lululemon.StoreHours": { - "properties": { - "close": { + }, + "state": { + "example": "NY", "type": "string" }, - "day": { + "title": { + "example": "Senior Backend Engineer", "type": "string" }, - "open": { + "urgently_hiring": { + "example": false, + "type": "boolean" + }, + "url": { + "example": "https://www.indeed.com/viewjob?jk=a055dc6ab3a91a3b", "type": "string" } }, "type": "object" }, - "lululemon.StoresResponse": { + "indeed.LocationSuggestResponse": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "source_url": { + "query": { + "example": "Austin", "type": "string" }, - "stores": { + "suggestions": { "items": { - "$ref": "#/definitions/lululemon.Store" + "$ref": "#/definitions/indeed.LocationSuggestion" }, "type": "array" } }, "type": "object" }, - "lululemon.categoriesResponseDoc": { + "indeed.LocationSuggestion": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/lululemon.CategoriesResponse" + "name": { + "example": "Austin, TX (Travis County)", + "type": "string" }, - "msg": { - "example": "OK", + "source": { + "example": "PRECISELY", "type": "string" } }, "type": "object" }, - "lululemon.categoryResponseDoc": { + "indeed.SearchResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "jobs": { + "items": { + "$ref": "#/definitions/indeed.JobCard" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/lululemon.CategoryResponse" + "location": { + "example": "New York, NY", + "type": "string" }, - "msg": { - "example": "OK", + "page": { + "example": 1, + "type": "integer" + }, + "query": { + "example": "software engineer", "type": "string" + }, + "total": { + "example": 3040, + "type": "integer" } }, "type": "object" }, - "lululemon.outfitResponseDoc": { + "indeed.jobResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/lululemon.OutfitResponse" + "$ref": "#/definitions/indeed.Job" }, "msg": { "example": "OK", @@ -129633,14 +134809,14 @@ }, "type": "object" }, - "lululemon.productDetailResponseDoc": { + "indeed.locationSuggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/lululemon.ProductDetailResponse" + "$ref": "#/definitions/indeed.LocationSuggestResponse" }, "msg": { "example": "OK", @@ -129649,14 +134825,14 @@ }, "type": "object" }, - "lululemon.storesResponseDoc": { + "indeed.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/lululemon.StoresResponse" + "$ref": "#/definitions/indeed.SearchResponse" }, "msg": { "example": "OK", @@ -129665,15 +134841,12 @@ }, "type": "object" }, - "macrumors.AuthorArticle": { + "independent.AuthorArticle": { "properties": { - "image_url": { - "type": "string" - }, - "published_at": { + "section": { "type": "string" }, - "summary": { + "section_url": { "type": "string" }, "title": { @@ -129685,18 +134858,18 @@ }, "type": "object" }, - "macrumors.AuthorResponse": { + "independent.AuthorResponse": { "properties": { "articles": { "items": { - "$ref": "#/definitions/macrumors.AuthorArticle" + "$ref": "#/definitions/independent.AuthorArticle" }, "type": "array" }, "bio": { "type": "string" }, - "image_url": { + "job_title": { "type": "string" }, "name": { @@ -129705,104 +134878,73 @@ "slug": { "type": "string" }, + "twitter": { + "type": "string" + }, "url": { "type": "string" } }, "type": "object" }, - "macys.ProductColor": { + "indianexpress.AuthorArticle": { "properties": { - "current_price": { - "type": "number" + "image_url": { + "type": "string" }, - "id": { + "published_at": { "type": "string" }, - "name": { + "summary": { "type": "string" }, - "on_sale": { - "type": "boolean" + "title": { + "type": "string" }, - "regular_price": { - "type": "number" + "url": { + "type": "string" } }, "type": "object" }, - "macys.ProductDetailResponse": { + "indianexpress.AuthorResponse": { "properties": { - "available": { - "type": "boolean" - }, - "brand": { - "type": "string" - }, - "bullet_points": { + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/indianexpress.AuthorArticle" }, "type": "array" }, - "categories": { + "biography": { "items": { "type": "string" }, "type": "array" }, - "colors": { - "items": { - "$ref": "#/definitions/macys.ProductColor" - }, - "type": "array" - }, - "currency_code": { - "type": "string" - }, - "current_price": { - "type": "number" - }, - "department_name": { + "image_url": { "type": "string" }, - "description": { + "name": { "type": "string" }, - "division_name": { + "url": { "type": "string" - }, - "fetched_at": { + } + }, + "type": "object" + }, + "indiatoday.AuthorArticle": { + "properties": { + "image_url": { "type": "string" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" - }, - "low_availability": { - "type": "boolean" - }, - "name": { + "section": { "type": "string" }, - "on_sale": { - "type": "boolean" - }, - "product_id": { + "summary": { "type": "string" }, - "rating": { - "type": "number" - }, - "regular_price": { - "type": "number" - }, - "review_count": { - "type": "integer" - }, - "source_url": { + "title": { "type": "string" }, "url": { @@ -129811,171 +134953,125 @@ }, "type": "object" }, - "macys.ProductReviewsResponse": { + "indiatoday.AuthorResponse": { "properties": { - "average_rating": { - "type": "number" - }, - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "product_id": { - "type": "string" - }, - "rating_count": { - "description": "RatingCount, AverageRating, RecommendedRatio, and RatingHistogram are\nthe product's site-wide aggregate rating summary, not just this page --\nabsent (zero-valued) for a product with no reviews yet.", - "type": "integer" - }, - "rating_histogram": { - "description": "RatingHistogram is the count of ratings per star, ascending: index 0 is\n1-star, index 4 is 5-star.", + "articles": { "items": { - "type": "integer" + "$ref": "#/definitions/indiatoday.AuthorArticle" }, "type": "array" }, - "recommended_ratio": { - "type": "number" - }, - "reviews": { + "biography": { "items": { - "$ref": "#/definitions/macys.Review" + "type": "string" }, "type": "array" }, - "source_url": { + "image_url": { "type": "string" }, - "total_pages": { - "type": "integer" + "name": { + "type": "string" }, - "total_reviews": { - "type": "integer" + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "macys.Review": { + "indiewire.AuthorArticle": { "properties": { - "author": { - "type": "string" - }, - "body": { + "published_at": { "type": "string" }, - "id": { + "section": { "type": "string" }, - "location": { + "summary": { "type": "string" }, - "rating": { - "type": "integer" - }, - "ratings_only": { - "description": "RatingsOnly marks a review that carries only a star rating with no\nwritten title/body -- confirmed live 2026-08-11 that Macy's review\nplatform allows these and this endpoint still surfaces them.", - "type": "boolean" - }, - "recommended": { - "type": "boolean" - }, - "submitted_at": { + "title": { "type": "string" }, - "title": { + "url": { "type": "string" } }, "type": "object" }, - "macys.SuggestResponse": { + "indiewire.AuthorResponse": { "properties": { - "count": { - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/indiewire.AuthorArticle" + }, + "type": "array" }, - "fetched_at": { - "type": "string" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "query": { + "has_next_page": { + "type": "boolean" + }, + "headshot_url": { "type": "string" }, - "source_url": { + "name": { "type": "string" }, - "suggestions": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "macys.productDetailResponseDoc": { - "properties": { - "code": { - "example": 200, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/macys.ProductDetailResponse" + "social_links": { + "additionalProperties": { + "type": "string" + }, + "type": "object" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "macys.productReviewsResponseDoc": { + "inews.AuthorArticle": { "properties": { - "code": { - "example": 200, - "type": "integer" + "image_url": { + "type": "string" }, - "data": { - "$ref": "#/definitions/macys.ProductReviewsResponse" + "published_at": { + "type": "string" }, - "msg": { - "example": "OK", + "section": { "type": "string" - } - }, - "type": "object" - }, - "macys.suggestResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/macys.SuggestResponse" + "summary": { + "type": "string" }, - "msg": { - "example": "OK", + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "makeuseof.AuthorResponse": { + "inews.AuthorResponse": { "properties": { "articles": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/inews.AuthorArticle" }, "type": "array" }, - "biography": { + "bio": { "type": "string" }, "image_url": { @@ -129984,23 +135080,26 @@ "name": { "type": "string" }, - "social_links": { + "same_as": { "items": { - "$ref": "#/definitions/valnet.AuthorSocialLink" + "type": "string" }, "type": "array" }, - "title": { - "type": "string" - }, "url": { "type": "string" } }, "type": "object" }, - "marketwatch.AuthorArticle": { + "inquirer.AuthorArticle": { "properties": { + "category": { + "type": "string" + }, + "published_at": { + "type": "string" + }, "title": { "type": "string" }, @@ -130010,794 +135109,1194 @@ }, "type": "object" }, - "marketwatch.AuthorResponse": { + "inquirer.AuthorResponse": { "properties": { "articles": { "items": { - "$ref": "#/definitions/marketwatch.AuthorArticle" + "$ref": "#/definitions/inquirer.AuthorArticle" }, "type": "array" }, - "bio": { - "type": "string" - }, - "job_title": { - "type": "string" - }, "name": { "type": "string" }, - "slug": { - "type": "string" + "page": { + "type": "integer" }, "url": { "type": "string" - }, - "works_for": { - "type": "string" } }, "type": "object" }, - "mashable.AuthorResponse": { + "instacart.Department": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" - }, - "has_next_page": { - "type": "boolean" - }, - "image_url": { + "id": { "type": "string" }, "name": { "type": "string" }, - "page": { - "type": "integer" - }, "slug": { "type": "string" }, - "social_links": { + "subcategories": { "items": { - "$ref": "#/definitions/mashable.AuthorSocialLink" + "$ref": "#/definitions/instacart.Subcategory" + }, + "type": "array" + } + }, + "type": "object" + }, + "instacart.DepartmentsResponse": { + "properties": { + "departments": { + "items": { + "$ref": "#/definitions/instacart.Department" }, "type": "array" }, - "title": { - "type": "string" - }, - "url": { + "shop_id": { "type": "string" } }, "type": "object" }, - "mashable.AuthorSocialLink": { + "instacart.ItemNutrition": { "properties": { - "platform": { + "label": { "type": "string" }, - "url": { + "unit": { + "type": "string" + }, + "value": { "type": "string" } }, "type": "object" }, - "mcdonalds.CategoriesResponse": { + "instacart.ItemPrice": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/mcdonalds.Category" - }, - "type": "array" - }, - "count": { - "example": 13, - "type": "integer" + "current_price": { + "type": "number" }, - "country": { - "description": "Country echoes the market these slugs belong to. Slugs are NOT\nportable across markets -- pass the same country back to\n/mcdonalds/menu.", - "example": "us", + "offer_label": { "type": "string" }, - "fetched_at": { - "type": "string" + "on_sale": { + "type": "boolean" }, - "source_url": { + "pricing_unit": { "type": "string" + }, + "regular_price": { + "type": "number" } }, "type": "object" }, - "mcdonalds.Category": { + "instacart.ItemResponse": { "properties": { - "name": { - "example": "Breakfast", - "type": "string" + "available": { + "type": "boolean" }, - "slug": { - "example": "breakfast", + "brand_name": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "mcdonalds.ItemComponent": { - "properties": { - "allergens": { + "dietary_labels": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { "type": "string" }, - "ingredients": { + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "mcdonalds.ItemListEntry": { - "properties": { - "allergens": { + }, + "name": { "type": "string" }, - "components": { - "description": "Components is the per-part ingredient/allergen breakdown -- e.g. a\nburger's bun, patty, cheese and condiment each carry their own\nstatement. Absent for a single-part item.", + "nutrition": { "items": { - "$ref": "#/definitions/mcdonalds.ItemComponent" + "$ref": "#/definitions/instacart.ItemNutrition" }, "type": "array" }, - "description": { + "price": { + "$ref": "#/definitions/instacart.ItemPrice" + }, + "product_id": { "type": "string" }, - "image_url": { + "size": { "type": "string" }, - "ingredients": { + "stock_level": { "type": "string" }, - "item_id": { - "example": "200466", + "variant_options_summary": { + "type": "string" + } + }, + "type": "object" + }, + "instacart.SearchNearbyResponse": { + "properties": { + "postal_code": { "type": "string" }, - "name": { - "example": "Quarter Pounder with Cheese", + "query": { "type": "string" }, - "nutrients": { + "suggestions": { "items": { - "$ref": "#/definitions/mcdonalds.Nutrient" + "$ref": "#/definitions/instacart.SearchSuggestion" }, "type": "array" } }, "type": "object" }, - "mcdonalds.ItemListResponse": { + "instacart.SearchResponse": { "properties": { - "count": { - "example": 3, - "type": "integer" - }, - "country": { - "example": "us", + "query": { "type": "string" }, - "fetched_at": { + "shop_id": { "type": "string" }, - "items": { + "suggestions": { "items": { - "$ref": "#/definitions/mcdonalds.ItemListEntry" + "$ref": "#/definitions/instacart.SearchSuggestion" }, "type": "array" + } + }, + "type": "object" + }, + "instacart.SearchSuggestion": { + "properties": { + "relative_url": { + "type": "string" }, - "requested": { - "description": "Requested echoes the id list as asked for, so a caller can tell which\nids McDonald's returned nothing for.", - "items": { - "type": "string" - }, - "type": "array" + "term": { + "type": "string" }, - "source_url": { + "thumbnail_url": { "type": "string" } }, "type": "object" }, - "mcdonalds.ItemResponse": { + "instacart.Store": { "properties": { - "allergens": { - "description": "Allergens is McDonald's own allergen statement for the item.", - "type": "string" + "accepts_ebt": { + "description": "AcceptsEBT, SaverStore, and DeliveryETA are best-effort enrichment:\nseparate upstream calls (ShopTags, GetAccurateVisitorRetailerEtas)\nmade after the base store list, matched back by shop/retailer id. A\nfailure fetching either leaves these fields at their zero value\nrather than failing the whole Stores response -- see Service.Stores.", + "type": "boolean" }, - "country": { - "description": "Country echoes the market this item was read from. Item ids are NOT\nportable across markets.", - "example": "us", + "delivery_eta": { "type": "string" }, - "description": { + "logo_url": { "type": "string" }, - "fetched_at": { + "name": { "type": "string" }, - "image_url": { + "retailer_id": { "type": "string" }, - "ingredients": { - "description": "Ingredients is the full ingredient statement.", + "retailer_location_id": { "type": "string" }, - "item_id": { - "example": "200463", + "retailer_type": { "type": "string" }, - "name": { - "example": "Big Mac", + "saver_store": { + "type": "boolean" + }, + "service_type": { "type": "string" }, - "nutrients": { - "description": "Nutrients are the published per-serving nutrition values.", - "items": { - "$ref": "#/definitions/mcdonalds.Nutrient" - }, - "type": "array" + "shop_id": { + "type": "string" }, - "source_url": { + "slug": { "type": "string" } }, "type": "object" }, - "mcdonalds.MenuItemSummary": { + "instacart.StoreSearchResponse": { "properties": { - "calories": { - "description": "Calories is McDonald's own per-item calorie label where the category\npage prints one; often blank.", - "example": "460 Cal.", - "type": "string" - }, - "image_url": { + "postal_code": { "type": "string" }, - "item_id": { - "example": "200300", + "stores": { + "items": { + "$ref": "#/definitions/instacart.Store" + }, + "type": "array" + } + }, + "type": "object" + }, + "instacart.Subcategory": { + "properties": { + "id": { "type": "string" }, "name": { - "example": "Bacon, Egg & Cheese Biscuit", "type": "string" }, - "product_url": { + "slug": { "type": "string" } }, "type": "object" }, - "mcdonalds.MenuResponse": { + "instacart.TrendingResponse": { "properties": { - "category": { - "example": "breakfast", - "type": "string" - }, - "count": { - "example": 32, - "type": "integer" - }, - "country": { - "example": "us", - "type": "string" - }, - "fetched_at": { + "postal_code": { "type": "string" }, - "items": { + "terms": { "items": { - "$ref": "#/definitions/mcdonalds.MenuItemSummary" + "$ref": "#/definitions/instacart.SearchSuggestion" }, "type": "array" + } + }, + "type": "object" + }, + "instacart.departmentsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "source_url": { + "data": { + "$ref": "#/definitions/instacart.DepartmentsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "mcdonalds.Nutrient": { + "instacart.itemResponseDoc": { "properties": { - "daily_value": { - "description": "DailyValue is the percent-daily-value where McDonald's prints one.", - "example": "45", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "key": { - "description": "Key is McDonald's stable machine identifier for the nutrient\n(e.g. \"calories\"), safer to match on than the display name.", - "example": "calories", - "type": "string" + "data": { + "$ref": "#/definitions/instacart.ItemResponse" }, - "name": { - "example": "Calories", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "instacart.searchNearbyResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "unit": { - "example": "Cal.", - "type": "string" + "data": { + "$ref": "#/definitions/instacart.SearchNearbyResponse" }, - "value": { - "description": "Value is kept as a string because McDonald's publishes values like\n\"580\", \"1060\" and occasionally non-numeric qualifiers; parsing to a\nnumber here would silently drop the latter.", - "example": "580", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "mcdonalds.Restaurant": { + "instacart.searchResponseDoc": { "properties": { - "address": { - "example": "160 Broadway", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "city": { - "example": "New York", - "type": "string" + "data": { + "$ref": "#/definitions/instacart.SearchResponse" }, - "delivery_url": { - "description": "DeliveryURL is the store's delivery deep link when one is published.\nNote McDonald's points this at a third-party delivery platform.", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "instacart.storesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "drive_thru_hours": { + "data": { + "$ref": "#/definitions/instacart.StoreSearchResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "instacart.trendingResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "facilities": { - "description": "Facilities are McDonald's own amenity codes for the restaurant\n(e.g. GIFTCARDS, MOBILEOFFERS, DRIVETHRU, WIFI).", - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/instacart.TrendingResponse" }, - "hours": { - "description": "Hours is the full week where McDonald's publishes it.", - "items": { - "$ref": "#/definitions/mcdonalds.RestaurantHours" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "instagram.BusinessAddress": { + "properties": { + "city_name": { + "description": "City and region of the business location, such as `Mountain View, California`.", + "example": "Mountain View, California", + "type": "string" }, "latitude": { - "example": 40.709438, + "description": "Latitude of the business location, in decimal degrees.", + "example": 37.4221, "type": "number" }, "longitude": { - "example": -74.010086, + "description": "Longitude of the business location, in decimal degrees.", + "example": -122.08432, "type": "number" }, - "name": { - "example": "160 BROADWAY", - "type": "string" - }, - "open_status": { - "example": "OPEN", - "type": "string" - }, - "postal_code": { - "example": "10038", + "street_address": { + "description": "Street address of the business location.", + "example": "1600 Amphitheatre Pkwy", "type": "string" }, - "state": { - "example": "NY", + "zip_code": { + "description": "Postal code of the business location.", + "example": "94043", "type": "string" - }, - "store_id": { - "example": "10528", + } + }, + "type": "object" + }, + "instagram.Caption": { + "properties": { + "text": { + "description": "Caption text of the reel.", "type": "string" }, - "telephone": { - "example": "(212) 385-2066", + "user": { + "allOf": [ + { + "$ref": "#/definitions/instagram.User" + } + ], + "description": "Account that wrote the caption." + } + }, + "type": "object" + }, + "instagram.ClipsMetadata": { + "properties": { + "audio_type": { + "description": "Kind of audio used by the reel, as Instagram labels it.", "type": "string" }, - "timezone": { - "type": "string" + "is_shared_to_fb": { + "description": "Whether the reel was also shared to Facebook.", + "type": "boolean" }, - "today_hours": { - "description": "TodayHours and DriveThruHours are the published windows for today.", - "type": "string" + "original_sound_info": { + "allOf": [ + { + "$ref": "#/definitions/instagram.OriginalSoundInfo" + } + ], + "description": "Details of the original sound used in the reel." } }, "type": "object" }, - "mcdonalds.RestaurantHours": { + "instagram.IGArtist": { "properties": { - "day_of_week": { - "example": "monday", + "id": { + "description": "Instagram ID of the account credited for the sound.", "type": "string" }, - "hours": { - "example": "00:00 - 00:00", + "username": { + "description": "Username of the account credited for the sound.", "type": "string" } }, "type": "object" }, - "mcdonalds.RestaurantMenuChoice": { + "instagram.IGCaption": { "properties": { - "options": { - "items": { - "$ref": "#/definitions/mcdonalds.RestaurantMenuChoiceOption" - }, - "type": "array" + "created_at": { + "description": "Time the caption was written, in Unix seconds.", + "type": "integer" + }, + "pk": { + "description": "Instagram ID of the caption.", + "type": "string" + }, + "text": { + "description": "Caption text of the post.", + "type": "string" } }, "type": "object" }, - "mcdonalds.RestaurantMenuChoiceOption": { + "instagram.IGOwner": { "properties": { - "item_id": { - "example": "14877", + "id": { + "description": "Instagram ID of the account that owns the post.", "type": "string" }, - "name": { - "example": "Lemonade", + "is_private": { + "description": "Whether the owning account is private.", + "type": "boolean" + }, + "pk": { + "description": "Instagram primary key of the account that owns the post.", "type": "string" }, - "price_delta": { - "description": "PriceDelta is the additional eat-in/pickup cost of choosing this\noption instead of what's already included: 0 for a same-priced\nswap, negative for a cheaper one, and equal to the option's own\nfull price for an add-on choice (nothing is included to offset\nagainst).", - "example": 0.4, - "type": "number" + "profile_pic_url": { + "description": "URL of the owning account's profile picture.", + "type": "string" + }, + "username": { + "description": "Username of the account that owns the post.", + "type": "string" } }, "type": "object" }, - "mcdonalds.RestaurantMenuItem": { + "instagram.IGUser": { "properties": { - "choices": { - "description": "Choices lists this item's customizable components McDonald's\npublishes a curated substitute/add-on list for -- e.g. a meal's\ndrink upgrade options, or a dip-able item's sauce choices -- with\nthe live eat-in/pickup price delta for each real alternative.\nPresent only when the upstream payload exposed at least one such\nchoice for this item; see the package doc comment for how these are\nderived and the deliberate fail-closed rule behind what gets left\nout (in particular, plain entree/side substitution is not exposed\nat all -- McDonald's does not publish a curated candidate list for\nit, only for upgrade/add-on style choices).", - "items": { - "$ref": "#/definitions/mcdonalds.RestaurantMenuChoice" - }, - "type": "array" + "full_name": { + "description": "Display name of the account that posted the media.", + "type": "string" }, - "delivery_price": { - "example": 8.39, - "type": "number" + "id": { + "description": "Instagram ID of the account that posted the media.", + "type": "string" }, - "eat_in_price": { - "example": 7.29, - "type": "number" + "is_private": { + "description": "Whether the account is private.", + "type": "boolean" }, - "family_group": { - "description": "FamilyGroup is McDonald's own internal product classification (e.g.\nREGULAR_ENTREE, DESSERT) -- not the same category list\n/mcdonalds/categories returns, and not always present.", - "example": "REGULAR_ENTREE", - "type": "string" + "is_verified": { + "description": "Whether the account has Instagram's verified badge.", + "type": "boolean" }, - "image_url": { + "pk": { + "description": "Instagram primary key of the account that posted the media.", "type": "string" }, - "item_id": { - "example": "5", + "profile_pic_url": { + "description": "URL of the account's profile picture.", "type": "string" }, - "name": { - "example": "Big Mac®", + "username": { + "description": "Username of the account that posted the media.", "type": "string" - }, - "pickup_price": { - "example": 7.29, - "type": "number" } }, "type": "object" }, - "mcdonalds.RestaurantMenuResponse": { + "instagram.ImageCandidate": { "properties": { - "count": { - "example": 563, + "height": { + "description": "Height of this image version, in pixels.", "type": "integer" }, - "currency": { - "example": "$", - "type": "string" - }, - "fetched_at": { + "url": { + "description": "URL of this image version.", "type": "string" }, - "items": { + "width": { + "description": "Width of this image version, in pixels.", + "type": "integer" + } + }, + "type": "object" + }, + "instagram.ImageVersions2": { + "properties": { + "candidates": { + "description": "Available versions of the post image, each at its own size and URL.", "items": { - "$ref": "#/definitions/mcdonalds.RestaurantMenuItem" + "$ref": "#/definitions/instagram.ImageCandidate" }, "type": "array" + } + }, + "type": "object" + }, + "instagram.InstagramComment": { + "properties": { + "comment_like_count": { + "type": "integer" }, - "source_url": { + "created_at": { + "type": "integer" + }, + "id": { "type": "string" }, - "store_id": { - "example": "10528", + "parent_comment_id": { + "type": "string" + }, + "reply_count": { + "type": "integer" + }, + "text": { "type": "string" + }, + "user": { + "$ref": "#/definitions/instagram.InstagramCommentUser" } }, "type": "object" }, - "mcdonalds.RestaurantsResponse": { + "instagram.InstagramCommentUser": { "properties": { - "count": { - "example": 5, - "type": "integer" - }, - "country": { - "description": "Country echoes the market searched, so a response is self-describing\nwhen several markets are queried in one workflow.", - "example": "us", + "id": { "type": "string" }, - "fetched_at": { + "profile_pic_url": { "type": "string" }, - "restaurants": { + "username": { + "type": "string" + } + }, + "type": "object" + }, + "instagram.InstagramCommentsResponse": { + "properties": { + "comments": { "items": { - "$ref": "#/definitions/mcdonalds.Restaurant" + "$ref": "#/definitions/instagram.InstagramComment" }, "type": "array" }, - "source_url": { + "paging_info": { + "$ref": "#/definitions/instagram.PagingInfo" + }, + "shortcode": { "type": "string" } }, "type": "object" }, - "mcdonalds.categoriesResponseDoc": { + "instagram.InstagramPostAuthor": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" - }, - "data": { - "$ref": "#/definitions/mcdonalds.CategoriesResponse" + "id": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "username": { + "type": "string" } }, "type": "object" }, - "mcdonalds.itemListResponseDoc": { + "instagram.InstagramUserPost": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "accessibility_caption": { + "type": "string" + }, + "caption": { + "type": "string" + }, + "carousel_media_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/mcdonalds.ItemListResponse" + "display_uri": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "id": { + "type": "string" + }, + "media_type": { + "type": "integer" + }, + "product_type": { + "type": "string" + }, + "shortcode": { + "type": "string" + }, + "user": { + "$ref": "#/definitions/instagram.InstagramPostAuthor" } }, "type": "object" }, - "mcdonalds.itemResponseDoc": { + "instagram.InstagramUserPostsResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/instagram.InstagramUserPost" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/mcdonalds.ItemResponse" + "paging_info": { + "$ref": "#/definitions/instagram.PagingInfo" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "username": { + "type": "string" } }, "type": "object" }, - "mcdonalds.menuResponseDoc": { + "instagram.Item": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" - }, - "data": { - "$ref": "#/definitions/mcdonalds.MenuResponse" - }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "media": { + "allOf": [ + { + "$ref": "#/definitions/instagram.Media" + } + ], + "description": "The reel in this entry." } }, "type": "object" }, - "mcdonalds.restaurantMenuResponseDoc": { + "instagram.Media": { "properties": { + "caption": { + "allOf": [ + { + "$ref": "#/definitions/instagram.Caption" + } + ], + "description": "pointer so it can be nil" + }, "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "string" + }, + "comment_count": { + "description": "Number of comments on the reel.", "type": "integer" }, - "data": { - "$ref": "#/definitions/mcdonalds.RestaurantMenuResponse" + "display_uri": { + "description": "URL of the reel's thumbnail image.", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "id": { + "description": "Instagram media ID of the reel.", + "type": "string" + }, + "image_versions2": { + "allOf": [ + { + "$ref": "#/definitions/instagram.ReelImageVersions" + } + ], + "description": "Available versions of the reel's thumbnail, each with its own URL." + }, + "like_count": { + "description": "Number of likes on the reel.", + "type": "integer" + }, + "media_type": { + "description": "1=Image 2=Video 8=Album", + "type": "integer" + }, + "play_count": { + "description": "Number of times the reel has been played.", + "type": "integer" + }, + "taken_at": { + "description": "Time the reel was posted, in Unix seconds. Not available for public reels, so currently omitted.", + "type": "integer" } }, "type": "object" }, - "mcdonalds.restaurantsResponseDoc": { + "instagram.MediaItem": { "properties": { + "accessibility_caption": { + "description": "Image description (alt text) Instagram provides for accessibility.", + "type": "string" + }, + "caption": { + "allOf": [ + { + "$ref": "#/definitions/instagram.IGCaption" + } + ], + "description": "Caption of the post." + }, + "clips_metadata": { + "allOf": [ + { + "$ref": "#/definitions/instagram.ClipsMetadata" + } + ], + "description": "Reel-specific details such as the audio used." + }, "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "string" + }, + "comment_count": { + "description": "Number of comments on the post.", "type": "integer" }, - "data": { - "$ref": "#/definitions/mcdonalds.RestaurantsResponse" + "display_uri": { + "description": "URL of the post's display image.", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "has_audio": { + "description": "Whether the media has an audio track.", + "type": "boolean" + }, + "id": { + "description": "Instagram media ID, such as `3693449175561021455_1067259270`.", + "type": "string" + }, + "image_versions2": { + "allOf": [ + { + "$ref": "#/definitions/instagram.ImageVersions2" + } + ], + "description": "Available versions of the post image, each with its own URL and size." + }, + "like_count": { + "description": "Number of likes on the post.", + "type": "integer" + }, + "link": { + "description": "Link Instagram returns with the media, when present.", + "type": "string" + }, + "media_type": { + "description": "Kind of media: `1` for image, `2` for video and `8` for album.", + "type": "integer" + }, + "original_height": { + "description": "Height of the original media, in pixels.", + "type": "integer" + }, + "original_width": { + "description": "Width of the original media, in pixels.", + "type": "integer" + }, + "owner": { + "allOf": [ + { + "$ref": "#/definitions/instagram.IGOwner" + } + ], + "description": "Account that owns the post." + }, + "pk": { + "description": "Numeric Instagram ID of the post, the first part of `id`.", + "type": "string" + }, + "product_type": { + "description": "Kind of post, such as `clips` for a Reel or `feed` for a standard post.", + "type": "string" + }, + "taken_at": { + "description": "Time the post was published, in Unix seconds.", + "type": "integer" + }, + "user": { + "allOf": [ + { + "$ref": "#/definitions/instagram.IGUser" + } + ], + "description": "Account that posted the media." + }, + "video_versions": { + "description": "Available renditions of the video, each with its own URL and size.", + "items": { + "$ref": "#/definitions/instagram.VideoVersion" + }, + "type": "array" + }, + "view_count": { + "description": "Number of views on the video.", + "type": "integer" } }, "type": "object" }, - "mediaite.AuthorArticle": { + "instagram.OriginalSoundInfo": { "properties": { - "date": { + "audio_asset_id": { + "description": "Instagram ID of the audio asset.", "type": "string" }, - "title": { + "ig_artist": { + "allOf": [ + { + "$ref": "#/definitions/instagram.IGArtist" + } + ], + "description": "Account credited for the sound." + }, + "is_explicit": { + "description": "Whether the sound is marked explicit.", + "type": "boolean" + }, + "original_audio_title": { + "description": "Title of the original sound.", "type": "string" }, - "url": { + "should_mute_audio": { + "description": "Whether Instagram flags the audio to be muted.", + "type": "boolean" + } + }, + "type": "object" + }, + "instagram.PagingInfo": { + "properties": { + "max_id": { + "description": "Cursor to pass unchanged as `max_id` to fetch the next page of reels.", "type": "string" + }, + "more_available": { + "description": "Whether more reels are available after this page.", + "type": "boolean" } }, "type": "object" }, - "mediaite.AuthorResponse": { + "instagram.Post": { "properties": { - "articles": { + "caption": { + "description": "Caption text of the post.", + "example": "You popped the big question. For all the questions that follow, try AI Mode in Search.", + "type": "string" + }, + "children": { + "description": "nested carousel media", "items": { - "$ref": "#/definitions/mediaite.AuthorArticle" + "$ref": "#/definitions/instagram.Post" }, "type": "array" }, - "avatar_url": { + "comment_count": { + "description": "Number of comments on the post.", + "example": 43, + "type": "integer" + }, + "height": { + "description": "Height of the post media, in pixels.", + "example": 1000, + "type": "integer" + }, + "id": { + "description": "Instagram media ID of the post.", + "example": "3694065742636342530", "type": "string" }, - "bio": { + "is_video": { + "description": "Whether the post is a video.", + "example": false, + "type": "boolean" + }, + "like_count": { + "description": "Number of likes on the post.", + "example": 1880, + "type": "integer" + }, + "media_url": { + "description": "URL of the post's image, or its cover image for a video.", + "example": "https://scontent-lax3-2.cdninstagram.com/v/t51.2885-15/…n.jpg", "type": "string" }, - "email": { + "product_type": { + "description": "Kind of post, such as `clips` for a Reel or `feed` for a standard post.", + "example": "", "type": "string" }, - "name": { + "shortcode": { + "description": "Short code from the post URL. Use it as `post_id` with the post endpoint.", + "example": "DND9TiOx10C", "type": "string" }, - "slug": { + "taken_at": { + "example": "2025-08-07T17:16:14Z", "type": "string" }, - "twitter": { + "video_url": { + "description": "URL of the post's video. Present only for video posts.", + "example": "", "type": "string" }, + "view_count": { + "description": "counters become pointers so they vanish when nil", + "example": 25023, + "type": "integer" + }, + "width": { + "description": "Width of the post media, in pixels.", + "example": 750, + "type": "integer" + } + }, + "type": "object" + }, + "instagram.ReelImageCandidate": { + "properties": { + "height": { + "description": "Height of this thumbnail version, in pixels. Omitted when unknown.", + "type": "integer" + }, "url": { + "description": "URL of this thumbnail version.", "type": "string" + }, + "width": { + "description": "Width of this thumbnail version, in pixels. Omitted when unknown.", + "type": "integer" } }, "type": "object" }, - "medicalnewstoday.ArticleResponse": { + "instagram.ReelImageVersions": { "properties": { - "authors": { + "candidates": { + "description": "Available versions of the reel thumbnail, each with its own URL.", "items": { - "type": "string" + "$ref": "#/definitions/instagram.ReelImageCandidate" + }, + "type": "array" + } + }, + "type": "object" + }, + "instagram.ReelResponse": { + "properties": { + "items": { + "description": "Reels on this page.", + "items": { + "$ref": "#/definitions/instagram.Item" }, "type": "array" }, - "description": { + "paging_info": { + "allOf": [ + { + "$ref": "#/definitions/instagram.PagingInfo" + } + ], + "description": "Cursor details for fetching the next page of reels." + } + }, + "type": "object" + }, + "instagram.RelatedProfile": { + "properties": { + "full_name": { + "description": "Display name of the suggested account.", + "example": "Gmail", "type": "string" }, - "image_url": { + "id": { + "description": "Numeric Instagram user ID of the suggested account.", + "example": "1234567890", "type": "string" }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" + "is_private": { + "description": "Whether the suggested account is private.", + "example": false, + "type": "boolean" }, - "paywalled": { - "description": "Paywalled is true when the publisher serves only a teaser of this\narticle to anonymous readers, so Paragraphs is a partial body rather than\nthe full text. It is omitted when the full public body was returned.", + "is_verified": { + "description": "Whether the suggested account has Instagram's verified badge.", + "example": true, "type": "boolean" }, - "published_at": { + "profile_pic_url": { + "description": "URL of the suggested account's profile picture.", + "example": "https://…/profile.jpg", "type": "string" }, - "section": { + "username": { + "description": "Username of the suggested account.", + "example": "gmail", "type": "string" - }, - "title": { + } + }, + "type": "object" + }, + "instagram.User": { + "properties": { + "full_name": { + "description": "Display name of the account.", "type": "string" }, - "updated_at": { + "id": { + "description": "Numeric Instagram user ID of the account.", "type": "string" }, - "url": { + "username": { + "description": "Username of the account.", "type": "string" } }, "type": "object" }, - "medicalnewstoday.AuthorResponse": { + "instagram.UserProfile": { "properties": { - "articles": { + "bio_links": { + "description": "Links listed in the profile bio.", + "example": [ + "[\"https://linkin.bio/google\"]" + ], "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "type": "string" }, "type": "array" }, - "bio": { + "biography": { + "description": "Bio text shown on the profile.", + "example": "Here to help.", "type": "string" }, - "name": { + "category_name": { + "description": "not present in sample", + "example": "", "type": "string" }, - "slug": { + "external_url": { + "description": "Website link shown on the profile.", + "example": "https://linkin.bio/google", "type": "string" }, - "url": { + "fbid": { + "description": "Alternate numeric ID of the account, as Instagram returns it.", + "example": "17841401778116675", "type": "string" - } - }, - "type": "object" - }, - "medicalnewstoday.HeadlinesResponse": { - "properties": { - "items": { + }, + "followers_count": { + "description": "Number of accounts following this profile.", + "example": 15607284, + "type": "integer" + }, + "following_count": { + "description": "Number of accounts this profile follows.", + "example": 38, + "type": "integer" + }, + "full_name": { + "description": "Display name shown on the profile.", + "example": "Google", + "type": "string" + }, + "id": { + "description": "Numeric Instagram user ID. Use it with the reels endpoint.", + "example": "1067259270", + "type": "string" + }, + "is_private": { + "description": "Whether the account is private.", + "example": false, + "type": "boolean" + }, + "is_verified": { + "description": "Whether the account has Instagram's verified badge.", + "example": true, + "type": "boolean" + }, + "location": { + "allOf": [ + { + "$ref": "#/definitions/instagram.BusinessAddress" + } + ], + "description": "Business address shown on the profile." + }, + "posts": { + "description": "Recent posts shown on the profile.", "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/instagram.Post" }, "type": "array" }, - "section": { + "posts_count": { + "description": "Total number of posts on the profile.", + "example": 2867, + "type": "integer" + }, + "profile_pic_url": { + "description": "URL of the profile picture.", + "example": "https://scontent-lax3-1.cdninstagram.com/v/t51.2885-19/…n.jpg", "type": "string" - } - }, - "type": "object" - }, - "medicalnewstoday.NewsResponse": { - "properties": { - "items": { + }, + "related_profiles": { + "description": "Accounts Instagram suggests as related to this profile.", "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/instagram.RelatedProfile" }, "type": "array" + }, + "username": { + "description": "Instagram username of the profile.", + "example": "google", + "type": "string" } }, "type": "object" }, - "medicalnewstoday.SectionsResponse": { + "instagram.VideoVersion": { "properties": { - "sections": { - "items": { - "$ref": "#/definitions/newsplatform.Section" - }, - "type": "array" + "height": { + "description": "Height of this video rendition, in pixels.", + "type": "integer" + }, + "type": { + "description": "Instagram's numeric code for this video rendition.", + "type": "integer" + }, + "url": { + "description": "URL of this video rendition.", + "type": "string" + }, + "width": { + "description": "Width of this video rendition, in pixels.", + "type": "integer" } }, "type": "object" }, - "medicalnewstoday.articleResponseDoc": { + "instagram.commentsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/medicalnewstoday.ArticleResponse" + "$ref": "#/definitions/instagram.InstagramCommentsResponse" }, "msg": { "example": "OK", @@ -130806,14 +136305,14 @@ }, "type": "object" }, - "medicalnewstoday.authorResponseDoc": { + "instagram.postResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/medicalnewstoday.AuthorResponse" + "$ref": "#/definitions/instagram.MediaItem" }, "msg": { "example": "OK", @@ -130822,14 +136321,14 @@ }, "type": "object" }, - "medicalnewstoday.headlinesResponseDoc": { + "instagram.profileResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/medicalnewstoday.HeadlinesResponse" + "$ref": "#/definitions/instagram.UserProfile" }, "msg": { "example": "OK", @@ -130838,14 +136337,14 @@ }, "type": "object" }, - "medicalnewstoday.newsResponseDoc": { + "instagram.reelsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/medicalnewstoday.NewsResponse" + "$ref": "#/definitions/instagram.ReelResponse" }, "msg": { "example": "OK", @@ -130854,14 +136353,14 @@ }, "type": "object" }, - "medicalnewstoday.sectionsResponseDoc": { + "instagram.userPostsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/medicalnewstoday.SectionsResponse" + "$ref": "#/definitions/instagram.InstagramUserPostsResponse" }, "msg": { "example": "OK", @@ -130870,47 +136369,79 @@ }, "type": "object" }, - "men.AuthorArticle": { + "investopedia.AuthorInfoItem": { "properties": { "label": { "type": "string" }, - "label_url": { - "type": "string" - }, - "title": { + "url": { "type": "string" }, - "url": { + "value": { "type": "string" } }, "type": "object" }, - "men.AuthorResponse": { + "investopedia.AuthorResponse": { "properties": { "articles": { "items": { - "$ref": "#/definitions/men.AuthorArticle" + "$ref": "#/definitions/investopedia.HeadlineItem" }, "type": "array" }, - "bio": { + "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "description": { "type": "string" }, - "email": { + "image_url": { "type": "string" }, + "info": { + "items": { + "$ref": "#/definitions/investopedia.AuthorInfoItem" + }, + "type": "array" + }, "job_title": { "type": "string" }, "name": { "type": "string" }, - "slug": { + "quote": { "type": "string" }, - "twitter": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "investopedia.HeadlineItem": { + "properties": { + "author": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { "type": "string" }, "url": { @@ -130919,1547 +136450,1727 @@ }, "type": "object" }, - "mercari.AutocompleteResponse": { + "iol.AuthorArticle": { "properties": { - "query": { + "published_date": { + "description": "PublishedDate is the YYYY-MM-DD date IOL puts in the article URL. The\nauthor page itself only shows a relative \"2 days ago\" label, so this is\nomitted for the rare undated (partnered) URL.", "type": "string" }, - "suggestions": { + "section": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "iol.AuthorResponse": { + "properties": { + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/iol.AuthorArticle" }, "type": "array" + }, + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "role": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "mercari.Brand": { + "irishindependent.AuthorArticle": { "properties": { - "id": { - "type": "integer" + "image_url": { + "type": "string" }, - "name": { + "paywalled": { + "description": "Paywalled is true when the article is premium (subscriber) content.", + "type": "boolean" + }, + "published_at": { + "type": "string" + }, + "section": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "mercari.Category": { + "irishindependent.AuthorResponse": { "properties": { - "icon_url": { + "articles": { + "items": { + "$ref": "#/definitions/irishindependent.AuthorArticle" + }, + "type": "array" + }, + "bio": { "type": "string" }, - "id": { - "type": "integer" + "email": { + "type": "string" + }, + "image_url": { + "type": "string" }, "name": { "type": "string" }, - "parent_id": { + "same_as": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "total_articles": { + "description": "TotalArticles is the number of articles the profile lists in total; the\nArticles slice holds only the first page of them.", "type": "integer" + }, + "url": { + "type": "string" } }, "type": "object" }, - "mercari.HomeResponse": { + "irishtimes.AuthorResponse": { "properties": { - "items": { + "articles": { "items": { - "$ref": "#/definitions/mercari.ItemSummary" + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" + }, + "biography": { + "items": { + "type": "string" }, "type": "array" + }, + "email": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "job_title": { + "type": "string" + }, + "name": { + "type": "string" + }, + "twitter": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "mercari.ItemDetailResponse": { + "itchio.BrowseGroup": { "properties": { - "category_code": { - "type": "integer" - }, - "condition_code": { - "type": "integer" - }, - "description": { + "label": { "type": "string" }, - "hashtags": { + "values": { "items": { - "type": "string" + "$ref": "#/definitions/itchio.BrowseOption" }, "type": "array" + } + }, + "type": "object" + }, + "itchio.BrowseOption": { + "properties": { + "action": { + "type": "string" }, - "id": { + "label": { "type": "string" }, - "photos": { + "path": { + "type": "string" + }, + "selected": { + "type": "boolean" + } + }, + "type": "object" + }, + "itchio.BrowseOptions": { + "properties": { + "classification": { + "type": "string" + }, + "current_facets": { + "type": "object" + }, + "groups": { "items": { - "type": "string" + "$ref": "#/definitions/itchio.BrowseGroup" }, "type": "array" }, - "price_cents": { - "type": "integer" + "open_tag_vocabulary": { + "type": "boolean" }, - "shipping_from_state": { + "path": { "type": "string" }, - "similar_items": { + "sorts": { "items": { - "$ref": "#/definitions/mercari.ItemSummary" + "$ref": "#/definitions/itchio.BrowseOption" }, "type": "array" }, - "title": { - "type": "string" - }, - "url": { + "tags_endpoint": { "type": "string" } }, "type": "object" }, - "mercari.ItemSummary": { + "itchio.BrowseOptionsResponseDoc": { "properties": { - "condition_code": { + "code": { "type": "integer" }, - "created_at_unix": { - "type": "integer" + "data": { + "$ref": "#/definitions/itchio.BrowseOptions" }, - "id": { + "msg": { + "type": "string" + } + }, + "type": "object" + }, + "itchio.CalendarJam": { + "properties": { + "end_date": { "type": "string" }, - "num_likes": { + "featured": { "type": "integer" }, - "original_price_cents": { + "highlight": { + "type": "object" + }, + "hue": { "type": "integer" }, - "price_cents": { + "id": { "type": "integer" }, - "seller_id": { - "type": "string" + "joined": { + "type": "integer" }, - "thumbnail_url": { + "start_date": { "type": "string" }, "title": { "type": "string" }, - "updated_at_unix": { - "type": "integer" - }, "url": { "type": "string" + }, + "voting_end_date": { + "type": "string" } }, "type": "object" }, - "mercari.MasterResponse": { + "itchio.Information": { "properties": { - "brands": { - "items": { - "$ref": "#/definitions/mercari.Brand" - }, - "type": "array" + "label": { + "type": "string" }, - "categories": { + "links": { "items": { - "$ref": "#/definitions/mercari.Category" + "$ref": "#/definitions/itchio.Link" }, "type": "array" }, - "sizes": { - "items": { - "$ref": "#/definitions/mercari.Size" - }, - "type": "array" + "value": { + "type": "string" } }, "type": "object" }, - "mercari.SearchResponse": { + "itchio.Item": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/mercari.ItemSummary" - }, - "type": "array" + "creator": { + "type": "string" }, - "query": { + "creator_url": { "type": "string" }, - "total_results": { - "type": "integer" - } - }, - "type": "object" - }, - "mercari.Size": { - "properties": { - "code": { + "description": { + "type": "string" + }, + "genre": { "type": "string" }, "id": { - "type": "integer" + "type": "string" }, - "name": { + "image_url": { "type": "string" }, - "short_name": { + "price": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "mercari.autocompleteResponseDoc": { + "itchio.JamBrowseOptions": { "properties": { - "code": { - "example": 200, - "type": "integer" + "groups": { + "items": { + "$ref": "#/definitions/itchio.JamFilterGroup" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/mercari.AutocompleteResponse" + "links": { + "items": { + "$ref": "#/definitions/itchio.BrowseOption" + }, + "type": "array" }, - "msg": { - "example": "OK", + "path": { "type": "string" + }, + "sorts": { + "items": { + "$ref": "#/definitions/itchio.BrowseOption" + }, + "type": "array" } }, "type": "object" }, - "mercari.homeResponseDoc": { + "itchio.JamBrowseOptionsResponseDoc": { "properties": { "code": { - "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mercari.HomeResponse" + "$ref": "#/definitions/itchio.JamBrowseOptions" }, "msg": { - "example": "OK", "type": "string" } }, "type": "object" }, - "mercari.masterResponseDoc": { + "itchio.JamCalendar": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/mercari.MasterResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "jams": { + "items": { + "$ref": "#/definitions/itchio.CalendarJam" + }, + "type": "array" } }, "type": "object" }, - "mercari.searchResponseDoc": { + "itchio.JamCalendarResponseDoc": { "properties": { "code": { - "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mercari.SearchResponse" + "$ref": "#/definitions/itchio.JamCalendar" }, "msg": { - "example": "OK", "type": "string" } }, "type": "object" }, - "metacritic.BrowseItem": { + "itchio.JamCard": { "properties": { - "description": { + "cover_url": { "type": "string" }, - "genres": { + "dates": { "items": { - "$ref": "#/definitions/metacritic.Genre" + "$ref": "#/definitions/itchio.JamDate" }, "type": "array" }, - "id": { - "type": "integer" - }, - "image": { + "duration": { "type": "string" }, - "metascore": { - "$ref": "#/definitions/metacritic.ScoreSummary" - }, - "premiere_year": { - "type": "integer" + "featured": { + "type": "boolean" }, - "rating": { + "hosted_by_text": { "type": "string" }, - "release_date": { - "type": "string" + "hosts": { + "items": { + "$ref": "#/definitions/itchio.Link" + }, + "type": "array" }, - "season_count": { - "type": "integer" + "ranked": { + "type": "boolean" }, - "slug": { + "results_url": { "type": "string" }, - "title": { + "stats": { + "items": { + "$ref": "#/definitions/itchio.JamStat" + }, + "type": "array" + }, + "timing_text": { "type": "string" }, - "type": { - "example": "game", + "title": { "type": "string" }, "url": { "type": "string" - }, - "user_score": { - "type": "number" } }, "type": "object" }, - "metacritic.BrowseResponse": { + "itchio.JamCriterionScore": { "properties": { - "genre": { + "label": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/metacritic.BrowseItem" - }, - "type": "array" - }, - "page": { - "type": "integer" - }, - "per_page": { - "type": "integer" + "path": { + "type": "string" }, - "sort": { + "rank": { "type": "string" }, - "total": { - "type": "integer" + "raw_score": { + "type": "string" }, - "type": { + "score": { "type": "string" } }, "type": "object" }, - "metacritic.Credit": { + "itchio.JamDate": { "properties": { - "name": { - "description": "Name of the person credited.", + "text": { "type": "string" }, - "role": { - "description": "Role of the person on the title, for example `Director`.", - "example": "Director", + "title": { "type": "string" } }, "type": "object" }, - "metacritic.CriticReview": { + "itchio.JamEntries": { "properties": { - "author": { - "description": "Name of the critic who wrote the review.", + "entries_url": { "type": "string" }, - "date": { - "description": "Date the review was published, in YYYY-MM-DD.", - "example": "2022-02-23", - "type": "string" + "generated_on": { + "type": "number" }, - "platform": { - "description": "Platform the game was reviewed on. Set for game reviews.", - "type": "string" + "jam_games": { + "items": { + "$ref": "#/definitions/itchio.JamEntry" + }, + "type": "array" }, - "publication": { - "description": "Name of the publication that published the review.", + "path": { "type": "string" + } + }, + "type": "object" + }, + "itchio.JamEntriesResponseDoc": { + "properties": { + "code": { + "type": "integer" }, - "publication_slug": { - "description": "Metacritic slug of the publication.", + "data": { + "$ref": "#/definitions/itchio.JamEntries" + }, + "msg": { "type": "string" + } + }, + "type": "object" + }, + "itchio.JamEntry": { + "properties": { + "contributors": { + "items": { + "$ref": "#/definitions/itchio.JamEntryCredit" + }, + "type": "array" }, - "quote": { - "description": "Excerpt or summary of the review text.", + "coolness": { + "type": "integer" + }, + "created_at": { "type": "string" }, - "score": { - "description": "Score the critic gave, out of 100. Omitted when the review has no score.", + "game": { + "$ref": "#/definitions/itchio.JamEntryGame" + }, + "id": { + "type": "integer" + }, + "rating_count": { "type": "integer" }, "url": { - "description": "URL of the full review on the publication's site.", "type": "string" } }, "type": "object" }, - "metacritic.CriticReviewsResponse": { + "itchio.JamEntryCredit": { "properties": { - "page": { - "description": "Page number returned, starting at 1.", - "type": "integer" + "name": { + "type": "string" }, - "per_page": { - "description": "Number of reviews per page.", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "itchio.JamEntryGame": { + "properties": { + "cover": { + "type": "string" + }, + "cover_color": { + "type": "string" + }, + "gif_cover": { + "type": "string" + }, + "id": { "type": "integer" }, - "reviews": { - "description": "Critic reviews on this page.", + "platforms": { "items": { - "$ref": "#/definitions/metacritic.CriticReview" + "type": "string" }, "type": "array" }, - "slug": { - "description": "Metacritic slug of the title the reviews belong to.", + "price": { "type": "string" }, - "sort": { - "description": "Sort order applied: `date`, `score` or `publication`.", + "short_text": { "type": "string" }, - "total": { - "description": "Total number of critic reviews for the title.", - "type": "integer" + "tags": { + "items": { + "$ref": "#/definitions/itchio.JamEntryCredit" + }, + "type": "array" }, - "type": { - "description": "Content type of the title: `game`, `movie` or `tv`.", + "title": { + "type": "string" + }, + "url": { "type": "string" + }, + "user": { + "$ref": "#/definitions/itchio.JamEntryUser" } }, "type": "object" }, - "metacritic.Genre": { + "itchio.JamEntryUser": { "properties": { "id": { - "description": "Metacritic genre id.", "type": "integer" }, "name": { - "description": "Genre name, for example `Action RPG`.", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "metacritic.Platform": { + "itchio.JamFilterGroup": { "properties": { - "id": { - "description": "Metacritic platform id.", - "type": "integer" - }, - "is_lead": { - "description": "Whether this is the game's lead platform.", - "type": "boolean" - }, - "metascore": { - "allOf": [ - { - "$ref": "#/definitions/metacritic.ScoreSummary" - } - ], - "description": "Critic score summary for the game on this platform." - }, - "name": { - "description": "Platform name, for example `PlayStation 5`.", - "example": "PlayStation 5", + "clear_path": { "type": "string" }, - "release_date": { - "description": "Release date of the game on this platform.", + "label": { "type": "string" + }, + "values": { + "items": { + "$ref": "#/definitions/itchio.BrowseOption" + }, + "type": "array" } }, "type": "object" }, - "metacritic.Product": { + "itchio.JamListing": { "properties": { - "countries": { - "description": "Countries Metacritic lists for the title.", + "items": { "items": { - "type": "string" + "$ref": "#/definitions/itchio.JamCard" }, "type": "array" }, - "description": { - "description": "Plot or game summary as shown on Metacritic.", - "type": "string" + "num_items": { + "type": "integer" }, - "duration": { - "description": "Running time of the title as Metacritic lists it.", + "page": { "type": "integer" }, - "genres": { - "description": "Genres Metacritic assigns to the title.", + "pagination": { "items": { - "$ref": "#/definitions/metacritic.Genre" + "$ref": "#/definitions/itchio.Link" }, "type": "array" }, - "id": { - "description": "Metacritic's numeric id for the title.", + "path": { + "type": "string" + } + }, + "type": "object" + }, + "itchio.JamListingResponseDoc": { + "properties": { + "code": { "type": "integer" }, - "image": { - "description": "Main image of the title as Metacritic lists it.", - "type": "string" + "data": { + "$ref": "#/definitions/itchio.JamListing" }, - "imdb_id": { - "description": "IMDb id of the title, for example `tt0903747`.", + "msg": { "type": "string" - }, - "imdb_url": { - "description": "URL of the title's IMDb page.", + } + }, + "type": "object" + }, + "itchio.JamOverview": { + "properties": { + "banner_url": { "type": "string" }, - "in_theaters": { - "description": "Whether the movie is currently in theaters. Omitted when false.", - "type": "boolean" + "description": { + "type": "string" }, - "metascore": { - "allOf": [ - { - "$ref": "#/definitions/metacritic.ScoreSummary" - } - ], - "description": "Critic score summary for the title." + "end_date": { + "type": "string" }, - "networks": { - "description": "TV networks that air the show.", + "hosting_links": { "items": { - "type": "string" + "$ref": "#/definitions/itchio.Link" }, "type": "array" }, - "platforms": { - "description": "Platforms the game is released on, each with its own Metascore.", - "items": { - "$ref": "#/definitions/metacritic.Platform" - }, - "type": "array" + "hosting_text": { + "type": "string" }, - "premiere_year": { - "description": "Year the title premiered or was first released.", + "id": { "type": "integer" }, - "production": { - "allOf": [ - { - "$ref": "#/definitions/metacritic.Production" - } - ], - "description": "Companies, crew and official site for the title." + "navigation": { + "items": { + "$ref": "#/definitions/itchio.Link" + }, + "type": "array" }, - "rating": { - "description": "Content rating of the title, for example `M` or `TV-MA`.", - "example": "M", + "path": { "type": "string" }, - "release_date": { - "description": "Release date of the title, in YYYY-MM-DD.", - "example": "2022-02-25", + "start_date": { "type": "string" }, - "season_count": { - "description": "Number of seasons of the show.", - "type": "integer" - }, - "slug": { - "description": "Metacritic URL slug of the title. Use it with the review endpoints.", - "type": "string" + "stats": { + "items": { + "$ref": "#/definitions/itchio.JamOverviewStat" + }, + "type": "array" }, - "tagline": { - "description": "Marketing tagline of the title.", + "status_text": { "type": "string" }, "title": { - "description": "Title name as shown on Metacritic.", - "type": "string" - }, - "type": { - "description": "Content type of the title: `game`, `movie` or `tv`.", - "example": "game", "type": "string" }, "url": { - "description": "Metacritic page URL of the title.", "type": "string" }, - "user_score": { - "allOf": [ - { - "$ref": "#/definitions/metacritic.ScoreSummary" - } - ], - "description": "User score summary for the title. Omitted when it has no user score yet." - }, - "video": { - "allOf": [ - { - "$ref": "#/definitions/metacritic.Video" - } - ], - "description": "Trailer or clip Metacritic links for the title." + "voting_end_date": { + "type": "string" } }, "type": "object" }, - "metacritic.Production": { + "itchio.JamOverviewResponseDoc": { "properties": { - "companies": { - "description": "Companies involved in making or publishing the title, without duplicates (up to 12).", - "items": { - "type": "string" - }, - "type": "array" + "code": { + "type": "integer" }, - "crew": { - "description": "Crew credits for the title.", - "items": { - "$ref": "#/definitions/metacritic.Credit" - }, - "type": "array" + "data": { + "$ref": "#/definitions/itchio.JamOverview" }, - "official_site": { - "description": "URL of the title's official website.", + "msg": { "type": "string" } }, "type": "object" }, - "metacritic.ScoreSummary": { + "itchio.JamOverviewStat": { "properties": { - "max": { - "description": "Highest possible value of `score`, for example `100`.", - "example": 100, - "type": "integer" - }, - "negative_count": { - "description": "Number of negative reviews counted in the score.", - "type": "integer" - }, - "neutral_count": { - "description": "Number of neutral (mixed) reviews counted in the score.", - "type": "integer" - }, - "positive_count": { - "description": "Number of positive reviews counted in the score.", - "type": "integer" - }, - "review_count": { - "description": "Number of reviews the score is based on.", - "type": "integer" - }, - "score": { - "description": "Score value on the scale given by `max`. Metascores are out of 100 and user scores out of 10.", - "type": "number" + "label": { + "type": "string" }, - "sentiment": { - "description": "Metacritic's verdict for the score, for example `Universal acclaim`.", - "example": "Universal acclaim", + "title": { "type": "string" }, "url": { - "description": "Metacritic page listing the reviews behind the score.", + "type": "string" + }, + "value": { "type": "string" } }, "type": "object" }, - "metacritic.UserReview": { + "itchio.JamRankedGame": { "properties": { - "author": { - "description": "Username of the member who wrote the review.", + "cover_url": { "type": "string" }, - "date": { - "description": "Date the review was posted, in YYYY-MM-DD.", - "type": "string" + "creators": { + "items": { + "$ref": "#/definitions/itchio.Link" + }, + "type": "array" }, - "id": { - "description": "Metacritic review id.", + "rank": { "type": "string" }, - "platform": { - "description": "Platform the game was reviewed on. Set for game reviews.", + "ranking_text": { "type": "string" }, - "quote": { - "description": "Text of the user review.", + "scores": { + "items": { + "$ref": "#/definitions/itchio.JamCriterionScore" + }, + "type": "array" + }, + "submission_url": { "type": "string" }, - "score": { - "description": "Score the user gave, out of 10. Omitted when the review has no score.", - "type": "integer" + "title": { + "type": "string" }, - "spoiler": { - "description": "Whether the review is flagged as containing spoilers.", - "type": "boolean" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "itchio.JamResultCriterion": { + "properties": { + "label": { + "type": "string" }, - "thumbs_down": { - "description": "Number of members who voted the review not helpful.", - "type": "integer" + "path": { + "type": "string" }, - "thumbs_up": { - "description": "Number of members who voted the review helpful.", - "type": "integer" + "selected": { + "type": "boolean" } }, "type": "object" }, - "metacritic.UserReviewsResponse": { + "itchio.JamResults": { "properties": { - "page": { - "description": "Page number returned, starting at 1.", + "items": { + "items": { + "$ref": "#/definitions/itchio.JamRankedGame" + }, + "type": "array" + }, + "num_items": { "type": "integer" }, - "per_page": { - "description": "Number of reviews per page.", + "page": { "type": "integer" }, - "reviews": { - "description": "User reviews on this page.", + "page_label": { + "type": "string" + }, + "pagination": { "items": { - "$ref": "#/definitions/metacritic.UserReview" + "$ref": "#/definitions/itchio.Link" }, "type": "array" }, - "slug": { - "description": "Metacritic slug of the title the reviews belong to.", + "path": { "type": "string" }, - "sort": { - "description": "Sort order applied: `date`, `score` or `helpful`.", + "summary_text": { "type": "string" }, - "total": { - "description": "Total number of user reviews for the title.", - "type": "integer" - }, - "type": { - "description": "Content type of the title: `game`, `movie` or `tv`.", + "title": { "type": "string" } }, "type": "object" }, - "metacritic.Video": { + "itchio.JamResultsOptions": { "properties": { - "duration": { - "description": "Length of the video as Metacritic lists it.", - "type": "integer" + "criteria": { + "items": { + "$ref": "#/definitions/itchio.JamResultCriterion" + }, + "type": "array" }, - "embed_url": { - "description": "URL for embedding the video player.", + "jam_url": { "type": "string" }, - "title": { - "description": "Title of the video.", + "path": { "type": "string" }, - "url": { - "description": "URL of the video.", + "title": { "type": "string" } }, "type": "object" }, - "metacritic.browseResponseDoc": { + "itchio.JamResultsOptionsResponseDoc": { "properties": { "code": { - "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/metacritic.BrowseResponse" + "$ref": "#/definitions/itchio.JamResultsOptions" }, "msg": { - "example": "OK", "type": "string" } }, "type": "object" }, - "metacritic.criticReviewsResponseDoc": { + "itchio.JamResultsResponseDoc": { "properties": { "code": { - "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/metacritic.CriticReviewsResponse" + "$ref": "#/definitions/itchio.JamResults" }, "msg": { - "example": "OK", "type": "string" } }, "type": "object" }, - "metacritic.productResponseDoc": { + "itchio.JamStat": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/metacritic.Product" - }, - "msg": { - "example": "OK", + "label": { "type": "string" - } - }, - "type": "object" - }, - "metacritic.userReviewsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/metacritic.UserReviewsResponse" + "url": { + "type": "string" }, - "msg": { - "example": "OK", + "value": { "type": "string" } }, "type": "object" }, - "metaculus.ForecastHistoryPoint": { + "itchio.JamSubmission": { "properties": { - "center": { - "description": "Central value of the community forecast, as Metaculus reports it. Same as the first value in `centers`.", - "example": 0.36, - "type": "number" - }, - "centers": { - "description": "All central values of the forecast, as Metaculus reports them. Multiple-choice questions have one per option.", + "creators": { "items": { - "type": "number" + "$ref": "#/definitions/itchio.Link" }, "type": "array" }, - "end_time": { - "description": "End of the period this point covers, in UTC (RFC 3339).", - "example": "2026-06-01T17:06:20Z", + "game_id": { + "type": "integer" + }, + "jam_title": { "type": "string" }, - "end_ts": { - "description": "End of the period this point covers, in Unix seconds.", - "example": 1780333580.206417, - "type": "number" + "jam_url": { + "type": "string" }, - "forecaster_count": { - "description": "Number of forecasters behind this point.", - "example": 17, - "type": "integer" + "path": { + "type": "string" }, - "interval_lower_bounds": { - "description": "All lower interval bounds of the forecast, in the same order as `centers`.", - "items": { - "type": "number" - }, - "type": "array" + "project_url": { + "type": "string" }, - "interval_upper_bounds": { - "description": "All upper interval bounds of the forecast, in the same order as `centers`.", + "ranking_text": { + "type": "string" + }, + "results_available": { + "type": "boolean" + }, + "results_url": { + "type": "string" + }, + "scores": { "items": { - "type": "number" + "$ref": "#/definitions/itchio.JamCriterionScore" }, "type": "array" }, - "lower": { - "description": "Lower bound of the forecast interval, as Metaculus reports it.", - "example": 0.26, - "type": "number" + "submitted_by_text": { + "type": "string" }, - "start_time": { - "description": "Start of the period this point covers, in UTC (RFC 3339).", - "example": "2026-06-01T17:00:00Z", + "summary": { "type": "string" }, - "start_ts": { - "description": "Start of the period this point covers, in Unix seconds.", - "example": 1780333200, - "type": "number" + "title": { + "type": "string" }, - "upper": { - "description": "Upper bound of the forecast interval, as Metaculus reports it.", - "example": 0.61, - "type": "number" + "url": { + "type": "string" } }, "type": "object" }, - "metaculus.ForecastHistoryResponse": { + "itchio.JamSubmissionResponseDoc": { "properties": { - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:00:00Z", - "type": "string" - }, - "max_points": { - "description": "Maximum number of history points requested. When there are more, the most recent are returned.", - "example": 500, + "code": { "type": "integer" }, - "method": { - "description": "Aggregation method used: `recency_weighted`, `unweighted` or `single_aggregation`.", - "example": "recency_weighted", + "data": { + "$ref": "#/definitions/itchio.JamSubmission" + }, + "msg": { + "type": "string" + } + }, + "type": "object" + }, + "itchio.Link": { + "properties": { + "text": { "type": "string" }, - "points": { - "description": "Forecast history points in time order, one item per period.", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "itchio.Listing": { + "properties": { + "classification": { + "type": "string" + }, + "items": { "items": { - "$ref": "#/definitions/metaculus.ForecastHistoryPoint" + "$ref": "#/definitions/itchio.Item" }, "type": "array" }, - "points_count": { - "description": "Number of history points returned.", - "example": 25, + "num_items": { "type": "integer" }, - "public_page_derived": { - "description": "Always `true`: the values are those shown publicly on Metaculus, without a login.", - "example": true, - "type": "boolean" + "page": { + "type": "integer" + } + }, + "type": "object" + }, + "itchio.ListingResponseDoc": { + "properties": { + "code": { + "type": "integer" }, - "question": { - "allOf": [ - { - "$ref": "#/definitions/metaculus.QuestionRow" - } - ], - "description": "Summary of the Metaculus question this response is about." + "data": { + "$ref": "#/definitions/itchio.Listing" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.metaculus.com/questions/43612/", + "msg": { "type": "string" } }, "type": "object" }, - "metaculus.ForecastSummary": { + "itchio.Project": { "properties": { - "center": { - "description": "Central value of the community forecast, as Metaculus reports it.", - "example": 0.52, - "type": "number" + "description": { + "type": "string" }, - "centers": { - "description": "All central values of the forecast, as Metaculus reports them. Multiple-choice questions have one per option.", + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "information": { "items": { - "type": "number" + "$ref": "#/definitions/itchio.Information" }, "type": "array" }, - "forecaster_count": { - "description": "Number of forecasters behind the latest forecast.", - "example": 54, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "itchio.ProjectResponseDoc": { + "properties": { + "code": { "type": "integer" }, - "history_points": { - "description": "Number of history points available for this method.", - "example": 25, + "data": { + "$ref": "#/definitions/itchio.Project" + }, + "msg": { + "type": "string" + } + }, + "type": "object" + }, + "itchio.TagsResponseDoc": { + "properties": { + "code": { "type": "integer" }, - "interval_lower_bounds": { - "description": "All lower interval bounds of the forecast, in the same order as `centers`.", - "items": { - "type": "number" - }, - "type": "array" + "data": { + "additionalProperties": true, + "type": "object" }, - "interval_upper_bounds": { - "description": "All upper interval bounds of the forecast, in the same order as `centers`.", + "msg": { + "type": "string" + } + }, + "type": "object" + }, + "japantimes.AuthorResponse": { + "properties": { + "articles": { "items": { - "type": "number" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "lower": { - "description": "Lower bound of the forecast interval, as Metaculus reports it.", - "example": 0.37, - "type": "number" - }, - "method": { - "description": "Aggregation method name, for example `recency_weighted`, `unweighted` or `single_aggregation`.", - "example": "recency_weighted", + "name": { "type": "string" }, - "upper": { - "description": "Upper bound of the forecast interval, as Metaculus reports it.", - "example": 0.66, - "type": "number" + "url": { + "type": "string" } }, "type": "object" }, - "metaculus.ForecastsResponse": { + "jcrew.CategoriesResponse": { "properties": { - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:00:00Z", - "type": "string" - }, - "methods": { - "description": "Latest forecast per aggregation method, with the preferred methods first.", + "categories": { "items": { - "$ref": "#/definitions/metaculus.ForecastSummary" + "$ref": "#/definitions/jcrew.NavCategory" }, "type": "array" }, - "methods_count": { - "description": "Number of aggregation methods returned.", - "example": 3, - "type": "integer" + "departments": { + "items": { + "type": "string" + }, + "type": "array" }, - "public_page_derived": { - "description": "Always `true`: the values are those shown publicly on Metaculus, without a login.", - "example": true, - "type": "boolean" + "fetched_at": { + "type": "string" }, - "question": { - "allOf": [ - { - "$ref": "#/definitions/metaculus.QuestionRow" - } - ], - "description": "Summary of the Metaculus question this response is about." + "site": { + "type": "string" }, "source_url": { - "description": "URL the data was read from.", - "example": "https://www.metaculus.com/questions/43612/", "type": "string" } }, "type": "object" }, - "metaculus.OptionForecast": { + "jcrew.CategoryProduct": { "properties": { - "center": { - "description": "Central value of the community forecast for this option.", - "example": 0.42, + "average_rating": { "type": "number" }, - "forecast_value": { - "description": "Forecast value for this option, as Metaculus reports it.", - "example": 0.42, - "type": "number" + "badge": { + "type": "string" }, - "forecaster_count": { - "description": "Number of forecasters behind this option's forecast.", - "example": 5, + "color_codes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "currency": { + "type": "string" + }, + "default_color_code": { + "type": "string" + }, + "discount_max_percent": { "type": "integer" }, - "index": { - "description": "Position of the option in the question's option list, starting at 0.", - "example": 0, + "discount_min_percent": { "type": "integer" }, - "label": { - "description": "Name of the option, for example `OpenAI`.", - "example": "OpenAI", + "family_id": { "type": "string" }, - "lower": { - "description": "Lower bound of the forecast interval for this option.", - "example": 0.31, - "type": "number" + "id": { + "type": "string" }, - "mean": { - "description": "Mean of the community forecast for this option.", - "example": 0.39, - "type": "number" + "name": { + "type": "string" }, - "upper": { - "description": "Upper bound of the forecast interval for this option.", - "example": 0.43, + "price": { "type": "number" + }, + "review_count": { + "type": "integer" + }, + "url": { + "type": "string" } }, "type": "object" }, - "metaculus.OptionsChange": { + "jcrew.CategoryResponse": { "properties": { - "changed_at": { - "description": "Time the option list changed, as Metaculus reports it.", - "example": "0001-01-01T00:00:00", + "category": { "type": "string" }, - "options": { - "description": "Option labels in effect from that time.", + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "gender": { + "type": "string" + }, + "label": { + "type": "string" + }, + "page": { + "type": "integer" + }, + "products": { "items": { - "type": "string" + "$ref": "#/definitions/jcrew.CategoryProduct" }, "type": "array" + }, + "result_count": { + "type": "integer" + }, + "site": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "total_pages": { + "description": "TotalPages is computed from ResultCount at the upstream's own fixed\n60-per-page size.", + "type": "integer" } }, "type": "object" }, - "metaculus.OptionsResponse": { + "jcrew.Facet": { "properties": { - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:00:00Z", + "is_range": { + "type": "boolean" + }, + "label": { "type": "string" }, - "method": { - "description": "Aggregation method used: `recency_weighted`, `unweighted` or `single_aggregation`.", - "example": "recency_weighted", + "name": { "type": "string" }, "options": { - "description": "Latest forecast for each option of the question.", "items": { - "$ref": "#/definitions/metaculus.OptionForecast" + "$ref": "#/definitions/jcrew.FacetOption" }, "type": "array" }, - "options_count": { - "description": "Number of options returned.", - "example": 2, + "range_max": { + "type": "number" + }, + "range_min": { + "type": "number" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "jcrew.FacetOption": { + "properties": { + "count": { "type": "integer" }, - "options_history": { - "description": "Earlier versions of the option list, when the options changed.", + "label": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "jcrew.Hour": { + "properties": { + "open_intervals": { "items": { - "$ref": "#/definitions/metaculus.OptionsChange" + "$ref": "#/definitions/jcrew.TimeInterval" }, "type": "array" + } + }, + "type": "object" + }, + "jcrew.NavCategory": { + "properties": { + "category": { + "type": "string" }, - "public_page_derived": { - "description": "Always `true`: the values are those shown publicly on Metaculus, without a login.", - "example": true, - "type": "boolean" + "department": { + "type": "string" }, - "question": { - "allOf": [ - { - "$ref": "#/definitions/metaculus.QuestionRow" - } - ], - "description": "Summary of the Metaculus question this response is about." + "label": { + "type": "string" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.metaculus.com/questions/43731/", + "section": { "type": "string" } }, "type": "object" }, - "metaculus.Project": { + "jcrew.ProductColor": { "properties": { - "emoji": { - "description": "Emoji shown next to the category or project on Metaculus.", - "example": "💼", - "type": "string" - }, - "id": { - "description": "Metaculus id of the category or project.", - "example": 3698, - "type": "integer" - }, - "name": { - "description": "Display name, for example `Economy & Business`.", - "example": "Economy & Business", + "code": { "type": "string" }, - "slug": { - "description": "URL slug, for example `economy-business`.", - "example": "economy-business", + "image_url": { "type": "string" }, - "type": { - "description": "Kind of project, for example `category` or `tournament`.", - "example": "category", + "name": { "type": "string" } }, "type": "object" }, - "metaculus.QuestionMetadataResponse": { + "jcrew.ProductDetailResponse": { "properties": { - "actual_close_time": { - "description": "Time the question actually closed to forecasts, as Metaculus reports it.", - "example": "2026-12-30T23:59:00Z", + "average_rating": { + "type": "number" + }, + "brand": { "type": "string" }, - "actual_resolve_time": { - "description": "Time the question actually resolved, as Metaculus reports it.", - "example": "2027-01-02T00:00:00Z", + "category_id": { "type": "string" }, - "all_options_ever": { - "description": "Every option label the question has ever had.", + "colors": { "items": { - "type": "string" + "$ref": "#/definitions/jcrew.ProductColor" }, "type": "array" }, - "default_aggregation_method": { - "description": "Aggregation method Metaculus shows by default, for example `recency_weighted`.", - "example": "recency_weighted", + "currency": { "type": "string" }, - "default_score_type": { - "description": "Score type Metaculus uses by default, for example `peer`.", - "example": "peer", + "description": { "type": "string" }, "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:00:00Z", "type": "string" }, - "group_variable": { - "description": "Name of the variable that distinguishes the questions in a group, for example `Company`.", - "example": "Company", + "fit_description": { + "items": { + "type": "string" + }, + "type": "array" + }, + "gender": { "type": "string" }, - "inbound_outcome_count": { - "description": "Number of outcomes inside the question's range.", - "example": 10, - "type": "integer" + "list_price": { + "type": "number" }, - "include_bots_in_aggregates": { - "description": "Whether bot forecasts are included in the aggregate forecasts.", - "example": false, - "type": "boolean" + "name": { + "type": "string" }, - "open_lower_bound": { - "description": "Whether the answer can fall below the lower end of the range.", - "example": false, - "type": "boolean" + "pid": { + "type": "string" }, - "open_upper_bound": { - "description": "Whether the answer can fall above the upper end of the range.", - "example": false, - "type": "boolean" + "rating_count": { + "type": "integer" }, - "options": { - "description": "Current option labels of a multiple-choice question.", + "site": { + "type": "string" + }, + "sizes": { "items": { "type": "string" }, "type": "array" }, - "options_history": { - "description": "Earlier versions of the option list, when the options changed.", + "skus": { "items": { - "$ref": "#/definitions/metaculus.OptionsChange" + "$ref": "#/definitions/jcrew.ProductSKU" }, "type": "array" }, - "options_order": { - "description": "How the options are ordered, for example `DEFAULT`.", - "example": "DEFAULT", + "source_url": { "type": "string" }, - "possibilities": { - "description": "Possible outcomes of the question, as Metaculus describes them." - }, - "public_page_derived": { - "description": "Always `true`: the values are those shown publicly on Metaculus, without a login.", - "example": true, - "type": "boolean" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "jcrew.ProductReviewsResponse": { + "properties": { + "average_rating": { + "type": "number" }, - "question": { - "allOf": [ - { - "$ref": "#/definitions/metaculus.QuestionRow" - } - ], - "description": "Summary of the Metaculus question this response is about." + "count": { + "type": "integer" }, - "resolution": { - "description": "Resolution of the question, as Metaculus reports it. Omitted while unresolved.", + "fetched_at": { "type": "string" }, - "resolution_set_time": { - "description": "Time the resolution was set, as Metaculus reports it.", - "example": "2027-01-02T00:00:00Z", + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "pid": { "type": "string" }, - "scaling": { - "allOf": [ - { - "$ref": "#/definitions/metaculus.QuestionScaling" - } - ], - "description": "Range and scale settings of a numeric or date question." + "rating_count": { + "type": "integer" }, - "short_title": { - "description": "Short form of the question title.", - "example": "OpenAI or Anthropic - higher valuation on Jan 1, 2027?", + "rating_histogram": { + "description": "RatingHistogram is the count of ratings per star, ascending: index 0\nis 1-star, index 4 is 5-star.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "recommended_ratio": { + "type": "number" + }, + "reviews": { + "items": { + "$ref": "#/definitions/jcrew.Review" + }, + "type": "array" + }, + "site": { "type": "string" }, "source_url": { - "description": "URL the data was read from.", - "example": "https://www.metaculus.com/questions/43731/", "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_reviews": { + "type": "integer" } }, "type": "object" }, - "metaculus.QuestionResponse": { + "jcrew.ProductSKU": { "properties": { - "fetched_at": { - "example": "2026-06-07T14:00:00Z", + "color_code": { "type": "string" }, - "question": { - "$ref": "#/definitions/metaculus.QuestionRow" + "color_name": { + "type": "string" }, - "source_url": { - "example": "https://www.metaculus.com/questions/43612/", + "currency": { + "type": "string" + }, + "orderable": { + "type": "boolean" + }, + "price": { + "type": "number" + }, + "size": { "type": "string" } }, "type": "object" }, - "metaculus.QuestionRow": { + "jcrew.ProductSummary": { "properties": { - "categories": { - "description": "Categories the question is filed under.", - "items": { - "$ref": "#/definitions/metaculus.Project" - }, - "type": "array" + "description": { + "type": "string" }, - "comment_count": { - "description": "Number of comments on the question.", - "example": 16, - "type": "integer" + "family_id": { + "type": "string" }, - "edited_at": { - "description": "Time the question was last edited, in UTC (RFC 3339).", - "example": "2026-06-07T13:14:34Z", + "gender": { "type": "string" }, - "forecaster_count": { - "description": "Number of forecasters who have forecast on the question.", - "example": 54, - "type": "integer" + "id": { + "type": "string" }, - "forecasts_count": { - "description": "Total number of forecasts submitted on the question.", - "example": 149, - "type": "integer" + "image_url": { + "type": "string" }, - "id": { - "description": "Metaculus post id of the question. Use it with the question endpoints.", - "example": 43612, - "type": "integer" + "name": { + "type": "string" }, - "latest_forecast_center": { - "description": "Central value of the latest community forecast, as Metaculus reports it.", - "example": 0.52, + "orderable": { + "type": "boolean" + }, + "price_max": { "type": "number" }, - "latest_forecast_lower": { - "description": "Lower bound of the latest community forecast interval.", - "example": 0.37, + "price_min": { "type": "number" }, - "latest_forecast_upper": { - "description": "Upper bound of the latest community forecast interval.", - "example": 0.66, + "sale_price_max": { "type": "number" }, - "open_time": { - "description": "Time the question opened for forecasts, in UTC (RFC 3339).", - "example": "2026-06-01T17:00:00Z", + "sale_price_min": { + "type": "number" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "jcrew.Review": { + "properties": { + "author": { "type": "string" }, - "projects": { - "description": "Tournaments and projects the question belongs to.", - "items": { - "$ref": "#/definitions/metaculus.Project" - }, - "type": "array" + "body": { + "type": "string" }, - "public_page_derived": { - "description": "Always `true`: the values are those shown publicly on Metaculus, without a login.", - "example": true, - "type": "boolean" + "created_at": { + "type": "string" }, - "published_at": { - "description": "Time the question was published, in UTC (RFC 3339).", - "example": "2026-05-29T15:33:53Z", + "headline": { "type": "string" }, - "question_id": { - "description": "Metaculus id of the underlying question, which can differ from the post `id`.", - "example": 43609, + "helpful_votes": { "type": "integer" }, - "question_title": { - "description": "Full wording of the question.", - "example": "What will be the World Bank monthly price of liquid sulphur in June 2026?", + "id": { "type": "string" }, - "question_type": { - "description": "Question type, for example `binary`, `numeric` or `multiple_choice`.", - "example": "numeric", + "location": { "type": "string" }, - "resolved": { - "description": "Whether the question has been resolved.", - "example": false, - "type": "boolean" + "not_helpful_votes": { + "type": "integer" }, - "scheduled_close_time": { - "description": "Time the question is scheduled to close to forecasts, in UTC (RFC 3339).", - "example": "2026-07-15T00:00:00Z", + "rating": { + "type": "integer" + }, + "updated_at": { "type": "string" }, - "scheduled_resolve_time": { - "description": "Time the question is scheduled to resolve, in UTC (RFC 3339).", - "example": "2026-09-07T00:00:00Z", + "verified_purchase": { + "type": "boolean" + } + }, + "type": "object" + }, + "jcrew.SearchResponse": { + "properties": { + "count": { + "type": "integer" + }, + "facets": { + "items": { + "$ref": "#/definitions/jcrew.Facet" + }, + "type": "array" + }, + "fetched_at": { "type": "string" }, - "slug": { - "description": "URL slug of the question.", - "example": "tampa-sulphur-price-in-june-2026", + "filter": { "type": "string" }, - "status": { - "description": "Question status on Metaculus, for example `open`.", - "example": "open", + "keyword": { "type": "string" }, - "title": { - "description": "Question title as shown on Metaculus.", - "example": "Tampa sulphur price in June 2026?", + "page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "products": { + "items": { + "$ref": "#/definitions/jcrew.ProductSummary" + }, + "type": "array" + }, + "site": { "type": "string" }, - "unit": { - "description": "Unit of the answer for numeric questions, for example `USD/metric ton`.", - "example": "USD/metric ton", + "sort": { "type": "string" }, - "url": { - "description": "Metaculus page URL of the question.", - "example": "https://www.metaculus.com/questions/43612/tampa-sulphur-price-in-june-2026/", + "source_url": { "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_products": { + "type": "integer" } }, "type": "object" }, - "metaculus.QuestionScaling": { + "jcrew.SizeChartResponse": { "properties": { - "continuous_range": { - "description": "ContinuousRange passes through Metaculus's scaling.continuous_range: null\nfor discrete questions, an array of numbers (the CDF internal locations)\nfor continuous/numeric ones. It was previously typed []string, so hydrating\na commented continuous question failed to decode and 503'd the comments\nfeeds; numbers are the correct element type.", - "items": {}, + "columns": { + "items": { + "type": "string" + }, "type": "array" }, - "inbound_outcome_count": { - "description": "Number of outcomes inside the question's range.", - "example": 10, - "type": "integer" + "fetched_at": { + "type": "string" }, - "nominal_max": { - "description": "Highest value of the range as shown to forecasters.", - "example": 100, - "type": "number" + "pid": { + "type": "string" }, - "nominal_min": { - "description": "Lowest value of the range as shown to forecasters.", - "example": 0, - "type": "number" + "site": { + "type": "string" }, - "open_lower_bound": { - "description": "Whether the answer can fall below the lower end of the range.", - "example": false, - "type": "boolean" + "sizes": { + "items": { + "$ref": "#/definitions/jcrew.SizeChartRow" + }, + "type": "array" }, - "open_upper_bound": { - "description": "Whether the answer can fall above the upper end of the range.", - "example": false, - "type": "boolean" + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "jcrew.SizeChartRow": { + "properties": { + "imperial": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "type": "object" }, - "range_max": { - "description": "Upper end of the question's range.", - "example": 100, + "metric": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "type": "object" + }, + "size": { + "type": "string" + } + }, + "type": "object" + }, + "jcrew.Store": { + "properties": { + "address": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "distance_miles": { "type": "number" }, - "range_min": { - "description": "Lower end of the question's range.", - "example": 0, + "hours": { + "additionalProperties": { + "$ref": "#/definitions/jcrew.Hour" + }, + "type": "object" + }, + "id": { + "type": "string" + }, + "latitude": { "type": "number" }, - "zero_point": { - "description": "Zero point of the question's range, when Metaculus defines one.", - "example": 0, + "longitude": { "type": "number" + }, + "name": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "region": { + "type": "string" + }, + "services": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "metaculus.QuestionsResponse": { + "jcrew.StoreResponse": { "properties": { - "feed": { - "description": "Feed the questions came from, for example `questions`.", - "example": "questions", - "type": "string" + "count": { + "type": "integer" }, "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:00:00Z", "type": "string" }, - "limit": { - "description": "Maximum number of questions requested.", - "example": 10, - "type": "integer" + "site": { + "type": "string" }, - "questions": { - "description": "Questions in the feed, one item per question.", + "source_url": { + "type": "string" + }, + "stores": { "items": { - "$ref": "#/definitions/metaculus.QuestionRow" + "$ref": "#/definitions/jcrew.Store" }, "type": "array" + } + }, + "type": "object" + }, + "jcrew.SuggestResponse": { + "properties": { + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "query": { + "type": "string" + }, + "site": { + "type": "string" }, "source_url": { - "description": "URL the data was read from.", - "example": "https://www.metaculus.com/questions/", "type": "string" + }, + "suggestions": { + "items": { + "$ref": "#/definitions/jcrew.Suggestion" + }, + "type": "array" } }, "type": "object" }, - "metaculus.forecastHistoryResponseDoc": { + "jcrew.Suggestion": { + "properties": { + "query": { + "type": "string" + }, + "total_results": { + "type": "integer" + } + }, + "type": "object" + }, + "jcrew.TimeInterval": { + "properties": { + "end": { + "type": "string" + }, + "start": { + "type": "string" + } + }, + "type": "object" + }, + "jcrew.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/metaculus.ForecastHistoryResponse" + "$ref": "#/definitions/jcrew.CategoriesResponse" }, "msg": { "example": "OK", @@ -132468,14 +138179,14 @@ }, "type": "object" }, - "metaculus.forecastsResponseDoc": { + "jcrew.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/metaculus.ForecastsResponse" + "$ref": "#/definitions/jcrew.CategoryResponse" }, "msg": { "example": "OK", @@ -132484,14 +138195,14 @@ }, "type": "object" }, - "metaculus.metadataResponseDoc": { + "jcrew.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/metaculus.QuestionMetadataResponse" + "$ref": "#/definitions/jcrew.ProductDetailResponse" }, "msg": { "example": "OK", @@ -132500,14 +138211,14 @@ }, "type": "object" }, - "metaculus.optionsResponseDoc": { + "jcrew.productReviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/metaculus.OptionsResponse" + "$ref": "#/definitions/jcrew.ProductReviewsResponse" }, "msg": { "example": "OK", @@ -132516,14 +138227,14 @@ }, "type": "object" }, - "metaculus.questionResponseDoc": { + "jcrew.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/metaculus.QuestionResponse" + "$ref": "#/definitions/jcrew.SearchResponse" }, "msg": { "example": "OK", @@ -132532,14 +138243,14 @@ }, "type": "object" }, - "metaculus.questionsResponseDoc": { + "jcrew.sizeChartResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/metaculus.QuestionsResponse" + "$ref": "#/definitions/jcrew.SizeChartResponse" }, "msg": { "example": "OK", @@ -132548,1208 +138259,1332 @@ }, "type": "object" }, - "metajobs.ListResponse": { + "jcrew.storesResponseDoc": { "properties": { - "listings": { - "items": { - "$ref": "#/definitions/metajobs.MetaJobListing" - }, - "type": "array" - }, - "page": { - "example": 1, + "code": { + "example": 200, "type": "integer" }, - "page_size": { - "example": 50, - "type": "integer" + "data": { + "$ref": "#/definitions/jcrew.StoreResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" - }, - "total": { - "example": 754, - "type": "integer" } }, "type": "object" }, - "metajobs.MetaJob": { + "jcrew.suggestResponseDoc": { "properties": { - "compensation_country": { - "example": "US", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "compensation_max": { - "example": "$241,000/year", - "type": "string" + "data": { + "$ref": "#/definitions/jcrew.SuggestResponse" }, - "compensation_min": { - "example": "$173,000/year", + "msg": { + "example": "OK", "type": "string" - }, - "departments": { - "example": [ - "Product Management" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { + } + }, + "type": "object" + }, + "jerusalempost.AuthorArticle": { + "properties": { + "published_at": { "type": "string" }, - "id": { - "example": "1238249364564427", + "summary": { "type": "string" }, - "locations": { - "example": [ - "Menlo Park", - " CA" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "minimum_qualifications": { - "items": { - "type": "string" - }, - "type": "array" - }, - "preferred_qualifications": { - "items": { - "type": "string" - }, - "type": "array" - }, - "responsibilities": { - "items": { - "type": "string" - }, - "type": "array" - }, "title": { - "example": "Product Manager", "type": "string" }, "url": { - "example": "https://www.metacareers.com/profile/job_details/1238249364564427/", "type": "string" } }, "type": "object" }, - "metajobs.MetaJobListing": { + "jerusalempost.AuthorRef": { "properties": { - "id": { - "example": "1238249364564427", + "slug": { "type": "string" }, - "last_modified": { - "example": "2026-07-29T01:17:34-07:00", + "type": { "type": "string" }, "url": { - "example": "https://www.metacareers.com/profile/job_details/1238249364564427/", "type": "string" } }, "type": "object" }, - "metajobs.MetaJobSearchResult": { + "jerusalempost.AuthorResponse": { "properties": { - "id": { - "example": "1010234865172301", - "type": "string" - }, - "locations": { - "example": [ - "Sunnyvale", - " CA" - ], + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/jerusalempost.AuthorArticle" }, "type": "array" }, - "sub_teams": { - "example": [ - "Hardware" - ], - "items": { - "type": "string" - }, - "type": "array" + "description": { + "type": "string" }, - "teams": { - "example": [ - "Infrastructure" - ], - "items": { - "type": "string" - }, - "type": "array" + "image_url": { + "type": "string" }, - "title": { - "example": "ASIC Engineer, Design", + "name": { + "type": "string" + }, + "type": { "type": "string" }, "url": { - "example": "https://www.metacareers.com/profile/job_details/1010234865172301/", "type": "string" } }, "type": "object" }, - "metajobs.SearchResponse": { + "jerusalempost.AuthorsResponse": { "properties": { - "jobs": { + "authors": { "items": { - "$ref": "#/definitions/metajobs.MetaJobSearchResult" + "$ref": "#/definitions/jerusalempost.AuthorRef" }, "type": "array" - }, - "source_url": { - "type": "string" - }, - "total": { - "example": 58, - "type": "integer" } }, "type": "object" }, - "metajobs.jobResponseDoc": { + "jimmyjohns.MenuCategory": { "properties": { - "code": { - "example": 200, + "category_id": { + "example": 69933, "type": "integer" }, - "data": { - "$ref": "#/definitions/metajobs.MetaJob" - }, - "msg": { - "example": "OK", + "name": { + "example": "Originals", "type": "string" - } - }, - "type": "object" - }, - "metajobs.listResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/metajobs.ListResponse" }, - "msg": { - "example": "OK", - "type": "string" + "products": { + "items": { + "$ref": "#/definitions/jimmyjohns.MenuProduct" + }, + "type": "array" } }, "type": "object" }, - "metajobs.searchResponseDoc": { + "jimmyjohns.MenuProduct": { "properties": { - "code": { - "example": 200, + "base_calories": { + "description": "BaseCalories and MaxCalories bound the calorie range across this\nitem's size/customization options. Both arrive from upstream as\nstrings (e.g. a \"-\" separator is rendered client-side), so they are\nkept as strings rather than coerced to a number.", + "example": "370", + "type": "string" + }, + "chain_product_id": { + "description": "ChainProductID identifies this item across every Jimmy John's\nrestaurant; ProductID is specific to this restaurant's menu.", + "example": 353441, "type": "integer" }, - "data": { - "$ref": "#/definitions/metajobs.SearchResponse" + "cost": { + "description": "Cost is the base price. Many sandwiches price entirely through a size\nmodifier rather than a base cost, so this is commonly 0 -- it is not\na parsing gap.", + "example": 8.69, + "type": "number" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "metro.AuthorArticle": { - "properties": { - "image_url": { + "description": { + "example": "HAM, PROVOLONE, lettuce, tomato & mayo", "type": "string" }, - "published_at": { + "image_url": { "type": "string" }, - "section": { + "max_calories": { + "example": "650", "type": "string" }, - "summary": { + "name": { + "example": "#1 The Pepe®", "type": "string" }, - "title": { - "type": "string" + "product_id": { + "example": 33276056, + "type": "integer" }, - "url": { + "short_description": { "type": "string" } }, "type": "object" }, - "metro.AuthorResponse": { + "jimmyjohns.MenuResponse": { "properties": { - "articles": { + "categories": { "items": { - "$ref": "#/definitions/metro.AuthorArticle" + "$ref": "#/definitions/jimmyjohns.MenuCategory" }, "type": "array" }, - "bio": { - "type": "string" - }, - "image_url": { - "type": "string" + "category_count": { + "example": 20, + "type": "integer" }, - "job_title": { + "fetched_at": { "type": "string" }, - "knows_about": { - "items": { - "type": "string" - }, - "type": "array" - }, - "name": { - "type": "string" + "product_count": { + "example": 180, + "type": "integer" }, - "same_as": { - "items": { - "type": "string" - }, - "type": "array" + "restaurant_id": { + "example": 67182, + "type": "integer" }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "microsoftstore.AgeRating": { + "jimmyjohns.ModifierChoice": { "properties": { - "age": { - "example": 13, + "base_calories": { + "description": "BaseCalories is this choice's calorie delta, which can be negative\nfor a \"light\"/\"no\" ingredient choice.", + "example": "70", + "type": "string" + }, + "chain_option_id": { + "example": 2476875, "type": "integer" }, - "description": { - "example": "For ages 13 and up", - "type": "string" + "cost": { + "description": "Cost is this choice's price delta. Many choices are free (the\nincluded default); an upcharge choice (e.g. \"Xtra Smoked Ham\") or a\nsize step carries a positive cost.", + "example": 8.69, + "type": "number" }, - "descriptors": { - "example": [ - "[\"Diverse Content: Discretion Advised\"]" - ], + "groups": { "items": { - "type": "string" + "$ref": "#/definitions/jimmyjohns.ModifierGroup" }, "type": "array" }, - "system": { - "example": "ESRB", + "is_default": { + "type": "boolean" + }, + "max_calories": { "type": "string" }, - "value": { - "example": "TEEN", + "name": { + "example": "REGULAR", "type": "string" + }, + "option_id": { + "example": 5265915696, + "type": "integer" } }, "type": "object" }, - "microsoftstore.Award": { + "jimmyjohns.ModifierGroup": { "properties": { - "category": { - "example": "Productivity category", - "type": "string" + "chain_modifier_id": { + "example": 480998, + "type": "integer" }, - "description": { - "example": "The Microsoft Store Awards celebrate apps and games that emphasize exceptional experiences for their users.", - "type": "string" + "choices": { + "items": { + "$ref": "#/definitions/jimmyjohns.ModifierChoice" + }, + "type": "array" }, - "editorial_id": { - "example": "Editorials/Awards_2025/Global/Notion_xpdbvss44r0l9h", - "type": "string" + "group_id": { + "example": 1176354037, + "type": "integer" }, - "title": { - "example": "Microsoft Store Awards 2025", - "type": "string" + "mandatory": { + "type": "boolean" }, - "year": { - "example": 2025, + "max_selects": { "type": "integer" + }, + "min_selects": { + "type": "integer" + }, + "name": { + "example": "Choose Your Size", + "type": "string" } }, "type": "object" }, - "microsoftstore.Badge": { + "jimmyjohns.ModifiersResponse": { "properties": { - "icon_id": { - "example": "AI", + "fetched_at": { "type": "string" }, - "text": { - "example": "Uses AI features", + "group_count": { + "example": 9, + "type": "integer" + }, + "groups": { + "items": { + "$ref": "#/definitions/jimmyjohns.ModifierGroup" + }, + "type": "array" + }, + "product_id": { + "example": 33276056, + "type": "integer" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "microsoftstore.CategoriesResponse": { + "jimmyjohns.NearbyResponse": { "properties": { - "categories": { + "count": { + "example": 10, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "radius_miles": { + "example": 15, + "type": "integer" + }, + "restaurants": { "items": { - "$ref": "#/definitions/microsoftstore.CategoryTaxonomy" + "$ref": "#/definitions/jimmyjohns.NearbyRestaurant" }, "type": "array" }, - "media_type": { - "example": "apps", + "source_url": { "type": "string" } }, "type": "object" }, - "microsoftstore.CategoryResponse": { + "jimmyjohns.NearbyRestaurant": { "properties": { - "category": { - "example": "Photo & video", - "type": "string" + "accepts_delivery": { + "type": "boolean" }, - "count": { - "example": 20, - "type": "integer" + "accepts_pickup": { + "type": "boolean" }, - "has_more": { - "example": true, + "address": { + "$ref": "#/definitions/jimmyjohns.StoreAddress" + }, + "distance_miles": { + "example": 0.4, + "type": "number" + }, + "is_open": { "type": "boolean" }, - "items": { - "items": { - "$ref": "#/definitions/microsoftstore.Product" - }, - "type": "array" + "latitude": { + "example": 44.9401301, + "type": "number" }, - "media_type": { - "example": "apps", + "longitude": { + "example": -93.1411487, + "type": "number" + }, + "name": { + "example": "JJ0004", "type": "string" }, - "next_cursor": { + "order_url": { + "example": "https://online.jimmyjohns.com/menu/jj0004/", "type": "string" }, - "source_url": { + "phone_number": { + "example": "(651) 222-2221", + "type": "string" + }, + "restaurant_id": { + "example": 67182, + "type": "integer" + }, + "slug": { + "example": "jj0004", + "type": "string" + }, + "timezone": { + "example": "America/Chicago", "type": "string" } }, "type": "object" }, - "microsoftstore.CategoryTaxonomy": { + "jimmyjohns.SitemapEntry": { "properties": { - "category": { - "example": "Books & reference", + "kind": { + "description": "Kind distinguishes the three page variants Jimmy John's publishes per\nstore: sandwiches, delivery and catering. All three describe the same\nrestaurant; `sandwiches` is the canonical one.", + "example": "sandwiches", "type": "string" }, - "subcategories": { - "example": [ - "[\"E-reader\"", - "\"Fiction\"", - "\"Nonfiction\"", - "\"Reference\"]" - ], - "items": { - "type": "string" - }, - "type": "array" + "path": { + "example": "in/columbus/sandwiches-1414.html", + "type": "string" + }, + "store_number": { + "description": "StoreNumber is the trailing id shared by all three variants.", + "example": "1414", + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "microsoftstore.ChartsResponse": { + "jimmyjohns.SitemapResponse": { "properties": { - "category": { - "example": "Photo & video", - "type": "string" - }, "count": { - "example": 20, + "example": 100, "type": "integer" }, - "discount_filter": { - "example": "onsale", - "type": "string" - }, - "items": { + "entries": { "items": { - "$ref": "#/definitions/microsoftstore.Product" + "$ref": "#/definitions/jimmyjohns.SitemapEntry" }, "type": "array" }, - "list": { - "example": "TopFree", - "type": "string" - }, - "media_type": { - "example": "apps", - "type": "string" - }, - "num_players_filter": { - "example": "SinglePlayer", + "fetched_at": { "type": "string" }, "page": { "example": 1, "type": "integer" }, - "page_size": { - "example": 20, + "shard": { + "example": 0, "type": "integer" }, - "source_url": { - "type": "string" + "shard_count": { + "example": 1, + "type": "integer" }, - "subcategory": { - "example": "E-reader", + "source_url": { "type": "string" }, - "subscription_filter": { - "example": "gamepass", - "type": "string" + "total_in_shard": { + "example": 9789, + "type": "integer" }, - "title": { - "example": "Must-have free apps", - "type": "string" + "total_pages": { + "example": 98, + "type": "integer" } }, "type": "object" }, - "microsoftstore.EditorialResponse": { + "jimmyjohns.StoreAddress": { "properties": { - "editorial_id": { - "example": "Editorials/Awards_2025/Global/Notion_xpdbvss44r0l9h", + "city": { + "example": "Columbus", "type": "string" }, - "header_image": { + "country": { + "example": "US", "type": "string" }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" - }, - "relevant_products": { - "items": { - "$ref": "#/definitions/microsoftstore.Product" - }, - "type": "array" - }, - "source_url": { + "postal_code": { + "example": "47201", "type": "string" }, - "subtitle": { - "$ref": "#/definitions/microsoftstore.EditorialSubtitle" + "region": { + "example": "IN", + "type": "string" }, - "title": { - "example": "Productivity category", + "street": { + "example": "2115 W Jonathan Moore Pike", "type": "string" } }, "type": "object" }, - "microsoftstore.EditorialSubtitle": { + "jimmyjohns.StoreHours": { "properties": { - "icon": { + "closes": { + "example": "22:00", "type": "string" }, - "text": { - "example": "Microsoft Store Awards 2025", + "day_of_week": { + "example": "Monday", + "type": "string" + }, + "opens": { + "example": "10:30", "type": "string" } }, "type": "object" }, - "microsoftstore.EventsResponse": { + "jimmyjohns.StoreResponse": { "properties": { - "count": { - "example": 7, - "type": "integer" + "address": { + "$ref": "#/definitions/jimmyjohns.StoreAddress" }, - "items": { + "fetched_at": { + "type": "string" + }, + "hours": { "items": { - "$ref": "#/definitions/microsoftstore.Product" + "$ref": "#/definitions/jimmyjohns.StoreHours" }, "type": "array" }, - "media_type": { - "example": "apps", + "image_url": { "type": "string" }, - "page": { - "example": 1, - "type": "integer" + "latitude": { + "example": 39.1994347, + "type": "number" }, - "page_size": { - "example": 20, - "type": "integer" + "longitude": { + "example": -85.9470667, + "type": "number" }, - "source_url": { + "name": { + "example": "Jimmy John's", "type": "string" }, - "title": { - "example": "Special events", + "path": { + "type": "string" + }, + "phone_number": { + "type": "string" + }, + "serves_cuisine": { + "type": "string" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "microsoftstore.Feature": { + "jimmyjohns.menuResponseDoc": { "properties": { - "description": { - "example": "Get answers, writing help, and image generation.", - "type": "string" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "title": { - "example": "AI assistant", - "type": "string" + "data": { + "$ref": "#/definitions/jimmyjohns.MenuResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "microsoftstore.Image": { + "jimmyjohns.modifiersResponseDoc": { "properties": { - "height": { - "example": 1080, + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "type": { - "example": "Screenshot", - "type": "string" - }, - "url": { - "example": "https://store-images.s-microsoft.com/image/apps.19060...f4dfc459-dae3-4ab8-8f40-18aa7ae9762f", - "type": "string" + "data": { + "$ref": "#/definitions/jimmyjohns.ModifiersResponse" }, - "width": { - "example": 1920, - "type": "integer" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "microsoftstore.Product": { + "jimmyjohns.nearbyResponseDoc": { "properties": { - "average_rating": { - "example": 4.3, - "type": "number" - }, - "award": { - "$ref": "#/definitions/microsoftstore.Award" - }, - "categories": { - "example": [ - "[\"Music\"]" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { - "example": "Love music and podcasts? Play your favorite songs...", - "type": "string" - }, - "display_price": { - "example": "Free", - "type": "string" - }, - "free": { - "example": true, - "type": "boolean" - }, - "icon_url": { - "example": "https://store-images.s-microsoft.com/image/apps.10546...", - "type": "string" - }, - "is_application": { - "example": true, - "type": "boolean" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "is_game": { - "type": "boolean" + "data": { + "$ref": "#/definitions/jimmyjohns.NearbyResponse" }, - "is_pwa": { - "type": "boolean" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "jimmyjohns.sitemapResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "is_subscription": { - "type": "boolean" + "data": { + "$ref": "#/definitions/jimmyjohns.SitemapResponse" }, - "is_theme": { - "type": "boolean" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "jimmyjohns.storeResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "kind": { - "example": "app", - "type": "string" + "data": { + "$ref": "#/definitions/jimmyjohns.StoreResponse" }, - "media_type": { - "example": "Apps", + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "jobs.BoardResponse": { + "properties": { + "company": { + "description": "Company or board name the postings belong to.", "type": "string" }, - "poster_art_url": { - "type": "string" + "count": { + "description": "Number of jobs returned in this response.", + "type": "integer" }, - "price": { - "example": 0, - "type": "number" + "jobs": { + "description": "Job postings on the board, one item per posting.", + "items": { + "$ref": "#/definitions/jobs.Job" + }, + "type": "array" }, - "product_id": { - "example": "9ncbcszsjrsb", + "provider": { + "description": "Applicant tracking system the board was read from, for example `greenhouse` or `lever`.", "type": "string" }, - "publisher": { - "example": "Spotify AB", + "source_url": { + "description": "URL the data was read from.", "type": "string" }, - "rating_count": { - "example": "34K", - "type": "string" + "total": { + "description": "Total number of open postings on the board, when the provider reports it.", + "type": "integer" + } + }, + "type": "object" + }, + "jobs.CompanySearchResponse": { + "properties": { + "count": { + "description": "Number of providers where the slug has a board with open roles.", + "type": "integer" }, - "release_date_utc": { - "example": "2017-10-24T12:04:25Z", - "type": "string" + "found": { + "description": "Providers where the slug resolves to a board, ranked by open roles.", + "items": { + "$ref": "#/definitions/jobs.ProviderHit" + }, + "type": "array" }, - "title": { - "example": "Spotify - Music and Podcasts", + "slug": { + "description": "Company careers slug that was searched.", "type": "string" + } + }, + "type": "object" + }, + "jobs.Count": { + "properties": { + "count": { + "description": "Number of open roles with that name.", + "type": "integer" }, - "url": { - "example": "https://apps.microsoft.com/detail/9ncbcszsjrsb", + "name": { + "description": "Department, location or job title being counted.", "type": "string" } }, "type": "object" }, - "microsoftstore.ProductDetail": { + "jobs.HiringSignals": { "properties": { - "age_ratings": { + "as_of": { + "description": "Time the snapshot was taken, in UTC (RFC 3339).", + "type": "string" + }, + "by_department": { + "description": "Open roles per department, largest first, up to 20 entries.", "items": { - "$ref": "#/definitions/microsoftstore.AgeRating" + "$ref": "#/definitions/jobs.Count" }, "type": "array" }, - "allowed_platforms": { - "example": [ - "[\"Windows.Desktop\"", - "\"Windows.Xbox\"]" - ], + "by_location": { + "description": "Open roles per location, largest first, up to 20 entries.", "items": { - "type": "string" + "$ref": "#/definitions/jobs.Count" }, "type": "array" }, - "approximate_size_bytes": { - "example": 210105174, + "company": { + "description": "Company or board identifier that was queried.", + "type": "string" + }, + "new_last_30d": { + "description": "Number of sampled roles posted in the last 30 days. Counts only postings with a usable posting date.", "type": "integer" }, - "average_rating": { - "example": 4.3, + "new_last_7d": { + "description": "Number of sampled roles posted in the last 7 days. Counts only postings with a usable posting date.", + "type": "integer" + }, + "provider": { + "description": "Applicant tracking system the board was read from, for example `greenhouse`.", + "type": "string" + }, + "remote_count": { + "description": "Number of sampled roles marked as remote.", + "type": "integer" + }, + "remote_pct": { + "description": "Share of sampled roles marked as remote, as a percentage rounded to one decimal.", "type": "number" }, - "badges": { - "items": { - "$ref": "#/definitions/microsoftstore.Badge" - }, - "type": "array" + "sampled_roles": { + "description": "Number of postings the breakdowns below were computed from.", + "type": "integer" }, - "box_art_url": { + "source_url": { + "description": "URL the data was read from.", "type": "string" }, - "capabilities": { + "top_titles": { + "description": "Most common job titles with their counts, up to 10 entries.", "items": { - "type": "string" + "$ref": "#/definitions/jobs.Count" }, "type": "array" }, - "card_actions": { - "example": [ - "[\"Install\"", - "\"Launch\"]" - ], + "total_open_roles": { + "description": "Number of open roles on the board. Uses the provider's own total when it gives one.", + "type": "integer" + } + }, + "type": "object" + }, + "jobs.Job": { + "properties": { + "ai_tools_mentioned": { + "description": "AITools lists canonical AI tool and platform names mentioned in the job\ntitle or description, such as \"ChatGPT\" or \"GitHub Copilot\".", "items": { "type": "string" }, "type": "array" }, - "categories": { - "example": [ - "[\"Music\"]" - ], + "apply_url": { + "description": "Link to the application page for the job.", + "type": "string" + }, + "benefits_mentioned": { + "description": "Benefits, Clearance, and Education contain canonical requirements and\nofferings mentioned in the job title or description.", "items": { "type": "string" }, "type": "array" }, - "category": { - "example": "Music", + "company": { + "description": "Name of the hiring company.", "type": "string" }, - "currency_code": { - "example": "USD", + "company_logo_url": { + "description": "URL of the company's logo.", "type": "string" }, - "description": { + "compensation": { + "description": "Compensation is the raw provider summary; the *Min/*Max/*Currency fields are\nparsed from it when the summary contains a recognizable pay range/amount.\nCompensationPeriod is the pay period (\"hourly\", \"daily\", \"weekly\",\n\"monthly\", \"yearly\") when the summary states one explicitly; empty when\nno period is stated (most single \"$150K – $190K\"-style ranges are\nimplicitly annual but that is never asserted here).", "type": "string" }, - "display_price": { - "example": "Free", + "compensation_currency": { + "description": "Currency code of the pay range, for example `USD`.", "type": "string" }, - "features": { - "items": { - "$ref": "#/definitions/microsoftstore.Feature" - }, - "type": "array" - }, - "free": { - "example": true, - "type": "boolean" + "compensation_max": { + "description": "Upper end of the pay range stated in the posting.", + "type": "number" }, - "hero_image_url": { - "type": "string" + "compensation_min": { + "description": "Lower end of the pay range stated in the posting.", + "type": "number" }, - "icon_url": { + "compensation_period": { + "description": "Pay period the posting states: `hourly`, `daily`, `weekly`, `monthly` or `yearly`. Omitted when the posting names none.", "type": "string" }, - "is_application": { - "type": "boolean" - }, - "is_game": { - "type": "boolean" - }, - "is_purchase_enabled": { - "type": "boolean" - }, - "is_pwa": { - "type": "boolean" - }, - "is_subscription": { - "type": "boolean" - }, - "is_theme": { - "type": "boolean" - }, - "kind": { - "example": "app", + "department": { + "description": "Department the job belongs to.", "type": "string" }, - "last_update_date_utc": { - "example": "2026-09-22T14:30:28Z", + "description_html": { + "description": "Job description as HTML.", "type": "string" }, - "media_type": { - "example": "Apps", + "description_text": { + "description": "Job description as plain text.", "type": "string" }, - "package_family_names": { - "example": [ - "[\"SpotifyAB.SpotifyMusic_zpdnekdrzrea0\"]" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "platforms": { - "example": [ - "[\"x86\"", - "\"x64\"]" - ], + "education_level_required": { + "description": "Education levels mentioned in the job title or description.", "items": { "type": "string" }, "type": "array" }, - "poster_art_url": { + "employment_type": { + "description": "Employment type the provider lists, such as full-time or contract.", "type": "string" }, - "price": { - "example": 0, - "type": "number" - }, - "privacy_url": { - "example": "https://www.spotify.com/legal/privacy-policy/", + "id": { + "description": "Posting id within the provider. Use it with the provider's job endpoint.", "type": "string" }, - "product_id": { - "example": "9ncbcszsjrsb", + "location": { + "description": "Primary job location as the provider shows it.", "type": "string" }, - "product_type": { - "example": "Application", + "location_city": { + "description": "LocationCity/State/Country are the structured components behind Location\nwhen the provider exposes them (or once the geo-enrich worker has\nresolved them from the free-text Location string) -- present only for\nthe primary/first location, matching Location itself.", "type": "string" }, - "publisher": { - "example": "Spotify AB", + "location_country": { + "description": "Country of the primary location.", "type": "string" }, - "publisher_address": { + "location_state": { + "description": "State or region of the primary location.", "type": "string" }, - "publisher_id": { - "example": "10113470", + "locations": { + "description": "All locations listed for the job.", + "items": { + "type": "string" + }, + "type": "array" + }, + "posted_age_text": { + "description": "Workday relative age (\"Posted Today\")", "type": "string" }, - "rating_count": { - "example": 34225, - "type": "integer" + "posted_at": { + "description": "RFC3339 / date when the provider gives one", + "type": "string" }, - "rating_count_formatted": { - "example": "34.2K", + "provider": { + "description": "Applicant tracking system the posting comes from, for example `greenhouse` or `lever`.", "type": "string" }, - "release_date_utc": { - "example": "2017-10-24T12:04:25Z", + "remote": { + "description": "True when the posting is marked as remote.", + "type": "boolean" + }, + "req_id": { + "description": "Requisition id the company uses for the job.", "type": "string" }, - "screenshots": { + "security_clearance_required": { + "description": "Security clearances mentioned in the job title or description.", "items": { - "$ref": "#/definitions/microsoftstore.Image" + "type": "string" }, "type": "array" }, - "skus_summary": { + "skills_mentioned": { + "description": "Skills lists canonical ESCO skill labels mentioned in the job title or\ndescription.", "items": { - "$ref": "#/definitions/microsoftstore.SkuPrice" + "type": "string" }, "type": "array" }, - "source_url": { + "team": { + "description": "Team the job belongs to.", "type": "string" }, - "supported_languages": { - "items": { - "type": "string" - }, - "type": "array" - }, "title": { - "example": "Spotify - Music and Podcasts", + "description": "Job title as the company posted it.", "type": "string" }, - "trailers": { - "items": { - "$ref": "#/definitions/microsoftstore.Image" - }, - "type": "array" - }, "url": { - "example": "https://apps.microsoft.com/detail/9ncbcszsjrsb", - "type": "string" - }, - "version": { + "description": "Link to the job posting page.", "type": "string" }, - "website": { - "example": "https://www.spotify.com", + "workplace_type": { + "description": "Workplace arrangement the provider lists, such as remote, hybrid or on-site.", "type": "string" } }, "type": "object" }, - "microsoftstore.PublisherResponse": { + "jobs.ProviderHit": { "properties": { - "count": { - "example": 3, - "type": "integer" + "board_url": { + "description": "URL of the company's public careers board on that provider.", + "type": "string" }, - "has_more": { - "example": false, - "type": "boolean" + "company": { + "description": "Company or board name on that provider.", + "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/microsoftstore.Product" - }, - "type": "array" + "provider": { + "description": "Applicant tracking system the board is on, for example `greenhouse`.", + "type": "string" }, - "next_cursor": { + "total_open_roles": { + "description": "Number of open roles on the board.", + "type": "integer" + } + }, + "type": "object" + }, + "jobs.boardResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/jobs.BoardResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "jobs.jobResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "publisher_name": { - "example": "Spotify AB", + "data": { + "$ref": "#/definitions/jobs.Job" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "jobs.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "source_url": { + "data": { + "$ref": "#/definitions/jobs.CompanySearchResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "microsoftstore.RecommendedProduct": { + "jobs.signalsResponseDoc": { "properties": { - "average_rating": { - "example": 4.5, - "type": "number" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/jobs.HiringSignals" }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "jumia.CategoriesResponse": { + "properties": { "categories": { - "example": [ - "[\"Action & adventure\"]" - ], "items": { - "type": "string" + "$ref": "#/definitions/jumia.CategoryNode" }, "type": "array" }, - "icon_url": { + "category": { + "example": "phones-tablets", "type": "string" }, - "product_id": { - "example": "9p4qk476j199", + "count": { + "example": 12, + "type": "integer" + }, + "country": { + "example": "ng", "type": "string" }, - "title": { - "example": "Bermuda Adventures: Farm Games", + "fetched_at": { "type": "string" }, - "url": { - "example": "https://apps.microsoft.com/detail/9p4qk476j199", + "source_url": { "type": "string" } }, "type": "object" }, - "microsoftstore.RecommendedResponse": { + "jumia.CategoryNode": { "properties": { - "items": { + "children": { "items": { - "$ref": "#/definitions/microsoftstore.RecommendedProduct" + "$ref": "#/definitions/jumia.CategoryNode" }, "type": "array" }, - "section_title": { - "example": "Recommended for you", + "id": { + "example": "8070", "type": "string" }, - "source_url": { + "name": { + "example": "Phones & Tablets", + "type": "string" + }, + "slug": { + "example": "phones-tablets", + "type": "string" + }, + "url": { + "example": "https://www.jumia.com.ng/phones-tablets/", "type": "string" } }, "type": "object" }, - "microsoftstore.RelatedResponse": { + "jumia.CountriesResponse": { "properties": { - "has_more_pages": { - "example": true, - "type": "boolean" + "count": { + "example": 4, + "type": "integer" }, - "items": { + "countries": { "items": { - "$ref": "#/definitions/microsoftstore.Product" + "$ref": "#/definitions/jumia.Country" }, "type": "array" - }, - "page": { - "example": 1, - "type": "integer" - }, - "page_size": { - "example": 10, - "type": "integer" - }, - "product_id": { - "example": "9ncbcszsjrsb", + } + }, + "type": "object" + }, + "jumia.Country": { + "properties": { + "code": { + "example": "ng", "type": "string" }, - "product_type": { - "example": "Application", + "currency": { + "example": "NGN", "type": "string" }, - "source_url": { + "domain": { + "example": "www.jumia.com.ng", "type": "string" }, - "total_count": { - "example": 50, - "type": "integer" + "name": { + "example": "Nigeria", + "type": "string" } }, "type": "object" }, - "microsoftstore.Review": { + "jumia.Listing": { "properties": { - "device_family": { - "example": "Windows.Desktop", + "brand": { + "example": "Samsung", "type": "string" }, - "helpful_negative": { - "example": 30, - "type": "integer" + "categories": { + "items": { + "type": "string" + }, + "type": "array" }, - "helpful_positive": { - "example": 74, + "currency": { + "example": "NGN", + "type": "string" + }, + "discount_percent": { + "example": 20, "type": "integer" }, - "id": { - "example": "74a23681-6299-5cc4-5e83-a48d1c49ece6", + "image": { "type": "string" }, - "is_revised": { + "jumia_express": { "type": "boolean" }, - "locale": { - "example": "EN-US", + "name": { + "example": "Galaxy A07 6.7\" 4GB RAM/128GB ROM - Black", "type": "string" }, - "market": { - "example": "US", - "type": "string" + "official_store": { + "type": "boolean" }, - "os_version": { - "example": "10.0.26200.8524", - "type": "string" + "original_price": { + "example": 250000, + "type": "number" }, - "rating": { - "example": 1, - "type": "integer" + "out_of_stock": { + "type": "boolean" }, - "reviewer_name": { - "example": "constance", - "type": "string" + "price": { + "example": 199999, + "type": "number" }, - "submitted_at_utc": { - "example": "2026-07-12T21:41:45Z", - "type": "string" + "price_max": { + "type": "number" }, - "text": { - "example": "so, the app used to be great...", - "type": "string" + "rating": { + "example": 4.1, + "type": "number" }, - "title": { - "example": "spotify has fallen off. HARD.", + "rating_count": { + "example": 396, + "type": "integer" + }, + "sku": { + "example": "SA948MP6Z6LPDNAFAMZ", "type": "string" }, "url": { + "example": "https://www.jumia.com.ng/samsung-galaxy-a07-418619812.html", "type": "string" } }, "type": "object" }, - "microsoftstore.ReviewsResponse": { + "jumia.ListingResponse": { "properties": { - "has_more_pages": { - "example": true, - "type": "boolean" + "category": { + "example": "phones-tablets", + "type": "string" }, - "next_page": { - "example": 2, + "count": { + "example": 40, "type": "integer" }, + "country": { + "example": "ng", + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "has_next": { + "example": true, + "type": "boolean" + }, "page": { "example": 1, "type": "integer" }, - "page_size": { - "example": 20, - "type": "integer" - }, - "product_id": { - "example": "9ncbcszsjrsb", - "type": "string" - }, - "reviews": { + "products": { "items": { - "$ref": "#/definitions/microsoftstore.Review" + "$ref": "#/definitions/jumia.Listing" }, "type": "array" }, - "sort": { - "example": "MostHelpful", + "query": { + "example": "wireless earbuds", "type": "string" }, "source_url": { "type": "string" }, "total_count": { - "example": 307, + "example": 7522, "type": "integer" } }, "type": "object" }, - "microsoftstore.ReviewsSummaryResponse": { + "jumia.Product": { "properties": { - "average_rating": { - "example": 4.3, - "type": "number" + "availability": { + "example": "InStock", + "type": "string" }, - "most_critical_review": { - "$ref": "#/definitions/microsoftstore.Review" + "brand": { + "example": "Samsung", + "type": "string" }, - "most_favorable_review": { - "$ref": "#/definitions/microsoftstore.Review" + "categories": { + "items": { + "type": "string" + }, + "type": "array" }, - "product_id": { - "example": "9ncbcszsjrsb", + "country": { + "example": "ng", "type": "string" }, - "rating_distribution": { - "type": "object" + "currency": { + "example": "NGN", + "type": "string" }, - "rating_status": { - "example": "RatingAvailable", + "description": { "type": "string" }, - "review_count": { - "example": 307, + "discount_percent": { + "example": 20, "type": "integer" }, - "source_url": { + "fetched_at": { + "type": "string" + }, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "key_features": { + "type": "string" + }, + "name": { + "type": "string" + }, + "original_price": { + "example": 250000, + "type": "number" + }, + "price": { + "example": 199999, + "type": "number" + }, + "rating": { + "example": 4.1, + "type": "number" + }, + "rating_count": { + "example": 396, + "type": "integer" + }, + "seller": { + "$ref": "#/definitions/jumia.Seller" + }, + "sku": { + "example": "SA948MP6Z6LPDNAFAMZ", + "type": "string" + }, + "specifications": { + "items": { + "$ref": "#/definitions/jumia.Specification" + }, + "type": "array" + }, + "url": { "type": "string" } }, "type": "object" }, - "microsoftstore.SearchResponse": { + "jumia.RatingBucket": { "properties": { - "age": { - "example": "all", + "count": { + "example": 220, + "type": "integer" + }, + "stars": { + "example": 5, + "type": "integer" + } + }, + "type": "object" + }, + "jumia.Review": { + "properties": { + "author": { + "example": "Victor", "type": "string" }, - "category": { - "example": "all", + "date": { + "example": "2026-10-19", + "type": "string" + }, + "rating": { + "example": 5, + "type": "integer" + }, + "text": { + "type": "string" + }, + "title": { + "example": "i love it", "type": "string" }, + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "jumia.ReviewsResponse": { + "properties": { + "average_rating": { + "example": 4.1, + "type": "number" + }, "count": { - "example": 20, + "example": 10, "type": "integer" }, - "has_more": { + "country": { + "example": "ng", + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "has_next": { "example": true, "type": "boolean" }, - "items": { + "histogram": { "items": { - "$ref": "#/definitions/microsoftstore.Product" + "$ref": "#/definitions/jumia.RatingBucket" }, "type": "array" }, - "media_type": { - "example": "all", - "type": "string" + "page": { + "example": 1, + "type": "integer" }, - "next_cursor": { - "example": "bz0wJmI9OU5DQkNTWlNKUlNCLD...", - "type": "string" + "rating_count": { + "example": 396, + "type": "integer" }, - "price": { - "example": "all", - "type": "string" + "review_count": { + "example": 147, + "type": "integer" }, - "query": { - "example": "spotify", + "reviews": { + "items": { + "$ref": "#/definitions/jumia.Review" + }, + "type": "array" + }, + "sku": { + "example": "SA948MP6Z6LPDNAFAMZ", "type": "string" }, "source_url": { @@ -133758,133 +139593,167 @@ }, "type": "object" }, - "microsoftstore.SkuPrice": { + "jumia.Seller": { "properties": { - "display_msrp": { - "example": "Free", + "followers": { + "example": 3387, + "type": "integer" + }, + "id": { + "example": "338501", "type": "string" }, - "display_price": { - "example": "Free", + "name": { + "example": "CHEAP ZONE - AC", "type": "string" }, - "msrp": { - "example": 0, + "score_percent": { + "example": 96, "type": "number" }, - "price": { - "example": 0, - "type": "number" + "shipping_speed": { + "example": "Excellent", + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "microsoftstore.SpotlightResponse": { + "jumia.SitemapFile": { "properties": { - "count": { - "example": 8, - "type": "integer" + "language": { + "example": "en", + "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/microsoftstore.Product" - }, - "type": "array" + "last_modified": { + "example": "2026-10-19", + "type": "string" }, - "media_type": { - "example": "home", + "name": { + "example": "products-sitemap-9.xml.gz", "type": "string" }, - "source_url": { + "type": { + "example": "products", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "microsoftstore.SuggestResponse": { + "jumia.SitemapURL": { "properties": { - "completions": { - "example": [ - "[\"spotify\"", - "\"spot\"", - "\"spotify for podcasters\"]" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "prefix": { - "example": "spot", + "image": { "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/microsoftstore.SuggestedProduct" - }, - "type": "array" + "last_modified": { + "example": "2026-04-11", + "type": "string" }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "microsoftstore.SuggestedProduct": { + "jumia.SitemapURLsResponse": { "properties": { - "icon_url": { + "count": { + "example": 1000, + "type": "integer" + }, + "country": { + "example": "ng", "type": "string" }, - "is_application": { + "fetched_at": { + "type": "string" + }, + "has_next": { "example": true, "type": "boolean" }, - "is_game": { - "type": "boolean" + "page": { + "example": 1, + "type": "integer" }, - "media_type": { - "example": "apps", - "type": "string" + "page_size": { + "example": 1000, + "type": "integer" }, - "product_id": { - "example": "9ncbcszsjrsb", + "sitemap": { + "example": "products-sitemap-9.xml.gz", "type": "string" }, - "title": { - "example": "Spotify - Music and Podcasts", + "source_url": { "type": "string" }, - "url": { - "example": "https://apps.microsoft.com/detail/9ncbcszsjrsb", - "type": "string" + "total_count": { + "example": 16000, + "type": "integer" + }, + "urls": { + "items": { + "$ref": "#/definitions/jumia.SitemapURL" + }, + "type": "array" } }, "type": "object" }, - "microsoftstore.categoriesResponseDoc": { + "jumia.SitemapsResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 61, "type": "integer" }, - "data": { - "$ref": "#/definitions/microsoftstore.CategoriesResponse" + "country": { + "example": "ng", + "type": "string" }, - "msg": { - "example": "OK", + "fetched_at": { + "type": "string" + }, + "sitemaps": { + "items": { + "$ref": "#/definitions/jumia.SitemapFile" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "type": { "type": "string" } }, "type": "object" }, - "microsoftstore.categoryResponseDoc": { + "jumia.Specification": { + "properties": { + "name": { + "example": "GTIN Barcode", + "type": "string" + }, + "value": { + "example": "07205341072713", + "type": "string" + } + }, + "type": "object" + }, + "jumia.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/microsoftstore.CategoryResponse" + "$ref": "#/definitions/jumia.CategoriesResponse" }, "msg": { "example": "OK", @@ -133893,14 +139762,14 @@ }, "type": "object" }, - "microsoftstore.chartsResponseDoc": { + "jumia.countriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/microsoftstore.ChartsResponse" + "$ref": "#/definitions/jumia.CountriesResponse" }, "msg": { "example": "OK", @@ -133909,14 +139778,14 @@ }, "type": "object" }, - "microsoftstore.editorialResponseDoc": { + "jumia.listingResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/microsoftstore.EditorialResponse" + "$ref": "#/definitions/jumia.ListingResponse" }, "msg": { "example": "OK", @@ -133925,14 +139794,14 @@ }, "type": "object" }, - "microsoftstore.eventsResponseDoc": { + "jumia.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/microsoftstore.EventsResponse" + "$ref": "#/definitions/jumia.Product" }, "msg": { "example": "OK", @@ -133941,14 +139810,14 @@ }, "type": "object" }, - "microsoftstore.productResponseDoc": { + "jumia.reviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/microsoftstore.ProductDetail" + "$ref": "#/definitions/jumia.ReviewsResponse" }, "msg": { "example": "OK", @@ -133957,14 +139826,14 @@ }, "type": "object" }, - "microsoftstore.publisherResponseDoc": { + "jumia.sitemapURLsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/microsoftstore.PublisherResponse" + "$ref": "#/definitions/jumia.SitemapURLsResponse" }, "msg": { "example": "OK", @@ -133973,14 +139842,14 @@ }, "type": "object" }, - "microsoftstore.recommendedResponseDoc": { + "jumia.sitemapsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/microsoftstore.RecommendedResponse" + "$ref": "#/definitions/jumia.SitemapsResponse" }, "msg": { "example": "OK", @@ -133989,4891 +139858,5182 @@ }, "type": "object" }, - "microsoftstore.relatedResponseDoc": { + "justeat.FilterOption": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/microsoftstore.RelatedResponse" - }, - "msg": { - "example": "OK", + "filter": { "type": "string" } }, "type": "object" }, - "microsoftstore.reviewsResponseDoc": { + "justeat.FiltersResponse": { "properties": { - "code": { - "example": 200, + "filters": { + "items": { + "$ref": "#/definitions/justeat.FilterOption" + }, + "type": "array" + }, + "postcode": { + "type": "string" + }, + "total_count": { "type": "integer" + } + }, + "type": "object" + }, + "justeat.MenuCategory": { + "properties": { + "id": { + "type": "string" }, - "data": { - "$ref": "#/definitions/microsoftstore.ReviewsResponse" + "items": { + "items": { + "$ref": "#/definitions/justeat.MenuItem" + }, + "type": "array" }, - "msg": { - "example": "OK", + "name": { "type": "string" } }, "type": "object" }, - "microsoftstore.reviewsSummaryResponseDoc": { + "justeat.MenuItem": { "properties": { - "code": { - "example": 200, - "type": "integer" + "description": { + "type": "string" }, - "data": { - "$ref": "#/definitions/microsoftstore.ReviewsSummaryResponse" + "energy_display": { + "type": "string" }, - "msg": { - "example": "OK", + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "modifier_groups": { + "items": { + "$ref": "#/definitions/justeat.ModifierGroup" + }, + "type": "array" + }, + "name": { "type": "string" + }, + "price": { + "type": "number" } }, "type": "object" }, - "microsoftstore.searchResponseDoc": { + "justeat.MenuResponse": { "properties": { - "code": { - "example": 200, + "categories": { + "items": { + "$ref": "#/definitions/justeat.MenuCategory" + }, + "type": "array" + }, + "currency_code": { + "type": "string" + }, + "item_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/microsoftstore.SearchResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "restaurant_id": { + "type": "string" + }, + "unique_name": { "type": "string" } }, "type": "object" }, - "microsoftstore.spotlightResponseDoc": { + "justeat.ModifierGroup": { "properties": { - "code": { - "example": 200, + "id": { + "type": "string" + }, + "max_choices": { "type": "integer" }, - "data": { - "$ref": "#/definitions/microsoftstore.SpotlightResponse" + "min_choices": { + "type": "integer" }, - "msg": { - "example": "OK", + "name": { "type": "string" + }, + "options": { + "items": { + "$ref": "#/definitions/justeat.ModifierOption" + }, + "type": "array" } }, "type": "object" }, - "microsoftstore.suggestResponseDoc": { + "justeat.ModifierOption": { "properties": { - "code": { - "example": 200, - "type": "integer" + "addition_price": { + "type": "number" }, - "data": { - "$ref": "#/definitions/microsoftstore.SuggestResponse" + "energy_display": { + "type": "string" }, - "msg": { - "example": "OK", + "id": { "type": "string" + }, + "name": { + "type": "string" + }, + "remove_price": { + "type": "number" } }, "type": "object" }, - "mirror.AuthorArticle": { + "justeat.RestaurantResponse": { "properties": { - "label": { + "address": { "type": "string" }, - "label_url": { + "city": { "type": "string" }, - "title": { + "country": { "type": "string" }, - "url": { + "image_url": { + "type": "string" + }, + "is_active": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "primary_cuisine": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "rating_count": { + "type": "integer" + }, + "restaurant_id": { + "type": "string" + }, + "unique_name": { "type": "string" } }, "type": "object" }, - "mirror.AuthorResponse": { + "justeat.SearchResponse": { "properties": { - "articles": { + "restaurants": { "items": { - "$ref": "#/definitions/mirror.AuthorArticle" + "$ref": "#/definitions/justeat.SearchRestaurant" }, "type": "array" }, - "bio": { + "total_count": { + "type": "integer" + } + }, + "type": "object" + }, + "justeat.SearchRestaurant": { + "properties": { + "city": { "type": "string" }, - "email": { - "type": "string" + "delivery_eta_max_minutes": { + "type": "integer" }, - "job_title": { + "delivery_eta_min_minutes": { + "type": "integer" + }, + "image_url": { "type": "string" }, + "is_open_now": { + "type": "boolean" + }, "name": { "type": "string" }, - "slug": { + "postal_code": { "type": "string" }, - "twitter": { + "rating": { + "type": "number" + }, + "rating_count": { + "type": "integer" + }, + "restaurant_id": { "type": "string" }, - "url": { + "unique_name": { "type": "string" } }, "type": "object" }, - "mlb.BoxscorePlayer": { + "justeat.filtersResponseDoc": { "properties": { - "batting_order": { - "type": "string" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "person": { - "$ref": "#/definitions/mlb.NamedRef" + "data": { + "$ref": "#/definitions/justeat.FiltersResponse" }, - "position": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "justeat.menuResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "stats": { - "additionalProperties": { - "additionalProperties": {}, - "type": "object" - }, - "type": "object" + "data": { + "$ref": "#/definitions/justeat.MenuResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "mlb.BoxscoreResponse": { + "justeat.restaurantResponseDoc": { "properties": { - "away": { - "$ref": "#/definitions/mlb.BoxscoreTeam" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "fetched_at": { - "type": "string" + "data": { + "$ref": "#/definitions/justeat.RestaurantResponse" }, - "game_id": { + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "justeat.searchResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "home": { - "$ref": "#/definitions/mlb.BoxscoreTeam" + "data": { + "$ref": "#/definitions/justeat.SearchResponse" }, - "source_url": { + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "justwatch.AgeCertification": { + "properties": { + "technical_name": { + "description": "Age certification code used by JustWatch, for example `PG-13`.", + "example": "PG-13", "type": "string" } }, "type": "object" }, - "mlb.BoxscoreTeam": { + "justwatch.AgeCertificationsResponse": { "properties": { - "players": { + "age_certifications": { + "description": "Age certifications used in the country.", "items": { - "$ref": "#/definitions/mlb.BoxscorePlayer" + "$ref": "#/definitions/justwatch.AgeCertification" }, "type": "array" }, - "team": { - "$ref": "#/definitions/mlb.TeamRef" + "country": { + "description": "Two-letter ISO country code the certifications apply to.", + "example": "US", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.AnalysisResponse": { + "properties": { + "summary": { + "allOf": [ + { + "$ref": "#/definitions/justwatch.AnalysisSummary" + } + ], + "description": "Availability summary computed from the title's offers." }, - "team_stats": { + "title": { + "allOf": [ + { + "$ref": "#/definitions/justwatch.TitleResponse" + } + ], + "description": "Title the summary was computed for." + } + }, + "type": "object" + }, + "justwatch.AnalysisSummary": { + "properties": { + "available": { + "description": "Whether the title has at least one offer.", + "example": true, + "type": "boolean" + }, + "best_buy": { + "allOf": [ + { + "$ref": "#/definitions/justwatch.Offer" + } + ], + "description": "Cheapest `BUY` offer for the title. Omitted when there is none." + }, + "best_free": { + "allOf": [ + { + "$ref": "#/definitions/justwatch.Offer" + } + ], + "description": "Cheapest `FREE` offer for the title. Omitted when there is none." + }, + "best_rent": { + "allOf": [ + { + "$ref": "#/definitions/justwatch.Offer" + } + ], + "description": "Cheapest `RENT` offer for the title. Omitted when there is none." + }, + "best_subscription": { + "allOf": [ + { + "$ref": "#/definitions/justwatch.Offer" + } + ], + "description": "Cheapest `FLATRATE` or `ADS` offer for the title. Omitted when there is none." + }, + "format_counts": { "additionalProperties": { - "additionalProperties": {}, - "type": "object" + "type": "integer" + }, + "description": "Number of offers per picture format, keyed by format such as `HD` or `4K`.", + "type": "object" + }, + "monetization_counts": { + "additionalProperties": { + "type": "integer" + }, + "description": "Number of offers per monetization type, keyed by type such as `RENT` or `BUY`.", + "type": "object" + }, + "price_ranges": { + "additionalProperties": { + "$ref": "#/definitions/justwatch.PriceRange" }, + "description": "Lowest and highest price per monetization type, keyed by type. Only offers with a price are counted.", "type": "object" + }, + "provider_count": { + "description": "Number of distinct providers that carry the title.", + "example": 6, + "type": "integer" + }, + "total_offers": { + "description": "Total number of offers found for the title.", + "example": 15, + "type": "integer" } }, "type": "object" }, - "mlb.Decision": { + "justwatch.Backdrop": { "properties": { - "loser": { - "$ref": "#/definitions/mlb.NamedRef" + "url": { + "description": "URL of a backdrop image for the title.", + "example": "https://images.justwatch.com/backdrop/8735151/s1920/inception.jpg", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.Clip": { + "properties": { + "external_id": { + "description": "Video id of the clip on the hosting site.", + "example": "8hP9D6kZseM", + "type": "string" }, - "save": { - "$ref": "#/definitions/mlb.NamedRef" + "provider": { + "description": "Site hosting the clip, for example `YOUTUBE`.", + "example": "YOUTUBE", + "type": "string" }, - "winner": { - "$ref": "#/definitions/mlb.NamedRef" + "url": { + "description": "URL where the clip can be watched.", + "example": "https://www.youtube.com/watch?v=8hP9D6kZseM", + "type": "string" } }, "type": "object" }, - "mlb.EditorialFeedResponse": { + "justwatch.Credit": { "properties": { - "fetched_at": { + "character_name": { + "description": "Character the person plays. Omitted for crew roles.", + "example": "Dom Cobb", "type": "string" }, - "items": { + "name": { + "description": "Full name of the person.", + "example": "Leonardo DiCaprio", + "type": "string" + }, + "person_id": { + "description": "JustWatch id of the person.", + "example": 1641, + "type": "integer" + }, + "role": { + "description": "Role of the person on the title, for example `ACTOR`.", + "example": "ACTOR", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.DiscoverResponse": { + "properties": { + "country": { + "description": "Two-letter ISO country code the results are for.", + "example": "US", + "type": "string" + }, + "genres": { + "description": "Genre short names that were used as filters.", + "example": [ + "act" + ], "items": { - "additionalProperties": {}, - "type": "object" + "type": "string" }, "type": "array" }, "language": { + "description": "Two-letter language code used for titles and descriptions.", + "example": "en", "type": "string" }, - "limit": { - "type": "integer" + "monetization_types": { + "description": "Monetization types that were used as filters, for example `FLATRATE`.", + "example": [ + "FLATRATE" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "skip": { - "type": "integer" + "production_countries": { + "description": "Production country codes that were used as filters.", + "example": [ + "KR" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "slug": { - "type": "string" + "providers": { + "description": "Provider short names that were used as filters, for example `nfx`.", + "example": [ + "nfx" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "source_url": { + "results": { + "description": "Titles matching the request, one item per title.", + "items": { + "$ref": "#/definitions/justwatch.SearchTitle" + }, + "type": "array" + }, + "type": { + "description": "Content type filter applied: `all`, `movie` or `show`.", + "example": "all", "type": "string" + }, + "year_max": { + "description": "Latest release year used as a filter.", + "example": 2026, + "type": "integer" + }, + "year_min": { + "description": "Earliest release year used as a filter.", + "example": 2020, + "type": "integer" } }, "type": "object" }, - "mlb.EnumValue": { + "justwatch.EpisodeByIDResponse": { "properties": { - "description": { + "country": { + "description": "Two-letter ISO country code the results are for.", + "example": "US", "type": "string" }, - "value": { + "episode": { + "allOf": [ + { + "$ref": "#/definitions/justwatch.EpisodeSummary" + } + ], + "description": "Episode that matches the requested id." + }, + "language": { + "description": "Two-letter language code used for titles and descriptions.", + "example": "en", "type": "string" } }, "type": "object" }, - "mlb.GameResponse": { + "justwatch.EpisodeCountryOffers": { "properties": { - "away_boxscore": { - "$ref": "#/definitions/mlb.TeamBoxscore" - }, - "decisions": { - "$ref": "#/definitions/mlb.Decision" - }, - "fetched_at": { + "country": { + "description": "Two-letter ISO country code the offers apply to.", + "example": "US", "type": "string" }, - "game": { - "$ref": "#/definitions/mlb.GameSummary" + "episode": { + "allOf": [ + { + "$ref": "#/definitions/justwatch.EpisodeSummary" + } + ], + "description": "Episode details as listed in this country." }, - "home_boxscore": { - "$ref": "#/definitions/mlb.TeamBoxscore" + "offers": { + "description": "Offers for the episode in this country.", + "items": { + "$ref": "#/definitions/justwatch.Offer" + }, + "type": "array" + } + }, + "type": "object" + }, + "justwatch.EpisodeOffersResponse": { + "properties": { + "countries": { + "description": "Offers for the episode, one item per country.", + "items": { + "$ref": "#/definitions/justwatch.EpisodeCountryOffers" + }, + "type": "array" }, - "linescore": { - "$ref": "#/definitions/mlb.Linescore" + "id": { + "description": "JustWatch episode id the offers belong to, for example `tse5550494`.", + "example": "tse5550494", + "type": "string" }, - "source_url": { + "language": { + "description": "Two-letter language code used for titles and descriptions.", + "example": "en", "type": "string" } }, "type": "object" }, - "mlb.GameSide": { + "justwatch.EpisodeSummary": { "properties": { - "losses": { + "description": { + "description": "Short synopsis of the episode.", + "type": "string" + }, + "episode_number": { + "description": "Number of the episode within its season.", + "example": 1, "type": "integer" }, - "probable_pitcher": { - "$ref": "#/definitions/mlb.NamedRef" + "id": { + "description": "JustWatch episode id, for example `tse5550494`.", + "example": "tse5550494", + "type": "string" }, - "score": { + "object_id": { + "description": "Numeric JustWatch id of the episode.", + "example": 5550494, "type": "integer" }, - "team": { - "$ref": "#/definitions/mlb.TeamRef" + "object_type": { + "description": "JustWatch object type, `SHOW_EPISODE` for episodes.", + "example": "SHOW_EPISODE", + "type": "string" }, - "wins": { + "offers": { + "description": "Offers for the episode, when requested.", + "items": { + "$ref": "#/definitions/justwatch.Offer" + }, + "type": "array" + }, + "path": { + "description": "JustWatch page path of the episode.", + "type": "string" + }, + "poster_url": { + "description": "URL of the still or poster image for the episode.", + "type": "string" + }, + "title": { + "description": "Episode title in the requested language.", + "example": "Long Day's Journey Into Night", + "type": "string" + }, + "url": { + "description": "Full JustWatch page URL of the episode.", + "type": "string" + }, + "year": { + "description": "Release year of the episode.", + "example": 2022, "type": "integer" } }, "type": "object" }, - "mlb.GameStatus": { + "justwatch.Genre": { "properties": { - "abstract": { - "type": "string" - }, - "code": { - "type": "string" - }, - "detailed": { + "short_name": { + "description": "Short genre code accepted as a filter, for example `act`.", + "example": "act", "type": "string" }, - "reason": { + "translation": { + "description": "Genre name in the requested language, for example `Action & Adventure`.", + "example": "Action & Adventure", "type": "string" } }, "type": "object" }, - "mlb.GameSummary": { + "justwatch.GenreTitlesResponse": { "properties": { - "away": { - "$ref": "#/definitions/mlb.GameSide" - }, - "day_night": { + "country": { + "description": "Two-letter ISO country code the results are for.", + "example": "US", "type": "string" }, - "double_header": { + "genre": { + "description": "Genre short name the titles belong to, for example `act`.", + "example": "act", "type": "string" }, - "game_date": { + "language": { + "description": "Two-letter language code used for titles and descriptions.", + "example": "en", "type": "string" }, - "game_number": { - "type": "integer" + "results": { + "description": "Titles matching the request, one item per title.", + "items": { + "$ref": "#/definitions/justwatch.SearchTitle" + }, + "type": "array" }, - "game_type": { + "type": { + "description": "Content type filter applied: `all`, `movie` or `show`.", + "example": "all", "type": "string" + } + }, + "type": "object" + }, + "justwatch.GenresResponse": { + "properties": { + "genres": { + "description": "Genres available on JustWatch.", + "items": { + "$ref": "#/definitions/justwatch.Genre" + }, + "type": "array" }, - "home": { - "$ref": "#/definitions/mlb.GameSide" - }, - "id": { - "type": "integer" - }, - "official_date": { + "language": { + "description": "Two-letter language code the genre names are translated into.", + "example": "en", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.MonetizationTitlesResponse": { + "properties": { + "country": { + "description": "Two-letter ISO country code the results are for.", + "example": "US", "type": "string" }, - "scheduled_innings": { - "type": "integer" - }, - "season": { + "language": { + "description": "Two-letter language code used for titles and descriptions.", + "example": "en", "type": "string" }, - "series_description": { + "monetization_type": { + "description": "Monetization type the titles are offered under: `FLATRATE`, `FREE`, `ADS`, `RENT` or `BUY`.", + "example": "FLATRATE", "type": "string" }, - "status": { - "$ref": "#/definitions/mlb.GameStatus" + "results": { + "description": "Titles matching the request, one item per title.", + "items": { + "$ref": "#/definitions/justwatch.SearchTitle" + }, + "type": "array" }, - "venue": { - "$ref": "#/definitions/mlb.VenueRef" + "type": { + "description": "Content type filter applied: `all`, `movie` or `show`.", + "example": "all", + "type": "string" } }, "type": "object" }, - "mlb.ImageRef": { + "justwatch.NewTitlesResponse": { "properties": { - "type": { + "country": { + "description": "Two-letter ISO country code the results are for.", + "example": "US", "type": "string" }, - "url": { + "language": { + "description": "Two-letter language code used for titles and descriptions.", + "example": "en", + "type": "string" + }, + "results": { + "description": "Newly added titles, one item per title.", + "items": { + "$ref": "#/definitions/justwatch.SearchTitle" + }, + "type": "array" + }, + "type": { + "description": "Content type filter applied: `all`, `movie` or `show`.", + "example": "all", "type": "string" } }, "type": "object" }, - "mlb.Inning": { + "justwatch.Offer": { "properties": { - "away_errors": { - "type": "integer" + "availability": { + "description": "Availability of the offer as a schema.org URL, for example `https://schema.org/InStock`.", + "example": "https://schema.org/InStock", + "type": "string" }, - "away_hits": { - "type": "integer" + "category": { + "description": "Format label shown for the offer, for example `Blu-Ray`.", + "example": "Blu-Ray", + "type": "string" }, - "away_runs": { - "type": "integer" + "currency": { + "description": "Currency of `price`, as an ISO 4217 code such as `USD`.", + "example": "USD", + "type": "string" }, - "home_errors": { - "type": "integer" + "monetization_type": { + "description": "How the title is offered: `FLATRATE`, `FREE`, `ADS`, `RENT` or `BUY`.", + "example": "RENT", + "type": "string" }, - "home_hits": { - "type": "integer" + "presentation_type": { + "description": "Picture format of the offer, for example `HD` or `4K`.", + "example": "4K", + "type": "string" }, - "home_runs": { - "type": "integer" + "price": { + "description": "Price of the offer in `currency`. Omitted for free and subscription offers without a price.", + "example": 4.99, + "type": "number" }, - "number": { + "provider": { + "description": "Name of the provider offering the title, for example `Amazon Video`.", + "example": "Amazon Video", + "type": "string" + }, + "provider_id": { + "description": "JustWatch id of the provider.", + "example": 10, "type": "integer" + }, + "provider_short": { + "description": "Short provider code, for example `amz`.", + "example": "amz", + "type": "string" + }, + "provider_technical": { + "description": "Technical provider name used by JustWatch, for example `amazon`.", + "example": "amazon", + "type": "string" + }, + "url": { + "description": "Link to watch or buy the title at the provider.", + "type": "string" } }, "type": "object" }, - "mlb.LeaderCategory": { + "justwatch.PopularResponse": { "properties": { - "category": { + "country": { + "description": "Two-letter ISO country code the results are for.", + "example": "US", "type": "string" }, - "game_type": { + "has_next_page": { + "description": "Whether more popular titles are available after this page.", + "example": true, + "type": "boolean" + }, + "language": { + "description": "Two-letter language code used for titles and descriptions.", + "example": "en", "type": "string" }, - "group": { + "next_cursor": { + "description": "Cursor to pass as `cursor` to get the next page.", + "example": "Mg==", "type": "string" }, - "leaders": { + "results": { + "description": "Popular titles in ranked order, one item per title.", "items": { - "$ref": "#/definitions/mlb.LeaderEntry" + "$ref": "#/definitions/justwatch.SearchTitle" }, "type": "array" }, - "season": { + "type": { + "description": "Content type filter applied: `all`, `movie` or `show`.", + "example": "all", "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "mlb.LeaderEntry": { + "justwatch.PriceRange": { "properties": { - "league": { - "$ref": "#/definitions/mlb.NamedRef" + "currency": { + "description": "Currency of the prices, as an ISO 4217 code such as `USD`.", + "example": "USD", + "type": "string" }, - "player": { - "$ref": "#/definitions/mlb.NamedRef" + "max": { + "description": "Highest price among the offers of this type.", + "example": 14.99, + "type": "number" }, - "rank": { - "type": "integer" + "min": { + "description": "Lowest price among the offers of this type.", + "example": 2.99, + "type": "number" + } + }, + "type": "object" + }, + "justwatch.Provider": { + "properties": { + "clear_name": { + "description": "Display name of the provider, for example `Netflix`.", + "example": "Netflix", + "type": "string" }, - "season": { + "icon_url": { + "description": "URL of the provider's icon image.", + "example": "https://images.justwatch.com/icon/207360008/s100/netflix.jpg", "type": "string" }, - "stats": { - "additionalProperties": {}, - "type": "object" + "id": { + "description": "JustWatch id of the provider.", + "example": 8, + "type": "integer" }, - "team": { - "$ref": "#/definitions/mlb.TeamRef" + "short_name": { + "description": "Short provider code accepted as a filter, for example `nfx`.", + "example": "nfx", + "type": "string" }, - "value": { + "technical_name": { + "description": "Technical provider name used by JustWatch, for example `netflix`.", + "example": "netflix", "type": "string" } }, "type": "object" }, - "mlb.LeagueLeadersResponse": { + "justwatch.ProviderTitlesResponse": { "properties": { - "categories": { - "items": { - "type": "string" - }, - "type": "array" + "country": { + "description": "Two-letter ISO country code the results are for.", + "example": "US", + "type": "string" }, - "count": { - "type": "integer" + "language": { + "description": "Two-letter language code used for titles and descriptions.", + "example": "en", + "type": "string" }, - "fetched_at": { + "provider": { + "description": "Provider short name the titles are available on, for example `nfx`.", + "example": "nfx", "type": "string" }, "results": { + "description": "Titles matching the request, one item per title.", "items": { - "$ref": "#/definitions/mlb.LeaderCategory" + "$ref": "#/definitions/justwatch.SearchTitle" }, "type": "array" }, - "season": { - "type": "integer" - }, - "source_url": { + "type": { + "description": "Content type filter applied: `all`, `movie` or `show`.", + "example": "all", "type": "string" } }, "type": "object" }, - "mlb.Linescore": { + "justwatch.ProvidersResponse": { "properties": { - "away_errors": { - "type": "integer" + "country": { + "description": "Two-letter ISO country code the providers are available in.", + "example": "US", + "type": "string" }, - "away_hits": { - "type": "integer" + "providers": { + "description": "Streaming and purchase providers available in the country.", + "items": { + "$ref": "#/definitions/justwatch.Provider" + }, + "type": "array" + } + }, + "type": "object" + }, + "justwatch.Scoring": { + "properties": { + "best_rating": { + "description": "Top of the scale for `justwatch_rating`, for example `100`.", + "example": "100", + "type": "string" }, - "away_runs": { - "type": "integer" + "certified_fresh": { + "description": "Whether the title carries the Rotten Tomatoes Certified Fresh badge.", + "example": true, + "type": "boolean" }, - "current_inning": { - "type": "integer" + "imdb_score": { + "description": "IMDb user rating out of 10.", + "example": 8.8, + "type": "number" }, - "home_errors": { + "imdb_votes": { + "description": "Number of IMDb votes behind `imdb_score`.", + "example": 2798306, "type": "integer" }, - "home_hits": { - "type": "integer" + "justwatch_rating": { + "description": "JustWatch user rating, on the scale given by `best_rating`.", + "example": 97, + "type": "number" }, - "home_runs": { + "rating_count": { + "description": "Number of ratings behind `justwatch_rating`.", + "example": 77696, "type": "integer" }, - "inning_state": { - "type": "string" + "tmdb_popularity": { + "description": "TMDB popularity score for the title.", + "example": 38.5801, + "type": "number" }, - "innings": { - "items": { - "$ref": "#/definitions/mlb.Inning" - }, - "type": "array" + "tmdb_score": { + "description": "TMDB user rating for the title.", + "example": 8.372, + "type": "number" }, - "scheduled_innings": { + "tomato_meter": { + "description": "Rotten Tomatoes Tomatometer score, as a percentage.", + "example": 87, "type": "integer" } }, "type": "object" }, - "mlb.MLBDiscoveryResponse": { + "justwatch.SearchResponse": { "properties": { - "divisions": { - "items": { - "$ref": "#/definitions/mlb.NamedRef" - }, - "type": "array" + "country": { + "description": "Two-letter ISO country code the results are for.", + "example": "US", + "type": "string" }, - "fetched_at": { + "language": { + "description": "Two-letter language code used for titles and descriptions.", + "example": "en", "type": "string" }, - "game_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "query": { + "description": "Search text that was run.", + "example": "inception", + "type": "string" }, - "leader_categories": { + "results": { + "description": "Titles matching the search text, one item per title.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/justwatch.SearchTitle" }, "type": "array" + } + }, + "type": "object" + }, + "justwatch.SearchTitle": { + "properties": { + "id": { + "description": "JustWatch title id, for example `tm92641` for a movie.", + "example": "tm92641", + "type": "string" }, - "leagues": { - "items": { - "$ref": "#/definitions/mlb.NamedRef" - }, - "type": "array" + "object_id": { + "description": "Numeric JustWatch id of the title.", + "example": 92641, + "type": "integer" }, - "prospect_date_ranges": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "object_type": { + "description": "JustWatch object type of the title, for example `MOVIE` or `SHOW`.", + "example": "MOVIE", + "type": "string" }, - "prospect_minimum_pa": { + "offers": { + "description": "Streaming, rental and purchase offers for the title.", "items": { - "type": "integer" + "$ref": "#/definitions/justwatch.Offer" }, "type": "array" }, - "prospect_positions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "path": { + "description": "JustWatch page path of the title, for example `/us/movie/inception`.", + "example": "/us/movie/inception", + "type": "string" }, - "prospect_ranking_positions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "poster_url": { + "description": "URL of the poster image for the title.", + "example": "https://images.justwatch.com/poster/302449148/s718/inception.jpg", + "type": "string" }, - "prospect_ranking_sort_directions": { + "production_countries": { + "description": "ProductionCountries lists the title's country of origin as two-letter ISO\ncodes. It is only populated on surfaces that request it, such as discover.", + "example": [ + "KR" + ], "items": { - "$ref": "#/definitions/mlb.EnumValue" + "type": "string" }, "type": "array" }, - "prospect_ranking_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "title": { + "description": "Name of the title in the requested language.", + "example": "Inception", + "type": "string" }, - "prospect_ranking_teams": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "url": { + "description": "Full JustWatch page URL of the title.", + "example": "https://www.justwatch.com/us/movie/inception", + "type": "string" }, - "prospect_ranking_views": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "year": { + "description": "Release year of the title.", + "example": 2010, + "type": "integer" + } + }, + "type": "object" + }, + "justwatch.SeasonByIDResponse": { + "properties": { + "country": { + "description": "Two-letter ISO country code the results are for.", + "example": "US", + "type": "string" }, - "prospect_ranking_years": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "language": { + "description": "Two-letter language code used for titles and descriptions.", + "example": "en", + "type": "string" }, - "roster_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "season": { + "allOf": [ + { + "$ref": "#/definitions/justwatch.SeasonSummary" + } + ], + "description": "Season that matches the requested id." + } + }, + "type": "object" + }, + "justwatch.SeasonEpisodesResponse": { + "properties": { + "country": { + "description": "Two-letter ISO country code the results are for.", + "example": "US", + "type": "string" }, - "sections": { + "episodes": { + "description": "Episodes of the season, in order.", "items": { - "$ref": "#/definitions/mlb.NavigationItem" + "$ref": "#/definitions/justwatch.EpisodeSummary" }, "type": "array" }, - "source_url": { + "language": { + "description": "Two-letter language code used for titles and descriptions.", + "example": "en", "type": "string" }, - "sports": { - "items": { - "$ref": "#/definitions/mlb.NamedRef" - }, - "type": "array" + "season": { + "allOf": [ + { + "$ref": "#/definitions/justwatch.SeasonSummary" + } + ], + "description": "Season the episodes belong to." + } + }, + "type": "object" + }, + "justwatch.SeasonSummary": { + "properties": { + "description": { + "description": "Short synopsis of the season.", + "type": "string" }, - "standings_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "id": { + "description": "JustWatch season id, for example `tss297253`.", + "example": "tss297253", + "type": "string" }, - "stat_groups": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "object_id": { + "description": "Numeric JustWatch id of the season.", + "example": 297253, + "type": "integer" }, - "stat_hitter_positions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "object_type": { + "description": "JustWatch object type, `SHOW_SEASON` for seasons.", + "example": "SHOW_SEASON", + "type": "string" }, - "stat_player_pools": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "path": { + "description": "JustWatch page path of the season.", + "example": "/us/tv-show/from/season-1", + "type": "string" }, - "stat_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "poster_url": { + "description": "URL of the poster image for the season.", + "example": "https://images.justwatch.com/poster/320190730/s718/season-1.jpg", + "type": "string" }, - "statcast_abs_challenge_filters": { - "$ref": "#/definitions/mlb.StatcastABSChallengeFilters" + "season_number": { + "description": "Number of the season within the show.", + "example": 1, + "type": "integer" }, - "statcast_active_spin_hands": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "title": { + "description": "Season title, for example `Season 1`.", + "example": "Season 1", + "type": "string" }, - "statcast_active_spin_minimums": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "url": { + "description": "Full JustWatch page URL of the season.", + "example": "https://www.justwatch.com/us/tv-show/from/season-1", + "type": "string" }, - "statcast_active_spin_seasons": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "year": { + "description": "Release year of the season.", + "example": 2022, + "type": "integer" + } + }, + "type": "object" + }, + "justwatch.ShowSeasonsResponse": { + "properties": { + "country": { + "description": "Two-letter ISO country code the results are for.", + "example": "US", + "type": "string" }, - "statcast_active_spin_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "language": { + "description": "Two-letter language code used for titles and descriptions.", + "example": "en", + "type": "string" }, - "statcast_active_spin_sort_fields": { + "seasons": { + "description": "Seasons of the show, in order.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/justwatch.SeasonSummary" }, "type": "array" }, - "statcast_arm_angle_game_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "show": { + "allOf": [ + { + "$ref": "#/definitions/justwatch.TitleResponse" + } + ], + "description": "Show the seasons belong to." + } + }, + "type": "object" + }, + "justwatch.SimilarTitlesResponse": { + "properties": { + "country": { + "description": "Two-letter ISO country code the results are for.", + "example": "US", + "type": "string" }, - "statcast_arm_angle_group_by": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "id": { + "description": "JustWatch title id the similar titles are based on, for example `tm92641`.", + "example": "tm92641", + "type": "string" }, - "statcast_arm_angle_group_minimum_pitches": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "language": { + "description": "Two-letter language code used for titles and descriptions.", + "example": "en", + "type": "string" }, - "statcast_arm_angle_hands": { + "results": { + "description": "Titles similar to the requested one, one item per title.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/justwatch.SearchTitle" }, "type": "array" + } + }, + "type": "object" + }, + "justwatch.TitleCountryOffers": { + "properties": { + "country": { + "description": "Two-letter ISO country code the offers apply to.", + "example": "US", + "type": "string" }, - "statcast_arm_angle_minimums": { + "offers": { + "description": "Offers for the title in this country.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/justwatch.Offer" }, "type": "array" }, - "statcast_arm_angle_pitch_types": { + "title": { + "allOf": [ + { + "$ref": "#/definitions/justwatch.TitleResponse" + } + ], + "description": "Title details as listed in this country." + } + }, + "type": "object" + }, + "justwatch.TitleMediaResponse": { + "properties": { + "backdrops": { + "description": "Backdrop images for the title.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/justwatch.Backdrop" }, "type": "array" }, - "statcast_arm_angle_seasons": { + "clips": { + "description": "Trailers and other video clips for the title.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/justwatch.Clip" }, "type": "array" }, - "statcast_arm_angle_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "country": { + "description": "Two-letter ISO country code the results are for.", + "example": "US", + "type": "string" }, - "statcast_arm_angle_sort_fields": { + "credits": { + "description": "Cast and crew credited on the title.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/justwatch.Credit" }, "type": "array" }, - "statcast_arm_angle_team_ids": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "statcast_arm_strength_min_throws": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "id": { + "description": "JustWatch title id the media belongs to, for example `tm92641`.", + "example": "tm92641", + "type": "string" }, - "statcast_arm_strength_positions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "language": { + "description": "Two-letter language code used for titles and descriptions.", + "example": "en", + "type": "string" }, - "statcast_arm_strength_sort_directions": { + "title": { + "description": "Name of the title in the requested language.", + "example": "Inception", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.TitleOffersResponse": { + "properties": { + "countries": { + "description": "Offers for the title, one item per country.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/justwatch.TitleCountryOffers" }, "type": "array" }, - "statcast_arm_strength_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "id": { + "description": "JustWatch title id the offers belong to, for example `tm92641`.", + "example": "tm92641", + "type": "string" }, - "statcast_arm_strength_team_ids": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "language": { + "description": "Two-letter language code used for titles and descriptions.", + "example": "en", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.TitleResponse": { + "properties": { + "content_rating": { + "description": "Age or content rating shown for the title.", + "type": "string" }, - "statcast_arm_strength_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "description": { + "description": "Synopsis of the title.", + "type": "string" }, - "statcast_arm_strength_years": { + "genres": { + "description": "Genre names of the title.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "type": "string" }, "type": "array" }, - "statcast_arm_value_game_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "id": { + "description": "JustWatch title id, for example `tm92641` for a movie.", + "example": "tm92641", + "type": "string" }, - "statcast_arm_value_max_year": { + "object_id": { + "description": "Numeric JustWatch id of the title.", + "example": 92641, "type": "integer" }, - "statcast_arm_value_min_year": { - "type": "integer" + "object_type": { + "description": "JustWatch object type of the title, for example `MOVIE` or `SHOW`.", + "example": "MOVIE", + "type": "string" }, - "statcast_arm_value_minimum_opportunities": { + "offers": { + "description": "Streaming, rental and purchase offers for the title.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/justwatch.Offer" }, "type": "array" }, - "statcast_arm_value_situations": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "path": { + "description": "JustWatch page path of the title, for example `/us/movie/inception`.", + "example": "/us/movie/inception", + "type": "string" }, - "statcast_arm_value_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "poster_url": { + "description": "URL of the poster image for the title.", + "example": "https://images.justwatch.com/poster/302449148/s718/inception.jpg", + "type": "string" }, - "statcast_arm_value_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "release_date": { + "description": "Release date of the title, for example `2010-07-14`.", + "example": "2010-07-14", + "type": "string" }, - "statcast_arm_value_split_years": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "runtime": { + "description": "Running time as an ISO 8601 duration, for example `PT2H28M0S`.", + "example": "PT2H28M0S", + "type": "string" }, - "statcast_arm_value_team_ids": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "scoring": { + "allOf": [ + { + "$ref": "#/definitions/justwatch.Scoring" + } + ], + "description": "User and critic ratings for the title." }, - "statcast_arm_value_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "title": { + "description": "Name of the title in the requested language.", + "example": "Inception", + "type": "string" }, - "statcast_arm_value_with_team_only": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "url": { + "description": "Full JustWatch page URL of the title.", + "example": "https://www.justwatch.com/us/movie/inception", + "type": "string" }, - "statcast_arm_value_years": { - "items": { - "type": "integer" - }, - "type": "array" + "year": { + "description": "Release year of the title.", + "example": 2010, + "type": "integer" + } + }, + "type": "object" + }, + "justwatch.ageCertificationsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_baserunning_filters": { - "$ref": "#/definitions/mlb.StatcastBaserunningFilters" + "data": { + "$ref": "#/definitions/justwatch.AgeCertificationsResponse" }, - "statcast_bat_tracking_attack_zones": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.analysisResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_bat_tracking_bat_sides": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/justwatch.AnalysisResponse" }, - "statcast_bat_tracking_contact_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.discoverResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_bat_tracking_counts": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/justwatch.DiscoverResponse" }, - "statcast_bat_tracking_game_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.episodeByIDResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_bat_tracking_group_by": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/justwatch.EpisodeByIDResponse" }, - "statcast_bat_tracking_hard_hit_values": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.episodeOffersResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_bat_tracking_min_group_swings": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/justwatch.EpisodeOffersResponse" }, - "statcast_bat_tracking_min_swings": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.genreTitlesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_bat_tracking_pitch_hands": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/justwatch.GenreTitlesResponse" }, - "statcast_bat_tracking_pitch_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.genresResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_bat_tracking_seasons": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/justwatch.GenresResponse" }, - "statcast_bat_tracking_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.monetizationTitlesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_bat_tracking_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/justwatch.MonetizationTitlesResponse" }, - "statcast_bat_tracking_team_ids": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.newTitlesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_bat_tracking_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/justwatch.NewTitlesResponse" }, - "statcast_batted_ball_game_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.popularResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_batted_ball_max_year": { + "data": { + "$ref": "#/definitions/justwatch.PopularResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.providerTitlesResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "statcast_batted_ball_min_splits": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/justwatch.ProviderTitlesResponse" }, - "statcast_batted_ball_min_year": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.providersResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "statcast_batted_ball_minimums": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/justwatch.ProvidersResponse" }, - "statcast_batted_ball_pitch_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_batted_ball_seasons": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/justwatch.SearchResponse" }, - "statcast_batted_ball_sides": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.seasonByIDResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_batted_ball_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/justwatch.SeasonByIDResponse" }, - "statcast_batted_ball_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.seasonEpisodesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_batted_ball_split_years": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/justwatch.SeasonEpisodesResponse" }, - "statcast_batted_ball_splits": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.showSeasonsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_batted_ball_team_ids": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/justwatch.ShowSeasonsResponse" }, - "statcast_batted_ball_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.similarTitlesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_catcher_blocking_game_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/justwatch.SimilarTitlesResponse" }, - "statcast_catcher_blocking_minimums": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.titleMediaResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_catcher_blocking_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/justwatch.TitleMediaResponse" }, - "statcast_catcher_blocking_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.titleOffersResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_catcher_blocking_team_ids": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/justwatch.TitleOffersResponse" }, - "statcast_catcher_blocking_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "justwatch.titleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_catcher_blocking_years": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/justwatch.TitleResponse" }, - "statcast_catcher_framing_ball_strike": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.BatchMarketHistoryResponse": { + "properties": { + "end_ts": { + "description": "End of the requested range, in Unix seconds.", + "example": 1780804800, + "type": "integer" }, - "statcast_catcher_framing_bat_sides": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:00:00Z", + "type": "string" }, - "statcast_catcher_framing_calls": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "include_latest_before_start": { + "description": "Whether the latest candle before `start_ts` was requested.", + "example": false, + "type": "boolean" }, - "statcast_catcher_framing_game_types": { + "markets": { + "description": "Candlestick history for each requested market.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.MarketHistoryResponse" }, "type": "array" }, - "statcast_catcher_framing_min_pitches": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "period_interval": { + "description": "Length of each candlestick period, in minutes.", + "example": 1440, + "type": "integer" }, - "statcast_catcher_framing_min_results": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "source_url": { + "description": "URL the data was read from.", + "example": "https://external-api.kalshi.com/trade-api/v2/markets/candlesticks", + "type": "string" }, - "statcast_catcher_framing_pitch_hands": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "start_ts": { + "description": "Start of the requested range, in Unix seconds.", + "example": 1780286400, + "type": "integer" }, - "statcast_catcher_framing_pitch_types": { + "tickers": { + "description": "Tickers of the Kalshi markets that were requested.", + "example": [ + "KXELONMARS-99" + ], "items": { - "$ref": "#/definitions/mlb.EnumValue" + "type": "string" }, "type": "array" - }, - "statcast_catcher_framing_sort_directions": { + } + }, + "type": "object" + }, + "kalshi.BatchOrderBookResponse": { + "properties": { + "books": { + "description": "Order book for each requested market.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.OrderBookResponse" }, "type": "array" }, - "statcast_catcher_framing_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:00:00Z", + "type": "string" }, - "statcast_catcher_framing_team_ids": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "source_url": { + "description": "URL the data was read from.", + "example": "https://external-api.kalshi.com/trade-api/v2/markets/orderbooks", + "type": "string" }, - "statcast_catcher_framing_types": { + "tickers": { + "description": "Tickers of the Kalshi markets that were requested.", + "example": [ + "KXELONMARS-99" + ], "items": { - "$ref": "#/definitions/mlb.EnumValue" + "type": "string" }, "type": "array" + } + }, + "type": "object" + }, + "kalshi.CandleOHLC": { + "properties": { + "close": { + "description": "Value at the end of the period, in US dollars per contract.", + "example": 0.08, + "type": "number" }, - "statcast_catcher_framing_years": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "high": { + "description": "Highest value during the period, in US dollars per contract.", + "example": 0.11, + "type": "number" }, - "statcast_catcher_pop_time_min_2b_attempts": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "low": { + "description": "Lowest value during the period, in US dollars per contract.", + "example": 0.08, + "type": "number" }, - "statcast_catcher_pop_time_min_3b_attempts": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "mean": { + "description": "Average value over the period, in US dollars per contract.", + "example": 0.1014, + "type": "number" }, - "statcast_catcher_pop_time_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "open": { + "description": "Value at the start of the period, in US dollars per contract.", + "example": 0.11, + "type": "number" }, - "statcast_catcher_pop_time_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "previous": { + "description": "Last value from before the period, in US dollars per contract.", + "example": 0.08, + "type": "number" + } + }, + "type": "object" + }, + "kalshi.Competition": { + "properties": { + "id": { + "description": "Kalshi identifier of the competition.", + "type": "string" }, - "statcast_catcher_pop_time_team_ids": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "name": { + "description": "Name of the competition.", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.EventHistoryResponse": { + "properties": { + "adjusted_end_ts": { + "description": "End of the range after Kalshi adjusted it, in Unix seconds.", + "example": 1780804800, + "type": "integer" }, - "statcast_catcher_pop_time_years": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "end_ts": { + "description": "End of the requested range, in Unix seconds.", + "example": 1780804800, + "type": "integer" }, - "statcast_catcher_stance_game_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "event_ticker": { + "description": "Ticker of the Kalshi event the history is for.", + "example": "KXELONMARS-99", + "type": "string" }, - "statcast_catcher_stance_group_by": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:00:00Z", + "type": "string" }, - "statcast_catcher_stance_knee_codes": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "include_latest_before_start": { + "description": "Whether the latest candle before `start_ts` was requested.", + "example": false, + "type": "boolean" }, - "statcast_catcher_stance_min_pitches": { + "market_tickers": { + "description": "Tickers of the markets in the event that have history.", + "example": [ + "KXELONMARS-99" + ], "items": { - "$ref": "#/definitions/mlb.EnumValue" + "type": "string" }, "type": "array" }, - "statcast_catcher_stance_min_results": { + "markets": { + "description": "Candlestick history for each market in the event.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.MarketHistoryResponse" }, "type": "array" }, - "statcast_catcher_stance_pitch_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "period_interval": { + "description": "Length of each candlestick period, in minutes.", + "example": 1440, + "type": "integer" }, - "statcast_catcher_stance_seasons": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "series_ticker": { + "description": "Ticker of the series the event belongs to.", + "example": "KXELONMARS", + "type": "string" }, - "statcast_catcher_stance_sides": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "source_url": { + "description": "URL the data was read from.", + "example": "https://external-api.kalshi.com/trade-api/v2/series/KXELONMARS/events/KXELONMARS-99/candlesticks", + "type": "string" }, - "statcast_catcher_stance_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "start_ts": { + "description": "Start of the requested range, in Unix seconds.", + "example": 1780286400, + "type": "integer" + } + }, + "type": "object" + }, + "kalshi.EventMetadataResponse": { + "properties": { + "competition": { + "allOf": [ + { + "$ref": "#/definitions/kalshi.Competition" + } + ], + "description": "Competition the event is part of. Omitted when the event has none." }, - "statcast_catcher_stance_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "competition_scope": { + "description": "Scope of the competition the event is part of, as Kalshi labels it.", + "type": "string" }, - "statcast_catcher_stance_team_ids": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "event_ticker": { + "description": "Ticker of the Kalshi event the metadata belongs to.", + "example": "KXELONMARS-99", + "type": "string" }, - "statcast_catcher_stance_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "featured_image_url": { + "description": "URL of the event's featured image.", + "type": "string" }, - "statcast_catcher_throwing_game_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:00:00Z", + "type": "string" }, - "statcast_catcher_throwing_minimum_attempts": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "image_url": { + "description": "URL of the event's image.", + "example": "https://kalshi-public-docs.s3.amazonaws.com/series-images-webp/KXELONMARS.webp", + "type": "string" }, - "statcast_catcher_throwing_seasons": { + "market_details": { + "description": "Display details for each market in the event.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.MarketDetail" }, "type": "array" }, - "statcast_catcher_throwing_sort_directions": { + "settlement_sources": { + "description": "Sources Kalshi uses to settle the event's markets.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.SettlementSource" }, "type": "array" }, - "statcast_catcher_throwing_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "source_url": { + "description": "URL the data was read from.", + "example": "https://external-api.kalshi.com/trade-api/v2/events/KXELONMARS-99/metadata", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.EventResponse": { + "properties": { + "event": { + "allOf": [ + { + "$ref": "#/definitions/kalshi.EventRow" + } + ], + "description": "The Kalshi event that was requested." }, - "statcast_catcher_throwing_target_bases": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:00:00Z", + "type": "string" }, - "statcast_catcher_throwing_team_ids": { + "markets": { + "description": "Markets that belong to the event.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.MarketRow" }, "type": "array" }, - "statcast_catcher_throwing_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "source_url": { + "description": "URL the data was read from.", + "example": "https://external-api.kalshi.com/trade-api/v2/events/KXELONMARS-99", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.EventRow": { + "properties": { + "available_on_brokers": { + "description": "Whether the event's markets can be traded through Kalshi's broker partners.", + "example": false, + "type": "boolean" }, - "statcast_entity_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "category": { + "description": "Kalshi category of the event, such as `World`.", + "example": "World", + "type": "string" }, - "statcast_expected_filter_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "collateral_return_type": { + "description": "Collateral return type Kalshi assigns to the event, such as `MECNET`.", + "example": "MECNET", + "type": "string" }, - "statcast_expected_max_year": { - "type": "integer" + "event_ticker": { + "description": "Kalshi ticker that identifies the event.", + "example": "KXELONMARS-99", + "type": "string" }, - "statcast_expected_min_year": { - "type": "integer" + "last_updated": { + "description": "Time the event was last updated, in UTC (RFC 3339).", + "example": "2026-05-10T00:33:53Z", + "type": "string" }, - "statcast_expected_minimums": { + "markets": { + "description": "Markets that belong to the event. Omitted when the response does not include them.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.MarketRow" }, "type": "array" }, - "statcast_expected_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "mutually_exclusive": { + "description": "Whether at most one market in the event can resolve to Yes.", + "example": false, + "type": "boolean" }, - "statcast_expected_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "series_ticker": { + "description": "Ticker of the series the event belongs to.", + "example": "KXELONMARS", + "type": "string" }, - "statcast_expected_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "strike_period": { + "description": "Strike period of the event, as Kalshi labels it.", + "type": "string" }, - "statcast_fielding_run_value_batting_minimums": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "sub_title": { + "description": "Short qualifier shown under the event title, such as a date or deadline.", + "example": "Before 2099", + "type": "string" }, - "statcast_fielding_run_value_fielding_minimums": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "title": { + "description": "Event title as shown on Kalshi.", + "example": "Will Elon Musk visit Mars in his lifetime?", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.EventsResponse": { + "properties": { + "cursor": { + "description": "Cursor to pass in the next request to get the following page. Omitted when Kalshi returns none.", + "type": "string" }, - "statcast_fielding_run_value_game_types": { + "events": { + "description": "Kalshi events on this page.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.EventRow" }, "type": "array" }, - "statcast_fielding_run_value_group_by": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:00:00Z", + "type": "string" }, - "statcast_fielding_run_value_positions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "limit": { + "description": "Number of events requested per page.", + "example": 25, + "type": "integer" }, - "statcast_fielding_run_value_seasons": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "source_url": { + "description": "URL the data was read from.", + "example": "https://external-api.kalshi.com/trade-api/v2/events?limit=25", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.ExchangeHoursBlock": { + "properties": { + "close_time": { + "example": "00:00", + "type": "string" }, - "statcast_fielding_run_value_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "open_time": { + "example": "00:00", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.ExchangeMaintenanceWindow": { + "properties": { + "end_time": { + "type": "string" }, - "statcast_fielding_run_value_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "reason": { + "type": "string" }, - "statcast_fielding_run_value_team_ids": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "start_time": { + "type": "string" + } + }, + "type": "object" + }, + "kalshi.ExchangeScheduleResponse": { + "properties": { + "fetched_at": { + "example": "2026-06-07T14:00:00Z", + "type": "string" }, - "statcast_fielding_run_value_types": { + "maintenance_windows": { "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.ExchangeMaintenanceWindow" }, "type": "array" }, - "statcast_first_base_receiving_field_out_values": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "source_url": { + "example": "https://external-api.kalshi.com/trade-api/v2/exchange/schedule", + "type": "string" }, - "statcast_first_base_receiving_game_types": { + "standard_hours": { "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.ExchangeStandardHours" }, "type": "array" + } + }, + "type": "object" + }, + "kalshi.ExchangeStandardHours": { + "properties": { + "end_time": { + "example": "2200-12-01T00:00:00Z", + "type": "string" }, - "statcast_first_base_receiving_hands": { + "friday": { "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.ExchangeHoursBlock" }, "type": "array" }, - "statcast_first_base_receiving_minimum_heights": { + "monday": { "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.ExchangeHoursBlock" }, "type": "array" }, - "statcast_first_base_receiving_minimum_split_values": { + "saturday": { "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.ExchangeHoursBlock" }, "type": "array" }, - "statcast_first_base_receiving_minimums": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "start_time": { + "example": "2024-12-01T00:00:00Z", + "type": "string" }, - "statcast_first_base_receiving_runner_states": { + "sunday": { "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.ExchangeHoursBlock" }, "type": "array" }, - "statcast_first_base_receiving_seasons": { + "thursday": { "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.ExchangeHoursBlock" }, "type": "array" }, - "statcast_first_base_receiving_secondary_splits": { + "tuesday": { "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.ExchangeHoursBlock" }, "type": "array" }, - "statcast_first_base_receiving_sort_directions": { + "wednesday": { "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.ExchangeHoursBlock" }, "type": "array" + } + }, + "type": "object" + }, + "kalshi.ExchangeStatusResponse": { + "properties": { + "exchange_active": { + "example": true, + "type": "boolean" }, - "statcast_first_base_receiving_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "fetched_at": { + "example": "2026-06-07T14:00:00Z", + "type": "string" }, - "statcast_first_base_receiving_split_year_values": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "source_url": { + "example": "https://external-api.kalshi.com/trade-api/v2/exchange/status", + "type": "string" }, - "statcast_first_base_receiving_throw_heights": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "trading_active": { + "example": true, + "type": "boolean" + } + }, + "type": "object" + }, + "kalshi.HistoricalCutoffResponse": { + "properties": { + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:00:00Z", + "type": "string" }, - "statcast_first_base_receiving_throw_locations": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "market_settled_at": { + "description": "Cutoff time for settled markets, in UTC (RFC 3339). Markets settled before it are served by the historical endpoints.", + "example": "2026-04-08T00:00:00Z", + "type": "string" }, - "statcast_first_base_receiving_throw_positions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "orders_updated_at": { + "description": "Cutoff time for order updates, in UTC (RFC 3339).", + "example": "2026-04-08T00:00:00Z", + "type": "string" }, - "statcast_first_base_receiving_time_bins": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "source_url": { + "description": "URL the data was read from.", + "example": "https://external-api.kalshi.com/trade-api/v2/historical/cutoff", + "type": "string" }, - "statcast_first_base_receiving_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "trades_created_at": { + "description": "Cutoff time for trades, in UTC (RFC 3339). Trades created before it are served by the historical trades endpoint.", + "example": "2026-04-08T00:00:00Z", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.HistoricalMarketResponse": { + "properties": { + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:00:00Z", + "type": "string" }, - "statcast_home_runs_categories": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "market": { + "allOf": [ + { + "$ref": "#/definitions/kalshi.MarketRow" + } + ], + "description": "The historical Kalshi market that was requested." }, - "statcast_home_runs_minimum_home_runs": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "source_url": { + "description": "URL the data was read from.", + "example": "https://external-api.kalshi.com/trade-api/v2/historical/markets/KXMVECROSSCATEGORY-S2026144E784A147-ED367B84557", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.HistoricalMarketsResponse": { + "properties": { + "cursor": { + "description": "Cursor to pass in the next request to get the following page. Omitted when Kalshi returns none.", + "type": "string" }, - "statcast_home_runs_player_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:00:00Z", + "type": "string" }, - "statcast_home_runs_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "limit": { + "description": "Number of markets requested per page.", + "example": 25, + "type": "integer" }, - "statcast_home_runs_sort_fields": { + "markets": { + "description": "Historical Kalshi markets on this page.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.MarketRow" }, "type": "array" }, - "statcast_home_runs_team_ids": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "source_url": { + "description": "URL the data was read from.", + "example": "https://external-api.kalshi.com/trade-api/v2/historical/markets?limit=25", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.HistoricalTradesResponse": { + "properties": { + "cursor": { + "description": "Cursor to pass in the next request to get the following page. Omitted when Kalshi returns none.", + "type": "string" }, - "statcast_home_runs_years": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:00:00Z", + "type": "string" }, - "statcast_leaderboards": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "limit": { + "description": "Number of trades requested per page.", + "example": 25, + "type": "integer" }, - "statcast_max_year": { + "max_ts": { + "description": "Latest trade creation time that was requested, in Unix seconds.", + "example": 1775689200, "type": "integer" }, - "statcast_min_year": { + "min_ts": { + "description": "Earliest trade creation time that was requested, in Unix seconds.", + "example": 1775602800, "type": "integer" }, - "statcast_minimum_bbe": { + "source_url": { + "description": "URL the data was read from.", + "example": "https://external-api.kalshi.com/trade-api/v2/historical/trades?limit=25", + "type": "string" + }, + "ticker": { + "description": "Market ticker the trades were filtered by. Omitted when no ticker filter was used.", + "example": "KXMVECROSSCATEGORY-S2026144E784A147-ED367B84557", + "type": "string" + }, + "trades": { + "description": "Historical trades on this page.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.TradeRow" }, "type": "array" + } + }, + "type": "object" + }, + "kalshi.MarketCandlestick": { + "properties": { + "end_period_at": { + "description": "End of the candlestick period, in UTC (RFC 3339).", + "example": "2026-06-01T00:00:00Z", + "type": "string" }, - "statcast_oaa_max_year": { + "end_period_ts": { + "description": "End of the candlestick period, in Unix seconds.", + "example": 1780286400, "type": "integer" }, - "statcast_oaa_min_year": { - "type": "integer" + "open_interest": { + "description": "Number of contracts open at the end of the period.", + "example": 32980.77, + "type": "number" }, - "statcast_oaa_minimums": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "price": { + "allOf": [ + { + "$ref": "#/definitions/kalshi.CandleOHLC" + } + ], + "description": "Open, high, low, close, mean and previous trade price for the period, in US dollars per contract." }, - "statcast_oaa_positions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "volume": { + "description": "Number of contracts traded during the period.", + "example": 7, + "type": "number" }, - "statcast_oaa_ranges": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "yes_ask": { + "allOf": [ + { + "$ref": "#/definitions/kalshi.CandleOHLC" + } + ], + "description": "Open, high, low, close, mean and previous Yes ask price for the period, in US dollars per contract." }, - "statcast_oaa_roles": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "yes_bid": { + "allOf": [ + { + "$ref": "#/definitions/kalshi.CandleOHLC" + } + ], + "description": "Open, high, low, close, mean and previous Yes bid price for the period, in US dollars per contract." + } + }, + "type": "object" + }, + "kalshi.MarketDetail": { + "properties": { + "color_code": { + "description": "Display colour of the market on Kalshi, as a hex code.", + "example": "#AA00FF", + "type": "string" }, - "statcast_oaa_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "image_url": { + "description": "URL of the market's image.", + "type": "string" }, - "statcast_oaa_sort_fields": { + "market_ticker": { + "description": "Ticker of the market the details belong to.", + "example": "KXELONMARS-99", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.MarketHistoryResponse": { + "properties": { + "candlesticks": { + "description": "Price candlesticks for the market, one per period.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.MarketCandlestick" }, "type": "array" }, - "statcast_oaa_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "end_ts": { + "description": "End of the requested range, in Unix seconds.", + "example": 1780804800, + "type": "integer" }, - "statcast_park_factor_bat_sides": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:00:00Z", + "type": "string" }, - "statcast_park_factor_conditions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "include_latest_before_start": { + "description": "Whether the latest candle before `start_ts` was requested.", + "example": false, + "type": "boolean" }, - "statcast_park_factor_dimension_years": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "period_interval": { + "description": "Length of each candlestick period, in minutes.", + "example": 1440, + "type": "integer" }, - "statcast_park_factor_parks": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "series_ticker": { + "description": "Ticker of the series the market belongs to.", + "example": "KXELONMARS", + "type": "string" }, - "statcast_park_factor_rolling_windows": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "source_url": { + "description": "URL the data was read from.", + "example": "https://external-api.kalshi.com/trade-api/v2/series/KXELONMARS/markets/KXELONMARS-99/candlesticks", + "type": "string" }, - "statcast_park_factor_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "start_ts": { + "description": "Start of the requested range, in Unix seconds.", + "example": 1780286400, + "type": "integer" }, - "statcast_park_factor_statcast_years": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "ticker": { + "description": "Ticker of the Kalshi market the history is for.", + "example": "KXELONMARS-99", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.MarketResponse": { + "properties": { + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:00:00Z", + "type": "string" }, - "statcast_park_factor_stats": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "market": { + "allOf": [ + { + "$ref": "#/definitions/kalshi.MarketRow" + } + ], + "description": "The Kalshi market that was requested." }, - "statcast_park_factor_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "source_url": { + "description": "URL the data was read from.", + "example": "https://external-api.kalshi.com/trade-api/v2/markets/KXELONMARS-99", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.MarketRow": { + "properties": { + "close_time": { + "description": "Time trading closes, in UTC (RFC 3339).", + "example": "2099-08-01T04:59:00Z", + "type": "string" }, - "statcast_park_factor_years": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "event_ticker": { + "description": "Ticker of the event the market belongs to.", + "example": "KXELONMARS-99", + "type": "string" }, - "statcast_percentile_batter_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "expiration_time": { + "description": "Time the market expires, in UTC (RFC 3339).", + "example": "2099-08-08T15:00:00Z", + "type": "string" }, - "statcast_percentile_batter_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "last_price": { + "description": "Price of the most recent trade, in US dollars per contract.", + "example": 0.08, + "type": "number" }, - "statcast_percentile_comparators": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "liquidity": { + "description": "Market liquidity, in US dollars.", + "example": 0, + "type": "number" }, - "statcast_percentile_pitcher_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "market_type": { + "description": "Market type, such as `binary`.", + "example": "binary", + "type": "string" }, - "statcast_percentile_pitcher_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "no_ask": { + "description": "Lowest price asked for a No contract, in US dollars.", + "example": 0.92, + "type": "number" }, - "statcast_percentile_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "no_bid": { + "description": "Highest price offered for a No contract, in US dollars.", + "example": 0.9, + "type": "number" }, - "statcast_percentile_team_ids": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "open_interest": { + "description": "Number of contracts currently open in the market.", + "example": 32773.57, + "type": "number" }, - "statcast_percentile_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "open_time": { + "description": "Time trading opened, in UTC (RFC 3339).", + "example": "2025-08-28T20:45:00Z", + "type": "string" }, - "statcast_percentile_years": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "previous_price": { + "description": "Earlier reference price of the market, in US dollars per contract.", + "example": 0.1, + "type": "number" }, - "statcast_pitch_arsenal_min_pa": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "response_price_unit": { + "description": "Price unit label Kalshi attaches to the market, such as `usd_cent`.", + "example": "usd_cent", + "type": "string" }, - "statcast_pitch_arsenal_min_pitches": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "result": { + "description": "Outcome the market settled on. Empty or omitted until it settles.", + "type": "string" }, - "statcast_pitch_arsenal_pitch_aliases": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "rules_primary": { + "description": "Primary rules text that governs how the market settles.", + "type": "string" }, - "statcast_pitch_arsenal_pitch_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "status": { + "description": "Market status as Kalshi reports it, such as `active`.", + "example": "active", + "type": "string" }, - "statcast_pitch_arsenal_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "sub_title": { + "description": "Short label of the outcome the market covers, shown under the title.", + "example": "Mars", + "type": "string" }, - "statcast_pitch_arsenal_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "ticker": { + "description": "Kalshi ticker that identifies the market.", + "example": "KXELONMARS-99", + "type": "string" }, - "statcast_pitch_arsenal_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "title": { + "description": "Market title as shown on Kalshi.", + "example": "Will Elon Musk visit Mars before Aug 1, 2099?", + "type": "string" }, - "statcast_pitch_arsenal_years": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "volume": { + "description": "Total number of contracts traded in the market.", + "example": 94840.88, + "type": "number" }, - "statcast_pitch_arsenals_hands": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "volume_24h": { + "description": "Number of contracts traded in the last 24 hours.", + "example": 16, + "type": "number" }, - "statcast_pitch_arsenals_minimum_pitches": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "yes_ask": { + "description": "Lowest price asked for a Yes contract, in US dollars.", + "example": 0.1, + "type": "number" }, - "statcast_pitch_arsenals_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "yes_bid": { + "description": "Highest price offered for a Yes contract, in US dollars.", + "example": 0.08, + "type": "number" + } + }, + "type": "object" + }, + "kalshi.MarketsResponse": { + "properties": { + "cursor": { + "description": "Cursor to pass in the next request to get the following page. Omitted when Kalshi returns none.", + "type": "string" }, - "statcast_pitch_arsenals_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:00:00Z", + "type": "string" }, - "statcast_pitch_arsenals_spin_cutoff_year": { + "limit": { + "description": "Number of markets requested per page.", + "example": 25, "type": "integer" }, - "statcast_pitch_arsenals_team_abbreviations": { + "markets": { + "description": "Kalshi markets on this page.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.MarketRow" }, "type": "array" }, - "statcast_pitch_arsenals_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "source_url": { + "description": "URL the data was read from.", + "example": "https://external-api.kalshi.com/trade-api/v2/markets?limit=25", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.MultivariateEventsResponse": { + "properties": { + "cursor": { + "description": "Cursor to pass in the next request to get the following page. Omitted when Kalshi returns none.", + "type": "string" }, - "statcast_pitch_arsenals_years": { + "events": { + "description": "Kalshi multivariate events on this page.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.EventRow" }, "type": "array" }, - "statcast_pitch_movement_hands": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:00:00Z", + "type": "string" }, - "statcast_pitch_movement_minimums": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "limit": { + "description": "Number of events requested per page.", + "example": 25, + "type": "integer" }, - "statcast_pitch_movement_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "source_url": { + "description": "URL the data was read from.", + "example": "https://external-api.kalshi.com/trade-api/v2/events/multivariate?limit=25", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.OrderBookLevel": { + "properties": { + "price": { + "description": "Price of the level, in US dollars per contract.", + "example": 0.08, + "type": "number" }, - "statcast_pitch_movement_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "size": { + "description": "Number of contracts resting at this price.", + "example": 185.72, + "type": "number" + } + }, + "type": "object" + }, + "kalshi.OrderBookResponse": { + "properties": { + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:00:00Z", + "type": "string" }, - "statcast_pitch_movement_types": { + "no": { + "description": "Price levels on the No side of the book, highest price first.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.OrderBookLevel" }, "type": "array" }, - "statcast_pitch_movement_years": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "raw_unit_hint": { + "description": "Unit of the level prices, always `dollars`.", + "example": "dollars", + "type": "string" }, - "statcast_pitch_tempo_game_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "source_url": { + "description": "URL the data was read from.", + "example": "https://external-api.kalshi.com/trade-api/v2/markets/KXELONMARS-99/orderbook", + "type": "string" }, - "statcast_pitch_tempo_minimum_pitches": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "ticker": { + "description": "Ticker of the Kalshi market the order book is for.", + "example": "KXELONMARS-99", + "type": "string" }, - "statcast_pitch_tempo_player_types": { + "yes": { + "description": "Price levels on the Yes side of the book, highest price first.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.OrderBookLevel" }, "type": "array" + } + }, + "type": "object" + }, + "kalshi.SeriesDetailResponse": { + "properties": { + "fetched_at": { + "example": "2026-06-07T14:00:00Z", + "type": "string" }, - "statcast_pitch_tempo_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "series": { + "$ref": "#/definitions/kalshi.SeriesRow" }, - "statcast_pitch_tempo_sort_fields": { + "source_url": { + "example": "https://external-api.kalshi.com/trade-api/v2/series/KXELONMARS", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.SeriesResponse": { + "properties": { + "cursor": { + "description": "Cursor returned by Kalshi with the series list. Omitted when Kalshi returns none.", + "type": "string" + }, + "fetched_at": { + "description": "Time the series list was last fetched from Kalshi, in UTC (RFC 3339).", + "example": "2026-06-07T14:00:00Z", + "type": "string" + }, + "limit": { + "description": "Number of series requested.", + "example": 25, + "type": "integer" + }, + "series": { + "description": "Kalshi series in the response.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.SeriesRow" }, "type": "array" }, - "statcast_pitch_tempo_split_years": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "statcast_pitch_tempo_team_ids": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "statcast_pitch_tempo_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "statcast_pitch_tempo_with_team_only": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "statcast_pitch_tempo_years": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "statcast_pitch_timer_chart_sorts": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "source_url": { + "description": "URL the data was read from.", + "example": "https://external-api.kalshi.com/trade-api/v2/series?limit=25", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.SeriesRow": { + "properties": { + "category": { + "description": "Kalshi category of the series, such as `Politics`.", + "example": "Politics", + "type": "string" }, - "statcast_pitch_timer_include_zeroes": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "contract_terms_url": { + "description": "Link to the series' contract terms document.", + "type": "string" }, - "statcast_pitch_timer_minimum_pitches": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "contract_url": { + "description": "Link to the series' contract document.", + "type": "string" }, - "statcast_pitch_timer_seasons": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "fee_multiplier": { + "description": "Multiplier applied to the series' fee calculation.", + "example": 1, + "type": "number" }, - "statcast_pitch_timer_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "fee_type": { + "description": "Fee model Kalshi applies to the series, such as `quadratic`.", + "example": "quadratic", + "type": "string" }, - "statcast_pitch_timer_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "frequency": { + "description": "How often the series produces events, such as `custom`.", + "example": "custom", + "type": "string" }, - "statcast_pitch_timer_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "last_updated": { + "description": "Time the series was last updated, in UTC (RFC 3339).", + "example": "2026-06-01T15:24:00Z", + "type": "string" }, - "statcast_player_detail_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "series_ticker": { + "description": "Kalshi ticker that identifies the series.", + "example": "KXELONMARS", + "type": "string" }, - "statcast_positions": { + "settlement_sources": { + "description": "Sources Kalshi uses to settle the series' markets.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.SettlementSource" }, "type": "array" }, - "statcast_rolling_metrics": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "title": { + "description": "Series title as shown on Kalshi.", + "example": "Will Elon Musk visit Mars in his lifetime?", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.SettlementSource": { + "properties": { + "name": { + "description": "Name of the source used to settle markets, such as `The Guardian`.", + "example": "The Guardian", + "type": "string" }, - "statcast_rolling_roles": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "url": { + "description": "Link to the settlement source's website.", + "example": "https://www.theguardian.com", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.TradeRow": { + "properties": { + "count": { + "description": "Number of contracts traded.", + "example": 2, + "type": "number" }, - "statcast_rolling_window_pa_values": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "created_time": { + "description": "Time the trade was created, in UTC (RFC 3339).", + "example": "2026-06-07T07:23:05Z", + "type": "string" }, - "statcast_run_value_groups": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "created_ts": { + "description": "Time the trade was created, in Unix seconds.", + "example": 1780816985, + "type": "integer" }, - "statcast_run_value_leverages": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "is_block_trade": { + "description": "Whether the trade was a block trade.", + "example": false, + "type": "boolean" }, - "statcast_run_value_minimums": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "no_price": { + "description": "Trade price of the No contract, in US dollars.", + "example": 0.91, + "type": "number" }, - "statcast_run_value_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "taker_book_side": { + "description": "Order book side of the taker's order, such as `bid` or `ask`.", + "example": "ask", + "type": "string" }, - "statcast_run_value_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "taker_outcome_side": { + "description": "Outcome side of the taker's order, such as `yes` or `no`.", + "example": "no", + "type": "string" }, - "statcast_run_value_subtypes": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "taker_side": { + "description": "Side the taker traded, `yes` or `no`.", + "example": "no", + "type": "string" }, - "statcast_run_value_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "ticker": { + "description": "Ticker of the market the trade happened in.", + "example": "KXELONMARS-99", + "type": "string" }, - "statcast_run_value_years": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "trade_id": { + "description": "Kalshi identifier of the trade.", + "example": "9126fe1f-7233-7c75-2c37-06ce7841bbe3", + "type": "string" }, - "statcast_running_game_filters": { - "$ref": "#/definitions/mlb.StatcastRunningGameFilters" + "yes_price": { + "description": "Trade price of the Yes contract, in US dollars.", + "example": 0.09, + "type": "number" + } + }, + "type": "object" + }, + "kalshi.TradesResponse": { + "properties": { + "cursor": { + "description": "Cursor to pass in the next request to get the following page. Omitted when Kalshi returns none.", + "type": "string" }, - "statcast_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:00:00Z", + "type": "string" }, - "statcast_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "limit": { + "description": "Number of trades requested per page.", + "example": 25, + "type": "integer" }, - "statcast_sprint_speed_minimum_runs": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "max_ts": { + "description": "Latest trade creation time that was requested, in Unix seconds.", + "example": 1780873200, + "type": "integer" }, - "statcast_sprint_speed_positions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "min_ts": { + "description": "Earliest trade creation time that was requested, in Unix seconds.", + "example": 1780786800, + "type": "integer" }, - "statcast_sprint_speed_seasons": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "source_url": { + "description": "URL the data was read from.", + "example": "https://external-api.kalshi.com/trade-api/v2/markets/trades?limit=25", + "type": "string" }, - "statcast_sprint_speed_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "ticker": { + "description": "Market ticker the trades were filtered by. Omitted when no ticker filter was used.", + "example": "KXELONMARS-99", + "type": "string" }, - "statcast_sprint_speed_sort_fields": { + "trades": { + "description": "Recent trades on this page.", "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kalshi.TradeRow" }, "type": "array" + } + }, + "type": "object" + }, + "kalshi.batchMarketHistoryResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_sprint_speed_team_abbreviations": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/kalshi.BatchMarketHistoryResponse" }, - "statcast_sprint_speed_team_ids": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.batchOrderBookResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_sprint_speed_team_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/kalshi.BatchOrderBookResponse" }, - "statcast_swing_path_game_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.eventHistoryResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_swing_path_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/kalshi.EventHistoryResponse" }, - "statcast_swing_path_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.eventMetadataResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_swing_timing_flags": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/kalshi.EventMetadataResponse" }, - "statcast_swing_timing_game_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.eventResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_swing_timing_groups_x": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/kalshi.EventResponse" }, - "statcast_swing_timing_groups_y": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.eventsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_swing_timing_groups_z": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/kalshi.EventsResponse" }, - "statcast_swing_timing_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.exchangeScheduleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_swing_timing_sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/kalshi.ExchangeScheduleResponse" }, - "statcast_swing_timing_splits": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.exchangeStatusResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_swing_timing_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/kalshi.ExchangeStatusResponse" }, - "statcast_top_performers_years": { - "items": { - "type": "integer" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.historicalCutoffResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_year_to_year_comparison_years": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/kalshi.HistoricalCutoffResponse" }, - "statcast_year_to_year_groups": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.historicalMarketResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "statcast_year_to_year_sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "data": { + "$ref": "#/definitions/kalshi.HistoricalMarketResponse" }, - "statcast_year_to_year_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "mlb.NamedRef": { + "kalshi.historicalMarketsResponseDoc": { "properties": { - "id": { - "description": "MLB id of the player or league.", + "code": { + "example": 200, "type": "integer" }, - "name": { - "description": "Name of the player or league.", + "data": { + "$ref": "#/definitions/kalshi.HistoricalMarketsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "mlb.NavigationItem": { + "kalshi.historicalTradesResponseDoc": { "properties": { - "children": { - "items": { - "$ref": "#/definitions/mlb.NavigationItem" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "label": { - "type": "string" + "data": { + "$ref": "#/definitions/kalshi.HistoricalTradesResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" - }, - "visible": { - "type": "boolean" } }, "type": "object" }, - "mlb.Play": { + "kalshi.marketHistoryResponseDoc": { "properties": { - "at_bat_index": { + "code": { + "example": 200, "type": "integer" }, - "batter": { - "$ref": "#/definitions/mlb.NamedRef" + "data": { + "$ref": "#/definitions/kalshi.MarketHistoryResponse" }, - "description": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "kalshi.marketResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "event": { - "type": "string" + "data": { + "$ref": "#/definitions/kalshi.MarketResponse" }, - "event_type": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "kalshi.marketsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "events": { - "items": { - "$ref": "#/definitions/mlb.PlayEvent" - }, - "type": "array" + "data": { + "$ref": "#/definitions/kalshi.MarketsResponse" }, - "half_inning": { + "msg": { + "example": "OK", "type": "string" - }, - "inning": { + } + }, + "type": "object" + }, + "kalshi.multivariateEventsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "is_complete": { - "type": "boolean" + "data": { + "$ref": "#/definitions/kalshi.MultivariateEventsResponse" }, - "pitcher": { - "$ref": "#/definitions/mlb.NamedRef" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "mlb.PlayByPlayResponse": { + "kalshi.orderBookResponseDoc": { "properties": { - "fetched_at": { - "type": "string" - }, - "game_id": { + "code": { + "example": 200, "type": "integer" }, - "plays": { - "items": { - "$ref": "#/definitions/mlb.Play" - }, - "type": "array" + "data": { + "$ref": "#/definitions/kalshi.OrderBookResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "mlb.PlayEvent": { + "kalshi.seriesDetailResponseDoc": { "properties": { - "description": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "details": { - "additionalProperties": {}, - "type": "object" + "data": { + "$ref": "#/definitions/kalshi.SeriesDetailResponse" }, - "end_time": { + "msg": { + "example": "OK", "type": "string" - }, - "index": { + } + }, + "type": "object" + }, + "kalshi.seriesResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "is_pitch": { - "type": "boolean" - }, - "pitch_data": { - "additionalProperties": {}, - "type": "object" + "data": { + "$ref": "#/definitions/kalshi.SeriesResponse" }, - "pitch_number": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "kalshi.tradesResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "start_time": { - "type": "string" + "data": { + "$ref": "#/definitions/kalshi.TradesResponse" }, - "type": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "mlb.Player": { + "kfc.Address": { "properties": { - "active": { - "type": "boolean" - }, - "bat_side": { + "address1": { + "example": "600 Terminal Drive", "type": "string" }, - "birth_city": { + "address2": { + "example": "Louisville International Airport - Pre Security", "type": "string" }, - "birth_country": { + "city": { + "example": "Louisville", "type": "string" }, - "birth_date": { + "country_code": { + "example": "US", "type": "string" }, - "current_age": { - "type": "integer" + "latitude": { + "example": 38.1857, + "type": "number" }, - "current_team": { - "$ref": "#/definitions/mlb.TeamRef" + "longitude": { + "example": -85.7445, + "type": "number" }, - "full_name": { + "phone": { + "example": "+15023633000", "type": "string" }, - "height": { + "postal_code": { + "example": "40209", "type": "string" }, - "id": { - "type": "integer" + "state": { + "example": "KY", + "type": "string" + } + }, + "type": "object" + }, + "kfc.DeliveryEstimateResponse": { + "properties": { + "delivery_provider": { + "example": "DOORDASH", + "type": "string" }, - "mlb_debut_date": { + "dropoff_at": { "type": "string" }, - "pitch_hand": { + "fee": { + "allOf": [ + { + "$ref": "#/definitions/kfc.Money" + } + ], + "description": "Fee is the total delivery fee; Fees breaks it down by line item." + }, + "fees": { + "items": { + "$ref": "#/definitions/kfc.DeliveryFeeLine" + }, + "type": "array" + }, + "fetched_at": { "type": "string" }, - "position": { + "pickup_at": { "type": "string" }, - "position_code": { + "reason": { + "example": "Marketplace store is inactive", "type": "string" }, - "primary_number": { + "serviceable": { + "description": "Serviceable is true only when the upstream returned a real estimate.\nA false value with Reason populated covers every other case this\nfamily has seen live: the provider not enabled at this store, the\naddress being outside the delivery zone, or the upstream delivery\nmarketplace itself reporting the store inactive -- KFC's schema\nrepresents all of these as distinct typed results, not one boolean.", + "example": false, + "type": "boolean" + }, + "source_url": { "type": "string" }, - "weight": { - "type": "integer" + "store_number": { + "example": "K750015", + "type": "string" } }, "type": "object" }, - "mlb.PlayerResponse": { + "kfc.DeliveryFeeLine": { "properties": { - "fetched_at": { - "type": "string" + "amount": { + "$ref": "#/definitions/kfc.Money" }, - "player": { - "$ref": "#/definitions/mlb.Player" + "name": { + "example": "Delivery Fee", + "type": "string" }, - "source_url": { + "type": { + "example": "DELIVERY", "type": "string" } }, "type": "object" }, - "mlb.PlayerSuggestion": { + "kfc.MenuCategory": { "properties": { - "active": { - "type": "boolean" - }, - "boxscore_name": { + "category_code": { + "example": "combos", "type": "string" }, - "display_name": { + "description": { + "example": "Combos", "type": "string" }, - "headshots": { + "items": { "items": { - "$ref": "#/definitions/mlb.ImageRef" + "$ref": "#/definitions/kfc.MenuItem" }, "type": "array" }, - "id": { - "type": "integer" - }, "name": { - "type": "string" - }, - "team_id": { - "type": "integer" - }, - "team_tri_code": { - "type": "string" - }, - "use_last_name": { - "type": "string" - }, - "use_name": { + "example": "Combos", "type": "string" } }, "type": "object" }, - "mlb.ProspectRanking": { + "kfc.MenuItem": { "properties": { - "affiliate": { - "type": "string" - }, - "affiliate_id": { - "type": "integer" - }, - "age": { - "type": "integer" - }, - "bats": { - "type": "string" - }, - "birth_city": { - "type": "string" - }, - "birth_country": { + "code": { + "example": "chocolate-chunk-cookie", "type": "string" }, - "birth_date": { + "description": { "type": "string" }, - "college": { + "image_url": { "type": "string" }, - "draft_pick": { - "type": "integer" - }, - "draft_round": { + "name": { + "example": "Chocolate Chunk Cookie", "type": "string" }, - "draft_year": { - "type": "integer" - }, - "eta": { - "type": "string" + "price": { + "$ref": "#/definitions/kfc.Money" }, - "headshot_url": { + "type": { + "example": "product", "type": "string" }, - "height": { + "variant_code": { + "description": "VariantCode is the specific priced variant this item's Price reflects\n(present for type=product, whose price comes from its default\nvariant). It is the id GraphQL calls use to select a specific size/\nconfiguration; this family does not currently expose variant-level\nbrowsing beyond the default.", + "example": "VC_ChocolateChunkCookie|0|||||", "type": "string" + } + }, + "type": "object" + }, + "kfc.MenuResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/kfc.MenuCategory" + }, + "type": "array" }, - "level": { + "channel": { + "example": "WEB", "type": "string" }, - "name": { + "currency": { + "example": "USD", "type": "string" }, - "player_id": { - "type": "integer" - }, - "position": { + "fetched_at": { "type": "string" }, - "rank": { + "item_count": { + "example": 52, "type": "integer" }, - "school": { + "menu_id": { + "example": "845791b0-7bdb-4ff0-92f2-344a89aa4b57", "type": "string" }, - "slug": { + "source_url": { "type": "string" }, - "team": { + "store_number": { + "example": "I824001", "type": "string" + } + }, + "type": "object" + }, + "kfc.Money": { + "properties": { + "amount": { + "example": 4.99, + "type": "number" }, - "team_id": { + "amount_cents": { + "example": 499, "type": "integer" }, - "throws": { + "currency_code": { + "example": "USD", "type": "string" - }, - "weight": { - "type": "integer" } }, "type": "object" }, - "mlb.ProspectRankingsResponse": { + "kfc.NearbyResponse": { "properties": { "count": { + "example": 20, "type": "integer" }, "fetched_at": { "type": "string" }, - "limit": { - "type": "integer" + "has_more": { + "example": true, + "type": "boolean" }, - "offset": { - "type": "integer" + "source_url": { + "type": "string" }, - "players": { + "stores": { "items": { - "$ref": "#/definitions/mlb.ProspectRanking" + "$ref": "#/definitions/kfc.NearbyStore" }, "type": "array" + } + }, + "type": "object" + }, + "kfc.NearbyStore": { + "properties": { + "accepting_online_orders": { + "example": true, + "type": "boolean" }, - "position": { - "type": "string" + "address": { + "$ref": "#/definitions/kfc.Address" }, - "query": { - "type": "string" + "archived": { + "example": false, + "type": "boolean" }, - "sort": { - "type": "string" + "distance_miles": { + "example": 1.408, + "type": "number" }, - "sort_dir": { + "name": { + "example": "KFC 600 Terminal Drive", "type": "string" }, - "source_url": { + "store_number": { + "example": "I824001", "type": "string" }, - "team_slug": { + "timezone": { + "example": "America/New_York", "type": "string" + } + }, + "type": "object" + }, + "kfc.OccasionHours": { + "properties": { + "enabled": { + "example": true, + "type": "boolean" }, - "total": { - "type": "integer" - }, - "view": { + "occasion": { + "example": "DELIVERY", "type": "string" }, - "year": { - "type": "integer" + "windows": { + "items": { + "$ref": "#/definitions/kfc.TimeWindow" + }, + "type": "array" } }, "type": "object" }, - "mlb.ProspectStat": { + "kfc.Promotion": { "properties": { - "age": { - "type": "integer" + "automatic": { + "example": true, + "type": "boolean" }, - "average": { + "description": { "type": "string" }, - "batting_stats": { - "additionalProperties": {}, - "type": "object" - }, - "blown_saves": { - "type": "integer" - }, - "era": { + "display_name": { + "example": "50% off Chicken Sandwich", "type": "string" }, - "holds": { - "type": "integer" - }, - "losses": { - "type": "integer" - }, "name": { + "example": "Digital-Q324 - 50% off Chicken Sandwich", "type": "string" }, - "pitching_stats": { - "additionalProperties": {}, - "type": "object" - }, - "player_id": { - "type": "integer" - }, - "position": { + "promotion_id": { + "example": "6815f409-5b1e-44dc-9f99-26b1c1a2699a", "type": "string" }, - "rank": { - "type": "integer" - }, - "saves": { - "type": "integer" + "redemption_codes": { + "description": "RedemptionCodes is populated from the public promotion's active code\nconnection. It gives callers a durable discovery path for\nPromotionByCode instead of requiring a guessed or stale code.", + "example": [ + "WALMART5DOLLARSOFF" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "kfc.PromotionResponse": { + "properties": { + "automatic": { + "example": true, + "type": "boolean" }, - "slug": { + "code_status": { "type": "string" }, - "team": { + "description": { "type": "string" }, - "team_id": { - "type": "integer" - }, - "team_level": { + "display_name": { + "example": "50% off Chicken Sandwich", "type": "string" }, - "wins": { - "type": "integer" - } - }, - "type": "object" - }, - "mlb.ProspectStatsResponse": { - "properties": { - "count": { - "type": "integer" + "effective_date": { + "type": "string" }, - "date_range": { + "expiration_date": { "type": "string" }, "fetched_at": { "type": "string" }, - "limit": { - "type": "integer" - }, - "list_type": { + "group_status": { "type": "string" }, - "min_pa": { - "type": "integer" + "name": { + "example": "Digital-Q324 - 50% off Chicken Sandwich", + "type": "string" }, - "offset": { - "type": "integer" + "promotion_id": { + "example": "6815f409-5b1e-44dc-9f99-26b1c1a2699a", + "type": "string" }, - "player_type": { + "redemption_code": { + "description": "The fields below are populated only when looked up by\nserialized_code -- a serialized code carries its own usage metadata\ndistinct from the promotion it resolves to.", + "example": "WELCOME10", "type": "string" }, - "players": { + "redemption_codes": { + "description": "RedemptionCodes is populated from the public promotion's active code\nconnection. It gives callers a durable discovery path for\nPromotionByCode instead of requiring a guessed or stale code.", + "example": [ + "WALMART5DOLLARSOFF" + ], "items": { - "$ref": "#/definitions/mlb.ProspectStat" + "type": "string" }, "type": "array" }, - "position": { - "type": "string" - }, - "query": { - "type": "string" - }, "source_url": { "type": "string" }, - "team_id": { - "type": "integer" - }, - "total": { + "times_used": { + "example": 0, "type": "integer" } }, "type": "object" }, - "mlb.Record": { + "kfc.PromotionsResponse": { "properties": { - "losses": { + "count": { + "example": 15, "type": "integer" }, - "pct": { + "fetched_at": { "type": "string" }, - "wins": { - "type": "integer" + "promotions": { + "items": { + "$ref": "#/definitions/kfc.Promotion" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "store_number": { + "example": "I824001", + "type": "string" } }, "type": "object" }, - "mlb.RosterPlayer": { + "kfc.Store": { "properties": { - "jersey_number": { - "type": "string" + "accepting_online_orders": { + "example": true, + "type": "boolean" }, - "person": { - "$ref": "#/definitions/mlb.NamedRef" + "address": { + "$ref": "#/definitions/kfc.Address" }, - "position": { + "archived": { + "example": false, + "type": "boolean" + }, + "name": { + "example": "KFC 600 Terminal Drive", "type": "string" }, - "position_code": { + "store_number": { + "example": "I824001", "type": "string" }, - "status": { + "timezone": { + "example": "America/New_York", "type": "string" } }, "type": "object" }, - "mlb.RosterResponse": { + "kfc.StoreResponse": { "properties": { - "count": { - "type": "integer" + "accepting_online_orders": { + "example": true, + "type": "boolean" + }, + "address": { + "$ref": "#/definitions/kfc.Address" + }, + "archived": { + "example": false, + "type": "boolean" }, "fetched_at": { "type": "string" }, - "players": { + "hours": { + "description": "Hours is this restaurant's recurring open windows per order channel\n(occasion) -- CARRYOUT, DELIVERY, DINE_IN, DRIVE_THRU,\nCATERING_CARRYOUT. A restaurant that does not offer a given occasion\nat all omits it from this list.", "items": { - "$ref": "#/definitions/mlb.RosterPlayer" + "$ref": "#/definitions/kfc.OccasionHours" }, "type": "array" }, - "roster_type": { + "name": { + "example": "KFC 600 Terminal Drive", "type": "string" }, - "season": { - "type": "integer" - }, "source_url": { "type": "string" }, - "team_id": { - "type": "integer" + "store_number": { + "example": "I824001", + "type": "string" + }, + "timezone": { + "example": "America/New_York", + "type": "string" } }, "type": "object" }, - "mlb.ScheduleResponse": { + "kfc.StoresResponse": { "properties": { - "date": { - "type": "string" - }, - "end_date": { - "type": "string" + "count": { + "example": 5, + "type": "integer" }, "fetched_at": { "type": "string" }, - "games": { - "items": { - "$ref": "#/definitions/mlb.GameSummary" - }, - "type": "array" + "has_more": { + "example": true, + "type": "boolean" }, "source_url": { "type": "string" }, - "start_date": { - "type": "string" - }, - "team_id": { - "type": "integer" + "stores": { + "items": { + "$ref": "#/definitions/kfc.Store" + }, + "type": "array" }, - "total_games": { + "total_count": { + "description": "TotalCount is how many restaurants matched upstream; it can exceed\nCount when more results exist than max_results asked for.", + "example": 33, "type": "integer" } }, "type": "object" }, - "mlb.SearchResponse": { + "kfc.TimeWindow": { "properties": { - "fetched_at": { - "type": "string" + "blackout": { + "example": false, + "type": "boolean" }, - "players": { + "days": { + "example": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], "items": { - "$ref": "#/definitions/mlb.PlayerSuggestion" + "type": "integer" }, "type": "array" }, - "query": { + "duration": { + "example": "09:00:00", "type": "string" }, - "search_terms": { - "items": { - "$ref": "#/definitions/mlb.TermSuggestion" - }, - "type": "array" - }, - "source_url": { + "start_time": { + "example": "10:00:00", "type": "string" + } + }, + "type": "object" + }, + "kfc.deliveryEstimateResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "teams": { - "items": { - "$ref": "#/definitions/mlb.TeamSuggestion" - }, - "type": "array" + "data": { + "$ref": "#/definitions/kfc.DeliveryEstimateResponse" }, - "topics": { - "items": { - "$ref": "#/definitions/mlb.TopicSuggestion" - }, - "type": "array" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "mlb.StandingsGroup": { + "kfc.menuResponseDoc": { "properties": { - "division": { - "$ref": "#/definitions/mlb.NamedRef" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "league": { - "$ref": "#/definitions/mlb.NamedRef" + "data": { + "$ref": "#/definitions/kfc.MenuResponse" }, - "teams": { - "items": { - "$ref": "#/definitions/mlb.StandingsTeam" - }, - "type": "array" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "kfc.nearbyResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "type": { - "type": "string" + "data": { + "$ref": "#/definitions/kfc.NearbyResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "mlb.StandingsResponse": { + "kfc.promotionResponseDoc": { "properties": { - "date": { - "type": "string" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "fetched_at": { - "type": "string" + "data": { + "$ref": "#/definitions/kfc.PromotionResponse" }, - "groups": { - "items": { - "$ref": "#/definitions/mlb.StandingsGroup" - }, - "type": "array" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "kfc.promotionsResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "season": { + "data": { + "$ref": "#/definitions/kfc.PromotionsResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "kfc.storeResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/kfc.StoreResponse" }, - "type": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "mlb.StandingsTeam": { + "kfc.storesResponseDoc": { "properties": { - "away_record": { - "$ref": "#/definitions/mlb.Record" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "clinched": { - "type": "boolean" + "data": { + "$ref": "#/definitions/kfc.StoresResponse" }, - "division_leader": { - "type": "boolean" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "khaleejtimes.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "division_rank": { + "biography": { "type": "string" }, - "elimination_number": { + "image_url": { "type": "string" }, - "expected_record": { - "$ref": "#/definitions/mlb.Record" + "name": { + "type": "string" }, - "games_back": { + "slug": { "type": "string" }, - "games_played": { + "total_articles": { "type": "integer" }, - "home_record": { - "$ref": "#/definitions/mlb.Record" - }, - "last_ten_record": { - "$ref": "#/definitions/mlb.Record" + "twitter_handle": { + "type": "string" }, - "league_rank": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "kick.CategoriesResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/kick.Category" + }, + "type": "array" + } + }, + "type": "object" + }, + "kick.Category": { + "properties": { + "icon": { "type": "string" }, - "losses": { + "id": { "type": "integer" }, - "magic_number": { + "name": { "type": "string" }, - "run_differential": { + "slug": { + "type": "string" + } + }, + "type": "object" + }, + "kick.CategoryHit": { + "properties": { + "id": { "type": "integer" }, - "runs_allowed": { - "type": "integer" + "mature": { + "type": "boolean" }, - "runs_scored": { - "type": "integer" + "name": { + "type": "string" }, - "streak": { + "slug": { "type": "string" }, - "team": { - "$ref": "#/definitions/mlb.TeamRef" + "tags": { + "items": { + "type": "string" + }, + "type": "array" }, - "wild_card_games_back": { + "thumbnail_url": { "type": "string" }, - "winning_percentage": { + "url": { "type": "string" }, - "wins": { + "viewers": { "type": "integer" } }, "type": "object" }, - "mlb.StatSplit": { + "kick.CategoryRef": { "properties": { - "league": { - "allOf": [ - { - "$ref": "#/definitions/mlb.NamedRef" - } - ], - "description": "League the row belongs to. Omitted when MLB gives none." + "id": { + "type": "integer" }, - "player": { - "allOf": [ - { - "$ref": "#/definitions/mlb.NamedRef" - } - ], - "description": "Player the row belongs to. Omitted when MLB gives none." + "name": { + "type": "string" }, - "position": { - "description": "Position name as MLB lists it. Omitted when MLB gives none.", + "slug": { "type": "string" + } + }, + "type": "object" + }, + "kick.ChannelChatroomResponse": { + "properties": { + "account_age": { + "$ref": "#/definitions/kick.ChatMode" }, - "rank": { - "description": "Position of the row in the ranking. Omitted when the table is not ranked.", + "chatroom_id": { "type": "integer" }, - "season": { - "description": "Season the row covers, as a year. Omitted for rows that are not tied to one season.", + "emotes_only": { + "$ref": "#/definitions/kick.ChatMode" + }, + "followers_only": { + "$ref": "#/definitions/kick.ChatMode" + }, + "gifts_enabled": { + "type": "boolean" + }, + "rules": { + "description": "Rules is the channel's chat rules text; empty when none are set.", "type": "string" }, - "stats": { - "additionalProperties": {}, - "description": "Statistics for the row, as named values such as `homeRuns`. The set of stats depends on `group` and `type`.", - "type": "object" + "slow_mode": { + "$ref": "#/definitions/kick.ChatMode" }, - "team": { - "allOf": [ - { - "$ref": "#/definitions/mlb.TeamRef" - } - ], - "description": "Team the row belongs to. Omitted when MLB gives none." + "slug": { + "type": "string" + }, + "subscribers_only": { + "$ref": "#/definitions/kick.ChatMode" } }, "type": "object" }, - "mlb.StatcastABSChallengeFilters": { + "kick.ChannelEmotesResponse": { "properties": { - "ball_strike": { + "channel": { "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kick.Emote" }, "type": "array" }, - "breakeven": { + "emoji": { "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kick.Emote" }, "type": "array" }, - "challenge_types": { + "global": { "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kick.Emote" }, "type": "array" }, - "data_counts": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "slug": { + "type": "string" + } + }, + "type": "object" + }, + "kick.ChannelHit": { + "properties": { + "followers": { + "type": "integer" }, - "data_modes": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "id": { + "type": "integer" }, - "game_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "live": { + "type": "boolean" }, - "levels": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "profile_picture": { + "type": "string" }, - "leverage": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "slug": { + "type": "string" }, - "minimum_challenges": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "url": { + "type": "string" }, - "pitch_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "username": { + "type": "string" }, - "seasons": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "kick.ChannelLink": { + "properties": { + "description": { + "type": "string" }, - "shadow_zones": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "id": { + "type": "integer" }, - "split_year": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "image_url": { + "type": "string" }, - "splits": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "kind": { + "description": "Kind is \"link\" for a panel with a URL and \"text\" for one that is only\na title and description.", + "type": "string" }, - "team_ids": { + "order": { + "description": "Order is the position Kick shows the panel in; Kick numbers from 0 on\nsome channels and from 1 on others.", + "type": "integer" + }, + "title": { + "type": "string" + }, + "url": { + "description": "URL is empty for a text panel.", + "type": "string" + } + }, + "type": "object" + }, + "kick.ChannelLinksResponse": { + "properties": { + "links": { "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kick.ChannelLink" }, "type": "array" + }, + "slug": { + "type": "string" } }, "type": "object" }, - "mlb.StatcastABSChallengesOption": { + "kick.ChannelRef": { "properties": { - "ball_strike": { - "type": "string" + "id": { + "type": "integer" }, - "breakeven": { + "profile_picture": { "type": "string" }, - "challenge_team_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "challenge_type": { + "slug": { "type": "string" }, - "data_count": { + "url": { "type": "string" }, - "data_mode": { + "username": { "type": "string" }, - "game_types": { - "items": { - "type": "string" - }, - "type": "array" + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "kick.ChannelResponse": { + "properties": { + "affiliate": { + "type": "boolean" }, - "level": { - "type": "string" + "banned": { + "type": "boolean" }, - "leverage": { + "banner_url": { "type": "string" }, - "min_challenges": { + "bio": { "type": "string" }, - "min_opponent_challenges": { + "followers": { + "type": "integer" + }, + "id": { + "type": "integer" + }, + "live": { + "$ref": "#/definitions/kick.LiveStream" + }, + "profile_picture": { "type": "string" }, - "opponent_team_ids": { + "recent_categories": { "items": { - "type": "string" + "$ref": "#/definitions/kick.CategoryRef" }, "type": "array" }, - "pitch_types": { - "items": { - "type": "string" - }, - "type": "array" + "slug": { + "type": "string" }, - "seasons": { - "items": { - "type": "string" - }, - "type": "array" + "socials": { + "$ref": "#/definitions/kick.Socials" }, - "shadow_zones": { - "items": { - "type": "string" - }, - "type": "array" + "subscription_enabled": { + "type": "boolean" }, - "split_year": { + "url": { "type": "string" }, - "splits": { - "items": { - "type": "string" - }, - "type": "array" + "username": { + "type": "string" + }, + "verified": { + "type": "boolean" + }, + "vod_enabled": { + "type": "boolean" } }, "type": "object" }, - "mlb.StatcastABSChallengesResponse": { + "kick.ChannelStreamsResponse": { "properties": { - "board": { - "type": "string" - }, - "fetched_at": { + "slug": { "type": "string" }, - "filters": { - "$ref": "#/definitions/mlb.StatcastABSChallengesOption" - }, - "rows": { + "streams": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/kick.StreamSession" }, "type": "array" - }, - "source_url": { - "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "mlb.StatcastArmStrengthPlayerResponse": { + "kick.ChannelVideosResponse": { "properties": { - "fetched_at": { - "type": "string" - }, - "player_id": { - "type": "string" - }, - "source_url": { + "slug": { "type": "string" }, - "throws": { + "videos": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/kick.Video" }, "type": "array" + } + }, + "type": "object" + }, + "kick.ChatMode": { + "properties": { + "enabled": { + "type": "boolean" }, - "total": { + "interval_seconds": { + "description": "IntervalSeconds is the delay between a viewer's messages, for slow mode.", "type": "integer" }, - "year": { - "type": "string" + "minutes": { + "description": "Minutes is the minimum follow time or account age, in minutes, for\nfollowers-only and account-age modes; zero for the others.", + "type": "integer" } }, "type": "object" }, - "mlb.StatcastArmStrengthResponse": { + "kick.Clip": { "properties": { - "board": { - "type": "string" + "category": { + "$ref": "#/definitions/kick.CategoryRef" }, - "fetched_at": { + "channel": { + "$ref": "#/definitions/kick.ChannelRef" + }, + "created_at": { "type": "string" }, - "limit": { + "duration_seconds": { "type": "integer" }, - "min_throws": { + "id": { "type": "string" }, - "offset": { + "likes": { "type": "integer" }, - "position": { - "type": "string" + "mature": { + "type": "boolean" }, - "rows": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "started_at": { + "type": "string" }, - "sort": { + "thumbnail_url": { "type": "string" }, - "sort_dir": { + "title": { "type": "string" }, - "source_url": { + "url": { "type": "string" }, - "team_id": { + "video_id": { "type": "string" }, - "total": { + "video_offset_seconds": { "type": "integer" }, - "type": { + "views": { + "type": "integer" + } + }, + "type": "object" + }, + "kick.ClipResponse": { + "properties": { + "clip": { + "$ref": "#/definitions/kick.Clip" + } + }, + "type": "object" + }, + "kick.ClipsResponse": { + "properties": { + "category": { + "description": "Category is the category slug a category clip list was read for.", "type": "string" }, - "year": { + "clips": { + "items": { + "$ref": "#/definitions/kick.Clip" + }, + "type": "array" + }, + "next_cursor": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "sort": { + "type": "string" + }, + "time": { "type": "string" } }, "type": "object" }, - "mlb.StatcastArmValueDetailsResponse": { + "kick.DirectoryStream": { "properties": { - "entity_id": { + "category": { + "$ref": "#/definitions/kick.CategoryRef" + }, + "channel": { + "$ref": "#/definitions/kick.ChannelRef" + }, + "id": { "type": "string" }, - "fetched_at": { + "language": { "type": "string" }, - "plays": { + "mature": { + "type": "boolean" + }, + "started_at": { + "type": "string" + }, + "tags": { "items": { - "additionalProperties": {}, - "type": "object" + "type": "string" }, "type": "array" }, - "source_url": { + "thumbnail_url": { "type": "string" }, - "total": { - "type": "integer" - }, - "type": { + "title": { "type": "string" + }, + "viewers": { + "type": "integer" } }, "type": "object" }, - "mlb.StatcastArmValueResponse": { + "kick.DropCampaign": { "properties": { - "board": { - "type": "string" + "category": { + "$ref": "#/definitions/kick.CategoryRef" }, - "end_year": { + "channel_count": { "type": "integer" }, - "fetched_at": { + "channels": { + "items": { + "$ref": "#/definitions/kick.DropChannel" + }, + "type": "array" + }, + "ends_at": { "type": "string" }, - "game_type": { + "id": { "type": "string" }, - "key_base_out": { + "name": { "type": "string" }, - "limit": { - "type": "integer" + "organization": { + "$ref": "#/definitions/kick.DropOrganization" }, - "minimum_opps": { + "rewards": { + "items": { + "$ref": "#/definitions/kick.DropReward" + }, + "type": "array" + }, + "rule": { "type": "string" }, - "offset": { + "starts_at": { + "type": "string" + }, + "status": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "kick.DropChannel": { + "properties": { + "id": { "type": "integer" }, - "q": { + "profile_picture": { "type": "string" }, - "rows": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "slug": { + "type": "string" }, - "sort": { + "url": { "type": "string" }, - "sort_dir": { + "username": { + "type": "string" + } + }, + "type": "object" + }, + "kick.DropOrganization": { + "properties": { + "id": { "type": "string" }, - "source_url": { + "logo_url": { "type": "string" }, - "split": { + "name": { "type": "string" }, - "start_year": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "kick.DropReward": { + "properties": { + "category_id": { "type": "integer" }, - "team_id": { + "id": { "type": "string" }, - "total": { - "type": "integer" + "image_url": { + "type": "string" }, - "type": { + "name": { "type": "string" }, - "with_team_only": { - "type": "boolean" + "required_units": { + "description": "RequiredUnits is Kick's threshold for the reward. For the\n\"Watch to redeem\" campaigns it reads as watch time (60, 120, 180 ...);\nKick does not state the unit.", + "type": "integer" } }, "type": "object" }, - "mlb.StatcastBaserunningFilters": { + "kick.DropsResponse": { "properties": { - "boards": { + "campaigns": { "items": { - "$ref": "#/definitions/mlb.EnumValue" + "$ref": "#/definitions/kick.DropCampaign" }, "type": "array" }, - "game_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "status": { + "type": "string" }, - "groups": { - "additionalProperties": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "type": "object" - }, - "key_base_outs": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "minimums": { - "additionalProperties": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "type": "object" - }, - "pitch_hands": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "prior_pickoffs": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "runner_moved": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "seasons": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "sort_fields": { - "additionalProperties": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "type": "object" - }, - "splits": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "target_bases": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "teams": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" + "total": { + "description": "Total is the number of campaigns Kick lists in all (active and\nexpired); Campaigns holds those matching Status.", + "type": "integer" } }, "type": "object" }, - "mlb.StatcastBaserunningOption": { + "kick.Emote": { "properties": { - "board": { - "type": "string" - }, - "game_type": { - "type": "string" - }, - "key_base_out": { - "type": "string" - }, - "limit": { - "type": "integer" - }, - "n": { - "type": "string" - }, - "offset": { - "type": "integer" - }, - "pitch_hand": { - "type": "string" - }, - "prior_pk": { - "type": "string" - }, - "runner_moved": { - "type": "string" - }, - "search": { - "type": "string" - }, - "season_end": { - "type": "integer" - }, - "season_start": { + "id": { "type": "integer" }, - "sort": { - "type": "string" - }, - "sort_dir": { - "type": "string" - }, - "split": { - "type": "string" - }, - "target_base": { - "type": "string" - }, - "team": { + "image_url": { "type": "string" }, - "type": { + "name": { "type": "string" }, - "with_team_only": { + "subscribers_only": { "type": "boolean" } }, "type": "object" }, - "mlb.StatcastBaserunningResponse": { - "properties": { - "board": { - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "filters": { - "$ref": "#/definitions/mlb.StatcastBaserunningOption" - }, - "limit": { - "type": "integer" - }, - "offset": { - "type": "integer" - }, - "rows": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "source_url": { - "type": "string" - }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "mlb.StatcastBoardResponse": { + "kick.Gift": { "properties": { - "board": { - "type": "string" - }, - "end_year": { + "character_limit": { + "description": "CharacterLimit is the message length a level-up gift allows (0 = none).", "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "filter_type": { + "id": { "type": "string" }, - "league_average": { - "items": {}, - "type": "array" - }, - "limit": { + "kicks": { "type": "integer" }, - "minimum": { + "name": { "type": "string" }, - "offset": { + "pinned_seconds": { + "description": "PinnedSeconds is how long a level-up gift pins its message in chat.", "type": "integer" }, - "position": { - "type": "string" - }, - "range": { - "type": "string" - }, - "roles": { - "items": { - "type": "string" - }, - "type": "array" - }, - "rows": { - "items": { - "$ref": "#/definitions/mlb.StatcastRow" - }, - "type": "array" - }, - "sort": { - "type": "string" - }, - "sort_dir": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "split": { + "tier": { + "description": "Tier is BASIC, MID or HIGHER; Type is BASIC or LEVEL_UP.", "type": "string" }, - "start_year": { - "type": "integer" - }, - "team_id": { - "type": "integer" - }, - "total": { - "type": "integer" - }, "type": { "type": "string" - }, - "year": { - "type": "integer" } }, "type": "object" }, - "mlb.StatcastCatcherPopTimeResponse": { + "kick.GiftsResponse": { "properties": { - "board": { - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "limit": { - "type": "integer" - }, - "min_2b_attempts": { - "type": "string" - }, - "min_3b_attempts": { - "type": "string" - }, - "offset": { - "type": "integer" - }, - "rows": { + "gifts": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/kick.Gift" }, "type": "array" - }, - "sort": { - "type": "string" - }, - "sort_dir": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "team_id": { - "type": "string" - }, - "total": { - "type": "integer" - }, - "year": { - "type": "string" } }, "type": "object" }, - "mlb.StatcastCatcherStanceResponse": { + "kick.Language": { "properties": { - "board": { - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "game_type": { - "type": "string" - }, - "group_by": { - "items": { - "type": "string" - }, - "type": "array" - }, - "limit": { - "type": "integer" - }, - "min_pitches": { - "type": "string" - }, - "min_results": { - "type": "string" - }, - "offset": { - "type": "integer" - }, - "rows": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "season_end": { - "type": "string" - }, - "season_start": { - "type": "string" - }, - "sort": { - "type": "string" - }, - "sort_dir": { - "type": "string" - }, - "source_url": { + "code": { "type": "string" }, - "total": { - "type": "integer" - }, - "type": { + "name": { "type": "string" } }, "type": "object" }, - "mlb.StatcastCatcherThrowingDetailsResponse": { + "kick.LanguagesResponse": { "properties": { - "entity_id": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "limit": { - "type": "integer" - }, - "offset": { - "type": "integer" - }, - "rows": { + "languages": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/kick.Language" }, "type": "array" - }, - "source_url": { - "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "mlb.StatcastCatcherThrowingResponse": { + "kick.LiveStream": { "properties": { - "board": { - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "game_type": { - "type": "string" - }, - "limit": { - "type": "integer" - }, - "minimum_attempts": { - "type": "string" - }, - "offset": { - "type": "integer" - }, - "rows": { + "categories": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/kick.CategoryRef" }, "type": "array" }, - "season_end": { - "type": "string" - }, - "season_start": { - "type": "string" - }, - "sort": { - "type": "string" - }, - "sort_dir": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "split": { - "type": "string" - }, - "target_base": { - "type": "string" - }, - "team": { - "type": "string" - }, - "total": { + "id": { "type": "integer" }, - "type": { + "language": { "type": "string" }, - "with_team_only": { + "mature": { "type": "boolean" - } - }, - "type": "object" - }, - "mlb.StatcastFieldingRunValueResponse": { - "properties": { - "board": { - "type": "string" - }, - "date_end": { - "type": "string" }, - "date_start": { - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "game_type": { + "started_at": { "type": "string" }, - "group_by": { + "tags": { "items": { "type": "string" }, "type": "array" }, - "limit": { - "type": "integer" - }, - "minimum": { - "type": "string" - }, - "minimum_split": { - "type": "string" - }, - "offset": { - "type": "integer" - }, - "position": { - "type": "string" - }, - "rows": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "season_end": { - "type": "string" - }, - "season_start": { - "type": "string" - }, - "sort": { - "type": "string" - }, - "sort_dir": { + "thumbnail_url": { "type": "string" }, - "source_url": { + "title": { "type": "string" }, - "teams": { - "items": { - "type": "string" - }, - "type": "array" - }, - "total": { + "viewers": { "type": "integer" - }, - "type": { - "type": "string" } }, "type": "object" }, - "mlb.StatcastFirstBaseReceivingDetailsResponse": { + "kick.LivestreamsResponse": { "properties": { - "fetched_at": { - "type": "string" - }, - "limit": { - "type": "integer" - }, - "offset": { - "type": "integer" - }, - "player_id": { - "type": "integer" - }, - "rows": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "source_url": { - "type": "string" - }, - "total": { + "category_id": { "type": "integer" - } - }, - "type": "object" - }, - "mlb.StatcastFirstBaseReceivingResponse": { - "properties": { - "board": { - "type": "string" }, - "fetched_at": { + "language": { "type": "string" }, - "game_types": { + "livestreams": { "items": { - "type": "string" + "$ref": "#/definitions/kick.DirectoryStream" }, "type": "array" }, - "limit": { - "type": "integer" - }, - "minimum": { - "type": "string" - }, - "minimum_split": { + "next_cursor": { "type": "string" }, - "offset": { - "type": "integer" - }, - "rows": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "seasons": { - "items": { - "type": "string" - }, - "type": "array" - }, "sort": { "type": "string" - }, - "sort_direction": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "split_year": { - "type": "string" - }, - "splits": { - "items": { - "type": "string" - }, - "type": "array" - }, - "total": { - "type": "integer" - }, - "type": { - "type": "string" } }, "type": "object" }, - "mlb.StatcastPercentileFilter": { + "kick.SearchCategoriesResponse": { "properties": { - "comparator": { - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/kick.CategoryHit" + }, + "type": "array" }, - "field": { + "query": { "type": "string" - }, - "value": { - "type": "number" } }, "type": "object" }, - "mlb.StatcastPlayerDetailsResponse": { + "kick.SearchChannelsResponse": { "properties": { - "fetched_at": { - "type": "string" - }, - "player_id": { - "type": "string" - }, - "player_type": { - "type": "string" - }, - "plays": { + "channels": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/kick.ChannelHit" }, "type": "array" }, - "source_url": { + "query": { "type": "string" - }, - "total": { - "type": "integer" - }, - "year": { - "type": "integer" } }, "type": "object" }, - "mlb.StatcastResponse": { + "kick.Socials": { "properties": { - "fetched_at": { - "type": "string" - }, - "limit": { - "type": "integer" - }, - "min_bbe": { + "discord": { "type": "string" }, - "offset": { - "type": "integer" - }, - "position": { + "facebook": { "type": "string" }, - "rows": { - "items": { - "$ref": "#/definitions/mlb.StatcastRow" - }, - "type": "array" - }, - "sort": { + "instagram": { "type": "string" }, - "sort_dir": { + "tiktok": { "type": "string" }, - "source_url": { + "twitter": { "type": "string" }, - "team_id": { - "type": "integer" - }, - "total": { - "type": "integer" - }, - "type": { + "youtube": { "type": "string" - }, - "year": { - "type": "integer" } }, "type": "object" }, - "mlb.StatcastRollingGroup": { + "kick.StreamSession": { "properties": { - "limit": { - "type": "integer" - }, - "offset": { - "type": "integer" - }, - "role": { - "type": "string" - }, - "rows": { + "categories": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/kick.CategoryRef" }, "type": "array" }, - "total": { + "duration_ms": { "type": "integer" }, - "window_pa": { + "id": { "type": "integer" - } - }, - "type": "object" - }, - "mlb.StatcastRow": { - "properties": { - "entity_id": { - "type": "string" - }, - "metrics": { - "additionalProperties": {}, - "type": "object" - }, - "name": { - "type": "string" }, - "position": { + "language": { "type": "string" }, - "qualified": { + "live": { "type": "boolean" }, - "rank": { - "type": "integer" - }, - "team": { - "type": "string" - }, - "team_id": { - "type": "string" - } - }, - "type": "object" - }, - "mlb.StatcastRunningGameDetailsOption": { - "properties": { - "entity_id": { - "type": "string" + "mature": { + "type": "boolean" }, - "game_type": { + "started_at": { "type": "string" }, - "limit": { - "type": "integer" + "tags": { + "items": { + "type": "string" + }, + "type": "array" }, - "min_pitches": { + "thumbnail_url": { "type": "string" }, - "offset": { - "type": "integer" - }, - "pitch_hand": { + "title": { "type": "string" }, - "prior_pk": { + "video_url": { "type": "string" }, - "runner_moved": { + "video_uuid": { + "description": "VideoUUID, VideoViews and VideoURL describe the recording; empty when\nthe broadcast has none.", "type": "string" }, - "season_end": { + "video_views": { "type": "integer" }, - "season_start": { + "viewer_count": { + "description": "ViewerCount is the viewer figure Kick reports for the broadcast; the\nupstream does not say whether it is a peak or an average.", "type": "integer" - }, - "split": { - "type": "string" - }, - "target_base": { - "type": "string" - }, - "team": { - "type": "string" - }, - "type": { - "type": "string" - }, - "with_team_only": { - "type": "boolean" } }, "type": "object" }, - "mlb.StatcastRunningGameDetailsResponse": { + "kick.SubcategoriesResponse": { "properties": { - "board": { + "category": { "type": "string" }, - "entity_id": { + "limit": { "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "filters": { - "$ref": "#/definitions/mlb.StatcastRunningGameDetailsOption" - }, - "limit": { + "page": { "type": "integer" }, - "offset": { + "reachable": { "type": "integer" }, - "rows": { + "subcategories": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/kick.Subcategory" }, "type": "array" }, - "source_url": { - "type": "string" - }, "total": { "type": "integer" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "mlb.StatcastRunningGameFilters": { - "properties": { - "game_types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "minimum_pitches": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "pitch_hands": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "prior_pickoffs": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "runner_moved": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "seasons": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "sort_directions": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "sort_fields": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "target_bases": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "teams": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" - }, - "types": { - "items": { - "$ref": "#/definitions/mlb.EnumValue" - }, - "type": "array" } }, "type": "object" }, - "mlb.StatcastRunningGameOption": { + "kick.Subcategory": { "properties": { - "game_type": { + "banner_url": { "type": "string" }, - "limit": { - "type": "integer" - }, - "min_pitches": { + "description": { "type": "string" }, - "offset": { + "followers": { "type": "integer" }, - "pitch_hand": { - "type": "string" - }, - "prior_pk": { - "type": "string" + "id": { + "type": "integer" }, - "runner_moved": { - "type": "string" + "mature": { + "type": "boolean" }, - "search": { + "name": { "type": "string" }, - "season_end": { - "type": "integer" - }, - "season_start": { + "parent_id": { "type": "integer" }, - "sort": { - "type": "string" - }, - "sort_dir": { + "parent_name": { "type": "string" }, - "split": { + "parent_slug": { "type": "string" }, - "target_base": { + "slug": { "type": "string" }, - "team": { - "type": "string" + "tags": { + "items": { + "type": "string" + }, + "type": "array" }, - "type": { + "url": { "type": "string" }, - "with_team_only": { - "type": "boolean" + "viewers": { + "type": "integer" } }, "type": "object" }, - "mlb.StatcastRunningGameResponse": { + "kick.SubcategoryResponse": { "properties": { - "board": { - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "filters": { - "$ref": "#/definitions/mlb.StatcastRunningGameOption" - }, - "limit": { - "type": "integer" - }, - "offset": { - "type": "integer" - }, - "rows": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "source_url": { - "type": "string" - }, - "total": { - "type": "integer" + "subcategory": { + "$ref": "#/definitions/kick.Subcategory" } }, "type": "object" }, - "mlb.StatcastSprintSpeedResponse": { + "kick.TopChannelsResponse": { "properties": { - "board": { - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "limit": { - "type": "integer" - }, - "max_season": { - "type": "string" - }, - "min_season": { - "type": "string" - }, - "minimum_runs": { - "type": "string" - }, - "offset": { - "type": "integer" - }, - "position": { - "type": "string" - }, - "rows": { + "channels": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/kick.ChannelHit" }, "type": "array" - }, - "sort": { - "type": "string" - }, - "sort_dir": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "team_id": { - "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "mlb.StatcastSprintSpeedTeamsResponse": { + "kick.Video": { "properties": { - "board": { - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "limit": { - "type": "integer" - }, - "offset": { - "type": "integer" - }, - "rows": { + "categories": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/kick.CategoryRef" }, "type": "array" }, - "season": { - "type": "string" - }, - "sort": { - "type": "string" - }, - "sort_dir": { - "type": "string" + "duration_ms": { + "type": "integer" }, - "source_url": { - "type": "string" + "id": { + "type": "integer" }, - "team": { + "language": { "type": "string" }, - "total": { - "type": "integer" - } - }, - "type": "object" - }, - "mlb.StatcastTopPerformerCard": { - "properties": { - "complete_leaderboard_url": { - "type": "string" + "live": { + "type": "boolean" }, - "definition_url": { - "type": "string" + "mature": { + "type": "boolean" }, - "id": { + "started_at": { "type": "string" }, - "leaders": { + "tags": { "items": { - "$ref": "#/definitions/mlb.StatcastTopPerformerLeader" + "type": "string" }, "type": "array" }, - "metric": { - "type": "string" - }, - "player_type": { + "thumbnail_url": { "type": "string" }, "title": { "type": "string" - } - }, - "type": "object" - }, - "mlb.StatcastTopPerformerLeader": { - "properties": { - "headshot_url": { - "type": "string" - }, - "player_id": { - "type": "string" }, - "player_name": { + "url": { "type": "string" }, - "player_url": { + "uuid": { "type": "string" }, - "rank": { + "views": { "type": "integer" - }, - "team_id": { - "type": "string" - }, - "team_logo_url": { - "type": "string" - }, - "value": { - "type": "string" } }, "type": "object" }, - "mlb.StatcastTopPerformersResponse": { + "kick.VideoResponse": { "properties": { - "card_count": { - "type": "integer" - }, - "cards": { + "categories": { "items": { - "$ref": "#/definitions/mlb.StatcastTopPerformerCard" + "$ref": "#/definitions/kick.CategoryRef" }, "type": "array" }, - "fetched_at": { - "type": "string" + "channel": { + "$ref": "#/definitions/kick.ChannelRef" }, - "source_url": { + "created_at": { "type": "string" }, - "year": { + "duration_ms": { "type": "integer" - } - }, - "type": "object" - }, - "mlb.StatsResponse": { - "properties": { - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "type": "string" - }, - "group": { - "description": "Stat group that was returned, for example `hitting` or `pitching`.", - "type": "string" }, - "limit": { - "description": "Maximum number of rows requested. Omitted when no limit applies.", + "id": { "type": "integer" }, - "offset": { - "description": "Number of rows skipped before this page. Omitted when zero.", - "type": "integer" + "language": { + "type": "string" }, - "player_id": { - "description": "MLB player id the stats are for. Omitted for team and league-wide tables.", - "type": "integer" + "mature": { + "type": "boolean" }, - "season": { - "description": "Season the stats cover, as a year.", - "type": "integer" + "started_at": { + "type": "string" }, - "source_url": { - "description": "URL the data was read from.", + "status": { "type": "string" }, - "splits": { - "description": "Rows of statistics, one item per player, team or period.", + "tags": { "items": { - "$ref": "#/definitions/mlb.StatSplit" + "type": "string" }, "type": "array" }, - "team_id": { - "description": "MLB team id the stats are limited to. Omitted when not limited to a team.", - "type": "integer" - }, - "total": { - "description": "Total number of rows available.", - "type": "integer" - }, - "type": { - "description": "Stats type label. Always `season`.", - "type": "string" - } - }, - "type": "object" - }, - "mlb.Team": { - "properties": { - "abbreviation": { - "description": "Short team abbreviation, for example `NYY`. Omitted when not available.", - "type": "string" - }, - "active": { - "type": "boolean" - }, - "club_name": { + "thumbnail_url": { "type": "string" }, - "division": { - "$ref": "#/definitions/mlb.NamedRef" - }, - "first_year_of_play": { + "title": { "type": "string" }, - "id": { - "description": "MLB team id.", - "type": "integer" - }, - "league": { - "$ref": "#/definitions/mlb.NamedRef" - }, - "location_name": { + "url": { "type": "string" }, - "name": { - "description": "Full team name.", + "uuid": { "type": "string" }, - "season": { + "viewer_count": { "type": "integer" }, - "venue": { - "$ref": "#/definitions/mlb.VenueRef" - } - }, - "type": "object" - }, - "mlb.TeamBoxscore": { - "properties": { - "batters": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "pitchers": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "players_used": { + "views": { "type": "integer" - }, - "team": { - "$ref": "#/definitions/mlb.TeamRef" - }, - "team_stats": { - "additionalProperties": { - "additionalProperties": {}, - "type": "object" - }, - "type": "object" } }, "type": "object" }, - "mlb.TeamRef": { + "kick.categoriesResponseDoc": { "properties": { - "abbreviation": { - "description": "Short team abbreviation, for example `NYY`. Omitted when not available.", - "type": "string" - }, - "id": { - "description": "MLB team id.", + "code": { + "example": 200, "type": "integer" }, - "name": { - "description": "Full team name.", + "data": { + "$ref": "#/definitions/kick.CategoriesResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "mlb.TeamSuggestion": { + "kick.categoryClipsResponseDoc": { "properties": { - "club_name": { - "type": "string" - }, - "display_name": { - "type": "string" - }, - "franchise_name": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "logos": { - "items": { - "$ref": "#/definitions/mlb.ImageRef" - }, - "type": "array" - }, - "name": { - "type": "string" - }, - "sport_id": { + "code": { + "example": 200, "type": "integer" }, - "team_name": { - "type": "string" + "data": { + "$ref": "#/definitions/kick.ClipsResponse" }, - "tri_code": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "mlb.TeamsResponse": { + "kick.channelChatroomResponseDoc": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "season": { + "code": { + "example": 200, "type": "integer" }, - "source_url": { - "type": "string" - }, - "teams": { - "items": { - "$ref": "#/definitions/mlb.Team" - }, - "type": "array" - } - }, - "type": "object" - }, - "mlb.TermSuggestion": { - "properties": { - "display_name": { - "type": "string" + "data": { + "$ref": "#/definitions/kick.ChannelChatroomResponse" }, - "name": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "mlb.TopicSuggestion": { + "kick.channelClipsResponseDoc": { "properties": { - "display_name": { - "type": "string" - }, - "fields": { - "items": { - "type": "integer" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/kick.ClipsResponse" }, - "slug": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "mlb.Transaction": { + "kick.channelEmotesResponseDoc": { "properties": { - "date": { - "type": "string" - }, - "description": { - "type": "string" - }, - "effective_date": { - "type": "string" - }, - "from_team": { - "$ref": "#/definitions/mlb.TeamRef" - }, - "id": { + "code": { + "example": 200, "type": "integer" }, - "player": { - "$ref": "#/definitions/mlb.NamedRef" - }, - "to_team": { - "$ref": "#/definitions/mlb.TeamRef" + "data": { + "$ref": "#/definitions/kick.ChannelEmotesResponse" }, - "type": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "mlb.TransactionsResponse": { + "kick.channelLinksResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "end_date": { - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/kick.ChannelLinksResponse" }, - "start_date": { + "msg": { + "example": "OK", "type": "string" - }, - "transactions": { - "items": { - "$ref": "#/definitions/mlb.Transaction" - }, - "type": "array" } }, "type": "object" }, - "mlb.VenueRef": { + "kick.channelResponseDoc": { "properties": { - "id": { + "code": { + "example": 200, "type": "integer" }, - "name": { + "data": { + "$ref": "#/definitions/kick.ChannelResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "mlb.boxscoreResponseDoc": { + "kick.channelStreamsResponseDoc": { "properties": { "code": { + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.BoxscoreResponse" + "$ref": "#/definitions/kick.ChannelStreamsResponse" }, "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "mlb.discoveryResponseDoc": { + "kick.channelVideosResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.MLBDiscoveryResponse" + "$ref": "#/definitions/kick.ChannelVideosResponse" }, "msg": { "example": "OK", @@ -138882,14 +145042,14 @@ }, "type": "object" }, - "mlb.editorialFeedResponseDoc": { + "kick.clipResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.EditorialFeedResponse" + "$ref": "#/definitions/kick.ClipResponse" }, "msg": { "example": "OK", @@ -138898,14 +145058,14 @@ }, "type": "object" }, - "mlb.gameResponseDoc": { + "kick.clipsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.GameResponse" + "$ref": "#/definitions/kick.ClipsResponse" }, "msg": { "example": "OK", @@ -138914,14 +145074,14 @@ }, "type": "object" }, - "mlb.leagueLeadersResponseDoc": { + "kick.dropsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.LeagueLeadersResponse" + "$ref": "#/definitions/kick.DropsResponse" }, "msg": { "example": "OK", @@ -138930,28 +145090,30 @@ }, "type": "object" }, - "mlb.playByPlayResponseDoc": { + "kick.giftsResponseDoc": { "properties": { "code": { + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.PlayByPlayResponse" + "$ref": "#/definitions/kick.GiftsResponse" }, "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "mlb.playerResponseDoc": { + "kick.languagesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.PlayerResponse" + "$ref": "#/definitions/kick.LanguagesResponse" }, "msg": { "example": "OK", @@ -138960,14 +145122,14 @@ }, "type": "object" }, - "mlb.prospectRankingsResponseDoc": { + "kick.livestreamsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.ProspectRankingsResponse" + "$ref": "#/definitions/kick.LivestreamsResponse" }, "msg": { "example": "OK", @@ -138976,14 +145138,14 @@ }, "type": "object" }, - "mlb.prospectStatsResponseDoc": { + "kick.searchCategoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.ProspectStatsResponse" + "$ref": "#/definitions/kick.SearchCategoriesResponse" }, "msg": { "example": "OK", @@ -138992,14 +145154,14 @@ }, "type": "object" }, - "mlb.rosterResponseDoc": { + "kick.searchChannelsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.RosterResponse" + "$ref": "#/definitions/kick.SearchChannelsResponse" }, "msg": { "example": "OK", @@ -139008,14 +145170,14 @@ }, "type": "object" }, - "mlb.scheduleResponseDoc": { + "kick.subcategoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.ScheduleResponse" + "$ref": "#/definitions/kick.SubcategoriesResponse" }, "msg": { "example": "OK", @@ -139024,14 +145186,14 @@ }, "type": "object" }, - "mlb.searchResponseDoc": { + "kick.subcategoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.SearchResponse" + "$ref": "#/definitions/kick.SubcategoryResponse" }, "msg": { "example": "OK", @@ -139040,14 +145202,14 @@ }, "type": "object" }, - "mlb.standingsResponseDoc": { + "kick.topChannelsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.StandingsResponse" + "$ref": "#/definitions/kick.TopChannelsResponse" }, "msg": { "example": "OK", @@ -139056,14 +145218,14 @@ }, "type": "object" }, - "mlb.statcastABSChallengesResponseDoc": { + "kick.videoResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.StatcastABSChallengesResponse" + "$ref": "#/definitions/kick.VideoResponse" }, "msg": { "example": "OK", @@ -139072,600 +145234,387 @@ }, "type": "object" }, - "mlb.statcastActiveSpinResponseDoc": { + "kickstarter.Category": { "properties": { - "board": { - "example": "active-spin", - "type": "string" - }, - "hand": { - "example": "R", - "type": "string" + "id": { + "type": "integer" }, - "min": { - "example": "50", + "name": { + "example": "Technology", "type": "string" }, - "rows": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "total": { - "example": 712, + "parent_id": { "type": "integer" }, - "year": { - "example": "2026_spin-based", + "slug": { + "example": "technology", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "mlb.statcastArmAngleResponseDoc": { + "kickstarter.Comment": { "properties": { - "bat_side": { - "example": "L", - "type": "string" - }, - "board": { - "example": "pitcher-arm-angle", + "author_name": { "type": "string" }, - "date_end": { - "example": "2026-04-15", + "body": { "type": "string" }, - "date_start": { - "example": "2026-03-25", - "type": "string" + "is_creator": { + "type": "boolean" }, - "fetched_at": { + "posted_at": { "type": "string" - }, - "game_types": { - "example": [ - "R" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "group_by": { - "items": { - "type": "string" - }, - "type": "array" - }, - "league_average": { + } + }, + "type": "object" + }, + "kickstarter.CommentsResult": { + "properties": { + "comments": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/kickstarter.Comment" }, "type": "array" }, - "limit": { - "example": 100, + "total_count": { "type": "integer" - }, - "min": { - "example": "q", - "type": "string" - }, - "min_group_pitches": { - "example": "1", + } + }, + "type": "object" + }, + "kickstarter.Creator": { + "properties": { + "avatar": { "type": "string" }, - "offset": { - "example": 0, + "id": { "type": "integer" }, - "pitch_hand": { - "example": "R", - "type": "string" - }, - "pitch_types": { - "example": [ - "FF" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "rows": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "seasons": { - "example": [ - "2026" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "sort": { - "example": "arm_angle", - "type": "string" - }, - "sort_dir": { - "example": "asc", + "name": { "type": "string" }, - "source_url": { + "url": { "type": "string" - }, - "teams": { - "example": [ - "147" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "total": { - "example": 276, - "type": "integer" } }, "type": "object" }, - "mlb.statcastArmStrengthPlayerResponseDoc": { + "kickstarter.DiscoverResult": { "properties": { - "code": { - "example": 200, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/mlb.StatcastArmStrengthPlayerResponse" + "projects": { + "items": { + "$ref": "#/definitions/kickstarter.Project" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "total_hits": { + "type": "integer" } }, "type": "object" }, - "mlb.statcastArmStrengthResponseDoc": { + "kickstarter.Location": { "properties": { - "code": { - "example": 200, + "country": { + "example": "US", + "type": "string" + }, + "displayable_name": { + "example": "Los Angeles, CA", + "type": "string" + }, + "id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/mlb.StatcastArmStrengthResponse" + "name": { + "example": "Los Angeles", + "type": "string" }, - "msg": { - "example": "OK", + "short_name": { + "example": "Los Angeles, CA", "type": "string" } }, "type": "object" }, - "mlb.statcastArmValueDetailsResponseDoc": { + "kickstarter.Photo": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/mlb.StatcastArmValueDetailsResponse" - }, - "msg": { - "example": "OK", + "full": { "type": "string" } }, "type": "object" }, - "mlb.statcastArmValueResponseDoc": { + "kickstarter.Project": { "properties": { - "code": { - "example": 200, + "backers_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/mlb.StatcastArmValueResponse" - }, - "msg": { - "example": "OK", + "blurb": { "type": "string" - } - }, - "type": "object" - }, - "mlb.statcastBaserunningResponseDoc": { - "properties": { - "code": { + }, + "category": { + "$ref": "#/definitions/kickstarter.Category" + }, + "comments_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/mlb.StatcastBaserunningResponse" + "converted_pledged_amount": { + "type": "number" }, - "msg": { - "type": "string" - } - }, - "type": "object" - }, - "mlb.statcastBatTrackingResponseDoc": { - "properties": { - "board": { + "country": { + "example": "US", "type": "string" }, - "date_end": { + "created_at": { "type": "string" }, - "date_start": { + "creator": { + "$ref": "#/definitions/kickstarter.Creator" + }, + "currency": { + "example": "USD", "type": "string" }, - "fetched_at": { + "currency_symbol": { + "example": "$", "type": "string" }, - "game_type": { + "deadline": { "type": "string" }, - "limit": { + "faq_count": { "type": "integer" }, - "min_group_swings": { - "type": "string" + "goal": { + "type": "number" }, - "min_swings": { - "type": "string" + "has_video": { + "type": "boolean" }, - "offset": { + "id": { + "example": 1114436418, "type": "integer" }, - "rows": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "season_end": { - "type": "string" - }, - "season_start": { - "type": "string" + "is_launched": { + "type": "boolean" }, - "sort": { + "launched_at": { "type": "string" }, - "sort_dir": { - "type": "string" + "location": { + "$ref": "#/definitions/kickstarter.Location" }, - "source_url": { + "name": { "type": "string" }, - "total": { + "percent_funded": { "type": "integer" }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "mlb.statcastBattedBallResponseDoc": { - "properties": { - "board": { - "example": "batted-ball", - "type": "string" + "photo": { + "$ref": "#/definitions/kickstarter.Photo" }, - "game_types": { - "example": [ - "R" - ], - "items": { - "type": "string" - }, - "type": "array" + "pledged": { + "type": "number" }, - "league_average": { + "reward_tiers": { + "description": "RewardTiers is the campaign's pledge/reward tier list, captured from\nkickstarter.com's own natural GraphQL traffic when the campaign's\n/rewards sub-page renders -- see doc.go's \"Reward tiers\" section.\nBest-effort: omitted (not an error) if the capture-capable render\nbackends are unavailable or the campaign has no reward tiers.", "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/kickstarter.RewardTier" }, "type": "array" }, - "min": { - "example": "q", + "risks_and_challenges": { "type": "string" }, - "min_split": { - "example": "1", + "slug": { "type": "string" }, - "rows": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "seasons": { - "example": [ - "2026" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "show_league_average": { - "example": true, + "spotlight": { "type": "boolean" }, - "total": { - "example": 346, - "type": "integer" + "staff_pick": { + "type": "boolean" }, - "type": { - "example": "batter", - "type": "string" - } - }, - "type": "object" - }, - "mlb.statcastBirthdayIndexResponseDoc": { - "properties": { - "date": { - "example": "5-2", + "state": { + "example": "live", "type": "string" }, - "fetched_at": { + "state_changed_at": { "type": "string" }, - "limit": { - "example": 100, - "type": "integer" - }, - "min_games": { - "example": 1, - "type": "integer" + "story": { + "type": "string" }, - "offset": { - "example": 0, + "updates_count": { "type": "integer" }, - "rows": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "url": { + "type": "string" }, - "show_inactives": { - "example": false, - "type": "boolean" + "usd_pledged": { + "type": "number" + } + }, + "type": "object" + }, + "kickstarter.RewardAddOn": { + "properties": { + "amount": { + "type": "number" }, - "sort": { - "example": "daysUntil", + "currency": { "type": "string" }, - "sort_dir": { - "example": "asc", + "description": { "type": "string" }, - "source_url": { + "id": { "type": "string" }, - "today_batters": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "today_pitchers": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "total": { - "example": 241, - "type": "integer" - }, - "type": { - "example": "batter", + "name": { "type": "string" } }, "type": "object" }, - "mlb.statcastBoardResponseDoc": { + "kickstarter.RewardItem": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/mlb.StatcastBoardResponse" - }, - "msg": { - "example": "OK", + "name": { "type": "string" + }, + "quantity": { + "type": "integer" } }, "type": "object" }, - "mlb.statcastCatcherBlockingDetailsResponseDoc": { + "kickstarter.RewardTier": { "properties": { - "board": { - "example": "catcher-blocking-details", - "type": "string" - }, - "entity_id": { - "example": 682626, - "type": "integer" + "add_ons": { + "items": { + "$ref": "#/definitions/kickstarter.RewardAddOn" + }, + "type": "array" }, - "fetched_at": { - "type": "string" + "amount": { + "type": "number" }, - "limit": { - "example": 100, - "type": "integer" + "available": { + "type": "boolean" }, - "offset": { - "example": 0, + "backers_count": { "type": "integer" }, - "rows": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "currency": { + "example": "USD", + "type": "string" }, - "source_url": { + "description": { "type": "string" }, - "total": { - "example": 3319, - "type": "integer" - } - }, - "type": "object" - }, - "mlb.statcastCatcherBlockingResponseDoc": { - "properties": { - "board": { - "example": "catcher-blocking", + "ends_at": { "type": "string" }, - "fetched_at": { + "estimated_delivery_on": { + "example": "2026-06-01", "type": "string" }, - "game_type": { - "example": "Regular", + "featured": { + "type": "boolean" + }, + "id": { "type": "string" }, - "minimum": { - "example": "q", + "image": { "type": "string" }, - "rows": { + "items": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/kickstarter.RewardItem" }, "type": "array" }, - "source_url": { + "limit": { + "type": "integer" + }, + "name": { "type": "string" }, - "total": { - "example": 74, + "remaining_quantity": { "type": "integer" }, - "type": { - "example": "Cat", + "shipping_enabled": { + "type": "boolean" + }, + "shipping_preference": { + "example": "unrestricted", + "type": "string" + }, + "shipping_summary": { "type": "string" } }, "type": "object" }, - "mlb.statcastCatcherFramingDetailsResponseDoc": { + "kickstarter.Update": { "properties": { - "board": { - "example": "catcher-framing-details", + "author_name": { "type": "string" }, - "entity_id": { - "example": 663886, - "type": "integer" - }, - "fetched_at": { + "body": { "type": "string" }, - "limit": { - "example": 100, + "comments_count": { "type": "integer" }, - "offset": { - "example": 0, + "is_creator": { + "type": "boolean" + }, + "number": { + "example": 7, "type": "integer" }, - "rows": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "published_at": { + "example": "July 10, 2026", + "type": "string" }, - "source_url": { + "title": { "type": "string" }, - "total": { - "example": 8570, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "mlb.statcastCatcherFramingResponseDoc": { + "kickstarter.UpdatesResult": { "properties": { - "board": { - "example": "catcher-framing", - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "game_type": { - "example": "Regular", - "type": "string" - }, - "limit": { - "example": 100, - "type": "integer" - }, - "offset": { - "example": 0, - "type": "integer" - }, - "rows": { + "updates": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/kickstarter.Update" }, "type": "array" - }, - "source_url": { - "type": "string" - }, - "total": { - "example": 56, - "type": "integer" - }, - "type": { - "example": "catcher", - "type": "string" } }, "type": "object" }, - "mlb.statcastCatcherPopTimeResponseDoc": { + "kickstarter.commentsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.StatcastCatcherPopTimeResponse" + "$ref": "#/definitions/kickstarter.CommentsResult" }, "msg": { "example": "OK", @@ -139674,14 +145623,14 @@ }, "type": "object" }, - "mlb.statcastCatcherStanceResponseDoc": { + "kickstarter.discoverResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.StatcastCatcherStanceResponse" + "$ref": "#/definitions/kickstarter.DiscoverResult" }, "msg": { "example": "OK", @@ -139690,14 +145639,14 @@ }, "type": "object" }, - "mlb.statcastCatcherThrowingDetailsResponseDoc": { + "kickstarter.projectResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.StatcastCatcherThrowingDetailsResponse" + "$ref": "#/definitions/kickstarter.Project" }, "msg": { "example": "OK", @@ -139706,14 +145655,14 @@ }, "type": "object" }, - "mlb.statcastCatcherThrowingResponseDoc": { + "kickstarter.updatesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/mlb.StatcastCatcherThrowingResponse" + "$ref": "#/definitions/kickstarter.UpdatesResult" }, "msg": { "example": "OK", @@ -139722,1807 +145671,1653 @@ }, "type": "object" }, - "mlb.statcastFieldingRunValueResponseDoc": { + "klook.ActivityResponse": { "properties": { - "code": { - "example": 200, + "activity_id": { + "example": 4099, "type": "integer" }, - "data": { - "$ref": "#/definitions/mlb.StatcastFieldingRunValueResponse" - }, - "msg": { - "example": "OK", + "activity_type": { "type": "string" - } - }, - "type": "object" - }, - "mlb.statcastFirstBaseReceivingDetailsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "city_id": { + "example": 5568, "type": "integer" }, - "data": { - "$ref": "#/definitions/mlb.StatcastFirstBaseReceivingDetailsResponse" + "city_name": { + "example": "California", + "type": "string" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "mlb.statcastFirstBaseReceivingResponseDoc": { - "properties": { - "code": { - "example": 200, + "country_id": { + "example": 28, "type": "integer" }, - "data": { - "$ref": "#/definitions/mlb.StatcastFirstBaseReceivingResponse" - }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "mlb.statcastHomeRunsDetailsResponseDoc": { - "properties": { - "cat": { - "example": "adj_xhr", + "country_name": { + "example": "United States", "type": "string" }, - "player_id": { - "example": "691718", + "image_url": { "type": "string" }, - "player_type": { - "example": "Batter", - "type": "string" + "latitude": { + "example": 34.1392323, + "type": "number" }, - "plays": { + "longitude": { + "example": -118.3543835, + "type": "number" + }, + "price": { + "$ref": "#/definitions/klook.Price" + }, + "rating": { + "example": 4.8, + "type": "number" + }, + "review_count": { + "example": 6037, + "type": "integer" + }, + "sold_out": { + "example": false, + "type": "boolean" + }, + "tags": { "items": { - "additionalProperties": {}, - "type": "object" + "type": "string" }, "type": "array" }, - "total": { - "example": 61, - "type": "integer" + "title": { + "example": "Universal Studios Hollywood Tickets", + "type": "string" }, - "year": { - "example": "2026", + "url": { + "example": "https://www.klook.com/en-US/activity/4099-universal-studios-hollywood-ticket-los-angeles/", "type": "string" } }, "type": "object" }, - "mlb.statcastHomeRunsResponseDoc": { + "klook.ActivitySummary": { "properties": { - "board": { - "example": "home-runs", - "type": "string" - }, - "cat": { - "example": "adj_xhr", - "type": "string" - }, - "min": { - "example": "10", - "type": "string" + "activity_id": { + "example": 4099, + "type": "integer" }, - "player_type": { - "example": "Batter", + "booked": { + "example": "10K+ booked", "type": "string" }, - "rows": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "sort": { - "example": "xhr", - "type": "string" + "category_id": { + "example": 558, + "type": "integer" }, - "sort_dir": { - "example": "desc", - "type": "string" + "price": { + "$ref": "#/definitions/klook.Price" }, - "team": { - "example": "112", - "type": "string" + "rating": { + "example": 4.8, + "type": "number" }, - "total": { - "example": 49, + "review_count": { + "example": 6037, "type": "integer" }, - "year": { - "example": "2026", - "type": "string" - } - }, - "type": "object" - }, - "mlb.statcastParkFactorsResponseDoc": { - "properties": { - "board": { - "example": "statcast-park-factors", - "type": "string" + "sold_out": { + "example": false, + "type": "boolean" }, - "rows": { + "tags": { + "example": [ + "Instant confirmation" + ], "items": { - "additionalProperties": {}, - "type": "object" + "type": "string" }, "type": "array" }, - "total": { - "example": 29, - "type": "integer" + "title": { + "example": "Universal Studios Hollywood Tickets", + "type": "string" }, - "type": { - "example": "year", + "url": { + "example": "https://www.klook.com/en-US/activity/4099-universal-studios-hollywood-ticket-los-angeles/", "type": "string" } }, "type": "object" }, - "mlb.statcastPercentileResponseDoc": { + "klook.AttractionCountry": { "properties": { - "board": { - "example": "percentile-rankings", - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "filters": { + "activities": { "items": { - "$ref": "#/definitions/mlb.StatcastPercentileFilter" + "$ref": "#/definitions/klook.ActivitySummary" }, "type": "array" }, - "limit": { - "example": 100, - "type": "integer" - }, - "offset": { - "example": 0, + "country_id": { + "example": 1012, "type": "integer" }, - "rows": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "sort": { - "example": "percent_rank_xwoba", - "type": "string" - }, - "sort_dir": { - "example": "desc", - "type": "string" - }, - "source_url": { - "type": "string" - }, - "team": { - "example": "147", + "image_url": { "type": "string" }, - "total": { - "example": 28, - "type": "integer" - }, - "type": { - "example": "batter", + "name": { + "example": "Japan", "type": "string" }, - "year": { - "example": "2026", + "url": { "type": "string" } }, "type": "object" }, - "mlb.statcastPitchArsenalDetailsResponseDoc": { + "klook.AttractionsCategoriesResponse": { "properties": { - "pitch_type": { - "example": "FF", - "type": "string" - }, - "player_id": { - "example": "592332", - "type": "string" - }, - "player_type": { - "example": "pitcher", - "type": "string" - }, - "plays": { + "categories": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/klook.Category" }, "type": "array" }, - "total": { - "example": 416, + "count": { + "example": 12, "type": "integer" }, - "year": { - "example": "2026", - "type": "string" + "root": { + "allOf": [ + { + "$ref": "#/definitions/klook.Category" + } + ], + "description": "Root is the vertical root category (\"Attraction tickets\")." } }, "type": "object" }, - "mlb.statcastPitchArsenalResponseDoc": { + "klook.AttractionsDestinationsResponse": { "properties": { - "board": { - "example": "pitch-arsenal-stats", - "type": "string" - }, - "min_pa": { - "example": "1", - "type": "string" - }, - "min_pitches": { - "example": "q", - "type": "string" + "city_id": { + "example": 28, + "type": "integer" }, - "rows": { + "countries": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/klook.AttractionCountry" }, "type": "array" }, - "total": { - "example": 523, + "country_count": { + "example": 7, "type": "integer" }, - "type": { - "example": "pitcher", - "type": "string" + "country_id": { + "example": 12, + "type": "integer" }, - "year": { - "example": "2026", - "type": "string" + "hot_cities": { + "items": { + "$ref": "#/definitions/klook.NearbyCity" + }, + "type": "array" + }, + "nearby_cities": { + "items": { + "$ref": "#/definitions/klook.NearbyCity" + }, + "type": "array" } }, "type": "object" }, - "mlb.statcastPitchArsenalsResponseDoc": { + "klook.AttractionsHighlightsResponse": { "properties": { - "board": { - "example": "pitch-arsenals", + "button_text": { "type": "string" }, - "hand": { - "example": "R", + "button_url": { "type": "string" }, - "min_pitches": { - "example": "q", - "type": "string" + "city_id": { + "example": 28, + "type": "integer" }, - "rows": { + "count": { + "example": 2, + "type": "integer" + }, + "country_id": { + "example": 12, + "type": "integer" + }, + "groups": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/klook.HighlightGroup" }, "type": "array" }, - "total": { - "example": 231, - "type": "integer" - }, "type": { - "example": "avg_speed", - "type": "string" - }, - "year": { - "example": "2026", + "example": "city", "type": "string" } }, "type": "object" }, - "mlb.statcastPitchMovementResponseDoc": { + "klook.AttractionsSearchResponse": { "properties": { - "board": { - "example": "pitch-movement", - "type": "string" - }, - "hand": { - "example": "R", - "type": "string" - }, - "min": { - "example": "q", - "type": "string" - }, - "pitch_type": { - "example": "FF", - "type": "string" - }, - "rows": { + "activities": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/klook.ActivitySummary" }, "type": "array" }, - "total": { - "example": 431, + "category_id": { + "example": 3, "type": "integer" }, - "year": { - "example": "2026", - "type": "string" - } - }, - "type": "object" - }, - "mlb.statcastPitchTempoPlayerResponseDoc": { - "properties": { - "entity_id": { - "example": "608718", - "type": "string" + "city_id": { + "example": 28, + "type": "integer" }, - "game_type": { - "example": "Regular", + "count": { + "example": 20, + "type": "integer" + }, + "destination": { + "example": "Tokyo", "type": "string" }, - "rows": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "page": { + "example": 1, + "type": "integer" }, - "season_end": { - "example": "2026", - "type": "string" + "per_page": { + "example": 20, + "type": "integer" }, - "season_start": { - "example": "2026", + "sort": { + "example": "recommended", "type": "string" }, "total": { - "example": 10, + "example": 5186, "type": "integer" - }, - "type": { - "example": "Pit", - "type": "string" } }, "type": "object" }, - "mlb.statcastPitchTempoResponseDoc": { + "klook.CategoriesResponse": { "properties": { - "board": { - "example": "pitch_tempo", - "type": "string" - }, - "game_type": { - "example": "Regular", - "type": "string" - }, - "minimum_pitches": { - "example": "q", - "type": "string" - }, - "rows": { + "categories": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/klook.Category" }, "type": "array" }, - "season_end": { - "example": "2026", - "type": "string" - }, - "season_start": { - "example": "2026", - "type": "string" - }, - "total": { - "example": 348, + "count": { + "example": 56, "type": "integer" - }, - "type": { - "example": "Pit", - "type": "string" } }, "type": "object" }, - "mlb.statcastPitchTimerResponseDoc": { + "klook.Category": { "properties": { - "board": { - "example": "pitch-timer-infractions", - "type": "string" + "category_id": { + "example": 9, + "type": "integer" }, - "rows": { + "children": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/klook.Category" }, "type": "array" }, - "season": { - "example": "2026", + "name": { + "example": "Tours", "type": "string" }, - "total": { - "example": 30, - "type": "integer" - }, - "type": { - "example": "Team", + "url": { + "example": "https://www.klook.com/en-US/experiences/list/?frontend_id_list=9", "type": "string" } }, "type": "object" }, - "mlb.statcastPlayerDetailsResponseDoc": { + "klook.Country": { "properties": { - "code": { - "example": 200, + "country_code": { + "example": "JP", + "type": "string" + }, + "country_id": { + "example": 12, "type": "integer" }, - "data": { - "$ref": "#/definitions/mlb.StatcastPlayerDetailsResponse" + "name": { + "example": "Japan", + "type": "string" }, - "msg": { - "example": "OK", + "name_en": { + "example": "Japan", "type": "string" } }, "type": "object" }, - "mlb.statcastResponseDoc": { + "klook.DestinationArea": { "properties": { - "code": { - "example": 200, + "city_id": { + "example": 28, "type": "integer" }, - "data": { - "$ref": "#/definitions/mlb.StatcastResponse" + "country_id": { + "example": 12, + "type": "integer" }, - "msg": { - "example": "OK", + "name": { + "example": "Tokyo", + "type": "string" + }, + "url": { + "example": "https://www.klook.com/en-US/experiences/list/tokyo-tours-experiences/c28/", "type": "string" } }, "type": "object" }, - "mlb.statcastRollingResponseDoc": { + "klook.DestinationRegion": { "properties": { - "fetched_at": { - "type": "string" - }, - "groups": { + "areas": { "items": { - "$ref": "#/definitions/mlb.StatcastRollingGroup" + "$ref": "#/definitions/klook.DestinationArea" }, "type": "array" }, - "limit": { - "example": 100, - "type": "integer" - }, - "metric": { - "example": "xwoba", - "type": "string" - }, - "offset": { - "example": 0, - "type": "integer" - }, - "source_url": { + "region_name": { + "example": "East Asia", "type": "string" - }, - "total": { - "example": 2509, - "type": "integer" } }, "type": "object" }, - "mlb.statcastRunValueResponseDoc": { + "klook.DestinationsResponse": { "properties": { - "board": { - "example": "swing-take", - "type": "string" - }, - "group": { - "example": "Batter", - "type": "string" + "area_count": { + "example": 120, + "type": "integer" }, - "rows": { + "countries": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/klook.Country" }, "type": "array" }, - "total": { - "example": 300, + "country_count": { + "example": 191, "type": "integer" }, - "year": { - "example": "2026", - "type": "string" + "regions": { + "items": { + "$ref": "#/definitions/klook.DestinationRegion" + }, + "type": "array" } }, "type": "object" }, - "mlb.statcastRunningGameDetailsResponseDoc": { + "klook.FilterCity": { "properties": { - "code": { - "example": 200, + "city_id": { + "example": 28, "type": "integer" }, - "data": { - "$ref": "#/definitions/mlb.StatcastRunningGameDetailsResponse" - }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "mlb.statcastRunningGameResponseDoc": { - "properties": { - "code": { - "example": 200, + "country_id": { + "example": 12, "type": "integer" }, - "data": { - "$ref": "#/definitions/mlb.StatcastRunningGameResponse" - }, - "msg": { - "example": "OK", + "country_name": { + "example": "Japan", "type": "string" - } - }, - "type": "object" - }, - "mlb.statcastSprintSpeedResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/mlb.StatcastSprintSpeedResponse" + "disabled": { + "description": "Disabled marks cities Klook lists but does not offer in this context.", + "example": false, + "type": "boolean" }, - "msg": { - "example": "OK", + "name": { + "example": "Tokyo", "type": "string" } }, "type": "object" }, - "mlb.statcastSprintSpeedTeamsResponseDoc": { + "klook.FilterCountry": { "properties": { - "code": { - "example": 200, - "type": "integer" + "cities": { + "items": { + "$ref": "#/definitions/klook.FilterCity" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/mlb.StatcastSprintSpeedTeamsResponse" + "country_id": { + "example": 12, + "type": "integer" }, - "msg": { - "example": "OK", + "name": { + "example": "Japan", "type": "string" } }, "type": "object" }, - "mlb.statcastSwingPathResponseDoc": { + "klook.FilterGroup": { "properties": { - "board": { - "example": "swing-path-attack-angle", - "type": "string" - }, - "game_type": { - "example": "Regular", + "key": { + "example": "interest_tag", "type": "string" }, - "rows": { + "options": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/klook.FilterOption" }, "type": "array" }, - "season_end": { - "example": "2026", - "type": "string" - }, - "season_start": { - "example": "2026", + "title": { + "example": "Interests", "type": "string" }, - "total": { - "example": 203, - "type": "integer" - }, "type": { - "example": "batter", + "example": "multi_select", "type": "string" } }, "type": "object" }, - "mlb.statcastSwingTimingDetailsResponseDoc": { + "klook.FilterOption": { "properties": { - "details": { - "additionalProperties": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "children": { + "items": { + "$ref": "#/definitions/klook.FilterOption" }, - "type": "object" + "type": "array" }, - "fetched_at": { - "type": "string" + "enabled": { + "description": "Enabled preserves Klook's per-context enable flag where it publishes one\n(attraction categories); nil means the surface publishes no flag.", + "example": true, + "type": "boolean" }, - "row_id": { + "icon": { "type": "string" }, - "source_url": { + "key": { + "example": "49423", "type": "string" }, - "total": { - "type": "integer" + "show_type": { + "description": "ShowType is Klook's display hint (\"normal\", \"others\", ...).", + "example": "normal", + "type": "string" }, - "type": { + "title": { + "example": "Go-karting", "type": "string" } }, "type": "object" }, - "mlb.statcastSwingTimingResponseDoc": { + "klook.FilterPrice": { "properties": { - "board": { - "example": "swing-timing-miss-distance", + "currency": { + "example": "HK$", "type": "string" }, - "game_types": { - "example": [ - "R" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "rows": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "seasons": { - "example": [ - "2026" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "splits": { - "example": [ - "api_pitch_type_group09" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "total": { - "example": 926, - "type": "integer" + "from": { + "example": "0", + "type": "string" }, - "type": { - "example": "batter", + "to": { + "example": "3000", "type": "string" } }, "type": "object" }, - "mlb.statcastTopPerformersResponseDoc": { + "klook.FilterRegion": { "properties": { - "code": { - "example": 200, - "type": "integer" + "countries": { + "items": { + "$ref": "#/definitions/klook.FilterCountry" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/mlb.StatcastTopPerformersResponse" + "region_id": { + "example": 1, + "type": "integer" }, - "msg": { - "example": "OK", + "region_name": { + "example": "East Asia", "type": "string" } }, "type": "object" }, - "mlb.statcastYearToYearResponseDoc": { + "klook.HighlightGroup": { "properties": { - "board": { - "example": "year-to-year", - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "group": { - "example": "Batter", - "type": "string" - }, - "limit": { - "example": 100, - "type": "integer" - }, - "next_year": { - "example": 2026, - "type": "integer" - }, - "offset": { - "example": 0, - "type": "integer" - }, - "rows": { + "activities": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/klook.ActivitySummary" }, "type": "array" }, - "sort": { - "example": "hard_hit_percent_diff_2025", + "background_color": { "type": "string" }, - "sort_dir": { - "example": "desc", + "color": { "type": "string" }, - "source_url": { + "icon": { "type": "string" }, - "total": { - "example": 177, - "type": "integer" + "id": { + "example": "best_sell", + "type": "string" }, - "type": { - "example": "hard_hit_percent", + "name": { + "example": "Bestsellers", + "type": "string" + } + }, + "type": "object" + }, + "klook.HotGroup": { + "properties": { + "name": { + "example": "Popular Destinations", "type": "string" }, - "year": { - "example": "2025", + "type": { + "example": "city", "type": "string" + }, + "values": { + "items": { + "$ref": "#/definitions/klook.HotValue" + }, + "type": "array" } }, "type": "object" }, - "mlb.statsResponseDoc": { + "klook.HotKeyword": { "properties": { - "code": { - "example": 200, - "type": "integer" + "name": { + "example": "jr pass", + "type": "string" }, - "data": { - "$ref": "#/definitions/mlb.StatsResponse" + "query": { + "example": "jr pass", + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "mlb.teamsResponseDoc": { + "klook.HotKeywordTab": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/mlb.TeamsResponse" + "items": { + "items": { + "$ref": "#/definitions/klook.HotKeywordTabItem" + }, + "type": "array" }, - "msg": { - "example": "OK", + "name": { + "example": "search_topics_popular", "type": "string" } }, "type": "object" }, - "mlb.transactionsResponseDoc": { + "klook.HotKeywordTabItem": { "properties": { - "code": { + "icon_url": { + "type": "string" + }, + "id": { + "example": 128576, "type": "integer" }, - "data": { - "$ref": "#/definitions/mlb.TransactionsResponse" + "price_text": { + "description": "PriceText is Klook's display price string for the item when present.", + "example": "HK$ 2", + "type": "string" }, - "msg": { + "sub_title": { + "example": "Mainland China", + "type": "string" + }, + "title": { + "example": "5G eSIM China | China Unicom", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "modaoperandi.CategoriesResponse": { + "klook.HotKeywordsResponse": { "properties": { - "availability": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" + "city_id": { + "example": 28, + "type": "integer" }, - "categories": { - "items": { - "$ref": "#/definitions/modaoperandi.Category" - }, - "type": "array" + "country_id": { + "example": 12, + "type": "integer" }, - "colors": { + "hot_words": { "items": { - "type": "string" + "$ref": "#/definitions/klook.HotKeyword" }, "type": "array" }, - "designers": { + "tabs": { "items": { - "$ref": "#/definitions/modaoperandi.Designer" + "$ref": "#/definitions/klook.HotKeywordTab" }, "type": "array" }, - "gender": { + "title": { + "example": "Other travelers searched for", "type": "string" + } + }, + "type": "object" + }, + "klook.HotResponse": { + "properties": { + "categories": { + "allOf": [ + { + "$ref": "#/definitions/klook.HotGroup" + } + ], + "description": "Categories is the \"Travel Must-Haves\" navigation group when Klook\nreturns it." }, - "sizes": { + "groups": { + "description": "Groups are Klook's hot items (for example Popular Destinations and\nPopular Activities).", "items": { - "type": "string" + "$ref": "#/definitions/klook.HotGroup" }, "type": "array" }, - "sorts": { + "verticals": { + "description": "Verticals is the short vertical menu Klook returns alongside the hot\nlists.", "items": { - "type": "string" + "$ref": "#/definitions/klook.Vertical" }, "type": "array" } }, "type": "object" }, - "modaoperandi.Category": { + "klook.HotValue": { "properties": { - "name": { + "country_name": { + "description": "CountryName is present on city entries.", + "example": "Mainland China", "type": "string" }, - "slug": { + "id": { + "example": 57, + "type": "integer" + }, + "name": { + "example": "Beijing", "type": "string" }, - "total_items": { - "type": "integer" + "score": { + "description": "Score is the upstream review score when the entry carries one.", + "example": 4.7, + "type": "number" + }, + "type": { + "example": "city", + "type": "string" }, "url": { + "description": "URL is the absolute landing link for this entry.", "type": "string" } }, "type": "object" }, - "modaoperandi.Designer": { + "klook.InterestEntry": { "properties": { - "name": { - "type": "string" + "city_id": { + "example": 28, + "type": "integer" + }, + "country_id": { + "example": 12, + "type": "integer" + }, + "interest_id": { + "example": 18068, + "type": "integer" }, "slug": { + "example": "cherry-blossom", "type": "string" }, - "total_items": { - "type": "integer" + "url": { + "example": "https://www.klook.com/en-US/experiences/list/cherry-blossom/t18068/", + "type": "string" } }, "type": "object" }, - "modaoperandi.DesignersResponse": { + "klook.InterestsResponse": { "properties": { "count": { + "description": "Count is the number of published interest landing URLs.", + "example": 68, "type": "integer" }, - "designers": { + "interest_count": { + "description": "InterestCount is the number of distinct interest ids.", + "example": 44, + "type": "integer" + }, + "interests": { "items": { - "$ref": "#/definitions/modaoperandi.Designer" + "$ref": "#/definitions/klook.InterestEntry" }, "type": "array" - }, - "gender": { - "type": "string" } }, "type": "object" }, - "modaoperandi.Detail": { + "klook.NearbyCity": { "properties": { - "availability": { + "city_id": { + "example": 26383, + "type": "integer" + }, + "distance_km": { + "description": "DistanceKM is Klook's distance in kilometres for nearby cities; empty for\nhot cities.", + "example": "16", "type": "string" }, - "color": { + "image_url": { "type": "string" }, + "name": { + "example": "Kawasaki", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "klook.Price": { + "properties": { "currency": { + "description": "Currency is the upstream ISO currency code when the endpoint returns one\ninstead of a display symbol, e.g. \"HKD\".", + "example": "HKD", "type": "string" }, - "description": { + "currency_symbol": { + "description": "CurrencySymbol is the upstream display symbol, e.g. \"HK$\".", + "example": "HK$", "type": "string" }, - "designer": { + "discount_text": { + "description": "DiscountText is the upstream savings label when present.", "type": "string" }, - "details": { + "from_price": { + "description": "FromPrice is the upstream \"from\" price string when present.", "type": "string" }, - "id": { + "original_price": { + "description": "OriginalPrice is the struck-through market price string when present.", "type": "string" }, - "images": { + "sale_price": { + "description": "SalePrice is the current selling price string, e.g. \"HK$ 552\".", + "example": "HK$ 552", + "type": "string" + } + }, + "type": "object" + }, + "klook.RecommendationCategory": { + "properties": { + "activities": { "items": { - "type": "string" + "$ref": "#/definitions/klook.ActivitySummary" }, "type": "array" }, - "in_stock": { - "type": "boolean" - }, - "name": { + "background_color": { + "description": "BackgroundColor is Klook's display tint for the section header.", + "example": "#E3F9FA", "type": "string" }, - "price": { - "type": "number" + "icon": { + "type": "string" }, - "sizes": { - "items": { - "type": "string" - }, - "type": "array" + "see_more_url": { + "description": "SeeMoreURL is the absolute link to the full category listing.", + "type": "string" }, - "url": { + "title": { + "example": "Food tours", "type": "string" } }, "type": "object" }, - "modaoperandi.Facets": { + "klook.RecommendationsResponse": { "properties": { - "availability": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" + "button_text": { + "example": "Explore all experiences", + "type": "string" }, - "categories": { - "items": { - "$ref": "#/definitions/modaoperandi.Category" - }, - "type": "array" + "button_url": { + "type": "string" }, - "colors": { + "categories": { "items": { - "type": "string" + "$ref": "#/definitions/klook.RecommendationCategory" }, "type": "array" }, - "designers": { - "items": { - "$ref": "#/definitions/modaoperandi.Designer" - }, - "type": "array" + "city_id": { + "example": 28, + "type": "integer" }, - "sizes": { - "items": { - "type": "string" - }, - "type": "array" + "count": { + "example": 3, + "type": "integer" }, - "sorts": { - "items": { - "type": "string" - }, - "type": "array" + "title": { + "example": "Unmissable experiences", + "type": "string" } }, "type": "object" }, - "modaoperandi.Product": { + "klook.Review": { "properties": { - "availability": { + "activity_title": { + "example": "TOKYO SKYTREE® Ticket", "type": "string" }, - "color": { + "activity_url": { "type": "string" }, - "currency": { + "content": { "type": "string" }, - "designer": { - "type": "string" + "review_id": { + "example": 6326765, + "type": "integer" }, - "id": { + "score": { + "example": 5, + "type": "integer" + }, + "time": { + "example": "2019-07-07T11:10:30Z", "type": "string" + } + }, + "type": "object" + }, + "klook.ReviewsResponse": { + "properties": { + "city_id": { + "example": 28, + "type": "integer" }, - "image_url": { + "count": { + "example": 5, + "type": "integer" + }, + "reviews": { + "items": { + "$ref": "#/definitions/klook.Review" + }, + "type": "array" + }, + "vertical": { + "example": "experiences", "type": "string" + } + }, + "type": "object" + }, + "klook.SearchFiltersResponse": { + "properties": { + "available_dates": { + "description": "AvailableDates are the participation dates Klook currently offers for\nthis context (ISO-8601). Empty when the vertical does not publish them.", + "items": { + "type": "string" + }, + "type": "array" }, - "in_stock": { - "type": "boolean" + "category_id": { + "example": 3, + "type": "integer" }, - "name": { + "city_id": { + "example": 28, + "type": "integer" + }, + "destination": { + "example": "Tokyo", "type": "string" }, + "destinations": { + "description": "Destinations is Klook's destination tree for this context. Empty for the\nexperiences vertical, which publishes it on the search response instead;\nuse /klook/destinations there.", + "items": { + "$ref": "#/definitions/klook.FilterRegion" + }, + "type": "array" + }, + "filters": { + "description": "Filters are the published filter groups with their complete value spaces\n(categories, interests, guided language, duration, services, popular\ndestinations). Feed an option key back into the matching search parameter.", + "items": { + "$ref": "#/definitions/klook.FilterGroup" + }, + "type": "array" + }, "price": { - "type": "number" + "$ref": "#/definitions/klook.FilterPrice" }, - "url": { + "sort_options": { + "example": [ + "recommended", + "bestselling", + "top_rated", + "price_low_to_high", + "newest" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "vertical": { + "example": "attractions", "type": "string" } }, "type": "object" }, - "modaoperandi.SearchResponse": { + "klook.SearchResponse": { "properties": { - "category": { - "type": "string" + "activities": { + "items": { + "$ref": "#/definitions/klook.ActivitySummary" + }, + "type": "array" }, - "count": { + "category_id": { + "example": 9, "type": "integer" }, - "facets": { - "$ref": "#/definitions/modaoperandi.Facets" - }, - "gender": { - "type": "string" + "city_id": { + "example": 28, + "type": "integer" }, - "limit": { + "count": { + "example": 20, "type": "integer" }, + "destination": { + "example": "Tokyo", + "type": "string" + }, "page": { + "example": 1, "type": "integer" }, - "products": { - "items": { - "$ref": "#/definitions/modaoperandi.Product" - }, - "type": "array" + "per_page": { + "example": 20, + "type": "integer" }, "query": { + "example": "universal studios", "type": "string" }, - "source_url": { + "sort": { + "example": "recommended", "type": "string" }, "total": { + "example": 1710, "type": "integer" } }, "type": "object" }, - "modaoperandi.categoriesDoc": { + "klook.SuggestActivity": { "properties": { - "code": { - "example": 200, + "activity_id": { + "example": 93901, "type": "integer" }, - "data": { - "$ref": "#/definitions/modaoperandi.CategoriesResponse" + "category_id": { + "example": 2, + "type": "integer" }, - "msg": { - "example": "OK", + "category_name": { "type": "string" - } - }, - "type": "object" - }, - "modaoperandi.designersDoc": { - "properties": { - "code": { - "example": 200, + }, + "city_id": { + "description": "CityID/CityName/ImageURL are populated by the attractions autocomplete,\nwhich returns them; the experiences autocomplete omits them.", + "example": 28, "type": "integer" }, - "data": { - "$ref": "#/definitions/modaoperandi.DesignersResponse" + "city_name": { + "example": "Tokyo", + "type": "string" }, - "msg": { - "example": "OK", + "image_url": { + "type": "string" + }, + "title": { + "example": "Mt. Fuji day trip from Tokyo", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "modaoperandi.productDoc": { + "klook.SuggestCity": { "properties": { - "code": { - "example": 200, + "city_id": { + "example": 28, "type": "integer" }, - "data": { - "$ref": "#/definitions/modaoperandi.Detail" + "country_id": { + "example": 12, + "type": "integer" }, - "msg": { - "example": "OK", + "country_name": { + "example": "Japan", + "type": "string" + }, + "name": { + "example": "Tokyo", + "type": "string" + }, + "url": { + "example": "https://www.klook.com/en-US/destination/c28-tokyo/", "type": "string" } }, "type": "object" }, - "modaoperandi.searchDoc": { + "klook.SuggestCountry": { "properties": { - "code": { - "example": 200, + "country_id": { + "example": 12, "type": "integer" }, - "data": { - "$ref": "#/definitions/modaoperandi.SearchResponse" + "name": { + "example": "Japan", + "type": "string" }, - "msg": { - "example": "OK", + "url": { + "example": "https://www.klook.com/en-US/experiences/coureg/12-japan/", "type": "string" } }, "type": "object" }, - "moncler.CategoriesResponse": { + "klook.SuggestResponse": { "properties": { - "categories": { + "activities": { "items": { - "$ref": "#/definitions/moncler.Category" + "$ref": "#/definitions/klook.SuggestActivity" }, "type": "array" - } - }, - "type": "object" - }, - "moncler.Category": { - "properties": { - "category_id": { - "type": "string" }, - "children": { + "cities": { "items": { - "$ref": "#/definitions/moncler.Category" + "$ref": "#/definitions/klook.SuggestCity" }, "type": "array" }, - "description": { - "type": "string" - }, - "name": { - "type": "string" + "countries": { + "items": { + "$ref": "#/definitions/klook.SuggestCountry" + }, + "type": "array" }, - "parent_id": { + "query": { + "example": "tokyo", "type": "string" } }, "type": "object" }, - "moncler.CategoryResponse": { + "klook.UnifiedSearchResponse": { "properties": { - "category_id": { - "type": "string" - }, - "facets": { - "items": { - "$ref": "#/definitions/moncler.SearchFacet" - }, - "type": "array" - }, - "limit": { - "type": "integer" - }, - "offset": { + "activity_count": { + "description": "ActivityCount is Klook's reported total matching activities.", + "example": 9930, "type": "integer" }, - "results": { - "items": { - "$ref": "#/definitions/moncler.SearchHit" - }, - "type": "array" + "query": { + "example": "tokyo", + "type": "string" }, - "sort_options": { + "suggestions": { "items": { - "$ref": "#/definitions/moncler.SortOption" + "$ref": "#/definitions/klook.UnifiedSuggestion" }, "type": "array" }, - "total": { + "total_count": { + "description": "TotalCount is the number of returned suggestions.", + "example": 14, "type": "integer" } }, "type": "object" }, - "moncler.Product": { + "klook.UnifiedSuggestion": { "properties": { - "brand": { - "type": "string" - }, - "care_instructions": { - "type": "string" - }, - "collection": { - "type": "string" - }, - "color": { - "type": "string" - }, - "composition": { - "type": "string" - }, - "currency": { - "type": "string" - }, - "gender": { + "icon_url": { "type": "string" }, - "images": { - "items": { - "$ref": "#/definitions/moncler.ProductImageGroup" - }, - "type": "array" + "id": { + "description": "ID is the upstream id (a city id for destinations, an activity id for\nactivities, an opaque id for keyword suggestions).", + "example": 28, + "type": "integer" }, - "in_stock": { + "is_vertical": { + "example": true, "type": "boolean" }, - "long_description": { - "type": "string" - }, - "made_in": { - "type": "string" - }, - "master_id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "price": { + "score": { "type": "number" }, - "product_id": { + "sub_title": { + "example": "Japan", "type": "string" }, - "product_url": { + "title": { + "example": "Tokyo", "type": "string" }, - "related_products": { - "description": "RelatedProducts are \"styled with\" items Moncler's own product page\nsuggests alongside this product.", - "items": { - "$ref": "#/definitions/moncler.RelatedProduct" - }, - "type": "array" - }, - "short_description": { + "type": { + "description": "Type is the normalized suggestion kind: destination, keyword,\nvertical_service, activity, or other.", + "example": "destination", "type": "string" }, - "size_guide": { - "allOf": [ - { - "$ref": "#/definitions/moncler.SizeGuide" - } - ], - "description": "SizeGuide is this product's size chart (per-size body measurements\nand/or a cross-region size conversion table), when the upstream\nprovides one." - }, - "stock_level": { - "type": "number" - }, - "variants": { - "items": { - "$ref": "#/definitions/moncler.ProductVariant" - }, - "type": "array" - }, - "variation_attributes": { - "items": { - "$ref": "#/definitions/moncler.ProductVariationAttribute" - }, - "type": "array" - } - }, - "type": "object" - }, - "moncler.ProductImage": { - "properties": { - "alt": { - "type": "string" + "upstream_type": { + "description": "UpstreamType is Klook's raw suggestion type code (1001 destination,\n1004 keyword, 1008 vertical service, 100 activity).", + "example": 1001, + "type": "integer" }, "url": { + "description": "URL is the suggestion landing link, normalized to an absolute\nwww.klook.com URL. Vertical-service entries may carry Klook's own\ntemplate placeholders such as {dest_city_id}; they are served as-is.", "type": "string" } }, "type": "object" }, - "moncler.ProductImageGroup": { + "klook.Vertical": { "properties": { - "color": { - "type": "string" - }, - "images": { + "children": { + "description": "Children are nested entries (for example Attractions & Shows, Tours &\nSightseeing under Things to do).", "items": { - "$ref": "#/definitions/moncler.ProductImage" + "$ref": "#/definitions/klook.Vertical" }, "type": "array" }, - "view_type": { + "icon_url": { + "description": "IconURL is Klook's icon key or absolute URL when it supplies one.", + "example": "nav-things-to-do", "type": "string" - } - }, - "type": "object" - }, - "moncler.ProductVariant": { - "properties": { - "orderable": { - "type": "boolean" }, - "price": { - "type": "number" + "name": { + "description": "Name is the display label, e.g. \"Things to do\".", + "example": "Things to do", + "type": "string" }, - "product_id": { + "type": { + "description": "Type is Klook's own vertical/template key, e.g. \"things_to_do\".", + "example": "things_to_do", "type": "string" }, - "variation_values": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "url": { + "description": "URL is the absolute listing/search link for this vertical.", + "example": "https://www.klook.com/en-US/search/", + "type": "string" } }, "type": "object" }, - "moncler.ProductVariationAttribute": { + "klook.VerticalsResponse": { "properties": { - "id": { - "type": "string" - }, - "label": { - "type": "string" + "count": { + "example": 5, + "type": "integer" }, - "values": { + "verticals": { "items": { - "$ref": "#/definitions/moncler.ProductVariationValue" + "$ref": "#/definitions/klook.Vertical" }, "type": "array" } }, "type": "object" }, - "moncler.ProductVariationValue": { + "kohls.CategoryFacet": { "properties": { "label": { + "example": "Department", "type": "string" }, - "orderable": { - "type": "boolean" - }, - "value": { + "name": { + "example": "Department", "type": "string" + }, + "options": { + "items": { + "$ref": "#/definitions/kohls.CategoryFacetOption" + }, + "type": "array" } }, "type": "object" }, - "moncler.RelatedProduct": { + "kohls.CategoryFacetOption": { "properties": { - "currency": { - "type": "string" + "active": { + "type": "boolean" }, - "image_url": { + "category": { + "example": "Room:Dorm+Department:Bedding", "type": "string" }, "name": { + "example": "Bedding", "type": "string" }, - "price": { - "type": "number" - }, - "product_id": { - "type": "string" + "product_count": { + "example": 479, + "type": "integer" } }, "type": "object" }, - "moncler.SearchFacet": { + "kohls.CategoryPriceRange": { "properties": { - "id": { - "type": "string" - }, - "label": { - "type": "string" + "max_price": { + "example": 9.99, + "type": "number" }, - "values": { - "items": { - "$ref": "#/definitions/moncler.SearchFacetValue" - }, - "type": "array" + "min_price": { + "example": 2.99, + "type": "number" } }, "type": "object" }, - "moncler.SearchFacetValue": { + "kohls.CategoryProduct": { "properties": { - "count": { - "type": "integer" + "available_for_pickup": { + "example": false, + "type": "boolean" }, - "label": { - "type": "string" + "available_for_ship": { + "example": true, + "type": "boolean" }, - "value": { - "type": "string" - } - }, - "type": "object" - }, - "moncler.SearchHit": { - "properties": { - "currency": { - "type": "string" + "colors": { + "items": { + "type": "string" + }, + "type": "array" }, - "image_alt": { + "currency_code": { + "example": "USD", "type": "string" }, "image_url": { "type": "string" }, - "name": { - "type": "string" - }, - "orderable": { + "on_sale": { + "example": true, "type": "boolean" }, - "price": { + "rating": { + "example": 3.9, "type": "number" }, - "product_id": { + "regular_price": { + "$ref": "#/definitions/kohls.CategoryPriceRange" + }, + "review_count": { + "example": 27103, + "type": "integer" + }, + "sale_price": { + "$ref": "#/definitions/kohls.CategoryPriceRange" + }, + "title": { + "example": "The Big One® Solid Bath Towel, Bath Sheet, Hand Towel or Washcloth", "type": "string" }, - "stock_level": { - "type": "number" + "url": { + "type": "string" }, - "variant_ids": { - "items": { - "type": "string" - }, - "type": "array" + "web_id": { + "example": "4569328", + "type": "string" } }, "type": "object" }, - "moncler.SearchResponse": { + "kohls.CategoryResponse": { "properties": { + "category": { + "example": "Room:Dorm", + "type": "string" + }, + "count": { + "example": 120, + "type": "integer" + }, "facets": { "items": { - "$ref": "#/definitions/moncler.SearchFacet" + "$ref": "#/definitions/kohls.CategoryFacet" }, "type": "array" }, + "fetched_at": { + "type": "string" + }, "limit": { + "example": 120, "type": "integer" }, - "offset": { + "product_count": { + "example": 1317, "type": "integer" }, - "query": { - "type": "string" - }, - "results": { + "products": { "items": { - "$ref": "#/definitions/moncler.SearchHit" + "$ref": "#/definitions/kohls.CategoryProduct" }, "type": "array" }, - "sort_options": { - "items": { - "$ref": "#/definitions/moncler.SortOption" - }, - "type": "array" + "source_url": { + "type": "string" }, - "total": { + "title": { + "example": "Essential Dorm Items for College-Bound Students | Kohl's", + "type": "string" + }, + "total_pages": { + "example": 11, "type": "integer" } }, "type": "object" }, - "moncler.SizeGuide": { + "kohls.ProductReviewsResponse": { "properties": { - "country_sizes": { + "fetched_at": { + "type": "string" + }, + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "reviews": { "items": { - "$ref": "#/definitions/moncler.SizeGuideCountrySizes" + "$ref": "#/definitions/kohls.Review" }, "type": "array" }, - "description": { + "source_url": { "type": "string" }, - "rows": { - "items": { - "$ref": "#/definitions/moncler.SizeGuideRow" - }, - "type": "array" + "total_count": { + "type": "integer" + }, + "web_id": { + "type": "string" } }, "type": "object" }, - "moncler.SizeGuideCountrySizes": { + "kohls.Review": { "properties": { - "country": { + "author": { "type": "string" }, - "sizes": { + "id": { + "type": "string" + }, + "location": { + "type": "string" + }, + "photo_urls": { "items": { "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "moncler.SizeGuideMeasurement": { - "properties": { - "cm": { - "type": "string" }, - "inches": { - "type": "string" + "rating": { + "type": "integer" }, - "label": { - "type": "string" - } - }, - "type": "object" - }, - "moncler.SizeGuideRow": { - "properties": { - "measurements": { + "recommended": { + "type": "boolean" + }, + "secondary_ratings": { "items": { - "$ref": "#/definitions/moncler.SizeGuideMeasurement" + "$ref": "#/definitions/kohls.ReviewSecondaryRating" }, "type": "array" }, - "size": { + "submitted_at": { + "type": "string" + }, + "text": { + "type": "string" + }, + "title": { "type": "string" } }, "type": "object" }, - "moncler.SortOption": { + "kohls.ReviewSecondaryRating": { "properties": { - "id": { - "type": "string" + "max_value": { + "example": 5, + "type": "integer" }, - "label": { + "name": { + "example": "Quality", "type": "string" + }, + "value": { + "example": 4, + "type": "integer" } }, "type": "object" }, - "moncler.Store": { + "kohls.Store": { "properties": { "address": { + "example": "17150 SOUTHCENTER PKWY", "type": "string" }, - "city": { - "type": "string" + "badges": { + "example": [ + "Sephora", + "Baby Gifting Shop" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "country_code": { + "city": { + "example": "TUKWILA", "type": "string" }, - "country_name": { + "country": { + "example": "US", "type": "string" }, - "email": { - "type": "string" + "distance_miles": { + "example": 11.3, + "type": "number" }, "hours": { "items": { - "$ref": "#/definitions/moncler.StoreHours" + "$ref": "#/definitions/kohls.StoreHours" }, "type": "array" }, - "hours_schedule": { - "items": { - "$ref": "#/definitions/moncler.StoreDaySchedule" - }, - "type": "array" + "id": { + "example": "1152", + "type": "string" }, "latitude": { + "example": 47.450079, "type": "number" }, "longitude": { + "example": -122.2581113, "type": "number" }, "name": { + "example": "Kohl's Tukwila", "type": "string" }, "phone": { + "example": "(206) 394-0078", "type": "string" }, "postal_code": { + "example": "98188", "type": "string" }, - "region": { - "type": "string" - }, - "state_code": { - "type": "string" + "services": { + "example": [ + "In-Store Pickup", + "Wifi Enabled" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "store_id": { + "state": { + "example": "WA", "type": "string" }, - "store_type": { + "url": { "type": "string" } }, "type": "object" }, - "moncler.StoreDaySchedule": { + "kohls.StoreHours": { "properties": { - "day": { + "close": { + "example": "21:00", "type": "string" }, - "is_closed": { - "type": "boolean" - }, - "slots": { - "items": { - "$ref": "#/definitions/moncler.StoreHoursSlot" - }, - "type": "array" - } - }, - "type": "object" - }, - "moncler.StoreHours": { - "properties": { "day": { + "example": "Monday", "type": "string" }, - "text": { + "open": { + "example": "09:00", "type": "string" } }, "type": "object" }, - "moncler.StoreHoursSlot": { + "kohls.StoresResponse": { "properties": { - "end": { - "type": "string" + "count": { + "type": "integer" }, - "start": { + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "moncler.StoresResponse": { - "properties": { - "stores": { - "items": { - "$ref": "#/definitions/moncler.Store" - }, - "type": "array" - } - }, - "type": "object" - }, - "moncler.SuggestResponse": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/moncler.SuggestedCategory" - }, - "type": "array" }, - "phrases": { - "items": { - "type": "string" - }, - "type": "array" + "search": { + "type": "string" }, - "query": { + "source_url": { "type": "string" }, - "terms": { + "stores": { "items": { - "$ref": "#/definitions/moncler.SuggestedTerm" + "$ref": "#/definitions/kohls.Store" }, "type": "array" } }, "type": "object" }, - "moncler.SuggestedCategory": { + "kohls.SuggestResponse": { "properties": { - "category_id": { - "type": "string" - }, - "name": { - "type": "string" + "count": { + "type": "integer" }, - "parent_category_name": { + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "moncler.SuggestedTerm": { - "properties": { - "corrected": { - "type": "boolean" }, - "term": { + "query": { "type": "string" - } - }, - "type": "object" - }, - "moncler.categoriesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/moncler.CategoriesResponse" - }, - "msg": { - "example": "OK", + "source_url": { "type": "string" - } - }, - "type": "object" - }, - "moncler.categoryResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/moncler.CategoryResponse" }, - "msg": { - "example": "OK", - "type": "string" + "suggestions": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "moncler.productResponseDoc": { + "kohls.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/moncler.Product" + "$ref": "#/definitions/kohls.CategoryResponse" }, "msg": { "example": "OK", @@ -141531,14 +147326,14 @@ }, "type": "object" }, - "moncler.searchResponseDoc": { + "kohls.productReviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/moncler.SearchResponse" + "$ref": "#/definitions/kohls.ProductReviewsResponse" }, "msg": { "example": "OK", @@ -141547,14 +147342,14 @@ }, "type": "object" }, - "moncler.storesResponseDoc": { + "kohls.storesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/moncler.StoresResponse" + "$ref": "#/definitions/kohls.StoresResponse" }, "msg": { "example": "OK", @@ -141563,14 +147358,14 @@ }, "type": "object" }, - "moncler.suggestResponseDoc": { + "kohls.suggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/moncler.SuggestResponse" + "$ref": "#/definitions/kohls.SuggestResponse" }, "msg": { "example": "OK", @@ -141579,11 +147374,11 @@ }, "type": "object" }, - "moneycontrol.AuthorResponse": { + "kotaku.AuthorResponse": { "properties": { "articles": { "items": { - "$ref": "#/definitions/moneycontrol.HeadlineItem" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, @@ -141593,7 +147388,7 @@ }, "type": "array" }, - "job_title": { + "image_url": { "type": "string" }, "name": { @@ -141601,7 +147396,7 @@ }, "social_links": { "items": { - "$ref": "#/definitions/moneycontrol.AuthorSocialLink" + "$ref": "#/definitions/kotaku.AuthorSocialLink" }, "type": "array" }, @@ -141611,7 +147406,7 @@ }, "type": "object" }, - "moneycontrol.AuthorSocialLink": { + "kotaku.AuthorSocialLink": { "properties": { "type": { "type": "string" @@ -141622,197 +147417,294 @@ }, "type": "object" }, - "moneycontrol.HeadlineItem": { + "kroger.CategoriesResponse": { "properties": { - "author": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "published_at": { - "type": "string" - }, - "summary": { - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/kroger.CategoryTaxon" + }, + "type": "array" }, - "title": { - "type": "string" + "count": { + "type": "integer" }, - "type": { - "type": "string" + "departments": { + "description": "Departments lists the top-level departments that contributed at least\none category below, in Kroger's own menu order.", + "items": { + "type": "string" + }, + "type": "array" }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "motleyfool.AuthorResponse": { + "kroger.CategoryResponse": { "properties": { - "articles": { + "category_id": { + "type": "string" + }, + "facets": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/kroger.SearchFacetGroup" }, "type": "array" }, - "biography": { + "has_more": { + "description": "HasMore, Source and Facets carry the same meaning as on\nSearchResponse -- see that type and Search's doc comment.", + "type": "boolean" + }, + "page": { + "type": "integer" + }, + "products": { "items": { - "type": "string" + "$ref": "#/definitions/kroger.SearchResultProduct" }, "type": "array" }, - "image_url": { + "slug": { "type": "string" }, - "name": { + "source": { "type": "string" }, - "url": { - "type": "string" + "total_count": { + "type": "integer" } }, "type": "object" }, - "nationafrica.AuthorArticle": { + "kroger.CategoryTaxon": { "properties": { - "premium": { - "type": "boolean" + "breadcrumb": { + "description": "Breadcrumb is the full department > aisle > category path, deduplicated\nwhere Kroger's own menu repeats a level's name at the next level down.", + "items": { + "type": "string" + }, + "type": "array" }, - "summary": { + "category_id": { "type": "string" }, - "title": { + "department": { + "description": "Department is the top-level department this category rolls up under\n(Breadcrumb[0]), included as a convenience field for grouping/filtering\nwithout parsing Breadcrumb.", + "type": "string" + }, + "name": { + "type": "string" + }, + "slug": { "type": "string" }, "url": { + "description": "URL is the canonical kroger.com category-browse page URL.", "type": "string" } }, "type": "object" }, - "nationafrica.AuthorResponse": { + "kroger.Coupon": { "properties": { - "articles": { + "brand": { + "type": "string" + }, + "categories": { "items": { - "$ref": "#/definitions/nationafrica.AuthorArticle" + "type": "string" }, "type": "array" }, - "bio": { + "display_description": { "type": "string" }, - "image_url": { + "end_date": { "type": "string" }, - "name": { + "expiration_date": { "type": "string" }, - "slug": { + "id": { "type": "string" }, - "url": { + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "national.AuthorResponse": { - "properties": { - "articles": { + }, + "kroger_coupon_number": { + "type": "string" + }, + "modalities": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "type": "string" }, "type": "array" }, - "image_url": { + "redemptions_allowed": { + "type": "integer" + }, + "requirement_description": { "type": "string" }, - "name": { + "requirement_quantity": { + "type": "integer" + }, + "savings": { + "type": "number" + }, + "savings_tags": { + "items": { + "$ref": "#/definitions/kroger.CouponSavingsTag" + }, + "type": "array" + }, + "short_description": { "type": "string" }, - "slug": { + "start_date": { "type": "string" }, - "url": { + "status": { + "type": "string" + }, + "title": { + "type": "string" + }, + "total_downloads": { + "type": "integer" + }, + "type": { "type": "string" + }, + "value": { + "type": "number" } }, "type": "object" }, - "nationalpost.AuthorArticle": { + "kroger.CouponSavingsTag": { "properties": { - "category": { - "type": "string" - }, - "summary": { + "description": { "type": "string" }, - "title": { + "display_name": { "type": "string" }, - "url": { + "name": { "type": "string" } }, "type": "object" }, - "nationalpost.AuthorResponse": { + "kroger.CouponsResponse": { "properties": { - "article_count": { + "brand": { + "type": "string" + }, + "count": { "type": "integer" }, - "articles": { + "coupons": { "items": { - "$ref": "#/definitions/nationalpost.AuthorArticle" + "$ref": "#/definitions/kroger.Coupon" }, "type": "array" }, - "bio": { + "location_id": { + "type": "string" + }, + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "upc": { + "type": "string" + } + }, + "type": "object" + }, + "kroger.NutritionFact": { + "properties": { + "daily_value": { "type": "string" }, "name": { "type": "string" }, - "slug": { + "unit": { "type": "string" }, - "url": { + "value": { "type": "string" } }, "type": "object" }, - "nbc.ArticleResponse": { + "kroger.ProductCategory": { "properties": { - "authors": { + "commodity": { + "type": "string" + }, + "department": { + "type": "string" + }, + "sub_commodity": { + "type": "string" + } + }, + "type": "object" + }, + "kroger.ProductDetail": { + "properties": { + "alcohol": { + "type": "boolean" + }, + "brand": { + "type": "string" + }, + "categories": { "items": { "type": "string" }, "type": "array" }, - "description": { + "category": { + "$ref": "#/definitions/kroger.ProductCategory" + }, + "country_of_origin": { "type": "string" }, "image_url": { "type": "string" }, - "paragraphs": { + "images": { "items": { - "type": "string" + "$ref": "#/definitions/kroger.ProductImage" }, "type": "array" }, - "published_at": { - "type": "string" + "inventory": { + "$ref": "#/definitions/kroger.ProductInventory" }, - "section": { + "name": { "type": "string" }, - "title": { + "nutrition": { + "$ref": "#/definitions/kroger.ProductNutrition" + }, + "price": { + "$ref": "#/definitions/kroger.ProductPrice" + }, + "rating": { + "$ref": "#/definitions/kroger.ProductRating" + }, + "size": { "type": "string" }, - "updated_at": { + "upc": { "type": "string" }, "url": { @@ -141821,284 +147713,277 @@ }, "type": "object" }, - "nbc.AuthorArticle": { + "kroger.ProductImage": { "properties": { - "image_url": { + "perspective": { "type": "string" }, - "published_at": { - "description": "PublishedAt is NBC News' own relative time string for this feed (e.g.\n\"4h ago\", \"2d ago\") -- the author feed's markup carries no\nmachine-readable timestamp to convert to an absolute date.", + "size": { "type": "string" }, - "section": { - "description": "Section is the article's topic label as NBC News' own byline shows it\n(e.g. \"Immigration\"), distinct from the \"news\"/\"world\"/etc. site\nbrand label shown alongside it.", + "url": { "type": "string" + } + }, + "type": "object" + }, + "kroger.ProductInventory": { + "properties": { + "available": { + "type": "integer" }, - "title": { + "location_id": { "type": "string" }, - "url": { + "stock_level": { "type": "string" } }, "type": "object" }, - "nbc.AuthorResponse": { + "kroger.ProductNutrition": { "properties": { - "articles": { + "allergens": { + "type": "string" + }, + "facts": { "items": { - "$ref": "#/definitions/nbc.AuthorArticle" + "$ref": "#/definitions/kroger.NutritionFact" }, "type": "array" }, - "bio": { - "type": "string" + "gluten_free": { + "type": "boolean" }, - "image_url": { + "ingredients": { "type": "string" }, - "job_title": { - "type": "string" + "kosher": { + "type": "boolean" }, - "name": { + "non_gmo": { + "type": "boolean" + }, + "organic": { + "type": "boolean" + }, + "product_warning": { "type": "string" }, - "social_links": { - "items": { - "$ref": "#/definitions/nbc.AuthorSocialLink" - }, - "type": "array" + "serving_size": { + "type": "string" }, - "url": { + "servings_per_container": { "type": "string" } }, "type": "object" }, - "nbc.AuthorSocialLink": { + "kroger.ProductOffer": { "properties": { - "platform": { + "availability": { "type": "string" }, - "url": { + "currency": { "type": "string" + }, + "original_price": { + "type": "number" + }, + "price": { + "type": "number" } }, "type": "object" }, - "nbc.HeadlineItem": { + "kroger.ProductPrice": { "properties": { - "author": { + "amount": { + "type": "number" + }, + "currency": { "type": "string" }, - "image_url": { + "display": { "type": "string" }, - "published_at": { + "location_id": { "type": "string" }, - "summary": { + "seller_id": { "type": "string" }, - "title": { + "seller_name": { "type": "string" }, - "url": { + "unit_price_text": { "type": "string" } }, "type": "object" }, - "nbc.HeadlinesResponse": { + "kroger.ProductRating": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/nbc.HeadlineItem" - }, - "type": "array" + "average": { + "type": "number" }, - "section": { - "type": "string" + "count": { + "type": "integer" + }, + "five_stars": { + "type": "integer" + }, + "four_stars": { + "type": "integer" + }, + "one_star": { + "type": "integer" + }, + "three_stars": { + "type": "integer" + }, + "two_stars": { + "type": "integer" } }, "type": "object" }, - "nbc.NewsResponse": { + "kroger.ProductResponse": { "properties": { - "items": { + "brand": { + "type": "string" + }, + "categories": { "items": { - "$ref": "#/definitions/nbc.HeadlineItem" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "nbc.Section": { - "properties": { - "name": { - "type": "string" }, - "slug": { + "description": { "type": "string" }, - "url": { + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "nbc.SectionsResponse": { - "properties": { - "sections": { - "items": { - "$ref": "#/definitions/nbc.Section" - }, - "type": "array" - } - }, - "type": "object" - }, - "nbc.articleResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "offer": { + "$ref": "#/definitions/kroger.ProductOffer" + }, + "rating_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/nbc.ArticleResponse" + "rating_value": { + "type": "number" }, - "msg": { - "example": "OK", + "title": { "type": "string" - } - }, - "type": "object" - }, - "nbc.authorResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/nbc.AuthorResponse" + "upc": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "nbc.headlinesResponseDoc": { + "kroger.ProductsResponse": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/nbc.HeadlinesResponse" - }, - "msg": { - "example": "OK", + "location_id": { "type": "string" + }, + "products": { + "items": { + "$ref": "#/definitions/kroger.ProductDetail" + }, + "type": "array" } }, "type": "object" }, - "nbc.newsResponseDoc": { + "kroger.RelatedTag": { "properties": { - "code": { - "example": 200, + "position": { "type": "integer" }, - "data": { - "$ref": "#/definitions/nbc.NewsResponse" + "query": { + "type": "string" }, - "msg": { - "example": "OK", + "source": { + "type": "string" + }, + "tag": { "type": "string" } }, "type": "object" }, - "nbc.sectionsResponseDoc": { + "kroger.RelatedTagsResponse": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/nbc.SectionsResponse" + "location_id": { + "type": "string" }, - "msg": { - "example": "OK", + "query": { "type": "string" + }, + "related_tags": { + "items": { + "$ref": "#/definitions/kroger.RelatedTag" + }, + "type": "array" } }, "type": "object" }, - "ndtv.ArticleResponse": { + "kroger.Review": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" + "featured": { + "type": "boolean" }, - "description": { - "type": "string" + "helpful_vote_count": { + "type": "integer" }, - "image_url": { + "id": { "type": "string" }, - "paragraphs": { + "not_helpful_vote_count": { + "type": "integer" + }, + "photos": { "items": { - "type": "string" + "$ref": "#/definitions/kroger.ReviewPhoto" }, "type": "array" }, - "paywalled": { - "description": "Paywalled is true when the publisher serves only a teaser of this\narticle to anonymous readers, so Paragraphs is a partial body rather than\nthe full text. It is omitted when the full public body was returned.", + "rating": { + "type": "integer" + }, + "ratings_only": { "type": "boolean" }, - "premium": { + "recommended": { "type": "boolean" }, - "published_at": { + "submitted_at": { "type": "string" }, - "section": { + "text": { "type": "string" }, "title": { "type": "string" - }, - "updated_at": { - "type": "string" - }, - "url": { - "type": "string" } }, "type": "object" }, - "ndtv.AuthorArticle": { + "kroger.ReviewPhoto": { "properties": { - "image_url": { - "type": "string" - }, - "published_on": { - "type": "string" - }, - "section": { - "type": "string" - }, - "summary": { - "type": "string" - }, - "title": { + "size": { "type": "string" }, "url": { @@ -142107,132 +147992,135 @@ }, "type": "object" }, - "ndtv.AuthorResponse": { + "kroger.ReviewsResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/ndtv.AuthorArticle" - }, - "type": "array" - }, - "bio": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "job_title": { - "type": "string" - }, - "name": { - "type": "string" + "average_rating": { + "type": "number" }, "page": { "type": "integer" }, - "same_as": { + "page_size": { + "type": "integer" + }, + "rating": { + "$ref": "#/definitions/kroger.ProductRating" + }, + "reviews": { "items": { - "type": "string" + "$ref": "#/definitions/kroger.Review" }, "type": "array" }, - "url": { + "total_count": { + "type": "integer" + }, + "upc": { "type": "string" } }, "type": "object" }, - "ndtv.HeadlineItem": { + "kroger.SearchFacetGroup": { "properties": { - "author": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "published_at": { - "type": "string" - }, - "summary": { + "group": { "type": "string" }, - "title": { - "type": "string" + "values": { + "items": { + "$ref": "#/definitions/kroger.SearchFacetValue" + }, + "type": "array" + } + }, + "type": "object" + }, + "kroger.SearchFacetValue": { + "properties": { + "count": { + "type": "integer" }, - "type": { + "name": { "type": "string" }, - "url": { + "slug": { "type": "string" } }, "type": "object" }, - "ndtv.LatestVideosResponse": { + "kroger.SearchResponse": { "properties": { - "items": { + "facets": { "items": { - "$ref": "#/definitions/ndtv.VideoCard" + "$ref": "#/definitions/kroger.SearchFacetGroup" }, "type": "array" }, + "has_more": { + "description": "HasMore reports whether Kroger says more results exist past this page.\nOnly meaningful on the JSON-API path; false on the HTML fallback.", + "type": "boolean" + }, "page": { "type": "integer" - } - }, - "type": "object" - }, - "ndtv.LiveBlogCard": { - "properties": { - "image_url": { - "type": "string" }, - "published_at": { - "type": "string" + "products": { + "items": { + "$ref": "#/definitions/kroger.SearchResultProduct" + }, + "type": "array" }, - "summary": { + "query": { "type": "string" }, - "title": { + "source": { + "description": "Source is which upstream path served this response: \"json_api\" (the\nprimary path) or \"html\" (the fallback). See Search's doc comment.", "type": "string" }, - "url": { - "type": "string" + "total_count": { + "type": "integer" } }, "type": "object" }, - "ndtv.LiveBlogResponse": { + "kroger.SearchResultProduct": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" + "brand": { + "description": "Brand and StockLevel are populated by the JSON-API path only (the\nHTML result cards carry neither); both are omitted when the HTML\nfallback served the response. See Search's doc comment.", + "type": "string" }, - "description": { + "currency": { "type": "string" }, "image_url": { "type": "string" }, - "published_at": { + "low_stock": { + "type": "boolean" + }, + "original_price": { + "type": "number" + }, + "price": { + "type": "number" + }, + "size": { "type": "string" }, - "section": { + "snap_ebt_eligible": { + "type": "boolean" + }, + "stock_level": { "type": "string" }, "title": { "type": "string" }, - "updated_at": { + "unit_price": { "type": "string" }, - "updates": { - "items": { - "$ref": "#/definitions/ndtv.LiveBlogUpdate" - }, - "type": "array" + "upc": { + "type": "string" }, "url": { "type": "string" @@ -142240,240 +148128,330 @@ }, "type": "object" }, - "ndtv.LiveBlogUpdate": { + "kroger.StoreAddress": { "properties": { - "authors": { + "address_lines": { "items": { "type": "string" }, "type": "array" }, - "body": { + "city": { "type": "string" }, - "image_url": { + "country": { "type": "string" }, - "published_at": { + "postal_code": { "type": "string" }, - "title": { + "state": { "type": "string" - }, - "updated_at": { + } + }, + "type": "object" + }, + "kroger.StoreHours": { + "properties": { + "days": { "type": "string" }, - "url": { + "hours": { "type": "string" + }, + "is_today": { + "type": "boolean" } }, "type": "object" }, - "ndtv.LiveBlogsResponse": { + "kroger.StoreLocation": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/ndtv.LiveBlogCard" - }, - "type": "array" + "latitude": { + "type": "number" }, - "page": { - "type": "integer" + "longitude": { + "type": "number" } }, "type": "object" }, - "ndtv.SearchResponse": { + "kroger.StoreResponse": { "properties": { - "has_more": { + "address": { + "$ref": "#/definitions/kroger.StoreAddress" + }, + "brand": { + "type": "string" + }, + "break_hours": { + "items": { + "$ref": "#/definitions/kroger.StoreHours" + }, + "type": "array" + }, + "has_drive_thru": { "type": "boolean" }, - "items": { + "hours": { "items": { - "$ref": "#/definitions/ndtv.HeadlineItem" + "$ref": "#/definitions/kroger.StoreHours" }, "type": "array" }, - "page": { - "type": "integer" + "location": { + "$ref": "#/definitions/kroger.StoreLocation" }, - "query": { + "name": { "type": "string" }, - "total_results": { - "type": "integer" + "open_text": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "store_id": { + "type": "string" } }, "type": "object" }, - "ndtv.VideoCard": { + "kroger.SuggestResponse": { "properties": { - "duration": { + "location_id": { "type": "string" }, - "image_url": { + "query": { "type": "string" }, - "published_at": { + "spelling_correction": { + "description": "SpellingCorrection is Kroger's own suggested respelling of Query, set\nonly when Query returned zero suggestions and Kroger judged it a\nlikely typo (confirmed live: \"Marble cake\" -> \"maple cake\" with an\nempty Suggestions list).", "type": "string" }, - "title": { + "suggestions": { + "items": { + "$ref": "#/definitions/kroger.Suggestion" + }, + "type": "array" + } + }, + "type": "object" + }, + "kroger.Suggestion": { + "properties": { + "type": { "type": "string" }, - "url": { + "value": { "type": "string" } }, "type": "object" }, - "ndtv.VideoCategoriesResponse": { + "kroger.categoriesResponseDoc": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/ndtv.VideoCategory" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/kroger.CategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "ndtv.VideoCategory": { + "kroger.categoryResponseDoc": { "properties": { - "name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "slug": { - "type": "string" + "data": { + "$ref": "#/definitions/kroger.CategoryResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "ndtv.VideoResponse": { + "kroger.couponsResponseDoc": { "properties": { - "description": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "duration": { - "type": "string" + "data": { + "$ref": "#/definitions/kroger.CouponsResponse" }, - "image_url": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "kroger.productResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "published_at": { - "type": "string" + "data": { + "$ref": "#/definitions/kroger.ProductResponse" }, - "title": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "kroger.productsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "url": { + "data": { + "$ref": "#/definitions/kroger.ProductsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "ndtv.VideosResponse": { + "kroger.relatedTagsResponseDoc": { "properties": { - "category": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "items": { - "items": { - "$ref": "#/definitions/ndtv.VideoCard" - }, - "type": "array" + "data": { + "$ref": "#/definitions/kroger.RelatedTagsResponse" }, - "page": { - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "news18.AuthorResponse": { + "kroger.reviewsResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/kroger.ReviewsResponse" }, - "image_url": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "kroger.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "name": { + "data": { + "$ref": "#/definitions/kroger.SearchResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "kroger.storeResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "social_links": { - "items": { - "$ref": "#/definitions/news18.AuthorSocialLink" - }, - "type": "array" + "data": { + "$ref": "#/definitions/kroger.StoreResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "news18.AuthorSocialLink": { + "kroger.suggestResponseDoc": { "properties": { - "type": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "url": { + "data": { + "$ref": "#/definitions/kroger.SuggestResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "newscomau.AuthorResponse": { + "latimes.ArticleResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newscomau.HeadlineItem" - }, - "type": "array" - }, - "biography": { + "authors": { "items": { "type": "string" }, "type": "array" }, - "image_url": { + "description": { "type": "string" }, - "job_title": { + "headline": { "type": "string" }, - "name": { + "image_url": { "type": "string" }, - "social_urls": { + "is_accessible_for_free": { + "type": "boolean" + }, + "paragraphs": { "items": { "type": "string" }, "type": "array" }, + "published_at": { + "type": "string" + }, + "section": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, "url": { "type": "string" } }, "type": "object" }, - "newscomau.HeadlineItem": { + "latimes.AuthorArticle": { "properties": { - "author": { - "type": "string" - }, "image_url": { "type": "string" }, @@ -142486,75 +148464,50 @@ "title": { "type": "string" }, - "type": { - "type": "string" - }, "url": { "type": "string" } }, "type": "object" }, - "newsmax.AuthorResponse": { + "latimes.AuthorResponse": { "properties": { "articles": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" + "$ref": "#/definitions/latimes.AuthorArticle" }, "type": "array" }, - "image_url": { + "bio": { "type": "string" }, - "name": { + "email": { "type": "string" }, - "url": { + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "newsplatform.ArticleResponse": { - "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" }, - "description": { + "job_title": { "type": "string" }, - "image_url": { + "name": { "type": "string" }, - "paragraphs": { + "social_accounts": { "items": { - "type": "string" + "$ref": "#/definitions/latimes.AuthorSocialAccount" }, "type": "array" }, - "paywalled": { - "description": "Paywalled is true when the publisher serves only a teaser of this\narticle to anonymous readers, so Paragraphs is a partial body rather than\nthe full text. It is omitted when the full public body was returned.", - "type": "boolean" - }, - "published_at": { - "type": "string" - }, - "section": { - "type": "string" - }, - "title": { + "url": { "type": "string" - }, - "updated_at": { + } + }, + "type": "object" + }, + "latimes.AuthorSocialAccount": { + "properties": { + "platform": { "type": "string" }, "url": { @@ -142563,11 +148516,14 @@ }, "type": "object" }, - "newsplatform.HeadlineItem": { + "latimes.HeadlineItem": { "properties": { "author": { "type": "string" }, + "image_caption": { + "type": "string" + }, "image_url": { "type": "string" }, @@ -142580,20 +148536,17 @@ "title": { "type": "string" }, - "type": { - "type": "string" - }, "url": { "type": "string" } }, "type": "object" }, - "newsplatform.HeadlinesResponse": { + "latimes.HeadlinesResponse": { "properties": { "items": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/latimes.HeadlineItem" }, "type": "array" }, @@ -142603,471 +148556,347 @@ }, "type": "object" }, - "newsplatform.NewsResponse": { - "properties": { - "items": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" - } - }, - "type": "object" - }, - "newsplatform.Section": { + "latimes.SectionInfo": { "properties": { - "name": { + "feed_url": { "type": "string" }, - "slug": { + "name": { "type": "string" }, - "url": { + "slug": { "type": "string" } }, "type": "object" }, - "newsplatform.SectionsResponse": { + "latimes.SectionsResponse": { "properties": { "sections": { "items": { - "$ref": "#/definitions/newsplatform.Section" + "$ref": "#/definitions/latimes.SectionInfo" }, "type": "array" } }, "type": "object" }, - "newsweek.AuthorArticle": { + "latimes.articleResponseDoc": { "properties": { - "section": { - "type": "string" - }, - "section_url": { - "type": "string" - }, - "summary": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/latimes.ArticleResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "newsweek.AuthorResponse": { + "latimes.authorResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsweek.AuthorArticle" - }, - "type": "array" - }, - "bio": { - "type": "string" - }, - "email": { - "type": "string" - }, - "has_next_page": { - "type": "boolean" - }, - "image_url": { - "type": "string" - }, - "job_title": { - "type": "string" - }, - "name": { - "type": "string" - }, - "page": { + "code": { + "example": 200, "type": "integer" }, - "slug": { - "type": "string" + "data": { + "$ref": "#/definitions/latimes.AuthorResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "newyorker.ArticleResponse": { + "latimes.headlinesResponseDoc": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "is_accessible_for_free": { - "type": "boolean" - }, - "is_truncated": { - "type": "boolean" - }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" - }, - "published_at": { - "type": "string" - }, - "section": { - "type": "string" - }, - "title": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "updated_at": { - "type": "string" + "data": { + "$ref": "#/definitions/latimes.HeadlinesResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "newyorker.AuthorLink": { + "latimes.sectionsResponseDoc": { "properties": { - "type": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "url": { + "data": { + "$ref": "#/definitions/latimes.SectionsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "newyorker.AuthorResponse": { + "lazada.CategoryDirectoryResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newyorker.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { + "fetched_at": { + "example": "2026-08-28T04:00:00Z", "type": "string" }, - "links": { + "groups": { "items": { - "$ref": "#/definitions/newyorker.AuthorLink" + "$ref": "#/definitions/lazada.CategoryGroup" }, "type": "array" }, - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "newyorker.HeadlineItem": { - "properties": { - "author": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "published_at": { - "type": "string" - }, - "summary": { - "type": "string" - }, - "title": { - "type": "string" - }, - "type": { + "region": { + "example": "ID", "type": "string" }, - "url": { + "source_url": { + "example": "https://pages.lazada.co.id/wow/i/id/LandingPage/lazmall?wh_weex=true", "type": "string" } }, "type": "object" }, - "nike.AvailabilityResponse": { + "lazada.CategoryGroup": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "group_key": { - "type": "string" - }, - "sizes": { + "categories": { "items": { - "$ref": "#/definitions/nike.SizeAvailability" + "$ref": "#/definitions/lazada.CategoryNode" }, "type": "array" }, - "source_url": { + "name": { + "example": "Elektronik", "type": "string" } }, "type": "object" }, - "nike.Breadcrumb": { + "lazada.CategoryLink": { "properties": { "name": { + "example": "Handphone", "type": "string" }, - "path": { + "url": { + "example": "https://www.lazada.co.id/beli-handphone", "type": "string" } }, "type": "object" }, - "nike.CategoriesResponse": { + "lazada.CategoryNode": { "properties": { - "categories": { + "children": { "items": { - "$ref": "#/definitions/nike.TopLevelCategory" + "$ref": "#/definitions/lazada.CategoryNode" }, "type": "array" }, - "fetched_at": { + "name": { + "example": "Laptop", "type": "string" }, - "source_url": { + "url": { + "example": "https://www.lazada.co.id/shop-beli-laptop/", "type": "string" } }, "type": "object" }, - "nike.CategoryGroup": { + "lazada.CategoryProductsResponse": { "properties": { - "name": { + "brand": { + "example": "lazada6910077_crown-127197821", "type": "string" }, - "path": { + "category": { + "example": "shop-karaoke-systems", "type": "string" }, - "slug": { + "fetched_at": { + "example": "2026-09-02T04:00:00Z", "type": "string" }, - "subcategories": { + "items": { "items": { - "$ref": "#/definitions/nike.CategorySubcategory" + "$ref": "#/definitions/lazada.ListingItem" }, "type": "array" - } - }, - "type": "object" - }, - "nike.CategorySubcategory": { - "properties": { - "name": { + }, + "page": { + "example": 1, + "type": "integer" + }, + "page_size": { + "example": 40, + "type": "integer" + }, + "region": { + "example": "PH", "type": "string" }, - "path": { + "sort": { + "example": "popularity", "type": "string" }, - "slug": { + "source_url": { + "example": "https://www.lazada.com.ph/shop-karaoke-systems/?ajax=true&page=1", "type": "string" + }, + "total_results": { + "example": 2400, + "type": "integer" } }, "type": "object" }, - "nike.ColorDetail": { + "lazada.HomeResponse": { "properties": { - "color_code": { - "type": "string" - }, - "color_description": { - "type": "string" - }, - "currency": { - "type": "string" - }, - "discount_percentage": { - "type": "integer" - }, - "grouping_label": { - "type": "string" - }, - "images": { + "categories": { "items": { - "type": "string" + "$ref": "#/definitions/lazada.CategoryLink" }, "type": "array" }, - "initial_price": { - "type": "number" - }, - "is_buyable": { - "type": "boolean" - }, - "price": { - "type": "number" - }, - "size_chart_url": { + "fetched_at": { + "example": "2026-08-28T04:00:00Z", "type": "string" }, - "sizes": { + "flash_sale_items": { "items": { - "$ref": "#/definitions/nike.ProductSize" + "$ref": "#/definitions/lazada.ProductSummary" }, "type": "array" }, - "style_code": { - "type": "string" + "official_stores": { + "description": "OfficialStores lists featured official-store shops from the same\nhomepage. This carousel was observed absent on one storefront\n(Philippines) during a live check; treat an empty list as \"not\ncurrently shown\", not as evidence of parser drift.", + "items": { + "$ref": "#/definitions/lazada.OfficialStore" + }, + "type": "array" }, - "style_color": { + "region": { + "example": "ID", "type": "string" }, - "url": { + "source_url": { + "example": "https://www.lazada.co.id/", "type": "string" } }, "type": "object" }, - "nike.ColorVariant": { + "lazada.ListingItem": { "properties": { - "color_description": { + "currency": { + "example": "PHP", "type": "string" }, - "color_label": { + "discount": { + "example": "77% Off", "type": "string" }, - "currency": { + "image": { + "example": "https://ph-live-01.slatic.net/p/example.png", "type": "string" }, - "discount_percentage": { + "item_id": { + "example": 15396167084, "type": "integer" }, - "image_url": { + "location": { + "example": "Benguet", "type": "string" }, - "initial_price": { + "price": { + "example": 159, "type": "number" }, - "price": { + "rating": { + "description": "Rating and Reviews are omitted entirely when the listing card has no\nrating yet (a brand-new or unrated listing) rather than defaulting to 0.", + "example": 5, "type": "number" }, - "slug": { - "type": "string" + "reviews": { + "example": 3, + "type": "integer" }, - "style_color": { + "title": { + "example": "Digilab Original K12 Bluetooth Portable Karaoke Speaker", "type": "string" }, "url": { + "example": "https://www.lazada.com.ph/products/pdp-i15396167084.html", "type": "string" } }, "type": "object" }, - "nike.FacetNav": { - "properties": { - "breadcrumbs": { - "items": { - "$ref": "#/definitions/nike.Breadcrumb" - }, - "type": "array" - }, - "categories": { - "items": { - "$ref": "#/definitions/nike.FacetOption" - }, - "type": "array" - }, - "filters": { - "items": { - "$ref": "#/definitions/nike.Filter" - }, - "type": "array" - } - }, - "type": "object" - }, - "nike.FacetOption": { + "lazada.OfficialStore": { "properties": { - "label": { + "brand_image": { + "example": "https://img.lazcdn.com/g/p/example.jpg", "type": "string" }, - "path": { + "name": { + "example": "Alfalink", "type": "string" }, - "result_count": { - "type": "integer" - }, - "selected": { - "type": "boolean" - } - }, - "type": "object" - }, - "nike.Filter": { - "properties": { - "name": { + "shop_image": { + "example": "https://img.lazcdn.com/g/shop/example.jpeg", "type": "string" }, - "options": { - "items": { - "$ref": "#/definitions/nike.FacetOption" - }, - "type": "array" + "url": { + "example": "https://www.lazada.co.id/shop/alfalink", + "type": "string" } }, "type": "object" }, - "nike.ProductDetailResponse": { + "lazada.ProductResponse": { "properties": { - "color_code": { + "brand": { + "example": "Pantene", "type": "string" }, - "color_description": { + "brand_url": { + "example": "https://www.lazada.co.id/pantene/", "type": "string" }, - "colors": { + "category": { + "example": [ + "Kecantikan" + ], "items": { - "$ref": "#/definitions/nike.ColorVariant" + "type": "string" }, "type": "array" }, "currency": { + "example": "IDR", "type": "string" }, "description": { "type": "string" }, - "discount_percentage": { - "type": "integer" - }, "fetched_at": { + "example": "2026-09-02T04:00:00Z", "type": "string" }, - "genders": { - "items": { - "type": "string" - }, - "type": "array" + "highlights": { + "type": "string" }, "images": { "items": { @@ -143075,508 +148904,734 @@ }, "type": "array" }, - "initial_price": { - "type": "number" - }, - "is_buyable": { - "type": "boolean" + "item_id": { + "example": 159992555, + "type": "integer" }, "price": { + "example": 190500, "type": "number" }, - "product_details": { - "items": { - "type": "string" - }, - "type": "array" - }, - "product_type": { + "region": { + "example": "ID", "type": "string" }, - "reason_to_buy": { - "type": "string" + "seller_id": { + "example": 100161156, + "type": "integer" }, - "sizes": { - "items": { - "$ref": "#/definitions/nike.ProductSize" - }, - "type": "array" + "sku_id": { + "example": 181803572, + "type": "integer" }, - "slug": { + "source_url": { + "example": "https://www.lazada.co.id/products/pdp-i159992555-s181803572.html", "type": "string" }, - "source_url": { + "title": { + "example": "PANTENE Shampoo Hair Fall Control 990ml", "type": "string" }, - "sport_tags": { + "url": { + "example": "https://www.lazada.co.id/products/pantene-shampoo-hair-fall-control-990ml-i159992555-s181803572.html", + "type": "string" + }, + "variants": { "items": { - "type": "string" + "$ref": "#/definitions/lazada.ProductVariant" }, "type": "array" - }, - "style_code": { + } + }, + "type": "object" + }, + "lazada.ProductSummary": { + "properties": { + "currency": { + "example": "IDR", "type": "string" }, - "style_color": { + "discount": { + "example": "-32%", "type": "string" }, - "subtitle": { + "image": { + "example": "https://img.lazcdn.com/g/p/example.jpg", "type": "string" }, + "item_id": { + "example": 159992555, + "type": "integer" + }, + "original_price": { + "example": 190500, + "type": "number" + }, + "price": { + "example": 129000, + "type": "number" + }, "title": { + "example": "PANTENE Shampoo Hair Fall Control 990ml", "type": "string" }, "url": { + "example": "https://www.lazada.co.id/products/pdp-i159992555-s181803572.html", "type": "string" } }, "type": "object" }, - "nike.ProductDetailsResponse": { + "lazada.ProductVariant": { "properties": { - "colors": { + "name": { + "example": "Volume", + "type": "string" + }, + "values": { + "example": [ + "990 ml" + ], "items": { - "$ref": "#/definitions/nike.ColorDetail" + "type": "string" }, "type": "array" - }, - "count": { - "type": "integer" - }, - "description": { - "type": "string" - }, + } + }, + "type": "object" + }, + "lazada.SearchResponse": { + "properties": { "fetched_at": { + "example": "2026-09-02T04:00:00Z", "type": "string" }, - "genders": { + "items": { "items": { - "type": "string" + "$ref": "#/definitions/lazada.ListingItem" }, "type": "array" }, - "group_key": { + "page": { + "example": 1, + "type": "integer" + }, + "page_size": { + "example": 40, + "type": "integer" + }, + "query": { + "example": "karaoke", "type": "string" }, - "product_type": { + "region": { + "example": "PH", "type": "string" }, - "reason_to_buy": { + "sort": { + "example": "popularity", "type": "string" }, "source_url": { + "example": "https://www.lazada.com.ph/catalog/?q=karaoke&ajax=true&page=1", "type": "string" }, - "subtitle": { - "type": "string" + "total_results": { + "example": 2400, + "type": "integer" + } + }, + "type": "object" + }, + "lazada.categoriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "title": { + "data": { + "$ref": "#/definitions/lazada.CategoryDirectoryResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "nike.ProductGroup": { + "lazada.categoryProductsResponseDoc": { "properties": { - "badge_label": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "colors": { - "items": { - "$ref": "#/definitions/nike.ColorVariant" - }, - "type": "array" + "data": { + "$ref": "#/definitions/lazada.CategoryProductsResponse" }, - "group_key": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "lazada.homeResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "product_type": { - "type": "string" + "data": { + "$ref": "#/definitions/lazada.HomeResponse" }, - "subtitle": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "lazada.productResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "title": { + "data": { + "$ref": "#/definitions/lazada.ProductResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "nike.ProductReview": { + "lazada.searchResponseDoc": { "properties": { - "author": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "body": { - "type": "string" + "data": { + "$ref": "#/definitions/lazada.SearchResponse" }, - "created_at": { + "msg": { + "example": "OK", "type": "string" - }, - "headline": { + } + }, + "type": "object" + }, + "leboncoin.ListingCard": { + "properties": { + "category": { "type": "string" }, - "helpful_votes": { - "type": "integer" - }, "id": { "type": "string" }, - "location": { + "image_url": { "type": "string" }, - "not_helpful_votes": { + "price_eur": { "type": "integer" }, - "rating": { - "type": "integer" + "title": { + "type": "string" }, - "recommended": { - "type": "boolean" + "url": { + "type": "string" } }, "type": "object" }, - "nike.ProductReviewsResponse": { + "leboncoin.ListingResponse": { "properties": { - "average_rating": { - "type": "number" + "availability": { + "type": "string" }, - "count": { - "type": "integer" + "category": { + "type": "string" }, - "fetched_at": { + "condition": { "type": "string" }, - "page": { - "type": "integer" + "currency": { + "type": "string" }, - "page_size": { + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "price_eur": { "type": "integer" }, - "rating_histogram": { - "description": "RatingHistogram is the count of ratings per star, ascending: index 0\nis 1-star, index 4 is 5-star.", - "items": { - "type": "integer" - }, - "type": "array" + "title": { + "type": "string" }, - "reviews": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "leboncoin.SearchResponse": { + "properties": { + "listings": { "items": { - "$ref": "#/definitions/nike.ProductReview" + "$ref": "#/definitions/leboncoin.ListingCard" }, "type": "array" }, - "slug": { + "location": { "type": "string" }, "source_url": { "type": "string" - }, - "style_color": { - "type": "string" - }, - "total_pages": { - "type": "integer" - }, - "total_reviews": { - "type": "integer" } }, "type": "object" }, - "nike.ProductSize": { + "leboncoin.listingResponseDoc": { "properties": { - "label": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "localized_label": { - "type": "string" + "data": { + "$ref": "#/definitions/leboncoin.ListingResponse" }, - "sku_id": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "leboncoin.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "status": { + "data": { + "$ref": "#/definitions/leboncoin.SearchResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "nike.RecommendationsResponse": { + "letterboxd.FilmRating": { "properties": { + "average": { + "description": "Average Letterboxd member rating, out of 5.", + "example": 4.52, + "type": "number" + }, "count": { + "description": "Number of member ratings behind the average.", + "example": 5553202, "type": "integer" }, - "fetched_at": { + "review_count": { + "description": "Number of written reviews. Omitted when Letterboxd shows none.", + "example": 740173, + "type": "integer" + } + }, + "type": "object" + }, + "letterboxd.FilmRef": { + "properties": { + "slug": { + "description": "Letterboxd film slug. Use it with the film endpoint for full detail.", "type": "string" }, - "recommendations": { - "items": { - "$ref": "#/definitions/nike.RecommendedProduct" - }, - "type": "array" - }, - "source_url": { + "title": { + "description": "Title of the film.", "type": "string" }, - "style_color": { + "uri": { + "description": "Link to the film's page on Letterboxd.", "type": "string" } }, "type": "object" }, - "nike.RecommendedProduct": { + "letterboxd.FilmResponse": { "properties": { - "currency": { - "type": "string" + "cast": { + "description": "Cast members of the film, up to 25 credits.", + "items": { + "$ref": "#/definitions/letterboxd.PersonCredit" + }, + "type": "array" }, - "image_url": { + "countries": { + "description": "Countries the film was made in.", + "items": { + "type": "string" + }, + "type": "array" + }, + "directors": { + "description": "Directors of the film.", + "items": { + "$ref": "#/definitions/letterboxd.PersonCredit" + }, + "type": "array" + }, + "genres": { + "description": "Genres of the film.", + "items": { + "type": "string" + }, + "type": "array" + }, + "languages": { + "description": "Languages used in the film, as Letterboxd lists them.", + "items": { + "type": "string" + }, + "type": "array" + }, + "poster_url": { + "description": "URL of the film's poster image.", "type": "string" }, - "initial_price": { - "type": "number" + "production_companies": { + "description": "Names of the production companies behind the film.", + "items": { + "type": "string" + }, + "type": "array" }, - "price": { - "type": "number" + "rating": { + "allOf": [ + { + "$ref": "#/definitions/letterboxd.FilmRating" + } + ], + "description": "Aggregate Letterboxd member rating. Omitted when the film has no ratings." }, - "price_type": { + "release_date": { + "description": "Release date of the film, in YYYY-MM-DD format.", + "example": "2019-05-21", "type": "string" }, - "rank": { + "runtime_minutes": { + "description": "Running time of the film in minutes.", + "example": 133, "type": "integer" }, - "style_color": { + "slug": { + "description": "Letterboxd film slug, for example `parasite-2019`. Use it with the film endpoints.", + "example": "parasite-2019", "type": "string" }, - "style_type": { + "source_url": { + "description": "URL the data was read from.", "type": "string" }, - "subtitle": { + "synopsis": { + "description": "Short plot synopsis of the film.", "type": "string" }, "title": { + "description": "Title of the film.", + "example": "Parasite", "type": "string" }, - "url": { + "uri": { + "description": "Link to the film's page on Letterboxd.", "type": "string" + }, + "year": { + "description": "Year the film was released.", + "example": 2019, + "type": "integer" } }, "type": "object" }, - "nike.SearchResponse": { + "letterboxd.MemberResponse": { "properties": { - "category": { + "display_name": { "type": "string" }, - "count": { + "films_this_year": { "type": "integer" }, - "facet_nav": { - "allOf": [ - { - "$ref": "#/definitions/nike.FacetNav" - } - ], - "description": "FacetNav is the navigation/filtering data Nike's own response\nalready carries alongside product results -- subcategory\nrefinement options, named filter groups (price/size/color/etc.),\nand (for category browsing) a breadcrumb trail. Nil when the\nupstream returned no navigation data. See FacetNav's doc comment." - }, - "fetched_at": { - "type": "string" - }, - "keyword": { - "type": "string" + "films_watched": { + "type": "integer" }, - "page": { + "followers": { "type": "integer" }, - "page_size": { + "following": { "type": "integer" }, - "products": { - "items": { - "$ref": "#/definitions/nike.ProductGroup" - }, - "type": "array" + "lists": { + "type": "integer" }, "source_url": { "type": "string" }, - "total_pages": { - "type": "integer" + "uri": { + "type": "string" }, - "total_products": { - "type": "integer" + "username": { + "type": "string" } }, "type": "object" }, - "nike.SizeAvailability": { + "letterboxd.PersonCredit": { "properties": { - "available": { - "type": "boolean" - }, - "grouping_label": { + "name": { + "description": "Name of the person.", "type": "string" }, - "gtin": { + "slug": { + "description": "Letterboxd slug of the person. Use it with the person endpoint.", "type": "string" + } + }, + "type": "object" + }, + "letterboxd.PersonResponse": { + "properties": { + "films": { + "items": { + "$ref": "#/definitions/letterboxd.FilmRef" + }, + "type": "array" }, - "label": { + "name": { "type": "string" }, - "localized_label": { + "role": { "type": "string" }, - "ship": { + "slug": { "type": "string" }, - "style_color": { + "source_url": { "type": "string" } }, "type": "object" }, - "nike.Store": { + "letterboxd.PopularResponse": { "properties": { - "address": { + "decade": { + "description": "Decade filter that was applied, for example `2010s`. Omitted when none was set.", "type": "string" }, - "business_concept": { + "films": { + "description": "Films in the chart, most popular first.", + "items": { + "$ref": "#/definitions/letterboxd.FilmRef" + }, + "type": "array" + }, + "genre": { + "description": "Genre filter that was applied. Omitted when none was set.", "type": "string" }, - "city": { + "period": { + "description": "Time window of the chart: `day`, `week`, `month` or `year`. Omitted for the all-time chart.", "type": "string" }, - "country": { + "source_url": { + "description": "URL the data was read from.", "type": "string" + } + }, + "type": "object" + }, + "letterboxd.RatingBucket": { + "properties": { + "count": { + "type": "integer" }, - "distance_miles": { + "percent": { + "type": "integer" + }, + "stars": { + "example": 4.5, "type": "number" + } + }, + "type": "object" + }, + "letterboxd.RatingHistogramResponse": { + "properties": { + "buckets": { + "items": { + "$ref": "#/definitions/letterboxd.RatingBucket" + }, + "type": "array" }, - "facility_type": { + "slug": { "type": "string" }, - "image_url": { + "source_url": { "type": "string" }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" + "total_ratings": { + "type": "integer" + } + }, + "type": "object" + }, + "letterboxd.Review": { + "properties": { + "comment_count": { + "type": "integer" }, - "name": { - "type": "string" + "contains_spoilers": { + "type": "boolean" }, - "phone": { + "date": { + "example": "2019-08-14", "type": "string" }, - "postal_code": { + "display_name": { "type": "string" }, - "region": { - "type": "string" + "like_count": { + "type": "integer" }, - "slug": { - "type": "string" + "liked": { + "type": "boolean" }, - "store_concept": { - "type": "string" + "rating": { + "example": 4.5, + "type": "number" }, - "store_number": { + "text": { "type": "string" }, - "url": { + "username": { "type": "string" } }, "type": "object" }, - "nike.StoreResponse": { + "letterboxd.ReviewsResponse": { "properties": { - "count": { - "type": "integer" + "reviews": { + "items": { + "$ref": "#/definitions/letterboxd.Review" + }, + "type": "array" }, - "fetched_at": { + "slug": { "type": "string" }, - "lat": { - "type": "number" - }, - "lng": { - "type": "number" - }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "radius_miles": { - "type": "integer" - }, "source_url": { "type": "string" + } + }, + "type": "object" + }, + "letterboxd.SearchResponse": { + "properties": { + "query": { + "description": "Search text that was run.", + "type": "string" }, - "stores": { + "results": { + "description": "Search hits, one item per film, person, list or tag.", "items": { - "$ref": "#/definitions/nike.Store" + "$ref": "#/definitions/letterboxd.SearchResult" }, "type": "array" }, - "total_stores": { - "type": "integer" + "source_url": { + "description": "URL the data was read from.", + "type": "string" + }, + "type": { + "description": "Result type the search was limited to, `film`. Omitted for a mixed search.", + "type": "string" } }, "type": "object" }, - "nike.SuggestResponse": { + "letterboxd.SearchResult": { "properties": { - "count": { - "type": "integer" + "owner": { + "description": "Username of the member who made the list. Present for list hits.", + "type": "string" }, - "fetched_at": { + "role": { + "description": "Role of the person, `actor` or `director`. Present for person hits.", + "example": "director", "type": "string" }, - "query": { + "slug": { + "description": "Letterboxd slug of the film or person. Present for film and person hits.", "type": "string" }, - "source_url": { + "title": { + "description": "Title of the film or list, name of the person, or the tag.", "type": "string" }, - "suggestions": { - "items": { - "type": "string" - }, - "type": "array" + "type": { + "description": "Kind of hit: `film`, `person`, `list` or `tag`.", + "example": "film", + "type": "string" + }, + "uri": { + "description": "Link to the hit's page on Letterboxd.", + "type": "string" + }, + "year": { + "description": "Year the film was released. Present for film hits.", + "type": "integer" } }, "type": "object" }, - "nike.TopLevelCategory": { + "letterboxd.SimilarResponse": { "properties": { - "groups": { + "films": { + "description": "Films Letterboxd lists as similar.", "items": { - "$ref": "#/definitions/nike.CategoryGroup" + "$ref": "#/definitions/letterboxd.FilmRef" }, "type": "array" }, - "name": { + "slug": { + "description": "Slug of the film the similar films are for.", "type": "string" }, - "path": { + "source_url": { + "description": "URL the data was read from.", "type": "string" } }, "type": "object" }, - "nike.availabilityResponseDoc": { + "letterboxd.filmResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/nike.AvailabilityResponse" + "$ref": "#/definitions/letterboxd.FilmResponse" }, "msg": { "example": "OK", @@ -143585,14 +149640,14 @@ }, "type": "object" }, - "nike.categoriesResponseDoc": { + "letterboxd.memberResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/nike.CategoriesResponse" + "$ref": "#/definitions/letterboxd.MemberResponse" }, "msg": { "example": "OK", @@ -143601,14 +149656,14 @@ }, "type": "object" }, - "nike.productDetailsResponseDoc": { + "letterboxd.personResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/nike.ProductDetailsResponse" + "$ref": "#/definitions/letterboxd.PersonResponse" }, "msg": { "example": "OK", @@ -143617,14 +149672,14 @@ }, "type": "object" }, - "nike.productResponseDoc": { + "letterboxd.popularResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/nike.ProductDetailResponse" + "$ref": "#/definitions/letterboxd.PopularResponse" }, "msg": { "example": "OK", @@ -143633,14 +149688,14 @@ }, "type": "object" }, - "nike.productReviewsResponseDoc": { + "letterboxd.ratingHistogramResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/nike.ProductReviewsResponse" + "$ref": "#/definitions/letterboxd.RatingHistogramResponse" }, "msg": { "example": "OK", @@ -143649,14 +149704,14 @@ }, "type": "object" }, - "nike.recommendationsResponseDoc": { + "letterboxd.reviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/nike.RecommendationsResponse" + "$ref": "#/definitions/letterboxd.ReviewsResponse" }, "msg": { "example": "OK", @@ -143665,14 +149720,14 @@ }, "type": "object" }, - "nike.searchResponseDoc": { + "letterboxd.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/nike.SearchResponse" + "$ref": "#/definitions/letterboxd.SearchResponse" }, "msg": { "example": "OK", @@ -143681,14 +149736,14 @@ }, "type": "object" }, - "nike.storesResponseDoc": { + "letterboxd.similarResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/nike.StoreResponse" + "$ref": "#/definitions/letterboxd.SimilarResponse" }, "msg": { "example": "OK", @@ -143697,336 +149752,494 @@ }, "type": "object" }, - "nike.suggestResponseDoc": { + "linkedin.Customer": { "properties": { - "code": { - "example": 200, + "follower_count": { + "description": "Number of LinkedIn followers of the customer's company page.", + "example": 12345, "type": "integer" }, - "data": { - "$ref": "#/definitions/nike.SuggestResponse" - }, - "msg": { - "example": "OK", + "industry": { + "description": "Industry listed for the customer company.", + "example": "Information Technology & Services", "type": "string" - } - }, - "type": "object" - }, - "ninetofivegoogle.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/ninetofivegoogle.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" }, - "image_url": { + "link": { + "description": "LinkedIn URL of the customer's company page.", + "example": "https://www.linkedin.com/company/contoso/", "type": "string" }, - "name": { + "logo": { + "description": "URL of the customer's logo image.", + "example": "https://media.licdn.com/dms/image/v2/company-logo_100_100/company-logo_100_100/0/123456789/logo?e=2147483647&v=beta&t=xyz", "type": "string" }, - "social_links": { - "items": { - "$ref": "#/definitions/ninetofivegoogle.AuthorSocialLink" - }, - "type": "array" - }, - "url": { + "name": { + "description": "Name of the featured customer company.", + "example": "Contoso Ltd.", "type": "string" } }, "type": "object" }, - "ninetofivegoogle.AuthorSocialLink": { + "linkedin.LinkedinCompanyResponse": { "properties": { - "type": { + "about": { + "description": "Company description from the About section.", + "example": "We’re a team of scientists, engineers...", "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "ninetofivegoogle.HeadlineItem": { - "properties": { - "author": { - "type": "string" + "affiliated_pages": { + "description": "Related company pages listed as affiliated with this company.", + "items": { + "$ref": "#/definitions/linkedin.Page" + }, + "type": "array" }, - "image_url": { + "company_size": { + "description": "Employee count range listed on the page, for example `501-1,000`.", + "example": "501-1,000", "type": "string" }, - "published_at": { - "type": "string" + "follower_count": { + "description": "Number of LinkedIn followers of the company page.", + "example": 1176422, + "type": "integer" }, - "summary": { + "founded_on": { + "description": "Year the company was founded.", + "example": 2010, + "type": "integer" + }, + "headline": { + "description": "Tagline shown under the company name.", + "example": "We're committed to solving intelligence, to advance science and benefit humanity.", "type": "string" }, - "title": { + "headquarters": { + "description": "Headquarters location as listed on the page.", + "example": "London, London", "type": "string" }, - "type": { + "industry": { + "description": "Industry listed on the company page, for example `Research Services`.", + "example": "Research Services", "type": "string" }, - "url": { + "link": { + "description": "LinkedIn URL of the company page.", + "example": "https://www.linkedin.com/company/googledeepmind", "type": "string" - } - }, - "type": "object" - }, - "ninetofivemac.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/ninetofivemac.HeadlineItem" - }, - "type": "array" }, - "biography": { + "locations": { + "description": "Office locations listed on the company page.", "items": { - "type": "string" + "$ref": "#/definitions/linkedin.Location" }, "type": "array" }, - "image_url": { + "logo": { + "description": "URL of the company logo image.", + "example": "https://static.licdn.com/.../linkedin-bug-color.png", "type": "string" }, "name": { + "description": "Company name as shown on its LinkedIn page.", + "example": "Google DeepMind", "type": "string" }, - "social_links": { - "items": { - "$ref": "#/definitions/ninetofivemac.AuthorSocialLink" - }, - "type": "array" - }, - "url": { + "num_of_employees_on_linkedin": { + "description": "Number of employees who list the company on their LinkedIn profile.", + "example": 5590, + "type": "integer" + }, + "products": { + "description": "Product Pages LinkedIn lists under the page's Products section.", + "items": { + "$ref": "#/definitions/linkedin.Product" + }, + "type": "array" + }, + "similar_pages": { + "description": "Company pages LinkedIn suggests as similar to this company.", + "items": { + "$ref": "#/definitions/linkedin.Page" + }, + "type": "array" + }, + "specialties": { + "description": "Specialties listed on the company page.", + "example": "Artificial Intelligence and Machine Learning", "type": "string" - } - }, - "type": "object" - }, - "ninetofivemac.AuthorSocialLink": { - "properties": { + }, "type": { + "description": "Organization type listed on the page, for example `Privately Held`.", + "example": "Privately Held", "type": "string" }, - "url": { + "updates": { + "description": "Recent posts shown on the company page.", + "items": { + "$ref": "#/definitions/linkedin.Update" + }, + "type": "array" + }, + "website": { + "description": "Company website address as listed on the page.", + "example": "https://www.deepmind.google", "type": "string" } }, "type": "object" }, - "ninetofivemac.HeadlineItem": { + "linkedin.LinkedinProductResponse": { "properties": { - "author": { - "type": "string" - }, - "image_url": { + "about": { + "description": "Product description from the About section.", + "example": "Streamline, manage, and grow your business with Dynamics 365 Business Central - a flexible, scalable, comprehensive business management solution for small and medium-sized businesses.", "type": "string" }, - "published_at": { + "category_link": { + "description": "LinkedIn URL of the product category page.", + "example": "https://www.linkedin.com/products/categories/business-management-software", "type": "string" }, - "summary": { + "category_name": { + "description": "Name of the LinkedIn product category the product is listed in.", + "example": "Business Management Software", "type": "string" }, - "title": { + "cover_image": { + "description": "URL of the product page cover image.", + "example": "https://media.licdn.com/dms/image/v2/D4E1BAQF2jwQmfmDSiA/company-background_10000/B4EZYQcR0_HkAU-/0/1744032571051/microsoft_dynamics_cover?e=2147483647&v=beta&t=fUrpht_xQ4tCJkUKJcGr5hFyqQzXLxbETOV14KE5qk4", "type": "string" }, - "type": { + "external_link": { + "description": "URL of the product's own website, from the visit button on the page.", + "example": "https://dynamics.microsoft.com/en-us/business-central/overview/", "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "npr.ArticleResponse": { - "properties": { - "authors": { + "featured_customers": { + "description": "Customer companies featured on the product page.", "items": { - "type": "string" + "$ref": "#/definitions/linkedin.Customer" }, "type": "array" }, - "description": { + "link": { + "description": "LinkedIn URL of the product page.", + "example": "https://www.linkedin.com/products/microsoft-dynamics-microsoft-dynamics-365-business-central", "type": "string" }, - "image_url": { + "logo": { + "description": "URL of the product logo image.", + "example": "https://media.licdn.com/dms/image/v2/C4E0BAQFXmfZJomhCcg/company-logo_100_100/company-logo_100_100/0/1630612268078/microsoft_dynamics_logo?e=2147483647&v=beta&t=2bAeeYjEdtNwIAdeHTqLAo6Av0AN3Ofe1vdzvN2ihpI", "type": "string" }, - "paragraphs": { + "medias": { + "description": "Media items shown on the product page, one entry per thumbnail.", "items": { - "type": "string" + "$ref": "#/definitions/linkedin.Media" }, "type": "array" }, - "published_at": { + "name": { + "description": "Product name as shown on its LinkedIn page.", + "example": "Microsoft Dynamics 365 Business Central", "type": "string" }, - "section": { + "organization_link": { + "description": "LinkedIn URL of the page of the company that makes the product.", + "example": "https://www.linkedin.com/company/microsoft-dynamics/", "type": "string" }, - "title": { + "organization_name": { + "description": "Name of the company that makes the product.", + "example": "Microsoft Dynamics 365", "type": "string" }, - "updated_at": { - "type": "string" + "other_products": { + "description": "Other products listed on the page, such as more products from the same company.", + "items": { + "$ref": "#/definitions/linkedin.Product" + }, + "type": "array" }, - "url": { + "similar_products": { + "description": "Products LinkedIn suggests as similar to this one.", + "items": { + "$ref": "#/definitions/linkedin.Product" + }, + "type": "array" + } + }, + "type": "object" + }, + "linkedin.Location": { + "properties": { + "address": { + "description": "Full street address of the location, as listed on the company page.", + "example": "Kings Cross, London, London N1C4AG, GB", "type": "string" + }, + "is_primary": { + "description": "Whether this is the company's primary location on LinkedIn.", + "example": true, + "type": "boolean" } }, "type": "object" }, - "npr.AuthorArticle": { + "linkedin.Media": { "properties": { - "image_url": { + "link": { + "description": "URL of the media thumbnail image.", + "example": "https://media.licdn.com/media/sample-video.mp4", "type": "string" }, - "published_at": { + "name": { + "description": "Caption of the media item on the product page.", + "example": "Product Demo Video", + "type": "string" + } + }, + "type": "object" + }, + "linkedin.Page": { + "properties": { + "address": { + "description": "Location shown on the page card, for example `San Francisco, CA`.", + "example": "San Francisco, CA", "type": "string" }, - "summary": { + "industry": { + "description": "Industry listed on the company page.", + "example": "Research Services", "type": "string" }, - "title": { + "link": { + "description": "LinkedIn URL of the company page.", + "example": "https://www.linkedin.com/company/openai", "type": "string" }, - "url": { + "name": { + "description": "Name of the company page.", + "example": "OpenAI", "type": "string" } }, "type": "object" }, - "npr.AuthorResponse": { + "linkedin.Product": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/npr.AuthorArticle" - }, - "type": "array" + "category_link": { + "description": "LinkedIn URL of the product category page.", + "example": "https://www.linkedin.com/products/categories/business-management-software", + "type": "string" }, - "bio": { + "category_name": { + "description": "Name of the LinkedIn product category the product is listed in.", + "example": "Business Management Software", "type": "string" }, - "job_title": { + "link": { + "description": "LinkedIn URL of the product page.", + "example": "https://www.linkedin.com/products/odoo/", "type": "string" }, - "name": { + "logo": { + "description": "URL of the product logo image.", + "example": "https://media.licdn.com/dms/image/v2/D4E0BAQF91OMQCIi4dQ/company-logo_100_100/company-logo_100_100/0/1691657301051/odoo_logo?e=2147483647&v=beta&t=JfXKr0197Ib_ujXsUsYwXtga3l87Seko0icAH53nrHo", "type": "string" }, - "url": { + "name": { + "description": "Product name as shown on LinkedIn.", + "example": "Odoo", "type": "string" } }, "type": "object" }, - "npr.CategoriesResponse": { + "linkedin.ProductCategoriesResponse": { "properties": { "categories": { "items": { - "$ref": "#/definitions/npr.Category" + "$ref": "#/definitions/linkedin.ProductCategoryItem" }, "type": "array" + }, + "total": { + "example": 620, + "type": "integer" } }, "type": "object" }, - "npr.Category": { + "linkedin.ProductCategoryItem": { "properties": { + "id": { + "example": "1620", + "type": "string" + }, + "link": { + "example": "https://www.linkedin.com/products/categories/healthcare-crm-software", + "type": "string" + }, "name": { + "example": "Healthcare CRM Software", "type": "string" }, - "slug": { + "universal_name": { + "example": "healthcare-crm-software", "type": "string" }, - "url": { + "urn": { + "example": "urn:li:standardizedProductCategory:1620", "type": "string" } }, "type": "object" }, - "npr.HeadlineItem": { + "linkedin.ProductSearchResultItem": { "properties": { - "author": { + "category_link": { + "example": "https://www.linkedin.com/products/categories/sales-intelligence-software", "type": "string" }, - "published_at": { + "category_name": { + "example": "Sales Intelligence Software", "type": "string" }, - "summary": { + "description": { + "example": "Sales Navigator helps sellers have high-quality conversations with the people that matter, at scale.", "type": "string" }, - "title": { + "id": { + "example": "linkedin-sales-navigator", "type": "string" }, - "url": { + "link": { + "example": "https://www.linkedin.com/products/linkedin-sales-navigator", + "type": "string" + }, + "logo": { + "example": "https://media.licdn.com/dms/image/v2/D4E33AQFKTZDLqpinzQ/productpage-logo-image_100_100/B4EZX4WGqkHUAY-/0/1743628299227/linkedin_sales_navigator_logo", + "type": "string" + }, + "name": { + "example": "LinkedIn Sales Navigator", + "type": "string" + }, + "organization_name": { + "example": "LinkedIn", "type": "string" } }, "type": "object" }, - "npr.HeadlinesResponse": { + "linkedin.ProductsSearchResponse": { "properties": { - "items": { + "next_start": { + "description": "NextStart is the offset for the following page, omitted once LinkedIn's\nguest search stops returning results (see ProductSearchResultCap).", + "example": 10, + "type": "integer" + }, + "products": { "items": { - "$ref": "#/definitions/npr.HeadlineItem" + "$ref": "#/definitions/linkedin.ProductSearchResultItem" }, "type": "array" + }, + "start": { + "example": 0, + "type": "integer" + }, + "total": { + "description": "Total is only populated on the first page (start=0), where it is read\nfrom LinkedIn's server-rendered result count.", + "example": 145986, + "type": "integer" } }, "type": "object" }, - "npr.TopicItem": { + "linkedin.Update": { "properties": { - "published_at": { + "author": { + "description": "Name of the page that published the post.", + "example": "Google DeepMind", "type": "string" }, - "summary": { + "author_link": { + "description": "LinkedIn URL of the page that published the post.", + "example": "https://uk.linkedin.com/company/googledeepmind", "type": "string" }, - "title": { + "images": { + "description": "URLs of the images attached to the post.", + "example": [ + "[\"https://example.com/image1.jpg\"]" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "is_reposted": { + "description": "Whether the post is a repost of another LinkedIn post.", + "example": false, + "type": "boolean" + }, + "logo": { + "description": "URL of the logo image of the page that published the post.", + "example": "https://media.licdn.com/dms/image/v2/D4E0BAQEntrYwxPlbQA/company-logo_100_100/0/googledeepmind_logo", "type": "string" }, - "url": { + "num_of_comments": { + "description": "Number of comments on the post.", + "example": 21, + "type": "integer" + }, + "num_of_reactions": { + "description": "Number of reactions on the post.", + "example": 571, + "type": "integer" + }, + "post_link": { + "description": "LinkedIn URL of the post.", + "example": "https://www.linkedin.com/posts/googledeepmind_thomas-story-activity-7313245349987385346-5COL", "type": "string" - } - }, - "type": "object" - }, - "npr.TopicResponse": { - "properties": { - "items": { + }, + "published_at": { + "description": "How long ago the post was published, as LinkedIn shows it, for example `1w`.", + "example": "1w", + "type": "string" + }, + "summary": { + "description": "Text of the post.", + "example": "When his son was diagnosed with a rare disease, Googler Thomas Wagner...", + "type": "string" + }, + "videos": { + "description": "URLs of the videos attached to the post.", + "example": [ + "[\"https://example.com/video1.mp4\"]" + ], "items": { - "$ref": "#/definitions/npr.TopicItem" + "type": "string" }, "type": "array" - }, - "topic": { - "type": "string" } }, "type": "object" }, - "npr.articleResponseDoc": { + "linkedin.companyResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/npr.ArticleResponse" + "$ref": "#/definitions/linkedin.LinkedinCompanyResponse" }, "msg": { "example": "OK", @@ -144035,14 +150248,14 @@ }, "type": "object" }, - "npr.authorResponseDoc": { + "linkedin.productCategoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/npr.AuthorResponse" + "$ref": "#/definitions/linkedin.ProductCategoriesResponse" }, "msg": { "example": "OK", @@ -144051,14 +150264,14 @@ }, "type": "object" }, - "npr.categoriesResponseDoc": { + "linkedin.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/npr.CategoriesResponse" + "$ref": "#/definitions/linkedin.LinkedinProductResponse" }, "msg": { "example": "OK", @@ -144067,14 +150280,14 @@ }, "type": "object" }, - "npr.headlinesResponseDoc": { + "linkedin.productsSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/npr.HeadlinesResponse" + "$ref": "#/definitions/linkedin.ProductsSearchResponse" }, "msg": { "example": "OK", @@ -144083,14 +150296,14 @@ }, "type": "object" }, - "npr.topicResponseDoc": { + "linkedin.showcaseResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/npr.TopicResponse" + "$ref": "#/definitions/linkedin.LinkedinCompanyResponse" }, "msg": { "example": "OK", @@ -144099,431 +150312,216 @@ }, "type": "object" }, - "numbeo.CityIndexEntry": { - "properties": { - "city": { - "type": "string" - }, - "city_slug": { - "type": "string" - }, - "cost_of_living_index": { - "description": "Numbeo Cost of Living Index; a higher value means consumer goods cost more.", - "type": "number" - }, - "cost_of_living_plus_rent_index": { - "description": "Numbeo Cost of Living Plus Rent Index, which combines consumer prices and rent.", - "type": "number" - }, - "groceries_index": { - "description": "Numbeo Groceries Index; a higher value means groceries cost more.", - "type": "number" - }, - "local_purchasing_power_index": { - "description": "Numbeo Local Purchasing Power Index; a higher value means locals can afford more with their wages.", - "type": "number" - }, - "rank": { - "type": "integer" - }, - "rent_index": { - "description": "Numbeo Rent Index; a higher value means rent costs more.", - "type": "number" - }, - "restaurant_price_index": { - "description": "Numbeo Restaurant Price Index; a higher value means meals and drinks out cost more.", - "type": "number" - } - }, - "type": "object" - }, - "numbeo.CostOfLivingCityResponse": { + "livemint.AuthorResponse": { "properties": { - "categories": { - "description": "Price categories for the city, each with its priced items.", + "biography": { "items": { - "$ref": "#/definitions/numbeo.PriceCategory" + "type": "string" }, "type": "array" }, - "city": { - "description": "City name as Numbeo shows it, with the state or region where Numbeo adds one, such as `Los Angeles, CA`.", - "type": "string" - }, - "city_slug": { - "description": "Numbeo city slug that was requested, such as `Los-Angeles`.", + "facebook_url": { "type": "string" }, - "contributors_12mo": { - "description": "Number of different contributors behind the city's prices, as Numbeo reports it.", - "type": "integer" - }, - "country": { - "description": "Country the city is in.", + "image_url": { "type": "string" }, - "last_update": { - "description": "Date Numbeo last updated the city's prices, as Numbeo shows it, such as `13 July 2026`.", + "instagram_url": { "type": "string" }, - "source_url": { - "description": "URL the data was read from.", + "job_title": { "type": "string" - } - }, - "type": "object" - }, - "numbeo.CostOfLivingCountryResponse": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/numbeo.PriceCategory" - }, - "type": "array" - }, - "cities": { - "items": { - "$ref": "#/definitions/numbeo.CityIndexEntry" - }, - "type": "array" }, - "contributors_12mo": { - "type": "integer" - }, - "country": { + "linkedin_url": { "type": "string" }, - "last_update": { + "name": { "type": "string" }, - "source_url": { + "twitter_url": { "type": "string" - } - }, - "type": "object" - }, - "numbeo.CountryIndexEntry": { - "properties": { - "cost_of_living_index": { - "description": "Numbeo Cost of Living Index; a higher value means consumer goods cost more.", - "type": "number" - }, - "cost_of_living_plus_rent_index": { - "description": "Numbeo Cost of Living Plus Rent Index, which combines consumer prices and rent.", - "type": "number" }, - "country": { - "description": "Country name as Numbeo shows it.", + "url": { "type": "string" - }, - "groceries_index": { - "description": "Numbeo Groceries Index; a higher value means groceries cost more.", - "type": "number" - }, - "local_purchasing_power_index": { - "description": "Numbeo Local Purchasing Power Index; a higher value means locals can afford more with their wages.", - "type": "number" - }, - "rank": { - "description": "Position of the country in Numbeo's cost-of-living ranking, starting at 1.", - "type": "integer" - }, - "rent_index": { - "description": "Numbeo Rent Index; a higher value means rent costs more.", - "type": "number" - }, - "restaurant_price_index": { - "description": "Numbeo Restaurant Price Index; a higher value means meals and drinks out cost more.", - "type": "number" } }, "type": "object" }, - "numbeo.IndexRankingEntry": { + "livescience.AuthorResponse": { "properties": { - "city": { - "description": "City name as Numbeo shows it. Set on city rankings.", - "type": "string" - }, - "city_slug": { - "description": "Numbeo city slug. Set on city rankings.", - "type": "string" - }, - "country": { - "description": "Country name as Numbeo shows it. Set on country rankings.", - "type": "string" - }, - "indices": { - "description": "Index values Numbeo publishes for this row, in table column order.", + "articles": { "items": { - "$ref": "#/definitions/numbeo.NamedValue" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "rank": { - "description": "Position in the Numbeo ranking, starting at 1.", - "type": "integer" - } - }, - "type": "object" - }, - "numbeo.IndexRow": { - "properties": { - "name": { - "type": "string" - }, - "qualifier": { - "type": "string" - }, - "value": { - "type": "number" - } - }, - "type": "object" - }, - "numbeo.IndexSection": { - "properties": { - "rows": { + "biography": { "items": { - "$ref": "#/definitions/numbeo.IndexRow" + "type": "string" }, "type": "array" }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "numbeo.IndicesCityResponse": { - "properties": { - "city": { - "type": "string" - }, - "city_slug": { - "type": "string" + "has_next_page": { + "type": "boolean" }, - "contributors_note": { + "job_title": { "type": "string" }, - "country": { + "name": { "type": "string" }, - "headline_indices": { - "items": { - "$ref": "#/definitions/numbeo.NamedValue" - }, - "type": "array" - }, - "index": { - "type": "string" + "page": { + "type": "integer" }, - "last_update": { + "slug": { "type": "string" }, - "price_categories": { - "items": { - "$ref": "#/definitions/numbeo.PriceCategory" - }, - "type": "array" - }, - "sections": { + "social_links": { "items": { - "$ref": "#/definitions/numbeo.IndexSection" + "$ref": "#/definitions/livescience.AuthorSocialLink" }, "type": "array" }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "numbeo.IndicesCountryResponse": { + "livescience.AuthorSocialLink": { "properties": { - "cities": { - "items": { - "$ref": "#/definitions/numbeo.IndexRankingEntry" - }, - "type": "array" - }, - "contributors_note": { - "type": "string" - }, - "country": { - "type": "string" - }, - "headline_indices": { - "items": { - "$ref": "#/definitions/numbeo.NamedValue" - }, - "type": "array" - }, - "index": { - "type": "string" - }, - "last_update": { + "platform": { "type": "string" }, - "price_categories": { - "items": { - "$ref": "#/definitions/numbeo.PriceCategory" - }, - "type": "array" - }, - "sections": { - "items": { - "$ref": "#/definitions/numbeo.IndexSection" - }, - "type": "array" - }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "numbeo.IndicesRankingsByCountryResponse": { + "livescore.livescoreNewsFeedItemDoc": { "properties": { - "countries": { - "description": "Countries ranked for this index family, in rank order.", - "items": { - "$ref": "#/definitions/numbeo.IndexRankingEntry" - }, - "type": "array" - }, - "index": { - "description": "Index family that was requested, such as `crime` or `traffic`.", + "author": { + "example": "LiveScore", "type": "string" }, - "source_url": { - "description": "URL the data was read from.", - "type": "string" - } - }, - "type": "object" - }, - "numbeo.IndicesRankingsResponse": { - "properties": { - "cities": { + "categories": { + "example": [ + "football" + ], "items": { - "$ref": "#/definitions/numbeo.IndexRankingEntry" + "type": "string" }, "type": "array" }, - "index": { + "content": { + "example": "

The complete RSS story body.

", "type": "string" }, - "period": { + "description": { + "example": "A short summary of the latest story.", "type": "string" }, - "scope": { + "guid": { + "example": "https://www.livescore.com/en/news/football/example-story/", "type": "string" }, - "source_url": { + "link": { + "example": "https://www.livescore.com/en/news/football/example-story/", "type": "string" - } - }, - "type": "object" - }, - "numbeo.NamedValue": { - "properties": { - "name": { - "description": "Name of the index, as Numbeo labels it, such as `Crime Index`.", + }, + "published_at": { + "example": "Sat, 26 Sep 2026 08:45:00 GMT", "type": "string" }, - "value": { - "description": "Value of the index named in `name`.", - "type": "number" + "title": { + "example": "Latest football news", + "type": "string" } }, "type": "object" }, - "numbeo.PriceCategory": { + "livescore.livescoreNewsFeedResponseDoc": { "properties": { - "category": { - "description": "Numbeo section name, such as Restaurants, Markets or Rent Per Month.", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "items": { - "description": "Priced goods and services listed under this category.", - "items": { - "$ref": "#/definitions/numbeo.PriceItem" + "data": { + "properties": { + "count": { + "example": 75, + "type": "integer" + }, + "items": { + "items": { + "$ref": "#/definitions/livescore.livescoreNewsFeedItemDoc" + }, + "type": "array" + }, + "source_url": { + "example": "https://www.livescore.com/en/news/rss.xml", + "type": "string" + } }, - "type": "array" - } - }, - "type": "object" - }, - "numbeo.PriceItem": { - "properties": { - "currency_symbol": { - "description": "Currency symbol Numbeo shows for the city's local currency, such as `$` or `€`.", - "type": "string" + "type": "object" }, - "name": { - "description": "Name of the good or service, such as a meal at an inexpensive restaurant.", + "msg": { + "example": "OK", "type": "string" - }, - "price": { - "description": "Price of the item in the city's local currency, as shown on Numbeo.", - "type": "number" - }, - "range_high": { - "description": "High end of the price range Numbeo reports for the item.", - "type": "number" - }, - "range_low": { - "description": "Low end of the price range Numbeo reports for the item.", - "type": "number" } }, "type": "object" }, - "numbeo.RankingsByCountryResponse": { + "livescore.livescoreNewsPublisherDoc": { "properties": { - "countries": { - "description": "Countries in Numbeo's cost-of-living ranking, in rank order.", - "items": { - "$ref": "#/definitions/numbeo.CountryIndexEntry" - }, - "type": "array" + "contact": { + "example": "https://www.statsperform.com/contact/", + "type": "string" }, - "source_url": { - "description": "URL the data was read from.", + "logo_url": { + "example": "https://www.livescore.com/ls-web-assets/images/publishers-stats-perform.webp", "type": "string" - } - }, - "type": "object" - }, - "numbeo.RankingsResponse": { - "properties": { - "cities": { - "items": { - "$ref": "#/definitions/numbeo.CityIndexEntry" - }, - "type": "array" }, - "period": { + "name": { + "example": "Stats Perform", "type": "string" }, - "scope": { + "telephone": { + "example": "+1 866 221 1426", "type": "string" }, - "source_url": { + "website": { + "example": "https://www.statsperform.com/", "type": "string" } }, "type": "object" }, - "numbeo.costOfLivingCityResponseDoc": { + "livescore.livescoreNewsPublishersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/numbeo.CostOfLivingCityResponse" + "properties": { + "count": { + "example": 6, + "type": "integer" + }, + "publishers": { + "items": { + "$ref": "#/definitions/livescore.livescoreNewsPublisherDoc" + }, + "type": "array" + }, + "source_url": { + "example": "https://www.livescore.com/en/news/publishers/", + "type": "string" + } + }, + "type": "object" }, "msg": { "example": "OK", @@ -144532,14 +150530,32 @@ }, "type": "object" }, - "numbeo.costOfLivingCountryResponseDoc": { + "livescore.livescoreSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/numbeo.CostOfLivingCountryResponse" + "properties": { + "query": { + "example": "Manchester City", + "type": "string" + }, + "results": { + "additionalProperties": true, + "type": "object" + }, + "source_url": { + "example": "https://prod-cdn-search-api.lsmedia1.com/api/v2/search/soccer?categories=true&locale=en&query=Manchester+City&stages=true&teams=true&limit=10", + "type": "string" + }, + "sport": { + "example": "soccer", + "type": "string" + } + }, + "type": "object" }, "msg": { "example": "OK", @@ -144548,14 +150564,22 @@ }, "type": "object" }, - "numbeo.indicesCityResponseDoc": { + "livescore.newsCategoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/numbeo.IndicesCityResponse" + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/livescore.newsCategoryDoc" + }, + "type": "array" + } + }, + "type": "object" }, "msg": { "example": "OK", @@ -144564,30 +150588,35 @@ }, "type": "object" }, - "numbeo.indicesCountryResponseDoc": { + "livescore.newsCategoryDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" + "id": { + "example": "football", + "type": "string" }, - "data": { - "$ref": "#/definitions/numbeo.IndicesCountryResponse" + "name": { + "example": "Football", + "type": "string" }, - "msg": { - "example": "OK", + "type": { + "example": "sport", + "type": "string" + }, + "url": { + "example": "https://www.livescore.com/en/news/football/", "type": "string" } }, "type": "object" }, - "numbeo.indicesRankingsByCountryResponseDoc": { + "livescore.responseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/numbeo.IndicesRankingsByCountryResponse" + "$ref": "#/definitions/livescore.sourceDataDoc" }, "msg": { "example": "OK", @@ -144596,46 +150625,48 @@ }, "type": "object" }, - "numbeo.indicesRankingsResponseDoc": { + "livescore.sourceDataDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/numbeo.IndicesRankingsResponse" + "additionalProperties": true, + "type": "object" }, - "msg": { - "example": "OK", + "source_url": { + "example": "https://www.livescore.com/en/football/uefa-nations-league/league-b-group-3/austria-vs-israel/1738267/", "type": "string" } }, "type": "object" }, - "numbeo.rankingsByCountryResponseDoc": { + "livescore.sportDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/numbeo.RankingsByCountryResponse" + "id": { + "example": "soccer", + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "example": "Football", "type": "string" } }, "type": "object" }, - "numbeo.rankingsResponseDoc": { + "livescore.sportsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/numbeo.RankingsResponse" + "properties": { + "sports": { + "items": { + "$ref": "#/definitions/livescore.sportDoc" + }, + "type": "array" + } + }, + "type": "object" }, "msg": { "example": "OK", @@ -144644,1211 +150675,2190 @@ }, "type": "object" }, - "nydailynews.AuthorArticle": { + "lolesports.CompletedEventsResponse": { "properties": { - "published_at": { - "type": "string" + "count": { + "example": 54, + "type": "integer" }, - "summary": { + "events": { + "items": { + "$ref": "#/definitions/lolesports.Event" + }, + "type": "array" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", "type": "string" }, - "title": { + "source_url": { + "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", "type": "string" }, - "url": { + "tournament_id": { + "example": "115548681802226458", "type": "string" } }, "type": "object" }, - "nydailynews.AuthorResponse": { + "lolesports.DetailsFrame": { "properties": { - "articles": { + "participants": { "items": { - "$ref": "#/definitions/nydailynews.AuthorArticle" + "$ref": "#/definitions/lolesports.DetailsParticipant" }, "type": "array" }, - "bio": { - "type": "string" - }, - "email": { - "type": "string" - }, - "job_title": { - "type": "string" - }, - "name": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "twitter": { - "type": "string" - }, - "url": { + "timestamp": { + "example": "2026-10-07T10:53:11.481Z", "type": "string" } }, "type": "object" }, - "nymag.AuthorArticle": { + "lolesports.DetailsParticipant": { "properties": { - "excerpt": { - "type": "string" + "ability_power": { + "example": 0, + "type": "integer" }, - "published_at": { - "type": "string" + "armor": { + "example": 90, + "type": "integer" }, - "section": { - "type": "string" + "assists": { + "example": 0, + "type": "integer" }, - "title": { - "type": "string" + "attack_damage": { + "example": 110, + "type": "integer" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "nymag.AuthorResponse": { - "properties": { - "articles": { + "attack_speed": { + "example": 125, + "type": "integer" + }, + "champion_damage_share": { + "example": 0.19, + "type": "number" + }, + "creep_score": { + "example": 251, + "type": "integer" + }, + "critical_chance": { + "example": 0, + "type": "number" + }, + "deaths": { + "example": 5, + "type": "integer" + }, + "items": { "items": { - "$ref": "#/definitions/nymag.AuthorArticle" + "type": "integer" }, "type": "array" }, - "bio": { - "type": "string" + "kill_participation": { + "example": 0.2, + "type": "number" }, - "job_title": { - "type": "string" + "kills": { + "example": 1, + "type": "integer" }, - "name": { - "type": "string" + "level": { + "example": 16, + "type": "integer" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "nypost.AuthorResponse": { - "properties": { - "articles": { + "life_steal": { + "example": 0, + "type": "integer" + }, + "magic_resistance": { + "example": 60, + "type": "integer" + }, + "participant_id": { + "example": 1, + "type": "integer" + }, + "rune_ids": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "type": "integer" }, "type": "array" }, - "biography": { + "rune_style_id": { + "example": 8200, + "type": "integer" + }, + "rune_sub_style_id": { + "example": 8400, + "type": "integer" + }, + "skill_order": { + "example": [ + "Q" + ], "items": { "type": "string" }, "type": "array" }, - "image_url": { - "type": "string" + "tenacity": { + "example": 0, + "type": "number" }, - "name": { - "type": "string" + "total_gold_earned": { + "example": 10852, + "type": "integer" }, - "social_links": { - "items": { - "$ref": "#/definitions/nypost.AuthorSocialLink" - }, - "type": "array" + "wards_destroyed": { + "example": 5, + "type": "integer" }, - "url": { - "type": "string" + "wards_placed": { + "example": 13, + "type": "integer" } }, "type": "object" }, - "nypost.AuthorSocialLink": { + "lolesports.Event": { "properties": { - "type": { + "block_name": { + "example": "Week 1", "type": "string" }, - "url": { + "games": { + "items": { + "$ref": "#/definitions/lolesports.GameVods" + }, + "type": "array" + }, + "league": { + "$ref": "#/definitions/lolesports.EventLeague" + }, + "match": { + "$ref": "#/definitions/lolesports.Match" + }, + "start_time": { + "example": "2026-07-24T14:30:00Z", + "type": "string" + }, + "state": { + "enum": [ + "unstarted", + "inProgress", + "completed" + ], + "example": "completed", + "type": "string" + }, + "type": { + "example": "match", "type": "string" } }, "type": "object" }, - "nyt.ArticleResponse": { + "lolesports.EventDetailResponse": { "properties": { - "authors": { + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "games": { "items": { - "type": "string" + "$ref": "#/definitions/lolesports.Game" }, "type": "array" }, - "description": { + "id": { + "example": "117133816701918802", "type": "string" }, - "image_url": { + "league": { + "$ref": "#/definitions/lolesports.EventLeague" + }, + "source_url": { + "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", "type": "string" }, - "keywords": { + "strategy": { + "$ref": "#/definitions/lolesports.Strategy" + }, + "streams": { "items": { - "type": "string" + "$ref": "#/definitions/lolesports.Stream" }, "type": "array" }, - "paragraphs": { + "teams": { "items": { - "type": "string" + "$ref": "#/definitions/lolesports.Team" }, "type": "array" }, - "published_at": { + "tournament_id": { + "example": "117133773242499009", "type": "string" }, - "section": { + "type": { + "example": "match", "type": "string" - }, - "title": { + } + }, + "type": "object" + }, + "lolesports.EventLeague": { + "properties": { + "id": { + "example": "98767991302996019", "type": "string" }, - "updated_at": { + "name": { + "example": "LEC", "type": "string" }, - "url": { + "slug": { + "example": "lec", "type": "string" } }, "type": "object" }, - "nyt.AuthorAboutSection": { + "lolesports.GPRLeague": { "properties": { - "heading": { + "id": { "type": "string" }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" + "name": { + "example": "CBLOL", + "type": "string" + }, + "slug": { + "example": "cblol-brazil", + "type": "string" + }, + "teams": { + "example": 4, + "type": "integer" } }, "type": "object" }, - "nyt.AuthorArticle": { + "lolesports.GPRPoint": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { + "date": { + "example": "2026-10-27T05:00:00Z", "type": "string" }, - "image_url": { - "type": "string" + "elo": { + "example": 1247, + "type": "integer" }, - "title": { - "type": "string" + "rank": { + "example": 41, + "type": "integer" }, - "url": { - "type": "string" + "score": { + "example": 1177, + "type": "integer" } }, "type": "object" }, - "nyt.AuthorContactItem": { + "lolesports.GPRRecord": { "properties": { - "label": { - "type": "string" - }, - "url": { - "type": "string" + "losses": { + "example": 37, + "type": "integer" }, - "value": { - "type": "string" + "wins": { + "example": 46, + "type": "integer" } }, "type": "object" }, - "nyt.AuthorResponse": { + "lolesports.GPRResponse": { "properties": { - "about": { + "count": { + "example": 58, + "type": "integer" + }, + "end_date": { + "example": "2026-10-28", + "type": "string" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "leagues": { "items": { - "$ref": "#/definitions/nyt.AuthorAboutSection" + "$ref": "#/definitions/lolesports.GPRLeague" }, "type": "array" }, - "articles": { + "season": { + "enum": [ + "current", + "2025", + "2024" + ], + "example": "current", + "type": "string" + }, + "seasons": { "items": { - "$ref": "#/definitions/nyt.AuthorArticle" + "$ref": "#/definitions/lolesports.GPRSeasonLink" }, "type": "array" }, - "contact": { + "source_url": { + "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", + "type": "string" + }, + "start_date": { + "example": "2026-01-01", + "type": "string" + }, + "teams": { "items": { - "$ref": "#/definitions/nyt.AuthorContactItem" + "$ref": "#/definitions/lolesports.GPRTeam" }, "type": "array" }, - "image_url": { + "total": { + "example": 58, + "type": "integer" + } + }, + "type": "object" + }, + "lolesports.GPRSeasonLink": { + "properties": { + "kind": { + "enum": [ + "current", + "worlds" + ], + "example": "worlds", "type": "string" }, - "name": { + "season": { + "example": "2025", "type": "string" }, - "tagline": { + "url": { "type": "string" }, - "url": { + "year": { + "example": "2025", "type": "string" } }, "type": "object" }, - "nyt.CategoriesResponse": { + "lolesports.GPRTeam": { "properties": { - "categories": { + "average_opponent_gpr": { + "example": 1132, + "type": "integer" + }, + "date_calculated": { + "example": "2026-10-27T05:00:00Z", + "type": "string" + }, + "elo": { + "example": 1247, + "type": "integer" + }, + "game_record": { + "$ref": "#/definitions/lolesports.GPRRecord" + }, + "history": { "items": { - "$ref": "#/definitions/nyt.Category" + "$ref": "#/definitions/lolesports.GPRPoint" + }, + "type": "array" + }, + "match_record": { + "$ref": "#/definitions/lolesports.GPRRecord" + }, + "previous_rank": { + "example": 42, + "type": "integer" + }, + "previous_score": { + "example": 1170, + "type": "integer" + }, + "rank": { + "example": 41, + "type": "integer" + }, + "rank_change": { + "example": 1, + "type": "integer" + }, + "score": { + "example": 1177, + "type": "integer" + }, + "team": { + "$ref": "#/definitions/lolesports.GPRTeamRef" + }, + "tournaments": { + "items": { + "$ref": "#/definitions/lolesports.GPRTournament" }, "type": "array" } }, "type": "object" }, - "nyt.Category": { + "lolesports.GPRTeamRef": { "properties": { - "name": { + "code": { + "example": "LOUD", "type": "string" }, - "sections": { - "items": { - "$ref": "#/definitions/nyt.CategoryLink" - }, - "type": "array" + "id": { + "example": "105397404796640412", + "type": "string" }, - "slug": { + "image_url": { "type": "string" }, - "url": { + "league": { + "example": "CBLOL", "type": "string" - } - }, - "type": "object" - }, - "nyt.CategoryLink": { - "properties": { - "name": { + }, + "league_id": { "type": "string" }, - "slug": { + "league_slug": { + "example": "cblol-brazil", "type": "string" }, - "url": { + "name": { + "example": "LOUD", + "type": "string" + }, + "slug": { + "example": "loud", "type": "string" } }, "type": "object" }, - "nyt.HeadlineItem": { + "lolesports.GPRTournament": { "properties": { - "author": { + "end_time": { "type": "string" }, - "description": { + "id": { + "example": "115548668059523728", "type": "string" }, - "image_url": { + "league": { + "example": "LEC", "type": "string" }, - "published_at": { + "losses": { + "example": 6, + "type": "integer" + }, + "name": { + "example": "lec_2026_season", "type": "string" }, - "title": { + "placement": { + "example": 2, + "type": "integer" + }, + "region_slug": { + "example": "europe", "type": "string" }, - "url": { + "slug": { + "type": "string" + }, + "start_time": { + "type": "string" + }, + "state": { + "example": "completed", "type": "string" + }, + "wins": { + "example": 12, + "type": "integer" } }, "type": "object" }, - "nyt.HeadlinesResponse": { + "lolesports.Game": { "properties": { - "items": { + "id": { + "example": "117133816701918803", + "type": "string" + }, + "number": { + "example": 1, + "type": "integer" + }, + "sides": { "items": { - "$ref": "#/definitions/nyt.HeadlineItem" + "$ref": "#/definitions/lolesports.GameSide" }, "type": "array" }, - "section": { + "state": { + "enum": [ + "unneeded", + "unstarted", + "inProgress", + "completed" + ], + "example": "completed", "type": "string" + }, + "vods": { + "items": { + "$ref": "#/definitions/lolesports.VOD" + }, + "type": "array" } }, "type": "object" }, - "nyt.Section": { + "lolesports.GameDetailsResponse": { "properties": { - "name": { + "count": { + "example": 10, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", "type": "string" }, - "slug": { + "frames": { + "items": { + "$ref": "#/definitions/lolesports.DetailsFrame" + }, + "type": "array" + }, + "game_id": { + "example": "117133816701918803", "type": "string" }, - "url": { + "source_url": { + "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", "type": "string" } }, "type": "object" }, - "nyt.SectionsResponse": { + "lolesports.GameSide": { "properties": { - "sections": { + "side": { + "enum": [ + "blue", + "red" + ], + "example": "blue", + "type": "string" + }, + "team_id": { + "example": "111504538396430510", + "type": "string" + } + }, + "type": "object" + }, + "lolesports.GameVods": { + "properties": { + "id": { + "example": "115548681803406276", + "type": "string" + }, + "vods": { "items": { - "$ref": "#/definitions/nyt.Section" + "$ref": "#/definitions/lolesports.VOD" }, "type": "array" } }, "type": "object" }, - "nyt.articleResponseDoc": { + "lolesports.GameWindowResponse": { "properties": { - "code": { - "example": 200, + "blue": { + "$ref": "#/definitions/lolesports.TeamMetadata" + }, + "count": { + "example": 10, "type": "integer" }, - "data": { - "$ref": "#/definitions/nyt.ArticleResponse" + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" }, - "msg": { - "example": "OK", + "frames": { + "items": { + "$ref": "#/definitions/lolesports.WindowFrame" + }, + "type": "array" + }, + "game_id": { + "example": "117133816701918803", + "type": "string" + }, + "match_id": { + "example": "117133816701918802", + "type": "string" + }, + "patch": { + "example": "16.18.819.1060", + "type": "string" + }, + "red": { + "$ref": "#/definitions/lolesports.TeamMetadata" + }, + "source_url": { + "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", "type": "string" } }, "type": "object" }, - "nyt.authorResponseDoc": { + "lolesports.HomeLeague": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/nyt.AuthorResponse" + "name": { + "example": "LCK", + "type": "string" }, - "msg": { - "example": "OK", + "region": { + "example": "KOREA", "type": "string" } }, "type": "object" }, - "nyt.categoriesResponseDoc": { + "lolesports.League": { "properties": { - "code": { - "example": 200, + "display_status": { + "enum": [ + "force_selected", + "selected", + "not_selected", + "hidden" + ], + "example": "selected", + "type": "string" + }, + "id": { + "example": "98767991302996019", + "type": "string" + }, + "image_url": { + "example": "https://static.lolesports.com/leagues/lec.png", + "type": "string" + }, + "name": { + "example": "LEC", + "type": "string" + }, + "priority": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/nyt.CategoriesResponse" + "region": { + "example": "EMEA", + "type": "string" }, - "msg": { - "example": "OK", + "slug": { + "example": "lec", "type": "string" } }, "type": "object" }, - "nyt.headlinesResponseDoc": { + "lolesports.LeaguesResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 51, "type": "integer" }, - "data": { - "$ref": "#/definitions/nyt.HeadlinesResponse" + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" }, - "msg": { - "example": "OK", + "leagues": { + "items": { + "$ref": "#/definitions/lolesports.League" + }, + "type": "array" + }, + "source_url": { + "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", "type": "string" } }, "type": "object" }, - "nyt.sectionsResponseDoc": { + "lolesports.LiveResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 0, "type": "integer" }, - "data": { - "$ref": "#/definitions/nyt.SectionsResponse" + "events": { + "items": { + "$ref": "#/definitions/lolesports.Event" + }, + "type": "array" }, - "msg": { - "example": "OK", + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "source_url": { + "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", "type": "string" } }, "type": "object" }, - "nzherald.AuthorResponse": { + "lolesports.Match": { "properties": { - "articles": { + "flags": { + "example": [ + "hasVod" + ], "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "type": "string" }, "type": "array" }, - "biography": { + "id": { + "example": "115548681803406275", + "type": "string" + }, + "strategy": { + "$ref": "#/definitions/lolesports.Strategy" + }, + "teams": { + "items": { + "$ref": "#/definitions/lolesports.Team" + }, + "type": "array" + } + }, + "type": "object" + }, + "lolesports.NewsArticle": { + "properties": { + "authors": { "items": { "type": "string" }, "type": "array" }, - "email": { + "description": { + "example": "Everything You Need To Know About Worlds!", + "type": "string" + }, + "external": { + "example": false, + "type": "boolean" + }, + "external_url": { + "example": "https://www.youtube.com/watch?v=H_B91cxvCRQ", + "type": "string" + }, + "id": { + "example": "e18c9f59-8497-4196-af3f-18b2fac2b920.en-us", "type": "string" }, "image_url": { + "example": "https://cdn.sanity.io/images/dsfx7636/news_live/0286cc9daee206f55cf722a3b2830ca3fdad7d59-1600x900.jpg", "type": "string" }, - "job_title": { + "path": { + "example": "/news/worlds-2026-primer", "type": "string" }, - "location": { + "published_at": { + "example": "2026-10-05T15:00:00.000Z", "type": "string" }, - "name": { + "title": { + "example": "Worlds 2026 Primer", "type": "string" }, "url": { + "example": "https://lolesports.com/en-US/news/worlds-2026-primer", "type": "string" } }, "type": "object" }, - "oldnavy.AvailabilityResponse": { + "lolesports.NewsResponse": { "properties": { - "brand": { - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/lolesports.NewsArticle" + }, + "type": "array" }, "count": { + "example": 100, "type": "integer" }, "fetched_at": { + "example": "2026-10-27T10:00:00Z", "type": "string" }, - "pid": { + "hl": { + "example": "en-US", "type": "string" }, "source_url": { + "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", "type": "string" }, - "stores": { - "items": { - "$ref": "#/definitions/oldnavy.StoreStockSummary" - }, - "type": "array" - }, - "style_id": { - "type": "string" + "total": { + "example": 100, + "type": "integer" } }, "type": "object" }, - "oldnavy.CategoriesResponse": { + "lolesports.ParticipantMetadata": { "properties": { - "brand": { + "champion_id": { + "example": "Sion", "type": "string" }, - "categories": { - "items": { - "$ref": "#/definitions/oldnavy.CategoryNavEntry" - }, - "type": "array" + "participant_id": { + "example": 1, + "type": "integer" }, - "cid": { + "player_id": { + "example": "102206337829139149", "type": "string" }, - "fetched_at": { + "role": { + "enum": [ + "top", + "jungle", + "mid", + "bottom", + "support" + ], + "example": "top", "type": "string" }, - "source_url": { + "summoner_name": { + "example": "SR Fudge", "type": "string" } }, "type": "object" }, - "oldnavy.CategoryColorSummary": { + "lolesports.Player": { "properties": { - "back_order_inventory_count": { - "type": "integer" - }, - "back_order_inventory_status": { + "first_name": { + "example": "Sanghyeok", "type": "string" }, "id": { + "example": "98767991747728851", "type": "string" }, "image_url": { "type": "string" }, - "inventory_count": { - "type": "integer" - }, - "inventory_status": { + "last_name": { + "example": "Lee", "type": "string" }, - "name": { + "role": { + "enum": [ + "top", + "jungle", + "mid", + "bottom", + "support", + "none" + ], + "example": "mid", "type": "string" }, - "percentage_off": { - "type": "integer" - }, - "price": { - "type": "number" - }, - "regular_price": { - "type": "number" - }, - "short_description": { + "summoner_name": { + "example": "Faker", "type": "string" } }, "type": "object" }, - "oldnavy.CategoryGroup": { + "lolesports.Ranking": { "properties": { - "category_id": { - "type": "string" - }, - "category_name": { - "type": "string" + "ordinal": { + "example": 1, + "type": "integer" }, - "items": { + "teams": { "items": { - "$ref": "#/definitions/oldnavy.CategoryGroupItem" + "$ref": "#/definitions/lolesports.Team" }, "type": "array" - }, - "sub_category_id": { - "type": "string" - }, - "sub_category_name": { - "type": "string" } }, "type": "object" }, - "oldnavy.CategoryGroupItem": { + "lolesports.Record": { "properties": { - "cc_id": { - "type": "string" + "losses": { + "example": 0, + "type": "integer" }, - "style_id": { - "type": "string" + "wins": { + "example": 9, + "type": "integer" } }, "type": "object" }, - "oldnavy.CategoryNavEntry": { + "lolesports.ScheduleResponse": { "properties": { - "cid": { + "count": { + "example": 80, + "type": "integer" + }, + "events": { + "items": { + "$ref": "#/definitions/lolesports.Event" + }, + "type": "array" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", "type": "string" }, - "name": { + "newer_page_token": { "type": "string" }, - "url": { + "older_page_token": { + "type": "string" + }, + "source_url": { + "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", "type": "string" } }, "type": "object" }, - "oldnavy.CategoryProductSummary": { + "lolesports.Season": { "properties": { - "colors": { - "items": { - "$ref": "#/definitions/oldnavy.CategoryColorSummary" - }, - "type": "array" + "end_time": { + "example": "2026-12-31T22:59:00Z", + "type": "string" }, "id": { + "example": "115547545029543948", "type": "string" }, "name": { + "example": "lolesports_2026", "type": "string" }, - "review_count": { - "type": "integer" + "slug": { + "example": "lolesports_2026", + "type": "string" }, - "review_score": { - "type": "number" + "split_count": { + "example": 6, + "type": "integer" }, - "url": { - "type": "string" + "splits": { + "items": { + "$ref": "#/definitions/lolesports.Split" + }, + "type": "array" }, - "web_product_type": { + "start_time": { + "example": "2026-01-01T08:00:00Z", "type": "string" } }, "type": "object" }, - "oldnavy.CategoryResponse": { + "lolesports.SeasonLeague": { "properties": { - "brand": { + "id": { + "example": "98767991302996019", "type": "string" }, - "categories": { - "items": { - "$ref": "#/definitions/oldnavy.CategoryGroup" - }, - "type": "array" - }, - "category_id": { + "image_url": { "type": "string" }, + "name": { + "example": "LEC", + "type": "string" + } + }, + "type": "object" + }, + "lolesports.SeasonsResponse": { + "properties": { "count": { + "example": 2, "type": "integer" }, - "facets": { - "items": { - "$ref": "#/definitions/oldnavy.Facet" - }, - "type": "array" - }, "fetched_at": { + "example": "2026-10-27T10:00:00Z", "type": "string" }, - "page": { - "type": "integer" + "league_id": { + "example": "98767991302996019", + "type": "string" }, - "page_size": { - "type": "integer" + "region": { + "type": "string" }, - "products": { + "season_id": { + "example": "115547545029543948", + "type": "string" + }, + "seasons": { "items": { - "$ref": "#/definitions/oldnavy.CategoryProductSummary" + "$ref": "#/definitions/lolesports.Season" }, "type": "array" }, "source_url": { + "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", "type": "string" - }, - "total_colors": { - "type": "integer" - }, - "total_pages": { - "type": "integer" } }, "type": "object" }, - "oldnavy.ColorSummary": { + "lolesports.Split": { "properties": { - "id": { + "description": { "type": "string" }, - "image_url": { + "end_time": { + "example": "2026-09-27T22:00:00Z", "type": "string" }, - "name": { + "id": { + "example": "115548016979679447", "type": "string" }, - "percentage_off": { - "type": "integer" + "name": { + "example": "Split 3", + "type": "string" }, - "price": { - "type": "number" + "region": { + "example": "REGIONAL", + "type": "string" }, - "regular_price": { - "type": "number" + "slug": { + "example": "split_3", + "type": "string" }, - "short_description": { + "start_time": { + "example": "2026-07-19T22:00:00Z", "type": "string" + }, + "tournaments": { + "items": { + "$ref": "#/definitions/lolesports.SplitTournament" + }, + "type": "array" } }, "type": "object" }, - "oldnavy.Facet": { + "lolesports.SplitTournament": { "properties": { - "is_range": { - "type": "boolean" - }, - "label": { + "id": { + "example": "115548681802226458", "type": "string" }, + "league": { + "$ref": "#/definitions/lolesports.SeasonLeague" + }, "name": { + "example": "Summer 2026", "type": "string" - }, - "options": { + } + }, + "type": "object" + }, + "lolesports.StandingMatch": { + "properties": { + "flags": { "items": { - "$ref": "#/definitions/oldnavy.FacetOption" + "type": "string" }, "type": "array" }, - "range_max": { - "type": "number" + "id": { + "example": "115548681803340575", + "type": "string" }, - "range_min": { - "type": "number" + "previous_match_ids": { + "items": { + "type": "string" + }, + "type": "array" }, - "type": { + "state": { + "example": "completed", "type": "string" + }, + "teams": { + "items": { + "$ref": "#/definitions/lolesports.Team" + }, + "type": "array" } }, "type": "object" }, - "oldnavy.FacetOption": { + "lolesports.StandingRound": { "properties": { - "count": { - "type": "integer" + "match_ids": { + "items": { + "type": "string" + }, + "type": "array" }, - "label": { + "name": { + "example": "Upper Bracket - Round 1", "type": "string" }, - "value": { + "slug": { + "example": "upper_bracket_round_1", "type": "string" } }, "type": "object" }, - "oldnavy.ProductDetailResponse": { + "lolesports.StandingSection": { "properties": { - "brand": { - "type": "string" - }, - "color": { - "type": "string" - }, - "description": { - "type": "string" - }, - "fetched_at": { + "id": { + "example": "115548681803012894", "type": "string" }, - "images": { + "matches": { "items": { - "type": "string" + "$ref": "#/definitions/lolesports.StandingMatch" }, "type": "array" }, "name": { + "example": "Regular Season", "type": "string" }, - "offers": { + "rankings": { "items": { - "$ref": "#/definitions/oldnavy.ProductOffer" + "$ref": "#/definitions/lolesports.Ranking" }, "type": "array" }, - "pid": { - "type": "string" - }, - "rating_count": { - "type": "integer" - }, - "rating_value": { - "type": "number" - }, - "related_items": { + "rounds": { "items": { - "$ref": "#/definitions/oldnavy.RelatedItem" + "$ref": "#/definitions/lolesports.StandingRound" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "url": { + "type": { + "enum": [ + "group", + "bracket" + ], + "example": "bracket", "type": "string" } }, "type": "object" }, - "oldnavy.ProductOffer": { + "lolesports.StandingStage": { "properties": { - "availability": { + "id": { + "example": "115548681802750747", "type": "string" }, - "currency": { + "name": { + "example": "Regular Season", "type": "string" }, - "price": { - "type": "number" + "sections": { + "items": { + "$ref": "#/definitions/lolesports.StandingSection" + }, + "type": "array" }, - "sku": { + "slug": { + "example": "regular_season", "type": "string" }, - "url": { + "type": { "type": "string" } }, "type": "object" }, - "oldnavy.ProductReviewsResponse": { + "lolesports.StandingsResponse": { "properties": { - "average_rating": { - "type": "number" + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" }, - "brand": { + "source_url": { + "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", "type": "string" }, + "stages": { + "items": { + "$ref": "#/definitions/lolesports.StandingStage" + }, + "type": "array" + }, + "tournament_id": { + "example": "115548681802226458", + "type": "string" + } + }, + "type": "object" + }, + "lolesports.Strategy": { + "properties": { "count": { + "example": 3, "type": "integer" }, - "fetched_at": { + "type": { + "example": "bestOf", + "type": "string" + } + }, + "type": "object" + }, + "lolesports.Stream": { + "properties": { + "locale": { + "example": "en-GB", "type": "string" }, - "page": { - "type": "integer" + "parameter": { + "example": "lec", + "type": "string" }, - "page_size": { + "provider": { + "example": "twitch", + "type": "string" + } + }, + "type": "object" + }, + "lolesports.Team": { + "properties": { + "code": { + "example": "T1", + "type": "string" + }, + "game_wins": { + "example": 2, "type": "integer" }, - "pid": { + "id": { + "example": "98767991853197861", "type": "string" }, - "rating_count": { - "type": "integer" + "image_url": { + "example": "https://static.lolesports.com/teams/t1.png", + "type": "string" }, - "rating_histogram": { - "description": "RatingHistogram is the count of ratings per star, ascending: index 0\nis 1-star, index 4 is 5-star.", + "name": { + "example": "T1", + "type": "string" + }, + "outcome": { + "enum": [ + "win", + "loss" + ], + "example": "win", + "type": "string" + }, + "record": { + "$ref": "#/definitions/lolesports.Record" + }, + "slug": { + "example": "t1", + "type": "string" + } + }, + "type": "object" + }, + "lolesports.TeamDetail": { + "properties": { + "code": { + "example": "T1", + "type": "string" + }, + "home_league": { + "$ref": "#/definitions/lolesports.HomeLeague" + }, + "id": { + "example": "98767991853197861", + "type": "string" + }, + "image_url": { + "type": "string" + }, + "name": { + "example": "T1", + "type": "string" + }, + "players": { "items": { - "type": "integer" + "$ref": "#/definitions/lolesports.Player" }, "type": "array" }, - "recommended_ratio": { - "type": "number" + "slug": { + "example": "t1", + "type": "string" }, - "reviews": { + "status": { + "enum": [ + "active", + "archived" + ], + "example": "active", + "type": "string" + } + }, + "type": "object" + }, + "lolesports.TeamMetadata": { + "properties": { + "participants": { "items": { - "$ref": "#/definitions/oldnavy.Review" + "$ref": "#/definitions/lolesports.ParticipantMetadata" }, "type": "array" }, - "source_url": { + "team_id": { + "example": "111504538396430510", "type": "string" - }, - "total_pages": { - "type": "integer" - }, - "total_reviews": { - "type": "integer" } }, "type": "object" }, - "oldnavy.ProductSummary": { + "lolesports.TeamTotals": { "properties": { - "colors": { + "barons": { + "example": 0, + "type": "integer" + }, + "dragons": { + "example": [ + "infernal" + ], "items": { - "$ref": "#/definitions/oldnavy.ColorSummary" + "type": "string" }, "type": "array" }, - "id": { - "type": "string" + "inhibitors": { + "example": 0, + "type": "integer" }, - "name": { + "participants": { + "items": { + "$ref": "#/definitions/lolesports.WindowParticipant" + }, + "type": "array" + }, + "total_gold": { + "example": 15621, + "type": "integer" + }, + "total_kills": { + "example": 4, + "type": "integer" + }, + "towers": { + "example": 1, + "type": "integer" + } + }, + "type": "object" + }, + "lolesports.TeamsResponse": { + "properties": { + "fetched_at": { + "example": "2026-10-27T10:00:00Z", "type": "string" }, - "price_max": { - "type": "number" + "has_more": { + "example": false, + "type": "boolean" }, - "price_min": { - "type": "number" + "limit": { + "example": 25, + "type": "integer" }, - "review_count": { + "page": { + "example": 1, "type": "integer" }, - "review_score": { - "type": "number" + "source_url": { + "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", + "type": "string" }, - "sale_price_max": { - "type": "number" + "teams": { + "items": { + "$ref": "#/definitions/lolesports.TeamDetail" + }, + "type": "array" }, - "sale_price_min": { - "type": "number" + "total": { + "example": 1, + "type": "integer" + } + }, + "type": "object" + }, + "lolesports.Tournament": { + "properties": { + "end_date": { + "example": "2026-09-20", + "type": "string" }, - "thumbnail_url": { + "id": { + "example": "115548681802226458", "type": "string" }, - "url": { + "slug": { + "example": "lec_split_3_2026", "type": "string" }, - "web_product_type": { + "start_date": { + "example": "2026-07-23", "type": "string" } }, "type": "object" }, - "oldnavy.RelatedItem": { + "lolesports.TournamentsResponse": { "properties": { - "name": { + "count": { + "example": 12, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", "type": "string" }, - "pid": { + "league_id": { + "example": "98767991302996019", "type": "string" }, - "url": { + "source_url": { + "example": "https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US", "type": "string" + }, + "tournaments": { + "items": { + "$ref": "#/definitions/lolesports.Tournament" + }, + "type": "array" } }, "type": "object" }, - "oldnavy.Review": { + "lolesports.VOD": { "properties": { - "author": { + "end_millis": { + "example": 2525000, + "type": "integer" + }, + "first_frame_time": { + "description": "FirstFrameTime is the UTC time of the recording's first frame, when the upstream knows it.", + "example": "2026-10-15T18:00:26.487Z", "type": "string" }, - "body": { + "id": { + "example": "117401850612643795", "type": "string" }, - "created_at": { + "locale": { + "example": "fr-FR", "type": "string" }, - "headline": { + "locale_name": { + "example": "French (France)", "type": "string" }, - "helpful_votes": { + "offset": { + "description": "Offset is the upstream's alignment offset for the recording in milliseconds.", + "example": 0, "type": "integer" }, - "id": { + "parameter": { + "example": "xtq9wDAT3zg", "type": "string" }, - "location": { + "provider": { + "example": "youtube", "type": "string" }, - "not_helpful_votes": { + "start_millis": { + "example": 121000, "type": "integer" + } + }, + "type": "object" + }, + "lolesports.WindowFrame": { + "properties": { + "blue": { + "$ref": "#/definitions/lolesports.TeamTotals" }, - "rating": { - "type": "integer" + "game_state": { + "enum": [ + "in_game", + "paused", + "finished" + ], + "example": "in_game", + "type": "string" }, - "updated_at": { + "red": { + "$ref": "#/definitions/lolesports.TeamTotals" + }, + "timestamp": { + "example": "2026-10-07T10:20:00.000Z", "type": "string" + } + }, + "type": "object" + }, + "lolesports.WindowParticipant": { + "properties": { + "assists": { + "example": 2, + "type": "integer" }, - "verified_purchase": { - "type": "boolean" + "creep_score": { + "example": 54, + "type": "integer" + }, + "current_health": { + "example": 640, + "type": "integer" + }, + "deaths": { + "example": 0, + "type": "integer" + }, + "kills": { + "example": 1, + "type": "integer" + }, + "level": { + "example": 6, + "type": "integer" + }, + "max_health": { + "example": 1100, + "type": "integer" + }, + "participant_id": { + "example": 1, + "type": "integer" + }, + "total_gold": { + "example": 3200, + "type": "integer" } }, "type": "object" }, - "oldnavy.SearchResponse": { + "lululemon.CategoriesResponse": { "properties": { - "brand": { - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/lululemon.CategoryEntry" + }, + "type": "array" }, "count": { "type": "integer" }, - "facets": { + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "lululemon.CategoryEntry": { + "properties": { + "category": { + "type": "string" + }, + "cdp_hash": { + "type": "string" + }, + "name": { + "type": "string" + }, + "path": { "items": { - "$ref": "#/definitions/oldnavy.Facet" + "type": "string" }, "type": "array" }, - "fetched_at": { + "section": { "type": "string" }, - "keyword": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "lululemon.CategoryResponse": { + "properties": { + "category": { + "description": "Category slug that was requested, such as `women-new-styles`.", + "type": "string" + }, + "cdp_hash": { + "description": "Short id segment of the category URL that was requested.", + "type": "string" + }, + "count": { + "description": "Number of products returned on this page.", + "type": "integer" + }, + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", "type": "string" }, "page": { + "description": "Page number returned, starting at 1.", "type": "integer" }, "page_size": { + "description": "Maximum number of products on a page.", "type": "integer" }, "products": { + "description": "Products listed on this page of the category.", "items": { - "$ref": "#/definitions/oldnavy.ProductSummary" + "$ref": "#/definitions/lululemon.ProductSummary" }, "type": "array" }, "source_url": { + "description": "URL the data was read from.", "type": "string" }, - "total_pages": { - "type": "integer" - }, "total_products": { + "description": "Total number of products in the category.", "type": "integer" } }, "type": "object" }, - "oldnavy.SizeStock": { + "lululemon.OutfitItem": { "properties": { - "fit": { + "category": { "type": "string" }, - "sku": { + "currency": { "type": "string" }, - "status": { + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "list_price": { + "type": "number" + }, + "on_sale": { + "type": "boolean" + }, + "sale_price": { + "type": "number" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "oldnavy.Store": { + "lululemon.OutfitLook": { "properties": { - "address": { + "id": { "type": "string" }, - "city": { + "items": { + "items": { + "$ref": "#/definitions/lululemon.OutfitItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "lululemon.OutfitResponse": { + "properties": { + "color_code": { "type": "string" }, - "country": { + "fetched_at": { "type": "string" }, - "distance_miles": { - "type": "number" + "item": { + "$ref": "#/definitions/lululemon.OutfitItem" }, - "latitude": { - "type": "number" + "looks": { + "items": { + "$ref": "#/definitions/lululemon.OutfitLook" + }, + "type": "array" }, - "longitude": { - "type": "number" + "source_url": { + "type": "string" + }, + "unified_id": { + "type": "string" + } + }, + "type": "object" + }, + "lululemon.ProductDetailColor": { + "properties": { + "code": { + "type": "string" }, "name": { "type": "string" }, - "phone": { + "swatch_url": { "type": "string" + } + }, + "type": "object" + }, + "lululemon.ProductDetailRating": { + "properties": { + "count": { + "type": "integer" }, - "postal_code": { + "value": { + "type": "number" + } + }, + "type": "object" + }, + "lululemon.ProductDetailResponse": { + "properties": { + "activities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "category": { "type": "string" }, - "region": { + "category_id": { "type": "string" }, - "specialties": { + "colors": { + "items": { + "$ref": "#/definitions/lululemon.ProductDetailColor" + }, + "type": "array" + }, + "currency": { + "type": "string" + }, + "description": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "gender": { + "items": { + "type": "string" + }, + "type": "array" + }, + "highlights": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "on_sale": { + "type": "boolean" + }, + "price": { + "type": "number" + }, + "product_id": { + "type": "string" + }, + "rating": { + "$ref": "#/definitions/lululemon.ProductDetailRating" + }, + "reviews": { + "items": { + "$ref": "#/definitions/lululemon.ProductDetailReview" + }, + "type": "array" + }, + "sizes": { "items": { "type": "string" }, "type": "array" }, + "skus": { + "items": { + "$ref": "#/definitions/lululemon.ProductDetailSKU" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "unified_id": { + "type": "string" + }, "url": { "type": "string" } }, "type": "object" }, - "oldnavy.StoreResponse": { + "lululemon.ProductDetailReview": { "properties": { - "brand": { + "badge": { "type": "string" }, - "count": { - "type": "integer" + "body": { + "type": "string" }, - "fetched_at": { + "fit": { "type": "string" }, - "lat": { + "id": { + "type": "string" + }, + "rating": { "type": "number" }, - "lng": { + "size_purchased": { + "type": "string" + }, + "submitted_at": { + "type": "string" + }, + "title": { + "type": "string" + }, + "verified_buyer": { + "type": "boolean" + } + }, + "type": "object" + }, + "lululemon.ProductDetailSKU": { + "properties": { + "available": { + "type": "boolean" + }, + "color_code": { + "type": "string" + }, + "color_name": { + "type": "string" + }, + "id": { + "type": "string" + }, + "on_sale": { + "type": "boolean" + }, + "price": { "type": "number" }, - "search": { + "sale_price": { + "type": "number" + }, + "size": { "type": "string" }, - "source_url": { + "style_id": { "type": "string" }, - "stores": { + "style_number": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "lululemon.ProductSummary": { + "properties": { + "activities": { + "description": "Activities the product is designed for, such as `Casual` or `Lounge`.", "items": { - "$ref": "#/definitions/oldnavy.Store" + "type": "string" + }, + "type": "array" + }, + "category": { + "description": "Name of the product's category, such as `Sweatpants`.", + "type": "string" + }, + "category_id": { + "description": "Id of the product's category, such as `womens-sweatpants`.", + "type": "string" + }, + "colors": { + "description": "Names of the colors the product comes in. Positions match `style_numbers`.", + "items": { + "type": "string" + }, + "type": "array" + }, + "currency": { + "description": "Currency code of the prices, such as `USD`.", + "type": "string" + }, + "id": { + "description": "lululemon product id.", + "type": "string" + }, + "image_url": { + "description": "URL of the first image lululemon lists for the product.", + "type": "string" + }, + "list_price": { + "description": "List price of the product.", + "type": "number" + }, + "name": { + "description": "Product name as shown on lululemon.", + "type": "string" + }, + "new_arrival": { + "description": "Whether lululemon flags the product as a new arrival.", + "type": "boolean" + }, + "on_sale": { + "description": "Whether the product is on sale.", + "type": "boolean" + }, + "price": { + "description": "Current price of the product.", + "type": "number" + }, + "sale_price": { + "description": "Sale price of the product. Set only when `on_sale` is `true`.", + "type": "number" + }, + "sizes": { + "description": "Sizes the product is available in.", + "items": { + "type": "string" + }, + "type": "array" + }, + "style_numbers": { + "description": "Style numbers of the product, one per color. Positions match `colors`.", + "items": { + "type": "string" }, "type": "array" + }, + "unified_id": { + "description": "lululemon's unified product id, a slug such as `Scuba-Evolve-Straight-Leg-Pant-Regular`.", + "type": "string" + }, + "url": { + "description": "URL of the product page on lululemon.", + "type": "string" } }, "type": "object" }, - "oldnavy.StoreStockSummary": { + "lululemon.Store": { "properties": { "address": { "type": "string" }, + "amenities": { + "$ref": "#/definitions/lululemon.StoreAmenities" + }, "city": { "type": "string" }, + "country": { + "type": "string" + }, "distance_miles": { "type": "number" }, + "hours": { + "items": { + "$ref": "#/definitions/lululemon.StoreHours" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "message": { + "type": "string" + }, "name": { "type": "string" }, - "phone": { + "slug": { "type": "string" }, - "postal_code": { + "state": { "type": "string" }, - "region": { + "state_name": { "type": "string" }, - "sizes": { - "items": { - "$ref": "#/definitions/oldnavy.SizeStock" - }, - "type": "array" + "status": { + "type": "string" }, - "store_id": { + "store_type": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "oldnavy.availabilityResponseDoc": { + "lululemon.StoreAmenities": { "properties": { - "code": { - "example": 200, - "type": "integer" + "buy_online_pickup_store": { + "type": "boolean" }, - "data": { - "$ref": "#/definitions/oldnavy.AvailabilityResponse" + "complementary_hemming": { + "type": "boolean" }, - "msg": { - "example": "OK", + "curbside_pickup": { + "type": "boolean" + }, + "footwear": { + "type": "boolean" + }, + "has_mirror": { + "type": "boolean" + }, + "like_new": { + "type": "boolean" + }, + "personal_shopping": { + "type": "boolean" + }, + "returns_exchanges": { + "type": "boolean" + } + }, + "type": "object" + }, + "lululemon.StoreHours": { + "properties": { + "close": { + "type": "string" + }, + "day": { + "type": "string" + }, + "open": { "type": "string" } }, "type": "object" }, - "oldnavy.categoriesResponseDoc": { + "lululemon.StoresResponse": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/oldnavy.CategoriesResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" + }, + "stores": { + "items": { + "$ref": "#/definitions/lululemon.Store" + }, + "type": "array" } }, "type": "object" }, - "oldnavy.categoryResponseDoc": { + "lululemon.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/oldnavy.CategoryResponse" + "$ref": "#/definitions/lululemon.CategoriesResponse" }, "msg": { "example": "OK", @@ -145857,14 +152867,14 @@ }, "type": "object" }, - "oldnavy.productResponseDoc": { + "lululemon.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/oldnavy.ProductDetailResponse" + "$ref": "#/definitions/lululemon.CategoryResponse" }, "msg": { "example": "OK", @@ -145873,14 +152883,14 @@ }, "type": "object" }, - "oldnavy.productReviewsResponseDoc": { + "lululemon.outfitResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/oldnavy.ProductReviewsResponse" + "$ref": "#/definitions/lululemon.OutfitResponse" }, "msg": { "example": "OK", @@ -145889,14 +152899,14 @@ }, "type": "object" }, - "oldnavy.searchResponseDoc": { + "lululemon.productDetailResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/oldnavy.SearchResponse" + "$ref": "#/definitions/lululemon.ProductDetailResponse" }, "msg": { "example": "OK", @@ -145905,14 +152915,14 @@ }, "type": "object" }, - "oldnavy.storesResponseDoc": { + "lululemon.storesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/oldnavy.StoreResponse" + "$ref": "#/definitions/lululemon.StoresResponse" }, "msg": { "example": "OK", @@ -145921,4507 +152931,4216 @@ }, "type": "object" }, - "opendota.AbilitiesResponse": { + "luma.CalendarDetailResponse": { "properties": { - "abilities": { + "calendar": { + "$ref": "#/definitions/luma.CalendarSummary" + }, + "event_start_ats": { "items": { - "$ref": "#/definitions/opendota.AbilitySummary" + "type": "string" }, "type": "array" }, - "count": { - "example": 50, - "type": "integer" + "featured_items": { + "items": { + "$ref": "#/definitions/luma.EventEntry" + }, + "type": "array" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" + "has_upcoming_events": { + "type": "boolean" }, - "source_url": { - "type": "string" + "tags": { + "items": { + "$ref": "#/definitions/luma.CalendarTag" + }, + "type": "array" }, - "total": { - "example": 2804, - "type": "integer" + "upcoming": { + "$ref": "#/definitions/luma.PlaceEventsResponse" } }, "type": "object" }, - "opendota.AbilitySummary": { + "luma.CalendarSummary": { "properties": { - "behavior": { - "items": { - "type": "string" - }, - "type": "array" - }, - "bkb_pierce": { - "example": "Yes", - "type": "string" - }, - "cooldown": { - "example": "15 12 9 6", + "api_id": { "type": "string" }, - "damage_type": { - "example": "Magical", + "avatar_url": { "type": "string" }, - "description": { + "cover_image_url": { "type": "string" }, - "dispellable": { - "example": "No", + "description_short": { "type": "string" }, - "innate": { - "example": false, + "is_verified": { "type": "boolean" }, - "key": { - "example": "antimage_blink", - "type": "string" - }, - "mana_cost": { - "example": "60 70 80 90", + "name": { "type": "string" }, - "name": { - "example": "Blink", + "slug": { "type": "string" }, - "target_team": { - "example": "Enemy", + "social_image_url": { "type": "string" }, - "target_type": { - "example": "Hero", + "timezone": { "type": "string" } }, "type": "object" }, - "opendota.Benchmark": { + "luma.CalendarTag": { "properties": { - "metric": { - "example": "gold_per_min", + "api_id": { "type": "string" }, - "points": { - "items": { - "$ref": "#/definitions/opendota.BenchmarkPoint" - }, - "type": "array" - } - }, - "type": "object" - }, - "opendota.BenchmarkPoint": { - "properties": { - "percentile": { - "example": 0.5, - "type": "number" + "color": { + "type": "string" }, - "value": { - "example": 545.5, - "type": "number" + "name": { + "type": "string" + }, + "upcoming_event_count": { + "type": "integer" } }, "type": "object" }, - "opendota.BenchmarksResponse": { + "luma.CategoriesResponse": { "properties": { - "benchmarks": { + "entries": { "items": { - "$ref": "#/definitions/opendota.Benchmark" + "$ref": "#/definitions/luma.CategoryEntry" }, "type": "array" }, - "count": { - "example": 10, - "type": "integer" - }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" - }, - "hero_id": { - "example": 1, - "type": "integer" - }, - "hero_name": { - "example": "Anti-Mage", - "type": "string" + "has_more": { + "type": "boolean" }, - "source_url": { + "next_cursor": { "type": "string" } }, "type": "object" }, - "opendota.ConstantEntry": { + "luma.Category": { "properties": { - "balanced": { - "example": true, - "type": "boolean" + "api_id": { + "type": "string" }, - "date": { - "example": "2024-08-14T00:00:00Z", + "description": { "type": "string" }, - "id": { - "example": "2", + "event_count": { + "type": "integer" + }, + "hero_image_desktop_url": { + "type": "string" + }, + "icon_url": { "type": "string" }, "name": { - "example": "game_mode_captains_mode", "type": "string" }, - "value": { - "example": 240, - "type": "integer" - } - }, - "type": "object" - }, - "opendota.ConstantsResponse": { - "properties": { - "count": { - "example": 26, + "num_upcoming_events": { "type": "integer" }, - "entries": { - "items": { - "$ref": "#/definitions/opendota.ConstantEntry" - }, - "type": "array" + "page_title": { + "type": "string" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "simple_icon_url": { "type": "string" }, - "resource": { - "example": "game_mode", + "slug": { "type": "string" }, - "source_url": { + "social_image_url": { + "type": "string" + }, + "tint_color": { "type": "string" } }, "type": "object" }, - "opendota.DistributionsResponse": { + "luma.CategoryDetailResponse": { "properties": { - "count": { - "example": 36, - "type": "integer" - }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" + "category": { + "$ref": "#/definitions/luma.Category" }, - "ranks": { + "featured_calendars": { "items": { - "$ref": "#/definitions/opendota.RankTierRow" + "$ref": "#/definitions/luma.CalendarSummary" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "total_players": { - "example": 8745631, + "num_upcoming_events": { "type": "integer" + }, + "timeline_calendars": { + "items": { + "$ref": "#/definitions/luma.CalendarSummary" + }, + "type": "array" } }, "type": "object" }, - "opendota.DurationBin": { + "luma.CategoryEntry": { "properties": { - "games": { - "example": 2400, - "type": "integer" + "api_id": { + "type": "string" }, - "start_minute": { - "example": 20, - "type": "integer" + "category": { + "$ref": "#/definitions/luma.Category" }, - "win_rate_percent": { - "example": 54.17, - "type": "number" + "event_count": { + "type": "integer" }, - "wins": { - "example": 1300, + "num_upcoming_events": { "type": "integer" } }, "type": "object" }, - "opendota.Hero": { + "luma.EventDetailResponse": { "properties": { - "attack_type": { - "enum": [ - "Melee", - "Ranged" - ], - "example": "Melee", + "api_id": { "type": "string" }, - "id": { - "example": 93, - "type": "integer" + "calendar": { + "$ref": "#/definitions/luma.CalendarSummary" }, - "localized_name": { - "example": "Slark", + "categories": { + "items": { + "$ref": "#/definitions/luma.Category" + }, + "type": "array" + }, + "description": { "type": "string" }, + "event": { + "$ref": "#/definitions/luma.PublicEvent" + }, + "guest_count": { + "type": "integer" + }, + "hosts": { + "items": { + "$ref": "#/definitions/luma.PublicHost" + }, + "type": "array" + }, "name": { - "example": "npc_dota_hero_slark", "type": "string" }, - "primary_attr": { - "enum": [ - "agi", - "all", - "int", - "str" - ], - "example": "agi", + "registration_availability": { "type": "string" + }, + "ticket_info": { + "$ref": "#/definitions/luma.TicketInfo" + }, + "ticket_types": { + "items": { + "$ref": "#/definitions/luma.TicketType" + }, + "type": "array" + }, + "waitlist_active": { + "type": "boolean" } }, "type": "object" }, - "opendota.HeroDurationsResponse": { + "luma.EventEntry": { "properties": { - "bins": { + "api_id": { + "type": "string" + }, + "calendar": { + "$ref": "#/definitions/luma.CalendarSummary" + }, + "event": { + "$ref": "#/definitions/luma.PublicEvent" + }, + "featured_city": { + "$ref": "#/definitions/luma.FeaturedCity" + }, + "guest_count": { + "type": "integer" + }, + "hosts": { "items": { - "$ref": "#/definitions/opendota.DurationBin" + "$ref": "#/definitions/luma.PublicHost" }, "type": "array" }, - "count": { - "example": 23, - "type": "integer" + "registration_availability": { + "type": "string" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "start_at": { "type": "string" }, - "hero_id": { - "example": 1, + "tags": { + "items": { + "$ref": "#/definitions/luma.CalendarTag" + }, + "type": "array" + }, + "ticket_count": { "type": "integer" }, - "source_url": { - "type": "string" + "ticket_info": { + "$ref": "#/definitions/luma.TicketInfo" + }, + "waitlist_active": { + "type": "boolean" } }, "type": "object" }, - "opendota.HeroItemsResponse": { + "luma.FeaturedCity": { "properties": { - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "api_id": { "type": "string" }, - "hero_id": { - "example": 1, - "type": "integer" - }, - "phases": { - "items": { - "$ref": "#/definitions/opendota.ItemPhase" - }, - "type": "array" + "name": { + "type": "string" }, - "source_url": { + "slug": { "type": "string" } }, "type": "object" }, - "opendota.HeroMatchupsResponse": { + "luma.Place": { "properties": { - "count": { - "example": 126, - "type": "integer" + "api_id": { + "type": "string" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "description": { "type": "string" }, - "hero_id": { - "example": 1, + "event_count": { "type": "integer" }, - "matchups": { + "featured_event_api_ids": { "items": { - "$ref": "#/definitions/opendota.HeroRecord" + "type": "string" }, "type": "array" }, - "source_url": { + "geo_continent": { + "type": "string" + }, + "geo_continent_name": { + "type": "string" + }, + "hero_image_desktop_url": { + "type": "string" + }, + "hero_image_mobile_url": { + "type": "string" + }, + "hero_image_square_url": { + "type": "string" + }, + "icon_url": { + "type": "string" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "social_image_url": { + "type": "string" + }, + "timezone": { + "type": "string" + }, + "tint_color": { "type": "string" } }, "type": "object" }, - "opendota.HeroRecord": { + "luma.PlaceCalendarsResponse": { "properties": { - "games": { - "example": 82, - "type": "integer" + "calendars": { + "items": { + "$ref": "#/definitions/luma.CalendarSummary" + }, + "type": "array" + } + }, + "type": "object" + }, + "luma.PlaceEventsResponse": { + "properties": { + "entries": { + "items": { + "$ref": "#/definitions/luma.EventEntry" + }, + "type": "array" }, - "hero_id": { - "example": 17, - "type": "integer" + "has_more": { + "type": "boolean" }, - "localized_name": { - "example": "Storm Spirit", + "next_cursor": { "type": "string" - }, - "win_rate_percent": { - "example": 50, - "type": "number" - }, - "wins": { - "example": 41, - "type": "integer" } }, "type": "object" }, - "opendota.HeroStat": { + "luma.PlaceResponse": { "properties": { - "attack_range": { - "example": 150, - "type": "integer" + "place": { + "$ref": "#/definitions/luma.Place" + } + }, + "type": "object" + }, + "luma.PublicEvent": { + "properties": { + "api_id": { + "type": "string" }, - "attack_type": { - "enum": [ - "Melee", - "Ranged" - ], - "example": "Melee", + "cover_url": { "type": "string" }, - "base_armor": { - "example": 2, - "type": "number" + "end_at": { + "type": "string" }, - "base_attack_max": { - "example": 33, - "type": "integer" + "event_type": { + "type": "string" }, - "base_attack_min": { - "example": 29, - "type": "integer" + "geo_address_info": { + "$ref": "#/definitions/luma.PublicLocation" }, - "base_health": { - "example": 120, - "type": "integer" + "geo_address_visibility": { + "type": "string" }, - "base_mana": { - "example": 75, - "type": "integer" + "location_type": { + "type": "string" }, - "id": { - "example": 1, - "type": "integer" + "name": { + "type": "string" }, - "localized_name": { - "example": "Anti-Mage", + "social_image_url": { "type": "string" }, - "move_speed": { - "example": 310, - "type": "integer" + "start_at": { + "type": "string" }, - "name": { - "example": "npc_dota_hero_antimage", + "timezone": { "type": "string" }, - "primary_attr": { - "enum": [ - "agi", - "all", - "int", - "str" - ], - "example": "agi", + "url": { "type": "string" }, - "pro": { - "$ref": "#/definitions/opendota.PickWin" + "visibility": { + "type": "string" }, - "public": { - "$ref": "#/definitions/opendota.PickWin" + "waitlist_enabled": { + "type": "boolean" }, - "rank_brackets": { - "items": { - "$ref": "#/definitions/opendota.RankBracket" - }, - "type": "array" + "waitlist_status": { + "type": "string" + } + }, + "type": "object" + }, + "luma.PublicHost": { + "properties": { + "avatar_url": { + "type": "string" }, - "roles": { - "example": [ - "Carry" - ], - "items": { - "type": "string" - }, - "type": "array" + "is_verified": { + "type": "boolean" }, - "turbo": { - "$ref": "#/definitions/opendota.PickWin" + "name": { + "type": "string" } }, "type": "object" }, - "opendota.HeroStatsResponse": { + "luma.PublicLocation": { "properties": { - "count": { - "example": 127, - "type": "integer" + "city": { + "type": "string" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "city_state": { "type": "string" }, - "heroes": { - "items": { - "$ref": "#/definitions/opendota.HeroStat" - }, - "type": "array" + "country": { + "type": "string" }, - "source_url": { + "country_code": { + "type": "string" + }, + "region": { + "type": "string" + }, + "region_short": { + "type": "string" + }, + "sublocality": { "type": "string" } }, "type": "object" }, - "opendota.HeroesResponse": { + "luma.TicketInfo": { "properties": { - "count": { - "example": 127, - "type": "integer" + "is_free": { + "type": "boolean" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" + "is_near_capacity": { + "type": "boolean" }, - "heroes": { - "items": { - "$ref": "#/definitions/opendota.Hero" - }, - "type": "array" + "is_sold_out": { + "type": "boolean" }, - "source_url": { + "max_price": { + "$ref": "#/definitions/luma.TicketPrice" + }, + "price": { + "$ref": "#/definitions/luma.TicketPrice" + }, + "require_approval": { + "type": "boolean" + }, + "spots_remaining": { + "type": "integer" + } + }, + "type": "object" + }, + "luma.TicketPrice": { + "properties": { + "cents": { + "type": "integer" + }, + "currency": { "type": "string" + }, + "is_flexible": { + "type": "boolean" } }, "type": "object" }, - "opendota.ItemAbility": { + "luma.TicketType": { "properties": { + "cents": { + "type": "integer" + }, + "currency": { + "type": "string" + }, "description": { "type": "string" }, - "title": { - "example": "Blink", + "is_disabled": { + "type": "boolean" + }, + "is_hidden": { + "type": "boolean" + }, + "max_capacity": { + "type": "integer" + }, + "name": { "type": "string" }, + "require_approval": { + "type": "boolean" + }, + "spots_remaining": { + "type": "integer" + }, "type": { - "example": "active", + "type": "string" + }, + "valid_end_at": { + "type": "string" + }, + "valid_start_at": { "type": "string" } }, "type": "object" }, - "opendota.ItemAttribute": { + "macrumors.AuthorArticle": { "properties": { - "key": { - "example": "blink_range", + "image_url": { "type": "string" }, - "value": { - "example": "1200", + "published_at": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "opendota.ItemCount": { + "macrumors.AuthorResponse": { "properties": { - "count": { - "example": 97, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/macrumors.AuthorArticle" + }, + "type": "array" }, - "item_id": { - "example": 63, - "type": "integer" + "bio": { + "type": "string" + }, + "image_url": { + "type": "string" }, "name": { - "example": "power_treads", + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "opendota.ItemPhase": { + "macys.ProductColor": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/opendota.ItemCount" - }, - "type": "array" + "current_price": { + "type": "number" }, - "phase": { - "enum": [ - "start_game", - "early_game", - "mid_game", - "late_game" - ], - "example": "early_game", + "id": { + "type": "string" + }, + "name": { "type": "string" + }, + "on_sale": { + "type": "boolean" + }, + "regular_price": { + "type": "number" } }, "type": "object" }, - "opendota.ItemSummary": { + "macys.ProductDetailResponse": { "properties": { - "abilities": { + "available": { + "type": "boolean" + }, + "brand": { + "type": "string" + }, + "bullet_points": { "items": { - "$ref": "#/definitions/opendota.ItemAbility" + "type": "string" }, "type": "array" }, - "attributes": { + "categories": { "items": { - "$ref": "#/definitions/opendota.ItemAttribute" + "type": "string" }, "type": "array" }, - "behavior": { - "example": "Point Target", - "type": "string" - }, - "components": { + "colors": { "items": { - "type": "string" + "$ref": "#/definitions/macys.ProductColor" }, "type": "array" }, - "cooldown": { - "example": "15", + "currency_code": { "type": "string" }, - "cost_gold": { - "example": 2250, - "type": "integer" + "current_price": { + "type": "number" }, - "id": { - "example": 1, - "type": "integer" + "department_name": { + "type": "string" }, - "key": { - "example": "blink", + "description": { "type": "string" }, - "mana_cost": { - "example": "0", + "division_name": { + "type": "string" + }, + "fetched_at": { "type": "string" }, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "low_availability": { + "type": "boolean" + }, "name": { - "example": "Blink Dagger", "type": "string" }, - "quality": { - "example": "component", + "on_sale": { + "type": "boolean" + }, + "product_id": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "regular_price": { + "type": "number" + }, + "review_count": { + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "opendota.ItemsResponse": { + "macys.ProductReviewsResponse": { "properties": { + "average_rating": { + "type": "number" + }, "count": { - "example": 50, "type": "integer" }, "fetched_at": { - "example": "2026-10-27T10:00:00Z", "type": "string" }, - "items": { + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "product_id": { + "type": "string" + }, + "rating_count": { + "description": "RatingCount, AverageRating, RecommendedRatio, and RatingHistogram are\nthe product's site-wide aggregate rating summary, not just this page --\nabsent (zero-valued) for a product with no reviews yet.", + "type": "integer" + }, + "rating_histogram": { + "description": "RatingHistogram is the count of ratings per star, ascending: index 0 is\n1-star, index 4 is 5-star.", "items": { - "$ref": "#/definitions/opendota.ItemSummary" + "type": "integer" }, "type": "array" }, - "qualities": { + "recommended_ratio": { + "type": "number" + }, + "reviews": { "items": { - "type": "string" + "$ref": "#/definitions/macys.Review" }, "type": "array" }, "source_url": { "type": "string" }, - "total": { - "example": 501, + "total_pages": { + "type": "integer" + }, + "total_reviews": { "type": "integer" } }, "type": "object" }, - "opendota.League": { + "macys.Review": { "properties": { - "banner": { - "example": "https://cdn.opendota.com/leagues/20395.png", + "author": { + "type": "string" + }, + "body": { "type": "string" }, "id": { - "example": 20395, - "type": "integer" + "type": "string" }, - "name": { - "example": "PARI UNIVERSE by FISSURE", + "location": { "type": "string" }, - "ticket": { - "example": "DPC2023", + "rating": { + "type": "integer" + }, + "ratings_only": { + "description": "RatingsOnly marks a review that carries only a star rating with no\nwritten title/body -- confirmed live 2026-08-11 that Macy's review\nplatform allows these and this endpoint still surfaces them.", + "type": "boolean" + }, + "recommended": { + "type": "boolean" + }, + "submitted_at": { "type": "string" }, - "tier": { - "example": "professional", + "title": { "type": "string" } }, "type": "object" }, - "opendota.LeagueDetailResponse": { + "macys.SuggestResponse": { "properties": { + "count": { + "type": "integer" + }, "fetched_at": { - "example": "2026-10-27T10:00:00Z", "type": "string" }, - "league": { - "$ref": "#/definitions/opendota.League" + "query": { + "type": "string" }, "source_url": { "type": "string" }, - "teams": { + "suggestions": { "items": { - "$ref": "#/definitions/opendota.Team" + "type": "string" }, "type": "array" } }, "type": "object" }, - "opendota.LeagueMatch": { + "macys.productDetailResponseDoc": { "properties": { - "dire_name": { - "example": "LEGION", - "type": "string" - }, - "dire_score": { - "example": 9, - "type": "integer" - }, - "dire_team_id": { - "example": 10291652, - "type": "integer" - }, - "duration_seconds": { - "example": 2052, - "type": "integer" - }, - "league_id": { - "example": 20395, + "code": { + "example": 200, "type": "integer" }, - "match_id": { - "example": 9063495955, - "type": "integer" + "data": { + "$ref": "#/definitions/macys.ProductDetailResponse" }, - "radiant_name": { - "example": "BETBOOM TEAM", + "msg": { + "example": "OK", "type": "string" - }, - "radiant_score": { - "example": 32, - "type": "integer" - }, - "radiant_team_id": { - "example": 8255888, - "type": "integer" - }, - "radiant_win": { - "example": true, - "type": "boolean" - }, - "series_id": { - "example": 1160235, + } + }, + "type": "object" + }, + "macys.productReviewsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "series_type": { - "example": 3, - "type": "integer" + "data": { + "$ref": "#/definitions/macys.ProductReviewsResponse" }, - "start_time": { - "example": "2026-10-26T20:56:07Z", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "opendota.LeagueMatchIDsResponse": { + "macys.suggestResponseDoc": { "properties": { - "count": { - "example": 45, - "type": "integer" - }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" - }, - "league_id": { - "example": 20395, + "code": { + "example": 200, "type": "integer" }, - "match_ids": { - "items": { - "type": "integer" - }, - "type": "array" + "data": { + "$ref": "#/definitions/macys.SuggestResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "opendota.LeagueMatchesResponse": { + "makeuseof.AuthorResponse": { "properties": { - "count": { - "example": 45, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "biography": { "type": "string" }, - "league_id": { - "example": 20395, - "type": "integer" + "image_url": { + "type": "string" }, - "matches": { + "name": { + "type": "string" + }, + "social_links": { "items": { - "$ref": "#/definitions/opendota.LeagueMatch" + "$ref": "#/definitions/valnet.AuthorSocialLink" }, "type": "array" }, - "source_url": { + "title": { "type": "string" }, - "team_id": { - "example": 8255888, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "opendota.LeaguesResponse": { + "marketwatch.AuthorArticle": { "properties": { - "count": { - "example": 10411, - "type": "integer" - }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "title": { "type": "string" }, - "leagues": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "marketwatch.AuthorResponse": { + "properties": { + "articles": { "items": { - "$ref": "#/definitions/opendota.League" + "$ref": "#/definitions/marketwatch.AuthorArticle" }, "type": "array" }, - "source_url": { + "bio": { "type": "string" }, - "tier_filter": { - "example": "professional", + "job_title": { + "type": "string" + }, + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { + "type": "string" + }, + "works_for": { "type": "string" } }, "type": "object" }, - "opendota.LiveMatch": { + "mashable.AuthorResponse": { "properties": { - "delay_seconds": { - "example": 120, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "dire_name": { - "example": "Team Dire", - "type": "string" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "dire_score": { - "example": 26, - "type": "integer" + "has_next_page": { + "type": "boolean" }, - "game_time_seconds": { - "example": 1820, - "type": "integer" + "image_url": { + "type": "string" }, - "last_update_time": { - "example": 1793055400, - "type": "integer" + "name": { + "type": "string" }, - "league_id": { - "example": 19350, + "page": { "type": "integer" }, - "match_id": { - "example": 9063586855, - "type": "integer" + "slug": { + "type": "string" }, - "players": { + "social_links": { "items": { - "$ref": "#/definitions/opendota.LivePlayer" + "$ref": "#/definitions/mashable.AuthorSocialLink" }, "type": "array" }, - "radiant_lead": { - "example": -500, - "type": "integer" - }, - "radiant_name": { - "example": "Team Radiant", + "title": { "type": "string" }, - "radiant_score": { - "example": 31, - "type": "integer" - }, - "spectators": { - "example": 24, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "opendota.LiveMatchesResponse": { + "mashable.AuthorSocialLink": { "properties": { - "count": { - "example": 1, - "type": "integer" - }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "platform": { "type": "string" }, - "matches": { - "items": { - "$ref": "#/definitions/opendota.LiveMatch" - }, - "type": "array" - }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "opendota.LivePlayer": { + "maxpreps.AssociationAffiliation": { "properties": { - "hero_id": { - "example": 93, + "abbreviation": { + "type": "string" + }, + "associationId": { + "type": "string" + }, + "governingScope": { "type": "integer" }, + "isPartner": { + "type": "boolean" + }, + "isStatePrimaryAssociation": { + "type": "boolean" + }, "name": { - "example": "player-name", "type": "string" }, - "team_code": { - "enum": [ - 0, - 1 - ], - "example": 0, - "type": "integer" + "supportingMaterials": { + "items": { + "$ref": "#/definitions/maxpreps.SupportingMaterial" + }, + "type": "array" }, - "team_slot": { - "enum": [ - 1, - 2, - 3, - 4, - 5 - ], - "example": 1, + "type": { "type": "integer" } }, "type": "object" }, - "opendota.MatchDetail": { + "maxpreps.CalculatedFields": { "properties": { - "dire": { - "$ref": "#/definitions/opendota.MatchTeam" + "allowEditContestResults": { + "type": "boolean" }, - "dire_score": { - "example": 9, + "allowReportFinalScore": { + "type": "boolean" + }, + "allowReportInGameScore": { + "type": "boolean" + }, + "bracketGameIndex": { "type": "integer" }, - "duration_seconds": { - "example": 2052, + "bracketGamesInMatchup": { "type": "integer" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "bracketIsPublished": { + "type": "boolean" + }, + "bracketMatchupID": { "type": "string" }, - "league_id": { - "example": 20395, + "bracketName": { + "type": "string" + }, + "calculatedContestResult": { "type": "integer" }, - "league_name": { - "example": "PARI UNIVERSE by FISSURE", + "canonicalUrl": { "type": "string" }, - "match_id": { - "example": 9063495955, - "type": "integer" + "contestAlias": { + "type": "string" }, - "patch": { - "example": 59, - "type": "integer" + "contestDateInGMT": { + "type": "string" }, - "players": { - "items": { - "$ref": "#/definitions/opendota.MatchPlayer" - }, - "type": "array" + "contestId": { + "type": "string" }, - "radiant": { - "$ref": "#/definitions/opendota.MatchTeam" + "contestLength": { + "type": "integer" }, - "radiant_score": { - "example": 32, + "contestState": { "type": "integer" }, - "radiant_win": { - "example": true, - "type": "boolean" + "currentLivePeriod": { + "type": "integer" }, - "source_url": { + "currentLiveTime": { "type": "string" }, - "start_time": { - "example": "2026-10-26T20:56:07Z", + "description": { "type": "string" - } - }, - "type": "object" - }, - "opendota.MatchPlayer": { - "properties": { - "assists": { - "example": 16, - "type": "integer" }, - "deaths": { - "example": 1, - "type": "integer" + "endsOn": { + "type": "string" }, - "denies": { - "example": 12, - "type": "integer" + "hasContestPage": { + "type": "boolean" }, - "gold_per_min": { - "example": 656, - "type": "integer" + "hasGameChangerImportedStats": { + "type": "boolean" }, - "hero_damage": { - "example": 24331, - "type": "integer" + "isDateTba": { + "type": "boolean" }, - "hero_id": { - "example": 93, - "type": "integer" + "isGameChangerConnected": { + "type": "boolean" }, - "is_radiant": { - "example": true, + "isLiveGameInProgress": { "type": "boolean" }, - "kills": { - "example": 5, - "type": "integer" + "isLiveScoringEnabled": { + "type": "boolean" }, - "last_hits": { - "example": 287, - "type": "integer" + "isTimeTba": { + "type": "boolean" }, - "level": { - "example": 28, - "type": "integer" + "mainQwixcoreGameId": { + "type": "string" }, - "name": { - "example": "player-name", + "overtimeAlias": { "type": "string" }, - "net_worth": { - "example": 21553, + "overtimePeriodsPlayed": { "type": "integer" }, - "tower_damage": { - "example": 1234, - "type": "integer" + "overtimeShortAlias": { + "type": "string" }, - "xp_per_min": { - "example": 781, - "type": "integer" + "reportFinalScoreUrl": { + "type": "string" + }, + "reportInGameScoreUrl": { + "type": "string" + }, + "teamsCalculated": { + "items": { + "$ref": "#/definitions/maxpreps.CalculatedTeam" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "tournamentCanonicalUrl": { + "type": "string" + }, + "tournamentName": { + "type": "string" + }, + "tournamentOrganizationName": { + "type": "string" } }, "type": "object" }, - "opendota.MatchTeam": { + "maxpreps.CalculatedTeam": { "properties": { - "id": { - "example": 8255888, + "calculatedTeamContestResult": { "type": "integer" }, - "logo_url": { - "example": "https://cdn.opendota.com/team-logo.png", + "contestId": { "type": "string" }, - "name": { - "example": "BETBOOM TEAM", + "currentLiveScore": { + "type": "integer" + }, + "hasHudlStatsImported": { + "type": "boolean" + }, + "resultString": { "type": "string" }, - "tag": { - "example": "BB", + "standings": { + "type": "string" + }, + "teamId": { "type": "string" } }, "type": "object" }, - "opendota.PatchAbilityChange": { + "maxpreps.Contest": { "properties": { - "key": { - "example": "abaddon_death_coil", + "city": { "type": "string" }, - "notes": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "opendota.PatchHeroChange": { - "properties": { - "abilities": { - "items": { - "$ref": "#/definitions/opendota.PatchAbilityChange" - }, - "type": "array" + "contestId": { + "type": "string" }, - "general": { - "items": { - "type": "string" - }, - "type": "array" + "createdOn": { + "type": "string" }, - "hero_id": { - "example": 102, + "date": { + "type": "string" + }, + "dateCode": { "type": "integer" }, - "key": { - "example": "abaddon", + "details": { + "type": "string" + }, + "gameSource": { + "type": "string" + }, + "hasResult": { + "type": "boolean" + }, + "hasStory": { + "type": "boolean" + }, + "importedOn": { + "type": "string" + }, + "isDeleted": { + "type": "boolean" + }, + "isFlagged": { + "type": "boolean" + }, + "isGow": { + "type": "boolean" + }, + "isMultiTeam": { + "type": "boolean" + }, + "isScheduleImport": { + "type": "boolean" + }, + "isScoreImport": { + "type": "boolean" + }, + "isScoresVerified": { + "type": "boolean" + }, + "location": { + "type": "string" + }, + "modifiedOn": { "type": "string" }, "name": { - "example": "Abaddon", "type": "string" }, - "talents": { + "scoreAddedOn": { + "type": "string" + }, + "scoreSource": { + "type": "string" + }, + "scoreStamp": { + "type": "string" + }, + "shouldBuildNewStory": { + "type": "boolean" + }, + "shouldOverrideConf": { + "type": "boolean" + }, + "sportSeasonId": { + "type": "string" + }, + "state": { + "type": "string" + }, + "storyPickedupOn": { + "type": "string" + }, + "teams": { "items": { - "type": "string" + "$ref": "#/definitions/maxpreps.ContestTeam" }, "type": "array" - } - }, - "type": "object" - }, - "opendota.PatchIndexEntry": { - "properties": { - "heroes_changed": { - "example": 96, - "type": "integer" }, - "items_changed": { - "example": 60, - "type": "integer" - }, - "patch": { - "example": "7_38", + "tournamentBracketId": { "type": "string" }, - "version": { - "example": "7.38", + "tournamentId": { "type": "string" } }, "type": "object" }, - "opendota.PatchItemChange": { + "maxpreps.ContestIDsByDate": { "properties": { - "key": { - "example": "blink", - "type": "string" - }, - "notes": { + "contestIds": { "items": { "type": "string" }, "type": "array" + }, + "date": { + "type": "string" } }, "type": "object" }, - "opendota.PatchNotesResponse": { + "maxpreps.ContestTeam": { "properties": { - "count": { - "example": 116, - "type": "integer" + "address": { + "type": "string" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "address2": { "type": "string" }, - "general": { - "items": { - "type": "string" - }, - "type": "array" + "b1": { + "type": "integer" }, - "heroes": { - "items": { - "$ref": "#/definitions/opendota.PatchHeroChange" - }, - "type": "array" + "b10": { + "type": "integer" }, - "items": { - "items": { - "$ref": "#/definitions/opendota.PatchItemChange" - }, - "type": "array" + "b11": { + "type": "integer" }, - "misc": { - "items": { - "type": "string" - }, - "type": "array" + "b12": { + "type": "integer" }, - "patch": { - "example": "7_38", - "type": "string" + "b13": { + "type": "integer" }, - "patches": { - "items": { - "$ref": "#/definitions/opendota.PatchIndexEntry" - }, - "type": "array" + "b14": { + "type": "integer" }, - "source_url": { - "type": "string" + "b15": { + "type": "integer" }, - "version": { - "example": "7.38", - "type": "string" - } - }, - "type": "object" - }, - "opendota.PickWin": { - "properties": { - "bans": { - "example": 36, + "b16": { "type": "integer" }, - "picks": { - "example": 13, + "b17": { "type": "integer" }, - "win_rate_percent": { - "example": 53.85, - "type": "number" + "b18": { + "type": "integer" }, - "wins": { - "example": 7, + "b19": { "type": "integer" - } - }, - "type": "object" - }, - "opendota.ProMatch": { - "properties": { - "dire_name": { - "example": "LEGION", - "type": "string" }, - "dire_score": { - "example": 9, + "b2": { "type": "integer" }, - "dire_team_id": { - "example": 10291652, + "b20": { "type": "integer" }, - "duration_seconds": { - "example": 2052, + "b21": { "type": "integer" }, - "league_id": { - "example": 20395, + "b22": { "type": "integer" }, - "league_name": { - "example": "PARI UNIVERSE by FISSURE", - "type": "string" + "b23": { + "type": "integer" }, - "match_id": { - "example": 9063495955, + "b24": { "type": "integer" }, - "radiant_name": { - "example": "BETBOOM TEAM", - "type": "string" + "b25": { + "type": "integer" }, - "radiant_score": { - "example": 32, + "b26": { "type": "integer" }, - "radiant_team_id": { - "example": 8255888, + "b27": { "type": "integer" }, - "radiant_win": { - "example": true, - "type": "boolean" + "b28": { + "type": "integer" }, - "series_id": { - "example": 1160235, + "b29": { "type": "integer" }, - "start_time": { - "example": "2026-10-26T20:56:07Z", - "type": "string" + "b3": { + "type": "integer" }, - "version": { - "example": 22, + "b30": { "type": "integer" - } - }, - "type": "object" - }, - "opendota.ProMatchesResponse": { - "properties": { - "count": { - "example": 100, + }, + "b4": { "type": "integer" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" + "b5": { + "type": "integer" }, - "matches": { - "items": { - "$ref": "#/definitions/opendota.ProMatch" - }, - "type": "array" + "b6": { + "type": "integer" }, - "next_less_than_match_id": { - "example": 9055842613, + "b7": { "type": "integer" }, - "source_url": { + "b8": { + "type": "integer" + }, + "b9": { + "type": "integer" + }, + "bFieldsUpdatedOn": { "type": "string" - } - }, - "type": "object" - }, - "opendota.ProPlayer": { - "properties": { - "country_code": { - "example": "US", + }, + "city": { "type": "string" }, - "is_pro": { - "example": true, - "type": "boolean" + "color1": { + "type": "string" }, - "name": { - "example": "player-name", + "color2": { "type": "string" }, - "persona_name": { - "example": "Player Name", + "color3": { "type": "string" }, - "team_id": { - "example": 8255888, + "color4": { + "type": "string" + }, + "contestId": { + "type": "string" + }, + "contestType": { "type": "integer" }, - "team_name": { - "example": "BETBOOM TEAM", + "dnp": { + "type": "boolean" + }, + "dstOffset": { + "type": "integer" + }, + "formattedName": { "type": "string" }, - "team_tag": { - "example": "BETBOOM", + "formattedNameWithoutState": { "type": "string" - } - }, - "type": "object" - }, - "opendota.ProPlayersResponse": { - "properties": { - "count": { - "example": 1, + }, + "hasStats": { + "type": "boolean" + }, + "homeAwayType": { "type": "integer" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "id": { "type": "string" }, - "limit": { - "example": 50, + "index": { "type": "integer" }, - "next_offset": { - "example": 50, - "type": "integer" + "isDeleted": { + "type": "boolean" }, - "offset": { - "example": 0, - "type": "integer" + "isForfeit": { + "type": "boolean" }, - "players": { - "items": { - "$ref": "#/definitions/opendota.ProPlayer" - }, - "type": "array" + "isTeamTBA": { + "type": "boolean" }, - "q": { - "example": "player", + "mascot": { "type": "string" }, - "source_url": { + "name": { "type": "string" }, - "team_id": { - "example": 8255888, + "place": { "type": "integer" }, - "total_count": { - "example": 1, - "type": "integer" - } - }, - "type": "object" - }, - "opendota.RankBracket": { - "properties": { - "bracket": { - "enum": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8 - ], - "example": 5, - "type": "integer" + "result": { + "type": "string" }, - "name": { - "enum": [ - "Herald", - "Guardian", - "Crusader", - "Archon", - "Legend", - "Ancient", - "Divine", - "Immortal" - ], - "example": "Legend", + "resultString": { "type": "string" }, - "picks": { - "example": 173376, + "schoolNameAcronym": { + "type": "string" + }, + "score": { "type": "integer" }, - "win_rate_percent": { - "example": 51.23, - "type": "number" + "scorePrediction": { + "type": "string" }, - "wins": { - "example": 88824, - "type": "integer" - } - }, - "type": "object" - }, - "opendota.RankTierRow": { - "properties": { - "cumulative_percent": { - "example": 46.9, - "type": "number" + "scoresUpdatedOn": { + "type": "string" }, - "cumulative_players": { - "example": 4100000, - "type": "integer" + "sportSeasonId": { + "type": "string" }, - "medal": { - "example": "Legend", + "statEnteredOn": { "type": "string" }, - "players": { - "example": 512000, - "type": "integer" + "statSupplierId": { + "type": "string" }, - "rank_tier": { - "example": 54, - "type": "integer" + "state": { + "type": "string" }, - "share_percent": { - "example": 5.85, - "type": "number" + "teamCanonicalUrl": { + "type": "string" }, - "stars": { - "example": 4, - "type": "integer" - } - }, - "type": "object" - }, - "opendota.RecordRow": { - "properties": { - "hero_id": { - "example": 42, - "type": "integer" + "teamId": { + "type": "string" }, - "hero_name": { - "example": "Wraith King", + "teamModifiedOn": { "type": "string" }, - "match_id": { - "example": 9062756621, - "type": "integer" + "timeZoneId": { + "type": "string" }, - "rank": { - "example": 1, - "type": "integer" + "totalsNeedUpdate": { + "type": "boolean" }, - "score": { - "example": 114, + "utcOffset": { "type": "integer" }, - "start_time": { - "example": "2026-10-24T10:11:37Z", + "zipCode": { "type": "string" } }, "type": "object" }, - "opendota.RecordsResponse": { + "maxpreps.ContextEnum": { "properties": { - "count": { - "example": 100, - "type": "integer" + "id_example": { + "type": "string" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "id_kind": { "type": "string" }, - "field": { - "example": "kills", + "value": { + "type": "string" + } + }, + "type": "object" + }, + "maxpreps.GenderSportGroup": { + "properties": { + "gender": { "type": "string" }, - "rows": { + "sports": { "items": { - "$ref": "#/definitions/opendota.RecordRow" + "$ref": "#/definitions/maxpreps.SportEntry" }, "type": "array" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "opendota.ScenarioRow": { + "maxpreps.GeoPoint": { "properties": { - "games": { - "example": 1023, - "type": "integer" - }, - "hero_id": { - "example": 1, - "type": "integer" + "lat": { + "type": "number" }, - "hero_name": { - "example": "Anti-Mage", + "lon": { + "type": "number" + } + }, + "type": "object" + }, + "maxpreps.HudlInfo": { + "properties": { + "contestId": { "type": "string" }, - "is_radiant": { - "example": true, + "hasHudlStats": { "type": "boolean" }, - "item": { - "example": "bfury", + "hasHudlStatsPending": { + "type": "boolean" + }, + "isHudlConnected": { + "type": "boolean" + } + }, + "type": "object" + }, + "maxpreps.Leader": { + "properties": { + "contextName": { "type": "string" }, - "lane_role": { - "example": 2, + "contextType": { "type": "integer" }, - "region_id": { - "example": 3, + "currentRank": { "type": "integer" }, - "scenario": { - "example": "courier_kill", + "leaderboardCanonicalUrl": { "type": "string" }, - "time_seconds": { - "example": 900, - "type": "integer" + "statHeader": { + "type": "string" }, - "win_rate_percent": { - "example": 49.76, - "type": "number" + "statName": { + "type": "string" }, - "wins": { - "example": 509, - "type": "integer" + "statValue": { + "type": "string" } }, "type": "object" }, - "opendota.ScenariosResponse": { + "maxpreps.LeaderCutoff": { "properties": { - "count": { - "example": 7, + "contextType": { "type": "integer" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" - }, - "kind": { - "enum": [ - "item-timings", - "lane-roles", - "misc" - ], - "example": "item-timings", + "cutoff": { + "type": "integer" + } + }, + "type": "object" + }, + "maxpreps.LeaderMinimum": { + "properties": { + "contextName": { "type": "string" }, - "rows": { - "items": { - "$ref": "#/definitions/opendota.ScenarioRow" - }, - "type": "array" - }, - "source_url": { - "type": "string" + "contextType": { + "type": "integer" }, - "timings": { + "minimums": { "items": { - "type": "integer" + "type": "string" }, "type": "array" - }, - "total": { - "example": 1600, - "type": "integer" } }, "type": "object" }, - "opendota.Team": { + "maxpreps.LeagueStanding": { "properties": { - "delta": { - "example": 4.2, - "type": "number" - }, - "id": { - "example": 8255888, - "type": "integer" - }, - "last_match_id": { - "example": 9063495955, - "type": "integer" + "canonicalUrl": { + "type": "string" }, - "last_match_time": { - "example": "2026-10-26T20:56:07Z", + "conferenceStandingPlacement": { "type": "string" }, - "logo_url": { - "example": "https://cdn.opendota.com/team-logo.png", + "conferenceWinLossTies": { "type": "string" }, - "losses": { - "example": 559, - "type": "integer" + "conferenceWinningPercentage": { + "type": "number" }, - "name": { - "example": "BETBOOM TEAM", + "leagueAlias": { "type": "string" }, - "rating": { - "example": 1271.94, - "type": "number" + "leagueName": { + "type": "string" + } + }, + "type": "object" + }, + "maxpreps.NavLink": { + "properties": { + "description": { + "type": "string" }, - "tag": { - "example": "BETBOOM", + "text": { "type": "string" }, - "wins": { - "example": 707, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "opendota.TeamHeroesResponse": { + "maxpreps.NavSection": { "properties": { - "count": { - "example": 127, - "type": "integer" + "header": { + "type": "string" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "id": { "type": "string" }, - "heroes": { + "links": { "items": { - "$ref": "#/definitions/opendota.HeroRecord" + "$ref": "#/definitions/maxpreps.NavLink" }, "type": "array" - }, - "source_url": { - "type": "string" - }, - "team_id": { - "example": 8255888, - "type": "integer" } }, "type": "object" }, - "opendota.TeamMatch": { + "maxpreps.OverallStanding": { "properties": { - "dire_score": { - "example": 9, - "type": "integer" - }, - "duration_seconds": { - "example": 2052, - "type": "integer" - }, - "league_id": { - "example": 20395, - "type": "integer" - }, - "league_name": { - "example": "PARI UNIVERSE by FISSURE", + "awayWinLossTies": { "type": "string" }, - "match_id": { - "example": 9063495955, - "type": "integer" - }, - "opposing_team_id": { - "example": 10291652, - "type": "integer" + "homeWinLossTies": { + "type": "string" }, - "opposing_team_logo_url": { - "example": "https://cdn.opendota.com/team-logo.png", + "neutralWinLossTies": { "type": "string" }, - "opposing_team_name": { - "example": "LEGION", + "overallWinLossTies": { "type": "string" }, - "radiant": { - "example": true, - "type": "boolean" + "points": { + "type": "integer" }, - "radiant_score": { - "example": 32, + "pointsAgainst": { "type": "integer" }, - "radiant_win": { - "example": true, - "type": "boolean" + "streak": { + "type": "integer" }, - "start_time": { - "example": "2026-10-26T20:56:07Z", + "streakResult": { "type": "string" }, - "team_win": { - "example": true, - "type": "boolean" + "winningPercentage": { + "type": "number" } }, "type": "object" }, - "opendota.TeamMatchesResponse": { + "maxpreps.RankAliases": { "properties": { - "count": { - "example": 1266, - "type": "integer" - }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "athleteAlias": { "type": "string" }, - "matches": { - "items": { - "$ref": "#/definitions/opendota.TeamMatch" - }, - "type": "array" + "divisionAlias": { + "type": "string" }, - "source_url": { + "leagueAlias": { "type": "string" }, - "team_id": { - "example": 8255888, - "type": "integer" + "sectionAlias": { + "type": "string" } }, "type": "object" }, - "opendota.TeamPlayer": { + "maxpreps.RankAssociation": { "properties": { - "games_played": { - "example": 1014, - "type": "integer" + "associationId": { + "type": "string" }, - "is_current_team_member": { - "example": true, - "type": "boolean" + "code": { + "type": "string" }, "name": { - "example": "Save-", "type": "string" }, - "wins": { - "example": 590, - "type": "integer" + "rankingsCanonicalUrl": { + "type": "string" + }, + "scoreboardCanonicalUrl": { + "type": "string" + }, + "sectionId": { + "type": "string" } }, "type": "object" }, - "opendota.TeamPlayersResponse": { + "maxpreps.RankDMA": { "properties": { - "count": { - "example": 28, - "type": "integer" + "dmaId": { + "type": "string" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "name": { "type": "string" }, - "players": { - "items": { - "$ref": "#/definitions/opendota.TeamPlayer" - }, - "type": "array" + "rankingsCanonicalUrl": { + "type": "string" }, - "source_url": { + "scoreboardCanonicalUrl": { "type": "string" }, - "team_id": { - "example": 8255888, - "type": "integer" + "stateCode": { + "type": "string" } }, "type": "object" }, - "opendota.TeamResponse": { + "maxpreps.RankSection": { "properties": { - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "canonicalUrl": { "type": "string" }, - "source_url": { + "name": { "type": "string" }, - "team": { - "$ref": "#/definitions/opendota.Team" + "sectionId": { + "type": "string" } }, "type": "object" }, - "opendota.TeamsResponse": { + "maxpreps.RankSectionDivision": { "properties": { - "count": { - "example": 1000, - "type": "integer" - }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "canonicalUrl": { "type": "string" }, - "next_page": { - "example": 1, - "type": "integer" + "divisionId": { + "type": "string" }, - "page": { - "example": 0, - "type": "integer" + "name": { + "type": "string" }, - "source_url": { + "sectionId": { "type": "string" }, - "teams": { - "items": { - "$ref": "#/definitions/opendota.Team" - }, - "type": "array" + "type": { + "type": "string" } }, "type": "object" }, - "opensea.Account": { + "maxpreps.RankStateDivision": { "properties": { - "address": { - "example": "0x46efbaedc92067e6d60e84ed6395099723252496", + "canonicalUrl": { "type": "string" }, - "display_name": { - "example": "gordongoner", + "divisionId": { "type": "string" }, - "image_url": { + "name": { + "type": "string" + }, + "sectionId": { + "type": "string" + }, + "type": { "type": "string" } }, "type": "object" }, - "opensea.ActivityEvent": { + "maxpreps.RankingEntry": { "properties": { - "chain": { + "lastUpdated": { "type": "string" }, - "collection_name": { + "movement": { "type": "string" }, - "collection_slug": { - "example": "boredapeyachtclub", + "overall": { "type": "string" }, - "contract_address": { - "type": "string" + "rank": { + "type": "integer" }, - "event_time": { - "example": "2026-08-30T08:38:47.235Z", - "type": "string" + "rating": { + "type": "number" }, - "from": { - "$ref": "#/definitions/opensea.Account" + "schoolFormattedName": { + "type": "string" }, - "id": { + "schoolId": { "type": "string" }, - "item_image_url": { + "schoolName": { "type": "string" }, - "item_name": { + "schoolNameAcronym": { "type": "string" }, - "marketplace": { - "example": "opensea", + "stateCode": { "type": "string" }, - "price": { - "$ref": "#/definitions/opensea.Price" + "strength": { + "type": "number" }, - "quantity": { - "example": "1", + "teamLink": { "type": "string" }, - "sale_type": { + "teamSize": { + "type": "integer" + } + }, + "type": "object" + }, + "maxpreps.RankingsBlock": { + "properties": { + "contestAlias": { "type": "string" }, - "to": { - "$ref": "#/definitions/opensea.Account" + "contestPlayedCount": { + "type": "integer" }, - "token_id": { - "example": "3766", + "fullRankingsLink": { "type": "string" }, - "transaction_hash": { + "lastUpdated": { "type": "string" }, - "type": { - "example": "Sale", - "type": "string" - } - }, - "type": "object" - }, - "opensea.ActivityResponse": { - "properties": { - "events": { + "rankings": { "items": { - "$ref": "#/definitions/opensea.ActivityEvent" + "$ref": "#/definitions/maxpreps.RankingEntry" }, "type": "array" }, - "next_page_cursor": { + "season": { "type": "string" }, - "slug": { - "example": "boredapeyachtclub", + "sportSeasonId": { "type": "string" }, - "token_id": { + "sportSeasonName": { + "type": "string" + }, + "totalCount": { + "type": "integer" + }, + "year": { "type": "string" } }, "type": "object" }, - "opensea.CategoriesResponse": { + "maxpreps.RankingsGroupingsData": { "properties": { - "categories": { + "aliases": { + "$ref": "#/definitions/maxpreps.RankAliases" + }, + "associations": { "items": { - "$ref": "#/definitions/opensea.Category" + "$ref": "#/definitions/maxpreps.RankAssociation" }, "type": "array" - } - }, - "type": "object" - }, - "opensea.Category": { - "properties": { - "children": { + }, + "dmas": { "items": { - "$ref": "#/definitions/opensea.CategoryChild" + "$ref": "#/definitions/maxpreps.RankDMA" }, "type": "array" }, - "slug": { - "example": "collections", - "type": "string" - } - }, - "type": "object" - }, - "opensea.CategoryChild": { - "properties": { - "display_name": { - "example": "PFPs", + "sectionDivisions": { + "items": { + "$ref": "#/definitions/maxpreps.RankSectionDivision" + }, + "type": "array" + }, + "sections": { + "items": { + "$ref": "#/definitions/maxpreps.RankSection" + }, + "type": "array" + }, + "sportSeasonId": { "type": "string" }, - "slug": { - "example": "pfps", + "stateCode": { "type": "string" + }, + "stateDivisions": { + "items": { + "$ref": "#/definitions/maxpreps.RankStateDivision" + }, + "type": "array" } }, "type": "object" }, - "opensea.Chain": { + "maxpreps.RankingsGroupingsResponse": { "properties": { - "arch": { - "example": "EVM", + "cacheResult": { "type": "string" }, - "identifier": { - "example": "ethereum", + "count": { + "type": "integer" + }, + "data": { + "$ref": "#/definitions/maxpreps.RankingsGroupingsData" + }, + "fetched_at": { "type": "string" }, - "name": { - "example": "Ethereum", + "message": { "type": "string" + }, + "source_url": { + "type": "string" + }, + "status": { + "type": "integer" } }, "type": "object" }, - "opensea.ChainsResponse": { + "maxpreps.RequestEnumsData": { "properties": { - "chains": { + "contexts": { "items": { - "$ref": "#/definitions/opensea.Chain" + "$ref": "#/definitions/maxpreps.ContextEnum" + }, + "type": "array" + }, + "discovery_notes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "gender_sports": { + "items": { + "type": "string" + }, + "type": "array" + }, + "genders": { + "items": { + "type": "string" + }, + "type": "array" + }, + "levels": { + "items": { + "type": "string" + }, + "type": "array" + }, + "rankings_types": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sort_orders": { + "items": { + "type": "string" + }, + "type": "array" + }, + "state_codes": { + "items": { + "type": "string" }, "type": "array" + }, + "verified_on": { + "type": "string" } }, "type": "object" }, - "opensea.ChartPoint": { + "maxpreps.RequestEnumsResponse": { "properties": { - "currency": { - "example": "ETH", + "cacheResult": { "type": "string" }, - "time": { - "example": "2026-08-23T13:11:15.715Z", + "count": { + "type": "integer" + }, + "data": { + "$ref": "#/definitions/maxpreps.RequestEnumsData" + }, + "fetched_at": { "type": "string" }, - "usd": { - "example": 19182.64, - "type": "number" + "message": { + "type": "string" }, - "value": { - "example": 7.899, - "type": "number" + "source_url": { + "type": "string" + }, + "status": { + "type": "integer" } }, "type": "object" }, - "opensea.ChartResponse": { + "maxpreps.ScheduleEntry": { "properties": { - "metric": { - "example": "floor_price", - "type": "string" - }, - "points": { - "items": { - "$ref": "#/definitions/opensea.ChartPoint" - }, - "type": "array" + "calculatedFields": { + "$ref": "#/definitions/maxpreps.CalculatedFields" }, - "slug": { - "example": "boredapeyachtclub", - "type": "string" + "contest": { + "$ref": "#/definitions/maxpreps.Contest" }, - "timeframe": { - "example": "SEVEN_DAYS", - "type": "string" + "hudlInfo": { + "$ref": "#/definitions/maxpreps.HudlInfo" } }, "type": "object" }, - "opensea.Collection": { + "maxpreps.School": { "properties": { - "banner_image_url": { + "address": { "type": "string" }, - "category": { - "example": "PFPS", + "canonicalUrl": { "type": "string" }, - "chain": { - "example": "ethereum", + "city": { "type": "string" }, - "contract_address": { - "example": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d", + "color1": { "type": "string" }, - "created_at": { - "example": "2021-04-22T23:14:24.000Z", + "color2": { "type": "string" }, - "description": { + "color3": { "type": "string" }, - "discord_url": { + "color4": { "type": "string" }, - "external_url": { + "colorName1": { "type": "string" }, - "floor_price": { - "$ref": "#/definitions/opensea.Price" + "colorName2": { + "type": "string" }, - "id": { - "example": "46188685bcac4206ace63c9d017abbb7", + "colorName3": { "type": "string" }, - "image_url": { + "colorName4": { "type": "string" }, - "instagram_username": { + "dstOffset": { + "type": "integer" + }, + "enrollment": { + "type": "integer" + }, + "formattedName": { "type": "string" }, - "is_verified": { - "example": true, - "type": "boolean" + "formattedNameWithoutState": { + "type": "string" }, - "name": { - "example": "Bored Ape Yacht Club", + "fullName": { "type": "string" }, - "slug": { - "example": "boredapeyachtclub", + "gender": { "type": "string" }, - "stats": { - "$ref": "#/definitions/opensea.CollectionStats" + "isDeleted": { + "type": "boolean" }, - "top_offer": { - "$ref": "#/definitions/opensea.Price" + "isFootballMascotHelmetAvailable": { + "type": "boolean" }, - "twitter_username": { + "isHistoricalOnly": { + "type": "boolean" + }, + "isNameUnique": { + "type": "boolean" + }, + "isPseudoSchool": { + "type": "boolean" + }, + "latitude": { + "type": "number" + }, + "location": { + "$ref": "#/definitions/maxpreps.GeoPoint" + }, + "longitude": { + "type": "number" + }, + "mascot": { "type": "string" - } - }, - "type": "object" - }, - "opensea.CollectionHoldersResponse": { - "properties": { - "holders": { - "items": { - "$ref": "#/definitions/opensea.Holder" - }, - "type": "array" }, - "next_page_cursor": { + "name": { "type": "string" }, - "slug": { - "example": "boredapeyachtclub", + "nameAcronym": { "type": "string" - } - }, - "type": "object" - }, - "opensea.CollectionItemsResponse": { - "properties": { - "items": { + }, + "publishedSportSeasonIds": { "items": { - "$ref": "#/definitions/opensea.Item" + "type": "string" }, "type": "array" }, - "next_page_cursor": { - "type": "string" - }, - "slug": { - "example": "boredapeyachtclub", - "type": "string" - } - }, - "type": "object" - }, - "opensea.CollectionItemsShelfResponse": { - "properties": { - "items": { + "publishedTeams": { "items": { - "$ref": "#/definitions/opensea.Item" + "$ref": "#/definitions/maxpreps.SchoolTeamRef" }, "type": "array" }, - "shelf": { - "example": "best_deals", - "type": "string" + "ranking": { + "type": "integer" }, - "slug": { - "example": "boredapeyachtclub", - "type": "string" - } - }, - "type": "object" - }, - "opensea.CollectionOffersResponse": { - "properties": { - "next_page_cursor": { + "schoolId": { "type": "string" }, - "offers": { + "shouldAppendHighSchoolString": { + "type": "boolean" + }, + "sportSeasonIds": { "items": { - "$ref": "#/definitions/opensea.OfferAggregate" + "type": "string" }, "type": "array" }, - "slug": { - "example": "boredapeyachtclub", + "state": { "type": "string" }, - "total_currency": { - "example": "WETH", + "stateCode": { "type": "string" }, - "total_offers": { - "example": 314, - "type": "integer" + "stateId": { + "type": "string" }, - "total_value_token": { - "example": 55.0032, - "type": "number" + "stateName": { + "type": "string" }, - "total_value_usd": { - "example": 135216.02, - "type": "number" - } - }, - "type": "object" - }, - "opensea.CollectionSearchResponse": { - "properties": { - "collections": { + "statePlaysIn": { + "type": "string" + }, + "teams": { "items": { - "$ref": "#/definitions/opensea.CollectionSummary" + "$ref": "#/definitions/maxpreps.SchoolTeamRef" }, "type": "array" }, - "query": { - "example": "ape", + "timeZoneId": { "type": "string" - } - }, - "type": "object" - }, - "opensea.CollectionShelfResponse": { - "properties": { - "collections": { - "items": { - "$ref": "#/definitions/opensea.CollectionSummary" - }, - "type": "array" }, - "next_page_cursor": { + "type": { "type": "string" }, - "shelf": { - "example": "top_movers", + "utcOffset": { + "type": "integer" + }, + "zipCode": { "type": "string" } }, "type": "object" }, - "opensea.CollectionStats": { + "maxpreps.SchoolContest": { "properties": { - "listed_item_count": { - "example": 298, + "bracketGameIndex": { "type": "integer" }, - "one_day": { - "$ref": "#/definitions/opensea.WindowStats" + "canonicalUrl": { + "type": "string" }, - "one_hour": { - "$ref": "#/definitions/opensea.WindowStats" + "contestId": { + "type": "string" }, - "sales": { - "example": 57369, + "contestIsLive": { + "type": "boolean" + }, + "contestState": { "type": "integer" }, - "seven_days": { - "$ref": "#/definitions/opensea.WindowStats" + "gender": { + "type": "string" }, - "thirty_days": { - "$ref": "#/definitions/opensea.WindowStats" + "hasResult": { + "type": "boolean" }, - "total_supply": { - "example": 9998, + "homeAwayType": { "type": "integer" }, - "unique_item_count": { - "example": 9998, - "type": "integer" + "isDateTba": { + "type": "boolean" }, - "volume_currency": { - "example": "ETH", + "isTimeTba": { + "type": "boolean" + }, + "season": { "type": "string" }, - "volume_native": { - "example": 1580610.96, - "type": "number" + "sport": { + "type": "string" }, - "volume_usd": { - "example": 3756342321.66, - "type": "number" + "teamLevel": { + "type": "string" + }, + "teams": { + "items": { + "$ref": "#/definitions/maxpreps.SchoolContestTeam" + }, + "type": "array" + }, + "timestamp": { + "type": "string" + }, + "year": { + "type": "string" } }, "type": "object" }, - "opensea.CollectionSummary": { + "maxpreps.SchoolContestTeam": { "properties": { - "category": { - "example": "PFPS", - "type": "string" + "isForfeit": { + "type": "boolean" }, - "chain": { - "example": "ethereum", - "type": "string" + "isTeamTBA": { + "type": "boolean" }, - "contract_address": { + "record": { "type": "string" }, - "floor_price": { - "$ref": "#/definitions/opensea.Price" + "result": { + "type": "string" }, - "id": { + "schoolColor": { "type": "string" }, - "image_url": { + "schoolName": { "type": "string" }, - "is_verified": { - "type": "boolean" + "schoolNameAcronym": { + "type": "string" }, - "markets": { - "items": { - "$ref": "#/definitions/opensea.MarketListing" - }, - "type": "array" + "score": { + "type": "integer" }, - "name": { - "example": "Bored Ape Yacht Club", + "sportSeasonId": { "type": "string" }, - "slug": { - "example": "boredapeyachtclub", + "teamCanonicalUrl": { "type": "string" }, - "stats": { - "$ref": "#/definitions/opensea.CollectionStats" + "teamId": { + "type": "string" } }, "type": "object" }, - "opensea.CollectionTopSalesResponse": { + "maxpreps.SchoolContestsResponse": { "properties": { - "sales": { + "cacheResult": { + "type": "string" + }, + "count": { + "type": "integer" + }, + "data": { "items": { - "$ref": "#/definitions/opensea.ActivityEvent" + "$ref": "#/definitions/maxpreps.SchoolContest" }, "type": "array" }, - "slug": { - "example": "boredapeyachtclub", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "opensea.CollectionTrait": { - "properties": { - "comparison_operator": { + }, + "message": { "type": "string" }, - "trait_type": { - "example": "Background", + "source_url": { "type": "string" }, - "values": { - "items": { - "$ref": "#/definitions/opensea.TraitValue" - }, - "type": "array" + "status": { + "type": "integer" } }, "type": "object" }, - "opensea.CollectionTraitOffersResponse": { + "maxpreps.SchoolDetail": { "properties": { - "next_page_cursor": { + "additionalInfo": { "type": "string" }, - "offers": { - "items": { - "$ref": "#/definitions/opensea.TraitOfferAggregate" - }, - "type": "array" - }, - "slug": { - "example": "boredapeyachtclub", + "address": { "type": "string" }, - "total_currency": { - "example": "WETH", + "address2": { "type": "string" }, - "total_offers": { - "example": 6, - "type": "integer" - }, - "total_value_token": { - "example": 96.13, - "type": "number" + "addressNote": { + "type": "string" }, - "total_value_usd": { - "example": 96.13, - "type": "number" - } - }, - "type": "object" - }, - "opensea.CollectionTraitsResponse": { - "properties": { - "next_page_cursor": { + "associationGoverningBodyAbbreviation": { "type": "string" }, - "slug": { - "example": "boredapeyachtclub", + "associationGoverningBodyName": { "type": "string" }, - "traits": { - "items": { - "$ref": "#/definitions/opensea.CollectionTrait" - }, - "type": "array" - } - }, - "type": "object" - }, - "opensea.CollectionsResponse": { - "properties": { - "collections": { - "items": { - "$ref": "#/definitions/opensea.CollectionSummary" - }, - "type": "array" - } - }, - "type": "object" - }, - "opensea.DepthLevel": { - "properties": { - "price": { - "$ref": "#/definitions/opensea.Price" + "associationGoverningBodyUrl": { + "type": "string" }, - "quantity": { - "example": 2, - "type": "integer" - } - }, - "type": "object" - }, - "opensea.DepthResponse": { - "properties": { - "chain": { + "associationId": { "type": "string" }, - "contract_address": { + "associationName": { "type": "string" }, - "listings": { - "items": { - "$ref": "#/definitions/opensea.DepthLevel" - }, - "type": "array" + "canonicalUrl": { + "type": "string" }, - "offers": { - "items": { - "$ref": "#/definitions/opensea.DepthLevel" - }, - "type": "array" + "city": { + "type": "string" }, - "slug": { - "example": "boredapeyachtclub", + "color1": { "type": "string" }, - "token_id": { + "color2": { "type": "string" - } - }, - "type": "object" - }, - "opensea.Drop": { - "properties": { - "chain": { - "example": "base", + }, + "color3": { "type": "string" }, - "collection": { - "$ref": "#/definitions/opensea.CollectionSummary" + "color4": { + "type": "string" }, - "contract_address": { + "colorName1": { "type": "string" }, - "type": { - "example": "Erc721SeaDropV1", + "colorName2": { "type": "string" - } - }, - "type": "object" - }, - "opensea.DropsResponse": { - "properties": { - "drops": { - "items": { - "$ref": "#/definitions/opensea.Drop" - }, - "type": "array" }, - "next_page_cursor": { + "colorName3": { "type": "string" }, - "type": { - "example": "UPCOMING", + "colorName4": { "type": "string" - } - }, - "type": "object" - }, - "opensea.Holder": { - "properties": { - "account": { - "$ref": "#/definitions/opensea.Account" }, - "quantity": { - "example": 143, + "dstOffset": { "type": "integer" - } - }, - "type": "object" - }, - "opensea.Item": { - "properties": { - "best_listing": { - "$ref": "#/definitions/opensea.Price" }, - "best_offer": { - "$ref": "#/definitions/opensea.Price" + "enrollment": { + "type": "integer" }, - "chain": { - "example": "ethereum", + "formattedName": { "type": "string" }, - "collection_name": { - "example": "Bored Ape Yacht Club", + "formattedNameWithoutState": { "type": "string" }, - "collection_slug": { - "example": "boredapeyachtclub", + "fullName": { "type": "string" }, - "contract_address": { + "gender": { "type": "string" }, - "created_at": { + "isDeleted": { + "type": "boolean" + }, + "isFootballMascotHelmetAvailable": { + "type": "boolean" + }, + "isHistoricalOnly": { + "type": "boolean" + }, + "isImported": { + "type": "boolean" + }, + "isNameUnique": { + "type": "boolean" + }, + "isPseudoSchool": { + "type": "boolean" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "mascot": { "type": "string" }, - "description": { + "name": { "type": "string" }, - "id": { + "nameAcronym": { "type": "string" }, - "image_url": { + "orgType": { "type": "string" }, - "is_fungible": { + "schoolId": { + "type": "string" + }, + "schoolLevel": { + "type": "string" + }, + "shouldAppendHighSchoolString": { "type": "boolean" }, - "last_sale": { - "$ref": "#/definitions/opensea.Price" + "state": { + "type": "string" }, - "last_sale_at": { + "stateCode": { "type": "string" }, - "marketplace": { - "example": "opensea", + "stateId": { "type": "string" }, - "name": { - "example": "#1", + "stateName": { "type": "string" }, - "owner": { - "$ref": "#/definitions/opensea.Account" + "statePlaysIn": { + "type": "string" }, - "rarity_rank": { - "example": 1204, + "timeZoneId": { + "type": "string" + }, + "type": { + "type": "string" + }, + "utcOffset": { "type": "integer" }, - "token_id": { - "example": "1", + "zip": { "type": "string" }, - "traits": { - "items": { - "$ref": "#/definitions/opensea.Trait" - }, - "type": "array" + "zipCode": { + "type": "string" } }, "type": "object" }, - "opensea.ItemOrdersResponse": { + "maxpreps.SchoolProximalResponse": { "properties": { - "chain": { - "example": "ethereum", - "type": "string" - }, - "contract_address": { - "example": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d", + "cacheResult": { "type": "string" }, - "next_page_cursor": { - "type": "string" + "count": { + "type": "integer" }, - "orders": { + "data": { "items": { - "$ref": "#/definitions/opensea.Order" + "$ref": "#/definitions/maxpreps.School" }, "type": "array" }, - "token_id": { - "example": "1", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "opensea.ItemOwner": { - "properties": { - "account": { - "$ref": "#/definitions/opensea.Account" }, - "quantity": { - "example": "1", + "message": { + "type": "string" + }, + "source_url": { "type": "string" + }, + "status": { + "type": "integer" } }, "type": "object" }, - "opensea.ItemOwnersResponse": { + "maxpreps.SchoolResponse": { "properties": { - "chain": { - "example": "ethereum", + "cacheResult": { "type": "string" }, - "contract_address": { - "type": "string" + "count": { + "type": "integer" }, - "has_more": { - "type": "boolean" + "data": { + "$ref": "#/definitions/maxpreps.SchoolDetail" }, - "next_page_cursor": { + "fetched_at": { "type": "string" }, - "owners": { - "items": { - "$ref": "#/definitions/opensea.ItemOwner" - }, - "type": "array" + "message": { + "type": "string" }, - "token_id": { - "example": "1", + "source_url": { "type": "string" }, - "total_owners": { - "example": 1, + "status": { "type": "integer" } }, "type": "object" }, - "opensea.ItemSearchResponse": { + "maxpreps.SchoolSearchResponse": { "properties": { - "items": { + "cacheResult": { + "type": "string" + }, + "count": { + "type": "integer" + }, + "data": { "items": { - "$ref": "#/definitions/opensea.Item" + "$ref": "#/definitions/maxpreps.School" }, "type": "array" }, - "query": { - "example": "gold", + "fetched_at": { "type": "string" }, - "slug": { - "example": "boredapeyachtclub", + "message": { "type": "string" - } - }, - "type": "object" - }, - "opensea.MarketListing": { - "properties": { - "listed_item_count": { - "example": 190, - "type": "integer" }, - "marketplace": { - "example": "opensea", + "source_url": { "type": "string" }, - "name": { - "example": "OpenSea", - "type": "string" + "status": { + "type": "integer" } }, "type": "object" }, - "opensea.OfferAggregate": { + "maxpreps.SchoolSeason": { "properties": { - "id": { + "allSeasonId": { "type": "string" }, - "price": { - "$ref": "#/definitions/opensea.Price" + "athleteAlias": { + "type": "string" }, - "total_offers": { - "example": 1, - "type": "integer" - } - }, - "type": "object" - }, - "opensea.Order": { - "properties": { - "end_time": { + "canonicalUrl": { "type": "string" }, - "id": { + "contestAlias": { "type": "string" }, - "maker": { - "$ref": "#/definitions/opensea.Account" + "gender": { + "type": "string" }, - "marketplace": { - "example": "opensea", + "genderId": { "type": "string" }, - "price": { - "$ref": "#/definitions/opensea.Price" + "isActive": { + "type": "boolean" }, - "quantity": { - "example": "1", - "type": "string" + "isFullyCovered": { + "type": "boolean" }, - "start_time": { - "type": "string" - } - }, - "type": "object" - }, - "opensea.Price": { - "properties": { - "amount": { - "example": 7.85, - "type": "number" + "isNational": { + "type": "boolean" }, - "chain": { - "example": "ethereum", + "isPublished": { + "type": "boolean" + }, + "level": { "type": "string" }, - "contract_address": { - "example": "0x0000000000000000000000000000000000000000", + "levelId": { "type": "string" }, - "currency": { - "example": "ETH", + "name": { "type": "string" }, - "usd": { - "example": 19295.3, - "type": "number" - } - }, - "type": "object" - }, - "opensea.Profile": { - "properties": { - "address": { - "example": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045", + "schoolId": { "type": "string" }, - "banner_image_url": { + "season": { "type": "string" }, - "display_name": { - "example": "vitalik.eth", + "seasonId": { "type": "string" }, - "external_url": { + "sport": { "type": "string" }, - "image_url": { + "sportId": { "type": "string" }, - "is_verified": { - "type": "boolean" + "sportSeasonId": { + "type": "string" }, - "kind": { - "example": "WALLET", + "teamLevel": { "type": "string" }, - "twitter_username": { + "teamLevelId": { "type": "string" }, - "username": { + "year": { "type": "string" } }, "type": "object" }, - "opensea.ProfileCollection": { + "maxpreps.SchoolSeasonsResponse": { "properties": { - "collection": { - "$ref": "#/definitions/opensea.CollectionSummary" - }, - "item_count": { - "example": 1, - "type": "integer" + "cacheResult": { + "type": "string" }, - "total_quantity": { - "example": 1, + "count": { "type": "integer" - } - }, - "type": "object" - }, - "opensea.ProfileCollectionsResponse": { - "properties": { - "address": { - "type": "string" }, - "collections": { + "data": { "items": { - "$ref": "#/definitions/opensea.ProfileCollection" + "$ref": "#/definitions/maxpreps.SchoolSeason" }, "type": "array" }, - "next_page_cursor": { - "type": "string" - } - }, - "type": "object" - }, - "opensea.ProfileItemsResponse": { - "properties": { - "address": { - "example": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045", + "fetched_at": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/opensea.Item" - }, - "type": "array" + "message": { + "type": "string" }, - "next_page_cursor": { + "source_url": { "type": "string" }, - "total_items": { - "example": 3441, + "status": { "type": "integer" } }, "type": "object" }, - "opensea.RankedCollection": { + "maxpreps.SchoolTeamRef": { "properties": { - "collection": { - "$ref": "#/definitions/opensea.CollectionSummary" + "allSeasonId": { + "type": "string" }, - "score": { - "example": "28.3713030851", + "gender": { + "type": "string" + }, + "isPublished": { + "type": "boolean" + }, + "sport": { + "type": "string" + }, + "sportSeasonId": { + "type": "string" + }, + "teamLevel": { + "type": "string" + }, + "year": { "type": "string" } }, "type": "object" }, - "opensea.RankingsResponse": { + "maxpreps.SchoolZipSearchResponse": { "properties": { - "collections": { + "cacheResult": { + "type": "string" + }, + "count": { + "type": "integer" + }, + "data": { "items": { - "$ref": "#/definitions/opensea.RankedCollection" + "$ref": "#/definitions/maxpreps.School" }, "type": "array" }, - "next_page_cursor": { + "fetched_at": { "type": "string" }, - "ranking": { - "example": "TRENDING", + "message": { "type": "string" }, - "timeframe": { - "example": "ONE_DAY", + "source_url": { "type": "string" + }, + "status": { + "type": "integer" } }, "type": "object" }, - "opensea.SocialProofResponse": { + "maxpreps.ScoreboardData": { "properties": { - "notable_collectors": { + "contestIdsByDate": { "items": { - "$ref": "#/definitions/opensea.Account" + "$ref": "#/definitions/maxpreps.ContestIDsByDate" }, "type": "array" }, - "slug": { - "example": "boredapeyachtclub", + "scoreboardCanonicalUrlToday": { "type": "string" }, - "social_count": { - "example": 5605, - "type": "integer" - } - }, - "type": "object" - }, - "opensea.Trait": { - "properties": { - "trait_type": { - "example": "Background", + "scoreboardCanonicalUrlTomorrow": { "type": "string" }, - "value": { - "example": "Orange", + "scoreboardCanonicalUrlYesterday": { "type": "string" } }, "type": "object" }, - "opensea.TraitOfferAggregate": { + "maxpreps.ScoreboardResponse": { "properties": { - "id": { + "cacheResult": { "type": "string" }, - "price": { - "$ref": "#/definitions/opensea.Price" - }, - "total_offers": { - "example": 1, + "count": { "type": "integer" }, - "trait_type": { - "example": "Fur", + "data": { + "$ref": "#/definitions/maxpreps.ScoreboardData" + }, + "fetched_at": { "type": "string" }, - "trait_value": { - "example": "Solid Gold", + "message": { "type": "string" - } - }, - "type": "object" - }, - "opensea.TraitValue": { - "properties": { - "count": { - "example": 1170, - "type": "integer" }, - "value": { - "example": "Gray", + "source_url": { "type": "string" + }, + "status": { + "type": "integer" } }, "type": "object" }, - "opensea.WindowStats": { + "maxpreps.SeasonNavigationData": { "properties": { - "floor_price_change": { - "example": 0.0065, - "type": "number" - }, - "sales": { - "example": 42, - "type": "integer" + "allSeasonId": { + "type": "string" }, - "volume_native": { - "example": 318.4, - "type": "number" + "season": { + "type": "string" }, - "volume_usd": { - "example": 782344.1, - "type": "number" + "sections": { + "items": { + "$ref": "#/definitions/maxpreps.NavSection" + }, + "type": "array" } }, "type": "object" }, - "opensea.activityResponseDoc": { + "maxpreps.SeasonNavigationResponse": { "properties": { - "code": { - "example": 200, + "cacheResult": { + "type": "string" + }, + "count": { "type": "integer" }, "data": { - "$ref": "#/definitions/opensea.ActivityResponse" + "$ref": "#/definitions/maxpreps.SeasonNavigationData" }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "opensea.categoriesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/opensea.CategoriesResponse" + "message": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" + }, + "status": { + "type": "integer" } }, "type": "object" }, - "opensea.chainsResponseDoc": { + "maxpreps.SportEntry": { "properties": { - "code": { - "example": 200, - "type": "integer" + "allSeasonId": { + "type": "string" }, - "data": { - "$ref": "#/definitions/opensea.ChainsResponse" + "formattedSportSeasonName": { + "type": "string" }, - "msg": { - "example": "OK", + "genderSport": { "type": "string" - } - }, - "type": "object" - }, - "opensea.chartResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/opensea.ChartResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "publicUrl": { "type": "string" - } - }, - "type": "object" - }, - "opensea.collectionHoldersResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/opensea.CollectionHoldersResponse" + "scheduleModel": { + "type": "string" }, - "msg": { - "example": "OK", + "statModel": { "type": "string" } }, "type": "object" }, - "opensea.collectionItemsResponseDoc": { + "maxpreps.SportMetadata": { "properties": { + "athleteName": { + "type": "string" + }, "code": { - "example": 200, - "type": "integer" + "type": "string" }, - "data": { - "$ref": "#/definitions/opensea.CollectionItemsResponse" + "contestName": { + "type": "string" }, - "msg": { - "example": "OK", + "defaultGender": { "type": "string" - } - }, - "type": "object" - }, - "opensea.collectionOffersResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/opensea.CollectionOffersResponse" + "fullCovered": { + "type": "boolean" }, - "msg": { - "example": "OK", + "groupName": { "type": "string" - } - }, - "type": "object" - }, - "opensea.collectionResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/opensea.Collection" + "hasJerseyNumbers": { + "type": "boolean" }, - "msg": { - "example": "OK", + "name": { "type": "string" - } - }, - "type": "object" - }, - "opensea.collectionSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/opensea.CollectionSearchResponse" + "overtimeAlias": { + "type": "string" }, - "msg": { - "example": "OK", + "overtimePeriodCountsIncludeRegulationPeriods": { + "type": "boolean" + }, + "overtimeShortAlias": { "type": "string" - } - }, - "type": "object" - }, - "opensea.collectionShelfResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/opensea.CollectionShelfResponse" + "participatingVerb": { + "type": "string" }, - "msg": { - "example": "OK", + "periodAlias": { "type": "string" - } - }, - "type": "object" - }, - "opensea.collectionTopSalesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/opensea.CollectionTopSalesResponse" + "pointAlias": { + "type": "string" }, - "msg": { - "example": "OK", + "scheduleModel": { "type": "string" - } - }, - "type": "object" - }, - "opensea.collectionTraitOffersResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/opensea.CollectionTraitOffersResponse" + "shortCode": { + "type": "string" }, - "msg": { - "example": "OK", + "singleGender": { + "type": "boolean" + }, + "sportId": { "type": "string" - } - }, - "type": "object" - }, - "opensea.collectionTraitsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/opensea.CollectionTraitsResponse" + "statModel": { + "type": "string" }, - "msg": { - "example": "OK", + "tiebreakerAlias": { + "type": "string" + }, + "value": { "type": "string" } }, "type": "object" }, - "opensea.collectionsResponseDoc": { + "maxpreps.SportsResponse": { "properties": { - "code": { - "example": 200, + "cacheResult": { + "type": "string" + }, + "count": { "type": "integer" }, "data": { - "$ref": "#/definitions/opensea.CollectionsResponse" + "items": { + "$ref": "#/definitions/maxpreps.GenderSportGroup" + }, + "type": "array" }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "opensea.depthResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/opensea.DepthResponse" + "message": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" + }, + "status": { + "type": "integer" } }, "type": "object" }, - "opensea.dropsResponseDoc": { + "maxpreps.StandingsBlock": { "properties": { - "code": { - "example": 200, - "type": "integer" + "leagueStanding": { + "$ref": "#/definitions/maxpreps.LeagueStanding" }, - "data": { - "$ref": "#/definitions/opensea.DropsResponse" + "overallStanding": { + "$ref": "#/definitions/maxpreps.OverallStanding" }, - "msg": { - "example": "OK", + "year": { "type": "string" } }, "type": "object" }, - "opensea.itemOrdersResponseDoc": { + "maxpreps.State": { "properties": { + "abbreviation": { + "type": "string" + }, + "areaID": { + "type": "string" + }, + "canonicalUrl": { + "type": "string" + }, + "coachAssociationAbbreviation": { + "type": "string" + }, + "coachAssociationId": { + "type": "string" + }, + "coachAssociationName": { + "type": "string" + }, "code": { - "example": 200, + "type": "string" + }, + "divisionAlias": { + "type": "string" + }, + "governingBodyAbbreviation": { + "type": "string" + }, + "governingBodyArticleUrl": { + "type": "string" + }, + "governingBodyAssociationId": { + "type": "string" + }, + "governingBodyImageAspectRatio": { + "type": "number" + }, + "governingBodyImageHeight": { "type": "integer" }, - "data": { - "$ref": "#/definitions/opensea.ItemOrdersResponse" + "governingBodyImageWidth": { + "type": "integer" }, - "msg": { - "example": "OK", + "governingBodyIsPartner": { + "type": "boolean" + }, + "governingBodyName": { + "type": "string" + }, + "governingBodyUrl": { + "type": "string" + }, + "hasCoverage": { + "type": "boolean" + }, + "hasSections": { + "type": "boolean" + }, + "isExtended": { + "type": "boolean" + }, + "isFullyCovered": { + "type": "boolean" + }, + "isStandard": { + "type": "boolean" + }, + "leagueAlias": { + "type": "string" + }, + "name": { + "type": "string" + }, + "nameLong": { + "type": "string" + }, + "sectionAlias": { + "type": "string" + }, + "stateId": { + "type": "string" + }, + "timeZoneCode": { + "type": "string" + }, + "timeZoneName": { + "type": "string" + }, + "timeZoneObservesDayLightSavings": { + "type": "boolean" + }, + "timeZoneOffset": { + "type": "integer" + }, + "timeZoneOffsetText": { "type": "string" } }, "type": "object" }, - "opensea.itemOwnersResponseDoc": { + "maxpreps.StatesResponse": { "properties": { - "code": { - "example": 200, + "cacheResult": { + "type": "string" + }, + "count": { "type": "integer" }, "data": { - "$ref": "#/definitions/opensea.ItemOwnersResponse" + "items": { + "$ref": "#/definitions/maxpreps.State" + }, + "type": "array" }, - "msg": { - "example": "OK", + "fetched_at": { + "type": "string" + }, + "message": { + "type": "string" + }, + "source_url": { "type": "string" + }, + "status": { + "type": "integer" } }, "type": "object" }, - "opensea.itemResponseDoc": { + "maxpreps.SupportingMaterial": { "properties": { - "code": { - "example": 200, - "type": "integer" + "optionalText": { + "type": "string" }, - "data": { - "$ref": "#/definitions/opensea.Item" + "type": { + "type": "integer" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "opensea.itemSearchResponseDoc": { + "maxpreps.Team": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/opensea.ItemSearchResponse" - }, - "msg": { - "example": "OK", + "allSeasonId": { "type": "string" - } - }, - "type": "object" - }, - "opensea.itemsShelfResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/opensea.CollectionItemsShelfResponse" }, - "msg": { - "example": "OK", + "canonicalUrl": { "type": "string" - } - }, - "type": "object" - }, - "opensea.profileCollectionsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/opensea.ProfileCollectionsResponse" - }, - "msg": { - "example": "OK", + "formattedSportSeasonName": { "type": "string" - } - }, - "type": "object" - }, - "opensea.profileItemsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/opensea.ProfileItemsResponse" }, - "msg": { - "example": "OK", + "gender": { "type": "string" - } - }, - "type": "object" - }, - "opensea.profileResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/opensea.Profile" + "isDeleted": { + "type": "boolean" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "opensea.rankingsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "isGameChangerConnected": { + "type": "boolean" }, - "data": { - "$ref": "#/definitions/opensea.RankingsResponse" + "leagueCanonicalUrl": { + "type": "string" }, - "msg": { - "example": "OK", + "leagueId": { "type": "string" - } - }, - "type": "object" - }, - "opensea.socialProofResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/opensea.SocialProofResponse" + "leagueName": { + "type": "string" }, - "msg": { - "example": "OK", + "level": { "type": "string" - } - }, - "type": "object" - }, - "opentable.Cuisine": { - "properties": { - "id": { + }, + "schoolAddress": { "type": "string" }, - "name": { - "example": "Steakhouse", + "schoolAssociationGoverningBodyAbbreviation": { "type": "string" }, - "primary": { - "type": "boolean" - } - }, - "type": "object" - }, - "opentable.Menu": { - "properties": { - "currency": { + "schoolAssociationGoverningBodyName": { "type": "string" }, - "sections": { - "items": { - "$ref": "#/definitions/opentable.MenuSection" - }, - "type": "array" + "schoolAssociationGoverningBodyUrl": { + "type": "string" }, - "title": { + "schoolAssociationId": { "type": "string" - } - }, - "type": "object" - }, - "opentable.MenuItem": { - "properties": { - "description": { + }, + "schoolAssociationName": { "type": "string" }, - "price": { + "schoolCanonicalUrl": { "type": "string" }, - "title": { + "schoolCity": { "type": "string" - } - }, - "type": "object" - }, - "opentable.MenuSection": { - "properties": { - "items": { - "items": { - "$ref": "#/definitions/opentable.MenuItem" - }, - "type": "array" }, - "title": { + "schoolColor1": { "type": "string" - } - }, - "type": "object" - }, - "opentable.MenusResponse": { - "properties": { - "menus": { - "items": { - "$ref": "#/definitions/opentable.Menu" - }, - "type": "array" }, - "restaurant_id": { + "schoolColor2": { "type": "string" - } - }, - "type": "object" - }, - "opentable.PriceBand": { - "properties": { - "band": { - "example": "3", + }, + "schoolColor3": { "type": "string" }, - "label": { - "example": "$31 to $50", + "schoolFormattedName": { "type": "string" - } - }, - "type": "object" - }, - "opentable.RestaurantResponse": { - "properties": { - "availability_date_time": { - "description": "AvailabilityDateTime echoes the DateTime the Timeslots below were\ncomputed for (either the caller's or the now-default GetRestaurant\napplies -- see its doc comment).", + }, + "schoolMascot": { "type": "string" }, - "city": { + "schoolName": { "type": "string" }, - "country": { + "schoolNameAcronym": { "type": "string" }, - "country_code": { + "schoolShouldAppendHighSchoolString": { + "type": "boolean" + }, + "schoolZipCode": { "type": "string" }, - "cuisines": { - "items": { - "$ref": "#/definitions/opentable.Cuisine" - }, - "type": "array" + "season": { + "type": "string" }, - "currency_code": { + "sectionDivisionId": { "type": "string" }, - "description": { + "sectionDivisionName": { "type": "string" }, - "dining_style": { + "sectionId": { "type": "string" }, - "dress_code": { + "sectionName": { "type": "string" }, - "email": { + "sport": { "type": "string" }, - "features": { - "items": { - "type": "string" - }, - "type": "array" + "sportSeasonId": { + "type": "string" }, - "hours": { + "sportSeasonName": { "type": "string" }, - "id": { + "stateCode": { "type": "string" }, - "latitude": { - "type": "number" + "stateDivisionId": { + "type": "string" }, - "line1": { + "stateDivisionName": { "type": "string" }, - "line2": { + "stateId": { "type": "string" }, - "longitude": { - "type": "number" + "stateName": { + "type": "string" }, - "max_advance_days": { - "type": "integer" + "stateNominationBodyAbbreviation": { + "type": "string" }, - "max_party_size": { - "type": "integer" + "stateNominationBodyName": { + "type": "string" }, - "name": { + "stateNominationEndsOn": { "type": "string" }, - "phone_number": { + "stateNominationStartsOn": { "type": "string" }, - "photos_count": { - "type": "integer" + "stateQualificationBodyAbbreviation": { + "type": "string" }, - "postal_code": { + "stateQualificationBodyName": { "type": "string" }, - "price_band": { - "$ref": "#/definitions/opentable.PriceBand" + "stateQualificationEndsOn": { + "type": "string" }, - "reviews": { - "$ref": "#/definitions/opentable.ReviewSummary" + "stateQualificationStartsOn": { + "type": "string" }, - "state": { + "teamId": { "type": "string" }, - "timeslots": { - "items": { - "$ref": "#/definitions/opentable.Timeslot" - }, - "type": "array" + "teamSize": { + "type": "integer" }, - "website": { + "year": { "type": "string" } }, "type": "object" }, - "opentable.Review": { + "maxpreps.TeamContextDMA": { "properties": { - "author": { + "code": { + "type": "integer" + }, + "dmaId": { "type": "string" }, - "author_metro": { + "isPublished": { + "type": "boolean" + }, + "lastSportUpdateOn": { "type": "string" }, - "id": { + "name": { "type": "string" }, - "posted_date": { + "rankingsCanonicalUrl": { "type": "string" }, - "recommended": { - "type": "boolean" + "scoreboardCanonicalUrl": { + "type": "string" }, - "reservation_date": { + "stateCode": { "type": "string" }, - "statistics": { - "$ref": "#/definitions/opentable.ReviewStatistics" + "type": { + "type": "string" }, - "text": { + "url": { "type": "string" } }, "type": "object" }, - "opentable.ReviewStatistics": { + "maxpreps.TeamContextData": { "properties": { - "ambience": { - "type": "number" - }, - "food": { - "type": "number" - }, - "noise": { - "type": "number" + "dmas": { + "items": { + "$ref": "#/definitions/maxpreps.TeamContextDMA" + }, + "type": "array" }, - "overall_rating": { - "type": "number" + "lastYearRankingsData": { + "$ref": "#/definitions/maxpreps.TeamRankingsData" }, - "service": { - "type": "number" + "lastYearStandingsData": { + "$ref": "#/definitions/maxpreps.StandingsBlock" }, - "value": { - "type": "number" - } - }, - "type": "object" - }, - "opentable.ReviewSummary": { - "properties": { - "ambience": { - "type": "number" + "rankingsData": { + "$ref": "#/definitions/maxpreps.TeamRankingsData" }, - "count": { - "type": "integer" + "schoolAssociationAffiliations": { + "items": { + "$ref": "#/definitions/maxpreps.AssociationAffiliation" + }, + "type": "array" }, - "food": { - "type": "number" + "schoolSportSeasonsData": { + "items": { + "$ref": "#/definitions/maxpreps.SchoolSeason" + }, + "type": "array" }, - "noise": { - "type": "number" + "sportData": { + "$ref": "#/definitions/maxpreps.SportMetadata" }, - "overall_rating": { - "example": 4.8, - "type": "number" + "standingsData": { + "$ref": "#/definitions/maxpreps.StandingsBlock" }, - "review_count": { - "type": "integer" + "stateData": { + "$ref": "#/definitions/maxpreps.State" }, - "service": { - "type": "number" + "tda": { + "$ref": "#/definitions/maxpreps.TeamDataAvailability" }, - "value": { - "type": "number" + "teamData": { + "$ref": "#/definitions/maxpreps.Team" } }, "type": "object" }, - "opentable.ReviewsResponse": { + "maxpreps.TeamContextResponse": { "properties": { - "page": { + "cacheResult": { + "type": "string" + }, + "count": { "type": "integer" }, - "restaurant_id": { + "data": { + "$ref": "#/definitions/maxpreps.TeamContextData" + }, + "fetched_at": { "type": "string" }, - "reviews": { - "items": { - "$ref": "#/definitions/opentable.Review" - }, - "type": "array" - } - }, - "type": "object" - }, - "opentable.SearchResponse": { - "properties": { - "results": { - "items": { - "$ref": "#/definitions/opentable.SearchResult" - }, - "type": "array" + "message": { + "type": "string" }, - "term": { + "source_url": { "type": "string" + }, + "status": { + "type": "integer" } }, "type": "object" }, - "opentable.SearchResult": { + "maxpreps.TeamDataAvailability": { "properties": { - "availability_date_time": { - "description": "AvailabilityDateTime/Timeslots mirror RestaurantResponse's inline\navailability -- search returns the same nested shape per result.", + "details": { "type": "string" }, - "city": { - "type": "string" + "hasAnyTeamRoster": { + "type": "boolean" }, - "country": { - "type": "string" + "hasArticles": { + "type": "boolean" }, - "description": { - "type": "string" + "hasContests": { + "type": "boolean" }, - "id": { - "type": "string" + "hasImportedTeamPreview": { + "type": "boolean" }, - "latitude": { - "type": "number" + "hasMascotImage": { + "type": "boolean" }, - "line1": { - "type": "string" + "hasMaxprepsTeamPreview": { + "type": "boolean" }, - "line2": { - "type": "string" + "hasPrimaryLeague": { + "type": "boolean" }, - "longitude": { - "type": "number" + "hasProPhotos": { + "type": "boolean" }, - "name": { - "type": "string" + "hasRankings": { + "type": "boolean" }, - "postal_code": { - "type": "string" + "hasStandings": { + "type": "boolean" }, - "state": { - "type": "string" + "hasStats": { + "type": "boolean" }, - "timeslots": { - "items": { - "$ref": "#/definitions/opentable.Timeslot" - }, - "type": "array" - } - }, - "type": "object" - }, - "opentable.Timeslot": { - "properties": { - "available": { + "hasTeamPhoto": { "type": "boolean" }, - "date_time": { - "example": "2026-08-03T19:00", - "type": "string" + "hasTeamRoster": { + "type": "boolean" }, - "points": { - "type": "integer" + "hasVideos": { + "type": "boolean" }, - "price_amount": { - "type": "integer" + "isAnyCoachActive": { + "type": "boolean" }, - "redemption_tier": { + "isPrepsSportsEnabled": { + "type": "boolean" + }, + "maxprepsTeamPreviewCreatedOn": { "type": "string" }, - "token": { - "description": "Token is the upstream booking token for this slot. It is opaque and\nonly meaningful back to OpenTable's own booking flow -- this service\ndoes not implement booking, only discovery.", + "maxprepsTeamPreviewModifiedOn": { "type": "string" }, - "type": { - "example": "Standard", + "sportSeasonId": { + "type": "string" + }, + "teamId": { + "type": "string" + }, + "updatedOn": { "type": "string" } }, "type": "object" }, - "opentable.menusResponseDoc": { + "maxpreps.TeamNextContestData": { "properties": { - "code": { - "example": 200, - "type": "integer" + "calculatedFields": { + "$ref": "#/definitions/maxpreps.CalculatedFields" }, - "data": { - "$ref": "#/definitions/opentable.MenusResponse" + "contest": { + "$ref": "#/definitions/maxpreps.Contest" }, - "msg": { - "example": "OK", + "hudlInfo": { + "$ref": "#/definitions/maxpreps.HudlInfo" + }, + "sportSeasonId": { "type": "string" - } + }, + "teamId": { + "type": "string" + }, + "tournament": {} }, "type": "object" }, - "opentable.restaurantResponseDoc": { + "maxpreps.TeamNextContestResponse": { "properties": { - "code": { - "example": 200, + "cacheResult": { + "type": "string" + }, + "count": { "type": "integer" }, "data": { - "$ref": "#/definitions/opentable.RestaurantResponse" + "$ref": "#/definitions/maxpreps.TeamNextContestData" }, - "msg": { - "example": "OK", + "fetched_at": { + "type": "string" + }, + "message": { + "type": "string" + }, + "source_url": { "type": "string" + }, + "status": { + "type": "integer" } }, "type": "object" }, - "opentable.reviewsResponseDoc": { + "maxpreps.TeamRankingSummary": { "properties": { - "code": { - "example": 200, - "type": "integer" + "canonicalUrl": { + "type": "string" }, - "data": { - "$ref": "#/definitions/opentable.ReviewsResponse" + "contextId": { + "type": "string" }, - "msg": { - "example": "OK", + "contextName": { + "type": "string" + }, + "movement": { "type": "string" + }, + "rank": { + "type": "integer" + }, + "rankingType": { + "type": "integer" } }, "type": "object" }, - "opentable.searchResponseDoc": { + "maxpreps.TeamRankingsData": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/opentable.SearchResponse" + "items": { + "$ref": "#/definitions/maxpreps.TeamRankingSummary" + }, + "type": "array" }, - "msg": { - "example": "OK", + "timeStamp": { "type": "string" } }, "type": "object" }, - "otto.CategoriesResponse": { + "maxpreps.TeamRankingsResponse": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/otto.Category" - }, - "type": "array" + "cacheResult": { + "type": "string" }, "count": { "type": "integer" }, + "data": { + "items": { + "$ref": "#/definitions/maxpreps.RankingsBlock" + }, + "type": "array" + }, "fetched_at": { "type": "string" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "otto.Category": { - "properties": { - "name": { + "message": { "type": "string" }, - "url": { + "source_url": { "type": "string" + }, + "status": { + "type": "integer" } }, "type": "object" }, - "otto.Product": { + "maxpreps.TeamResponse": { "properties": { - "brand": { + "cacheResult": { "type": "string" }, - "colors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "currency": { - "type": "string" + "count": { + "type": "integer" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/maxpreps.Team" }, - "name": { + "fetched_at": { "type": "string" }, - "price": { - "type": "number" - }, - "sizes": { - "items": { - "type": "string" - }, - "type": "array" + "message": { + "type": "string" }, - "url": { + "source_url": { "type": "string" + }, + "status": { + "type": "integer" } }, "type": "object" }, - "otto.ProductResponse": { + "maxpreps.TeamRosterSummaryData": { "properties": { - "browser_rendered": { + "athleteCount": { + "type": "integer" + }, + "hasTeamPhoto": { "type": "boolean" }, - "fetched_at": { - "type": "string" + "hudlAthleteCount": { + "type": "integer" }, - "product": { - "$ref": "#/definitions/otto.Product" + "jerseyAthleteCount": { + "type": "integer" + }, + "photoAthleteCount": { + "type": "integer" } }, "type": "object" }, - "otto.ProductSummary": { + "maxpreps.TeamRosterSummaryResponse": { "properties": { - "brand": { + "cacheResult": { "type": "string" }, - "currency": { - "type": "string" + "count": { + "type": "integer" }, - "image": { - "type": "string" + "data": { + "$ref": "#/definitions/maxpreps.TeamRosterSummaryData" }, - "name": { + "fetched_at": { "type": "string" }, - "price": { - "type": "number" - }, - "product_id": { + "message": { "type": "string" }, - "url": { + "source_url": { "type": "string" }, - "variation_id": { - "type": "string" + "status": { + "type": "integer" } }, "type": "object" }, - "otto.SearchResponse": { + "maxpreps.TeamScheduleResponse": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { + "cacheResult": { "type": "string" }, - "offset": { + "count": { "type": "integer" }, - "products": { + "data": { "items": { - "$ref": "#/definitions/otto.ProductSummary" + "$ref": "#/definitions/maxpreps.ScheduleEntry" }, "type": "array" }, - "query": { + "fetched_at": { + "type": "string" + }, + "message": { "type": "string" }, "source_url": { "type": "string" + }, + "status": { + "type": "integer" } }, "type": "object" }, - "otto.categoriesResponseDoc": { + "maxpreps.TeamStatLeadersData": { "properties": { - "code": { - "example": 200, - "type": "integer" + "athletes": { + "items": { + "$ref": "#/definitions/maxpreps.Leader" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/otto.CategoriesResponse" + "cutoffs": { + "items": { + "$ref": "#/definitions/maxpreps.LeaderCutoff" + }, + "type": "array" }, - "msg": { - "example": "OK", + "minimums": { + "items": { + "$ref": "#/definitions/maxpreps.LeaderMinimum" + }, + "type": "array" + }, + "sportSeasonId": { + "type": "string" + }, + "teamId": { "type": "string" } }, "type": "object" }, - "otto.productResponseDoc": { + "maxpreps.TeamStatLeadersResponse": { "properties": { - "code": { - "example": 200, + "cacheResult": { + "type": "string" + }, + "count": { "type": "integer" }, "data": { - "$ref": "#/definitions/otto.ProductResponse" + "$ref": "#/definitions/maxpreps.TeamStatLeadersData" }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "otto.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/otto.SearchResponse" + "message": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" + }, + "status": { + "type": "integer" } }, "type": "object" }, - "pagesix.AuthorResponse": { + "maxpreps.TournamentSport": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { + "canonicalUrl": { "type": "string" }, "name": { "type": "string" - }, - "social_links": { + } + }, + "type": "object" + }, + "maxpreps.TournamentSportsData": { + "properties": { + "sports": { "items": { - "$ref": "#/definitions/pagesix.AuthorSocialLink" + "$ref": "#/definitions/maxpreps.TournamentSport" }, "type": "array" - }, - "url": { - "type": "string" } }, "type": "object" }, - "pagesix.AuthorSocialLink": { + "maxpreps.TournamentSportsResponse": { "properties": { - "type": { + "cacheResult": { "type": "string" }, - "url": { + "count": { + "type": "integer" + }, + "data": { + "$ref": "#/definitions/maxpreps.TournamentSportsData" + }, + "fetched_at": { + "type": "string" + }, + "message": { "type": "string" + }, + "source_url": { + "type": "string" + }, + "status": { + "type": "integer" } }, "type": "object" }, - "pandamart.CategoriesResponse": { + "mcdonalds.CategoriesResponse": { "properties": { "categories": { "items": { - "$ref": "#/definitions/pandamart.Category" + "$ref": "#/definitions/mcdonalds.Category" }, "type": "array" }, - "code": { + "count": { + "example": 13, + "type": "integer" + }, + "country": { + "description": "Country echoes the market these slugs belong to. Slugs are NOT\nportable across markets -- pass the same country back to\n/mcdonalds/menu.", + "example": "us", "type": "string" }, - "market": { + "fetched_at": { + "type": "string" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "pandamart.Category": { + "mcdonalds.Category": { "properties": { - "id": { + "name": { + "example": "Breakfast", "type": "string" }, - "image_url": { + "slug": { + "example": "breakfast", "type": "string" }, - "name": { + "url": { "type": "string" - }, - "product_count": { - "type": "integer" - }, - "sub_categories": { - "items": { - "$ref": "#/definitions/pandamart.Category" - }, - "type": "array" } }, "type": "object" }, - "pandamart.Chain": { + "mcdonalds.ItemComponent": { "properties": { - "code": { + "allergens": { "type": "string" }, - "name": { + "ingredients": { "type": "string" } }, "type": "object" }, - "pandamart.Product": { + "mcdonalds.ItemListEntry": { "properties": { - "description": { + "allergens": { "type": "string" }, - "discount_badge": { - "type": "string" + "components": { + "description": "Components is the per-part ingredient/allergen breakdown -- e.g. a\nburger's bun, patty, cheese and condiment each carry their own\nstatement. Absent for a single-part item.", + "items": { + "$ref": "#/definitions/mcdonalds.ItemComponent" + }, + "type": "array" }, - "id": { + "description": { "type": "string" }, "image_url": { "type": "string" }, - "is_available": { - "type": "boolean" - }, - "name": { + "ingredients": { "type": "string" }, - "original_price": { - "type": "number" - }, - "price": { - "type": "number" + "item_id": { + "example": "200466", + "type": "string" }, - "sku": { + "name": { + "example": "Quarter Pounder with Cheese", "type": "string" }, - "stock_amount": { - "type": "integer" + "nutrients": { + "items": { + "$ref": "#/definitions/mcdonalds.Nutrient" + }, + "type": "array" } }, "type": "object" }, - "pandamart.ProductAttributes": { + "mcdonalds.ItemListResponse": { "properties": { - "base_content_value": { - "type": "number" + "count": { + "example": 3, + "type": "integer" }, - "base_unit": { + "country": { + "example": "us", "type": "string" }, - "nutrition_grade": { + "fetched_at": { "type": "string" }, - "price_per_base_unit": { - "type": "number" + "items": { + "items": { + "$ref": "#/definitions/mcdonalds.ItemListEntry" + }, + "type": "array" + }, + "requested": { + "description": "Requested echoes the id list as asked for, so a caller can tell which\nids McDonald's returned nothing for.", + "items": { + "type": "string" + }, + "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "pandamart.ProductDetailResponse": { + "mcdonalds.ItemResponse": { "properties": { - "attributes": { - "$ref": "#/definitions/pandamart.ProductAttributes" - }, - "category_id": { + "allergens": { + "description": "Allergens is McDonald's own allergen statement for the item.", "type": "string" }, - "code": { + "country": { + "description": "Country echoes the market this item was read from. Item ids are NOT\nportable across markets.", + "example": "us", "type": "string" }, "description": { "type": "string" }, - "discount_badge": { - "type": "string" - }, - "id": { + "fetched_at": { "type": "string" }, "image_url": { "type": "string" }, - "is_available": { - "type": "boolean" + "ingredients": { + "description": "Ingredients is the full ingredient statement.", + "type": "string" }, - "market": { + "item_id": { + "example": "200463", "type": "string" }, "name": { + "example": "Big Mac", "type": "string" }, - "original_price": { - "type": "number" - }, - "price": { - "type": "number" + "nutrients": { + "description": "Nutrients are the published per-serving nutrition values.", + "items": { + "$ref": "#/definitions/mcdonalds.Nutrient" + }, + "type": "array" }, - "sku": { + "source_url": { "type": "string" - }, - "stock_amount": { - "type": "integer" } }, "type": "object" }, - "pandamart.ProductShelf": { + "mcdonalds.MenuItemSummary": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/pandamart.Product" - }, - "type": "array" + "calories": { + "description": "Calories is McDonald's own per-item calorie label where the category\npage prints one; often blank.", + "example": "460 Cal.", + "type": "string" }, - "title": { + "image_url": { + "type": "string" + }, + "item_id": { + "example": "200300", + "type": "string" + }, + "name": { + "example": "Bacon, Egg & Cheese Biscuit", + "type": "string" + }, + "product_url": { "type": "string" } }, "type": "object" }, - "pandamart.ProductsResponse": { + "mcdonalds.MenuResponse": { "properties": { - "code": { + "category": { + "example": "breakfast", "type": "string" }, - "item_count": { + "count": { + "example": 32, "type": "integer" }, - "market": { + "country": { + "example": "us", "type": "string" }, - "shelves": { + "fetched_at": { + "type": "string" + }, + "items": { "items": { - "$ref": "#/definitions/pandamart.ProductShelf" + "$ref": "#/definitions/mcdonalds.MenuItemSummary" }, "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "pandamart.SearchResponse": { + "mcdonalds.Nutrient": { "properties": { - "available_count": { - "type": "integer" + "daily_value": { + "description": "DailyValue is the percent-daily-value where McDonald's prints one.", + "example": "45", + "type": "string" }, - "market": { + "key": { + "description": "Key is McDonald's stable machine identifier for the nutrient\n(e.g. \"calories\"), safer to match on than the display name.", + "example": "calories", "type": "string" }, - "offset": { - "type": "integer" + "name": { + "example": "Calories", + "type": "string" }, - "returned_count": { - "type": "integer" + "unit": { + "example": "Cal.", + "type": "string" }, - "stores": { - "items": { - "$ref": "#/definitions/pandamart.Store" - }, - "type": "array" + "value": { + "description": "Value is kept as a string because McDonald's publishes values like\n\"580\", \"1060\" and occasionally non-numeric qualifiers; parsing to a\nnumber here would silently drop the latter.", + "example": "580", + "type": "string" } }, "type": "object" }, - "pandamart.Store": { + "mcdonalds.Restaurant": { "properties": { "address": { + "example": "160 Broadway", "type": "string" }, - "budget": { - "type": "integer" - }, - "chain": { - "$ref": "#/definitions/pandamart.Chain" - }, "city": { + "example": "New York", "type": "string" }, - "code": { + "delivery_url": { + "description": "DeliveryURL is the store's delivery deep link when one is published.\nNote McDonald's points this at a third-party delivery platform.", "type": "string" }, - "distance_km": { - "type": "number" - }, - "has_discount": { - "type": "boolean" - }, - "hero_image_url": { + "drive_thru_hours": { "type": "string" }, - "is_delivery_available": { - "type": "boolean" + "facilities": { + "description": "Facilities are McDonald's own amenity codes for the restaurant\n(e.g. GIFTCARDS, MOBILEOFFERS, DRIVETHRU, WIFI).", + "items": { + "type": "string" + }, + "type": "array" }, - "is_pickup_available": { - "type": "boolean" + "hours": { + "description": "Hours is the full week where McDonald's publishes it.", + "items": { + "$ref": "#/definitions/mcdonalds.RestaurantHours" + }, + "type": "array" }, "latitude": { + "example": 40.709438, "type": "number" }, "longitude": { + "example": -74.010086, "type": "number" }, - "minimum_delivery_fee": { - "type": "number" + "name": { + "example": "160 BROADWAY", + "type": "string" }, - "minimum_delivery_time_minutes": { - "type": "number" + "open_status": { + "example": "OPEN", + "type": "string" }, - "minimum_order_amount": { - "type": "number" + "postal_code": { + "example": "10038", + "type": "string" }, - "name": { + "state": { + "example": "NY", "type": "string" }, - "tags": { - "items": { - "$ref": "#/definitions/pandamart.Tag" - }, - "type": "array" + "store_id": { + "example": "10528", + "type": "string" + }, + "telephone": { + "example": "(212) 385-2066", + "type": "string" }, "timezone": { "type": "string" }, - "web_path": { + "today_hours": { + "description": "TodayHours and DriveThruHours are the published windows for today.", "type": "string" } }, "type": "object" }, - "pandamart.StoreResponse": { + "mcdonalds.RestaurantHours": { "properties": { - "address": { - "type": "string" - }, - "budget": { - "type": "integer" - }, - "chain": { - "$ref": "#/definitions/pandamart.Chain" - }, - "city": { + "day_of_week": { + "example": "monday", "type": "string" }, - "code": { + "hours": { + "example": "00:00 - 00:00", "type": "string" - }, - "distance_km": { - "type": "number" - }, - "has_discount": { - "type": "boolean" - }, - "hero_image_url": { + } + }, + "type": "object" + }, + "mcdonalds.RestaurantMenuChoice": { + "properties": { + "options": { + "items": { + "$ref": "#/definitions/mcdonalds.RestaurantMenuChoiceOption" + }, + "type": "array" + } + }, + "type": "object" + }, + "mcdonalds.RestaurantMenuChoiceOption": { + "properties": { + "item_id": { + "example": "14877", "type": "string" }, - "is_delivery_available": { - "type": "boolean" - }, - "is_pickup_available": { - "type": "boolean" - }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" - }, - "market": { + "name": { + "example": "Lemonade", "type": "string" }, - "minimum_delivery_fee": { + "price_delta": { + "description": "PriceDelta is the additional eat-in/pickup cost of choosing this\noption instead of what's already included: 0 for a same-priced\nswap, negative for a cheaper one, and equal to the option's own\nfull price for an add-on choice (nothing is included to offset\nagainst).", + "example": 0.4, "type": "number" + } + }, + "type": "object" + }, + "mcdonalds.RestaurantMenuItem": { + "properties": { + "choices": { + "description": "Choices lists this item's customizable components McDonald's\npublishes a curated substitute/add-on list for -- e.g. a meal's\ndrink upgrade options, or a dip-able item's sauce choices -- with\nthe live eat-in/pickup price delta for each real alternative.\nPresent only when the upstream payload exposed at least one such\nchoice for this item; see the package doc comment for how these are\nderived and the deliberate fail-closed rule behind what gets left\nout (in particular, plain entree/side substitution is not exposed\nat all -- McDonald's does not publish a curated candidate list for\nit, only for upgrade/add-on style choices).", + "items": { + "$ref": "#/definitions/mcdonalds.RestaurantMenuChoice" + }, + "type": "array" }, - "minimum_delivery_time_minutes": { + "delivery_price": { + "example": 8.39, "type": "number" }, - "minimum_order_amount": { + "eat_in_price": { + "example": 7.29, "type": "number" }, - "name": { + "family_group": { + "description": "FamilyGroup is McDonald's own internal product classification (e.g.\nREGULAR_ENTREE, DESSERT) -- not the same category list\n/mcdonalds/categories returns, and not always present.", + "example": "REGULAR_ENTREE", "type": "string" }, - "tags": { - "items": { - "$ref": "#/definitions/pandamart.Tag" - }, - "type": "array" + "image_url": { + "type": "string" }, - "timezone": { + "item_id": { + "example": "5", "type": "string" }, - "web_path": { + "name": { + "example": "Big Mac®", "type": "string" + }, + "pickup_price": { + "example": 7.29, + "type": "number" } }, "type": "object" }, - "pandamart.StoreSearchResponse": { + "mcdonalds.RestaurantMenuResponse": { "properties": { - "code": { - "type": "string" - }, - "has_more": { - "type": "boolean" - }, - "limit": { + "count": { + "example": 563, "type": "integer" }, - "market": { + "currency": { + "example": "$", "type": "string" }, - "page": { - "type": "integer" + "fetched_at": { + "type": "string" }, - "products": { + "items": { "items": { - "$ref": "#/definitions/pandamart.Product" + "$ref": "#/definitions/mcdonalds.RestaurantMenuItem" }, "type": "array" }, - "query": { + "source_url": { "type": "string" }, - "sort": { + "store_id": { + "example": "10528", "type": "string" - }, - "total_products": { - "type": "integer" } }, "type": "object" }, - "pandamart.Tag": { + "mcdonalds.RestaurantsResponse": { "properties": { - "code": { + "count": { + "example": 5, + "type": "integer" + }, + "country": { + "description": "Country echoes the market searched, so a response is self-describing\nwhen several markets are queried in one workflow.", + "example": "us", "type": "string" }, - "text": { + "fetched_at": { + "type": "string" + }, + "restaurants": { + "items": { + "$ref": "#/definitions/mcdonalds.Restaurant" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "pandamart.categoriesResponseDoc": { + "mcdonalds.categoriesResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/pandamart.CategoriesResponse" + "$ref": "#/definitions/mcdonalds.CategoriesResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -150429,14 +157148,14 @@ }, "type": "object" }, - "pandamart.productDetailResponseDoc": { + "mcdonalds.itemListResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/pandamart.ProductDetailResponse" + "$ref": "#/definitions/mcdonalds.ItemListResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -150444,14 +157163,14 @@ }, "type": "object" }, - "pandamart.productsResponseDoc": { + "mcdonalds.itemResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/pandamart.ProductsResponse" + "$ref": "#/definitions/mcdonalds.ItemResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -150459,14 +157178,14 @@ }, "type": "object" }, - "pandamart.searchResponseDoc": { + "mcdonalds.menuResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/pandamart.SearchResponse" + "$ref": "#/definitions/mcdonalds.MenuResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -150474,14 +157193,14 @@ }, "type": "object" }, - "pandamart.storeResponseDoc": { + "mcdonalds.restaurantMenuResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/pandamart.StoreResponse" + "$ref": "#/definitions/mcdonalds.RestaurantMenuResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -150489,14 +157208,14 @@ }, "type": "object" }, - "pandamart.storeSearchResponseDoc": { + "mcdonalds.restaurantsResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/pandamart.StoreSearchResponse" + "$ref": "#/definitions/mcdonalds.RestaurantsResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -150504,1605 +157223,1374 @@ }, "type": "object" }, - "panera.AtWorkDropOff": { + "mediaite.AuthorArticle": { "properties": { - "cutoff_time": { - "example": "09:00", + "date": { "type": "string" }, - "day_of_week": { - "example": "Monday", + "title": { "type": "string" }, - "drop_off_time": { - "example": "10:45", + "url": { "type": "string" } }, "type": "object" }, - "panera.AtWorkLocation": { + "mediaite.AuthorResponse": { "properties": { - "active": { - "example": true, - "type": "boolean" - }, - "city": { - "example": "Fenton", - "type": "string" - }, - "contact_name": { - "type": "string" - }, - "contact_phone": { - "type": "string" - }, - "country": { - "example": "US", - "type": "string" - }, - "drop_off_schedule": { + "articles": { "items": { - "$ref": "#/definitions/panera.AtWorkDropOff" + "$ref": "#/definitions/mediaite.AuthorArticle" }, "type": "array" }, - "id": { - "example": "P2U-000320", + "avatar_url": { "type": "string" }, - "latitude": { - "example": 38.5401336, - "type": "number" - }, - "lead_time_minutes": { - "example": 90, - "type": "integer" - }, - "location_type": { - "example": "Office/Production Facility/Other", + "bio": { "type": "string" }, - "longitude": { - "example": -90.4772361, - "type": "number" - }, - "name": { - "example": "Panera Bread Support Center", + "email": { "type": "string" }, - "postal_code": { - "example": "63026", + "name": { "type": "string" }, - "service_cafe_id": { - "example": "600668", + "slug": { "type": "string" }, - "state": { - "example": "MO", + "twitter": { "type": "string" }, - "street": { - "example": "1400 S Hwy Dr", + "url": { "type": "string" } }, "type": "object" }, - "panera.AtWorkLocationsResponse": { + "medicalnewstoday.ArticleResponse": { "properties": { - "count": { - "example": 2, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "locations": { + "authors": { "items": { - "$ref": "#/definitions/panera.AtWorkLocation" + "type": "string" }, "type": "array" }, - "source_url": { + "description": { "type": "string" - } - }, - "type": "object" - }, - "panera.CafeResponse": { - "properties": { - "available": { - "example": true, - "type": "boolean" - }, - "cafe_id": { - "example": 601447, - "type": "integer" }, - "city": { - "example": "Addison", + "image_url": { "type": "string" }, - "features": { - "description": "Features are Panera's own per-cafe amenity flags that are true for\nthis cafe (e.g. hasDriveThru, hasDelivery, hasCurbside, hasKiosk).", + "paragraphs": { "items": { "type": "string" }, "type": "array" }, - "fetched_at": { - "type": "string" - }, - "fulfillment": { - "description": "Fulfillment is one entry per channel Panera publishes availability\nfor at this cafe.", - "items": { - "$ref": "#/definitions/panera.Fulfillment" - }, - "type": "array" - }, - "latitude": { - "example": 41.948594, - "type": "number" - }, - "longitude": { - "example": -88.026398, - "type": "number" - }, - "name": { - "example": "Addison - W Lake St east of Rohlwing Rd", - "type": "string" - }, - "open_now": { - "example": true, + "paywalled": { + "description": "Paywalled is true when the publisher serves only a teaser of this\narticle to anonymous readers, so Paragraphs is a partial body rather than\nthe full text. It is omitted when the full public body was returned.", "type": "boolean" }, - "phone": { - "example": "630-250-4952", - "type": "string" - }, - "postal_code": { - "example": "60101", + "published_at": { "type": "string" }, - "source_url": { + "section": { "type": "string" }, - "state": { - "example": "IL", + "title": { "type": "string" }, - "street": { - "example": "1600 West Lake Street", + "updated_at": { "type": "string" }, - "timezone": { - "example": "America/Chicago", + "url": { "type": "string" - }, - "upcoming_hours": { - "description": "UpcomingHours is the published storefront schedule for the next\ncalendar week, with concrete dates rather than abstract weekdays.", - "items": { - "$ref": "#/definitions/panera.UpcomingDay" - }, - "type": "array" } }, "type": "object" }, - "panera.CateringCategory": { + "medicalnewstoday.AuthorResponse": { "properties": { - "cat_id": { - "example": 181, - "type": "integer" - }, - "image_key": { - "type": "string" - }, - "item_ids": { - "description": "ItemIDs are the items under this category. Look them up in the\nresponse's top-level Items list.", + "articles": { "items": { - "type": "integer" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, + "bio": { + "type": "string" + }, "name": { - "example": "Sandwiches", "type": "string" }, - "sort_weight": { - "type": "integer" + "slug": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "panera.CateringDeliveryInfoResponse": { + "medicalnewstoday.HeadlinesResponse": { "properties": { - "available_dates": { - "items": { - "$ref": "#/definitions/panera.CateringDeliverySlotDay" - }, - "type": "array" - }, - "cafe_id": { - "example": 606477, - "type": "integer" - }, - "delivery_fee": { - "example": 15, - "type": "number" - }, - "fetched_at": { - "type": "string" - }, - "hours": { - "items": { - "$ref": "#/definitions/panera.DayHours" - }, - "type": "array" - }, - "lead_times": { + "items": { "items": { - "$ref": "#/definitions/panera.CateringDeliveryLeadTime" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "min_order_amount": { - "example": 50, - "type": "number" - }, - "source_url": { + "section": { "type": "string" } }, "type": "object" }, - "panera.CateringDeliveryLeadTime": { + "medicalnewstoday.NewsResponse": { "properties": { - "is_large_order_tier": { - "example": true, - "type": "boolean" - }, - "lead_time_minutes": { - "example": 240, - "type": "integer" - }, - "min_order_amount": { - "example": 750, - "type": "number" + "items": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" } }, "type": "object" }, - "panera.CateringDeliverySlotDay": { + "medicalnewstoday.SectionsResponse": { "properties": { - "date": { - "example": "2026-09-10", - "type": "string" - }, - "ranges": { + "sections": { "items": { - "$ref": "#/definitions/panera.HourRange" + "$ref": "#/definitions/newsplatform.Section" }, "type": "array" } }, "type": "object" }, - "panera.CateringMenuItem": { + "medicalnewstoday.articleResponseDoc": { "properties": { - "allergens": { - "$ref": "#/definitions/panera.MenuAllergens" - }, - "customizable": { - "example": true, - "type": "boolean" - }, - "description": { - "type": "string" - }, - "image_key": { - "type": "string" - }, - "in_stock": { - "description": "InStock reflects this cafe's live catering stockout feed for today's\nfulfillment date. false means Panera currently has this item\nunavailable to order for catering at this specific cafe.", - "example": true, - "type": "boolean" - }, - "item_id": { - "example": 647093, + "code": { + "example": 200, "type": "integer" }, - "name": { - "example": "Ciabatta Sausage, Egg & Cheese Sandwich", - "type": "string" - }, - "nutrients": { - "items": { - "$ref": "#/definitions/panera.MenuNutrient" - }, - "type": "array" - }, - "portion": { - "example": "Individual", - "type": "string" - }, - "price": { - "example": 10.99, - "type": "number" + "data": { + "$ref": "#/definitions/medicalnewstoday.ArticleResponse" }, - "product_type": { - "example": "SANDWICH", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "panera.CateringMenuResponse": { + "medicalnewstoday.authorResponseDoc": { "properties": { - "cafe_id": { - "example": 601447, - "type": "integer" - }, - "categories": { - "items": { - "$ref": "#/definitions/panera.CateringCategory" - }, - "type": "array" - }, - "count": { - "example": 257, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "items": { - "items": { - "$ref": "#/definitions/panera.CateringMenuItem" - }, - "type": "array" + "data": { + "$ref": "#/definitions/medicalnewstoday.AuthorResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "panera.DayHours": { + "medicalnewstoday.headlinesResponseDoc": { "properties": { - "day_of_week": { - "example": "Monday", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "ranges": { - "items": { - "$ref": "#/definitions/panera.HourRange" - }, - "type": "array" + "data": { + "$ref": "#/definitions/medicalnewstoday.HeadlinesResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "panera.Fulfillment": { + "medicalnewstoday.newsResponseDoc": { "properties": { - "available": { - "example": true, - "type": "boolean" - }, - "hours": { - "items": { - "$ref": "#/definitions/panera.DayHours" - }, - "type": "array" - }, - "lead_time_minutes": { - "example": 20, + "code": { + "example": 200, "type": "integer" }, - "open_now": { - "example": true, - "type": "boolean" + "data": { + "$ref": "#/definitions/medicalnewstoday.NewsResponse" }, - "type": { - "example": "delivery", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "panera.GeocodeResponse": { + "medicalnewstoday.sectionsResponseDoc": { "properties": { - "address": { - "example": "Chicago, IL", - "type": "string" - }, - "count": { - "example": 1, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "results": { - "items": { - "$ref": "#/definitions/panera.GeocodeResult" - }, - "type": "array" + "data": { + "$ref": "#/definitions/medicalnewstoday.SectionsResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "panera.GeocodeResult": { + "men.AuthorArticle": { "properties": { - "city": { - "example": "Chicago", + "label": { "type": "string" }, - "country": { - "example": "US", + "label_url": { "type": "string" }, - "formatted_address": { - "example": "Chicago, IL US", + "title": { "type": "string" }, - "latitude": { - "example": 41.85003, - "type": "number" - }, - "longitude": { - "example": -87.65005, - "type": "number" - }, - "resolved": { - "description": "Resolved is false when Panera could not geocode the address at all\n(an empty, malformed, or nonsense query).", - "example": true, - "type": "boolean" - }, - "state": { - "example": "IL", + "url": { "type": "string" } }, "type": "object" }, - "panera.HourRange": { + "men.AuthorResponse": { "properties": { - "close": { - "example": "21:00", - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/men.AuthorArticle" + }, + "type": "array" }, - "open": { - "example": "06:00", + "bio": { "type": "string" - } - }, - "type": "object" - }, - "panera.ItemDetailResponse": { - "properties": { - "allergens": { - "$ref": "#/definitions/panera.MenuAllergens" - }, - "cafe_id": { - "example": 601447, - "type": "integer" }, - "description": { + "email": { "type": "string" }, - "fetched_at": { + "job_title": { "type": "string" }, - "ingredient_statement": { + "name": { "type": "string" }, - "item_id": { - "example": 650115, - "type": "integer" + "slug": { + "type": "string" }, - "name": { - "example": "Almond Pastry", + "twitter": { "type": "string" }, - "nutrients": { - "items": { - "$ref": "#/definitions/panera.MenuNutrient" - }, - "type": "array" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "mercari.AutocompleteResponse": { + "properties": { + "query": { + "type": "string" }, - "sizes": { + "suggestions": { "items": { - "$ref": "#/definitions/panera.ItemDetailSize" + "type": "string" }, "type": "array" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "panera.ItemDetailSize": { + "mercari.Brand": { "properties": { - "calories": { - "example": 120, - "type": "number" - }, - "is_default": { - "example": true, - "type": "boolean" - }, - "item_id": { - "example": 646541, + "id": { "type": "integer" }, "name": { - "example": "Regular", "type": "string" - }, - "price": { - "example": 3.49, - "type": "number" } }, "type": "object" }, - "panera.ItemOption": { + "mercari.Category": { "properties": { - "allergens": { - "$ref": "#/definitions/panera.MenuAllergens" + "icon_url": { + "type": "string" }, - "default_qty": { - "example": 1, + "id": { "type": "integer" }, - "image_key": { - "example": "pecans-whole-r", + "name": { "type": "string" }, - "is_default": { - "example": true, - "type": "boolean" - }, - "item_id": { - "example": 4266, + "parent_id": { "type": "integer" - }, - "variants": { + } + }, + "type": "object" + }, + "mercari.HomeResponse": { + "properties": { + "items": { "items": { - "$ref": "#/definitions/panera.ItemOptionVariant" + "$ref": "#/definitions/mercari.ItemSummary" }, "type": "array" } }, "type": "object" }, - "panera.ItemOptionGroup": { + "mercari.ItemDetailResponse": { "properties": { - "group_id": { - "example": 1080, + "category_code": { "type": "integer" }, - "max_allowed": { - "example": 5, + "condition_code": { "type": "integer" }, - "min_allowed": { - "example": 0, - "type": "integer" + "description": { + "type": "string" }, - "options": { + "hashtags": { "items": { - "$ref": "#/definitions/panera.ItemOption" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "panera.ItemOptionVariant": { - "properties": { - "item_id": { - "example": 5741, - "type": "integer" - }, - "price": { - "example": 0.69, - "type": "number" }, - "variant_type": { - "example": "Light", + "id": { "type": "string" - } - }, - "type": "object" - }, - "panera.ItemOptionsResponse": { - "properties": { - "cafe_id": { - "example": 601447, + }, + "photos": { + "items": { + "type": "string" + }, + "type": "array" + }, + "price_cents": { "type": "integer" }, - "fetched_at": { + "shipping_from_state": { "type": "string" }, - "groups": { + "similar_items": { "items": { - "$ref": "#/definitions/panera.ItemOptionGroup" + "$ref": "#/definitions/mercari.ItemSummary" }, "type": "array" }, - "item_id": { - "example": 643423, - "type": "integer" + "title": { + "type": "string" }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "panera.LocationCafe": { + "mercari.ItemSummary": { "properties": { - "cafe_id": { - "example": 601447, + "condition_code": { "type": "integer" }, - "city": { - "example": "Addison", - "type": "string" + "created_at_unix": { + "type": "integer" }, - "country_code": { - "example": "US", + "id": { "type": "string" }, - "features": { - "description": "Features are Panera's own per-cafe capability flags that are true for\nthis cafe (e.g. hasDriveThru, hasDelivery, hasCurbside, hasKiosk).", - "items": { - "type": "string" - }, - "type": "array" + "num_likes": { + "type": "integer" }, - "latitude": { - "example": 41.948594, - "type": "number" + "original_price_cents": { + "type": "integer" }, - "longitude": { - "example": -88.026398, - "type": "number" + "price_cents": { + "type": "integer" }, - "name": { - "example": "Addison - W Lake St east of Rohlwing Rd", + "seller_id": { "type": "string" }, - "phone": { - "example": "630-250-4952", + "thumbnail_url": { "type": "string" }, - "postal_code": { - "example": "60101", + "title": { "type": "string" }, - "state": { - "example": "IL", - "type": "string" + "updated_at_unix": { + "type": "integer" }, - "street": { - "example": "1600 West Lake Street", + "url": { "type": "string" } }, "type": "object" }, - "panera.LocationCity": { + "mercari.MasterResponse": { "properties": { - "cafe_count": { - "example": 1, - "type": "integer" + "brands": { + "items": { + "$ref": "#/definitions/mercari.Brand" + }, + "type": "array" }, - "cafes": { + "categories": { "items": { - "$ref": "#/definitions/panera.LocationCafe" + "$ref": "#/definitions/mercari.Category" }, "type": "array" }, - "city": { - "example": "Addison", - "type": "string" + "sizes": { + "items": { + "$ref": "#/definitions/mercari.Size" + }, + "type": "array" } }, "type": "object" }, - "panera.LocationsResponse": { + "mercari.SearchResponse": { "properties": { - "cities": { - "description": "Cities lists every city in the requested state (or just the one\nmatching city, when both are given), each with its cafes. Populated\nonly when state is given.", + "items": { "items": { - "$ref": "#/definitions/panera.LocationCity" + "$ref": "#/definitions/mercari.ItemSummary" }, "type": "array" }, - "city": { - "example": "Addison", + "query": { "type": "string" }, - "count": { - "example": 50, + "total_results": { "type": "integer" - }, - "fetched_at": { + } + }, + "type": "object" + }, + "mercari.Size": { + "properties": { + "code": { "type": "string" }, - "source_url": { - "type": "string" + "id": { + "type": "integer" }, - "state": { - "example": "IL", + "name": { "type": "string" }, - "states": { - "description": "States lists every state Panera serves, with its cafe count. Populated\nonly when neither state nor city is given.", - "items": { - "$ref": "#/definitions/panera.StateSummary" - }, - "type": "array" + "short_name": { + "type": "string" } }, "type": "object" }, - "panera.MenuAllergenEntry": { + "mercari.autocompleteResponseDoc": { "properties": { - "id": { - "example": "TREENUTS", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "example": "Tree Nuts", + "data": { + "$ref": "#/definitions/mercari.AutocompleteResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "panera.MenuAllergens": { + "mercari.homeResponseDoc": { "properties": { - "contains": { - "items": { - "$ref": "#/definitions/panera.MenuAllergenEntry" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "may_contain": { - "items": { - "$ref": "#/definitions/panera.MenuAllergenEntry" - }, - "type": "array" + "data": { + "$ref": "#/definitions/mercari.HomeResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "panera.MenuCategory": { + "mercari.masterResponseDoc": { "properties": { - "cat_id": { - "example": 20, + "code": { + "example": 200, "type": "integer" }, - "image_key": { - "example": "panini-and-sandwiches", - "type": "string" - }, - "item_ids": { - "description": "ItemIDs are the items directly under this category. Look them up in\nthe response's top-level Items list.", - "items": { - "type": "integer" - }, - "type": "array" + "data": { + "$ref": "#/definitions/mercari.MasterResponse" }, - "name": { - "example": "Sandwiches", + "msg": { + "example": "OK", "type": "string" - }, - "sort_weight": { - "example": 6, - "type": "integer" - }, - "subcategories": { - "items": { - "$ref": "#/definitions/panera.MenuCategory" - }, - "type": "array" } }, "type": "object" }, - "panera.MenuItem": { + "mercari.searchResponseDoc": { "properties": { - "allergens": { - "$ref": "#/definitions/panera.MenuAllergens" + "code": { + "example": 200, + "type": "integer" }, - "customizable": { - "example": true, - "type": "boolean" + "data": { + "$ref": "#/definitions/mercari.SearchResponse" }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "metacritic.BrowseItem": { + "properties": { "description": { "type": "string" }, - "image_key": { - "example": "strawberry-poppyseed-salad-pantry-reno-half", + "genres": { + "items": { + "$ref": "#/definitions/metacritic.Genre" + }, + "type": "array" + }, + "id": { + "type": "integer" + }, + "image": { "type": "string" }, - "in_stock": { - "description": "InStock reflects this cafe's live stockout feed. false means Panera\ncurrently has this item unavailable to order at this specific cafe.", - "example": true, - "type": "boolean" + "metascore": { + "$ref": "#/definitions/metacritic.ScoreSummary" }, - "item_id": { - "example": 1805, + "premiere_year": { "type": "integer" }, - "name": { - "example": "Half Strawberry Poppyseed Salad", + "rating": { "type": "string" }, - "nutrients": { - "items": { - "$ref": "#/definitions/panera.MenuNutrient" - }, - "type": "array" + "release_date": { + "type": "string" }, - "price": { - "example": 6.19, - "type": "number" + "season_count": { + "type": "integer" }, - "product_type": { - "example": "SALAD", + "slug": { "type": "string" }, - "tags": { - "description": "Tags are Panera's own merchandising badges for this item (e.g.\nNEW_PRODUCT, LIMITED_TIME, IN_SEASON, ITS_BACK, MY_PANERA_EXCLUSIVE).\nBest-effort: badges are fetched from a separate feed keyed to a\ndifferent id space than the rest of this catalog, so not every item\nresolves one -- see common.go's package doc.", - "items": { - "type": "string" - }, - "type": "array" + "title": { + "type": "string" }, - "wellness": { - "description": "Wellness are Panera's own dietary labels (e.g. Vegan, Vegetarian,\nGluten Conscious).", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "panera.MenuNutrient": { - "properties": { - "name": { - "example": "Calories", + "type": { + "example": "game", "type": "string" }, - "unit": { - "example": "Cal", + "url": { "type": "string" }, - "value": { - "example": 580, + "user_score": { "type": "number" } }, "type": "object" }, - "panera.MenuResponse": { + "metacritic.BrowseResponse": { "properties": { - "cafe_id": { - "example": 601447, - "type": "integer" + "genre": { + "type": "string" }, - "categories": { + "items": { "items": { - "$ref": "#/definitions/panera.MenuCategory" + "$ref": "#/definitions/metacritic.BrowseItem" }, "type": "array" }, - "count": { - "example": 343, + "page": { "type": "integer" }, - "fetched_at": { + "per_page": { + "type": "integer" + }, + "sort": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/panera.MenuItem" - }, - "type": "array" + "total": { + "type": "integer" }, - "source_url": { + "type": { "type": "string" } }, "type": "object" }, - "panera.QuantityRule": { + "metacritic.Credit": { "properties": { - "item_ids": { - "items": { - "type": "integer" - }, - "type": "array" - }, "name": { - "example": "Souffle", + "description": "Name of the person credited.", "type": "string" }, - "scope": { - "example": "group", + "role": { + "description": "Role of the person on the title, for example `Director`.", + "example": "Director", "type": "string" - }, - "windows": { - "items": { - "$ref": "#/definitions/panera.QuantityRuleWindow" - }, - "type": "array" - } - }, - "type": "object" - }, - "panera.QuantityRuleWindow": { - "properties": { - "from_offset_days": { - "example": 0, - "type": "integer" - }, - "max_quantity": { - "example": 6, - "type": "integer" - }, - "to_offset_days": { - "example": 2, - "type": "integer" } }, "type": "object" }, - "panera.QuantityRulesResponse": { + "metacritic.CriticReview": { "properties": { - "cafe_id": { - "example": 601447, - "type": "integer" - }, - "count": { - "example": 3, - "type": "integer" - }, - "fetched_at": { + "author": { + "description": "Name of the critic who wrote the review.", "type": "string" }, - "rules": { - "items": { - "$ref": "#/definitions/panera.QuantityRule" - }, - "type": "array" + "date": { + "description": "Date the review was published, in YYYY-MM-DD.", + "example": "2022-02-23", + "type": "string" }, - "source_url": { + "platform": { + "description": "Platform the game was reviewed on. Set for game reviews.", "type": "string" - } - }, - "type": "object" - }, - "panera.RetiredProduct": { - "properties": { - "availability_stage": { - "description": "AvailabilityStage is Panera's own classification -- observed values\nare RETIRED (permanently discontinued) and SEASONAL (currently out of\nrotation, may return).", - "example": "SEASONAL", + }, + "publication": { + "description": "Name of the publication that published the review.", "type": "string" }, - "description": { + "publication_slug": { + "description": "Metacritic slug of the publication.", "type": "string" }, - "image_key": { + "quote": { + "description": "Excerpt or summary of the review text.", "type": "string" }, - "item_id": { - "example": 650699, + "score": { + "description": "Score the critic gave, out of 100. Omitted when the review has no score.", "type": "integer" }, - "name": { - "example": "Italian Steak & Mozz", - "type": "string" - }, - "portion": { - "example": "Whole", + "url": { + "description": "URL of the full review on the publication's site.", "type": "string" } }, "type": "object" }, - "panera.RetiredProductsResponse": { + "metacritic.CriticReviewsResponse": { "properties": { - "cafe_id": { - "example": 601447, + "page": { + "description": "Page number returned, starting at 1.", "type": "integer" }, - "count": { - "example": 332, + "per_page": { + "description": "Number of reviews per page.", "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "items": { + "reviews": { + "description": "Critic reviews on this page.", "items": { - "$ref": "#/definitions/panera.RetiredProduct" + "$ref": "#/definitions/metacritic.CriticReview" }, "type": "array" }, - "source_url": { + "slug": { + "description": "Metacritic slug of the title the reviews belong to.", + "type": "string" + }, + "sort": { + "description": "Sort order applied: `date`, `score` or `publication`.", + "type": "string" + }, + "total": { + "description": "Total number of critic reviews for the title.", + "type": "integer" + }, + "type": { + "description": "Content type of the title: `game`, `movie` or `tv`.", "type": "string" } }, "type": "object" }, - "panera.StateSummary": { + "metacritic.Genre": { "properties": { - "cafe_count": { - "example": 85, + "id": { + "description": "Metacritic genre id.", "type": "integer" }, - "country_code": { - "example": "US", - "type": "string" - }, - "state": { - "example": "IL", + "name": { + "description": "Genre name, for example `Action RPG`.", "type": "string" } }, "type": "object" }, - "panera.TimeSlotWindow": { + "metacritic.Platform": { "properties": { - "end_time": { - "example": "2026-09-10T11:15:00-05:00", + "id": { + "description": "Metacritic platform id.", + "type": "integer" + }, + "is_lead": { + "description": "Whether this is the game's lead platform.", + "type": "boolean" + }, + "metascore": { + "allOf": [ + { + "$ref": "#/definitions/metacritic.ScoreSummary" + } + ], + "description": "Critic score summary for the game on this platform." + }, + "name": { + "description": "Platform name, for example `PlayStation 5`.", + "example": "PlayStation 5", "type": "string" }, - "start_time": { - "example": "2026-09-10T11:10:00-05:00", + "release_date": { + "description": "Release date of the game on this platform.", "type": "string" } }, "type": "object" }, - "panera.TimeSlotsResponse": { + "metacritic.Product": { "properties": { - "cafe_id": { - "example": 601447, - "type": "integer" + "countries": { + "description": "Countries Metacritic lists for the title.", + "items": { + "type": "string" + }, + "type": "array" }, - "close": { - "example": "21:00", + "description": { + "description": "Plot or game summary as shown on Metacritic.", "type": "string" }, - "count": { - "example": 178, + "duration": { + "description": "Running time of the title as Metacritic lists it.", "type": "integer" }, - "date": { - "example": "2026-09-10", - "type": "string" + "genres": { + "description": "Genres Metacritic assigns to the title.", + "items": { + "$ref": "#/definitions/metacritic.Genre" + }, + "type": "array" }, - "fetched_at": { + "id": { + "description": "Metacritic's numeric id for the title.", + "type": "integer" + }, + "image": { + "description": "Main image of the title as Metacritic lists it.", "type": "string" }, - "open": { - "example": "06:00", + "imdb_id": { + "description": "IMDb id of the title, for example `tt0903747`.", "type": "string" }, - "source_url": { + "imdb_url": { + "description": "URL of the title's IMDb page.", "type": "string" }, - "windows": { + "in_theaters": { + "description": "Whether the movie is currently in theaters. Omitted when false.", + "type": "boolean" + }, + "metascore": { + "allOf": [ + { + "$ref": "#/definitions/metacritic.ScoreSummary" + } + ], + "description": "Critic score summary for the title." + }, + "networks": { + "description": "TV networks that air the show.", "items": { - "$ref": "#/definitions/panera.TimeSlotWindow" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "panera.UpcomingDay": { - "properties": { - "close": { - "example": "21:00", - "type": "string" }, - "closed": { - "example": false, - "type": "boolean" + "platforms": { + "description": "Platforms the game is released on, each with its own Metascore.", + "items": { + "$ref": "#/definitions/metacritic.Platform" + }, + "type": "array" }, - "date": { - "example": "2026-09-02", - "type": "string" + "premiere_year": { + "description": "Year the title premiered or was first released.", + "type": "integer" }, - "day_of_week": { - "example": "Wednesday", + "production": { + "allOf": [ + { + "$ref": "#/definitions/metacritic.Production" + } + ], + "description": "Companies, crew and official site for the title." + }, + "rating": { + "description": "Content rating of the title, for example `M` or `TV-MA`.", + "example": "M", "type": "string" }, - "open": { - "example": "06:00", + "release_date": { + "description": "Release date of the title, in YYYY-MM-DD.", + "example": "2022-02-25", "type": "string" - } - }, - "type": "object" - }, - "panera.UpsellSuggestion": { - "properties": { - "item_id": { - "example": 7392, + }, + "season_count": { + "description": "Number of seasons of the show.", "type": "integer" }, - "item_name": { - "example": "Bacon Turkey Bravo Sandwich on Thin Tom Basil - Retail - Half Portion", + "slug": { + "description": "Metacritic URL slug of the title. Use it with the review endpoints.", "type": "string" }, - "suggestions": { - "items": { - "$ref": "#/definitions/panera.UpsellSuggestionItem" - }, - "type": "array" - } - }, - "type": "object" - }, - "panera.UpsellSuggestionItem": { - "properties": { - "item_id": { - "example": 801215, - "type": "integer" + "tagline": { + "description": "Marketing tagline of the title.", + "type": "string" }, - "name": { - "example": "Extra Turkey", + "title": { + "description": "Title name as shown on Metacritic.", + "type": "string" + }, + "type": { + "description": "Content type of the title: `game`, `movie` or `tv`.", + "example": "game", + "type": "string" + }, + "url": { + "description": "Metacritic page URL of the title.", "type": "string" + }, + "user_score": { + "allOf": [ + { + "$ref": "#/definitions/metacritic.ScoreSummary" + } + ], + "description": "User score summary for the title. Omitted when it has no user score yet." + }, + "video": { + "allOf": [ + { + "$ref": "#/definitions/metacritic.Video" + } + ], + "description": "Trailer or clip Metacritic links for the title." } }, "type": "object" }, - "panera.UpsellSuggestionsResponse": { + "metacritic.Production": { "properties": { - "cafe_id": { - "example": 601447, - "type": "integer" - }, - "count": { - "example": 513, - "type": "integer" - }, - "fetched_at": { - "type": "string" + "companies": { + "description": "Companies involved in making or publishing the title, without duplicates (up to 12).", + "items": { + "type": "string" + }, + "type": "array" }, - "items": { + "crew": { + "description": "Crew credits for the title.", "items": { - "$ref": "#/definitions/panera.UpsellSuggestion" + "$ref": "#/definitions/metacritic.Credit" }, "type": "array" }, - "source_url": { + "official_site": { + "description": "URL of the title's official website.", "type": "string" } }, "type": "object" }, - "panera.atWorkLocationsResponseDoc": { + "metacritic.ScoreSummary": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "max": { + "description": "Highest possible value of `score`, for example `100`.", + "example": 100, "type": "integer" }, - "data": { - "$ref": "#/definitions/panera.AtWorkLocationsResponse" + "negative_count": { + "description": "Number of negative reviews counted in the score.", + "type": "integer" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "panera.cafeResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "neutral_count": { + "description": "Number of neutral (mixed) reviews counted in the score.", "type": "integer" }, - "data": { - "$ref": "#/definitions/panera.CafeResponse" + "positive_count": { + "description": "Number of positive reviews counted in the score.", + "type": "integer" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "panera.cateringDeliveryInfoResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "review_count": { + "description": "Number of reviews the score is based on.", "type": "integer" }, - "data": { - "$ref": "#/definitions/panera.CateringDeliveryInfoResponse" + "score": { + "description": "Score value on the scale given by `max`. Metascores are out of 100 and user scores out of 10.", + "type": "number" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "sentiment": { + "description": "Metacritic's verdict for the score, for example `Universal acclaim`.", + "example": "Universal acclaim", + "type": "string" + }, + "url": { + "description": "Metacritic page listing the reviews behind the score.", + "type": "string" } }, "type": "object" }, - "panera.cateringMenuResponseDoc": { + "metacritic.UserReview": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "author": { + "description": "Username of the member who wrote the review.", + "type": "string" }, - "data": { - "$ref": "#/definitions/panera.CateringMenuResponse" + "date": { + "description": "Date the review was posted, in YYYY-MM-DD.", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "panera.geocodeResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "id": { + "description": "Metacritic review id.", + "type": "string" }, - "data": { - "$ref": "#/definitions/panera.GeocodeResponse" + "platform": { + "description": "Platform the game was reviewed on. Set for game reviews.", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "panera.itemDetailResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "quote": { + "description": "Text of the user review.", + "type": "string" + }, + "score": { + "description": "Score the user gave, out of 10. Omitted when the review has no score.", "type": "integer" }, - "data": { - "$ref": "#/definitions/panera.ItemDetailResponse" + "spoiler": { + "description": "Whether the review is flagged as containing spoilers.", + "type": "boolean" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "panera.itemOptionsResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "thumbs_down": { + "description": "Number of members who voted the review not helpful.", "type": "integer" }, - "data": { - "$ref": "#/definitions/panera.ItemOptionsResponse" - }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "thumbs_up": { + "description": "Number of members who voted the review helpful.", + "type": "integer" } }, "type": "object" }, - "panera.locationsResponseDoc": { + "metacritic.UserReviewsResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "page": { + "description": "Page number returned, starting at 1.", "type": "integer" }, - "data": { - "$ref": "#/definitions/panera.LocationsResponse" + "per_page": { + "description": "Number of reviews per page.", + "type": "integer" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "reviews": { + "description": "User reviews on this page.", + "items": { + "$ref": "#/definitions/metacritic.UserReview" + }, + "type": "array" + }, + "slug": { + "description": "Metacritic slug of the title the reviews belong to.", + "type": "string" + }, + "sort": { + "description": "Sort order applied: `date`, `score` or `helpful`.", + "type": "string" + }, + "total": { + "description": "Total number of user reviews for the title.", + "type": "integer" + }, + "type": { + "description": "Content type of the title: `game`, `movie` or `tv`.", + "type": "string" } }, "type": "object" }, - "panera.menuResponseDoc": { + "metacritic.Video": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "duration": { + "description": "Length of the video as Metacritic lists it.", "type": "integer" }, - "data": { - "$ref": "#/definitions/panera.MenuResponse" + "embed_url": { + "description": "URL for embedding the video player.", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "title": { + "description": "Title of the video.", + "type": "string" + }, + "url": { + "description": "URL of the video.", + "type": "string" } }, "type": "object" }, - "panera.quantityRulesResponseDoc": { + "metacritic.browseResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/panera.QuantityRulesResponse" + "$ref": "#/definitions/metacritic.BrowseResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "panera.retiredProductsResponseDoc": { + "metacritic.criticReviewsResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/panera.RetiredProductsResponse" + "$ref": "#/definitions/metacritic.CriticReviewsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "panera.timeSlotsResponseDoc": { + "metacritic.productResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/panera.TimeSlotsResponse" + "$ref": "#/definitions/metacritic.Product" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "panera.upsellSuggestionsResponseDoc": { + "metacritic.userReviewsResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/panera.UpsellSuggestionsResponse" + "$ref": "#/definitions/metacritic.UserReviewsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "papajohns.AllergenFlags": { + "metaculus.ForecastHistoryPoint": { "properties": { - "egg": { - "type": "boolean" - }, - "fish": { - "type": "boolean" + "center": { + "description": "Central value of the community forecast, as Metaculus reports it. Same as the first value in `centers`.", + "example": 0.36, + "type": "number" }, - "milk": { - "type": "boolean" + "centers": { + "description": "All central values of the forecast, as Metaculus reports them. Multiple-choice questions have one per option.", + "items": { + "type": "number" + }, + "type": "array" }, - "peanut": { - "type": "boolean" + "end_time": { + "description": "End of the period this point covers, in UTC (RFC 3339).", + "example": "2026-06-01T17:06:20Z", + "type": "string" }, - "sesame": { - "type": "boolean" + "end_ts": { + "description": "End of the period this point covers, in Unix seconds.", + "example": 1780333580.206417, + "type": "number" }, - "shellfish": { - "type": "boolean" + "forecaster_count": { + "description": "Number of forecasters behind this point.", + "example": 17, + "type": "integer" }, - "soy": { - "type": "boolean" + "interval_lower_bounds": { + "description": "All lower interval bounds of the forecast, in the same order as `centers`.", + "items": { + "type": "number" + }, + "type": "array" }, - "tree_nut": { - "type": "boolean" + "interval_upper_bounds": { + "description": "All upper interval bounds of the forecast, in the same order as `centers`.", + "items": { + "type": "number" + }, + "type": "array" }, - "wheat": { - "type": "boolean" - } - }, - "type": "object" - }, - "papajohns.AllergenItem": { - "properties": { - "allergens": { - "$ref": "#/definitions/papajohns.AllergenFlags" + "lower": { + "description": "Lower bound of the forecast interval, as Metaculus reports it.", + "example": 0.26, + "type": "number" }, - "name": { - "example": "Original Crust", + "start_time": { + "description": "Start of the period this point covers, in UTC (RFC 3339).", + "example": "2026-06-01T17:00:00Z", "type": "string" }, - "section": { - "example": "Crust Options", - "type": "string" + "start_ts": { + "description": "Start of the period this point covers, in Unix seconds.", + "example": 1780333200, + "type": "number" + }, + "upper": { + "description": "Upper bound of the forecast interval, as Metaculus reports it.", + "example": 0.61, + "type": "number" } }, "type": "object" }, - "papajohns.AllergensResponse": { + "metaculus.ForecastHistoryResponse": { "properties": { - "count": { - "example": 170, + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:00:00Z", + "type": "string" + }, + "max_points": { + "description": "Maximum number of history points requested. When there are more, the most recent are returned.", + "example": 500, "type": "integer" }, - "fetched_at": { + "method": { + "description": "Aggregation method used: `recency_weighted`, `unweighted` or `single_aggregation`.", + "example": "recency_weighted", "type": "string" }, - "items": { + "points": { + "description": "Forecast history points in time order, one item per period.", "items": { - "$ref": "#/definitions/papajohns.AllergenItem" + "$ref": "#/definitions/metaculus.ForecastHistoryPoint" }, "type": "array" }, + "points_count": { + "description": "Number of history points returned.", + "example": 25, + "type": "integer" + }, + "public_page_derived": { + "description": "Always `true`: the values are those shown publicly on Metaculus, without a login.", + "example": true, + "type": "boolean" + }, + "question": { + "allOf": [ + { + "$ref": "#/definitions/metaculus.QuestionRow" + } + ], + "description": "Summary of the Metaculus question this response is about." + }, "source_url": { + "description": "URL the data was read from.", + "example": "https://www.metaculus.com/questions/43612/", "type": "string" } }, "type": "object" }, - "papajohns.Deal": { + "metaculus.ForecastSummary": { "properties": { - "description": { - "type": "string" + "center": { + "description": "Central value of the community forecast, as Metaculus reports it.", + "example": 0.52, + "type": "number" }, - "id": { - "example": "66262", - "type": "string" + "centers": { + "description": "All central values of the forecast, as Metaculus reports them. Multiple-choice questions have one per option.", + "items": { + "type": "number" + }, + "type": "array" }, - "image_url": { - "type": "string" + "forecaster_count": { + "description": "Number of forecasters behind the latest forecast.", + "example": 54, + "type": "integer" }, - "offer_code": { - "description": "OfferCode is the code the offer is redeemed with.", - "example": "EDNJX", - "type": "string" + "history_points": { + "description": "Number of history points available for this method.", + "example": 25, + "type": "integer" }, - "price": { - "description": "Price is the offer price where the deal advertises one. A deal whose\nprice depends on what the customer builds reports 0.", - "example": 12.99, - "type": "number" + "interval_lower_bounds": { + "description": "All lower interval bounds of the forecast, in the same order as `centers`.", + "items": { + "type": "number" + }, + "type": "array" }, - "regular_price": { - "description": "RegularPrice is the struck-through pre-offer price, present only when\nthe deal actually advertises a saving.", - "example": 23.49, - "type": "number" + "interval_upper_bounds": { + "description": "All upper interval bounds of the forecast, in the same order as `centers`.", + "items": { + "type": "number" + }, + "type": "array" }, - "tag": { - "description": "Tag is the merchandising label, e.g. \"Featured Deal\".", - "example": "Featured Deal", - "type": "string" + "lower": { + "description": "Lower bound of the forecast interval, as Metaculus reports it.", + "example": 0.37, + "type": "number" }, - "title": { - "example": "Ultimate Pepperoni Pizza", + "method": { + "description": "Aggregation method name, for example `recency_weighted`, `unweighted` or `single_aggregation`.", + "example": "recency_weighted", "type": "string" }, - "url": { - "description": "URL is the deal-builder link for this offer.", - "type": "string" + "upper": { + "description": "Upper bound of the forecast interval, as Metaculus reports it.", + "example": 0.66, + "type": "number" } }, "type": "object" }, - "papajohns.DealsResponse": { + "metaculus.ForecastsResponse": { "properties": { - "count": { - "example": 16, - "type": "integer" + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:00:00Z", + "type": "string" }, - "deals": { + "methods": { + "description": "Latest forecast per aggregation method, with the preferred methods first.", "items": { - "$ref": "#/definitions/papajohns.Deal" + "$ref": "#/definitions/metaculus.ForecastSummary" }, "type": "array" }, - "fetched_at": { - "type": "string" + "methods_count": { + "description": "Number of aggregation methods returned.", + "example": 3, + "type": "integer" }, - "national_default": { - "description": "NationalDefault is true when no store was selected. National promotions\nare frequently placeholders prompting the customer to pick a store, so a\ncaller should prefer passing a store_id.", - "example": false, + "public_page_derived": { + "description": "Always `true`: the values are those shown publicly on Metaculus, without a login.", + "example": true, "type": "boolean" }, + "question": { + "allOf": [ + { + "$ref": "#/definitions/metaculus.QuestionRow" + } + ], + "description": "Summary of the Metaculus question this response is about." + }, "source_url": { + "description": "URL the data was read from.", + "example": "https://www.metaculus.com/questions/43612/", "type": "string" - }, - "store_id": { - "example": 5054, - "type": "integer" } }, "type": "object" }, - "papajohns.DirectoryChild": { + "metaculus.OptionForecast": { "properties": { - "is_store": { - "description": "IsStore marks a child that is a store page rather than another\ndirectory level -- call /papajohns/store with its path.", - "example": false, - "type": "boolean" - }, - "name": { - "example": "CA", - "type": "string" + "center": { + "description": "Central value of the community forecast for this option.", + "example": 0.42, + "type": "number" }, - "path": { - "example": "united-states/ca", - "type": "string" + "forecast_value": { + "description": "Forecast value for this option, as Metaculus reports it.", + "example": 0.42, + "type": "number" }, - "store_count": { - "description": "StoreCount is how many stores sit under this branch, as Yext reports\nit. Absent once children are stores themselves.", - "example": 222, + "forecaster_count": { + "description": "Number of forecasters behind this option's forecast.", + "example": 5, "type": "integer" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "papajohns.DirectoryResponse": { - "properties": { - "children": { - "items": { - "$ref": "#/definitions/papajohns.DirectoryChild" - }, - "type": "array" - }, - "count": { - "example": 120, + "index": { + "description": "Position of the option in the question's option list, starting at 0.", + "example": 0, "type": "integer" }, - "fetched_at": { + "label": { + "description": "Name of the option, for example `OpenAI`.", + "example": "OpenAI", "type": "string" }, - "name": { - "type": "string" + "lower": { + "description": "Lower bound of the forecast interval for this option.", + "example": 0.31, + "type": "number" }, - "path": { - "example": "united-states/ca", - "type": "string" + "mean": { + "description": "Mean of the community forecast for this option.", + "example": 0.39, + "type": "number" }, - "source_url": { - "type": "string" + "upper": { + "description": "Upper bound of the forecast interval for this option.", + "example": 0.43, + "type": "number" } }, "type": "object" }, - "papajohns.IndiaAvailability": { + "metaculus.OptionsChange": { "properties": { - "blacked_out_channel_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "blacked_out_days": { - "items": { - "type": "string" - }, - "type": "array" + "changed_at": { + "description": "Time the option list changed, as Metaculus reports it.", + "example": "0001-01-01T00:00:00", + "type": "string" }, - "blacked_out_store_ids": { + "options": { + "description": "Option labels in effect from that time.", "items": { "type": "string" }, @@ -152111,698 +158599,773 @@ }, "type": "object" }, - "papajohns.IndiaCurrency": { + "metaculus.OptionsResponse": { "properties": { - "code": { - "example": "₹", + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:00:00Z", "type": "string" }, - "country_code": { - "example": "91", + "method": { + "description": "Aggregation method used: `recency_weighted`, `unweighted` or `single_aggregation`.", + "example": "recency_weighted", "type": "string" }, - "locale": { - "example": "en-IN", - "type": "string" + "options": { + "description": "Latest forecast for each option of the question.", + "items": { + "$ref": "#/definitions/metaculus.OptionForecast" + }, + "type": "array" }, - "name": { - "example": "Indian Rupee", + "options_count": { + "description": "Number of options returned.", + "example": 2, + "type": "integer" + }, + "options_history": { + "description": "Earlier versions of the option list, when the options changed.", + "items": { + "$ref": "#/definitions/metaculus.OptionsChange" + }, + "type": "array" + }, + "public_page_derived": { + "description": "Always `true`: the values are those shown publicly on Metaculus, without a login.", + "example": true, + "type": "boolean" + }, + "question": { + "allOf": [ + { + "$ref": "#/definitions/metaculus.QuestionRow" + } + ], + "description": "Summary of the Metaculus question this response is about." + }, + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.metaculus.com/questions/43731/", "type": "string" } }, "type": "object" }, - "papajohns.IndiaDealChoice": { + "metaculus.Project": { "properties": { - "category": { - "example": "Pizzas", + "emoji": { + "description": "Emoji shown next to the category or project on Metaculus.", + "example": "💼", "type": "string" }, - "item_id": { - "example": "71", - "type": "string" + "id": { + "description": "Metaculus id of the category or project.", + "example": 3698, + "type": "integer" }, "name": { - "example": "MARGHERITA", + "description": "Display name, for example `Economy & Business`.", + "example": "Economy & Business", "type": "string" }, - "price": { - "example": 399, - "type": "number" - }, - "size": { - "example": "Medium", + "slug": { + "description": "URL slug, for example `economy-business`.", + "example": "economy-business", "type": "string" }, - "size_id": { - "example": "2", + "type": { + "description": "Kind of project, for example `category` or `tournament`.", + "example": "category", "type": "string" } }, "type": "object" }, - "papajohns.IndiaDealResponse": { + "metaculus.QuestionMetadataResponse": { "properties": { - "buy_x": { - "type": "integer" + "actual_close_time": { + "description": "Time the question actually closed to forecasts, as Metaculus reports it.", + "example": "2026-12-30T23:59:00Z", + "type": "string" }, - "category_id": { - "example": "11", + "actual_resolve_time": { + "description": "Time the question actually resolved, as Metaculus reports it.", + "example": "2027-01-02T00:00:00Z", "type": "string" }, - "currency": { - "$ref": "#/definitions/papajohns.IndiaCurrency" + "all_options_ever": { + "description": "Every option label the question has ever had.", + "items": { + "type": "string" + }, + "type": "array" }, - "description": { - "example": "Sakkath Combo", + "default_aggregation_method": { + "description": "Aggregation method Metaculus shows by default, for example `recency_weighted`.", + "example": "recency_weighted", "type": "string" }, - "end_time": { - "example": "23:59:59", + "default_score_type": { + "description": "Score type Metaculus uses by default, for example `peer`.", + "example": "peer", "type": "string" }, "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:00:00Z", "type": "string" }, - "get_y": { + "group_variable": { + "description": "Name of the variable that distinguishes the questions in a group, for example `Company`.", + "example": "Company", + "type": "string" + }, + "inbound_outcome_count": { + "description": "Number of outcomes inside the question's range.", + "example": 10, "type": "integer" }, - "highest_of_two": { + "include_bots_in_aggregates": { + "description": "Whether bot forecasts are included in the aggregate forecasts.", + "example": false, "type": "boolean" }, - "id": { - "example": "17", - "type": "string" + "open_lower_bound": { + "description": "Whether the answer can fall below the lower end of the range.", + "example": false, + "type": "boolean" }, - "image_url": { + "open_upper_bound": { + "description": "Whether the answer can fall above the upper end of the range.", + "example": false, + "type": "boolean" + }, + "options": { + "description": "Current option labels of a multiple-choice question.", + "items": { + "type": "string" + }, + "type": "array" + }, + "options_history": { + "description": "Earlier versions of the option list, when the options changed.", + "items": { + "$ref": "#/definitions/metaculus.OptionsChange" + }, + "type": "array" + }, + "options_order": { + "description": "How the options are ordered, for example `DEFAULT`.", + "example": "DEFAULT", "type": "string" }, - "market": { - "example": "india", + "possibilities": { + "description": "Possible outcomes of the question, as Metaculus describes them." + }, + "public_page_derived": { + "description": "Always `true`: the values are those shown publicly on Metaculus, without a login.", + "example": true, + "type": "boolean" + }, + "question": { + "allOf": [ + { + "$ref": "#/definitions/metaculus.QuestionRow" + } + ], + "description": "Summary of the Metaculus question this response is about." + }, + "resolution": { + "description": "Resolution of the question, as Metaculus reports it. Omitted while unresolved.", "type": "string" }, - "name": { - "example": "Sakkath Veg Combo - Dine In", + "resolution_set_time": { + "description": "Time the resolution was set, as Metaculus reports it.", + "example": "2027-01-02T00:00:00Z", "type": "string" }, - "price": { - "description": "Price is the deal's fixed price when price_type is fixedPrice, and 0\nfor a computed deal (BuyXGetY, HalfAndHalf, variablePrice).", - "example": 699, - "type": "number" + "scaling": { + "allOf": [ + { + "$ref": "#/definitions/metaculus.QuestionScaling" + } + ], + "description": "Range and scale settings of a numeric or date question." }, - "price_type": { - "example": "fixedPrice", + "short_title": { + "description": "Short form of the question title.", + "example": "OpenAI or Anthropic - higher valuation on Jan 1, 2027?", "type": "string" }, - "slots": { - "items": { - "$ref": "#/definitions/papajohns.IndiaDealSlot" - }, - "type": "array" - }, "source_url": { + "description": "URL the data was read from.", + "example": "https://www.metaculus.com/questions/43731/", "type": "string" - }, - "start_time": { - "example": "00:00:00", + } + }, + "type": "object" + }, + "metaculus.QuestionResponse": { + "properties": { + "fetched_at": { + "example": "2026-06-07T14:00:00Z", "type": "string" }, - "sum_of_two": { - "description": "SumOfTwo and HighestOfTwo describe how a two-item deal is priced when\nprice_type is HalfAndHalf.", - "type": "boolean" + "question": { + "$ref": "#/definitions/metaculus.QuestionRow" + }, + "source_url": { + "example": "https://www.metaculus.com/questions/43612/", + "type": "string" } }, "type": "object" }, - "papajohns.IndiaDealSlot": { + "metaculus.QuestionRow": { "properties": { - "choice_count": { - "example": 5, - "type": "integer" - }, - "choices": { + "categories": { + "description": "Categories the question is filed under.", "items": { - "$ref": "#/definitions/papajohns.IndiaDealChoice" + "$ref": "#/definitions/metaculus.Project" }, "type": "array" }, - "id": { - "example": "1376", - "type": "string" + "comment_count": { + "description": "Number of comments on the question.", + "example": 16, + "type": "integer" }, - "name": { + "edited_at": { + "description": "Time the question was last edited, in UTC (RFC 3339).", + "example": "2026-06-07T13:14:34Z", "type": "string" }, - "optional": { - "example": false, - "type": "boolean" + "forecaster_count": { + "description": "Number of forecasters who have forecast on the question.", + "example": 54, + "type": "integer" }, - "percentage_off": { - "type": "number" + "forecasts_count": { + "description": "Total number of forecasts submitted on the question.", + "example": 149, + "type": "integer" }, - "quantity": { - "example": 1, + "id": { + "description": "Metaculus post id of the question. Use it with the question endpoints.", + "example": 43612, "type": "integer" }, - "size": { - "example": "Medium", - "type": "string" - } - }, - "type": "object" - }, - "papajohns.IndiaMenuCategory": { - "properties": { - "description": { - "type": "string" + "latest_forecast_center": { + "description": "Central value of the latest community forecast, as Metaculus reports it.", + "example": 0.52, + "type": "number" }, - "id": { - "example": "6", - "type": "string" + "latest_forecast_lower": { + "description": "Lower bound of the latest community forecast interval.", + "example": 0.37, + "type": "number" }, - "image_url": { - "type": "string" + "latest_forecast_upper": { + "description": "Upper bound of the latest community forecast interval.", + "example": 0.66, + "type": "number" }, - "item_count": { - "example": 29, - "type": "integer" + "open_time": { + "description": "Time the question opened for forecasts, in UTC (RFC 3339).", + "example": "2026-06-01T17:00:00Z", + "type": "string" }, - "items": { + "projects": { + "description": "Tournaments and projects the question belongs to.", "items": { - "$ref": "#/definitions/papajohns.IndiaMenuItem" + "$ref": "#/definitions/metaculus.Project" }, "type": "array" }, - "name": { - "example": "Pizzas", + "public_page_derived": { + "description": "Always `true`: the values are those shown publicly on Metaculus, without a login.", + "example": true, + "type": "boolean" + }, + "published_at": { + "description": "Time the question was published, in UTC (RFC 3339).", + "example": "2026-05-29T15:33:53Z", "type": "string" }, - "rank": { - "example": 7, + "question_id": { + "description": "Metaculus id of the underlying question, which can differ from the post `id`.", + "example": 43609, "type": "integer" }, - "subcategories": { - "items": { - "$ref": "#/definitions/papajohns.IndiaMenuSubcategory" - }, - "type": "array" - } - }, - "type": "object" - }, - "papajohns.IndiaMenuFilters": { - "properties": { - "availability_filter_applied": { - "description": "AvailabilityFilterApplied is false unless store_id, channel_id, and day\nwere all supplied -- the operator's blackout rules need all three.", + "question_title": { + "description": "Full wording of the question.", + "example": "What will be the World Bank monthly price of liquid sulphur in June 2026?", + "type": "string" + }, + "question_type": { + "description": "Question type, for example `binary`, `numeric` or `multiple_choice`.", + "example": "numeric", + "type": "string" + }, + "resolved": { + "description": "Whether the question has been resolved.", "example": false, "type": "boolean" }, - "category_id": { + "scheduled_close_time": { + "description": "Time the question is scheduled to close to forecasts, in UTC (RFC 3339).", + "example": "2026-07-15T00:00:00Z", "type": "string" }, - "channel": { - "example": "Delivery", + "scheduled_resolve_time": { + "description": "Time the question is scheduled to resolve, in UTC (RFC 3339).", + "example": "2026-09-07T00:00:00Z", "type": "string" }, - "channel_id": { + "slug": { + "description": "URL slug of the question.", + "example": "tampa-sulphur-price-in-june-2026", "type": "string" }, - "day": { + "status": { + "description": "Question status on Metaculus, for example `open`.", + "example": "open", "type": "string" }, - "day_name": { - "example": "Monday", + "title": { + "description": "Question title as shown on Metaculus.", + "example": "Tampa sulphur price in June 2026?", "type": "string" }, - "store_id": { + "unit": { + "description": "Unit of the answer for numeric questions, for example `USD/metric ton`.", + "example": "USD/metric ton", "type": "string" }, - "tag": { + "url": { + "description": "Metaculus page URL of the question.", + "example": "https://www.metaculus.com/questions/43612/tampa-sulphur-price-in-june-2026/", "type": "string" } }, "type": "object" }, - "papajohns.IndiaMenuItem": { + "metaculus.QuestionScaling": { "properties": { - "availability": { - "allOf": [ - { - "$ref": "#/definitions/papajohns.IndiaAvailability" - } - ], - "description": "Availability lists the store/channel/day combinations where this item is\nblacked out. The item is unavailable only where all three match; empty\nlists mean it is available everywhere." + "continuous_range": { + "description": "ContinuousRange passes through Metaculus's scaling.continuous_range: null\nfor discrete questions, an array of numbers (the CDF internal locations)\nfor continuous/numeric ones. It was previously typed []string, so hydrating\na commented continuous question failed to decode and 503'd the comments\nfeeds; numbers are the correct element type.", + "items": {}, + "type": "array" }, - "buy_x": { + "inbound_outcome_count": { + "description": "Number of outcomes inside the question's range.", + "example": 10, "type": "integer" }, - "category_id": { - "example": "6", - "type": "string" - }, - "customizable": { - "description": "Customizable reports whether the item exposes a size/crust/topping tree.", - "example": true, - "type": "boolean" + "nominal_max": { + "description": "Highest value of the range as shown to forecasters.", + "example": 100, + "type": "number" }, - "description": { - "type": "string" + "nominal_min": { + "description": "Lowest value of the range as shown to forecasters.", + "example": 0, + "type": "number" }, - "discounted": { + "open_lower_bound": { + "description": "Whether the answer can fall below the lower end of the range.", "example": false, "type": "boolean" }, - "get_y": { - "type": "integer" - }, - "id": { - "example": "71", - "type": "string" - }, - "image_url": { - "type": "string" + "open_upper_bound": { + "description": "Whether the answer can fall above the upper end of the range.", + "example": false, + "type": "boolean" }, - "kind": { - "description": "Kind is \"item\" for an a la carte product or \"deal\" for a combo/offer.", - "example": "item", - "type": "string" + "range_max": { + "description": "Upper end of the question's range.", + "example": 100, + "type": "number" }, - "name": { - "example": "MARGHERITA", - "type": "string" + "range_min": { + "description": "Lower end of the question's range.", + "example": 0, + "type": "number" }, - "price": { - "description": "Price is the item's list price in the franchise currency. A deal with a\ncomputed price (BuyXGetY, HalfAndHalf, variablePrice) reports 0 here --\nread price_type instead.", - "example": 399, + "zero_point": { + "description": "Zero point of the question's range, when Metaculus defines one.", + "example": 0, "type": "number" + } + }, + "type": "object" + }, + "metaculus.QuestionsResponse": { + "properties": { + "feed": { + "description": "Feed the questions came from, for example `questions`.", + "example": "questions", + "type": "string" }, - "price_type": { - "description": "PriceType is set on deals only: fixedPrice, BuyXGetY, HalfAndHalf, or\nvariablePrice.", - "example": "BuyXGetY", + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:00:00Z", "type": "string" }, - "rank": { - "example": 1, + "limit": { + "description": "Maximum number of questions requested.", + "example": 10, "type": "integer" }, - "sizes": { - "description": "Sizes is populated only when include_options=true.", + "questions": { + "description": "Questions in the feed, one item per question.", "items": { - "$ref": "#/definitions/papajohns.IndiaMenuSize" + "$ref": "#/definitions/metaculus.QuestionRow" }, "type": "array" }, - "strike_off_price": { - "example": 499, - "type": "number" - }, - "sub_category_id": { - "example": "4", + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.metaculus.com/questions/", "type": "string" - }, - "tags": { - "description": "Tags are the item's dietary/attribute markers, e.g. Veg, Non Veg, Spicy.", - "items": { - "type": "string" - }, - "type": "array" - }, - "upsell": { - "example": false, - "type": "boolean" } }, "type": "object" }, - "papajohns.IndiaMenuItemResponse": { + "metaculus.forecastHistoryResponseDoc": { "properties": { - "category": { - "description": "Category is the section this item was found under.", - "example": "Pizzas", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "currency": { - "$ref": "#/definitions/papajohns.IndiaCurrency" + "data": { + "$ref": "#/definitions/metaculus.ForecastHistoryResponse" }, - "fetched_at": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "metaculus.forecastsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "item": { - "$ref": "#/definitions/papajohns.IndiaMenuItem" + "data": { + "$ref": "#/definitions/metaculus.ForecastsResponse" }, - "market": { - "example": "india", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "metaculus.metadataResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/metaculus.QuestionMetadataResponse" }, - "taxes": { - "items": { - "$ref": "#/definitions/papajohns.IndiaTax" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "papajohns.IndiaMenuOptionChoice": { + "metaculus.optionsResponseDoc": { "properties": { - "default": { - "example": true, - "type": "boolean" - }, - "extra": { - "example": false, - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "half_price": { - "example": 399.5, - "type": "number" + "data": { + "$ref": "#/definitions/metaculus.OptionsResponse" }, - "id": { - "example": "1", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "metaculus.questionResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "image_url": { - "type": "string" + "data": { + "$ref": "#/definitions/metaculus.QuestionResponse" }, - "name": { - "example": "Original Crust", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "metaculus.questionsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "price": { - "example": 799, - "type": "number" - }, - "removable": { - "example": false, - "type": "boolean" + "data": { + "$ref": "#/definitions/metaculus.QuestionsResponse" }, - "strike_off_price": { - "type": "number" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "papajohns.IndiaMenuOptionGroup": { + "metajobs.ListResponse": { "properties": { - "base_price": { - "example": true, - "type": "boolean" - }, - "choices": { + "listings": { "items": { - "$ref": "#/definitions/papajohns.IndiaMenuOptionChoice" + "$ref": "#/definitions/metajobs.MetaJobListing" }, "type": "array" }, - "halves_enabled": { - "example": true, - "type": "boolean" - }, - "id": { - "example": "1", - "type": "string" + "page": { + "example": 1, + "type": "integer" }, - "name": { - "example": "Crust", - "type": "string" + "page_size": { + "example": 50, + "type": "integer" }, - "selection_rule": { - "example": "Exactly", + "source_url": { "type": "string" }, - "selection_spec": { - "example": "1", - "type": "string" + "total": { + "example": 754, + "type": "integer" } }, "type": "object" }, - "papajohns.IndiaMenuResponse": { + "metajobs.MetaJob": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/papajohns.IndiaMenuCategory" - }, - "type": "array" - }, - "currency": { - "$ref": "#/definitions/papajohns.IndiaCurrency" + "compensation_country": { + "example": "US", + "type": "string" }, - "fetched_at": { + "compensation_max": { + "example": "$241,000/year", "type": "string" }, - "filters": { - "$ref": "#/definitions/papajohns.IndiaMenuFilters" + "compensation_min": { + "example": "$173,000/year", + "type": "string" }, - "item_count": { - "example": 114, - "type": "integer" + "departments": { + "example": [ + "Product Management" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "market": { - "example": "india", + "description": { "type": "string" }, - "source_url": { + "id": { + "example": "1238249364564427", "type": "string" }, - "tags": { + "locations": { + "example": [ + "Menlo Park", + " CA" + ], "items": { "type": "string" }, "type": "array" }, - "taxes": { + "minimum_qualifications": { "items": { - "$ref": "#/definitions/papajohns.IndiaTax" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "papajohns.IndiaMenuSize": { - "properties": { - "default": { - "example": true, - "type": "boolean" - }, - "id": { - "example": "3", - "type": "string" }, - "name": { - "example": "Large", - "type": "string" + "preferred_qualifications": { + "items": { + "type": "string" + }, + "type": "array" }, - "option_groups": { + "responsibilities": { "items": { - "$ref": "#/definitions/papajohns.IndiaMenuOptionGroup" + "type": "string" }, "type": "array" }, - "rank": { - "example": 1, - "type": "integer" + "title": { + "example": "Product Manager", + "type": "string" + }, + "url": { + "example": "https://www.metacareers.com/profile/job_details/1238249364564427/", + "type": "string" } }, "type": "object" }, - "papajohns.IndiaMenuSubcategory": { + "metajobs.MetaJobListing": { "properties": { "id": { - "example": "8", + "example": "1238249364564427", "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/papajohns.IndiaMenuItem" - }, - "type": "array" + "last_modified": { + "example": "2026-07-29T01:17:34-07:00", + "type": "string" }, - "name": { - "example": "India Special", + "url": { + "example": "https://www.metacareers.com/profile/job_details/1238249364564427/", "type": "string" } }, "type": "object" }, - "papajohns.IndiaStore": { + "metajobs.MetaJobSearchResult": { "properties": { - "address": { + "id": { + "example": "1010234865172301", "type": "string" }, - "channels": { - "description": "Channels lists the order channels this store publishes hours for.", + "locations": { + "example": [ + "Sunnyvale", + " CA" + ], "items": { "type": "string" }, "type": "array" }, - "email": { - "type": "string" - }, - "hours": { + "sub_teams": { + "example": [ + "Hardware" + ], "items": { - "$ref": "#/definitions/papajohns.IndiaStoreHours" + "type": "string" }, "type": "array" }, - "id": { - "example": "7", - "type": "string" - }, - "latitude": { - "example": 12.840903161072498, - "type": "number" - }, - "longitude": { - "example": 77.65593675511532, - "type": "number" - }, - "name": { - "example": "PJPB - 360° Business Park, Electronics City BLR", - "type": "string" + "teams": { + "example": [ + "Infrastructure" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "phone": { - "example": "9240244043", + "title": { + "example": "ASIC Engineer, Design", "type": "string" }, - "store_code": { - "example": "QRyCHD", + "url": { + "example": "https://www.metacareers.com/profile/job_details/1010234865172301/", "type": "string" } }, "type": "object" }, - "papajohns.IndiaStoreHours": { + "metajobs.SearchResponse": { "properties": { - "channel": { - "example": "Take Away", - "type": "string" - }, - "channel_id": { - "example": "2", - "type": "string" - }, - "closes": { - "example": "23:00:59", - "type": "string" + "jobs": { + "items": { + "$ref": "#/definitions/metajobs.MetaJobSearchResult" + }, + "type": "array" }, - "day": { - "example": "Monday", + "source_url": { "type": "string" }, - "opens": { - "example": "11:00:00", - "type": "string" + "total": { + "example": 58, + "type": "integer" } }, "type": "object" }, - "papajohns.IndiaStoresResponse": { + "metajobs.jobResponseDoc": { "properties": { - "channel": { - "example": "Delivery", - "type": "string" - }, - "channel_id": { - "type": "string" - }, - "count": { - "example": 9, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "market": { - "example": "india", - "type": "string" + "data": { + "$ref": "#/definitions/metajobs.MetaJob" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" - }, - "stores": { - "items": { - "$ref": "#/definitions/papajohns.IndiaStore" - }, - "type": "array" } }, "type": "object" }, - "papajohns.IndiaTax": { + "metajobs.listResponseDoc": { "properties": { - "inclusive": { - "example": false, - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "example": "GST", - "type": "string" + "data": { + "$ref": "#/definitions/metajobs.ListResponse" }, - "type": { - "example": "percentage", + "msg": { + "example": "OK", "type": "string" - }, - "value": { - "example": 5, - "type": "number" } }, "type": "object" }, - "papajohns.IntlDeal": { + "metajobs.searchResponseDoc": { "properties": { - "availability": { - "description": "Availability lists the weekdays the offer runs on.", - "items": { - "type": "string" - }, - "type": "array" - }, - "category": { - "example": "app", - "type": "string" - }, - "description": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "dispatch_method": { - "description": "DispatchMethod is the fulfillment this offer applies to.", - "example": "pj_delivery", - "type": "string" + "data": { + "$ref": "#/definitions/metajobs.SearchResponse" }, - "end_date": { - "example": "2026-09-30T23:45:00Z", + "msg": { + "example": "OK", "type": "string" - }, - "id": { - "example": 955, - "type": "integer" - }, + } + }, + "type": "object" + }, + "metro.AuthorArticle": { + "properties": { "image_url": { "type": "string" }, - "name": { - "example": "Combo Veranito delivery", + "published_at": { "type": "string" }, - "offer_id": { - "description": "OfferID is set when this promotion is backed by a structured offer, and\nis the id GET /papajohns/intl/offer takes to return its full\ncomposition. Absent when the banner points at something else.", - "example": 660, - "type": "integer" + "section": { + "type": "string" }, - "product": { - "description": "Product is the offer's headline product name.", - "example": "Combo Veranito", + "summary": { "type": "string" }, - "start_date": { - "example": "2025-10-24T00:00:00Z", + "title": { "type": "string" }, "url": { @@ -152811,152 +159374,153 @@ }, "type": "object" }, - "papajohns.IntlDealsResponse": { + "metro.AuthorResponse": { "properties": { - "count": { - "example": 1, - "type": "integer" - }, - "deals": { + "articles": { "items": { - "$ref": "#/definitions/papajohns.IntlDeal" + "$ref": "#/definitions/metro.AuthorArticle" }, "type": "array" }, - "dispatch_method": { - "example": "pj_delivery", + "bio": { "type": "string" }, - "fetched_at": { + "image_url": { "type": "string" }, - "market": { - "example": "spain", + "job_title": { "type": "string" }, - "source_url": { + "knows_about": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "same_as": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { "type": "string" } }, "type": "object" }, - "papajohns.IntlDeliveryZone": { + "microsoftstore.AgeRating": { "properties": { - "delivery_price": { - "example": 0, - "type": "number" + "age": { + "example": 13, + "type": "integer" }, - "minimum_order_for_delivery": { - "type": "number" + "description": { + "example": "For ages 13 and up", + "type": "string" }, - "minimum_order_for_free_delivery": { - "type": "number" + "descriptors": { + "example": [ + "[\"Diverse Content: Discretion Advised\"]" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "name": { - "example": "Zona 1", + "system": { + "example": "ESRB", + "type": "string" + }, + "value": { + "example": "TEEN", "type": "string" } }, "type": "object" }, - "papajohns.IntlIngredient": { + "microsoftstore.Award": { "properties": { - "available_as_half": { - "description": "AvailableAsHalf reports whether it can be applied to just one half.", - "example": true, - "type": "boolean" - }, - "base": { - "description": "Base marks an ingredient included on the pizza by default.", - "example": false, - "type": "boolean" - }, "category": { - "description": "Category is the ingredient family, e.g. meat or vegetable.", - "example": "base_sauce", + "example": "Productivity category", "type": "string" }, "description": { + "example": "The Microsoft Store Awards celebrate apps and games that emphasize exceptional experiences for their users.", "type": "string" }, - "id": { - "example": 25, - "type": "integer" + "editorial_id": { + "example": "Editorials/Awards_2025/Global/Notion_xpdbvss44r0l9h", + "type": "string" }, - "image_url": { + "title": { + "example": "Microsoft Store Awards 2025", "type": "string" }, - "name": { - "example": "Salsa de Tomate", + "year": { + "example": 2025, + "type": "integer" + } + }, + "type": "object" + }, + "microsoftstore.Badge": { + "properties": { + "icon_id": { + "example": "AI", "type": "string" }, - "premium": { - "description": "Premium marks an ingredient charged at the premium rate rather than the\nnormal one.", - "example": false, - "type": "boolean" + "text": { + "example": "Uses AI features", + "type": "string" } }, "type": "object" }, - "papajohns.IntlIngredientPrices": { + "microsoftstore.CategoriesResponse": { "properties": { - "normal": { - "additionalProperties": { - "format": "float64", - "type": "number" + "categories": { + "items": { + "$ref": "#/definitions/microsoftstore.CategoryTaxonomy" }, - "type": "object" + "type": "array" }, - "premium": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "type": "object" + "media_type": { + "example": "apps", + "type": "string" } }, "type": "object" }, - "papajohns.IntlIngredientsResponse": { + "microsoftstore.CategoryResponse": { "properties": { "category": { - "example": "meat", + "example": "Photo & video", "type": "string" }, "count": { - "example": 39, + "example": 20, "type": "integer" }, - "fetched_at": { - "type": "string" + "has_more": { + "example": true, + "type": "boolean" }, - "ingredients": { + "items": { "items": { - "$ref": "#/definitions/papajohns.IntlIngredient" + "$ref": "#/definitions/microsoftstore.Product" }, "type": "array" }, - "market": { - "example": "spain", + "media_type": { + "example": "apps", "type": "string" }, - "menu_id": { - "example": 8, - "type": "integer" - }, - "prices": { - "allOf": [ - { - "$ref": "#/definitions/papajohns.IntlIngredientPrices" - } - ], - "description": "Prices is what adding one extra ingredient costs, keyed by size code." - }, - "sizes": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "next_cursor": { + "type": "string" }, "source_url": { "type": "string" @@ -152964,7529 +159528,6285 @@ }, "type": "object" }, - "papajohns.IntlMenuProduct": { + "microsoftstore.CategoryTaxonomy": { "properties": { - "alcohol": { - "type": "boolean" - }, "category": { - "example": "pizza", - "type": "string" - }, - "currency": { - "example": "EUR", - "type": "string" - }, - "customizable": { - "type": "boolean" - }, - "description": { + "example": "Books & reference", "type": "string" }, - "discount": { - "type": "number" - }, - "food_type": { - "description": "FoodType carries dietary markers the platform publishes, e.g. vegetarian.", + "subcategories": { + "example": [ + "[\"E-reader\"", + "\"Fiction\"", + "\"Nonfiction\"", + "\"Reference\"]" + ], "items": { "type": "string" }, "type": "array" + } + }, + "type": "object" + }, + "microsoftstore.ChartsResponse": { + "properties": { + "category": { + "example": "Photo & video", + "type": "string" }, - "id": { - "example": 8, + "count": { + "example": 20, "type": "integer" }, - "image_url": { + "discount_filter": { + "example": "onsale", "type": "string" }, - "initial_price": { - "type": "number" + "items": { + "items": { + "$ref": "#/definitions/microsoftstore.Product" + }, + "type": "array" }, - "kind": { - "description": "Kind is \"pizza\" or \"side\" -- the platform's two product families.", - "example": "pizza", + "list": { + "example": "TopFree", "type": "string" }, - "name": { - "example": "Super Papa", + "media_type": { + "example": "apps", "type": "string" }, - "price": { - "description": "Price is set only for a product the platform prices directly rather than\nthrough variants. Read variants for anything with sizes or crusts.", - "type": "number" + "num_players_filter": { + "example": "SinglePlayer", + "type": "string" }, - "price_from": { - "description": "PriceFrom is the cheapest variant price, so a caller can rank products\nwithout walking every variant. Absent when the product has no priced\nvariant and no direct price.", - "example": 14.99, - "type": "number" - }, - "variants": { - "items": { - "$ref": "#/definitions/papajohns.IntlMenuVariant" - }, - "type": "array" - } - }, - "type": "object" - }, - "papajohns.IntlMenuResponse": { - "properties": { - "count": { - "example": 43, + "page": { + "example": 1, "type": "integer" }, - "crusts": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "page_size": { + "example": 20, + "type": "integer" }, - "currency": { - "example": "EUR", + "source_url": { "type": "string" }, - "fetched_at": { + "subcategory": { + "example": "E-reader", "type": "string" }, - "food_type": { - "example": "vegetarian", + "subscription_filter": { + "example": "gamepass", "type": "string" }, - "kind": { - "example": "pizza", + "title": { + "example": "Must-have free apps", + "type": "string" + } + }, + "type": "object" + }, + "microsoftstore.EditorialResponse": { + "properties": { + "editorial_id": { + "example": "Editorials/Awards_2025/Global/Notion_xpdbvss44r0l9h", "type": "string" }, - "market": { - "example": "spain", + "header_image": { "type": "string" }, - "products": { + "paragraphs": { "items": { - "$ref": "#/definitions/papajohns.IntlMenuProduct" + "type": "string" }, "type": "array" }, - "sizes": { - "additionalProperties": { - "type": "string" + "relevant_products": { + "items": { + "$ref": "#/definitions/microsoftstore.Product" }, - "description": "Sizes and Crusts map every machine code used in this response to the\nmarket's own display label.", - "type": "object" + "type": "array" }, "source_url": { "type": "string" }, - "store_id": { - "example": 9, - "type": "integer" + "subtitle": { + "$ref": "#/definitions/microsoftstore.EditorialSubtitle" + }, + "title": { + "example": "Productivity category", + "type": "string" } }, "type": "object" }, - "papajohns.IntlMenuVariant": { + "microsoftstore.EditorialSubtitle": { "properties": { - "crust": { - "example": "traditional", - "type": "string" - }, - "crust_label": { - "example": "Original", + "icon": { "type": "string" }, - "currency": { - "example": "EUR", + "text": { + "example": "Microsoft Store Awards 2025", "type": "string" + } + }, + "type": "object" + }, + "microsoftstore.EventsResponse": { + "properties": { + "count": { + "example": 7, + "type": "integer" }, - "discount": { - "type": "number" - }, - "initial_price": { - "description": "InitialPrice is the pre-discount price when a promotion is active.", - "type": "number" + "items": { + "items": { + "$ref": "#/definitions/microsoftstore.Product" + }, + "type": "array" }, - "name": { - "description": "Name is the variant's own label where the platform gives it one, e.g. a\ndrink's \"500ML\". Pizza variants are identified by size and crust instead.", - "example": "500ML", + "media_type": { + "example": "apps", "type": "string" }, - "nutrition": { - "$ref": "#/definitions/papajohns.IntlNutrition" + "page": { + "example": 1, + "type": "integer" }, - "price": { - "example": 19.98, - "type": "number" + "page_size": { + "example": 20, + "type": "integer" }, - "size": { - "description": "Size and Crust are the platform's stable machine codes.", - "example": "family", + "source_url": { "type": "string" }, - "size_label": { - "description": "SizeLabel and CrustLabel are the market's own display names for those\ncodes, in the local language.", - "example": "Familiar", + "title": { + "example": "Special events", "type": "string" } }, "type": "object" }, - "papajohns.IntlNutrition": { + "microsoftstore.Feature": { "properties": { - "calories": { - "example": 1090, - "type": "number" - }, - "grams": { - "example": 470, - "type": "number" + "description": { + "example": "Get answers, writing help, and image generation.", + "type": "string" }, - "portions": { - "example": "8", + "title": { + "example": "AI assistant", "type": "string" } }, "type": "object" }, - "papajohns.IntlOfferChoice": { + "microsoftstore.Image": { "properties": { - "crust": { - "example": "traditional", - "type": "string" - }, - "crust_label": { - "example": "Original", - "type": "string" - }, - "description": { - "type": "string" - }, - "name": { - "example": "Italiana Ranch", - "type": "string" - }, - "product_id": { - "description": "ProductID is the underlying product, usable with\nGET /papajohns/intl/product.", - "example": 336, + "height": { + "example": 1080, "type": "integer" }, - "size": { - "example": "family", + "type": { + "example": "Screenshot", "type": "string" }, - "size_label": { - "description": "SizeLabel and CrustLabel are the market's own display names.", - "example": "Familiar", + "url": { + "example": "https://store-images.s-microsoft.com/image/apps.19060...f4dfc459-dae3-4ab8-8f40-18aa7ae9762f", "type": "string" }, - "surcharge": { - "description": "Surcharge is what picking this choice adds to the offer price. Absent\nwhen the choice costs nothing extra.", - "example": 1.9, - "type": "number" - }, - "variant_id": { - "example": 830, + "width": { + "example": 1920, "type": "integer" } }, "type": "object" }, - "papajohns.IntlOfferResponse": { + "microsoftstore.Product": { "properties": { - "availability": { - "description": "Availability lists the weekdays the offer runs on.", + "average_rating": { + "example": 4.3, + "type": "number" + }, + "award": { + "$ref": "#/definitions/microsoftstore.Award" + }, + "categories": { + "example": [ + "[\"Music\"]" + ], "items": { "type": "string" }, "type": "array" }, - "currency": { - "example": "EUR", + "description": { + "example": "Love music and podcasts? Play your favorite songs...", "type": "string" }, - "customizable": { + "display_price": { + "example": "Free", + "type": "string" + }, + "free": { "example": true, "type": "boolean" }, - "description": { + "icon_url": { + "example": "https://store-images.s-microsoft.com/image/apps.10546...", "type": "string" }, - "discount": { - "type": "number" - }, - "dispatch_method": { - "description": "DispatchMethod is the fulfillment this offer applies to, e.g. both.", - "example": "both", - "type": "string" + "is_application": { + "example": true, + "type": "boolean" }, - "end_date": { - "example": "2026-09-21T23:45:00Z", - "type": "string" + "is_game": { + "type": "boolean" }, - "fetched_at": { - "type": "string" + "is_pwa": { + "type": "boolean" }, - "free_extras": { - "description": "FreeExtras is how many extra ingredients are included at no charge, and\nMinIngredients/MaxIngredients bound how many may be chosen.", - "example": 2, - "type": "integer" + "is_subscription": { + "type": "boolean" }, - "id": { - "example": 660, - "type": "integer" + "is_theme": { + "type": "boolean" }, - "image_url": { + "kind": { + "example": "app", "type": "string" }, - "ingredient_categories": { - "description": "IngredientCategories lists the ingredient families this offer allows.", - "items": { - "type": "string" - }, - "type": "array" - }, - "market": { - "example": "spain", + "media_type": { + "example": "Apps", "type": "string" }, - "max_ingredients": { - "example": 10, - "type": "integer" + "poster_art_url": { + "type": "string" }, - "min_ingredients": { - "example": 1, - "type": "integer" + "price": { + "example": 0, + "type": "number" }, - "name": { - "example": "Combo Veranito", + "product_id": { + "example": "9ncbcszsjrsb", "type": "string" }, - "offer_type": { - "description": "OfferType is the platform's own classification, e.g. Combo.", - "example": "Combo", + "publisher": { + "example": "Spotify AB", "type": "string" }, - "price": { - "example": 19.98, - "type": "number" - }, - "promoted": { - "example": true, - "type": "boolean" + "rating_count": { + "example": "34K", + "type": "string" }, - "source_url": { + "release_date_utc": { + "example": "2017-10-24T12:04:25Z", "type": "string" }, - "start_date": { - "example": "2023-09-19T01:00:00Z", + "title": { + "example": "Spotify - Music and Podcasts", "type": "string" }, - "steps": { - "items": { - "$ref": "#/definitions/papajohns.IntlOfferStep" - }, - "type": "array" + "url": { + "example": "https://apps.microsoft.com/detail/9ncbcszsjrsb", + "type": "string" } }, "type": "object" }, - "papajohns.IntlOfferStep": { + "microsoftstore.ProductDetail": { "properties": { - "choice_count": { - "example": 12, - "type": "integer" - }, - "choices": { + "age_ratings": { "items": { - "$ref": "#/definitions/papajohns.IntlOfferChoice" + "$ref": "#/definitions/microsoftstore.AgeRating" }, "type": "array" }, - "id": { - "example": 1919, - "type": "integer" - }, - "name": { - "example": "❶ Elige tu pizza familiar", - "type": "string" - }, - "optional": { - "description": "Optional reports whether the step may be skipped.", - "example": false, - "type": "boolean" - } - }, - "type": "object" - }, - "papajohns.IntlProductResponse": { - "properties": { - "available_as_half": { - "description": "AvailableAsHalf reports whether this product may be used as one half of\na half-and-half pizza.", - "example": true, - "type": "boolean" - }, - "category": { - "example": "pizza", - "type": "string" - }, - "cheese_changeable": { - "example": true, - "type": "boolean" - }, - "customizable": { - "description": "Customizable reports whether toppings may be changed on this product.", - "example": true, - "type": "boolean" - }, - "description": { - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "food_type": { + "allowed_platforms": { + "example": [ + "[\"Windows.Desktop\"", + "\"Windows.Xbox\"]" + ], "items": { "type": "string" }, "type": "array" }, - "free_extras": { - "description": "FreeExtras is how many extra ingredients are included at no charge.", - "example": 2, - "type": "integer" - }, - "id": { - "example": 8, + "approximate_size_bytes": { + "example": 210105174, "type": "integer" }, - "image_url": { - "type": "string" + "average_rating": { + "example": 4.3, + "type": "number" }, - "image_urls": { + "badges": { "items": { - "type": "string" + "$ref": "#/definitions/microsoftstore.Badge" }, "type": "array" }, - "market": { - "example": "spain", - "type": "string" - }, - "name": { - "example": "Super Papa", - "type": "string" - }, - "slug": { - "example": "super-papa", - "type": "string" - }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "papajohns.IntlStore": { - "properties": { - "address": { - "type": "string" - }, - "city": { - "example": "Madrid", + "box_art_url": { "type": "string" }, - "delivery_open": { - "example": true, - "type": "boolean" - }, - "delivery_wait_minutes": { - "example": 30, - "type": "integer" - }, - "delivery_zones": { + "capabilities": { "items": { - "$ref": "#/definitions/papajohns.IntlDeliveryZone" + "type": "string" }, "type": "array" }, - "external_delivery": { - "example": true, - "type": "boolean" - }, - "future_orders": { - "example": true, - "type": "boolean" - }, - "hours": { + "card_actions": { + "example": [ + "[\"Install\"", + "\"Launch\"]" + ], "items": { - "$ref": "#/definitions/papajohns.IntlStoreHours" + "type": "string" }, "type": "array" }, - "id": { - "example": 9, - "type": "integer" - }, - "latitude": { - "example": 40.401686, - "type": "number" - }, - "longitude": { - "example": -3.708348, - "type": "number" + "categories": { + "example": [ + "[\"Music\"]" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "map_url": { + "category": { + "example": "Music", "type": "string" }, - "menu_id": { - "description": "MenuID identifies the catalog this restaurant serves. Several\nrestaurants usually share one.", - "example": 8, - "type": "integer" + "currency_code": { + "example": "USD", + "type": "string" }, - "name": { - "example": "Vallejo Nájera", + "description": { "type": "string" }, - "order_method": { - "description": "OrderMethod is the fulfillment the restaurant supports, as upstream\nreports it, e.g. both, delivery, or pick_up.", - "example": "both", + "display_price": { + "example": "Free", "type": "string" }, - "payment_methods": { - "description": "PaymentMethods lists only the methods this restaurant actually accepts.", + "features": { "items": { - "type": "string" + "$ref": "#/definitions/microsoftstore.Feature" }, "type": "array" }, - "phone": { - "example": "+34910493017", - "type": "string" - }, - "pickup_open": { + "free": { "example": true, "type": "boolean" }, - "pickup_wait_minutes": { - "example": 15, - "type": "integer" - }, - "region": { - "example": "Madrid", - "type": "string" - } - }, - "type": "object" - }, - "papajohns.IntlStoreHours": { - "properties": { - "closes": { - "example": "23:59:59", - "type": "string" - }, - "day": { - "example": "monday", - "type": "string" - }, - "dispatch_method": { - "description": "DispatchMethod is the fulfillment channel this window applies to,\ne.g. in_store or pj_delivery.", - "example": "in_store", + "hero_image_url": { "type": "string" }, - "opens": { - "example": "12:00:00", + "icon_url": { "type": "string" - } - }, - "type": "object" - }, - "papajohns.IntlStoresResponse": { - "properties": { - "count": { - "description": "Count is how many restaurants this response carries.", - "example": 5, - "type": "integer" }, - "fetched_at": { - "type": "string" + "is_application": { + "type": "boolean" }, - "fulfillment": { - "description": "Fulfillment, Latitude and Longitude echo a coordinate search and are\nabsent on a store_id lookup, which has no search origin. They are\nomitted rather than zeroed because 0,0 is itself a real coordinate.", - "example": "delivery", - "type": "string" + "is_game": { + "type": "boolean" }, - "latitude": { - "example": 40.4168, - "type": "number" + "is_purchase_enabled": { + "type": "boolean" }, - "longitude": { - "example": -3.7038, - "type": "number" + "is_pwa": { + "type": "boolean" }, - "market": { - "example": "spain", - "type": "string" + "is_subscription": { + "type": "boolean" }, - "page": { - "description": "Page, TotalPages and TotalCount describe the rest of the result set, so\na caller can tell a first page from the whole of it. TotalCount is the\nmarket-wide restaurant total rather than a match count, because the\nsearch has no radius cut-off -- every restaurant in the market is\nranked, and this is where in that ranking the response sits. All three\nare absent for a store_id lookup and for pickup, neither of which\nupstream paginates.", - "example": 1, - "type": "integer" + "is_theme": { + "type": "boolean" }, - "source_url": { + "kind": { + "example": "app", "type": "string" }, - "stores": { - "items": { - "$ref": "#/definitions/papajohns.IntlStore" - }, - "type": "array" - }, - "total_count": { - "example": 97, - "type": "integer" - }, - "total_pages": { - "example": 20, - "type": "integer" - } - }, - "type": "object" - }, - "papajohns.LatamCategory": { - "properties": { - "id": { - "example": "1", + "last_update_date_utc": { + "example": "2026-09-22T14:30:28Z", "type": "string" }, - "name": { - "example": "Pizzas", + "media_type": { + "example": "Apps", "type": "string" }, - "product_count": { - "example": 25, - "type": "integer" - }, - "products": { + "package_family_names": { + "example": [ + "[\"SpotifyAB.SpotifyMusic_zpdnekdrzrea0\"]" + ], "items": { - "$ref": "#/definitions/papajohns.LatamProduct" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "papajohns.LatamMenuResponse": { - "properties": { - "categories": { + }, + "platforms": { + "example": [ + "[\"x86\"", + "\"x64\"]" + ], "items": { - "$ref": "#/definitions/papajohns.LatamCategory" + "type": "string" }, "type": "array" }, - "category": { + "poster_art_url": { "type": "string" }, - "currency": { - "example": "USD", - "type": "string" + "price": { + "example": 0, + "type": "number" }, - "fetched_at": { + "privacy_url": { + "example": "https://www.spotify.com/legal/privacy-policy/", "type": "string" }, - "market": { - "example": "el-salvador", + "product_id": { + "example": "9ncbcszsjrsb", "type": "string" }, - "partial": { - "description": "Partial is true when a paginated upstream failed part-way and the\nresponse carries only the pages that were retrieved. A menu that is\nquietly short is indistinguishable from one that genuinely has fewer\nitems, so it is flagged rather than left to look complete.", - "example": false, - "type": "boolean" - }, - "product_count": { - "description": "ProductCount is how many products the response carries. Where the\nupstream paginates, every page is followed before returning.", - "example": 25, - "type": "integer" - }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "papajohns.LatamProduct": { - "properties": { - "category": { - "example": "Pizzas", + "product_type": { + "example": "Application", "type": "string" }, - "currency": { - "example": "USD", + "publisher": { + "example": "Spotify AB", "type": "string" }, - "description": { + "publisher_address": { "type": "string" }, - "id": { - "example": "8", + "publisher_id": { + "example": "10113470", "type": "string" }, - "image_url": { - "type": "string" + "rating_count": { + "example": 34225, + "type": "integer" }, - "name": { - "example": "The Works", + "rating_count_formatted": { + "example": "34.2K", "type": "string" }, - "price_from": { - "description": "PriceFrom is the cheapest priced variant, so a caller can rank products\nwithout walking every variant.", - "example": 11.99, - "type": "number" - }, - "url": { + "release_date_utc": { + "example": "2017-10-24T12:04:25Z", "type": "string" }, - "variants": { + "screenshots": { "items": { - "$ref": "#/definitions/papajohns.LatamVariant" + "$ref": "#/definitions/microsoftstore.Image" }, "type": "array" - } - }, - "type": "object" - }, - "papajohns.LatamVariant": { - "properties": { - "available": { - "example": true, - "type": "boolean" - }, - "crust": { - "example": "Masa Original", - "type": "string" - }, - "currency": { - "example": "USD", - "type": "string" - }, - "fulfillment": { - "description": "Fulfillment is the order channel this price applies to, where the market\nprices delivery and pickup differently. Colombia does: the same item is\ncommonly ~15% dearer for \"Domicilio\" than \"Recoger en Tienda\", so two\nvariants that look otherwise identical are not duplicates.", - "example": "Domicilio", - "type": "string" - }, - "list_price": { - "description": "ListPrice is the pre-discount price where the market publishes one and\nit actually differs from price.", - "type": "number" - }, - "name": { - "description": "Name is the market's own label for the variant where it gives one.", - "example": "Gigante", - "type": "string" - }, - "price": { - "example": 14.99, - "type": "number" - }, - "sauce": { - "description": "Sauce is populated only by Colombia, whose SKUs vary by sauce too.", - "example": "Salsa Pizza", - "type": "string" - }, - "size": { - "description": "Size and Crust are populated where the market distinguishes them.", - "example": "GIGANTE", - "type": "string" - }, - "sku": { - "type": "string" - } - }, - "type": "object" - }, - "papajohns.MenuCategory": { - "properties": { - "id": { - "example": "pizza", - "type": "string" }, - "image_url": { - "type": "string" + "skus_summary": { + "items": { + "$ref": "#/definitions/microsoftstore.SkuPrice" + }, + "type": "array" }, - "name": { - "example": "Pizza", + "source_url": { "type": "string" }, - "product_count": { - "description": "ProductCount is how many priced SKUs this category contains.", - "example": 96, - "type": "integer" - }, - "sections": { + "supported_languages": { "items": { - "$ref": "#/definitions/papajohns.MenuSection" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "papajohns.MenuCrust": { - "properties": { - "code": { - "example": "PIZZA_ORIGINAL", - "type": "string" - }, - "default": { - "example": true, - "type": "boolean" - }, - "id": { - "example": 1, - "type": "integer" }, - "name": { - "example": "Original Crust", + "title": { + "example": "Spotify - Music and Podcasts", "type": "string" }, - "sub_type": { - "example": "Original", - "type": "string" - } - }, - "type": "object" - }, - "papajohns.MenuInstruction": { - "properties": { - "choices": { + "trailers": { "items": { - "$ref": "#/definitions/papajohns.MenuInstructionChoice" + "$ref": "#/definitions/microsoftstore.Image" }, "type": "array" }, - "description": { - "example": "How much cheese?", + "url": { + "example": "https://apps.microsoft.com/detail/9ncbcszsjrsb", "type": "string" }, - "id": { - "example": 2, - "type": "integer" + "version": { + "type": "string" }, - "name": { - "example": "CHEESE", + "website": { + "example": "https://www.spotify.com", "type": "string" } }, "type": "object" }, - "papajohns.MenuInstructionChoice": { + "microsoftstore.PublisherResponse": { "properties": { - "code": { - "example": "ILC", - "type": "string" + "count": { + "example": 3, + "type": "integer" }, - "default": { + "has_more": { "example": false, "type": "boolean" }, - "id": { - "example": 6, - "type": "integer" - }, - "name": { - "example": "Light Cheese", - "type": "string" - } - }, - "type": "object" - }, - "papajohns.MenuItemResponse": { - "properties": { - "category": { - "example": "pizza", - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/microsoftstore.Product" + }, + "type": "array" }, - "fetched_at": { + "next_cursor": { "type": "string" }, - "group": { - "allOf": [ - { - "$ref": "#/definitions/papajohns.MenuProductGroup" - } - ], - "description": "Group is the product group this SKU belongs to, carrying the full\ncustomization axes for it." - }, - "national_default": { - "example": false, - "type": "boolean" - }, - "product": { - "$ref": "#/definitions/papajohns.MenuProduct" - }, - "section": { - "example": "Most Popular", + "publisher_name": { + "example": "Spotify AB", "type": "string" }, "source_url": { "type": "string" - }, - "store_id": { - "example": 5054, - "type": "integer" } }, "type": "object" }, - "papajohns.MenuProduct": { + "microsoftstore.RecommendedProduct": { "properties": { - "calories": { - "description": "Calories is per the serving described by serving_label.", - "example": 210, - "type": "integer" - }, - "code": { - "example": "PR10Q1", - "type": "string" - }, - "crust_id": { - "example": 1, - "type": "integer" - }, - "description": { - "type": "string" - }, - "disclaimer": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "name": { - "example": "10 Inch Original Pepperoni Pizza", - "type": "string" - }, - "price": { - "description": "Price is this store's price. A build-your-own SKU whose price depends\nentirely on the customer's choices reports 0.", - "example": 14.99, - "type": "number" - }, - "regular_price": { - "description": "RegularPrice is the pre-promotion menu price where it differs.", - "example": 14.99, - "type": "number" - }, - "serving_label": { - "description": "ServingLabel describes what calories are counted per, e.g. \"/slice, 6 slices\".", - "example": "/slice, 6 slices", - "type": "string" - }, - "size": { - "description": "Size is the size label this SKU represents within its group.", - "example": "Small", - "type": "string" - }, - "size_id": { - "example": 2, - "type": "integer" - }, - "sku": { - "example": "1-1-2-115", - "type": "string" - }, - "slices": { - "example": 6, - "type": "integer" - }, - "surcharge": { + "average_rating": { + "example": 4.5, "type": "number" }, - "title": { - "description": "Title is the shorter in-menu label, e.g. \"Small Original Crust - Pepperoni\".", - "type": "string" - } - }, - "type": "object" - }, - "papajohns.MenuProductGroup": { - "properties": { - "allow_half_toppings": { - "example": true, - "type": "boolean" - }, - "available_topping_ids": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "crusts": { + "categories": { + "example": [ + "[\"Action & adventure\"]" + ], "items": { - "$ref": "#/definitions/papajohns.MenuCrust" + "type": "string" }, "type": "array" }, - "customizable": { - "description": "Customizable reports how far the product can be customized, as upstream\nclassifies it, e.g. full or none.", - "example": "full", - "type": "string" - }, - "description": { + "icon_url": { "type": "string" }, - "featured": { - "type": "boolean" - }, - "free_toppings": { - "type": "integer" - }, - "id": { - "example": "cyo", + "product_id": { + "example": "9p4qk476j199", "type": "string" }, - "image_url": { + "title": { + "example": "Bermuda Adventures: Farm Games", "type": "string" }, - "instructions": { - "items": { - "$ref": "#/definitions/papajohns.MenuInstruction" - }, - "type": "array" - }, - "max_same_topping": { - "example": 2, - "type": "integer" - }, - "max_toppings": { - "description": "Topping rules. AvailableToppingIDs are upstream's own numeric ids; this\nAPI publishes no name for them, so they are exposed as ids rather than\ninvented labels.", - "example": 7, - "type": "integer" - }, - "price_from": { - "description": "PriceFrom is the cheapest priced SKU in the group, so a caller can rank\nproducts without walking every SKU.", - "example": 14.99, - "type": "number" - }, - "products": { - "items": { - "$ref": "#/definitions/papajohns.MenuProduct" - }, - "type": "array" - }, - "sizes": { - "description": "Sizes, Crusts and Instructions are populated only when\ninclude_options=true.", - "items": { - "$ref": "#/definitions/papajohns.MenuSize" - }, - "type": "array" - }, - "title": { - "example": "Create Your Own Pizza", + "url": { + "example": "https://apps.microsoft.com/detail/9p4qk476j199", "type": "string" } }, "type": "object" }, - "papajohns.MenuResponse": { + "microsoftstore.RecommendedResponse": { "properties": { - "categories": { + "items": { "items": { - "$ref": "#/definitions/papajohns.MenuCategory" + "$ref": "#/definitions/microsoftstore.RecommendedProduct" }, "type": "array" }, - "category": { - "example": "pizza", - "type": "string" - }, - "fetched_at": { + "section_title": { + "example": "Recommended for you", "type": "string" }, - "national_default": { - "description": "NationalDefault is true when no store was selected, so a caller can tell\na real store's prices from the fallback menu.", - "example": false, - "type": "boolean" - }, - "product_count": { - "example": 206, - "type": "integer" - }, "source_url": { "type": "string" - }, - "store_id": { - "description": "StoreID echoes the restaurant the prices belong to. 0 is the national\ndefault menu.", - "example": 5054, - "type": "integer" } }, "type": "object" }, - "papajohns.MenuSection": { + "microsoftstore.RelatedResponse": { "properties": { - "description": { - "type": "string" - }, - "id": { - "example": "most_popular", - "type": "string" - }, - "name": { - "example": "Most Popular", - "type": "string" + "has_more_pages": { + "example": true, + "type": "boolean" }, - "product_groups": { + "items": { "items": { - "$ref": "#/definitions/papajohns.MenuProductGroup" + "$ref": "#/definitions/microsoftstore.Product" }, "type": "array" - } - }, - "type": "object" - }, - "papajohns.MenuSize": { - "properties": { - "default": { - "example": false, - "type": "boolean" }, - "id": { - "example": 2, + "page": { + "example": 1, "type": "integer" }, - "measure": { - "description": "Measure is the physical size where the group has one, e.g. 10\".", - "example": "10\"", - "type": "string" - }, - "name": { - "description": "Name is the size's marketing name, e.g. Small.", - "example": "Small", - "type": "string" - } - }, - "type": "object" - }, - "papajohns.NearbyResponse": { - "properties": { - "count": { + "page_size": { "example": 10, "type": "integer" }, - "fetched_at": { + "product_id": { + "example": "9ncbcszsjrsb", "type": "string" }, - "radius": { - "example": 25, - "type": "integer" + "product_type": { + "example": "Application", + "type": "string" }, "source_url": { "type": "string" }, - "stores": { - "items": { - "$ref": "#/definitions/papajohns.NearbyStore" - }, - "type": "array" - }, - "total_in_radius": { - "description": "TotalInRadius is how many stores fall inside the radius overall,\nwhich is usually far more than one page. Use it with `offset` to\npage.", - "example": 73, + "total_count": { + "example": 50, "type": "integer" } }, "type": "object" }, - "papajohns.NearbyStore": { + "microsoftstore.Review": { "properties": { - "address": { - "$ref": "#/definitions/papajohns.StoreAddress" - }, - "delivery_hours": { - "description": "DeliveryHours and TakeoutHours are Papa John's own per-channel hours,\npublished separately from Hours and commonly later-closing.", - "items": { - "$ref": "#/definitions/papajohns.StoreHours" - }, - "type": "array" - }, - "distance_kilometers": { - "example": 0.97, - "type": "number" + "device_family": { + "example": "Windows.Desktop", + "type": "string" }, - "distance_miles": { - "description": "DistanceMiles and DistanceKilometers are measured from the requested\ncoordinate.", - "example": 0.6, - "type": "number" + "helpful_negative": { + "example": 30, + "type": "integer" }, - "hours": { - "description": "Hours is the store's general published week of hours.", - "items": { - "$ref": "#/definitions/papajohns.StoreHours" - }, - "type": "array" + "helpful_positive": { + "example": 74, + "type": "integer" }, - "latitude": { - "example": 34.0614412, - "type": "number" + "id": { + "example": "74a23681-6299-5cc4-5e83-a48d1c49ece6", + "type": "string" }, - "longitude": { - "example": -118.2439367, - "type": "number" + "is_revised": { + "type": "boolean" }, - "name": { - "example": "Papa Johns Pizza", + "locale": { + "example": "EN-US", "type": "string" }, - "order_url": { - "description": "OrderURL is Papa John's own carryout ordering deep link for this\nstore.", + "market": { + "example": "US", "type": "string" }, - "path": { - "description": "Path is the /papajohns/store path for this store, so a caller can go\nstraight to the detail endpoint.", + "os_version": { + "example": "10.0.26200.8524", "type": "string" }, - "payment_options": { - "description": "PaymentOptions are the payment methods this store accepts, e.g.\nAPPLEPAY, CASH, VISA.", - "items": { - "type": "string" - }, - "type": "array" + "rating": { + "example": 1, + "type": "integer" }, - "phone_number": { - "description": "PhoneNumber is Papa John's own E.164-shaped mainPhone, e.g.\n\"+12136172727\" -- deliberately left as published rather than\nreformatted, since geosearch and the store page publish phone\nnumbers in different shapes (mainPhone here vs. a display-formatted\nstring on /papajohns/store).", - "example": "+12136172727", + "reviewer_name": { + "example": "constance", "type": "string" }, - "pickup_and_delivery_services": { - "description": "PickupAndDeliveryServices are the fulfillment flags Papa John's\npublishes for this store, e.g. IN_STORE_PICKUP, SAME_DAY_DELIVERY.", - "items": { - "type": "string" - }, - "type": "array" - }, - "price_range": { - "description": "PriceRange is Papa John's own relative price tier, e.g. ONE, TWO.", - "example": "TWO", + "submitted_at_utc": { + "example": "2026-07-12T21:41:45Z", "type": "string" }, - "store_id": { - "example": "4269", + "text": { + "example": "so, the app used to be great...", "type": "string" }, - "takeout_hours": { - "items": { - "$ref": "#/definitions/papajohns.StoreHours" - }, - "type": "array" + "title": { + "example": "spotify has fallen off. HARD.", + "type": "string" }, - "timezone": { - "example": "America/Los_Angeles", + "url": { "type": "string" } }, "type": "object" }, - "papajohns.NutritionFacts": { + "microsoftstore.ReviewsResponse": { "properties": { - "calories": { - "example": 200, - "type": "number" - }, - "calories_from_fat": { - "example": 25, - "type": "number" + "has_more_pages": { + "example": true, + "type": "boolean" }, - "cholesterol_mg": { - "type": "number" + "next_page": { + "example": 2, + "type": "integer" }, - "dietary_fiber_g": { + "page": { "example": 1, - "type": "number" - }, - "protein_g": { - "example": 6, - "type": "number" - }, - "saturated_fat_g": { - "example": 0.5, - "type": "number" - }, - "sodium_mg": { - "example": 360, - "type": "number" - }, - "sugars_g": { - "example": 3, - "type": "number" - }, - "total_carbohydrate_g": { - "example": 36, - "type": "number" + "type": "integer" }, - "total_fat_g": { - "example": 3, - "type": "number" + "page_size": { + "example": 20, + "type": "integer" }, - "trans_fat_g": { - "type": "number" - } - }, - "type": "object" - }, - "papajohns.NutritionItem": { - "properties": { - "name": { - "example": "Cheese Pizza", + "product_id": { + "example": "9ncbcszsjrsb", "type": "string" }, - "variants": { + "reviews": { "items": { - "$ref": "#/definitions/papajohns.NutritionVariant" + "$ref": "#/definitions/microsoftstore.Review" }, "type": "array" - } - }, - "type": "object" - }, - "papajohns.NutritionResponse": { - "properties": { - "category": { - "example": "pizzas", - "type": "string" - }, - "count": { - "example": 34, - "type": "integer" }, - "fetched_at": { + "sort": { + "example": "MostHelpful", "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/papajohns.NutritionItem" - }, - "type": "array" - }, "source_url": { "type": "string" + }, + "total_count": { + "example": 307, + "type": "integer" } }, "type": "object" }, - "papajohns.NutritionVariant": { + "microsoftstore.ReviewsSummaryResponse": { "properties": { - "label": { - "description": "Label combines every column header Papa John's own table used to\ndistinguish this variant (crust type and/or size), joined with \" - \".\nA single-column table (most non-pizza items) yields the lone column\nheader verbatim, e.g. \"Regular\".", - "example": "Original Crust - Large", - "type": "string" + "average_rating": { + "example": 4.3, + "type": "number" }, - "nutrition": { - "$ref": "#/definitions/papajohns.NutritionFacts" + "most_critical_review": { + "$ref": "#/definitions/microsoftstore.Review" }, - "serving_size": { - "example": "1 slice", - "type": "string" + "most_favorable_review": { + "$ref": "#/definitions/microsoftstore.Review" }, - "servings": { - "example": "8 slices per pizza", - "type": "string" - } - }, - "type": "object" - }, - "papajohns.StoreAddress": { - "properties": { - "city": { - "example": "Alhambra", + "product_id": { + "example": "9ncbcszsjrsb", "type": "string" }, - "country": { - "example": "US", - "type": "string" + "rating_distribution": { + "type": "object" }, - "line1": { - "example": "2136 S FREMONT AVE", + "rating_status": { + "example": "RatingAvailable", "type": "string" }, - "postal_code": { - "example": "91803", - "type": "string" + "review_count": { + "example": 307, + "type": "integer" }, - "region": { - "example": "CA", + "source_url": { "type": "string" } }, "type": "object" }, - "papajohns.StoreHours": { + "microsoftstore.SearchResponse": { "properties": { - "closed": { - "description": "Closed is true when Papa John's publishes the day with no open\ninterval.", - "example": false, - "type": "boolean" - }, - "closes": { - "example": "00:15", - "type": "string" - }, - "day_of_week": { - "example": "Monday", + "age": { + "example": "all", "type": "string" }, - "opens": { - "example": "10:30", + "category": { + "example": "all", "type": "string" - } - }, - "type": "object" - }, - "papajohns.StoreResponse": { - "properties": { - "address": { - "$ref": "#/definitions/papajohns.StoreAddress" }, - "fetched_at": { - "type": "string" + "count": { + "example": 20, + "type": "integer" }, - "google_place_id": { - "type": "string" + "has_more": { + "example": true, + "type": "boolean" }, - "hours": { - "description": "Hours is the store's general published week of hours.", + "items": { "items": { - "$ref": "#/definitions/papajohns.StoreHours" + "$ref": "#/definitions/microsoftstore.Product" }, "type": "array" }, - "latitude": { - "example": 34.06838390790909, - "type": "number" - }, - "longitude": { - "example": -118.14934906165672, - "type": "number" - }, - "name": { - "example": "Papa Johns Pizza", + "media_type": { + "example": "all", "type": "string" }, - "order_url": { - "description": "OrderURL is Papa John's own carryout ordering deep link for this\nstore, which embeds the same store_id.", + "next_cursor": { + "example": "bz0wJmI9OU5DQkNTWlNKUlNCLD...", "type": "string" }, - "path": { + "price": { + "example": "all", "type": "string" }, - "phone_number": { - "example": "(626) 642-5645", + "query": { + "example": "spotify", "type": "string" }, - "pickup_hours": { - "description": "PickupHours is Papa John's own published carryout/pickup hours,\npublished separately from Hours and sometimes shorter.", - "items": { - "$ref": "#/definitions/papajohns.StoreHours" - }, - "type": "array" - }, "source_url": { "type": "string" - }, - "store_id": { - "example": "5054", - "type": "string" - }, - "timezone": { - "example": "America/Los_Angeles", - "type": "string" } }, "type": "object" }, - "papajohns.StorefrontCategory": { + "microsoftstore.SkuPrice": { "properties": { - "alias": { - "description": "Alias is upstream's own stable slug for the section, which survives the\ndisplay name being renamed for a season.", - "example": "pizza", - "type": "string" - }, - "id": { - "example": "1", + "display_msrp": { + "example": "Free", "type": "string" }, - "name": { - "example": "Пицца", + "display_price": { + "example": "Free", "type": "string" }, - "product_count": { - "example": 25, - "type": "integer" + "msrp": { + "example": 0, + "type": "number" }, - "products": { - "items": { - "$ref": "#/definitions/papajohns.StorefrontProduct" - }, - "type": "array" + "price": { + "example": 0, + "type": "number" } }, "type": "object" }, - "papajohns.StorefrontMenuResponse": { + "microsoftstore.SpotlightResponse": { "properties": { - "categories": { - "description": "Categories carry the whole national catalog. The menu does not vary by\ncity, so there is no city to report.", + "count": { + "example": 8, + "type": "integer" + }, + "items": { "items": { - "$ref": "#/definitions/papajohns.StorefrontCategory" + "$ref": "#/definitions/microsoftstore.Product" }, "type": "array" }, - "category": { - "type": "string" - }, - "currency": { - "example": "RUB", - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "market": { - "example": "russia", + "media_type": { + "example": "home", "type": "string" }, - "product_count": { - "example": 185, - "type": "integer" - }, "source_url": { "type": "string" - }, - "variant_count": { - "example": 892, - "type": "integer" } }, "type": "object" }, - "papajohns.StorefrontProduct": { + "microsoftstore.SuggestResponse": { "properties": { - "category": { - "example": "Пицца", - "type": "string" - }, - "currency": { - "example": "RUB", - "type": "string" - }, - "description": { - "type": "string" - }, - "id": { - "example": "12345", - "type": "string" - }, - "image_url": { - "type": "string" - }, - "name": { - "example": "Прайм говядина Барбекю", - "type": "string" - }, - "price_from": { - "description": "PriceFrom is the cheapest priced variant, so a caller can rank products\nwithout walking every variant.", - "example": 680, - "type": "number" + "completions": { + "example": [ + "[\"spotify\"", + "\"spot\"", + "\"spotify for podcasters\"]" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "url": { + "prefix": { + "example": "spot", "type": "string" }, - "variants": { + "products": { "items": { - "$ref": "#/definitions/papajohns.StorefrontVariant" + "$ref": "#/definitions/microsoftstore.SuggestedProduct" }, "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "papajohns.StorefrontVariant": { + "microsoftstore.SuggestedProduct": { "properties": { - "available": { + "icon_url": { + "type": "string" + }, + "is_application": { "example": true, "type": "boolean" }, - "crust": { - "description": "Crust is the dough the variant is made with. Russia publishes two\n(Традиционное, Тонкое); Poland publishes none, so this is empty there.", - "example": "Традиционное", - "type": "string" + "is_game": { + "type": "boolean" }, - "currency": { - "example": "RUB", + "media_type": { + "example": "apps", "type": "string" }, - "price": { - "example": 680, - "type": "number" - }, - "size": { - "description": "Size is the pizza diameter where the market publishes one, with its own\nunit (\"23 см\").", - "example": "23 см", + "product_id": { + "example": "9ncbcszsjrsb", "type": "string" }, - "sku": { - "example": "172764", + "title": { + "example": "Spotify - Music and Podcasts", "type": "string" }, - "stuffed_crust": { - "description": "StuffedCrust names the filling baked into the rim, where the variant has\none. Upstream reports none/cheese/sausage/sausage_cheese; \"none\" is\nreported here as an empty value rather than the literal word.", - "example": "cheese", + "url": { + "example": "https://apps.microsoft.com/detail/9ncbcszsjrsb", "type": "string" } }, "type": "object" }, - "papajohns.allergensResponseDoc": { + "microsoftstore.categoriesResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/papajohns.AllergensResponse" + "$ref": "#/definitions/microsoftstore.CategoriesResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "papajohns.dealsResponseDoc": { + "microsoftstore.categoryResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/papajohns.DealsResponse" + "$ref": "#/definitions/microsoftstore.CategoryResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "papajohns.directoryResponseDoc": { + "microsoftstore.chartsResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/papajohns.DirectoryResponse" + "$ref": "#/definitions/microsoftstore.ChartsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "papajohns.indiaDealResponseDoc": { + "microsoftstore.editorialResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/papajohns.IndiaDealResponse" + "$ref": "#/definitions/microsoftstore.EditorialResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "papajohns.indiaMenuItemResponseDoc": { + "microsoftstore.eventsResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/papajohns.IndiaMenuItemResponse" + "$ref": "#/definitions/microsoftstore.EventsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "papajohns.indiaMenuResponseDoc": { + "microsoftstore.productResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/papajohns.IndiaMenuResponse" + "$ref": "#/definitions/microsoftstore.ProductDetail" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "papajohns.indiaStoresResponseDoc": { + "microsoftstore.publisherResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/papajohns.IndiaStoresResponse" + "$ref": "#/definitions/microsoftstore.PublisherResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "papajohns.intlDealsResponseDoc": { + "microsoftstore.recommendedResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/papajohns.IntlDealsResponse" + "$ref": "#/definitions/microsoftstore.RecommendedResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "papajohns.intlIngredientsResponseDoc": { + "microsoftstore.relatedResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/papajohns.IntlIngredientsResponse" + "$ref": "#/definitions/microsoftstore.RelatedResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "papajohns.intlMenuResponseDoc": { + "microsoftstore.reviewsResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/papajohns.IntlMenuResponse" + "$ref": "#/definitions/microsoftstore.ReviewsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "papajohns.intlOfferResponseDoc": { + "microsoftstore.reviewsSummaryResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/papajohns.IntlOfferResponse" + "$ref": "#/definitions/microsoftstore.ReviewsSummaryResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "papajohns.intlProductResponseDoc": { + "microsoftstore.searchResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/papajohns.IntlProductResponse" + "$ref": "#/definitions/microsoftstore.SearchResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "papajohns.intlStoresResponseDoc": { + "microsoftstore.spotlightResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/papajohns.IntlStoresResponse" + "$ref": "#/definitions/microsoftstore.SpotlightResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "papajohns.latamMenuResponseDoc": { + "microsoftstore.suggestResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/papajohns.LatamMenuResponse" + "$ref": "#/definitions/microsoftstore.SuggestResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "papajohns.menuItemResponseDoc": { + "mirror.AuthorArticle": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "label": { + "type": "string" }, - "data": { - "$ref": "#/definitions/papajohns.MenuItemResponse" + "label_url": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "papajohns.menuResponseDoc": { + "mirror.AuthorResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/mirror.AuthorArticle" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/papajohns.MenuResponse" + "bio": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "email": { + "type": "string" + }, + "job_title": { + "type": "string" + }, + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "twitter": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "papajohns.nearbyResponseDoc": { + "mlb.BoxscorePlayer": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "batting_order": { + "type": "string" }, - "data": { - "$ref": "#/definitions/papajohns.NearbyResponse" + "person": { + "$ref": "#/definitions/mlb.NamedRef" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "position": { + "type": "string" + }, + "stats": { + "additionalProperties": { + "additionalProperties": {}, + "type": "object" + }, + "type": "object" } }, "type": "object" }, - "papajohns.nutritionResponseDoc": { + "mlb.BoxscoreResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "away": { + "$ref": "#/definitions/mlb.BoxscoreTeam" + }, + "fetched_at": { + "type": "string" + }, + "game_id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/papajohns.NutritionResponse" + "home": { + "$ref": "#/definitions/mlb.BoxscoreTeam" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "source_url": { + "type": "string" } }, "type": "object" }, - "papajohns.storeResponseDoc": { + "mlb.BoxscoreTeam": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "players": { + "items": { + "$ref": "#/definitions/mlb.BoxscorePlayer" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/papajohns.StoreResponse" + "team": { + "$ref": "#/definitions/mlb.TeamRef" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "team_stats": { + "additionalProperties": { + "additionalProperties": {}, + "type": "object" + }, + "type": "object" } }, "type": "object" }, - "papajohns.storefrontMenuResponseDoc": { + "mlb.Decision": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "loser": { + "$ref": "#/definitions/mlb.NamedRef" }, - "data": { - "$ref": "#/definitions/papajohns.StorefrontMenuResponse" + "save": { + "$ref": "#/definitions/mlb.NamedRef" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "winner": { + "$ref": "#/definitions/mlb.NamedRef" } }, "type": "object" }, - "patreon.Creator": { + "mlb.EditorialFeedResponse": { "properties": { - "avatar_url": { + "fetched_at": { "type": "string" }, - "collection_count": { - "type": "integer" + "items": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "cover_url": { + "language": { "type": "string" }, - "creation_count": { + "limit": { "type": "integer" }, - "currency": { - "example": "EUR", - "type": "string" + "skip": { + "type": "integer" }, - "handle": { - "example": "CachyOS", + "slug": { "type": "string" }, - "has_public_rss": { - "type": "boolean" - }, - "id": { - "example": "8655479", + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "mlb.EnumValue": { + "properties": { + "description": { "type": "string" }, - "is_monthly": { - "type": "boolean" + "value": { + "type": "string" + } + }, + "type": "object" + }, + "mlb.GameResponse": { + "properties": { + "away_boxscore": { + "$ref": "#/definitions/mlb.TeamBoxscore" }, - "is_nsfw": { - "type": "boolean" + "decisions": { + "$ref": "#/definitions/mlb.Decision" }, - "name": { - "example": "CachyOS", + "fetched_at": { "type": "string" }, - "offers_free_membership": { - "type": "boolean" + "game": { + "$ref": "#/definitions/mlb.GameSummary" }, - "offers_paid_membership": { - "type": "boolean" + "home_boxscore": { + "$ref": "#/definitions/mlb.TeamBoxscore" }, - "paid_member_count": { - "type": "integer" + "linescore": { + "$ref": "#/definitions/mlb.Linescore" }, - "patron_count": { + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "mlb.GameSide": { + "properties": { + "losses": { "type": "integer" }, - "pledge_sum_cents": { - "type": "integer" + "probable_pitcher": { + "$ref": "#/definitions/mlb.NamedRef" }, - "show_count": { + "score": { "type": "integer" }, - "social_links": { - "items": { - "$ref": "#/definitions/patreon.CreatorSocialLink" - }, - "type": "array" - }, - "summary": { - "type": "string" + "team": { + "$ref": "#/definitions/mlb.TeamRef" }, - "url": { - "example": "https://www.patreon.com/CachyOS", - "type": "string" + "wins": { + "type": "integer" } }, "type": "object" }, - "patreon.CreatorSocialLink": { + "mlb.GameStatus": { "properties": { - "label": { - "example": "CachyOS", + "abstract": { "type": "string" }, - "platform": { - "example": "twitter", + "code": { "type": "string" }, - "url": { - "example": "https://twitter.com/CachyOS", + "detailed": { + "type": "string" + }, + "reason": { "type": "string" } }, "type": "object" }, - "patreon.ExploreCreator": { + "mlb.GameSummary": { "properties": { - "avatar_url": { + "away": { + "$ref": "#/definitions/mlb.GameSide" + }, + "day_night": { "type": "string" }, - "creation_name": { - "example": "creating YouTube videos", + "double_header": { "type": "string" }, - "id": { - "example": "4270549", + "game_date": { "type": "string" }, - "is_nsfw": { - "type": "boolean" + "game_number": { + "type": "integer" }, - "name": { - "example": "Reckless Ben", + "game_type": { "type": "string" }, - "url": { - "example": "https://www.patreon.com/RecklessBen", + "home": { + "$ref": "#/definitions/mlb.GameSide" + }, + "id": { + "type": "integer" + }, + "official_date": { "type": "string" - } - }, - "type": "object" - }, - "patreon.ExploreResult": { - "properties": { - "sections": { - "items": { - "$ref": "#/definitions/patreon.ExploreSection" - }, - "type": "array" }, - "topic": { - "example": "podcasts_and_shows", + "scheduled_innings": { + "type": "integer" + }, + "season": { + "type": "string" + }, + "series_description": { "type": "string" + }, + "status": { + "$ref": "#/definitions/mlb.GameStatus" + }, + "venue": { + "$ref": "#/definitions/mlb.VenueRef" } }, "type": "object" }, - "patreon.ExploreSection": { + "mlb.ImageRef": { "properties": { - "creators": { - "items": { - "$ref": "#/definitions/patreon.ExploreCreator" - }, - "type": "array" - }, - "title": { - "example": "Top creators", + "type": { "type": "string" }, - "type": { - "enum": [ - "popular-campaigns", - "trending-campaigns", - "new-campaigns" - ], - "example": "popular-campaigns", + "url": { "type": "string" } }, "type": "object" }, - "patreon.MembershipTier": { + "mlb.Inning": { "properties": { - "amount_cents": { - "example": 500, + "away_errors": { "type": "integer" }, - "benefits": { - "items": { - "$ref": "#/definitions/patreon.MembershipTierBenefit" - }, - "type": "array" + "away_hits": { + "type": "integer" }, - "currency": { - "example": "USD", - "type": "string" + "away_runs": { + "type": "integer" }, - "description": { - "type": "string" + "home_errors": { + "type": "integer" }, - "id": { - "example": "17218833", - "type": "string" + "home_hits": { + "type": "integer" }, - "title": { - "example": "Supporter", - "type": "string" + "home_runs": { + "type": "integer" + }, + "number": { + "type": "integer" } }, "type": "object" }, - "patreon.MembershipTierBenefit": { + "mlb.LeaderCategory": { "properties": { - "description": { + "category": { "type": "string" }, - "title": { - "example": "Support the project", - "type": "string" - } - }, - "type": "object" - }, - "patreon.MembershipTiersResult": { - "properties": { - "creator_id": { - "example": "8655479", + "game_type": { "type": "string" }, - "handle": { - "example": "CachyOS", + "group": { "type": "string" }, - "tiers": { + "leaders": { "items": { - "$ref": "#/definitions/patreon.MembershipTier" + "$ref": "#/definitions/mlb.LeaderEntry" }, "type": "array" + }, + "season": { + "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "patreon.PublicRSSEpisode": { + "mlb.LeaderEntry": { "properties": { - "description": { - "type": "string" - }, - "duration": { - "type": "string" - }, - "enclosure_type": { - "type": "string" - }, - "enclosure_url": { - "type": "string" + "league": { + "$ref": "#/definitions/mlb.NamedRef" }, - "episode_type": { - "type": "string" + "player": { + "$ref": "#/definitions/mlb.NamedRef" }, - "guid": { - "type": "string" + "rank": { + "type": "integer" }, - "image_url": { + "season": { "type": "string" }, - "link": { - "type": "string" + "stats": { + "additionalProperties": {}, + "type": "object" }, - "published_at": { - "type": "string" + "team": { + "$ref": "#/definitions/mlb.TeamRef" }, - "title": { + "value": { "type": "string" } }, "type": "object" }, - "patreon.PublicRSSFeed": { + "mlb.LeagueLeadersResponse": { "properties": { - "author": { - "type": "string" - }, - "campaign_id": { - "example": "80117", - "type": "string" - }, - "copyright": { - "type": "string" - }, - "description": { - "type": "string" - }, - "episodes": { + "categories": { "items": { - "$ref": "#/definitions/patreon.PublicRSSEpisode" + "type": "string" }, "type": "array" }, - "explicit": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "language": { - "type": "string" + "count": { + "type": "integer" }, - "link": { + "fetched_at": { "type": "string" }, - "show_id": { - "example": "1322380", - "type": "string" + "results": { + "items": { + "$ref": "#/definitions/mlb.LeaderCategory" + }, + "type": "array" }, - "title": { - "type": "string" + "season": { + "type": "integer" }, - "type": { + "source_url": { "type": "string" } }, "type": "object" }, - "patreon.creatorResponseDoc": { + "mlb.Linescore": { "properties": { - "code": { - "example": 200, + "away_errors": { "type": "integer" }, - "data": { - "$ref": "#/definitions/patreon.Creator" - }, - "msg": { - "example": "success", - "type": "string" - } - }, - "type": "object" - }, - "patreon.exploreResponseDoc": { - "properties": { - "code": { - "example": 200, + "away_hits": { "type": "integer" }, - "data": { - "$ref": "#/definitions/patreon.ExploreResult" + "away_runs": { + "type": "integer" }, - "msg": { - "example": "success", - "type": "string" - } - }, - "type": "object" - }, - "patreon.membershipTiersResponseDoc": { - "properties": { - "code": { - "example": 200, + "current_inning": { "type": "integer" }, - "data": { - "$ref": "#/definitions/patreon.MembershipTiersResult" + "home_errors": { + "type": "integer" }, - "msg": { - "example": "success", - "type": "string" - } - }, - "type": "object" - }, - "patreon.publicRSSResponseDoc": { - "properties": { - "code": { - "example": 200, + "home_hits": { "type": "integer" }, - "data": { - "$ref": "#/definitions/patreon.PublicRSSFeed" + "home_runs": { + "type": "integer" }, - "msg": { - "example": "success", + "inning_state": { "type": "string" + }, + "innings": { + "items": { + "$ref": "#/definitions/mlb.Inning" + }, + "type": "array" + }, + "scheduled_innings": { + "type": "integer" } }, "type": "object" }, - "pcgamer.AuthorResponse": { + "mlb.MLBDiscoveryResponse": { "properties": { - "articles": { + "divisions": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/mlb.NamedRef" }, "type": "array" }, - "biography": { + "fetched_at": { + "type": "string" + }, + "game_types": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "has_next_page": { - "type": "boolean" + "leader_categories": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "job_title": { - "type": "string" + "leagues": { + "items": { + "$ref": "#/definitions/mlb.NamedRef" + }, + "type": "array" }, - "name": { - "type": "string" + "prospect_date_ranges": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "page": { - "type": "integer" + "prospect_minimum_pa": { + "items": { + "type": "integer" + }, + "type": "array" }, - "slug": { - "type": "string" + "prospect_positions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "social_links": { + "prospect_ranking_positions": { "items": { - "$ref": "#/definitions/pcgamer.AuthorSocialLink" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "pcgamer.AuthorSocialLink": { - "properties": { - "platform": { - "type": "string" + "prospect_ranking_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "pcmag.AuthorResponse": { - "properties": { - "articles": { + "prospect_ranking_sort_fields": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "biography": { - "type": "string" + "prospect_ranking_teams": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "expertise": { + "prospect_ranking_views": { "items": { - "$ref": "#/definitions/pcmag.AuthorTopic" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "image_url": { - "type": "string" + "prospect_ranking_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "type": "string" + "roster_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "role": { - "type": "string" + "sections": { + "items": { + "$ref": "#/definitions/mlb.NavigationItem" + }, + "type": "array" }, - "slug": { + "source_url": { "type": "string" }, - "social_links": { + "sports": { "items": { - "$ref": "#/definitions/pcmag.AuthorSocialLink" + "$ref": "#/definitions/mlb.NamedRef" }, "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "pcmag.AuthorSocialLink": { - "properties": { - "platform": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "pcmag.AuthorTopic": { - "properties": { - "name": { - "type": "string" + "standings_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "people.AuthorInfoItem": { - "properties": { - "label": { - "type": "string" + "stat_groups": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" + "stat_hitter_positions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "value": { - "type": "string" - } - }, - "type": "object" - }, - "people.AuthorResponse": { - "properties": { - "articles": { + "stat_player_pools": { "items": { - "$ref": "#/definitions/people.HeadlineItem" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "biography": { + "stat_types": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "info": { + "statcast_abs_challenge_filters": { + "$ref": "#/definitions/mlb.StatcastABSChallengeFilters" + }, + "statcast_active_spin_hands": { "items": { - "$ref": "#/definitions/people.AuthorInfoItem" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "job_title": { - "type": "string" + "statcast_active_spin_minimums": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "type": "string" + "statcast_active_spin_seasons": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "people.HeadlineItem": { - "properties": { - "author": { - "type": "string" + "statcast_active_spin_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "image_url": { - "type": "string" + "statcast_active_spin_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "published_at": { - "type": "string" + "statcast_arm_angle_game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "summary": { - "type": "string" + "statcast_arm_angle_group_by": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "title": { - "type": "string" + "statcast_arm_angle_group_minimum_pitches": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "type": { - "type": "string" + "statcast_arm_angle_hands": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "phillyinquirer.AuthorResponse": { - "properties": { - "articles": { + "statcast_arm_angle_minimums": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "biography": { + "statcast_arm_angle_pitch_types": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "image_url": { - "type": "string" + "statcast_arm_angle_seasons": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "type": "string" + "statcast_arm_angle_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "role": { - "type": "string" + "statcast_arm_angle_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "slug": { - "type": "string" + "statcast_arm_angle_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "social_links": { + "statcast_arm_strength_min_throws": { "items": { - "$ref": "#/definitions/phillyinquirer.AuthorSocialLink" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "phillyinquirer.AuthorSocialLink": { - "properties": { - "platform": { - "type": "string" + "statcast_arm_strength_positions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "philstar.AuthorArticle": { - "properties": { - "published_at": { - "type": "string" + "statcast_arm_strength_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "section": { - "type": "string" + "statcast_arm_strength_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "summary": { - "type": "string" + "statcast_arm_strength_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "title": { - "type": "string" + "statcast_arm_strength_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "philstar.AuthorResponse": { - "properties": { - "articles": { + "statcast_arm_strength_years": { "items": { - "$ref": "#/definitions/philstar.AuthorArticle" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "id": { - "type": "string" + "statcast_arm_value_game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "type": "string" + "statcast_arm_value_max_year": { + "type": "integer" }, - "photo_url": { - "type": "string" + "statcast_arm_value_min_year": { + "type": "integer" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "phonearena.AuthorResponse": { - "properties": { - "articles": { + "statcast_arm_value_minimum_opportunities": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "biography": { + "statcast_arm_value_situations": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "image_url": { - "type": "string" + "statcast_arm_value_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "type": "string" + "statcast_arm_value_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "role": { - "type": "string" + "statcast_arm_value_split_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "slug": { - "type": "string" + "statcast_arm_value_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "social_links": { + "statcast_arm_value_types": { "items": { - "$ref": "#/definitions/phonearena.AuthorSocialLink" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "phonearena.AuthorSocialLink": { - "properties": { - "platform": { - "type": "string" + "statcast_arm_value_with_team_only": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "pick6.Pick6RuleDetailResponse": { - "properties": { - "fetched_at": { - "type": "string" + "statcast_arm_value_years": { + "items": { + "type": "integer" + }, + "type": "array" }, - "section_count": { - "type": "integer" + "statcast_baserunning_filters": { + "$ref": "#/definitions/mlb.StatcastBaserunningFilters" }, - "sections": { + "statcast_bat_tracking_attack_zones": { "items": { - "$ref": "#/definitions/pick6.Pick6RuleSection" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "slug": { - "type": "string" - }, - "source_url": { - "type": "string" + "statcast_bat_tracking_bat_sides": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "sport": { - "type": "string" - } - }, - "type": "object" - }, - "pick6.Pick6RulePage": { - "properties": { - "detail_endpoint_supported": { - "type": "boolean" + "statcast_bat_tracking_contact_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "slug": { - "type": "string" + "statcast_bat_tracking_counts": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "title": { - "type": "string" + "statcast_bat_tracking_game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "pick6.Pick6RuleSection": { - "properties": { - "text": { - "type": "string" + "statcast_bat_tracking_group_by": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "pick6.Pick6RulesResponse": { - "properties": { - "fetched_at": { - "type": "string" + "statcast_bat_tracking_hard_hit_values": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "rule_page_count": { - "type": "integer" + "statcast_bat_tracking_min_group_swings": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "rule_pages": { + "statcast_bat_tracking_min_swings": { "items": { - "$ref": "#/definitions/pick6.Pick6RulePage" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "section_count": { - "type": "integer" + "statcast_bat_tracking_pitch_hands": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "sections": { + "statcast_bat_tracking_pitch_types": { "items": { - "$ref": "#/definitions/pick6.Pick6RuleSection" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "source_url": { - "type": "string" + "statcast_bat_tracking_seasons": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "sport": { - "type": "string" - } - }, - "type": "object" - }, - "pick6.Pick6Sport": { - "properties": { - "has_help_center_link": { - "type": "boolean" + "statcast_bat_tracking_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "type": "string" + "statcast_bat_tracking_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "sport_code": { - "type": "string" + "statcast_bat_tracking_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "pick6.Pick6SportCategory": { - "properties": { - "items": { + "statcast_bat_tracking_types": { "items": { - "$ref": "#/definitions/pick6.Pick6Sport" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "pick6.Pick6SportsResponse": { - "properties": { - "categories": { + "statcast_batted_ball_game_types": { "items": { - "$ref": "#/definitions/pick6.Pick6SportCategory" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "category_count": { + "statcast_batted_ball_max_year": { "type": "integer" }, - "linked_page_count": { - "type": "integer" + "statcast_batted_ball_min_splits": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "listed_item_count": { + "statcast_batted_ball_min_year": { "type": "integer" }, - "restrictions": { + "statcast_batted_ball_minimums": { "items": { - "$ref": "#/definitions/pick6.Pick6SportsRestriction" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "source_url": { - "type": "string" + "statcast_batted_ball_pitch_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "verified_on": { - "type": "string" - } - }, - "type": "object" - }, - "pick6.Pick6SportsRestriction": { - "properties": { - "jurisdictions": { + "statcast_batted_ball_seasons": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "note": { - "type": "string" + "statcast_batted_ball_sides": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "sport_codes": { + "statcast_batted_ball_sort_directions": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" - } - }, - "type": "object" - }, - "pick6.pick6RuleDetailResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/pick6.Pick6RuleDetailResponse" + "statcast_batted_ball_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "pick6.pick6RulesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "statcast_batted_ball_split_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/pick6.Pick6RulesResponse" + "statcast_batted_ball_splits": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "pick6.pick6SportsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "statcast_batted_ball_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/pick6.Pick6SportsResponse" + "statcast_batted_ball_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "pinterest.Board": { - "properties": { - "cover_image_url": { - "type": "string" + "statcast_catcher_blocking_game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "description": { - "type": "string" + "statcast_catcher_blocking_minimums": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "follower_count": { - "type": "integer" + "statcast_catcher_blocking_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "id": { - "type": "string" + "statcast_catcher_blocking_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "type": "string" + "statcast_catcher_blocking_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "owner_username": { - "type": "string" + "statcast_catcher_blocking_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "pin_count": { - "type": "integer" + "statcast_catcher_blocking_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "privacy": { - "type": "string" + "statcast_catcher_framing_ball_strike": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "pinterest.BoardResponse": { - "properties": { - "cover_image_url": { - "type": "string" + "statcast_catcher_framing_bat_sides": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "description": { - "type": "string" + "statcast_catcher_framing_calls": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "follower_count": { - "type": "integer" + "statcast_catcher_framing_game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "id": { - "type": "string" + "statcast_catcher_framing_min_pitches": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "type": "string" + "statcast_catcher_framing_min_results": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "owner_username": { - "type": "string" + "statcast_catcher_framing_pitch_hands": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "pin_count": { - "type": "integer" + "statcast_catcher_framing_pitch_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "pins": { + "statcast_catcher_framing_sort_directions": { "items": { - "$ref": "#/definitions/pinterest.PinSummary" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "privacy": { - "type": "string" + "statcast_catcher_framing_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "pinterest.CategoriesResponse": { - "properties": { - "categories": { - "description": "Top-level Pinterest Ideas categories.", + "statcast_catcher_framing_team_ids": { "items": { - "$ref": "#/definitions/pinterest.Category" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" - } - }, - "type": "object" - }, - "pinterest.Category": { - "properties": { - "id": { - "description": "Pinterest category id. Use it with the ideas endpoint.", - "type": "string" }, - "name": { - "description": "Category name as shown on Pinterest.", - "type": "string" + "statcast_catcher_framing_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "slug": { - "description": "URL slug of the category.", - "type": "string" - } - }, - "type": "object" - }, - "pinterest.IdeaResponse": { - "properties": { - "description": { - "type": "string" + "statcast_catcher_framing_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "follower_count": { - "type": "integer" + "statcast_catcher_pop_time_min_2b_attempts": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "id": { - "type": "string" + "statcast_catcher_pop_time_min_3b_attempts": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "type": "string" + "statcast_catcher_pop_time_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "pins": { + "statcast_catcher_pop_time_sort_fields": { "items": { - "$ref": "#/definitions/pinterest.PinSummary" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" - } - }, - "type": "object" - }, - "pinterest.PinDetail": { - "properties": { - "board_name": { - "description": "Name of the board the pin is saved to.", - "type": "string" }, - "comment_count": { - "type": "integer" + "statcast_catcher_pop_time_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "created_at": { - "type": "string" + "statcast_catcher_pop_time_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "description": { - "description": "Description text of the pin as Pinterest shows it.", - "type": "string" + "statcast_catcher_stance_game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "domain": { - "description": "Domain of the website the pin links to, or `Uploaded by user` for pins uploaded directly.", - "type": "string" + "statcast_catcher_stance_group_by": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "dominant_color": { - "description": "Dominant color of the pin image, as a hex code such as `#6a2f18`.", - "type": "string" + "statcast_catcher_stance_knee_codes": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "id": { - "description": "Pinterest pin id.", - "type": "string" + "statcast_catcher_stance_min_pitches": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "image_url": { - "description": "URL of the pin image.", - "type": "string" + "statcast_catcher_stance_min_results": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "link": { - "description": "Destination URL the pin links to.", - "type": "string" + "statcast_catcher_stance_pitch_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "pinner_username": { - "description": "Username of the account that saved the pin.", - "type": "string" + "statcast_catcher_stance_seasons": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "repin_count": { - "type": "integer" + "statcast_catcher_stance_sides": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "title": { - "description": "Title of the pin as Pinterest shows it.", - "type": "string" + "statcast_catcher_stance_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "description": "URL of the pin's page on Pinterest.", - "type": "string" - } - }, - "type": "object" - }, - "pinterest.PinSummary": { - "properties": { - "board_name": { - "description": "Name of the board the pin is saved to.", - "type": "string" + "statcast_catcher_stance_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "description": { - "description": "Description text of the pin as Pinterest shows it.", - "type": "string" + "statcast_catcher_stance_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "domain": { - "description": "Domain of the website the pin links to, or `Uploaded by user` for pins uploaded directly.", - "type": "string" + "statcast_catcher_stance_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "dominant_color": { - "description": "Dominant color of the pin image, as a hex code such as `#6a2f18`.", - "type": "string" + "statcast_catcher_throwing_game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "id": { - "description": "Pinterest pin id.", - "type": "string" + "statcast_catcher_throwing_minimum_attempts": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "image_url": { - "description": "URL of the pin image.", - "type": "string" + "statcast_catcher_throwing_seasons": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "link": { - "description": "Destination URL the pin links to.", - "type": "string" + "statcast_catcher_throwing_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "pinner_username": { - "description": "Username of the account that saved the pin.", - "type": "string" + "statcast_catcher_throwing_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "title": { - "description": "Title of the pin as Pinterest shows it.", - "type": "string" + "statcast_catcher_throwing_target_bases": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "description": "URL of the pin's page on Pinterest.", - "type": "string" - } - }, - "type": "object" - }, - "pinterest.SearchResponse": { - "properties": { - "pins": { + "statcast_catcher_throwing_team_ids": { "items": { - "$ref": "#/definitions/pinterest.PinSummary" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "query": { - "type": "string" - } - }, - "type": "object" - }, - "pinterest.User": { - "properties": { - "about": { - "description": "Bio text from the profile.", - "type": "string" + "statcast_catcher_throwing_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "avatar_url": { - "description": "URL of the profile picture.", - "type": "string" + "statcast_entity_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "board_count": { - "description": "Number of boards on the profile.", - "type": "integer" + "statcast_expected_filter_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "follower_count": { - "description": "Number of accounts following the user.", + "statcast_expected_max_year": { "type": "integer" }, - "following_count": { - "description": "Number of accounts the user follows.", + "statcast_expected_min_year": { "type": "integer" }, - "full_name": { - "description": "Display name shown on the profile.", - "type": "string" - }, - "is_verified_merchant": { - "description": "Whether Pinterest marks the account as a verified merchant.", - "type": "boolean" + "statcast_expected_minimums": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "pin_count": { - "description": "Number of pins on the profile.", - "type": "integer" + "statcast_expected_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "username": { - "description": "Pinterest username of the profile.", - "type": "string" + "statcast_expected_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "website_url": { - "description": "Website URL listed on the profile.", - "type": "string" - } - }, - "type": "object" - }, - "pinterest.UserBoardsResponse": { - "properties": { - "boards": { + "statcast_expected_types": { "items": { - "$ref": "#/definitions/pinterest.Board" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "username": { - "type": "string" - } - }, - "type": "object" - }, - "pinterest.UserPinsResponse": { - "properties": { - "pins": { - "description": "Pins from the user's profile.", + "statcast_fielding_run_value_batting_minimums": { "items": { - "$ref": "#/definitions/pinterest.PinSummary" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "username": { - "description": "Pinterest username that was requested.", - "type": "string" - } - }, - "type": "object" - }, - "pinterest.boardResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "statcast_fielding_run_value_fielding_minimums": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/pinterest.BoardResponse" + "statcast_fielding_run_value_game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "pinterest.categoriesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "statcast_fielding_run_value_group_by": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/pinterest.CategoriesResponse" + "statcast_fielding_run_value_positions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "pinterest.ideaResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "statcast_fielding_run_value_seasons": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/pinterest.IdeaResponse" + "statcast_fielding_run_value_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "pinterest.pinResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "statcast_fielding_run_value_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/pinterest.PinDetail" + "statcast_fielding_run_value_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "pinterest.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "statcast_fielding_run_value_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/pinterest.SearchResponse" + "statcast_first_base_receiving_field_out_values": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "pinterest.userBoardsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "statcast_first_base_receiving_game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/pinterest.UserBoardsResponse" + "statcast_first_base_receiving_hands": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "pinterest.userPinsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "statcast_first_base_receiving_minimum_heights": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/pinterest.UserPinsResponse" + "statcast_first_base_receiving_minimum_split_values": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "pinterest.userResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "statcast_first_base_receiving_minimums": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/pinterest.User" + "statcast_first_base_receiving_runner_states": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "pitchbook.DataTable": { - "properties": { - "columns": { - "description": "Column headings of the table.", + "statcast_first_base_receiving_seasons": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "name": { - "description": "Name of the profile section the table comes from, such as `Investors`.", - "example": "Investors", - "type": "string" + "statcast_first_base_receiving_secondary_splits": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "row_ids": { - "description": "Profile each cell links to as `kind/id`, such as `company/157986-91`, matching `rows` by position. Empty for cells without a link.", + "statcast_first_base_receiving_sort_directions": { "items": { - "items": { - "type": "string" - }, - "type": "array" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "rows": { - "description": "Table rows, each a list of cell texts. Cells PitchBook hides behind a subscription are empty.", + "statcast_first_base_receiving_sort_fields": { "items": { - "items": { - "type": "string" - }, - "type": "array" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "total": { - "description": "Full count of entries PitchBook states for the section, usually more than the rows returned.", - "example": 23, - "type": "integer" - } - }, - "type": "object" - }, - "pitchbook.FAQ": { - "properties": { - "answer": { - "description": "Answer to the question.", - "example": "Thinking Machines Lab was founded in 2024.", - "type": "string" + "statcast_first_base_receiving_split_year_values": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "question": { - "description": "Question as shown in the profile's FAQ section.", - "example": "When was Thinking Machines Lab founded?", - "type": "string" - } - }, - "type": "object" - }, - "pitchbook.ProfileResponse": { - "properties": { - "contact": { - "additionalProperties": { - "type": "string" + "statcast_first_base_receiving_throw_heights": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" }, - "description": "Contact and company details from the profile as label and value pairs, such as `Website`.", - "type": "object" + "type": "array" }, - "description": { - "description": "Profile description as PitchBook shows it.", - "type": "string" + "statcast_first_base_receiving_throw_locations": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "faqs": { - "description": "Question and answer pairs from the profile's FAQ section.", + "statcast_first_base_receiving_throw_positions": { "items": { - "$ref": "#/definitions/pitchbook.FAQ" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-07-08T20:00:00Z", - "type": "string" + "statcast_first_base_receiving_time_bins": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "id": { - "description": "PitchBook profile id, such as `752821-12`.", - "example": "752821-12", - "type": "string" + "statcast_first_base_receiving_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "kind": { - "description": "Profile type: `company`, `investor`, `fund`, `advisor` or `limited-partner`.", - "example": "company", - "type": "string" + "statcast_home_runs_categories": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "description": "Name of the company, investor, fund, advisor or limited partner.", - "example": "Thinking Machines Lab", - "type": "string" + "statcast_home_runs_minimum_home_runs": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "overview": { - "additionalProperties": { - "type": "string" + "statcast_home_runs_player_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" }, - "description": "Quick facts from the profile as label and value pairs, such as `Year Founded`.", - "type": "object" + "type": "array" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://pitchbook.com/profiles/company/752821-12", - "type": "string" + "statcast_home_runs_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "tables": { - "description": "Tables from the profile's sections, such as Investors.", + "statcast_home_runs_sort_fields": { "items": { - "$ref": "#/definitions/pitchbook.DataTable" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" - } - }, - "type": "object" - }, - "pitchbook.advisorResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/pitchbook.ProfileResponse" + "statcast_home_runs_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "pitchbook.companyResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "statcast_home_runs_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/pitchbook.ProfileResponse" + "statcast_leaderboards": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "pitchbook.fundResponseDoc": { - "properties": { - "code": { - "example": 200, + "statcast_max_year": { "type": "integer" }, - "data": { - "$ref": "#/definitions/pitchbook.ProfileResponse" - }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "pitchbook.investorResponseDoc": { - "properties": { - "code": { - "example": 200, + "statcast_min_year": { "type": "integer" }, - "data": { - "$ref": "#/definitions/pitchbook.ProfileResponse" + "statcast_minimum_bbe": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "pitchbook.limitedPartnerResponseDoc": { - "properties": { - "code": { - "example": 200, + "statcast_oaa_max_year": { "type": "integer" }, - "data": { - "$ref": "#/definitions/pitchbook.ProfileResponse" - }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "pizzahut.Address": { - "properties": { - "address1": { - "example": "932 8th Ave", - "type": "string" + "statcast_oaa_min_year": { + "type": "integer" }, - "address2": { - "type": "string" + "statcast_oaa_minimums": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "city": { - "example": "New York", - "type": "string" + "statcast_oaa_positions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "country_code": { - "example": "US", - "type": "string" + "statcast_oaa_ranges": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "latitude": { - "example": 40.7655, - "type": "number" + "statcast_oaa_roles": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "longitude": { - "example": -73.9835, - "type": "number" + "statcast_oaa_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "phone": { - "example": "+19296452154", - "type": "string" + "statcast_oaa_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "postal_code": { - "example": "10019", - "type": "string" + "statcast_oaa_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "state": { - "example": "NY", - "type": "string" - } - }, - "type": "object" - }, - "pizzahut.BundleChoice": { - "properties": { - "choice_code": { - "example": "748", - "type": "string" + "statcast_park_factor_bat_sides": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "max_allowed_selections": { - "example": 1, - "type": "integer" + "statcast_park_factor_conditions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "min_allowed_selections": { - "example": 1, - "type": "integer" + "statcast_park_factor_dimension_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "example": "1st Pizza", - "type": "string" + "statcast_park_factor_parks": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "variants": { + "statcast_park_factor_rolling_windows": { "items": { - "$ref": "#/definitions/pizzahut.BundleChoiceVariant" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" - } - }, - "type": "object" - }, - "pizzahut.BundleChoiceVariant": { - "properties": { - "name": { - "example": "Medium Hand-Tossed Create Your Own 1-Top Pizza", - "type": "string" }, - "upcharge": { - "$ref": "#/definitions/pizzahut.Money" + "statcast_park_factor_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "variant_code": { - "example": "variant_CLSS001_010BCYO1T_SIZE050M_BASE020H", - "type": "string" - } - }, - "type": "object" - }, - "pizzahut.BundleChoicesResponse": { - "properties": { - "bundle_code": { - "example": "MEAL501BD", - "type": "string" + "statcast_park_factor_statcast_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "channel": { - "example": "WEB", - "type": "string" + "statcast_park_factor_stats": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "choice_count": { - "example": 4, - "type": "integer" + "statcast_park_factor_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "choices": { + "statcast_park_factor_years": { "items": { - "$ref": "#/definitions/pizzahut.BundleChoice" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "description": { - "example": "All your faves - 2 medium 1-topping pizzas, 8 boneless wings, and 5 breadsticks!", - "type": "string" + "statcast_percentile_batter_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "fetched_at": { - "type": "string" + "statcast_percentile_batter_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "example": "Big Dinner Box", - "type": "string" + "statcast_percentile_comparators": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "price": { - "$ref": "#/definitions/pizzahut.Money" + "statcast_percentile_pitcher_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "source_url": { - "type": "string" + "statcast_percentile_pitcher_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "store_number": { - "example": "040937", - "type": "string" - } - }, - "type": "object" - }, - "pizzahut.DeliveryEstimateResponse": { - "properties": { - "delivery_provider": { - "example": "INTERNAL", - "type": "string" + "statcast_percentile_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "dropoff_at": { - "type": "string" + "statcast_percentile_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "fee": { - "allOf": [ - { - "$ref": "#/definitions/pizzahut.Money" - } - ], - "description": "Fee is the total delivery fee; Fees breaks it down by line item." + "statcast_percentile_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "fees": { + "statcast_percentile_years": { "items": { - "$ref": "#/definitions/pizzahut.DeliveryFeeLine" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "fetched_at": { - "type": "string" + "statcast_pitch_arsenal_min_pa": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "pickup_at": { - "type": "string" + "statcast_pitch_arsenal_min_pitches": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "reason": { - "example": "The requested StoreDeliveryProvider has not be enabled at this store", - "type": "string" + "statcast_pitch_arsenal_pitch_aliases": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "serviceable": { - "description": "Serviceable is true only when the upstream returned a real estimate.\nA false value with Reason populated covers every other case this\nfamily has seen live: the provider not enabled at this store\n(confirmed live for DOORDASH against a real INTERNAL-only store) or\nthe upstream delivery marketplace itself reporting an error --\nPizza Hut's schema represents these as distinct typed results, not\none boolean. See this type's own doc comment for a caveat about\nwhat Serviceable:true does and does not confirm for INTERNAL.", - "example": true, - "type": "boolean" + "statcast_pitch_arsenal_pitch_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "source_url": { - "type": "string" + "statcast_pitch_arsenal_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "store_number": { - "example": "040937", - "type": "string" - } - }, - "type": "object" - }, - "pizzahut.DeliveryFeeLine": { - "properties": { - "amount": { - "$ref": "#/definitions/pizzahut.Money" + "statcast_pitch_arsenal_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "example": "Delivery fee", - "type": "string" + "statcast_pitch_arsenal_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "type": { - "example": "DELIVERY_FEE", - "type": "string" - } - }, - "type": "object" - }, - "pizzahut.DeliveryProvider": { - "properties": { - "enabled": { - "example": true, - "type": "boolean" + "statcast_pitch_arsenal_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "provider": { - "example": "INTERNAL", - "type": "string" - } - }, - "type": "object" - }, - "pizzahut.MenuCategory": { - "properties": { - "category_code": { - "example": "pizza", - "type": "string" + "statcast_pitch_arsenals_hands": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "description": { - "type": "string" + "statcast_pitch_arsenals_minimum_pitches": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "items": { + "statcast_pitch_arsenals_sort_directions": { "items": { - "$ref": "#/definitions/pizzahut.MenuItem" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "name": { - "example": "Pizza", - "type": "string" - } - }, - "type": "object" - }, - "pizzahut.MenuItem": { - "properties": { - "available": { - "description": "Available is false when this item (or, for a product, every one of\nits variants at once) is currently blacked out -- a real,\nlive-confirmed \"temporarily unavailable\"/\"sold out\" signal (a\ndessert item was found blacked out at a real store, 2026-09-06),\ndistinct from an item genuinely being removed from the menu (which\nsimply would not appear here at all). Check a product's own\nVariants[].Available too -- a product itself can be orderable while\none specific size/style variant is blacked out, and vice versa.", - "example": true, - "type": "boolean" + "statcast_pitch_arsenals_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "code": { - "example": "CLSS001P|PROD220P", - "type": "string" + "statcast_pitch_arsenals_spin_cutoff_year": { + "type": "integer" }, - "description": { - "type": "string" + "statcast_pitch_arsenals_team_abbreviations": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "image_url": { - "type": "string" + "statcast_pitch_arsenals_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "example": "Pepperoni Pizza", - "type": "string" + "statcast_pitch_arsenals_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "price": { - "$ref": "#/definitions/pizzahut.Money" + "statcast_pitch_movement_hands": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "type": { - "example": "product", - "type": "string" + "statcast_pitch_movement_minimums": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "variant_code": { - "description": "VariantCode is the specific priced variant this item's Price\nreflects (present for type=product, whose price comes from its\ndefault variant).", - "example": "variant_CLSS001_220P_SIZE060L_BASE020H", - "type": "string" + "statcast_pitch_movement_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "variants": { - "description": "Variants lists every other priced size/crust/style variant this\nproduct item offers beyond its default (type=product only). Empty\nwhen the product has no additional variants beyond the default, or\nfor bundle/variant items.", + "statcast_pitch_movement_sort_fields": { "items": { - "$ref": "#/definitions/pizzahut.MenuVariant" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" - } - }, - "type": "object" - }, - "pizzahut.MenuResponse": { - "properties": { - "categories": { + }, + "statcast_pitch_movement_types": { "items": { - "$ref": "#/definitions/pizzahut.MenuCategory" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "channel": { - "example": "WEB", - "type": "string" + "statcast_pitch_movement_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "currency": { - "example": "USD", - "type": "string" + "statcast_pitch_tempo_game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "fetched_at": { - "type": "string" + "statcast_pitch_tempo_minimum_pitches": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "item_count": { - "description": "ItemCount counts only items reachable through Categories, matching\nthis field's original meaning -- it does not include\nUncategorizedItems.", - "example": 120, - "type": "integer" + "statcast_pitch_tempo_player_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "menu_id": { - "example": "22590d80-9482-4f7b-9594-d7ba2885b928", - "type": "string" + "statcast_pitch_tempo_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "source_url": { - "type": "string" + "statcast_pitch_tempo_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "store_number": { - "example": "040937", - "type": "string" + "statcast_pitch_tempo_split_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "uncategorized_items": { - "description": "UncategorizedItems lists real, separately-priced products and bundles\nthis restaurant's menu carries that are not linked to any category --\nconfirmed live 2026-09-06 (coverage-expansion round 2): Pizza Hut's\n`Menu.products`/`Menu.bundles` support a `categorized: false` filter,\nand at least one store sampled had 9 such products (e.g. a $0.99\n\"Ranch Dip Cup\", \"Garlic Dip Cup\") that Categories' own category walk\nnever surfaces at all -- a real gap in the prior category-walk-only\napproach, not a parser omission. A platform-wide placeholder product\nnamed \"Reserved\" (price $0.00) appears in this list at every store\nsampled; it is included as upstream returns it rather than filtered,\nsince this repo does not invent filtering heuristics without a\nconfirmed upstream signal to key on. Empty when every product/bundle\nis reachable through Categories (no uncategorized bundle has been\nobserved on any store sampled).", + "statcast_pitch_tempo_team_ids": { "items": { - "$ref": "#/definitions/pizzahut.MenuItem" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" - } - }, - "type": "object" - }, - "pizzahut.MenuVariant": { - "properties": { - "available": { - "description": "Available is false when this specific variant is currently blacked\nout (temporarily unavailable) -- confirmed live 2026-09-06 that this\ngenuinely varies independently per variant, not just per product.", - "example": true, - "type": "boolean" }, - "name": { - "example": "Large Original Stuffed Crust® Pepperoni Pizza", - "type": "string" + "statcast_pitch_tempo_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "price": { - "$ref": "#/definitions/pizzahut.Money" + "statcast_pitch_tempo_with_team_only": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "variant_code": { - "example": "variant_CLSS001_220P_SIZE060L_BASE431S", - "type": "string" - } - }, - "type": "object" - }, - "pizzahut.Modifier": { - "properties": { - "modifier_code": { - "example": "CLSS001P|TOPP012P", - "type": "string" + "statcast_pitch_tempo_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "example": "Pepperoni", - "type": "string" + "statcast_pitch_timer_chart_sorts": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "weights": { + "statcast_pitch_timer_include_zeroes": { "items": { - "$ref": "#/definitions/pizzahut.ModifierWeight" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" - } - }, - "type": "object" - }, - "pizzahut.ModifierSlot": { - "properties": { - "max_allowed_selections": { - "example": 5, - "type": "integer" }, - "min_allowed_selections": { - "example": 0, - "type": "integer" + "statcast_pitch_timer_minimum_pitches": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "modifiers": { + "statcast_pitch_timer_seasons": { "items": { - "$ref": "#/definitions/pizzahut.Modifier" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "name": { - "example": "Pizza Toppings", - "type": "string" + "statcast_pitch_timer_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "slot_code": { - "example": "slot_pizza_toppings", - "type": "string" - } - }, - "type": "object" - }, - "pizzahut.ModifierWeight": { - "properties": { - "modifier_weight_code": { - "example": "CLSS001P|TOPP200XC", - "type": "string" + "statcast_pitch_timer_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "example": "Extra Cheese", - "type": "string" + "statcast_pitch_timer_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "price": { - "$ref": "#/definitions/pizzahut.Money" - } - }, - "type": "object" - }, - "pizzahut.ModifiersResponse": { - "properties": { - "channel": { - "example": "WEB", - "type": "string" + "statcast_player_detail_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "fetched_at": { - "type": "string" + "statcast_positions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "name": { - "example": "Large Hand-Tossed Create Your Own 1-Top Pizza", - "type": "string" + "statcast_rolling_metrics": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "price": { - "$ref": "#/definitions/pizzahut.Money" + "statcast_rolling_roles": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "slot_count": { - "example": 6, - "type": "integer" + "statcast_rolling_window_pa_values": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "slots": { + "statcast_run_value_groups": { "items": { - "$ref": "#/definitions/pizzahut.ModifierSlot" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "source_url": { - "type": "string" + "statcast_run_value_leverages": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "store_number": { - "example": "040937", - "type": "string" + "statcast_run_value_minimums": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "variant_code": { - "example": "variant_CLSS001_010BCYO1T_SIZE060L_BASE020H", - "type": "string" - } - }, - "type": "object" - }, - "pizzahut.Money": { - "properties": { - "amount": { - "example": 20.99, - "type": "number" + "statcast_run_value_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "amount_cents": { - "example": 2099, - "type": "integer" + "statcast_run_value_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "currency_code": { - "example": "USD", - "type": "string" - } - }, - "type": "object" - }, - "pizzahut.OccasionHours": { - "properties": { - "allow_tip": { - "example": true, - "type": "boolean" + "statcast_run_value_subtypes": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "enabled": { - "example": true, - "type": "boolean" + "statcast_run_value_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "max_order_amount": { - "$ref": "#/definitions/pizzahut.Money" + "statcast_run_value_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "min_order_amount": { - "$ref": "#/definitions/pizzahut.Money" + "statcast_running_game_filters": { + "$ref": "#/definitions/mlb.StatcastRunningGameFilters" }, - "occasion": { - "example": "CARRYOUT", - "type": "string" + "statcast_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "payment_types": { + "statcast_sort_fields": { "items": { - "$ref": "#/definitions/pizzahut.PaymentType" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "windows": { + "statcast_sprint_speed_minimum_runs": { "items": { - "$ref": "#/definitions/pizzahut.TimeWindow" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" - } - }, - "type": "object" - }, - "pizzahut.PaymentType": { - "properties": { - "name": { - "example": "APPLEPAY", - "type": "string" }, - "type": { - "example": "CARD", - "type": "string" - } - }, - "type": "object" - }, - "pizzahut.Store": { - "properties": { - "accepting_online_orders": { - "example": true, - "type": "boolean" + "statcast_sprint_speed_positions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "address": { - "$ref": "#/definitions/pizzahut.Address" + "statcast_sprint_speed_seasons": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "archived": { - "example": false, - "type": "boolean" + "statcast_sprint_speed_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "delivery_providers": { + "statcast_sprint_speed_sort_fields": { "items": { - "$ref": "#/definitions/pizzahut.DeliveryProvider" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "name": { - "example": "040937", - "type": "string" + "statcast_sprint_speed_team_abbreviations": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "store_number": { - "example": "040937", - "type": "string" + "statcast_sprint_speed_team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "timezone": { - "example": "America/New_York", - "type": "string" - } - }, - "type": "object" - }, - "pizzahut.StoreResponse": { - "properties": { - "accepting_online_orders": { - "example": true, - "type": "boolean" + "statcast_sprint_speed_team_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "address": { - "$ref": "#/definitions/pizzahut.Address" + "statcast_swing_path_game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "archived": { - "example": false, - "type": "boolean" + "statcast_swing_path_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "delivery_providers": { + "statcast_swing_path_types": { "items": { - "$ref": "#/definitions/pizzahut.DeliveryProvider" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "fetched_at": { - "type": "string" + "statcast_swing_timing_flags": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "hours": { - "description": "Hours is this restaurant's recurring open windows per order channel\n(occasion) -- CARRYOUT, DELIVERY, DINE_IN, DRIVE_THRU,\nCATERING_CARRYOUT -- plus each occasion's ordering constraints\n(minimum/maximum order amount, whether tipping is offered, accepted\npayment methods; see OccasionHours). A restaurant that does not offer\na given occasion at all omits it from this list. Every real store\nsampled during this family's builds only offers CARRYOUT and\nDELIVERY; DINE_IN/DRIVE_THRU/CATERING_CARRYOUT are schema-valid but\nhave not been observed live.", + "statcast_swing_timing_game_types": { "items": { - "$ref": "#/definitions/pizzahut.OccasionHours" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "name": { - "example": "040937", - "type": "string" + "statcast_swing_timing_groups_x": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "source_url": { - "type": "string" + "statcast_swing_timing_groups_y": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "store_number": { - "example": "040937", - "type": "string" + "statcast_swing_timing_groups_z": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "timezone": { - "example": "America/New_York", - "type": "string" - } - }, - "type": "object" - }, - "pizzahut.StoresResponse": { - "properties": { - "count": { - "example": 5, - "type": "integer" + "statcast_swing_timing_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "fetched_at": { - "type": "string" + "statcast_swing_timing_sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "has_more": { - "example": false, - "type": "boolean" + "statcast_swing_timing_splits": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "source_url": { - "type": "string" + "statcast_swing_timing_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "stores": { + "statcast_top_performers_years": { "items": { - "$ref": "#/definitions/pizzahut.Store" + "type": "integer" }, "type": "array" }, - "total_count": { - "description": "TotalCount is how many restaurants matched upstream; it can exceed\nCount when more results exist than max_results asked for.", - "example": 9, - "type": "integer" - } - }, - "type": "object" - }, - "pizzahut.TimeWindow": { - "properties": { - "blackout": { - "example": false, - "type": "boolean" + "statcast_year_to_year_comparison_years": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "days": { - "example": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7 - ], + "statcast_year_to_year_groups": { "items": { - "type": "integer" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "duration": { - "example": "16:00:00", - "type": "string" + "statcast_year_to_year_sort_directions": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "start_time": { - "example": "11:00:00", - "type": "string" + "statcast_year_to_year_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" } }, "type": "object" }, - "pizzahut.bundleChoicesResponseDoc": { + "mlb.NamedRef": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "id": { + "description": "MLB id of the player or league.", "type": "integer" }, - "data": { - "$ref": "#/definitions/pizzahut.BundleChoicesResponse" - }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "name": { + "description": "Name of the player or league.", + "type": "string" } }, "type": "object" }, - "pizzahut.deliveryEstimateResponseDoc": { + "mlb.NavigationItem": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "children": { + "items": { + "$ref": "#/definitions/mlb.NavigationItem" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/pizzahut.DeliveryEstimateResponse" + "label": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "url": { + "type": "string" + }, + "visible": { + "type": "boolean" } }, "type": "object" }, - "pizzahut.menuResponseDoc": { + "mlb.Play": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "at_bat_index": { "type": "integer" }, - "data": { - "$ref": "#/definitions/pizzahut.MenuResponse" + "batter": { + "$ref": "#/definitions/mlb.NamedRef" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "pizzahut.modifiersResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "description": { + "type": "string" + }, + "event": { + "type": "string" + }, + "event_type": { + "type": "string" + }, + "events": { + "items": { + "$ref": "#/definitions/mlb.PlayEvent" + }, + "type": "array" + }, + "half_inning": { + "type": "string" + }, + "inning": { "type": "integer" }, - "data": { - "$ref": "#/definitions/pizzahut.ModifiersResponse" + "is_complete": { + "type": "boolean" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "pitcher": { + "$ref": "#/definitions/mlb.NamedRef" } }, "type": "object" }, - "pizzahut.storeResponseDoc": { + "mlb.PlayByPlayResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "fetched_at": { + "type": "string" + }, + "game_id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/pizzahut.StoreResponse" + "plays": { + "items": { + "$ref": "#/definitions/mlb.Play" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "source_url": { + "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "pizzahut.storesResponseDoc": { + "mlb.PlayEvent": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "description": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "end_time": { + "type": "string" + }, + "index": { "type": "integer" }, - "data": { - "$ref": "#/definitions/pizzahut.StoresResponse" + "is_pitch": { + "type": "boolean" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "pitch_data": { + "additionalProperties": {}, + "type": "object" + }, + "pitch_number": { + "type": "integer" + }, + "start_time": { + "type": "string" + }, + "type": { + "type": "string" } }, "type": "object" }, - "playstation.AddOn": { + "mlb.Player": { "properties": { - "classification": { - "description": "Store classification of the add-on, for example `ADD_ON_PACK`.", + "active": { + "type": "boolean" + }, + "bat_side": { "type": "string" }, - "name": { - "description": "Add-on name as shown on the PlayStation Store.", + "birth_city": { "type": "string" }, - "price": { - "allOf": [ - { - "$ref": "#/definitions/playstation.DetailPrice" - } - ], - "description": "Purchase price of the add-on." + "birth_country": { + "type": "string" }, - "product_id": { - "description": "PlayStation Store product id of the add-on. Use it with the product endpoint.", + "birth_date": { + "type": "string" + }, + "current_age": { + "type": "integer" + }, + "current_team": { + "$ref": "#/definitions/mlb.TeamRef" + }, + "full_name": { + "type": "string" + }, + "height": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "mlb_debut_date": { + "type": "string" + }, + "pitch_hand": { + "type": "string" + }, + "position": { + "type": "string" + }, + "position_code": { + "type": "string" + }, + "primary_number": { "type": "string" + }, + "weight": { + "type": "integer" } }, "type": "object" }, - "playstation.CollectionLink": { + "mlb.PlayerResponse": { "properties": { - "category_id": { + "fetched_at": { "type": "string" }, - "link_type": { - "type": "string" + "player": { + "$ref": "#/definitions/mlb.Player" }, - "name": { + "source_url": { "type": "string" } }, "type": "object" }, - "playstation.ConceptDetail": { + "mlb.PlayerSuggestion": { "properties": { - "add_ons": { - "description": "Downloadable add-ons, such as expansions or in-game currency, sold for the title.", - "items": { - "$ref": "#/definitions/playstation.AddOn" - }, - "type": "array" - }, - "content_rating": { - "allOf": [ - { - "$ref": "#/definitions/playstation.ContentRating" - } - ], - "description": "Age rating of the title." + "active": { + "type": "boolean" }, - "default_product_id": { - "description": "Product id of the title's default edition. Use it with the product endpoint.", + "boxscore_name": { "type": "string" }, - "description": { - "description": "Long description of the title from its PlayStation Store page.", + "display_name": { "type": "string" }, - "editions": { - "description": "Purchasable game editions and bundles of the title.", - "items": { - "$ref": "#/definitions/playstation.Edition" - }, - "type": "array" - }, - "genres": { - "description": "Genre names the title is filed under.", + "headshots": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.ImageRef" }, "type": "array" }, "id": { - "description": "PlayStation Store concept id, which groups every edition and add-on of a title.", - "type": "string" - }, - "invariant_name": { - "description": "Language-independent name of the title.", - "type": "string" - }, - "media": { - "description": "Images and videos shown on the title's store page.", - "items": { - "$ref": "#/definitions/playstation.Media" - }, - "type": "array" + "type": "integer" }, "name": { - "description": "Title name as shown on the PlayStation Store.", "type": "string" }, - "platforms": { - "description": "PlayStation platforms the title is available on, for example `PS4` or `PS5`.", - "items": { - "type": "string" - }, - "type": "array" - }, - "price": { - "allOf": [ - { - "$ref": "#/definitions/playstation.DetailPrice" - } - ], - "description": "Purchase price of the title's default edition." + "team_id": { + "type": "integer" }, - "publisher": { - "description": "Publisher of the title.", + "team_tri_code": { "type": "string" }, - "release_date": { - "description": "Release date of the title, in ISO 8601.", + "use_last_name": { "type": "string" }, - "source_url": { - "description": "PlayStation Store page the data was read from.", + "use_name": { "type": "string" - }, - "star_rating": { - "allOf": [ - { - "$ref": "#/definitions/playstation.StarRating" - } - ], - "description": "Aggregate user rating of the title." } }, "type": "object" }, - "playstation.ConceptReview": { + "mlb.ProspectRanking": { "properties": { - "author": { - "$ref": "#/definitions/playstation.ReviewAuthor" - }, - "comment": { + "affiliate": { "type": "string" }, - "edition_name": { - "type": "string" + "affiliate_id": { + "type": "integer" }, - "helpful_count": { + "age": { "type": "integer" }, - "id": { + "bats": { "type": "string" }, - "is_spoiler": { - "type": "boolean" + "birth_city": { + "type": "string" }, - "last_updated": { + "birth_country": { "type": "string" }, - "product_name": { + "birth_date": { "type": "string" }, - "rating": { + "college": { + "type": "string" + }, + "draft_pick": { "type": "integer" }, - "title": { + "draft_round": { "type": "string" - } - }, - "type": "object" - }, - "playstation.ConceptReviewsResponse": { - "properties": { - "concept_id": { + }, + "draft_year": { + "type": "integer" + }, + "eta": { "type": "string" }, - "has_next_page": { - "type": "boolean" + "headshot_url": { + "type": "string" }, - "name": { + "height": { "type": "string" }, - "page": { - "type": "integer" + "level": { + "type": "string" }, - "page_size": { - "type": "integer" + "name": { + "type": "string" }, - "rating": { + "player_id": { "type": "integer" }, - "returned": { + "position": { + "type": "string" + }, + "rank": { "type": "integer" }, - "reviews": { - "items": { - "$ref": "#/definitions/playstation.ConceptReview" - }, - "type": "array" + "school": { + "type": "string" }, - "sort": { + "slug": { "type": "string" }, - "source_url": { + "team": { "type": "string" }, - "star_rating": { - "$ref": "#/definitions/playstation.StarRating" + "team_id": { + "type": "integer" }, - "total_count": { + "throws": { + "type": "string" + }, + "weight": { "type": "integer" } }, "type": "object" }, - "playstation.ContentRating": { + "mlb.ProspectRankingsResponse": { "properties": { - "authority": { - "description": "Rating board that issued the rating, for example `ESRB`.", - "type": "string" + "count": { + "type": "integer" }, - "description": { - "description": "Rating label in plain words, for example `ESRB Mature 17+`.", + "fetched_at": { "type": "string" }, - "descriptors": { - "description": "Descriptors are the human-readable content/interactivity disclosures the\nrating carries (e.g. \"Blood\", \"Violence\", \"In-Game Purchases\", \"Users\nInteract\"), merged from the store's descriptors + interactiveElements lists.", + "limit": { + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "players": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.ProspectRanking" }, "type": "array" }, - "name": { - "description": "Rating identifier as the store gives it, for example `ESRB_MATURE_17`.", + "position": { "type": "string" }, - "url": { - "description": "URL of the rating board's page for this rating.", + "query": { "type": "string" + }, + "sort": { + "type": "string" + }, + "sort_dir": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "team_slug": { + "type": "string" + }, + "total": { + "type": "integer" + }, + "view": { + "type": "string" + }, + "year": { + "type": "integer" } }, "type": "object" }, - "playstation.DetailPrice": { + "mlb.ProspectStat": { "properties": { - "applicability": { - "description": "How the price applies, for example `OUTRIGHT` for a one-time purchase.", - "type": "string" + "age": { + "type": "integer" }, - "base_price": { - "description": "Regular price as a formatted string, for example `$59.99`.", + "average": { "type": "string" }, - "base_price_value": { - "description": "Regular price in the smallest currency unit, for example cents for USD.", + "batting_stats": { + "additionalProperties": {}, + "type": "object" + }, + "blown_saves": { "type": "integer" }, - "currency_code": { - "description": "Currency code of the price, for example `USD`.", + "era": { "type": "string" }, - "discount_text": { - "description": "Discount label shown on the store, for example `-67%`.", - "type": "string" + "holds": { + "type": "integer" }, - "discounted_price": { - "description": "Current price after discount as a formatted string.", + "losses": { + "type": "integer" + }, + "name": { "type": "string" }, - "discounted_value": { - "description": "Current price after discount in the smallest currency unit, for example cents for USD.", + "pitching_stats": { + "additionalProperties": {}, + "type": "object" + }, + "player_id": { "type": "integer" }, - "end_time": { - "description": "Time the offer ends, as the store gives it.", + "position": { "type": "string" }, - "is_exclusive": { - "description": "Whether the store marks the price as exclusive to a membership.", - "type": "boolean" + "rank": { + "type": "integer" }, - "is_free": { - "description": "Whether the item is free.", - "type": "boolean" + "saves": { + "type": "integer" }, - "is_tied_to_subscription": { - "description": "Whether the store marks the price as tied to a subscription.", - "type": "boolean" + "slug": { + "type": "string" }, - "service_branding": { - "description": "Names of the PlayStation services the price is tied to.", - "items": { - "type": "string" - }, - "type": "array" + "team": { + "type": "string" }, - "upsell_text": { - "description": "Promotional text the store shows next to the price.", + "team_id": { + "type": "integer" + }, + "team_level": { "type": "string" + }, + "wins": { + "type": "integer" } }, "type": "object" }, - "playstation.Edition": { + "mlb.ProspectStatsResponse": { "properties": { - "classification": { - "description": "Store classification of the edition, for example `FULL_GAME`.", + "count": { + "type": "integer" + }, + "date_range": { "type": "string" }, - "name": { - "description": "Edition name as shown on the PlayStation Store.", + "fetched_at": { "type": "string" }, - "platforms": { - "description": "PlayStation platforms the edition is available on.", + "limit": { + "type": "integer" + }, + "list_type": { + "type": "string" + }, + "min_pa": { + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "player_type": { + "type": "string" + }, + "players": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.ProspectStat" }, "type": "array" }, - "price": { - "allOf": [ - { - "$ref": "#/definitions/playstation.DetailPrice" - } - ], - "description": "Purchase price of the edition." + "position": { + "type": "string" }, - "product_id": { - "description": "PlayStation Store product id of the edition. Use it with the product endpoint.", + "query": { + "type": "string" + }, + "source_url": { "type": "string" + }, + "team_id": { + "type": "integer" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "playstation.Facet": { + "mlb.Record": { "properties": { - "display_name": { - "description": "Filter name as shown on the store, for example `Price`.", - "type": "string" + "losses": { + "type": "integer" }, - "name": { - "description": "Filter key, for example `webBasePrice`.", + "pct": { "type": "string" }, - "values": { - "description": "Selectable values of the filter.", - "items": { - "$ref": "#/definitions/playstation.FacetValue" - }, - "type": "array" + "wins": { + "type": "integer" } }, "type": "object" }, - "playstation.FacetValue": { + "mlb.RosterPlayer": { "properties": { - "count": { - "description": "Number of items matching this filter value.", - "type": "integer" + "jersey_number": { + "type": "string" }, - "display_name": { - "description": "Filter value as shown on the store, for example `Free`.", + "person": { + "$ref": "#/definitions/mlb.NamedRef" + }, + "position": { "type": "string" }, - "key": { - "description": "Value to select this filter option, for example `0-0`.", + "position_code": { + "type": "string" + }, + "status": { "type": "string" } }, "type": "object" }, - "playstation.GridResponse": { + "mlb.RosterResponse": { "properties": { "count": { - "description": "Number of items returned on this page.", "type": "integer" }, - "facets": { - "description": "Filters available for the grid, each with its values and counts.", - "items": { - "$ref": "#/definitions/playstation.Facet" - }, - "type": "array" - }, - "id": { - "description": "PlayStation Store category id of the grid.", + "fetched_at": { "type": "string" }, - "items": { - "description": "Items on this page of the grid.", + "players": { "items": { - "$ref": "#/definitions/playstation.StoreItem" + "$ref": "#/definitions/mlb.RosterPlayer" }, "type": "array" }, - "name": { - "description": "Category name as shown on the store, for example `All games`.", + "roster_type": { "type": "string" }, - "next_page": { - "description": "Number of the next page. Omitted on the last page.", + "season": { "type": "integer" }, - "page_info": { - "allOf": [ - { - "$ref": "#/definitions/playstation.PageInfo" - } - ], - "description": "Pagination details of the grid." - }, "source_url": { - "description": "PlayStation Store page the data was read from.", "type": "string" + }, + "team_id": { + "type": "integer" } }, "type": "object" }, - "playstation.ListPrice": { + "mlb.ScheduleResponse": { "properties": { - "base_price": { - "description": "Regular price as a formatted string, for example `$19.99`.", + "date": { "type": "string" }, - "discount_text": { - "description": "Discount label shown on the store, for example `-50%`.", + "end_date": { "type": "string" }, - "discounted_price": { - "description": "Current price after discount as a formatted string.", + "fetched_at": { "type": "string" }, - "is_exclusive": { - "description": "Whether the store marks the price as exclusive to a membership.", - "type": "boolean" - }, - "is_free": { - "description": "Whether the item is free.", - "type": "boolean" - }, - "is_tied_to_subscription": { - "description": "Whether the store marks the price as tied to a subscription.", - "type": "boolean" - }, - "service_branding": { - "description": "Names of the PlayStation services the price is tied to.", + "games": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.GameSummary" }, "type": "array" }, - "upsell_service_branding": { - "description": "Names of the PlayStation services the upsell offer refers to.", - "items": { - "type": "string" - }, - "type": "array" + "source_url": { + "type": "string" }, - "upsell_text": { - "description": "Promotional text the store shows next to the price.", + "start_date": { "type": "string" + }, + "team_id": { + "type": "integer" + }, + "total_games": { + "type": "integer" } }, "type": "object" }, - "playstation.Media": { + "mlb.SearchResponse": { "properties": { - "role": { - "description": "Role of the asset on the store page, as the store labels it.", + "fetched_at": { "type": "string" }, - "type": { - "description": "Kind of asset, such as an image or a video.", - "type": "string" + "players": { + "items": { + "$ref": "#/definitions/mlb.PlayerSuggestion" + }, + "type": "array" }, - "url": { - "description": "URL of the image or video.", + "query": { "type": "string" - } - }, - "type": "object" - }, - "playstation.MerchResponse": { - "properties": { - "collections": { + }, + "search_terms": { "items": { - "$ref": "#/definitions/playstation.CollectionLink" + "$ref": "#/definitions/mlb.TermSuggestion" }, "type": "array" }, - "count": { - "type": "integer" + "source_url": { + "type": "string" }, - "items": { + "teams": { "items": { - "$ref": "#/definitions/playstation.StoreItem" + "$ref": "#/definitions/mlb.TeamSuggestion" }, "type": "array" }, - "sections": { + "topics": { "items": { - "$ref": "#/definitions/playstation.Section" + "$ref": "#/definitions/mlb.TopicSuggestion" }, "type": "array" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "playstation.PageInfo": { + "mlb.StandingsGroup": { "properties": { - "is_last": { - "description": "Whether this is the last page of results.", - "type": "boolean" + "division": { + "$ref": "#/definitions/mlb.NamedRef" }, - "offset": { - "description": "Position of the first item on this page within all results.", - "type": "integer" + "league": { + "$ref": "#/definitions/mlb.NamedRef" }, - "size": { - "description": "Number of items per page.", - "type": "integer" + "teams": { + "items": { + "$ref": "#/definitions/mlb.StandingsTeam" + }, + "type": "array" }, - "total_count": { - "description": "Total number of results across all pages.", - "type": "integer" + "type": { + "type": "string" } }, "type": "object" }, - "playstation.ProductDetail": { + "mlb.StandingsResponse": { "properties": { - "classification": { - "type": "string" - }, - "concept_id": { + "date": { "type": "string" }, - "content_rating": { - "$ref": "#/definitions/playstation.ContentRating" - }, - "edition_name": { + "fetched_at": { "type": "string" }, - "genres": { + "groups": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.StandingsGroup" }, "type": "array" }, - "id": { - "type": "string" - }, - "media": { - "items": { - "$ref": "#/definitions/playstation.Media" - }, - "type": "array" + "season": { + "type": "integer" }, - "name": { + "source_url": { "type": "string" }, - "np_title_id": { + "type": { "type": "string" + } + }, + "type": "object" + }, + "mlb.StandingsTeam": { + "properties": { + "away_record": { + "$ref": "#/definitions/mlb.Record" }, - "platforms": { - "items": { - "type": "string" - }, - "type": "array" + "clinched": { + "type": "boolean" }, - "price": { - "$ref": "#/definitions/playstation.DetailPrice" + "division_leader": { + "type": "boolean" }, - "publisher": { + "division_rank": { "type": "string" }, - "release_date": { + "elimination_number": { "type": "string" }, - "screen_languages": { - "items": { - "type": "string" - }, - "type": "array" + "expected_record": { + "$ref": "#/definitions/mlb.Record" }, - "source_url": { + "games_back": { "type": "string" }, - "spoken_languages": { - "items": { - "type": "string" - }, - "type": "array" + "games_played": { + "type": "integer" }, - "star_rating": { - "$ref": "#/definitions/playstation.StarRating" + "home_record": { + "$ref": "#/definitions/mlb.Record" }, - "type": { + "last_ten_record": { + "$ref": "#/definitions/mlb.Record" + }, + "league_rank": { "type": "string" - } - }, - "type": "object" - }, - "playstation.ReviewAuthor": { - "properties": { - "avatar_url": { + }, + "losses": { + "type": "integer" + }, + "magic_number": { "type": "string" }, - "is_officially_verified": { - "type": "boolean" + "run_differential": { + "type": "integer" }, - "is_ps_plus_subscriber": { - "type": "boolean" + "runs_allowed": { + "type": "integer" }, - "online_id": { + "runs_scored": { + "type": "integer" + }, + "streak": { + "type": "string" + }, + "team": { + "$ref": "#/definitions/mlb.TeamRef" + }, + "wild_card_games_back": { "type": "string" + }, + "winning_percentage": { + "type": "string" + }, + "wins": { + "type": "integer" } }, "type": "object" }, - "playstation.SearchResponse": { + "mlb.StatSplit": { "properties": { - "count": { - "description": "Number of items returned on this page.", - "type": "integer" - }, - "items": { - "description": "Search results on this page.", - "items": { - "$ref": "#/definitions/playstation.StoreItem" - }, - "type": "array" - }, - "next_page": { - "description": "Number of the next page. Omitted on the last page.", - "type": "integer" + "league": { + "allOf": [ + { + "$ref": "#/definitions/mlb.NamedRef" + } + ], + "description": "League the row belongs to. Omitted when MLB gives none." }, - "page_info": { + "player": { "allOf": [ { - "$ref": "#/definitions/playstation.PageInfo" + "$ref": "#/definitions/mlb.NamedRef" } ], - "description": "Pagination details of the results." + "description": "Player the row belongs to. Omitted when MLB gives none." }, - "source_url": { - "description": "PlayStation Store page the data was read from.", + "position": { + "description": "Position name as MLB lists it. Omitted when MLB gives none.", "type": "string" }, - "term": { - "description": "Search term that was run.", + "rank": { + "description": "Position of the row in the ranking. Omitted when the table is not ranked.", + "type": "integer" + }, + "season": { + "description": "Season the row covers, as a year. Omitted for rows that are not tied to one season.", "type": "string" + }, + "stats": { + "additionalProperties": {}, + "description": "Statistics for the row, as named values such as `homeRuns`. The set of stats depends on `group` and `type`.", + "type": "object" + }, + "team": { + "allOf": [ + { + "$ref": "#/definitions/mlb.TeamRef" + } + ], + "description": "Team the row belongs to. Omitted when MLB gives none." } }, "type": "object" }, - "playstation.Section": { + "mlb.StatcastABSChallengeFilters": { "properties": { - "count": { - "type": "integer" + "ball_strike": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "id": { - "type": "string" + "breakeven": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "items": { + "challenge_types": { "items": { - "$ref": "#/definitions/playstation.StoreItem" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "playstation.StarRating": { - "properties": { - "average": { - "description": "Average user rating out of 5.", - "type": "number" + "data_counts": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "count": { - "description": "Number of user ratings.", - "type": "integer" + "data_modes": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "distribution": { - "description": "Share of ratings at each star value, from 1 to 5.", + "game_types": { "items": { - "$ref": "#/definitions/playstation.StarRatingCount" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" - } - }, - "type": "object" - }, - "playstation.StarRatingCount": { - "properties": { - "percent": { - "description": "Percentage of ratings that gave this star value.", - "type": "integer" }, - "stars": { - "description": "Star value, from 1 to 5.", - "type": "integer" + "levels": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" + }, + "leverage": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" + }, + "minimum_challenges": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" + }, + "pitch_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" + }, + "seasons": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" + }, + "shadow_zones": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" + }, + "split_year": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" + }, + "splits": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" + }, + "team_ids": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" } }, "type": "object" }, - "playstation.StoreItem": { + "mlb.StatcastABSChallengesOption": { "properties": { - "classification": { - "description": "Store classification of the item, for example `FULL_GAME`.", - "type": "string" - }, - "id": { - "description": "PlayStation Store id of the item. Use it with the concept endpoint when `kind` is `concept`, or with the product endpoint when it is `product`.", + "ball_strike": { "type": "string" }, - "kind": { - "description": "Type of store entry: `concept` or `product`.", + "breakeven": { "type": "string" }, - "media": { - "description": "Images and videos for the item.", + "challenge_team_ids": { "items": { - "$ref": "#/definitions/playstation.Media" + "type": "string" }, "type": "array" }, - "name": { - "description": "Item name as shown on the PlayStation Store.", + "challenge_type": { "type": "string" }, - "np_title_id": { - "description": "PlayStation title id of the item, for example `CUSA07408_00`.", + "data_count": { "type": "string" }, - "platforms": { - "description": "PlayStation platforms the item is available on.", + "data_mode": { + "type": "string" + }, + "game_types": { "items": { "type": "string" }, "type": "array" }, - "price": { - "allOf": [ - { - "$ref": "#/definitions/playstation.ListPrice" - } - ], - "description": "Price of the item." - } - }, - "type": "object" - }, - "playstation.SuggestItem": { - "properties": { - "classification": { + "level": { "type": "string" }, - "id": { + "leverage": { "type": "string" }, - "image": { - "$ref": "#/definitions/playstation.Media" + "min_challenges": { + "type": "string" }, - "name": { + "min_opponent_challenges": { "type": "string" }, - "platforms": { + "opponent_team_ids": { "items": { "type": "string" }, "type": "array" }, - "price": { - "$ref": "#/definitions/playstation.SuggestPrice" + "pitch_types": { + "items": { + "type": "string" + }, + "type": "array" }, - "publisher": { - "type": "string" + "seasons": { + "items": { + "type": "string" + }, + "type": "array" }, - "release_date": { - "type": "string" + "shadow_zones": { + "items": { + "type": "string" + }, + "type": "array" }, - "short_name": { + "split_year": { "type": "string" }, - "store_url": { - "type": "string" + "splits": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "playstation.SuggestPrice": { + "mlb.StatcastABSChallengesResponse": { "properties": { - "display": { + "board": { "type": "string" }, - "value": { - "type": "integer" - } - }, - "type": "object" - }, - "playstation.SuggestResponse": { - "properties": { - "cc": { + "fetched_at": { "type": "string" }, - "items": { + "filters": { + "$ref": "#/definitions/mlb.StatcastABSChallengesOption" + }, + "rows": { "items": { - "$ref": "#/definitions/playstation.SuggestItem" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "l": { - "type": "string" - }, "source_url": { "type": "string" }, - "term": { - "type": "string" - }, "total": { "type": "integer" } }, "type": "object" }, - "playstation.conceptResponseDoc": { + "mlb.StatcastArmStrengthPlayerResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "fetched_at": { + "type": "string" }, - "data": { - "$ref": "#/definitions/playstation.ConceptDetail" + "player_id": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" - } - }, - "type": "object" - }, - "playstation.conceptReviewsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/playstation.ConceptReviewsResponse" + "throws": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "playstation.gridResponseDoc": { - "properties": { - "code": { - "example": 200, + "total": { "type": "integer" }, - "data": { - "$ref": "#/definitions/playstation.GridResponse" - }, - "msg": { - "example": "OK", + "year": { "type": "string" } }, "type": "object" }, - "playstation.merchResponseDoc": { + "mlb.StatcastArmStrengthResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "board": { + "type": "string" }, - "data": { - "$ref": "#/definitions/playstation.MerchResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "limit": { + "type": "integer" + }, + "min_throws": { "type": "string" - } - }, - "type": "object" - }, - "playstation.productResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "offset": { "type": "integer" }, - "data": { - "$ref": "#/definitions/playstation.ProductDetail" + "position": { + "type": "string" }, - "msg": { - "example": "OK", + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "sort": { "type": "string" - } - }, - "type": "object" - }, - "playstation.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/playstation.SearchResponse" + "sort_dir": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" - } - }, - "type": "object" - }, - "playstation.suggestResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "team_id": { + "type": "string" + }, + "total": { "type": "integer" }, - "data": { - "$ref": "#/definitions/playstation.SuggestResponse" + "type": { + "type": "string" }, - "msg": { - "example": "OK", + "year": { "type": "string" } }, "type": "object" }, - "politico.ArticleResponse": { + "mlb.StatcastArmValueDetailsResponse": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { + "entity_id": { "type": "string" }, - "image_url": { + "fetched_at": { "type": "string" }, - "paragraphs": { + "plays": { "items": { - "type": "string" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "published_at": { - "type": "string" - }, - "title": { + "source_url": { "type": "string" }, - "updated_at": { - "type": "string" + "total": { + "type": "integer" }, - "url": { + "type": { "type": "string" } }, "type": "object" }, - "politico.AuthorArticle": { + "mlb.StatcastArmValueResponse": { "properties": { - "published_at": { + "board": { "type": "string" }, - "title": { + "end_year": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "url": { + "game_type": { "type": "string" - } - }, - "type": "object" - }, - "politico.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/politico.AuthorArticle" - }, - "type": "array" }, - "bio": { + "key_base_out": { "type": "string" }, - "image_url": { + "limit": { + "type": "integer" + }, + "minimum_opps": { "type": "string" }, - "job_title": { + "offset": { + "type": "integer" + }, + "q": { "type": "string" }, - "name": { + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "sort": { "type": "string" }, - "slug": { + "sort_dir": { "type": "string" }, - "url": { + "source_url": { "type": "string" - } - }, - "type": "object" - }, - "politico.CategoriesResponse": { - "properties": { - "groups": { - "items": { - "$ref": "#/definitions/politico.CategoryGroup" - }, - "type": "array" - } - }, - "type": "object" - }, - "politico.Category": { - "properties": { - "name": { + }, + "split": { "type": "string" }, - "slug": { + "start_year": { + "type": "integer" + }, + "team_id": { "type": "string" + }, + "total": { + "type": "integer" + }, + "type": { + "type": "string" + }, + "with_team_only": { + "type": "boolean" } }, "type": "object" }, - "politico.CategoryGroup": { + "mlb.StatcastBaserunningFilters": { "properties": { - "name": { - "type": "string" + "boards": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "sections": { + "game_types": { "items": { - "$ref": "#/definitions/politico.Category" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" - } - }, - "type": "object" - }, - "politico.HeadlineItem": { - "properties": { - "author": { - "type": "string" }, - "published_at": { - "type": "string" + "groups": { + "additionalProperties": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" + }, + "type": "object" }, - "summary": { - "type": "string" + "key_base_outs": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "title": { - "type": "string" + "minimums": { + "additionalProperties": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" + }, + "type": "object" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "politico.HeadlinesResponse": { - "properties": { - "items": { + "pitch_hands": { "items": { - "$ref": "#/definitions/politico.HeadlineItem" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" - } - }, - "type": "object" - }, - "politico.TopicItem": { - "properties": { - "authors": { + }, + "prior_pickoffs": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "published_at": { - "type": "string" + "runner_moved": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "title": { - "type": "string" + "seasons": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "politico.TopicResponse": { - "properties": { - "items": { + "sort_directions": { "items": { - "$ref": "#/definitions/politico.TopicItem" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "topic": { - "type": "string" + "sort_fields": { + "additionalProperties": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" + }, + "type": "object" + }, + "splits": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" + }, + "target_bases": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" + }, + "teams": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" } }, "type": "object" }, - "politico.articleResponseDoc": { + "mlb.StatcastBaserunningOption": { "properties": { - "code": { - "example": 200, - "type": "integer" + "board": { + "type": "string" }, - "data": { - "$ref": "#/definitions/politico.ArticleResponse" + "game_type": { + "type": "string" }, - "msg": { - "example": "OK", + "key_base_out": { "type": "string" - } - }, - "type": "object" - }, - "politico.authorResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/politico.AuthorResponse" + "limit": { + "type": "integer" }, - "msg": { - "example": "OK", + "n": { "type": "string" - } - }, - "type": "object" - }, - "politico.categoriesResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "offset": { "type": "integer" }, - "data": { - "$ref": "#/definitions/politico.CategoriesResponse" + "pitch_hand": { + "type": "string" }, - "msg": { - "example": "OK", + "prior_pk": { "type": "string" - } - }, - "type": "object" - }, - "politico.headlinesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/politico.HeadlinesResponse" + "runner_moved": { + "type": "string" }, - "msg": { - "example": "OK", + "search": { "type": "string" - } - }, - "type": "object" - }, - "politico.topicResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "season_end": { "type": "integer" }, - "data": { - "$ref": "#/definitions/politico.TopicResponse" + "season_start": { + "type": "integer" }, - "msg": { - "example": "OK", + "sort": { "type": "string" - } - }, - "type": "object" - }, - "polygon.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" }, - "biography": { + "sort_dir": { "type": "string" }, - "image_url": { + "split": { "type": "string" }, - "name": { + "target_base": { "type": "string" }, - "social_links": { - "items": { - "$ref": "#/definitions/polygon.AuthorSocialLink" - }, - "type": "array" - }, - "title": { + "team": { "type": "string" }, - "url": { + "type": { "type": "string" + }, + "with_team_only": { + "type": "boolean" } }, "type": "object" }, - "polygon.AuthorSocialLink": { + "mlb.StatcastBaserunningResponse": { "properties": { - "type": { + "board": { "type": "string" }, - "url": { + "fetched_at": { + "type": "string" + }, + "filters": { + "$ref": "#/definitions/mlb.StatcastBaserunningOption" + }, + "limit": { + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "source_url": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "polymarket.ActivityTradesResponse": { + "mlb.StatcastBoardResponse": { "properties": { - "event_id": { - "description": "Polymarket event id the trades were limited to.", - "example": "101772", + "board": { "type": "string" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T11:00:00Z", - "type": "string" + "end_year": { + "type": "integer" }, - "filter_amount": { - "description": "Minimum trade amount the filter applied.", - "example": "1", + "fetched_at": { "type": "string" }, "filter_type": { - "description": "Type of amount filter applied, for example `CASH`.", - "example": "CASH", "type": "string" }, + "league_average": { + "items": {}, + "type": "array" + }, "limit": { - "description": "Maximum number of trades requested.", - "example": 50, "type": "integer" }, - "market": { - "description": "Market condition id the trades were limited to.", - "example": "0x3f2604d62ac3ee496ffd6d30156f30663fbaf22097f17f09d7364c35db255d2b", + "minimum": { "type": "string" }, "offset": { - "description": "Number of trades skipped before this page.", - "example": 0, "type": "integer" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://data-api.polymarket.com/trades?takerOnly=true&limit=50&offset=0&filterType=CASH&filterAmount=1", + "position": { "type": "string" }, - "taker_only": { - "description": "`true` when only taker trades are returned, `false` otherwise.", - "example": "true", + "range": { "type": "string" }, - "trades": { - "description": "Recent trades on this page, one item per trade.", + "roles": { "items": { - "$ref": "#/definitions/polymarket.TradeSummary" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "polymarket.BatchTokenMidpoint": { - "properties": { - "midpoint": { - "description": "Midpoint between the best bid and best ask for the token.", - "example": 0.285, - "type": "number" }, - "token_id": { - "description": "Token id of the outcome.", - "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", - "type": "string" - } - }, - "type": "object" - }, - "polymarket.BatchTokenMidpointsOption": { - "properties": { - "token_ids": { + "rows": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.StatcastRow" }, "type": "array" + }, + "sort": { + "type": "string" + }, + "sort_dir": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "split": { + "type": "string" + }, + "start_year": { + "type": "integer" + }, + "team_id": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "type": { + "type": "string" + }, + "year": { + "type": "integer" } }, - "required": [ - "token_ids" - ], "type": "object" }, - "polymarket.BatchTokenMidpointsResponse": { + "mlb.StatcastCatcherPopTimeResponse": { "properties": { + "board": { + "type": "string" + }, "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T11:00:00Z", "type": "string" }, - "midpoints": { - "description": "Midpoints for the requested tokens, one item per token found.", - "items": { - "$ref": "#/definitions/polymarket.BatchTokenMidpoint" - }, - "type": "array" + "limit": { + "type": "integer" }, - "missing": { - "description": "Requested token ids for which no midpoint was returned.", + "min_2b_attempts": { + "type": "string" + }, + "min_3b_attempts": { + "type": "string" + }, + "offset": { + "type": "integer" + }, + "rows": { "items": { - "type": "string" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, + "sort": { + "type": "string" + }, + "sort_dir": { + "type": "string" + }, "source_url": { - "description": "URL the data was read from.", - "example": "https://clob.polymarket.com/midpoints", "type": "string" }, - "token_ids": { - "description": "Token ids that were requested.", - "items": { - "type": "string" - }, - "type": "array" + "team_id": { + "type": "string" + }, + "total": { + "type": "integer" + }, + "year": { + "type": "string" } }, "type": "object" }, - "polymarket.BatchTokenOrderBooksOption": { + "mlb.StatcastCatcherStanceResponse": { "properties": { - "token_ids": { + "board": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "game_type": { + "type": "string" + }, + "group_by": { "items": { "type": "string" }, "type": "array" + }, + "limit": { + "type": "integer" + }, + "min_pitches": { + "type": "string" + }, + "min_results": { + "type": "string" + }, + "offset": { + "type": "integer" + }, + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "season_end": { + "type": "string" + }, + "season_start": { + "type": "string" + }, + "sort": { + "type": "string" + }, + "sort_dir": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "total": { + "type": "integer" + }, + "type": { + "type": "string" } }, - "required": [ - "token_ids" - ], "type": "object" }, - "polymarket.BatchTokenOrderBooksResponse": { + "mlb.StatcastCatcherThrowingDetailsResponse": { "properties": { - "books": { - "description": "Order books for the requested tokens, one item per token found.", - "items": { - "$ref": "#/definitions/polymarket.OrderBookSummary" - }, - "type": "array" + "entity_id": { + "type": "integer" }, "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T11:00:00Z", "type": "string" }, - "missing": { - "description": "Requested token ids for which no order book was returned.", + "limit": { + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "rows": { "items": { - "type": "string" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, "source_url": { - "description": "URL the data was read from.", - "example": "https://clob.polymarket.com/books", "type": "string" }, - "token_ids": { - "description": "Token ids that were requested.", - "items": { - "type": "string" - }, - "type": "array" + "total": { + "type": "integer" } }, "type": "object" }, - "polymarket.BatchTokenPrice": { + "mlb.StatcastCatcherThrowingResponse": { "properties": { - "buy_price": { - "example": 0.03, - "type": "number" + "board": { + "type": "string" }, - "sell_price": { - "example": 0.54, - "type": "number" + "fetched_at": { + "type": "string" }, - "token_id": { - "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", + "game_type": { "type": "string" - } - }, - "type": "object" - }, - "polymarket.BatchTokenPricesOption": { - "properties": { - "side": { + }, + "limit": { + "type": "integer" + }, + "minimum_attempts": { "type": "string" }, - "token_ids": { + "offset": { + "type": "integer" + }, + "rows": { "items": { - "type": "string" + "additionalProperties": {}, + "type": "object" }, "type": "array" + }, + "season_end": { + "type": "string" + }, + "season_start": { + "type": "string" + }, + "sort": { + "type": "string" + }, + "sort_dir": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "split": { + "type": "string" + }, + "target_base": { + "type": "string" + }, + "team": { + "type": "string" + }, + "total": { + "type": "integer" + }, + "type": { + "type": "string" + }, + "with_team_only": { + "type": "boolean" } }, - "required": [ - "token_ids" - ], "type": "object" }, - "polymarket.BatchTokenPricesResponse": { + "mlb.StatcastFieldingRunValueResponse": { "properties": { + "board": { + "type": "string" + }, + "date_end": { + "type": "string" + }, + "date_start": { + "type": "string" + }, "fetched_at": { - "example": "2026-06-07T11:00:00Z", "type": "string" }, - "missing": { + "game_type": { + "type": "string" + }, + "group_by": { "items": { "type": "string" }, "type": "array" }, - "prices": { + "limit": { + "type": "integer" + }, + "minimum": { + "type": "string" + }, + "minimum_split": { + "type": "string" + }, + "offset": { + "type": "integer" + }, + "position": { + "type": "string" + }, + "rows": { "items": { - "$ref": "#/definitions/polymarket.BatchTokenPrice" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "side": { - "example": "buy", + "season_end": { + "type": "string" + }, + "season_start": { + "type": "string" + }, + "sort": { + "type": "string" + }, + "sort_dir": { "type": "string" }, "source_url": { - "example": "https://clob.polymarket.com/prices", "type": "string" }, - "token_ids": { + "teams": { "items": { "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "polymarket.BatchTokenSpread": { - "properties": { - "spread": { - "description": "Spread between the best bid and best ask for the token.", - "example": 0.51, - "type": "number" }, - "token_id": { - "description": "Token id of the outcome.", - "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", + "total": { + "type": "integer" + }, + "type": { "type": "string" } }, "type": "object" }, - "polymarket.BatchTokenSpreadsOption": { + "mlb.StatcastFirstBaseReceivingDetailsResponse": { "properties": { - "token_ids": { + "fetched_at": { + "type": "string" + }, + "limit": { + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "player_id": { + "type": "integer" + }, + "rows": { "items": { - "type": "string" + "additionalProperties": {}, + "type": "object" }, "type": "array" + }, + "source_url": { + "type": "string" + }, + "total": { + "type": "integer" } }, - "required": [ - "token_ids" - ], "type": "object" }, - "polymarket.BatchTokenSpreadsResponse": { + "mlb.StatcastFirstBaseReceivingResponse": { "properties": { + "board": { + "type": "string" + }, "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T11:00:00Z", "type": "string" }, - "missing": { - "description": "Requested token ids for which no spread was returned.", + "game_types": { "items": { "type": "string" }, "type": "array" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://clob.polymarket.com/spreads", + "limit": { + "type": "integer" + }, + "minimum": { "type": "string" }, - "spreads": { - "description": "Spreads for the requested tokens, one item per token found.", + "minimum_split": { + "type": "string" + }, + "offset": { + "type": "integer" + }, + "rows": { "items": { - "$ref": "#/definitions/polymarket.BatchTokenSpread" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "token_ids": { - "description": "Token ids that were requested.", + "seasons": { "items": { "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "polymarket.ClobMarketResponse": { - "properties": { - "condition_id": { - "description": "Condition id of the market that was requested.", - "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", - "type": "string" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T11:00:00Z", + "sort": { "type": "string" }, - "market": { - "allOf": [ - { - "$ref": "#/definitions/polymarket.ClobMarketSummary" - } - ], - "description": "Order-book trading details of the market." + "sort_direction": { + "type": "string" }, "source_url": { - "description": "URL the data was read from.", - "example": "https://clob.polymarket.com/markets/0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", + "type": "string" + }, + "split_year": { + "type": "string" + }, + "splits": { + "items": { + "type": "string" + }, + "type": "array" + }, + "total": { + "type": "integer" + }, + "type": { "type": "string" } }, "type": "object" }, - "polymarket.ClobMarketSummary": { + "mlb.StatcastPercentileFilter": { "properties": { - "accepting_order_timestamp": { - "description": "Timestamp from which the market accepts orders.", + "comparator": { "type": "string" }, - "accepting_orders": { - "description": "`true` when the market currently accepts orders.", - "type": "boolean" - }, - "active": { - "description": "`true` when the market is active.", - "type": "boolean" - }, - "archived": { - "description": "`true` when the market is archived.", - "type": "boolean" - }, - "closed": { - "description": "`true` when the market is closed.", - "type": "boolean" - }, - "condition_id": { - "description": "Condition id that identifies the market on Polymarket.", - "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", + "field": { "type": "string" }, - "description": { - "description": "Market description, including its resolution rules as Polymarket shows them.", + "value": { + "type": "number" + } + }, + "type": "object" + }, + "mlb.StatcastPlayerDetailsResponse": { + "properties": { + "fetched_at": { "type": "string" }, - "enable_order_book": { - "description": "`true` when the order book is enabled for the market.", - "type": "boolean" - }, - "end_date": { - "description": "Date and time the market is scheduled to end (ISO 8601).", - "example": "2026-06-08T00:00:00Z", + "player_id": { "type": "string" }, - "game_start_time": { - "description": "Start time of the game the market is about (ISO 8601). Omitted when not provided.", - "example": "2026-06-07T20:30:00Z", + "player_type": { "type": "string" }, - "icon_url": { - "description": "URL of the market's icon image.", - "type": "string" + "plays": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "image_url": { - "description": "URL of the market's main image.", + "source_url": { "type": "string" }, - "is_50_50_outcome": { - "description": "`true` when the market is flagged as resolving 50-50.", - "type": "boolean" - }, - "maker_base_fee": { - "description": "Base fee charged to makers on the market.", - "example": 1000, + "total": { "type": "integer" }, - "market_slug": { - "description": "URL slug of the market.", - "example": "codmw-par-tex-2026-06-07-game4", - "type": "string" - }, - "market_url": { - "description": "Link to the market on polymarket.com.", - "example": "https://polymarket.com/event/codmw-par-tex-2026-06-07/codmw-par-tex-2026-06-07-game4", + "year": { + "type": "integer" + } + }, + "type": "object" + }, + "mlb.StatcastResponse": { + "properties": { + "fetched_at": { "type": "string" }, - "minimum_order_size": { - "description": "Smallest order size the market accepts.", - "example": 5, - "type": "number" - }, - "minimum_tick_size": { - "description": "Smallest price increment the market accepts.", - "example": 0.01, - "type": "number" - }, - "neg_risk": { - "description": "`true` when the market is part of a negative-risk group of linked outcomes.", - "type": "boolean" + "limit": { + "type": "integer" }, - "neg_risk_market_id": { - "description": "Id of the negative-risk group the market belongs to.", + "min_bbe": { "type": "string" }, - "neg_risk_request_id": { - "description": "Request id of the negative-risk group the market belongs to.", + "offset": { + "type": "integer" + }, + "position": { "type": "string" }, - "notifications_enabled": { - "description": "`true` when notifications are enabled for the market.", - "type": "boolean" + "rows": { + "items": { + "$ref": "#/definitions/mlb.StatcastRow" + }, + "type": "array" }, - "question": { - "description": "Question the market asks.", - "example": "Call of Duty: Paris Gentle Mates vs OpTic Texas - Game 4 Winner", + "sort": { "type": "string" }, - "question_id": { - "description": "Id of the question the market resolves.", - "example": "0xf693b08c99a00ca87098bc122ccc956434c2ac8720d8ed77e612d008cf33c2c1", + "sort_dir": { "type": "string" }, - "rewards": { - "allOf": [ - { - "$ref": "#/definitions/polymarket.ClobRewardsSummary" - } - ], - "description": "Liquidity reward settings for the market." + "source_url": { + "type": "string" }, - "seconds_delay": { - "description": "Delay applied to orders on the market, in seconds.", - "example": 1, + "team_id": { "type": "integer" }, - "tags": { - "description": "Tag labels attached to the market.", - "items": { - "type": "string" - }, - "type": "array" - }, - "taker_base_fee": { - "description": "Base fee charged to takers on the market.", - "example": 1000, + "total": { "type": "integer" }, - "tokens": { - "description": "Outcome tokens of the market, one item per outcome.", - "items": { - "$ref": "#/definitions/polymarket.ClobTokenSummary" - }, - "type": "array" - } - }, - "type": "object" - }, - "polymarket.ClobRewardRate": { - "properties": { - "asset_address": { - "description": "Contract address of the token paid out as the reward.", - "example": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", + "type": { "type": "string" }, - "rewards_daily_rate": { - "description": "Reward amount paid per day in this asset.", - "example": 5, - "type": "number" + "year": { + "type": "integer" } }, "type": "object" }, - "polymarket.ClobRewardsSummary": { + "mlb.StatcastRollingGroup": { "properties": { - "max_spread": { - "description": "Maximum spread an order can have and still qualify for rewards.", - "example": 2.5, - "type": "number" + "limit": { + "type": "integer" }, - "min_size": { - "description": "Minimum order size that qualifies for rewards.", - "example": 500, - "type": "number" + "offset": { + "type": "integer" }, - "rates": { - "description": "Daily reward rates, one item per reward asset.", + "role": { + "type": "string" + }, + "rows": { "items": { - "$ref": "#/definitions/polymarket.ClobRewardRate" + "additionalProperties": {}, + "type": "object" }, "type": "array" + }, + "total": { + "type": "integer" + }, + "window_pa": { + "type": "integer" } }, "type": "object" }, - "polymarket.ClobTokenSummary": { + "mlb.StatcastRow": { "properties": { - "outcome": { - "description": "Name of the outcome the token represents.", - "example": "Paris Gentle Mates", + "entity_id": { "type": "string" }, - "price": { - "description": "Current price of the outcome token.", - "example": 0.285, - "type": "number" + "metrics": { + "additionalProperties": {}, + "type": "object" }, - "token_id": { - "description": "Token id of the outcome.", - "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", + "name": { "type": "string" }, - "winner": { - "description": "`true` when this outcome won the resolved market.", + "position": { + "type": "string" + }, + "qualified": { "type": "boolean" - } - }, - "type": "object" - }, - "polymarket.EventDetailResponse": { - "properties": { - "event": { - "allOf": [ - { - "$ref": "#/definitions/polymarket.EventSummary" - } - ], - "description": "Full details of the event." }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T11:00:00Z", - "type": "string" + "rank": { + "type": "integer" }, - "slug": { - "description": "URL slug of the event that was requested.", - "example": "world-cup-winner", + "team": { "type": "string" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://gamma-api.polymarket.com/events/slug/world-cup-winner", + "team_id": { "type": "string" } }, "type": "object" }, - "polymarket.EventSummary": { + "mlb.StatcastRunningGameDetailsOption": { "properties": { - "active": { - "description": "`true` when the event is active.", - "type": "boolean" + "entity_id": { + "type": "string" }, - "closed": { - "description": "`true` when the event is closed.", - "type": "boolean" + "game_type": { + "type": "string" }, - "comment_count": { - "description": "Number of comments on the event.", + "limit": { "type": "integer" }, - "description": { - "description": "Event description as shown on Polymarket.", - "type": "string" - }, - "end_date": { - "description": "Date and time the event is scheduled to end (ISO 8601).", + "min_pitches": { "type": "string" }, - "featured": { - "description": "`true` when Polymarket features the event.", - "type": "boolean" + "offset": { + "type": "integer" }, - "icon_url": { - "description": "URL of the event's icon image.", + "pitch_hand": { "type": "string" }, - "id": { - "description": "Polymarket event id.", - "example": "545095", + "prior_pk": { "type": "string" }, - "image_url": { - "description": "URL of the event's main image.", + "runner_moved": { "type": "string" }, - "liquidity": { - "description": "Liquidity Polymarket reports for the event.", - "type": "number" - }, - "markets": { - "description": "Markets inside the event, one item per market.", - "items": { - "$ref": "#/definitions/polymarket.MarketSummary" - }, - "type": "array" - }, - "markets_count": { - "description": "Number of markets inside the event.", - "example": 15, + "season_end": { "type": "integer" }, - "open_interest": { - "description": "Open interest Polymarket reports for the event.", - "type": "number" - }, - "restricted": { - "description": "`true` when Polymarket marks the event as restricted.", - "type": "boolean" - }, - "slug": { - "description": "URL slug of the event.", - "example": "bitcoin-above-on-june-7-2026", - "type": "string" + "season_start": { + "type": "integer" }, - "start_date": { - "description": "Date and time the event starts (ISO 8601).", + "split": { "type": "string" }, - "tags": { - "description": "Tags attached to the event, one item per tag.", - "items": { - "$ref": "#/definitions/polymarket.TagSummary" - }, - "type": "array" - }, - "title": { - "description": "Event title as shown on Polymarket.", - "example": "Bitcoin above ___ on June 7?", + "target_base": { "type": "string" }, - "updated_at": { - "description": "Time Polymarket last updated the event (ISO 8601).", + "team": { "type": "string" }, - "url": { - "description": "Link to the event on polymarket.com.", - "example": "https://polymarket.com/event/bitcoin-above-on-june-7-2026", + "type": { "type": "string" }, - "volume": { - "description": "Total trading volume of the event.", - "type": "number" - }, - "volume_24h": { - "description": "Trading volume of the event over the last 24 hours.", - "type": "number" + "with_team_only": { + "type": "boolean" } }, "type": "object" }, - "polymarket.EventsResponse": { + "mlb.StatcastRunningGameDetailsResponse": { "properties": { - "ascending": { - "description": "`true` when events are sorted in ascending order.", - "type": "boolean" - }, - "closed": { - "description": "Closed filter applied, `true` or `false`.", - "example": "false", + "board": { "type": "string" }, - "events": { - "description": "Events on this page, one item per event.", - "items": { - "$ref": "#/definitions/polymarket.EventSummary" - }, - "type": "array" + "entity_id": { + "type": "integer" }, "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T11:00:00Z", "type": "string" }, + "filters": { + "$ref": "#/definitions/mlb.StatcastRunningGameDetailsOption" + }, "limit": { - "description": "Maximum number of events requested.", - "example": 25, "type": "integer" }, "offset": { - "description": "Number of events skipped before this page.", - "example": 0, "type": "integer" }, - "order": { - "description": "Field the events are sorted by, for example `volume24hr`.", - "example": "volume24hr", - "type": "string" + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, "source_url": { - "description": "URL the data was read from.", - "example": "https://gamma-api.polymarket.com/events?limit=25", + "type": "string" + }, + "total": { + "type": "integer" + }, + "type": { "type": "string" } }, "type": "object" }, - "polymarket.HomepageFeedResponse": { + "mlb.StatcastRunningGameFilters": { "properties": { - "cursor": { - "description": "Cursor that was used to fetch this page.", - "type": "string" + "game_types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "events": { - "description": "Event rows in the feed, one item per event.", + "minimum_pitches": { "items": { - "$ref": "#/definitions/polymarket.EventSummary" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "feed": { - "description": "Homepage feed that was requested, for example `politics`.", - "example": "politics", - "type": "string" + "pitch_hands": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T11:00:00Z", - "type": "string" + "prior_pickoffs": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "has_more": { - "description": "`true` when more rows are available after this page.", - "type": "boolean" + "runner_moved": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "limit": { - "description": "Maximum number of rows requested.", - "example": 20, - "type": "integer" + "seasons": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "markets": { - "description": "Market rows in the feed, one item per market. Returned by the `breaking` feed.", + "sort_directions": { "items": { - "$ref": "#/definitions/polymarket.MarketSummary" + "$ref": "#/definitions/mlb.EnumValue" }, "type": "array" }, - "next_cursor": { - "description": "Cursor to pass to fetch the next page.", - "type": "string" + "sort_fields": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "source_kind": { - "description": "Kind of rows the feed returns: `events_keyset`, `markets_movers` or `public_search`.", - "example": "events_keyset", - "type": "string" + "target_bases": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://gamma-api.polymarket.com/events/keyset?limit=20&tag_slug=politics", - "type": "string" + "teams": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" + }, + "types": { + "items": { + "$ref": "#/definitions/mlb.EnumValue" + }, + "type": "array" } }, "type": "object" }, - "polymarket.LeaderboardEntry": { + "mlb.StatcastRunningGameOption": { "properties": { - "profile_image_url": { + "game_type": { "type": "string" }, - "profit_loss": { - "example": 322870.79601049656, - "type": "number" + "limit": { + "type": "integer" }, - "proxy_wallet": { - "example": "0x4bff30af91642dc7d2b19a8664378fe55c45fc26", + "min_pitches": { "type": "string" }, - "rank": { - "example": "1", + "offset": { + "type": "integer" + }, + "pitch_hand": { "type": "string" }, - "user_name": { - "example": "Sassy-Bucket", + "prior_pk": { "type": "string" }, - "verified_badge": { - "type": "boolean" + "runner_moved": { + "type": "string" }, - "volume": { - "example": 770358.109102, - "type": "number" + "search": { + "type": "string" }, - "x_username": { - "example": "polymarket", + "season_end": { + "type": "integer" + }, + "season_start": { + "type": "integer" + }, + "sort": { + "type": "string" + }, + "sort_dir": { + "type": "string" + }, + "split": { + "type": "string" + }, + "target_base": { + "type": "string" + }, + "team": { "type": "string" + }, + "type": { + "type": "string" + }, + "with_team_only": { + "type": "boolean" } }, "type": "object" }, - "polymarket.LeaderboardResponse": { + "mlb.StatcastRunningGameResponse": { "properties": { + "board": { + "type": "string" + }, "fetched_at": { - "example": "2026-06-07T11:00:00Z", "type": "string" }, + "filters": { + "$ref": "#/definitions/mlb.StatcastRunningGameOption" + }, "limit": { - "example": 20, + "type": "integer" + }, + "offset": { "type": "integer" }, "rows": { "items": { - "$ref": "#/definitions/polymarket.LeaderboardEntry" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "sort_by": { - "example": "profit", - "type": "string" - }, "source_url": { - "example": "https://data-api.polymarket.com/v1/leaderboard?window=30d&sortBy=profit&limit=20", "type": "string" }, - "window": { - "example": "30d", - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "polymarket.MacroDashboardResponse": { + "mlb.StatcastSprintSpeedResponse": { "properties": { - "cursor": { - "description": "Cursor that was used to fetch this page.", + "board": { "type": "string" }, - "events": { - "description": "Macro events on this page, one item per event.", - "items": { - "$ref": "#/definitions/polymarket.EventSummary" - }, - "type": "array" - }, "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T11:00:00Z", "type": "string" }, - "has_more": { - "description": "`true` when more events are available after this page.", - "type": "boolean" - }, "limit": { - "description": "Maximum number of events requested.", - "example": 20, "type": "integer" }, - "next_cursor": { - "description": "Cursor to pass to fetch the next page.", + "max_season": { + "type": "string" + }, + "min_season": { + "type": "string" + }, + "minimum_runs": { + "type": "string" + }, + "offset": { + "type": "integer" + }, + "position": { + "type": "string" + }, + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "sort": { + "type": "string" + }, + "sort_dir": { "type": "string" }, "source_url": { - "description": "URL the data was read from.", - "example": "https://gamma-api.polymarket.com/events/keyset?tag_slug=macro&limit=20", "type": "string" + }, + "team_id": { + "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "polymarket.MarketDetailResponse": { + "mlb.StatcastSprintSpeedTeamsResponse": { "properties": { - "condition_id": { - "description": "Condition id of the market that was requested.", - "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", + "board": { "type": "string" }, "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T11:00:00Z", "type": "string" }, - "id": { - "description": "Polymarket market id that was requested.", - "example": "558934", + "limit": { + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "season": { "type": "string" }, - "market": { - "allOf": [ - { - "$ref": "#/definitions/polymarket.MarketSummary" - } - ], - "description": "Full details of the market." + "sort": { + "type": "string" }, - "slug": { - "description": "URL slug of the market that was requested.", - "example": "will-spain-win-the-2026-fifa-world-cup-963", + "sort_dir": { "type": "string" }, "source_url": { - "description": "URL the data was read from.", - "example": "https://gamma-api.polymarket.com/markets/558934", "type": "string" + }, + "team": { + "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "polymarket.MarketLiquidityResponse": { + "mlb.StatcastTopPerformerCard": { "properties": { - "clob_market": { - "allOf": [ - { - "$ref": "#/definitions/polymarket.ClobMarketSummary" - } - ], - "description": "Order-book trading settings and outcome prices for the market." - }, - "condition_id": { - "description": "Condition id of the market that was requested.", - "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", + "complete_leaderboard_url": { "type": "string" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T11:00:00Z", + "definition_url": { "type": "string" }, "id": { - "description": "Polymarket market id that was requested.", - "example": "558934", - "type": "string" - }, - "market": { - "allOf": [ - { - "$ref": "#/definitions/polymarket.MarketSummary" - } - ], - "description": "Summary of the market the liquidity snapshot belongs to." - }, - "slug": { - "description": "URL slug of the market that was requested.", - "example": "will-spain-win-the-2026-fifa-world-cup-963", "type": "string" }, - "source_urls": { - "description": "URLs the data was read from.", + "leaders": { "items": { - "type": "string" + "$ref": "#/definitions/mlb.StatcastTopPerformerLeader" }, "type": "array" }, - "tokens": { - "description": "Liquidity figures for each outcome token of the market.", - "items": { - "$ref": "#/definitions/polymarket.MarketLiquidityTokenSummary" - }, - "type": "array" + "metric": { + "type": "string" + }, + "player_type": { + "type": "string" + }, + "title": { + "type": "string" } }, "type": "object" }, - "polymarket.MarketLiquidityTokenSummary": { + "mlb.StatcastTopPerformerLeader": { "properties": { - "ask_depth": { - "description": "Total size of all ask levels in the token's order book.", - "example": 654.33, - "type": "number" - }, - "bid_depth": { - "description": "Total size of all bid levels in the token's order book.", - "example": 117.57, - "type": "number" - }, - "buy_price": { - "description": "Price quoted for buying one share of the outcome.", - "example": 0.16, - "type": "number" - }, - "clob_price": { - "description": "Outcome price taken from the order-book market data.", - "example": 0.161, - "type": "number" - }, - "gamma_price": { - "description": "Outcome price taken from the market listing.", - "example": 0.16, - "type": "number" - }, - "last_trade_price": { - "description": "Price of the most recent trade on the token.", - "example": 0.162, - "type": "number" + "headshot_url": { + "type": "string" }, - "midpoint": { - "description": "Midpoint between the best bid and best ask for the token.", - "example": 0.165, - "type": "number" + "player_id": { + "type": "string" }, - "orderbook_best_ask": { - "description": "Lowest ask price in the token's order book.", - "example": 0.17, - "type": "number" + "player_name": { + "type": "string" }, - "orderbook_best_bid": { - "description": "Highest bid price in the token's order book.", - "example": 0.16, - "type": "number" + "player_url": { + "type": "string" }, - "orderbook_spread": { - "description": "Best ask price minus best bid price in the token's order book.", - "example": 0.01, - "type": "number" + "rank": { + "type": "integer" }, - "outcome": { - "description": "Name of the outcome the token represents, for example `Yes`.", - "example": "Yes", + "team_id": { "type": "string" }, - "sell_price": { - "description": "Price quoted for selling one share of the outcome.", - "example": 0.17, - "type": "number" - }, - "spread": { - "description": "Spread Polymarket reports for the token.", - "example": 0.01, - "type": "number" + "team_logo_url": { + "type": "string" }, - "token_id": { - "description": "Token id of the outcome. Use it with the order book and price endpoints.", - "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", + "value": { "type": "string" } }, "type": "object" }, - "polymarket.MarketSummary": { + "mlb.StatcastTopPerformersResponse": { "properties": { - "active": { - "description": "`true` when the market is active.", - "type": "boolean" - }, - "best_ask": { - "description": "Lowest ask price currently offered on the market.", - "type": "number" + "card_count": { + "type": "integer" }, - "best_bid": { - "description": "Highest bid price currently offered on the market.", - "type": "number" + "cards": { + "items": { + "$ref": "#/definitions/mlb.StatcastTopPerformerCard" + }, + "type": "array" }, - "closed": { - "description": "`true` when the market is closed.", - "type": "boolean" + "fetched_at": { + "type": "string" }, - "condition_id": { - "description": "Condition id that identifies the market on Polymarket.", - "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", + "source_url": { "type": "string" }, - "end_date": { - "description": "Date and time the market is scheduled to end (ISO 8601).", + "year": { + "type": "integer" + } + }, + "type": "object" + }, + "mlb.StatsResponse": { + "properties": { + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", "type": "string" }, - "id": { - "description": "Polymarket market id.", - "example": "558934", + "group": { + "description": "Stat group that was returned, for example `hitting` or `pitching`.", "type": "string" }, - "last_trade_price": { - "description": "Price of the most recent trade on the market.", - "type": "number" + "limit": { + "description": "Maximum number of rows requested. Omitted when no limit applies.", + "type": "integer" }, - "liquidity": { - "description": "Liquidity Polymarket reports for the market.", - "type": "number" + "offset": { + "description": "Number of rows skipped before this page. Omitted when zero.", + "type": "integer" }, - "outcomes": { - "description": "Outcomes of the market with their current prices, one item per outcome.", - "items": { - "$ref": "#/definitions/polymarket.OutcomePricePoint" - }, - "type": "array" + "player_id": { + "description": "MLB player id the stats are for. Omitted for team and league-wide tables.", + "type": "integer" }, - "question": { - "description": "Question the market asks, for example `Will Spain win the 2026 FIFA World Cup?`.", - "example": "Will Spain win the 2026 FIFA World Cup?", - "type": "string" + "season": { + "description": "Season the stats cover, as a year.", + "type": "integer" }, - "slug": { - "description": "URL slug of the market.", - "example": "will-spain-win-the-2026-fifa-world-cup-963", + "source_url": { + "description": "URL the data was read from.", "type": "string" }, - "token_ids": { - "description": "Token ids of the market outcomes, in the same order as `outcomes`.", + "splits": { + "description": "Rows of statistics, one item per player, team or period.", "items": { - "type": "string" + "$ref": "#/definitions/mlb.StatSplit" }, "type": "array" }, - "url": { - "description": "Link to the market on polymarket.com.", - "example": "https://polymarket.com/event/world-cup-winner/will-spain-win-the-2026-fifa-world-cup-963", - "type": "string" + "team_id": { + "description": "MLB team id the stats are limited to. Omitted when not limited to a team.", + "type": "integer" }, - "volume": { - "description": "Total trading volume of the market.", - "type": "number" + "total": { + "description": "Total number of rows available.", + "type": "integer" }, - "volume_24h": { - "description": "Trading volume of the market over the last 24 hours.", - "type": "number" + "type": { + "description": "Stats type label. Always `season`.", + "type": "string" } }, "type": "object" }, - "polymarket.MarketsResponse": { + "mlb.Team": { "properties": { - "ascending": { - "description": "`true` when markets are sorted in ascending order.", + "abbreviation": { + "description": "Short team abbreviation, for example `NYY`. Omitted when not available.", + "type": "string" + }, + "active": { "type": "boolean" }, - "closed": { - "description": "Closed filter applied, `true` or `false`.", - "example": "false", + "club_name": { "type": "string" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T11:00:00Z", + "division": { + "$ref": "#/definitions/mlb.NamedRef" + }, + "first_year_of_play": { "type": "string" }, - "limit": { - "description": "Maximum number of markets requested.", - "example": 25, + "id": { + "description": "MLB team id.", "type": "integer" }, - "markets": { - "description": "Markets on this page, one item per market.", - "items": { - "$ref": "#/definitions/polymarket.MarketSummary" - }, - "type": "array" - }, - "offset": { - "description": "Number of markets skipped before this page.", - "example": 0, - "type": "integer" + "league": { + "$ref": "#/definitions/mlb.NamedRef" }, - "order": { - "description": "Field the markets are sorted by, for example `volume24hr`.", - "example": "volume24hr", + "location_name": { "type": "string" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://gamma-api.polymarket.com/markets?limit=25", + "name": { + "description": "Full team name.", "type": "string" - } - }, - "type": "object" - }, - "polymarket.OrderBookLevel": { - "properties": { - "price": { - "description": "Price of this order book level.", - "example": 0.03, - "type": "number" }, - "size": { - "description": "Total size of the orders resting at this price.", - "example": 5, - "type": "number" + "season": { + "type": "integer" + }, + "venue": { + "$ref": "#/definitions/mlb.VenueRef" } }, "type": "object" }, - "polymarket.OrderBookSummary": { + "mlb.TeamBoxscore": { "properties": { - "asks": { - "description": "Ask levels in the order book, one item per price level.", + "batters": { "items": { - "$ref": "#/definitions/polymarket.OrderBookLevel" + "type": "integer" }, "type": "array" }, - "bids": { - "description": "Bid levels in the order book, one item per price level.", + "pitchers": { "items": { - "$ref": "#/definitions/polymarket.OrderBookLevel" + "type": "integer" }, "type": "array" }, - "condition_id": { - "description": "Condition id of the market the token belongs to.", - "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", - "type": "string" - }, - "hash": { - "description": "Hash of the order book snapshot.", - "example": "31facd52b62495bbc142facb81275400d978f6bf", - "type": "string" - }, - "last_trade_price": { - "description": "Price of the most recent trade on the token.", - "example": 0.285, - "type": "number" - }, - "min_order_size": { - "description": "Smallest order size the market accepts.", - "example": 5, - "type": "number" - }, - "neg_risk": { - "description": "`true` when the market is part of a negative-risk group of linked outcomes.", - "type": "boolean" - }, - "tick_size": { - "description": "Smallest price increment the market accepts.", - "example": 0.01, - "type": "number" + "players_used": { + "type": "integer" }, - "timestamp": { - "description": "Time of the order book snapshot, in Unix milliseconds.", - "example": "1780837460175", - "type": "string" + "team": { + "$ref": "#/definitions/mlb.TeamRef" }, - "token_id": { - "description": "Token id of the outcome the order book belongs to.", - "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", - "type": "string" + "team_stats": { + "additionalProperties": { + "additionalProperties": {}, + "type": "object" + }, + "type": "object" } }, "type": "object" }, - "polymarket.OutcomePricePoint": { + "mlb.TeamRef": { "properties": { - "best_ask": { - "description": "Lowest ask price currently offered for the outcome.", - "example": 0.162, - "type": "number" - }, - "best_bid": { - "description": "Highest bid price currently offered for the outcome.", - "example": 0.161, - "type": "number" - }, - "last_trade_price": { - "description": "Price of the most recent trade on the outcome.", - "example": 0.162, - "type": "number" - }, - "liquidity": { - "description": "Liquidity Polymarket reports for the outcome.", - "example": 1093391.84, - "type": "number" - }, - "market_id": { - "description": "Polymarket id of the market the outcome belongs to.", - "example": "558934", - "type": "string" - }, - "market_slug": { - "description": "URL slug of the market the outcome belongs to.", - "example": "will-spain-win-the-2026-fifa-world-cup-963", - "type": "string" - }, - "outcome": { - "description": "Name of the outcome, for example `Yes`.", - "example": "Yes", + "abbreviation": { + "description": "Short team abbreviation, for example `NYY`. Omitted when not available.", "type": "string" }, - "price": { - "description": "Current price of the outcome.", - "example": 0.1615, - "type": "number" + "id": { + "description": "MLB team id.", + "type": "integer" }, - "question": { - "description": "Question of the market the outcome belongs to.", - "example": "Will Spain win the 2026 FIFA World Cup?", + "name": { + "description": "Full team name.", "type": "string" - }, - "volume": { - "description": "Trading volume Polymarket reports for the outcome.", - "example": 30983849.24, - "type": "number" } }, "type": "object" }, - "polymarket.PredictionsResponse": { + "mlb.TeamSuggestion": { "properties": { - "cursor": { - "description": "Cursor that was used to fetch this page.", + "club_name": { "type": "string" }, - "events": { - "description": "Events on this page, one item per event.", + "display_name": { + "type": "string" + }, + "franchise_name": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "logos": { "items": { - "$ref": "#/definitions/polymarket.EventSummary" + "$ref": "#/definitions/mlb.ImageRef" }, "type": "array" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T11:00:00Z", + "name": { "type": "string" }, - "has_more": { - "description": "`true` when more events are available after this page.", - "type": "boolean" - }, - "limit": { - "description": "Maximum number of events requested.", - "example": 20, + "sport_id": { "type": "integer" }, - "next_cursor": { - "description": "Cursor to pass to fetch the next page.", + "team_name": { "type": "string" }, - "recurrence": { - "description": "Recurrence filter applied: `hourly`, `daily`, `weekly`, `monthly` or `yearly`.", - "example": "daily", + "tri_code": { "type": "string" + } + }, + "type": "object" + }, + "mlb.TeamsResponse": { + "properties": { + "count": { + "type": "integer" }, - "sort": { - "description": "Sort order applied, for example `competitive`.", - "example": "competitive", + "fetched_at": { "type": "string" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://gamma-api.polymarket.com/events/keyset?limit=20&order=competitive", - "type": "string" + "season": { + "type": "integer" }, - "status": { - "description": "Prediction status filter applied: `active`, `resolved` or `all`.", - "example": "all", + "source_url": { "type": "string" }, - "tag": { - "description": "Polymarket tag slug the events were filtered by.", - "example": "politics", - "type": "string" + "teams": { + "items": { + "$ref": "#/definitions/mlb.Team" + }, + "type": "array" } }, "type": "object" }, - "polymarket.PriceHistoryPoint": { + "mlb.TermSuggestion": { "properties": { - "price": { - "example": 0.48, - "type": "number" + "display_name": { + "type": "string" }, - "timestamp": { - "example": 1780826405, - "type": "integer" + "name": { + "type": "string" } }, "type": "object" }, - "polymarket.ProfileMatch": { + "mlb.TopicSuggestion": { "properties": { - "id": { - "description": "Polymarket profile id.", - "example": "123", + "display_name": { "type": "string" }, + "fields": { + "items": { + "type": "integer" + }, + "type": "array" + }, "name": { - "description": "Display name of the profile.", - "example": "Trader", "type": "string" }, - "username": { - "description": "Username of the profile.", - "example": "trader", + "slug": { "type": "string" } }, "type": "object" }, - "polymarket.PublicDataResponse": { + "mlb.Transaction": { "properties": { - "data": { - "description": "Content returned for the requested route, as Polymarket returns it.", - "type": "object" + "date": { + "type": "string" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T11:00:00Z", + "description": { "type": "string" }, - "route": { - "description": "Route key that was requested, for example `sports`.", - "example": "sports", + "effective_date": { "type": "string" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://gamma-api.polymarket.com/sports", + "from_team": { + "$ref": "#/definitions/mlb.TeamRef" + }, + "id": { + "type": "integer" + }, + "player": { + "$ref": "#/definitions/mlb.NamedRef" + }, + "to_team": { + "$ref": "#/definitions/mlb.TeamRef" + }, + "type": { "type": "string" } }, "type": "object" }, - "polymarket.RewardsConfigSummary": { + "mlb.TransactionsResponse": { "properties": { - "asset_address": { - "description": "Contract address of the token paid out as the reward.", - "example": "0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB", - "type": "string" + "count": { + "type": "integer" }, "end_date": { - "description": "Date the reward program ends, in YYYY-MM-DD.", - "example": "2500-12-31", "type": "string" }, - "id": { - "description": "Id of the reward program configuration.", - "example": 0, - "type": "integer" + "fetched_at": { + "type": "string" }, - "rate_per_day": { - "description": "Reward amount paid per day.", - "example": 10.00036, - "type": "number" + "source_url": { + "type": "string" }, "start_date": { - "description": "Date the reward program starts, in YYYY-MM-DD.", - "example": "2026-06-07", "type": "string" }, - "total_rewards": { - "description": "Total reward amount configured for the program.", - "example": 0, - "type": "number" + "transactions": { + "items": { + "$ref": "#/definitions/mlb.Transaction" + }, + "type": "array" } }, "type": "object" }, - "polymarket.RewardsMarketResponse": { + "mlb.VenueRef": { "properties": { - "condition_id": { - "description": "Condition id of the market that was requested.", - "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", - "type": "string" - }, - "count": { - "description": "Number of reward markets returned.", - "example": 1, + "id": { "type": "integer" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T11:00:00Z", + "name": { "type": "string" + } + }, + "type": "object" + }, + "mlb.boxscoreResponseDoc": { + "properties": { + "code": { + "type": "integer" }, - "market": { - "allOf": [ - { - "$ref": "#/definitions/polymarket.RewardsMarketSummary" - } - ], - "description": "Rewards details of the market." + "data": { + "$ref": "#/definitions/mlb.BoxscoreResponse" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://clob.polymarket.com/rewards/markets/0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327?sponsored=true", + "msg": { "type": "string" } }, "type": "object" }, - "polymarket.RewardsMarketSummary": { + "mlb.discoveryResponseDoc": { "properties": { - "condition_id": { - "description": "Condition id that identifies the market on Polymarket.", - "example": "0x2d293b8d8141edcc3317f6e677a01623dc482e7fe8eb4c4e207c9a0987c37d22", - "type": "string" - }, - "daily_reward_rate": { - "description": "Daily reward rate offered for the market.", - "example": 10.00036, - "type": "number" - }, - "earning_percentage": { - "description": "Earning percentage Polymarket shows for the market.", - "example": 0, - "type": "number" - }, - "earnings": { - "description": "Reward earnings records for the market, as Polymarket returns them.", - "items": { - "type": "object" - }, - "type": "array" - }, - "event_id": { - "description": "Polymarket id of the event the market belongs to.", - "example": "568951", - "type": "string" - }, - "event_slug": { - "description": "URL slug of the event the market belongs to.", - "example": "sc2-hero-cure-2026-06-07", - "type": "string" - }, - "event_url": { - "description": "Link to the event on polymarket.com.", - "example": "https://polymarket.com/event/sc2-hero-cure-2026-06-07", - "type": "string" - }, - "image_url": { - "description": "URL of the market's image.", - "type": "string" - }, - "maker_address": { - "description": "Maker address Polymarket reports for the market's rewards.", - "example": "0x0000000000000000000000000000000000000000", - "type": "string" - }, - "market_competitiveness": { - "description": "Competitiveness score Polymarket shows for the market's rewards.", - "example": 2.83, - "type": "number" - }, - "market_id": { - "description": "Polymarket market id.", - "example": "2461586", - "type": "string" - }, - "market_slug": { - "description": "URL slug of the market.", - "example": "sc2-hero-cure-2026-06-07", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "market_url": { - "description": "Link to the market on polymarket.com.", - "example": "https://polymarket.com/event/sc2-hero-cure-2026-06-07/sc2-hero-cure-2026-06-07", - "type": "string" + "data": { + "$ref": "#/definitions/mlb.MLBDiscoveryResponse" }, - "question": { - "description": "Question the market asks.", - "example": "StarCraft II: herO vs Cure (BO7) - Global StarCraft II League Playoffs", + "msg": { + "example": "OK", "type": "string" - }, - "rewards_config": { - "description": "Reward programs configured for the market, one item per program.", - "items": { - "$ref": "#/definitions/polymarket.RewardsConfigSummary" - }, - "type": "array" - }, - "rewards_max_spread": { - "description": "Maximum spread an order can have and still qualify for rewards.", - "example": 4.5, - "type": "number" - }, - "rewards_min_size": { - "description": "Minimum order size that qualifies for rewards.", - "example": 50, - "type": "number" - }, - "spread": { - "description": "Current spread of the market.", - "example": 0.01, - "type": "number" - }, - "tokens": { - "description": "Outcome tokens of the market with their prices, one item per outcome.", - "items": { - "$ref": "#/definitions/polymarket.RewardsTokenSummary" - }, - "type": "array" - }, - "total_configured_rewards": { - "description": "Total rewards configured for the market.", - "example": 0, - "type": "number" - }, - "volume_24h": { - "description": "Trading volume of the market over the last 24 hours.", - "example": 79.9901, - "type": "number" } }, "type": "object" }, - "polymarket.RewardsMarketsResponse": { + "mlb.editorialFeedResponseDoc": { "properties": { - "count": { - "description": "Number of reward markets returned on this page.", - "example": 100, + "code": { + "example": 200, "type": "integer" }, - "cursor": { - "description": "Cursor that was used to fetch this page.", - "example": "MA==", - "type": "string" - }, - "date": { - "description": "Reward program date the markets apply to, in YYYY-MM-DD.", - "example": "2026-06-07", - "type": "string" + "data": { + "$ref": "#/definitions/mlb.EditorialFeedResponse" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T11:00:00Z", + "msg": { + "example": "OK", "type": "string" - }, - "has_more": { - "description": "`true` when more reward markets are available after this page.", - "type": "boolean" - }, - "limit": { - "description": "Maximum number of rows requested.", - "example": 100, + } + }, + "type": "object" + }, + "mlb.gameResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "markets": { - "description": "Reward markets on this page, one item per market.", - "items": { - "$ref": "#/definitions/polymarket.RewardsMarketSummary" - }, - "type": "array" - }, - "next_cursor": { - "description": "Cursor to pass to fetch the next page.", - "example": "MTAw", - "type": "string" - }, - "order_by": { - "description": "Field the markets are sorted by, for example `market`.", - "example": "market", - "type": "string" - }, - "position": { - "description": "Sort direction applied: `asc` or `desc`.", - "example": "desc", - "type": "string" - }, - "q": { - "description": "Market question search text that was applied.", - "example": "bitcoin", - "type": "string" - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://polymarket.com/api/rewards/markets?orderBy=market", - "type": "string" + "data": { + "$ref": "#/definitions/mlb.GameResponse" }, - "tag_slug": { - "description": "Rewards category the markets were filtered by, for example `all` or `politics`.", - "example": "all", + "msg": { + "example": "OK", "type": "string" - }, - "total_count": { - "description": "Total number of reward markets matching the filters.", - "example": 5430, - "type": "integer" } }, "type": "object" }, - "polymarket.RewardsTokenSummary": { + "mlb.leagueLeadersResponseDoc": { "properties": { - "outcome": { - "description": "Name of the outcome the token represents.", - "example": "herO", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "price": { - "description": "Current price of the outcome token.", - "example": 0.995, - "type": "number" + "data": { + "$ref": "#/definitions/mlb.LeagueLeadersResponse" }, - "token_id": { - "description": "Token id of the outcome.", - "example": "49033998602764986470838384384660931821099068366428064235699748485619139146655", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "polymarket.SearchResponse": { + "mlb.playByPlayResponseDoc": { "properties": { - "ascending": { - "description": "`true` when results are sorted in ascending order.", - "type": "boolean" - }, - "events": { - "description": "Events matching the search query, one item per event.", - "items": { - "$ref": "#/definitions/polymarket.EventSummary" - }, - "type": "array" - }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T11:00:00Z", - "type": "string" - }, - "has_more": { - "description": "`true` when more matching results exist beyond this page.", - "type": "boolean" - }, - "limit": { - "description": "Maximum number of events requested.", - "example": 10, + "code": { "type": "integer" }, - "profiles": { - "description": "Polymarket profiles matching the query, one item per profile.", - "items": { - "$ref": "#/definitions/polymarket.ProfileMatch" - }, - "type": "array" - }, - "query": { - "description": "Search text that was run.", - "example": "bitcoin", - "type": "string" - }, - "sort": { - "description": "Sort order applied to the results, for example `relevance`.", - "example": "relevance", - "type": "string" - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://gamma-api.polymarket.com/public-search?q=bitcoin&limit_per_type=10", - "type": "string" + "data": { + "$ref": "#/definitions/mlb.PlayByPlayResponse" }, - "status": { - "description": "Event status filter applied: `open`, `closed` or `all`.", - "example": "open", + "msg": { "type": "string" - }, - "tags": { - "description": "Tags matching the query, one item per tag.", - "items": { - "$ref": "#/definitions/polymarket.TagSummary" - }, - "type": "array" - }, - "total_results": { - "description": "Total number of events matching the query.", - "example": 123, - "type": "integer" } }, "type": "object" }, - "polymarket.SimilarEventsResponse": { + "mlb.playerResponseDoc": { "properties": { - "events": { - "items": { - "$ref": "#/definitions/polymarket.EventSummary" - }, - "type": "array" - }, - "fetched_at": { - "example": "2026-06-07T11:00:00Z", - "type": "string" - }, - "limit": { - "example": 10, + "code": { + "example": 200, "type": "integer" }, - "source_url": { - "example": "https://gamma-api.polymarket.com/events/similar?event_slug=world-cup-winner", + "data": { + "$ref": "#/definitions/mlb.PlayerResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "polymarket.TagResponse": { + "mlb.prospectRankingsResponseDoc": { "properties": { - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T11:00:00Z", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://gamma-api.polymarket.com/tags/slug/crypto", - "type": "string" + "data": { + "$ref": "#/definitions/mlb.ProspectRankingsResponse" }, - "tag": { - "allOf": [ - { - "$ref": "#/definitions/polymarket.TagSummary" - } - ], - "description": "Tag that was requested." + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "polymarket.TagSummary": { + "mlb.prospectStatsResponseDoc": { "properties": { - "id": { - "description": "Polymarket tag id.", - "example": "21", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "label": { - "description": "Display name of the tag, for example `Crypto`.", - "example": "Crypto", - "type": "string" + "data": { + "$ref": "#/definitions/mlb.ProspectStatsResponse" }, - "slug": { - "description": "URL slug of the tag, for example `crypto`.", - "example": "crypto", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "polymarket.TagsResponse": { + "mlb.rosterResponseDoc": { "properties": { - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T11:00:00Z", - "type": "string" - }, - "limit": { - "description": "Maximum number of tags requested.", - "example": 25, + "code": { + "example": 200, "type": "integer" }, - "offset": { - "description": "Number of tags skipped before this page.", - "example": 0, - "type": "integer" + "data": { + "$ref": "#/definitions/mlb.RosterResponse" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://gamma-api.polymarket.com/tags?limit=25", + "msg": { + "example": "OK", "type": "string" - }, - "tags": { - "description": "Tags on this page, one item per tag.", - "items": { - "$ref": "#/definitions/polymarket.TagSummary" - }, - "type": "array" } }, "type": "object" }, - "polymarket.TokenMidpointResponse": { + "mlb.scheduleResponseDoc": { "properties": { - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T11:00:00Z", - "type": "string" - }, - "midpoint": { - "description": "Midpoint between the best bid and best ask for the token.", - "example": 0.285, - "type": "number" + "code": { + "example": 200, + "type": "integer" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://clob.polymarket.com/midpoint?token_id=81927025054404355287140018940169293739219157042658469116956164881873598220211", - "type": "string" + "data": { + "$ref": "#/definitions/mlb.ScheduleResponse" }, - "token_id": { - "description": "Token id of the outcome that was requested.", - "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "polymarket.TokenOrderBookResponse": { + "mlb.searchResponseDoc": { "properties": { - "book": { - "allOf": [ - { - "$ref": "#/definitions/polymarket.OrderBookSummary" - } - ], - "description": "Order book for the token with its bids and asks." - }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T11:00:00Z", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://clob.polymarket.com/book?token_id=81927025054404355287140018940169293739219157042658469116956164881873598220211", - "type": "string" + "data": { + "$ref": "#/definitions/mlb.SearchResponse" }, - "token_id": { - "description": "Token id of the outcome that was requested.", - "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "polymarket.TokenPriceHistoryResponse": { + "mlb.standingsResponseDoc": { "properties": { - "end_ts": { - "example": 1780840800, - "type": "integer" - }, - "fetched_at": { - "example": "2026-06-07T11:00:00Z", - "type": "string" - }, - "fidelity": { - "example": 60, + "code": { + "example": 200, "type": "integer" }, - "interval": { - "example": "1d", - "type": "string" - }, - "points": { - "items": { - "$ref": "#/definitions/polymarket.PriceHistoryPoint" - }, - "type": "array" - }, - "source_url": { - "example": "https://clob.polymarket.com/prices-history?fidelity=60&interval=1d&market=81927025054404355287140018940169293739219157042658469116956164881873598220211", - "type": "string" - }, - "start_ts": { - "example": 1780754400, - "type": "integer" + "data": { + "$ref": "#/definitions/mlb.StandingsResponse" }, - "token_id": { - "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "polymarket.TokenPriceResponse": { + "mlb.statcastABSChallengesResponseDoc": { "properties": { - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T11:00:00Z", - "type": "string" - }, - "price": { - "description": "Price quoted for the requested side.", - "example": 0.03, - "type": "number" - }, - "side": { - "description": "Order side the price applies to: `buy` or `sell`.", - "example": "buy", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://clob.polymarket.com/price?side=buy&token_id=81927025054404355287140018940169293739219157042658469116956164881873598220211", - "type": "string" + "data": { + "$ref": "#/definitions/mlb.StatcastABSChallengesResponse" }, - "token_id": { - "description": "Token id of the outcome that was requested.", - "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "polymarket.TokenSpreadResponse": { + "mlb.statcastActiveSpinResponseDoc": { "properties": { - "fetched_at": { - "example": "2026-06-07T11:00:00Z", + "board": { + "example": "active-spin", "type": "string" }, - "source_url": { - "example": "https://clob.polymarket.com/spread?token_id=81927025054404355287140018940169293739219157042658469116956164881873598220211", + "hand": { + "example": "R", "type": "string" }, - "spread": { - "example": 0.51, - "type": "number" + "min": { + "example": "50", + "type": "string" }, - "token_id": { - "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "total": { + "example": 712, + "type": "integer" + }, + "year": { + "example": "2026_spin-based", "type": "string" } }, "type": "object" }, - "polymarket.TradeSummary": { + "mlb.statcastArmAngleResponseDoc": { "properties": { - "asset": { - "description": "Token id of the outcome that was traded.", - "example": "90219780179584544303349592653084019110196125806694819219181473744581426681835", - "type": "string" - }, - "bio": { - "description": "Biography text from the trader's Polymarket profile.", + "bat_side": { + "example": "L", "type": "string" }, - "condition_id": { - "description": "Condition id of the market the trade was made on.", - "example": "0x3f2604d62ac3ee496ffd6d30156f30663fbaf22097f17f09d7364c35db255d2b", + "board": { + "example": "pitcher-arm-angle", "type": "string" }, - "event_slug": { - "description": "URL slug of the event the trade belongs to.", - "example": "btc-updown-15m-1780835400", + "date_end": { + "example": "2026-04-15", "type": "string" }, - "icon_url": { - "description": "URL of the icon image for the traded market.", + "date_start": { + "example": "2026-03-25", "type": "string" }, - "name": { - "description": "Display name from the trader's Polymarket profile.", - "example": "trader", + "fetched_at": { "type": "string" }, - "outcome": { - "description": "Name of the outcome that was traded, for example `Up`.", - "example": "Up", - "type": "string" + "game_types": { + "example": [ + "R" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "outcome_index": { - "description": "Position of the traded outcome within the market's outcomes, starting at 0.", - "example": 0, - "type": "integer" + "group_by": { + "items": { + "type": "string" + }, + "type": "array" }, - "price": { - "description": "Price per share at which the trade was made.", - "example": 0.52744, - "type": "number" + "league_average": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "profile_image_optimized": { - "description": "URL of an optimized version of the trader's profile image.", - "type": "string" + "limit": { + "example": 100, + "type": "integer" }, - "profile_image_url": { - "description": "URL of the trader's profile image.", + "min": { + "example": "q", "type": "string" }, - "proxy_wallet": { - "description": "Wallet address of the trader's Polymarket account.", - "example": "0x400e9b5e37f7209adb6938d49d63c48f154319d2", + "min_group_pitches": { + "example": "1", "type": "string" }, - "pseudonym": { - "description": "Pseudonym Polymarket assigned to the trader.", - "example": "Noisy-Dimple", - "type": "string" + "offset": { + "example": 0, + "type": "integer" }, - "side": { - "description": "Side of the trade: `BUY` or `SELL`.", - "example": "BUY", + "pitch_hand": { + "example": "R", "type": "string" }, - "size": { - "description": "Number of shares traded.", - "example": 25, - "type": "number" + "pitch_types": { + "example": [ + "FF" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "slug": { - "description": "URL slug of the market the trade was made on.", - "example": "btc-updown-15m-1780835400", - "type": "string" + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "timestamp": { - "description": "Time the trade was made, in Unix seconds.", - "example": 1780835568, - "type": "integer" + "seasons": { + "example": [ + "2026" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "title": { - "description": "Title of the market the trade was made on.", - "example": "Bitcoin Up or Down - June 7, 8:30AM-8:45AM ET", + "sort": { + "example": "arm_angle", "type": "string" }, - "transaction_hash": { - "description": "Hash of the transaction that settled the trade.", - "example": "0x7ef90efb7e9f921509d8e82ecc76ed3d8384a3740d7ebd81d3bbbfd017899245", + "sort_dir": { + "example": "asc", "type": "string" }, - "url": { - "description": "Link to the traded event on polymarket.com.", - "example": "https://polymarket.com/event/btc-updown-15m-1780835400", + "source_url": { "type": "string" }, - "value": { - "description": "Value of the trade, equal to `size` multiplied by `price`.", - "example": 13.186, - "type": "number" + "teams": { + "example": [ + "147" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "total": { + "example": 276, + "type": "integer" } }, "type": "object" }, - "polymarket.activityTradesResponseDoc": { + "mlb.statcastArmStrengthPlayerResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/polymarket.ActivityTradesResponse" + "$ref": "#/definitions/mlb.StatcastArmStrengthPlayerResponse" }, "msg": { "example": "OK", @@ -160495,14 +165815,14 @@ }, "type": "object" }, - "polymarket.batchTokenMidpointsResponseDoc": { + "mlb.statcastArmStrengthResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/polymarket.BatchTokenMidpointsResponse" + "$ref": "#/definitions/mlb.StatcastArmStrengthResponse" }, "msg": { "example": "OK", @@ -160511,14 +165831,14 @@ }, "type": "object" }, - "polymarket.batchTokenOrderBooksResponseDoc": { + "mlb.statcastArmValueDetailsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/polymarket.BatchTokenOrderBooksResponse" + "$ref": "#/definitions/mlb.StatcastArmValueDetailsResponse" }, "msg": { "example": "OK", @@ -160527,14 +165847,14 @@ }, "type": "object" }, - "polymarket.batchTokenPricesResponseDoc": { + "mlb.statcastArmValueResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/polymarket.BatchTokenPricesResponse" + "$ref": "#/definitions/mlb.StatcastArmValueResponse" }, "msg": { "example": "OK", @@ -160543,190 +165863,217 @@ }, "type": "object" }, - "polymarket.batchTokenSpreadsResponseDoc": { + "mlb.statcastBaserunningResponseDoc": { "properties": { "code": { - "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/polymarket.BatchTokenSpreadsResponse" + "$ref": "#/definitions/mlb.StatcastBaserunningResponse" }, "msg": { - "example": "OK", "type": "string" } }, "type": "object" }, - "polymarket.clobMarketResponseDoc": { + "mlb.statcastBatTrackingResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" + "board": { + "type": "string" }, - "data": { - "$ref": "#/definitions/polymarket.ClobMarketResponse" + "date_end": { + "type": "string" }, - "msg": { - "example": "OK", + "date_start": { "type": "string" - } - }, - "type": "object" - }, - "polymarket.eventDetailResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.EventDetailResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "game_type": { "type": "string" - } - }, - "type": "object" - }, - "polymarket.eventsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "limit": { "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.EventsResponse" + "min_group_swings": { + "type": "string" }, - "msg": { - "example": "OK", + "min_swings": { "type": "string" - } - }, - "type": "object" - }, - "polymarket.homepageFeedResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "offset": { "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.HomepageFeedResponse" + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "msg": { - "example": "OK", + "season_end": { "type": "string" - } - }, - "type": "object" - }, - "polymarket.leaderboardResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.LeaderboardResponse" + "season_start": { + "type": "string" }, - "msg": { - "example": "OK", + "sort": { "type": "string" - } - }, - "type": "object" - }, - "polymarket.macroDashboardResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.MacroDashboardResponse" + "sort_dir": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" - } - }, - "type": "object" - }, - "polymarket.marketDetailResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.MarketDetailResponse" + "total": { + "type": "integer" }, - "msg": { - "example": "OK", + "type": { "type": "string" } }, "type": "object" }, - "polymarket.marketLiquidityResponseDoc": { + "mlb.statcastBattedBallResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" + "board": { + "example": "batted-ball", + "type": "string" }, - "data": { - "$ref": "#/definitions/polymarket.MarketLiquidityResponse" + "game_types": { + "example": [ + "R" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "league_average": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "min": { + "example": "q", "type": "string" - } - }, - "type": "object" - }, - "polymarket.marketsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.MarketsResponse" + "min_split": { + "example": "1", + "type": "string" }, - "msg": { - "example": "OK", + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "seasons": { + "example": [ + "2026" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "show_league_average": { + "example": true, + "type": "boolean" + }, + "total": { + "example": 346, + "type": "integer" + }, + "type": { + "example": "batter", "type": "string" } }, "type": "object" }, - "polymarket.predictionsResponseDoc": { + "mlb.statcastBirthdayIndexResponseDoc": { "properties": { - "code": { - "example": 200, + "date": { + "example": "5-2", + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "limit": { + "example": 100, "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.PredictionsResponse" + "min_games": { + "example": 1, + "type": "integer" }, - "msg": { - "example": "OK", + "offset": { + "example": 0, + "type": "integer" + }, + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "show_inactives": { + "example": false, + "type": "boolean" + }, + "sort": { + "example": "daysUntil", + "type": "string" + }, + "sort_dir": { + "example": "asc", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "today_batters": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "today_pitchers": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "total": { + "example": 241, + "type": "integer" + }, + "type": { + "example": "batter", "type": "string" } }, "type": "object" }, - "polymarket.publicDataResponseDoc": { + "mlb.statcastBoardResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/polymarket.PublicDataResponse" + "$ref": "#/definitions/mlb.StatcastBoardResponse" }, "msg": { "example": "OK", @@ -160735,78 +166082,170 @@ }, "type": "object" }, - "polymarket.rewardsMarketResponseDoc": { + "mlb.statcastCatcherBlockingDetailsResponseDoc": { "properties": { - "code": { - "example": 200, + "board": { + "example": "catcher-blocking-details", + "type": "string" + }, + "entity_id": { + "example": 682626, "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.RewardsMarketResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "limit": { + "example": 100, + "type": "integer" + }, + "offset": { + "example": 0, + "type": "integer" + }, + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "source_url": { "type": "string" + }, + "total": { + "example": 3319, + "type": "integer" } }, "type": "object" }, - "polymarket.rewardsMarketsResponseDoc": { + "mlb.statcastCatcherBlockingResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" + "board": { + "example": "catcher-blocking", + "type": "string" }, - "data": { - "$ref": "#/definitions/polymarket.RewardsMarketsResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "game_type": { + "example": "Regular", + "type": "string" + }, + "minimum": { + "example": "q", + "type": "string" + }, + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "total": { + "example": 74, + "type": "integer" + }, + "type": { + "example": "Cat", "type": "string" } }, "type": "object" }, - "polymarket.searchResponseDoc": { + "mlb.statcastCatcherFramingDetailsResponseDoc": { "properties": { - "code": { - "example": 200, + "board": { + "example": "catcher-framing-details", + "type": "string" + }, + "entity_id": { + "example": 663886, "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.SearchResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "limit": { + "example": 100, + "type": "integer" + }, + "offset": { + "example": 0, + "type": "integer" + }, + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "source_url": { "type": "string" + }, + "total": { + "example": 8570, + "type": "integer" } }, "type": "object" }, - "polymarket.similarEventsResponseDoc": { + "mlb.statcastCatcherFramingResponseDoc": { "properties": { - "code": { - "example": 200, + "board": { + "example": "catcher-framing", + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "game_type": { + "example": "Regular", + "type": "string" + }, + "limit": { + "example": 100, "type": "integer" }, - "data": { - "$ref": "#/definitions/polymarket.SimilarEventsResponse" + "offset": { + "example": 0, + "type": "integer" }, - "msg": { - "example": "OK", + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "total": { + "example": 56, + "type": "integer" + }, + "type": { + "example": "catcher", "type": "string" } }, "type": "object" }, - "polymarket.tagResponseDoc": { + "mlb.statcastCatcherPopTimeResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/polymarket.TagResponse" + "$ref": "#/definitions/mlb.StatcastCatcherPopTimeResponse" }, "msg": { "example": "OK", @@ -160815,14 +166254,14 @@ }, "type": "object" }, - "polymarket.tagsResponseDoc": { + "mlb.statcastCatcherStanceResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/polymarket.TagsResponse" + "$ref": "#/definitions/mlb.StatcastCatcherStanceResponse" }, "msg": { "example": "OK", @@ -160831,14 +166270,14 @@ }, "type": "object" }, - "polymarket.tokenMidpointResponseDoc": { + "mlb.statcastCatcherThrowingDetailsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/polymarket.TokenMidpointResponse" + "$ref": "#/definitions/mlb.StatcastCatcherThrowingDetailsResponse" }, "msg": { "example": "OK", @@ -160847,14 +166286,14 @@ }, "type": "object" }, - "polymarket.tokenOrderBookResponseDoc": { + "mlb.statcastCatcherThrowingResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/polymarket.TokenOrderBookResponse" + "$ref": "#/definitions/mlb.StatcastCatcherThrowingResponse" }, "msg": { "example": "OK", @@ -160863,14 +166302,14 @@ }, "type": "object" }, - "polymarket.tokenPriceHistoryResponseDoc": { + "mlb.statcastFieldingRunValueResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/polymarket.TokenPriceHistoryResponse" + "$ref": "#/definitions/mlb.StatcastFieldingRunValueResponse" }, "msg": { "example": "OK", @@ -160879,14 +166318,14 @@ }, "type": "object" }, - "polymarket.tokenPriceResponseDoc": { + "mlb.statcastFirstBaseReceivingDetailsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/polymarket.TokenPriceResponse" + "$ref": "#/definitions/mlb.StatcastFirstBaseReceivingDetailsResponse" }, "msg": { "example": "OK", @@ -160895,14 +166334,14 @@ }, "type": "object" }, - "polymarket.tokenSpreadResponseDoc": { + "mlb.statcastFirstBaseReceivingResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/polymarket.TokenSpreadResponse" + "$ref": "#/definitions/mlb.StatcastFirstBaseReceivingResponse" }, "msg": { "example": "OK", @@ -160911,1542 +166350,1072 @@ }, "type": "object" }, - "popeyes.Allergens": { + "mlb.statcastHomeRunsDetailsResponseDoc": { "properties": { - "celery": { - "type": "number" - }, - "eggs": { - "type": "number" - }, - "fish": { - "type": "number" - }, - "gluten": { - "type": "number" - }, - "lupin": { - "type": "number" - }, - "milk": { - "type": "number" - }, - "mustard": { - "type": "number" - }, - "peanuts": { - "type": "number" - }, - "sesame": { - "type": "number" + "cat": { + "example": "adj_xhr", + "type": "string" }, - "shellfish": { - "type": "number" + "player_id": { + "example": "691718", + "type": "string" }, - "soy": { - "type": "number" + "player_type": { + "example": "Batter", + "type": "string" }, - "sulphur_dioxide": { - "type": "number" + "plays": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "tree_nuts": { - "type": "number" + "total": { + "example": 61, + "type": "integer" }, - "wheat": { - "type": "number" + "year": { + "example": "2026", + "type": "string" } }, "type": "object" }, - "popeyes.DayHours": { + "mlb.statcastHomeRunsResponseDoc": { "properties": { - "close": { - "example": "23:00:00", - "type": "string" - }, - "day": { - "example": "monday", + "board": { + "example": "home-runs", "type": "string" }, - "open": { - "example": "07:00:00", - "type": "string" - } - }, - "type": "object" - }, - "popeyes.FAQEntry": { - "properties": { - "answer": { - "description": "Answer is the FAQ's own answer copy, plain-text extracted from\nPortable Text (links are dropped -- this is a display string, not a\nre-editable document).", + "cat": { + "example": "adj_xhr", "type": "string" }, - "id": { - "example": "032999c6-ba27-4f8e-b20e-a4cb28e3c37c", + "min": { + "example": "10", "type": "string" }, - "question": { - "example": "How do I remove items from my cart?", + "player_type": { + "example": "Batter", "type": "string" - } - }, - "type": "object" - }, - "popeyes.FAQResponse": { - "properties": { - "count": { - "example": 20, - "type": "integer" }, - "entries": { + "rows": { "items": { - "$ref": "#/definitions/popeyes.FAQEntry" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "fetched_at": { + "sort": { + "example": "xhr", "type": "string" }, - "has_more": { - "description": "HasMore is a paging heuristic -- see OffersResponse.HasMore.", - "example": true, - "type": "boolean" + "sort_dir": { + "example": "desc", + "type": "string" }, - "source_url": { + "team": { + "example": "112", + "type": "string" + }, + "total": { + "example": 49, + "type": "integer" + }, + "year": { + "example": "2026", "type": "string" } }, "type": "object" }, - "popeyes.LocationResponse": { + "mlb.statcastParkFactorsResponseDoc": { "properties": { - "fetched_at": { + "board": { + "example": "statcast-park-factors", "type": "string" }, - "restaurant": { - "$ref": "#/definitions/popeyes.Restaurant" + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "source_url": { + "total": { + "example": 29, + "type": "integer" + }, + "type": { + "example": "year", "type": "string" } }, "type": "object" }, - "popeyes.LocationsResponse": { + "mlb.statcastPercentileResponseDoc": { "properties": { - "count": { - "example": 20, - "type": "integer" + "board": { + "example": "percentile-rankings", + "type": "string" }, "fetched_at": { "type": "string" }, - "has_more": { - "example": true, - "type": "boolean" + "filters": { + "items": { + "$ref": "#/definitions/mlb.StatcastPercentileFilter" + }, + "type": "array" }, - "restaurants": { + "limit": { + "example": 100, + "type": "integer" + }, + "offset": { + "example": 0, + "type": "integer" + }, + "rows": { "items": { - "$ref": "#/definitions/popeyes.Restaurant" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, + "sort": { + "example": "percent_rank_xwoba", + "type": "string" + }, + "sort_dir": { + "example": "desc", + "type": "string" + }, "source_url": { "type": "string" }, - "total_count": { - "description": "TotalCount is how many restaurants matched upstream; it can exceed\nCount when more results exist than max_results asked for.", - "example": 236, + "team": { + "example": "147", + "type": "string" + }, + "total": { + "example": 28, "type": "integer" + }, + "type": { + "example": "batter", + "type": "string" + }, + "year": { + "example": "2026", + "type": "string" } }, "type": "object" }, - "popeyes.MenuCategory": { + "mlb.statcastPitchArsenalDetailsResponseDoc": { "properties": { - "featured": { - "type": "boolean" + "pitch_type": { + "example": "FF", + "type": "string" }, - "id": { + "player_id": { + "example": "592332", "type": "string" }, - "items": { + "player_type": { + "example": "pitcher", + "type": "string" + }, + "plays": { "items": { - "$ref": "#/definitions/popeyes.MenuItem" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "name": { - "example": "Chicken Wraps", + "total": { + "example": 416, + "type": "integer" + }, + "year": { + "example": "2026", "type": "string" } }, "type": "object" }, - "popeyes.MenuItem": { + "mlb.statcastPitchArsenalResponseDoc": { "properties": { - "allergens": { - "$ref": "#/definitions/popeyes.Allergens" - }, - "id": { - "example": "item_103182", + "board": { + "example": "pitch-arsenal-stats", "type": "string" }, - "image_url": { + "min_pa": { + "example": "1", "type": "string" }, - "name": { - "example": "Cheese Bites", + "min_pitches": { + "example": "q", "type": "string" }, - "nutrition": { - "$ref": "#/definitions/popeyes.Nutrition" + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "price": { - "$ref": "#/definitions/popeyes.Price" + "total": { + "example": 523, + "type": "integer" }, "type": { - "example": "ITEM", + "example": "pitcher", + "type": "string" + }, + "year": { + "example": "2026", "type": "string" } }, "type": "object" }, - "popeyes.MenuResponse": { + "mlb.statcastPitchArsenalsResponseDoc": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/popeyes.MenuCategory" - }, - "type": "array" + "board": { + "example": "pitch-arsenals", + "type": "string" }, - "currency": { - "example": "USD", + "hand": { + "example": "R", "type": "string" }, - "fetched_at": { + "min_pitches": { + "example": "q", "type": "string" }, - "item_count": { - "example": 120, + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "total": { + "example": 231, "type": "integer" }, - "source_url": { + "type": { + "example": "avg_speed", "type": "string" }, - "store_id": { - "example": "14156", + "year": { + "example": "2026", "type": "string" } }, "type": "object" }, - "popeyes.Nutrition": { + "mlb.statcastPitchMovementResponseDoc": { "properties": { - "calories": { - "example": 560, - "type": "number" - }, - "carbohydrates_g": { - "example": 23, - "type": "number" - }, - "cholesterol_mg": { - "example": 75, - "type": "number" - }, - "fat_g": { - "example": 44, - "type": "number" - }, - "fiber_g": { - "example": 2, - "type": "number" + "board": { + "example": "pitch-movement", + "type": "string" }, - "proteins_g": { - "example": 17, - "type": "number" + "hand": { + "example": "R", + "type": "string" }, - "saturated_fat_g": { - "type": "number" + "min": { + "example": "q", + "type": "string" }, - "serving_weight_g": { - "type": "number" + "pitch_type": { + "example": "FF", + "type": "string" }, - "sodium_mg": { - "example": 1470, - "type": "number" + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "sugar_g": { - "example": 2, - "type": "number" + "total": { + "example": 431, + "type": "integer" }, - "trans_fat_g": { - "example": 1, - "type": "number" + "year": { + "example": "2026", + "type": "string" } }, "type": "object" }, - "popeyes.Offer": { + "mlb.statcastPitchTempoPlayerResponseDoc": { "properties": { - "daypart": { - "description": "Daypart restricts the offer to specific times of day (e.g.\n[\"allDay\"]), when Popeyes publishes a restriction.", + "entity_id": { + "example": "608718", + "type": "string" + }, + "game_type": { + "example": "Regular", + "type": "string" + }, + "rows": { "items": { - "type": "string" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "description": { - "description": "Description is the offer's own short copy (e.g. what's included),\nwhen Popeyes publishes one.", - "example": "3 Piece Chicken", + "season_end": { + "example": "2026", "type": "string" }, - "id": { - "example": "00a369e5-1b33-4d35-b153-e372e3ebf17f", + "season_start": { + "example": "2026", "type": "string" }, - "mobile_order_only": { - "description": "MobileOrderOnly is true when the offer is only redeemable through\nPopeyes' own mobile ordering flow.", - "type": "boolean" + "total": { + "example": 10, + "type": "integer" }, - "name": { - "example": "3Pc Signature Chicken for $5", + "type": { + "example": "Pit", + "type": "string" + } + }, + "type": "object" + }, + "mlb.statcastPitchTempoResponseDoc": { + "properties": { + "board": { + "example": "pitch_tempo", "type": "string" }, - "offer_tag": { - "description": "OfferTag is Popeyes' own short badge for the offer's kind (e.g.\nVALUE_DEAL, PERCENTAGE_OFF), when published.", - "example": "VALUE_DEAL", + "game_type": { + "example": "Regular", "type": "string" }, - "price": { - "example": 5, - "type": "number" + "minimum_pitches": { + "example": "q", + "type": "string" }, - "price_cents": { - "description": "PriceCents/Price are the offer's flat price when it has one (e.g. \"3Pc\nSignature Chicken for $5\" prices at 500 cents). A value of 0 does not\nmean free -- it means the offer's discount is not expressed as a flat\nprice (see OfferTag/Name instead, e.g. a percentage-off or BOGO deal).", - "example": 500, - "type": "integer" + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "redemption_type": { - "description": "RedemptionType is how the offer is redeemed -- observed live values\ninclude STANDARD (in-app/online) and PAPER_COUPON.", - "example": "STANDARD", + "season_end": { + "example": "2026", "type": "string" }, - "requires_authentication": { - "description": "RequiresAuthentication is true when the offer's own published rules\nmark it as needing a signed-in Popeyes Rewards account to redeem --\nderived from the offer's rules, not assumed. This build does not\ncall any account/loyalty-scoped API; it only reports what the\noffer's own public CMS record says about itself.", - "type": "boolean" - }, - "section": { - "description": "Section is the offer catalog's own grouping (e.g. \"For Two\"), when\nPopeyes assigns one -- most offers do not have one.", - "example": "For Two", + "season_start": { + "example": "2026", "type": "string" }, - "short_code": { - "description": "ShortCode is the offer's own promo/redemption code, when published.", - "example": "8438", + "total": { + "example": 348, + "type": "integer" + }, + "type": { + "example": "Pit", "type": "string" } }, "type": "object" }, - "popeyes.OffersResponse": { + "mlb.statcastPitchTimerResponseDoc": { "properties": { - "count": { - "example": 20, - "type": "integer" - }, - "fetched_at": { + "board": { + "example": "pitch-timer-infractions", "type": "string" }, - "has_more": { - "description": "HasMore is true when this page returned as many offers as Limit\nasked for, meaning more may exist at the next Offset. Sanity's\nGraphQL API for this dataset does not publish a total count for\nallSystemwideOffers, so this is a paging heuristic, not an exact\ntotal.", - "example": true, - "type": "boolean" - }, - "offers": { + "rows": { "items": { - "$ref": "#/definitions/popeyes.Offer" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "source_url": { + "season": { + "example": "2026", + "type": "string" + }, + "total": { + "example": 30, + "type": "integer" + }, + "type": { + "example": "Team", "type": "string" } }, "type": "object" }, - "popeyes.Price": { + "mlb.statcastPlayerDetailsResponseDoc": { "properties": { - "default": { - "example": 3.99, - "type": "number" - }, - "default_cents": { - "example": 399, + "code": { + "example": 200, "type": "integer" }, - "max": { - "type": "number" + "data": { + "$ref": "#/definitions/mlb.StatcastPlayerDetailsResponse" }, - "max_cents": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "mlb.statcastResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "min": { - "type": "number" + "data": { + "$ref": "#/definitions/mlb.StatcastResponse" }, - "min_cents": { - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "popeyes.Promotion": { + "mlb.statcastRollingResponseDoc": { "properties": { - "bonus_points": { - "description": "BonusPoints is set for a flat bonus-points promotion.", - "example": 300, - "type": "integer" - }, - "end_date": { - "example": "2021-08-16T04:00:00.000Z", + "fetched_at": { "type": "string" }, - "id": { - "example": "11d41e3c-75b5-458c-8166-7cdfb20a635a", - "type": "string" + "groups": { + "items": { + "$ref": "#/definitions/mlb.StatcastRollingGroup" + }, + "type": "array" }, - "message": { - "description": "Message is the promotion's own display copy, when Popeyes publishes\none distinct from Name.", - "example": "Get Double Bonus Points on Your Cart, minimum $20", - "type": "string" + "limit": { + "example": 100, + "type": "integer" }, - "name": { - "description": "Name is the promotion's own internal/public label.", - "example": "Get Double Bonus Points on Your Cart, minimum $20", + "metric": { + "example": "xwoba", "type": "string" }, - "points_multiplier": { - "description": "PointsMultiplier is set for a \"Nx points\" style promotion (e.g. 2 for\ndouble points); mutually exclusive in practice with BonusPoints.", - "example": 2, - "type": "number" + "offset": { + "example": 0, + "type": "integer" }, - "start_date": { - "description": "StartDate/EndDate bound the promotion's active window, when Popeyes\npublishes one -- both empty means no published window restriction.", - "example": "2021-08-02T04:00:00.000Z", + "source_url": { "type": "string" + }, + "total": { + "example": 2509, + "type": "integer" } }, "type": "object" }, - "popeyes.PromotionsResponse": { + "mlb.statcastRunValueResponseDoc": { "properties": { - "count": { - "example": 20, - "type": "integer" - }, - "fetched_at": { + "board": { + "example": "swing-take", "type": "string" }, - "has_more": { - "description": "HasMore is a paging heuristic -- see OffersResponse.HasMore.", - "example": true, - "type": "boolean" + "group": { + "example": "Batter", + "type": "string" }, - "promotions": { + "rows": { "items": { - "$ref": "#/definitions/popeyes.Promotion" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "source_url": { + "total": { + "example": 300, + "type": "integer" + }, + "year": { + "example": "2026", "type": "string" } }, "type": "object" }, - "popeyes.Quest": { + "mlb.statcastRunningGameDetailsResponseDoc": { "properties": { - "bonus_points": { - "description": "BonusPoints is the loyalty points awarded on completion, when the\nincentive is points-based.", - "example": 550, + "code": { + "example": 200, "type": "integer" }, - "id": { - "example": "38fe1c9c-6c2b-4d1b-ab86-7bf61105fdfb", - "type": "string" + "data": { + "$ref": "#/definitions/mlb.StatcastRunningGameDetailsResponse" }, - "incentive_type": { - "description": "IncentiveType is the reward mechanic -- observed live value is\nBONUS_POINTS; kept as a raw pass-through string since other values may\nexist that this pass did not observe.", - "example": "BONUS_POINTS", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "mlb.statcastRunningGameResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "is_sequential": { - "description": "IsSequential is true when the quest's steps must be completed in\norder.", - "type": "boolean" - }, - "must_activate_by": { - "description": "MustActivateBy is the last date a member could opt in to this quest,\nwhen Popeyes publishes one.", - "type": "string" + "data": { + "$ref": "#/definitions/mlb.StatcastRunningGameResponse" }, - "name": { - "description": "Name is the quest's own public display copy.", - "example": "July Challenge: Make Two Purchases, Get FREE Chicken Sandwich in the form of 550 Bonus Points", + "msg": { + "example": "OK", "type": "string" - }, - "on_distinct_purchases": { - "description": "OnDistinctPurchases is true when each qualifying step must be a\nseparate purchase (observed true on every live quest sampled).", - "type": "boolean" - }, - "step_count": { - "description": "StepCount is how many steps make up the quest. This endpoint does not\nexpose each step's own purchase-requirement rules.", - "type": "integer" } }, "type": "object" }, - "popeyes.QuestsResponse": { + "mlb.statcastSprintSpeedResponseDoc": { "properties": { - "count": { - "example": 10, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" + "data": { + "$ref": "#/definitions/mlb.StatcastSprintSpeedResponse" }, - "has_more": { - "description": "HasMore is a paging heuristic -- see OffersResponse.HasMore.", - "example": false, - "type": "boolean" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "mlb.statcastSprintSpeedTeamsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "quests": { - "items": { - "$ref": "#/definitions/popeyes.Quest" - }, - "type": "array" + "data": { + "$ref": "#/definitions/mlb.StatcastSprintSpeedTeamsResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "popeyes.Restaurant": { + "mlb.statcastSwingPathResponseDoc": { "properties": { - "address": { - "example": "111 Fulton St", + "board": { + "example": "swing-path-attack-angle", "type": "string" }, - "address2": { + "game_type": { + "example": "Regular", "type": "string" }, - "city": { - "example": "New York", - "type": "string" + "rows": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" }, - "country": { - "example": "USA", + "season_end": { + "example": "2026", "type": "string" }, - "has_breakfast": { - "example": false, - "type": "boolean" - }, - "has_delivery": { - "example": true, - "type": "boolean" - }, - "has_drive_thru": { - "example": false, - "type": "boolean" - }, - "has_playground": { - "example": false, - "type": "boolean" - }, - "has_takeout": { - "example": true, - "type": "boolean" - }, - "has_wifi": { - "example": false, - "type": "boolean" - }, - "hours": { - "$ref": "#/definitions/popeyes.RestaurantHours" - }, - "id": { - "example": "restaurant_242928", + "season_start": { + "example": "2026", "type": "string" }, - "is_dark_kitchen": { - "example": false, - "type": "boolean" - }, - "is_halal": { - "example": false, - "type": "boolean" - }, - "latitude": { - "example": 40.709873, - "type": "number" - }, - "longitude": { - "example": -74.006601, - "type": "number" - }, - "name": { - "example": "111 Fulton St New York, New York 10038 - USA", - "type": "string" + "total": { + "example": 203, + "type": "integer" }, - "operator": { - "description": "Operator is the franchise group operating this location, when RBI\npublishes one.", + "type": { + "example": "batter", "type": "string" + } + }, + "type": "object" + }, + "mlb.statcastSwingTimingDetailsResponseDoc": { + "properties": { + "details": { + "additionalProperties": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "type": "object" }, - "phone": { - "example": "929-579-0553", + "fetched_at": { "type": "string" }, - "postal_code": { - "example": "10038", + "row_id": { "type": "string" }, - "state": { - "example": "NY", + "source_url": { "type": "string" }, - "store_id": { - "example": "14156", - "type": "string" + "total": { + "type": "integer" }, - "website_url": { - "example": "https://www.popeyes.com/store-locator/store/restaurant_242928", + "type": { "type": "string" } }, "type": "object" }, - "popeyes.RestaurantHours": { + "mlb.statcastSwingTimingResponseDoc": { "properties": { - "curbside": { + "board": { + "example": "swing-timing-miss-distance", + "type": "string" + }, + "game_types": { + "example": [ + "R" + ], "items": { - "$ref": "#/definitions/popeyes.DayHours" + "type": "string" }, "type": "array" }, - "delivery": { + "rows": { "items": { - "$ref": "#/definitions/popeyes.DayHours" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, - "dining_room": { + "seasons": { + "example": [ + "2026" + ], "items": { - "$ref": "#/definitions/popeyes.DayHours" + "type": "string" }, "type": "array" }, - "drive_thru": { + "splits": { + "example": [ + "api_pitch_type_group09" + ], "items": { - "$ref": "#/definitions/popeyes.DayHours" + "type": "string" }, "type": "array" + }, + "total": { + "example": 926, + "type": "integer" + }, + "type": { + "example": "batter", + "type": "string" } }, "type": "object" }, - "popeyes.Reward": { + "mlb.statcastTopPerformersResponseDoc": { "properties": { - "id": { - "example": "09acd09f-2ca5-4259-934c-0345356b2bb0", - "type": "string" - }, - "incentive_not_in_menu": { - "description": "IncentiveNotInMenu is true when Popeyes marks the reward's item as\nnot otherwise purchasable on the regular menu (a rewards-exclusive\nitem or bundle).", - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "mobile_order_only": { - "description": "MobileOrderOnly is true when the reward is only redeemable through\nPopeyes' own mobile ordering flow, when Popeyes publishes that\nrestriction.", - "type": "boolean" + "data": { + "$ref": "#/definitions/mlb.StatcastTopPerformersResponse" }, - "name": { - "description": "Name is the reward's own public display copy -- typically the menu\nitem or combo name it redeems.", - "example": "Large Mashed Potatoes", + "msg": { + "example": "OK", "type": "string" - }, - "points": { - "description": "Points is the loyalty points cost to redeem, from the reward's own\nLoyaltyPoints rule.", - "example": 600, - "type": "integer" } }, "type": "object" }, - "popeyes.RewardsResponse": { + "mlb.statcastYearToYearResponseDoc": { "properties": { - "count": { - "example": 20, - "type": "integer" + "board": { + "example": "year-to-year", + "type": "string" }, "fetched_at": { "type": "string" }, - "has_more": { - "description": "HasMore is a paging heuristic -- see OffersResponse.HasMore.", - "example": true, - "type": "boolean" + "group": { + "example": "Batter", + "type": "string" }, - "rewards": { + "limit": { + "example": 100, + "type": "integer" + }, + "next_year": { + "example": 2026, + "type": "integer" + }, + "offset": { + "example": 0, + "type": "integer" + }, + "rows": { "items": { - "$ref": "#/definitions/popeyes.Reward" + "additionalProperties": {}, + "type": "object" }, "type": "array" }, + "sort": { + "example": "hard_hit_percent_diff_2025", + "type": "string" + }, + "sort_dir": { + "example": "desc", + "type": "string" + }, "source_url": { "type": "string" + }, + "total": { + "example": 177, + "type": "integer" + }, + "type": { + "example": "hard_hit_percent", + "type": "string" + }, + "year": { + "example": "2025", + "type": "string" } }, "type": "object" }, - "popeyes.faqResponseDoc": { + "mlb.statsResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/popeyes.FAQResponse" + "$ref": "#/definitions/mlb.StatsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "popeyes.locationResponseDoc": { + "mlb.teamsResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/popeyes.LocationResponse" - }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "popeyes.locationsResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" - }, - "data": { - "$ref": "#/definitions/popeyes.LocationsResponse" - }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "popeyes.menuResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" - }, - "data": { - "$ref": "#/definitions/popeyes.MenuResponse" + "$ref": "#/definitions/mlb.TeamsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "popeyes.offersResponseDoc": { + "mlb.transactionsResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/popeyes.OffersResponse" + "$ref": "#/definitions/mlb.TransactionsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "type": "string" } }, "type": "object" }, - "popeyes.promotionsResponseDoc": { + "modaoperandi.CategoriesResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" - }, - "data": { - "$ref": "#/definitions/popeyes.PromotionsResponse" + "availability": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "popeyes.questsResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "categories": { + "items": { + "$ref": "#/definitions/modaoperandi.Category" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/popeyes.QuestsResponse" + "colors": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "popeyes.rewardsResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "designers": { + "items": { + "$ref": "#/definitions/modaoperandi.Designer" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/popeyes.RewardsResponse" + "gender": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "popularTrend.CountryIndustryMeta": { - "properties": { - "country": { - "description": "Countries TikTok Creative Center offers as filters, each with its code and name.", + "sizes": { "items": { - "$ref": "#/definitions/popularTrend.CountryIndustryMetaItem" + "type": "string" }, "type": "array" }, - "industry": { - "description": "Industries TikTok Creative Center offers as filters, each with its id and name.", + "sorts": { "items": { - "$ref": "#/definitions/popularTrend.CountryIndustryMetaItem" + "type": "string" }, "type": "array" } }, "type": "object" }, - "popularTrend.CountryIndustryMetaItem": { + "modaoperandi.Category": { "properties": { - "id": { - "description": "Country code or industry id, for example `AR` or `22000000000`.", + "name": { "type": "string" }, - "value": { - "description": "Display name of the country or industry.", + "slug": { "type": "string" - } - }, - "type": "object" - }, - "popularTrend.TopAdsAnalysisPoint": { - "properties": { - "second": { - "description": "Second of the ad video the point refers to.", - "type": "integer" }, - "value": { - "description": "Value of the selected metric at that second.", - "type": "number" - } - }, - "type": "object" - }, - "popularTrend.TopAdsAnalysisResp": { - "properties": { - "code": { + "total_items": { "type": "integer" }, - "data": { - "description": "Time analysis of the ad for the chosen metric, with its percentile, chart points and highlighted seconds.", - "properties": { - "analysis": { - "items": { - "$ref": "#/definitions/popularTrend.TopAdsAnalysisPoint" - }, - "type": "array" - }, - "duration": { - "type": "number" - }, - "highlight": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "metric": { - "type": "string" - }, - "metric_label": { - "type": "string" - }, - "percentile": { - "type": "number" - }, - "percentile_data": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "type": "object" - }, - "percentile_metric": { - "type": "string" - }, - "period_type": { - "type": "integer" - } - }, - "type": "object" - }, - "msg": { - "type": "string" - }, - "request_id": { - "description": "Request id returned by TikTok Creative Center.", + "url": { "type": "string" } }, "type": "object" }, - "popularTrend.TopAdsDetailResp": { + "modaoperandi.Designer": { "properties": { - "code": { - "type": "integer" - }, - "data": { - "allOf": [ - { - "$ref": "#/definitions/popularTrend.TopAdsMaterial" - } - ], - "description": "Details of the requested top ad." - }, - "msg": { - "type": "string" - }, - "request_id": { - "description": "Request id returned by TikTok Creative Center.", + "name": { "type": "string" - } - }, - "type": "object" - }, - "popularTrend.TopAdsFilterItem": { - "properties": { - "has_conversion": { - "description": "Whether the objective is one that tracks conversions. Only set on objective options.", - "type": "boolean" - }, - "id": { - "description": "Filter option id in TikTok's own format, a string or a number depending on the filter.", - "type": "object" }, - "label": { - "description": "Label key TikTok uses for the option.", + "slug": { "type": "string" }, - "parent_id": { - "description": "Id of the parent option, for example the top-level industry of a sub-industry.", - "type": "object" - }, - "value": { - "description": "Display value of the option, always returned as a string.", - "type": "string" + "total_items": { + "type": "integer" } }, "type": "object" }, - "popularTrend.TopAdsFiltersResp": { + "modaoperandi.DesignersResponse": { "properties": { - "code": { + "count": { "type": "integer" }, - "data": { - "description": "Filter options available for top ads, grouped by filter name.", - "properties": { - "ad_format": { - "items": { - "$ref": "#/definitions/popularTrend.TopAdsFilterItem" - }, - "type": "array" - }, - "ad_language": { - "items": { - "$ref": "#/definitions/popularTrend.TopAdsFilterItem" - }, - "type": "array" - }, - "analysis_metric": { - "items": { - "$ref": "#/definitions/popularTrend.TopAdsFilterItem" - }, - "type": "array" - }, - "country": { - "items": { - "$ref": "#/definitions/popularTrend.TopAdsFilterItem" - }, - "type": "array" - }, - "duration": { - "items": { - "$ref": "#/definitions/popularTrend.TopAdsFilterItem" - }, - "type": "array" - }, - "industry": { - "items": { - "$ref": "#/definitions/popularTrend.TopAdsFilterItem" - }, - "type": "array" - }, - "like": { - "items": { - "$ref": "#/definitions/popularTrend.TopAdsFilterItem" - }, - "type": "array" - }, - "objective": { - "items": { - "$ref": "#/definitions/popularTrend.TopAdsFilterItem" - }, - "type": "array" - }, - "order_by": { - "items": { - "$ref": "#/definitions/popularTrend.TopAdsFilterItem" - }, - "type": "array" - }, - "pattern_label": { - "items": { - "$ref": "#/definitions/popularTrend.TopAdsFilterItem" - }, - "type": "array" - }, - "period": { - "items": { - "$ref": "#/definitions/popularTrend.TopAdsFilterItem" - }, - "type": "array" - } + "designers": { + "items": { + "$ref": "#/definitions/modaoperandi.Designer" }, - "type": "object" - }, - "msg": { - "type": "string" + "type": "array" }, - "request_id": { - "description": "Request id returned by TikTok Creative Center.", + "gender": { "type": "string" } }, "type": "object" }, - "popularTrend.TopAdsListResp": { + "modaoperandi.Detail": { "properties": { - "code": { - "type": "integer" - }, - "data": { - "description": "Page of top ads with its paging information.", - "properties": { - "materials": { - "items": { - "$ref": "#/definitions/popularTrend.TopAdsMaterial" - }, - "type": "array" - }, - "pagination": { - "$ref": "#/definitions/popularTrend.TopAdsPagination" - } - }, - "type": "object" - }, - "msg": { + "availability": { "type": "string" }, - "request_id": { - "description": "Request id returned by TikTok Creative Center.", + "color": { "type": "string" - } - }, - "type": "object" - }, - "popularTrend.TopAdsLocationInfoResp": { - "properties": { - "code": { - "type": "integer" - }, - "data": { - "description": "Initial country and industry targeting that TikTok Creative Center infers.", - "properties": { - "first_industry": { - "type": "object" - }, - "initial_country": { - "items": { - "type": "string" - }, - "type": "array" - }, - "l1_industry": { - "type": "integer" - }, - "l2_industry": { - "type": "integer" - }, - "second_industry": { - "type": "object" - } - }, - "type": "object" }, - "msg": { + "currency": { "type": "string" }, - "request_id": { - "description": "Request id returned by TikTok Creative Center.", + "description": { "type": "string" - } - }, - "type": "object" - }, - "popularTrend.TopAdsLocationsResp": { - "properties": { - "code": { - "type": "integer" - }, - "data": { - "description": "Countries available for top ads targeting.", - "properties": { - "country": { - "items": { - "$ref": "#/definitions/popularTrend.TopAdsFilterItem" - }, - "type": "array" - } - }, - "type": "object" }, - "msg": { + "designer": { "type": "string" }, - "request_id": { - "description": "Request id returned by TikTok Creative Center.", - "type": "string" - } - }, - "type": "object" - }, - "popularTrend.TopAdsMaterial": { - "properties": { - "ad_title": { - "description": "Title of the ad.", + "details": { "type": "string" }, - "brand_name": { - "description": "Name of the advertiser brand.", + "id": { "type": "string" }, - "comment": { - "description": "Number of comments on the ad.", - "type": "integer" - }, - "cost": { - "description": "Cost figure for the ad as TikTok Creative Center reports it.", - "type": "integer" - }, - "country_code": { - "description": "Country codes the ad runs in.", + "images": { "items": { "type": "string" }, "type": "array" }, - "ctr": { - "description": "Click-through rate of the ad as TikTok Creative Center reports it.", - "type": "number" - }, - "favorite": { - "description": "Whether the ad is marked as a favorite.", - "type": "boolean" - }, - "has_summary": { - "description": "Whether TikTok has an ad summary available for the ad.", + "in_stock": { "type": "boolean" }, - "highlight": { - "description": "Highlight note TikTok attaches to the ad.", - "type": "string" - }, - "highlight_text": { - "description": "Text shown for the ad's highlight.", - "type": "string" - }, - "id": { - "description": "Top Ads material id. Use it with the detail, analysis and recommend endpoints.", - "type": "string" - }, - "industry_key": { - "description": "Key of the industry the ad is classified under.", + "name": { "type": "string" }, - "is_search": { - "description": "Search flag TikTok sets on the ad.", - "type": "boolean" + "price": { + "type": "number" }, - "keyword_list": { - "description": "Keywords associated with the ad.", + "sizes": { "items": { "type": "string" }, "type": "array" }, - "landing_page": { - "description": "URL of the ad's landing page.", - "type": "string" - }, - "like": { - "description": "Number of likes on the ad.", - "type": "integer" - }, - "objective_key": { - "description": "Key of the campaign objective of the ad.", + "url": { "type": "string" + } + }, + "type": "object" + }, + "modaoperandi.Facets": { + "properties": { + "availability": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" }, - "objectives": { - "description": "Campaign objectives of the ad, each with its id, value and label.", + "categories": { "items": { - "$ref": "#/definitions/popularTrend.TopAdsFilterItem" + "$ref": "#/definitions/modaoperandi.Category" }, "type": "array" }, - "pattern_label": { - "description": "Creative pattern labels assigned to the ad.", + "colors": { "items": { - "$ref": "#/definitions/popularTrend.TopAdsFilterItem" + "type": "string" }, "type": "array" }, - "share": { - "description": "Number of shares of the ad.", - "type": "integer" - }, - "source": { - "description": "Source label of the ad as TikTok Creative Center shows it.", - "type": "string" - }, - "source_key": { - "description": "Numeric key of the ad's source.", - "type": "integer" - }, - "video_info": { - "allOf": [ - { - "$ref": "#/definitions/popularTrend.TopAdsVideoInfo" - } - ], - "description": "Video file details of the ad." - }, - "voice_over": { - "description": "Whether the ad video has a voice-over.", - "type": "boolean" - } - }, - "type": "object" - }, - "popularTrend.TopAdsPagination": { - "properties": { - "has_more": { - "description": "Whether more pages of ads are available.", - "type": "boolean" - }, - "page": { - "description": "Page number returned.", - "type": "integer" - }, - "size": { - "description": "Number of ads per page.", - "type": "integer" + "designers": { + "items": { + "$ref": "#/definitions/modaoperandi.Designer" + }, + "type": "array" }, - "total": { - "description": "Total number of matching ads. Set on spotlight responses.", - "type": "integer" + "sizes": { + "items": { + "type": "string" + }, + "type": "array" }, - "total_count": { - "description": "Total number of matching ads. Set on list responses.", - "type": "integer" + "sorts": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "popularTrend.TopAdsRecommendResp": { + "modaoperandi.Product": { "properties": { - "code": { - "type": "integer" - }, - "data": { - "description": "Ads related to the requested ad.", - "properties": { - "materials": { - "items": { - "$ref": "#/definitions/popularTrend.TopAdsMaterial" - }, - "type": "array" - } - }, - "type": "object" - }, - "msg": { + "availability": { "type": "string" }, - "request_id": { - "description": "Request id returned by TikTok Creative Center.", + "color": { "type": "string" - } - }, - "type": "object" - }, - "popularTrend.TopAdsSafetyResp": { - "properties": { - "code": { - "type": "integer" - }, - "data": { - "description": "Creative Center safety configuration flags for its search surfaces.", - "properties": { - "cc_banner_key": { - "type": "string" - }, - "creator_search": { - "type": "integer" - }, - "hashtag_search": { - "type": "integer" - }, - "keyword_search": { - "type": "integer" - }, - "sound_search": { - "type": "integer" - }, - "top_ads_search": { - "type": "integer" - } - }, - "type": "object" }, - "msg": { + "currency": { "type": "string" }, - "request_id": { - "description": "Request id returned by TikTok Creative Center.", + "designer": { "type": "string" - } - }, - "type": "object" - }, - "popularTrend.TopAdsSpotlightResp": { - "properties": { - "code": { - "type": "integer" }, - "data": { - "description": "Page of spotlight top ads with its paging information.", - "properties": { - "materials": { - "items": { - "$ref": "#/definitions/popularTrend.TopAdsMaterial" - }, - "type": "array" - }, - "pagination": { - "$ref": "#/definitions/popularTrend.TopAdsPagination" - } - }, - "type": "object" - }, - "msg": { + "id": { "type": "string" }, - "request_id": { - "description": "Request id returned by TikTok Creative Center.", + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "popularTrend.TopAdsSuggestionsResp": { - "properties": { - "code": { - "type": "integer" }, - "data": { - "description": "Suggested search queries for top ads.", - "properties": { - "query": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" + "in_stock": { + "type": "boolean" }, - "msg": { + "name": { "type": "string" }, - "request_id": { - "description": "Request id returned by TikTok Creative Center.", + "price": { + "type": "number" + }, + "url": { "type": "string" } }, "type": "object" }, - "popularTrend.TopAdsVideoInfo": { + "modaoperandi.SearchResponse": { "properties": { - "cover": { - "description": "URL of the video cover image.", + "category": { "type": "string" }, - "duration": { - "description": "Video length in seconds.", - "type": "number" - }, - "height": { - "description": "Video height as TikTok reports it.", + "count": { "type": "integer" }, - "vid": { - "description": "TikTok video id.", - "type": "string" + "facets": { + "$ref": "#/definitions/modaoperandi.Facets" }, - "video_url": { - "additionalProperties": { - "type": "string" - }, - "description": "Video file URLs keyed by resolution label, for example `720p`.", - "type": "object" + "gender": { + "type": "string" }, - "width": { - "description": "Video width as TikTok reports it.", - "type": "integer" - } - }, - "type": "object" - }, - "populartrend.countryIndustryMetaResponseDoc": { - "properties": { - "code": { - "example": 200, + "limit": { "type": "integer" }, - "data": { - "$ref": "#/definitions/popularTrend.CountryIndustryMeta" - }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "populartrend.topAdsAnalysisResponseDoc": { - "properties": { - "code": { - "example": 200, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/popularTrend.TopAdsAnalysisResp" + "products": { + "items": { + "$ref": "#/definitions/modaoperandi.Product" + }, + "type": "array" }, - "msg": { - "example": "OK", + "query": { "type": "string" - } - }, - "type": "object" - }, - "populartrend.topAdsDetailResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/popularTrend.TopAdsDetailResp" - }, - "msg": { - "example": "OK", + "source_url": { "type": "string" - } - }, - "type": "object" - }, - "populartrend.topAdsFiltersResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/popularTrend.TopAdsFiltersResp" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "populartrend.topAdsListResponseDoc": { - "properties": { - "code": { - "example": 200, + "total": { "type": "integer" - }, - "data": { - "$ref": "#/definitions/popularTrend.TopAdsListResp" - }, - "msg": { - "example": "OK", - "type": "string" } }, "type": "object" }, - "populartrend.topAdsLocationInfoResponseDoc": { + "modaoperandi.categoriesDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/popularTrend.TopAdsLocationInfoResp" + "$ref": "#/definitions/modaoperandi.CategoriesResponse" }, "msg": { "example": "OK", @@ -162455,14 +167424,14 @@ }, "type": "object" }, - "populartrend.topAdsLocationsResponseDoc": { + "modaoperandi.designersDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/popularTrend.TopAdsLocationsResp" + "$ref": "#/definitions/modaoperandi.DesignersResponse" }, "msg": { "example": "OK", @@ -162471,14 +167440,14 @@ }, "type": "object" }, - "populartrend.topAdsRecommendResponseDoc": { + "modaoperandi.productDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/popularTrend.TopAdsRecommendResp" + "$ref": "#/definitions/modaoperandi.Detail" }, "msg": { "example": "OK", @@ -162487,14 +167456,14 @@ }, "type": "object" }, - "populartrend.topAdsSafetyResponseDoc": { + "modaoperandi.searchDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/popularTrend.TopAdsSafetyResp" + "$ref": "#/definitions/modaoperandi.SearchResponse" }, "msg": { "example": "OK", @@ -162503,1133 +167472,680 @@ }, "type": "object" }, - "populartrend.topAdsSpotlightResponseDoc": { + "modrinth.ArrayResponseDoc": { "properties": { "code": { - "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/popularTrend.TopAdsSpotlightResp" + "items": {}, + "type": "array" }, "msg": { - "example": "OK", "type": "string" } }, "type": "object" }, - "populartrend.topAdsSuggestionsResponseDoc": { + "modrinth.FiltersRequest": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/popularTrend.TopAdsSuggestionsResp" + "game_versions": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "loaders": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "poshmark.BrandDirectoryEntry": { + "modrinth.HashFilter": { "properties": { - "aliases": { + "game_versions": { "items": { "type": "string" }, "type": "array" }, - "id": { - "example": "4be6779b4630c50002000039", - "type": "string" - }, - "logo_url": { - "type": "string" - }, - "name": { - "example": "Nike", + "hash": { "type": "string" }, - "slug": { - "example": "Nike", - "type": "string" + "loaders": { + "items": { + "type": "string" + }, + "type": "array" } }, + "required": [ + "hash" + ], "type": "object" }, - "poshmark.BrandResponse": { + "modrinth.HashUpdatesRequest": { "properties": { - "has_more": { - "example": true, - "type": "boolean" + "algorithm": { + "enum": [ + "sha1", + "sha512" + ], + "type": "string" }, - "listings": { + "game_versions": { "items": { - "$ref": "#/definitions/poshmark.Listing" + "type": "string" }, "type": "array" }, - "next_max_id": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "total": { - "example": 210000, - "type": "integer" - } - }, - "type": "object" - }, - "poshmark.BrandsResponse": { - "properties": { - "brands": { + "hashes": { "items": { - "$ref": "#/definitions/poshmark.BrandDirectoryEntry" + "type": "string" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "total": { - "example": 29887, - "type": "integer" + "loaders": { + "items": { + "type": "string" + }, + "type": "array" } }, + "required": [ + "hashes" + ], "type": "object" }, - "poshmark.CategoriesResponse": { + "modrinth.HashesRequest": { "properties": { - "departments": { + "algorithm": { + "enum": [ + "sha1", + "sha512" + ], + "type": "string" + }, + "hashes": { "items": { - "$ref": "#/definitions/poshmark.DepartmentTaxonomy" + "type": "string" }, "type": "array" } }, + "required": [ + "hashes" + ], "type": "object" }, - "poshmark.CategoryResponse": { + "modrinth.IndividualUpdatesRequest": { "properties": { - "has_more": { - "description": "Whether more listings are available after this page.", - "example": true, - "type": "boolean" + "algorithm": { + "enum": [ + "sha1", + "sha512" + ], + "type": "string" }, - "listings": { - "description": "Listings on this page of the category.", + "hashes": { "items": { - "$ref": "#/definitions/poshmark.Listing" + "$ref": "#/definitions/modrinth.HashFilter" }, "type": "array" - }, - "next_max_id": { - "description": "Cursor to pass as `max_id` to get the next page. Omitted on the last page.", - "type": "string" - }, - "source_url": { - "description": "URL the data was read from.", - "type": "string" - }, - "total": { - "description": "Total number of listings Poshmark reports for the category.", - "example": 84000, - "type": "integer" } }, + "required": [ + "hashes" + ], "type": "object" }, - "poshmark.CategoryTaxonomyEntry": { + "modrinth.ObjectResponseDoc": { "properties": { - "id": { - "example": "00268975d97b4e80ef00a955", - "type": "string" + "code": { + "type": "integer" }, - "name": { - "example": "Shoes", - "type": "string" + "data": { + "additionalProperties": true, + "type": "object" }, - "path": { - "description": "Path is the exact value the category endpoint's path parameter\nexpects, e.g. \"Women-Shoes\".", - "example": "Women-Shoes", + "msg": { "type": "string" } }, "type": "object" }, - "poshmark.ClosetResponse": { + "modrinth.SearchV3BodyRequest": { "properties": { - "has_more": { - "example": true, - "type": "boolean" - }, - "listings": { - "items": { - "$ref": "#/definitions/poshmark.Listing" - }, - "type": "array" - }, - "next_max_id": { + "facets": { "type": "string" }, - "seller": { - "$ref": "#/definitions/poshmark.Seller" - }, - "source_url": { + "filters": { "type": "string" }, - "total_count": { - "example": 107, - "type": "integer" - } - }, - "type": "object" - }, - "poshmark.Comment": { - "properties": { - "comment": { - "description": "Text of the comment as posted on the listing.", - "example": "Hi can you tell me the width of the waist?", + "index": { + "enum": [ + "relevance", + "downloads", + "follows", + "newest", + "updated", + "date_created", + "date_modified", + "minecraft_java_server.verified_plays_2w", + "minecraft_java_server.ping.data.players_online" + ], "type": "string" }, - "created_at": { - "description": "Time the comment was posted, in ISO 8601 with a UTC offset.", - "example": "2026-07-05T09:28:09-07:00", + "limit": { "type": "string" }, - "creator_full_name": { - "description": "Display name of the member who wrote the comment.", - "example": "Jen Muston", + "new_filters": { "type": "string" }, - "creator_picture_url": { - "description": "Profile picture URL of the member who wrote the comment.", + "offset": { "type": "string" }, - "creator_username": { - "description": "Username of the member who wrote the comment.", - "example": "muvlax20", + "query": { "type": "string" }, - "id": { - "description": "Poshmark comment id.", - "example": "6a4a86191fea02ce69f41484", + "show_metadata": { + "type": "boolean" + }, + "version": { "type": "string" } }, "type": "object" }, - "poshmark.DepartmentTaxonomy": { + "modrinth.StringListResponseDoc": { "properties": { - "categories": { + "code": { + "type": "integer" + }, + "data": { "items": { - "$ref": "#/definitions/poshmark.CategoryTaxonomyEntry" + "type": "string" }, "type": "array" }, - "id": { - "example": "000e8975d97b4e80ef00a955", - "type": "string" - }, - "name": { - "example": "Women", - "type": "string" - }, - "path": { - "description": "Path is the exact value the category endpoint's path parameter\nexpects for browsing the department itself, e.g. \"Women\".", - "example": "Women", + "msg": { "type": "string" } }, "type": "object" }, - "poshmark.Listing": { + "moncler.CategoriesResponse": { "properties": { - "brand": { - "description": "Brand name of the item.", - "example": "FARM Rio", - "type": "string" - }, - "category": { - "description": "Poshmark category of the item, for example `Shorts`.", - "example": "Shorts", - "type": "string" - }, - "colors": { - "description": "Colors the seller selected for the item.", - "example": [ - "Red", - "Yellow" - ], + "categories": { "items": { - "type": "string" + "$ref": "#/definitions/moncler.Category" }, "type": "array" - }, - "comment_count": { - "description": "Number of comments on the listing.", - "example": 4, - "type": "integer" - }, - "condition": { - "description": "Item condition code set by the seller, for example `nwt` for new with tags.", - "example": "nwt", - "type": "string" - }, - "cover_shot": { - "description": "URL of the listing's cover photo.", - "example": "https://di2ponv0v5otw.cloudfront.net/posts/2026/06/27/6a3fed1de9c77df92e2c0cc6/s_6a3fed24bd4ce3ff762126e5.jpg", - "type": "string" - }, - "created_at": { - "description": "Time the listing was created, in ISO 8601 with a UTC offset.", - "example": "2026-06-27T08:32:58-07:00", - "type": "string" - }, - "department": { - "description": "Poshmark department of the item, for example `Women`.", - "example": "Women", - "type": "string" - }, - "description": { - "description": "Seller's description of the item. Set on the listing detail response.", - "type": "string" - }, - "first_available_at": { - "description": "Time the listing first became available for sale, as Poshmark reports it.", - "type": "string" - }, - "id": { - "description": "Poshmark listing id. Use it with the listing endpoint.", - "example": "6a3fed1de9c77df92e2c0cc6", - "type": "string" - }, - "inventory_status": { - "description": "Availability status of the item, for example `available`.", - "example": "available", + } + }, + "type": "object" + }, + "moncler.Category": { + "properties": { + "category_id": { "type": "string" }, - "like_count": { - "description": "Number of members who liked the listing.", - "example": 111, - "type": "integer" - }, - "original_price": { - "description": "Original retail price the seller entered for the item.", - "example": 95, - "type": "number" - }, - "pictures": { - "description": "URLs of all photos on the listing. Set on the listing detail response.", + "children": { "items": { - "type": "string" + "$ref": "#/definitions/moncler.Category" }, "type": "array" }, - "price": { - "description": "Current asking price of the listing.", - "example": 55, - "type": "number" - }, - "quantity_available": { - "description": "Total number of units still available across all sizes.", - "example": 1, - "type": "integer" - }, - "seller_display_handle": { - "description": "Display handle of the seller who posted the listing.", - "example": "maltimar", - "type": "string" - }, - "seller_full_name": { - "description": "Display name of the seller who posted the listing.", - "example": "Mary Altimar", - "type": "string" - }, - "seller_picture_url": { - "description": "Profile picture URL of the seller who posted the listing.", - "type": "string" - }, - "seller_username": { - "description": "Username of the seller who posted the listing.", - "example": "maltimar", - "type": "string" - }, - "share_count": { - "description": "Number of times the listing was shared.", - "example": 13, - "type": "integer" - }, - "size": { - "description": "Size of the item as entered by the seller.", - "example": "S", - "type": "string" - }, - "status": { - "description": "Publication status of the listing, for example `published`.", - "example": "published", + "description": { "type": "string" }, - "title": { - "description": "Listing title as shown on Poshmark.", - "example": "NWT Farm Rio Shorts", + "name": { "type": "string" }, - "url": { - "description": "Poshmark page URL of the listing.", - "example": "https://poshmark.com/listing/6a3fed1de9c77df92e2c0cc6", + "parent_id": { "type": "string" } }, "type": "object" }, - "poshmark.ListingResponse": { + "moncler.CategoryResponse": { "properties": { - "brand": { - "description": "Brand name of the item.", - "example": "FARM Rio", - "type": "string" - }, - "category": { - "description": "Poshmark category of the item, for example `Shorts`.", - "example": "Shorts", + "category_id": { "type": "string" }, - "colors": { - "description": "Colors the seller selected for the item.", - "example": [ - "Red", - "Yellow" - ], + "facets": { "items": { - "type": "string" + "$ref": "#/definitions/moncler.SearchFacet" }, "type": "array" }, - "comment_count": { - "description": "Number of comments on the listing.", - "example": 4, + "limit": { "type": "integer" }, - "comments": { - "description": "Public comments on the listing.", + "offset": { + "type": "integer" + }, + "results": { "items": { - "$ref": "#/definitions/poshmark.Comment" + "$ref": "#/definitions/moncler.SearchHit" }, "type": "array" }, - "condition": { - "description": "Item condition code set by the seller, for example `nwt` for new with tags.", - "example": "nwt", - "type": "string" + "sort_options": { + "items": { + "$ref": "#/definitions/moncler.SortOption" + }, + "type": "array" }, - "cover_shot": { - "description": "URL of the listing's cover photo.", - "example": "https://di2ponv0v5otw.cloudfront.net/posts/2026/06/27/6a3fed1de9c77df92e2c0cc6/s_6a3fed24bd4ce3ff762126e5.jpg", + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "moncler.Product": { + "properties": { + "brand": { "type": "string" }, - "created_at": { - "description": "Time the listing was created, in ISO 8601 with a UTC offset.", - "example": "2026-06-27T08:32:58-07:00", + "care_instructions": { "type": "string" }, - "department": { - "description": "Poshmark department of the item, for example `Women`.", - "example": "Women", + "collection": { "type": "string" }, - "description": { - "description": "Seller's description of the item. Set on the listing detail response.", + "color": { "type": "string" }, - "first_available_at": { - "description": "Time the listing first became available for sale, as Poshmark reports it.", + "composition": { "type": "string" }, - "id": { - "description": "Poshmark listing id. Use it with the listing endpoint.", - "example": "6a3fed1de9c77df92e2c0cc6", + "currency": { "type": "string" }, - "inventory_status": { - "description": "Availability status of the item, for example `available`.", - "example": "available", + "gender": { "type": "string" }, - "like_count": { - "description": "Number of members who liked the listing.", - "example": 111, - "type": "integer" - }, - "original_price": { - "description": "Original retail price the seller entered for the item.", - "example": 95, - "type": "number" - }, - "pictures": { - "description": "URLs of all photos on the listing. Set on the listing detail response.", + "images": { "items": { - "type": "string" + "$ref": "#/definitions/moncler.ProductImageGroup" }, "type": "array" }, - "price": { - "description": "Current asking price of the listing.", - "example": 55, - "type": "number" - }, - "quantity_available": { - "description": "Total number of units still available across all sizes.", - "example": 1, - "type": "integer" + "in_stock": { + "type": "boolean" }, - "seller": { - "allOf": [ - { - "$ref": "#/definitions/poshmark.Seller" - } - ], - "description": "Public profile of the seller. Omitted when Poshmark's page does not include it." + "long_description": { + "type": "string" }, - "seller_display_handle": { - "description": "Display handle of the seller who posted the listing.", - "example": "maltimar", + "made_in": { "type": "string" }, - "seller_full_name": { - "description": "Display name of the seller who posted the listing.", - "example": "Mary Altimar", + "master_id": { "type": "string" }, - "seller_picture_url": { - "description": "Profile picture URL of the seller who posted the listing.", + "name": { "type": "string" }, - "seller_username": { - "description": "Username of the seller who posted the listing.", - "example": "maltimar", + "price": { + "type": "number" + }, + "product_id": { "type": "string" }, - "share_count": { - "description": "Number of times the listing was shared.", - "example": 13, - "type": "integer" + "product_url": { + "type": "string" }, - "similar_listings": { - "description": "Similar listings Poshmark shows on the same page. Omitted when the page has none.", + "related_products": { + "description": "RelatedProducts are \"styled with\" items Moncler's own product page\nsuggests alongside this product.", "items": { - "$ref": "#/definitions/poshmark.Listing" + "$ref": "#/definitions/moncler.RelatedProduct" }, "type": "array" }, - "size": { - "description": "Size of the item as entered by the seller.", - "example": "S", + "short_description": { "type": "string" }, - "source_url": { - "description": "URL the data was read from.", - "type": "string" + "size_guide": { + "allOf": [ + { + "$ref": "#/definitions/moncler.SizeGuide" + } + ], + "description": "SizeGuide is this product's size chart (per-size body measurements\nand/or a cross-region size conversion table), when the upstream\nprovides one." }, - "status": { - "description": "Publication status of the listing, for example `published`.", - "example": "published", - "type": "string" + "stock_level": { + "type": "number" }, - "title": { - "description": "Listing title as shown on Poshmark.", - "example": "NWT Farm Rio Shorts", - "type": "string" + "variants": { + "items": { + "$ref": "#/definitions/moncler.ProductVariant" + }, + "type": "array" }, - "url": { - "description": "Poshmark page URL of the listing.", - "example": "https://poshmark.com/listing/6a3fed1de9c77df92e2c0cc6", - "type": "string" + "variation_attributes": { + "items": { + "$ref": "#/definitions/moncler.ProductVariationAttribute" + }, + "type": "array" } }, "type": "object" }, - "poshmark.RatingBreakdown": { + "moncler.ProductImage": { "properties": { - "five_star": { - "description": "Number of 5-star ratings the seller received.", - "example": 355, - "type": "integer" - }, - "four_star": { - "description": "Number of 4-star ratings the seller received.", - "example": 7, - "type": "integer" - }, - "one_star": { - "description": "Number of 1-star ratings the seller received.", - "example": 1, - "type": "integer" - }, - "three_star": { - "description": "Number of 3-star ratings the seller received.", - "example": 2, - "type": "integer" + "alt": { + "type": "string" }, - "two_star": { - "description": "Number of 2-star ratings the seller received.", - "example": 3, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "poshmark.SearchResponse": { + "moncler.ProductImageGroup": { "properties": { - "has_more": { - "example": true, - "type": "boolean" + "color": { + "type": "string" }, - "listings": { + "images": { "items": { - "$ref": "#/definitions/poshmark.Listing" + "$ref": "#/definitions/moncler.ProductImage" }, "type": "array" }, - "next_max_id": { - "example": "ENC_eyJtYXhfaWRzIjpbNDksMSwxXSwicGFnZV9udW0iOjIsInBhZ2VfZ3JvdXBfaWQiOiI2YTcyZTE3OTI1MzYyMTUzMDNhMmVmMWEifQ", - "type": "string" - }, - "source_url": { + "view_type": { "type": "string" - }, - "total": { - "example": 120000, - "type": "integer" } }, "type": "object" }, - "poshmark.Seller": { + "moncler.ProductVariant": { "properties": { - "cover_shot_url": { - "description": "URL of the seller's closet cover image.", - "type": "string" - }, - "display_handle": { - "description": "Seller's display handle on Poshmark.", - "example": "maltimar", - "type": "string" - }, - "followers": { - "description": "Number of members following the seller.", - "example": 9096, - "type": "integer" - }, - "following": { - "description": "Number of members the seller follows.", - "example": 89, - "type": "integer" - }, - "full_name": { - "description": "Seller's display name.", - "example": "Mary Altimar", - "type": "string" - }, - "id": { - "description": "Poshmark user id of the seller.", - "example": "5a4f84cb7d70fb0f0f05a37f", - "type": "string" - }, - "items_sold_display": { - "description": "Items sold as Poshmark displays it, for example `500+`.", - "example": "500+", - "type": "string" - }, - "last_active_at": { - "description": "Time the seller was last active, in ISO 8601 with a UTC offset.", - "example": "2026-08-04T19:52:16-07:00", - "type": "string" - }, - "member_since": { - "description": "Time the seller joined Poshmark, in ISO 8601 with a UTC offset.", - "example": "2018-01-05T05:59:39-08:00", - "type": "string" - }, - "orders_shipped": { - "description": "Number of orders the seller has shipped.", - "example": 522, - "type": "integer" - }, - "picture_url": { - "description": "URL of the seller's profile picture.", - "example": "https://di2ponv0v5otw.cloudfront.net/users/2018/04/23/5a4f84cb7d70fb0f0f05a37f/t_5ade0fdbd0492dff500c741a.jpg", - "type": "string" - }, - "posts_count": { - "description": "Number of listings the seller has posted.", - "example": 698, - "type": "integer" + "orderable": { + "type": "boolean" }, - "rating_average": { - "description": "Average of the seller's star ratings, rounded to two decimals. Omitted when the seller has no ratings.", - "example": 4.93, + "price": { "type": "number" }, - "rating_breakdown": { - "allOf": [ - { - "$ref": "#/definitions/poshmark.RatingBreakdown" - } - ], - "description": "Number of ratings the seller received at each star level." - }, - "rating_count": { - "description": "Total number of ratings the seller received.", - "example": 368, - "type": "integer" - }, - "url": { - "description": "Poshmark closet URL of the seller.", - "example": "https://poshmark.com/closet/maltimar", + "product_id": { "type": "string" }, - "username": { - "description": "Seller's Poshmark username, as used in the closet URL.", - "example": "maltimar", - "type": "string" + "variation_values": { + "additionalProperties": { + "type": "string" + }, + "type": "object" } }, "type": "object" }, - "poshmark.TrendResponse": { + "moncler.ProductVariationAttribute": { "properties": { - "cover_shot": { + "id": { "type": "string" }, - "description": { + "label": { "type": "string" }, - "has_more": { - "example": true, - "type": "boolean" - }, - "listings": { + "values": { "items": { - "$ref": "#/definitions/poshmark.Listing" + "$ref": "#/definitions/moncler.ProductVariationValue" }, "type": "array" - }, - "name": { - "example": "Vintage Celine Handbags", - "type": "string" - }, - "next_max_id": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "total": { - "example": 5000, - "type": "integer" - } - }, - "type": "object" - }, - "poshmark.brandsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/poshmark.BrandsResponse" - }, - "msg": { - "example": "OK", - "type": "string" } }, "type": "object" }, - "poshmark.categoriesResponseDoc": { + "moncler.ProductVariationValue": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/poshmark.CategoriesResponse" - }, - "msg": { - "example": "OK", + "label": { "type": "string" - } - }, - "type": "object" - }, - "poshmark.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/poshmark.SearchResponse" + "orderable": { + "type": "boolean" }, - "msg": { - "example": "OK", + "value": { "type": "string" } }, "type": "object" }, - "prada.CategoriesResponse": { + "moncler.RelatedProduct": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/prada.Category" - }, - "type": "array" - }, - "count": { - "type": "integer" - }, - "fetched_at": { + "currency": { "type": "string" }, - "genders": { - "items": { - "$ref": "#/definitions/prada.FacetCount" - }, - "type": "array" - } - }, - "type": "object" - }, - "prada.Category": { - "properties": { - "id": { + "image_url": { "type": "string" }, "name": { "type": "string" }, - "path": { - "items": { - "type": "string" - }, - "type": "array" - }, - "path_ids": { - "items": { - "type": "string" - }, - "type": "array" + "price": { + "type": "number" }, - "url": { + "product_id": { "type": "string" } }, "type": "object" }, - "prada.CategoryResponse": { + "moncler.SearchFacet": { "properties": { - "category_id": { - "type": "string" - }, - "count": { - "type": "integer" - }, - "country": { - "type": "string" - }, - "fetched_at": { + "id": { "type": "string" }, - "gender": { + "label": { "type": "string" }, - "limit": { - "type": "integer" - }, - "page": { - "type": "integer" - }, - "products": { + "values": { "items": { - "$ref": "#/definitions/prada.Product" + "$ref": "#/definitions/moncler.SearchFacetValue" }, "type": "array" - }, - "sort": { - "type": "string" - }, - "total_pages": { - "type": "integer" - }, - "total_results": { - "type": "integer" } }, "type": "object" }, - "prada.FacetCount": { + "moncler.SearchFacetValue": { "properties": { "count": { "type": "integer" }, + "label": { + "type": "string" + }, "value": { "type": "string" } }, "type": "object" }, - "prada.Product": { + "moncler.SearchHit": { "properties": { - "color": { - "type": "string" - }, - "color_hex": { - "type": "string" - }, "currency": { "type": "string" }, - "gender": { - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { - "type": "string" - }, - "in_stock": { - "type": "boolean" - }, - "material": { + "image_alt": { "type": "string" }, - "model": { + "image_url": { "type": "string" }, "name": { "type": "string" }, + "orderable": { + "type": "boolean" + }, "price": { "type": "number" }, - "product_type": { - "type": "string" - }, - "pv": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "prada.ProductColorOption": { - "properties": { - "code": { - "type": "string" - }, - "hex": { + "product_id": { "type": "string" }, - "name": { - "type": "string" + "stock_level": { + "type": "number" }, - "url": { - "type": "string" + "variant_ids": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "prada.ProductResponse": { + "moncler.SearchResponse": { "properties": { - "breadcrumbs": { + "facets": { "items": { - "type": "string" + "$ref": "#/definitions/moncler.SearchFacet" }, "type": "array" }, - "color": { - "type": "string" - }, - "color_hex": { - "type": "string" - }, - "country": { - "type": "string" - }, - "currency": { - "type": "string" - }, - "description": { - "type": "string" + "limit": { + "type": "integer" }, - "discounted_price": { - "type": "number" + "offset": { + "type": "integer" }, - "fetched_at": { + "query": { "type": "string" }, - "gender": { + "results": { "items": { - "type": "string" + "$ref": "#/definitions/moncler.SearchHit" }, "type": "array" }, - "images": { + "sort_options": { "items": { - "type": "string" + "$ref": "#/definitions/moncler.SortOption" }, "type": "array" }, - "in_stock": { - "type": "boolean" - }, - "material": { - "type": "string" - }, - "model": { - "type": "string" - }, - "name": { - "type": "string" - }, - "other_colors": { + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "moncler.SizeGuide": { + "properties": { + "country_sizes": { "items": { - "$ref": "#/definitions/prada.ProductColorOption" + "$ref": "#/definitions/moncler.SizeGuideCountrySizes" }, "type": "array" }, - "price": { - "type": "number" - }, - "product_type": { - "type": "string" - }, - "pv": { + "description": { "type": "string" }, - "sizes": { + "rows": { "items": { - "$ref": "#/definitions/prada.ProductSize" + "$ref": "#/definitions/moncler.SizeGuideRow" }, "type": "array" - }, - "stock_quantity": { - "type": "integer" - }, - "url": { - "type": "string" } }, "type": "object" }, - "prada.ProductSize": { + "moncler.SizeGuideCountrySizes": { "properties": { - "code": { + "country": { "type": "string" }, - "label": { - "type": "string" + "sizes": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "prada.SearchResponse": { + "moncler.SizeGuideMeasurement": { "properties": { - "count": { - "type": "integer" - }, - "country": { + "cm": { "type": "string" }, - "fetched_at": { + "inches": { "type": "string" }, - "gender": { + "label": { "type": "string" - }, - "limit": { - "type": "integer" - }, - "page": { - "type": "integer" - }, - "products": { + } + }, + "type": "object" + }, + "moncler.SizeGuideRow": { + "properties": { + "measurements": { "items": { - "$ref": "#/definitions/prada.Product" + "$ref": "#/definitions/moncler.SizeGuideMeasurement" }, "type": "array" }, - "query": { + "size": { "type": "string" - }, - "sort": { + } + }, + "type": "object" + }, + "moncler.SortOption": { + "properties": { + "id": { "type": "string" }, - "total_pages": { - "type": "integer" - }, - "total_results": { - "type": "integer" + "label": { + "type": "string" } }, "type": "object" }, - "prada.Store": { + "moncler.Store": { "properties": { - "categories": { - "items": { - "type": "string" - }, - "type": "array" + "address": { + "type": "string" }, "city": { "type": "string" }, - "country": { + "country_code": { "type": "string" }, - "distance_km": { - "type": "number" + "country_name": { + "type": "string" + }, + "email": { + "type": "string" }, "hours": { "items": { - "$ref": "#/definitions/prada.StoreDay" + "$ref": "#/definitions/moncler.StoreHours" }, "type": "array" }, - "id": { - "type": "string" + "hours_schedule": { + "items": { + "$ref": "#/definitions/moncler.StoreDaySchedule" + }, + "type": "array" }, "latitude": { "type": "number" }, - "line1": { - "type": "string" - }, - "line2": { - "type": "string" - }, "longitude": { "type": "number" }, "name": { "type": "string" }, - "permanently_closed": { - "type": "boolean" - }, "phone": { "type": "string" }, @@ -163639,26 +168155,48 @@ "region": { "type": "string" }, - "services": { - "items": { - "type": "string" - }, - "type": "array" + "state_code": { + "type": "string" }, - "timezone": { + "store_id": { + "type": "string" + }, + "store_type": { "type": "string" } }, "type": "object" }, - "prada.StoreDay": { + "moncler.StoreDaySchedule": { "properties": { - "closed": { + "day": { + "type": "string" + }, + "is_closed": { "type": "boolean" }, + "slots": { + "items": { + "$ref": "#/definitions/moncler.StoreHoursSlot" + }, + "type": "array" + } + }, + "type": "object" + }, + "moncler.StoreHours": { + "properties": { "day": { "type": "string" }, + "text": { + "type": "string" + } + }, + "type": "object" + }, + "moncler.StoreHoursSlot": { + "properties": { "end": { "type": "string" }, @@ -163668,86 +168206,76 @@ }, "type": "object" }, - "prada.StoresResponse": { + "moncler.StoresResponse": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "lat": { - "type": "number" - }, - "limit": { - "type": "integer" - }, - "lng": { - "type": "number" - }, - "offset": { - "type": "integer" - }, - "query": { - "type": "string" - }, - "radius_km": { - "type": "number" - }, "stores": { "items": { - "$ref": "#/definitions/prada.Store" + "$ref": "#/definitions/moncler.Store" }, "type": "array" - }, - "total_results": { - "type": "integer" } }, "type": "object" }, - "prada.SuggestResponse": { + "moncler.SuggestResponse": { "properties": { - "count": { - "type": "integer" + "categories": { + "items": { + "$ref": "#/definitions/moncler.SuggestedCategory" + }, + "type": "array" }, - "fetched_at": { - "type": "string" + "phrases": { + "items": { + "type": "string" + }, + "type": "array" }, "query": { "type": "string" }, - "suggestions": { + "terms": { "items": { - "$ref": "#/definitions/prada.Suggestion" + "$ref": "#/definitions/moncler.SuggestedTerm" }, "type": "array" } }, "type": "object" }, - "prada.Suggestion": { + "moncler.SuggestedCategory": { "properties": { - "popularity": { - "type": "integer" + "category_id": { + "type": "string" }, - "query": { + "name": { "type": "string" }, - "result_count": { - "type": "integer" + "parent_category_name": { + "type": "string" } }, "type": "object" }, - "prada.categoriesResponseDoc": { + "moncler.SuggestedTerm": { + "properties": { + "corrected": { + "type": "boolean" + }, + "term": { + "type": "string" + } + }, + "type": "object" + }, + "moncler.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/prada.CategoriesResponse" + "$ref": "#/definitions/moncler.CategoriesResponse" }, "msg": { "example": "OK", @@ -163756,14 +168284,14 @@ }, "type": "object" }, - "prada.categoryResponseDoc": { + "moncler.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/prada.CategoryResponse" + "$ref": "#/definitions/moncler.CategoryResponse" }, "msg": { "example": "OK", @@ -163772,14 +168300,14 @@ }, "type": "object" }, - "prada.productResponseDoc": { + "moncler.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/prada.ProductResponse" + "$ref": "#/definitions/moncler.Product" }, "msg": { "example": "OK", @@ -163788,14 +168316,14 @@ }, "type": "object" }, - "prada.searchResponseDoc": { + "moncler.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/prada.SearchResponse" + "$ref": "#/definitions/moncler.SearchResponse" }, "msg": { "example": "OK", @@ -163804,14 +168332,14 @@ }, "type": "object" }, - "prada.storesResponseDoc": { + "moncler.storesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/prada.StoresResponse" + "$ref": "#/definitions/moncler.StoresResponse" }, "msg": { "example": "OK", @@ -163820,14 +168348,14 @@ }, "type": "object" }, - "prada.suggestResponseDoc": { + "moncler.suggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/prada.SuggestResponse" + "$ref": "#/definitions/moncler.SuggestResponse" }, "msg": { "example": "OK", @@ -163836,115 +168364,186 @@ }, "type": "object" }, - "predictions.PredictionsAvailabilityRegion": { + "moneycontrol.AuthorResponse": { "properties": { - "description": { - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/moneycontrol.HeadlineItem" + }, + "type": "array" }, - "name": { + "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "job_title": { "type": "string" }, - "region_id": { + "name": { "type": "string" }, - "status": { - "allOf": [ - { - "$ref": "#/definitions/predictions.PredictionsAvailabilityStatus" - } - ], - "enum": [ - "all_markets_available", - "financial_markets_only", - "sports_markets_unavailable", - "no_markets_available" - ] + "social_links": { + "items": { + "$ref": "#/definitions/moneycontrol.AuthorSocialLink" + }, + "type": "array" }, - "status_description": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "moneycontrol.AuthorSocialLink": { + "properties": { + "type": { "type": "string" }, - "status_label": { + "url": { "type": "string" } }, "type": "object" }, - "predictions.PredictionsAvailabilityResponse": { + "moneycontrol.HeadlineItem": { "properties": { - "fetched_at": { + "author": { "type": "string" }, - "map_note": { + "image_url": { "type": "string" }, - "map_title": { + "published_at": { "type": "string" }, - "region_count": { - "type": "integer" + "summary": { + "type": "string" }, - "regions": { - "items": { - "$ref": "#/definitions/predictions.PredictionsAvailabilityRegion" - }, - "type": "array" + "title": { + "type": "string" }, - "source_url": { + "type": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "predictions.PredictionsAvailabilityStatus": { - "enum": [ - "all_markets_available", - "financial_markets_only", - "sports_markets_unavailable", - "no_markets_available" - ], - "type": "string", - "x-enum-varnames": [ - "PredictionsAvailabilityAllMarketsAvailable", - "PredictionsAvailabilityFinancialMarketsOnly", - "PredictionsAvailabilitySportsMarketsUnavailable", - "PredictionsAvailabilityNoMarketsAvailable" - ] - }, - "predictions.PredictionsCategoriesResponse": { + "motleyfool.AuthorResponse": { "properties": { - "categories": { + "articles": { "items": { - "$ref": "#/definitions/predictions.PredictionsCategory" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "count": { + "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "motogp.ArrayResponseDoc": { + "properties": { + "code": { "type": "integer" }, - "fetched_at": { + "data": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + "msg": { "type": "string" + } + }, + "type": "object" + }, + "motogp.ObjectResponseDoc": { + "properties": { + "code": { + "type": "integer" }, - "league_count": { + "data": { + "additionalProperties": true, + "type": "object" + }, + "msg": { + "type": "string" + } + }, + "type": "object" + }, + "nascar.ResponseDoc": { + "properties": { + "code": { "type": "integer" }, - "source_url": { + "data": { + "additionalProperties": true, + "type": "object" + }, + "msg": { "type": "string" } }, "type": "object" }, - "predictions.PredictionsCategory": { + "nascar.Series": { "properties": { - "id": { + "series_id": { + "type": "integer" + }, + "source_key": { "type": "string" + } + }, + "type": "object" + }, + "nascar.SeriesResponseDoc": { + "properties": { + "code": { + "type": "integer" }, - "leagues": { + "data": { "items": { - "$ref": "#/definitions/predictions.PredictionsLeague" + "$ref": "#/definitions/nascar.Series" }, "type": "array" }, - "name": { + "msg": { + "type": "string" + } + }, + "type": "object" + }, + "nationafrica.AuthorArticle": { + "properties": { + "premium": { + "type": "boolean" + }, + "summary": { + "type": "string" + }, + "title": { "type": "string" }, "url": { @@ -163953,452 +168552,842 @@ }, "type": "object" }, - "predictions.PredictionsLeague": { + "nationafrica.AuthorResponse": { "properties": { - "id": { + "articles": { + "items": { + "$ref": "#/definitions/nationafrica.AuthorArticle" + }, + "type": "array" + }, + "bio": { + "type": "string" + }, + "image_url": { "type": "string" }, "name": { "type": "string" }, + "slug": { + "type": "string" + }, "url": { "type": "string" } }, "type": "object" }, - "predictions.PredictionsRuleSource": { + "national.AuthorResponse": { "properties": { + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" + }, + "image_url": { + "type": "string" + }, "name": { "type": "string" }, + "slug": { + "type": "string" + }, "url": { "type": "string" } }, "type": "object" }, - "predictions.PredictionsRulesResponse": { + "nationalpost.AuthorArticle": { "properties": { - "fetched_at": { + "category": { "type": "string" }, - "rule_source_count": { + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "nationalpost.AuthorResponse": { + "properties": { + "article_count": { "type": "integer" }, - "rule_sources": { + "articles": { "items": { - "$ref": "#/definitions/predictions.PredictionsRuleSource" + "$ref": "#/definitions/nationalpost.AuthorArticle" }, "type": "array" }, - "settlement_category_count": { - "type": "integer" + "bio": { + "type": "string" }, - "settlement_link_count": { - "type": "integer" + "name": { + "type": "string" }, - "settlement_sources": { - "items": { - "$ref": "#/definitions/predictions.PredictionsSettlementSource" - }, - "type": "array" + "slug": { + "type": "string" }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "predictions.PredictionsSettlementSource": { + "nba.Arena": { "properties": { - "category": { + "arena_id": { + "$ref": "#/definitions/nba.FlexInt" + }, + "city": { "type": "string" }, - "links": { - "items": { - "$ref": "#/definitions/predictions.PredictionsRuleSource" - }, - "type": "array" + "country": { + "type": "string" + }, + "name": { + "type": "string" + }, + "state": { + "type": "string" + }, + "timezone": { + "type": "string" } }, "type": "object" }, - "predictions.predictionsAvailabilityResponseDoc": { + "nba.Article": { "properties": { - "code": { - "example": 200, - "type": "integer" + "category": { + "$ref": "#/definitions/nba.ArticleCategory" }, - "data": { - "$ref": "#/definitions/predictions.PredictionsAvailabilityResponse" + "date": { + "type": "string" }, - "msg": { - "example": "OK", + "excerpt": { + "type": "string" + }, + "id": { + "$ref": "#/definitions/nba.FlexInt" + }, + "modified": { "type": "string" + }, + "permalink": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "status": { + "type": "string" + }, + "title": { + "type": "string" + }, + "word_count": { + "$ref": "#/definitions/nba.FlexInt" } }, "type": "object" }, - "predictions.predictionsCategoriesResponseDoc": { + "nba.ArticleCategory": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/predictions.PredictionsCategoriesResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "slug": { "type": "string" } }, "type": "object" }, - "predictions.predictionsRulesResponseDoc": { + "nba.BoxPlayer": { "properties": { - "code": { - "example": 200, - "type": "integer" + "assists": { + "$ref": "#/definitions/nba.FlexInt" }, - "data": { - "$ref": "#/definitions/predictions.PredictionsRulesResponse" + "family_name": { + "type": "string" }, - "msg": { - "example": "OK", + "field_goals_made": { + "$ref": "#/definitions/nba.FlexInt" + }, + "first_name": { + "type": "string" + }, + "jersey_num": { + "type": "string" + }, + "minutes": { + "type": "string" + }, + "name_initial": { + "type": "string" + }, + "person_id": { + "$ref": "#/definitions/nba.FlexInt" + }, + "points": { + "$ref": "#/definitions/nba.FlexInt" + }, + "position": { "type": "string" + }, + "rebounds": { + "$ref": "#/definitions/nba.FlexInt" + }, + "starter": { + "$ref": "#/definitions/nba.FlexInt" } }, "type": "object" }, - "pricecharting.BigMover": { + "nba.BoxScoreResponse": { "properties": { - "change": { - "description": "Change is signed: US dollars when change_unit is usd, a percentage when\nit is percent.", - "type": "number" + "away_team": { + "$ref": "#/definitions/nba.BoxTeam" }, - "console": { + "count": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "console_slug": { + "game_id": { "type": "string" }, - "id": { + "home_team": { + "$ref": "#/definitions/nba.BoxTeam" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "nba.BoxScoreStatsResponse": { + "properties": { + "away_team": { + "$ref": "#/definitions/nba.RichStatTeam" + }, + "count": { "type": "integer" }, - "name": { + "fetched_at": { "type": "string" }, - "price": { - "type": "number" + "game_id": { + "type": "string" }, - "slug": { + "home_team": { + "$ref": "#/definitions/nba.RichStatTeam" + }, + "source_url": { "type": "string" }, - "url": { + "stat_group": { "type": "string" } }, "type": "object" }, - "pricecharting.BigMoversResponse": { + "nba.BoxTeam": { "properties": { - "categories": { + "players": { "items": { - "$ref": "#/definitions/pricecharting.Category" + "$ref": "#/definitions/nba.BoxPlayer" }, "type": "array" }, - "category": { - "type": "string" + "team_id": { + "$ref": "#/definitions/nba.FlexInt" }, - "change_unit": { + "team_name": { "type": "string" }, - "price_label": { - "description": "PriceLabel names the price column, for example Loose Price (the\nungraded price of a card).", + "team_tricode": { "type": "string" - }, - "products": { + } + }, + "type": "object" + }, + "nba.DetailTeam": { + "properties": { + "periods": { "items": { - "$ref": "#/definitions/pricecharting.BigMover" + "$ref": "#/definitions/nba.PeriodScore" }, "type": "array" }, - "region": { - "type": "string" - }, - "sort": { - "type": "string" + "score": { + "$ref": "#/definitions/nba.FlexInt" }, - "title": { - "type": "string" + "team_id": { + "$ref": "#/definitions/nba.FlexInt" } }, "type": "object" }, - "pricecharting.CategoriesResponse": { + "nba.EnumsData": { "properties": { - "categories": { + "blocked": { "items": { - "$ref": "#/definitions/pricecharting.Category" + "type": "string" }, "type": "array" }, - "category": { + "defense_categories": { + "items": { + "type": "string" + }, + "type": "array" + }, + "game_date_format": { "type": "string" }, - "consoles": { + "league_ids": { "items": { - "$ref": "#/definitions/pricecharting.Console" + "type": "string" + }, + "type": "array" + }, + "measure_types": { + "items": { + "type": "string" + }, + "type": "array" + }, + "notes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "per_modes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "scopes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "season_format": { + "type": "string" + }, + "season_types": { + "items": { + "type": "string" + }, + "type": "array" + }, + "stat_categories": { + "items": { + "type": "string" }, "type": "array" + }, + "verified_on": { + "type": "string" } }, "type": "object" }, - "pricecharting.Category": { + "nba.EnumsResponse": { "properties": { - "name": { + "count": { + "type": "integer" + }, + "data": { + "$ref": "#/definitions/nba.EnumsData" + }, + "fetched_at": { "type": "string" }, - "slug": { + "source_url": { "type": "string" } }, "type": "object" }, - "pricecharting.Console": { + "nba.FlexInt": { "properties": { - "name": { - "type": "string" - }, - "slug": { - "type": "string" + "value": { + "type": "integer" } }, "type": "object" }, - "pricecharting.ConsoleProduct": { + "nba.Game": { "properties": { - "complete_price": { - "type": "number" + "away_team": { + "$ref": "#/definitions/nba.GameSide" }, - "id": { - "type": "integer" + "game_clock": { + "type": "string" }, - "image_url": { + "game_code": { "type": "string" }, - "loose_price": { - "type": "number" + "game_et": { + "type": "string" }, - "name": { + "game_id": { "type": "string" }, - "new_price": { - "type": "number" + "game_status": { + "$ref": "#/definitions/nba.FlexInt" }, - "slug": { + "game_status_text": { "type": "string" }, - "url": { + "game_time_utc": { "type": "string" + }, + "home_team": { + "$ref": "#/definitions/nba.GameSide" + }, + "period": { + "$ref": "#/definitions/nba.FlexInt" } }, "type": "object" }, - "pricecharting.ConsoleResponse": { + "nba.GameDetail": { "properties": { - "console": { + "arena": { + "$ref": "#/definitions/nba.Arena" + }, + "attendance": { + "$ref": "#/definitions/nba.FlexInt" + }, + "away_team": { + "$ref": "#/definitions/nba.DetailTeam" + }, + "duration": { "type": "string" }, - "cursor": { - "type": "integer" + "game_clock": { + "type": "string" }, - "next_cursor": { - "type": "integer" + "game_code": { + "type": "string" }, - "price_labels": { - "items": { - "type": "string" - }, - "type": "array" + "game_et": { + "type": "string" }, - "products": { + "game_id": { + "type": "string" + }, + "game_label": { + "type": "string" + }, + "game_status": { + "$ref": "#/definitions/nba.FlexInt" + }, + "game_status_text": { + "type": "string" + }, + "game_sub_label": { + "type": "string" + }, + "game_time_utc": { + "type": "string" + }, + "home_team": { + "$ref": "#/definitions/nba.DetailTeam" + }, + "if_necessary": { + "type": "boolean" + }, + "is_neutral": { + "type": "boolean" + }, + "officials": { "items": { - "$ref": "#/definitions/pricecharting.ConsoleProduct" + "$ref": "#/definitions/nba.Official" }, "type": "array" }, - "sort": { + "period": { + "$ref": "#/definitions/nba.FlexInt" + }, + "sellout": { + "$ref": "#/definitions/nba.FlexInt" + }, + "series_game_number": { "type": "string" }, - "title": { + "series_text": { "type": "string" } }, "type": "object" }, - "pricecharting.GradeCount": { + "nba.GameDetailResponse": { "properties": { "count": { "type": "integer" }, - "grade": { - "type": "integer" + "fetched_at": { + "type": "string" + }, + "game": { + "$ref": "#/definitions/nba.GameDetail" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "pricecharting.Population": { + "nba.GameSide": { "properties": { - "cgc": { + "losses": { + "$ref": "#/definitions/nba.FlexInt" + }, + "score": { + "$ref": "#/definitions/nba.FlexInt" + }, + "team_city": { + "type": "string" + }, + "team_id": { + "$ref": "#/definitions/nba.FlexInt" + }, + "team_name": { + "type": "string" + }, + "team_tricode": { + "type": "string" + }, + "wins": { + "$ref": "#/definitions/nba.FlexInt" + } + }, + "type": "object" + }, + "nba.GamesResponse": { + "properties": { + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "games": { "items": { - "$ref": "#/definitions/pricecharting.GradeCount" + "$ref": "#/definitions/nba.Game" }, "type": "array" }, - "psa": { + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "nba.NewsResponse": { + "properties": { + "articles": { "items": { - "$ref": "#/definitions/pricecharting.GradeCount" + "$ref": "#/definitions/nba.Article" }, "type": "array" + }, + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "pricecharting.PriceCell": { + "nba.Official": { "properties": { - "change": { - "type": "number" + "family_name": { + "type": "string" }, - "label": { + "first_name": { "type": "string" }, - "price": { - "type": "number" + "jersey_num": { + "type": "string" + }, + "name": { + "type": "string" + }, + "name_initial": { + "type": "string" + }, + "person_id": { + "$ref": "#/definitions/nba.FlexInt" } }, "type": "object" }, - "pricecharting.PriceHistoryResponse": { + "nba.PeriodScore": { "properties": { - "currency": { + "period": { + "$ref": "#/definitions/nba.FlexInt" + }, + "period_type": { "type": "string" }, - "population": { - "$ref": "#/definitions/pricecharting.Population" + "score": { + "$ref": "#/definitions/nba.FlexInt" + } + }, + "type": "object" + }, + "nba.PlayAction": { + "properties": { + "action_number": { + "$ref": "#/definitions/nba.FlexInt" }, - "product": { - "$ref": "#/definitions/pricecharting.ProductRef" + "action_type": { + "type": "string" }, - "series": { + "clock": { + "type": "string" + }, + "description": { + "type": "string" + }, + "is_field_goal": { + "$ref": "#/definitions/nba.FlexInt" + }, + "period": { + "$ref": "#/definitions/nba.FlexInt" + }, + "person_id": { + "$ref": "#/definitions/nba.FlexInt" + }, + "player_name": { + "type": "string" + }, + "points_total": { + "$ref": "#/definitions/nba.FlexInt" + }, + "score_away": { + "$ref": "#/definitions/nba.FlexInt" + }, + "score_home": { + "$ref": "#/definitions/nba.FlexInt" + }, + "shot_result": { + "type": "string" + }, + "shot_value": { + "$ref": "#/definitions/nba.FlexInt" + }, + "sub_type": { + "type": "string" + }, + "team_id": { + "$ref": "#/definitions/nba.FlexInt" + }, + "team_tricode": { + "type": "string" + } + }, + "type": "object" + }, + "nba.PlayByPlayResponse": { + "properties": { + "actions": { "items": { - "$ref": "#/definitions/pricecharting.PriceSeries" + "$ref": "#/definitions/nba.PlayAction" }, "type": "array" + }, + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "game_id": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "video_available": { + "$ref": "#/definitions/nba.FlexInt" } }, "type": "object" }, - "pricecharting.PricePoint": { + "nba.PlayerStatLine": { "properties": { - "date": { - "description": "Date is the first day of the month the price describes (YYYY-MM-DD).", + "family_name": { "type": "string" }, - "price": { - "type": "number" + "first_name": { + "type": "string" + }, + "jersey_num": { + "type": "string" + }, + "name_initial": { + "type": "string" + }, + "person_id": { + "$ref": "#/definitions/nba.FlexInt" + }, + "position": { + "type": "string" + }, + "statistics": { + "additionalProperties": {}, + "type": "object" } }, "type": "object" }, - "pricecharting.PriceSeries": { + "nba.RichStatTeam": { "properties": { - "label": { - "description": "Label is the column's name on this product, for example Ungraded, Grade 9\nor PSA 10 on a card and Loose, Complete or New on a game.", - "type": "string" - }, - "points": { + "players": { "items": { - "$ref": "#/definitions/pricecharting.PricePoint" + "$ref": "#/definitions/nba.PlayerStatLine" }, "type": "array" }, - "tab": { - "description": "Tab is the column's sales tab id, the same value as recent_sales[].tab in\npricecharting-product: used, cib, new, graded, box-only or manual-only.", + "team_id": { + "$ref": "#/definitions/nba.FlexInt" + }, + "team_name": { + "type": "string" + }, + "team_tricode": { "type": "string" } }, "type": "object" }, - "pricecharting.Product": { + "nba.Row": { + "additionalProperties": {}, + "type": "object" + }, + "nba.ScoreboardResponse": { "properties": { - "attributes": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "count": { + "type": "integer" }, - "console": { + "fetched_at": { "type": "string" }, - "console_slug": { + "game_date": { "type": "string" }, - "full_prices": { + "games": { "items": { - "$ref": "#/definitions/pricecharting.PriceCell" + "$ref": "#/definitions/nba.Game" }, "type": "array" }, - "id": { - "type": "integer" - }, - "image_url": { + "league_id": { "type": "string" }, - "name": { + "league_name": { "type": "string" }, - "prices": { + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "nba.Table": { + "properties": { + "headers": { "items": { - "$ref": "#/definitions/pricecharting.PriceCell" + "type": "string" }, "type": "array" }, - "recent_sales": { + "name": { + "type": "string" + }, + "rows": { "items": { - "$ref": "#/definitions/pricecharting.Sale" + "$ref": "#/definitions/nba.Row" }, "type": "array" + } + }, + "type": "object" + }, + "nba.TablesResponse": { + "properties": { + "count": { + "type": "integer" }, - "slug": { + "fetched_at": { "type": "string" }, - "url": { + "source_url": { "type": "string" + }, + "tables": { + "items": { + "$ref": "#/definitions/nba.Table" + }, + "type": "array" } }, "type": "object" }, - "pricecharting.ProductRef": { + "nbc.ArticleResponse": { "properties": { - "console": { + "authors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "description": { "type": "string" }, - "console_slug": { + "image_url": { "type": "string" }, - "id": { - "type": "integer" + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" }, - "name": { + "published_at": { "type": "string" }, - "slug": { + "section": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updated_at": { "type": "string" }, "url": { @@ -164407,119 +169396,152 @@ }, "type": "object" }, - "pricecharting.ProductResponse": { + "nbc.AuthorArticle": { "properties": { - "product": { - "$ref": "#/definitions/pricecharting.Product" + "image_url": { + "type": "string" + }, + "published_at": { + "description": "PublishedAt is NBC News' own relative time string for this feed (e.g.\n\"4h ago\", \"2d ago\") -- the author feed's markup carries no\nmachine-readable timestamp to convert to an absolute date.", + "type": "string" + }, + "section": { + "description": "Section is the article's topic label as NBC News' own byline shows it\n(e.g. \"Immigration\"), distinct from the \"news\"/\"world\"/etc. site\nbrand label shown alongside it.", + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "pricecharting.Sale": { + "nbc.AuthorResponse": { "properties": { - "date": { + "articles": { + "items": { + "$ref": "#/definitions/nbc.AuthorArticle" + }, + "type": "array" + }, + "bio": { "type": "string" }, - "grade": { + "image_url": { "type": "string" }, - "item_id": { + "job_title": { "type": "string" }, - "item_url": { + "name": { "type": "string" }, - "price": { - "type": "number" + "social_links": { + "items": { + "$ref": "#/definitions/nbc.AuthorSocialLink" + }, + "type": "array" }, - "source": { + "url": { "type": "string" - }, - "tab": { + } + }, + "type": "object" + }, + "nbc.AuthorSocialLink": { + "properties": { + "platform": { "type": "string" }, - "title": { + "url": { "type": "string" } }, "type": "object" }, - "pricecharting.SearchProduct": { + "nbc.HeadlineItem": { "properties": { - "category": { + "author": { "type": "string" }, - "complete_price": { - "type": "number" - }, - "console": { + "image_url": { "type": "string" }, - "console_uid": { + "published_at": { "type": "string" }, - "id": { - "type": "integer" - }, - "image_url": { + "summary": { "type": "string" }, - "loose_price": { - "type": "number" - }, - "name": { + "title": { "type": "string" }, - "new_price": { - "type": "number" + "url": { + "type": "string" } }, "type": "object" }, - "pricecharting.SearchResponse": { + "nbc.HeadlinesResponse": { "properties": { - "products": { + "items": { "items": { - "$ref": "#/definitions/pricecharting.SearchProduct" + "$ref": "#/definitions/nbc.HeadlineItem" }, "type": "array" }, - "query": { - "type": "string" - }, - "sort": { + "section": { "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "pricecharting.bigMoversResponseDoc": { + "nbc.NewsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/nbc.HeadlineItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "nbc.Section": { + "properties": { + "name": { + "type": "string" }, - "data": { - "$ref": "#/definitions/pricecharting.BigMoversResponse" + "slug": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "pricecharting.categoriesResponseDoc": { + "nbc.SectionsResponse": { + "properties": { + "sections": { + "items": { + "$ref": "#/definitions/nbc.Section" + }, + "type": "array" + } + }, + "type": "object" + }, + "nbc.articleResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/pricecharting.CategoriesResponse" + "$ref": "#/definitions/nbc.ArticleResponse" }, "msg": { "example": "OK", @@ -164528,14 +169550,14 @@ }, "type": "object" }, - "pricecharting.consoleResponseDoc": { + "nbc.authorResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/pricecharting.ConsoleResponse" + "$ref": "#/definitions/nbc.AuthorResponse" }, "msg": { "example": "OK", @@ -164544,14 +169566,14 @@ }, "type": "object" }, - "pricecharting.priceHistoryResponseDoc": { + "nbc.headlinesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/pricecharting.PriceHistoryResponse" + "$ref": "#/definitions/nbc.HeadlinesResponse" }, "msg": { "example": "OK", @@ -164560,14 +169582,14 @@ }, "type": "object" }, - "pricecharting.productResponseDoc": { + "nbc.newsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/pricecharting.ProductResponse" + "$ref": "#/definitions/nbc.NewsResponse" }, "msg": { "example": "OK", @@ -164576,14 +169598,14 @@ }, "type": "object" }, - "pricecharting.searchResponseDoc": { + "nbc.sectionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/pricecharting.SearchResponse" + "$ref": "#/definitions/nbc.SectionsResponse" }, "msg": { "example": "OK", @@ -164592,4036 +169614,3782 @@ }, "type": "object" }, - "pristineauction.AuctionStatus": { + "ndtv.ArticleResponse": { "properties": { - "slug": { - "example": "completed", + "authors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "description": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "paywalled": { + "description": "Paywalled is true when the publisher serves only a teaser of this\narticle to anonymous readers, so Paragraphs is a partial body rather than\nthe full text. It is omitted when the full public body was returned.", + "type": "boolean" + }, + "premium": { + "type": "boolean" + }, + "published_at": { + "type": "string" + }, + "section": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "pristineauction.AuctionType": { + "ndtv.AuthorArticle": { "properties": { - "slug": { - "example": "daily", + "image_url": { + "type": "string" + }, + "published_on": { + "type": "string" + }, + "section": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "pristineauction.CategoriesResponse": { + "ndtv.AuthorResponse": { "properties": { - "auction_types": { + "articles": { "items": { - "$ref": "#/definitions/pristineauction.AuctionType" + "$ref": "#/definitions/ndtv.AuthorArticle" }, "type": "array" }, - "categories": { - "items": { - "$ref": "#/definitions/pristineauction.Category" - }, - "type": "array" + "bio": { + "type": "string" }, - "sort": { - "items": { - "$ref": "#/definitions/pristineauction.SortOption" - }, - "type": "array" + "image_url": { + "type": "string" }, - "statuses": { + "job_title": { + "type": "string" + }, + "name": { + "type": "string" + }, + "page": { + "type": "integer" + }, + "same_as": { "items": { - "$ref": "#/definitions/pristineauction.AuctionStatus" + "type": "string" }, "type": "array" + }, + "url": { + "type": "string" } }, "type": "object" }, - "pristineauction.Category": { + "ndtv.HeadlineItem": { "properties": { - "count": { - "example": 8608, - "type": "integer" + "author": { + "type": "string" }, - "label": { - "example": "BASEBALL", + "image_url": { "type": "string" }, - "slug": { - "example": "baseball", + "published_at": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { "type": "string" }, "url": { - "example": "https://www.pristineauction.com/auction/category/baseball", "type": "string" } }, "type": "object" }, - "pristineauction.LotDetailResponse": { + "ndtv.LatestVideosResponse": { "properties": { - "auction_type": { - "example": "CARD AUCTION", - "type": "string" - }, - "auction_type_url": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/ndtv.VideoCard" + }, + "type": "array" }, - "availability": { - "example": "InStock", + "page": { + "type": "integer" + } + }, + "type": "object" + }, + "ndtv.LiveBlogCard": { + "properties": { + "image_url": { "type": "string" }, - "category": { - "example": "trading-cards", + "published_at": { "type": "string" }, - "currency": { - "example": "USD", + "summary": { "type": "string" }, - "description": { + "title": { "type": "string" }, - "ends_at": { - "example": "2026-09-21T03:00:00-07:00", + "url": { "type": "string" - }, - "images": { + } + }, + "type": "object" + }, + "ndtv.LiveBlogResponse": { + "properties": { + "authors": { "items": { "type": "string" }, "type": "array" }, - "lot_number": { - "example": 13154611, - "type": "integer" + "description": { + "type": "string" }, - "no_reserve": { - "type": "boolean" + "image_url": { + "type": "string" }, - "price": { - "example": 256.66, - "type": "number" + "published_at": { + "type": "string" }, - "sku": { - "example": "LOT-13154611", + "section": { "type": "string" }, "title": { - "example": "Mickey Mantle 1969 Topps #500 (PSA 8) (MC)", "type": "string" }, - "total_bids": { - "type": "integer" - }, - "total_views": { - "type": "integer" + "updated_at": { + "type": "string" }, - "total_watching": { - "type": "integer" + "updates": { + "items": { + "$ref": "#/definitions/ndtv.LiveBlogUpdate" + }, + "type": "array" }, "url": { - "example": "https://www.pristineauction.com/a13154611", "type": "string" } }, "type": "object" }, - "pristineauction.LotSummary": { + "ndtv.LiveBlogUpdate": { "properties": { - "auction_type": { - "example": "CARD AUCTION", - "type": "string" - }, - "auction_type_url": { - "type": "string" - }, - "currency": { - "example": "USD", - "type": "string" + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "ends_at": { - "example": "2026-09-21T03:00:00Z", + "body": { "type": "string" }, - "high_bid": { - "example": 256.66, - "type": "number" - }, "image_url": { "type": "string" }, - "lot_number": { - "example": 13154611, - "type": "integer" - }, - "no_reserve": { - "type": "boolean" - }, - "subtitle": { - "example": "Rookie Card", + "published_at": { "type": "string" }, "title": { - "example": "Mickey Mantle 1969 Topps #500 (PSA 8) (MC)", + "type": "string" + }, + "updated_at": { "type": "string" }, "url": { - "example": "https://www.pristineauction.com/a13154611", "type": "string" } }, "type": "object" }, - "pristineauction.SearchResponse": { + "ndtv.LiveBlogsResponse": { "properties": { - "page": { - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/ndtv.LiveBlogCard" + }, + "type": "array" }, - "per_page": { + "page": { "type": "integer" + } + }, + "type": "object" + }, + "ndtv.SearchResponse": { + "properties": { + "has_more": { + "type": "boolean" }, - "results": { + "items": { "items": { - "$ref": "#/definitions/pristineauction.LotSummary" + "$ref": "#/definitions/ndtv.HeadlineItem" }, "type": "array" }, - "total": { + "page": { "type": "integer" }, - "total_pages": { + "query": { + "type": "string" + }, + "total_results": { "type": "integer" } }, "type": "object" }, - "pristineauction.SortOption": { + "ndtv.VideoCard": { "properties": { - "slug": { - "example": "ending-soonest", + "duration": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "pristineauction.categoriesResponseDoc": { + "ndtv.VideoCategoriesResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/pristineauction.CategoriesResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/ndtv.VideoCategory" + }, + "type": "array" } }, "type": "object" }, - "pristineauction.lotDetailResponseDoc": { + "ndtv.VideoCategory": { "properties": { - "code": { - "example": 200, - "type": "integer" + "name": { + "type": "string" }, - "data": { - "$ref": "#/definitions/pristineauction.LotDetailResponse" + "slug": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "pristineauction.searchResponseDoc": { + "ndtv.VideoResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "description": { + "type": "string" }, - "data": { - "$ref": "#/definitions/pristineauction.SearchResponse" + "duration": { + "type": "string" }, - "msg": { - "example": "OK", + "image_url": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "producthunt.LeaderboardAdItem": { + "ndtv.VideosResponse": { "properties": { - "channel_kind": { - "description": "Placement type of the ad, for example `feed`.", + "category": { "type": "string" }, - "id": { - "description": "Product Hunt ID of the ad.", - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/ndtv.VideoCard" + }, + "type": "array" }, - "large_asset_uuid": { - "description": "Identifier of the large ad image on Product Hunt's image host.", + "page": { + "type": "integer" + } + }, + "type": "object" + }, + "netshort.Card": { + "properties": { + "cover": { + "description": "Cover image with the CDN's ~tplv- resizing suffix removed.", "type": "string" }, - "name": { - "description": "Name shown on the ad.", + "episode_count": { + "description": "totalEpisode: episode count the card prints.", + "example": 35, + "type": "integer" + }, + "id": { + "description": "shortPlayId: the title's 19-digit snowflake id, and the id every other\nendpoint takes.", + "example": "2112388670085812226", "type": "string" }, - "post": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.LeaderboardAdPost" - } - ], - "description": "Launch post the ad promotes, when it promotes one." + "is_finished": { + "description": "True when the card is flagged finished.", + "type": "boolean" }, - "small_asset_uuid": { - "description": "Identifier of the small ad image on Product Hunt's image host.", - "type": "string" + "labels": { + "description": "Labels attached to the card (the type-1 label space). Pass the id and\nname of a type-2 label (from netshort-genres) to netshort-label.", + "items": { + "$ref": "#/definitions/netshort.Label" + }, + "type": "array" }, - "subject": { - "description": "Kind of ad entry as Product Hunt labels it, for example `Channel`.", + "library_id": { + "description": "shortPlayLibraryId: the library (series) id the title belongs to.", + "example": "2112388666566791169", "type": "string" }, - "tagline": { - "description": "Short tagline shown on the ad.", + "name": { + "description": "Display title with the upstream's match-highlight markup removed.", + "example": "The Dragon's Silly Captive", "type": "string" }, - "thumbnail_uuid": { - "description": "Identifier of the ad thumbnail image on Product Hunt's image host.", + "synopsis": { + "description": "Synopsis line the card prints.", "type": "string" }, "url": { - "description": "Link the ad points to.", - "type": "string" - }, - "variation_id": { - "description": "Identifier of the ad variation shown.", + "description": "Site-relative episode path from the card, e.g. /episode/-.", + "example": "/episode/the-dragons-silly-captive-2112388670085812226", "type": "string" } }, "type": "object" }, - "producthunt.LeaderboardAdPost": { + "netshort.Episode": { "properties": { - "comments_count": { - "description": "Number of comments on the launch.", - "type": "integer" + "cover": { + "type": "string" }, - "created_at": { - "description": "ISO 8601 timestamp of when the launch was created.", + "episode_id": { + "example": "2112388670085812227", "type": "string" }, - "disabled_when_scheduled": { - "description": "Whether upvoting is disabled while the launch is scheduled.", + "locked": { + "description": "True when the upstream locks the episode (paid/app-only window).", "type": "boolean" }, - "embargo_preview_at": { - "description": "ISO 8601 timestamp of the embargo preview, when the launch has one.", + "number": { + "example": 1, + "type": "integer" + } + }, + "type": "object" + }, + "netshort.GenreLabel": { + "properties": { + "id": { + "description": "labelId; pass it (with the name) to netshort-label.", + "example": "2117547232532922378", "type": "string" }, - "featured_at": { - "description": "ISO 8601 timestamp of when Product Hunt featured the launch.", + "name": { + "example": "Young Adult", "type": "string" }, - "featured_comment": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductCategoryAdComment" - } - ], - "description": "Comment Product Hunt features on the launch." + "path": { + "description": "Site-relative label path, e.g. /drama/Young%20Adult--2.", + "type": "string" }, - "has_voted": { - "description": "Whether the viewer has upvoted this launch.", - "type": "boolean" + "play_count": { + "description": "playCount the payload reports for the label.", + "example": 10244, + "type": "integer" }, - "hide_votes_count": { - "description": "Whether the maker hides the vote count for this launch.", + "tab": { + "description": "Tab key this label belongs to.", + "example": "all-plots", + "type": "string" + } + }, + "type": "object" + }, + "netshort.GenreTab": { + "properties": { + "capped": { + "description": "True when this tab returned exactly the upstream's 50-label cap, so more\nvalues may exist. The site's own encrypted nav route returned the same\nrows, so the cap is upstream's, not this parser's.", + "example": true, "type": "boolean" }, - "id": { - "description": "Product Hunt ID of the promoted launch post.", + "key": { + "description": "tab key from the payload, e.g. \"story\".", + "example": "story", "type": "string" }, - "latest_score": { - "description": "Current upvote score of the launch.", - "type": "integer" - }, - "launch_day_score": { - "description": "Upvote score the launch had on its launch day.", + "label_count": { + "description": "Number of labels the payload carried for this tab.", + "example": 50, "type": "integer" }, "name": { - "description": "Name of the promoted launch.", + "example": "Story", "type": "string" + } + }, + "type": "object" + }, + "netshort.GenresResponse": { + "properties": { + "capped": { + "description": "True when at least one tab hit the upstream's 50-label cap. When true the\nlist is the site's complete navigation, but the site's own navigation is\nitself capped — do not describe it as exhaustive.", + "example": true, + "type": "boolean" }, - "product": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.LeaderboardProductRef" - } - ], - "description": "Product the launch belongs to." - }, - "randomization_status": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.LeaderboardRandomizationStatus" - } - ], - "description": "Whether and when Product Hunt randomizes where this launch appears." + "labels": { + "items": { + "$ref": "#/definitions/netshort.GenreLabel" + }, + "type": "array" }, - "slug": { - "description": "URL slug of the promoted launch post.", + "language": { + "example": "en", "type": "string" }, - "topics": { - "description": "Topics the launch is tagged with.", + "tabs": { "items": { - "$ref": "#/definitions/producthunt.LeaderboardTopic" + "$ref": "#/definitions/netshort.GenreTab" }, "type": "array" - }, - "updated_at": { - "description": "ISO 8601 timestamp of the last update to the launch.", - "type": "string" } }, "type": "object" }, - "producthunt.LeaderboardGhostItem": { + "netshort.HomeResponse": { "properties": { - "id": { - "description": "Product Hunt ID of the empty ad slot.", + "language": { + "description": "Locale the shelves were read for.", + "example": "en", "type": "string" }, - "subject": { - "description": "Kind of entry as Product Hunt labels it. Always `Ghost`.", - "type": "string" + "shelves": { + "items": { + "$ref": "#/definitions/netshort.Shelf" + }, + "type": "array" } }, "type": "object" }, - "producthunt.LeaderboardItem": { + "netshort.Label": { "properties": { - "ad": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.LeaderboardAdItem" - } - ], - "description": "Ad details. Set when `type` is `ad`." - }, - "ghost_ad": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.LeaderboardGhostItem" - } - ], - "description": "Empty ad slot details. Set when `type` is `ghost_ad`." + "id": { + "example": "2117547232532922378", + "type": "string" }, - "post": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.LeaderboardPostItem" - } - ], - "description": "Launch details. Set when `type` is `post`." + "name": { + "example": "Revenge", + "type": "string" }, - "type": { - "description": "Kind of entry: `post` for a launch, `ad` for an ad or `ghost_ad` for an empty ad slot.", + "path": { + "description": "Site-relative label path as the payload prints it.", + "example": "/drama/Revenge-2117547232532922378-2", "type": "string" } }, "type": "object" }, - "producthunt.LeaderboardPage": { + "netshort.ListingResponse": { "properties": { - "connection": { - "description": "Name of the Product Hunt feed the items come from.", + "language": { + "example": "en", "type": "string" }, - "day": { - "description": "Day of the month of the leaderboard period. Set for daily leaderboards.", - "example": 29, + "page": { + "description": "Page actually returned. page/0 and page/1 both canonicalise to 1 upstream.", + "example": 1, "type": "integer" }, - "end_cursor": { - "description": "Cursor that points to the end of this page, as Product Hunt returns it.", - "type": "string" - }, - "featured": { - "description": "Whether the leaderboard lists featured launches only.", - "type": "boolean" + "page_size": { + "description": "PageSize the route uses: 24 for the plot index and label pages, 10 for\nthe browse index.", + "example": 24, + "type": "integer" }, - "golden_kitty_years": { - "description": "Years that have a Golden Kitty Awards hall of fame entry.", + "titles": { "items": { - "type": "integer" + "$ref": "#/definitions/netshort.Card" }, "type": "array" }, - "has_next_page": { - "description": "Whether Product Hunt has more leaderboard items after this page.", + "total": { + "description": "totalCount from the payload: the site's own catalogue size.", + "example": 11575, + "type": "integer" + } + }, + "type": "object" + }, + "netshort.SearchResponse": { + "properties": { + "approximate": { + "description": "Always true: the search is fuzzy (an unmatched keyword still returns\ntoken matches) and pages are not a strict partition, so results are\napproximate. Dedupe by `id` when accumulating pages.", + "example": true, "type": "boolean" }, - "items": { - "description": "Leaderboard entries in ranked order. Each one is a launch, an ad or an empty ad slot.", - "items": { - "$ref": "#/definitions/producthunt.LeaderboardItem" - }, - "type": "array" + "language": { + "example": "en_US", + "type": "string" }, - "month": { - "description": "Month number from the requested date, 1 to 12. Only meaningful for daily and monthly leaderboards.", + "page": { "example": 1, "type": "integer" }, - "order": { - "description": "Ranking order the leaderboard uses, for example `DAILY_RANK`.", - "example": "DAILY_RANK", - "type": "string" - }, - "raw_page_info": { - "additionalProperties": {}, - "description": "Pagination details for this page as Product Hunt returns them: `endCursor` and `hasNextPage`.", - "type": "object" + "page_size": { + "description": "Requested page size. The response may carry more results than this: the\nupstream floors page 1 at 15 items.", + "example": 10, + "type": "integer" }, - "scope": { - "description": "Leaderboard period: `daily`, `weekly`, `monthly` or `yearly`.", - "example": "daily", + "query": { + "example": "love", "type": "string" }, - "total_count": { - "description": "Number of items returned on this page.", - "type": "integer" - }, - "week": { - "description": "ISO week number from the requested date. Only meaningful for weekly leaderboards.", - "example": 5, - "type": "integer" + "results": { + "description": "Results in the upstream's own order. `name` has the upstream's match\nhighlighting stripped.", + "items": { + "$ref": "#/definitions/netshort.Card" + }, + "type": "array" }, - "year": { - "description": "Year of the leaderboard period.", - "example": 2026, + "total": { + "description": "Upstream total when the route reports one; 0 when it does not.", "type": "integer" } }, "type": "object" }, - "producthunt.LeaderboardPostItem": { + "netshort.Shelf": { "properties": { - "comments_count": { - "description": "Number of comments on the launch.", - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 timestamp of when the launch was created.", + "list_page_url": { + "description": "listPageUrl the shelf's \"see all\" link points at, site-relative.", + "example": "/toplist/trending-short-dramas", "type": "string" }, - "daily_rank": { - "description": "Rank on the daily leaderboard. `0` when Product Hunt gives no rank.", - "type": "integer" - }, - "disabled_when_scheduled": { - "description": "Whether upvoting is disabled while the launch is scheduled.", - "type": "boolean" + "name": { + "description": "groupName from the payload, e.g. \"Trending Now\".", + "example": "Trending Now", + "type": "string" }, - "embargo_preview_at": { - "description": "ISO 8601 timestamp of the embargo preview, when the launch has one.", + "titles": { + "items": { + "$ref": "#/definitions/netshort.Card" + }, + "type": "array" + } + }, + "type": "object" + }, + "netshort.TitleResponse": { + "properties": { + "chase_count": { + "description": "totalChaseNums as the site prints it (\"2954.4K\").", + "example": "2954.4K", "type": "string" }, - "featured_at": { - "description": "ISO 8601 timestamp of when Product Hunt featured the launch.", + "cover": { "type": "string" }, - "friend_voters_count": { - "description": "Number of the viewer's friends who upvoted the launch.", + "episode_count": { + "description": "totalEpisode from the payload.", + "example": 35, "type": "integer" }, - "has_voted": { - "description": "Whether the viewer has upvoted this launch.", - "type": "boolean" + "episodes": { + "description": "The title's episode window (videoEpisodeInfos, 40 entries in the capture).", + "items": { + "$ref": "#/definitions/netshort.Episode" + }, + "type": "array" }, - "hide_votes_count": { - "description": "Whether the maker hides the vote count for this launch.", + "has_more_episodes": { + "description": "True when the payload carried the upstream's full 40-episode window, so a\nlonger series continues past it.", + "example": false, "type": "boolean" }, "id": { - "description": "Product Hunt ID of the launch post.", + "example": "2112388670085812226", "type": "string" }, - "is_subscribed": { - "description": "Whether the viewer is subscribed to this launch.", + "is_delisted": { + "description": "True when the payload flags the title delisted.", "type": "boolean" }, - "latest_score": { - "description": "Current upvote score of the launch.", - "type": "integer" - }, - "launch_day_score": { - "description": "Upvote score the launch had on its launch day.", - "type": "integer" - }, - "monthly_rank": { - "description": "Rank on the monthly leaderboard. `0` when Product Hunt gives no rank.", - "type": "integer" + "labels": { + "description": "Labels the payload lists for the title (type-1 space).", + "items": { + "$ref": "#/definitions/netshort.Label" + }, + "type": "array" }, - "name": { - "description": "Name of the launch as shown on the leaderboard.", + "library_id": { "type": "string" }, - "product": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.LeaderboardProductRef" - } - ], - "description": "Product the launch belongs to." - }, - "product_state": { - "description": "Product Hunt's state label for the product, for example `default`.", + "like_count": { + "description": "totalLikeNums as the site prints it (\"282.6K\"): display text, not an\nexact integer.", + "example": "282.6K", "type": "string" }, - "randomization_status": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.LeaderboardRandomizationStatus" - } - ], - "description": "Whether and when Product Hunt randomizes where this launch appears." - }, - "scheduled_at": { - "description": "ISO 8601 timestamp the launch is scheduled for.", + "name": { + "example": "The Dragon's Silly Captive", "type": "string" }, - "shortened_url": { - "description": "Short Product Hunt link to the launch.", + "publish_time": { + "description": "publishTime as the payload prints it.", "type": "string" }, - "slug": { - "description": "URL slug of the launch post.", + "synopsis": { "type": "string" }, - "tagline": { - "description": "Short tagline of the launch.", + "url": { + "description": "Site-relative episode path from the payload.", + "type": "string" + } + }, + "type": "object" + }, + "netshort.ToplistResponse": { + "properties": { + "board": { + "example": "trending-short-dramas", "type": "string" }, - "thumbnail_image_uuid": { - "description": "Identifier of the launch thumbnail image on Product Hunt's image host.", + "name": { + "description": "Board display name from the site's own nav.", + "example": "Trending Now", "type": "string" }, - "topics": { - "description": "Topics the launch is tagged with.", + "titles": { "items": { - "$ref": "#/definitions/producthunt.LeaderboardTopic" + "$ref": "#/definitions/netshort.Card" }, "type": "array" + } + }, + "type": "object" + }, + "netshort.browseResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "updated_at": { - "description": "ISO 8601 timestamp of the last update to the launch.", - "type": "string" + "data": { + "$ref": "#/definitions/netshort.ListingResponse" }, - "weekly_rank": { - "description": "Rank on the weekly leaderboard. `0` when Product Hunt gives no rank.", - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "producthunt.LeaderboardProductRef": { + "netshort.genresResponseDoc": { "properties": { - "id": { - "description": "Product Hunt ID of the product.", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "is_no_longer_online": { - "description": "Whether Product Hunt marks the product as no longer online.", - "type": "boolean" + "data": { + "$ref": "#/definitions/netshort.GenresResponse" }, - "is_subscribed": { - "description": "Whether the viewer follows this product.", - "type": "boolean" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "netshort.homeResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "is_top_product": { - "description": "Whether Product Hunt marks this as a top product.", - "type": "boolean" + "data": { + "$ref": "#/definitions/netshort.HomeResponse" }, - "logo_uuid": { - "description": "Identifier of the product logo on Product Hunt's image host.", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "netshort.labelResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "name": { - "description": "Name of the product.", - "type": "string" + "data": { + "$ref": "#/definitions/netshort.ListingResponse" }, - "slug": { - "description": "URL slug of the product. Use it with the product endpoint.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "producthunt.LeaderboardRandomizationStatus": { + "netshort.plotsResponseDoc": { "properties": { - "active": { - "description": "Whether randomization is currently in effect.", - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "next_transition_at": { - "description": "ISO 8601 timestamp of the next change to the randomization state, when there is one.", + "data": { + "$ref": "#/definitions/netshort.ListingResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "netshort.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "random_day": { - "description": "Whether the launch day is randomized.", - "type": "boolean" + "data": { + "$ref": "#/definitions/netshort.SearchResponse" }, - "randomize_order": { - "description": "Whether the order of this launch among others is randomized.", - "type": "boolean" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "producthunt.LeaderboardTopic": { + "netshort.titleResponseDoc": { "properties": { - "id": { - "description": "Product Hunt ID of the topic.", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "description": "Display name of the topic.", + "data": { + "$ref": "#/definitions/netshort.TitleResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "netshort.toplistResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "slug": { - "description": "URL slug of the topic.", + "data": { + "$ref": "#/definitions/netshort.ToplistResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "producthunt.Product": { + "news18.AuthorResponse": { "properties": { - "categories": { - "description": "Names of the Product Hunt categories the product belongs to.", - "example": [ - "[\"Design\"", - "\"Productivity\"]" - ], + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "daily_rank": { - "description": "Daily leaderboard rank. `0` when Product Hunt shows none.", - "example": 1, - "type": "integer" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "date_published": { - "description": "Time the product was first published on Product Hunt, as an RFC 3339 timestamp.", - "example": "2024-07-21T12:34:56Z", + "image_url": { "type": "string" }, - "description": { - "description": "Description of the product from its Product Hunt page.", - "example": "Chronicle lets designers and developers review every iteration in one place.", + "name": { "type": "string" }, - "followers_count": { - "description": "Number of Product Hunt users following the product.", - "example": 2000, - "type": "integer" + "social_links": { + "items": { + "$ref": "#/definitions/news18.AuthorSocialLink" + }, + "type": "array" }, - "id": { - "description": "Product Hunt slug of the product. Use it with the product endpoint.", - "example": "chronicle-design", + "url": { "type": "string" - }, - "monthly_rank": { - "description": "Monthly leaderboard rank from the product's awards. `0` when Product Hunt shows none.", - "example": 1, - "type": "integer" - }, - "name": { - "description": "Name of the product.", - "example": "Chronicle", + } + }, + "type": "object" + }, + "news18.AuthorSocialLink": { + "properties": { + "type": { "type": "string" }, - "rating": { - "description": "Average review rating on Product Hunt, out of 5.", - "example": 4.8, - "type": "number" - }, - "review_count": { - "description": "Number of reviews the product has on Product Hunt.", - "example": 152, - "type": "integer" - }, - "similar_products": { - "description": "Products Product Hunt lists as alternatives.", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "newscomau.AuthorResponse": { + "properties": { + "articles": { "items": { - "$ref": "#/definitions/producthunt.SimilarProduct" + "$ref": "#/definitions/newscomau.HeadlineItem" }, "type": "array" }, - "social_links": { - "description": "Links to the product's social and app store pages, sorted alphabetically. Product Hunt's own links are left out.", - "example": [ - "[\"https://twitter.com/chronicle\"", - "\"https://github.com/chronicle\"]" - ], + "biography": { "items": { "type": "string" }, "type": "array" }, - "tagline": { - "description": "Short tagline of the product.", - "example": "Visual version control for teams", + "image_url": { "type": "string" }, - "website": { - "description": "Product website address.", - "example": "https://chronicle.design", + "job_title": { "type": "string" }, - "weekly_rank": { - "description": "Weekly leaderboard rank from the product's awards. `0` when Product Hunt shows none.", - "example": 1, - "type": "integer" + "name": { + "type": "string" + }, + "social_urls": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { + "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutAd": { + "newscomau.HeadlineItem": { "properties": { - "channel_kind": { - "description": "Placement type of the ad, for example `feed`.", - "type": "string" - }, - "id": { - "description": "Product Hunt ID of the ad.", - "type": "string" - }, - "large_asset_uuid": { - "description": "Identifier of the large ad image on Product Hunt's image host.", + "author": { "type": "string" }, - "name": { - "description": "Name shown on the ad.", + "image_url": { "type": "string" }, - "small_asset_uuid": { - "description": "Identifier of the small ad image on Product Hunt's image host.", + "published_at": { "type": "string" }, - "subject": { - "description": "Kind of ad entry as Product Hunt labels it.", + "summary": { "type": "string" }, - "tagline": { - "description": "Short tagline shown on the ad.", + "title": { "type": "string" }, - "thumbnail_uuid": { - "description": "Identifier of the ad thumbnail image on Product Hunt's image host.", + "type": { "type": "string" }, "url": { - "description": "Link the ad points to.", - "type": "string" - }, - "variation_id": { - "description": "Identifier of the ad variation shown.", "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutDiscussionForum": { + "newsmax.AuthorResponse": { "properties": { - "id": { - "description": "Product Hunt ID of the product's discussion forum.", - "type": "string" - }, - "path": { - "description": "Product Hunt path of the discussion forum.", - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "threads": { - "description": "Discussion threads returned for the forum.", + "biography": { "items": { - "$ref": "#/definitions/producthunt.ProductAboutDiscussionThread" + "type": "string" }, "type": "array" }, - "total_count": { - "description": "Total number of discussion threads in the forum.", - "type": "integer" + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutDiscussionThread": { + "newsplatform.ArticleResponse": { "properties": { - "commentable_id": { - "description": "Product Hunt ID used for comments on the thread.", - "type": "string" - }, - "comments_count": { - "description": "Number of comments on the thread.", - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 timestamp of when the thread was created.", - "type": "string" + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "description_preview": { - "description": "Short preview of the thread's opening text.", + "description": { "type": "string" }, - "forum": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductAboutForumRef" - } - ], - "description": "Forum the thread belongs to." - }, - "has_voted": { - "description": "Whether the viewer has upvoted the thread.", - "type": "boolean" - }, - "id": { - "description": "Product Hunt ID of the thread.", + "image_url": { "type": "string" }, - "is_featured": { - "description": "Whether Product Hunt features the thread.", - "type": "boolean" + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" }, - "is_pinned": { - "description": "Whether the thread is pinned in the forum.", + "paywalled": { + "description": "Paywalled is true when the publisher serves only a teaser of this\narticle to anonymous readers, so Paragraphs is a partial body rather than\nthe full text. It is omitted when the full public body was returned.", "type": "boolean" }, - "path": { - "description": "Product Hunt path of the thread.", + "published_at": { "type": "string" }, - "slug": { - "description": "URL slug of the thread.", + "section": { "type": "string" }, "title": { - "description": "Title of the thread.", "type": "string" }, - "user": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductCategoryUser" - } - ], - "description": "Member who started the thread." + "updated_at": { + "type": "string" }, - "votes_count": { - "description": "Number of upvotes on the thread.", - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutForumRef": { + "newsplatform.HeadlineItem": { "properties": { - "id": { - "description": "Product Hunt ID of the forum.", + "author": { "type": "string" }, - "path": { - "description": "Product Hunt path of the forum.", + "image_url": { "type": "string" }, - "slug": { - "description": "URL slug of the forum.", + "published_at": { "type": "string" }, - "subject": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductAboutForumSubject" - } - ], - "description": "Product the forum is about." - } - }, - "type": "object" - }, - "producthunt.ProductAboutForumSubject": { - "properties": { - "id": { - "description": "Product Hunt ID of the product the forum is about.", + "summary": { "type": "string" }, - "is_no_longer_online": { - "description": "Whether Product Hunt marks the product as no longer online.", - "type": "boolean" + "title": { + "type": "string" }, - "logo_uuid": { - "description": "Identifier of the product logo on Product Hunt's image host.", + "type": { "type": "string" }, - "name": { - "description": "Name of the product the forum is about.", + "url": { "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutGhostAd": { + "newsplatform.HeadlinesResponse": { "properties": { - "id": { - "description": "Product Hunt ID of the ad entry.", - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "subject": { - "description": "Kind of entry as Product Hunt labels it, for example `Ghost`.", + "section": { "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutLatestLaunch": { + "newsplatform.NewsResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "newsplatform.Section": { "properties": { - "id": { - "description": "Product Hunt ID of the latest launch.", - "type": "string" - }, - "is_maker": { - "description": "Whether the viewer is a maker of this launch.", - "type": "boolean" - }, - "launch_number": { - "description": "Sequence number of this launch among the product's launches.", - "type": "integer" - }, - "launched_this_week": { - "description": "Whether the product launched this week.", - "type": "boolean" - }, - "launching_today": { - "description": "Whether the product is launching today.", - "type": "boolean" - }, "name": { - "description": "Name of the latest launch.", - "type": "string" - }, - "product_state": { - "description": "Product Hunt's state label for the product, for example `default`.", - "type": "string" - }, - "scheduled_at": { - "description": "ISO 8601 timestamp the launch is scheduled for.", "type": "string" }, "slug": { - "description": "URL slug of the latest launch.", - "type": "string" - }, - "tagline": { - "description": "Short tagline of the latest launch.", "type": "string" }, - "thumbnail_image_uuid": { - "description": "Identifier of the launch thumbnail image on Product Hunt's image host.", + "url": { "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutLaunch": { + "newsplatform.SectionsResponse": { "properties": { - "ad1": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductAboutGhostAd" - } - ], - "description": "First ad slot shown next to the launch." - }, - "ad2": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductAboutGhostAd" - } - ], - "description": "Second ad entry attached to the launch." - }, - "badges": { - "description": "Badges the launch has earned, such as leaderboard awards.", + "sections": { "items": { - "$ref": "#/definitions/producthunt.ProductCategoryListBadge" + "$ref": "#/definitions/newsplatform.Section" }, "type": "array" + } + }, + "type": "object" + }, + "newsweek.AuthorArticle": { + "properties": { + "section": { + "type": "string" }, - "can_deputy_manage": { - "description": "Whether the viewer can manage the launch as a deputy.", - "type": "boolean" - }, - "can_manage": { - "description": "Whether the viewer can manage the launch.", - "type": "boolean" - }, - "comments_count": { - "description": "Number of comments on the launch.", - "type": "integer" - }, - "created_at": { - "description": "ISO 8601 timestamp of when the launch was created.", + "section_url": { "type": "string" }, - "daily_rank": { - "description": "Rank on the daily leaderboard. `0` when Product Hunt gives no rank.", - "type": "integer" + "summary": { + "type": "string" }, - "description": { - "description": "Description of the launch written by the maker.", + "title": { "type": "string" }, - "detailed_reviews": { - "description": "Detailed reviews and shoutouts for the launch.", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "newsweek.AuthorResponse": { + "properties": { + "articles": { "items": { - "$ref": "#/definitions/producthunt.ProductAboutShoutout" + "$ref": "#/definitions/newsweek.AuthorArticle" }, "type": "array" }, - "disabled_when_scheduled": { - "description": "Whether upvoting is disabled while the launch is scheduled.", - "type": "boolean" + "bio": { + "type": "string" }, - "embargo_preview_at": { - "description": "ISO 8601 timestamp of the embargo preview, when the launch has one.", + "email": { "type": "string" }, - "featured": { - "description": "Whether Product Hunt featured the launch.", + "has_next_page": { "type": "boolean" }, - "featured_at": { - "description": "ISO 8601 timestamp of when Product Hunt featured the launch.", + "image_url": { "type": "string" }, - "has_voted": { - "description": "Whether the viewer has upvoted this launch.", - "type": "boolean" + "job_title": { + "type": "string" }, - "hide_votes_count": { - "description": "Whether the maker hides the vote count for this launch.", - "type": "boolean" + "name": { + "type": "string" }, - "id": { - "description": "Product Hunt ID of the launch.", + "page": { + "type": "integer" + }, + "slug": { "type": "string" }, - "is_archived": { - "description": "Whether the launch is archived.", - "type": "boolean" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "newyorker.ArticleResponse": { + "properties": { + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "is_available": { - "description": "Whether Product Hunt marks the launch as available.", - "type": "boolean" + "description": { + "type": "string" }, - "is_hunter": { - "description": "Whether the viewer is the hunter who posted this launch.", - "type": "boolean" + "image_url": { + "type": "string" }, - "is_maker": { - "description": "Whether the viewer is a maker of this launch.", + "is_accessible_for_free": { "type": "boolean" }, - "is_top_launch": { - "description": "Whether Product Hunt marks this as a top launch.", + "is_truncated": { "type": "boolean" }, - "latest_score": { - "description": "Current upvote score of the launch.", - "type": "integer" + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" }, - "launch_day_score": { - "description": "Upvote score the launch had on its launch day.", - "type": "integer" + "published_at": { + "type": "string" }, - "launch_number": { - "description": "Sequence number of this launch among the product's launches.", - "type": "integer" + "section": { + "type": "string" }, - "launch_state": { - "description": "Launch state as Product Hunt labels it, for example `featured`.", + "title": { "type": "string" }, - "launched_this_week": { - "description": "Whether the launch happened this week.", - "type": "boolean" + "updated_at": { + "type": "string" }, - "launching_today": { - "description": "Whether the product is launching today.", - "type": "boolean" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "newyorker.AuthorLink": { + "properties": { + "type": { + "type": "string" }, - "links": { - "description": "Download or visit links listed on the launch, one per store or website.", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "newyorker.AuthorResponse": { + "properties": { + "articles": { "items": { - "$ref": "#/definitions/producthunt.ProductAboutLink" + "$ref": "#/definitions/newyorker.HeadlineItem" }, "type": "array" }, - "makers": { - "description": "Makers credited on the launch.", + "biography": { "items": { - "$ref": "#/definitions/producthunt.ProductAboutUser" + "type": "string" }, "type": "array" }, - "media": { - "description": "Images and videos attached to the launch.", + "image_url": { + "type": "string" + }, + "links": { "items": { - "$ref": "#/definitions/producthunt.ProductAboutMedia" + "$ref": "#/definitions/newyorker.AuthorLink" }, "type": "array" }, - "meta": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductAboutMeta" - } - ], - "description": "Page metadata for the launch." - }, - "moderation_reason": { - "description": "Reason Product Hunt gives when the launch was moderated.", - "type": "string" - }, "name": { - "description": "Name of the launch.", "type": "string" }, - "pricing_type": { - "description": "Pricing model of the product as Product Hunt lists it, for example `free`.", + "url": { "type": "string" - }, - "primary_link": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductAboutPrimaryLink" - } - ], - "description": "Main link of the launch." - }, - "product": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductAboutLaunchProduct" - } - ], - "description": "Product the launch belongs to." - }, - "product_state": { - "description": "Product Hunt's state label for the product, for example `default`.", + } + }, + "type": "object" + }, + "newyorker.HeadlineItem": { + "properties": { + "author": { "type": "string" }, - "promo": { - "additionalProperties": {}, - "description": "Promotion attached to the launch, as Product Hunt returns it.", - "type": "object" - }, - "redirect_to_product": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.LeaderboardProductRef" - } - ], - "description": "Product the launch page redirects to, when it redirects." + "image_url": { + "type": "string" }, - "scheduled_at": { - "description": "ISO 8601 timestamp the launch is scheduled for.", + "published_at": { "type": "string" }, - "slug": { - "description": "URL slug of the launch.", + "summary": { "type": "string" }, - "tagline": { - "description": "Short tagline of the launch.", + "title": { "type": "string" }, - "thumbnail_image_uuid": { - "description": "Identifier of the launch thumbnail image on Product Hunt's image host.", + "type": { "type": "string" }, - "topics": { - "description": "Topics the launch is tagged with.", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "nfhs.ActivitiesResponse": { + "properties": { + "activities": { "items": { - "$ref": "#/definitions/producthunt.ProductCategoryRef" + "$ref": "#/definitions/nfhs.Activity" }, "type": "array" }, - "trashed_at": { - "description": "ISO 8601 timestamp of when the launch was trashed, when it was.", - "type": "string" + "count": { + "type": "integer" }, - "updated_at": { - "description": "ISO 8601 timestamp of the last update to the launch.", + "fetched_at": { "type": "string" }, - "url": { - "description": "Product Hunt link to the launch.", + "source_url": { "type": "string" - }, - "user": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductAboutUser" - } - ], - "description": "Member who posted the launch." - }, - "weekly_rank": { - "description": "Rank on the weekly leaderboard. `0` when Product Hunt gives no rank.", - "type": "integer" } }, "type": "object" }, - "producthunt.ProductAboutLaunchFlags": { + "nfhs.Activity": { "properties": { + "display_name": { + "type": "string" + }, + "icon_path": { + "type": "string" + }, "id": { - "description": "Product Hunt ID of the latest launch.", + "type": "integer" + }, + "is_championship": { + "type": "boolean" + }, + "is_deleted": { + "type": "boolean" + }, + "is_indoor": { + "type": "boolean" + }, + "is_sport": { + "type": "boolean" + }, + "is_top_sport": { + "type": "boolean" + }, + "is_two_team": { + "type": "boolean" + }, + "mute": { + "type": "boolean" + }, + "name": { "type": "string" }, - "launched_this_week": { - "description": "Whether the product launched this week.", + "score": { + "type": "integer" + }, + "show_genders": { "type": "boolean" }, - "launching_today": { - "description": "Whether the product is launching today.", + "show_genders_combined": { "type": "boolean" } }, "type": "object" }, - "producthunt.ProductAboutLaunchProduct": { + "nfhs.Affiliate": { "properties": { - "can_claim": { - "description": "Whether the viewer can claim the product page.", - "type": "boolean" + "about": { + "type": "string" }, - "can_edit": { - "description": "Whether the viewer can edit the product page.", - "type": "boolean" + "affiliate_type": { + "type": "string" }, - "clean_url": { - "description": "Product website address without tracking parameters.", + "attribution_group": { "type": "string" }, - "detailed_review": { - "additionalProperties": {}, - "description": "Detailed review summary of the product, as Product Hunt returns it.", - "type": "object" + "content_type": { + "type": "string" }, - "first_launch": { - "description": "Whether this is the product's first launch.", + "dto_enabled": { "type": "boolean" }, + "facebook": { + "type": "string" + }, "id": { - "description": "Product Hunt ID of the product.", "type": "string" }, - "is_claimed": { - "description": "Whether a team has claimed the product page.", - "type": "boolean" + "instagram": { + "type": "string" }, - "is_no_longer_online": { - "description": "Whether Product Hunt marks the product as no longer online.", + "is_deleted": { "type": "boolean" }, - "is_subscribed": { - "description": "Whether the viewer follows this product.", + "is_network": { "type": "boolean" }, - "is_top_product": { - "description": "Whether Product Hunt marks this as a top product.", + "is_subscription": { "type": "boolean" }, - "is_viewer_team_member": { - "additionalProperties": {}, - "description": "Whether the viewer is on the product's team, as Product Hunt returns it.", - "type": "object" - }, - "latest_launch": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductAboutLaunchFlags" - } - ], - "description": "Flags describing the product's latest launch." + "key": { + "type": "string" }, - "logo_uuid": { - "description": "Identifier of the product logo on Product Hunt's image host.", + "logo": { "type": "string" }, "name": { - "description": "Name of the product.", "type": "string" }, - "posts_count": { - "description": "Number of launch posts the product has.", - "type": "integer" + "primary_color": { + "type": "string" }, - "pro_con_tags": { - "description": "Pro and con tags reviewers have attached to the product.", - "items": { - "$ref": "#/definitions/producthunt.ProductDetailedReviewTag" - }, - "type": "array" + "producer_key": { + "type": "string" }, - "review_questions": { - "description": "Questions Product Hunt asks reviewers of the product.", + "producer_slug": { + "type": "string" + }, + "publisher_key": { + "type": "string" + }, + "publisher_location": { + "type": "string" + }, + "publisher_slug": { + "type": "string" + }, + "secondary_color": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "states": { "items": { - "$ref": "#/definitions/producthunt.ProductAboutReviewQuestion" + "$ref": "#/definitions/nfhs.StateRef" }, "type": "array" }, - "reviews_rating": { - "description": "Average review rating on Product Hunt.", - "type": "number" + "twitter": { + "type": "string" }, - "slug": { - "description": "URL slug of the product. Use it with the product endpoint.", + "type": { "type": "string" }, - "tagline": { - "description": "Short tagline of the product.", + "website": { "type": "string" }, - "twitter_url": { - "description": "Link to the product's Twitter or X profile.", + "youtube": { "type": "string" + } + }, + "type": "object" + }, + "nfhs.AffiliateResponse": { + "properties": { + "affiliate": { + "$ref": "#/definitions/nfhs.Affiliate" }, - "viewer_pending_team_request": { - "additionalProperties": {}, - "description": "The viewer's pending request to join the product's team, as Product Hunt returns it.", - "type": "object" + "count": { + "type": "integer" }, - "website_domain": { - "description": "Domain name of the product website.", + "fetched_at": { "type": "string" }, - "website_url": { - "description": "Product website address.", + "source_url": { "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutLink": { + "nfhs.AffiliatesResponse": { "properties": { - "devices": { - "description": "Devices the linked app supports.", + "affiliates": { "items": { - "type": "string" + "$ref": "#/definitions/nfhs.Affiliate" }, "type": "array" }, - "id": { - "description": "Product Hunt ID of the link.", + "count": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "redirect_path": { - "description": "Product Hunt redirect path that leads to the link target.", + "next_cursor": { "type": "string" }, - "store_name": { - "description": "Name of the app store the link points to, when it points to one.", + "size": { + "type": "integer" + }, + "source_url": { "type": "string" }, - "website_name": { - "description": "Name of the website the link points to.", + "start": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "total_relation": { "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutMedia": { + "nfhs.Association": { "properties": { - "id": { - "description": "Product Hunt ID of the media item.", + "about": { "type": "string" }, - "image_uuid": { - "description": "Identifier of the image on Product Hunt's image host.", + "acronym": { "type": "string" }, - "interactive_demo_id": { - "description": "Identifier of the interactive demo, when the media is one.", + "championship_page_url": { "type": "string" }, - "interactive_demo_type": { - "description": "Type of the interactive demo, when the media is one.", + "content_type": { "type": "string" }, - "media_type": { - "description": "Type of media, for example `image`.", + "disable_rev_share": { + "type": "boolean" + }, + "facebook": { "type": "string" }, - "original_height": { - "description": "Height of the original image in pixels.", - "type": "integer" + "id": { + "type": "string" }, - "original_width": { - "description": "Width of the original image in pixels.", - "type": "integer" + "instagram": { + "type": "string" }, - "platform": { - "description": "Video platform hosting the media, when it is a video.", + "is_deleted": { + "type": "boolean" + }, + "is_network": { + "type": "boolean" + }, + "key": { "type": "string" }, - "thumbnail_height": { - "description": "Height of the media thumbnail. 0 when not provided.", - "type": "integer" + "logo": { + "type": "string" }, - "thumbnail_width": { - "description": "Width of the media thumbnail. 0 when not provided.", - "type": "integer" + "name": { + "type": "string" }, - "url": { - "description": "Link to the media item, for example a video link.", + "primary_color": { "type": "string" }, - "video_id": { - "description": "Video identifier on the hosting platform, when the media is a video.", + "producer_key": { "type": "string" - } - }, - "type": "object" - }, - "producthunt.ProductAboutMentionedProduct": { - "properties": { - "id": { - "description": "Product Hunt ID of the product.", + }, + "producer_slug": { "type": "string" }, - "is_no_longer_online": { - "description": "Whether Product Hunt marks the product as no longer online.", - "type": "boolean" + "publisher_key": { + "type": "string" }, - "logo_uuid": { - "description": "Identifier of the product logo on Product Hunt's image host.", + "publisher_location": { "type": "string" }, - "name": { - "description": "Name of the product.", + "publisher_url": { "type": "string" }, - "path": { - "description": "Product Hunt path of the product page.", + "secondary_color": { + "type": "string" + }, + "share_image": { "type": "string" }, "slug": { - "description": "URL slug of the product. Use it with the product endpoint.", "type": "string" }, - "tagline": { - "description": "Short tagline of the product.", + "states": { + "items": { + "$ref": "#/definitions/nfhs.StateRef" + }, + "type": "array" + }, + "timezone": { + "type": "string" + }, + "twitter": { + "type": "string" + }, + "type": { + "type": "string" + }, + "website": { + "type": "string" + }, + "youtube": { "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutMeta": { + "nfhs.AssociationResponse": { "properties": { - "title": { - "description": "Page title of the launch.", + "association": { + "$ref": "#/definitions/nfhs.Association" + }, + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutPage": { + "nfhs.AssociationsResponse": { "properties": { - "ad": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductAboutAd" - } - ], - "description": "Ad shown on the page." + "associations": { + "items": { + "$ref": "#/definitions/nfhs.Association" + }, + "type": "array" }, - "launch": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductAboutLaunch" - } - ], - "description": "Launch the page highlights, when the layout variant has one." + "count": { + "type": "integer" }, - "page_variant_typename": { - "description": "Layout variant Product Hunt uses for the product page, for example `ProductPageVariantHighlightedLaunch`.", + "fetched_at": { "type": "string" }, - "product": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductAboutProduct" - } - ], - "description": "Product details from the about page." + "next_cursor": { + "type": "string" }, - "product_id": { - "description": "Product Hunt ID of the product.", + "size": { + "type": "integer" + }, + "source_url": { "type": "string" }, - "viewer": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductAboutViewer" - } - ], - "description": "Details about the viewer's relationship to the product." + "start": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "total_relation": { + "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutPageVariant": { + "nfhs.Event": { "properties": { - "launch_id": { - "description": "Product Hunt ID of the launch the page variant highlights.", + "auto_lock": { + "type": "boolean" + }, + "away_score": { + "type": "integer" + }, + "city": { "type": "string" }, - "typename": { - "description": "Layout variant Product Hunt uses for the product page.", + "class_label": { "type": "string" - } - }, - "type": "object" - }, - "producthunt.ProductAboutPost": { - "properties": { - "badges": { - "description": "Badges the launch has earned, such as leaderboard awards.", + }, + "classification": { + "type": "string" + }, + "content_type": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "event_tags": { "items": { - "$ref": "#/definitions/producthunt.ProductCategoryListBadge" + "type": "string" }, "type": "array" }, - "comments_count": { - "description": "Number of comments on the launch.", - "type": "integer" + "extensions": { + "items": { + "$ref": "#/definitions/nfhs.EventExtension" + }, + "type": "array" }, - "created_at": { - "description": "ISO 8601 timestamp of when the launch was created.", + "game_type": { "type": "string" }, - "daily_rank": { - "description": "Rank on the daily leaderboard. `0` when Product Hunt gives no rank.", - "type": "integer" + "gender": { + "type": "string" }, - "disabled_when_scheduled": { - "description": "Whether upvoting is disabled while the launch is scheduled.", + "has_broadcast": { "type": "boolean" }, - "embargo_preview_at": { - "description": "ISO 8601 timestamp of the embargo preview, when the launch has one.", - "type": "string" + "has_datacast": { + "type": "boolean" }, - "featured_at": { - "description": "ISO 8601 timestamp of when Product Hunt featured the launch.", - "type": "string" + "has_dvd": { + "type": "boolean" }, - "has_voted": { - "description": "Whether the viewer has upvoted this launch.", + "has_highlight": { "type": "boolean" }, - "hide_votes_count": { - "description": "Whether the maker hides the vote count for this launch.", + "has_power_participant": { "type": "boolean" }, - "id": { - "description": "Product Hunt ID of the launch post.", - "type": "string" + "has_vod": { + "type": "boolean" }, - "latest_score": { - "description": "Current upvote score of the launch.", + "highlight_count": { "type": "integer" }, - "launch_day_score": { - "description": "Upvote score the launch had on its launch day.", - "type": "integer" + "home_participant": { + "type": "string" }, - "monthly_rank": { - "description": "Rank on the monthly leaderboard. `0` when Product Hunt gives no rank.", + "home_score": { "type": "integer" }, - "name": { - "description": "Name of the launch.", + "home_team": { "type": "string" }, - "product": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.LeaderboardProductRef" - } - ], - "description": "Product the launch belongs to." + "is_archived": { + "type": "boolean" }, - "product_state": { - "description": "Product Hunt's state label for the product, for example `default`.", - "type": "string" + "is_cleaned": { + "type": "boolean" }, - "randomization_status": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.LeaderboardRandomizationStatus" - } - ], - "description": "Whether and when Product Hunt randomizes where this launch appears." + "is_deleted": { + "type": "boolean" }, - "redirect_to_product": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.LeaderboardProductRef" - } - ], - "description": "Product the launch redirects to, when it redirects." + "is_partner_game": { + "type": "boolean" }, - "shortened_url": { - "description": "Short Product Hunt link to the launch.", - "type": "string" + "is_pixellot": { + "type": "boolean" }, - "slug": { - "description": "URL slug of the launch post.", - "type": "string" + "is_postseason": { + "type": "boolean" }, - "tagline": { - "description": "Short tagline of the launch.", + "is_sport": { + "type": "boolean" + }, + "is_testing": { + "type": "boolean" + }, + "is_tournament": { + "type": "boolean" + }, + "key": { "type": "string" }, - "thumbnail_image_uuid": { - "description": "Identifier of the launch thumbnail image on Product Hunt's image host.", + "level": { "type": "string" }, - "updated_at": { - "description": "ISO 8601 timestamp of the last update to the launch.", + "local_start_time": { "type": "string" }, - "weekly_rank": { - "description": "Rank on the weekly leaderboard. `0` when Product Hunt gives no rank.", + "location_to_be_determined": { + "type": "boolean" + }, + "overridden_score": { "type": "integer" - } - }, - "type": "object" - }, - "producthunt.ProductAboutPrimaryLink": { - "properties": { - "id": { - "description": "Product Hunt ID of the link.", - "type": "string" }, - "url": { - "description": "Main link of the launch.", - "type": "string" - } - }, - "type": "object" - }, - "producthunt.ProductAboutProduct": { - "properties": { - "badges": { - "description": "Badges the product has earned, such as leaderboard awards.", + "participants": { "items": { - "$ref": "#/definitions/producthunt.ProductCategoryListBadge" + "$ref": "#/definitions/nfhs.Team" }, "type": "array" }, - "detailed_review": { - "additionalProperties": {}, - "description": "Detailed review summary of the product, as Product Hunt returns it.", - "type": "object" + "payment_required": { + "type": "string" }, - "discussion_forum": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductAboutDiscussionForum" - } - ], - "description": "Discussion forum of the product." + "priority": { + "type": "string" }, - "followers_count": { - "description": "Number of Product Hunt users following the product.", + "publishers": { + "items": { + "$ref": "#/definitions/nfhs.Publisher" + }, + "type": "array" + }, + "score": { "type": "integer" }, - "id": { - "description": "Product Hunt ID of the product.", + "share_image": { "type": "string" }, - "is_no_longer_online": { - "description": "Whether Product Hunt marks the product as no longer online.", - "type": "boolean" - }, - "is_subscribed": { - "description": "Whether the viewer follows this product.", + "sis_event": { "type": "boolean" }, - "latest_launch": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductAboutLatestLaunch" - } - ], - "description": "Most recent launch of the product." + "site_url": { + "type": "string" }, - "logo_uuid": { - "description": "Identifier of the product logo on Product Hunt's image host.", + "sport": { "type": "string" }, - "media": { - "description": "Images and videos on the product page.", - "items": { - "$ref": "#/definitions/producthunt.ProductAboutMedia" - }, - "type": "array" + "start_time": { + "type": "string" }, - "name": { - "description": "Name of the product.", + "state_code": { "type": "string" }, - "page_variant": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductAboutPageVariant" - } - ], - "description": "Layout variant Product Hunt uses for the product page." + "state_name": { + "type": "string" }, - "posts": { - "description": "Launch posts of the product.", - "items": { - "$ref": "#/definitions/producthunt.ProductAboutPost" - }, - "type": "array" + "status": { + "type": "string" }, - "posts_count": { - "description": "Number of launch posts the product has.", - "type": "integer" + "sublocation": { + "type": "string" }, - "pro_con_tags": { - "description": "Pro and con tags reviewers have attached to the product.", - "items": { - "$ref": "#/definitions/producthunt.ProductDetailedReviewTag" - }, - "type": "array" + "sublocation_detail": { + "type": "string" }, - "review_questions": { - "description": "Questions Product Hunt asks reviewers of the product.", + "teams": { "items": { - "$ref": "#/definitions/producthunt.ProductAboutReviewQuestion" + "$ref": "#/definitions/nfhs.Team" }, "type": "array" }, - "reviews_rating": { - "description": "Average review rating on Product Hunt.", - "type": "number" + "teams_to_be_determined": { + "type": "boolean" }, - "screenshots": { - "description": "Screenshots shown on the product page.", - "items": { - "$ref": "#/definitions/producthunt.ProductAboutScreenshot" - }, - "type": "array" + "time_to_be_determined": { + "type": "boolean" }, - "slug": { - "description": "URL slug of the product. Use it with the product endpoint.", + "time_zone": { "type": "string" }, - "tagline": { - "description": "Short tagline of the product.", + "tournament_info": { + "$ref": "#/definitions/nfhs.TournamentInfo" + }, + "track_wrestling": {}, + "updated_at": { "type": "string" }, - "url": { - "description": "Product Hunt link to the product page.", + "venue_id": { "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutReviewQuestion": { + "nfhs.EventExtension": { "properties": { - "category": { - "description": "Review category the question belongs to, for example `Adoption`.", + "id": { + "type": "integer" + }, + "name": { "type": "string" + } + }, + "type": "object" + }, + "nfhs.EventResponse": { + "properties": { + "count": { + "type": "integer" }, - "id": { - "description": "Product Hunt ID of the question.", + "event": { + "$ref": "#/definitions/nfhs.Event" + }, + "fetched_at": { "type": "string" }, - "question": { - "description": "Text of the question reviewers are asked.", + "source_url": { "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutScreenshot": { + "nfhs.EventsResponse": { "properties": { - "id": { - "description": "Product Hunt ID of the screenshot.", + "count": { + "type": "integer" + }, + "events": { + "items": { + "$ref": "#/definitions/nfhs.Event" + }, + "type": "array" + }, + "fetched_at": { "type": "string" }, - "image_uuid": { - "description": "Identifier of the image on Product Hunt's image host.", + "next_cursor": { "type": "string" }, - "media_type": { - "description": "Type of media, for example `image`.", + "size": { + "type": "integer" + }, + "source_url": { "type": "string" }, - "original_height": { - "description": "Height of the original screenshot in pixels.", + "start": { "type": "integer" }, - "original_width": { - "description": "Width of the original screenshot in pixels.", + "total": { "type": "integer" + }, + "total_relation": { + "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutShoutout": { + "nfhs.FilterValues": { "properties": { - "alternative_products": { - "description": "Products the reviewer names as alternatives.", + "event_sorts": { "items": { - "$ref": "#/definitions/producthunt.ProductAboutMentionedProduct" + "type": "string" }, "type": "array" }, - "id": { - "description": "Product Hunt ID of the shoutout.", - "type": "string" + "event_types": { + "items": { + "type": "string" + }, + "type": "array" }, - "product": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductAboutMentionedProduct" - } - ], - "description": "Product the shoutout is about." + "genders": { + "items": { + "type": "string" + }, + "type": "array" }, - "shoutout_note": { - "description": "Text of the shoutout written by the reviewer.", - "type": "string" + "highlight_sorts": { + "items": { + "type": "string" + }, + "type": "array" + }, + "levels": { + "items": { + "type": "string" + }, + "type": "array" + }, + "school_sorts": { + "items": { + "type": "string" + }, + "type": "array" + }, + "suggest_scopes": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "producthunt.ProductAboutUser": { + "nfhs.FiltersResponse": { "properties": { - "avatar_url": { - "description": "Link to the member's profile picture.", - "type": "string" - }, - "headline": { - "description": "Member's profile headline.", - "type": "string" + "count": { + "type": "integer" }, - "id": { - "description": "Product Hunt ID of the member.", + "fetched_at": { "type": "string" }, - "name": { - "description": "Member's display name.", - "type": "string" + "filters": { + "$ref": "#/definitions/nfhs.FilterValues" }, - "username": { - "description": "Member's Product Hunt username.", + "source_url": { "type": "string" } }, "type": "object" }, - "producthunt.ProductAboutViewer": { + "nfhs.Highlight": { "properties": { - "is_featured_post_maker": { - "description": "Whether the viewer is a maker of a featured post.", - "type": "boolean" + "activity_or_sport": { + "type": "string" }, - "recent_launch": { - "additionalProperties": {}, - "description": "The viewer's most recent launch, as Product Hunt returns it.", + "badges": { + "additionalProperties": { + "$ref": "#/definitions/nfhs.HighlightBadge" + }, "type": "object" - } - }, - "type": "object" - }, - "producthunt.ProductAlternativeBadge": { - "properties": { + }, + "categories": { + "items": { + "type": "string" + }, + "type": "array" + }, + "city": { + "type": "string" + }, + "classification": { + "type": "string" + }, + "content_type": { + "type": "string" + }, "date": { - "description": "Date the badge was awarded.", "type": "string" }, - "id": { - "description": "Product Hunt ID of the badge.", + "duration": { + "type": "number" + }, + "first_logo": { "type": "string" }, - "period": { - "description": "Leaderboard period of the badge, for example `daily` or `weekly`.", + "first_primary_color": { "type": "string" }, - "position": { - "description": "Leaderboard position the badge was awarded for.", - "type": "integer" + "first_title": { + "type": "string" }, - "post_name": { - "description": "Name of the launch post the badge was awarded for.", + "game_type": { "type": "string" }, - "post_slug": { - "description": "URL slug of the launch post the badge was awarded for.", + "gender": { "type": "string" - } - }, - "type": "object" - }, - "producthunt.ProductAlternativeDiscussion": { - "properties": { - "comments_count": { - "description": "Number of comments on the discussion.", - "type": "integer" }, - "created_at": { - "description": "ISO 8601 timestamp of when the discussion was created.", + "headline": { "type": "string" }, - "description_preview": { - "description": "Short preview of the discussion's opening text.", + "icon": { "type": "string" }, - "has_voted": { - "description": "Whether the viewer has upvoted the discussion.", + "icon_path": { + "type": "string" + }, + "is_sport": { "type": "boolean" }, - "id": { - "description": "Product Hunt ID of the discussion.", + "key": { "type": "string" }, - "path": { - "description": "Product Hunt path of the discussion.", + "level": { "type": "string" }, - "pinned": { - "description": "Whether the discussion is pinned.", - "type": "boolean" + "progress": { + "type": "string" }, - "primary_forum": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductAlternativeDiscussionForum" - } - ], - "description": "Main forum the discussion belongs to." + "publisher": { + "type": "string" }, - "slug": { - "description": "URL slug of the discussion.", + "publisher_logo": { "type": "string" }, - "title": { - "description": "Title of the discussion.", + "publisher_short_name": { "type": "string" }, - "user": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductAlternativeDiscussionUser" - } - ], - "description": "Member who started the discussion." + "second_logo": { + "type": "string" }, - "votes_count": { - "description": "Number of upvotes on the discussion.", - "type": "integer" - } - }, - "type": "object" - }, - "producthunt.ProductAlternativeDiscussionForum": { - "properties": { - "id": { - "description": "Product Hunt id of the discussion forum.", + "second_primary_color": { "type": "string" }, - "slug": { - "description": "URL slug of the discussion forum.", + "second_title": { "type": "string" }, - "subject_id": { - "description": "Product Hunt id of the product the forum belongs to.", + "site_url": { "type": "string" }, - "subject_name": { - "description": "Name of the product the forum belongs to.", + "source": { + "type": "string" + }, + "state": { + "type": "string" + }, + "subtitle": { + "type": "string" + }, + "thumbnail": { + "type": "string" + }, + "title": { "type": "string" } }, "type": "object" }, - "producthunt.ProductAlternativeDiscussionUser": { + "nfhs.HighlightBadge": { "properties": { - "avatar_url": { - "description": "URL of the user's profile picture.", - "type": "string" - }, - "id": { - "description": "Product Hunt id of the user who started the discussion.", - "type": "string" - }, - "name": { - "description": "Display name of the user.", + "icon": { "type": "string" }, - "username": { - "description": "Product Hunt username of the user.", + "text": { "type": "string" } }, "type": "object" }, - "producthunt.ProductAlternativeItem": { + "nfhs.HighlightsResponse": { "properties": { - "category_score": { - "type": "number" + "count": { + "type": "integer" }, - "category_weight": { - "type": "number" + "fetched_at": { + "type": "string" }, - "combined_score": { - "type": "number" + "highlights": { + "items": { + "$ref": "#/definitions/nfhs.Highlight" + }, + "type": "array" }, - "embedding_score": { - "type": "number" + "next_cursor": { + "type": "string" }, - "embedding_weight": { - "type": "number" + "size": { + "type": "integer" }, - "id": { + "source_url": { "type": "string" }, - "product": { - "$ref": "#/definitions/producthunt.ProductAlternativeProduct" + "start": { + "type": "integer" }, - "rating_score": { - "type": "number" + "total": { + "type": "integer" }, - "rating_weight": { - "type": "number" + "total_relation": { + "type": "string" } }, "type": "object" }, - "producthunt.ProductAlternativeProduct": { + "nfhs.ProducerProfile": { "properties": { - "badges": { - "items": { - "$ref": "#/definitions/producthunt.ProductAlternativeBadge" - }, - "type": "array" + "acronym": { + "type": "string" }, - "categories": { - "items": { - "type": "string" - }, - "type": "array" + "facebook": { + "type": "string" }, - "followers_count": { - "type": "integer" + "formatted_name": { + "type": "string" }, - "id": { + "headline_short_name": { "type": "string" }, - "is_subscribed": { - "type": "boolean" + "instagram": { + "type": "string" }, - "is_top_product": { + "is_deleted": { "type": "boolean" }, - "logo_uuid": { + "key": { "type": "string" }, - "name": { + "logo": { "type": "string" }, - "reviews_count": { - "type": "integer" + "name": { + "type": "string" }, - "reviews_rating": { - "type": "number" + "pays_license_fee": { + "type": "boolean" }, - "slug": { + "primary_color": { "type": "string" }, - "structured_data": { - "$ref": "#/definitions/producthunt.ProductAlternativeStructuredData" - }, - "tagline": { + "producer_key": { "type": "string" }, - "tags": { + "related_publishers": { "items": { - "type": "string" + "$ref": "#/definitions/nfhs.RelatedPublisher" }, "type": "array" - } - }, - "type": "object" - }, - "producthunt.ProductAlternativeStructuredData": { - "properties": { - "application_category": { - "description": "Schema.org application category of the product.", - "type": "string" - }, - "context": { - "description": "Schema.org context URL of the product's structured data block.", - "type": "string" }, - "date_modified": { - "description": "Date the product page was last modified.", + "secondary_color": { "type": "string" }, - "date_published": { - "description": "Date the product was published on Product Hunt.", + "slug": { "type": "string" }, - "description": { - "description": "Product description as given in its structured data.", + "state_association": { "type": "string" }, - "id": { - "description": "Identifier of the product in its structured data block.", + "state_association_acronym": { "type": "string" }, - "image": { - "description": "URL of the product's main image.", + "state_association_key": { "type": "string" }, - "name": { - "description": "Product name as given in its structured data.", + "state_association_url": { "type": "string" }, - "operating_system": { - "description": "Operating systems the product runs on, as listed in its structured data.", - "type": "string" + "state_names": { + "items": { + "type": "string" + }, + "type": "array" }, - "screenshot": { - "description": "URLs of the product's screenshots.", + "states": { "items": { "type": "string" }, "type": "array" }, - "url": { - "description": "Product Hunt page URL of the product.", + "twitter": { + "type": "string" + }, + "type": { + "type": "string" + }, + "website": { + "type": "string" + }, + "youtube": { "type": "string" } }, "type": "object" }, - "producthunt.ProductAlternativeTag": { + "nfhs.ProducerResponse": { "properties": { "count": { "type": "integer" }, - "name": { + "fetched_at": { + "type": "string" + }, + "producer": { + "$ref": "#/definitions/nfhs.ProducerProfile" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "producthunt.ProductAlternativesPage": { + "nfhs.Publisher": { "properties": { - "alternative_tags": { - "items": { - "$ref": "#/definitions/producthunt.ProductAlternativeTag" - }, - "type": "array" - }, - "alternatives_markdown_description": { + "acronym": { "type": "string" }, - "categories": { - "items": { - "type": "string" - }, - "type": "array" + "championship_page_url": { + "type": "string" }, - "discussions": { - "items": { - "$ref": "#/definitions/producthunt.ProductAlternativeDiscussion" - }, - "type": "array" + "city": { + "type": "string" }, - "discussions_has_next_page": { + "disable_rev_share": { "type": "boolean" }, - "end_cursor": { - "example": "MTA", + "facebook": { "type": "string" }, - "followers_count": { - "example": 577, - "type": "integer" + "formatted_name": { + "type": "string" }, - "has_next_page": { - "example": true, + "instagram": { + "type": "string" + }, + "is_deleted": { "type": "boolean" }, - "items": { - "items": { - "$ref": "#/definitions/producthunt.ProductAlternativeItem" - }, - "type": "array" + "is_network": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "logo": { + "type": "string" }, "name": { - "example": "Clico", "type": "string" }, - "product_id": { - "example": "1191613", + "primary_color": { "type": "string" }, - "slug": { - "example": "clico", + "publisher_key": { "type": "string" }, - "total_count": { - "example": 50, - "type": "integer" - } - }, - "type": "object" - }, - "producthunt.ProductCategoryAd": { - "properties": { - "channel_kind": { - "description": "Placement of the ad, for example `feed`.", + "school_key": { "type": "string" }, - "id": { - "description": "Product Hunt id of the ad.", + "school_url": { "type": "string" }, - "large_asset_uuid": { - "description": "Identifier of the ad's large image asset.", + "secondary_color": { "type": "string" }, - "name": { - "description": "Name of the advertised product.", + "slug": { "type": "string" }, - "post": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductCategoryAdPost" - } - ], - "description": "Launch post of the advertised product." + "state_association_acronym": { + "type": "string" }, - "small_asset_uuid": { - "description": "Identifier of the ad's small image asset.", + "state_association_key": { "type": "string" }, - "subject": { - "description": "Kind of Product Hunt item the ad is placed on, for example `Channel`.", + "state_association_url": { "type": "string" }, - "tagline": { - "description": "Short tagline shown on the ad.", + "state_names": { + "items": { + "type": "string" + }, + "type": "array" + }, + "states": { + "items": { + "type": "string" + }, + "type": "array" + }, + "time_zone": { "type": "string" }, - "thumbnail_uuid": { - "description": "Identifier of the ad's thumbnail image file.", + "twitter": { "type": "string" }, - "url": { - "description": "Path of the ad's link on Product Hunt.", + "type": { "type": "string" }, - "variation_id": { - "description": "Identifier of the ad variation shown.", + "website": { + "type": "string" + }, + "youtube": { "type": "string" } }, "type": "object" }, - "producthunt.ProductCategoryAdComment": { + "nfhs.PublisherProfile": { "properties": { - "body_text": { - "description": "Plain-text body of the comment.", + "acronym": { "type": "string" }, - "id": { - "description": "Product Hunt id of the comment.", + "championship_page_url": { "type": "string" }, - "is_pinned": { - "description": "Whether the comment is pinned on the launch.", + "disable_rev_share": { "type": "boolean" }, - "path": { - "description": "Path of the comment on Product Hunt.", - "type": "string" - }, - "subject_id": { - "description": "Product Hunt id of the launch post the comment is on.", + "facebook": { "type": "string" }, - "user": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductCategoryUser" - } - ], - "description": "Author of the comment." - } - }, - "type": "object" - }, - "producthunt.ProductCategoryAdPost": { - "properties": { - "comments_count": { - "description": "Number of comments on the launch post.", - "type": "integer" - }, - "created_at": { - "description": "Time the launch post was created, in ISO 8601 with a UTC offset.", + "formatted_name": { "type": "string" }, - "disabled_when_scheduled": { - "description": "Whether the post is disabled while its launch is still scheduled.", + "has_dvd_publisher": { "type": "boolean" }, - "embargo_preview_at": { - "description": "Time the launch post becomes visible as an embargo preview. Omitted when not set.", + "headline_short_name": { "type": "string" }, - "featured_at": { - "description": "Time the launch post was featured, in ISO 8601 with a UTC offset.", + "instagram": { "type": "string" }, - "featured_comment": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductCategoryAdComment" - } - ], - "description": "Comment featured on the launch post." - }, - "has_voted": { - "description": "Whether the requesting viewer has upvoted the launch post.", + "is_deleted": { "type": "boolean" }, - "hide_votes_count": { - "description": "Whether Product Hunt hides the vote count for this post.", + "is_dto_enabled": { "type": "boolean" }, - "id": { - "description": "Product Hunt id of the launch post.", - "type": "string" - }, - "latest_score": { - "description": "Latest vote score of the launch post.", - "type": "integer" + "is_network": { + "type": "boolean" }, - "launch_day_score": { - "description": "Vote score of the launch post on its launch day.", - "type": "integer" + "is_subscription": { + "type": "boolean" }, - "name": { - "description": "Name of the launch post.", + "key": { "type": "string" }, - "product_id": { - "description": "Product Hunt id of the product the post belongs to.", + "logo": { "type": "string" }, - "product_slug": { - "description": "URL slug of the product the post belongs to.", + "name": { "type": "string" }, - "product_subscribed": { - "description": "Whether the requesting viewer follows the product.", + "pays_license_fee": { "type": "boolean" }, - "randomization_status": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductCategoryRandomizationStatus" - } - ], - "description": "Whether the post currently has randomized ordering in listings, and when that changes." + "primary_color": { + "type": "string" }, - "slug": { - "description": "URL slug of the launch post.", + "publisher_key": { "type": "string" }, - "topics": { - "description": "Topics the launch post is filed under.", + "publisher_location": { + "type": "string" + }, + "related_producers": { "items": { - "$ref": "#/definitions/producthunt.ProductCategoryTopic" + "$ref": "#/definitions/nfhs.RelatedProducer" }, "type": "array" }, - "updated_at": { - "description": "Time the launch post was last updated, in ISO 8601 with a UTC offset.", + "secondary_color": { "type": "string" - } - }, - "type": "object" - }, - "producthunt.ProductCategoryAnswer": { - "properties": { - "body": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductCategoryMarkdown" - } - ], - "description": "Text of the answer." }, - "id": { - "description": "Product Hunt id of the answer.", + "slug": { "type": "string" }, - "sources": { - "description": "Product Hunt items the answer is based on.", + "state_association": { + "type": "string" + }, + "state_association_acronym": { + "type": "string" + }, + "state_association_key": { + "type": "string" + }, + "state_association_url": { + "type": "string" + }, + "state_names": { "items": { - "$ref": "#/definitions/producthunt.ProductCategorySource" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "producthunt.ProductCategoryFounderPost": { - "properties": { - "badges": { - "description": "Badges the launch post has earned.", + }, + "states": { "items": { - "$ref": "#/definitions/producthunt.ProductCategoryListBadge" + "type": "string" }, "type": "array" }, - "id": { - "description": "Product Hunt id of the launch post.", - "type": "string" - }, - "name": { - "description": "Name of the launch post.", - "type": "string" - }, - "product_id": { - "description": "Product Hunt id of the product the post belongs to.", + "time_zone": { "type": "string" }, - "product_slug": { - "description": "URL slug of the product the post belongs to.", + "twitter": { "type": "string" }, - "product_state": { - "description": "State of the product on Product Hunt, for example `default`.", + "type": { "type": "string" }, - "slug": { - "description": "URL slug of the launch post.", + "website": { "type": "string" }, - "thumbnail_image_uuid": { - "description": "Identifier of the launch post's thumbnail image file.", + "youtube": { "type": "string" } }, "type": "object" }, - "producthunt.ProductCategoryFounderShoutout": { + "nfhs.PublisherResponse": { "properties": { - "from_post": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductCategoryFounderPost" - } - ], - "description": "Launch post of the founder who gave the shoutout." + "count": { + "type": "integer" }, - "id": { - "description": "Product Hunt id of the shoutout.", + "fetched_at": { "type": "string" }, - "product_id": { - "description": "Product Hunt id of the product that received the shoutout.", + "publisher": { + "$ref": "#/definitions/nfhs.PublisherProfile" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "producthunt.ProductCategoryHeroProduct": { + "nfhs.RelatedProducer": { "properties": { - "id": { - "description": "Product Hunt id of the product.", + "producer_key": { "type": "string" }, - "is_no_longer_online": { - "description": "Whether Product Hunt marks the product as no longer online.", - "type": "boolean" - }, - "logo_uuid": { - "description": "Identifier of the product's logo image file.", + "producer_name": { "type": "string" }, - "name": { - "description": "Name of the product as shown on Product Hunt.", + "producer_type": { "type": "string" } }, "type": "object" }, - "producthunt.ProductCategoryLatestLaunch": { + "nfhs.RelatedPublisher": { "properties": { - "id": { - "description": "Product Hunt id of the product's latest launch.", + "publisher_key": { "type": "string" }, - "scheduled_at": { - "description": "Time the latest launch was scheduled for, in ISO 8601 with a UTC offset.", + "publisher_name": { + "type": "string" + }, + "publisher_type": { "type": "string" } }, "type": "object" }, - "producthunt.ProductCategoryListBadge": { + "nfhs.School": { "properties": { - "category": { - "description": "Award category of the badge, for example `Product of the Year`. Omitted for daily and weekly badges.", + "about": { "type": "string" }, - "date": { - "description": "Date the badge refers to.", + "acronym": { "type": "string" }, - "id": { - "description": "Product Hunt id of the badge.", + "address": { "type": "string" }, - "period": { - "description": "Period the badge covers, for example `daily` or `weekly`.", + "attribution_group": { "type": "string" }, - "position": { - "description": "Rank the product placed at for this badge.", - "type": "integer" - }, - "post_id": { - "description": "Product Hunt id of the launch post the badge was earned on.", + "city": { "type": "string" }, - "post_name": { - "description": "Name of the launch post the badge was earned on.", + "content_type": { "type": "string" }, - "post_slug": { - "description": "URL slug of the launch post the badge was earned on.", + "country": { "type": "string" }, - "year": { - "description": "Year of the award the badge belongs to.", - "type": "string" - } - }, - "type": "object" - }, - "producthunt.ProductCategoryListProduct": { - "properties": { - "badges": { - "description": "Badges the product has earned on Product Hunt.", - "items": { - "$ref": "#/definitions/producthunt.ProductCategoryListBadge" - }, - "type": "array" + "digital_scout_id": { + "type": "integer" }, - "categories": { - "description": "Product Hunt categories the product is listed in.", - "items": { - "$ref": "#/definitions/producthunt.ProductCategoryRef" - }, - "type": "array" + "disable_cleaning": { + "type": "boolean" }, - "detailed_reviews_count": { - "description": "Number of detailed reviews the product has.", - "type": "integer" + "disable_communications": { + "type": "boolean" }, - "followers_count": { - "description": "Number of Product Hunt users following the product.", - "type": "integer" + "district": { + "type": "boolean" }, - "founder_reviews_count": { - "description": "Number of reviews written by the product's founders.", - "type": "integer" + "dto_enabled": { + "type": "boolean" }, - "founder_shoutouts": { - "description": "Shoutouts the product received from other founders.", - "items": { - "$ref": "#/definitions/producthunt.ProductCategoryFounderShoutout" - }, - "type": "array" + "facebook": { + "type": "string" }, - "id": { - "description": "Product Hunt id of the product.", + "gofan_id": { "type": "string" }, - "is_no_longer_online": { - "description": "Whether Product Hunt marks the product as no longer online.", + "hd_enabled": { "type": "boolean" }, - "is_subscribed": { - "description": "Whether the requesting viewer follows the product.", + "id": { + "type": "string" + }, + "instagram": { + "type": "string" + }, + "is_deleted": { "type": "boolean" }, - "is_top_product": { - "description": "Whether Product Hunt flags the product as a top product.", + "is_digital_scout": { "type": "boolean" }, - "latest_launch": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductCategoryLatestLaunch" - } - ], - "description": "Most recent launch of the product." + "is_elite": { + "type": "boolean" }, - "logo_uuid": { - "description": "Identifier of the product's logo image file.", - "type": "string" + "is_network": { + "type": "boolean" }, - "name": { - "description": "Name of the product as shown on Product Hunt.", - "type": "string" + "is_non_association": { + "type": "boolean" }, - "posts_count": { - "description": "Number of launch posts the product has.", - "type": "integer" + "is_sbp": { + "type": "boolean" }, - "reviews_count": { - "description": "Number of reviews the product has.", - "type": "integer" + "is_select": { + "type": "boolean" }, - "reviews_rating": { - "description": "Average review rating of the product.", - "type": "number" + "is_subscription": { + "type": "boolean" }, - "slug": { - "description": "URL slug of the product on Product Hunt.", + "key": { "type": "string" }, - "structured_data": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductAlternativeStructuredData" - } - ], - "description": "Schema.org structured data Product Hunt publishes for the product." + "latitude": { + "type": "string" }, - "tagline": { - "description": "Short tagline of the product.", + "logo": { "type": "string" }, - "tags": { - "description": "Tags describing the product.", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "producthunt.ProductCategoryMarkdown": { - "properties": { - "markdown": { - "description": "Text in Markdown format.", + "longitude": { "type": "string" }, - "text": { - "description": "Same text as plain text.", + "mascot": { "type": "string" - } - }, - "type": "object" - }, - "producthunt.ProductCategoryPage": { - "properties": { - "description": { - "description": "Description of the category.", + }, + "maxpreps_url": { "type": "string" }, - "discussions": { - "description": "Community discussions related to the category.", - "items": { - "$ref": "#/definitions/producthunt.ProductAlternativeDiscussion" - }, - "type": "array" + "name": { + "type": "string" }, - "discussions_has_next_page": { - "description": "Whether more discussions exist beyond those returned.", + "pays_license_fee": { "type": "boolean" }, - "expandable_html": { - "description": "HTML of the category's expandable description section. Omitted when the category has none.", + "playon_id": { "type": "string" }, - "hero_products": { - "description": "Featured products shown at the top of the category page.", - "items": { - "$ref": "#/definitions/producthunt.ProductCategoryHeroProduct" - }, - "type": "array" + "postal_code": { + "type": "string" }, - "hero_products_count": { - "description": "Total number of featured products in the category.", - "type": "integer" + "power_school": { + "type": "boolean" }, - "id": { - "description": "Product Hunt id of the category.", + "primary_color": { "type": "string" }, - "last_updated_at": { - "description": "Time the category page was last updated, in ISO 8601 with a UTC offset.", + "producer_key": { "type": "string" }, - "meta_title": { - "description": "Page title Product Hunt uses for the category.", + "producer_slug": { "type": "string" }, - "name": { - "description": "Name of the category as shown on Product Hunt.", + "publisher_key": { "type": "string" }, - "parent": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductCategoryParent" - } - ], - "description": "Parent category, with its other sub-categories." - }, - "path": { - "description": "Path of the category page on Product Hunt.", - "example": "/categories/vibe-coding", + "publisher_location": { "type": "string" }, - "questions": { - "description": "Questions asked about the category, each with its top answer.", - "items": { - "$ref": "#/definitions/producthunt.ProductCategoryQuestion" - }, - "type": "array" - }, - "raw_relevant_reviews": { - "description": "Reviews Product Hunt shows as relevant to the category, as Product Hunt returns them.", - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "recent_launches_count": { - "description": "Number of recent launches in the category.", - "type": "integer" - }, - "recent_summary": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductCategoryRecentSummary" - } - ], - "description": "Summary of recent launches in the category with the products it covers." - }, - "reviews_count": { - "description": "Number of reviews across the category's products.", - "type": "integer" - }, - "slug": { - "description": "URL slug of the category.", - "example": "vibe-coding", + "publisher_url": { "type": "string" }, - "sub_categories": { - "description": "Sub-categories of this category.", + "related_producers": { "items": { - "$ref": "#/definitions/producthunt.ProductCategoryRef" + "$ref": "#/definitions/nfhs.RelatedProducer" }, "type": "array" }, - "targeted_ad": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductCategoryAd" - } - ], - "description": "Sponsored placement shown on the category page. Omitted when there is none." - } - }, - "type": "object" - }, - "producthunt.ProductCategoryParent": { - "properties": { - "id": { - "description": "Product Hunt id of the parent category.", + "sbp_rank": { "type": "string" }, - "name": { - "description": "Name of the parent category.", + "sbp_team": { "type": "string" }, - "path": { - "description": "Path of the parent category page on Product Hunt.", + "school_level": { "type": "string" }, - "sub_categories": { - "description": "Sub-categories of the parent category, including this one.", - "items": { - "$ref": "#/definitions/producthunt.ProductCategoryRef" - }, - "type": "array" - } - }, - "type": "object" - }, - "producthunt.ProductCategoryProductsPage": { - "properties": { - "ai_summary": { + "school_type": { "type": "string" }, - "category_tags": { - "items": { - "$ref": "#/definitions/producthunt.ProductAlternativeTag" - }, - "type": "array" + "scrub_vod": { + "type": "boolean" }, - "connection": { - "example": "products", + "secondary_color": { "type": "string" }, - "description": { + "share_image": { "type": "string" }, - "end_cursor": { + "short_name": { "type": "string" }, - "featured_only": { + "show_ads": { "type": "boolean" }, - "has_next_page": { + "show_champion_ads": { "type": "boolean" }, - "has_previous_page": { + "sis_school": { "type": "boolean" }, - "id": { + "slug": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/producthunt.ProductCategoryListProduct" - }, - "type": "array" + "state_code": { + "type": "string" }, - "last_updated_at": { + "state_name": { "type": "string" }, - "name": { + "timezone": { "type": "string" }, - "order": { - "example": "highest_rated", + "twitter": { "type": "string" }, - "page": { - "example": 1, - "type": "integer" + "type": { + "type": "string" }, - "page_size": { - "example": 15, - "type": "integer" + "vod_free": { + "type": "boolean" }, - "path": { - "example": "/categories/vibe-coding", + "website": { "type": "string" }, - "slug": { - "example": "vibe-coding", + "youtube": { "type": "string" - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "total_count": { - "type": "integer" } }, "type": "object" }, - "producthunt.ProductCategoryQuestion": { + "nfhs.SchoolResponse": { "properties": { - "body": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductCategoryMarkdown" - } - ], - "description": "Text of the question." + "count": { + "type": "integer" }, - "id": { - "description": "Product Hunt id of the question.", + "fetched_at": { "type": "string" }, - "top_answer": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductCategoryAnswer" - } - ], - "description": "Highest-ranked answer to the question." + "school": { + "$ref": "#/definitions/nfhs.School" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "producthunt.ProductCategoryRandomizationStatus": { + "nfhs.SchoolsResponse": { "properties": { - "active": { - "description": "Whether randomized ordering is currently active for the post.", - "type": "boolean" + "count": { + "type": "integer" }, - "next_transition_at": { - "description": "Time the randomization status next changes. Omitted when none is scheduled.", + "fetched_at": { "type": "string" }, - "random_day": { - "description": "Whether the post's launch day uses randomized ordering.", - "type": "boolean" - } - }, - "type": "object" - }, - "producthunt.ProductCategoryRecentSummary": { - "properties": { - "products": { - "description": "Products the summary covers.", + "next_cursor": { + "type": "string" + }, + "schools": { "items": { - "$ref": "#/definitions/producthunt.ProductCategorySummaryProduct" + "$ref": "#/definitions/nfhs.School" }, "type": "array" }, - "summary": { - "description": "Short text summarising what recently launched in the category.", + "size": { + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "start": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "total_relation": { "type": "string" } }, "type": "object" }, - "producthunt.ProductCategoryRef": { + "nfhs.SearchItem": { "properties": { - "id": { - "description": "Product Hunt id of the category.", + "about": { "type": "string" }, - "name": { - "description": "Name of the category as shown on Product Hunt.", + "acronym": { "type": "string" }, - "path": { - "description": "Path of the category page on Product Hunt.", - "type": "string" + "away_score": { + "type": "integer" }, - "slug": { - "description": "URL slug of the category.", + "city": { "type": "string" - } - }, - "type": "object" - }, - "producthunt.ProductCategorySource": { - "properties": { - "badges": { - "description": "Badges shown next to the source.", - "items": { - "type": "string" - }, - "type": "array" }, - "id": { - "description": "Product Hunt id of the source item.", + "content_type": { "type": "string" }, - "path": { - "description": "Path of the source item on Product Hunt.", + "game_type": { "type": "string" }, - "subject_id": { - "description": "Product Hunt id of the item the source is attached to.", - "type": "string" - }, - "type": { - "description": "Kind of Product Hunt item the source is, for example `Comment`.", + "gender": { "type": "string" }, - "user": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductCategoryUser" - } - ], - "description": "User who wrote the source item." - }, - "visible_at": { - "description": "Time the source item became visible, as Product Hunt returns it.", - "type": "string" - } - }, - "type": "object" - }, - "producthunt.ProductCategorySummaryProduct": { - "properties": { - "badges": { - "description": "Badges the product has earned on Product Hunt.", - "items": { - "$ref": "#/definitions/producthunt.ProductAlternativeBadge" - }, - "type": "array" + "has_broadcast": { + "type": "boolean" }, - "categories": { - "description": "Product Hunt categories the product is listed in.", - "items": { - "$ref": "#/definitions/producthunt.ProductCategoryRef" - }, - "type": "array" + "has_vod": { + "type": "boolean" }, - "followers_count": { - "description": "Number of Product Hunt users following the product.", + "home_score": { "type": "integer" }, "id": { - "description": "Product Hunt id of the product.", "type": "string" }, - "is_no_longer_online": { - "description": "Whether Product Hunt marks the product as no longer online.", + "is_deleted": { "type": "boolean" }, - "is_subscribed": { - "description": "Whether the requesting viewer follows the product.", + "is_network": { "type": "boolean" }, - "is_top_product": { - "description": "Whether Product Hunt flags the product as a top product.", - "type": "boolean" + "key": { + "type": "string" }, - "latest_launch": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductCategoryLatestLaunch" - } - ], - "description": "Most recent launch of the product." + "level": { + "type": "string" }, - "logo_uuid": { - "description": "Identifier of the product's logo image file.", + "logo": { + "type": "string" + }, + "mascot": { "type": "string" }, "name": { - "description": "Name of the product as shown on Product Hunt.", "type": "string" }, - "reviews_count": { - "description": "Number of reviews the product has.", - "type": "integer" + "short_name": { + "type": "string" }, - "reviews_rating": { - "description": "Average review rating of the product.", - "type": "number" + "site_url": { + "type": "string" }, "slug": { - "description": "URL slug of the product on Product Hunt.", "type": "string" }, - "tagline": { - "description": "Short tagline of the product.", + "sport": { + "description": "Game-specific fields.", "type": "string" }, - "tags": { - "description": "Tags describing the product.", + "start_time": { + "type": "string" + }, + "state_code": { + "type": "string" + }, + "state_name": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "nfhs.SearchResponse": { + "properties": { + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "items": { "items": { - "type": "string" + "$ref": "#/definitions/nfhs.SearchItem" }, "type": "array" + }, + "next_cursor": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "start": { + "type": "integer" + }, + "total": { + "type": "integer" + }, + "total_relation": { + "type": "string" } }, "type": "object" }, - "producthunt.ProductCategoryTopic": { + "nfhs.SportFlags": { "properties": { - "id": { - "description": "Product Hunt id of the topic.", - "type": "string" + "is_two_team": { + "type": "boolean" + } + }, + "type": "object" + }, + "nfhs.SportsResponse": { + "properties": { + "count": { + "type": "integer" }, - "name": { - "description": "Name of the topic as shown on Product Hunt.", + "fetched_at": { "type": "string" }, - "slug": { - "description": "URL slug of the topic.", + "source_url": { "type": "string" + }, + "sports": { + "additionalProperties": { + "$ref": "#/definitions/nfhs.SportFlags" + }, + "type": "object" } }, "type": "object" }, - "producthunt.ProductCategoryUser": { + "nfhs.State": { "properties": { - "avatar_url": { - "description": "URL of the user's profile picture.", + "key": { "type": "string" }, - "id": { - "description": "Product Hunt id of the user.", + "name": { "type": "string" }, - "name": { - "description": "Display name of the user.", + "slug": { "type": "string" }, - "username": { - "description": "Product Hunt username of the user.", + "state_code": { "type": "string" } }, "type": "object" }, - "producthunt.ProductCustomersPage": { + "nfhs.StateRef": { "properties": { - "connection": { - "description": "Kind of list the items come from, for example `customers`.", - "example": "customers", + "name": { "type": "string" }, - "end_cursor": { - "description": "Cursor of the last item on this page. Omitted when Product Hunt returns none.", + "state_code": { "type": "string" + } + }, + "type": "object" + }, + "nfhs.StatesResponse": { + "properties": { + "count": { + "type": "integer" }, - "has_next_page": { - "description": "Whether another page of customers follows this one.", - "type": "boolean" + "fetched_at": { + "type": "string" }, - "has_previous_page": { - "description": "Whether a page of customers precedes this one.", - "type": "boolean" + "source_url": { + "type": "string" }, - "items": { - "description": "Products that are customers of the product, one per entry.", + "states": { "items": { - "$ref": "#/definitions/producthunt.ProductCategoryListProduct" + "$ref": "#/definitions/nfhs.State" }, "type": "array" + } + }, + "type": "object" + }, + "nfhs.SuggestResponse": { + "properties": { + "count": { + "type": "integer" }, - "name": { - "description": "Name of the product.", - "example": "OpenAI", + "fetched_at": { "type": "string" }, - "order": { - "description": "Order the customers are sorted in, `customers` or `latest_launch`.", - "example": "customers", + "items": { + "items": { + "$ref": "#/definitions/nfhs.School" + }, + "type": "array" + }, + "next_cursor": { "type": "string" }, - "page": { - "description": "Page number returned.", - "example": 1, + "size": { "type": "integer" }, - "page_size": { - "description": "Number of customers requested per page.", - "example": 10, - "type": "integer" + "source_url": { + "type": "string" }, - "pages_count": { - "description": "Total number of pages of customers.", - "example": 12, + "start": { "type": "integer" }, - "product_id": { - "description": "Product Hunt id of the product.", - "example": "594550", - "type": "string" - }, - "raw_page_info": { - "additionalProperties": {}, - "description": "Pagination details for this page as Product Hunt returns them.", - "type": "object" + "total": { + "type": "integer" }, - "slug": { - "description": "URL slug of the product on Product Hunt.", - "example": "openai", + "total_relation": { "type": "string" - }, - "total_count": { - "description": "Total number of customers the product has.", - "example": 120, - "type": "integer" } }, "type": "object" }, - "producthunt.ProductDetailedReview": { + "nfhs.Team": { "properties": { - "alternative_products": { - "description": "Products the reviewer names as alternatives.", - "items": { - "$ref": "#/definitions/producthunt.ProductDetailedReviewProduct" - }, - "type": "array" + "acronym": { + "type": "string" }, - "alternatives_feedback": { - "description": "Reviewer's free-text comments on alternatives to the product.", + "city": { "type": "string" }, - "can_destroy": { - "description": "Whether the requesting viewer can delete the review.", - "type": "boolean" + "gender": { + "type": "string" }, - "can_moderate": { - "description": "Whether the requesting viewer can moderate the review.", + "is_network": { "type": "boolean" }, - "can_reply": { - "description": "Whether the requesting viewer can reply to the review.", - "type": "boolean" + "key": { + "type": "string" }, - "can_update": { - "description": "Whether the requesting viewer can edit the review.", - "type": "boolean" + "latitude": { + "type": "string" }, - "comments_count": { - "description": "Number of comments on the review.", - "type": "integer" + "level": { + "type": "string" }, - "created_at": { - "description": "Time the review was written.", + "logo": { "type": "string" }, - "customization_rating": { - "description": "Reviewer's rating for customization. Omitted when the reviewer gave none.", - "type": "integer" + "longitude": { + "type": "string" }, - "ease_of_use_rating": { - "description": "Reviewer's rating for ease of use. Omitted when the reviewer gave none.", - "type": "integer" + "mascot": { + "type": "string" }, - "follow_product": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductDetailedReviewFollowProduct" - } - ], - "description": "The reviewed product with the viewer's follow state." + "name": { + "type": "string" }, - "from_post": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductDetailedReviewPost" - } - ], - "description": "Launch post the review was written from." + "power_school": { + "type": "boolean" }, - "has_voted": { - "description": "Whether the requesting viewer has upvoted the review.", + "primary_color": { + "type": "string" + }, + "school_key": { + "type": "string" + }, + "school_url": { + "type": "string" + }, + "scrub_vod": { "type": "boolean" }, - "id": { - "description": "Product Hunt id of the review.", + "secondary_color": { "type": "string" }, - "impression_count": { - "description": "Number of times the review has been shown.", - "type": "integer" + "short_name": { + "type": "string" }, - "is_hidden": { - "description": "Whether the review is hidden on Product Hunt.", + "sis_school": { "type": "boolean" }, - "llm_content_quality_grade": { - "description": "Quality grade Product Hunt assigned to the review text. Omitted when none is given.", + "slug": { "type": "string" }, - "llm_content_quality_reason": { - "description": "Reason given for the review's quality grade. Omitted when none is given.", + "sport": { "type": "string" }, - "negative_feedback": { - "description": "Reviewer's free-text comments on what they disliked.", + "state_association_acronym": { "type": "string" }, - "overall_experience": { - "description": "Reviewer's free-text summary of their overall experience.", + "state_association_key": { "type": "string" }, - "overall_rating": { - "description": "Reviewer's overall rating of the product.", + "state_association_url": { + "type": "string" + }, + "state_code": { + "type": "string" + } + }, + "type": "object" + }, + "nfhs.TournamentInfo": { + "properties": { + "tournament": {}, + "tournament_game": {} + }, + "type": "object" + }, + "nike.AvailabilityResponse": { + "properties": { + "count": { "type": "integer" }, - "positive_feedback": { - "description": "Reviewer's free-text comments on what they liked.", + "fetched_at": { "type": "string" }, - "product": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductDetailedReviewProduct" - } - ], - "description": "Product the review is about." + "group_key": { + "type": "string" }, - "question_answers": { - "description": "Reviewer's answers to Product Hunt's review questions.", + "sizes": { "items": { - "$ref": "#/definitions/producthunt.ProductDetailedReviewQuestionAnswer" + "$ref": "#/definitions/nike.SizeAvailability" }, "type": "array" }, - "reliability_rating": { - "description": "Reviewer's rating for reliability. Omitted when the reviewer gave none.", - "type": "integer" - }, - "review_type": { - "description": "Kind of review, for example `founder` or `personal`.", + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "nike.Breadcrumb": { + "properties": { + "name": { "type": "string" }, - "selected_cons": { - "description": "Downsides the reviewer picked from Product Hunt's tag list.", + "path": { + "type": "string" + } + }, + "type": "object" + }, + "nike.CategoriesResponse": { + "properties": { + "categories": { "items": { - "$ref": "#/definitions/producthunt.ProductDetailedReviewTag" + "$ref": "#/definitions/nike.TopLevelCategory" }, "type": "array" }, - "selected_pros": { - "description": "Strengths the reviewer picked from Product Hunt's tag list.", + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "nike.CategoryGroup": { + "properties": { + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "subcategories": { "items": { - "$ref": "#/definitions/producthunt.ProductDetailedReviewTag" + "$ref": "#/definitions/nike.CategorySubcategory" }, "type": "array" + } + }, + "type": "object" + }, + "nike.CategorySubcategory": { + "properties": { + "name": { + "type": "string" }, - "status": { - "description": "Publication status of the review, for example `submitted`.", + "path": { "type": "string" }, - "threads_end_cursor": { - "description": "Cursor of the last comment thread returned. Omitted when none.", + "slug": { + "type": "string" + } + }, + "type": "object" + }, + "nike.ColorDetail": { + "properties": { + "color_code": { "type": "string" }, - "threads_has_next_page": { - "description": "Whether more comment threads exist on the review.", - "type": "boolean" + "color_description": { + "type": "string" }, - "threads_total_count": { - "description": "Total number of comment threads on the review.", + "currency": { + "type": "string" + }, + "discount_percentage": { "type": "integer" }, - "user": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductDetailedReviewUser" - } - ], - "description": "Reviewer who wrote the review." + "grouping_label": { + "type": "string" }, - "value_for_money_rating": { - "description": "Reviewer's rating for value for money. Omitted when the reviewer gave none.", - "type": "integer" + "images": { + "items": { + "type": "string" + }, + "type": "array" }, - "votes_count": { - "description": "Number of upvotes the review has.", - "type": "integer" + "initial_price": { + "type": "number" + }, + "is_buyable": { + "type": "boolean" + }, + "price": { + "type": "number" + }, + "size_chart_url": { + "type": "string" + }, + "sizes": { + "items": { + "$ref": "#/definitions/nike.ProductSize" + }, + "type": "array" + }, + "style_code": { + "type": "string" + }, + "style_color": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "producthunt.ProductDetailedReviewFollowProduct": { + "nike.ColorVariant": { "properties": { - "id": { - "description": "Product Hunt id of the product.", + "color_description": { "type": "string" }, - "is_no_longer_online": { - "description": "Whether Product Hunt marks the product as no longer online.", - "type": "boolean" - }, - "is_subscribed": { - "description": "Whether the requesting viewer follows the product.", - "type": "boolean" + "color_label": { + "type": "string" }, - "logo_uuid": { - "description": "Identifier of the product's logo image file.", + "currency": { "type": "string" }, - "name": { - "description": "Name of the product as shown on Product Hunt.", + "discount_percentage": { + "type": "integer" + }, + "image_url": { "type": "string" }, + "initial_price": { + "type": "number" + }, + "price": { + "type": "number" + }, "slug": { - "description": "URL slug of the product on Product Hunt.", + "type": "string" + }, + "style_color": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "producthunt.ProductDetailedReviewPost": { + "nike.FacetNav": { "properties": { - "badges": { - "description": "Badges the launch post has earned.", + "breadcrumbs": { "items": { - "$ref": "#/definitions/producthunt.ProductCategoryListBadge" + "$ref": "#/definitions/nike.Breadcrumb" }, "type": "array" }, - "id": { - "description": "Product Hunt id of the launch post.", + "categories": { + "items": { + "$ref": "#/definitions/nike.FacetOption" + }, + "type": "array" + }, + "filters": { + "items": { + "$ref": "#/definitions/nike.Filter" + }, + "type": "array" + } + }, + "type": "object" + }, + "nike.FacetOption": { + "properties": { + "label": { "type": "string" }, - "is_top_launch": { - "description": "Whether Product Hunt flags the post as a top launch.", - "type": "boolean" + "path": { + "type": "string" }, - "latest_score": { - "description": "Latest vote score of the launch post.", + "result_count": { "type": "integer" }, + "selected": { + "type": "boolean" + } + }, + "type": "object" + }, + "nike.Filter": { + "properties": { "name": { - "description": "Name of the launch post.", "type": "string" }, - "product_id": { - "description": "Product Hunt id of the product the post belongs to.", + "options": { + "items": { + "$ref": "#/definitions/nike.FacetOption" + }, + "type": "array" + } + }, + "type": "object" + }, + "nike.ProductDetailResponse": { + "properties": { + "color_code": { "type": "string" }, - "product_is_top_product": { - "description": "Whether Product Hunt flags the product as a top product.", + "color_description": { + "type": "string" + }, + "colors": { + "items": { + "$ref": "#/definitions/nike.ColorVariant" + }, + "type": "array" + }, + "currency": { + "type": "string" + }, + "description": { + "type": "string" + }, + "discount_percentage": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "genders": { + "items": { + "type": "string" + }, + "type": "array" + }, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "initial_price": { + "type": "number" + }, + "is_buyable": { "type": "boolean" }, - "product_slug": { - "description": "URL slug of the product the post belongs to.", + "price": { + "type": "number" + }, + "product_details": { + "items": { + "type": "string" + }, + "type": "array" + }, + "product_type": { "type": "string" }, - "product_state": { - "description": "State of the product on Product Hunt, for example `default`.", + "reason_to_buy": { "type": "string" }, + "sizes": { + "items": { + "$ref": "#/definitions/nike.ProductSize" + }, + "type": "array" + }, "slug": { - "description": "URL slug of the launch post.", "type": "string" }, - "thumbnail_image_uuid": { - "description": "Identifier of the launch post's thumbnail image file.", + "source_url": { "type": "string" - } - }, - "type": "object" - }, - "producthunt.ProductDetailedReviewProduct": { - "properties": { - "id": { - "description": "Product Hunt id of the product.", + }, + "sport_tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "style_code": { "type": "string" }, - "is_no_longer_online": { - "description": "Whether Product Hunt marks the product as no longer online.", - "type": "boolean" + "style_color": { + "type": "string" }, - "logo_uuid": { - "description": "Identifier of the product's logo image file.", + "subtitle": { "type": "string" }, - "name": { - "description": "Name of the product as shown on Product Hunt.", + "title": { "type": "string" }, - "slug": { - "description": "URL slug of the product on Product Hunt.", + "url": { "type": "string" } }, "type": "object" }, - "producthunt.ProductDetailedReviewQuestionAnswer": { + "nike.ProductDetailsResponse": { "properties": { - "answer": { - "description": "Reviewer's answer to the question.", + "colors": { + "items": { + "$ref": "#/definitions/nike.ColorDetail" + }, + "type": "array" + }, + "count": { + "type": "integer" + }, + "description": { "type": "string" }, - "id": { - "description": "Product Hunt id of the answer.", + "fetched_at": { "type": "string" }, - "question": { - "description": "Text of the review question.", + "genders": { + "items": { + "type": "string" + }, + "type": "array" + }, + "group_key": { "type": "string" }, - "question_id": { - "description": "Product Hunt id of the review question.", + "product_type": { + "type": "string" + }, + "reason_to_buy": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "subtitle": { + "type": "string" + }, + "title": { "type": "string" } }, "type": "object" }, - "producthunt.ProductDetailedReviewTag": { + "nike.ProductGroup": { "properties": { - "count": { - "description": "Number of reviewers who picked this tag for the product.", - "type": "integer" + "badge_label": { + "type": "string" }, - "id": { - "description": "Product Hunt id of the tag.", + "colors": { + "items": { + "$ref": "#/definitions/nike.ColorVariant" + }, + "type": "array" + }, + "group_key": { "type": "string" }, - "name": { - "description": "Text of the tag as shown on Product Hunt.", + "product_type": { "type": "string" }, - "type": { - "description": "Whether the tag is a strength or a downside, for example `Positive`.", + "subtitle": { + "type": "string" + }, + "title": { "type": "string" } }, "type": "object" }, - "producthunt.ProductDetailedReviewUser": { + "nike.ProductReview": { "properties": { - "avatar_url": { - "description": "URL of the reviewer's profile picture.", + "author": { "type": "string" }, - "headline": { - "description": "Reviewer's profile headline.", + "body": { "type": "string" }, - "id": { - "description": "Product Hunt id of the reviewer.", + "created_at": { "type": "string" }, - "is_account_verified": { - "description": "Whether the reviewer's Product Hunt account is verified.", - "type": "boolean" - }, - "is_ambassador": { - "description": "Whether the reviewer is a Product Hunt ambassador.", - "type": "boolean" - }, - "is_followed": { - "description": "Whether the requesting viewer follows the reviewer.", - "type": "boolean" - }, - "name": { - "description": "Reviewer's display name.", + "headline": { "type": "string" }, - "reviews_count": { - "description": "Number of reviews the reviewer has written.", + "helpful_votes": { "type": "integer" }, - "selected_byline_product": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.ProductDetailedReviewProduct" - } - ], - "description": "Product the reviewer shows on their byline." + "id": { + "type": "string" }, - "top_hunter_badge": { - "additionalProperties": {}, - "description": "Top hunter badge on the reviewer's profile, as Product Hunt returns it. Omitted when none.", - "type": "object" + "location": { + "type": "string" }, - "top_launch_badge": { - "additionalProperties": {}, - "description": "Top launch badge on the reviewer's profile, as Product Hunt returns it. Omitted when none.", - "type": "object" + "not_helpful_votes": { + "type": "integer" }, - "top_product_badge": { - "additionalProperties": {}, - "description": "Top product badge on the reviewer's profile, as Product Hunt returns it. Omitted when none.", - "type": "object" + "rating": { + "type": "integer" }, - "username": { - "description": "Reviewer's Product Hunt username.", - "type": "string" + "recommended": { + "type": "boolean" } }, "type": "object" }, - "producthunt.ProductDetailedReviewsPage": { + "nike.ProductReviewsResponse": { "properties": { - "connection": { - "description": "Kind of list the items come from, for example `detailedReviews`.", - "example": "detailedReviews", - "type": "string" - }, - "detailed_review": { - "additionalProperties": {}, - "description": "A single detailed review attached to the product, as Product Hunt returns it. Omitted when none.", - "type": "object" + "average_rating": { + "type": "number" }, - "detailed_reviews_count": { - "description": "Total number of detailed reviews the product has.", + "count": { "type": "integer" }, - "end_cursor": { - "description": "Cursor of the last review on this page. Omitted when Product Hunt returns none.", + "fetched_at": { "type": "string" }, - "founder_detailed_reviews_count": { - "description": "Number of detailed reviews written by the product's founders.", + "page": { "type": "integer" }, - "has_next_page": { - "description": "Whether another page of reviews follows this one.", - "example": false, - "type": "boolean" - }, - "is_maker": { - "description": "Whether the requesting viewer is a maker of the product.", - "type": "boolean" + "page_size": { + "type": "integer" }, - "is_trashed": { - "description": "Whether the product has been removed from Product Hunt.", - "type": "boolean" + "rating_histogram": { + "description": "RatingHistogram is the count of ratings per star, ascending: index 0\nis 1-star, index 4 is 5-star.", + "items": { + "type": "integer" + }, + "type": "array" }, - "items": { - "description": "Detailed reviews of the product, one per entry.", + "reviews": { "items": { - "$ref": "#/definitions/producthunt.ProductDetailedReview" + "$ref": "#/definitions/nike.ProductReview" }, "type": "array" }, - "name": { - "description": "Name of the product.", + "slug": { "type": "string" }, - "other_detailed_reviews_count": { - "description": "Number of detailed reviews written by users other than the founders.", - "type": "integer" - }, - "product_id": { - "description": "Product Hunt id of the product.", - "example": "1191613", + "source_url": { "type": "string" }, - "raw_page_info": { - "additionalProperties": {}, - "description": "Pagination details for this page as Product Hunt returns them.", - "type": "object" + "style_color": { + "type": "string" }, - "reviews_count": { - "description": "Total number of reviews the product has.", + "total_pages": { "type": "integer" }, - "reviews_rating": { - "description": "Average review rating of the product.", - "type": "number" + "total_reviews": { + "type": "integer" + } + }, + "type": "object" + }, + "nike.ProductSize": { + "properties": { + "label": { + "type": "string" }, - "reviews_recent_rating": { - "description": "Average review rating over recent reviews. Omitted when Product Hunt gives none.", - "type": "number" + "localized_label": { + "type": "string" }, - "slug": { - "description": "URL slug of the product on Product Hunt.", - "example": "clico", + "sku_id": { "type": "string" }, - "total_count": { - "description": "Total number of detailed reviews in the list.", - "example": 6, - "type": "integer" + "status": { + "type": "string" } }, "type": "object" }, - "producthunt.ProductLaunchesPage": { + "nike.RecommendationsResponse": { "properties": { - "connection": { - "description": "Kind of list the items come from, for example `posts`.", - "example": "posts", - "type": "string" + "count": { + "type": "integer" }, - "end_cursor": { - "description": "Cursor of the last launch on this page. Pass it as `cursor` to get the next page.", + "fetched_at": { "type": "string" }, - "has_next_page": { - "description": "Whether another page of launches follows this one.", - "type": "boolean" - }, - "items": { - "description": "Launch posts of the product, one per entry.", + "recommendations": { "items": { - "$ref": "#/definitions/producthunt.ProductAboutPost" + "$ref": "#/definitions/nike.RecommendedProduct" }, "type": "array" }, - "name": { - "description": "Name of the product.", - "example": "OpenAI", + "source_url": { "type": "string" }, - "order": { - "description": "Order the launches are sorted in, for example `DATE`.", - "example": "DATE", + "style_color": { + "type": "string" + } + }, + "type": "object" + }, + "nike.RecommendedProduct": { + "properties": { + "currency": { "type": "string" }, - "product_id": { - "description": "Product Hunt id of the product.", - "example": "1191613", + "image_url": { "type": "string" }, - "raw_page_info": { - "additionalProperties": {}, - "description": "Pagination details for this page as Product Hunt returns them.", - "type": "object" + "initial_price": { + "type": "number" }, - "slug": { - "description": "URL slug of the product on Product Hunt.", - "example": "openai", + "price": { + "type": "number" + }, + "price_type": { "type": "string" }, - "total_count": { - "description": "Total number of launches the product has.", - "example": 12, + "rank": { "type": "integer" + }, + "style_color": { + "type": "string" + }, + "style_type": { + "type": "string" + }, + "subtitle": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "producthunt.ProductMaker": { + "nike.SearchResponse": { "properties": { - "avatar_url": { - "description": "URL of the maker's profile picture.", + "category": { "type": "string" }, - "followers_count": { - "description": "Number of Product Hunt users following the maker.", + "count": { "type": "integer" }, - "headline": { - "description": "Maker's profile headline.", + "facet_nav": { + "allOf": [ + { + "$ref": "#/definitions/nike.FacetNav" + } + ], + "description": "FacetNav is the navigation/filtering data Nike's own response\nalready carries alongside product results -- subcategory\nrefinement options, named filter groups (price/size/color/etc.),\nand (for category browsing) a breadcrumb trail. Nil when the\nupstream returned no navigation data. See FacetNav's doc comment." + }, + "fetched_at": { "type": "string" }, - "id": { - "description": "Product Hunt id of the maker.", + "keyword": { "type": "string" }, - "is_followed": { - "description": "Whether the requesting viewer follows the maker.", - "type": "boolean" + "page": { + "type": "integer" }, - "made_posts": { - "description": "Launch posts the maker worked on.", + "page_size": { + "type": "integer" + }, + "products": { "items": { - "$ref": "#/definitions/producthunt.ProductMakerPost" + "$ref": "#/definitions/nike.ProductGroup" }, "type": "array" }, - "name": { - "description": "Maker's display name.", + "source_url": { "type": "string" }, - "username": { - "description": "Maker's Product Hunt username.", - "type": "string" + "total_pages": { + "type": "integer" + }, + "total_products": { + "type": "integer" } }, "type": "object" }, - "producthunt.ProductMakerPost": { + "nike.SizeAvailability": { "properties": { - "id": { - "description": "Product Hunt id of the launch post.", - "type": "string" + "available": { + "type": "boolean" }, - "name": { - "description": "Name of the launch post.", + "grouping_label": { "type": "string" }, - "product_id": { - "description": "Product Hunt id of the product the post belongs to.", + "gtin": { "type": "string" }, - "product_slug": { - "description": "URL slug of the product the post belongs to.", + "label": { "type": "string" }, - "product_state": { - "description": "State of the product on Product Hunt, for example `default`.", + "localized_label": { "type": "string" }, - "slug": { - "description": "URL slug of the launch post.", + "ship": { "type": "string" }, - "thumbnail_image_uuid": { - "description": "Identifier of the launch post's thumbnail image file.", + "style_color": { "type": "string" } }, "type": "object" }, - "producthunt.ProductMakersPage": { + "nike.Store": { "properties": { - "can_claim": { - "description": "Whether the requesting viewer can claim the product.", - "type": "boolean" + "address": { + "type": "string" }, - "connection": { - "description": "Kind of list the items come from, for example `makers`.", - "example": "makers", + "business_concept": { "type": "string" }, - "end_cursor": { - "description": "Cursor of the last maker on this page. Pass it as `cursor` to get the next page.", + "city": { "type": "string" }, - "has_next_page": { - "description": "Whether another page of makers follows this one.", - "example": false, - "type": "boolean" + "country": { + "type": "string" }, - "is_claimed": { - "description": "Whether the product page has been claimed by its team.", - "type": "boolean" + "distance_miles": { + "type": "number" }, - "is_trashed": { - "description": "Whether the product has been removed from Product Hunt.", - "type": "boolean" + "facility_type": { + "type": "string" }, - "items": { - "description": "Makers of the product, one per entry.", - "items": { - "$ref": "#/definitions/producthunt.ProductMaker" - }, - "type": "array" + "image_url": { + "type": "string" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" }, "name": { - "description": "Name of the product.", "type": "string" }, - "product_id": { - "description": "Product Hunt id of the product.", - "example": "1191613", + "phone": { "type": "string" }, - "raw_page_info": { - "additionalProperties": {}, - "description": "Pagination details for this page as Product Hunt returns them.", - "type": "object" + "postal_code": { + "type": "string" + }, + "region": { + "type": "string" }, "slug": { - "description": "URL slug of the product on Product Hunt.", - "example": "clico", "type": "string" }, - "total_count": { - "description": "Total number of makers the product has.", - "example": 3, - "type": "integer" + "store_concept": { + "type": "string" }, - "viewer_pending_team_request": { - "additionalProperties": {}, - "description": "The viewer's pending request to join the product's team, as Product Hunt returns it. Omitted when none.", - "type": "object" + "store_number": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "producthunt.SimilarProduct": { + "nike.StoreResponse": { "properties": { - "categories": { - "description": "Product Hunt categories the similar product is listed in.", - "example": [ - "[\"Presentation Software\"]" - ], + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "lat": { + "type": "number" + }, + "lng": { + "type": "number" + }, + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "radius_miles": { + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "stores": { "items": { - "type": "string" + "$ref": "#/definitions/nike.Store" }, "type": "array" }, - "id": { - "description": "Product Hunt slug of the similar product.", - "example": "beautiful-ai", + "total_stores": { + "type": "integer" + } + }, + "type": "object" + }, + "nike.SuggestResponse": { + "properties": { + "count": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "name": { - "description": "Name of the similar product.", - "example": "Beautiful.ai", + "query": { "type": "string" }, - "rating": { - "description": "Average review rating of the similar product.", - "example": 3.3, - "type": "number" + "source_url": { + "type": "string" }, - "review_count": { - "description": "Number of reviews the similar product has.", - "example": 20, - "type": "integer" + "suggestions": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "producthunt.aboutResponseDoc": { + "nike.TopLevelCategory": { "properties": { - "code": { - "example": 200, - "type": "integer" + "groups": { + "items": { + "$ref": "#/definitions/nike.CategoryGroup" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/producthunt.ProductAboutPage" + "name": { + "type": "string" }, - "msg": { - "example": "Request successful", + "path": { "type": "string" } }, "type": "object" }, - "producthunt.alternativesResponseDoc": { + "nike.availabilityResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/producthunt.ProductAlternativesPage" + "$ref": "#/definitions/nike.AvailabilityResponse" }, "msg": { "example": "OK", @@ -168630,14 +173398,14 @@ }, "type": "object" }, - "producthunt.categoryProductsResponseDoc": { + "nike.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/producthunt.ProductCategoryProductsPage" + "$ref": "#/definitions/nike.CategoriesResponse" }, "msg": { "example": "OK", @@ -168646,14 +173414,14 @@ }, "type": "object" }, - "producthunt.categoryResponseDoc": { + "nike.productDetailsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/producthunt.ProductCategoryPage" + "$ref": "#/definitions/nike.ProductDetailsResponse" }, "msg": { "example": "OK", @@ -168662,14 +173430,14 @@ }, "type": "object" }, - "producthunt.customersResponseDoc": { + "nike.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/producthunt.ProductCustomersPage" + "$ref": "#/definitions/nike.ProductDetailResponse" }, "msg": { "example": "OK", @@ -168678,14 +173446,14 @@ }, "type": "object" }, - "producthunt.launchesResponseDoc": { + "nike.productReviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/producthunt.ProductLaunchesPage" + "$ref": "#/definitions/nike.ProductReviewsResponse" }, "msg": { "example": "OK", @@ -168694,30 +173462,30 @@ }, "type": "object" }, - "producthunt.leaderboardResponseDoc": { + "nike.recommendationsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/producthunt.LeaderboardPage" + "$ref": "#/definitions/nike.RecommendationsResponse" }, "msg": { - "example": "Request successful", + "example": "OK", "type": "string" } }, "type": "object" }, - "producthunt.makersResponseDoc": { + "nike.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/producthunt.ProductMakersPage" + "$ref": "#/definitions/nike.SearchResponse" }, "msg": { "example": "OK", @@ -168726,14 +173494,14 @@ }, "type": "object" }, - "producthunt.productResponseDoc": { + "nike.storesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/producthunt.Product" + "$ref": "#/definitions/nike.StoreResponse" }, "msg": { "example": "OK", @@ -168742,14 +173510,14 @@ }, "type": "object" }, - "producthunt.reviewsResponseDoc": { + "nike.suggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/producthunt.ProductDetailedReviewsPage" + "$ref": "#/definitions/nike.SuggestResponse" }, "msg": { "example": "OK", @@ -168758,160 +173526,100 @@ }, "type": "object" }, - "producthunt.searchAggregationsDoc": { + "ninetofivegoogle.AuthorResponse": { "properties": { - "topics": { - "description": "Launch counts per topic for the search results.", + "articles": { "items": { - "$ref": "#/definitions/producthunt.searchTopicDoc" + "$ref": "#/definitions/ninetofivegoogle.HeadlineItem" }, "type": "array" - } - }, - "type": "object" - }, - "producthunt.searchDataDoc": { - "properties": { - "aggregations": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.searchAggregationsDoc" - } - ], - "description": "Topic counts for the matching launches. Returned for launch searches." }, - "edges": { - "description": "Search results on this page, one per entry.", + "biography": { "items": { - "$ref": "#/definitions/producthunt.searchEdgeDoc" + "type": "string" }, "type": "array" }, - "pageInfo": { - "allOf": [ - { - "$ref": "#/definitions/producthunt.searchPageInfoDoc" - } - ], - "description": "Paging details for the results." + "image_url": { + "type": "string" }, - "pagesCount": { - "description": "Total number of result pages.", - "example": 394, - "type": "integer" - } - }, - "type": "object" - }, - "producthunt.searchEdgeDoc": { - "properties": { - "node": { - "description": "Search result: a product, user or launch, depending on `type`.", - "type": "object" - } - }, - "type": "object" - }, - "producthunt.searchPageInfoDoc": { - "properties": { - "hasNextPage": { - "description": "Whether another page of results follows this one.", - "type": "boolean" + "name": { + "type": "string" }, - "hasPreviousPage": { - "description": "Whether a page of results precedes this one.", - "type": "boolean" + "social_links": { + "items": { + "$ref": "#/definitions/ninetofivegoogle.AuthorSocialLink" + }, + "type": "array" }, - "page": { - "description": "Page number returned.", - "example": 1, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "producthunt.searchResponseDoc": { + "ninetofivegoogle.AuthorSocialLink": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/producthunt.searchDataDoc" + "type": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "producthunt.searchTopicDoc": { + "ninetofivegoogle.HeadlineItem": { "properties": { - "count": { - "description": "Number of matching launches in the topic.", - "example": 11979, - "type": "integer" + "author": { + "type": "string" + }, + "image_url": { + "type": "string" }, - "topic": { - "description": "Topic the count applies to, with its `id` and `name`.", - "properties": { - "id": { - "example": "268", - "type": "string" - }, - "name": { - "example": "Artificial Intelligence", - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "propublica.AuthorArticle": { - "properties": { "published_at": { "type": "string" }, + "summary": { + "type": "string" + }, "title": { "type": "string" }, + "type": { + "type": "string" + }, "url": { "type": "string" } }, "type": "object" }, - "propublica.AuthorResponse": { + "ninetofivemac.AuthorResponse": { "properties": { "articles": { "items": { - "$ref": "#/definitions/propublica.AuthorArticle" + "$ref": "#/definitions/ninetofivemac.HeadlineItem" }, "type": "array" }, - "bio": { + "biography": { "items": { "type": "string" }, "type": "array" }, - "contact_email": { + "image_url": { "type": "string" }, "name": { "type": "string" }, - "page": { - "type": "integer" - }, "social_links": { - "additionalProperties": { - "type": "string" + "items": { + "$ref": "#/definitions/ninetofivemac.AuthorSocialLink" }, - "type": "object" + "type": "array" }, "url": { "type": "string" @@ -168919,757 +173627,716 @@ }, "type": "object" }, - "psa.AutographFactsCategoriesResponse": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/psa.AutographFactsCategory" - }, - "type": "array" - } - }, - "type": "object" - }, - "psa.AutographFactsCategory": { + "ninetofivemac.AuthorSocialLink": { "properties": { - "id": { - "description": "ID is PSA's own numeric category id, confirmed live against every\ncategory this family covers. Distinct from PSA CardFacts'/Price\nGuide's own category id spaces -- do not assume they share values.", - "type": "integer" + "type": { + "type": "string" }, - "name": { - "description": "Name is PSA's own display label, e.g. \"Baseball\".", + "url": { "type": "string" } }, "type": "object" }, - "psa.AutographFactsGalleryImage": { + "ninetofivemac.HeadlineItem": { "properties": { - "caption": { - "description": "Caption is PSA's own descriptive caption for this exemplar, e.g.\n\"1977 Hank Aaron Signed Letter\".", + "author": { "type": "string" }, "image_url": { - "description": "ImageURL is the full-size image URL.", + "type": "string" + }, + "published_at": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "psa.AutographFactsGalleryResult": { + "npr.ArticleResponse": { "properties": { - "images": { + "authors": { "items": { - "$ref": "#/definitions/psa.AutographFactsGalleryImage" + "type": "string" }, "type": "array" }, - "name": { - "description": "Name is the subject's display name, e.g. \"Hank Aaron\".", + "description": { "type": "string" }, - "source_url": { + "image_url": { "type": "string" }, - "subject_id": { + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "published_at": { "type": "string" - } - }, - "type": "object" - }, - "psa.AutographFactsSubject": { - "properties": { - "name": { - "description": "Name is the subject's display name, e.g. \"Hank Aaron\".", + }, + "section": { "type": "string" }, - "subject_id": { - "description": "SubjectID is PSA's own numeric subject id -- pass as subject_id to\nAutographFactsSubject.", - "type": "integer" + "title": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "psa.AutographFactsSubjectResult": { + "npr.AuthorArticle": { "properties": { - "autograph_profile": { - "description": "AutographProfile is PSA's own free-text authentication notes for\nthis subject's signature -- signing habits, forgery risk,\nsignature evolution.", + "image_url": { "type": "string" }, - "name": { - "description": "Name is the subject's display name, e.g. \"Hank Aaron\".", + "published_at": { "type": "string" }, - "prices": { - "additionalProperties": { - "type": "string" - }, - "description": "Prices maps PSA's own item-type labels (e.g. \"3x5/AP\", \"Gum Card\",\n\"Photo\", \"Check\", \"SS Bat\", \"SS Ball\" -- these vary by subject, not\na fixed global list) to PSA's own formatted price text for this\nsubject's autograph on that item type, e.g. \"$65\". \"IMP\" marks an\nitem type PSA considers impossible/unavailable for this subject\nrather than a real price.", - "type": "object" - }, - "source_url": { + "summary": { "type": "string" }, - "subject_id": { + "title": { "type": "string" }, - "subject_profile": { - "description": "SubjectProfile is PSA's own free-text biography for this subject.", + "url": { "type": "string" } }, "type": "object" }, - "psa.AutographFactsSubjectsResponse": { + "npr.AuthorResponse": { "properties": { - "category_id": { - "type": "integer" - }, - "category_name": { - "type": "string" - }, - "subjects": { + "articles": { "items": { - "$ref": "#/definitions/psa.AutographFactsSubject" + "$ref": "#/definitions/npr.AuthorArticle" }, "type": "array" + }, + "bio": { + "type": "string" + }, + "job_title": { + "type": "string" + }, + "name": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "psa.CardFactsCategoriesResponse": { + "npr.CategoriesResponse": { "properties": { "categories": { "items": { - "$ref": "#/definitions/psa.CardFactsCategory" + "$ref": "#/definitions/npr.Category" }, "type": "array" } }, "type": "object" }, - "psa.CardFactsCategory": { + "npr.Category": { "properties": { - "id": { - "description": "ID is PSA's own numeric category id, confirmed live against every\ncategory this family covers. Distinct from Price Guide's/\nAutographFacts'/TicketFacts'/ProBatFacts' own category id spaces --\nids 10 and 16 in particular mean different things in CardFacts than\nin Price Guide, do not assume they share values.", - "type": "integer" - }, "name": { - "description": "Name is PSA's own display label, e.g. \"Baseball\".", "type": "string" - } - }, - "type": "object" - }, - "psa.CardFactsChecklistCard": { - "properties": { - "name": { - "description": "Name is the card's display name, e.g. \"Wander Franco\". Some rows\ncarry an embedded HTML anchor around the name in PSA's own raw\nresponse (confirmed live, e.g. a golf set's \"Tiger Woods\" row) --\nstripped here so every row is plain text.", + }, + "slug": { "type": "string" }, - "number": { - "description": "Number is the card's printed number within the set. Some sets (e.g.\nplayer-name-only checklists like autograph card sets) carry no\nnumber at all, confirmed live -- empty in that case, not omitted, so\ncallers can rely on the field always being present.", + "url": { "type": "string" } }, "type": "object" }, - "psa.CardFactsChecklistResponse": { + "npr.HeadlineItem": { "properties": { - "cards": { - "items": { - "$ref": "#/definitions/psa.CardFactsChecklistCard" - }, - "type": "array" + "author": { + "type": "string" }, - "has_checklist": { - "type": "boolean" + "published_at": { + "type": "string" }, - "set_id": { + "summary": { "type": "string" }, - "total_cards": { - "type": "integer" - } - }, - "type": "object" - }, - "psa.CardFactsSet": { - "properties": { - "name": { - "description": "Name is the set's display name, e.g. \"2022 Topps\".", + "title": { "type": "string" }, - "set_id": { - "description": "SetID is PSA's own numeric set id -- pass as set_id to\nCardFactsChecklist.", - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "psa.CardFactsSetsResponse": { + "npr.HeadlinesResponse": { "properties": { - "category_id": { - "type": "integer" - }, - "category_name": { - "type": "string" - }, - "sets": { + "items": { "items": { - "$ref": "#/definitions/psa.CardFactsSet" + "$ref": "#/definitions/npr.HeadlineItem" }, "type": "array" } }, "type": "object" }, - "psa.CertLookupResult": { + "npr.TopicItem": { "properties": { - "brand_title": { - "description": "BrandTitle is the issuing brand/product line, e.g. \"POKEMON SKYRIDGE\".", - "type": "string" - }, - "card_number": { - "description": "CardNumber is the card's number within its set, e.g. \"146\".", - "type": "string" - }, - "category": { - "description": "Category is PSA's own item category, e.g. \"TCG CARDS\".", - "type": "string" - }, - "cert_number": { - "description": "CertNumber echoes the requested certification number.", - "type": "string" - }, - "item_grade": { - "description": "ItemGrade is PSA's graded condition for this item, e.g. \"GEM MT 10\",\nfrom PSA's own published grade scale (Authentic through Gem Mint 10).", - "type": "string" - }, - "label_type": { - "description": "LabelType is a special label variant PSA applied to this cert, e.g.\n\"W/ FUGITIVE INK TECHNOLOGY\". Empty when the cert carries PSA's\nstandard label.", - "type": "string" - }, - "psa_estimate": { - "description": "PSAEstimate is PSA's own dollar price estimate for this exact\ncert+grade, PSA's own formatted string (e.g. \"$135,624.00\"). Empty\nwhen PSA shows no estimate for this cert.", - "type": "string" - }, - "psa_pop_higher": { - "description": "PSAPopHigher is the number of items PSA has graded higher than this\ncert's own grade for the same card. Nil when PSA shows no figure.", - "type": "integer" - }, - "psa_population": { - "description": "PSAPopulation is the number of items PSA has graded at this exact\ncard+grade combination. Nil when PSA shows no population figure for\nthis cert (e.g. an ungraded/authentic-only cert).", - "type": "integer" - }, - "psa_population_url": { - "description": "PSAPopulationURL is PSA's own Population Report deep link for this\ncard+grade. Informational only -- following it requires a Collectors\naccount login; see the CertLookupResult doc comment above.", - "type": "string" - }, - "reverse_cert_barcode": { - "description": "ReverseCertBarcode reports whether the physical label also carries a\nbarcode on its reverse side.", - "type": "boolean" - }, - "set_registry_note": { - "description": "SetRegistryNote is PSA's own Set Registry membership line for this\ncert, e.g. \"This cert does not appear in any sets.\" when the item is\nnot registered in any PSA Set Registry set.", - "type": "string" - }, - "source_url": { - "description": "SourceURL is the PSA cert-verification page this result was parsed\nfrom.", + "published_at": { "type": "string" }, - "subject": { - "description": "Subject is the card's subject/player name, e.g. \"CHARIZARD-HOLO\".", + "summary": { "type": "string" }, "title": { - "description": "Title is PSA's own item title line, e.g.\n\"2003 POKEMON SKYRIDGE #146 CHARIZARD-HOLO\".", "type": "string" }, - "year": { - "description": "Year is the card/item's issue year, e.g. \"2003\".", + "url": { "type": "string" } }, "type": "object" }, - "psa.PriceGuideCardPrice": { + "npr.TopicResponse": { "properties": { - "card_number": { - "description": "CardNumber is the card's number within the set. Empty for\ngroup-summary rows.", - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/npr.TopicItem" + }, + "type": "array" }, - "description": { - "description": "Description is the card/row's own name as PSA Price Guide displays\nit, e.g. \"Ken Griffey, Sr. (R)\" or a group-summary row like\n\"Commons 1-660\".", + "topic": { "type": "string" - }, - "item_id": { - "description": "ItemID is PSA's own numeric item id for this specific card, usable\nfor cross-referencing a psa-price-guide-search result. Nil for\ngroup-summary rows, which have no single-item id.", - "type": "integer" - }, - "prices": { - "additionalProperties": { - "type": "string" - }, - "description": "Prices maps each of Grades (the set's own grade-column labels, e.g.\n\"NM 7\") to PSA's own formatted price text for this card at that\ngrade, e.g. \"35+\" (a trailing \"+\"/\"-\" is PSA's own monthly-trend\nmarker). A grade with no price for this card is omitted from the map\nrather than present as an empty string.", - "type": "object" } }, "type": "object" }, - "psa.PriceGuideCategoriesResponse": { + "npr.articleResponseDoc": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/psa.PriceGuideCategory" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/npr.ArticleResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "psa.PriceGuideCategory": { + "npr.authorResponseDoc": { "properties": { - "id": { - "description": "ID is PSA's own numeric category id (SportCategoryID), confirmed live\nagainst every category this family covers.", + "code": { + "example": 200, "type": "integer" }, - "name": { - "description": "Name is PSA's own display label, e.g. \"Baseball Cards\".", - "type": "string" + "data": { + "$ref": "#/definitions/npr.AuthorResponse" }, - "path": { - "description": "Path is the URL path segment(s) PSA Price Guide uses for this\ncategory, e.g. \"baseball-card-values\" -- most categories are a single\nsegment, but not all (see notes on the shipped enum values).", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "psa.PriceGuideSearchItem": { + "npr.categoriesResponseDoc": { "properties": { - "item_id": { - "description": "ItemID is PSA's own numeric item id.", + "code": { + "example": 200, "type": "integer" }, - "name": { - "description": "Name is the card/item's own descriptive name, e.g.\n\"Ken Griffey, Sr. (R)\".", + "data": { + "$ref": "#/definitions/npr.CategoriesResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "psa.PriceGuideSearchResponse": { + "npr.headlinesResponseDoc": { "properties": { - "page": { + "code": { + "example": 200, "type": "integer" }, - "page_size": { - "type": "integer" + "data": { + "$ref": "#/definitions/npr.HeadlinesResponse" }, - "query": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "npr.topicResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "results": { - "items": { - "$ref": "#/definitions/psa.PriceGuideSearchResult" - }, - "type": "array" + "data": { + "$ref": "#/definitions/npr.TopicResponse" }, - "total_count": { - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "psa.PriceGuideSearchResult": { + "numbeo.CityIndexEntry": { "properties": { - "category_name": { - "description": "CategoryName is PSA's own category display name for this set, e.g.\n\"Baseball Card Values\".", + "city": { "type": "string" }, - "category_path": { - "description": "CategoryPath is the category's URL path segment -- pass as\ncategory_path to psa-price-guide-set.", + "city_slug": { "type": "string" }, - "items": { - "description": "Items are the matching cards/items within this set.", + "cost_of_living_index": { + "description": "Numbeo Cost of Living Index; a higher value means consumer goods cost more.", + "type": "number" + }, + "cost_of_living_plus_rent_index": { + "description": "Numbeo Cost of Living Plus Rent Index, which combines consumer prices and rent.", + "type": "number" + }, + "groceries_index": { + "description": "Numbeo Groceries Index; a higher value means groceries cost more.", + "type": "number" + }, + "local_purchasing_power_index": { + "description": "Numbeo Local Purchasing Power Index; a higher value means locals can afford more with their wages.", + "type": "number" + }, + "rank": { + "type": "integer" + }, + "rent_index": { + "description": "Numbeo Rent Index; a higher value means rent costs more.", + "type": "number" + }, + "restaurant_price_index": { + "description": "Numbeo Restaurant Price Index; a higher value means meals and drinks out cost more.", + "type": "number" + } + }, + "type": "object" + }, + "numbeo.CostOfLivingCityResponse": { + "properties": { + "categories": { + "description": "Price categories for the city, each with its priced items.", "items": { - "$ref": "#/definitions/psa.PriceGuideSearchItem" + "$ref": "#/definitions/numbeo.PriceCategory" }, "type": "array" }, - "set_id": { - "description": "SetID is PSA's own numeric set id -- pass as set_id to\npsa-price-guide-set along with CategoryPath and SetPath.", + "city": { + "description": "City name as Numbeo shows it, with the state or region where Numbeo adds one, such as `Los Angeles, CA`.", + "type": "string" + }, + "city_slug": { + "description": "Numbeo city slug that was requested, such as `Los-Angeles`.", + "type": "string" + }, + "contributors_12mo": { + "description": "Number of different contributors behind the city's prices, as Numbeo reports it.", "type": "integer" }, - "set_name": { - "description": "SetName is the set's display name, e.g. \"1974 Topps\".", + "country": { + "description": "Country the city is in.", "type": "string" }, - "set_path": { - "description": "SetPath is the set's own URL path segment -- pass as set_path to\npsa-price-guide-set.", + "last_update": { + "description": "Date Numbeo last updated the city's prices, as Numbeo shows it, such as `13 July 2026`.", + "type": "string" + }, + "source_url": { + "description": "URL the data was read from.", "type": "string" } }, "type": "object" }, - "psa.PriceGuideSetResponse": { + "numbeo.CostOfLivingCountryResponse": { "properties": { - "cards": { - "description": "Cards is every row of the set's price table, in PSA's own display\norder.", + "categories": { "items": { - "$ref": "#/definitions/psa.PriceGuideCardPrice" + "$ref": "#/definitions/numbeo.PriceCategory" }, "type": "array" }, - "grades": { - "description": "Grades are this set's own grade-column labels, in the order PSA\nitself displays them (e.g. [\"NM 7\",\"NM-MT 8\",\"MT 9\",\"GEM-MT 10\"]).\nConfirmed live that this varies by set -- a vintage set may carry\nmore/lower grade columns than a modern one -- so it is returned per\nresponse rather than assumed fixed.", + "cities": { "items": { - "type": "string" + "$ref": "#/definitions/numbeo.CityIndexEntry" }, "type": "array" }, - "set_id": { + "contributors_12mo": { + "type": "integer" + }, + "country": { "type": "string" }, - "source_url": { + "last_update": { "type": "string" }, - "title": { - "description": "Title is the set's display name, e.g. \"1974 Topps\".", + "source_url": { "type": "string" } }, "type": "object" }, - "psa.PriceGuideSetSummary": { + "numbeo.CountryIndexEntry": { "properties": { - "category_name": { - "description": "CategoryName is the category's display name from\npsa-price-guide-categories, e.g. \"Baseball Cards\".", - "type": "string" + "cost_of_living_index": { + "description": "Numbeo Cost of Living Index; a higher value means consumer goods cost more.", + "type": "number" }, - "category_path": { - "description": "CategoryPath is the set URL's category segment -- pass as category_path\nto psa-price-guide-set.", + "cost_of_living_plus_rent_index": { + "description": "Numbeo Cost of Living Plus Rent Index, which combines consumer prices and rent.", + "type": "number" + }, + "country": { + "description": "Country name as Numbeo shows it.", "type": "string" }, - "set_id": { - "description": "SetID is PSA's own numeric set id.", + "groceries_index": { + "description": "Numbeo Groceries Index; a higher value means groceries cost more.", + "type": "number" + }, + "local_purchasing_power_index": { + "description": "Numbeo Local Purchasing Power Index; a higher value means locals can afford more with their wages.", + "type": "number" + }, + "rank": { + "description": "Position of the country in Numbeo's cost-of-living ranking, starting at 1.", "type": "integer" }, - "set_name": { - "description": "SetName is the set's display name as PSA's category page shows it,\ne.g. \"1974 Topps\".", - "type": "string" + "rent_index": { + "description": "Numbeo Rent Index; a higher value means rent costs more.", + "type": "number" }, - "set_path": { - "description": "SetPath is the set URL's own slug -- pass as set_path to\npsa-price-guide-set.", - "type": "string" + "restaurant_price_index": { + "description": "Numbeo Restaurant Price Index; a higher value means meals and drinks out cost more.", + "type": "number" } }, "type": "object" }, - "psa.PriceGuideSetsResponse": { + "numbeo.IndexRankingEntry": { "properties": { - "category_path": { - "description": "CategoryPath echoes the category filter; empty when every category was\nsearched.", + "city": { + "description": "City name as Numbeo shows it. Set on city rankings.", "type": "string" }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" + "city_slug": { + "description": "Numbeo city slug. Set on city rankings.", + "type": "string" }, - "query": { + "country": { + "description": "Country name as Numbeo shows it. Set on country rankings.", "type": "string" }, - "sets": { + "indices": { + "description": "Index values Numbeo publishes for this row, in table column order.", "items": { - "$ref": "#/definitions/psa.PriceGuideSetSummary" + "$ref": "#/definitions/numbeo.NamedValue" }, "type": "array" }, - "total_count": { - "description": "TotalCount is every matching set across all pages.", + "rank": { + "description": "Position in the Numbeo ranking, starting at 1.", "type": "integer" - }, - "unavailable_categories": { - "description": "UnavailableCategories lists categories whose set list could not be\nloaded and had no earlier copy to fall back on. When present, Sets and\nTotalCount cover the other categories only.", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "psa.ProBatFactsCategoriesResponse": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/psa.ProBatFactsCategory" - }, - "type": "array" } }, "type": "object" }, - "psa.ProBatFactsCategory": { + "numbeo.IndexRow": { "properties": { - "id": { - "description": "ID is PSA's own numeric category id, confirmed live against every\ncategory this family covers. Distinct from CardFacts'/Price Guide's/\nAutographFacts'/TicketFacts' own category id spaces -- do not assume\nthey share values.", - "type": "integer" - }, "name": { - "description": "Name is PSA's own display label, e.g. \"Hall of Fame Players\".", - "type": "string" - } - }, - "type": "object" - }, - "psa.ProBatFactsGalleryImage": { - "properties": { - "caption": { "type": "string" }, - "image_url": { + "qualifier": { "type": "string" + }, + "value": { + "type": "number" } }, "type": "object" }, - "psa.ProBatFactsGalleryResult": { + "numbeo.IndexSection": { "properties": { - "images": { + "rows": { "items": { - "$ref": "#/definitions/psa.ProBatFactsGalleryImage" + "$ref": "#/definitions/numbeo.IndexRow" }, "type": "array" }, - "name": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "subject_id": { + "title": { "type": "string" } }, "type": "object" }, - "psa.ProBatFactsSubject": { + "numbeo.IndicesCityResponse": { "properties": { - "name": { - "description": "Name is the player's display name, e.g. \"Hank Aaron\".", + "city": { "type": "string" }, - "subject_id": { - "description": "SubjectID is PSA's own numeric subject id -- pass as subject_id to\nProBatFactsSubject.", - "type": "integer" - } - }, - "type": "object" - }, - "psa.ProBatFactsSubjectResult": { - "properties": { - "bat_profile": { - "description": "BatProfile is PSA's own free-text bat-authentication writeup\n(models used, signature placement, etc.) for this player.", + "city_slug": { "type": "string" }, - "name": { - "description": "Name is the player's display name, e.g. \"Hank Aaron\".", + "contributors_note": { "type": "string" }, - "player_profile": { - "description": "PlayerProfile is PSA's own free-text player-biography writeup.", + "country": { "type": "string" }, - "source_url": { - "type": "string" + "headline_indices": { + "items": { + "$ref": "#/definitions/numbeo.NamedValue" + }, + "type": "array" }, - "subject_id": { + "index": { "type": "string" - } - }, - "type": "object" - }, - "psa.ProBatFactsSubjectsResponse": { - "properties": { - "category_id": { - "type": "integer" }, - "category_name": { + "last_update": { "type": "string" }, - "subjects": { + "price_categories": { "items": { - "$ref": "#/definitions/psa.ProBatFactsSubject" + "$ref": "#/definitions/numbeo.PriceCategory" }, "type": "array" - } - }, - "type": "object" - }, - "psa.TicketFactsCategoriesResponse": { - "properties": { - "categories": { + }, + "sections": { "items": { - "$ref": "#/definitions/psa.TicketFactsCategory" + "$ref": "#/definitions/numbeo.IndexSection" }, "type": "array" - } - }, - "type": "object" - }, - "psa.TicketFactsCategory": { - "properties": { - "id": { - "description": "ID is PSA's own numeric category id, confirmed live against every\ncategory this family covers. Distinct from CardFacts'/Price Guide's/\nAutographFacts' own category id spaces -- do not assume they share\nvalues.", - "type": "integer" - }, - "name": { - "description": "Name is PSA's own display label, e.g. \"Super Bowl\".", - "type": "string" - } - }, - "type": "object" - }, - "psa.TicketFactsGalleryImage": { - "properties": { - "caption": { - "type": "string" }, - "image_url": { + "source_url": { "type": "string" } }, "type": "object" }, - "psa.TicketFactsGalleryResult": { + "numbeo.IndicesCountryResponse": { "properties": { - "images": { + "cities": { "items": { - "$ref": "#/definitions/psa.TicketFactsGalleryImage" + "$ref": "#/definitions/numbeo.IndexRankingEntry" }, "type": "array" }, - "name": { + "contributors_note": { "type": "string" }, - "source_url": { + "country": { "type": "string" }, - "subject_id": { + "headline_indices": { + "items": { + "$ref": "#/definitions/numbeo.NamedValue" + }, + "type": "array" + }, + "index": { + "type": "string" + }, + "last_update": { + "type": "string" + }, + "price_categories": { + "items": { + "$ref": "#/definitions/numbeo.PriceCategory" + }, + "type": "array" + }, + "sections": { + "items": { + "$ref": "#/definitions/numbeo.IndexSection" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "psa.TicketFactsSubject": { + "numbeo.IndicesRankingsByCountryResponse": { "properties": { - "name": { - "description": "Name is the event's display name, e.g. \"Super Bowl I\".", + "countries": { + "description": "Countries ranked for this index family, in rank order.", + "items": { + "$ref": "#/definitions/numbeo.IndexRankingEntry" + }, + "type": "array" + }, + "index": { + "description": "Index family that was requested, such as `crime` or `traffic`.", "type": "string" }, - "subject_id": { - "description": "SubjectID is PSA's own numeric subject id -- pass as subject_id to\nTicketFactsSubject.", - "type": "integer" + "source_url": { + "description": "URL the data was read from.", + "type": "string" } }, "type": "object" }, - "psa.TicketFactsSubjectResult": { + "numbeo.IndicesRankingsResponse": { "properties": { - "name": { - "description": "Name is the event's display name, e.g. \"Super Bowl I\".", + "cities": { + "items": { + "$ref": "#/definitions/numbeo.IndexRankingEntry" + }, + "type": "array" + }, + "index": { "type": "string" }, - "source_url": { + "period": { "type": "string" }, - "subject_id": { + "scope": { "type": "string" }, - "ticket_profile": { - "description": "TicketProfile is PSA's own free-text historical writeup for this\nevent.", + "source_url": { "type": "string" } }, "type": "object" }, - "psa.TicketFactsSubjectsResponse": { + "numbeo.NamedValue": { "properties": { - "category_id": { - "type": "integer" + "name": { + "description": "Name of the index, as Numbeo labels it, such as `Crime Index`.", + "type": "string" }, - "category_name": { + "value": { + "description": "Value of the index named in `name`.", + "type": "number" + } + }, + "type": "object" + }, + "numbeo.PriceCategory": { + "properties": { + "category": { + "description": "Numbeo section name, such as Restaurants, Markets or Rent Per Month.", "type": "string" }, - "subjects": { + "items": { + "description": "Priced goods and services listed under this category.", "items": { - "$ref": "#/definitions/psa.TicketFactsSubject" + "$ref": "#/definitions/numbeo.PriceItem" }, "type": "array" } }, "type": "object" }, - "psa.autographFactsCategoriesResponseDoc": { + "numbeo.PriceItem": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/psa.AutographFactsCategoriesResponse" + "currency_symbol": { + "description": "Currency symbol Numbeo shows for the city's local currency, such as `$` or `€`.", + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "description": "Name of the good or service, such as a meal at an inexpensive restaurant.", "type": "string" + }, + "price": { + "description": "Price of the item in the city's local currency, as shown on Numbeo.", + "type": "number" + }, + "range_high": { + "description": "High end of the price range Numbeo reports for the item.", + "type": "number" + }, + "range_low": { + "description": "Low end of the price range Numbeo reports for the item.", + "type": "number" } }, "type": "object" }, - "psa.autographFactsGalleryResponseDoc": { + "numbeo.RankingsByCountryResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/psa.AutographFactsGalleryResult" + "countries": { + "description": "Countries in Numbeo's cost-of-living ranking, in rank order.", + "items": { + "$ref": "#/definitions/numbeo.CountryIndexEntry" + }, + "type": "array" }, - "msg": { - "example": "OK", + "source_url": { + "description": "URL the data was read from.", "type": "string" } }, "type": "object" }, - "psa.autographFactsSubjectResponseDoc": { + "numbeo.RankingsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "cities": { + "items": { + "$ref": "#/definitions/numbeo.CityIndexEntry" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/psa.AutographFactsSubjectResult" + "period": { + "type": "string" }, - "msg": { - "example": "OK", + "scope": { + "type": "string" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "psa.autographFactsSubjectsResponseDoc": { + "numbeo.costOfLivingCityResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/psa.AutographFactsSubjectsResponse" + "$ref": "#/definitions/numbeo.CostOfLivingCityResponse" }, "msg": { "example": "OK", @@ -169678,14 +174345,14 @@ }, "type": "object" }, - "psa.cardFactsCategoriesResponseDoc": { + "numbeo.costOfLivingCountryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/psa.CardFactsCategoriesResponse" + "$ref": "#/definitions/numbeo.CostOfLivingCountryResponse" }, "msg": { "example": "OK", @@ -169694,14 +174361,14 @@ }, "type": "object" }, - "psa.cardFactsChecklistResponseDoc": { + "numbeo.indicesCityResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/psa.CardFactsChecklistResponse" + "$ref": "#/definitions/numbeo.IndicesCityResponse" }, "msg": { "example": "OK", @@ -169710,14 +174377,14 @@ }, "type": "object" }, - "psa.cardFactsSetsResponseDoc": { + "numbeo.indicesCountryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/psa.CardFactsSetsResponse" + "$ref": "#/definitions/numbeo.IndicesCountryResponse" }, "msg": { "example": "OK", @@ -169726,14 +174393,14 @@ }, "type": "object" }, - "psa.certLookupResponseDoc": { + "numbeo.indicesRankingsByCountryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/psa.CertLookupResult" + "$ref": "#/definitions/numbeo.IndicesRankingsByCountryResponse" }, "msg": { "example": "OK", @@ -169742,14 +174409,14 @@ }, "type": "object" }, - "psa.priceGuideCategoriesResponseDoc": { + "numbeo.indicesRankingsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/psa.PriceGuideCategoriesResponse" + "$ref": "#/definitions/numbeo.IndicesRankingsResponse" }, "msg": { "example": "OK", @@ -169758,14 +174425,14 @@ }, "type": "object" }, - "psa.priceGuideSearchResponseDoc": { + "numbeo.rankingsByCountryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/psa.PriceGuideSearchResponse" + "$ref": "#/definitions/numbeo.RankingsByCountryResponse" }, "msg": { "example": "OK", @@ -169774,14 +174441,14 @@ }, "type": "object" }, - "psa.priceGuideSetResponseDoc": { + "numbeo.rankingsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/psa.PriceGuideSetResponse" + "$ref": "#/definitions/numbeo.RankingsResponse" }, "msg": { "example": "OK", @@ -169790,2586 +174457,5751 @@ }, "type": "object" }, - "psa.priceGuideSetsResponseDoc": { + "nydailynews.AuthorArticle": { "properties": { - "code": { - "example": 200, - "type": "integer" + "published_at": { + "type": "string" }, - "data": { - "$ref": "#/definitions/psa.PriceGuideSetsResponse" + "summary": { + "type": "string" }, - "msg": { - "example": "OK", + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "psa.probatFactsCategoriesResponseDoc": { + "nydailynews.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/nydailynews.AuthorArticle" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/psa.ProBatFactsCategoriesResponse" + "bio": { + "type": "string" }, - "msg": { - "example": "OK", + "email": { "type": "string" - } - }, - "type": "object" - }, - "psa.probatFactsGalleryResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/psa.ProBatFactsGalleryResult" + "job_title": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { "type": "string" - } - }, - "type": "object" - }, - "psa.probatFactsSubjectResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/psa.ProBatFactsSubjectResult" + "slug": { + "type": "string" }, - "msg": { - "example": "OK", + "twitter": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "psa.probatFactsSubjectsResponseDoc": { + "nymag.AuthorArticle": { "properties": { - "code": { - "example": 200, - "type": "integer" + "excerpt": { + "type": "string" }, - "data": { - "$ref": "#/definitions/psa.ProBatFactsSubjectsResponse" + "published_at": { + "type": "string" }, - "msg": { - "example": "OK", + "section": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "psa.ticketFactsCategoriesResponseDoc": { + "nymag.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/nymag.AuthorArticle" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/psa.TicketFactsCategoriesResponse" + "bio": { + "type": "string" }, - "msg": { - "example": "OK", + "job_title": { + "type": "string" + }, + "name": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "psa.ticketFactsGalleryResponseDoc": { + "nypost.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/psa.TicketFactsGalleryResult" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "social_links": { + "items": { + "$ref": "#/definitions/nypost.AuthorSocialLink" + }, + "type": "array" + }, + "url": { "type": "string" } }, "type": "object" }, - "psa.ticketFactsSubjectResponseDoc": { + "nypost.AuthorSocialLink": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/psa.TicketFactsSubjectResult" + "type": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "psa.ticketFactsSubjectsResponseDoc": { + "nyt.ArticleResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/psa.TicketFactsSubjectsResponse" + "description": { + "type": "string" }, - "msg": { - "example": "OK", + "image_url": { + "type": "string" + }, + "keywords": { + "items": { + "type": "string" + }, + "type": "array" + }, + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "published_at": { + "type": "string" + }, + "section": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "publicnews.abcNewsAuthorResponseDoc": { + "nyt.AuthorAboutSection": { "properties": { - "data": { - "$ref": "#/definitions/abcnews.AuthorResponse" + "heading": { + "type": "string" + }, + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "publicnews.abcauAuthorResponseDoc": { + "nyt.AuthorArticle": { "properties": { - "data": { - "$ref": "#/definitions/abcau.AuthorResponse" + "authors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "description": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "publicnews.androidpoliceAuthorResponseDoc": { + "nyt.AuthorContactItem": { "properties": { - "data": { - "$ref": "#/definitions/androidpolice.AuthorResponse" + "label": { + "type": "string" + }, + "url": { + "type": "string" + }, + "value": { + "type": "string" } }, "type": "object" }, - "publicnews.apNewsAuthorResponseDoc": { + "nyt.AuthorResponse": { "properties": { - "data": { - "$ref": "#/definitions/apnews.AuthorResponse" + "about": { + "items": { + "$ref": "#/definitions/nyt.AuthorAboutSection" + }, + "type": "array" + }, + "articles": { + "items": { + "$ref": "#/definitions/nyt.AuthorArticle" + }, + "type": "array" + }, + "contact": { + "items": { + "$ref": "#/definitions/nyt.AuthorContactItem" + }, + "type": "array" + }, + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "tagline": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "publicnews.arstechnicaAuthorResponseDoc": { + "nyt.CategoriesResponse": { "properties": { - "data": { - "$ref": "#/definitions/arstechnica.AuthorResponse" + "categories": { + "items": { + "$ref": "#/definitions/nyt.Category" + }, + "type": "array" } }, "type": "object" }, - "publicnews.articleResponseDoc": { + "nyt.Category": { "properties": { - "data": { - "$ref": "#/definitions/newsplatform.ArticleResponse" + "name": { + "type": "string" + }, + "sections": { + "items": { + "$ref": "#/definitions/nyt.CategoryLink" + }, + "type": "array" + }, + "slug": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "publicnews.benzingaSearchResponseDoc": { + "nyt.CategoryLink": { "properties": { - "data": { - "properties": { - "items": { - "items": { - "properties": { - "author": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "published_at": { - "type": "string" - }, - "summary": { - "type": "string" - }, - "tickers": { - "items": { - "type": "string" - }, - "type": "array" - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "query": { - "type": "string" - } - }, - "type": "object" + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "publicnews.billboardAuthorResponseDoc": { + "nyt.HeadlineItem": { "properties": { - "data": { - "$ref": "#/definitions/billboard.AuthorResponse" + "author": { + "type": "string" + }, + "description": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "publicnews.bleacherreportAuthorResponseDoc": { + "nyt.HeadlinesResponse": { "properties": { - "data": { - "$ref": "#/definitions/bleacherreport.AuthorResponse" + "items": { + "items": { + "$ref": "#/definitions/nyt.HeadlineItem" + }, + "type": "array" + }, + "section": { + "type": "string" } }, "type": "object" }, - "publicnews.breitbartAuthorResponseDoc": { + "nyt.Section": { "properties": { - "data": { - "$ref": "#/definitions/breitbart.AuthorResponse" + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "publicnews.brisbanetimesArticleResponseDoc": { + "nyt.SectionsResponse": { "properties": { - "data": { - "$ref": "#/definitions/brisbanetimes.ArticleResponse" + "sections": { + "items": { + "$ref": "#/definitions/nyt.Section" + }, + "type": "array" } }, "type": "object" }, - "publicnews.brisbanetimesAuthorResponseDoc": { + "nyt.articleResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/brisbanetimes.AuthorResponse" + "$ref": "#/definitions/nyt.ArticleResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.businessInsiderAuthorResponseDoc": { + "nyt.authorResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/businessinsider.AuthorResponse" + "$ref": "#/definitions/nyt.AuthorResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.businessstandardAuthorResponseDoc": { + "nyt.categoriesResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/businessstandard.AuthorResponse" + "$ref": "#/definitions/nyt.CategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.cbcAuthorResponseDoc": { + "nyt.headlinesResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/cbc.AuthorResponse" + "$ref": "#/definitions/nyt.HeadlinesResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.cbrAuthorResponseDoc": { + "nyt.sectionsResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/cbr.AuthorResponse" + "$ref": "#/definitions/nyt.SectionsResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.cbsNewsAuthorResponseDoc": { + "nzherald.AuthorResponse": { "properties": { - "data": { - "$ref": "#/definitions/cbsnews.AuthorResponse" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" + }, + "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "email": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "job_title": { + "type": "string" + }, + "location": { + "type": "string" + }, + "name": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "publicnews.cbsSportsAuthorResponseDoc": { + "oldnavy.AvailabilityResponse": { "properties": { - "data": { - "$ref": "#/definitions/cbssports.AuthorResponse" + "brand": { + "type": "string" + }, + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "pid": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "stores": { + "items": { + "$ref": "#/definitions/oldnavy.StoreStockSummary" + }, + "type": "array" + }, + "style_id": { + "type": "string" } }, "type": "object" }, - "publicnews.chicagoTribuneAuthorResponseDoc": { + "oldnavy.CategoriesResponse": { "properties": { - "data": { - "$ref": "#/definitions/chicagotribune.AuthorResponse" + "brand": { + "type": "string" + }, + "categories": { + "items": { + "$ref": "#/definitions/oldnavy.CategoryNavEntry" + }, + "type": "array" + }, + "cid": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.cnaAuthorResponseDoc": { + "oldnavy.CategoryColorSummary": { "properties": { - "data": { - "$ref": "#/definitions/cna.AuthorResponse" + "back_order_inventory_count": { + "type": "integer" + }, + "back_order_inventory_status": { + "type": "string" + }, + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "inventory_count": { + "type": "integer" + }, + "inventory_status": { + "type": "string" + }, + "name": { + "type": "string" + }, + "percentage_off": { + "type": "integer" + }, + "price": { + "type": "number" + }, + "regular_price": { + "type": "number" + }, + "short_description": { + "type": "string" } }, "type": "object" }, - "publicnews.cnetAuthorResponseDoc": { + "oldnavy.CategoryGroup": { "properties": { - "data": { - "$ref": "#/definitions/cnet.AuthorResponse" + "category_id": { + "type": "string" + }, + "category_name": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/oldnavy.CategoryGroupItem" + }, + "type": "array" + }, + "sub_category_id": { + "type": "string" + }, + "sub_category_name": { + "type": "string" } }, "type": "object" }, - "publicnews.colliderAuthorResponseDoc": { + "oldnavy.CategoryGroupItem": { "properties": { - "data": { - "$ref": "#/definitions/collider.AuthorResponse" + "cc_id": { + "type": "string" + }, + "style_id": { + "type": "string" } }, "type": "object" }, - "publicnews.ctvnewsAuthorResponseDoc": { + "oldnavy.CategoryNavEntry": { "properties": { - "data": { - "$ref": "#/definitions/ctvnews.AuthorResponse" + "cid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "publicnews.dailyBeastAuthorResponseDoc": { + "oldnavy.CategoryProductSummary": { "properties": { - "data": { - "$ref": "#/definitions/thedailybeast.AuthorResponse" + "colors": { + "items": { + "$ref": "#/definitions/oldnavy.CategoryColorSummary" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "review_count": { + "type": "integer" + }, + "review_score": { + "type": "number" + }, + "url": { + "type": "string" + }, + "web_product_type": { + "type": "string" } }, "type": "object" }, - "publicnews.dailyExpressAuthorResponseDoc": { + "oldnavy.CategoryResponse": { "properties": { - "data": { - "$ref": "#/definitions/dailyexpress.AuthorResponse" + "brand": { + "type": "string" + }, + "categories": { + "items": { + "$ref": "#/definitions/oldnavy.CategoryGroup" + }, + "type": "array" + }, + "category_id": { + "type": "string" + }, + "count": { + "type": "integer" + }, + "facets": { + "items": { + "$ref": "#/definitions/oldnavy.Facet" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "products": { + "items": { + "$ref": "#/definitions/oldnavy.CategoryProductSummary" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "total_colors": { + "type": "integer" + }, + "total_pages": { + "type": "integer" } }, "type": "object" }, - "publicnews.dailyMailAuthorResponseDoc": { + "oldnavy.ColorSummary": { "properties": { - "data": { - "$ref": "#/definitions/dailymail.AuthorResponse" + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "percentage_off": { + "type": "integer" + }, + "price": { + "type": "number" + }, + "regular_price": { + "type": "number" + }, + "short_description": { + "type": "string" } }, "type": "object" }, - "publicnews.dailyRecordAuthorResponseDoc": { + "oldnavy.Facet": { "properties": { - "data": { - "$ref": "#/definitions/dailyrecord.AuthorResponse" + "is_range": { + "type": "boolean" + }, + "label": { + "type": "string" + }, + "name": { + "type": "string" + }, + "options": { + "items": { + "$ref": "#/definitions/oldnavy.FacetOption" + }, + "type": "array" + }, + "range_max": { + "type": "number" + }, + "range_min": { + "type": "number" + }, + "type": { + "type": "string" } }, "type": "object" }, - "publicnews.dailyWireAuthorResponseDoc": { + "oldnavy.FacetOption": { "properties": { - "data": { - "$ref": "#/definitions/dailywire.AuthorResponse" + "count": { + "type": "integer" + }, + "label": { + "type": "string" + }, + "value": { + "type": "string" } }, "type": "object" }, - "publicnews.dailycallerAuthorResponseDoc": { + "oldnavy.ProductDetailResponse": { "properties": { - "data": { - "$ref": "#/definitions/dailycaller.AuthorResponse" + "brand": { + "type": "string" + }, + "color": { + "type": "string" + }, + "description": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "offers": { + "items": { + "$ref": "#/definitions/oldnavy.ProductOffer" + }, + "type": "array" + }, + "pid": { + "type": "string" + }, + "rating_count": { + "type": "integer" + }, + "rating_value": { + "type": "number" + }, + "related_items": { + "items": { + "$ref": "#/definitions/oldnavy.RelatedItem" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "publicnews.dawnAuthorResponseDoc": { + "oldnavy.ProductOffer": { "properties": { - "data": { - "$ref": "#/definitions/dawn.AuthorResponse" + "availability": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "price": { + "type": "number" + }, + "sku": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "publicnews.deadlineAuthorResponseDoc": { + "oldnavy.ProductReviewsResponse": { "properties": { - "data": { - "$ref": "#/definitions/deadline.AuthorResponse" + "average_rating": { + "type": "number" + }, + "brand": { + "type": "string" + }, + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "pid": { + "type": "string" + }, + "rating_count": { + "type": "integer" + }, + "rating_histogram": { + "description": "RatingHistogram is the count of ratings per star, ascending: index 0\nis 1-star, index 4 is 5-star.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "recommended_ratio": { + "type": "number" + }, + "reviews": { + "items": { + "$ref": "#/definitions/oldnavy.Review" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_reviews": { + "type": "integer" } }, "type": "object" }, - "publicnews.denverPostAuthorResponseDoc": { + "oldnavy.ProductSummary": { "properties": { - "data": { - "$ref": "#/definitions/denverpost.AuthorResponse" + "colors": { + "items": { + "$ref": "#/definitions/oldnavy.ColorSummary" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "price_max": { + "type": "number" + }, + "price_min": { + "type": "number" + }, + "review_count": { + "type": "integer" + }, + "review_score": { + "type": "number" + }, + "sale_price_max": { + "type": "number" + }, + "sale_price_min": { + "type": "number" + }, + "thumbnail_url": { + "type": "string" + }, + "url": { + "type": "string" + }, + "web_product_type": { + "type": "string" } }, "type": "object" }, - "publicnews.dwAuthorResponseDoc": { + "oldnavy.RelatedItem": { "properties": { - "data": { - "$ref": "#/definitions/dw.AuthorResponse" + "name": { + "type": "string" + }, + "pid": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "publicnews.economicTimesAuthorResponseDoc": { + "oldnavy.Review": { "properties": { - "data": { - "$ref": "#/definitions/economictimes.AuthorResponse" + "author": { + "type": "string" + }, + "body": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "headline": { + "type": "string" + }, + "helpful_votes": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "location": { + "type": "string" + }, + "not_helpful_votes": { + "type": "integer" + }, + "rating": { + "type": "integer" + }, + "updated_at": { + "type": "string" + }, + "verified_purchase": { + "type": "boolean" } }, "type": "object" }, - "publicnews.engadgetAuthorResponseDoc": { + "oldnavy.SearchResponse": { "properties": { - "data": { - "$ref": "#/definitions/engadget.AuthorResponse" + "brand": { + "type": "string" + }, + "count": { + "type": "integer" + }, + "facets": { + "items": { + "$ref": "#/definitions/oldnavy.Facet" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "keyword": { + "type": "string" + }, + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "products": { + "items": { + "$ref": "#/definitions/oldnavy.ProductSummary" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_products": { + "type": "integer" } }, "type": "object" }, - "publicnews.eonlineAuthorResponseDoc": { + "oldnavy.SizeStock": { "properties": { - "data": { - "$ref": "#/definitions/eonline.AuthorResponse" + "fit": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "status": { + "type": "string" } }, "type": "object" }, - "publicnews.euronewsAuthorResponseDoc": { + "oldnavy.Store": { "properties": { - "data": { - "$ref": "#/definitions/euronews.AuthorResponse" + "address": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "distance_miles": { + "type": "number" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "name": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "region": { + "type": "string" + }, + "specialties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { + "type": "string" } }, "type": "object" }, - "publicnews.ewAuthorResponseDoc": { + "oldnavy.StoreResponse": { "properties": { - "data": { - "$ref": "#/definitions/ew.AuthorResponse" + "brand": { + "type": "string" + }, + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "lat": { + "type": "number" + }, + "lng": { + "type": "number" + }, + "search": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "stores": { + "items": { + "$ref": "#/definitions/oldnavy.Store" + }, + "type": "array" } }, "type": "object" }, - "publicnews.expresstribuneAuthorResponseDoc": { + "oldnavy.StoreStockSummary": { "properties": { - "data": { - "$ref": "#/definitions/expresstribune.AuthorResponse" + "address": { + "type": "string" + }, + "city": { + "type": "string" + }, + "distance_miles": { + "type": "number" + }, + "name": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "region": { + "type": "string" + }, + "sizes": { + "items": { + "$ref": "#/definitions/oldnavy.SizeStock" + }, + "type": "array" + }, + "store_id": { + "type": "string" } }, "type": "object" }, - "publicnews.fastCompanyAuthorResponseDoc": { + "oldnavy.availabilityResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/fastcompany.AuthorResponse" + "$ref": "#/definitions/oldnavy.AvailabilityResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.fortuneAuthorResponseDoc": { + "oldnavy.categoriesResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/fortune.AuthorResponse" + "$ref": "#/definitions/oldnavy.CategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.fortuneCompaniesResponseDoc": { + "oldnavy.categoryResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/fortune.CompaniesResponse" + "$ref": "#/definitions/oldnavy.CategoryResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.fortuneCompanyFiltersResponseDoc": { + "oldnavy.productResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/fortune.CompanyFiltersResponse" + "$ref": "#/definitions/oldnavy.ProductDetailResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.fortuneCompanyResponseDoc": { + "oldnavy.productReviewsResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/fortune.CompanyResponse" + "$ref": "#/definitions/oldnavy.ProductReviewsResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.fortuneRankingFiltersResponseDoc": { + "oldnavy.searchResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/fortune.RankingFiltersResponse" + "$ref": "#/definitions/oldnavy.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.fortuneRankingListsResponseDoc": { + "oldnavy.storesResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/fortune.RankingListsResponse" + "$ref": "#/definitions/oldnavy.StoreResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.fortuneRankingResponseDoc": { + "opendota.AbilitiesResponse": { "properties": { - "data": { - "$ref": "#/definitions/fortune.RankingResponse" + "abilities": { + "items": { + "$ref": "#/definitions/opendota.AbilitySummary" + }, + "type": "array" + }, + "count": { + "example": 50, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "total": { + "example": 2804, + "type": "integer" } }, "type": "object" }, - "publicnews.fortuneRankingYearsResponseDoc": { + "opendota.AbilitySummary": { "properties": { - "data": { - "$ref": "#/definitions/fortune.RankingYearsResponse" + "behavior": { + "items": { + "type": "string" + }, + "type": "array" + }, + "bkb_pierce": { + "example": "Yes", + "type": "string" + }, + "cooldown": { + "example": "15 12 9 6", + "type": "string" + }, + "damage_type": { + "example": "Magical", + "type": "string" + }, + "description": { + "type": "string" + }, + "dispellable": { + "example": "No", + "type": "string" + }, + "innate": { + "example": false, + "type": "boolean" + }, + "key": { + "example": "antimage_blink", + "type": "string" + }, + "mana_cost": { + "example": "60 70 80 90", + "type": "string" + }, + "name": { + "example": "Blink", + "type": "string" + }, + "target_team": { + "example": "Enemy", + "type": "string" + }, + "target_type": { + "example": "Hero", + "type": "string" } }, "type": "object" }, - "publicnews.france24AuthorResponseDoc": { + "opendota.AghanimUpgrade": { "properties": { - "data": { - "$ref": "#/definitions/france24.AuthorResponse" + "available": { + "example": true, + "type": "boolean" + }, + "description": { + "type": "string" + }, + "new_skill": { + "example": false, + "type": "boolean" + }, + "skill_name": { + "example": "Blink", + "type": "string" } }, "type": "object" }, - "publicnews.gamerantAuthorResponseDoc": { + "opendota.Benchmark": { "properties": { - "data": { - "$ref": "#/definitions/gamerant.AuthorResponse" + "metric": { + "example": "gold_per_min", + "type": "string" + }, + "points": { + "items": { + "$ref": "#/definitions/opendota.BenchmarkPoint" + }, + "type": "array" } }, "type": "object" }, - "publicnews.gamesradarAuthorResponseDoc": { + "opendota.BenchmarkPoint": { "properties": { - "data": { - "$ref": "#/definitions/gamesradar.AuthorResponse" + "percentile": { + "example": 0.5, + "type": "number" + }, + "value": { + "example": 545.5, + "type": "number" } }, "type": "object" }, - "publicnews.gbnewsAuthorResponseDoc": { + "opendota.BenchmarksResponse": { "properties": { - "data": { - "$ref": "#/definitions/gbnews.AuthorResponse" + "benchmarks": { + "items": { + "$ref": "#/definitions/opendota.Benchmark" + }, + "type": "array" + }, + "bracket": { + "example": 4, + "type": "integer" + }, + "bracket_name": { + "example": "Archon", + "type": "string" + }, + "count": { + "example": 10, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "hero_id": { + "example": 1, + "type": "integer" + }, + "hero_name": { + "example": "Anti-Mage", + "type": "string" + }, + "role": { + "enum": [ + "core", + "support" + ], + "example": "core", + "type": "string" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.ghanawebArchiveMonthsResponseDoc": { + "opendota.ConstantEntry": { "properties": { - "data": { - "$ref": "#/definitions/ghanaweb.ArchiveMonthsResponse" + "balanced": { + "example": true, + "type": "boolean" + }, + "date": { + "example": "2024-08-14T00:00:00Z", + "type": "string" + }, + "id": { + "example": "2", + "type": "string" + }, + "name": { + "example": "game_mode_captains_mode", + "type": "string" + }, + "text": { + "example": "Careful!", + "type": "string" + }, + "value": { + "example": 240, + "type": "integer" } }, "type": "object" }, - "publicnews.ghanawebArchiveResponseDoc": { + "opendota.ConstantsResponse": { "properties": { - "data": { - "$ref": "#/definitions/ghanaweb.ArchiveResponse" + "count": { + "example": 26, + "type": "integer" + }, + "entries": { + "items": { + "$ref": "#/definitions/opendota.ConstantEntry" + }, + "type": "array" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "resource": { + "example": "game_mode", + "type": "string" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.ghanawebVideoResponseDoc": { + "opendota.DistributionsResponse": { "properties": { - "data": { - "$ref": "#/definitions/ghanaweb.VideoResponse" + "count": { + "example": 36, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "ranks": { + "items": { + "$ref": "#/definitions/opendota.RankTierRow" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "total_players": { + "example": 8745631, + "type": "integer" } }, "type": "object" }, - "publicnews.ghanawebVideoSectionsResponseDoc": { + "opendota.DurationBin": { "properties": { - "data": { - "$ref": "#/definitions/ghanaweb.VideoSectionsResponse" + "games": { + "example": 2400, + "type": "integer" + }, + "start_minute": { + "example": 20, + "type": "integer" + }, + "win_rate_percent": { + "example": 54.17, + "type": "number" + }, + "wins": { + "example": 1300, + "type": "integer" } }, "type": "object" }, - "publicnews.ghanawebVideosResponseDoc": { + "opendota.FindMatchRow": { "properties": { - "data": { - "$ref": "#/definitions/ghanaweb.VideosResponse" + "dire": { + "items": { + "$ref": "#/definitions/opendota.PickedHero" + }, + "type": "array" + }, + "match_id": { + "example": 9066484102, + "type": "integer" + }, + "radiant": { + "items": { + "$ref": "#/definitions/opendota.PickedHero" + }, + "type": "array" + }, + "radiant_win": { + "example": true, + "type": "boolean" + }, + "start_time": { + "example": "2026-10-29T00:37:42Z", + "type": "string" + }, + "team_a_side": { + "enum": [ + "radiant", + "dire" + ], + "example": "dire", + "type": "string" + }, + "team_a_win": { + "example": false, + "type": "boolean" } }, "type": "object" }, - "publicnews.gizmodoAuthorResponseDoc": { + "opendota.FindMatchesResponse": { "properties": { - "data": { - "$ref": "#/definitions/gizmodo.AuthorResponse" + "count": { + "example": 20, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "matches": { + "items": { + "$ref": "#/definitions/opendota.FindMatchRow" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "team_a_hero_ids": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "team_b_hero_ids": { + "items": { + "type": "integer" + }, + "type": "array" } }, "type": "object" }, - "publicnews.globalnewsAuthorResponseDoc": { + "opendota.Hero": { "properties": { - "data": { - "$ref": "#/definitions/globalnews.AuthorResponse" + "attack_type": { + "enum": [ + "Melee", + "Ranged" + ], + "example": "Melee", + "type": "string" + }, + "id": { + "example": 93, + "type": "integer" + }, + "localized_name": { + "example": "Slark", + "type": "string" + }, + "name": { + "example": "npc_dota_hero_slark", + "type": "string" + }, + "primary_attr": { + "enum": [ + "agi", + "all", + "int", + "str" + ], + "example": "agi", + "type": "string" } }, "type": "object" }, - "publicnews.gqAuthorResponseDoc": { + "opendota.HeroDescription": { "properties": { - "data": { - "$ref": "#/definitions/gq.AuthorResponse" + "hero_id": { + "example": 1, + "type": "integer" + }, + "key": { + "example": "antimage", + "type": "string" + }, + "lore": { + "type": "string" + }, + "name": { + "example": "npc_dota_hero_antimage", + "type": "string" + }, + "scepter": { + "$ref": "#/definitions/opendota.AghanimUpgrade" + }, + "shard": { + "$ref": "#/definitions/opendota.AghanimUpgrade" } }, "type": "object" }, - "publicnews.gulfNewsAuthorResponseDoc": { + "opendota.HeroDescriptionsResponse": { "properties": { - "data": { - "$ref": "#/definitions/gulfnews.AuthorResponse" + "count": { + "example": 127, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "hero_id": { + "example": 1, + "type": "integer" + }, + "heroes": { + "items": { + "$ref": "#/definitions/opendota.HeroDescription" + }, + "type": "array" + }, + "include_lore": { + "example": false, + "type": "boolean" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.headlinesResponseDoc": { + "opendota.HeroDurationsResponse": { "properties": { - "data": { - "$ref": "#/definitions/newsplatform.HeadlinesResponse" + "bins": { + "items": { + "$ref": "#/definitions/opendota.DurationBin" + }, + "type": "array" + }, + "count": { + "example": 23, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "hero_id": { + "example": 1, + "type": "integer" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.hindustanTimesAuthorResponseDoc": { + "opendota.HeroItemsResponse": { "properties": { - "data": { - "$ref": "#/definitions/hindustantimes.AuthorResponse" + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "hero_id": { + "example": 1, + "type": "integer" + }, + "phases": { + "items": { + "$ref": "#/definitions/opendota.ItemPhase" + }, + "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.hollywoodReporterAuthorResponseDoc": { + "opendota.HeroMatchRow": { "properties": { - "data": { - "$ref": "#/definitions/hollywoodreporter.AuthorResponse" + "assists": { + "example": 5, + "type": "integer" + }, + "deaths": { + "example": 9, + "type": "integer" + }, + "duration_seconds": { + "example": 2767, + "type": "integer" + }, + "kills": { + "example": 5, + "type": "integer" + }, + "league_id": { + "example": 20395, + "type": "integer" + }, + "league_name": { + "example": "PARI UNIVERSE by FISSURE", + "type": "string" + }, + "match_id": { + "example": 9066084051, + "type": "integer" + }, + "played_radiant": { + "example": false, + "type": "boolean" + }, + "start_time": { + "example": "2026-10-28T16:08:19Z", + "type": "string" + }, + "won": { + "example": false, + "type": "boolean" } }, "type": "object" }, - "publicnews.houstonChronicleAuthorResponseDoc": { + "opendota.HeroMatchesResponse": { "properties": { - "data": { - "$ref": "#/definitions/houstonchronicle.AuthorResponse" + "count": { + "example": 100, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "hero_id": { + "example": 1, + "type": "integer" + }, + "localized_name": { + "example": "Anti-Mage", + "type": "string" + }, + "matches": { + "items": { + "$ref": "#/definitions/opendota.HeroMatchRow" + }, + "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.huffPostAuthorResponseDoc": { + "opendota.HeroMatchupsResponse": { "properties": { - "data": { - "$ref": "#/definitions/huffpost.AuthorResponse" + "count": { + "example": 126, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "hero_id": { + "example": 1, + "type": "integer" + }, + "matchups": { + "items": { + "$ref": "#/definitions/opendota.HeroRecord" + }, + "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.ignAuthorResponseDoc": { + "opendota.HeroRecord": { "properties": { - "data": { - "$ref": "#/definitions/ign.AuthorResponse" + "games": { + "example": 82, + "type": "integer" + }, + "hero_id": { + "example": 17, + "type": "integer" + }, + "localized_name": { + "example": "Storm Spirit", + "type": "string" + }, + "win_rate_percent": { + "example": 50, + "type": "number" + }, + "wins": { + "example": 41, + "type": "integer" } }, "type": "object" }, - "publicnews.independentAuthorResponseDoc": { + "opendota.HeroStat": { "properties": { - "data": { - "$ref": "#/definitions/independent.AuthorResponse" + "attack_range": { + "example": 150, + "type": "integer" + }, + "attack_type": { + "enum": [ + "Melee", + "Ranged" + ], + "example": "Melee", + "type": "string" + }, + "base_armor": { + "example": 2, + "type": "number" + }, + "base_attack_max": { + "example": 33, + "type": "integer" + }, + "base_attack_min": { + "example": 29, + "type": "integer" + }, + "base_health": { + "example": 120, + "type": "integer" + }, + "base_mana": { + "example": 75, + "type": "integer" + }, + "id": { + "example": 1, + "type": "integer" + }, + "localized_name": { + "example": "Anti-Mage", + "type": "string" + }, + "move_speed": { + "example": 310, + "type": "integer" + }, + "name": { + "example": "npc_dota_hero_antimage", + "type": "string" + }, + "primary_attr": { + "enum": [ + "agi", + "all", + "int", + "str" + ], + "example": "agi", + "type": "string" + }, + "pro": { + "$ref": "#/definitions/opendota.PickWin" + }, + "public": { + "$ref": "#/definitions/opendota.PickWin" + }, + "rank_brackets": { + "items": { + "$ref": "#/definitions/opendota.RankBracket" + }, + "type": "array" + }, + "roles": { + "example": [ + "Carry" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "turbo": { + "$ref": "#/definitions/opendota.PickWin" } }, "type": "object" }, - "publicnews.indiaTodayAuthorResponseDoc": { + "opendota.HeroStatsResponse": { "properties": { - "data": { - "$ref": "#/definitions/indiatoday.AuthorResponse" + "count": { + "example": 127, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "heroes": { + "items": { + "$ref": "#/definitions/opendota.HeroStat" + }, + "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.indianExpressAuthorResponseDoc": { + "opendota.HeroesResponse": { "properties": { - "data": { - "$ref": "#/definitions/indianexpress.AuthorResponse" + "count": { + "example": 127, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "heroes": { + "items": { + "$ref": "#/definitions/opendota.Hero" + }, + "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.indiewireAuthorResponseDoc": { + "opendota.ItemAbility": { "properties": { - "data": { - "$ref": "#/definitions/indiewire.AuthorResponse" + "description": { + "type": "string" + }, + "title": { + "example": "Blink", + "type": "string" + }, + "type": { + "example": "active", + "type": "string" } }, "type": "object" }, - "publicnews.inewsAuthorResponseDoc": { + "opendota.ItemAttribute": { "properties": { - "data": { - "$ref": "#/definitions/inews.AuthorResponse" + "key": { + "example": "blink_range", + "type": "string" + }, + "value": { + "example": "1200", + "type": "string" } }, "type": "object" }, - "publicnews.inquirerAuthorResponseDoc": { + "opendota.ItemCount": { "properties": { - "data": { - "$ref": "#/definitions/inquirer.AuthorResponse" + "count": { + "example": 97, + "type": "integer" + }, + "item_id": { + "example": 63, + "type": "integer" + }, + "name": { + "example": "power_treads", + "type": "string" } }, "type": "object" }, - "publicnews.investopediaAuthorResponseDoc": { + "opendota.ItemPhase": { "properties": { - "data": { - "$ref": "#/definitions/investopedia.AuthorResponse" + "items": { + "items": { + "$ref": "#/definitions/opendota.ItemCount" + }, + "type": "array" + }, + "phase": { + "enum": [ + "start_game", + "early_game", + "mid_game", + "late_game" + ], + "example": "early_game", + "type": "string" } }, "type": "object" }, - "publicnews.iolAuthorResponseDoc": { + "opendota.ItemSummary": { "properties": { - "data": { - "$ref": "#/definitions/iol.AuthorResponse" + "abilities": { + "items": { + "$ref": "#/definitions/opendota.ItemAbility" + }, + "type": "array" + }, + "attributes": { + "items": { + "$ref": "#/definitions/opendota.ItemAttribute" + }, + "type": "array" + }, + "behavior": { + "example": "Point Target", + "type": "string" + }, + "components": { + "items": { + "type": "string" + }, + "type": "array" + }, + "cooldown": { + "example": "15", + "type": "string" + }, + "cost_gold": { + "example": 2250, + "type": "integer" + }, + "id": { + "example": 1, + "type": "integer" + }, + "key": { + "example": "blink", + "type": "string" + }, + "mana_cost": { + "example": "0", + "type": "string" + }, + "name": { + "example": "Blink Dagger", + "type": "string" + }, + "quality": { + "example": "component", + "type": "string" } }, "type": "object" }, - "publicnews.irishindependentAuthorResponseDoc": { + "opendota.ItemsResponse": { "properties": { - "data": { - "$ref": "#/definitions/irishindependent.AuthorResponse" + "count": { + "example": 50, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/opendota.ItemSummary" + }, + "type": "array" + }, + "qualities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "total": { + "example": 501, + "type": "integer" } }, "type": "object" }, - "publicnews.irishtimesAuthorResponseDoc": { + "opendota.League": { "properties": { - "data": { - "$ref": "#/definitions/irishtimes.AuthorResponse" + "banner": { + "example": "https://cdn.opendota.com/leagues/20395.png", + "type": "string" + }, + "id": { + "example": 20395, + "type": "integer" + }, + "name": { + "example": "PARI UNIVERSE by FISSURE", + "type": "string" + }, + "ticket": { + "example": "DPC2023", + "type": "string" + }, + "tier": { + "example": "professional", + "type": "string" } }, "type": "object" }, - "publicnews.japantimesAuthorResponseDoc": { + "opendota.LeagueDetailResponse": { "properties": { - "data": { - "$ref": "#/definitions/japantimes.AuthorResponse" + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "league": { + "$ref": "#/definitions/opendota.League" + }, + "source_url": { + "type": "string" + }, + "teams": { + "items": { + "$ref": "#/definitions/opendota.Team" + }, + "type": "array" } }, "type": "object" }, - "publicnews.jerusalemPostAuthorResponseDoc": { + "opendota.LeagueMatch": { "properties": { - "data": { - "$ref": "#/definitions/jerusalempost.AuthorResponse" + "dire_name": { + "example": "LEGION", + "type": "string" + }, + "dire_score": { + "example": 9, + "type": "integer" + }, + "dire_team_id": { + "example": 10291652, + "type": "integer" + }, + "duration_seconds": { + "example": 2052, + "type": "integer" + }, + "league_id": { + "example": 20395, + "type": "integer" + }, + "match_id": { + "example": 9063495955, + "type": "integer" + }, + "radiant_name": { + "example": "BETBOOM TEAM", + "type": "string" + }, + "radiant_score": { + "example": 32, + "type": "integer" + }, + "radiant_team_id": { + "example": 8255888, + "type": "integer" + }, + "radiant_win": { + "example": true, + "type": "boolean" + }, + "series_id": { + "example": 1160235, + "type": "integer" + }, + "series_type": { + "example": 3, + "type": "integer" + }, + "start_time": { + "example": "2026-10-26T20:56:07Z", + "type": "string" } }, "type": "object" }, - "publicnews.jerusalemPostAuthorsResponseDoc": { + "opendota.LeagueMatchIDsResponse": { "properties": { - "data": { - "$ref": "#/definitions/jerusalempost.AuthorsResponse" + "count": { + "example": 45, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "league_id": { + "example": 20395, + "type": "integer" + }, + "match_ids": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.khaleejTimesAuthorResponseDoc": { + "opendota.LeagueMatchesResponse": { "properties": { - "data": { - "$ref": "#/definitions/khaleejtimes.AuthorResponse" + "count": { + "example": 45, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "league_id": { + "example": 20395, + "type": "integer" + }, + "matches": { + "items": { + "$ref": "#/definitions/opendota.LeagueMatch" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "team_id": { + "example": 8255888, + "type": "integer" } }, "type": "object" }, - "publicnews.kotakuAuthorResponseDoc": { + "opendota.LeaguesResponse": { "properties": { - "data": { - "$ref": "#/definitions/kotaku.AuthorResponse" + "count": { + "example": 10411, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "leagues": { + "items": { + "$ref": "#/definitions/opendota.League" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "tier_filter": { + "example": "professional", + "type": "string" } }, "type": "object" }, - "publicnews.livemintAuthorResponseDoc": { + "opendota.LiveMatch": { "properties": { - "data": { - "$ref": "#/definitions/livemint.AuthorResponse" + "delay_seconds": { + "example": 120, + "type": "integer" + }, + "dire_name": { + "example": "Team Dire", + "type": "string" + }, + "dire_score": { + "example": 26, + "type": "integer" + }, + "game_time_seconds": { + "example": 1820, + "type": "integer" + }, + "last_update_time": { + "example": 1793055400, + "type": "integer" + }, + "league_id": { + "example": 19350, + "type": "integer" + }, + "match_id": { + "example": 9063586855, + "type": "integer" + }, + "players": { + "items": { + "$ref": "#/definitions/opendota.LivePlayer" + }, + "type": "array" + }, + "radiant_lead": { + "example": -500, + "type": "integer" + }, + "radiant_name": { + "example": "Team Radiant", + "type": "string" + }, + "radiant_score": { + "example": 31, + "type": "integer" + }, + "spectators": { + "example": 24, + "type": "integer" } }, "type": "object" }, - "publicnews.livescienceAuthorResponseDoc": { + "opendota.LiveMatchesResponse": { "properties": { - "data": { - "$ref": "#/definitions/livescience.AuthorResponse" + "count": { + "example": 1, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "matches": { + "items": { + "$ref": "#/definitions/opendota.LiveMatch" + }, + "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.macRumorsAuthorResponseDoc": { + "opendota.LivePlayer": { "properties": { - "data": { - "$ref": "#/definitions/macrumors.AuthorResponse" + "hero_id": { + "example": 93, + "type": "integer" + }, + "name": { + "example": "player-name", + "type": "string" + }, + "team_code": { + "enum": [ + 0, + 1 + ], + "example": 0, + "type": "integer" + }, + "team_slot": { + "enum": [ + 1, + 2, + 3, + 4, + 5 + ], + "example": 1, + "type": "integer" } }, "type": "object" }, - "publicnews.makeuseofAuthorResponseDoc": { + "opendota.MatchDetail": { "properties": { - "data": { - "$ref": "#/definitions/makeuseof.AuthorResponse" + "dire": { + "$ref": "#/definitions/opendota.MatchTeam" + }, + "dire_score": { + "example": 9, + "type": "integer" + }, + "duration_seconds": { + "example": 2052, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "league_id": { + "example": 20395, + "type": "integer" + }, + "league_name": { + "example": "PARI UNIVERSE by FISSURE", + "type": "string" + }, + "match_id": { + "example": 9063495955, + "type": "integer" + }, + "patch": { + "example": 59, + "type": "integer" + }, + "players": { + "items": { + "$ref": "#/definitions/opendota.MatchPlayer" + }, + "type": "array" + }, + "radiant": { + "$ref": "#/definitions/opendota.MatchTeam" + }, + "radiant_score": { + "example": 32, + "type": "integer" + }, + "radiant_win": { + "example": true, + "type": "boolean" + }, + "source_url": { + "type": "string" + }, + "start_time": { + "example": "2026-10-26T20:56:07Z", + "type": "string" } }, "type": "object" }, - "publicnews.marketWatchAuthorResponseDoc": { + "opendota.MatchPlayer": { "properties": { - "data": { - "$ref": "#/definitions/marketwatch.AuthorResponse" + "assists": { + "example": 16, + "type": "integer" + }, + "deaths": { + "example": 1, + "type": "integer" + }, + "denies": { + "example": 12, + "type": "integer" + }, + "gold_per_min": { + "example": 656, + "type": "integer" + }, + "hero_damage": { + "example": 24331, + "type": "integer" + }, + "hero_id": { + "example": 93, + "type": "integer" + }, + "is_radiant": { + "example": true, + "type": "boolean" + }, + "kills": { + "example": 5, + "type": "integer" + }, + "last_hits": { + "example": 287, + "type": "integer" + }, + "level": { + "example": 28, + "type": "integer" + }, + "name": { + "example": "player-name", + "type": "string" + }, + "net_worth": { + "example": 21553, + "type": "integer" + }, + "tower_damage": { + "example": 1234, + "type": "integer" + }, + "xp_per_min": { + "example": 781, + "type": "integer" } }, "type": "object" }, - "publicnews.mashableAuthorResponseDoc": { + "opendota.MatchTeam": { "properties": { - "data": { - "$ref": "#/definitions/mashable.AuthorResponse" + "id": { + "example": 8255888, + "type": "integer" + }, + "logo_url": { + "example": "https://cdn.opendota.com/team-logo.png", + "type": "string" + }, + "name": { + "example": "BETBOOM TEAM", + "type": "string" + }, + "tag": { + "example": "BB", + "type": "string" } }, "type": "object" }, - "publicnews.mediaiteAuthorResponseDoc": { + "opendota.PatchAbilityChange": { "properties": { - "data": { - "$ref": "#/definitions/mediaite.AuthorResponse" + "key": { + "example": "abaddon_death_coil", + "type": "string" + }, + "notes": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "publicnews.menAuthorResponseDoc": { + "opendota.PatchHeroChange": { "properties": { - "data": { - "$ref": "#/definitions/men.AuthorResponse" + "abilities": { + "items": { + "$ref": "#/definitions/opendota.PatchAbilityChange" + }, + "type": "array" + }, + "general": { + "items": { + "type": "string" + }, + "type": "array" + }, + "hero_id": { + "example": 102, + "type": "integer" + }, + "key": { + "example": "abaddon", + "type": "string" + }, + "name": { + "example": "Abaddon", + "type": "string" + }, + "talents": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "publicnews.metroAuthorResponseDoc": { + "opendota.PatchIndexEntry": { "properties": { - "data": { - "$ref": "#/definitions/metro.AuthorResponse" + "heroes_changed": { + "example": 96, + "type": "integer" + }, + "items_changed": { + "example": 60, + "type": "integer" + }, + "patch": { + "example": "7_38", + "type": "string" + }, + "version": { + "example": "7.38", + "type": "string" } }, "type": "object" }, - "publicnews.mirrorAuthorResponseDoc": { + "opendota.PatchItemChange": { "properties": { - "data": { - "$ref": "#/definitions/mirror.AuthorResponse" + "key": { + "example": "blink", + "type": "string" + }, + "notes": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "publicnews.moneycontrolAuthorResponseDoc": { + "opendota.PatchNotesResponse": { "properties": { - "data": { - "$ref": "#/definitions/moneycontrol.AuthorResponse" + "count": { + "example": 116, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "general": { + "items": { + "type": "string" + }, + "type": "array" + }, + "heroes": { + "items": { + "$ref": "#/definitions/opendota.PatchHeroChange" + }, + "type": "array" + }, + "items": { + "items": { + "$ref": "#/definitions/opendota.PatchItemChange" + }, + "type": "array" + }, + "misc": { + "items": { + "type": "string" + }, + "type": "array" + }, + "patch": { + "example": "7_38", + "type": "string" + }, + "patches": { + "items": { + "$ref": "#/definitions/opendota.PatchIndexEntry" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "version": { + "example": "7.38", + "type": "string" } }, "type": "object" }, - "publicnews.motleyfoolAuthorResponseDoc": { + "opendota.PickWin": { "properties": { - "data": { - "$ref": "#/definitions/motleyfool.AuthorResponse" + "bans": { + "example": 36, + "type": "integer" + }, + "picks": { + "example": 13, + "type": "integer" + }, + "win_rate_percent": { + "example": 53.85, + "type": "number" + }, + "wins": { + "example": 7, + "type": "integer" } }, "type": "object" }, - "publicnews.nationAfricaAuthorResponseDoc": { + "opendota.PickedHero": { "properties": { - "data": { - "$ref": "#/definitions/nationafrica.AuthorResponse" + "hero_id": { + "example": 1, + "type": "integer" + }, + "localized_name": { + "example": "Anti-Mage", + "type": "string" } }, "type": "object" }, - "publicnews.nationalAuthorResponseDoc": { + "opendota.ProMatch": { "properties": { - "data": { - "$ref": "#/definitions/national.AuthorResponse" + "dire_name": { + "example": "LEGION", + "type": "string" + }, + "dire_score": { + "example": 9, + "type": "integer" + }, + "dire_team_id": { + "example": 10291652, + "type": "integer" + }, + "duration_seconds": { + "example": 2052, + "type": "integer" + }, + "league_id": { + "example": 20395, + "type": "integer" + }, + "league_name": { + "example": "PARI UNIVERSE by FISSURE", + "type": "string" + }, + "match_id": { + "example": 9063495955, + "type": "integer" + }, + "radiant_name": { + "example": "BETBOOM TEAM", + "type": "string" + }, + "radiant_score": { + "example": 32, + "type": "integer" + }, + "radiant_team_id": { + "example": 8255888, + "type": "integer" + }, + "radiant_win": { + "example": true, + "type": "boolean" + }, + "series_id": { + "example": 1160235, + "type": "integer" + }, + "start_time": { + "example": "2026-10-26T20:56:07Z", + "type": "string" + }, + "version": { + "example": 22, + "type": "integer" } }, "type": "object" }, - "publicnews.nationalPostAuthorResponseDoc": { + "opendota.ProMatchesResponse": { "properties": { - "data": { - "$ref": "#/definitions/nationalpost.AuthorResponse" + "count": { + "example": 100, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "matches": { + "items": { + "$ref": "#/definitions/opendota.ProMatch" + }, + "type": "array" + }, + "next_less_than_match_id": { + "example": 9055842613, + "type": "integer" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.ndtvArticleResponseDoc": { + "opendota.ProPlayer": { "properties": { - "data": { - "$ref": "#/definitions/ndtv.ArticleResponse" + "country_code": { + "example": "US", + "type": "string" + }, + "is_pro": { + "example": true, + "type": "boolean" + }, + "name": { + "example": "player-name", + "type": "string" + }, + "persona_name": { + "example": "Player Name", + "type": "string" + }, + "team_id": { + "example": 8255888, + "type": "integer" + }, + "team_name": { + "example": "BETBOOM TEAM", + "type": "string" + }, + "team_tag": { + "example": "BETBOOM", + "type": "string" } }, "type": "object" }, - "publicnews.ndtvAuthorResponseDoc": { + "opendota.ProPlayersResponse": { "properties": { - "data": { - "$ref": "#/definitions/ndtv.AuthorResponse" + "count": { + "example": 1, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "limit": { + "example": 50, + "type": "integer" + }, + "next_offset": { + "example": 50, + "type": "integer" + }, + "offset": { + "example": 0, + "type": "integer" + }, + "players": { + "items": { + "$ref": "#/definitions/opendota.ProPlayer" + }, + "type": "array" + }, + "q": { + "example": "player", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "team_id": { + "example": 8255888, + "type": "integer" + }, + "total_count": { + "example": 1, + "type": "integer" } }, "type": "object" }, - "publicnews.ndtvLatestVideosResponseDoc": { + "opendota.PublicMatchRow": { "properties": { - "data": { - "$ref": "#/definitions/ndtv.LatestVideosResponse" + "avg_rank_medal": { + "example": "Divine", + "type": "string" + }, + "avg_rank_tier": { + "example": 71, + "type": "integer" + }, + "cluster": { + "example": 171, + "type": "integer" + }, + "dire_heroes": { + "items": { + "$ref": "#/definitions/opendota.PickedHero" + }, + "type": "array" + }, + "duration_seconds": { + "example": 1329, + "type": "integer" + }, + "game_mode": { + "example": 22, + "type": "integer" + }, + "lobby_type": { + "example": 0, + "type": "integer" + }, + "match_id": { + "example": 9066504584, + "type": "integer" + }, + "radiant_heroes": { + "items": { + "$ref": "#/definitions/opendota.PickedHero" + }, + "type": "array" + }, + "radiant_win": { + "example": true, + "type": "boolean" + }, + "ranked_players": { + "example": 6, + "type": "integer" + }, + "start_time": { + "example": "2026-10-29T01:16:41Z", + "type": "string" } }, "type": "object" }, - "publicnews.ndtvLiveBlogResponseDoc": { + "opendota.PublicMatchesResponse": { "properties": { - "data": { - "$ref": "#/definitions/ndtv.LiveBlogResponse" + "count": { + "example": 100, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "matches": { + "items": { + "$ref": "#/definitions/opendota.PublicMatchRow" + }, + "type": "array" + }, + "max_rank": { + "example": 85, + "type": "integer" + }, + "min_rank": { + "example": 71, + "type": "integer" + }, + "next_less_than_match_id": { + "example": 9066000000, + "type": "integer" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.ndtvLiveBlogsResponseDoc": { + "opendota.RankBracket": { "properties": { - "data": { - "$ref": "#/definitions/ndtv.LiveBlogsResponse" + "bracket": { + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ], + "example": 5, + "type": "integer" + }, + "name": { + "enum": [ + "Herald", + "Guardian", + "Crusader", + "Archon", + "Legend", + "Ancient", + "Divine", + "Immortal" + ], + "example": "Legend", + "type": "string" + }, + "picks": { + "example": 173376, + "type": "integer" + }, + "win_rate_percent": { + "example": 51.23, + "type": "number" + }, + "wins": { + "example": 88824, + "type": "integer" } }, "type": "object" }, - "publicnews.ndtvSearchResponseDoc": { + "opendota.RankTierRow": { "properties": { - "data": { - "$ref": "#/definitions/ndtv.SearchResponse" + "cumulative_percent": { + "example": 46.9, + "type": "number" + }, + "cumulative_players": { + "example": 4100000, + "type": "integer" + }, + "medal": { + "example": "Legend", + "type": "string" + }, + "players": { + "example": 512000, + "type": "integer" + }, + "rank_tier": { + "example": 54, + "type": "integer" + }, + "share_percent": { + "example": 5.85, + "type": "number" + }, + "stars": { + "example": 4, + "type": "integer" } }, "type": "object" }, - "publicnews.ndtvVideoCategoriesResponseDoc": { + "opendota.RecordRow": { "properties": { - "data": { - "$ref": "#/definitions/ndtv.VideoCategoriesResponse" + "hero_id": { + "example": 42, + "type": "integer" + }, + "hero_name": { + "example": "Wraith King", + "type": "string" + }, + "match_id": { + "example": 9062756621, + "type": "integer" + }, + "rank": { + "example": 1, + "type": "integer" + }, + "score": { + "example": 114, + "type": "integer" + }, + "start_time": { + "example": "2026-10-24T10:11:37Z", + "type": "string" } }, "type": "object" }, - "publicnews.ndtvVideoResponseDoc": { + "opendota.RecordsResponse": { "properties": { - "data": { - "$ref": "#/definitions/ndtv.VideoResponse" + "count": { + "example": 100, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "field": { + "example": "kills", + "type": "string" + }, + "rows": { + "items": { + "$ref": "#/definitions/opendota.RecordRow" + }, + "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.ndtvVideosResponseDoc": { + "opendota.ScenarioRow": { "properties": { - "data": { - "$ref": "#/definitions/ndtv.VideosResponse" + "games": { + "example": 1023, + "type": "integer" + }, + "hero_id": { + "example": 1, + "type": "integer" + }, + "hero_name": { + "example": "Anti-Mage", + "type": "string" + }, + "is_radiant": { + "example": true, + "type": "boolean" + }, + "item": { + "example": "bfury", + "type": "string" + }, + "lane_role": { + "example": 2, + "type": "integer" + }, + "region_id": { + "example": 3, + "type": "integer" + }, + "scenario": { + "example": "courier_kill", + "type": "string" + }, + "time_seconds": { + "example": 900, + "type": "integer" + }, + "win_rate_percent": { + "example": 49.76, + "type": "number" + }, + "wins": { + "example": 509, + "type": "integer" } }, "type": "object" }, - "publicnews.news18AuthorResponseDoc": { + "opendota.ScenariosResponse": { "properties": { - "data": { - "$ref": "#/definitions/news18.AuthorResponse" + "count": { + "example": 7, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "kind": { + "enum": [ + "item-timings", + "lane-roles", + "misc" + ], + "example": "item-timings", + "type": "string" + }, + "rows": { + "items": { + "$ref": "#/definitions/opendota.ScenarioRow" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "timings": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "total": { + "example": 1600, + "type": "integer" } }, "type": "object" }, - "publicnews.newsResponseDoc": { + "opendota.Team": { "properties": { - "data": { - "$ref": "#/definitions/newsplatform.NewsResponse" + "delta": { + "example": 4.2, + "type": "number" + }, + "id": { + "example": 8255888, + "type": "integer" + }, + "last_match_id": { + "example": 9063495955, + "type": "integer" + }, + "last_match_time": { + "example": "2026-10-26T20:56:07Z", + "type": "string" + }, + "logo_url": { + "example": "https://cdn.opendota.com/team-logo.png", + "type": "string" + }, + "losses": { + "example": 559, + "type": "integer" + }, + "name": { + "example": "BETBOOM TEAM", + "type": "string" + }, + "rating": { + "example": 1271.94, + "type": "number" + }, + "tag": { + "example": "BETBOOM", + "type": "string" + }, + "wins": { + "example": 707, + "type": "integer" } }, "type": "object" }, - "publicnews.newscomauAuthorResponseDoc": { + "opendota.TeamHeroesResponse": { "properties": { - "data": { - "$ref": "#/definitions/newscomau.AuthorResponse" + "count": { + "example": 127, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "heroes": { + "items": { + "$ref": "#/definitions/opendota.HeroRecord" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "team_id": { + "example": 8255888, + "type": "integer" } }, "type": "object" }, - "publicnews.newsmaxAuthorResponseDoc": { + "opendota.TeamMatch": { "properties": { - "data": { - "$ref": "#/definitions/newsmax.AuthorResponse" + "dire_score": { + "example": 9, + "type": "integer" + }, + "duration_seconds": { + "example": 2052, + "type": "integer" + }, + "league_id": { + "example": 20395, + "type": "integer" + }, + "league_name": { + "example": "PARI UNIVERSE by FISSURE", + "type": "string" + }, + "match_id": { + "example": 9063495955, + "type": "integer" + }, + "opposing_team_id": { + "example": 10291652, + "type": "integer" + }, + "opposing_team_logo_url": { + "example": "https://cdn.opendota.com/team-logo.png", + "type": "string" + }, + "opposing_team_name": { + "example": "LEGION", + "type": "string" + }, + "radiant": { + "example": true, + "type": "boolean" + }, + "radiant_score": { + "example": 32, + "type": "integer" + }, + "radiant_win": { + "example": true, + "type": "boolean" + }, + "start_time": { + "example": "2026-10-26T20:56:07Z", + "type": "string" + }, + "team_win": { + "example": true, + "type": "boolean" } }, "type": "object" }, - "publicnews.newsweekAuthorResponseDoc": { + "opendota.TeamMatchesResponse": { "properties": { - "data": { - "$ref": "#/definitions/newsweek.AuthorResponse" + "count": { + "example": 1266, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "matches": { + "items": { + "$ref": "#/definitions/opendota.TeamMatch" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "team_id": { + "example": 8255888, + "type": "integer" } }, "type": "object" }, - "publicnews.newyorkerArticleResponseDoc": { + "opendota.TeamPlayer": { "properties": { - "data": { - "$ref": "#/definitions/newyorker.ArticleResponse" + "games_played": { + "example": 1014, + "type": "integer" + }, + "is_current_team_member": { + "example": true, + "type": "boolean" + }, + "name": { + "example": "Save-", + "type": "string" + }, + "wins": { + "example": 590, + "type": "integer" } }, "type": "object" }, - "publicnews.newyorkerAuthorResponseDoc": { + "opendota.TeamPlayersResponse": { "properties": { - "data": { - "$ref": "#/definitions/newyorker.AuthorResponse" + "count": { + "example": 28, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "players": { + "items": { + "$ref": "#/definitions/opendota.TeamPlayer" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "team_id": { + "example": 8255888, + "type": "integer" } }, "type": "object" }, - "publicnews.ninetofivegoogleAuthorResponseDoc": { + "opendota.TeamResponse": { "properties": { - "data": { - "$ref": "#/definitions/ninetofivegoogle.AuthorResponse" + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "team": { + "$ref": "#/definitions/opendota.Team" } }, "type": "object" }, - "publicnews.ninetofivemacAuthorResponseDoc": { + "opendota.TeamsResponse": { "properties": { - "data": { - "$ref": "#/definitions/ninetofivemac.AuthorResponse" + "count": { + "example": 1000, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "next_page": { + "example": 1, + "type": "integer" + }, + "page": { + "example": 0, + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "teams": { + "items": { + "$ref": "#/definitions/opendota.Team" + }, + "type": "array" } }, "type": "object" }, - "publicnews.nyDailyNewsAuthorResponseDoc": { + "openf1.CarData": { "properties": { - "data": { - "$ref": "#/definitions/nydailynews.AuthorResponse" + "brake": { + "type": "integer" + }, + "date": { + "type": "string" + }, + "driver_number": { + "type": "integer" + }, + "drs": { + "type": "integer" + }, + "meeting_key": { + "type": "integer" + }, + "n_gear": { + "type": "integer" + }, + "rpm": { + "type": "integer" + }, + "session_key": { + "type": "integer" + }, + "speed": { + "type": "integer" + }, + "throttle": { + "type": "integer" } }, "type": "object" }, - "publicnews.nymagAuthorResponseDoc": { + "openf1.CarDataResponse": { "properties": { - "data": { - "$ref": "#/definitions/nymag.AuthorResponse" + "car_data": { + "items": { + "$ref": "#/definitions/openf1.CarData" + }, + "type": "array" + }, + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.nypostAuthorResponseDoc": { + "openf1.ChampionshipDriver": { "properties": { - "data": { - "$ref": "#/definitions/nypost.AuthorResponse" + "driver_number": { + "type": "integer" + }, + "meeting_key": { + "type": "integer" + }, + "points_current": { + "type": "number" + }, + "points_start": { + "type": "number" + }, + "position_current": { + "type": "integer" + }, + "position_start": { + "type": "integer" + }, + "session_key": { + "type": "integer" } }, "type": "object" }, - "publicnews.nzheraldAuthorResponseDoc": { + "openf1.ChampionshipDriversResponse": { "properties": { - "data": { - "$ref": "#/definitions/nzherald.AuthorResponse" + "championship_drivers": { + "items": { + "$ref": "#/definitions/openf1.ChampionshipDriver" + }, + "type": "array" + }, + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.pagesixAuthorResponseDoc": { + "openf1.ChampionshipTeam": { "properties": { - "data": { - "$ref": "#/definitions/pagesix.AuthorResponse" + "meeting_key": { + "type": "integer" + }, + "points_current": { + "type": "number" + }, + "points_start": { + "type": "number" + }, + "position_current": { + "type": "integer" + }, + "position_start": { + "type": "integer" + }, + "session_key": { + "type": "integer" + }, + "team_name": { + "type": "string" } }, "type": "object" }, - "publicnews.pcgamerAuthorResponseDoc": { + "openf1.ChampionshipTeamsResponse": { "properties": { - "data": { - "$ref": "#/definitions/pcgamer.AuthorResponse" + "championship_teams": { + "items": { + "$ref": "#/definitions/openf1.ChampionshipTeam" + }, + "type": "array" + }, + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.pcmagAuthorResponseDoc": { + "openf1.Driver": { "properties": { - "data": { - "$ref": "#/definitions/pcmag.AuthorResponse" + "broadcast_name": { + "type": "string" + }, + "country_code": { + "description": "CountryCode is deprecated upstream and will be removed at the end of the\n2026 season; it is still mirrored while the source sends it.", + "type": "string" + }, + "driver_number": { + "type": "integer" + }, + "first_name": { + "type": "string" + }, + "full_name": { + "type": "string" + }, + "headshot_url": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "meeting_key": { + "type": "integer" + }, + "name_acronym": { + "type": "string" + }, + "session_key": { + "type": "integer" + }, + "team_colour": { + "type": "string" + }, + "team_name": { + "type": "string" } }, "type": "object" }, - "publicnews.peopleAuthorResponseDoc": { + "openf1.DriversResponse": { "properties": { - "data": { - "$ref": "#/definitions/people.AuthorResponse" + "count": { + "type": "integer" + }, + "drivers": { + "items": { + "$ref": "#/definitions/openf1.Driver" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.phillyinquirerAuthorResponseDoc": { + "openf1.Interval": { "properties": { - "data": { - "$ref": "#/definitions/phillyinquirer.AuthorResponse" + "date": { + "type": "string" + }, + "driver_number": { + "type": "integer" + }, + "gap_to_leader": {}, + "interval": {}, + "meeting_key": { + "type": "integer" + }, + "session_key": { + "type": "integer" } }, "type": "object" }, - "publicnews.philstarAuthorResponseDoc": { + "openf1.IntervalsResponse": { "properties": { - "data": { - "$ref": "#/definitions/philstar.AuthorResponse" + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "intervals": { + "items": { + "$ref": "#/definitions/openf1.Interval" + }, + "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.phonearenaAuthorResponseDoc": { + "openf1.Lap": { "properties": { - "data": { - "$ref": "#/definitions/phonearena.AuthorResponse" + "date_start": { + "type": "string" + }, + "driver_number": { + "type": "integer" + }, + "duration_sector_1": { + "type": "number" + }, + "duration_sector_2": { + "type": "number" + }, + "duration_sector_3": { + "type": "number" + }, + "i1_speed": { + "type": "integer" + }, + "i2_speed": { + "type": "integer" + }, + "is_pit_out_lap": { + "type": "boolean" + }, + "lap_duration": { + "type": "number" + }, + "lap_number": { + "type": "integer" + }, + "meeting_key": { + "type": "integer" + }, + "segments_sector_1": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "segments_sector_2": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "segments_sector_3": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "session_key": { + "type": "integer" + }, + "st_speed": { + "type": "integer" } }, "type": "object" }, - "publicnews.polygonAuthorResponseDoc": { + "openf1.LapsResponse": { "properties": { - "data": { - "$ref": "#/definitions/polygon.AuthorResponse" + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "laps": { + "items": { + "$ref": "#/definitions/openf1.Lap" + }, + "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.propublicaAuthorResponseDoc": { + "openf1.Location": { "properties": { - "data": { - "$ref": "#/definitions/propublica.AuthorResponse" + "date": { + "type": "string" + }, + "driver_number": { + "type": "integer" + }, + "meeting_key": { + "type": "integer" + }, + "session_key": { + "type": "integer" + }, + "x": { + "type": "integer" + }, + "y": { + "type": "integer" + }, + "z": { + "type": "integer" } }, "type": "object" }, - "publicnews.punchAuthorResponseDoc": { + "openf1.LocationResponse": { "properties": { - "data": { - "$ref": "#/definitions/punch.AuthorResponse" + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "location": { + "items": { + "$ref": "#/definitions/openf1.Location" + }, + "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.rapplerAuthorResponseDoc": { + "openf1.Meeting": { "properties": { - "data": { - "$ref": "#/definitions/rappler.AuthorResponse" + "circuit_image": { + "type": "string" + }, + "circuit_info_url": { + "type": "string" + }, + "circuit_key": { + "type": "integer" + }, + "circuit_short_name": { + "type": "string" + }, + "circuit_type": { + "type": "string" + }, + "country_code": { + "type": "string" + }, + "country_flag": { + "type": "string" + }, + "country_key": { + "type": "integer" + }, + "country_name": { + "type": "string" + }, + "date_end": { + "type": "string" + }, + "date_start": { + "type": "string" + }, + "gmt_offset": { + "type": "string" + }, + "is_cancelled": { + "type": "boolean" + }, + "location": { + "type": "string" + }, + "meeting_key": { + "type": "integer" + }, + "meeting_name": { + "type": "string" + }, + "meeting_official_name": { + "type": "string" + }, + "year": { + "type": "integer" } }, "type": "object" }, - "publicnews.rawstoryAuthorResponseDoc": { + "openf1.MeetingsResponse": { "properties": { - "data": { - "$ref": "#/definitions/rawstory.AuthorResponse" + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "meetings": { + "items": { + "$ref": "#/definitions/openf1.Meeting" + }, + "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.reachAuthorResponseDoc": { + "openf1.Overtake": { "properties": { - "data": { - "$ref": "#/definitions/reachplc.AuthorResponse" + "date": { + "type": "string" + }, + "meeting_key": { + "type": "integer" + }, + "overtaken_driver_number": { + "type": "integer" + }, + "overtaking_driver_number": { + "type": "integer" + }, + "position": { + "type": "integer" + }, + "session_key": { + "type": "integer" } }, "type": "object" }, - "publicnews.rnzAuthorResponseDoc": { + "openf1.OvertakesResponse": { "properties": { - "data": { - "$ref": "#/definitions/rnz.AuthorResponse" + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "overtakes": { + "items": { + "$ref": "#/definitions/openf1.Overtake" + }, + "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.rollingStoneAuthorResponseDoc": { + "openf1.Pit": { "properties": { - "data": { - "$ref": "#/definitions/rollingstone.AuthorResponse" + "date": { + "type": "string" + }, + "driver_number": { + "type": "integer" + }, + "lane_duration": { + "type": "number" + }, + "lap_number": { + "type": "integer" + }, + "meeting_key": { + "type": "integer" + }, + "pit_duration": { + "type": "number" + }, + "session_key": { + "type": "integer" + }, + "stop_duration": { + "type": "number" } }, "type": "object" }, - "publicnews.rteAuthorResponseDoc": { + "openf1.PitResponse": { "properties": { - "data": { - "$ref": "#/definitions/rte.AuthorResponse" + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "pit": { + "items": { + "$ref": "#/definitions/openf1.Pit" + }, + "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.salonAuthorResponseDoc": { + "openf1.Position": { "properties": { - "data": { - "$ref": "#/definitions/salon.AuthorResponse" + "date": { + "type": "string" + }, + "driver_number": { + "type": "integer" + }, + "meeting_key": { + "type": "integer" + }, + "position": { + "type": "integer" + }, + "session_key": { + "type": "integer" } }, "type": "object" }, - "publicnews.sbsnewsAuthorResponseDoc": { + "openf1.PositionResponse": { "properties": { - "data": { - "$ref": "#/definitions/sbsnews.AuthorResponse" + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "position": { + "items": { + "$ref": "#/definitions/openf1.Position" + }, + "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.scienceAlertAuthorResponseDoc": { + "openf1.RaceControl": { "properties": { - "data": { - "$ref": "#/definitions/sciencealert.AuthorResponse" + "category": { + "type": "string" + }, + "date": { + "type": "string" + }, + "driver_number": { + "type": "integer" + }, + "flag": { + "type": "string" + }, + "lap_number": { + "type": "integer" + }, + "meeting_key": { + "type": "integer" + }, + "message": { + "type": "string" + }, + "qualifying_phase": { + "type": "integer" + }, + "scope": { + "type": "string" + }, + "sector": { + "type": "integer" + }, + "session_key": { + "type": "integer" } }, "type": "object" }, - "publicnews.screenrantAuthorResponseDoc": { + "openf1.RaceControlResponse": { "properties": { - "data": { - "$ref": "#/definitions/screenrant.AuthorResponse" + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "race_control": { + "items": { + "$ref": "#/definitions/openf1.RaceControl" + }, + "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.seattleTimesAuthorResponseDoc": { + "openf1.Session": { "properties": { - "data": { - "$ref": "#/definitions/seattletimes.AuthorResponse" + "circuit_key": { + "type": "integer" + }, + "circuit_short_name": { + "type": "string" + }, + "country_code": { + "type": "string" + }, + "country_key": { + "type": "integer" + }, + "country_name": { + "type": "string" + }, + "date_end": { + "type": "string" + }, + "date_start": { + "type": "string" + }, + "gmt_offset": { + "type": "string" + }, + "is_cancelled": { + "type": "boolean" + }, + "location": { + "type": "string" + }, + "meeting_key": { + "type": "integer" + }, + "session_key": { + "type": "integer" + }, + "session_name": { + "type": "string" + }, + "session_type": { + "type": "string" + }, + "year": { + "type": "integer" } }, "type": "object" }, - "publicnews.sectionsResponseDoc": { + "openf1.SessionResult": { "properties": { - "data": { - "$ref": "#/definitions/newsplatform.SectionsResponse" + "dnf": { + "type": "boolean" + }, + "dns": { + "type": "boolean" + }, + "driver_number": { + "type": "integer" + }, + "dsq": { + "type": "boolean" + }, + "duration": {}, + "gap_to_leader": {}, + "meeting_key": { + "type": "integer" + }, + "number_of_laps": { + "type": "integer" + }, + "points": { + "type": "number" + }, + "position": { + "type": "integer" + }, + "session_key": { + "type": "integer" } }, "type": "object" }, - "publicnews.sevennewsauAuthorResponseDoc": { + "openf1.SessionResultResponse": { "properties": { - "data": { - "$ref": "#/definitions/sevennewsau.AuthorResponse" + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "session_result": { + "items": { + "$ref": "#/definitions/openf1.SessionResult" + }, + "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.sfgateAuthorResponseDoc": { + "openf1.SessionsResponse": { "properties": { - "data": { - "$ref": "#/definitions/sfgate.AuthorResponse" + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "sessions": { + "items": { + "$ref": "#/definitions/openf1.Session" + }, + "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.skyNewsAuthorResponseDoc": { + "openf1.StartingGrid": { "properties": { - "data": { - "$ref": "#/definitions/skynews.AuthorResponse" + "driver_number": { + "type": "integer" + }, + "lap_duration": { + "type": "number" + }, + "meeting_key": { + "type": "integer" + }, + "position": { + "type": "integer" + }, + "session_key": { + "type": "integer" } }, "type": "object" }, - "publicnews.skyNewsVideoResponseDoc": { + "openf1.StartingGridResponse": { "properties": { - "data": { - "$ref": "#/definitions/skynews.VideoResponse" + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "starting_grid": { + "items": { + "$ref": "#/definitions/openf1.StartingGrid" + }, + "type": "array" } }, "type": "object" }, - "publicnews.skyNewsVideosResponseDoc": { + "openf1.Stint": { "properties": { - "data": { - "$ref": "#/definitions/skynews.VideosResponse" + "compound": { + "type": "string" + }, + "driver_number": { + "type": "integer" + }, + "lap_end": { + "type": "integer" + }, + "lap_start": { + "type": "integer" + }, + "meeting_key": { + "type": "integer" + }, + "session_key": { + "type": "integer" + }, + "stint_number": { + "type": "integer" + }, + "tyre_age_at_start": { + "type": "integer" } }, "type": "object" }, - "publicnews.skySportsAuthorResponseDoc": { + "openf1.StintsResponse": { "properties": { - "data": { - "$ref": "#/definitions/skysports.AuthorResponse" + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "stints": { + "items": { + "$ref": "#/definitions/openf1.Stint" + }, + "type": "array" } }, "type": "object" }, - "publicnews.smhArticleResponseDoc": { + "openf1.TeamRadio": { "properties": { - "data": { - "$ref": "#/definitions/smh.ArticleResponse" + "date": { + "type": "string" + }, + "driver_number": { + "type": "integer" + }, + "meeting_key": { + "type": "integer" + }, + "recording_url": { + "type": "string" + }, + "session_key": { + "type": "integer" } }, "type": "object" }, - "publicnews.smhAuthorResponseDoc": { + "openf1.TeamRadioResponse": { "properties": { - "data": { - "$ref": "#/definitions/smh.AuthorResponse" + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "team_radio": { + "items": { + "$ref": "#/definitions/openf1.TeamRadio" + }, + "type": "array" } }, "type": "object" }, - "publicnews.spaceAuthorResponseDoc": { + "openf1.Weather": { "properties": { - "data": { - "$ref": "#/definitions/space.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.sportingNewsAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportingnews.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaCollegeBasketballScheduleOptionsResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.CollegeBasketballScheduleOptionsResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaCollegeBasketballScheduleResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.CollegeBasketballScheduleResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaCricketCommentaryResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.CricketCommentaryResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaCricketMatchResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.CricketMatchResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaDepthChartResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.DepthChartResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaDraftPicksOptionsResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.DraftPicksOptionsResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaDraftPicksResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.DraftPicksResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaEventCalendarOptionsResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.EventCalendarOptionsResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaEventCalendarResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.EventCalendarResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaFeedResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.FeedResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaFootballDataResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.FootballDataResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaFootballOptionsResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.FootballOptionsResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaGuessingGameEntitiesResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.GuessingGameEntitiesResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaGuessingGameResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.GuessingGameDataResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaGuessingGamesResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.GuessingGamesResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaNBAQueriesResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.NBAQueriesResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaPageOptionsResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.PageOptionsResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaPlayerStatsResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.PlayerStatsResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaProfileResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.ProfileResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaQuizCategoriesResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.QuizCategoriesResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaQuizResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.QuizResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaQuizzesResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.QuizzesResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaSalaryCapResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.SalaryCapResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaSectionsResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.SectionsResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaSitemapItemsResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.SitemapItemsResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaSitemapsResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.SitemapsResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaStandingsOptionsResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.StandingsOptionsResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaTablesResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.TablesResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaTaxonomySearchResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.TaxonomySearchResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaTopicResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.TopicResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaTradeValuesResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.TradeValuesResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaTransactionsOptionsResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.TransactionsOptionsResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaTransactionsResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.TransactionsResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaVideoResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.VideoResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaVideosResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.VideosResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaWikiActivityResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.WikiActivityResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaWikiArticleResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.WikiArticleResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaWikiCategoriesResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.WikiCategoriesResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaWikiContributorsResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.WikiContributorsResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaWikiIssuesResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.WikiIssuesResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaWikiOptionsResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.WikiOptionsResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaWikiPagesResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.WikiPagesResponse" - } - }, - "type": "object" - }, - "publicnews.sportskeedaWikiSummaryResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sportskeeda.WikiSummaryResponse" - } - }, - "type": "object" - }, - "publicnews.standardAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/standard.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.straitstimesAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/straitstimes.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.stuffAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/stuff.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.sunAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/sun.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.techCrunchAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/techcrunch.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.techradarAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/techradar.AuthorResponse" - } - }, - "type": "object" - }, - "publicnews.telegraphAuthorResponseDoc": { - "properties": { - "data": { - "$ref": "#/definitions/telegraph.AuthorResponse" + "air_temperature": { + "type": "number" + }, + "date": { + "type": "string" + }, + "humidity": { + "type": "number" + }, + "meeting_key": { + "type": "integer" + }, + "pressure": { + "type": "number" + }, + "rainfall": { + "type": "integer" + }, + "session_key": { + "type": "integer" + }, + "track_temperature": { + "type": "number" + }, + "wind_direction": { + "type": "integer" + }, + "wind_speed": { + "type": "number" } }, "type": "object" }, - "publicnews.theBlazeAuthorResponseDoc": { + "openf1.WeatherResponse": { "properties": { - "data": { - "$ref": "#/definitions/theblaze.AuthorResponse" + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "weather": { + "items": { + "$ref": "#/definitions/openf1.Weather" + }, + "type": "array" } }, "type": "object" }, - "publicnews.theHillAuthorResponseDoc": { + "openligadb.listResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/thehill.AuthorResponse" + "$ref": "#/definitions/openligadb.listSourceDataDoc" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.theHinduAuthorResponseDoc": { + "openligadb.listSourceDataDoc": { "properties": { + "attribution": { + "example": "Contains information from OpenLigaDB (https://openligadb.de/), licensed under the Open Database License (ODbL) (https://opendatacommons.org/licenses/odbl/1-0/).", + "type": "string" + }, "data": { - "$ref": "#/definitions/thehindu.AuthorResponse" + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + "fetched_at": { + "example": "2026-10-31T12:00:00Z", + "type": "string" + }, + "source_license": { + "example": "Open Data Commons Open Database License (ODbL) v1.0", + "type": "string" + }, + "source_license_url": { + "example": "https://opendatacommons.org/licenses/odbl/1-0/", + "type": "string" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.theJournalAuthorResponseDoc": { + "openligadb.objectResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/thejournal.AuthorResponse" + "$ref": "#/definitions/openligadb.objectSourceDataDoc" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.theageArticleResponseDoc": { + "openligadb.objectSourceDataDoc": { "properties": { + "attribution": { + "example": "Contains information from OpenLigaDB (https://openligadb.de/), licensed under the Open Database License (ODbL) (https://opendatacommons.org/licenses/odbl/1-0/).", + "type": "string" + }, "data": { - "$ref": "#/definitions/theage.ArticleResponse" + "additionalProperties": true, + "type": "object" + }, + "fetched_at": { + "example": "2026-10-31T12:00:00Z", + "type": "string" + }, + "source_license": { + "example": "Open Data Commons Open Database License (ODbL) v1.0", + "type": "string" + }, + "source_license_url": { + "example": "https://opendatacommons.org/licenses/odbl/1-0/", + "type": "string" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.theageAuthorResponseDoc": { + "openligadb.stringResponseDoc": { "properties": { + "code": { + "example": 200, + "type": "integer" + }, "data": { - "$ref": "#/definitions/theage.AuthorResponse" + "$ref": "#/definitions/openligadb.stringSourceDataDoc" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "publicnews.thenextwebAuthorResponseDoc": { + "openligadb.stringSourceDataDoc": { "properties": { + "attribution": { + "example": "Contains information from OpenLigaDB (https://openligadb.de/), licensed under the Open Database License (ODbL) (https://opendatacommons.org/licenses/odbl/1-0/).", + "type": "string" + }, "data": { - "$ref": "#/definitions/thenextweb.AuthorResponse" + "example": "2026-10-31T14:20:10.123", + "type": "string" + }, + "fetched_at": { + "example": "2026-10-31T12:00:00Z", + "type": "string" + }, + "source_license": { + "example": "Open Data Commons Open Database License (ODbL) v1.0", + "type": "string" + }, + "source_license_url": { + "example": "https://opendatacommons.org/licenses/odbl/1-0/", + "type": "string" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "publicnews.thestarmyAuthorResponseDoc": { + "opensea.Account": { "properties": { - "data": { - "$ref": "#/definitions/thestarmy.AuthorResponse" + "address": { + "example": "0x46efbaedc92067e6d60e84ed6395099723252496", + "type": "string" + }, + "display_name": { + "example": "gordongoner", + "type": "string" + }, + "image_url": { + "type": "string" } }, "type": "object" }, - "publicnews.thevergeAuthorResponseDoc": { + "opensea.ActivityEvent": { "properties": { - "data": { - "$ref": "#/definitions/theverge.AuthorResponse" + "chain": { + "type": "string" + }, + "collection_name": { + "type": "string" + }, + "collection_slug": { + "example": "boredapeyachtclub", + "type": "string" + }, + "contract_address": { + "type": "string" + }, + "event_time": { + "example": "2026-08-30T08:38:47.235Z", + "type": "string" + }, + "from": { + "$ref": "#/definitions/opensea.Account" + }, + "id": { + "type": "string" + }, + "item_image_url": { + "type": "string" + }, + "item_name": { + "type": "string" + }, + "marketplace": { + "example": "opensea", + "type": "string" + }, + "price": { + "$ref": "#/definitions/opensea.Price" + }, + "quantity": { + "example": "1", + "type": "string" + }, + "sale_type": { + "type": "string" + }, + "to": { + "$ref": "#/definitions/opensea.Account" + }, + "token_id": { + "example": "3766", + "type": "string" + }, + "transaction_hash": { + "type": "string" + }, + "type": { + "example": "Sale", + "type": "string" } }, "type": "object" }, - "publicnews.thisIsMoneyAuthorResponseDoc": { + "opensea.ActivityResponse": { "properties": { - "data": { - "$ref": "#/definitions/thisismoney.AuthorResponse" + "events": { + "items": { + "$ref": "#/definitions/opensea.ActivityEvent" + }, + "type": "array" + }, + "next_page_cursor": { + "type": "string" + }, + "slug": { + "example": "boredapeyachtclub", + "type": "string" + }, + "token_id": { + "type": "string" } }, "type": "object" }, - "publicnews.timeAuthorResponseDoc": { + "opensea.CategoriesResponse": { "properties": { - "data": { - "$ref": "#/definitions/time.AuthorResponse" + "categories": { + "items": { + "$ref": "#/definitions/opensea.Category" + }, + "type": "array" } }, "type": "object" }, - "publicnews.timesOfIndiaAuthorResponseDoc": { + "opensea.Category": { "properties": { - "data": { - "$ref": "#/definitions/timesofindia.AuthorResponse" + "children": { + "items": { + "$ref": "#/definitions/opensea.CategoryChild" + }, + "type": "array" + }, + "slug": { + "example": "collections", + "type": "string" } }, "type": "object" }, - "publicnews.timesOfIsraelAuthorResponseDoc": { + "opensea.CategoryChild": { "properties": { - "data": { - "$ref": "#/definitions/timesofisrael.AuthorResponse" + "display_name": { + "example": "PFPs", + "type": "string" + }, + "slug": { + "example": "pfps", + "type": "string" } }, "type": "object" }, - "publicnews.tmzAuthorResponseDoc": { + "opensea.Chain": { "properties": { - "data": { - "$ref": "#/definitions/tmz.AuthorResponse" + "arch": { + "example": "EVM", + "type": "string" + }, + "identifier": { + "example": "ethereum", + "type": "string" + }, + "name": { + "example": "Ethereum", + "type": "string" } }, "type": "object" }, - "publicnews.tomsguideAuthorResponseDoc": { + "opensea.ChainsResponse": { "properties": { - "data": { - "$ref": "#/definitions/tomsguide.AuthorResponse" + "chains": { + "items": { + "$ref": "#/definitions/opensea.Chain" + }, + "type": "array" } }, "type": "object" }, - "publicnews.tomshardwareAuthorResponseDoc": { + "opensea.ChartPoint": { "properties": { - "data": { - "$ref": "#/definitions/tomshardware.AuthorResponse" + "currency": { + "example": "ETH", + "type": "string" + }, + "time": { + "example": "2026-08-23T13:11:15.715Z", + "type": "string" + }, + "usd": { + "example": 19182.64, + "type": "number" + }, + "value": { + "example": 7.899, + "type": "number" } }, "type": "object" }, - "publicnews.torontoStarAuthorResponseDoc": { + "opensea.ChartResponse": { "properties": { - "data": { - "$ref": "#/definitions/torontostar.AuthorResponse" + "metric": { + "example": "floor_price", + "type": "string" + }, + "points": { + "items": { + "$ref": "#/definitions/opensea.ChartPoint" + }, + "type": "array" + }, + "slug": { + "example": "boredapeyachtclub", + "type": "string" + }, + "timeframe": { + "example": "SEVEN_DAYS", + "type": "string" } }, "type": "object" }, - "publicnews.townhallAuthorResponseDoc": { + "opensea.Collection": { "properties": { - "data": { - "$ref": "#/definitions/townhall.AuthorResponse" + "banner_image_url": { + "type": "string" + }, + "category": { + "example": "PFPS", + "type": "string" + }, + "chain": { + "example": "ethereum", + "type": "string" + }, + "contract_address": { + "example": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d", + "type": "string" + }, + "created_at": { + "example": "2021-04-22T23:14:24.000Z", + "type": "string" + }, + "description": { + "type": "string" + }, + "discord_url": { + "type": "string" + }, + "external_url": { + "type": "string" + }, + "floor_price": { + "$ref": "#/definitions/opensea.Price" + }, + "id": { + "example": "46188685bcac4206ace63c9d017abbb7", + "type": "string" + }, + "image_url": { + "type": "string" + }, + "instagram_username": { + "type": "string" + }, + "is_verified": { + "example": true, + "type": "boolean" + }, + "name": { + "example": "Bored Ape Yacht Club", + "type": "string" + }, + "slug": { + "example": "boredapeyachtclub", + "type": "string" + }, + "stats": { + "$ref": "#/definitions/opensea.CollectionStats" + }, + "top_offer": { + "$ref": "#/definitions/opensea.Price" + }, + "twitter_username": { + "type": "string" } }, "type": "object" }, - "publicnews.usmagazineAuthorResponseDoc": { + "opensea.CollectionHoldersResponse": { "properties": { - "data": { - "$ref": "#/definitions/usmagazine.AuthorResponse" + "holders": { + "items": { + "$ref": "#/definitions/opensea.Holder" + }, + "type": "array" + }, + "next_page_cursor": { + "type": "string" + }, + "slug": { + "example": "boredapeyachtclub", + "type": "string" } }, "type": "object" }, - "publicnews.vanguardngAuthorResponseDoc": { + "opensea.CollectionItemsResponse": { "properties": { - "data": { - "$ref": "#/definitions/vanguardng.AuthorResponse" + "items": { + "items": { + "$ref": "#/definitions/opensea.Item" + }, + "type": "array" + }, + "next_page_cursor": { + "type": "string" + }, + "slug": { + "example": "boredapeyachtclub", + "type": "string" } }, "type": "object" }, - "publicnews.vanityFairAuthorResponseDoc": { + "opensea.CollectionItemsShelfResponse": { "properties": { - "data": { - "$ref": "#/definitions/vanityfair.AuthorResponse" + "items": { + "items": { + "$ref": "#/definitions/opensea.Item" + }, + "type": "array" + }, + "shelf": { + "example": "best_deals", + "type": "string" + }, + "slug": { + "example": "boredapeyachtclub", + "type": "string" } }, "type": "object" }, - "publicnews.varietyAuthorResponseDoc": { + "opensea.CollectionOffersResponse": { "properties": { - "data": { - "$ref": "#/definitions/variety.AuthorResponse" + "next_page_cursor": { + "type": "string" + }, + "offers": { + "items": { + "$ref": "#/definitions/opensea.OfferAggregate" + }, + "type": "array" + }, + "slug": { + "example": "boredapeyachtclub", + "type": "string" + }, + "total_currency": { + "example": "WETH", + "type": "string" + }, + "total_offers": { + "example": 314, + "type": "integer" + }, + "total_value_token": { + "example": 55.0032, + "type": "number" + }, + "total_value_usd": { + "example": 135216.02, + "type": "number" } }, "type": "object" }, - "publicnews.viceAuthorResponseDoc": { + "opensea.CollectionSearchResponse": { "properties": { - "data": { - "$ref": "#/definitions/vice.AuthorResponse" + "collections": { + "items": { + "$ref": "#/definitions/opensea.CollectionSummary" + }, + "type": "array" + }, + "query": { + "example": "ape", + "type": "string" } }, "type": "object" }, - "publicnews.voxAuthorResponseDoc": { + "opensea.CollectionShelfResponse": { "properties": { - "data": { - "$ref": "#/definitions/vox.AuthorResponse" + "collections": { + "items": { + "$ref": "#/definitions/opensea.CollectionSummary" + }, + "type": "array" + }, + "next_page_cursor": { + "type": "string" + }, + "shelf": { + "example": "top_movers", + "type": "string" } }, "type": "object" }, - "publicnews.wccftechAuthorResponseDoc": { + "opensea.CollectionStats": { "properties": { - "data": { - "$ref": "#/definitions/wccftech.AuthorResponse" + "listed_item_count": { + "example": 298, + "type": "integer" + }, + "one_day": { + "$ref": "#/definitions/opensea.WindowStats" + }, + "one_hour": { + "$ref": "#/definitions/opensea.WindowStats" + }, + "sales": { + "example": 57369, + "type": "integer" + }, + "seven_days": { + "$ref": "#/definitions/opensea.WindowStats" + }, + "thirty_days": { + "$ref": "#/definitions/opensea.WindowStats" + }, + "total_supply": { + "example": 9998, + "type": "integer" + }, + "unique_item_count": { + "example": 9998, + "type": "integer" + }, + "volume_currency": { + "example": "ETH", + "type": "string" + }, + "volume_native": { + "example": 1580610.96, + "type": "number" + }, + "volume_usd": { + "example": 3756342321.66, + "type": "number" } }, "type": "object" }, - "publicnews.xdaAuthorResponseDoc": { + "opensea.CollectionSummary": { "properties": { - "data": { - "$ref": "#/definitions/xda.AuthorResponse" + "category": { + "example": "PFPS", + "type": "string" + }, + "chain": { + "example": "ethereum", + "type": "string" + }, + "contract_address": { + "type": "string" + }, + "floor_price": { + "$ref": "#/definitions/opensea.Price" + }, + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "is_verified": { + "type": "boolean" + }, + "markets": { + "items": { + "$ref": "#/definitions/opensea.MarketListing" + }, + "type": "array" + }, + "name": { + "example": "Bored Ape Yacht Club", + "type": "string" + }, + "slug": { + "example": "boredapeyachtclub", + "type": "string" + }, + "stats": { + "$ref": "#/definitions/opensea.CollectionStats" } }, "type": "object" }, - "publicnews.yardbarkerAuthorResponseDoc": { + "opensea.CollectionTopSalesResponse": { "properties": { - "data": { - "$ref": "#/definitions/yardbarker.AuthorResponse" + "sales": { + "items": { + "$ref": "#/definitions/opensea.ActivityEvent" + }, + "type": "array" + }, + "slug": { + "example": "boredapeyachtclub", + "type": "string" } }, "type": "object" }, - "publicnews.zdnetAuthorResponseDoc": { + "opensea.CollectionTrait": { "properties": { - "data": { - "$ref": "#/definitions/zdnet.AuthorResponse" + "comparison_operator": { + "type": "string" + }, + "trait_type": { + "example": "Background", + "type": "string" + }, + "values": { + "items": { + "$ref": "#/definitions/opensea.TraitValue" + }, + "type": "array" } }, "type": "object" }, - "punch.AuthorResponse": { + "opensea.CollectionTraitOffersResponse": { "properties": { - "articles": { + "next_page_cursor": { + "type": "string" + }, + "offers": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/opensea.TraitOfferAggregate" }, "type": "array" }, - "name": { + "slug": { + "example": "boredapeyachtclub", "type": "string" }, - "total_pages": { + "total_currency": { + "example": "WETH", + "type": "string" + }, + "total_offers": { + "example": 6, "type": "integer" }, - "url": { - "type": "string" + "total_value_token": { + "example": 96.13, + "type": "number" + }, + "total_value_usd": { + "example": 96.13, + "type": "number" } }, "type": "object" }, - "quince.CategoriesResponse": { + "opensea.CollectionTraitsResponse": { "properties": { - "business_departments": { - "items": { - "$ref": "#/definitions/quince.FacetCount" - }, - "type": "array" - }, - "categories": { - "items": { - "$ref": "#/definitions/quince.FacetCount" - }, - "type": "array" - }, - "colors": { - "items": { - "$ref": "#/definitions/quince.FacetCount" - }, - "type": "array" - }, - "departments": { - "items": { - "$ref": "#/definitions/quince.FacetCount" - }, - "type": "array" + "next_page_cursor": { + "type": "string" }, - "fetched_at": { + "slug": { + "example": "boredapeyachtclub", "type": "string" }, - "materials": { + "traits": { "items": { - "$ref": "#/definitions/quince.FacetCount" + "$ref": "#/definitions/opensea.CollectionTrait" }, "type": "array" - }, - "sizes": { + } + }, + "type": "object" + }, + "opensea.CollectionsResponse": { + "properties": { + "collections": { "items": { - "$ref": "#/definitions/quince.FacetCount" + "$ref": "#/definitions/opensea.CollectionSummary" }, "type": "array" } }, "type": "object" }, - "quince.FacetCount": { + "opensea.DepthLevel": { "properties": { - "count": { - "type": "integer" + "price": { + "$ref": "#/definitions/opensea.Price" }, - "value": { - "type": "string" + "quantity": { + "example": 2, + "type": "integer" } }, "type": "object" }, - "quince.NavCategory": { + "opensea.DepthResponse": { "properties": { - "groups": { + "chain": { + "type": "string" + }, + "contract_address": { + "type": "string" + }, + "listings": { "items": { - "$ref": "#/definitions/quince.NavGroup" + "$ref": "#/definitions/opensea.DepthLevel" }, "type": "array" }, - "slug": { - "type": "string" - }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "quince.NavGroup": { - "properties": { - "links": { + "offers": { "items": { - "$ref": "#/definitions/quince.NavLink" + "$ref": "#/definitions/opensea.DepthLevel" }, "type": "array" }, - "title": { + "slug": { + "example": "boredapeyachtclub", + "type": "string" + }, + "token_id": { "type": "string" } }, "type": "object" }, - "quince.NavLink": { + "opensea.Drop": { "properties": { - "slug": { + "chain": { + "example": "base", "type": "string" }, - "text": { + "collection": { + "$ref": "#/definitions/opensea.CollectionSummary" + }, + "contract_address": { + "type": "string" + }, + "type": { + "example": "Erc721SeaDropV1", "type": "string" } }, "type": "object" }, - "quince.NavigationResponse": { + "opensea.DropsResponse": { "properties": { - "categories": { + "drops": { "items": { - "$ref": "#/definitions/quince.NavCategory" + "$ref": "#/definitions/opensea.Drop" }, "type": "array" }, - "fetched_at": { + "next_page_cursor": { "type": "string" }, - "source_url": { + "type": { + "example": "UPCOMING", "type": "string" } }, "type": "object" }, - "quince.Product": { + "opensea.Holder": { "properties": { - "business_department": { - "type": "string" + "account": { + "$ref": "#/definitions/opensea.Account" }, - "category": { + "quantity": { + "example": 143, + "type": "integer" + } + }, + "type": "object" + }, + "opensea.Item": { + "properties": { + "best_listing": { + "$ref": "#/definitions/opensea.Price" + }, + "best_offer": { + "$ref": "#/definitions/opensea.Price" + }, + "chain": { + "example": "ethereum", "type": "string" }, - "color": { + "collection_name": { + "example": "Bored Ape Yacht Club", "type": "string" }, - "currency": { + "collection_slug": { + "example": "boredapeyachtclub", "type": "string" }, - "department": { + "contract_address": { "type": "string" }, - "description": { + "created_at": { "type": "string" }, - "gender": { + "description": { "type": "string" }, - "handle": { + "id": { "type": "string" }, "image_url": { "type": "string" }, - "in_stock": { + "is_fungible": { "type": "boolean" }, - "material": { - "items": { - "type": "string" - }, - "type": "array" + "last_sale": { + "$ref": "#/definitions/opensea.Price" }, - "max_price": { - "type": "number" + "last_sale_at": { + "type": "string" }, - "min_price": { - "type": "number" + "marketplace": { + "example": "opensea", + "type": "string" }, - "primary_colors": { - "items": { - "type": "string" - }, - "type": "array" + "name": { + "example": "#1", + "type": "string" }, - "product_id": { + "owner": { + "$ref": "#/definitions/opensea.Account" + }, + "rarity_rank": { + "example": 1204, "type": "integer" }, - "product_type": { + "token_id": { + "example": "1", "type": "string" }, - "sizes": { + "traits": { "items": { - "type": "string" + "$ref": "#/definitions/opensea.Trait" }, "type": "array" - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" } }, "type": "object" }, - "quince.ProductFAQItem": { + "opensea.ItemOrdersResponse": { "properties": { - "answer": { + "chain": { + "example": "ethereum", "type": "string" }, - "question": { - "type": "string" - } - }, - "type": "object" - }, - "quince.ProductFAQResponse": { - "properties": { - "fetched_at": { + "contract_address": { + "example": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d", "type": "string" }, - "handle": { + "next_page_cursor": { "type": "string" }, - "questions": { + "orders": { "items": { - "$ref": "#/definitions/quince.ProductFAQItem" + "$ref": "#/definitions/opensea.Order" }, "type": "array" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "quince.ProductOptionGroup": { - "properties": { - "name": { + "token_id": { + "example": "1", "type": "string" - }, - "values": { - "items": { - "$ref": "#/definitions/quince.ProductOptionValue" - }, - "type": "array" } }, "type": "object" }, - "quince.ProductOptionValue": { + "opensea.ItemOwner": { "properties": { - "display_name": { - "type": "string" - }, - "display_type": { - "type": "string" - }, - "hex_code": { - "type": "string" + "account": { + "$ref": "#/definitions/opensea.Account" }, - "value": { + "quantity": { + "example": "1", "type": "string" } }, "type": "object" }, - "quince.ProductResponse": { + "opensea.ItemOwnersResponse": { "properties": { - "average_rating": { - "type": "number" - }, - "country": { - "type": "string" - }, - "description": { + "chain": { + "example": "ethereum", "type": "string" }, - "fetched_at": { + "contract_address": { "type": "string" }, - "gender": { - "type": "string" + "has_more": { + "type": "boolean" }, - "handle": { + "next_page_cursor": { "type": "string" }, - "images": { + "owners": { "items": { - "type": "string" + "$ref": "#/definitions/opensea.ItemOwner" }, "type": "array" }, - "options": { + "token_id": { + "example": "1", + "type": "string" + }, + "total_owners": { + "example": 1, + "type": "integer" + } + }, + "type": "object" + }, + "opensea.ItemSearchResponse": { + "properties": { + "items": { "items": { - "$ref": "#/definitions/quince.ProductOptionGroup" + "$ref": "#/definitions/opensea.Item" }, "type": "array" }, - "product_id": { - "type": "integer" - }, - "product_type": { + "query": { + "example": "gold", "type": "string" }, - "review_count": { - "type": "integer" - }, - "source_url": { + "slug": { + "example": "boredapeyachtclub", "type": "string" + } + }, + "type": "object" + }, + "opensea.MarketListing": { + "properties": { + "listed_item_count": { + "example": 190, + "type": "integer" }, - "title": { + "marketplace": { + "example": "opensea", "type": "string" }, - "url": { + "name": { + "example": "OpenSea", "type": "string" - }, - "variants": { - "items": { - "$ref": "#/definitions/quince.ProductVariant" - }, - "type": "array" } }, "type": "object" }, - "quince.ProductReviewsResponse": { + "opensea.OfferAggregate": { "properties": { - "average_rating": { - "type": "number" - }, - "fetched_at": { + "id": { "type": "string" }, - "handle": { - "type": "string" + "price": { + "$ref": "#/definitions/opensea.Price" }, - "review_count": { + "total_offers": { + "example": 1, "type": "integer" - }, - "reviews": { - "items": { - "$ref": "#/definitions/quince.Review" - }, - "type": "array" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "quince.ProductVariant": { + "opensea.Order": { "properties": { - "currency": { + "end_time": { "type": "string" }, "id": { - "type": "integer" - }, - "in_stock": { - "type": "boolean" - }, - "options": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "type": "string" }, - "price": { - "type": "number" + "maker": { + "$ref": "#/definitions/opensea.Account" }, - "savings": { + "marketplace": { + "example": "opensea", "type": "string" }, - "sku": { - "type": "string" + "price": { + "$ref": "#/definitions/opensea.Price" }, - "status": { + "quantity": { + "example": "1", "type": "string" }, - "title": { + "start_time": { "type": "string" - }, - "traditional_retail_price": { - "type": "number" } }, "type": "object" }, - "quince.Review": { + "opensea.Price": { "properties": { - "author": { + "amount": { + "example": 7.85, + "type": "number" + }, + "chain": { + "example": "ethereum", "type": "string" }, - "body": { + "contract_address": { + "example": "0x0000000000000000000000000000000000000000", "type": "string" }, - "date_published": { + "currency": { + "example": "ETH", "type": "string" }, - "rating": { + "usd": { + "example": 19295.3, "type": "number" } }, "type": "object" }, - "quince.SearchResponse": { + "opensea.Profile": { "properties": { - "category": { + "address": { + "example": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045", "type": "string" }, - "color": { + "banner_image_url": { "type": "string" }, - "count": { - "type": "integer" - }, - "country": { + "display_name": { + "example": "vitalik.eth", "type": "string" }, - "department": { + "external_url": { "type": "string" }, - "fetched_at": { + "image_url": { "type": "string" }, - "limit": { - "type": "integer" + "is_verified": { + "type": "boolean" }, - "material": { + "kind": { + "example": "WALLET", "type": "string" }, - "max_price": { - "type": "number" + "twitter_username": { + "type": "string" }, - "min_price": { - "type": "number" + "username": { + "type": "string" + } + }, + "type": "object" + }, + "opensea.ProfileCollection": { + "properties": { + "collection": { + "$ref": "#/definitions/opensea.CollectionSummary" }, - "page": { + "item_count": { + "example": 1, "type": "integer" }, - "products": { + "total_quantity": { + "example": 1, + "type": "integer" + } + }, + "type": "object" + }, + "opensea.ProfileCollectionsResponse": { + "properties": { + "address": { + "type": "string" + }, + "collections": { "items": { - "$ref": "#/definitions/quince.Product" + "$ref": "#/definitions/opensea.ProfileCollection" }, "type": "array" }, - "query": { + "next_page_cursor": { "type": "string" - }, - "size": { + } + }, + "type": "object" + }, + "opensea.ProfileItemsResponse": { + "properties": { + "address": { + "example": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045", "type": "string" }, - "source_url": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/opensea.Item" + }, + "type": "array" }, - "total_pages": { - "type": "integer" + "next_page_cursor": { + "type": "string" }, - "total_results": { + "total_items": { + "example": 3441, "type": "integer" } }, "type": "object" }, - "quince.SitemapItem": { + "opensea.RankedCollection": { "properties": { - "loc": { - "type": "string" + "collection": { + "$ref": "#/definitions/opensea.CollectionSummary" }, - "type": { + "score": { + "example": "28.3713030851", "type": "string" } }, "type": "object" }, - "quince.SitemapURLItem": { + "opensea.RankingsResponse": { "properties": { - "handle": { + "collections": { + "items": { + "$ref": "#/definitions/opensea.RankedCollection" + }, + "type": "array" + }, + "next_page_cursor": { "type": "string" }, - "loc": { + "ranking": { + "example": "TRENDING", "type": "string" }, - "type": { + "timeframe": { + "example": "ONE_DAY", "type": "string" } }, "type": "object" }, - "quince.SitemapURLsResponse": { + "opensea.SocialProofResponse": { "properties": { - "fetched_at": { + "notable_collectors": { + "items": { + "$ref": "#/definitions/opensea.Account" + }, + "type": "array" + }, + "slug": { + "example": "boredapeyachtclub", "type": "string" }, - "limit": { + "social_count": { + "example": 5605, "type": "integer" - }, - "source_url": { + } + }, + "type": "object" + }, + "opensea.Trait": { + "properties": { + "trait_type": { + "example": "Background", "type": "string" }, - "type": { + "value": { + "example": "Orange", "type": "string" - }, - "urls": { - "items": { - "$ref": "#/definitions/quince.SitemapURLItem" - }, - "type": "array" } }, "type": "object" }, - "quince.SitemapsResponse": { + "opensea.TraitOfferAggregate": { "properties": { - "fetched_at": { + "id": { "type": "string" }, - "sitemaps": { - "items": { - "$ref": "#/definitions/quince.SitemapItem" - }, - "type": "array" + "price": { + "$ref": "#/definitions/opensea.Price" }, - "source_url": { + "total_offers": { + "example": 1, + "type": "integer" + }, + "trait_type": { + "example": "Fur", + "type": "string" + }, + "trait_value": { + "example": "Solid Gold", "type": "string" } }, "type": "object" }, - "quince.SuggestResponse": { + "opensea.TraitValue": { "properties": { - "fetched_at": { - "type": "string" + "count": { + "example": 1170, + "type": "integer" }, - "query": { + "value": { + "example": "Gray", "type": "string" + } + }, + "type": "object" + }, + "opensea.WindowStats": { + "properties": { + "floor_price_change": { + "example": 0.0065, + "type": "number" }, - "source_url": { - "type": "string" + "sales": { + "example": 42, + "type": "integer" }, - "suggestions": { - "items": { - "type": "string" - }, - "type": "array" + "volume_native": { + "example": 318.4, + "type": "number" + }, + "volume_usd": { + "example": 782344.1, + "type": "number" } }, "type": "object" }, - "quince.categoriesResponseDoc": { + "opensea.activityResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/quince.CategoriesResponse" + "$ref": "#/definitions/opensea.ActivityResponse" }, "msg": { "example": "OK", @@ -172378,14 +180210,14 @@ }, "type": "object" }, - "quince.navigationResponseDoc": { + "opensea.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/quince.NavigationResponse" + "$ref": "#/definitions/opensea.CategoriesResponse" }, "msg": { "example": "OK", @@ -172394,14 +180226,14 @@ }, "type": "object" }, - "quince.productFAQResponseDoc": { + "opensea.chainsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/quince.ProductFAQResponse" + "$ref": "#/definitions/opensea.ChainsResponse" }, "msg": { "example": "OK", @@ -172410,14 +180242,14 @@ }, "type": "object" }, - "quince.productResponseDoc": { + "opensea.chartResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/quince.ProductResponse" + "$ref": "#/definitions/opensea.ChartResponse" }, "msg": { "example": "OK", @@ -172426,14 +180258,14 @@ }, "type": "object" }, - "quince.productReviewsResponseDoc": { + "opensea.collectionHoldersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/quince.ProductReviewsResponse" + "$ref": "#/definitions/opensea.CollectionHoldersResponse" }, "msg": { "example": "OK", @@ -172442,14 +180274,14 @@ }, "type": "object" }, - "quince.searchResponseDoc": { + "opensea.collectionItemsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/quince.SearchResponse" + "$ref": "#/definitions/opensea.CollectionItemsResponse" }, "msg": { "example": "OK", @@ -172458,14 +180290,14 @@ }, "type": "object" }, - "quince.sitemapURLsResponseDoc": { + "opensea.collectionOffersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/quince.SitemapURLsResponse" + "$ref": "#/definitions/opensea.CollectionOffersResponse" }, "msg": { "example": "OK", @@ -172474,14 +180306,14 @@ }, "type": "object" }, - "quince.sitemapsResponseDoc": { + "opensea.collectionResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/quince.SitemapsResponse" + "$ref": "#/definitions/opensea.Collection" }, "msg": { "example": "OK", @@ -172490,14 +180322,14 @@ }, "type": "object" }, - "quince.suggestResponseDoc": { + "opensea.collectionSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/quince.SuggestResponse" + "$ref": "#/definitions/opensea.CollectionSearchResponse" }, "msg": { "example": "OK", @@ -172506,14 +180338,14 @@ }, "type": "object" }, - "qwant.suggestResponseDoc": { + "opensea.collectionShelfResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/suggest.Response" + "$ref": "#/definitions/opensea.CollectionShelfResponse" }, "msg": { "example": "OK", @@ -172522,281 +180354,190 @@ }, "type": "object" }, - "racing.RacingHorse": { + "opensea.collectionTopSalesResponseDoc": { "properties": { - "age": { - "type": "string" - }, - "color": { - "type": "string" - }, - "dam_name": { - "type": "string" - }, - "name": { - "type": "string" - }, - "sex": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "sire_name": { - "type": "string" + "data": { + "$ref": "#/definitions/opensea.CollectionTopSalesResponse" }, - "where_bred": { + "msg": { + "example": "OK", "type": "string" - }, - "year_of_birth": { - "type": "integer" } }, "type": "object" }, - "racing.RacingRace": { + "opensea.collectionTraitOffersResponseDoc": { "properties": { - "post_time_utc": { - "type": "string" - }, - "race_id": { - "type": "string" - }, - "race_number": { + "code": { + "example": 200, "type": "integer" }, - "status": { - "type": "string" - }, - "track_id": { - "type": "string" + "data": { + "$ref": "#/definitions/opensea.CollectionTraitOffersResponse" }, - "track_name": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "racing.RacingRaceCard": { + "opensea.collectionTraitsResponseDoc": { "properties": { - "distance": { - "type": "string" - }, - "entries": { - "items": { - "$ref": "#/definitions/racing.RacingRaceEntry" - }, - "type": "array" - }, - "entry_count": { - "type": "integer" - }, - "has_changes": { - "type": "boolean" - }, - "has_results": { - "type": "boolean" - }, - "id": { - "type": "string" - }, - "live_odds_available": { - "type": "boolean" - }, - "live_stream_status": { - "type": "string" - }, - "name": { - "type": "string" - }, - "number": { + "code": { + "example": 200, "type": "integer" }, - "post_time_utc": { - "type": "string" - }, - "purse": { - "type": "integer" + "data": { + "$ref": "#/definitions/opensea.CollectionTraitsResponse" }, - "replay_status": { + "msg": { + "example": "OK", "type": "string" - }, - "runner_count": { + } + }, + "type": "object" + }, + "opensea.collectionsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "status": { - "type": "string" - }, - "surface": { - "type": "string" - }, - "surface_condition": { - "type": "string" - }, - "track_type": { - "type": "string" + "data": { + "$ref": "#/definitions/opensea.CollectionsResponse" }, - "type": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "racing.RacingRaceEntry": { + "opensea.depthResponseDoc": { "properties": { - "finish_position": { + "code": { + "example": 200, "type": "integer" }, - "horse": { - "$ref": "#/definitions/racing.RacingHorse" - }, - "live_odds": { - "type": "string" - }, - "live_odds_favorite": { - "type": "boolean" - }, - "morning_line_favorite": { - "type": "boolean" + "data": { + "$ref": "#/definitions/opensea.DepthResponse" }, - "morning_line_odds": { + "msg": { + "example": "OK", "type": "string" - }, - "post_position": { + } + }, + "type": "object" + }, + "opensea.dropsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "program_number": { - "type": "string" - }, - "scratched": { - "type": "boolean" + "data": { + "$ref": "#/definitions/opensea.DropsResponse" }, - "weight": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "racing.RacingRaceInfoResponse": { + "opensea.itemOrdersResponseDoc": { "properties": { - "fetched_at": { - "type": "string" - }, - "is_historic": { - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "race": { - "$ref": "#/definitions/racing.RacingRaceCard" + "data": { + "$ref": "#/definitions/opensea.ItemOrdersResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" - }, - "track": { - "$ref": "#/definitions/racing.RacingRaceTrack" } }, "type": "object" }, - "racing.RacingRaceTrack": { + "opensea.itemOwnersResponseDoc": { "properties": { "code": { - "type": "string" - }, - "country_code": { - "type": "string" - }, - "id": { - "type": "string" + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/opensea.ItemOwnersResponse" }, - "type": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "racing.RacingScheduleResponse": { + "opensea.itemResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "races": { - "items": { - "$ref": "#/definitions/racing.RacingRace" - }, - "type": "array" + "data": { + "$ref": "#/definitions/opensea.Item" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "racing.RacingTrack": { + "opensea.itemSearchResponseDoc": { "properties": { - "active": { - "type": "boolean" - }, "code": { - "type": "string" - }, - "country_code": { - "type": "string" - }, - "id": { - "type": "string" - }, - "live_stream_state": { - "type": "string" - }, - "name": { - "type": "string" - }, - "race_count": { + "example": 200, "type": "integer" }, - "start_time": { - "type": "string" - }, - "status": { - "type": "string" + "data": { + "$ref": "#/definitions/opensea.ItemSearchResponse" }, - "type": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "racing.RacingTracksResponse": { + "opensea.itemsShelfResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" + "data": { + "$ref": "#/definitions/opensea.CollectionItemsShelfResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" - }, - "tracks": { - "items": { - "$ref": "#/definitions/racing.RacingTrack" - }, - "type": "array" } }, "type": "object" }, - "racing.racingRaceInfoResponseDoc": { + "opensea.profileCollectionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/racing.RacingRaceInfoResponse" + "$ref": "#/definitions/opensea.ProfileCollectionsResponse" }, "msg": { "example": "OK", @@ -172805,14 +180546,14 @@ }, "type": "object" }, - "racing.racingScheduleResponseDoc": { + "opensea.profileItemsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/racing.RacingScheduleResponse" + "$ref": "#/definitions/opensea.ProfileItemsResponse" }, "msg": { "example": "OK", @@ -172821,14 +180562,14 @@ }, "type": "object" }, - "racing.racingTracksResponseDoc": { + "opensea.profileResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/racing.RacingTracksResponse" + "$ref": "#/definitions/opensea.Profile" }, "msg": { "example": "OK", @@ -172837,500 +180578,501 @@ }, "type": "object" }, - "raisingcanes.DirectoryChild": { + "opensea.rankingsResponseDoc": { "properties": { - "is_store": { - "description": "IsStore marks a child that is a store page rather than another\ndirectory level -- call /raisingcanes/store with its path.", - "example": false, - "type": "boolean" - }, - "name": { - "example": "Louisiana", - "type": "string" - }, - "path": { - "example": "la", - "type": "string" - }, - "store_count": { - "description": "StoreCount is how many stores sit under this branch, as Yext reports\nit. Absent on the deepest level, where children are stores themselves.", - "example": 144, + "code": { + "example": 200, "type": "integer" }, - "url": { + "data": { + "$ref": "#/definitions/opensea.RankingsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "raisingcanes.DirectoryResponse": { + "opensea.socialProofResponseDoc": { "properties": { - "children": { - "items": { - "$ref": "#/definitions/raisingcanes.DirectoryChild" - }, - "type": "array" - }, - "count": { - "example": 38, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "example": "la", - "type": "string" + "data": { + "$ref": "#/definitions/opensea.SocialProofResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "raisingcanes.MenuItem": { + "opentable.Cuisine": { "properties": { - "description": { - "description": "Description is Raising Cane's own published item description,\nexactly as written -- it commonly ends with a calorie count or range\n(e.g. \"... 1290 - 1720 Cal\"), but the wording is not structured\nenough to split into separate fields reliably across every item.", - "example": "4 Chicken Fingers, Crinkle-Cut Fries, One Cane's Sauce®, Texas Toast, Coleslaw, Regular Fountain Drink/Tea (22 oz.) 1290 - 1720 Cal", - "type": "string" - }, - "image_url": { + "id": { "type": "string" }, "name": { - "example": "The Box Combo®", + "example": "Steakhouse", "type": "string" + }, + "primary": { + "type": "boolean" } }, "type": "object" }, - "raisingcanes.MenuResponse": { + "opentable.Menu": { "properties": { - "count": { - "example": 23, - "type": "integer" - }, - "fetched_at": { + "currency": { "type": "string" }, "sections": { "items": { - "$ref": "#/definitions/raisingcanes.MenuSection" + "$ref": "#/definitions/opentable.MenuSection" }, "type": "array" }, - "source_url": { + "title": { "type": "string" } }, "type": "object" }, - "raisingcanes.MenuSection": { + "opentable.MenuItem": { "properties": { - "anchor": { - "description": "Anchor is the section's in-page anchor slug, e.g. \"combos\".", - "example": "combos", + "description": { "type": "string" }, - "headline": { - "example": "Combos", + "price": { "type": "string" }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "opentable.MenuSection": { + "properties": { "items": { "items": { - "$ref": "#/definitions/raisingcanes.MenuItem" + "$ref": "#/definitions/opentable.MenuItem" }, "type": "array" + }, + "title": { + "type": "string" } }, "type": "object" }, - "raisingcanes.NearbyResponse": { + "opentable.MenusResponse": { "properties": { - "count": { - "example": 10, - "type": "integer" + "menus": { + "items": { + "$ref": "#/definitions/opentable.Menu" + }, + "type": "array" }, - "fetched_at": { + "restaurant_id": { + "type": "string" + } + }, + "type": "object" + }, + "opentable.PriceBand": { + "properties": { + "band": { + "example": "3", "type": "string" }, - "radius": { - "example": 25, - "type": "integer" + "label": { + "example": "$31 to $50", + "type": "string" + } + }, + "type": "object" + }, + "opentable.RestaurantResponse": { + "properties": { + "availability_date_time": { + "description": "AvailabilityDateTime echoes the DateTime the Timeslots below were\ncomputed for (either the caller's or the now-default GetRestaurant\napplies -- see its doc comment).", + "type": "string" }, - "source_url": { + "city": { "type": "string" }, - "stores": { + "country": { + "type": "string" + }, + "country_code": { + "type": "string" + }, + "cuisines": { "items": { - "$ref": "#/definitions/raisingcanes.NearbyStore" + "$ref": "#/definitions/opentable.Cuisine" }, "type": "array" }, - "total_in_radius": { - "description": "TotalInRadius is how many stores fall inside the radius overall, which\nis usually far more than one page. Use it with `offset` to page.", - "example": 69, - "type": "integer" - } - }, - "type": "object" - }, - "raisingcanes.NearbyStore": { - "properties": { - "address": { - "$ref": "#/definitions/raisingcanes.StoreAddress" + "currency_code": { + "type": "string" }, - "distance_kilometers": { - "example": 0.42, - "type": "number" + "description": { + "type": "string" }, - "distance_miles": { - "description": "DistanceMiles is measured from the requested coordinate.", - "example": 0.26, - "type": "number" + "dining_style": { + "type": "string" }, - "fulfillment_services": { - "description": "FulfillmentServices are the pickup/delivery service flags Raising\nCane's publishes for this store, e.g. IN_STORE_PICKUP,\nDELIVERY_NOT_OFFERED.", + "dress_code": { + "type": "string" + }, + "email": { + "type": "string" + }, + "features": { "items": { "type": "string" }, "type": "array" }, + "hours": { + "type": "string" + }, + "id": { + "type": "string" + }, "latitude": { - "example": 40.710412, "type": "number" }, + "line1": { + "type": "string" + }, + "line2": { + "type": "string" + }, "longitude": { - "example": -74.009937, "type": "number" }, + "max_advance_days": { + "type": "integer" + }, + "max_party_size": { + "type": "integer" + }, "name": { - "example": "Raising Cane's Chicken Fingers", "type": "string" }, - "path": { - "description": "Path is the /raisingcanes/store path for this store, so a caller can\ngo straight to the detail endpoint.", + "phone_number": { "type": "string" }, - "price_range": { - "description": "PriceRange is Raising Cane's own relative price tier, e.g. ONE.", - "example": "ONE", - "type": "string" + "photos_count": { + "type": "integer" }, - "store_id": { - "example": "C986", + "postal_code": { "type": "string" }, - "timezone": { - "example": "America/New_York", - "type": "string" - } - }, - "type": "object" - }, - "raisingcanes.PromotionCategory": { - "properties": { - "heading": { - "example": "Sweepstakes & Giveaways", + "price_band": { + "$ref": "#/definitions/opentable.PriceBand" + }, + "reviews": { + "$ref": "#/definitions/opentable.ReviewSummary" + }, + "state": { "type": "string" }, - "promotions": { + "timeslots": { "items": { - "$ref": "#/definitions/raisingcanes.PromotionSummary" + "$ref": "#/definitions/opentable.Timeslot" }, "type": "array" + }, + "website": { + "type": "string" } }, "type": "object" }, - "raisingcanes.PromotionResponse": { + "opentable.Review": { "properties": { - "description": { - "description": "Description is Raising Cane's own official-rules text for this\npromotion, kept as separate paragraphs in publication order rather\nthan joined into one string -- unlike a menu item's short blurb, this\nis often multi-paragraph legal text (eligibility, prize value,\neffective date each their own paragraph) where the paragraph breaks\ncarry real structure.", - "items": { - "type": "string" - }, - "type": "array" - }, - "fetched_at": { + "author": { "type": "string" }, - "path": { - "example": "first-50-promotion", + "author_metro": { "type": "string" }, - "source_url": { + "id": { "type": "string" }, - "title": { - "example": "First 50 Promotion Details", + "posted_date": { "type": "string" - } - }, - "type": "object" - }, - "raisingcanes.PromotionSummary": { - "properties": { - "name": { - "example": "First 50 Promotion Details", + }, + "recommended": { + "type": "boolean" + }, + "reservation_date": { "type": "string" }, - "path": { - "description": "Path is the promotion's page slug, usable as the path parameter on\nGET /raisingcanes/promotion. It is empty when Raising Cane's own\nindex links a since-expired promotion back to the homepage instead\nof removing the entry (a real, observed upstream data quality\npattern) -- a caller should treat an empty path as \"no longer\nresolvable\" rather than retry it.", - "example": "first-50-promotion", + "statistics": { + "$ref": "#/definitions/opentable.ReviewStatistics" + }, + "text": { "type": "string" } }, "type": "object" }, - "raisingcanes.PromotionsResponse": { + "opentable.ReviewStatistics": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/raisingcanes.PromotionCategory" - }, - "type": "array" + "ambience": { + "type": "number" }, - "count": { - "example": 53, - "type": "integer" + "food": { + "type": "number" }, - "fetched_at": { - "type": "string" + "noise": { + "type": "number" }, - "source_url": { - "type": "string" + "overall_rating": { + "type": "number" + }, + "service": { + "type": "number" + }, + "value": { + "type": "number" } }, "type": "object" }, - "raisingcanes.StoreAddress": { + "opentable.ReviewSummary": { "properties": { - "city": { - "example": "Gonzales", - "type": "string" + "ambience": { + "type": "number" }, - "country": { - "example": "US", - "type": "string" + "count": { + "type": "integer" }, - "line1": { - "example": "625 Airline Hwy", - "type": "string" + "food": { + "type": "number" }, - "line2": { - "type": "string" + "noise": { + "type": "number" }, - "postal_code": { - "example": "70737", - "type": "string" + "overall_rating": { + "example": 4.8, + "type": "number" }, - "region": { - "example": "LA", - "type": "string" + "review_count": { + "type": "integer" + }, + "service": { + "type": "number" + }, + "value": { + "type": "number" } }, "type": "object" }, - "raisingcanes.StoreHours": { + "opentable.ReviewsResponse": { "properties": { - "closed": { - "description": "Closed is true when Raising Cane's publishes the day with no open\ninterval.", - "example": false, - "type": "boolean" - }, - "closes": { - "example": "00:00", - "type": "string" + "page": { + "type": "integer" }, - "day_of_week": { - "example": "Monday", + "restaurant_id": { "type": "string" }, - "opens": { - "example": "09:00", - "type": "string" + "reviews": { + "items": { + "$ref": "#/definitions/opentable.Review" + }, + "type": "array" } }, "type": "object" }, - "raisingcanes.StoreResponse": { + "opentable.SearchResponse": { "properties": { - "address": { - "$ref": "#/definitions/raisingcanes.StoreAddress" - }, - "amenities": { - "description": "Amenities are Raising Cane's own per-store amenity labels, e.g.\nDRIVE_THRU, LATE_NIGHT, CURBSIDE_PICKUP.", - "items": { - "type": "string" - }, - "type": "array" - }, - "dine_in_hours": { - "description": "DineInHours and DriveThroughHours are Raising Cane's own per-channel\nhours. They commonly match Hours but are published separately and can\ndiffer (e.g. a later drive-thru close).", + "results": { "items": { - "$ref": "#/definitions/raisingcanes.StoreHours" + "$ref": "#/definitions/opentable.SearchResult" }, "type": "array" }, - "drive_through_hours": { - "items": { - "$ref": "#/definitions/raisingcanes.StoreHours" - }, - "type": "array" + "term": { + "type": "string" + } + }, + "type": "object" + }, + "opentable.SearchResult": { + "properties": { + "availability_date_time": { + "description": "AvailabilityDateTime/Timeslots mirror RestaurantResponse's inline\navailability -- search returns the same nested shape per result.", + "type": "string" }, - "fetched_at": { + "city": { "type": "string" }, - "fulfillment_services": { - "description": "FulfillmentServices are the pickup/delivery service flags Raising\nCane's publishes for this store, e.g. IN_STORE_PICKUP,\nCURBSIDE_PICKUP, DELIVERY_NOT_OFFERED.", - "items": { - "type": "string" - }, - "type": "array" + "country": { + "type": "string" }, - "google_place_id": { + "description": { "type": "string" }, - "hours": { - "description": "Hours is the store's general published week of hours.", - "items": { - "$ref": "#/definitions/raisingcanes.StoreHours" - }, - "type": "array" + "id": { + "type": "string" }, "latitude": { - "example": 30.2371547, "type": "number" }, + "line1": { + "type": "string" + }, + "line2": { + "type": "string" + }, "longitude": { - "example": -90.9132179, "type": "number" }, "name": { - "example": "Raising Cane's Chicken Fingers", - "type": "string" - }, - "path": { "type": "string" }, - "phone_number": { - "example": "(225) 407-4134", + "postal_code": { "type": "string" }, - "source_url": { + "state": { "type": "string" }, - "store_id": { - "example": "C10", - "type": "string" + "timeslots": { + "items": { + "$ref": "#/definitions/opentable.Timeslot" + }, + "type": "array" } }, "type": "object" }, - "raisingcanes.directoryResponseDoc": { + "opentable.Timeslot": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "available": { + "type": "boolean" + }, + "date_time": { + "example": "2026-08-03T19:00", + "type": "string" + }, + "points": { "type": "integer" }, - "data": { - "$ref": "#/definitions/raisingcanes.DirectoryResponse" + "price_amount": { + "type": "integer" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "redemption_tier": { + "type": "string" + }, + "token": { + "description": "Token is the upstream booking token for this slot. It is opaque and\nonly meaningful back to OpenTable's own booking flow -- this service\ndoes not implement booking, only discovery.", + "type": "string" + }, + "type": { + "example": "Standard", + "type": "string" } }, "type": "object" }, - "raisingcanes.menuResponseDoc": { + "opentable.menusResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/raisingcanes.MenuResponse" + "$ref": "#/definitions/opentable.MenusResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "raisingcanes.nearbyResponseDoc": { + "opentable.restaurantResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/raisingcanes.NearbyResponse" + "$ref": "#/definitions/opentable.RestaurantResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "raisingcanes.promotionResponseDoc": { + "opentable.reviewsResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/raisingcanes.PromotionResponse" + "$ref": "#/definitions/opentable.ReviewsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "raisingcanes.promotionsResponseDoc": { + "opentable.searchResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/raisingcanes.PromotionsResponse" + "$ref": "#/definitions/opentable.SearchResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "raisingcanes.storeResponseDoc": { + "otto.CategoriesResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "categories": { + "items": { + "$ref": "#/definitions/otto.Category" + }, + "type": "array" + }, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/raisingcanes.StoreResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "source_url": { + "type": "string" } }, "type": "object" }, - "rappler.AuthorArticle": { + "otto.Category": { "properties": { - "published_at": { - "type": "string" - }, - "section": { - "type": "string" - }, - "title": { + "name": { "type": "string" }, "url": { @@ -173339,24 +181081,33 @@ }, "type": "object" }, - "rappler.AuthorResponse": { + "otto.Product": { "properties": { - "articles": { + "brand": { + "type": "string" + }, + "colors": { "items": { - "$ref": "#/definitions/rappler.AuthorArticle" + "type": "string" }, "type": "array" }, - "bio": { + "currency": { "type": "string" }, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, "name": { "type": "string" }, - "slug": { - "type": "string" + "price": { + "type": "number" }, - "social_links": { + "sizes": { "items": { "type": "string" }, @@ -173368,101 +181119,148 @@ }, "type": "object" }, - "rawstory.AuthorArticle": { + "otto.ProductResponse": { "properties": { - "published_at": { - "description": "PublishedAt is the story's publication date (YYYY-MM-DD); the author\nlisting carries the date but not the time of day.", - "type": "string" + "browser_rendered": { + "type": "boolean" }, - "title": { + "fetched_at": { "type": "string" }, - "url": { - "type": "string" + "product": { + "$ref": "#/definitions/otto.Product" } }, "type": "object" }, - "rawstory.AuthorResponse": { + "otto.ProductSummary": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/rawstory.AuthorArticle" - }, - "type": "array" + "brand": { + "type": "string" }, - "bio": { + "currency": { "type": "string" }, - "image_url": { + "image": { "type": "string" }, "name": { "type": "string" }, - "slug": { + "price": { + "type": "number" + }, + "product_id": { "type": "string" }, - "social_links": { + "url": { + "type": "string" + }, + "variation_id": { + "type": "string" + } + }, + "type": "object" + }, + "otto.SearchResponse": { + "properties": { + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "offset": { + "type": "integer" + }, + "products": { "items": { - "type": "string" + "$ref": "#/definitions/otto.ProductSummary" }, "type": "array" }, - "url": { + "query": { + "type": "string" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "reachplc.AuthorArticle": { + "otto.categoriesResponseDoc": { "properties": { - "label": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "label_url": { + "data": { + "$ref": "#/definitions/otto.CategoriesResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "otto.productResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "title": { + "data": { + "$ref": "#/definitions/otto.ProductResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "otto.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "url": { + "data": { + "$ref": "#/definitions/otto.SearchResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "reachplc.AuthorResponse": { + "pagesix.AuthorResponse": { "properties": { "articles": { "items": { - "$ref": "#/definitions/reachplc.AuthorArticle" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "bio": { - "type": "string" - }, - "email": { - "type": "string" - }, - "has_next_page": { - "type": "boolean" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "job_title": { + "image_url": { "type": "string" }, "name": { "type": "string" }, - "page": { - "type": "integer" - }, - "slug": { - "type": "string" - }, - "twitter": { - "type": "string" + "social_links": { + "items": { + "$ref": "#/definitions/pagesix.AuthorSocialLink" + }, + "type": "array" }, "url": { "type": "string" @@ -173470,367 +181268,377 @@ }, "type": "object" }, - "reddit.ArchiveBatchSource": { + "pagesix.AuthorSocialLink": { "properties": { - "requests": { - "example": 2, - "type": "integer" - }, "type": { - "example": "arctic_shift", "type": "string" }, "url": { - "example": "https://arctic-shift.photon-reddit.com/api/posts/ids", "type": "string" } }, "type": "object" }, - "reddit.ArchiveComment": { + "pandamart.CategoriesResponse": { "properties": { - "author": { - "example": "reddit_user", - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/pandamart.Category" + }, + "type": "array" }, - "author_flair_text": { + "code": { "type": "string" }, - "author_fullname": { + "market": { + "type": "string" + } + }, + "type": "object" + }, + "pandamart.Category": { + "properties": { + "id": { "type": "string" }, - "body": { + "image_url": { "type": "string" }, - "created_utc": { - "example": 1713484800, - "type": "integer" + "name": { + "type": "string" }, - "depth": { + "product_count": { "type": "integer" }, - "distinguished": { + "sub_categories": { + "items": { + "$ref": "#/definitions/pandamart.Category" + }, + "type": "array" + } + }, + "type": "object" + }, + "pandamart.Chain": { + "properties": { + "code": { "type": "string" }, - "id": { - "example": "kabc123", + "name": { "type": "string" - }, - "link_id": { - "example": "t3_1abcxyz", + } + }, + "type": "object" + }, + "pandamart.Product": { + "properties": { + "description": { "type": "string" }, - "name": { - "example": "t1_kabc123", + "discount_badge": { "type": "string" }, - "parent_id": { - "example": "t3_1abcxyz", + "id": { "type": "string" }, - "permalink": { + "image_url": { "type": "string" }, - "removed_by_category": { + "is_available": { + "type": "boolean" + }, + "name": { "type": "string" }, - "retrieved_on": { - "example": 1713484820, - "type": "integer" + "original_price": { + "type": "number" }, - "score": { - "example": 3, - "type": "integer" + "price": { + "type": "number" }, - "subreddit": { - "example": "OpenAI", + "sku": { "type": "string" }, - "subreddit_id": { - "type": "string" + "stock_amount": { + "type": "integer" } }, "type": "object" }, - "reddit.ArchiveCommentTreeEntry": { + "pandamart.ProductAttributes": { "properties": { - "comment": { - "$ref": "#/definitions/reddit.ArchiveCommentTreeNode" + "base_content_value": { + "type": "number" }, - "kind": { - "enum": [ - "t1", - "more" - ], - "example": "t1", + "base_unit": { "type": "string" }, - "more": { - "$ref": "#/definitions/reddit.ArchiveMoreComments" - } - }, - "type": "object" - }, - "reddit.ArchiveCommentTreeNode": { - "properties": { - "comment": { - "$ref": "#/definitions/reddit.ArchiveComment" + "nutrition_grade": { + "type": "string" }, - "replies": { - "items": { - "$ref": "#/definitions/reddit.ArchiveCommentTreeEntry" - }, - "type": "array" + "price_per_base_unit": { + "type": "number" } }, "type": "object" }, - "reddit.ArchiveCommentsIDsResponse": { + "pandamart.ProductDetailResponse": { "properties": { - "comments": { - "items": { - "$ref": "#/definitions/reddit.ArchiveComment" - }, - "type": "array" - }, - "missing_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "requested_count": { - "type": "integer" - }, - "returned_count": { - "type": "integer" + "attributes": { + "$ref": "#/definitions/pandamart.ProductAttributes" }, - "source": { - "$ref": "#/definitions/reddit.ArchiveBatchSource" - } - }, - "type": "object" - }, - "reddit.ArchiveCommentsSearchResponse": { - "properties": { - "author": { + "category_id": { "type": "string" }, - "comments": { - "items": { - "$ref": "#/definitions/reddit.ArchiveComment" - }, - "type": "array" - }, - "created_after": { + "code": { "type": "string" }, - "created_before": { + "description": { "type": "string" }, - "limit": { - "example": 25, - "type": "integer" + "discount_badge": { + "type": "string" }, - "link_id": { + "id": { "type": "string" }, - "parent_id": { + "image_url": { "type": "string" }, - "query": { + "is_available": { + "type": "boolean" + }, + "market": { "type": "string" }, - "sort": { - "example": "desc", + "name": { "type": "string" }, - "source": { - "$ref": "#/definitions/reddit.SourceDetail" + "original_price": { + "type": "number" }, - "subreddit": { + "price": { + "type": "number" + }, + "sku": { "type": "string" + }, + "stock_amount": { + "type": "integer" } }, "type": "object" }, - "reddit.ArchiveCommentsTreeResponse": { + "pandamart.ProductShelf": { "properties": { - "comments": { + "items": { "items": { - "$ref": "#/definitions/reddit.ArchiveCommentTreeEntry" + "$ref": "#/definitions/pandamart.Product" }, "type": "array" }, - "limit": { - "example": 50, - "type": "integer" - }, - "parent_id": { + "title": { "type": "string" - }, - "post_id": { - "example": "7cff0b", + } + }, + "type": "object" + }, + "pandamart.ProductsResponse": { + "properties": { + "code": { "type": "string" }, - "source": { - "$ref": "#/definitions/reddit.SourceDetail" - }, - "start_breadth": { - "example": 2, + "item_count": { "type": "integer" }, - "start_depth": { - "example": 3, - "type": "integer" + "market": { + "type": "string" + }, + "shelves": { + "items": { + "$ref": "#/definitions/pandamart.ProductShelf" + }, + "type": "array" } }, "type": "object" }, - "reddit.ArchiveMoreComments": { + "pandamart.SearchResponse": { "properties": { - "children": { - "items": { - "type": "string" - }, - "type": "array" - }, - "count": { - "example": 12, - "type": "integer" - }, - "depth": { - "example": 3, + "available_count": { "type": "integer" }, - "id": { + "market": { "type": "string" }, - "name": { - "type": "string" + "offset": { + "type": "integer" }, - "parent_id": { - "type": "string" + "returned_count": { + "type": "integer" + }, + "stores": { + "items": { + "$ref": "#/definitions/pandamart.Store" + }, + "type": "array" } }, "type": "object" }, - "reddit.ArchivePost": { + "pandamart.Store": { "properties": { - "author": { - "example": "reddit_user", + "address": { "type": "string" }, - "author_flair_text": { + "budget": { + "type": "integer" + }, + "chain": { + "$ref": "#/definitions/pandamart.Chain" + }, + "city": { "type": "string" }, - "author_fullname": { + "code": { "type": "string" }, - "created_utc": { - "example": 1713484800, - "type": "integer" + "distance_km": { + "type": "number" }, - "crosspost_parent": { + "has_discount": { + "type": "boolean" + }, + "hero_image_url": { "type": "string" }, - "distinguished": { + "is_delivery_available": { + "type": "boolean" + }, + "is_pickup_available": { + "type": "boolean" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "minimum_delivery_fee": { + "type": "number" + }, + "minimum_delivery_time_minutes": { + "type": "number" + }, + "minimum_order_amount": { + "type": "number" + }, + "name": { "type": "string" }, - "id": { - "example": "1abcxyz", + "tags": { + "items": { + "$ref": "#/definitions/pandamart.Tag" + }, + "type": "array" + }, + "timezone": { "type": "string" }, - "link_flair_text": { + "web_path": { + "type": "string" + } + }, + "type": "object" + }, + "pandamart.StoreResponse": { + "properties": { + "address": { "type": "string" }, - "num_comments": { - "example": 12, + "budget": { "type": "integer" }, - "over_18": { - "type": "boolean" + "chain": { + "$ref": "#/definitions/pandamart.Chain" }, - "post_hint": { + "city": { "type": "string" }, - "removed_by_category": { + "code": { "type": "string" }, - "retrieved_on": { - "example": 1713484820, - "type": "integer" + "distance_km": { + "type": "number" }, - "score": { - "example": 42, - "type": "integer" + "has_discount": { + "type": "boolean" }, - "selftext": { + "hero_image_url": { "type": "string" }, - "spoiler": { + "is_delivery_available": { "type": "boolean" }, - "subreddit": { - "example": "OpenAI", - "type": "string" + "is_pickup_available": { + "type": "boolean" }, - "subreddit_id": { - "type": "string" + "latitude": { + "type": "number" }, - "title": { + "longitude": { + "type": "number" + }, + "market": { "type": "string" }, - "url": { + "minimum_delivery_fee": { + "type": "number" + }, + "minimum_delivery_time_minutes": { + "type": "number" + }, + "minimum_order_amount": { + "type": "number" + }, + "name": { "type": "string" - } - }, - "type": "object" - }, - "reddit.ArchivePostsIDsResponse": { - "properties": { - "missing_ids": { - "items": { - "type": "string" - }, - "type": "array" }, - "posts": { + "tags": { "items": { - "$ref": "#/definitions/reddit.ArchivePost" + "$ref": "#/definitions/pandamart.Tag" }, "type": "array" }, - "requested_count": { - "type": "integer" - }, - "returned_count": { - "type": "integer" + "timezone": { + "type": "string" }, - "source": { - "$ref": "#/definitions/reddit.ArchiveBatchSource" + "web_path": { + "type": "string" } }, "type": "object" }, - "reddit.ArchivePostsSearchResponse": { + "pandamart.StoreSearchResponse": { "properties": { - "author": { + "code": { "type": "string" }, - "created_after": { - "type": "string" + "has_more": { + "type": "boolean" }, - "created_before": { + "limit": { + "type": "integer" + }, + "market": { "type": "string" }, - "limit": { - "example": 25, + "page": { "type": "integer" }, - "posts": { + "products": { "items": { - "$ref": "#/definitions/reddit.ArchivePost" + "$ref": "#/definitions/pandamart.Product" }, "type": "array" }, @@ -173838,2083 +181646,2414 @@ "type": "string" }, "sort": { - "example": "desc", "type": "string" }, - "source": { - "$ref": "#/definitions/reddit.SourceDetail" - }, - "subreddit": { + "total_products": { + "type": "integer" + } + }, + "type": "object" + }, + "pandamart.Tag": { + "properties": { + "code": { "type": "string" }, - "url": { + "text": { "type": "string" - }, - "url_exact": { - "type": "boolean" } }, "type": "object" }, - "reddit.ArchiveSubreddit": { + "pandamart.categoriesResponseDoc": { "properties": { - "created_utc": { - "example": 1449870564, + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "display_name": { - "example": "OpenAI", - "type": "string" - }, - "id": { - "example": "3b9u5", - "type": "string" - }, - "over_18": { - "type": "boolean" + "data": { + "$ref": "#/definitions/pandamart.CategoriesResponse" }, - "retrieved_on": { - "example": 1739566084, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "pandamart.productDetailResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "subscribers": { - "example": 2239919, - "type": "integer" + "data": { + "$ref": "#/definitions/pandamart.ProductDetailResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "reddit.ArchiveSubredditsSearchResponse": { + "pandamart.productsResponseDoc": { "properties": { - "limit": { - "example": 25, + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "max_subscribers": { - "type": "integer" + "data": { + "$ref": "#/definitions/pandamart.ProductsResponse" }, - "min_subscribers": { + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "pandamart.searchResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "over_18": { - "type": "boolean" + "data": { + "$ref": "#/definitions/pandamart.SearchResponse" }, - "query": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "pandamart.storeResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "sort": { - "example": "desc", - "type": "string" + "data": { + "$ref": "#/definitions/pandamart.StoreResponse" }, - "sort_by": { - "example": "subscribers", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "pandamart.storeSearchResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "source": { - "$ref": "#/definitions/reddit.SourceDetail" + "data": { + "$ref": "#/definitions/pandamart.StoreSearchResponse" }, - "subreddits": { - "items": { - "$ref": "#/definitions/reddit.ArchiveSubreddit" - }, - "type": "array" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "reddit.ArchiveTimeSeriesPoint": { + "panera.AtWorkDropOff": { "properties": { - "date": { - "example": 1704067200, - "type": "integer" + "cutoff_time": { + "example": "09:00", + "type": "string" }, - "value": { - "example": 24979, - "type": "number" + "day_of_week": { + "example": "Monday", + "type": "string" + }, + "drop_off_time": { + "example": "10:45", + "type": "string" } }, "type": "object" }, - "reddit.ArchiveTimeSeriesResponse": { + "panera.AtWorkLocation": { "properties": { - "created_after": { - "example": "2024-01-01", + "active": { + "example": true, + "type": "boolean" + }, + "city": { + "example": "Fenton", "type": "string" }, - "created_before": { - "example": "2025-01-01", + "contact_name": { "type": "string" }, - "metric": { - "example": "posts_count", + "contact_phone": { "type": "string" }, - "points": { + "country": { + "example": "US", + "type": "string" + }, + "drop_off_schedule": { "items": { - "$ref": "#/definitions/reddit.ArchiveTimeSeriesPoint" + "$ref": "#/definitions/panera.AtWorkDropOff" }, "type": "array" }, - "precision": { - "example": "year", + "id": { + "example": "P2U-000320", "type": "string" }, - "source": { - "$ref": "#/definitions/reddit.SourceDetail" + "latitude": { + "example": 38.5401336, + "type": "number" }, - "subreddit": { - "example": "OpenAI", + "lead_time_minutes": { + "example": 90, + "type": "integer" + }, + "location_type": { + "example": "Office/Production Facility/Other", + "type": "string" + }, + "longitude": { + "example": -90.4772361, + "type": "number" + }, + "name": { + "example": "Panera Bread Support Center", + "type": "string" + }, + "postal_code": { + "example": "63026", + "type": "string" + }, + "service_cafe_id": { + "example": "600668", + "type": "string" + }, + "state": { + "example": "MO", + "type": "string" + }, + "street": { + "example": "1400 S Hwy Dr", "type": "string" } }, "type": "object" }, - "reddit.Author": { + "panera.AtWorkLocationsResponse": { "properties": { - "name": { - "description": "Reddit username of the author.", - "example": "reddit_user", + "count": { + "example": 2, + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "profile_url": { - "description": "URL of the author's Reddit profile page.", - "example": "https://www.reddit.com/user/reddit_user/", + "locations": { + "items": { + "$ref": "#/definitions/panera.AtWorkLocation" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "reddit.Comment": { + "panera.CafeResponse": { "properties": { - "author": { - "allOf": [ - { - "$ref": "#/definitions/reddit.Author" - } - ], - "description": "Reddit user who wrote the comment." + "available": { + "example": true, + "type": "boolean" }, - "award_count": { - "description": "Number of awards the comment received. Set only when metrics are requested.", + "cafe_id": { + "example": 601447, "type": "integer" }, - "body": { - "description": "Text of the comment as written by the author.", - "example": "I agree with this post.", + "city": { + "example": "Addison", "type": "string" }, - "created": { - "description": "Time the comment was posted, in UTC (RFC 3339).", - "example": "2024-04-19T00:00:00Z", + "features": { + "description": "Features are Panera's own per-cafe amenity flags that are true for\nthis cafe (e.g. hasDriveThru, hasDelivery, hasCurbside, hasKiosk).", + "items": { + "type": "string" + }, + "type": "array" + }, + "fetched_at": { "type": "string" }, - "created_utc": { - "description": "Time the comment was posted, in Unix seconds.", - "example": 1713484800, - "type": "integer" + "fulfillment": { + "description": "Fulfillment is one entry per channel Panera publishes availability\nfor at this cafe.", + "items": { + "$ref": "#/definitions/panera.Fulfillment" + }, + "type": "array" }, - "depth": { - "description": "Nesting level of the comment in the thread.", - "example": 1, - "type": "integer" + "latitude": { + "example": 41.948594, + "type": "number" }, - "id": { - "description": "Reddit comment id.", - "example": "kabc123", - "type": "string" + "longitude": { + "example": -88.026398, + "type": "number" }, "name": { - "description": "Reddit full name of the comment, the id prefixed with `t1_`.", - "example": "t1_kabc123", + "example": "Addison - W Lake St east of Rohlwing Rd", "type": "string" }, - "parent_id": { - "description": "Full name of the post or comment this comment replies to, for example `t3_1abcxyz`.", - "example": "t3_1abcxyz", + "open_now": { + "example": true, + "type": "boolean" + }, + "phone": { + "example": "630-250-4952", "type": "string" }, - "permalink": { - "description": "Reddit URL of the comment.", - "example": "https://www.reddit.com/r/OpenAI/comments/1abcxyz/openai_discussion_thread/kabc123/", + "postal_code": { + "example": "60101", "type": "string" }, - "replies": { - "description": "Replies to this comment, in the same shape.", + "source_url": { + "type": "string" + }, + "state": { + "example": "IL", + "type": "string" + }, + "street": { + "example": "1600 West Lake Street", + "type": "string" + }, + "timezone": { + "example": "America/Chicago", + "type": "string" + }, + "upcoming_hours": { + "description": "UpcomingHours is the published storefront schedule for the next\ncalendar week, with concrete dates rather than abstract weekdays.", "items": { - "$ref": "#/definitions/reddit.Comment" + "$ref": "#/definitions/panera.UpcomingDay" }, "type": "array" - }, - "score": { - "description": "Net score of the comment. Set only when metrics are requested.", - "type": "integer" } }, "type": "object" }, - "reddit.CommentsResponse": { + "panera.CateringCategory": { "properties": { - "comments": { - "description": "Comments on the post.", + "cat_id": { + "example": 181, + "type": "integer" + }, + "image_key": { + "type": "string" + }, + "item_ids": { + "description": "ItemIDs are the items under this category. Look them up in the\nresponse's top-level Items list.", "items": { - "$ref": "#/definitions/reddit.Comment" + "type": "integer" }, "type": "array" }, - "metrics_source": { - "allOf": [ - { - "$ref": "#/definitions/reddit.SourceDetail" - } - ], - "description": "Source the engagement metrics were read from, with its type and URL. Set only when metrics are requested." - }, - "post": { - "allOf": [ - { - "$ref": "#/definitions/reddit.Post" - } - ], - "description": "Post the comments belong to." + "name": { + "example": "Sandwiches", + "type": "string" }, - "source": { - "allOf": [ - { - "$ref": "#/definitions/reddit.SourceDetail" - } - ], - "description": "Reddit page the comments were read from." + "sort_weight": { + "type": "integer" } }, "type": "object" }, - "reddit.DomainPostsResponse": { + "panera.CateringDeliveryInfoResponse": { "properties": { - "domain": { - "example": "openai.com", - "type": "string" - }, - "pagination": { - "$ref": "#/definitions/reddit.Pagination" - }, - "posts": { + "available_dates": { "items": { - "$ref": "#/definitions/reddit.Post" + "$ref": "#/definitions/panera.CateringDeliverySlotDay" }, "type": "array" }, - "sort": { - "example": "hot", - "type": "string" + "cafe_id": { + "example": 606477, + "type": "integer" }, - "source": { - "$ref": "#/definitions/reddit.SourceDetail" + "delivery_fee": { + "example": 15, + "type": "number" }, - "time": { - "example": "week", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "reddit.MultiSubredditPostsResponse": { - "properties": { - "pagination": { - "allOf": [ - { - "$ref": "#/definitions/reddit.Pagination" - } - ], - "description": "Page size and cursor for the next page." }, - "posts": { - "description": "Posts from the requested subreddits.", + "hours": { "items": { - "$ref": "#/definitions/reddit.Post" + "$ref": "#/definitions/panera.DayHours" }, "type": "array" }, - "sort": { - "description": "Sort order that was applied, for example `hot`.", - "example": "hot", - "type": "string" - }, - "source": { - "allOf": [ - { - "$ref": "#/definitions/reddit.SourceDetail" - } - ], - "description": "Reddit page the posts were read from." - }, - "subreddits": { - "description": "Names of the subreddits that were queried.", - "example": [ - "OpenAI", - "MachineLearning" - ], + "lead_times": { "items": { - "type": "string" + "$ref": "#/definitions/panera.CateringDeliveryLeadTime" }, "type": "array" }, - "time": { - "description": "Time window that was applied, for example `week`.", - "example": "week", + "min_order_amount": { + "example": 50, + "type": "number" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "reddit.Pagination": { + "panera.CateringDeliveryLeadTime": { "properties": { - "after": { - "description": "Cursor to pass as the `after` parameter to fetch the next page.", - "example": "t3_1abcxyz", - "type": "string" + "is_large_order_tier": { + "example": true, + "type": "boolean" }, - "limit": { - "description": "Maximum number of items requested for this page.", - "example": 25, + "lead_time_minutes": { + "example": 240, "type": "integer" + }, + "min_order_amount": { + "example": 750, + "type": "number" } }, "type": "object" }, - "reddit.Post": { + "panera.CateringDeliverySlotDay": { "properties": { - "author": { - "allOf": [ - { - "$ref": "#/definitions/reddit.Author" - } - ], - "description": "Reddit user who submitted the post." - }, - "award_count": { - "description": "Number of awards the post received. Set only when metrics are requested.", - "type": "integer" - }, - "comment_count": { - "description": "Number of comments on the post. Set only when metrics are requested.", - "type": "integer" - }, - "created": { - "description": "Time the post was submitted, in UTC (RFC 3339).", - "example": "2024-04-19T00:00:00Z", - "type": "string" - }, - "created_utc": { - "description": "Time the post was submitted, in Unix seconds.", - "example": 1713484800, - "type": "integer" - }, - "domain": { - "description": "Domain of the linked content, or `self.` for text posts.", - "example": "self.OpenAI", + "date": { + "example": "2026-09-10", "type": "string" }, - "estimated_downvotes": { - "description": "Approximate downvote total worked out from the score and upvote ratio. Reddit does not publish exact counts.", - "type": "integer" + "ranges": { + "items": { + "$ref": "#/definitions/panera.HourRange" + }, + "type": "array" + } + }, + "type": "object" + }, + "panera.CateringMenuItem": { + "properties": { + "allergens": { + "$ref": "#/definitions/panera.MenuAllergens" }, - "estimated_upvotes": { - "description": "Approximate upvote total worked out from the score and upvote ratio. Reddit does not publish exact counts.", - "type": "integer" + "customizable": { + "example": true, + "type": "boolean" }, - "flair": { - "description": "Flair text attached to the post.", - "example": "Discussion", + "description": { "type": "string" }, - "id": { - "description": "Reddit post id.", - "example": "1abcxyz", + "image_key": { "type": "string" }, - "is_self": { - "description": "Whether the post is a text post rather than a link.", - "type": "boolean" - }, - "is_video": { - "description": "Whether the post is a video.", + "in_stock": { + "description": "InStock reflects this cafe's live catering stockout feed for today's\nfulfillment date. false means Panera currently has this item\nunavailable to order for catering at this specific cafe.", + "example": true, "type": "boolean" }, - "locked": { - "description": "Whether the post is locked against new comments.", - "type": "boolean" + "item_id": { + "example": 647093, + "type": "integer" }, "name": { - "description": "Reddit full name of the post, the id prefixed with `t3_`.", - "example": "t3_1abcxyz", + "example": "Ciabatta Sausage, Egg & Cheese Sandwich", "type": "string" }, - "over_18": { - "description": "Whether the post is marked as 18+ content.", - "type": "boolean" + "nutrients": { + "items": { + "$ref": "#/definitions/panera.MenuNutrient" + }, + "type": "array" }, - "permalink": { - "description": "Reddit URL of the post's comments page.", - "example": "https://www.reddit.com/r/OpenAI/comments/1abcxyz/openai_discussion_thread/", + "portion": { + "example": "Individual", "type": "string" }, - "score": { - "description": "Net score of the post, upvotes minus downvotes as Reddit shows it. Set only when metrics are requested.", - "type": "integer" + "price": { + "example": 10.99, + "type": "number" }, - "selftext": { - "description": "Body text of a text post.", - "example": "Discussion body", + "product_type": { + "example": "SANDWICH", "type": "string" + } + }, + "type": "object" + }, + "panera.CateringMenuResponse": { + "properties": { + "cafe_id": { + "example": 601447, + "type": "integer" }, - "source_feed_url": { - "description": "URL of the Reddit feed the post was read from.", - "example": "https://www.reddit.com/r/OpenAI/.rss", - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/panera.CateringCategory" + }, + "type": "array" }, - "stickied": { - "description": "Whether the post is pinned to the top of its subreddit.", - "type": "boolean" + "count": { + "example": 257, + "type": "integer" }, - "subreddit": { - "description": "Name of the subreddit the post belongs to, without `r/`.", - "example": "OpenAI", + "fetched_at": { "type": "string" }, - "thumbnail": { - "description": "URL of the post thumbnail image.", - "example": "https://b.thumbs.redditmedia.com/example.jpg", - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/panera.CateringMenuItem" + }, + "type": "array" }, - "title": { - "description": "Title of the post as submitted.", - "example": "OpenAI discussion thread", + "source_url": { "type": "string" - }, - "upvote_ratio": { - "description": "Share of votes that are upvotes, from 0 to 1. Set only when metrics are requested.", - "type": "number" - }, - "url": { - "description": "Reddit URL of the post.", - "example": "https://www.reddit.com/r/OpenAI/comments/1abcxyz/openai_discussion_thread/", + } + }, + "type": "object" + }, + "panera.DayHours": { + "properties": { + "day_of_week": { + "example": "Monday", "type": "string" }, - "vote_counts_estimated": { - "description": "Whether `estimated_upvotes` and `estimated_downvotes` are estimates.", - "type": "boolean" + "ranges": { + "items": { + "$ref": "#/definitions/panera.HourRange" + }, + "type": "array" } }, "type": "object" }, - "reddit.PostResponse": { + "panera.Fulfillment": { "properties": { - "metrics_source": { - "allOf": [ - { - "$ref": "#/definitions/reddit.SourceDetail" - } - ], - "description": "Source the engagement metrics were read from, with its type and URL. Set only when metrics are requested." + "available": { + "example": true, + "type": "boolean" }, - "post": { - "allOf": [ - { - "$ref": "#/definitions/reddit.Post" - } - ], - "description": "The requested post." + "hours": { + "items": { + "$ref": "#/definitions/panera.DayHours" + }, + "type": "array" }, - "source": { - "allOf": [ - { - "$ref": "#/definitions/reddit.SourceDetail" - } - ], - "description": "Reddit page the post was read from." + "lead_time_minutes": { + "example": 20, + "type": "integer" + }, + "open_now": { + "example": true, + "type": "boolean" + }, + "type": { + "example": "delivery", + "type": "string" } }, "type": "object" }, - "reddit.SearchResponse": { + "panera.GeocodeResponse": { "properties": { - "pagination": { - "allOf": [ - { - "$ref": "#/definitions/reddit.Pagination" - } - ], - "description": "Page size and cursor for the next page." + "address": { + "example": "Chicago, IL", + "type": "string" }, - "posts": { - "description": "Posts matching the search.", + "count": { + "example": 1, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "results": { "items": { - "$ref": "#/definitions/reddit.Post" + "$ref": "#/definitions/panera.GeocodeResult" }, "type": "array" }, - "query": { - "description": "Search query that was run.", - "example": "openai", + "source_url": { "type": "string" - }, - "sort": { - "description": "Sort order that was applied, for example `relevance`.", - "example": "relevance", + } + }, + "type": "object" + }, + "panera.GeocodeResult": { + "properties": { + "city": { + "example": "Chicago", "type": "string" }, - "source": { - "allOf": [ - { - "$ref": "#/definitions/reddit.SourceDetail" - } - ], - "description": "Reddit page the results were read from." + "country": { + "example": "US", + "type": "string" }, - "subreddit": { - "description": "Subreddit the search was limited to. Omitted when the search covered all of Reddit.", - "example": "OpenAI", + "formatted_address": { + "example": "Chicago, IL US", "type": "string" }, - "time": { - "description": "Time window that was applied, for example `week`.", - "example": "week", + "latitude": { + "example": 41.85003, + "type": "number" + }, + "longitude": { + "example": -87.65005, + "type": "number" + }, + "resolved": { + "description": "Resolved is false when Panera could not geocode the address at all\n(an empty, malformed, or nonsense query).", + "example": true, + "type": "boolean" + }, + "state": { + "example": "IL", "type": "string" } }, "type": "object" }, - "reddit.SourceDetail": { + "panera.HourRange": { "properties": { - "type": { - "description": "Kind of Reddit source the data was read from.", - "example": "rss", + "close": { + "example": "21:00", "type": "string" }, - "url": { - "description": "Reddit URL the data was read from.", - "example": "https://www.reddit.com/r/OpenAI/.rss", + "open": { + "example": "06:00", "type": "string" } }, "type": "object" }, - "reddit.SubredditAboutResponse": { + "panera.ItemDetailResponse": { "properties": { - "display_name": { - "description": "Subreddit name in `r/name` form.", - "example": "r/OpenAI", + "allergens": { + "$ref": "#/definitions/panera.MenuAllergens" + }, + "cafe_id": { + "example": 601447, + "type": "integer" + }, + "description": { "type": "string" }, - "feed_url": { - "description": "URL of the subreddit's Reddit feed that the recent posts were read from.", - "example": "https://www.reddit.com/r/OpenAI.rss?limit=10", + "fetched_at": { "type": "string" }, - "latest_post_created": { - "description": "Time the newest recent post was submitted, in UTC (RFC 3339).", - "example": "2024-04-19T00:00:00Z", + "ingredient_statement": { "type": "string" }, - "latest_post_created_utc": { - "description": "Time the newest recent post was submitted, in Unix seconds.", - "example": 1713484800, + "item_id": { + "example": 650115, "type": "integer" }, - "public_url": { - "description": "Public Reddit URL of the subreddit.", - "example": "https://www.reddit.com/r/OpenAI/", + "name": { + "example": "Almond Pastry", "type": "string" }, - "recent_post_count": { - "description": "Number of recent posts that were inspected.", - "example": 10, - "type": "integer" - }, - "sample_posts": { - "description": "Recent posts from the subreddit.", + "nutrients": { "items": { - "$ref": "#/definitions/reddit.Post" + "$ref": "#/definitions/panera.MenuNutrient" }, "type": "array" }, - "source": { - "allOf": [ - { - "$ref": "#/definitions/reddit.SourceDetail" - } - ], - "description": "Reddit page the data was read from." - }, - "subreddit": { - "description": "Subreddit name, without `r/`.", - "example": "OpenAI", - "type": "string" + "sizes": { + "items": { + "$ref": "#/definitions/panera.ItemDetailSize" + }, + "type": "array" }, - "title": { - "description": "Subreddit title as shown on Reddit.", - "example": "OpenAI", + "source_url": { "type": "string" } }, "type": "object" }, - "reddit.SubredditCommentsResponse": { + "panera.ItemDetailSize": { "properties": { - "comments": { - "description": "Recent comments in the subreddit.", - "items": { - "$ref": "#/definitions/reddit.Comment" - }, - "type": "array" + "calories": { + "example": 120, + "type": "number" }, - "pagination": { - "allOf": [ - { - "$ref": "#/definitions/reddit.Pagination" - } - ], - "description": "Page size and cursor for the next page." + "is_default": { + "example": true, + "type": "boolean" }, - "source": { - "allOf": [ - { - "$ref": "#/definitions/reddit.SourceDetail" - } - ], - "description": "Reddit page the comments were read from." + "item_id": { + "example": 646541, + "type": "integer" }, - "subreddit": { - "description": "Subreddit name, without `r/`.", - "example": "OpenAI", + "name": { + "example": "Regular", "type": "string" + }, + "price": { + "example": 3.49, + "type": "number" } }, "type": "object" }, - "reddit.SubredditPostsResponse": { + "panera.ItemOption": { "properties": { - "pagination": { - "allOf": [ - { - "$ref": "#/definitions/reddit.Pagination" - } - ], - "description": "Page size and cursor for the next page." + "allergens": { + "$ref": "#/definitions/panera.MenuAllergens" }, - "posts": { - "description": "Posts in the subreddit.", - "items": { - "$ref": "#/definitions/reddit.Post" - }, - "type": "array" + "default_qty": { + "example": 1, + "type": "integer" }, - "sort": { - "description": "Sort order that was applied, for example `hot`.", - "example": "hot", + "image_key": { + "example": "pecans-whole-r", "type": "string" }, - "source": { - "allOf": [ - { - "$ref": "#/definitions/reddit.SourceDetail" - } - ], - "description": "Reddit page the posts were read from." + "is_default": { + "example": true, + "type": "boolean" }, - "subreddit": { - "description": "Subreddit name, without `r/`.", - "example": "OpenAI", - "type": "string" + "item_id": { + "example": 4266, + "type": "integer" }, - "time": { - "description": "Time window that was applied, for example `week`.", - "example": "week", - "type": "string" + "variants": { + "items": { + "$ref": "#/definitions/panera.ItemOptionVariant" + }, + "type": "array" } }, "type": "object" }, - "reddit.TrendsResponse": { + "panera.ItemOptionGroup": { "properties": { - "pagination": { - "$ref": "#/definitions/reddit.Pagination" + "group_id": { + "example": 1080, + "type": "integer" }, - "posts": { + "max_allowed": { + "example": 5, + "type": "integer" + }, + "min_allowed": { + "example": 0, + "type": "integer" + }, + "options": { "items": { - "$ref": "#/definitions/reddit.Post" + "$ref": "#/definitions/panera.ItemOption" }, "type": "array" + } + }, + "type": "object" + }, + "panera.ItemOptionVariant": { + "properties": { + "item_id": { + "example": 5741, + "type": "integer" }, - "sort": { - "example": "hot", - "type": "string" - }, - "source": { - "$ref": "#/definitions/reddit.SourceDetail" + "price": { + "example": 0.69, + "type": "number" }, - "time": { - "example": "day", + "variant_type": { + "example": "Light", "type": "string" } }, "type": "object" }, - "reddit.UserCommentsResponse": { + "panera.ItemOptionsResponse": { "properties": { - "comments": { - "description": "Recent public comments by the user.", + "cafe_id": { + "example": 601447, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "groups": { "items": { - "$ref": "#/definitions/reddit.Comment" + "$ref": "#/definitions/panera.ItemOptionGroup" }, "type": "array" }, - "pagination": { - "allOf": [ - { - "$ref": "#/definitions/reddit.Pagination" - } - ], - "description": "Page size and cursor for the next page." - }, - "source": { - "allOf": [ - { - "$ref": "#/definitions/reddit.SourceDetail" - } - ], - "description": "Reddit page the comments were read from." + "item_id": { + "example": 643423, + "type": "integer" }, - "username": { - "description": "Reddit username that was queried.", - "example": "reddit", + "source_url": { "type": "string" } }, "type": "object" }, - "reddit.UserPostsResponse": { + "panera.LocationCafe": { "properties": { - "pagination": { - "allOf": [ - { - "$ref": "#/definitions/reddit.Pagination" - } - ], - "description": "Page size and cursor for the next page." + "cafe_id": { + "example": 601447, + "type": "integer" }, - "posts": { - "description": "Recent public posts by the user.", + "city": { + "example": "Addison", + "type": "string" + }, + "country_code": { + "example": "US", + "type": "string" + }, + "features": { + "description": "Features are Panera's own per-cafe capability flags that are true for\nthis cafe (e.g. hasDriveThru, hasDelivery, hasCurbside, hasKiosk).", "items": { - "$ref": "#/definitions/reddit.Post" + "type": "string" }, "type": "array" }, - "source": { - "allOf": [ - { - "$ref": "#/definitions/reddit.SourceDetail" - } - ], - "description": "Reddit page the posts were read from." + "latitude": { + "example": 41.948594, + "type": "number" }, - "username": { - "description": "Reddit username that was queried.", - "example": "reddit", + "longitude": { + "example": -88.026398, + "type": "number" + }, + "name": { + "example": "Addison - W Lake St east of Rohlwing Rd", + "type": "string" + }, + "phone": { + "example": "630-250-4952", + "type": "string" + }, + "postal_code": { + "example": "60101", + "type": "string" + }, + "state": { + "example": "IL", + "type": "string" + }, + "street": { + "example": "1600 West Lake Street", "type": "string" } }, "type": "object" }, - "reddit.archiveCommentsIDsResponseDoc": { + "panera.LocationCity": { "properties": { - "code": { - "example": 200, + "cafe_count": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/reddit.ArchiveCommentsIDsResponse" + "cafes": { + "items": { + "$ref": "#/definitions/panera.LocationCafe" + }, + "type": "array" }, - "msg": { - "example": "OK", + "city": { + "example": "Addison", "type": "string" } }, "type": "object" }, - "reddit.archiveCommentsSearchResponseDoc": { + "panera.LocationsResponse": { "properties": { - "code": { - "example": 200, + "cities": { + "description": "Cities lists every city in the requested state (or just the one\nmatching city, when both are given), each with its cafes. Populated\nonly when state is given.", + "items": { + "$ref": "#/definitions/panera.LocationCity" + }, + "type": "array" + }, + "city": { + "example": "Addison", + "type": "string" + }, + "count": { + "example": 50, "type": "integer" }, - "data": { - "$ref": "#/definitions/reddit.ArchiveCommentsSearchResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { + "type": "string" + }, + "state": { + "example": "IL", + "type": "string" + }, + "states": { + "description": "States lists every state Panera serves, with its cafe count. Populated\nonly when neither state nor city is given.", + "items": { + "$ref": "#/definitions/panera.StateSummary" + }, + "type": "array" + } + }, + "type": "object" + }, + "panera.MenuAllergenEntry": { + "properties": { + "id": { + "example": "TREENUTS", + "type": "string" + }, + "name": { + "example": "Tree Nuts", "type": "string" } }, "type": "object" }, - "reddit.archiveCommentsTreeResponseDoc": { + "panera.MenuAllergens": { "properties": { - "code": { - "example": 200, + "contains": { + "items": { + "$ref": "#/definitions/panera.MenuAllergenEntry" + }, + "type": "array" + }, + "may_contain": { + "items": { + "$ref": "#/definitions/panera.MenuAllergenEntry" + }, + "type": "array" + } + }, + "type": "object" + }, + "panera.MenuCategory": { + "properties": { + "cat_id": { + "example": 20, "type": "integer" }, - "data": { - "$ref": "#/definitions/reddit.ArchiveCommentsTreeResponse" + "image_key": { + "example": "panini-and-sandwiches", + "type": "string" }, - "msg": { - "example": "OK", + "item_ids": { + "description": "ItemIDs are the items directly under this category. Look them up in\nthe response's top-level Items list.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "name": { + "example": "Sandwiches", "type": "string" + }, + "sort_weight": { + "example": 6, + "type": "integer" + }, + "subcategories": { + "items": { + "$ref": "#/definitions/panera.MenuCategory" + }, + "type": "array" } }, "type": "object" }, - "reddit.archivePostsIDsResponseDoc": { + "panera.MenuItem": { "properties": { - "code": { - "example": 200, + "allergens": { + "$ref": "#/definitions/panera.MenuAllergens" + }, + "customizable": { + "example": true, + "type": "boolean" + }, + "description": { + "type": "string" + }, + "image_key": { + "example": "strawberry-poppyseed-salad-pantry-reno-half", + "type": "string" + }, + "in_stock": { + "description": "InStock reflects this cafe's live stockout feed. false means Panera\ncurrently has this item unavailable to order at this specific cafe.", + "example": true, + "type": "boolean" + }, + "item_id": { + "example": 1805, "type": "integer" }, - "data": { - "$ref": "#/definitions/reddit.ArchivePostsIDsResponse" + "name": { + "example": "Half Strawberry Poppyseed Salad", + "type": "string" }, - "msg": { - "example": "OK", + "nutrients": { + "items": { + "$ref": "#/definitions/panera.MenuNutrient" + }, + "type": "array" + }, + "price": { + "example": 6.19, + "type": "number" + }, + "product_type": { + "example": "SALAD", "type": "string" + }, + "tags": { + "description": "Tags are Panera's own merchandising badges for this item (e.g.\nNEW_PRODUCT, LIMITED_TIME, IN_SEASON, ITS_BACK, MY_PANERA_EXCLUSIVE).\nBest-effort: badges are fetched from a separate feed keyed to a\ndifferent id space than the rest of this catalog, so not every item\nresolves one -- see common.go's package doc.", + "items": { + "type": "string" + }, + "type": "array" + }, + "wellness": { + "description": "Wellness are Panera's own dietary labels (e.g. Vegan, Vegetarian,\nGluten Conscious).", + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "reddit.archivePostsSearchResponseDoc": { + "panera.MenuNutrient": { "properties": { - "code": { - "example": 200, + "name": { + "example": "Calories", + "type": "string" + }, + "unit": { + "example": "Cal", + "type": "string" + }, + "value": { + "example": 580, + "type": "number" + } + }, + "type": "object" + }, + "panera.MenuResponse": { + "properties": { + "cafe_id": { + "example": 601447, "type": "integer" }, - "data": { - "$ref": "#/definitions/reddit.ArchivePostsSearchResponse" + "categories": { + "items": { + "$ref": "#/definitions/panera.MenuCategory" + }, + "type": "array" }, - "msg": { - "example": "OK", + "count": { + "example": 343, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/panera.MenuItem" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "reddit.archiveSubredditsSearchResponseDoc": { + "panera.QuantityRule": { "properties": { - "code": { - "example": 200, + "item_ids": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "name": { + "example": "Souffle", + "type": "string" + }, + "scope": { + "example": "group", + "type": "string" + }, + "windows": { + "items": { + "$ref": "#/definitions/panera.QuantityRuleWindow" + }, + "type": "array" + } + }, + "type": "object" + }, + "panera.QuantityRuleWindow": { + "properties": { + "from_offset_days": { + "example": 0, "type": "integer" }, - "data": { - "$ref": "#/definitions/reddit.ArchiveSubredditsSearchResponse" + "max_quantity": { + "example": 6, + "type": "integer" }, - "msg": { - "example": "OK", + "to_offset_days": { + "example": 2, + "type": "integer" + } + }, + "type": "object" + }, + "panera.QuantityRulesResponse": { + "properties": { + "cafe_id": { + "example": 601447, + "type": "integer" + }, + "count": { + "example": 3, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "rules": { + "items": { + "$ref": "#/definitions/panera.QuantityRule" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "reddit.archiveTimeSeriesResponseDoc": { + "panera.RetiredProduct": { "properties": { - "code": { - "example": 200, + "availability_stage": { + "description": "AvailabilityStage is Panera's own classification -- observed values\nare RETIRED (permanently discontinued) and SEASONAL (currently out of\nrotation, may return).", + "example": "SEASONAL", + "type": "string" + }, + "description": { + "type": "string" + }, + "image_key": { + "type": "string" + }, + "item_id": { + "example": 650699, "type": "integer" }, - "data": { - "$ref": "#/definitions/reddit.ArchiveTimeSeriesResponse" + "name": { + "example": "Italian Steak & Mozz", + "type": "string" }, - "msg": { - "example": "OK", + "portion": { + "example": "Whole", "type": "string" } }, "type": "object" }, - "reddit.commentsResponseDoc": { + "panera.RetiredProductsResponse": { "properties": { - "code": { - "example": 200, + "cafe_id": { + "example": 601447, "type": "integer" }, - "data": { - "$ref": "#/definitions/reddit.CommentsResponse" + "count": { + "example": 332, + "type": "integer" }, - "msg": { - "example": "OK", + "fetched_at": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/panera.RetiredProduct" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "reddit.domainPostsResponseDoc": { + "panera.StateSummary": { "properties": { - "code": { - "example": 200, + "cafe_count": { + "example": 85, "type": "integer" }, - "data": { - "$ref": "#/definitions/reddit.DomainPostsResponse" + "country_code": { + "example": "US", + "type": "string" }, - "msg": { - "example": "OK", + "state": { + "example": "IL", "type": "string" } }, "type": "object" }, - "reddit.leadsResponseDoc": { + "panera.TimeSlotWindow": { "properties": { - "code": { - "example": 200, + "end_time": { + "example": "2026-09-10T11:15:00-05:00", + "type": "string" + }, + "start_time": { + "example": "2026-09-10T11:10:00-05:00", + "type": "string" + } + }, + "type": "object" + }, + "panera.TimeSlotsResponse": { + "properties": { + "cafe_id": { + "example": 601447, "type": "integer" }, - "data": { - "$ref": "#/definitions/redditleads.Response" + "close": { + "example": "21:00", + "type": "string" }, - "msg": { - "example": "OK", + "count": { + "example": 178, + "type": "integer" + }, + "date": { + "example": "2026-09-10", + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "open": { + "example": "06:00", + "type": "string" + }, + "source_url": { "type": "string" + }, + "windows": { + "items": { + "$ref": "#/definitions/panera.TimeSlotWindow" + }, + "type": "array" } }, "type": "object" }, - "reddit.multiSubredditPostsResponseDoc": { + "panera.UpcomingDay": { "properties": { - "code": { - "example": 200, + "close": { + "example": "21:00", + "type": "string" + }, + "closed": { + "example": false, + "type": "boolean" + }, + "date": { + "example": "2026-09-02", + "type": "string" + }, + "day_of_week": { + "example": "Wednesday", + "type": "string" + }, + "open": { + "example": "06:00", + "type": "string" + } + }, + "type": "object" + }, + "panera.UpsellSuggestion": { + "properties": { + "item_id": { + "example": 7392, "type": "integer" }, - "data": { - "$ref": "#/definitions/reddit.MultiSubredditPostsResponse" + "item_name": { + "example": "Bacon Turkey Bravo Sandwich on Thin Tom Basil - Retail - Half Portion", + "type": "string" }, - "msg": { - "example": "OK", + "suggestions": { + "items": { + "$ref": "#/definitions/panera.UpsellSuggestionItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "panera.UpsellSuggestionItem": { + "properties": { + "item_id": { + "example": 801215, + "type": "integer" + }, + "name": { + "example": "Extra Turkey", "type": "string" } }, "type": "object" }, - "reddit.postResponseDoc": { + "panera.UpsellSuggestionsResponse": { "properties": { - "code": { - "example": 200, + "cafe_id": { + "example": 601447, "type": "integer" }, - "data": { - "$ref": "#/definitions/reddit.PostResponse" + "count": { + "example": 513, + "type": "integer" }, - "msg": { - "example": "OK", + "fetched_at": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/panera.UpsellSuggestion" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "reddit.searchResponseDoc": { + "panera.atWorkLocationsResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/reddit.SearchResponse" + "$ref": "#/definitions/panera.AtWorkLocationsResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "reddit.subredditAboutResponseDoc": { + "panera.cafeResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/reddit.SubredditAboutResponse" + "$ref": "#/definitions/panera.CafeResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "reddit.subredditCommentsResponseDoc": { + "panera.cateringDeliveryInfoResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/reddit.SubredditCommentsResponse" + "$ref": "#/definitions/panera.CateringDeliveryInfoResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "reddit.subredditPostsResponseDoc": { + "panera.cateringMenuResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/reddit.SubredditPostsResponse" + "$ref": "#/definitions/panera.CateringMenuResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "reddit.trendsResponseDoc": { + "panera.geocodeResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/reddit.TrendsResponse" + "$ref": "#/definitions/panera.GeocodeResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "reddit.userCommentsResponseDoc": { + "panera.itemDetailResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/reddit.UserCommentsResponse" + "$ref": "#/definitions/panera.ItemDetailResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "reddit.userPostsResponseDoc": { + "panera.itemOptionsResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/reddit.UserPostsResponse" + "$ref": "#/definitions/panera.ItemOptionsResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "redditleads.Lead": { + "panera.locationsResponseDoc": { "properties": { - "author": { - "example": "someuser", - "type": "string" - }, - "comment_count": { - "example": 12, + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "created": { - "example": "2026-08-01T00:00:00Z", - "type": "string" - }, - "permalink": { - "example": "https://www.reddit.com/r/smallbusiness/comments/1abcxyz/", - "type": "string" + "data": { + "$ref": "#/definitions/panera.LocationsResponse" }, - "post_score": { - "example": 20, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "panera.menuResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "reason": { - "example": "Asking for a CRM and states a monthly budget.", - "type": "string" + "data": { + "$ref": "#/definitions/panera.MenuResponse" }, - "score": { - "example": 9, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "panera.quantityRulesResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "signals": { - "items": { - "$ref": "#/definitions/redditleads.Signal" - }, - "type": "array" - }, - "subreddit": { - "example": "smallbusiness", - "type": "string" + "data": { + "$ref": "#/definitions/panera.QuantityRulesResponse" }, - "title": { - "example": "Looking for a CRM for a 3-person team, budget ~$50/mo", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "redditleads.Response": { + "panera.retiredProductsResponseDoc": { "properties": { - "classifier": { - "example": "llm", - "type": "string" - }, - "degraded": { - "example": false, - "type": "boolean" - }, - "leads": { - "items": { - "$ref": "#/definitions/redditleads.Lead" - }, - "type": "array" - }, - "min_score": { - "example": 4, + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "model": { - "example": "gpt-5.4", - "type": "string" - }, - "query": { - "example": "crm for small teams", - "type": "string" - }, - "stats": { - "$ref": "#/definitions/redditleads.Stats" + "data": { + "$ref": "#/definitions/panera.RetiredProductsResponse" }, - "subreddit": { - "example": "smallbusiness", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "redditleads.Signal": { + "panera.timeSlotsResponseDoc": { "properties": { - "id": { - "example": "explicit-ask", - "type": "string" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "label": { - "example": "asking for a tool", - "type": "string" + "data": { + "$ref": "#/definitions/panera.TimeSlotsResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "redditleads.Stats": { + "panera.upsellSuggestionsResponseDoc": { "properties": { - "classified": { - "example": 12, - "type": "integer" - }, - "prefiltered": { - "example": 88, + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "returned": { - "example": 9, - "type": "integer" + "data": { + "$ref": "#/definitions/panera.UpsellSuggestionsResponse" }, - "scanned": { - "example": 100, - "type": "integer" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "redfin.EstimateResponse": { + "papajohns.AllergenFlags": { "properties": { - "address": { - "description": "Street address of the property.", - "type": "string" + "egg": { + "type": "boolean" }, - "baths": { - "description": "Number of bathrooms.", - "type": "number" + "fish": { + "type": "boolean" }, - "beds": { - "description": "Number of bedrooms.", - "type": "number" + "milk": { + "type": "boolean" }, - "city_time_series": { - "description": "Monthly values for the city the property is in, ending at `updated_at`, for comparison.", - "items": { - "type": "number" - }, - "type": "array" + "peanut": { + "type": "boolean" }, - "county_time_series": { - "description": "Monthly values for the county the property is in, ending at `updated_at`, for comparison.", - "items": { - "type": "number" - }, - "type": "array" + "sesame": { + "type": "boolean" }, - "estimate": { - "description": "Redfin Estimate of the home's value, in US dollars. Omitted when Redfin shows no estimate.", - "type": "number" + "shellfish": { + "type": "boolean" }, - "estimate_text": { - "description": "Estimate as Redfin displays it, for example `$1.85M`, or `Estimate Not Available`.", - "type": "string" + "soy": { + "type": "boolean" }, - "latitude": { - "description": "Latitude of the property.", - "type": "number" + "tree_nut": { + "type": "boolean" }, - "listing_price": { - "description": "Current listing price of the home, in US dollars.", - "type": "number" + "wheat": { + "type": "boolean" + } + }, + "type": "object" + }, + "papajohns.AllergenItem": { + "properties": { + "allergens": { + "$ref": "#/definitions/papajohns.AllergenFlags" }, - "longitude": { - "description": "Longitude of the property.", - "type": "number" + "name": { + "example": "Original Crust", + "type": "string" }, - "postal_code_time_series": { - "description": "Monthly values for the postal code the property is in, ending at `updated_at`, for comparison.", - "items": { - "type": "number" - }, - "type": "array" + "section": { + "example": "Crust Options", + "type": "string" + } + }, + "type": "object" + }, + "papajohns.AllergensResponse": { + "properties": { + "count": { + "example": 170, + "type": "integer" }, - "property_id": { - "description": "Redfin property id the estimate is for.", - "example": "1715020", + "fetched_at": { "type": "string" }, - "property_time_series": { - "description": "Monthly Redfin Estimate values for this property, in US dollars, ending at `updated_at`.", + "items": { "items": { - "type": "number" + "$ref": "#/definitions/papajohns.AllergenItem" }, "type": "array" }, - "sqft": { - "description": "Interior living area in square feet.", - "type": "number" - }, - "updated_at": { - "description": "Time the estimate history was last updated, in Unix milliseconds. The monthly series end at this date.", - "type": "integer" - }, - "year_built": { - "description": "Year the home was built.", - "type": "integer" + "source_url": { + "type": "string" } }, "type": "object" }, - "redfin.PropertyItem": { + "papajohns.Deal": { "properties": { - "address": { - "description": "Street address of the property.", + "description": { "type": "string" }, - "baths": { - "description": "Number of bathrooms.", - "type": "number" - }, - "beds": { - "description": "Number of bedrooms.", - "type": "number" - }, - "city": { - "description": "City the property is in.", + "id": { + "example": "66262", "type": "string" }, - "days_on_market": { - "description": "Number of days the home has been on the market.", - "type": "integer" - }, - "hoa_monthly": { - "description": "Homeowners association fee per month.", - "type": "number" - }, - "image": { - "description": "URL of the listing image.", + "image_url": { "type": "string" }, - "latitude": { - "description": "Latitude of the property.", - "type": "number" - }, - "listing_id": { - "description": "Redfin listing id of the current listing.", + "offer_code": { + "description": "OfferCode is the code the offer is redeemed with.", + "example": "EDNJX", "type": "string" }, - "longitude": { - "description": "Longitude of the property.", + "price": { + "description": "Price is the offer price where the deal advertises one. A deal whose\nprice depends on what the customer builds reports 0.", + "example": 12.99, "type": "number" }, - "lot_size": { - "description": "Size of the lot as Redfin lists it.", + "regular_price": { + "description": "RegularPrice is the struck-through pre-offer price, present only when\nthe deal actually advertises a saving.", + "example": 23.49, "type": "number" }, - "mls_number": { - "description": "Multiple Listing Service (MLS) number of the listing.", + "tag": { + "description": "Tag is the merchandising label, e.g. \"Featured Deal\".", + "example": "Featured Deal", "type": "string" }, - "price": { - "description": "Listing or sale price in US dollars.", - "type": "number" - }, - "price_per_sqft": { - "description": "Price per square foot of living area.", - "type": "number" - }, - "property_id": { - "description": "Redfin property id. Use it with the property, estimate and similar endpoints.", - "example": "1715020", + "title": { + "example": "Ultimate Pepperoni Pizza", "type": "string" }, - "property_type": { - "description": "Type of property, for example `Condo/Co-op`.", + "url": { + "description": "URL is the deal-builder link for this offer.", "type": "string" + } + }, + "type": "object" + }, + "papajohns.DealsResponse": { + "properties": { + "count": { + "example": 16, + "type": "integer" }, - "sqft": { - "description": "Interior living area in square feet.", - "type": "number" + "deals": { + "items": { + "$ref": "#/definitions/papajohns.Deal" + }, + "type": "array" }, - "state": { - "description": "State the property is in.", + "fetched_at": { "type": "string" }, - "status": { - "description": "Listing status as Redfin shows it, for example `Active`.", - "type": "string" + "national_default": { + "description": "NationalDefault is true when no store was selected. National promotions\nare frequently placeholders prompting the customer to pick a store, so a\ncaller should prefer passing a store_id.", + "example": false, + "type": "boolean" }, - "url": { - "description": "Redfin page URL of the listing.", + "source_url": { "type": "string" }, - "year_built": { - "description": "Year the home was built.", + "store_id": { + "example": 5054, "type": "integer" - }, - "zip": { - "description": "ZIP or postal code of the property.", - "type": "string" } }, "type": "object" }, - "redfin.PropertyResponse": { + "papajohns.DirectoryChild": { "properties": { - "address": { - "description": "Street address of the property.", - "type": "string" - }, - "baths": { - "description": "Number of bathrooms.", - "type": "number" + "is_store": { + "description": "IsStore marks a child that is a store page rather than another\ndirectory level -- call /papajohns/store with its path.", + "example": false, + "type": "boolean" }, - "beds": { - "description": "Number of bedrooms.", - "type": "number" + "name": { + "example": "CA", + "type": "string" }, - "city": { - "description": "City the property is in.", + "path": { + "example": "united-states/ca", "type": "string" }, - "days_on_market": { - "description": "Number of days the home has been on the market.", + "store_count": { + "description": "StoreCount is how many stores sit under this branch, as Yext reports\nit. Absent once children are stores themselves.", + "example": 222, "type": "integer" }, - "description": { + "url": { "type": "string" - }, - "facts": { + } + }, + "type": "object" + }, + "papajohns.DirectoryResponse": { + "properties": { + "children": { "items": { - "type": "string" + "$ref": "#/definitions/papajohns.DirectoryChild" }, "type": "array" }, - "hoa_monthly": { - "description": "Homeowners association fee per month.", - "type": "number" - }, - "image": { - "description": "URL of the listing image.", - "type": "string" - }, - "latitude": { - "description": "Latitude of the property.", - "type": "number" + "count": { + "example": 120, + "type": "integer" }, - "listing_id": { - "description": "Redfin listing id of the current listing.", + "fetched_at": { "type": "string" }, - "longitude": { - "description": "Longitude of the property.", - "type": "number" - }, - "lot_size": { - "description": "Size of the lot as Redfin lists it.", - "type": "number" - }, - "mls_number": { - "description": "Multiple Listing Service (MLS) number of the listing.", + "name": { "type": "string" }, - "price": { - "description": "Listing or sale price in US dollars.", - "type": "number" - }, - "price_per_sqft": { - "description": "Price per square foot of living area.", - "type": "number" - }, - "property_id": { - "description": "Redfin property id. Use it with the property, estimate and similar endpoints.", - "example": "1715020", + "path": { + "example": "united-states/ca", "type": "string" }, - "property_type": { - "description": "Type of property, for example `Condo/Co-op`.", + "source_url": { "type": "string" + } + }, + "type": "object" + }, + "papajohns.IndiaAvailability": { + "properties": { + "blacked_out_channel_ids": { + "items": { + "type": "string" + }, + "type": "array" }, - "sqft": { - "description": "Interior living area in square feet.", - "type": "number" + "blacked_out_days": { + "items": { + "type": "string" + }, + "type": "array" }, - "state": { - "description": "State the property is in.", + "blacked_out_store_ids": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "papajohns.IndiaCurrency": { + "properties": { + "code": { + "example": "₹", "type": "string" }, - "status": { - "description": "Listing status as Redfin shows it, for example `Active`.", + "country_code": { + "example": "91", "type": "string" }, - "url": { - "description": "Redfin page URL of the listing.", + "locale": { + "example": "en-IN", "type": "string" }, - "year_built": { - "description": "Year the home was built.", - "type": "integer" - }, - "zip": { - "description": "ZIP or postal code of the property.", + "name": { + "example": "Indian Rupee", "type": "string" } }, "type": "object" }, - "redfin.RegionTrendsResponse": { + "papajohns.IndiaDealChoice": { "properties": { - "avg_days_on_market": { - "description": "Average number of days homes in the region spend on the market, as Redfin displays it.", + "category": { + "example": "Pizzas", "type": "string" }, - "avg_down_payment": { - "description": "Average down payment in the region, as Redfin displays it, for example `35.7%`.", + "item_id": { + "example": "71", "type": "string" }, - "avg_num_offers": { - "description": "Average number of offers per sold home in the region, as Redfin displays it.", + "name": { + "example": "MARGHERITA", "type": "string" }, - "median_list_per_sqft": { - "description": "Median listing price per square foot in the region, as Redfin displays it.", - "type": "string" + "price": { + "example": 399, + "type": "number" }, - "median_list_price": { - "description": "Median listing price in the region, as Redfin displays it, for example `$1.29M`.", - "example": "$1.29M", + "size": { + "example": "Medium", "type": "string" }, - "median_sale_per_list": { - "description": "Median ratio of sale price to listing price in the region, as Redfin displays it, for example `115.5%`.", + "size_id": { + "example": "2", "type": "string" + } + }, + "type": "object" + }, + "papajohns.IndiaDealResponse": { + "properties": { + "buy_x": { + "type": "integer" }, - "median_sale_per_sqft": { - "description": "Median sale price per square foot in the region, as Redfin displays it.", + "category_id": { + "example": "11", "type": "string" }, - "median_sale_price": { - "description": "Median sale price in the region, as Redfin displays it, for example `$1.76M`.", - "example": "$1.76M", + "currency": { + "$ref": "#/definitions/papajohns.IndiaCurrency" + }, + "description": { + "example": "Sakkath Combo", "type": "string" }, - "num_homes_on_market": { - "description": "Number of homes currently on the market in the region, as Redfin displays it.", + "end_time": { + "example": "23:59:59", "type": "string" }, - "num_homes_sold": { - "description": "Number of homes sold in the region, as Redfin displays it.", + "fetched_at": { "type": "string" }, - "region_id": { - "description": "Redfin region id the trends are for.", - "example": 17151, + "get_y": { "type": "integer" }, - "region_type": { - "description": "Type of region: `1` neighborhood, `2` ZIP code, `5` county or `6` city.", - "example": 6, - "type": "integer" + "highest_of_two": { + "type": "boolean" }, - "yoy_sale_per_sqft": { - "description": "Year-over-year change in sale price per square foot, as Redfin displays it, for example `+12.6%`.", + "id": { + "example": "17", "type": "string" }, - "yoy_sale_price": { - "description": "Year-over-year change in sale price, as Redfin displays it, for example `+14.0%`.", + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "redfin.SearchResponse": { - "properties": { - "location": { - "description": "Location that was searched, as entered or resolved.", - "example": "San Francisco, CA", + }, + "market": { + "example": "india", "type": "string" }, - "page": { - "description": "Page number returned.", - "example": 1, - "type": "integer" + "name": { + "example": "Sakkath Veg Combo - Dine In", + "type": "string" }, - "region_id": { - "description": "Redfin region id the search ran against.", - "example": 17151, - "type": "integer" + "price": { + "description": "Price is the deal's fixed price when price_type is fixedPrice, and 0\nfor a computed deal (BuyXGetY, HalfAndHalf, variablePrice).", + "example": 699, + "type": "number" }, - "region_type": { - "description": "Type of region searched: `1` neighborhood, `2` ZIP code, `5` county or `6` city.", - "example": 6, - "type": "integer" + "price_type": { + "example": "fixedPrice", + "type": "string" }, - "results": { - "description": "Listings on this page, one item per property.", + "slots": { "items": { - "$ref": "#/definitions/redfin.PropertyItem" + "$ref": "#/definitions/papajohns.IndiaDealSlot" }, "type": "array" + }, + "source_url": { + "type": "string" + }, + "start_time": { + "example": "00:00:00", + "type": "string" + }, + "sum_of_two": { + "description": "SumOfTwo and HighestOfTwo describe how a two-item deal is priced when\nprice_type is HalfAndHalf.", + "type": "boolean" } }, "type": "object" }, - "redfin.SimilarResponse": { + "papajohns.IndiaDealSlot": { "properties": { - "property_id": { - "example": "1715020", - "type": "string" + "choice_count": { + "example": 5, + "type": "integer" }, - "results": { + "choices": { "items": { - "$ref": "#/definitions/redfin.PropertyItem" + "$ref": "#/definitions/papajohns.IndiaDealChoice" }, "type": "array" - } - }, - "type": "object" - }, - "rednote.Channel": { - "properties": { + }, "id": { - "example": "homefeed.food_v3", + "example": "1376", "type": "string" }, "name": { - "example": "Food", + "type": "string" + }, + "optional": { + "example": false, + "type": "boolean" + }, + "percentage_off": { + "type": "number" + }, + "quantity": { + "example": 1, + "type": "integer" + }, + "size": { + "example": "Medium", "type": "string" } }, "type": "object" }, - "rednote.Comment": { + "papajohns.IndiaMenuCategory": { "properties": { - "author": { - "$ref": "#/definitions/rednote.CommentAuthor" + "description": { + "type": "string" }, - "comment_id": { - "example": "0123456789abcdef01234567", + "id": { + "example": "6", "type": "string" }, - "content": { + "image_url": { "type": "string" }, - "created_at": { - "example": 1700000000, + "item_count": { + "example": 29, "type": "integer" }, - "ip_location": { - "example": "Shanghai", - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/papajohns.IndiaMenuItem" + }, + "type": "array" }, - "like_count": { - "example": 12, - "type": "integer" + "name": { + "example": "Pizzas", + "type": "string" }, - "sub_comment_count": { - "example": 3, + "rank": { + "example": 7, "type": "integer" }, - "sub_comments": { + "subcategories": { "items": { - "$ref": "#/definitions/rednote.Comment" + "$ref": "#/definitions/papajohns.IndiaMenuSubcategory" }, "type": "array" } }, "type": "object" }, - "rednote.CommentAuthor": { + "papajohns.IndiaMenuFilters": { "properties": { - "avatar_url": { + "availability_filter_applied": { + "description": "AvailabilityFilterApplied is false unless store_id, channel_id, and day\nwere all supplied -- the operator's blackout rules need all three.", + "example": false, + "type": "boolean" + }, + "category_id": { "type": "string" }, - "nickname": { - "example": "synthetic_user", + "channel": { + "example": "Delivery", "type": "string" }, - "user_id": { - "example": "000000000000000000000002", + "channel_id": { "type": "string" - } - }, - "type": "object" - }, - "rednote.CommentsResponse": { - "properties": { - "count": { - "example": 20, - "type": "integer" }, - "cursor": { + "day": { "type": "string" }, - "has_more": { - "type": "boolean" + "day_name": { + "example": "Monday", + "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/rednote.Comment" - }, - "type": "array" + "store_id": { + "type": "string" }, - "note_id": { - "example": "0123456789abcdef01234567", + "tag": { "type": "string" } }, "type": "object" }, - "rednote.ExploreCard": { + "papajohns.IndiaMenuItem": { "properties": { - "author": { - "$ref": "#/definitions/rednote.NoteAuthor" + "availability": { + "allOf": [ + { + "$ref": "#/definitions/papajohns.IndiaAvailability" + } + ], + "description": "Availability lists the store/channel/day combinations where this item is\nblacked out. The item is unavailable only where all three match; empty\nlists mean it is available everywhere." }, - "cover_url": { + "buy_x": { + "type": "integer" + }, + "category_id": { + "example": "6", "type": "string" }, - "liked_count": { - "example": 1255, - "type": "integer" + "customizable": { + "description": "Customizable reports whether the item exposes a size/crust/topping tree.", + "example": true, + "type": "boolean" }, - "note_id": { - "example": "0123456789abcdef01234567", + "description": { "type": "string" }, - "note_url": { + "discounted": { + "example": false, + "type": "boolean" + }, + "get_y": { + "type": "integer" + }, + "id": { + "example": "71", "type": "string" }, - "title": { + "image_url": { "type": "string" }, - "type": { - "example": "video", + "kind": { + "description": "Kind is \"item\" for an a la carte product or \"deal\" for a combo/offer.", + "example": "item", "type": "string" }, - "xsec_token": { + "name": { + "example": "MARGHERITA", "type": "string" - } - }, - "type": "object" - }, - "rednote.ExploreResponse": { - "properties": { - "channel_id": { - "example": "homefeed_recommend", + }, + "price": { + "description": "Price is the item's list price in the franchise currency. A deal with a\ncomputed price (BuyXGetY, HalfAndHalf, variablePrice) reports 0 here --\nread price_type instead.", + "example": 399, + "type": "number" + }, + "price_type": { + "description": "PriceType is set on deals only: fixedPrice, BuyXGetY, HalfAndHalf, or\nvariablePrice.", + "example": "BuyXGetY", "type": "string" }, - "channels": { + "rank": { + "example": 1, + "type": "integer" + }, + "sizes": { + "description": "Sizes is populated only when include_options=true.", "items": { - "$ref": "#/definitions/rednote.Channel" + "$ref": "#/definitions/papajohns.IndiaMenuSize" }, "type": "array" }, - "count": { - "example": 30, - "type": "integer" + "strike_off_price": { + "example": 499, + "type": "number" }, - "items": { + "sub_category_id": { + "example": "4", + "type": "string" + }, + "tags": { + "description": "Tags are the item's dietary/attribute markers, e.g. Veg, Non Veg, Spicy.", "items": { - "$ref": "#/definitions/rednote.ExploreCard" + "type": "string" }, "type": "array" + }, + "upsell": { + "example": false, + "type": "boolean" } }, "type": "object" }, - "rednote.NoteAuthor": { + "papajohns.IndiaMenuItemResponse": { "properties": { - "avatar_url": { - "type": "string" - }, - "nickname": { - "example": "synthetic_user", + "category": { + "description": "Category is the section this item was found under.", + "example": "Pizzas", "type": "string" }, - "user_id": { - "example": "000000000000000000000002", - "type": "string" - } - }, - "type": "object" - }, - "rednote.NoteResponse": { - "properties": { - "author": { - "$ref": "#/definitions/rednote.NoteAuthor" + "currency": { + "$ref": "#/definitions/papajohns.IndiaCurrency" }, - "description": { + "fetched_at": { "type": "string" }, - "image_urls": { - "items": { - "type": "string" - }, - "type": "array" + "item": { + "$ref": "#/definitions/papajohns.IndiaMenuItem" }, - "note_id": { - "example": "0123456789abcdef01234567", + "market": { + "example": "india", "type": "string" }, - "published_at": { + "source_url": { "type": "string" }, - "stats": { - "$ref": "#/definitions/rednote.NoteStats" - }, - "tags": { + "taxes": { "items": { - "$ref": "#/definitions/rednote.NoteTag" + "$ref": "#/definitions/papajohns.IndiaTax" }, "type": "array" - }, - "title": { - "type": "string" - }, - "type": { - "example": "normal", - "type": "string" - }, - "url": { - "type": "string" - }, - "video_duration_seconds": { - "type": "number" - }, - "video_url": { - "type": "string" } }, "type": "object" }, - "rednote.NoteStats": { + "papajohns.IndiaMenuOptionChoice": { "properties": { - "collected_count": { - "example": 7, - "type": "integer" + "default": { + "example": true, + "type": "boolean" }, - "comment_count": { - "example": 3, - "type": "integer" + "extra": { + "example": false, + "type": "boolean" }, - "liked_count": { - "example": 42, - "type": "integer" + "half_price": { + "example": 399.5, + "type": "number" }, - "share_count": { - "example": 1, - "type": "integer" - } - }, - "type": "object" - }, - "rednote.NoteTag": { - "properties": { "id": { + "example": "1", + "type": "string" + }, + "image_url": { "type": "string" }, "name": { - "example": "synthetic_tag", + "example": "Original Crust", "type": "string" + }, + "price": { + "example": 799, + "type": "number" + }, + "removable": { + "example": false, + "type": "boolean" + }, + "strike_off_price": { + "type": "number" } }, "type": "object" }, - "rednote.SuggestItem": { + "papajohns.IndiaMenuOptionGroup": { "properties": { - "highlight_flags": { + "base_price": { + "example": true, + "type": "boolean" + }, + "choices": { "items": { - "type": "boolean" + "$ref": "#/definitions/papajohns.IndiaMenuOptionChoice" }, "type": "array" }, - "search_type": { - "example": "notes", + "halves_enabled": { + "example": true, + "type": "boolean" + }, + "id": { + "example": "1", "type": "string" }, - "text": { - "example": "coffee", + "name": { + "example": "Crust", "type": "string" }, - "type": { - "example": "top_note", + "selection_rule": { + "example": "Exactly", + "type": "string" + }, + "selection_spec": { + "example": "1", "type": "string" } }, "type": "object" }, - "rednote.SuggestResponse": { + "papajohns.IndiaMenuResponse": { "properties": { - "count": { - "example": 10, - "type": "integer" - }, - "items": { + "categories": { "items": { - "$ref": "#/definitions/rednote.SuggestItem" + "$ref": "#/definitions/papajohns.IndiaMenuCategory" }, "type": "array" }, - "keyword": { - "example": "coffee", + "currency": { + "$ref": "#/definitions/papajohns.IndiaCurrency" + }, + "fetched_at": { "type": "string" }, - "search_cpl_id": { + "filters": { + "$ref": "#/definitions/papajohns.IndiaMenuFilters" + }, + "item_count": { + "example": 114, + "type": "integer" + }, + "market": { + "example": "india", "type": "string" }, - "word_request_id": { + "source_url": { "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "taxes": { + "items": { + "$ref": "#/definitions/papajohns.IndiaTax" + }, + "type": "array" } }, "type": "object" }, - "rednote.commentsResponseDoc": { + "papajohns.IndiaMenuSize": { "properties": { - "code": { - "example": 200, - "type": "integer" + "default": { + "example": true, + "type": "boolean" }, - "data": { - "$ref": "#/definitions/rednote.CommentsResponse" + "id": { + "example": "3", + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "example": "Large", "type": "string" + }, + "option_groups": { + "items": { + "$ref": "#/definitions/papajohns.IndiaMenuOptionGroup" + }, + "type": "array" + }, + "rank": { + "example": 1, + "type": "integer" } }, "type": "object" }, - "rednote.exploreResponseDoc": { + "papajohns.IndiaMenuSubcategory": { "properties": { - "code": { - "example": 200, - "type": "integer" + "id": { + "example": "8", + "type": "string" }, - "data": { - "$ref": "#/definitions/rednote.ExploreResponse" + "items": { + "items": { + "$ref": "#/definitions/papajohns.IndiaMenuItem" + }, + "type": "array" }, - "msg": { - "example": "OK", + "name": { + "example": "India Special", "type": "string" } }, "type": "object" }, - "rednote.noteResponseDoc": { + "papajohns.IndiaStore": { "properties": { - "code": { - "example": 200, - "type": "integer" + "address": { + "type": "string" }, - "data": { - "$ref": "#/definitions/rednote.NoteResponse" + "channels": { + "description": "Channels lists the order channels this store publishes hours for.", + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "email": { "type": "string" - } - }, - "type": "object" - }, - "rednote.suggestResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/rednote.SuggestResponse" + "hours": { + "items": { + "$ref": "#/definitions/papajohns.IndiaStoreHours" + }, + "type": "array" }, - "msg": { - "example": "OK", + "id": { + "example": "7", + "type": "string" + }, + "latitude": { + "example": 12.840903161072498, + "type": "number" + }, + "longitude": { + "example": 77.65593675511532, + "type": "number" + }, + "name": { + "example": "PJPB - 360° Business Park, Electronics City BLR", + "type": "string" + }, + "phone": { + "example": "9240244043", + "type": "string" + }, + "store_code": { + "example": "QRyCHD", "type": "string" } }, "type": "object" }, - "reelshort.Actor": { + "papajohns.IndiaStoreHours": { "properties": { - "imdb_url": { + "channel": { + "example": "Take Away", "type": "string" }, - "name": { + "channel_id": { + "example": "2", "type": "string" }, - "photo_url": { + "closes": { + "example": "23:00:59", + "type": "string" + }, + "day": { + "example": "Monday", + "type": "string" + }, + "opens": { + "example": "11:00:00", "type": "string" } }, "type": "object" }, - "reelshort.Book": { + "papajohns.IndiaStoresResponse": { "properties": { - "cover_url": { + "channel": { + "example": "Delivery", "type": "string" }, - "description": { + "channel_id": { "type": "string" }, - "episodes": { - "type": "integer" - }, - "favorites": { - "type": "integer" - }, - "first_paid_episode": { - "description": "FirstPaidEpisode is the episode number from which episodes are paid; 0\nwhen ReelShort lists none.", + "count": { + "example": 9, "type": "integer" }, - "has_trailer": { - "type": "boolean" - }, - "id": { + "fetched_at": { "type": "string" }, - "language": { + "market": { + "example": "india", "type": "string" }, - "plays": { - "description": "Plays and Favorites are ReelShort's own read_count and collect_count.", - "type": "integer" + "source_url": { + "type": "string" }, - "tags": { + "stores": { "items": { - "type": "string" + "$ref": "#/definitions/papajohns.IndiaStore" }, "type": "array" - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" } }, "type": "object" }, - "reelshort.Episode": { + "papajohns.IndiaTax": { "properties": { - "free": { + "inclusive": { + "example": false, "type": "boolean" }, - "id": { - "type": "string" - }, - "kind": { - "description": "episode or trailer", - "type": "string" - }, - "likes": { - "type": "integer" - }, - "number": { - "description": "Number is the episode number; 0 is the trailer.", - "type": "integer" - }, - "published_at": { + "name": { + "example": "GST", "type": "string" }, - "thumbnail_url": { + "type": { + "example": "percentage", "type": "string" }, - "url": { - "type": "string" + "value": { + "example": 5, + "type": "number" } }, "type": "object" }, - "reelshort.FandomCategoriesResponse": { + "papajohns.IntlDeal": { "properties": { - "categories": { + "availability": { + "description": "Availability lists the weekdays the offer runs on.", "items": { - "$ref": "#/definitions/reelshort.FandomCategory" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "reelshort.FandomCategory": { - "properties": { + }, + "category": { + "example": "app", + "type": "string" + }, "description": { "type": "string" }, + "dispatch_method": { + "description": "DispatchMethod is the fulfillment this offer applies to.", + "example": "pj_delivery", + "type": "string" + }, + "end_date": { + "example": "2026-09-30T23:45:00Z", + "type": "string" + }, "id": { + "example": 955, "type": "integer" }, + "image_url": { + "type": "string" + }, "name": { + "example": "Combo Veranito delivery", "type": "string" }, - "posts": { + "offer_id": { + "description": "OfferID is set when this promotion is backed by a structured offer, and\nis the id GET /papajohns/intl/offer takes to return its full\ncomposition. Absent when the banner points at something else.", + "example": 660, "type": "integer" }, - "slug": { + "product": { + "description": "Product is the offer's headline product name.", + "example": "Combo Veranito", + "type": "string" + }, + "start_date": { + "example": "2025-10-24T00:00:00Z", "type": "string" }, "url": { @@ -175923,2285 +184062,2409 @@ }, "type": "object" }, - "reelshort.FandomPost": { + "papajohns.IntlDealsResponse": { "properties": { - "categories": { + "count": { + "example": 1, + "type": "integer" + }, + "deals": { "items": { - "type": "string" + "$ref": "#/definitions/papajohns.IntlDeal" }, "type": "array" }, - "excerpt": { + "dispatch_method": { + "example": "pj_delivery", "type": "string" }, - "id": { - "type": "integer" - }, - "image_url": { + "fetched_at": { "type": "string" }, - "modified_at": { + "market": { + "example": "spain", "type": "string" }, - "published_at": { + "source_url": { "type": "string" + } + }, + "type": "object" + }, + "papajohns.IntlDeliveryZone": { + "properties": { + "delivery_price": { + "example": 0, + "type": "number" }, - "slug": { - "type": "string" + "minimum_order_for_delivery": { + "type": "number" }, - "title": { - "type": "string" + "minimum_order_for_free_delivery": { + "type": "number" }, - "url": { + "name": { + "example": "Zona 1", "type": "string" } }, "type": "object" }, - "reelshort.FandomPostResponse": { + "papajohns.IntlIngredient": { "properties": { - "categories": { - "items": { - "type": "string" - }, - "type": "array" + "available_as_half": { + "description": "AvailableAsHalf reports whether it can be applied to just one half.", + "example": true, + "type": "boolean" }, - "content": { - "description": "Content is the article body as plain text with paragraph breaks.", + "base": { + "description": "Base marks an ingredient included on the pizza by default.", + "example": false, + "type": "boolean" + }, + "category": { + "description": "Category is the ingredient family, e.g. meat or vegetable.", + "example": "base_sauce", "type": "string" }, - "excerpt": { + "description": { "type": "string" }, "id": { + "example": 25, "type": "integer" }, "image_url": { "type": "string" }, - "modified_at": { - "type": "string" - }, - "published_at": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "title": { + "name": { + "example": "Salsa de Tomate", "type": "string" }, - "title_ids": { - "description": "TitleIDs are the ReelShort title ids the article links to, in order of\nfirst appearance; pass them to reelshort-movie.", - "items": { - "type": "string" + "premium": { + "description": "Premium marks an ingredient charged at the premium rate rather than the\nnormal one.", + "example": false, + "type": "boolean" + } + }, + "type": "object" + }, + "papajohns.IntlIngredientPrices": { + "properties": { + "normal": { + "additionalProperties": { + "format": "float64", + "type": "number" }, - "type": "array" + "type": "object" }, - "url": { - "type": "string" + "premium": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "type": "object" } }, "type": "object" }, - "reelshort.FandomPostsResponse": { + "papajohns.IntlIngredientsResponse": { "properties": { "category": { + "example": "meat", "type": "string" }, - "limit": { + "count": { + "example": 39, "type": "integer" }, - "page": { - "type": "integer" + "fetched_at": { + "type": "string" }, - "posts": { + "ingredients": { "items": { - "$ref": "#/definitions/reelshort.FandomPost" + "$ref": "#/definitions/papajohns.IntlIngredient" }, "type": "array" }, - "search": { + "market": { + "example": "spain", "type": "string" }, - "total": { + "menu_id": { + "example": 8, "type": "integer" }, - "total_pages": { - "type": "integer" - } - }, - "type": "object" - }, - "reelshort.HomeResponse": { - "properties": { - "language": { - "type": "string" + "prices": { + "allOf": [ + { + "$ref": "#/definitions/papajohns.IntlIngredientPrices" + } + ], + "description": "Prices is what adding one extra ingredient costs, keyed by size code." }, - "shelves": { - "items": { - "$ref": "#/definitions/reelshort.Shelf" + "sizes": { + "additionalProperties": { + "type": "string" }, - "type": "array" + "type": "object" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "reelshort.MovieResponse": { + "papajohns.IntlMenuProduct": { "properties": { - "actors": { - "items": { - "$ref": "#/definitions/reelshort.Actor" - }, - "type": "array" - }, - "ai_generated": { + "alcohol": { "type": "boolean" }, - "badge": { + "category": { + "example": "pizza", "type": "string" }, - "cover_url": { + "currency": { + "example": "EUR", "type": "string" }, + "customizable": { + "type": "boolean" + }, "description": { "type": "string" }, - "dubbed": { - "type": "boolean" - }, - "episode_count": { - "description": "EpisodeCount counts the numbered episodes; the trailer is not included\n(ReelShort's own total on its movie page does include it).", - "type": "integer" + "discount": { + "type": "number" }, - "episodes": { + "food_type": { + "description": "FoodType carries dietary markers the platform publishes, e.g. vegetarian.", "items": { - "$ref": "#/definitions/reelshort.Episode" + "type": "string" }, "type": "array" }, - "favorites": { - "type": "integer" - }, - "first_paid_episode": { - "type": "integer" - }, "id": { - "type": "string" + "example": 8, + "type": "integer" }, - "imdb_url": { + "image_url": { "type": "string" }, - "language": { - "type": "string" + "initial_price": { + "type": "number" }, - "online_at": { + "kind": { + "description": "Kind is \"pizza\" or \"side\" -- the platform's two product families.", + "example": "pizza", "type": "string" }, - "original_language": { + "name": { + "example": "Super Papa", "type": "string" }, - "plays": { - "type": "integer" + "price": { + "description": "Price is set only for a product the platform prices directly rather than\nthrough variants. Read variants for anything with sizes or crusts.", + "type": "number" }, - "published_at": { - "type": "string" + "price_from": { + "description": "PriceFrom is the cheapest variant price, so a caller can rank products\nwithout walking every variant. Absent when the product has no priced\nvariant and no direct price.", + "example": 14.99, + "type": "number" }, - "tags": { + "variants": { "items": { - "$ref": "#/definitions/reelshort.Tag" + "$ref": "#/definitions/papajohns.IntlMenuVariant" }, "type": "array" - }, - "title": { - "type": "string" - }, - "update_status": { - "description": "UpdateStatus is ReelShort's raw update_status flag (1 on every title\nsampled on 2026-10-26); it is not interpreted.", - "type": "integer" - }, - "url": { - "type": "string" } }, "type": "object" }, - "reelshort.NewReleasesResponse": { + "papajohns.IntlMenuResponse": { "properties": { - "books": { - "items": { - "$ref": "#/definitions/reelshort.Book" + "count": { + "example": 43, + "type": "integer" + }, + "crusts": { + "additionalProperties": { + "type": "string" }, - "type": "array" + "type": "object" }, - "language": { + "currency": { + "example": "EUR", "type": "string" - } - }, - "type": "object" - }, - "reelshort.RelatedTag": { - "properties": { - "id": { + }, + "fetched_at": { "type": "string" }, - "name": { + "food_type": { + "example": "vegetarian", "type": "string" - } - }, - "type": "object" - }, - "reelshort.SearchResponse": { - "properties": { - "books": { - "items": { - "$ref": "#/definitions/reelshort.Book" - }, - "type": "array" }, - "keywords": { + "kind": { + "example": "pizza", "type": "string" }, - "language": { + "market": { + "example": "spain", "type": "string" }, - "page": { - "type": "integer" + "products": { + "items": { + "$ref": "#/definitions/papajohns.IntlMenuProduct" + }, + "type": "array" }, - "total": { - "description": "Total is approximate: ReelShort's search backend reports a count that\nvaries between calls for the same query.", - "type": "integer" + "sizes": { + "additionalProperties": { + "type": "string" + }, + "description": "Sizes and Crusts map every machine code used in this response to the\nmarket's own display label.", + "type": "object" }, - "total_pages": { + "source_url": { + "type": "string" + }, + "store_id": { + "example": 9, "type": "integer" } }, "type": "object" }, - "reelshort.Shelf": { + "papajohns.IntlMenuVariant": { "properties": { - "books": { - "items": { - "$ref": "#/definitions/reelshort.Book" - }, - "type": "array" + "crust": { + "example": "traditional", + "type": "string" }, - "id": { - "type": "integer" + "crust_label": { + "example": "Original", + "type": "string" + }, + "currency": { + "example": "EUR", + "type": "string" + }, + "discount": { + "type": "number" + }, + "initial_price": { + "description": "InitialPrice is the pre-discount price when a promotion is active.", + "type": "number" }, "name": { + "description": "Name is the variant's own label where the platform gives it one, e.g. a\ndrink's \"500ML\". Pizza variants are identified by size and crust instead.", + "example": "500ML", + "type": "string" + }, + "nutrition": { + "$ref": "#/definitions/papajohns.IntlNutrition" + }, + "price": { + "example": 19.98, + "type": "number" + }, + "size": { + "description": "Size and Crust are the platform's stable machine codes.", + "example": "family", + "type": "string" + }, + "size_label": { + "description": "SizeLabel and CrustLabel are the market's own display names for those\ncodes, in the local language.", + "example": "Familiar", "type": "string" } }, "type": "object" }, - "reelshort.ShelfResponse": { + "papajohns.IntlNutrition": { "properties": { - "books": { - "items": { - "$ref": "#/definitions/reelshort.Book" - }, - "type": "array" + "calories": { + "example": 1090, + "type": "number" }, - "id": { - "type": "integer" + "grams": { + "example": 470, + "type": "number" }, - "name": { + "portions": { + "example": "8", "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "reelshort.Tag": { + "papajohns.IntlOfferChoice": { "properties": { - "category_id": { + "crust": { + "example": "traditional", "type": "string" }, - "id": { + "crust_label": { + "example": "Original", "type": "string" }, - "kind": { + "description": { "type": "string" }, "name": { + "example": "Italiana Ranch", + "type": "string" + }, + "product_id": { + "description": "ProductID is the underlying product, usable with\nGET /papajohns/intl/product.", + "example": 336, + "type": "integer" + }, + "size": { + "example": "family", + "type": "string" + }, + "size_label": { + "description": "SizeLabel and CrustLabel are the market's own display names.", + "example": "Familiar", "type": "string" + }, + "surcharge": { + "description": "Surcharge is what picking this choice adds to the offer price. Absent\nwhen the choice costs nothing extra.", + "example": 1.9, + "type": "number" + }, + "variant_id": { + "example": 830, + "type": "integer" } }, "type": "object" }, - "reelshort.TagBooksResponse": { + "papajohns.IntlOfferResponse": { "properties": { - "books": { + "availability": { + "description": "Availability lists the weekdays the offer runs on.", "items": { - "$ref": "#/definitions/reelshort.Book" + "type": "string" }, "type": "array" }, + "currency": { + "example": "EUR", + "type": "string" + }, + "customizable": { + "example": true, + "type": "boolean" + }, "description": { "type": "string" }, - "limit": { - "type": "integer" + "discount": { + "type": "number" }, - "page": { + "dispatch_method": { + "description": "DispatchMethod is the fulfillment this offer applies to, e.g. both.", + "example": "both", + "type": "string" + }, + "end_date": { + "example": "2026-09-21T23:45:00Z", + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "free_extras": { + "description": "FreeExtras is how many extra ingredients are included at no charge, and\nMinIngredients/MaxIngredients bound how many may be chosen.", + "example": 2, "type": "integer" }, - "related_tags": { - "items": { - "$ref": "#/definitions/reelshort.RelatedTag" - }, - "type": "array" + "id": { + "example": 660, + "type": "integer" }, - "tag": { - "$ref": "#/definitions/reelshort.Tag" + "image_url": { + "type": "string" }, - "top_titles": { + "ingredient_categories": { + "description": "IngredientCategories lists the ingredient families this offer allows.", "items": { - "$ref": "#/definitions/reelshort.TitleRef" + "type": "string" }, "type": "array" }, - "total_items": { - "description": "TotalItems is ReelShort's total for the tag; paging can return fewer\ndistinct titles (a title can repeat across pages).", + "market": { + "example": "spain", + "type": "string" + }, + "max_ingredients": { + "example": 10, "type": "integer" - } - }, - "type": "object" - }, - "reelshort.TagMatch": { - "properties": { - "category_id": { + }, + "min_ingredients": { + "example": 1, "type": "integer" }, - "description": { + "name": { + "example": "Combo Veranito", "type": "string" }, - "id": { + "offer_type": { + "description": "OfferType is the platform's own classification, e.g. Combo.", + "example": "Combo", "type": "string" }, - "image_url": { - "type": "string" + "price": { + "example": 19.98, + "type": "number" }, - "kind": { + "promoted": { + "example": true, + "type": "boolean" + }, + "source_url": { "type": "string" }, - "name": { + "start_date": { + "example": "2023-09-19T01:00:00Z", "type": "string" }, - "titles": { - "description": "Titles is the number of titles ReelShort's search lists for the tag. It\nis approximate: reelshort-tag-books reports a different total for the\nsame tag.", - "type": "integer" + "steps": { + "items": { + "$ref": "#/definitions/papajohns.IntlOfferStep" + }, + "type": "array" } }, "type": "object" }, - "reelshort.TagSearchResponse": { + "papajohns.IntlOfferStep": { "properties": { - "language": { - "type": "string" - }, - "page": { - "type": "integer" - }, - "page_size": { + "choice_count": { + "example": 12, "type": "integer" }, - "tags": { + "choices": { "items": { - "$ref": "#/definitions/reelshort.TagMatch" + "$ref": "#/definitions/papajohns.IntlOfferChoice" }, "type": "array" }, - "total": { + "id": { + "example": 1919, "type": "integer" }, - "word": { + "name": { + "example": "❶ Elige tu pizza familiar", "type": "string" + }, + "optional": { + "description": "Optional reports whether the step may be skipped.", + "example": false, + "type": "boolean" } }, "type": "object" }, - "reelshort.TagsResponse": { + "papajohns.IntlProductResponse": { "properties": { + "available_as_half": { + "description": "AvailableAsHalf reports whether this product may be used as one half of\na half-and-half pizza.", + "example": true, + "type": "boolean" + }, "category": { + "example": "pizza", "type": "string" }, - "category_id": { - "type": "integer" + "cheese_changeable": { + "example": true, + "type": "boolean" }, - "language": { + "customizable": { + "description": "Customizable reports whether toppings may be changed on this product.", + "example": true, + "type": "boolean" + }, + "description": { "type": "string" }, - "tags": { + "fetched_at": { + "type": "string" + }, + "food_type": { "items": { - "$ref": "#/definitions/reelshort.Tag" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "reelshort.TitleRef": { - "properties": { + }, + "free_extras": { + "description": "FreeExtras is how many extra ingredients are included at no charge.", + "example": 2, + "type": "integer" + }, "id": { + "example": 8, + "type": "integer" + }, + "image_url": { "type": "string" }, - "title": { + "image_urls": { + "items": { + "type": "string" + }, + "type": "array" + }, + "market": { + "example": "spain", "type": "string" - } - }, - "type": "object" - }, - "reelshort.fandomCategoriesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/reelshort.FandomCategoriesResponse" + "name": { + "example": "Super Papa", + "type": "string" }, - "msg": { - "example": "OK", + "slug": { + "example": "super-papa", + "type": "string" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "reelshort.fandomPostResponseDoc": { + "papajohns.IntlStore": { "properties": { - "code": { - "example": 200, + "address": { + "type": "string" + }, + "city": { + "example": "Madrid", + "type": "string" + }, + "delivery_open": { + "example": true, + "type": "boolean" + }, + "delivery_wait_minutes": { + "example": 30, "type": "integer" }, - "data": { - "$ref": "#/definitions/reelshort.FandomPostResponse" + "delivery_zones": { + "items": { + "$ref": "#/definitions/papajohns.IntlDeliveryZone" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "reelshort.fandomPostsResponseDoc": { - "properties": { - "code": { - "example": 200, + "external_delivery": { + "example": true, + "type": "boolean" + }, + "future_orders": { + "example": true, + "type": "boolean" + }, + "hours": { + "items": { + "$ref": "#/definitions/papajohns.IntlStoreHours" + }, + "type": "array" + }, + "id": { + "example": 9, "type": "integer" }, - "data": { - "$ref": "#/definitions/reelshort.FandomPostsResponse" + "latitude": { + "example": 40.401686, + "type": "number" }, - "msg": { - "example": "OK", + "longitude": { + "example": -3.708348, + "type": "number" + }, + "map_url": { "type": "string" - } - }, - "type": "object" - }, - "reelshort.homeResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "menu_id": { + "description": "MenuID identifies the catalog this restaurant serves. Several\nrestaurants usually share one.", + "example": 8, "type": "integer" }, - "data": { - "$ref": "#/definitions/reelshort.HomeResponse" + "name": { + "example": "Vallejo Nájera", + "type": "string" }, - "msg": { - "example": "OK", + "order_method": { + "description": "OrderMethod is the fulfillment the restaurant supports, as upstream\nreports it, e.g. both, delivery, or pick_up.", + "example": "both", "type": "string" - } - }, - "type": "object" - }, - "reelshort.movieResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/reelshort.MovieResponse" + "payment_methods": { + "description": "PaymentMethods lists only the methods this restaurant actually accepts.", + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "phone": { + "example": "+34910493017", "type": "string" - } - }, - "type": "object" - }, - "reelshort.newReleasesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/reelshort.NewReleasesResponse" + "pickup_open": { + "example": true, + "type": "boolean" }, - "msg": { - "example": "OK", + "pickup_wait_minutes": { + "example": 15, + "type": "integer" + }, + "region": { + "example": "Madrid", "type": "string" } }, "type": "object" }, - "reelshort.searchResponseDoc": { + "papajohns.IntlStoreHours": { "properties": { - "code": { - "example": 200, - "type": "integer" + "closes": { + "example": "23:59:59", + "type": "string" }, - "data": { - "$ref": "#/definitions/reelshort.SearchResponse" + "day": { + "example": "monday", + "type": "string" }, - "msg": { - "example": "OK", + "dispatch_method": { + "description": "DispatchMethod is the fulfillment channel this window applies to,\ne.g. in_store or pj_delivery.", + "example": "in_store", + "type": "string" + }, + "opens": { + "example": "12:00:00", "type": "string" } }, "type": "object" }, - "reelshort.shelfResponseDoc": { + "papajohns.IntlStoresResponse": { "properties": { - "code": { - "example": 200, + "count": { + "description": "Count is how many restaurants this response carries.", + "example": 5, "type": "integer" }, - "data": { - "$ref": "#/definitions/reelshort.ShelfResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "fulfillment": { + "description": "Fulfillment, Latitude and Longitude echo a coordinate search and are\nabsent on a store_id lookup, which has no search origin. They are\nomitted rather than zeroed because 0,0 is itself a real coordinate.", + "example": "delivery", "type": "string" - } - }, - "type": "object" - }, - "reelshort.tagBooksResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/reelshort.TagBooksResponse" + "latitude": { + "example": 40.4168, + "type": "number" }, - "msg": { - "example": "OK", + "longitude": { + "example": -3.7038, + "type": "number" + }, + "market": { + "example": "spain", "type": "string" - } - }, - "type": "object" - }, - "reelshort.tagSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/reelshort.TagSearchResponse" + "page": { + "description": "Page, TotalPages and TotalCount describe the rest of the result set, so\na caller can tell a first page from the whole of it. TotalCount is the\nmarket-wide restaurant total rather than a match count, because the\nsearch has no radius cut-off -- every restaurant in the market is\nranked, and this is where in that ranking the response sits. All three\nare absent for a store_id lookup and for pickup, neither of which\nupstream paginates.", + "example": 1, + "type": "integer" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" + }, + "stores": { + "items": { + "$ref": "#/definitions/papajohns.IntlStore" + }, + "type": "array" + }, + "total_count": { + "example": 97, + "type": "integer" + }, + "total_pages": { + "example": 20, + "type": "integer" } }, "type": "object" }, - "reelshort.tagsResponseDoc": { + "papajohns.LatamCategory": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/reelshort.TagsResponse" + "id": { + "example": "1", + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "example": "Pizzas", "type": "string" + }, + "product_count": { + "example": 25, + "type": "integer" + }, + "products": { + "items": { + "$ref": "#/definitions/papajohns.LatamProduct" + }, + "type": "array" } }, "type": "object" }, - "referrals.referralAttributionDoc": { + "papajohns.LatamMenuResponse": { "properties": { - "campaign": { - "example": "spring-launch", - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/papajohns.LatamCategory" + }, + "type": "array" }, - "code": { - "example": "A1B2C3D4E5F6", + "category": { "type": "string" }, - "created_at": { + "currency": { + "example": "USD", "type": "string" }, - "expires_at": { + "fetched_at": { "type": "string" }, - "id": { - "example": "abc123", + "market": { + "example": "el-salvador", "type": "string" }, - "qualified_at": { - "type": "string" + "partial": { + "description": "Partial is true when a paginated upstream failed part-way and the\nresponse carries only the pages that were retrieved. A menu that is\nquietly short is indistinguishable from one that genuinely has fewer\nitems, so it is flagged rather than left to look complete.", + "example": false, + "type": "boolean" }, - "reward_credits": { - "example": 10000, + "product_count": { + "description": "ProductCount is how many products the response carries. Where the\nupstream paginates, every page is followed before returning.", + "example": 25, "type": "integer" }, - "rewarded_at": { - "type": "string" - }, - "role": { - "enum": [ - "referrer", - "referred" - ], - "example": "referrer", - "type": "string" - }, - "status": { - "enum": [ - "attributed", - "qualified", - "review_required", - "rewarded", - "expired", - "capped", - "failed", - "rejected" - ], - "example": "rewarded", + "source_url": { "type": "string" } }, "type": "object" }, - "referrals.referralClickRequestDoc": { + "papajohns.LatamProduct": { "properties": { - "click_id": { - "example": "refclk_abc123", + "category": { + "example": "Pizzas", "type": "string" }, - "code": { - "example": "A1B2C3D4E5F6", + "currency": { + "example": "USD", "type": "string" }, - "landing_path": { - "example": "/pricing", + "description": { "type": "string" }, - "utm_campaign": { - "example": "spring-launch", + "id": { + "example": "8", "type": "string" }, - "utm_medium": { - "example": "email", + "image_url": { "type": "string" }, - "utm_source": { - "example": "newsletter", - "type": "string" - } - }, - "type": "object" - }, - "referrals.referralClickResponseDoc": { - "properties": { - "click_id": { - "example": "refclk_abc123", + "name": { + "example": "The Works", "type": "string" }, - "code": { - "example": "A1B2C3D4E5F6", + "price_from": { + "description": "PriceFrom is the cheapest priced variant, so a caller can rank products\nwithout walking every variant.", + "example": 11.99, + "type": "number" + }, + "url": { "type": "string" - } - }, - "type": "object" - }, - "referrals.referralsEventsResponseDoc": { - "properties": { - "items": { + }, + "variants": { "items": { - "$ref": "#/definitions/referrals.referralAttributionDoc" + "$ref": "#/definitions/papajohns.LatamVariant" }, "type": "array" } }, "type": "object" }, - "referrals.referralsMeResponseDoc": { + "papajohns.LatamVariant": { "properties": { - "attribution_window_days": { - "example": 30, - "type": "integer" + "available": { + "example": true, + "type": "boolean" }, - "code": { - "example": "A1B2C3D4E5F6", + "crust": { + "example": "Masa Original", "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/referrals.referralAttributionDoc" - }, - "type": "array" + "currency": { + "example": "USD", + "type": "string" }, - "monthly_referrer_reward_cap": { - "example": 10, - "type": "integer" + "fulfillment": { + "description": "Fulfillment is the order channel this price applies to, where the market\nprices delivery and pickup differently. Colombia does: the same item is\ncommonly ~15% dearer for \"Domicilio\" than \"Recoger en Tienda\", so two\nvariants that look otherwise identical are not duplicates.", + "example": "Domicilio", + "type": "string" }, - "referred_reward_credits": { - "example": 10000, - "type": "integer" + "list_price": { + "description": "ListPrice is the pre-discount price where the market publishes one and\nit actually differs from price.", + "type": "number" }, - "reward_credits": { - "example": 10000, - "type": "integer" + "name": { + "description": "Name is the market's own label for the variant where it gives one.", + "example": "Gigante", + "type": "string" }, - "share_path": { - "example": "/r/A1B2C3D4E5F6", + "price": { + "example": 14.99, + "type": "number" + }, + "sauce": { + "description": "Sauce is populated only by Colombia, whose SKUs vary by sauce too.", + "example": "Salsa Pizza", "type": "string" }, - "stats": { - "$ref": "#/definitions/referrals.referralsStatsDoc" + "size": { + "description": "Size and Crust are populated where the market distinguishes them.", + "example": "GIGANTE", + "type": "string" + }, + "sku": { + "type": "string" } }, "type": "object" }, - "referrals.referralsStatsDoc": { + "papajohns.MenuCategory": { "properties": { - "attributed": { - "example": 3, - "type": "integer" - }, - "capped": { - "example": 0, - "type": "integer" - }, - "expired": { - "example": 0, - "type": "integer" + "id": { + "example": "pizza", + "type": "string" }, - "qualified": { - "example": 1, - "type": "integer" + "image_url": { + "type": "string" }, - "rejected": { - "example": 0, - "type": "integer" + "name": { + "example": "Pizza", + "type": "string" }, - "review_required": { - "example": 0, + "product_count": { + "description": "ProductCount is how many priced SKUs this category contains.", + "example": 96, "type": "integer" }, - "rewarded": { - "example": 1, - "type": "integer" + "sections": { + "items": { + "$ref": "#/definitions/papajohns.MenuSection" + }, + "type": "array" } }, "type": "object" }, - "researchjobs.ResearchResult": { + "papajohns.MenuCrust": { "properties": { - "claims": { - "items": { - "$ref": "#/definitions/retrievaltypes.Claim" - }, - "type": "array" - }, - "coverage": { - "items": { - "$ref": "#/definitions/retrievaltypes.SourceCoverage" - }, - "type": "array" - }, - "evidence": { - "items": { - "$ref": "#/definitions/retrievaltypes.Evidence" - }, - "type": "array" - }, - "job_id": { + "code": { + "example": "PIZZA_ORIGINAL", "type": "string" }, - "partial": { + "default": { + "example": true, "type": "boolean" }, - "ready": { - "type": "boolean" + "id": { + "example": 1, + "type": "integer" }, - "report_markdown": { + "name": { + "example": "Original Crust", "type": "string" }, - "result_kind": { - "enum": [ - "evidence_only", - "report", - "structured" - ], + "sub_type": { + "example": "Original", "type": "string" - }, - "searches": { - "items": { - "$ref": "#/definitions/researchjobs.SearchRecord" - }, - "type": "array" - }, - "snapshot_sequence": { - "type": "integer" - }, - "source_snapshot": { - "$ref": "#/definitions/researchjobs.SourceSnapshot" - }, - "structured_data": { - "type": "object" - }, - "usage": { - "$ref": "#/definitions/retrievaltypes.Usage" - }, - "warnings": { - "items": { - "$ref": "#/definitions/retrievaltypes.Warning" - }, - "type": "array" } }, "type": "object" }, - "researchjobs.Scope": { - "enum": [ - "web", - "papers", - "developer", - "mixed" - ], - "type": "string", - "x-enum-varnames": [ - "ScopeWeb", - "ScopePapers", - "ScopeDeveloper", - "ScopeMixed" - ] - }, - "researchjobs.SearchRecord": { + "papajohns.MenuInstruction": { "properties": { - "hits": { + "choices": { "items": { - "$ref": "#/definitions/researchjobs.SearchRecordHit" + "$ref": "#/definitions/papajohns.MenuInstructionChoice" }, "type": "array" }, - "query": { + "description": { + "example": "How much cheese?", "type": "string" }, - "source_id": { - "type": "string" + "id": { + "example": 2, + "type": "integer" }, - "source_kind": { - "allOf": [ - { - "$ref": "#/definitions/retrievaltypes.SourceKind" - } - ], - "enum": [ - "web", - "paper", - "developer" - ] + "name": { + "example": "CHEESE", + "type": "string" } }, "type": "object" }, - "researchjobs.SearchRecordHit": { + "papajohns.MenuInstructionChoice": { "properties": { - "snippet": { + "code": { + "example": "ILC", "type": "string" }, - "source_id": { - "type": "string" + "default": { + "example": false, + "type": "boolean" }, - "title": { - "type": "string" + "id": { + "example": 6, + "type": "integer" }, - "url": { + "name": { + "example": "Light Cheese", "type": "string" } }, "type": "object" }, - "researchjobs.SourceGeneration": { + "papajohns.MenuItemResponse": { "properties": { - "generation_id": { + "category": { + "example": "pizza", "type": "string" }, - "kind": { + "fetched_at": { + "type": "string" + }, + "group": { "allOf": [ { - "$ref": "#/definitions/retrievaltypes.SourceKind" + "$ref": "#/definitions/papajohns.MenuProductGroup" } ], - "enum": [ - "web", - "paper", - "developer" - ] + "description": "Group is the product group this SKU belongs to, carrying the full\ncustomization axes for it." }, - "source_id": { - "type": "string" + "national_default": { + "example": false, + "type": "boolean" }, - "source_revision": { - "type": "string" - } - }, - "type": "object" - }, - "researchjobs.SourceSnapshot": { - "properties": { - "registry_revision": { + "product": { + "$ref": "#/definitions/papajohns.MenuProduct" + }, + "section": { + "example": "Most Popular", "type": "string" }, - "scope": { - "allOf": [ - { - "$ref": "#/definitions/researchjobs.Scope" - } - ], - "enum": [ - "web", - "papers", - "developer", - "mixed" - ] + "source_url": { + "type": "string" }, - "sources": { - "items": { - "$ref": "#/definitions/researchjobs.SourceGeneration" - }, - "type": "array" + "store_id": { + "example": 5054, + "type": "integer" } }, "type": "object" }, - "researchjobs.researchEventsResponseDoc": { + "papajohns.MenuProduct": { "properties": { + "calories": { + "description": "Calories is per the serving described by serving_label.", + "example": 210, + "type": "integer" + }, "code": { + "example": "PR10Q1", + "type": "string" + }, + "crust_id": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/retrievaltypes.JobEventsResponse" + "description": { + "type": "string" }, - "msg": { + "disclaimer": { "type": "string" - } - }, - "type": "object" - }, - "researchjobs.researchLimitsDoc": { - "properties": { - "browser_renders": { - "default": 0, - "enum": [ - 0 - ], - "type": "integer" }, - "input_tokens": { - "default": 60000, - "maximum": 100000, - "minimum": 1000, - "type": "integer" + "image_url": { + "type": "string" }, - "max_credits": { - "maximum": 10000, - "minimum": 1, - "type": "integer" + "name": { + "example": "10 Inch Original Pepperoni Pizza", + "type": "string" }, - "output_tokens": { - "default": 8000, - "maximum": 16000, - "minimum": 256, - "type": "integer" + "price": { + "description": "Price is this store's price. A build-your-own SKU whose price depends\nentirely on the customer's choices reports 0.", + "example": 14.99, + "type": "number" }, - "rounds": { - "default": 3, - "maximum": 5, - "minimum": 1, - "type": "integer" + "regular_price": { + "description": "RegularPrice is the pre-promotion menu price where it differs.", + "example": 14.99, + "type": "number" }, - "searches": { - "default": 8, - "maximum": 20, - "minimum": 1, - "type": "integer" + "serving_label": { + "description": "ServingLabel describes what calories are counted per, e.g. \"/slice, 6 slices\".", + "example": "/slice, 6 slices", + "type": "string" }, - "sources": { - "default": 20, - "maximum": 50, - "minimum": 1, - "type": "integer" + "size": { + "description": "Size is the size label this SKU represents within its group.", + "example": "Small", + "type": "string" }, - "timeout_seconds": { - "default": 180, - "maximum": 600, - "minimum": 30, + "size_id": { + "example": 2, "type": "integer" - } - }, - "required": [ - "max_credits" - ], - "type": "object" - }, - "researchjobs.researchResultsResponseDoc": { - "properties": { - "code": { + }, + "sku": { + "example": "1-1-2-115", + "type": "string" + }, + "slices": { + "example": 6, "type": "integer" }, - "data": { - "$ref": "#/definitions/researchjobs.ResearchResult" + "surcharge": { + "type": "number" }, - "msg": { + "title": { + "description": "Title is the shorter in-menu label, e.g. \"Small Original Crust - Pepperoni\".", "type": "string" } }, "type": "object" }, - "researchjobs.researchStartRequestDoc": { + "papajohns.MenuProductGroup": { "properties": { - "exclude_domains": { + "allow_half_toppings": { + "example": true, + "type": "boolean" + }, + "available_topping_ids": { "items": { - "type": "string" + "type": "integer" }, "type": "array" }, - "idempotency_key": { - "example": "0123456789abcdef", - "type": "string" - }, - "include_domains": { + "crusts": { "items": { - "type": "string" + "$ref": "#/definitions/papajohns.MenuCrust" }, "type": "array" }, - "limits": { - "$ref": "#/definitions/researchjobs.researchLimitsDoc" - }, - "output_format": { - "enum": [ - "report", - "json" - ], - "example": "report", + "customizable": { + "description": "Customizable reports how far the product can be customized, as upstream\nclassifies it, e.g. full or none.", + "example": "full", "type": "string" }, - "query": { - "example": "How do recent studies measure retrieval quality?", + "description": { "type": "string" }, - "schema": { - "additionalProperties": {}, - "type": "object" + "featured": { + "type": "boolean" }, - "scope": { - "enum": [ - "web", - "papers", - "developer", - "mixed" - ], - "example": "mixed", + "free_toppings": { + "type": "integer" + }, + "id": { + "example": "cyo", "type": "string" }, - "seed_urls": { - "items": { - "type": "string" - }, - "type": "array" + "image_url": { + "type": "string" }, - "sources": { + "instructions": { "items": { - "type": "string" + "$ref": "#/definitions/papajohns.MenuInstruction" }, "type": "array" - } - }, - "required": [ - "idempotency_key", - "limits", - "query" - ], - "type": "object" - }, - "researchjobs.researchStartResponseDoc": { - "properties": { - "code": { - "type": "integer" - }, - "data": { - "$ref": "#/definitions/retrievaltypes.JobSubmission" }, - "msg": { - "type": "string" - } - }, - "type": "object" - }, - "researchjobs.researchStatusResponseDoc": { - "properties": { - "code": { + "max_same_topping": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/retrievaltypes.JobStatus" - }, - "msg": { - "type": "string" - } - }, - "type": "object" - }, - "researchpapers.CitationRelation": { - "properties": { - "from_id": { - "type": "string" + "max_toppings": { + "description": "Topping rules. AvailableToppingIDs are upstream's own numeric ids; this\nAPI publishes no name for them, so they are exposed as ids rather than\ninvented labels.", + "example": 7, + "type": "integer" }, - "retrieved_at": { - "type": "string" + "price_from": { + "description": "PriceFrom is the cheapest priced SKU in the group, so a caller can rank\nproducts without walking every SKU.", + "example": 14.99, + "type": "number" }, - "source_id": { - "type": "string" + "products": { + "items": { + "$ref": "#/definitions/papajohns.MenuProduct" + }, + "type": "array" }, - "source_url": { - "type": "string" + "sizes": { + "description": "Sizes, Crusts and Instructions are populated only when\ninclude_options=true.", + "items": { + "$ref": "#/definitions/papajohns.MenuSize" + }, + "type": "array" }, - "to_id": { + "title": { + "example": "Create Your Own Pizza", "type": "string" } }, "type": "object" }, - "researchpapers.EuropePMCFullText": { + "papajohns.MenuResponse": { "properties": { - "attribution": { - "type": "string" - }, - "content_sha256": { - "type": "string" - }, - "copyright": { - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/papajohns.MenuCategory" + }, + "type": "array" }, - "extraction_note": { + "category": { + "example": "pizza", "type": "string" }, - "license_text": { + "fetched_at": { "type": "string" }, - "license_url": { - "type": "string" + "national_default": { + "description": "NationalDefault is true when no store was selected, so a caller can tell\na real store's prices from the fallback menu.", + "example": false, + "type": "boolean" }, - "retrieved_at": { - "type": "string" + "product_count": { + "example": 206, + "type": "integer" }, "source_url": { "type": "string" }, - "text": { - "type": "string" + "store_id": { + "description": "StoreID echoes the restaurant the prices belong to. 0 is the national\ndefault menu.", + "example": 5054, + "type": "integer" } }, "type": "object" }, - "researchpapers.PaperGraphSeed": { + "papajohns.MenuSection": { "properties": { - "paper_id": { + "description": { "type": "string" }, - "primary_id": { + "id": { + "example": "most_popular", "type": "string" }, - "status": { - "enum": [ - "ok", - "failed" - ], + "name": { + "example": "Most Popular", "type": "string" + }, + "product_groups": { + "items": { + "$ref": "#/definitions/papajohns.MenuProductGroup" + }, + "type": "array" } }, "type": "object" }, - "researchpapers.PaperReadRequest": { + "papajohns.MenuSize": { "properties": { - "limit": { + "default": { + "example": false, + "type": "boolean" + }, + "id": { + "example": 2, "type": "integer" }, - "paper_id": { + "measure": { + "description": "Measure is the physical size where the group has one, e.g. 10\".", + "example": "10\"", "type": "string" }, - "question": { + "name": { + "description": "Name is the size's marketing name, e.g. Small.", + "example": "Small", "type": "string" } }, - "required": [ - "paper_id", - "question" - ], "type": "object" }, - "researchpapers.PaperRelatedRequest": { + "papajohns.NearbyResponse": { "properties": { - "cursor": { - "type": "string" + "count": { + "example": 10, + "type": "integer" }, - "intent": { + "fetched_at": { "type": "string" }, - "limit": { + "radius": { + "example": 25, "type": "integer" }, - "mode": { - "$ref": "#/definitions/researchpapers.RelatedMode" + "source_url": { + "type": "string" }, - "seed_ids": { + "stores": { "items": { - "type": "string" + "$ref": "#/definitions/papajohns.NearbyStore" }, "type": "array" + }, + "total_in_radius": { + "description": "TotalInRadius is how many stores fall inside the radius overall,\nwhich is usually far more than one page. Use it with `offset` to\npage.", + "example": 73, + "type": "integer" } }, "type": "object" }, - "researchpapers.RelatedMode": { - "enum": [ - "references", - "citers" - ], - "type": "string", - "x-enum-varnames": [ - "RelatedReferences", - "RelatedCiters" - ] - }, - "researchretrieval.Paper": { + "papajohns.NearbyStore": { "properties": { - "abstract": { - "type": "string" + "address": { + "$ref": "#/definitions/papajohns.StoreAddress" }, - "authors": { + "delivery_hours": { + "description": "DeliveryHours and TakeoutHours are Papa John's own per-channel hours,\npublished separately from Hours and commonly later-closing.", "items": { - "$ref": "#/definitions/researchretrieval.PaperAuthor" + "$ref": "#/definitions/papajohns.StoreHours" }, "type": "array" }, - "content_level": { - "enum": [ - "metadata", - "abstract", - "full_text" - ], - "type": "string" + "distance_kilometers": { + "example": 0.97, + "type": "number" }, - "identifiers": { + "distance_miles": { + "description": "DistanceMiles and DistanceKilometers are measured from the requested\ncoordinate.", + "example": 0.6, + "type": "number" + }, + "hours": { + "description": "Hours is the store's general published week of hours.", "items": { - "$ref": "#/definitions/researchretrieval.PaperIdentifier" + "$ref": "#/definitions/papajohns.StoreHours" }, "type": "array" }, - "paper_id": { - "type": "string" + "latitude": { + "example": 34.0614412, + "type": "number" }, - "primary_id": { - "type": "string" + "longitude": { + "example": -118.2439367, + "type": "number" }, - "publication_year": { - "type": "integer" + "name": { + "example": "Papa Johns Pizza", + "type": "string" }, - "published_at": { + "order_url": { + "description": "OrderURL is Papa John's own carryout ordering deep link for this\nstore.", "type": "string" }, - "retrieved_at": { + "path": { + "description": "Path is the /papajohns/store path for this store, so a caller can go\nstraight to the detail endpoint.", "type": "string" }, - "source_urls": { + "payment_options": { + "description": "PaymentOptions are the payment methods this store accepts, e.g.\nAPPLEPAY, CASH, VISA.", "items": { "type": "string" }, "type": "array" }, - "title": { + "phone_number": { + "description": "PhoneNumber is Papa John's own E.164-shaped mainPhone, e.g.\n\"+12136172727\" -- deliberately left as published rather than\nreformatted, since geosearch and the store page publish phone\nnumbers in different shapes (mainPhone here vs. a display-formatted\nstring on /papajohns/store).", + "example": "+12136172727", "type": "string" }, - "updated_at": { + "pickup_and_delivery_services": { + "description": "PickupAndDeliveryServices are the fulfillment flags Papa John's\npublishes for this store, e.g. IN_STORE_PICKUP, SAME_DAY_DELIVERY.", + "items": { + "type": "string" + }, + "type": "array" + }, + "price_range": { + "description": "PriceRange is Papa John's own relative price tier, e.g. ONE, TWO.", + "example": "TWO", "type": "string" - } - }, - "type": "object" - }, - "researchretrieval.PaperAuthor": { - "properties": { - "affiliation": { + }, + "store_id": { + "example": "4269", "type": "string" }, - "name": { + "takeout_hours": { + "items": { + "$ref": "#/definitions/papajohns.StoreHours" + }, + "type": "array" + }, + "timezone": { + "example": "America/Los_Angeles", "type": "string" } }, "type": "object" }, - "researchretrieval.PaperFailure": { + "papajohns.NutritionFacts": { "properties": { - "message": { - "type": "string" + "calories": { + "example": 200, + "type": "number" }, - "reason": { - "enum": [ - "invalid_url", - "unsupported_content_type", - "blocked", - "not_found", - "rate_limited", - "timeout", - "upstream_error", - "internal_error", - "out_of_scope", - "robots_disallowed", - "duplicate", - "limit_reached", - "unsupported_filter", - "unknown_source", - "idempotency_conflict", - "invalid_cursor", - "result_expired", - "full_text_unavailable", - "budget_exhausted" - ], - "type": "string" + "calories_from_fat": { + "example": 25, + "type": "number" }, - "retry_after_seconds": { - "type": "integer" + "cholesterol_mg": { + "type": "number" }, - "retryable": { - "type": "boolean" - } - }, - "type": "object" - }, - "researchretrieval.PaperHit": { - "properties": { - "paper": { - "$ref": "#/definitions/researchretrieval.Paper" + "dietary_fiber_g": { + "example": 1, + "type": "number" }, - "rank": { - "type": "integer" + "protein_g": { + "example": 6, + "type": "number" }, - "score": { + "saturated_fat_g": { + "example": 0.5, "type": "number" - } - }, - "type": "object" - }, - "researchretrieval.PaperIdentifier": { - "properties": { - "namespace": { - "enum": [ - "arxiv", - "doi", - "pmid", - "pmcid" - ], - "type": "string" }, - "value": { - "type": "string" + "sodium_mg": { + "example": 360, + "type": "number" + }, + "sugars_g": { + "example": 3, + "type": "number" + }, + "total_carbohydrate_g": { + "example": 36, + "type": "number" + }, + "total_fat_g": { + "example": 3, + "type": "number" + }, + "trans_fat_g": { + "type": "number" } }, "type": "object" }, - "researchretrieval.PaperMetadataResponse": { + "papajohns.NutritionItem": { "properties": { - "coverage": { - "items": { - "$ref": "#/definitions/researchretrieval.PaperSourceCoverage" - }, - "type": "array" - }, - "paper": { - "$ref": "#/definitions/researchretrieval.Paper" - }, - "usage": { - "$ref": "#/definitions/retrievaltypes.Usage" + "name": { + "example": "Cheese Pizza", + "type": "string" }, - "warnings": { + "variants": { "items": { - "$ref": "#/definitions/researchretrieval.PaperWarning" + "$ref": "#/definitions/papajohns.NutritionVariant" }, "type": "array" } }, "type": "object" }, - "researchretrieval.PaperReadResponse": { + "papajohns.NutritionResponse": { "properties": { - "coverage": { - "items": { - "$ref": "#/definitions/researchretrieval.PaperSourceCoverage" - }, - "type": "array" - }, - "full_text": { - "$ref": "#/definitions/researchpapers.EuropePMCFullText" + "category": { + "example": "pizzas", + "type": "string" }, - "full_text_available": { - "type": "boolean" + "count": { + "example": 34, + "type": "integer" }, - "paper": { - "$ref": "#/definitions/researchretrieval.Paper" + "fetched_at": { + "type": "string" }, - "passages": { + "items": { "items": { - "$ref": "#/definitions/retrievaltypes.Passage" + "$ref": "#/definitions/papajohns.NutritionItem" }, "type": "array" }, - "unavailable_reason": { - "enum": [ - "not_indexed", - "restricted", - "unsupported_format", - "not_found" - ], + "source_url": { "type": "string" - }, - "usage": { - "$ref": "#/definitions/retrievaltypes.Usage" - }, - "warnings": { - "items": { - "$ref": "#/definitions/researchretrieval.PaperWarning" - }, - "type": "array" } }, "type": "object" }, - "researchretrieval.PaperRelatedResponse": { + "papajohns.NutritionVariant": { "properties": { - "coverage": { - "items": { - "$ref": "#/definitions/researchretrieval.PaperSourceCoverage" - }, - "type": "array" - }, - "has_more": { - "type": "boolean" - }, - "items": { - "items": { - "$ref": "#/definitions/researchretrieval.PaperHit" - }, - "type": "array" - }, - "next_cursor": { + "label": { + "description": "Label combines every column header Papa John's own table used to\ndistinguish this variant (crust type and/or size), joined with \" - \".\nA single-column table (most non-pizza items) yields the lone column\nheader verbatim, e.g. \"Regular\".", + "example": "Original Crust - Large", "type": "string" }, - "partial": { - "type": "boolean" - }, - "relations": { - "items": { - "$ref": "#/definitions/researchpapers.CitationRelation" - }, - "type": "array" - }, - "seeds": { - "items": { - "$ref": "#/definitions/researchpapers.PaperGraphSeed" - }, - "type": "array" + "nutrition": { + "$ref": "#/definitions/papajohns.NutritionFacts" }, - "usage": { - "$ref": "#/definitions/retrievaltypes.Usage" + "serving_size": { + "example": "1 slice", + "type": "string" }, - "warnings": { - "items": { - "$ref": "#/definitions/researchretrieval.PaperWarning" - }, - "type": "array" + "servings": { + "example": "8 slices per pizza", + "type": "string" } }, "type": "object" }, - "researchretrieval.PaperSearchResponse": { + "papajohns.StoreAddress": { "properties": { - "coverage": { - "items": { - "$ref": "#/definitions/researchretrieval.PaperSourceCoverage" - }, - "type": "array" - }, - "has_more": { - "type": "boolean" - }, - "items": { - "items": { - "$ref": "#/definitions/researchretrieval.PaperHit" - }, - "type": "array" + "city": { + "example": "Alhambra", + "type": "string" }, - "next_cursor": { + "country": { + "example": "US", "type": "string" }, - "partial": { - "type": "boolean" + "line1": { + "example": "2136 S FREMONT AVE", + "type": "string" }, - "usage": { - "$ref": "#/definitions/retrievaltypes.Usage" + "postal_code": { + "example": "91803", + "type": "string" }, - "warnings": { - "items": { - "$ref": "#/definitions/researchretrieval.PaperWarning" - }, - "type": "array" + "region": { + "example": "CA", + "type": "string" } }, "type": "object" }, - "researchretrieval.PaperSourceCoverage": { + "papajohns.StoreHours": { "properties": { - "corpus_revision": { - "type": "string" - }, - "failure": { - "$ref": "#/definitions/researchretrieval.PaperFailure" - }, - "indexed_at": { - "type": "string" + "closed": { + "description": "Closed is true when Papa John's publishes the day with no open\ninterval.", + "example": false, + "type": "boolean" }, - "retrieved_at": { + "closes": { + "example": "00:15", "type": "string" }, - "source_id": { + "day_of_week": { + "example": "Monday", "type": "string" }, - "status": { - "enum": [ - "ok", - "failed", - "not_indexed", - "unsupported" - ], + "opens": { + "example": "10:30", "type": "string" } }, "type": "object" }, - "researchretrieval.PaperSourceDescriptor": { + "papajohns.StoreResponse": { "properties": { - "artifact_types": { - "items": { - "type": "string" - }, - "type": "array" + "address": { + "$ref": "#/definitions/papajohns.StoreAddress" }, - "corpus": { + "fetched_at": { "type": "string" }, - "corpus_revision": { + "google_place_id": { "type": "string" }, - "filters": { + "hours": { + "description": "Hours is the store's general published week of hours.", "items": { - "enum": [ - "authors", - "published_from", - "published_to" - ], - "type": "string" + "$ref": "#/definitions/papajohns.StoreHours" }, "type": "array" }, - "last_success_at": { - "type": "string" + "latitude": { + "example": 34.06838390790909, + "type": "number" + }, + "longitude": { + "example": -118.14934906165672, + "type": "number" }, "name": { + "example": "Papa Johns Pizza", "type": "string" }, - "operations": { - "items": { - "enum": [ - "search", - "metadata", - "read", - "references", - "citers" - ], - "type": "string" - }, - "type": "array" - }, - "source_id": { + "order_url": { + "description": "OrderURL is Papa John's own carryout ordering deep link for this\nstore, which embeds the same store_id.", "type": "string" }, - "state": { - "enum": [ - "ready" - ], + "path": { "type": "string" }, - "url": { + "phone_number": { + "example": "(626) 642-5645", "type": "string" - } - }, - "type": "object" - }, - "researchretrieval.PaperSourcesResponse": { - "properties": { - "has_more": { - "type": "boolean" }, - "items": { + "pickup_hours": { + "description": "PickupHours is Papa John's own published carryout/pickup hours,\npublished separately from Hours and sometimes shorter.", "items": { - "$ref": "#/definitions/researchretrieval.PaperSourceDescriptor" + "$ref": "#/definitions/papajohns.StoreHours" }, "type": "array" }, - "next_cursor": { + "source_url": { "type": "string" }, - "registry_revision": { + "store_id": { + "example": "5054", + "type": "string" + }, + "timezone": { + "example": "America/Los_Angeles", "type": "string" } }, "type": "object" }, - "researchretrieval.PaperWarning": { + "papajohns.StorefrontCategory": { "properties": { - "code": { - "enum": [ - "source_failed", - "source_not_indexed", - "discovery_truncated", - "ranking_window_limit", - "imprecise_date_excluded", - "content_unavailable", - "cached_source_stale" - ], + "alias": { + "description": "Alias is upstream's own stable slug for the section, which survives the\ndisplay name being renamed for a season.", + "example": "pizza", "type": "string" }, - "message": { + "id": { + "example": "1", "type": "string" }, - "source_id": { - "type": "string" - } - }, - "type": "object" - }, - "resy.AvailabilityResponse": { - "properties": { - "date": { + "name": { + "example": "Пицца", "type": "string" }, - "party_size": { + "product_count": { + "example": 25, "type": "integer" }, - "restaurant_id": { - "type": "string" - }, - "timeslots": { + "products": { "items": { - "$ref": "#/definitions/resy.Timeslot" + "$ref": "#/definitions/papajohns.StorefrontProduct" }, "type": "array" } }, "type": "object" }, - "resy.CuisinesResponse": { + "papajohns.StorefrontMenuResponse": { "properties": { - "cuisines": { + "categories": { + "description": "Categories carry the whole national catalog. The menu does not vary by\ncity, so there is no city to report.", "items": { - "type": "string" + "$ref": "#/definitions/papajohns.StorefrontCategory" }, "type": "array" }, - "location": { - "type": "string" - } - }, - "type": "object" - }, - "resy.Event": { - "properties": { - "city": { + "category": { "type": "string" }, "currency": { - "example": "USD", - "type": "string" - }, - "date": { - "example": "2026-09-20", - "type": "string" - }, - "description": { + "example": "RUB", "type": "string" }, - "end_time": { - "example": "17:00:00", + "fetched_at": { "type": "string" }, - "general_sale_date": { + "market": { + "example": "russia", "type": "string" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" - }, - "is_presale": { - "type": "boolean" - }, - "max_party_size": { - "example": 8, - "type": "integer" - }, - "min_party_size": { - "example": 1, + "product_count": { + "example": 185, "type": "integer" }, - "name": { - "example": "Breakfast & Citi Field Trip", - "type": "string" - }, - "neighborhood": { - "type": "string" - }, - "price_max": { - "example": 85, - "type": "number" - }, - "price_min": { - "example": 85, - "type": "number" - }, - "restaurant_id": { - "type": "string" - }, - "restaurant_name": { - "type": "string" - }, - "restaurant_url_slug": { - "description": "RestaurantURLSlug, together with URLSlug and the search/events\nLocation value, is what resy-event-detail needs to fetch this\nevent's full description and ticket packages.", + "source_url": { "type": "string" }, - "shift_id": { + "variant_count": { + "example": 892, "type": "integer" - }, - "time": { - "example": "09:30:00", - "type": "string" - }, - "url_slug": { - "type": "string" - }, - "why_we_like_it": { - "type": "string" } }, "type": "object" }, - "resy.EventDetailResponse": { + "papajohns.StorefrontProduct": { "properties": { - "currency": { + "category": { + "example": "Пицца", "type": "string" }, - "date": { + "currency": { + "example": "RUB", "type": "string" }, "description": { "type": "string" }, - "end_time": { + "id": { + "example": "12345", "type": "string" }, - "enhanced_description": { + "image_url": { "type": "string" }, - "enhanced_need_to_know": { + "name": { + "example": "Прайм говядина Барбекю", "type": "string" }, - "general_sale_date": { + "price_from": { + "description": "PriceFrom is the cheapest priced variant, so a caller can rank products\nwithout walking every variant.", + "example": 680, + "type": "number" + }, + "url": { "type": "string" }, - "images": { + "variants": { "items": { - "type": "string" + "$ref": "#/definitions/papajohns.StorefrontVariant" }, "type": "array" - }, - "is_presale": { + } + }, + "type": "object" + }, + "papajohns.StorefrontVariant": { + "properties": { + "available": { + "example": true, "type": "boolean" }, - "max_party_size": { - "type": "integer" - }, - "min_party_size": { - "type": "integer" - }, - "name": { + "crust": { + "description": "Crust is the dough the variant is made with. Russia publishes two\n(Традиционное, Тонкое); Poland publishes none, so this is empty there.", + "example": "Традиционное", "type": "string" }, - "need_to_know": { + "currency": { + "example": "RUB", "type": "string" }, - "packages": { - "items": { - "$ref": "#/definitions/resy.EventPackage" - }, - "type": "array" - }, - "price_max": { - "type": "number" - }, - "price_min": { + "price": { + "example": 680, "type": "number" }, - "shift_id": { - "type": "integer" + "size": { + "description": "Size is the pizza diameter where the market publishes one, with its own\nunit (\"23 см\").", + "example": "23 см", + "type": "string" }, - "time": { + "sku": { + "example": "172764", "type": "string" }, - "url_slug": { + "stuffed_crust": { + "description": "StuffedCrust names the filling baked into the rim, where the variant has\none. Upstream reports none/cheese/sausage/sausage_cheese; \"none\" is\nreported here as an empty value rather than the literal word.", + "example": "cheese", "type": "string" } }, "type": "object" }, - "resy.EventPackage": { + "papajohns.allergensResponseDoc": { "properties": { - "max_party_size": { - "example": 8, - "type": "integer" - }, - "min_party_size": { - "example": 1, + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "name": { - "example": "One Ticket for Breakfast & Citi Field Trip", - "type": "string" + "data": { + "$ref": "#/definitions/papajohns.AllergensResponse" }, - "price_total": { - "example": 85, - "type": "number" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "papajohns.dealsResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "price_total_str": { - "example": "$85.00", - "type": "string" + "data": { + "$ref": "#/definitions/papajohns.DealsResponse" }, - "quantity_remaining": { - "example": 22, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "papajohns.directoryResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "quantity_total": { - "example": 40, - "type": "integer" + "data": { + "$ref": "#/definitions/papajohns.DirectoryResponse" }, - "sold_out": { - "type": "boolean" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "papajohns.indiaDealResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "timeslots": { - "items": { - "$ref": "#/definitions/resy.Timeslot" - }, - "type": "array" + "data": { + "$ref": "#/definitions/papajohns.IndiaDealResponse" }, - "whats_included": { - "items": { - "type": "string" - }, - "type": "array" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "resy.EventsResponse": { + "papajohns.indiaMenuItemResponseDoc": { "properties": { - "events": { - "items": { - "$ref": "#/definitions/resy.Event" - }, - "type": "array" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "location": { - "type": "string" + "data": { + "$ref": "#/definitions/papajohns.IndiaMenuItemResponse" }, - "total": { - "type": "integer" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "resy.Location": { + "papajohns.indiaMenuResponseDoc": { "properties": { "code": { - "example": "ny", - "type": "string" + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "country": { - "example": "United States", - "type": "string" + "data": { + "$ref": "#/definitions/papajohns.IndiaMenuResponse" }, - "country_code": { - "example": "US", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "papajohns.indiaStoresResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "id": { - "example": "1", - "type": "string" + "data": { + "$ref": "#/definitions/papajohns.IndiaStoresResponse" }, - "latitude": { - "type": "number" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "papajohns.intlDealsResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "longitude": { - "type": "number" + "data": { + "$ref": "#/definitions/papajohns.IntlDealsResponse" }, - "name": { - "example": "New York", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "papajohns.intlIngredientsResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "time_zone": { - "example": "America/New_York", - "type": "string" + "data": { + "$ref": "#/definitions/papajohns.IntlIngredientsResponse" }, - "url_slug": { - "example": "new-york-ny", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "resy.LocationsResponse": { + "papajohns.intlMenuResponseDoc": { "properties": { - "locations": { - "items": { - "$ref": "#/definitions/resy.Location" - }, - "type": "array" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "total": { + "data": { + "$ref": "#/definitions/papajohns.IntlMenuResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "papajohns.intlOfferResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" + }, + "data": { + "$ref": "#/definitions/papajohns.IntlOfferResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "resy.RestaurantResponse": { + "papajohns.intlProductResponseDoc": { "properties": { - "about": { - "type": "string" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "address": { - "example": "181 Thompson Street", - "type": "string" + "data": { + "$ref": "#/definitions/papajohns.IntlProductResponse" }, - "average_cost_per_person": { - "example": "$150", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "papajohns.intlStoresResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "city": { - "example": "New York", - "type": "string" + "data": { + "$ref": "#/definitions/papajohns.IntlStoresResponse" }, - "country": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "papajohns.latamMenuResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "cross_street": { - "type": "string" + "data": { + "$ref": "#/definitions/papajohns.LatamMenuResponse" }, - "cuisine": { - "example": "Italian", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "papajohns.menuItemResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "currency_symbol": { - "example": "$", - "type": "string" + "data": { + "$ref": "#/definitions/papajohns.MenuItemResponse" }, - "description": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "papajohns.menuResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "id": { - "type": "string" + "data": { + "$ref": "#/definitions/papajohns.MenuResponse" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "papajohns.nearbyResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "latitude": { - "type": "number" + "data": { + "$ref": "#/definitions/papajohns.NearbyResponse" }, - "location_code": { - "description": "LocationCode is Resy's short city code (e.g. \"ny\") -- pass it as\nresy-cuisines' or resy-events' location param to discover more about\nthis same city.", - "example": "ny", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "papajohns.nutritionResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "longitude": { - "type": "number" + "data": { + "$ref": "#/definitions/papajohns.NutritionResponse" }, - "max_party_size": { - "example": 14, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "papajohns.storeResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "menu_url": { - "type": "string" + "data": { + "$ref": "#/definitions/papajohns.StoreResponse" }, - "min_party_size": { - "example": 1, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "papajohns.storefrontMenuResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/papajohns.StorefrontMenuResponse" }, - "need_to_know": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "partiful.CityFacetsResponse": { + "properties": { + "available_category_facets": { + "description": "The category facets Partiful offers alongside this one. Facet\navailability is per-region and seasonal.", + "items": { + "type": "string" + }, + "type": "array" }, - "neighborhood": { - "example": "Greenwich Village", - "type": "string" + "available_date_facets": { + "description": "The date facets Partiful offers alongside this one (its own enum values).", + "items": { + "type": "string" + }, + "type": "array" }, - "phone_number": { + "date_range_label": { + "description": "The date window the page is showing, e.g. \"Nov 7\". Present for date\nfacets only.", "type": "string" }, - "postal_code": { + "facet": { + "description": "The requested facet slug.", + "example": "parties", "type": "string" }, - "price_range": { - "example": 4, - "type": "integer" - }, - "rating": { - "example": 4.75, - "type": "number" + "facet_label": { + "description": "The facet's display label, when Partiful prints one.", + "example": "Parties", + "type": "string" }, - "region": { - "example": "NY", + "facet_value": { + "description": "The enum value Partiful reports for that slug, e.g. PARTIES. \"events\" is\nthe unfiltered view and reports ANYTIME.", + "example": "PARTIES", "type": "string" }, - "review_count": { - "example": 33837, - "type": "integer" + "items": { + "description": "The facet's events, in payload order, with non-public events dropped.", + "items": { + "$ref": "#/definitions/partiful.EventSummary" + }, + "type": "array" }, - "url_slug": { - "example": "carbone", + "month_label": { + "description": "The month the page is showing, e.g. \"November 2026\".", "type": "string" }, - "website": { + "other_cities": { + "description": "The other regions Partiful links on this page, with their labels. Together\nwith region this is the complete nine-value region set.", + "items": { + "$ref": "#/definitions/partiful.CityRef" + }, + "type": "array" + }, + "region": { + "description": "Region code the payload reported.", + "example": "NYC", "type": "string" }, - "why_we_like_it": { + "region_label": { + "description": "Region label as Partiful prints it.", + "example": "New York City", "type": "string" } }, "type": "object" }, - "resy.SearchResponse": { + "partiful.CityFeedResponse": { "properties": { - "available_cuisines": { - "description": "AvailableCuisines lists the cuisines present among restaurants near this\nsearch location (Resy's own search facet) -- use it to discover cuisine\nvalues worth passing back in Term, since the upstream search index has\nno separate structured cuisine filter (confirmed live: a top-level\n\"cuisine\" search field is rejected as an unknown field).", + "active_category_facets": { + "description": "The category facets Partiful currently offers for this region, as its own\nenum values (for example PARTIES, FOOD_POPUPS). Facet availability is\nper-region and seasonal, so this array is the authoritative list for a\nregion; the slugs accepted by partiful-city-facets are the family's\nfifteen-value set.", "items": { "type": "string" }, "type": "array" }, - "results": { + "feed_items": { + "description": "The region's flat discover feed, twenty items on every region when\nmeasured (2026-11-08). Non-public events are dropped.", "items": { - "$ref": "#/definitions/resy.SearchResult" + "$ref": "#/definitions/partiful.EventSummary" }, "type": "array" }, - "term": { + "region": { + "description": "Region code echoed from the payload.", + "example": "NYC", "type": "string" }, - "total": { - "type": "integer" + "region_label": { + "description": "Region label as Partiful prints it.", + "example": "New York City", + "type": "string" + }, + "sections": { + "description": "Every themed carousel the region page carries, in payload order.", + "items": { + "$ref": "#/definitions/partiful.Section" + }, + "type": "array" + }, + "trending_section": { + "allOf": [ + { + "$ref": "#/definitions/partiful.Section" + } + ], + "description": "The region's trending carousel, when the payload carries one." } }, "type": "object" }, - "resy.SearchResult": { + "partiful.CityRef": { "properties": { - "city": { - "example": "New York", + "code": { + "description": "Region code, e.g. \"LA\".", + "example": "LA", "type": "string" }, - "cuisines": { - "example": [ - "Italian" - ], + "label": { + "description": "Region label as Partiful prints it, e.g. \"Los Angeles\".", + "example": "Los Angeles", + "type": "string" + } + }, + "type": "object" + }, + "partiful.EventResponse": { + "properties": { + "description": { + "description": "Event description as the host wrote it. This is host-authored public copy;\nit may mention contact details the host chose to publish.", + "type": "string" + }, + "end_date": { + "description": "End time, ISO 8601 UTC as Partiful publishes it.", + "example": "2026-11-08T08:00:00.000Z", + "type": "string" + }, + "hosts": { + "description": "Host display names only, in payload order.", "items": { "type": "string" }, "type": "array" }, "id": { - "example": "6194", + "description": "Event id, twenty alphanumeric characters.", + "example": "Dv8UDa1p7wa2XNeiN7uY", "type": "string" }, - "latitude": { - "type": "number" + "image_url": { + "description": "Cover image URL from Partiful's public CDN.", + "type": "string" }, - "location_code": { - "description": "LocationCode is Resy's short city code (e.g. \"ny\") -- pass it as\nresy-cuisines' or resy-events' location param to discover more about\nthis same city.", - "example": "ny", + "is_free": { + "description": "True when every advertised offer is priced at zero; omitted when the event\nadvertises no offer.", + "type": "boolean" + }, + "offers": { + "description": "Advertised offers from the page's own offersJsonLd. An event may advertise\nnone.", + "items": { + "$ref": "#/definitions/partiful.Offer" + }, + "type": "array" + }, + "similar_events": { + "description": "Other public events Partiful suggests, in payload order.", + "items": { + "$ref": "#/definitions/partiful.EventSummary" + }, + "type": "array" + }, + "start_date": { + "description": "Start time, ISO 8601 UTC as Partiful publishes it.", + "example": "2026-11-08T03:00:00.000Z", "type": "string" }, - "location_url_slug": { - "example": "new-york-ny", + "status": { + "description": "Publish status, e.g. \"PUBLISHED\".", "type": "string" }, - "longitude": { - "type": "number" + "timezone": { + "description": "IANA timezone the host set, e.g. \"America/New_York\".", + "type": "string" }, - "name": { - "example": "Carbone", + "title": { + "description": "Event title as the host wrote it.", + "example": "Dionysus at Mercer Labs", "type": "string" }, - "neighborhood": { - "example": "Greenwich Village", + "url": { + "description": "Canonical public event URL.", + "example": "https://partiful.com/e/Dv8UDa1p7wa2XNeiN7uY", "type": "string" }, - "phone_number": { + "venue": { + "allOf": [ + { + "$ref": "#/definitions/partiful.Venue" + } + ], + "description": "Venue: name, approximate city and neighborhood only. The exact street\naddress is never returned." + } + }, + "type": "object" + }, + "partiful.EventSummary": { + "properties": { + "end_date": { + "description": "End time, ISO 8601 UTC.", "type": "string" }, - "price_range": { - "example": 4, - "type": "integer" + "id": { + "description": "Event id, usable with partiful-event.", + "example": "Dv8UDa1p7wa2XNeiN7uY", + "type": "string" }, - "rating": { - "example": 4.75, - "type": "number" + "image_url": { + "description": "Cover image URL from Partiful's public CDN.", + "type": "string" }, - "region": { - "example": "NY", + "start_date": { + "description": "Start time, ISO 8601 UTC.", + "example": "2026-11-08T03:00:00.000Z", "type": "string" }, - "review_count": { - "example": 33837, - "type": "integer" + "status": { + "description": "Publish status, e.g. \"PUBLISHED\".", + "type": "string" }, - "timeslots": { + "timezone": { + "description": "IANA timezone the host set.", + "type": "string" + }, + "title": { + "description": "Event title.", + "example": "Dionysus at Mercer Labs", + "type": "string" + }, + "url": { + "description": "Canonical public event URL.", + "example": "https://partiful.com/e/Dv8UDa1p7wa2XNeiN7uY", + "type": "string" + }, + "venue": { + "allOf": [ + { + "$ref": "#/definitions/partiful.Venue" + } + ], + "description": "Venue name, approximate city and neighborhood. The exact street address is\nnever returned." + } + }, + "type": "object" + }, + "partiful.ExploreCitiesResponse": { + "properties": { + "regions": { "items": { - "$ref": "#/definitions/resy.Timeslot" + "$ref": "#/definitions/partiful.HubRegion" }, "type": "array" - }, - "url_slug": { - "example": "carbone", - "type": "string" } }, "type": "object" }, - "resy.Timeslot": { + "partiful.HubRegion": { "properties": { - "end": { - "example": "2026-09-20 20:30:00", - "type": "string" + "events": { + "description": "The events Partiful features for this region, in payload order.", + "items": { + "$ref": "#/definitions/partiful.EventSummary" + }, + "type": "array" }, - "max_party_size": { - "example": 4, - "type": "integer" + "icon": { + "description": "The carousel's emoji icon.", + "type": "string" }, - "min_party_size": { - "example": 1, - "type": "integer" + "region": { + "description": "Region code, one of NYC, LA, SF, CHI, ATX, BOS, DC, MIA, LON.", + "example": "NYC", + "type": "string" }, - "seating_type": { - "example": "Dining Room", + "region_label": { + "description": "Region label as Partiful prints it, e.g. \"New York City\".", + "example": "New York City", "type": "string" }, - "start": { - "description": "Start/End are Resy's own local \"YYYY-MM-DD HH:MM:SS\" strings (not RFC3339\n-- kept as upstream returns them since seating-area shifts don't carry a\nUTC offset in the response).", - "example": "2026-09-20 19:00:00", + "subtitle": { + "description": "The carousel's subtitle as printed.", "type": "string" }, - "token": { - "description": "Token is Resy's opaque reservation-config identifier for this slot\n(an \"rgs://...\" string). It is only meaningful back to Resy's own\nbooking flow -- this service does not implement booking, only\ndiscovery.", + "title": { + "description": "The carousel's own title, e.g. \"Trending in NYC\".", "type": "string" } }, "type": "object" }, - "resy.availabilityResponseDoc": { + "partiful.Offer": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/resy.AvailabilityResponse" + "availability": { + "description": "schema.org availability URL, e.g. \"https://schema.org/InStock\".", + "type": "string" }, - "msg": { - "example": "OK", + "currency": { + "description": "ISO 4217 currency code, e.g. \"USD\".", + "example": "USD", "type": "string" + }, + "price": { + "description": "Advertised price. Zero means free.", + "example": 0, + "type": "number" } }, "type": "object" }, - "resy.cuisinesResponseDoc": { + "partiful.Section": { "properties": { - "code": { - "example": 200, - "type": "integer" + "events": { + "description": "The section's events, in payload order, with non-public events dropped.", + "items": { + "$ref": "#/definitions/partiful.EventSummary" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/resy.CuisinesResponse" + "id": { + "description": "Section id as Partiful prints it, e.g. \"nyc-for-the-plot\".", + "type": "string" }, - "msg": { - "example": "OK", + "region": { + "description": "Region the section belongs to.", + "type": "string" + }, + "subtitle": { + "description": "Section subtitle, when printed.", + "type": "string" + }, + "title": { + "description": "Section title, e.g. \"Side Quests\".", "type": "string" } }, "type": "object" }, - "resy.eventDetailResponseDoc": { + "partiful.Venue": { "properties": { - "code": { - "example": 200, - "type": "integer" + "city": { + "description": "Approximate location as Partiful prints it, e.g. \"New York, NY\" or\n\"Brooklyn, NY\". Not a street address.", + "example": "New York, NY", + "type": "string" }, - "data": { - "$ref": "#/definitions/resy.EventDetailResponse" + "name": { + "description": "Venue name, e.g. \"Mercer Labs\".", + "example": "Mercer Labs", + "type": "string" }, - "msg": { - "example": "OK", + "neighborhood": { + "description": "Neighborhood, e.g. \"Financial District\".", "type": "string" } }, "type": "object" }, - "resy.eventsResponseDoc": { + "partiful.cityFacetsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/resy.EventsResponse" + "$ref": "#/definitions/partiful.CityFacetsResponse" }, "msg": { "example": "OK", @@ -178210,14 +186473,14 @@ }, "type": "object" }, - "resy.locationsResponseDoc": { + "partiful.cityFeedResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/resy.LocationsResponse" + "$ref": "#/definitions/partiful.CityFeedResponse" }, "msg": { "example": "OK", @@ -178226,14 +186489,14 @@ }, "type": "object" }, - "resy.restaurantResponseDoc": { + "partiful.eventResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/resy.RestaurantResponse" + "$ref": "#/definitions/partiful.EventResponse" }, "msg": { "example": "OK", @@ -178242,14 +186505,14 @@ }, "type": "object" }, - "resy.searchResponseDoc": { + "partiful.exploreCitiesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/resy.SearchResponse" + "$ref": "#/definitions/partiful.ExploreCitiesResponse" }, "msg": { "example": "OK", @@ -178258,330 +186521,412 @@ }, "type": "object" }, - "retailmenot.AutocompleteGroup": { + "patreon.Creator": { "properties": { - "items": { + "avatar_url": { + "type": "string" + }, + "collection_count": { + "type": "integer" + }, + "cover_url": { + "type": "string" + }, + "creation_count": { + "type": "integer" + }, + "currency": { + "example": "EUR", + "type": "string" + }, + "handle": { + "example": "CachyOS", + "type": "string" + }, + "has_public_rss": { + "type": "boolean" + }, + "id": { + "example": "8655479", + "type": "string" + }, + "is_monthly": { + "type": "boolean" + }, + "is_nsfw": { + "type": "boolean" + }, + "name": { + "example": "CachyOS", + "type": "string" + }, + "offers_free_membership": { + "type": "boolean" + }, + "offers_paid_membership": { + "type": "boolean" + }, + "paid_member_count": { + "type": "integer" + }, + "patron_count": { + "type": "integer" + }, + "pledge_sum_cents": { + "type": "integer" + }, + "show_count": { + "type": "integer" + }, + "social_links": { "items": { - "$ref": "#/definitions/retailmenot.AutocompleteItem" + "$ref": "#/definitions/patreon.CreatorSocialLink" }, "type": "array" }, - "label": { + "summary": { "type": "string" }, - "name": { + "url": { + "example": "https://www.patreon.com/CachyOS", "type": "string" } }, "type": "object" }, - "retailmenot.AutocompleteItem": { + "patreon.CreatorSocialLink": { "properties": { - "category_slug": { - "description": "CategorySlug is set on category suggestions; use it with\nGET /retailmenot/category.", + "label": { + "example": "CachyOS", "type": "string" }, - "domain": { + "platform": { + "example": "twitter", "type": "string" }, - "meta_info": { + "url": { + "example": "https://twitter.com/CachyOS", + "type": "string" + } + }, + "type": "object" + }, + "patreon.ExploreCreator": { + "properties": { + "avatar_url": { "type": "string" }, - "offer_id": { + "creation_name": { + "example": "creating YouTube videos", "type": "string" }, - "title": { + "id": { + "example": "4270549", + "type": "string" + }, + "is_nsfw": { + "type": "boolean" + }, + "name": { + "example": "Reckless Ben", "type": "string" }, "url": { + "example": "https://www.patreon.com/RecklessBen", "type": "string" } }, "type": "object" }, - "retailmenot.AutocompleteResponse": { + "patreon.ExploreResult": { "properties": { - "groups": { + "sections": { "items": { - "$ref": "#/definitions/retailmenot.AutocompleteGroup" + "$ref": "#/definitions/patreon.ExploreSection" }, "type": "array" + }, + "topic": { + "example": "podcasts_and_shows", + "type": "string" } }, "type": "object" }, - "retailmenot.BlogCategoriesResponse": { + "patreon.ExploreSection": { "properties": { - "categories": { + "creators": { "items": { - "$ref": "#/definitions/retailmenot.BlogCategory" + "$ref": "#/definitions/patreon.ExploreCreator" }, "type": "array" + }, + "title": { + "example": "Top creators", + "type": "string" + }, + "type": { + "enum": [ + "popular-campaigns", + "trending-campaigns", + "new-campaigns" + ], + "example": "popular-campaigns", + "type": "string" } }, "type": "object" }, - "retailmenot.BlogCategory": { + "patreon.MembershipTier": { "properties": { - "count": { + "amount_cents": { + "example": 500, "type": "integer" }, - "description": { - "type": "string" - }, - "id": { - "type": "integer" + "benefits": { + "items": { + "$ref": "#/definitions/patreon.MembershipTierBenefit" + }, + "type": "array" }, - "name": { + "currency": { + "example": "USD", "type": "string" }, - "parent_id": { - "type": "integer" + "description": { + "type": "string" }, - "slug": { + "id": { + "example": "17218833", "type": "string" }, - "url": { + "title": { + "example": "Supporter", "type": "string" } }, "type": "object" }, - "retailmenot.BlogLink": { + "patreon.MembershipTierBenefit": { "properties": { - "name": { - "type": "string" - }, - "slug": { + "description": { "type": "string" }, - "url": { + "title": { + "example": "Support the project", "type": "string" } }, "type": "object" }, - "retailmenot.BlogPostResponse": { + "patreon.MembershipTiersResult": { "properties": { - "author": { + "creator_id": { + "example": "8655479", "type": "string" }, - "categories": { - "items": { - "$ref": "#/definitions/retailmenot.BlogTerm" - }, - "type": "array" + "handle": { + "example": "CachyOS", + "type": "string" }, - "coupon_categories": { + "tiers": { "items": { - "$ref": "#/definitions/retailmenot.BlogLink" + "$ref": "#/definitions/patreon.MembershipTier" }, "type": "array" - }, + } + }, + "type": "object" + }, + "patreon.PublicRSSEpisode": { + "properties": { "description": { "type": "string" }, - "excerpt": { + "duration": { "type": "string" }, - "id": { - "type": "integer" - }, - "image_url": { + "enclosure_type": { "type": "string" }, - "modified": { + "enclosure_url": { "type": "string" }, - "published": { + "episode_type": { "type": "string" }, - "sections": { - "items": { - "$ref": "#/definitions/retailmenot.BlogSection" - }, - "type": "array" - }, - "slug": { + "guid": { "type": "string" }, - "stores": { - "items": { - "$ref": "#/definitions/retailmenot.BlogLink" - }, - "type": "array" + "image_url": { + "type": "string" }, - "tags": { - "items": { - "$ref": "#/definitions/retailmenot.BlogTerm" - }, - "type": "array" + "link": { + "type": "string" }, - "title": { + "published_at": { "type": "string" }, - "url": { + "title": { "type": "string" } }, "type": "object" }, - "retailmenot.BlogPostSummary": { + "patreon.PublicRSSFeed": { "properties": { "author": { "type": "string" }, - "categories": { - "items": { - "$ref": "#/definitions/retailmenot.BlogTerm" - }, - "type": "array" + "campaign_id": { + "example": "80117", + "type": "string" }, - "description": { + "copyright": { "type": "string" }, - "excerpt": { + "description": { "type": "string" }, - "id": { - "type": "integer" + "episodes": { + "items": { + "$ref": "#/definitions/patreon.PublicRSSEpisode" + }, + "type": "array" }, - "image_url": { + "explicit": { "type": "string" }, - "modified": { + "image_url": { "type": "string" }, - "published": { + "language": { "type": "string" }, - "slug": { + "link": { "type": "string" }, - "tags": { - "items": { - "$ref": "#/definitions/retailmenot.BlogTerm" - }, - "type": "array" + "show_id": { + "example": "1322380", + "type": "string" }, "title": { "type": "string" }, - "url": { + "type": { "type": "string" } }, "type": "object" }, - "retailmenot.BlogPostsResponse": { + "patreon.creatorResponseDoc": { "properties": { - "category": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "order": { - "enum": [ - "desc", - "asc" - ], - "type": "string" + "data": { + "$ref": "#/definitions/patreon.Creator" }, - "order_by": { - "enum": [ - "date", - "modified", - "title", - "relevance" - ], + "msg": { + "example": "success", "type": "string" - }, - "page": { - "type": "integer" - }, - "page_size": { + } + }, + "type": "object" + }, + "patreon.exploreResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "posts": { - "items": { - "$ref": "#/definitions/retailmenot.BlogPostSummary" - }, - "type": "array" + "data": { + "$ref": "#/definitions/patreon.ExploreResult" }, - "query": { + "msg": { + "example": "success", "type": "string" + } + }, + "type": "object" + }, + "patreon.membershipTiersResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "tag": { - "type": "string" + "data": { + "$ref": "#/definitions/patreon.MembershipTiersResult" }, - "total": { + "msg": { + "example": "success", + "type": "string" + } + }, + "type": "object" + }, + "patreon.publicRSSResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "total_pages": { - "type": "integer" + "data": { + "$ref": "#/definitions/patreon.PublicRSSFeed" + }, + "msg": { + "example": "success", + "type": "string" } }, "type": "object" }, - "retailmenot.BlogSection": { + "pcgamer.AuthorResponse": { "properties": { - "lists": { + "articles": { "items": { - "items": { - "type": "string" - }, - "type": "array" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "paragraphs": { + "biography": { "items": { "type": "string" }, "type": "array" }, - "title": { + "has_next_page": { + "type": "boolean" + }, + "job_title": { "type": "string" - } - }, - "type": "object" - }, - "retailmenot.BlogTagsResponse": { - "properties": { - "page": { - "type": "integer" }, - "page_size": { + "name": { + "type": "string" + }, + "page": { "type": "integer" }, - "query": { + "slug": { "type": "string" }, - "tags": { + "social_links": { "items": { - "$ref": "#/definitions/retailmenot.BlogTerm" + "$ref": "#/definitions/pcgamer.AuthorSocialLink" }, "type": "array" }, - "total": { - "type": "integer" - }, - "total_pages": { - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "retailmenot.BlogTerm": { + "pcgamer.AuthorSocialLink": { "properties": { - "count": { - "type": "integer" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "slug": { + "platform": { "type": "string" }, "url": { @@ -178590,128 +186935,108 @@ }, "type": "object" }, - "retailmenot.CashBackResponse": { + "pcmag.AuthorResponse": { "properties": { - "sections": { + "articles": { "items": { - "$ref": "#/definitions/retailmenot.OfferSection" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" - } - }, - "type": "object" - }, - "retailmenot.CategoriesResponse": { - "properties": { - "categories": { + }, + "biography": { + "type": "string" + }, + "expertise": { "items": { - "$ref": "#/definitions/retailmenot.Category" + "$ref": "#/definitions/pcmag.AuthorTopic" }, "type": "array" - } - }, - "type": "object" - }, - "retailmenot.Category": { - "properties": { - "level": { - "type": "integer" + }, + "image_url": { + "type": "string" }, "name": { "type": "string" }, - "parent_slug": { + "role": { "type": "string" }, "slug": { "type": "string" }, + "social_links": { + "items": { + "$ref": "#/definitions/pcmag.AuthorSocialLink" + }, + "type": "array" + }, "url": { "type": "string" } }, "type": "object" }, - "retailmenot.CategoryOffer": { + "pcmag.AuthorSocialLink": { "properties": { - "discount": { - "type": "string" - }, - "id": { - "type": "string" - }, - "offer_type": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "store_domain": { - "type": "string" - }, - "store_name": { - "type": "string" - }, - "store_url": { - "type": "string" - }, - "title": { + "platform": { "type": "string" }, - "type_label": { + "url": { "type": "string" } }, "type": "object" }, - "retailmenot.CategoryRef": { + "pcmag.AuthorTopic": { "properties": { "name": { "type": "string" }, - "slug": { - "type": "string" - }, "url": { "type": "string" } }, "type": "object" }, - "retailmenot.CategoryResponse": { + "people.AuthorInfoItem": { "properties": { - "description": { + "label": { "type": "string" }, - "name": { + "url": { "type": "string" }, - "offers": { + "value": { + "type": "string" + } + }, + "type": "object" + }, + "people.AuthorResponse": { + "properties": { + "articles": { "items": { - "$ref": "#/definitions/retailmenot.CategoryOffer" + "$ref": "#/definitions/people.HeadlineItem" }, "type": "array" }, - "page": { - "type": "integer" - }, - "similar_stores": { + "biography": { "items": { - "$ref": "#/definitions/retailmenot.StoreRef" + "type": "string" }, "type": "array" }, - "slug": { - "type": "string" - }, - "stats": { + "info": { "items": { - "$ref": "#/definitions/retailmenot.Stat" + "$ref": "#/definitions/people.AuthorInfoItem" }, "type": "array" }, - "total_pages": { - "type": "integer" + "job_title": { + "type": "string" + }, + "name": { + "type": "string" }, "url": { "type": "string" @@ -178719,12 +187044,24 @@ }, "type": "object" }, - "retailmenot.DealEventRef": { + "people.HeadlineItem": { "properties": { - "name": { + "author": { "type": "string" }, - "slug": { + "image_url": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { "type": "string" }, "url": { @@ -178733,1619 +187070,1480 @@ }, "type": "object" }, - "retailmenot.DealEventResponse": { + "petsmart.CategoriesResponse": { "properties": { - "name": { - "type": "string" - }, - "sections": { + "categories": { "items": { - "$ref": "#/definitions/retailmenot.OfferSection" + "$ref": "#/definitions/petsmart.Category" }, "type": "array" }, - "slug": { + "country": { "type": "string" }, - "url": { + "limit": { + "type": "integer" + }, + "page": { + "type": "integer" + }, + "total_results": { + "type": "integer" + } + }, + "type": "object" + }, + "petsmart.Category": { + "properties": { + "depth": { + "type": "integer" + }, + "id": { + "type": "integer" + }, + "key": { + "description": "Key is PetSmart's category key and ID its numeric part.", + "type": "string" + }, + "name": { + "type": "string" + }, + "parent": { + "description": "Parent is the path of the parent category; empty for a top-level one.", + "type": "string" + }, + "path": { + "description": "Path is the value /petsmart/search takes as category, for example\n\"Dog > Food > Dry Food\". It includes the category's descendants.", "type": "string" } }, "type": "object" }, - "retailmenot.DealEventsResponse": { + "petsmart.Facet": { "properties": { - "events": { + "name": { + "type": "string" + }, + "values": { "items": { - "$ref": "#/definitions/retailmenot.DealEventRef" + "$ref": "#/definitions/petsmart.FacetValue" }, "type": "array" } }, "type": "object" }, - "retailmenot.FAQ": { + "petsmart.FacetValue": { "properties": { - "answer": { - "type": "string" + "count": { + "type": "integer" }, - "question": { + "value": { "type": "string" } }, "type": "object" }, - "retailmenot.HomeResponse": { + "petsmart.FiltersResponse": { "properties": { - "faqs": { + "country": { + "type": "string" + }, + "facet_names": { + "description": "FacetNames lists every filter name /petsmart/search's filter parameter\naccepts, regardless of the scope.", "items": { - "$ref": "#/definitions/retailmenot.FAQ" + "type": "string" }, "type": "array" }, - "product_deals": { + "facets": { "items": { - "$ref": "#/definitions/retailmenot.ProductDeal" + "$ref": "#/definitions/petsmart.Facet" }, "type": "array" }, - "sections": { + "numeric_ranges": { "items": { - "$ref": "#/definitions/retailmenot.OfferSection" + "$ref": "#/definitions/petsmart.NumericRange" }, "type": "array" + }, + "total_results": { + "type": "integer" } }, "type": "object" }, - "retailmenot.Offer": { + "petsmart.Images": { "properties": { - "button_text": { - "type": "string" - }, - "cash_back": { - "type": "string" - }, - "details": { + "alternate": { "items": { "type": "string" }, "type": "array" }, - "discount": { + "large": { "type": "string" }, - "id": { + "small": { "type": "string" + } + }, + "type": "object" + }, + "petsmart.InventoryResponse": { + "properties": { + "id": { + "type": "integer" }, - "labels": { + "returned": { + "type": "integer" + }, + "stores": { "items": { - "type": "string" + "$ref": "#/definitions/petsmart.StoreStock" }, "type": "array" }, - "offer_type": { - "description": "OfferType is RetailMeNot's offer kind, for example \"COUPON\", \"SALE\", or\n\"REWARD\" (observed values; returned as data).", - "type": "string" + "stores_in_stock": { + "type": "integer" }, - "position": { + "stores_with_record": { + "description": "StoresWithRecord, StoresInStock and TotalUnits describe every store PetSmart\nreports for the product, before store_id, min_quantity and limit apply.", "type": "integer" }, - "section": { - "description": "Section is the page section the offer was listed in, for example\n\"top_offers\", \"unverified_offers\", \"suggested_offers\", or\n\"expired_offers\" (observed values; returned as data).", - "type": "string" + "total_units": { + "type": "integer" + } + }, + "type": "object" + }, + "petsmart.NumericRange": { + "properties": { + "avg": { + "type": "number" }, - "title": { - "type": "string" + "max": { + "type": "number" }, - "type_label": { + "min": { + "type": "number" + }, + "name": { "type": "string" } }, "type": "object" }, - "retailmenot.OfferSection": { + "petsmart.PackageDimensions": { "properties": { - "category_slug": { - "type": "string" + "height": { + "type": "number" }, - "name": { - "type": "string" + "length": { + "type": "number" }, - "offers": { - "items": { - "$ref": "#/definitions/retailmenot.CategoryOffer" - }, - "type": "array" + "weight": { + "type": "number" + }, + "width": { + "type": "number" } }, "type": "object" }, - "retailmenot.ProductDeal": { + "petsmart.Price": { "properties": { - "discount": { - "type": "string" + "current": { + "type": "number" }, - "id": { + "display": { + "description": "Display is PetSmart's own formatted price text (for example \"$20.68-$94.99\").", "type": "string" }, - "image_url": { + "display_type": { + "description": "DisplayType is \"single\" or \"range\".", "type": "string" }, - "position": { - "type": "integer" + "list": { + "description": "List is the undiscounted price when the product is on sale.", + "type": "number" }, - "product_url": { - "type": "string" + "list_range": { + "items": { + "type": "number" + }, + "type": "array" }, - "title": { + "sale_range": { + "items": { + "type": "number" + }, + "type": "array" + }, + "strikethrough_display": { "type": "string" } }, "type": "object" }, - "retailmenot.Rating": { + "petsmart.Product": { "properties": { - "count": { - "type": "integer" + "autoship_eligible": { + "type": "boolean" }, - "value": { - "type": "number" - } - }, - "type": "object" - }, - "retailmenot.Stat": { - "properties": { - "label": { + "available": { + "type": "boolean" + }, + "brand": { "type": "string" }, - "value": { + "id": { + "description": "ID is the SKU; /petsmart/product and /petsmart/product/inventory take it.", + "type": "integer" + }, + "images": { + "$ref": "#/definitions/petsmart.Images" + }, + "in_stock_in_store": { + "type": "boolean" + }, + "in_store_only": { + "type": "boolean" + }, + "master_product_id": { + "description": "MasterProductID groups the size and flavor variations of one product.", "type": "integer" - } - }, - "type": "object" - }, - "retailmenot.StoreRef": { - "properties": { - "domain": { - "type": "string" }, "name": { "type": "string" }, - "url": { + "online_only": { + "type": "boolean" + }, + "pets": { + "items": { + "type": "string" + }, + "type": "array" + }, + "pickup_eligible": { + "type": "boolean" + }, + "price": { + "$ref": "#/definitions/petsmart.Price" + }, + "primary_category_id": { + "type": "string" + }, + "primary_category_name": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "review_count": { + "type": "integer" + }, + "size": { + "additionalProperties": { + "type": "string" + }, + "description": "Size is the size attribute (for example solidSize: \"30 Lb\").", + "type": "object" + }, + "upc": { "type": "string" + }, + "variations": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "retailmenot.StoreResponse": { + "petsmart.ProductDetail": { "properties": { - "address": { - "type": "string" + "attributes": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "object" }, - "category": { - "$ref": "#/definitions/retailmenot.CategoryRef" + "autoship_eligible": { + "type": "boolean" }, - "description": { - "type": "string" + "available": { + "type": "boolean" }, - "domain": { + "brand": { "type": "string" }, - "faqs": { + "category_paths": { "items": { - "$ref": "#/definitions/retailmenot.FAQ" + "type": "string" }, "type": "array" }, - "heading": { + "description": { "type": "string" }, - "last_reviewed": { + "description_html": { "type": "string" }, - "logo_url": { + "id": { + "description": "ID is the SKU; /petsmart/product and /petsmart/product/inventory take it.", + "type": "integer" + }, + "images": { + "$ref": "#/definitions/petsmart.Images" + }, + "in_stock_in_store": { + "type": "boolean" + }, + "in_store_only": { + "type": "boolean" + }, + "manufacturer_name": { "type": "string" }, - "market": { - "enum": [ - "us", - "ca" - ], + "manufacturer_sku": { "type": "string" }, + "master_product_id": { + "description": "MasterProductID groups the size and flavor variations of one product.", + "type": "integer" + }, "name": { "type": "string" }, - "offers": { + "online_only": { + "type": "boolean" + }, + "package": { + "$ref": "#/definitions/petsmart.PackageDimensions" + }, + "pets": { "items": { - "$ref": "#/definitions/retailmenot.Offer" + "type": "string" }, "type": "array" }, - "phone": { + "pickup_eligible": { + "type": "boolean" + }, + "price": { + "$ref": "#/definitions/petsmart.Price" + }, + "primary_category_id": { "type": "string" }, - "rating": { - "$ref": "#/definitions/retailmenot.Rating" + "primary_category_name": { + "type": "string" }, - "similar_stores": { + "promotions": { "items": { - "$ref": "#/definitions/retailmenot.StoreRef" + "$ref": "#/definitions/petsmart.Promotion" }, "type": "array" }, - "stats": { + "rating": { + "type": "number" + }, + "review_count": { + "type": "integer" + }, + "short_description": { + "type": "string" + }, + "size": { + "additionalProperties": { + "type": "string" + }, + "description": "Size is the size attribute (for example solidSize: \"30 Lb\").", + "type": "object" + }, + "upc": { + "type": "string" + }, + "upcs": { "items": { - "$ref": "#/definitions/retailmenot.Stat" + "type": "string" }, "type": "array" }, - "url": { - "type": "string" + "variation_options": { + "items": { + "$ref": "#/definitions/petsmart.Variation" + }, + "type": "array" }, - "website": { + "variations": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "petsmart.Promotion": { + "properties": { + "text": { "type": "string" } }, "type": "object" }, - "retailmenot.StoresResponse": { + "petsmart.SearchResponse": { "properties": { - "letter": { + "country": { "type": "string" }, - "market": { - "enum": [ - "us", - "ca" - ], - "type": "string" + "limit": { + "type": "integer" }, - "stores": { + "page": { + "type": "integer" + }, + "products": { "items": { - "$ref": "#/definitions/retailmenot.StoreRef" + "$ref": "#/definitions/petsmart.Product" }, "type": "array" + }, + "query": { + "type": "string" + }, + "sort": { + "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" } }, "type": "object" }, - "retailmenot.autocompleteResponseDoc": { + "petsmart.StoreStock": { "properties": { - "data": { - "$ref": "#/definitions/retailmenot.AutocompleteResponse" + "quantity": { + "type": "integer" + }, + "store_id": { + "type": "integer" } }, "type": "object" }, - "retailmenot.blogCategoriesResponseDoc": { + "petsmart.SuggestResponse": { "properties": { - "data": { - "$ref": "#/definitions/retailmenot.BlogCategoriesResponse" + "country": { + "type": "string" + }, + "query": { + "type": "string" + }, + "suggestions": { + "items": { + "$ref": "#/definitions/petsmart.Suggestion" + }, + "type": "array" } }, "type": "object" }, - "retailmenot.blogPostResponseDoc": { + "petsmart.Suggestion": { "properties": { - "data": { - "$ref": "#/definitions/retailmenot.BlogPostResponse" + "popularity": { + "description": "Popularity is PetSmart's relative search volume for the phrase.", + "type": "integer" + }, + "product_count": { + "description": "ProductCount is how many products the phrase matches exactly.", + "type": "integer" + }, + "query": { + "type": "string" } }, "type": "object" }, - "retailmenot.blogPostsResponseDoc": { + "petsmart.Variation": { "properties": { - "data": { - "$ref": "#/definitions/retailmenot.BlogPostsResponse" + "type": { + "type": "string" + }, + "value": { + "type": "string" } }, "type": "object" }, - "retailmenot.blogTagsResponseDoc": { + "petsmart.categoriesResponseDoc": { "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, "data": { - "$ref": "#/definitions/retailmenot.BlogTagsResponse" + "$ref": "#/definitions/petsmart.CategoriesResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "retailmenot.cashBackResponseDoc": { + "petsmart.filtersResponseDoc": { "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, "data": { - "$ref": "#/definitions/retailmenot.CashBackResponse" + "$ref": "#/definitions/petsmart.FiltersResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "retailmenot.categoriesResponseDoc": { + "petsmart.inventoryResponseDoc": { "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, "data": { - "$ref": "#/definitions/retailmenot.CategoriesResponse" + "$ref": "#/definitions/petsmart.InventoryResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "retailmenot.categoryResponseDoc": { + "petsmart.productResponseDoc": { "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, "data": { - "$ref": "#/definitions/retailmenot.CategoryResponse" + "$ref": "#/definitions/petsmart.ProductDetail" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "retailmenot.dealEventResponseDoc": { + "petsmart.searchResponseDoc": { "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, "data": { - "$ref": "#/definitions/retailmenot.DealEventResponse" + "$ref": "#/definitions/petsmart.SearchResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "retailmenot.dealEventsResponseDoc": { + "petsmart.suggestResponseDoc": { "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, "data": { - "$ref": "#/definitions/retailmenot.DealEventsResponse" + "$ref": "#/definitions/petsmart.SuggestResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "retailmenot.homeResponseDoc": { + "pgatour.ResponseDoc": { "properties": { + "code": { + "type": "integer" + }, "data": { - "$ref": "#/definitions/retailmenot.HomeResponse" + "additionalProperties": true, + "type": "object" + }, + "msg": { + "type": "string" } }, "type": "object" }, - "retailmenot.storeResponseDoc": { + "pgatour.ScheduleSeasonsResponseDoc": { "properties": { + "code": { + "type": "integer" + }, "data": { - "$ref": "#/definitions/retailmenot.StoreResponse" + "items": { + "$ref": "#/definitions/pgatour.SeasonChoice" + }, + "type": "array" + }, + "msg": { + "type": "string" } }, "type": "object" }, - "retailmenot.storesResponseDoc": { + "pgatour.SeasonChoice": { "properties": { - "data": { - "$ref": "#/definitions/retailmenot.StoresResponse" + "display": { + "type": "string" + }, + "value": { + "type": "integer" } }, "type": "object" }, - "retrievalplatform.CapabilitiesResponse": { + "pgatour.StatChoices": { "properties": { - "available_operations": { + "queryTypes": { "items": { "type": "string" }, "type": "array" }, - "billing_bypassed": { - "type": "boolean" - }, - "contract_version": { + "statId": { "type": "string" }, - "crawl_available": { - "type": "boolean" - }, - "crawl_max_pages": { - "type": "integer" - }, - "map_max_urls": { - "type": "integer" - }, - "max_active_jobs": { - "type": "integer" - }, - "max_job_credits": { - "type": "integer" - }, - "model_rates": { - "additionalProperties": { - "$ref": "#/definitions/retrievalpricing.ModelRates" - }, - "type": "object" - }, - "pricing": { - "$ref": "#/definitions/retrievalplatform.UnitPrices" - }, - "query_policies": { - "items": { - "type": "string" - }, - "type": "array" + "tourCode": { + "type": "string" }, - "render_modes": { + "tournamentPills": { "items": { - "type": "string" + "$ref": "#/definitions/pgatour.StatTournament" }, "type": "array" }, - "research_available": { - "type": "boolean" - }, - "search_max_results": { + "year": { "type": "integer" }, - "sitemap_modes": { + "yearPills": { "items": { - "type": "string" + "$ref": "#/definitions/pgatour.StatYear" }, "type": "array" } }, "type": "object" }, - "retrievalplatform.MapRequest": { + "pgatour.StatOptionsResponseDoc": { "properties": { - "cursor": { - "type": "string" - }, - "max_urls": { - "type": "integer" - }, - "page_size": { + "code": { "type": "integer" }, - "scope": { - "$ref": "#/definitions/retrievaltypes.URLScope" - }, - "sitemap": { - "type": "string" + "data": { + "$ref": "#/definitions/pgatour.StatChoices" }, - "url": { + "msg": { "type": "string" } }, "type": "object" }, - "retrievalplatform.MapResponse": { + "pgatour.StatTournament": { "properties": { - "coverage": { - "type": "string" - }, - "expires_at": { + "displayName": { "type": "string" }, - "has_more": { - "type": "boolean" - }, - "items": { - "items": { - "$ref": "#/definitions/webretrieval.DiscoveredURL" - }, - "type": "array" - }, - "next_cursor": { + "tournamentId": { "type": "string" - }, - "partial": { - "type": "boolean" - }, - "truncated": { - "type": "boolean" - }, - "usage": { - "$ref": "#/definitions/retrievaltypes.Usage" - }, - "warnings": { - "items": { - "$ref": "#/definitions/retrievaltypes.Warning" - }, - "type": "array" } }, "type": "object" }, - "retrievalplatform.UnitPrices": { + "pgatour.StatYear": { "properties": { - "browser_document_credits": { - "type": "integer" - }, - "cached_read_credits": { - "type": "integer" - }, - "citation_seed_credits": { - "type": "integer" - }, - "control_request_credits": { - "type": "integer" - }, - "currency": { + "displaySeason": { "type": "string" }, - "http_document_credits": { - "type": "integer" - }, - "job_submission_credits": { - "type": "integer" - }, - "map_base_credits": { - "type": "integer" - }, - "map_resource_credits": { - "type": "integer" - }, - "paper_full_text_credits": { + "year": { "type": "integer" + } + }, + "type": "object" + }, + "pgatour.TournamentLink": { + "properties": { + "id": { + "type": "string" }, - "paper_metadata_credits": { - "type": "integer" + "slug": { + "type": "string" }, - "paper_search_query_credits": { - "type": "integer" + "source_path": { + "type": "string" }, - "search_request_credits": { - "type": "integer" + "year": { + "type": "string" } }, "type": "object" }, - "retrievalplatform.WebSearchRequest": { + "pgatour.TournamentLinks": { "properties": { - "country": { - "description": "Country is the result country; defaults to us.", - "enum": [ - "all", - "ar", - "at", - "au", - "be", - "br", - "ca", - "ch", - "cl", - "cn", - "de", - "dk", - "es", - "fi", - "fr", - "gb", - "gr", - "hk", - "id", - "in", - "it", - "jp", - "kr", - "mx", - "my", - "nl", - "no", - "nz", - "ph", - "pl", - "pt", - "ru", - "sa", - "se", - "sg", - "tr", - "tw", - "us", - "za" - ], - "example": "us", - "type": "string" - }, - "exclude_domains": { + "links": { "items": { - "type": "string" + "$ref": "#/definitions/pgatour.TournamentLink" }, "type": "array" }, - "include_domains": { + "unlinked_tournament_ids": { "items": { "type": "string" }, "type": "array" - }, - "language": { - "description": "Language is the result language; defaults to en-us.", - "enum": [ - "de-de", - "en-ca", - "en-gb", - "en-in", - "en-us", - "fi-fi", - "fr-ca", - "fr-fr", - "ja-jp", - "pt-br", - "sq-al", - "sw-ke", - "zh-tw" - ], - "example": "en-us", - "type": "string" - }, - "limit": { - "description": "Limit is the number of results to return, 1 to 50 (default 10). Up to 3 result pages are read to reach it, at 3 credits per page read.", + } + }, + "type": "object" + }, + "pgatour.TournamentLinksResponseDoc": { + "properties": { + "code": { "type": "integer" }, - "max_credits": { - "type": "integer" + "data": { + "$ref": "#/definitions/pgatour.TournamentLinks" }, - "q": { + "msg": { "type": "string" - }, - "scrape": { - "$ref": "#/definitions/retrievaltypes.FetchOptions" - }, - "scrape_limit": { - "type": "integer" } }, - "required": [ - "q" - ], "type": "object" }, - "retrievalplatform.WebSearchResponse": { + "phillyinquirer.AuthorResponse": { "properties": { - "coverage": { + "articles": { "items": { - "$ref": "#/definitions/retrievaltypes.SourceCoverage" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "items": { + "biography": { "items": { - "$ref": "#/definitions/webretrieval.WebSearchHit" + "type": "string" }, "type": "array" }, - "partial": { - "type": "boolean" + "image_url": { + "type": "string" }, - "usage": { - "$ref": "#/definitions/retrievaltypes.Usage" + "name": { + "type": "string" }, - "warnings": { + "role": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "social_links": { "items": { - "$ref": "#/definitions/retrievaltypes.Warning" + "$ref": "#/definitions/phillyinquirer.AuthorSocialLink" }, "type": "array" + }, + "url": { + "type": "string" } }, "type": "object" }, - "retrievalpricing.ModelRates": { + "phillyinquirer.AuthorSocialLink": { "properties": { - "cached_input_credits_per_million": { - "type": "integer" - }, - "input_credits_per_million": { - "type": "integer" + "platform": { + "type": "string" }, - "output_credits_per_million": { - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "retrievaltypes.Claim": { + "philstar.AuthorArticle": { "properties": { - "claim_id": { + "published_at": { "type": "string" }, - "evidence_ids": { - "items": { - "type": "string" - }, - "type": "array" + "section": { + "type": "string" }, - "support_status": { - "$ref": "#/definitions/retrievaltypes.ClaimSupportStatus" + "summary": { + "type": "string" }, - "text": { + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "retrievaltypes.ClaimSupportStatus": { - "enum": [ - "supported", - "conflicting", - "unverified" - ], - "type": "string", - "x-enum-varnames": [ - "ClaimSupported", - "ClaimConflicting", - "ClaimUnverified" - ] - }, - "retrievaltypes.CompletionReason": { - "enum": [ - "frontier_exhausted", - "completed", - "page_limit", - "round_limit", - "deadline", - "budget", - "cancelled", - "upstream_failure", - "internal_failure" - ], - "type": "string", - "x-enum-varnames": [ - "CompletionFrontierExhausted", - "CompletionCompleted", - "CompletionPageLimit", - "CompletionRoundLimit", - "CompletionDeadline", - "CompletionBudget", - "CompletionCancelled", - "CompletionUpstreamFailure", - "CompletionInternalFailure" - ] - }, - "retrievaltypes.CoverageStatus": { - "enum": [ - "ok", - "failed", - "not_indexed", - "unsupported" - ], - "type": "string", - "x-enum-varnames": [ - "CoverageOK", - "CoverageFailed", - "CoverageNotIndexed", - "CoverageUnsupported" - ] - }, - "retrievaltypes.Document": { + "philstar.AuthorResponse": { "properties": { - "content_sha256": { - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/philstar.AuthorArticle" + }, + "type": "array" }, - "content_type": { + "id": { "type": "string" }, - "document_id": { + "name": { "type": "string" }, - "fetched_at": { + "photo_url": { "type": "string" }, - "final_url": { + "url": { "type": "string" + } + }, + "type": "object" + }, + "phonearena.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "links": { + "biography": { "items": { "type": "string" }, "type": "array" }, - "markdown": { + "image_url": { "type": "string" }, - "metadata": { - "$ref": "#/definitions/retrievaltypes.DocumentMetadata" + "name": { + "type": "string" }, - "passages": { + "role": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "social_links": { "items": { - "$ref": "#/definitions/retrievaltypes.Passage" + "$ref": "#/definitions/phonearena.AuthorSocialLink" }, "type": "array" }, - "revision": { + "url": { "type": "string" - }, - "source_url": { + } + }, + "type": "object" + }, + "phonearena.AuthorSocialLink": { + "properties": { + "platform": { "type": "string" }, - "truncated": { - "type": "boolean" + "url": { + "type": "string" } }, "type": "object" }, - "retrievaltypes.DocumentMetadata": { + "pick6.Pick6RuleDetailResponse": { "properties": { - "author": { + "fetched_at": { "type": "string" }, - "description": { - "type": "string" + "section_count": { + "type": "integer" }, - "language": { - "type": "string" + "sections": { + "items": { + "$ref": "#/definitions/pick6.Pick6RuleSection" + }, + "type": "array" }, - "modified_at": { + "slug": { "type": "string" }, - "published_at": { + "source_url": { "type": "string" }, - "title": { + "sport": { "type": "string" } }, "type": "object" }, - "retrievaltypes.Evidence": { + "pick6.Pick6RulePage": { "properties": { - "content_sha256": { - "type": "string" - }, - "evidence_id": { - "type": "string" - }, - "passage": { - "$ref": "#/definitions/retrievaltypes.Passage" + "detail_endpoint_supported": { + "type": "boolean" }, - "retrieved_at": { + "slug": { "type": "string" }, - "revision": { + "title": { "type": "string" }, - "source_id": { - "type": "string" - }, - "source_kind": { - "$ref": "#/definitions/retrievaltypes.SourceKind" - }, - "title": { - "type": "string" - }, - "url": { + "url": { "type": "string" } }, "type": "object" }, - "retrievaltypes.Failure": { + "pick6.Pick6RuleSection": { "properties": { - "message": { + "text": { "type": "string" }, - "reason": { - "$ref": "#/definitions/retrievaltypes.FailureReason" - }, - "retry_after_seconds": { - "type": "integer" - }, - "retryable": { - "type": "boolean" + "title": { + "type": "string" } }, "type": "object" }, - "retrievaltypes.FailureReason": { - "enum": [ - "invalid_url", - "unsupported_content_type", - "blocked", - "not_found", - "rate_limited", - "timeout", - "upstream_error", - "internal_error", - "out_of_scope", - "robots_disallowed", - "duplicate", - "limit_reached", - "unsupported_filter", - "unknown_source", - "idempotency_conflict", - "invalid_cursor", - "result_expired", - "full_text_unavailable", - "budget_exhausted" - ], - "type": "string", - "x-enum-varnames": [ - "FailureInvalidURL", - "FailureUnsupportedContentType", - "FailureBlocked", - "FailureNotFound", - "FailureRateLimited", - "FailureTimeout", - "FailureUpstreamError", - "FailureInternalError", - "FailureOutOfScope", - "FailureRobotsDisallowed", - "FailureDuplicate", - "FailureLimitReached", - "FailureUnsupportedFilter", - "FailureUnknownSource", - "FailureIdempotencyConflict", - "FailureInvalidCursor", - "FailureResultExpired", - "FailureFullTextUnavailable", - "FailureBudgetExhausted" - ] - }, - "retrievaltypes.FetchOptions": { + "pick6.Pick6RulesResponse": { "properties": { - "max_age": { - "type": "integer" + "fetched_at": { + "type": "string" }, - "only_main_content": { - "type": "boolean" + "rule_page_count": { + "type": "integer" }, - "render": { - "$ref": "#/definitions/retrievaltypes.RenderMode" + "rule_pages": { + "items": { + "$ref": "#/definitions/pick6.Pick6RulePage" + }, + "type": "array" }, - "wait_for": { + "section_count": { "type": "integer" + }, + "sections": { + "items": { + "$ref": "#/definitions/pick6.Pick6RuleSection" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "sport": { + "type": "string" } }, "type": "object" }, - "retrievaltypes.JobEvent": { + "pick6.Pick6Sport": { "properties": { - "message": { - "type": "string" - }, - "sequence": { - "type": "integer" + "has_help_center_link": { + "type": "boolean" }, - "source_id": { + "name": { "type": "string" }, - "timestamp": { + "sport_code": { "type": "string" }, - "type": { - "$ref": "#/definitions/retrievaltypes.JobEventType" + "url": { + "type": "string" } }, "type": "object" }, - "retrievaltypes.JobEventType": { - "enum": [ - "submitted", - "started", - "search_completed", - "source_fetched", - "round_completed", - "cancellation_requested", - "completed", - "failed", - "cancelled" - ], - "type": "string", - "x-enum-varnames": [ - "EventSubmitted", - "EventStarted", - "EventSearchCompleted", - "EventSourceFetched", - "EventRoundCompleted", - "EventCancellationRequested", - "EventCompleted", - "EventFailed", - "EventCancelled" - ] - }, - "retrievaltypes.JobEventsResponse": { + "pick6.Pick6SportCategory": { "properties": { - "has_more": { - "type": "boolean" - }, "items": { "items": { - "$ref": "#/definitions/retrievaltypes.JobEvent" + "$ref": "#/definitions/pick6.Pick6Sport" }, "type": "array" }, - "job_id": { - "type": "string" - }, - "next_cursor": { + "name": { "type": "string" } }, "type": "object" }, - "retrievaltypes.JobKind": { - "enum": [ - "crawl", - "research", - "ingestion" - ], - "type": "string", - "x-enum-varnames": [ - "JobKindCrawl", - "JobKindResearch", - "JobKindIngestion" - ] - }, - "retrievaltypes.JobProgress": { + "pick6.Pick6SportsResponse": { "properties": { - "admitted": { - "type": "integer" - }, - "discovered": { - "type": "integer" + "categories": { + "items": { + "$ref": "#/definitions/pick6.Pick6SportCategory" + }, + "type": "array" }, - "discovery_excluded": { + "category_count": { "type": "integer" }, - "failed": { + "linked_page_count": { "type": "integer" }, - "in_flight": { + "listed_item_count": { "type": "integer" }, - "queued": { - "type": "integer" + "restrictions": { + "items": { + "$ref": "#/definitions/pick6.Pick6SportsRestriction" + }, + "type": "array" }, - "skipped": { - "type": "integer" + "source_url": { + "type": "string" }, - "succeeded": { - "type": "integer" + "verified_on": { + "type": "string" } }, "type": "object" }, - "retrievaltypes.JobState": { - "enum": [ - "queued", - "running", - "cancelling", - "succeeded", - "failed", - "cancelled" - ], - "type": "string", - "x-enum-varnames": [ - "JobQueued", - "JobRunning", - "JobCancelling", - "JobSucceeded", - "JobFailed", - "JobCancelled" - ] - }, - "retrievaltypes.JobStatus": { + "pick6.Pick6SportsRestriction": { "properties": { - "cancel_requested": { - "type": "boolean" - }, - "completion_reason": { - "$ref": "#/definitions/retrievaltypes.CompletionReason" - }, - "created_at": { - "type": "string" - }, - "deadline_at": { - "type": "string" - }, - "error": { - "$ref": "#/definitions/retrievaltypes.Failure" - }, - "expires_at": { - "type": "string" - }, - "job_id": { - "type": "string" - }, - "kind": { - "$ref": "#/definitions/retrievaltypes.JobKind" - }, - "partial": { - "type": "boolean" - }, - "progress": { - "$ref": "#/definitions/retrievaltypes.JobProgress" - }, - "research": { - "$ref": "#/definitions/retrievaltypes.ResearchProgress" - }, - "state": { - "$ref": "#/definitions/retrievaltypes.JobState" + "jurisdictions": { + "items": { + "type": "string" + }, + "type": "array" }, - "updated_at": { + "note": { "type": "string" }, - "usage": { - "$ref": "#/definitions/retrievaltypes.Usage" - }, - "warnings": { + "sport_codes": { "items": { - "$ref": "#/definitions/retrievaltypes.Warning" + "type": "string" }, "type": "array" } }, "type": "object" }, - "retrievaltypes.JobSubmission": { + "pick6.pick6RuleDetailResponseDoc": { "properties": { - "deadline_at": { - "type": "string" - }, - "job_id": { - "type": "string" - }, - "replayed": { - "type": "boolean" - }, - "results_url": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "state": { - "$ref": "#/definitions/retrievaltypes.JobState" + "data": { + "$ref": "#/definitions/pick6.Pick6RuleDetailResponse" }, - "status_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "retrievaltypes.Passage": { + "pick6.pick6RulesResponseDoc": { "properties": { - "locator": { - "$ref": "#/definitions/retrievaltypes.PassageLocator" - }, - "passage_id": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "score": { - "type": "number" + "data": { + "$ref": "#/definitions/pick6.Pick6RulesResponse" }, - "text": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "retrievaltypes.PassageLocator": { + "pick6.pick6SportsResponseDoc": { "properties": { - "anchor": { - "type": "string" - }, - "end_byte": { + "code": { + "example": 200, "type": "integer" }, - "end_line": { - "type": "integer" + "data": { + "$ref": "#/definitions/pick6.Pick6SportsResponse" }, - "heading": { + "msg": { + "example": "OK", "type": "string" - }, - "page": { - "type": "integer" - }, - "start_byte": { - "type": "integer" - }, - "start_line": { - "type": "integer" } }, "type": "object" }, - "retrievaltypes.QueryPolicy": { - "enum": [ - "preserve", - "drop_tracking" - ], - "type": "string", - "x-enum-varnames": [ - "QueryPreserve", - "QueryDropTracking" - ] - }, - "retrievaltypes.RenderMode": { - "enum": [ - "auto", - "http", - "browser" - ], - "type": "string", - "x-enum-varnames": [ - "RenderAuto", - "RenderHTTP", - "RenderBrowser" - ] - }, - "retrievaltypes.ResearchProgress": { + "pinterest.Board": { "properties": { - "max_rounds": { - "type": "integer" + "cover_image_url": { + "type": "string" }, - "questions_answered": { - "type": "integer" + "description": { + "type": "string" }, - "questions_total": { + "follower_count": { "type": "integer" }, - "round": { - "type": "integer" + "id": { + "type": "string" }, - "searches_completed": { - "type": "integer" + "name": { + "type": "string" }, - "sources_read": { + "owner_username": { + "type": "string" + }, + "pin_count": { "type": "integer" + }, + "privacy": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "retrievaltypes.SourceCoverage": { + "pinterest.BoardResponse": { "properties": { - "corpus_revision": { + "cover_image_url": { "type": "string" }, - "failure": { - "$ref": "#/definitions/retrievaltypes.Failure" + "description": { + "type": "string" }, - "indexed_at": { + "follower_count": { + "type": "integer" + }, + "id": { "type": "string" }, - "retrieved_at": { + "name": { "type": "string" }, - "source_id": { + "owner_username": { "type": "string" }, - "status": { - "$ref": "#/definitions/retrievaltypes.CoverageStatus" - } - }, - "type": "object" - }, - "retrievaltypes.SourceKind": { - "enum": [ - "web", - "paper", - "developer" - ], - "type": "string", - "x-enum-varnames": [ - "SourceWeb", - "SourcePaper", - "SourceDeveloper" - ] - }, - "retrievaltypes.URLScope": { - "properties": { - "exclude_paths": { - "items": { - "type": "string" - }, - "type": "array" + "pin_count": { + "type": "integer" }, - "include_paths": { + "pins": { "items": { - "type": "string" + "$ref": "#/definitions/pinterest.PinSummary" }, "type": "array" }, - "include_subdomains": { - "type": "boolean" + "privacy": { + "type": "string" }, - "query_policy": { - "$ref": "#/definitions/retrievaltypes.QueryPolicy" + "url": { + "type": "string" } }, "type": "object" }, - "retrievaltypes.Usage": { + "pinterest.CategoriesResponse": { "properties": { - "browser_renders": { - "type": "integer" - }, - "credits_charged": { - "type": "integer" - }, - "credits_released": { - "type": "integer" - }, - "credits_reserved": { - "type": "integer" - }, - "fetch_attempts": { - "type": "integer" - }, - "fetched_urls": { - "type": "integer" - }, - "input_tokens": { - "type": "integer" - }, - "output_tokens": { - "type": "integer" - }, - "search_requests": { - "type": "integer" - }, - "settlement_pending": { - "type": "boolean" + "categories": { + "description": "Top-level Pinterest Ideas categories.", + "items": { + "$ref": "#/definitions/pinterest.Category" + }, + "type": "array" } }, "type": "object" }, - "retrievaltypes.Warning": { + "pinterest.Category": { "properties": { - "code": { - "$ref": "#/definitions/retrievaltypes.WarningCode" + "id": { + "description": "Pinterest category id. Use it with the ideas endpoint.", + "type": "string" }, - "message": { + "name": { + "description": "Category name as shown on Pinterest.", "type": "string" }, - "source_id": { + "slug": { + "description": "URL slug of the category.", "type": "string" } }, "type": "object" }, - "retrievaltypes.WarningCode": { - "enum": [ - "source_failed", - "source_not_indexed", - "discovery_truncated", - "ranking_window_limit", - "imprecise_date_excluded", - "content_unavailable", - "cached_source_stale" - ], - "type": "string", - "x-enum-varnames": [ - "WarningSourceFailed", - "WarningSourceNotIndexed", - "WarningDiscoveryTruncated", - "WarningRankingWindowLimit", - "WarningImpreciseDateExcluded", - "WarningContentUnavailable", - "WarningCachedSourceStale" - ] - }, - "reuters.ArticleItem": { + "pinterest.IdeaResponse": { "properties": { - "image_url": { + "description": { "type": "string" }, - "title": { - "type": "string" + "follower_count": { + "type": "integer" }, - "updated_at": { + "id": { "type": "string" }, - "url": { + "name": { "type": "string" + }, + "pins": { + "items": { + "$ref": "#/definitions/pinterest.PinSummary" + }, + "type": "array" } }, "type": "object" }, - "reuters.ArticleResponse": { + "pinterest.PinDetail": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { + "board_name": { + "description": "Name of the board the pin is saved to.", "type": "string" }, - "image_caption": { - "type": "string" + "comment_count": { + "type": "integer" }, - "image_url": { + "created_at": { "type": "string" }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" - }, - "published_at": { + "description": { + "description": "Description text of the pin as Pinterest shows it.", "type": "string" }, - "title": { + "domain": { + "description": "Domain of the website the pin links to, or `Uploaded by user` for pins uploaded directly.", "type": "string" }, - "updated_at": { + "dominant_color": { + "description": "Dominant color of the pin image, as a hex code such as `#6a2f18`.", "type": "string" }, - "url": { + "id": { + "description": "Pinterest pin id.", "type": "string" - } - }, - "type": "object" - }, - "reuters.ArticlesResponse": { - "properties": { - "items": { - "items": { - "$ref": "#/definitions/reuters.ArticleItem" - }, - "type": "array" }, - "page": { - "type": "integer" - } - }, - "type": "object" - }, - "reuters.AuthorArticle": { - "properties": { "image_url": { + "description": "URL of the pin image.", "type": "string" }, - "published_at": { + "link": { + "description": "Destination URL the pin links to.", "type": "string" }, - "summary": { + "pinner_username": { + "description": "Username of the account that saved the pin.", "type": "string" }, + "repin_count": { + "type": "integer" + }, "title": { + "description": "Title of the pin as Pinterest shows it.", "type": "string" }, "url": { + "description": "URL of the pin's page on Pinterest.", "type": "string" } }, "type": "object" }, - "reuters.AuthorResponse": { + "pinterest.PinSummary": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/reuters.AuthorArticle" - }, - "type": "array" + "board_name": { + "description": "Name of the board the pin is saved to.", + "type": "string" }, - "company": { + "description": { + "description": "Description text of the pin as Pinterest shows it.", "type": "string" }, - "email": { + "domain": { + "description": "Domain of the website the pin links to, or `Uploaded by user` for pins uploaded directly.", + "type": "string" + }, + "dominant_color": { + "description": "Dominant color of the pin image, as a hex code such as `#6a2f18`.", + "type": "string" + }, + "id": { + "description": "Pinterest pin id.", "type": "string" }, "image_url": { + "description": "URL of the pin image.", "type": "string" }, - "name": { + "link": { + "description": "Destination URL the pin links to.", "type": "string" }, - "social_accounts": { - "items": { - "$ref": "#/definitions/reuters.AuthorSocialAccount" - }, - "type": "array" + "pinner_username": { + "description": "Username of the account that saved the pin.", + "type": "string" }, - "total_articles": { - "type": "integer" + "title": { + "description": "Title of the pin as Pinterest shows it.", + "type": "string" }, "url": { + "description": "URL of the pin's page on Pinterest.", "type": "string" } }, "type": "object" }, - "reuters.AuthorSocialAccount": { + "pinterest.SearchResponse": { "properties": { - "platform": { - "type": "string" + "pins": { + "items": { + "$ref": "#/definitions/pinterest.PinSummary" + }, + "type": "array" }, - "url": { + "query": { "type": "string" } }, "type": "object" }, - "reuters.NewsItem": { + "pinterest.User": { "properties": { - "image_caption": { + "about": { + "description": "Bio text from the profile.", "type": "string" }, - "image_url": { + "avatar_url": { + "description": "URL of the profile picture.", "type": "string" }, - "published_at": { - "type": "string" + "board_count": { + "description": "Number of boards on the profile.", + "type": "integer" }, - "title": { + "follower_count": { + "description": "Number of accounts following the user.", + "type": "integer" + }, + "following_count": { + "description": "Number of accounts the user follows.", + "type": "integer" + }, + "full_name": { + "description": "Display name shown on the profile.", "type": "string" }, - "updated_at": { + "is_verified_merchant": { + "description": "Whether Pinterest marks the account as a verified merchant.", + "type": "boolean" + }, + "pin_count": { + "description": "Number of pins on the profile.", + "type": "integer" + }, + "username": { + "description": "Pinterest username of the profile.", "type": "string" }, - "url": { + "website_url": { + "description": "Website URL listed on the profile.", "type": "string" } }, "type": "object" }, - "reuters.NewsResponse": { + "pinterest.UserBoardsResponse": { "properties": { - "items": { + "boards": { "items": { - "$ref": "#/definitions/reuters.NewsItem" + "$ref": "#/definitions/pinterest.Board" }, "type": "array" }, - "page": { - "type": "integer" + "username": { + "type": "string" } }, "type": "object" }, - "reuters.Section": { + "pinterest.UserPinsResponse": { "properties": { - "name": { - "type": "string" - }, - "slug": { - "type": "string" + "pins": { + "description": "Pins from the user's profile.", + "items": { + "$ref": "#/definitions/pinterest.PinSummary" + }, + "type": "array" }, - "url": { + "username": { + "description": "Pinterest username that was requested.", "type": "string" } }, "type": "object" }, - "reuters.SectionItem": { + "pinterest.boardResponseDoc": { "properties": { - "image_caption": { - "type": "string" - }, - "image_url": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "updated_at": { - "type": "string" + "data": { + "$ref": "#/definitions/pinterest.BoardResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "reuters.SectionResponse": { + "pinterest.categoriesResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/reuters.SectionItem" - }, - "type": "array" - }, - "page": { + "code": { + "example": 200, "type": "integer" }, - "section": { + "data": { + "$ref": "#/definitions/pinterest.CategoriesResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "reuters.SectionsResponse": { - "properties": { - "items": { - "items": { - "$ref": "#/definitions/reuters.Section" - }, - "type": "array" - } - }, - "type": "object" - }, - "reuters.articleResponseDoc": { + "pinterest.ideaResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/reuters.ArticleResponse" + "$ref": "#/definitions/pinterest.IdeaResponse" }, "msg": { "example": "OK", @@ -180354,14 +188552,14 @@ }, "type": "object" }, - "reuters.articlesResponseDoc": { + "pinterest.pinResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/reuters.ArticlesResponse" + "$ref": "#/definitions/pinterest.PinDetail" }, "msg": { "example": "OK", @@ -180370,14 +188568,14 @@ }, "type": "object" }, - "reuters.authorResponseDoc": { + "pinterest.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/reuters.AuthorResponse" + "$ref": "#/definitions/pinterest.SearchResponse" }, "msg": { "example": "OK", @@ -180386,14 +188584,14 @@ }, "type": "object" }, - "reuters.newsResponseDoc": { + "pinterest.userBoardsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/reuters.NewsResponse" + "$ref": "#/definitions/pinterest.UserBoardsResponse" }, "msg": { "example": "OK", @@ -180402,14 +188600,14 @@ }, "type": "object" }, - "reuters.sectionResponseDoc": { + "pinterest.userPinsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/reuters.SectionResponse" + "$ref": "#/definitions/pinterest.UserPinsResponse" }, "msg": { "example": "OK", @@ -180418,14 +188616,14 @@ }, "type": "object" }, - "reuters.sectionsResponseDoc": { + "pinterest.userResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/reuters.SectionsResponse" + "$ref": "#/definitions/pinterest.User" }, "msg": { "example": "OK", @@ -180434,1644 +188632,2089 @@ }, "type": "object" }, - "reverb.CategoriesResponse": { + "pitchbook.DataTable": { "properties": { - "categories": { + "columns": { + "description": "Column headings of the table.", "items": { - "$ref": "#/definitions/reverb.CategoryItem" + "type": "string" }, "type": "array" }, - "fetched_at": { + "name": { + "description": "Name of the profile section the table comes from, such as `Investors`.", + "example": "Investors", "type": "string" }, - "product_types": { + "row_ids": { + "description": "Profile each cell links to as `kind/id`, such as `company/157986-91`, matching `rows` by position. Empty for cells without a link.", "items": { - "$ref": "#/definitions/reverb.ProductType" + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "array" + }, + "rows": { + "description": "Table rows, each a list of cell texts. Cells PitchBook hides behind a subscription are empty.", + "items": { + "items": { + "type": "string" + }, + "type": "array" }, "type": "array" + }, + "total": { + "description": "Full count of entries PitchBook states for the section, usually more than the rows returned.", + "example": 23, + "type": "integer" } }, "type": "object" }, - "reverb.CategoryItem": { + "pitchbook.FAQ": { "properties": { - "full_name": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "product_type": { - "type": "string" - }, - "slug": { + "answer": { + "description": "Answer to the question.", + "example": "Thinking Machines Lab was founded in 2024.", "type": "string" }, - "uuid": { + "question": { + "description": "Question as shown in the profile's FAQ section.", + "example": "When was Thinking Machines Lab founded?", "type": "string" } }, "type": "object" }, - "reverb.Listing": { + "pitchbook.ProfileResponse": { "properties": { - "auction": { - "type": "boolean" - }, - "category_uuids": { - "items": { + "contact": { + "additionalProperties": { "type": "string" }, - "type": "array" + "description": "Contact and company details from the profile as label and value pairs, such as `Website`.", + "type": "object" }, - "condition": { + "description": { + "description": "Profile description as PitchBook shows it.", "type": "string" }, - "condition_slug": { - "type": "string" + "faqs": { + "description": "Question and answer pairs from the profile's FAQ section.", + "items": { + "$ref": "#/definitions/pitchbook.FAQ" + }, + "type": "array" }, - "cover_photo_url": { + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-07-08T20:00:00Z", "type": "string" }, - "created_at": { + "id": { + "description": "PitchBook profile id, such as `752821-12`.", + "example": "752821-12", "type": "string" }, - "currency": { + "kind": { + "description": "Profile type: `company`, `investor`, `fund`, `advisor` or `limited-partner`.", + "example": "company", "type": "string" }, - "finish": { + "name": { + "description": "Name of the company, investor, fund, advisor or limited partner.", + "example": "Thinking Machines Lab", "type": "string" }, - "has_inventory": { - "type": "boolean" + "overview": { + "additionalProperties": { + "type": "string" + }, + "description": "Quick facts from the profile as label and value pairs, such as `Year Founded`.", + "type": "object" }, - "id": { - "type": "integer" + "source_url": { + "description": "URL the data was read from.", + "example": "https://pitchbook.com/profiles/company/752821-12", + "type": "string" }, - "inventory": { + "tables": { + "description": "Tables from the profile's sections, such as Investors.", + "items": { + "$ref": "#/definitions/pitchbook.DataTable" + }, + "type": "array" + } + }, + "type": "object" + }, + "pitchbook.advisorResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "make": { - "type": "string" + "data": { + "$ref": "#/definitions/pitchbook.ProfileResponse" }, - "model": { + "msg": { + "example": "OK", "type": "string" - }, - "offers_enabled": { - "type": "boolean" - }, - "photo_count": { + } + }, + "type": "object" + }, + "pitchbook.companyResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "price": { - "type": "number" + "data": { + "$ref": "#/definitions/pitchbook.ProfileResponse" }, - "published_at": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "pitchbook.fundResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "shop_name": { - "type": "string" + "data": { + "$ref": "#/definitions/pitchbook.ProfileResponse" }, - "title": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "pitchbook.investorResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/pitchbook.ProfileResponse" }, - "year": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "reverb.ListingPhoto": { + "pitchbook.limitedPartnerResponseDoc": { "properties": { - "full_url": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "thumbnail_url": { + "data": { + "$ref": "#/definitions/pitchbook.ProfileResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "reverb.ListingResponse": { + "pizzahut.Address": { "properties": { - "accepted_payment_methods": { - "items": { - "type": "string" - }, - "type": "array" - }, - "auction": { - "type": "boolean" - }, - "category_uuids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "condition": { + "address1": { + "example": "932 8th Ave", "type": "string" }, - "condition_slug": { + "address2": { "type": "string" }, - "created_at": { + "city": { + "example": "New York", "type": "string" }, - "currency": { + "country_code": { + "example": "US", "type": "string" }, - "description": { - "type": "string" + "latitude": { + "example": 40.7655, + "type": "number" }, - "fetched_at": { + "longitude": { + "example": -73.9835, + "type": "number" + }, + "phone": { + "example": "+19296452154", "type": "string" }, - "finish": { + "postal_code": { + "example": "10019", "type": "string" }, - "has_inventory": { - "type": "boolean" + "state": { + "example": "NY", + "type": "string" + } + }, + "type": "object" + }, + "pizzahut.BundleChoice": { + "properties": { + "choice_code": { + "example": "748", + "type": "string" }, - "id": { + "max_allowed_selections": { + "example": 1, "type": "integer" }, - "inventory": { + "min_allowed_selections": { + "example": 1, "type": "integer" }, - "local_pickup_only": { - "type": "boolean" - }, - "location": { + "name": { + "example": "1st Pizza", "type": "string" }, - "make": { + "variants": { + "items": { + "$ref": "#/definitions/pizzahut.BundleChoiceVariant" + }, + "type": "array" + } + }, + "type": "object" + }, + "pizzahut.BundleChoiceVariant": { + "properties": { + "name": { + "example": "Medium Hand-Tossed Create Your Own 1-Top Pizza", "type": "string" }, - "model": { - "type": "string" + "upcharge": { + "$ref": "#/definitions/pizzahut.Money" }, - "offers_enabled": { - "type": "boolean" + "variant_code": { + "example": "variant_CLSS001_010BCYO1T_SIZE050M_BASE020H", + "type": "string" + } + }, + "type": "object" + }, + "pizzahut.BundleChoicesResponse": { + "properties": { + "bundle_code": { + "example": "MEAL501BD", + "type": "string" }, - "payment_policy": { + "channel": { + "example": "WEB", "type": "string" }, - "photos": { + "choice_count": { + "example": 4, + "type": "integer" + }, + "choices": { "items": { - "$ref": "#/definitions/reverb.ListingPhoto" + "$ref": "#/definitions/pizzahut.BundleChoice" }, "type": "array" }, - "price": { - "type": "number" - }, - "product_type": { + "description": { + "example": "All your faves - 2 medium 1-topping pizzas, 8 boneless wings, and 5 breadsticks!", "type": "string" }, - "published_at": { + "fetched_at": { "type": "string" }, - "return_policy": { + "name": { + "example": "Big Dinner Box", "type": "string" }, - "shipping_policy": { + "price": { + "$ref": "#/definitions/pizzahut.Money" + }, + "source_url": { "type": "string" }, - "shop_feedback_count": { - "type": "integer" + "store_number": { + "example": "040937", + "type": "string" + } + }, + "type": "object" + }, + "pizzahut.DeliveryEstimateResponse": { + "properties": { + "delivery_provider": { + "example": "INTERNAL", + "type": "string" }, - "shop_name": { + "dropoff_at": { "type": "string" }, - "shop_preferred_seller": { - "type": "boolean" + "fee": { + "allOf": [ + { + "$ref": "#/definitions/pizzahut.Money" + } + ], + "description": "Fee is the total delivery fee; Fees breaks it down by line item." }, - "shop_rating_percentage": { - "type": "number" + "fees": { + "items": { + "$ref": "#/definitions/pizzahut.DeliveryFeeLine" + }, + "type": "array" }, - "shop_url": { + "fetched_at": { "type": "string" }, - "sku": { + "pickup_at": { "type": "string" }, - "source_url": { + "reason": { + "example": "The requested StoreDeliveryProvider has not be enabled at this store", "type": "string" }, - "state_description": { - "type": "string" + "serviceable": { + "description": "Serviceable is true only when the upstream returned a real estimate.\nA false value with Reason populated covers every other case this\nfamily has seen live: the provider not enabled at this store\n(confirmed live for DOORDASH against a real INTERNAL-only store) or\nthe upstream delivery marketplace itself reporting an error --\nPizza Hut's schema represents these as distinct typed results, not\none boolean. See this type's own doc comment for a caveat about\nwhat Serviceable:true does and does not confirm for INTERNAL.", + "example": true, + "type": "boolean" }, - "state_slug": { + "source_url": { "type": "string" }, - "title": { + "store_number": { + "example": "040937", "type": "string" + } + }, + "type": "object" + }, + "pizzahut.DeliveryFeeLine": { + "properties": { + "amount": { + "$ref": "#/definitions/pizzahut.Money" }, - "url": { + "name": { + "example": "Delivery fee", "type": "string" }, - "views": { - "type": "integer" - }, - "watches": { - "type": "integer" - }, - "year": { + "type": { + "example": "DELIVERY_FEE", "type": "string" } }, "type": "object" }, - "reverb.MakesResponse": { + "pizzahut.DeliveryProvider": { "properties": { - "fetched_at": { - "type": "string" + "enabled": { + "example": true, + "type": "boolean" }, - "makes": { - "items": { - "type": "string" - }, - "type": "array" + "provider": { + "example": "INTERNAL", + "type": "string" } }, "type": "object" }, - "reverb.PriceGuideCSP": { + "pizzahut.MenuCategory": { "properties": { - "average_rating": { - "type": "number" - }, - "brand": { + "category_code": { + "example": "pizza", "type": "string" }, - "currency": { + "description": { "type": "string" }, - "finishes": { + "items": { "items": { - "type": "string" + "$ref": "#/definitions/pizzahut.MenuItem" }, "type": "array" }, - "image_url": { - "type": "string" - }, - "new_listings": { - "type": "integer" - }, - "new_low_price": { - "type": "number" - }, - "reviews_count": { - "type": "integer" - }, - "slug": { - "type": "string" - }, - "title": { - "type": "string" - }, - "url": { + "name": { + "example": "Pizza", "type": "string" - }, - "used_listings": { - "type": "integer" - }, - "used_low_price": { - "type": "number" } }, "type": "object" }, - "reverb.PriceGuideMonthlyPrice": { + "pizzahut.MenuItem": { "properties": { - "average_price": { - "type": "number" + "available": { + "description": "Available is false when this item (or, for a product, every one of\nits variants at once) is currently blacked out -- a real,\nlive-confirmed \"temporarily unavailable\"/\"sold out\" signal (a\ndessert item was found blacked out at a real store, 2026-09-06),\ndistinct from an item genuinely being removed from the menu (which\nsimply would not appear here at all). Check a product's own\nVariants[].Available too -- a product itself can be orderable while\none specific size/style variant is blacked out, and vice versa.", + "example": true, + "type": "boolean" }, - "currency": { + "code": { + "example": "CLSS001P|PROD220P", "type": "string" }, - "month": { + "description": { "type": "string" }, - "sample_size": { - "type": "integer" - } - }, - "type": "object" - }, - "reverb.PriceGuideResponse": { - "properties": { - "brand": { + "image_url": { "type": "string" }, - "canonical_product_id": { + "name": { + "example": "Pepperoni Pizza", "type": "string" }, - "canonical_products": { - "items": { - "$ref": "#/definitions/reverb.PriceGuideVariant" - }, - "type": "array" - }, - "condition": { - "type": "string" + "price": { + "$ref": "#/definitions/pizzahut.Money" }, - "fetched_at": { + "type": { + "example": "product", "type": "string" }, - "image_url": { + "variant_code": { + "description": "VariantCode is the specific priced variant this item's Price\nreflects (present for type=product, whose price comes from its\ndefault variant).", + "example": "variant_CLSS001_220P_SIZE060L_BASE020H", "type": "string" }, - "monthly_prices": { + "variants": { + "description": "Variants lists every other priced size/crust/style variant this\nproduct item offers beyond its default (type=product only). Empty\nwhen the product has no additional variants beyond the default, or\nfor bundle/variant items.", "items": { - "$ref": "#/definitions/reverb.PriceGuideMonthlyPrice" + "$ref": "#/definitions/pizzahut.MenuVariant" }, "type": "array" - }, - "range": { - "type": "string" - }, - "recent_sales": { + } + }, + "type": "object" + }, + "pizzahut.MenuResponse": { + "properties": { + "categories": { "items": { - "$ref": "#/definitions/reverb.PriceGuideSale" + "$ref": "#/definitions/pizzahut.MenuCategory" }, "type": "array" }, - "sales_count": { - "type": "integer" + "channel": { + "example": "WEB", + "type": "string" }, - "sales_limit": { - "type": "integer" + "currency": { + "example": "USD", + "type": "string" }, - "sales_total": { + "fetched_at": { + "type": "string" + }, + "item_count": { + "description": "ItemCount counts only items reachable through Categories, matching\nthis field's original meaning -- it does not include\nUncategorizedItems.", + "example": 120, "type": "integer" }, - "slug": { + "menu_id": { + "example": "22590d80-9482-4f7b-9594-d7ba2885b928", "type": "string" }, "source_url": { "type": "string" }, - "title": { + "store_number": { + "example": "040937", "type": "string" }, - "url": { - "type": "string" + "uncategorized_items": { + "description": "UncategorizedItems lists real, separately-priced products and bundles\nthis restaurant's menu carries that are not linked to any category --\nconfirmed live 2026-09-06 (coverage-expansion round 2): Pizza Hut's\n`Menu.products`/`Menu.bundles` support a `categorized: false` filter,\nand at least one store sampled had 9 such products (e.g. a $0.99\n\"Ranch Dip Cup\", \"Garlic Dip Cup\") that Categories' own category walk\nnever surfaces at all -- a real gap in the prior category-walk-only\napproach, not a parser omission. A platform-wide placeholder product\nnamed \"Reserved\" (price $0.00) appears in this list at every store\nsampled; it is included as upstream returns it rather than filtered,\nsince this repo does not invent filtering heuristics without a\nconfirmed upstream signal to key on. Empty when every product/bundle\nis reachable through Categories (no uncategorized bundle has been\nobserved on any store sampled).", + "items": { + "$ref": "#/definitions/pizzahut.MenuItem" + }, + "type": "array" } }, "type": "object" }, - "reverb.PriceGuideSale": { + "pizzahut.MenuVariant": { "properties": { - "condition": { - "type": "string" + "available": { + "description": "Available is false when this specific variant is currently blacked\nout (temporarily unavailable) -- confirmed live 2026-09-06 that this\ngenuinely varies independently per variant, not just per product.", + "example": true, + "type": "boolean" }, - "listing_id": { + "name": { + "example": "Large Original Stuffed Crust® Pepperoni Pizza", "type": "string" }, "price": { - "type": "string" + "$ref": "#/definitions/pizzahut.Money" }, - "sold_at": { + "variant_code": { + "example": "variant_CLSS001_220P_SIZE060L_BASE431S", "type": "string" } }, "type": "object" }, - "reverb.PriceGuideSearchResponse": { + "pizzahut.Modifier": { "properties": { - "count": { - "type": "integer" + "modifier_code": { + "example": "CLSS001P|TOPP012P", + "type": "string" }, - "fetched_at": { + "name": { + "example": "Pepperoni", "type": "string" }, - "models": { + "weights": { "items": { - "$ref": "#/definitions/reverb.PriceGuideCSP" + "$ref": "#/definitions/pizzahut.ModifierWeight" }, "type": "array" - }, - "query": { - "type": "string" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "reverb.PriceGuideVariant": { + "pizzahut.ModifierSlot": { "properties": { - "finish": { - "type": "string" + "max_allowed_selections": { + "example": 5, + "type": "integer" }, - "id": { - "type": "string" + "min_allowed_selections": { + "example": 0, + "type": "integer" }, - "model": { - "type": "string" + "modifiers": { + "items": { + "$ref": "#/definitions/pizzahut.Modifier" + }, + "type": "array" }, "name": { + "example": "Pizza Toppings", "type": "string" }, - "year": { + "slot_code": { + "example": "slot_pizza_toppings", "type": "string" } }, "type": "object" }, - "reverb.ProductType": { + "pizzahut.ModifierWeight": { "properties": { - "name": { + "modifier_weight_code": { + "example": "CLSS001P|TOPP200XC", "type": "string" }, - "slug": { + "name": { + "example": "Extra Cheese", "type": "string" + }, + "price": { + "$ref": "#/definitions/pizzahut.Money" } }, "type": "object" }, - "reverb.SearchResponse": { + "pizzahut.ModifiersResponse": { "properties": { - "category": { + "channel": { + "example": "WEB", "type": "string" }, - "count": { - "type": "integer" - }, "fetched_at": { "type": "string" }, - "limit": { + "name": { + "example": "Large Hand-Tossed Create Your Own 1-Top Pizza", + "type": "string" + }, + "price": { + "$ref": "#/definitions/pizzahut.Money" + }, + "slot_count": { + "example": 6, "type": "integer" }, - "listings": { + "slots": { "items": { - "$ref": "#/definitions/reverb.Listing" + "$ref": "#/definitions/pizzahut.ModifierSlot" }, "type": "array" }, - "make": { + "source_url": { "type": "string" }, - "max_price": { - "type": "number" + "store_number": { + "example": "040937", + "type": "string" }, - "min_price": { + "variant_code": { + "example": "variant_CLSS001_010BCYO1T_SIZE060L_BASE020H", + "type": "string" + } + }, + "type": "object" + }, + "pizzahut.Money": { + "properties": { + "amount": { + "example": 20.99, "type": "number" }, - "page": { + "amount_cents": { + "example": 2099, "type": "integer" }, - "product_type": { + "currency_code": { + "example": "USD", "type": "string" + } + }, + "type": "object" + }, + "pizzahut.OccasionHours": { + "properties": { + "allow_tip": { + "example": true, + "type": "boolean" }, - "query": { - "type": "string" + "enabled": { + "example": true, + "type": "boolean" }, - "source_url": { + "max_order_amount": { + "$ref": "#/definitions/pizzahut.Money" + }, + "min_order_amount": { + "$ref": "#/definitions/pizzahut.Money" + }, + "occasion": { + "example": "CARRYOUT", "type": "string" }, - "total_pages": { - "type": "integer" + "payment_types": { + "items": { + "$ref": "#/definitions/pizzahut.PaymentType" + }, + "type": "array" }, - "total_results": { - "type": "integer" + "windows": { + "items": { + "$ref": "#/definitions/pizzahut.TimeWindow" + }, + "type": "array" } }, "type": "object" }, - "reverb.ShopFeedback": { + "pizzahut.PaymentType": { "properties": { - "author_name": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "listing_url": { - "type": "string" - }, - "message": { + "name": { + "example": "APPLEPAY", "type": "string" }, - "order_title": { + "type": { + "example": "CARD", "type": "string" - }, - "rating": { - "type": "integer" } }, "type": "object" }, - "reverb.ShopFeedbackResponse": { + "pizzahut.Store": { "properties": { - "count": { - "type": "integer" + "accepting_online_orders": { + "example": true, + "type": "boolean" }, - "feedback": { + "address": { + "$ref": "#/definitions/pizzahut.Address" + }, + "archived": { + "example": false, + "type": "boolean" + }, + "delivery_providers": { "items": { - "$ref": "#/definitions/reverb.ShopFeedback" + "$ref": "#/definitions/pizzahut.DeliveryProvider" }, "type": "array" }, - "fetched_at": { + "name": { + "example": "040937", "type": "string" }, - "page": { - "type": "integer" - }, - "slug": { + "store_number": { + "example": "040937", "type": "string" }, - "source_url": { + "timezone": { + "example": "America/New_York", "type": "string" - }, - "total": { - "type": "integer" - }, - "total_pages": { - "type": "integer" } }, "type": "object" }, - "reverb.ShopResponse": { + "pizzahut.StoreResponse": { "properties": { - "avatar_url": { - "type": "string" + "accepting_online_orders": { + "example": true, + "type": "boolean" }, - "banner_url": { - "type": "string" + "address": { + "$ref": "#/definitions/pizzahut.Address" }, - "description": { - "type": "string" + "archived": { + "example": false, + "type": "boolean" }, - "feedback_count": { - "type": "integer" + "delivery_providers": { + "items": { + "$ref": "#/definitions/pizzahut.DeliveryProvider" + }, + "type": "array" }, "fetched_at": { "type": "string" }, - "listings": { + "hours": { + "description": "Hours is this restaurant's recurring open windows per order channel\n(occasion) -- CARRYOUT, DELIVERY, DINE_IN, DRIVE_THRU,\nCATERING_CARRYOUT -- plus each occasion's ordering constraints\n(minimum/maximum order amount, whether tipping is offered, accepted\npayment methods; see OccasionHours). A restaurant that does not offer\na given occasion at all omits it from this list. Every real store\nsampled during this family's builds only offers CARRYOUT and\nDELIVERY; DINE_IN/DRIVE_THRU/CATERING_CARRYOUT are schema-valid but\nhave not been observed live.", "items": { - "$ref": "#/definitions/reverb.Listing" + "$ref": "#/definitions/pizzahut.OccasionHours" }, "type": "array" }, - "listings_count": { - "type": "integer" - }, - "listings_limit": { - "type": "integer" - }, - "listings_page": { - "type": "integer" - }, - "listings_total": { - "type": "integer" - }, - "location": { - "type": "string" - }, "name": { + "example": "040937", "type": "string" }, - "on_vacation": { - "type": "boolean" - }, - "payment_policy": { + "source_url": { "type": "string" }, - "preferred_seller": { - "type": "boolean" - }, - "quick_responder": { - "type": "boolean" - }, - "quick_shipper": { - "type": "boolean" - }, - "rating_percentage": { - "type": "number" - }, - "return_policy": { + "store_number": { + "example": "040937", "type": "string" }, - "shipping_policy": { + "timezone": { + "example": "America/New_York", "type": "string" + } + }, + "type": "object" + }, + "pizzahut.StoresResponse": { + "properties": { + "count": { + "example": 5, + "type": "integer" }, - "shop_type": { + "fetched_at": { "type": "string" }, - "slug": { - "type": "string" + "has_more": { + "example": false, + "type": "boolean" }, "source_url": { "type": "string" }, - "url": { - "type": "string" + "stores": { + "items": { + "$ref": "#/definitions/pizzahut.Store" + }, + "type": "array" }, - "website": { - "type": "string" + "total_count": { + "description": "TotalCount is how many restaurants matched upstream; it can exceed\nCount when more results exist than max_results asked for.", + "example": 9, + "type": "integer" } }, "type": "object" }, - "reverb.categoriesResponseDoc": { + "pizzahut.TimeWindow": { "properties": { - "code": { - "example": 200, - "type": "integer" + "blackout": { + "example": false, + "type": "boolean" }, - "data": { - "$ref": "#/definitions/reverb.CategoriesResponse" + "days": { + "example": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "items": { + "type": "integer" + }, + "type": "array" }, - "msg": { - "example": "OK", + "duration": { + "example": "16:00:00", + "type": "string" + }, + "start_time": { + "example": "11:00:00", "type": "string" } }, "type": "object" }, - "reverb.listingResponseDoc": { + "pizzahut.bundleChoicesResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/reverb.ListingResponse" + "$ref": "#/definitions/pizzahut.BundleChoicesResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "reverb.makesResponseDoc": { + "pizzahut.deliveryEstimateResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/reverb.MakesResponse" + "$ref": "#/definitions/pizzahut.DeliveryEstimateResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "reverb.priceGuideResponseDoc": { + "pizzahut.menuResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/reverb.PriceGuideResponse" + "$ref": "#/definitions/pizzahut.MenuResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "reverb.priceGuideSearchResponseDoc": { + "pizzahut.modifiersResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/reverb.PriceGuideSearchResponse" + "$ref": "#/definitions/pizzahut.ModifiersResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "reverb.searchResponseDoc": { + "pizzahut.storeResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/reverb.SearchResponse" + "$ref": "#/definitions/pizzahut.StoreResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "reverb.shopFeedbackResponseDoc": { + "pizzahut.storesResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/reverb.ShopFeedbackResponse" + "$ref": "#/definitions/pizzahut.StoresResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "reverb.shopResponseDoc": { + "playstation.AddOn": { "properties": { - "code": { - "example": 200, - "type": "integer" + "classification": { + "description": "Store classification of the add-on, for example `ADD_ON_PACK`.", + "type": "string" }, - "data": { - "$ref": "#/definitions/reverb.ShopResponse" + "name": { + "description": "Add-on name as shown on the PlayStation Store.", + "type": "string" }, - "msg": { - "example": "OK", + "price": { + "allOf": [ + { + "$ref": "#/definitions/playstation.DetailPrice" + } + ], + "description": "Purchase price of the add-on." + }, + "product_id": { + "description": "PlayStation Store product id of the add-on. Use it with the product endpoint.", "type": "string" } }, "type": "object" }, - "rightmove.AgentAffiliation": { + "playstation.CollectionLink": { "properties": { - "id": { - "example": 19, - "type": "integer" + "category_id": { + "type": "string" }, - "image_url": { + "link_type": { "type": "string" }, "name": { - "example": "Property Redress Scheme", "type": "string" } }, "type": "object" }, - "rightmove.AgentBranchResponse": { + "playstation.ConceptDetail": { "properties": { - "address": { - "example": "18 Pilgrimage Street,\nLondon Bridge,\nLondon,\nSE1 4LL", - "type": "string" + "add_ons": { + "description": "Downloadable add-ons, such as expansions or in-game currency, sold for the title.", + "items": { + "$ref": "#/definitions/playstation.AddOn" + }, + "type": "array" }, - "branch_name": { - "example": "London", - "type": "string" + "content_rating": { + "allOf": [ + { + "$ref": "#/definitions/playstation.ContentRating" + } + ], + "description": "Age rating of the title." }, - "brand_name": { - "example": "1 Ability Estate Agents", + "default_product_id": { + "description": "Product id of the title's default edition. Use it with the product endpoint.", "type": "string" }, - "build_to_rent": { - "type": "boolean" + "description": { + "description": "Long description of the title from its PlayStation Store page.", + "type": "string" }, - "commercial": { - "type": "boolean" + "editions": { + "description": "Purchasable game editions and bundles of the title.", + "items": { + "$ref": "#/definitions/playstation.Edition" + }, + "type": "array" }, - "company_id": { - "example": "4294", - "type": "string" + "genres": { + "description": "Genre names the title is filed under.", + "items": { + "type": "string" + }, + "type": "array" }, - "company_name": { - "example": "1st Avenue", + "id": { + "description": "PlayStation Store concept id, which groups every edition and add-on of a title.", "type": "string" }, - "description": { + "invariant_name": { + "description": "Language-independent name of the title.", "type": "string" }, - "development": { - "type": "boolean" - }, - "display_name": { - "example": "1 Ability Estate Agents, London", - "type": "string" + "media": { + "description": "Images and videos shown on the title's store page.", + "items": { + "$ref": "#/definitions/playstation.Media" + }, + "type": "array" }, - "id": { - "example": "181787", + "name": { + "description": "Title name as shown on the PlayStation Store.", "type": "string" }, - "industry_affiliations": { + "platforms": { + "description": "PlayStation platforms the title is available on, for example `PS4` or `PS5`.", "items": { - "$ref": "#/definitions/rightmove.AgentAffiliation" + "type": "string" }, "type": "array" }, - "latitude": { - "type": "number" + "price": { + "allOf": [ + { + "$ref": "#/definitions/playstation.DetailPrice" + } + ], + "description": "Purchase price of the title's default edition." }, - "lettings": { - "type": "boolean" + "publisher": { + "description": "Publisher of the title.", + "type": "string" }, - "lettings_properties": { - "$ref": "#/definitions/rightmove.AgentPropertyList" + "release_date": { + "description": "Release date of the title, in ISO 8601.", + "type": "string" }, - "lettings_telephone": { - "example": "020 3910 6304", + "source_url": { + "description": "PlayStation Store page the data was read from.", "type": "string" }, - "logo_url": { + "star_rating": { + "allOf": [ + { + "$ref": "#/definitions/playstation.StarRating" + } + ], + "description": "Aggregate user rating of the title." + } + }, + "type": "object" + }, + "playstation.ConceptReview": { + "properties": { + "author": { + "$ref": "#/definitions/playstation.ReviewAuthor" + }, + "comment": { "type": "string" }, - "longitude": { - "type": "number" + "edition_name": { + "type": "string" }, - "main_telephone": { - "example": "020 8293 8600", + "helpful_count": { + "type": "integer" + }, + "id": { "type": "string" }, - "overseas": { + "is_spoiler": { "type": "boolean" }, - "postcode": { - "example": "SE1 4LL", + "last_updated": { "type": "string" }, - "sales": { - "type": "boolean" + "product_name": { + "type": "string" }, - "sales_properties": { - "$ref": "#/definitions/rightmove.AgentPropertyList" + "rating": { + "type": "integer" }, - "sales_telephone": { - "example": "020 3909 6734", + "title": { "type": "string" } }, "type": "object" }, - "rightmove.AgentItem": { + "playstation.ConceptReviewsResponse": { "properties": { - "address": { - "example": "18 Pilgrimage Street,\nLondon Bridge,\nLondon,\nSE1 4LL", + "concept_id": { "type": "string" }, - "brand_name": { - "example": "1 Ability Estate Agents", - "type": "string" + "has_next_page": { + "type": "boolean" }, - "description": { + "name": { "type": "string" }, - "display_name": { - "example": "1 Ability Estate Agents, London", + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "rating": { + "type": "integer" + }, + "returned": { + "type": "integer" + }, + "reviews": { + "items": { + "$ref": "#/definitions/playstation.ConceptReview" + }, + "type": "array" + }, + "sort": { "type": "string" }, - "id": { - "example": "181787", + "source_url": { "type": "string" }, - "lettings": { - "type": "boolean" + "star_rating": { + "$ref": "#/definitions/playstation.StarRating" }, - "logo_url": { - "example": "https://media.rightmove.co.uk/partner-logo/19103090-LOGO-1765975389.png", + "total_count": { + "type": "integer" + } + }, + "type": "object" + }, + "playstation.ContentRating": { + "properties": { + "authority": { + "description": "Rating board that issued the rating, for example `ESRB`.", "type": "string" }, - "sales": { - "type": "boolean" + "description": { + "description": "Rating label in plain words, for example `ESRB Mature 17+`.", + "type": "string" }, - "telephones": { + "descriptors": { + "description": "Descriptors are the human-readable content/interactivity disclosures the\nrating carries (e.g. \"Blood\", \"Violence\", \"In-Game Purchases\", \"Users\nInteract\"), merged from the store's descriptors + interactiveElements lists.", "items": { - "$ref": "#/definitions/rightmove.AgentTelephone" + "type": "string" }, "type": "array" }, + "name": { + "description": "Rating identifier as the store gives it, for example `ESRB_MATURE_17`.", + "type": "string" + }, "url": { - "example": "https://www.rightmove.co.uk/estate-agents/agent/1-Ability-Estate-Agents/London-181787.html", + "description": "URL of the rating board's page for this rating.", "type": "string" } }, "type": "object" }, - "rightmove.AgentPropertyItem": { + "playstation.DetailPrice": { "properties": { - "address": { - "example": "West Parkside, London, SE10", + "applicability": { + "description": "How the price applies, for example `OUTRIGHT` for a one-time purchase.", "type": "string" }, - "bathrooms": { - "example": 2, - "type": "integer" + "base_price": { + "description": "Regular price as a formatted string, for example `$59.99`.", + "type": "string" }, - "bedrooms": { - "example": 2, + "base_price_value": { + "description": "Regular price in the smallest currency unit, for example cents for USD.", "type": "integer" }, - "channel": { - "example": "RES_LET", + "currency_code": { + "description": "Currency code of the price, for example `USD`.", "type": "string" }, - "id": { - "example": "92527095", + "discount_text": { + "description": "Discount label shown on the store, for example `-67%`.", "type": "string" }, - "image": { + "discounted_price": { + "description": "Current price after discount as a formatted string.", "type": "string" }, - "price": { - "example": 634, + "discounted_value": { + "description": "Current price after discount in the smallest currency unit, for example cents for USD.", "type": "integer" }, - "price_frequency": { - "example": "weekly", + "end_time": { + "description": "Time the offer ends, as the store gives it.", "type": "string" }, - "price_text": { - "example": "£634 pw", - "type": "string" + "is_exclusive": { + "description": "Whether the store marks the price as exclusive to a membership.", + "type": "boolean" }, - "property_type": { - "example": "Flat", - "type": "string" + "is_free": { + "description": "Whether the item is free.", + "type": "boolean" }, - "status": { - "example": "available", - "type": "string" + "is_tied_to_subscription": { + "description": "Whether the store marks the price as tied to a subscription.", + "type": "boolean" }, - "url": { - "example": "https://www.rightmove.co.uk/properties/92537946#/?channel=RES_LET", - "type": "string" - } - }, - "type": "object" - }, - "rightmove.AgentPropertyList": { - "properties": { - "properties": { + "service_branding": { + "description": "Names of the PlayStation services the price is tied to.", "items": { - "$ref": "#/definitions/rightmove.AgentPropertyItem" + "type": "string" }, "type": "array" }, - "total": { - "example": 37, - "type": "integer" + "upsell_text": { + "description": "Promotional text the store shows next to the price.", + "type": "string" } }, "type": "object" }, - "rightmove.AgentTelephone": { + "playstation.Edition": { "properties": { - "direct_number": { - "example": "020 3903 2323", + "classification": { + "description": "Store classification of the edition, for example `FULL_GAME`.", "type": "string" }, - "number": { - "example": "020 3910 6304", + "name": { + "description": "Edition name as shown on the PlayStation Store.", "type": "string" }, - "type": { - "example": "LETTING", + "platforms": { + "description": "PlayStation platforms the edition is available on.", + "items": { + "type": "string" + }, + "type": "array" + }, + "price": { + "allOf": [ + { + "$ref": "#/definitions/playstation.DetailPrice" + } + ], + "description": "Purchase price of the edition." + }, + "product_id": { + "description": "PlayStation Store product id of the edition. Use it with the product endpoint.", "type": "string" } }, "type": "object" }, - "rightmove.AgentsResponse": { + "playstation.Facet": { "properties": { - "location": { - "example": "REGION^87490", + "display_name": { + "description": "Filter name as shown on the store, for example `Price`.", "type": "string" }, - "page": { - "example": 1, - "type": "integer" + "name": { + "description": "Filter key, for example `webBasePrice`.", + "type": "string" }, - "results": { + "values": { + "description": "Selectable values of the filter.", "items": { - "$ref": "#/definitions/rightmove.AgentItem" + "$ref": "#/definitions/playstation.FacetValue" }, "type": "array" - }, - "total": { - "example": 3614, - "type": "integer" } }, "type": "object" }, - "rightmove.AutocompleteItem": { + "playstation.FacetValue": { "properties": { - "entity_type": { - "example": "REGION", - "type": "string" - }, - "full_name": { - "example": "London, Greater London, England", - "type": "string" + "count": { + "description": "Number of items matching this filter value.", + "type": "integer" }, - "id": { - "example": "REGION^12345", + "display_name": { + "description": "Filter value as shown on the store, for example `Free`.", "type": "string" }, - "name": { - "example": "London, Greater London", + "key": { + "description": "Value to select this filter option, for example `0-0`.", "type": "string" } }, "type": "object" }, - "rightmove.AutocompleteResponse": { + "playstation.GridResponse": { "properties": { - "query": { - "example": "London", + "count": { + "description": "Number of items returned on this page.", + "type": "integer" + }, + "facets": { + "description": "Filters available for the grid, each with its values and counts.", + "items": { + "$ref": "#/definitions/playstation.Facet" + }, + "type": "array" + }, + "id": { + "description": "PlayStation Store category id of the grid.", "type": "string" }, - "results": { + "items": { + "description": "Items on this page of the grid.", "items": { - "$ref": "#/definitions/rightmove.AutocompleteItem" + "$ref": "#/definitions/playstation.StoreItem" }, "type": "array" - } - }, - "type": "object" - }, - "rightmove.PropertyCustomerReviews": { - "properties": { - "average_score": { - "example": 4.5, - "type": "number" }, - "count": { - "example": 5, + "name": { + "description": "Category name as shown on the store, for example `All games`.", + "type": "string" + }, + "next_page": { + "description": "Number of the next page. Omitted on the last page.", "type": "integer" }, - "latest_review": { - "example": "Great property and excellent service from the agent.", + "page_info": { + "allOf": [ + { + "$ref": "#/definitions/playstation.PageInfo" + } + ], + "description": "Pagination details of the grid." + }, + "source_url": { + "description": "PlayStation Store page the data was read from.", "type": "string" } }, "type": "object" }, - "rightmove.PropertyItem": { + "playstation.ListPrice": { "properties": { - "added_or_reduced": { - "example": "Price reduced", + "base_price": { + "description": "Regular price as a formatted string, for example `$19.99`.", "type": "string" }, - "address": { - "example": "123 Example Street, London", + "discount_text": { + "description": "Discount label shown on the store, for example `-50%`.", "type": "string" }, - "bathrooms": { - "example": 2, - "type": "integer" - }, - "bedrooms": { - "example": 3, - "type": "integer" - }, - "currency": { - "example": "GBP", + "discounted_price": { + "description": "Current price after discount as a formatted string.", "type": "string" }, - "days_on_market": { - "example": 14, - "type": "integer" + "is_exclusive": { + "description": "Whether the store marks the price as exclusive to a membership.", + "type": "boolean" }, - "development": { - "example": true, + "is_free": { + "description": "Whether the item is free.", "type": "boolean" }, - "id": { - "example": "12345678", - "type": "string" + "is_tied_to_subscription": { + "description": "Whether the store marks the price as tied to a subscription.", + "type": "boolean" }, - "image": { - "example": "https://media.rightmove.co.uk/property-photo/.../12345678.jpg", - "type": "string" + "service_branding": { + "description": "Names of the PlayStation services the price is tied to.", + "items": { + "type": "string" + }, + "type": "array" }, - "price": { - "example": 500000, - "type": "integer" + "upsell_service_branding": { + "description": "Names of the PlayStation services the upsell offer refers to.", + "items": { + "type": "string" + }, + "type": "array" }, - "price_frequency": { - "example": "monthly", + "upsell_text": { + "description": "Promotional text the store shows next to the price.", "type": "string" - }, - "price_text": { - "example": "£500,000", + } + }, + "type": "object" + }, + "playstation.Media": { + "properties": { + "role": { + "description": "Role of the asset on the store page, as the store labels it.", "type": "string" }, - "property_type": { - "example": "Semi-detached", + "type": { + "description": "Kind of asset, such as an image or a video.", "type": "string" }, - "receptions": { - "example": 2, - "type": "integer" - }, - "size": { - "example": "538 sq. ft.", + "url": { + "description": "URL of the image or video.", "type": "string" + } + }, + "type": "object" + }, + "playstation.MerchResponse": { + "properties": { + "collections": { + "items": { + "$ref": "#/definitions/playstation.CollectionLink" + }, + "type": "array" }, - "status": { - "example": "For Sale", - "type": "string" + "count": { + "type": "integer" }, - "tenure": { - "example": "LEASEHOLD", - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/playstation.StoreItem" + }, + "type": "array" }, - "title": { - "example": "3 bedroom semi-detached house for sale", - "type": "string" + "sections": { + "items": { + "$ref": "#/definitions/playstation.Section" + }, + "type": "array" }, - "url": { - "example": "https://www.rightmove.co.uk/properties/12345678", + "source_url": { "type": "string" } }, "type": "object" }, - "rightmove.PropertyResponse": { + "playstation.PageInfo": { "properties": { - "added_or_reduced": { - "example": "Price reduced", - "type": "string" - }, - "address": { - "example": "123 Example Street, London", - "type": "string" - }, - "available_from": { - "type": "string" + "is_last": { + "description": "Whether this is the last page of results.", + "type": "boolean" }, - "bathrooms": { - "example": 2, + "offset": { + "description": "Position of the first item on this page within all results.", "type": "integer" }, - "bedrooms": { - "example": 3, + "size": { + "description": "Number of items per page.", "type": "integer" }, - "council_tax_band": { - "type": "string" - }, - "currency": { - "example": "GBP", - "type": "string" - }, - "customer_reviews": { - "$ref": "#/definitions/rightmove.PropertyCustomerReviews" - }, - "days_on_market": { - "example": 14, + "total_count": { + "description": "Total number of results across all pages.", "type": "integer" + } + }, + "type": "object" + }, + "playstation.ProductDetail": { + "properties": { + "classification": { + "type": "string" }, - "description": { + "concept_id": { "type": "string" }, - "development": { - "example": true, - "type": "boolean" + "content_rating": { + "$ref": "#/definitions/playstation.ContentRating" }, - "epc_rating": { + "edition_name": { "type": "string" }, - "features": { + "genres": { "items": { "type": "string" }, "type": "array" }, - "floor_plan": { + "id": { "type": "string" }, - "id": { - "example": "12345678", + "media": { + "items": { + "$ref": "#/definitions/playstation.Media" + }, + "type": "array" + }, + "name": { "type": "string" }, - "image": { - "example": "https://media.rightmove.co.uk/property-photo/.../12345678.jpg", + "np_title_id": { "type": "string" }, - "nearby_schools": { + "platforms": { "items": { - "$ref": "#/definitions/rightmove.PropertySchool" + "type": "string" }, "type": "array" }, "price": { - "example": 500000, - "type": "integer" - }, - "price_frequency": { - "example": "monthly", - "type": "string" + "$ref": "#/definitions/playstation.DetailPrice" }, - "price_text": { - "example": "£500,000", + "publisher": { "type": "string" }, - "property_type": { - "example": "Semi-detached", + "release_date": { "type": "string" }, - "receptions": { - "example": 2, - "type": "integer" - }, - "size": { - "example": "538 sq. ft.", - "type": "string" + "screen_languages": { + "items": { + "type": "string" + }, + "type": "array" }, - "status": { - "example": "For Sale", + "source_url": { "type": "string" }, - "tenure": { - "type": "string" + "spoken_languages": { + "items": { + "type": "string" + }, + "type": "array" }, - "title": { - "example": "3 bedroom semi-detached house for sale", - "type": "string" + "star_rating": { + "$ref": "#/definitions/playstation.StarRating" }, - "url": { - "example": "https://www.rightmove.co.uk/properties/12345678", + "type": { "type": "string" } }, "type": "object" }, - "rightmove.PropertySchool": { + "playstation.ReviewAuthor": { "properties": { - "distance": { - "example": "0.2 miles", + "avatar_url": { "type": "string" }, - "name": { - "example": "St. Mary's Primary School", - "type": "string" + "is_officially_verified": { + "type": "boolean" }, - "rating": { - "example": "Outstanding", - "type": "string" + "is_ps_plus_subscriber": { + "type": "boolean" }, - "type": { - "example": "Primary", + "online_id": { "type": "string" } }, "type": "object" }, - "rightmove.SearchResponse": { + "playstation.SearchResponse": { "properties": { - "location": { - "example": "REGION^87490", - "type": "string" - }, - "page": { - "example": 1, + "count": { + "description": "Number of items returned on this page.", "type": "integer" }, - "results": { + "items": { + "description": "Search results on this page.", "items": { - "$ref": "#/definitions/rightmove.PropertyItem" + "$ref": "#/definitions/playstation.StoreItem" }, "type": "array" }, - "total": { - "example": 1245, + "next_page": { + "description": "Number of the next page. Omitted on the last page.", "type": "integer" + }, + "page_info": { + "allOf": [ + { + "$ref": "#/definitions/playstation.PageInfo" + } + ], + "description": "Pagination details of the results." + }, + "source_url": { + "description": "PlayStation Store page the data was read from.", + "type": "string" + }, + "term": { + "description": "Search term that was run.", + "type": "string" } }, "type": "object" }, - "rnz.AuthorArticle": { + "playstation.Section": { "properties": { - "image_url": { - "type": "string" - }, - "published_label": { - "description": "PublishedLabel is the card's own date label as RNZ prints it\n(\"8:58 am today\", \"23 Sep 2026\"); the listing carries no machine\ntimestamp.", - "type": "string" + "count": { + "type": "integer" }, - "summary": { + "id": { "type": "string" }, - "title": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/playstation.StoreItem" + }, + "type": "array" }, - "url": { + "name": { "type": "string" } }, "type": "object" }, - "rnz.AuthorResponse": { + "playstation.StarRating": { "properties": { - "article_count": { - "description": "ArticleCount is the total number of news stories RNZ lists for the\nauthor (\"Displaying items 1 - 25 of N\"); Articles holds only the first\npage.", + "average": { + "description": "Average user rating out of 5.", + "type": "number" + }, + "count": { + "description": "Number of user ratings.", "type": "integer" }, - "articles": { + "distribution": { + "description": "Share of ratings at each star value, from 1 to 5.", "items": { - "$ref": "#/definitions/rnz.AuthorArticle" + "$ref": "#/definitions/playstation.StarRatingCount" }, "type": "array" + } + }, + "type": "object" + }, + "playstation.StarRatingCount": { + "properties": { + "percent": { + "description": "Percentage of ratings that gave this star value.", + "type": "integer" }, - "bio": { + "stars": { + "description": "Star value, from 1 to 5.", + "type": "integer" + } + }, + "type": "object" + }, + "playstation.StoreItem": { + "properties": { + "classification": { + "description": "Store classification of the item, for example `FULL_GAME`.", "type": "string" }, - "email": { + "id": { + "description": "PlayStation Store id of the item. Use it with the concept endpoint when `kind` is `concept`, or with the product endpoint when it is `product`.", "type": "string" }, - "image_url": { + "kind": { + "description": "Type of store entry: `concept` or `product`.", "type": "string" }, - "job_title": { - "type": "string" + "media": { + "description": "Images and videos for the item.", + "items": { + "$ref": "#/definitions/playstation.Media" + }, + "type": "array" }, "name": { + "description": "Item name as shown on the PlayStation Store.", "type": "string" }, - "slug": { + "np_title_id": { + "description": "PlayStation title id of the item, for example `CUSA07408_00`.", "type": "string" }, - "twitter": { - "type": "string" + "platforms": { + "description": "PlayStation platforms the item is available on.", + "items": { + "type": "string" + }, + "type": "array" }, - "url": { - "type": "string" + "price": { + "allOf": [ + { + "$ref": "#/definitions/playstation.ListPrice" + } + ], + "description": "Price of the item." } }, "type": "object" }, - "roblox.Badge": { + "playstation.SuggestItem": { "properties": { - "awarding_root_place_id": { - "type": "integer" - }, - "awarding_universe": { + "classification": { "type": "string" }, - "awarding_universe_id": { - "type": "integer" - }, - "awards_all_time": { - "type": "integer" + "id": { + "type": "string" }, - "awards_past_day": { - "type": "integer" + "image": { + "$ref": "#/definitions/playstation.Media" }, - "created_at": { + "name": { "type": "string" }, - "description": { - "type": "string" + "platforms": { + "items": { + "type": "string" + }, + "type": "array" }, - "enabled": { - "type": "boolean" + "price": { + "$ref": "#/definitions/playstation.SuggestPrice" }, - "icon_url": { + "publisher": { "type": "string" }, - "id": { - "type": "integer" + "release_date": { + "type": "string" }, - "name": { + "short_name": { "type": "string" }, - "updated_at": { + "store_url": { "type": "string" } }, "type": "object" }, - "roblox.BadgesResponse": { + "playstation.SuggestPrice": { "properties": { - "badges": { + "display": { + "type": "string" + }, + "value": { + "type": "integer" + } + }, + "type": "object" + }, + "playstation.SuggestResponse": { + "properties": { + "cc": { + "type": "string" + }, + "items": { "items": { - "$ref": "#/definitions/roblox.Badge" + "$ref": "#/definitions/playstation.SuggestItem" }, "type": "array" }, - "next_cursor": { + "l": { "type": "string" }, - "previous_cursor": { + "source_url": { "type": "string" }, - "universe_id": { + "term": { + "type": "string" + }, + "total": { "type": "integer" } }, "type": "object" }, - "roblox.Creator": { + "playstation.conceptResponseDoc": { "properties": { - "id": { + "code": { + "example": 200, "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/playstation.ConceptDetail" }, - "type": { + "msg": { + "example": "OK", "type": "string" - }, - "verified": { - "type": "boolean" } }, "type": "object" }, - "roblox.Experience": { + "playstation.conceptReviewsResponseDoc": { "properties": { - "creator_id": { + "code": { + "example": 200, "type": "integer" }, - "creator_name": { - "type": "string" + "data": { + "$ref": "#/definitions/playstation.ConceptReviewsResponse" }, - "description": { + "msg": { + "example": "OK", "type": "string" - }, - "down_votes": { + } + }, + "type": "object" + }, + "playstation.gridResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "genre": { - "type": "string" - }, - "is_sponsored": { - "type": "boolean" - }, - "maturity": { - "type": "string" + "data": { + "$ref": "#/definitions/playstation.GridResponse" }, - "maturity_label": { + "msg": { + "example": "OK", "type": "string" - }, - "minimum_age": { + } + }, + "type": "object" + }, + "playstation.merchResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/playstation.MerchResponse" }, - "player_count": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "playstation.productResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "root_place_id": { - "type": "integer" + "data": { + "$ref": "#/definitions/playstation.ProductDetail" }, - "universe_id": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "playstation.searchResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "up_votes": { - "type": "integer" + "data": { + "$ref": "#/definitions/playstation.SearchResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" - }, - "verified_creator": { - "type": "boolean" } }, "type": "object" }, - "roblox.Game": { + "playstation.suggestResponseDoc": { "properties": { - "access_price": { + "code": { + "example": 200, "type": "integer" }, - "avatar_type": { + "data": { + "$ref": "#/definitions/playstation.SuggestResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "politico.ArticleResponse": { + "properties": { + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "content_restricted": { - "type": "boolean" + "description": { + "type": "string" }, - "created_at": { + "image_url": { "type": "string" }, - "creator": { - "$ref": "#/definitions/roblox.Creator" + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" }, - "description": { + "published_at": { "type": "string" }, - "down_votes": { - "type": "integer" + "title": { + "type": "string" }, - "favorites": { - "type": "integer" + "updated_at": { + "type": "string" }, - "genre": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "politico.AuthorArticle": { + "properties": { + "published_at": { "type": "string" }, - "genre_l1": { + "title": { "type": "string" }, - "genre_l2": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "politico.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/politico.AuthorArticle" + }, + "type": "array" + }, + "bio": { "type": "string" }, "image_url": { "type": "string" }, - "max_players": { - "type": "integer" + "job_title": { + "type": "string" }, "name": { "type": "string" }, - "playing": { - "type": "integer" + "slug": { + "type": "string" }, - "root_place_id": { - "type": "integer" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "politico.CategoriesResponse": { + "properties": { + "groups": { + "items": { + "$ref": "#/definitions/politico.CategoryGroup" + }, + "type": "array" + } + }, + "type": "object" + }, + "politico.Category": { + "properties": { + "name": { + "type": "string" }, - "universe_id": { - "type": "integer" + "slug": { + "type": "string" + } + }, + "type": "object" + }, + "politico.CategoryGroup": { + "properties": { + "name": { + "type": "string" }, - "up_votes": { - "type": "integer" + "sections": { + "items": { + "$ref": "#/definitions/politico.Category" + }, + "type": "array" + } + }, + "type": "object" + }, + "politico.HeadlineItem": { + "properties": { + "author": { + "type": "string" }, - "updated_at": { + "published_at": { "type": "string" }, - "url": { + "summary": { "type": "string" }, - "visits": { - "type": "integer" + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "roblox.GameResponse": { + "politico.HeadlinesResponse": { "properties": { - "game": { - "$ref": "#/definitions/roblox.Game" + "items": { + "items": { + "$ref": "#/definitions/politico.HeadlineItem" + }, + "type": "array" } }, "type": "object" }, - "roblox.RankingsResponse": { + "politico.TopicItem": { "properties": { - "display_name": { - "type": "string" - }, - "experiences": { + "authors": { "items": { - "$ref": "#/definitions/roblox.Experience" + "type": "string" }, "type": "array" }, - "sort_id": { + "published_at": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "roblox.SearchResponse": { + "politico.TopicResponse": { "properties": { - "experiences": { + "items": { "items": { - "$ref": "#/definitions/roblox.Experience" + "$ref": "#/definitions/politico.TopicItem" }, "type": "array" }, - "next_page": { + "topic": { "type": "string" + } + }, + "type": "object" + }, + "politico.articleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "query": { + "data": { + "$ref": "#/definitions/politico.ArticleResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "roblox.badgesResponseDoc": { + "politico.authorResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/roblox.BadgesResponse" + "$ref": "#/definitions/politico.AuthorResponse" }, "msg": { "example": "OK", @@ -182080,14 +190723,14 @@ }, "type": "object" }, - "roblox.gameResponseDoc": { + "politico.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/roblox.GameResponse" + "$ref": "#/definitions/politico.CategoriesResponse" }, "msg": { "example": "OK", @@ -182096,14 +190739,14 @@ }, "type": "object" }, - "roblox.rankingsResponseDoc": { + "politico.headlinesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/roblox.RankingsResponse" + "$ref": "#/definitions/politico.HeadlinesResponse" }, "msg": { "example": "OK", @@ -182112,14 +190755,14 @@ }, "type": "object" }, - "roblox.searchResponseDoc": { + "politico.topicResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/roblox.SearchResponse" + "$ref": "#/definitions/politico.TopicResponse" }, "msg": { "example": "OK", @@ -182128,24 +190771,30 @@ }, "type": "object" }, - "rollingstone.AuthorResponse": { + "polygon.AuthorResponse": { "properties": { "articles": { "items": { - "$ref": "#/definitions/rollingstone.HeadlineItem" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "bio": { + "biography": { "type": "string" }, "image_url": { "type": "string" }, - "job_title": { + "name": { "type": "string" }, - "name": { + "social_links": { + "items": { + "$ref": "#/definitions/polygon.AuthorSocialLink" + }, + "type": "array" + }, + "title": { "type": "string" }, "url": { @@ -182154,2281 +190803,2247 @@ }, "type": "object" }, - "rollingstone.HeadlineItem": { + "polygon.AuthorSocialLink": { "properties": { - "author": { + "type": { "type": "string" }, - "image_url": { + "url": { "type": "string" - }, - "published_at": { + } + }, + "type": "object" + }, + "polymarket.ActivityTradesResponse": { + "properties": { + "event_id": { + "description": "Polymarket event id the trades were limited to.", + "example": "101772", "type": "string" }, - "summary": { + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "title": { + "filter_amount": { + "description": "Minimum trade amount the filter applied.", + "example": "1", "type": "string" }, - "type": { + "filter_type": { + "description": "Type of amount filter applied, for example `CASH`.", + "example": "CASH", "type": "string" }, - "url": { + "limit": { + "description": "Maximum number of trades requested.", + "example": 50, + "type": "integer" + }, + "market": { + "description": "Market condition id the trades were limited to.", + "example": "0x3f2604d62ac3ee496ffd6d30156f30663fbaf22097f17f09d7364c35db255d2b", "type": "string" - } - }, - "type": "object" - }, - "rottentomatoes.BrowseFilter": { - "properties": { - "key": { - "example": "genres", + }, + "offset": { + "description": "Number of trades skipped before this page.", + "example": 0, + "type": "integer" + }, + "source_url": { + "description": "URL the data was read from.", + "example": "https://data-api.polymarket.com/trades?takerOnly=true&limit=50&offset=0&filterType=CASH&filterAmount=1", "type": "string" }, - "label": { - "example": "Genre", + "taker_only": { + "description": "`true` when only taker trades are returned, `false` otherwise.", + "example": "true", "type": "string" }, - "values": { + "trades": { + "description": "Recent trades on this page, one item per trade.", "items": { - "$ref": "#/definitions/rottentomatoes.BrowseFilterValue" + "$ref": "#/definitions/polymarket.TradeSummary" }, "type": "array" } }, "type": "object" }, - "rottentomatoes.BrowseFilterValue": { + "polymarket.BatchTokenMidpoint": { "properties": { - "label": { - "example": "Action", - "type": "string" + "midpoint": { + "description": "Midpoint between the best bid and best ask for the token.", + "example": 0.285, + "type": "number" }, - "value": { - "example": "action", + "token_id": { + "description": "Token id of the outcome.", + "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", "type": "string" } }, "type": "object" }, - "rottentomatoes.BrowseFiltersResponse": { + "polymarket.BatchTokenMidpointsOption": { + "properties": { + "token_ids": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "token_ids" + ], + "type": "object" + }, + "polymarket.BatchTokenMidpointsResponse": { "properties": { "fetched_at": { - "example": "2026-09-26T10:00:00Z", + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "filters": { + "midpoints": { + "description": "Midpoints for the requested tokens, one item per token found.", "items": { - "$ref": "#/definitions/rottentomatoes.BrowseFilter" + "$ref": "#/definitions/polymarket.BatchTokenMidpoint" }, "type": "array" }, - "list": { - "example": "movies_in_theaters", - "type": "string" - }, - "public_page_derived": { - "example": true, - "type": "boolean" + "missing": { + "description": "Requested token ids for which no midpoint was returned.", + "items": { + "type": "string" + }, + "type": "array" }, "source_url": { - "example": "https://www.rottentomatoes.com/browse/movies_in_theaters/sort:popular", + "description": "URL the data was read from.", + "example": "https://clob.polymarket.com/midpoints", "type": "string" + }, + "token_ids": { + "description": "Token ids that were requested.", + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "rottentomatoes.BrowseItem": { + "polymarket.BatchTokenOrderBooksOption": { "properties": { - "critics_review_count": { - "description": "Number of critic reviews behind the Tomatometer score.", - "example": 136, - "type": "integer" + "token_ids": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "token_ids" + ], + "type": "object" + }, + "polymarket.BatchTokenOrderBooksResponse": { + "properties": { + "books": { + "description": "Order books for the requested tokens, one item per token found.", + "items": { + "$ref": "#/definitions/polymarket.OrderBookSummary" + }, + "type": "array" }, - "date_created": { - "description": "Release date text shown on the browse card, such as `2026`.", - "example": "2026", + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "image_url": { - "description": "URL of the poster image.", - "type": "string" + "missing": { + "description": "Requested token ids for which no order book was returned.", + "items": { + "type": "string" + }, + "type": "array" }, - "media_type": { - "description": "Kind of title, such as `Movie`.", - "example": "Movie", + "source_url": { + "description": "URL the data was read from.", + "example": "https://clob.polymarket.com/books", "type": "string" }, - "path": { - "description": "Rotten Tomatoes path of the title page, such as `/m/wildwood_nj`.", - "example": "/m/wildwood_nj", - "type": "string" + "token_ids": { + "description": "Token ids that were requested.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "polymarket.BatchTokenPrice": { + "properties": { + "buy_price": { + "example": 0.03, + "type": "number" }, - "position": { - "description": "Position of the title in the returned list, starting at 1.", - "example": 1, - "type": "integer" + "sell_price": { + "example": 0.54, + "type": "number" }, - "title": { - "description": "Title name as shown on the browse card.", - "example": "Wildwood, NJ", + "token_id": { + "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", "type": "string" - }, - "tomatometer_score": { - "description": "Tomatometer critics score, as a percentage.", - "example": 87, - "type": "integer" - }, - "url": { - "description": "Rotten Tomatoes page URL of the title.", - "example": "https://www.rottentomatoes.com/m/wildwood_nj", + } + }, + "type": "object" + }, + "polymarket.BatchTokenPricesOption": { + "properties": { + "side": { "type": "string" }, - "video": { - "allOf": [ - { - "$ref": "#/definitions/rottentomatoes.EpisodeVideo" - } - ], - "description": "Featured video of the title, when Rotten Tomatoes provides one." + "token_ids": { + "items": { + "type": "string" + }, + "type": "array" } }, + "required": [ + "token_ids" + ], "type": "object" }, - "rottentomatoes.BrowseResponse": { + "polymarket.BatchTokenPricesResponse": { "properties": { "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:46:16Z", + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "items": { - "description": "Titles on this page of the browse list.", + "missing": { "items": { - "$ref": "#/definitions/rottentomatoes.BrowseItem" + "type": "string" }, "type": "array" }, - "limit": { - "description": "Maximum number of rows requested.", - "example": 10, - "type": "integer" - }, - "list": { - "description": "Browse list that was returned, such as `movies_in_theaters`.", - "example": "movies_in_theaters", - "type": "string" - }, - "page_info": { - "allOf": [ - { - "$ref": "#/definitions/rottentomatoes.ReviewPageInfo" - } - ], - "description": "Paging information. Pass `end_cursor` as `after` to get the next page." - }, - "public_page_derived": { - "description": "Always `true`: the data comes from publicly visible Rotten Tomatoes pages.", - "example": true, - "type": "boolean" + "prices": { + "items": { + "$ref": "#/definitions/polymarket.BatchTokenPrice" + }, + "type": "array" }, - "sort": { - "description": "Sort order applied to the list, such as `popular`.", - "example": "popular", + "side": { + "example": "buy", "type": "string" }, "source_url": { - "description": "URL the data was read from.", - "example": "https://www.rottentomatoes.com/browse/movies_in_theaters/sort:popular", + "example": "https://clob.polymarket.com/prices", "type": "string" }, - "title": { - "description": "Title of the browse list, as Rotten Tomatoes shows it.", - "example": "Movies in Theaters (2026)", + "token_ids": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "polymarket.BatchTokenSpread": { + "properties": { + "spread": { + "description": "Spread between the best bid and best ask for the token.", + "example": 0.51, + "type": "number" + }, + "token_id": { + "description": "Token id of the outcome.", + "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", "type": "string" } }, "type": "object" }, - "rottentomatoes.CriticAuthor": { + "polymarket.BatchTokenSpreadsOption": { "properties": { - "badges": { - "example": [ - "Individually approved" - ], + "token_ids": { "items": { "type": "string" }, "type": "array" - }, - "name": { - "example": "Mae Abdulbaki", + } + }, + "required": [ + "token_ids" + ], + "type": "object" + }, + "polymarket.BatchTokenSpreadsResponse": { + "properties": { + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "path": { - "example": "/critics/mae-abdulbaki", - "type": "string" + "missing": { + "description": "Requested token ids for which no spread was returned.", + "items": { + "type": "string" + }, + "type": "array" }, - "publication_label": { - "example": "when published by", + "source_url": { + "description": "URL the data was read from.", + "example": "https://clob.polymarket.com/spreads", "type": "string" }, - "publications": { + "spreads": { + "description": "Spreads for the requested tokens, one item per token found.", "items": { - "$ref": "#/definitions/rottentomatoes.CriticAuthorPublication" + "$ref": "#/definitions/polymarket.BatchTokenSpread" + }, + "type": "array" + }, + "token_ids": { + "description": "Token ids that were requested.", + "items": { + "type": "string" }, "type": "array" } }, "type": "object" }, - "rottentomatoes.CriticAuthorPublication": { + "polymarket.ClobMarketResponse": { "properties": { - "editorial_url": { - "example": "https://example.com/reviews", + "condition_id": { + "description": "Condition id of the market that was requested.", + "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", "type": "string" }, - "id": { - "example": "2784", + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "name": { - "example": "Firstpost", - "type": "string" + "market": { + "allOf": [ + { + "$ref": "#/definitions/polymarket.ClobMarketSummary" + } + ], + "description": "Order-book trading details of the market." }, - "path": { - "example": "/critics/source/2784", + "source_url": { + "description": "URL the data was read from.", + "example": "https://clob.polymarket.com/markets/0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", "type": "string" } }, "type": "object" }, - "rottentomatoes.CriticsAuthorsResponse": { + "polymarket.ClobMarketSummary": { "properties": { - "after": { - "example": "", - "type": "string" - }, - "authors": { - "items": { - "$ref": "#/definitions/rottentomatoes.CriticAuthor" - }, - "type": "array" - }, - "before": { - "example": "", - "type": "string" - }, - "fetched_at": { - "example": "2026-09-26T10:00:00Z", + "accepting_order_timestamp": { + "description": "Timestamp from which the market accepts orders.", "type": "string" }, - "has_next_page": { - "example": true, + "accepting_orders": { + "description": "`true` when the market currently accepts orders.", "type": "boolean" }, - "has_previous_page": { - "example": false, + "active": { + "description": "`true` when the market is active.", "type": "boolean" }, - "inactive": { - "example": false, + "archived": { + "description": "`true` when the market is archived.", "type": "boolean" }, - "letter": { - "example": "a", - "type": "string" - }, - "limit": { - "example": 100, - "type": "integer" + "closed": { + "description": "`true` when the market is closed.", + "type": "boolean" }, - "next_cursor": { - "example": "MQ==", + "condition_id": { + "description": "Condition id that identifies the market on Polymarket.", + "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", "type": "string" }, - "previous_cursor": { - "example": "MA==", + "description": { + "description": "Market description, including its resolution rules as Polymarket shows them.", "type": "string" }, - "public_page_derived": { - "example": true, + "enable_order_book": { + "description": "`true` when the order book is enabled for the market.", "type": "boolean" }, - "search": { - "example": "", + "end_date": { + "description": "Date and time the market is scheduled to end (ISO 8601).", + "example": "2026-06-08T00:00:00Z", "type": "string" }, - "source_url": { - "example": "https://www.rottentomatoes.com/napi/critics/authors?isInactiveCriticsList=false&letter=a&pageCount=100&userToken=null", + "game_start_time": { + "description": "Start time of the game the market is about (ISO 8601). Omitted when not provided.", + "example": "2026-06-07T20:30:00Z", "type": "string" - } - }, - "type": "object" - }, - "rottentomatoes.EditorialContentItem": { - "properties": { - "author_id": { - "example": 944, - "type": "integer" }, - "excerpt": { - "example": "A ranked guide to essential 21st century biopics.", + "icon_url": { + "description": "URL of the market's icon image.", "type": "string" }, - "featured_media_id": { - "example": 297622, - "type": "integer" + "image_url": { + "description": "URL of the market's main image.", + "type": "string" }, - "id": { - "example": 297618, + "is_50_50_outcome": { + "description": "`true` when the market is flagged as resolving 50-50.", + "type": "boolean" + }, + "maker_base_fee": { + "description": "Base fee charged to makers on the market.", + "example": 1000, "type": "integer" }, - "modified_at": { - "example": "2026-09-25T09:04:07", + "market_slug": { + "description": "URL slug of the market.", + "example": "codmw-par-tex-2026-06-07-game4", "type": "string" }, - "published_at": { - "example": "2026-09-25T09:04:07", + "market_url": { + "description": "Link to the market on polymarket.com.", + "example": "https://polymarket.com/event/codmw-par-tex-2026-06-07/codmw-par-tex-2026-06-07-game4", "type": "string" }, - "term_ids": { - "example": [ - 121877, - 121876 - ], - "items": { - "type": "integer" - }, - "type": "array" + "minimum_order_size": { + "description": "Smallest order size the market accepts.", + "example": 5, + "type": "number" }, - "title": { - "example": "Essential 21st Century Biopics Ranked", - "type": "string" + "minimum_tick_size": { + "description": "Smallest price increment the market accepts.", + "example": 0.01, + "type": "number" }, - "type": { - "enum": [ - "article", - "guide", - "gallery", - "hub-subpage", - "non-rt-publication", - "rt-hub", - "how-to", - "otg-article", - "prev", - "rt_poll", - "page" - ], - "example": "guide", - "type": "string" + "neg_risk": { + "description": "`true` when the market is part of a negative-risk group of linked outcomes.", + "type": "boolean" }, - "url": { - "example": "https://editorial.rottentomatoes.com/guide/essential-21st-century-biopic-movies/", + "neg_risk_market_id": { + "description": "Id of the negative-risk group the market belongs to.", "type": "string" - } - }, - "type": "object" - }, - "rottentomatoes.EditorialContentResponse": { - "properties": { - "fetched_at": { - "example": "2026-09-26T10:00:00Z", + }, + "neg_risk_request_id": { + "description": "Request id of the negative-risk group the market belongs to.", "type": "string" }, - "has_next_page": { - "example": true, + "notifications_enabled": { + "description": "`true` when notifications are enabled for the market.", "type": "boolean" }, - "limit": { - "example": 20, - "type": "integer" + "question": { + "description": "Question the market asks.", + "example": "Call of Duty: Paris Gentle Mates vs OpTic Texas - Game 4 Winner", + "type": "string" }, - "operator": { - "enum": [ - "AND", - "OR" - ], - "example": "OR", + "question_id": { + "description": "Id of the question the market resolves.", + "example": "0xf693b08c99a00ca87098bc122ccc956434c2ac8720d8ed77e612d008cf33c2c1", "type": "string" }, - "page": { + "rewards": { + "allOf": [ + { + "$ref": "#/definitions/polymarket.ClobRewardsSummary" + } + ], + "description": "Liquidity reward settings for the market." + }, + "seconds_delay": { + "description": "Delay applied to orders on the market, in seconds.", "example": 1, "type": "integer" }, - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "query": { - "example": "horror", - "type": "string" - }, - "results": { + "tags": { + "description": "Tag labels attached to the market.", "items": { - "$ref": "#/definitions/rottentomatoes.EditorialContentItem" + "type": "string" }, "type": "array" }, - "source_url": { - "example": "https://editorial.rottentomatoes.com/wp-json/wp/v2/guide?page=1&per_page=20", - "type": "string" - }, - "taxonomy": { - "enum": [ - "categories", - "tags", - "related-movie-id", - "related-tv-season-id", - "related-tv-series-id", - "related-tv-episode-id", - "related-celebrity-id", - "publication", - "franchise", - "coauthors" - ], - "example": "related-movie-id", - "type": "string" + "taker_base_fee": { + "description": "Base fee charged to takers on the market.", + "example": 1000, + "type": "integer" }, - "term_ids": { - "example": [ - 121877, - 121876 - ], + "tokens": { + "description": "Outcome tokens of the market, one item per outcome.", "items": { - "type": "integer" + "$ref": "#/definitions/polymarket.ClobTokenSummary" }, "type": "array" - }, - "total": { - "example": 1194, - "type": "integer" - }, - "total_pages": { - "example": 60, - "type": "integer" - }, - "type": { - "enum": [ - "article", - "guide", - "gallery", - "hub-subpage", - "non-rt-publication", - "rt-hub", - "how-to", - "otg-article", - "prev", - "rt_poll", - "pages" - ], - "example": "guide", - "type": "string" } }, "type": "object" }, - "rottentomatoes.EditorialContentType": { + "polymarket.ClobRewardRate": { "properties": { - "label": { - "example": "Guides", + "asset_address": { + "description": "Contract address of the token paid out as the reward.", + "example": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", "type": "string" }, - "value": { - "enum": [ - "article", - "guide", - "gallery", - "hub-subpage", - "non-rt-publication", - "rt-hub", - "how-to", - "otg-article", - "prev", - "rt_poll", - "pages" - ], - "example": "guide", - "type": "string" + "rewards_daily_rate": { + "description": "Reward amount paid per day in this asset.", + "example": 5, + "type": "number" } }, "type": "object" }, - "rottentomatoes.EditorialContentTypesResponse": { + "polymarket.ClobRewardsSummary": { "properties": { - "public_page_derived": { - "example": true, - "type": "boolean" + "max_spread": { + "description": "Maximum spread an order can have and still qualify for rewards.", + "example": 2.5, + "type": "number" }, - "source_url": { - "example": "https://editorial.rottentomatoes.com/wp-json/wp/v2/types", - "type": "string" + "min_size": { + "description": "Minimum order size that qualifies for rewards.", + "example": 500, + "type": "number" }, - "types": { + "rates": { + "description": "Daily reward rates, one item per reward asset.", "items": { - "$ref": "#/definitions/rottentomatoes.EditorialContentType" + "$ref": "#/definitions/polymarket.ClobRewardRate" }, "type": "array" - }, - "verified_at": { - "example": "2026-09-26", - "type": "string" } }, "type": "object" }, - "rottentomatoes.EditorialDetailLink": { + "polymarket.ClobTokenSummary": { "properties": { - "text": { + "outcome": { + "description": "Name of the outcome the token represents.", + "example": "Paris Gentle Mates", "type": "string" }, - "url": { + "price": { + "description": "Current price of the outcome token.", + "example": 0.285, + "type": "number" + }, + "token_id": { + "description": "Token id of the outcome.", + "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", "type": "string" + }, + "winner": { + "description": "`true` when this outcome won the resolved market.", + "type": "boolean" } }, "type": "object" }, - "rottentomatoes.EditorialDetailResponse": { + "polymarket.EventDetailResponse": { "properties": { - "body_html": { - "type": "string" + "event": { + "allOf": [ + { + "$ref": "#/definitions/polymarket.EventSummary" + } + ], + "description": "Full details of the event." }, "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "headings": { - "items": { - "type": "string" - }, - "type": "array" + "slug": { + "description": "URL slug of the event that was requested.", + "example": "world-cup-winner", + "type": "string" }, - "image_url": { + "source_url": { + "description": "URL the data was read from.", + "example": "https://gamma-api.polymarket.com/events/slug/world-cup-winner", "type": "string" + } + }, + "type": "object" + }, + "polymarket.EventSummary": { + "properties": { + "active": { + "description": "`true` when the event is active.", + "type": "boolean" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" + "closed": { + "description": "`true` when the event is closed.", + "type": "boolean" }, - "links": { - "items": { - "$ref": "#/definitions/rottentomatoes.EditorialDetailLink" - }, - "type": "array" + "comment_count": { + "description": "Number of comments on the event.", + "type": "integer" }, - "modified_at": { + "description": { + "description": "Event description as shown on Polymarket.", "type": "string" }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" - }, - "path": { - "example": "/guide/all-brad-pitt-movies-ranked-by-tomatometer/", + "end_date": { + "description": "Date and time the event is scheduled to end (ISO 8601).", "type": "string" }, - "public_page_derived": { + "featured": { + "description": "`true` when Polymarket features the event.", "type": "boolean" }, - "published_at": { - "type": "string" - }, - "source_url": { + "icon_url": { + "description": "URL of the event's icon image.", "type": "string" }, - "subtitle": { + "id": { + "description": "Polymarket event id.", + "example": "545095", "type": "string" }, - "title": { - "example": "Brad Pitt Movies Ranked by Tomatometer", + "image_url": { + "description": "URL of the event's main image.", "type": "string" }, - "type": { - "enum": [ - "article", - "gallery", - "guide", - "otg-article", - "prev" - ], - "example": "guide", - "type": "string" + "liquidity": { + "description": "Liquidity Polymarket reports for the event.", + "type": "number" }, - "video_urls": { + "markets": { + "description": "Markets inside the event, one item per market.", "items": { - "type": "string" + "$ref": "#/definitions/polymarket.MarketSummary" }, "type": "array" - } - }, - "type": "object" - }, - "rottentomatoes.EditorialSearchResponse": { - "properties": { - "fetched_at": { - "example": "2026-09-26T10:00:00Z", - "type": "string" - }, - "has_next_page": { - "example": true, - "type": "boolean" }, - "limit": { - "example": 10, + "markets_count": { + "description": "Number of markets inside the event.", + "example": 15, "type": "integer" }, - "page": { - "example": 1, - "type": "integer" + "open_interest": { + "description": "Open interest Polymarket reports for the event.", + "type": "number" }, - "public_page_derived": { - "example": true, + "restricted": { + "description": "`true` when Polymarket marks the event as restricted.", "type": "boolean" }, - "query": { - "example": "horror", + "slug": { + "description": "URL slug of the event.", + "example": "bitcoin-above-on-june-7-2026", "type": "string" }, - "results": { + "start_date": { + "description": "Date and time the event starts (ISO 8601).", + "type": "string" + }, + "tags": { + "description": "Tags attached to the event, one item per tag.", "items": { - "$ref": "#/definitions/rottentomatoes.EditorialSearchResult" + "$ref": "#/definitions/polymarket.TagSummary" }, "type": "array" }, - "source_url": { - "example": "https://editorial.rottentomatoes.com/wp-json/wp/v2/search?page=1&per_page=10&search=horror", - "type": "string" - }, - "total": { - "example": 5110, - "type": "integer" - }, - "total_pages": { - "example": 511, - "type": "integer" - } - }, - "type": "object" - }, - "rottentomatoes.EditorialSearchResult": { - "properties": { - "id": { - "example": 282182, - "type": "integer" - }, - "subtype": { - "example": "guide", - "type": "string" - }, "title": { - "example": "Best New Horror Movies of 2026", + "description": "Event title as shown on Polymarket.", + "example": "Bitcoin above ___ on June 7?", "type": "string" }, - "type": { - "example": "post", + "updated_at": { + "description": "Time Polymarket last updated the event (ISO 8601).", "type": "string" }, "url": { - "example": "https://editorial.rottentomatoes.com/guide/best-new-horror-movies-2026/", - "type": "string" - } - }, - "type": "object" - }, - "rottentomatoes.EditorialSectionItem": { - "properties": { - "image_url": { - "example": "https://editorial.rottentomatoes.com/wp-content/uploads/2026/04/poster.png?w=300", - "type": "string" - }, - "published_at": { - "example": "September 25, 2026", + "description": "Link to the event on polymarket.com.", + "example": "https://polymarket.com/event/bitcoin-above-on-june-7-2026", "type": "string" }, - "title": { - "example": "Robert Pattinson Movies Ranked by Tomatometer", - "type": "string" + "volume": { + "description": "Total trading volume of the event.", + "type": "number" }, - "url": { - "example": "https://editorial.rottentomatoes.com/guide/robert-pattinson/", - "type": "string" + "volume_24h": { + "description": "Trading volume of the event over the last 24 hours.", + "type": "number" } }, "type": "object" }, - "rottentomatoes.EditorialSectionResponse": { + "polymarket.EventsResponse": { "properties": { - "fetched_at": { - "example": "2026-09-26T10:00:00Z", - "type": "string" - }, - "has_next_page": { - "example": true, + "ascending": { + "description": "`true` when events are sorted in ascending order.", "type": "boolean" }, - "page": { - "example": 1, - "type": "integer" - }, - "path": { - "example": "/countdown/", + "closed": { + "description": "Closed filter applied, `true` or `false`.", + "example": "false", "type": "string" }, - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "results": { + "events": { + "description": "Events on this page, one item per event.", "items": { - "$ref": "#/definitions/rottentomatoes.EditorialSectionItem" + "$ref": "#/definitions/polymarket.EventSummary" }, "type": "array" }, - "source_url": { - "example": "https://editorial.rottentomatoes.com/countdown/", + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "title": { - "example": "Countdown", - "type": "string" + "limit": { + "description": "Maximum number of events requested.", + "example": 25, + "type": "integer" }, - "total_pages": { - "example": 40, + "offset": { + "description": "Number of events skipped before this page.", + "example": 0, "type": "integer" + }, + "order": { + "description": "Field the events are sorted by, for example `volume24hr`.", + "example": "volume24hr", + "type": "string" + }, + "source_url": { + "description": "URL the data was read from.", + "example": "https://gamma-api.polymarket.com/events?limit=25", + "type": "string" } }, "type": "object" }, - "rottentomatoes.EditorialTaxonomiesResponse": { + "polymarket.HomepageFeedResponse": { "properties": { - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "source_url": { - "example": "https://editorial.rottentomatoes.com/wp-json/wp/v2/taxonomies", + "cursor": { + "description": "Cursor that was used to fetch this page.", "type": "string" }, - "taxonomies": { + "events": { + "description": "Event rows in the feed, one item per event.", "items": { - "$ref": "#/definitions/rottentomatoes.EditorialTaxonomy" + "$ref": "#/definitions/polymarket.EventSummary" }, "type": "array" }, - "verified_at": { - "example": "2026-09-26", + "feed": { + "description": "Homepage feed that was requested, for example `politics`.", + "example": "politics", "type": "string" - } - }, - "type": "object" - }, - "rottentomatoes.EditorialTaxonomy": { - "properties": { - "hierarchical": { - "example": false, - "type": "boolean" }, - "label": { - "example": "Related Movie Ids", + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "types": { - "example": [ - "article", - "guide", - "gallery" - ], + "has_more": { + "description": "`true` when more rows are available after this page.", + "type": "boolean" + }, + "limit": { + "description": "Maximum number of rows requested.", + "example": 20, + "type": "integer" + }, + "markets": { + "description": "Market rows in the feed, one item per market. Returned by the `breaking` feed.", "items": { - "type": "string" + "$ref": "#/definitions/polymarket.MarketSummary" }, "type": "array" }, - "value": { - "enum": [ - "categories", - "tags", - "related-movie-id", - "related-tv-season-id", - "related-tv-series-id", - "related-tv-episode-id", - "related-celebrity-id", - "publication", - "franchise", - "coauthors" - ], - "example": "related-movie-id", + "next_cursor": { + "description": "Cursor to pass to fetch the next page.", + "type": "string" + }, + "source_kind": { + "description": "Kind of rows the feed returns: `events_keyset`, `markets_movers` or `public_search`.", + "example": "events_keyset", + "type": "string" + }, + "source_url": { + "description": "URL the data was read from.", + "example": "https://gamma-api.polymarket.com/events/keyset?limit=20&tag_slug=politics", "type": "string" } }, "type": "object" }, - "rottentomatoes.EditorialTerm": { + "polymarket.LeaderboardEntry": { "properties": { - "count": { - "example": 3072, - "type": "integer" - }, - "description": { + "profile_image_url": { "type": "string" }, - "id": { - "example": 10732, - "type": "integer" + "profit_loss": { + "example": 322870.79601049656, + "type": "number" }, - "link": { - "example": "https://editorial.rottentomatoes.com/author/cap-rt-staff/", + "proxy_wallet": { + "example": "0x4bff30af91642dc7d2b19a8664378fe55c45fc26", "type": "string" }, - "name": { - "example": "RT Staff", + "rank": { + "example": "1", "type": "string" }, - "parent": { - "example": 0, - "type": "integer" + "user_name": { + "example": "Sassy-Bucket", + "type": "string" }, - "slug": { - "example": "cap-rt-staff", + "verified_badge": { + "type": "boolean" + }, + "volume": { + "example": 770358.109102, + "type": "number" + }, + "x_username": { + "example": "polymarket", "type": "string" } }, "type": "object" }, - "rottentomatoes.EditorialTermsResponse": { + "polymarket.LeaderboardResponse": { "properties": { "fetched_at": { - "example": "2026-09-26T10:00:00Z", + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "has_next_page": { - "example": true, - "type": "boolean" - }, "limit": { "example": 20, "type": "integer" }, - "page": { - "example": 1, - "type": "integer" - }, - "public_page_derived": { - "example": true, - "type": "boolean" - }, - "results": { + "rows": { "items": { - "$ref": "#/definitions/rottentomatoes.EditorialTerm" + "$ref": "#/definitions/polymarket.LeaderboardEntry" }, "type": "array" }, - "search": { - "example": "RT Staff", + "sort_by": { + "example": "profit", "type": "string" }, "source_url": { - "example": "https://editorial.rottentomatoes.com/wp-json/wp/v2/coauthors?page=1&per_page=20", + "example": "https://data-api.polymarket.com/v1/leaderboard?window=30d&sortBy=profit&limit=20", "type": "string" }, - "taxonomy": { - "enum": [ - "categories", - "tags", - "related-movie-id", - "related-tv-season-id", - "related-tv-series-id", - "related-tv-episode-id", - "related-celebrity-id", - "publication", - "franchise", - "coauthors" - ], - "example": "coauthors", + "window": { + "example": "30d", "type": "string" - }, - "total": { - "example": 927, - "type": "integer" - }, - "total_pages": { - "example": 47, - "type": "integer" } }, "type": "object" }, - "rottentomatoes.EpisodeResponse": { + "polymarket.MacroDashboardResponse": { "properties": { - "air_date": { - "description": "Date the episode first aired, such as `2008-01-20`.", - "example": "2008-01-20", + "cursor": { + "description": "Cursor that was used to fetch this page.", "type": "string" }, - "audience_score": { - "allOf": [ - { - "$ref": "#/definitions/rottentomatoes.Score" - } - ], - "description": "Popcornmeter audience score of the episode." - }, - "cast": { - "description": "People in the cast of the episode.", + "events": { + "description": "Macro events on this page, one item per event.", "items": { - "$ref": "#/definitions/rottentomatoes.Person" + "$ref": "#/definitions/polymarket.EventSummary" }, "type": "array" }, - "critics_score": { - "allOf": [ - { - "$ref": "#/definitions/rottentomatoes.Score" - } - ], - "description": "Tomatometer critics score of the episode." + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T11:00:00Z", + "type": "string" }, - "description": { - "description": "Short synopsis of the episode.", - "type": "string" - }, - "directors": { - "description": "Directors of the episode.", - "items": { - "$ref": "#/definitions/rottentomatoes.Person" - }, - "type": "array" - }, - "ems_id": { - "description": "Rotten Tomatoes' own unique id of the episode.", - "example": "ccda9549-4dcb-3147-9a2b-1106dcf852f7", - "type": "string" + "has_more": { + "description": "`true` when more events are available after this page.", + "type": "boolean" }, - "episode_number": { - "description": "Episode number within its season.", - "example": 1, + "limit": { + "description": "Maximum number of events requested.", + "example": 20, "type": "integer" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:46:16Z", + "next_cursor": { + "description": "Cursor to pass to fetch the next page.", "type": "string" }, - "genres": { - "description": "Genres of the episode.", - "example": [ - "Crime" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { - "description": "URL of the episode image.", + "source_url": { + "description": "URL the data was read from.", + "example": "https://gamma-api.polymarket.com/events/keyset?tag_slug=macro&limit=20", + "type": "string" + } + }, + "type": "object" + }, + "polymarket.MarketDetailResponse": { + "properties": { + "condition_id": { + "description": "Condition id of the market that was requested.", + "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", "type": "string" }, - "lifecycle": { - "description": "Airing status, such as `NOT_AIRING`.", - "example": "NOT_AIRING", + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "media_type": { - "description": "Kind of title, such as `TvEpisode`.", - "example": "TvEpisode", + "id": { + "description": "Polymarket market id that was requested.", + "example": "558934", "type": "string" }, - "parent_season": { + "market": { "allOf": [ { - "$ref": "#/definitions/rottentomatoes.SeasonSummary" + "$ref": "#/definitions/polymarket.MarketSummary" } ], - "description": "Season the episode belongs to." + "description": "Full details of the market." }, - "parent_series": { + "slug": { + "description": "URL slug of the market that was requested.", + "example": "will-spain-win-the-2026-fifa-world-cup-963", + "type": "string" + }, + "source_url": { + "description": "URL the data was read from.", + "example": "https://gamma-api.polymarket.com/markets/558934", + "type": "string" + } + }, + "type": "object" + }, + "polymarket.MarketLiquidityResponse": { + "properties": { + "clob_market": { "allOf": [ { - "$ref": "#/definitions/rottentomatoes.SeriesSummary" + "$ref": "#/definitions/polymarket.ClobMarketSummary" } ], - "description": "Series the episode belongs to." - }, - "path": { - "description": "Rotten Tomatoes path of the episode page, such as `/tv/breaking_bad/s01/e01`.", - "example": "/tv/breaking_bad/s01/e01", - "type": "string" - }, - "producers": { - "description": "Producers of the episode.", - "items": { - "$ref": "#/definitions/rottentomatoes.Person" - }, - "type": "array" - }, - "public_page_derived": { - "description": "Always `true`: the data comes from publicly visible Rotten Tomatoes pages.", - "example": true, - "type": "boolean" - }, - "season_number": { - "description": "Number of the season the episode belongs to.", - "example": 1, - "type": "integer" + "description": "Order-book trading settings and outcome prices for the market." }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01/e01", + "condition_id": { + "description": "Condition id of the market that was requested.", + "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", "type": "string" }, - "title": { - "description": "Title of the episode, as Rotten Tomatoes shows it.", - "example": "Pilot", + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "url": { - "description": "Rotten Tomatoes page URL of the episode.", - "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01/e01", + "id": { + "description": "Polymarket market id that was requested.", + "example": "558934", "type": "string" }, - "video": { + "market": { "allOf": [ { - "$ref": "#/definitions/rottentomatoes.EpisodeVideo" + "$ref": "#/definitions/polymarket.MarketSummary" } ], - "description": "Video clip shown on the episode page." + "description": "Summary of the market the liquidity snapshot belongs to." + }, + "slug": { + "description": "URL slug of the market that was requested.", + "example": "will-spain-win-the-2026-fifa-world-cup-963", + "type": "string" + }, + "source_urls": { + "description": "URLs the data was read from.", + "items": { + "type": "string" + }, + "type": "array" + }, + "tokens": { + "description": "Liquidity figures for each outcome token of the market.", + "items": { + "$ref": "#/definitions/polymarket.MarketLiquidityTokenSummary" + }, + "type": "array" } }, "type": "object" }, - "rottentomatoes.EpisodeVideo": { + "polymarket.MarketLiquidityTokenSummary": { "properties": { - "description": { - "description": "Description of the video.", - "type": "string" + "ask_depth": { + "description": "Total size of all ask levels in the token's order book.", + "example": 654.33, + "type": "number" }, - "duration": { - "description": "Length of the video as text, such as `2:32`.", - "example": "2:32", - "type": "string" + "bid_depth": { + "description": "Total size of all bid levels in the token's order book.", + "example": 117.57, + "type": "number" }, - "thumbnail": { - "description": "URL of the video thumbnail image.", - "type": "string" + "buy_price": { + "description": "Price quoted for buying one share of the outcome.", + "example": 0.16, + "type": "number" }, - "title": { - "description": "Title of the video.", - "example": "Breaking Bad: Official Clip - Walter Wants to Cook", - "type": "string" + "clob_price": { + "description": "Outcome price taken from the order-book market data.", + "example": 0.161, + "type": "number" }, - "upload_date": { - "description": "Date and time the video was uploaded, such as `2024-07-11T19:23:03`.", - "example": "2024-07-11T19:23:03", + "gamma_price": { + "description": "Outcome price taken from the market listing.", + "example": 0.16, + "type": "number" + }, + "last_trade_price": { + "description": "Price of the most recent trade on the token.", + "example": 0.162, + "type": "number" + }, + "midpoint": { + "description": "Midpoint between the best bid and best ask for the token.", + "example": 0.165, + "type": "number" + }, + "orderbook_best_ask": { + "description": "Lowest ask price in the token's order book.", + "example": 0.17, + "type": "number" + }, + "orderbook_best_bid": { + "description": "Highest bid price in the token's order book.", + "example": 0.16, + "type": "number" + }, + "orderbook_spread": { + "description": "Best ask price minus best bid price in the token's order book.", + "example": 0.01, + "type": "number" + }, + "outcome": { + "description": "Name of the outcome the token represents, for example `Yes`.", + "example": "Yes", "type": "string" }, - "url": { - "description": "Rotten Tomatoes page URL of the video.", - "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01/e01/videos/JR3ymbH1dpLb", + "sell_price": { + "description": "Price quoted for selling one share of the outcome.", + "example": 0.17, + "type": "number" + }, + "spread": { + "description": "Spread Polymarket reports for the token.", + "example": 0.01, + "type": "number" + }, + "token_id": { + "description": "Token id of the outcome. Use it with the order book and price endpoints.", + "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", "type": "string" } }, "type": "object" }, - "rottentomatoes.MovieResponse": { + "polymarket.MarketSummary": { "properties": { - "audience_reviews": { - "description": "Sample of audience reviews shown on the movie page.", - "items": { - "$ref": "#/definitions/rottentomatoes.Review" - }, - "type": "array" + "active": { + "description": "`true` when the market is active.", + "type": "boolean" }, - "audience_score": { - "allOf": [ - { - "$ref": "#/definitions/rottentomatoes.Score" - } - ], - "description": "Popcornmeter audience score of the movie." + "best_ask": { + "description": "Lowest ask price currently offered on the market.", + "type": "number" }, - "cast": { - "description": "People in the cast of the movie.", - "items": { - "$ref": "#/definitions/rottentomatoes.Person" - }, - "type": "array" + "best_bid": { + "description": "Highest bid price currently offered on the market.", + "type": "number" }, - "content_rating": { - "description": "Content rating of the movie, such as `PG-13`.", - "example": "PG-13", + "closed": { + "description": "`true` when the market is closed.", + "type": "boolean" + }, + "condition_id": { + "description": "Condition id that identifies the market on Polymarket.", + "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", "type": "string" }, - "critics_score": { - "allOf": [ - { - "$ref": "#/definitions/rottentomatoes.Score" - } - ], - "description": "Tomatometer critics score of the movie." + "end_date": { + "description": "Date and time the market is scheduled to end (ISO 8601).", + "type": "string" }, - "description": { - "description": "Short synopsis of the movie.", + "id": { + "description": "Polymarket market id.", + "example": "558934", "type": "string" }, - "directors": { - "description": "Directors of the movie.", + "last_trade_price": { + "description": "Price of the most recent trade on the market.", + "type": "number" + }, + "liquidity": { + "description": "Liquidity Polymarket reports for the market.", + "type": "number" + }, + "outcomes": { + "description": "Outcomes of the market with their current prices, one item per outcome.", "items": { - "$ref": "#/definitions/rottentomatoes.Person" + "$ref": "#/definitions/polymarket.OutcomePricePoint" }, "type": "array" }, - "ems_id": { - "description": "Rotten Tomatoes' own unique id of the movie.", - "example": "afbf1c81-1bfe-3996-9cbc-2e1be23d1f61", + "question": { + "description": "Question the market asks, for example `Will Spain win the 2026 FIFA World Cup?`.", + "example": "Will Spain win the 2026 FIFA World Cup?", "type": "string" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:46:16Z", + "slug": { + "description": "URL slug of the market.", + "example": "will-spain-win-the-2026-fifa-world-cup-963", "type": "string" }, - "genres": { - "description": "Genres of the movie.", - "example": [ - "Sci-Fi" - ], + "token_ids": { + "description": "Token ids of the market outcomes, in the same order as `outcomes`.", "items": { "type": "string" }, "type": "array" }, - "image_url": { - "description": "URL of the poster image.", + "url": { + "description": "Link to the market on polymarket.com.", + "example": "https://polymarket.com/event/world-cup-winner/will-spain-win-the-2026-fifa-world-cup-963", "type": "string" }, - "media_type": { - "description": "Kind of title, such as `Movie`.", - "example": "Movie", + "volume": { + "description": "Total trading volume of the market.", + "type": "number" + }, + "volume_24h": { + "description": "Trading volume of the market over the last 24 hours.", + "type": "number" + } + }, + "type": "object" + }, + "polymarket.MarketsResponse": { + "properties": { + "ascending": { + "description": "`true` when markets are sorted in ascending order.", + "type": "boolean" + }, + "closed": { + "description": "Closed filter applied, `true` or `false`.", + "example": "false", "type": "string" }, - "path": { - "description": "Rotten Tomatoes path of the movie page, such as `/m/inception`.", - "example": "/m/inception", + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "producers": { - "description": "Producers of the movie.", + "limit": { + "description": "Maximum number of markets requested.", + "example": 25, + "type": "integer" + }, + "markets": { + "description": "Markets on this page, one item per market.", "items": { - "$ref": "#/definitions/rottentomatoes.Person" + "$ref": "#/definitions/polymarket.MarketSummary" }, "type": "array" }, - "public_page_derived": { - "description": "Always `true`: the data comes from publicly visible Rotten Tomatoes pages.", - "example": true, - "type": "boolean" - }, - "release_date": { - "description": "Release date of the movie, such as `2010-07-16`.", - "example": "2010-07-16", - "type": "string" + "offset": { + "description": "Number of markets skipped before this page.", + "example": 0, + "type": "integer" }, - "reviews_url": { - "description": "URL of the Rotten Tomatoes page with the audience reviews of the movie.", - "example": "https://www.rottentomatoes.com/m/inception/reviews/all-audience", + "order": { + "description": "Field the markets are sorted by, for example `volume24hr`.", + "example": "volume24hr", "type": "string" }, "source_url": { "description": "URL the data was read from.", - "example": "https://www.rottentomatoes.com/m/inception", - "type": "string" - }, - "title": { - "description": "Title of the movie, as Rotten Tomatoes shows it.", - "example": "Inception", + "example": "https://gamma-api.polymarket.com/markets?limit=25", "type": "string" + } + }, + "type": "object" + }, + "polymarket.OrderBookLevel": { + "properties": { + "price": { + "description": "Price of this order book level.", + "example": 0.03, + "type": "number" }, - "url": { - "description": "Rotten Tomatoes page URL of the movie.", - "example": "https://www.rottentomatoes.com/m/inception", - "type": "string" + "size": { + "description": "Total size of the orders resting at this price.", + "example": 5, + "type": "number" } }, "type": "object" }, - "rottentomatoes.MovieReview": { + "polymarket.OrderBookSummary": { "properties": { - "created_at": { - "example": "2024-04-11T23:40:16.000Z", - "type": "string" + "asks": { + "description": "Ask levels in the order book, one item per price level.", + "items": { + "$ref": "#/definitions/polymarket.OrderBookLevel" + }, + "type": "array" }, - "critic_url": { - "example": "https://www.rottentomatoes.com/critic/danilo-castro", + "bids": { + "description": "Bid levels in the order book, one item per price level.", + "items": { + "$ref": "#/definitions/polymarket.OrderBookLevel" + }, + "type": "array" + }, + "condition_id": { + "description": "Condition id of the market the token belongs to.", + "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", "type": "string" }, - "display_name": { - "example": "Danilo Castro", + "hash": { + "description": "Hash of the order book snapshot.", + "example": "31facd52b62495bbc142facb81275400d978f6bf", "type": "string" }, - "has_profanity": { - "example": false, - "type": "boolean" + "last_trade_price": { + "description": "Price of the most recent trade on the token.", + "example": 0.285, + "type": "number" }, - "has_spoilers": { - "example": false, + "min_order_size": { + "description": "Smallest order size the market accepts.", + "example": 5, + "type": "number" + }, + "neg_risk": { + "description": "`true` when the market is part of a negative-risk group of linked outcomes.", "type": "boolean" }, - "id": { - "example": "102903742", - "type": "string" + "tick_size": { + "description": "Smallest price increment the market accepts.", + "example": 0.01, + "type": "number" }, - "original_score": { - "example": "9/10", + "timestamp": { + "description": "Time of the order book snapshot, in Unix milliseconds.", + "example": "1780837460175", "type": "string" }, - "publication": { - "example": "Next Best Picture", + "token_id": { + "description": "Token id of the outcome the order book belongs to.", + "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", "type": "string" + } + }, + "type": "object" + }, + "polymarket.OutcomePricePoint": { + "properties": { + "best_ask": { + "description": "Lowest ask price currently offered for the outcome.", + "example": 0.162, + "type": "number" }, - "publication_approved": { - "example": true, - "type": "boolean" + "best_bid": { + "description": "Highest bid price currently offered for the outcome.", + "example": 0.161, + "type": "number" }, - "publication_review_url": { - "example": "https://nextbestpicture.com/inception/", - "type": "string" + "last_trade_price": { + "description": "Price of the most recent trade on the outcome.", + "example": 0.162, + "type": "number" }, - "rating": { - "example": 4.5, + "liquidity": { + "description": "Liquidity Polymarket reports for the outcome.", + "example": 1093391.84, "type": "number" }, - "rating_label": { - "example": "STAR_4_5", + "market_id": { + "description": "Polymarket id of the market the outcome belongs to.", + "example": "558934", "type": "string" }, - "review": { + "market_slug": { + "description": "URL slug of the market the outcome belongs to.", + "example": "will-spain-win-the-2026-fifa-world-cup-963", "type": "string" }, - "score_sentiment": { - "example": "POSITIVE", + "outcome": { + "description": "Name of the outcome, for example `Yes`.", + "example": "Yes", "type": "string" }, - "super_reviewer": { - "example": false, - "type": "boolean" - }, - "tomatometer_approved": { - "example": true, - "type": "boolean" - }, - "top_critic": { - "example": false, - "type": "boolean" - }, - "top_publication": { - "example": false, - "type": "boolean" - }, - "top_review": { - "example": false, - "type": "boolean" + "price": { + "description": "Current price of the outcome.", + "example": 0.1615, + "type": "number" }, - "type": { - "example": "critic", + "question": { + "description": "Question of the market the outcome belongs to.", + "example": "Will Spain win the 2026 FIFA World Cup?", "type": "string" }, - "verified": { - "example": false, - "type": "boolean" + "volume": { + "description": "Trading volume Polymarket reports for the outcome.", + "example": 30983849.24, + "type": "number" } }, "type": "object" }, - "rottentomatoes.Person": { + "polymarket.PredictionsResponse": { "properties": { - "image_url": { - "description": "URL of the person's photo.", + "cursor": { + "description": "Cursor that was used to fetch this page.", "type": "string" }, - "name": { - "description": "Name of the person.", - "example": "Christopher Nolan", - "type": "string" + "events": { + "description": "Events on this page, one item per event.", + "items": { + "$ref": "#/definitions/polymarket.EventSummary" + }, + "type": "array" }, - "url": { - "description": "Rotten Tomatoes page URL of the person.", - "example": "https://www.rottentomatoes.com/celebrity/christopher_nolan", + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T11:00:00Z", "type": "string" - } - }, - "type": "object" - }, - "rottentomatoes.PersonCredit": { - "properties": { - "audience_score": { - "allOf": [ - { - "$ref": "#/definitions/rottentomatoes.Score" - } - ], - "description": "Popcornmeter audience score of the title." }, - "credits": { - "description": "Roles the person had on the title, such as `Director, Screenwriter, Producer`.", - "example": "Director, Screenwriter, Producer", - "type": "string" + "has_more": { + "description": "`true` when more events are available after this page.", + "type": "boolean" }, - "critics_score": { - "allOf": [ - { - "$ref": "#/definitions/rottentomatoes.Score" - } - ], - "description": "Tomatometer critics score of the title." + "limit": { + "description": "Maximum number of events requested.", + "example": 20, + "type": "integer" }, - "path": { - "description": "Rotten Tomatoes path of the title page, such as `/m/oppenheimer_2023`.", - "example": "/m/oppenheimer_2023", + "next_cursor": { + "description": "Cursor to pass to fetch the next page.", "type": "string" }, - "position": { - "description": "Position of the credit in the filmography list, starting at 1.", - "example": 1, - "type": "integer" + "recurrence": { + "description": "Recurrence filter applied: `hourly`, `daily`, `weekly`, `monthly` or `yearly`.", + "example": "daily", + "type": "string" }, - "poster_url": { - "description": "URL of the title's poster image.", + "sort": { + "description": "Sort order applied, for example `competitive`.", + "example": "competitive", "type": "string" }, - "title": { - "description": "Name of the title, as Rotten Tomatoes shows it.", - "example": "Oppenheimer", + "source_url": { + "description": "URL the data was read from.", + "example": "https://gamma-api.polymarket.com/events/keyset?limit=20&order=competitive", "type": "string" }, - "url": { - "description": "Rotten Tomatoes page URL of the title.", - "example": "https://www.rottentomatoes.com/m/oppenheimer_2023", + "status": { + "description": "Prediction status filter applied: `active`, `resolved` or `all`.", + "example": "all", "type": "string" }, - "years_featured": { - "description": "Year or years shown for the title in the filmography.", - "example": "2023", + "tag": { + "description": "Polymarket tag slug the events were filtered by.", + "example": "politics", "type": "string" } }, "type": "object" }, - "rottentomatoes.PersonRatedTitle": { + "polymarket.PriceHistoryPoint": { "properties": { - "path": { - "description": "Rotten Tomatoes path of the title page, such as `/m/the_dark_knight`.", - "example": "/m/the_dark_knight", - "type": "string" + "price": { + "example": 0.48, + "type": "number" }, - "score": { - "description": "Critics score of the title, as a percentage.", - "example": 94, + "timestamp": { + "example": 1780826405, "type": "integer" - }, - "title": { - "description": "Name of the title, as Rotten Tomatoes shows it.", - "example": "The Dark Knight", + } + }, + "type": "object" + }, + "polymarket.ProfileMatch": { + "properties": { + "id": { + "description": "Polymarket profile id.", + "example": "123", "type": "string" }, - "url": { - "description": "Rotten Tomatoes page URL of the title.", - "example": "https://www.rottentomatoes.com/m/the_dark_knight", + "name": { + "description": "Display name of the profile.", + "example": "Trader", "type": "string" }, - "year": { - "description": "Release year of the title.", - "example": "2008", + "username": { + "description": "Username of the profile.", + "example": "trader", "type": "string" } }, "type": "object" }, - "rottentomatoes.PersonResponse": { + "polymarket.PublicDataResponse": { "properties": { - "birth_date": { - "description": "Date of birth, such as `1970-07-30`.", - "example": "1970-07-30", - "type": "string" + "data": { + "description": "Content returned for the requested route, as Polymarket returns it.", + "type": "object" }, - "birthplace": { - "description": "Place of birth, such as `London, England, UK`.", - "example": "London, England, UK", + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "description": { - "description": "Biography text of the person.", + "route": { + "description": "Route key that was requested, for example `sports`.", + "example": "sports", "type": "string" }, - "ems_id": { - "description": "Rotten Tomatoes' own unique id of the person.", - "example": "a015d515-713e-38e3-abbe-cf0cdaa519b0", + "source_url": { + "description": "URL the data was read from.", + "example": "https://gamma-api.polymarket.com/sports", + "type": "string" + } + }, + "type": "object" + }, + "polymarket.RewardsConfigSummary": { + "properties": { + "asset_address": { + "description": "Contract address of the token paid out as the reward.", + "example": "0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB", "type": "string" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:46:16Z", + "end_date": { + "description": "Date the reward program ends, in YYYY-MM-DD.", + "example": "2500-12-31", "type": "string" }, - "filmography": { - "description": "Titles the person has credits on, one entry per title.", - "items": { - "$ref": "#/definitions/rottentomatoes.PersonCredit" - }, - "type": "array" + "id": { + "description": "Id of the reward program configuration.", + "example": 0, + "type": "integer" }, - "filmography_api_url": { - "description": "URL of the Rotten Tomatoes filmography list for this person.", - "example": "https://www.rottentomatoes.com/cnapi/modules/filmography/a015d515-713e-38e3-abbe-cf0cdaa519b0/movie/newest", - "type": "string" + "rate_per_day": { + "description": "Reward amount paid per day.", + "example": 10.00036, + "type": "number" }, - "highest_rated": { - "allOf": [ - { - "$ref": "#/definitions/rottentomatoes.PersonRatedTitle" - } - ], - "description": "Highest-rated title of the person, with its score." + "start_date": { + "description": "Date the reward program starts, in YYYY-MM-DD.", + "example": "2026-06-07", + "type": "string" }, - "image_url": { - "description": "URL of the person's photo.", + "total_rewards": { + "description": "Total reward amount configured for the program.", + "example": 0, + "type": "number" + } + }, + "type": "object" + }, + "polymarket.RewardsMarketResponse": { + "properties": { + "condition_id": { + "description": "Condition id of the market that was requested.", + "example": "0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327", "type": "string" }, - "lowest_rated": { - "allOf": [ - { - "$ref": "#/definitions/rottentomatoes.PersonRatedTitle" - } - ], - "description": "Lowest-rated title of the person, with its score." + "count": { + "description": "Number of reward markets returned.", + "example": 1, + "type": "integer" }, - "name": { - "description": "Name of the person.", - "example": "Christopher Nolan", + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "page_info": { + "market": { "allOf": [ { - "$ref": "#/definitions/rottentomatoes.ReviewPageInfo" + "$ref": "#/definitions/polymarket.RewardsMarketSummary" } ], - "description": "Paging information for the filmography." - }, - "path": { - "description": "Rotten Tomatoes path of the person page, such as `/celebrity/christopher_nolan`.", - "example": "/celebrity/christopher_nolan", - "type": "string" - }, - "public_page_derived": { - "description": "Always `true`: the data comes from publicly visible Rotten Tomatoes pages.", - "example": true, - "type": "boolean" + "description": "Rewards details of the market." }, "source_url": { "description": "URL the data was read from.", - "example": "https://www.rottentomatoes.com/celebrity/christopher_nolan", - "type": "string" - }, - "url": { - "description": "Rotten Tomatoes page URL of the person.", - "example": "https://www.rottentomatoes.com/celebrity/christopher_nolan", + "example": "https://clob.polymarket.com/rewards/markets/0x1a987cd4e88488fd12905fa9ae82cef381e03f4af68289275c4c0c2613db9327?sponsored=true", "type": "string" } }, "type": "object" }, - "rottentomatoes.Review": { + "polymarket.RewardsMarketSummary": { "properties": { - "display_date": { - "description": "Date the review was posted, as shown on the page, such as `Mar 19`.", - "example": "Mar 19", - "type": "string" - }, - "display_name": { - "description": "Display name of the reviewer.", - "example": "Rylee", + "condition_id": { + "description": "Condition id that identifies the market on Polymarket.", + "example": "0x2d293b8d8141edcc3317f6e677a01623dc482e7fe8eb4c4e207c9a0987c37d22", "type": "string" }, - "fandango_review": { - "description": "Whether Rotten Tomatoes flags the review as a Fandango review.", - "example": true, - "type": "boolean" + "daily_reward_rate": { + "description": "Daily reward rate offered for the market.", + "example": 10.00036, + "type": "number" }, - "rating": { - "description": "Star rating the reviewer gave, such as `5`.", - "example": 5, + "earning_percentage": { + "description": "Earning percentage Polymarket shows for the market.", + "example": 0, "type": "number" }, - "rating_id": { - "description": "Unique id of the rating.", - "example": "e0812d98-c1d5-467d-ae35-c19cdd575f90", + "earnings": { + "description": "Reward earnings records for the market, as Polymarket returns them.", + "items": { + "type": "object" + }, + "type": "array" + }, + "event_id": { + "description": "Polymarket id of the event the market belongs to.", + "example": "568951", "type": "string" }, - "rating_range": { - "description": "Rating text as shown on the page, such as `Rated 5/5 Stars`.", - "example": "Rated 5/5 Stars", + "event_slug": { + "description": "URL slug of the event the market belongs to.", + "example": "sc2-hero-cure-2026-06-07", "type": "string" }, - "review": { - "description": "Text of the review.", + "event_url": { + "description": "Link to the event on polymarket.com.", + "example": "https://polymarket.com/event/sc2-hero-cure-2026-06-07", "type": "string" }, - "verified": { - "description": "Whether the review is marked as verified.", - "example": true, - "type": "boolean" - } - }, - "type": "object" - }, - "rottentomatoes.ReviewMovieSummary": { - "properties": { - "ems_id": { - "example": "afbf1c81-1bfe-3996-9cbc-2e1be23d1f61", + "image_url": { + "description": "URL of the market's image.", "type": "string" }, - "media_type": { - "example": "Movie", + "maker_address": { + "description": "Maker address Polymarket reports for the market's rewards.", + "example": "0x0000000000000000000000000000000000000000", "type": "string" }, - "path": { - "example": "/m/inception", + "market_competitiveness": { + "description": "Competitiveness score Polymarket shows for the market's rewards.", + "example": 2.83, + "type": "number" + }, + "market_id": { + "description": "Polymarket market id.", + "example": "2461586", "type": "string" }, - "title": { - "example": "Inception", + "market_slug": { + "description": "URL slug of the market.", + "example": "sc2-hero-cure-2026-06-07", "type": "string" }, - "url": { - "example": "https://www.rottentomatoes.com/m/inception", + "market_url": { + "description": "Link to the market on polymarket.com.", + "example": "https://polymarket.com/event/sc2-hero-cure-2026-06-07/sc2-hero-cure-2026-06-07", "type": "string" - } - }, - "type": "object" - }, - "rottentomatoes.ReviewPageInfo": { - "properties": { - "end_cursor": { - "description": "Cursor of the last item on this page. Pass it as `after` to get the next page.", - "example": "Mjk=", + }, + "question": { + "description": "Question the market asks.", + "example": "StarCraft II: herO vs Cure (BO7) - Global StarCraft II League Playoffs", "type": "string" }, - "has_next_page": { - "description": "Whether more items follow this page.", - "example": true, - "type": "boolean" + "rewards_config": { + "description": "Reward programs configured for the market, one item per program.", + "items": { + "$ref": "#/definitions/polymarket.RewardsConfigSummary" + }, + "type": "array" }, - "has_previous_page": { - "description": "Whether items precede this page.", - "example": true, - "type": "boolean" + "rewards_max_spread": { + "description": "Maximum spread an order can have and still qualify for rewards.", + "example": 4.5, + "type": "number" }, - "start_cursor": { - "description": "Cursor of the first item on this page.", - "example": "MA==", - "type": "string" + "rewards_min_size": { + "description": "Minimum order size that qualifies for rewards.", + "example": 50, + "type": "number" + }, + "spread": { + "description": "Current spread of the market.", + "example": 0.01, + "type": "number" + }, + "tokens": { + "description": "Outcome tokens of the market with their prices, one item per outcome.", + "items": { + "$ref": "#/definitions/polymarket.RewardsTokenSummary" + }, + "type": "array" + }, + "total_configured_rewards": { + "description": "Total rewards configured for the market.", + "example": 0, + "type": "number" + }, + "volume_24h": { + "description": "Trading volume of the market over the last 24 hours.", + "example": 79.9901, + "type": "number" } }, "type": "object" }, - "rottentomatoes.ReviewsResponse": { + "polymarket.RewardsMarketsResponse": { "properties": { - "fetched_at": { - "description": "UTC time, to the second, when the Rotten Tomatoes page behind this response was fetched. A cached response keeps its original time.", - "example": "2026-06-07T14:46:16Z", - "type": "string" - }, - "limit": { - "example": 10, + "count": { + "description": "Number of reward markets returned on this page.", + "example": 100, "type": "integer" }, - "movie": { - "$ref": "#/definitions/rottentomatoes.ReviewMovieSummary" + "cursor": { + "description": "Cursor that was used to fetch this page.", + "example": "MA==", + "type": "string" }, - "page_info": { - "$ref": "#/definitions/rottentomatoes.ReviewPageInfo" + "date": { + "description": "Reward program date the markets apply to, in YYYY-MM-DD.", + "example": "2026-06-07", + "type": "string" }, - "public_page_derived": { - "example": true, + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T11:00:00Z", + "type": "string" + }, + "has_more": { + "description": "`true` when more reward markets are available after this page.", "type": "boolean" }, - "reviews": { + "limit": { + "description": "Maximum number of rows requested.", + "example": 100, + "type": "integer" + }, + "markets": { + "description": "Reward markets on this page, one item per market.", "items": { - "$ref": "#/definitions/rottentomatoes.MovieReview" + "$ref": "#/definitions/polymarket.RewardsMarketSummary" }, "type": "array" }, - "reviews_api_url": { - "example": "https://www.rottentomatoes.com/napi/rtcf/v1/movies/afbf1c81-1bfe-3996-9cbc-2e1be23d1f61/reviews?type=critic&pageCount=10", + "next_cursor": { + "description": "Cursor to pass to fetch the next page.", + "example": "MTAw", + "type": "string" + }, + "order_by": { + "description": "Field the markets are sorted by, for example `market`.", + "example": "market", + "type": "string" + }, + "position": { + "description": "Sort direction applied: `asc` or `desc`.", + "example": "desc", + "type": "string" + }, + "q": { + "description": "Market question search text that was applied.", + "example": "bitcoin", "type": "string" }, "source_url": { - "example": "https://www.rottentomatoes.com/m/inception/reviews", + "description": "URL the data was read from.", + "example": "https://polymarket.com/api/rewards/markets?orderBy=market", "type": "string" }, - "type": { - "example": "critics", + "tag_slug": { + "description": "Rewards category the markets were filtered by, for example `all` or `politics`.", + "example": "all", "type": "string" + }, + "total_count": { + "description": "Total number of reward markets matching the filters.", + "example": 5430, + "type": "integer" } }, "type": "object" }, - "rottentomatoes.Score": { + "polymarket.RewardsTokenSummary": { "properties": { - "average_rating": { - "description": "Average rating as shown on the scorecard, such as `8.40`.", - "example": "8.40", + "outcome": { + "description": "Name of the outcome the token represents.", + "example": "herO", "type": "string" }, - "banded_rating_count": { - "description": "Approximate number of ratings as shown on the page, such as `250,000+ Ratings`.", - "example": "250,000+ Ratings", - "type": "string" + "price": { + "description": "Current price of the outcome token.", + "example": 0.995, + "type": "number" }, - "certified": { - "description": "Whether Rotten Tomatoes marks the score as certified.", - "example": true, + "token_id": { + "description": "Token id of the outcome.", + "example": "49033998602764986470838384384660931821099068366428064235699748485619139146655", + "type": "string" + } + }, + "type": "object" + }, + "polymarket.SearchResponse": { + "properties": { + "ascending": { + "description": "`true` when results are sorted in ascending order.", "type": "boolean" }, - "liked_count": { - "description": "Number of ratings that liked the title.", - "example": 314, - "type": "integer" + "events": { + "description": "Events matching the search query, one item per event.", + "items": { + "$ref": "#/definitions/polymarket.EventSummary" + }, + "type": "array" }, - "not_liked_count": { - "description": "Number of ratings that did not like the title.", - "example": 49, - "type": "integer" + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T11:00:00Z", + "type": "string" }, - "rating_count": { - "description": "Number of ratings behind the score.", - "example": 363, - "type": "integer" + "has_more": { + "description": "`true` when more matching results exist beyond this page.", + "type": "boolean" }, - "review_count": { - "description": "Number of reviews behind the score.", - "example": 363, + "limit": { + "description": "Maximum number of events requested.", + "example": 10, "type": "integer" }, - "reviews_page_url": { - "description": "URL of the Rotten Tomatoes page that lists the reviews behind this score.", - "example": "https://www.rottentomatoes.com/m/inception/reviews", - "type": "string" - }, - "score": { - "description": "Score as a whole-number percentage.", - "example": 87, - "type": "integer" + "profiles": { + "description": "Polymarket profiles matching the query, one item per profile.", + "items": { + "$ref": "#/definitions/polymarket.ProfileMatch" + }, + "type": "array" }, - "score_percent": { - "description": "Score as text with a percent sign, such as `87%`.", - "example": "87%", + "query": { + "description": "Search text that was run.", + "example": "bitcoin", "type": "string" }, - "score_type": { - "description": "Audience group the score covers, such as `ALL` or `VERIFIED`.", - "example": "ALL", + "sort": { + "description": "Sort order applied to the results, for example `relevance`.", + "example": "relevance", "type": "string" }, - "sentiment": { - "description": "Overall sentiment of the score, such as `POSITIVE`.", - "example": "POSITIVE", + "source_url": { + "description": "URL the data was read from.", + "example": "https://gamma-api.polymarket.com/public-search?q=bitcoin&limit_per_type=10", "type": "string" }, - "title": { - "description": "Name of the score, such as `Tomatometer` or `Popcornmeter`.", - "example": "Tomatometer", + "status": { + "description": "Event status filter applied: `open`, `closed` or `all`.", + "example": "open", "type": "string" + }, + "tags": { + "description": "Tags matching the query, one item per tag.", + "items": { + "$ref": "#/definitions/polymarket.TagSummary" + }, + "type": "array" + }, + "total_results": { + "description": "Total number of events matching the query.", + "example": 123, + "type": "integer" } }, "type": "object" }, - "rottentomatoes.SearchMovie": { + "polymarket.SimilarEventsResponse": { "properties": { - "cast": { - "description": "Names of the leading cast, separated by commas.", - "example": "Leonardo DiCaprio,Joseph Gordon-Levitt,Elliot Page", - "type": "string" - }, - "certified_fresh": { - "description": "Whether the title is Certified Fresh.", - "example": true, - "type": "boolean" + "events": { + "items": { + "$ref": "#/definitions/polymarket.EventSummary" + }, + "type": "array" }, - "end_year": { - "description": "Last year of the title's run, as shown on the search row.", + "fetched_at": { + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "image_url": { - "description": "URL of the poster image.", - "type": "string" + "limit": { + "example": 10, + "type": "integer" }, - "path": { - "description": "Rotten Tomatoes path of the title page, such as `/m/inception`.", - "example": "/m/inception", + "source_url": { + "example": "https://gamma-api.polymarket.com/events/similar?event_slug=world-cup-winner", "type": "string" - }, - "release_year": { - "description": "Release year of the title, such as `2010`.", - "example": "2010", + } + }, + "type": "object" + }, + "polymarket.TagResponse": { + "properties": { + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "start_year": { - "description": "First year of the title's run, as shown on the search row.", + "source_url": { + "description": "URL the data was read from.", + "example": "https://gamma-api.polymarket.com/tags/slug/crypto", "type": "string" }, - "title": { - "description": "Title name as shown on the search row.", - "example": "Inception", + "tag": { + "allOf": [ + { + "$ref": "#/definitions/polymarket.TagSummary" + } + ], + "description": "Tag that was requested." + } + }, + "type": "object" + }, + "polymarket.TagSummary": { + "properties": { + "id": { + "description": "Polymarket tag id.", + "example": "21", "type": "string" }, - "tomatometer_score": { - "description": "Tomatometer critics score, as a percentage.", - "example": 87, - "type": "integer" - }, - "tomatometer_sentiment": { - "description": "Tomatometer sentiment, such as `POSITIVE`.", - "example": "POSITIVE", + "label": { + "description": "Display name of the tag, for example `Crypto`.", + "example": "Crypto", "type": "string" }, - "url": { - "description": "Rotten Tomatoes page URL of the title.", - "example": "https://www.rottentomatoes.com/m/inception", + "slug": { + "description": "URL slug of the tag, for example `crypto`.", + "example": "crypto", "type": "string" } }, "type": "object" }, - "rottentomatoes.SearchResponse": { + "polymarket.TagsResponse": { "properties": { "fetched_at": { "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:46:16Z", + "example": "2026-06-07T11:00:00Z", "type": "string" }, "limit": { - "description": "Maximum number of results requested.", - "example": 10, + "description": "Maximum number of tags requested.", + "example": 25, "type": "integer" }, - "query": { - "description": "Query that was run.", - "example": "inception", + "offset": { + "description": "Number of tags skipped before this page.", + "example": 0, + "type": "integer" + }, + "source_url": { + "description": "URL the data was read from.", + "example": "https://gamma-api.polymarket.com/tags?limit=25", "type": "string" }, - "results": { - "description": "Titles matching the query.", + "tags": { + "description": "Tags on this page, one item per tag.", "items": { - "$ref": "#/definitions/rottentomatoes.SearchMovie" + "$ref": "#/definitions/polymarket.TagSummary" }, "type": "array" - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.rottentomatoes.com/search?search=inception", - "type": "string" } }, "type": "object" }, - "rottentomatoes.SeasonEpisode": { + "polymarket.TokenMidpointResponse": { "properties": { - "air_date": { - "description": "Date the episode first aired, such as `2008-01-20`.", - "example": "2008-01-20", - "type": "string" - }, - "description": { - "description": "Short synopsis of the episode.", - "type": "string" - }, - "episode_number": { - "description": "Episode number within the season.", - "example": "1", + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "path": { - "description": "Rotten Tomatoes path of the episode page, such as `/tv/breaking_bad/s01/e01`.", - "example": "/tv/breaking_bad/s01/e01", - "type": "string" + "midpoint": { + "description": "Midpoint between the best bid and best ask for the token.", + "example": 0.285, + "type": "number" }, - "title": { - "description": "Title of the episode, as Rotten Tomatoes shows it.", - "example": "Pilot", + "source_url": { + "description": "URL the data was read from.", + "example": "https://clob.polymarket.com/midpoint?token_id=81927025054404355287140018940169293739219157042658469116956164881873598220211", "type": "string" }, - "url": { - "description": "Rotten Tomatoes page URL of the episode.", - "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01/e01", + "token_id": { + "description": "Token id of the outcome that was requested.", + "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", "type": "string" } }, "type": "object" }, - "rottentomatoes.SeasonResponse": { + "polymarket.TokenOrderBookResponse": { "properties": { - "audience_score": { + "book": { "allOf": [ { - "$ref": "#/definitions/rottentomatoes.Score" + "$ref": "#/definitions/polymarket.OrderBookSummary" } ], - "description": "Popcornmeter audience score of the season." - }, - "cast": { - "description": "People in the cast of the season.", - "items": { - "$ref": "#/definitions/rottentomatoes.Person" - }, - "type": "array" + "description": "Order book for the token with its bids and asks." }, - "critics_score": { - "allOf": [ - { - "$ref": "#/definitions/rottentomatoes.Score" - } - ], - "description": "Tomatometer critics score of the season." + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T11:00:00Z", + "type": "string" }, - "description": { - "description": "Short synopsis of the season.", + "source_url": { + "description": "URL the data was read from.", + "example": "https://clob.polymarket.com/book?token_id=81927025054404355287140018940169293739219157042658469116956164881873598220211", "type": "string" }, - "directors": { - "description": "Directors of the season.", - "items": { - "$ref": "#/definitions/rottentomatoes.Person" - }, - "type": "array" + "token_id": { + "description": "Token id of the outcome that was requested.", + "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", + "type": "string" + } + }, + "type": "object" + }, + "polymarket.TokenPriceHistoryResponse": { + "properties": { + "end_ts": { + "example": 1780840800, + "type": "integer" }, - "ems_id": { - "description": "Rotten Tomatoes' own unique id of the season.", - "example": "71374db9-1350-30fa-b30a-d3f623bbdfc4", + "fetched_at": { + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "episode_count": { - "description": "Number of episodes in the season.", - "example": 7, + "fidelity": { + "example": 60, "type": "integer" }, - "episodes": { - "description": "Episodes of the season.", - "items": { - "$ref": "#/definitions/rottentomatoes.SeasonEpisode" - }, - "type": "array" - }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:46:16Z", + "interval": { + "example": "1d", "type": "string" }, - "genres": { - "description": "Genres of the season.", - "example": [ - "Crime" - ], + "points": { "items": { - "type": "string" + "$ref": "#/definitions/polymarket.PriceHistoryPoint" }, "type": "array" }, - "image_url": { - "description": "URL of the season image.", + "source_url": { + "example": "https://clob.polymarket.com/prices-history?fidelity=60&interval=1d&market=81927025054404355287140018940169293739219157042658469116956164881873598220211", "type": "string" }, - "lifecycle": { - "description": "Airing status, such as `NOT_AIRING`.", - "example": "NOT_AIRING", - "type": "string" + "start_ts": { + "example": 1780754400, + "type": "integer" }, - "media_type": { - "description": "Kind of title, such as `TvSeason`.", - "example": "TvSeason", + "token_id": { + "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", "type": "string" - }, - "parent_series": { - "allOf": [ - { - "$ref": "#/definitions/rottentomatoes.SeriesSummary" - } - ], - "description": "Series the season belongs to." - }, - "path": { - "description": "Rotten Tomatoes path of the season page, such as `/tv/breaking_bad/s01`.", - "example": "/tv/breaking_bad/s01", + } + }, + "type": "object" + }, + "polymarket.TokenPriceResponse": { + "properties": { + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "producers": { - "description": "Producers of the season.", - "items": { - "$ref": "#/definitions/rottentomatoes.Person" - }, - "type": "array" - }, - "public_page_derived": { - "description": "Always `true`: the data comes from publicly visible Rotten Tomatoes pages.", - "example": true, - "type": "boolean" + "price": { + "description": "Price quoted for the requested side.", + "example": 0.03, + "type": "number" }, - "release_date": { - "description": "Date the season premiered, such as `2008-01-20`.", - "example": "2008-01-20", + "side": { + "description": "Order side the price applies to: `buy` or `sell`.", + "example": "buy", "type": "string" }, - "season_number": { - "description": "Number of the season within the series.", - "example": 1, - "type": "integer" - }, "source_url": { "description": "URL the data was read from.", - "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01", - "type": "string" - }, - "title": { - "description": "Season title, such as `Season 1`.", - "example": "Season 1", + "example": "https://clob.polymarket.com/price?side=buy&token_id=81927025054404355287140018940169293739219157042658469116956164881873598220211", "type": "string" }, - "url": { - "description": "Rotten Tomatoes page URL of the season.", - "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01", + "token_id": { + "description": "Token id of the outcome that was requested.", + "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", "type": "string" } }, "type": "object" }, - "rottentomatoes.SeasonSummary": { + "polymarket.TokenSpreadResponse": { "properties": { - "ems_id": { - "description": "Rotten Tomatoes' own unique id of the season.", - "example": "71374db9-1350-30fa-b30a-d3f623bbdfc4", + "fetched_at": { + "example": "2026-06-07T11:00:00Z", "type": "string" }, - "path": { - "description": "Rotten Tomatoes path of the season page, such as `/tv/breaking_bad/s01`.", - "example": "/tv/breaking_bad/s01", + "source_url": { + "example": "https://clob.polymarket.com/spread?token_id=81927025054404355287140018940169293739219157042658469116956164881873598220211", "type": "string" }, - "season_number": { - "description": "Number of the season within the series.", - "example": 1, - "type": "integer" - }, - "title": { - "description": "Season title, such as `Season 1`.", - "example": "Season 1", - "type": "string" + "spread": { + "example": 0.51, + "type": "number" }, - "url": { - "description": "Rotten Tomatoes page URL of the season.", - "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01", + "token_id": { + "example": "81927025054404355287140018940169293739219157042658469116956164881873598220211", "type": "string" } }, "type": "object" }, - "rottentomatoes.SeriesResponse": { + "polymarket.TradeSummary": { "properties": { - "audience_score": { - "allOf": [ - { - "$ref": "#/definitions/rottentomatoes.Score" - } - ], - "description": "Popcornmeter audience score of the series." - }, - "cast": { - "description": "People in the cast of the series.", - "items": { - "$ref": "#/definitions/rottentomatoes.Person" - }, - "type": "array" - }, - "content_rating": { - "description": "Content rating of the series, such as `TV-14`.", - "example": "TV-14", + "asset": { + "description": "Token id of the outcome that was traded.", + "example": "90219780179584544303349592653084019110196125806694819219181473744581426681835", "type": "string" }, - "critics_score": { - "allOf": [ - { - "$ref": "#/definitions/rottentomatoes.Score" - } - ], - "description": "Tomatometer critics score of the series." + "bio": { + "description": "Biography text from the trader's Polymarket profile.", + "type": "string" }, - "description": { - "description": "Short synopsis of the series.", + "condition_id": { + "description": "Condition id of the market the trade was made on.", + "example": "0x3f2604d62ac3ee496ffd6d30156f30663fbaf22097f17f09d7364c35db255d2b", "type": "string" }, - "directors": { - "description": "Directors of the series.", - "items": { - "$ref": "#/definitions/rottentomatoes.Person" - }, - "type": "array" + "event_slug": { + "description": "URL slug of the event the trade belongs to.", + "example": "btc-updown-15m-1780835400", + "type": "string" }, - "ems_id": { - "description": "Rotten Tomatoes' own unique id of the series.", - "example": "6a74def4-dc62-319e-ae3d-360dcf360244", + "icon_url": { + "description": "URL of the icon image for the traded market.", "type": "string" }, - "end_date": { - "description": "Date the series ended, such as `2013-09-29`.", - "example": "2013-09-29", + "name": { + "description": "Display name from the trader's Polymarket profile.", + "example": "trader", "type": "string" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-06-07T14:46:16Z", + "outcome": { + "description": "Name of the outcome that was traded, for example `Up`.", + "example": "Up", "type": "string" }, - "genres": { - "description": "Genres of the series.", - "example": [ - "Crime" - ], - "items": { - "type": "string" - }, - "type": "array" + "outcome_index": { + "description": "Position of the traded outcome within the market's outcomes, starting at 0.", + "example": 0, + "type": "integer" }, - "image_url": { - "description": "URL of the series image.", - "type": "string" + "price": { + "description": "Price per share at which the trade was made.", + "example": 0.52744, + "type": "number" }, - "lifecycle": { - "description": "Airing status of the series, such as `NOT_AIRING`.", - "example": "NOT_AIRING", + "profile_image_optimized": { + "description": "URL of an optimized version of the trader's profile image.", "type": "string" }, - "media_type": { - "description": "Kind of title, such as `TvSeries`.", - "example": "TvSeries", + "profile_image_url": { + "description": "URL of the trader's profile image.", "type": "string" }, - "number_of_seasons": { - "description": "Number of seasons of the series.", - "example": 5, - "type": "integer" - }, - "path": { - "description": "Rotten Tomatoes path of the series page, such as `/tv/breaking_bad`.", - "example": "/tv/breaking_bad", + "proxy_wallet": { + "description": "Wallet address of the trader's Polymarket account.", + "example": "0x400e9b5e37f7209adb6938d49d63c48f154319d2", "type": "string" }, - "producers": { - "description": "Producers of the series.", - "items": { - "$ref": "#/definitions/rottentomatoes.Person" - }, - "type": "array" + "pseudonym": { + "description": "Pseudonym Polymarket assigned to the trader.", + "example": "Noisy-Dimple", + "type": "string" }, - "public_page_derived": { - "description": "Always `true`: the data comes from publicly visible Rotten Tomatoes pages.", - "example": true, - "type": "boolean" + "side": { + "description": "Side of the trade: `BUY` or `SELL`.", + "example": "BUY", + "type": "string" }, - "seasons": { - "description": "Seasons of the series, each with a link to its page.", - "items": { - "$ref": "#/definitions/rottentomatoes.TVSeason" - }, - "type": "array" + "size": { + "description": "Number of shares traded.", + "example": 25, + "type": "number" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.rottentomatoes.com/tv/breaking_bad", + "slug": { + "description": "URL slug of the market the trade was made on.", + "example": "btc-updown-15m-1780835400", "type": "string" }, - "start_date": { - "description": "Date the series first aired, such as `2008-01-20`.", - "example": "2008-01-20", - "type": "string" + "timestamp": { + "description": "Time the trade was made, in Unix seconds.", + "example": 1780835568, + "type": "integer" }, "title": { - "description": "Title of the series, as Rotten Tomatoes shows it.", - "example": "Breaking Bad", + "description": "Title of the market the trade was made on.", + "example": "Bitcoin Up or Down - June 7, 8:30AM-8:45AM ET", + "type": "string" + }, + "transaction_hash": { + "description": "Hash of the transaction that settled the trade.", + "example": "0x7ef90efb7e9f921509d8e82ecc76ed3d8384a3740d7ebd81d3bbbfd017899245", "type": "string" }, "url": { - "description": "Rotten Tomatoes page URL of the series.", - "example": "https://www.rottentomatoes.com/tv/breaking_bad", + "description": "Link to the traded event on polymarket.com.", + "example": "https://polymarket.com/event/btc-updown-15m-1780835400", "type": "string" + }, + "value": { + "description": "Value of the trade, equal to `size` multiplied by `price`.", + "example": 13.186, + "type": "number" } }, "type": "object" }, - "rottentomatoes.SeriesSummary": { + "polymarket.activityTradesResponseDoc": { "properties": { - "ems_id": { - "description": "Rotten Tomatoes' own unique id of the series.", - "example": "6a74def4-dc62-319e-ae3d-360dcf360244", - "type": "string" - }, - "path": { - "description": "Rotten Tomatoes path of the series page, such as `/tv/breaking_bad`.", - "example": "/tv/breaking_bad", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "description": "Title of the series, as Rotten Tomatoes shows it.", - "example": "Breaking Bad", - "type": "string" + "data": { + "$ref": "#/definitions/polymarket.ActivityTradesResponse" }, - "url": { - "description": "Rotten Tomatoes page URL of the series.", - "example": "https://www.rottentomatoes.com/tv/breaking_bad", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "rottentomatoes.Sitemap": { + "polymarket.batchTokenMidpointsResponseDoc": { "properties": { - "family": { - "example": "movie", - "type": "string" - }, - "index": { - "example": 0, + "code": { + "example": 200, "type": "integer" }, - "last_modified": { - "example": "2025-11-12", - "type": "string" - }, - "name": { - "example": "movie_0", - "type": "string" + "data": { + "$ref": "#/definitions/polymarket.BatchTokenMidpointsResponse" }, - "url": { - "example": "https://www.rottentomatoes.com/sitemaps/movie_0.xml", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "rottentomatoes.SitemapIndexResponse": { + "polymarket.batchTokenOrderBooksResponseDoc": { "properties": { - "fetched_at": { - "example": "2026-09-26T10:00:00Z", - "type": "string" - }, - "public_page_derived": { - "example": true, - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "sitemaps": { - "items": { - "$ref": "#/definitions/rottentomatoes.Sitemap" - }, - "type": "array" + "data": { + "$ref": "#/definitions/polymarket.BatchTokenOrderBooksResponse" }, - "source_url": { - "example": "https://www.rottentomatoes.com/sitemaps/sitemap.xml", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "rottentomatoes.SitemapURL": { + "polymarket.batchTokenPricesResponseDoc": { "properties": { - "last_modified": { - "example": "2025-11-12", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "url": { - "example": "https://www.rottentomatoes.com/m/inception", + "data": { + "$ref": "#/definitions/polymarket.BatchTokenPricesResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "rottentomatoes.SitemapURLResponse": { + "polymarket.batchTokenSpreadsResponseDoc": { "properties": { - "fetched_at": { - "example": "2026-09-26T10:00:00Z", - "type": "string" - }, - "has_more": { - "example": true, - "type": "boolean" - }, - "limit": { - "example": 100, + "code": { + "example": 200, "type": "integer" }, - "name": { - "example": "movie_0", - "type": "string" + "data": { + "$ref": "#/definitions/polymarket.BatchTokenSpreadsResponse" }, - "offset": { - "example": 0, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "polymarket.clobMarketResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "public_page_derived": { - "example": true, - "type": "boolean" + "data": { + "$ref": "#/definitions/polymarket.ClobMarketResponse" }, - "source_url": { - "example": "https://www.rottentomatoes.com/sitemaps/movie_0.xml", + "msg": { + "example": "OK", "type": "string" - }, - "total": { - "example": 16750, - "type": "integer" - }, - "urls": { - "items": { - "$ref": "#/definitions/rottentomatoes.SitemapURL" - }, - "type": "array" } }, "type": "object" }, - "rottentomatoes.TVSeason": { + "polymarket.eventDetailResponseDoc": { "properties": { - "name": { - "description": "Season name, such as `Season 1`.", - "example": "Season 1", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "path": { - "description": "Rotten Tomatoes path of the season page, such as `/tv/breaking_bad/s01`.", - "example": "/tv/breaking_bad/s01", - "type": "string" + "data": { + "$ref": "#/definitions/polymarket.EventDetailResponse" }, - "url": { - "description": "Rotten Tomatoes page URL of the season.", - "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "rottentomatoes.browseFiltersResponseDoc": { + "polymarket.eventsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/rottentomatoes.BrowseFiltersResponse" + "$ref": "#/definitions/polymarket.EventsResponse" }, "msg": { "example": "OK", @@ -184437,14 +193052,14 @@ }, "type": "object" }, - "rottentomatoes.browseResponseDoc": { + "polymarket.homepageFeedResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/rottentomatoes.BrowseResponse" + "$ref": "#/definitions/polymarket.HomepageFeedResponse" }, "msg": { "example": "OK", @@ -184453,14 +193068,14 @@ }, "type": "object" }, - "rottentomatoes.criticsAuthorsResponseDoc": { + "polymarket.leaderboardResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/rottentomatoes.CriticsAuthorsResponse" + "$ref": "#/definitions/polymarket.LeaderboardResponse" }, "msg": { "example": "OK", @@ -184469,14 +193084,14 @@ }, "type": "object" }, - "rottentomatoes.editorialContentResponseDoc": { + "polymarket.macroDashboardResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/rottentomatoes.EditorialContentResponse" + "$ref": "#/definitions/polymarket.MacroDashboardResponse" }, "msg": { "example": "OK", @@ -184485,14 +193100,14 @@ }, "type": "object" }, - "rottentomatoes.editorialContentTypesResponseDoc": { + "polymarket.marketDetailResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/rottentomatoes.EditorialContentTypesResponse" + "$ref": "#/definitions/polymarket.MarketDetailResponse" }, "msg": { "example": "OK", @@ -184501,14 +193116,14 @@ }, "type": "object" }, - "rottentomatoes.editorialDetailResponseDoc": { + "polymarket.marketLiquidityResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/rottentomatoes.EditorialDetailResponse" + "$ref": "#/definitions/polymarket.MarketLiquidityResponse" }, "msg": { "example": "OK", @@ -184517,14 +193132,14 @@ }, "type": "object" }, - "rottentomatoes.editorialSearchResponseDoc": { + "polymarket.marketsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/rottentomatoes.EditorialSearchResponse" + "$ref": "#/definitions/polymarket.MarketsResponse" }, "msg": { "example": "OK", @@ -184533,14 +193148,14 @@ }, "type": "object" }, - "rottentomatoes.editorialSectionResponseDoc": { + "polymarket.predictionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/rottentomatoes.EditorialSectionResponse" + "$ref": "#/definitions/polymarket.PredictionsResponse" }, "msg": { "example": "OK", @@ -184549,14 +193164,14 @@ }, "type": "object" }, - "rottentomatoes.editorialTaxonomiesResponseDoc": { + "polymarket.publicDataResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/rottentomatoes.EditorialTaxonomiesResponse" + "$ref": "#/definitions/polymarket.PublicDataResponse" }, "msg": { "example": "OK", @@ -184565,14 +193180,14 @@ }, "type": "object" }, - "rottentomatoes.editorialTermsResponseDoc": { + "polymarket.rewardsMarketResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/rottentomatoes.EditorialTermsResponse" + "$ref": "#/definitions/polymarket.RewardsMarketResponse" }, "msg": { "example": "OK", @@ -184581,14 +193196,14 @@ }, "type": "object" }, - "rottentomatoes.episodeResponseDoc": { + "polymarket.rewardsMarketsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/rottentomatoes.EpisodeResponse" + "$ref": "#/definitions/polymarket.RewardsMarketsResponse" }, "msg": { "example": "OK", @@ -184597,14 +193212,14 @@ }, "type": "object" }, - "rottentomatoes.movieResponseDoc": { + "polymarket.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/rottentomatoes.MovieResponse" + "$ref": "#/definitions/polymarket.SearchResponse" }, "msg": { "example": "OK", @@ -184613,14 +193228,14 @@ }, "type": "object" }, - "rottentomatoes.personResponseDoc": { + "polymarket.similarEventsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/rottentomatoes.PersonResponse" + "$ref": "#/definitions/polymarket.SimilarEventsResponse" }, "msg": { "example": "OK", @@ -184629,14 +193244,14 @@ }, "type": "object" }, - "rottentomatoes.reviewsResponseDoc": { + "polymarket.tagResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/rottentomatoes.ReviewsResponse" + "$ref": "#/definitions/polymarket.TagResponse" }, "msg": { "example": "OK", @@ -184645,14 +193260,14 @@ }, "type": "object" }, - "rottentomatoes.searchResponseDoc": { + "polymarket.tagsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/rottentomatoes.SearchResponse" + "$ref": "#/definitions/polymarket.TagsResponse" }, "msg": { "example": "OK", @@ -184661,14 +193276,14 @@ }, "type": "object" }, - "rottentomatoes.seasonResponseDoc": { + "polymarket.tokenMidpointResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/rottentomatoes.SeasonResponse" + "$ref": "#/definitions/polymarket.TokenMidpointResponse" }, "msg": { "example": "OK", @@ -184677,14 +193292,14 @@ }, "type": "object" }, - "rottentomatoes.seriesResponseDoc": { + "polymarket.tokenOrderBookResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/rottentomatoes.SeriesResponse" + "$ref": "#/definitions/polymarket.TokenOrderBookResponse" }, "msg": { "example": "OK", @@ -184693,14 +193308,14 @@ }, "type": "object" }, - "rottentomatoes.sitemapIndexResponseDoc": { + "polymarket.tokenPriceHistoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/rottentomatoes.SitemapIndexResponse" + "$ref": "#/definitions/polymarket.TokenPriceHistoryResponse" }, "msg": { "example": "OK", @@ -184709,14 +193324,14 @@ }, "type": "object" }, - "rottentomatoes.sitemapURLResponseDoc": { + "polymarket.tokenPriceResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/rottentomatoes.SitemapURLResponse" + "$ref": "#/definitions/polymarket.TokenPriceResponse" }, "msg": { "example": "OK", @@ -184725,854 +193340,710 @@ }, "type": "object" }, - "rover.ProfileResponse": { + "polymarket.tokenSpreadResponseDoc": { "properties": { - "bio": { - "type": "string" - }, - "city": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "is_star_sitter": { - "type": "boolean" + "data": { + "$ref": "#/definitions/polymarket.TokenSpreadResponse" }, - "name": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "popeyes.Allergens": { + "properties": { + "celery": { + "type": "number" }, - "neighborhood": { - "type": "string" + "eggs": { + "type": "number" }, - "price_unit": { - "type": "string" + "fish": { + "type": "number" }, - "profile_image": { - "type": "string" + "gluten": { + "type": "number" }, - "rating": { + "lupin": { "type": "number" }, - "repeat_client_count": { - "type": "integer" + "milk": { + "type": "number" }, - "review_count": { - "type": "integer" + "mustard": { + "type": "number" }, - "reviews": { - "items": { - "$ref": "#/definitions/rover.ReviewExcerpt" - }, - "type": "array" + "peanuts": { + "type": "number" }, - "services": { - "items": { - "$ref": "#/definitions/rover.ServiceOffering" - }, - "type": "array" + "sesame": { + "type": "number" }, - "slug": { - "type": "string" + "shellfish": { + "type": "number" }, - "starting_price": { + "soy": { "type": "number" }, - "state": { - "type": "string" + "sulphur_dioxide": { + "type": "number" }, - "url": { - "type": "string" + "tree_nuts": { + "type": "number" }, - "years_experience": { - "type": "integer" + "wheat": { + "type": "number" } }, "type": "object" }, - "rover.ReviewExcerpt": { + "popeyes.DayHours": { "properties": { - "date": { - "type": "string" - }, - "rating": { - "type": "number" - }, - "reviewer": { + "close": { + "example": "23:00:00", "type": "string" }, - "service_type": { + "day": { + "example": "monday", "type": "string" }, - "text": { + "open": { + "example": "07:00:00", "type": "string" } }, "type": "object" }, - "rover.SearchResponse": { + "popeyes.FAQEntry": { "properties": { - "location": { + "answer": { + "description": "Answer is the FAQ's own answer copy, plain-text extracted from\nPortable Text (links are dropped -- this is a display string, not a\nre-editable document).", "type": "string" }, - "page": { - "type": "integer" - }, - "page_count": { - "type": "integer" - }, - "per_page": { - "type": "integer" + "id": { + "example": "032999c6-ba27-4f8e-b20e-a4cb28e3c37c", + "type": "string" }, - "service_type": { + "question": { + "example": "How do I remove items from my cart?", "type": "string" + } + }, + "type": "object" + }, + "popeyes.FAQResponse": { + "properties": { + "count": { + "example": 20, + "type": "integer" }, - "sitters": { + "entries": { "items": { - "$ref": "#/definitions/rover.SitterSummary" + "$ref": "#/definitions/popeyes.FAQEntry" }, "type": "array" }, - "total_count": { - "type": "integer" + "fetched_at": { + "type": "string" + }, + "has_more": { + "description": "HasMore is a paging heuristic -- see OffersResponse.HasMore.", + "example": true, + "type": "boolean" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "rover.ServiceOffering": { + "popeyes.LocationResponse": { "properties": { - "name": { + "fetched_at": { "type": "string" }, - "price": { - "type": "number" + "restaurant": { + "$ref": "#/definitions/popeyes.Restaurant" }, - "unit": { + "source_url": { "type": "string" } }, "type": "object" }, - "rover.SitterSummary": { + "popeyes.LocationsResponse": { "properties": { - "city": { - "type": "string" + "count": { + "example": 20, + "type": "integer" }, - "description": { + "fetched_at": { "type": "string" }, - "is_star_sitter": { + "has_more": { + "example": true, "type": "boolean" }, - "name": { - "type": "string" - }, - "neighborhood": { - "type": "string" - }, - "price_unit": { - "type": "string" - }, - "profile_image": { - "type": "string" + "restaurants": { + "items": { + "$ref": "#/definitions/popeyes.Restaurant" + }, + "type": "array" }, - "profile_url": { + "source_url": { "type": "string" }, - "rating": { - "type": "number" - }, - "repeat_client_count": { - "type": "integer" - }, - "review_count": { + "total_count": { + "description": "TotalCount is how many restaurants matched upstream; it can exceed\nCount when more results exist than max_results asked for.", + "example": 236, "type": "integer" + } + }, + "type": "object" + }, + "popeyes.MenuCategory": { + "properties": { + "featured": { + "type": "boolean" }, - "service_type": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "starting_price": { - "type": "number" - }, - "state": { + "id": { "type": "string" }, - "years_experience": { - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/popeyes.MenuItem" + }, + "type": "array" }, - "zip": { + "name": { + "example": "Chicken Wraps", "type": "string" } }, "type": "object" }, - "rover.TrainerEducation": { + "popeyes.MenuItem": { "properties": { - "organization": { + "allergens": { + "$ref": "#/definitions/popeyes.Allergens" + }, + "id": { + "example": "item_103182", "type": "string" }, - "text": { + "image_url": { + "type": "string" + }, + "name": { + "example": "Cheese Bites", + "type": "string" + }, + "nutrition": { + "$ref": "#/definitions/popeyes.Nutrition" + }, + "price": { + "$ref": "#/definitions/popeyes.Price" + }, + "type": { + "example": "ITEM", "type": "string" } }, "type": "object" }, - "rover.TrainerProfileResponse": { + "popeyes.MenuResponse": { "properties": { - "availability_details": { - "type": "string" - }, - "behaviors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "education": { + "categories": { "items": { - "$ref": "#/definitions/rover.TrainerEducation" + "$ref": "#/definitions/popeyes.MenuCategory" }, "type": "array" }, - "experience_details": { + "currency": { + "example": "USD", "type": "string" }, - "headline": { + "fetched_at": { "type": "string" }, - "methodology": { - "type": "string" + "item_count": { + "example": 120, + "type": "integer" }, - "methodology_details": { + "source_url": { "type": "string" }, - "name": { + "store_id": { + "example": "14156", "type": "string" + } + }, + "type": "object" + }, + "popeyes.Nutrition": { + "properties": { + "calories": { + "example": 560, + "type": "number" }, - "profile_image": { - "type": "string" + "carbohydrates_g": { + "example": 23, + "type": "number" }, - "rating": { + "cholesterol_mg": { + "example": 75, "type": "number" }, - "repeat_client_count": { - "type": "integer" + "fat_g": { + "example": 44, + "type": "number" }, - "review_count": { - "type": "integer" + "fiber_g": { + "example": 2, + "type": "number" }, - "skills": { - "items": { - "type": "string" - }, - "type": "array" + "proteins_g": { + "example": 17, + "type": "number" }, - "slug": { - "type": "string" + "saturated_fat_g": { + "type": "number" }, - "url": { - "type": "string" + "serving_weight_g": { + "type": "number" }, - "years_of_training": { - "type": "integer" - } - }, - "type": "object" - }, - "rover.TrainerSearchResponse": { - "properties": { - "location": { - "type": "string" + "sodium_mg": { + "example": 1470, + "type": "number" }, - "trainers": { - "items": { - "$ref": "#/definitions/rover.TrainerSummary" - }, - "type": "array" + "sugar_g": { + "example": 2, + "type": "number" + }, + "trans_fat_g": { + "example": 1, + "type": "number" } }, "type": "object" }, - "rover.TrainerSummary": { + "popeyes.Offer": { "properties": { - "behaviors": { + "daypart": { + "description": "Daypart restricts the offer to specific times of day (e.g.\n[\"allDay\"]), when Popeyes publishes a restriction.", "items": { "type": "string" }, "type": "array" }, - "city": { - "type": "string" - }, - "experience_details": { + "description": { + "description": "Description is the offer's own short copy (e.g. what's included),\nwhen Popeyes publishes one.", + "example": "3 Piece Chicken", "type": "string" }, - "headline": { + "id": { + "example": "00a369e5-1b33-4d35-b153-e372e3ebf17f", "type": "string" }, - "methodology": { - "type": "string" + "mobile_order_only": { + "description": "MobileOrderOnly is true when the offer is only redeemable through\nPopeyes' own mobile ordering flow.", + "type": "boolean" }, "name": { + "example": "3Pc Signature Chicken for $5", "type": "string" }, - "price_unit": { - "type": "string" - }, - "profile_image": { - "type": "string" - }, - "profile_url": { + "offer_tag": { + "description": "OfferTag is Popeyes' own short badge for the offer's kind (e.g.\nVALUE_DEAL, PERCENTAGE_OFF), when published.", + "example": "VALUE_DEAL", "type": "string" }, - "rating": { + "price": { + "example": 5, "type": "number" }, - "repeat_client_count": { - "type": "integer" - }, - "review_count": { + "price_cents": { + "description": "PriceCents/Price are the offer's flat price when it has one (e.g. \"3Pc\nSignature Chicken for $5\" prices at 500 cents). A value of 0 does not\nmean free -- it means the offer's discount is not expressed as a flat\nprice (see OfferTag/Name instead, e.g. a percentage-off or BOGO deal).", + "example": 500, "type": "integer" }, - "skills": { - "items": { - "type": "string" - }, - "type": "array" - }, - "slug": { + "redemption_type": { + "description": "RedemptionType is how the offer is redeemed -- observed live values\ninclude STANDARD (in-app/online) and PAPER_COUPON.", + "example": "STANDARD", "type": "string" }, - "starting_price": { - "type": "number" + "requires_authentication": { + "description": "RequiresAuthentication is true when the offer's own published rules\nmark it as needing a signed-in Popeyes Rewards account to redeem --\nderived from the offer's rules, not assumed. This build does not\ncall any account/loyalty-scoped API; it only reports what the\noffer's own public CMS record says about itself.", + "type": "boolean" }, - "state": { + "section": { + "description": "Section is the offer catalog's own grouping (e.g. \"For Two\"), when\nPopeyes assigns one -- most offers do not have one.", + "example": "For Two", "type": "string" }, - "years_experience": { - "type": "integer" - }, - "zip": { + "short_code": { + "description": "ShortCode is the offer's own promo/redemption code, when published.", + "example": "8438", "type": "string" } }, "type": "object" }, - "rover.profileResponseDoc": { + "popeyes.OffersResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 20, "type": "integer" }, - "data": { - "$ref": "#/definitions/rover.ProfileResponse" - }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "rover.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/rover.SearchResponse" + "has_more": { + "description": "HasMore is true when this page returned as many offers as Limit\nasked for, meaning more may exist at the next Offset. Sanity's\nGraphQL API for this dataset does not publish a total count for\nallSystemwideOffers, so this is a paging heuristic, not an exact\ntotal.", + "example": true, + "type": "boolean" }, - "msg": { - "example": "OK", + "offers": { + "items": { + "$ref": "#/definitions/popeyes.Offer" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "rover.trainerProfileResponseDoc": { + "popeyes.Price": { "properties": { - "code": { - "example": 200, + "default": { + "example": 3.99, + "type": "number" + }, + "default_cents": { + "example": 399, "type": "integer" }, - "data": { - "$ref": "#/definitions/rover.TrainerProfileResponse" + "max": { + "type": "number" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "rover.trainerSearchResponseDoc": { - "properties": { - "code": { - "example": 200, + "max_cents": { "type": "integer" }, - "data": { - "$ref": "#/definitions/rover.TrainerSearchResponse" + "min": { + "type": "number" }, - "msg": { - "example": "OK", - "type": "string" + "min_cents": { + "type": "integer" } }, "type": "object" }, - "rte.AuthorResponse": { + "popeyes.Promotion": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" + "bonus_points": { + "description": "BonusPoints is set for a flat bonus-points promotion.", + "example": 300, + "type": "integer" }, - "image_url": { + "end_date": { + "example": "2021-08-16T04:00:00.000Z", "type": "string" }, - "name": { + "id": { + "example": "11d41e3c-75b5-458c-8166-7cdfb20a635a", "type": "string" }, - "role": { + "message": { + "description": "Message is the promotion's own display copy, when Popeyes publishes\none distinct from Name.", + "example": "Get Double Bonus Points on Your Cart, minimum $20", "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "salon.AuthorArticle": { - "properties": { - "title": { + "name": { + "description": "Name is the promotion's own internal/public label.", + "example": "Get Double Bonus Points on Your Cart, minimum $20", "type": "string" }, - "url": { + "points_multiplier": { + "description": "PointsMultiplier is set for a \"Nx points\" style promotion (e.g. 2 for\ndouble points); mutually exclusive in practice with BonusPoints.", + "example": 2, + "type": "number" + }, + "start_date": { + "description": "StartDate/EndDate bound the promotion's active window, when Popeyes\npublishes one -- both empty means no published window restriction.", + "example": "2021-08-02T04:00:00.000Z", "type": "string" } }, "type": "object" }, - "salon.AuthorResponse": { + "popeyes.PromotionsResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/salon.AuthorArticle" - }, - "type": "array" - }, - "bio": { - "type": "string" - }, - "image_url": { - "type": "string" + "count": { + "example": 20, + "type": "integer" }, - "job_title": { + "fetched_at": { "type": "string" }, - "name": { - "type": "string" + "has_more": { + "description": "HasMore is a paging heuristic -- see OffersResponse.HasMore.", + "example": true, + "type": "boolean" }, - "same_as": { + "promotions": { "items": { - "type": "string" + "$ref": "#/definitions/popeyes.Promotion" }, "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "samsclub.CategoryBreadcrumbEntry": { - "properties": { - "id": { - "example": "100001", - "type": "string" - }, - "name": { - "example": "All Departments", - "type": "string" - }, - "url": { - "example": "https://www.samsclub.com/all-departments", + "source_url": { "type": "string" } }, "type": "object" }, - "samsclub.CategoryProduct": { + "popeyes.Quest": { "properties": { - "availability": { - "example": "IN_STOCK", - "type": "string" + "bonus_points": { + "description": "BonusPoints is the loyalty points awarded on completion, when the\nincentive is points-based.", + "example": 550, + "type": "integer" }, - "brand": { - "example": "Tide", + "id": { + "example": "38fe1c9c-6c2b-4d1b-ab86-7bf61105fdfb", "type": "string" }, - "currency_code": { - "example": "USD", + "incentive_type": { + "description": "IncentiveType is the reward mechanic -- observed live value is\nBONUS_POINTS; kept as a raw pass-through string since other values may\nexist that this pass did not observe.", + "example": "BONUS_POINTS", "type": "string" }, - "current_price": { - "example": 19.98, - "type": "number" - }, - "image_url": { - "type": "string" + "is_sequential": { + "description": "IsSequential is true when the quest's steps must be completed in\norder.", + "type": "boolean" }, - "item_id": { - "example": "13610014888", + "must_activate_by": { + "description": "MustActivateBy is the last date a member could opt in to this quest,\nwhen Popeyes publishes one.", "type": "string" }, "name": { - "example": "Tide Power PODS + Ultra OXI Laundry Detergent Pacs, 72 ct.", + "description": "Name is the quest's own public display copy.", + "example": "July Challenge: Make Two Purchases, Get FREE Chicken Sandwich in the form of 550 Bonus Points", "type": "string" }, - "on_sale": { - "example": true, + "on_distinct_purchases": { + "description": "OnDistinctPurchases is true when each qualifying step must be a\nseparate purchase (observed true on every live quest sampled).", "type": "boolean" }, - "rating": { - "example": 4.8, - "type": "number" - }, - "regular_price": { - "example": 24.98, - "type": "number" - }, - "review_count": { - "example": 4122, + "step_count": { + "description": "StepCount is how many steps make up the quest. This endpoint does not\nexpose each step's own purchase-requirement rules.", "type": "integer" - }, - "savings_amount": { - "example": 5, - "type": "number" - }, - "type": { - "example": "Laundry Detergents", - "type": "string" - }, - "unit_price_text": { - "example": "$0.28/ea", - "type": "string" - }, - "url": { - "example": "https://www.samsclub.com/ip/Tide-Power-PODS-Ultra-OXI-Laundry-Detergent-Pacs-72-ct/13610014888", - "type": "string" } }, "type": "object" }, - "samsclub.CategoryResponse": { + "popeyes.QuestsResponse": { "properties": { - "breadcrumb": { - "items": { - "$ref": "#/definitions/samsclub.CategoryBreadcrumbEntry" - }, - "type": "array" - }, - "category_id": { - "example": "15660127", - "type": "string" - }, "count": { - "example": 47, + "example": 10, "type": "integer" }, "fetched_at": { "type": "string" }, "has_more": { - "example": true, + "description": "HasMore is a paging heuristic -- see OffersResponse.HasMore.", + "example": false, "type": "boolean" }, - "max_page": { - "example": 16, - "type": "integer" - }, - "page": { - "example": 1, - "type": "integer" - }, - "products": { + "quests": { "items": { - "$ref": "#/definitions/samsclub.CategoryProduct" + "$ref": "#/definitions/popeyes.Quest" }, "type": "array" }, "source_url": { "type": "string" - }, - "title": { - "example": "Results for \"Savings\"", - "type": "string" - }, - "total_count": { - "example": 687, - "type": "integer" } }, "type": "object" }, - "samsclub.ContentResponse": { + "popeyes.Restaurant": { "properties": { - "breadcrumb": { - "items": { - "$ref": "#/definitions/samsclub.CategoryBreadcrumbEntry" - }, - "type": "array" + "address": { + "example": "111 Fulton St", + "type": "string" }, - "category_links": { - "items": { - "$ref": "#/definitions/samsclub.DepartmentLink" - }, - "type": "array" + "address2": { + "type": "string" }, - "fetched_at": { + "city": { + "example": "New York", "type": "string" }, - "id": { - "example": "16050279", + "country": { + "example": "USA", "type": "string" }, - "shelves": { - "items": { - "$ref": "#/definitions/samsclub.RelatedShelf" - }, - "type": "array" + "has_breakfast": { + "example": false, + "type": "boolean" }, - "source_url": { - "type": "string" + "has_delivery": { + "example": true, + "type": "boolean" + }, + "has_drive_thru": { + "example": false, + "type": "boolean" + }, + "has_playground": { + "example": false, + "type": "boolean" + }, + "has_takeout": { + "example": true, + "type": "boolean" + }, + "has_wifi": { + "example": false, + "type": "boolean" + }, + "hours": { + "$ref": "#/definitions/popeyes.RestaurantHours" }, - "title": { - "example": "Savings Center", - "type": "string" - } - }, - "type": "object" - }, - "samsclub.Department": { - "properties": { "id": { - "example": "1444", + "example": "restaurant_242928", "type": "string" }, - "image_url": { - "type": "string" + "is_dark_kitchen": { + "example": false, + "type": "boolean" + }, + "is_halal": { + "example": false, + "type": "boolean" + }, + "latitude": { + "example": 40.709873, + "type": "number" + }, + "longitude": { + "example": -74.006601, + "type": "number" }, "name": { - "example": "Grocery", + "example": "111 Fulton St New York, New York 10038 - USA", "type": "string" }, - "subcategories": { - "items": { - "$ref": "#/definitions/samsclub.DepartmentLink" - }, - "type": "array" - }, - "type": { - "example": "browse", + "operator": { + "description": "Operator is the franchise group operating this location, when RBI\npublishes one.", "type": "string" }, - "url": { - "example": "https://www.samsclub.com/browse/1444", + "phone": { + "example": "929-579-0553", "type": "string" - } - }, - "type": "object" - }, - "samsclub.DepartmentLink": { - "properties": { - "id": { - "example": "1444", + }, + "postal_code": { + "example": "10038", "type": "string" }, - "name": { - "example": "Grocery", + "state": { + "example": "NY", "type": "string" }, - "type": { - "example": "browse", + "store_id": { + "example": "14156", "type": "string" }, - "url": { - "example": "https://www.samsclub.com/browse/1444", + "website_url": { + "example": "https://www.popeyes.com/store-locator/store/restaurant_242928", "type": "string" } }, "type": "object" }, - "samsclub.DepartmentsResponse": { + "popeyes.RestaurantHours": { "properties": { - "departments": { + "curbside": { "items": { - "$ref": "#/definitions/samsclub.Department" + "$ref": "#/definitions/popeyes.DayHours" }, "type": "array" }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "samsclub.Product": { - "properties": { - "availability": { - "example": "IN_STOCK", - "type": "string" - }, - "brand": { - "example": "Tide", - "type": "string" - }, - "category": { - "example": [ - "All Departments", - "Household Essentials", - "Laundry Supplies", - "Laundry Detergent" - ], + "delivery": { "items": { - "type": "string" + "$ref": "#/definitions/popeyes.DayHours" }, "type": "array" }, - "currency_code": { - "example": "USD", - "type": "string" - }, - "current_price": { - "example": 19.98, - "type": "number" - }, - "description": { - "type": "string" - }, - "highlights": { + "dining_room": { "items": { - "type": "string" + "$ref": "#/definitions/popeyes.DayHours" }, "type": "array" }, - "images": { + "drive_thru": { "items": { - "type": "string" + "$ref": "#/definitions/popeyes.DayHours" }, "type": "array" - }, - "item_id": { - "example": "13610014888", - "type": "string" - }, - "item_number": { - "example": "990471947", - "type": "string" - }, - "name": { - "example": "Tide Power PODS + Ultra OXI Laundry Detergent Pacs, 72 ct.", - "type": "string" - }, - "on_sale": { - "example": true, - "type": "boolean" - }, - "rating": { - "example": 4.8, - "type": "number" - }, - "regular_price": { - "example": 24.98, - "type": "number" - }, - "review_count": { - "example": 4122, - "type": "integer" - }, - "savings_amount": { - "example": 5, - "type": "number" - }, - "unit_price": { - "example": 0.28, - "type": "number" - }, - "unit_price_text": { - "example": "$0.28/ea", - "type": "string" - }, - "upc": { - "example": "030772073438", - "type": "string" - }, - "url": { - "example": "https://www.samsclub.com/ip/13610014888", - "type": "string" } }, "type": "object" }, - "samsclub.RelatedItem": { + "popeyes.Reward": { "properties": { - "availability": { - "example": "IN_STOCK", - "type": "string" - }, - "currency_code": { - "example": "USD", + "id": { + "example": "09acd09f-2ca5-4259-934c-0345356b2bb0", "type": "string" }, - "image_url": { - "type": "string" + "incentive_not_in_menu": { + "description": "IncentiveNotInMenu is true when Popeyes marks the reward's item as\nnot otherwise purchasable on the regular menu (a rewards-exclusive\nitem or bundle).", + "type": "boolean" }, - "item_id": { - "example": "13576901230", - "type": "string" + "mobile_order_only": { + "description": "MobileOrderOnly is true when the reward is only redeemable through\nPopeyes' own mobile ordering flow, when Popeyes publishes that\nrestriction.", + "type": "boolean" }, "name": { - "example": "Tide PODS Laundry Detergent Pacs, Spring Meadow, 156 ct.", + "description": "Name is the reward's own public display copy -- typically the menu\nitem or combo name it redeems.", + "example": "Large Mashed Potatoes", "type": "string" }, - "price": { - "example": 29.98, - "type": "number" - }, - "rating": { - "example": 4.8184, - "type": "number" - }, - "review_count": { - "example": 13701, + "points": { + "description": "Points is the loyalty points cost to redeem, from the reward's own\nLoyaltyPoints rule.", + "example": 600, "type": "integer" - }, - "url": { - "example": "https://www.samsclub.com/ip/Tide-PODS-Laundry-Detergent-Pacs-Spring-Meadow-156-ct/13576901230", - "type": "string" } }, "type": "object" }, - "samsclub.RelatedItemsResponse": { + "popeyes.RewardsResponse": { "properties": { + "count": { + "example": 20, + "type": "integer" + }, "fetched_at": { "type": "string" }, - "item_id": { - "example": "13610014888", - "type": "string" + "has_more": { + "description": "HasMore is a paging heuristic -- see OffersResponse.HasMore.", + "example": true, + "type": "boolean" }, - "shelves": { + "rewards": { "items": { - "$ref": "#/definitions/samsclub.RelatedShelf" + "$ref": "#/definitions/popeyes.Reward" }, "type": "array" }, @@ -185582,386 +194053,765 @@ }, "type": "object" }, - "samsclub.RelatedShelf": { + "popeyes.faqResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/samsclub.RelatedItem" - }, - "type": "array" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "title": { - "example": "Members also considered", - "type": "string" + "data": { + "$ref": "#/definitions/popeyes.FAQResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "samsclub.categoryResponseDoc": { + "popeyes.locationResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/samsclub.CategoryResponse" + "$ref": "#/definitions/popeyes.LocationResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "samsclub.contentResponseDoc": { + "popeyes.locationsResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/samsclub.ContentResponse" + "$ref": "#/definitions/popeyes.LocationsResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "samsclub.departmentsResponseDoc": { + "popeyes.menuResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/samsclub.DepartmentsResponse" + "$ref": "#/definitions/popeyes.MenuResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "samsclub.productResponseDoc": { + "popeyes.offersResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/samsclub.Product" + "$ref": "#/definitions/popeyes.OffersResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "samsclub.relatedItemsResponseDoc": { + "popeyes.promotionsResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/samsclub.RelatedItemsResponse" + "$ref": "#/definitions/popeyes.PromotionsResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "sbsnews.AuthorArticle": { + "popeyes.questsResponseDoc": { "properties": { - "published_at": { - "type": "string" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "summary": { - "type": "string" + "data": { + "$ref": "#/definitions/popeyes.QuestsResponse" }, - "title": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "popeyes.rewardsResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/popeyes.RewardsResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "sbsnews.AuthorResponse": { + "popularTrend.CountryIndustryMeta": { "properties": { - "articles": { + "country": { + "description": "Countries TikTok Creative Center offers as filters, each with its code and name.", "items": { - "$ref": "#/definitions/sbsnews.AuthorArticle" + "$ref": "#/definitions/popularTrend.CountryIndustryMetaItem" }, "type": "array" }, - "biography": { - "type": "string" - }, - "has_next_page": { - "type": "boolean" - }, - "headshot_url": { + "industry": { + "description": "Industries TikTok Creative Center offers as filters, each with its id and name.", + "items": { + "$ref": "#/definitions/popularTrend.CountryIndustryMetaItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "popularTrend.CountryIndustryMetaItem": { + "properties": { + "id": { + "description": "Country code or industry id, for example `AR` or `22000000000`.", "type": "string" }, - "name": { + "value": { + "description": "Display name of the country or industry.", "type": "string" - }, - "page": { + } + }, + "type": "object" + }, + "popularTrend.TopAdsAnalysisPoint": { + "properties": { + "second": { + "description": "Second of the ad video the point refers to.", "type": "integer" }, - "url": { - "type": "string" + "value": { + "description": "Value of the selected metric at that second.", + "type": "number" } }, "type": "object" }, - "sciencealert.AuthorResponse": { + "popularTrend.TopAdsAnalysisResp": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" + "code": { + "type": "integer" }, - "biography": { - "items": { - "type": "string" + "data": { + "description": "Time analysis of the ad for the chosen metric, with its percentile, chart points and highlighted seconds.", + "properties": { + "analysis": { + "items": { + "$ref": "#/definitions/popularTrend.TopAdsAnalysisPoint" + }, + "type": "array" + }, + "duration": { + "type": "number" + }, + "highlight": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "metric": { + "type": "string" + }, + "metric_label": { + "type": "string" + }, + "percentile": { + "type": "number" + }, + "percentile_data": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "type": "object" + }, + "percentile_metric": { + "type": "string" + }, + "period_type": { + "type": "integer" + } }, - "type": "array" - }, - "has_next_page": { - "type": "boolean" + "type": "object" }, - "image_url": { + "msg": { "type": "string" }, - "name": { + "request_id": { + "description": "Request id returned by TikTok Creative Center.", "type": "string" - }, - "page": { + } + }, + "type": "object" + }, + "popularTrend.TopAdsDetailResp": { + "properties": { + "code": { "type": "integer" }, - "slug": { - "type": "string" + "data": { + "allOf": [ + { + "$ref": "#/definitions/popularTrend.TopAdsMaterial" + } + ], + "description": "Details of the requested top ad." }, - "social_links": { - "items": { - "$ref": "#/definitions/sciencealert.AuthorSocialLink" - }, - "type": "array" + "msg": { + "type": "string" }, - "url": { + "request_id": { + "description": "Request id returned by TikTok Creative Center.", "type": "string" } }, "type": "object" }, - "sciencealert.AuthorSocialLink": { + "popularTrend.TopAdsFilterItem": { "properties": { - "platform": { + "has_conversion": { + "description": "Whether the objective is one that tracks conversions. Only set on objective options.", + "type": "boolean" + }, + "id": { + "description": "Filter option id in TikTok's own format, a string or a number depending on the filter.", + "type": "object" + }, + "label": { + "description": "Label key TikTok uses for the option.", "type": "string" }, - "url": { + "parent_id": { + "description": "Id of the parent option, for example the top-level industry of a sub-industry.", + "type": "object" + }, + "value": { + "description": "Display value of the option, always returned as a string.", "type": "string" } }, "type": "object" }, - "scmp.ArticleResponse": { + "popularTrend.TopAdsFiltersResp": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" + "code": { + "type": "integer" }, - "content_locked": { - "type": "boolean" + "data": { + "description": "Filter options available for top ads, grouped by filter name.", + "properties": { + "ad_format": { + "items": { + "$ref": "#/definitions/popularTrend.TopAdsFilterItem" + }, + "type": "array" + }, + "ad_language": { + "items": { + "$ref": "#/definitions/popularTrend.TopAdsFilterItem" + }, + "type": "array" + }, + "analysis_metric": { + "items": { + "$ref": "#/definitions/popularTrend.TopAdsFilterItem" + }, + "type": "array" + }, + "country": { + "items": { + "$ref": "#/definitions/popularTrend.TopAdsFilterItem" + }, + "type": "array" + }, + "duration": { + "items": { + "$ref": "#/definitions/popularTrend.TopAdsFilterItem" + }, + "type": "array" + }, + "industry": { + "items": { + "$ref": "#/definitions/popularTrend.TopAdsFilterItem" + }, + "type": "array" + }, + "like": { + "items": { + "$ref": "#/definitions/popularTrend.TopAdsFilterItem" + }, + "type": "array" + }, + "objective": { + "items": { + "$ref": "#/definitions/popularTrend.TopAdsFilterItem" + }, + "type": "array" + }, + "order_by": { + "items": { + "$ref": "#/definitions/popularTrend.TopAdsFilterItem" + }, + "type": "array" + }, + "pattern_label": { + "items": { + "$ref": "#/definitions/popularTrend.TopAdsFilterItem" + }, + "type": "array" + }, + "period": { + "items": { + "$ref": "#/definitions/popularTrend.TopAdsFilterItem" + }, + "type": "array" + } + }, + "type": "object" }, - "description": { + "msg": { "type": "string" }, - "image_url": { + "request_id": { + "description": "Request id returned by TikTok Creative Center.", "type": "string" + } + }, + "type": "object" + }, + "popularTrend.TopAdsListResp": { + "properties": { + "code": { + "type": "integer" }, - "paragraphs": { - "items": { - "type": "string" + "data": { + "description": "Page of top ads with its paging information.", + "properties": { + "materials": { + "items": { + "$ref": "#/definitions/popularTrend.TopAdsMaterial" + }, + "type": "array" + }, + "pagination": { + "$ref": "#/definitions/popularTrend.TopAdsPagination" + } }, - "type": "array" + "type": "object" }, - "paywall_types": { - "items": { - "type": "string" - }, - "type": "array" + "msg": { + "type": "string" }, - "published_at": { + "request_id": { + "description": "Request id returned by TikTok Creative Center.", "type": "string" + } + }, + "type": "object" + }, + "popularTrend.TopAdsLocationInfoResp": { + "properties": { + "code": { + "type": "integer" }, - "section": { + "data": { + "description": "Initial country and industry targeting that TikTok Creative Center infers.", + "properties": { + "first_industry": { + "type": "object" + }, + "initial_country": { + "items": { + "type": "string" + }, + "type": "array" + }, + "l1_industry": { + "type": "integer" + }, + "l2_industry": { + "type": "integer" + }, + "second_industry": { + "type": "object" + } + }, + "type": "object" + }, + "msg": { "type": "string" }, - "title": { + "request_id": { + "description": "Request id returned by TikTok Creative Center.", "type": "string" + } + }, + "type": "object" + }, + "popularTrend.TopAdsLocationsResp": { + "properties": { + "code": { + "type": "integer" }, - "topics": { - "items": { - "type": "string" + "data": { + "description": "Countries available for top ads targeting.", + "properties": { + "country": { + "items": { + "$ref": "#/definitions/popularTrend.TopAdsFilterItem" + }, + "type": "array" + } }, - "type": "array" + "type": "object" }, - "updated_at": { + "msg": { "type": "string" }, - "url": { + "request_id": { + "description": "Request id returned by TikTok Creative Center.", "type": "string" } }, "type": "object" }, - "scmp.AuthorResponse": { + "popularTrend.TopAdsMaterial": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/scmp.HeadlineItem" - }, - "type": "array" + "ad_title": { + "description": "Title of the ad.", + "type": "string" }, - "bio": { + "brand_name": { + "description": "Name of the advertiser brand.", "type": "string" }, - "expertise": { + "comment": { + "description": "Number of comments on the ad.", + "type": "integer" + }, + "cost": { + "description": "Cost figure for the ad as TikTok Creative Center reports it.", + "type": "integer" + }, + "country_code": { + "description": "Country codes the ad runs in.", "items": { "type": "string" }, "type": "array" }, - "headshot_url": { + "ctr": { + "description": "Click-through rate of the ad as TikTok Creative Center reports it.", + "type": "number" + }, + "favorite": { + "description": "Whether the ad is marked as a favorite.", + "type": "boolean" + }, + "has_summary": { + "description": "Whether TikTok has an ad summary available for the ad.", + "type": "boolean" + }, + "highlight": { + "description": "Highlight note TikTok attaches to the ad.", "type": "string" }, - "languages": { + "highlight_text": { + "description": "Text shown for the ad's highlight.", + "type": "string" + }, + "id": { + "description": "Top Ads material id. Use it with the detail, analysis and recommend endpoints.", + "type": "string" + }, + "industry_key": { + "description": "Key of the industry the ad is classified under.", + "type": "string" + }, + "is_search": { + "description": "Search flag TikTok sets on the ad.", + "type": "boolean" + }, + "keyword_list": { + "description": "Keywords associated with the ad.", "items": { "type": "string" }, "type": "array" }, - "location": { + "landing_page": { + "description": "URL of the ad's landing page.", "type": "string" }, - "name": { - "type": "string" + "like": { + "description": "Number of likes on the ad.", + "type": "integer" }, - "role": { + "objective_key": { + "description": "Key of the campaign objective of the ad.", "type": "string" }, - "social_links": { + "objectives": { + "description": "Campaign objectives of the ad, each with its id, value and label.", "items": { - "$ref": "#/definitions/scmp.AuthorSocialLink" + "$ref": "#/definitions/popularTrend.TopAdsFilterItem" }, "type": "array" }, - "url": { + "pattern_label": { + "description": "Creative pattern labels assigned to the ad.", + "items": { + "$ref": "#/definitions/popularTrend.TopAdsFilterItem" + }, + "type": "array" + }, + "share": { + "description": "Number of shares of the ad.", + "type": "integer" + }, + "source": { + "description": "Source label of the ad as TikTok Creative Center shows it.", "type": "string" + }, + "source_key": { + "description": "Numeric key of the ad's source.", + "type": "integer" + }, + "video_info": { + "allOf": [ + { + "$ref": "#/definitions/popularTrend.TopAdsVideoInfo" + } + ], + "description": "Video file details of the ad." + }, + "voice_over": { + "description": "Whether the ad video has a voice-over.", + "type": "boolean" } }, "type": "object" }, - "scmp.AuthorSocialLink": { + "popularTrend.TopAdsPagination": { "properties": { - "type": { - "type": "string" + "has_more": { + "description": "Whether more pages of ads are available.", + "type": "boolean" }, - "url": { - "type": "string" + "page": { + "description": "Page number returned.", + "type": "integer" + }, + "size": { + "description": "Number of ads per page.", + "type": "integer" + }, + "total": { + "description": "Total number of matching ads. Set on spotlight responses.", + "type": "integer" + }, + "total_count": { + "description": "Total number of matching ads. Set on list responses.", + "type": "integer" } }, "type": "object" }, - "scmp.HeadlineItem": { + "popularTrend.TopAdsRecommendResp": { "properties": { - "author": { - "type": "string" + "code": { + "type": "integer" }, - "image_url": { - "type": "string" + "data": { + "description": "Ads related to the requested ad.", + "properties": { + "materials": { + "items": { + "$ref": "#/definitions/popularTrend.TopAdsMaterial" + }, + "type": "array" + } + }, + "type": "object" }, - "published_at": { + "msg": { "type": "string" }, - "summary": { + "request_id": { + "description": "Request id returned by TikTok Creative Center.", "type": "string" + } + }, + "type": "object" + }, + "popularTrend.TopAdsSafetyResp": { + "properties": { + "code": { + "type": "integer" }, - "title": { + "data": { + "description": "Creative Center safety configuration flags for its search surfaces.", + "properties": { + "cc_banner_key": { + "type": "string" + }, + "creator_search": { + "type": "integer" + }, + "hashtag_search": { + "type": "integer" + }, + "keyword_search": { + "type": "integer" + }, + "sound_search": { + "type": "integer" + }, + "top_ads_search": { + "type": "integer" + } + }, + "type": "object" + }, + "msg": { "type": "string" }, - "url": { + "request_id": { + "description": "Request id returned by TikTok Creative Center.", "type": "string" } }, "type": "object" }, - "scmp.HeadlinesResponse": { + "popularTrend.TopAdsSpotlightResp": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/scmp.HeadlineItem" + "code": { + "type": "integer" + }, + "data": { + "description": "Page of spotlight top ads with its paging information.", + "properties": { + "materials": { + "items": { + "$ref": "#/definitions/popularTrend.TopAdsMaterial" + }, + "type": "array" + }, + "pagination": { + "$ref": "#/definitions/popularTrend.TopAdsPagination" + } }, - "type": "array" + "type": "object" }, - "section": { + "msg": { + "type": "string" + }, + "request_id": { + "description": "Request id returned by TikTok Creative Center.", "type": "string" } }, "type": "object" }, - "scmp.Section": { + "popularTrend.TopAdsSuggestionsResp": { "properties": { - "name": { - "type": "string" - }, - "parent_name": { - "type": "string" + "code": { + "type": "integer" }, - "parent_slug": { - "type": "string" + "data": { + "description": "Suggested search queries for top ads.", + "properties": { + "query": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" }, - "slug": { + "msg": { "type": "string" }, - "url": { + "request_id": { + "description": "Request id returned by TikTok Creative Center.", "type": "string" } }, "type": "object" }, - "scmp.SectionsResponse": { + "popularTrend.TopAdsVideoInfo": { "properties": { - "sections": { - "items": { - "$ref": "#/definitions/scmp.Section" + "cover": { + "description": "URL of the video cover image.", + "type": "string" + }, + "duration": { + "description": "Video length in seconds.", + "type": "number" + }, + "height": { + "description": "Video height as TikTok reports it.", + "type": "integer" + }, + "vid": { + "description": "TikTok video id.", + "type": "string" + }, + "video_url": { + "additionalProperties": { + "type": "string" }, - "type": "array" + "description": "Video file URLs keyed by resolution label, for example `720p`.", + "type": "object" + }, + "width": { + "description": "Video width as TikTok reports it.", + "type": "integer" } }, "type": "object" }, - "scmp.articleResponseDoc": { + "populartrend.countryIndustryMetaResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/scmp.ArticleResponse" + "$ref": "#/definitions/popularTrend.CountryIndustryMeta" }, "msg": { "example": "OK", @@ -185970,14 +194820,14 @@ }, "type": "object" }, - "scmp.authorResponseDoc": { + "populartrend.topAdsAnalysisResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/scmp.AuthorResponse" + "$ref": "#/definitions/popularTrend.TopAdsAnalysisResp" }, "msg": { "example": "OK", @@ -185986,14 +194836,14 @@ }, "type": "object" }, - "scmp.headlinesResponseDoc": { + "populartrend.topAdsDetailResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/scmp.HeadlinesResponse" + "$ref": "#/definitions/popularTrend.TopAdsDetailResp" }, "msg": { "example": "OK", @@ -186002,14 +194852,14 @@ }, "type": "object" }, - "scmp.sectionsResponseDoc": { + "populartrend.topAdsFiltersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/scmp.SectionsResponse" + "$ref": "#/definitions/popularTrend.TopAdsFiltersResp" }, "msg": { "example": "OK", @@ -186018,782 +194868,829 @@ }, "type": "object" }, - "screenrant.AuthorResponse": { + "populartrend.topAdsListResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "social_links": { - "items": { - "$ref": "#/definitions/screenrant.AuthorSocialLink" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/popularTrend.TopAdsListResp" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "screenrant.AuthorSocialLink": { + "populartrend.topAdsLocationInfoResponseDoc": { "properties": { - "type": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "url": { + "data": { + "$ref": "#/definitions/popularTrend.TopAdsLocationInfoResp" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "seatgeek.CategoriesResult": { + "populartrend.topAdsLocationsResponseDoc": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/seatgeek.Category" - }, - "type": "array" - }, - "total": { + "code": { + "example": 200, "type": "integer" + }, + "data": { + "$ref": "#/definitions/popularTrend.TopAdsLocationsResp" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "seatgeek.Category": { + "populartrend.topAdsRecommendResponseDoc": { "properties": { - "event_count": { - "type": "integer" - }, - "id": { - "example": 1010100, - "type": "integer" - }, - "image": { - "type": "string" - }, - "is_visible": { - "type": "boolean" - }, - "name": { - "example": "MLB", - "type": "string" - }, - "next_event_datetime_utc": { - "type": "string" - }, - "parent_id": { - "example": 1010000, - "type": "integer" - }, - "performer_count": { - "type": "integer" - }, - "rank": { + "code": { + "example": 200, "type": "integer" }, - "seo_event_type": { - "type": "string" - }, - "short_name": { - "type": "string" + "data": { + "$ref": "#/definitions/popularTrend.TopAdsRecommendResp" }, - "slug": { - "example": "mlb", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "seatgeek.CitiesResult": { + "populartrend.topAdsSafetyResponseDoc": { "properties": { - "cities": { - "items": { - "$ref": "#/definitions/seatgeek.City" - }, - "type": "array" - }, - "total": { + "code": { + "example": 200, "type": "integer" + }, + "data": { + "$ref": "#/definitions/popularTrend.TopAdsSafetyResp" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "seatgeek.City": { + "populartrend.topAdsSpotlightResponseDoc": { "properties": { - "country": { - "example": "United States", - "type": "string" - }, - "id": { - "example": 72, + "code": { + "example": 200, "type": "integer" }, - "lat": { - "type": "number" - }, - "lon": { - "type": "number" - }, - "name": { - "example": "Albuquerque", - "type": "string" - }, - "radius": { - "example": "20mi", - "type": "string" - }, - "show_concerts": { - "type": "boolean" - }, - "show_sports": { - "type": "boolean" - }, - "show_theater": { - "type": "boolean" - }, - "slug": { - "example": "albuquerque", - "type": "string" + "data": { + "$ref": "#/definitions/popularTrend.TopAdsSpotlightResp" }, - "state": { - "example": "New Mexico", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "seatgeek.Event": { + "populartrend.topAdsSuggestionsResponseDoc": { "properties": { - "date_tbd": { - "type": "boolean" - }, - "datetime_local": { - "type": "string" - }, - "datetime_utc": { - "type": "string" - }, - "description": { - "type": "string" - }, - "id": { - "example": 17695775, + "code": { + "example": 200, "type": "integer" }, - "is_open": { - "type": "boolean" - }, - "performers": { - "items": { - "$ref": "#/definitions/seatgeek.EventPerformer" - }, - "type": "array" - }, - "popularity": { - "type": "number" - }, - "score": { - "type": "number" - }, - "season_stage": { - "type": "string" - }, - "short_title": { - "type": "string" - }, - "stats": { - "$ref": "#/definitions/seatgeek.EventStats" - }, - "status": { - "type": "string" - }, - "taxonomies": { - "items": { - "$ref": "#/definitions/seatgeek.Taxonomy" - }, - "type": "array" - }, - "time_tbd": { - "type": "boolean" - }, - "title": { - "type": "string" - }, - "type": { - "example": "mlb", - "type": "string" + "data": { + "$ref": "#/definitions/popularTrend.TopAdsSuggestionsResp" }, - "url": { + "msg": { + "example": "OK", "type": "string" - }, - "venue": { - "$ref": "#/definitions/seatgeek.Venue" } }, "type": "object" }, - "seatgeek.EventPerformer": { + "poshmark.BrandDirectoryEntry": { "properties": { - "home_team": { - "type": "boolean" + "aliases": { + "items": { + "type": "string" + }, + "type": "array" }, "id": { - "type": "integer" - }, - "image": { + "example": "4be6779b4630c50002000039", "type": "string" }, - "name": { + "logo_url": { "type": "string" }, - "primary": { - "type": "boolean" - }, - "type": { - "example": "mlb", + "name": { + "example": "Nike", "type": "string" }, - "url": { + "slug": { + "example": "Nike", "type": "string" } }, "type": "object" }, - "seatgeek.EventStats": { + "poshmark.BrandResponse": { "properties": { - "average_price": { - "type": "number" - }, - "highest_price": { - "type": "number" - }, - "listing_count": { - "type": "integer" - }, - "lowest_price": { - "type": "number" - }, - "lowest_sg_base_price": { - "type": "number" - }, - "median_price": { - "type": "number" + "has_more": { + "example": true, + "type": "boolean" }, - "ticket_count": { - "type": "integer" - } - }, - "type": "object" - }, - "seatgeek.EventsByCategoryResult": { - "properties": { - "events": { + "listings": { "items": { - "$ref": "#/definitions/seatgeek.Event" + "$ref": "#/definitions/poshmark.Listing" }, "type": "array" }, - "page": { - "type": "integer" - }, - "per_page": { - "type": "integer" + "next_max_id": { + "type": "string" }, - "taxonomy_id": { - "type": "integer" + "source_url": { + "type": "string" }, "total": { + "example": 210000, "type": "integer" } }, "type": "object" }, - "seatgeek.EventsNearResult": { + "poshmark.BrandsResponse": { "properties": { - "events": { + "brands": { "items": { - "$ref": "#/definitions/seatgeek.Event" + "$ref": "#/definitions/poshmark.BrandDirectoryEntry" }, "type": "array" }, - "geolocation": { - "$ref": "#/definitions/seatgeek.GeoResolved" - }, - "page": { - "type": "integer" - }, - "per_page": { - "type": "integer" + "source_url": { + "type": "string" }, "total": { + "example": 29887, "type": "integer" } }, "type": "object" }, - "seatgeek.GeoLocation": { + "poshmark.CategoriesResponse": { "properties": { - "lat": { - "type": "number" - }, - "lon": { - "type": "number" + "departments": { + "items": { + "$ref": "#/definitions/poshmark.DepartmentTaxonomy" + }, + "type": "array" } }, "type": "object" }, - "seatgeek.GeoResolved": { + "poshmark.CategoryResponse": { "properties": { - "city": { - "type": "string" + "has_more": { + "description": "Whether more listings are available after this page.", + "example": true, + "type": "boolean" }, - "country": { - "type": "string" + "listings": { + "description": "Listings on this page of the category.", + "items": { + "$ref": "#/definitions/poshmark.Listing" + }, + "type": "array" }, - "display_name": { - "example": "Albuquerque, NM", + "next_max_id": { + "description": "Cursor to pass as `max_id` to get the next page. Omitted on the last page.", "type": "string" }, - "range": { - "example": "50mi", + "source_url": { + "description": "URL the data was read from.", "type": "string" }, - "state": { - "type": "string" + "total": { + "description": "Total number of listings Poshmark reports for the category.", + "example": 84000, + "type": "integer" } }, "type": "object" }, - "seatgeek.Performer": { + "poshmark.CategoryTaxonomyEntry": { "properties": { - "event_count": { - "type": "integer" - }, - "has_upcoming_events": { - "type": "boolean" - }, - "home_venue_id": { - "type": "integer" - }, "id": { - "example": 1, - "type": "integer" - }, - "image": { + "example": "00268975d97b4e80ef00a955", "type": "string" }, "name": { + "example": "Shoes", "type": "string" }, - "num_upcoming_events": { - "type": "integer" - }, - "popularity": { - "type": "number" - }, - "score": { - "type": "number" - }, - "short_name": { - "type": "string" - }, - "taxonomies": { - "items": { - "$ref": "#/definitions/seatgeek.Taxonomy" - }, - "type": "array" - }, - "type": { - "example": "mlb", - "type": "string" - }, - "url": { + "path": { + "description": "Path is the exact value the category endpoint's path parameter\nexpects, e.g. \"Women-Shoes\".", + "example": "Women-Shoes", "type": "string" } }, "type": "object" }, - "seatgeek.PerformerEventsResult": { + "poshmark.ClosetResponse": { "properties": { - "events": { + "has_more": { + "example": true, + "type": "boolean" + }, + "listings": { "items": { - "$ref": "#/definitions/seatgeek.Event" + "$ref": "#/definitions/poshmark.Listing" }, "type": "array" }, - "page": { - "type": "integer" + "next_max_id": { + "type": "string" }, - "per_page": { - "type": "integer" + "seller": { + "$ref": "#/definitions/poshmark.Seller" }, - "performer_id": { - "type": "integer" + "source_url": { + "type": "string" }, - "total": { + "total_count": { + "example": 107, "type": "integer" } }, "type": "object" }, - "seatgeek.SearchEvent": { + "poshmark.Comment": { "properties": { - "date_tbd": { - "type": "boolean" - }, - "datetime_local": { - "type": "string" - }, - "datetime_utc": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "lowest_price": { - "type": "number" - }, - "short_title": { + "comment": { + "description": "Text of the comment as posted on the listing.", + "example": "Hi can you tell me the width of the waist?", "type": "string" }, - "time_tbd": { - "type": "boolean" - }, - "title": { + "created_at": { + "description": "Time the comment was posted, in ISO 8601 with a UTC offset.", + "example": "2026-07-05T09:28:09-07:00", "type": "string" }, - "type": { - "example": "mlb", + "creator_full_name": { + "description": "Display name of the member who wrote the comment.", + "example": "Jen Muston", "type": "string" }, - "url": { + "creator_picture_url": { + "description": "Profile picture URL of the member who wrote the comment.", "type": "string" }, - "venue_location": { - "example": "Los Angeles, CA", + "creator_username": { + "description": "Username of the member who wrote the comment.", + "example": "muvlax20", "type": "string" }, - "venue_name": { + "id": { + "description": "Poshmark comment id.", + "example": "6a4a86191fea02ce69f41484", "type": "string" } }, "type": "object" }, - "seatgeek.SearchPerformer": { + "poshmark.DepartmentTaxonomy": { "properties": { - "event_count": { - "type": "integer" + "categories": { + "items": { + "$ref": "#/definitions/poshmark.CategoryTaxonomyEntry" + }, + "type": "array" }, "id": { - "type": "integer" - }, - "image": { + "example": "000e8975d97b4e80ef00a955", "type": "string" }, "name": { + "example": "Women", "type": "string" }, - "short_name": { - "type": "string" - }, - "type": { - "example": "mlb", - "type": "string" - }, - "url": { + "path": { + "description": "Path is the exact value the category endpoint's path parameter\nexpects for browsing the department itself, e.g. \"Women\".", + "example": "Women", "type": "string" } }, "type": "object" }, - "seatgeek.SearchResult": { + "poshmark.Listing": { "properties": { - "events": { - "items": { - "$ref": "#/definitions/seatgeek.SearchEvent" - }, - "type": "array" + "brand": { + "description": "Brand name of the item.", + "example": "FARM Rio", + "type": "string" }, - "performers": { + "category": { + "description": "Poshmark category of the item, for example `Shorts`.", + "example": "Shorts", + "type": "string" + }, + "colors": { + "description": "Colors the seller selected for the item.", + "example": [ + "Red", + "Yellow" + ], "items": { - "$ref": "#/definitions/seatgeek.SearchPerformer" + "type": "string" }, "type": "array" }, - "query": { - "type": "string" - }, - "venues": { - "items": { - "$ref": "#/definitions/seatgeek.SearchVenue" - }, - "type": "array" - } - }, - "type": "object" - }, - "seatgeek.SearchVenue": { - "properties": { - "capacity": { + "comment_count": { + "description": "Number of comments on the listing.", + "example": 4, "type": "integer" }, - "display_location": { - "example": "Los Angeles, CA", + "condition": { + "description": "Item condition code set by the seller, for example `nwt` for new with tags.", + "example": "nwt", "type": "string" }, - "event_count": { - "type": "integer" + "cover_shot": { + "description": "URL of the listing's cover photo.", + "example": "https://di2ponv0v5otw.cloudfront.net/posts/2026/06/27/6a3fed1de9c77df92e2c0cc6/s_6a3fed24bd4ce3ff762126e5.jpg", + "type": "string" }, - "id": { - "type": "integer" + "created_at": { + "description": "Time the listing was created, in ISO 8601 with a UTC offset.", + "example": "2026-06-27T08:32:58-07:00", + "type": "string" }, - "name": { + "department": { + "description": "Poshmark department of the item, for example `Women`.", + "example": "Women", "type": "string" }, - "url": { + "description": { + "description": "Seller's description of the item. Set on the listing detail response.", "type": "string" - } - }, - "type": "object" - }, - "seatgeek.Taxonomy": { - "properties": { + }, + "first_available_at": { + "description": "Time the listing first became available for sale, as Poshmark reports it.", + "type": "string" + }, "id": { - "example": 1010100, - "type": "integer" + "description": "Poshmark listing id. Use it with the listing endpoint.", + "example": "6a3fed1de9c77df92e2c0cc6", + "type": "string" }, - "name": { - "example": "mlb", + "inventory_status": { + "description": "Availability status of the item, for example `available`.", + "example": "available", "type": "string" }, - "parent_id": { - "example": 1010000, + "like_count": { + "description": "Number of members who liked the listing.", + "example": 111, "type": "integer" }, - "seo_event_type": { - "type": "string" - } - }, - "type": "object" - }, - "seatgeek.TrendingItem": { - "properties": { - "entity_id": { + "original_price": { + "description": "Original retail price the seller entered for the item.", + "example": 95, + "type": "number" + }, + "pictures": { + "description": "URLs of all photos on the listing. Set on the listing detail response.", + "items": { + "type": "string" + }, + "type": "array" + }, + "price": { + "description": "Current asking price of the listing.", + "example": 55, + "type": "number" + }, + "quantity_available": { + "description": "Total number of units still available across all sizes.", + "example": 1, "type": "integer" }, - "entity_image_url": { + "seller_display_handle": { + "description": "Display handle of the seller who posted the listing.", + "example": "maltimar", "type": "string" }, - "entity_name": { + "seller_full_name": { + "description": "Display name of the seller who posted the listing.", + "example": "Mary Altimar", "type": "string" }, - "entity_type": { - "example": "event", + "seller_picture_url": { + "description": "Profile picture URL of the seller who posted the listing.", "type": "string" }, - "entity_url": { + "seller_username": { + "description": "Username of the seller who posted the listing.", + "example": "maltimar", "type": "string" }, - "event_datetime_local": { - "type": "string" + "share_count": { + "description": "Number of times the listing was shared.", + "example": 13, + "type": "integer" }, - "event_datetime_utc": { + "size": { + "description": "Size of the item as entered by the seller.", + "example": "S", "type": "string" }, - "lowest_price": { - "type": "number" + "status": { + "description": "Publication status of the listing, for example `published`.", + "example": "published", + "type": "string" }, - "rank": { - "type": "integer" + "title": { + "description": "Listing title as shown on Poshmark.", + "example": "NWT Farm Rio Shorts", + "type": "string" }, - "rank_change": { - "type": "integer" + "url": { + "description": "Poshmark page URL of the listing.", + "example": "https://poshmark.com/listing/6a3fed1de9c77df92e2c0cc6", + "type": "string" } }, "type": "object" }, - "seatgeek.TrendingResult": { + "poshmark.ListingResponse": { "properties": { - "items": { + "brand": { + "description": "Brand name of the item.", + "example": "FARM Rio", + "type": "string" + }, + "category": { + "description": "Poshmark category of the item, for example `Shorts`.", + "example": "Shorts", + "type": "string" + }, + "colors": { + "description": "Colors the seller selected for the item.", + "example": [ + "Red", + "Yellow" + ], "items": { - "$ref": "#/definitions/seatgeek.TrendingItem" + "type": "string" }, "type": "array" }, - "list_display_name": { - "type": "string" + "comment_count": { + "description": "Number of comments on the listing.", + "example": 4, + "type": "integer" }, - "list_id": { + "comments": { + "description": "Public comments on the listing.", + "items": { + "$ref": "#/definitions/poshmark.Comment" + }, + "type": "array" + }, + "condition": { + "description": "Item condition code set by the seller, for example `nwt` for new with tags.", + "example": "nwt", "type": "string" }, - "list_type": { + "cover_shot": { + "description": "URL of the listing's cover photo.", + "example": "https://di2ponv0v5otw.cloudfront.net/posts/2026/06/27/6a3fed1de9c77df92e2c0cc6/s_6a3fed24bd4ce3ff762126e5.jpg", "type": "string" - } - }, - "type": "object" - }, - "seatgeek.Venue": { - "properties": { - "capacity": { - "type": "integer" }, - "city": { + "created_at": { + "description": "Time the listing was created, in ISO 8601 with a UTC offset.", + "example": "2026-06-27T08:32:58-07:00", "type": "string" }, - "country": { - "example": "US", + "department": { + "description": "Poshmark department of the item, for example `Women`.", + "example": "Women", "type": "string" }, - "display_location": { - "example": "Los Angeles, CA", + "description": { + "description": "Seller's description of the item. Set on the listing detail response.", "type": "string" }, - "has_upcoming_events": { - "type": "boolean" + "first_available_at": { + "description": "Time the listing first became available for sale, as Poshmark reports it.", + "type": "string" }, "id": { - "type": "integer" - }, - "location": { - "$ref": "#/definitions/seatgeek.GeoLocation" + "description": "Poshmark listing id. Use it with the listing endpoint.", + "example": "6a3fed1de9c77df92e2c0cc6", + "type": "string" }, - "name": { + "inventory_status": { + "description": "Availability status of the item, for example `available`.", + "example": "available", "type": "string" }, - "num_upcoming_events": { + "like_count": { + "description": "Number of members who liked the listing.", + "example": 111, "type": "integer" }, - "popularity": { + "original_price": { + "description": "Original retail price the seller entered for the item.", + "example": 95, "type": "number" }, - "postal_code": { - "type": "string" + "pictures": { + "description": "URLs of all photos on the listing. Set on the listing detail response.", + "items": { + "type": "string" + }, + "type": "array" }, - "score": { + "price": { + "description": "Current asking price of the listing.", + "example": 55, "type": "number" }, - "slug": { + "quantity_available": { + "description": "Total number of units still available across all sizes.", + "example": 1, + "type": "integer" + }, + "seller": { + "allOf": [ + { + "$ref": "#/definitions/poshmark.Seller" + } + ], + "description": "Public profile of the seller. Omitted when Poshmark's page does not include it." + }, + "seller_display_handle": { + "description": "Display handle of the seller who posted the listing.", + "example": "maltimar", "type": "string" }, - "state": { + "seller_full_name": { + "description": "Display name of the seller who posted the listing.", + "example": "Mary Altimar", "type": "string" }, - "stats": { - "$ref": "#/definitions/seatgeek.VenueStats" + "seller_picture_url": { + "description": "Profile picture URL of the seller who posted the listing.", + "type": "string" }, - "timezone": { - "example": "America/New_York", + "seller_username": { + "description": "Username of the seller who posted the listing.", + "example": "maltimar", + "type": "string" + }, + "share_count": { + "description": "Number of times the listing was shared.", + "example": 13, + "type": "integer" + }, + "similar_listings": { + "description": "Similar listings Poshmark shows on the same page. Omitted when the page has none.", + "items": { + "$ref": "#/definitions/poshmark.Listing" + }, + "type": "array" + }, + "size": { + "description": "Size of the item as entered by the seller.", + "example": "S", + "type": "string" + }, + "source_url": { + "description": "URL the data was read from.", + "type": "string" + }, + "status": { + "description": "Publication status of the listing, for example `published`.", + "example": "published", + "type": "string" + }, + "title": { + "description": "Listing title as shown on Poshmark.", + "example": "NWT Farm Rio Shorts", "type": "string" }, "url": { + "description": "Poshmark page URL of the listing.", + "example": "https://poshmark.com/listing/6a3fed1de9c77df92e2c0cc6", "type": "string" } }, "type": "object" }, - "seatgeek.VenueEventsResult": { + "poshmark.RatingBreakdown": { "properties": { - "events": { - "items": { - "$ref": "#/definitions/seatgeek.Event" - }, - "type": "array" + "five_star": { + "description": "Number of 5-star ratings the seller received.", + "example": 355, + "type": "integer" }, - "page": { + "four_star": { + "description": "Number of 4-star ratings the seller received.", + "example": 7, "type": "integer" }, - "per_page": { + "one_star": { + "description": "Number of 1-star ratings the seller received.", + "example": 1, "type": "integer" }, - "total": { + "three_star": { + "description": "Number of 3-star ratings the seller received.", + "example": 2, "type": "integer" }, - "venue_id": { + "two_star": { + "description": "Number of 2-star ratings the seller received.", + "example": 3, "type": "integer" } }, "type": "object" }, - "seatgeek.VenueStats": { + "poshmark.SearchResponse": { "properties": { - "event_count": { + "has_more": { + "example": true, + "type": "boolean" + }, + "listings": { + "items": { + "$ref": "#/definitions/poshmark.Listing" + }, + "type": "array" + }, + "next_max_id": { + "example": "ENC_eyJtYXhfaWRzIjpbNDksMSwxXSwicGFnZV9udW0iOjIsInBhZ2VfZ3JvdXBfaWQiOiI2YTcyZTE3OTI1MzYyMTUzMDNhMmVmMWEifQ", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "total": { + "example": 120000, "type": "integer" } }, "type": "object" }, - "seatgeek.categoriesResponseDoc": { + "poshmark.Seller": { "properties": { - "code": { - "example": 200, + "cover_shot_url": { + "description": "URL of the seller's closet cover image.", + "type": "string" + }, + "display_handle": { + "description": "Seller's display handle on Poshmark.", + "example": "maltimar", + "type": "string" + }, + "followers": { + "description": "Number of members following the seller.", + "example": 9096, "type": "integer" }, - "data": { - "$ref": "#/definitions/seatgeek.CategoriesResult" + "following": { + "description": "Number of members the seller follows.", + "example": 89, + "type": "integer" }, - "msg": { - "example": "OK", + "full_name": { + "description": "Seller's display name.", + "example": "Mary Altimar", "type": "string" - } - }, - "type": "object" - }, - "seatgeek.citiesResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "id": { + "description": "Poshmark user id of the seller.", + "example": "5a4f84cb7d70fb0f0f05a37f", + "type": "string" + }, + "items_sold_display": { + "description": "Items sold as Poshmark displays it, for example `500+`.", + "example": "500+", + "type": "string" + }, + "last_active_at": { + "description": "Time the seller was last active, in ISO 8601 with a UTC offset.", + "example": "2026-08-04T19:52:16-07:00", + "type": "string" + }, + "member_since": { + "description": "Time the seller joined Poshmark, in ISO 8601 with a UTC offset.", + "example": "2018-01-05T05:59:39-08:00", + "type": "string" + }, + "orders_shipped": { + "description": "Number of orders the seller has shipped.", + "example": 522, "type": "integer" }, - "data": { - "$ref": "#/definitions/seatgeek.CitiesResult" + "picture_url": { + "description": "URL of the seller's profile picture.", + "example": "https://di2ponv0v5otw.cloudfront.net/users/2018/04/23/5a4f84cb7d70fb0f0f05a37f/t_5ade0fdbd0492dff500c741a.jpg", + "type": "string" }, - "msg": { - "example": "OK", + "posts_count": { + "description": "Number of listings the seller has posted.", + "example": 698, + "type": "integer" + }, + "rating_average": { + "description": "Average of the seller's star ratings, rounded to two decimals. Omitted when the seller has no ratings.", + "example": 4.93, + "type": "number" + }, + "rating_breakdown": { + "allOf": [ + { + "$ref": "#/definitions/poshmark.RatingBreakdown" + } + ], + "description": "Number of ratings the seller received at each star level." + }, + "rating_count": { + "description": "Total number of ratings the seller received.", + "example": 368, + "type": "integer" + }, + "url": { + "description": "Poshmark closet URL of the seller.", + "example": "https://poshmark.com/closet/maltimar", + "type": "string" + }, + "username": { + "description": "Seller's Poshmark username, as used in the closet URL.", + "example": "maltimar", "type": "string" } }, "type": "object" }, - "seatgeek.eventResponseDoc": { + "poshmark.TrendResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "cover_shot": { + "type": "string" }, - "data": { - "$ref": "#/definitions/seatgeek.Event" + "description": { + "type": "string" }, - "msg": { - "example": "OK", + "has_more": { + "example": true, + "type": "boolean" + }, + "listings": { + "items": { + "$ref": "#/definitions/poshmark.Listing" + }, + "type": "array" + }, + "name": { + "example": "Vintage Celine Handbags", + "type": "string" + }, + "next_max_id": { + "type": "string" + }, + "source_url": { "type": "string" + }, + "total": { + "example": 5000, + "type": "integer" } }, "type": "object" }, - "seatgeek.eventsByCategoryResponseDoc": { + "poshmark.brandsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/seatgeek.EventsByCategoryResult" + "$ref": "#/definitions/poshmark.BrandsResponse" }, "msg": { "example": "OK", @@ -186802,14 +195699,14 @@ }, "type": "object" }, - "seatgeek.eventsNearResponseDoc": { + "poshmark.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/seatgeek.EventsNearResult" + "$ref": "#/definitions/poshmark.CategoriesResponse" }, "msg": { "example": "OK", @@ -186818,14 +195715,14 @@ }, "type": "object" }, - "seatgeek.performerEventsResponseDoc": { + "poshmark.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/seatgeek.PerformerEventsResult" + "$ref": "#/definitions/poshmark.SearchResponse" }, "msg": { "example": "OK", @@ -186834,101 +195731,146 @@ }, "type": "object" }, - "seatgeek.performerResponseDoc": { + "prada.CategoriesResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "categories": { + "items": { + "$ref": "#/definitions/prada.Category" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/seatgeek.Performer" + "count": { + "type": "integer" }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" + }, + "genders": { + "items": { + "$ref": "#/definitions/prada.FacetCount" + }, + "type": "array" } }, "type": "object" }, - "seatgeek.searchResponseDoc": { + "prada.Category": { "properties": { - "code": { - "example": 200, - "type": "integer" + "id": { + "type": "string" }, - "data": { - "$ref": "#/definitions/seatgeek.SearchResult" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "path": { + "items": { + "type": "string" + }, + "type": "array" + }, + "path_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { "type": "string" } }, "type": "object" }, - "seatgeek.trendingResponseDoc": { + "prada.CategoryResponse": { "properties": { - "code": { - "example": 200, + "category_id": { + "type": "string" + }, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/seatgeek.TrendingResult" + "country": { + "type": "string" }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "seatgeek.venueEventsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "gender": { + "type": "string" + }, + "limit": { "type": "integer" }, - "data": { - "$ref": "#/definitions/seatgeek.VenueEventsResult" + "page": { + "type": "integer" }, - "msg": { - "example": "OK", + "products": { + "items": { + "$ref": "#/definitions/prada.Product" + }, + "type": "array" + }, + "sort": { "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" } }, "type": "object" }, - "seatgeek.venueResponseDoc": { + "prada.FacetCount": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/seatgeek.Venue" - }, - "msg": { - "example": "OK", + "value": { "type": "string" } }, "type": "object" }, - "seattletimes.AuthorArticle": { + "prada.Product": { "properties": { - "category": { + "color": { + "type": "string" + }, + "color_hex": { + "type": "string" + }, + "currency": { "type": "string" }, + "gender": { + "items": { + "type": "string" + }, + "type": "array" + }, "image_url": { "type": "string" }, - "published_at": { + "in_stock": { + "type": "boolean" + }, + "material": { "type": "string" }, - "summary": { + "model": { "type": "string" }, - "title": { + "name": { + "type": "string" + }, + "price": { + "type": "number" + }, + "product_type": { + "type": "string" + }, + "pv": { "type": "string" }, "url": { @@ -186937,1117 +195879,1076 @@ }, "type": "object" }, - "seattletimes.AuthorResponse": { + "prada.ProductColorOption": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/seattletimes.AuthorArticle" - }, - "type": "array" - }, - "bio": { + "code": { "type": "string" }, - "email": { + "hex": { "type": "string" }, "name": { "type": "string" }, - "slug": { - "type": "string" - }, - "twitter": { - "type": "string" - }, "url": { "type": "string" } }, "type": "object" }, - "sec.CompanyIntelligenceResponse": { + "prada.ProductResponse": { "properties": { - "degraded": { - "description": "Enrichment sources requested through `enrich` that could not be returned.", + "breadcrumbs": { "items": { "type": "string" }, "type": "array" }, - "financial_snapshot": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "description": "Latest annual figures keyed by `revenue`, `net_income`, `total_assets`, `total_liabilities`, `stockholders_equity` and `operating_cash_flow`, in the reporting currency.", - "type": "object" + "color": { + "type": "string" }, - "hiring": { - "allOf": [ - { - "$ref": "#/definitions/sec.HiringBlock" - } - ], - "description": "Open-roles summary from the company's careers board. Present only when `enrich` includes `hiring` and data was available." + "color_hex": { + "type": "string" }, - "latest_8k": { - "allOf": [ - { - "$ref": "#/definitions/sec.Filing" - } - ], - "description": "Most recent 8-K material event filing." + "country": { + "type": "string" }, - "latest_annual_10k": { - "allOf": [ - { - "$ref": "#/definitions/sec.Filing" - } - ], - "description": "Most recent 10-K annual report filing." + "currency": { + "type": "string" }, - "latest_quarterly_10q": { - "allOf": [ - { - "$ref": "#/definitions/sec.Filing" - } - ], - "description": "Most recent 10-Q quarterly report filing." + "description": { + "type": "string" }, - "market": { - "allOf": [ - { - "$ref": "#/definitions/sec.MarketBlock" - } - ], - "description": "Optional cross-source enrichment (present only when requested via ?enrich=\nand the source succeeded). Degraded lists sources that were requested but\nunavailable (missing key/provider, upstream failure, or timeout)." + "discounted_price": { + "type": "number" }, - "news": { - "description": "Recent news headlines about the company. Present only when `enrich` includes `news` and headlines were available.", + "fetched_at": { + "type": "string" + }, + "gender": { "items": { - "$ref": "#/definitions/sec.NewsItem" + "type": "string" }, "type": "array" }, - "profile": { - "allOf": [ - { - "$ref": "#/definitions/sec.CompanyProfile" - } - ], - "description": "Company identity block with CIK, ticker, name and industry classification." + "images": { + "items": { + "type": "string" + }, + "type": "array" }, - "recent_events": { - "description": "Up to five most recent 8-K material event filings.", + "in_stock": { + "type": "boolean" + }, + "material": { + "type": "string" + }, + "model": { + "type": "string" + }, + "name": { + "type": "string" + }, + "other_colors": { "items": { - "$ref": "#/definitions/sec.EventFiling" + "$ref": "#/definitions/prada.ProductColorOption" }, "type": "array" }, - "snapshot_fiscal_year": { - "description": "Fiscal year the `financial_snapshot` figures belong to.", - "type": "integer" + "price": { + "type": "number" }, - "snapshot_period_end": { - "description": "Last day of the period covered by the `financial_snapshot`, in YYYY-MM-DD format.", + "product_type": { "type": "string" }, - "source_urls": { - "description": "URLs of the SEC data sets the response was built from.", + "pv": { + "type": "string" + }, + "sizes": { "items": { - "type": "string" + "$ref": "#/definitions/prada.ProductSize" }, "type": "array" + }, + "stock_quantity": { + "type": "integer" + }, + "url": { + "type": "string" } }, "type": "object" }, - "sec.CompanyMatch": { + "prada.ProductSize": { "properties": { - "cik": { - "description": "Company's SEC Central Index Key (CIK) number.", - "example": 320193, - "type": "integer" - }, - "cik_padded": { - "description": "CIK number padded to 10 digits with a `CIK` prefix, as used in SEC data URLs.", - "example": "CIK0000320193", - "type": "string" - }, - "name": { - "description": "Company name as registered with the SEC.", - "example": "Apple Inc.", + "code": { "type": "string" }, - "ticker": { - "description": "Stock ticker symbol of the company.", - "example": "AAPL", + "label": { "type": "string" } }, "type": "object" }, - "sec.CompanyProfile": { + "prada.SearchResponse": { "properties": { - "cik": { - "description": "Company's SEC Central Index Key (CIK) number.", + "count": { "type": "integer" }, - "name": { - "description": "Company name as registered with the SEC.", + "country": { "type": "string" }, - "sic": { - "description": "Standard Industrial Classification (SIC) code of the company.", + "fetched_at": { "type": "string" }, - "sic_description": { - "description": "Text description of the SIC industry code.", + "gender": { "type": "string" }, - "ticker": { - "description": "Primary stock ticker symbol of the company.", - "type": "string" + "limit": { + "type": "integer" }, - "tickers": { - "description": "All ticker symbols the company trades under.", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "sec.CompanySearchResponse": { - "properties": { - "count": { - "description": "Number of companies returned.", - "example": 1, + "page": { "type": "integer" }, - "matches": { - "description": "Companies matching the query, exact ticker match first.", + "products": { "items": { - "$ref": "#/definitions/sec.CompanyMatch" + "$ref": "#/definitions/prada.Product" }, "type": "array" }, "query": { - "description": "Ticker or company name that was searched.", - "example": "apple", "type": "string" }, - "source_url": { - "description": "URL the data was read from.", + "sort": { "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" } }, "type": "object" }, - "sec.EventFiling": { + "prada.Store": { "properties": { - "accession_number": { - "description": "SEC accession number that uniquely identifies the 8-K filing.", - "type": "string" + "categories": { + "items": { + "type": "string" + }, + "type": "array" }, - "filing_date": { - "description": "Date the 8-K was filed, in YYYY-MM-DD format.", + "city": { "type": "string" }, - "items": { - "description": "Item numbers the 8-K reports on, as EDGAR lists them.", + "country": { "type": "string" }, - "url": { - "description": "Link to the filing's index page on sec.gov.", - "type": "string" - } - }, - "type": "object" - }, - "sec.Filing": { - "properties": { - "accession_number": { - "description": "SEC accession number that uniquely identifies the filing.", - "example": "0000320193-25-000081", - "type": "string" + "distance_km": { + "type": "number" }, - "description": { - "description": "Short description of the main document, as EDGAR lists it.", + "hours": { + "items": { + "$ref": "#/definitions/prada.StoreDay" + }, + "type": "array" + }, + "id": { "type": "string" }, - "filing_date": { - "description": "Date the filing was submitted to the SEC, in YYYY-MM-DD format.", - "example": "2025-10-31", + "latitude": { + "type": "number" + }, + "line1": { "type": "string" }, - "filing_index_url": { - "description": "Link to the filing's index page on sec.gov.", + "line2": { "type": "string" }, - "form": { - "description": "SEC form type of the filing, such as `10-K`, `10-Q` or `8-K`.", - "example": "10-K", + "longitude": { + "type": "number" + }, + "name": { "type": "string" }, - "is_xbrl": { - "description": "Whether the filing includes XBRL financial data.", + "permanently_closed": { "type": "boolean" }, - "items": { - "description": "Item numbers the filing covers, as EDGAR lists them.", + "phone": { "type": "string" }, - "primary_doc_url": { - "description": "Link to the filing's main document on sec.gov.", + "postal_code": { "type": "string" }, - "primary_document": { - "description": "File name of the filing's main document.", + "region": { "type": "string" }, - "report_date": { - "description": "Period end date the filing reports on, in YYYY-MM-DD format.", - "example": "2025-09-27", - "type": "string" + "services": { + "items": { + "type": "string" + }, + "type": "array" }, - "size": { - "description": "Size of the filing's main document as EDGAR reports it.", - "type": "integer" + "timezone": { + "type": "string" } }, "type": "object" }, - "sec.FilingDocument": { + "prada.StoreDay": { "properties": { - "name": { - "description": "File name of the document in the filing.", + "closed": { + "type": "boolean" + }, + "day": { "type": "string" }, - "url": { - "description": "Link to the document on sec.gov.", + "end": { + "type": "string" + }, + "start": { "type": "string" } }, "type": "object" }, - "sec.FilingResponse": { + "prada.StoresResponse": { "properties": { - "accession_number": { - "description": "SEC accession number that uniquely identifies the filing.", - "example": "0000320193-25-000081", + "count": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "cik": { - "description": "Company's SEC Central Index Key (CIK) number.", + "lat": { + "type": "number" + }, + "limit": { "type": "integer" }, - "cik_padded": { - "description": "CIK number padded to 10 digits with a `CIK` prefix, as used in SEC data URLs.", - "type": "string" + "lng": { + "type": "number" }, - "description": { - "description": "Short description of the main document, as EDGAR lists it.", + "offset": { + "type": "integer" + }, + "query": { "type": "string" }, - "documents": { - "description": "Files that make up the filing.", + "radius_km": { + "type": "number" + }, + "stores": { "items": { - "$ref": "#/definitions/sec.FilingDocument" + "$ref": "#/definitions/prada.Store" }, "type": "array" }, - "filing_date": { - "description": "Date the filing was submitted to the SEC, in YYYY-MM-DD format.", - "example": "2025-10-31", - "type": "string" + "total_results": { + "type": "integer" + } + }, + "type": "object" + }, + "prada.SuggestResponse": { + "properties": { + "count": { + "type": "integer" }, - "filing_index_url": { - "description": "Link to the filing's index page on sec.gov.", + "fetched_at": { "type": "string" }, - "form": { - "description": "SEC form type of the filing, such as `10-K`, `10-Q` or `8-K`.", - "example": "10-K", + "query": { "type": "string" }, - "is_xbrl": { - "description": "Whether the filing includes XBRL financial data.", - "type": "boolean" - }, - "items": { - "description": "Item numbers the filing covers, as EDGAR lists them.", - "type": "string" + "suggestions": { + "items": { + "$ref": "#/definitions/prada.Suggestion" + }, + "type": "array" + } + }, + "type": "object" + }, + "prada.Suggestion": { + "properties": { + "popularity": { + "type": "integer" }, - "name": { - "description": "Company name as registered with the SEC.", + "query": { "type": "string" }, - "primary_doc_url": { - "description": "Link to the filing's main document on sec.gov.", - "type": "string" + "result_count": { + "type": "integer" + } + }, + "type": "object" + }, + "prada.categoriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "primary_document": { - "description": "File name of the filing's main document.", - "type": "string" + "data": { + "$ref": "#/definitions/prada.CategoriesResponse" }, - "report_date": { - "description": "Period end date the filing reports on, in YYYY-MM-DD format.", - "example": "2025-09-27", + "msg": { + "example": "OK", "type": "string" - }, - "size": { - "description": "Size of the filing's main document as EDGAR reports it.", + } + }, + "type": "object" + }, + "prada.categoryResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "source_url": { - "description": "URL the data was read from.", + "data": { + "$ref": "#/definitions/prada.CategoryResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sec.FilingSection": { + "prada.productResponseDoc": { "properties": { - "char_count": { - "description": "Length of the full section text before any truncation.", + "code": { + "example": 200, "type": "integer" }, - "item": { - "description": "Item number of the section in the filing, such as `1A` or `7`.", - "example": "1A", - "type": "string" - }, - "text": { - "description": "Plain text of the section, cut off at the `max_chars` limit.", - "type": "string" + "data": { + "$ref": "#/definitions/prada.ProductResponse" }, - "title": { - "description": "Section heading, such as `Risk Factors`.", - "example": "Risk Factors", + "msg": { + "example": "OK", "type": "string" - }, - "truncated": { - "description": "Whether `text` was cut short because the section exceeded `max_chars`.", - "type": "boolean" } }, "type": "object" }, - "sec.FilingSectionsResponse": { + "prada.searchResponseDoc": { "properties": { - "accession_number": { - "description": "SEC accession number that uniquely identifies the filing.", - "type": "string" - }, - "cik": { - "description": "Company's SEC Central Index Key (CIK) number.", + "code": { + "example": 200, "type": "integer" }, - "count": { - "description": "Number of sections returned.", - "type": "integer" + "data": { + "$ref": "#/definitions/prada.SearchResponse" }, - "document_url": { - "description": "Link to the filing document the sections were taken from.", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "prada.storesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "form": { - "description": "SEC form type of the filing, such as `10-K`.", + "data": { + "$ref": "#/definitions/prada.StoresResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "prada.suggestResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "sections": { - "description": "Item sections extracted from the filing, in item order.", - "items": { - "$ref": "#/definitions/sec.FilingSection" - }, - "type": "array" + "data": { + "$ref": "#/definitions/prada.SuggestResponse" }, - "source_url": { - "description": "URL the data was read from.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sec.FinancialPeriod": { + "predictions.PredictionsAvailabilityRegion": { "properties": { - "currency": { - "description": "ISO 4217 code of the currency the monetary lines are reported in.", - "example": "USD", + "description": { "type": "string" }, - "end_date": { - "description": "Last day of the period, in YYYY-MM-DD format.", + "name": { "type": "string" }, - "fiscal_period": { - "description": "Fiscal period covered, such as `FY` for a full year.", - "example": "FY", + "region_id": { "type": "string" }, - "fiscal_year": { - "description": "Fiscal year the period belongs to.", - "type": "integer" + "status": { + "allOf": [ + { + "$ref": "#/definitions/predictions.PredictionsAvailabilityStatus" + } + ], + "enum": [ + "all_markets_available", + "financial_markets_only", + "sports_markets_unavailable", + "no_markets_available" + ] }, - "form": { - "description": "SEC form type that reported the figures, such as `10-K`.", + "status_description": { "type": "string" }, - "lines": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "description": "Statement line values for the period, keyed by line name such as `revenue`.", - "type": "object" - }, - "ratios": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "description": "Ratios are computed, normalized metrics derived from the lines (margins,\ncurrent ratio, debt-to-equity, free cash flow, YoY revenue growth) — a\nvalue-add over the raw statement figures.", - "type": "object" + "status_label": { + "type": "string" } }, "type": "object" }, - "sec.FinancialsResponse": { + "predictions.PredictionsAvailabilityResponse": { "properties": { - "cik": { - "description": "Company's SEC Central Index Key (CIK) number.", - "type": "integer" - }, - "line_order": { - "description": "Statement line names in the order they appear on the statement.", - "items": { - "type": "string" - }, - "type": "array" + "fetched_at": { + "type": "string" }, - "name": { - "description": "Company name as registered with the SEC.", + "map_note": { "type": "string" }, - "period": { - "description": "Period type returned: `annual` or `quarterly`.", - "example": "annual", + "map_title": { "type": "string" }, - "periods": { - "description": "Reporting periods, newest first.", + "region_count": { + "type": "integer" + }, + "regions": { "items": { - "$ref": "#/definitions/sec.FinancialPeriod" + "$ref": "#/definitions/predictions.PredictionsAvailabilityRegion" }, "type": "array" }, "source_url": { - "description": "URL the data was read from.", - "type": "string" - }, - "statement": { - "description": "Statement returned: `income`, `balance` or `cash_flow`.", - "example": "income", - "type": "string" - }, - "ticker": { - "description": "Stock ticker symbol of the company.", "type": "string" } }, "type": "object" }, - "sec.FrameFact": { + "predictions.PredictionsAvailabilityStatus": { + "enum": [ + "all_markets_available", + "financial_markets_only", + "sports_markets_unavailable", + "no_markets_available" + ], + "type": "string", + "x-enum-varnames": [ + "PredictionsAvailabilityAllMarketsAvailable", + "PredictionsAvailabilityFinancialMarketsOnly", + "PredictionsAvailabilitySportsMarketsUnavailable", + "PredictionsAvailabilityNoMarketsAvailable" + ] + }, + "predictions.PredictionsCategoriesResponse": { "properties": { - "accession_number": { - "description": "SEC accession number of the filing that reported the value.", - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/predictions.PredictionsCategory" + }, + "type": "array" }, - "cik": { - "description": "Reporting company's SEC Central Index Key (CIK) number.", + "count": { "type": "integer" }, - "end": { - "description": "Last day of the period the value covers, in YYYY-MM-DD format.", - "type": "string" - }, - "entity_name": { - "description": "Name of the reporting company.", + "fetched_at": { "type": "string" }, - "form": { - "description": "SEC form type of the filing that reported the value.", - "type": "string" + "league_count": { + "type": "integer" }, - "start": { - "description": "First day of the period the value covers, in YYYY-MM-DD format.", + "source_url": { "type": "string" - }, - "value": { - "description": "Value the company reported for the concept, in the unit given by `unit`.", - "type": "number" } }, "type": "object" }, - "sec.FramesResponse": { + "predictions.PredictionsCategory": { "properties": { - "concept": { - "description": "XBRL concept tag that was queried, such as `Assets`.", - "example": "Assets", + "id": { "type": "string" }, - "count": { - "description": "Number of facts returned.", - "type": "integer" - }, - "facts": { - "description": "One reported value per company for the concept and frame.", + "leagues": { "items": { - "$ref": "#/definitions/sec.FrameFact" + "$ref": "#/definitions/predictions.PredictionsLeague" }, "type": "array" }, - "period": { - "description": "Reporting frame that was queried, such as `CY2024Q4I`.", - "example": "CY2024Q4I", + "name": { "type": "string" }, - "source_url": { - "description": "URL the data was read from.", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "predictions.PredictionsLeague": { + "properties": { + "id": { "type": "string" }, - "taxonomy": { - "description": "XBRL taxonomy the concept belongs to, such as `us-gaap`.", - "example": "us-gaap", + "name": { "type": "string" }, - "total": { - "description": "Number of companies that reported the concept for the frame.", - "type": "integer" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "predictions.PredictionsRuleSource": { + "properties": { + "name": { + "type": "string" }, - "unit": { - "description": "Unit of the reported values, such as `USD`.", - "example": "USD", + "url": { "type": "string" } }, "type": "object" }, - "sec.FullTextHit": { + "predictions.PredictionsRulesResponse": { "properties": { - "accession_number": { - "description": "SEC accession number of the filing that contains the match.", + "fetched_at": { "type": "string" }, - "cik": { - "description": "SEC Central Index Key (CIK) number of the filing company.", + "rule_source_count": { "type": "integer" }, - "company_names": { - "description": "Names of the companies named on the filing, as EDGAR lists them.", + "rule_sources": { "items": { - "type": "string" + "$ref": "#/definitions/predictions.PredictionsRuleSource" }, "type": "array" }, - "document_url": { - "description": "Link to the matching document on sec.gov.", - "type": "string" + "settlement_category_count": { + "type": "integer" }, - "filed_at": { - "description": "Date the filing was submitted, in YYYY-MM-DD format.", - "type": "string" + "settlement_link_count": { + "type": "integer" }, - "form": { - "description": "SEC form type of the matching document, such as `10-K`.", + "settlement_sources": { + "items": { + "$ref": "#/definitions/predictions.PredictionsSettlementSource" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "sec.FullTextSearchResponse": { + "predictions.PredictionsSettlementSource": { "properties": { - "count": { - "description": "Number of hits returned on this page.", - "type": "integer" + "category": { + "type": "string" }, - "hits": { - "description": "Filing documents that match the query.", + "links": { "items": { - "$ref": "#/definitions/sec.FullTextHit" + "$ref": "#/definitions/predictions.PredictionsRuleSource" }, "type": "array" - }, - "page": { - "description": "Page number returned, starting at 1.", + } + }, + "type": "object" + }, + "predictions.predictionsAvailabilityResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "query": { - "description": "Search text that was run.", - "type": "string" + "data": { + "$ref": "#/definitions/predictions.PredictionsAvailabilityResponse" }, - "source_url": { - "description": "URL the data was read from.", + "msg": { + "example": "OK", "type": "string" - }, - "total": { - "description": "Total number of matches reported by EDGAR full-text search.", - "type": "integer" } }, "type": "object" }, - "sec.HiringBlock": { + "predictions.predictionsCategoriesResponseDoc": { "properties": { - "new_last_30d": { - "description": "Number of open roles posted in the last 30 days, among the roles sampled from the board.", + "code": { + "example": 200, "type": "integer" }, - "provider": { - "description": "Applicant tracking system the open roles were read from, such as `greenhouse`.", - "type": "string" - }, - "remote_pct": { - "description": "Share of open roles that are remote, in percent.", - "type": "number" + "data": { + "$ref": "#/definitions/predictions.PredictionsCategoriesResponse" }, - "source_url": { - "description": "URL the hiring data was read from.", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "predictions.predictionsRulesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "top_departments": { - "description": "Up to five departments with their open-role counts.", - "items": { - "$ref": "#/definitions/sec.NameCount" - }, - "type": "array" + "data": { + "$ref": "#/definitions/predictions.PredictionsRulesResponse" }, - "total_open_roles": { - "description": "Number of roles currently open on the careers board.", - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "sec.Holding": { + "pricecharting.BigMover": { "properties": { - "cusip": { - "description": "CUSIP identifier of the security.", - "type": "string" + "change": { + "description": "Change is signed: US dollars when change_unit is usd, a percentage when\nit is percent.", + "type": "number" }, - "investment_discretion": { - "description": "Type of investment discretion the manager holds over the position, such as `SOLE` or `DFND`.", + "console": { "type": "string" }, - "issuer": { - "description": "Name of the company that issued the security.", + "console_slug": { "type": "string" }, - "put_call": { - "description": "Put or call, for option positions.", - "type": "string" + "id": { + "type": "integer" }, - "share_type": { - "description": "`SH` when `shares` counts shares, `PRN` when it is a principal amount.", + "name": { "type": "string" }, - "shares": { - "description": "Number of shares or principal amount held, depending on `share_type`.", + "price": { "type": "number" }, - "title_of_class": { - "description": "Class of the security, such as `COM` for common stock.", + "slug": { "type": "string" }, - "value": { - "description": "Market value of the position as reported in the 13F filing.", - "type": "number" + "url": { + "type": "string" } }, "type": "object" }, - "sec.HoldingsResponse": { + "pricecharting.BigMoversResponse": { "properties": { - "accession_number": { - "description": "SEC accession number of the 13F filing the holdings come from.", - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/pricecharting.Category" + }, + "type": "array" }, - "cik": { - "description": "Institutional manager's SEC Central Index Key (CIK) number.", - "type": "integer" + "category": { + "type": "string" }, - "count": { - "description": "Number of holdings returned.", - "type": "integer" + "change_unit": { + "type": "string" }, - "filing_date": { - "description": "Date the 13F was filed, in YYYY-MM-DD format.", + "price_label": { + "description": "PriceLabel names the price column, for example Loose Price (the\nungraded price of a card).", "type": "string" }, - "holdings": { - "description": "Positions from the filing, largest value first.", + "products": { "items": { - "$ref": "#/definitions/sec.Holding" + "$ref": "#/definitions/pricecharting.BigMover" }, "type": "array" }, - "manager_name": { - "description": "Name of the institutional investment manager.", + "region": { "type": "string" }, - "report_date": { - "description": "Quarter end date the holdings are reported for, in YYYY-MM-DD format.", + "sort": { "type": "string" }, - "source_url": { - "description": "URL the data was read from.", + "title": { "type": "string" - }, - "total_holdings": { - "description": "Number of positions in the filing, before the `limit` is applied.", - "type": "integer" - }, - "total_value": { - "description": "Sum of the value of every position in the filing.", - "type": "number" } }, "type": "object" }, - "sec.InsiderResponse": { + "pricecharting.CategoriesResponse": { "properties": { - "cik": { - "description": "Company's SEC Central Index Key (CIK) number.", - "type": "integer" - }, - "count": { - "description": "Number of transactions returned.", - "type": "integer" - }, - "name": { - "description": "Company name as registered with the SEC.", - "type": "string" - }, - "source_url": { - "description": "URL the data was read from.", - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/pricecharting.Category" + }, + "type": "array" }, - "ticker": { - "description": "Stock ticker symbol of the company.", + "category": { "type": "string" }, - "transactions": { - "description": "Insider transactions from recent Form 3, 4 and 5 filings.", + "consoles": { "items": { - "$ref": "#/definitions/sec.InsiderTransaction" + "$ref": "#/definitions/pricecharting.Console" }, "type": "array" } }, "type": "object" }, - "sec.InsiderTransaction": { + "pricecharting.Category": { "properties": { - "accession_number": { - "description": "SEC accession number that uniquely identifies the filing.", - "type": "string" - }, - "acquired_or_disposed": { - "description": "`A` if the insider acquired the shares, `D` if disposed of them.", - "type": "string" - }, - "code": { + "name": { "type": "string" }, - "filing_date": { - "description": "Date the filing was submitted to the SEC, in YYYY-MM-DD format.", + "slug": { "type": "string" - }, - "filing_url": { - "description": "Link to the filing's index page on sec.gov.", + } + }, + "type": "object" + }, + "pricecharting.Console": { + "properties": { + "name": { "type": "string" }, - "form": { - "description": "Ownership form type: `3`, `4`, `5` or an amendment such as `4/A`.", + "slug": { "type": "string" + } + }, + "type": "object" + }, + "pricecharting.ConsoleProduct": { + "properties": { + "complete_price": { + "type": "number" }, - "is_director": { - "description": "Whether the insider is a director of the company.", - "type": "boolean" - }, - "is_officer": { - "description": "Whether the insider is an officer of the company.", - "type": "boolean" - }, - "is_ten_percent_owner": { - "description": "Whether the insider owns more than 10 percent of the company's shares.", - "type": "boolean" - }, - "owner_name": { - "description": "Name of the insider who filed.", - "type": "string" + "id": { + "type": "integer" }, - "owner_title": { - "description": "Insider's job title at the company, as stated on the filing.", + "image_url": { "type": "string" }, - "price_per_share": { - "description": "Price per share in the transaction.", + "loose_price": { "type": "number" }, - "security_title": { - "description": "Title of the security traded, such as `Common Stock`.", + "name": { "type": "string" }, - "shares": { - "description": "Number of shares in the transaction.", + "new_price": { "type": "number" }, - "shares_owned_after": { - "description": "Number of shares the insider owns after the transaction.", - "type": "number" + "slug": { + "type": "string" }, - "transaction_date": { - "description": "Date the transaction took place, in YYYY-MM-DD format.", + "url": { "type": "string" } }, "type": "object" }, - "sec.MarketBlock": { + "pricecharting.ConsoleResponse": { "properties": { - "change_percent": { - "description": "Price change since the previous close, in percent.", - "type": "number" - }, - "currency": { - "description": "Currency code the price is quoted in.", + "console": { "type": "string" }, - "day_high": { - "description": "Highest share price of the current trading day.", - "type": "number" + "cursor": { + "type": "integer" }, - "day_low": { - "description": "Lowest share price of the current trading day.", - "type": "number" + "next_cursor": { + "type": "integer" }, - "market_cap": { - "description": "Market capitalisation of the company.", - "type": "number" + "price_labels": { + "items": { + "type": "string" + }, + "type": "array" }, - "name": { - "description": "Company name shown with the quote.", - "type": "string" + "products": { + "items": { + "$ref": "#/definitions/pricecharting.ConsoleProduct" + }, + "type": "array" }, - "price": { - "description": "Latest share price, in `currency`.", - "type": "number" + "sort": { + "type": "string" }, - "symbol": { - "description": "Ticker symbol of the quote.", + "title": { "type": "string" } }, "type": "object" }, - "sec.NameCount": { + "pricecharting.GradeCount": { "properties": { "count": { - "description": "Number of open roles in the department.", "type": "integer" }, - "name": { - "description": "Name of the department.", - "type": "string" + "grade": { + "type": "integer" } }, "type": "object" }, - "sec.NewsItem": { + "pricecharting.Population": { "properties": { - "published_at": { - "description": "Time the article was published.", - "type": "string" + "cgc": { + "items": { + "$ref": "#/definitions/pricecharting.GradeCount" + }, + "type": "array" }, - "publisher": { - "description": "Name of the outlet that published the article.", - "type": "string" + "psa": { + "items": { + "$ref": "#/definitions/pricecharting.GradeCount" + }, + "type": "array" + } + }, + "type": "object" + }, + "pricecharting.PriceCell": { + "properties": { + "change": { + "type": "number" }, - "title": { - "description": "Headline of the news article.", + "label": { "type": "string" }, - "url": { - "description": "Link to the article.", - "type": "string" + "price": { + "type": "number" } }, "type": "object" }, - "sec.SubmissionsResponse": { + "pricecharting.PriceHistoryResponse": { "properties": { - "category": { - "description": "SEC filer category, such as `Large accelerated filer`.", - "example": "Large accelerated filer", - "type": "string" - }, - "cik": { - "description": "Company's SEC Central Index Key (CIK) number.", - "example": 320193, - "type": "integer" - }, - "cik_padded": { - "description": "CIK number padded to 10 digits with a `CIK` prefix, as used in SEC data URLs.", - "example": "CIK0000320193", + "currency": { "type": "string" }, - "count": { - "description": "Number of filings returned.", - "type": "integer" + "population": { + "$ref": "#/definitions/pricecharting.Population" }, - "entity_type": { - "description": "Type of filer, such as `operating`.", - "example": "operating", - "type": "string" + "product": { + "$ref": "#/definitions/pricecharting.ProductRef" }, - "exchanges": { - "description": "Stock exchanges the company is listed on, such as `Nasdaq`.", - "example": [ - "Nasdaq" - ], + "series": { "items": { - "type": "string" + "$ref": "#/definitions/pricecharting.PriceSeries" }, "type": "array" + } + }, + "type": "object" + }, + "pricecharting.PricePoint": { + "properties": { + "date": { + "description": "Date is the first day of the month the price describes (YYYY-MM-DD).", + "type": "string" }, - "filings": { - "description": "Company's filings, newest first, after applying the form and date filters.", + "price": { + "type": "number" + } + }, + "type": "object" + }, + "pricecharting.PriceSeries": { + "properties": { + "label": { + "description": "Label is the column's name on this product, for example Ungraded, Grade 9\nor PSA 10 on a card and Loose, Complete or New on a game.", + "type": "string" + }, + "points": { "items": { - "$ref": "#/definitions/sec.Filing" + "$ref": "#/definitions/pricecharting.PricePoint" }, "type": "array" }, - "fiscal_year_end": { - "description": "Last day of the company's fiscal year in MMDD format, such as `0930`.", - "example": "0930", + "tab": { + "description": "Tab is the column's sales tab id, the same value as recent_sales[].tab in\npricecharting-product: used, cib, new, graded, box-only or manual-only.", "type": "string" - }, - "former_names": { - "description": "Names the company has previously filed under.", - "items": { + } + }, + "type": "object" + }, + "pricecharting.Product": { + "properties": { + "attributes": { + "additionalProperties": { "type": "string" }, - "type": "array" + "type": "object" }, - "name": { - "description": "Company name as registered with the SEC.", - "example": "Apple Inc.", + "console": { "type": "string" }, - "sic": { - "description": "Standard Industrial Classification (SIC) code of the company.", + "console_slug": { "type": "string" }, - "sic_description": { - "description": "Text description of the SIC industry code.", - "type": "string" + "full_prices": { + "items": { + "$ref": "#/definitions/pricecharting.PriceCell" + }, + "type": "array" }, - "source_url": { - "description": "URL the data was read from.", + "id": { + "type": "integer" + }, + "image_url": { "type": "string" }, - "state_of_incorporation": { - "description": "Code of the state or country where the company is incorporated.", - "example": "CA", + "name": { "type": "string" }, - "tickers": { - "description": "Ticker symbols the company trades under.", + "prices": { "items": { - "type": "string" + "$ref": "#/definitions/pricecharting.PriceCell" + }, + "type": "array" + }, + "recent_sales": { + "items": { + "$ref": "#/definitions/pricecharting.Sale" }, "type": "array" + }, + "slug": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "sec.companySearchResponseDoc": { + "pricecharting.ProductRef": { "properties": { - "code": { - "example": 200, + "console": { + "type": "string" + }, + "console_slug": { + "type": "string" + }, + "id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sec.CompanySearchResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "slug": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "sec.filingResponseDoc": { + "pricecharting.ProductResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "product": { + "$ref": "#/definitions/pricecharting.Product" + } + }, + "type": "object" + }, + "pricecharting.Sale": { + "properties": { + "date": { + "type": "string" }, - "data": { - "$ref": "#/definitions/sec.FilingResponse" + "grade": { + "type": "string" }, - "msg": { - "example": "OK", + "item_id": { + "type": "string" + }, + "item_url": { + "type": "string" + }, + "price": { + "type": "number" + }, + "source": { + "type": "string" + }, + "tab": { + "type": "string" + }, + "title": { "type": "string" } }, "type": "object" }, - "sec.filingSectionsResponseDoc": { + "pricecharting.SearchProduct": { "properties": { - "code": { - "example": 200, + "category": { + "type": "string" + }, + "complete_price": { + "type": "number" + }, + "console": { + "type": "string" + }, + "console_uid": { + "type": "string" + }, + "id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sec.FilingSectionsResponse" + "image_url": { + "type": "string" }, - "msg": { - "example": "OK", + "loose_price": { + "type": "number" + }, + "name": { "type": "string" + }, + "new_price": { + "type": "number" } }, "type": "object" }, - "sec.financialsResponseDoc": { + "pricecharting.SearchResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "products": { + "items": { + "$ref": "#/definitions/pricecharting.SearchProduct" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/sec.FinancialsResponse" + "query": { + "type": "string" }, - "msg": { - "example": "OK", + "sort": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "sec.framesResponseDoc": { + "pricecharting.bigMoversResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sec.FramesResponse" + "$ref": "#/definitions/pricecharting.BigMoversResponse" }, "msg": { "example": "OK", @@ -188056,14 +196957,14 @@ }, "type": "object" }, - "sec.fullTextResponseDoc": { + "pricecharting.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sec.FullTextSearchResponse" + "$ref": "#/definitions/pricecharting.CategoriesResponse" }, "msg": { "example": "OK", @@ -188072,14 +196973,14 @@ }, "type": "object" }, - "sec.holdingsResponseDoc": { + "pricecharting.consoleResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sec.HoldingsResponse" + "$ref": "#/definitions/pricecharting.ConsoleResponse" }, "msg": { "example": "OK", @@ -188088,14 +196989,14 @@ }, "type": "object" }, - "sec.insiderResponseDoc": { + "pricecharting.priceHistoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sec.InsiderResponse" + "$ref": "#/definitions/pricecharting.PriceHistoryResponse" }, "msg": { "example": "OK", @@ -188104,14 +197005,14 @@ }, "type": "object" }, - "sec.intelligenceResponseDoc": { + "pricecharting.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sec.CompanyIntelligenceResponse" + "$ref": "#/definitions/pricecharting.ProductResponse" }, "msg": { "example": "OK", @@ -188120,14 +197021,14 @@ }, "type": "object" }, - "sec.submissionsResponseDoc": { + "pricecharting.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sec.SubmissionsResponse" + "$ref": "#/definitions/pricecharting.SearchResponse" }, "msg": { "example": "OK", @@ -188136,4065 +197037,4036 @@ }, "type": "object" }, - "sephora.Answer": { + "pristineauction.AuctionStatus": { "properties": { - "author": { - "type": "string" - }, - "helpful_votes": { - "type": "integer" - }, - "id": { - "type": "string" - }, - "is_brand_answer": { - "type": "boolean" - }, - "not_helpful_votes": { - "type": "integer" - }, - "submitted_at": { - "type": "string" - }, - "text": { + "slug": { + "example": "completed", "type": "string" } }, "type": "object" }, - "sephora.Brand": { + "pristineauction.AuctionType": { "properties": { - "brand_id": { - "example": "5644", - "type": "string" - }, - "is_new": { - "type": "boolean" - }, - "name": { - "example": "Lancôme", - "type": "string" - }, "slug": { - "example": "lancome", + "example": "daily", "type": "string" } }, "type": "object" }, - "sephora.BrandsResponse": { + "pristineauction.CategoriesResponse": { "properties": { - "brands": { + "auction_types": { "items": { - "$ref": "#/definitions/sephora.Brand" + "$ref": "#/definitions/pristineauction.AuctionType" }, "type": "array" }, - "fetched_at": { - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/pristineauction.Category" + }, + "type": "array" }, - "source_url": { - "type": "string" + "sort": { + "items": { + "$ref": "#/definitions/pristineauction.SortOption" + }, + "type": "array" }, - "total_count": { - "example": 373, - "type": "integer" + "statuses": { + "items": { + "$ref": "#/definitions/pristineauction.AuctionStatus" + }, + "type": "array" } }, "type": "object" }, - "sephora.CategoriesResponse": { + "pristineauction.Category": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/sephora.CategoryEntry" - }, - "type": "array" + "count": { + "example": 8608, + "type": "integer" }, - "fetched_at": { + "label": { + "example": "BASEBALL", "type": "string" }, - "source_url": { + "slug": { + "example": "baseball", + "type": "string" + }, + "url": { + "example": "https://www.pristineauction.com/auction/category/baseball", "type": "string" } }, "type": "object" }, - "sephora.CategoryEntry": { + "pristineauction.LotDetailResponse": { "properties": { - "department": { - "example": "makeup", + "auction_type": { + "example": "CARD AUCTION", "type": "string" }, - "group": { - "example": "Eye", + "auction_type_url": { "type": "string" }, - "name": { - "example": "Mascara", + "availability": { + "example": "InStock", "type": "string" }, - "slug": { - "example": "mascara", + "category": { + "example": "trading-cards", "type": "string" - } - }, - "type": "object" - }, - "sephora.CategoryResponse": { - "properties": { - "brand": { - "items": { - "type": "string" - }, - "type": "array" }, - "category_id": { + "currency": { + "example": "USD", "type": "string" }, - "count": { - "type": "integer" - }, - "display_name": { - "example": "Makeup", + "description": { "type": "string" }, - "fetched_at": { + "ends_at": { + "example": "2026-09-21T03:00:00-07:00", "type": "string" }, - "filter": { + "images": { "items": { "type": "string" }, "type": "array" }, - "is_new": { - "type": "boolean" - }, - "page": { - "example": 1, + "lot_number": { + "example": 13154611, "type": "integer" }, - "page_size": { - "example": 60, - "type": "integer" + "no_reserve": { + "type": "boolean" }, - "price_max": { - "type": "integer" + "price": { + "example": 256.66, + "type": "number" }, - "price_min": { - "type": "integer" + "sku": { + "example": "LOT-13154611", + "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/sephora.SearchProduct" - }, - "type": "array" + "title": { + "example": "Mickey Mantle 1969 Topps #500 (PSA 8) (MC)", + "type": "string" }, - "rating_min": { + "total_bids": { "type": "integer" }, - "related_categories": { - "items": { - "type": "string" - }, - "type": "array" - }, - "slug": { - "example": "makeup-cosmetics", - "type": "string" + "total_views": { + "type": "integer" }, - "sort_by": { - "example": "featured", - "type": "string" + "total_watching": { + "type": "integer" }, - "source_url": { + "url": { + "example": "https://www.pristineauction.com/a13154611", "type": "string" - }, - "total_products": { - "example": 2492, - "type": "integer" } }, "type": "object" }, - "sephora.FullReview": { + "pristineauction.LotSummary": { "properties": { - "author": { + "auction_type": { + "example": "CARD AUCTION", "type": "string" }, - "body": { + "auction_type_url": { "type": "string" }, - "helpful_votes": { - "type": "integer" - }, - "id": { + "currency": { + "example": "USD", "type": "string" }, - "location": { + "ends_at": { + "example": "2026-09-21T03:00:00Z", "type": "string" }, - "not_helpful_votes": { - "type": "integer" + "high_bid": { + "example": 256.66, + "type": "number" }, - "photo_urls": { - "items": { - "type": "string" - }, - "type": "array" + "image_url": { + "type": "string" }, - "rating": { + "lot_number": { + "example": 13154611, "type": "integer" }, - "ratings_only": { - "description": "RatingsOnly marks a review that carries only a star rating with no\nwritten title/body -- Bazaarvoice allows these and this endpoint still\nsurfaces them.", - "type": "boolean" - }, - "recommended": { + "no_reserve": { "type": "boolean" }, - "secondary_ratings": { - "items": { - "$ref": "#/definitions/sephora.ReviewSecondaryRating" - }, - "type": "array" - }, - "submitted_at": { + "subtitle": { + "example": "Rookie Card", "type": "string" }, "title": { + "example": "Mickey Mantle 1969 Topps #500 (PSA 8) (MC)", + "type": "string" + }, + "url": { + "example": "https://www.pristineauction.com/a13154611", "type": "string" } }, "type": "object" }, - "sephora.ProductQuestionsResponse": { + "pristineauction.SearchResponse": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, "page": { "type": "integer" }, - "page_size": { + "per_page": { "type": "integer" }, - "product_id": { - "type": "string" - }, - "questions": { + "results": { "items": { - "$ref": "#/definitions/sephora.Question" + "$ref": "#/definitions/pristineauction.LotSummary" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "total_pages": { + "total": { "type": "integer" }, - "total_questions": { + "total_pages": { "type": "integer" } }, "type": "object" }, - "sephora.ProductResponse": { + "pristineauction.SortOption": { "properties": { - "brand": { - "example": "LANEIGE", + "slug": { + "example": "ending-soonest", "type": "string" + } + }, + "type": "object" + }, + "pristineauction.categoriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "category": { + "data": { + "$ref": "#/definitions/pristineauction.CategoriesResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "pristineauction.lotDetailResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "description": { + "data": { + "$ref": "#/definitions/pristineauction.LotDetailResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "pristineauction.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "fetched_at": { + "data": { + "$ref": "#/definitions/pristineauction.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "producthunt.LeaderboardAdItem": { + "properties": { + "channel_kind": { + "description": "Placement type of the ad, for example `feed`.", "type": "string" }, - "image": { + "id": { + "description": "Product Hunt ID of the ad.", "type": "string" }, - "name": { + "large_asset_uuid": { + "description": "Identifier of the large ad image on Product Hunt's image host.", "type": "string" }, - "product_group_id": { - "example": "P420652", + "name": { + "description": "Name shown on the ad.", "type": "string" }, - "rating": { - "example": 4.3, - "type": "number" + "post": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.LeaderboardAdPost" + } + ], + "description": "Launch post the ad promotes, when it promotes one." }, - "review_count": { - "type": "integer" + "small_asset_uuid": { + "description": "Identifier of the small ad image on Product Hunt's image host.", + "type": "string" }, - "review_sample": { - "items": { - "$ref": "#/definitions/sephora.ReviewSample" - }, - "type": "array" + "subject": { + "description": "Kind of ad entry as Product Hunt labels it, for example `Channel`.", + "type": "string" }, - "source_url": { + "tagline": { + "description": "Short tagline shown on the ad.", + "type": "string" + }, + "thumbnail_uuid": { + "description": "Identifier of the ad thumbnail image on Product Hunt's image host.", "type": "string" }, "url": { + "description": "Link the ad points to.", "type": "string" }, - "variants": { - "items": { - "$ref": "#/definitions/sephora.Variant" - }, - "type": "array" + "variation_id": { + "description": "Identifier of the ad variation shown.", + "type": "string" } }, "type": "object" }, - "sephora.ProductReviewsResponse": { + "producthunt.LeaderboardAdPost": { "properties": { - "average_rating": { - "type": "number" - }, - "count": { + "comments_count": { + "description": "Number of comments on the launch.", "type": "integer" }, - "fetched_at": { + "created_at": { + "description": "ISO 8601 timestamp of when the launch was created.", "type": "string" }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" + "disabled_when_scheduled": { + "description": "Whether upvoting is disabled while the launch is scheduled.", + "type": "boolean" }, - "product_id": { + "embargo_preview_at": { + "description": "ISO 8601 timestamp of the embargo preview, when the launch has one.", "type": "string" }, - "rating_count": { - "description": "RatingCount, AverageRating, RecommendedRatio, and RatingHistogram are\nthe product's site-wide aggregate rating summary, not just this page --\nabsent (zero-valued) for a product with no reviews yet.", - "type": "integer" + "featured_at": { + "description": "ISO 8601 timestamp of when Product Hunt featured the launch.", + "type": "string" }, - "rating_histogram": { - "description": "RatingHistogram is the count of ratings per star, ascending: index 0 is\n1-star, index 4 is 5-star.", - "items": { - "type": "integer" - }, - "type": "array" + "featured_comment": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductCategoryAdComment" + } + ], + "description": "Comment Product Hunt features on the launch." }, - "recommended_ratio": { - "type": "number" + "has_voted": { + "description": "Whether the viewer has upvoted this launch.", + "type": "boolean" }, - "reviews": { - "items": { - "$ref": "#/definitions/sephora.FullReview" - }, - "type": "array" + "hide_votes_count": { + "description": "Whether the maker hides the vote count for this launch.", + "type": "boolean" }, - "source_url": { + "id": { + "description": "Product Hunt ID of the promoted launch post.", "type": "string" }, - "total_pages": { + "latest_score": { + "description": "Current upvote score of the launch.", "type": "integer" }, - "total_reviews": { - "type": "integer" - } - }, - "type": "object" - }, - "sephora.Question": { - "properties": { - "answer_count": { + "launch_day_score": { + "description": "Upvote score the launch had on its launch day.", "type": "integer" }, - "answers": { - "items": { - "$ref": "#/definitions/sephora.Answer" - }, - "type": "array" - }, - "author": { + "name": { + "description": "Name of the promoted launch.", "type": "string" }, - "has_best_answer": { - "type": "boolean" + "product": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.LeaderboardProductRef" + } + ], + "description": "Product the launch belongs to." }, - "id": { - "type": "string" + "randomization_status": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.LeaderboardRandomizationStatus" + } + ], + "description": "Whether and when Product Hunt randomizes where this launch appears." }, - "submitted_at": { + "slug": { + "description": "URL slug of the promoted launch post.", "type": "string" }, - "text": { + "topics": { + "description": "Topics the launch is tagged with.", + "items": { + "$ref": "#/definitions/producthunt.LeaderboardTopic" + }, + "type": "array" + }, + "updated_at": { + "description": "ISO 8601 timestamp of the last update to the launch.", "type": "string" } }, "type": "object" }, - "sephora.ReviewSample": { + "producthunt.LeaderboardGhostItem": { "properties": { - "author": { - "type": "string" - }, - "body": { - "type": "string" - }, - "date_published": { - "type": "string" - }, "id": { + "description": "Product Hunt ID of the empty ad slot.", "type": "string" }, - "rating": { - "type": "number" - }, - "title": { + "subject": { + "description": "Kind of entry as Product Hunt labels it. Always `Ghost`.", "type": "string" } }, "type": "object" }, - "sephora.ReviewSecondaryRating": { + "producthunt.LeaderboardItem": { "properties": { - "max_value": { - "example": 5, - "type": "integer" + "ad": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.LeaderboardAdItem" + } + ], + "description": "Ad details. Set when `type` is `ad`." }, - "name": { - "example": "Value", - "type": "string" + "ghost_ad": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.LeaderboardGhostItem" + } + ], + "description": "Empty ad slot details. Set when `type` is `ghost_ad`." }, - "value": { - "example": 4, - "type": "integer" + "post": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.LeaderboardPostItem" + } + ], + "description": "Launch details. Set when `type` is `post`." + }, + "type": { + "description": "Kind of entry: `post` for a launch, `ad` for an ad or `ghost_ad` for an empty ad slot.", + "type": "string" } }, "type": "object" }, - "sephora.SearchProduct": { + "producthunt.LeaderboardPage": { "properties": { - "brand_name": { - "example": "tarte", - "type": "string" - }, - "image_url": { - "type": "string" - }, - "list_price": { - "example": "$25.00", - "type": "string" - }, - "more_colors": { - "type": "integer" - }, - "product_id": { - "example": "P520769", - "type": "string" - }, - "product_name": { + "connection": { + "description": "Name of the Product Hunt feed the items come from.", "type": "string" }, - "rating": { - "example": 4.5, - "type": "number" - }, - "review_count": { + "day": { + "description": "Day of the month of the leaderboard period. Set for daily leaderboards.", + "example": 29, "type": "integer" }, - "sku_id": { + "end_cursor": { + "description": "Cursor that points to the end of this page, as Product Hunt returns it.", "type": "string" }, - "sponsored": { + "featured": { + "description": "Whether the leaderboard lists featured launches only.", "type": "boolean" }, - "url": { - "type": "string" - }, - "value_price": { - "type": "string" - } - }, - "type": "object" - }, - "sephora.SearchResponse": { - "properties": { - "brand": { + "golden_kitty_years": { + "description": "Years that have a Golden Kitty Awards hall of fame entry.", "items": { - "type": "string" + "type": "integer" }, "type": "array" }, - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" + "has_next_page": { + "description": "Whether Product Hunt has more leaderboard items after this page.", + "type": "boolean" }, - "filter": { + "items": { + "description": "Leaderboard entries in ranked order. Each one is a launch, an ad or an empty ad slot.", "items": { - "type": "string" + "$ref": "#/definitions/producthunt.LeaderboardItem" }, "type": "array" }, - "is_new": { - "type": "boolean" - }, - "page": { + "month": { + "description": "Month number from the requested date, 1 to 12. Only meaningful for daily and monthly leaderboards.", "example": 1, "type": "integer" }, - "page_size": { - "example": 60, - "type": "integer" - }, - "price_max": { - "example": 30, - "type": "integer" - }, - "price_min": { - "example": 15, - "type": "integer" + "order": { + "description": "Ranking order the leaderboard uses, for example `DAILY_RANK`.", + "example": "DAILY_RANK", + "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/sephora.SearchProduct" - }, - "type": "array" + "raw_page_info": { + "additionalProperties": {}, + "description": "Pagination details for this page as Product Hunt returns them: `endCursor` and `hasNextPage`.", + "type": "object" }, - "query": { - "example": "mascara", + "scope": { + "description": "Leaderboard period: `daily`, `weekly`, `monthly` or `yearly`.", + "example": "daily", "type": "string" }, - "rating_min": { - "example": 4, + "total_count": { + "description": "Number of items returned on this page.", "type": "integer" }, - "related_searches": { - "items": { - "type": "string" - }, - "type": "array" - }, - "sort_by": { - "example": "featured", - "type": "string" - }, - "source_url": { - "type": "string" + "week": { + "description": "ISO week number from the requested date. Only meaningful for weekly leaderboards.", + "example": 5, + "type": "integer" }, - "total_products": { - "example": 180, + "year": { + "description": "Year of the leaderboard period.", + "example": 2026, "type": "integer" } }, "type": "object" }, - "sephora.Store": { + "producthunt.LeaderboardPostItem": { "properties": { - "address": { - "$ref": "#/definitions/sephora.StoreAddress" + "comments_count": { + "description": "Number of comments on the launch.", + "type": "integer" }, - "display_name": { - "example": "STATE STREET", + "created_at": { + "description": "ISO 8601 timestamp of when the launch was created.", "type": "string" }, - "distance_miles": { - "example": 0.2, - "type": "number" + "daily_rank": { + "description": "Rank on the daily leaderboard. `0` when Product Hunt gives no rank.", + "type": "integer" }, - "hours": { - "$ref": "#/definitions/sephora.StoreHours" + "disabled_when_scheduled": { + "description": "Whether upvoting is disabled while the launch is scheduled.", + "type": "boolean" }, - "is_bopisable": { + "embargo_preview_at": { + "description": "ISO 8601 timestamp of the embargo preview, when the launch has one.", + "type": "string" + }, + "featured_at": { + "description": "ISO 8601 timestamp of when Product Hunt featured the launch.", + "type": "string" + }, + "friend_voters_count": { + "description": "Number of the viewer's friends who upvoted the launch.", + "type": "integer" + }, + "has_voted": { + "description": "Whether the viewer has upvoted this launch.", "type": "boolean" }, - "is_curbside_enabled": { + "hide_votes_count": { + "description": "Whether the maker hides the vote count for this launch.", "type": "boolean" }, - "is_online_reservation_enabled": { + "id": { + "description": "Product Hunt ID of the launch post.", + "type": "string" + }, + "is_subscribed": { + "description": "Whether the viewer is subscribed to this launch.", "type": "boolean" }, - "latitude": { - "type": "number" + "latest_score": { + "description": "Current upvote score of the launch.", + "type": "integer" }, - "longitude": { - "type": "number" + "launch_day_score": { + "description": "Upvote score the launch had on its launch day.", + "type": "integer" }, - "same_day_delivery_enabled": { - "type": "boolean" + "monthly_rank": { + "description": "Rank on the monthly leaderboard. `0` when Product Hunt gives no rank.", + "type": "integer" }, - "store_id": { - "example": "0662", + "name": { + "description": "Name of the launch as shown on the leaderboard.", "type": "string" }, - "store_type": { - "example": "SEPHORA", - "type": "string" + "product": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.LeaderboardProductRef" + } + ], + "description": "Product the launch belongs to." }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "sephora.StoreAddress": { - "properties": { - "address1": { + "product_state": { + "description": "Product Hunt's state label for the product, for example `default`.", "type": "string" }, - "address2": { - "type": "string" + "randomization_status": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.LeaderboardRandomizationStatus" + } + ], + "description": "Whether and when Product Hunt randomizes where this launch appears." }, - "city": { + "scheduled_at": { + "description": "ISO 8601 timestamp the launch is scheduled for.", "type": "string" }, - "country": { + "shortened_url": { + "description": "Short Product Hunt link to the launch.", "type": "string" }, - "mall_name": { + "slug": { + "description": "URL slug of the launch post.", "type": "string" }, - "phone": { + "tagline": { + "description": "Short tagline of the launch.", "type": "string" }, - "postal_code": { + "thumbnail_image_uuid": { + "description": "Identifier of the launch thumbnail image on Product Hunt's image host.", "type": "string" }, - "state": { + "topics": { + "description": "Topics the launch is tagged with.", + "items": { + "$ref": "#/definitions/producthunt.LeaderboardTopic" + }, + "type": "array" + }, + "updated_at": { + "description": "ISO 8601 timestamp of the last update to the launch.", "type": "string" + }, + "weekly_rank": { + "description": "Rank on the weekly leaderboard. `0` when Product Hunt gives no rank.", + "type": "integer" } }, "type": "object" }, - "sephora.StoreHours": { + "producthunt.LeaderboardProductRef": { "properties": { - "friday": { - "type": "string" - }, - "monday": { + "id": { + "description": "Product Hunt ID of the product.", "type": "string" }, - "saturday": { - "type": "string" + "is_no_longer_online": { + "description": "Whether Product Hunt marks the product as no longer online.", + "type": "boolean" }, - "sunday": { - "type": "string" + "is_subscribed": { + "description": "Whether the viewer follows this product.", + "type": "boolean" }, - "thursday": { - "type": "string" + "is_top_product": { + "description": "Whether Product Hunt marks this as a top product.", + "type": "boolean" }, - "time_zone": { - "example": "America/Chicago", + "logo_uuid": { + "description": "Identifier of the product logo on Product Hunt's image host.", "type": "string" }, - "tuesday": { + "name": { + "description": "Name of the product.", "type": "string" }, - "wednesday": { + "slug": { + "description": "URL slug of the product. Use it with the product endpoint.", "type": "string" } }, "type": "object" }, - "sephora.StoresResponse": { + "producthunt.LeaderboardRandomizationStatus": { "properties": { - "count": { - "type": "integer" + "active": { + "description": "Whether randomization is currently in effect.", + "type": "boolean" }, - "fetched_at": { + "next_transition_at": { + "description": "ISO 8601 timestamp of the next change to the randomization state, when there is one.", "type": "string" }, - "latitude": { - "example": 41.88325, - "type": "number" - }, - "longitude": { - "example": -87.6323879, - "type": "number" - }, - "radius": { - "example": 50, - "type": "integer" - }, - "source_url": { - "type": "string" + "random_day": { + "description": "Whether the launch day is randomized.", + "type": "boolean" }, - "stores": { - "items": { - "$ref": "#/definitions/sephora.Store" - }, - "type": "array" + "randomize_order": { + "description": "Whether the order of this launch among others is randomized.", + "type": "boolean" } }, "type": "object" }, - "sephora.SuggestCategory": { + "producthunt.LeaderboardTopic": { "properties": { + "id": { + "description": "Product Hunt ID of the topic.", + "type": "string" + }, "name": { - "example": "Mascara", + "description": "Display name of the topic.", "type": "string" }, - "url": { - "example": "https://www.sephora.com/shop/mascara", + "slug": { + "description": "URL slug of the topic.", "type": "string" } }, "type": "object" }, - "sephora.SuggestProduct": { + "producthunt.Product": { "properties": { - "brand_name": { - "example": "ILIA", + "categories": { + "description": "Names of the Product Hunt categories the product belongs to.", + "example": [ + "[\"Design\"", + "\"Productivity\"]" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "daily_rank": { + "description": "Daily leaderboard rank. `0` when Product Hunt shows none.", + "example": 1, + "type": "integer" + }, + "date_published": { + "description": "Time the product was first published on Product Hunt, as an RFC 3339 timestamp.", + "example": "2024-07-21T12:34:56Z", "type": "string" }, - "image_url": { + "description": { + "description": "Description of the product from its Product Hunt page.", + "example": "Chronicle lets designers and developers review every iteration in one place.", "type": "string" }, - "product_id": { - "example": "P431750", + "followers_count": { + "description": "Number of Product Hunt users following the product.", + "example": 2000, + "type": "integer" + }, + "id": { + "description": "Product Hunt slug of the product. Use it with the product endpoint.", + "example": "chronicle-design", "type": "string" }, - "product_name": { + "monthly_rank": { + "description": "Monthly leaderboard rank from the product's awards. `0` when Product Hunt shows none.", + "example": 1, + "type": "integer" + }, + "name": { + "description": "Name of the product.", + "example": "Chronicle", "type": "string" }, "rating": { - "example": 4.1361, + "description": "Average review rating on Product Hunt, out of 5.", + "example": 4.8, "type": "number" }, "review_count": { + "description": "Number of reviews the product has on Product Hunt.", + "example": 152, "type": "integer" }, - "sku_id": { - "type": "string" - } - }, - "type": "object" - }, - "sephora.SuggestResponse": { - "properties": { - "categories": { + "similar_products": { + "description": "Products Product Hunt lists as alternatives.", "items": { - "$ref": "#/definitions/sephora.SuggestCategory" + "$ref": "#/definitions/producthunt.SimilarProduct" }, "type": "array" }, - "fetched_at": { - "type": "string" - }, - "products": { + "social_links": { + "description": "Links to the product's social and app store pages, sorted alphabetically. Product Hunt's own links are left out.", + "example": [ + "[\"https://twitter.com/chronicle\"", + "\"https://github.com/chronicle\"]" + ], "items": { - "$ref": "#/definitions/sephora.SuggestProduct" + "type": "string" }, "type": "array" }, - "query": { - "example": "masc", + "tagline": { + "description": "Short tagline of the product.", + "example": "Visual version control for teams", "type": "string" }, - "source_url": { + "website": { + "description": "Product website address.", + "example": "https://chronicle.design", "type": "string" }, - "terms": { - "items": { - "$ref": "#/definitions/sephora.SuggestTerm" - }, - "type": "array" + "weekly_rank": { + "description": "Weekly leaderboard rank from the product's awards. `0` when Product Hunt shows none.", + "example": 1, + "type": "integer" } }, "type": "object" }, - "sephora.SuggestTerm": { + "producthunt.ProductAboutAd": { "properties": { - "term": { - "example": "mascara", + "channel_kind": { + "description": "Placement type of the ad, for example `feed`.", "type": "string" - } - }, - "type": "object" - }, - "sephora.Variant": { - "properties": { - "availability": { - "example": "InStock", + }, + "id": { + "description": "Product Hunt ID of the ad.", "type": "string" }, - "color": { - "example": "Acai Mango Smoothie", + "large_asset_uuid": { + "description": "Identifier of the large ad image on Product Hunt's image host.", "type": "string" }, - "currency_code": { - "example": "USD", + "name": { + "description": "Name shown on the ad.", "type": "string" }, - "image": { + "small_asset_uuid": { + "description": "Identifier of the small ad image on Product Hunt's image host.", "type": "string" }, - "name": { + "subject": { + "description": "Kind of ad entry as Product Hunt labels it.", "type": "string" }, - "price": { - "example": "25.00", + "tagline": { + "description": "Short tagline shown on the ad.", "type": "string" }, - "sku": { + "thumbnail_uuid": { + "description": "Identifier of the ad thumbnail image on Product Hunt's image host.", "type": "string" - } - }, - "type": "object" - }, - "sephora.brandsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sephora.BrandsResponse" + "url": { + "description": "Link the ad points to.", + "type": "string" }, - "msg": { - "example": "OK", + "variation_id": { + "description": "Identifier of the ad variation shown.", "type": "string" } }, "type": "object" }, - "sephora.categoriesResponseDoc": { + "producthunt.ProductAboutDiscussionForum": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/sephora.CategoriesResponse" + "id": { + "description": "Product Hunt ID of the product's discussion forum.", + "type": "string" }, - "msg": { - "example": "OK", + "path": { + "description": "Product Hunt path of the discussion forum.", "type": "string" - } - }, - "type": "object" - }, - "sephora.categoryResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sephora.CategoryResponse" + "threads": { + "description": "Discussion threads returned for the forum.", + "items": { + "$ref": "#/definitions/producthunt.ProductAboutDiscussionThread" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "total_count": { + "description": "Total number of discussion threads in the forum.", + "type": "integer" } }, "type": "object" }, - "sephora.productQuestionsResponseDoc": { + "producthunt.ProductAboutDiscussionThread": { "properties": { - "code": { - "example": 200, + "commentable_id": { + "description": "Product Hunt ID used for comments on the thread.", + "type": "string" + }, + "comments_count": { + "description": "Number of comments on the thread.", "type": "integer" }, - "data": { - "$ref": "#/definitions/sephora.ProductQuestionsResponse" + "created_at": { + "description": "ISO 8601 timestamp of when the thread was created.", + "type": "string" }, - "msg": { - "example": "OK", + "description_preview": { + "description": "Short preview of the thread's opening text.", "type": "string" - } - }, - "type": "object" - }, - "sephora.productResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sephora.ProductResponse" + "forum": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductAboutForumRef" + } + ], + "description": "Forum the thread belongs to." }, - "msg": { - "example": "OK", + "has_voted": { + "description": "Whether the viewer has upvoted the thread.", + "type": "boolean" + }, + "id": { + "description": "Product Hunt ID of the thread.", "type": "string" - } - }, - "type": "object" - }, - "sephora.productReviewsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sephora.ProductReviewsResponse" + "is_featured": { + "description": "Whether Product Hunt features the thread.", + "type": "boolean" }, - "msg": { - "example": "OK", + "is_pinned": { + "description": "Whether the thread is pinned in the forum.", + "type": "boolean" + }, + "path": { + "description": "Product Hunt path of the thread.", "type": "string" - } - }, - "type": "object" - }, - "sephora.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sephora.SearchResponse" + "slug": { + "description": "URL slug of the thread.", + "type": "string" }, - "msg": { - "example": "OK", + "title": { + "description": "Title of the thread.", "type": "string" - } - }, - "type": "object" - }, - "sephora.storesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sephora.StoresResponse" + "user": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductCategoryUser" + } + ], + "description": "Member who started the thread." }, - "msg": { - "example": "OK", - "type": "string" + "votes_count": { + "description": "Number of upvotes on the thread.", + "type": "integer" } }, "type": "object" }, - "sephora.suggestResponseDoc": { + "producthunt.ProductAboutForumRef": { "properties": { - "code": { - "example": 200, - "type": "integer" + "id": { + "description": "Product Hunt ID of the forum.", + "type": "string" }, - "data": { - "$ref": "#/definitions/sephora.SuggestResponse" + "path": { + "description": "Product Hunt path of the forum.", + "type": "string" }, - "msg": { - "example": "OK", + "slug": { + "description": "URL slug of the forum.", "type": "string" + }, + "subject": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductAboutForumSubject" + } + ], + "description": "Product the forum is about." } }, "type": "object" }, - "sevennewsau.AuthorResponse": { + "producthunt.ProductAboutForumSubject": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { - "type": "string" - }, - "name": { + "id": { + "description": "Product Hunt ID of the product the forum is about.", "type": "string" }, - "role": { - "type": "string" + "is_no_longer_online": { + "description": "Whether Product Hunt marks the product as no longer online.", + "type": "boolean" }, - "slug": { + "logo_uuid": { + "description": "Identifier of the product logo on Product Hunt's image host.", "type": "string" }, - "social_links": { - "items": { - "type": "string" - }, - "type": "array" - }, - "url": { + "name": { + "description": "Name of the product the forum is about.", "type": "string" } }, "type": "object" }, - "sevennow.CatalogCategory": { + "producthunt.ProductAboutGhostAd": { "properties": { "id": { - "example": "48423", + "description": "Product Hunt ID of the ad entry.", "type": "string" }, - "name": { - "example": "Fresh Food", + "subject": { + "description": "Kind of entry as Product Hunt labels it, for example `Ghost`.", "type": "string" } }, "type": "object" }, - "sevennow.CatalogItem": { + "producthunt.ProductAboutLatestLaunch": { "properties": { - "age_restricted": { - "example": false, - "type": "boolean" - }, - "brand": { - "example": "Hot Food Pizza", + "id": { + "description": "Product Hunt ID of the latest launch.", "type": "string" }, - "calories": { - "example": "360", - "type": "string" + "is_maker": { + "description": "Whether the viewer is a maker of this launch.", + "type": "boolean" }, - "category": { - "example": "Fresh Food", - "type": "string" + "launch_number": { + "description": "Sequence number of this launch among the product's launches.", + "type": "integer" }, - "flavor_name": { - "example": "Pepperoni Pizza", - "type": "string" + "launched_this_week": { + "description": "Whether the product launched this week.", + "type": "boolean" }, - "image_url": { - "type": "string" + "launching_today": { + "description": "Whether the product is launching today.", + "type": "boolean" }, "name": { - "example": "Large Pizza - Ultimate Pepperoni", + "description": "Name of the latest launch.", "type": "string" }, - "original_price_cents": { - "example": 1099, - "type": "integer" - }, - "product_id": { - "example": "178322-2-6-2", + "product_state": { + "description": "Product Hunt's state label for the product, for example `default`.", "type": "string" }, - "promo_description": { - "example": "On Sale $6.99", + "scheduled_at": { + "description": "ISO 8601 timestamp the launch is scheduled for.", "type": "string" }, - "promo_price_cents": { - "example": 699, - "type": "integer" + "slug": { + "description": "URL slug of the latest launch.", + "type": "string" }, - "subcategory": { - "example": "Pizza", + "tagline": { + "description": "Short tagline of the latest launch.", "type": "string" }, - "upc": { - "example": "00072180687340", + "thumbnail_image_uuid": { + "description": "Identifier of the launch thumbnail image on Product Hunt's image host.", "type": "string" } }, "type": "object" }, - "sevennow.CatalogResponse": { + "producthunt.ProductAboutLaunch": { "properties": { - "active_items": { - "example": 2664, - "type": "integer" + "ad1": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductAboutGhostAd" + } + ], + "description": "First ad slot shown next to the launch." }, - "categories": { + "ad2": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductAboutGhostAd" + } + ], + "description": "Second ad entry attached to the launch." + }, + "badges": { + "description": "Badges the launch has earned, such as leaderboard awards.", "items": { - "$ref": "#/definitions/sevennow.CatalogCategory" + "$ref": "#/definitions/producthunt.ProductCategoryListBadge" }, "type": "array" }, - "fetched_at": { - "type": "string" - }, - "limit": { - "example": 20, - "type": "integer" - }, - "out_of_stock_items": { - "example": 435, - "type": "integer" + "can_deputy_manage": { + "description": "Whether the viewer can manage the launch as a deputy.", + "type": "boolean" }, - "sections": { - "items": { - "$ref": "#/definitions/sevennow.CatalogSection" - }, - "type": "array" + "can_manage": { + "description": "Whether the viewer can manage the launch.", + "type": "boolean" }, - "skip": { - "example": 0, + "comments_count": { + "description": "Number of comments on the launch.", "type": "integer" }, - "source_url": { + "created_at": { + "description": "ISO 8601 timestamp of when the launch was created.", "type": "string" }, - "store_id": { - "example": "39226", - "type": "string" - } - }, - "type": "object" - }, - "sevennow.CatalogSection": { - "properties": { - "count": { - "example": 20, + "daily_rank": { + "description": "Rank on the daily leaderboard. `0` when Product Hunt gives no rank.", "type": "integer" }, - "display_order": { - "example": 3, - "type": "integer" + "description": { + "description": "Description of the launch written by the maker.", + "type": "string" }, - "items": { + "detailed_reviews": { + "description": "Detailed reviews and shoutouts for the launch.", "items": { - "$ref": "#/definitions/sevennow.CatalogItem" + "$ref": "#/definitions/producthunt.ProductAboutShoutout" }, "type": "array" }, - "name": { - "description": "Name is the shelf's own display title, e.g. \"Best Sellers\",\n\"$2 Deals\", \"What's New\". Upstream sends it on every section; it is\nthe only human-readable identifier a numeric section id has.", - "example": "$2 Deals", - "type": "string" + "disabled_when_scheduled": { + "description": "Whether upvoting is disabled while the launch is scheduled.", + "type": "boolean" }, - "section_id": { - "example": "48423", + "embargo_preview_at": { + "description": "ISO 8601 timestamp of the embargo preview, when the launch has one.", "type": "string" }, - "total": { - "example": 200, - "type": "integer" - } - }, - "type": "object" - }, - "sevennow.CategoriesResponse": { - "properties": { - "count": { - "example": 25, - "type": "integer" - }, - "departments": { - "description": "Departments are the store's permanent browsable departments.", - "items": { - "$ref": "#/definitions/sevennow.CategoryRef" - }, - "type": "array" + "featured": { + "description": "Whether Product Hunt featured the launch.", + "type": "boolean" }, - "fetched_at": { + "featured_at": { + "description": "ISO 8601 timestamp of when Product Hunt featured the launch.", "type": "string" }, - "shelves": { - "description": "Shelves are the merchandising rows the homepage currently features.\nThese rotate with promotions and seasons, so re-read them rather than\ncaching ids long-term.", - "items": { - "$ref": "#/definitions/sevennow.CategoryRef" - }, - "type": "array" + "has_voted": { + "description": "Whether the viewer has upvoted this launch.", + "type": "boolean" }, - "source_url": { - "type": "string" + "hide_votes_count": { + "description": "Whether the maker hides the vote count for this launch.", + "type": "boolean" }, - "store_id": { - "example": "39640", + "id": { + "description": "Product Hunt ID of the launch.", "type": "string" - } - }, - "type": "object" - }, - "sevennow.CategoryItem": { - "properties": { - "age_restricted": { - "example": false, + }, + "is_archived": { + "description": "Whether the launch is archived.", "type": "boolean" }, - "available": { - "example": true, + "is_available": { + "description": "Whether Product Hunt marks the launch as available.", "type": "boolean" }, - "available_quantity": { - "example": 100, - "type": "integer" + "is_hunter": { + "description": "Whether the viewer is the hunter who posted this launch.", + "type": "boolean" }, - "calories": { - "example": "360", - "type": "string" + "is_maker": { + "description": "Whether the viewer is a maker of this launch.", + "type": "boolean" }, - "image_url": { - "type": "string" + "is_top_launch": { + "description": "Whether Product Hunt marks this as a top launch.", + "type": "boolean" }, - "name": { - "example": "Large Pizza - Ultimate Pepperoni", - "type": "string" + "latest_score": { + "description": "Current upvote score of the launch.", + "type": "integer" }, - "price_cents": { - "example": 1299, + "launch_day_score": { + "description": "Upvote score the launch had on its launch day.", "type": "integer" }, - "product_id": { - "example": "178322-2-6-2", - "type": "string" + "launch_number": { + "description": "Sequence number of this launch among the product's launches.", + "type": "integer" }, - "promo_description": { - "example": "On Sale $6.99", + "launch_state": { + "description": "Launch state as Product Hunt labels it, for example `featured`.", "type": "string" }, - "promo_price_cents": { - "example": 699, - "type": "integer" + "launched_this_week": { + "description": "Whether the launch happened this week.", + "type": "boolean" }, - "subcategory": { - "example": "Pizza", - "type": "string" + "launching_today": { + "description": "Whether the product is launching today.", + "type": "boolean" }, - "upc": { - "example": "00052548537524", - "type": "string" - } - }, - "type": "object" - }, - "sevennow.CategoryRef": { - "properties": { - "display_order": { - "description": "DisplayOrder is the shelf's position on the store homepage. Only\nmeaningful for shelves.", - "example": 18, - "type": "integer" + "links": { + "description": "Download or visit links listed on the launch, one per store or website.", + "items": { + "$ref": "#/definitions/producthunt.ProductAboutLink" + }, + "type": "array" }, - "id": { - "example": "48395", - "type": "string" + "makers": { + "description": "Makers credited on the launch.", + "items": { + "$ref": "#/definitions/producthunt.ProductAboutUser" + }, + "type": "array" }, - "item_count": { - "description": "ItemCount is how many items the shelf holds upstream. Only populated\nfor shelves -- departments do not report a count here (use\nGET /7now/category's stats.total for those).", - "example": 25, - "type": "integer" + "media": { + "description": "Images and videos attached to the launch.", + "items": { + "$ref": "#/definitions/producthunt.ProductAboutMedia" + }, + "type": "array" }, - "kind": { - "description": "Kind is `department` for the store's permanent browsable departments\n(Drinks, Snacks, Fresh Food, ...) or `shelf` for a merchandising row\nthe homepage is currently featuring (\"$2 Deals\", \"What's New\").\nBoth are valid category_id values; shelves rotate, departments do not.", - "example": "department", + "meta": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductAboutMeta" + } + ], + "description": "Page metadata for the launch." + }, + "moderation_reason": { + "description": "Reason Product Hunt gives when the launch was moderated.", "type": "string" }, "name": { - "example": "Drinks", + "description": "Name of the launch.", "type": "string" - } - }, - "type": "object" - }, - "sevennow.CategoryResponse": { - "properties": { - "category_id": { - "example": "48423", + }, + "pricing_type": { + "description": "Pricing model of the product as Product Hunt lists it, for example `free`.", "type": "string" }, - "fetched_at": { + "primary_link": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductAboutPrimaryLink" + } + ], + "description": "Main link of the launch." + }, + "product": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductAboutLaunchProduct" + } + ], + "description": "Product the launch belongs to." + }, + "product_state": { + "description": "Product Hunt's state label for the product, for example `default`.", "type": "string" }, - "limit": { - "example": 20, - "type": "integer" + "promo": { + "additionalProperties": {}, + "description": "Promotion attached to the launch, as Product Hunt returns it.", + "type": "object" }, - "skip": { - "example": 0, - "type": "integer" + "redirect_to_product": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.LeaderboardProductRef" + } + ], + "description": "Product the launch page redirects to, when it redirects." }, - "source_url": { + "scheduled_at": { + "description": "ISO 8601 timestamp the launch is scheduled for.", "type": "string" }, - "stats": { - "$ref": "#/definitions/sevennow.CategoryStats" + "slug": { + "description": "URL slug of the launch.", + "type": "string" }, - "store_id": { - "example": "39226", + "tagline": { + "description": "Short tagline of the launch.", "type": "string" }, - "subcategories": { + "thumbnail_image_uuid": { + "description": "Identifier of the launch thumbnail image on Product Hunt's image host.", + "type": "string" + }, + "topics": { + "description": "Topics the launch is tagged with.", "items": { - "$ref": "#/definitions/sevennow.CategorySubcategory" + "$ref": "#/definitions/producthunt.ProductCategoryRef" }, "type": "array" - } - }, - "type": "object" - }, - "sevennow.CategoryStats": { - "properties": { - "available": { - "example": 99, - "type": "integer" }, - "out_of_stock": { - "example": 22, - "type": "integer" + "trashed_at": { + "description": "ISO 8601 timestamp of when the launch was trashed, when it was.", + "type": "string" }, - "percentage_available": { - "example": 82, - "type": "integer" + "updated_at": { + "description": "ISO 8601 timestamp of the last update to the launch.", + "type": "string" }, - "total": { - "example": 121, + "url": { + "description": "Product Hunt link to the launch.", + "type": "string" + }, + "user": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductAboutUser" + } + ], + "description": "Member who posted the launch." + }, + "weekly_rank": { + "description": "Rank on the weekly leaderboard. `0` when Product Hunt gives no rank.", "type": "integer" } }, "type": "object" }, - "sevennow.CategorySubcategory": { + "producthunt.ProductAboutLaunchFlags": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/sevennow.CategoryItem" - }, - "type": "array" - }, - "name": { - "example": "Pizza", + "id": { + "description": "Product Hunt ID of the latest launch.", "type": "string" + }, + "launched_this_week": { + "description": "Whether the product launched this week.", + "type": "boolean" + }, + "launching_today": { + "description": "Whether the product is launching today.", + "type": "boolean" } }, "type": "object" }, - "sevennow.Combo": { + "producthunt.ProductAboutLaunchProduct": { "properties": { - "available": { - "example": true, + "can_claim": { + "description": "Whether the viewer can claim the product page.", "type": "boolean" }, - "bundle_id": { - "example": "B00037", - "type": "string" + "can_edit": { + "description": "Whether the viewer can edit the product page.", + "type": "boolean" }, - "description": { + "clean_url": { + "description": "Product website address without tracking parameters.", "type": "string" }, - "image_url": { - "type": "string" + "detailed_review": { + "additionalProperties": {}, + "description": "Detailed review summary of the product, as Product Hunt returns it.", + "type": "object" }, - "name": { - "example": "7NOW Combo Builder SLIN 22 - $6.99 Pizza", - "type": "string" + "first_launch": { + "description": "Whether this is the product's first launch.", + "type": "boolean" }, - "promo_id": { - "description": "PromoID is the promotion behind the bundle. Pass it to\nGET /7now/combo for the bundle's pick-one-from-each item groups, or\nto GET /7now/promotion for a flat list of every eligible item.", - "example": "6a849a8fa1df2409010c719f", + "id": { + "description": "Product Hunt ID of the product.", "type": "string" }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "sevennow.ComboGroup": { - "properties": { - "is_primary": { - "example": true, + "is_claimed": { + "description": "Whether a team has claimed the product page.", "type": "boolean" }, - "items": { - "items": { - "$ref": "#/definitions/sevennow.DealItem" - }, - "type": "array" + "is_no_longer_online": { + "description": "Whether Product Hunt marks the product as no longer online.", + "type": "boolean" + }, + "is_subscribed": { + "description": "Whether the viewer follows this product.", + "type": "boolean" + }, + "is_top_product": { + "description": "Whether Product Hunt marks this as a top product.", + "type": "boolean" + }, + "is_viewer_team_member": { + "additionalProperties": {}, + "description": "Whether the viewer is on the product's team, as Product Hunt returns it.", + "type": "object" + }, + "latest_launch": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductAboutLaunchFlags" + } + ], + "description": "Flags describing the product's latest launch." + }, + "logo_uuid": { + "description": "Identifier of the product logo on Product Hunt's image host.", + "type": "string" }, "name": { - "example": "Eligible Whole Pizzas", + "description": "Name of the product.", "type": "string" }, - "quantity": { - "example": 1, - "type": "integer" - } - }, - "type": "object" - }, - "sevennow.ComboResponse": { - "properties": { - "count": { - "example": 1, + "posts_count": { + "description": "Number of launch posts the product has.", "type": "integer" }, - "fetched_at": { - "type": "string" + "pro_con_tags": { + "description": "Pro and con tags reviewers have attached to the product.", + "items": { + "$ref": "#/definitions/producthunt.ProductDetailedReviewTag" + }, + "type": "array" }, - "groups": { + "review_questions": { + "description": "Questions Product Hunt asks reviewers of the product.", "items": { - "$ref": "#/definitions/sevennow.ComboGroup" + "$ref": "#/definitions/producthunt.ProductAboutReviewQuestion" }, "type": "array" }, - "promo_id": { - "example": "6a849a8fa1df2409010c719f", - "type": "string" + "reviews_rating": { + "description": "Average review rating on Product Hunt.", + "type": "number" }, - "source_url": { + "slug": { + "description": "URL slug of the product. Use it with the product endpoint.", "type": "string" }, - "store_id": { - "example": "39640", + "tagline": { + "description": "Short tagline of the product.", "type": "string" }, - "terms": { - "$ref": "#/definitions/sevennow.ComboTerms" - } - }, - "type": "object" - }, - "sevennow.ComboTerms": { - "properties": { - "description": { - "example": "Any Whole Pizza $6.99 each", + "twitter_url": { + "description": "Link to the product's Twitter or X profile.", "type": "string" }, - "legal_terms": { + "viewer_pending_team_request": { + "additionalProperties": {}, + "description": "The viewer's pending request to join the product's team, as Product Hunt returns it.", + "type": "object" + }, + "website_domain": { + "description": "Domain name of the product website.", "type": "string" }, - "title": { - "example": "$6.99 Pizza", + "website_url": { + "description": "Product website address.", "type": "string" } }, "type": "object" }, - "sevennow.CombosResponse": { + "producthunt.ProductAboutLink": { "properties": { - "combos": { + "devices": { + "description": "Devices the linked app supports.", "items": { - "$ref": "#/definitions/sevennow.Combo" + "type": "string" }, "type": "array" }, - "count": { - "example": 5, - "type": "integer" + "id": { + "description": "Product Hunt ID of the link.", + "type": "string" }, - "fetched_at": { + "redirect_path": { + "description": "Product Hunt redirect path that leads to the link target.", "type": "string" }, - "source_url": { + "store_name": { + "description": "Name of the app store the link points to, when it points to one.", "type": "string" }, - "store_id": { - "example": "39640", + "website_name": { + "description": "Name of the website the link points to.", "type": "string" } }, "type": "object" }, - "sevennow.DealItem": { + "producthunt.ProductAboutMedia": { "properties": { - "age_restricted": { - "example": false, - "type": "boolean" - }, - "available": { - "example": true, - "type": "boolean" - }, - "available_quantity": { - "example": 5, - "type": "integer" - }, - "brand": { - "example": "Ben & Jerry's", + "id": { + "description": "Product Hunt ID of the media item.", "type": "string" }, - "calories": { - "example": "370", + "image_uuid": { + "description": "Identifier of the image on Product Hunt's image host.", "type": "string" }, - "category": { - "example": "Ice Cream", + "interactive_demo_id": { + "description": "Identifier of the interactive demo, when the media is one.", "type": "string" }, - "category_id": { - "example": "48396", + "interactive_demo_type": { + "description": "Type of the interactive demo, when the media is one.", "type": "string" }, - "image_url": { + "media_type": { + "description": "Type of media, for example `image`.", "type": "string" }, - "name": { - "example": "Ben & Jerry's Sundae Cookie Vermont-ster 14oz", - "type": "string" + "original_height": { + "description": "Height of the original image in pixels.", + "type": "integer" }, - "price_cents": { - "example": 999, + "original_width": { + "description": "Width of the original image in pixels.", "type": "integer" }, - "product_id": { - "example": "191743-0-1", + "platform": { + "description": "Video platform hosting the media, when it is a video.", "type": "string" }, - "promos": { - "items": { - "$ref": "#/definitions/sevennow.DealPromo" - }, - "type": "array" + "thumbnail_height": { + "description": "Height of the media thumbnail. 0 when not provided.", + "type": "integer" }, - "subcategory": { - "example": "Ben & Jerry's", + "thumbnail_width": { + "description": "Width of the media thumbnail. 0 when not provided.", + "type": "integer" + }, + "url": { + "description": "Link to the media item, for example a video link.", "type": "string" }, - "upc": { - "example": "00076840004294", + "video_id": { + "description": "Video identifier on the hosting platform, when the media is a video.", "type": "string" } }, "type": "object" }, - "sevennow.DealPromo": { + "producthunt.ProductAboutMentionedProduct": { "properties": { - "expiration_date": { - "example": "10/27/2026", - "type": "string" - }, "id": { - "example": "6a9746d488cc35e1bbff1584", + "description": "Product Hunt ID of the product.", "type": "string" }, - "long_description": { + "is_no_longer_online": { + "description": "Whether Product Hunt marks the product as no longer online.", + "type": "boolean" + }, + "logo_uuid": { + "description": "Identifier of the product logo on Product Hunt's image host.", "type": "string" }, - "promo_price_cents": { - "example": 700, - "type": "integer" + "name": { + "description": "Name of the product.", + "type": "string" }, - "promo_type": { - "example": "item", + "path": { + "description": "Product Hunt path of the product page.", "type": "string" }, - "short_description": { - "example": "On Sale $7", + "slug": { + "description": "URL slug of the product. Use it with the product endpoint.", "type": "string" }, - "start_date": { - "example": "09/01/2026", + "tagline": { + "description": "Short tagline of the product.", "type": "string" } }, "type": "object" }, - "sevennow.DealsResponse": { + "producthunt.ProductAboutMeta": { "properties": { - "count": { - "example": 20, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "has_more": { - "example": true, - "type": "boolean" - }, - "items": { - "items": { - "$ref": "#/definitions/sevennow.DealItem" - }, - "type": "array" - }, - "limit": { - "example": 20, - "type": "integer" - }, - "skip": { - "example": 0, - "type": "integer" - }, - "source_url": { - "type": "string" - }, - "stats": { - "$ref": "#/definitions/sevennow.DealsStats" - }, - "store_id": { - "example": "39640", + "title": { + "description": "Page title of the launch.", "type": "string" - }, - "total": { - "example": 548, - "type": "integer" } }, "type": "object" }, - "sevennow.DealsStats": { + "producthunt.ProductAboutPage": { "properties": { - "available": { - "example": 503, - "type": "integer" + "ad": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductAboutAd" + } + ], + "description": "Ad shown on the page." }, - "out_of_stock": { - "example": 45, - "type": "integer" + "launch": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductAboutLaunch" + } + ], + "description": "Launch the page highlights, when the layout variant has one." }, - "percentage_available": { - "example": 92, - "type": "integer" + "page_variant_typename": { + "description": "Layout variant Product Hunt uses for the product page, for example `ProductPageVariantHighlightedLaunch`.", + "type": "string" }, - "total": { - "example": 548, - "type": "integer" + "product": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductAboutProduct" + } + ], + "description": "Product details from the about page." + }, + "product_id": { + "description": "Product Hunt ID of the product.", + "type": "string" + }, + "viewer": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductAboutViewer" + } + ], + "description": "Details about the viewer's relationship to the product." } }, "type": "object" }, - "sevennow.NutritionEntry": { + "producthunt.ProductAboutPageVariant": { "properties": { - "name": { - "example": "Total Fat", + "launch_id": { + "description": "Product Hunt ID of the launch the page variant highlights.", "type": "string" }, - "value": { - "example": "11.0Gram", + "typename": { + "description": "Layout variant Product Hunt uses for the product page.", "type": "string" } }, "type": "object" }, - "sevennow.NutritionGroup": { + "producthunt.ProductAboutPost": { "properties": { - "entries": { + "badges": { + "description": "Badges the launch has earned, such as leaderboard awards.", "items": { - "$ref": "#/definitions/sevennow.NutritionEntry" + "$ref": "#/definitions/producthunt.ProductCategoryListBadge" }, "type": "array" }, - "group": { - "example": "fat", - "type": "string" - } - }, - "type": "object" - }, - "sevennow.Offer": { - "properties": { - "button_text": { - "type": "string" + "comments_count": { + "description": "Number of comments on the launch.", + "type": "integer" }, - "description": { - "example": "Any Whole Pizza $6.99 each", + "created_at": { + "description": "ISO 8601 timestamp of when the launch was created.", "type": "string" }, - "image_url": { - "type": "string" + "daily_rank": { + "description": "Rank on the daily leaderboard. `0` when Product Hunt gives no rank.", + "type": "integer" }, - "legal_terms": { - "type": "string" + "disabled_when_scheduled": { + "description": "Whether upvoting is disabled while the launch is scheduled.", + "type": "boolean" }, - "name": { - "description": "Name is upstream's internal campaign name, e.g.\n\"US_7NOW_$6.99 Pizza_(8/21/26-1/5/2027)\". It usually encodes the run\ndates, which the banner record does not carry as fields.", - "example": "US_7NOW_$6.99 Pizza_(8/21/26-1/5/2027)", + "embargo_preview_at": { + "description": "ISO 8601 timestamp of the embargo preview, when the launch has one.", "type": "string" }, - "offer_id": { - "example": "6a8879a4478334ff62f902d9-sE4Q1s2116PXg7di5yN2tt-7NOW_WEB", + "featured_at": { + "description": "ISO 8601 timestamp of when Product Hunt featured the launch.", "type": "string" }, - "promo_ids": { - "description": "PromoIDs are the promotions this campaign points at. Usually one,\nbut a multi-product campaign (e.g. a brand takeover) genuinely\ncarries several -- upstream packs them into one comma-separated\nstring, which is split here so each id is individually usable. Pass\none to GET /7now/promotion for every item it covers, or to\nGET /7now/combo when the campaign advertises a bundle.", - "items": { - "type": "string" - }, - "type": "array" + "has_voted": { + "description": "Whether the viewer has upvoted this launch.", + "type": "boolean" }, - "sort_order": { - "example": 2, - "type": "integer" + "hide_votes_count": { + "description": "Whether the maker hides the vote count for this launch.", + "type": "boolean" }, - "target_entity": { - "description": "TargetEntity is what tapping the banner opens, e.g. `promo_items` or\n`Category`. A campaign with no destination reports `none` upstream\nand is omitted here.", - "example": "promo_items", + "id": { + "description": "Product Hunt ID of the launch post.", "type": "string" }, - "target_id": { - "description": "TargetID is the entity the banner opens when it is not a promotion --\nfor a `Category` banner this is a category_id GET /7now/category\naccepts.", - "example": "48395", - "type": "string" + "latest_score": { + "description": "Current upvote score of the launch.", + "type": "integer" }, - "target_url": { - "type": "string" + "launch_day_score": { + "description": "Upvote score the launch had on its launch day.", + "type": "integer" }, - "title": { - "example": "$6.99 Pizza", - "type": "string" + "monthly_rank": { + "description": "Rank on the monthly leaderboard. `0` when Product Hunt gives no rank.", + "type": "integer" }, - "web_image_url": { + "name": { + "description": "Name of the launch.", "type": "string" - } - }, - "type": "object" - }, - "sevennow.OffersResponse": { - "properties": { - "count": { - "example": 4, - "type": "integer" }, - "fetched_at": { + "product": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.LeaderboardProductRef" + } + ], + "description": "Product the launch belongs to." + }, + "product_state": { + "description": "Product Hunt's state label for the product, for example `default`.", "type": "string" }, - "offers": { - "items": { - "$ref": "#/definitions/sevennow.Offer" - }, - "type": "array" + "randomization_status": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.LeaderboardRandomizationStatus" + } + ], + "description": "Whether and when Product Hunt randomizes where this launch appears." }, - "source_url": { - "type": "string" + "redirect_to_product": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.LeaderboardProductRef" + } + ], + "description": "Product the launch redirects to, when it redirects." }, - "store_id": { - "example": "39640", - "type": "string" - } - }, - "type": "object" - }, - "sevennow.PopularResponse": { - "properties": { - "fetched_at": { + "shortened_url": { + "description": "Short Product Hunt link to the launch.", "type": "string" }, - "region": { - "description": "Region is upstream's own name for the index the terms came from,\ne.g. `NY_NE`, `W`, `SE`, or the vertical's own name when no store\nnarrowed it. It is the only signal upstream gives for which region a\nresult set covers.", - "example": "NY_NE", + "slug": { + "description": "URL slug of the launch post.", "type": "string" }, - "source_url": { + "tagline": { + "description": "Short tagline of the launch.", "type": "string" }, - "store_id": { - "example": "39226", + "thumbnail_image_uuid": { + "description": "Identifier of the launch thumbnail image on Product Hunt's image host.", "type": "string" }, - "suggestions": { - "example": [ - "ice cream", - "coffee", - "pizza" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "vertical": { - "description": "Vertical echoes back which index was read.", - "example": "convenience", + "updated_at": { + "description": "ISO 8601 timestamp of the last update to the launch.", "type": "string" + }, + "weekly_rank": { + "description": "Rank on the weekly leaderboard. `0` when Product Hunt gives no rank.", + "type": "integer" } }, "type": "object" }, - "sevennow.ProductPromo": { + "producthunt.ProductAboutPrimaryLink": { "properties": { - "expiration_date": { - "example": "01/05/2027", - "type": "string" - }, "id": { - "example": "6a849a8fa1df2409010c719f", - "type": "string" - }, - "long_description": { - "example": "$6.99 Whole Pizza!", - "type": "string" - }, - "promo_price_cents": { - "example": 699, - "type": "integer" - }, - "short_description": { - "example": "On Sale $6.99", + "description": "Product Hunt ID of the link.", "type": "string" }, - "start_date": { - "example": "08/21/2026", + "url": { + "description": "Main link of the launch.", "type": "string" } }, "type": "object" }, - "sevennow.ProductResponse": { + "producthunt.ProductAboutProduct": { "properties": { - "age_restricted": { - "example": false, - "type": "boolean" - }, - "allergens": { - "description": "Allergens is upstream's allergen statement, e.g. \"CONTAINS MILK, SOY,\nWHEAT.\" Absent on products with no declared allergens.", - "example": "CONTAINS MILK, SOY, WHEAT.", - "type": "string" + "badges": { + "description": "Badges the product has earned, such as leaderboard awards.", + "items": { + "$ref": "#/definitions/producthunt.ProductCategoryListBadge" + }, + "type": "array" }, - "brand": { - "example": "Hot Food Pizza", - "type": "string" + "detailed_review": { + "additionalProperties": {}, + "description": "Detailed review summary of the product, as Product Hunt returns it.", + "type": "object" }, - "calories": { - "example": "360", - "type": "string" + "discussion_forum": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductAboutDiscussionForum" + } + ], + "description": "Discussion forum of the product." }, - "category": { - "example": "Fresh Food", - "type": "string" + "followers_count": { + "description": "Number of Product Hunt users following the product.", + "type": "integer" }, - "category_id": { - "example": "48423", + "id": { + "description": "Product Hunt ID of the product.", "type": "string" }, - "description": { - "type": "string" + "is_no_longer_online": { + "description": "Whether Product Hunt marks the product as no longer online.", + "type": "boolean" }, - "fetched_at": { - "type": "string" + "is_subscribed": { + "description": "Whether the viewer follows this product.", + "type": "boolean" }, - "flavor_choices": { - "items": { - "type": "string" - }, - "type": "array" + "latest_launch": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductAboutLatestLaunch" + } + ], + "description": "Most recent launch of the product." }, - "flavor_name": { - "example": "Pepperoni Pizza", + "logo_uuid": { + "description": "Identifier of the product logo on Product Hunt's image host.", "type": "string" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" - }, - "ingredients": { - "description": "Ingredients is the declared ingredient list. Upstream splits it on\ncommas, so a parenthesised sub-list arrives as several entries.", + "media": { + "description": "Images and videos on the product page.", "items": { - "type": "string" + "$ref": "#/definitions/producthunt.ProductAboutMedia" }, "type": "array" }, - "limit_per_order": { - "example": 100, - "type": "integer" - }, "name": { - "example": "Large Pizza - Ultimate Pepperoni", + "description": "Name of the product.", "type": "string" }, - "nutrition": { - "items": { - "$ref": "#/definitions/sevennow.NutritionGroup" - }, - "type": "array" + "page_variant": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductAboutPageVariant" + } + ], + "description": "Layout variant Product Hunt uses for the product page." }, - "nutrition_disclaimers": { - "description": "NutritionDisclaimers carries upstream's own RDI/daily-value notices.", + "posts": { + "description": "Launch posts of the product.", "items": { - "type": "string" + "$ref": "#/definitions/producthunt.ProductAboutPost" }, "type": "array" }, - "product_id": { - "example": "178322-2-6-2", - "type": "string" + "posts_count": { + "description": "Number of launch posts the product has.", + "type": "integer" }, - "promos": { + "pro_con_tags": { + "description": "Pro and con tags reviewers have attached to the product.", "items": { - "$ref": "#/definitions/sevennow.ProductPromo" + "$ref": "#/definitions/producthunt.ProductDetailedReviewTag" }, "type": "array" }, - "related_items": { + "review_questions": { + "description": "Questions Product Hunt asks reviewers of the product.", "items": { - "$ref": "#/definitions/sevennow.RelatedProduct" + "$ref": "#/definitions/producthunt.ProductAboutReviewQuestion" }, "type": "array" }, - "size_choices": { + "reviews_rating": { + "description": "Average review rating on Product Hunt.", + "type": "number" + }, + "screenshots": { + "description": "Screenshots shown on the product page.", "items": { - "type": "string" + "$ref": "#/definitions/producthunt.ProductAboutScreenshot" }, "type": "array" }, - "size_value": { - "example": "1WholePizza", + "slug": { + "description": "URL slug of the product. Use it with the product endpoint.", "type": "string" }, - "slin": { - "example": "178322", + "tagline": { + "description": "Short tagline of the product.", "type": "string" }, - "source_url": { + "url": { + "description": "Product Hunt link to the product page.", + "type": "string" + } + }, + "type": "object" + }, + "producthunt.ProductAboutReviewQuestion": { + "properties": { + "category": { + "description": "Review category the question belongs to, for example `Adoption`.", "type": "string" }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" + "id": { + "description": "Product Hunt ID of the question.", + "type": "string" }, - "upc": { - "example": "00072180687340", + "question": { + "description": "Text of the question reviewers are asked.", "type": "string" } }, "type": "object" }, - "sevennow.PromotionDetail": { + "producthunt.ProductAboutScreenshot": { "properties": { - "display_priority": { - "example": 2, - "type": "integer" - }, - "expiration_date": { - "example": "2026-10-27T23:59:59.000Z", + "id": { + "description": "Product Hunt ID of the screenshot.", "type": "string" }, - "id": { - "example": "6a9746d488cc35e1bbff1584", + "image_uuid": { + "description": "Identifier of the image on Product Hunt's image host.", "type": "string" }, - "long_description": { + "media_type": { + "description": "Type of media, for example `image`.", "type": "string" }, - "mark_down_slins": { + "original_height": { + "description": "Height of the original screenshot in pixels.", + "type": "integer" + }, + "original_width": { + "description": "Width of the original screenshot in pixels.", + "type": "integer" + } + }, + "type": "object" + }, + "producthunt.ProductAboutShoutout": { + "properties": { + "alternative_products": { + "description": "Products the reviewer names as alternatives.", "items": { - "type": "string" + "$ref": "#/definitions/producthunt.ProductAboutMentionedProduct" }, "type": "array" }, - "name": { - "example": "US_7N_Ben & Jerry's Pints $7_(9/1/2026-10/27/2026) - FOR 7NOW", + "id": { + "description": "Product Hunt ID of the shoutout.", "type": "string" }, - "offer_type": { - "example": "item_discount", - "type": "string" + "product": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductAboutMentionedProduct" + } + ], + "description": "Product the shoutout is about." }, - "promo_price_cents": { - "example": 700, - "type": "integer" + "shoutout_note": { + "description": "Text of the shoutout written by the reviewer.", + "type": "string" + } + }, + "type": "object" + }, + "producthunt.ProductAboutUser": { + "properties": { + "avatar_url": { + "description": "Link to the member's profile picture.", + "type": "string" }, - "promo_type": { - "example": "item", + "headline": { + "description": "Member's profile headline.", "type": "string" }, - "short_description": { - "example": "On Sale $7", + "id": { + "description": "Product Hunt ID of the member.", "type": "string" }, - "start_date": { - "example": "2026-09-01T00:00:00.000Z", + "name": { + "description": "Member's display name.", "type": "string" }, - "terms": { - "items": { - "type": "string" - }, - "type": "array" + "username": { + "description": "Member's Product Hunt username.", + "type": "string" } }, "type": "object" }, - "sevennow.PromotionResponse": { + "producthunt.ProductAboutViewer": { "properties": { - "count": { - "example": 14, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "has_more": { - "example": false, + "is_featured_post_maker": { + "description": "Whether the viewer is a maker of a featured post.", "type": "boolean" }, - "items": { - "items": { - "$ref": "#/definitions/sevennow.DealItem" - }, - "type": "array" - }, - "limit": { - "example": 20, - "type": "integer" + "recent_launch": { + "additionalProperties": {}, + "description": "The viewer's most recent launch, as Product Hunt returns it.", + "type": "object" + } + }, + "type": "object" + }, + "producthunt.ProductAlternativeBadge": { + "properties": { + "date": { + "description": "Date the badge was awarded.", + "type": "string" }, - "promo_id": { - "example": "6a9746d488cc35e1bbff1584", + "id": { + "description": "Product Hunt ID of the badge.", "type": "string" }, - "promotion": { - "$ref": "#/definitions/sevennow.PromotionDetail" + "period": { + "description": "Leaderboard period of the badge, for example `daily` or `weekly`.", + "type": "string" }, - "skip": { - "example": 0, + "position": { + "description": "Leaderboard position the badge was awarded for.", "type": "integer" }, - "source_url": { + "post_name": { + "description": "Name of the launch post the badge was awarded for.", "type": "string" }, - "store_id": { - "example": "39640", + "post_slug": { + "description": "URL slug of the launch post the badge was awarded for.", "type": "string" - }, - "total": { - "example": 14, - "type": "integer" } }, "type": "object" }, - "sevennow.RelatedProduct": { + "producthunt.ProductAlternativeDiscussion": { "properties": { - "brand": { - "example": "Hot Food Pizza", - "type": "string" + "comments_count": { + "description": "Number of comments on the discussion.", + "type": "integer" }, - "calories": { - "example": "550", + "created_at": { + "description": "ISO 8601 timestamp of when the discussion was created.", "type": "string" }, - "category": { - "example": "Fresh Food", + "description_preview": { + "description": "Short preview of the discussion's opening text.", "type": "string" }, - "flavor_name": { - "example": "Sausage Breakfast Pizza", - "type": "string" + "has_voted": { + "description": "Whether the viewer has upvoted the discussion.", + "type": "boolean" }, - "image_url": { + "id": { + "description": "Product Hunt ID of the discussion.", "type": "string" }, - "name": { - "example": "Whole Breakfast Pizza - Sausage", + "path": { + "description": "Product Hunt path of the discussion.", "type": "string" }, - "product_id": { - "example": "170776-1-8", + "pinned": { + "description": "Whether the discussion is pinned.", + "type": "boolean" + }, + "primary_forum": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductAlternativeDiscussionForum" + } + ], + "description": "Main forum the discussion belongs to." + }, + "slug": { + "description": "URL slug of the discussion.", "type": "string" }, - "size_value": { - "example": "1WholePizza", + "title": { + "description": "Title of the discussion.", "type": "string" + }, + "user": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductAlternativeDiscussionUser" + } + ], + "description": "Member who started the discussion." + }, + "votes_count": { + "description": "Number of upvotes on the discussion.", + "type": "integer" } }, "type": "object" }, - "sevennow.SearchBrand": { + "producthunt.ProductAlternativeDiscussionForum": { "properties": { - "brand_id": { - "example": "262b9206-d316-3cf8-9ccf-a06998c5c0a1", + "id": { + "description": "Product Hunt id of the discussion forum.", "type": "string" }, - "brand_name": { - "example": "Pringles", + "slug": { + "description": "URL slug of the discussion forum.", "type": "string" }, - "is_sponsored": { - "example": false, - "type": "boolean" - }, - "logo_url": { + "subject_id": { + "description": "Product Hunt id of the product the forum belongs to.", "type": "string" }, - "rank": { - "example": 25, - "type": "integer" + "subject_name": { + "description": "Name of the product the forum belongs to.", + "type": "string" } }, "type": "object" }, - "sevennow.SearchItem": { + "producthunt.ProductAlternativeDiscussionUser": { "properties": { - "age_restricted": { - "example": false, - "type": "boolean" - }, - "available": { - "example": true, - "type": "boolean" - }, - "available_quantity": { - "example": 100, - "type": "integer" - }, - "bundle_id": { - "example": "B00037", + "avatar_url": { + "description": "URL of the user's profile picture.", "type": "string" }, - "calories": { - "example": "360", + "id": { + "description": "Product Hunt id of the user who started the discussion.", "type": "string" }, - "category": { - "example": "Fresh Food", + "name": { + "description": "Display name of the user.", "type": "string" }, - "image_url": { + "username": { + "description": "Product Hunt username of the user.", "type": "string" + } + }, + "type": "object" + }, + "producthunt.ProductAlternativeItem": { + "properties": { + "category_score": { + "type": "number" }, - "list_price_cents": { - "example": 1299, - "type": "integer" - }, - "name": { - "example": "Large Pizza - Ultimate Pepperoni", - "type": "string" + "category_weight": { + "type": "number" }, - "price_cents": { - "example": 1099, - "type": "integer" + "combined_score": { + "type": "number" }, - "product_id": { - "example": "178322-2-6-2", - "type": "string" + "embedding_score": { + "type": "number" }, - "product_type": { - "example": "product", - "type": "string" + "embedding_weight": { + "type": "number" }, - "promo_description": { - "example": "On Sale $6.99", + "id": { "type": "string" }, - "promo_price_cents": { - "example": 699, - "type": "integer" + "product": { + "$ref": "#/definitions/producthunt.ProductAlternativeProduct" }, - "subcategory": { - "example": "Pizza", - "type": "string" + "rating_score": { + "type": "number" }, - "upc": { - "example": "00072180687340", - "type": "string" + "rating_weight": { + "type": "number" } }, "type": "object" }, - "sevennow.SearchResponse": { + "producthunt.ProductAlternativeProduct": { "properties": { - "brands": { + "badges": { "items": { - "$ref": "#/definitions/sevennow.SearchBrand" + "$ref": "#/definitions/producthunt.ProductAlternativeBadge" }, "type": "array" }, - "count": { - "example": 20, + "categories": { + "items": { + "type": "string" + }, + "type": "array" + }, + "followers_count": { "type": "integer" }, - "fetched_at": { + "id": { "type": "string" }, - "has_more": { - "example": true, + "is_subscribed": { "type": "boolean" }, - "items": { - "items": { - "$ref": "#/definitions/sevennow.SearchItem" - }, - "type": "array" + "is_top_product": { + "type": "boolean" }, - "limit": { - "example": 20, - "type": "integer" + "logo_uuid": { + "type": "string" }, - "query": { - "example": "pizza", + "name": { "type": "string" }, - "skip": { - "example": 0, + "reviews_count": { "type": "integer" }, - "source_url": { + "reviews_rating": { + "type": "number" + }, + "slug": { "type": "string" }, - "store_id": { - "example": "39226", + "structured_data": { + "$ref": "#/definitions/producthunt.ProductAlternativeStructuredData" + }, + "tagline": { "type": "string" }, - "total": { - "example": 100, - "type": "integer" + "tags": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "sevennow.Store": { + "producthunt.ProductAlternativeStructuredData": { "properties": { - "address": { - "example": "866 6TH AVE", + "application_category": { + "description": "Schema.org application category of the product.", "type": "string" }, - "alcohol_sale_hours": { - "description": "AlcoholSaleHours are the windows during which the store may sell\nalcohol, per day of week -- upstream's own encoding of the local\nlaw. A New York store, for instance, reports Sunday as two windows\n(00:00-02:00 and 08:00-23:59) and every other day as one.\n\nAn empty list means upstream publishes no windows for this store.\nThat is not the same as \"sells no alcohol\": Austin, TX stores return\nan empty list while New York stores return a full week.", - "items": { - "$ref": "#/definitions/sevennow.StoreAlcoholDay" - }, - "type": "array" - }, - "brand": { - "description": "Brand is the banner the store trades under. 7-Eleven operates\nseveral (Speedway, Stripes); every store measured so far reports\n\"7-Eleven\", so treat a different value as possible rather than\nimpossible.", - "example": "7-Eleven", + "context": { + "description": "Schema.org context URL of the product's structured data block.", "type": "string" }, - "brand_logo_url": { + "date_modified": { + "description": "Date the product page was last modified.", "type": "string" }, - "city": { - "example": "New York", + "date_published": { + "description": "Date the product was published on Product Hunt.", "type": "string" }, - "country": { - "example": "US", + "description": { + "description": "Product description as given in its structured data.", "type": "string" }, - "county": { - "example": "New York County", + "id": { + "description": "Identifier of the product in its structured data block.", "type": "string" }, - "distance_miles": { - "example": 0.22, - "type": "number" - }, - "dma": { - "description": "DMA is the Nielsen Designated Market Area the store sits in, e.g.\n\"New York Ny\", \"Austin Tx\". It groups stores by media market rather\nthan by state or county.", - "example": "New York Ny", + "image": { + "description": "URL of the product's main image.", "type": "string" }, - "latitude": { - "example": 40.747508, - "type": "number" - }, - "longitude": { - "example": -73.989099, - "type": "number" - }, "name": { - "example": "7-Eleven", - "type": "string" - }, - "state": { - "example": "NY", - "type": "string" - }, - "store_category": { - "example": "7now", - "type": "string" - }, - "store_id": { - "example": "39226", + "description": "Product name as given in its structured data.", "type": "string" }, - "zip": { - "example": "10001", - "type": "string" - } - }, - "type": "object" - }, - "sevennow.StoreAlcoholDay": { - "properties": { - "day": { - "example": "Sunday", + "operating_system": { + "description": "Operating systems the product runs on, as listed in its structured data.", "type": "string" }, - "windows": { - "description": "Windows are that day's permitted selling periods. More than one\nmeans the day is split, as New York's Sunday rule does.", + "screenshot": { + "description": "URLs of the product's screenshots.", "items": { - "$ref": "#/definitions/sevennow.StoreAlcoholWindow" + "type": "string" }, "type": "array" + }, + "url": { + "description": "Product Hunt page URL of the product.", + "type": "string" } }, "type": "object" }, - "sevennow.StoreAlcoholWindow": { + "producthunt.ProductAlternativeTag": { "properties": { - "end_time": { - "example": "2359", - "type": "string" + "count": { + "type": "integer" }, - "start_time": { - "example": "0800", + "name": { "type": "string" } }, "type": "object" }, - "sevennow.StoresResponse": { + "producthunt.ProductAlternativesPage": { "properties": { - "count": { - "example": 15, - "type": "integer" + "alternative_tags": { + "items": { + "$ref": "#/definitions/producthunt.ProductAlternativeTag" + }, + "type": "array" }, - "fetched_at": { + "alternatives_markdown_description": { "type": "string" }, - "h3_index": { - "description": "H3Index is the Uber H3 cell (resolution 7) upstream assigns to the\nresolved address -- a stable geospatial key for grouping or caching\nlookups by area.", - "example": "872a100d2ffffff", - "type": "string" + "categories": { + "items": { + "type": "string" + }, + "type": "array" }, - "latitude": { - "example": 40.7480997, - "type": "number" + "discussions": { + "items": { + "$ref": "#/definitions/producthunt.ProductAlternativeDiscussion" + }, + "type": "array" }, - "longitude": { - "example": -73.9849926, - "type": "number" + "discussions_has_next_page": { + "type": "boolean" }, - "query": { - "example": "350 5th Ave, New York, NY", + "end_cursor": { + "example": "MTA", "type": "string" }, - "resolved_address": { - "example": "350 5th Ave, New York, NY 10118, USA", - "type": "string" + "followers_count": { + "example": 577, + "type": "integer" }, - "source_url": { - "type": "string" + "has_next_page": { + "example": true, + "type": "boolean" }, - "stores": { + "items": { "items": { - "$ref": "#/definitions/sevennow.Store" + "$ref": "#/definitions/producthunt.ProductAlternativeItem" }, "type": "array" + }, + "name": { + "example": "Clico", + "type": "string" + }, + "product_id": { + "example": "1191613", + "type": "string" + }, + "slug": { + "example": "clico", + "type": "string" + }, + "total_count": { + "example": 50, + "type": "integer" } }, "type": "object" }, - "sevennow.SuggestResponse": { + "producthunt.ProductCategoryAd": { "properties": { - "fetched_at": { + "channel_kind": { + "description": "Placement of the ad, for example `feed`.", "type": "string" }, - "query": { - "example": "chi", + "id": { + "description": "Product Hunt id of the ad.", "type": "string" }, - "source_url": { + "large_asset_uuid": { + "description": "Identifier of the ad's large image asset.", "type": "string" }, - "suggestions": { - "example": [ - "chips ahoy", - "chips", - "chicken" + "name": { + "description": "Name of the advertised product.", + "type": "string" + }, + "post": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductCategoryAdPost" + } ], - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "sevennow.catalogResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "description": "Launch post of the advertised product." }, - "data": { - "$ref": "#/definitions/sevennow.CatalogResponse" + "small_asset_uuid": { + "description": "Identifier of the ad's small image asset.", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "sevennow.categoriesResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "subject": { + "description": "Kind of Product Hunt item the ad is placed on, for example `Channel`.", + "type": "string" }, - "data": { - "$ref": "#/definitions/sevennow.CategoriesResponse" + "tagline": { + "description": "Short tagline shown on the ad.", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "sevennow.categoryResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "thumbnail_uuid": { + "description": "Identifier of the ad's thumbnail image file.", + "type": "string" }, - "data": { - "$ref": "#/definitions/sevennow.CategoryResponse" + "url": { + "description": "Path of the ad's link on Product Hunt.", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "variation_id": { + "description": "Identifier of the ad variation shown.", + "type": "string" } }, "type": "object" }, - "sevennow.comboResponseDoc": { + "producthunt.ProductCategoryAdComment": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "body_text": { + "description": "Plain-text body of the comment.", + "type": "string" }, - "data": { - "$ref": "#/definitions/sevennow.ComboResponse" + "id": { + "description": "Product Hunt id of the comment.", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "sevennow.combosResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "is_pinned": { + "description": "Whether the comment is pinned on the launch.", + "type": "boolean" }, - "data": { - "$ref": "#/definitions/sevennow.CombosResponse" + "path": { + "description": "Path of the comment on Product Hunt.", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "subject_id": { + "description": "Product Hunt id of the launch post the comment is on.", + "type": "string" + }, + "user": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductCategoryUser" + } + ], + "description": "Author of the comment." } }, "type": "object" }, - "sevennow.dealsResponseDoc": { + "producthunt.ProductCategoryAdPost": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "comments_count": { + "description": "Number of comments on the launch post.", "type": "integer" }, - "data": { - "$ref": "#/definitions/sevennow.DealsResponse" + "created_at": { + "description": "Time the launch post was created, in ISO 8601 with a UTC offset.", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "sevennow.offersResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "disabled_when_scheduled": { + "description": "Whether the post is disabled while its launch is still scheduled.", + "type": "boolean" }, - "data": { - "$ref": "#/definitions/sevennow.OffersResponse" + "embargo_preview_at": { + "description": "Time the launch post becomes visible as an embargo preview. Omitted when not set.", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "sevennow.popularResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "featured_at": { + "description": "Time the launch post was featured, in ISO 8601 with a UTC offset.", + "type": "string" }, - "data": { - "$ref": "#/definitions/sevennow.PopularResponse" + "featured_comment": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductCategoryAdComment" + } + ], + "description": "Comment featured on the launch post." }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "sevennow.productResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "has_voted": { + "description": "Whether the requesting viewer has upvoted the launch post.", + "type": "boolean" }, - "data": { - "$ref": "#/definitions/sevennow.ProductResponse" + "hide_votes_count": { + "description": "Whether Product Hunt hides the vote count for this post.", + "type": "boolean" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "sevennow.promotionResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "id": { + "description": "Product Hunt id of the launch post.", + "type": "string" }, - "data": { - "$ref": "#/definitions/sevennow.PromotionResponse" + "latest_score": { + "description": "Latest vote score of the launch post.", + "type": "integer" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "sevennow.searchResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "launch_day_score": { + "description": "Vote score of the launch post on its launch day.", "type": "integer" }, - "data": { - "$ref": "#/definitions/sevennow.SearchResponse" + "name": { + "description": "Name of the launch post.", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "sevennow.storesResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "product_id": { + "description": "Product Hunt id of the product the post belongs to.", + "type": "string" }, - "data": { - "$ref": "#/definitions/sevennow.StoresResponse" + "product_slug": { + "description": "URL slug of the product the post belongs to.", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "sevennow.suggestResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "product_subscribed": { + "description": "Whether the requesting viewer follows the product.", + "type": "boolean" }, - "data": { - "$ref": "#/definitions/sevennow.SuggestResponse" + "randomization_status": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductCategoryRandomizationStatus" + } + ], + "description": "Whether the post currently has randomized ordering in listings, and when that changes." }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "slug": { + "description": "URL slug of the launch post.", + "type": "string" + }, + "topics": { + "description": "Topics the launch post is filed under.", + "items": { + "$ref": "#/definitions/producthunt.ProductCategoryTopic" + }, + "type": "array" + }, + "updated_at": { + "description": "Time the launch post was last updated, in ISO 8601 with a UTC offset.", + "type": "string" } }, "type": "object" }, - "sfgate.AuthorArticle": { + "producthunt.ProductCategoryAnswer": { "properties": { - "summary": { - "type": "string" + "body": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductCategoryMarkdown" + } + ], + "description": "Text of the answer." }, - "title": { + "id": { + "description": "Product Hunt id of the answer.", "type": "string" }, - "url": { - "type": "string" + "sources": { + "description": "Product Hunt items the answer is based on.", + "items": { + "$ref": "#/definitions/producthunt.ProductCategorySource" + }, + "type": "array" } }, "type": "object" }, - "sfgate.AuthorResponse": { + "producthunt.ProductCategoryFounderPost": { "properties": { - "articles": { + "badges": { + "description": "Badges the launch post has earned.", "items": { - "$ref": "#/definitions/sfgate.AuthorArticle" + "$ref": "#/definitions/producthunt.ProductCategoryListBadge" }, "type": "array" }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "id": { + "description": "Product Hunt id of the launch post.", + "type": "string" }, - "image_url": { + "name": { + "description": "Name of the launch post.", "type": "string" }, - "job_title": { + "product_id": { + "description": "Product Hunt id of the product the post belongs to.", "type": "string" }, - "name": { + "product_slug": { + "description": "URL slug of the product the post belongs to.", "type": "string" }, - "same_as": { - "items": { - "type": "string" - }, - "type": "array" + "product_state": { + "description": "State of the product on Product Hunt, for example `default`.", + "type": "string" }, - "url": { + "slug": { + "description": "URL slug of the launch post.", "type": "string" - } - }, - "type": "object" - }, - "shakeshack.DeliveryFeeTier": { - "properties": { - "amount": { - "example": 1.99, - "type": "number" }, - "subtotal_minimum": { - "example": 12.01, - "type": "number" + "thumbnail_image_uuid": { + "description": "Identifier of the launch post's thumbnail image file.", + "type": "string" } }, "type": "object" }, - "shakeshack.LocationSummary": { + "producthunt.ProductCategoryFounderShoutout": { "properties": { - "latitude": { - "description": "Latitude/Longitude are present only for entries sourced from the map\nsection (source \"map\"). Fetch GET /shakeshack/store for coordinates\non a \"list\"-sourced entry.", - "example": 29.6856442, - "type": "number" - }, - "longitude": { - "example": -95.4574726, - "type": "number" - }, - "name": { - "example": "Meyerland", - "type": "string" + "from_post": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductCategoryFounderPost" + } + ], + "description": "Launch post of the founder who gave the shoutout." }, - "path": { - "description": "Path is the value GET /shakeshack/store takes, e.g.\n\"location/meyerland-tx\" or \"node/15226\".", - "example": "location/meyerland-tx", + "id": { + "description": "Product Hunt id of the shoutout.", "type": "string" }, - "source": { - "description": "Source is which section of the /locations page this entry was\nparsed from, not a business classification: \"list\" is Shake Shack's\nown \"Full List of Locations\" text index (structured address, no\ncoordinates); \"map\" is the interactive map's pin data (coordinates,\nno structured address). Both round-trip through GET /shakeshack/store\nby path.", - "example": "list", + "product_id": { + "description": "Product Hunt id of the product that received the shoutout.", "type": "string" } }, "type": "object" }, - "shakeshack.LocationsResponse": { + "producthunt.ProductCategoryHeroProduct": { "properties": { - "count": { - "example": 100, - "type": "integer" - }, - "fetched_at": { + "id": { + "description": "Product Hunt id of the product.", "type": "string" }, - "locations": { - "items": { - "$ref": "#/definitions/shakeshack.LocationSummary" - }, - "type": "array" - }, - "page": { - "example": 1, - "type": "integer" + "is_no_longer_online": { + "description": "Whether Product Hunt marks the product as no longer online.", + "type": "boolean" }, - "source_url": { + "logo_uuid": { + "description": "Identifier of the product's logo image file.", "type": "string" }, - "total": { - "example": 1322, - "type": "integer" - }, - "total_pages": { - "example": 14, - "type": "integer" + "name": { + "description": "Name of the product as shown on Product Hunt.", + "type": "string" } }, "type": "object" }, - "shakeshack.MenuCategory": { + "producthunt.ProductCategoryLatestLaunch": { "properties": { - "name": { - "example": "Burgers & More", + "id": { + "description": "Product Hunt id of the product's latest launch.", "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/shakeshack.MenuProduct" - }, - "type": "array" + "scheduled_at": { + "description": "Time the latest launch was scheduled for, in ISO 8601 with a UTC offset.", + "type": "string" } }, "type": "object" }, - "shakeshack.MenuProduct": { + "producthunt.ProductCategoryListBadge": { "properties": { - "allergens": { - "description": "Allergens is upstream's own comma-separated free text, passed through\nas published rather than split into a fixed list.", - "example": "dairy allergy, egg allergy, soy allergy, wheat allergy, sesame allergy", + "category": { + "description": "Award category of the badge, for example `Product of the Year`. Omitted for daily and weekly badges.", "type": "string" }, - "badge": { - "description": "Badge is a short promotional/dietary label Shake Shack publishes for\nsome items, e.g. \"LIMITED TIME ONLY\", \"VEGETARIAN\".", - "example": "VEGETARIAN", + "date": { + "description": "Date the badge refers to.", "type": "string" }, - "base_calories": { - "description": "BaseCalories is 0 when upstream reports none.", - "example": 880, - "type": "integer" + "id": { + "description": "Product Hunt id of the badge.", + "type": "string" }, - "chain_product_id": { - "example": 1119032, + "period": { + "description": "Period the badge covers, for example `daily` or `weekly`.", + "type": "string" + }, + "position": { + "description": "Rank the product placed at for this badge.", "type": "integer" }, - "description": { + "post_id": { + "description": "Product Hunt id of the launch post the badge was earned on.", "type": "string" }, - "image_url": { + "post_name": { + "description": "Name of the launch post the badge was earned on.", "type": "string" }, - "modifiers": { - "items": { - "$ref": "#/definitions/shakeshack.ModifierGroup" - }, - "type": "array" - }, - "name": { - "example": "West Coast Burger", + "post_slug": { + "description": "URL slug of the launch post the badge was earned on.", "type": "string" }, - "price": { - "description": "Price is this item's base price. Many items price entirely through a\nrequired size/flavor modifier rather than a base price, so 0 is\ncommon here -- not a parsing gap (same shape as this repo's other\nOlo-backed menus, e.g. Jimmy John's).", - "example": 0, - "type": "number" + "year": { + "description": "Year of the award the badge belongs to.", + "type": "string" } }, "type": "object" }, - "shakeshack.MenuResponse": { + "producthunt.ProductCategoryListProduct": { "properties": { - "categories": { + "badges": { + "description": "Badges the product has earned on Product Hunt.", "items": { - "$ref": "#/definitions/shakeshack.MenuCategory" + "$ref": "#/definitions/producthunt.ProductCategoryListBadge" }, "type": "array" }, - "category_count": { - "example": 11, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "location_id": { - "example": 14992, - "type": "integer" + "categories": { + "description": "Product Hunt categories the product is listed in.", + "items": { + "$ref": "#/definitions/producthunt.ProductCategoryRef" + }, + "type": "array" }, - "product_count": { - "example": 76, + "detailed_reviews_count": { + "description": "Number of detailed reviews the product has.", "type": "integer" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "shakeshack.ModifierChoice": { - "properties": { - "calorie_delta": { - "example": -1, + "followers_count": { + "description": "Number of Product Hunt users following the product.", "type": "integer" }, - "chain_option_id": { - "example": 213463, + "founder_reviews_count": { + "description": "Number of reviews written by the product's founders.", "type": "integer" }, - "groups": { + "founder_shoutouts": { + "description": "Shoutouts the product received from other founders.", "items": { - "$ref": "#/definitions/shakeshack.ModifierGroup" + "$ref": "#/definitions/producthunt.ProductCategoryFounderShoutout" }, "type": "array" }, - "is_default": { + "id": { + "description": "Product Hunt id of the product.", + "type": "string" + }, + "is_no_longer_online": { + "description": "Whether Product Hunt marks the product as no longer online.", "type": "boolean" }, - "name": { - "example": "No Lettuce", + "is_subscribed": { + "description": "Whether the requesting viewer follows the product.", + "type": "boolean" + }, + "is_top_product": { + "description": "Whether Product Hunt flags the product as a top product.", + "type": "boolean" + }, + "latest_launch": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductCategoryLatestLaunch" + } + ], + "description": "Most recent launch of the product." + }, + "logo_uuid": { + "description": "Identifier of the product's logo image file.", "type": "string" }, - "option_id": { - "example": 4127201667, - "type": "integer" + "name": { + "description": "Name of the product as shown on Product Hunt.", + "type": "string" }, - "price": { - "example": 0, - "type": "number" - } - }, - "type": "object" - }, - "shakeshack.ModifierGroup": { - "properties": { - "chain_modifier_id": { - "example": 38041, + "posts_count": { + "description": "Number of launch posts the product has.", "type": "integer" }, - "choices": { - "items": { - "$ref": "#/definitions/shakeshack.ModifierChoice" - }, - "type": "array" - }, - "group_id": { - "example": 890226904, + "reviews_count": { + "description": "Number of reviews the product has.", "type": "integer" }, - "name": { - "example": "Remove Lettuce:", - "type": "string" + "reviews_rating": { + "description": "Average review rating of the product.", + "type": "number" }, - "type": { - "example": "REMOVAL", - "type": "string" - } - }, - "type": "object" - }, - "shakeshack.NearbyAddress": { - "properties": { - "city": { - "example": "New York", + "slug": { + "description": "URL slug of the product on Product Hunt.", "type": "string" }, - "postal_code": { - "example": "10036", - "type": "string" + "structured_data": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductAlternativeStructuredData" + } + ], + "description": "Schema.org structured data Product Hunt publishes for the product." }, - "region": { - "example": "NY", + "tagline": { + "description": "Short tagline of the product.", "type": "string" }, - "street": { - "example": "691 Eighth Avenue", - "type": "string" + "tags": { + "description": "Tags describing the product.", + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "shakeshack.NearbyHours": { + "producthunt.ProductCategoryMarkdown": { "properties": { - "closes": { - "example": "23:00", - "type": "string" - }, - "day_of_week": { - "example": "Monday", + "markdown": { + "description": "Text in Markdown format.", "type": "string" }, - "opens": { - "example": "10:00", + "text": { + "description": "Same text as plain text.", "type": "string" } }, "type": "object" }, - "shakeshack.NearbyLocation": { + "producthunt.ProductCategoryPage": { "properties": { - "address": { - "$ref": "#/definitions/shakeshack.NearbyAddress" + "description": { + "description": "Description of the category.", + "type": "string" }, - "delivery_fees": { + "discussions": { + "description": "Community discussions related to the category.", "items": { - "$ref": "#/definitions/shakeshack.DeliveryFeeTier" + "$ref": "#/definitions/producthunt.ProductAlternativeDiscussion" }, "type": "array" }, - "distance_miles": { - "example": 0.19, - "type": "number" + "discussions_has_next_page": { + "description": "Whether more discussions exist beyond those returned.", + "type": "boolean" }, - "fulfillment_modes": { - "description": "FulfillmentModes are the handoff modes this location currently has\nenabled, e.g. \"dine_in\", \"pickup\", \"delivery\", \"curbside\",\n\"drive_thru\", \"walk_up\".", - "items": { - "type": "string" - }, - "type": "array" + "expandable_html": { + "description": "HTML of the category's expandable description section. Omitted when the category has none.", + "type": "string" }, - "hours": { - "description": "Hours is the current rolling week, Monday-first.", + "hero_products": { + "description": "Featured products shown at the top of the category page.", "items": { - "$ref": "#/definitions/shakeshack.NearbyHours" + "$ref": "#/definitions/producthunt.ProductCategoryHeroProduct" }, "type": "array" }, - "is_online_ordering_available": { - "type": "boolean" - }, - "latitude": { - "example": 40.7584054, - "type": "number" - }, - "location_id": { - "example": 14992, + "hero_products_count": { + "description": "Total number of featured products in the category.", "type": "integer" }, - "longitude": { - "example": -73.9891734, - "type": "number" + "id": { + "description": "Product Hunt id of the category.", + "type": "string" }, - "name": { - "example": "Theater District", + "last_updated_at": { + "description": "Time the category page was last updated, in ISO 8601 with a UTC offset.", "type": "string" }, - "phone_number": { - "example": "(646) 435-0135", + "meta_title": { + "description": "Page title Product Hunt uses for the category.", "type": "string" }, - "timezone": { - "example": "America/New_York", + "name": { + "description": "Name of the category as shown on Product Hunt.", "type": "string" - } - }, - "type": "object" - }, - "shakeshack.NearbyResponse": { - "properties": { - "count": { - "example": 10, - "type": "integer" }, - "fetched_at": { + "parent": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductCategoryParent" + } + ], + "description": "Parent category, with its other sub-categories." + }, + "path": { + "description": "Path of the category page on Product Hunt.", + "example": "/categories/vibe-coding", "type": "string" }, - "locations": { + "questions": { + "description": "Questions asked about the category, each with its top answer.", "items": { - "$ref": "#/definitions/shakeshack.NearbyLocation" + "$ref": "#/definitions/producthunt.ProductCategoryQuestion" }, "type": "array" }, - "radius_miles": { - "example": 15, + "raw_relevant_reviews": { + "description": "Reviews Product Hunt shows as relevant to the category, as Product Hunt returns them.", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "recent_launches_count": { + "description": "Number of recent launches in the category.", "type": "integer" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "shakeshack.StoreAddress": { - "properties": { - "city": { - "example": "Houston", - "type": "string" + "recent_summary": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductCategoryRecentSummary" + } + ], + "description": "Summary of recent launches in the category with the products it covers." }, - "country": { - "example": "United States", - "type": "string" + "reviews_count": { + "description": "Number of reviews across the category's products.", + "type": "integer" }, - "line1": { - "example": "8815 W Loop S", + "slug": { + "description": "URL slug of the category.", + "example": "vibe-coding", "type": "string" }, - "postal_code": { - "example": "77096", - "type": "string" + "sub_categories": { + "description": "Sub-categories of this category.", + "items": { + "$ref": "#/definitions/producthunt.ProductCategoryRef" + }, + "type": "array" }, - "region": { - "example": "TX", - "type": "string" + "targeted_ad": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductCategoryAd" + } + ], + "description": "Sponsored placement shown on the category page. Omitted when there is none." } }, "type": "object" }, - "shakeshack.StoreHours": { + "producthunt.ProductCategoryParent": { "properties": { - "closed": { - "description": "Closed is true when Shake Shack publishes the day with no open\ninterval.", - "example": false, - "type": "boolean" - }, - "closes": { - "example": "23:00", + "id": { + "description": "Product Hunt id of the parent category.", "type": "string" }, - "day_of_week": { - "example": "Monday", + "name": { + "description": "Name of the parent category.", "type": "string" }, - "opens": { - "example": "10:00", + "path": { + "description": "Path of the parent category page on Product Hunt.", "type": "string" + }, + "sub_categories": { + "description": "Sub-categories of the parent category, including this one.", + "items": { + "$ref": "#/definitions/producthunt.ProductCategoryRef" + }, + "type": "array" } }, "type": "object" }, - "shakeshack.StoreResponse": { + "producthunt.ProductCategoryProductsPage": { "properties": { - "address": { - "$ref": "#/definitions/shakeshack.StoreAddress" - }, - "fetched_at": { + "ai_summary": { "type": "string" }, - "hours": { - "description": "Hours is Monday-first. Omitted entirely for locations that publish no\nweekly schedule (seen on venue/kiosk-shaped locations, e.g. inside a\nstadium).", + "category_tags": { "items": { - "$ref": "#/definitions/shakeshack.StoreHours" + "$ref": "#/definitions/producthunt.ProductAlternativeTag" }, "type": "array" }, - "latitude": { - "example": 29.6856442, - "type": "number" + "connection": { + "example": "products", + "type": "string" }, - "longitude": { - "example": -95.4574726, - "type": "number" + "description": { + "type": "string" }, - "name": { - "example": "Meyerland", + "end_cursor": { "type": "string" }, - "order_types": { - "description": "OrderTypes are the fulfillment types Shake Shack publishes for this\nlocation, e.g. \"Dine In\", \"Delivery\".", + "featured_only": { + "type": "boolean" + }, + "has_next_page": { + "type": "boolean" + }, + "has_previous_page": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "items": { "items": { - "type": "string" + "$ref": "#/definitions/producthunt.ProductCategoryListProduct" }, "type": "array" }, - "path": { - "description": "Path is the canonical page path this record resolved to, e.g.\n\"location/meyerland-tx\" -- present even when the requested path was\nthe legacy \"node/\" form of the same location.", + "last_updated_at": { "type": "string" }, - "phone_number": { - "example": "281-819-8763", + "name": { "type": "string" }, - "source_url": { + "order": { + "example": "highest_rated", "type": "string" }, - "store_id": { - "description": "StoreID is the underlying Drupal node id, e.g. \"51351\" from\n/node/51351. Present whenever the page's own settings expose it.", - "example": "51351", - "type": "string" - } - }, - "type": "object" - }, - "shakeshack.locationsResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "page": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/shakeshack.LocationsResponse" - }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "shakeshack.menuResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "page_size": { + "example": 15, "type": "integer" }, - "data": { - "$ref": "#/definitions/shakeshack.MenuResponse" + "path": { + "example": "/categories/vibe-coding", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "shakeshack.nearbyResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "slug": { + "example": "vibe-coding", + "type": "string" }, - "data": { - "$ref": "#/definitions/shakeshack.NearbyResponse" + "tags": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "total_count": { + "type": "integer" } }, "type": "object" }, - "shakeshack.storeResponseDoc": { + "producthunt.ProductCategoryQuestion": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "body": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductCategoryMarkdown" + } + ], + "description": "Text of the question." }, - "data": { - "$ref": "#/definitions/shakeshack.StoreResponse" + "id": { + "description": "Product Hunt id of the question.", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "top_answer": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductCategoryAnswer" + } + ], + "description": "Highest-ranked answer to the question." } }, "type": "object" }, - "shein.AggregationFilters": { + "producthunt.ProductCategoryRandomizationStatus": { "properties": { - "category": { - "$ref": "#/definitions/shein.FacetCategory" - }, - "filters": { - "items": { - "$ref": "#/definitions/shein.FacetGroup" - }, - "type": "array" - }, - "keyword": { - "example": "dress", - "type": "string" + "active": { + "description": "Whether randomized ordering is currently active for the post.", + "type": "boolean" }, - "max_price": { - "example": "569", + "next_transition_at": { + "description": "Time the randomization status next changes. Omitted when none is scheduled.", "type": "string" }, - "min_price": { - "example": "18", - "type": "string" + "random_day": { + "description": "Whether the post's launch day uses randomized ordering.", + "type": "boolean" } }, "type": "object" }, - "shein.AutocompleteResponse": { + "producthunt.ProductCategoryRecentSummary": { "properties": { - "suggestions": { + "products": { + "description": "Products the summary covers.", "items": { - "$ref": "#/definitions/shein.AutocompleteSuggestion" + "$ref": "#/definitions/producthunt.ProductCategorySummaryProduct" }, "type": "array" }, - "word": { - "example": "dres", + "summary": { + "description": "Short text summarising what recently launched in the category.", "type": "string" } }, "type": "object" }, - "shein.AutocompleteSuggestion": { + "producthunt.ProductCategoryRef": { "properties": { - "type": { - "example": "common", + "id": { + "description": "Product Hunt id of the category.", "type": "string" }, - "word": { - "example": "Dress For Women", + "name": { + "description": "Name of the category as shown on Product Hunt.", "type": "string" }, - "word_id": { - "example": "163784", - "type": "string" - } - }, - "type": "object" - }, - "shein.BrandCategory": { - "properties": { - "cat_id": { - "example": "2030", + "path": { + "description": "Path of the category page on Product Hunt.", "type": "string" }, - "category_name": { - "example": "Women Clothing", + "slug": { + "description": "URL slug of the category.", "type": "string" } }, "type": "object" }, - "shein.BrandsResponse": { + "producthunt.ProductCategorySource": { "properties": { - "categories": { + "badges": { + "description": "Badges shown next to the source.", "items": { - "$ref": "#/definitions/shein.BrandCategory" + "type": "string" }, "type": "array" + }, + "id": { + "description": "Product Hunt id of the source item.", + "type": "string" + }, + "path": { + "description": "Path of the source item on Product Hunt.", + "type": "string" + }, + "subject_id": { + "description": "Product Hunt id of the item the source is attached to.", + "type": "string" + }, + "type": { + "description": "Kind of Product Hunt item the source is, for example `Comment`.", + "type": "string" + }, + "user": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductCategoryUser" + } + ], + "description": "User who wrote the source item." + }, + "visible_at": { + "description": "Time the source item became visible, as Product Hunt returns it.", + "type": "string" } }, "type": "object" }, - "shein.CategoriesResponse": { + "producthunt.ProductCategorySummaryProduct": { "properties": { - "categories": { + "badges": { + "description": "Badges the product has earned on Product Hunt.", "items": { - "$ref": "#/definitions/shein.CategoryNode" + "$ref": "#/definitions/producthunt.ProductAlternativeBadge" }, "type": "array" }, - "filters": { + "categories": { + "description": "Product Hunt categories the product is listed in.", "items": { - "$ref": "#/definitions/shein.Filter" + "$ref": "#/definitions/producthunt.ProductCategoryRef" }, "type": "array" - } - }, - "type": "object" - }, - "shein.CategoryFiltersResponse": { - "properties": { - "cat_id": { - "example": "1766", - "type": "string" }, - "currency": { - "example": "HK$", + "followers_count": { + "description": "Number of Product Hunt users following the product.", + "type": "integer" + }, + "id": { + "description": "Product Hunt id of the product.", "type": "string" }, - "filters": { - "items": { - "$ref": "#/definitions/shein.Filter" - }, - "type": "array" + "is_no_longer_online": { + "description": "Whether Product Hunt marks the product as no longer online.", + "type": "boolean" }, - "max_price": { - "example": 569, - "type": "number" + "is_subscribed": { + "description": "Whether the requesting viewer follows the product.", + "type": "boolean" }, - "min_price": { - "example": 18, - "type": "number" - } - }, - "type": "object" - }, - "shein.CategoryGoodsResponse": { - "properties": { - "cat_id": { - "example": "1727", + "is_top_product": { + "description": "Whether Product Hunt flags the product as a top product.", + "type": "boolean" + }, + "latest_launch": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductCategoryLatestLaunch" + } + ], + "description": "Most recent launch of the product." + }, + "logo_uuid": { + "description": "Identifier of the product's logo image file.", "type": "string" }, - "category_name": { - "example": "Dresses", + "name": { + "description": "Name of the product as shown on Product Hunt.", "type": "string" }, - "page": { - "example": 1, + "reviews_count": { + "description": "Number of reviews the product has.", "type": "integer" }, - "products": { - "items": { - "$ref": "#/definitions/shein.Product" - }, - "type": "array" - }, - "total": { - "example": 1187, - "type": "integer" - } - }, - "type": "object" - }, - "shein.CategoryNavResponse": { - "properties": { - "cat_id": { - "example": "1766", - "type": "string" + "reviews_rating": { + "description": "Average review rating of the product.", + "type": "number" }, - "navs": { - "items": { - "$ref": "#/definitions/shein.NavTab" - }, - "type": "array" - } - }, - "type": "object" - }, - "shein.CategoryNode": { - "properties": { - "cat_id": { - "example": "3638", + "slug": { + "description": "URL slug of the product on Product Hunt.", "type": "string" }, - "category_name": { - "example": "False Eyelashes & Adhesives", + "tagline": { + "description": "Short tagline of the product.", "type": "string" }, - "children": { + "tags": { + "description": "Tags describing the product.", "items": { - "$ref": "#/definitions/shein.CategoryNode" + "type": "string" }, "type": "array" } }, "type": "object" }, - "shein.ColorVariant": { + "producthunt.ProductCategoryTopic": { "properties": { - "color_image": { - "type": "string" - }, - "color_name": { - "example": "Blue", - "type": "string" - }, - "goods_id": { - "example": "162996968", - "type": "string" - }, - "goods_sn": { - "example": "sz25081190840936964", + "id": { + "description": "Product Hunt id of the topic.", "type": "string" }, - "goods_url_name": { + "name": { + "description": "Name of the topic as shown on Product Hunt.", "type": "string" }, - "image": { + "slug": { + "description": "URL slug of the topic.", "type": "string" } }, "type": "object" }, - "shein.DealCategory": { + "producthunt.ProductCategoryUser": { "properties": { - "cat_id": { - "example": "4436", + "avatar_url": { + "description": "URL of the user's profile picture.", + "type": "string" + }, + "id": { + "description": "Product Hunt id of the user.", "type": "string" }, "name": { - "example": "Women Apparel", + "description": "Display name of the user.", "type": "string" }, - "type": { - "example": "realCategory", + "username": { + "description": "Product Hunt username of the user.", "type": "string" } }, "type": "object" }, - "shein.DealProduct": { + "producthunt.ProductCustomersPage": { "properties": { - "brand_code": { - "example": "1qmfm", - "type": "string" - }, - "category_id": { - "example": "12476", - "type": "string" - }, - "category_name": { - "example": "Women Long Dresses", + "connection": { + "description": "Kind of list the items come from, for example `customers`.", + "example": "customers", "type": "string" }, - "color_img": { + "end_cursor": { + "description": "Cursor of the last item on this page. Omitted when Product Hunt returns none.", "type": "string" }, - "comment_avg": { - "example": "4.68", - "type": "string" + "has_next_page": { + "description": "Whether another page of customers follows this one.", + "type": "boolean" }, - "comment_count": { - "example": 1001, - "type": "integer" + "has_previous_page": { + "description": "Whether a page of customers precedes this one.", + "type": "boolean" }, - "detail_images": { + "items": { + "description": "Products that are customers of the product, one per entry.", "items": { - "type": "string" + "$ref": "#/definitions/producthunt.ProductCategoryListProduct" }, "type": "array" }, - "goods_id": { - "example": "163003837", + "name": { + "description": "Name of the product.", + "example": "OpenAI", "type": "string" }, - "goods_img": { + "order": { + "description": "Order the customers are sorted in, `customers` or `latest_launch`.", + "example": "customers", "type": "string" }, - "goods_name": { - "example": "Sweetra Women's Oblique Shoulder Fitted Bandeau Dress", + "page": { + "description": "Page number returned.", + "example": 1, + "type": "integer" + }, + "page_size": { + "description": "Number of customers requested per page.", + "example": 10, + "type": "integer" + }, + "pages_count": { + "description": "Total number of pages of customers.", + "example": 12, + "type": "integer" + }, + "product_id": { + "description": "Product Hunt id of the product.", + "example": "594550", "type": "string" }, - "goods_sn": { - "example": "sz25081193234595996", + "raw_page_info": { + "additionalProperties": {}, + "description": "Pagination details for this page as Product Hunt returns them.", + "type": "object" + }, + "slug": { + "description": "URL slug of the product on Product Hunt.", + "example": "openai", "type": "string" }, - "goods_url_name": { - "example": "Sweetra-Women-s-Oblique-Shoulder-Fitted-Bandeau-Dress", + "total_count": { + "description": "Total number of customers the product has.", + "example": 120, + "type": "integer" + } + }, + "type": "object" + }, + "producthunt.ProductDetailedReview": { + "properties": { + "alternative_products": { + "description": "Products the reviewer names as alternatives.", + "items": { + "$ref": "#/definitions/producthunt.ProductDetailedReviewProduct" + }, + "type": "array" + }, + "alternatives_feedback": { + "description": "Reviewer's free-text comments on alternatives to the product.", "type": "string" }, - "is_new_coupon": { - "example": false, + "can_destroy": { + "description": "Whether the requesting viewer can delete the review.", "type": "boolean" }, - "mall_code": { - "example": "1", - "type": "string" + "can_moderate": { + "description": "Whether the requesting viewer can moderate the review.", + "type": "boolean" }, - "on_sale": { - "example": true, + "can_reply": { + "description": "Whether the requesting viewer can reply to the review.", "type": "boolean" }, - "retail_price": { - "example": "HK$119.00", + "can_update": { + "description": "Whether the requesting viewer can edit the review.", + "type": "boolean" + }, + "comments_count": { + "description": "Number of comments on the review.", + "type": "integer" + }, + "created_at": { + "description": "Time the review was written.", "type": "string" }, - "sale_price": { - "example": "HK$119.00", + "customization_rating": { + "description": "Reviewer's rating for customization. Omitted when the reviewer gave none.", + "type": "integer" + }, + "ease_of_use_rating": { + "description": "Reviewer's rating for ease of use. Omitted when the reviewer gave none.", + "type": "integer" + }, + "follow_product": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductDetailedReviewFollowProduct" + } + ], + "description": "The reviewed product with the viewer's follow state." + }, + "from_post": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductDetailedReviewPost" + } + ], + "description": "Launch post the review was written from." + }, + "has_voted": { + "description": "Whether the requesting viewer has upvoted the review.", + "type": "boolean" + }, + "id": { + "description": "Product Hunt id of the review.", "type": "string" }, - "sold_out": { - "example": false, + "impression_count": { + "description": "Number of times the review has been shown.", + "type": "integer" + }, + "is_hidden": { + "description": "Whether the review is hidden on Product Hunt.", "type": "boolean" }, - "spu": { - "example": "z250520775866", + "llm_content_quality_grade": { + "description": "Quality grade Product Hunt assigned to the review text. Omitted when none is given.", "type": "string" }, - "store_code": { - "example": "7945614031", + "llm_content_quality_reason": { + "description": "Reason given for the review's quality grade. Omitted when none is given.", "type": "string" }, - "usd_price": { - "example": "$15.16", + "negative_feedback": { + "description": "Reviewer's free-text comments on what they disliked.", "type": "string" - } - }, - "type": "object" - }, - "shein.DealTabsResponse": { - "properties": { - "categories": { + }, + "overall_experience": { + "description": "Reviewer's free-text summary of their overall experience.", + "type": "string" + }, + "overall_rating": { + "description": "Reviewer's overall rating of the product.", + "type": "integer" + }, + "positive_feedback": { + "description": "Reviewer's free-text comments on what they liked.", + "type": "string" + }, + "product": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductDetailedReviewProduct" + } + ], + "description": "Product the review is about." + }, + "question_answers": { + "description": "Reviewer's answers to Product Hunt's review questions.", "items": { - "$ref": "#/definitions/shein.DealCategory" + "$ref": "#/definitions/producthunt.ProductDetailedReviewQuestionAnswer" }, "type": "array" }, - "for_you_tab": { - "example": "For You", - "type": "string" - } - }, - "type": "object" - }, - "shein.DealsProductsResponse": { - "properties": { - "page": { - "example": 1, + "reliability_rating": { + "description": "Reviewer's rating for reliability. Omitted when the reviewer gave none.", "type": "integer" }, - "products": { + "review_type": { + "description": "Kind of review, for example `founder` or `personal`.", + "type": "string" + }, + "selected_cons": { + "description": "Downsides the reviewer picked from Product Hunt's tag list.", "items": { - "$ref": "#/definitions/shein.DealProduct" + "$ref": "#/definitions/producthunt.ProductDetailedReviewTag" }, "type": "array" }, - "total": { - "example": 3000, - "type": "integer" - } - }, - "type": "object" - }, - "shein.FacetCategory": { - "properties": { - "children": { + "selected_pros": { + "description": "Strengths the reviewer picked from Product Hunt's tag list.", "items": { - "$ref": "#/definitions/shein.FacetCategory" + "$ref": "#/definitions/producthunt.ProductDetailedReviewTag" }, "type": "array" }, - "id": { - "example": "2030", + "status": { + "description": "Publication status of the review, for example `submitted`.", "type": "string" }, - "name": { - "example": "Women Clothing", + "threads_end_cursor": { + "description": "Cursor of the last comment thread returned. Omitted when none.", "type": "string" + }, + "threads_has_next_page": { + "description": "Whether more comment threads exist on the review.", + "type": "boolean" + }, + "threads_total_count": { + "description": "Total number of comment threads on the review.", + "type": "integer" + }, + "user": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductDetailedReviewUser" + } + ], + "description": "Reviewer who wrote the review." + }, + "value_for_money_rating": { + "description": "Reviewer's rating for value for money. Omitted when the reviewer gave none.", + "type": "integer" + }, + "votes_count": { + "description": "Number of upvotes the review has.", + "type": "integer" } }, "type": "object" }, - "shein.FacetGroup": { + "producthunt.ProductDetailedReviewFollowProduct": { "properties": { "id": { - "example": "87", + "description": "Product Hunt id of the product.", + "type": "string" + }, + "is_no_longer_online": { + "description": "Whether Product Hunt marks the product as no longer online.", + "type": "boolean" + }, + "is_subscribed": { + "description": "Whether the requesting viewer follows the product.", + "type": "boolean" + }, + "logo_uuid": { + "description": "Identifier of the product's logo image file.", "type": "string" }, "name": { - "example": "Size", + "description": "Name of the product as shown on Product Hunt.", "type": "string" }, - "options": { - "items": { - "$ref": "#/definitions/shein.FacetOption" - }, - "type": "array" + "slug": { + "description": "URL slug of the product on Product Hunt.", + "type": "string" } }, "type": "object" }, - "shein.FacetOption": { + "producthunt.ProductDetailedReviewPost": { "properties": { + "badges": { + "description": "Badges the launch post has earned.", + "items": { + "$ref": "#/definitions/producthunt.ProductCategoryListBadge" + }, + "type": "array" + }, "id": { - "example": "87_757", + "description": "Product Hunt id of the launch post.", "type": "string" }, + "is_top_launch": { + "description": "Whether Product Hunt flags the post as a top launch.", + "type": "boolean" + }, + "latest_score": { + "description": "Latest vote score of the launch post.", + "type": "integer" + }, "name": { - "example": "XXS", + "description": "Name of the launch post.", "type": "string" - } - }, - "type": "object" - }, - "shein.Filter": { - "properties": { - "node_id": { - "example": "87", + }, + "product_id": { + "description": "Product Hunt id of the product the post belongs to.", "type": "string" }, - "node_name": { - "example": "Size", + "product_is_top_product": { + "description": "Whether Product Hunt flags the product as a top product.", + "type": "boolean" + }, + "product_slug": { + "description": "URL slug of the product the post belongs to.", "type": "string" }, - "options": { - "items": { - "$ref": "#/definitions/shein.FilterOption" - }, - "type": "array" - } - }, - "type": "object" - }, - "shein.FilterOption": { - "properties": { - "node_id": { - "example": "87_757", + "product_state": { + "description": "State of the product on Product Hunt, for example `default`.", "type": "string" }, - "node_name": { - "example": "XXS", + "slug": { + "description": "URL slug of the launch post.", + "type": "string" + }, + "thumbnail_image_uuid": { + "description": "Identifier of the launch post's thumbnail image file.", "type": "string" } }, "type": "object" }, - "shein.Keyword": { + "producthunt.ProductDetailedReviewProduct": { "properties": { - "from": { - "example": "search", + "id": { + "description": "Product Hunt id of the product.", "type": "string" }, - "type": { - "example": "goods_pool", + "is_no_longer_online": { + "description": "Whether Product Hunt marks the product as no longer online.", + "type": "boolean" + }, + "logo_uuid": { + "description": "Identifier of the product's logo image file.", "type": "string" }, - "word": { - "example": "Mother And Daughter", + "name": { + "description": "Name of the product as shown on Product Hunt.", "type": "string" }, - "word_id": { - "example": "199828", + "slug": { + "description": "URL slug of the product on Product Hunt.", "type": "string" } }, "type": "object" }, - "shein.NavTab": { + "producthunt.ProductDetailedReviewQuestionAnswer": { "properties": { - "goods_id": { - "example": "52544880", - "type": "string" - }, - "nav_id": { - "example": "1738", + "answer": { + "description": "Reviewer's answer to the question.", "type": "string" }, - "nav_img": { + "id": { + "description": "Product Hunt id of the answer.", "type": "string" }, - "nav_name": { - "example": "T-Shirts", + "question": { + "description": "Text of the review question.", "type": "string" }, - "nav_type": { - "example": "1", + "question_id": { + "description": "Product Hunt id of the review question.", "type": "string" } }, "type": "object" }, - "shein.Product": { + "producthunt.ProductDetailedReviewTag": { "properties": { - "brand_code": { - "example": "1qmfm", - "type": "string" - }, - "category_id": { - "example": "12476", - "type": "string" - }, - "category_name": { - "example": "Women Long Dresses", - "type": "string" + "count": { + "description": "Number of reviewers who picked this tag for the product.", + "type": "integer" }, - "color_img": { + "id": { + "description": "Product Hunt id of the tag.", "type": "string" }, - "comment_avg": { - "example": "4.68", + "name": { + "description": "Text of the tag as shown on Product Hunt.", "type": "string" }, - "comment_count": { - "example": 1001, - "type": "integer" - }, - "detail_images": { - "items": { - "type": "string" - }, - "type": "array" - }, - "goods_id": { - "example": "163003837", + "type": { + "description": "Whether the tag is a strength or a downside, for example `Positive`.", "type": "string" - }, - "goods_img": { + } + }, + "type": "object" + }, + "producthunt.ProductDetailedReviewUser": { + "properties": { + "avatar_url": { + "description": "URL of the reviewer's profile picture.", "type": "string" }, - "goods_name": { - "example": "Sweetra Women's Oblique Shoulder Fitted Bandeau Dress", + "headline": { + "description": "Reviewer's profile headline.", "type": "string" }, - "goods_sn": { - "example": "sz25081193234595996", + "id": { + "description": "Product Hunt id of the reviewer.", "type": "string" }, - "goods_url_name": { - "example": "Sweetra-Women-s-Oblique-Shoulder-Fitted-Bandeau-Dress", - "type": "string" + "is_account_verified": { + "description": "Whether the reviewer's Product Hunt account is verified.", + "type": "boolean" }, - "mall_code": { - "example": "1", - "type": "string" + "is_ambassador": { + "description": "Whether the reviewer is a Product Hunt ambassador.", + "type": "boolean" }, - "on_sale": { - "example": true, + "is_followed": { + "description": "Whether the requesting viewer follows the reviewer.", "type": "boolean" }, - "retail_price": { - "example": "HK$119.00", + "name": { + "description": "Reviewer's display name.", "type": "string" }, - "sale_price": { - "example": "HK$119.00", - "type": "string" + "reviews_count": { + "description": "Number of reviews the reviewer has written.", + "type": "integer" }, - "sold_out": { - "example": false, - "type": "boolean" + "selected_byline_product": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.ProductDetailedReviewProduct" + } + ], + "description": "Product the reviewer shows on their byline." }, - "spu": { - "example": "z250520775866", - "type": "string" + "top_hunter_badge": { + "additionalProperties": {}, + "description": "Top hunter badge on the reviewer's profile, as Product Hunt returns it. Omitted when none.", + "type": "object" }, - "store_code": { - "example": "7945614031", - "type": "string" + "top_launch_badge": { + "additionalProperties": {}, + "description": "Top launch badge on the reviewer's profile, as Product Hunt returns it. Omitted when none.", + "type": "object" }, - "usd_price": { - "example": "$15.16", + "top_product_badge": { + "additionalProperties": {}, + "description": "Top product badge on the reviewer's profile, as Product Hunt returns it. Omitted when none.", + "type": "object" + }, + "username": { + "description": "Reviewer's Product Hunt username.", "type": "string" } }, "type": "object" }, - "shein.ProductDetail": { + "producthunt.ProductDetailedReviewsPage": { "properties": { - "brand_code": { - "example": "1qmfm", - "type": "string" - }, - "category_id": { - "example": "12476", + "connection": { + "description": "Kind of list the items come from, for example `detailedReviews`.", + "example": "detailedReviews", "type": "string" }, - "category_name": { - "example": "Women Dresses", - "type": "string" + "detailed_review": { + "additionalProperties": {}, + "description": "A single detailed review attached to the product, as Product Hunt returns it. Omitted when none.", + "type": "object" }, - "color_variants": { - "items": { - "$ref": "#/definitions/shein.ColorVariant" - }, - "type": "array" + "detailed_reviews_count": { + "description": "Total number of detailed reviews the product has.", + "type": "integer" }, - "description": { + "end_cursor": { + "description": "Cursor of the last review on this page. Omitted when Product Hunt returns none.", "type": "string" }, - "goods_id": { - "example": "163003837", - "type": "string" + "founder_detailed_reviews_count": { + "description": "Number of detailed reviews written by the product's founders.", + "type": "integer" }, - "goods_name": { - "example": "Sweetra Women's Oblique Shoulder Fitted Bandeau Dress", - "type": "string" + "has_next_page": { + "description": "Whether another page of reviews follows this one.", + "example": false, + "type": "boolean" }, - "goods_sn": { - "example": "sz25081193234595996", - "type": "string" + "is_maker": { + "description": "Whether the requesting viewer is a maker of the product.", + "type": "boolean" }, - "images": { + "is_trashed": { + "description": "Whether the product has been removed from Product Hunt.", + "type": "boolean" + }, + "items": { + "description": "Detailed reviews of the product, one per entry.", "items": { - "type": "string" + "$ref": "#/definitions/producthunt.ProductDetailedReview" }, "type": "array" }, - "on_sale": { - "example": true, - "type": "boolean" - }, - "retail_price": { - "example": "HK$119.00", + "name": { + "description": "Name of the product.", "type": "string" }, - "sale_price": { - "example": "HK$119.00", - "type": "string" + "other_detailed_reviews_count": { + "description": "Number of detailed reviews written by users other than the founders.", + "type": "integer" }, - "size_guide_url": { + "product_id": { + "description": "Product Hunt id of the product.", + "example": "1191613", "type": "string" }, - "sizes": { - "items": { - "$ref": "#/definitions/shein.SizeOption" - }, - "type": "array" + "raw_page_info": { + "additionalProperties": {}, + "description": "Pagination details for this page as Product Hunt returns them.", + "type": "object" }, - "skus": { - "items": { - "$ref": "#/definitions/shein.SkuVariant" - }, - "type": "array" + "reviews_count": { + "description": "Total number of reviews the product has.", + "type": "integer" }, - "store_code": { - "example": "7945614031", - "type": "string" + "reviews_rating": { + "description": "Average review rating of the product.", + "type": "number" }, - "usd_price": { - "example": "$15.16", - "type": "string" + "reviews_recent_rating": { + "description": "Average review rating over recent reviews. Omitted when Product Hunt gives none.", + "type": "number" }, - "video_url": { + "slug": { + "description": "URL slug of the product on Product Hunt.", + "example": "clico", "type": "string" + }, + "total_count": { + "description": "Total number of detailed reviews in the list.", + "example": 6, + "type": "integer" } }, "type": "object" }, - "shein.SearchKeywordsResponse": { - "properties": { - "keywords": { - "items": { - "$ref": "#/definitions/shein.Keyword" - }, - "type": "array" - } - }, - "type": "object" - }, - "shein.SearchProductsResponse": { + "producthunt.ProductLaunchesPage": { "properties": { - "keyword": { - "example": "dress", + "connection": { + "description": "Kind of list the items come from, for example `posts`.", + "example": "posts", "type": "string" }, - "origin_word": { - "example": "dress", + "end_cursor": { + "description": "Cursor of the last launch on this page. Pass it as `cursor` to get the next page.", "type": "string" }, - "page": { - "example": 1, - "type": "integer" - }, - "products": { - "items": { - "$ref": "#/definitions/shein.Product" - }, - "type": "array" + "has_next_page": { + "description": "Whether another page of launches follows this one.", + "type": "boolean" }, - "suggest_words": { + "items": { + "description": "Launch posts of the product, one per entry.", "items": { - "type": "string" + "$ref": "#/definitions/producthunt.ProductAboutPost" }, "type": "array" }, - "total": { - "example": 6535, - "type": "integer" - } - }, - "type": "object" - }, - "shein.SizeOption": { - "properties": { - "attr_id": { - "example": "87", + "name": { + "description": "Name of the product.", + "example": "OpenAI", "type": "string" }, - "attr_name": { - "example": "Size", + "order": { + "description": "Order the launches are sorted in, for example `DATE`.", + "example": "DATE", "type": "string" }, - "attr_value_id": { - "example": "757", + "product_id": { + "description": "Product Hunt id of the product.", + "example": "1191613", "type": "string" }, - "attr_value_name": { - "example": "XXS", + "raw_page_info": { + "additionalProperties": {}, + "description": "Pagination details for this page as Product Hunt returns them.", + "type": "object" + }, + "slug": { + "description": "URL slug of the product on Product Hunt.", + "example": "openai", "type": "string" + }, + "total_count": { + "description": "Total number of launches the product has.", + "example": 12, + "type": "integer" } }, "type": "object" }, - "shein.SkuVariant": { + "producthunt.ProductMaker": { "properties": { - "retail_price": { - "example": "HK$119.00", + "avatar_url": { + "description": "URL of the maker's profile picture.", "type": "string" }, - "sale_price": { - "example": "HK$119.00", - "type": "string" + "followers_count": { + "description": "Number of Product Hunt users following the maker.", + "type": "integer" }, - "sku_code": { - "example": "I6ar22eezl2i", + "headline": { + "description": "Maker's profile headline.", "type": "string" }, - "sku_sale_attr": { + "id": { + "description": "Product Hunt id of the maker.", "type": "string" }, - "stock": { - "example": "20", + "is_followed": { + "description": "Whether the requesting viewer follows the maker.", + "type": "boolean" + }, + "made_posts": { + "description": "Launch posts the maker worked on.", + "items": { + "$ref": "#/definitions/producthunt.ProductMakerPost" + }, + "type": "array" + }, + "name": { + "description": "Maker's display name.", "type": "string" }, - "usd_price": { - "example": "$15.16", + "username": { + "description": "Maker's Product Hunt username.", "type": "string" } }, "type": "object" }, - "shein.StoreCategory": { + "producthunt.ProductMakerPost": { "properties": { - "category_id": { - "example": "1767", + "id": { + "description": "Product Hunt id of the launch post.", "type": "string" }, - "category_name": { - "example": "Women Bottoms", + "name": { + "description": "Name of the launch post.", "type": "string" }, - "level": { - "example": 3, - "type": "integer" - }, - "product_count": { - "example": 205, - "type": "integer" - } - }, - "type": "object" - }, - "shein.StoreProductsResponse": { - "properties": { - "category_id": { - "example": "1766", + "product_id": { + "description": "Product Hunt id of the product the post belongs to.", "type": "string" }, - "page": { - "example": 1, - "type": "integer" + "product_slug": { + "description": "URL slug of the product the post belongs to.", + "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/shein.Product" - }, - "type": "array" + "product_state": { + "description": "State of the product on Product Hunt, for example `default`.", + "type": "string" }, - "store_code": { - "example": "1813776918", + "slug": { + "description": "URL slug of the launch post.", "type": "string" }, - "total": { - "example": 156, - "type": "integer" + "thumbnail_image_uuid": { + "description": "Identifier of the launch post's thumbnail image file.", + "type": "string" } }, "type": "object" }, - "shein.StoreResponse": { + "producthunt.ProductMakersPage": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/shein.StoreCategory" - }, - "type": "array" + "can_claim": { + "description": "Whether the requesting viewer can claim the product.", + "type": "boolean" }, - "followers": { - "example": "231K", + "connection": { + "description": "Kind of list the items come from, for example `makers`.", + "example": "makers", "type": "string" }, - "is_brand_store": { - "example": false, - "type": "boolean" + "end_cursor": { + "description": "Cursor of the last maker on this page. Pass it as `cursor` to get the next page.", + "type": "string" }, - "is_choices_store": { + "has_next_page": { + "description": "Whether another page of makers follows this one.", "example": false, "type": "boolean" }, - "is_lifestyle_store": { - "example": false, + "is_claimed": { + "description": "Whether the product page has been claimed by its team.", "type": "boolean" }, - "is_trends_store": { - "example": true, + "is_trashed": { + "description": "Whether the product has been removed from Product Hunt.", "type": "boolean" }, - "seller_label": { - "example": "Brand", - "type": "string" - }, - "store_code": { - "example": "1813776918", - "type": "string" + "items": { + "description": "Makers of the product, one per entry.", + "items": { + "$ref": "#/definitions/producthunt.ProductMaker" + }, + "type": "array" }, - "store_logo": { + "name": { + "description": "Name of the product.", "type": "string" }, - "store_name": { - "example": "COUREZ", - "type": "string" - } - }, - "type": "object" - }, - "shein.TrendCollection": { - "properties": { - "tab_id": { - "example": "6810", + "product_id": { + "description": "Product Hunt id of the product.", + "example": "1191613", "type": "string" }, - "tab_name": { - "example": "#Elegant Affair Collection", - "type": "string" + "raw_page_info": { + "additionalProperties": {}, + "description": "Pagination details for this page as Product Hunt returns them.", + "type": "object" }, - "tab_name_en": { + "slug": { + "description": "URL slug of the product on Product Hunt.", + "example": "clico", "type": "string" }, - "tab_type": { - "example": "trend", - "type": "string" - } - }, - "type": "object" - }, - "shein.TrendFilterCategory": { - "properties": { - "cat_id": { - "example": "2030", - "type": "string" + "total_count": { + "description": "Total number of makers the product has.", + "example": 3, + "type": "integer" }, - "category_name": { - "example": "Women Clothing", - "type": "string" + "viewer_pending_team_request": { + "additionalProperties": {}, + "description": "The viewer's pending request to join the product's team, as Product Hunt returns it. Omitted when none.", + "type": "object" } }, "type": "object" }, - "shein.TrendingCategoriesResponse": { + "producthunt.SimilarProduct": { "properties": { "categories": { + "description": "Product Hunt categories the similar product is listed in.", + "example": [ + "[\"Presentation Software\"]" + ], "items": { - "$ref": "#/definitions/shein.TrendingCategory" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "shein.TrendingCategory": { - "properties": { - "cat_id": { - "example": "1930", - "type": "string" - }, - "category_name": { - "example": "Women Denim", - "type": "string" }, - "goods_id": { - "example": "425338947", + "id": { + "description": "Product Hunt slug of the similar product.", + "example": "beautiful-ai", "type": "string" }, - "image": { + "name": { + "description": "Name of the similar product.", + "example": "Beautiful.ai", "type": "string" }, - "store_code": { - "example": "1813776918", - "type": "string" - } - }, - "type": "object" - }, - "shein.TrendingFiltersResponse": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/shein.TrendFilterCategory" - }, - "type": "array" + "rating": { + "description": "Average review rating of the similar product.", + "example": 3.3, + "type": "number" }, - "collections": { - "items": { - "$ref": "#/definitions/shein.TrendCollection" - }, - "type": "array" + "review_count": { + "description": "Number of reviews the similar product has.", + "example": 20, + "type": "integer" } }, "type": "object" }, - "shein.aggregationFiltersResponseDoc": { + "producthunt.aboutResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shein.AggregationFilters" + "$ref": "#/definitions/producthunt.ProductAboutPage" }, "msg": { - "example": "OK", + "example": "Request successful", "type": "string" } }, "type": "object" }, - "shein.autocompleteResponseDoc": { + "producthunt.alternativesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shein.AutocompleteResponse" + "$ref": "#/definitions/producthunt.ProductAlternativesPage" }, "msg": { "example": "OK", @@ -192203,14 +201075,14 @@ }, "type": "object" }, - "shein.brandsResponseDoc": { + "producthunt.categoryProductsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shein.BrandsResponse" + "$ref": "#/definitions/producthunt.ProductCategoryProductsPage" }, "msg": { "example": "OK", @@ -192219,14 +201091,14 @@ }, "type": "object" }, - "shein.categoriesResponseDoc": { + "producthunt.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shein.CategoriesResponse" + "$ref": "#/definitions/producthunt.ProductCategoryPage" }, "msg": { "example": "OK", @@ -192235,14 +201107,14 @@ }, "type": "object" }, - "shein.categoryFiltersResponseDoc": { + "producthunt.customersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shein.CategoryFiltersResponse" + "$ref": "#/definitions/producthunt.ProductCustomersPage" }, "msg": { "example": "OK", @@ -192251,14 +201123,14 @@ }, "type": "object" }, - "shein.categoryGoodsResponseDoc": { + "producthunt.launchesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shein.CategoryGoodsResponse" + "$ref": "#/definitions/producthunt.ProductLaunchesPage" }, "msg": { "example": "OK", @@ -192267,30 +201139,30 @@ }, "type": "object" }, - "shein.categoryNavResponseDoc": { + "producthunt.leaderboardResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shein.CategoryNavResponse" + "$ref": "#/definitions/producthunt.LeaderboardPage" }, "msg": { - "example": "OK", + "example": "Request successful", "type": "string" } }, "type": "object" }, - "shein.dealTabsResponseDoc": { + "producthunt.makersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shein.DealTabsResponse" + "$ref": "#/definitions/producthunt.ProductMakersPage" }, "msg": { "example": "OK", @@ -192299,14 +201171,14 @@ }, "type": "object" }, - "shein.dealsProductsResponseDoc": { + "producthunt.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shein.DealsProductsResponse" + "$ref": "#/definitions/producthunt.Product" }, "msg": { "example": "OK", @@ -192315,14 +201187,14 @@ }, "type": "object" }, - "shein.productDetailResponseDoc": { + "producthunt.reviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shein.ProductDetail" + "$ref": "#/definitions/producthunt.ProductDetailedReviewsPage" }, "msg": { "example": "OK", @@ -192331,62 +201203,86 @@ }, "type": "object" }, - "shein.productsSearchResponseDoc": { + "producthunt.searchAggregationsDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/shein.SearchProductsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "topics": { + "description": "Launch counts per topic for the search results.", + "items": { + "$ref": "#/definitions/producthunt.searchTopicDoc" + }, + "type": "array" } }, "type": "object" }, - "shein.searchKeywordsResponseDoc": { + "producthunt.searchDataDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" + "aggregations": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.searchAggregationsDoc" + } + ], + "description": "Topic counts for the matching launches. Returned for launch searches." }, - "data": { - "$ref": "#/definitions/shein.SearchKeywordsResponse" + "edges": { + "description": "Search results on this page, one per entry.", + "items": { + "$ref": "#/definitions/producthunt.searchEdgeDoc" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "pageInfo": { + "allOf": [ + { + "$ref": "#/definitions/producthunt.searchPageInfoDoc" + } + ], + "description": "Paging details for the results." + }, + "pagesCount": { + "description": "Total number of result pages.", + "example": 394, + "type": "integer" } }, "type": "object" }, - "shein.storeProductsResponseDoc": { + "producthunt.searchEdgeDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" + "node": { + "description": "Search result: a product, user or launch, depending on `type`.", + "type": "object" + } + }, + "type": "object" + }, + "producthunt.searchPageInfoDoc": { + "properties": { + "hasNextPage": { + "description": "Whether another page of results follows this one.", + "type": "boolean" }, - "data": { - "$ref": "#/definitions/shein.StoreProductsResponse" + "hasPreviousPage": { + "description": "Whether a page of results precedes this one.", + "type": "boolean" }, - "msg": { - "example": "OK", - "type": "string" + "page": { + "description": "Page number returned.", + "example": 1, + "type": "integer" } }, "type": "object" }, - "shein.storeResponseDoc": { + "producthunt.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shein.StoreResponse" + "$ref": "#/definitions/producthunt.searchDataDoc" }, "msg": { "example": "OK", @@ -192395,1229 +201291,862 @@ }, "type": "object" }, - "shein.trendingCategoriesResponseDoc": { + "producthunt.searchTopicDoc": { "properties": { - "code": { - "example": 200, + "count": { + "description": "Number of matching launches in the topic.", + "example": 11979, "type": "integer" }, - "data": { - "$ref": "#/definitions/shein.TrendingCategoriesResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "topic": { + "description": "Topic the count applies to, with its `id` and `name`.", + "properties": { + "id": { + "example": "268", + "type": "string" + }, + "name": { + "example": "Artificial Intelligence", + "type": "string" + } + }, + "type": "object" } }, "type": "object" }, - "shein.trendingFiltersResponseDoc": { + "propublica.AuthorArticle": { "properties": { - "code": { - "example": 200, - "type": "integer" + "published_at": { + "type": "string" }, - "data": { - "$ref": "#/definitions/shein.TrendingFiltersResponse" + "title": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "shopapp.AnalysisResponse": { + "propublica.AuthorResponse": { "properties": { - "currencies": { - "description": "Currency codes found among the sampled products.", - "example": [ - "USD", - "GBP" - ], + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/propublica.AuthorArticle" }, "type": "array" }, - "discounts": { - "allOf": [ - { - "$ref": "#/definitions/shopapp.DiscountSummary" - } - ], - "description": "Discount percentages across sampled products that are on sale and have an original price." - }, - "groups_count": { - "description": "Number of product groups Shop.app returned with the results.", - "example": 5, - "type": "integer" - }, - "prices_by_currency": { - "description": "Price summary for each currency found among the sampled products.", + "bio": { "items": { - "$ref": "#/definitions/shopapp.CurrencyPriceSummary" + "type": "string" }, "type": "array" }, - "products_count": { - "description": "Number of products sampled.", - "example": 20, - "type": "integer" + "contact_email": { + "type": "string" }, - "query": { - "description": "Search query that was analyzed.", - "example": "sneakers", + "name": { "type": "string" }, - "sale_count": { - "description": "Number of sampled products that are on sale.", - "example": 6, + "page": { "type": "integer" }, - "sampled_product_ids": { - "description": "Product IDs of the first sampled products, up to 10.", - "example": [ - "8075903107261", - "7093164834901" - ], - "items": { + "social_links": { + "additionalProperties": { "type": "string" }, - "type": "array" - }, - "shops_count": { - "description": "Number of distinct shops among the sampled products.", - "example": 8, - "type": "integer" + "type": "object" }, - "top_shops": { - "description": "Up to five shops with the most sampled products.", - "items": { - "$ref": "#/definitions/shopapp.ShopSummary" - }, - "type": "array" + "url": { + "type": "string" } }, "type": "object" }, - "shopapp.CategoriesResponse": { + "psa.AutographFactsCategoriesResponse": { "properties": { "categories": { - "description": "Product categories listed on Shop.app, each with its subcategories.", "items": { - "$ref": "#/definitions/shopapp.CategoryItem" + "$ref": "#/definitions/psa.AutographFactsCategory" }, "type": "array" } }, "type": "object" }, - "shopapp.CategoryItem": { + "psa.AutographFactsCategory": { "properties": { - "children": { - "description": "Subcategories of this category.", - "items": { - "$ref": "#/definitions/shopapp.CategoryItem" - }, - "type": "array" - }, - "gid": { - "description": "Shopify global ID of the category.", - "example": "gid://shopify/ProductCategory/1?version=13", - "type": "string" - }, - "has_children": { - "description": "`true` when the category has subcategories.", - "type": "boolean" - }, "id": { - "description": "Numeric category ID taken from the Shopify global ID.", - "example": "1", - "type": "string" - }, - "image": { - "description": "URL of the category image.", - "type": "string" + "description": "ID is PSA's own numeric category id, confirmed live against every\ncategory this family covers. Distinct from PSA CardFacts'/Price\nGuide's own category id spaces -- do not assume they share values.", + "type": "integer" }, "name": { - "description": "Category name, for example `Women`.", - "example": "Women", - "type": "string" - }, - "path": { - "description": "Categories on the path from the top level down to this category.", - "items": { - "$ref": "#/definitions/shopapp.CategoryPath" - }, - "type": "array" - }, - "slug": { - "description": "URL-friendly form of the category name.", - "example": "women", + "description": "Name is PSA's own display label, e.g. \"Baseball\".", "type": "string" } }, "type": "object" }, - "shopapp.CategoryPath": { + "psa.AutographFactsGalleryImage": { "properties": { - "gid": { - "description": "Shopify global ID of the category on the path.", - "example": "gid://shopify/ProductCategory/1?version=13", - "type": "string" - }, - "id": { - "description": "Numeric ID of the category on the path.", - "example": "1", + "caption": { + "description": "Caption is PSA's own descriptive caption for this exemplar, e.g.\n\"1977 Hank Aaron Signed Letter\".", "type": "string" }, - "name": { - "description": "Name of the category on the path.", - "example": "Women", + "image_url": { + "description": "ImageURL is the full-size image URL.", "type": "string" } }, "type": "object" }, - "shopapp.CurrencyPriceSummary": { + "psa.AutographFactsGalleryResult": { "properties": { - "average": { - "description": "Average price in this currency, rounded to two decimals.", - "example": 72.42, - "type": "number" - }, - "count": { - "description": "Number of sampled products priced in this currency.", - "example": 12, - "type": "integer" + "images": { + "items": { + "$ref": "#/definitions/psa.AutographFactsGalleryImage" + }, + "type": "array" }, - "currency": { - "description": "Currency code of the prices.", - "example": "USD", + "name": { + "description": "Name is the subject's display name, e.g. \"Hank Aaron\".", "type": "string" }, - "max": { - "description": "Highest price in this currency.", - "example": 149.99, - "type": "number" - }, - "min": { - "description": "Lowest price in this currency.", - "example": 35.9, - "type": "number" - } - }, - "type": "object" - }, - "shopapp.DiscountSummary": { - "properties": { - "average_percent": { - "description": "Average discount across on-sale products, as a percentage of the original price.", - "example": 24.6, - "type": "number" - }, - "max_percent": { - "description": "Largest discount among on-sale products, as a percentage of the original price.", - "example": 60, - "type": "number" + "source_url": { + "type": "string" }, - "min_percent": { - "description": "Smallest discount among on-sale products, as a percentage of the original price.", - "example": 10, - "type": "number" + "subject_id": { + "type": "string" } }, "type": "object" }, - "shopapp.ImageItem": { + "psa.AutographFactsSubject": { "properties": { - "alt": { - "description": "Alt text of the image.", - "example": "Product image", + "name": { + "description": "Name is the subject's display name, e.g. \"Hank Aaron\".", "type": "string" }, - "url": { - "description": "URL of the image.", - "example": "https://cdn.shopify.com/example.jpg", - "type": "string" + "subject_id": { + "description": "SubjectID is PSA's own numeric subject id -- pass as subject_id to\nAutographFactsSubject.", + "type": "integer" } }, "type": "object" }, - "shopapp.LocationAddress": { + "psa.AutographFactsSubjectResult": { "properties": { - "address1": { - "description": "First line of the street address.", - "example": "175b Mott Street", + "autograph_profile": { + "description": "AutographProfile is PSA's own free-text authentication notes for\nthis subject's signature -- signing habits, forgery risk,\nsignature evolution.", "type": "string" }, - "address2": { - "description": "Second line of the street address.", + "name": { + "description": "Name is the subject's display name, e.g. \"Hank Aaron\".", "type": "string" }, - "city": { - "description": "City of the address.", - "example": "New York", - "type": "string" + "prices": { + "additionalProperties": { + "type": "string" + }, + "description": "Prices maps PSA's own item-type labels (e.g. \"3x5/AP\", \"Gum Card\",\n\"Photo\", \"Check\", \"SS Bat\", \"SS Ball\" -- these vary by subject, not\na fixed global list) to PSA's own formatted price text for this\nsubject's autograph on that item type, e.g. \"$65\". \"IMP\" marks an\nitem type PSA considers impossible/unavailable for this subject\nrather than a real price.", + "type": "object" }, - "country": { - "description": "Country of the address, for example `US`.", - "example": "US", + "source_url": { "type": "string" }, - "postal_code": { - "description": "Postal code of the address.", - "example": "10012", + "subject_id": { "type": "string" }, - "zone_code": { - "description": "State or region code of the address, for example `NY`.", - "example": "NY", + "subject_profile": { + "description": "SubjectProfile is PSA's own free-text biography for this subject.", "type": "string" } }, "type": "object" }, - "shopapp.OptionGroup": { + "psa.AutographFactsSubjectsResponse": { "properties": { - "name": { - "description": "Option name, for example `Size`.", - "example": "Size", + "category_id": { + "type": "integer" + }, + "category_name": { "type": "string" }, - "values": { - "description": "Values available for the option.", + "subjects": { "items": { - "type": "string" + "$ref": "#/definitions/psa.AutographFactsSubject" }, "type": "array" } }, "type": "object" }, - "shopapp.ProductDetail": { + "psa.CardFactsCategoriesResponse": { "properties": { - "available": { - "description": "`true` when the selected variant is available for sale.", - "type": "boolean" - }, - "currency": { - "description": "Currency code of `price` and `original_price`.", - "example": "HKD", - "type": "string" - }, - "description": { - "description": "Product description text.", - "type": "string" - }, - "external_url": { - "description": "URL of the product on the seller's own online store.", - "type": "string" - }, - "id": { - "description": "Shop.app product ID.", - "example": "4596217053229", - "type": "string" - }, - "images": { - "description": "Images of the product.", - "items": { - "$ref": "#/definitions/shopapp.ImageItem" - }, - "type": "array" - }, - "option_groups": { - "description": "Option choices of the product, such as size or colour, with their values.", - "items": { - "$ref": "#/definitions/shopapp.OptionGroup" - }, - "type": "array" - }, - "original_price": { - "description": "Price before the discount, in `currency`.", - "example": 1166, - "type": "number" - }, - "price": { - "description": "Current price of the selected variant, in `currency`.", - "example": 1076, - "type": "number" - }, - "rating": { - "description": "Average shopper rating of the product.", - "example": 4.4, - "type": "number" - }, - "related_products": { - "description": "Products Shop.app shows as related to this one.", - "items": { - "$ref": "#/definitions/shopapp.ProductItem" - }, - "type": "array" - }, - "reviews": { - "description": "Shopper reviews shown on the product page.", + "categories": { "items": { - "$ref": "#/definitions/shopapp.ReviewItem" + "$ref": "#/definitions/psa.CardFactsCategory" }, "type": "array" - }, - "reviews_count": { - "description": "Number of shopper reviews of the product.", - "example": 22, + } + }, + "type": "object" + }, + "psa.CardFactsCategory": { + "properties": { + "id": { + "description": "ID is PSA's own numeric category id, confirmed live against every\ncategory this family covers. Distinct from Price Guide's/\nAutographFacts'/TicketFacts'/ProBatFacts' own category id spaces --\nids 10 and 16 in particular mean different things in CardFacts than\nin Price Guide, do not assume they share values.", "type": "integer" }, - "shop_handle": { - "description": "Shop.app handle of the shop selling the product.", - "example": "n1r478fp0h", + "name": { + "description": "Name is PSA's own display label, e.g. \"Baseball\".", "type": "string" - }, - "shop_id": { - "description": "Shop.app ID of the shop selling the product.", + } + }, + "type": "object" + }, + "psa.CardFactsChecklistCard": { + "properties": { + "name": { + "description": "Name is the card's display name, e.g. \"Wander Franco\". Some rows\ncarry an embedded HTML anchor around the name in PSA's own raw\nresponse (confirmed live, e.g. a golf set's \"Tiger Woods\" row) --\nstripped here so every row is plain text.", "type": "string" }, - "shop_name": { - "description": "Name of the shop selling the product.", - "example": "Wide Fit Shoes UK", + "number": { + "description": "Number is the card's printed number within the set. Some sets (e.g.\nplayer-name-only checklists like autograph card sets) carry no\nnumber at all, confirmed live -- empty in that case, not omitted, so\ncallers can rely on the field always being present.", "type": "string" + } + }, + "type": "object" + }, + "psa.CardFactsChecklistResponse": { + "properties": { + "cards": { + "items": { + "$ref": "#/definitions/psa.CardFactsChecklistCard" + }, + "type": "array" }, - "slug": { - "description": "URL slug of the product.", - "example": "mens-wide-fit-new-balance-624v5-black-trainers-abzorb", - "type": "string" + "has_checklist": { + "type": "boolean" }, - "title": { - "description": "Product title as shown on the product page.", - "example": "Mens Wide Fit New Balance 624V5 Black Trainers ABZORB", + "set_id": { "type": "string" }, - "url": { - "description": "Shop.app page URL of the product.", + "total_cards": { + "type": "integer" + } + }, + "type": "object" + }, + "psa.CardFactsSet": { + "properties": { + "name": { + "description": "Name is the set's display name, e.g. \"2022 Topps\".", "type": "string" }, - "variant_id": { - "description": "ID of the selected variant.", - "example": "34761278160941", - "type": "string" + "set_id": { + "description": "SetID is PSA's own numeric set id -- pass as set_id to\nCardFactsChecklist.", + "type": "integer" } }, "type": "object" }, - "shopapp.ProductDetailResponse": { + "psa.CardFactsSetsResponse": { "properties": { - "product": { - "allOf": [ - { - "$ref": "#/definitions/shopapp.ProductDetail" - } - ], - "description": "Details of the product." + "category_id": { + "type": "integer" + }, + "category_name": { + "type": "string" + }, + "sets": { + "items": { + "$ref": "#/definitions/psa.CardFactsSet" + }, + "type": "array" } }, "type": "object" }, - "shopapp.ProductItem": { + "psa.CertLookupResult": { "properties": { - "currency": { - "description": "Currency code of `price` and `original_price`.", - "example": "USD", + "brand_title": { + "description": "BrandTitle is the issuing brand/product line, e.g. \"POKEMON SKYRIDGE\".", "type": "string" }, - "group_query": { - "description": "Search query of the product group this item belongs to.", - "example": "kids' athletic sneakers", + "card_number": { + "description": "CardNumber is the card's number within its set, e.g. \"146\".", "type": "string" }, - "group_title": { - "description": "Title of the product group this item belongs to.", - "example": "kids' athletic sneakers", + "category": { + "description": "Category is PSA's own item category, e.g. \"TCG CARDS\".", "type": "string" }, - "id": { - "description": "Shop.app product ID.", - "example": "8075903107261", + "cert_number": { + "description": "CertNumber echoes the requested certification number.", "type": "string" }, - "image": { - "description": "URL of the product's first image.", - "example": "https://cdn.shopify.com/s/files/1/1145/5784/files/example.jpg", + "item_grade": { + "description": "ItemGrade is PSA's graded condition for this item, e.g. \"GEM MT 10\",\nfrom PSA's own published grade scale (Authentic through Gem Mint 10).", "type": "string" }, - "image_alt": { - "description": "Alt text of the product's first image.", - "example": "Black sneaker side view", + "label_type": { + "description": "LabelType is a special label variant PSA applied to this cert, e.g.\n\"W/ FUGITIVE INK TECHNOLOGY\". Empty when the cert carries PSA's\nstandard label.", "type": "string" }, - "on_sale": { - "description": "`true` when the original price is higher than the current price.", - "type": "boolean" + "psa_estimate": { + "description": "PSAEstimate is PSA's own dollar price estimate for this exact\ncert+grade, PSA's own formatted string (e.g. \"$135,624.00\"). Empty\nwhen PSA shows no estimate for this cert.", + "type": "string" }, - "original_price": { - "description": "Price before the discount, in `currency`.", - "example": 120, - "type": "number" + "psa_pop_higher": { + "description": "PSAPopHigher is the number of items PSA has graded higher than this\ncert's own grade for the same card. Nil when PSA shows no figure.", + "type": "integer" }, - "position": { - "description": "Position of the product in the results, starting at 1.", - "example": 1, + "psa_population": { + "description": "PSAPopulation is the number of items PSA has graded at this exact\ncard+grade combination. Nil when PSA shows no population figure for\nthis cert (e.g. an ungraded/authentic-only cert).", "type": "integer" }, - "price": { - "description": "Current price of the product, in `currency`.", - "example": 100, - "type": "number" + "psa_population_url": { + "description": "PSAPopulationURL is PSA's own Population Report deep link for this\ncard+grade. Informational only -- following it requires a Collectors\naccount login; see the CertLookupResult doc comment above.", + "type": "string" }, - "shop_id": { - "description": "Shop.app ID of the shop selling the product.", - "example": "62696", + "reverse_cert_barcode": { + "description": "ReverseCertBarcode reports whether the physical label also carries a\nbarcode on its reverse side.", + "type": "boolean" + }, + "set_registry_note": { + "description": "SetRegistryNote is PSA's own Set Registry membership line for this\ncert, e.g. \"This cert does not appear in any sets.\" when the item is\nnot registered in any PSA Set Registry set.", "type": "string" }, - "shop_name": { - "description": "Name of the shop selling the product.", - "example": "BILLY Footwear", + "source_url": { + "description": "SourceURL is the PSA cert-verification page this result was parsed\nfrom.", "type": "string" }, - "title": { - "description": "Product title as shown on the Shop.app card.", - "example": "Black/Black/Gum BILLY Sport Inclusion DZ1", + "subject": { + "description": "Subject is the card's subject/player name, e.g. \"CHARIZARD-HOLO\".", "type": "string" }, - "url": { - "description": "Link to the product page.", - "example": "https://billyfootwear.com/products/black-black-gum-billy-sport-inclusion-dz1-zipper-shoes?utm_source=shop_app", + "title": { + "description": "Title is PSA's own item title line, e.g.\n\"2003 POKEMON SKYRIDGE #146 CHARIZARD-HOLO\".", "type": "string" }, - "variant_id": { - "description": "ID of the product variant shown on the card.", - "example": "46242960965821", + "year": { + "description": "Year is the card/item's issue year, e.g. \"2003\".", "type": "string" } }, "type": "object" }, - "shopapp.ProductShopResponse": { + "psa.PriceGuideCardPrice": { "properties": { - "product_id": { - "description": "Shop.app ID of the product.", - "example": "4596217053229", + "card_number": { + "description": "CardNumber is the card's number within the set. Empty for\ngroup-summary rows.", "type": "string" }, - "shop": { - "allOf": [ - { - "$ref": "#/definitions/shopapp.ShopDetail" - } - ], - "description": "Shop that sells the product." + "description": { + "description": "Description is the card/row's own name as PSA Price Guide displays\nit, e.g. \"Ken Griffey, Sr. (R)\" or a group-summary row like\n\"Commons 1-660\".", + "type": "string" + }, + "item_id": { + "description": "ItemID is PSA's own numeric item id for this specific card, usable\nfor cross-referencing a psa-price-guide-search result. Nil for\ngroup-summary rows, which have no single-item id.", + "type": "integer" + }, + "prices": { + "additionalProperties": { + "type": "string" + }, + "description": "Prices maps each of Grades (the set's own grade-column labels, e.g.\n\"NM 7\") to PSA's own formatted price text for this card at that\ngrade, e.g. \"35+\" (a trailing \"+\"/\"-\" is PSA's own monthly-trend\nmarker). A grade with no price for this card is omitted from the map\nrather than present as an empty string.", + "type": "object" } }, "type": "object" }, - "shopapp.ProductVariantResponse": { + "psa.PriceGuideCategoriesResponse": { "properties": { - "product_id": { - "description": "Shop.app ID of the product.", - "example": "4596217053229", + "categories": { + "items": { + "$ref": "#/definitions/psa.PriceGuideCategory" + }, + "type": "array" + } + }, + "type": "object" + }, + "psa.PriceGuideCategory": { + "properties": { + "id": { + "description": "ID is PSA's own numeric category id (SportCategoryID), confirmed live\nagainst every category this family covers.", + "type": "integer" + }, + "name": { + "description": "Name is PSA's own display label, e.g. \"Baseball Cards\".", "type": "string" }, - "variant": { - "allOf": [ - { - "$ref": "#/definitions/shopapp.VariantItem" - } - ], - "description": "Variant that matches the selected options." + "path": { + "description": "Path is the URL path segment(s) PSA Price Guide uses for this\ncategory, e.g. \"baseball-card-values\" -- most categories are a single\nsegment, but not all (see notes on the shipped enum values).", + "type": "string" } }, "type": "object" }, - "shopapp.RelatedResponse": { + "psa.PriceGuideSearchItem": { "properties": { - "limit": { - "description": "Maximum number of related products requested.", - "example": 20, + "item_id": { + "description": "ItemID is PSA's own numeric item id.", "type": "integer" }, - "product_id": { - "description": "Shop.app ID of the product the results relate to.", - "example": "4596217053229", + "name": { + "description": "Name is the card/item's own descriptive name, e.g.\n\"Ken Griffey, Sr. (R)\".", + "type": "string" + } + }, + "type": "object" + }, + "psa.PriceGuideSearchResponse": { + "properties": { + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "query": { "type": "string" }, - "products": { - "description": "Products related to the requested product.", + "results": { "items": { - "$ref": "#/definitions/shopapp.ProductItem" + "$ref": "#/definitions/psa.PriceGuideSearchResult" }, "type": "array" + }, + "total_count": { + "type": "integer" } }, "type": "object" }, - "shopapp.ReviewItem": { + "psa.PriceGuideSearchResult": { "properties": { - "author": { - "description": "Name of the reviewer.", - "example": "Donal", + "category_name": { + "description": "CategoryName is PSA's own category display name for this set, e.g.\n\"Baseball Card Values\".", "type": "string" }, - "body": { - "description": "Text of the review.", - "example": "Perfect fit.", + "category_path": { + "description": "CategoryPath is the category's URL path segment -- pass as\ncategory_path to psa-price-guide-set.", "type": "string" }, - "date": { - "description": "Date of the review, either an ISO 8601 timestamp such as `2026-01-01T00:00:00Z` or text such as `December 6, 2025`.", - "example": "December 6, 2025", - "type": "string" + "items": { + "description": "Items are the matching cards/items within this set.", + "items": { + "$ref": "#/definitions/psa.PriceGuideSearchItem" + }, + "type": "array" }, - "helpful_count": { - "description": "Number of shoppers who found the review helpful.", + "set_id": { + "description": "SetID is PSA's own numeric set id -- pass as set_id to\npsa-price-guide-set along with CategoryPath and SetPath.", "type": "integer" }, - "id": { - "description": "Shop.app review ID.", - "type": "string" - }, - "product": { - "allOf": [ - { - "$ref": "#/definitions/shopapp.ReviewProduct" - } - ], - "description": "Product the review is for." - }, - "rating": { - "description": "Rating the reviewer gave.", - "example": 5, - "type": "number" - }, - "title": { - "description": "Headline of the review.", + "set_name": { + "description": "SetName is the set's display name, e.g. \"1974 Topps\".", "type": "string" }, - "variant_label": { - "description": "Label of the product variant that was reviewed, for example `Black / 12.5 / 4E`.", - "example": "Black / 12.5 / 4E", + "set_path": { + "description": "SetPath is the set's own URL path segment -- pass as set_path to\npsa-price-guide-set.", "type": "string" } }, "type": "object" }, - "shopapp.ReviewProduct": { + "psa.PriceGuideSetResponse": { "properties": { - "id": { - "description": "Shop.app ID of the reviewed product.", - "example": "8114373328975", - "type": "string" + "cards": { + "description": "Cards is every row of the set's price table, in PSA's own display\norder.", + "items": { + "$ref": "#/definitions/psa.PriceGuideCardPrice" + }, + "type": "array" }, - "image": { - "description": "URL of the product image.", - "type": "string" + "grades": { + "description": "Grades are this set's own grade-column labels, in the order PSA\nitself displays them (e.g. [\"NM 7\",\"NM-MT 8\",\"MT 9\",\"GEM-MT 10\"]).\nConfirmed live that this varies by set -- a vintage set may carry\nmore/lower grade columns than a modern one -- so it is returned per\nresponse rather than assumed fixed.", + "items": { + "type": "string" + }, + "type": "array" }, - "image_alt": { - "description": "Alt text of the product image.", + "set_id": { "type": "string" }, - "slug": { - "description": "URL slug of the reviewed product.", - "example": "solana-brown-woven-leather-backstrap-clogs", + "source_url": { "type": "string" }, "title": { - "description": "Title of the reviewed product.", - "example": "Solana Brown Woven Leather Backstrap Clogs", - "type": "string" - }, - "url": { - "description": "Shop.app page URL of the reviewed product.", - "type": "string" - }, - "variant": { - "description": "Variant of the product that was reviewed, for example `7 / Brown Woven / Leather`.", - "example": "7 / Brown Woven / Leather", + "description": "Title is the set's display name, e.g. \"1974 Topps\".", "type": "string" } }, "type": "object" }, - "shopapp.ReviewsResponse": { + "psa.PriceGuideSetSummary": { "properties": { - "limit": { - "description": "Maximum number of reviews requested.", - "example": 20, + "category_name": { + "description": "CategoryName is the category's display name from\npsa-price-guide-categories, e.g. \"Baseball Cards\".", + "type": "string" + }, + "category_path": { + "description": "CategoryPath is the set URL's category segment -- pass as category_path\nto psa-price-guide-set.", + "type": "string" + }, + "set_id": { + "description": "SetID is PSA's own numeric set id.", "type": "integer" }, - "product_id": { - "description": "Shop.app ID of the reviewed product.", - "example": "4596217053229", + "set_name": { + "description": "SetName is the set's display name as PSA's category page shows it,\ne.g. \"1974 Topps\".", "type": "string" }, - "reviews": { - "description": "Shopper reviews of the product.", - "items": { - "$ref": "#/definitions/shopapp.ReviewItem" - }, - "type": "array" + "set_path": { + "description": "SetPath is the set URL's own slug -- pass as set_path to\npsa-price-guide-set.", + "type": "string" } }, "type": "object" }, - "shopapp.SearchGroup": { + "psa.PriceGuideSetsResponse": { "properties": { - "product_ids": { - "description": "IDs of the products in the group.", - "items": { - "type": "string" - }, - "type": "array" + "category_path": { + "description": "CategoryPath echoes the category filter; empty when every category was\nsearched.", + "type": "string" }, - "products_seen": { - "description": "Number of products seen in the group.", - "example": 4, + "page": { + "type": "integer" + }, + "page_size": { "type": "integer" }, "query": { - "description": "Search query that defines the group.", - "example": "men's running sneakers", "type": "string" }, - "title": { - "description": "Group heading, for example `men's running sneakers`.", - "example": "men's running sneakers", - "type": "string" - } - }, - "type": "object" - }, - "shopapp.SearchResponse": { - "properties": { - "groups": { - "description": "Groups of related products. Returned only when Shop.app supplies them.", + "sets": { "items": { - "$ref": "#/definitions/shopapp.SearchGroup" + "$ref": "#/definitions/psa.PriceGuideSetSummary" }, "type": "array" }, - "limit": { - "description": "Maximum number of products requested.", - "example": 20, + "total_count": { + "description": "TotalCount is every matching set across all pages.", "type": "integer" }, - "products": { - "description": "Products matching the query, in Shop.app ranking order.", + "unavailable_categories": { + "description": "UnavailableCategories lists categories whose set list could not be\nloaded and had no earlier copy to fall back on. When present, Sets and\nTotalCount cover the other categories only.", "items": { - "$ref": "#/definitions/shopapp.ProductItem" + "type": "string" }, "type": "array" - }, - "query": { - "description": "Search query that was run.", - "example": "sneakers", - "type": "string" } }, "type": "object" }, - "shopapp.ShopCollection": { + "psa.ProBatFactsCategoriesResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/psa.ProBatFactsCategory" + }, + "type": "array" + } + }, + "type": "object" + }, + "psa.ProBatFactsCategory": { "properties": { "id": { - "description": "Shop.app collection ID.", - "example": "292518002767", - "type": "string" + "description": "ID is PSA's own numeric category id, confirmed live against every\ncategory this family covers. Distinct from CardFacts'/Price Guide's/\nAutographFacts'/TicketFacts' own category id spaces -- do not assume\nthey share values.", + "type": "integer" }, - "slug": { - "description": "URL slug of the collection.", - "example": "mens-dress-shoes", + "name": { + "description": "Name is PSA's own display label, e.g. \"Hall of Fame Players\".", "type": "string" - }, - "title": { - "description": "Collection title, for example `Mens Dress Shoes`.", - "example": "Mens Dress Shoes", + } + }, + "type": "object" + }, + "psa.ProBatFactsGalleryImage": { + "properties": { + "caption": { "type": "string" }, - "url": { - "description": "Shop.app page URL of the collection.", + "image_url": { "type": "string" } }, "type": "object" }, - "shopapp.ShopDetail": { + "psa.ProBatFactsGalleryResult": { "properties": { - "banner": { - "description": "URL of the shop's banner image.", - "type": "string" - }, - "collections": { - "description": "Collections found on the shop's page.", + "images": { "items": { - "$ref": "#/definitions/shopapp.ShopCollection" + "$ref": "#/definitions/psa.ProBatFactsGalleryImage" }, "type": "array" }, - "description": { - "description": "Description of the shop.", - "type": "string" - }, - "handle": { - "description": "Shop.app handle of the shop, as used in its page URL.", - "example": "marcnolan", + "name": { "type": "string" }, - "id": { - "description": "Shop.app shop ID.", - "example": "186720", + "source_url": { "type": "string" }, - "logo": { - "description": "URL of the shop's logo.", + "subject_id": { "type": "string" - }, + } + }, + "type": "object" + }, + "psa.ProBatFactsSubject": { + "properties": { "name": { - "description": "Name of the shop.", - "example": "Marc Nolan", + "description": "Name is the player's display name, e.g. \"Hank Aaron\".", "type": "string" }, - "rating": { - "description": "Average shopper rating of the shop.", - "example": 4.7, - "type": "number" - }, - "reviews_count": { - "description": "Number of shopper ratings or reviews of the shop.", - "example": 19699, + "subject_id": { + "description": "SubjectID is PSA's own numeric subject id -- pass as subject_id to\nProBatFactsSubject.", "type": "integer" + } + }, + "type": "object" + }, + "psa.ProBatFactsSubjectResult": { + "properties": { + "bat_profile": { + "description": "BatProfile is PSA's own free-text bat-authentication writeup\n(models used, signature placement, etc.) for this player.", + "type": "string" }, - "shopify_id": { - "description": "Shopify ID of the shop.", + "name": { + "description": "Name is the player's display name, e.g. \"Hank Aaron\".", "type": "string" }, - "storefront": { - "description": "URL of the shop's own website.", + "player_profile": { + "description": "PlayerProfile is PSA's own free-text player-biography writeup.", "type": "string" }, - "url": { - "description": "Shop.app page URL of the shop.", + "source_url": { "type": "string" }, - "uuid": { - "description": "UUID of the shop.", + "subject_id": { "type": "string" } }, "type": "object" }, - "shopapp.ShopLocationItem": { + "psa.ProBatFactsSubjectsResponse": { "properties": { - "address": { - "allOf": [ - { - "$ref": "#/definitions/shopapp.LocationAddress" - } - ], - "description": "Street address of the location." + "category_id": { + "type": "integer" }, - "id": { - "description": "Shopify location ID, for example `gid://shopify/Location/78620459087`.", - "example": "gid://shopify/Location/78620459087", + "category_name": { "type": "string" }, - "latitude": { - "description": "Latitude of the location, in degrees.", - "example": 40.7205232, - "type": "number" - }, - "longitude": { - "description": "Longitude of the location, in degrees.", - "example": -73.9961032, - "type": "number" + "subjects": { + "items": { + "$ref": "#/definitions/psa.ProBatFactsSubject" + }, + "type": "array" + } + }, + "type": "object" + }, + "psa.TicketFactsCategoriesResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/psa.TicketFactsCategory" + }, + "type": "array" + } + }, + "type": "object" + }, + "psa.TicketFactsCategory": { + "properties": { + "id": { + "description": "ID is PSA's own numeric category id, confirmed live against every\ncategory this family covers. Distinct from CardFacts'/Price Guide's/\nAutographFacts' own category id spaces -- do not assume they share\nvalues.", + "type": "integer" }, "name": { - "description": "Name of the location, for example `NYC`.", - "example": "NYC", + "description": "Name is PSA's own display label, e.g. \"Super Bowl\".", "type": "string" } }, "type": "object" }, - "shopapp.ShopLocationsResponse": { + "psa.TicketFactsGalleryImage": { "properties": { - "limit": { - "description": "Maximum number of locations requested.", - "example": 10, - "type": "integer" + "caption": { + "type": "string" }, - "locations": { - "description": "Retail locations of the shop.", + "image_url": { + "type": "string" + } + }, + "type": "object" + }, + "psa.TicketFactsGalleryResult": { + "properties": { + "images": { "items": { - "$ref": "#/definitions/shopapp.ShopLocationItem" + "$ref": "#/definitions/psa.TicketFactsGalleryImage" }, "type": "array" }, - "next_cursor": { - "description": "Cursor Shop.app returns for the next page of locations.", + "name": { "type": "string" }, - "shop_handle": { - "description": "Shop.app handle of the shop.", - "example": "marcnolan", + "source_url": { "type": "string" }, - "shop_id": { - "description": "Shop.app ID of the shop.", - "example": "186720", + "subject_id": { + "type": "string" + } + }, + "type": "object" + }, + "psa.TicketFactsSubject": { + "properties": { + "name": { + "description": "Name is the event's display name, e.g. \"Super Bowl I\".", "type": "string" }, - "total_count": { - "description": "Total number of locations the shop has.", - "example": 2, + "subject_id": { + "description": "SubjectID is PSA's own numeric subject id -- pass as subject_id to\nTicketFactsSubject.", "type": "integer" } }, "type": "object" }, - "shopapp.ShopProductsResponse": { + "psa.TicketFactsSubjectResult": { "properties": { - "collection": { - "allOf": [ - { - "$ref": "#/definitions/shopapp.ShopCollection" - } - ], - "description": "Collection the products were filtered by." - }, - "collection_id": { - "description": "ID of the collection the products were filtered by.", - "example": "292518002767", + "name": { + "description": "Name is the event's display name, e.g. \"Super Bowl I\".", "type": "string" }, - "limit": { - "description": "Maximum number of products requested.", - "example": 30, - "type": "integer" - }, - "next_cursor": { - "description": "Cursor Shop.app returns for the next page of products.", + "source_url": { "type": "string" }, - "products": { - "description": "Products of the shop.", - "items": { - "$ref": "#/definitions/shopapp.ProductItem" - }, - "type": "array" - }, - "shop_handle": { - "description": "Shop.app handle of the shop.", - "example": "marcnolan", + "subject_id": { "type": "string" }, - "sort_by": { - "description": "Sort order applied: `MOST_SALES`, `PRICE_LOW_TO_HIGH`, `PRICE_HIGH_TO_LOW` or `RELEVANCE`.", - "example": "MOST_SALES", + "ticket_profile": { + "description": "TicketProfile is PSA's own free-text historical writeup for this\nevent.", "type": "string" } }, "type": "object" }, - "shopapp.ShopResponse": { - "properties": { - "shop": { - "allOf": [ - { - "$ref": "#/definitions/shopapp.ShopDetail" - } - ], - "description": "Details of the shop." - } - }, - "type": "object" - }, - "shopapp.ShopReviewsResponse": { + "psa.TicketFactsSubjectsResponse": { "properties": { - "limit": { - "description": "Maximum number of reviews requested.", - "example": 20, + "category_id": { "type": "integer" }, - "next_cursor": { - "description": "Cursor Shop.app returns for the next page of reviews.", + "category_name": { "type": "string" }, - "reviews": { - "description": "Shopper reviews of the shop.", + "subjects": { "items": { - "$ref": "#/definitions/shopapp.ReviewItem" + "$ref": "#/definitions/psa.TicketFactsSubject" }, "type": "array" - }, - "shop_handle": { - "description": "Shop.app handle of the shop.", - "example": "marcnolan", - "type": "string" - }, - "shop_id": { - "description": "Shop.app ID of the shop.", - "example": "186720", - "type": "string" - }, - "total_count": { - "description": "Total number of reviews the shop has.", - "example": 15015, - "type": "integer" } }, "type": "object" }, - "shopapp.ShopSummary": { + "psa.autographFactsCategoriesResponseDoc": { "properties": { - "count": { - "description": "Number of sampled products from this shop.", - "example": 4, + "code": { + "example": 200, "type": "integer" }, - "shop_id": { - "description": "Shop.app ID of the shop.", - "example": "3961166", - "type": "string" + "data": { + "$ref": "#/definitions/psa.AutographFactsCategoriesResponse" }, - "shop_name": { - "description": "Name of the shop.", - "example": "Start Fitness", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "shopapp.ShopTypeaheadItem": { + "psa.autographFactsGalleryResponseDoc": { "properties": { - "collection": { - "allOf": [ - { - "$ref": "#/definitions/shopapp.ShopCollection" - } - ], - "description": "Suggested collection. Set when `type` is `collection`." - }, - "id": { - "description": "ID of the suggested product, collection or term.", - "example": "7438827651151", - "type": "string" - }, - "position": { - "description": "Position of the suggestion in the list, starting at 1.", - "example": 1, + "code": { + "example": 200, "type": "integer" }, - "product": { - "allOf": [ - { - "$ref": "#/definitions/shopapp.ProductItem" - } - ], - "description": "Suggested product. Set when `type` is `product`." - }, - "text": { - "description": "Text of the suggestion, such as a term or product title.", - "example": "loafer", - "type": "string" - }, - "type": { - "description": "Kind of suggestion: `product`, `collection` or `term`.", - "example": "product", - "type": "string" + "data": { + "$ref": "#/definitions/psa.AutographFactsGalleryResult" }, - "url": { - "description": "Shop.app URL of the suggested product or collection.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "shopapp.ShopTypeaheadResponse": { + "psa.autographFactsSubjectResponseDoc": { "properties": { - "limit": { - "description": "Maximum number of suggestions requested.", - "example": 20, + "code": { + "example": 200, "type": "integer" }, - "query": { - "description": "Text that was searched for within the shop.", - "example": "loafer", - "type": "string" - }, - "shop_handle": { - "description": "Shop.app handle of the shop.", - "example": "marcnolan", - "type": "string" + "data": { + "$ref": "#/definitions/psa.AutographFactsSubjectResult" }, - "shop_id": { - "description": "Shop.app ID of the shop.", - "example": "186720", + "msg": { + "example": "OK", "type": "string" - }, - "suggestions": { - "description": "Typeahead suggestions from the shop.", - "items": { - "$ref": "#/definitions/shopapp.ShopTypeaheadItem" - }, - "type": "array" } }, "type": "object" }, - "shopapp.SuggestResponse": { + "psa.autographFactsSubjectsResponseDoc": { "properties": { - "limit": { - "description": "Maximum number of suggestions requested.", - "example": 10, + "code": { + "example": 200, "type": "integer" }, - "query": { - "description": "Partial search text that suggestions were requested for.", - "example": "sneakers", - "type": "string" - }, - "suggestions": { - "description": "Search suggestions returned for the text.", - "items": { - "$ref": "#/definitions/shopapp.SuggestionItem" - }, - "type": "array" - } - }, - "type": "object" - }, - "shopapp.SuggestionItem": { - "properties": { - "image": { - "description": "URL of the shop logo. Set for `shop` suggestions.", - "type": "string" - }, - "rating": { - "description": "Average shopper rating of the shop. Set for `shop` suggestions.", - "example": 4.79, - "type": "number" - }, - "shop_handle": { - "description": "Shop.app handle of the shop. Set for `shop` suggestions.", - "example": "gr21z45he0", - "type": "string" - }, - "shop_id": { - "description": "Shop.app ID of the shop. Set for `shop` suggestions.", - "example": "365323", - "type": "string" - }, - "shop_name": { - "description": "Name of the shop. Set for `shop` suggestions.", - "example": "Sneakers Plus", - "type": "string" - }, - "text": { - "description": "Suggested search text or shop name.", - "example": "sneakers", - "type": "string" - }, - "type": { - "description": "Kind of suggestion: `query` or `shop`.", - "example": "query", - "type": "string" - }, - "url": { - "description": "Shop.app URL of the search results or shop page for the suggestion.", - "example": "https://shop.app/search/results?query=sneakers", - "type": "string" - } - }, - "type": "object" - }, - "shopapp.VariantItem": { - "properties": { - "available_for_sale": { - "description": "`true` when the variant can be bought.", - "type": "boolean" - }, - "currency": { - "description": "Currency code of `price` and `original_price`.", - "type": "string" - }, - "gid": { - "description": "Shopify global ID of the variant.", - "example": "gid://shopify/ProductVariant/34761278160941", - "type": "string" - }, - "id": { - "description": "Shop.app variant ID.", - "example": "34761278160941", - "type": "string" - }, - "image": { - "allOf": [ - { - "$ref": "#/definitions/shopapp.ImageItem" - } - ], - "description": "Image of the variant." - }, - "options": { - "additionalProperties": { - "type": "string" - }, - "description": "Option values of the variant keyed by option name, for example `Size`.", - "type": "object" - }, - "original_price": { - "description": "Price before the discount, in `currency`.", - "type": "number" - }, - "price": { - "description": "Current price of the variant, in `currency`.", - "type": "number" - }, - "requires_shipping": { - "description": "`true` when the variant has to be shipped.", - "type": "boolean" + "data": { + "$ref": "#/definitions/psa.AutographFactsSubjectsResponse" }, - "title": { - "description": "Variant title, for example `Black / 7 / 6E`.", - "example": "Black / 7 / 6E", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "shopapp.VariantsResponse": { + "psa.cardFactsCategoriesResponseDoc": { "properties": { - "limit": { - "description": "Maximum number of variants requested.", - "example": 50, + "code": { + "example": 200, "type": "integer" }, - "product_id": { - "description": "Shop.app ID of the product.", - "example": "4596217053229", - "type": "string" + "data": { + "$ref": "#/definitions/psa.CardFactsCategoriesResponse" }, - "variants": { - "description": "Variants of the product.", - "items": { - "$ref": "#/definitions/shopapp.VariantItem" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "shopapp.analysisResponseDoc": { + "psa.cardFactsChecklistResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopapp.AnalysisResponse" + "$ref": "#/definitions/psa.CardFactsChecklistResponse" }, "msg": { "example": "OK", @@ -193626,14 +202155,14 @@ }, "type": "object" }, - "shopapp.categoriesResponseDoc": { + "psa.cardFactsSetsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopapp.CategoriesResponse" + "$ref": "#/definitions/psa.CardFactsSetsResponse" }, "msg": { "example": "OK", @@ -193642,14 +202171,14 @@ }, "type": "object" }, - "shopapp.productResponseDoc": { + "psa.certLookupResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopapp.ProductDetailResponse" + "$ref": "#/definitions/psa.CertLookupResult" }, "msg": { "example": "OK", @@ -193658,14 +202187,14 @@ }, "type": "object" }, - "shopapp.productShopResponseDoc": { + "psa.priceGuideCategoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopapp.ProductShopResponse" + "$ref": "#/definitions/psa.PriceGuideCategoriesResponse" }, "msg": { "example": "OK", @@ -193674,14 +202203,14 @@ }, "type": "object" }, - "shopapp.productVariantResponseDoc": { + "psa.priceGuideSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopapp.ProductVariantResponse" + "$ref": "#/definitions/psa.PriceGuideSearchResponse" }, "msg": { "example": "OK", @@ -193690,14 +202219,14 @@ }, "type": "object" }, - "shopapp.relatedResponseDoc": { + "psa.priceGuideSetResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopapp.RelatedResponse" + "$ref": "#/definitions/psa.PriceGuideSetResponse" }, "msg": { "example": "OK", @@ -193706,14 +202235,14 @@ }, "type": "object" }, - "shopapp.reviewsResponseDoc": { + "psa.priceGuideSetsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopapp.ReviewsResponse" + "$ref": "#/definitions/psa.PriceGuideSetsResponse" }, "msg": { "example": "OK", @@ -193722,14 +202251,14 @@ }, "type": "object" }, - "shopapp.searchResponseDoc": { + "psa.probatFactsCategoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopapp.SearchResponse" + "$ref": "#/definitions/psa.ProBatFactsCategoriesResponse" }, "msg": { "example": "OK", @@ -193738,14 +202267,14 @@ }, "type": "object" }, - "shopapp.shopLocationsResponseDoc": { + "psa.probatFactsGalleryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopapp.ShopLocationsResponse" + "$ref": "#/definitions/psa.ProBatFactsGalleryResult" }, "msg": { "example": "OK", @@ -193754,14 +202283,14 @@ }, "type": "object" }, - "shopapp.shopProductsResponseDoc": { + "psa.probatFactsSubjectResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopapp.ShopProductsResponse" + "$ref": "#/definitions/psa.ProBatFactsSubjectResult" }, "msg": { "example": "OK", @@ -193770,14 +202299,14 @@ }, "type": "object" }, - "shopapp.shopResponseDoc": { + "psa.probatFactsSubjectsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopapp.ShopResponse" + "$ref": "#/definitions/psa.ProBatFactsSubjectsResponse" }, "msg": { "example": "OK", @@ -193786,14 +202315,14 @@ }, "type": "object" }, - "shopapp.shopReviewsResponseDoc": { + "psa.ticketFactsCategoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopapp.ShopReviewsResponse" + "$ref": "#/definitions/psa.TicketFactsCategoriesResponse" }, "msg": { "example": "OK", @@ -193802,14 +202331,14 @@ }, "type": "object" }, - "shopapp.shopTypeaheadResponseDoc": { + "psa.ticketFactsGalleryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopapp.ShopTypeaheadResponse" + "$ref": "#/definitions/psa.TicketFactsGalleryResult" }, "msg": { "example": "OK", @@ -193818,14 +202347,14 @@ }, "type": "object" }, - "shopapp.suggestionsResponseDoc": { + "psa.ticketFactsSubjectResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopapp.SuggestResponse" + "$ref": "#/definitions/psa.TicketFactsSubjectResult" }, "msg": { "example": "OK", @@ -193834,14 +202363,14 @@ }, "type": "object" }, - "shopapp.variantsResponseDoc": { + "psa.ticketFactsSubjectsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/shopapp.VariantsResponse" + "$ref": "#/definitions/psa.TicketFactsSubjectsResponse" }, "msg": { "example": "OK", @@ -193850,4827 +202379,2869 @@ }, "type": "object" }, - "shopee.Banner": { + "publicnews.abcNewsAuthorResponseDoc": { "properties": { - "banner_id": { - "example": 265864, - "type": "integer" - }, - "campaign_unit_id": { - "type": "integer" - }, - "end_time": { - "type": "integer" - }, - "image": { - "type": "string" - }, - "slot_id": { - "type": "integer" - }, - "start_time": { - "type": "integer" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/abcnews.AuthorResponse" } }, "type": "object" }, - "shopee.BannersResponse": { + "publicnews.abcauAuthorResponseDoc": { "properties": { - "banners": { - "items": { - "$ref": "#/definitions/shopee.Banner" - }, - "type": "array" - }, - "ratio": { - "example": 3.3333333, - "type": "number" - }, - "region": { - "example": "my", - "type": "string" - }, - "slot": { - "example": "HOME_CAROUSEL_01", - "type": "string" - }, - "space_key": { - "example": "PC-MY-HOME_CAROUSEL_01", - "type": "string" + "data": { + "$ref": "#/definitions/abcau.AuthorResponse" } }, "type": "object" }, - "shopee.CategoriesResponse": { + "publicnews.androidpoliceAuthorResponseDoc": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/shopee.CategoryNode" - }, - "type": "array" - }, - "region": { - "example": "my", - "type": "string" - }, - "total_roots": { - "example": 25, - "type": "integer" + "data": { + "$ref": "#/definitions/androidpolice.AuthorResponse" } }, "type": "object" }, - "shopee.CategoryDetail": { + "publicnews.apNewsAuthorResponseDoc": { "properties": { - "category_id": { - "example": 11000979, - "type": "integer" - }, - "display_names": { - "items": { - "$ref": "#/definitions/shopee.LocalizedName" - }, - "type": "array" - }, - "image": { - "type": "string" - }, - "level": { - "type": "integer" - }, - "name": { - "example": "Mobile & Accessories", - "type": "string" - }, - "parent_category_ids": { - "items": { - "type": "integer" - }, - "type": "array" + "data": { + "$ref": "#/definitions/apnews.AuthorResponse" } }, "type": "object" }, - "shopee.CategoryDetailResponse": { + "publicnews.arstechnicaAuthorResponseDoc": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/shopee.CategoryDetail" - }, - "type": "array" - }, - "catids": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "region": { - "example": "my", - "type": "string" + "data": { + "$ref": "#/definitions/arstechnica.AuthorResponse" } }, "type": "object" }, - "shopee.CategoryNode": { + "publicnews.articleResponseDoc": { "properties": { - "category_id": { - "example": 11000979, - "type": "integer" - }, - "children": { - "items": { - "$ref": "#/definitions/shopee.CategoryNode" - }, - "type": "array" - }, - "display_name": { - "example": "Mobile & Accessories", - "type": "string" - }, - "image": { - "type": "string" - }, - "level": { - "example": 1, - "type": "integer" - }, - "name": { - "example": "Mobile & Accessories", - "type": "string" - }, - "parent_category_id": { - "type": "integer" + "data": { + "$ref": "#/definitions/newsplatform.ArticleResponse" } }, "type": "object" }, - "shopee.FlashSaleItem": { + "publicnews.benzingaSearchResponseDoc": { "properties": { - "category_ids": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "discount": { - "example": "31%", - "type": "string" - }, - "end_time": { - "type": "integer" - }, - "flash_sale_stock": { - "type": "integer" - }, - "historical_sold": { - "example": 28759, - "type": "integer" - }, - "image": { - "type": "string" - }, - "item_id": { - "example": 18893260244, - "type": "integer" - }, - "name": { - "type": "string" - }, - "official_shop": { - "type": "boolean" - }, - "price": { - "example": 188.1, - "type": "number" - }, - "price_before_discount": { - "example": 272.32, - "type": "number" - }, - "promo_name": { - "type": "string" - }, - "rating": { - "example": 4.73, - "type": "number" - }, - "rating_count": { - "example": 11806, - "type": "integer" - }, - "shop_id": { - "example": 1002453997, - "type": "integer" - }, - "shopee_choice": { - "type": "boolean" - }, - "start_time": { - "type": "integer" - }, - "stock": { - "example": 513, - "type": "integer" - }, - "tags": { - "items": { - "type": "string" + "data": { + "properties": { + "items": { + "items": { + "properties": { + "author": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "tickers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "query": { + "type": "string" + } }, - "type": "array" - }, - "url": { - "type": "string" + "type": "object" } }, "type": "object" }, - "shopee.FlashSaleResponse": { + "publicnews.billboardAuthorResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/shopee.FlashSaleItem" - }, - "type": "array" - }, - "limit": { - "example": 20, - "type": "integer" - }, - "offset": { - "example": 0, - "type": "integer" - }, - "region": { - "example": "my", - "type": "string" - }, - "session": { - "$ref": "#/definitions/shopee.FlashSaleSession" + "data": { + "$ref": "#/definitions/billboard.AuthorResponse" } }, "type": "object" }, - "shopee.FlashSaleSession": { + "publicnews.bleacherreportAuthorResponseDoc": { "properties": { - "end_time": { - "type": "integer" - }, - "promotion_id": { - "type": "integer" - }, - "start_time": { - "type": "integer" - }, - "status": { - "type": "integer" + "data": { + "$ref": "#/definitions/bleacherreport.AuthorResponse" } }, "type": "object" }, - "shopee.FooterBlock": { + "publicnews.breitbartAuthorResponseDoc": { "properties": { - "sections": { - "items": { - "$ref": "#/definitions/shopee.FooterSection" - }, - "type": "array" + "data": { + "$ref": "#/definitions/breitbart.AuthorResponse" } }, "type": "object" }, - "shopee.FooterLink": { + "publicnews.brisbanetimesArticleResponseDoc": { "properties": { - "text": { - "example": "Help Centre", - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/brisbanetimes.ArticleResponse" } }, "type": "object" }, - "shopee.FooterMedia": { + "publicnews.brisbanetimesAuthorResponseDoc": { "properties": { - "image": { - "type": "string" - }, - "text": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/brisbanetimes.AuthorResponse" } }, "type": "object" }, - "shopee.FooterQR": { + "publicnews.businessInsiderAuthorResponseDoc": { "properties": { - "extra_images": { - "items": { - "$ref": "#/definitions/shopee.FooterMedia" - }, - "type": "array" - }, - "image": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/businessinsider.AuthorResponse" } }, "type": "object" }, - "shopee.FooterResponse": { + "publicnews.businessstandardAuthorResponseDoc": { "properties": { - "blocks": { - "items": { - "$ref": "#/definitions/shopee.FooterBlock" - }, - "type": "array" - }, - "layout_id": { - "example": 1, - "type": "integer" - }, - "layout_name": { - "example": "Default Layout", - "type": "string" - }, - "mobile_blocks": { - "items": { - "$ref": "#/definitions/shopee.FooterBlock" - }, - "type": "array" - }, - "region": { - "example": "my", - "type": "string" + "data": { + "$ref": "#/definitions/businessstandard.AuthorResponse" } }, "type": "object" }, - "shopee.FooterSection": { + "publicnews.cbcAuthorResponseDoc": { "properties": { - "images": { - "items": { - "$ref": "#/definitions/shopee.FooterMedia" - }, - "type": "array" - }, - "links": { - "items": { - "$ref": "#/definitions/shopee.FooterLink" - }, - "type": "array" - }, - "qr": { - "$ref": "#/definitions/shopee.FooterQR" - }, - "simple": { - "$ref": "#/definitions/shopee.FooterSimple" - }, - "social_media": { - "items": { - "$ref": "#/definitions/shopee.FooterMedia" - }, - "type": "array" - }, - "title": { - "example": "CUSTOMER SERVICE", - "type": "string" - }, - "type": { - "type": "integer" + "data": { + "$ref": "#/definitions/cbc.AuthorResponse" } }, "type": "object" }, - "shopee.FooterSimple": { + "publicnews.cbrAuthorResponseDoc": { "properties": { - "image": { - "type": "string" - }, - "text": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/cbr.AuthorResponse" } }, "type": "object" }, - "shopee.HomeBanner": { + "publicnews.cbsNewsAuthorResponseDoc": { "properties": { - "image": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/cbsnews.AuthorResponse" } }, "type": "object" }, - "shopee.HomeCampaign": { + "publicnews.cbsSportsAuthorResponseDoc": { "properties": { - "image": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/cbssports.AuthorResponse" } }, "type": "object" }, - "shopee.HomeCategoriesResponse": { + "publicnews.chicagoTribuneAuthorResponseDoc": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/shopee.HomeCategory" - }, - "type": "array" - }, - "region": { - "example": "my", - "type": "string" - }, - "total": { - "example": 25, - "type": "integer" + "data": { + "$ref": "#/definitions/chicagotribune.AuthorResponse" } }, "type": "object" }, - "shopee.HomeCategory": { + "publicnews.cnaAuthorResponseDoc": { "properties": { - "category_id": { - "example": 11000979, - "type": "integer" - }, - "display_name": { - "type": "string" - }, - "image": { - "type": "string" - }, - "level": { - "example": 1, - "type": "integer" - }, - "name": { - "example": "Mobile & Accessories", - "type": "string" - }, - "parent_category_id": { - "type": "integer" + "data": { + "$ref": "#/definitions/cna.AuthorResponse" } }, "type": "object" }, - "shopee.HomeLiveSession": { + "publicnews.cnetAuthorResponseDoc": { "properties": { - "cover": { - "type": "string" - }, - "session_id": { - "type": "integer" - }, - "shop_id": { - "type": "integer" - }, - "title": { - "type": "string" - }, - "view_count": { - "type": "integer" + "data": { + "$ref": "#/definitions/cnet.AuthorResponse" } }, "type": "object" }, - "shopee.HomeResponse": { + "publicnews.colliderAuthorResponseDoc": { "properties": { - "banners": { - "items": { - "$ref": "#/definitions/shopee.HomeBanner" - }, - "type": "array" - }, - "campaigns": { - "items": { - "$ref": "#/definitions/shopee.HomeCampaign" - }, - "type": "array" - }, - "components": { - "items": { - "type": "string" - }, - "type": "array" - }, - "flash_sale": { - "items": { - "$ref": "#/definitions/shopee.FlashSaleItem" - }, - "type": "array" - }, - "live_sessions": { - "items": { - "$ref": "#/definitions/shopee.HomeLiveSession" - }, - "type": "array" - }, - "prefills": { - "items": { - "type": "string" - }, - "type": "array" - }, - "region": { - "example": "my", - "type": "string" - }, - "squares": { - "items": { - "$ref": "#/definitions/shopee.HomeSquare" - }, - "type": "array" + "data": { + "$ref": "#/definitions/collider.AuthorResponse" } }, "type": "object" }, - "shopee.HomeSquare": { + "publicnews.ctvnewsAuthorResponseDoc": { "properties": { - "image": { - "type": "string" - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/ctvnews.AuthorResponse" } }, "type": "object" }, - "shopee.LocalizedName": { + "publicnews.dailyBeastAuthorResponseDoc": { "properties": { - "is_default": { - "type": "boolean" - }, - "lang": { - "example": "en", - "type": "string" - }, - "value": { - "example": "Mobile & Accessories", - "type": "string" + "data": { + "$ref": "#/definitions/thedailybeast.AuthorResponse" } }, "type": "object" }, - "shopee.LocationFiltersResponse": { + "publicnews.dailyExpressAuthorResponseDoc": { "properties": { - "groups": { - "items": { - "$ref": "#/definitions/shopee.LocationGroup" - }, - "type": "array" - }, - "region": { - "example": "my", - "type": "string" + "data": { + "$ref": "#/definitions/dailyexpress.AuthorResponse" } }, "type": "object" }, - "shopee.LocationGroup": { + "publicnews.dailyMailAuthorResponseDoc": { "properties": { - "group": { - "example": "E", - "type": "string" - }, - "group_name": { - "type": "string" - }, - "location_tag_ids": { - "items": { - "type": "string" - }, - "type": "array" - }, - "locations": { - "items": { - "type": "string" - }, - "type": "array" - }, - "translated_group": { - "type": "string" - }, - "translated_locations": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/dailymail.AuthorResponse" } }, "type": "object" }, - "shopee.MallCategoriesResponse": { + "publicnews.dailyRecordAuthorResponseDoc": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/shopee.MallCategory" - }, - "type": "array" - }, - "region": { - "example": "my", - "type": "string" - }, - "total": { - "example": 24, - "type": "integer" + "data": { + "$ref": "#/definitions/dailyrecord.AuthorResponse" } }, "type": "object" }, - "shopee.MallCategory": { + "publicnews.dailyWireAuthorResponseDoc": { "properties": { - "category_id": { - "example": 11000616, - "type": "integer" - }, - "image": { - "type": "string" - }, - "name": { - "example": "Muslim Fashion", - "type": "string" + "data": { + "$ref": "#/definitions/dailywire.AuthorResponse" } }, "type": "object" }, - "shopee.MallShop": { + "publicnews.dailycallerAuthorResponseDoc": { "properties": { - "brand_name": { - "type": "string" - }, - "ctime": { - "type": "integer" - }, - "logo": { - "type": "string" - }, - "logo_pc": { - "type": "string" - }, - "name": { - "example": "ANTA Official Store", - "type": "string" - }, - "redirect_url": { - "type": "string" - }, - "shop_id": { - "example": 236986575, - "type": "integer" - }, - "shop_type": { - "type": "integer" - }, - "user_id": { - "type": "integer" - }, - "username": { - "example": "antamalaysia.os", - "type": "string" + "data": { + "$ref": "#/definitions/dailycaller.AuthorResponse" } }, "type": "object" }, - "shopee.PrefillItem": { + "publicnews.dawnAuthorResponseDoc": { "properties": { - "hint": { - "example": "Sign Up & Get Your First Order Free!", - "type": "string" - }, - "image": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/dawn.AuthorResponse" } }, "type": "object" }, - "shopee.PrefillsResponse": { + "publicnews.deadlineAuthorResponseDoc": { "properties": { - "prefills": { - "items": { - "$ref": "#/definitions/shopee.PrefillItem" - }, - "type": "array" - }, - "region": { - "example": "my", - "type": "string" + "data": { + "$ref": "#/definitions/deadline.AuthorResponse" } }, "type": "object" }, - "shopee.SearchFilterGroup": { + "publicnews.denverPostAuthorResponseDoc": { "properties": { - "display_name": { - "example": "Brand", - "type": "string" - }, - "dynamic": { - "type": "boolean" - }, - "name": { - "example": "BRANDS", - "type": "string" - }, - "options": { - "items": { - "$ref": "#/definitions/shopee.SearchFilterOption" - }, - "type": "array" - }, - "ui_type": { - "example": 1, - "type": "integer" + "data": { + "$ref": "#/definitions/denverpost.AuthorResponse" } }, "type": "object" }, - "shopee.SearchFilterOption": { + "publicnews.dwAuthorResponseDoc": { "properties": { - "display_name": { - "example": "Wireless Earbuds", - "type": "string" - }, - "name": { - "example": "Wireless Earbuds", - "type": "string" - }, - "value": { - "example": "11000993", - "type": "string" + "data": { + "$ref": "#/definitions/dw.AuthorResponse" } }, "type": "object" }, - "shopee.SearchFiltersResponse": { + "publicnews.economicTimesAuthorResponseDoc": { "properties": { - "category": { - "example": "11000979", - "type": "string" - }, - "groups": { - "items": { - "$ref": "#/definitions/shopee.SearchFilterGroup" - }, - "type": "array" - }, - "keyword": { - "example": "headphones", - "type": "string" - }, - "region": { - "example": "my", - "type": "string" - }, - "shortcuts": { - "items": { - "$ref": "#/definitions/shopee.SearchFilterOption" - }, - "type": "array" + "data": { + "$ref": "#/definitions/economictimes.AuthorResponse" } }, "type": "object" }, - "shopee.SearchHint": { + "publicnews.engadgetAuthorResponseDoc": { "properties": { - "category_id": { - "type": "integer" - }, - "category_name": { - "type": "string" - }, - "item_ids": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "keyword": { - "example": "phone case", - "type": "string" - }, - "position": { - "type": "integer" - }, - "record_type": { - "type": "integer" - }, - "source_type": { - "type": "integer" + "data": { + "$ref": "#/definitions/engadget.AuthorResponse" } }, "type": "object" }, - "shopee.SearchHintsResponse": { + "publicnews.eonlineAuthorResponseDoc": { "properties": { - "algorithm": { - "type": "string" - }, - "hints": { - "items": { - "$ref": "#/definitions/shopee.SearchHint" - }, - "type": "array" - }, - "keyword": { - "example": "phone", - "type": "string" - }, - "region": { - "example": "my", - "type": "string" - }, - "search_keyword_type": { - "type": "integer" - }, - "version": { - "example": 2, - "type": "integer" + "data": { + "$ref": "#/definitions/eonline.AuthorResponse" } }, "type": "object" }, - "shopee.ShopInfoResponse": { + "publicnews.euronewsAuthorResponseDoc": { "properties": { - "description": { - "type": "string" - }, - "images": { - "type": "string" - }, - "name": { - "type": "string" - }, - "official_shop": { - "type": "boolean" - }, - "region": { - "example": "my", - "type": "string" - }, - "shop_id": { - "example": 52784309, - "type": "integer" - }, - "shopee_verified": { - "type": "boolean" - }, - "status": { - "type": "integer" - }, - "user_id": { - "type": "integer" + "data": { + "$ref": "#/definitions/euronews.AuthorResponse" } }, "type": "object" }, - "shopee.ShopsResponse": { + "publicnews.ewAuthorResponseDoc": { "properties": { - "limit": { - "example": 20, - "type": "integer" - }, - "offset": { - "example": 0, - "type": "integer" - }, - "region": { - "example": "my", - "type": "string" - }, - "shops": { - "items": { - "$ref": "#/definitions/shopee.MallShop" - }, - "type": "array" - }, - "total": { - "example": 632, - "type": "integer" + "data": { + "$ref": "#/definitions/ew.AuthorResponse" } }, "type": "object" }, - "shopee.SuggestResponse": { + "publicnews.expresstribuneAuthorResponseDoc": { "properties": { - "keyword": { - "example": "head", - "type": "string" - }, - "region": { - "example": "my", - "type": "string" - }, - "suggestions": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/expresstribune.AuthorResponse" } }, "type": "object" }, - "shopee.bannersResponseDoc": { + "publicnews.fastCompanyAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopee.BannersResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/fastcompany.AuthorResponse" } }, "type": "object" }, - "shopee.categoriesResponseDoc": { + "publicnews.fortuneAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopee.CategoriesResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/fortune.AuthorResponse" } }, "type": "object" }, - "shopee.categoryDetailResponseDoc": { + "publicnews.fortuneCompaniesResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopee.CategoryDetailResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/fortune.CompaniesResponse" } }, "type": "object" }, - "shopee.flashSaleResponseDoc": { + "publicnews.fortuneCompanyFiltersResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopee.FlashSaleResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/fortune.CompanyFiltersResponse" } }, "type": "object" }, - "shopee.footerResponseDoc": { + "publicnews.fortuneCompanyResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopee.FooterResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/fortune.CompanyResponse" } }, "type": "object" }, - "shopee.homeCategoriesResponseDoc": { + "publicnews.fortuneRankingFiltersResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopee.HomeCategoriesResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/fortune.RankingFiltersResponse" } }, "type": "object" }, - "shopee.homeResponseDoc": { + "publicnews.fortuneRankingListsResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopee.HomeResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/fortune.RankingListsResponse" } }, "type": "object" }, - "shopee.locationFiltersResponseDoc": { + "publicnews.fortuneRankingResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopee.LocationFiltersResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/fortune.RankingResponse" } }, "type": "object" }, - "shopee.mallCategoriesResponseDoc": { + "publicnews.fortuneRankingYearsResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopee.MallCategoriesResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/fortune.RankingYearsResponse" } }, "type": "object" }, - "shopee.prefillsResponseDoc": { + "publicnews.france24AuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopee.PrefillsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/france24.AuthorResponse" } }, "type": "object" }, - "shopee.searchFiltersResponseDoc": { + "publicnews.gamerantAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopee.SearchFiltersResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/gamerant.AuthorResponse" } }, "type": "object" }, - "shopee.searchHintsResponseDoc": { + "publicnews.gamesradarAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopee.SearchHintsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/gamesradar.AuthorResponse" } }, "type": "object" }, - "shopee.shopInfoResponseDoc": { + "publicnews.gbnewsAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopee.ShopInfoResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/gbnews.AuthorResponse" } }, "type": "object" }, - "shopee.shopsResponseDoc": { + "publicnews.ghanawebArchiveMonthsResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopee.ShopsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/ghanaweb.ArchiveMonthsResponse" } }, "type": "object" }, - "shopee.suggestResponseDoc": { + "publicnews.ghanawebArchiveResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopee.SuggestResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/ghanaweb.ArchiveResponse" } }, "type": "object" }, - "shopify.CollectionItem": { + "publicnews.ghanawebVideoResponseDoc": { "properties": { - "created_at": { - "description": "Time the record was created, as Shopify returns it.", - "type": "string" - }, - "description": { - "description": "Collection description as plain text.", - "type": "string" - }, - "handle": { - "description": "URL slug of the collection, for example `mens`.", - "example": "mens", - "type": "string" - }, - "id": { - "description": "Shopify collection id.", - "example": "278435758160", - "type": "string" - }, - "products_count": { - "description": "Number of products in the collection. Omitted for headless storefronts.", - "example": 24, - "type": "integer" - }, - "published_at": { - "description": "Time the record was published, as Shopify returns it.", - "type": "string" - }, - "title": { - "description": "Collection name as shown on the storefront.", - "example": "Men", - "type": "string" - }, - "updated_at": { - "description": "Time the record was last updated, as Shopify returns it.", - "type": "string" - }, - "url": { - "description": "Storefront page URL of the collection.", - "example": "https://www.allbirds.com/collections/mens", - "type": "string" + "data": { + "$ref": "#/definitions/ghanaweb.VideoResponse" } }, "type": "object" }, - "shopify.CollectionProductsResponse": { + "publicnews.ghanawebVideoSectionsResponseDoc": { "properties": { - "collection": { - "description": "Handle of the collection the products belong to.", - "example": "mens", - "type": "string" - }, - "facets": { - "additionalProperties": { - "additionalProperties": { - "format": "int64", - "type": "integer" - }, - "type": "object" - }, - "description": "Facets and FacetsStats are populated when TransportMode is ssr_embedded\nor storefront_filtered -- see the identical fields' doc comment on\nProductsResponse.", - "type": "object" - }, - "facets_stats": { - "additionalProperties": { - "$ref": "#/definitions/shopify.FacetStat" - }, - "description": "Lowest, highest and average value per numeric facet such as `price`. Present only when `transport_mode` is set.", - "type": "object" - }, - "filters": { - "additionalProperties": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": "Facet filters applied, mapping each facet name to the values requested. Present only for headless storefronts.", - "type": "object" - }, - "in_stock_only": { - "description": "Whether only in-stock products were requested. Present only when `transport_mode` is `storefront_filtered`.", - "type": "boolean" - }, - "limit": { - "description": "Maximum number of products returned per page.", - "example": 50, - "type": "integer" - }, - "max_price": { - "description": "Maximum price filter applied. Present only when `transport_mode` is `storefront_filtered`.", - "type": "number" - }, - "min_price": { - "description": "Minimum price filter applied. Present only when `transport_mode` is `storefront_filtered`.", - "type": "number" - }, - "page": { - "description": "Page number returned.", - "example": 1, - "type": "integer" - }, - "product_type": { - "description": "Product types the results were filtered to. Present only when `transport_mode` is `storefront_filtered`.", - "items": { - "type": "string" - }, - "type": "array" - }, - "products": { - "description": "Products on this page, one item per product.", - "items": { - "$ref": "#/definitions/shopify.ProductItem" - }, - "type": "array" - }, - "sort": { - "description": "Sort and Filters echo back the effective sortBy/facet-filter query\nparams that were applied, present only when transport_mode is\nssr_embedded and the caller supplied at least one. Always omitted for\nthe classic transport (which rejects them as invalid params instead).", - "enum": [ - "sortLTH", - "sortHTL", - "newest" - ], - "example": "sortLTH", - "type": "string" - }, - "sort_by": { - "description": "SortBy, MinPrice, MaxPrice, ProductType, InStockOnly, and\nVariantOptions echo back the effective storefront-filtering params\nthat were applied -- see the identical fields' doc comment on\nProductsResponse.", - "enum": [ - "manual", - "best-selling", - "title-ascending", - "title-descending", - "price-ascending", - "price-descending", - "created-ascending", - "created-descending" - ], - "example": "price-ascending", - "type": "string" - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.allbirds.com", - "type": "string" - }, - "store_url": { - "description": "Base URL of the Shopify storefront that was queried.", - "example": "https://www.allbirds.com", - "type": "string" - }, - "total_items": { - "description": "TotalItems and TotalPages are populated only when TransportMode is\nssr_embedded, from the storefront's own embedded search-result\npagination metadata.", - "example": 184, - "type": "integer" - }, - "total_pages": { - "description": "Total number of result pages. Present only for headless storefronts.", - "example": 4, - "type": "integer" - }, - "transport_mode": { - "description": "Set to `ssr_embedded` for headless storefronts, or `storefront_filtered` when sort, price, product type, in-stock or variant filters were applied. Omitted otherwise.", - "enum": [ - "ssr_embedded", - "storefront_filtered" - ], - "example": "ssr_embedded", - "type": "string" - }, - "variant_options": { - "additionalProperties": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": "Variant option filters applied, mapping an option name such as `size` to the values requested. Present only when `transport_mode` is `storefront_filtered`.", - "type": "object" + "data": { + "$ref": "#/definitions/ghanaweb.VideoSectionsResponse" } }, "type": "object" }, - "shopify.CollectionsResponse": { + "publicnews.ghanawebVideosResponseDoc": { "properties": { - "collections": { - "description": "Collections on this page, one item per collection.", - "items": { - "$ref": "#/definitions/shopify.CollectionItem" - }, - "type": "array" - }, - "limit": { - "description": "Maximum number of collections returned per page.", - "example": 50, - "type": "integer" - }, - "page": { - "description": "Page number returned.", - "example": 1, - "type": "integer" - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.allbirds.com", - "type": "string" - }, - "store_url": { - "description": "Base URL of the Shopify storefront that was queried.", - "example": "https://www.allbirds.com", - "type": "string" - }, - "transport_mode": { - "description": "Set only for headless storefronts that do not expose Shopify's standard catalogue; the value is `ssr_embedded`. Omitted otherwise. Titles are then derived from handles.", - "enum": [ - "ssr_embedded" - ], - "example": "ssr_embedded", - "type": "string" + "data": { + "$ref": "#/definitions/ghanaweb.VideosResponse" } }, "type": "object" }, - "shopify.FacetStat": { + "publicnews.gizmodoAuthorResponseDoc": { "properties": { - "avg": { - "description": "Average value of the facet across the current results.", - "example": 56.46, - "type": "number" - }, - "max": { - "description": "Highest value of the facet across the current results.", - "example": 85, - "type": "number" - }, - "min": { - "description": "Lowest value of the facet across the current results.", - "example": 27, - "type": "number" + "data": { + "$ref": "#/definitions/gizmodo.AuthorResponse" } }, "type": "object" }, - "shopify.ImageItem": { + "publicnews.globalnewsAuthorResponseDoc": { "properties": { - "alt": { - "description": "Alternative text of the image.", - "example": "Product image", - "type": "string" - }, - "created_at": { - "description": "Time the record was created, as Shopify returns it.", - "type": "string" - }, - "height": { - "description": "Image height in pixels.", - "example": 1600, - "type": "integer" - }, - "id": { - "description": "Shopify image id.", - "example": "36411373027408", - "type": "string" - }, - "position": { - "description": "Position of the image in the product's image list, starting at 1.", - "example": 1, - "type": "integer" - }, - "updated_at": { - "description": "Time the record was last updated, as Shopify returns it.", - "type": "string" - }, - "url": { - "description": "URL of the image file.", - "example": "https://cdn.shopify.com/s/files/1/example.jpg", - "type": "string" - }, - "variant_ids": { - "description": "Ids of the variants this image is attached to.", - "items": { - "type": "string" - }, - "type": "array" - }, - "width": { - "description": "Image width in pixels.", - "example": 1600, - "type": "integer" + "data": { + "$ref": "#/definitions/globalnews.AuthorResponse" } }, "type": "object" }, - "shopify.OptionItem": { + "publicnews.gqAuthorResponseDoc": { "properties": { - "name": { - "description": "Option name, for example `Size`.", - "example": "Size", - "type": "string" - }, - "position": { - "description": "Position of the option on the product, starting at 1.", - "example": 1, - "type": "integer" - }, - "values": { - "description": "Values the option can take, for example `S` or `M`.", - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/gq.AuthorResponse" } }, "type": "object" }, - "shopify.PageItem": { + "publicnews.gulfNewsAuthorResponseDoc": { "properties": { - "content": { - "description": "Body of the page as plain text.", - "type": "string" - }, - "created_at": { - "description": "Time the record was created, as Shopify returns it.", - "type": "string" - }, - "handle": { - "description": "URL slug of the page, for example `accessibility`.", - "example": "accessibility", - "type": "string" - }, - "id": { - "description": "Shopify page id.", - "example": "54831906896", - "type": "string" - }, - "published_at": { - "description": "Time the record was published, as Shopify returns it.", - "type": "string" - }, - "title": { - "description": "Page title as shown on the storefront.", - "example": "Accessibility", - "type": "string" - }, - "updated_at": { - "description": "Time the record was last updated, as Shopify returns it.", - "type": "string" - }, - "url": { - "description": "Storefront URL of the page.", - "example": "https://www.allbirds.com/pages/accessibility", - "type": "string" + "data": { + "$ref": "#/definitions/gulfnews.AuthorResponse" } }, "type": "object" }, - "shopify.PageResponse": { + "publicnews.headlinesResponseDoc": { "properties": { - "page": { - "allOf": [ - { - "$ref": "#/definitions/shopify.PageItem" - } - ], - "description": "The static page that was requested." - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.allbirds.com", - "type": "string" - }, - "store_url": { - "description": "Base URL of the Shopify storefront that was queried.", - "example": "https://www.allbirds.com", - "type": "string" - }, - "transport_mode": { - "description": "Set only for headless storefronts that do not expose Shopify's standard catalogue; the value is `ssr_embedded`. Omitted otherwise.", - "enum": [ - "ssr_embedded" - ], - "example": "ssr_embedded", - "type": "string" + "data": { + "$ref": "#/definitions/newsplatform.HeadlinesResponse" } }, "type": "object" }, - "shopify.PagesResponse": { + "publicnews.hindustanTimesAuthorResponseDoc": { "properties": { - "limit": { - "description": "Maximum number of pages returned per page of results.", - "example": 50, - "type": "integer" - }, - "page": { - "description": "Page number returned.", - "example": 1, - "type": "integer" - }, - "pages": { - "description": "Static pages on this page of results, one item per page.", - "items": { - "$ref": "#/definitions/shopify.PageItem" - }, - "type": "array" - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.allbirds.com", - "type": "string" - }, - "store_url": { - "description": "Base URL of the Shopify storefront that was queried.", - "example": "https://www.allbirds.com", - "type": "string" - }, - "transport_mode": { - "description": "TransportMode is present only when the store required the\nembedded-SSR-JSON fallback transport. In this mode pages are\ndiscovered from the storefront's own pages sitemap rather than a\nlisting API: each item only carries handle/url/updated_at (no title\nor content) — call GET /shopify/pages/{handle} per handle for full\ncontent.", - "enum": [ - "ssr_embedded" - ], - "example": "ssr_embedded", - "type": "string" + "data": { + "$ref": "#/definitions/hindustantimes.AuthorResponse" } }, "type": "object" }, - "shopify.ProductItem": { + "publicnews.hollywoodReporterAuthorResponseDoc": { "properties": { - "available": { - "description": "Whether at least one variant is available to buy.", - "type": "boolean" - }, - "canonical_colour": { - "description": "Main colour name the storefront groups the product under, for example `black`.", - "example": "black", - "type": "string" - }, - "collection_tags": { - "description": "Collections the product is listed in, as the storefront labels them.", - "items": { - "type": "string" - }, - "type": "array" - }, - "colour": { - "description": "The fields below are only populated when the product was resolved via\nthe embedded-SSR-JSON fallback transport (see ssr_fallback.go) and the\nsource page exposed this data; they are additive and never populated\nfor classic-store responses.", - "example": "black", - "type": "string" - }, - "compare_at_price": { - "description": "Original price before discount, in the store's currency. The highest compare-at price across variants.", - "example": 120, - "type": "number" - }, - "condition": { - "description": "Condition is only populated for resale-marketplace search results\n(Fashionphile's AlgoliaSearch, Rebag's StorefrontSearch -- see\nsearch.go) whose catalog data exposes a condition grade. Never\npopulated for any other brand or endpoint in this family.", - "example": "Excellent", - "type": "string" - }, - "created_at": { - "description": "Time the record was created, as Shopify returns it.", - "type": "string" - }, - "description": { - "description": "Product description as plain text.", - "type": "string" - }, - "discount_percentage": { - "description": "Discount currently applied to the product, as a percentage.", - "example": 20, - "type": "number" - }, - "featured_image": { - "description": "URL of the product's main image.", - "type": "string" - }, - "handle": { - "description": "URL slug of the product, for example `mens-wool-runners`.", - "example": "mens-wool-runners", - "type": "string" - }, - "id": { - "description": "Shopify product id.", - "example": "6616124981328", - "type": "string" - }, - "images": { - "description": "Images of the product, in the storefront's order.", - "items": { - "$ref": "#/definitions/shopify.ImageItem" - }, - "type": "array" - }, - "labels": { - "description": "Badges the storefront shows on the product, for example `new`.", - "example": [ - "new" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "options": { - "description": "Options the product varies by, such as size or colour.", - "items": { - "$ref": "#/definitions/shopify.OptionItem" - }, - "type": "array" - }, - "price": { - "description": "Current price in the store's currency. The lowest variant price when variants are listed.", - "example": 98, - "type": "number" - }, - "product_type": { - "description": "Product type set by the merchant, for example `Shoes`.", - "example": "Shoes", - "type": "string" - }, - "published_at": { - "description": "Time the record was published, as Shopify returns it.", - "type": "string" - }, - "rating": { - "description": "Average customer rating shown by the storefront.", - "example": 4.2, - "type": "number" - }, - "rating_count": { - "description": "Number of customer ratings behind `rating`.", - "example": 1549, - "type": "integer" - }, - "tags": { - "description": "Tags the merchant attached to the product.", - "items": { - "type": "string" - }, - "type": "array" - }, - "title": { - "description": "Product name as shown on the storefront.", - "example": "Men's Wool Runners", - "type": "string" - }, - "updated_at": { - "description": "Time the record was last updated, as Shopify returns it.", - "type": "string" - }, - "url": { - "description": "Storefront page URL of the product.", - "example": "https://www.allbirds.com/products/mens-wool-runners", - "type": "string" - }, - "variants": { - "description": "Purchasable variants of the product, such as each size and colour.", - "items": { - "$ref": "#/definitions/shopify.VariantItem" - }, - "type": "array" - }, - "vendor": { - "description": "Brand or vendor name set by the merchant.", - "example": "Allbirds", - "type": "string" + "data": { + "$ref": "#/definitions/hollywoodreporter.AuthorResponse" } }, "type": "object" }, - "shopify.ProductRecommendationsResponse": { + "publicnews.houstonChronicleAuthorResponseDoc": { "properties": { - "handle": { - "description": "Handle of the product the recommendations are based on.", - "example": "mens-wool-runners", - "type": "string" - }, - "intent": { - "description": "Recommendation type returned: `related` or `complementary`.", - "example": "related", - "type": "string" - }, - "limit": { - "description": "Maximum number of recommended products returned.", - "example": 10, - "type": "integer" - }, - "product_id": { - "description": "Shopify id of the product the recommendations are based on.", - "example": "6616124981328", - "type": "string" - }, - "products": { - "description": "Recommended products, one item per product.", - "items": { - "$ref": "#/definitions/shopify.ProductItem" - }, - "type": "array" - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.allbirds.com", - "type": "string" - }, - "store_url": { - "description": "Base URL of the Shopify storefront that was queried.", - "example": "https://www.allbirds.com", - "type": "string" - }, - "transport_mode": { - "description": "Set only for headless storefronts that do not expose Shopify's standard catalogue; the value is `ssr_embedded`. Omitted otherwise.", - "enum": [ - "ssr_embedded" - ], - "example": "ssr_embedded", - "type": "string" + "data": { + "$ref": "#/definitions/houstonchronicle.AuthorResponse" } }, "type": "object" }, - "shopify.ProductResponse": { + "publicnews.huffPostAuthorResponseDoc": { "properties": { - "product": { - "allOf": [ - { - "$ref": "#/definitions/shopify.ProductItem" - } - ], - "description": "The requested product with its variants, options and images." - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.allbirds.com", - "type": "string" - }, - "store_url": { - "description": "Base URL of the Shopify storefront that was queried.", - "example": "https://www.allbirds.com", - "type": "string" - }, - "transport_mode": { - "description": "Set only for headless storefronts that do not expose Shopify's standard catalogue; the value is `ssr_embedded`. Omitted otherwise.", - "enum": [ - "ssr_embedded" - ], - "example": "ssr_embedded", - "type": "string" + "data": { + "$ref": "#/definitions/huffpost.AuthorResponse" } }, "type": "object" }, - "shopify.ProductsResponse": { + "publicnews.ignAuthorResponseDoc": { "properties": { - "facets": { - "additionalProperties": { - "additionalProperties": { - "format": "int64", - "type": "integer" - }, - "type": "object" - }, - "description": "Facets and FacetsStats are populated when TransportMode is ssr_embedded\n(from the storefront's own embedded search-index facet buckets) or\nstorefront_filtered (from the storefront's own Storefront Filtering\nsidebar -- Size/Color/etc. option facets, Product Type, and a \"price\"\nFacetsStats entry for the price-range slider's own min/max bounds).", - "type": "object" - }, - "facets_stats": { - "additionalProperties": { - "$ref": "#/definitions/shopify.FacetStat" - }, - "description": "Lowest, highest and average value per numeric facet such as `price`. Present only when `transport_mode` is set.", - "type": "object" - }, - "filters": { - "additionalProperties": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": "Facet filters applied, mapping each facet name to the values requested. Present only for headless storefronts.", - "type": "object" - }, - "in_stock_only": { - "description": "Whether only in-stock products were requested. Present only when `transport_mode` is `storefront_filtered`.", - "type": "boolean" - }, - "limit": { - "description": "Maximum number of products returned per page.", - "example": 50, - "type": "integer" - }, - "max_price": { - "description": "Maximum price filter applied. Present only when `transport_mode` is `storefront_filtered`.", - "type": "number" - }, - "min_price": { - "description": "Minimum price filter applied. Present only when `transport_mode` is `storefront_filtered`.", - "type": "number" - }, - "page": { - "description": "Page number returned.", - "example": 1, - "type": "integer" - }, - "product_type": { - "description": "Product types the results were filtered to. Present only when `transport_mode` is `storefront_filtered`.", - "items": { - "type": "string" - }, - "type": "array" - }, - "products": { - "description": "Products on this page, one item per product.", - "items": { - "$ref": "#/definitions/shopify.ProductItem" - }, - "type": "array" - }, - "sort": { - "description": "Sort and Filters echo back the effective sortBy/facet-filter query\nparams that were applied, present only when transport_mode is\nssr_embedded and the caller supplied at least one. Always omitted for\nthe classic transport (which rejects them as invalid params instead).", - "enum": [ - "sortLTH", - "sortHTL", - "newest" - ], - "example": "sortLTH", - "type": "string" - }, - "sort_by": { - "description": "SortBy, MinPrice, MaxPrice, ProductType, InStockOnly, and\nVariantOptions echo back the effective storefront-filtering params\nthat were applied, present only when transport_mode is\nstorefront_filtered.", - "enum": [ - "manual", - "best-selling", - "title-ascending", - "title-descending", - "price-ascending", - "price-descending", - "created-ascending", - "created-descending" - ], - "example": "price-ascending", - "type": "string" - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.allbirds.com", - "type": "string" - }, - "store_url": { - "description": "Base URL of the Shopify storefront that was queried.", - "example": "https://www.allbirds.com", - "type": "string" - }, - "total_items": { - "description": "TotalItems and TotalPages are populated only when TransportMode is\nssr_embedded, from the storefront's own embedded search-result\npagination metadata.", - "example": 184, - "type": "integer" - }, - "total_pages": { - "description": "Total number of result pages. Present only for headless storefronts.", - "example": 4, - "type": "integer" - }, - "transport_mode": { - "description": "Set to `ssr_embedded` for headless storefronts, or `storefront_filtered` when sort, price, product type, in-stock or variant filters were applied. Omitted otherwise.", - "enum": [ - "ssr_embedded", - "storefront_filtered" - ], - "example": "ssr_embedded", - "type": "string" - }, - "variant_options": { - "additionalProperties": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": "Variant option filters applied, mapping an option name such as `size` to the values requested. Present only when `transport_mode` is `storefront_filtered`.", - "type": "object" + "data": { + "$ref": "#/definitions/ign.AuthorResponse" } }, "type": "object" }, - "shopify.ReviewDTO": { + "publicnews.independentAuthorResponseDoc": { "properties": { - "body": { - "example": "Excellent condition, fast shipping!", - "type": "string" - }, - "created_at": { - "example": "2026-08-25T18:17:23.000Z", - "type": "string" - }, - "id": { - "example": "4a8567d4-b397-5ff5-b327-a8cbec368987", - "type": "string" - }, - "is_shop_review": { - "type": "boolean" - }, - "pictures": { - "items": { - "type": "string" - }, - "type": "array" - }, - "product_title": { - "type": "string" - }, - "product_url": { - "type": "string" - }, - "rating": { - "example": 5, - "type": "integer" - }, - "reviewer_name": { - "example": "Mario Henao", - "type": "string" - }, - "title": { - "type": "string" - }, - "verified_buyer": { - "example": true, - "type": "boolean" + "data": { + "$ref": "#/definitions/independent.AuthorResponse" } }, "type": "object" }, - "shopify.ReviewsResponse": { + "publicnews.indiaTodayAuthorResponseDoc": { "properties": { - "page": { - "example": 1, - "type": "integer" - }, - "reviews": { - "items": { - "$ref": "#/definitions/shopify.ReviewDTO" - }, - "type": "array" - }, - "source_url": { - "example": "https://cdn.judge.me/reviews/all_reviews_js_based", - "type": "string" - }, - "store_url": { - "example": "https://www.pristinemarketplace.com", - "type": "string" - }, - "total_count": { - "example": 88, - "type": "integer" - }, - "total_pages": { - "example": 18, - "type": "integer" + "data": { + "$ref": "#/definitions/indiatoday.AuthorResponse" } }, "type": "object" }, - "shopify.SearchQueryItem": { + "publicnews.indianExpressAuthorResponseDoc": { "properties": { - "text": { - "description": "Suggested search phrase.", - "example": "wool", - "type": "string" - }, - "url": { - "description": "Storefront search results URL for the phrase.", - "example": "https://www.allbirds.com/search?q=wool", - "type": "string" + "data": { + "$ref": "#/definitions/indianexpress.AuthorResponse" } }, "type": "object" }, - "shopify.SearchResponse": { + "publicnews.indiewireAuthorResponseDoc": { "properties": { - "availability": { - "description": "Availability is the availability filter that was applied (available,\nsold, or all). Only set by Fashionphile search.", - "example": "available", - "type": "string" - }, - "condition": { - "example": "Excellent", - "type": "string" - }, - "limit": { - "example": 20, - "type": "integer" - }, - "page": { - "example": 1, - "type": "integer" - }, - "products": { - "items": { - "$ref": "#/definitions/shopify.ProductItem" - }, - "type": "array" - }, - "query": { - "example": "chanel", - "type": "string" - }, - "sort": { - "example": "relevance", - "type": "string" - }, - "source_url": { - "example": "https://www.fashionphile.com", - "type": "string" - }, - "store_url": { - "example": "https://www.fashionphile.com", - "type": "string" - }, - "total_items": { - "description": "TotalItems for AlgoliaSearch is the exact number of products matching\nthe query and every filter (condition, vendor, availability); it does\nnot change with sort. For StorefrontSearch it is only the number of results the\nupstream Storefront API returned for this page's fetch window --\nShopify's search field does not expose a true total match count, so\nthis is not a reliable \"how many pages exist\" signal on that\ntransport; treat an empty Products page as the practical end of\nresults instead.", - "example": 184, - "type": "integer" - }, - "vendor": { - "example": "Chanel", - "type": "string" + "data": { + "$ref": "#/definitions/indiewire.AuthorResponse" } }, "type": "object" }, - "shopify.SearchSuggestResponse": { + "publicnews.inewsAuthorResponseDoc": { "properties": { - "collections": { - "description": "Collections suggested for the query.", - "items": { - "$ref": "#/definitions/shopify.CollectionItem" - }, - "type": "array" - }, - "limit": { - "description": "Maximum number of suggestions requested.", - "example": 10, - "type": "integer" - }, - "products": { - "description": "Products suggested for the query.", - "items": { - "$ref": "#/definitions/shopify.ProductItem" - }, - "type": "array" - }, - "queries": { - "description": "Search phrases suggested for the query.", - "items": { - "$ref": "#/definitions/shopify.SearchQueryItem" - }, - "type": "array" - }, - "query": { - "description": "Search text that was run.", - "example": "wool", - "type": "string" - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.allbirds.com", - "type": "string" - }, - "store_url": { - "description": "Base URL of the Shopify storefront that was queried.", - "example": "https://www.allbirds.com", - "type": "string" - }, - "types": { - "description": "Suggestion types returned: `product`, `collection` and `query`.", - "example": [ - "product", - "collection", - "query" - ], - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/inews.AuthorResponse" } }, "type": "object" }, - "shopify.SiteSearchResponse": { + "publicnews.inquirerAuthorResponseDoc": { "properties": { - "limit": { - "example": 20, - "type": "integer" - }, - "page": { - "example": 1, - "type": "integer" - }, - "products": { - "items": { - "$ref": "#/definitions/shopify.ProductItem" - }, - "type": "array" - }, - "query": { - "example": "jordan", - "type": "string" - }, - "source_url": { - "type": "string" - }, - "store_url": { - "example": "https://www.pristinemarketplace.com", - "type": "string" - }, - "total_count": { - "example": 413, - "type": "integer" - }, - "total_pages": { - "example": 26, - "type": "integer" + "data": { + "$ref": "#/definitions/inquirer.AuthorResponse" } }, "type": "object" }, - "shopify.SitemapImage": { + "publicnews.investopediaAuthorResponseDoc": { "properties": { - "caption": { - "description": "Caption of the image listed in the sitemap.", - "type": "string" - }, - "title": { - "description": "Title of the image listed in the sitemap.", - "example": "Men's Wool Runner", - "type": "string" - }, - "url": { - "description": "URL of the image file.", - "example": "https://cdn.shopify.com/example.png", - "type": "string" + "data": { + "$ref": "#/definitions/investopedia.AuthorResponse" } }, "type": "object" }, - "shopify.SitemapIndexResponse": { + "publicnews.iolAuthorResponseDoc": { "properties": { - "sitemaps": { - "description": "Child sitemaps listed by the store's main sitemap.", - "items": { - "$ref": "#/definitions/shopify.SitemapItem" - }, - "type": "array" - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.allbirds.com", - "type": "string" - }, - "store_url": { - "description": "Base URL of the Shopify storefront that was queried.", - "example": "https://www.allbirds.com", - "type": "string" + "data": { + "$ref": "#/definitions/iol.AuthorResponse" } }, "type": "object" }, - "shopify.SitemapItem": { + "publicnews.irishindependentAuthorResponseDoc": { "properties": { - "loc": { - "description": "URL of the child sitemap file.", - "example": "https://www.allbirds.com/sitemap_products_1.xml", - "type": "string" - }, - "type": { - "description": "Section the sitemap covers: `products`, `collections`, `pages`, `blogs`, `agentic_discovery` or `other`.", - "example": "products", - "type": "string" + "data": { + "$ref": "#/definitions/irishindependent.AuthorResponse" } }, "type": "object" }, - "shopify.SitemapURLItem": { + "publicnews.irishtimesAuthorResponseDoc": { "properties": { - "changefreq": { - "description": "Update frequency hint from the sitemap entry, for example `weekly`.", - "example": "weekly", - "type": "string" - }, - "handle": { - "description": "Handle of the product, collection or page the URL points to.", - "example": "mens-wool-runners", - "type": "string" - }, - "images": { - "description": "Images listed for the URL in the sitemap.", - "items": { - "$ref": "#/definitions/shopify.SitemapImage" - }, - "type": "array" - }, - "lastmod": { - "description": "Last modification time listed for the URL in the sitemap.", - "example": "2026-03-19T11:41:39-07:00", - "type": "string" - }, - "loc": { - "description": "Storefront URL listed in the sitemap.", - "example": "https://www.allbirds.com/products/mens-wool-runners", - "type": "string" - }, - "type": { - "description": "Section the URL belongs to: `products`, `collections`, `pages`, `blogs`, `agentic_discovery` or `other`.", - "example": "products", - "type": "string" + "data": { + "$ref": "#/definitions/irishtimes.AuthorResponse" } }, "type": "object" }, - "shopify.SitemapURLsResponse": { + "publicnews.japantimesAuthorResponseDoc": { "properties": { - "limit": { - "description": "Maximum number of URL entries returned.", - "example": 50, - "type": "integer" - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.allbirds.com", - "type": "string" - }, - "store_url": { - "description": "Base URL of the Shopify storefront that was queried.", - "example": "https://www.allbirds.com", - "type": "string" - }, - "type": { - "description": "Sitemap section requested: `all`, `products`, `collections`, `pages`, `blogs`, `agentic_discovery` or `other`.", - "example": "products", - "type": "string" - }, - "urls": { - "description": "URL entries from the matching sitemaps.", - "items": { - "$ref": "#/definitions/shopify.SitemapURLItem" - }, - "type": "array" + "data": { + "$ref": "#/definitions/japantimes.AuthorResponse" } }, "type": "object" }, - "shopify.StoreResponse": { + "publicnews.jerusalemPostAuthorResponseDoc": { "properties": { - "city": { - "description": "City of the store's business address.", - "example": "San Francisco", - "type": "string" - }, - "country": { - "description": "Country code of the store, for example `US`.", - "example": "US", - "type": "string" - }, - "currency": { - "description": "Currency code the store prices in, for example `USD`.", - "example": "USD", - "type": "string" - }, - "description": { - "description": "Store description set by the merchant.", - "type": "string" - }, - "domain": { - "description": "Domain of the storefront URL that was requested.", - "example": "www.gymshark.com", - "type": "string" - }, - "myshopify_domain": { - "description": "The store's `myshopify.com` domain, for example `gymsharkusa.myshopify.com`.", - "example": "gymsharkusa.myshopify.com", - "type": "string" - }, - "name": { - "description": "Store name, for example `Allbirds`.", - "example": "Allbirds", - "type": "string" - }, - "province": { - "description": "State or province of the store's business address.", - "example": "CA", - "type": "string" - }, - "published_collections_count": { - "description": "Number of published collections in the store.", - "example": 42, - "type": "integer" - }, - "published_products_count": { - "description": "Number of published products in the store.", - "example": 638, - "type": "integer" - }, - "requested_url": { - "description": "Storefront URL that was requested.", - "example": "https://www.gymshark.com", - "type": "string" - }, - "source_domain": { - "description": "Domain the store data was read from. It differs from `domain` when the store's `myshopify.com` domain is used.", - "example": "gymsharkusa.myshopify.com", - "type": "string" - }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://gymsharkusa.myshopify.com", - "type": "string" - }, - "transport_mode": { - "description": "Set only for headless storefronts that do not expose Shopify's standard catalogue; the value is `ssr_embedded`. Omitted otherwise.", - "enum": [ - "ssr_embedded" - ], - "example": "ssr_embedded", - "type": "string" + "data": { + "$ref": "#/definitions/jerusalempost.AuthorResponse" } }, "type": "object" }, - "shopify.VariantItem": { + "publicnews.jerusalemPostAuthorsResponseDoc": { "properties": { - "available": { - "description": "Whether this variant is currently available to buy.", - "type": "boolean" - }, - "barcode": { - "description": "Barcode of the variant, such as a UPC or EAN.", - "type": "string" - }, - "compare_at_price": { - "description": "Original price before discount, in the store's currency.", - "example": 120, - "type": "number" - }, - "created_at": { - "description": "Time the record was created, as Shopify returns it.", - "type": "string" - }, - "featured_image": { - "description": "URL of the image shown for this variant.", - "type": "string" - }, - "grams": { - "description": "Weight of the variant in grams.", - "example": 400, - "type": "integer" - }, - "id": { - "description": "Shopify variant id.", - "example": "34761278160941", - "type": "string" - }, - "inventory_quantity": { - "description": "InventoryQuantity is only populated via the embedded-SSR-JSON fallback\ntransport (see ssr_fallback.go); classic-store responses never set it.", - "example": 24, - "type": "integer" - }, - "option1": { - "description": "Value of the product's first option for this variant, for example a size.", - "type": "string" - }, - "option2": { - "description": "Value of the product's second option for this variant.", - "type": "string" - }, - "option3": { - "description": "Value of the product's third option for this variant.", - "type": "string" - }, - "position": { - "description": "Position of the variant in the product's variant list, starting at 1.", - "example": 1, - "type": "integer" - }, - "price": { - "description": "Current price of the variant in the store's currency.", - "example": 98, - "type": "number" - }, - "product_id": { - "description": "Shopify id of the product the variant belongs to.", - "example": "6616124981328", - "type": "string" - }, - "requires_shipping": { - "description": "Whether the variant is a physical item that needs shipping.", - "type": "boolean" - }, - "sku": { - "description": "Merchant stock keeping unit code of the variant.", - "example": "A123", - "type": "string" - }, - "taxable": { - "description": "Whether tax is charged on the variant.", - "type": "boolean" - }, - "title": { - "description": "Variant name, for example `Natural Black / 10`.", - "example": "Natural Black / 10", - "type": "string" - }, - "updated_at": { - "description": "Time the record was last updated, as Shopify returns it.", - "type": "string" + "data": { + "$ref": "#/definitions/jerusalempost.AuthorsResponse" } }, "type": "object" }, - "shopify.collectionProductsResponseDoc": { + "publicnews.khaleejTimesAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.CollectionProductsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/khaleejtimes.AuthorResponse" } }, "type": "object" }, - "shopify.collectionsResponseDoc": { + "publicnews.kotakuAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.CollectionsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/kotaku.AuthorResponse" } }, "type": "object" }, - "shopify.pageResponseDoc": { + "publicnews.livemintAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.PageResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/livemint.AuthorResponse" } }, "type": "object" }, - "shopify.pagesResponseDoc": { + "publicnews.livescienceAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.PagesResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/livescience.AuthorResponse" } }, "type": "object" }, - "shopify.productRecommendationsResponseDoc": { + "publicnews.macRumorsAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.ProductRecommendationsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/macrumors.AuthorResponse" } }, "type": "object" }, - "shopify.productResponseDoc": { + "publicnews.makeuseofAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.ProductResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/makeuseof.AuthorResponse" } }, "type": "object" }, - "shopify.productsResponseDoc": { + "publicnews.marketWatchAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.ProductsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/marketwatch.AuthorResponse" } }, "type": "object" }, - "shopify.searchSuggestResponseDoc": { + "publicnews.mashableAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.SearchSuggestResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/mashable.AuthorResponse" } }, "type": "object" }, - "shopify.sitemapIndexResponseDoc": { + "publicnews.mediaiteAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.SitemapIndexResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/mediaite.AuthorResponse" } }, "type": "object" }, - "shopify.sitemapURLsResponseDoc": { + "publicnews.menAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.SitemapURLsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/men.AuthorResponse" } }, "type": "object" }, - "shopify.storeResponseDoc": { + "publicnews.metroAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.StoreResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/metro.AuthorResponse" } }, "type": "object" }, - "shopifybrands.collectionProductsResponseDoc": { + "publicnews.mirrorAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.CollectionProductsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/mirror.AuthorResponse" } }, "type": "object" }, - "shopifybrands.collectionsResponseDoc": { + "publicnews.moneycontrolAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.CollectionsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/moneycontrol.AuthorResponse" } }, "type": "object" }, - "shopifybrands.pageResponseDoc": { + "publicnews.motleyfoolAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.PageResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/motleyfool.AuthorResponse" } }, "type": "object" }, - "shopifybrands.pagesResponseDoc": { + "publicnews.nationAfricaAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.PagesResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/nationafrica.AuthorResponse" } }, "type": "object" }, - "shopifybrands.productRecommendationsResponseDoc": { + "publicnews.nationalAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.ProductRecommendationsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/national.AuthorResponse" } }, "type": "object" }, - "shopifybrands.productResponseDoc": { + "publicnews.nationalPostAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.ProductResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/nationalpost.AuthorResponse" } }, "type": "object" }, - "shopifybrands.productsResponseDoc": { + "publicnews.ndtvArticleResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.ProductsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/ndtv.ArticleResponse" } }, "type": "object" }, - "shopifybrands.reviewsResponseDoc": { + "publicnews.ndtvAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.ReviewsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/ndtv.AuthorResponse" } }, "type": "object" }, - "shopifybrands.searchResponseDoc": { + "publicnews.ndtvLatestVideosResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.SearchResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/ndtv.LatestVideosResponse" } }, "type": "object" }, - "shopifybrands.searchSuggestResponseDoc": { + "publicnews.ndtvLiveBlogResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.SearchSuggestResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/ndtv.LiveBlogResponse" } }, "type": "object" }, - "shopifybrands.siteSearchResponseDoc": { + "publicnews.ndtvLiveBlogsResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.SiteSearchResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/ndtv.LiveBlogsResponse" } }, "type": "object" }, - "shopifybrands.sitemapIndexResponseDoc": { + "publicnews.ndtvSearchResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.SitemapIndexResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/ndtv.SearchResponse" } }, "type": "object" }, - "shopifybrands.sitemapURLsResponseDoc": { + "publicnews.ndtvVideoCategoriesResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.SitemapURLsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/ndtv.VideoCategoriesResponse" } }, "type": "object" }, - "shopifybrands.storeResponseDoc": { + "publicnews.ndtvVideoResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/shopify.StoreResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/ndtv.VideoResponse" } }, "type": "object" }, - "similarweb.SearchResp": { + "publicnews.ndtvVideosResponseDoc": { "properties": { - "apps": { - "description": "Apps matching the search term, grouped by store: Google Play and the App Store.", - "properties": { - "appStore": { - "items": { - "properties": { - "appKey": { - "example": "1_1484366079", - "type": "string" - }, - "id": { - "example": "1484366079", - "type": "string" - }, - "image": { - "example": "https://site-images.similarcdn.com/url?url=https%3A%2F%2Fis1-ssl.mzstatic.com%2Fimage%2Fthumb%2FPurple211%2Fv4%2F1c%2F1c%2Fe3%2F1c1ce399-1181-5be1-56d8-ee74e9f0cef4%2FAppIcon-0-0-1x_U007emarketing-0-0-0-7-0-0-85-220.png%2F175x175bb.png", - "type": "string" - }, - "name": { - "example": "TwitterIt for Twitter X", - "type": "string" - }, - "publisher": { - "example": "BEST SOCIAL APPS DEVELOPMENT LTD", - "type": "string" - }, - "ratings": { - "example": 38197, - "type": "integer" - }, - "store": { - "example": "apple", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "googlePlay": { - "items": { - "properties": { - "appKey": { - "example": "0_twittervideodownloader.twitter.videoindir.savegif.twdown", - "type": "string" - }, - "id": { - "example": "twittervideodownloader.twitter.videoindir.savegif.twdown", - "type": "string" - }, - "image": { - "example": "https://site-images.similarcdn.com/url?url=https%3A%2F%2Fplay-lh.googleusercontent.com%2FFi9-CFodjxpqvc3dC0XHDXHkFD3wkw9VccX_iL68U_3kmu2iIuHvIp5AZUoXGZ3mlQ%3Ds180", - "type": "string" - }, - "name": { - "example": "X Saver:Download Twitter Video", - "type": "string" - }, - "publisher": { - "example": "Shotcut Video Workshop", - "type": "string" - }, - "ratings": { - "example": 159344, - "type": "integer" - }, - "store": { - "example": "google", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - "companies": { - "description": "Companies matching the search term.", - "items": { - "properties": { - "domain": { - "example": "twitter.com", - "type": "string" - }, - "logoUrl": { - "example": "https://sw-df-production-internal-data.s3.amazonaws.com/si/company_data/merged_v2/firmographics_logos/30e41d95dd013b4ec1b8d9e614ec546807cb2152b1f54fa3031d7e6488f93ce4.jpg", - "type": "string" - }, - "name": { - "example": "Twitter", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "websites": { - "description": "Websites matching the search term.", - "items": { - "properties": { - "image": { - "example": "https://site-images.similarcdn.com/image?url=twitter.com&t=2&s=1&h=05438debe431144d9c727828570d1754a25bd9286bc14f3aa65a4f05b9057e25", - "type": "string" - }, - "isVirtual": { - "example": false, - "type": "boolean" - }, - "name": { - "example": "twitter.com", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" + "data": { + "$ref": "#/definitions/ndtv.VideosResponse" } }, "type": "object" }, - "similarweb.SimilarWebResp": { + "publicnews.news18AuthorResponseDoc": { "properties": { - "AiTrafficDetails": { - "description": "AiTrafficDetails carries SimilarWeb's AI-chatbot traffic insights (the\nextension's \"AI Traffic\" feature set): which AI platforms send traffic\nto this domain, how that mix changed over recent months, and the top\nprompts users asked those chatbots that referred visits here. Left at\nits zero value when DataSource is \"public_page\" because that source\ndoesn't expose it.", - "properties": { - "ReferralTraffic": { - "type": "number" - }, - "TopPrompts": { - "properties": { - "ErrorMessage": { - "type": "string" - }, - "Prompts": { - "items": { - "type": "string" - }, - "type": "array" - }, - "Status": { - "type": "integer" - } - }, - "type": "object" - }, - "TotalVisits": { - "type": "number" - }, - "Traffic": { - "properties": { - "Distribution": { - "properties": { - "Boundary": { - "type": "string" - }, - "Chart": { - "items": { - "properties": { - "History": { - "items": { - "properties": { - "Date": { - "type": "string" - }, - "Value": { - "type": "number" - } - }, - "type": "object" - }, - "type": "array" - }, - "Icon": { - "type": "string" - }, - "Name": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "Chatbots": { - "items": { - "properties": { - "Icon": { - "type": "string" - }, - "Name": { - "type": "string" - }, - "Value": { - "type": "number" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - "Split": { - "items": { - "properties": { - "Icon": { - "type": "string" - }, - "Name": { - "type": "string" - }, - "Rank": { - "type": "integer" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "Category": { - "description": "Category SimilarWeb places the site in.", - "type": "string" - }, - "CategoryRank": { - "description": "Rank of the site within its category, with the category name.", - "properties": { - "Category": { - "type": "string" - }, - "Rank": { - "type": "string" - } - }, - "type": "object" - }, - "Competitors": { - "description": "Sites SimilarWeb lists as most similar to the domain.", - "properties": { - "TopSimilarityCompetitors": { - "items": {}, - "type": "array" - } - }, - "type": "object" - }, - "Countries": { - "description": "Countries SimilarWeb returns with the site's data, each with a code, URL code and name.", - "items": { - "properties": { - "Code": { - "type": "string" - }, - "Name": { - "type": "string" - }, - "UrlCode": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "CountryRank": { - "description": "Rank of the site within one country, with that country's code.", - "properties": { - "Country": { - "type": "integer" - }, - "CountryCode": { - "type": "string" - }, - "Rank": { - "type": "integer" - } - }, - "type": "object" - }, - "DataSource": { - "description": "DataSource reports which upstream this response was populated from.\n\"extension_api\" is the full-coverage source (SimilarWeb's undocumented\nbrowser-extension API); \"public_page\" is a narrower, credential-free\nfallback (see website.go) used only when the extension API is\nunreachable -- some fields above are left at their zero value when\nDataSource is \"public_page\" because this source doesn't expose them.\nSee docs/similarweb-web.md for the full field-availability breakdown.", - "example": "extension_api", - "type": "string" - }, - "Description": { - "description": "Site description as SimilarWeb shows it.", - "type": "string" - }, - "Engagments": { - "description": "Engagement figures for the latest month: bounce rate, pages per visit, visits, time on site, month and year.", - "properties": { - "BounceRate": { - "type": "string" - }, - "Month": { - "type": "string" - }, - "PagePerVisit": { - "type": "string" - }, - "TimeOnSite": { - "type": "string" - }, - "Visits": { - "type": "string" - }, - "Year": { - "type": "string" - } - }, - "type": "object" - }, - "EstimatedMonthlyVisits": { - "description": "Estimated visits per month, keyed by the first day of the month (YYYY-MM-DD).", - "properties": { - "2024-09-01": { - "type": "integer" - }, - "2024-10-01": { - "type": "integer" - }, - "2024-11-01": { - "type": "integer" - } - }, - "type": "object" - }, - "GlobalCategoryRank": { - "description": "Rank of the site within its category across all countries, when SimilarWeb provides it." - }, - "GlobalRank": { - "description": "Global traffic rank of the site, in `Rank`.", - "properties": { - "Rank": { - "type": "integer" - } - }, - "type": "object" - }, - "IsDataFromGa": { - "description": "Whether SimilarWeb reports the site's data as coming from Google Analytics.", - "type": "boolean" - }, - "IsSmall": { - "description": "Whether SimilarWeb treats the site as a small site.", - "type": "boolean" - }, - "LargeScreenshot": { - "description": "URL of a large screenshot of the site.", - "type": "string" - }, - "Notification": { - "description": "Notice SimilarWeb attaches to the site's data, in `Content`.", - "properties": { - "Content": {} - }, - "type": "object" - }, - "Policy": { - "description": "Numeric policy value SimilarWeb returns with the site's data.", - "type": "integer" - }, - "SiteName": { - "description": "Domain name of the site.", - "type": "string" - }, - "SnapshotDate": { - "description": "Date and time of the SimilarWeb data snapshot.", - "type": "string" - }, - "Title": { - "description": "Site title as SimilarWeb shows it.", - "type": "string" - }, - "TopCountryShares": { - "description": "Countries that send the most visits, each with its country code and share of traffic.", - "items": { - "properties": { - "Country": { - "type": "integer" - }, - "CountryCode": { - "type": "string" - }, - "Value": { - "type": "number" - } - }, - "type": "object" - }, - "type": "array" - }, - "TopKeywords": { - "description": "Top search keywords bringing visits to the site, each with estimated value, volume and cost per click.", - "items": { - "properties": { - "Cpc": { - "type": "number" - }, - "EstimatedValue": { - "type": "number" - }, - "Name": { - "type": "string" - }, - "Volume": { - "type": "number" - } - }, - "type": "object" - }, - "type": "array" - }, - "TrafficSources": { - "description": "Share of traffic from each source: social, paid referrals, mail, referrals, search and direct.", - "properties": { - "Direct": { - "type": "number" - }, - "Mail": { - "type": "number" - }, - "Paid Referrals": { - "type": "number" - }, - "Referrals": { - "type": "number" - }, - "Search": { - "type": "number" - }, - "Social": { - "type": "number" - } - }, - "type": "object" - }, - "Version": { - "description": "Version number SimilarWeb returns with the site's data.", - "type": "integer" + "data": { + "$ref": "#/definitions/news18.AuthorResponse" } }, "type": "object" }, - "similarweb.searchResponseDoc": { + "publicnews.newsResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/similarweb.SearchResp" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/newsplatform.NewsResponse" } }, "type": "object" }, - "similarweb.webResponseDoc": { + "publicnews.newscomauAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/similarweb.SimilarWebResp" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/newscomau.AuthorResponse" } }, "type": "object" }, - "skynews.AuthorInfoItem": { + "publicnews.newsmaxAuthorResponseDoc": { "properties": { - "label": { - "type": "string" - }, - "url": { - "type": "string" - }, - "value": { - "type": "string" + "data": { + "$ref": "#/definitions/newsmax.AuthorResponse" } }, "type": "object" }, - "skynews.AuthorResponse": { + "publicnews.newsweekAuthorResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/skynews.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" - }, - "info": { - "items": { - "$ref": "#/definitions/skynews.AuthorInfoItem" - }, - "type": "array" - }, - "job_title": { - "type": "string" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/newsweek.AuthorResponse" } }, "type": "object" }, - "skynews.HeadlineItem": { + "publicnews.newyorkerArticleResponseDoc": { "properties": { - "author": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "published_at": { - "type": "string" - }, - "summary": { - "type": "string" - }, - "title": { - "type": "string" - }, - "type": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/newyorker.ArticleResponse" } }, "type": "object" }, - "skynews.VideoResponse": { + "publicnews.newyorkerAuthorResponseDoc": { "properties": { - "description": { - "type": "string" - }, - "duration_seconds": { - "type": "integer" - }, - "embed_url": { - "type": "string" - }, - "published_at": { - "type": "string" - }, - "thumbnail_urls": { - "items": { - "type": "string" - }, - "type": "array" - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/newyorker.AuthorResponse" } }, "type": "object" }, - "skynews.VideosResponse": { + "publicnews.ninetofivegoogleAuthorResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/skynews.HeadlineItem" - }, - "type": "array" + "data": { + "$ref": "#/definitions/ninetofivegoogle.AuthorResponse" } }, "type": "object" }, - "skysports.AuthorResponse": { + "publicnews.ninetofivemacAuthorResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" - }, - "job_title": { - "type": "string" - }, - "name": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/ninetofivemac.AuthorResponse" } }, "type": "object" }, - "slate.ArticleResponse": { + "publicnews.nyDailyNewsAuthorResponseDoc": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { - "type": "string" - }, - "headings": { - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { - "type": "string" - }, - "is_paywalled": { - "type": "boolean" - }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" - }, - "published_at": { - "type": "string" - }, - "section": { - "type": "string" - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "title": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/nydailynews.AuthorResponse" } }, "type": "object" }, - "slate.CategoriesResponse": { + "publicnews.nymagAuthorResponseDoc": { "properties": { - "sections": { - "items": { - "$ref": "#/definitions/slate.Section" - }, - "type": "array" + "data": { + "$ref": "#/definitions/nymag.AuthorResponse" } }, "type": "object" }, - "slate.HeadlineItem": { + "publicnews.nypostAuthorResponseDoc": { "properties": { - "author": { - "type": "string" - }, - "categories": { - "items": { - "type": "string" - }, - "type": "array" - }, - "id": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "published_at": { - "type": "string" - }, - "summary": { - "type": "string" - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/nypost.AuthorResponse" } }, "type": "object" }, - "slate.HeadlinesResponse": { + "publicnews.nzheraldAuthorResponseDoc": { "properties": { - "feed_url": { - "type": "string" - }, - "items": { - "items": { - "$ref": "#/definitions/slate.HeadlineItem" - }, - "type": "array" - }, - "section": { - "type": "string" + "data": { + "$ref": "#/definitions/nzherald.AuthorResponse" } }, "type": "object" }, - "slate.Section": { + "publicnews.pagesixAuthorResponseDoc": { "properties": { - "feed_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/pagesix.AuthorResponse" } }, "type": "object" }, - "slate.articleResponseDoc": { + "publicnews.pcgamerAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/slate.ArticleResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/pcgamer.AuthorResponse" } }, "type": "object" }, - "slate.categoriesResponseDoc": { + "publicnews.pcmagAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/slate.CategoriesResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/pcmag.AuthorResponse" } }, "type": "object" }, - "slate.headlinesResponseDoc": { + "publicnews.peopleAuthorResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, "data": { - "$ref": "#/definitions/slate.HeadlinesResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "$ref": "#/definitions/people.AuthorResponse" } }, "type": "object" }, - "slickdeals.CategoriesResponse": { + "publicnews.phillyinquirerAuthorResponseDoc": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/slickdeals.CategoryRef" - }, - "type": "array" - }, - "count": { - "example": 421, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/phillyinquirer.AuthorResponse" } }, "type": "object" }, - "slickdeals.CategoryDeal": { + "publicnews.philstarAuthorResponseDoc": { "properties": { - "comment_count": { - "example": 1, - "type": "integer" - }, - "found_by": { - "example": "phoinix", - "type": "string" - }, - "is_expired": { - "example": false, - "type": "boolean" - }, - "is_frontpage": { - "example": false, - "type": "boolean" - }, - "is_new": { - "example": false, - "type": "boolean" - }, - "is_popular": { - "example": true, - "type": "boolean" - }, - "list_price": { - "example": "$150", - "type": "string" - }, - "posted_at": { - "example": "2026-08-28T14:21:36Z", - "type": "string" - }, - "price": { - "example": "$24.99", - "type": "string" - }, - "store": { - "example": "Morningsave.com", - "type": "string" - }, - "thread_id": { - "example": 19842723, - "type": "integer" - }, - "title": { - "example": "Hex Evolve Backpack Aspect Duffel Bag $24.99 Free Shipping", - "type": "string" - }, - "url": { - "type": "string" - }, - "vote_score": { - "example": 9, - "type": "integer" + "data": { + "$ref": "#/definitions/philstar.AuthorResponse" } }, "type": "object" }, - "slickdeals.CategoryRef": { + "publicnews.phonearenaAuthorResponseDoc": { "properties": { - "name": { - "example": "Laptop Bags", - "type": "string" - }, - "slug": { - "example": "laptop-bag", - "type": "string" - }, - "url": { - "example": "https://slickdeals.net/deals/laptop-bag/", - "type": "string" + "data": { + "$ref": "#/definitions/phonearena.AuthorResponse" } }, "type": "object" }, - "slickdeals.CategoryResponse": { + "publicnews.polygonAuthorResponseDoc": { "properties": { - "count": { - "example": 37, - "type": "integer" - }, - "deals": { - "items": { - "$ref": "#/definitions/slickdeals.CategoryDeal" - }, - "type": "array" - }, - "fetched_at": { - "type": "string" - }, - "slug": { - "example": "laptop-bag", - "type": "string" - }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/polygon.AuthorResponse" } }, "type": "object" }, - "slickdeals.Comment": { + "publicnews.propublicaAuthorResponseDoc": { "properties": { - "author": { - "example": "OutFr0mUndr", - "type": "string" - }, - "author_post_count": { - "example": 49, - "type": "integer" - }, - "author_title": { - "example": "L2: Beginner", - "type": "string" - }, - "content": { - "example": "Shows as $358.53 for me...", - "type": "string" - }, - "content_html": { - "type": "string" - }, - "funny_count": { - "type": "integer" - }, - "helpful_count": { - "type": "integer" - }, - "like_count": { - "example": 1, - "type": "integer" - }, - "not_helpful_count": { - "type": "integer" - }, - "permalink": { - "type": "string" - }, - "post_id": { - "example": 186692484, - "type": "integer" - }, - "posted_at": { - "example": "2026-09-14T19:17:54-07:00", - "type": "string" + "data": { + "$ref": "#/definitions/propublica.AuthorResponse" } }, "type": "object" }, - "slickdeals.CommentsResponse": { + "publicnews.punchAuthorResponseDoc": { "properties": { - "comments": { - "items": { - "$ref": "#/definitions/slickdeals.Comment" - }, - "type": "array" - }, - "count": { - "example": 4, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "has_more": { - "type": "boolean" - }, - "source_url": { - "type": "string" - }, - "thread_id": { - "example": 20015817, - "type": "integer" + "data": { + "$ref": "#/definitions/punch.AuthorResponse" } }, "type": "object" }, - "slickdeals.Deal": { + "publicnews.rapplerAuthorResponseDoc": { "properties": { - "brand": { - "example": "Microsoft", - "type": "string" - }, - "category": { - "description": "Category/SubCategory/CategoryPaths are Slickdeals' modern product\ntaxonomy for this deal (distinct from Forum/ForumID above -- these\nare two different id spaces Slickdeals maintains in parallel).", - "example": "Computers", - "type": "string" - }, - "category_paths": { - "example": [ - "Computers > Laptops", - "Computers" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "comment_count": { - "example": 4, - "type": "integer" - }, - "cta_text": { - "example": "Get Deal at eBay", - "type": "string" - }, - "deal_url": { - "description": "DealURL is Slickdeals' own outbound/affiliate redirect to the\nmerchant; following it lands on the store's own page for this deal.", - "type": "string" - }, - "description": { - "type": "string" - }, - "description_html": { - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "final_price": { - "example": "$358.53", - "type": "string" - }, - "forum": { - "description": "Forum is Slickdeals' own legacy sub-forum name the thread was posted\nin (e.g. \"Hot Deals\") -- a different, coarser taxonomy than\nCategory/SubCategory. ForumID is its numeric legacy id.", - "example": "Hot Deals", - "type": "string" - }, - "forum_id": { - "example": 9, - "type": "integer" - }, - "found_by": { - "description": "FoundBy is the public Slickdeals username who posted the deal --\nthe same public-forum-post attribution class this repo already\nexposes for Reddit.", - "example": "BML6182", - "type": "string" - }, - "found_by_profile": { - "allOf": [ - { - "$ref": "#/definitions/slickdeals.UserProfile" - } - ], - "description": "FoundByProfile is a public summary of the FoundBy user's Slickdeals\ncommunity standing -- read from the same page's own \"About the\nAuthor\" sidebar, at no additional upstream cost." - }, - "image_urls": { - "items": { - "type": "string" - }, - "type": "array" - }, - "is_expired": { - "example": false, - "type": "boolean" - }, - "list_price": { - "example": "$1,200.00", - "type": "string" - }, - "posted_at": { - "example": "2026-09-14T19:13:22-07:00", - "type": "string" - }, - "related_deals": { - "description": "RelatedDeals is Slickdeals' own \"Popular Deals\"/\"Trending Deals\"\nsidebar shown alongside this thread -- read from the same page\nfetch as the rest of this record, at no additional upstream cost.", - "items": { - "$ref": "#/definitions/slickdeals.RelatedDeal" - }, - "type": "array" - }, - "source_url": { - "type": "string" - }, - "store": { - "example": "eBay", - "type": "string" - }, - "sub_category": { - "example": "Laptops", - "type": "string" - }, - "thread_id": { - "example": 20015817, - "type": "integer" - }, - "title": { - "example": "Microsoft Surface Laptop 5 13.5\" 2.5GHz/16GB/256GB - Refurb w/Warranty $358.53", - "type": "string" - }, - "url": { - "example": "https://slickdeals.net/f/20015817-microsoft-surface-laptop-5-13-5-2-5ghz-16gb-256gb-refurb-w-warranty-358-53", - "type": "string" - }, - "vote_score": { - "example": -1, - "type": "integer" + "data": { + "$ref": "#/definitions/rappler.AuthorResponse" } }, "type": "object" }, - "slickdeals.DealTypeRef": { + "publicnews.rawstoryAuthorResponseDoc": { "properties": { - "id": { - "example": 1774, - "type": "integer" - }, - "name": { - "example": "Free / Freebie", - "type": "string" + "data": { + "$ref": "#/definitions/rawstory.AuthorResponse" } }, "type": "object" }, - "slickdeals.DealTypesResponse": { + "publicnews.reachAuthorResponseDoc": { "properties": { - "count": { - "example": 10, - "type": "integer" - }, - "deal_types": { - "items": { - "$ref": "#/definitions/slickdeals.DealTypeRef" - }, - "type": "array" - }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/reachplc.AuthorResponse" } }, "type": "object" }, - "slickdeals.ForumRef": { + "publicnews.rnzAuthorResponseDoc": { "properties": { - "id": { - "example": 9, - "type": "integer" + "data": { + "$ref": "#/definitions/rnz.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.rollingStoneAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/rollingstone.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.rteAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/rte.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.salonAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/salon.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.sbsnewsAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sbsnews.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.scienceAlertAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sciencealert.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.screenrantAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/screenrant.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.seattleTimesAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/seattletimes.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.sectionsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/newsplatform.SectionsResponse" + } + }, + "type": "object" + }, + "publicnews.sevennewsauAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sevennewsau.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.sfgateAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sfgate.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.skyNewsAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/skynews.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.skyNewsVideoResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/skynews.VideoResponse" + } + }, + "type": "object" + }, + "publicnews.skyNewsVideosResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/skynews.VideosResponse" + } + }, + "type": "object" + }, + "publicnews.skySportsAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/skysports.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.smhArticleResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/smh.ArticleResponse" + } + }, + "type": "object" + }, + "publicnews.smhAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/smh.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.spaceAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/space.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.sportingNewsAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportingnews.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaCollegeBasketballScheduleOptionsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.CollegeBasketballScheduleOptionsResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaCollegeBasketballScheduleResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.CollegeBasketballScheduleResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaCricketCommentaryResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.CricketCommentaryResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaCricketMatchResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.CricketMatchResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaDepthChartResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.DepthChartResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaDraftPicksOptionsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.DraftPicksOptionsResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaDraftPicksResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.DraftPicksResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaEventCalendarOptionsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.EventCalendarOptionsResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaEventCalendarResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.EventCalendarResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaFeedResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.FeedResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaFootballDataResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.FootballDataResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaFootballOptionsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.FootballOptionsResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaGuessingGameEntitiesResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.GuessingGameEntitiesResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaGuessingGameResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.GuessingGameDataResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaGuessingGamesResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.GuessingGamesResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaNBAQueriesResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.NBAQueriesResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaPageOptionsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.PageOptionsResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaPlayerStatsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.PlayerStatsResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaProfileResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.ProfileResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaQuizCategoriesResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.QuizCategoriesResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaQuizResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.QuizResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaQuizzesResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.QuizzesResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaSalaryCapResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.SalaryCapResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaSectionsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.SectionsResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaSitemapItemsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.SitemapItemsResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaSitemapsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.SitemapsResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaStandingsOptionsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.StandingsOptionsResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaTablesResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.TablesResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaTaxonomySearchResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.TaxonomySearchResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaTopicResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.TopicResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaTradeValuesResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.TradeValuesResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaTransactionsOptionsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.TransactionsOptionsResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaTransactionsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.TransactionsResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaVideoResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.VideoResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaVideosResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.VideosResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaWikiActivityResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.WikiActivityResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaWikiArticleResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.WikiArticleResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaWikiCategoriesResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.WikiCategoriesResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaWikiContributorsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.WikiContributorsResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaWikiIssuesResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.WikiIssuesResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaWikiOptionsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.WikiOptionsResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaWikiPagesResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.WikiPagesResponse" + } + }, + "type": "object" + }, + "publicnews.sportskeedaWikiSummaryResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sportskeeda.WikiSummaryResponse" + } + }, + "type": "object" + }, + "publicnews.standardAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/standard.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.straitstimesAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/straitstimes.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.stuffAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/stuff.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.sunAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/sun.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.techCrunchAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/techcrunch.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.techradarAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/techradar.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.telegraphAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/telegraph.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.theBlazeAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/theblaze.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.theHillAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/thehill.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.theHinduAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/thehindu.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.theJournalAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/thejournal.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.theageArticleResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/theage.ArticleResponse" + } + }, + "type": "object" + }, + "publicnews.theageAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/theage.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.thenextwebAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/thenextweb.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.thestarmyAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/thestarmy.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.thevergeAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/theverge.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.thisIsMoneyAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/thisismoney.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.timeAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/time.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.timesOfIndiaAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/timesofindia.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.timesOfIsraelAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/timesofisrael.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.tmzAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/tmz.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.tomsguideAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/tomsguide.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.tomshardwareAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/tomshardware.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.torontoStarAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/torontostar.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.townhallAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/townhall.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.usmagazineAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/usmagazine.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.vanguardngAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/vanguardng.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.vanityFairAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/vanityfair.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.varietyAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/variety.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.viceAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/vice.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.voxAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/vox.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.wccftechAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/wccftech.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.xdaAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/xda.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.yardbarkerAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/yardbarker.AuthorResponse" + } + }, + "type": "object" + }, + "publicnews.zdnetAuthorResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/zdnet.AuthorResponse" + } + }, + "type": "object" + }, + "punch.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, "name": { - "example": "Hot Deals", "type": "string" }, + "total_pages": { + "type": "integer" + }, "url": { - "example": "https://slickdeals.net/forums/forumdisplay.php?f=9", "type": "string" } }, "type": "object" }, - "slickdeals.ForumsResponse": { + "quince.CategoriesResponse": { "properties": { - "count": { - "example": 26, - "type": "integer" + "business_departments": { + "items": { + "$ref": "#/definitions/quince.FacetCount" + }, + "type": "array" + }, + "categories": { + "items": { + "$ref": "#/definitions/quince.FacetCount" + }, + "type": "array" + }, + "colors": { + "items": { + "$ref": "#/definitions/quince.FacetCount" + }, + "type": "array" + }, + "departments": { + "items": { + "$ref": "#/definitions/quince.FacetCount" + }, + "type": "array" }, "fetched_at": { "type": "string" }, - "forums": { + "materials": { "items": { - "$ref": "#/definitions/slickdeals.ForumRef" + "$ref": "#/definitions/quince.FacetCount" }, "type": "array" }, - "source_url": { + "sizes": { + "items": { + "$ref": "#/definitions/quince.FacetCount" + }, + "type": "array" + } + }, + "type": "object" + }, + "quince.FacetCount": { + "properties": { + "count": { + "type": "integer" + }, + "value": { "type": "string" } }, "type": "object" }, - "slickdeals.FrontpageResponse": { + "quince.NavCategory": { "properties": { - "deals": { + "groups": { "items": { - "$ref": "#/definitions/slickdeals.SearchAdvancedResult" + "$ref": "#/definitions/quince.NavGroup" }, "type": "array" }, - "fetched_at": { + "slug": { "type": "string" }, - "has_next_page": { - "description": "HasNextPage reflects whether the page itself exposed a further page\nlink, not a total page count -- Slickdeals' own homepage pagination\nis next/prev-only, with no total page count in its state payload.", - "example": true, - "type": "boolean" - }, - "page": { - "example": 1, - "type": "integer" - }, - "source_url": { + "title": { "type": "string" } }, "type": "object" }, - "slickdeals.PrimaryCategoriesResponse": { + "quince.NavGroup": { "properties": { - "categories": { + "links": { "items": { - "$ref": "#/definitions/slickdeals.CategoryRef" + "$ref": "#/definitions/quince.NavLink" }, "type": "array" }, - "count": { - "example": 13, - "type": "integer" - }, - "source_url": { + "title": { "type": "string" } }, "type": "object" }, - "slickdeals.PrimaryCategoryResponse": { + "quince.NavLink": { "properties": { - "count": { - "example": 40, - "type": "integer" + "slug": { + "type": "string" }, - "deals": { + "text": { + "type": "string" + } + }, + "type": "object" + }, + "quince.NavigationResponse": { + "properties": { + "categories": { "items": { - "$ref": "#/definitions/slickdeals.CategoryDeal" + "$ref": "#/definitions/quince.NavCategory" }, "type": "array" }, "fetched_at": { "type": "string" }, - "slug": { - "example": "laptop-deals", - "type": "string" - }, "source_url": { "type": "string" } }, "type": "object" }, - "slickdeals.RelatedDeal": { + "quince.Product": { "properties": { - "comment_count": { - "type": "integer" + "business_department": { + "type": "string" }, - "final_price": { - "example": "$22", + "category": { "type": "string" }, - "found_by": { - "example": "iconian", + "color": { "type": "string" }, - "list_price": { - "example": "$37", + "currency": { "type": "string" }, - "posted_at": { + "department": { "type": "string" }, - "source": { - "description": "Source names which sidebar this entry came from: \"popular\" or\n\"trending\".", - "example": "popular", + "description": { "type": "string" }, - "thread_id": { - "example": 20013396, - "type": "integer" + "gender": { + "type": "string" }, - "title": { - "example": "20,000mAh BooKoo A9 2000A Car Battery Jumper w/ QC 3.0, PD 18W $22.20 + Free S/H", + "handle": { "type": "string" }, - "url": { + "image_url": { "type": "string" }, - "vote_score": { - "example": 5, - "type": "integer" - } - }, - "type": "object" - }, - "slickdeals.SearchAdvancedResponse": { - "properties": { - "facets": { + "in_stock": { + "type": "boolean" + }, + "material": { "items": { - "$ref": "#/definitions/slickdeals.SearchFacetGroup" + "type": "string" }, "type": "array" }, - "fetched_at": { - "type": "string" + "max_price": { + "type": "number" }, - "page": { - "example": 1, - "type": "integer" + "min_price": { + "type": "number" }, - "per_page": { - "example": 40, + "primary_colors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "product_id": { "type": "integer" }, - "query": { - "example": "laptop", + "product_type": { "type": "string" }, - "result_count": { - "example": 915, - "type": "integer" - }, - "results": { + "sizes": { "items": { - "$ref": "#/definitions/slickdeals.SearchAdvancedResult" + "type": "string" }, "type": "array" }, - "source_url": { + "title": { "type": "string" }, - "total_pages": { - "example": 23, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "slickdeals.SearchAdvancedResult": { + "quince.ProductFAQItem": { "properties": { - "comment_count": { - "example": 4, - "type": "integer" + "answer": { + "type": "string" }, - "discount": { - "example": 26, - "type": "integer" + "question": { + "type": "string" + } + }, + "type": "object" + }, + "quince.ProductFAQResponse": { + "properties": { + "fetched_at": { + "type": "string" }, - "final_price": { - "example": "$66", + "handle": { "type": "string" }, - "forum_id": { - "example": 9, - "type": "integer" + "questions": { + "items": { + "$ref": "#/definitions/quince.ProductFAQItem" + }, + "type": "array" }, - "found_by": { - "example": "htp182", + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "quince.ProductOptionGroup": { + "properties": { + "name": { "type": "string" }, - "has_rebate": { - "example": false, - "type": "boolean" - }, - "image_url": { + "values": { + "items": { + "$ref": "#/definitions/quince.ProductOptionValue" + }, + "type": "array" + } + }, + "type": "object" + }, + "quince.ProductOptionValue": { + "properties": { + "display_name": { "type": "string" }, - "is_expired": { - "example": false, - "type": "boolean" + "display_type": { + "type": "string" }, - "is_fire_deal": { - "description": "IsFireDeal and HasRebate are populated on Frontpage's own deal cards;\nGET /slickdeals/search/advanced's result cards were not observed\ncarrying either field live, so they read as their zero value there.", - "example": false, - "type": "boolean" + "hex_code": { + "type": "string" }, - "is_frontpage": { - "example": true, - "type": "boolean" + "value": { + "type": "string" + } + }, + "type": "object" + }, + "quince.ProductResponse": { + "properties": { + "average_rating": { + "type": "number" }, - "is_new": { - "example": false, - "type": "boolean" + "country": { + "type": "string" }, - "is_popular": { - "example": true, - "type": "boolean" + "description": { + "type": "string" }, - "list_price": { - "example": "$90", + "fetched_at": { "type": "string" }, - "posted_at": { + "gender": { "type": "string" }, - "store": { - "example": "Newegg", + "handle": { "type": "string" }, - "store_id": { - "example": 701, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "options": { + "items": { + "$ref": "#/definitions/quince.ProductOptionGroup" + }, + "type": "array" + }, + "product_id": { "type": "integer" }, - "thread_id": { - "example": 19618338, + "product_type": { + "type": "string" + }, + "review_count": { "type": "integer" }, + "source_url": { + "type": "string" + }, "title": { - "example": "Anker 4-Port up to 140W USB-C Laptop Charger w/ 5' Cable", "type": "string" }, "url": { "type": "string" }, - "views_count": { - "example": 3274, - "type": "integer" - }, - "vote_score": { - "example": 20, - "type": "integer" + "variants": { + "items": { + "$ref": "#/definitions/quince.ProductVariant" + }, + "type": "array" } }, "type": "object" }, - "slickdeals.SearchFacetGroup": { + "quince.ProductReviewsResponse": { "properties": { - "label": { - "example": "Categories", + "average_rating": { + "type": "number" + }, + "fetched_at": { "type": "string" }, - "options": { + "handle": { + "type": "string" + }, + "review_count": { + "type": "integer" + }, + "reviews": { "items": { - "$ref": "#/definitions/slickdeals.SearchFacetOption" + "$ref": "#/definitions/quince.Review" }, "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "slickdeals.SearchFacetOption": { + "quince.ProductVariant": { "properties": { - "count": { - "example": 27, + "currency": { + "type": "string" + }, + "id": { "type": "integer" }, - "label": { - "example": "Laptops", + "in_stock": { + "type": "boolean" + }, + "options": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "price": { + "type": "number" + }, + "savings": { "type": "string" }, - "parent_value": { - "description": "ParentValue is set when this option is a subcategory of another\noption in the same group (Slickdeals' own Categories facet nests\none level deep).", + "sku": { "type": "string" }, - "value": { - "example": "34", + "status": { + "type": "string" + }, + "title": { "type": "string" + }, + "traditional_retail_price": { + "type": "number" } }, "type": "object" }, - "slickdeals.SearchResponse": { + "quince.Review": { + "properties": { + "author": { + "type": "string" + }, + "body": { + "type": "string" + }, + "date_published": { + "type": "string" + }, + "rating": { + "type": "number" + } + }, + "type": "object" + }, + "quince.SearchResponse": { "properties": { + "category": { + "type": "string" + }, + "color": { + "type": "string" + }, "count": { - "example": 25, "type": "integer" }, + "country": { + "type": "string" + }, + "department": { + "type": "string" + }, "fetched_at": { "type": "string" }, - "query": { - "example": "laptop", + "limit": { + "type": "integer" + }, + "material": { "type": "string" }, - "results": { + "max_price": { + "type": "number" + }, + "min_price": { + "type": "number" + }, + "page": { + "type": "integer" + }, + "products": { "items": { - "$ref": "#/definitions/slickdeals.SearchResult" + "$ref": "#/definitions/quince.Product" }, "type": "array" }, + "query": { + "type": "string" + }, + "size": { + "type": "string" + }, "source_url": { "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" } }, "type": "object" }, - "slickdeals.SearchResult": { + "quince.SitemapItem": { "properties": { - "found_by": { - "example": "BML6182", - "type": "string" - }, - "price": { - "example": "$358.53", + "loc": { "type": "string" }, - "published_at": { - "example": "2026-09-15T02:13:22Z", + "type": { "type": "string" - }, - "store": { - "example": "ebay.com", + } + }, + "type": "object" + }, + "quince.SitemapURLItem": { + "properties": { + "handle": { "type": "string" }, - "thread_id": { - "example": 20015817, - "type": "integer" - }, - "title": { - "description": "Title is Slickdeals' own thread title, which conventionally embeds\nthe deal price (e.g. \"... $358.53\") -- Price is a best-effort\nconvenience field extracted from it, not a separately structured\nupstream field.", - "example": "Microsoft Surface Laptop 5 13.5\" 2.5GHz/16GB/256GB - Refurb w/Warranty $358.53", + "loc": { "type": "string" }, - "url": { - "example": "https://slickdeals.net/f/20015817-microsoft-surface-laptop-5-13-5-2-5ghz-16gb-256gb-refurb-w-warranty-358-53", + "type": { "type": "string" - }, - "vote_score": { - "example": 16, - "type": "integer" } }, "type": "object" }, - "slickdeals.UserProfile": { + "quince.SitemapURLsResponse": { "properties": { - "avatar_url": { + "fetched_at": { "type": "string" }, - "deals_posted": { - "example": 175, + "limit": { "type": "integer" }, - "join_date": { - "example": "Nov 2017", + "source_url": { "type": "string" }, - "reputation": { - "example": 685, - "type": "integer" + "type": { + "type": "string" }, - "total_comments": { - "example": 519, - "type": "integer" + "urls": { + "items": { + "$ref": "#/definitions/quince.SitemapURLItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "quince.SitemapsResponse": { + "properties": { + "fetched_at": { + "type": "string" }, - "total_votes": { - "example": 728, - "type": "integer" + "sitemaps": { + "items": { + "$ref": "#/definitions/quince.SitemapItem" + }, + "type": "array" }, - "user_id": { - "example": "13480663", + "source_url": { "type": "string" } }, "type": "object" }, - "slickdeals.categoriesResponseDoc": { + "quince.SuggestResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "fetched_at": { + "type": "string" }, - "data": { - "$ref": "#/definitions/slickdeals.CategoriesResponse" + "query": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "source_url": { + "type": "string" + }, + "suggestions": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "slickdeals.categoryResponseDoc": { + "quince.categoriesResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/slickdeals.CategoryResponse" + "$ref": "#/definitions/quince.CategoriesResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "slickdeals.commentsResponseDoc": { + "quince.navigationResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/slickdeals.CommentsResponse" + "$ref": "#/definitions/quince.NavigationResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "slickdeals.dealResponseDoc": { + "quince.productFAQResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/slickdeals.Deal" + "$ref": "#/definitions/quince.ProductFAQResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "slickdeals.dealTypesResponseDoc": { + "quince.productResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/slickdeals.DealTypesResponse" + "$ref": "#/definitions/quince.ProductResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "slickdeals.forumsResponseDoc": { + "quince.productReviewsResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/slickdeals.ForumsResponse" + "$ref": "#/definitions/quince.ProductReviewsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "slickdeals.frontpageResponseDoc": { + "quince.searchResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/slickdeals.FrontpageResponse" + "$ref": "#/definitions/quince.SearchResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "slickdeals.primaryCategoriesResponseDoc": { + "quince.sitemapURLsResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/slickdeals.PrimaryCategoriesResponse" + "$ref": "#/definitions/quince.SitemapURLsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "slickdeals.primaryCategoryResponseDoc": { + "quince.sitemapsResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/slickdeals.PrimaryCategoryResponse" + "$ref": "#/definitions/quince.SitemapsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "slickdeals.searchAdvancedResponseDoc": { + "quince.suggestResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/slickdeals.SearchAdvancedResponse" + "$ref": "#/definitions/quince.SuggestResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "slickdeals.searchResponseDoc": { + "qwant.suggestResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/slickdeals.SearchResponse" + "$ref": "#/definitions/suggest.Response" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "sloanreview.ArticleIndexItem": { + "racing.RacingHorse": { "properties": { - "last_modified": { + "age": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "sloanreview.ArticleResponse": { - "properties": { - "archive_timestamp": { + "color": { "type": "string" }, - "archive_url": { + "dam_name": { "type": "string" }, - "authors": { + "name": { "type": "string" }, - "description": { + "sex": { "type": "string" }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" + "sire_name": { + "type": "string" }, - "published_at": { + "where_bred": { "type": "string" }, - "title": { + "year_of_birth": { + "type": "integer" + } + }, + "type": "object" + }, + "racing.RacingRace": { + "properties": { + "post_time_utc": { "type": "string" }, - "url": { + "race_id": { "type": "string" }, - "word_count": { + "race_number": { "type": "integer" + }, + "status": { + "type": "string" + }, + "track_id": { + "type": "string" + }, + "track_name": { + "type": "string" } }, "type": "object" }, - "sloanreview.ArticlesResponse": { + "racing.RacingRaceCard": { "properties": { - "has_next": { - "type": "boolean" + "distance": { + "type": "string" }, - "items": { + "entries": { "items": { - "$ref": "#/definitions/sloanreview.ArticleIndexItem" + "$ref": "#/definitions/racing.RacingRaceEntry" }, "type": "array" }, - "page": { + "entry_count": { "type": "integer" }, - "page_size": { + "has_changes": { + "type": "boolean" + }, + "has_results": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "live_odds_available": { + "type": "boolean" + }, + "live_stream_status": { + "type": "string" + }, + "name": { + "type": "string" + }, + "number": { "type": "integer" }, - "total": { + "post_time_utc": { + "type": "string" + }, + "purse": { "type": "integer" }, - "total_pages": { + "replay_status": { + "type": "string" + }, + "runner_count": { "type": "integer" + }, + "status": { + "type": "string" + }, + "surface": { + "type": "string" + }, + "surface_condition": { + "type": "string" + }, + "track_type": { + "type": "string" + }, + "type": { + "type": "string" } }, "type": "object" }, - "sloanreview.CategoriesResponse": { + "racing.RacingRaceEntry": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/sloanreview.Category" - }, - "type": "array" + "finish_position": { + "type": "integer" + }, + "horse": { + "$ref": "#/definitions/racing.RacingHorse" + }, + "live_odds": { + "type": "string" + }, + "live_odds_favorite": { + "type": "boolean" + }, + "morning_line_favorite": { + "type": "boolean" + }, + "morning_line_odds": { + "type": "string" + }, + "post_position": { + "type": "integer" + }, + "program_number": { + "type": "string" + }, + "scratched": { + "type": "boolean" + }, + "weight": { + "type": "string" } }, "type": "object" }, - "sloanreview.Category": { + "racing.RacingRaceInfoResponse": { "properties": { - "name": { + "fetched_at": { "type": "string" }, - "slug": { + "is_historic": { + "type": "boolean" + }, + "race": { + "$ref": "#/definitions/racing.RacingRaceCard" + }, + "source_url": { "type": "string" + }, + "track": { + "$ref": "#/definitions/racing.RacingRaceTrack" } }, "type": "object" }, - "sloanreview.HeadlineItem": { + "racing.RacingRaceTrack": { "properties": { - "authors": { + "code": { "type": "string" }, - "published_at": { + "country_code": { "type": "string" }, - "title": { + "id": { "type": "string" }, - "topic": { + "name": { "type": "string" }, - "url": { + "type": { "type": "string" } }, "type": "object" }, - "sloanreview.HeadlinesResponse": { - "properties": { - "items": { - "items": { - "$ref": "#/definitions/sloanreview.HeadlineItem" - }, - "type": "array" - } - }, - "type": "object" - }, - "sloanreview.TopicResponse": { + "racing.RacingScheduleResponse": { "properties": { - "items": { + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "races": { "items": { - "$ref": "#/definitions/sloanreview.HeadlineItem" + "$ref": "#/definitions/racing.RacingRace" }, "type": "array" }, - "topic": { + "source_url": { "type": "string" } }, "type": "object" }, - "sloanreview.articleResponseDoc": { + "racing.RacingTrack": { "properties": { + "active": { + "type": "boolean" + }, "code": { - "example": 200, + "type": "string" + }, + "country_code": { + "type": "string" + }, + "id": { + "type": "string" + }, + "live_stream_state": { + "type": "string" + }, + "name": { + "type": "string" + }, + "race_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sloanreview.ArticleResponse" + "start_time": { + "type": "string" }, - "msg": { - "example": "OK", + "status": { + "type": "string" + }, + "type": { "type": "string" } }, "type": "object" }, - "sloanreview.articlesResponseDoc": { + "racing.RacingTracksResponse": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sloanreview.ArticlesResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" + }, + "tracks": { + "items": { + "$ref": "#/definitions/racing.RacingTrack" + }, + "type": "array" } }, "type": "object" }, - "sloanreview.categoriesResponseDoc": { + "racing.racingRaceInfoResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sloanreview.CategoriesResponse" + "$ref": "#/definitions/racing.RacingRaceInfoResponse" }, "msg": { "example": "OK", @@ -198679,14 +205250,14 @@ }, "type": "object" }, - "sloanreview.headlinesResponseDoc": { + "racing.racingScheduleResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sloanreview.HeadlinesResponse" + "$ref": "#/definitions/racing.RacingScheduleResponse" }, "msg": { "example": "OK", @@ -198695,14 +205266,14 @@ }, "type": "object" }, - "sloanreview.topicResponseDoc": { + "racing.racingTracksResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sloanreview.TopicResponse" + "$ref": "#/definitions/racing.RacingTracksResponse" }, "msg": { "example": "OK", @@ -198711,52 +205282,25 @@ }, "type": "object" }, - "smh.ArticleResponse": { + "raisingcanes.DirectoryChild": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "is_accessible_for_free": { - "type": "boolean" - }, - "is_truncated": { - "type": "boolean" - }, - "keywords": { - "items": { - "type": "string" - }, - "type": "array" - }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" - }, - "paywalled": { + "is_store": { + "description": "IsStore marks a child that is a store page rather than another\ndirectory level -- call /raisingcanes/store with its path.", + "example": false, "type": "boolean" }, - "published_at": { - "type": "string" - }, - "section": { + "name": { + "example": "Louisiana", "type": "string" }, - "title": { + "path": { + "example": "la", "type": "string" }, - "updated_at": { - "type": "string" + "store_count": { + "description": "StoreCount is how many stores sit under this branch, as Yext reports\nit. Absent on the deepest level, where children are stores themselves.", + "example": 144, + "type": "integer" }, "url": { "type": "string" @@ -198764,9087 +205308,8240 @@ }, "type": "object" }, - "smh.AuthorResponse": { + "raisingcanes.DirectoryResponse": { "properties": { - "articles": { + "children": { "items": { - "$ref": "#/definitions/smh.HeadlineItem" + "$ref": "#/definitions/raisingcanes.DirectoryChild" }, "type": "array" }, - "bio": { - "type": "string" - }, - "email": { - "type": "string" + "count": { + "example": 38, + "type": "integer" }, - "image_url": { + "fetched_at": { "type": "string" }, "name": { "type": "string" }, - "social_links": { - "items": { - "type": "string" - }, - "type": "array" + "path": { + "example": "la", + "type": "string" }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "smh.HeadlineItem": { + "raisingcanes.MenuItem": { "properties": { - "author": { + "description": { + "description": "Description is Raising Cane's own published item description,\nexactly as written -- it commonly ends with a calorie count or range\n(e.g. \"... 1290 - 1720 Cal\"), but the wording is not structured\nenough to split into separate fields reliably across every item.", + "example": "4 Chicken Fingers, Crinkle-Cut Fries, One Cane's Sauce®, Texas Toast, Coleslaw, Regular Fountain Drink/Tea (22 oz.) 1290 - 1720 Cal", "type": "string" }, "image_url": { "type": "string" }, - "published_at": { - "type": "string" - }, - "summary": { - "type": "string" - }, - "title": { - "type": "string" - }, - "type": { - "type": "string" - }, - "url": { + "name": { + "example": "The Box Combo®", "type": "string" } }, "type": "object" }, - "sofascore.AchievementSeason": { + "raisingcanes.MenuResponse": { "properties": { - "season_id": { - "example": 3391, + "count": { + "example": 23, "type": "integer" }, - "year": { - "example": "23/24", + "fetched_at": { + "type": "string" + }, + "sections": { + "items": { + "$ref": "#/definitions/raisingcanes.MenuSection" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "sofascore.AveragePosition": { + "raisingcanes.MenuSection": { "properties": { - "average_x": { - "example": 64.25, - "type": "number" - }, - "average_y": { - "example": 47.8, - "type": "number" + "anchor": { + "description": "Anchor is the section's in-page anchor slug, e.g. \"combos\".", + "example": "combos", + "type": "string" }, - "player": { - "$ref": "#/definitions/sofascore.PlayerBrief" + "headline": { + "example": "Combos", + "type": "string" }, - "points_count": { - "example": 35, - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/raisingcanes.MenuItem" + }, + "type": "array" } }, "type": "object" }, - "sofascore.AveragePositionSubstitution": { + "raisingcanes.NearbyResponse": { "properties": { - "is_home": { - "type": "boolean" + "count": { + "example": 10, + "type": "integer" }, - "minute": { - "example": 60, + "fetched_at": { + "type": "string" + }, + "radius": { + "example": 25, "type": "integer" }, - "player_in": { - "$ref": "#/definitions/sofascore.PlayerBrief" + "source_url": { + "type": "string" }, - "player_out": { - "$ref": "#/definitions/sofascore.PlayerBrief" + "stores": { + "items": { + "$ref": "#/definitions/raisingcanes.NearbyStore" + }, + "type": "array" + }, + "total_in_radius": { + "description": "TotalInRadius is how many stores fall inside the radius overall, which\nis usually far more than one page. Use it with `offset` to page.", + "example": 69, + "type": "integer" } }, "type": "object" }, - "sofascore.BaseballAtBat": { + "raisingcanes.NearbyStore": { "properties": { - "away_win_probability": { - "example": 52.1, - "type": "number" + "address": { + "$ref": "#/definitions/raisingcanes.StoreAddress" }, - "away_win_probability_start": { - "example": 49, + "distance_kilometers": { + "example": 0.42, "type": "number" }, - "end_time": { - "example": "2026-10-06T22:13:59Z", - "type": "string" - }, - "end_timestamp": { - "description": "EndTimestamp is the Unix time the at-bat finished (it matches the end of\nits last pitch); EndTime is the same instant in RFC 3339.", - "example": 1791324839, - "type": "integer" - }, - "hitter": { - "$ref": "#/definitions/sofascore.PlayerBrief" + "distance_miles": { + "description": "DistanceMiles is measured from the requested coordinate.", + "example": 0.26, + "type": "number" }, - "hitter_team": { - "$ref": "#/definitions/sofascore.TeamRef" + "fulfillment_services": { + "description": "FulfillmentServices are the pickup/delivery service flags Raising\nCane's publishes for this store, e.g. IN_STORE_PICKUP,\nDELIVERY_NOT_OFFERED.", + "items": { + "type": "string" + }, + "type": "array" }, - "home_win_probability": { - "example": 47.9, + "latitude": { + "example": 40.710412, "type": "number" }, - "home_win_probability_start": { - "description": "Win probabilities are percentages. The *Start values are before the\nat-bat, the others after it.", - "example": 51, + "longitude": { + "example": -74.009937, "type": "number" }, - "id": { - "example": 2595879, - "type": "integer" + "name": { + "example": "Raising Cane's Chicken Fingers", + "type": "string" }, - "inning": { - "example": 1, - "type": "integer" + "path": { + "description": "Path is the /raisingcanes/store path for this store, so a caller can\ngo straight to the detail endpoint.", + "type": "string" }, - "inning_half": { - "description": "InningHalf is `top` or `bottom`.", - "example": "top", + "price_range": { + "description": "PriceRange is Raising Cane's own relative price tier, e.g. ONE.", + "example": "ONE", "type": "string" }, - "pitcher": { - "$ref": "#/definitions/sofascore.PlayerBrief" + "store_id": { + "example": "C986", + "type": "string" }, - "pitcher_team": { - "$ref": "#/definitions/sofascore.TeamRef" + "timezone": { + "example": "America/New_York", + "type": "string" } }, "type": "object" }, - "sofascore.BaseballFielder": { + "raisingcanes.PromotionCategory": { "properties": { - "first_name": { - "example": "Frederick", + "heading": { + "example": "Sweepstakes & Giveaways", "type": "string" }, - "jersey_number": { - "example": "5", - "type": "string" + "promotions": { + "items": { + "$ref": "#/definitions/raisingcanes.PromotionSummary" + }, + "type": "array" + } + }, + "type": "object" + }, + "raisingcanes.PromotionResponse": { + "properties": { + "description": { + "description": "Description is Raising Cane's own official-rules text for this\npromotion, kept as separate paragraphs in publication order rather\nthan joined into one string -- unlike a menu item's short blurb, this\nis often multi-paragraph legal text (eligibility, prize value,\neffective date each their own paragraph) where the paragraph breaks\ncarry real structure.", + "items": { + "type": "string" + }, + "type": "array" }, - "last_name": { - "example": "Freeman", + "fetched_at": { "type": "string" }, - "player_id": { - "example": 961444, - "type": "integer" + "path": { + "example": "first-50-promotion", + "type": "string" }, - "sequence": { - "example": 1, - "type": "integer" + "source_url": { + "type": "string" }, - "type": { - "description": "Type is the credit, for example `putout` or `assist`.", - "example": "putout", + "title": { + "example": "First 50 Promotion Details", "type": "string" } }, "type": "object" }, - "sofascore.BaseballPerformer": { + "raisingcanes.PromotionSummary": { "properties": { - "player": { - "$ref": "#/definitions/sofascore.PlayerBrief" - }, - "rating": { - "example": 0.503, - "type": "number" - }, - "role": { - "description": "Role is `pitcher` or `batter`.", - "example": "pitcher", + "name": { + "example": "First 50 Promotion Details", "type": "string" }, - "statistics": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "description": "Statistics is a snake_case metric map; its keys depend on the role.", - "type": "object" - }, - "team": { - "$ref": "#/definitions/sofascore.TeamRef" + "path": { + "description": "Path is the promotion's page slug, usable as the path parameter on\nGET /raisingcanes/promotion. It is empty when Raising Cane's own\nindex links a since-expired promotion back to the homepage instead\nof removing the entry (a real, observed upstream data quality\npattern) -- a caller should treat an empty path as \"no longer\nresolvable\" rather than retry it.", + "example": "first-50-promotion", + "type": "string" } }, "type": "object" }, - "sofascore.BaseballPitch": { + "raisingcanes.PromotionsResponse": { "properties": { - "at_bat_over": { - "type": "boolean" - }, - "away_team_runs": { - "example": 0, - "type": "integer" + "categories": { + "items": { + "$ref": "#/definitions/raisingcanes.PromotionCategory" + }, + "type": "array" }, - "balls": { - "example": 0, + "count": { + "example": 53, "type": "integer" }, - "bunt": { - "type": "boolean" + "fetched_at": { + "type": "string" }, - "double_play": { - "type": "boolean" - }, - "end_time": { - "example": "2026-10-06T22:12:04Z", - "type": "string" - }, - "fielders": { - "items": { - "$ref": "#/definitions/sofascore.BaseballFielder" - }, - "type": "array" - }, - "hit": { - "type": "boolean" - }, - "hit_hardness": { - "example": "medium", + "source_url": { "type": "string" - }, - "hit_location": { - "example": "20", + } + }, + "type": "object" + }, + "raisingcanes.StoreAddress": { + "properties": { + "city": { + "example": "Gonzales", "type": "string" }, - "hit_trajectory": { - "example": "ground_ball", + "country": { + "example": "US", "type": "string" }, - "hit_type": { - "example": "GB", + "line1": { + "example": "625 Airline Hwy", "type": "string" }, - "hit_x": { - "example": 164.06, - "type": "number" - }, - "hit_y": { - "example": 164.01, - "type": "number" - }, - "hitter_hand": { - "example": "R", + "line2": { "type": "string" }, - "home_team_runs": { - "example": 0, - "type": "integer" - }, - "id": { - "example": 10178342, - "type": "integer" - }, - "inning": { - "example": 1, - "type": "integer" - }, - "inning_half": { - "example": "top", + "postal_code": { + "example": "70737", "type": "string" }, - "mlb_x": { - "example": 137.94, - "type": "number" - }, - "mlb_y": { - "example": 184.98, - "type": "number" - }, - "mlb_zone": { - "example": 7, - "type": "integer" - }, - "outcome": { - "description": "Outcome is SofaScore's result code for the pitch. Seen: `bB` ball, `kKL`\nstrike looking, `kKS` strike swinging, `kF` foul, `aS` hit into play,\n`oFO` fly out, `oLO` line out, `oGO` ground out.", - "example": "kKL", + "region": { + "example": "LA", "type": "string" - }, - "outs": { - "example": 0, - "type": "integer" - }, - "passed_ball": { + } + }, + "type": "object" + }, + "raisingcanes.StoreHours": { + "properties": { + "closed": { + "description": "Closed is true when Raising Cane's publishes the day with no open\ninterval.", + "example": false, "type": "boolean" }, - "pitch_code": { - "example": "FF", + "closes": { + "example": "00:00", "type": "string" }, - "pitch_count": { - "example": 1, - "type": "integer" - }, - "pitch_description": { - "example": "Four-Seam Fastball", + "day_of_week": { + "example": "Monday", "type": "string" }, - "pitch_speed": { - "description": "PitchSpeed is in kilometres per hour.", - "example": 158.04, - "type": "number" - }, - "pitch_type": { - "description": "PitchType is the short pitch-type code and PitchDescription its name,\nfor example `FA` and `Four-Seam Fastball`.", - "example": "FA", + "opens": { + "example": "09:00", "type": "string" + } + }, + "type": "object" + }, + "raisingcanes.StoreResponse": { + "properties": { + "address": { + "$ref": "#/definitions/raisingcanes.StoreAddress" }, - "pitch_x": { - "description": "PitchX and PitchY are SofaScore's plate-location plot units. MLBX, MLBY and\nMLBZone are the league tracking location and zone as provided.", - "example": 76, - "type": "integer" + "amenities": { + "description": "Amenities are Raising Cane's own per-store amenity labels, e.g.\nDRIVE_THRU, LATE_NIGHT, CURBSIDE_PICKUP.", + "items": { + "type": "string" + }, + "type": "array" }, - "pitch_y": { - "example": -47, - "type": "integer" + "dine_in_hours": { + "description": "DineInHours and DriveThroughHours are Raising Cane's own per-channel\nhours. They commonly match Hours but are published separately and can\ndiffer (e.g. a later drive-thru close).", + "items": { + "$ref": "#/definitions/raisingcanes.StoreHours" + }, + "type": "array" }, - "pitch_zone": { - "example": 9, - "type": "integer" + "drive_through_hours": { + "items": { + "$ref": "#/definitions/raisingcanes.StoreHours" + }, + "type": "array" }, - "pitcher_hand": { - "example": "L", + "fetched_at": { "type": "string" }, - "runners": { + "fulfillment_services": { + "description": "FulfillmentServices are the pickup/delivery service flags Raising\nCane's publishes for this store, e.g. IN_STORE_PICKUP,\nCURBSIDE_PICKUP, DELIVERY_NOT_OFFERED.", "items": { - "$ref": "#/definitions/sofascore.BaseballRunner" + "type": "string" }, "type": "array" }, - "sequence": { - "example": 3, - "type": "integer" - }, - "start_time": { - "example": "2026-10-06T22:11:49Z", + "google_place_id": { "type": "string" }, - "status": { - "example": "official", - "type": "string" + "hours": { + "description": "Hours is the store's general published week of hours.", + "items": { + "$ref": "#/definitions/raisingcanes.StoreHours" + }, + "type": "array" }, - "strike_zone_bottom": { - "example": 1.563, + "latitude": { + "example": 30.2371547, "type": "number" }, - "strike_zone_top": { - "example": 3.096, + "longitude": { + "example": -90.9132179, "type": "number" }, - "strikes": { - "example": 1, - "type": "integer" - }, - "triple_play": { - "type": "boolean" - }, - "type": { - "description": "Type is the upstream event type, `pitch` for a thrown pitch.", - "example": "pitch", + "name": { + "example": "Raising Cane's Chicken Fingers", "type": "string" }, - "wild_pitch": { - "type": "boolean" - } - }, - "type": "object" - }, - "sofascore.BaseballRunner": { - "properties": { - "description": { + "path": { "type": "string" }, - "ending_base": { - "example": 1, - "type": "integer" - }, - "jersey_number": { - "example": "50", + "phone_number": { + "example": "(225) 407-4134", "type": "string" }, - "out": { - "type": "boolean" - }, - "outcome_code": { - "example": "AD1", + "source_url": { "type": "string" }, - "player_id": { - "example": 960736, - "type": "integer" - }, - "player_name": { - "example": "Mookie Betts", + "store_id": { + "example": "C10", "type": "string" - }, - "starting_base": { - "description": "StartingBase and EndingBase are base numbers, 0 for the batter's box and\n1 to 3 for the bases.", - "example": 0, - "type": "integer" } }, "type": "object" }, - "sofascore.BestPlayer": { + "raisingcanes.directoryResponseDoc": { "properties": { - "label": { - "example": "rating", - "type": "string" - }, - "player": { - "$ref": "#/definitions/sofascore.PlayerBrief" - }, - "team": { - "$ref": "#/definitions/sofascore.TeamRef" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "value": { - "example": 9.8, - "type": "number" + "data": { + "$ref": "#/definitions/raisingcanes.DirectoryResponse" }, - "value_text": { - "description": "ValueText carries the upstream value verbatim when it is not a number,\nfor example the en dash an ice hockey goalkeeper gets next to the `pts`\nlabel. It is omitted whenever Value is set.", - "example": "-", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "sofascore.CategoriesResponse": { + "raisingcanes.menuResponseDoc": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/sofascore.Category" - }, - "type": "array" - }, - "count": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/raisingcanes.MenuResponse" }, - "sport": { - "example": "football", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "sofascore.Category": { + "raisingcanes.nearbyResponseDoc": { "properties": { - "alpha2": { - "example": "EN", - "type": "string" - }, - "flag": { - "example": "england", - "type": "string" - }, - "id": { - "example": 1, + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "name": { - "example": "England", - "type": "string" - }, - "priority": { - "example": 10, - "type": "integer" + "data": { + "$ref": "#/definitions/raisingcanes.NearbyResponse" }, - "slug": { - "example": "england", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "sofascore.CategoryTournament": { + "raisingcanes.promotionResponseDoc": { "properties": { - "category_id": { - "example": 1, - "type": "integer" - }, - "category_name": { - "example": "England", - "type": "string" - }, - "id": { - "example": 17, + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "name": { - "example": "Premier League", - "type": "string" - }, - "slug": { - "example": "premier-league", - "type": "string" + "data": { + "$ref": "#/definitions/raisingcanes.PromotionResponse" }, - "user_count": { - "example": 1234567, - "type": "integer" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "sofascore.CategoryTournamentsResponse": { + "raisingcanes.promotionsResponseDoc": { "properties": { - "category_id": { - "type": "integer" - }, - "count": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/raisingcanes.PromotionsResponse" }, - "tournaments": { - "items": { - "$ref": "#/definitions/sofascore.CategoryTournament" - }, - "type": "array" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "sofascore.CompetitionRef": { + "raisingcanes.storeResponseDoc": { "properties": { - "id": { - "example": 18, + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "name": { - "example": "Championship", - "type": "string" + "data": { + "$ref": "#/definitions/raisingcanes.StoreResponse" }, - "slug": { - "example": "championship", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "sofascore.Coordinates": { + "rappler.AuthorArticle": { "properties": { - "x": { - "type": "number" + "published_at": { + "type": "string" }, - "y": { - "type": "number" + "section": { + "type": "string" }, - "z": { - "type": "number" + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "sofascore.CricketBattingLine": { + "rappler.AuthorResponse": { "properties": { - "balls": { - "example": 12, - "type": "integer" - }, - "bowler": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.PlayerBrief" - } - ], - "description": "Bowler is the bowler credited with the wicket and Fielder the catcher or\nstumper, when SofaScore lists them." + "articles": { + "items": { + "$ref": "#/definitions/rappler.AuthorArticle" + }, + "type": "array" }, - "dismissal": { - "description": "Dismissal is SofaScore's status text: a dismissal such as `Caught`,\n`Bowled`, `LBW`, `Stumped` or `Hit wicket`, `Not out`, or `Did not bat`.", - "example": "Caught", + "bio": { "type": "string" }, - "dismissal_code": { - "example": 3, - "type": "integer" - }, - "fall_of_wicket_over": { - "example": 3.4, - "type": "number" - }, - "fall_of_wicket_score": { - "description": "FallOfWicketScore and FallOfWicketOver give the team score and over when\nthis batter was dismissed; omitted for batters who were not dismissed.", - "example": 26, - "type": "integer" - }, - "fielder": { - "$ref": "#/definitions/sofascore.PlayerBrief" - }, - "fours": { - "example": 2, - "type": "integer" + "name": { + "type": "string" }, - "player": { - "$ref": "#/definitions/sofascore.PlayerBrief" + "slug": { + "type": "string" }, - "runs": { - "example": 12, - "type": "integer" + "social_links": { + "items": { + "type": "string" + }, + "type": "array" }, - "scorecard_name": { - "description": "ScorecardName is the short name as printed on the scorecard.", - "example": "S Sudharsan", + "url": { "type": "string" - }, - "sixes": { - "example": 0, - "type": "integer" } }, "type": "object" }, - "sofascore.CricketBowlingLine": { + "rawstory.AuthorArticle": { "properties": { - "maidens": { - "example": 0, - "type": "integer" - }, - "no_balls": { - "example": 0, - "type": "integer" - }, - "overs": { - "description": "Overs uses cricket notation: 3.4 is three overs and four balls.", - "example": 4, - "type": "number" - }, - "player": { - "$ref": "#/definitions/sofascore.PlayerBrief" - }, - "runs": { - "example": 38, - "type": "integer" - }, - "scorecard_name": { - "example": "J Duffy", + "published_at": { + "description": "PublishedAt is the story's publication date (YYYY-MM-DD); the author\nlisting carries the date but not the time of day.", "type": "string" }, - "wickets": { - "example": 0, - "type": "integer" + "title": { + "type": "string" }, - "wides": { - "example": 3, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "sofascore.CricketExtras": { + "rawstory.AuthorResponse": { "properties": { - "byes": { - "example": 0, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/rawstory.AuthorArticle" + }, + "type": "array" }, - "leg_byes": { - "example": 1, - "type": "integer" + "bio": { + "type": "string" }, - "no_balls": { - "example": 0, - "type": "integer" + "image_url": { + "type": "string" }, - "penalty": { - "example": 0, - "type": "integer" + "name": { + "type": "string" }, - "total": { - "example": 5, - "type": "integer" + "slug": { + "type": "string" }, - "wides": { - "example": 4, - "type": "integer" + "social_links": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { + "type": "string" } }, "type": "object" }, - "sofascore.CricketFallOfWicket": { + "reachplc.AuthorArticle": { "properties": { - "over": { - "example": 2.2, - "type": "number" + "label": { + "type": "string" }, - "player": { - "$ref": "#/definitions/sofascore.PlayerBrief" + "label_url": { + "type": "string" }, - "score": { - "example": 22, - "type": "integer" + "title": { + "type": "string" }, - "wicket": { - "example": 1, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "sofascore.CricketInnings": { + "reachplc.AuthorResponse": { "properties": { - "batting": { + "articles": { "items": { - "$ref": "#/definitions/sofascore.CricketBattingLine" + "$ref": "#/definitions/reachplc.AuthorArticle" }, "type": "array" }, - "batting_team": { - "$ref": "#/definitions/sofascore.TeamRef" - }, - "bowling": { - "items": { - "$ref": "#/definitions/sofascore.CricketBowlingLine" - }, - "type": "array" + "bio": { + "type": "string" }, - "bowling_team": { - "$ref": "#/definitions/sofascore.TeamRef" + "email": { + "type": "string" }, - "extras": { - "$ref": "#/definitions/sofascore.CricketExtras" + "has_next_page": { + "type": "boolean" }, - "fall_of_wickets": { - "description": "FallOfWickets is derived from the batting lines that carry a fall-of-wicket\nscore, ordered by team score and then over, and numbered from 1.", - "items": { - "$ref": "#/definitions/sofascore.CricketFallOfWicket" - }, - "type": "array" + "job_title": { + "type": "string" }, - "id": { - "example": 82607, - "type": "integer" + "name": { + "type": "string" }, - "number": { - "example": 1, + "page": { "type": "integer" }, - "overs": { - "description": "Overs uses cricket notation: 18.4 is eighteen overs and four balls.", - "example": 20, - "type": "number" - }, - "partnerships": { - "items": { - "$ref": "#/definitions/sofascore.CricketPartnership" - }, - "type": "array" + "slug": { + "type": "string" }, - "runs": { - "example": 155, - "type": "integer" + "twitter": { + "type": "string" }, - "wickets": { - "example": 8, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "sofascore.CricketPartnership": { + "reddit.ArchiveBatchSource": { "properties": { - "balls": { - "example": 14, - "type": "integer" - }, - "number": { - "description": "Number is the partnership's position in the innings, starting at 1.", - "example": 1, + "requests": { + "example": 2, "type": "integer" }, - "player1": { - "$ref": "#/definitions/sofascore.PlayerBrief" - }, - "player2": { - "$ref": "#/definitions/sofascore.PlayerBrief" + "type": { + "example": "arctic_shift", + "type": "string" }, - "runs": { - "example": 22, - "type": "integer" + "url": { + "example": "https://arctic-shift.photon-reddit.com/api/posts/ids", + "type": "string" } }, "type": "object" }, - "sofascore.CupTree": { + "reddit.ArchiveComment": { "properties": { - "current_round": { - "example": 5, - "type": "integer" + "author": { + "example": "reddit_user", + "type": "string" }, - "final_match": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.CupTreeBlock" - } - ], - "description": "FinalMatch is the final tie, repeated from the last round. It is omitted\nwhen the tree has no final yet (a qualifying tree)." + "author_flair_text": { + "type": "string" }, - "id": { - "example": 10850333, - "type": "integer" + "author_fullname": { + "type": "string" }, - "name": { - "example": "UEFA Champions League 25/26, Knockout stage", + "body": { "type": "string" }, - "rounds": { - "items": { - "$ref": "#/definitions/sofascore.CupTreeRound" - }, - "type": "array" + "created_utc": { + "example": 1713484800, + "type": "integer" }, - "third_place_match": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.CupTreeBlock" - } - ], - "description": "ThirdPlaceMatch is the third-place tie, when the competition plays one." + "depth": { + "type": "integer" }, - "tournament_name": { - "example": "UEFA Champions League, Knockout stage", - "type": "string" - } - }, - "type": "object" - }, - "sofascore.CupTreeBlock": { - "properties": { - "away_score": { - "example": "1 (3)", + "distinguished": { "type": "string" }, - "block_id": { - "description": "BlockID is the identifier later blocks cite as source_block_id.", - "example": 2536336, - "type": "integer" + "id": { + "example": "kabc123", + "type": "string" }, - "event_ids": { - "description": "EventIDs are the match ids of the tie; fetch each with the event endpoint.", - "items": { - "type": "integer" - }, - "type": "array" + "link_id": { + "example": "t3_1abcxyz", + "type": "string" }, - "finished": { - "type": "boolean" + "name": { + "example": "t1_kabc123", + "type": "string" }, - "home_score": { - "description": "HomeScore and AwayScore are the scores of the participants with order 1\nand 2. They are strings because a shoot-out is appended (\"1 (4)\").", - "example": "1 (4)", + "parent_id": { + "example": "t3_1abcxyz", "type": "string" }, - "id": { - "example": 2946978, - "type": "integer" + "permalink": { + "type": "string" }, - "in_progress": { - "description": "InProgress is true while a match of the tie is being played.", - "type": "boolean" + "removed_by_category": { + "type": "string" }, - "matches": { - "description": "Matches is the scheduled length of the tie: 1 for a single match, 2 for a\ntwo-legged tie, 7 for a best-of-seven series (whether or not all seven\nwere needed), 0 for a bye.", - "example": 2, + "retrieved_on": { + "example": 1713484820, "type": "integer" }, - "order": { - "example": 2, + "score": { + "example": 3, "type": "integer" }, - "participants": { - "items": { - "$ref": "#/definitions/sofascore.CupTreeParticipant" - }, - "type": "array" - }, - "result": { - "description": "Result is the tie result as published (\"4:5\", or a text such as \"Retired\").", - "example": "4:5", + "subreddit": { + "example": "OpenAI", "type": "string" }, - "series_start_time": { - "example": "2026-02-17T20:00:00Z", + "subreddit_id": { "type": "string" - }, - "series_start_timestamp": { - "type": "integer" - }, - "venue": { - "$ref": "#/definitions/sofascore.Venue" } }, "type": "object" }, - "sofascore.CupTreeParticipant": { + "reddit.ArchiveCommentTreeEntry": { "properties": { - "order": { - "description": "Order is the side's position in the block; the block's home_score\nbelongs to order 1 and away_score to order 2.", - "example": 1, - "type": "integer" + "comment": { + "$ref": "#/definitions/reddit.ArchiveCommentTreeNode" }, - "seed": { - "description": "Seed is the draw seed or entry label (\"1\", \"WC\" for a wild card), when published.", - "example": "WC", + "kind": { + "enum": [ + "t1", + "more" + ], + "example": "t1", "type": "string" }, - "source_block_id": { - "description": "SourceBlockID is the block_id of the earlier block this side advanced from.", - "type": "integer" - }, - "team": { - "$ref": "#/definitions/sofascore.TeamRef" + "more": { + "$ref": "#/definitions/reddit.ArchiveMoreComments" + } + }, + "type": "object" + }, + "reddit.ArchiveCommentTreeNode": { + "properties": { + "comment": { + "$ref": "#/definitions/reddit.ArchiveComment" }, - "winner": { - "type": "boolean" + "replies": { + "items": { + "$ref": "#/definitions/reddit.ArchiveCommentTreeEntry" + }, + "type": "array" } }, "type": "object" }, - "sofascore.CupTreeRound": { + "reddit.ArchiveCommentsIDsResponse": { "properties": { - "blocks": { + "comments": { "items": { - "$ref": "#/definitions/sofascore.CupTreeBlock" + "$ref": "#/definitions/reddit.ArchiveComment" }, "type": "array" }, - "description": { - "example": "Quarterfinal", - "type": "string" + "missing_ids": { + "items": { + "type": "string" + }, + "type": "array" }, - "id": { + "requested_count": { "type": "integer" }, - "order": { - "example": 1, + "returned_count": { "type": "integer" }, - "round_type": { - "description": "RoundType is the upstream round code: the number of ties for the\nstandard knockout rounds (8 round of 16, 4 quarterfinals, 2 semifinals,\n1 final) and other codes (0, 101 to 105, 201 to 202) for named rounds.", - "example": 4, - "type": "integer" + "source": { + "$ref": "#/definitions/reddit.ArchiveBatchSource" } }, "type": "object" }, - "sofascore.DraftInfo": { + "reddit.ArchiveCommentsSearchResponse": { "properties": { - "end_time": { + "author": { "type": "string" }, - "end_timestamp": { - "type": "integer" - }, - "is_lottery_complete": { - "type": "boolean" - }, - "rounds": { - "example": [ - 1, - 2 - ], + "comments": { "items": { - "type": "integer" + "$ref": "#/definitions/reddit.ArchiveComment" }, "type": "array" }, - "start_time": { - "example": "2026-06-23T00:00:00Z", + "created_after": { "type": "string" }, - "start_timestamp": { + "created_before": { + "type": "string" + }, + "limit": { + "example": 25, "type": "integer" }, - "status": { - "example": "closed", + "link_id": { "type": "string" }, - "year": { - "example": 2026, - "type": "integer" - } - }, - "type": "object" - }, - "sofascore.DraftPick": { - "properties": { - "overall_pick": { - "example": 1, - "type": "integer" + "parent_id": { + "type": "string" }, - "pick_in_round": { - "example": 1, - "type": "integer" + "query": { + "type": "string" }, - "prospect": { - "$ref": "#/definitions/sofascore.DraftProspect" + "sort": { + "example": "desc", + "type": "string" }, - "round": { - "example": 1, - "type": "integer" + "source": { + "$ref": "#/definitions/reddit.SourceDetail" }, - "team": { - "$ref": "#/definitions/sofascore.TeamRef" + "subreddit": { + "type": "string" } }, "type": "object" }, - "sofascore.DraftPicksResponse": { + "reddit.ArchiveCommentsTreeResponse": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "league": { - "example": "nba", - "type": "string" - }, - "picks": { + "comments": { "items": { - "$ref": "#/definitions/sofascore.DraftPick" + "$ref": "#/definitions/reddit.ArchiveCommentTreeEntry" }, "type": "array" }, - "round": { - "example": 1, + "limit": { + "example": 50, "type": "integer" }, - "source_url": { + "parent_id": { "type": "string" }, - "teams_without_round_pick": { - "items": { - "$ref": "#/definitions/sofascore.TeamRef" - }, - "type": "array" + "post_id": { + "example": "7cff0b", + "type": "string" }, - "year": { - "example": 2025, + "source": { + "$ref": "#/definitions/reddit.SourceDetail" + }, + "start_breadth": { + "example": 2, + "type": "integer" + }, + "start_depth": { + "example": 3, "type": "integer" } }, "type": "object" }, - "sofascore.DraftProspect": { + "reddit.ArchiveMoreComments": { "properties": { - "first_name": { - "type": "string" + "children": { + "items": { + "type": "string" + }, + "type": "array" }, - "is_top_prospect": { - "type": "boolean" + "count": { + "example": 12, + "type": "integer" }, - "last_name": { - "type": "string" + "depth": { + "example": 3, + "type": "integer" }, - "name": { - "example": "Cooper Flagg", + "id": { "type": "string" }, - "player": { - "$ref": "#/definitions/sofascore.PlayerBrief" - }, - "position": { - "example": "GF", + "name": { "type": "string" }, - "school": { - "$ref": "#/definitions/sofascore.TeamRef" - }, - "school_name": { - "example": "Duke", + "parent_id": { "type": "string" } }, "type": "object" }, - "sofascore.DraftResponse": { + "reddit.ArchivePost": { "properties": { - "draft": { - "$ref": "#/definitions/sofascore.DraftInfo" - }, - "fetched_at": { + "author": { + "example": "reddit_user", "type": "string" }, - "has_lottery_draw": { - "type": "boolean" - }, - "league": { - "example": "nba", + "author_flair_text": { "type": "string" }, - "lottery_year": { - "example": 2026, - "type": "integer" - }, - "previous_draft": { - "$ref": "#/definitions/sofascore.DraftInfo" + "author_fullname": { + "type": "string" }, - "prospects_year": { - "example": 2026, + "created_utc": { + "example": 1713484800, "type": "integer" }, - "season": { - "example": 80229, - "type": "integer" + "crosspost_parent": { + "type": "string" }, - "source_url": { + "distinguished": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.EsportsCharacter": { - "properties": { - "id": { - "example": 1638, - "type": "integer" }, - "name": { - "example": "Witch Doctor", + "id": { + "example": "1abcxyz", "type": "string" }, - "slug": { - "example": "witch-doctor", + "link_flair_text": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.EsportsGame": { - "properties": { - "away_score": { - "$ref": "#/definitions/sofascore.EsportsGameScore" }, - "has_complete_statistics": { - "description": "HasCompleteStatistics reports whether the per-game statistics, lineups\nand bans are complete.", + "num_comments": { + "example": 12, + "type": "integer" + }, + "over_18": { "type": "boolean" }, - "home_score": { - "$ref": "#/definitions/sofascore.EsportsGameScore" + "post_hint": { + "type": "string" }, - "home_team_starting_side_code": { - "description": "HomeTeamStartingSideCode is SofaScore's code for the side the home team\nstarted on. In Counter-Strike 4 is terrorist and 5 is counter-terrorist.", - "example": 5, - "type": "integer" + "removed_by_category": { + "type": "string" }, - "id": { - "example": 588883, + "retrieved_on": { + "example": 1713484820, "type": "integer" }, - "length_seconds": { - "description": "LengthSeconds is the game length; omitted while the game is running.", - "example": 2543, + "score": { + "example": 42, "type": "integer" }, - "map": { - "$ref": "#/definitions/sofascore.EsportsGameMap" + "selftext": { + "type": "string" }, - "start_time": { - "example": "2026-10-04T14:23:29Z", + "spoiler": { + "type": "boolean" + }, + "subreddit": { + "example": "OpenAI", "type": "string" }, - "start_timestamp": { - "type": "integer" + "subreddit_id": { + "type": "string" }, - "status": { - "$ref": "#/definitions/sofascore.EventStatus" + "title": { + "type": "string" }, - "winner_code": { - "description": "WinnerCode is 1 for the home side, 2 for the away side, 0 until decided.", - "example": 1, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "sofascore.EsportsGameBans": { + "reddit.ArchivePostsIDsResponse": { "properties": { - "away": { + "missing_ids": { "items": { - "$ref": "#/definitions/sofascore.EsportsCharacter" + "type": "string" }, "type": "array" }, - "home": { - "items": { - "$ref": "#/definitions/sofascore.EsportsCharacter" - }, - "type": "array" - } - }, - "type": "object" - }, - "sofascore.EsportsGameLineups": { - "properties": { - "away_players": { + "posts": { "items": { - "$ref": "#/definitions/sofascore.EsportsPlayerLine" + "$ref": "#/definitions/reddit.ArchivePost" }, "type": "array" }, - "home_players": { - "items": { - "$ref": "#/definitions/sofascore.EsportsPlayerLine" - }, - "type": "array" - } - }, - "type": "object" - }, - "sofascore.EsportsGameMap": { - "properties": { - "id": { - "example": 23, + "requested_count": { "type": "integer" }, - "name": { - "example": "Ancient", - "type": "string" + "returned_count": { + "type": "integer" + }, + "source": { + "$ref": "#/definitions/reddit.ArchiveBatchSource" } }, "type": "object" }, - "sofascore.EsportsGameResponse": { + "reddit.ArchivePostsSearchResponse": { "properties": { - "bans": { - "$ref": "#/definitions/sofascore.EsportsGameBans" + "author": { + "type": "string" }, - "fetched_at": { + "created_after": { "type": "string" }, - "game_id": { - "example": 588883, + "created_before": { + "type": "string" + }, + "limit": { + "example": 25, "type": "integer" }, - "lineups": { - "$ref": "#/definitions/sofascore.EsportsGameLineups" + "posts": { + "items": { + "$ref": "#/definitions/reddit.ArchivePost" + }, + "type": "array" }, - "part": { - "example": "lineups", + "query": { "type": "string" }, - "rounds": { - "$ref": "#/definitions/sofascore.EsportsGameRounds" + "sort": { + "example": "desc", + "type": "string" }, - "source_url": { + "source": { + "$ref": "#/definitions/reddit.SourceDetail" + }, + "subreddit": { "type": "string" }, - "statistics": { - "$ref": "#/definitions/sofascore.EsportsGameStatistics" + "url": { + "type": "string" + }, + "url_exact": { + "type": "boolean" } }, "type": "object" }, - "sofascore.EsportsGameRounds": { + "reddit.ArchiveSubreddit": { "properties": { - "normaltime": { - "items": { - "$ref": "#/definitions/sofascore.EsportsRound" - }, - "type": "array" + "created_utc": { + "example": 1449870564, + "type": "integer" }, - "overtime": { - "items": { - "$ref": "#/definitions/sofascore.EsportsRound" - }, - "type": "array" + "display_name": { + "example": "OpenAI", + "type": "string" }, - "overtime_chunk_size": { - "example": 3, + "id": { + "example": "3b9u5", + "type": "string" + }, + "over_18": { + "type": "boolean" + }, + "retrieved_on": { + "example": 1739566084, "type": "integer" }, - "rounds_in_a_half": { - "example": 12, + "subscribers": { + "example": 2239919, "type": "integer" } }, "type": "object" }, - "sofascore.EsportsGameScore": { + "reddit.ArchiveSubredditsSearchResponse": { "properties": { - "display": { - "description": "Display is the headline score: kills in Dota 2 and League of Legends,\nrounds won in Counter-Strike.", - "example": 31, + "limit": { + "example": 25, "type": "integer" }, - "overtime": { - "example": 3, + "max_subscribers": { "type": "integer" }, - "period1": { - "example": 4, + "min_subscribers": { "type": "integer" }, - "period2": { - "example": 3, - "type": "integer" + "over_18": { + "type": "boolean" + }, + "query": { + "type": "string" + }, + "sort": { + "example": "desc", + "type": "string" + }, + "sort_by": { + "example": "subscribers", + "type": "string" + }, + "source": { + "$ref": "#/definitions/reddit.SourceDetail" + }, + "subreddits": { + "items": { + "$ref": "#/definitions/reddit.ArchiveSubreddit" + }, + "type": "array" } }, "type": "object" }, - "sofascore.EsportsGameStatistics": { + "reddit.ArchiveTimeSeriesPoint": { "properties": { - "away": { - "$ref": "#/definitions/sofascore.EsportsTeamStatistics" + "date": { + "example": 1704067200, + "type": "integer" }, - "home": { - "$ref": "#/definitions/sofascore.EsportsTeamStatistics" + "value": { + "example": 24979, + "type": "number" } }, "type": "object" }, - "sofascore.EsportsPlayerLine": { + "reddit.ArchiveTimeSeriesResponse": { "properties": { - "character": { - "$ref": "#/definitions/sofascore.EsportsCharacter" - }, - "flags": { - "additionalProperties": { - "type": "boolean" - }, - "type": "object" - }, - "player": { - "$ref": "#/definitions/sofascore.PlayerBrief" + "created_after": { + "example": "2024-01-01", + "type": "string" }, - "role": { - "example": "mid", + "created_before": { + "example": "2025-01-01", "type": "string" }, - "statistics": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "type": "object" - } - }, - "type": "object" - }, - "sofascore.EsportsRound": { - "properties": { - "home_team_side": { - "example": "counter_terrorist", + "metric": { + "example": "posts_count", "type": "string" }, - "home_team_side_code": { - "description": "HomeTeamSideCode is the side the home team played this round: 4 is\nterrorist and 5 is counter-terrorist; HomeTeamSide names it.", - "example": 5, - "type": "integer" + "points": { + "items": { + "$ref": "#/definitions/reddit.ArchiveTimeSeriesPoint" + }, + "type": "array" }, - "outcome": { - "example": "bomb_defused", + "precision": { + "example": "year", "type": "string" }, - "outcome_code": { - "description": "OutcomeCode is SofaScore's round-result code. In Counter-Strike 0 is an\nelimination, 1 a defused bomb, 2 an exploded bomb and 3 a round lost on\ntime; Outcome names it.", - "example": 1, - "type": "integer" + "source": { + "$ref": "#/definitions/reddit.SourceDetail" }, - "winner_code": { - "description": "WinnerCode is 1 for the home side and 2 for the away side.", - "example": 1, - "type": "integer" + "subreddit": { + "example": "OpenAI", + "type": "string" } }, "type": "object" }, - "sofascore.EsportsTeamStatistics": { + "reddit.Author": { "properties": { - "flags": { - "additionalProperties": { - "type": "boolean" - }, - "type": "object" + "name": { + "description": "Reddit username of the author.", + "example": "reddit_user", + "type": "string" }, - "statistics": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "type": "object" + "profile_url": { + "description": "URL of the author's Reddit profile page.", + "example": "https://www.reddit.com/user/reddit_user/", + "type": "string" } }, "type": "object" }, - "sofascore.EventAtBatPitchesResponse": { + "reddit.Comment": { "properties": { - "at_bat_id": { - "example": 2595879, + "author": { + "allOf": [ + { + "$ref": "#/definitions/reddit.Author" + } + ], + "description": "Reddit user who wrote the comment." + }, + "award_count": { + "description": "Number of awards the comment received. Set only when metrics are requested.", "type": "integer" }, - "count": { + "body": { + "description": "Text of the comment as written by the author.", + "example": "I agree with this post.", + "type": "string" + }, + "created": { + "description": "Time the comment was posted, in UTC (RFC 3339).", + "example": "2024-04-19T00:00:00Z", + "type": "string" + }, + "created_utc": { + "description": "Time the comment was posted, in Unix seconds.", + "example": 1713484800, "type": "integer" }, - "event_id": { - "example": 17199139, + "depth": { + "description": "Nesting level of the comment in the thread.", + "example": 1, "type": "integer" }, - "fetched_at": { + "id": { + "description": "Reddit comment id.", + "example": "kabc123", "type": "string" }, - "hitter": { - "$ref": "#/definitions/sofascore.PlayerBrief" + "name": { + "description": "Reddit full name of the comment, the id prefixed with `t1_`.", + "example": "t1_kabc123", + "type": "string" }, - "pitcher": { - "$ref": "#/definitions/sofascore.PlayerBrief" + "parent_id": { + "description": "Full name of the post or comment this comment replies to, for example `t3_1abcxyz`.", + "example": "t3_1abcxyz", + "type": "string" }, - "pitches": { + "permalink": { + "description": "Reddit URL of the comment.", + "example": "https://www.reddit.com/r/OpenAI/comments/1abcxyz/openai_discussion_thread/kabc123/", + "type": "string" + }, + "replies": { + "description": "Replies to this comment, in the same shape.", "items": { - "$ref": "#/definitions/sofascore.BaseballPitch" + "$ref": "#/definitions/reddit.Comment" }, "type": "array" }, - "source_url": { - "type": "string" + "score": { + "description": "Net score of the comment. Set only when metrics are requested.", + "type": "integer" } }, "type": "object" }, - "sofascore.EventAtBatsResponse": { + "reddit.CommentsResponse": { "properties": { - "at_bats": { + "comments": { + "description": "Comments on the post.", "items": { - "$ref": "#/definitions/sofascore.BaseballAtBat" + "$ref": "#/definitions/reddit.Comment" }, "type": "array" }, - "count": { - "type": "integer" - }, - "event_id": { - "example": 17199139, - "type": "integer" + "metrics_source": { + "allOf": [ + { + "$ref": "#/definitions/reddit.SourceDetail" + } + ], + "description": "Source the engagement metrics were read from, with its type and URL. Set only when metrics are requested." }, - "fetched_at": { - "type": "string" + "post": { + "allOf": [ + { + "$ref": "#/definitions/reddit.Post" + } + ], + "description": "Post the comments belong to." }, - "source_url": { - "type": "string" + "source": { + "allOf": [ + { + "$ref": "#/definitions/reddit.SourceDetail" + } + ], + "description": "Reddit page the comments were read from." } }, "type": "object" }, - "sofascore.EventAveragePositionsResponse": { + "reddit.DomainPostsResponse": { "properties": { - "away": { - "items": { - "$ref": "#/definitions/sofascore.AveragePosition" - }, - "type": "array" - }, - "event_id": { - "example": 16363867, - "type": "integer" - }, - "fetched_at": { + "domain": { + "example": "openai.com", "type": "string" }, - "home": { - "items": { - "$ref": "#/definitions/sofascore.AveragePosition" - }, - "type": "array" - }, - "source_url": { - "type": "string" + "pagination": { + "$ref": "#/definitions/reddit.Pagination" }, - "substitutions": { + "posts": { "items": { - "$ref": "#/definitions/sofascore.AveragePositionSubstitution" + "$ref": "#/definitions/reddit.Post" }, "type": "array" - } - }, - "type": "object" - }, - "sofascore.EventBaseballTopPerformersResponse": { - "properties": { - "event_id": { - "example": 17199139, - "type": "integer" }, - "fetched_at": { + "sort": { + "example": "hot", "type": "string" }, - "performers": { - "items": { - "$ref": "#/definitions/sofascore.BaseballPerformer" - }, - "type": "array" + "source": { + "$ref": "#/definitions/reddit.SourceDetail" }, - "source_url": { + "time": { + "example": "week", "type": "string" } }, "type": "object" }, - "sofascore.EventBestPlayersResponse": { + "reddit.MultiSubredditPostsResponse": { "properties": { - "away_players": { + "pagination": { + "allOf": [ + { + "$ref": "#/definitions/reddit.Pagination" + } + ], + "description": "Page size and cursor for the next page." + }, + "posts": { + "description": "Posts from the requested subreddits.", "items": { - "$ref": "#/definitions/sofascore.BestPlayer" + "$ref": "#/definitions/reddit.Post" }, "type": "array" }, - "event_id": { - "example": 16363867, - "type": "integer" - }, - "fetched_at": { + "sort": { + "description": "Sort order that was applied, for example `hot`.", + "example": "hot", "type": "string" }, - "home_players": { + "source": { + "allOf": [ + { + "$ref": "#/definitions/reddit.SourceDetail" + } + ], + "description": "Reddit page the posts were read from." + }, + "subreddits": { + "description": "Names of the subreddits that were queried.", + "example": [ + "OpenAI", + "MachineLearning" + ], "items": { - "$ref": "#/definitions/sofascore.BestPlayer" + "type": "string" }, "type": "array" }, - "player_of_the_match": { - "$ref": "#/definitions/sofascore.BestPlayer" - }, - "source_url": { + "time": { + "description": "Time window that was applied, for example `week`.", + "example": "week", + "type": "string" + } + }, + "type": "object" + }, + "reddit.Pagination": { + "properties": { + "after": { + "description": "Cursor to pass as the `after` parameter to fetch the next page.", + "example": "t3_1abcxyz", "type": "string" }, - "top_players": { - "items": { - "$ref": "#/definitions/sofascore.BestPlayer" - }, - "type": "array" + "limit": { + "description": "Maximum number of items requested for this page.", + "example": 25, + "type": "integer" } }, "type": "object" }, - "sofascore.EventComment": { + "reddit.Post": { "properties": { - "assist": { - "$ref": "#/definitions/sofascore.PlayerBrief" + "author": { + "allOf": [ + { + "$ref": "#/definitions/reddit.Author" + } + ], + "description": "Reddit user who submitted the post." }, - "away_score": { + "award_count": { + "description": "Number of awards the post received. Set only when metrics are requested.", "type": "integer" }, - "goal_type": { + "comment_count": { + "description": "Number of comments on the post. Set only when metrics are requested.", + "type": "integer" + }, + "created": { + "description": "Time the post was submitted, in UTC (RFC 3339).", + "example": "2024-04-19T00:00:00Z", "type": "string" }, - "home_score": { + "created_utc": { + "description": "Time the post was submitted, in Unix seconds.", + "example": 1713484800, "type": "integer" }, - "id": { - "type": "integer" + "domain": { + "description": "Domain of the linked content, or `self.` for text posts.", + "example": "self.OpenAI", + "type": "string" }, - "is_home": { - "type": "boolean" + "estimated_downvotes": { + "description": "Approximate downvote total worked out from the score and upvote ratio. Reddit does not publish exact counts.", + "type": "integer" }, - "minute": { - "example": 94, + "estimated_upvotes": { + "description": "Approximate upvote total worked out from the score and upvote ratio. Reddit does not publish exact counts.", "type": "integer" }, - "penalty_drawn_by": { - "$ref": "#/definitions/sofascore.PlayerBrief" + "flair": { + "description": "Flair text attached to the post.", + "example": "Discussion", + "type": "string" }, - "period": { - "example": "2ND", + "id": { + "description": "Reddit post id.", + "example": "1abcxyz", "type": "string" }, - "player": { - "$ref": "#/definitions/sofascore.PlayerBrief" + "is_self": { + "description": "Whether the post is a text post rather than a link.", + "type": "boolean" }, - "player_in": { - "$ref": "#/definitions/sofascore.PlayerBrief" + "is_video": { + "description": "Whether the post is a video.", + "type": "boolean" }, - "player_out": { - "$ref": "#/definitions/sofascore.PlayerBrief" + "locked": { + "description": "Whether the post is locked against new comments.", + "type": "boolean" }, - "text": { - "example": "Attempt saved. Malick Fofana (Sunderland) right footed shot.", + "name": { + "description": "Reddit full name of the post, the id prefixed with `t3_`.", + "example": "t3_1abcxyz", "type": "string" }, - "time_seconds": { - "type": "integer" + "over_18": { + "description": "Whether the post is marked as 18+ content.", + "type": "boolean" }, - "type": { - "example": "shotSaved", + "permalink": { + "description": "Reddit URL of the post's comments page.", + "example": "https://www.reddit.com/r/OpenAI/comments/1abcxyz/openai_discussion_thread/", "type": "string" - } - }, - "type": "object" - }, - "sofascore.EventCommentsResponse": { - "properties": { - "comments": { - "items": { - "$ref": "#/definitions/sofascore.EventComment" - }, - "type": "array" }, - "count": { + "score": { + "description": "Net score of the post, upvotes minus downvotes as Reddit shows it. Set only when metrics are requested.", "type": "integer" }, - "event_id": { - "example": 16363867, - "type": "integer" + "selftext": { + "description": "Body text of a text post.", + "example": "Discussion body", + "type": "string" }, - "fetched_at": { + "source_feed_url": { + "description": "URL of the Reddit feed the post was read from.", + "example": "https://www.reddit.com/r/OpenAI/.rss", "type": "string" }, - "source_url": { + "stickied": { + "description": "Whether the post is pinned to the top of its subreddit.", + "type": "boolean" + }, + "subreddit": { + "description": "Name of the subreddit the post belongs to, without `r/`.", + "example": "OpenAI", + "type": "string" + }, + "thumbnail": { + "description": "URL of the post thumbnail image.", + "example": "https://b.thumbs.redditmedia.com/example.jpg", + "type": "string" + }, + "title": { + "description": "Title of the post as submitted.", + "example": "OpenAI discussion thread", + "type": "string" + }, + "upvote_ratio": { + "description": "Share of votes that are upvotes, from 0 to 1. Set only when metrics are requested.", + "type": "number" + }, + "url": { + "description": "Reddit URL of the post.", + "example": "https://www.reddit.com/r/OpenAI/comments/1abcxyz/openai_discussion_thread/", "type": "string" + }, + "vote_counts_estimated": { + "description": "Whether `estimated_upvotes` and `estimated_downvotes` are estimates.", + "type": "boolean" } }, "type": "object" }, - "sofascore.EventDetail": { + "reddit.PostResponse": { "properties": { - "attendance": { - "description": "Reported attendance.", - "type": "integer" - }, - "away_score": { + "metrics_source": { "allOf": [ { - "$ref": "#/definitions/sofascore.ScoreLine" + "$ref": "#/definitions/reddit.SourceDetail" } ], - "description": "Away side's score, when available." + "description": "Source the engagement metrics were read from, with its type and URL. Set only when metrics are requested." }, - "away_team": { + "post": { "allOf": [ { - "$ref": "#/definitions/sofascore.TeamRef" + "$ref": "#/definitions/reddit.Post" } ], - "description": "Away side." + "description": "The requested post." }, - "home_score": { + "source": { "allOf": [ { - "$ref": "#/definitions/sofascore.ScoreLine" + "$ref": "#/definitions/reddit.SourceDetail" } ], - "description": "Home side's score, when available." - }, - "home_team": { + "description": "Reddit page the post was read from." + } + }, + "type": "object" + }, + "reddit.SearchResponse": { + "properties": { + "pagination": { "allOf": [ { - "$ref": "#/definitions/sofascore.TeamRef" + "$ref": "#/definitions/reddit.Pagination" } ], - "description": "Home side." - }, - "id": { - "description": "SofaScore event id. Use it with the event endpoints.", - "example": 14025013, - "type": "integer" + "description": "Page size and cursor for the next page." }, - "referee": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.Referee" - } - ], - "description": "Match referee. Omitted when SofaScore has none for it." + "posts": { + "description": "Posts matching the search.", + "items": { + "$ref": "#/definitions/reddit.Post" + }, + "type": "array" }, - "slug": { - "description": "URL slug of the match on SofaScore.", + "query": { + "description": "Search query that was run.", + "example": "openai", "type": "string" }, - "start_time": { - "description": "Start time in UTC (RFC 3339).", - "example": "2025-08-15T19:00:00Z", + "sort": { + "description": "Sort order that was applied, for example `relevance`.", + "example": "relevance", "type": "string" }, - "start_timestamp": { - "description": "Start time as a Unix timestamp in seconds.", - "type": "integer" - }, - "status": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.EventStatus" - } - ], - "description": "Current status of the match." - }, - "tournament": { + "source": { "allOf": [ { - "$ref": "#/definitions/sofascore.TournamentRef" + "$ref": "#/definitions/reddit.SourceDetail" } ], - "description": "Tournament and parent competition the match belongs to." + "description": "Reddit page the results were read from." }, - "venue": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.Venue" - } - ], - "description": "Venue of the match. Omitted when SofaScore has none for it." + "subreddit": { + "description": "Subreddit the search was limited to. Omitted when the search covered all of Reddit.", + "example": "OpenAI", + "type": "string" }, - "winner_code": { - "description": "Result code: 1 when the home side won, 2 when the away side won, 3 for a draw. Omitted until the match is decided.", - "type": "integer" + "time": { + "description": "Time window that was applied, for example `week`.", + "example": "week", + "type": "string" } }, "type": "object" }, - "sofascore.EventEsportsGamesResponse": { + "reddit.SourceDetail": { "properties": { - "count": { - "type": "integer" - }, - "event_id": { - "example": 17260338, - "type": "integer" - }, - "fetched_at": { + "type": { + "description": "Kind of Reddit source the data was read from.", + "example": "rss", "type": "string" }, - "games": { - "items": { - "$ref": "#/definitions/sofascore.EsportsGame" - }, - "type": "array" - }, - "source_url": { + "url": { + "description": "Reddit URL the data was read from.", + "example": "https://www.reddit.com/r/OpenAI/.rss", "type": "string" } }, "type": "object" }, - "sofascore.EventGraphResponse": { + "reddit.SubredditAboutResponse": { "properties": { - "count": { - "type": "integer" - }, - "event_id": { - "example": 16363867, - "type": "integer" + "display_name": { + "description": "Subreddit name in `r/name` form.", + "example": "r/OpenAI", + "type": "string" }, - "fetched_at": { + "feed_url": { + "description": "URL of the subreddit's Reddit feed that the recent posts were read from.", + "example": "https://www.reddit.com/r/OpenAI.rss?limit=10", "type": "string" }, - "overtime_count": { - "type": "integer" + "latest_post_created": { + "description": "Time the newest recent post was submitted, in UTC (RFC 3339).", + "example": "2024-04-19T00:00:00Z", + "type": "string" }, - "overtime_length": { - "example": 15, + "latest_post_created_utc": { + "description": "Time the newest recent post was submitted, in Unix seconds.", + "example": 1713484800, "type": "integer" }, - "period_count": { - "example": 2, - "type": "integer" + "public_url": { + "description": "Public Reddit URL of the subreddit.", + "example": "https://www.reddit.com/r/OpenAI/", + "type": "string" }, - "period_time": { - "example": 45, + "recent_post_count": { + "description": "Number of recent posts that were inspected.", + "example": 10, "type": "integer" }, - "points": { + "sample_posts": { + "description": "Recent posts from the subreddit.", "items": { - "$ref": "#/definitions/sofascore.GraphPoint" + "$ref": "#/definitions/reddit.Post" }, "type": "array" }, - "source_url": { + "source": { + "allOf": [ + { + "$ref": "#/definitions/reddit.SourceDetail" + } + ], + "description": "Reddit page the data was read from." + }, + "subreddit": { + "description": "Subreddit name, without `r/`.", + "example": "OpenAI", + "type": "string" + }, + "title": { + "description": "Subreddit title as shown on Reddit.", + "example": "OpenAI", "type": "string" } }, "type": "object" }, - "sofascore.EventH2HResponse": { + "reddit.SubredditCommentsResponse": { "properties": { - "event_id": { - "description": "SofaScore event id the record belongs to.", - "type": "integer" - }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "type": "string" + "comments": { + "description": "Recent comments in the subreddit.", + "items": { + "$ref": "#/definitions/reddit.Comment" + }, + "type": "array" }, - "manager_duel": { + "pagination": { "allOf": [ { - "$ref": "#/definitions/sofascore.TeamDuel" + "$ref": "#/definitions/reddit.Pagination" } ], - "description": "Record between the two managers. Omitted when SofaScore has no history for them." - }, - "source_url": { - "description": "SofaScore URL the data was read from.", - "type": "string" + "description": "Page size and cursor for the next page." }, - "team_duel": { + "source": { "allOf": [ { - "$ref": "#/definitions/sofascore.TeamDuel" + "$ref": "#/definitions/reddit.SourceDetail" } ], - "description": "All-time record between the two teams." + "description": "Reddit page the comments were read from." + }, + "subreddit": { + "description": "Subreddit name, without `r/`.", + "example": "OpenAI", + "type": "string" } }, "type": "object" }, - "sofascore.EventHighlight": { + "reddit.SubredditPostsResponse": { "properties": { - "created_at": { - "example": "2026-09-20T22:08:35Z", - "type": "string" - }, - "created_timestamp": { - "type": "integer" - }, - "for_countries": { - "example": [ - "BA", - "HR" + "pagination": { + "allOf": [ + { + "$ref": "#/definitions/reddit.Pagination" + } ], + "description": "Page size and cursor for the next page." + }, + "posts": { + "description": "Posts in the subreddit.", "items": { - "type": "string" + "$ref": "#/definitions/reddit.Post" }, "type": "array" }, - "id": { - "example": 8084695, - "type": "integer" - }, - "key_highlight": { - "type": "boolean" - }, - "livestream": { - "type": "boolean" - }, - "media_type_code": { - "example": 6, - "type": "integer" - }, - "subtitle": { - "example": "Full Highlights", + "sort": { + "description": "Sort order that was applied, for example `hot`.", + "example": "hot", "type": "string" }, - "thumbnail_url": { - "type": "string" + "source": { + "allOf": [ + { + "$ref": "#/definitions/reddit.SourceDetail" + } + ], + "description": "Reddit page the posts were read from." }, - "title": { - "example": "Man City 5 - 3 Sunderland", + "subreddit": { + "description": "Subreddit name, without `r/`.", + "example": "OpenAI", "type": "string" }, - "url": { - "example": "https://www.youtube.com/watch?v=bniBAK1Idog", + "time": { + "description": "Time window that was applied, for example `week`.", + "example": "week", "type": "string" } }, "type": "object" }, - "sofascore.EventHighlightsResponse": { + "reddit.TrendsResponse": { "properties": { - "count": { - "type": "integer" - }, - "event_id": { - "example": 16363867, - "type": "integer" - }, - "fetched_at": { - "type": "string" + "pagination": { + "$ref": "#/definitions/reddit.Pagination" }, - "highlights": { + "posts": { "items": { - "$ref": "#/definitions/sofascore.EventHighlight" + "$ref": "#/definitions/reddit.Post" }, "type": "array" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "sofascore.EventIncidentsResponse": { - "properties": { - "count": { - "description": "Number of incidents returned.", - "type": "integer" - }, - "event_id": { - "description": "SofaScore event (match) id that was requested.", - "type": "integer" - }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", + "sort": { + "example": "hot", "type": "string" }, - "incidents": { - "description": "Match timeline of goals, cards, substitutions and period markers.", - "items": { - "$ref": "#/definitions/sofascore.Incident" - }, - "type": "array" + "source": { + "$ref": "#/definitions/reddit.SourceDetail" }, - "source_url": { - "description": "URL the data was read from.", + "time": { + "example": "day", "type": "string" } }, "type": "object" }, - "sofascore.EventInningsResponse": { + "reddit.UserCommentsResponse": { "properties": { - "count": { - "type": "integer" - }, - "event_id": { - "example": 16253632, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "innings": { + "comments": { + "description": "Recent public comments by the user.", "items": { - "$ref": "#/definitions/sofascore.CricketInnings" + "$ref": "#/definitions/reddit.Comment" }, "type": "array" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "sofascore.EventLineupsResponse": { - "properties": { - "away": { + "pagination": { "allOf": [ { - "$ref": "#/definitions/sofascore.TeamLineup" + "$ref": "#/definitions/reddit.Pagination" } ], - "description": "Away side's lineup." - }, - "confirmed": { - "description": "True for the official confirmed lineups, false while they are still predicted.", - "type": "boolean" + "description": "Page size and cursor for the next page." }, - "event_id": { - "description": "SofaScore event id the lineups belong to.", - "type": "integer" - }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "type": "string" - }, - "home": { + "source": { "allOf": [ { - "$ref": "#/definitions/sofascore.TeamLineup" + "$ref": "#/definitions/reddit.SourceDetail" } ], - "description": "Home side's lineup." + "description": "Reddit page the comments were read from." }, - "source_url": { - "description": "SofaScore URL the data was read from.", + "username": { + "description": "Reddit username that was queried.", + "example": "reddit", "type": "string" } }, "type": "object" }, - "sofascore.EventManagersResponse": { + "reddit.UserPostsResponse": { "properties": { - "away": { - "$ref": "#/definitions/sofascore.ManagerBrief" - }, - "event_id": { - "example": 16363867, - "type": "integer" + "pagination": { + "allOf": [ + { + "$ref": "#/definitions/reddit.Pagination" + } + ], + "description": "Page size and cursor for the next page." }, - "fetched_at": { - "type": "string" + "posts": { + "description": "Recent public posts by the user.", + "items": { + "$ref": "#/definitions/reddit.Post" + }, + "type": "array" }, - "home": { - "$ref": "#/definitions/sofascore.ManagerBrief" + "source": { + "allOf": [ + { + "$ref": "#/definitions/reddit.SourceDetail" + } + ], + "description": "Reddit page the posts were read from." }, - "source_url": { + "username": { + "description": "Reddit username that was queried.", + "example": "reddit", "type": "string" } }, "type": "object" }, - "sofascore.EventOddsResponse": { + "reddit.archiveCommentsIDsResponseDoc": { "properties": { - "count": { - "description": "Number of markets returned.", - "type": "integer" - }, - "event_id": { - "description": "SofaScore event id the odds belong to.", + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "type": "string" - }, - "markets": { - "description": "Betting markets for the match.", - "items": { - "$ref": "#/definitions/sofascore.OddsMarket" - }, - "type": "array" + "data": { + "$ref": "#/definitions/reddit.ArchiveCommentsIDsResponse" }, - "source_url": { - "description": "SofaScore URL the data was read from.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sofascore.EventPlayerHeatmapResponse": { + "reddit.archiveCommentsSearchResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "event_id": { - "example": 16363867, - "type": "integer" + "data": { + "$ref": "#/definitions/reddit.ArchiveCommentsSearchResponse" }, - "fetched_at": { + "msg": { + "example": "OK", "type": "string" - }, - "player_id": { - "example": 839956, + } + }, + "type": "object" + }, + "reddit.archiveCommentsTreeResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "points": { - "items": { - "$ref": "#/definitions/sofascore.HeatmapPoint" - }, - "type": "array" + "data": { + "$ref": "#/definitions/reddit.ArchiveCommentsTreeResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sofascore.EventPlayerStatisticsResponse": { + "reddit.archivePostsIDsResponseDoc": { "properties": { - "event_id": { - "example": 16363867, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "player": { - "$ref": "#/definitions/sofascore.PlayerBrief" - }, - "player_id": { - "example": 839956, + "code": { + "example": 200, "type": "integer" }, - "position": { - "example": "F", - "type": "string" + "data": { + "$ref": "#/definitions/reddit.ArchivePostsIDsResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" - }, - "statistics": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "type": "object" - }, - "team": { - "$ref": "#/definitions/sofascore.TeamRef" } }, "type": "object" }, - "sofascore.EventPointByPointResponse": { + "reddit.archivePostsSearchResponseDoc": { "properties": { - "event_id": { - "example": 17257382, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "set_count": { - "example": 3, + "code": { + "example": 200, "type": "integer" }, - "sets": { - "items": { - "$ref": "#/definitions/sofascore.PointByPointSet" - }, - "type": "array" + "data": { + "$ref": "#/definitions/reddit.ArchivePostsSearchResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sofascore.EventPregameFormResponse": { + "reddit.archiveSubredditsSearchResponseDoc": { "properties": { - "away": { - "$ref": "#/definitions/sofascore.PregameFormSide" - }, - "event_id": { - "example": 16363867, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "home": { - "$ref": "#/definitions/sofascore.PregameFormSide" - }, - "label": { - "example": "Pts", - "type": "string" + "data": { + "$ref": "#/definitions/reddit.ArchiveSubredditsSearchResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sofascore.EventResponse": { + "reddit.archiveTimeSeriesResponseDoc": { "properties": { - "event": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.EventDetail" - } - ], - "description": "The match." + "code": { + "example": 200, + "type": "integer" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "type": "string" + "data": { + "$ref": "#/definitions/reddit.ArchiveTimeSeriesResponse" }, - "source_url": { - "description": "SofaScore URL the data was read from.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sofascore.EventShotmapResponse": { + "reddit.commentsResponseDoc": { "properties": { - "count": { - "type": "integer" - }, - "event_id": { - "example": 16363867, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "shots": { - "items": { - "$ref": "#/definitions/sofascore.Shot" - }, - "type": "array" + "data": { + "$ref": "#/definitions/reddit.CommentsResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sofascore.EventStatisticsResponse": { + "reddit.domainPostsResponseDoc": { "properties": { - "event_id": { - "description": "SofaScore event id the statistics belong to.", + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "type": "string" - }, - "periods": { - "description": "Statistics for the whole match and for each period.", - "items": { - "$ref": "#/definitions/sofascore.StatPeriod" - }, - "type": "array" + "data": { + "$ref": "#/definitions/reddit.DomainPostsResponse" }, - "source_url": { - "description": "SofaScore URL the data was read from.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sofascore.EventStatus": { + "reddit.leadsResponseDoc": { "properties": { "code": { - "description": "SofaScore's numeric status code, for example 0 for not started and 100 for ended.", + "example": 200, "type": "integer" }, - "description": { - "description": "Status as displayed, for example \"Ended\".", - "example": "Ended", - "type": "string" + "data": { + "$ref": "#/definitions/redditleads.Response" }, - "type": { - "description": "Status group, for example `notstarted`, `inprogress` or `finished`.", - "example": "finished", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sofascore.EventSummary": { + "reddit.multiSubredditPostsResponseDoc": { "properties": { - "away_score": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.ScoreLine" - } - ], - "description": "Away side's score, when available." - }, - "away_team": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.TeamRef" - } - ], - "description": "Away side." - }, - "home_score": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.ScoreLine" - } - ], - "description": "Home side's score, when available." - }, - "home_team": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.TeamRef" - } - ], - "description": "Home side." - }, - "id": { - "description": "SofaScore event id. Use it with the event endpoints.", - "example": 14025013, + "code": { + "example": 200, "type": "integer" }, - "slug": { - "description": "URL slug of the match on SofaScore.", - "type": "string" + "data": { + "$ref": "#/definitions/reddit.MultiSubredditPostsResponse" }, - "start_time": { - "description": "Start time in UTC (RFC 3339).", - "example": "2025-08-15T19:00:00Z", + "msg": { + "example": "OK", "type": "string" - }, - "start_timestamp": { - "description": "Start time as a Unix timestamp in seconds.", + } + }, + "type": "object" + }, + "reddit.postResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "status": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.EventStatus" - } - ], - "description": "Current status of the match." - }, - "tournament": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.TournamentRef" - } - ], - "description": "Tournament and parent competition the match belongs to." + "data": { + "$ref": "#/definitions/reddit.PostResponse" }, - "winner_code": { - "description": "Result code: 1 when the home side won, 2 when the away side won, 3 for a draw. Omitted until the match is decided.", - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "sofascore.EventTVChannelsResponse": { + "reddit.searchResponseDoc": { "properties": { - "available_countries": { - "items": { - "$ref": "#/definitions/sofascore.TVCountryChannels" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "channels": { - "items": { - "$ref": "#/definitions/sofascore.TVChannel" - }, - "type": "array" + "data": { + "$ref": "#/definitions/reddit.SearchResponse" }, - "country": { - "example": "GB", + "msg": { + "example": "OK", "type": "string" - }, - "event_id": { - "example": 16363867, + } + }, + "type": "object" + }, + "reddit.subredditAboutResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" + "data": { + "$ref": "#/definitions/reddit.SubredditAboutResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sofascore.EventTeamHeatmapResponse": { + "reddit.subredditCommentsResponseDoc": { "properties": { - "event_id": { - "example": 16363867, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "goalkeeper_points": { - "items": { - "$ref": "#/definitions/sofascore.HeatmapPoint" - }, - "type": "array" - }, - "player_points": { - "items": { - "$ref": "#/definitions/sofascore.HeatmapPoint" - }, - "type": "array" + "data": { + "$ref": "#/definitions/reddit.SubredditCommentsResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" - }, - "team_id": { - "example": 17, - "type": "integer" } }, "type": "object" }, - "sofascore.EventTeamStreaksResponse": { + "reddit.subredditPostsResponseDoc": { "properties": { - "event_id": { - "example": 16363867, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "general": { - "items": { - "$ref": "#/definitions/sofascore.TeamStreak" - }, - "type": "array" - }, - "head2head": { - "items": { - "$ref": "#/definitions/sofascore.TeamStreak" - }, - "type": "array" + "data": { + "$ref": "#/definitions/reddit.SubredditPostsResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sofascore.EventTennisPowerResponse": { + "reddit.trendsResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "event_id": { - "example": 17257382, - "type": "integer" + "data": { + "$ref": "#/definitions/reddit.TrendsResponse" }, - "fetched_at": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "reddit.userCommentsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "games": { - "items": { - "$ref": "#/definitions/sofascore.TennisPowerGame" - }, - "type": "array" + "data": { + "$ref": "#/definitions/reddit.UserCommentsResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sofascore.EventVotesResponse": { + "reddit.userPostsResponseDoc": { "properties": { - "both_teams_to_score": { - "$ref": "#/definitions/sofascore.VoteBothTeamsToScore" - }, - "event_id": { - "example": 16363867, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "first_to_score": { - "$ref": "#/definitions/sofascore.VoteFirstToScore" - }, - "match_result": { - "$ref": "#/definitions/sofascore.VoteMatchResult" + "data": { + "$ref": "#/definitions/reddit.UserPostsResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" - }, - "who_should_have_won": { - "$ref": "#/definitions/sofascore.VoteWhoShouldHaveWon" } }, "type": "object" }, - "sofascore.FeatureTournament": { + "redditleads.Lead": { "properties": { - "category_id": { - "example": 1465, - "type": "integer" - }, - "category_name": { - "example": "Europe", + "author": { + "example": "someuser", "type": "string" }, - "id": { - "example": 7, + "comment_count": { + "example": 12, "type": "integer" }, - "name": { - "example": "UEFA Champions League", + "created": { + "example": "2026-08-01T00:00:00Z", "type": "string" }, - "slug": { - "example": "uefa-champions-league", + "permalink": { + "example": "https://www.reddit.com/r/smallbusiness/comments/1abcxyz/", "type": "string" }, - "sport": { - "example": "football", + "post_score": { + "example": 20, + "type": "integer" + }, + "reason": { + "example": "Asking for a CRM and states a monthly budget.", "type": "string" }, - "user_count": { + "score": { + "example": 9, "type": "integer" + }, + "signals": { + "items": { + "$ref": "#/definitions/redditleads.Signal" + }, + "type": "array" + }, + "subreddit": { + "example": "smallbusiness", + "type": "string" + }, + "title": { + "example": "Looking for a CRM for a 3-person team, budget ~$50/mo", + "type": "string" } }, "type": "object" }, - "sofascore.GoalDistribution": { + "redditleads.Response": { "properties": { - "conceded_goals": { - "example": 5, - "type": "integer" + "classifier": { + "example": "llm", + "type": "string" }, - "matches": { - "example": 5, - "type": "integer" + "degraded": { + "example": false, + "type": "boolean" }, - "periods": { + "leads": { "items": { - "$ref": "#/definitions/sofascore.GoalPeriod" + "$ref": "#/definitions/redditleads.Lead" }, "type": "array" }, - "scored_goals": { - "example": 13, + "min_score": { + "example": 4, "type": "integer" }, - "type": { - "example": "overall", + "model": { + "example": "gpt-5.4", + "type": "string" + }, + "query": { + "example": "crm for small teams", + "type": "string" + }, + "stats": { + "$ref": "#/definitions/redditleads.Stats" + }, + "subreddit": { + "example": "smallbusiness", "type": "string" } }, "type": "object" }, - "sofascore.GoalPeriod": { + "redditleads.Signal": { "properties": { - "conceded_goals": { - "example": 1, + "id": { + "example": "explicit-ask", + "type": "string" + }, + "label": { + "example": "asking for a tool", + "type": "string" + } + }, + "type": "object" + }, + "redditleads.Stats": { + "properties": { + "classified": { + "example": 12, "type": "integer" }, - "end_minute": { - "example": 15, + "prefiltered": { + "example": 88, "type": "integer" }, - "scored_goals": { - "example": 1, + "returned": { + "example": 9, "type": "integer" }, - "start_minute": { - "example": 1, + "scanned": { + "example": 100, "type": "integer" } }, "type": "object" }, - "sofascore.GrandSlamTournament": { + "redfin.EstimateResponse": { "properties": { - "name": { - "example": "Australian Open, Men", + "address": { + "description": "Street address of the property.", "type": "string" }, - "tournament_id": { - "example": 2363, - "type": "integer" + "baths": { + "description": "Number of bathrooms.", + "type": "number" }, - "years": { + "beds": { + "description": "Number of bedrooms.", + "type": "number" + }, + "city_time_series": { + "description": "Monthly values for the city the property is in, ending at `updated_at`, for comparison.", "items": { - "$ref": "#/definitions/sofascore.GrandSlamYear" + "type": "number" }, "type": "array" - } - }, - "type": "object" - }, - "sofascore.GrandSlamYear": { - "properties": { - "is_live": { - "type": "boolean" }, - "is_upcoming": { - "type": "boolean" + "county_time_series": { + "description": "Monthly values for the county the property is in, ending at `updated_at`, for comparison.", + "items": { + "type": "number" + }, + "type": "array" }, - "round": { - "example": "Final", + "estimate": { + "description": "Redfin Estimate of the home's value, in US dollars. Omitted when Redfin shows no estimate.", + "type": "number" + }, + "estimate_text": { + "description": "Estimate as Redfin displays it, for example `$1.85M`, or `Estimate Not Available`.", "type": "string" }, - "season_id": { - "example": 48186, - "type": "integer" + "latitude": { + "description": "Latitude of the property.", + "type": "number" }, - "winner": { - "type": "boolean" + "listing_price": { + "description": "Current listing price of the home, in US dollars.", + "type": "number" }, - "year": { - "example": 2023, - "type": "integer" - } - }, - "type": "object" - }, - "sofascore.GraphPoint": { - "properties": { - "minute": { - "example": 45.5, + "longitude": { + "description": "Longitude of the property.", "type": "number" }, - "value": { - "example": -12, + "postal_code_time_series": { + "description": "Monthly values for the postal code the property is in, ending at `updated_at`, for comparison.", + "items": { + "type": "number" + }, + "type": "array" + }, + "property_id": { + "description": "Redfin property id the estimate is for.", + "example": "1715020", + "type": "string" + }, + "property_time_series": { + "description": "Monthly Redfin Estimate values for this property, in US dollars, ending at `updated_at`.", + "items": { + "type": "number" + }, + "type": "array" + }, + "sqft": { + "description": "Interior living area in square feet.", "type": "number" + }, + "updated_at": { + "description": "Time the estimate history was last updated, in Unix milliseconds. The monthly series end at this date.", + "type": "integer" + }, + "year_built": { + "description": "Year the home was built.", + "type": "integer" } }, "type": "object" }, - "sofascore.HeatmapPoint": { + "redfin.PropertyItem": { "properties": { - "x": { - "example": 47.6, + "address": { + "description": "Street address of the property.", + "type": "string" + }, + "baths": { + "description": "Number of bathrooms.", "type": "number" }, - "y": { - "example": 55.9, + "beds": { + "description": "Number of bedrooms.", "type": "number" - } - }, - "type": "object" - }, - "sofascore.Incident": { - "properties": { - "added_time": { - "description": "Minutes of added time at the point of the incident.", - "type": "integer" }, - "away_score": { - "description": "Away team's score after the incident.", + "city": { + "description": "City the property is in.", + "type": "string" + }, + "days_on_market": { + "description": "Number of days the home has been on the market.", "type": "integer" }, - "card_color": { - "description": "Color of the card, such as `yellow` or `red`. Set for card incidents.", - "example": "yellow", + "hoa_monthly": { + "description": "Homeowners association fee per month.", + "type": "number" + }, + "image": { + "description": "URL of the listing image.", "type": "string" }, - "home_score": { - "description": "Home team's score after the incident.", - "type": "integer" + "latitude": { + "description": "Latitude of the property.", + "type": "number" }, - "is_home": { - "description": "Whether the incident belongs to the home team.", - "type": "boolean" + "listing_id": { + "description": "Redfin listing id of the current listing.", + "type": "string" }, - "player": { - "description": "Name of the player involved in the incident.", + "longitude": { + "description": "Longitude of the property.", + "type": "number" + }, + "lot_size": { + "description": "Size of the lot as Redfin lists it.", + "type": "number" + }, + "mls_number": { + "description": "Multiple Listing Service (MLS) number of the listing.", "type": "string" }, - "player_in": { - "description": "Name of the player coming on in a substitution.", + "price": { + "description": "Listing or sale price in US dollars.", + "type": "number" + }, + "price_per_sqft": { + "description": "Price per square foot of living area.", + "type": "number" + }, + "property_id": { + "description": "Redfin property id. Use it with the property, estimate and similar endpoints.", + "example": "1715020", "type": "string" }, - "player_out": { - "description": "Name of the player going off in a substitution.", + "property_type": { + "description": "Type of property, for example `Condo/Co-op`.", "type": "string" }, - "reason": { - "description": "Reason SofaScore gives for the incident.", + "sqft": { + "description": "Interior living area in square feet.", + "type": "number" + }, + "state": { + "description": "State the property is in.", "type": "string" }, - "text": { - "description": "Short label for the incident, such as `FT` for full time.", - "example": "FT", + "status": { + "description": "Listing status as Redfin shows it, for example `Active`.", "type": "string" }, - "time": { - "description": "Match minute at which the incident happened.", + "url": { + "description": "Redfin page URL of the listing.", + "type": "string" + }, + "year_built": { + "description": "Year the home was built.", "type": "integer" }, - "type": { - "description": "Incident type, such as `period`, `goal`, `card` or `substitution`.", - "example": "goal", + "zip": { + "description": "ZIP or postal code of the property.", "type": "string" } }, "type": "object" }, - "sofascore.LineupPlayer": { + "redfin.PropertyResponse": { "properties": { - "jersey_number": { - "description": "Shirt number worn in this match.", + "address": { + "description": "Street address of the property.", "type": "string" }, - "player": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.PlayerRef" - } - ], - "description": "The player." + "baths": { + "description": "Number of bathrooms.", + "type": "number" }, - "position": { - "description": "Position in this match, for example G, D, M or F.", + "beds": { + "description": "Number of bedrooms.", + "type": "number" + }, + "city": { + "description": "City the property is in.", "type": "string" }, - "substitute": { - "description": "True for a player on the bench.", - "type": "boolean" - } - }, - "type": "object" - }, - "sofascore.LiveEventsResponse": { - "properties": { - "count": { - "description": "Number of events returned.", - "example": 10, + "days_on_market": { + "description": "Number of days the home has been on the market.", "type": "integer" }, - "events": { - "description": "Matches currently in progress.", + "description": { + "type": "string" + }, + "facts": { "items": { - "$ref": "#/definitions/sofascore.EventSummary" + "type": "string" }, "type": "array" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "type": "string" + "hoa_monthly": { + "description": "Homeowners association fee per month.", + "type": "number" }, - "source_url": { - "description": "SofaScore URL the data was read from.", + "image": { + "description": "URL of the listing image.", "type": "string" }, - "sport": { - "description": "Sport the events belong to.", - "example": "football", + "latitude": { + "description": "Latitude of the property.", + "type": "number" + }, + "listing_id": { + "description": "Redfin listing id of the current listing.", "type": "string" - } - }, - "type": "object" - }, - "sofascore.MMACardResponse": { - "properties": { - "card_id": { - "example": 197311, - "type": "integer" }, - "card_name": { - "example": "UFC 332: Silva vs. Wang", + "longitude": { + "description": "Longitude of the property.", + "type": "number" + }, + "lot_size": { + "description": "Size of the lot as Redfin lists it.", + "type": "number" + }, + "mls_number": { + "description": "Multiple Listing Service (MLS) number of the listing.", "type": "string" }, - "count": { - "type": "integer" + "price": { + "description": "Listing or sale price in US dollars.", + "type": "number" }, - "fetched_at": { + "price_per_sqft": { + "description": "Price per square foot of living area.", + "type": "number" + }, + "property_id": { + "description": "Redfin property id. Use it with the property, estimate and similar endpoints.", + "example": "1715020", "type": "string" }, - "fights": { - "items": { - "$ref": "#/definitions/sofascore.MMAFight" - }, - "type": "array" + "property_type": { + "description": "Type of property, for example `Condo/Co-op`.", + "type": "string" }, - "org_id": { - "example": 19906, - "type": "integer" + "sqft": { + "description": "Interior living area in square feet.", + "type": "number" }, - "part": { - "example": "all", + "state": { + "description": "State the property is in.", "type": "string" }, - "source_url": { + "status": { + "description": "Listing status as Redfin shows it, for example `Active`.", + "type": "string" + }, + "url": { + "description": "Redfin page URL of the listing.", + "type": "string" + }, + "year_built": { + "description": "Year the home was built.", + "type": "integer" + }, + "zip": { + "description": "ZIP or postal code of the property.", "type": "string" } }, "type": "object" }, - "sofascore.MMAFight": { + "redfin.RegionTrendsResponse": { "properties": { - "away_fighter": { - "$ref": "#/definitions/sofascore.MMAFighter" - }, - "card_id": { - "example": 197311, - "type": "integer" - }, - "card_name": { - "example": "UFC 332: Silva vs. Wang", + "avg_days_on_market": { + "description": "Average number of days homes in the region spend on the market, as Redfin displays it.", "type": "string" }, - "fight_type": { - "description": "FightType is the card segment the bout belongs to: `maincard`, `prelims`\nor `earlyprelims`.", - "example": "maincard", + "avg_down_payment": { + "description": "Average down payment in the region, as Redfin displays it, for example `35.7%`.", "type": "string" }, - "final_round": { - "description": "FinalRound is the round the bout ended in; ScheduledRounds is its\nscheduled length. TimePlayedSeconds is the fight time actually fought.", - "example": 5, - "type": "integer" + "avg_num_offers": { + "description": "Average number of offers per sold home in the region, as Redfin displays it.", + "type": "string" }, - "gender": { - "example": "F", + "median_list_per_sqft": { + "description": "Median listing price per square foot in the region, as Redfin displays it.", "type": "string" }, - "home_fighter": { - "$ref": "#/definitions/sofascore.MMAFighter" + "median_list_price": { + "description": "Median listing price in the region, as Redfin displays it, for example `$1.29M`.", + "example": "$1.29M", + "type": "string" }, - "id": { - "example": 17042538, - "type": "integer" + "median_sale_per_list": { + "description": "Median ratio of sale price to listing price in the region, as Redfin displays it, for example `115.5%`.", + "type": "string" }, - "order": { - "description": "Order is the bout's position on the card; the highest number is the main\nevent.", - "example": 14, - "type": "integer" + "median_sale_per_sqft": { + "description": "Median sale price per square foot in the region, as Redfin displays it.", + "type": "string" }, - "scheduled_rounds": { - "example": 5, - "type": "integer" + "median_sale_price": { + "description": "Median sale price in the region, as Redfin displays it, for example `$1.76M`.", + "example": "$1.76M", + "type": "string" }, - "slug": { - "example": "wang-cong-natalia-silva", + "num_homes_on_market": { + "description": "Number of homes currently on the market in the region, as Redfin displays it.", "type": "string" }, - "start_time": { - "example": "2026-10-02T02:12:33Z", + "num_homes_sold": { + "description": "Number of homes sold in the region, as Redfin displays it.", "type": "string" }, - "start_timestamp": { + "region_id": { + "description": "Redfin region id the trends are for.", + "example": 17151, "type": "integer" }, - "status": { - "$ref": "#/definitions/sofascore.EventStatus" - }, - "time_played_seconds": { - "example": 1500, + "region_type": { + "description": "Type of region: `1` neighborhood, `2` ZIP code, `5` county or `6` city.", + "example": 6, "type": "integer" }, - "weight_class": { - "description": "WeightClass is SofaScore's division key, for example `fly`, `bantam`,\n`feather`, `light`, `welter`, `middle`, `lightheavy`, `heavy` or `straw`.", - "example": "fly", + "yoy_sale_per_sqft": { + "description": "Year-over-year change in sale price per square foot, as Redfin displays it, for example `+12.6%`.", "type": "string" }, - "win_type": { - "description": "WinType is how the bout ended, for example `KO`, `TKO`, `SUB`, `UD`, `SD`\nor `NC`; omitted until it has ended.", - "example": "UD", + "yoy_sale_price": { + "description": "Year-over-year change in sale price, as Redfin displays it, for example `+14.0%`.", "type": "string" - }, - "winner_code": { - "description": "WinnerCode is 1 when the home fighter won, 2 for the away fighter; absent\nuntil decided.", - "example": 1, - "type": "integer" } }, "type": "object" }, - "sofascore.MMAFighter": { + "redfin.SearchResponse": { "properties": { - "country": { - "example": "Brazil", + "location": { + "description": "Location that was searched, as entered or resolved.", + "example": "San Francisco, CA", "type": "string" }, - "draws": { + "page": { + "description": "Page number returned.", "example": 1, "type": "integer" }, - "id": { - "example": 461932, + "region_id": { + "description": "Redfin region id the search ran against.", + "example": 17151, "type": "integer" }, - "losses": { - "example": 5, + "region_type": { + "description": "Type of region searched: `1` neighborhood, `2` ZIP code, `5` county or `6` city.", + "example": 6, "type": "integer" }, - "name": { - "example": "Natália Silva", + "results": { + "description": "Listings on this page, one item per property.", + "items": { + "$ref": "#/definitions/redfin.PropertyItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "redfin.SimilarResponse": { + "properties": { + "property_id": { + "example": "1715020", "type": "string" }, - "nickname": { - "example": "Deus da Guerra", + "results": { + "items": { + "$ref": "#/definitions/redfin.PropertyItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "rednote.Channel": { + "properties": { + "id": { + "example": "homefeed.food_v3", "type": "string" }, - "ranking": { - "description": "Ranking is the fighter's division ranking; 0 is the champion, and it is\nomitted for an unranked fighter.", - "example": 0, - "type": "integer" - }, - "slug": { - "example": "natalia-silva", + "name": { + "example": "Food", "type": "string" - }, - "wins": { - "description": "Wins, Draws and Losses are the professional record going into the fight.", - "example": 21, - "type": "integer" } }, "type": "object" }, - "sofascore.MMAScheduleResponse": { + "rednote.Comment": { "properties": { - "count": { + "author": { + "$ref": "#/definitions/rednote.CommentAuthor" + }, + "comment_id": { + "example": "0123456789abcdef01234567", + "type": "string" + }, + "content": { + "type": "string" + }, + "created_at": { + "example": 1700000000, "type": "integer" }, - "fetched_at": { + "ip_location": { + "example": "Shanghai", "type": "string" }, - "main_events": { + "like_count": { + "example": 12, + "type": "integer" + }, + "sub_comment_count": { + "example": 3, + "type": "integer" + }, + "sub_comments": { "items": { - "$ref": "#/definitions/sofascore.MMAFight" + "$ref": "#/definitions/rednote.Comment" }, "type": "array" - }, - "month": { - "example": "2026-10", + } + }, + "type": "object" + }, + "rednote.CommentAuthor": { + "properties": { + "avatar_url": { "type": "string" }, - "org_id": { - "example": 19906, - "type": "integer" + "nickname": { + "example": "synthetic_user", + "type": "string" }, - "source_url": { + "user_id": { + "example": "000000000000000000000002", "type": "string" } }, "type": "object" }, - "sofascore.ManagerBrief": { + "rednote.CommentsResponse": { "properties": { - "id": { - "example": 794873, + "count": { + "example": 20, "type": "integer" }, - "name": { - "example": "Enzo Maresca", + "cursor": { "type": "string" }, - "short_name": { - "example": "E. Maresca", - "type": "string" + "has_more": { + "type": "boolean" }, - "slug": { - "example": "enzo-maresca", + "items": { + "items": { + "$ref": "#/definitions/rednote.Comment" + }, + "type": "array" + }, + "note_id": { + "example": "0123456789abcdef01234567", "type": "string" } }, "type": "object" }, - "sofascore.ManagerDetail": { + "rednote.ExploreCard": { "properties": { - "country": { - "example": "Italy", - "type": "string" + "author": { + "$ref": "#/definitions/rednote.NoteAuthor" }, - "date_of_birth": { - "example": "1980-02-10", + "cover_url": { "type": "string" }, - "deceased": { - "type": "boolean" - }, - "former_player_id": { - "example": 2026, - "type": "integer" - }, - "id": { - "example": 794873, + "liked_count": { + "example": 1255, "type": "integer" }, - "name": { - "example": "Enzo Maresca", + "note_id": { + "example": "0123456789abcdef01234567", "type": "string" }, - "nationality_code": { - "example": "ITA", + "note_url": { "type": "string" }, - "nationality_iso2": { - "example": "IT", + "title": { "type": "string" }, - "performance": { - "$ref": "#/definitions/sofascore.ManagerPerformance" - }, - "preferred_formation": { - "example": "4-2-3-1", + "type": { + "example": "video", "type": "string" }, - "short_name": { - "example": "E. Maresca", + "xsec_token": { "type": "string" - }, - "slug": { - "example": "enzo-maresca", + } + }, + "type": "object" + }, + "rednote.ExploreResponse": { + "properties": { + "channel_id": { + "example": "homefeed_recommend", "type": "string" }, - "team": { - "$ref": "#/definitions/sofascore.TeamRef" + "channels": { + "items": { + "$ref": "#/definitions/rednote.Channel" + }, + "type": "array" }, - "teams": { + "count": { + "example": 30, + "type": "integer" + }, + "items": { "items": { - "$ref": "#/definitions/sofascore.TeamRef" + "$ref": "#/definitions/rednote.ExploreCard" }, "type": "array" } }, "type": "object" }, - "sofascore.ManagerEventsResponse": { + "rednote.NoteAuthor": { "properties": { - "count": { - "type": "integer" + "avatar_url": { + "type": "string" }, - "events": { + "nickname": { + "example": "synthetic_user", + "type": "string" + }, + "user_id": { + "example": "000000000000000000000002", + "type": "string" + } + }, + "type": "object" + }, + "rednote.NoteResponse": { + "properties": { + "author": { + "$ref": "#/definitions/rednote.NoteAuthor" + }, + "description": { + "type": "string" + }, + "image_urls": { "items": { - "$ref": "#/definitions/sofascore.EventSummary" + "type": "string" }, "type": "array" }, - "fetched_at": { + "note_id": { + "example": "0123456789abcdef01234567", "type": "string" }, - "has_next_page": { - "type": "boolean" + "published_at": { + "type": "string" }, - "manager_id": { - "example": 794873, - "type": "integer" + "stats": { + "$ref": "#/definitions/rednote.NoteStats" }, - "page": { - "type": "integer" + "tags": { + "items": { + "$ref": "#/definitions/rednote.NoteTag" + }, + "type": "array" }, - "source_url": { + "title": { + "type": "string" + }, + "type": { + "example": "normal", + "type": "string" + }, + "url": { + "type": "string" + }, + "video_duration_seconds": { + "type": "number" + }, + "video_url": { "type": "string" } }, "type": "object" }, - "sofascore.ManagerPerformance": { + "rednote.NoteStats": { "properties": { - "draws": { - "example": 30, - "type": "integer" - }, - "goals_conceded": { - "example": 211, - "type": "integer" - }, - "goals_scored": { - "example": 418, - "type": "integer" - }, - "losses": { - "example": 44, + "collected_count": { + "example": 7, "type": "integer" }, - "total": { - "example": 194, + "comment_count": { + "example": 3, "type": "integer" }, - "total_points": { - "example": 390, + "liked_count": { + "example": 42, "type": "integer" }, - "wins": { - "example": 120, + "share_count": { + "example": 1, "type": "integer" } }, "type": "object" }, - "sofascore.ManagerResponse": { + "rednote.NoteTag": { "properties": { - "fetched_at": { + "id": { "type": "string" }, - "manager": { - "$ref": "#/definitions/sofascore.ManagerDetail" - }, - "source_url": { + "name": { + "example": "synthetic_tag", "type": "string" } }, "type": "object" }, - "sofascore.MoverOddsChoice": { + "rednote.SuggestItem": { "properties": { - "change": { - "description": "Change is 1 when the fractional price is above its opening value, -1\nwhen below it and 0 when unchanged.", - "example": 1, - "type": "integer" + "highlight_flags": { + "items": { + "type": "boolean" + }, + "type": "array" }, - "initial_value": { - "example": "31/50", + "search_type": { + "example": "notes", "type": "string" }, - "name": { - "example": "1", + "text": { + "example": "coffee", "type": "string" }, - "value": { - "example": "29/100", + "type": { + "example": "top_note", "type": "string" } }, "type": "object" }, - "sofascore.MoverOddsMarket": { + "rednote.SuggestResponse": { "properties": { - "choices": { + "count": { + "example": 10, + "type": "integer" + }, + "items": { "items": { - "$ref": "#/definitions/sofascore.MoverOddsChoice" + "$ref": "#/definitions/rednote.SuggestItem" }, "type": "array" }, - "group": { - "example": "1X2", + "keyword": { + "example": "coffee", "type": "string" }, - "is_live": { - "type": "boolean" - }, - "name": { - "example": "Full time", + "search_cpl_id": { "type": "string" }, - "period": { - "example": "Full-time", + "word_request_id": { "type": "string" - }, - "suspended": { - "type": "boolean" } }, "type": "object" }, - "sofascore.NamedCode": { + "rednote.commentsResponseDoc": { "properties": { "code": { - "example": "EN", - "type": "string" + "example": 200, + "type": "integer" }, - "name": { - "example": "England", + "data": { + "$ref": "#/definitions/rednote.CommentsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sofascore.OddsChoice": { + "rednote.exploreResponseDoc": { "properties": { - "name": { - "description": "Outcome label, for example 1, X or 2.", - "example": "1", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "value": { - "description": "Fractional odds, for example 29/100.", - "example": "29/100", - "type": "string" + "data": { + "$ref": "#/definitions/rednote.ExploreResponse" }, - "winning": { - "description": "True when this outcome won.", - "type": "boolean" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "sofascore.OddsDroppingEvent": { + "rednote.noteResponseDoc": { "properties": { - "away_score": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.ScoreLine" - } - ], - "description": "Away side's score, when available." - }, - "away_team": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.TeamRef" - } - ], - "description": "Away side." - }, - "choice_name": { - "example": "2", - "type": "string" - }, - "home_score": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.ScoreLine" - } - ], - "description": "Home side's score, when available." - }, - "home_team": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.TeamRef" - } - ], - "description": "Home side." - }, - "id": { - "description": "SofaScore event id. Use it with the event endpoints.", - "example": 14025013, + "code": { + "example": 200, "type": "integer" }, - "market": { - "$ref": "#/definitions/sofascore.MoverOddsMarket" - }, - "percentage": { - "example": 63, - "type": "number" - }, - "slug": { - "description": "URL slug of the match on SofaScore.", - "type": "string" - }, - "sport": { - "example": "football", - "type": "string" + "data": { + "$ref": "#/definitions/rednote.NoteResponse" }, - "start_time": { - "description": "Start time in UTC (RFC 3339).", - "example": "2025-08-15T19:00:00Z", + "msg": { + "example": "OK", "type": "string" - }, - "start_timestamp": { - "description": "Start time as a Unix timestamp in seconds.", - "type": "integer" - }, - "status": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.EventStatus" - } - ], - "description": "Current status of the match." - }, - "tournament": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.TournamentRef" - } - ], - "description": "Tournament and parent competition the match belongs to." - }, - "winner_code": { - "description": "Result code: 1 when the home side won, 2 when the away side won, 3 for a draw. Omitted until the match is decided.", - "type": "integer" } }, "type": "object" }, - "sofascore.OddsDroppingResponse": { + "rednote.suggestResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "events": { - "items": { - "$ref": "#/definitions/sofascore.OddsDroppingEvent" - }, - "type": "array" - }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/rednote.SuggestResponse" }, - "sport": { - "example": "all", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sofascore.OddsMarket": { + "reelshort.Actor": { "properties": { - "choices": { - "description": "Outcomes that can be selected in this market.", - "items": { - "$ref": "#/definitions/sofascore.OddsChoice" - }, - "type": "array" - }, - "group": { - "description": "Market group, for example 1X2.", - "example": "1X2", + "imdb_url": { "type": "string" }, "name": { - "description": "Market name, for example \"Full time\".", - "example": "Full time", "type": "string" }, - "period": { - "description": "Part of the match the market covers, for example \"Full-time\".", - "example": "Full-time", + "photo_url": { "type": "string" - }, - "suspended": { - "description": "True while the market is suspended.", - "type": "boolean" } }, "type": "object" }, - "sofascore.OddsWinningEvent": { + "reelshort.Book": { "properties": { - "actual": { - "example": 1, - "type": "number" + "cover_url": { + "type": "string" }, - "away_score": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.ScoreLine" - } - ], - "description": "Away side's score, when available." + "description": { + "type": "string" }, - "away_team": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.TeamRef" - } - ], - "description": "Away side." + "episodes": { + "type": "integer" }, - "expected": { - "example": 51, - "type": "number" + "favorites": { + "type": "integer" }, - "home_score": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.ScoreLine" - } - ], - "description": "Home side's score, when available." + "first_paid_episode": { + "description": "FirstPaidEpisode is the episode number from which episodes are paid; 0\nwhen ReelShort lists none.", + "type": "integer" }, - "home_team": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.TeamRef" - } - ], - "description": "Home side." + "has_trailer": { + "type": "boolean" }, "id": { - "description": "SofaScore event id. Use it with the event endpoints.", - "example": 14025013, + "type": "string" + }, + "language": { + "type": "string" + }, + "plays": { + "description": "Plays and Favorites are ReelShort's own read_count and collect_count.", "type": "integer" }, - "market": { - "$ref": "#/definitions/sofascore.MoverOddsMarket" + "tags": { + "items": { + "type": "string" + }, + "type": "array" }, - "slug": { - "description": "URL slug of the match on SofaScore.", + "title": { "type": "string" }, - "sport": { - "example": "basketball", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "reelshort.Episode": { + "properties": { + "free": { + "type": "boolean" + }, + "id": { "type": "string" }, - "start_time": { - "description": "Start time in UTC (RFC 3339).", - "example": "2025-08-15T19:00:00Z", + "kind": { + "description": "episode or trailer", "type": "string" }, - "start_timestamp": { - "description": "Start time as a Unix timestamp in seconds.", + "likes": { "type": "integer" }, - "status": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.EventStatus" - } - ], - "description": "Current status of the match." + "number": { + "description": "Number is the episode number; 0 is the trailer.", + "type": "integer" }, - "tournament": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.TournamentRef" - } - ], - "description": "Tournament and parent competition the match belongs to." + "published_at": { + "type": "string" }, - "winner_code": { - "description": "Result code: 1 when the home side won, 2 when the away side won, 3 for a draw. Omitted until the match is decided.", - "type": "integer" + "thumbnail_url": { + "type": "string" }, - "winning_odds": { - "example": "24/25", + "url": { "type": "string" } }, "type": "object" }, - "sofascore.OddsWinningResponse": { + "reelshort.FandomCategoriesResponse": { "properties": { - "count": { - "type": "integer" - }, - "events": { + "categories": { "items": { - "$ref": "#/definitions/sofascore.OddsWinningEvent" + "$ref": "#/definitions/reelshort.FandomCategory" }, "type": "array" + } + }, + "type": "object" + }, + "reelshort.FandomCategory": { + "properties": { + "description": { + "type": "string" }, - "fetched_at": { + "id": { + "type": "integer" + }, + "name": { "type": "string" }, - "source_url": { + "posts": { + "type": "integer" + }, + "slug": { "type": "string" }, - "sport": { - "example": "all", + "url": { "type": "string" } }, "type": "object" }, - "sofascore.PlayerAttributeOverview": { + "reelshort.FandomPost": { "properties": { - "attributes": { - "additionalProperties": { - "format": "float64", - "type": "number" + "categories": { + "items": { + "type": "string" }, - "type": "object" + "type": "array" }, - "position": { - "example": "F", + "excerpt": { "type": "string" }, - "year_shift": { - "description": "YearShift is 0 for the current scores and N for the scores N years earlier.", - "example": 0, + "id": { "type": "integer" - } - }, - "type": "object" - }, - "sofascore.PlayerAttributesResponse": { - "properties": { - "characteristics": { - "$ref": "#/definitions/sofascore.PlayerCharacteristics" }, - "characteristics_url": { + "image_url": { "type": "string" }, - "fetched_at": { + "modified_at": { "type": "string" }, - "overviews": { - "items": { - "$ref": "#/definitions/sofascore.PlayerAttributeOverview" - }, - "type": "array" - }, - "player_id": { - "example": 839956, - "type": "integer" + "published_at": { + "type": "string" }, - "position_averages": { - "items": { - "$ref": "#/definitions/sofascore.PlayerAttributeOverview" - }, - "type": "array" + "slug": { + "type": "string" }, - "source_url": { + "title": { "type": "string" }, - "sport": { - "example": "football", + "url": { "type": "string" } }, "type": "object" }, - "sofascore.PlayerBrief": { + "reelshort.FandomPostResponse": { "properties": { + "categories": { + "items": { + "type": "string" + }, + "type": "array" + }, + "content": { + "description": "Content is the article body as plain text with paragraph breaks.", + "type": "string" + }, + "excerpt": { + "type": "string" + }, "id": { - "example": 839956, "type": "integer" }, - "jersey_number": { - "example": "9", + "image_url": { "type": "string" }, - "name": { - "example": "Erling Haaland", + "modified_at": { "type": "string" }, - "position": { - "example": "F", + "published_at": { "type": "string" }, - "short_name": { - "example": "E. Haaland", + "slug": { "type": "string" }, - "slug": { - "example": "erling-haaland", + "title": { + "type": "string" + }, + "title_ids": { + "description": "TitleIDs are the ReelShort title ids the article links to, in order of\nfirst appearance; pass them to reelshort-movie.", + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { "type": "string" } }, "type": "object" }, - "sofascore.PlayerCharacteristic": { + "reelshort.FandomPostsResponse": { "properties": { - "code": { - "description": "Code is SofaScore's numeric characteristic code.", - "example": 5, + "category": { + "type": "string" + }, + "limit": { "type": "integer" }, - "key": { - "description": "Key is the identifier the SofaScore web client uses for the code (for\nexample finishing); omitted for a code the client does not name.", - "example": "finishing", - "type": "string" + "page": { + "type": "integer" }, - "name": { - "example": "Finishing", + "posts": { + "items": { + "$ref": "#/definitions/reelshort.FandomPost" + }, + "type": "array" + }, + "search": { "type": "string" }, - "rank": { - "description": "Rank is SofaScore's rank value for the characteristic.", - "example": 25, + "total": { + "type": "integer" + }, + "total_pages": { "type": "integer" } }, "type": "object" }, - "sofascore.PlayerCharacteristics": { + "reelshort.HomeResponse": { "properties": { - "positions": { - "items": { - "type": "string" - }, - "type": "array" - }, - "strengths": { - "items": { - "$ref": "#/definitions/sofascore.PlayerCharacteristic" - }, - "type": "array" + "language": { + "type": "string" }, - "weaknesses": { + "shelves": { "items": { - "$ref": "#/definitions/sofascore.PlayerCharacteristic" + "$ref": "#/definitions/reelshort.Shelf" }, "type": "array" } }, "type": "object" }, - "sofascore.PlayerDetail": { + "reelshort.MovieResponse": { "properties": { - "country": { - "description": "Player's country.", + "actors": { + "items": { + "$ref": "#/definitions/reelshort.Actor" + }, + "type": "array" + }, + "ai_generated": { + "type": "boolean" + }, + "badge": { "type": "string" }, - "date_of_birth": { - "description": "Date of birth (RFC 3339).", + "cover_url": { "type": "string" }, - "deceased": { - "description": "True when the player has died.", + "description": { + "type": "string" + }, + "dubbed": { "type": "boolean" }, - "height": { - "description": "Height in centimetres.", + "episode_count": { + "description": "EpisodeCount counts the numbered episodes; the trailer is not included\n(ReelShort's own total on its movie page does include it).", "type": "integer" }, - "id": { - "description": "SofaScore player id. Use it with the player endpoints.", - "type": "integer" + "episodes": { + "items": { + "$ref": "#/definitions/reelshort.Episode" + }, + "type": "array" }, - "jersey_number": { - "description": "Shirt number.", - "type": "string" + "favorites": { + "type": "integer" }, - "market_value": { - "description": "SofaScore's estimated market value, in units of `market_value_currency`. Omitted when unavailable.", + "first_paid_episode": { "type": "integer" }, - "market_value_currency": { - "description": "Currency of `market_value`, for example EUR.", + "id": { "type": "string" }, - "name": { - "description": "Player's full name.", + "imdb_url": { "type": "string" }, - "position": { - "description": "Position code, for example G, D, M or F.", + "language": { "type": "string" }, - "preferred_foot": { - "description": "Preferred foot, for example \"Right\".", + "online_at": { "type": "string" }, - "short_name": { - "description": "Shortened name, for example \"E. Haaland\".", + "original_language": { "type": "string" }, - "slug": { - "description": "URL slug of the player on SofaScore.", + "plays": { + "type": "integer" + }, + "published_at": { "type": "string" }, - "team": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.TeamRef" - } - ], - "description": "The player's current team." + "tags": { + "items": { + "$ref": "#/definitions/reelshort.Tag" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "update_status": { + "description": "UpdateStatus is ReelShort's raw update_status flag (1 on every title\nsampled on 2026-10-26); it is not interpreted.", + "type": "integer" + }, + "url": { + "type": "string" } }, "type": "object" }, - "sofascore.PlayerEventRow": { + "reelshort.NewReleasesResponse": { "properties": { - "event": { - "$ref": "#/definitions/sofascore.EventSummary" - }, - "incident_counts": { - "additionalProperties": { - "format": "float64", - "type": "number" + "books": { + "items": { + "$ref": "#/definitions/reelshort.Book" }, - "description": "IncidentCounts holds counts of the player's match incidents, for example\ngoals, assists, yellow_cards, red_cards and penalty_goals.", - "type": "object" - }, - "on_bench": { - "description": "OnBench is true only when the player was an unused substitute.", - "type": "boolean" - }, - "played_for_team_id": { - "description": "PlayedForTeamID is the team the player represented in the match.", - "example": 17, - "type": "integer" + "type": "array" }, - "statistics": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "description": "Statistics holds the player's numbers in the match (football: rating and\nminutes_played; basketball: points, rebounds and more). It is absent when\nthe player did not play or the match has not started.", - "type": "object" + "language": { + "type": "string" } }, "type": "object" }, - "sofascore.PlayerEventsResponse": { + "reelshort.RelatedTag": { "properties": { - "count": { - "type": "integer" + "id": { + "type": "string" }, - "events": { + "name": { + "type": "string" + } + }, + "type": "object" + }, + "reelshort.SearchResponse": { + "properties": { + "books": { "items": { - "$ref": "#/definitions/sofascore.PlayerEventRow" + "$ref": "#/definitions/reelshort.Book" }, "type": "array" }, - "fetched_at": { + "keywords": { "type": "string" }, - "has_next_page": { - "type": "boolean" + "language": { + "type": "string" }, "page": { "type": "integer" }, - "player_id": { - "example": 839956, + "total": { + "description": "Total is approximate: ReelShort's search backend reports a count that\nvaries between calls for the same query.", "type": "integer" }, - "source_url": { - "type": "string" + "total_pages": { + "type": "integer" } }, "type": "object" }, - "sofascore.PlayerFormEntry": { + "reelshort.Shelf": { "properties": { - "date": { - "example": "2025-11-02T16:30:00Z", - "type": "string" - }, - "rating": { - "example": 9.3, - "type": "number" - }, - "timestamp": { - "type": "integer" + "books": { + "items": { + "$ref": "#/definitions/reelshort.Book" + }, + "type": "array" }, - "tournament_id": { - "example": 17, + "id": { "type": "integer" }, - "type": { - "example": "event", - "type": "string" - }, - "value": { - "description": "Value is the upstream value as published: the rating for an event, an\nopaque number for an injury, absent for the other types.", - "example": "9.3", + "name": { "type": "string" } }, "type": "object" }, - "sofascore.PlayerLastYearSummaryResponse": { + "reelshort.ShelfResponse": { "properties": { - "count": { + "books": { + "items": { + "$ref": "#/definitions/reelshort.Book" + }, + "type": "array" + }, + "id": { "type": "integer" }, - "fetched_at": { + "name": { "type": "string" }, - "player_id": { - "example": 839956, + "total": { "type": "integer" + } + }, + "type": "object" + }, + "reelshort.Tag": { + "properties": { + "category_id": { + "type": "string" }, - "source_url": { + "id": { "type": "string" }, - "summary": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "reelshort.TagBooksResponse": { + "properties": { + "books": { "items": { - "$ref": "#/definitions/sofascore.PlayerFormEntry" + "$ref": "#/definitions/reelshort.Book" }, "type": "array" }, - "tournaments": { + "description": { + "type": "string" + }, + "limit": { + "type": "integer" + }, + "page": { + "type": "integer" + }, + "related_tags": { "items": { - "$ref": "#/definitions/sofascore.UniqueTournamentBrief" + "$ref": "#/definitions/reelshort.RelatedTag" + }, + "type": "array" + }, + "tag": { + "$ref": "#/definitions/reelshort.Tag" + }, + "top_titles": { + "items": { + "$ref": "#/definitions/reelshort.TitleRef" }, "type": "array" + }, + "total_items": { + "description": "TotalItems is ReelShort's total for the tag; paging can return fewer\ndistinct titles (a title can repeat across pages).", + "type": "integer" } }, "type": "object" }, - "sofascore.PlayerMatchRating": { + "reelshort.TagMatch": { "properties": { - "event": { - "$ref": "#/definitions/sofascore.EventSummary" - }, - "event_id": { - "example": 14023936, + "category_id": { "type": "integer" }, - "is_home": { - "type": "boolean" + "description": { + "type": "string" }, - "opponent": { - "$ref": "#/definitions/sofascore.TeamRef" + "id": { + "type": "string" }, - "rating": { - "example": 7.4, - "type": "number" + "image_url": { + "type": "string" }, - "start_time": { - "example": "2026-05-20T19:00:00Z", + "kind": { "type": "string" }, - "start_timestamp": { + "name": { + "type": "string" + }, + "titles": { + "description": "Titles is the number of titles ReelShort's search lists for the tag. It\nis approximate: reelshort-tag-books reports a different total for the\nsame tag.", "type": "integer" } }, "type": "object" }, - "sofascore.PlayerNationalTeamRecord": { + "reelshort.TagSearchResponse": { "properties": { - "appearances": { - "example": 59, - "type": "integer" - }, - "debut_date": { - "example": "2019-09-06", + "language": { "type": "string" }, - "debut_timestamp": { + "page": { "type": "integer" }, - "goals": { - "example": 65, + "page_size": { "type": "integer" }, - "team": { - "$ref": "#/definitions/sofascore.TeamRef" + "tags": { + "items": { + "$ref": "#/definitions/reelshort.TagMatch" + }, + "type": "array" + }, + "total": { + "type": "integer" + }, + "word": { + "type": "string" } }, "type": "object" }, - "sofascore.PlayerNationalTeamStatisticsResponse": { + "reelshort.TagsResponse": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { + "category": { "type": "string" }, - "player_id": { - "example": 839956, + "category_id": { "type": "integer" }, - "source_url": { + "language": { "type": "string" }, - "teams": { + "tags": { "items": { - "$ref": "#/definitions/sofascore.PlayerNationalTeamRecord" + "$ref": "#/definitions/reelshort.Tag" }, "type": "array" } }, "type": "object" }, - "sofascore.PlayerPenalty": { + "reelshort.TitleRef": { "properties": { - "event": { - "$ref": "#/definitions/sofascore.EventSummary" - }, "id": { - "example": 6089564, - "type": "integer" - }, - "outcome": { - "example": "goal", "type": "string" }, - "x": { - "example": 68.82, - "type": "number" - }, - "xg": { - "description": "XG is the expected-goals value of the penalty when SofaScore has one.", - "example": 0.78, - "type": "number" + "title": { + "type": "string" + } + }, + "type": "object" + }, + "reelshort.fandomCategoriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "y": { - "example": 95.83, - "type": "number" + "data": { + "$ref": "#/definitions/reelshort.FandomCategoriesResponse" }, - "zone": { - "example": "low-right", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sofascore.PlayerPenaltyHistoryResponse": { + "reelshort.fandomPostResponseDoc": { "properties": { - "attempts": { - "example": 61, + "code": { + "example": 200, "type": "integer" }, - "count": { - "type": "integer" + "data": { + "$ref": "#/definitions/reelshort.FandomPostResponse" }, - "fetched_at": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "reelshort.fandomPostsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "penalties": { - "items": { - "$ref": "#/definitions/sofascore.PlayerPenalty" - }, - "type": "array" + "data": { + "$ref": "#/definitions/reelshort.FandomPostsResponse" }, - "player_id": { - "example": 839956, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "reelshort.homeResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "scored": { - "example": 52, - "type": "integer" + "data": { + "$ref": "#/definitions/reelshort.HomeResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sofascore.PlayerRatingsResponse": { + "reelshort.movieResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" + "data": { + "$ref": "#/definitions/reelshort.MovieResponse" }, - "player_id": { - "example": 839956, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "reelshort.newReleasesResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "ratings": { - "items": { - "$ref": "#/definitions/sofascore.PlayerMatchRating" - }, - "type": "array" + "data": { + "$ref": "#/definitions/reelshort.NewReleasesResponse" }, - "season": { - "example": 76986, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "reelshort.searchResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/reelshort.SearchResponse" }, - "tournament_id": { - "example": 17, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "reelshort.shelfResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "type": { - "example": "overall", + "data": { + "$ref": "#/definitions/reelshort.ShelfResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sofascore.PlayerRef": { + "reelshort.tagBooksResponseDoc": { "properties": { - "country": { - "description": "Player's country.", - "example": "Spain", - "type": "string" - }, - "id": { - "description": "SofaScore player id. Use it with the player endpoints.", - "example": 855833, + "code": { + "example": 200, "type": "integer" }, - "name": { - "description": "Player's full name.", - "example": "Ferran Torres", - "type": "string" + "data": { + "$ref": "#/definitions/reelshort.TagBooksResponse" }, - "position": { - "description": "Position code, for example G, D, M or F.", - "example": "F", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "reelshort.tagSearchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "short_name": { - "description": "Shortened name, for example \"F. Torres\".", - "example": "F. Torres", - "type": "string" + "data": { + "$ref": "#/definitions/reelshort.TagSearchResponse" }, - "slug": { - "description": "URL slug of the player on SofaScore.", - "example": "ferran-torres", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sofascore.PlayerResponse": { + "reelshort.tagsResponseDoc": { "properties": { - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "player": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.PlayerDetail" - } - ], - "description": "The player's profile." + "data": { + "$ref": "#/definitions/reelshort.TagsResponse" }, - "source_url": { - "description": "SofaScore URL the data was read from.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sofascore.PlayerSeasonHeatmapResponse": { + "referrals.referralAttributionDoc": { "properties": { - "count": { - "type": "integer" + "campaign": { + "example": "spring-launch", + "type": "string" }, - "events": { - "description": "Events are the matches the heatmap aggregates.", - "items": { - "$ref": "#/definitions/sofascore.EventSummary" - }, - "type": "array" + "code": { + "example": "A1B2C3D4E5F6", + "type": "string" }, - "fetched_at": { + "created_at": { "type": "string" }, - "matches": { - "example": 35, - "type": "integer" + "expires_at": { + "type": "string" }, - "player_id": { - "example": 839956, - "type": "integer" + "id": { + "example": "abc123", + "type": "string" }, - "points": { - "items": { - "$ref": "#/definitions/sofascore.SeasonHeatmapPoint" - }, - "type": "array" + "qualified_at": { + "type": "string" }, - "season": { - "example": 76986, + "reward_credits": { + "example": 10000, "type": "integer" }, - "source_url": { + "rewarded_at": { "type": "string" }, - "tournament_id": { - "example": 17, - "type": "integer" + "role": { + "enum": [ + "referrer", + "referred" + ], + "example": "referrer", + "type": "string" + }, + "status": { + "enum": [ + "attributed", + "qualified", + "review_required", + "rewarded", + "expired", + "capped", + "failed", + "rejected" + ], + "example": "rewarded", + "type": "string" } }, "type": "object" }, - "sofascore.PlayerSeasonStatisticsResponse": { + "referrals.referralClickRequestDoc": { "properties": { - "fetched_at": { + "click_id": { + "example": "refclk_abc123", "type": "string" }, - "player_id": { - "example": 839956, - "type": "integer" - }, - "rating_breakdown": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "type": "object" - }, - "season": { - "example": 96668, - "type": "integer" + "code": { + "example": "A1B2C3D4E5F6", + "type": "string" }, - "source_url": { + "landing_path": { + "example": "/pricing", "type": "string" }, - "statistics": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "type": "object" + "utm_campaign": { + "example": "spring-launch", + "type": "string" }, - "team": { - "$ref": "#/definitions/sofascore.TeamRef" + "utm_medium": { + "example": "email", + "type": "string" }, - "tournament_id": { - "example": 17, - "type": "integer" + "utm_source": { + "example": "newsletter", + "type": "string" + } + }, + "type": "object" + }, + "referrals.referralClickResponseDoc": { + "properties": { + "click_id": { + "example": "refclk_abc123", + "type": "string" }, - "type": { - "example": "overall", + "code": { + "example": "A1B2C3D4E5F6", "type": "string" } }, "type": "object" }, - "sofascore.PlayerStatisticRank": { + "referrals.referralsEventsResponseDoc": { "properties": { - "count": { - "example": 421, + "items": { + "items": { + "$ref": "#/definitions/referrals.referralAttributionDoc" + }, + "type": "array" + } + }, + "type": "object" + }, + "referrals.referralsMeResponseDoc": { + "properties": { + "attribution_window_days": { + "example": 30, "type": "integer" }, - "order": { - "description": "Order is the player's position when ties are broken; it is never lower than Rank.", - "example": 1, + "code": { + "example": "A1B2C3D4E5F6", + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/referrals.referralAttributionDoc" + }, + "type": "array" + }, + "monthly_referrer_reward_cap": { + "example": 10, "type": "integer" }, - "rank": { - "description": "Rank is the competition rank (tied values share a rank) among Count players.", - "example": 1, + "referred_reward_credits": { + "example": 10000, "type": "integer" }, - "statistic": { - "example": "goals", + "reward_credits": { + "example": 10000, + "type": "integer" + }, + "share_path": { + "example": "/r/A1B2C3D4E5F6", "type": "string" }, - "value": { - "example": 5, - "type": "number" + "stats": { + "$ref": "#/definitions/referrals.referralsStatsDoc" } }, "type": "object" }, - "sofascore.PlayerStatisticalRankingsResponse": { + "referrals.referralsStatsDoc": { "properties": { - "count": { + "attributed": { + "example": 3, "type": "integer" }, - "fetched_at": { - "type": "string" + "capped": { + "example": 0, + "type": "integer" }, - "player_id": { - "example": 839956, + "expired": { + "example": 0, "type": "integer" }, - "rankings": { - "items": { - "$ref": "#/definitions/sofascore.PlayerStatisticRank" - }, - "type": "array" + "qualified": { + "example": 1, + "type": "integer" }, - "season": { - "$ref": "#/definitions/sofascore.Season" + "rejected": { + "example": 0, + "type": "integer" }, - "source_url": { - "type": "string" + "review_required": { + "example": 0, + "type": "integer" }, - "type": { - "example": "overall", - "type": "string" + "rewarded": { + "example": 1, + "type": "integer" } }, "type": "object" }, - "sofascore.PlayerStatisticsFilters": { + "researchjobs.ResearchResult": { "properties": { - "min_appearances": { - "type": "integer" + "claims": { + "items": { + "$ref": "#/definitions/retrievaltypes.Claim" + }, + "type": "array" }, - "min_minutes": { - "type": "integer" + "coverage": { + "items": { + "$ref": "#/definitions/retrievaltypes.SourceCoverage" + }, + "type": "array" }, - "nationalities": { + "evidence": { "items": { - "type": "string" + "$ref": "#/definitions/retrievaltypes.Evidence" }, "type": "array" }, - "positions": { + "job_id": { + "type": "string" + }, + "partial": { + "type": "boolean" + }, + "ready": { + "type": "boolean" + }, + "report_markdown": { + "type": "string" + }, + "result_kind": { + "enum": [ + "evidence_only", + "report", + "structured" + ], + "type": "string" + }, + "searches": { "items": { - "type": "string" + "$ref": "#/definitions/researchjobs.SearchRecord" }, "type": "array" }, - "team_ids": { + "snapshot_sequence": { + "type": "integer" + }, + "source_snapshot": { + "$ref": "#/definitions/researchjobs.SourceSnapshot" + }, + "structured_data": { + "type": "object" + }, + "usage": { + "$ref": "#/definitions/retrievaltypes.Usage" + }, + "warnings": { "items": { - "type": "integer" + "$ref": "#/definitions/retrievaltypes.Warning" }, "type": "array" } }, "type": "object" }, - "sofascore.PlayerStatisticsRow": { + "researchjobs.Scope": { + "enum": [ + "web", + "papers", + "developer", + "mixed" + ], + "type": "string", + "x-enum-varnames": [ + "ScopeWeb", + "ScopePapers", + "ScopeDeveloper", + "ScopeMixed" + ] + }, + "researchjobs.SearchRecord": { "properties": { - "player": { - "$ref": "#/definitions/sofascore.PlayerRef" + "hits": { + "items": { + "$ref": "#/definitions/researchjobs.SearchRecordHit" + }, + "type": "array" }, - "rank": { - "example": 1, - "type": "integer" + "query": { + "type": "string" }, - "statistics": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "type": "object" + "source_id": { + "type": "string" }, - "team": { - "$ref": "#/definitions/sofascore.TeamRef" + "source_kind": { + "allOf": [ + { + "$ref": "#/definitions/retrievaltypes.SourceKind" + } + ], + "enum": [ + "web", + "paper", + "developer" + ] } }, "type": "object" }, - "sofascore.PlayerStatisticsSeasonsResponse": { + "researchjobs.SearchRecordHit": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { + "snippet": { "type": "string" }, - "player_id": { - "example": 839956, - "type": "integer" + "source_id": { + "type": "string" }, - "source_url": { + "title": { "type": "string" }, - "tournaments": { - "items": { - "$ref": "#/definitions/sofascore.StatisticsTournament" - }, - "type": "array" + "url": { + "type": "string" } }, "type": "object" }, - "sofascore.PlayerTournamentsResponse": { + "researchjobs.SourceGeneration": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { + "generation_id": { "type": "string" }, - "player_id": { - "example": 839956, - "type": "integer" + "kind": { + "allOf": [ + { + "$ref": "#/definitions/retrievaltypes.SourceKind" + } + ], + "enum": [ + "web", + "paper", + "developer" + ] }, - "source_url": { + "source_id": { "type": "string" }, - "tournaments": { - "items": { - "$ref": "#/definitions/sofascore.UniqueTournamentBrief" - }, - "type": "array" + "source_revision": { + "type": "string" } }, "type": "object" }, - "sofascore.PlayerTransfersResponse": { + "researchjobs.SourceSnapshot": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { + "registry_revision": { "type": "string" }, - "player_id": { - "example": 839956, - "type": "integer" - }, - "source_url": { - "type": "string" + "scope": { + "allOf": [ + { + "$ref": "#/definitions/researchjobs.Scope" + } + ], + "enum": [ + "web", + "papers", + "developer", + "mixed" + ] }, - "transfers": { + "sources": { "items": { - "$ref": "#/definitions/sofascore.Transfer" + "$ref": "#/definitions/researchjobs.SourceGeneration" }, "type": "array" } }, "type": "object" }, - "sofascore.PointByPointGame": { + "researchjobs.researchEventsResponseDoc": { "properties": { - "game": { - "example": 10, + "code": { "type": "integer" }, - "points": { - "items": { - "$ref": "#/definitions/sofascore.PointByPointPoint" - }, - "type": "array" + "data": { + "$ref": "#/definitions/retrievaltypes.JobEventsResponse" }, - "score": { - "$ref": "#/definitions/sofascore.PointByPointScore" + "msg": { + "type": "string" } }, "type": "object" }, - "sofascore.PointByPointPoint": { + "researchjobs.researchLimitsDoc": { "properties": { - "away_marker": { - "example": "set_or_match_point", - "type": "string" + "browser_renders": { + "default": 0, + "enum": [ + 0 + ], + "type": "integer" }, - "away_point": { - "example": "40", - "type": "string" + "input_tokens": { + "default": 60000, + "maximum": 100000, + "minimum": 1000, + "type": "integer" }, - "away_point_type": { - "example": 2, + "max_credits": { + "maximum": 10000, + "minimum": 1, "type": "integer" }, - "description": { - "description": "Description is `ace` or `double_fault` when SofaScore flags the point;\nomitted otherwise. DescriptionCode is the upstream code (0 none, 1 ace,\n2 double fault).", - "example": "ace", - "type": "string" + "output_tokens": { + "default": 8000, + "maximum": 16000, + "minimum": 256, + "type": "integer" }, - "description_code": { - "example": 0, + "rounds": { + "default": 3, + "maximum": 5, + "minimum": 1, "type": "integer" }, - "home_marker": { - "description": "HomeMarker and AwayMarker name the codes that mean a player holds a\npoint opportunity after the point: `break_point` (code 2) and\n`set_or_match_point` (code 3).", - "example": "break_point", - "type": "string" + "searches": { + "default": 8, + "maximum": 20, + "minimum": 1, + "type": "integer" }, - "home_point": { - "description": "HomePoint and AwayPoint are the points as SofaScore prints them: `0`,\n`15`, `30`, `40` and `A` in a tennis game, a plain count in a tie-break,\ntable tennis or badminton set.", - "example": "30", - "type": "string" + "sources": { + "default": 20, + "maximum": 50, + "minimum": 1, + "type": "integer" }, - "home_point_type": { - "description": "HomePointType and AwayPointType are SofaScore's per-player point codes.", - "example": 5, + "timeout_seconds": { + "default": 180, + "maximum": 600, + "minimum": 30, "type": "integer" } }, + "required": [ + "max_credits" + ], "type": "object" }, - "sofascore.PointByPointScore": { + "researchjobs.researchResultsResponseDoc": { "properties": { - "away_score": { - "example": 4, - "type": "integer" - }, - "home_score": { - "example": 6, + "code": { "type": "integer" }, - "server": { - "description": "Server is `home` or `away`; omitted when SofaScore does not know it.", - "example": "away", - "type": "string" + "data": { + "$ref": "#/definitions/researchjobs.ResearchResult" }, - "winner": { - "description": "Winner is `home` or `away`; omitted while the game or set is unfinished.", - "example": "away", + "msg": { "type": "string" } }, "type": "object" }, - "sofascore.PointByPointSet": { + "researchjobs.researchStartRequestDoc": { "properties": { - "games": { + "exclude_domains": { "items": { - "$ref": "#/definitions/sofascore.PointByPointGame" + "type": "string" }, "type": "array" }, - "points": { + "idempotency_key": { + "example": "0123456789abcdef", + "type": "string" + }, + "include_domains": { "items": { - "$ref": "#/definitions/sofascore.PointByPointPoint" + "type": "string" }, "type": "array" }, - "score": { - "$ref": "#/definitions/sofascore.PointByPointScore" + "limits": { + "$ref": "#/definitions/researchjobs.researchLimitsDoc" }, - "set": { - "example": 1, - "type": "integer" - } - }, - "type": "object" - }, - "sofascore.PregameFormSide": { - "properties": { - "avg_rating": { - "example": 7.91, - "type": "number" + "output_format": { + "enum": [ + "report", + "json" + ], + "example": "report", + "type": "string" }, - "form": { - "example": [ - "W", - "W", - "W", - "W" + "query": { + "example": "How do recent studies measure retrieval quality?", + "type": "string" + }, + "schema": { + "additionalProperties": {}, + "type": "object" + }, + "scope": { + "enum": [ + "web", + "papers", + "developer", + "mixed" ], + "example": "mixed", + "type": "string" + }, + "seed_urls": { "items": { "type": "string" }, "type": "array" }, - "position": { - "example": 1, + "sources": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "idempotency_key", + "limits", + "query" + ], + "type": "object" + }, + "researchjobs.researchStartResponseDoc": { + "properties": { + "code": { "type": "integer" }, - "value": { - "example": "12", + "data": { + "$ref": "#/definitions/retrievaltypes.JobSubmission" + }, + "msg": { "type": "string" } }, "type": "object" }, - "sofascore.RankingEntity": { + "researchjobs.researchStatusResponseDoc": { "properties": { - "country": { - "example": "Italy", - "type": "string" + "code": { + "type": "integer" }, - "country_code": { - "example": "IT", - "type": "string" + "data": { + "$ref": "#/definitions/retrievaltypes.JobStatus" }, - "gender": { - "example": "M", + "msg": { "type": "string" - }, - "id": { - "example": 720, - "type": "integer" - }, - "name": { - "example": "Jannik Sinner", + } + }, + "type": "object" + }, + "researchpapers.CitationRelation": { + "properties": { + "from_id": { "type": "string" }, - "national": { - "type": "boolean" - }, - "record": { - "$ref": "#/definitions/sofascore.WDLRecord" - }, - "short_name": { - "example": "J. Sinner", + "retrieved_at": { "type": "string" }, - "slug": { - "example": "sinner-jannik", + "source_id": { "type": "string" }, - "sport": { - "example": "tennis", + "source_url": { "type": "string" }, - "type": { - "example": "player", + "to_id": { "type": "string" } }, "type": "object" }, - "sofascore.RankingRow": { + "researchpapers.EuropePMCFullText": { "properties": { - "best_rank": { - "type": "integer" - }, - "entity": { - "$ref": "#/definitions/sofascore.RankingEntity" - }, - "label": { - "example": "England", + "attribution": { "type": "string" }, - "max_points": { - "type": "number" - }, - "next_win_points": { - "type": "number" - }, - "playing_teams": { - "type": "integer" + "content_sha256": { + "type": "string" }, - "points": { - "type": "number" + "copyright": { + "type": "string" }, - "previous_points": { - "type": "number" + "extraction_note": { + "type": "string" }, - "previous_rank": { - "type": "integer" + "license_text": { + "type": "string" }, - "rank": { - "example": 1, - "type": "integer" + "license_url": { + "type": "string" }, - "total_teams": { - "type": "integer" + "retrieved_at": { + "type": "string" }, - "tournaments_played": { - "type": "integer" + "source_url": { + "type": "string" }, - "year": { - "example": "2027", + "text": { "type": "string" } }, "type": "object" }, - "sofascore.RankingType": { + "researchpapers.PaperGraphSeed": { "properties": { - "description": { + "paper_id": { "type": "string" }, - "entity_type": { - "example": "player", + "primary_id": { "type": "string" }, - "gender": { - "example": "M", + "status": { + "enum": [ + "ok", + "failed" + ], "type": "string" + } + }, + "type": "object" + }, + "researchpapers.PaperReadRequest": { + "properties": { + "limit": { + "type": "integer" }, - "name": { - "example": "ATP men's singles ranking", + "paper_id": { "type": "string" }, - "sport": { - "example": "tennis", + "question": { "type": "string" - }, - "type": { - "example": 5, - "type": "integer" } }, + "required": [ + "paper_id", + "question" + ], "type": "object" }, - "sofascore.RankingTypesResponse": { + "researchpapers.PaperRelatedRequest": { "properties": { - "count": { - "example": 32, + "cursor": { + "type": "string" + }, + "intent": { + "type": "string" + }, + "limit": { "type": "integer" }, - "types": { + "mode": { + "$ref": "#/definitions/researchpapers.RelatedMode" + }, + "seed_ids": { "items": { - "$ref": "#/definitions/sofascore.RankingType" + "type": "string" }, "type": "array" } }, "type": "object" }, - "sofascore.RankingsResponse": { + "researchpapers.RelatedMode": { + "enum": [ + "references", + "citers" + ], + "type": "string", + "x-enum-varnames": [ + "RelatedReferences", + "RelatedCiters" + ] + }, + "researchretrieval.Paper": { "properties": { - "count": { - "example": 500, - "type": "integer" - }, - "entity_type": { - "example": "player", + "abstract": { "type": "string" }, - "fetched_at": { - "type": "string" + "authors": { + "items": { + "$ref": "#/definitions/researchretrieval.PaperAuthor" + }, + "type": "array" }, - "name": { - "example": "ATP men's singles ranking", + "content_level": { + "enum": [ + "metadata", + "abstract", + "full_text" + ], "type": "string" }, - "rankings": { + "identifiers": { "items": { - "$ref": "#/definitions/sofascore.RankingRow" + "$ref": "#/definitions/researchretrieval.PaperIdentifier" }, "type": "array" }, - "source_url": { + "paper_id": { "type": "string" }, - "sport": { - "example": "tennis", + "primary_id": { "type": "string" }, - "total_rows": { - "example": 500, + "publication_year": { "type": "integer" }, - "type": { - "example": 5, - "type": "integer" + "published_at": { + "type": "string" }, - "updated_at": { - "example": "2026-10-06T23:00:37Z", + "retrieved_at": { "type": "string" }, - "updated_timestamp": { - "type": "integer" + "source_urls": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string" } }, "type": "object" }, - "sofascore.Referee": { + "researchretrieval.PaperAuthor": { "properties": { - "country": { - "description": "Referee's country.", - "example": "England", + "affiliation": { "type": "string" }, - "id": { - "description": "SofaScore referee id.", - "type": "integer" - }, "name": { - "description": "Referee's name.", - "example": "Anthony Taylor", "type": "string" } }, "type": "object" }, - "sofascore.RefereeCompetitionStatistics": { + "researchretrieval.PaperFailure": { "properties": { - "appearances": { - "example": 27, - "type": "integer" + "message": { + "type": "string" }, - "competition": { - "$ref": "#/definitions/sofascore.UniqueTournamentBrief" + "reason": { + "enum": [ + "invalid_url", + "unsupported_content_type", + "blocked", + "not_found", + "rate_limited", + "timeout", + "upstream_error", + "internal_error", + "out_of_scope", + "robots_disallowed", + "duplicate", + "limit_reached", + "unsupported_filter", + "unknown_source", + "idempotency_conflict", + "invalid_cursor", + "result_expired", + "full_text_unavailable", + "budget_exhausted" + ], + "type": "string" }, - "penalties": { - "example": 11, + "retry_after_seconds": { "type": "integer" }, - "red_cards": { - "example": 4, - "type": "integer" + "retryable": { + "type": "boolean" + } + }, + "type": "object" + }, + "researchretrieval.PaperHit": { + "properties": { + "paper": { + "$ref": "#/definitions/researchretrieval.Paper" }, - "yellow_cards": { - "example": 86, + "rank": { "type": "integer" }, - "yellow_red_cards": { - "example": 1, - "type": "integer" + "score": { + "type": "number" } }, "type": "object" }, - "sofascore.RefereeDetail": { + "researchretrieval.PaperIdentifier": { "properties": { - "country": { - "example": "England", + "namespace": { + "enum": [ + "arxiv", + "doi", + "pmid", + "pmcid" + ], "type": "string" }, - "date_of_birth": { - "example": "1979-06-20", + "value": { "type": "string" + } + }, + "type": "object" + }, + "researchretrieval.PaperMetadataResponse": { + "properties": { + "coverage": { + "items": { + "$ref": "#/definitions/researchretrieval.PaperSourceCoverage" + }, + "type": "array" }, - "first_league_debut": { - "description": "FirstLeagueDebut is the date of the referee's first top-flight match when\nSofaScore records it.", - "example": "2010-02-03", - "type": "string" + "paper": { + "$ref": "#/definitions/researchretrieval.Paper" }, - "games": { - "description": "Games, YellowCards, RedCards and YellowRedCards are career totals across\nevery competition; each is omitted when SofaScore gives none.", - "example": 321, - "type": "integer" + "usage": { + "$ref": "#/definitions/retrievaltypes.Usage" }, - "id": { - "example": 74264, - "type": "integer" + "warnings": { + "items": { + "$ref": "#/definitions/researchretrieval.PaperWarning" + }, + "type": "array" + } + }, + "type": "object" + }, + "researchretrieval.PaperReadResponse": { + "properties": { + "coverage": { + "items": { + "$ref": "#/definitions/researchretrieval.PaperSourceCoverage" + }, + "type": "array" }, - "name": { - "example": "Robert Jones", - "type": "string" + "full_text": { + "$ref": "#/definitions/researchpapers.EuropePMCFullText" }, - "red_cards": { - "example": 20, - "type": "integer" + "full_text_available": { + "type": "boolean" }, - "slug": { - "example": "robert-jones", - "type": "string" + "paper": { + "$ref": "#/definitions/researchretrieval.Paper" }, - "sport": { - "example": "football", + "passages": { + "items": { + "$ref": "#/definitions/retrievaltypes.Passage" + }, + "type": "array" + }, + "unavailable_reason": { + "enum": [ + "not_indexed", + "restricted", + "unsupported_format", + "not_found" + ], "type": "string" }, - "yellow_cards": { - "example": 1156, - "type": "integer" + "usage": { + "$ref": "#/definitions/retrievaltypes.Usage" }, - "yellow_red_cards": { - "example": 13, - "type": "integer" + "warnings": { + "items": { + "$ref": "#/definitions/researchretrieval.PaperWarning" + }, + "type": "array" } }, "type": "object" }, - "sofascore.RefereeEventsResponse": { + "researchretrieval.PaperRelatedResponse": { "properties": { - "count": { - "type": "integer" + "coverage": { + "items": { + "$ref": "#/definitions/researchretrieval.PaperSourceCoverage" + }, + "type": "array" }, - "events": { + "has_more": { + "type": "boolean" + }, + "items": { "items": { - "$ref": "#/definitions/sofascore.EventSummary" + "$ref": "#/definitions/researchretrieval.PaperHit" }, "type": "array" }, - "fetched_at": { + "next_cursor": { "type": "string" }, - "has_next_page": { + "partial": { "type": "boolean" }, - "page": { - "type": "integer" + "relations": { + "items": { + "$ref": "#/definitions/researchpapers.CitationRelation" + }, + "type": "array" }, - "referee_id": { - "example": 74264, - "type": "integer" + "seeds": { + "items": { + "$ref": "#/definitions/researchpapers.PaperGraphSeed" + }, + "type": "array" }, - "source_url": { - "type": "string" + "usage": { + "$ref": "#/definitions/retrievaltypes.Usage" + }, + "warnings": { + "items": { + "$ref": "#/definitions/researchretrieval.PaperWarning" + }, + "type": "array" } }, "type": "object" }, - "sofascore.RefereeResponse": { + "researchretrieval.PaperSearchResponse": { "properties": { - "fetched_at": { - "type": "string" + "coverage": { + "items": { + "$ref": "#/definitions/researchretrieval.PaperSourceCoverage" + }, + "type": "array" }, - "referee": { - "$ref": "#/definitions/sofascore.RefereeDetail" + "has_more": { + "type": "boolean" }, - "source_url": { + "items": { + "items": { + "$ref": "#/definitions/researchretrieval.PaperHit" + }, + "type": "array" + }, + "next_cursor": { "type": "string" + }, + "partial": { + "type": "boolean" + }, + "usage": { + "$ref": "#/definitions/retrievaltypes.Usage" + }, + "warnings": { + "items": { + "$ref": "#/definitions/researchretrieval.PaperWarning" + }, + "type": "array" } }, "type": "object" }, - "sofascore.RefereeStatisticsResponse": { + "researchretrieval.PaperSourceCoverage": { "properties": { - "competitions": { - "items": { - "$ref": "#/definitions/sofascore.RefereeCompetitionStatistics" - }, - "type": "array" + "corpus_revision": { + "type": "string" }, - "count": { - "type": "integer" + "failure": { + "$ref": "#/definitions/researchretrieval.PaperFailure" }, - "fetched_at": { + "indexed_at": { "type": "string" }, - "referee_id": { - "example": 74264, - "type": "integer" + "retrieved_at": { + "type": "string" }, - "source_url": { + "source_id": { + "type": "string" + }, + "status": { + "enum": [ + "ok", + "failed", + "not_indexed", + "unsupported" + ], "type": "string" } }, "type": "object" }, - "sofascore.RoundEventsResponse": { + "researchretrieval.PaperSourceDescriptor": { "properties": { - "count": { - "description": "Number of events returned.", - "type": "integer" - }, - "events": { - "description": "Fixtures in the round.", + "artifact_types": { "items": { - "$ref": "#/definitions/sofascore.EventSummary" + "type": "string" }, "type": "array" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", + "corpus": { "type": "string" }, - "has_next_page": { - "description": "True when more fixtures are available on a further page.", - "type": "boolean" - }, - "prefix": { - "description": "Round prefix, set for stages such as Qualification.", - "example": "Qualification", + "corpus_revision": { "type": "string" }, - "round": { - "description": "Round number.", - "type": "integer" - }, - "season_id": { - "description": "SofaScore season id.", - "type": "integer" - }, - "slug": { - "description": "Round slug, set for named rounds such as `round-of-16`.", - "example": "round-of-16", - "type": "string" + "filters": { + "items": { + "enum": [ + "authors", + "published_from", + "published_to" + ], + "type": "string" + }, + "type": "array" }, - "source_url": { - "description": "SofaScore URL the data was read from.", + "last_success_at": { "type": "string" }, - "tournament_id": { - "description": "Id of the competition (the unique tournament id).", - "type": "integer" - } - }, - "type": "object" - }, - "sofascore.RoundRef": { - "properties": { "name": { - "example": "Round of 16", "type": "string" }, - "prefix": { - "example": "Qualification", + "operations": { + "items": { + "enum": [ + "search", + "metadata", + "read", + "references", + "citers" + ], + "type": "string" + }, + "type": "array" + }, + "source_id": { "type": "string" }, - "round": { - "example": 5, - "type": "integer" + "state": { + "enum": [ + "ready" + ], + "type": "string" }, - "slug": { - "example": "round-of-16", + "url": { "type": "string" } }, "type": "object" }, - "sofascore.ScheduledEventsResponse": { + "researchretrieval.PaperSourcesResponse": { "properties": { - "category_id": { - "type": "integer" - }, - "count": { - "type": "integer" - }, - "date": { - "example": "2026-10-08", - "type": "string" + "has_more": { + "type": "boolean" }, - "events": { + "items": { "items": { - "$ref": "#/definitions/sofascore.EventSummary" + "$ref": "#/definitions/researchretrieval.PaperSourceDescriptor" }, "type": "array" }, - "fetched_at": { + "next_cursor": { "type": "string" }, - "source_url": { + "registry_revision": { "type": "string" } }, "type": "object" }, - "sofascore.ScheduledTournament": { + "researchretrieval.PaperWarning": { "properties": { - "category_id": { - "example": 13, - "type": "integer" - }, - "category_name": { - "example": "Brazil", - "type": "string" - }, - "event_count": { - "description": "EventCount is the number of events that start on the requested UTC date.", - "example": 3, - "type": "integer" - }, - "id": { - "example": 83, - "type": "integer" - }, - "name": { - "example": "Campeonato Brasileiro Série A", + "code": { + "enum": [ + "source_failed", + "source_not_indexed", + "discovery_truncated", + "ranking_window_limit", + "imprecise_date_excluded", + "content_unavailable", + "cached_source_stale" + ], "type": "string" }, - "slug": { + "message": { "type": "string" }, - "unique_tournament_id": { - "example": 325, - "type": "integer" - }, - "unique_tournament_name": { + "source_id": { "type": "string" } }, "type": "object" }, - "sofascore.ScheduledTournamentsResponse": { + "resy.AvailabilityResponse": { "properties": { - "count": { - "type": "integer" - }, "date": { - "example": "2026-10-08", "type": "string" }, - "fetched_at": { - "type": "string" - }, - "has_next_page": { - "type": "boolean" - }, - "page": { - "example": 1, + "party_size": { "type": "integer" }, - "source_url": { - "type": "string" - }, - "sport": { - "example": "football", + "restaurant_id": { "type": "string" }, - "tournaments": { + "timeslots": { "items": { - "$ref": "#/definitions/sofascore.ScheduledTournament" + "$ref": "#/definitions/resy.Timeslot" }, "type": "array" } }, "type": "object" }, - "sofascore.ScoreLine": { + "resy.CuisinesResponse": { "properties": { - "current": { - "description": "Current score, which is the final score once the match is over.", - "type": "integer" - }, - "period1": { - "description": "Score in the first period.", - "type": "integer" + "cuisines": { + "items": { + "type": "string" + }, + "type": "array" }, - "period2": { - "description": "Score in the second period.", - "type": "integer" + "location": { + "type": "string" } }, "type": "object" }, - "sofascore.SearchResponse": { + "resy.Event": { "properties": { - "count": { - "description": "Number of results returned.", - "type": "integer" + "city": { + "type": "string" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", + "currency": { + "example": "USD", "type": "string" }, - "query": { - "description": "Search query that was run.", + "date": { + "example": "2026-09-20", "type": "string" }, - "results": { - "description": "Matching teams, players and other entities. Empty when nothing matches.", + "description": { + "type": "string" + }, + "end_time": { + "example": "17:00:00", + "type": "string" + }, + "general_sale_date": { + "type": "string" + }, + "images": { "items": { - "$ref": "#/definitions/sofascore.SearchResult" + "type": "string" }, "type": "array" }, - "source_url": { - "description": "SofaScore URL the data was read from.", - "type": "string" - } - }, - "type": "object" - }, - "sofascore.SearchResult": { - "properties": { - "country": { - "description": "Country of the result.", - "type": "string" + "is_presale": { + "type": "boolean" }, - "id": { - "description": "SofaScore id of the result. Which endpoints accept it depends on `type`.", + "max_party_size": { + "example": 8, + "type": "integer" + }, + "min_party_size": { + "example": 1, "type": "integer" }, "name": { - "description": "Name of the result.", + "example": "Breakfast & Citi Field Trip", "type": "string" }, - "slug": { - "description": "URL slug of the result on SofaScore.", + "neighborhood": { "type": "string" }, - "sport": { - "description": "Sport the result belongs to.", - "type": "string" + "price_max": { + "example": 85, + "type": "number" }, - "team_id": { - "description": "For a player, the SofaScore id of their team.", - "type": "integer" + "price_min": { + "example": 85, + "type": "number" }, - "team_name": { - "description": "For a player, the name of their team.", + "restaurant_id": { "type": "string" }, - "type": { - "description": "Kind of result, for example `team` or `player`.", - "example": "team", + "restaurant_name": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.SearchTypedResponse": { - "properties": { - "count": { - "type": "integer" }, - "fetched_at": { + "restaurant_url_slug": { + "description": "RestaurantURLSlug, together with URLSlug and the search/events\nLocation value, is what resy-event-detail needs to fetch this\nevent's full description and ticket packages.", "type": "string" }, - "page": { + "shift_id": { "type": "integer" }, - "query": { - "type": "string" - }, - "results": { - "items": { - "$ref": "#/definitions/sofascore.TypedSearchResult" - }, - "type": "array" - }, - "source_url": { + "time": { + "example": "09:30:00", "type": "string" }, - "sport": { + "url_slug": { "type": "string" }, - "type": { - "example": "teams", + "why_we_like_it": { "type": "string" } }, "type": "object" }, - "sofascore.Season": { + "resy.EventDetailResponse": { "properties": { - "id": { - "description": "SofaScore season id. Pass it to the standings and round endpoints.", - "type": "integer" - }, - "name": { - "description": "Season name.", + "currency": { "type": "string" }, - "year": { - "description": "Season label, for example 26/27.", + "date": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.SeasonEvent": { - "properties": { - "away_score": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.ScoreLine" - } - ], - "description": "Away side's score, when available." - }, - "away_team": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.TeamRef" - } - ], - "description": "Away side." - }, - "home_score": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.ScoreLine" - } - ], - "description": "Home side's score, when available." - }, - "home_team": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.TeamRef" - } - ], - "description": "Home side." - }, - "id": { - "description": "SofaScore event id. Use it with the event endpoints.", - "example": 14025013, - "type": "integer" }, - "round": { - "example": 3, - "type": "integer" + "description": { + "type": "string" }, - "round_name": { + "end_time": { "type": "string" }, - "slug": { - "description": "URL slug of the match on SofaScore.", + "enhanced_description": { "type": "string" }, - "start_time": { - "description": "Start time in UTC (RFC 3339).", - "example": "2025-08-15T19:00:00Z", + "enhanced_need_to_know": { "type": "string" }, - "start_timestamp": { - "description": "Start time as a Unix timestamp in seconds.", - "type": "integer" + "general_sale_date": { + "type": "string" }, - "status": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.EventStatus" - } - ], - "description": "Current status of the match." + "images": { + "items": { + "type": "string" + }, + "type": "array" }, - "tournament": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.TournamentRef" - } - ], - "description": "Tournament and parent competition the match belongs to." + "is_presale": { + "type": "boolean" }, - "winner_code": { - "description": "Result code: 1 when the home side won, 2 when the away side won, 3 for a draw. Omitted until the match is decided.", + "max_party_size": { "type": "integer" - } - }, - "type": "object" - }, - "sofascore.SeasonEventsResponse": { - "properties": { - "count": { + }, + "min_party_size": { "type": "integer" }, - "direction": { - "example": "next", + "name": { "type": "string" }, - "events": { + "need_to_know": { + "type": "string" + }, + "packages": { "items": { - "$ref": "#/definitions/sofascore.SeasonEvent" + "$ref": "#/definitions/resy.EventPackage" }, "type": "array" }, - "fetched_at": { - "type": "string" - }, - "has_next_page": { - "type": "boolean" + "price_max": { + "type": "number" }, - "page": { - "type": "integer" + "price_min": { + "type": "number" }, - "season_id": { + "shift_id": { "type": "integer" }, - "source_url": { + "time": { "type": "string" }, - "tournament_id": { - "type": "integer" + "url_slug": { + "type": "string" } }, "type": "object" }, - "sofascore.SeasonHeatmapPoint": { + "resy.EventPackage": { "properties": { - "count": { + "max_party_size": { + "example": 8, + "type": "integer" + }, + "min_party_size": { "example": 1, "type": "integer" }, - "x": { - "example": 71, - "type": "number" + "name": { + "example": "One Ticket for Breakfast & Citi Field Trip", + "type": "string" }, - "y": { - "example": 42, + "price_total": { + "example": 85, "type": "number" - } - }, - "type": "object" - }, - "sofascore.SeasonInfo": { - "properties": { - "away_team_wins": { - "type": "integer" - }, - "draws": { - "type": "integer" }, - "goals": { - "type": "integer" + "price_total_str": { + "example": "$85.00", + "type": "string" }, - "home_team_wins": { + "quantity_remaining": { + "example": 22, "type": "integer" }, - "id": { - "example": 96668, + "quantity_total": { + "example": 40, "type": "integer" }, - "name": { - "example": "Premier League 26/27", - "type": "string" + "sold_out": { + "type": "boolean" }, - "newcomers_lower_division": { + "timeslots": { "items": { - "$ref": "#/definitions/sofascore.TeamRef" + "$ref": "#/definitions/resy.Timeslot" }, "type": "array" }, - "newcomers_other": { + "whats_included": { "items": { - "$ref": "#/definitions/sofascore.TeamRef" + "type": "string" }, "type": "array" - }, - "newcomers_upper_division": { + } + }, + "type": "object" + }, + "resy.EventsResponse": { + "properties": { + "events": { "items": { - "$ref": "#/definitions/sofascore.TeamRef" + "$ref": "#/definitions/resy.Event" }, "type": "array" }, - "number_of_competitors": { - "type": "integer" - }, - "red_cards": { - "type": "integer" - }, - "year": { - "example": "26/27", + "location": { "type": "string" }, - "yellow_cards": { + "total": { "type": "integer" } }, "type": "object" }, - "sofascore.SeasonTeam": { + "resy.Location": { "properties": { - "country": { - "example": "England", + "code": { + "example": "ny", "type": "string" }, - "country_code": { - "example": "EN", + "country": { + "example": "United States", "type": "string" }, - "gender": { - "example": "M", + "country_code": { + "example": "US", "type": "string" }, "id": { - "example": 42, - "type": "integer" - }, - "name": { - "example": "Arsenal", - "type": "string" - }, - "name_code": { - "example": "ARS", + "example": "1", "type": "string" }, - "national": { - "type": "boolean" + "latitude": { + "type": "number" }, - "ranking": { - "type": "integer" + "longitude": { + "type": "number" }, - "short_name": { - "example": "Arsenal", + "name": { + "example": "New York", "type": "string" }, - "slug": { - "example": "arsenal", + "time_zone": { + "example": "America/New_York", "type": "string" }, - "sport": { - "example": "football", + "url_slug": { + "example": "new-york-ny", "type": "string" + } + }, + "type": "object" + }, + "resy.LocationsResponse": { + "properties": { + "locations": { + "items": { + "$ref": "#/definitions/resy.Location" + }, + "type": "array" }, - "type": { - "description": "Type is the upstream competitor type: 0 for a team, 1 for an individual\nplayer; other codes (for example doubles pairs) are passed through.", - "example": 0, - "type": "integer" - }, - "user_count": { + "total": { "type": "integer" } }, "type": "object" }, - "sofascore.Shot": { + "resy.RestaurantResponse": { "properties": { - "added_time": { - "example": 4, - "type": "integer" + "about": { + "type": "string" }, - "block_coordinates": { - "$ref": "#/definitions/sofascore.Coordinates" + "address": { + "example": "181 Thompson Street", + "type": "string" }, - "body_part": { - "example": "right-foot", + "average_cost_per_person": { + "example": "$150", "type": "string" }, - "coordinates": { - "$ref": "#/definitions/sofascore.Coordinates" + "city": { + "example": "New York", + "type": "string" }, - "goal_mouth_coordinates": { - "$ref": "#/definitions/sofascore.Coordinates" + "country": { + "type": "string" }, - "goal_mouth_location": { - "example": "low-left", + "cross_street": { "type": "string" }, - "goal_type": { - "example": "regular", + "cuisine": { + "example": "Italian", "type": "string" }, - "goalkeeper": { - "$ref": "#/definitions/sofascore.PlayerBrief" + "currency_symbol": { + "example": "$", + "type": "string" + }, + "description": { + "type": "string" }, "id": { - "type": "integer" + "type": "string" }, - "is_home": { - "type": "boolean" + "images": { + "items": { + "type": "string" + }, + "type": "array" }, - "minute": { - "example": 90, - "type": "integer" + "latitude": { + "type": "number" }, - "outcome": { - "example": "saved", + "location_code": { + "description": "LocationCode is Resy's short city code (e.g. \"ny\") -- pass it as\nresy-cuisines' or resy-events' location param to discover more about\nthis same city.", + "example": "ny", "type": "string" }, - "period": { - "example": "1ST", - "type": "string" + "longitude": { + "type": "number" }, - "period_time_seconds": { - "example": 458, + "max_party_size": { + "example": 14, "type": "integer" }, - "player": { - "$ref": "#/definitions/sofascore.PlayerBrief" - }, - "player_coordinates": { - "$ref": "#/definitions/sofascore.Coordinates" + "menu_url": { + "type": "string" }, - "reversed_period_time_seconds": { - "example": 742, + "min_party_size": { + "example": 1, "type": "integer" }, - "shot_type": { - "example": "goal", + "name": { "type": "string" }, - "situation": { - "example": "assisted", + "need_to_know": { "type": "string" }, - "strength": { - "example": "powerplay", + "neighborhood": { + "example": "Greenwich Village", "type": "string" }, - "team": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.TeamRef" - } - ], - "description": "Ice hockey fields. Hockey shots carry the shooting team, an outcome, the\nstrength situation and the period clock instead of a minute, and one\nrink position instead of pitch and goal-mouth coordinates." + "phone_number": { + "type": "string" }, - "time_seconds": { + "postal_code": { + "type": "string" + }, + "price_range": { + "example": 4, "type": "integer" }, - "xg": { - "example": 0.19, + "rating": { + "example": 4.75, "type": "number" }, - "xgot": { - "example": 0.08, - "type": "number" - } - }, - "type": "object" - }, - "sofascore.SportEntry": { - "properties": { - "key": { - "example": "football", + "region": { + "example": "NY", "type": "string" }, - "live_events": { - "example": 3, + "review_count": { + "example": 33837, "type": "integer" }, - "name": { - "example": "Football", + "url_slug": { + "example": "carbone", "type": "string" }, - "total_events": { - "example": 1441, - "type": "integer" + "website": { + "type": "string" + }, + "why_we_like_it": { + "type": "string" } }, "type": "object" }, - "sofascore.SportsResponse": { + "resy.SearchResponse": { "properties": { - "count": { - "example": 24, - "type": "integer" - }, - "counts_available": { - "description": "CountsAvailable is false when the live count feed could not be read; the\nsport list itself is always complete.", - "type": "boolean" - }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" + "available_cuisines": { + "description": "AvailableCuisines lists the cuisines present among restaurants near this\nsearch location (Resy's own search facet) -- use it to discover cuisine\nvalues worth passing back in Term, since the upstream search index has\nno separate structured cuisine filter (confirmed live: a top-level\n\"cuisine\" search field is rejected as an unknown field).", + "items": { + "type": "string" + }, + "type": "array" }, - "sports": { + "results": { "items": { - "$ref": "#/definitions/sofascore.SportEntry" + "$ref": "#/definitions/resy.SearchResult" }, "type": "array" + }, + "term": { + "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "sofascore.SquadPlayer": { + "resy.SearchResult": { "properties": { - "country": { - "description": "Player's country.", - "type": "string" - }, - "date_of_birth": { - "description": "Date of birth (RFC 3339).", + "city": { + "example": "New York", "type": "string" }, - "height": { - "description": "Height in centimetres.", - "type": "integer" + "cuisines": { + "example": [ + "Italian" + ], + "items": { + "type": "string" + }, + "type": "array" }, "id": { - "description": "SofaScore player id. Use it with the player endpoints.", - "type": "integer" - }, - "jersey_number": { - "description": "Shirt number.", - "type": "string" - }, - "market_value": { - "description": "SofaScore's estimated market value, in units of `market_value_currency`. Omitted when unavailable.", - "type": "integer" - }, - "market_value_currency": { - "description": "Currency of `market_value`, for example EUR.", + "example": "6194", "type": "string" }, - "name": { - "description": "Player's full name.", - "type": "string" + "latitude": { + "type": "number" }, - "position": { - "description": "Position code, for example G, D, M or F.", + "location_code": { + "description": "LocationCode is Resy's short city code (e.g. \"ny\") -- pass it as\nresy-cuisines' or resy-events' location param to discover more about\nthis same city.", + "example": "ny", "type": "string" }, - "preferred_foot": { - "description": "Preferred foot, for example \"Right\".", + "location_url_slug": { + "example": "new-york-ny", "type": "string" }, - "short_name": { - "description": "Shortened name, for example \"E. Haaland\".", - "type": "string" + "longitude": { + "type": "number" }, - "slug": { - "description": "URL slug of the player on SofaScore.", + "name": { + "example": "Carbone", "type": "string" - } - }, - "type": "object" - }, - "sofascore.Stage": { - "properties": { - "competition": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.StageCompetition" - } - ], - "description": "Competition is the series this stage belongs to." }, - "country": { - "example": "Azerbaijan", + "neighborhood": { + "example": "Greenwich Village", "type": "string" }, - "country_code": { - "example": "AZ", + "phone_number": { "type": "string" }, - "end_timestamp": { - "description": "EndTimestamp is omitted when SofaScore publishes none or one before the start.", - "type": "integer" - }, - "id": { - "example": 214258, + "price_range": { + "example": 4, "type": "integer" }, - "info": { - "$ref": "#/definitions/sofascore.StageInfo" - }, - "name": { - "example": "Grand Prix", - "type": "string" - }, - "on_date": { - "description": "OnDate is true when at least one session of the event starts inside the\nrequested UTC day (stage-schedule only).", - "type": "boolean" - }, - "parent": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.StageRef" - } - ], - "description": "Parent is the season of an event, the event of a session, and so on." - }, - "parts": { - "description": "Parts are the qualifying or practice parts of a session (substages only).", - "items": { - "$ref": "#/definitions/sofascore.StageSession" - }, - "type": "array" + "rating": { + "example": 4.75, + "type": "number" }, - "season_name": { - "example": "Formula 1 2026", + "region": { + "example": "NY", "type": "string" }, - "sequence": { - "description": "Sequence orders practice sessions and cycling stages within their event.", - "example": 1, + "review_count": { + "example": 33837, "type": "integer" }, - "session": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.StageSession" - } - ], - "description": "Session is the session SofaScore highlights for an event: the live,\nnext or latest one (schedule routes only)." - }, - "session_start_timestamps": { - "description": "SessionStartTimestamps lists every session start of an event (schedule\nroutes only).", + "timeslots": { "items": { - "type": "integer" + "$ref": "#/definitions/resy.Timeslot" }, "type": "array" }, - "slug": { - "example": "grand-prix", - "type": "string" - }, - "start_time": { - "example": "2026-09-26T11:00:00Z", - "type": "string" - }, - "start_timestamp": { - "example": 1790420400, - "type": "integer" - }, - "status": { - "$ref": "#/definitions/sofascore.StageStatus" - }, - "type": { - "$ref": "#/definitions/sofascore.StageType" - }, - "winner": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.StageEntity" - } - ], - "description": "Winner is set once the stage has a winner; for practice and qualifying it is the fastest competitor." - }, - "year": { - "example": "2026", + "url_slug": { + "example": "carbone", "type": "string" } }, "type": "object" }, - "sofascore.StageCategoriesResponse": { + "resy.Timeslot": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/sofascore.StageCategory" - }, - "type": "array" + "end": { + "example": "2026-09-20 20:30:00", + "type": "string" }, - "count": { - "example": 28, + "max_party_size": { + "example": 4, "type": "integer" }, - "fetched_at": { + "min_party_size": { + "example": 1, + "type": "integer" + }, + "seating_type": { + "example": "Dining Room", "type": "string" }, - "source_url": { + "start": { + "description": "Start/End are Resy's own local \"YYYY-MM-DD HH:MM:SS\" strings (not RFC3339\n-- kept as upstream returns them since seating-area shifts don't carry a\nUTC offset in the response).", + "example": "2026-09-20 19:00:00", "type": "string" }, - "sport": { - "example": "motorsport", + "token": { + "description": "Token is Resy's opaque reservation-config identifier for this slot\n(an \"rgs://...\" string). It is only meaningful back to Resy's own\nbooking flow -- this service does not implement booking, only\ndiscovery.", "type": "string" } }, "type": "object" }, - "sofascore.StageCategory": { + "resy.availabilityResponseDoc": { "properties": { - "competitions": { - "items": { - "$ref": "#/definitions/sofascore.StageCompetition" - }, - "type": "array" - }, - "flag": { - "example": "formula-1", - "type": "string" - }, - "id": { - "example": 36, + "code": { + "example": 200, "type": "integer" }, - "name": { - "example": "Formula 1", - "type": "string" - }, - "priority": { - "example": 13, - "type": "integer" + "data": { + "$ref": "#/definitions/resy.AvailabilityResponse" }, - "slug": { - "example": "formula-1", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sofascore.StageCompetition": { + "resy.cuisinesResponseDoc": { "properties": { - "category_id": { - "example": 36, - "type": "integer" - }, - "category_name": { - "example": "Formula 1", - "type": "string" - }, - "id": { - "example": 40, + "code": { + "example": 200, "type": "integer" }, - "name": { - "example": "Formula 1", - "type": "string" - }, - "slug": { - "example": "formula-1", - "type": "string" + "data": { + "$ref": "#/definitions/resy.CuisinesResponse" }, - "sport": { - "example": "motorsport", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sofascore.StageDetailResponse": { + "resy.eventDetailResponseDoc": { "properties": { - "fetched_at": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/resy.EventDetailResponse" }, - "stage": { - "$ref": "#/definitions/sofascore.Stage" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "sofascore.StageDriverPerformanceResponse": { + "resy.eventsResponseDoc": { "properties": { - "competitors": { - "items": { - "$ref": "#/definitions/sofascore.StagePerformance" - }, - "type": "array" - }, - "count": { + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" + "data": { + "$ref": "#/definitions/resy.EventsResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" - }, - "stage": { - "$ref": "#/definitions/sofascore.Stage" - }, - "stage_id": { - "example": 214258, - "type": "integer" } }, "type": "object" }, - "sofascore.StageEntity": { + "resy.locationsResponseDoc": { "properties": { "code": { - "description": "Code is the three-letter timing code (for example RUS), when published.", - "example": "RUS", - "type": "string" - }, - "country": { - "example": "United Kingdom", - "type": "string" - }, - "country_code": { - "example": "GB", - "type": "string" - }, - "id": { - "example": 271315, + "example": 200, "type": "integer" }, - "kind": { - "description": "Kind is individual for a driver or rider and team for a team or constructor.", - "example": "individual", - "type": "string" - }, - "name": { - "example": "George Russell", - "type": "string" - }, - "short_name": { - "example": "G. Russell", - "type": "string" + "data": { + "$ref": "#/definitions/resy.LocationsResponse" }, - "slug": { - "example": "russell-george", + "msg": { + "example": "OK", "type": "string" - }, - "team": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.StageTeamRef" - } - ], - "description": "Team is the team or constructor of an individual competitor." } }, "type": "object" }, - "sofascore.StageFeaturedResponse": { + "resy.restaurantResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/resy.RestaurantResponse" }, - "sport": { - "example": "motorsport", + "msg": { + "example": "OK", "type": "string" - }, - "stages": { - "items": { - "$ref": "#/definitions/sofascore.Stage" - }, - "type": "array" } }, "type": "object" }, - "sofascore.StageInfo": { + "resy.searchResponseDoc": { "properties": { - "actual_distance": { - "example": 400.5, - "type": "number" - }, - "air_temperature": { - "description": "AirTemperature and TrackTemperature are degrees Celsius; Humidity is a percentage.", - "example": 26.5, - "type": "number" - }, - "arrival_city": { - "example": "Kampar", - "type": "string" - }, - "average_speed": { - "example": 147.363, - "type": "number" - }, - "caution_laps": { - "example": 21, - "type": "integer" - }, - "cautions": { - "example": 4, + "code": { + "example": 200, "type": "integer" }, - "circuit": { - "example": "Baku City Circuit", - "type": "string" - }, - "circuit_city": { - "example": "Baku", - "type": "string" - }, - "circuit_country": { - "example": "Azerbaijan", - "type": "string" - }, - "circuit_length_m": { - "example": 6003, - "type": "number" + "data": { + "$ref": "#/definitions/resy.SearchResponse" }, - "departure_city": { - "example": "Shah Alam", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "retailmenot.AutocompleteGroup": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/retailmenot.AutocompleteItem" + }, + "type": "array" }, - "discipline": { - "description": "Cycling facts.", - "example": "Category Pro", + "label": { "type": "string" }, - "distance": { - "description": "NASCAR facts. Distances use the series' own unit (miles).", - "example": 400, - "type": "number" - }, - "elapsed_time": { - "example": "2:43:04", + "name": { "type": "string" - }, - "humidity": { - "example": 50.4, - "type": "number" - }, - "lap_record": { - "example": "1:44.916", + } + }, + "type": "object" + }, + "retailmenot.AutocompleteItem": { + "properties": { + "category_slug": { + "description": "CategorySlug is set on category suggestions; use it with\nGET /retailmenot/category.", "type": "string" }, - "laps": { - "description": "Laps is the scheduled lap count and LapsCompleted the laps actually run.", - "example": 51, - "type": "integer" - }, - "laps_completed": { - "example": 51, - "type": "integer" - }, - "lead_changes": { - "example": 12, - "type": "integer" - }, - "race_distance_m": { - "description": "RaceDistanceM and CircuitLengthM are in metres.", - "example": 306049, - "type": "number" - }, - "race_segments": { - "description": "RaceSegments is the number of scored segments in a NASCAR race.", - "example": 2, - "type": "integer" - }, - "race_type": { - "example": "normal", + "domain": { "type": "string" }, - "round": { - "description": "Round is the championship round of an event, or the stage number within a\ncycling race or rally; practice, qualifying and race sessions carry none.", - "example": 15, - "type": "integer" - }, - "safety_car": { - "type": "boolean" - }, - "special_stages": { - "description": "SpecialStages is the number of special stages of a rally (0 for a canceled rally).", - "example": 17, - "type": "integer" - }, - "stage_day": { - "description": "StageDay is the weekday label (THU, FRI, SAT, SUN) of a rally stage or race-weekend session.", - "example": "FRI", + "meta_info": { "type": "string" }, - "summary": { + "offer_id": { "type": "string" }, - "track_condition": { - "example": "Dry", + "title": { "type": "string" }, - "track_temperature": { - "example": 40.1, - "type": "number" - }, - "weather": { - "example": "sunny", + "url": { "type": "string" } }, "type": "object" }, - "sofascore.StageLap": { + "retailmenot.AutocompleteResponse": { "properties": { - "lap": { - "example": 1, - "type": "integer" - }, - "pit_stop": { - "type": "boolean" - }, - "position": { - "description": "Position is omitted on the lap a competitor retired.", - "example": 1, - "type": "integer" - }, - "retired": { - "type": "boolean" - }, - "tyre_type": { - "example": "M", - "type": "string" + "groups": { + "items": { + "$ref": "#/definitions/retailmenot.AutocompleteGroup" + }, + "type": "array" } }, "type": "object" }, - "sofascore.StagePerformance": { + "retailmenot.BlogCategoriesResponse": { "properties": { - "competitor": { - "$ref": "#/definitions/sofascore.StageEntity" - }, - "laps": { - "description": "Laps is set for circuit races.", - "items": { - "$ref": "#/definitions/sofascore.StageLap" - }, - "type": "array" - }, - "stage_positions": { - "description": "StagePositions is set for rallies.", + "categories": { "items": { - "$ref": "#/definitions/sofascore.StageSpecialStagePosition" + "$ref": "#/definitions/retailmenot.BlogCategory" }, "type": "array" - }, - "start_number": { - "example": 63, - "type": "integer" } }, "type": "object" }, - "sofascore.StageRef": { + "retailmenot.BlogCategory": { "properties": { - "id": { - "example": 214253, + "count": { "type": "integer" }, - "name": { - "example": "Azerbaijan GP", - "type": "string" - }, - "slug": { - "example": "azerbaijan-gp", + "description": { "type": "string" }, - "start_timestamp": { - "type": "integer" - } - }, - "type": "object" - }, - "sofascore.StageScheduleResponse": { - "properties": { - "count": { + "id": { "type": "integer" }, - "date": { - "example": "2026-10-04", + "name": { "type": "string" }, - "fetched_at": { - "type": "string" + "parent_id": { + "type": "integer" }, - "source_url": { + "slug": { "type": "string" }, - "sport": { - "example": "motorsport", + "url": { "type": "string" - }, - "stages": { - "items": { - "$ref": "#/definitions/sofascore.Stage" - }, - "type": "array" } }, "type": "object" }, - "sofascore.StageSeason": { + "retailmenot.BlogLink": { "properties": { - "end_timestamp": { - "description": "EndTimestamp is omitted for the season still in progress.", - "example": 1765119600, - "type": "integer" - }, - "id": { - "example": 214140, - "type": "integer" - }, "name": { - "example": "Formula 1 2026", "type": "string" }, "slug": { - "example": "formula-1-2026", "type": "string" }, - "start_timestamp": { - "example": 1767254187, - "type": "integer" - }, - "year": { - "example": "2026", + "url": { "type": "string" } }, "type": "object" }, - "sofascore.StageSeasonsResponse": { + "retailmenot.BlogPostResponse": { "properties": { - "competition": { - "$ref": "#/definitions/sofascore.StageCompetition" - }, - "count": { - "example": 77, - "type": "integer" - }, - "fetched_at": { + "author": { "type": "string" }, - "seasons": { + "categories": { "items": { - "$ref": "#/definitions/sofascore.StageSeason" + "$ref": "#/definitions/retailmenot.BlogTerm" }, "type": "array" }, - "source_url": { + "coupon_categories": { + "items": { + "$ref": "#/definitions/retailmenot.BlogLink" + }, + "type": "array" + }, + "description": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.StageSession": { - "properties": { + }, + "excerpt": { + "type": "string" + }, "id": { - "example": 214258, "type": "integer" }, - "name": { - "example": "Grand Prix", + "image_url": { "type": "string" }, - "sequence": { - "example": 1, - "type": "integer" + "modified": { + "type": "string" + }, + "published": { + "type": "string" + }, + "sections": { + "items": { + "$ref": "#/definitions/retailmenot.BlogSection" + }, + "type": "array" }, "slug": { - "example": "grand-prix", "type": "string" }, - "start_timestamp": { - "example": 1790420400, - "type": "integer" + "stores": { + "items": { + "$ref": "#/definitions/retailmenot.BlogLink" + }, + "type": "array" }, - "status": { - "$ref": "#/definitions/sofascore.StageStatus" + "tags": { + "items": { + "$ref": "#/definitions/retailmenot.BlogTerm" + }, + "type": "array" }, - "type": { - "$ref": "#/definitions/sofascore.StageType" - } - }, - "type": "object" - }, - "sofascore.StageSpecialStagePosition": { - "properties": { - "position": { - "example": 3, - "type": "integer" + "title": { + "type": "string" }, - "stage": { - "example": 1, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "sofascore.StageStanding": { + "retailmenot.BlogPostSummary": { "properties": { - "bonus_points": { - "type": "number" - }, - "comment": { - "example": "Retired", + "author": { "type": "string" }, - "competitor": { - "$ref": "#/definitions/sofascore.StageEntity" - }, - "did_not_finish": { - "description": "DidNotFinish is 1 in a race row for a competitor who did not finish; in a\nNASCAR season row it counts the races not finished.", - "example": 1, - "type": "integer" - }, - "distance": { - "description": "Distance is the distance covered in a NASCAR race, in the series' unit (miles).", - "example": 400, - "type": "number" + "categories": { + "items": { + "$ref": "#/definitions/retailmenot.BlogTerm" + }, + "type": "array" }, - "fastest_lap_time": { - "example": "1:44.916", + "description": { "type": "string" }, - "fastest_laps": { - "description": "FastestLaps is the number of fastest laps (race row) or fastest laps of the season (season row).", - "example": 1, - "type": "integer" - }, - "gap": { - "description": "Gap is the time behind the leader, or DNF (did not finish) or DNS (did not start).", - "example": "+0.196", + "excerpt": { "type": "string" }, - "grid_position": { - "description": "GridPosition is the starting grid slot of a race.", - "example": 1, + "id": { "type": "integer" }, - "interval": { - "description": "Interval is the time behind the competitor ahead.", - "example": "+0.196", + "image_url": { "type": "string" }, - "jersey": { - "description": "Jersey is the classification jersey a cycling rider wears (general for the overall leader).", - "example": "general", + "modified": { "type": "string" }, - "laps": { - "example": 51, - "type": "integer" - }, - "laps_behind": { - "type": "integer" - }, - "laps_led": { - "example": 51, - "type": "integer" - }, - "personal_fastest_lap": { - "example": 49, - "type": "integer" - }, - "personal_fastest_lap_time": { - "example": "1:44.916", + "published": { "type": "string" }, - "pit_stops": { - "example": 2, - "type": "integer" - }, - "podiums": { - "example": 13, - "type": "integer" - }, - "points": { - "description": "Points are omitted when the row earned none published.", - "example": 25, - "type": "number" - }, - "pole_positions": { - "example": 6, - "type": "integer" - }, - "position": { - "description": "Position is the classified position. It is omitted for competitors who\ndid not finish or set no time.", - "example": 1, - "type": "integer" - }, - "races_started": { - "example": 16, - "type": "integer" - }, - "races_with_points": { - "example": 14, - "type": "integer" + "slug": { + "type": "string" }, - "rank": { - "description": "Rank is the points rank of a NASCAR classification, which can differ from Position.", - "type": "integer" + "tags": { + "items": { + "$ref": "#/definitions/retailmenot.BlogTerm" + }, + "type": "array" }, - "start_number": { - "description": "StartNumber is the car, bike or bib number.", - "example": 63, - "type": "integer" + "title": { + "type": "string" }, - "status": { - "description": "Status is Finished, Out or Did not start; SubStatus gives the reason (Retired, Did not start); Comment is free text.", - "example": "Out", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "retailmenot.BlogPostsResponse": { + "properties": { + "category": { "type": "string" }, - "sub_status": { - "example": "Retired", + "order": { + "enum": [ + "desc", + "asc" + ], "type": "string" }, - "time": { - "description": "Time is the race time, the best lap of a practice or qualifying session, or a stage time.\nSome series (IndyCar) publish the time behind the winner here for every row but the first.", - "example": "1:38:02.143", + "order_by": { + "enum": [ + "date", + "modified", + "title", + "relevance" + ], "type": "string" }, - "top10": { + "page": { "type": "integer" }, - "top5": { + "page_size": { "type": "integer" }, - "total_time": { - "example": "28:57:04", - "type": "string" - }, - "tyre_state": { - "example": "Used", - "type": "string" - }, - "tyre_stints": { + "posts": { "items": { - "$ref": "#/definitions/sofascore.StageTyreStint" + "$ref": "#/definitions/retailmenot.BlogPostSummary" }, "type": "array" }, - "tyre_type": { - "description": "TyreType is the compound code at the finish (S, M observed); TyreStints lists every stint.", - "example": "S", + "query": { "type": "string" }, - "updated_timestamp": { - "description": "UpdatedTimestamp is when SofaScore last updated the row (Unix seconds).", - "example": 1790428823, + "tag": { + "type": "string" + }, + "total": { "type": "integer" }, - "victories": { - "description": "Season championship totals.", - "example": 8, + "total_pages": { "type": "integer" } }, "type": "object" }, - "sofascore.StageStandingsResponse": { + "retailmenot.BlogSection": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "stage_id": { - "example": 214258, - "type": "integer" - }, - "standings": { + "lists": { "items": { - "$ref": "#/definitions/sofascore.StageStanding" + "items": { + "type": "string" + }, + "type": "array" }, "type": "array" }, - "type": { - "example": "competitor", - "type": "string" - } - }, - "type": "object" - }, - "sofascore.StageStatus": { - "properties": { - "description": { - "example": "Finished", - "type": "string" + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" }, - "type": { - "example": "finished", + "title": { "type": "string" } }, "type": "object" }, - "sofascore.StageSubstagesResponse": { + "retailmenot.BlogTagsResponse": { "properties": { - "count": { + "page": { "type": "integer" }, - "fetched_at": { - "type": "string" + "page_size": { + "type": "integer" }, - "source_url": { + "query": { "type": "string" }, - "stage_id": { - "example": 214253, - "type": "integer" - }, - "stages": { + "tags": { "items": { - "$ref": "#/definitions/sofascore.Stage" + "$ref": "#/definitions/retailmenot.BlogTerm" }, "type": "array" + }, + "total": { + "type": "integer" + }, + "total_pages": { + "type": "integer" } }, "type": "object" }, - "sofascore.StageTeamRef": { + "retailmenot.BlogTerm": { "properties": { - "chassis": { - "description": "Chassis and Engine are published for Formula 1 constructors only.", - "example": "W17", - "type": "string" - }, - "code": { - "example": "MER", - "type": "string" - }, - "country": { - "example": "Germany", - "type": "string" - }, - "engine": { - "example": "Mercedes-AMG F1 M17", - "type": "string" + "count": { + "type": "integer" }, "id": { - "example": 214910, "type": "integer" }, "name": { - "example": "Mercedes", "type": "string" }, - "short_name": { - "example": "Mercedes", + "slug": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.StageType": { - "properties": { - "id": { - "example": 6, - "type": "integer" }, - "name": { - "example": "Race", + "url": { "type": "string" } }, "type": "object" }, - "sofascore.StageTyreStint": { + "retailmenot.CashBackResponse": { "properties": { - "laps": { - "example": 31, - "type": "integer" - }, - "type": { - "example": "M", - "type": "string" + "sections": { + "items": { + "$ref": "#/definitions/retailmenot.OfferSection" + }, + "type": "array" } }, "type": "object" }, - "sofascore.StandingsGroup": { + "retailmenot.CategoriesResponse": { "properties": { - "name": { - "description": "Table name, set when the competition publishes more than one table, such as group-stage groups.", - "type": "string" - }, - "rows": { - "description": "Table rows in position order.", + "categories": { "items": { - "$ref": "#/definitions/sofascore.StandingsRow" + "$ref": "#/definitions/retailmenot.Category" }, "type": "array" } }, "type": "object" }, - "sofascore.StandingsResponse": { + "retailmenot.Category": { "properties": { - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "type": "string" - }, - "groups": { - "description": "One entry per table the competition publishes.", - "items": { - "$ref": "#/definitions/sofascore.StandingsGroup" - }, - "type": "array" - }, - "season_id": { - "description": "SofaScore season id.", + "level": { "type": "integer" }, - "source_url": { - "description": "SofaScore URL the data was read from.", + "name": { "type": "string" }, - "tournament_id": { - "description": "Id of the competition (the unique tournament id).", - "type": "integer" + "parent_slug": { + "type": "string" }, - "type": { - "description": "Which table was requested: `total`, `home` or `away`.", - "example": "total", + "slug": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "sofascore.StandingsRow": { + "retailmenot.CategoryOffer": { "properties": { - "draws": { - "description": "Matches drawn.", - "type": "integer" - }, - "losses": { - "description": "Matches lost.", - "type": "integer" + "discount": { + "type": "string" }, - "matches": { - "description": "Matches played.", - "type": "integer" + "id": { + "type": "string" }, - "points": { - "description": "Points in the table.", - "type": "integer" + "offer_type": { + "type": "string" }, "position": { - "description": "Position in the table.", "type": "integer" }, - "promotion": { - "description": "What the position currently leads to, for example \"Champions League\". Omitted when the position carries nothing.", - "example": "Champions League", + "store_domain": { "type": "string" }, - "scores_against": { - "description": "Goals or points conceded.", - "type": "integer" + "store_name": { + "type": "string" }, - "scores_for": { - "description": "Goals or points scored.", - "type": "integer" + "store_url": { + "type": "string" }, - "team": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.TeamRef" - } - ], - "description": "The team." + "title": { + "type": "string" }, - "wins": { - "description": "Matches won.", - "type": "integer" + "type_label": { + "type": "string" } }, "type": "object" }, - "sofascore.StatGroup": { + "retailmenot.CategoryRef": { "properties": { - "items": { - "description": "Statistics in the group.", - "items": { - "$ref": "#/definitions/sofascore.StatItem" - }, - "type": "array" - }, "name": { - "description": "Group name, for example \"Match overview\" or \"Shots\".", + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "sofascore.StatItem": { + "retailmenot.CategoryResponse": { "properties": { - "away": { - "description": "Away side's value as displayed, for example 39%.", - "example": "39%", + "description": { "type": "string" }, - "home": { - "description": "Home side's value as displayed, for example 61%.", - "example": "61%", + "name": { "type": "string" }, - "key": { - "description": "Stable key for the statistic, for example `ballPossession`.", - "example": "ballPossession", - "type": "string" + "offers": { + "items": { + "$ref": "#/definitions/retailmenot.CategoryOffer" + }, + "type": "array" }, - "name": { - "description": "Statistic name, for example \"Ball possession\".", - "example": "Ball possession", + "page": { + "type": "integer" + }, + "similar_stores": { + "items": { + "$ref": "#/definitions/retailmenot.StoreRef" + }, + "type": "array" + }, + "slug": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.StatPeriod": { - "properties": { - "groups": { - "description": "Statistic groups for the period.", + }, + "stats": { "items": { - "$ref": "#/definitions/sofascore.StatGroup" + "$ref": "#/definitions/retailmenot.Stat" }, "type": "array" }, - "period": { - "description": "Period the statistics cover: `ALL`, `1ST` or `2ND`.", - "example": "ALL", + "total_pages": { + "type": "integer" + }, + "url": { "type": "string" } }, "type": "object" }, - "sofascore.StatisticsSeason": { + "retailmenot.DealEventRef": { "properties": { - "id": { - "example": 96668, - "type": "integer" - }, "name": { - "example": "Premier League 26/27", "type": "string" }, - "types": { - "items": { - "enum": [ - "overall", - "home", - "away", - "regular_season", - "playoffs" - ], - "type": "string" - }, - "type": "array" + "slug": { + "type": "string" }, - "year": { - "example": "26/27", + "url": { "type": "string" } }, "type": "object" }, - "sofascore.StatisticsTournament": { + "retailmenot.DealEventResponse": { "properties": { - "category": { - "example": "England", - "type": "string" - }, "name": { - "example": "Premier League", "type": "string" }, - "seasons": { + "sections": { "items": { - "$ref": "#/definitions/sofascore.StatisticsSeason" + "$ref": "#/definitions/retailmenot.OfferSection" }, "type": "array" }, "slug": { - "example": "premier-league", "type": "string" }, - "unique_tournament_id": { - "example": 17, - "type": "integer" - } - }, - "type": "object" - }, - "sofascore.TVChannel": { - "properties": { - "id": { - "example": 1057, - "type": "integer" - }, - "name": { - "example": "Sky Sports Premier League", + "url": { "type": "string" } }, "type": "object" }, - "sofascore.TVCountryChannels": { + "retailmenot.DealEventsResponse": { "properties": { - "channel_ids": { + "events": { "items": { - "type": "integer" + "$ref": "#/definitions/retailmenot.DealEventRef" }, "type": "array" - }, - "country": { - "example": "GB", - "type": "string" } }, "type": "object" }, - "sofascore.TeamAchievement": { + "retailmenot.FAQ": { "properties": { - "competition": { - "$ref": "#/definitions/sofascore.UniqueTournamentBrief" - }, - "seasons": { - "description": "Seasons lists the winning seasons, newest first. It can be empty or\nshorter than TrophiesWon (US leagues report a count without years).", - "items": { - "$ref": "#/definitions/sofascore.AchievementSeason" - }, - "type": "array" + "answer": { + "type": "string" }, - "trophies_won": { - "example": 10, - "type": "integer" + "question": { + "type": "string" } }, "type": "object" }, - "sofascore.TeamAchievementsResponse": { + "retailmenot.HomeResponse": { "properties": { - "achievements": { + "faqs": { "items": { - "$ref": "#/definitions/sofascore.TeamAchievement" + "$ref": "#/definitions/retailmenot.FAQ" }, "type": "array" }, - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "team_id": { - "example": 17, - "type": "integer" + "product_deals": { + "items": { + "$ref": "#/definitions/retailmenot.ProductDeal" + }, + "type": "array" }, - "total_trophies": { - "example": 45, - "type": "integer" + "sections": { + "items": { + "$ref": "#/definitions/retailmenot.OfferSection" + }, + "type": "array" } }, "type": "object" }, - "sofascore.TeamDetail": { + "retailmenot.Offer": { "properties": { - "country": { - "description": "Country the team belongs to.", - "example": "Spain", - "type": "string" - }, - "id": { - "description": "SofaScore team id. Use it with the team endpoints.", - "example": 2817, - "type": "integer" - }, - "manager": { + "button_text": { "type": "string" }, - "name": { - "description": "Full team name.", - "example": "FC Barcelona", + "cash_back": { "type": "string" }, - "national": { - "description": "True for a national team.", - "type": "boolean" + "details": { + "items": { + "type": "string" + }, + "type": "array" }, - "primary_color": { + "discount": { "type": "string" }, - "short_name": { - "description": "Shortened team name.", - "example": "Barcelona", + "id": { "type": "string" }, - "slug": { - "description": "URL slug of the team on SofaScore.", - "example": "barcelona", - "type": "string" + "labels": { + "items": { + "type": "string" + }, + "type": "array" }, - "sport": { - "example": "Football", + "offer_type": { + "description": "OfferType is RetailMeNot's offer kind, for example \"COUPON\", \"SALE\", or\n\"REWARD\" (observed values; returned as data).", "type": "string" }, - "tournament_id": { + "position": { "type": "integer" }, - "tournament_name": { + "section": { + "description": "Section is the page section the offer was listed in, for example\n\"top_offers\", \"unverified_offers\", \"suggested_offers\", or\n\"expired_offers\" (observed values; returned as data).", "type": "string" }, - "venue": { + "title": { "type": "string" }, - "venue_capacity": { - "type": "integer" - }, - "venue_city": { + "type_label": { "type": "string" } }, "type": "object" }, - "sofascore.TeamDuel": { + "retailmenot.OfferSection": { "properties": { - "away_wins": { - "description": "Past meetings won by the away side of this match.", - "type": "integer" + "category_slug": { + "type": "string" }, - "draws": { - "description": "Past meetings that ended in a draw.", - "type": "integer" + "name": { + "type": "string" }, - "home_wins": { - "description": "Past meetings won by the home side of this match.", - "type": "integer" + "offers": { + "items": { + "$ref": "#/definitions/retailmenot.CategoryOffer" + }, + "type": "array" } }, "type": "object" }, - "sofascore.TeamEventsResponse": { + "retailmenot.ProductDeal": { "properties": { - "count": { - "description": "Number of events on this page.", - "type": "integer" - }, - "direction": { - "description": "Which fixtures were requested: `next` for upcoming, `last` for past.", - "example": "next", + "discount": { "type": "string" }, - "events": { - "description": "Fixtures on this page. Empty when there are none.", - "items": { - "$ref": "#/definitions/sofascore.EventSummary" - }, - "type": "array" - }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", + "id": { "type": "string" }, - "has_next_page": { - "description": "True when page + 1 has more fixtures in the same direction.", - "type": "boolean" + "image_url": { + "type": "string" }, - "page": { - "description": "Zero-based page number returned.", + "position": { "type": "integer" }, - "source_url": { - "description": "SofaScore URL the data was read from.", + "product_url": { "type": "string" }, - "team_id": { - "description": "SofaScore team id the fixtures belong to.", - "type": "integer" + "title": { + "type": "string" } }, "type": "object" }, - "sofascore.TeamGoalDistributionsResponse": { + "retailmenot.Rating": { "properties": { - "distributions": { - "items": { - "$ref": "#/definitions/sofascore.GoalDistribution" - }, - "type": "array" - }, - "fetched_at": { - "type": "string" - }, - "season_id": { - "example": 96668, - "type": "integer" - }, - "source_url": { - "type": "string" - }, - "team_id": { - "example": 17, + "count": { "type": "integer" }, - "tournament_id": { - "example": 17, - "type": "integer" + "value": { + "type": "number" } }, "type": "object" }, - "sofascore.TeamLineup": { + "retailmenot.Stat": { "properties": { - "formation": { - "description": "Formation, for example 4-3-3.", - "example": "4-3-3", + "label": { "type": "string" }, - "players": { - "description": "Starting players and substitutes.", - "items": { - "$ref": "#/definitions/sofascore.LineupPlayer" - }, - "type": "array" + "value": { + "type": "integer" } }, "type": "object" }, - "sofascore.TeamNearEventsResponse": { + "retailmenot.StoreRef": { "properties": { - "fetched_at": { + "domain": { "type": "string" }, - "next_event": { - "$ref": "#/definitions/sofascore.EventSummary" - }, - "previous_event": { - "$ref": "#/definitions/sofascore.EventSummary" - }, - "source_url": { + "name": { "type": "string" }, - "team_id": { - "example": 17, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "sofascore.TeamOfTheWeekPeriod": { + "retailmenot.StoreResponse": { "properties": { - "created_at": { + "address": { "type": "string" }, - "date_from": { + "category": { + "$ref": "#/definitions/retailmenot.CategoryRef" + }, + "description": { "type": "string" }, - "date_to": { + "domain": { "type": "string" }, - "id": { - "example": 29321, - "type": "integer" + "faqs": { + "items": { + "$ref": "#/definitions/retailmenot.FAQ" + }, + "type": "array" }, - "name": { - "example": "round", + "heading": { "type": "string" }, - "round": { - "type": "integer" - }, - "round_name": { + "last_reviewed": { "type": "string" }, - "sequence": { - "type": "integer" + "logo_url": { + "type": "string" }, - "type": { - "example": "round", + "market": { + "enum": [ + "us", + "ca" + ], "type": "string" - } - }, - "type": "object" - }, - "sofascore.TeamOfTheWeekPeriodsResponse": { - "properties": { - "count": { - "type": "integer" }, - "fetched_at": { + "name": { "type": "string" }, - "periods": { + "offers": { "items": { - "$ref": "#/definitions/sofascore.TeamOfTheWeekPeriod" + "$ref": "#/definitions/retailmenot.Offer" }, "type": "array" }, - "season_id": { - "type": "integer" - }, - "source_url": { + "phone": { "type": "string" }, - "tournament_id": { - "type": "integer" - } - }, - "type": "object" - }, - "sofascore.TeamOfTheWeekPlayer": { - "properties": { - "event": { - "$ref": "#/definitions/sofascore.EventSummary" - }, - "jersey_number": { - "type": "string" + "rating": { + "$ref": "#/definitions/retailmenot.Rating" }, - "order": { - "example": 1, - "type": "integer" + "similar_stores": { + "items": { + "$ref": "#/definitions/retailmenot.StoreRef" + }, + "type": "array" }, - "player": { - "$ref": "#/definitions/sofascore.PlayerRef" + "stats": { + "items": { + "$ref": "#/definitions/retailmenot.Stat" + }, + "type": "array" }, - "rating": { - "example": 8.6, - "type": "number" + "url": { + "type": "string" }, - "team": { - "$ref": "#/definitions/sofascore.TeamRef" + "website": { + "type": "string" } }, "type": "object" }, - "sofascore.TeamOfTheWeekResponse": { + "retailmenot.StoresResponse": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { + "letter": { "type": "string" }, - "formation": { - "example": "3-2-4-1", + "market": { + "enum": [ + "us", + "ca" + ], "type": "string" }, - "period": { - "$ref": "#/definitions/sofascore.TeamOfTheWeekPeriod" - }, - "players": { + "stores": { "items": { - "$ref": "#/definitions/sofascore.TeamOfTheWeekPlayer" + "$ref": "#/definitions/retailmenot.StoreRef" }, "type": "array" - }, - "season_id": { - "type": "integer" - }, - "source_url": { - "type": "string" - }, - "tournament_id": { - "type": "integer" } }, "type": "object" }, - "sofascore.TeamPerformanceEvent": { + "retailmenot.autocompleteResponseDoc": { "properties": { - "event": { - "$ref": "#/definitions/sofascore.EventSummary" - }, - "points": { - "description": "Points is SofaScore's per-match performance value for the team (higher\nis better, negative for a poor result). Omitted when SofaScore gave none.", - "example": 1.333, - "type": "number" + "data": { + "$ref": "#/definitions/retailmenot.AutocompleteResponse" } }, "type": "object" }, - "sofascore.TeamPerformanceResponse": { + "retailmenot.blogCategoriesResponseDoc": { "properties": { - "count": { - "type": "integer" - }, - "events": { - "items": { - "$ref": "#/definitions/sofascore.TeamPerformanceEvent" - }, - "type": "array" - }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "team_id": { - "example": 17, - "type": "integer" + "data": { + "$ref": "#/definitions/retailmenot.BlogCategoriesResponse" } }, "type": "object" }, - "sofascore.TeamPlayerStatistics": { + "retailmenot.blogPostResponseDoc": { "properties": { - "played_enough": { - "type": "boolean" - }, - "player": { - "$ref": "#/definitions/sofascore.PlayerBrief" - }, - "statistics": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "type": "object" + "data": { + "$ref": "#/definitions/retailmenot.BlogPostResponse" } }, "type": "object" }, - "sofascore.TeamPlayerStatisticsResponse": { + "retailmenot.blogPostsResponseDoc": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "players": { + "data": { + "$ref": "#/definitions/retailmenot.BlogPostsResponse" + } + }, + "type": "object" + }, + "retailmenot.blogTagsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/retailmenot.BlogTagsResponse" + } + }, + "type": "object" + }, + "retailmenot.cashBackResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/retailmenot.CashBackResponse" + } + }, + "type": "object" + }, + "retailmenot.categoriesResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/retailmenot.CategoriesResponse" + } + }, + "type": "object" + }, + "retailmenot.categoryResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/retailmenot.CategoryResponse" + } + }, + "type": "object" + }, + "retailmenot.dealEventResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/retailmenot.DealEventResponse" + } + }, + "type": "object" + }, + "retailmenot.dealEventsResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/retailmenot.DealEventsResponse" + } + }, + "type": "object" + }, + "retailmenot.homeResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/retailmenot.HomeResponse" + } + }, + "type": "object" + }, + "retailmenot.storeResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/retailmenot.StoreResponse" + } + }, + "type": "object" + }, + "retailmenot.storesResponseDoc": { + "properties": { + "data": { + "$ref": "#/definitions/retailmenot.StoresResponse" + } + }, + "type": "object" + }, + "retrievalplatform.CapabilitiesResponse": { + "properties": { + "available_operations": { "items": { - "$ref": "#/definitions/sofascore.TeamPlayerStatistics" + "type": "string" }, "type": "array" }, - "season": { - "example": 96668, - "type": "integer" + "billing_bypassed": { + "type": "boolean" }, - "source_url": { + "contract_version": { "type": "string" }, - "team_id": { - "example": 17, + "crawl_available": { + "type": "boolean" + }, + "crawl_max_pages": { "type": "integer" }, - "tournament_id": { - "example": 17, + "map_max_urls": { "type": "integer" }, - "type": { - "example": "overall", - "type": "string" - } - }, - "type": "object" - }, - "sofascore.TeamPlayerStatisticsSeasonsResponse": { - "properties": { - "count": { + "max_active_jobs": { "type": "integer" }, - "fetched_at": { - "type": "string" + "max_job_credits": { + "type": "integer" }, - "source_url": { - "type": "string" + "model_rates": { + "additionalProperties": { + "$ref": "#/definitions/retrievalpricing.ModelRates" + }, + "type": "object" }, - "team_id": { - "example": 17, + "pricing": { + "$ref": "#/definitions/retrievalplatform.UnitPrices" + }, + "query_policies": { + "items": { + "type": "string" + }, + "type": "array" + }, + "render_modes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "research_available": { + "type": "boolean" + }, + "search_max_results": { "type": "integer" }, - "tournaments": { + "sitemap_modes": { "items": { - "$ref": "#/definitions/sofascore.StatisticsTournament" + "type": "string" }, "type": "array" } }, "type": "object" }, - "sofascore.TeamPlayersResponse": { + "retrievalplatform.MapRequest": { "properties": { - "count": { - "description": "Number of players returned.", + "cursor": { + "type": "string" + }, + "max_urls": { "type": "integer" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "type": "string" + "page_size": { + "type": "integer" }, - "players": { - "description": "The team's squad.", - "items": { - "$ref": "#/definitions/sofascore.SquadPlayer" - }, - "type": "array" + "scope": { + "$ref": "#/definitions/retrievaltypes.URLScope" }, - "source_url": { - "description": "SofaScore URL the data was read from.", + "sitemap": { "type": "string" }, - "team_id": { - "description": "SofaScore team id the squad belongs to.", - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "sofascore.TeamRanking": { + "retrievalplatform.MapResponse": { "properties": { - "category": { - "example": "ATP", - "type": "string" - }, - "gender": { - "example": "M", + "coverage": { "type": "string" }, - "last_updated": { + "expires_at": { "type": "string" }, - "last_updated_timestamp": { - "type": "integer" - }, - "name": { - "example": "ATP Rankings", - "type": "string" + "has_more": { + "type": "boolean" }, - "rows": { + "items": { "items": { - "$ref": "#/definitions/sofascore.TeamRankingRow" + "$ref": "#/definitions/webretrieval.DiscoveredURL" }, "type": "array" }, - "slug": { - "example": "atp-rankings", + "next_cursor": { "type": "string" }, - "sport": { - "example": "tennis", - "type": "string" + "partial": { + "type": "boolean" }, - "type_id": { - "example": 5, - "type": "integer" + "truncated": { + "type": "boolean" + }, + "usage": { + "$ref": "#/definitions/retrievaltypes.Usage" + }, + "warnings": { + "items": { + "$ref": "#/definitions/retrievaltypes.Warning" + }, + "type": "array" } }, "type": "object" }, - "sofascore.TeamRankingRow": { + "retrievalplatform.UnitPrices": { "properties": { - "best_position": { + "browser_document_credits": { "type": "integer" }, - "max_points": { - "type": "number" + "cached_read_credits": { + "type": "integer" }, - "next_win_points": { - "type": "number" + "citation_seed_credits": { + "type": "integer" }, - "points": { - "example": 1168, - "type": "number" + "control_request_credits": { + "type": "integer" }, - "position": { - "example": 46, + "currency": { + "type": "string" + }, + "http_document_credits": { "type": "integer" }, - "previous_points": { - "type": "number" + "job_submission_credits": { + "type": "integer" }, - "previous_position": { + "map_base_credits": { "type": "integer" }, - "team": { - "$ref": "#/definitions/sofascore.TeamRef" + "map_resource_credits": { + "type": "integer" }, - "tournaments_played": { + "paper_full_text_credits": { "type": "integer" }, - "updated_at": { - "type": "string" + "paper_metadata_credits": { + "type": "integer" }, - "updated_timestamp": { + "paper_search_query_credits": { "type": "integer" }, - "year": { - "example": 2026, + "search_request_credits": { "type": "integer" } }, "type": "object" }, - "sofascore.TeamRankingsResponse": { + "retrievalplatform.WebSearchRequest": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { + "country": { + "description": "Country is the result country; defaults to us.", + "enum": [ + "all", + "ar", + "at", + "au", + "be", + "br", + "ca", + "ch", + "cl", + "cn", + "de", + "dk", + "es", + "fi", + "fr", + "gb", + "gr", + "hk", + "id", + "in", + "it", + "jp", + "kr", + "mx", + "my", + "nl", + "no", + "nz", + "ph", + "pl", + "pt", + "ru", + "sa", + "se", + "sg", + "tr", + "tw", + "us", + "za" + ], + "example": "us", "type": "string" }, - "rankings": { + "exclude_domains": { "items": { - "$ref": "#/definitions/sofascore.TeamRanking" + "type": "string" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "team_id": { - "example": 112783, - "type": "integer" - } - }, - "type": "object" - }, - "sofascore.TeamRef": { - "properties": { - "country": { - "description": "Country the team belongs to.", - "example": "Spain", + "include_domains": { + "items": { + "type": "string" + }, + "type": "array" + }, + "language": { + "description": "Language is the result language; defaults to en-us.", + "enum": [ + "de-de", + "en-ca", + "en-gb", + "en-in", + "en-us", + "fi-fi", + "fr-ca", + "fr-fr", + "ja-jp", + "pt-br", + "sq-al", + "sw-ke", + "zh-tw" + ], + "example": "en-us", "type": "string" }, - "id": { - "description": "SofaScore team id. Use it with the team endpoints.", - "example": 2817, + "limit": { + "description": "Limit is the number of results to return, 1 to 50 (default 10). Up to 3 result pages are read to reach it, at 3 credits per page read.", "type": "integer" }, - "name": { - "description": "Full team name.", - "example": "FC Barcelona", - "type": "string" - }, - "national": { - "description": "True for a national team.", - "type": "boolean" + "max_credits": { + "type": "integer" }, - "short_name": { - "description": "Shortened team name.", - "example": "Barcelona", + "q": { "type": "string" }, - "slug": { - "description": "URL slug of the team on SofaScore.", - "example": "barcelona", - "type": "string" + "scrape": { + "$ref": "#/definitions/retrievaltypes.FetchOptions" + }, + "scrape_limit": { + "type": "integer" } }, + "required": [ + "q" + ], "type": "object" }, - "sofascore.TeamResponse": { + "retrievalplatform.WebSearchResponse": { "properties": { - "fetched_at": { - "type": "string" + "coverage": { + "items": { + "$ref": "#/definitions/retrievaltypes.SourceCoverage" + }, + "type": "array" }, - "source_url": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/webretrieval.WebSearchHit" + }, + "type": "array" }, - "team": { - "$ref": "#/definitions/sofascore.TeamDetail" + "partial": { + "type": "boolean" + }, + "usage": { + "$ref": "#/definitions/retrievaltypes.Usage" + }, + "warnings": { + "items": { + "$ref": "#/definitions/retrievaltypes.Warning" + }, + "type": "array" } }, "type": "object" }, - "sofascore.TeamSeasonStatisticsResponse": { + "retrievalpricing.ModelRates": { "properties": { - "fetched_at": { - "type": "string" - }, - "season": { - "example": 96668, + "cached_input_credits_per_million": { "type": "integer" }, - "source_url": { - "type": "string" - }, - "statistics": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "type": "object" - }, - "team_id": { - "example": 17, + "input_credits_per_million": { "type": "integer" }, - "tournament_id": { - "example": 17, + "output_credits_per_million": { "type": "integer" - }, - "type": { - "example": "overall", - "type": "string" } }, "type": "object" }, - "sofascore.TeamStatisticsSeasonsResponse": { + "retrievaltypes.Claim": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "source_url": { + "claim_id": { "type": "string" }, - "team_id": { - "example": 17, - "type": "integer" - }, - "tournaments": { + "evidence_ids": { "items": { - "$ref": "#/definitions/sofascore.StatisticsTournament" + "type": "string" }, "type": "array" + }, + "support_status": { + "$ref": "#/definitions/retrievaltypes.ClaimSupportStatus" + }, + "text": { + "type": "string" } }, "type": "object" }, - "sofascore.TeamStreak": { + "retrievaltypes.ClaimSupportStatus": { + "enum": [ + "supported", + "conflicting", + "unverified" + ], + "type": "string", + "x-enum-varnames": [ + "ClaimSupported", + "ClaimConflicting", + "ClaimUnverified" + ] + }, + "retrievaltypes.CompletionReason": { + "enum": [ + "frontier_exhausted", + "completed", + "page_limit", + "round_limit", + "deadline", + "budget", + "cancelled", + "upstream_failure", + "internal_failure" + ], + "type": "string", + "x-enum-varnames": [ + "CompletionFrontierExhausted", + "CompletionCompleted", + "CompletionPageLimit", + "CompletionRoundLimit", + "CompletionDeadline", + "CompletionBudget", + "CompletionCancelled", + "CompletionUpstreamFailure", + "CompletionInternalFailure" + ] + }, + "retrievaltypes.CoverageStatus": { + "enum": [ + "ok", + "failed", + "not_indexed", + "unsupported" + ], + "type": "string", + "x-enum-varnames": [ + "CoverageOK", + "CoverageFailed", + "CoverageNotIndexed", + "CoverageUnsupported" + ] + }, + "retrievaltypes.Document": { "properties": { - "continued": { - "type": "boolean" + "content_sha256": { + "type": "string" }, - "name": { - "example": "No goals conceded", + "content_type": { "type": "string" }, - "team": { - "example": "home", + "document_id": { "type": "string" }, - "value": { - "example": "4", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.TeamTopPlayersResponse": { - "properties": { - "categories": { + }, + "final_url": { + "type": "string" + }, + "links": { "items": { - "$ref": "#/definitions/sofascore.TopPlayerCategory" + "type": "string" }, "type": "array" }, - "category_count": { - "type": "integer" - }, - "fetched_at": { + "markdown": { "type": "string" }, - "season_id": { - "example": 96668, - "type": "integer" + "metadata": { + "$ref": "#/definitions/retrievaltypes.DocumentMetadata" }, - "source_url": { - "type": "string" + "passages": { + "items": { + "$ref": "#/definitions/retrievaltypes.Passage" + }, + "type": "array" }, - "sport": { - "example": "football", + "revision": { "type": "string" }, - "team_id": { - "example": 17, - "type": "integer" - }, - "tournament_id": { - "example": 17, - "type": "integer" - }, - "type": { - "example": "overall", + "source_url": { "type": "string" + }, + "truncated": { + "type": "boolean" } }, "type": "object" }, - "sofascore.TeamTournamentsResponse": { + "retrievaltypes.DocumentMetadata": { "properties": { - "all": { - "type": "boolean" + "author": { + "type": "string" }, - "count": { - "type": "integer" + "description": { + "type": "string" }, - "fetched_at": { + "language": { "type": "string" }, - "source_url": { + "modified_at": { "type": "string" }, - "team_id": { - "example": 17, - "type": "integer" + "published_at": { + "type": "string" }, - "tournaments": { - "items": { - "$ref": "#/definitions/sofascore.UniqueTournamentBrief" - }, - "type": "array" + "title": { + "type": "string" } }, "type": "object" }, - "sofascore.TeamTransfersResponse": { + "retrievaltypes.Evidence": { "properties": { - "fetched_at": { + "content_sha256": { "type": "string" }, - "source_url": { + "evidence_id": { "type": "string" }, - "team_id": { - "example": 17, - "type": "integer" + "passage": { + "$ref": "#/definitions/retrievaltypes.Passage" }, - "transfers_in": { - "items": { - "$ref": "#/definitions/sofascore.Transfer" - }, - "type": "array" + "retrieved_at": { + "type": "string" }, - "transfers_out": { - "items": { - "$ref": "#/definitions/sofascore.Transfer" - }, - "type": "array" - } - }, - "type": "object" - }, - "sofascore.TennisGrandSlamResultsResponse": { - "properties": { - "fetched_at": { + "revision": { "type": "string" }, - "source_url": { + "source_id": { "type": "string" }, - "team_id": { - "example": 14882, - "type": "integer" + "source_kind": { + "$ref": "#/definitions/retrievaltypes.SourceKind" }, - "tournaments": { - "items": { - "$ref": "#/definitions/sofascore.GrandSlamTournament" - }, - "type": "array" + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "sofascore.TennisPowerGame": { + "retrievaltypes.Failure": { "properties": { - "break_occurred": { - "type": "boolean" + "message": { + "type": "string" }, - "game": { - "example": 3, - "type": "integer" + "reason": { + "$ref": "#/definitions/retrievaltypes.FailureReason" }, - "set": { - "example": 1, + "retry_after_seconds": { "type": "integer" }, - "value": { - "description": "Value is SofaScore's momentum number for the game. Positive favours the\nhome player or team, negative the away side.", - "example": -54.2, - "type": "number" + "retryable": { + "type": "boolean" } }, "type": "object" }, - "sofascore.TopPlayerCategory": { + "retrievaltypes.FailureReason": { + "enum": [ + "invalid_url", + "unsupported_content_type", + "blocked", + "not_found", + "rate_limited", + "timeout", + "upstream_error", + "internal_error", + "out_of_scope", + "robots_disallowed", + "duplicate", + "limit_reached", + "unsupported_filter", + "unknown_source", + "idempotency_conflict", + "invalid_cursor", + "result_expired", + "full_text_unavailable", + "budget_exhausted" + ], + "type": "string", + "x-enum-varnames": [ + "FailureInvalidURL", + "FailureUnsupportedContentType", + "FailureBlocked", + "FailureNotFound", + "FailureRateLimited", + "FailureTimeout", + "FailureUpstreamError", + "FailureInternalError", + "FailureOutOfScope", + "FailureRobotsDisallowed", + "FailureDuplicate", + "FailureLimitReached", + "FailureUnsupportedFilter", + "FailureUnknownSource", + "FailureIdempotencyConflict", + "FailureInvalidCursor", + "FailureResultExpired", + "FailureFullTextUnavailable", + "FailureBudgetExhausted" + ] + }, + "retrievaltypes.FetchOptions": { "properties": { - "count": { + "max_age": { "type": "integer" }, - "key": { - "example": "goals", - "type": "string" + "only_main_content": { + "type": "boolean" }, - "players": { - "items": { - "$ref": "#/definitions/sofascore.TopPlayerEntry" - }, - "type": "array" + "render": { + "$ref": "#/definitions/retrievaltypes.RenderMode" + }, + "wait_for": { + "type": "integer" } }, "type": "object" }, - "sofascore.TopPlayerEntry": { + "retrievaltypes.JobEvent": { "properties": { - "appearances": { - "example": 5, - "type": "integer" - }, - "details": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "type": "object" - }, - "played_enough": { - "type": "boolean" - }, - "player": { - "$ref": "#/definitions/sofascore.PlayerRef" + "message": { + "type": "string" }, - "rank": { - "example": 1, + "sequence": { "type": "integer" }, - "team": { - "$ref": "#/definitions/sofascore.TeamRef" + "source_id": { + "type": "string" }, - "value": { - "example": 5, - "type": "number" + "timestamp": { + "type": "string" + }, + "type": { + "$ref": "#/definitions/retrievaltypes.JobEventType" } }, "type": "object" }, - "sofascore.TopTeamCategory": { + "retrievaltypes.JobEventType": { + "enum": [ + "submitted", + "started", + "search_completed", + "source_fetched", + "round_completed", + "cancellation_requested", + "completed", + "failed", + "cancelled" + ], + "type": "string", + "x-enum-varnames": [ + "EventSubmitted", + "EventStarted", + "EventSearchCompleted", + "EventSourceFetched", + "EventRoundCompleted", + "EventCancellationRequested", + "EventCompleted", + "EventFailed", + "EventCancelled" + ] + }, + "retrievaltypes.JobEventsResponse": { "properties": { - "count": { - "type": "integer" - }, - "key": { - "example": "avgRating", - "type": "string" + "has_more": { + "type": "boolean" }, - "teams": { + "items": { "items": { - "$ref": "#/definitions/sofascore.TopTeamEntry" + "$ref": "#/definitions/retrievaltypes.JobEvent" }, "type": "array" + }, + "job_id": { + "type": "string" + }, + "next_cursor": { + "type": "string" } }, "type": "object" }, - "sofascore.TopTeamEntry": { + "retrievaltypes.JobKind": { + "enum": [ + "crawl", + "research", + "ingestion" + ], + "type": "string", + "x-enum-varnames": [ + "JobKindCrawl", + "JobKindResearch", + "JobKindIngestion" + ] + }, + "retrievaltypes.JobProgress": { "properties": { - "details": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "type": "object" - }, - "matches": { - "example": 5, + "admitted": { "type": "integer" }, - "rank": { - "example": 1, + "discovered": { "type": "integer" }, - "team": { - "$ref": "#/definitions/sofascore.TeamRef" - }, - "value": { - "example": 7.896, - "type": "number" - } - }, - "type": "object" - }, - "sofascore.TournamentCupTreeResponse": { - "properties": { - "count": { + "discovery_excluded": { "type": "integer" }, - "fetched_at": { - "type": "string" + "failed": { + "type": "integer" }, - "season_id": { + "in_flight": { "type": "integer" }, - "source_url": { - "type": "string" + "queued": { + "type": "integer" }, - "tournament_id": { + "skipped": { "type": "integer" }, - "trees": { - "items": { - "$ref": "#/definitions/sofascore.CupTree" - }, - "type": "array" + "succeeded": { + "type": "integer" } }, "type": "object" }, - "sofascore.TournamentDetail": { + "retrievaltypes.JobState": { + "enum": [ + "queued", + "running", + "cancelling", + "succeeded", + "failed", + "cancelled" + ], + "type": "string", + "x-enum-varnames": [ + "JobQueued", + "JobRunning", + "JobCancelling", + "JobSucceeded", + "JobFailed", + "JobCancelled" + ] + }, + "retrievaltypes.JobStatus": { "properties": { - "category": { - "example": "England", + "cancel_requested": { + "type": "boolean" + }, + "completion_reason": { + "$ref": "#/definitions/retrievaltypes.CompletionReason" + }, + "created_at": { "type": "string" }, - "current_season_end": { - "example": "2027-05-23T00:00:00Z", + "deadline_at": { "type": "string" }, - "current_season_start": { - "example": "2026-08-21T00:00:00Z", + "error": { + "$ref": "#/definitions/retrievaltypes.Failure" + }, + "expires_at": { "type": "string" }, - "gender": { - "example": "M", + "job_id": { "type": "string" }, - "has_groups": { - "type": "boolean" + "kind": { + "$ref": "#/definitions/retrievaltypes.JobKind" }, - "has_playoff_series": { + "partial": { "type": "boolean" }, - "has_rounds": { - "type": "boolean" + "progress": { + "$ref": "#/definitions/retrievaltypes.JobProgress" }, - "id": { - "example": 17, - "type": "integer" + "research": { + "$ref": "#/definitions/retrievaltypes.ResearchProgress" }, - "linked_tournaments": { - "items": { - "$ref": "#/definitions/sofascore.CompetitionRef" - }, - "type": "array" + "state": { + "$ref": "#/definitions/retrievaltypes.JobState" }, - "lower_divisions": { - "items": { - "$ref": "#/definitions/sofascore.CompetitionRef" - }, - "type": "array" + "updated_at": { + "type": "string" }, - "most_titles": { - "type": "integer" + "usage": { + "$ref": "#/definitions/retrievaltypes.Usage" }, - "most_titles_teams": { + "warnings": { "items": { - "$ref": "#/definitions/sofascore.TeamRef" + "$ref": "#/definitions/retrievaltypes.Warning" }, "type": "array" - }, - "name": { - "example": "Premier League", + } + }, + "type": "object" + }, + "retrievaltypes.JobSubmission": { + "properties": { + "deadline_at": { "type": "string" }, - "slug": { - "example": "premier-league", + "job_id": { "type": "string" }, - "sport": { - "example": "football", + "replayed": { + "type": "boolean" + }, + "results_url": { "type": "string" }, - "tier": { - "type": "integer" + "state": { + "$ref": "#/definitions/retrievaltypes.JobState" }, - "title_holder": { - "$ref": "#/definitions/sofascore.TeamRef" + "status_url": { + "type": "string" + } + }, + "type": "object" + }, + "retrievaltypes.Passage": { + "properties": { + "locator": { + "$ref": "#/definitions/retrievaltypes.PassageLocator" }, - "title_holder_titles": { - "type": "integer" + "passage_id": { + "type": "string" }, - "upper_divisions": { - "items": { - "$ref": "#/definitions/sofascore.CompetitionRef" - }, - "type": "array" + "score": { + "type": "number" + }, + "text": { + "type": "string" } }, "type": "object" }, - "sofascore.TournamentInfoResponse": { + "retrievaltypes.PassageLocator": { "properties": { - "fetched_at": { + "anchor": { "type": "string" }, - "season": { - "$ref": "#/definitions/sofascore.SeasonInfo" + "end_byte": { + "type": "integer" }, - "season_id": { - "example": 96668, + "end_line": { "type": "integer" }, - "season_source_url": { + "heading": { "type": "string" }, - "source_url": { - "type": "string" + "page": { + "type": "integer" }, - "tournament": { - "$ref": "#/definitions/sofascore.TournamentDetail" + "start_byte": { + "type": "integer" }, - "tournament_id": { - "example": 17, + "start_line": { "type": "integer" } }, "type": "object" }, - "sofascore.TournamentPlayerOfTheSeasonResponse": { + "retrievaltypes.QueryPolicy": { + "enum": [ + "preserve", + "drop_tracking" + ], + "type": "string", + "x-enum-varnames": [ + "QueryPreserve", + "QueryDropTracking" + ] + }, + "retrievaltypes.RenderMode": { + "enum": [ + "auto", + "http", + "browser" + ], + "type": "string", + "x-enum-varnames": [ + "RenderAuto", + "RenderHTTP", + "RenderBrowser" + ] + }, + "retrievaltypes.ResearchProgress": { "properties": { - "appearances": { - "example": 35, + "max_rounds": { "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "jersey_number": { - "description": "JerseyNumber is the player's shirt number as published.", - "type": "string" - }, - "player": { - "$ref": "#/definitions/sofascore.PlayerRef" - }, - "rating": { - "description": "Rating is the player's average SofaScore rating over the season.", - "example": 7.61, - "type": "number" - }, - "season_id": { + "questions_answered": { "type": "integer" }, - "source_url": { - "type": "string" + "questions_total": { + "type": "integer" }, - "statistics_type": { - "description": "StatisticsType is the scope of the rating: overall, regular_season, or\nthe upstream value verbatim for any other scope.", - "example": "overall", - "type": "string" + "round": { + "type": "integer" }, - "team": { - "$ref": "#/definitions/sofascore.TeamRef" + "searches_completed": { + "type": "integer" }, - "tournament_id": { + "sources_read": { "type": "integer" } }, "type": "object" }, - "sofascore.TournamentPlayerStatisticsResponse": { + "retrievaltypes.SourceCoverage": { "properties": { - "accumulation": { - "example": "total", + "corpus_revision": { "type": "string" }, - "count": { - "type": "integer" + "failure": { + "$ref": "#/definitions/retrievaltypes.Failure" }, - "direction": { - "example": "desc", + "indexed_at": { "type": "string" }, - "fetched_at": { + "retrieved_at": { "type": "string" }, - "filters": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.PlayerStatisticsFilters" - } - ], - "description": "Filters echoes the filters applied and is omitted when none were given." - }, - "group": { - "example": "summary", + "source_id": { "type": "string" }, - "has_next_page": { + "status": { + "$ref": "#/definitions/retrievaltypes.CoverageStatus" + } + }, + "type": "object" + }, + "retrievaltypes.SourceKind": { + "enum": [ + "web", + "paper", + "developer" + ], + "type": "string", + "x-enum-varnames": [ + "SourceWeb", + "SourcePaper", + "SourceDeveloper" + ] + }, + "retrievaltypes.URLScope": { + "properties": { + "exclude_paths": { + "items": { + "type": "string" + }, + "type": "array" + }, + "include_paths": { + "items": { + "type": "string" + }, + "type": "array" + }, + "include_subdomains": { "type": "boolean" }, - "limit": { - "example": 20, + "query_policy": { + "$ref": "#/definitions/retrievaltypes.QueryPolicy" + } + }, + "type": "object" + }, + "retrievaltypes.Usage": { + "properties": { + "browser_renders": { "type": "integer" }, - "offset": { + "credits_charged": { "type": "integer" }, - "order": { - "example": "rating", - "type": "string" + "credits_released": { + "type": "integer" }, - "page": { - "example": 1, + "credits_reserved": { "type": "integer" }, - "players": { - "items": { - "$ref": "#/definitions/sofascore.PlayerStatisticsRow" - }, - "type": "array" + "fetch_attempts": { + "type": "integer" }, - "season_id": { + "fetched_urls": { "type": "integer" }, - "source_url": { - "type": "string" + "input_tokens": { + "type": "integer" }, - "total_pages": { - "example": 22, + "output_tokens": { "type": "integer" }, - "tournament_id": { + "search_requests": { "type": "integer" + }, + "settlement_pending": { + "type": "boolean" } }, "type": "object" }, - "sofascore.TournamentRef": { + "retrievaltypes.Warning": { "properties": { - "category": { - "description": "Category the tournament sits under, usually a country or region.", - "example": "England", - "type": "string" + "code": { + "$ref": "#/definitions/retrievaltypes.WarningCode" }, - "id": { - "description": "SofaScore id of the tournament the match is filed under. The seasons, standings and round endpoints take `unique_tournament_id` instead.", - "type": "integer" + "message": { + "type": "string" }, - "name": { - "description": "Tournament name.", - "example": "Premier League", + "source_id": { + "type": "string" + } + }, + "type": "object" + }, + "retrievaltypes.WarningCode": { + "enum": [ + "source_failed", + "source_not_indexed", + "discovery_truncated", + "ranking_window_limit", + "imprecise_date_excluded", + "content_unavailable", + "cached_source_stale" + ], + "type": "string", + "x-enum-varnames": [ + "WarningSourceFailed", + "WarningSourceNotIndexed", + "WarningDiscoveryTruncated", + "WarningRankingWindowLimit", + "WarningImpreciseDateExcluded", + "WarningContentUnavailable", + "WarningCachedSourceStale" + ] + }, + "reuters.ArticleItem": { + "properties": { + "image_url": { "type": "string" }, - "slug": { - "description": "URL slug of the tournament on SofaScore.", - "example": "premier-league", + "title": { "type": "string" }, - "unique_tournament_id": { - "description": "Id of the parent competition. This is the tournament id the tournament-seasons, standings and round-events endpoints take.", - "example": 17, - "type": "integer" + "updated_at": { + "type": "string" }, - "unique_tournament_name": { - "description": "Name of the parent competition.", - "example": "Premier League", + "url": { "type": "string" } }, "type": "object" }, - "sofascore.TournamentRoundsResponse": { + "reuters.ArticleResponse": { "properties": { - "count": { - "type": "integer" + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "current_round": { - "$ref": "#/definitions/sofascore.RoundRef" + "description": { + "type": "string" }, - "fetched_at": { + "image_caption": { "type": "string" }, - "rounds": { + "image_url": { + "type": "string" + }, + "paragraphs": { "items": { - "$ref": "#/definitions/sofascore.RoundRef" + "type": "string" }, "type": "array" }, - "season_id": { - "type": "integer" + "published_at": { + "type": "string" }, - "source_url": { + "title": { "type": "string" }, - "tournament_id": { - "type": "integer" + "updated_at": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "sofascore.TournamentSeasonsResponse": { + "reuters.ArticlesResponse": { "properties": { - "count": { - "description": "Number of seasons returned.", - "type": "integer" - }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "type": "string" - }, - "seasons": { - "description": "Seasons SofaScore has for the competition.", + "items": { "items": { - "$ref": "#/definitions/sofascore.Season" + "$ref": "#/definitions/reuters.ArticleItem" }, "type": "array" }, - "source_url": { - "description": "SofaScore URL the data was read from.", - "type": "string" - }, - "tournament_id": { - "description": "Id of the competition (the unique tournament id).", + "page": { "type": "integer" } }, "type": "object" }, - "sofascore.TournamentStatisticsInfoResponse": { + "reuters.AuthorArticle": { "properties": { - "detailed_groups": { - "additionalProperties": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": "DetailedGroups lists the further per-area statistic names the season\ntracks (upstream's \"detailed\" group); the table does not take them as\n`group` or `order` values.", - "type": "object" - }, - "fetched_at": { + "image_url": { "type": "string" }, - "groups": { - "additionalProperties": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": "Groups lists the statistic columns of each `group` value.", - "type": "object" - }, - "nationalities": { - "description": "Nationalities are the codes the `nationality` filter accepts. SofaScore\nuses its own codes for the home nations (EN England, SX Scotland, WA\nWales, NX Northern Ireland).", - "items": { - "$ref": "#/definitions/sofascore.NamedCode" - }, - "type": "array" - }, - "positions": { - "description": "Positions are the codes the `position` filter accepts. The set is fixed\nby this API (verified: G, D, M and F each filter the table; any other\ncode returns no rows).", - "items": { - "$ref": "#/definitions/sofascore.NamedCode" - }, - "type": "array" - }, - "season_id": { - "type": "integer" + "published_at": { + "type": "string" }, - "source_url": { + "summary": { "type": "string" }, - "teams": { - "description": "Teams are the teams whose id the `team` filter accepts.", - "items": { - "$ref": "#/definitions/sofascore.TeamRef" - }, - "type": "array" + "title": { + "type": "string" }, - "tournament_id": { - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "sofascore.TournamentTeamOfTheSeasonResponse": { + "reuters.AuthorResponse": { "properties": { - "count": { - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/reuters.AuthorArticle" + }, + "type": "array" }, - "created_at": { - "example": "2026-05-25T10:00:00Z", + "company": { "type": "string" }, - "fetched_at": { + "email": { "type": "string" }, - "formation": { - "example": "3-2-4-1", + "image_url": { "type": "string" }, - "players": { + "name": { + "type": "string" + }, + "social_accounts": { "items": { - "$ref": "#/definitions/sofascore.TeamOfTheWeekPlayer" + "$ref": "#/definitions/reuters.AuthorSocialAccount" }, "type": "array" }, - "season_id": { + "total_articles": { "type": "integer" }, - "source_url": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "reuters.AuthorSocialAccount": { + "properties": { + "platform": { "type": "string" }, - "tournament_id": { - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "sofascore.TournamentTeamsResponse": { + "reuters.NewsItem": { "properties": { - "count": { - "type": "integer" + "image_caption": { + "type": "string" }, - "fetched_at": { + "image_url": { "type": "string" }, - "season_id": { - "type": "integer" + "published_at": { + "type": "string" }, - "source_url": { + "title": { "type": "string" }, - "teams": { - "items": { - "$ref": "#/definitions/sofascore.SeasonTeam" - }, - "type": "array" + "updated_at": { + "type": "string" }, - "tournament_id": { - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "sofascore.TournamentTopPlayersResponse": { + "reuters.NewsResponse": { "properties": { - "categories": { + "items": { "items": { - "$ref": "#/definitions/sofascore.TopPlayerCategory" + "$ref": "#/definitions/reuters.NewsItem" }, "type": "array" }, - "category_count": { + "page": { "type": "integer" - }, - "fetched_at": { + } + }, + "type": "object" + }, + "reuters.Section": { + "properties": { + "name": { "type": "string" }, - "season_id": { - "type": "integer" + "slug": { + "type": "string" }, - "source_url": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "reuters.SectionItem": { + "properties": { + "image_caption": { "type": "string" }, - "sport": { - "example": "football", + "image_url": { "type": "string" }, - "tournament_id": { - "type": "integer" + "updated_at": { + "type": "string" }, - "type": { - "example": "overall", + "url": { "type": "string" } }, "type": "object" }, - "sofascore.TournamentTopTeamsResponse": { + "reuters.SectionResponse": { "properties": { - "categories": { + "items": { "items": { - "$ref": "#/definitions/sofascore.TopTeamCategory" + "$ref": "#/definitions/reuters.SectionItem" }, "type": "array" }, - "category_count": { + "page": { "type": "integer" }, - "fetched_at": { + "section": { "type": "string" - }, - "season_id": { + } + }, + "type": "object" + }, + "reuters.SectionsResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/reuters.Section" + }, + "type": "array" + } + }, + "type": "object" + }, + "reuters.articleResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/reuters.ArticleResponse" }, - "sport": { - "example": "football", + "msg": { + "example": "OK", "type": "string" - }, - "tournament_id": { + } + }, + "type": "object" + }, + "reuters.articlesResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "type": { - "example": "overall", + "data": { + "$ref": "#/definitions/reuters.ArticlesResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sofascore.TournamentVenuesResponse": { + "reuters.authorResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "season_id": { - "type": "integer" + "data": { + "$ref": "#/definitions/reuters.AuthorResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" - }, - "tournament_id": { - "type": "integer" - }, - "venues": { - "items": { - "$ref": "#/definitions/sofascore.VenueRecord" - }, - "type": "array" } }, "type": "object" }, - "sofascore.TournamentWinner": { + "reuters.newsResponseDoc": { "properties": { - "season_id": { - "description": "SeasonID is the season id to pass to tournament-seasons-based endpoints.", - "example": 76986, + "code": { + "example": 200, "type": "integer" }, - "winner": { - "$ref": "#/definitions/sofascore.TeamRef" + "data": { + "$ref": "#/definitions/reuters.NewsResponse" }, - "year": { - "description": "Year is the upstream year label of the season (the year it ended).", - "example": 2026, - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "sofascore.TournamentWinnersResponse": { + "reuters.sectionResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "has_next_page": { - "type": "boolean" - }, - "page": { - "type": "integer" + "data": { + "$ref": "#/definitions/reuters.SectionResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" - }, - "tournament_id": { - "type": "integer" - }, - "winners": { - "items": { - "$ref": "#/definitions/sofascore.TournamentWinner" - }, - "type": "array" } }, "type": "object" }, - "sofascore.TournamentsWithFeatureResponse": { + "reuters.sectionsResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "feature": { - "example": "cuptree", - "type": "string" - }, - "fetched_at": { - "type": "string" + "data": { + "$ref": "#/definitions/reuters.SectionsResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "reverb.CategoriesResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/reverb.CategoryItem" + }, + "type": "array" }, - "sport": { - "example": "football", + "fetched_at": { "type": "string" }, - "tournaments": { + "product_types": { "items": { - "$ref": "#/definitions/sofascore.FeatureTournament" + "$ref": "#/definitions/reverb.ProductType" }, "type": "array" } }, "type": "object" }, - "sofascore.Transfer": { + "reverb.CategoryItem": { "properties": { - "fee": { - "example": 60000000, - "type": "integer" - }, - "fee_currency": { - "example": "EUR", - "type": "string" - }, - "fee_description": { - "example": "60M €", - "type": "string" - }, - "from_team": { - "$ref": "#/definitions/sofascore.TeamRef" - }, - "from_team_name": { - "example": "Borussia Dortmund", + "full_name": { "type": "string" }, "id": { "type": "integer" }, - "player": { - "$ref": "#/definitions/sofascore.PlayerBrief" - }, - "to_team": { - "$ref": "#/definitions/sofascore.TeamRef" - }, - "to_team_name": { - "example": "Manchester City", + "name": { "type": "string" }, - "transfer_date": { - "example": "2022-07-01", + "product_type": { "type": "string" }, - "transfer_timestamp": { - "type": "integer" + "slug": { + "type": "string" }, - "type_code": { - "example": 3, - "type": "integer" + "uuid": { + "type": "string" } }, "type": "object" }, - "sofascore.TrendingEvent": { + "reverb.Listing": { "properties": { - "away_score": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.ScoreLine" - } - ], - "description": "Away side's score, when available." + "auction": { + "type": "boolean" }, - "away_team": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.TeamRef" - } - ], - "description": "Away side." + "category_uuids": { + "items": { + "type": "string" + }, + "type": "array" }, - "home_score": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.ScoreLine" - } - ], - "description": "Home side's score, when available." + "condition": { + "type": "string" }, - "home_team": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.TeamRef" - } - ], - "description": "Home side." + "condition_slug": { + "type": "string" }, - "id": { - "description": "SofaScore event id. Use it with the event endpoints.", - "example": 14025013, - "type": "integer" + "cover_photo_url": { + "type": "string" }, - "slug": { - "description": "URL slug of the match on SofaScore.", + "created_at": { "type": "string" }, - "sport": { - "example": "football", + "currency": { "type": "string" }, - "start_time": { - "description": "Start time in UTC (RFC 3339).", - "example": "2025-08-15T19:00:00Z", + "finish": { "type": "string" }, - "start_timestamp": { - "description": "Start time as a Unix timestamp in seconds.", + "has_inventory": { + "type": "boolean" + }, + "id": { "type": "integer" }, - "status": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.EventStatus" - } - ], - "description": "Current status of the match." + "inventory": { + "type": "integer" }, - "tournament": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.TournamentRef" - } - ], - "description": "Tournament and parent competition the match belongs to." + "make": { + "type": "string" }, - "winner_code": { - "description": "Result code: 1 when the home side won, 2 when the away side won, 3 for a draw. Omitted until the match is decided.", - "type": "integer" - } - }, - "type": "object" - }, - "sofascore.TrendingEventsResponse": { - "properties": { - "count": { + "model": { + "type": "string" + }, + "offers_enabled": { + "type": "boolean" + }, + "photo_count": { "type": "integer" }, - "country": { - "example": "GB", + "price": { + "type": "number" + }, + "published_at": { "type": "string" }, - "events": { - "items": { - "$ref": "#/definitions/sofascore.TrendingEvent" - }, - "type": "array" + "shop_name": { + "type": "string" }, - "fetched_at": { + "title": { "type": "string" }, - "source_url": { + "url": { + "type": "string" + }, + "year": { "type": "string" } }, "type": "object" }, - "sofascore.TrendingPlayer": { + "reverb.ListingPhoto": { "properties": { - "event": { - "$ref": "#/definitions/sofascore.EventSummary" - }, - "player": { - "$ref": "#/definitions/sofascore.PlayerBrief" - }, - "statistics": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "type": "object" + "full_url": { + "type": "string" }, - "team": { - "$ref": "#/definitions/sofascore.TeamRef" + "thumbnail_url": { + "type": "string" } }, "type": "object" }, - "sofascore.TrendingPlayersResponse": { + "reverb.ListingResponse": { "properties": { - "count": { - "type": "integer" + "accepted_payment_methods": { + "items": { + "type": "string" + }, + "type": "array" }, - "fetched_at": { - "type": "string" + "auction": { + "type": "boolean" }, - "players": { + "category_uuids": { "items": { - "$ref": "#/definitions/sofascore.TrendingPlayer" + "type": "string" }, "type": "array" }, - "source_url": { + "condition": { "type": "string" }, - "sport": { - "example": "football", + "condition_slug": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.TypedSearchResult": { - "properties": { - "capacity": { - "example": 60704, - "type": "integer" - }, - "category_id": { - "description": "Competition fields.", - "example": 1, - "type": "integer" }, - "category_name": { - "example": "England", + "created_at": { "type": "string" }, - "city": { - "description": "Venue fields.", - "example": "London", + "currency": { "type": "string" }, - "country": { - "example": "England", + "description": { "type": "string" }, - "deceased": { - "description": "Deceased applies to players and managers.", - "type": "boolean" - }, - "event": { - "allOf": [ - { - "$ref": "#/definitions/sofascore.EventSummary" - } - ], - "description": "Event is the match summary of an event result." + "fetched_at": { + "type": "string" }, - "gender": { - "example": "M", + "finish": { "type": "string" }, + "has_inventory": { + "type": "boolean" + }, "id": { - "example": 42, "type": "integer" }, - "jersey_number": { + "inventory": { + "type": "integer" + }, + "local_pickup_only": { + "type": "boolean" + }, + "location": { "type": "string" }, - "name": { - "example": "Arsenal", + "make": { "type": "string" }, - "name_code": { + "model": { "type": "string" }, - "national": { + "offers_enabled": { "type": "boolean" }, - "position": { - "description": "Player fields.", - "example": "F", + "payment_policy": { "type": "string" }, - "retired": { - "type": "boolean" + "photos": { + "items": { + "$ref": "#/definitions/reverb.ListingPhoto" + }, + "type": "array" }, - "score": { - "description": "Score is SofaScore's relevance score; results are ordered by it.", - "example": 272039.88, + "price": { "type": "number" }, - "short_name": { + "product_type": { "type": "string" }, - "slug": { - "example": "arsenal", + "published_at": { "type": "string" }, - "sport": { - "example": "football", + "return_policy": { "type": "string" }, - "team": { - "$ref": "#/definitions/sofascore.TeamRef" - }, - "type": { - "description": "Type is event, team, player, manager, referee, venue or unique_tournament.", - "example": "team", + "shipping_policy": { "type": "string" }, - "user_count": { + "shop_feedback_count": { "type": "integer" - } - }, - "type": "object" - }, - "sofascore.UniqueTournamentBrief": { - "properties": { - "category": { - "example": "England", + }, + "shop_name": { "type": "string" }, - "gender": { - "example": "M", + "shop_preferred_seller": { + "type": "boolean" + }, + "shop_rating_percentage": { + "type": "number" + }, + "shop_url": { "type": "string" }, - "id": { - "example": 17, - "type": "integer" + "sku": { + "type": "string" }, - "name": { - "example": "Premier League", + "source_url": { "type": "string" }, - "slug": { - "example": "premier-league", + "state_description": { "type": "string" }, - "sport": { - "example": "football", + "state_slug": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + }, + "views": { + "type": "integer" + }, + "watches": { + "type": "integer" + }, + "year": { "type": "string" } }, "type": "object" }, - "sofascore.Venue": { + "reverb.MakesResponse": { "properties": { - "capacity": { - "description": "Venue capacity.", - "example": 61276, - "type": "integer" - }, - "city": { - "description": "City the venue is in.", - "example": "Liverpool", - "type": "string" - }, - "country": { - "description": "Country the venue is in.", - "example": "England", + "fetched_at": { "type": "string" }, - "name": { - "description": "Venue name.", - "example": "Anfield", - "type": "string" + "makes": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "sofascore.VenueEventsResponse": { + "reverb.PriceGuideCSP": { "properties": { - "count": { - "type": "integer" + "average_rating": { + "type": "number" }, - "direction": { - "example": "last", + "brand": { "type": "string" }, - "events": { + "currency": { + "type": "string" + }, + "finishes": { "items": { - "$ref": "#/definitions/sofascore.EventSummary" + "type": "string" }, "type": "array" }, - "fetched_at": { + "image_url": { "type": "string" }, - "has_next_page": { - "type": "boolean" - }, - "page": { + "new_listings": { "type": "integer" }, - "season_id": { + "new_low_price": { + "type": "number" + }, + "reviews_count": { "type": "integer" }, - "source_url": { + "slug": { "type": "string" }, - "sport": { - "example": "all", + "title": { "type": "string" }, - "tournament_id": { - "type": "integer" + "url": { + "type": "string" }, - "venue_id": { + "used_listings": { "type": "integer" + }, + "used_low_price": { + "type": "number" } }, "type": "object" }, - "sofascore.VenueRecord": { + "reverb.PriceGuideMonthlyPrice": { "properties": { - "capacity": { - "example": 60704, - "type": "integer" + "average_price": { + "type": "number" }, - "city": { - "example": "London", + "currency": { "type": "string" }, - "country": { - "example": "England", + "month": { "type": "string" }, - "hidden": { - "description": "Hidden is SofaScore's hidden flag. A hidden venue has no venue-wide match\nlist (venue-events answers not found without tournament and season), but\nits matches are still listed per competition season.", - "type": "boolean" - }, - "id": { - "example": 624, + "sample_size": { "type": "integer" + } + }, + "type": "object" + }, + "reverb.PriceGuideResponse": { + "properties": { + "brand": { + "type": "string" }, - "latitude": { - "type": "number" + "canonical_product_id": { + "type": "string" }, - "longitude": { - "type": "number" + "canonical_products": { + "items": { + "$ref": "#/definitions/reverb.PriceGuideVariant" + }, + "type": "array" }, - "name": { - "example": "Emirates Stadium", + "condition": { "type": "string" }, - "slug": { - "example": "emirates-stadium", + "fetched_at": { "type": "string" }, - "state": { - "example": "US-TX", - "type": "string" - } - }, - "type": "object" - }, - "sofascore.VenueResponse": { - "properties": { - "fetched_at": { + "image_url": { "type": "string" }, - "main_teams": { + "monthly_prices": { "items": { - "$ref": "#/definitions/sofascore.TeamRef" + "$ref": "#/definitions/reverb.PriceGuideMonthlyPrice" }, "type": "array" }, - "source_url": { + "range": { "type": "string" }, - "sports": { + "recent_sales": { "items": { - "$ref": "#/definitions/sofascore.VenueSportStatistics" + "$ref": "#/definitions/reverb.PriceGuideSale" }, "type": "array" }, - "totals": { - "$ref": "#/definitions/sofascore.VenueTotals" + "sales_count": { + "type": "integer" }, - "venue": { - "$ref": "#/definitions/sofascore.VenueRecord" - } - }, - "type": "object" - }, - "sofascore.VenueSportStatistics": { - "properties": { - "draw_percentage": { - "type": "number" + "sales_limit": { + "type": "integer" }, - "goals_scored": { - "type": "number" + "sales_total": { + "type": "integer" }, - "home_win_percentage": { - "description": "HomeWinPercentage and DrawPercentage are percentages (0 to 100).", - "type": "number" + "slug": { + "type": "string" }, - "sport": { - "example": "football", + "source_url": { "type": "string" }, - "total_matches": { - "example": 415, - "type": "integer" + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "sofascore.VenueTotals": { + "reverb.PriceGuideSale": { "properties": { - "avg_corner_kicks_per_game": { - "type": "number" - }, - "avg_red_cards_per_game": { - "type": "number" - }, - "away_team_goals_scored": { - "type": "number" - }, - "away_team_wins_percentage": { - "type": "number" - }, - "draws_percentage": { - "type": "number" + "condition": { + "type": "string" }, - "home_team_goals_scored": { - "type": "number" + "listing_id": { + "type": "string" }, - "home_team_wins_percentage": { - "type": "number" + "price": { + "type": "string" }, - "total_matches": { - "type": "integer" + "sold_at": { + "type": "string" } }, "type": "object" }, - "sofascore.VoteBothTeamsToScore": { + "reverb.PriceGuideSearchResponse": { "properties": { - "no": { - "example": 4381, + "count": { "type": "integer" }, - "yes": { - "example": 5882, - "type": "integer" - } - }, - "type": "object" - }, - "sofascore.VoteFirstToScore": { - "properties": { - "away": { - "example": 457, - "type": "integer" + "fetched_at": { + "type": "string" }, - "home": { - "example": 8908, - "type": "integer" + "models": { + "items": { + "$ref": "#/definitions/reverb.PriceGuideCSP" + }, + "type": "array" }, - "no_goal": { - "example": 159, - "type": "integer" + "query": { + "type": "string" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "sofascore.VoteMatchResult": { + "reverb.PriceGuideVariant": { "properties": { - "away": { - "example": 2503, - "type": "integer" + "finish": { + "type": "string" }, - "draw": { - "example": 3713, - "type": "integer" + "id": { + "type": "string" }, - "home": { - "example": 52785, - "type": "integer" + "model": { + "type": "string" }, - "total": { - "example": 59001, - "type": "integer" + "name": { + "type": "string" + }, + "year": { + "type": "string" } }, "type": "object" }, - "sofascore.VoteWhoShouldHaveWon": { + "reverb.ProductType": { "properties": { - "away": { - "type": "integer" + "name": { + "type": "string" }, - "home": { - "type": "integer" + "slug": { + "type": "string" } }, "type": "object" }, - "sofascore.WDLRecord": { + "reverb.SearchResponse": { "properties": { - "draws": { - "type": "integer" + "category": { + "type": "string" }, - "losses": { + "count": { "type": "integer" }, - "wins": { + "fetched_at": { + "type": "string" + }, + "limit": { "type": "integer" - } - }, - "type": "object" - }, - "sofascore.categoriesResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "listings": { + "items": { + "$ref": "#/definitions/reverb.Listing" + }, + "type": "array" + }, + "make": { + "type": "string" + }, + "max_price": { + "type": "number" + }, + "min_price": { + "type": "number" + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.CategoriesResponse" + "product_type": { + "type": "string" }, - "msg": { - "example": "OK", + "query": { + "type": "string" + }, + "source_url": { "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_results": { + "type": "integer" } }, "type": "object" }, - "sofascore.categoryTournamentsResponseDoc": { + "reverb.ShopFeedback": { "properties": { - "code": { - "example": 200, - "type": "integer" + "author_name": { + "type": "string" }, - "data": { - "$ref": "#/definitions/sofascore.CategoryTournamentsResponse" + "created_at": { + "type": "string" }, - "msg": { - "example": "OK", + "listing_url": { + "type": "string" + }, + "message": { + "type": "string" + }, + "order_title": { "type": "string" + }, + "rating": { + "type": "integer" } }, "type": "object" }, - "sofascore.draftPicksResponseDoc": { + "reverb.ShopFeedbackResponse": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.DraftPicksResponse" + "feedback": { + "items": { + "$ref": "#/definitions/reverb.ShopFeedback" + }, + "type": "array" }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.draftResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.DraftResponse" + "slug": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" + }, + "total": { + "type": "integer" + }, + "total_pages": { + "type": "integer" } }, "type": "object" }, - "sofascore.esportsGameResponseDoc": { + "reverb.ShopResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "avatar_url": { + "type": "string" }, - "data": { - "$ref": "#/definitions/sofascore.EsportsGameResponse" + "banner_url": { + "type": "string" }, - "msg": { - "example": "OK", + "description": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.eventAtBatPitchesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.EventAtBatPitchesResponse" + "feedback_count": { + "type": "integer" }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.eventAtBatsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.EventAtBatsResponse" + "listings": { + "items": { + "$ref": "#/definitions/reverb.Listing" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "sofascore.eventAveragePositionsResponseDoc": { - "properties": { - "code": { - "example": 200, + "listings_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.EventAveragePositionsResponse" - }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "sofascore.eventBaseballTopPerformersResponseDoc": { - "properties": { - "code": { - "example": 200, + "listings_limit": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.EventBaseballTopPerformersResponse" + "listings_page": { + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "sofascore.eventBestPlayersResponseDoc": { - "properties": { - "code": { - "example": 200, + "listings_total": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.EventBestPlayersResponse" + "location": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.eventCommentsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.EventCommentsResponse" + "on_vacation": { + "type": "boolean" }, - "msg": { - "example": "OK", + "payment_policy": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.eventEsportsGamesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.EventEsportsGamesResponse" + "preferred_seller": { + "type": "boolean" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "sofascore.eventGraphResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "quick_responder": { + "type": "boolean" }, - "data": { - "$ref": "#/definitions/sofascore.EventGraphResponse" + "quick_shipper": { + "type": "boolean" }, - "msg": { - "example": "OK", + "rating_percentage": { + "type": "number" + }, + "return_policy": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.eventH2HResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.EventH2HResponse" + "shipping_policy": { + "type": "string" }, - "msg": { - "example": "OK", + "shop_type": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.eventHighlightsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.EventHighlightsResponse" + "slug": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.eventIncidentsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.EventIncidentsResponse" + "url": { + "type": "string" }, - "msg": { - "example": "OK", + "website": { "type": "string" } }, "type": "object" }, - "sofascore.eventInningsResponseDoc": { + "reverb.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sofascore.EventInningsResponse" + "$ref": "#/definitions/reverb.CategoriesResponse" }, "msg": { "example": "OK", @@ -207853,14 +213550,14 @@ }, "type": "object" }, - "sofascore.eventLineupsResponseDoc": { + "reverb.listingResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sofascore.EventLineupsResponse" + "$ref": "#/definitions/reverb.ListingResponse" }, "msg": { "example": "OK", @@ -207869,14 +213566,14 @@ }, "type": "object" }, - "sofascore.eventManagersResponseDoc": { + "reverb.makesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sofascore.EventManagersResponse" + "$ref": "#/definitions/reverb.MakesResponse" }, "msg": { "example": "OK", @@ -207885,14 +213582,14 @@ }, "type": "object" }, - "sofascore.eventOddsResponseDoc": { + "reverb.priceGuideResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sofascore.EventOddsResponse" + "$ref": "#/definitions/reverb.PriceGuideResponse" }, "msg": { "example": "OK", @@ -207901,14 +213598,14 @@ }, "type": "object" }, - "sofascore.eventPlayerHeatmapResponseDoc": { + "reverb.priceGuideSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sofascore.EventPlayerHeatmapResponse" + "$ref": "#/definitions/reverb.PriceGuideSearchResponse" }, "msg": { "example": "OK", @@ -207917,14 +213614,14 @@ }, "type": "object" }, - "sofascore.eventPlayerStatisticsResponseDoc": { + "reverb.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sofascore.EventPlayerStatisticsResponse" + "$ref": "#/definitions/reverb.SearchResponse" }, "msg": { "example": "OK", @@ -207933,14 +213630,14 @@ }, "type": "object" }, - "sofascore.eventPointByPointResponseDoc": { + "reverb.shopFeedbackResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sofascore.EventPointByPointResponse" + "$ref": "#/definitions/reverb.ShopFeedbackResponse" }, "msg": { "example": "OK", @@ -207949,14 +213646,14 @@ }, "type": "object" }, - "sofascore.eventPregameFormResponseDoc": { + "reverb.shopResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sofascore.EventPregameFormResponse" + "$ref": "#/definitions/reverb.ShopResponse" }, "msg": { "example": "OK", @@ -207965,1118 +213662,861 @@ }, "type": "object" }, - "sofascore.eventResponseDoc": { + "rightmove.AgentAffiliation": { "properties": { - "code": { - "example": 200, + "id": { + "example": 19, "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.EventResponse" + "image_url": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "example": "Property Redress Scheme", "type": "string" } }, "type": "object" }, - "sofascore.eventShotmapResponseDoc": { + "rightmove.AgentBranchResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "address": { + "example": "18 Pilgrimage Street,\nLondon Bridge,\nLondon,\nSE1 4LL", + "type": "string" }, - "data": { - "$ref": "#/definitions/sofascore.EventShotmapResponse" + "branch_name": { + "example": "London", + "type": "string" }, - "msg": { - "example": "OK", + "brand_name": { + "example": "1 Ability Estate Agents", "type": "string" - } - }, - "type": "object" - }, - "sofascore.eventStatisticsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.EventStatisticsResponse" + "build_to_rent": { + "type": "boolean" }, - "msg": { - "example": "OK", + "commercial": { + "type": "boolean" + }, + "company_id": { + "example": "4294", "type": "string" - } - }, - "type": "object" - }, - "sofascore.eventTVChannelsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.EventTVChannelsResponse" + "company_name": { + "example": "1st Avenue", + "type": "string" }, - "msg": { - "example": "OK", + "description": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.eventTeamHeatmapResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.EventTeamHeatmapResponse" + "development": { + "type": "boolean" }, - "msg": { - "example": "OK", + "display_name": { + "example": "1 Ability Estate Agents, London", "type": "string" - } - }, - "type": "object" - }, - "sofascore.eventTeamStreaksResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.EventTeamStreaksResponse" - }, - "msg": { - "example": "OK", + "id": { + "example": "181787", "type": "string" - } - }, - "type": "object" - }, - "sofascore.eventTennisPowerResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.EventTennisPowerResponse" + "industry_affiliations": { + "items": { + "$ref": "#/definitions/rightmove.AgentAffiliation" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "sofascore.eventVotesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "latitude": { + "type": "number" }, - "data": { - "$ref": "#/definitions/sofascore.EventVotesResponse" + "lettings": { + "type": "boolean" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "sofascore.liveEventsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "lettings_properties": { + "$ref": "#/definitions/rightmove.AgentPropertyList" }, - "data": { - "$ref": "#/definitions/sofascore.LiveEventsResponse" + "lettings_telephone": { + "example": "020 3910 6304", + "type": "string" }, - "msg": { - "example": "OK", + "logo_url": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.managerEventsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.ManagerEventsResponse" + "longitude": { + "type": "number" }, - "msg": { - "example": "OK", + "main_telephone": { + "example": "020 8293 8600", "type": "string" - } - }, - "type": "object" - }, - "sofascore.managerResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.ManagerResponse" + "overseas": { + "type": "boolean" }, - "msg": { - "example": "OK", + "postcode": { + "example": "SE1 4LL", "type": "string" - } - }, - "type": "object" - }, - "sofascore.mmaCardResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.MMACardResponse" + "sales": { + "type": "boolean" }, - "msg": { - "example": "OK", + "sales_properties": { + "$ref": "#/definitions/rightmove.AgentPropertyList" + }, + "sales_telephone": { + "example": "020 3909 6734", "type": "string" } }, "type": "object" }, - "sofascore.mmaScheduleResponseDoc": { + "rightmove.AgentItem": { "properties": { - "code": { - "example": 200, - "type": "integer" + "address": { + "example": "18 Pilgrimage Street,\nLondon Bridge,\nLondon,\nSE1 4LL", + "type": "string" }, - "data": { - "$ref": "#/definitions/sofascore.MMAScheduleResponse" + "brand_name": { + "example": "1 Ability Estate Agents", + "type": "string" }, - "msg": { - "example": "OK", + "description": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.oddsDroppingResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.OddsDroppingResponse" + "display_name": { + "example": "1 Ability Estate Agents, London", + "type": "string" }, - "msg": { - "example": "OK", + "id": { + "example": "181787", "type": "string" - } - }, - "type": "object" - }, - "sofascore.oddsWinningResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.OddsWinningResponse" + "lettings": { + "type": "boolean" }, - "msg": { - "example": "OK", + "logo_url": { + "example": "https://media.rightmove.co.uk/partner-logo/19103090-LOGO-1765975389.png", "type": "string" - } - }, - "type": "object" - }, - "sofascore.playerAttributesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.PlayerAttributesResponse" + "sales": { + "type": "boolean" }, - "msg": { - "example": "OK", + "telephones": { + "items": { + "$ref": "#/definitions/rightmove.AgentTelephone" + }, + "type": "array" + }, + "url": { + "example": "https://www.rightmove.co.uk/estate-agents/agent/1-Ability-Estate-Agents/London-181787.html", "type": "string" } }, "type": "object" }, - "sofascore.playerEventsResponseDoc": { + "rightmove.AgentPropertyItem": { "properties": { - "code": { - "example": 200, + "address": { + "example": "West Parkside, London, SE10", + "type": "string" + }, + "bathrooms": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.PlayerEventsResponse" + "bedrooms": { + "example": 2, + "type": "integer" }, - "msg": { - "example": "OK", + "channel": { + "example": "RES_LET", "type": "string" - } - }, - "type": "object" - }, - "sofascore.playerLastYearSummaryResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.PlayerLastYearSummaryResponse" + "id": { + "example": "92527095", + "type": "string" }, - "msg": { - "example": "OK", + "image": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.playerNationalTeamStatisticsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "price": { + "example": 634, "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.PlayerNationalTeamStatisticsResponse" + "price_frequency": { + "example": "weekly", + "type": "string" }, - "msg": { - "example": "OK", + "price_text": { + "example": "£634 pw", "type": "string" - } - }, - "type": "object" - }, - "sofascore.playerPenaltyHistoryResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.PlayerPenaltyHistoryResponse" + "property_type": { + "example": "Flat", + "type": "string" }, - "msg": { - "example": "OK", + "status": { + "example": "available", + "type": "string" + }, + "url": { + "example": "https://www.rightmove.co.uk/properties/92537946#/?channel=RES_LET", "type": "string" } }, "type": "object" }, - "sofascore.playerRatingsResponseDoc": { + "rightmove.AgentPropertyList": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/sofascore.PlayerRatingsResponse" + "properties": { + "items": { + "$ref": "#/definitions/rightmove.AgentPropertyItem" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "total": { + "example": 37, + "type": "integer" } }, "type": "object" }, - "sofascore.playerResponseDoc": { + "rightmove.AgentTelephone": { "properties": { - "code": { - "example": 200, - "type": "integer" + "direct_number": { + "example": "020 3903 2323", + "type": "string" }, - "data": { - "$ref": "#/definitions/sofascore.PlayerResponse" + "number": { + "example": "020 3910 6304", + "type": "string" }, - "msg": { - "example": "OK", + "type": { + "example": "LETTING", "type": "string" } }, "type": "object" }, - "sofascore.playerSeasonHeatmapResponseDoc": { + "rightmove.AgentsResponse": { "properties": { - "code": { - "example": 200, + "location": { + "example": "REGION^87490", + "type": "string" + }, + "page": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.PlayerSeasonHeatmapResponse" + "results": { + "items": { + "$ref": "#/definitions/rightmove.AgentItem" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "total": { + "example": 3614, + "type": "integer" } }, "type": "object" }, - "sofascore.playerSeasonStatisticsResponseDoc": { + "rightmove.AutocompleteItem": { "properties": { - "code": { - "example": 200, - "type": "integer" + "entity_type": { + "example": "REGION", + "type": "string" }, - "data": { - "$ref": "#/definitions/sofascore.PlayerSeasonStatisticsResponse" + "full_name": { + "example": "London, Greater London, England", + "type": "string" }, - "msg": { - "example": "OK", + "id": { + "example": "REGION^12345", + "type": "string" + }, + "name": { + "example": "London, Greater London", "type": "string" } }, "type": "object" }, - "sofascore.playerStatisticalRankingsResponseDoc": { + "rightmove.AutocompleteResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/sofascore.PlayerStatisticalRankingsResponse" - }, - "msg": { - "example": "OK", + "query": { + "example": "London", "type": "string" + }, + "results": { + "items": { + "$ref": "#/definitions/rightmove.AutocompleteItem" + }, + "type": "array" } }, "type": "object" }, - "sofascore.playerStatisticsSeasonsResponseDoc": { + "rightmove.PropertyCustomerReviews": { "properties": { - "code": { - "example": 200, - "type": "integer" + "average_score": { + "example": 4.5, + "type": "number" }, - "data": { - "$ref": "#/definitions/sofascore.PlayerStatisticsSeasonsResponse" + "count": { + "example": 5, + "type": "integer" }, - "msg": { - "example": "OK", + "latest_review": { + "example": "Great property and excellent service from the agent.", "type": "string" } }, "type": "object" }, - "sofascore.playerTournamentsResponseDoc": { + "rightmove.PropertyItem": { "properties": { - "code": { - "example": 200, + "added_or_reduced": { + "example": "Price reduced", + "type": "string" + }, + "address": { + "example": "123 Example Street, London", + "type": "string" + }, + "bathrooms": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.PlayerTournamentsResponse" + "bedrooms": { + "example": 3, + "type": "integer" }, - "msg": { - "example": "OK", + "currency": { + "example": "GBP", "type": "string" - } - }, - "type": "object" - }, - "sofascore.playerTransfersResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "days_on_market": { + "example": 14, "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.PlayerTransfersResponse" + "development": { + "example": true, + "type": "boolean" }, - "msg": { - "example": "OK", + "id": { + "example": "12345678", "type": "string" - } - }, - "type": "object" - }, - "sofascore.rankingTypesResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "image": { + "example": "https://media.rightmove.co.uk/property-photo/.../12345678.jpg", + "type": "string" + }, + "price": { + "example": 500000, "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.RankingTypesResponse" + "price_frequency": { + "example": "monthly", + "type": "string" }, - "msg": { - "example": "OK", + "price_text": { + "example": "£500,000", "type": "string" - } - }, - "type": "object" - }, - "sofascore.rankingsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "property_type": { + "example": "Semi-detached", + "type": "string" + }, + "receptions": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.RankingsResponse" + "size": { + "example": "538 sq. ft.", + "type": "string" }, - "msg": { - "example": "OK", + "status": { + "example": "For Sale", "type": "string" - } - }, - "type": "object" - }, - "sofascore.refereeEventsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.RefereeEventsResponse" + "tenure": { + "example": "LEASEHOLD", + "type": "string" }, - "msg": { - "example": "OK", + "title": { + "example": "3 bedroom semi-detached house for sale", + "type": "string" + }, + "url": { + "example": "https://www.rightmove.co.uk/properties/12345678", "type": "string" } }, "type": "object" }, - "sofascore.refereeResponseDoc": { + "rightmove.PropertyResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "added_or_reduced": { + "example": "Price reduced", + "type": "string" }, - "data": { - "$ref": "#/definitions/sofascore.RefereeResponse" + "address": { + "example": "123 Example Street, London", + "type": "string" }, - "msg": { - "example": "OK", + "available_from": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.refereeStatisticsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "bathrooms": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.RefereeStatisticsResponse" + "bedrooms": { + "example": 3, + "type": "integer" }, - "msg": { - "example": "OK", + "council_tax_band": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.roundEventsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "currency": { + "example": "GBP", + "type": "string" + }, + "customer_reviews": { + "$ref": "#/definitions/rightmove.PropertyCustomerReviews" + }, + "days_on_market": { + "example": 14, "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.RoundEventsResponse" + "description": { + "type": "string" }, - "msg": { - "example": "OK", + "development": { + "example": true, + "type": "boolean" + }, + "epc_rating": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.scheduledEventsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.ScheduledEventsResponse" + "features": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "floor_plan": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.scheduledTournamentsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.ScheduledTournamentsResponse" + "id": { + "example": "12345678", + "type": "string" }, - "msg": { - "example": "OK", + "image": { + "example": "https://media.rightmove.co.uk/property-photo/.../12345678.jpg", "type": "string" - } - }, - "type": "object" - }, - "sofascore.searchResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "nearby_schools": { + "items": { + "$ref": "#/definitions/rightmove.PropertySchool" + }, + "type": "array" + }, + "price": { + "example": 500000, "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.SearchResponse" + "price_frequency": { + "example": "monthly", + "type": "string" }, - "msg": { - "example": "OK", + "price_text": { + "example": "£500,000", "type": "string" - } - }, - "type": "object" - }, - "sofascore.searchTypedResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "property_type": { + "example": "Semi-detached", + "type": "string" + }, + "receptions": { + "example": 2, "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.SearchTypedResponse" + "size": { + "example": "538 sq. ft.", + "type": "string" }, - "msg": { - "example": "OK", + "status": { + "example": "For Sale", "type": "string" - } - }, - "type": "object" - }, - "sofascore.seasonEventsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.SeasonEventsResponse" + "tenure": { + "type": "string" }, - "msg": { - "example": "OK", + "title": { + "example": "3 bedroom semi-detached house for sale", + "type": "string" + }, + "url": { + "example": "https://www.rightmove.co.uk/properties/12345678", "type": "string" } }, "type": "object" }, - "sofascore.sportsResponseDoc": { + "rightmove.PropertySchool": { "properties": { - "code": { - "example": 200, - "type": "integer" + "distance": { + "example": "0.2 miles", + "type": "string" }, - "data": { - "$ref": "#/definitions/sofascore.SportsResponse" + "name": { + "example": "St. Mary's Primary School", + "type": "string" }, - "msg": { - "example": "OK", + "rating": { + "example": "Outstanding", + "type": "string" + }, + "type": { + "example": "Primary", "type": "string" } }, "type": "object" }, - "sofascore.stageCategoriesResponseDoc": { + "rightmove.SearchResponse": { "properties": { - "code": { - "example": 200, + "location": { + "example": "REGION^87490", + "type": "string" + }, + "page": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.StageCategoriesResponse" + "results": { + "items": { + "$ref": "#/definitions/rightmove.PropertyItem" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "total": { + "example": 1245, + "type": "integer" } }, "type": "object" }, - "sofascore.stageDetailResponseDoc": { + "rnz.AuthorArticle": { "properties": { - "code": { - "example": 200, - "type": "integer" + "image_url": { + "type": "string" }, - "data": { - "$ref": "#/definitions/sofascore.StageDetailResponse" + "published_label": { + "description": "PublishedLabel is the card's own date label as RNZ prints it\n(\"8:58 am today\", \"23 Sep 2026\"); the listing carries no machine\ntimestamp.", + "type": "string" }, - "msg": { - "example": "OK", + "summary": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.stageDriverPerformanceResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.StageDriverPerformanceResponse" + "title": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "sofascore.stageFeaturedResponseDoc": { + "rnz.AuthorResponse": { "properties": { - "code": { - "example": 200, + "article_count": { + "description": "ArticleCount is the total number of news stories RNZ lists for the\nauthor (\"Displaying items 1 - 25 of N\"); Articles holds only the first\npage.", "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.StageFeaturedResponse" + "articles": { + "items": { + "$ref": "#/definitions/rnz.AuthorArticle" + }, + "type": "array" }, - "msg": { - "example": "OK", + "bio": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.stageScheduleResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.StageScheduleResponse" + "email": { + "type": "string" }, - "msg": { - "example": "OK", + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.stageSeasonsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.StageSeasonsResponse" + "job_title": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.stageStandingsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.StageStandingsResponse" + "slug": { + "type": "string" }, - "msg": { - "example": "OK", + "twitter": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "sofascore.stageSubstagesResponseDoc": { + "roblox.Badge": { "properties": { - "code": { - "example": 200, + "awarding_root_place_id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.StageSubstagesResponse" - }, - "msg": { - "example": "OK", + "awarding_universe": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.standingsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "awarding_universe_id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.StandingsResponse" + "awards_all_time": { + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "sofascore.teamAchievementsResponseDoc": { - "properties": { - "code": { - "example": 200, + "awards_past_day": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TeamAchievementsResponse" + "created_at": { + "type": "string" }, - "msg": { - "example": "OK", + "description": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.teamEventsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TeamEventsResponse" + "enabled": { + "type": "boolean" }, - "msg": { - "example": "OK", + "icon_url": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.teamGoalDistributionsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TeamGoalDistributionsResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "updated_at": { "type": "string" } }, "type": "object" }, - "sofascore.teamNearEventsResponseDoc": { + "roblox.BadgesResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "badges": { + "items": { + "$ref": "#/definitions/roblox.Badge" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/sofascore.TeamNearEventsResponse" + "next_cursor": { + "type": "string" }, - "msg": { - "example": "OK", + "previous_cursor": { "type": "string" + }, + "universe_id": { + "type": "integer" } }, "type": "object" }, - "sofascore.teamOfTheWeekPeriodsResponseDoc": { + "roblox.Creator": { "properties": { - "code": { - "example": 200, + "id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TeamOfTheWeekPeriodsResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "type": { "type": "string" + }, + "verified": { + "type": "boolean" } }, "type": "object" }, - "sofascore.teamOfTheWeekResponseDoc": { + "roblox.Experience": { "properties": { - "code": { - "example": 200, + "creator_id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TeamOfTheWeekResponse" + "creator_name": { + "type": "string" }, - "msg": { - "example": "OK", + "description": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.teamPerformanceResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "down_votes": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TeamPerformanceResponse" + "genre": { + "type": "string" }, - "msg": { - "example": "OK", + "is_sponsored": { + "type": "boolean" + }, + "maturity": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.teamPlayerStatisticsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TeamPlayerStatisticsResponse" + "maturity_label": { + "type": "string" }, - "msg": { - "example": "OK", + "minimum_age": { + "type": "integer" + }, + "name": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.teamPlayerStatisticsSeasonsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "player_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TeamPlayerStatisticsSeasonsResponse" + "root_place_id": { + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "sofascore.teamPlayersResponseDoc": { - "properties": { - "code": { - "example": 200, + "universe_id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TeamPlayersResponse" + "up_votes": { + "type": "integer" }, - "msg": { - "example": "OK", + "url": { "type": "string" + }, + "verified_creator": { + "type": "boolean" } }, "type": "object" }, - "sofascore.teamRankingsResponseDoc": { + "roblox.Game": { "properties": { - "code": { - "example": 200, + "access_price": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TeamRankingsResponse" + "avatar_type": { + "type": "string" }, - "msg": { - "example": "OK", + "content_restricted": { + "type": "boolean" + }, + "created_at": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.teamResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TeamResponse" + "creator": { + "$ref": "#/definitions/roblox.Creator" }, - "msg": { - "example": "OK", + "description": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.teamSeasonStatisticsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "down_votes": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TeamSeasonStatisticsResponse" + "favorites": { + "type": "integer" }, - "msg": { - "example": "OK", + "genre": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.teamStatisticsSeasonsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TeamStatisticsSeasonsResponse" + "genre_l1": { + "type": "string" }, - "msg": { - "example": "OK", + "genre_l2": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.teamTopPlayersResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TeamTopPlayersResponse" + "image_url": { + "type": "string" }, - "msg": { - "example": "OK", + "max_players": { + "type": "integer" + }, + "name": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.teamTournamentsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "playing": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TeamTournamentsResponse" + "root_place_id": { + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "sofascore.teamTransfersResponseDoc": { - "properties": { - "code": { - "example": 200, + "universe_id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TeamTransfersResponse" + "up_votes": { + "type": "integer" }, - "msg": { - "example": "OK", + "updated_at": { + "type": "string" + }, + "url": { "type": "string" + }, + "visits": { + "type": "integer" } }, "type": "object" }, - "sofascore.tennisGrandSlamResultsResponseDoc": { + "roblox.GameResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/sofascore.TennisGrandSlamResultsResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "game": { + "$ref": "#/definitions/roblox.Game" } }, "type": "object" }, - "sofascore.tournamentCupTreeResponseDoc": { + "roblox.RankingsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "display_name": { + "type": "string" }, - "data": { - "$ref": "#/definitions/sofascore.TournamentCupTreeResponse" + "experiences": { + "items": { + "$ref": "#/definitions/roblox.Experience" + }, + "type": "array" }, - "msg": { - "example": "OK", + "sort_id": { "type": "string" } }, "type": "object" }, - "sofascore.tournamentInfoResponseDoc": { + "roblox.SearchResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "experiences": { + "items": { + "$ref": "#/definitions/roblox.Experience" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/sofascore.TournamentInfoResponse" + "next_page": { + "type": "string" }, - "msg": { - "example": "OK", + "query": { "type": "string" } }, "type": "object" }, - "sofascore.tournamentPlayerOfTheSeasonResponseDoc": { + "roblox.badgesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sofascore.TournamentPlayerOfTheSeasonResponse" + "$ref": "#/definitions/roblox.BadgesResponse" }, "msg": { "example": "OK", @@ -209085,14 +214525,14 @@ }, "type": "object" }, - "sofascore.tournamentPlayerStatisticsResponseDoc": { + "roblox.gameResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sofascore.TournamentPlayerStatisticsResponse" + "$ref": "#/definitions/roblox.GameResponse" }, "msg": { "example": "OK", @@ -209101,14 +214541,14 @@ }, "type": "object" }, - "sofascore.tournamentRoundsResponseDoc": { + "roblox.rankingsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sofascore.TournamentRoundsResponse" + "$ref": "#/definitions/roblox.RankingsResponse" }, "msg": { "example": "OK", @@ -209117,14 +214557,14 @@ }, "type": "object" }, - "sofascore.tournamentSeasonsResponseDoc": { + "roblox.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sofascore.TournamentSeasonsResponse" + "$ref": "#/definitions/roblox.SearchResponse" }, "msg": { "example": "OK", @@ -209133,2784 +214573,3222 @@ }, "type": "object" }, - "sofascore.tournamentStatisticsInfoResponseDoc": { + "rollingstone.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/rollingstone.HeadlineItem" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/sofascore.TournamentStatisticsInfoResponse" + "bio": { + "type": "string" }, - "msg": { - "example": "OK", + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.tournamentTeamOfTheSeasonResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TournamentTeamOfTheSeasonResponse" + "job_title": { + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "sofascore.tournamentTeamsResponseDoc": { + "rollingstone.HeadlineItem": { "properties": { - "code": { - "example": 200, - "type": "integer" + "author": { + "type": "string" }, - "data": { - "$ref": "#/definitions/sofascore.TournamentTeamsResponse" + "image_url": { + "type": "string" }, - "msg": { - "example": "OK", + "published_at": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.tournamentTopPlayersResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TournamentTopPlayersResponse" + "summary": { + "type": "string" }, - "msg": { - "example": "OK", + "title": { "type": "string" - } - }, - "type": "object" - }, - "sofascore.tournamentTopTeamsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TournamentTopTeamsResponse" + "type": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "sofascore.tournamentVenuesResponseDoc": { + "rottentomatoes.BatchMovie": { "properties": { - "code": { - "example": 200, - "type": "integer" + "audience_consensus": { + "description": "Audience consensus sentence, when the title has one.", + "type": "string" }, - "data": { - "$ref": "#/definitions/sofascore.TournamentVenuesResponse" + "audience_score": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.Score" + } + ], + "description": "Popcornmeter score as the movie page shows it." }, - "msg": { - "example": "OK", + "call_to_action": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.MovieCallToAction" + } + ], + "description": "Primary call to action shown for the title, such as a ticket link." + }, + "critics_consensus": { + "description": "Critics consensus sentence, when the title has one.", "type": "string" - } - }, - "type": "object" - }, - "sofascore.tournamentWinnersResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TournamentWinnersResponse" + "critics_score": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.Score" + } + ], + "description": "Tomatometer score as the movie page shows it." }, - "msg": { - "example": "OK", + "description": { + "description": "Short synopsis of the movie.", "type": "string" - } - }, - "type": "object" - }, - "sofascore.tournamentsWithFeatureResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TournamentsWithFeatureResponse" + "ems_id": { + "description": "Rotten Tomatoes' own unique id of the movie.", + "type": "string" }, - "msg": { - "example": "OK", + "fandango_id": { + "description": "Fandango's numeric movie id.", "type": "string" - } - }, - "type": "object" - }, - "sofascore.trendingEventsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TrendingEventsResponse" + "has_audience_all": { + "description": "Whether audience reviews and ratings exist at all, and for verified\nticket holders only.", + "example": true, + "type": "boolean" }, - "msg": { - "example": "OK", + "has_audience_verified": { + "example": true, + "type": "boolean" + }, + "has_critics_all": { + "description": "Whether critic reviews exist at all, and for top critics only.", + "example": true, + "type": "boolean" + }, + "has_critics_top": { + "example": true, + "type": "boolean" + }, + "image_url": { + "description": "URL of the primary image.", "type": "string" - } - }, - "type": "object" - }, - "sofascore.trendingPlayersResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.TrendingPlayersResponse" + "lifecycle": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.MovieLifecycle" + } + ], + "description": "Current lifecycle of the title, such as `IN_THEATERS`." }, - "msg": { - "example": "OK", + "media_type": { + "description": "Kind of title, always `Movie` here.", + "example": "Movie", "type": "string" - } - }, - "type": "object" - }, - "sofascore.venueEventsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.VenueEventsResponse" + "path": { + "description": "Rotten Tomatoes path of the movie, such as `/m/clayface`.", + "type": "string" }, - "msg": { - "example": "OK", + "poster_url": { + "description": "URL of the poster image.", "type": "string" - } - }, - "type": "object" - }, - "sofascore.venueResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sofascore.VenueResponse" + "production_companies": { + "description": "Production companies behind the movie.", + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "release_date": { + "description": "Release date of the movie in the United States, such as `2026-10-23`.", "type": "string" - } - }, - "type": "object" - }, - "sonic.AvailabilityChannel": { - "properties": { - "days": { + }, + "release_year": { + "description": "Year of release, such as `2026`.", + "type": "string" + }, + "releases": { + "description": "Release runs, by country and type.", "items": { - "$ref": "#/definitions/sonic.AvailabilityDay" + "$ref": "#/definitions/rottentomatoes.MovieRelease" }, "type": "array" }, - "service_type": { - "description": "ServiceType is Sonic's own channel name, e.g. \"ORDER_AHEAD\",\n\"CURBSIDE_PICKUP\", \"DRIVE_THROUGH\", \"DELIVERY\".", - "example": "ORDER_AHEAD", + "rotten_tomatoes_id": { + "description": "Rotten Tomatoes' legacy numeric movie id.", "type": "string" - } - }, - "type": "object" - }, - "sonic.AvailabilityDay": { - "properties": { - "count": { - "example": 96, + }, + "runtime_minutes": { + "description": "Runtime in minutes.", "type": "integer" }, - "date": { - "example": "2026-09-05", + "scores": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.MovieScoreSet" + } + ], + "description": "Every score variant the upstream reports: all critics, top critics, all\naudience and verified audience." + }, + "title": { + "description": "Title of the movie.", "type": "string" }, - "slots": { + "url": { + "description": "Rotten Tomatoes page URL of the movie.", + "type": "string" + }, + "where_to_watch": { + "description": "Where the title can be streamed, rented or bought. Public provider links\nonly; no playable media URL is returned.", "items": { - "$ref": "#/definitions/sonic.AvailabilitySlot" + "$ref": "#/definitions/rottentomatoes.WatchOffer" }, "type": "array" } }, "type": "object" }, - "sonic.AvailabilityResponse": { + "rottentomatoes.BatchMoviesResponse": { "properties": { - "channels": { - "items": { - "$ref": "#/definitions/sonic.AvailabilityChannel" - }, - "type": "array" - }, "fetched_at": { + "description": "UTC time, to the second, when the data was fetched.", + "example": "2026-10-30T00:12:00Z", "type": "string" }, - "fulfillment": { - "example": "PICKUP", - "type": "string" - }, - "lead_time_minutes": { - "description": "LeadTimeMinutes is the store's prep/handoff buffer before the first\nbookable slot -- the upstream reports it as pickupBuffer on a PICKUP\nquery and deliveryBuffer on a DELIVERY one; both are surfaced here\nunder one name.", - "example": 5, - "type": "integer" + "movies": { + "description": "Movie details, in the order the identifiers were requested.", + "items": { + "$ref": "#/definitions/rottentomatoes.BatchMovie" + }, + "type": "array" }, - "service_types": { - "description": "ServiceTypes is every channel the store supports, which is a\nsuperset of the channels that have slots in this response.", + "not_found": { + "description": "Identifiers that resolved to no movie, in request order.", "items": { "type": "string" }, "type": "array" - }, - "slot_duration_minutes": { - "description": "SlotDurationMinutes is how long each window lasts.", - "example": 5, - "type": "integer" - }, - "source_url": { - "type": "string" - }, - "store_id": { - "example": "4521", + } + }, + "type": "object" + }, + "rottentomatoes.BrowseFilter": { + "properties": { + "key": { + "example": "genres", "type": "string" }, - "timezone": { - "example": "America/Denver", + "label": { + "example": "Genre", "type": "string" }, - "total_slots": { - "example": 288, - "type": "integer" + "values": { + "items": { + "$ref": "#/definitions/rottentomatoes.BrowseFilterValue" + }, + "type": "array" } }, "type": "object" }, - "sonic.AvailabilitySlot": { + "rottentomatoes.BrowseFilterValue": { "properties": { - "end_time": { - "example": "2026-09-05T16:50:00Z", + "label": { + "example": "Action", "type": "string" }, - "start_time": { - "example": "2026-09-05T16:45:00Z", + "value": { + "example": "action", "type": "string" } }, "type": "object" }, - "sonic.CategoriesResponse": { + "rottentomatoes.BrowseFiltersResponse": { "properties": { - "categories": { + "fetched_at": { + "example": "2026-09-26T10:00:00Z", + "type": "string" + }, + "filters": { "items": { - "$ref": "#/definitions/sonic.Category" + "$ref": "#/definitions/rottentomatoes.BrowseFilter" }, "type": "array" }, - "count": { - "example": 20, - "type": "integer" - }, - "fetched_at": { + "list": { + "example": "movies_in_theaters", "type": "string" }, + "public_page_derived": { + "example": true, + "type": "boolean" + }, "source_url": { + "example": "https://www.rottentomatoes.com/browse/movies_in_theaters/sort:popular", "type": "string" } }, "type": "object" }, - "sonic.Category": { + "rottentomatoes.BrowseItem": { "properties": { - "name": { - "description": "Name is Sonic's own category name where known (see\ncategoryDisplayNames), otherwise a best-effort title-cased form of\nSlug -- see titleCaseSlug's doc comment.", - "example": "Tea & Coffee", + "critics_review_count": { + "description": "Number of critic reviews behind the Tomatometer score.", + "example": 136, + "type": "integer" + }, + "date_created": { + "description": "Release date text shown on the browse card, such as `2026`.", + "example": "2026", "type": "string" }, - "page_count": { - "description": "PageCount is the number of subcategory and item pages Sonic's own\nmenu sitemap lists under this category -- a proxy for menu size, not\na deduplicated product count (a size-variant group like \"Coffee\"\ncounts as one page here even though it expands to several orderable\nsizes).", - "example": 24, + "image_url": { + "description": "URL of the poster image.", + "type": "string" + }, + "media_type": { + "description": "Kind of title, such as `Movie`.", + "example": "Movie", + "type": "string" + }, + "path": { + "description": "Rotten Tomatoes path of the title page, such as `/m/wildwood_nj`.", + "example": "/m/wildwood_nj", + "type": "string" + }, + "position": { + "description": "Position of the title in the returned list, starting at 1.", + "example": 1, "type": "integer" }, - "slug": { - "example": "tea-coffee", + "title": { + "description": "Title name as shown on the browse card.", + "example": "Wildwood, NJ", "type": "string" }, + "tomatometer_score": { + "description": "Tomatometer critics score, as a percentage.", + "example": 87, + "type": "integer" + }, "url": { + "description": "Rotten Tomatoes page URL of the title.", + "example": "https://www.rottentomatoes.com/m/wildwood_nj", "type": "string" + }, + "video": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.EpisodeVideo" + } + ], + "description": "Featured video of the title, when Rotten Tomatoes provides one." } }, "type": "object" }, - "sonic.Deal": { + "rottentomatoes.BrowseResponse": { "properties": { - "cta_text": { - "description": "CTAText is the call-to-action button label, e.g. \"Order Now\".", - "example": "Order Now", + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:46:16Z", "type": "string" }, - "cta_url": { - "description": "CTAURL is the destination the call-to-action links to, absolute for\non-site links.", - "example": "https://www.sonicdrivein.com/menu/categories/1-99-menu", - "type": "string" + "items": { + "description": "Titles on this page of the browse list.", + "items": { + "$ref": "#/definitions/rottentomatoes.BrowseItem" + }, + "type": "array" }, - "description": { - "description": "Description is the card's body copy.", - "example": "The Jr Bacon Cheeseburger brings crispy bacon, melty cheese, and juicy beef together for just $1.99.", - "type": "string" + "limit": { + "description": "Maximum number of rows requested.", + "example": 10, + "type": "integer" }, - "headline": { - "description": "Headline is the marketing headline shown on the card.", - "example": "BACON MAKES EVERYTHING BETTER", + "list": { + "description": "Browse list that was returned, such as `movies_in_theaters`.", + "example": "movies_in_theaters", "type": "string" }, - "image_url": { - "description": "ImageURL is the promotion's full-resolution creative.", - "type": "string" + "page_info": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.ReviewPageInfo" + } + ], + "description": "Paging information. Pass `end_cursor` as `after` to get the next page." }, - "name": { - "description": "Name is the promotion's public name.", - "example": "$1.99 Jr Bacon Cheeseburger", + "public_page_derived": { + "description": "Always `true`: the data comes from publicly visible Rotten Tomatoes pages.", + "example": true, + "type": "boolean" + }, + "sort": { + "description": "Sort order applied to the list, such as `popular`.", + "example": "popular", "type": "string" }, - "section": { - "description": "Section is the on-page grouping this deal appeared under, e.g.\n\"Featured Deals\".", - "example": "Featured Deals", + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.rottentomatoes.com/browse/movies_in_theaters/sort:popular", "type": "string" }, - "terms": { - "description": "Terms is the promotion's legal/limitations text when published.", + "title": { + "description": "Title of the browse list, as Rotten Tomatoes shows it.", + "example": "Movies in Theaters (2026)", "type": "string" } }, "type": "object" }, - "sonic.DealsResponse": { + "rottentomatoes.CriticAuthor": { "properties": { - "count": { - "example": 3, - "type": "integer" - }, - "deals": { + "badges": { + "example": [ + "Individually approved" + ], "items": { - "$ref": "#/definitions/sonic.Deal" + "type": "string" }, "type": "array" }, - "fetched_at": { + "name": { + "example": "Mae Abdulbaki", "type": "string" }, - "heading": { - "example": "Featured Sonic Deals", + "path": { + "example": "/critics/mae-abdulbaki", "type": "string" }, - "source_url": { + "publication_label": { + "example": "when published by", "type": "string" + }, + "publications": { + "items": { + "$ref": "#/definitions/rottentomatoes.CriticAuthorPublication" + }, + "type": "array" } }, "type": "object" }, - "sonic.DeliveryProvider": { + "rottentomatoes.CriticAuthorPublication": { "properties": { - "is_active": { - "type": "boolean" + "editorial_url": { + "example": "https://example.com/reviews", + "type": "string" + }, + "id": { + "example": "2784", + "type": "string" }, "name": { - "example": "DoorDash", + "example": "Firstpost", "type": "string" }, - "url": { + "path": { + "example": "/critics/source/2784", "type": "string" } }, "type": "object" }, - "sonic.DirectoryCity": { + "rottentomatoes.CriticPublication": { "properties": { - "count": { - "example": 1, - "type": "integer" + "editorial_url": { + "description": "Publication's editorial site URL, when provided.", + "example": "http://www.timeout.com", + "type": "string" + }, + "encrypted_publication_id": { + "description": "Rotten Tomatoes' encrypted publication id.", + "example": "1XrAqGrw", + "type": "string" + }, + "image_url": { + "description": "Logo/image URL of the publication.", + "type": "string" + }, + "is_top_publication": { + "description": "Whether Rotten Tomatoes counts it as a top publication.", + "example": true, + "type": "boolean" }, "name": { - "example": "Albertville", + "description": "Publication name, such as `Empire Magazine`.", + "example": "Empire Magazine", "type": "string" }, - "slug": { - "description": "Slug is the city segment as it appears in a store path, which is\nthe lowercased form GET /sonic/locations returns.", - "example": "albertville", + "publication_id": { + "description": "Rotten Tomatoes' numeric publication id.", + "example": "148", "type": "string" + }, + "tomatometer_approved": { + "description": "Whether the publication is Tomatometer-approved.", + "example": true, + "type": "boolean" } }, "type": "object" }, - "sonic.DirectoryCountry": { + "rottentomatoes.CriticPublicationsResponse": { "properties": { - "count": { - "example": 3364, - "type": "integer" - }, - "country_code": { - "example": "US", - "type": "string" + "critic": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.ReviewsSubject" + } + ], + "description": "Critic the publications belong to." }, - "country_name": { - "example": "United States", + "fetched_at": { + "description": "UTC time, to the second, when the data was fetched.", + "example": "2026-10-29T09:00:00Z", "type": "string" }, - "states": { + "page_info": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.ReviewPageInfo" + } + ], + "description": "Paging information. Only the first page is served today; end_cursor is\nreported for callers that want to detect more." + }, + "publications": { + "description": "Publications the critic writes for.", "items": { - "$ref": "#/definitions/sonic.DirectoryState" + "$ref": "#/definitions/rottentomatoes.CriticPublication" }, "type": "array" + }, + "source_url": { + "description": "Rotten Tomatoes page that was rendered.", + "example": "https://www.rottentomatoes.com/critic/mark-kermode", + "type": "string" } }, "type": "object" }, - "sonic.DirectoryResponse": { + "rottentomatoes.CriticResponse": { "properties": { - "countries": { + "biography": { + "description": "Biography, when Rotten Tomatoes provides one.", + "type": "string" + }, + "critics_groups": { + "description": "Critics groups the critic belongs to.", "items": { - "$ref": "#/definitions/sonic.DirectoryCountry" + "type": "string" }, "type": "array" }, + "display_name": { + "description": "Display name as Rotten Tomatoes prints it.", + "example": "Mark Kermode", + "type": "string" + }, + "encrypted_critic_id": { + "description": "Rotten Tomatoes' encrypted critic id.", + "example": "5rPoepZe", + "type": "string" + }, "fetched_at": { + "description": "UTC time, to the second, when the profile was fetched.", + "example": "2026-10-29T09:00:00Z", "type": "string" }, - "source_url": { + "followers_count": { + "description": "Number of accounts following the critic.", + "example": 0, + "type": "integer" + }, + "following_count": { + "description": "Number of accounts the critic follows.", + "example": 0, + "type": "integer" + }, + "initials": { + "description": "Initials used for the avatar fallback.", + "example": "MK", "type": "string" }, - "total_count": { - "example": 3364, + "is_top_critic": { + "description": "Whether Rotten Tomatoes counts the critic as a top critic.", + "example": true, + "type": "boolean" + }, + "path": { + "description": "Rotten Tomatoes profile path.", + "example": "/critic/mark-kermode", + "type": "string" + }, + "publication_count": { + "description": "Number of publications Rotten Tomatoes reports.", + "example": 2, "type": "integer" - } - }, - "type": "object" - }, - "sonic.DirectoryState": { - "properties": { - "cities": { + }, + "publications": { + "description": "Publications the critic writes for, as embedded in the profile payload.", "items": { - "$ref": "#/definitions/sonic.DirectoryCity" + "$ref": "#/definitions/rottentomatoes.CriticPublication" }, "type": "array" }, - "code": { - "example": "AL", - "type": "string" + "recent_reviews": { + "description": "Most recent reviews embedded in the profile payload.", + "items": { + "$ref": "#/definitions/rottentomatoes.MovieReview" + }, + "type": "array" }, - "count": { - "example": 95, + "review_count": { + "description": "Number of published reviews Rotten Tomatoes reports.", + "example": 3218, "type": "integer" }, - "name": { - "example": "Alabama", - "type": "string" - } - }, - "type": "object" - }, - "sonic.ItemResponse": { - "properties": { - "description": { - "example": "Local Favorite! Fluffy egg, melty cheese, and bacon between a toasted bagel.", - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "image_url": { + "source_url": { + "description": "Rotten Tomatoes page that was rendered.", + "example": "https://www.rottentomatoes.com/critic/mark-kermode", "type": "string" }, - "name": { - "example": "Bacon, Egg and Cheese Bagel", - "type": "string" + "tomatometer_approved": { + "description": "Whether the critic is Tomatometer-approved.", + "example": true, + "type": "boolean" }, - "nutrition_guide_url": { - "description": "NutritionGuideURL is Sonic's site-wide nutrition/allergen PDF, not a\nper-item document -- every item detail page links the same guide.", + "url": { + "description": "Absolute Rotten Tomatoes profile URL.", + "example": "https://www.rottentomatoes.com/critic/mark-kermode", "type": "string" }, - "path": { + "vanity": { + "description": "Vanity handle, the last segment of the profile path.", + "example": "mark-kermode", "type": "string" }, - "source_url": { + "website_url": { + "description": "Personal site URL, when provided.", "type": "string" } }, "type": "object" }, - "sonic.LocationEntry": { + "rottentomatoes.CriticsAuthorsResponse": { "properties": { - "address_slug": { - "example": "2540-dell-range-blvd", + "after": { + "example": "", "type": "string" }, - "city_slug": { - "example": "cheyenne", - "type": "string" + "authors": { + "items": { + "$ref": "#/definitions/rottentomatoes.CriticAuthor" + }, + "type": "array" }, - "country_code": { - "example": "US", + "before": { + "example": "", "type": "string" }, - "path": { - "description": "Path is the ready-made value GET /sonic/store takes.", - "example": "locations/us/wy/cheyenne/2540-dell-range-blvd/store-4521", + "fetched_at": { + "example": "2026-09-26T10:00:00Z", "type": "string" }, - "state_code": { - "example": "WY", - "type": "string" + "has_next_page": { + "example": true, + "type": "boolean" }, - "store_id": { - "example": "4521", + "has_previous_page": { + "example": false, + "type": "boolean" + }, + "inactive": { + "example": false, + "type": "boolean" + }, + "letter": { + "example": "a", "type": "string" - } - }, - "type": "object" - }, - "sonic.LocationSuggestResponse": { - "properties": { - "count": { - "example": 5, + }, + "limit": { + "example": 100, "type": "integer" }, - "country": { - "example": "US", + "next_cursor": { + "example": "MQ==", "type": "string" }, - "fetched_at": { + "previous_cursor": { + "example": "MA==", "type": "string" }, - "limit": { - "example": 5, - "type": "integer" + "public_page_derived": { + "example": true, + "type": "boolean" }, - "query": { - "example": "cheyenne wy", + "search": { + "example": "", "type": "string" }, "source_url": { + "example": "https://www.rottentomatoes.com/napi/critics/authors?isInactiveCriticsList=false&letter=a&pageCount=100&userToken=null", "type": "string" - }, - "suggestions": { - "items": { - "$ref": "#/definitions/sonic.LocationSuggestion" - }, - "type": "array" } }, "type": "object" }, - "sonic.LocationSuggestion": { + "rottentomatoes.EditorialContentItem": { "properties": { - "city": { - "example": "Cheyenne", - "type": "string" - }, - "confidence": { - "description": "Confidence is the geocoder's own match confidence: \"exact\",\n\"interpolated\", or \"fallback\".", - "example": "exact", - "type": "string" - }, - "country": { - "example": "United States", - "type": "string" - }, - "country_code": { - "example": "US", - "type": "string" - }, - "county": { - "example": "Laramie", - "type": "string" + "author_id": { + "example": 944, + "type": "integer" }, - "formatted_address": { - "example": "2540 Dell Range Blvd, Cheyenne, WY 82009 US", + "excerpt": { + "example": "A ranked guide to essential 21st century biopics.", "type": "string" }, - "label": { - "example": "2540 Dell Range Blvd", - "type": "string" + "featured_media_id": { + "example": 297622, + "type": "integer" }, - "latitude": { - "example": 41.160549, - "type": "number" + "id": { + "example": 297618, + "type": "integer" }, - "layer": { - "description": "Layer is the match's granularity: \"address\", \"locality\", \"state\",\n\"postalCode\", or \"place\".", - "example": "address", + "modified_at": { + "example": "2026-09-25T09:04:07", "type": "string" }, - "longitude": { - "example": -104.777671, - "type": "number" - }, - "number": { - "example": "2540", + "published_at": { + "example": "2026-09-25T09:04:07", "type": "string" }, - "postal_code": { - "example": "82009", - "type": "string" + "term_ids": { + "example": [ + 121877, + 121876 + ], + "items": { + "type": "integer" + }, + "type": "array" }, - "state": { - "example": "Wyoming", + "title": { + "example": "Essential 21st Century Biopics Ranked", "type": "string" }, - "state_code": { - "example": "WY", + "type": { + "enum": [ + "article", + "guide", + "gallery", + "hub-subpage", + "non-rt-publication", + "rt-hub", + "how-to", + "otg-article", + "prev", + "rt_poll", + "page" + ], + "example": "guide", "type": "string" }, - "street": { - "example": "Dell Range Blvd", + "url": { + "example": "https://editorial.rottentomatoes.com/guide/essential-21st-century-biopic-movies/", "type": "string" } }, "type": "object" }, - "sonic.LocationsResponse": { + "rottentomatoes.EditorialContentResponse": { "properties": { - "city": { - "example": "cheyenne", + "fetched_at": { + "example": "2026-09-26T10:00:00Z", "type": "string" }, - "count": { - "example": 100, + "has_next_page": { + "example": true, + "type": "boolean" + }, + "limit": { + "example": 20, "type": "integer" }, - "fetched_at": { + "operator": { + "enum": [ + "AND", + "OR" + ], + "example": "OR", "type": "string" }, - "locations": { - "items": { - "$ref": "#/definitions/sonic.LocationEntry" - }, - "type": "array" - }, "page": { "example": 1, "type": "integer" }, - "page_size": { - "example": 100, - "type": "integer" + "public_page_derived": { + "example": true, + "type": "boolean" + }, + "query": { + "example": "horror", + "type": "string" + }, + "results": { + "items": { + "$ref": "#/definitions/rottentomatoes.EditorialContentItem" + }, + "type": "array" }, "source_url": { + "example": "https://editorial.rottentomatoes.com/wp-json/wp/v2/guide?page=1&per_page=20", "type": "string" }, - "state": { - "example": "WY", + "taxonomy": { + "enum": [ + "categories", + "tags", + "related-movie-id", + "related-tv-season-id", + "related-tv-series-id", + "related-tv-episode-id", + "related-celebrity-id", + "publication", + "franchise", + "coauthors" + ], + "example": "related-movie-id", "type": "string" }, + "term_ids": { + "example": [ + 121877, + 121876 + ], + "items": { + "type": "integer" + }, + "type": "array" + }, "total": { - "example": 5125, + "example": 1194, "type": "integer" }, "total_pages": { - "example": 52, + "example": 60, "type": "integer" + }, + "type": { + "enum": [ + "article", + "guide", + "gallery", + "hub-subpage", + "non-rt-publication", + "rt-hub", + "how-to", + "otg-article", + "prev", + "rt_poll", + "pages" + ], + "example": "guide", + "type": "string" } }, "type": "object" }, - "sonic.MenuItem": { + "rottentomatoes.EditorialContentType": { "properties": { - "calories": { - "description": "Calories is Sonic's own published calorie count. A genuine 0 (seen on\na few drink entries in this source) means Sonic did not publish a\ncount for that entry, not that the item has zero calories.", - "example": 530, - "type": "integer" + "label": { + "example": "Guides", + "type": "string" }, - "name": { - "example": "Bacon, Egg and Cheese Bagel", + "value": { + "enum": [ + "article", + "guide", + "gallery", + "hub-subpage", + "non-rt-publication", + "rt-hub", + "how-to", + "otg-article", + "prev", + "rt_poll", + "pages" + ], + "example": "guide", "type": "string" } }, "type": "object" }, - "sonic.MenuResponse": { + "rottentomatoes.EditorialContentTypesResponse": { "properties": { - "category": { - "example": "breakfast", - "type": "string" - }, - "count": { - "example": 24, - "type": "integer" + "public_page_derived": { + "example": true, + "type": "boolean" }, - "fetched_at": { + "source_url": { + "example": "https://editorial.rottentomatoes.com/wp-json/wp/v2/types", "type": "string" }, - "items": { + "types": { "items": { - "$ref": "#/definitions/sonic.MenuItem" + "$ref": "#/definitions/rottentomatoes.EditorialContentType" }, "type": "array" }, - "source_url": { + "verified_at": { + "example": "2026-09-26", "type": "string" } }, "type": "object" }, - "sonic.NearbyResponse": { + "rottentomatoes.EditorialDetailLink": { "properties": { - "fetched_at": { + "text": { "type": "string" }, - "is_last_page": { - "type": "boolean" - }, - "latitude": { - "example": 35.4676, - "type": "number" - }, - "limit": { - "example": 10, - "type": "integer" - }, - "longitude": { - "example": -97.5164, - "type": "number" - }, - "page": { - "example": 0, - "type": "integer" - }, - "radius_miles": { - "example": 25, - "type": "integer" - }, - "returned_count": { - "example": 10, - "type": "integer" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "rottentomatoes.EditorialDetailResponse": { + "properties": { + "body_html": { + "type": "string" }, - "source_url": { + "fetched_at": { "type": "string" }, - "stores": { + "headings": { "items": { - "$ref": "#/definitions/sonic.NearbyStore" + "type": "string" }, "type": "array" }, - "total_pages": { - "example": 2, - "type": "integer" - }, - "total_stores": { - "example": 17, - "type": "integer" - } - }, - "type": "object" - }, - "sonic.NearbyStore": { - "properties": { - "address": { - "$ref": "#/definitions/sonic.StoreAddress" + "image_url": { + "type": "string" }, - "amenities": { + "images": { "items": { "type": "string" }, "type": "array" }, - "delivery_providers": { + "links": { "items": { - "$ref": "#/definitions/sonic.DeliveryProvider" + "$ref": "#/definitions/rottentomatoes.EditorialDetailLink" }, "type": "array" }, - "display_name": { - "example": "2540 Dell Range Blvd, Cheyenne, WY", + "modified_at": { "type": "string" }, - "distance_miles": { - "example": 3.45, - "type": "number" - }, - "has_drive_through": { - "type": "boolean" - }, - "hours": { + "paragraphs": { "items": { - "$ref": "#/definitions/sonic.StoreHours" + "type": "string" }, "type": "array" }, - "is_delivery_enabled": { - "type": "boolean" + "path": { + "example": "/guide/all-brad-pitt-movies-ranked-by-tomatometer/", + "type": "string" }, - "is_digitally_enabled": { + "public_page_derived": { "type": "boolean" }, - "latitude": { - "example": 41.160531, - "type": "number" - }, - "longitude": { - "example": -104.777659, - "type": "number" - }, - "phone": { - "example": "307-632-9188", + "published_at": { "type": "string" }, - "service_hours": { - "items": { - "$ref": "#/definitions/sonic.StoreServiceHours" - }, - "type": "array" + "source_url": { + "type": "string" }, - "status": { - "example": "OPEN", + "subtitle": { "type": "string" }, - "store_id": { - "example": "4521", + "title": { + "example": "Brad Pitt Movies Ranked by Tomatometer", "type": "string" }, - "timezone": { - "example": "America/Denver", + "type": { + "enum": [ + "article", + "gallery", + "guide", + "otg-article", + "prev" + ], + "example": "guide", "type": "string" + }, + "video_urls": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "sonic.NutritionDocument": { + "rottentomatoes.EditorialSearchResponse": { "properties": { - "category": { - "description": "Category is the heading the document is grouped under. It usually\nmatches Name, since most groups hold a single document.", - "example": "Nutrition Guide", - "type": "string" - }, - "content_type": { - "description": "ContentType is the document's MIME type, in practice\n\"application/pdf\".", - "example": "application/pdf", + "fetched_at": { + "example": "2026-09-26T10:00:00Z", "type": "string" }, - "file_name": { - "example": "61667-1_FEE_0926_Nutrition.pdf", - "type": "string" + "has_next_page": { + "example": true, + "type": "boolean" }, - "name": { - "description": "Name is the label Sonic gives the document on the page, e.g.\n\"Nutrition Guide\" or \"Allergen Info\".", - "example": "Nutrition Guide", - "type": "string" + "limit": { + "example": 10, + "type": "integer" }, - "size_bytes": { - "description": "SizeBytes is the file size. These are large print-ready PDFs --\nseveral megabytes each -- so callers may want it before fetching.", - "example": 14351111, + "page": { + "example": 1, "type": "integer" }, - "title": { - "example": "61131-13 SUM26 NAT WOP-English FA cp WCAG", - "type": "string" + "public_page_derived": { + "example": true, + "type": "boolean" }, - "updated_at": { - "description": "UpdatedAt is when Sonic last republished the file.", - "example": "2026-06-30T16:45:09.549Z", + "query": { + "example": "horror", "type": "string" }, - "url": { - "example": "https://downloads.ctfassets.net/.../nutrition-guide.pdf", + "results": { + "items": { + "$ref": "#/definitions/rottentomatoes.EditorialSearchResult" + }, + "type": "array" + }, + "source_url": { + "example": "https://editorial.rottentomatoes.com/wp-json/wp/v2/search?page=1&per_page=10&search=horror", "type": "string" + }, + "total": { + "example": 5110, + "type": "integer" + }, + "total_pages": { + "example": 511, + "type": "integer" } }, "type": "object" }, - "sonic.NutritionDocumentsResponse": { + "rottentomatoes.EditorialSearchResult": { "properties": { - "count": { - "example": 5, + "id": { + "example": 282182, "type": "integer" }, - "documents": { - "items": { - "$ref": "#/definitions/sonic.NutritionDocument" - }, - "type": "array" + "subtype": { + "example": "guide", + "type": "string" }, - "fetched_at": { + "title": { + "example": "Best New Horror Movies of 2026", "type": "string" }, - "heading": { - "example": "Sonic Nutrition & Allergen Information", + "type": { + "example": "post", "type": "string" }, - "source_url": { + "url": { + "example": "https://editorial.rottentomatoes.com/guide/best-new-horror-movies-2026/", "type": "string" } }, "type": "object" }, - "sonic.SitemapEntry": { + "rottentomatoes.EditorialSectionItem": { "properties": { - "kind": { - "description": "Kind classifies the page -- see SitemapOption.Kind's enum per section.", - "example": "item", + "image_url": { + "example": "https://editorial.rottentomatoes.com/wp-content/uploads/2026/04/poster.png?w=300", "type": "string" }, - "path": { - "description": "Path is the site-relative path (no leading/trailing slash), the\nshape /sonic/menu's category param and /sonic/item's path param take\nfor \"menu\" section entries, and /sonic/store's path param takes for\n\"locations\" section \"store\" entries.", - "example": "menu/categories/breakfast/local-breakfast-favorites/bacon-egg-and-cheese-bagel", + "published_at": { + "example": "September 25, 2026", + "type": "string" + }, + "title": { + "example": "Robert Pattinson Movies Ranked by Tomatometer", "type": "string" }, "url": { + "example": "https://editorial.rottentomatoes.com/guide/robert-pattinson/", "type": "string" } }, "type": "object" }, - "sonic.SitemapResponse": { + "rottentomatoes.EditorialSectionResponse": { "properties": { - "count": { - "example": 100, - "type": "integer" - }, - "entries": { - "items": { - "$ref": "#/definitions/sonic.SitemapEntry" - }, - "type": "array" - }, "fetched_at": { + "example": "2026-09-26T10:00:00Z", "type": "string" }, + "has_next_page": { + "example": true, + "type": "boolean" + }, "page": { "example": 1, "type": "integer" }, - "section": { - "example": "menu", + "path": { + "example": "/countdown/", "type": "string" }, + "public_page_derived": { + "example": true, + "type": "boolean" + }, + "results": { + "items": { + "$ref": "#/definitions/rottentomatoes.EditorialSectionItem" + }, + "type": "array" + }, "source_url": { + "example": "https://editorial.rottentomatoes.com/countdown/", "type": "string" }, - "total": { - "example": 298, - "type": "integer" + "title": { + "example": "Countdown", + "type": "string" }, "total_pages": { - "example": 3, + "example": 40, "type": "integer" } }, "type": "object" }, - "sonic.StoreAddress": { + "rottentomatoes.EditorialTaxonomiesResponse": { "properties": { - "city": { - "example": "Cheyenne", - "type": "string" + "public_page_derived": { + "example": true, + "type": "boolean" }, - "country": { - "example": "US", + "source_url": { + "example": "https://editorial.rottentomatoes.com/wp-json/wp/v2/taxonomies", "type": "string" }, - "line1": { - "example": "2540 Dell Range Blvd", - "type": "string" + "taxonomies": { + "items": { + "$ref": "#/definitions/rottentomatoes.EditorialTaxonomy" + }, + "type": "array" }, - "line2": { + "verified_at": { + "example": "2026-09-26", "type": "string" + } + }, + "type": "object" + }, + "rottentomatoes.EditorialTaxonomy": { + "properties": { + "hierarchical": { + "example": false, + "type": "boolean" }, - "postal_code": { - "example": "82009", + "label": { + "example": "Related Movie Ids", "type": "string" }, - "state": { - "example": "WY", + "types": { + "example": [ + "article", + "guide", + "gallery" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "value": { + "enum": [ + "categories", + "tags", + "related-movie-id", + "related-tv-season-id", + "related-tv-series-id", + "related-tv-episode-id", + "related-celebrity-id", + "publication", + "franchise", + "coauthors" + ], + "example": "related-movie-id", "type": "string" } }, "type": "object" }, - "sonic.StoreHours": { + "rottentomatoes.EditorialTerm": { "properties": { - "closes": { - "example": "21:45", + "count": { + "example": 3072, + "type": "integer" + }, + "description": { "type": "string" }, - "day_of_week": { - "example": "MONDAY", + "id": { + "example": 10732, + "type": "integer" + }, + "link": { + "example": "https://editorial.rottentomatoes.com/author/cap-rt-staff/", "type": "string" }, - "is_24_hour": { - "type": "boolean" + "name": { + "example": "RT Staff", + "type": "string" }, - "opens": { - "example": "07:00", + "parent": { + "example": 0, + "type": "integer" + }, + "slug": { + "example": "cap-rt-staff", "type": "string" } }, "type": "object" }, - "sonic.StoreResponse": { + "rottentomatoes.EditorialTermsResponse": { "properties": { - "address": { - "$ref": "#/definitions/sonic.StoreAddress" + "fetched_at": { + "example": "2026-09-26T10:00:00Z", + "type": "string" }, - "amenities": { - "items": { - "type": "string" - }, - "type": "array" + "has_next_page": { + "example": true, + "type": "boolean" }, - "delivery_providers": { + "limit": { + "example": 20, + "type": "integer" + }, + "page": { + "example": 1, + "type": "integer" + }, + "public_page_derived": { + "example": true, + "type": "boolean" + }, + "results": { "items": { - "$ref": "#/definitions/sonic.DeliveryProvider" + "$ref": "#/definitions/rottentomatoes.EditorialTerm" }, "type": "array" }, - "display_name": { - "example": "2540 Dell Range Blvd, Cheyenne, WY", + "search": { + "example": "RT Staff", "type": "string" }, - "fetched_at": { + "source_url": { + "example": "https://editorial.rottentomatoes.com/wp-json/wp/v2/coauthors?page=1&per_page=20", "type": "string" }, - "has_drive_through": { - "type": "boolean" + "taxonomy": { + "enum": [ + "categories", + "tags", + "related-movie-id", + "related-tv-season-id", + "related-tv-series-id", + "related-tv-episode-id", + "related-celebrity-id", + "publication", + "franchise", + "coauthors" + ], + "example": "coauthors", + "type": "string" }, - "hours": { + "total": { + "example": 927, + "type": "integer" + }, + "total_pages": { + "example": 47, + "type": "integer" + } + }, + "type": "object" + }, + "rottentomatoes.EpisodeResponse": { + "properties": { + "air_date": { + "description": "Date the episode first aired, such as `2008-01-20`.", + "example": "2008-01-20", + "type": "string" + }, + "audience_score": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.Score" + } + ], + "description": "Popcornmeter audience score of the episode." + }, + "cast": { + "description": "People in the cast of the episode.", "items": { - "$ref": "#/definitions/sonic.StoreHours" + "$ref": "#/definitions/rottentomatoes.Person" }, "type": "array" }, - "is_delivery_enabled": { - "type": "boolean" - }, - "is_digitally_enabled": { - "type": "boolean" + "critics_score": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.Score" + } + ], + "description": "Tomatometer critics score of the episode." }, - "latitude": { - "example": 41.160531, - "type": "number" + "description": { + "description": "Short synopsis of the episode.", + "type": "string" }, - "longitude": { - "example": -104.777659, - "type": "number" + "directors": { + "description": "Directors of the episode.", + "items": { + "$ref": "#/definitions/rottentomatoes.Person" + }, + "type": "array" }, - "path": { + "ems_id": { + "description": "Rotten Tomatoes' own unique id of the episode.", + "example": "ccda9549-4dcb-3147-9a2b-1106dcf852f7", "type": "string" }, - "phone": { - "example": "307-632-9188", + "episode_number": { + "description": "Episode number within its season.", + "example": 1, + "type": "integer" + }, + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:46:16Z", "type": "string" }, - "service_hours": { + "genres": { + "description": "Genres of the episode.", + "example": [ + "Crime" + ], "items": { - "$ref": "#/definitions/sonic.StoreServiceHours" + "type": "string" }, "type": "array" }, - "source_url": { + "image_url": { + "description": "URL of the episode image.", "type": "string" }, - "status": { - "example": "OPEN", + "lifecycle": { + "description": "Airing status, such as `NOT_AIRING`.", + "example": "NOT_AIRING", "type": "string" }, - "store_id": { - "example": "4521", + "media_type": { + "description": "Kind of title, such as `TvEpisode`.", + "example": "TvEpisode", "type": "string" }, - "timezone": { - "example": "America/Denver", + "parent_season": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.SeasonSummary" + } + ], + "description": "Season the episode belongs to." + }, + "parent_series": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.SeriesSummary" + } + ], + "description": "Series the episode belongs to." + }, + "path": { + "description": "Rotten Tomatoes path of the episode page, such as `/tv/breaking_bad/s01/e01`.", + "example": "/tv/breaking_bad/s01/e01", "type": "string" - } - }, - "type": "object" - }, - "sonic.StoreServiceHours": { - "properties": { - "hours": { + }, + "producers": { + "description": "Producers of the episode.", "items": { - "$ref": "#/definitions/sonic.StoreHours" + "$ref": "#/definitions/rottentomatoes.Person" }, "type": "array" }, - "is_fulfillment": { - "type": "boolean" - }, - "is_tipping_enabled": { + "public_page_derived": { + "description": "Always `true`: the data comes from publicly visible Rotten Tomatoes pages.", + "example": true, "type": "boolean" }, - "type": { - "description": "Type is Sonic's own channel name, e.g. \"ORDER_AHEAD\", \"PICKUP\",\n\"CURBSIDE_PICKUP\", \"STORE\", \"DELIVERY\", \"DRIVE_THROUGH\".", - "example": "DRIVE_THROUGH", - "type": "string" - } - }, - "type": "object" - }, - "sonic.availabilityResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "season_number": { + "description": "Number of the season the episode belongs to.", + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/sonic.AvailabilityResponse" + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01/e01", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "sonic.categoriesResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "title": { + "description": "Title of the episode, as Rotten Tomatoes shows it.", + "example": "Pilot", + "type": "string" }, - "data": { - "$ref": "#/definitions/sonic.CategoriesResponse" + "url": { + "description": "Rotten Tomatoes page URL of the episode.", + "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01/e01", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "video": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.EpisodeVideo" + } + ], + "description": "Video clip shown on the episode page." } }, "type": "object" }, - "sonic.dealsResponseDoc": { + "rottentomatoes.EpisodeVideo": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" - }, - "data": { - "$ref": "#/definitions/sonic.DealsResponse" + "description": { + "description": "Description of the video.", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "sonic.directoryResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "duration": { + "description": "Length of the video as text, such as `2:32`.", + "example": "2:32", + "type": "string" }, - "data": { - "$ref": "#/definitions/sonic.DirectoryResponse" + "thumbnail": { + "description": "URL of the video thumbnail image.", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "sonic.itemResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "title": { + "description": "Title of the video.", + "example": "Breaking Bad: Official Clip - Walter Wants to Cook", + "type": "string" }, - "data": { - "$ref": "#/definitions/sonic.ItemResponse" + "upload_date": { + "description": "Date and time the video was uploaded, such as `2024-07-11T19:23:03`.", + "example": "2024-07-11T19:23:03", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "url": { + "description": "Rotten Tomatoes page URL of the video.", + "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01/e01/videos/JR3ymbH1dpLb", + "type": "string" } }, "type": "object" }, - "sonic.locationSuggestResponseDoc": { + "rottentomatoes.MovieCallToAction": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" - }, - "data": { - "$ref": "#/definitions/sonic.LocationSuggestResponse" + "button_text": { + "description": "Button label, such as `Buy Tickets`.", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "sonic.locationsResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "lifecycle_date": { + "description": "Lifecycle date behind the action, such as `2026-10-23`.", + "type": "string" }, - "data": { - "$ref": "#/definitions/sonic.LocationsResponse" + "name": { + "description": "Provider the action goes to.", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "window_text": { + "description": "Supporting text, such as `Now in Theaters`.", + "type": "string" } }, "type": "object" }, - "sonic.menuResponseDoc": { + "rottentomatoes.MovieLifecycle": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" - }, - "data": { - "$ref": "#/definitions/sonic.MenuResponse" + "date": { + "description": "Date the stage began, such as `2026-10-23`.", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "lifecycle": { + "description": "Lifecycle stage, such as `IN_THEATERS` or `AT_HOME`.", + "type": "string" } }, "type": "object" }, - "sonic.nearbyResponseDoc": { + "rottentomatoes.MovieRelease": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" - }, - "data": { - "$ref": "#/definitions/sonic.NearbyResponse" + "country": { + "description": "Country of the release, such as `USA`.", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "sonic.nutritionDocumentsResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "date": { + "description": "Release date, such as `2026-10-23`.", + "type": "string" }, - "data": { - "$ref": "#/definitions/sonic.NutritionDocumentsResponse" + "distributors": { + "description": "Distributors of the release.", + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "type": { + "description": "Release type, such as `WIDE` or `LIMITED`.", + "type": "string" } }, "type": "object" }, - "sonic.sitemapResponseDoc": { + "rottentomatoes.MovieResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" - }, - "data": { - "$ref": "#/definitions/sonic.SitemapResponse" + "audience_reviews": { + "description": "Sample of audience reviews shown on the movie page.", + "items": { + "$ref": "#/definitions/rottentomatoes.Review" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "sonic.storeResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "audience_score": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.Score" + } + ], + "description": "Popcornmeter audience score of the movie." }, - "data": { - "$ref": "#/definitions/sonic.StoreResponse" + "cast": { + "description": "People in the cast of the movie.", + "items": { + "$ref": "#/definitions/rottentomatoes.Person" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "soundcloud.Playlist": { - "properties": { - "artwork_url": { + "content_rating": { + "description": "Content rating of the movie, such as `PG-13`.", + "example": "PG-13", "type": "string" }, - "created_at": { - "type": "string" + "critics_score": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.Score" + } + ], + "description": "Tomatometer critics score of the movie." }, "description": { + "description": "Short synopsis of the movie.", "type": "string" }, - "genre": { + "directors": { + "description": "Directors of the movie.", + "items": { + "$ref": "#/definitions/rottentomatoes.Person" + }, + "type": "array" + }, + "ems_id": { + "description": "Rotten Tomatoes' own unique id of the movie.", + "example": "afbf1c81-1bfe-3996-9cbc-2e1be23d1f61", "type": "string" }, - "id": { - "type": "integer" + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:46:16Z", + "type": "string" }, - "is_album": { - "type": "boolean" + "genres": { + "description": "Genres of the movie.", + "example": [ + "Sci-Fi" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "likes_count": { - "example": 1024, - "type": "integer" + "image_url": { + "description": "URL of the poster image.", + "type": "string" }, - "owner": { - "$ref": "#/definitions/soundcloud.Uploader" + "media_type": { + "description": "Kind of title, such as `Movie`.", + "example": "Movie", + "type": "string" }, - "permalink_url": { + "path": { + "description": "Rotten Tomatoes path of the movie page, such as `/m/inception`.", + "example": "/m/inception", "type": "string" }, - "public": { + "producers": { + "description": "Producers of the movie.", + "items": { + "$ref": "#/definitions/rottentomatoes.Person" + }, + "type": "array" + }, + "public_page_derived": { + "description": "Always `true`: the data comes from publicly visible Rotten Tomatoes pages.", "example": true, "type": "boolean" }, - "reposts_count": { - "type": "integer" + "release_date": { + "description": "Release date of the movie, such as `2010-07-16`.", + "example": "2010-07-16", + "type": "string" }, - "tag_list": { + "reviews_url": { + "description": "URL of the Rotten Tomatoes page with the audience reviews of the movie.", + "example": "https://www.rottentomatoes.com/m/inception/reviews/all-audience", "type": "string" }, - "title": { + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.rottentomatoes.com/m/inception", "type": "string" }, - "track_count": { - "example": 416, - "type": "integer" + "title": { + "description": "Title of the movie, as Rotten Tomatoes shows it.", + "example": "Inception", + "type": "string" }, - "tracks": { - "items": { - "$ref": "#/definitions/soundcloud.Track" - }, - "type": "array" + "url": { + "description": "Rotten Tomatoes page URL of the movie.", + "example": "https://www.rottentomatoes.com/m/inception", + "type": "string" } }, "type": "object" }, - "soundcloud.Profile": { + "rottentomatoes.MovieReview": { "properties": { - "avatar_url": { + "created_at": { + "example": "2024-04-11T23:40:16.000Z", "type": "string" }, - "city": { + "critic_url": { + "example": "https://www.rottentomatoes.com/critic/danilo-castro", "type": "string" }, - "country_code": { - "example": "US", + "critic_vanity": { + "description": "Upstream critic vanity path, the last segment of critic_url.", + "example": "danilo-castro", "type": "string" }, - "description": { + "display_name": { + "example": "Danilo Castro", "type": "string" }, - "followers_count": { - "example": 255531, - "type": "integer" - }, - "followings_count": { - "example": 634, - "type": "integer" + "encrypted_critic_id": { + "description": "Upstream encrypted critic identifier.", + "type": "string" }, - "full_name": { + "encrypted_publication_id": { + "description": "Upstream encrypted publication identifier.", "type": "string" }, - "id": { - "type": "integer" + "has_profanity": { + "example": false, + "type": "boolean" }, - "likes_count": { - "example": 1032, - "type": "integer" + "has_spoilers": { + "example": false, + "type": "boolean" }, - "permalink": { + "id": { + "example": "102903742", "type": "string" }, - "permalink_url": { + "language": { + "description": "Language the review was written in, such as `English`.", + "example": "English", "type": "string" }, - "playlist_count": { - "example": 27, - "type": "integer" + "media": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.ReviewMedia" + } + ], + "description": "Title the review is about. Present on critic-feed responses (a critic\nreviews many titles) and omitted elsewhere." }, - "track_count": { - "example": 712, - "type": "integer" + "original_score": { + "example": "9/10", + "type": "string" }, - "username": { + "publication": { + "example": "Next Best Picture", "type": "string" }, - "verified": { + "publication_approved": { + "example": true, "type": "boolean" - } - }, - "type": "object" - }, - "soundcloud.SearchResponse": { - "properties": { - "count": { - "example": 20, - "type": "integer" }, - "query": { + "publication_id": { + "description": "Upstream publication identifier.", "type": "string" }, - "tracks": { - "items": { - "$ref": "#/definitions/soundcloud.Track" - }, - "type": "array" - } - }, - "type": "object" - }, - "soundcloud.Track": { - "properties": { - "artwork_url": { + "publication_review_url": { + "example": "https://nextbestpicture.com/inception/", "type": "string" }, - "comment_count": { - "example": 57, - "type": "integer" + "rating": { + "example": 4.5, + "type": "number" }, - "created_at": { - "example": "2021-06-14T15:40:10Z", + "rating_label": { + "example": "STAR_4_5", "type": "string" }, - "description": { + "review": { "type": "string" }, - "duration_ms": { - "example": 165218, - "type": "integer" - }, - "genre": { + "scheduled_at": { + "description": "Upstream scheduling time of the review, when provided.", + "example": "2026-10-21T19:11:02.000Z", "type": "string" }, - "id": { - "type": "integer" - }, - "likes_count": { - "example": 10101, - "type": "integer" - }, - "permalink_url": { + "score_sentiment": { + "example": "POSITIVE", "type": "string" }, - "playback_count": { - "example": 2593224, - "type": "integer" + "status": { + "description": "Upstream review status, such as `ACTIVE`.", + "example": "ACTIVE", + "type": "string" }, - "public": { - "example": true, + "super_reviewer": { + "example": false, "type": "boolean" }, - "reposts_count": { - "example": 196, - "type": "integer" - }, - "streamable": { + "tomatometer_approved": { "example": true, "type": "boolean" }, - "tag_list": { - "type": "string" - }, - "title": { - "type": "string" - }, - "uploader": { - "$ref": "#/definitions/soundcloud.Uploader" - } - }, - "type": "object" - }, - "soundcloud.Uploader": { - "properties": { - "avatar_url": { - "type": "string" - }, - "city": { - "type": "string" - }, - "followers_count": { - "example": 220, - "type": "integer" + "top_critic": { + "example": false, + "type": "boolean" }, - "id": { - "type": "integer" + "top_publication": { + "example": false, + "type": "boolean" }, - "permalink": { - "type": "string" + "top_review": { + "example": false, + "type": "boolean" }, - "permalink_url": { + "type": { + "example": "critic", "type": "string" }, - "track_count": { - "example": 12, - "type": "integer" - }, - "username": { + "updated_at": { + "description": "Time the review was last edited upstream, when it differs from created_at.", + "example": "2026-10-28T22:40:02.000Z", "type": "string" }, "verified": { + "example": false, "type": "boolean" } }, "type": "object" }, - "soundcloud.UserTracksResponse": { + "rottentomatoes.MovieScoreSet": { "properties": { - "count": { - "example": 20, - "type": "integer" - }, - "profile_url": { - "type": "string" + "audience_all": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.Score" + } + ], + "description": "Every audience rating." }, - "tracks": { - "items": { - "$ref": "#/definitions/soundcloud.Track" - }, - "type": "array" - } - }, - "type": "object" - }, - "soundcloud.playlistResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "audience_verified": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.Score" + } + ], + "description": "Verified ticket holders only." }, - "data": { - "$ref": "#/definitions/soundcloud.Playlist" + "critics_all": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.Score" + } + ], + "description": "All critics." }, - "msg": { - "example": "OK", - "type": "string" + "critics_top": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.Score" + } + ], + "description": "Top critics only." } }, "type": "object" }, - "soundcloud.profileResponseDoc": { + "rottentomatoes.MovieVideo": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/soundcloud.Profile" + "description": { + "description": "Video description, when provided.", + "type": "string" }, - "msg": { - "example": "OK", + "duration": { + "description": "Display duration, such as `1:41`.", + "example": "1:41", "type": "string" - } - }, - "type": "object" - }, - "soundcloud.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/soundcloud.SearchResponse" + "duration_seconds": { + "description": "Duration in seconds.", + "example": "101.101", + "type": "string" }, - "msg": { - "example": "OK", + "image_url": { + "description": "Square image URL.", "type": "string" - } - }, - "type": "object" - }, - "soundcloud.trackResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/soundcloud.Track" + "is_default": { + "description": "Whether Rotten Tomatoes marks it as the default video.", + "example": false, + "type": "boolean" }, - "msg": { - "example": "OK", + "is_red_band": { + "description": "Whether the trailer is red-band.", + "example": false, + "type": "boolean" + }, + "media_id": { + "description": "MPX media id, as Rotten Tomatoes also labels it.", + "example": "2515201603871", "type": "string" - } - }, - "type": "object" - }, - "soundcloud.userTracksResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/soundcloud.UserTracksResponse" + "mpx_id": { + "description": "MPX media id behind the video.", + "example": "2515201603871", + "type": "string" }, - "msg": { - "example": "OK", + "playable_file_url": { + "description": "Playable stream/playlist URL.", "type": "string" - } - }, - "type": "object" - }, - "space.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "public_id": { + "description": "Rotten Tomatoes public id of the video.", + "example": "0gzlStnzLm8R", + "type": "string" }, - "image_url": { + "thumbnail_url": { + "description": "Thumbnail image URL.", "type": "string" }, - "job_title": { + "title": { + "description": "Video title, such as `Clayface: Final Trailer`.", + "example": "Clayface: Final Trailer", "type": "string" }, - "name": { + "type": { + "description": "Stream container type reported by Rotten Tomatoes, such as `hls`.", + "example": "hls", "type": "string" }, - "slug": { + "video_page_url": { + "description": "Rotten Tomatoes page URL of the video.", + "example": "https://www.rottentomatoes.com/m/clayface/videos/0gzlStnzLm8R", "type": "string" }, - "url": { + "video_type": { + "description": "Kind of video, such as `TRAILER` or `OTHER`.", + "example": "TRAILER", "type": "string" } }, "type": "object" }, - "sparkfun.CategoriesResponse": { + "rottentomatoes.MovieVideosResponse": { "properties": { - "categories": { + "fetched_at": { + "description": "UTC time, to the second, when the data was fetched.", + "example": "2026-10-29T09:00:00Z", + "type": "string" + }, + "movie": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.ReviewMovieSummary" + } + ], + "description": "Title the videos belong to." + }, + "source_url": { + "description": "Rotten Tomatoes page the video reference was read from.", + "example": "https://www.rottentomatoes.com/m/clayface", + "type": "string" + }, + "videos": { + "description": "Videos Rotten Tomatoes lists for the title, primary video first.", "items": { - "$ref": "#/definitions/sparkfun.Category" + "$ref": "#/definitions/rottentomatoes.MovieVideo" }, "type": "array" + }, + "videos_api_url": { + "description": "Open JSON endpoint the videos were read from.", + "type": "string" } }, "type": "object" }, - "sparkfun.Category": { + "rottentomatoes.Person": { "properties": { - "id": { + "image_url": { + "description": "URL of the person's photo.", "type": "string" }, "name": { + "description": "Name of the person.", + "example": "Christopher Nolan", "type": "string" }, - "url_key": { - "type": "string" - }, - "url_path": { + "url": { + "description": "Rotten Tomatoes page URL of the person.", + "example": "https://www.rottentomatoes.com/celebrity/christopher_nolan", "type": "string" } }, "type": "object" }, - "sparkfun.CategoryResponse": { + "rottentomatoes.PersonCredit": { "properties": { - "category": { - "$ref": "#/definitions/sparkfun.Category" - }, - "filters": { - "items": { - "$ref": "#/definitions/sparkfun.Filter" - }, - "type": "array" + "audience_score": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.Score" + } + ], + "description": "Popcornmeter audience score of the title." }, - "page": { - "type": "integer" + "credits": { + "description": "Roles the person had on the title, such as `Director, Screenwriter, Producer`.", + "example": "Director, Screenwriter, Producer", + "type": "string" }, - "per_page": { - "type": "integer" + "critics_score": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.Score" + } + ], + "description": "Tomatometer critics score of the title." }, - "products": { - "items": { - "$ref": "#/definitions/sparkfun.Product" - }, - "type": "array" + "path": { + "description": "Rotten Tomatoes path of the title page, such as `/m/oppenheimer_2023`.", + "example": "/m/oppenheimer_2023", + "type": "string" }, - "total": { + "position": { + "description": "Position of the credit in the filmography list, starting at 1.", + "example": 1, "type": "integer" }, - "total_pages": { - "type": "integer" - } - }, - "type": "object" - }, - "sparkfun.Filter": { - "properties": { - "attribute": { + "poster_url": { + "description": "URL of the title's poster image.", "type": "string" }, - "label": { + "title": { + "description": "Name of the title, as Rotten Tomatoes shows it.", + "example": "Oppenheimer", "type": "string" }, - "options": { - "items": { - "$ref": "#/definitions/sparkfun.FilterOption" - }, - "type": "array" - } - }, - "type": "object" - }, - "sparkfun.FilterOption": { - "properties": { - "count": { - "type": "integer" - }, - "label": { + "url": { + "description": "Rotten Tomatoes page URL of the title.", + "example": "https://www.rottentomatoes.com/m/oppenheimer_2023", "type": "string" }, - "value": { + "years_featured": { + "description": "Year or years shown for the title in the filmography.", + "example": "2023", "type": "string" } }, "type": "object" }, - "sparkfun.Image": { + "rottentomatoes.PersonRatedTitle": { "properties": { - "label": { + "path": { + "description": "Rotten Tomatoes path of the title page, such as `/m/the_dark_knight`.", + "example": "/m/the_dark_knight", + "type": "string" + }, + "score": { + "description": "Critics score of the title, as a percentage.", + "example": 94, + "type": "integer" + }, + "title": { + "description": "Name of the title, as Rotten Tomatoes shows it.", + "example": "The Dark Knight", "type": "string" }, "url": { + "description": "Rotten Tomatoes page URL of the title.", + "example": "https://www.rottentomatoes.com/m/the_dark_knight", + "type": "string" + }, + "year": { + "description": "Release year of the title.", + "example": "2008", "type": "string" } }, "type": "object" }, - "sparkfun.Price": { + "rottentomatoes.PersonResponse": { "properties": { - "currency": { + "birth_date": { + "description": "Date of birth, such as `1970-07-30`.", + "example": "1970-07-30", "type": "string" }, - "value": { - "type": "number" - } - }, - "type": "object" - }, - "sparkfun.Product": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/sparkfun.Category" - }, - "type": "array" + "birthplace": { + "description": "Place of birth, such as `London, England, UK`.", + "example": "London, England, UK", + "type": "string" }, "description": { + "description": "Biography text of the person.", "type": "string" }, - "image": { - "$ref": "#/definitions/sparkfun.Image" + "ems_id": { + "description": "Rotten Tomatoes' own unique id of the person.", + "example": "a015d515-713e-38e3-abbe-cf0cdaa519b0", + "type": "string" }, - "media": { + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:46:16Z", + "type": "string" + }, + "filmography": { + "description": "Titles the person has credits on, one entry per title.", "items": { - "$ref": "#/definitions/sparkfun.Image" + "$ref": "#/definitions/rottentomatoes.PersonCredit" }, "type": "array" }, - "name": { + "filmography_api_url": { + "description": "URL of the Rotten Tomatoes filmography list for this person.", + "example": "https://www.rottentomatoes.com/cnapi/modules/filmography/a015d515-713e-38e3-abbe-cf0cdaa519b0/movie/newest", "type": "string" }, - "price": { - "$ref": "#/definitions/sparkfun.Price" + "highest_rated": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.PersonRatedTitle" + } + ], + "description": "Highest-rated title of the person, with its score." }, - "recommendations": { - "items": { - "$ref": "#/definitions/sparkfun.ProductRecommendation" - }, - "type": "array" + "image_url": { + "description": "URL of the person's photo.", + "type": "string" }, - "sku": { + "lowest_rated": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.PersonRatedTitle" + } + ], + "description": "Lowest-rated title of the person, with its score." + }, + "name": { + "description": "Name of the person.", + "example": "Christopher Nolan", "type": "string" }, - "stock_status": { + "page_info": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.ReviewPageInfo" + } + ], + "description": "Paging information for the filmography." + }, + "path": { + "description": "Rotten Tomatoes path of the person page, such as `/celebrity/christopher_nolan`.", + "example": "/celebrity/christopher_nolan", "type": "string" }, - "url": { + "public_page_derived": { + "description": "Always `true`: the data comes from publicly visible Rotten Tomatoes pages.", + "example": true, + "type": "boolean" + }, + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.rottentomatoes.com/celebrity/christopher_nolan", "type": "string" - } - }, - "type": "object" - }, - "sparkfun.ProductRecommendation": { - "properties": { - "product": { - "$ref": "#/definitions/sparkfun.Product" }, - "relation": { + "url": { + "description": "Rotten Tomatoes page URL of the person.", + "example": "https://www.rottentomatoes.com/celebrity/christopher_nolan", "type": "string" } }, "type": "object" }, - "sparkfun.SearchResponse": { + "rottentomatoes.Publication": { "properties": { - "filters": { + "critic_count": { + "description": "Number of critics who write for the publication.", + "type": "integer" + }, + "critics": { + "description": "Critics who write for the publication, when known.", "items": { - "$ref": "#/definitions/sparkfun.Filter" + "$ref": "#/definitions/rottentomatoes.PublicationCritic" }, "type": "array" }, - "page": { - "type": "integer" + "editorial_url": { + "description": "Editorial page of the publication, when it has one.", + "type": "string" }, - "per_page": { + "encrypted_id": { + "description": "Encrypted publication identifier, the one the review endpoints return.", + "type": "string" + }, + "followers_count": { + "description": "Number of followers the publication has.", "type": "integer" }, - "products": { - "items": { - "$ref": "#/definitions/sparkfun.Product" - }, - "type": "array" + "image_url": { + "description": "URL of the publication's image.", + "type": "string" }, - "query": { + "is_top_publication": { + "description": "Whether Rotten Tomatoes ranks this as a top publication.", + "example": true, + "type": "boolean" + }, + "name": { + "description": "Display name of the publication.", + "example": "Empire Magazine", "type": "string" }, - "total": { + "review_count": { + "description": "Number of reviews the publication has contributed.", "type": "integer" }, - "total_pages": { - "type": "integer" + "tomatometer_approved": { + "description": "Whether the publication is Tomatometer approved.", + "example": true, + "type": "boolean" } }, "type": "object" }, - "sparkfun.categoriesResponseDoc": { + "rottentomatoes.PublicationCritic": { "properties": { - "code": { - "example": 200, - "type": "integer" + "display_name": { + "description": "Display name of the critic.", + "type": "string" }, - "data": { - "$ref": "#/definitions/sparkfun.CategoriesResponse" + "encrypted_critic_id": { + "description": "Encrypted critic identifier, the one the critic endpoints accept.", + "type": "string" }, - "msg": { - "example": "OK", + "image_url": { + "description": "URL of the critic's image.", "type": "string" - } - }, - "type": "object" - }, - "sparkfun.categoryResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sparkfun.CategoryResponse" + "initials": { + "description": "Initials of the critic, as the app shows them.", + "type": "string" }, - "msg": { - "example": "OK", + "is_top_critic": { + "description": "Whether Rotten Tomatoes ranks this critic as a top critic.", + "example": true, + "type": "boolean" + }, + "rotten_tomatoes_url": { + "description": "Rotten Tomatoes critic page URL.", "type": "string" - } - }, - "type": "object" - }, - "sparkfun.productResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/sparkfun.Product" + "tomatometer_approved": { + "description": "Whether the critic is Tomatometer approved.", + "example": true, + "type": "boolean" }, - "msg": { - "example": "OK", + "vanity": { + "description": "Vanity slug of the critic's page.", "type": "string" } }, "type": "object" }, - "sparkfun.searchResponseDoc": { + "rottentomatoes.PublicationResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/sparkfun.SearchResponse" - }, - "msg": { - "example": "OK", + "fetched_at": { + "description": "UTC time, to the second, when the data was fetched.", + "example": "2026-10-30T00:12:00Z", "type": "string" + }, + "publication": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.Publication" + } + ], + "description": "The publication and the critics who write for it." } }, "type": "object" }, - "sportingnews.AuthorArticle": { + "rottentomatoes.Review": { "properties": { - "author": { + "display_date": { + "description": "Date the review was posted, as shown on the page, such as `Mar 19`.", + "example": "Mar 19", "type": "string" }, - "image_url": { + "display_name": { + "description": "Display name of the reviewer.", + "example": "Rylee", "type": "string" }, - "published_at": { - "type": "string" + "fandango_review": { + "description": "Whether Rotten Tomatoes flags the review as a Fandango review.", + "example": true, + "type": "boolean" }, - "section": { + "rating": { + "description": "Star rating the reviewer gave, such as `5`.", + "example": 5, + "type": "number" + }, + "rating_id": { + "description": "Unique id of the rating.", + "example": "e0812d98-c1d5-467d-ae35-c19cdd575f90", "type": "string" }, - "title": { + "rating_range": { + "description": "Rating text as shown on the page, such as `Rated 5/5 Stars`.", + "example": "Rated 5/5 Stars", "type": "string" }, - "url": { + "review": { + "description": "Text of the review.", "type": "string" + }, + "verified": { + "description": "Whether the review is marked as verified.", + "example": true, + "type": "boolean" } }, "type": "object" }, - "sportingnews.AuthorResponse": { + "rottentomatoes.ReviewMedia": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/sportingnews.AuthorArticle" - }, - "type": "array" - }, - "bio": { - "type": "string" - }, - "image_url": { + "path": { + "description": "Rotten Tomatoes path of the reviewed title.", + "example": "/m/inception", "type": "string" }, - "name": { + "poster_url": { + "description": "Poster image URL of the reviewed title.", "type": "string" }, - "slug": { + "title": { + "description": "Title of the reviewed movie or TV series.", + "example": "Inception", "type": "string" }, - "social_links": { - "items": { - "type": "string" - }, - "type": "array" - }, "url": { + "description": "Absolute Rotten Tomatoes URL of the reviewed title.", + "example": "https://www.rottentomatoes.com/m/inception", "type": "string" } }, "type": "object" }, - "sportsbook.Event": { + "rottentomatoes.ReviewMovieSummary": { "properties": { - "id": { + "ems_id": { + "example": "afbf1c81-1bfe-3996-9cbc-2e1be23d1f61", "type": "string" }, - "markets": { - "items": { - "$ref": "#/definitions/sportsbook.Market" - }, - "type": "array" - }, - "name": { - "example": "CAR Panthers @ BUF Bills", + "media_type": { + "example": "Movie", "type": "string" }, - "participants": { - "items": { - "$ref": "#/definitions/sportsbook.Participant" - }, - "type": "array" + "path": { + "example": "/m/inception", + "type": "string" }, - "start_time": { + "title": { + "example": "Inception", "type": "string" }, - "status": { - "example": "NOT_STARTED", + "url": { + "example": "https://www.rottentomatoes.com/m/inception", "type": "string" } }, "type": "object" }, - "sportsbook.EventContextResponse": { + "rottentomatoes.ReviewPageInfo": { "properties": { - "event_id": { - "example": "34522271", + "end_cursor": { + "description": "Cursor of the last item on this page. Pass it as `after` to get the next page.", + "example": "Mjk=", "type": "string" }, - "event_seo_id": { - "example": "chi-white-sox-@-det-tigers", - "type": "string" + "has_next_page": { + "description": "Whether more items follow this page.", + "example": true, + "type": "boolean" }, - "fetched_at": { - "type": "string" + "has_previous_page": { + "description": "Whether items precede this page.", + "example": true, + "type": "boolean" }, - "league_id": { - "example": "84240", - "type": "string" - }, - "league_seo_id": { - "example": "mlb", - "type": "string" - }, - "source_url": { - "type": "string" - }, - "sport_id": { - "example": "7", - "type": "string" - }, - "sport_seo_id": { - "example": "baseball", + "start_cursor": { + "description": "Cursor of the first item on this page.", + "example": "MA==", "type": "string" } }, "type": "object" }, - "sportsbook.EventMarketsResponse": { + "rottentomatoes.ReviewsRenderInfo": { "properties": { - "count": { + "load_more_clicks": { + "description": "\"Load More\" steps needed to reach the requested page.", + "example": 0, "type": "integer" }, - "event_id": { - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "markets": { - "items": { - "$ref": "#/definitions/sportsbook.Market" - }, - "type": "array" - }, - "source_url": { - "type": "string" + "pages_fetched": { + "description": "Number of distinct review pages that were loaded.", + "example": 1, + "type": "integer" }, - "subcategory_id": { - "type": "string" + "total_ms": { + "description": "Total wall time the render took, in milliseconds.", + "example": 18432, + "type": "integer" } }, "type": "object" }, - "sportsbook.EventResponse": { + "rottentomatoes.ReviewsResponse": { "properties": { "fetched_at": { + "description": "UTC time, to the second, when the Rotten Tomatoes page behind this response was fetched. A cached response keeps its original time.", + "example": "2026-06-07T14:46:16Z", "type": "string" }, - "id": { - "type": "string" + "limit": { + "example": 10, + "type": "integer" }, - "league_id": { - "example": "84240", - "type": "string" + "movie": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.ReviewMovieSummary" + } + ], + "description": "Movie summary, for movie feeds only. Kept for existing callers; prefer\nsubject for new integrations." }, - "name": { - "example": "CAR Panthers @ BUF Bills", + "page_info": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.ReviewPageInfo" + } + ], + "description": "Whether more reviews follow this page, and the cursor to request them." + }, + "public_page_derived": { + "description": "True when the reviews came from the public page's embedded sample rather\nthan from the gated critic-review feed.", + "example": true, + "type": "boolean" + }, + "render": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.ReviewsRenderInfo" + } + ], + "description": "Browser render audit facts. Present only for `browser_render`." + }, + "render_error": { + "description": "Why a browser render that was attempted did not produce the response, when\na public-page sample was served instead.", "type": "string" }, - "participants": { + "reviews": { "items": { - "$ref": "#/definitions/sportsbook.Participant" + "$ref": "#/definitions/rottentomatoes.MovieReview" }, "type": "array" }, - "source_url": { + "reviews_api_url": { + "example": "https://www.rottentomatoes.com/napi/rtcf/v1/movies/afbf1c81-1bfe-3996-9cbc-2e1be23d1f61/reviews?type=critic&pageCount=10", "type": "string" }, - "sport_id": { - "example": "7", + "source_url": { + "example": "https://www.rottentomatoes.com/m/inception/reviews/all-critics", "type": "string" }, - "start_time": { + "subject": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.ReviewsSubject" + } + ], + "description": "Subject of the feed: a movie, TV season, TV episode or critic." + }, + "transport": { + "description": "How the reviews were read. `feed_api` is the review feed's own JSON API,\nwhich is newest-first, carries review ids and ISO timestamps and is not\nbounded by the page's click depth. `browser_render` is the same feed read\nfrom the review page's own requests in a real browser. `public_page` is the\nembedded sample on the public movie page.", + "enum": [ + "feed_api", + "browser_render", + "public_page" + ], + "example": "feed_api", "type": "string" }, - "status": { - "example": "NOT_STARTED", + "type": { + "example": "critics", "type": "string" } }, "type": "object" }, - "sportsbook.FeaturedLeague": { + "rottentomatoes.ReviewsSubject": { "properties": { - "featured_order": { - "example": 4855, - "type": "integer" - }, - "has_live_offers": { - "type": "boolean" - }, - "id": { - "example": "84240", + "ems_id": { + "description": "Rotten Tomatoes' own unique id of the subject, when it has one.", + "example": "71374db9-1350-30fa-b30a-d3f623bbdfc4", "type": "string" }, - "name": { - "example": "MLB", + "kind": { + "description": "Kind of subject: `movie`, `season`, `episode`, `critic` or `publication`.", + "enum": [ + "movie", + "season", + "episode", + "critic", + "publication" + ], + "example": "season", "type": "string" }, - "slug": { - "example": "mlb", + "media_type": { + "description": "Kind of title, such as `TvSeason`.", + "example": "TvSeason", "type": "string" }, - "sport": { - "example": "Baseball", + "path": { + "description": "Rotten Tomatoes path of the subject.", + "example": "/tv/breaking_bad/s01", "type": "string" }, - "sport_id": { - "example": "7", + "title": { + "description": "Display title of the subject, when known.", + "example": "Breaking Bad: Season 1", "type": "string" }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" + "url": { + "description": "Rotten Tomatoes page URL of the subject.", + "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01", + "type": "string" } }, "type": "object" }, - "sportsbook.FeaturedLeaguesResponse": { + "rottentomatoes.Score": { "properties": { - "count": { - "type": "integer" + "average_rating": { + "description": "Average rating as shown on the scorecard, such as `8.40`.", + "example": "8.40", + "type": "string" }, - "fetched_at": { + "banded_rating_count": { + "description": "Approximate number of ratings as shown on the page, such as `250,000+ Ratings`.", + "example": "250,000+ Ratings", "type": "string" }, - "leagues": { - "items": { - "$ref": "#/definitions/sportsbook.FeaturedLeague" - }, - "type": "array" + "certified": { + "description": "Whether Rotten Tomatoes marks the score as certified.", + "example": true, + "type": "boolean" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "sportsbook.FuturesResponse": { - "properties": { - "count": { + "liked_count": { + "description": "Number of ratings that liked the title.", + "example": 314, "type": "integer" }, - "events": { - "items": { - "$ref": "#/definitions/sportsbook.Event" - }, - "type": "array" + "not_liked_count": { + "description": "Number of ratings that did not like the title.", + "example": 49, + "type": "integer" }, - "fetched_at": { - "type": "string" + "rating_count": { + "description": "Number of ratings behind the score.", + "example": 363, + "type": "integer" }, - "league": { - "example": "MLB", + "review_count": { + "description": "Number of reviews behind the score.", + "example": 363, + "type": "integer" + }, + "reviews_page_url": { + "description": "URL of the Rotten Tomatoes page that lists the reviews behind this score.", + "example": "https://www.rottentomatoes.com/m/inception/reviews", "type": "string" }, - "league_id": { + "score": { + "description": "Score as a whole-number percentage.", + "example": 87, + "type": "integer" + }, + "score_percent": { + "description": "Score as text with a percent sign, such as `87%`.", + "example": "87%", "type": "string" }, - "source_url": { + "score_type": { + "description": "Audience group the score covers, such as `ALL` or `VERIFIED`.", + "example": "ALL", "type": "string" }, - "sport": { - "example": "Baseball", + "sentiment": { + "description": "Overall sentiment of the score, such as `POSITIVE`.", + "example": "POSITIVE", "type": "string" }, - "subcategory_id": { + "title": { + "description": "Name of the score, such as `Tomatometer` or `Popcornmeter`.", + "example": "Tomatometer", "type": "string" } }, "type": "object" }, - "sportsbook.League": { + "rottentomatoes.SearchMovie": { "properties": { - "has_live_offers": { + "cast": { + "description": "Names of the leading cast, separated by commas.", + "example": "Leonardo DiCaprio,Joseph Gordon-Levitt,Elliot Page", + "type": "string" + }, + "certified_fresh": { + "description": "Whether the title is Certified Fresh.", + "example": true, "type": "boolean" }, - "id": { - "example": "104557", + "end_year": { + "description": "Last year of the title's run, as shown on the search row.", "type": "string" }, - "name": { - "example": "ITF Doubles - Muttenz (M)", + "image_url": { + "description": "URL of the poster image.", "type": "string" }, - "slug": { - "example": "itf-m25-muttenz%2C-doubles", + "path": { + "description": "Rotten Tomatoes path of the title page, such as `/m/inception`.", + "example": "/m/inception", "type": "string" - } - }, - "type": "object" - }, - "sportsbook.LeagueEvent": { - "properties": { - "id": { - "example": "34522271", + }, + "release_year": { + "description": "Release year of the title, such as `2010`.", + "example": "2010", "type": "string" }, - "name": { - "example": "CHI White Sox @ DET Tigers", + "start_year": { + "description": "First year of the title's run, as shown on the search row.", "type": "string" }, - "participant_type": { - "example": "TwoTeam", + "title": { + "description": "Title name as shown on the search row.", + "example": "Inception", "type": "string" }, - "participants": { - "items": { - "$ref": "#/definitions/sportsbook.Participant" - }, - "type": "array" + "tomatometer_score": { + "description": "Tomatometer critics score, as a percentage.", + "example": 87, + "type": "integer" }, - "start_time": { + "tomatometer_sentiment": { + "description": "Tomatometer sentiment, such as `POSITIVE`.", + "example": "POSITIVE", "type": "string" }, - "status": { - "example": "NOT_STARTED", + "url": { + "description": "Rotten Tomatoes page URL of the title.", + "example": "https://www.rottentomatoes.com/m/inception", "type": "string" - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" } }, "type": "object" }, - "sportsbook.LeagueEventsResponse": { + "rottentomatoes.SearchResponse": { "properties": { - "count": { + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:46:16Z", + "type": "string" + }, + "limit": { + "description": "Maximum number of results requested.", + "example": 10, "type": "integer" }, - "events": { + "query": { + "description": "Query that was run.", + "example": "inception", + "type": "string" + }, + "results": { + "description": "Titles matching the query.", "items": { - "$ref": "#/definitions/sportsbook.LeagueEvent" + "$ref": "#/definitions/rottentomatoes.SearchMovie" }, "type": "array" }, - "fetched_at": { + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.rottentomatoes.com/search?search=inception", + "type": "string" + } + }, + "type": "object" + }, + "rottentomatoes.SeasonEpisode": { + "properties": { + "air_date": { + "description": "Date the episode first aired, such as `2008-01-20`.", + "example": "2008-01-20", "type": "string" }, - "league": { - "example": "MLB", + "description": { + "description": "Short synopsis of the episode.", "type": "string" }, - "league_id": { - "example": "84240", + "episode_number": { + "description": "Episode number within the season.", + "example": "1", "type": "string" }, - "source_url": { + "path": { + "description": "Rotten Tomatoes path of the episode page, such as `/tv/breaking_bad/s01/e01`.", + "example": "/tv/breaking_bad/s01/e01", "type": "string" }, - "sport": { - "example": "Baseball", + "title": { + "description": "Title of the episode, as Rotten Tomatoes shows it.", + "example": "Pilot", "type": "string" }, - "sport_id": { - "example": "7", + "url": { + "description": "Rotten Tomatoes page URL of the episode.", + "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01/e01", "type": "string" } }, "type": "object" }, - "sportsbook.LeaguesResponse": { + "rottentomatoes.SeasonResponse": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" + "audience_score": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.Score" + } + ], + "description": "Popcornmeter audience score of the season." }, - "sports": { + "cast": { + "description": "People in the cast of the season.", "items": { - "$ref": "#/definitions/sportsbook.Sport" + "$ref": "#/definitions/rottentomatoes.Person" }, "type": "array" - } - }, - "type": "object" - }, - "sportsbook.LiveEvent": { - "properties": { - "categories": { + }, + "critics_score": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.Score" + } + ], + "description": "Tomatometer critics score of the season." + }, + "description": { + "description": "Short synopsis of the season.", + "type": "string" + }, + "directors": { + "description": "Directors of the season.", "items": { - "$ref": "#/definitions/sportsbook.MarketCategory" + "$ref": "#/definitions/rottentomatoes.Person" }, "type": "array" }, - "id": { - "example": "34525244", + "ems_id": { + "description": "Rotten Tomatoes' own unique id of the season.", + "example": "71374db9-1350-30fa-b30a-d3f623bbdfc4", "type": "string" }, - "league_id": { - "example": "104557", - "type": "string" + "episode_count": { + "description": "Number of episodes in the season.", + "example": 7, + "type": "integer" }, - "markets": { + "episodes": { + "description": "Episodes of the season.", "items": { - "$ref": "#/definitions/sportsbook.Market" + "$ref": "#/definitions/rottentomatoes.SeasonEpisode" }, "type": "array" }, - "name": { - "example": "A. Casanova / Parizzia vs N. Hipfl / C. Mueller", + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:46:16Z", "type": "string" }, - "participants": { + "genres": { + "description": "Genres of the season.", + "example": [ + "Crime" + ], "items": { - "$ref": "#/definitions/sportsbook.Participant" + "type": "string" }, "type": "array" }, - "period": { - "example": "2nd", + "image_url": { + "description": "URL of the season image.", "type": "string" }, - "score": { - "$ref": "#/definitions/sportsbook.LiveScore" - }, - "sport_id": { - "example": "6", + "lifecycle": { + "description": "Airing status, such as `NOT_AIRING`.", + "example": "NOT_AIRING", "type": "string" }, - "start_time": { + "media_type": { + "description": "Kind of title, such as `TvSeason`.", + "example": "TvSeason", "type": "string" }, - "status": { - "example": "STARTED", + "parent_series": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.SeriesSummary" + } + ], + "description": "Series the season belongs to." + }, + "path": { + "description": "Rotten Tomatoes path of the season page, such as `/tv/breaking_bad/s01`.", + "example": "/tv/breaking_bad/s01", "type": "string" }, - "subcategories": { + "producers": { + "description": "Producers of the season.", "items": { - "$ref": "#/definitions/sportsbook.MarketSubcategory" + "$ref": "#/definitions/rottentomatoes.Person" }, "type": "array" - } - }, - "type": "object" - }, - "sportsbook.LiveResponse": { - "properties": { - "count": { - "type": "integer" }, - "events": { - "items": { - "$ref": "#/definitions/sportsbook.LiveEvent" - }, - "type": "array" + "public_page_derived": { + "description": "Always `true`: the data comes from publicly visible Rotten Tomatoes pages.", + "example": true, + "type": "boolean" }, - "fetched_at": { + "release_date": { + "description": "Date the season premiered, such as `2008-01-20`.", + "example": "2008-01-20", "type": "string" }, + "season_number": { + "description": "Number of the season within the series.", + "example": 1, + "type": "integer" + }, "source_url": { + "description": "URL the data was read from.", + "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01", "type": "string" - } - }, - "type": "object" - }, - "sportsbook.LiveScore": { - "properties": { - "current": { - "$ref": "#/definitions/sportsbook.LiveScoreLine" }, - "on_serve": { - "example": "away", + "title": { + "description": "Season title, such as `Season 1`.", + "example": "Season 1", "type": "string" }, - "periods": { - "items": { - "$ref": "#/definitions/sportsbook.LiveScorePeriod" - }, - "type": "array" + "url": { + "description": "Rotten Tomatoes page URL of the season.", + "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01", + "type": "string" } }, "type": "object" }, - "sportsbook.LiveScoreLine": { + "rottentomatoes.SeasonSummary": { "properties": { - "away": { - "example": "30", + "ems_id": { + "description": "Rotten Tomatoes' own unique id of the season.", + "example": "71374db9-1350-30fa-b30a-d3f623bbdfc4", "type": "string" }, - "home": { - "example": "30", - "type": "string" - } - }, - "type": "object" - }, - "sportsbook.LiveScorePeriod": { - "properties": { - "away": { - "example": "30", + "path": { + "description": "Rotten Tomatoes path of the season page, such as `/tv/breaking_bad/s01`.", + "example": "/tv/breaking_bad/s01", "type": "string" }, - "home": { - "example": "30", + "season_number": { + "description": "Number of the season within the series.", + "example": 1, + "type": "integer" + }, + "title": { + "description": "Season title, such as `Season 1`.", + "example": "Season 1", "type": "string" }, - "name": { - "example": "1", + "url": { + "description": "Rotten Tomatoes page URL of the season.", + "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01", "type": "string" } }, "type": "object" }, - "sportsbook.Market": { + "rottentomatoes.SeriesResponse": { "properties": { - "id": { - "type": "string" + "audience_score": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.Score" + } + ], + "description": "Popcornmeter audience score of the series." }, - "selections": { + "cast": { + "description": "People in the cast of the series.", "items": { - "$ref": "#/definitions/sportsbook.Selection" + "$ref": "#/definitions/rottentomatoes.Person" }, "type": "array" }, - "subcategory_id": { - "example": "4519", + "content_rating": { + "description": "Content rating of the series, such as `TV-14`.", + "example": "TV-14", "type": "string" }, - "type": { - "example": "Moneyline", - "type": "string" - } - }, - "type": "object" - }, - "sportsbook.MarketCategory": { - "properties": { - "id": { - "example": "488", - "type": "string" + "critics_score": { + "allOf": [ + { + "$ref": "#/definitions/rottentomatoes.Score" + } + ], + "description": "Tomatometer critics score of the series." }, - "name": { - "example": "Match Lines", + "description": { + "description": "Short synopsis of the series.", "type": "string" - } - }, - "type": "object" - }, - "sportsbook.MarketSubcategory": { - "properties": { - "category_id": { - "example": "488", + }, + "directors": { + "description": "Directors of the series.", + "items": { + "$ref": "#/definitions/rottentomatoes.Person" + }, + "type": "array" + }, + "ems_id": { + "description": "Rotten Tomatoes' own unique id of the series.", + "example": "6a74def4-dc62-319e-ae3d-360dcf360244", "type": "string" }, - "id": { - "example": "6364", + "end_date": { + "description": "Date the series ended, such as `2013-09-29`.", + "example": "2013-09-29", "type": "string" }, - "name": { - "example": "Moneyline", + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-06-07T14:46:16Z", "type": "string" - } - }, - "type": "object" - }, - "sportsbook.Odds": { - "properties": { - "american": { - "example": "+130", + }, + "genres": { + "description": "Genres of the series.", + "example": [ + "Crime" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "image_url": { + "description": "URL of the series image.", "type": "string" }, - "decimal": { - "example": "2.30", + "lifecycle": { + "description": "Airing status of the series, such as `NOT_AIRING`.", + "example": "NOT_AIRING", "type": "string" }, - "fractional": { - "example": "13/10", + "media_type": { + "description": "Kind of title, such as `TvSeries`.", + "example": "TvSeries", "type": "string" - } - }, - "type": "object" - }, - "sportsbook.OddsResponse": { - "properties": { - "count": { + }, + "number_of_seasons": { + "description": "Number of seasons of the series.", + "example": 5, "type": "integer" }, - "events": { + "path": { + "description": "Rotten Tomatoes path of the series page, such as `/tv/breaking_bad`.", + "example": "/tv/breaking_bad", + "type": "string" + }, + "producers": { + "description": "Producers of the series.", "items": { - "$ref": "#/definitions/sportsbook.Event" + "$ref": "#/definitions/rottentomatoes.Person" }, "type": "array" }, - "fetched_at": { - "type": "string" + "public_page_derived": { + "description": "Always `true`: the data comes from publicly visible Rotten Tomatoes pages.", + "example": true, + "type": "boolean" }, - "league": { - "example": "NFL", + "seasons": { + "description": "Seasons of the series, each with a link to its page.", + "items": { + "$ref": "#/definitions/rottentomatoes.TVSeason" + }, + "type": "array" + }, + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.rottentomatoes.com/tv/breaking_bad", "type": "string" }, - "league_id": { + "start_date": { + "description": "Date the series first aired, such as `2008-01-20`.", + "example": "2008-01-20", "type": "string" }, - "source_url": { + "title": { + "description": "Title of the series, as Rotten Tomatoes shows it.", + "example": "Breaking Bad", "type": "string" }, - "sport": { - "example": "Football", + "url": { + "description": "Rotten Tomatoes page URL of the series.", + "example": "https://www.rottentomatoes.com/tv/breaking_bad", "type": "string" } }, "type": "object" }, - "sportsbook.Participant": { + "rottentomatoes.SeriesSummary": { "properties": { - "id": { + "ems_id": { + "description": "Rotten Tomatoes' own unique id of the series.", + "example": "6a74def4-dc62-319e-ae3d-360dcf360244", "type": "string" }, - "name": { - "example": "BUF Bills", + "path": { + "description": "Rotten Tomatoes path of the series page, such as `/tv/breaking_bad`.", + "example": "/tv/breaking_bad", "type": "string" }, - "role": { - "example": "Home", + "title": { + "description": "Title of the series, as Rotten Tomatoes shows it.", + "example": "Breaking Bad", + "type": "string" + }, + "url": { + "description": "Rotten Tomatoes page URL of the series.", + "example": "https://www.rottentomatoes.com/tv/breaking_bad", "type": "string" } }, "type": "object" }, - "sportsbook.QuickLink": { + "rottentomatoes.Sitemap": { "properties": { - "league_id": { - "example": "84240", + "family": { + "example": "movie", "type": "string" }, - "name": { - "example": "MLB", + "index": { + "example": 0, + "type": "integer" + }, + "last_modified": { + "example": "2025-11-12", "type": "string" }, - "path": { - "example": "/leagues/baseball/mlb", + "name": { + "example": "movie_0", "type": "string" }, - "sport_id": { - "example": "7", + "url": { + "example": "https://www.rottentomatoes.com/sitemaps/movie_0.xml", "type": "string" } }, "type": "object" }, - "sportsbook.QuickLinksResponse": { + "rottentomatoes.SitemapIndexResponse": { "properties": { - "count": { - "type": "integer" - }, "fetched_at": { + "example": "2026-09-26T10:00:00Z", "type": "string" }, - "links": { + "public_page_derived": { + "example": true, + "type": "boolean" + }, + "sitemaps": { "items": { - "$ref": "#/definitions/sportsbook.QuickLink" + "$ref": "#/definitions/rottentomatoes.Sitemap" }, "type": "array" }, "source_url": { + "example": "https://www.rottentomatoes.com/sitemaps/sitemap.xml", "type": "string" } }, "type": "object" }, - "sportsbook.Selection": { + "rottentomatoes.SitemapURL": { "properties": { - "label": { - "example": "CAR Panthers", + "last_modified": { + "example": "2025-11-12", "type": "string" }, - "odds": { - "$ref": "#/definitions/sportsbook.Odds" - }, - "outcome_type": { - "example": "Away", + "url": { + "example": "https://www.rottentomatoes.com/m/inception", "type": "string" - }, - "points": { - "example": 3, - "type": "number" } }, "type": "object" }, - "sportsbook.Sport": { + "rottentomatoes.SitemapURLResponse": { "properties": { - "id": { - "example": "6", + "fetched_at": { + "example": "2026-09-26T10:00:00Z", "type": "string" }, - "leagues": { - "items": { - "$ref": "#/definitions/sportsbook.League" - }, - "type": "array" + "has_more": { + "example": true, + "type": "boolean" + }, + "limit": { + "example": 100, + "type": "integer" }, "name": { - "example": "Tennis", + "example": "movie_0", "type": "string" }, - "slug": { - "example": "tennis", + "offset": { + "example": 0, + "type": "integer" + }, + "public_page_derived": { + "example": true, + "type": "boolean" + }, + "source_url": { + "example": "https://www.rottentomatoes.com/sitemaps/movie_0.xml", "type": "string" + }, + "total": { + "example": 16750, + "type": "integer" + }, + "urls": { + "items": { + "$ref": "#/definitions/rottentomatoes.SitemapURL" + }, + "type": "array" } }, "type": "object" }, - "sportsbook.Team": { + "rottentomatoes.TVSeason": { "properties": { - "id": { - "example": "18454", - "type": "string" - }, "name": { - "example": "Arizona Cardinals", + "description": "Season name, such as `Season 1`.", + "example": "Season 1", "type": "string" }, - "slug": { - "example": "arizona-cardinals", + "path": { + "description": "Rotten Tomatoes path of the season page, such as `/tv/breaking_bad/s01`.", + "example": "/tv/breaking_bad/s01", "type": "string" }, "url": { - "example": "https://sportsbook.draftkings.com/teams/football/arizona-cardinals-odds-18454", + "description": "Rotten Tomatoes page URL of the season.", + "example": "https://www.rottentomatoes.com/tv/breaking_bad/s01", "type": "string" } }, "type": "object" }, - "sportsbook.TeamDetailResponse": { + "rottentomatoes.WatchOffer": { "properties": { - "abbreviation": { - "example": "ARI", - "type": "string" - }, - "city": { - "example": "Arizona", - "type": "string" - }, - "fetched_at": { + "availability_date": { + "description": "Date the offer becomes available, such as `2026-12-07`.", "type": "string" }, - "id": { - "example": "18454", + "license": { + "description": "How the title is offered: `stream`, `rent`, `purchase`, `buy tickets` or\n`preorder`.", + "enum": [ + "stream", + "rent", + "purchase", + "buy tickets", + "preorder" + ], "type": "string" }, - "leagues": { - "items": { - "$ref": "#/definitions/sportsbook.TeamLeagueRef" - }, - "type": "array" - }, "name": { - "example": "ARI Cardinals", + "description": "Provider name, such as `Fandango`.", "type": "string" }, - "primary_color": { - "example": "#97233F", - "type": "string" + "preorder": { + "description": "Whether the offer is a preorder.", + "type": "boolean" }, - "secondary_color": { - "example": "#000000", + "price": { + "description": "Price of the offer as the provider lists it, without a currency symbol.", "type": "string" }, - "short_name": { - "example": "Cardinals", + "provider_id": { + "description": "Provider id when the upstream reports one.", "type": "string" }, - "source_url": { + "quality": { + "description": "Video quality of the offer, such as `UHD` or `HD`.", "type": "string" }, - "sport": { - "example": "football", + "title": { + "description": "Title as the offer lists it.", "type": "string" }, - "sport_id": { - "example": "3", + "url": { + "description": "Public provider page for the offer.", "type": "string" } }, "type": "object" }, - "sportsbook.TeamLeagueRef": { + "rottentomatoes.browseFiltersResponseDoc": { "properties": { - "id": { - "example": "88808", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "slug": { - "example": "nfl", + "data": { + "$ref": "#/definitions/rottentomatoes.BrowseFiltersResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sportsbook.TeamsResponse": { + "rottentomatoes.browseResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "league": { - "example": "nfl", - "type": "string" - }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/rottentomatoes.BrowseResponse" }, - "sport": { - "example": "football", + "msg": { + "example": "OK", "type": "string" - }, - "teams": { - "items": { - "$ref": "#/definitions/sportsbook.Team" - }, - "type": "array" } }, "type": "object" }, - "sportsbook.eventContextResponseDoc": { + "rottentomatoes.criticPublicationsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sportsbook.EventContextResponse" + "$ref": "#/definitions/rottentomatoes.CriticPublicationsResponse" }, "msg": { "example": "OK", @@ -211919,14 +217797,14 @@ }, "type": "object" }, - "sportsbook.eventMarketsResponseDoc": { + "rottentomatoes.criticResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sportsbook.EventMarketsResponse" + "$ref": "#/definitions/rottentomatoes.CriticResponse" }, "msg": { "example": "OK", @@ -211935,14 +217813,14 @@ }, "type": "object" }, - "sportsbook.eventResponseDoc": { + "rottentomatoes.criticsAuthorsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sportsbook.EventResponse" + "$ref": "#/definitions/rottentomatoes.CriticsAuthorsResponse" }, "msg": { "example": "OK", @@ -211951,14 +217829,14 @@ }, "type": "object" }, - "sportsbook.featuredLeaguesResponseDoc": { + "rottentomatoes.editorialContentResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sportsbook.FeaturedLeaguesResponse" + "$ref": "#/definitions/rottentomatoes.EditorialContentResponse" }, "msg": { "example": "OK", @@ -211967,14 +217845,14 @@ }, "type": "object" }, - "sportsbook.futuresResponseDoc": { + "rottentomatoes.editorialContentTypesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sportsbook.FuturesResponse" + "$ref": "#/definitions/rottentomatoes.EditorialContentTypesResponse" }, "msg": { "example": "OK", @@ -211983,14 +217861,14 @@ }, "type": "object" }, - "sportsbook.leagueEventsResponseDoc": { + "rottentomatoes.editorialDetailResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sportsbook.LeagueEventsResponse" + "$ref": "#/definitions/rottentomatoes.EditorialDetailResponse" }, "msg": { "example": "OK", @@ -211999,14 +217877,14 @@ }, "type": "object" }, - "sportsbook.leaguesResponseDoc": { + "rottentomatoes.editorialSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sportsbook.LeaguesResponse" + "$ref": "#/definitions/rottentomatoes.EditorialSearchResponse" }, "msg": { "example": "OK", @@ -212015,14 +217893,14 @@ }, "type": "object" }, - "sportsbook.liveResponseDoc": { + "rottentomatoes.editorialSectionResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sportsbook.LiveResponse" + "$ref": "#/definitions/rottentomatoes.EditorialSectionResponse" }, "msg": { "example": "OK", @@ -212031,14 +217909,14 @@ }, "type": "object" }, - "sportsbook.oddsResponseDoc": { + "rottentomatoes.editorialTaxonomiesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sportsbook.OddsResponse" + "$ref": "#/definitions/rottentomatoes.EditorialTaxonomiesResponse" }, "msg": { "example": "OK", @@ -212047,14 +217925,14 @@ }, "type": "object" }, - "sportsbook.quickLinksResponseDoc": { + "rottentomatoes.editorialTermsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sportsbook.QuickLinksResponse" + "$ref": "#/definitions/rottentomatoes.EditorialTermsResponse" }, "msg": { "example": "OK", @@ -212063,14 +217941,14 @@ }, "type": "object" }, - "sportsbook.teamResponseDoc": { + "rottentomatoes.episodeResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sportsbook.TeamDetailResponse" + "$ref": "#/definitions/rottentomatoes.EpisodeResponse" }, "msg": { "example": "OK", @@ -212079,14 +217957,14 @@ }, "type": "object" }, - "sportsbook.teamsResponseDoc": { + "rottentomatoes.movieResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/sportsbook.TeamsResponse" + "$ref": "#/definitions/rottentomatoes.MovieResponse" }, "msg": { "example": "OK", @@ -212095,554 +217973,492 @@ }, "type": "object" }, - "sportskeeda.AuthorResponse": { + "rottentomatoes.movieVideosResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "role": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "slug": { - "type": "string" + "data": { + "$ref": "#/definitions/rottentomatoes.MovieVideosResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sportskeeda.CalendarEvent": { + "rottentomatoes.moviesBatchResponseDoc": { "properties": { - "branding_logo": { - "type": "string" - }, - "branding_text": { - "type": "string" - }, - "branding_text_color": { - "type": "string" - }, - "card_background": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "card_background_color": { - "type": "string" + "data": { + "$ref": "#/definitions/rottentomatoes.BatchMoviesResponse" }, - "description": { + "msg": { + "example": "OK", "type": "string" - }, - "duration_days": { + } + }, + "type": "object" + }, + "rottentomatoes.personResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "end_date": { - "example": "2026-10-17", - "type": "string" - }, - "image_links": { - "type": "string" + "data": { + "$ref": "#/definitions/rottentomatoes.PersonResponse" }, - "invert_text_color": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "rottentomatoes.publicationResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "month": { - "example": "2026-09", - "type": "string" + "data": { + "$ref": "#/definitions/rottentomatoes.PublicationResponse" }, - "month_label": { - "example": "September 2026", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "rottentomatoes.publicationReviewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/rottentomatoes.ReviewsResponse" }, - "open_link": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "rottentomatoes.reviewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "sport": { - "type": "string" + "data": { + "$ref": "#/definitions/rottentomatoes.ReviewsResponse" }, - "start_date": { - "example": "2026-09-27", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "rottentomatoes.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "venue": { - "type": "string" + "data": { + "$ref": "#/definitions/rottentomatoes.SearchResponse" }, - "videos": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sportskeeda.CollegeBasketballConference": { + "rottentomatoes.seasonResponseDoc": { "properties": { - "abbr": { - "type": "string" - }, - "id": { + "code": { + "example": 200, "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/rottentomatoes.SeasonResponse" }, - "slug": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sportskeeda.CollegeBasketballDivision": { + "rottentomatoes.seriesResponseDoc": { "properties": { - "id": { + "code": { + "example": 200, "type": "integer" }, - "name": { + "data": { + "$ref": "#/definitions/rottentomatoes.SeriesResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sportskeeda.CollegeBasketballLeader": { + "rottentomatoes.sitemapIndexResponseDoc": { "properties": { - "player_id": { + "code": { + "example": 200, "type": "integer" }, - "player_name": { - "type": "string" + "data": { + "$ref": "#/definitions/rottentomatoes.SitemapIndexResponse" }, - "player_slug": { + "msg": { + "example": "OK", "type": "string" - }, - "value": { - "type": "integer" } }, "type": "object" }, - "sportskeeda.CollegeBasketballLocation": { + "rottentomatoes.sitemapURLResponseDoc": { "properties": { - "abbreviation": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "name": { + "data": { + "$ref": "#/definitions/rottentomatoes.SitemapURLResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sportskeeda.CollegeBasketballScheduleGame": { + "rover.ProfileResponse": { "properties": { - "away_team": { - "$ref": "#/definitions/sportskeeda.CollegeBasketballTeam" - }, - "end_date": { + "bio": { "type": "string" }, - "event_id": { - "type": "integer" - }, - "event_type_id": { - "type": "integer" + "city": { + "type": "string" }, - "has_score": { + "is_star_sitter": { "type": "boolean" }, - "home_team": { - "$ref": "#/definitions/sportskeeda.CollegeBasketballTeam" - }, - "is_tba": { - "type": "boolean" + "name": { + "type": "string" }, - "loser_high": { - "$ref": "#/definitions/sportskeeda.CollegeBasketballLeader" + "neighborhood": { + "type": "string" }, - "start_date": { + "price_unit": { "type": "string" }, - "status": { + "profile_image": { "type": "string" }, - "tv_stations": { + "rating": { + "type": "number" + }, + "repeat_client_count": { + "type": "integer" + }, + "review_count": { + "type": "integer" + }, + "reviews": { "items": { - "type": "string" + "$ref": "#/definitions/rover.ReviewExcerpt" }, "type": "array" }, - "venue": { - "$ref": "#/definitions/sportskeeda.CollegeBasketballVenue" + "services": { + "items": { + "$ref": "#/definitions/rover.ServiceOffering" + }, + "type": "array" }, - "winner_high": { - "$ref": "#/definitions/sportskeeda.CollegeBasketballLeader" + "slug": { + "type": "string" + }, + "starting_price": { + "type": "number" + }, + "state": { + "type": "string" + }, + "url": { + "type": "string" + }, + "years_experience": { + "type": "integer" } }, "type": "object" }, - "sportskeeda.CollegeBasketballScheduleOptionsResponse": { + "rover.ReviewExcerpt": { "properties": { - "conference_filter_supported": { - "type": "boolean" - }, "date": { "type": "string" }, - "date_end": { - "type": "string" + "rating": { + "type": "number" }, - "date_start": { + "reviewer": { "type": "string" }, - "season": { - "type": "integer" - }, - "season_name": { + "service_type": { "type": "string" }, - "seasons": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "slug": { + "text": { "type": "string" } }, "type": "object" }, - "sportskeeda.CollegeBasketballScheduleResponse": { + "rover.SearchResponse": { "properties": { - "date": { + "location": { "type": "string" }, - "games": { + "page": { + "type": "integer" + }, + "page_count": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "service_type": { + "type": "string" + }, + "sitters": { "items": { - "$ref": "#/definitions/sportskeeda.CollegeBasketballScheduleGame" + "$ref": "#/definitions/rover.SitterSummary" }, "type": "array" }, - "season": { + "total_count": { "type": "integer" - }, - "season_name": { + } + }, + "type": "object" + }, + "rover.ServiceOffering": { + "properties": { + "name": { "type": "string" }, - "status": { - "enum": [ - "ok", - "no_games" - ], - "type": "string" + "price": { + "type": "number" }, - "updated_at": { + "unit": { "type": "string" } }, "type": "object" }, - "sportskeeda.CollegeBasketballTeam": { + "rover.SitterSummary": { "properties": { - "abbr": { + "city": { "type": "string" }, - "conference": { - "$ref": "#/definitions/sportskeeda.CollegeBasketballConference" - }, - "division": { - "$ref": "#/definitions/sportskeeda.CollegeBasketballDivision" + "description": { + "type": "string" }, - "is_winner": { + "is_star_sitter": { "type": "boolean" }, - "location": { + "name": { "type": "string" }, - "location_type": { + "neighborhood": { "type": "string" }, - "nickname": { + "price_unit": { "type": "string" }, - "score": { + "profile_image": { + "type": "string" + }, + "profile_url": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "repeat_client_count": { "type": "integer" }, - "team_id": { + "review_count": { "type": "integer" }, - "team_name": { + "service_type": { "type": "string" }, - "team_slug": { - "type": "string" - } - }, - "type": "object" - }, - "sportskeeda.CollegeBasketballVenue": { - "properties": { - "city": { + "slug": { "type": "string" }, - "country": { - "$ref": "#/definitions/sportskeeda.CollegeBasketballLocation" + "starting_price": { + "type": "number" }, - "name": { + "state": { "type": "string" }, - "state": { - "$ref": "#/definitions/sportskeeda.CollegeBasketballLocation" + "years_experience": { + "type": "integer" + }, + "zip": { + "type": "string" } }, "type": "object" }, - "sportskeeda.CricketCommentaryResponse": { + "rover.TrainerEducation": { "properties": { - "commentary": { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - "count": { - "type": "integer" - }, - "cursor": { - "type": "string" - }, - "language": { + "organization": { "type": "string" }, - "slug": { + "text": { "type": "string" } }, "type": "object" }, - "sportskeeda.CricketMatchResponse": { + "rover.TrainerProfileResponse": { "properties": { - "commentary": { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - "competition_id": {}, - "datetime": { - "type": "integer" - }, - "day": { - "type": "string" - }, - "game_format": { - "type": "integer" - }, - "game_type": { - "type": "string" - }, - "in_play": { - "type": "boolean" - }, - "info": { + "availability_details": { "type": "string" }, - "innings": { + "behaviors": { "items": { - "additionalProperties": true, - "type": "object" + "type": "string" }, "type": "array" }, - "match_id": { - "type": "string" - }, - "match_number": {}, - "match_number_with_format": { - "type": "string" - }, - "match_status": { - "type": "string" - }, - "now_batting": { - "additionalProperties": true, - "type": "object" - }, - "now_bowling": { - "additionalProperties": true, - "type": "object" - }, - "score_strip": { + "education": { "items": { - "additionalProperties": true, - "type": "object" + "$ref": "#/definitions/rover.TrainerEducation" }, "type": "array" }, - "series": { + "experience_details": { "type": "string" }, - "series_keeda_slug": { + "headline": { "type": "string" }, - "session": { + "methodology": { "type": "string" }, - "short_title": { + "methodology_details": { "type": "string" }, - "slug": { + "name": { "type": "string" }, - "squad": { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - "title": { + "profile_image": { "type": "string" }, - "toss_decision": { - "type": "string" + "rating": { + "type": "number" }, - "toss_won_by": { - "type": "string" + "repeat_client_count": { + "type": "integer" }, - "updated_at": { + "review_count": { "type": "integer" }, - "venue": { - "type": "string" - } - }, - "type": "object" - }, - "sportskeeda.DataTable": { - "properties": { - "columns": { + "skills": { "items": { "type": "string" }, "type": "array" }, - "name": { + "slug": { "type": "string" }, - "rows": { - "items": { - "items": { - "$ref": "#/definitions/sportskeeda.TableCell" - }, - "type": "array" - }, - "type": "array" - } - }, - "type": "object" - }, - "sportskeeda.DepthChartPosition": { - "properties": { - "name": { + "url": { "type": "string" }, - "players": { - "items": { - "$ref": "#/definitions/sportskeeda.PageView" - }, - "type": "array" + "years_of_training": { + "type": "integer" } }, "type": "object" }, - "sportskeeda.DepthChartResponse": { + "rover.TrainerSearchResponse": { "properties": { - "slug": { + "location": { "type": "string" }, - "teams": { + "trainers": { "items": { - "$ref": "#/definitions/sportskeeda.DepthChartTeam" + "$ref": "#/definitions/rover.TrainerSummary" }, "type": "array" - }, - "title": { - "type": "string" } }, "type": "object" }, - "sportskeeda.DepthChartTeam": { + "rover.TrainerSummary": { "properties": { - "name": { - "type": "string" - }, - "positions": { + "behaviors": { "items": { - "$ref": "#/definitions/sportskeeda.DepthChartPosition" + "type": "string" }, "type": "array" }, - "slug": { + "city": { "type": "string" - } - }, - "type": "object" - }, - "sportskeeda.DraftPick": { - "properties": { - "college": { + }, + "experience_details": { "type": "string" }, - "name": { + "headline": { "type": "string" }, - "overall_pick": { + "methodology": { "type": "string" }, - "position": { + "name": { "type": "string" }, - "round": { + "price_unit": { "type": "string" }, - "round_pick": { + "profile_image": { "type": "string" }, - "team_code": { + "profile_url": { "type": "string" }, - "year": { + "rating": { + "type": "number" + }, + "repeat_client_count": { "type": "integer" - } - }, - "type": "object" - }, - "sportskeeda.DraftPicksOptionsResponse": { - "properties": { - "positions": { - "items": { - "type": "string" - }, - "type": "array" }, - "rounds": { + "review_count": { + "type": "integer" + }, + "skills": { "items": { "type": "string" }, @@ -212651,156 +218467,110 @@ "slug": { "type": "string" }, - "team": { + "starting_price": { + "type": "number" + }, + "state": { "type": "string" }, - "total": { + "years_experience": { "type": "integer" }, - "years": { - "items": { - "type": "integer" - }, - "type": "array" + "zip": { + "type": "string" } }, "type": "object" }, - "sportskeeda.DraftPicksResponse": { + "rover.profileResponseDoc": { "properties": { - "has_more": { - "type": "boolean" - }, - "page": { - "type": "integer" - }, - "per_page": { + "code": { + "example": 200, "type": "integer" }, - "picks": { - "items": { - "$ref": "#/definitions/sportskeeda.DraftPick" - }, - "type": "array" - }, - "position": { - "type": "string" - }, - "q": { - "type": "string" + "data": { + "$ref": "#/definitions/rover.ProfileResponse" }, - "round": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "rover.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "slug": { - "type": "string" + "data": { + "$ref": "#/definitions/rover.SearchResponse" }, - "team": { + "msg": { + "example": "OK", "type": "string" - }, - "total": { - "type": "integer" - }, - "year": { - "type": "integer" } }, "type": "object" }, - "sportskeeda.EventCalendarOptionsResponse": { + "rover.trainerProfileResponseDoc": { "properties": { - "regions": { - "items": { - "$ref": "#/definitions/sportskeeda.EventCalendarRegionOptions" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/rover.TrainerProfileResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "sportskeeda.EventCalendarRegionOptions": { + "rover.trainerSearchResponseDoc": { "properties": { - "months": { - "example": [ - "2026-09", - "2026-10", - "2026-11", - "2026-12" - ], - "items": { - "type": "string" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "region": { - "enum": [ - "us", - "india" - ], - "type": "string" + "data": { + "$ref": "#/definitions/rover.TrainerSearchResponse" }, - "sports": { - "items": { - "type": "string" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "sportskeeda.EventCalendarResponse": { + "rte.AuthorResponse": { "properties": { - "end_date": { - "type": "string" - }, - "events": { - "items": { - "$ref": "#/definitions/sportskeeda.CalendarEvent" - }, - "type": "array" - }, - "months": { + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "region": { - "enum": [ - "us", - "india" - ], + "image_url": { "type": "string" }, - "sport": { + "name": { "type": "string" }, - "start_date": { + "role": { "type": "string" }, - "total": { - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "sportskeeda.FeedItem": { + "salon.AuthorArticle": { "properties": { - "age": { - "type": "string" - }, - "category": { - "type": "string" - }, - "image": { - "type": "string" - }, - "section": { - "type": "string" - }, - "slug": { - "type": "string" - }, "title": { "type": "string" }, @@ -212810,1069 +218580,1117 @@ }, "type": "object" }, - "sportskeeda.FeedResponse": { + "salon.AuthorResponse": { "properties": { - "items": { + "articles": { "items": { - "$ref": "#/definitions/sportskeeda.FeedItem" + "$ref": "#/definitions/salon.AuthorArticle" }, "type": "array" }, - "next_page": { - "type": "integer" - }, - "page": { - "type": "integer" - }, - "slug": { - "type": "string" - }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "sportskeeda.FootballDataResponse": { - "properties": { - "event": { - "type": "string" - }, - "event_name": { - "type": "string" - }, - "matchday": { + "bio": { "type": "string" }, - "matchday_name": { + "image_url": { "type": "string" }, - "matches": { - "items": { - "$ref": "#/definitions/sportskeeda.FootballFixture" - }, - "type": "array" - }, - "next_matchday": { + "job_title": { "type": "string" }, - "previous_matchday": { + "name": { "type": "string" }, - "standings": { + "same_as": { "items": { - "$ref": "#/definitions/sportskeeda.FootballStanding" + "type": "string" }, "type": "array" }, - "status": { - "enum": [ - "ok", - "no_matches" - ], + "url": { "type": "string" } }, "type": "object" }, - "sportskeeda.FootballEvent": { + "samsclub.CategoryBreadcrumbEntry": { "properties": { - "logo": { + "id": { + "example": "100001", "type": "string" }, "name": { + "example": "All Departments", "type": "string" }, - "slug": { + "url": { + "example": "https://www.samsclub.com/all-departments", "type": "string" } }, "type": "object" }, - "sportskeeda.FootballFixture": { + "samsclub.CategoryProduct": { "properties": { - "away": { - "type": "string" - }, - "away_score": { + "availability": { + "example": "IN_STOCK", "type": "string" }, - "away_slug": { + "brand": { + "example": "Tide", "type": "string" }, - "datetime": { + "currency_code": { + "example": "USD", "type": "string" }, - "home": { - "type": "string" + "current_price": { + "example": 19.98, + "type": "number" }, - "home_score": { + "image_url": { "type": "string" }, - "home_slug": { + "item_id": { + "example": "13610014888", "type": "string" }, - "id": { + "name": { + "example": "Tide Power PODS + Ultra OXI Laundry Detergent Pacs, 72 ct.", "type": "string" }, - "postponed": { + "on_sale": { + "example": true, "type": "boolean" }, - "result": { + "rating": { + "example": 4.8, + "type": "number" + }, + "regular_price": { + "example": 24.98, + "type": "number" + }, + "review_count": { + "example": 4122, + "type": "integer" + }, + "savings_amount": { + "example": 5, + "type": "number" + }, + "type": { + "example": "Laundry Detergents", "type": "string" }, - "slug": { + "unit_price_text": { + "example": "$0.28/ea", "type": "string" }, - "status": { + "url": { + "example": "https://www.samsclub.com/ip/Tide-Power-PODS-Ultra-OXI-Laundry-Detergent-Pacs-72-ct/13610014888", "type": "string" } }, "type": "object" }, - "sportskeeda.FootballMatchday": { + "samsclub.CategoryResponse": { "properties": { - "end": { + "breadcrumb": { + "items": { + "$ref": "#/definitions/samsclub.CategoryBreadcrumbEntry" + }, + "type": "array" + }, + "category_id": { + "example": "15660127", "type": "string" }, - "match_count": { + "count": { + "example": 47, "type": "integer" }, - "name": { + "fetched_at": { "type": "string" }, - "selected": { + "has_more": { + "example": true, "type": "boolean" }, - "slug": { + "max_page": { + "example": 16, + "type": "integer" + }, + "page": { + "example": 1, + "type": "integer" + }, + "products": { + "items": { + "$ref": "#/definitions/samsclub.CategoryProduct" + }, + "type": "array" + }, + "source_url": { "type": "string" }, - "start": { + "title": { + "example": "Results for \"Savings\"", "type": "string" + }, + "total_count": { + "example": 687, + "type": "integer" } }, "type": "object" }, - "sportskeeda.FootballOptionsResponse": { + "samsclub.ContentResponse": { "properties": { - "event": { - "type": "string" - }, - "events": { + "breadcrumb": { "items": { - "$ref": "#/definitions/sportskeeda.FootballEvent" + "$ref": "#/definitions/samsclub.CategoryBreadcrumbEntry" }, "type": "array" }, - "matchdays": { + "category_links": { "items": { - "$ref": "#/definitions/sportskeeda.FootballMatchday" + "$ref": "#/definitions/samsclub.DepartmentLink" }, "type": "array" - } - }, - "type": "object" - }, - "sportskeeda.FootballStanding": { - "properties": { - "draws": { - "type": "integer" }, - "goal_difference": { + "fetched_at": { "type": "string" }, - "goals_against": { + "id": { + "example": "16050279", "type": "string" }, - "goals_for": { - "type": "string" + "shelves": { + "items": { + "$ref": "#/definitions/samsclub.RelatedShelf" + }, + "type": "array" }, - "group": { + "source_url": { "type": "string" }, - "league": { + "title": { + "example": "Savings Center", "type": "string" - }, - "losses": { - "type": "integer" - }, - "played": { - "type": "integer" - }, - "points": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "qualification": { + } + }, + "type": "object" + }, + "samsclub.Department": { + "properties": { + "id": { + "example": "1444", "type": "string" }, - "team": { + "image_url": { "type": "string" }, - "team_code": { + "name": { + "example": "Grocery", "type": "string" }, - "team_slug": { - "type": "string" + "subcategories": { + "items": { + "$ref": "#/definitions/samsclub.DepartmentLink" + }, + "type": "array" }, - "wins": { - "type": "integer" - } - }, - "type": "object" - }, - "sportskeeda.GuessingGameClue": { - "properties": { - "image": { + "type": { + "example": "browse", "type": "string" }, - "order": { - "type": "integer" - }, - "text": { + "url": { + "example": "https://www.samsclub.com/browse/1444", "type": "string" } }, "type": "object" }, - "sportskeeda.GuessingGameDataResponse": { + "samsclub.DepartmentLink": { "properties": { - "date": { + "id": { + "example": "1444", "type": "string" }, - "game_name": { + "name": { + "example": "Grocery", "type": "string" }, - "game_slug": { + "type": { + "example": "browse", "type": "string" }, - "instances": { - "items": { - "$ref": "#/definitions/sportskeeda.GuessingGameInstance" - }, - "type": "array" - }, - "slug": { + "url": { + "example": "https://www.samsclub.com/browse/1444", "type": "string" } }, "type": "object" }, - "sportskeeda.GuessingGameEntitiesResponse": { + "samsclub.DepartmentsResponse": { "properties": { - "entities": { + "departments": { "items": { - "$ref": "#/definitions/sportskeeda.GuessingGameEntity" + "$ref": "#/definitions/samsclub.Department" }, "type": "array" }, - "game_slug": { + "fetched_at": { "type": "string" }, - "slug": { + "source_url": { "type": "string" } }, "type": "object" }, - "sportskeeda.GuessingGameEntity": { + "samsclub.Product": { "properties": { - "age_at_death": { - "type": "integer" - }, - "alias1": { + "availability": { + "example": "IN_STOCK", "type": "string" }, "brand": { + "example": "Tide", "type": "string" }, - "conference": { - "type": "string" - }, - "date_of_birth": { - "type": "string" - }, - "dead": { - "type": "string" + "category": { + "example": [ + "All Departments", + "Household Essentials", + "Laundry Supplies", + "Laundry Detergent" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "division": { + "currency_code": { + "example": "USD", "type": "string" }, - "experience": { - "type": "string" + "current_price": { + "example": 19.98, + "type": "number" }, - "gender": { + "description": { "type": "string" }, - "hall_of_fame": { - "type": "string" + "highlights": { + "items": { + "type": "string" + }, + "type": "array" }, - "height_in_inches": { - "type": "integer" + "images": { + "items": { + "type": "string" + }, + "type": "array" }, - "id": { + "item_id": { + "example": "13610014888", "type": "string" }, - "identifier": { + "item_number": { + "example": "990471947", "type": "string" }, "name": { + "example": "Tide Power PODS + Ultra OXI Laundry Detergent Pacs, 72 ct.", "type": "string" }, - "position": { - "type": "string" + "on_sale": { + "example": true, + "type": "boolean" }, - "team": { - "type": "string" + "rating": { + "example": 4.8, + "type": "number" }, - "touchdowns": { - "type": "integer" + "regular_price": { + "example": 24.98, + "type": "number" }, - "uniform": { + "review_count": { + "example": 4122, "type": "integer" }, - "wrestlemania_appearances": { - "type": "integer" - } - }, - "type": "object" - }, - "sportskeeda.GuessingGameInstance": { - "properties": { - "clues": { - "items": { - "$ref": "#/definitions/sportskeeda.GuessingGameClue" - }, - "type": "array" + "savings_amount": { + "example": 5, + "type": "number" }, - "date": { + "unit_price": { + "example": 0.28, + "type": "number" + }, + "unit_price_text": { + "example": "$0.28/ea", "type": "string" }, - "id": { + "upc": { + "example": "030772073438", "type": "string" }, - "original_image": { + "url": { + "example": "https://www.samsclub.com/ip/13610014888", "type": "string" } }, "type": "object" }, - "sportskeeda.GuessingGameOption": { + "samsclub.RelatedItem": { "properties": { - "game_slug": { + "availability": { + "example": "IN_STOCK", + "type": "string" + }, + "currency_code": { + "example": "USD", + "type": "string" + }, + "image_url": { + "type": "string" + }, + "item_id": { + "example": "13576901230", "type": "string" }, "name": { + "example": "Tide PODS Laundry Detergent Pacs, Spring Meadow, 156 ct.", "type": "string" }, - "slug": { + "price": { + "example": 29.98, + "type": "number" + }, + "rating": { + "example": 4.8184, + "type": "number" + }, + "review_count": { + "example": 13701, + "type": "integer" + }, + "url": { + "example": "https://www.samsclub.com/ip/Tide-PODS-Laundry-Detergent-Pacs-Spring-Meadow-156-ct/13576901230", "type": "string" } }, "type": "object" }, - "sportskeeda.GuessingGamesResponse": { + "samsclub.RelatedItemsResponse": { "properties": { - "games": { + "fetched_at": { + "type": "string" + }, + "item_id": { + "example": "13610014888", + "type": "string" + }, + "shelves": { "items": { - "$ref": "#/definitions/sportskeeda.GuessingGameOption" + "$ref": "#/definitions/samsclub.RelatedShelf" }, "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "sportskeeda.NBAQueriesResponse": { + "samsclub.RelatedShelf": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/sportskeeda.NBAQueryCategory" - }, - "type": "array" - }, - "category": { - "enum": [ - "player-stat", - "player-vs-team" - ], - "type": "string" - }, "items": { "items": { - "$ref": "#/definitions/sportskeeda.NBAQueryItem" + "$ref": "#/definitions/samsclub.RelatedItem" }, "type": "array" }, - "limit": { + "title": { + "example": "Members also considered", + "type": "string" + } + }, + "type": "object" + }, + "samsclub.categoryResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "offset": { - "type": "integer" + "data": { + "$ref": "#/definitions/samsclub.CategoryResponse" }, - "total": { - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "sportskeeda.NBAQueryCategory": { + "samsclub.contentResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "id": { - "enum": [ - "player-stat", - "player-vs-team" - ], - "type": "string" + "data": { + "$ref": "#/definitions/samsclub.ContentResponse" }, - "name": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sportskeeda.NBAQueryItem": { + "samsclub.departmentsResponseDoc": { "properties": { - "category": { - "enum": [ - "player-stat", - "player-vs-team" - ], - "type": "string" - }, - "slug": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "subject": { - "type": "string" + "data": { + "$ref": "#/definitions/samsclub.DepartmentsResponse" }, - "title": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sportskeeda.NavigationGroup": { + "samsclub.productResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/sportskeeda.SectionLink" - }, - "type": "array" - }, - "name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "slug": { - "type": "string" + "data": { + "$ref": "#/definitions/samsclub.Product" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sportskeeda.PageFilter": { + "samsclub.relatedItemsResponseDoc": { "properties": { - "label": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/samsclub.RelatedItemsResponse" }, - "values": { - "items": { - "$ref": "#/definitions/sportskeeda.PageFilterValue" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "sportskeeda.PageFilterValue": { + "sbsnews.AuthorArticle": { "properties": { - "name": { + "published_at": { "type": "string" }, - "selected": { - "type": "boolean" + "summary": { + "type": "string" }, - "slug": { + "title": { "type": "string" }, - "value": { + "url": { "type": "string" } }, "type": "object" }, - "sportskeeda.PageGroup": { + "sbsnews.AuthorResponse": { "properties": { - "items": { + "articles": { "items": { - "$ref": "#/definitions/sportskeeda.PageView" + "$ref": "#/definitions/sbsnews.AuthorArticle" }, "type": "array" }, - "name": { + "biography": { + "type": "string" + }, + "has_next_page": { + "type": "boolean" + }, + "headshot_url": { "type": "string" - } - }, - "type": "object" - }, - "sportskeeda.PageMenu": { - "properties": { - "groups": { - "items": { - "$ref": "#/definitions/sportskeeda.PageGroup" - }, - "type": "array" }, "name": { "type": "string" + }, + "page": { + "type": "integer" + }, + "url": { + "type": "string" } }, "type": "object" }, - "sportskeeda.PageOptionsResponse": { + "sciencealert.AuthorResponse": { "properties": { - "filters": { + "articles": { "items": { - "$ref": "#/definitions/sportskeeda.PageFilter" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "menus": { + "biography": { "items": { - "$ref": "#/definitions/sportskeeda.PageMenu" + "type": "string" }, "type": "array" }, - "slug": { + "has_next_page": { + "type": "boolean" + }, + "image_url": { "type": "string" }, - "sports": { - "items": { - "$ref": "#/definitions/sportskeeda.PageView" - }, - "type": "array" + "name": { + "type": "string" }, - "tabs": { - "items": { - "$ref": "#/definitions/sportskeeda.PageView" - }, - "type": "array" + "page": { + "type": "integer" }, - "title": { + "slug": { "type": "string" }, - "views": { + "social_links": { "items": { - "$ref": "#/definitions/sportskeeda.PageView" + "$ref": "#/definitions/sciencealert.AuthorSocialLink" }, "type": "array" + }, + "url": { + "type": "string" } }, "type": "object" }, - "sportskeeda.PageView": { + "sciencealert.AuthorSocialLink": { "properties": { - "name": { + "platform": { "type": "string" }, - "slug": { + "url": { "type": "string" } }, "type": "object" }, - "sportskeeda.PlayerSeasonStats": { + "scmp.ArticleResponse": { "properties": { - "event_type": { - "type": "string" - }, - "games_played": { - "type": "integer" - }, - "games_started": { - "type": "integer" + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "metrics": { - "additionalProperties": {}, - "type": "object" + "content_locked": { + "type": "boolean" }, - "name": { + "description": { "type": "string" }, - "season": { - "type": "integer" + "image_url": { + "type": "string" }, - "team": { - "$ref": "#/definitions/sportskeeda.PlayerStatsTeam" - } - }, - "type": "object" - }, - "sportskeeda.PlayerStatsResponse": { - "properties": { - "event_types": { + "paragraphs": { "items": { - "$ref": "#/definitions/sportskeeda.PageFilterValue" + "type": "string" }, "type": "array" }, - "records": { + "paywall_types": { "items": { - "$ref": "#/definitions/sportskeeda.PlayerSeasonStats" + "type": "string" }, "type": "array" }, - "selected_event_type": { + "published_at": { "type": "string" }, - "slug": { + "section": { "type": "string" }, - "sport": { + "title": { "type": "string" }, - "stat_fields": { + "topics": { "items": { "type": "string" }, "type": "array" }, - "title": { + "updated_at": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "sportskeeda.PlayerStatsTeam": { + "scmp.AuthorResponse": { "properties": { - "abbreviation": { + "articles": { + "items": { + "$ref": "#/definitions/scmp.HeadlineItem" + }, + "type": "array" + }, + "bio": { "type": "string" }, - "id": { - "type": "integer" + "expertise": { + "items": { + "type": "string" + }, + "type": "array" }, - "image_url": { + "headshot_url": { + "type": "string" + }, + "languages": { + "items": { + "type": "string" + }, + "type": "array" + }, + "location": { "type": "string" }, "name": { "type": "string" }, - "slug": { + "role": { + "type": "string" + }, + "social_links": { + "items": { + "$ref": "#/definitions/scmp.AuthorSocialLink" + }, + "type": "array" + }, + "url": { "type": "string" } }, "type": "object" }, - "sportskeeda.ProfileFact": { + "scmp.AuthorSocialLink": { "properties": { - "name": { + "type": { "type": "string" }, - "value": { + "url": { "type": "string" } }, "type": "object" }, - "sportskeeda.ProfileResponse": { + "scmp.HeadlineItem": { "properties": { - "description": { + "author": { "type": "string" }, - "facts": { - "items": { - "$ref": "#/definitions/sportskeeda.ProfileFact" - }, - "type": "array" + "image_url": { + "type": "string" }, - "kind": { + "published_at": { "type": "string" }, - "name": { + "summary": { "type": "string" }, - "news": { - "items": { - "$ref": "#/definitions/sportskeeda.FeedItem" - }, - "type": "array" + "title": { + "type": "string" }, - "slug": { + "url": { "type": "string" } }, "type": "object" }, - "sportskeeda.QuizCategoriesResponse": { + "scmp.HeadlinesResponse": { "properties": { - "categories": { + "items": { "items": { - "$ref": "#/definitions/sportskeeda.QuizCategory" + "$ref": "#/definitions/scmp.HeadlineItem" }, "type": "array" + }, + "section": { + "type": "string" } }, "type": "object" }, - "sportskeeda.QuizCategory": { + "scmp.Section": { "properties": { "name": { "type": "string" }, + "parent_name": { + "type": "string" + }, + "parent_slug": { + "type": "string" + }, "slug": { "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "sportskeeda.QuizChoice": { + "scmp.SectionsResponse": { "properties": { - "text": { - "type": "string" + "sections": { + "items": { + "$ref": "#/definitions/scmp.Section" + }, + "type": "array" } }, "type": "object" }, - "sportskeeda.QuizQuestion": { + "scmp.articleResponseDoc": { "properties": { - "image": { - "type": "string" - }, - "number": { + "code": { + "example": 200, "type": "integer" }, - "options": { - "items": { - "$ref": "#/definitions/sportskeeda.QuizChoice" - }, - "type": "array" + "data": { + "$ref": "#/definitions/scmp.ArticleResponse" }, - "text": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "scmp.authorResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "type": { + "data": { + "$ref": "#/definitions/scmp.AuthorResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sportskeeda.QuizResponse": { + "scmp.headlinesResponseDoc": { "properties": { - "category": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "questions": { - "items": { - "$ref": "#/definitions/sportskeeda.QuizQuestion" - }, - "type": "array" + "data": { + "$ref": "#/definitions/scmp.HeadlinesResponse" }, - "slug": { + "msg": { + "example": "OK", "type": "string" - }, - "time_limit_seconds": { + } + }, + "type": "object" + }, + "scmp.sectionsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/scmp.SectionsResponse" }, - "version_id": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sportskeeda.QuizSummary": { + "screenrant.AuthorResponse": { "properties": { - "image": { + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" + }, + "biography": { "type": "string" }, - "slug": { + "image_url": { "type": "string" }, - "time_limit": { + "name": { "type": "string" }, + "social_links": { + "items": { + "$ref": "#/definitions/screenrant.AuthorSocialLink" + }, + "type": "array" + }, "title": { "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "sportskeeda.QuizzesResponse": { + "screenrant.AuthorSocialLink": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/sportskeeda.QuizSummary" - }, - "type": "array" - }, - "slug": { + "type": { "type": "string" }, - "title": { + "url": { "type": "string" } }, "type": "object" }, - "sportskeeda.SalaryBreakdown": { + "seatgeek.CategoriesResult": { "properties": { - "base_salary": { - "type": "integer" - }, - "guaranteed": { - "type": "integer" - }, - "option_bonus": { - "type": "integer" - }, - "other_bonus": { - "type": "integer" - }, - "per_game_bonus": { - "type": "integer" - }, - "roster_bonus": { - "type": "integer" - }, - "signing_bonus": { - "type": "integer" + "categories": { + "items": { + "$ref": "#/definitions/seatgeek.Category" + }, + "type": "array" }, - "workout_bonus": { + "total": { "type": "integer" } }, "type": "object" }, - "sportskeeda.SalaryCapPlayer": { + "seatgeek.Category": { "properties": { - "breakdown": { - "$ref": "#/definitions/sportskeeda.SalaryBreakdown" - }, - "cap_number": { - "type": "integer" - }, - "cut_post_june_1_cap_saving": { - "type": "integer" - }, - "cut_post_june_1_dead_money": { + "event_count": { "type": "integer" }, - "cut_pre_june_1_cap_saving": { + "id": { + "example": 1010100, "type": "integer" }, - "cut_pre_june_1_dead_money": { - "type": "integer" + "image": { + "type": "string" }, - "extension_cap_saving": { - "type": "integer" + "is_visible": { + "type": "boolean" }, "name": { + "example": "MLB", "type": "string" }, - "restructure_cap_saving": { - "type": "integer" - }, - "slug": { + "next_event_datetime_utc": { "type": "string" }, - "trade_post_june_1_cap_saving": { + "parent_id": { + "example": 1010000, "type": "integer" }, - "trade_post_june_1_dead_money": { + "performer_count": { "type": "integer" }, - "trade_pre_june_1_cap_saving": { + "rank": { "type": "integer" }, - "trade_pre_june_1_dead_money": { - "type": "integer" + "seo_event_type": { + "type": "string" + }, + "short_name": { + "type": "string" + }, + "slug": { + "example": "mlb", + "type": "string" } }, "type": "object" }, - "sportskeeda.SalaryCapResponse": { + "seatgeek.CitiesResult": { "properties": { - "active_cap_spend": { - "type": "integer" - }, - "cap_space": { - "type": "integer" - }, - "dead_money": { - "type": "integer" - }, - "order": { - "type": "string" - }, - "players": { + "cities": { "items": { - "$ref": "#/definitions/sportskeeda.SalaryCapPlayer" + "$ref": "#/definitions/seatgeek.City" }, "type": "array" }, - "q": { - "type": "string" - }, - "salary_cap": { - "type": "integer" - }, - "season": { - "type": "integer" - }, - "slug": { - "type": "string" - }, - "sort_by": { - "type": "string" - }, - "status": { - "enum": [ - "ok", - "no_data" - ], - "type": "string" - }, - "team": { - "type": "string" - }, "total": { "type": "integer" } }, "type": "object" }, - "sportskeeda.ScheduleMatch": { + "seatgeek.City": { "properties": { - "competition": { + "country": { + "example": "United States", "type": "string" }, - "date_time": { - "type": "string" + "id": { + "example": 72, + "type": "integer" }, - "result": { - "type": "string" + "lat": { + "type": "number" }, - "score_1": { - "type": "string" + "lon": { + "type": "number" }, - "score_2": { + "name": { + "example": "Albuquerque", "type": "string" }, - "slug": { + "radius": { + "example": "20mi", "type": "string" }, - "status": { - "type": "string" + "show_concerts": { + "type": "boolean" }, - "team_1": { - "type": "string" + "show_sports": { + "type": "boolean" }, - "team_2": { + "show_theater": { + "type": "boolean" + }, + "slug": { + "example": "albuquerque", "type": "string" }, - "venue": { + "state": { + "example": "New Mexico", "type": "string" } }, "type": "object" }, - "sportskeeda.SectionLink": { + "seatgeek.Event": { "properties": { - "external": { + "date_tbd": { "type": "boolean" }, - "name": { + "datetime_local": { "type": "string" }, - "slug": { + "datetime_utc": { "type": "string" }, - "url": { + "description": { "type": "string" - } - }, - "type": "object" - }, - "sportskeeda.SectionsResponse": { - "properties": { - "navigation": { - "items": { - "$ref": "#/definitions/sportskeeda.NavigationGroup" - }, - "type": "array" }, - "sections": { + "id": { + "example": 17695775, + "type": "integer" + }, + "is_open": { + "type": "boolean" + }, + "performers": { "items": { - "$ref": "#/definitions/sportskeeda.SportSection" + "$ref": "#/definitions/seatgeek.EventPerformer" }, "type": "array" - } - }, - "type": "object" - }, - "sportskeeda.SitemapItem": { - "properties": { - "last_modified": { + }, + "popularity": { + "type": "number" + }, + "score": { + "type": "number" + }, + "season_stage": { "type": "string" }, - "slug": { + "short_title": { "type": "string" }, - "url": { + "stats": { + "$ref": "#/definitions/seatgeek.EventStats" + }, + "status": { "type": "string" - } - }, - "type": "object" - }, - "sportskeeda.SitemapItemsResponse": { - "properties": { - "has_more": { - "type": "boolean" }, - "items": { + "taxonomies": { "items": { - "$ref": "#/definitions/sportskeeda.SitemapItem" + "$ref": "#/definitions/seatgeek.Taxonomy" }, "type": "array" }, - "limit": { - "type": "integer" + "time_tbd": { + "type": "boolean" }, - "offset": { - "type": "integer" + "title": { + "type": "string" }, - "sitemap_url": { + "type": { + "example": "mlb", "type": "string" }, - "slug": { + "url": { "type": "string" }, - "total": { - "type": "integer" + "venue": { + "$ref": "#/definitions/seatgeek.Venue" } }, "type": "object" }, - "sportskeeda.SitemapSource": { + "seatgeek.EventPerformer": { "properties": { - "last_modified": { + "home_team": { + "type": "boolean" + }, + "id": { + "type": "integer" + }, + "image": { "type": "string" }, "name": { "type": "string" }, - "slug": { + "primary": { + "type": "boolean" + }, + "type": { + "example": "mlb", "type": "string" }, "url": { @@ -213881,115 +219699,152 @@ }, "type": "object" }, - "sportskeeda.SitemapsResponse": { + "seatgeek.EventStats": { "properties": { - "sources": { - "items": { - "$ref": "#/definitions/sportskeeda.SitemapSource" - }, - "type": "array" + "average_price": { + "type": "number" + }, + "highest_price": { + "type": "number" + }, + "listing_count": { + "type": "integer" + }, + "lowest_price": { + "type": "number" + }, + "lowest_sg_base_price": { + "type": "number" + }, + "median_price": { + "type": "number" + }, + "ticket_count": { + "type": "integer" } }, "type": "object" }, - "sportskeeda.SportSection": { + "seatgeek.EventsByCategoryResult": { "properties": { - "last_modified": { - "type": "string" + "events": { + "items": { + "$ref": "#/definitions/seatgeek.Event" + }, + "type": "array" }, - "slug": { - "type": "string" + "page": { + "type": "integer" }, - "url": { - "type": "string" + "per_page": { + "type": "integer" + }, + "taxonomy_id": { + "type": "integer" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "sportskeeda.StandingsOptionsResponse": { + "seatgeek.EventsNearResult": { "properties": { - "conferences": { + "events": { "items": { - "$ref": "#/definitions/sportskeeda.PageView" + "$ref": "#/definitions/seatgeek.Event" }, "type": "array" }, - "seasons": { - "items": { - "type": "integer" - }, - "type": "array" + "geolocation": { + "$ref": "#/definitions/seatgeek.GeoResolved" }, - "slug": { - "type": "string" + "page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "sportskeeda.TableCell": { + "seatgeek.GeoLocation": { "properties": { - "slug": { - "type": "string" + "lat": { + "type": "number" }, - "text": { - "type": "string" + "lon": { + "type": "number" } }, "type": "object" }, - "sportskeeda.TablesResponse": { + "seatgeek.GeoResolved": { "properties": { - "matches": { - "items": { - "$ref": "#/definitions/sportskeeda.ScheduleMatch" - }, - "type": "array" - }, - "slug": { + "city": { "type": "string" }, - "status": { + "country": { "type": "string" }, - "tables": { - "items": { - "$ref": "#/definitions/sportskeeda.DataTable" - }, - "type": "array" + "display_name": { + "example": "Albuquerque, NM", + "type": "string" }, - "title": { + "range": { + "example": "50mi", "type": "string" }, - "views": { - "items": { - "$ref": "#/definitions/sportskeeda.PageView" - }, - "type": "array" + "state": { + "type": "string" } }, "type": "object" }, - "sportskeeda.TaxonomyResult": { + "seatgeek.Performer": { "properties": { + "event_count": { + "type": "integer" + }, + "has_upcoming_events": { + "type": "boolean" + }, + "home_venue_id": { + "type": "integer" + }, "id": { - "type": "string" + "example": 1, + "type": "integer" }, "image": { "type": "string" }, - "path_slug": { + "name": { "type": "string" }, - "post_count": { + "num_upcoming_events": { "type": "integer" }, - "slug": { - "type": "string" + "popularity": { + "type": "number" }, - "taxonomy": { + "score": { + "type": "number" + }, + "short_name": { "type": "string" }, - "title": { + "taxonomies": { + "items": { + "$ref": "#/definitions/seatgeek.Taxonomy" + }, + "type": "array" + }, + "type": { + "example": "mlb", "type": "string" }, "url": { @@ -213998,98 +219853,91 @@ }, "type": "object" }, - "sportskeeda.TaxonomySearchResponse": { + "seatgeek.PerformerEventsResult": { "properties": { - "query": { - "type": "string" - }, - "results": { + "events": { "items": { - "$ref": "#/definitions/sportskeeda.TaxonomyResult" + "$ref": "#/definitions/seatgeek.Event" }, "type": "array" }, - "taxonomies": { - "items": { - "enum": [ - "category", - "event", - "team", - "player", - "wiki", - "wiki_tag" - ], - "type": "string" - }, - "type": "array" + "page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "performer_id": { + "type": "integer" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "sportskeeda.TopicBlock": { + "seatgeek.SearchEvent": { "properties": { - "alt": { - "type": "string" - }, - "caption": { - "type": "string" + "date_tbd": { + "type": "boolean" }, - "embed_url": { + "datetime_local": { "type": "string" }, - "image": { + "datetime_utc": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/sportskeeda.TopicListItem" - }, - "type": "array" - }, - "level": { + "id": { "type": "integer" }, - "links": { - "items": { - "$ref": "#/definitions/sportskeeda.TopicLink" - }, - "type": "array" + "lowest_price": { + "type": "number" }, - "ordered": { - "type": "boolean" + "short_title": { + "type": "string" }, - "rows": { - "items": { - "items": { - "$ref": "#/definitions/sportskeeda.TopicTableCell" - }, - "type": "array" - }, - "type": "array" + "time_tbd": { + "type": "boolean" }, - "text": { + "title": { "type": "string" }, "type": { - "enum": [ - "paragraph", - "heading", - "list", - "table", - "image", - "embed" - ], + "example": "mlb", + "type": "string" + }, + "url": { + "type": "string" + }, + "venue_location": { + "example": "Los Angeles, CA", + "type": "string" + }, + "venue_name": { "type": "string" } }, "type": "object" }, - "sportskeeda.TopicLink": { + "seatgeek.SearchPerformer": { "properties": { - "slug": { + "event_count": { + "type": "integer" + }, + "id": { + "type": "integer" + }, + "image": { "type": "string" }, - "text": { + "name": { + "type": "string" + }, + "short_name": { + "type": "string" + }, + "type": { + "example": "mlb", "type": "string" }, "url": { @@ -214098,47 +219946,48 @@ }, "type": "object" }, - "sportskeeda.TopicListItem": { + "seatgeek.SearchResult": { "properties": { - "links": { + "events": { "items": { - "$ref": "#/definitions/sportskeeda.TopicLink" + "$ref": "#/definitions/seatgeek.SearchEvent" }, "type": "array" }, - "text": { - "type": "string" - } - }, - "type": "object" - }, - "sportskeeda.TopicResponse": { - "properties": { - "author": { - "type": "string" - }, - "author_slug": { - "type": "string" - }, - "blocks": { + "performers": { "items": { - "$ref": "#/definitions/sportskeeda.TopicBlock" + "$ref": "#/definitions/seatgeek.SearchPerformer" }, "type": "array" }, - "last_modified": { + "query": { "type": "string" }, - "related": { + "venues": { "items": { - "$ref": "#/definitions/sportskeeda.FeedItem" + "$ref": "#/definitions/seatgeek.SearchVenue" }, "type": "array" + } + }, + "type": "object" + }, + "seatgeek.SearchVenue": { + "properties": { + "capacity": { + "type": "integer" }, - "slug": { + "display_location": { + "example": "Los Angeles, CA", "type": "string" }, - "title": { + "event_count": { + "type": "integer" + }, + "id": { + "type": "integer" + }, + "name": { "type": "string" }, "url": { @@ -214147,3834 +219996,3943 @@ }, "type": "object" }, - "sportskeeda.TopicTableCell": { + "seatgeek.Taxonomy": { "properties": { - "colspan": { + "id": { + "example": 1010100, "type": "integer" }, - "header": { - "type": "boolean" - }, - "links": { - "items": { - "$ref": "#/definitions/sportskeeda.TopicLink" - }, - "type": "array" + "name": { + "example": "mlb", + "type": "string" }, - "rowspan": { + "parent_id": { + "example": 1010000, "type": "integer" }, - "text": { + "seo_event_type": { "type": "string" } }, "type": "object" }, - "sportskeeda.TradeValuePlayer": { + "seatgeek.TrendingItem": { "properties": { - "name": { + "entity_id": { + "type": "integer" + }, + "entity_image_url": { "type": "string" }, - "position": { + "entity_name": { + "type": "string" + }, + "entity_type": { + "example": "event", + "type": "string" + }, + "entity_url": { + "type": "string" + }, + "event_datetime_local": { "type": "string" }, + "event_datetime_utc": { + "type": "string" + }, + "lowest_price": { + "type": "number" + }, "rank": { "type": "integer" }, - "slug": { + "rank_change": { + "type": "integer" + } + }, + "type": "object" + }, + "seatgeek.TrendingResult": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/seatgeek.TrendingItem" + }, + "type": "array" + }, + "list_display_name": { "type": "string" }, - "team": { + "list_id": { "type": "string" }, - "value": { + "list_type": { "type": "string" } }, "type": "object" }, - "sportskeeda.TradeValuesResponse": { + "seatgeek.Venue": { "properties": { - "limit": { + "capacity": { "type": "integer" }, - "mode": { + "city": { "type": "string" }, - "next_offset": { - "type": "integer" + "country": { + "example": "US", + "type": "string" }, - "offset": { + "display_location": { + "example": "Los Angeles, CA", + "type": "string" + }, + "has_upcoming_events": { + "type": "boolean" + }, + "id": { "type": "integer" }, - "players": { - "items": { - "$ref": "#/definitions/sportskeeda.TradeValuePlayer" - }, - "type": "array" + "location": { + "$ref": "#/definitions/seatgeek.GeoLocation" }, - "position": { + "name": { "type": "string" }, - "scoring": { + "num_upcoming_events": { + "type": "integer" + }, + "popularity": { + "type": "number" + }, + "postal_code": { "type": "string" }, + "score": { + "type": "number" + }, "slug": { "type": "string" }, - "superflex": { - "type": "boolean" + "state": { + "type": "string" }, - "total": { - "type": "integer" + "stats": { + "$ref": "#/definitions/seatgeek.VenueStats" }, - "updated_at": { + "timezone": { + "example": "America/New_York", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "sportskeeda.Transaction": { + "seatgeek.VenueEventsResult": { "properties": { - "date": { - "type": "string" - }, - "description": { - "type": "string" + "events": { + "items": { + "$ref": "#/definitions/seatgeek.Event" + }, + "type": "array" }, - "from_team": { - "$ref": "#/definitions/sportskeeda.TransactionParty" + "page": { + "type": "integer" }, - "id": { + "per_page": { "type": "integer" }, - "player": { - "$ref": "#/definitions/sportskeeda.TransactionPerson" + "total": { + "type": "integer" }, - "positions": { - "items": { - "$ref": "#/definitions/sportskeeda.TransactionPosition" - }, - "type": "array" + "venue_id": { + "type": "integer" + } + }, + "type": "object" + }, + "seatgeek.VenueStats": { + "properties": { + "event_count": { + "type": "integer" + } + }, + "type": "object" + }, + "seatgeek.categoriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "team": { - "$ref": "#/definitions/sportskeeda.TransactionParty" + "data": { + "$ref": "#/definitions/seatgeek.CategoriesResult" }, - "type": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sportskeeda.TransactionMonth": { + "seatgeek.citiesResponseDoc": { "properties": { "code": { - "type": "string" + "example": 200, + "type": "integer" }, - "label": { + "data": { + "$ref": "#/definitions/seatgeek.CitiesResult" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sportskeeda.TransactionParty": { + "seatgeek.eventResponseDoc": { "properties": { - "abbr": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/seatgeek.Event" }, - "slug": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sportskeeda.TransactionPerson": { + "seatgeek.eventsByCategoryResponseDoc": { "properties": { - "name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "slug": { + "data": { + "$ref": "#/definitions/seatgeek.EventsByCategoryResult" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sportskeeda.TransactionPosition": { + "seatgeek.eventsNearResponseDoc": { "properties": { - "abbr": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "name": { + "data": { + "$ref": "#/definitions/seatgeek.EventsNearResult" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sportskeeda.TransactionTeam": { + "seatgeek.performerEventsResponseDoc": { "properties": { - "name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "slug": { + "data": { + "$ref": "#/definitions/seatgeek.PerformerEventsResult" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sportskeeda.TransactionsOptionsResponse": { + "seatgeek.performerResponseDoc": { "properties": { - "months": { - "items": { - "$ref": "#/definitions/sportskeeda.TransactionMonth" - }, - "type": "array" - }, - "season": { + "code": { + "example": 200, "type": "integer" }, - "seasons": { - "items": { - "type": "integer" - }, - "type": "array" + "data": { + "$ref": "#/definitions/seatgeek.Performer" }, - "teams": { - "items": { - "$ref": "#/definitions/sportskeeda.TransactionTeam" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "sportskeeda.TransactionsResponse": { + "seatgeek.searchResponseDoc": { "properties": { - "has_more": { - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "items": { - "items": { - "$ref": "#/definitions/sportskeeda.Transaction" - }, - "type": "array" + "data": { + "$ref": "#/definitions/seatgeek.SearchResult" }, - "month": { + "msg": { + "example": "OK", "type": "string" - }, - "page": { - "type": "integer" - }, - "per_page": { + } + }, + "type": "object" + }, + "seatgeek.trendingResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "season": { - "type": "integer" + "data": { + "$ref": "#/definitions/seatgeek.TrendingResult" }, - "slug": { + "msg": { + "example": "OK", "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "sportskeeda.VideoItem": { + "seatgeek.venueEventsResponseDoc": { "properties": { - "channel": { - "type": "string" - }, - "duration": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "image": { - "type": "string" + "data": { + "$ref": "#/definitions/seatgeek.VenueEventsResult" }, - "slug": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "seatgeek.venueResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/seatgeek.Venue" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "sportskeeda.VideoResponse": { + "seattletimes.AuthorArticle": { "properties": { - "description": { + "category": { "type": "string" }, - "id": { + "image_url": { "type": "string" }, - "poster": { + "published_at": { "type": "string" }, - "slug": { + "summary": { "type": "string" }, - "stream_url": { + "title": { "type": "string" }, - "title": { + "url": { "type": "string" } }, "type": "object" }, - "sportskeeda.VideosResponse": { + "seattletimes.AuthorResponse": { "properties": { - "channels": { + "articles": { "items": { - "$ref": "#/definitions/sportskeeda.PageView" + "$ref": "#/definitions/seattletimes.AuthorArticle" }, "type": "array" }, - "items": { - "items": { - "$ref": "#/definitions/sportskeeda.VideoItem" - }, - "type": "array" + "bio": { + "type": "string" + }, + "email": { + "type": "string" + }, + "name": { + "type": "string" }, "slug": { "type": "string" }, - "title": { + "twitter": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "sportskeeda.WikiActivityResponse": { + "sec.CompanyIntelligenceResponse": { "properties": { - "activities": { + "degraded": { + "description": "Enrichment sources requested through `enrich` that could not be returned.", "items": { - "$ref": "#/definitions/sportskeeda.WikiContribution" + "type": "string" }, "type": "array" }, - "limit": { - "type": "integer" + "financial_snapshot": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "description": "Latest annual figures keyed by `revenue`, `net_income`, `total_assets`, `total_liabilities`, `stockholders_equity` and `operating_cash_flow`, in the reporting currency.", + "type": "object" }, - "page": { - "type": "integer" + "hiring": { + "allOf": [ + { + "$ref": "#/definitions/sec.HiringBlock" + } + ], + "description": "Open-roles summary from the company's careers board. Present only when `enrich` includes `hiring` and data was available." }, - "slug": { - "type": "string" + "latest_8k": { + "allOf": [ + { + "$ref": "#/definitions/sec.Filing" + } + ], + "description": "Most recent 8-K material event filing." }, - "sort": { - "type": "string" + "latest_annual_10k": { + "allOf": [ + { + "$ref": "#/definitions/sec.Filing" + } + ], + "description": "Most recent 10-K annual report filing." }, - "sort_by": { - "type": "string" + "latest_quarterly_10q": { + "allOf": [ + { + "$ref": "#/definitions/sec.Filing" + } + ], + "description": "Most recent 10-Q quarterly report filing." }, - "total_items": { - "type": "integer" + "market": { + "allOf": [ + { + "$ref": "#/definitions/sec.MarketBlock" + } + ], + "description": "Optional cross-source enrichment (present only when requested via ?enrich=\nand the source succeeded). Degraded lists sources that were requested but\nunavailable (missing key/provider, upstream failure, or timeout)." }, - "total_pages": { - "type": "integer" + "news": { + "description": "Recent news headlines about the company. Present only when `enrich` includes `news` and headlines were available.", + "items": { + "$ref": "#/definitions/sec.NewsItem" + }, + "type": "array" }, - "wiki": { - "type": "string" - } - }, - "type": "object" - }, - "sportskeeda.WikiArticleResponse": { - "properties": { - "authors": { + "profile": { + "allOf": [ + { + "$ref": "#/definitions/sec.CompanyProfile" + } + ], + "description": "Company identity block with CIK, ticker, name and industry classification." + }, + "recent_events": { + "description": "Up to five most recent 8-K material event filings.", "items": { - "type": "string" + "$ref": "#/definitions/sec.EventFiling" }, "type": "array" }, - "description": { - "type": "string" + "snapshot_fiscal_year": { + "description": "Fiscal year the `financial_snapshot` figures belong to.", + "type": "integer" }, - "image_url": { + "snapshot_period_end": { + "description": "Last day of the period covered by the `financial_snapshot`, in YYYY-MM-DD format.", "type": "string" }, - "paragraphs": { + "source_urls": { + "description": "URLs of the SEC data sets the response was built from.", "items": { "type": "string" }, "type": "array" + } + }, + "type": "object" + }, + "sec.CompanyMatch": { + "properties": { + "cik": { + "description": "Company's SEC Central Index Key (CIK) number.", + "example": 320193, + "type": "integer" }, - "published_at": { + "cik_padded": { + "description": "CIK number padded to 10 digits with a `CIK` prefix, as used in SEC data URLs.", + "example": "CIK0000320193", "type": "string" }, - "section": { + "name": { + "description": "Company name as registered with the SEC.", + "example": "Apple Inc.", "type": "string" }, - "slug": { + "ticker": { + "description": "Stock ticker symbol of the company.", + "example": "AAPL", "type": "string" + } + }, + "type": "object" + }, + "sec.CompanyProfile": { + "properties": { + "cik": { + "description": "Company's SEC Central Index Key (CIK) number.", + "type": "integer" }, - "title": { + "name": { + "description": "Company name as registered with the SEC.", "type": "string" }, - "updated_at": { + "sic": { + "description": "Standard Industrial Classification (SIC) code of the company.", "type": "string" }, - "wiki": { + "sic_description": { + "description": "Text description of the SIC industry code.", + "type": "string" + }, + "ticker": { + "description": "Primary stock ticker symbol of the company.", "type": "string" + }, + "tickers": { + "description": "All ticker symbols the company trades under.", + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "sportskeeda.WikiCategoriesResponse": { + "sec.CompanySearchResponse": { "properties": { - "categories": { + "count": { + "description": "Number of companies returned.", + "example": 1, + "type": "integer" + }, + "matches": { + "description": "Companies matching the query, exact ticker match first.", "items": { - "$ref": "#/definitions/sportskeeda.WikiCategory" + "$ref": "#/definitions/sec.CompanyMatch" }, "type": "array" }, - "wiki": { + "query": { + "description": "Ticker or company name that was searched.", + "example": "apple", + "type": "string" + }, + "source_url": { + "description": "URL the data was read from.", "type": "string" } }, "type": "object" }, - "sportskeeda.WikiCategory": { + "sec.EventFiling": { "properties": { - "children": { - "items": { - "$ref": "#/definitions/sportskeeda.WikiCategory" - }, - "type": "array" - }, - "path_slug": { + "accession_number": { + "description": "SEC accession number that uniquely identifies the 8-K filing.", "type": "string" }, - "sequence": { - "type": "integer" - }, - "slug": { + "filing_date": { + "description": "Date the 8-K was filed, in YYYY-MM-DD format.", "type": "string" }, - "taxonomy_id": { - "type": "integer" + "items": { + "description": "Item numbers the 8-K reports on, as EDGAR lists them.", + "type": "string" }, - "title": { + "url": { + "description": "Link to the filing's index page on sec.gov.", "type": "string" } }, "type": "object" }, - "sportskeeda.WikiContribution": { + "sec.Filing": { "properties": { - "author_name": { - "type": "string" - }, - "author_slug": { + "accession_number": { + "description": "SEC accession number that uniquely identifies the filing.", + "example": "0000320193-25-000081", "type": "string" }, - "bytes_added": { + "description": { + "description": "Short description of the main document, as EDGAR lists it.", "type": "string" }, - "bytes_removed": { + "filing_date": { + "description": "Date the filing was submitted to the SEC, in YYYY-MM-DD format.", + "example": "2025-10-31", "type": "string" }, - "created_at": { + "filing_index_url": { + "description": "Link to the filing's index page on sec.gov.", "type": "string" }, - "id": { - "type": "integer" - }, - "parent_wiki_name": { + "form": { + "description": "SEC form type of the filing, such as `10-K`, `10-Q` or `8-K`.", + "example": "10-K", "type": "string" }, - "parent_wiki_slug": { - "type": "string" + "is_xbrl": { + "description": "Whether the filing includes XBRL financial data.", + "type": "boolean" }, - "path_slug": { + "items": { + "description": "Item numbers the filing covers, as EDGAR lists them.", "type": "string" }, - "status": { + "primary_doc_url": { + "description": "Link to the filing's main document on sec.gov.", "type": "string" }, - "taxonomy_name": { + "primary_document": { + "description": "File name of the filing's main document.", "type": "string" }, - "updated_at": { + "report_date": { + "description": "Period end date the filing reports on, in YYYY-MM-DD format.", + "example": "2025-09-27", "type": "string" }, - "version_number": { + "size": { + "description": "Size of the filing's main document as EDGAR reports it.", "type": "integer" - }, - "words_added": { + } + }, + "type": "object" + }, + "sec.FilingDocument": { + "properties": { + "name": { + "description": "File name of the document in the filing.", "type": "string" }, - "words_removed": { + "url": { + "description": "Link to the document on sec.gov.", "type": "string" } }, "type": "object" }, - "sportskeeda.WikiContributorsResponse": { + "sec.FilingResponse": { "properties": { - "contributors": { - "items": { - "$ref": "#/definitions/sportskeeda.WikiContribution" - }, - "type": "array" + "accession_number": { + "description": "SEC accession number that uniquely identifies the filing.", + "example": "0000320193-25-000081", + "type": "string" }, - "limit": { + "cik": { + "description": "Company's SEC Central Index Key (CIK) number.", "type": "integer" }, - "page": { - "type": "integer" + "cik_padded": { + "description": "CIK number padded to 10 digits with a `CIK` prefix, as used in SEC data URLs.", + "type": "string" }, - "slug": { + "description": { + "description": "Short description of the main document, as EDGAR lists it.", "type": "string" }, - "sort": { + "documents": { + "description": "Files that make up the filing.", + "items": { + "$ref": "#/definitions/sec.FilingDocument" + }, + "type": "array" + }, + "filing_date": { + "description": "Date the filing was submitted to the SEC, in YYYY-MM-DD format.", + "example": "2025-10-31", "type": "string" }, - "sort_by": { + "filing_index_url": { + "description": "Link to the filing's index page on sec.gov.", "type": "string" }, - "total_items": { - "type": "integer" + "form": { + "description": "SEC form type of the filing, such as `10-K`, `10-Q` or `8-K`.", + "example": "10-K", + "type": "string" }, - "total_pages": { - "type": "integer" + "is_xbrl": { + "description": "Whether the filing includes XBRL financial data.", + "type": "boolean" }, - "wiki": { + "items": { + "description": "Item numbers the filing covers, as EDGAR lists them.", "type": "string" - } - }, - "type": "object" - }, - "sportskeeda.WikiIssue": { - "properties": { - "created_at": { + }, + "name": { + "description": "Company name as registered with the SEC.", "type": "string" }, - "creator_name": { + "primary_doc_url": { + "description": "Link to the filing's main document on sec.gov.", "type": "string" }, - "creator_slug": { + "primary_document": { + "description": "File name of the filing's main document.", "type": "string" }, - "description": { + "report_date": { + "description": "Period end date the filing reports on, in YYYY-MM-DD format.", + "example": "2025-09-27", "type": "string" }, - "id": { + "size": { + "description": "Size of the filing's main document as EDGAR reports it.", "type": "integer" }, - "last_opened_at": { + "source_url": { + "description": "URL the data was read from.", + "type": "string" + } + }, + "type": "object" + }, + "sec.FilingSection": { + "properties": { + "char_count": { + "description": "Length of the full section text before any truncation.", + "type": "integer" + }, + "item": { + "description": "Item number of the section in the filing, such as `1A` or `7`.", + "example": "1A", "type": "string" }, - "status": { + "text": { + "description": "Plain text of the section, cut off at the `max_chars` limit.", "type": "string" }, "title": { + "description": "Section heading, such as `Risk Factors`.", + "example": "Risk Factors", "type": "string" + }, + "truncated": { + "description": "Whether `text` was cut short because the section exceeded `max_chars`.", + "type": "boolean" } }, "type": "object" }, - "sportskeeda.WikiIssuesResponse": { + "sec.FilingSectionsResponse": { "properties": { - "closed_issues_count": { - "type": "integer" - }, - "issues": { - "items": { - "$ref": "#/definitions/sportskeeda.WikiIssue" - }, - "type": "array" - }, - "limit": { - "type": "integer" + "accession_number": { + "description": "SEC accession number that uniquely identifies the filing.", + "type": "string" }, - "opened_issues_count": { + "cik": { + "description": "Company's SEC Central Index Key (CIK) number.", "type": "integer" }, - "page": { + "count": { + "description": "Number of sections returned.", "type": "integer" }, - "slug": { + "document_url": { + "description": "Link to the filing document the sections were taken from.", "type": "string" }, - "status": { + "form": { + "description": "SEC form type of the filing, such as `10-K`.", "type": "string" }, - "total_pages": { - "type": "integer" + "sections": { + "description": "Item sections extracted from the filing, in item order.", + "items": { + "$ref": "#/definitions/sec.FilingSection" + }, + "type": "array" }, - "wiki": { + "source_url": { + "description": "URL the data was read from.", "type": "string" } }, "type": "object" }, - "sportskeeda.WikiOption": { + "sec.FinancialPeriod": { "properties": { - "name": { + "currency": { + "description": "ISO 4217 code of the currency the monetary lines are reported in.", + "example": "USD", "type": "string" }, - "slug": { + "end_date": { + "description": "Last day of the period, in YYYY-MM-DD format.", "type": "string" }, - "taxonomy_id": { + "fiscal_period": { + "description": "Fiscal period covered, such as `FY` for a full year.", + "example": "FY", "type": "string" }, - "taxonomy_slug": { + "fiscal_year": { + "description": "Fiscal year the period belongs to.", + "type": "integer" + }, + "form": { + "description": "SEC form type that reported the figures, such as `10-K`.", "type": "string" + }, + "lines": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "description": "Statement line values for the period, keyed by line name such as `revenue`.", + "type": "object" + }, + "ratios": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "description": "Ratios are computed, normalized metrics derived from the lines (margins,\ncurrent ratio, debt-to-equity, free cash flow, YoY revenue growth) — a\nvalue-add over the raw statement figures.", + "type": "object" } }, "type": "object" }, - "sportskeeda.WikiOptionsResponse": { + "sec.FinancialsResponse": { "properties": { - "wikis": { + "cik": { + "description": "Company's SEC Central Index Key (CIK) number.", + "type": "integer" + }, + "line_order": { + "description": "Statement line names in the order they appear on the statement.", "items": { - "$ref": "#/definitions/sportskeeda.WikiOption" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "sportskeeda.WikiPageItem": { - "properties": { - "id": { - "type": "string" }, - "image": { + "name": { + "description": "Company name as registered with the SEC.", "type": "string" }, - "meta": { - "$ref": "#/definitions/sportskeeda.WikiPageMeta" - }, - "path_slug": { + "period": { + "description": "Period type returned: `annual` or `quarterly`.", + "example": "annual", "type": "string" }, - "post_count": { - "type": "integer" - }, - "slug": { - "type": "string" + "periods": { + "description": "Reporting periods, newest first.", + "items": { + "$ref": "#/definitions/sec.FinancialPeriod" + }, + "type": "array" }, - "taxonomy": { + "source_url": { + "description": "URL the data was read from.", "type": "string" }, - "title": { + "statement": { + "description": "Statement returned: `income`, `balance` or `cash_flow`.", + "example": "income", "type": "string" }, - "url": { + "ticker": { + "description": "Stock ticker symbol of the company.", "type": "string" } }, "type": "object" }, - "sportskeeda.WikiPageMeta": { + "sec.FrameFact": { "properties": { - "issues_count": { + "accession_number": { + "description": "SEC accession number of the filing that reported the value.", + "type": "string" + }, + "cik": { + "description": "Reporting company's SEC Central Index Key (CIK) number.", "type": "integer" }, - "last_updated": { + "end": { + "description": "Last day of the period the value covers, in YYYY-MM-DD format.", "type": "string" }, - "page_size": { - "type": "integer" + "entity_name": { + "description": "Name of the reporting company.", + "type": "string" }, - "ratings": { + "form": { + "description": "SEC form type of the filing that reported the value.", + "type": "string" + }, + "start": { + "description": "First day of the period the value covers, in YYYY-MM-DD format.", "type": "string" + }, + "value": { + "description": "Value the company reported for the concept, in the unit given by `unit`.", + "type": "number" } }, "type": "object" }, - "sportskeeda.WikiPagesResponse": { + "sec.FramesResponse": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/sportskeeda.WikiPageItem" - }, - "type": "array" + "concept": { + "description": "XBRL concept tag that was queried, such as `Assets`.", + "example": "Assets", + "type": "string" }, - "limit": { + "count": { + "description": "Number of facts returned.", "type": "integer" }, - "page": { - "type": "integer" + "facts": { + "description": "One reported value per company for the concept and frame.", + "items": { + "$ref": "#/definitions/sec.FrameFact" + }, + "type": "array" }, - "search": { + "period": { + "description": "Reporting frame that was queried, such as `CY2024Q4I`.", + "example": "CY2024Q4I", "type": "string" }, - "sort": { + "source_url": { + "description": "URL the data was read from.", "type": "string" }, - "sort_by": { + "taxonomy": { + "description": "XBRL taxonomy the concept belongs to, such as `us-gaap`.", + "example": "us-gaap", "type": "string" }, - "total_items": { + "total": { + "description": "Number of companies that reported the concept for the frame.", "type": "integer" }, - "wiki": { + "unit": { + "description": "Unit of the reported values, such as `USD`.", + "example": "USD", "type": "string" } }, "type": "object" }, - "sportskeeda.WikiSummaryResponse": { + "sec.FullTextHit": { "properties": { - "open_issues_count": { - "type": "integer" - }, - "slug": { + "accession_number": { + "description": "SEC accession number of the filing that contains the match.", "type": "string" }, - "total_activity_count": { - "type": "integer" - }, - "total_contributor_count": { + "cik": { + "description": "SEC Central Index Key (CIK) number of the filing company.", "type": "integer" }, - "wiki": { - "type": "string" - } - }, - "type": "object" - }, - "spotify.AlbumMeta": { - "properties": { - "appVersion": { - "description": "Version of the Spotify web player the data was read from.", - "type": "string" + "company_names": { + "description": "Names of the companies named on the filing, as EDGAR lists them.", + "items": { + "type": "string" + }, + "type": "array" }, - "fetchedAt": { - "description": "Time the data was fetched, in UTC (RFC 3339).", + "document_url": { + "description": "Link to the matching document on sec.gov.", "type": "string" }, - "operationName": { - "description": "Name of the Spotify web player operation that returned the data.", + "filed_at": { + "description": "Date the filing was submitted, in YYYY-MM-DD format.", "type": "string" }, - "trackCount": { - "description": "Number of tracks returned.", - "type": "integer" + "form": { + "description": "SEC form type of the matching document, such as `10-K`.", + "type": "string" } }, "type": "object" }, - "spotify.AlbumResponse": { + "sec.FullTextSearchResponse": { "properties": { - "albumType": { - "description": "Album format as Spotify labels it.", - "type": "string" - }, - "artists": { - "description": "Artists credited on the album.", - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" + "count": { + "description": "Number of hits returned on this page.", + "type": "integer" }, - "copyrights": { - "description": "Copyright notices listed for the album.", + "hits": { + "description": "Filing documents that match the query.", "items": { - "type": "string" + "$ref": "#/definitions/sec.FullTextHit" }, "type": "array" }, - "durationMs": { - "description": "Total album length in milliseconds.", + "page": { + "description": "Page number returned, starting at 1.", "type": "integer" }, - "externalUrl": { - "description": "Link to the album on open.spotify.com.", - "type": "string" - }, - "id": { - "description": "Spotify ID of the album.", + "query": { + "description": "Search text that was run.", "type": "string" }, - "imageUrl": { - "description": "URL of the album cover image.", + "source_url": { + "description": "URL the data was read from.", "type": "string" }, - "images": { - "description": "Cover images available for the album, with their sizes.", - "items": { - "$ref": "#/definitions/spotify.ImageAsset" - }, - "type": "array" - }, - "isExplicit": { - "description": "Whether Spotify marks the album as explicit.", - "type": "boolean" - }, - "isPlayable": { - "description": "Whether the album can be played.", - "type": "boolean" - }, - "limit": { - "description": "Maximum number of tracks requested.", + "total": { + "description": "Total number of matches reported by EDGAR full-text search.", "type": "integer" - }, - "meta": { - "allOf": [ - { - "$ref": "#/definitions/spotify.AlbumMeta" - } - ], - "description": "Details about this response." - }, - "name": { - "description": "Album title as Spotify shows it.", - "type": "string" - }, - "offset": { - "description": "Position of the first track returned.", + } + }, + "type": "object" + }, + "sec.HiringBlock": { + "properties": { + "new_last_30d": { + "description": "Number of open roles posted in the last 30 days, among the roles sampled from the board.", "type": "integer" }, - "releaseDate": { - "description": "Date the album was released, as Spotify returns it.", + "provider": { + "description": "Applicant tracking system the open roles were read from, such as `greenhouse`.", "type": "string" }, - "shareUrl": { - "description": "Link to the album that Spotify offers for sharing.", - "type": "string" + "remote_pct": { + "description": "Share of open roles that are remote, in percent.", + "type": "number" }, - "totalTracks": { - "description": "Total number of tracks on the album.", - "type": "integer" + "source_url": { + "description": "URL the hiring data was read from.", + "type": "string" }, - "tracks": { - "description": "Tracks returned for the album.", + "top_departments": { + "description": "Up to five departments with their open-role counts.", "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" + "$ref": "#/definitions/sec.NameCount" }, "type": "array" }, - "type": { - "description": "Kind of item as Spotify labels it, for example `Album`.", - "type": "string" - }, - "uri": { - "description": "Spotify URI of the album.", - "type": "string" + "total_open_roles": { + "description": "Number of roles currently open on the careers board.", + "type": "integer" } }, "type": "object" }, - "spotify.ArtistAlbumsMeta": { + "sec.Holding": { "properties": { - "appVersion": { - "description": "Version of the Spotify web player the data was read from.", + "cusip": { + "description": "CUSIP identifier of the security.", "type": "string" }, - "count": { - "description": "Number of releases returned.", - "type": "integer" - }, - "fetchedAt": { - "description": "Time the data was fetched, in UTC (RFC 3339).", + "investment_discretion": { + "description": "Type of investment discretion the manager holds over the position, such as `SOLE` or `DFND`.", "type": "string" }, - "operationName": { - "description": "Name of the Spotify web player operation that returned the data.", - "type": "string" - } - }, - "type": "object" - }, - "spotify.ArtistAlbumsResponse": { - "properties": { - "id": { - "description": "Spotify ID of the artist.", + "issuer": { + "description": "Name of the company that issued the security.", "type": "string" }, - "items": { - "description": "Releases returned for the artist.", - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" - }, - "limit": { - "description": "Maximum number of releases requested.", - "type": "integer" - }, - "meta": { - "allOf": [ - { - "$ref": "#/definitions/spotify.ArtistAlbumsMeta" - } - ], - "description": "Details about this response." - }, - "offset": { - "description": "Position of the first release returned.", - "type": "integer" + "put_call": { + "description": "Put or call, for option positions.", + "type": "string" }, - "order": { - "description": "Sort order that was applied: `date_desc`, `date_asc`, `name_asc` or `name_desc`.", + "share_type": { + "description": "`SH` when `shares` counts shares, `PRN` when it is a principal amount.", "type": "string" }, - "total": { - "description": "Total number of releases of this type on Spotify.", - "type": "integer" + "shares": { + "description": "Number of shares or principal amount held, depending on `share_type`.", + "type": "number" }, - "type": { - "description": "Release type that was requested: `album`, `single`, `compilation`, `appears_on` or `all`.", + "title_of_class": { + "description": "Class of the security, such as `COM` for common stock.", "type": "string" }, - "uri": { - "description": "Spotify URI of the artist.", - "type": "string" + "value": { + "description": "Market value of the position as reported in the 13F filing.", + "type": "number" } }, "type": "object" }, - "spotify.ArtistCollectionMeta": { + "sec.HoldingsResponse": { "properties": { - "appVersion": { - "description": "Version of the Spotify web player the data was read from.", + "accession_number": { + "description": "SEC accession number of the 13F filing the holdings come from.", "type": "string" }, - "count": { - "description": "Number of items returned.", + "cik": { + "description": "Institutional manager's SEC Central Index Key (CIK) number.", "type": "integer" }, - "fetchedAt": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "type": "string" + "count": { + "description": "Number of holdings returned.", + "type": "integer" }, - "operationName": { - "description": "Name of the Spotify web player operation that returned the data.", - "type": "string" - } - }, - "type": "object" - }, - "spotify.ArtistCollectionResponse": { - "properties": { - "id": { - "description": "Spotify ID of the artist.", + "filing_date": { + "description": "Date the 13F was filed, in YYYY-MM-DD format.", "type": "string" }, - "items": { - "description": "Playlists or related artists returned for the artist.", + "holdings": { + "description": "Positions from the filing, largest value first.", "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" + "$ref": "#/definitions/sec.Holding" }, "type": "array" }, - "meta": { - "allOf": [ - { - "$ref": "#/definitions/spotify.ArtistCollectionMeta" - } - ], - "description": "Details about this response." + "manager_name": { + "description": "Name of the institutional investment manager.", + "type": "string" }, - "uri": { - "description": "Spotify URI of the artist.", + "report_date": { + "description": "Quarter end date the holdings are reported for, in YYYY-MM-DD format.", + "type": "string" + }, + "source_url": { + "description": "URL the data was read from.", "type": "string" + }, + "total_holdings": { + "description": "Number of positions in the filing, before the `limit` is applied.", + "type": "integer" + }, + "total_value": { + "description": "Sum of the value of every position in the filing.", + "type": "number" } }, "type": "object" }, - "spotify.ArtistMeta": { + "sec.InsiderResponse": { "properties": { - "appVersion": { - "description": "Version of the Spotify web player the data was read from.", - "type": "string" + "cik": { + "description": "Company's SEC Central Index Key (CIK) number.", + "type": "integer" }, - "discographyCount": { - "description": "Number of discography entries returned.", + "count": { + "description": "Number of transactions returned.", "type": "integer" }, - "fetchedAt": { - "description": "Time the data was fetched, in UTC (RFC 3339).", + "name": { + "description": "Company name as registered with the SEC.", "type": "string" }, - "operationName": { - "description": "Name of the Spotify web player operation that returned the data.", + "source_url": { + "description": "URL the data was read from.", "type": "string" }, - "playlistCount": { - "description": "Number of playlists returned.", - "type": "integer" - }, - "relatedCount": { - "description": "Number of related artists returned.", - "type": "integer" + "ticker": { + "description": "Stock ticker symbol of the company.", + "type": "string" }, - "topTrackCount": { - "description": "Number of top tracks returned.", - "type": "integer" + "transactions": { + "description": "Insider transactions from recent Form 3, 4 and 5 filings.", + "items": { + "$ref": "#/definitions/sec.InsiderTransaction" + }, + "type": "array" } }, "type": "object" }, - "spotify.ArtistResponse": { + "sec.InsiderTransaction": { "properties": { - "biography": { - "description": "Artist biography text.", + "accession_number": { + "description": "SEC accession number that uniquely identifies the filing.", "type": "string" }, - "discography": { - "description": "Selection of the artist's albums and releases.", - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" + "acquired_or_disposed": { + "description": "`A` if the insider acquired the shares, `D` if disposed of them.", + "type": "string" }, - "externalUrl": { - "description": "Link to the artist on open.spotify.com.", + "code": { "type": "string" }, - "followers": { - "description": "Number of Spotify followers the artist has.", - "type": "integer" + "filing_date": { + "description": "Date the filing was submitted to the SEC, in YYYY-MM-DD format.", + "type": "string" }, - "id": { - "description": "Spotify ID of the artist.", + "filing_url": { + "description": "Link to the filing's index page on sec.gov.", "type": "string" }, - "imageUrl": { - "description": "URL of the main artist image.", + "form": { + "description": "Ownership form type: `3`, `4`, `5` or an amendment such as `4/A`.", "type": "string" }, - "images": { - "description": "Images available for the artist, with their sizes.", - "items": { - "$ref": "#/definitions/spotify.ImageAsset" - }, - "type": "array" + "is_director": { + "description": "Whether the insider is a director of the company.", + "type": "boolean" }, - "meta": { - "allOf": [ - { - "$ref": "#/definitions/spotify.ArtistMeta" - } - ], - "description": "Details about this response." + "is_officer": { + "description": "Whether the insider is an officer of the company.", + "type": "boolean" }, - "monthlyUsers": { - "description": "Number of monthly listeners Spotify shows for the artist.", - "type": "integer" + "is_ten_percent_owner": { + "description": "Whether the insider owns more than 10 percent of the company's shares.", + "type": "boolean" }, - "name": { - "description": "Artist name as Spotify shows it.", + "owner_name": { + "description": "Name of the insider who filed.", "type": "string" }, - "playlists": { - "description": "Playlists featuring the artist.", - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" + "owner_title": { + "description": "Insider's job title at the company, as stated on the filing.", + "type": "string" }, - "related": { - "description": "Artists related to this artist.", - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" + "price_per_share": { + "description": "Price per share in the transaction.", + "type": "number" }, - "shareUrl": { - "description": "Link to the artist that Spotify offers for sharing.", + "security_title": { + "description": "Title of the security traded, such as `Common Stock`.", "type": "string" }, - "topTracks": { - "description": "Most popular tracks of the artist.", - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" + "shares": { + "description": "Number of shares in the transaction.", + "type": "number" }, - "type": { - "description": "Kind of item as Spotify labels it, for example `Artist`.", - "type": "string" + "shares_owned_after": { + "description": "Number of shares the insider owns after the transaction.", + "type": "number" }, - "uri": { - "description": "Spotify URI of the artist.", + "transaction_date": { + "description": "Date the transaction took place, in YYYY-MM-DD format.", "type": "string" - }, - "verified": { - "description": "Whether Spotify shows the artist as verified.", - "type": "boolean" } }, "type": "object" }, - "spotify.AudiobookChaptersMeta": { + "sec.MarketBlock": { "properties": { - "appVersion": { - "description": "Version of the Spotify web player the data was read from.", + "change_percent": { + "description": "Price change since the previous close, in percent.", + "type": "number" + }, + "currency": { + "description": "Currency code the price is quoted in.", "type": "string" }, - "count": { - "description": "Number of chapters returned.", - "type": "integer" + "day_high": { + "description": "Highest share price of the current trading day.", + "type": "number" }, - "fetchedAt": { - "description": "Time the data was fetched, in UTC (RFC 3339).", + "day_low": { + "description": "Lowest share price of the current trading day.", + "type": "number" + }, + "market_cap": { + "description": "Market capitalisation of the company.", + "type": "number" + }, + "name": { + "description": "Company name shown with the quote.", "type": "string" }, - "operationName": { - "description": "Name of the Spotify web player operation that returned the data.", + "price": { + "description": "Latest share price, in `currency`.", + "type": "number" + }, + "symbol": { + "description": "Ticker symbol of the quote.", "type": "string" } }, "type": "object" }, - "spotify.AudiobookChaptersResponse": { + "sec.NameCount": { "properties": { - "chapters": { - "description": "Chapters returned for the audiobook.", - "items": { - "$ref": "#/definitions/spotify.PodcastEpisodeSummary" - }, - "type": "array" - }, - "id": { - "description": "Spotify ID of the audiobook.", - "type": "string" - }, - "limit": { - "description": "Maximum number of chapters requested.", - "type": "integer" - }, - "meta": { - "allOf": [ - { - "$ref": "#/definitions/spotify.AudiobookChaptersMeta" - } - ], - "description": "Details about this response." - }, - "offset": { - "description": "Position of the first chapter returned.", - "type": "integer" - }, - "total": { - "description": "Total number of chapters in the audiobook.", + "count": { + "description": "Number of open roles in the department.", "type": "integer" }, - "uri": { - "description": "Spotify URI of the audiobook.", + "name": { + "description": "Name of the department.", "type": "string" } }, "type": "object" }, - "spotify.AudiobookMeta": { + "sec.NewsItem": { "properties": { - "appVersion": { - "description": "Version of the Spotify web player the data was read from.", + "published_at": { + "description": "Time the article was published.", "type": "string" }, - "fetchedAt": { - "description": "Time the data was fetched, in UTC (RFC 3339).", + "publisher": { + "description": "Name of the outlet that published the article.", "type": "string" }, - "operationName": { - "description": "Name of the Spotify web player operation that returned the data.", + "title": { + "description": "Headline of the news article.", + "type": "string" + }, + "url": { + "description": "Link to the article.", "type": "string" } }, "type": "object" }, - "spotify.AudiobookResponse": { + "sec.SubmissionsResponse": { "properties": { - "authors": { - "description": "Names of the audiobook's authors.", - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { - "description": "Description text of the audiobook.", + "category": { + "description": "SEC filer category, such as `Large accelerated filer`.", + "example": "Large accelerated filer", "type": "string" }, - "externalUrl": { - "description": "Link to the audiobook on open.spotify.com.", - "type": "string" + "cik": { + "description": "Company's SEC Central Index Key (CIK) number.", + "example": 320193, + "type": "integer" }, - "id": { - "description": "Spotify ID of the audiobook.", + "cik_padded": { + "description": "CIK number padded to 10 digits with a `CIK` prefix, as used in SEC data URLs.", + "example": "CIK0000320193", "type": "string" }, - "imageUrl": { - "description": "URL of the audiobook cover image.", + "count": { + "description": "Number of filings returned.", + "type": "integer" + }, + "entity_type": { + "description": "Type of filer, such as `operating`.", + "example": "operating", "type": "string" }, - "images": { - "description": "Cover images available for the audiobook, with their sizes.", + "exchanges": { + "description": "Stock exchanges the company is listed on, such as `Nasdaq`.", + "example": [ + "Nasdaq" + ], "items": { - "$ref": "#/definitions/spotify.ImageAsset" + "type": "string" }, "type": "array" }, - "isExplicit": { - "description": "Whether Spotify marks the audiobook as explicit.", - "type": "boolean" - }, - "mediaType": { - "description": "Kind of media the audiobook carries, as Spotify labels it.", - "type": "string" - }, - "meta": { - "allOf": [ - { - "$ref": "#/definitions/spotify.AudiobookMeta" - } - ], - "description": "Details about this response." + "filings": { + "description": "Company's filings, newest first, after applying the form and date filters.", + "items": { + "$ref": "#/definitions/sec.Filing" + }, + "type": "array" }, - "name": { - "description": "Audiobook title as Spotify shows it.", + "fiscal_year_end": { + "description": "Last day of the company's fiscal year in MMDD format, such as `0930`.", + "example": "0930", "type": "string" }, - "narrators": { - "description": "Names of the audiobook's narrators.", + "former_names": { + "description": "Names the company has previously filed under.", "items": { "type": "string" }, "type": "array" }, - "publisher": { - "description": "Name of the audiobook's publisher.", + "name": { + "description": "Company name as registered with the SEC.", + "example": "Apple Inc.", "type": "string" }, - "totalChapters": { - "description": "Total number of chapters in the audiobook.", - "type": "integer" - }, - "type": { - "description": "Kind of item as Spotify labels it, for example `Audiobook`.", + "sic": { + "description": "Standard Industrial Classification (SIC) code of the company.", "type": "string" }, - "uri": { - "description": "Spotify URI of the audiobook.", - "type": "string" - } - }, - "type": "object" - }, - "spotify.BrowsePageItem": { - "properties": { - "description": { - "description": "Description text of the item.", - "example": "The official podcast of comedian Joe Rogan.", + "sic_description": { + "description": "Text description of the SIC industry code.", "type": "string" }, - "externalUrl": { - "description": "Link to the item on open.spotify.com.", - "example": "https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk", + "source_url": { + "description": "URL the data was read from.", "type": "string" }, - "imageUrl": { - "description": "URL of the main image for the item.", - "example": "https://i.scdn.co/image/ab67656300005f1f54e6837957803d762a3f4d2b", + "state_of_incorporation": { + "description": "Code of the state or country where the company is incorporated.", + "example": "CA", "type": "string" }, - "images": { - "description": "Images available for the item, with their sizes.", + "tickers": { + "description": "Ticker symbols the company trades under.", "items": { - "$ref": "#/definitions/spotify.ImageAsset" + "type": "string" }, "type": "array" - }, - "publisher": { - "description": "Publisher or creator name of the item.", - "example": "Joe Rogan", - "type": "string" - }, - "subtitle": { - "description": "Secondary line shown under the item title, such as the creator name.", - "example": "Joe Rogan", - "type": "string" - }, - "title": { - "description": "Item title as Spotify shows it.", - "example": "The Joe Rogan Experience", - "type": "string" - }, - "type": { - "description": "Kind of item as Spotify labels it, for example `Podcast`.", - "example": "Podcast", - "type": "string" - }, - "uri": { - "description": "Spotify URI of the item.", - "example": "spotify:show:4rOoJ6Egrf8K2IrywzwOMk", - "type": "string" } }, "type": "object" }, - "spotify.BrowsePageMeta": { + "sec.companySearchResponseDoc": { "properties": { - "appVersion": { - "description": "Version of the Spotify web player the data was read from.", - "example": "1.2.90.403.gf901f20f", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "fetchedAt": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-05-13T20:41:12Z", - "type": "string" + "data": { + "$ref": "#/definitions/sec.CompanySearchResponse" }, - "operationName": { - "description": "Name of the Spotify web player operation that returned the data.", - "example": "browsePage", + "msg": { + "example": "OK", "type": "string" - }, - "sectionCount": { - "description": "Number of sections returned.", - "example": 8, - "type": "integer" } }, "type": "object" }, - "spotify.BrowsePageResponse": { + "sec.filingResponseDoc": { "properties": { - "meta": { - "allOf": [ - { - "$ref": "#/definitions/spotify.BrowsePageMeta" - } - ], - "description": "Details about this response." - }, - "sections": { - "description": "Sections of the page, in display order.", - "items": { - "$ref": "#/definitions/spotify.BrowsePageSection" - }, - "type": "array" - }, - "subtitle": { - "description": "Secondary line shown under the page title.", - "example": "New shows and episodes", - "type": "string" - }, - "title": { - "description": "Page title as Spotify shows it.", - "example": "Podcasts", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "type": { - "description": "Kind of page container as Spotify labels it.", - "example": "BrowseSectionContainer", - "type": "string" + "data": { + "$ref": "#/definitions/sec.FilingResponse" }, - "uri": { - "description": "Spotify URI of the page that was loaded.", - "example": "spotify:genre:podcasts-web", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "spotify.BrowsePageSection": { + "sec.filingSectionsResponseDoc": { "properties": { - "items": { - "description": "Items returned for this section.", - "items": { - "$ref": "#/definitions/spotify.BrowsePageItem" - }, - "type": "array" - }, - "subtitle": { - "description": "Secondary line shown under the section heading.", - "example": "Recommended shows", - "type": "string" - }, - "title": { - "description": "Section heading as Spotify shows it.", - "example": "Popular podcasts", - "type": "string" - }, - "totalCount": { - "description": "Total number of items in the section on Spotify.", - "example": 20, + "code": { + "example": 200, "type": "integer" }, - "type": { - "description": "Kind of section as Spotify labels it.", - "example": "BrowseGenericSectionData", - "type": "string" + "data": { + "$ref": "#/definitions/sec.FilingSectionsResponse" }, - "uri": { - "description": "Spotify URI of the section.", - "example": "spotify:section:0JQ5IMCbQBLqNPkcmYxQPQ", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "spotify.BrowseSectionMeta": { + "sec.financialsResponseDoc": { "properties": { - "appVersion": { - "description": "Version of the Spotify web player the data was read from.", - "example": "1.2.90.403.gf901f20f", - "type": "string" - }, - "count": { - "description": "Number of items returned.", - "example": 20, + "code": { + "example": 200, "type": "integer" }, - "fetchedAt": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-05-13T20:41:12Z", - "type": "string" + "data": { + "$ref": "#/definitions/sec.FinancialsResponse" }, - "operationName": { - "description": "Name of the Spotify web player operation that returned the data.", - "example": "browseSection", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "spotify.BrowseSectionResponse": { + "sec.framesResponseDoc": { "properties": { - "items": { - "description": "Items returned for this section.", - "items": { - "$ref": "#/definitions/spotify.BrowsePageItem" - }, - "type": "array" - }, - "limit": { - "description": "Maximum number of items requested.", - "example": 20, - "type": "integer" - }, - "meta": { - "allOf": [ - { - "$ref": "#/definitions/spotify.BrowseSectionMeta" - } - ], - "description": "Details about this response." - }, - "offset": { - "description": "Position of the first item returned within the section.", - "example": 0, + "code": { + "example": 200, "type": "integer" }, - "subtitle": { - "description": "Secondary line shown under the section heading.", - "example": "Recommended shows", - "type": "string" + "data": { + "$ref": "#/definitions/sec.FramesResponse" }, - "title": { - "description": "Section heading as Spotify shows it.", - "example": "Popular podcasts", + "msg": { + "example": "OK", "type": "string" - }, - "totalCount": { - "description": "Total number of items in the section on Spotify.", - "example": 50, + } + }, + "type": "object" + }, + "sec.fullTextResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "type": { - "description": "Kind of section as Spotify labels it.", - "example": "BrowseGenericSectionData", - "type": "string" + "data": { + "$ref": "#/definitions/sec.FullTextSearchResponse" }, - "uri": { - "description": "Spotify URI of the section that was loaded.", - "example": "spotify:section:0JQ5IMCbQBLqNPkcmYxQPQ", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "spotify.ChartItem": { + "sec.holdingsResponseDoc": { "properties": { - "description": { - "description": "Description text of the chart entry.", - "example": "The official podcast of comedian Joe Rogan.", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "episodeDescription": { - "description": "Description text of the episode, for episode charts.", - "example": "A representative chart episode.", - "type": "string" + "data": { + "$ref": "#/definitions/sec.HoldingsResponse" }, - "episodeExternalUrl": { - "description": "Link to the episode on open.spotify.com, for episode charts.", - "example": "https://open.spotify.com/episode/2C2Y5kNq7qCVOVhbA0G3os", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "sec.insiderResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "episodeImageUrl": { - "description": "URL of the episode's cover image, for episode charts.", - "example": "https://i.scdn.co/image/ab67656300005f1f54e6837957803d762a3f4d2b", - "type": "string" + "data": { + "$ref": "#/definitions/sec.InsiderResponse" }, - "episodeName": { - "description": "Episode title as Spotify shows it, for episode charts.", - "example": "Example episode", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "sec.intelligenceResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "episodeUri": { - "description": "Spotify URI of the episode, for episode charts.", - "example": "spotify:episode:2C2Y5kNq7qCVOVhbA0G3os", - "type": "string" + "data": { + "$ref": "#/definitions/sec.CompanyIntelligenceResponse" }, - "externalUrl": { - "description": "Link to the chart entry on open.spotify.com.", - "example": "https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "sec.submissionsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "imageUrl": { - "description": "URL of the cover image for the chart entry.", - "example": "https://i.scdn.co/image/ab67656300005f1f54e6837957803d762a3f4d2b", - "type": "string" + "data": { + "$ref": "#/definitions/sec.SubmissionsResponse" }, - "name": { - "description": "Title of the chart entry (episode title for episode charts, otherwise show title).", - "example": "The Joe Rogan Experience", + "msg": { + "example": "OK", "type": "string" - }, - "publisher": { - "description": "Name of the publisher of the show.", - "example": "Joe Rogan", + } + }, + "type": "object" + }, + "sephora.Answer": { + "properties": { + "author": { "type": "string" }, - "rank": { - "description": "Position of the entry in the chart, starting at 1.", - "example": 1, + "helpful_votes": { "type": "integer" }, - "rankMove": { - "description": "Change in rank since the previous chart period, as Spotify labels it, for example `UNCHANGED`.", - "example": "UNCHANGED", - "type": "string" - }, - "showDescription": { - "description": "Description text of the show.", - "example": "The official podcast of comedian Joe Rogan.", - "type": "string" - }, - "showExternalUrl": { - "description": "Link to the show on open.spotify.com.", - "example": "https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk", - "type": "string" - }, - "showImageUrl": { - "description": "URL of the show's cover image.", - "example": "https://i.scdn.co/image/ab67656300005f1f54e6837957803d762a3f4d2b", + "id": { "type": "string" }, - "showName": { - "description": "Show title as Spotify shows it.", - "example": "The Joe Rogan Experience", - "type": "string" + "is_brand_answer": { + "type": "boolean" }, - "showPublisher": { - "description": "Name of the show's publisher.", - "example": "Joe Rogan", - "type": "string" + "not_helpful_votes": { + "type": "integer" }, - "showUri": { - "description": "Spotify URI of the show.", - "example": "spotify:show:4rOoJ6Egrf8K2IrywzwOMk", + "submitted_at": { "type": "string" }, - "uri": { - "description": "Spotify URI of the chart entry (an episode for episode charts, otherwise a show).", - "example": "spotify:show:4rOoJ6Egrf8K2IrywzwOMk", + "text": { "type": "string" } }, "type": "object" }, - "spotify.ChartMeta": { + "sephora.Brand": { "properties": { - "count": { - "description": "Number of chart entries returned.", - "example": 100, - "type": "integer" + "brand_id": { + "example": "5644", + "type": "string" }, - "fetchedAt": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-05-13T20:41:13Z", + "is_new": { + "type": "boolean" + }, + "name": { + "example": "Lancôme", "type": "string" }, - "sourceUrl": { - "description": "URL the data was read from.", - "example": "https://podcastcharts.byspotify.com/api/charts/top-podcasts?region=us", + "slug": { + "example": "lancome", "type": "string" } }, "type": "object" }, - "spotify.ChartResponse": { + "sephora.BrandsResponse": { "properties": { - "chart": { - "description": "Chart identifier that was requested, for example `top-podcasts`.", - "example": "top-podcasts", - "type": "string" - }, - "chartName": { - "description": "Display name of the chart.", - "example": "Top Podcasts", - "type": "string" - }, - "chartType": { - "description": "Whether the chart is an overall `chart` or a `category` chart.", - "example": "chart", - "type": "string" - }, - "items": { - "description": "Chart entries, ordered by rank.", + "brands": { "items": { - "$ref": "#/definitions/spotify.ChartItem" + "$ref": "#/definitions/sephora.Brand" }, "type": "array" }, - "limit": { - "description": "Maximum number of chart entries requested.", - "example": 100, - "type": "integer" - }, - "meta": { - "allOf": [ - { - "$ref": "#/definitions/spotify.ChartMeta" - } - ], - "description": "Details about this response." - }, - "region": { - "description": "Region code the chart was loaded for.", - "example": "us", + "fetched_at": { "type": "string" }, - "regionName": { - "description": "Name of the chart region.", - "example": "United States", + "source_url": { "type": "string" + }, + "total_count": { + "example": 373, + "type": "integer" } }, "type": "object" }, - "spotify.CountryHubContentID": { + "sephora.CategoriesResponse": { "properties": { - "id": { - "description": "Content identifier to pass when requesting that section, for example `CHARTS`.", - "example": "CHARTS", + "categories": { + "items": { + "$ref": "#/definitions/sephora.CategoryEntry" + }, + "type": "array" + }, + "fetched_at": { "type": "string" }, - "title": { - "description": "Section heading as Spotify shows it.", - "example": "Featured Charts", + "source_url": { "type": "string" } }, "type": "object" }, - "spotify.CountryHubContentMeta": { + "sephora.CategoryEntry": { "properties": { - "appVersion": { - "description": "Version of the Spotify web player the data was read from.", - "example": "1.2.90.403.gf901f20f", + "department": { + "example": "makeup", "type": "string" }, - "fetchedAt": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-05-13T20:41:13Z", + "group": { + "example": "Eye", "type": "string" }, - "itemCount": { - "description": "Number of items returned.", - "example": 20, - "type": "integer" - }, - "operationName": { - "description": "Name of the Spotify web player operation that returned the data.", - "example": "countryHubContent", + "name": { + "example": "Mascara", "type": "string" }, - "partialErrors": { - "description": "PartialErrors counts upstream GraphQL field errors tolerated alongside\nusable items. Zero on a fully clean response.", - "example": 1, - "type": "integer" + "slug": { + "example": "mascara", + "type": "string" } }, "type": "object" }, - "spotify.CountryHubContentResponse": { + "sephora.CategoryResponse": { "properties": { - "contentId": { - "description": "Content identifier that was requested: `CHARTS`, `POPULAR_ALBUMS`, `POPULAR_ARTISTS` or `TRENDING_SONGS`.", - "example": "CHARTS", - "type": "string" + "brand": { + "items": { + "type": "string" + }, + "type": "array" }, - "countryCode": { - "description": "Country code the content was loaded for.", - "example": "US", + "category_id": { "type": "string" }, - "countryName": { - "description": "Name of the country.", - "example": "United States", + "count": { + "type": "integer" + }, + "display_name": { + "example": "Makeup", "type": "string" }, - "hexColor": { - "description": "Accent color of the country page, as a hex color code.", - "example": "#1DB954", + "fetched_at": { "type": "string" }, - "items": { - "description": "Items returned for the section.", + "filter": { "items": { - "$ref": "#/definitions/spotify.CountryHubItem" + "type": "string" }, "type": "array" }, - "meta": { - "allOf": [ - { - "$ref": "#/definitions/spotify.CountryHubContentMeta" - } - ], - "description": "Details about this response." + "is_new": { + "type": "boolean" }, - "supportedContentIds": { - "description": "Content sections available on the country page.", + "page": { + "example": 1, + "type": "integer" + }, + "page_size": { + "example": 60, + "type": "integer" + }, + "price_max": { + "type": "integer" + }, + "price_min": { + "type": "integer" + }, + "products": { "items": { - "$ref": "#/definitions/spotify.CountryHubContentID" + "$ref": "#/definitions/sephora.SearchProduct" }, "type": "array" }, - "supportedCountries": { - "description": "Countries Spotify offers a popular-in page for.", + "rating_min": { + "type": "integer" + }, + "related_categories": { "items": { - "$ref": "#/definitions/spotify.PopularCountry" + "type": "string" }, "type": "array" }, - "title": { - "description": "Section heading as Spotify shows it.", - "example": "Featured Charts", + "slug": { + "example": "makeup-cosmetics", + "type": "string" + }, + "sort_by": { + "example": "featured", "type": "string" + }, + "source_url": { + "type": "string" + }, + "total_products": { + "example": 2492, + "type": "integer" } }, "type": "object" }, - "spotify.CountryHubItem": { + "sephora.FullReview": { "properties": { - "album": { - "allOf": [ - { - "$ref": "#/definitions/spotify.SearchResultSummary" - } - ], - "description": "Album the item appears on." + "author": { + "type": "string" }, - "artists": { - "description": "Artists credited on the item.", - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" + "body": { + "type": "string" }, - "attributes": { - "additionalProperties": { - "type": "string" - }, - "description": "Additional key-value attributes Spotify returns for the item.", - "example": { - "{\"chart\"": "\"top-50\"}" - }, - "type": "object" + "helpful_votes": { + "type": "integer" }, - "description": { - "description": "Description text of the item.", - "example": "Your daily update of the most played tracks right now.", + "id": { "type": "string" }, - "externalUrl": { - "description": "Link to the item on open.spotify.com.", - "example": "https://open.spotify.com/playlist/37i9dQZEVXbLRQDuF5jeBpM", + "location": { "type": "string" }, - "imageUrl": { - "description": "URL of the main image for the item.", - "example": "https://charts-images.scdn.co/assets/locale_en/regional/daily/region_us_default.jpg", - "type": "string" + "not_helpful_votes": { + "type": "integer" }, - "images": { - "description": "Images available for the item, with their sizes.", + "photo_urls": { "items": { - "$ref": "#/definitions/spotify.ImageAsset" + "type": "string" }, "type": "array" }, - "owner": { - "allOf": [ - { - "$ref": "#/definitions/spotify.SearchResultSummary" - } - ], - "description": "User or account that owns the item." + "rating": { + "type": "integer" }, - "subtitle": { - "description": "Secondary line shown under the item title.", - "example": "Spotify", - "type": "string" + "ratings_only": { + "description": "RatingsOnly marks a review that carries only a star rating with no\nwritten title/body -- Bazaarvoice allows these and this endpoint still\nsurfaces them.", + "type": "boolean" }, - "title": { - "description": "Item title as Spotify shows it.", - "example": "Top 50 - USA", - "type": "string" + "recommended": { + "type": "boolean" }, - "type": { - "description": "Kind of item as Spotify labels it, for example `Playlist`.", - "example": "Playlist", + "secondary_ratings": { + "items": { + "$ref": "#/definitions/sephora.ReviewSecondaryRating" + }, + "type": "array" + }, + "submitted_at": { "type": "string" }, - "uri": { - "description": "Spotify URI of the item.", - "example": "spotify:playlist:37i9dQZEVXbLRQDuF5jeBpM", + "title": { "type": "string" } }, "type": "object" }, - "spotify.CountryHubMeta": { + "sephora.ProductQuestionsResponse": { "properties": { - "appVersion": { - "description": "Version of the Spotify web player the data was read from.", - "example": "1.2.90.403.gf901f20f", - "type": "string" + "count": { + "type": "integer" }, - "fetchedAt": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-05-13T20:41:13Z", + "fetched_at": { "type": "string" }, - "itemCount": { - "description": "Number of items returned across all sections.", - "example": 20, + "page": { "type": "integer" }, - "operationName": { - "description": "Name of the Spotify web player operation that returned the data.", - "example": "countryHubsPage", + "page_size": { + "type": "integer" + }, + "product_id": { "type": "string" }, - "partialErrors": { - "description": "PartialErrors counts upstream GraphQL field errors that were tolerated\nbecause usable shelves were still returned (e.g. one broken shelf among\nseveral). Zero on a fully clean response.", - "example": 1, + "questions": { + "items": { + "$ref": "#/definitions/sephora.Question" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "total_pages": { "type": "integer" }, - "sectionCount": { - "description": "Number of sections returned.", - "example": 5, + "total_questions": { "type": "integer" } }, "type": "object" }, - "spotify.CountryHubResponse": { + "sephora.ProductResponse": { "properties": { - "countryCode": { - "description": "Country code the hub was loaded for.", - "example": "US", + "brand": { + "example": "LANEIGE", "type": "string" }, - "countryName": { - "description": "Name of the country.", - "example": "United States", + "category": { "type": "string" }, - "hexColor": { - "description": "Accent color of the country page, as a hex color code.", - "example": "#1DB954", + "description": { "type": "string" }, - "meta": { - "allOf": [ - { - "$ref": "#/definitions/spotify.CountryHubMeta" - } - ], - "description": "Details about this response." + "fetched_at": { + "type": "string" }, - "sections": { - "description": "Content sections of the country page.", + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "product_group_id": { + "example": "P420652", + "type": "string" + }, + "rating": { + "example": 4.3, + "type": "number" + }, + "review_count": { + "type": "integer" + }, + "review_sample": { "items": { - "$ref": "#/definitions/spotify.CountryHubSection" + "$ref": "#/definitions/sephora.ReviewSample" }, "type": "array" }, - "supportedCountries": { - "description": "Countries Spotify offers a popular-in page for.", + "source_url": { + "type": "string" + }, + "url": { + "type": "string" + }, + "variants": { "items": { - "$ref": "#/definitions/spotify.PopularCountry" + "$ref": "#/definitions/sephora.Variant" }, "type": "array" } }, "type": "object" }, - "spotify.CountryHubSection": { + "sephora.ProductReviewsResponse": { "properties": { - "contentId": { - "description": "Identifier of the section content, for example `CHARTS`.", - "example": "CHARTS", + "average_rating": { + "type": "number" + }, + "count": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "items": { - "description": "Items returned for this section.", + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "product_id": { + "type": "string" + }, + "rating_count": { + "description": "RatingCount, AverageRating, RecommendedRatio, and RatingHistogram are\nthe product's site-wide aggregate rating summary, not just this page --\nabsent (zero-valued) for a product with no reviews yet.", + "type": "integer" + }, + "rating_histogram": { + "description": "RatingHistogram is the count of ratings per star, ascending: index 0 is\n1-star, index 4 is 5-star.", "items": { - "$ref": "#/definitions/spotify.CountryHubItem" + "type": "integer" }, "type": "array" }, - "title": { - "description": "Section heading as Spotify shows it.", - "example": "Featured Charts", + "recommended_ratio": { + "type": "number" + }, + "reviews": { + "items": { + "$ref": "#/definitions/sephora.FullReview" + }, + "type": "array" + }, + "source_url": { "type": "string" }, - "totalCount": { - "description": "Total number of items in the section on Spotify.", - "example": 20, + "total_pages": { + "type": "integer" + }, + "total_reviews": { "type": "integer" } }, "type": "object" }, - "spotify.HomeMeta": { + "sephora.Question": { "properties": { - "appVersion": { - "description": "Version of the Spotify web player the data was read from.", - "example": "1.2.90.403.gf901f20f", + "answer_count": { + "type": "integer" + }, + "answers": { + "items": { + "$ref": "#/definitions/sephora.Answer" + }, + "type": "array" + }, + "author": { "type": "string" }, - "fetchedAt": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-05-13T20:41:12Z", + "has_best_answer": { + "type": "boolean" + }, + "id": { "type": "string" }, - "operationName": { - "description": "Name of the Spotify web player operation that returned the data.", - "example": "home", + "submitted_at": { "type": "string" }, - "sectionCount": { - "description": "Number of sections returned.", - "example": 8, - "type": "integer" + "text": { + "type": "string" } }, "type": "object" }, - "spotify.HomeResponse": { + "sephora.ReviewSample": { "properties": { - "facet": { - "description": "Home page filter that was applied, for example `music`.", - "example": "music", + "author": { "type": "string" }, - "greeting": { - "description": "Greeting Spotify shows at the top of the home page, for example `Good afternoon`.", - "example": "Good afternoon", + "body": { "type": "string" }, - "meta": { - "allOf": [ - { - "$ref": "#/definitions/spotify.HomeMeta" - } - ], - "description": "Details about this response." + "date_published": { + "type": "string" }, - "sections": { - "description": "Home page sections, in display order.", - "items": { - "$ref": "#/definitions/spotify.BrowsePageSection" - }, - "type": "array" + "id": { + "type": "string" }, - "timeZone": { - "description": "Time zone the home page was personalized for.", - "example": "UTC", + "rating": { + "type": "number" + }, + "title": { "type": "string" } }, "type": "object" }, - "spotify.ImageAsset": { + "sephora.ReviewSecondaryRating": { "properties": { - "height": { - "description": "Image height in pixels.", - "example": 640, + "max_value": { + "example": 5, "type": "integer" }, - "url": { - "description": "URL of the image.", - "example": "https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0", + "name": { + "example": "Value", "type": "string" }, - "width": { - "description": "Image width in pixels.", - "example": 640, + "value": { + "example": 4, "type": "integer" } }, "type": "object" }, - "spotify.PlaylistMeta": { + "sephora.SearchProduct": { "properties": { - "appVersion": { - "description": "Version of the Spotify web player the data was read from.", - "example": "1.2.90.403.gf901f20f", + "brand_name": { + "example": "tarte", "type": "string" }, - "episodeCount": { - "description": "Number of episodes among the returned items.", - "example": 0, - "type": "integer" + "image_url": { + "type": "string" }, - "fetchedAt": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-05-13T20:41:12Z", + "list_price": { + "example": "$25.00", "type": "string" }, - "itemCount": { - "description": "Number of items returned.", - "example": 20, + "more_colors": { "type": "integer" }, - "operationName": { - "description": "Name of the Spotify web player operation that returned the data.", - "example": "fetchPlaylist", + "product_id": { + "example": "P520769", "type": "string" }, - "trackCount": { - "description": "Number of tracks among the returned items.", - "example": 20, + "product_name": { + "type": "string" + }, + "rating": { + "example": 4.5, + "type": "number" + }, + "review_count": { "type": "integer" + }, + "sku_id": { + "type": "string" + }, + "sponsored": { + "type": "boolean" + }, + "url": { + "type": "string" + }, + "value_price": { + "type": "string" } }, "type": "object" }, - "spotify.PlaylistResponse": { + "sephora.SearchResponse": { "properties": { - "collaborative": { - "description": "Whether the playlist is collaborative.", - "example": false, - "type": "boolean" - }, - "description": { - "description": "Description text of the playlist.", - "example": "Your daily update of the most played tracks right now.", - "type": "string" - }, - "episodes": { - "description": "The podcast episode entries among the returned items.", + "brand": { "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" + "type": "string" }, "type": "array" }, - "externalUrl": { - "description": "Link to the playlist on open.spotify.com.", - "example": "https://open.spotify.com/playlist/37i9dQZEVXbLwpL8TjsxOG", - "type": "string" - }, - "followers": { - "description": "Number of followers the playlist has.", - "example": 17500000, + "count": { "type": "integer" }, - "id": { - "description": "Spotify ID of the playlist.", - "example": "37i9dQZEVXbLwpL8TjsxOG", - "type": "string" - }, - "imageUrl": { - "description": "URL of the playlist cover image.", - "example": "https://charts-images.scdn.co/assets/locale_en/regional/daily/region_global_default.jpg", + "fetched_at": { "type": "string" }, - "images": { - "description": "Cover images available for the playlist, with their sizes.", + "filter": { "items": { - "$ref": "#/definitions/spotify.ImageAsset" + "type": "string" }, "type": "array" }, - "items": { - "description": "Tracks and episodes returned from the playlist, in playlist order.", - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" + "is_new": { + "type": "boolean" }, - "limit": { - "description": "Maximum number of items requested.", - "example": 20, + "page": { + "example": 1, "type": "integer" }, - "meta": { - "allOf": [ - { - "$ref": "#/definitions/spotify.PlaylistMeta" - } - ], - "description": "Details about this response." + "page_size": { + "example": 60, + "type": "integer" }, - "name": { - "description": "Playlist title as Spotify shows it.", - "example": "Top 50 - Global", - "type": "string" + "price_max": { + "example": 30, + "type": "integer" }, - "offset": { - "description": "Position of the first item returned.", - "example": 0, + "price_min": { + "example": 15, "type": "integer" }, - "owner": { - "allOf": [ - { - "$ref": "#/definitions/spotify.SearchResultSummary" - } - ], - "description": "User or account that owns the playlist." + "products": { + "items": { + "$ref": "#/definitions/sephora.SearchProduct" + }, + "type": "array" }, - "shareUrl": { - "description": "Link to the playlist that Spotify offers for sharing.", - "example": "https://open.spotify.com/playlist/37i9dQZEVXbLwpL8TjsxOG", + "query": { + "example": "mascara", "type": "string" }, - "total": { - "description": "Total number of items in the playlist.", - "example": 50, + "rating_min": { + "example": 4, "type": "integer" }, - "tracks": { - "description": "The track entries among the returned items.", + "related_searches": { "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" + "type": "string" }, "type": "array" }, - "type": { - "description": "Kind of item as Spotify labels it, for example `Playlist`.", - "example": "Playlist", + "sort_by": { + "example": "featured", "type": "string" }, - "uri": { - "description": "Spotify URI of the playlist.", - "example": "spotify:playlist:37i9dQZEVXbLwpL8TjsxOG", + "source_url": { "type": "string" + }, + "total_products": { + "example": 180, + "type": "integer" } }, "type": "object" }, - "spotify.PodcastEpisodeMeta": { + "sephora.Store": { "properties": { - "appVersion": { - "description": "Version of the Spotify web player the data was read from.", - "example": "1.2.90.403.gf901f20f", + "address": { + "$ref": "#/definitions/sephora.StoreAddress" + }, + "display_name": { + "example": "STATE STREET", "type": "string" }, - "fetchedAt": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-05-13T20:41:13Z", + "distance_miles": { + "example": 0.2, + "type": "number" + }, + "hours": { + "$ref": "#/definitions/sephora.StoreHours" + }, + "is_bopisable": { + "type": "boolean" + }, + "is_curbside_enabled": { + "type": "boolean" + }, + "is_online_reservation_enabled": { + "type": "boolean" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "same_day_delivery_enabled": { + "type": "boolean" + }, + "store_id": { + "example": "0662", "type": "string" }, - "operationName": { - "description": "Name of the Spotify web player operation that returned the data.", - "example": "getEpisodeOrChapter", + "store_type": { + "example": "SEPHORA", "type": "string" }, - "sourceUrl": { - "description": "URL the data was read from.", - "example": "https://open.spotify.com/episode/2C2Y5kNq7qCVOVhbA0G3os", + "url": { "type": "string" } }, "type": "object" }, - "spotify.PodcastEpisodeResponse": { + "sephora.StoreAddress": { "properties": { - "description": { - "description": "Plain-text description of the episode.", - "example": "A new adventure from the Stinky Dragon crew.", + "address1": { "type": "string" }, - "durationMs": { - "description": "Episode length in milliseconds.", - "example": 3600000, - "type": "integer" - }, - "externalUrl": { - "description": "Link to the episode on open.spotify.com.", - "example": "https://open.spotify.com/episode/2C2Y5kNq7qCVOVhbA0G3os", + "address2": { "type": "string" }, - "htmlDescription": { - "description": "Description of the episode with its HTML formatting.", - "example": "A new adventure from the Stinky Dragon crew.", + "city": { "type": "string" }, - "id": { - "description": "Spotify ID of the episode.", - "example": "2C2Y5kNq7qCVOVhbA0G3os", + "country": { "type": "string" }, - "imageUrl": { - "description": "URL of the main cover image for the episode.", - "example": "https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0", + "mall_name": { "type": "string" }, - "images": { - "description": "Cover images available for the episode, with their sizes.", - "items": { - "$ref": "#/definitions/spotify.ImageAsset" - }, - "type": "array" - }, - "isExplicit": { - "description": "Whether Spotify marks the episode as explicit.", - "example": false, - "type": "boolean" - }, - "isPaywallContent": { - "description": "Whether the episode is paywalled content.", - "example": false, - "type": "boolean" - }, - "isPlayable": { - "description": "Whether the episode can be played.", - "example": true, - "type": "boolean" + "phone": { + "type": "string" }, - "mediaTypes": { - "description": "Media types the episode is available in, for example `AUDIO`.", - "example": [ - "AUDIO" - ], - "items": { - "type": "string" - }, - "type": "array" + "postal_code": { + "type": "string" }, - "meta": { - "allOf": [ - { - "$ref": "#/definitions/spotify.PodcastEpisodeMeta" - } - ], - "description": "Details about this response." + "state": { + "type": "string" + } + }, + "type": "object" + }, + "sephora.StoreHours": { + "properties": { + "friday": { + "type": "string" }, - "name": { - "description": "Episode title as Spotify shows it.", - "example": "Tales from the Stinky Dragon", + "monday": { "type": "string" }, - "playabilityReason": { - "description": "Reason code Spotify gives for the episode's playability, for example `PLAYABLE`.", - "example": "PLAYABLE", + "saturday": { "type": "string" }, - "previewAudioUrl": { - "description": "URL of an audio preview of the episode.", - "example": "https://p.scdn.co/mp3-preview/example", + "sunday": { "type": "string" }, - "previewAudioUrls": { - "description": "URLs of the audio previews available for the episode.", - "example": [ - "https://p.scdn.co/mp3-preview/example" - ], - "items": { - "type": "string" - }, - "type": "array" + "thursday": { + "type": "string" }, - "previewVideoUrl": { - "description": "URL of a video preview of the episode.", - "example": "https://p.scdn.co/video-preview/example", + "time_zone": { + "example": "America/Chicago", "type": "string" }, - "releaseDate": { - "description": "Date the episode was released, as Spotify returns it.", - "example": "2026-05-13", + "tuesday": { "type": "string" }, - "releaseDatePrecision": { - "description": "How precise the release date is, for example `DAY`.", - "example": "DAY", + "wednesday": { "type": "string" + } + }, + "type": "object" + }, + "sephora.StoresResponse": { + "properties": { + "count": { + "type": "integer" }, - "shareUrl": { - "description": "Link to the episode that Spotify offers for sharing.", - "example": "https://open.spotify.com/episode/2C2Y5kNq7qCVOVhbA0G3os", + "fetched_at": { "type": "string" }, - "show": { - "allOf": [ - { - "$ref": "#/definitions/spotify.PodcastEpisodeShowSummary" - } - ], - "description": "Show the episode belongs to." + "latitude": { + "example": 41.88325, + "type": "number" }, - "transcriptCount": { - "description": "Number of transcripts Spotify has for the episode.", - "example": 1, + "longitude": { + "example": -87.6323879, + "type": "number" + }, + "radius": { + "example": 50, "type": "integer" }, - "type": { - "description": "Kind of item as Spotify labels it, for example `Episode`.", - "example": "Episode", + "source_url": { "type": "string" }, - "unplayabilityReasons": { - "description": "Reasons the episode cannot be played, such as `not_available_in_region`.", - "example": [ - "not_available_in_region" - ], + "stores": { "items": { - "type": "string" + "$ref": "#/definitions/sephora.Store" }, "type": "array" - }, - "uri": { - "description": "Spotify URI of the episode.", - "example": "spotify:episode:2C2Y5kNq7qCVOVhbA0G3os", + } + }, + "type": "object" + }, + "sephora.SuggestCategory": { + "properties": { + "name": { + "example": "Mascara", "type": "string" }, - "videoThumbnailUrl": { - "description": "URL of the video thumbnail for the episode.", - "example": "https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0", + "url": { + "example": "https://www.sephora.com/shop/mascara", "type": "string" - }, - "videoThumbnails": { - "description": "Video thumbnails available for the episode, with their sizes.", - "items": { - "$ref": "#/definitions/spotify.ImageAsset" - }, - "type": "array" } }, "type": "object" }, - "spotify.PodcastEpisodeShowSummary": { + "sephora.SuggestProduct": { "properties": { - "description": { - "description": "Description text of the show.", - "example": "Tales from the Stinky Dragon is an actual-play comedy podcast.", + "brand_name": { + "example": "ILIA", "type": "string" }, - "externalUrl": { - "description": "Link to the show on open.spotify.com.", - "example": "https://open.spotify.com/show/1QQJ7FElLE0K6CIfZNCxU4", + "image_url": { "type": "string" }, - "id": { - "description": "Spotify ID of the show.", - "example": "1QQJ7FElLE0K6CIfZNCxU4", + "product_id": { + "example": "P431750", "type": "string" }, - "imageUrl": { - "description": "URL of the main cover image for the show.", - "example": "https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0", + "product_name": { "type": "string" }, - "images": { - "description": "Cover images available for the show, with their sizes.", + "rating": { + "example": 4.1361, + "type": "number" + }, + "review_count": { + "type": "integer" + }, + "sku_id": { + "type": "string" + } + }, + "type": "object" + }, + "sephora.SuggestResponse": { + "properties": { + "categories": { "items": { - "$ref": "#/definitions/spotify.ImageAsset" + "$ref": "#/definitions/sephora.SuggestCategory" }, "type": "array" }, - "mediaType": { - "description": "Kind of media the show carries, for example `MIXED`.", - "example": "MIXED", + "fetched_at": { "type": "string" }, - "name": { - "description": "Show title as Spotify shows it.", - "example": "Tales from the Stinky Dragon", + "products": { + "items": { + "$ref": "#/definitions/sephora.SuggestProduct" + }, + "type": "array" + }, + "query": { + "example": "masc", "type": "string" }, - "publisher": { - "description": "Name of the show's publisher.", - "example": "Stinky Dragon", + "source_url": { "type": "string" }, - "showTypes": { - "description": "Show type labels Spotify assigns, for example `PODCAST`.", - "example": [ - "PODCAST" - ], + "terms": { "items": { - "type": "string" + "$ref": "#/definitions/sephora.SuggestTerm" }, "type": "array" - }, - "type": { - "description": "Kind of item as Spotify labels it, for example `Podcast`.", - "example": "Podcast", - "type": "string" - }, - "uri": { - "description": "Spotify URI of the show.", - "example": "spotify:show:1QQJ7FElLE0K6CIfZNCxU4", + } + }, + "type": "object" + }, + "sephora.SuggestTerm": { + "properties": { + "term": { + "example": "mascara", "type": "string" } }, "type": "object" }, - "spotify.PodcastEpisodeSummary": { + "sephora.Variant": { "properties": { - "description": { - "description": "Description text of the episode.", - "example": "A new adventure from the Stinky Dragon crew.", + "availability": { + "example": "InStock", "type": "string" }, - "durationMs": { - "description": "Episode length in milliseconds.", - "example": 3600000, - "type": "integer" - }, - "externalUrl": { - "description": "Link to the episode on open.spotify.com.", - "example": "https://open.spotify.com/episode/2C2Y5kNq7qCVOVhbA0G3os", + "color": { + "example": "Acai Mango Smoothie", "type": "string" }, - "imageUrl": { - "description": "URL of the main cover image for the episode.", - "example": "https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0", + "currency_code": { + "example": "USD", "type": "string" }, - "images": { - "description": "Cover images available for the episode, with their sizes.", - "items": { - "$ref": "#/definitions/spotify.ImageAsset" - }, - "type": "array" - }, - "isExplicit": { - "description": "Whether Spotify marks the episode as explicit.", - "example": false, - "type": "boolean" - }, - "isPlayable": { - "description": "Whether the episode can be played.", - "example": true, - "type": "boolean" - }, - "name": { - "description": "Episode title as Spotify shows it.", - "example": "Tales from the Stinky Dragon", + "image": { "type": "string" }, - "releaseDate": { - "description": "Date the episode was released, as Spotify returns it.", - "example": "2026-05-13", + "name": { "type": "string" }, - "type": { - "description": "Kind of item as Spotify labels it, for example `Episode`.", - "example": "Episode", + "price": { + "example": "25.00", "type": "string" }, - "uri": { - "description": "Spotify URI of the episode.", - "example": "spotify:episode:2C2Y5kNq7qCVOVhbA0G3os", + "sku": { "type": "string" } }, "type": "object" }, - "spotify.PodcastEpisodesMeta": { + "sephora.brandsResponseDoc": { "properties": { - "appVersion": { - "description": "Version of the Spotify web player the data was read from.", - "example": "1.2.90.403.gf901f20f", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "fetchedAt": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-05-13T20:41:13Z", - "type": "string" + "data": { + "$ref": "#/definitions/sephora.BrandsResponse" }, - "operationName": { - "description": "Name of the Spotify web player operation that returned the data.", - "example": "queryPodcastEpisodes", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "spotify.PodcastEpisodesResponse": { + "sephora.categoriesResponseDoc": { "properties": { - "episodes": { - "description": "Episodes returned for the show.", - "items": { - "$ref": "#/definitions/spotify.PodcastEpisodeSummary" - }, - "type": "array" - }, - "limit": { - "description": "Maximum number of episodes requested.", - "example": 20, + "code": { + "example": 200, "type": "integer" }, - "meta": { - "allOf": [ - { - "$ref": "#/definitions/spotify.PodcastEpisodesMeta" - } - ], - "description": "Details about this response." + "data": { + "$ref": "#/definitions/sephora.CategoriesResponse" }, - "offset": { - "description": "Position of the first episode returned.", - "example": 0, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "sephora.categoryResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "total": { - "description": "Total number of episodes the show has on Spotify.", - "example": 202, + "data": { + "$ref": "#/definitions/sephora.CategoryResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "sephora.productQuestionsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "uri": { - "description": "Spotify URI of the show whose episodes are listed.", - "example": "spotify:show:1QQJ7FElLE0K6CIfZNCxU4", + "data": { + "$ref": "#/definitions/sephora.ProductQuestionsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "spotify.PopularCountry": { + "sephora.productResponseDoc": { "properties": { "code": { - "example": "us", + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/sephora.ProductResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "sephora.productReviewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "name": { - "description": "Country name in English.", - "example": "United States", + "data": { + "$ref": "#/definitions/sephora.ProductReviewsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "spotify.RecommendationSummary": { + "sephora.searchResponseDoc": { "properties": { - "description": { - "description": "Description text of the recommended item.", - "example": "The official podcast of comedian Joe Rogan.", + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/sephora.SearchResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "sephora.storesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "externalUrl": { - "description": "Link to the recommended item on open.spotify.com.", - "example": "https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk", + "data": { + "$ref": "#/definitions/sephora.StoresResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "sephora.suggestResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "imageUrl": { - "description": "URL of the main image for the recommended item.", - "example": "https://i.scdn.co/image/ab67656300005f1f54e6837957803d762a3f4d2b", + "data": { + "$ref": "#/definitions/sephora.SuggestResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "sevennewsau.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "images": { - "description": "Images available for the recommended item, with their sizes.", + "biography": { "items": { - "$ref": "#/definitions/spotify.ImageAsset" + "type": "string" }, "type": "array" }, - "publisher": { - "description": "Publisher or creator name of the recommended item.", - "example": "Joe Rogan", + "image_url": { "type": "string" }, - "subtitle": { - "description": "Secondary line shown under the title, such as the creator name.", - "example": "Joe Rogan", + "name": { "type": "string" }, - "title": { - "description": "Title of the recommended item as Spotify shows it.", - "example": "The Joe Rogan Experience", + "role": { "type": "string" }, - "type": { - "description": "Kind of item as Spotify labels it, for example `Podcast`.", - "example": "Podcast", + "slug": { "type": "string" }, - "uri": { - "description": "Spotify URI of the recommended item.", - "example": "spotify:show:4rOoJ6Egrf8K2IrywzwOMk", + "social_links": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { "type": "string" } }, "type": "object" }, - "spotify.SearchMeta": { + "sevennow.CatalogCategory": { "properties": { - "albumCount": { - "description": "Number of albums returned.", - "example": 3, - "type": "integer" - }, - "appVersion": { - "description": "Version of the Spotify web player the data was read from.", - "example": "1.2.90.403.gf901f20f", + "id": { + "example": "48423", "type": "string" }, - "artistCount": { - "description": "Number of artists returned.", - "example": 5, - "type": "integer" - }, - "audiobookCount": { - "description": "Number of audiobooks returned.", - "example": 2, - "type": "integer" + "name": { + "example": "Fresh Food", + "type": "string" + } + }, + "type": "object" + }, + "sevennow.CatalogItem": { + "properties": { + "age_restricted": { + "example": false, + "type": "boolean" }, - "episodeCount": { - "description": "Number of episodes returned.", - "example": 2, - "type": "integer" + "brand": { + "example": "Hot Food Pizza", + "type": "string" }, - "fetchedAt": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-05-13T20:41:12Z", + "calories": { + "example": "360", "type": "string" }, - "operationName": { - "description": "Name of the Spotify web player operation that returned the data.", - "example": "searchDesktop", + "category": { + "example": "Fresh Food", "type": "string" }, - "playlistCount": { - "description": "Number of playlists returned.", - "example": 2, - "type": "integer" + "flavor_name": { + "example": "Pepperoni Pizza", + "type": "string" }, - "resultCount": { - "description": "Total number of results returned.", - "example": 22, - "type": "integer" + "image_url": { + "type": "string" }, - "showCount": { - "description": "Number of shows returned.", - "example": 4, - "type": "integer" + "name": { + "example": "Large Pizza - Ultimate Pepperoni", + "type": "string" }, - "topCount": { - "description": "Number of top results returned.", - "example": 3, + "original_price_cents": { + "example": 1099, "type": "integer" }, - "trackCount": { - "description": "Number of tracks returned.", - "example": 2, - "type": "integer" + "product_id": { + "example": "178322-2-6-2", + "type": "string" }, - "userCount": { - "description": "Number of user profiles returned.", - "example": 2, - "type": "integer" - } - }, - "type": "object" - }, - "spotify.SearchPodcastsMeta": { - "properties": { - "appVersion": { - "description": "Version of the Spotify web player the data was read from.", - "example": "1.2.90.403.gf901f20f", + "promo_description": { + "example": "On Sale $6.99", "type": "string" }, - "episodeCount": { - "description": "Number of episodes returned.", - "example": 2, + "promo_price_cents": { + "example": 699, "type": "integer" }, - "fetchedAt": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-05-13T20:41:12Z", + "subcategory": { + "example": "Pizza", "type": "string" }, - "operationName": { - "description": "Name of the Spotify web player operation that returned the data.", - "example": "searchPodcasts", + "upc": { + "example": "00072180687340", "type": "string" - }, - "showCount": { - "description": "Number of shows returned.", - "example": 4, - "type": "integer" - }, - "topCount": { - "description": "Number of top results returned.", - "example": 3, - "type": "integer" } }, "type": "object" }, - "spotify.SearchPodcastsResponse": { + "sevennow.CatalogResponse": { "properties": { - "episodes": { - "description": "Podcast episodes that matched the search term.", + "active_items": { + "example": 2664, + "type": "integer" + }, + "categories": { "items": { - "$ref": "#/definitions/spotify.PodcastEpisodeSummary" + "$ref": "#/definitions/sevennow.CatalogCategory" }, "type": "array" }, + "fetched_at": { + "type": "string" + }, "limit": { - "description": "Maximum number of results requested per section.", "example": 20, "type": "integer" }, - "meta": { - "allOf": [ - { - "$ref": "#/definitions/spotify.SearchPodcastsMeta" - } - ], - "description": "Details about this response." - }, - "offset": { - "description": "Position of the first result returned.", - "example": 0, + "out_of_stock_items": { + "example": 435, "type": "integer" }, - "searchTerm": { - "description": "Search term that was run.", - "example": "hello", - "type": "string" - }, - "shows": { - "description": "Podcast shows that matched the search term.", + "sections": { "items": { - "$ref": "#/definitions/spotify.RecommendationSummary" + "$ref": "#/definitions/sevennow.CatalogSection" }, "type": "array" }, - "topResults": { - "description": "Best matches across all result types.", - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" + "skip": { + "example": 0, + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "store_id": { + "example": "39226", + "type": "string" } }, "type": "object" }, - "spotify.SearchResponse": { + "sevennow.CatalogSection": { "properties": { - "albums": { - "description": "Albums that matched the search term.", - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" - }, - "artists": { - "description": "Artists that matched the search term.", - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" - }, - "audiobooks": { - "description": "Audiobooks that matched the search term.", - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" - }, - "episodes": { - "description": "Podcast episodes that matched the search term.", - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" - }, - "limit": { - "description": "Maximum number of results requested per section.", + "count": { "example": 20, "type": "integer" }, - "meta": { - "allOf": [ - { - "$ref": "#/definitions/spotify.SearchMeta" - } - ], - "description": "Details about this response." - }, - "offset": { - "description": "Position of the first result returned.", - "example": 0, + "display_order": { + "example": 3, "type": "integer" }, - "playlists": { - "description": "Playlists that matched the search term.", + "items": { "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" + "$ref": "#/definitions/sevennow.CatalogItem" }, "type": "array" }, - "results": { - "description": "All results found, across every type.", - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" + "name": { + "description": "Name is the shelf's own display title, e.g. \"Best Sellers\",\n\"$2 Deals\", \"What's New\". Upstream sends it on every section; it is\nthe only human-readable identifier a numeric section id has.", + "example": "$2 Deals", + "type": "string" }, - "searchTerm": { - "description": "Search term that was run.", - "example": "hello", + "section_id": { + "example": "48423", "type": "string" }, - "shows": { - "description": "Podcast shows that matched the search term.", - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" + "total": { + "example": 200, + "type": "integer" + } + }, + "type": "object" + }, + "sevennow.CategoriesResponse": { + "properties": { + "count": { + "example": 25, + "type": "integer" }, - "topResults": { - "description": "Best matches across all result types.", + "departments": { + "description": "Departments are the store's permanent browsable departments.", "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" + "$ref": "#/definitions/sevennow.CategoryRef" }, "type": "array" }, - "tracks": { - "description": "Tracks that matched the search term.", - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" + "fetched_at": { + "type": "string" }, - "users": { - "description": "User profiles that matched the search term.", + "shelves": { + "description": "Shelves are the merchandising rows the homepage currently features.\nThese rotate with promotions and seasons, so re-read them rather than\ncaching ids long-term.", "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" + "$ref": "#/definitions/sevennow.CategoryRef" }, "type": "array" + }, + "source_url": { + "type": "string" + }, + "store_id": { + "example": "39640", + "type": "string" } }, "type": "object" }, - "spotify.SearchResultSummary": { + "sevennow.CategoryItem": { "properties": { - "description": { - "description": "Description text of the result.", - "example": "The official podcast of comedian Joe Rogan.", + "age_restricted": { + "example": false, + "type": "boolean" + }, + "available": { + "example": true, + "type": "boolean" + }, + "available_quantity": { + "example": 100, + "type": "integer" + }, + "calories": { + "example": "360", "type": "string" }, - "externalUrl": { - "description": "Link to the result on open.spotify.com.", - "example": "https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk", + "image_url": { "type": "string" }, - "imageUrl": { - "description": "URL of the main image for the result.", - "example": "https://i.scdn.co/image/ab67656300005f1f54e6837957803d762a3f4d2b", + "name": { + "example": "Large Pizza - Ultimate Pepperoni", "type": "string" }, - "images": { - "description": "Images available for the result, with their sizes.", - "items": { - "$ref": "#/definitions/spotify.ImageAsset" - }, - "type": "array" + "price_cents": { + "example": 1299, + "type": "integer" }, - "publisher": { - "description": "Publisher or creator name of the result.", - "example": "Joe Rogan", + "product_id": { + "example": "178322-2-6-2", "type": "string" }, - "subtitle": { - "description": "Secondary line shown under the title, such as the artist or creator name.", - "example": "Joe Rogan", + "promo_description": { + "example": "On Sale $6.99", "type": "string" }, - "title": { - "description": "Result title as Spotify shows it.", - "example": "The Joe Rogan Experience", - "type": "string" + "promo_price_cents": { + "example": 699, + "type": "integer" }, - "type": { - "description": "Kind of result as Spotify labels it, for example `Podcast`.", - "example": "Podcast", + "subcategory": { + "example": "Pizza", "type": "string" }, - "uri": { - "description": "Spotify URI of the result.", - "example": "spotify:show:4rOoJ6Egrf8K2IrywzwOMk", + "upc": { + "example": "00052548537524", "type": "string" } }, "type": "object" }, - "spotify.ShowMetadataMeta": { + "sevennow.CategoryRef": { "properties": { - "appVersion": { - "example": "1.2.90.403.gf901f20f", + "display_order": { + "description": "DisplayOrder is the shelf's position on the store homepage. Only\nmeaningful for shelves.", + "example": 18, + "type": "integer" + }, + "id": { + "example": "48395", "type": "string" }, - "fetchedAt": { - "example": "2026-05-13T20:41:13Z", + "item_count": { + "description": "ItemCount is how many items the shelf holds upstream. Only populated\nfor shelves -- departments do not report a count here (use\nGET /7now/category's stats.total for those).", + "example": 25, + "type": "integer" + }, + "kind": { + "description": "Kind is `department` for the store's permanent browsable departments\n(Drinks, Snacks, Fresh Food, ...) or `shelf` for a merchandising row\nthe homepage is currently featuring (\"$2 Deals\", \"What's New\").\nBoth are valid category_id values; shelves rotate, departments do not.", + "example": "department", "type": "string" }, - "operationName": { - "example": "queryShowMetadataV2", + "name": { + "example": "Drinks", "type": "string" } }, "type": "object" }, - "spotify.ShowMetadataResponse": { + "sevennow.CategoryResponse": { "properties": { - "description": { - "example": "Tales from the Stinky Dragon is an actual-play comedy podcast.", - "type": "string" - }, - "externalUrl": { - "example": "https://open.spotify.com/show/1QQJ7FElLE0K6CIfZNCxU4", - "type": "string" - }, - "imageUrl": { - "example": "https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0", + "category_id": { + "example": "48423", "type": "string" }, - "images": { - "items": { - "$ref": "#/definitions/spotify.ImageAsset" - }, - "type": "array" - }, - "isExplicit": { - "example": false, - "type": "boolean" - }, - "mediaType": { - "example": "MIXED", + "fetched_at": { "type": "string" }, - "meta": { - "$ref": "#/definitions/spotify.ShowMetadataMeta" + "limit": { + "example": 20, + "type": "integer" }, - "name": { - "example": "Tales from the Stinky Dragon", - "type": "string" + "skip": { + "example": 0, + "type": "integer" }, - "publisher": { - "example": "Stinky Dragon", + "source_url": { "type": "string" }, - "totalEpisodes": { - "example": 202, - "type": "integer" + "stats": { + "$ref": "#/definitions/sevennow.CategoryStats" }, - "type": { - "example": "Podcast", + "store_id": { + "example": "39226", "type": "string" }, - "uri": { - "example": "spotify:show:1QQJ7FElLE0K6CIfZNCxU4", - "type": "string" + "subcategories": { + "items": { + "$ref": "#/definitions/sevennow.CategorySubcategory" + }, + "type": "array" } }, "type": "object" }, - "spotify.ShowRecommendationsMeta": { + "sevennow.CategoryStats": { "properties": { - "appVersion": { - "description": "Version of the Spotify web player the data was read from.", - "example": "1.2.90.403.gf901f20f", - "type": "string" + "available": { + "example": 99, + "type": "integer" }, - "count": { - "description": "Number of recommendations returned.", - "example": 10, + "out_of_stock": { + "example": 22, "type": "integer" }, - "fetchedAt": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-05-13T20:41:13Z", - "type": "string" + "percentage_available": { + "example": 82, + "type": "integer" }, - "operationName": { - "description": "Name of the Spotify web player operation that returned the data.", - "example": "internalLinkRecommenderShow", - "type": "string" + "total": { + "example": 121, + "type": "integer" } }, "type": "object" }, - "spotify.ShowRecommendationsResponse": { + "sevennow.CategorySubcategory": { "properties": { - "meta": { - "allOf": [ - { - "$ref": "#/definitions/spotify.ShowRecommendationsMeta" - } - ], - "description": "Details about this response." - }, - "recommendations": { - "description": "Related shows and episodes Spotify suggests.", + "items": { "items": { - "$ref": "#/definitions/spotify.RecommendationSummary" + "$ref": "#/definitions/sevennow.CategoryItem" }, "type": "array" }, - "uri": { - "description": "Spotify URI of the show the recommendations are for.", - "example": "spotify:show:1QQJ7FElLE0K6CIfZNCxU4", + "name": { + "example": "Pizza", "type": "string" } }, "type": "object" }, - "spotify.TrackMeta": { + "sevennow.Combo": { "properties": { - "appVersion": { - "description": "Version of the Spotify web player the data was read from.", - "example": "1.2.90.403.gf901f20f", + "available": { + "example": true, + "type": "boolean" + }, + "bundle_id": { + "example": "B00037", "type": "string" }, - "fetchedAt": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-05-13T20:41:10Z", + "description": { "type": "string" }, - "operationName": { - "description": "Name of the Spotify web player operation that returned the data.", - "example": "getTrack", + "image_url": { + "type": "string" + }, + "name": { + "example": "7NOW Combo Builder SLIN 22 - $6.99 Pizza", + "type": "string" + }, + "promo_id": { + "description": "PromoID is the promotion behind the bundle. Pass it to\nGET /7now/combo for the bundle's pick-one-from-each item groups, or\nto GET /7now/promotion for a flat list of every eligible item.", + "example": "6a849a8fa1df2409010c719f", "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "spotify.TrackRecommendedMeta": { + "sevennow.ComboGroup": { "properties": { - "appVersion": { - "description": "Version of the Spotify web player the data was read from.", - "example": "1.2.90.403.gf901f20f", - "type": "string" + "is_primary": { + "example": true, + "type": "boolean" }, - "count": { - "description": "Number of recommendations returned.", - "example": 10, - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/sevennow.DealItem" + }, + "type": "array" }, - "fetchedAt": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-05-13T20:41:12Z", + "name": { + "example": "Eligible Whole Pizzas", "type": "string" }, - "operationName": { - "description": "Name of the Spotify web player operation that returned the data.", - "example": "internalLinkRecommenderTrack", - "type": "string" + "quantity": { + "example": 1, + "type": "integer" } }, "type": "object" }, - "spotify.TrackRecommendedResponse": { + "sevennow.ComboResponse": { "properties": { - "limit": { - "description": "Maximum number of recommendations requested.", - "example": 10, + "count": { + "example": 1, "type": "integer" }, - "meta": { - "allOf": [ - { - "$ref": "#/definitions/spotify.TrackRecommendedMeta" - } - ], - "description": "Details about this response." + "fetched_at": { + "type": "string" }, - "recommendations": { - "description": "Items Spotify recommends for the track.", + "groups": { "items": { - "$ref": "#/definitions/spotify.RecommendationSummary" + "$ref": "#/definitions/sevennow.ComboGroup" }, "type": "array" }, - "uri": { - "description": "Spotify URI of the track the recommendations are for.", - "example": "spotify:track:4vGg44GdCw3X8i8r01XJH0", + "promo_id": { + "example": "6a849a8fa1df2409010c719f", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "store_id": { + "example": "39640", "type": "string" + }, + "terms": { + "$ref": "#/definitions/sevennow.ComboTerms" } }, "type": "object" }, - "spotify.TrackResponse": { + "sevennow.ComboTerms": { "properties": { - "album": { - "allOf": [ - { - "$ref": "#/definitions/spotify.SearchResultSummary" - } - ], - "description": "Album the track appears on." + "description": { + "example": "Any Whole Pizza $6.99 each", + "type": "string" }, - "artists": { - "description": "Artists credited on the track.", + "legal_terms": { + "type": "string" + }, + "title": { + "example": "$6.99 Pizza", + "type": "string" + } + }, + "type": "object" + }, + "sevennow.CombosResponse": { + "properties": { + "combos": { "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" + "$ref": "#/definitions/sevennow.Combo" }, "type": "array" }, - "discNumber": { - "description": "Disc number of the track within its album.", - "example": 1, - "type": "integer" - }, - "durationMs": { - "description": "Track length in milliseconds.", - "example": 234083, + "count": { + "example": 5, "type": "integer" }, - "externalUrl": { - "description": "Link to the track on open.spotify.com.", - "example": "https://open.spotify.com/track/4vGg44GdCw3X8i8r01XJH0", + "fetched_at": { "type": "string" }, - "id": { - "description": "Spotify ID of the track.", - "example": "4vGg44GdCw3X8i8r01XJH0", + "source_url": { "type": "string" }, - "imageUrl": { - "description": "URL of the track's cover image.", - "example": "https://i.scdn.co/image/ab67616d0000b273f377730d2a9c2e432139ac79", + "store_id": { + "example": "39640", "type": "string" - }, - "images": { - "description": "Cover images available for the track, with their sizes.", - "items": { - "$ref": "#/definitions/spotify.ImageAsset" - }, - "type": "array" - }, - "isExplicit": { - "description": "Whether Spotify marks the track as explicit.", + } + }, + "type": "object" + }, + "sevennow.DealItem": { + "properties": { + "age_restricted": { "example": false, "type": "boolean" }, - "isPlayable": { - "description": "Whether the track can be played.", + "available": { "example": true, "type": "boolean" }, - "meta": { - "allOf": [ - { - "$ref": "#/definitions/spotify.TrackMeta" - } - ], - "description": "Details about this response." + "available_quantity": { + "example": 5, + "type": "integer" }, - "name": { - "description": "Track title as Spotify shows it.", - "example": "Example Track", + "brand": { + "example": "Ben & Jerry's", "type": "string" }, - "playabilityReason": { - "description": "Reason code Spotify gives for the track's playability, for example `PLAYABLE`.", - "example": "PLAYABLE", + "calories": { + "example": "370", "type": "string" }, - "playcount": { - "description": "Number of times the track has been played, as Spotify shows it.", - "example": "13129249", + "category": { + "example": "Ice Cream", "type": "string" }, - "previewAudioUrl": { - "description": "URL of an audio preview of the track.", - "example": "https://p.scdn.co/mp3-preview/example", + "category_id": { + "example": "48396", "type": "string" }, - "previewAudioUrls": { - "description": "URLs of the audio previews available for the track.", - "example": [ - "https://p.scdn.co/mp3-preview/example" - ], - "items": { - "type": "string" - }, - "type": "array" + "image_url": { + "type": "string" }, - "shareUrl": { - "description": "Link to the track that Spotify offers for sharing.", - "example": "https://open.spotify.com/track/4vGg44GdCw3X8i8r01XJH0", + "name": { + "example": "Ben & Jerry's Sundae Cookie Vermont-ster 14oz", "type": "string" }, - "trackNumber": { - "description": "Position of the track within its album.", - "example": 7, + "price_cents": { + "example": 999, "type": "integer" }, - "type": { - "description": "Kind of item as Spotify labels it, for example `Track`.", - "example": "Track", + "product_id": { + "example": "191743-0-1", "type": "string" }, - "unplayabilityReasons": { - "description": "Reasons the track cannot be played, such as `not_available_in_region`.", - "example": [ - "not_available_in_region" - ], + "promos": { "items": { - "type": "string" + "$ref": "#/definitions/sevennow.DealPromo" }, "type": "array" }, - "uri": { - "description": "Spotify URI of the track.", - "example": "spotify:track:4vGg44GdCw3X8i8r01XJH0", + "subcategory": { + "example": "Ben & Jerry's", + "type": "string" + }, + "upc": { + "example": "00076840004294", "type": "string" } }, "type": "object" }, - "spotify.TrackSimilarAlbumsMeta": { + "sevennow.DealPromo": { "properties": { - "appVersion": { - "description": "Version of the Spotify web player the data was read from.", - "example": "1.2.90.403.gf901f20f", + "expiration_date": { + "example": "10/27/2026", "type": "string" }, - "count": { - "description": "Number of albums returned.", - "example": 10, + "id": { + "example": "6a9746d488cc35e1bbff1584", + "type": "string" + }, + "long_description": { + "type": "string" + }, + "promo_price_cents": { + "example": 700, "type": "integer" }, - "fetchedAt": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-05-13T20:41:12Z", + "promo_type": { + "example": "item", "type": "string" }, - "operationName": { - "description": "Name of the Spotify web player operation that returned the data.", - "example": "similarAlbumsBasedOnThisTrack", + "short_description": { + "example": "On Sale $7", + "type": "string" + }, + "start_date": { + "example": "09/01/2026", "type": "string" } }, "type": "object" }, - "spotify.TrackSimilarAlbumsResponse": { + "sevennow.DealsResponse": { "properties": { - "albums": { - "description": "Albums Spotify suggests as similar to the track.", - "items": { - "$ref": "#/definitions/spotify.SearchResultSummary" - }, - "type": "array" + "count": { + "example": 20, + "type": "integer" }, - "albumsOnly": { - "description": "Whether only album recommendations were requested.", + "fetched_at": { + "type": "string" + }, + "has_more": { "example": true, "type": "boolean" }, + "items": { + "items": { + "$ref": "#/definitions/sevennow.DealItem" + }, + "type": "array" + }, "limit": { - "description": "Maximum number of albums requested.", - "example": 10, + "example": 20, "type": "integer" }, - "meta": { - "allOf": [ - { - "$ref": "#/definitions/spotify.TrackSimilarAlbumsMeta" - } - ], - "description": "Details about this response." + "skip": { + "example": 0, + "type": "integer" }, - "uri": { - "description": "Spotify URI of the track the albums are similar to.", - "example": "spotify:track:4vGg44GdCw3X8i8r01XJH0", + "source_url": { + "type": "string" + }, + "stats": { + "$ref": "#/definitions/sevennow.DealsStats" + }, + "store_id": { + "example": "39640", "type": "string" + }, + "total": { + "example": 548, + "type": "integer" } }, "type": "object" }, - "spotify.UserProfileFollowersResponse": { + "sevennow.DealsStats": { "properties": { - "limit": { - "description": "Maximum number of followers requested.", - "example": 50, + "available": { + "example": 503, "type": "integer" }, - "meta": { - "allOf": [ - { - "$ref": "#/definitions/spotify.UserProfileMeta" - } - ], - "description": "Details about this response." - }, - "offset": { - "description": "Position of the first follower returned.", - "example": 0, + "out_of_stock": { + "example": 45, "type": "integer" }, - "profiles": { - "description": "Follower profiles returned.", - "items": { - "$ref": "#/definitions/spotify.UserProfileSummary" - }, - "type": "array" + "percentage_available": { + "example": 92, + "type": "integer" }, "total": { - "description": "Total number of followers the user has.", - "example": 998, + "example": 548, "type": "integer" + } + }, + "type": "object" + }, + "sevennow.NutritionEntry": { + "properties": { + "name": { + "example": "Total Fat", + "type": "string" }, - "uri": { - "description": "Spotify URI of the user.", - "example": "spotify:user:spotify", + "value": { + "example": "11.0Gram", "type": "string" + } + }, + "type": "object" + }, + "sevennow.NutritionGroup": { + "properties": { + "entries": { + "items": { + "$ref": "#/definitions/sevennow.NutritionEntry" + }, + "type": "array" }, - "username": { - "description": "Spotify username of the user.", - "example": "spotify", + "group": { + "example": "fat", "type": "string" } }, "type": "object" }, - "spotify.UserProfileMeta": { + "sevennow.Offer": { "properties": { - "appVersion": { - "description": "Version of the Spotify web player the data was read from.", - "example": "1.2.90.403.gf901f20f", + "button_text": { "type": "string" }, - "artistCount": { - "description": "Number of recently played artists returned.", - "example": 0, - "type": "integer" + "description": { + "example": "Any Whole Pizza $6.99 each", + "type": "string" }, - "fetchedAt": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-05-13T20:41:12Z", + "image_url": { "type": "string" }, - "operationName": { - "description": "Name of the Spotify web player operation that returned the data.", - "example": "userProfileView", + "legal_terms": { "type": "string" }, - "playlistCount": { - "description": "Number of playlists returned.", - "example": 10, - "type": "integer" + "name": { + "description": "Name is upstream's internal campaign name, e.g.\n\"US_7NOW_$6.99 Pizza_(8/21/26-1/5/2027)\". It usually encodes the run\ndates, which the banner record does not carry as fields.", + "example": "US_7NOW_$6.99 Pizza_(8/21/26-1/5/2027)", + "type": "string" }, - "profileCount": { - "description": "Number of user profiles returned.", - "example": 50, - "type": "integer" - } - }, - "type": "object" - }, - "spotify.UserProfilePlaylist": { - "properties": { - "externalUrl": { - "description": "Link to the playlist on open.spotify.com.", - "example": "https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M", + "offer_id": { + "example": "6a8879a4478334ff62f902d9-sE4Q1s2116PXg7di5yN2tt-7NOW_WEB", "type": "string" }, - "followersCount": { - "description": "Number of followers the playlist has.", - "example": 34324513, + "promo_ids": { + "description": "PromoIDs are the promotions this campaign points at. Usually one,\nbut a multi-product campaign (e.g. a brand takeover) genuinely\ncarries several -- upstream packs them into one comma-separated\nstring, which is split here so each id is individually usable. Pass\none to GET /7now/promotion for every item it covers, or to\nGET /7now/combo when the campaign advertises a bundle.", + "items": { + "type": "string" + }, + "type": "array" + }, + "sort_order": { + "example": 2, "type": "integer" }, - "id": { - "description": "Spotify ID of the playlist.", - "example": "37i9dQZF1DXcBWIGoYBM5M", + "target_entity": { + "description": "TargetEntity is what tapping the banner opens, e.g. `promo_items` or\n`Category`. A campaign with no destination reports `none` upstream\nand is omitted here.", + "example": "promo_items", "type": "string" }, - "imageUrl": { - "description": "URL of the playlist cover image.", - "example": "https://i.scdn.co/image/ab67706f0000000273f7bb6e77ec5e23d7840ae5", + "target_id": { + "description": "TargetID is the entity the banner opens when it is not a promotion --\nfor a `Category` banner this is a category_id GET /7now/category\naccepts.", + "example": "48395", "type": "string" }, - "isFollowing": { - "description": "Whether Spotify marks the playlist as followed.", - "example": false, - "type": "boolean" - }, - "name": { - "description": "Playlist title as Spotify shows it.", - "example": "Today’s Top Hits", + "target_url": { "type": "string" }, - "ownerName": { - "description": "Display name of the playlist owner.", - "example": "Spotify", + "title": { + "example": "$6.99 Pizza", "type": "string" }, - "ownerUri": { - "description": "Spotify URI of the playlist owner.", - "example": "spotify:user:spotify", + "web_image_url": { "type": "string" + } + }, + "type": "object" + }, + "sevennow.OffersResponse": { + "properties": { + "count": { + "example": 4, + "type": "integer" }, - "ownerUrl": { - "description": "Link to the playlist owner's profile on open.spotify.com.", - "example": "https://open.spotify.com/user/spotify", + "fetched_at": { "type": "string" }, - "ownerUsername": { - "description": "Spotify username of the playlist owner.", - "example": "spotify", + "offers": { + "items": { + "$ref": "#/definitions/sevennow.Offer" + }, + "type": "array" + }, + "source_url": { "type": "string" }, - "uri": { - "description": "Spotify URI of the playlist.", - "example": "spotify:playlist:37i9dQZF1DXcBWIGoYBM5M", + "store_id": { + "example": "39640", "type": "string" } }, "type": "object" }, - "spotify.UserProfilePlaylistsResponse": { + "sevennow.PopularResponse": { "properties": { - "limit": { - "description": "Maximum number of playlists requested.", - "example": 20, - "type": "integer" + "fetched_at": { + "type": "string" }, - "meta": { - "allOf": [ - { - "$ref": "#/definitions/spotify.UserProfileMeta" - } - ], - "description": "Details about this response." + "region": { + "description": "Region is upstream's own name for the index the terms came from,\ne.g. `NY_NE`, `W`, `SE`, or the vertical's own name when no store\nnarrowed it. It is the only signal upstream gives for which region a\nresult set covers.", + "example": "NY_NE", + "type": "string" }, - "offset": { - "description": "Position of the first playlist returned.", - "example": 0, - "type": "integer" + "source_url": { + "type": "string" }, - "publicPlaylists": { - "description": "Public playlists of the user.", + "store_id": { + "example": "39226", + "type": "string" + }, + "suggestions": { + "example": [ + "ice cream", + "coffee", + "pizza" + ], "items": { - "$ref": "#/definitions/spotify.UserProfilePlaylist" + "type": "string" }, "type": "array" }, - "totalPublicPlaylistsCount": { - "description": "Total number of public playlists the user has.", - "example": 1519, + "vertical": { + "description": "Vertical echoes back which index was read.", + "example": "convenience", + "type": "string" + } + }, + "type": "object" + }, + "sevennow.ProductPromo": { + "properties": { + "expiration_date": { + "example": "01/05/2027", + "type": "string" + }, + "id": { + "example": "6a849a8fa1df2409010c719f", + "type": "string" + }, + "long_description": { + "example": "$6.99 Whole Pizza!", + "type": "string" + }, + "promo_price_cents": { + "example": 699, "type": "integer" }, - "uri": { - "description": "Spotify URI of the user.", - "example": "spotify:user:spotify", + "short_description": { + "example": "On Sale $6.99", "type": "string" }, - "username": { - "description": "Spotify username of the user.", - "example": "spotify", + "start_date": { + "example": "08/21/2026", "type": "string" } }, "type": "object" }, - "spotify.UserProfileResponse": { + "sevennow.ProductResponse": { "properties": { - "allowFollows": { - "description": "Whether the profile allows other users to follow it.", - "example": true, + "age_restricted": { + "example": false, "type": "boolean" }, - "color": { - "description": "Accent color of the profile, as a number.", - "example": 16085920, - "type": "integer" + "allergens": { + "description": "Allergens is upstream's allergen statement, e.g. \"CONTAINS MILK, SOY,\nWHEAT.\" Absent on products with no declared allergens.", + "example": "CONTAINS MILK, SOY, WHEAT.", + "type": "string" }, - "externalUrl": { - "description": "Link to the user's profile on open.spotify.com.", - "example": "https://open.spotify.com/user/spotify", + "brand": { + "example": "Hot Food Pizza", "type": "string" }, - "followersCount": { - "description": "Number of followers the user has.", - "example": 12162371, - "type": "integer" + "calories": { + "example": "360", + "type": "string" }, - "followingCount": { - "description": "Number of accounts the user follows.", - "example": 327, - "type": "integer" + "category": { + "example": "Fresh Food", + "type": "string" }, - "hasSpotifyImage": { - "description": "Whether the profile has an image set on Spotify.", - "example": true, - "type": "boolean" + "category_id": { + "example": "48423", + "type": "string" }, - "hasSpotifyName": { - "description": "Whether the profile has a display name set on Spotify.", - "example": true, - "type": "boolean" + "description": { + "type": "string" }, - "imageUrl": { - "description": "URL of the user's profile image.", - "example": "https://i.scdn.co/image/ab6775700000ee8555c25988a6ac314394d3fbf5", + "fetched_at": { "type": "string" }, - "isCurrentUser": { - "description": "Whether Spotify marks the profile as the current user's own.", - "example": false, - "type": "boolean" + "flavor_choices": { + "items": { + "type": "string" + }, + "type": "array" }, - "isVerified": { - "description": "Whether Spotify shows the profile as verified.", - "example": true, - "type": "boolean" + "flavor_name": { + "example": "Pepperoni Pizza", + "type": "string" }, - "meta": { - "allOf": [ - { - "$ref": "#/definitions/spotify.UserProfileMeta" - } - ], - "description": "Details about this response." + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "ingredients": { + "description": "Ingredients is the declared ingredient list. Upstream splits it on\ncommas, so a parenthesised sub-list arrives as several entries.", + "items": { + "type": "string" + }, + "type": "array" + }, + "limit_per_order": { + "example": 100, + "type": "integer" }, "name": { - "description": "Display name of the user.", - "example": "Spotify", + "example": "Large Pizza - Ultimate Pepperoni", "type": "string" }, - "publicPlaylists": { - "description": "Public playlists of the user.", + "nutrition": { "items": { - "$ref": "#/definitions/spotify.UserProfilePlaylist" + "$ref": "#/definitions/sevennow.NutritionGroup" }, "type": "array" }, - "recentlyPlayedArtists": { - "description": "Artists the user played recently.", + "nutrition_disclaimers": { + "description": "NutritionDisclaimers carries upstream's own RDI/daily-value notices.", "items": { - "$ref": "#/definitions/spotify.UserProfileSummary" + "type": "string" }, "type": "array" }, - "showFollows": { - "description": "Whether Spotify shows the profile's follows publicly.", - "example": true, - "type": "boolean" + "product_id": { + "example": "178322-2-6-2", + "type": "string" }, - "topArtists": { - "allOf": [ - { - "$ref": "#/definitions/spotify.UserProfileTopArtists" - } - ], - "description": "Top artists section of the profile." + "promos": { + "items": { + "$ref": "#/definitions/sevennow.ProductPromo" + }, + "type": "array" }, - "totalPublicPlaylistsCount": { - "description": "Total number of public playlists the user has.", - "example": 1519, - "type": "integer" + "related_items": { + "items": { + "$ref": "#/definitions/sevennow.RelatedProduct" + }, + "type": "array" }, - "uri": { - "description": "Spotify URI of the user.", - "example": "spotify:user:spotify", + "size_choices": { + "items": { + "type": "string" + }, + "type": "array" + }, + "size_value": { + "example": "1WholePizza", "type": "string" }, - "username": { - "description": "Spotify username of the user.", - "example": "spotify", + "slin": { + "example": "178322", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "upc": { + "example": "00072180687340", "type": "string" } }, "type": "object" }, - "spotify.UserProfileSummary": { + "sevennow.PromotionDetail": { "properties": { - "color": { - "description": "Accent color of the profile, as a number.", - "example": 16085920, + "display_priority": { + "example": 2, "type": "integer" }, - "externalUrl": { - "description": "Link to the user's profile on open.spotify.com.", - "example": "https://open.spotify.com/user/example", + "expiration_date": { + "example": "2026-10-27T23:59:59.000Z", "type": "string" }, - "followersCount": { - "description": "Number of followers the user has.", - "example": 1000, - "type": "integer" + "id": { + "example": "6a9746d488cc35e1bbff1584", + "type": "string" }, - "imageUrl": { - "description": "URL of the user's profile image.", - "example": "https://i.scdn.co/image/ab6775700000ee8555c25988a6ac314394d3fbf5", + "long_description": { "type": "string" }, - "isFollowing": { - "description": "Whether Spotify marks the user as followed.", - "example": false, - "type": "boolean" + "mark_down_slins": { + "items": { + "type": "string" + }, + "type": "array" }, "name": { - "description": "Display name of the user.", - "example": "Example", + "example": "US_7N_Ben & Jerry's Pints $7_(9/1/2026-10/27/2026) - FOR 7NOW", "type": "string" }, - "uri": { - "description": "Spotify URI of the user.", - "example": "spotify:user:example", + "offer_type": { + "example": "item_discount", "type": "string" }, - "username": { - "description": "Spotify username of the user.", - "example": "example", + "promo_price_cents": { + "example": 700, + "type": "integer" + }, + "promo_type": { + "example": "item", + "type": "string" + }, + "short_description": { + "example": "On Sale $7", + "type": "string" + }, + "start_date": { + "example": "2026-09-01T00:00:00.000Z", "type": "string" + }, + "terms": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "spotify.UserProfileTopArtists": { + "sevennow.PromotionResponse": { "properties": { - "imageUrl": { - "description": "URL of the image shown for the section.", - "example": "https://i.scdn.co/image/ab6775700000ee8555c25988a6ac314394d3fbf5", + "count": { + "example": 14, + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "subtitle": { - "description": "Secondary line shown under the section heading.", - "example": "Only visible to the user", + "has_more": { + "example": false, + "type": "boolean" + }, + "items": { + "items": { + "$ref": "#/definitions/sevennow.DealItem" + }, + "type": "array" + }, + "limit": { + "example": 20, + "type": "integer" + }, + "promo_id": { + "example": "6a9746d488cc35e1bbff1584", "type": "string" }, - "title": { - "description": "Heading of the top artists section, as Spotify shows it.", - "example": "Top artists this month", + "promotion": { + "$ref": "#/definitions/sevennow.PromotionDetail" + }, + "skip": { + "example": 0, + "type": "integer" + }, + "source_url": { "type": "string" }, - "topArtistsPageUri": { - "description": "Spotify URI of the page that lists the user's top artists.", - "example": "spotify:user:spotify:top:artists", + "store_id": { + "example": "39640", "type": "string" + }, + "total": { + "example": 14, + "type": "integer" } }, "type": "object" }, - "spotify.albumResponseDoc": { + "sevennow.RelatedProduct": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "brand": { + "example": "Hot Food Pizza", + "type": "string" }, - "data": { - "$ref": "#/definitions/spotify.AlbumResponse" + "calories": { + "example": "550", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "category": { + "example": "Fresh Food", + "type": "string" + }, + "flavor_name": { + "example": "Sausage Breakfast Pizza", + "type": "string" + }, + "image_url": { + "type": "string" + }, + "name": { + "example": "Whole Breakfast Pizza - Sausage", + "type": "string" + }, + "product_id": { + "example": "170776-1-8", + "type": "string" + }, + "size_value": { + "example": "1WholePizza", + "type": "string" } }, "type": "object" }, - "spotify.artistAlbumsResponseDoc": { + "sevennow.SearchBrand": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "brand_id": { + "example": "262b9206-d316-3cf8-9ccf-a06998c5c0a1", + "type": "string" }, - "data": { - "$ref": "#/definitions/spotify.ArtistAlbumsResponse" + "brand_name": { + "example": "Pringles", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "is_sponsored": { + "example": false, + "type": "boolean" + }, + "logo_url": { + "type": "string" + }, + "rank": { + "example": 25, + "type": "integer" } }, "type": "object" }, - "spotify.artistCollectionResponseDoc": { + "sevennow.SearchItem": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "age_restricted": { + "example": false, + "type": "boolean" + }, + "available": { + "example": true, + "type": "boolean" + }, + "available_quantity": { + "example": 100, "type": "integer" }, - "data": { - "$ref": "#/definitions/spotify.ArtistCollectionResponse" + "bundle_id": { + "example": "B00037", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "spotify.artistResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "calories": { + "example": "360", + "type": "string" + }, + "category": { + "example": "Fresh Food", + "type": "string" + }, + "image_url": { + "type": "string" + }, + "list_price_cents": { + "example": 1299, "type": "integer" }, - "data": { - "$ref": "#/definitions/spotify.ArtistResponse" + "name": { + "example": "Large Pizza - Ultimate Pepperoni", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "spotify.audiobookChaptersResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "price_cents": { + "example": 1099, "type": "integer" }, - "data": { - "$ref": "#/definitions/spotify.AudiobookChaptersResponse" + "product_id": { + "example": "178322-2-6-2", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "spotify.audiobookResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "product_type": { + "example": "product", + "type": "string" + }, + "promo_description": { + "example": "On Sale $6.99", + "type": "string" + }, + "promo_price_cents": { + "example": 699, "type": "integer" }, - "data": { - "$ref": "#/definitions/spotify.AudiobookResponse" + "subcategory": { + "example": "Pizza", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "upc": { + "example": "00072180687340", + "type": "string" } }, "type": "object" }, - "spotify.browsePageResponseDoc": { + "sevennow.SearchResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "brands": { + "items": { + "$ref": "#/definitions/sevennow.SearchBrand" + }, + "type": "array" + }, + "count": { + "example": 20, "type": "integer" }, - "data": { - "$ref": "#/definitions/spotify.BrowsePageResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "has_more": { + "example": true, + "type": "boolean" + }, + "items": { + "items": { + "$ref": "#/definitions/sevennow.SearchItem" + }, + "type": "array" + }, + "limit": { + "example": 20, + "type": "integer" + }, + "query": { + "example": "pizza", + "type": "string" + }, + "skip": { + "example": 0, + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "store_id": { + "example": "39226", + "type": "string" + }, + "total": { + "example": 100, + "type": "integer" } }, "type": "object" }, - "spotify.browseSectionResponseDoc": { + "sevennow.Store": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "address": { + "example": "866 6TH AVE", + "type": "string" }, - "data": { - "$ref": "#/definitions/spotify.BrowseSectionResponse" + "alcohol_sale_hours": { + "description": "AlcoholSaleHours are the windows during which the store may sell\nalcohol, per day of week -- upstream's own encoding of the local\nlaw. A New York store, for instance, reports Sunday as two windows\n(00:00-02:00 and 08:00-23:59) and every other day as one.\n\nAn empty list means upstream publishes no windows for this store.\nThat is not the same as \"sells no alcohol\": Austin, TX stores return\nan empty list while New York stores return a full week.", + "items": { + "$ref": "#/definitions/sevennow.StoreAlcoholDay" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "brand": { + "description": "Brand is the banner the store trades under. 7-Eleven operates\nseveral (Speedway, Stripes); every store measured so far reports\n\"7-Eleven\", so treat a different value as possible rather than\nimpossible.", + "example": "7-Eleven", + "type": "string" + }, + "brand_logo_url": { + "type": "string" + }, + "city": { + "example": "New York", + "type": "string" + }, + "country": { + "example": "US", + "type": "string" + }, + "county": { + "example": "New York County", + "type": "string" + }, + "distance_miles": { + "example": 0.22, + "type": "number" + }, + "dma": { + "description": "DMA is the Nielsen Designated Market Area the store sits in, e.g.\n\"New York Ny\", \"Austin Tx\". It groups stores by media market rather\nthan by state or county.", + "example": "New York Ny", + "type": "string" + }, + "latitude": { + "example": 40.747508, + "type": "number" + }, + "longitude": { + "example": -73.989099, + "type": "number" + }, + "name": { + "example": "7-Eleven", + "type": "string" + }, + "state": { + "example": "NY", + "type": "string" + }, + "store_category": { + "example": "7now", + "type": "string" + }, + "store_id": { + "example": "39226", + "type": "string" + }, + "zip": { + "example": "10001", + "type": "string" } }, "type": "object" }, - "spotify.chartsResponseDoc": { + "sevennow.StoreAlcoholDay": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" - }, - "data": { - "$ref": "#/definitions/spotify.ChartResponse" + "day": { + "example": "Sunday", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "windows": { + "description": "Windows are that day's permitted selling periods. More than one\nmeans the day is split, as New York's Sunday rule does.", + "items": { + "$ref": "#/definitions/sevennow.StoreAlcoholWindow" + }, + "type": "array" } }, "type": "object" }, - "spotify.countryHubContentResponseDoc": { + "sevennow.StoreAlcoholWindow": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" - }, - "data": { - "$ref": "#/definitions/spotify.CountryHubContentResponse" + "end_time": { + "example": "2359", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "start_time": { + "example": "0800", + "type": "string" } }, "type": "object" }, - "spotify.countryHubResponseDoc": { + "sevennow.StoresResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "count": { + "example": 15, "type": "integer" }, - "data": { - "$ref": "#/definitions/spotify.CountryHubResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "h3_index": { + "description": "H3Index is the Uber H3 cell (resolution 7) upstream assigns to the\nresolved address -- a stable geospatial key for grouping or caching\nlookups by area.", + "example": "872a100d2ffffff", + "type": "string" + }, + "latitude": { + "example": 40.7480997, + "type": "number" + }, + "longitude": { + "example": -73.9849926, + "type": "number" + }, + "query": { + "example": "350 5th Ave, New York, NY", + "type": "string" + }, + "resolved_address": { + "example": "350 5th Ave, New York, NY 10118, USA", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "stores": { + "items": { + "$ref": "#/definitions/sevennow.Store" + }, + "type": "array" } }, "type": "object" }, - "spotify.episodeResponseDoc": { + "sevennow.SuggestResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "fetched_at": { + "type": "string" }, - "data": { - "$ref": "#/definitions/spotify.PodcastEpisodeResponse" + "query": { + "example": "chi", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "source_url": { + "type": "string" + }, + "suggestions": { + "example": [ + "chips ahoy", + "chips", + "chicken" + ], + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "spotify.homeResponseDoc": { + "sevennow.catalogResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/spotify.HomeResponse" + "$ref": "#/definitions/sevennow.CatalogResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -217982,14 +223940,14 @@ }, "type": "object" }, - "spotify.playlistResponseDoc": { + "sevennow.categoriesResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/spotify.PlaylistResponse" + "$ref": "#/definitions/sevennow.CategoriesResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -217997,14 +223955,14 @@ }, "type": "object" }, - "spotify.searchCatalogResponseDoc": { + "sevennow.categoryResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/spotify.SearchResponse" + "$ref": "#/definitions/sevennow.CategoryResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -218012,14 +223970,14 @@ }, "type": "object" }, - "spotify.searchResponseDoc": { + "sevennow.comboResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/spotify.SearchPodcastsResponse" + "$ref": "#/definitions/sevennow.ComboResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -218027,14 +223985,14 @@ }, "type": "object" }, - "spotify.showEpisodesResponseDoc": { + "sevennow.combosResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/spotify.PodcastEpisodesResponse" + "$ref": "#/definitions/sevennow.CombosResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -218042,14 +224000,14 @@ }, "type": "object" }, - "spotify.showRecommendationsResponseDoc": { + "sevennow.dealsResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/spotify.ShowRecommendationsResponse" + "$ref": "#/definitions/sevennow.DealsResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -218057,14 +224015,14 @@ }, "type": "object" }, - "spotify.showResponseDoc": { + "sevennow.offersResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/spotify.ShowMetadataResponse" + "$ref": "#/definitions/sevennow.OffersResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -218072,14 +224030,14 @@ }, "type": "object" }, - "spotify.trackRecommendedResponseDoc": { + "sevennow.popularResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/spotify.TrackRecommendedResponse" + "$ref": "#/definitions/sevennow.PopularResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -218087,14 +224045,14 @@ }, "type": "object" }, - "spotify.trackResponseDoc": { + "sevennow.productResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/spotify.TrackResponse" + "$ref": "#/definitions/sevennow.ProductResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -218102,14 +224060,14 @@ }, "type": "object" }, - "spotify.trackSimilarAlbumsResponseDoc": { + "sevennow.promotionResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/spotify.TrackSimilarAlbumsResponse" + "$ref": "#/definitions/sevennow.PromotionResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -218117,14 +224075,14 @@ }, "type": "object" }, - "spotify.userProfileFollowersResponseDoc": { + "sevennow.searchResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/spotify.UserProfileFollowersResponse" + "$ref": "#/definitions/sevennow.SearchResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -218132,14 +224090,14 @@ }, "type": "object" }, - "spotify.userProfilePlaylistsResponseDoc": { + "sevennow.storesResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/spotify.UserProfilePlaylistsResponse" + "$ref": "#/definitions/sevennow.StoresResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -218147,14 +224105,14 @@ }, "type": "object" }, - "spotify.userProfileResponseDoc": { + "sevennow.suggestResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/spotify.UserProfileResponse" + "$ref": "#/definitions/sevennow.SuggestResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -218162,12 +224120,9 @@ }, "type": "object" }, - "standard.AuthorArticle": { + "sfgate.AuthorArticle": { "properties": { - "section": { - "type": "string" - }, - "section_url": { + "summary": { "type": "string" }, "title": { @@ -218179,15 +224134,21 @@ }, "type": "object" }, - "standard.AuthorResponse": { + "sfgate.AuthorResponse": { "properties": { "articles": { "items": { - "$ref": "#/definitions/standard.AuthorArticle" + "$ref": "#/definitions/sfgate.AuthorArticle" }, "type": "array" }, - "bio": { + "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "image_url": { "type": "string" }, "job_title": { @@ -218196,11 +224157,11 @@ "name": { "type": "string" }, - "slug": { - "type": "string" - }, - "twitter": { - "type": "string" + "same_as": { + "items": { + "type": "string" + }, + "type": "array" }, "url": { "type": "string" @@ -218208,2073 +224169,1440 @@ }, "type": "object" }, - "starbucks.Amenity": { + "shakeshack.DeliveryFeeTier": { "properties": { - "code": { - "type": "string" + "amount": { + "example": 1.99, + "type": "number" + }, + "subtotal_minimum": { + "example": 12.01, + "type": "number" + } + }, + "type": "object" + }, + "shakeshack.LocationSummary": { + "properties": { + "latitude": { + "description": "Latitude/Longitude are present only for entries sourced from the map\nsection (source \"map\"). Fetch GET /shakeshack/store for coordinates\non a \"list\"-sourced entry.", + "example": 29.6856442, + "type": "number" + }, + "longitude": { + "example": -95.4574726, + "type": "number" }, "name": { + "example": "Meyerland", + "type": "string" + }, + "path": { + "description": "Path is the value GET /shakeshack/store takes, e.g.\n\"location/meyerland-tx\" or \"node/15226\".", + "example": "location/meyerland-tx", + "type": "string" + }, + "source": { + "description": "Source is which section of the /locations page this entry was\nparsed from, not a business classification: \"list\" is Shake Shack's\nown \"Full List of Locations\" text index (structured address, no\ncoordinates); \"map\" is the interactive map's pin data (coordinates,\nno structured address). Both round-trip through GET /shakeshack/store\nby path.", + "example": "list", "type": "string" } }, "type": "object" }, - "starbucks.MenuCategory": { + "shakeshack.LocationsResponse": { "properties": { - "children": { + "count": { + "example": 100, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "locations": { "items": { - "$ref": "#/definitions/starbucks.MenuCategory" + "$ref": "#/definitions/shakeshack.LocationSummary" }, "type": "array" }, - "display_order": { + "page": { + "example": 1, "type": "integer" }, - "hero_image_url": { + "source_url": { "type": "string" }, - "image_url": { - "type": "string" + "total": { + "example": 1322, + "type": "integer" }, + "total_pages": { + "example": 14, + "type": "integer" + } + }, + "type": "object" + }, + "shakeshack.MenuCategory": { + "properties": { "name": { + "example": "Burgers & More", "type": "string" }, "products": { "items": { - "$ref": "#/definitions/starbucks.MenuProduct" + "$ref": "#/definitions/shakeshack.MenuProduct" }, "type": "array" } }, "type": "object" }, - "starbucks.MenuProduct": { + "shakeshack.MenuProduct": { "properties": { - "availability": { - "description": "Availability is \"Available\" on the unscoped menu; a store-scoped\nmenu also returns \"NotAvailableHere\" for items that store lacks.", + "allergens": { + "description": "Allergens is upstream's own comma-separated free text, passed through\nas published rather than split into a fixed list.", + "example": "dairy allergy, egg allergy, soy allergy, wheat allergy, sesame allergy", "type": "string" }, - "default_size": { + "badge": { + "description": "Badge is a short promotional/dietary label Shake Shack publishes for\nsome items, e.g. \"LIMITED TIME ONLY\", \"VEGETARIAN\".", + "example": "VEGETARIAN", "type": "string" }, - "default_size_sku": { - "type": "string" + "base_calories": { + "description": "BaseCalories is 0 when upstream reports none.", + "example": 880, + "type": "integer" }, - "display_order": { + "chain_product_id": { + "example": 1119032, "type": "integer" }, - "form": { - "description": "Form is the normalized, lowercase form slug (\"iced\", \"hot\",\n\"single\", \"packaged\", \"whole-bean\", \"via\") taken from the product's\nown menu URI. It is the second path segment Product requires.", + "description": { "type": "string" }, "image_url": { "type": "string" }, - "menu_uri": { - "type": "string" + "modifiers": { + "items": { + "$ref": "#/definitions/shakeshack.ModifierGroup" + }, + "type": "array" }, "name": { + "example": "West Coast Burger", "type": "string" }, - "product_detail_url": { - "type": "string" - }, - "product_number": { - "type": "string" - }, - "product_type": { - "description": "ProductType is Starbucks' own coarse classification: \"Beverage\",\n\"Food\", or \"Coffee\".", - "type": "string" - }, - "sizes": { - "items": { - "type": "string" - }, - "type": "array" + "price": { + "description": "Price is this item's base price. Many items price entirely through a\nrequired size/flavor modifier rather than a base price, so 0 is\ncommon here -- not a parsing gap (same shape as this repo's other\nOlo-backed menus, e.g. Jimmy John's).", + "example": 0, + "type": "number" } }, "type": "object" }, - "starbucks.MenuResponse": { + "shakeshack.MenuResponse": { "properties": { "categories": { "items": { - "$ref": "#/definitions/starbucks.MenuCategory" + "$ref": "#/definitions/shakeshack.MenuCategory" }, "type": "array" }, "category_count": { - "description": "CategoryCount counts top-level categories; ProductCount counts\ndistinct products anywhere in the tree.", + "example": 11, "type": "integer" }, "fetched_at": { "type": "string" }, - "market": { - "type": "string" + "location_id": { + "example": 14992, + "type": "integer" }, "product_count": { + "example": 76, "type": "integer" }, "source_url": { "type": "string" - }, - "store_number": { - "type": "string" } }, "type": "object" }, - "starbucks.NearestStoreResponse": { + "shakeshack.ModifierChoice": { "properties": { - "distance_miles": { - "type": "number" - }, - "fetched_at": { - "type": "string" + "calorie_delta": { + "example": -1, + "type": "integer" }, - "found": { - "description": "Found is false when Starbucks reports no nearest store for the\npoint at all.", - "type": "boolean" + "chain_option_id": { + "example": 213463, + "type": "integer" }, - "lat": { - "type": "number" + "groups": { + "items": { + "$ref": "#/definitions/shakeshack.ModifierGroup" + }, + "type": "array" }, - "lng": { - "type": "number" + "is_default": { + "type": "boolean" }, - "market": { + "name": { + "example": "No Lettuce", "type": "string" }, - "nearest_latitude": { - "type": "number" + "option_id": { + "example": 4127201667, + "type": "integer" }, - "nearest_longitude": { + "price": { + "example": 0, "type": "number" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "starbucks.Nutrition": { + "shakeshack.ModifierGroup": { "properties": { - "calories": { - "type": "string" - }, - "calories_from_fat": { - "type": "string" + "chain_modifier_id": { + "example": 38041, + "type": "integer" }, - "facts": { + "choices": { "items": { - "$ref": "#/definitions/starbucks.NutritionFact" + "$ref": "#/definitions/shakeshack.ModifierChoice" }, "type": "array" }, - "serving_size": { + "group_id": { + "example": 890226904, + "type": "integer" + }, + "name": { + "example": "Remove Lettuce:", + "type": "string" + }, + "type": { + "example": "REMOVAL", "type": "string" } }, "type": "object" }, - "starbucks.NutritionFact": { + "shakeshack.NearbyAddress": { "properties": { - "daily_percent_value": { + "city": { + "example": "New York", "type": "string" }, - "name": { + "postal_code": { + "example": "10036", "type": "string" }, - "subfacts": { - "items": { - "$ref": "#/definitions/starbucks.NutritionFact" - }, - "type": "array" - }, - "unit_of_measure": { + "region": { + "example": "NY", "type": "string" }, - "value": { + "street": { + "example": "691 Eighth Avenue", "type": "string" } }, "type": "object" }, - "starbucks.NutritionModifier": { + "shakeshack.NearbyHours": { "properties": { - "quantity": { - "description": "Quantity is how many of this modifier. Defaults to 1. For countable\nmodifiers (formCode \"qty\" -- espresso shots, syrup pumps) this is the\ndial that actually moves the numbers.", - "example": 3, - "type": "integer" + "closes": { + "example": "23:00", + "type": "string" }, - "replaced_sku": { - "description": "ReplacedSKU is the default modifier this one substitutes, when the\ncaller is swapping a pick-one slot such as the milk. Leave empty for\na modifier that is not replacing anything.", + "day_of_week": { + "example": "Monday", "type": "string" }, - "sku": { - "description": "SKU is the modifier's sku, from a product size's default_recipe[].sku\nor from an option in the product's options tree (e.g. a different\nmilk).", - "example": "55", + "opens": { + "example": "10:00", "type": "string" } }, "type": "object" }, - "starbucks.NutritionOption": { + "shakeshack.NearbyLocation": { "properties": { - "form": { - "example": "hot", - "type": "string" - }, - "market": { - "description": "Market selects which country site answers. Defaults to us.", - "example": "us", - "type": "string" + "address": { + "$ref": "#/definitions/shakeshack.NearbyAddress" }, - "modifiers": { - "description": "Modifiers is the COMPLETE build, not a delta from the default. Start\nfrom the size's default_recipe (returned by /starbucks/product),\nchange what you want, and send the whole list back. An empty list is\nrejected by Starbucks with \"Modifiers list required\".", + "delivery_fees": { "items": { - "$ref": "#/definitions/starbucks.NutritionModifier" + "$ref": "#/definitions/shakeshack.DeliveryFeeTier" }, "type": "array" }, - "product_number": { - "description": "ProductNumber and Form identify the product. Only the four\ncombinations in dynamicNutritionProducts are supported upstream.", - "example": "406", - "type": "string" - }, - "size_sku": { - "description": "SizeSKU is the sku of the size being built, from a /starbucks/product\nresult's sizes[].sku.", - "example": "93", - "type": "string" - } - }, - "type": "object" - }, - "starbucks.NutritionResponse": { - "properties": { - "fetched_at": { - "type": "string" - }, - "form": { - "type": "string" - }, - "market": { - "type": "string" + "distance_miles": { + "example": 0.19, + "type": "number" }, - "modifiers": { + "fulfillment_modes": { + "description": "FulfillmentModes are the handoff modes this location currently has\nenabled, e.g. \"dine_in\", \"pickup\", \"delivery\", \"curbside\",\n\"drive_thru\", \"walk_up\".", "items": { - "$ref": "#/definitions/starbucks.NutritionModifier" + "type": "string" }, "type": "array" }, - "product_number": { - "type": "string" - }, - "size_sku": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "values": { + "hours": { + "description": "Hours is the current rolling week, Monday-first.", "items": { - "$ref": "#/definitions/starbucks.NutritionValue" + "$ref": "#/definitions/shakeshack.NearbyHours" }, "type": "array" - } - }, - "type": "object" - }, - "starbucks.NutritionValue": { - "properties": { - "key": { - "type": "string" }, - "name": { - "type": "string" + "is_online_ordering_available": { + "type": "boolean" }, - "unit_of_measure": { - "type": "string" + "latitude": { + "example": 40.7584054, + "type": "number" }, - "value": { - "type": "string" - } - }, - "type": "object" - }, - "starbucks.PickUpOption": { - "properties": { - "available": { - "type": "boolean" + "location_id": { + "example": 14992, + "type": "integer" }, - "code": { - "type": "string" + "longitude": { + "example": -73.9891734, + "type": "number" }, "name": { + "example": "Theater District", "type": "string" - } - }, - "type": "object" - }, - "starbucks.ProductOptionGroup": { - "properties": { - "name": { + }, + "phone_number": { + "example": "(646) 435-0135", "type": "string" }, - "type": { + "timezone": { + "example": "America/New_York", "type": "string" } }, "type": "object" }, - "starbucks.ProductResponse": { + "shakeshack.NearbyResponse": { "properties": { - "description": { - "type": "string" + "count": { + "example": 10, + "type": "integer" }, "fetched_at": { "type": "string" }, - "form": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "in_catalog": { - "type": "boolean" - }, - "market": { - "type": "string" - }, - "name": { - "type": "string" - }, - "options": { - "description": "Options are the customization choices Starbucks offers for this\nproduct, e.g. milk, syrups, espresso shots.", - "items": { - "$ref": "#/definitions/starbucks.ProductOptionGroup" - }, - "type": "array" - }, - "product_number": { - "type": "string" - }, - "product_type": { - "type": "string" - }, - "sizes": { + "locations": { "items": { - "$ref": "#/definitions/starbucks.ProductSize" + "$ref": "#/definitions/shakeshack.NearbyLocation" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "star_cost": { + "radius_miles": { + "example": 15, "type": "integer" }, - "store_number": { + "source_url": { "type": "string" } }, "type": "object" }, - "starbucks.ProductSize": { + "shakeshack.StoreAddress": { "properties": { - "default_recipe": { - "description": "DefaultRecipe is the size's standard build -- the modifiers a plain\norder of this size already includes. It is exposed because it is the\nrequired input to the nutrition-calculate endpoint: that endpoint\nwants the FULL modifier set, not a delta, so a caller starts from\nthis list, changes what they want, and posts the whole thing back.", - "items": { - "$ref": "#/definitions/starbucks.RecipeModifier" - }, - "type": "array" + "city": { + "example": "Houston", + "type": "string" }, - "display_name": { + "country": { + "example": "United States", "type": "string" }, - "nutrition": { - "$ref": "#/definitions/starbucks.Nutrition" + "line1": { + "example": "8815 W Loop S", + "type": "string" }, - "size_code": { + "postal_code": { + "example": "77096", "type": "string" }, - "sku": { + "region": { + "example": "TX", "type": "string" } }, "type": "object" }, - "starbucks.RecipeModifier": { + "shakeshack.StoreHours": { "properties": { - "form_code": { - "description": "FormCode describes how the modifier behaves: \"one\" is a\npick-exactly-one slot (the milk), \"qty\" is a countable (espresso\nshots, syrup pumps), \"modifier\"/\"yes-no\" are toggles.", - "type": "string" + "closed": { + "description": "Closed is true when Shake Shack publishes the day with no open\ninterval.", + "example": false, + "type": "boolean" }, - "name": { + "closes": { + "example": "23:00", "type": "string" }, - "option_product_number": { - "description": "OptionProductNumber identifies the option in the product's own\noptions tree.", + "day_of_week": { + "example": "Monday", "type": "string" }, - "sku": { - "description": "SKU is the value to send as a nutrition-calculate modifier sku.", + "opens": { + "example": "10:00", "type": "string" } }, "type": "object" }, - "starbucks.Store": { + "shakeshack.StoreResponse": { "properties": { "address": { + "$ref": "#/definitions/shakeshack.StoreAddress" + }, + "fetched_at": { "type": "string" }, - "amenities": { - "description": "Amenities are the store's features, each with Starbucks' own code\nand its human-readable name.", + "hours": { + "description": "Hours is Monday-first. Omitted entirely for locations that publish no\nweekly schedule (seen on venue/kiosk-shaped locations, e.g. inside a\nstadium).", "items": { - "$ref": "#/definitions/starbucks.Amenity" + "$ref": "#/definitions/shakeshack.StoreHours" }, "type": "array" }, - "city": { - "type": "string" - }, - "country": { - "type": "string" - }, - "distance_miles": { - "type": "number" - }, - "guest_ordering": { - "type": "boolean" - }, - "hours_status": { - "type": "string" - }, - "id": { - "type": "string" - }, - "is_open_24_hours": { - "type": "boolean" - }, "latitude": { + "example": 29.6856442, "type": "number" }, "longitude": { + "example": -95.4574726, "type": "number" }, - "mobile_ordering_availability": { - "description": "MobileOrderingAvailability is the upstream's own enum-ish state for\nMobile Order & Pay at this store, e.g. \"READY\" / \"NOT_READY\". It is\na live readiness state, not a static capability -- a store that\nsupports mobile ordering still reports NOT_READY while closed. Use\nthe \"XO\" amenity code for the static capability.", - "type": "string" - }, "name": { + "example": "Meyerland", "type": "string" }, - "open": { - "type": "boolean" - }, - "open_status": { - "type": "string" - }, - "ownership_type_code": { - "description": "OwnershipTypeCode distinguishes company-operated (\"CO\") from\nlicensed stores, which is why an airport or grocery-store kiosk\nbehaves differently from a standalone café.", - "type": "string" - }, - "phone": { - "type": "string" - }, - "pick_up_options": { - "description": "PickUpOptions are the fulfillment modes the store supports, each\nwith its own live availability flag.", - "items": { - "$ref": "#/definitions/starbucks.PickUpOption" - }, - "type": "array" - }, - "postal_code": { - "type": "string" - }, - "schedule": { - "description": "Schedule is the store's weekly opening hours, Sunday-first as the\nupstream returns them.", + "order_types": { + "description": "OrderTypes are the fulfillment types Shake Shack publishes for this\nlocation, e.g. \"Dine In\", \"Delivery\".", "items": { - "$ref": "#/definitions/starbucks.StoreDay" + "type": "string" }, "type": "array" }, - "state": { - "type": "string" - }, - "store_number": { - "description": "StoreNumber is Starbucks' own public store identifier, e.g.\n\"101-54\". ID is the locator's separate internal numeric id.", - "type": "string" - }, - "time_zone": { - "type": "string" - } - }, - "type": "object" - }, - "starbucks.StoreDay": { - "properties": { - "day_of_week": { - "type": "string" - }, - "holiday": { - "type": "string" - }, - "hours": { - "type": "string" - }, - "open": { - "type": "boolean" - } - }, - "type": "object" - }, - "starbucks.StoreResponse": { - "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "lat": { - "type": "number" - }, - "lng": { - "type": "number" - }, - "market": { + "path": { + "description": "Path is the canonical page path this record resolved to, e.g.\n\"location/meyerland-tx\" -- present even when the requested path was\nthe legacy \"node/\" form of the same location.", "type": "string" }, - "place": { + "phone_number": { + "example": "281-819-8763", "type": "string" }, - "place_not_found": { - "description": "PlaceNotFound is true when Starbucks could not geocode Place at all.\nThe upstream signals this with a distinct object shape rather than an\nempty list, so a genuine no-results answer stays distinguishable from\nparser drift.", - "type": "boolean" - }, - "result_capped": { - "description": "ResultCapped is true when the upstream returned its hard 50-result\nceiling, meaning more stores may exist near this point that the\nupstream will not return under any pagination parameter.", - "type": "boolean" - }, "source_url": { "type": "string" }, - "stores": { - "items": { - "$ref": "#/definitions/starbucks.Store" - }, - "type": "array" + "store_id": { + "description": "StoreID is the underlying Drupal node id, e.g. \"51351\" from\n/node/51351. Present whenever the page's own settings expose it.", + "example": "51351", + "type": "string" } }, "type": "object" }, - "starbucks.menuResponseDoc": { + "shakeshack.locationsResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/starbucks.MenuResponse" + "$ref": "#/definitions/shakeshack.LocationsResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "starbucks.nearestStoreResponseDoc": { + "shakeshack.menuResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/starbucks.NearestStoreResponse" + "$ref": "#/definitions/shakeshack.MenuResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "starbucks.nutritionResponseDoc": { + "shakeshack.nearbyResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/starbucks.NutritionResponse" + "$ref": "#/definitions/shakeshack.NearbyResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "starbucks.productResponseDoc": { + "shakeshack.storeResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/starbucks.ProductResponse" + "$ref": "#/definitions/shakeshack.StoreResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "starbucks.storesResponseDoc": { + "shein.AggregationFilters": { "properties": { - "code": { - "example": 200, - "type": "integer" + "category": { + "$ref": "#/definitions/shein.FacetCategory" }, - "data": { - "$ref": "#/definitions/starbucks.StoreResponse" + "filters": { + "items": { + "$ref": "#/definitions/shein.FacetGroup" + }, + "type": "array" }, - "msg": { - "example": "OK", + "keyword": { + "example": "dress", "type": "string" - } - }, - "type": "object" - }, - "startpage.suggestResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/suggest.Response" + "max_price": { + "example": "569", + "type": "string" }, - "msg": { - "example": "OK", + "min_price": { + "example": "18", "type": "string" } }, "type": "object" }, - "steam.AchievementsResponse": { + "shein.AutocompleteResponse": { "properties": { - "achievements": { - "description": "Achievements of the app with their global unlock percentage, most unlocked first.", + "suggestions": { "items": { - "$ref": "#/definitions/steam.GlobalAchievement" + "$ref": "#/definitions/shein.AutocompleteSuggestion" }, "type": "array" }, - "appid": { - "description": "Steam app id the achievements belong to.", - "type": "string" - }, - "count": { - "description": "Number of achievements returned.", - "type": "integer" - }, - "source_url": { - "description": "URL the data was read from.", + "word": { + "example": "dres", "type": "string" } }, "type": "object" }, - "steam.AppDetails": { + "shein.AutocompleteSuggestion": { "properties": { - "achievements_total": { - "description": "Total number of achievements the app has.", - "type": "integer" - }, - "appid": { - "description": "Steam app id.", - "type": "integer" - }, - "background": { - "description": "URL of the background image on the store page.", - "type": "string" - }, - "capsule_image": { - "description": "URL of the capsule image used on store listings.", - "type": "string" - }, - "categories": { - "description": "Steam store categories assigned to the app, each with an id and a name.", - "items": { - "$ref": "#/definitions/steam.IDName" - }, - "type": "array" - }, - "content_descriptor_ids": { - "description": "ContentDescriptorIDs are Steam's mature-content flag ids (e.g. 1 nudity, 3\nadult content, 5 strong violence) — the store's own age/adult markers.", - "items": { - "type": "integer" - }, - "type": "array" - }, - "controller_support": { - "description": "Level of controller support Steam lists for the app.", - "type": "string" - }, - "developers": { - "description": "Names of the developers of the app.", - "items": { - "type": "string" - }, - "type": "array" - }, - "dlc": { - "description": "Steam app ids of the downloadable content for the app.", - "items": { - "type": "integer" - }, - "type": "array" - }, - "genres": { - "description": "Genres assigned to the app, each with an id and a name.", - "items": { - "$ref": "#/definitions/steam.IDName" - }, - "type": "array" - }, - "header_image": { - "description": "URL of the header image on the store page.", - "type": "string" - }, - "is_free": { - "description": "Whether the app is free to play or free to own.", - "type": "boolean" - }, - "metacritic": { - "allOf": [ - { - "$ref": "#/definitions/steam.Metacritic" - } - ], - "description": "Metacritic score and link for the app. Omitted when the store shows none." - }, - "movies": { - "description": "Number of videos on the store page.", - "type": "integer" - }, - "name": { - "description": "Name of the app on the Steam store.", - "type": "string" - }, - "packages": { - "description": "Ids of the Steam packages that include the app. Use them with the package endpoint.", - "items": { - "type": "integer" - }, - "type": "array" - }, - "platforms": { - "allOf": [ - { - "$ref": "#/definitions/steam.Platforms" - } - ], - "description": "Operating systems the app supports." - }, - "price_overview": { - "allOf": [ - { - "$ref": "#/definitions/steam.Price" - } - ], - "description": "Current price of the app. Omitted when the store shows no price." - }, - "publishers": { - "description": "Names of the publishers of the app.", - "items": { - "type": "string" - }, - "type": "array" - }, - "recommendations": { - "description": "Total number of user recommendations the app has on Steam.", - "type": "integer" - }, - "release_date": { - "allOf": [ - { - "$ref": "#/definitions/steam.AppRelease" - } - ], - "description": "Release information of the app." - }, - "required_age": { - "description": "Minimum age in years that Steam requires to view the app.", - "type": "integer" - }, - "screenshots": { - "description": "Number of screenshots on the store page.", - "type": "integer" - }, - "short_description": { - "description": "Short description of the app from the store page, as plain text.", - "type": "string" - }, - "source_url": { - "description": "URL the data was read from.", - "type": "string" - }, - "supported_languages": { - "description": "Languages the app supports, as listed on the store page.", + "type": { + "example": "common", "type": "string" }, - "type": { - "description": "Kind of store item, such as `game`.", + "word": { + "example": "Dress For Women", "type": "string" }, - "website": { - "description": "URL of the app's official website.", + "word_id": { + "example": "163784", "type": "string" } }, "type": "object" }, - "steam.AppRelease": { + "shein.BrandCategory": { "properties": { - "coming_soon": { - "description": "Whether the app has not been released yet.", - "type": "boolean" + "cat_id": { + "example": "2030", + "type": "string" }, - "date": { - "description": "Release date as the store displays it.", + "category_name": { + "example": "Women Clothing", "type": "string" } }, "type": "object" }, - "steam.CategoryBrowseResponse": { + "shein.BrandsResponse": { "properties": { - "count": { - "type": "integer" - }, - "items": { + "categories": { "items": { - "$ref": "#/definitions/steam.CategoryItem" + "$ref": "#/definitions/shein.BrandCategory" }, "type": "array" - }, - "slug": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "start": { - "type": "integer" - }, - "tag_id": { - "type": "integer" - }, - "tag_name": { - "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "steam.CategoryItem": { + "shein.CategoriesResponse": { "properties": { - "appid": { - "type": "integer" - }, - "developers": { + "categories": { "items": { - "type": "string" + "$ref": "#/definitions/shein.CategoryNode" }, "type": "array" }, - "name": { - "type": "string" - }, - "platforms": { - "$ref": "#/definitions/steam.Platforms" - }, - "price_overview": { - "$ref": "#/definitions/steam.Price" - }, - "publishers": { + "filters": { "items": { - "type": "string" + "$ref": "#/definitions/shein.Filter" }, "type": "array" - }, - "release_date_unix": { - "type": "integer" - }, - "review_count": { - "type": "integer" - }, - "review_percent_positive": { - "type": "integer" - }, - "review_summary": { + } + }, + "type": "object" + }, + "shein.CategoryFiltersResponse": { + "properties": { + "cat_id": { + "example": "1766", "type": "string" }, - "short_description": { + "currency": { + "example": "HK$", "type": "string" }, - "tags": { + "filters": { "items": { - "$ref": "#/definitions/steam.WeightedTag" + "$ref": "#/definitions/shein.Filter" }, "type": "array" }, - "type": { - "type": "integer" + "max_price": { + "example": 569, + "type": "number" }, - "url": { - "type": "string" + "min_price": { + "example": 18, + "type": "number" } }, "type": "object" }, - "steam.ChartRank": { + "shein.CategoryGoodsResponse": { "properties": { - "appid": { - "type": "integer" - }, - "concurrent_in_game": { - "type": "integer" - }, - "last_week_rank": { - "type": "integer" + "cat_id": { + "example": "1727", + "type": "string" }, - "name": { + "category_name": { + "example": "Dresses", "type": "string" }, - "peak_in_game": { + "page": { + "example": 1, "type": "integer" }, - "rank": { - "type": "integer" + "products": { + "items": { + "$ref": "#/definitions/shein.Product" + }, + "type": "array" }, - "review_summary": { - "type": "string" + "total": { + "example": 1187, + "type": "integer" } }, "type": "object" }, - "steam.ChartResponse": { + "shein.CategoryNavResponse": { "properties": { - "chart": { + "cat_id": { + "example": "1766", "type": "string" }, - "count": { - "type": "integer" - }, - "enriched": { - "type": "boolean" - }, - "ranks": { + "navs": { "items": { - "$ref": "#/definitions/steam.ChartRank" + "$ref": "#/definitions/shein.NavTab" }, "type": "array" - }, - "source_url": { - "type": "string" - }, - "updated_unix": { - "type": "integer" } }, "type": "object" }, - "steam.CommunityRecommendationsResponse": { + "shein.CategoryNode": { "properties": { - "count": { - "type": "integer" + "cat_id": { + "example": "3638", + "type": "string" }, - "review_filter": { + "category_name": { + "example": "False Eyelashes & Adhesives", "type": "string" }, - "reviews": { + "children": { "items": { - "$ref": "#/definitions/steam.CommunityReview" + "$ref": "#/definitions/shein.CategoryNode" }, "type": "array" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "steam.CommunityReview": { + "shein.ColorVariant": { "properties": { - "appid": { - "type": "string" - }, - "author_name": { - "type": "string" - }, - "author_profile_url": { + "color_image": { "type": "string" }, - "helpful": { + "color_name": { + "example": "Blue", "type": "string" }, - "playtime": { + "goods_id": { + "example": "162996968", "type": "string" }, - "recommendation_id": { + "goods_sn": { + "example": "sz25081190840936964", "type": "string" }, - "review_excerpt": { + "goods_url_name": { "type": "string" }, - "review_url": { + "image": { "type": "string" } }, "type": "object" }, - "steam.FeaturedBucket": { + "shein.DealCategory": { "properties": { - "count": { - "description": "Number of items in the bucket.", - "type": "integer" - }, - "id": { - "description": "Id of the bucket, as Steam names it.", + "cat_id": { + "example": "4436", "type": "string" }, - "items": { - "description": "Items in the bucket.", - "items": { - "$ref": "#/definitions/steam.FeaturedItem" - }, - "type": "array" - }, "name": { - "description": "Display name of the bucket.", + "example": "Women Apparel", + "type": "string" + }, + "type": { + "example": "realCategory", "type": "string" } }, "type": "object" }, - "steam.FeaturedCategoriesResponse": { + "shein.DealProduct": { "properties": { - "coming_soon": { - "allOf": [ - { - "$ref": "#/definitions/steam.FeaturedBucket" - } - ], - "description": "Bucket of upcoming releases." + "brand_code": { + "example": "1qmfm", + "type": "string" }, - "new_releases": { - "allOf": [ - { - "$ref": "#/definitions/steam.FeaturedBucket" - } - ], - "description": "Bucket of new releases." + "category_id": { + "example": "12476", + "type": "string" }, - "source_url": { - "description": "URL the data was read from.", + "category_name": { + "example": "Women Long Dresses", "type": "string" }, - "specials": { - "allOf": [ - { - "$ref": "#/definitions/steam.FeaturedBucket" - } - ], - "description": "Bucket of items currently on special offer." + "color_img": { + "type": "string" }, - "top_sellers": { - "allOf": [ - { - "$ref": "#/definitions/steam.FeaturedBucket" - } - ], - "description": "Bucket of the store's top-selling items." - } - }, - "type": "object" - }, - "steam.FeaturedItem": { - "properties": { - "currency": { - "description": "Currency code of the prices, such as `USD`.", + "comment_avg": { + "example": "4.68", "type": "string" }, - "discount_percent": { - "description": "Discount currently applied, as a percentage.", + "comment_count": { + "example": 1001, "type": "integer" }, - "discounted": { - "description": "Whether the item is currently discounted.", - "type": "boolean" + "detail_images": { + "items": { + "type": "string" + }, + "type": "array" }, - "final_price": { - "description": "Price after any discount, in minor currency units such as cents.", - "type": "integer" + "goods_id": { + "example": "163003837", + "type": "string" }, - "header_image": { - "description": "URL of the item's header image.", + "goods_img": { "type": "string" }, - "id": { - "description": "Steam id of the featured item.", - "type": "integer" + "goods_name": { + "example": "Sweetra Women's Oblique Shoulder Fitted Bandeau Dress", + "type": "string" }, - "linux_available": { - "description": "Whether the item is available on Linux.", - "type": "boolean" + "goods_sn": { + "example": "sz25081193234595996", + "type": "string" }, - "mac_available": { - "description": "Whether the item is available on macOS.", + "goods_url_name": { + "example": "Sweetra-Women-s-Oblique-Shoulder-Fitted-Bandeau-Dress", + "type": "string" + }, + "is_new_coupon": { + "example": false, "type": "boolean" }, - "name": { - "description": "Name of the featured item.", + "mall_code": { + "example": "1", "type": "string" }, - "original_price": { - "description": "Price before any discount, in minor currency units such as cents.", - "type": "integer" + "on_sale": { + "example": true, + "type": "boolean" }, - "type": { - "description": "Numeric type code Steam gives the featured item.", - "type": "integer" + "retail_price": { + "example": "HK$119.00", + "type": "string" }, - "windows_available": { - "description": "Whether the item is available on Windows.", - "type": "boolean" - } - }, - "type": "object" - }, - "steam.FeaturedResponse": { - "properties": { - "featured_linux": { - "description": "Items featured for Linux players.", - "items": { - "$ref": "#/definitions/steam.FeaturedItem" - }, - "type": "array" + "sale_price": { + "example": "HK$119.00", + "type": "string" }, - "featured_mac": { - "description": "Items featured for macOS players.", - "items": { - "$ref": "#/definitions/steam.FeaturedItem" - }, - "type": "array" + "sold_out": { + "example": false, + "type": "boolean" }, - "featured_win": { - "description": "Items featured for Windows players.", - "items": { - "$ref": "#/definitions/steam.FeaturedItem" - }, - "type": "array" + "spu": { + "example": "z250520775866", + "type": "string" }, - "large_capsules": { - "description": "Large spotlight capsules shown on the store front page.", - "items": { - "$ref": "#/definitions/steam.FeaturedItem" - }, - "type": "array" + "store_code": { + "example": "7945614031", + "type": "string" }, - "source_url": { - "description": "URL the data was read from.", + "usd_price": { + "example": "$15.16", "type": "string" } }, "type": "object" }, - "steam.GlobalAchievement": { + "shein.DealTabsResponse": { "properties": { - "name": { - "description": "Achievement identifier as Steam lists it, such as `TF_PLAY_GAME_EVERYCLASS`.", - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/shein.DealCategory" + }, + "type": "array" }, - "percent": { - "description": "Percentage of all players who have unlocked the achievement.", - "type": "number" + "for_you_tab": { + "example": "For You", + "type": "string" } }, "type": "object" }, - "steam.HistogramBucket": { + "shein.DealsProductsResponse": { "properties": { - "date": { - "description": "Start of the bucket, in Unix seconds.", + "page": { + "example": 1, "type": "integer" }, - "recommendations_down": { - "description": "Number of negative recommendations in the bucket.", - "type": "integer" + "products": { + "items": { + "$ref": "#/definitions/shein.DealProduct" + }, + "type": "array" }, - "recommendations_up": { - "description": "Number of positive recommendations in the bucket.", + "total": { + "example": 3000, "type": "integer" } }, "type": "object" }, - "steam.IDName": { + "shein.FacetCategory": { "properties": { - "description": { - "description": "Display name of the item, such as a category, genre or app name.", - "type": "string" + "children": { + "items": { + "$ref": "#/definitions/shein.FacetCategory" + }, + "type": "array" }, "id": { - "description": "Id of the item.", + "example": "2030", + "type": "string" + }, + "name": { + "example": "Women Clothing", "type": "string" } }, "type": "object" }, - "steam.ItemsResponse": { + "shein.FacetGroup": { "properties": { - "count": { - "type": "integer" + "id": { + "example": "87", + "type": "string" }, - "items": { + "name": { + "example": "Size", + "type": "string" + }, + "options": { "items": { - "$ref": "#/definitions/steam.CategoryItem" + "$ref": "#/definitions/shein.FacetOption" }, "type": "array" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "steam.Metacritic": { + "shein.FacetOption": { "properties": { - "score": { - "description": "Metacritic score of the app, out of 100.", - "type": "integer" + "id": { + "example": "87_757", + "type": "string" }, - "url": { - "description": "URL of the app's page on Metacritic.", + "name": { + "example": "XXS", "type": "string" } }, "type": "object" }, - "steam.NewsItem": { + "shein.Filter": { "properties": { - "author": { - "description": "Name of the post's author.", - "type": "string" - }, - "contents": { - "description": "Body text of the post, shortened to the requested maximum length.", - "type": "string" - }, - "date": { - "description": "Time the post was published, in Unix seconds.", - "type": "integer" - }, - "feedlabel": { - "description": "Label of the news feed the post came from, such as `Community Announcements`.", - "type": "string" - }, - "feedname": { - "description": "Name of the news feed the post came from, such as `steam_community_announcements`.", + "node_id": { + "example": "87", "type": "string" }, - "gid": { - "description": "Unique id of the news post.", + "node_name": { + "example": "Size", "type": "string" }, - "is_external_url": { - "description": "Whether Steam flags the post's `url` as an external link.", - "type": "boolean" - }, - "tags": { - "description": "Tags Steam attaches to the post, such as `patchnotes`.", + "options": { "items": { - "type": "string" + "$ref": "#/definitions/shein.FilterOption" }, "type": "array" - }, - "title": { - "description": "Headline of the news post.", - "type": "string" - }, - "url": { - "description": "URL of the news post.", - "type": "string" } }, "type": "object" }, - "steam.NewsResponse": { + "shein.FilterOption": { "properties": { - "appid": { - "description": "Steam app id the news belongs to.", + "node_id": { + "example": "87_757", "type": "string" }, - "count": { - "description": "Number of news posts returned.", - "type": "integer" - }, - "items": { - "description": "News posts for the app.", - "items": { - "$ref": "#/definitions/steam.NewsItem" - }, - "type": "array" - }, - "source_url": { - "description": "URL the data was read from.", + "node_name": { + "example": "XXS", "type": "string" } }, "type": "object" }, - "steam.PackageDetails": { + "shein.Keyword": { "properties": { - "apps": { - "description": "Apps included in the package. Each item has the app id in `id` and the app name in `description`.", - "items": { - "$ref": "#/definitions/steam.IDName" - }, - "type": "array" - }, - "header_image": { - "description": "URL of the package's header image.", + "from": { + "example": "search", "type": "string" }, - "name": { - "description": "Name of the package.", + "type": { + "example": "goods_pool", "type": "string" }, - "packageid": { - "description": "Steam package id.", - "type": "integer" - }, - "platforms": { - "allOf": [ - { - "$ref": "#/definitions/steam.Platforms" - } - ], - "description": "Operating systems the package supports." - }, - "price": { - "allOf": [ - { - "$ref": "#/definitions/steam.PackagePrice" - } - ], - "description": "Current price of the package. Omitted when the store shows no price." - }, - "release_date": { - "allOf": [ - { - "$ref": "#/definitions/steam.AppRelease" - } - ], - "description": "Release information of the package." + "word": { + "example": "Mother And Daughter", + "type": "string" }, - "source_url": { - "description": "URL the data was read from.", + "word_id": { + "example": "199828", "type": "string" } }, "type": "object" }, - "steam.PackagePrice": { + "shein.NavTab": { "properties": { - "currency": { - "description": "Currency code of the prices, such as `USD`.", + "goods_id": { + "example": "52544880", "type": "string" }, - "discount_percent": { - "description": "Discount currently applied, as a percentage.", - "type": "integer" + "nav_id": { + "example": "1738", + "type": "string" }, - "final": { - "description": "Price after any discount, in minor currency units such as cents.", - "type": "integer" + "nav_img": { + "type": "string" }, - "individual": { - "description": "Price of the apps in the package bought individually, in minor currency units such as cents.", - "type": "integer" + "nav_name": { + "example": "T-Shirts", + "type": "string" }, - "initial": { - "description": "Price before any discount, in minor currency units such as cents.", - "type": "integer" + "nav_type": { + "example": "1", + "type": "string" } }, "type": "object" }, - "steam.Platforms": { + "shein.Product": { "properties": { - "linux": { - "description": "Whether the title supports Linux.", - "type": "boolean" - }, - "mac": { - "description": "Whether the title supports macOS.", - "type": "boolean" + "brand_code": { + "example": "1qmfm", + "type": "string" }, - "windows": { - "description": "Whether the title supports Windows.", - "type": "boolean" - } - }, - "type": "object" - }, - "steam.PlayersResponse": { - "properties": { - "appid": { - "description": "Steam app id the count belongs to.", + "category_id": { + "example": "12476", "type": "string" }, - "player_count": { - "description": "Number of players currently in the app.", - "type": "integer" + "category_name": { + "example": "Women Long Dresses", + "type": "string" }, - "source_url": { - "description": "URL the data was read from.", + "color_img": { "type": "string" - } - }, - "type": "object" - }, - "steam.Price": { - "properties": { - "currency": { - "description": "Currency code of the prices, such as `USD`.", + }, + "comment_avg": { + "example": "4.68", "type": "string" }, - "discount_percent": { - "description": "Discount currently applied, as a percentage.", + "comment_count": { + "example": 1001, "type": "integer" }, - "final": { - "description": "Price after any discount, in minor currency units such as cents.", - "type": "integer" + "detail_images": { + "items": { + "type": "string" + }, + "type": "array" }, - "final_formatted": { - "description": "Price after any discount, formatted for display as Steam shows it.", + "goods_id": { + "example": "163003837", "type": "string" }, - "initial": { - "description": "Price before any discount, in minor currency units such as cents.", - "type": "integer" - }, - "initial_formatted": { - "description": "Price before any discount, formatted for display as Steam shows it.", + "goods_img": { "type": "string" - } - }, - "type": "object" - }, - "steam.Review": { - "properties": { - "author": { - "allOf": [ - { - "$ref": "#/definitions/steam.ReviewAuthor" - } - ], - "description": "Author of the review." - }, - "comment_count": { - "description": "Number of comments on the review.", - "type": "integer" }, - "language": { - "description": "Language the review is written in, as a Steam language name such as `english`.", + "goods_name": { + "example": "Sweetra Women's Oblique Shoulder Fitted Bandeau Dress", "type": "string" }, - "received_for_free": { - "description": "Whether the author received the game for free.", - "type": "boolean" + "goods_sn": { + "example": "sz25081193234595996", + "type": "string" }, - "recommendation_id": { - "description": "Steam id of the review.", + "goods_url_name": { + "example": "Sweetra-Women-s-Oblique-Shoulder-Fitted-Bandeau-Dress", "type": "string" }, - "review": { - "description": "Full text of the review.", + "mall_code": { + "example": "1", "type": "string" }, - "steam_purchase": { - "description": "Whether the author bought the game on Steam.", + "on_sale": { + "example": true, "type": "boolean" }, - "timestamp_created": { - "description": "Time the review was posted, in Unix seconds.", - "type": "integer" + "retail_price": { + "example": "HK$119.00", + "type": "string" }, - "timestamp_updated": { - "description": "Time the review was last edited, in Unix seconds.", - "type": "integer" + "sale_price": { + "example": "HK$119.00", + "type": "string" }, - "voted_up": { - "description": "Whether the review recommends the game.", + "sold_out": { + "example": false, "type": "boolean" }, - "votes_funny": { - "description": "Number of votes marking the review as funny.", - "type": "integer" - }, - "votes_up": { - "description": "Number of votes marking the review as helpful.", - "type": "integer" + "spu": { + "example": "z250520775866", + "type": "string" }, - "weighted_vote_score": { - "description": "Helpfulness score Steam gives the review, returned as a string such as `0.5`.", + "store_code": { + "example": "7945614031", "type": "string" }, - "written_during_early_access": { - "description": "Whether the review was written while the game was in Early Access.", - "type": "boolean" + "usd_price": { + "example": "$15.16", + "type": "string" } }, "type": "object" }, - "steam.ReviewAuthor": { + "shein.ProductDetail": { "properties": { - "last_played": { - "description": "Time the author last played the game.", - "type": "integer" - }, - "num_games_owned": { - "description": "Number of games the author owns on Steam.", - "type": "integer" + "brand_code": { + "example": "1qmfm", + "type": "string" }, - "num_reviews": { - "description": "Number of reviews the author has written on Steam.", - "type": "integer" + "category_id": { + "example": "12476", + "type": "string" }, - "playtime_at_review": { - "description": "Author's playtime in the game when the review was written, in minutes.", - "type": "integer" + "category_name": { + "example": "Women Dresses", + "type": "string" }, - "playtime_forever": { - "description": "Author's total playtime in the game, in minutes.", - "type": "integer" + "color_variants": { + "items": { + "$ref": "#/definitions/shein.ColorVariant" + }, + "type": "array" }, - "playtime_last_two_weeks": { - "description": "Author's playtime in the game over the last two weeks, in minutes.", - "type": "integer" + "description": { + "type": "string" }, - "steamid": { - "description": "Steam id of the review author.", + "goods_id": { + "example": "163003837", "type": "string" - } - }, - "type": "object" - }, - "steam.ReviewSummary": { - "properties": { - "num_reviews": { - "description": "Number of reviews returned in this response.", - "type": "integer" }, - "review_score": { - "description": "Numeric review score Steam gives the app. Set on the first page only.", - "type": "integer" + "goods_name": { + "example": "Sweetra Women's Oblique Shoulder Fitted Bandeau Dress", + "type": "string" }, - "review_score_desc": { - "description": "Review rating label, such as `Very Positive`. Set on the first page only.", + "goods_sn": { + "example": "sz25081193234595996", "type": "string" }, - "total_negative": { - "description": "Total number of negative reviews. Set on the first page only.", - "type": "integer" + "images": { + "items": { + "type": "string" + }, + "type": "array" }, - "total_positive": { - "description": "Total number of positive reviews. Set on the first page only.", - "type": "integer" + "on_sale": { + "example": true, + "type": "boolean" }, - "total_reviews": { - "description": "Total number of reviews. Set on the first page only.", - "type": "integer" - } - }, - "type": "object" - }, - "steam.ReviewsHistogramResponse": { - "properties": { - "appid": { - "description": "Steam app id the histogram belongs to.", + "retail_price": { + "example": "HK$119.00", "type": "string" }, - "count_all_reviews": { - "description": "Total number of reviews counted for the histogram.", - "type": "integer" + "sale_price": { + "example": "HK$119.00", + "type": "string" }, - "end_date": { - "description": "End of the period the histogram covers, in Unix seconds.", - "type": "integer" + "size_guide_url": { + "type": "string" }, - "recent": { - "description": "Daily buckets of recommendations for the most recent period.", + "sizes": { "items": { - "$ref": "#/definitions/steam.HistogramBucket" + "$ref": "#/definitions/shein.SizeOption" }, "type": "array" }, - "rollup_type": { - "description": "Size of each bucket in `rollups`, such as `week`.", - "type": "string" - }, - "rollups": { - "description": "Weekly or monthly buckets of recommendations covering the whole period.", + "skus": { "items": { - "$ref": "#/definitions/steam.HistogramBucket" + "$ref": "#/definitions/shein.SkuVariant" }, "type": "array" }, - "source_url": { - "description": "URL the data was read from.", + "store_code": { + "example": "7945614031", "type": "string" }, - "start_date": { - "description": "Start of the period the histogram covers, in Unix seconds.", - "type": "integer" + "usd_price": { + "example": "$15.16", + "type": "string" + }, + "video_url": { + "type": "string" } }, "type": "object" }, - "steam.ReviewsResponse": { + "shein.SearchKeywordsResponse": { "properties": { - "appid": { - "description": "Steam app id the reviews belong to.", - "type": "string" - }, - "count": { - "description": "Number of reviews returned.", - "type": "integer" - }, - "cursor": { - "description": "Cursor to pass back to fetch the next page of reviews.", - "type": "string" - }, - "query_summary": { - "allOf": [ - { - "$ref": "#/definitions/steam.ReviewSummary" - } - ], - "description": "Review totals and score for the query." - }, - "reviews": { - "description": "Reviews on this page.", + "keywords": { "items": { - "$ref": "#/definitions/steam.Review" + "$ref": "#/definitions/shein.Keyword" }, "type": "array" - }, - "source_url": { - "description": "URL the data was read from.", - "type": "string" } }, "type": "object" }, - "steam.SearchItem": { + "shein.SearchProductsResponse": { "properties": { - "controller_support": { - "description": "Level of controller support Steam lists for the item.", - "type": "string" - }, - "id": { - "description": "Steam id of the result. Use it with the app endpoint when `type` is `app`.", - "type": "integer" - }, - "metascore": { - "description": "Metacritic score of the item, returned as a string such as `90`.", + "keyword": { + "example": "dress", "type": "string" }, - "name": { - "description": "Name of the item on the Steam store.", + "origin_word": { + "example": "dress", "type": "string" }, - "platforms": { - "allOf": [ - { - "$ref": "#/definitions/steam.Platforms" - } - ], - "description": "Operating systems the item supports." - }, - "price": { - "allOf": [ - { - "$ref": "#/definitions/steam.Price" - } - ], - "description": "Current price of the item. Omitted when the store shows no price." + "page": { + "example": 1, + "type": "integer" }, - "streamingvideo": { - "description": "Whether Steam marks the item as streaming video.", - "type": "boolean" + "products": { + "items": { + "$ref": "#/definitions/shein.Product" + }, + "type": "array" }, - "tiny_image": { - "description": "URL of a small image of the item.", - "type": "string" + "suggest_words": { + "items": { + "type": "string" + }, + "type": "array" }, - "type": { - "description": "Kind of result, such as `app`.", - "type": "string" + "total": { + "example": 6535, + "type": "integer" } }, "type": "object" }, - "steam.SearchResponse": { + "shein.SizeOption": { "properties": { - "count": { - "description": "Number of results returned.", - "type": "integer" - }, - "items": { - "description": "Store items matching the search term.", - "items": { - "$ref": "#/definitions/steam.SearchItem" - }, - "type": "array" + "attr_id": { + "example": "87", + "type": "string" }, - "source_url": { - "description": "URL the data was read from.", + "attr_name": { + "example": "Size", "type": "string" }, - "term": { - "description": "Search term that was used.", + "attr_value_id": { + "example": "757", "type": "string" }, - "total": { - "description": "Total number of matches Steam reports for the term.", - "type": "integer" + "attr_value_name": { + "example": "XXS", + "type": "string" } }, "type": "object" }, - "steam.SearchResultRow": { + "shein.SkuVariant": { "properties": { - "appid": { - "description": "Steam app id of the row, when the row is an app.", + "retail_price": { + "example": "HK$119.00", "type": "string" }, - "bundleid": { - "description": "Steam bundle id of the row, when the row is a bundle.", + "sale_price": { + "example": "HK$119.00", "type": "string" }, - "discount_pct": { - "description": "Discount shown on the row, as text.", + "sku_code": { + "example": "I6ar22eezl2i", "type": "string" }, - "name": { - "description": "Name of the item on the Steam store.", + "sku_sale_attr": { "type": "string" }, - "packageid": { - "description": "Steam package id of the row, when the row is a package.", + "stock": { + "example": "20", "type": "string" }, - "platforms": { - "allOf": [ - { - "$ref": "#/definitions/steam.Platforms" - } - ], - "description": "Operating systems the item supports." - }, - "price": { - "description": "Price shown on the row, as text.", + "usd_price": { + "example": "$15.16", "type": "string" - }, - "release_date": { - "description": "Release date shown on the row, such as `20 Oct, 2022`.", + } + }, + "type": "object" + }, + "shein.StoreCategory": { + "properties": { + "category_id": { + "example": "1767", "type": "string" }, - "review_summary": { - "description": "Review rating label shown on the row, such as `Overwhelmingly Positive`.", + "category_name": { + "example": "Women Bottoms", "type": "string" }, - "tag_ids": { - "description": "Ids of the item's most-weighted community tags. Resolve their names with the tags list endpoint.", - "items": { - "type": "integer" - }, - "type": "array" + "level": { + "example": 3, + "type": "integer" }, - "url": { - "description": "URL of the item's store page.", - "type": "string" + "product_count": { + "example": 205, + "type": "integer" } }, "type": "object" }, - "steam.SearchResultsResponse": { + "shein.StoreProductsResponse": { "properties": { - "count": { - "description": "Number of rows returned.", + "category_id": { + "example": "1766", + "type": "string" + }, + "page": { + "example": 1, "type": "integer" }, - "results": { - "description": "Rows of the store search results on this page.", + "products": { "items": { - "$ref": "#/definitions/steam.SearchResultRow" + "$ref": "#/definitions/shein.Product" }, "type": "array" }, - "source_url": { - "description": "URL the data was read from.", - "type": "string" - }, - "start": { - "description": "Offset of the first row returned.", - "type": "integer" - }, - "term": { - "description": "Search term that was used.", + "store_code": { + "example": "1813776918", "type": "string" }, "total": { - "description": "Total number of matches Steam reports for the term.", + "example": 156, "type": "integer" } }, "type": "object" }, - "steam.SteamSpyResponse": { + "shein.StoreResponse": { "properties": { - "appid": { - "description": "Steam app id.", - "type": "integer" - }, - "average_2weeks": { - "description": "Average playtime over the last two weeks, in minutes, as SteamSpy estimates it.", - "type": "integer" - }, - "average_forever": { - "description": "Average total playtime, in minutes, as SteamSpy estimates it.", - "type": "integer" - }, - "ccu": { - "description": "Concurrent users, as SteamSpy estimates it.", - "type": "integer" - }, - "developer": { - "description": "Name of the developer, as SteamSpy lists it.", - "type": "string" - }, - "discount": { - "description": "Current discount, as SteamSpy reports it.", - "type": "string" - }, - "genre": { - "description": "Genres of the app, as a comma-separated list such as `Action, Free to Play, Strategy`.", - "type": "string" - }, - "initialprice": { - "description": "Price before any discount, as SteamSpy reports it.", - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/shein.StoreCategory" + }, + "type": "array" }, - "languages": { - "description": "Languages the app supports, as SteamSpy lists them.", + "followers": { + "example": "231K", "type": "string" }, - "median_2weeks": { - "description": "Median playtime over the last two weeks, in minutes, as SteamSpy estimates it.", - "type": "integer" - }, - "median_forever": { - "description": "Median total playtime, in minutes, as SteamSpy estimates it.", - "type": "integer" - }, - "name": { - "description": "Name of the app, as SteamSpy lists it.", - "type": "string" + "is_brand_store": { + "example": false, + "type": "boolean" }, - "negative": { - "description": "Number of negative reviews, as SteamSpy counts them.", - "type": "integer" + "is_choices_store": { + "example": false, + "type": "boolean" }, - "owners": { - "description": "Estimated range of owners, such as `100,000,000 .. 200,000,000`.", - "type": "string" + "is_lifestyle_store": { + "example": false, + "type": "boolean" }, - "positive": { - "description": "Number of positive reviews, as SteamSpy counts them.", - "type": "integer" + "is_trends_store": { + "example": true, + "type": "boolean" }, - "price": { - "description": "Current price, as SteamSpy reports it.", + "seller_label": { + "example": "Brand", "type": "string" }, - "publisher": { - "description": "Name of the publisher, as SteamSpy lists it.", + "store_code": { + "example": "1813776918", "type": "string" }, - "source": { - "description": "Name of the data source, always `steamspy`.", + "store_logo": { "type": "string" }, - "source_url": { - "description": "URL the data was read from.", + "store_name": { + "example": "COUREZ", "type": "string" - }, - "tags": { - "additionalProperties": { - "type": "integer" - }, - "description": "Map of tag name to the number of votes the tag received.", - "type": "object" - }, - "userscore": { - "description": "User score of the app, as SteamSpy reports it.", - "type": "integer" } }, "type": "object" }, - "steam.TagEntry": { + "shein.TrendCollection": { "properties": { - "name": { + "tab_id": { + "example": "6810", "type": "string" }, - "tagid": { - "type": "integer" - } - }, - "type": "object" - }, - "steam.TagsListResponse": { - "properties": { - "count": { - "type": "integer" - }, - "language": { + "tab_name": { + "example": "#Elegant Affair Collection", "type": "string" }, - "source_url": { + "tab_name_en": { "type": "string" }, - "tags": { - "items": { - "$ref": "#/definitions/steam.TagEntry" - }, - "type": "array" + "tab_type": { + "example": "trend", + "type": "string" } }, "type": "object" }, - "steam.TopReleasePage": { + "shein.TrendFilterCategory": { "properties": { - "appids": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "name": { + "cat_id": { + "example": "2030", "type": "string" }, - "start_of_month_unix": { - "type": "integer" - }, - "url_path": { + "category_name": { + "example": "Women Clothing", "type": "string" } }, "type": "object" }, - "steam.TopReleasesResponse": { + "shein.TrendingCategoriesResponse": { "properties": { - "count": { - "type": "integer" - }, - "pages": { + "categories": { "items": { - "$ref": "#/definitions/steam.TopReleasePage" + "$ref": "#/definitions/shein.TrendingCategory" }, "type": "array" - }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "steam.TopSellerRank": { - "properties": { - "appid": { - "type": "integer" - }, - "item": { - "$ref": "#/definitions/steam.CategoryItem" - }, - "rank": { - "type": "integer" } }, "type": "object" }, - "steam.TopSellersResponse": { + "shein.TrendingCategory": { "properties": { - "count": { - "type": "integer" + "cat_id": { + "example": "1930", + "type": "string" }, - "country_code": { + "category_name": { + "example": "Women Denim", "type": "string" }, - "ranks": { - "items": { - "$ref": "#/definitions/steam.TopSellerRank" - }, - "type": "array" + "goods_id": { + "example": "425338947", + "type": "string" }, - "source_url": { + "image": { "type": "string" }, - "start_date_unix": { - "type": "integer" + "store_code": { + "example": "1813776918", + "type": "string" } }, "type": "object" }, - "steam.WeightedTag": { + "shein.TrendingFiltersResponse": { "properties": { - "tagid": { - "type": "integer" + "categories": { + "items": { + "$ref": "#/definitions/shein.TrendFilterCategory" + }, + "type": "array" }, - "weight": { - "type": "integer" + "collections": { + "items": { + "$ref": "#/definitions/shein.TrendCollection" + }, + "type": "array" } }, "type": "object" }, - "steam.achievementsResponseDoc": { + "shein.aggregationFiltersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/steam.AchievementsResponse" + "$ref": "#/definitions/shein.AggregationFilters" }, "msg": { "example": "OK", @@ -220283,14 +225611,14 @@ }, "type": "object" }, - "steam.appResponseDoc": { + "shein.autocompleteResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/steam.AppDetails" + "$ref": "#/definitions/shein.AutocompleteResponse" }, "msg": { "example": "OK", @@ -220299,14 +225627,14 @@ }, "type": "object" }, - "steam.categoryBrowseResponseDoc": { + "shein.brandsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/steam.CategoryBrowseResponse" + "$ref": "#/definitions/shein.BrandsResponse" }, "msg": { "example": "OK", @@ -220315,14 +225643,14 @@ }, "type": "object" }, - "steam.chartResponseDoc": { + "shein.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/steam.ChartResponse" + "$ref": "#/definitions/shein.CategoriesResponse" }, "msg": { "example": "OK", @@ -220331,14 +225659,14 @@ }, "type": "object" }, - "steam.communityRecommendationsResponseDoc": { + "shein.categoryFiltersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/steam.CommunityRecommendationsResponse" + "$ref": "#/definitions/shein.CategoryFiltersResponse" }, "msg": { "example": "OK", @@ -220347,14 +225675,14 @@ }, "type": "object" }, - "steam.featuredCategoriesResponseDoc": { + "shein.categoryGoodsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/steam.FeaturedCategoriesResponse" + "$ref": "#/definitions/shein.CategoryGoodsResponse" }, "msg": { "example": "OK", @@ -220363,14 +225691,14 @@ }, "type": "object" }, - "steam.featuredResponseDoc": { + "shein.categoryNavResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/steam.FeaturedResponse" + "$ref": "#/definitions/shein.CategoryNavResponse" }, "msg": { "example": "OK", @@ -220379,14 +225707,14 @@ }, "type": "object" }, - "steam.histogramResponseDoc": { + "shein.dealTabsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/steam.ReviewsHistogramResponse" + "$ref": "#/definitions/shein.DealTabsResponse" }, "msg": { "example": "OK", @@ -220395,14 +225723,14 @@ }, "type": "object" }, - "steam.itemsResponseDoc": { + "shein.dealsProductsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/steam.ItemsResponse" + "$ref": "#/definitions/shein.DealsProductsResponse" }, "msg": { "example": "OK", @@ -220411,14 +225739,14 @@ }, "type": "object" }, - "steam.newsResponseDoc": { + "shein.productDetailResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/steam.NewsResponse" + "$ref": "#/definitions/shein.ProductDetail" }, "msg": { "example": "OK", @@ -220427,14 +225755,14 @@ }, "type": "object" }, - "steam.packageResponseDoc": { + "shein.productsSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/steam.PackageDetails" + "$ref": "#/definitions/shein.SearchProductsResponse" }, "msg": { "example": "OK", @@ -220443,14 +225771,14 @@ }, "type": "object" }, - "steam.playersResponseDoc": { + "shein.searchKeywordsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/steam.PlayersResponse" + "$ref": "#/definitions/shein.SearchKeywordsResponse" }, "msg": { "example": "OK", @@ -220459,14 +225787,14 @@ }, "type": "object" }, - "steam.reviewsResponseDoc": { + "shein.storeProductsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/steam.ReviewsResponse" + "$ref": "#/definitions/shein.StoreProductsResponse" }, "msg": { "example": "OK", @@ -220475,14 +225803,14 @@ }, "type": "object" }, - "steam.searchResponseDoc": { + "shein.storeResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/steam.SearchResponse" + "$ref": "#/definitions/shein.StoreResponse" }, "msg": { "example": "OK", @@ -220491,14 +225819,14 @@ }, "type": "object" }, - "steam.searchResultsResponseDoc": { + "shein.trendingCategoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/steam.SearchResultsResponse" + "$ref": "#/definitions/shein.TrendingCategoriesResponse" }, "msg": { "example": "OK", @@ -220507,14 +225835,14 @@ }, "type": "object" }, - "steam.steamspyResponseDoc": { + "shein.trendingFiltersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/steam.SteamSpyResponse" + "$ref": "#/definitions/shein.TrendingFiltersResponse" }, "msg": { "example": "OK", @@ -220523,886 +225851,1197 @@ }, "type": "object" }, - "steam.tagsListResponseDoc": { + "shopapp.AnalysisResponse": { "properties": { - "code": { - "example": 200, + "currencies": { + "description": "Currency codes found among the sampled products.", + "example": [ + "USD", + "GBP" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "discounts": { + "allOf": [ + { + "$ref": "#/definitions/shopapp.DiscountSummary" + } + ], + "description": "Discount percentages across sampled products that are on sale and have an original price." + }, + "groups_count": { + "description": "Number of product groups Shop.app returned with the results.", + "example": 5, "type": "integer" }, - "data": { - "$ref": "#/definitions/steam.TagsListResponse" + "prices_by_currency": { + "description": "Price summary for each currency found among the sampled products.", + "items": { + "$ref": "#/definitions/shopapp.CurrencyPriceSummary" + }, + "type": "array" }, - "msg": { - "example": "OK", + "products_count": { + "description": "Number of products sampled.", + "example": 20, + "type": "integer" + }, + "query": { + "description": "Search query that was analyzed.", + "example": "sneakers", "type": "string" - } - }, - "type": "object" - }, - "steam.topReleasesResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "sale_count": { + "description": "Number of sampled products that are on sale.", + "example": 6, "type": "integer" }, - "data": { - "$ref": "#/definitions/steam.TopReleasesResponse" + "sampled_product_ids": { + "description": "Product IDs of the first sampled products, up to 10.", + "example": [ + "8075903107261", + "7093164834901" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "shops_count": { + "description": "Number of distinct shops among the sampled products.", + "example": 8, + "type": "integer" + }, + "top_shops": { + "description": "Up to five shops with the most sampled products.", + "items": { + "$ref": "#/definitions/shopapp.ShopSummary" + }, + "type": "array" } }, "type": "object" }, - "steam.topSellersResponseDoc": { + "shopapp.CategoriesResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/steam.TopSellersResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "categories": { + "description": "Product categories listed on Shop.app, each with its subcategories.", + "items": { + "$ref": "#/definitions/shopapp.CategoryItem" + }, + "type": "array" } }, "type": "object" }, - "stockx.AskServiceLevel": { + "shopapp.CategoryItem": { "properties": { - "count": { - "example": 1341, - "type": "integer" + "children": { + "description": "Subcategories of this category.", + "items": { + "$ref": "#/definitions/shopapp.CategoryItem" + }, + "type": "array" }, - "inventory_type": { - "example": "CUSTODIAL", + "gid": { + "description": "Shopify global ID of the category.", + "example": "gid://shopify/ProductCategory/1?version=13", "type": "string" }, - "lowest_ask": { - "example": 260, - "type": "integer" - } - }, - "type": "object" - }, - "stockx.Badge": { - "properties": { + "has_children": { + "description": "`true` when the category has subcategories.", + "type": "boolean" + }, "id": { - "example": "SELLING_FAST", + "description": "Numeric category ID taken from the Shopify global ID.", + "example": "1", "type": "string" }, - "subtitle": { - "example": "This item sells fast.", + "image": { + "description": "URL of the category image.", "type": "string" }, - "title": { - "example": "713 Sold in Last 3 Days!", + "name": { + "description": "Category name, for example `Women`.", + "example": "Women", + "type": "string" + }, + "path": { + "description": "Categories on the path from the top level down to this category.", + "items": { + "$ref": "#/definitions/shopapp.CategoryPath" + }, + "type": "array" + }, + "slug": { + "description": "URL-friendly form of the category name.", + "example": "women", "type": "string" } }, "type": "object" }, - "stockx.Brand": { + "shopapp.CategoryPath": { "properties": { - "group": { - "example": "M-O", + "gid": { + "description": "Shopify global ID of the category on the path.", + "example": "gid://shopify/ProductCategory/1?version=13", "type": "string" }, - "name": { - "example": "Nike", + "id": { + "description": "Numeric ID of the category on the path.", + "example": "1", "type": "string" }, - "slug": { - "example": "nike", + "name": { + "description": "Name of the category on the path.", + "example": "Women", "type": "string" } }, "type": "object" }, - "stockx.BrandsResponse": { + "shopapp.CurrencyPriceSummary": { "properties": { - "brands": { - "items": { - "$ref": "#/definitions/stockx.Brand" - }, - "type": "array" + "average": { + "description": "Average price in this currency, rounded to two decimals.", + "example": 72.42, + "type": "number" }, - "total_count": { - "example": 396, + "count": { + "description": "Number of sampled products priced in this currency.", + "example": 12, "type": "integer" + }, + "currency": { + "description": "Currency code of the prices.", + "example": "USD", + "type": "string" + }, + "max": { + "description": "Highest price in this currency.", + "example": 149.99, + "type": "number" + }, + "min": { + "description": "Lowest price in this currency.", + "example": 35.9, + "type": "number" } }, "type": "object" }, - "stockx.CategoriesResponse": { + "shopapp.DiscountSummary": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/stockx.Category" - }, - "type": "array" + "average_percent": { + "description": "Average discount across on-sale products, as a percentage of the original price.", + "example": 24.6, + "type": "number" + }, + "max_percent": { + "description": "Largest discount among on-sale products, as a percentage of the original price.", + "example": 60, + "type": "number" + }, + "min_percent": { + "description": "Smallest discount among on-sale products, as a percentage of the original price.", + "example": 10, + "type": "number" } }, "type": "object" }, - "stockx.Category": { + "shopapp.ImageItem": { "properties": { - "name": { - "example": "Shoes", + "alt": { + "description": "Alt text of the image.", + "example": "Product image", "type": "string" }, - "slug": { - "example": "shoes", + "url": { + "description": "URL of the image.", + "example": "https://cdn.shopify.com/example.jpg", "type": "string" - }, - "subcategories": { - "items": { - "$ref": "#/definitions/stockx.Subcategory" - }, - "type": "array" } }, "type": "object" }, - "stockx.Listing": { + "shopapp.LocationAddress": { "properties": { - "condition": { - "example": "New - Other", + "address1": { + "description": "First line of the street address.", + "example": "175b Mott Street", "type": "string" }, - "condition_alias": { - "example": "new-other", + "address2": { + "description": "Second line of the street address.", "type": "string" }, - "condition_description": { - "example": "Replacement box", + "city": { + "description": "City of the address.", + "example": "New York", "type": "string" }, - "image_url": { + "country": { + "description": "Country of the address, for example `US`.", + "example": "US", "type": "string" }, - "price": { - "example": 250, - "type": "integer" - }, - "size": { - "example": "12", + "postal_code": { + "description": "Postal code of the address.", + "example": "10012", "type": "string" }, - "size_descriptor": { - "example": "Size", + "zone_code": { + "description": "State or region code of the address, for example `NY`.", + "example": "NY", "type": "string" } }, "type": "object" }, - "stockx.MarketData": { + "shopapp.OptionGroup": { "properties": { - "annual_average_price": { - "example": 253, - "type": "integer" - }, - "annual_sales_count": { - "example": 12394, - "type": "integer" + "name": { + "description": "Option name, for example `Size`.", + "example": "Size", + "type": "string" }, - "ask_service_levels": { - "additionalProperties": { - "$ref": "#/definitions/stockx.AskServiceLevel" + "values": { + "description": "Values available for the option.", + "items": { + "type": "string" }, - "type": "object" - }, - "highest_bid": { - "example": 315, - "type": "integer" - }, - "last_90_days_average_price": { - "example": 253, - "type": "integer" - }, - "last_90_days_sales_count": { - "example": 12394, - "type": "integer" - }, - "last_sale": { - "example": 271, - "type": "integer" - }, - "lowest_ask": { - "example": 260, - "type": "integer" - }, - "number_of_asks": { - "example": 1341, - "type": "integer" - }, - "number_of_bids": { - "example": 334, - "type": "integer" - }, - "sales_last_72_hours": { - "example": 713, - "type": "integer" + "type": "array" } }, "type": "object" }, - "stockx.ProductDetail": { + "shopapp.ProductDetail": { "properties": { - "badges": { - "items": { - "$ref": "#/definitions/stockx.Badge" - }, - "type": "array" - }, - "brand": { - "example": "Jordan", - "type": "string" + "available": { + "description": "`true` when the selected variant is available for sale.", + "type": "boolean" }, - "colorway": { - "example": "Black/University Blue/White", + "currency": { + "description": "Currency code of `price` and `original_price`.", + "example": "HKD", "type": "string" }, "description": { + "description": "Product description text.", "type": "string" }, - "gender": { - "example": "men", + "external_url": { + "description": "URL of the product on the seller's own online store.", "type": "string" }, "id": { - "example": "019ac251-3a0d-7243-bb16-5128353be8bf", - "type": "string" - }, - "image_url": { + "description": "Shop.app product ID.", + "example": "4596217053229", "type": "string" }, - "listings": { + "images": { + "description": "Images of the product.", "items": { - "$ref": "#/definitions/stockx.Listing" + "$ref": "#/definitions/shopapp.ImageItem" }, "type": "array" }, - "market": { - "$ref": "#/definitions/stockx.MarketData" - }, - "model": { - "example": "Jordan 5 Retro", - "type": "string" + "option_groups": { + "description": "Option choices of the product, such as size or colour, with their values.", + "items": { + "$ref": "#/definitions/shopapp.OptionGroup" + }, + "type": "array" }, - "primary_category": { - "example": "Air Jordan", - "type": "string" + "original_price": { + "description": "Price before the discount, in `currency`.", + "example": 1166, + "type": "number" }, - "primary_title": { - "example": "Jordan 5 Retro", - "type": "string" + "price": { + "description": "Current price of the selected variant, in `currency`.", + "example": 1076, + "type": "number" }, - "product_category": { - "example": "sneakers", - "type": "string" + "rating": { + "description": "Average shopper rating of the product.", + "example": 4.4, + "type": "number" }, "related_products": { + "description": "Products Shop.app shows as related to this one.", "items": { - "$ref": "#/definitions/stockx.ProductSummary" + "$ref": "#/definitions/shopapp.ProductItem" }, "type": "array" }, - "release_date": { - "example": "2026-06-20", - "type": "string" + "reviews": { + "description": "Shopper reviews shown on the product page.", + "items": { + "$ref": "#/definitions/shopapp.ReviewItem" + }, + "type": "array" }, - "retail_price": { - "example": "220", + "reviews_count": { + "description": "Number of shopper reviews of the product.", + "example": 22, + "type": "integer" + }, + "shop_handle": { + "description": "Shop.app handle of the shop selling the product.", + "example": "n1r478fp0h", "type": "string" }, - "secondary_title": { - "example": "Black University Blue (2026)", + "shop_id": { + "description": "Shop.app ID of the shop selling the product.", "type": "string" }, - "source_url": { - "example": "https://stockx.com/air-jordan-5-retro-black-university-blue-2026", + "shop_name": { + "description": "Name of the shop selling the product.", + "example": "Wide Fit Shoes UK", "type": "string" }, - "style_id": { - "example": "DD0587-008", + "slug": { + "description": "URL slug of the product.", + "example": "mens-wide-fit-new-balance-624v5-black-trainers-abzorb", "type": "string" }, "title": { - "example": "Jordan 5 Retro Black University Blue (2026)", + "description": "Product title as shown on the product page.", + "example": "Mens Wide Fit New Balance 624V5 Black Trainers ABZORB", "type": "string" }, - "traits": { - "items": { - "$ref": "#/definitions/stockx.ProductTrait" - }, - "type": "array" + "url": { + "description": "Shop.app page URL of the product.", + "type": "string" }, - "url_key": { - "example": "air-jordan-5-retro-black-university-blue-2026", + "variant_id": { + "description": "ID of the selected variant.", + "example": "34761278160941", "type": "string" } }, "type": "object" }, - "stockx.ProductSummary": { + "shopapp.ProductDetailResponse": { "properties": { - "brand": { - "example": "Jordan", + "product": { + "allOf": [ + { + "$ref": "#/definitions/shopapp.ProductDetail" + } + ], + "description": "Details of the product." + } + }, + "type": "object" + }, + "shopapp.ProductItem": { + "properties": { + "currency": { + "description": "Currency code of `price` and `original_price`.", + "example": "USD", "type": "string" }, - "gender": { - "example": "men", + "group_query": { + "description": "Search query of the product group this item belongs to.", + "example": "kids' athletic sneakers", "type": "string" }, - "highest_bid": { - "example": 267, - "type": "integer" + "group_title": { + "description": "Title of the product group this item belongs to.", + "example": "kids' athletic sneakers", + "type": "string" }, "id": { - "example": "9acafeb5-bc4a-4d66-bc3a-4899d2e64775", + "description": "Shop.app product ID.", + "example": "8075903107261", "type": "string" }, - "image_url": { + "image": { + "description": "URL of the product's first image.", + "example": "https://cdn.shopify.com/s/files/1/1145/5784/files/example.jpg", "type": "string" }, - "last_sale": { - "example": 176, - "type": "integer" + "image_alt": { + "description": "Alt text of the product's first image.", + "example": "Black sneaker side view", + "type": "string" }, - "lowest_ask": { - "example": 173, + "on_sale": { + "description": "`true` when the original price is higher than the current price.", + "type": "boolean" + }, + "original_price": { + "description": "Price before the discount, in `currency`.", + "example": 120, + "type": "number" + }, + "position": { + "description": "Position of the product in the results, starting at 1.", + "example": 1, "type": "integer" }, - "model": { - "example": "Jordan 4 Retro", - "type": "string" + "price": { + "description": "Current price of the product, in `currency`.", + "example": 100, + "type": "number" }, - "product_category": { - "example": "sneakers", + "shop_id": { + "description": "Shop.app ID of the shop selling the product.", + "example": "62696", "type": "string" }, - "release_date": { - "example": "2026-08-05", + "shop_name": { + "description": "Name of the shop selling the product.", + "example": "BILLY Footwear", "type": "string" }, "title": { - "example": "Jordan 4 Retro Toro Bravo (2026)", + "description": "Product title as shown on the Shop.app card.", + "example": "Black/Black/Gum BILLY Sport Inclusion DZ1", "type": "string" }, - "url_key": { - "example": "air-jordan-4-retro-toro-bravo-2026", + "url": { + "description": "Link to the product page.", + "example": "https://billyfootwear.com/products/black-black-gum-billy-sport-inclusion-dz1-zipper-shoes?utm_source=shop_app", + "type": "string" + }, + "variant_id": { + "description": "ID of the product variant shown on the card.", + "example": "46242960965821", "type": "string" } }, "type": "object" }, - "stockx.ProductTrait": { + "shopapp.ProductShopResponse": { "properties": { - "format": { - "example": "currency", - "type": "string" - }, - "name": { - "example": "Style", + "product_id": { + "description": "Shop.app ID of the product.", + "example": "4596217053229", "type": "string" }, - "value": { - "example": "DD0587-008", - "type": "string" + "shop": { + "allOf": [ + { + "$ref": "#/definitions/shopapp.ShopDetail" + } + ], + "description": "Shop that sells the product." } }, "type": "object" }, - "stockx.ReleaseCalendarResponse": { + "shopapp.ProductVariantResponse": { "properties": { - "from": { - "example": "2026-08-04", + "product_id": { + "description": "Shop.app ID of the product.", + "example": "4596217053229", "type": "string" }, + "variant": { + "allOf": [ + { + "$ref": "#/definitions/shopapp.VariantItem" + } + ], + "description": "Variant that matches the selected options." + } + }, + "type": "object" + }, + "shopapp.RelatedResponse": { + "properties": { "limit": { + "description": "Maximum number of related products requested.", "example": 20, "type": "integer" }, - "page": { - "example": 1, - "type": "integer" + "product_id": { + "description": "Shop.app ID of the product the results relate to.", + "example": "4596217053229", + "type": "string" }, - "releases": { + "products": { + "description": "Products related to the requested product.", "items": { - "$ref": "#/definitions/stockx.ProductSummary" + "$ref": "#/definitions/shopapp.ProductItem" }, "type": "array" - }, - "total_count": { - "example": 469, - "type": "integer" } }, "type": "object" }, - "stockx.SearchResponse": { + "shopapp.ReviewItem": { "properties": { - "category": { - "example": "sneakers", + "author": { + "description": "Name of the reviewer.", + "example": "Donal", "type": "string" }, - "limit": { - "example": 20, - "type": "integer" + "body": { + "description": "Text of the review.", + "example": "Perfect fit.", + "type": "string" }, - "page": { - "example": 1, - "type": "integer" + "date": { + "description": "Date of the review, either an ISO 8601 timestamp such as `2026-01-01T00:00:00Z` or text such as `December 6, 2025`.", + "example": "December 6, 2025", + "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/stockx.ProductSummary" - }, - "type": "array" + "helpful_count": { + "description": "Number of shoppers who found the review helpful.", + "type": "integer" }, - "query": { - "example": "jordan 5", + "id": { + "description": "Shop.app review ID.", "type": "string" }, - "sort": { - "example": "featured", + "product": { + "allOf": [ + { + "$ref": "#/definitions/shopapp.ReviewProduct" + } + ], + "description": "Product the review is for." + }, + "rating": { + "description": "Rating the reviewer gave.", + "example": 5, + "type": "number" + }, + "title": { + "description": "Headline of the review.", "type": "string" }, - "total_count": { - "example": 1000, - "type": "integer" + "variant_label": { + "description": "Label of the product variant that was reviewed, for example `Black / 12.5 / 4E`.", + "example": "Black / 12.5 / 4E", + "type": "string" } }, "type": "object" }, - "stockx.Subcategory": { + "shopapp.ReviewProduct": { "properties": { - "name": { - "example": "Boots", + "id": { + "description": "Shop.app ID of the reviewed product.", + "example": "8114373328975", "type": "string" }, - "slug": { - "example": "boots", + "image": { + "description": "URL of the product image.", "type": "string" - } - }, - "type": "object" - }, - "stockx.brandsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/stockx.BrandsResponse" + "image_alt": { + "description": "Alt text of the product image.", + "type": "string" }, - "msg": { - "example": "OK", + "slug": { + "description": "URL slug of the reviewed product.", + "example": "solana-brown-woven-leather-backstrap-clogs", "type": "string" - } - }, - "type": "object" - }, - "stockx.categoriesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/stockx.CategoriesResponse" + "title": { + "description": "Title of the reviewed product.", + "example": "Solana Brown Woven Leather Backstrap Clogs", + "type": "string" }, - "msg": { - "example": "OK", + "url": { + "description": "Shop.app page URL of the reviewed product.", + "type": "string" + }, + "variant": { + "description": "Variant of the product that was reviewed, for example `7 / Brown Woven / Leather`.", + "example": "7 / Brown Woven / Leather", "type": "string" } }, "type": "object" }, - "stockx.productResponseDoc": { + "shopapp.ReviewsResponse": { "properties": { - "code": { - "example": 200, + "limit": { + "description": "Maximum number of reviews requested.", + "example": 20, "type": "integer" }, - "data": { - "$ref": "#/definitions/stockx.ProductDetail" - }, - "msg": { - "example": "OK", + "product_id": { + "description": "Shop.app ID of the reviewed product.", + "example": "4596217053229", "type": "string" + }, + "reviews": { + "description": "Shopper reviews of the product.", + "items": { + "$ref": "#/definitions/shopapp.ReviewItem" + }, + "type": "array" } }, "type": "object" }, - "stockx.releasesResponseDoc": { + "shopapp.SearchGroup": { "properties": { - "code": { - "example": 200, + "product_ids": { + "description": "IDs of the products in the group.", + "items": { + "type": "string" + }, + "type": "array" + }, + "products_seen": { + "description": "Number of products seen in the group.", + "example": 4, "type": "integer" }, - "data": { - "$ref": "#/definitions/stockx.ReleaseCalendarResponse" + "query": { + "description": "Search query that defines the group.", + "example": "men's running sneakers", + "type": "string" }, - "msg": { - "example": "OK", + "title": { + "description": "Group heading, for example `men's running sneakers`.", + "example": "men's running sneakers", "type": "string" } }, "type": "object" }, - "stockx.searchResponseDoc": { + "shopapp.SearchResponse": { "properties": { - "code": { - "example": 200, + "groups": { + "description": "Groups of related products. Returned only when Shop.app supplies them.", + "items": { + "$ref": "#/definitions/shopapp.SearchGroup" + }, + "type": "array" + }, + "limit": { + "description": "Maximum number of products requested.", + "example": 20, "type": "integer" }, - "data": { - "$ref": "#/definitions/stockx.SearchResponse" + "products": { + "description": "Products matching the query, in Shop.app ranking order.", + "items": { + "$ref": "#/definitions/shopapp.ProductItem" + }, + "type": "array" }, - "msg": { - "example": "OK", + "query": { + "description": "Search query that was run.", + "example": "sneakers", "type": "string" } }, "type": "object" }, - "straitstimes.AuthorResponse": { + "shopapp.ShopCollection": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" + "id": { + "description": "Shop.app collection ID.", + "example": "292518002767", + "type": "string" }, - "email": { + "slug": { + "description": "URL slug of the collection.", + "example": "mens-dress-shoes", "type": "string" }, - "name": { + "title": { + "description": "Collection title, for example `Mens Dress Shoes`.", + "example": "Mens Dress Shoes", "type": "string" }, "url": { + "description": "Shop.app page URL of the collection.", "type": "string" } }, "type": "object" }, - "strava.Challenge": { + "shopapp.ShopDetail": { "properties": { - "cover_image_url": { - "example": "https://dgalywyr863hv.cloudfront.net/challenges/6162/6162-cover.png", + "banner": { + "description": "URL of the shop's banner image.", "type": "string" }, - "dimension": { - "example": "avg_pace_min_distance", + "collections": { + "description": "Collections found on the shop's page.", + "items": { + "$ref": "#/definitions/shopapp.ShopCollection" + }, + "type": "array" + }, + "description": { + "description": "Description of the shop.", "type": "string" }, - "duration": { - "example": "Aug 1, 2026 to Aug 31, 2026", + "handle": { + "description": "Shop.app handle of the shop, as used in its page URL.", + "example": "marcnolan", "type": "string" }, - "goal": { - "example": 10000, - "type": "number" + "id": { + "description": "Shop.app shop ID.", + "example": "186720", + "type": "string" }, - "goal_description": { - "example": "Complete a 10 km (6.2 mi) run.", + "logo": { + "description": "URL of the shop's logo.", "type": "string" }, - "icon": { - "example": "run", + "name": { + "description": "Name of the shop.", + "example": "Marc Nolan", "type": "string" }, - "id": { - "example": 6162, + "rating": { + "description": "Average shopper rating of the shop.", + "example": 4.7, + "type": "number" + }, + "reviews_count": { + "description": "Number of shopper ratings or reviews of the shop.", + "example": 19699, "type": "integer" }, - "logo_image_url": { - "example": "https://dgalywyr863hv.cloudfront.net/challenges/6162/6162-logo.png", + "shopify_id": { + "description": "Shopify ID of the shop.", "type": "string" }, - "name": { - "example": "August 10K Challenge", + "storefront": { + "description": "URL of the shop's own website.", "type": "string" }, - "sponsored": { - "example": false, - "type": "boolean" - }, "url": { - "example": "https://www.strava.com/challenges/August-10K-challenge-2026", + "description": "Shop.app page URL of the shop.", + "type": "string" + }, + "uuid": { + "description": "UUID of the shop.", "type": "string" } }, "type": "object" }, - "strava.ChallengeSection": { + "shopapp.ShopLocationItem": { "properties": { - "category": { - "example": "run", + "address": { + "allOf": [ + { + "$ref": "#/definitions/shopapp.LocationAddress" + } + ], + "description": "Street address of the location." + }, + "id": { + "description": "Shopify location ID, for example `gid://shopify/Location/78620459087`.", + "example": "gid://shopify/Location/78620459087", "type": "string" }, - "challenges": { - "items": { - "$ref": "#/definitions/strava.Challenge" - }, - "type": "array" + "latitude": { + "description": "Latitude of the location, in degrees.", + "example": 40.7205232, + "type": "number" }, - "title": { - "example": "Run Challenges", + "longitude": { + "description": "Longitude of the location, in degrees.", + "example": -73.9961032, + "type": "number" + }, + "name": { + "description": "Name of the location, for example `NYC`.", + "example": "NYC", "type": "string" } }, "type": "object" }, - "strava.ChallengesResponse": { + "shopapp.ShopLocationsResponse": { "properties": { - "fetched_at": { - "example": "2026-08-07T12:00:00Z", - "type": "string" - }, - "promoted_challenge": { - "$ref": "#/definitions/strava.Challenge" + "limit": { + "description": "Maximum number of locations requested.", + "example": 10, + "type": "integer" }, - "sections": { + "locations": { + "description": "Retail locations of the shop.", "items": { - "$ref": "#/definitions/strava.ChallengeSection" + "$ref": "#/definitions/shopapp.ShopLocationItem" }, "type": "array" }, - "source_url": { - "example": "https://www.strava.com/challenges", + "next_cursor": { + "description": "Cursor Shop.app returns for the next page of locations.", + "type": "string" + }, + "shop_handle": { + "description": "Shop.app handle of the shop.", + "example": "marcnolan", + "type": "string" + }, + "shop_id": { + "description": "Shop.app ID of the shop.", + "example": "186720", "type": "string" + }, + "total_count": { + "description": "Total number of locations the shop has.", + "example": 2, + "type": "integer" } }, "type": "object" }, - "strava.ClubResponse": { + "shopapp.ShopProductsResponse": { "properties": { - "avatar_image_url": { - "example": "https://dgalywyr863hv.cloudfront.net/pictures/clubs/521703/11986503/2/large.jpg", - "type": "string" + "collection": { + "allOf": [ + { + "$ref": "#/definitions/shopapp.ShopCollection" + } + ], + "description": "Collection the products were filtered by." }, - "country_code": { - "example": "us", + "collection_id": { + "description": "ID of the collection the products were filtered by.", + "example": "292518002767", "type": "string" }, - "cover_image_url": { - "example": "https://dgalywyr863hv.cloudfront.net/pictures/clubs/521703/11986498/3/large.jpg", - "type": "string" + "limit": { + "description": "Maximum number of products requested.", + "example": 30, + "type": "integer" }, - "description": { - "example": "Founded in 2019 Women of OZ NWA is an inclusive, non-profit organization...", + "next_cursor": { + "description": "Cursor Shop.app returns for the next page of products.", "type": "string" }, - "fetched_at": { - "example": "2026-08-07T12:00:00Z", - "type": "string" + "products": { + "description": "Products of the shop.", + "items": { + "$ref": "#/definitions/shopapp.ProductItem" + }, + "type": "array" }, - "id": { - "example": "521703", + "shop_handle": { + "description": "Shop.app handle of the shop.", + "example": "marcnolan", "type": "string" }, - "location": { - "example": "Bentonville, Arkansas", + "sort_by": { + "description": "Sort order applied: `MOST_SALES`, `PRICE_LOW_TO_HIGH`, `PRICE_HIGH_TO_LOW` or `RELEVANCE`.", + "example": "MOST_SALES", "type": "string" - }, - "member_count": { - "example": 937, + } + }, + "type": "object" + }, + "shopapp.ShopResponse": { + "properties": { + "shop": { + "allOf": [ + { + "$ref": "#/definitions/shopapp.ShopDetail" + } + ], + "description": "Details of the shop." + } + }, + "type": "object" + }, + "shopapp.ShopReviewsResponse": { + "properties": { + "limit": { + "description": "Maximum number of reviews requested.", + "example": 20, "type": "integer" }, - "name": { - "example": "Women of OZ NWA", + "next_cursor": { + "description": "Cursor Shop.app returns for the next page of reviews.", "type": "string" }, - "private": { - "example": true, - "type": "boolean" + "reviews": { + "description": "Shopper reviews of the shop.", + "items": { + "$ref": "#/definitions/shopapp.ReviewItem" + }, + "type": "array" }, - "source_url": { - "example": "https://www.strava.com/clubs/521703", + "shop_handle": { + "description": "Shop.app handle of the shop.", + "example": "marcnolan", "type": "string" }, - "url": { - "example": "https://www.strava.com/clubs/521703", + "shop_id": { + "description": "Shop.app ID of the shop.", + "example": "186720", "type": "string" }, - "verified": { - "example": false, - "type": "boolean" + "total_count": { + "description": "Total number of reviews the shop has.", + "example": 15015, + "type": "integer" } }, "type": "object" }, - "strava.RouteCard": { + "shopapp.ShopSummary": { "properties": { - "description": { - "description": "Short description of the route.", - "example": "The Mallory Cave hike takes you to the mouth of a beautiful cave...", - "type": "string" + "count": { + "description": "Number of sampled products from this shop.", + "example": 4, + "type": "integer" }, - "difficulty": { - "description": "Difficulty label Strava shows for the route, such as `Easy`.", - "example": "Easy", + "shop_id": { + "description": "Shop.app ID of the shop.", + "example": "3961166", "type": "string" }, - "distance_raw": { - "description": "Route distance as Strava displays it, with its unit, such as `1.46 mi`.", - "example": "1.46 mi", + "shop_name": { + "description": "Name of the shop.", + "example": "Start Fitness", "type": "string" + } + }, + "type": "object" + }, + "shopapp.ShopTypeaheadItem": { + "properties": { + "collection": { + "allOf": [ + { + "$ref": "#/definitions/shopapp.ShopCollection" + } + ], + "description": "Suggested collection. Set when `type` is `collection`." }, - "elevation_gain_raw": { - "description": "Elevation gain as Strava displays it, with its unit, such as `345 ft`.", - "example": "345 ft", + "id": { + "description": "ID of the suggested product, collection or term.", + "example": "7438827651151", "type": "string" }, - "image_url": { - "description": "URL of the route's image.", - "example": "https://dgtzuqphqg23d.cloudfront.net/8UruePMrrrQMdHGsELroGsOsTMWqh030g7159PMSue4-768x576.jpg", - "type": "string" + "position": { + "description": "Position of the suggestion in the list, starting at 1.", + "example": 1, + "type": "integer" }, - "name": { - "description": "Name of the route as Strava shows it.", - "example": "Mallory Cave via N.C.A.R. Trail", - "type": "string" + "product": { + "allOf": [ + { + "$ref": "#/definitions/shopapp.ProductItem" + } + ], + "description": "Suggested product. Set when `type` is `product`." }, - "path": { - "description": "Route path on Strava. Pass it to the route detail endpoint.", - "example": "hiking/usa/colorado/boulder/mallory-cave_5171952737974445730", + "text": { + "description": "Text of the suggestion, such as a term or product title.", + "example": "loafer", "type": "string" }, - "rank": { - "description": "Position of the route in the listing.", - "example": 1, - "type": "integer" + "type": { + "description": "Kind of suggestion: `product`, `collection` or `term`.", + "example": "product", + "type": "string" }, "url": { - "description": "URL of the route page on Strava.", - "example": "https://www.strava.com/routes/hiking/usa/colorado/boulder/mallory-cave_5171952737974445730", + "description": "Shop.app URL of the suggested product or collection.", "type": "string" } }, "type": "object" }, - "strava.RouteDetailResponse": { + "shopapp.ShopTypeaheadResponse": { "properties": { - "difficulty": { - "example": "Easy", + "limit": { + "description": "Maximum number of suggestions requested.", + "example": 20, + "type": "integer" + }, + "query": { + "description": "Text that was searched for within the shop.", + "example": "loafer", "type": "string" }, - "distance_raw": { - "example": "1.46 mi", + "shop_handle": { + "description": "Shop.app handle of the shop.", + "example": "marcnolan", "type": "string" }, - "elevation_gain_raw": { - "example": "345 ft", + "shop_id": { + "description": "Shop.app ID of the shop.", + "example": "186720", "type": "string" }, - "estimated_time_raw": { - "example": "33:48", + "suggestions": { + "description": "Typeahead suggestions from the shop.", + "items": { + "$ref": "#/definitions/shopapp.ShopTypeaheadItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "shopapp.SuggestResponse": { + "properties": { + "limit": { + "description": "Maximum number of suggestions requested.", + "example": 10, + "type": "integer" + }, + "query": { + "description": "Partial search text that suggestions were requested for.", + "example": "sneakers", "type": "string" }, - "fetched_at": { - "example": "2026-08-07T12:00:00Z", + "suggestions": { + "description": "Search suggestions returned for the text.", + "items": { + "$ref": "#/definitions/shopapp.SuggestionItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "shopapp.SuggestionItem": { + "properties": { + "image": { + "description": "URL of the shop logo. Set for `shop` suggestions.", "type": "string" }, - "name": { - "example": "Mallory Cave via N.C.A.R. Trail", + "rating": { + "description": "Average shopper rating of the shop. Set for `shop` suggestions.", + "example": 4.79, + "type": "number" + }, + "shop_handle": { + "description": "Shop.app handle of the shop. Set for `shop` suggestions.", + "example": "gr21z45he0", "type": "string" }, - "path": { - "example": "hiking/usa/colorado/boulder/mallory-cave_5171952737974445730", + "shop_id": { + "description": "Shop.app ID of the shop. Set for `shop` suggestions.", + "example": "365323", "type": "string" }, - "route_type": { - "example": "Hiking Trail", + "shop_name": { + "description": "Name of the shop. Set for `shop` suggestions.", + "example": "Sneakers Plus", "type": "string" }, - "source_url": { - "example": "https://www.strava.com/routes/hiking/usa/colorado/boulder/mallory-cave_5171952737974445730", + "text": { + "description": "Suggested search text or shop name.", + "example": "sneakers", "type": "string" }, - "summary": { - "example": "The Mallory Cave hike takes you to the mouth of a beautiful cave...", + "type": { + "description": "Kind of suggestion: `query` or `shop`.", + "example": "query", "type": "string" }, "url": { - "example": "https://www.strava.com/routes/hiking/usa/colorado/boulder/mallory-cave_5171952737974445730", + "description": "Shop.app URL of the search results or shop page for the suggestion.", + "example": "https://shop.app/search/results?query=sneakers", "type": "string" } }, "type": "object" }, - "strava.RoutesResponse": { + "shopapp.VariantItem": { "properties": { - "country": { - "description": "Country slug that was requested, such as `usa`.", - "example": "usa", - "type": "string" + "available_for_sale": { + "description": "`true` when the variant can be bought.", + "type": "boolean" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-08-07T12:00:00Z", + "currency": { + "description": "Currency code of `price` and `original_price`.", "type": "string" }, - "page": { - "description": "Page number returned, starting at 1.", - "example": 1, - "type": "integer" + "gid": { + "description": "Shopify global ID of the variant.", + "example": "gid://shopify/ProductVariant/34761278160941", + "type": "string" }, - "region": { - "description": "Region slug that was requested, such as `colorado`.", - "example": "colorado", + "id": { + "description": "Shop.app variant ID.", + "example": "34761278160941", "type": "string" }, - "routes": { - "description": "Routes listed on this page.", - "items": { - "$ref": "#/definitions/strava.RouteCard" + "image": { + "allOf": [ + { + "$ref": "#/definitions/shopapp.ImageItem" + } + ], + "description": "Image of the variant." + }, + "options": { + "additionalProperties": { + "type": "string" }, - "type": "array" + "description": "Option values of the variant keyed by option name, for example `Size`.", + "type": "object" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.strava.com/routes/hiking/usa/colorado?page=1", - "type": "string" + "original_price": { + "description": "Price before the discount, in `currency`.", + "type": "number" }, - "sport": { - "description": "Sport the routes are for, such as `hiking`.", - "example": "hiking", - "type": "string" + "price": { + "description": "Current price of the variant, in `currency`.", + "type": "number" + }, + "requires_shipping": { + "description": "`true` when the variant has to be shipped.", + "type": "boolean" }, "title": { - "description": "Title of the Strava route listing page.", - "example": "The Best Hiking Trails in Colorado", + "description": "Variant title, for example `Black / 7 / 6E`.", + "example": "Black / 7 / 6E", "type": "string" - }, - "total_pages": { - "description": "Total number of pages in the route listing.", - "example": 16, + } + }, + "type": "object" + }, + "shopapp.VariantsResponse": { + "properties": { + "limit": { + "description": "Maximum number of variants requested.", + "example": 50, "type": "integer" }, - "total_results": { - "description": "Total number of routes in the listing.", - "example": 318, - "type": "integer" + "product_id": { + "description": "Shop.app ID of the product.", + "example": "4596217053229", + "type": "string" + }, + "variants": { + "description": "Variants of the product.", + "items": { + "$ref": "#/definitions/shopapp.VariantItem" + }, + "type": "array" } }, "type": "object" }, - "strava.challengesResponseDoc": { + "shopapp.analysisResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/strava.ChallengesResponse" + "$ref": "#/definitions/shopapp.AnalysisResponse" }, "msg": { "example": "OK", @@ -221411,14 +227050,14 @@ }, "type": "object" }, - "strava.clubResponseDoc": { + "shopapp.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/strava.ClubResponse" + "$ref": "#/definitions/shopapp.CategoriesResponse" }, "msg": { "example": "OK", @@ -221427,14 +227066,14 @@ }, "type": "object" }, - "strava.routeDetailResponseDoc": { + "shopapp.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/strava.RouteDetailResponse" + "$ref": "#/definitions/shopapp.ProductDetailResponse" }, "msg": { "example": "OK", @@ -221443,14 +227082,14 @@ }, "type": "object" }, - "strava.routesResponseDoc": { + "shopapp.productShopResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/strava.RoutesResponse" + "$ref": "#/definitions/shopapp.ProductShopResponse" }, "msg": { "example": "OK", @@ -221459,1589 +227098,1214 @@ }, "type": "object" }, - "streeteasy.Area": { + "shopapp.productVariantResponseDoc": { "properties": { - "id": { - "type": "integer" - }, - "level": { + "code": { + "example": 200, "type": "integer" }, - "name": { - "type": "string" - }, - "parentId": { - "type": "integer" + "data": { + "$ref": "#/definitions/shopapp.ProductVariantResponse" }, - "short": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "streeteasy.BuildingAmenityGroup": { + "shopapp.relatedResponseDoc": { "properties": { - "items": { - "items": { - "type": "string" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "name": { + "data": { + "$ref": "#/definitions/shopapp.RelatedResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "streeteasy.BuildingDetails": { + "shopapp.reviewsResponseDoc": { "properties": { - "address": { - "type": "string" - }, - "amenities": { - "items": { - "$ref": "#/definitions/streeteasy.BuildingAmenityGroup" - }, - "type": "array" - }, - "available_rental_count": { - "type": "integer" - }, - "available_rental_listings": { - "items": { - "$ref": "#/definitions/streeteasy.BuildingListing" - }, - "type": "array" - }, - "available_sale_count": { + "code": { + "example": 200, "type": "integer" }, - "available_sale_listings": { - "items": { - "$ref": "#/definitions/streeteasy.BuildingListing" - }, - "type": "array" - }, - "building_type": { - "type": "string" + "data": { + "$ref": "#/definitions/shopapp.ReviewsResponse" }, - "description": { + "msg": { + "example": "OK", "type": "string" - }, - "facts": { - "items": { - "$ref": "#/definitions/streeteasy.BuildingFact" - }, - "type": "array" - }, - "floor_count": { + } + }, + "type": "object" + }, + "shopapp.searchResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "name": { - "type": "string" - }, - "neighborhoods": { - "items": { - "type": "string" - }, - "type": "array" - }, - "policies": { - "items": { - "type": "string" - }, - "type": "array" - }, - "slug": { - "type": "string" - }, - "unit_count": { - "type": "integer" + "data": { + "$ref": "#/definitions/shopapp.SearchResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" - }, - "year_built": { - "type": "integer" } }, "type": "object" }, - "streeteasy.BuildingFact": { + "shopapp.shopLocationsResponseDoc": { "properties": { - "label": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "value": { + "data": { + "$ref": "#/definitions/shopapp.ShopLocationsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "streeteasy.BuildingListing": { + "shopapp.shopProductsResponseDoc": { "properties": { - "bathrooms": { - "type": "string" - }, - "bedrooms": { - "type": "string" - }, - "listed_by": { - "type": "string" - }, - "listing_type": { - "type": "string" - }, - "photo_url": { - "type": "string" - }, - "price": { - "type": "string" - }, - "square_footage": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "unit": { - "type": "string" + "data": { + "$ref": "#/definitions/shopapp.ShopProductsResponse" }, - "url_path": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "streeteasy.GeoPoint": { + "shopapp.shopResponseDoc": { "properties": { - "latitude": { - "type": "number" + "code": { + "example": 200, + "type": "integer" }, - "longitude": { - "type": "number" + "data": { + "$ref": "#/definitions/shopapp.ShopResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "streeteasy.LeadMedia": { + "shopapp.shopReviewsResponseDoc": { "properties": { - "photo": { - "$ref": "#/definitions/streeteasy.Photo" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/shopapp.ShopReviewsResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "streeteasy.MarketDataCatalog": { + "shopapp.shopTypeaheadResponseDoc": { "properties": { - "metrics": { - "items": { - "$ref": "#/definitions/streeteasy.MarketDataMetric" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "source": { + "data": { + "$ref": "#/definitions/shopapp.ShopTypeaheadResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "streeteasy.MarketDataMetric": { + "shopapp.suggestionsResponseDoc": { "properties": { - "bedrooms": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "id": { - "type": "string" + "data": { + "$ref": "#/definitions/shopapp.SuggestResponse" }, - "label": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "shopapp.variantsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "property_type": { - "type": "string" + "data": { + "$ref": "#/definitions/shopapp.VariantsResponse" }, - "type": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "streeteasy.MarketDataSeries": { + "shopee.Banner": { "properties": { - "area_count": { + "banner_id": { + "example": 265864, "type": "integer" }, - "areas": { - "items": { - "$ref": "#/definitions/streeteasy.MarketDataSeriesArea" - }, - "type": "array" - }, - "data_through": { - "type": "string" + "campaign_unit_id": { + "type": "integer" }, - "dataset": { - "$ref": "#/definitions/streeteasy.MarketDataMetric" + "end_time": { + "type": "integer" }, - "end_month": { + "image": { "type": "string" }, - "source": { - "type": "string" + "slot_id": { + "type": "integer" }, - "start_month": { + "start_time": { + "type": "integer" + }, + "url": { "type": "string" } }, "type": "object" }, - "streeteasy.MarketDataSeriesArea": { + "shopee.BannersResponse": { "properties": { - "borough": { - "type": "string" - }, - "months": { + "banners": { "items": { - "$ref": "#/definitions/streeteasy.MarketDataSeriesMonth" + "$ref": "#/definitions/shopee.Banner" }, "type": "array" }, - "name": { + "ratio": { + "example": 3.3333333, + "type": "number" + }, + "region": { + "example": "my", "type": "string" }, - "type": { + "slot": { + "example": "HOME_CAROUSEL_01", + "type": "string" + }, + "space_key": { + "example": "PC-MY-HOME_CAROUSEL_01", "type": "string" } }, "type": "object" }, - "streeteasy.MarketDataSeriesMonth": { + "shopee.CategoriesResponse": { "properties": { - "month": { + "categories": { + "items": { + "$ref": "#/definitions/shopee.CategoryNode" + }, + "type": "array" + }, + "region": { + "example": "my", "type": "string" }, - "value": { - "type": "number" + "total_roots": { + "example": 25, + "type": "integer" } }, "type": "object" }, - "streeteasy.MarketIndices": { + "shopee.CategoryDetail": { "properties": { - "area_count": { + "category_id": { + "example": 11000979, "type": "integer" }, - "areas": { + "display_names": { "items": { - "$ref": "#/definitions/streeteasy.MarketIndicesArea" + "$ref": "#/definitions/shopee.LocalizedName" }, "type": "array" }, - "data_through": { + "image": { "type": "string" }, - "end_month": { - "type": "string" + "level": { + "type": "integer" }, - "source": { + "name": { + "example": "Mobile & Accessories", "type": "string" }, - "start_month": { - "type": "string" + "parent_category_ids": { + "items": { + "type": "integer" + }, + "type": "array" } }, "type": "object" }, - "streeteasy.MarketIndicesArea": { + "shopee.CategoryDetailResponse": { "properties": { - "borough": { - "type": "string" - }, - "months": { + "categories": { "items": { - "$ref": "#/definitions/streeteasy.MarketIndicesMonth" + "$ref": "#/definitions/shopee.CategoryDetail" }, "type": "array" }, - "name": { - "type": "string" + "catids": { + "items": { + "type": "integer" + }, + "type": "array" }, - "type": { + "region": { + "example": "my", "type": "string" } }, "type": "object" }, - "streeteasy.MarketIndicesMonth": { + "shopee.CategoryNode": { "properties": { - "month": { + "category_id": { + "example": 11000979, + "type": "integer" + }, + "children": { + "items": { + "$ref": "#/definitions/shopee.CategoryNode" + }, + "type": "array" + }, + "display_name": { + "example": "Mobile & Accessories", "type": "string" }, - "rent_index": { - "type": "number" + "image": { + "type": "string" }, - "sales_price_index": { - "type": "number" + "level": { + "example": 1, + "type": "integer" + }, + "name": { + "example": "Mobile & Accessories", + "type": "string" + }, + "parent_category_id": { + "type": "integer" } }, "type": "object" }, - "streeteasy.MarketInventory": { + "shopee.FlashSaleItem": { "properties": { - "area_count": { - "type": "integer" - }, - "areas": { + "category_ids": { "items": { - "$ref": "#/definitions/streeteasy.MarketInventoryArea" + "type": "integer" }, "type": "array" }, - "data_through": { + "discount": { + "example": "31%", "type": "string" }, - "end_month": { + "end_time": { + "type": "integer" + }, + "flash_sale_stock": { + "type": "integer" + }, + "historical_sold": { + "example": 28759, + "type": "integer" + }, + "image": { "type": "string" }, - "source": { + "item_id": { + "example": 18893260244, + "type": "integer" + }, + "name": { "type": "string" }, - "start_month": { + "official_shop": { + "type": "boolean" + }, + "price": { + "example": 188.1, + "type": "number" + }, + "price_before_discount": { + "example": 272.32, + "type": "number" + }, + "promo_name": { + "type": "string" + }, + "rating": { + "example": 4.73, + "type": "number" + }, + "rating_count": { + "example": 11806, + "type": "integer" + }, + "shop_id": { + "example": 1002453997, + "type": "integer" + }, + "shopee_choice": { + "type": "boolean" + }, + "start_time": { + "type": "integer" + }, + "stock": { + "example": 513, + "type": "integer" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { "type": "string" } }, "type": "object" }, - "streeteasy.MarketInventoryArea": { + "shopee.FlashSaleResponse": { "properties": { - "borough": { - "type": "string" - }, - "months": { + "items": { "items": { - "$ref": "#/definitions/streeteasy.MarketInventoryMonth" + "$ref": "#/definitions/shopee.FlashSaleItem" }, "type": "array" }, - "name": { - "type": "string" + "limit": { + "example": 20, + "type": "integer" }, - "type": { + "offset": { + "example": 0, + "type": "integer" + }, + "region": { + "example": "my", "type": "string" + }, + "session": { + "$ref": "#/definitions/shopee.FlashSaleSession" } }, "type": "object" }, - "streeteasy.MarketInventoryMonth": { + "shopee.FlashSaleSession": { "properties": { - "month": { - "type": "string" + "end_time": { + "type": "integer" }, - "rental_inventory": { + "promotion_id": { "type": "integer" }, - "sales_inventory": { + "start_time": { + "type": "integer" + }, + "status": { "type": "integer" } }, "type": "object" }, - "streeteasy.OpenHouse": { + "shopee.FooterBlock": { "properties": { - "end_date": { + "sections": { + "items": { + "$ref": "#/definitions/shopee.FooterSection" + }, + "type": "array" + } + }, + "type": "object" + }, + "shopee.FooterLink": { + "properties": { + "text": { + "example": "Help Centre", "type": "string" }, - "name": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "shopee.FooterMedia": { + "properties": { + "image": { "type": "string" }, - "start_date": { + "text": { "type": "string" }, - "status": { + "url": { "type": "string" } }, "type": "object" }, - "streeteasy.Photo": { + "shopee.FooterQR": { "properties": { - "key": { + "extra_images": { + "items": { + "$ref": "#/definitions/shopee.FooterMedia" + }, + "type": "array" + }, + "image": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "streeteasy.QuickSearchEntry": { + "shopee.FooterResponse": { "properties": { - "details": { + "blocks": { "items": { - "type": "string" + "$ref": "#/definitions/shopee.FooterBlock" }, "type": "array" }, - "name": { + "layout_id": { + "example": 1, + "type": "integer" + }, + "layout_name": { + "example": "Default Layout", "type": "string" }, - "url": { + "mobile_blocks": { + "items": { + "$ref": "#/definitions/shopee.FooterBlock" + }, + "type": "array" + }, + "region": { + "example": "my", "type": "string" } }, "type": "object" }, - "streeteasy.QuickSearchGroup": { + "shopee.FooterSection": { "properties": { - "entries": { + "images": { "items": { - "$ref": "#/definitions/streeteasy.QuickSearchEntry" + "$ref": "#/definitions/shopee.FooterMedia" }, "type": "array" }, - "id": { - "type": "string" + "links": { + "items": { + "$ref": "#/definitions/shopee.FooterLink" + }, + "type": "array" }, - "is_preview": { - "type": "boolean" + "qr": { + "$ref": "#/definitions/shopee.FooterQR" + }, + "simple": { + "$ref": "#/definitions/shopee.FooterSimple" + }, + "social_media": { + "items": { + "$ref": "#/definitions/shopee.FooterMedia" + }, + "type": "array" }, "title": { + "example": "CUSTOMER SERVICE", "type": "string" }, - "total_count": { + "type": { "type": "integer" } }, "type": "object" }, - "streeteasy.QuickSearchResult": { + "shopee.FooterSimple": { "properties": { - "groups": { - "items": { - "$ref": "#/definitions/streeteasy.QuickSearchGroup" - }, - "type": "array" + "image": { + "type": "string" }, - "query": { + "text": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "streeteasy.RentalEdge": { + "shopee.HomeBanner": { "properties": { - "node": { - "$ref": "#/definitions/streeteasy.RentalListing" + "image": { + "type": "string" }, - "type": { + "url": { "type": "string" } }, "type": "object" }, - "streeteasy.RentalListing": { + "shopee.HomeCampaign": { "properties": { - "advertisedOnSe": { - "type": "boolean" - }, - "areaName": { + "image": { "type": "string" }, - "bedroomCount": { - "type": "integer" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "shopee.HomeCategoriesResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/shopee.HomeCategory" + }, + "type": "array" }, - "buildingType": { + "region": { + "example": "my", "type": "string" }, - "fullBathroomCount": { + "total": { + "example": 25, + "type": "integer" + } + }, + "type": "object" + }, + "shopee.HomeCategory": { + "properties": { + "category_id": { + "example": 11000979, "type": "integer" }, - "furnished": { - "type": "boolean" + "display_name": { + "type": "string" }, - "geoPoint": { - "$ref": "#/definitions/streeteasy.GeoPoint" + "image": { + "type": "string" }, - "halfBathroomCount": { + "level": { + "example": 1, "type": "integer" }, - "id": { + "name": { + "example": "Mobile & Accessories", "type": "string" }, - "isPremiumHdpEnabled": { - "type": "boolean" - }, - "leadMedia": { - "$ref": "#/definitions/streeteasy.LeadMedia" - }, - "offMarketAt": { + "parent_category_id": { + "type": "integer" + } + }, + "type": "object" + }, + "shopee.HomeLiveSession": { + "properties": { + "cover": { "type": "string" }, - "price": { - "type": "number" + "session_id": { + "type": "integer" }, - "saleType": { - "type": "string" + "shop_id": { + "type": "integer" }, - "sourceGroupLabel": { + "title": { "type": "string" }, - "status": { - "type": "string" - }, - "street": { - "type": "string" - }, - "tier": { - "type": "string" - }, - "totalMonthlyPrice": { - "type": "number" - }, - "unit": { - "type": "string" - }, - "urlPath": { - "type": "string" + "view_count": { + "type": "integer" } }, "type": "object" }, - "streeteasy.RentalSearch": { + "shopee.HomeResponse": { "properties": { - "edges": { + "banners": { "items": { - "$ref": "#/definitions/streeteasy.RentalEdge" + "$ref": "#/definitions/shopee.HomeBanner" }, "type": "array" }, - "search": { - "properties": { - "criteria": { - "type": "string" - } + "campaigns": { + "items": { + "$ref": "#/definitions/shopee.HomeCampaign" }, - "type": "object" - }, - "totalCount": { - "type": "integer" - } - }, - "type": "object" - }, - "streeteasy.SaleEdge": { - "properties": { - "node": { - "$ref": "#/definitions/streeteasy.SaleListing" - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "streeteasy.SaleListing": { - "properties": { - "advertisedOnSe": { - "type": "boolean" - }, - "areaName": { - "type": "string" - }, - "bedroomCount": { - "type": "integer" - }, - "buildingType": { - "type": "string" - }, - "fullBathroomCount": { - "type": "integer" - }, - "furnished": { - "type": "boolean" - }, - "geoPoint": { - "$ref": "#/definitions/streeteasy.GeoPoint" - }, - "id": { - "type": "string" - }, - "isPremiumHdpEnabled": { - "type": "boolean" - }, - "leadMedia": { - "$ref": "#/definitions/streeteasy.LeadMedia" - }, - "offMarketAt": { - "type": "string" - }, - "price": { - "type": "number" - }, - "saleType": { - "type": "string" - }, - "sourceGroupLabel": { - "type": "string" - }, - "street": { - "type": "string" - }, - "unit": { - "type": "string" + "type": "array" }, - "urlPath": { - "type": "string" - } - }, - "type": "object" - }, - "streeteasy.SaleSearch": { - "properties": { - "edges": { + "components": { "items": { - "$ref": "#/definitions/streeteasy.SaleEdge" + "type": "string" }, "type": "array" }, - "search": { - "properties": { - "criteria": { - "type": "string" - } + "flash_sale": { + "items": { + "$ref": "#/definitions/shopee.FlashSaleItem" }, - "type": "object" - }, - "totalCount": { - "type": "integer" - } - }, - "type": "object" - }, - "streeteasy.SchoolDetails": { - "properties": { - "address": { - "type": "string" - }, - "district": { - "type": "integer" - }, - "fax": { - "type": "string" + "type": "array" }, - "grades": { + "live_sessions": { "items": { - "type": "string" + "$ref": "#/definitions/shopee.HomeLiveSession" }, "type": "array" }, - "name": { - "type": "string" - }, - "neighborhood": { - "type": "string" - }, - "phone": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "streeteasy.UnitAddress": { - "properties": { - "country": { - "type": "string" - }, - "neighborhood": { - "type": "string" - }, - "postal_code": { - "type": "string" - }, - "region": { - "type": "string" - }, - "street": { - "type": "string" - } - }, - "type": "object" - }, - "streeteasy.UnitDetails": { - "properties": { - "address": { - "$ref": "#/definitions/streeteasy.UnitAddress" - }, - "amenities": { + "prefills": { "items": { "type": "string" }, "type": "array" }, - "availability": { - "type": "string" - }, - "building_slug": { - "type": "string" - }, - "currency": { - "type": "string" - }, - "description": { - "type": "string" - }, - "listed_date": { - "type": "string" - }, - "name": { + "region": { + "example": "my", "type": "string" }, - "open_houses": { + "squares": { "items": { - "$ref": "#/definitions/streeteasy.OpenHouse" + "$ref": "#/definitions/shopee.HomeSquare" }, "type": "array" - }, - "photo_url": { - "type": "string" - }, - "price": { - "type": "number" - }, - "unit": { - "type": "string" - }, - "url": { - "type": "string" } }, "type": "object" }, - "stubhub.CarouselEvent": { + "shopee.HomeSquare": { "properties": { - "category_id": { - "example": 33253, - "type": "integer" - }, - "day_of_week": { - "example": "Sat", - "type": "string" - }, - "event_id": { - "example": 161204289, - "type": "integer" - }, - "image_url": { - "type": "string" - }, - "is_date_confirmed": { - "type": "boolean" - }, - "is_time_confirmed": { - "type": "boolean" - }, - "local_event_date": { - "example": "Mar 06 2027", - "type": "string" - }, - "local_event_time": { - "example": "7:30 PM", - "type": "string" - }, - "location": { - "example": "Kai Tak, Kowloon City", + "image": { "type": "string" }, - "min_price": { - "example": 99, - "type": "number" - }, - "name": { - "example": "BTS", + "title": { "type": "string" }, "url": { "type": "string" - }, - "venue_name": { - "type": "string" } }, "type": "object" }, - "stubhub.CarouselPerson": { + "shopee.LocalizedName": { "properties": { - "available_local_events": { - "example": 4, - "type": "integer" - }, - "category_id": { - "example": 26202, - "type": "integer" - }, - "formatted_local_events_dates": { - "example": "Nov 27 - Dec 06", - "type": "string" - }, - "image_credit_name": { - "type": "string" - }, - "image_url": { - "type": "string" + "is_default": { + "type": "boolean" }, - "name": { - "example": "The Weeknd", + "lang": { + "example": "en", "type": "string" }, - "url": { + "value": { + "example": "Mobile & Accessories", "type": "string" } }, "type": "object" }, - "stubhub.CarouselResponse": { + "shopee.LocationFiltersResponse": { "properties": { - "alternative_performers": { + "groups": { "items": { - "$ref": "#/definitions/stubhub.CarouselPerson" + "$ref": "#/definitions/shopee.LocationGroup" }, "type": "array" }, - "category_id": { - "type": "integer" - }, - "fetched_at": { + "region": { + "example": "my", + "type": "string" + } + }, + "type": "object" + }, + "shopee.LocationGroup": { + "properties": { + "group": { + "example": "E", "type": "string" }, - "lat": { - "type": "number" - }, - "lon": { - "type": "number" - }, - "max": { - "type": "integer" + "group_name": { + "type": "string" }, - "maybe_interested_in": { + "location_tag_ids": { "items": { - "$ref": "#/definitions/stubhub.CarouselPerson" + "type": "string" }, "type": "array" }, - "performer_id": { - "type": "integer" - }, - "performer_slug": { - "type": "string" - }, - "recently_viewed": { + "locations": { "items": { - "$ref": "#/definitions/stubhub.CarouselPerson" + "type": "string" }, "type": "array" }, - "source_url": { + "translated_group": { "type": "string" }, - "top_level_category_id": { - "type": "integer" - }, - "trending_events": { + "translated_locations": { "items": { - "$ref": "#/definitions/stubhub.CarouselEvent" + "type": "string" }, "type": "array" } }, "type": "object" }, - "stubhub.CategoriesResponse": { + "shopee.MallCategoriesResponse": { "properties": { "categories": { "items": { - "$ref": "#/definitions/stubhub.Category" + "$ref": "#/definitions/shopee.MallCategory" }, "type": "array" }, - "count": { - "example": 12, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "from": { - "type": "string" - }, - "source_url": { + "region": { + "example": "my", "type": "string" }, - "to": { - "type": "string" + "total": { + "example": 24, + "type": "integer" } }, "type": "object" }, - "stubhub.Category": { + "shopee.MallCategory": { "properties": { - "id": { - "example": 5084, + "category_id": { + "example": 11000616, "type": "integer" }, - "is_venue": { - "type": "boolean" - }, - "min_price": { - "example": 45, - "type": "number" - }, - "name": { - "example": "NFL", + "image": { "type": "string" }, - "url": { + "name": { + "example": "Muslim Fashion", "type": "string" } }, "type": "object" }, - "stubhub.CategoryEvent": { + "shopee.MallShop": { "properties": { - "country": { - "example": "USA", - "type": "string" - }, - "date": { - "example": "Sep 15", - "type": "string" - }, - "day_of_week": { - "example": "Tue", - "type": "string" - }, - "distance_miles": { - "example": "26 mi", + "brand_name": { "type": "string" }, - "event_id": { - "example": 161280784, + "ctime": { "type": "integer" }, - "has_active_listings": { - "type": "boolean" - }, - "is_date_confirmed": { - "type": "boolean" - }, - "is_multiday_event": { - "type": "boolean" - }, - "is_parking_pass": { - "type": "boolean" - }, - "is_time_confirmed": { - "type": "boolean" - }, - "name": { - "example": "ERRA", - "type": "string" - }, - "time": { - "example": "6:30 PM", - "type": "string" - }, - "url": { + "logo": { "type": "string" }, - "venue_city": { - "example": "Sayreville", + "logo_pc": { "type": "string" }, - "venue_name": { - "example": "Starland Ballroom", + "name": { + "example": "ANTA Official Store", "type": "string" }, - "venue_state": { - "example": "NJ", + "redirect_url": { "type": "string" - } - }, - "type": "object" - }, - "stubhub.CategoryEventsResponse": { - "properties": { - "category_id": { - "type": "integer" }, - "count": { - "example": 20, + "shop_id": { + "example": 236986575, "type": "integer" }, - "events": { - "items": { - "$ref": "#/definitions/stubhub.CategoryEvent" - }, - "type": "array" - }, - "fetched_at": { - "type": "string" - }, - "page": { - "example": 1, + "shop_type": { "type": "integer" }, - "page_size": { - "example": 20, + "user_id": { "type": "integer" }, - "source_url": { + "username": { + "example": "antamalaysia.os", "type": "string" - }, - "total_count": { - "example": 1588, - "type": "integer" } }, "type": "object" }, - "stubhub.ExploreEvent": { + "shopee.PrefillItem": { "properties": { - "category_id": { - "example": 5084, - "type": "integer" - }, - "date": { - "example": "Sep 15", - "type": "string" - }, - "day_of_week": { - "example": "Tue", - "type": "string" - }, - "event_id": { - "example": 161341819, - "type": "integer" - }, - "has_active_listings": { - "type": "boolean" - }, - "image_url": { - "type": "string" - }, - "is_date_confirmed": { - "type": "boolean" - }, - "is_time_confirmed": { - "type": "boolean" - }, - "location": { - "example": "Inglewood, CA, USA", - "type": "string" - }, - "name": { - "example": "Taylor Swift", + "hint": { + "example": "Sign Up & Get Your First Order Free!", "type": "string" }, - "time": { - "example": "10:00 AM", + "image": { "type": "string" }, "url": { "type": "string" - }, - "venue_name": { - "example": "SoFi Stadium", - "type": "string" } }, "type": "object" }, - "stubhub.ExploreResponse": { + "shopee.PrefillsResponse": { "properties": { - "count": { - "example": 20, - "type": "integer" - }, - "events": { + "prefills": { "items": { - "$ref": "#/definitions/stubhub.ExploreEvent" + "$ref": "#/definitions/shopee.PrefillItem" }, "type": "array" }, - "fetched_at": { - "type": "string" - }, - "from": { - "type": "string" - }, - "lat": { - "type": "number" - }, - "lon": { - "type": "number" - }, - "source_url": { - "type": "string" - }, - "to": { + "region": { + "example": "my", "type": "string" } }, "type": "object" }, - "stubhub.NavigationCategoriesResponse": { + "shopee.SearchFilterGroup": { "properties": { - "category_id": { - "example": 1, - "type": "integer" + "display_name": { + "example": "Brand", + "type": "string" }, - "id": { - "example": 1, - "type": "integer" + "dynamic": { + "type": "boolean" }, - "subcategories": { + "name": { + "example": "BRANDS", + "type": "string" + }, + "options": { "items": { - "$ref": "#/definitions/stubhub.NavigationCategory" + "$ref": "#/definitions/shopee.SearchFilterOption" }, "type": "array" }, - "title": { - "example": "Theater", - "type": "string" - }, - "url": { - "example": "https://www.stubhub.com/theater-and-arts-tickets/category/174", - "type": "string" - }, - "view_all_content": { - "example": "View More Theater", - "type": "string" + "ui_type": { + "example": 1, + "type": "integer" } }, "type": "object" }, - "stubhub.NavigationCategory": { + "shopee.SearchFilterOption": { "properties": { - "id": { - "example": 12585, - "type": "integer" - }, - "subcategories": { - "items": { - "$ref": "#/definitions/stubhub.NavigationCategory" - }, - "type": "array" - }, - "title": { - "example": "Broadway Shows", + "display_name": { + "example": "Wireless Earbuds", "type": "string" }, - "url": { - "example": "https://www.stubhub.com/broadway-shows-tickets/category/138275421", + "name": { + "example": "Wireless Earbuds", "type": "string" }, - "view_all_content": { - "example": "View More Theater", + "value": { + "example": "11000993", "type": "string" } }, "type": "object" }, - "stubhub.PerformerEvent": { + "shopee.SearchFiltersResponse": { "properties": { - "availability": { - "example": "http://schema.org/InStock", - "type": "string" - }, - "low_price": { - "example": 71.87, - "type": "number" - }, - "name": { - "example": "Indianapolis Colts at Kansas City Chiefs", - "type": "string" - }, - "price_currency": { - "example": "USD", - "type": "string" - }, - "start_date": { - "example": "2026-09-20T19:20:00", - "type": "string" - }, - "url": { + "category": { + "example": "11000979", "type": "string" }, - "venue_city": { - "example": "Kansas City", - "type": "string" + "groups": { + "items": { + "$ref": "#/definitions/shopee.SearchFilterGroup" + }, + "type": "array" }, - "venue_country": { - "example": "USA", + "keyword": { + "example": "headphones", "type": "string" }, - "venue_name": { - "example": "GEHA Field at Arrowhead Stadium", + "region": { + "example": "my", "type": "string" }, - "venue_state": { - "example": "Missouri", - "type": "string" + "shortcuts": { + "items": { + "$ref": "#/definitions/shopee.SearchFilterOption" + }, + "type": "array" } }, "type": "object" }, - "stubhub.PerformerEventsResponse": { + "shopee.SearchHint": { "properties": { - "count": { - "example": 10, + "category_id": { "type": "integer" }, - "events": { + "category_name": { + "type": "string" + }, + "item_ids": { "items": { - "$ref": "#/definitions/stubhub.PerformerEvent" + "type": "integer" }, "type": "array" }, - "fetched_at": { + "keyword": { + "example": "phone case", "type": "string" }, - "performer_id": { + "position": { "type": "integer" }, - "performer_slug": { - "type": "string" - }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "stubhub.SearchGroup": { - "properties": { - "count": { - "example": 3, + "record_type": { "type": "integer" }, - "entity": { - "example": 5, + "source_type": { "type": "integer" - }, - "results": { - "items": { - "$ref": "#/definitions/stubhub.SearchResult" - }, - "type": "array" } }, "type": "object" }, - "stubhub.SearchResponse": { + "shopee.SearchHintsResponse": { "properties": { - "fetched_at": { + "algorithm": { "type": "string" }, - "groups": { + "hints": { "items": { - "$ref": "#/definitions/stubhub.SearchGroup" + "$ref": "#/definitions/shopee.SearchHint" }, "type": "array" }, - "more": { - "type": "boolean" - }, - "query": { - "example": "The Weeknd", + "keyword": { + "example": "phone", "type": "string" }, - "source_url": { + "region": { + "example": "my", "type": "string" }, - "special_char_only": { - "type": "boolean" + "search_keyword_type": { + "type": "integer" + }, + "version": { + "example": 2, + "type": "integer" } }, "type": "object" }, - "stubhub.SearchResult": { + "shopee.ShopInfoResponse": { "properties": { - "category_image_url": { + "description": { "type": "string" }, - "entity_type": { - "example": 1, - "type": "integer" - }, - "icon_name": { - "example": "Concert", + "images": { "type": "string" }, - "id": { - "example": 26202, - "type": "integer" + "is_mart": { + "type": "boolean" }, - "image_url": { - "type": "string" + "is_ship_from_overseas": { + "type": "boolean" }, - "subtitle": { - "example": "Concert Tickets", - "type": "string" + "label_ids": { + "items": { + "type": "integer" + }, + "type": "array" }, - "title": { - "example": "The Weeknd", + "name": { "type": "string" }, - "url": { - "example": "https://www.stubhub.com/the-weeknd-tickets/performer/714235", - "type": "string" - } - }, - "type": "object" - }, - "stubhub.SuggestedSearch": { - "properties": { - "category_image_url": { + "official_shop": { + "type": "boolean" + }, + "rating_star": { + "example": 4.948498, + "type": "number" + }, + "region": { + "example": "my", "type": "string" }, - "id": { - "example": 26202, + "shop_id": { + "example": 52784309, "type": "integer" }, - "title": { - "example": "The Weeknd", - "type": "string" + "shopee_verified": { + "type": "boolean" }, - "top_level_category_id": { - "example": 3, + "status": { "type": "integer" }, - "url": { - "example": "https://www.stubhub.com/the-weeknd-tickets/performer/714235", - "type": "string" + "user_id": { + "type": "integer" } }, "type": "object" }, - "stubhub.SuggestedSearchesResponse": { + "shopee.ShopsResponse": { "properties": { - "count": { - "example": 10, + "limit": { + "example": 20, "type": "integer" }, - "fetched_at": { - "type": "string" + "offset": { + "example": 0, + "type": "integer" }, - "source_url": { + "region": { + "example": "my", "type": "string" }, - "suggestions": { + "shops": { "items": { - "$ref": "#/definitions/stubhub.SuggestedSearch" + "$ref": "#/definitions/shopee.MallShop" }, "type": "array" + }, + "total": { + "example": 632, + "type": "integer" } }, "type": "object" }, - "stubhub.TrendingEvent": { + "shopee.SuggestResponse": { "properties": { - "category_id": { - "example": 4892, - "type": "integer" - }, - "date": { - "example": "Sep 19 2026", - "type": "string" - }, - "day_of_week": { - "example": "Sat", - "type": "string" - }, - "event_id": { - "example": 160790802, - "type": "integer" - }, - "image_url": { - "type": "string" - }, - "is_date_confirmed": { - "type": "boolean" - }, - "is_time_confirmed": { - "type": "boolean" - }, - "location": { - "example": "Nanterre, Ile-de-France", - "type": "string" - }, - "name": { - "example": "Celine Dion", - "type": "string" - }, - "time": { - "example": "7:30 PM", - "type": "string" - }, - "url": { + "keyword": { + "example": "head", "type": "string" }, - "venue_name": { + "region": { + "example": "my", "type": "string" - } - }, - "type": "object" - }, - "stubhub.TrendingEventsResponse": { - "properties": { - "count": { - "example": 20, - "type": "integer" }, - "events": { + "suggestions": { "items": { - "$ref": "#/definitions/stubhub.TrendingEvent" + "type": "string" }, "type": "array" - }, - "fetched_at": { - "type": "string" - }, - "page": { - "example": 1, - "type": "integer" - }, - "page_size": { - "example": 20, - "type": "integer" - }, - "source_url": { - "type": "string" - }, - "top_level_category_id": { - "type": "integer" - }, - "total_count": { - "example": 200, - "type": "integer" } }, "type": "object" }, - "stubhub.TrendingPerformer": { + "shopee.bannersResponseDoc": { "properties": { - "event_dates_range": { - "example": "Sep 16 - May 29 2027", - "type": "string" - }, - "favorites_count": { - "example": 154655, - "type": "integer" - }, - "id": { - "example": 20519, + "code": { + "example": 200, "type": "integer" }, - "image_url": { - "type": "string" - }, - "name": { - "example": "Bruno Mars", - "type": "string" + "data": { + "$ref": "#/definitions/shopee.BannersResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "stubhub.TrendingResponse": { + "shopee.categoriesResponseDoc": { "properties": { - "count": { - "example": 10, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "performers": { - "items": { - "$ref": "#/definitions/stubhub.TrendingPerformer" - }, - "type": "array" + "data": { + "$ref": "#/definitions/shopee.CategoriesResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" - }, - "top_level_category_id": { - "type": "integer" } }, "type": "object" }, - "stubhub.VenueEvent": { + "shopee.categoryDetailResponseDoc": { "properties": { - "availability": { - "example": "http://schema.org/InStock", - "type": "string" - }, - "low_price": { - "example": 71.87, - "type": "number" - }, - "name": { - "example": "Indianapolis Colts at Kansas City Chiefs", - "type": "string" - }, - "price_currency": { - "example": "USD", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "start_date": { - "example": "2026-09-20T19:20:00", - "type": "string" + "data": { + "$ref": "#/definitions/shopee.CategoryDetailResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "stubhub.VenueEventsResponse": { + "shopee.flashSaleResponseDoc": { "properties": { - "count": { - "example": 11, + "code": { + "example": 200, "type": "integer" }, - "events": { - "items": { - "$ref": "#/definitions/stubhub.VenueEvent" - }, - "type": "array" - }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "venue_id": { - "type": "integer" + "data": { + "$ref": "#/definitions/shopee.FlashSaleResponse" }, - "venue_slug": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "stubhub.carouselResponseDoc": { + "shopee.footerResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/stubhub.CarouselResponse" + "$ref": "#/definitions/shopee.FooterResponse" }, "msg": { "example": "OK", @@ -223050,14 +228314,14 @@ }, "type": "object" }, - "stubhub.categoriesResponseDoc": { + "shopee.homeCategoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/stubhub.CategoriesResponse" + "$ref": "#/definitions/shopee.HomeCategoriesResponse" }, "msg": { "example": "OK", @@ -223066,14 +228330,14 @@ }, "type": "object" }, - "stubhub.categoryEventsResponseDoc": { + "shopee.homeResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/stubhub.CategoryEventsResponse" + "$ref": "#/definitions/shopee.HomeResponse" }, "msg": { "example": "OK", @@ -223082,14 +228346,14 @@ }, "type": "object" }, - "stubhub.exploreResponseDoc": { + "shopee.locationFiltersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/stubhub.ExploreResponse" + "$ref": "#/definitions/shopee.LocationFiltersResponse" }, "msg": { "example": "OK", @@ -223098,14 +228362,14 @@ }, "type": "object" }, - "stubhub.navigationCategoriesResponseDoc": { + "shopee.mallCategoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/stubhub.NavigationCategoriesResponse" + "$ref": "#/definitions/shopee.MallCategoriesResponse" }, "msg": { "example": "OK", @@ -223114,14 +228378,14 @@ }, "type": "object" }, - "stubhub.performerEventsResponseDoc": { + "shopee.prefillsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/stubhub.PerformerEventsResponse" + "$ref": "#/definitions/shopee.PrefillsResponse" }, "msg": { "example": "OK", @@ -223130,14 +228394,14 @@ }, "type": "object" }, - "stubhub.searchResponseDoc": { + "shopee.searchFiltersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/stubhub.SearchResponse" + "$ref": "#/definitions/shopee.SearchFiltersResponse" }, "msg": { "example": "OK", @@ -223146,14 +228410,14 @@ }, "type": "object" }, - "stubhub.suggestedSearchesResponseDoc": { + "shopee.searchHintsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/stubhub.SuggestedSearchesResponse" + "$ref": "#/definitions/shopee.SearchHintsResponse" }, "msg": { "example": "OK", @@ -223162,14 +228426,14 @@ }, "type": "object" }, - "stubhub.trendingEventsResponseDoc": { + "shopee.shopInfoResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/stubhub.TrendingEventsResponse" + "$ref": "#/definitions/shopee.ShopInfoResponse" }, "msg": { "example": "OK", @@ -223178,14 +228442,14 @@ }, "type": "object" }, - "stubhub.trendingResponseDoc": { + "shopee.shopsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/stubhub.TrendingResponse" + "$ref": "#/definitions/shopee.ShopsResponse" }, "msg": { "example": "OK", @@ -223194,14 +228458,14 @@ }, "type": "object" }, - "stubhub.venueEventsResponseDoc": { + "shopee.suggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/stubhub.VenueEventsResponse" + "$ref": "#/definitions/shopee.SuggestResponse" }, "msg": { "example": "OK", @@ -223210,3539 +228474,3337 @@ }, "type": "object" }, - "stuff.AuthorResponse": { + "shopify.CollectionItem": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/stuff.HeadlineItem" - }, - "type": "array" - }, - "biography": { + "created_at": { + "description": "Time the record was created, as Shopify returns it.", "type": "string" }, - "email": { + "description": { + "description": "Collection description as plain text.", "type": "string" }, - "image_url": { + "handle": { + "description": "URL slug of the collection, for example `mens`.", + "example": "mens", "type": "string" }, - "job_title": { + "id": { + "description": "Shopify collection id.", + "example": "278435758160", "type": "string" }, - "location": { + "products_count": { + "description": "Number of products in the collection. Omitted for headless storefronts.", + "example": 24, + "type": "integer" + }, + "published_at": { + "description": "Time the record was published, as Shopify returns it.", "type": "string" }, - "name": { + "title": { + "description": "Collection name as shown on the storefront.", + "example": "Men", "type": "string" }, - "slug": { + "updated_at": { + "description": "Time the record was last updated, as Shopify returns it.", "type": "string" }, "url": { + "description": "Storefront page URL of the collection.", + "example": "https://www.allbirds.com/collections/mens", "type": "string" } }, "type": "object" }, - "stuff.HeadlineItem": { + "shopify.CollectionProductsResponse": { "properties": { - "author": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "published_at": { + "collection": { + "description": "Handle of the collection the products belong to.", + "example": "mens", "type": "string" }, - "summary": { - "type": "string" + "facets": { + "additionalProperties": { + "additionalProperties": { + "format": "int64", + "type": "integer" + }, + "type": "object" + }, + "description": "Facets and FacetsStats are populated when TransportMode is ssr_embedded\nor storefront_filtered -- see the identical fields' doc comment on\nProductsResponse.", + "type": "object" }, - "title": { - "type": "string" + "facets_stats": { + "additionalProperties": { + "$ref": "#/definitions/shopify.FacetStat" + }, + "description": "Lowest, highest and average value per numeric facet such as `price`. Present only when `transport_mode` is set.", + "type": "object" }, - "type": { - "type": "string" + "filters": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "description": "Facet filters applied, mapping each facet name to the values requested. Present only for headless storefronts.", + "type": "object" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "substack.AppStorePlan": { - "properties": { - "active": { + "in_stock_only": { + "description": "Whether only in-stock products were requested. Present only when `transport_mode` is `storefront_filtered`.", "type": "boolean" }, - "amount_cents": { - "example": 1400, + "limit": { + "description": "Maximum number of products returned per page.", + "example": 50, "type": "integer" }, - "currency": { - "example": "usd", - "type": "string" - }, - "display_name": { - "type": "string" + "max_price": { + "description": "Maximum price filter applied. Present only when `transport_mode` is `storefront_filtered`.", + "type": "number" }, - "display_price": { - "example": "$14", - "type": "string" + "min_price": { + "description": "Minimum price filter applied. Present only when `transport_mode` is `storefront_filtered`.", + "type": "number" }, - "is_founding": { - "type": "boolean" + "page": { + "description": "Page number returned.", + "example": 1, + "type": "integer" }, - "period": { - "example": "month", - "type": "string" + "product_type": { + "description": "Product types the results were filtered to. Present only when `transport_mode` is `storefront_filtered`.", + "items": { + "type": "string" + }, + "type": "array" }, - "sku": { - "type": "string" - } - }, - "type": "object" - }, - "substack.CategoriesResult": { - "properties": { - "categories": { + "products": { + "description": "Products on this page, one item per product.", "items": { - "$ref": "#/definitions/substack.Category" + "$ref": "#/definitions/shopify.ProductItem" }, "type": "array" - } - }, - "type": "object" - }, - "substack.Category": { - "properties": { - "emoji": { - "example": "🕹", - "type": "string" }, - "id": { - "example": "4", + "sort": { + "description": "Sort and Filters echo back the effective sortBy/facet-filter query\nparams that were applied, present only when transport_mode is\nssr_embedded and the caller supplied at least one. Always omitted for\nthe classic transport (which rejects them as invalid params instead).", + "enum": [ + "sortLTH", + "sortHTL", + "newest" + ], + "example": "sortLTH", "type": "string" }, - "in_category_listing": { - "description": "InCategoryListing is false for the one id the category listing\nrejects (\"bestseller\", which exists only as a leaderboard).", - "type": "boolean" - }, - "in_leaderboard": { - "description": "InLeaderboard is true when /substack/leaderboard accepts this id.", - "type": "boolean" - }, - "name": { - "example": "Technology", + "sort_by": { + "description": "SortBy, MinPrice, MaxPrice, ProductType, InStockOnly, and\nVariantOptions echo back the effective storefront-filtering params\nthat were applied -- see the identical fields' doc comment on\nProductsResponse.", + "enum": [ + "manual", + "best-selling", + "title-ascending", + "title-descending", + "price-ascending", + "price-descending", + "created-ascending", + "created-descending" + ], + "example": "price-ascending", "type": "string" }, - "slug": { - "example": "technology", - "type": "string" - } - }, - "type": "object" - }, - "substack.CategoryResult": { - "properties": { - "category_id": { - "example": "4", + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.allbirds.com", "type": "string" }, - "has_more": { - "type": "boolean" + "store_url": { + "description": "Base URL of the Shopify storefront that was queried.", + "example": "https://www.allbirds.com", + "type": "string" }, - "page": { + "total_items": { + "description": "TotalItems and TotalPages are populated only when TransportMode is\nssr_embedded, from the storefront's own embedded search-result\npagination metadata.", + "example": 184, "type": "integer" }, - "publications": { - "items": { - "$ref": "#/definitions/substack.PublicationListItem" - }, - "type": "array" + "total_pages": { + "description": "Total number of result pages. Present only for headless storefronts.", + "example": 4, + "type": "integer" }, - "type": { - "example": "paid", + "transport_mode": { + "description": "Set to `ssr_embedded` for headless storefronts, or `storefront_filtered` when sort, price, product type, in-stock or variant filters were applied. Omitted otherwise.", + "enum": [ + "ssr_embedded", + "storefront_filtered" + ], + "example": "ssr_embedded", "type": "string" + }, + "variant_options": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "description": "Variant option filters applied, mapping an option name such as `size` to the values requested. Present only when `transport_mode` is `storefront_filtered`.", + "type": "object" } }, "type": "object" }, - "substack.Contributor": { + "shopify.CollectionsResponse": { "properties": { - "bestseller_tier": { - "type": "integer" - }, - "bio": { - "type": "string" - }, - "handle": { - "type": "string" + "collections": { + "description": "Collections on this page, one item per collection.", + "items": { + "$ref": "#/definitions/shopify.CollectionItem" + }, + "type": "array" }, - "id": { - "example": 29561926, + "limit": { + "description": "Maximum number of collections returned per page.", + "example": 50, "type": "integer" }, - "is_byline_only": { - "type": "boolean" + "page": { + "description": "Page number returned.", + "example": 1, + "type": "integer" }, - "name": { - "example": "Sergiu Klainerman", + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.allbirds.com", "type": "string" }, - "photo_url": { + "store_url": { + "description": "Base URL of the Shopify storefront that was queried.", + "example": "https://www.allbirds.com", "type": "string" }, - "url": { + "transport_mode": { + "description": "Set only for headless storefronts that do not expose Shopify's standard catalogue; the value is `ssr_embedded`. Omitted otherwise. Titles are then derived from handles.", + "enum": [ + "ssr_embedded" + ], + "example": "ssr_embedded", "type": "string" } }, "type": "object" }, - "substack.ContributorsResult": { + "shopify.FacetStat": { "properties": { - "contributors": { - "items": { - "$ref": "#/definitions/substack.Contributor" - }, - "type": "array" + "avg": { + "description": "Average value of the facet across the current results.", + "example": 56.46, + "type": "number" }, - "page": { - "type": "integer" + "max": { + "description": "Highest value of the facet across the current results.", + "example": 85, + "type": "number" }, - "publication": { - "example": "www.thefp.com", - "type": "string" + "min": { + "description": "Lowest value of the facet across the current results.", + "example": 27, + "type": "number" } }, "type": "object" }, - "substack.ExploreModule": { + "shopify.ImageItem": { "properties": { - "category_id": { + "alt": { + "description": "Alternative text of the image.", + "example": "Product image", "type": "string" }, - "category_name": { + "created_at": { + "description": "Time the record was created, as Shopify returns it.", "type": "string" }, - "notes": { - "items": { - "$ref": "#/definitions/substack.Note" - }, - "type": "array" + "height": { + "description": "Image height in pixels.", + "example": 1600, + "type": "integer" }, - "posts": { - "items": { - "$ref": "#/definitions/substack.Post" - }, - "type": "array" + "id": { + "description": "Shopify image id.", + "example": "36411373027408", + "type": "string" }, - "profiles": { - "items": { - "$ref": "#/definitions/substack.User" - }, - "type": "array" + "position": { + "description": "Position of the image in the product's image list, starting at 1.", + "example": 1, + "type": "integer" }, - "publications": { - "items": { - "$ref": "#/definitions/substack.PublicationListItem" - }, - "type": "array" + "updated_at": { + "description": "Time the record was last updated, as Shopify returns it.", + "type": "string" }, - "title": { - "example": "Trending posts", + "url": { + "description": "URL of the image file.", + "example": "https://cdn.shopify.com/s/files/1/example.jpg", "type": "string" }, - "topics": { + "variant_ids": { + "description": "Ids of the variants this image is attached to.", "items": { - "$ref": "#/definitions/substack.ExploreTopic" + "type": "string" }, "type": "array" }, - "type": { - "description": "Type is the upstream module kind. Known values:\ntrendingTopicsExplore, trendingPostsExplore, newBestsellersExplore,\nvideoSuggestionsExplore, categoryLeaderboard, comment, post.", - "example": "trendingPostsExplore", - "type": "string" + "width": { + "description": "Image width in pixels.", + "example": 1600, + "type": "integer" } }, "type": "object" }, - "substack.ExploreResult": { + "shopify.OptionItem": { "properties": { - "has_more": { - "type": "boolean" + "name": { + "description": "Option name, for example `Size`.", + "example": "Size", + "type": "string" }, - "modules": { + "position": { + "description": "Position of the option on the product, starting at 1.", + "example": 1, + "type": "integer" + }, + "values": { + "description": "Values the option can take, for example `S` or `M`.", "items": { - "$ref": "#/definitions/substack.ExploreModule" + "type": "string" }, "type": "array" - }, - "next_cursor": { - "type": "string" - }, - "tab": { - "example": "explore", - "type": "string" - }, - "type": { - "example": "base", - "type": "string" } }, "type": "object" }, - "substack.ExploreTopic": { + "shopify.PageItem": { "properties": { - "alternate_queries": { - "items": { - "type": "string" - }, - "type": "array" - }, - "category": { + "content": { + "description": "Body of the page as plain text.", "type": "string" }, - "description": { + "created_at": { + "description": "Time the record was created, as Shopify returns it.", "type": "string" }, - "featured": { - "type": "boolean" - }, - "first_trending_at": { + "handle": { + "description": "URL slug of the page, for example `accessibility`.", + "example": "accessibility", "type": "string" }, "id": { + "description": "Shopify page id.", + "example": "54831906896", "type": "string" }, - "query": { - "example": "Trump campaign rhetoric 2026", + "published_at": { + "description": "Time the record was published, as Shopify returns it.", "type": "string" }, - "source": { - "example": "search_history", + "title": { + "description": "Page title as shown on the storefront.", + "example": "Accessibility", + "type": "string" + }, + "updated_at": { + "description": "Time the record was last updated, as Shopify returns it.", "type": "string" }, "url": { + "description": "Storefront URL of the page.", + "example": "https://www.allbirds.com/pages/accessibility", "type": "string" } }, "type": "object" }, - "substack.LeaderboardEntry": { + "shopify.PageResponse": { "properties": { - "author": { - "$ref": "#/definitions/substack.User" + "page": { + "allOf": [ + { + "$ref": "#/definitions/shopify.PageItem" + } + ], + "description": "The static page that was requested." }, - "publication": { - "$ref": "#/definitions/substack.PublicationListItem" + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.allbirds.com", + "type": "string" }, - "rank": { - "example": 1, - "type": "integer" + "store_url": { + "description": "Base URL of the Shopify storefront that was queried.", + "example": "https://www.allbirds.com", + "type": "string" + }, + "transport_mode": { + "description": "Set only for headless storefronts that do not expose Shopify's standard catalogue; the value is `ssr_embedded`. Omitted otherwise.", + "enum": [ + "ssr_embedded" + ], + "example": "ssr_embedded", + "type": "string" } }, "type": "object" }, - "substack.LeaderboardResult": { + "shopify.PagesResponse": { "properties": { - "category_id": { - "example": "96", - "type": "string" + "limit": { + "description": "Maximum number of pages returned per page of results.", + "example": 50, + "type": "integer" }, - "entries": { + "page": { + "description": "Page number returned.", + "example": 1, + "type": "integer" + }, + "pages": { + "description": "Static pages on this page of results, one item per page.", "items": { - "$ref": "#/definitions/substack.LeaderboardEntry" + "$ref": "#/definitions/shopify.PageItem" }, "type": "array" }, - "has_more": { - "type": "boolean" - }, - "page": { - "type": "integer" + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.allbirds.com", + "type": "string" }, - "title": { - "example": "Culture Bestsellers", + "store_url": { + "description": "Base URL of the Shopify storefront that was queried.", + "example": "https://www.allbirds.com", "type": "string" }, - "type": { - "example": "trending", + "transport_mode": { + "description": "TransportMode is present only when the store required the\nembedded-SSR-JSON fallback transport. In this mode pages are\ndiscovered from the storefront's own pages sitemap rather than a\nlisting API: each item only carries handle/url/updated_at (no title\nor content) — call GET /shopify/pages/{handle} per handle for full\ncontent.", + "enum": [ + "ssr_embedded" + ], + "example": "ssr_embedded", "type": "string" } }, "type": "object" }, - "substack.Note": { + "shopify.ProductItem": { "properties": { - "attached_post": { - "$ref": "#/definitions/substack.NotePost" - }, - "author_bestseller_tier": { - "type": "integer" + "available": { + "description": "Whether at least one variant is available to buy.", + "type": "boolean" }, - "author_handle": { - "example": "jameelajamil", + "canonical_colour": { + "description": "Main colour name the storefront groups the product under, for example `black`.", + "example": "black", "type": "string" }, - "author_id": { - "example": 138271663, - "type": "integer" + "collection_tags": { + "description": "Collections the product is listed in, as the storefront labels them.", + "items": { + "type": "string" + }, + "type": "array" }, - "author_name": { - "example": "Jameela Jamil", + "colour": { + "description": "The fields below are only populated when the product was resolved via\nthe embedded-SSR-JSON fallback transport (see ssr_fallback.go) and the\nsource page exposed this data; they are additive and never populated\nfor classic-store responses.", + "example": "black", "type": "string" }, - "author_photo_url": { - "type": "string" + "compare_at_price": { + "description": "Original price before discount, in the store's currency. The highest compare-at price across variants.", + "example": 120, + "type": "number" }, - "author_url": { + "condition": { + "description": "Condition is only populated for resale-marketplace search results\n(Fashionphile's AlgoliaSearch, Rebag's StorefrontSearch -- see\nsearch.go) whose catalog data exposes a condition grade. Never\npopulated for any other brand or endpoint in this family.", + "example": "Excellent", "type": "string" }, - "body": { + "created_at": { + "description": "Time the record was created, as Shopify returns it.", "type": "string" }, - "edited_at": { + "description": { + "description": "Product description as plain text.", "type": "string" }, - "id": { - "example": 316240438, - "type": "integer" - }, - "is_ai_generated": { - "type": "boolean" + "discount_percentage": { + "description": "Discount currently applied to the product, as a percentage.", + "example": 20, + "type": "number" }, - "language": { + "featured_image": { + "description": "URL of the product's main image.", "type": "string" }, - "published_at": { + "handle": { + "description": "URL slug of the product, for example `mens-wool-runners`.", + "example": "mens-wool-runners", "type": "string" }, - "reaction_count": { - "example": 12846, - "type": "integer" + "id": { + "description": "Shopify product id.", + "example": "6616124981328", + "type": "string" }, - "reactions": { - "additionalProperties": { - "format": "int64", - "type": "integer" + "images": { + "description": "Images of the product, in the storefront's order.", + "items": { + "$ref": "#/definitions/shopify.ImageItem" }, - "type": "object" + "type": "array" }, - "reply_count": { - "example": 129, - "type": "integer" + "labels": { + "description": "Badges the storefront shows on the product, for example `new`.", + "example": [ + "new" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "restack_count": { - "example": 1139, - "type": "integer" + "options": { + "description": "Options the product varies by, such as size or colour.", + "items": { + "$ref": "#/definitions/shopify.OptionItem" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "substack.NotePost": { - "properties": { - "id": { - "type": "integer" + "price": { + "description": "Current price in the store's currency. The lowest variant price when variants are listed.", + "example": 98, + "type": "number" }, - "title": { + "product_type": { + "description": "Product type set by the merchant, for example `Shoes`.", + "example": "Shoes", "type": "string" }, - "url": { + "published_at": { + "description": "Time the record was published, as Shopify returns it.", "type": "string" - } - }, - "type": "object" - }, - "substack.NoteRepliesResult": { - "properties": { - "has_more": { - "type": "boolean" - }, - "more_count": { - "description": "MoreCount is how many further reply branches the upstream reports.", - "type": "integer" }, - "next_cursor": { - "type": "string" + "rating": { + "description": "Average customer rating shown by the storefront.", + "example": 4.2, + "type": "number" }, - "note_id": { - "example": 316240438, + "rating_count": { + "description": "Number of customer ratings behind `rating`.", + "example": 1549, "type": "integer" }, - "replies": { + "tags": { + "description": "Tags the merchant attached to the product.", "items": { - "$ref": "#/definitions/substack.Note" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "substack.NoteRestacksResult": { - "properties": { - "has_more": { - "type": "boolean" }, - "next_cursor": { + "title": { + "description": "Product name as shown on the storefront.", + "example": "Men's Wool Runners", "type": "string" }, - "note_id": { - "example": 316240438, - "type": "integer" + "updated_at": { + "description": "Time the record was last updated, as Shopify returns it.", + "type": "string" }, - "restacks": { + "url": { + "description": "Storefront page URL of the product.", + "example": "https://www.allbirds.com/products/mens-wool-runners", + "type": "string" + }, + "variants": { + "description": "Purchasable variants of the product, such as each size and colour.", "items": { - "$ref": "#/definitions/substack.Note" + "$ref": "#/definitions/shopify.VariantItem" }, "type": "array" + }, + "vendor": { + "description": "Brand or vendor name set by the merchant.", + "example": "Allbirds", + "type": "string" } }, "type": "object" }, - "substack.NotesFeedResult": { + "shopify.ProductRecommendationsResponse": { "properties": { - "has_more": { - "type": "boolean" + "handle": { + "description": "Handle of the product the recommendations are based on.", + "example": "mens-wool-runners", + "type": "string" }, - "next_cursor": { + "intent": { + "description": "Recommendation type returned: `related` or `complementary`.", + "example": "related", "type": "string" }, - "notes": { + "limit": { + "description": "Maximum number of recommended products returned.", + "example": 10, + "type": "integer" + }, + "product_id": { + "description": "Shopify id of the product the recommendations are based on.", + "example": "6616124981328", + "type": "string" + }, + "products": { + "description": "Recommended products, one item per product.", "items": { - "$ref": "#/definitions/substack.Note" + "$ref": "#/definitions/shopify.ProductItem" }, "type": "array" }, - "tab": { - "example": "for-you", + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.allbirds.com", "type": "string" }, - "type": { - "example": "base", + "store_url": { + "description": "Base URL of the Shopify storefront that was queried.", + "example": "https://www.allbirds.com", + "type": "string" + }, + "transport_mode": { + "description": "Set only for headless storefronts that do not expose Shopify's standard catalogue; the value is `ssr_embedded`. Omitted otherwise.", + "enum": [ + "ssr_embedded" + ], + "example": "ssr_embedded", "type": "string" } }, "type": "object" }, - "substack.NotesFeedTab": { + "shopify.ProductResponse": { "properties": { - "id": { - "example": "for-you", + "product": { + "allOf": [ + { + "$ref": "#/definitions/shopify.ProductItem" + } + ], + "description": "The requested product with its variants, options and images." + }, + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.allbirds.com", "type": "string" }, - "name": { - "example": "For you", + "store_url": { + "description": "Base URL of the Shopify storefront that was queried.", + "example": "https://www.allbirds.com", "type": "string" }, - "type": { - "example": "base", + "transport_mode": { + "description": "Set only for headless storefronts that do not expose Shopify's standard catalogue; the value is `ssr_embedded`. Omitted otherwise.", + "enum": [ + "ssr_embedded" + ], + "example": "ssr_embedded", "type": "string" } }, "type": "object" }, - "substack.NotesFeedTabsResult": { + "shopify.ProductsResponse": { "properties": { - "surface": { - "example": "feed", - "type": "string" + "facets": { + "additionalProperties": { + "additionalProperties": { + "format": "int64", + "type": "integer" + }, + "type": "object" + }, + "description": "Facets and FacetsStats are populated when TransportMode is ssr_embedded\n(from the storefront's own embedded search-index facet buckets) or\nstorefront_filtered (from the storefront's own Storefront Filtering\nsidebar -- Size/Color/etc. option facets, Product Type, and a \"price\"\nFacetsStats entry for the price-range slider's own min/max bounds).", + "type": "object" }, - "tabs": { - "items": { - "$ref": "#/definitions/substack.NotesFeedTab" + "facets_stats": { + "additionalProperties": { + "$ref": "#/definitions/shopify.FacetStat" }, - "type": "array" - } - }, - "type": "object" - }, - "substack.PlanCurrency": { - "properties": { - "amount_cents": { - "example": 900, - "type": "integer" + "description": "Lowest, highest and average value per numeric facet such as `price`. Present only when `transport_mode` is set.", + "type": "object" }, - "currency": { - "example": "eur", - "type": "string" - } - }, - "type": "object" - }, - "substack.Post": { - "properties": { - "audience": { - "example": "everyone", - "type": "string" + "filters": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "description": "Facet filters applied, mapping each facet name to the values requested. Present only for headless storefronts.", + "type": "object" }, - "comment_count": { + "in_stock_only": { + "description": "Whether only in-stock products were requested. Present only when `transport_mode` is `storefront_filtered`.", + "type": "boolean" + }, + "limit": { + "description": "Maximum number of products returned per page.", + "example": 50, "type": "integer" }, - "cover_image_url": { - "type": "string" + "max_price": { + "description": "Maximum price filter applied. Present only when `transport_mode` is `storefront_filtered`.", + "type": "number" }, - "description": { - "type": "string" + "min_price": { + "description": "Minimum price filter applied. Present only when `transport_mode` is `storefront_filtered`.", + "type": "number" }, - "id": { - "example": 213613469, + "page": { + "description": "Page number returned.", + "example": 1, "type": "integer" }, - "paywalled": { - "type": "boolean" - }, - "published_at": { - "type": "string" + "product_type": { + "description": "Product types the results were filtered to. Present only when `transport_mode` is `storefront_filtered`.", + "items": { + "type": "string" + }, + "type": "array" }, - "reaction_count": { - "type": "integer" + "products": { + "description": "Products on this page, one item per product.", + "items": { + "$ref": "#/definitions/shopify.ProductItem" + }, + "type": "array" }, - "slug": { + "sort": { + "description": "Sort and Filters echo back the effective sortBy/facet-filter query\nparams that were applied, present only when transport_mode is\nssr_embedded and the caller supplied at least one. Always omitted for\nthe classic transport (which rejects them as invalid params instead).", + "enum": [ + "sortLTH", + "sortHTL", + "newest" + ], + "example": "sortLTH", "type": "string" }, - "subtitle": { + "sort_by": { + "description": "SortBy, MinPrice, MaxPrice, ProductType, InStockOnly, and\nVariantOptions echo back the effective storefront-filtering params\nthat were applied, present only when transport_mode is\nstorefront_filtered.", + "enum": [ + "manual", + "best-selling", + "title-ascending", + "title-descending", + "price-ascending", + "price-descending", + "created-ascending", + "created-descending" + ], + "example": "price-ascending", "type": "string" }, - "title": { + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.allbirds.com", "type": "string" }, - "type": { - "example": "newsletter", + "store_url": { + "description": "Base URL of the Shopify storefront that was queried.", + "example": "https://www.allbirds.com", "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "substack.PostByline": { - "properties": { - "handle": { - "type": "string" + "total_items": { + "description": "TotalItems and TotalPages are populated only when TransportMode is\nssr_embedded, from the storefront's own embedded search-result\npagination metadata.", + "example": 184, + "type": "integer" }, - "id": { - "example": 134996999, + "total_pages": { + "description": "Total number of result pages. Present only for headless storefronts.", + "example": 4, "type": "integer" }, - "name": { - "example": "Max Kan", + "transport_mode": { + "description": "Set to `ssr_embedded` for headless storefronts, or `storefront_filtered` when sort, price, product type, in-stock or variant filters were applied. Omitted otherwise.", + "enum": [ + "ssr_embedded", + "storefront_filtered" + ], + "example": "ssr_embedded", "type": "string" }, - "url": { - "type": "string" + "variant_options": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "description": "Variant option filters applied, mapping an option name such as `size` to the values requested. Present only when `transport_mode` is `storefront_filtered`.", + "type": "object" } }, "type": "object" }, - "substack.PostDetail": { + "shopify.ReviewDTO": { "properties": { - "audience": { - "example": "everyone", - "type": "string" - }, - "bylines": { - "items": { - "$ref": "#/definitions/substack.PostByline" - }, - "type": "array" - }, - "comment_count": { - "type": "integer" - }, - "cover_image_url": { + "body": { + "example": "Excellent condition, fast shipping!", "type": "string" }, - "description": { + "created_at": { + "example": "2026-08-25T18:17:23.000Z", "type": "string" }, "id": { - "example": 213613469, - "type": "integer" + "example": "4a8567d4-b397-5ff5-b327-a8cbec368987", + "type": "string" }, - "paywalled": { + "is_shop_review": { "type": "boolean" }, - "podcast_duration_seconds": { - "type": "integer" + "pictures": { + "items": { + "type": "string" + }, + "type": "array" }, - "podcast_url": { + "product_title": { "type": "string" }, - "published_at": { + "product_url": { "type": "string" }, - "reaction_count": { + "rating": { + "example": 5, "type": "integer" }, - "slug": { - "type": "string" - }, - "subtitle": { + "reviewer_name": { + "example": "Mario Henao", "type": "string" }, "title": { "type": "string" }, - "type": { - "example": "newsletter", - "type": "string" - }, - "url": { - "type": "string" - }, - "wordcount": { - "example": 3953, - "type": "integer" + "verified_buyer": { + "example": true, + "type": "boolean" } }, "type": "object" }, - "substack.PostsResult": { + "shopify.ReviewsResponse": { "properties": { - "limit": { - "type": "integer" - }, - "offset": { + "page": { + "example": 1, "type": "integer" }, - "posts": { + "reviews": { "items": { - "$ref": "#/definitions/substack.Post" + "$ref": "#/definitions/shopify.ReviewDTO" }, "type": "array" }, - "publication": { - "example": "semianalysis", + "source_url": { + "example": "https://cdn.judge.me/reviews/all_reviews_js_based", "type": "string" }, - "search": { - "example": "nvidia", + "store_url": { + "example": "https://www.pristinemarketplace.com", "type": "string" }, - "sort": { - "example": "new", - "type": "string" + "total_count": { + "example": 88, + "type": "integer" + }, + "total_pages": { + "example": 18, + "type": "integer" } }, "type": "object" }, - "substack.Publication": { + "shopify.SearchQueryItem": { "properties": { - "author_id": { - "type": "integer" - }, - "copyright": { - "type": "string" - }, - "custom_domain": { - "type": "string" - }, - "explicit": { - "type": "boolean" - }, - "hero_text": { - "type": "string" - }, - "id": { - "example": 6349492, - "type": "integer" - }, - "invite_only": { - "type": "boolean" - }, - "language": { - "type": "string" - }, - "logo_url": { - "type": "string" - }, - "name": { - "example": "SemiAnalysis", - "type": "string" - }, - "subdomain": { + "text": { + "description": "Suggested search phrase.", + "example": "wool", "type": "string" }, - "subscribers": { - "$ref": "#/definitions/substack.SubscriberCounts" - }, - "subscription": { - "$ref": "#/definitions/substack.Subscription" - }, "url": { - "example": "https://semianalysis.substack.com", + "description": "Storefront search results URL for the phrase.", + "example": "https://www.allbirds.com/search?q=wool", "type": "string" } }, "type": "object" }, - "substack.PublicationListItem": { + "shopify.SearchResponse": { "properties": { - "author_handle": { - "type": "string" - }, - "author_id": { - "type": "integer" - }, - "author_name": { - "example": "Dylan Patel", - "type": "string" - }, - "custom_domain": { - "type": "string" - }, - "explicit": { - "type": "boolean" - }, - "hero_text": { - "type": "string" - }, - "id": { - "example": 6349492, - "type": "integer" - }, - "language": { - "type": "string" - }, - "logo_url": { - "type": "string" - }, - "name": { - "example": "SemiAnalysis", + "availability": { + "description": "Availability is the availability filter that was applied (available,\nsold, or all). Only set by Fashionphile search.", + "example": "available", "type": "string" }, - "payments_enabled": { - "type": "boolean" - }, - "subdomain": { - "example": "semianalysis", + "condition": { + "example": "Excellent", "type": "string" }, - "subscribers": { - "$ref": "#/definitions/substack.SubscriberCounts" - }, - "subscription": { - "$ref": "#/definitions/substack.Subscription" - }, - "url": { - "example": "https://semianalysis.substack.com", - "type": "string" - } - }, - "type": "object" - }, - "substack.RecommendationsResult": { - "properties": { - "publication_id": { - "example": 6349492, + "limit": { + "example": 20, "type": "integer" }, - "recommendations": { - "items": { - "$ref": "#/definitions/substack.PublicationListItem" - }, - "type": "array" - } - }, - "type": "object" - }, - "substack.SearchResult": { - "properties": { - "focused_posts": { - "items": { - "$ref": "#/definitions/substack.Post" - }, - "type": "array" - }, - "has_more": { - "type": "boolean" - }, "page": { + "example": 1, "type": "integer" }, - "posts": { - "items": { - "$ref": "#/definitions/substack.Post" - }, - "type": "array" - }, - "publications": { + "products": { "items": { - "$ref": "#/definitions/substack.PublicationListItem" + "$ref": "#/definitions/shopify.ProductItem" }, "type": "array" }, "query": { - "example": "artificial intelligence", + "example": "chanel", "type": "string" - } - }, - "type": "object" - }, - "substack.SubscriberCounts": { - "properties": { - "follower_count": { - "example": 365727, - "type": "integer" }, - "paid_rough": { - "description": "PaidRough and PaidRoughInt are the only paid-subscriber figures\nSubstack publishes, and both are buckets rather than counts.\nPaidRoughInt is the finer of the two and is always present; PaidTier\nis the coarser threshold behind the public bestseller badge.", - "example": "Thousands of paid subscribers", + "sort": { + "example": "relevance", "type": "string" }, - "paid_rough_int": { - "example": 1000, - "type": "integer" - }, - "paid_tier": { - "example": 1000, - "type": "integer" - }, - "total": { - "example": 315000, - "type": "integer" + "source_url": { + "example": "https://www.fashionphile.com", + "type": "string" }, - "total_display": { - "example": "315K+", + "store_url": { + "example": "https://www.fashionphile.com", "type": "string" }, - "total_hidden": { - "type": "boolean" + "total_items": { + "description": "TotalItems for AlgoliaSearch is the exact number of products matching\nthe query and every filter (condition, vendor, availability); it does\nnot change with sort. For StorefrontSearch it is only the number of results the\nupstream Storefront API returned for this page's fetch window --\nShopify's search field does not expose a true total match count, so\nthis is not a reliable \"how many pages exist\" signal on that\ntransport; treat an empty Products page as the practical end of\nresults instead.", + "example": 184, + "type": "integer" }, - "total_rough": { - "example": "Hundreds of thousands of subscribers", + "vendor": { + "example": "Chanel", "type": "string" } }, "type": "object" }, - "substack.Subscription": { + "shopify.SearchSuggestResponse": { "properties": { - "annual_disabled": { - "type": "boolean" - }, - "app_store_plans": { + "collections": { + "description": "Collections suggested for the query.", "items": { - "$ref": "#/definitions/substack.AppStorePlan" + "$ref": "#/definitions/shopify.CollectionItem" }, "type": "array" }, - "founding_benefits": { + "limit": { + "description": "Maximum number of suggestions requested.", + "example": 10, + "type": "integer" + }, + "products": { + "description": "Products suggested for the query.", "items": { - "type": "string" + "$ref": "#/definitions/shopify.ProductItem" }, "type": "array" }, - "founding_plan_name": { - "example": "Founding Member", - "type": "string" - }, - "free_benefits": { + "queries": { + "description": "Search phrases suggested for the query.", "items": { - "type": "string" + "$ref": "#/definitions/shopify.SearchQueryItem" }, "type": "array" }, - "free_trial_enabled": { - "type": "boolean" - }, - "group_discount_percent": { - "example": 20, - "type": "number" - }, - "monthly_disabled": { - "type": "boolean" + "query": { + "description": "Search text that was run.", + "example": "wool", + "type": "string" }, - "paid_benefits": { - "items": { - "type": "string" - }, - "type": "array" + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.allbirds.com", + "type": "string" }, - "payments_state": { - "example": "enabled", + "store_url": { + "description": "Base URL of the Shopify storefront that was queried.", + "example": "https://www.allbirds.com", "type": "string" }, - "plans": { + "types": { + "description": "Suggestion types returned: `product`, `collection` and `query`.", + "example": [ + "product", + "collection", + "query" + ], "items": { - "$ref": "#/definitions/substack.SubscriptionPlan" + "type": "string" }, "type": "array" - }, - "pledges_enabled": { - "type": "boolean" } }, "type": "object" }, - "substack.SubscriptionPlan": { + "shopify.SiteSearchResponse": { "properties": { - "active": { - "type": "boolean" + "limit": { + "example": 20, + "type": "integer" }, - "amount_cents": { - "example": 5000, + "page": { + "example": 1, "type": "integer" }, - "currencies": { + "products": { "items": { - "$ref": "#/definitions/substack.PlanCurrency" + "$ref": "#/definitions/shopify.ProductItem" }, "type": "array" }, - "currency": { - "example": "usd", + "query": { + "example": "jordan", "type": "string" }, - "id": { - "example": "monthly50usd_982ddb86", + "source_url": { "type": "string" }, - "interval": { - "example": "month", + "store_url": { + "example": "https://www.pristinemarketplace.com", "type": "string" }, - "interval_count": { - "example": 1, + "total_count": { + "example": 413, "type": "integer" }, - "kind": { - "example": "monthly", - "type": "string" - }, - "nickname": { - "example": "$50 a month", - "type": "string" - }, - "trial_period_days": { + "total_pages": { + "example": 26, "type": "integer" } }, "type": "object" }, - "substack.User": { + "shopify.SitemapImage": { "properties": { - "bestseller_tier": { - "example": 10000, - "type": "integer" - }, - "bio": { - "type": "string" - }, - "handle": { - "example": "pragmaticengineer", - "type": "string" - }, - "id": { - "example": 2067309, - "type": "integer" - }, - "name": { - "example": "Gergely Orosz", + "caption": { + "description": "Caption of the image listed in the sitemap.", "type": "string" }, - "photo_url": { + "title": { + "description": "Title of the image listed in the sitemap.", + "example": "Men's Wool Runner", "type": "string" }, - "profile_set_up_at": { + "url": { + "description": "URL of the image file.", + "example": "https://cdn.shopify.com/example.png", "type": "string" - }, - "publications": { + } + }, + "type": "object" + }, + "shopify.SitemapIndexResponse": { + "properties": { + "sitemaps": { + "description": "Child sitemaps listed by the store's main sitemap.", "items": { - "$ref": "#/definitions/substack.UserPublication" + "$ref": "#/definitions/shopify.SitemapItem" }, "type": "array" }, - "slug": { + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.allbirds.com", "type": "string" }, - "subscribers": { - "$ref": "#/definitions/substack.SubscriberCounts" - }, - "subscriptions": { - "items": { - "$ref": "#/definitions/substack.UserSubscription" - }, - "type": "array" - }, - "url": { - "example": "https://substack.com/@pragmaticengineer", + "store_url": { + "description": "Base URL of the Shopify storefront that was queried.", + "example": "https://www.allbirds.com", "type": "string" } }, "type": "object" }, - "substack.UserActivityItem": { + "shopify.SitemapItem": { "properties": { - "kind": { - "example": "comment_restack", + "loc": { + "description": "URL of the child sitemap file.", + "example": "https://www.allbirds.com/sitemap_products_1.xml", "type": "string" }, - "note": { - "$ref": "#/definitions/substack.Note" - }, - "post": { - "$ref": "#/definitions/substack.Post" - }, - "timestamp": { + "type": { + "description": "Section the sitemap covers: `products`, `collections`, `pages`, `blogs`, `agentic_discovery` or `other`.", + "example": "products", "type": "string" } }, "type": "object" }, - "substack.UserActivityResult": { + "shopify.SitemapURLItem": { "properties": { - "has_more": { - "type": "boolean" + "changefreq": { + "description": "Update frequency hint from the sitemap entry, for example `weekly`.", + "example": "weekly", + "type": "string" }, - "items": { + "handle": { + "description": "Handle of the product, collection or page the URL points to.", + "example": "mens-wool-runners", + "type": "string" + }, + "images": { + "description": "Images listed for the URL in the sitemap.", "items": { - "$ref": "#/definitions/substack.UserActivityItem" + "$ref": "#/definitions/shopify.SitemapImage" }, "type": "array" }, - "next_cursor": { + "lastmod": { + "description": "Last modification time listed for the URL in the sitemap.", + "example": "2026-03-19T11:41:39-07:00", "type": "string" }, - "types": { - "items": { - "type": "string" - }, - "type": "array" + "loc": { + "description": "Storefront URL listed in the sitemap.", + "example": "https://www.allbirds.com/products/mens-wool-runners", + "type": "string" }, - "user_id": { - "example": 49731969, - "type": "integer" + "type": { + "description": "Section the URL belongs to: `products`, `collections`, `pages`, `blogs`, `agentic_discovery` or `other`.", + "example": "products", + "type": "string" } }, "type": "object" }, - "substack.UserConnectionsResult": { + "shopify.SitemapURLsResponse": { "properties": { - "list": { - "example": "followers", + "limit": { + "description": "Maximum number of URL entries returned.", + "example": 50, + "type": "integer" + }, + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.allbirds.com", "type": "string" }, - "name": { - "example": "Followers", + "store_url": { + "description": "Base URL of the Shopify storefront that was queried.", + "example": "https://www.allbirds.com", "type": "string" }, - "user_id": { - "example": 49731969, - "type": "integer" + "type": { + "description": "Sitemap section requested: `all`, `products`, `collections`, `pages`, `blogs`, `agentic_discovery` or `other`.", + "example": "products", + "type": "string" }, - "users": { + "urls": { + "description": "URL entries from the matching sitemaps.", "items": { - "$ref": "#/definitions/substack.User" + "$ref": "#/definitions/shopify.SitemapURLItem" }, "type": "array" } }, "type": "object" }, - "substack.UserPublication": { + "shopify.StoreResponse": { "properties": { - "custom_domain": { + "city": { + "description": "City of the store's business address.", + "example": "San Francisco", "type": "string" }, - "id": { - "example": 458709, - "type": "integer" + "country": { + "description": "Country code of the store, for example `US`.", + "example": "US", + "type": "string" }, - "is_primary": { - "type": "boolean" + "currency": { + "description": "Currency code the store prices in, for example `USD`.", + "example": "USD", + "type": "string" + }, + "description": { + "description": "Store description set by the merchant.", + "type": "string" + }, + "domain": { + "description": "Domain of the storefront URL that was requested.", + "example": "www.gymshark.com", + "type": "string" + }, + "myshopify_domain": { + "description": "The store's `myshopify.com` domain, for example `gymsharkusa.myshopify.com`.", + "example": "gymsharkusa.myshopify.com", + "type": "string" }, "name": { - "example": "The Pragmatic Engineer", + "description": "Store name, for example `Allbirds`.", + "example": "Allbirds", "type": "string" }, - "role": { - "example": "admin", + "province": { + "description": "State or province of the store's business address.", + "example": "CA", "type": "string" }, - "subdomain": { + "published_collections_count": { + "description": "Number of published collections in the store.", + "example": 42, + "type": "integer" + }, + "published_products_count": { + "description": "Number of published products in the store.", + "example": 638, + "type": "integer" + }, + "requested_url": { + "description": "Storefront URL that was requested.", + "example": "https://www.gymshark.com", "type": "string" }, - "url": { + "source_domain": { + "description": "Domain the store data was read from. It differs from `domain` when the store's `myshopify.com` domain is used.", + "example": "gymsharkusa.myshopify.com", + "type": "string" + }, + "source_url": { + "description": "URL the data was read from.", + "example": "https://gymsharkusa.myshopify.com", + "type": "string" + }, + "transport_mode": { + "description": "Set only for headless storefronts that do not expose Shopify's standard catalogue; the value is `ssr_embedded`. Omitted otherwise.", + "enum": [ + "ssr_embedded" + ], + "example": "ssr_embedded", "type": "string" } }, "type": "object" }, - "substack.UserSearchResult": { + "shopify.VariantItem": { "properties": { - "has_more": { + "available": { + "description": "Whether this variant is currently available to buy.", "type": "boolean" }, - "page": { + "barcode": { + "description": "Barcode of the variant, such as a UPC or EAN.", + "type": "string" + }, + "compare_at_price": { + "description": "Original price before discount, in the store's currency.", + "example": 120, + "type": "number" + }, + "created_at": { + "description": "Time the record was created, as Shopify returns it.", + "type": "string" + }, + "featured_image": { + "description": "URL of the image shown for this variant.", + "type": "string" + }, + "grams": { + "description": "Weight of the variant in grams.", + "example": 400, "type": "integer" }, - "query": { - "example": "pragmatic engineer", + "id": { + "description": "Shopify variant id.", + "example": "34761278160941", "type": "string" }, - "users": { - "items": { - "$ref": "#/definitions/substack.User" - }, - "type": "array" - } - }, - "type": "object" - }, - "substack.UserSubscription": { - "properties": { - "is_founding": { - "type": "boolean" + "inventory_quantity": { + "description": "InventoryQuantity is only populated via the embedded-SSR-JSON fallback\ntransport (see ssr_fallback.go); classic-store responses never set it.", + "example": 24, + "type": "integer" }, - "membership_state": { - "example": "free_signup", + "option1": { + "description": "Value of the product's first option for this variant, for example a size.", "type": "string" }, - "publication_id": { + "option2": { + "description": "Value of the product's second option for this variant.", + "type": "string" + }, + "option3": { + "description": "Value of the product's third option for this variant.", + "type": "string" + }, + "position": { + "description": "Position of the variant in the product's variant list, starting at 1.", + "example": 1, "type": "integer" }, - "publication_name": { + "price": { + "description": "Current price of the variant in the store's currency.", + "example": 98, + "type": "number" + }, + "product_id": { + "description": "Shopify id of the product the variant belongs to.", + "example": "6616124981328", "type": "string" }, - "subdomain": { + "requires_shipping": { + "description": "Whether the variant is a physical item that needs shipping.", + "type": "boolean" + }, + "sku": { + "description": "Merchant stock keeping unit code of the variant.", + "example": "A123", + "type": "string" + }, + "taxable": { + "description": "Whether tax is charged on the variant.", + "type": "boolean" + }, + "title": { + "description": "Variant name, for example `Natural Black / 10`.", + "example": "Natural Black / 10", + "type": "string" + }, + "updated_at": { + "description": "Time the record was last updated, as Shopify returns it.", "type": "string" } }, "type": "object" }, - "substack.categoriesResponseDoc": { + "shopify.collectionProductsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/substack.CategoriesResult" + "$ref": "#/definitions/shopify.CollectionProductsResponse" }, "msg": { - "example": "success", + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.categoryResponseDoc": { + "shopify.collectionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/substack.CategoryResult" + "$ref": "#/definitions/shopify.CollectionsResponse" }, "msg": { - "example": "success", + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.contributorsResponseDoc": { + "shopify.pageResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/substack.ContributorsResult" + "$ref": "#/definitions/shopify.PageResponse" }, "msg": { - "example": "success", + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.exploreResponseDoc": { + "shopify.pagesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/substack.ExploreResult" + "$ref": "#/definitions/shopify.PagesResponse" }, "msg": { - "example": "success", + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.leaderboardResponseDoc": { + "shopify.productRecommendationsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/substack.LeaderboardResult" + "$ref": "#/definitions/shopify.ProductRecommendationsResponse" }, "msg": { - "example": "success", + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.noteRepliesResponseDoc": { + "shopify.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/substack.NoteRepliesResult" + "$ref": "#/definitions/shopify.ProductResponse" }, "msg": { - "example": "success", + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.noteResponseDoc": { + "shopify.productsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/substack.Note" + "$ref": "#/definitions/shopify.ProductsResponse" }, "msg": { - "example": "success", + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.noteRestacksResponseDoc": { + "shopify.searchSuggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/substack.NoteRestacksResult" + "$ref": "#/definitions/shopify.SearchSuggestResponse" }, "msg": { - "example": "success", + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.notesFeedResponseDoc": { + "shopify.sitemapIndexResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/substack.NotesFeedResult" + "$ref": "#/definitions/shopify.SitemapIndexResponse" }, "msg": { - "example": "success", + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.notesFeedTabsResponseDoc": { + "shopify.sitemapURLsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/substack.NotesFeedTabsResult" + "$ref": "#/definitions/shopify.SitemapURLsResponse" }, "msg": { - "example": "success", + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.postResponseDoc": { + "shopify.storeResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/substack.PostDetail" + "$ref": "#/definitions/shopify.StoreResponse" }, "msg": { - "example": "success", + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.postsResponseDoc": { + "shopifybrands.collectionProductsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/substack.PostsResult" + "$ref": "#/definitions/shopify.CollectionProductsResponse" }, "msg": { - "example": "success", + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.publicationResponseDoc": { + "shopifybrands.collectionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/substack.Publication" + "$ref": "#/definitions/shopify.CollectionsResponse" }, "msg": { - "example": "success", + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.recommendationsResponseDoc": { + "shopifybrands.pageResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/substack.RecommendationsResult" + "$ref": "#/definitions/shopify.PageResponse" }, "msg": { - "example": "success", + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.searchResponseDoc": { + "shopifybrands.pagesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/substack.SearchResult" + "$ref": "#/definitions/shopify.PagesResponse" }, "msg": { - "example": "success", + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.userActivityResponseDoc": { + "shopifybrands.productRecommendationsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/substack.UserActivityResult" + "$ref": "#/definitions/shopify.ProductRecommendationsResponse" }, "msg": { - "example": "success", + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.userConnectionsResponseDoc": { + "shopifybrands.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/substack.UserConnectionsResult" + "$ref": "#/definitions/shopify.ProductResponse" }, "msg": { - "example": "success", + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.userResponseDoc": { + "shopifybrands.productsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/substack.User" + "$ref": "#/definitions/shopify.ProductsResponse" }, "msg": { - "example": "success", + "example": "OK", "type": "string" } }, "type": "object" }, - "substack.userSearchResponseDoc": { + "shopifybrands.reviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/substack.UserSearchResult" + "$ref": "#/definitions/shopify.ReviewsResponse" }, "msg": { - "example": "success", + "example": "OK", "type": "string" } }, "type": "object" }, - "subway.Allergen": { + "shopifybrands.searchResponseDoc": { "properties": { - "contains": { - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "may_contain": { - "type": "boolean" + "data": { + "$ref": "#/definitions/shopify.SearchResponse" }, - "name": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "subway.AvailableTimesResponse": { + "shopifybrands.searchSuggestResponseDoc": { "properties": { - "count": { - "example": 177, + "code": { + "example": 200, "type": "integer" }, - "earliest_slot": { - "description": "EarliestSlot and LatestSlot bracket Slots, kept as their own fields\nso a caller can read the window without scanning the array.", - "example": "2026-09-05T13:15:00Z", - "type": "string" + "data": { + "$ref": "#/definitions/shopify.SearchSuggestResponse" }, - "fetched_at": { + "msg": { + "example": "OK", "type": "string" - }, - "interval_minutes": { - "description": "IntervalMinutes is the spacing between consecutive slots, derived\nfrom the returned data rather than assumed. It is 0 when fewer than\ntwo slots came back.", - "example": 5, + } + }, + "type": "object" + }, + "shopifybrands.siteSearchResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "latest_slot": { - "example": "2026-09-06T03:55:00Z", - "type": "string" - }, - "slots": { - "description": "Slots are RFC3339 UTC instants, earliest first, spaced by\nIntervalMinutes. They start at the store's next orderable time --\nroughly half an hour out, not immediately -- and run to closing.", - "items": { - "type": "string" - }, - "type": "array" - }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/shopify.SiteSearchResponse" }, - "store_id": { - "example": "75376-0", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "subway.ComboItem": { + "shopifybrands.sitemapIndexResponseDoc": { "properties": { - "a_la_carte_price": { - "example": 12.97, - "type": "number" - }, - "description": { - "description": "Description comes from the matching translation when the upstream\ncarries one; it is frequently empty.", - "type": "string" - }, - "id": { - "example": "6", - "type": "string" - }, - "min_bundled_price": { - "description": "MinBundledPrice is the cheapest advertised price for taking the\ncategory as a bundle; ALaCartePrice is the cheapest for buying its\ncontents separately. Either can be absent, so both are pointers --\na missing price and a genuine 0.00 are different facts.", - "example": 9.99, - "type": "number" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "example": "Sub Meal Deal", - "type": "string" + "data": { + "$ref": "#/definitions/shopify.SitemapIndexResponse" }, - "parent_id": { - "description": "ParentID is set for a category nested under another, empty for a\ntop-level one.", + "msg": { + "example": "OK", "type": "string" - }, - "sort_order": { - "example": 36, - "type": "integer" } }, "type": "object" }, - "subway.ComboResponse": { + "shopifybrands.sitemapURLsResponseDoc": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/subway.ComboItem" - }, - "type": "array" - }, - "count": { - "example": 6, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/shopify.SitemapURLsResponse" }, - "store_id": { - "example": "50916-0", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "subway.MenuCategory": { + "shopifybrands.storeResponseDoc": { "properties": { - "description": { - "example": "", - "type": "string" - }, - "id": { - "type": "string" - }, - "is_main_category": { - "type": "boolean" - }, - "items": { - "items": { - "$ref": "#/definitions/subway.MenuItem" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/shopify.StoreResponse" }, - "slug": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "subway.MenuItem": { + "similarweb.SearchResp": { "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" + "apps": { + "description": "Apps matching the search term, grouped by store: Google Play and the App Store.", + "properties": { + "appStore": { + "items": { + "properties": { + "appKey": { + "example": "1_1484366079", + "type": "string" + }, + "id": { + "example": "1484366079", + "type": "string" + }, + "image": { + "example": "https://site-images.similarcdn.com/url?url=https%3A%2F%2Fis1-ssl.mzstatic.com%2Fimage%2Fthumb%2FPurple211%2Fv4%2F1c%2F1c%2Fe3%2F1c1ce399-1181-5be1-56d8-ee74e9f0cef4%2FAppIcon-0-0-1x_U007emarketing-0-0-0-7-0-0-85-220.png%2F175x175bb.png", + "type": "string" + }, + "name": { + "example": "TwitterIt for Twitter X", + "type": "string" + }, + "publisher": { + "example": "BEST SOCIAL APPS DEVELOPMENT LTD", + "type": "string" + }, + "ratings": { + "example": 38197, + "type": "integer" + }, + "store": { + "example": "apple", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "googlePlay": { + "items": { + "properties": { + "appKey": { + "example": "0_twittervideodownloader.twitter.videoindir.savegif.twdown", + "type": "string" + }, + "id": { + "example": "twittervideodownloader.twitter.videoindir.savegif.twdown", + "type": "string" + }, + "image": { + "example": "https://site-images.similarcdn.com/url?url=https%3A%2F%2Fplay-lh.googleusercontent.com%2FFi9-CFodjxpqvc3dC0XHDXHkFD3wkw9VccX_iL68U_3kmu2iIuHvIp5AZUoXGZ3mlQ%3Ds180", + "type": "string" + }, + "name": { + "example": "X Saver:Download Twitter Video", + "type": "string" + }, + "publisher": { + "example": "Shotcut Video Workshop", + "type": "string" + }, + "ratings": { + "example": 159344, + "type": "integer" + }, + "store": { + "example": "google", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" }, - "slug": { - "type": "string" + "companies": { + "description": "Companies matching the search term.", + "items": { + "properties": { + "domain": { + "example": "twitter.com", + "type": "string" + }, + "logoUrl": { + "example": "https://sw-df-production-internal-data.s3.amazonaws.com/si/company_data/merged_v2/firmographics_logos/30e41d95dd013b4ec1b8d9e614ec546807cb2152b1f54fa3031d7e6488f93ce4.jpg", + "type": "string" + }, + "name": { + "example": "Twitter", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" }, - "variants": { + "websites": { + "description": "Websites matching the search term.", "items": { - "$ref": "#/definitions/subway.MenuVariant" + "properties": { + "image": { + "example": "https://site-images.similarcdn.com/image?url=twitter.com&t=2&s=1&h=05438debe431144d9c727828570d1754a25bd9286bc14f3aa65a4f05b9057e25", + "type": "string" + }, + "isVirtual": { + "example": false, + "type": "boolean" + }, + "name": { + "example": "twitter.com", + "type": "string" + } + }, + "type": "object" }, "type": "array" } }, "type": "object" }, - "subway.MenuResponse": { + "similarweb.SimilarWebResp": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/subway.MenuCategory" + "AiTrafficDetails": { + "description": "AiTrafficDetails carries SimilarWeb's AI-chatbot traffic insights (the\nextension's \"AI Traffic\" feature set): which AI platforms send traffic\nto this domain, how that mix changed over recent months, and the top\nprompts users asked those chatbots that referred visits here. Left at\nits zero value when DataSource is \"public_page\" because that source\ndoesn't expose it.", + "properties": { + "ReferralTraffic": { + "type": "number" + }, + "TopPrompts": { + "properties": { + "ErrorMessage": { + "type": "string" + }, + "Prompts": { + "items": { + "type": "string" + }, + "type": "array" + }, + "Status": { + "type": "integer" + } + }, + "type": "object" + }, + "TotalVisits": { + "type": "number" + }, + "Traffic": { + "properties": { + "Distribution": { + "properties": { + "Boundary": { + "type": "string" + }, + "Chart": { + "items": { + "properties": { + "History": { + "items": { + "properties": { + "Date": { + "type": "string" + }, + "Value": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "Icon": { + "type": "string" + }, + "Name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "Chatbots": { + "items": { + "properties": { + "Icon": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Value": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "Split": { + "items": { + "properties": { + "Icon": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Rank": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } }, - "type": "array" - }, - "category_count": { - "type": "integer" - }, - "currency": { - "example": "USD", - "type": "string" + "type": "object" }, - "fetched_at": { + "Category": { + "description": "Category SimilarWeb places the site in.", "type": "string" }, - "product_count": { - "type": "integer" + "CategoryRank": { + "description": "Rank of the site within its category, with the category name.", + "properties": { + "Category": { + "type": "string" + }, + "Rank": { + "type": "string" + } + }, + "type": "object" }, - "source_url": { - "type": "string" + "Competitors": { + "description": "Sites SimilarWeb lists as most similar to the domain.", + "properties": { + "TopSimilarityCompetitors": { + "items": {}, + "type": "array" + } + }, + "type": "object" }, - "store_id": { - "type": "string" - } - }, - "type": "object" - }, - "subway.MenuVariant": { - "properties": { - "allergens": { + "Countries": { + "description": "Countries SimilarWeb returns with the site's data, each with a code, URL code and name.", "items": { - "$ref": "#/definitions/subway.Allergen" + "properties": { + "Code": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "UrlCode": { + "type": "string" + } + }, + "type": "object" }, "type": "array" }, - "available": { - "type": "boolean" + "CountryRank": { + "description": "Rank of the site within one country, with that country's code.", + "properties": { + "Country": { + "type": "integer" + }, + "CountryCode": { + "type": "string" + }, + "Rank": { + "type": "integer" + } + }, + "type": "object" }, - "id": { + "DataSource": { + "description": "DataSource reports which upstream this response was populated from.\n\"extension_api\" is the full-coverage source (SimilarWeb's undocumented\nbrowser-extension API); \"public_page\" is a narrower, credential-free\nfallback (see website.go) used only when the extension API is\nunreachable -- some fields above are left at their zero value when\nDataSource is \"public_page\" because this source doesn't expose them.\nSee docs/similarweb-web.md for the full field-availability breakdown.", + "example": "extension_api", "type": "string" }, - "image_asset_urn": { - "description": "ImageAssetURN is Subway's own Adobe AEM asset identifier, not a\ndirectly fetchable URL -- confirmed live 2026-09-02 that the\nupstream's own imageUrl field is always empty; this is what is\nactually populated. Kept as-is rather than inventing an unverified\ndelivery-URL scheme.", + "Description": { + "description": "Site description as SimilarWeb shows it.", "type": "string" }, - "name": { - "description": "Name is the upstream product name, which sometimes carries an\ninternal build code in parentheses (e.g. \"(1DM)\") -- passed through\nverbatim rather than stripped, since the meaning of that code is not\ndocumented anywhere this family could confirm.", - "type": "string" + "Engagments": { + "description": "Engagement figures for the latest month: bounce rate, pages per visit, visits, time on site, month and year.", + "properties": { + "BounceRate": { + "type": "string" + }, + "Month": { + "type": "string" + }, + "PagePerVisit": { + "type": "string" + }, + "TimeOnSite": { + "type": "string" + }, + "Visits": { + "type": "string" + }, + "Year": { + "type": "string" + } + }, + "type": "object" }, - "nutrition": { - "items": { - "$ref": "#/definitions/subway.NutritionFact" + "EstimatedMonthlyVisits": { + "description": "Estimated visits per month, keyed by the first day of the month (YYYY-MM-DD).", + "properties": { + "2024-09-01": { + "type": "integer" + }, + "2024-10-01": { + "type": "integer" + }, + "2024-11-01": { + "type": "integer" + } }, - "type": "array" + "type": "object" }, - "price": { - "type": "number" + "GlobalCategoryRank": { + "description": "Rank of the site within its category across all countries, when SimilarWeb provides it." }, - "size": { - "description": "Size is the build label (\"Footlong\", \"6''\", \"Kids\") distinguishing\nthis variant from siblings of the same MenuItem.", - "type": "string" - } - }, - "type": "object" - }, - "subway.NearbyResponse": { - "properties": { - "count": { - "type": "integer" + "GlobalRank": { + "description": "Global traffic rank of the site, in `Rank`.", + "properties": { + "Rank": { + "type": "integer" + } + }, + "type": "object" }, - "fetched_at": { - "type": "string" + "IsDataFromGa": { + "description": "Whether SimilarWeb reports the site's data as coming from Google Analytics.", + "type": "boolean" }, - "next_offset": { - "description": "NextOffset pages through TotalResults -- pass it back as offset on\nthe next call. Upstream does not signal \"last page\" explicitly;\ncompare count/total_results, or stop once a page returns fewer\nstores than requested.", - "type": "string" + "IsSmall": { + "description": "Whether SimilarWeb treats the site as a small site.", + "type": "boolean" }, - "source_url": { + "LargeScreenshot": { + "description": "URL of a large screenshot of the site.", "type": "string" }, - "stores": { - "items": { - "$ref": "#/definitions/subway.NearbyStore" + "Notification": { + "description": "Notice SimilarWeb attaches to the site's data, in `Content`.", + "properties": { + "Content": {} }, - "type": "array" + "type": "object" }, - "total_results": { + "Policy": { + "description": "Numeric policy value SimilarWeb returns with the site's data.", "type": "integer" - } - }, - "type": "object" - }, - "subway.NearbyStore": { - "properties": { - "address": { - "$ref": "#/definitions/subway.StoreAddress" }, - "can_take_online_orders": { - "type": "boolean" + "SiteName": { + "description": "Domain name of the site.", + "type": "string" }, - "catering_url": { + "SnapshotDate": { + "description": "Date and time of the SimilarWeb data snapshot.", "type": "string" }, - "distance_miles": { - "description": "DistanceMiles is measured from the requested coordinate/query.", - "type": "number" + "Title": { + "description": "Site title as SimilarWeb shows it.", + "type": "string" }, - "features": { - "description": "Features lists which of the seven documented filter values this\nstore actually has -- the same tokens the features query param\naccepts as input.", + "TopCountryShares": { + "description": "Countries that send the most visits, each with its country code and share of traffic.", "items": { - "type": "string" + "properties": { + "Country": { + "type": "integer" + }, + "CountryCode": { + "type": "string" + }, + "Value": { + "type": "number" + } + }, + "type": "object" }, "type": "array" }, - "hours": { + "TopKeywords": { + "description": "Top search keywords bringing visits to the site, each with estimated value, volume and cost per click.", "items": { - "$ref": "#/definitions/subway.StoreHours" + "properties": { + "Cpc": { + "type": "number" + }, + "EstimatedValue": { + "type": "number" + }, + "Name": { + "type": "string" + }, + "Volume": { + "type": "number" + } + }, + "type": "object" }, "type": "array" }, - "is_open_now": { - "type": "boolean" - }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" - }, - "payment_methods": { - "items": { - "type": "string" + "TrafficSources": { + "description": "Share of traffic from each source: social, paid referrals, mail, referrals, search and direct.", + "properties": { + "Direct": { + "type": "number" + }, + "Mail": { + "type": "number" + }, + "Paid Referrals": { + "type": "number" + }, + "Referrals": { + "type": "number" + }, + "Search": { + "type": "number" + }, + "Social": { + "type": "number" + } }, - "type": "array" + "type": "object" }, - "phone_number": { - "type": "string" + "Version": { + "description": "Version number SimilarWeb returns with the site's data.", + "type": "integer" + } + }, + "type": "object" + }, + "similarweb.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "store_id": { - "type": "string" + "data": { + "$ref": "#/definitions/similarweb.SearchResp" }, - "timezone": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "subway.NutritionFact": { + "similarweb.webResponseDoc": { "properties": { - "name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "value": { - "type": "number" + "data": { + "$ref": "#/definitions/similarweb.SimilarWebResp" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "subway.SitemapEntry": { + "skynews.AuthorInfoItem": { "properties": { - "depth": { - "description": "Depth is how many path segments the entry has. A store page is the\ndeepest level; shallower entries are country/region/city directory\npages that are also listed in the same sitemap.", - "example": 4, - "type": "integer" - }, - "path": { - "description": "Path is the locator path, the value /subway/store takes.", - "example": "united-states/ny/new-york/1-penn-plaza", + "label": { "type": "string" }, "url": { "type": "string" + }, + "value": { + "type": "string" } }, "type": "object" }, - "subway.SitemapResponse": { + "skynews.AuthorResponse": { "properties": { - "count": { - "example": 100, - "type": "integer" - }, - "entries": { + "articles": { "items": { - "$ref": "#/definitions/subway.SitemapEntry" + "$ref": "#/definitions/skynews.HeadlineItem" }, "type": "array" }, - "fetched_at": { - "type": "string" - }, - "page": { - "example": 1, - "type": "integer" - }, - "shard": { - "example": 0, - "type": "integer" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "shard_count": { - "example": 1, - "type": "integer" + "info": { + "items": { + "$ref": "#/definitions/skynews.AuthorInfoItem" + }, + "type": "array" }, - "source_url": { + "job_title": { "type": "string" }, - "total_in_shard": { - "example": 22706, - "type": "integer" + "name": { + "type": "string" }, - "total_pages": { - "example": 228, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "subway.StoreAddress": { + "skynews.HeadlineItem": { "properties": { - "city": { - "example": "New York", + "author": { "type": "string" }, - "country": { - "example": "US", + "image_url": { "type": "string" }, - "postal_code": { - "example": "10119", + "published_at": { "type": "string" }, - "region": { - "example": "NY", + "summary": { "type": "string" }, - "street": { - "example": "1 Penn Plaza", + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "subway.StoreHours": { + "skynews.VideoResponse": { "properties": { - "closed": { - "example": false, - "type": "boolean" + "description": { + "type": "string" }, - "closes": { - "example": "23:00", + "duration_seconds": { + "type": "integer" + }, + "embed_url": { "type": "string" }, - "day_of_week": { - "example": "Monday", + "published_at": { "type": "string" }, - "opens": { - "example": "09:00", + "thumbnail_urls": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { "type": "string" }, - "segments": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "skynews.VideosResponse": { + "properties": { + "items": { "items": { - "$ref": "#/definitions/subway.TimeSegment" + "$ref": "#/definitions/skynews.HeadlineItem" }, "type": "array" } }, "type": "object" }, - "subway.StoreResponse": { + "skysports.AuthorResponse": { "properties": { - "address": { - "$ref": "#/definitions/subway.StoreAddress" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "description": { - "description": "Description is the store's marketing blurb.", - "type": "string" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "fetched_at": { + "job_title": { "type": "string" }, - "franchise_number": { - "description": "FranchiseNumber is the store's franchise identifier, distinct from\nStoreID (which carries a \"-0\" ordering suffix).", - "example": "75376", + "name": { "type": "string" }, - "google_cid": { - "example": "7950893118019215099", + "url": { "type": "string" + } + }, + "type": "object" + }, + "slate.ArticleResponse": { + "properties": { + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "google_place_id": { - "description": "GooglePlaceID and GoogleCID identify this store in Google's own\ndata, so a caller can join a Subway location to a Google Maps\nplace without geocoding it themselves.", - "example": "ChIJcXhciqhZwokR-x6iSio_V24", + "description": { "type": "string" }, - "has_catering": { - "type": "boolean" - }, - "has_drive_through": { - "type": "boolean" - }, - "has_online_ordering": { - "description": "HasOnlineOrdering, HasCatering and HasDriveThrough are the\nlocator's explicit booleans. They are pointers so \"not published\"\nstays distinguishable from a published false.", - "type": "boolean" - }, - "hours": { + "headings": { "items": { - "$ref": "#/definitions/subway.StoreHours" + "type": "string" }, "type": "array" }, - "latitude": { - "example": 40.7517026, - "type": "number" + "image_url": { + "type": "string" }, - "longitude": { - "example": -73.9925826, - "type": "number" + "is_paywalled": { + "type": "boolean" }, - "meals_served": { + "paragraphs": { "items": { "type": "string" }, "type": "array" }, - "menu_url": { - "description": "MenuURL and OrderURL point at the store's ordering pages.", - "example": "https://order.subway.com/en-us/restaurant/75376-0/menu/", + "published_at": { "type": "string" }, - "name": { - "example": "Subway", + "section": { "type": "string" }, - "open": { - "description": "Open reports the location's own published status. False means the\nstore is flagged closed (permanently or long-term), which is not\nthe same as being outside today's opening hours.", - "example": true, - "type": "boolean" - }, - "order_url": { - "type": "string" + "tags": { + "items": { + "type": "string" + }, + "type": "array" }, - "path": { + "title": { "type": "string" }, - "phone_e164": { - "description": "PhoneE164 is the same number in dialable E.164 form.", - "example": "+12122440101", + "updated_at": { "type": "string" }, - "phone_number": { - "example": "(212) 244-0101", + "url": { "type": "string" - }, - "pickup_and_delivery_services": { - "description": "PickupAndDeliveryServices and MealsServed are the locator's own\nseparate groupings, kept distinct rather than merged into Services.", + } + }, + "type": "object" + }, + "slate.CategoriesResponse": { + "properties": { + "sections": { "items": { - "type": "string" + "$ref": "#/definitions/slate.Section" }, "type": "array" - }, - "price_range": { - "description": "PriceRange is the locator's own band, e.g. \"$\".", - "example": "$", + } + }, + "type": "object" + }, + "slate.HeadlineItem": { + "properties": { + "author": { "type": "string" }, - "services": { - "description": "Services lists the amenities the locator publishes for this store,\ne.g. \"online ordering\", \"delivery\", \"catering\".", + "categories": { "items": { "type": "string" }, "type": "array" }, - "source_url": { + "id": { "type": "string" }, - "store_id": { - "description": "StoreID is the numeric ordering identifier (e.g. \"75376-0\") this\nstore uses on subway.com's ordering app -- pass it to\nGET /subway/menu as store_id. It comes free with this same page\nfetch; the locator and ordering platforms share one store ID.", - "example": "75376-0", + "image_url": { "type": "string" }, - "timezone": { - "description": "Timezone is the store's IANA zone -- needed to read the UTC slots\nfrom GET /subway/available-times as local wall-clock times.", - "example": "America/New_York", + "published_at": { "type": "string" - } - }, - "type": "object" - }, - "subway.TimeSegment": { - "properties": { - "closes": { - "example": "23:00", + }, + "summary": { "type": "string" }, - "opens": { - "example": "09:00", + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "subway.availableTimesResponseDoc": { + "slate.HeadlinesResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "feed_url": { + "type": "string" }, - "data": { - "$ref": "#/definitions/subway.AvailableTimesResponse" + "items": { + "items": { + "$ref": "#/definitions/slate.HeadlineItem" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "section": { + "type": "string" } }, "type": "object" }, - "subway.combosResponseDoc": { + "slate.Section": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "feed_url": { + "type": "string" }, - "data": { - "$ref": "#/definitions/subway.ComboResponse" + "name": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "subway.menuResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "path": { + "type": "string" }, - "data": { - "$ref": "#/definitions/subway.MenuResponse" + "slug": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "url": { + "type": "string" } }, "type": "object" }, - "subway.nearbyResponseDoc": { + "slate.articleResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/subway.NearbyResponse" + "$ref": "#/definitions/slate.ArticleResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "subway.sitemapResponseDoc": { + "slate.categoriesResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/subway.SitemapResponse" + "$ref": "#/definitions/slate.CategoriesResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "subway.storeResponseDoc": { + "slate.headlinesResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/subway.StoreResponse" + "$ref": "#/definitions/slate.HeadlinesResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "suggest.Response": { + "slickdeals.CategoriesResponse": { "properties": { - "query": { - "example": "openai", - "type": "string" - }, - "suggestions": { + "categories": { "items": { - "$ref": "#/definitions/suggest.Suggestion" + "$ref": "#/definitions/slickdeals.CategoryRef" }, "type": "array" - } - }, - "type": "object" - }, - "suggest.Suggestion": { - "properties": { - "position": { - "example": 1, + }, + "count": { + "example": 421, "type": "integer" }, - "query": { - "example": "openai api key", + "fetched_at": { + "type": "string" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "sun.AuthorArticle": { + "slickdeals.CategoryDeal": { "properties": { - "category": { - "type": "string" + "comment_count": { + "example": 1, + "type": "integer" }, - "category_url": { + "found_by": { + "example": "phoinix", "type": "string" }, - "excerpt": { - "type": "string" + "is_expired": { + "example": false, + "type": "boolean" }, - "title": { + "is_frontpage": { + "example": false, + "type": "boolean" + }, + "is_new": { + "example": false, + "type": "boolean" + }, + "is_popular": { + "example": true, + "type": "boolean" + }, + "list_price": { + "example": "$150", "type": "string" }, - "url": { + "posted_at": { + "example": "2026-08-28T14:21:36Z", "type": "string" - } - }, - "type": "object" - }, - "sun.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/sun.AuthorArticle" - }, - "type": "array" }, - "bio": { + "price": { + "example": "$24.99", "type": "string" }, - "job_title": { + "store": { + "example": "Morningsave.com", "type": "string" }, - "name": { + "thread_id": { + "example": 19842723, + "type": "integer" + }, + "title": { + "example": "Hex Evolve Backpack Aspect Duffel Bag $24.99 Free Shipping", "type": "string" }, "url": { "type": "string" + }, + "vote_score": { + "example": 9, + "type": "integer" } }, "type": "object" }, - "swiggy.Collection": { + "slickdeals.CategoryRef": { "properties": { - "id": { + "name": { + "example": "Laptop Bags", "type": "string" }, - "image_url": { + "slug": { + "example": "laptop-bag", "type": "string" }, - "title": { + "url": { + "example": "https://slickdeals.net/deals/laptop-bag/", "type": "string" } }, "type": "object" }, - "swiggy.CollectionsResponse": { - "properties": { - "collections": { - "items": { - "$ref": "#/definitions/swiggy.Collection" - }, - "type": "array" - }, - "is_serviceable": { - "description": "IsServiceable reports whether Swiggy delivers to the requested\ncoordinates at all. False means the coordinates are outside\nSwiggy's delivery coverage, so an empty collections list is a\ncoverage answer rather than a served location that simply has no\ncurated collections. The same field is returned by /swiggy/search's\nplain nearby browse.", - "type": "boolean" - } - }, - "type": "object" - }, - "swiggy.ExternalRating": { + "slickdeals.CategoryResponse": { "properties": { "count": { - "type": "string" - }, - "rating": { - "type": "number" + "example": 37, + "type": "integer" }, - "source": { - "type": "string" - } - }, - "type": "object" - }, - "swiggy.MenuCategory": { - "properties": { - "items": { + "deals": { "items": { - "$ref": "#/definitions/swiggy.MenuItem" + "$ref": "#/definitions/slickdeals.CategoryDeal" }, "type": "array" }, - "subcategory": { + "fetched_at": { "type": "string" }, - "title": { + "slug": { + "example": "laptop-bag", + "type": "string" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "swiggy.MenuItem": { + "slickdeals.Comment": { "properties": { - "category": { + "author": { + "example": "OutFr0mUndr", "type": "string" }, - "description": { - "type": "string" + "author_post_count": { + "example": 49, + "type": "integer" }, - "discounted_price": { - "type": "number" + "author_title": { + "example": "L2: Beginner", + "type": "string" }, - "id": { + "content": { + "example": "Shows as $358.53 for me...", "type": "string" }, - "image_url": { + "content_html": { "type": "string" }, - "in_stock": { - "type": "boolean" + "funny_count": { + "type": "integer" }, - "is_veg": { - "type": "boolean" + "helpful_count": { + "type": "integer" }, - "name": { - "type": "string" + "like_count": { + "example": 1, + "type": "integer" }, - "price": { - "type": "number" + "not_helpful_count": { + "type": "integer" }, - "rating": { - "description": "Rating and TotalRatings are Swiggy's own aggregate score and review\ncount for this individual dish, the same two fields a restaurant\ncarries. Omitted when the dish has no rating yet. Only the headline\naggregate is returned -- individual reviews and reviewer identity\nare out of scope for this platform.", - "type": "number" + "permalink": { + "type": "string" }, - "total_ratings": { + "post_id": { + "example": 186692484, "type": "integer" + }, + "posted_at": { + "example": "2026-09-14T19:17:54-07:00", + "type": "string" } }, "type": "object" }, - "swiggy.MenuResponse": { + "slickdeals.CommentsResponse": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/swiggy.MenuCategory" - }, - "type": "array" - }, - "offers": { + "comments": { "items": { - "$ref": "#/definitions/swiggy.Offer" + "$ref": "#/definitions/slickdeals.Comment" }, "type": "array" }, - "restaurant": { - "$ref": "#/definitions/swiggy.Restaurant" - } - }, - "type": "object" - }, - "swiggy.Offer": { - "properties": { - "coupon_code": { - "type": "string" + "count": { + "example": 4, + "type": "integer" }, - "description": { + "fetched_at": { "type": "string" }, - "tag": { - "type": "string" + "has_more": { + "type": "boolean" }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "swiggy.OpeningHours": { - "properties": { - "day": { + "source_url": { "type": "string" }, - "hours": { - "type": "string" + "thread_id": { + "example": 20015817, + "type": "integer" } }, "type": "object" }, - "swiggy.Restaurant": { + "slickdeals.Deal": { "properties": { - "address": { - "type": "string" - }, - "area": { - "type": "string" - }, - "city": { + "brand": { + "example": "Microsoft", "type": "string" }, - "cost_for_two": { + "category": { + "description": "Category/SubCategory/CategoryPaths are Slickdeals' modern product\ntaxonomy for this deal (distinct from Forum/ForumID above -- these\nare two different id spaces Slickdeals maintains in parallel).", + "example": "Computers", "type": "string" }, - "cuisines": { + "category_paths": { + "example": [ + "Computers > Laptops", + "Computers" + ], "items": { "type": "string" }, "type": "array" }, - "delivery_time_minutes": { + "comment_count": { + "example": 4, "type": "integer" }, - "dishes": { - "description": "Dishes are the menu items that actually matched a /swiggy/search\nquery, carried only by Swiggy's own \"Dishes\" search tab (tab=dish).\nEmpty on the restaurant tab, on a plain nearby browse, on a\ncollection browse, and on /swiggy/restaurant -- none of those\nupstream shapes carry per-restaurant dish matches.", - "items": { - "$ref": "#/definitions/swiggy.MenuItem" - }, - "type": "array" - }, - "external_rating": { - "$ref": "#/definitions/swiggy.ExternalRating" - }, - "hours_message": { + "cta_text": { + "example": "Get Deal at eBay", "type": "string" }, - "hours_status": { - "description": "HoursStatus/HoursMessage are Swiggy's own live open/close callout\nfor this outlet (\"Open now\" / \"Closes 11:30 pm\"); OpeningHours is\nits weekly schedule. Only the restaurant detail and menu responses\ncarry these -- search and collection listing cards do not, so they\nare empty on /swiggy/search results.", + "deal_url": { + "description": "DealURL is Slickdeals' own outbound/affiliate redirect to the\nmerchant; following it lands on the store's own page for this deal.", "type": "string" }, - "id": { + "description": { "type": "string" }, - "image_url": { + "description_html": { "type": "string" }, - "is_open": { - "type": "boolean" - }, - "is_promoted": { - "description": "IsPromoted reports whether Swiggy itself labels this a promoted\n(sponsored, paid-placement) result rather than an organic one.\nPresent and true only for those; Swiggy marks none on a plain\nnearby browse.", - "type": "boolean" + "fetched_at": { + "type": "string" }, - "latitude": { - "type": "number" + "final_price": { + "example": "$358.53", + "type": "string" }, - "locality": { + "forum": { + "description": "Forum is Slickdeals' own legacy sub-forum name the thread was posted\nin (e.g. \"Hot Deals\") -- a different, coarser taxonomy than\nCategory/SubCategory. ForumID is its numeric legacy id.", + "example": "Hot Deals", "type": "string" }, - "longitude": { - "type": "number" + "forum_id": { + "example": 9, + "type": "integer" }, - "name": { + "found_by": { + "description": "FoundBy is the public Slickdeals username who posted the deal --\nthe same public-forum-post attribution class this repo already\nexposes for Reddit.", + "example": "BML6182", "type": "string" }, - "offers": { - "description": "Offers are the promotions Swiggy shows on this restaurant's own\nlisting card in a search, browse, or collection result -- the\nheadline discount and its condition, its badge, and any separate\nfree-delivery benefit. Absent when the card shows no promotion, and\non /swiggy/restaurant and /swiggy/restaurant/menu, whose responses\ncarry the restaurant's fuller offer list at the top level instead.", - "items": { - "$ref": "#/definitions/swiggy.Offer" - }, - "type": "array" + "found_by_profile": { + "allOf": [ + { + "$ref": "#/definitions/slickdeals.UserProfile" + } + ], + "description": "FoundByProfile is a public summary of the FoundBy user's Slickdeals\ncommunity standing -- read from the same page's own \"About the\nAuthor\" sidebar, at no additional upstream cost." }, - "opening_hours": { + "image_urls": { "items": { - "$ref": "#/definitions/swiggy.OpeningHours" + "type": "string" }, "type": "array" }, - "phone": { - "type": "string" + "is_expired": { + "example": false, + "type": "boolean" }, - "postal_code": { + "list_price": { + "example": "$1,200.00", "type": "string" }, - "rating": { - "type": "number" - }, - "rating_count": { + "posted_at": { + "example": "2026-09-14T19:13:22-07:00", "type": "string" }, - "total_ratings": { - "type": "integer" - }, - "unavailable_message": { - "description": "UnavailableMessage is Swiggy's own reason this listed restaurant\ncannot be ordered from right now (\"Currently not taking orders for\nthis location\", \"Opens next at 5 pm, today\", \"Temporarily closed for\ndelivery\"). Absent for a restaurant that is currently orderable.\nNote it is not simply the inverse of is_open: a restaurant Swiggy\nreports as open can still be unavailable for the requested location.", - "type": "string" - } - }, - "type": "object" - }, - "swiggy.RestaurantResponse": { - "properties": { - "offers": { + "related_deals": { + "description": "RelatedDeals is Slickdeals' own \"Popular Deals\"/\"Trending Deals\"\nsidebar shown alongside this thread -- read from the same page\nfetch as the rest of this record, at no additional upstream cost.", "items": { - "$ref": "#/definitions/swiggy.Offer" + "$ref": "#/definitions/slickdeals.RelatedDeal" }, "type": "array" }, - "restaurant": { - "$ref": "#/definitions/swiggy.Restaurant" - } - }, - "type": "object" - }, - "swiggy.SearchResponse": { - "properties": { - "is_serviceable": { - "description": "IsServiceable reports whether Swiggy delivers to the requested\ncoordinates at all. False means the coordinates are outside\nSwiggy's delivery coverage, so an empty restaurants list is a\ncoverage answer rather than a no-matches answer; an empty list\nwithout this field means no matches in a served area. Returned\nonly for the plain nearby browse -- keyword search and a\ncollection_id browse omit it, because Swiggy answers neither with\na coverage verdict.", - "type": "boolean" - }, - "next_offset": { + "source_url": { "type": "string" }, - "restaurants": { - "items": { - "$ref": "#/definitions/swiggy.Restaurant" - }, - "type": "array" - } - }, - "type": "object" - }, - "swiggy.collectionsResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" - }, - "data": { - "$ref": "#/definitions/swiggy.CollectionsResponse" - }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "swiggy.menuResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" - }, - "data": { - "$ref": "#/definitions/swiggy.MenuResponse" - }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "swiggy.restaurantResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" - }, - "data": { - "$ref": "#/definitions/swiggy.RestaurantResponse" - }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "swiggy.searchResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" - }, - "data": { - "$ref": "#/definitions/swiggy.SearchResponse" - }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "tacobell.AppMenuBundleChoice": { - "properties": { - "code": { - "example": "22603_22902_1", + "store": { + "example": "eBay", "type": "string" }, - "default_product_codes": { - "example": [ - "22101" - ], - "items": { - "type": "string" - }, - "type": "array" + "sub_category": { + "example": "Laptops", + "type": "string" }, - "max_selections": { - "example": 1, + "thread_id": { + "example": 20015817, "type": "integer" }, - "min_selections": { - "example": 1, - "type": "integer" - } - }, - "type": "object" - }, - "tacobell.AppMenuCategory": { - "properties": { - "code": { - "example": "tacos", + "title": { + "example": "Microsoft Surface Laptop 5 13.5\" 2.5GHz/16GB/256GB - Refurb w/Warranty $358.53", "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/tacobell.AppMenuItem" - }, - "type": "array" - }, - "name": { - "example": "Tacos", - "type": "string" - } - }, - "type": "object" - }, - "tacobell.AppMenuDaypart": { - "properties": { - "code": { - "example": "HappyHour", + "url": { + "example": "https://slickdeals.net/f/20015817-microsoft-surface-laptop-5-13-5-2-5ghz-16gb-256gb-refurb-w-warranty-358-53", "type": "string" }, - "name": { - "example": "Happy Hour", - "type": "string" + "vote_score": { + "example": -1, + "type": "integer" } }, "type": "object" }, - "tacobell.AppMenuItem": { + "slickdeals.DealTypeRef": { "properties": { - "calories": { - "example": 771, + "id": { + "example": 1774, "type": "integer" }, - "choices": { - "description": "Choices is populated only when kind is \"bundle\".", - "items": { - "$ref": "#/definitions/tacobell.AppMenuBundleChoice" - }, - "type": "array" - }, - "code": { - "example": "22603", - "type": "string" - }, - "daypart_codes": { - "example": [ - "BalanceOfDay" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "kind": { - "example": "bundle", - "type": "string" - }, "name": { - "example": "3 Crunchy Tacos Supreme Combo", + "example": "Free / Freebie", "type": "string" - }, - "price": { - "$ref": "#/definitions/tacobell.Money" } }, "type": "object" }, - "tacobell.AppMenuResponse": { + "slickdeals.DealTypesResponse": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/tacobell.AppMenuCategory" - }, - "type": "array" - }, - "category_count": { - "example": 17, + "count": { + "example": 10, "type": "integer" }, - "dayparts": { + "deal_types": { "items": { - "$ref": "#/definitions/tacobell.AppMenuDaypart" + "$ref": "#/definitions/slickdeals.DealTypeRef" }, "type": "array" }, "fetched_at": { "type": "string" }, - "item_count": { - "example": 207, - "type": "integer" - }, "source_url": { "type": "string" - }, - "store_number": { - "example": "034922", - "type": "string" } }, "type": "object" }, - "tacobell.CategoriesResponse": { + "slickdeals.ForumRef": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/tacobell.Category" - }, - "type": "array" - }, - "count": { - "example": 17, + "id": { + "example": 9, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "tacobell.Category": { - "properties": { - "hidden_from_menu": { - "description": "HiddenFromMenu marks a category Taco Bell does not surface in its own\nmenu navigation; it is still fetchable.", - "example": false, - "type": "boolean" - }, "name": { - "example": "Tacos", - "type": "string" - }, - "slug": { - "example": "tacos", + "example": "Hot Deals", "type": "string" }, "url": { + "example": "https://slickdeals.net/forums/forumdisplay.php?f=9", "type": "string" } }, "type": "object" }, - "tacobell.CustomizationGroup": { + "slickdeals.ForumsResponse": { "properties": { "count": { - "example": 9, + "example": 26, "type": "integer" }, - "group": { - "example": "sauce_options", + "fetched_at": { "type": "string" }, - "options": { + "forums": { "items": { - "$ref": "#/definitions/tacobell.CustomizationOption" + "$ref": "#/definitions/slickdeals.ForumRef" }, "type": "array" - } - }, - "type": "object" - }, - "tacobell.CustomizationOption": { - "properties": { - "accurate_calories": { - "description": "AccurateCalories is Taco Bell's unrounded figure; `calories` is the\nrounded number the site displays.", - "example": 4.0419, - "type": "number" - }, - "available_in_store": { - "example": true, - "type": "boolean" - }, - "calories": { - "example": 0, - "type": "integer" - }, - "code": { - "example": "2111", - "type": "string" - }, - "description": { - "type": "string" - }, - "image_url": { - "type": "string" }, - "name": { - "example": "Pico De Gallo", + "source_url": { "type": "string" - }, - "price": { - "$ref": "#/definitions/tacobell.Money" } }, "type": "object" }, - "tacobell.DayHours": { + "slickdeals.FrontpageResponse": { "properties": { - "closes": { - "example": "4:00 AM", - "type": "string" - }, - "dayparts": { + "deals": { "items": { - "$ref": "#/definitions/tacobell.Daypart" + "$ref": "#/definitions/slickdeals.SearchAdvancedResult" }, "type": "array" }, - "opens": { - "example": "7:00 AM", - "type": "string" - }, - "week_day": { - "example": "Monday", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "tacobell.Daypart": { - "properties": { - "all_day": { - "example": false, - "type": "boolean" }, - "closed": { - "example": false, + "has_next_page": { + "description": "HasNextPage reflects whether the page itself exposed a further page\nlink, not a total page count -- Slickdeals' own homepage pagination\nis next/prev-only, with no total page count in its state payload.", + "example": true, "type": "boolean" }, - "ends": { - "example": "4:00 AM", - "type": "string" - }, - "name": { - "example": "Balance Of Day", - "type": "string" + "page": { + "example": 1, + "type": "integer" }, - "starts": { - "example": "7:00 AM", + "source_url": { "type": "string" } }, "type": "object" }, - "tacobell.MenuItem": { + "slickdeals.PrimaryCategoriesResponse": { "properties": { - "available_in_store": { - "example": true, - "type": "boolean" + "categories": { + "items": { + "$ref": "#/definitions/slickdeals.CategoryRef" + }, + "type": "array" }, - "calories": { - "example": 430, + "count": { + "example": 13, "type": "integer" }, - "calories_text": { - "example": "430 Cal", - "type": "string" - }, - "category": { - "example": "tacos", - "type": "string" - }, - "code": { - "example": "CB-1234", - "type": "string" - }, - "food_type": { - "type": "string" - }, - "has_meatless": { - "description": "HasMeatless marks an item with a meatless variant available.", - "example": false, - "type": "boolean" - }, - "image_url": { - "type": "string" - }, - "item_type": { - "type": "string" - }, - "modifiable": { - "description": "Modifiable marks an item Taco Bell allows customizing.", - "example": true, - "type": "boolean" - }, - "name": { - "example": "Naked Chicken Chalupa", - "type": "string" - }, - "price": { - "$ref": "#/definitions/tacobell.Money" - }, - "product_type": { + "source_url": { "type": "string" } }, "type": "object" }, - "tacobell.MenuResponse": { + "slickdeals.PrimaryCategoryResponse": { "properties": { - "category": { - "example": "tacos", - "type": "string" - }, "count": { - "example": 16, + "example": 40, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "items": { + "deals": { "items": { - "$ref": "#/definitions/tacobell.MenuItem" + "$ref": "#/definitions/slickdeals.CategoryDeal" }, "type": "array" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "tacobell.Money": { - "properties": { - "currency": { - "example": "USD", + "fetched_at": { "type": "string" }, - "formatted": { - "description": "Formatted is Taco Bell's own rendering, kept because it carries the\nupstream's rounding/symbol conventions.", - "example": "$5.99", + "slug": { + "example": "laptop-deals", "type": "string" }, - "value": { - "example": 5.99, - "type": "number" - } - }, - "type": "object" - }, - "tacobell.NutritionFacts": { - "properties": { - "added_sugars_g": { - "example": 2.01, - "type": "number" - }, - "caffeine_mg": { - "type": "number" - }, - "calcium_mg": { - "example": 214.1077, - "type": "number" - }, - "calories": { - "example": 392.9079, - "type": "number" - }, - "calories_from_fat": { - "example": 118.0107, - "type": "number" - }, - "cholesterol_mg": { - "example": 27.4909, - "type": "number" - }, - "dietary_fiber_g": { - "example": 7.5198, - "type": "number" - }, - "iron_mg": { - "example": 4.1016, - "type": "number" - }, - "monounsaturated_fat_g": { - "example": 3.6845, - "type": "number" - }, - "polyunsaturated_fat_g": { - "example": 3.33, - "type": "number" - }, - "potassium_mg": { - "type": "number" - }, - "protein_g": { - "example": 15.6483, - "type": "number" - }, - "saturated_fat_g": { - "example": 6.4715, - "type": "number" - }, - "sodium_mg": { - "example": 1163.993, - "type": "number" - }, - "sugar_alcohol_g": { - "type": "number" - }, - "sugars_g": { - "example": 4.0006, - "type": "number" - }, - "total_carbohydrate_g": { - "example": 51.5623, - "type": "number" - }, - "total_fat_g": { - "example": 13.8961, - "type": "number" - }, - "trans_fat_g": { - "example": 0.2417, - "type": "number" - }, - "vitamin_a": { - "example": 11.4691, - "type": "number" - }, - "vitamin_c": { - "example": 7.2259, - "type": "number" - }, - "vitamin_d_mcg": { - "example": 1.6074, - "type": "number" + "source_url": { + "type": "string" } }, "type": "object" }, - "tacobell.NutritionResponse": { + "slickdeals.RelatedDeal": { "properties": { - "allergens": { - "description": "Allergens is the label's \"Contains:\" statement, split into items.", - "items": { - "type": "string" - }, - "type": "array" - }, - "category": { - "example": "burritos", - "type": "string" - }, - "fetched_at": { - "type": "string" + "comment_count": { + "type": "integer" }, - "ingredients": { - "description": "Ingredients is the full component-by-component statement, present\nonly when include_ingredients is set.", + "final_price": { + "example": "$22", "type": "string" }, - "label_name": { - "description": "LabelName is the label's own item name, which can be more specific\nthan the menu name (e.g. \"Burrito Supreme® - Beef\").", + "found_by": { + "example": "iconian", "type": "string" }, - "label_url": { - "description": "LabelURL is the nutrition label this data came from. Taco Bell\npublishes its panel there rather than on tacobell.com.", + "list_price": { + "example": "$37", "type": "string" }, - "nutrition": { - "$ref": "#/definitions/tacobell.NutritionFacts" - }, - "product": { - "example": "burrito-supreme", + "posted_at": { "type": "string" }, - "serving_size_unit": { - "example": "Burrito", + "source": { + "description": "Source names which sidebar this entry came from: \"popular\" or\n\"trending\".", + "example": "popular", "type": "string" }, - "serving_weight_grams": { - "example": 232.4657, - "type": "number" - }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "tacobell.ProductImage": { - "properties": { - "format": { - "example": "640x650", - "type": "string" + "thread_id": { + "example": 20013396, + "type": "integer" }, - "type": { - "example": "PRIMARY", + "title": { + "example": "20,000mAh BooKoo A9 2000A Car Battery Jumper w/ QC 3.0, PD 18W $22.20 + Free S/H", "type": "string" }, "url": { "type": "string" + }, + "vote_score": { + "example": 5, + "type": "integer" } }, "type": "object" }, - "tacobell.ProductResponse": { + "slickdeals.SearchAdvancedResponse": { "properties": { - "accurate_calories": { - "description": "AccurateCalories is the unrounded figure behind `calories`.", - "example": 392.9079, - "type": "number" - }, - "available_in_store": { - "example": true, - "type": "boolean" - }, - "calories": { - "example": 390, - "type": "integer" - }, - "category": { - "example": "burritos", - "type": "string" - }, - "code": { - "example": "22201", - "type": "string" - }, - "customizations": { - "description": "Customizations are the option groups this item accepts, each with\nper-option calories and prices. Empty for a non-modifiable item.", + "facets": { "items": { - "$ref": "#/definitions/tacobell.CustomizationGroup" + "$ref": "#/definitions/slickdeals.SearchFacetGroup" }, "type": "array" }, - "description": { - "type": "string" - }, "fetched_at": { "type": "string" }, - "has_meatless": { - "example": false, - "type": "boolean" - }, - "images": { - "items": { - "$ref": "#/definitions/tacobell.ProductImage" - }, - "type": "array" - }, - "modifiable": { - "example": true, - "type": "boolean" + "page": { + "example": 1, + "type": "integer" }, - "name": { - "example": "Burrito Supreme®", - "type": "string" + "per_page": { + "example": 40, + "type": "integer" }, - "nutrition_label_url": { - "description": "NutritionLabelURL is the full nutrition-facts label Taco Bell links\nfor this item. /taco-bell/nutrition reads it.", + "query": { + "example": "laptop", "type": "string" }, - "price": { - "$ref": "#/definitions/tacobell.Money" + "result_count": { + "example": 915, + "type": "integer" }, - "related": { + "results": { "items": { - "$ref": "#/definitions/tacobell.RelatedProduct" + "$ref": "#/definitions/slickdeals.SearchAdvancedResult" }, "type": "array" }, "source_url": { "type": "string" }, - "url": { - "type": "string" - }, - "vegetarian_friendly": { - "example": false, - "type": "boolean" + "total_pages": { + "example": 23, + "type": "integer" } }, "type": "object" }, - "tacobell.RelatedProduct": { + "slickdeals.SearchAdvancedResult": { "properties": { - "calories": { - "example": 690, + "comment_count": { + "example": 4, "type": "integer" }, - "code": { - "example": "22963", - "type": "string" + "discount": { + "example": 26, + "type": "integer" }, - "image_url": { + "final_price": { + "example": "$66", "type": "string" }, - "name": { - "example": "Grilled Cheese Burrito", + "forum_id": { + "example": 9, + "type": "integer" + }, + "found_by": { + "example": "htp182", "type": "string" }, - "price": { - "$ref": "#/definitions/tacobell.Money" + "has_rebate": { + "example": false, + "type": "boolean" }, - "reference_type": { - "example": "CROSSELLING", + "image_url": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "tacobell.Store": { - "properties": { - "address": { - "$ref": "#/definitions/tacobell.StoreAddress" + "is_expired": { + "example": false, + "type": "boolean" }, - "capabilities": { - "$ref": "#/definitions/tacobell.StoreCapabilities" + "is_fire_deal": { + "description": "IsFireDeal and HasRebate are populated on Frontpage's own deal cards;\nGET /slickdeals/search/advanced's result cards were not observed\ncarrying either field live, so they read as their zero value there.", + "example": false, + "type": "boolean" }, - "delivery": { + "is_frontpage": { "example": true, "type": "boolean" }, - "distance_text": { - "example": "0.90 Miles", - "type": "string" - }, - "name": { - "example": "040890", - "type": "string" + "is_new": { + "example": false, + "type": "boolean" }, - "online_available": { + "is_popular": { "example": true, "type": "boolean" }, - "phone_number": { - "example": "+16268423006", + "list_price": { + "example": "$90", "type": "string" }, - "status": { - "example": "openNow", + "posted_at": { "type": "string" }, - "store_number": { - "example": "040890", + "store": { + "example": "Newegg", "type": "string" }, - "timezone": { - "example": "America/Los_Angeles", + "store_id": { + "example": 701, + "type": "integer" + }, + "thread_id": { + "example": 19618338, + "type": "integer" + }, + "title": { + "example": "Anker 4-Port up to 140W USB-C Laptop Charger w/ 5' Cable", "type": "string" }, - "timezone_offset": { - "example": "GMT-07:00", + "url": { "type": "string" }, - "today_hours": { - "$ref": "#/definitions/tacobell.StoreHours" + "views_count": { + "example": 3274, + "type": "integer" + }, + "vote_score": { + "example": 20, + "type": "integer" } }, "type": "object" }, - "tacobell.StoreAddress": { + "slickdeals.SearchFacetGroup": { "properties": { - "city": { - "example": "Los Angeles", - "type": "string" - }, - "country": { - "example": "US", - "type": "string" - }, - "latitude": { - "example": 34.048934, - "type": "number" - }, - "line1": { - "example": "801 West 7th Street", - "type": "string" - }, - "line2": { - "type": "string" - }, - "longitude": { - "example": -118.258867, - "type": "number" - }, - "postal_code": { - "example": "90017", + "label": { + "example": "Categories", "type": "string" }, - "region": { - "example": "US-CA", - "type": "string" + "options": { + "items": { + "$ref": "#/definitions/slickdeals.SearchFacetOption" + }, + "type": "array" } }, "type": "object" }, - "tacobell.StoreCapabilities": { + "slickdeals.SearchFacetOption": { "properties": { - "breakfast": { - "example": true, - "type": "boolean" - }, - "delivery_enabled": { - "example": true, - "type": "boolean" - }, - "drive_thru": { - "example": false, - "type": "boolean" - }, - "live_mas_cafe": { - "example": false, - "type": "boolean" - }, - "mobile_enabled": { - "example": true, - "type": "boolean" + "count": { + "example": 27, + "type": "integer" }, - "online": { - "example": true, - "type": "boolean" + "label": { + "example": "Laptops", + "type": "string" }, - "open_late": { - "example": false, - "type": "boolean" + "parent_value": { + "description": "ParentValue is set when this option is a subcategory of another\noption in the same group (Slickdeals' own Categories facet nests\none level deep).", + "type": "string" }, - "pickup_shelves": { - "example": true, - "type": "boolean" + "value": { + "example": "34", + "type": "string" } }, "type": "object" }, - "tacobell.StoreDetailResponse": { + "slickdeals.SearchResponse": { "properties": { - "address": { - "$ref": "#/definitions/tacobell.StoreAddress" - }, - "breakfast_available": { - "description": "BreakfastAvailable is the store-hours record's own flag, which can\ndiffer from capabilities.breakfast.", - "example": true, - "type": "boolean" - }, - "capabilities": { - "$ref": "#/definitions/tacobell.StoreCapabilities" - }, - "delivery": { - "example": true, - "type": "boolean" + "count": { + "example": 25, + "type": "integer" }, "fetched_at": { "type": "string" }, - "geofencing_radius": { - "example": 3, - "type": "integer" + "query": { + "example": "laptop", + "type": "string" }, - "hours": { - "description": "Hours is the full published week, Monday-first. /taco-bell/stores\ncarries only today's window.", + "results": { "items": { - "$ref": "#/definitions/tacobell.DayHours" + "$ref": "#/definitions/slickdeals.SearchResult" }, "type": "array" }, - "name": { - "example": "040890", - "type": "string" - }, - "online_available": { - "example": true, - "type": "boolean" - }, - "phone_number": { - "example": "+16268423006", - "type": "string" - }, - "pickup_status": { - "description": "PickupStatus is whether mobile pickup ordering is switched on for\nthis restaurant.", - "example": "Activated", - "type": "string" - }, "source_url": { "type": "string" - }, - "status": { - "example": "openNow", - "type": "string" - }, - "store_number": { - "example": "040890", - "type": "string" - }, - "timezone": { - "description": "Timezone is the IANA zone; TimezoneOffset is Taco Bell's own GMT\nrendering, kept because it reflects the store's current DST state.", - "example": "America/Los_Angeles", - "type": "string" - }, - "timezone_offset": { - "example": "GMT-07:00", - "type": "string" - }, - "today_hours": { - "$ref": "#/definitions/tacobell.DayHours" } }, "type": "object" }, - "tacobell.StoreHours": { + "slickdeals.SearchResult": { "properties": { - "closes": { - "example": "4:00 AM", + "found_by": { + "example": "BML6182", "type": "string" }, - "opens": { - "example": "5:30 AM", + "price": { + "example": "$358.53", "type": "string" }, - "week_day": { - "example": "Sunday", + "published_at": { + "example": "2026-09-15T02:13:22Z", "type": "string" - } - }, - "type": "object" - }, - "tacobell.StoreMenuCategory": { - "properties": { - "code": { - "example": "breakfast", + }, + "store": { + "example": "ebay.com", "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/tacobell.MenuItem" - }, - "type": "array" + "thread_id": { + "example": 20015817, + "type": "integer" }, - "name": { - "example": "Breakfast", + "title": { + "description": "Title is Slickdeals' own thread title, which conventionally embeds\nthe deal price (e.g. \"... $358.53\") -- Price is a best-effort\nconvenience field extracted from it, not a separately structured\nupstream field.", + "example": "Microsoft Surface Laptop 5 13.5\" 2.5GHz/16GB/256GB - Refurb w/Warranty $358.53", + "type": "string" + }, + "url": { + "example": "https://slickdeals.net/f/20015817-microsoft-surface-laptop-5-13-5-2-5ghz-16gb-256gb-refurb-w-warranty-358-53", "type": "string" + }, + "vote_score": { + "example": 16, + "type": "integer" } }, "type": "object" }, - "tacobell.StoreMenuResponse": { + "slickdeals.UserProfile": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/tacobell.StoreMenuCategory" - }, - "type": "array" + "avatar_url": { + "type": "string" }, - "category_count": { - "example": 17, + "deals_posted": { + "example": 175, "type": "integer" }, - "fetched_at": { + "join_date": { + "example": "Nov 2017", "type": "string" }, - "happier_hours": { - "allOf": [ - { - "$ref": "#/definitions/tacobell.TimeWindow" - } - ], - "description": "HappierHours is this store's current happy-hour discount window, if\none is in effect. Not published anywhere else in this family." + "reputation": { + "example": 685, + "type": "integer" }, - "item_count": { - "example": 312, + "total_comments": { + "example": 519, "type": "integer" }, - "source_url": { - "type": "string" + "total_votes": { + "example": 728, + "type": "integer" }, - "store_number": { - "example": "040890", + "user_id": { + "example": "13480663", "type": "string" } }, "type": "object" }, - "tacobell.StoresResponse": { + "slickdeals.categoriesResponseDoc": { "properties": { - "count": { - "example": 10, + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/slickdeals.CategoriesResponse" }, - "stores": { - "items": { - "$ref": "#/definitions/tacobell.Store" - }, - "type": "array" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "tacobell.TimeWindow": { + "slickdeals.categoryResponseDoc": { "properties": { - "ends_at": { - "example": "2026-09-02T00:00:00Z", - "type": "string" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "starts_at": { - "example": "2026-09-01T21:00:00Z", - "type": "string" + "data": { + "$ref": "#/definitions/slickdeals.CategoryResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "tacobell.appMenuResponseDoc": { + "slickdeals.commentsResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/tacobell.AppMenuResponse" + "$ref": "#/definitions/slickdeals.CommentsResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -226750,14 +231812,14 @@ }, "type": "object" }, - "tacobell.categoriesResponseDoc": { + "slickdeals.dealResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/tacobell.CategoriesResponse" + "$ref": "#/definitions/slickdeals.Deal" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -226765,14 +231827,14 @@ }, "type": "object" }, - "tacobell.menuResponseDoc": { + "slickdeals.dealTypesResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/tacobell.MenuResponse" + "$ref": "#/definitions/slickdeals.DealTypesResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -226780,14 +231842,14 @@ }, "type": "object" }, - "tacobell.nutritionResponseDoc": { + "slickdeals.forumsResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/tacobell.NutritionResponse" + "$ref": "#/definitions/slickdeals.ForumsResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -226795,14 +231857,14 @@ }, "type": "object" }, - "tacobell.productResponseDoc": { + "slickdeals.frontpageResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/tacobell.ProductResponse" + "$ref": "#/definitions/slickdeals.FrontpageResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -226810,14 +231872,14 @@ }, "type": "object" }, - "tacobell.storeDetailResponseDoc": { + "slickdeals.primaryCategoriesResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/tacobell.StoreDetailResponse" + "$ref": "#/definitions/slickdeals.PrimaryCategoriesResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -226825,14 +231887,14 @@ }, "type": "object" }, - "tacobell.storeMenuResponseDoc": { + "slickdeals.primaryCategoryResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/tacobell.StoreMenuResponse" + "$ref": "#/definitions/slickdeals.PrimaryCategoryResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -226840,14 +231902,14 @@ }, "type": "object" }, - "tacobell.storesResponseDoc": { + "slickdeals.searchAdvancedResponseDoc": { "properties": { "code": { "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/tacobell.StoresResponse" + "$ref": "#/definitions/slickdeals.SearchAdvancedResponse" }, "msg": { "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" @@ -226855,460 +231917,343 @@ }, "type": "object" }, - "target.Answer": { + "slickdeals.searchResponseDoc": { "properties": { - "author": { - "type": "string" - }, - "helpful": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "id": { - "type": "string" + "data": { + "$ref": "#/definitions/slickdeals.SearchResponse" }, - "submitted_at": { + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "sloanreview.ArticleIndexItem": { + "properties": { + "last_modified": { "type": "string" }, - "text": { + "url": { "type": "string" } }, "type": "object" }, - "target.Availability": { + "sloanreview.ArticleResponse": { "properties": { - "backup_store": { - "type": "boolean" + "archive_timestamp": { + "type": "string" }, - "primary_store": { - "type": "boolean" + "archive_url": { + "type": "string" }, - "scheduled_delivery": { - "type": "boolean" + "authors": { + "type": "string" }, - "shipping": { - "type": "boolean" + "description": { + "type": "string" }, - "sold_out": { - "type": "boolean" - } - }, - "type": "object" - }, - "target.Breadcrumb": { - "properties": { - "id": { - "example": "4yi5p", + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "published_at": { "type": "string" }, - "name": { - "example": "Coffee", + "title": { "type": "string" }, "url": { "type": "string" + }, + "word_count": { + "type": "integer" } }, "type": "object" }, - "target.CategoriesResponse": { + "sloanreview.ArticlesResponse": { "properties": { - "categories": { + "has_next": { + "type": "boolean" + }, + "items": { "items": { - "$ref": "#/definitions/target.Category" + "$ref": "#/definitions/sloanreview.ArticleIndexItem" }, "type": "array" }, - "count": { - "example": 29, + "page": { "type": "integer" }, - "fetched_at": { - "type": "string" + "page_size": { + "type": "integer" }, - "group_count": { - "example": 16, + "total": { "type": "integer" }, - "groups": { + "total_pages": { + "type": "integer" + } + }, + "type": "object" + }, + "sloanreview.CategoriesResponse": { + "properties": { + "categories": { "items": { - "$ref": "#/definitions/target.CategoryGroup" + "$ref": "#/definitions/sloanreview.Category" }, "type": "array" + } + }, + "type": "object" + }, + "sloanreview.Category": { + "properties": { + "name": { + "type": "string" }, - "source_url": { + "slug": { "type": "string" } }, "type": "object" }, - "target.Category": { + "sloanreview.HeadlineItem": { "properties": { - "id": { - "example": "5xt1a", + "authors": { "type": "string" }, - "image_url": { + "published_at": { "type": "string" }, - "name": { - "example": "Grocery", + "title": { + "type": "string" + }, + "topic": { "type": "string" }, "url": { - "example": "https://www.target.com/c/grocery/-/N-5xt1a", "type": "string" } }, "type": "object" }, - "target.CategoryGroup": { + "sloanreview.HeadlinesResponse": { "properties": { - "categories": { + "items": { "items": { - "$ref": "#/definitions/target.Category" + "$ref": "#/definitions/sloanreview.HeadlineItem" }, "type": "array" - }, - "name": { - "example": "Grocery", - "type": "string" } }, "type": "object" }, - "target.CategoryProductsResponse": { + "sloanreview.TopicResponse": { "properties": { - "applied_filter_ids": { + "items": { "items": { - "type": "string" + "$ref": "#/definitions/sloanreview.HeadlineItem" }, "type": "array" }, - "category_id": { - "example": "5q0ga", - "type": "string" - }, - "count": { - "example": 24, - "type": "integer" - }, - "fetched_at": { + "topic": { "type": "string" - }, - "filter_groups": { - "items": { - "$ref": "#/definitions/target.FilterGroup" - }, - "type": "array" - }, - "page": { - "example": 1, - "type": "integer" - }, - "page_size": { - "example": 24, + } + }, + "type": "object" + }, + "sloanreview.articleResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "products": { - "items": { - "$ref": "#/definitions/target.ProductSummary" - }, - "type": "array" - }, - "sort": { - "example": "featured", - "type": "string" + "data": { + "$ref": "#/definitions/sloanreview.ArticleResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" - }, - "store_id": { - "example": 2885, - "type": "integer" - }, - "total": { - "example": 4158, - "type": "integer" - }, - "total_pages": { - "example": 50, - "type": "integer" } }, "type": "object" }, - "target.FilterGroup": { + "sloanreview.articlesResponseDoc": { "properties": { - "display_name": { - "description": "Name of the filter group as Target shows it, such as `Deals`.", - "example": "Deals", - "type": "string" - }, - "expanded": { - "description": "Whether Target shows the group expanded.", - "type": "boolean" - }, - "id": { - "description": "Target filter group id, such as `d_deals`.", - "example": "d_deals", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "options": { - "description": "Filter options in the group.", - "items": { - "$ref": "#/definitions/target.FilterOption" - }, - "type": "array" + "data": { + "$ref": "#/definitions/sloanreview.ArticlesResponse" }, - "type": { - "description": "Kind of control Target uses for the group, such as `checkbox`.", - "example": "checkbox", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "target.FilterOption": { + "sloanreview.categoriesResponseDoc": { "properties": { - "display_name": { - "description": "Label of the option as Target shows it, such as `Clearance`.", - "example": "Clearance", - "type": "string" - }, - "id": { - "description": "Target filter option id, such as `5tdv1`.", - "example": "5tdv1", - "type": "string" - }, - "selected": { - "description": "Whether the option is currently applied.", - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "url": { - "description": "Filter reference for the option, such as `d_deals:clearance`.", - "example": "d_deals:clearance", - "type": "string" + "data": { + "$ref": "#/definitions/sloanreview.CategoriesResponse" }, - "value": { - "description": "Value of the option, such as `clearance`.", - "example": "clearance", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "target.FilterOptionsResponse": { + "sloanreview.headlinesResponseDoc": { "properties": { - "applied_filter_ids": { - "description": "Ids of the filter options currently applied.", - "items": { - "type": "string" - }, - "type": "array" - }, - "category_id": { - "description": "Target category id the filters are for. Omitted when filters were requested by search query.", - "example": "5q0ga", - "type": "string" - }, - "count": { - "description": "Number of filter groups returned.", - "example": 7, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "type": "string" - }, - "filter_groups": { - "description": "Filter groups and their options for the current result set.", - "items": { - "$ref": "#/definitions/target.FilterGroup" - }, - "type": "array" - }, - "query": { - "description": "Search query the filters are for. Omitted when filters were requested by category.", - "example": "coffee", - "type": "string" + "data": { + "$ref": "#/definitions/sloanreview.HeadlinesResponse" }, - "source_url": { - "description": "URL the data was read from.", + "msg": { + "example": "OK", "type": "string" - }, - "store_id": { - "description": "Target store id the results are for.", - "example": 2885, - "type": "integer" - }, - "total": { - "description": "Number of products in the current result set.", - "example": 4158, - "type": "integer" } }, "type": "object" }, - "target.Price": { + "sloanreview.topicResponseDoc": { "properties": { - "current": { - "example": 12.79, - "type": "number" - }, - "formatted": { - "example": "$12.79", - "type": "string" - }, - "regular": { - "example": 12.79, - "type": "number" - }, - "store_id": { - "example": 2885, + "code": { + "example": 200, "type": "integer" }, - "unit_formatted": { - "example": "$1.07/ounce", + "data": { + "$ref": "#/definitions/sloanreview.TopicResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "target.Product": { + "smh.ArticleResponse": { "properties": { - "availability": { - "$ref": "#/definitions/target.Availability" + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "brand": { - "example": "Starbucks", + "description": { "type": "string" }, - "breadcrumbs": { + "image_url": { + "type": "string" + }, + "is_accessible_for_free": { + "type": "boolean" + }, + "is_truncated": { + "type": "boolean" + }, + "keywords": { "items": { - "$ref": "#/definitions/target.Breadcrumb" + "type": "string" }, "type": "array" }, - "bullets": { + "paragraphs": { "items": { "type": "string" }, "type": "array" }, - "category": { - "example": "Ground Coffee", + "paywalled": { + "type": "boolean" + }, + "published_at": { "type": "string" }, - "category_id": { - "example": "x2hqv", + "section": { "type": "string" }, - "description": { + "title": { "type": "string" }, - "dpci": { - "example": "231-10-1932", + "updated_at": { "type": "string" }, - "images": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "smh.AuthorResponse": { + "properties": { + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/smh.HeadlineItem" }, "type": "array" }, - "item_type": { - "example": "Coffee", + "bio": { "type": "string" }, - "parent_category_id": { - "example": "4yi5p", + "email": { "type": "string" }, - "parent_tcin": { - "example": "89169599", + "image_url": { "type": "string" }, - "price": { - "$ref": "#/definitions/target.Price" - }, - "primary_image_url": { + "name": { "type": "string" }, - "rating": { - "$ref": "#/definitions/target.Rating" - }, - "specifications": { + "social_links": { "items": { "type": "string" }, "type": "array" }, - "tcin": { - "example": "12954151", - "type": "string" - }, - "title": { - "example": "Starbucks Pike Place Roast Medium Ground Coffee - 12oz", - "type": "string" - }, "url": { "type": "string" } }, "type": "object" }, - "target.ProductResponse": { - "properties": { - "fetched_at": { - "type": "string" - }, - "product": { - "$ref": "#/definitions/target.Product" - }, - "source_url": { - "type": "string" - }, - "store_id": { - "example": 2885, - "type": "integer" - } - }, - "type": "object" - }, - "target.ProductSummary": { + "smh.HeadlineItem": { "properties": { - "brand": { - "example": "Starbucks", - "type": "string" - }, - "category_id": { - "example": "x2hqv", + "author": { "type": "string" }, - "parent_category_id": { - "example": "4yi5p", + "image_url": { "type": "string" }, - "parent_tcin": { - "example": "89169599", + "published_at": { "type": "string" }, - "price": { - "$ref": "#/definitions/target.Price" - }, - "primary_image_url": { + "summary": { "type": "string" }, - "rating": { - "$ref": "#/definitions/target.Rating" - }, - "tcin": { - "example": "12954151", + "title": { "type": "string" }, - "title": { - "example": "Starbucks Pike Place Roast Medium Ground Coffee - 12oz", + "type": { "type": "string" }, "url": { @@ -227317,5156 +232262,5759 @@ }, "type": "object" }, - "target.Question": { + "sofascore.AchievementSeason": { "properties": { - "answers": { - "items": { - "$ref": "#/definitions/target.Answer" - }, - "type": "array" - }, - "author": { - "type": "string" - }, - "helpful": { + "season_id": { + "example": 3391, "type": "integer" }, - "id": { - "type": "string" - }, - "submitted_at": { - "type": "string" - }, - "text": { + "year": { + "example": "23/24", "type": "string" } }, "type": "object" }, - "target.QuestionsResponse": { + "sofascore.AveragePosition": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "page": { - "type": "integer" - }, - "per_page": { - "type": "integer" - }, - "questions": { - "items": { - "$ref": "#/definitions/target.Question" - }, - "type": "array" + "average_x": { + "example": 64.25, + "type": "number" }, - "source_url": { - "type": "string" + "average_y": { + "example": 47.8, + "type": "number" }, - "tcin": { - "type": "string" + "player": { + "$ref": "#/definitions/sofascore.PlayerBrief" }, - "total_pages": { + "points_count": { + "example": 35, "type": "integer" } }, "type": "object" }, - "target.Rating": { + "sofascore.AveragePositionSubstitution": { "properties": { - "average": { - "example": 4.51, - "type": "number" + "is_home": { + "type": "boolean" }, - "rating_count": { - "example": 1586, + "minute": { + "example": 60, "type": "integer" }, - "review_count": { - "example": 1076, - "type": "integer" + "player_in": { + "$ref": "#/definitions/sofascore.PlayerBrief" + }, + "player_out": { + "$ref": "#/definitions/sofascore.PlayerBrief" } }, "type": "object" }, - "target.Review": { + "sofascore.BaseballAtBat": { "properties": { - "author": { - "type": "string" + "away_win_probability": { + "example": 52.1, + "type": "number" }, - "helpful": { - "type": "integer" + "away_win_probability_start": { + "example": 49, + "type": "number" }, - "id": { + "end_time": { + "example": "2026-10-06T22:13:59Z", "type": "string" }, - "rating": { + "end_timestamp": { + "description": "EndTimestamp is the Unix time the at-bat finished (it matches the end of\nits last pitch); EndTime is the same instant in RFC 3339.", + "example": 1791324839, "type": "integer" }, - "submitted_at": { - "type": "string" + "hitter": { + "$ref": "#/definitions/sofascore.PlayerBrief" }, - "syndicated": { - "type": "boolean" + "hitter_team": { + "$ref": "#/definitions/sofascore.TeamRef" }, - "text": { - "type": "string" + "home_win_probability": { + "example": 47.9, + "type": "number" }, - "title": { + "home_win_probability_start": { + "description": "Win probabilities are percentages. The *Start values are before the\nat-bat, the others after it.", + "example": 51, + "type": "number" + }, + "id": { + "example": 2595879, + "type": "integer" + }, + "inning": { + "example": 1, + "type": "integer" + }, + "inning_half": { + "description": "InningHalf is `top` or `bottom`.", + "example": "top", "type": "string" }, - "verified": { - "type": "boolean" + "pitcher": { + "$ref": "#/definitions/sofascore.PlayerBrief" + }, + "pitcher_team": { + "$ref": "#/definitions/sofascore.TeamRef" } }, "type": "object" }, - "target.ReviewsResponse": { + "sofascore.BaseballFielder": { "properties": { - "count": { - "type": "integer" + "first_name": { + "example": "Frederick", + "type": "string" }, - "fetched_at": { + "jersey_number": { + "example": "5", "type": "string" }, - "page": { - "type": "integer" + "last_name": { + "example": "Freeman", + "type": "string" }, - "per_page": { + "player_id": { + "example": 961444, "type": "integer" }, - "reviews": { - "items": { - "$ref": "#/definitions/target.Review" - }, - "type": "array" + "sequence": { + "example": 1, + "type": "integer" }, - "source_url": { + "type": { + "description": "Type is the credit, for example `putout` or `assist`.", + "example": "putout", "type": "string" + } + }, + "type": "object" + }, + "sofascore.BaseballPerformer": { + "properties": { + "player": { + "$ref": "#/definitions/sofascore.PlayerBrief" }, - "tcin": { + "rating": { + "example": 0.503, + "type": "number" + }, + "role": { + "description": "Role is `pitcher` or `batter`.", + "example": "pitcher", "type": "string" }, - "total": { - "type": "integer" + "statistics": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "description": "Statistics is a snake_case metric map; its keys depend on the role.", + "type": "object" }, - "total_pages": { - "type": "integer" + "team": { + "$ref": "#/definitions/sofascore.TeamRef" } }, "type": "object" }, - "target.SearchResponse": { + "sofascore.BaseballPitch": { "properties": { - "applied_filter_ids": { - "items": { - "type": "string" - }, - "type": "array" + "at_bat_over": { + "type": "boolean" }, - "count": { - "example": 24, + "away_team_runs": { + "example": 0, "type": "integer" }, - "fetched_at": { + "balls": { + "example": 0, + "type": "integer" + }, + "bunt": { + "type": "boolean" + }, + "double_play": { + "type": "boolean" + }, + "end_time": { + "example": "2026-10-06T22:12:04Z", "type": "string" }, - "filter_groups": { + "fielders": { "items": { - "$ref": "#/definitions/target.FilterGroup" + "$ref": "#/definitions/sofascore.BaseballFielder" }, "type": "array" }, - "page": { - "example": 1, - "type": "integer" + "hit": { + "type": "boolean" }, - "page_size": { - "example": 24, - "type": "integer" + "hit_hardness": { + "example": "medium", + "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/target.ProductSummary" - }, - "type": "array" + "hit_location": { + "example": "20", + "type": "string" }, - "query": { - "example": "coffee", + "hit_trajectory": { + "example": "ground_ball", "type": "string" }, - "sort": { - "example": "relevance", + "hit_type": { + "example": "GB", "type": "string" }, - "source_url": { + "hit_x": { + "example": 164.06, + "type": "number" + }, + "hit_y": { + "example": 164.01, + "type": "number" + }, + "hitter_hand": { + "example": "R", "type": "string" }, - "store_id": { - "example": 2885, + "home_team_runs": { + "example": 0, "type": "integer" }, - "total": { - "example": 20939, + "id": { + "example": 10178342, "type": "integer" }, - "total_pages": { - "example": 50, + "inning": { + "example": 1, "type": "integer" - } - }, - "type": "object" - }, - "target.Store": { - "properties": { - "address_line1": { - "example": "20745 Stevens Creek Blvd", - "type": "string" }, - "city": { - "example": "Cupertino", + "inning_half": { + "example": "top", "type": "string" }, - "country": { - "example": "US", - "type": "string" + "mlb_x": { + "example": 137.94, + "type": "number" }, - "distance_miles": { - "example": 2.62, + "mlb_y": { + "example": 184.98, "type": "number" }, - "hours": { - "items": { - "$ref": "#/definitions/target.StoreHoursDay" - }, - "type": "array" + "mlb_zone": { + "example": 7, + "type": "integer" }, - "name": { - "example": "Cupertino De Anza Blvd", + "outcome": { + "description": "Outcome is SofaScore's result code for the pitch. Seen: `bB` ball, `kKL`\nstrike looking, `kKS` strike swinging, `kF` foul, `aS` hit into play,\n`oFO` fly out, `oLO` line out, `oGO` ground out.", + "example": "kKL", "type": "string" }, - "phone": { - "example": "408-725-2651", + "outs": { + "example": 0, + "type": "integer" + }, + "passed_ball": { + "type": "boolean" + }, + "pitch_code": { + "example": "FF", "type": "string" }, - "postal_code": { - "example": "95014-2123", + "pitch_count": { + "example": 1, + "type": "integer" + }, + "pitch_description": { + "example": "Four-Seam Fastball", "type": "string" }, - "services": { - "description": "Services is Target's own service/amenity label list for this store\n(e.g. \"Starbucks Cafe\", \"Drive Up\", \"Wine, Beer & Spirits Available\"),\npassed through as-is rather than translated to a fixed vocabulary.", + "pitch_speed": { + "description": "PitchSpeed is in kilometres per hour.", + "example": 158.04, + "type": "number" + }, + "pitch_type": { + "description": "PitchType is the short pitch-type code and PitchDescription its name,\nfor example `FA` and `Four-Seam Fastball`.", + "example": "FA", + "type": "string" + }, + "pitch_x": { + "description": "PitchX and PitchY are SofaScore's plate-location plot units. MLBX, MLBY and\nMLBZone are the league tracking location and zone as provided.", + "example": 76, + "type": "integer" + }, + "pitch_y": { + "example": -47, + "type": "integer" + }, + "pitch_zone": { + "example": 9, + "type": "integer" + }, + "pitcher_hand": { + "example": "L", + "type": "string" + }, + "runners": { "items": { - "type": "string" + "$ref": "#/definitions/sofascore.BaseballRunner" }, "type": "array" }, - "state": { - "example": "CA", - "type": "string" + "sequence": { + "example": 3, + "type": "integer" }, - "status": { - "example": "Open", + "start_time": { + "example": "2026-10-06T22:11:49Z", "type": "string" }, - "store_id": { - "example": "323", + "status": { + "example": "official", "type": "string" }, - "time_zone": { - "example": "PST", - "type": "string" - } - }, - "type": "object" - }, - "target.StoreHoursDay": { - "properties": { - "close_time": { - "example": "23:00:00", - "type": "string" + "strike_zone_bottom": { + "example": 1.563, + "type": "number" }, - "date": { - "example": "2026-09-15", - "type": "string" + "strike_zone_top": { + "example": 3.096, + "type": "number" }, - "day_name": { - "example": "Tuesday", - "type": "string" + "strikes": { + "example": 1, + "type": "integer" }, - "is_open": { + "triple_play": { "type": "boolean" }, - "open_time": { - "example": "07:00:00", + "type": { + "description": "Type is the upstream event type, `pitch` for a thrown pitch.", + "example": "pitch", "type": "string" + }, + "wild_pitch": { + "type": "boolean" } }, "type": "object" }, - "target.StoresResponse": { + "sofascore.BaseballRunner": { "properties": { - "count": { - "example": 20, + "description": { + "type": "string" + }, + "ending_base": { + "example": 1, "type": "integer" }, - "fetched_at": { + "jersey_number": { + "example": "50", "type": "string" }, - "place": { - "example": "95014", + "out": { + "type": "boolean" + }, + "outcome_code": { + "example": "AD1", "type": "string" }, - "source_url": { + "player_id": { + "example": 960736, + "type": "integer" + }, + "player_name": { + "example": "Mookie Betts", "type": "string" }, - "stores": { - "items": { - "$ref": "#/definitions/target.Store" - }, - "type": "array" + "starting_base": { + "description": "StartingBase and EndingBase are base numbers, 0 for the batter's box and\n1 to 3 for the bases.", + "example": 0, + "type": "integer" } }, "type": "object" }, - "target.categoriesResponseDoc": { + "sofascore.BestPlayer": { "properties": { - "code": { - "example": 200, - "type": "integer" + "label": { + "example": "rating", + "type": "string" }, - "data": { - "$ref": "#/definitions/target.CategoriesResponse" + "player": { + "$ref": "#/definitions/sofascore.PlayerBrief" }, - "msg": { - "example": "OK", + "team": { + "$ref": "#/definitions/sofascore.TeamRef" + }, + "value": { + "example": 9.8, + "type": "number" + }, + "value_text": { + "description": "ValueText carries the upstream value verbatim when it is not a number,\nfor example the en dash an ice hockey goalkeeper gets next to the `pts`\nlabel. It is omitted whenever Value is set.", + "example": "-", "type": "string" } }, "type": "object" }, - "target.categoryProductsResponseDoc": { + "sofascore.CategoriesResponse": { "properties": { - "code": { - "example": 200, + "categories": { + "items": { + "$ref": "#/definitions/sofascore.Category" + }, + "type": "array" + }, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/target.CategoryProductsResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { + "type": "string" + }, + "sport": { + "example": "football", "type": "string" } }, "type": "object" }, - "target.filterOptionsResponseDoc": { + "sofascore.Category": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/target.FilterOptionsResponse" + "alpha2": { + "example": "EN", + "type": "string" }, - "msg": { - "example": "OK", + "flag": { + "example": "england", "type": "string" - } - }, - "type": "object" - }, - "target.productResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/target.ProductResponse" + "id": { + "example": 1, + "type": "integer" }, - "msg": { - "example": "OK", + "name": { + "example": "England", "type": "string" - } - }, - "type": "object" - }, - "target.questionsResponseDoc": { - "properties": { - "code": { - "type": "integer" }, - "data": { - "$ref": "#/definitions/target.QuestionsResponse" + "priority": { + "example": 10, + "type": "integer" }, - "msg": { + "slug": { + "example": "england", "type": "string" } }, "type": "object" }, - "target.reviewsResponseDoc": { + "sofascore.CategoryTournament": { "properties": { - "code": { + "category_id": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/target.ReviewsResponse" - }, - "msg": { + "category_name": { + "example": "England", "type": "string" - } - }, - "type": "object" - }, - "target.searchResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "id": { + "example": 17, "type": "integer" }, - "data": { - "$ref": "#/definitions/target.SearchResponse" + "name": { + "example": "Premier League", + "type": "string" }, - "msg": { - "example": "OK", + "slug": { + "example": "premier-league", "type": "string" + }, + "user_count": { + "example": 1234567, + "type": "integer" } }, "type": "object" }, - "target.storesResponseDoc": { + "sofascore.CategoryTournamentsResponse": { "properties": { - "code": { - "example": 200, + "category_id": { "type": "integer" }, - "data": { - "$ref": "#/definitions/target.StoresResponse" - }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "tcgplayer.Facet": { - "properties": { "count": { "type": "integer" }, - "url_value": { + "fetched_at": { "type": "string" }, - "value": { + "source_url": { "type": "string" - } - }, - "type": "object" - }, - "tcgplayer.Facets": { - "properties": { - "card_types": { - "items": { - "$ref": "#/definitions/tcgplayer.Facet" - }, - "type": "array" - }, - "energy_types": { - "items": { - "$ref": "#/definitions/tcgplayer.Facet" - }, - "type": "array" - }, - "product_lines": { - "items": { - "$ref": "#/definitions/tcgplayer.Facet" - }, - "type": "array" - }, - "product_types": { - "items": { - "$ref": "#/definitions/tcgplayer.Facet" - }, - "type": "array" - }, - "rarities": { - "items": { - "$ref": "#/definitions/tcgplayer.Facet" - }, - "type": "array" }, - "sets": { + "tournaments": { "items": { - "$ref": "#/definitions/tcgplayer.Facet" + "$ref": "#/definitions/sofascore.CategoryTournament" }, "type": "array" } }, "type": "object" }, - "tcgplayer.FilterValue": { + "sofascore.CompetitionRef": { "properties": { - "abbreviation": { - "type": "string" - }, "id": { + "example": 18, "type": "integer" }, "name": { + "example": "Championship", + "type": "string" + }, + "slug": { + "example": "championship", "type": "string" } }, "type": "object" }, - "tcgplayer.FiltersResponse": { + "sofascore.Coordinates": { "properties": { - "conditions": { - "items": { - "$ref": "#/definitions/tcgplayer.FilterValue" - }, - "type": "array" - }, - "languages": { - "items": { - "$ref": "#/definitions/tcgplayer.FilterValue" - }, - "type": "array" - }, - "listing_types": { - "items": { - "type": "string" - }, - "type": "array" - }, - "product_id": { - "type": "integer" - }, - "product_line": { - "type": "string" + "x": { + "type": "number" }, - "product_line_id": { - "type": "integer" + "y": { + "type": "number" }, - "variants": { - "items": { - "$ref": "#/definitions/tcgplayer.FilterValue" - }, - "type": "array" + "z": { + "type": "number" } }, "type": "object" }, - "tcgplayer.Listing": { + "sofascore.CricketBattingLine": { "properties": { - "condition": { - "type": "string" - }, - "direct_seller": { - "type": "boolean" + "balls": { + "example": 12, + "type": "integer" }, - "gold_seller": { - "type": "boolean" + "bowler": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.PlayerBrief" + } + ], + "description": "Bowler is the bowler credited with the wicket and Fielder the catcher or\nstumper, when SofaScore lists them." }, - "language": { + "dismissal": { + "description": "Dismissal is SofaScore's status text: a dismissal such as `Caught`,\n`Bowled`, `LBW`, `Stumped` or `Hit wicket`, `Not out`, or `Did not bat`.", + "example": "Caught", "type": "string" }, - "listing_id": { + "dismissal_code": { + "example": 3, "type": "integer" }, - "listing_type": { - "type": "string" - }, - "price": { + "fall_of_wicket_over": { + "example": 3.4, "type": "number" }, - "printing": { - "type": "string" - }, - "quantity": { + "fall_of_wicket_score": { + "description": "FallOfWicketScore and FallOfWicketOver give the team score and over when\nthis batter was dismissed; omitted for batters who were not dismissed.", + "example": 26, "type": "integer" }, - "seller_city": { - "type": "string" - }, - "seller_country": { - "type": "string" + "fielder": { + "$ref": "#/definitions/sofascore.PlayerBrief" }, - "seller_name": { - "type": "string" + "fours": { + "example": 2, + "type": "integer" }, - "seller_rating": { - "type": "number" + "player": { + "$ref": "#/definitions/sofascore.PlayerBrief" }, - "seller_sales": { - "type": "string" + "runs": { + "example": 12, + "type": "integer" }, - "seller_state": { + "scorecard_name": { + "description": "ScorecardName is the short name as printed on the scorecard.", + "example": "S Sudharsan", "type": "string" }, - "shipping_price": { - "type": "number" - }, - "verified_seller": { - "type": "boolean" + "sixes": { + "example": 0, + "type": "integer" } }, "type": "object" }, - "tcgplayer.ListingFacets": { + "sofascore.CricketBowlingLine": { "properties": { - "conditions": { - "items": { - "$ref": "#/definitions/tcgplayer.Facet" - }, - "type": "array" + "maidens": { + "example": 0, + "type": "integer" }, - "languages": { - "items": { - "$ref": "#/definitions/tcgplayer.Facet" - }, - "type": "array" + "no_balls": { + "example": 0, + "type": "integer" }, - "printings": { - "items": { - "$ref": "#/definitions/tcgplayer.Facet" - }, - "type": "array" + "overs": { + "description": "Overs uses cricket notation: 3.4 is three overs and four balls.", + "example": 4, + "type": "number" + }, + "player": { + "$ref": "#/definitions/sofascore.PlayerBrief" + }, + "runs": { + "example": 38, + "type": "integer" + }, + "scorecard_name": { + "example": "J Duffy", + "type": "string" + }, + "wickets": { + "example": 0, + "type": "integer" + }, + "wides": { + "example": 3, + "type": "integer" } }, "type": "object" }, - "tcgplayer.ListingsResponse": { + "sofascore.CricketExtras": { "properties": { - "facets": { - "$ref": "#/definitions/tcgplayer.ListingFacets" - }, - "limit": { + "byes": { + "example": 0, "type": "integer" }, - "listings": { - "items": { - "$ref": "#/definitions/tcgplayer.Listing" - }, - "type": "array" - }, - "next_offset": { + "leg_byes": { + "example": 1, "type": "integer" }, - "offset": { + "no_balls": { + "example": 0, "type": "integer" }, - "product_id": { + "penalty": { + "example": 0, "type": "integer" }, "total": { + "example": 5, + "type": "integer" + }, + "wides": { + "example": 4, "type": "integer" } }, "type": "object" }, - "tcgplayer.PriceBucket": { + "sofascore.CricketFallOfWicket": { "properties": { - "high_sale_price": { - "type": "number" - }, - "high_sale_price_with_shipping": { - "type": "number" - }, - "low_sale_price": { - "type": "number" - }, - "low_sale_price_with_shipping": { + "over": { + "example": 2.2, "type": "number" }, - "market_price": { - "type": "number" + "player": { + "$ref": "#/definitions/sofascore.PlayerBrief" }, - "quantity_sold": { + "score": { + "example": 22, "type": "integer" }, - "start_date": { - "type": "string" - }, - "transaction_count": { + "wicket": { + "example": 1, "type": "integer" } }, "type": "object" }, - "tcgplayer.PriceGuideResponse": { + "sofascore.CricketInnings": { "properties": { - "game": { - "type": "string" + "batting": { + "items": { + "$ref": "#/definitions/sofascore.CricketBattingLine" + }, + "type": "array" }, - "limit": { - "type": "integer" + "batting_team": { + "$ref": "#/definitions/sofascore.TeamRef" }, - "next_offset": { - "type": "integer" + "bowling": { + "items": { + "$ref": "#/definitions/sofascore.CricketBowlingLine" + }, + "type": "array" }, - "offset": { - "type": "integer" + "bowling_team": { + "$ref": "#/definitions/sofascore.TeamRef" }, - "rows": { + "extras": { + "$ref": "#/definitions/sofascore.CricketExtras" + }, + "fall_of_wickets": { + "description": "FallOfWickets is derived from the batting lines that carry a fall-of-wicket\nscore, ordered by team score and then over, and numbered from 1.", "items": { - "$ref": "#/definitions/tcgplayer.PriceGuideRow" + "$ref": "#/definitions/sofascore.CricketFallOfWicket" }, "type": "array" }, - "set_abbreviation": { - "type": "string" + "id": { + "example": 82607, + "type": "integer" }, - "set_id": { + "number": { + "example": 1, "type": "integer" }, - "set_name": { - "type": "string" + "overs": { + "description": "Overs uses cricket notation: 18.4 is eighteen overs and four balls.", + "example": 20, + "type": "number" }, - "total": { + "partnerships": { + "items": { + "$ref": "#/definitions/sofascore.CricketPartnership" + }, + "type": "array" + }, + "runs": { + "example": 155, + "type": "integer" + }, + "wickets": { + "example": 8, "type": "integer" } }, "type": "object" }, - "tcgplayer.PriceGuideRow": { + "sofascore.CricketPartnership": { "properties": { - "condition": { - "type": "string" - }, - "language": { - "type": "string" - }, - "low_price": { - "type": "number" - }, - "market_price": { - "type": "number" - }, - "name": { - "type": "string" + "balls": { + "example": 14, + "type": "integer" }, "number": { - "type": "string" - }, - "printing": { - "type": "string" - }, - "product_id": { + "description": "Number is the partnership's position in the innings, starting at 1.", + "example": 1, "type": "integer" }, - "rarity": { - "type": "string" + "player1": { + "$ref": "#/definitions/sofascore.PlayerBrief" }, - "sales": { + "player2": { + "$ref": "#/definitions/sofascore.PlayerBrief" + }, + "runs": { + "example": 22, "type": "integer" } }, "type": "object" }, - "tcgplayer.PriceHistoryResponse": { + "sofascore.CupTree": { "properties": { - "product_id": { + "current_round": { + "example": 5, "type": "integer" }, - "range": { + "final_match": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.CupTreeBlock" + } + ], + "description": "FinalMatch is the final tie, repeated from the last round. It is omitted\nwhen the tree has no final yet (a qualifying tree)." + }, + "id": { + "example": 10850333, + "type": "integer" + }, + "name": { + "example": "UEFA Champions League 25/26, Knockout stage", "type": "string" }, - "skus": { + "rounds": { "items": { - "$ref": "#/definitions/tcgplayer.SKUHistory" + "$ref": "#/definitions/sofascore.CupTreeRound" }, "type": "array" - } - }, - "type": "object" - }, - "tcgplayer.PricePoint": { - "properties": { - "buylist_market_price": { - "type": "number" - }, - "listed_median_price": { - "type": "number" }, - "market_price": { - "type": "number" + "third_place_match": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.CupTreeBlock" + } + ], + "description": "ThirdPlaceMatch is the third-place tie, when the competition plays one." }, - "printing": { + "tournament_name": { + "example": "UEFA Champions League, Knockout stage", "type": "string" } }, "type": "object" }, - "tcgplayer.Product": { + "sofascore.CupTreeBlock": { "properties": { - "attributes": { - "additionalProperties": { - "type": "string" - }, - "type": "object" - }, - "description": { - "type": "string" - }, - "foil_only": { - "type": "boolean" - }, - "image_url": { - "type": "string" - }, - "lowest_price": { - "type": "number" - }, - "lowest_price_with_shipping": { - "type": "number" - }, - "market_price": { - "type": "number" - }, - "median_price": { - "type": "number" - }, - "name": { + "away_score": { + "example": "1 (3)", "type": "string" }, - "normal_only": { - "type": "boolean" - }, - "number": { - "type": "string" + "block_id": { + "description": "BlockID is the identifier later blocks cite as source_block_id.", + "example": 2536336, + "type": "integer" }, - "price_points": { + "event_ids": { + "description": "EventIDs are the match ids of the tie; fetch each with the event endpoint.", "items": { - "$ref": "#/definitions/tcgplayer.PricePoint" + "type": "integer" }, "type": "array" }, - "product_id": { - "type": "integer" - }, - "product_line": { - "type": "string" - }, - "product_line_url_name": { - "type": "string" + "finished": { + "type": "boolean" }, - "product_type": { + "home_score": { + "description": "HomeScore and AwayScore are the scores of the participants with order 1\nand 2. They are strings because a shoot-out is appended (\"1 (4)\").", + "example": "1 (4)", "type": "string" }, - "rarity": { - "type": "string" + "id": { + "example": 2946978, + "type": "integer" }, - "sealed": { + "in_progress": { + "description": "InProgress is true while a match of the tie is being played.", "type": "boolean" }, - "set_code": { - "type": "string" + "matches": { + "description": "Matches is the scheduled length of the tie: 1 for a single match, 2 for a\ntwo-legged tie, 7 for a best-of-seven series (whether or not all seven\nwere needed), 0 for a bye.", + "example": 2, + "type": "integer" }, - "set_name": { - "type": "string" + "order": { + "example": 2, + "type": "integer" }, - "skus": { + "participants": { "items": { - "$ref": "#/definitions/tcgplayer.SKU" + "$ref": "#/definitions/sofascore.CupTreeParticipant" }, "type": "array" }, - "total_listings": { - "type": "integer" + "result": { + "description": "Result is the tie result as published (\"4:5\", or a text such as \"Retired\").", + "example": "4:5", + "type": "string" }, - "total_sellers": { + "series_start_time": { + "example": "2026-02-17T20:00:00Z", + "type": "string" + }, + "series_start_timestamp": { "type": "integer" }, - "url": { - "type": "string" + "venue": { + "$ref": "#/definitions/sofascore.Venue" } }, "type": "object" }, - "tcgplayer.ProductLine": { + "sofascore.CupTreeParticipant": { "properties": { - "direct": { - "type": "boolean" - }, - "id": { + "order": { + "description": "Order is the side's position in the block; the block's home_score\nbelongs to order 1 and away_score to order 2.", + "example": 1, "type": "integer" }, - "name": { + "seed": { + "description": "Seed is the draw seed or entry label (\"1\", \"WC\" for a wild card), when published.", + "example": "WC", "type": "string" }, - "url_name": { - "type": "string" + "source_block_id": { + "description": "SourceBlockID is the block_id of the earlier block this side advanced from.", + "type": "integer" + }, + "team": { + "$ref": "#/definitions/sofascore.TeamRef" + }, + "winner": { + "type": "boolean" } }, "type": "object" }, - "tcgplayer.ProductLinesResponse": { + "sofascore.CupTreeRound": { "properties": { - "product_lines": { + "blocks": { "items": { - "$ref": "#/definitions/tcgplayer.ProductLine" + "$ref": "#/definitions/sofascore.CupTreeBlock" }, "type": "array" + }, + "description": { + "example": "Quarterfinal", + "type": "string" + }, + "id": { + "type": "integer" + }, + "order": { + "example": 1, + "type": "integer" + }, + "round_type": { + "description": "RoundType is the upstream round code: the number of ties for the\nstandard knockout rounds (8 round of 16, 4 quarterfinals, 2 semifinals,\n1 final) and other codes (0, 101 to 105, 201 to 202) for named rounds.", + "example": 4, + "type": "integer" } }, "type": "object" }, - "tcgplayer.ProductResponse": { - "properties": { - "product": { - "$ref": "#/definitions/tcgplayer.Product" - } - }, - "type": "object" - }, - "tcgplayer.ProductSummary": { + "sofascore.DraftInfo": { "properties": { - "card_types": { - "items": { - "type": "string" - }, - "type": "array" - }, - "foil_only": { - "type": "boolean" - }, - "image_url": { + "end_time": { "type": "string" }, - "lowest_price": { - "type": "number" - }, - "lowest_price_with_shipping": { - "type": "number" - }, - "market_price": { - "type": "number" + "end_timestamp": { + "type": "integer" }, - "median_price": { - "type": "number" + "is_lottery_complete": { + "type": "boolean" }, - "name": { - "type": "string" + "rounds": { + "example": [ + 1, + 2 + ], + "items": { + "type": "integer" + }, + "type": "array" }, - "number": { + "start_time": { + "example": "2026-06-23T00:00:00Z", "type": "string" }, - "product_id": { + "start_timestamp": { "type": "integer" }, - "product_line": { - "type": "string" - }, - "rarity": { + "status": { + "example": "closed", "type": "string" }, - "sealed": { - "type": "boolean" + "year": { + "example": 2026, + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.DraftPick": { + "properties": { + "overall_pick": { + "example": 1, + "type": "integer" }, - "set_code": { - "type": "string" + "pick_in_round": { + "example": 1, + "type": "integer" }, - "set_name": { - "type": "string" + "prospect": { + "$ref": "#/definitions/sofascore.DraftProspect" }, - "total_listings": { + "round": { + "example": 1, "type": "integer" }, - "url": { - "type": "string" + "team": { + "$ref": "#/definitions/sofascore.TeamRef" } }, "type": "object" }, - "tcgplayer.SKU": { + "sofascore.DraftPicksResponse": { "properties": { - "condition": { + "count": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "language": { + "league": { + "example": "nba", "type": "string" }, - "sku": { + "picks": { + "items": { + "$ref": "#/definitions/sofascore.DraftPick" + }, + "type": "array" + }, + "round": { + "example": 1, "type": "integer" }, - "variant": { + "source_url": { "type": "string" + }, + "teams_without_round_pick": { + "items": { + "$ref": "#/definitions/sofascore.TeamRef" + }, + "type": "array" + }, + "year": { + "example": 2025, + "type": "integer" } }, "type": "object" }, - "tcgplayer.SKUHistory": { + "sofascore.DraftProspect": { "properties": { - "average_daily_quantity_sold": { - "type": "number" - }, - "average_daily_transaction_count": { - "type": "number" + "first_name": { + "type": "string" }, - "buckets": { - "items": { - "$ref": "#/definitions/tcgplayer.PriceBucket" - }, - "type": "array" + "is_top_prospect": { + "type": "boolean" }, - "condition": { + "last_name": { "type": "string" }, - "language": { + "name": { + "example": "Cooper Flagg", "type": "string" }, - "sku": { - "type": "integer" + "player": { + "$ref": "#/definitions/sofascore.PlayerBrief" }, - "total_quantity_sold": { - "type": "integer" + "position": { + "example": "GF", + "type": "string" }, - "total_transaction_count": { - "type": "integer" + "school": { + "$ref": "#/definitions/sofascore.TeamRef" }, - "variant": { + "school_name": { + "example": "Duke", "type": "string" } }, "type": "object" }, - "tcgplayer.Sale": { + "sofascore.DraftResponse": { "properties": { - "condition": { - "type": "string" + "draft": { + "$ref": "#/definitions/sofascore.DraftInfo" }, - "language": { + "fetched_at": { "type": "string" }, - "listing_type": { - "type": "string" + "has_lottery_draw": { + "type": "boolean" }, - "order_date": { + "league": { + "example": "nba", "type": "string" }, - "purchase_price": { - "type": "number" + "lottery_year": { + "example": 2026, + "type": "integer" }, - "quantity": { + "previous_draft": { + "$ref": "#/definitions/sofascore.DraftInfo" + }, + "prospects_year": { + "example": 2026, "type": "integer" }, - "shipping_price": { - "type": "number" + "season": { + "example": 80229, + "type": "integer" }, - "variant": { + "source_url": { "type": "string" } }, "type": "object" }, - "tcgplayer.SalesResponse": { + "sofascore.EsportsCharacter": { "properties": { - "product_id": { + "id": { + "example": 1638, "type": "integer" }, - "sales": { - "items": { - "$ref": "#/definitions/tcgplayer.Sale" - }, - "type": "array" + "name": { + "example": "Witch Doctor", + "type": "string" + }, + "slug": { + "example": "witch-doctor", + "type": "string" } }, "type": "object" }, - "tcgplayer.SearchResponse": { + "sofascore.EsportsGame": { "properties": { - "facets": { - "$ref": "#/definitions/tcgplayer.Facets" + "away_score": { + "$ref": "#/definitions/sofascore.EsportsGameScore" }, - "limit": { - "type": "integer" + "has_complete_statistics": { + "description": "HasCompleteStatistics reports whether the per-game statistics, lineups\nand bans are complete.", + "type": "boolean" }, - "next_offset": { - "type": "integer" + "home_score": { + "$ref": "#/definitions/sofascore.EsportsGameScore" }, - "offset": { + "home_team_starting_side_code": { + "description": "HomeTeamStartingSideCode is SofaScore's code for the side the home team\nstarted on. In Counter-Strike 4 is terrorist and 5 is counter-terrorist.", + "example": 5, "type": "integer" }, - "products": { - "items": { - "$ref": "#/definitions/tcgplayer.ProductSummary" - }, - "type": "array" - }, - "query": { - "type": "string" - }, - "total": { + "id": { + "example": 588883, "type": "integer" - } - }, - "type": "object" - }, - "tcgplayer.Set": { - "properties": { - "abbreviation": { - "type": "string" }, - "id": { + "length_seconds": { + "description": "LengthSeconds is the game length; omitted while the game is running.", + "example": 2543, "type": "integer" }, - "name": { - "type": "string" + "map": { + "$ref": "#/definitions/sofascore.EsportsGameMap" }, - "release_date": { + "start_time": { + "example": "2026-10-04T14:23:29Z", "type": "string" }, - "supplemental": { - "type": "boolean" + "start_timestamp": { + "type": "integer" }, - "url_name": { - "type": "string" + "status": { + "$ref": "#/definitions/sofascore.EventStatus" + }, + "winner_code": { + "description": "WinnerCode is 1 for the home side, 2 for the away side, 0 until decided.", + "example": 1, + "type": "integer" } }, "type": "object" }, - "tcgplayer.SetsResponse": { + "sofascore.EsportsGameBans": { "properties": { - "product_line": { - "type": "string" + "away": { + "items": { + "$ref": "#/definitions/sofascore.EsportsCharacter" + }, + "type": "array" }, - "sets": { + "home": { "items": { - "$ref": "#/definitions/tcgplayer.Set" + "$ref": "#/definitions/sofascore.EsportsCharacter" }, "type": "array" } }, "type": "object" }, - "tcgplayer.filtersResponseDoc": { + "sofascore.EsportsGameLineups": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/tcgplayer.FiltersResponse" + "away_players": { + "items": { + "$ref": "#/definitions/sofascore.EsportsPlayerLine" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "home_players": { + "items": { + "$ref": "#/definitions/sofascore.EsportsPlayerLine" + }, + "type": "array" } }, "type": "object" }, - "tcgplayer.listingsResponseDoc": { + "sofascore.EsportsGameMap": { "properties": { - "code": { - "example": 200, + "id": { + "example": 23, "type": "integer" }, - "data": { - "$ref": "#/definitions/tcgplayer.ListingsResponse" - }, - "msg": { - "example": "OK", + "name": { + "example": "Ancient", "type": "string" } }, "type": "object" }, - "tcgplayer.priceGuideResponseDoc": { + "sofascore.EsportsGameResponse": { "properties": { - "code": { - "example": 200, + "bans": { + "$ref": "#/definitions/sofascore.EsportsGameBans" + }, + "fetched_at": { + "type": "string" + }, + "game_id": { + "example": 588883, "type": "integer" }, - "data": { - "$ref": "#/definitions/tcgplayer.PriceGuideResponse" + "lineups": { + "$ref": "#/definitions/sofascore.EsportsGameLineups" }, - "msg": { - "example": "OK", + "part": { + "example": "lineups", "type": "string" - } - }, - "type": "object" - }, - "tcgplayer.priceHistoryResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/tcgplayer.PriceHistoryResponse" + "rounds": { + "$ref": "#/definitions/sofascore.EsportsGameRounds" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" + }, + "statistics": { + "$ref": "#/definitions/sofascore.EsportsGameStatistics" } }, "type": "object" }, - "tcgplayer.productLinesResponseDoc": { + "sofascore.EsportsGameRounds": { "properties": { - "code": { - "example": 200, - "type": "integer" + "normaltime": { + "items": { + "$ref": "#/definitions/sofascore.EsportsRound" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/tcgplayer.ProductLinesResponse" + "overtime": { + "items": { + "$ref": "#/definitions/sofascore.EsportsRound" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "overtime_chunk_size": { + "example": 3, + "type": "integer" + }, + "rounds_in_a_half": { + "example": 12, + "type": "integer" } }, "type": "object" }, - "tcgplayer.productResponseDoc": { + "sofascore.EsportsGameScore": { "properties": { - "code": { - "example": 200, + "display": { + "description": "Display is the headline score: kills in Dota 2 and League of Legends,\nrounds won in Counter-Strike.", + "example": 31, "type": "integer" }, - "data": { - "$ref": "#/definitions/tcgplayer.ProductResponse" + "overtime": { + "example": 3, + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "period1": { + "example": 4, + "type": "integer" + }, + "period2": { + "example": 3, + "type": "integer" } }, "type": "object" }, - "tcgplayer.salesResponseDoc": { + "sofascore.EsportsGameStatistics": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/tcgplayer.SalesResponse" + "away": { + "$ref": "#/definitions/sofascore.EsportsTeamStatistics" }, - "msg": { - "example": "OK", - "type": "string" + "home": { + "$ref": "#/definitions/sofascore.EsportsTeamStatistics" } }, "type": "object" }, - "tcgplayer.searchResponseDoc": { + "sofascore.EsportsPlayerLine": { "properties": { - "code": { - "example": 200, - "type": "integer" + "character": { + "$ref": "#/definitions/sofascore.EsportsCharacter" }, - "data": { - "$ref": "#/definitions/tcgplayer.SearchResponse" + "flags": { + "additionalProperties": { + "type": "boolean" + }, + "type": "object" }, - "msg": { - "example": "OK", + "player": { + "$ref": "#/definitions/sofascore.PlayerBrief" + }, + "role": { + "example": "mid", "type": "string" + }, + "statistics": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "type": "object" } }, "type": "object" }, - "tcgplayer.setsResponseDoc": { + "sofascore.EsportsRound": { "properties": { - "code": { - "example": 200, - "type": "integer" + "home_team_side": { + "example": "counter_terrorist", + "type": "string" }, - "data": { - "$ref": "#/definitions/tcgplayer.SetsResponse" + "home_team_side_code": { + "description": "HomeTeamSideCode is the side the home team played this round: 4 is\nterrorist and 5 is counter-terrorist; HomeTeamSide names it.", + "example": 5, + "type": "integer" }, - "msg": { - "example": "OK", + "outcome": { + "example": "bomb_defused", "type": "string" + }, + "outcome_code": { + "description": "OutcomeCode is SofaScore's round-result code. In Counter-Strike 0 is an\nelimination, 1 a defused bomb, 2 an exploded bomb and 3 a round lost on\ntime; Outcome names it.", + "example": 1, + "type": "integer" + }, + "winner_code": { + "description": "WinnerCode is 1 for the home side and 2 for the away side.", + "example": 1, + "type": "integer" } }, "type": "object" }, - "techcrunch.AuthorArticle": { + "sofascore.EsportsTeamStatistics": { "properties": { - "category": { - "type": "string" - }, - "title": { - "type": "string" + "flags": { + "additionalProperties": { + "type": "boolean" + }, + "type": "object" }, - "url": { - "type": "string" + "statistics": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "type": "object" } }, "type": "object" }, - "techcrunch.AuthorResponse": { + "sofascore.EventAtBatPitchesResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/techcrunch.AuthorArticle" - }, - "type": "array" + "at_bat_id": { + "example": 2595879, + "type": "integer" }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "count": { + "type": "integer" }, - "headshot_url": { - "type": "string" + "event_id": { + "example": 17199139, + "type": "integer" }, - "job_title": { + "fetched_at": { "type": "string" }, - "name": { - "type": "string" + "hitter": { + "$ref": "#/definitions/sofascore.PlayerBrief" }, - "page": { - "type": "integer" + "pitcher": { + "$ref": "#/definitions/sofascore.PlayerBrief" }, - "social_links": { - "additionalProperties": { - "type": "string" + "pitches": { + "items": { + "$ref": "#/definitions/sofascore.BaseballPitch" }, - "type": "object" + "type": "array" }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "techradar.AuthorResponse": { + "sofascore.EventAtBatsResponse": { "properties": { - "articles": { + "at_bats": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/sofascore.BaseballAtBat" }, "type": "array" }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "count": { + "type": "integer" }, - "has_next_page": { - "type": "boolean" + "event_id": { + "example": 17199139, + "type": "integer" }, - "job_title": { + "fetched_at": { "type": "string" }, - "name": { + "source_url": { "type": "string" + } + }, + "type": "object" + }, + "sofascore.EventAveragePositionsResponse": { + "properties": { + "away": { + "items": { + "$ref": "#/definitions/sofascore.AveragePosition" + }, + "type": "array" }, - "page": { + "event_id": { + "example": 16363867, "type": "integer" }, - "slug": { + "fetched_at": { "type": "string" }, - "social_links": { + "home": { "items": { - "$ref": "#/definitions/techradar.AuthorSocialLink" + "$ref": "#/definitions/sofascore.AveragePosition" }, "type": "array" }, - "url": { + "source_url": { "type": "string" + }, + "substitutions": { + "items": { + "$ref": "#/definitions/sofascore.AveragePositionSubstitution" + }, + "type": "array" } }, "type": "object" }, - "techradar.AuthorSocialLink": { + "sofascore.EventBaseballTopPerformersResponse": { "properties": { - "platform": { + "event_id": { + "example": 17199139, + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "url": { + "performers": { + "items": { + "$ref": "#/definitions/sofascore.BaseballPerformer" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "techstack.Technology": { + "sofascore.EventBestPlayersResponse": { "properties": { - "categories": { + "away_players": { "items": { - "type": "string" + "$ref": "#/definitions/sofascore.BestPlayer" }, "type": "array" }, - "confidence": { - "description": "high | medium | low", - "type": "string" - }, - "evidence": { - "description": "Evidence is a short, human-readable hint of what matched (e.g. a script\nhost or a value) — not the full markup.", - "type": "string" + "event_id": { + "example": 16363867, + "type": "integer" }, - "name": { + "fetched_at": { "type": "string" }, - "version": { - "type": "string" - } - }, - "type": "object" - }, - "techstack.UnmatchedEvidence": { - "properties": { - "domains": { + "home_players": { "items": { - "type": "string" + "$ref": "#/definitions/sofascore.BestPlayer" }, "type": "array" }, - "generator": { + "player_of_the_match": { + "$ref": "#/definitions/sofascore.BestPlayer" + }, + "source_url": { "type": "string" + }, + "top_players": { + "items": { + "$ref": "#/definitions/sofascore.BestPlayer" + }, + "type": "array" } }, "type": "object" }, - "telegram.BotResponse": { + "sofascore.EventComment": { "properties": { - "avatar_url": { - "type": "string" + "assist": { + "$ref": "#/definitions/sofascore.PlayerBrief" }, - "description": { + "away_score": { + "type": "integer" + }, + "goal_type": { "type": "string" }, - "monthly_users": { + "home_score": { "type": "integer" }, - "name": { - "type": "string" + "id": { + "type": "integer" }, - "url": { + "is_home": { + "type": "boolean" + }, + "minute": { + "example": 94, + "type": "integer" + }, + "penalty_drawn_by": { + "$ref": "#/definitions/sofascore.PlayerBrief" + }, + "period": { + "example": "2ND", "type": "string" }, - "username": { + "player": { + "$ref": "#/definitions/sofascore.PlayerBrief" + }, + "player_in": { + "$ref": "#/definitions/sofascore.PlayerBrief" + }, + "player_out": { + "$ref": "#/definitions/sofascore.PlayerBrief" + }, + "text": { + "example": "Attempt saved. Malick Fofana (Sunderland) right footed shot.", "type": "string" }, - "verified": { - "type": "boolean" + "time_seconds": { + "type": "integer" + }, + "type": { + "example": "shotSaved", + "type": "string" } }, "type": "object" }, - "telegram.ChannelPostsResponse": { + "sofascore.EventCommentsResponse": { "properties": { - "has_more": { - "type": "boolean" - }, - "next_before": { - "type": "integer" - }, - "posts": { + "comments": { "items": { - "$ref": "#/definitions/telegram.Post" + "$ref": "#/definitions/sofascore.EventComment" }, "type": "array" }, - "query": { - "type": "string" + "count": { + "type": "integer" }, - "title": { + "event_id": { + "example": 16363867, + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "username": { + "source_url": { "type": "string" } }, "type": "object" }, - "telegram.ChannelResponse": { + "sofascore.EventDetail": { "properties": { - "avatar_url": { - "type": "string" - }, - "description": { - "type": "string" - }, - "files_count": { + "attendance": { + "description": "Reported attendance.", "type": "integer" }, - "links_count": { - "type": "integer" + "away_score": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.ScoreLine" + } + ], + "description": "Away side's score, when available." }, - "photos_count": { - "type": "integer" + "away_team": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TeamRef" + } + ], + "description": "Away side." }, - "preview_url": { - "type": "string" + "home_score": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.ScoreLine" + } + ], + "description": "Home side's score, when available." }, - "subscribers": { + "home_team": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TeamRef" + } + ], + "description": "Home side." + }, + "id": { + "description": "SofaScore event id. Use it with the event endpoints.", + "example": 14025013, "type": "integer" }, - "subscribers_approximate": { - "type": "boolean" + "referee": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.Referee" + } + ], + "description": "Match referee. Omitted when SofaScore has none for it." }, - "title": { + "slug": { + "description": "URL slug of the match on SofaScore.", "type": "string" }, - "url": { + "start_time": { + "description": "Start time in UTC (RFC 3339).", + "example": "2025-08-15T19:00:00Z", "type": "string" }, - "username": { - "type": "string" + "start_timestamp": { + "description": "Start time as a Unix timestamp in seconds.", + "type": "integer" }, - "verified": { - "type": "boolean" + "status": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.EventStatus" + } + ], + "description": "Current status of the match." }, - "videos_count": { + "tournament": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TournamentRef" + } + ], + "description": "Tournament and parent competition the match belongs to." + }, + "venue": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.Venue" + } + ], + "description": "Venue of the match. Omitted when SofaScore has none for it." + }, + "winner_code": { + "description": "Result code: 1 when the home side won, 2 when the away side won, 3 for a draw. Omitted until the match is decided.", "type": "integer" } }, "type": "object" }, - "telegram.ForwardedRef": { + "sofascore.EventEsportsGamesResponse": { "properties": { - "name": { + "count": { + "type": "integer" + }, + "event_id": { + "example": 17260338, + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "url": { + "games": { + "items": { + "$ref": "#/definitions/sofascore.EsportsGame" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "telegram.GroupResponse": { + "sofascore.EventGraphResponse": { "properties": { - "avatar_url": { - "type": "string" - }, - "description": { - "type": "string" - }, - "members": { + "count": { "type": "integer" }, - "online": { + "event_id": { + "example": 16363867, "type": "integer" }, - "title": { + "fetched_at": { "type": "string" }, - "url": { - "type": "string" + "overtime_count": { + "type": "integer" }, - "username": { - "type": "string" - } - }, - "type": "object" - }, - "telegram.LinkPreview": { - "properties": { - "description": { - "type": "string" + "overtime_length": { + "example": 15, + "type": "integer" }, - "image_url": { - "type": "string" + "period_count": { + "example": 2, + "type": "integer" }, - "site_name": { - "type": "string" + "period_time": { + "example": 45, + "type": "integer" }, - "title": { - "type": "string" + "points": { + "items": { + "$ref": "#/definitions/sofascore.GraphPoint" + }, + "type": "array" }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "telegram.Media": { + "sofascore.EventH2HResponse": { "properties": { - "thumbnail_url": { - "type": "string" + "event_id": { + "description": "SofaScore event id the record belongs to.", + "type": "integer" }, - "type": { + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", "type": "string" }, - "url": { + "manager_duel": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TeamDuel" + } + ], + "description": "Record between the two managers. Omitted when SofaScore has no history for them." + }, + "source_url": { + "description": "SofaScore URL the data was read from.", "type": "string" + }, + "team_duel": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TeamDuel" + } + ], + "description": "All-time record between the two teams." } }, "type": "object" }, - "telegram.Post": { + "sofascore.EventHighlight": { "properties": { - "author": { + "created_at": { + "example": "2026-09-20T22:08:35Z", "type": "string" }, - "edited": { - "type": "boolean" - }, - "forwarded_from": { - "$ref": "#/definitions/telegram.ForwardedRef" - }, - "id": { + "created_timestamp": { "type": "integer" }, - "link_preview": { - "$ref": "#/definitions/telegram.LinkPreview" - }, - "links": { + "for_countries": { + "example": [ + "BA", + "HR" + ], "items": { "type": "string" }, "type": "array" }, - "media": { - "items": { - "$ref": "#/definitions/telegram.Media" - }, - "type": "array" + "id": { + "example": 8084695, + "type": "integer" }, - "published_at": { - "type": "string" + "key_highlight": { + "type": "boolean" }, - "reactions": { - "items": { - "$ref": "#/definitions/telegram.Reaction" - }, - "type": "array" + "livestream": { + "type": "boolean" }, - "reply_to": { - "$ref": "#/definitions/telegram.ReplyRef" + "media_type_code": { + "example": 6, + "type": "integer" }, - "text": { + "subtitle": { + "example": "Full Highlights", "type": "string" }, - "url": { + "thumbnail_url": { "type": "string" }, - "username": { + "title": { + "example": "Man City 5 - 3 Sunderland", "type": "string" }, - "views": { - "type": "integer" - } - }, - "type": "object" - }, - "telegram.PostResponse": { - "properties": { - "post": { - "$ref": "#/definitions/telegram.Post" + "url": { + "example": "https://www.youtube.com/watch?v=bniBAK1Idog", + "type": "string" } }, "type": "object" }, - "telegram.Reaction": { + "sofascore.EventHighlightsResponse": { "properties": { "count": { "type": "integer" }, - "custom_emoji_id": { - "type": "string" + "event_id": { + "example": 16363867, + "type": "integer" }, - "emoji": { + "fetched_at": { "type": "string" }, - "paid": { - "type": "boolean" + "highlights": { + "items": { + "$ref": "#/definitions/sofascore.EventHighlight" + }, + "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "telegram.ReplyRef": { + "sofascore.EventIncidentsResponse": { "properties": { - "author": { - "type": "string" + "count": { + "description": "Number of incidents returned.", + "type": "integer" }, - "id": { + "event_id": { + "description": "SofaScore event (match) id that was requested.", "type": "integer" }, - "text": { + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", "type": "string" }, - "url": { + "incidents": { + "description": "Match timeline of goals, cards, substitutions and period markers.", + "items": { + "$ref": "#/definitions/sofascore.Incident" + }, + "type": "array" + }, + "source_url": { + "description": "URL the data was read from.", "type": "string" } }, "type": "object" }, - "telegram.botResponseDoc": { + "sofascore.EventInningsResponse": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/telegram.BotResponse" + "event_id": { + "example": 16253632, + "type": "integer" }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "telegram.channelPostsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/telegram.ChannelPostsResponse" + "innings": { + "items": { + "$ref": "#/definitions/sofascore.CricketInnings" + }, + "type": "array" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" } }, "type": "object" }, - "telegram.channelResponseDoc": { + "sofascore.EventLineupsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "away": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TeamLineup" + } + ], + "description": "Away side's lineup." }, - "data": { - "$ref": "#/definitions/telegram.ChannelResponse" + "confirmed": { + "description": "True for the official confirmed lineups, false while they are still predicted.", + "type": "boolean" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "telegram.groupResponseDoc": { - "properties": { - "code": { - "example": 200, + "event_id": { + "description": "SofaScore event id the lineups belong to.", "type": "integer" }, - "data": { - "$ref": "#/definitions/telegram.GroupResponse" + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "type": "string" }, - "msg": { - "example": "OK", + "home": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TeamLineup" + } + ], + "description": "Home side's lineup." + }, + "source_url": { + "description": "SofaScore URL the data was read from.", "type": "string" } }, "type": "object" }, - "telegram.postResponseDoc": { + "sofascore.EventManagersResponse": { "properties": { - "code": { - "example": 200, + "away": { + "$ref": "#/definitions/sofascore.ManagerBrief" + }, + "event_id": { + "example": 16363867, "type": "integer" }, - "data": { - "$ref": "#/definitions/telegram.PostResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "home": { + "$ref": "#/definitions/sofascore.ManagerBrief" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "telegraph.AuthorArticle": { + "sofascore.EventOddsResponse": { "properties": { - "excerpt": { - "type": "string" + "count": { + "description": "Number of markets returned.", + "type": "integer" }, - "published_at": { - "type": "string" + "event_id": { + "description": "SofaScore event id the odds belong to.", + "type": "integer" }, - "title": { + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", "type": "string" }, - "url": { + "markets": { + "description": "Betting markets for the match.", + "items": { + "$ref": "#/definitions/sofascore.OddsMarket" + }, + "type": "array" + }, + "source_url": { + "description": "SofaScore URL the data was read from.", "type": "string" } }, "type": "object" }, - "telegraph.AuthorResponse": { + "sofascore.EventPlayerActionsResponse": { "properties": { - "articles": { + "ball_carries": { "items": { - "$ref": "#/definitions/telegraph.AuthorArticle" + "$ref": "#/definitions/sofascore.PlayerAction" }, "type": "array" }, - "bio": { - "type": "string" + "defensive": { + "items": { + "$ref": "#/definitions/sofascore.PlayerAction" + }, + "type": "array" }, - "job_title": { - "type": "string" + "dribbles": { + "items": { + "$ref": "#/definitions/sofascore.PlayerAction" + }, + "type": "array" }, - "name": { + "event_id": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "url": { + "passes": { + "items": { + "$ref": "#/definitions/sofascore.PlayerAction" + }, + "type": "array" + }, + "player_id": { + "type": "integer" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "tes.EmployerDetail": { + "sofascore.EventPlayerHeatmapResponse": { "properties": { - "address": { - "type": "string" - }, - "age_range": { - "type": "string" - }, - "description": { - "type": "string" - }, - "funding_status": { - "type": "string" - }, - "gender": { - "type": "string" - }, - "id": { - "type": "string" + "count": { + "type": "integer" }, - "location": { - "type": "string" + "event_id": { + "example": 16363867, + "type": "integer" }, - "name": { + "fetched_at": { "type": "string" }, - "phase": { - "type": "string" + "player_id": { + "example": 839956, + "type": "integer" }, - "positions": { + "points": { "items": { - "$ref": "#/definitions/tes.EmployerPosition" + "$ref": "#/definitions/sofascore.HeatmapPoint" }, "type": "array" }, - "type": { - "type": "string" - }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "tes.EmployerPosition": { + "sofascore.EventPlayerStatisticsResponse": { "properties": { - "id": { + "event_id": { + "example": 16363867, + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "title": { + "player": { + "$ref": "#/definitions/sofascore.PlayerBrief" + }, + "player_id": { + "example": 839956, + "type": "integer" + }, + "position": { + "example": "F", "type": "string" }, - "url": { + "source_url": { "type": "string" + }, + "statistics": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "type": "object" + }, + "team": { + "$ref": "#/definitions/sofascore.TeamRef" } }, "type": "object" }, - "tes.JobDetail": { + "sofascore.EventPointByPointResponse": { "properties": { - "application_email": { - "type": "string" - }, - "application_url": { - "type": "string" + "event_id": { + "example": 17257382, + "type": "integer" }, - "closing_date": { + "fetched_at": { "type": "string" }, - "contract_terms": { - "items": { - "type": "string" - }, - "type": "array" + "set_count": { + "example": 3, + "type": "integer" }, - "contract_types": { + "sets": { "items": { - "type": "string" + "$ref": "#/definitions/sofascore.PointByPointSet" }, "type": "array" }, - "description_excerpt": { - "type": "string" - }, - "employer": { - "type": "string" - }, - "employer_header_url": { - "type": "string" - }, - "employer_logo_url": { - "type": "string" - }, - "employer_url": { - "type": "string" - }, - "employer_website": { - "type": "string" - }, - "id": { + "source_url": { "type": "string" + } + }, + "type": "object" + }, + "sofascore.EventPregameFormResponse": { + "properties": { + "away": { + "$ref": "#/definitions/sofascore.PregameFormSide" }, - "location": { - "type": "string" + "event_id": { + "example": 16363867, + "type": "integer" }, - "posted_date": { + "fetched_at": { "type": "string" }, - "quick_apply": { - "type": "boolean" - }, - "salary": { - "type": "string" + "home": { + "$ref": "#/definitions/sofascore.PregameFormSide" }, - "title": { + "label": { + "example": "Pts", "type": "string" }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "tes.JobFacet": { + "sofascore.EventResponse": { "properties": { - "children": { - "items": { - "$ref": "#/definitions/tes.JobFacet" - }, - "type": "array" + "event": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.EventDetail" + } + ], + "description": "The match." }, - "count": { - "type": "integer" + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "type": "string" }, - "value": { + "source_url": { + "description": "SofaScore URL the data was read from.", "type": "string" } }, "type": "object" }, - "tes.JobFacets": { + "sofascore.EventShotmapResponse": { "properties": { - "contract_terms": { - "items": { - "$ref": "#/definitions/tes.JobFacet" - }, - "type": "array" + "count": { + "type": "integer" }, - "contract_types": { - "items": { - "$ref": "#/definitions/tes.JobFacet" - }, - "type": "array" + "event_id": { + "example": 16363867, + "type": "integer" }, - "positions": { - "items": { - "$ref": "#/definitions/tes.JobFacet" - }, - "type": "array" + "fetched_at": { + "type": "string" }, - "subjects": { + "shots": { "items": { - "$ref": "#/definitions/tes.JobFacet" + "$ref": "#/definitions/sofascore.Shot" }, "type": "array" }, - "workplaces": { - "items": { - "$ref": "#/definitions/tes.JobFacet" - }, - "type": "array" + "source_url": { + "type": "string" } }, "type": "object" }, - "tes.JobSearchResponse": { + "sofascore.EventStatisticsResponse": { "properties": { - "facets": { - "allOf": [ - { - "$ref": "#/definitions/tes.JobFacets" - } - ], - "description": "Facets is the same live faceted-search breakdown tes.com's own search\npage renders as its filter sidebar (position/subject/workplace\ncategory trees plus contract type/term counts), so a caller can\ndiscover exact Position/Subject/Workplace filter values without\nguessing. Counts reflect the query and other filters already applied." + "event_id": { + "description": "SofaScore event id the statistics belong to.", + "type": "integer" }, - "jobs": { + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "type": "string" + }, + "periods": { + "description": "Statistics for the whole match and for each period.", "items": { - "$ref": "#/definitions/tes.JobSummary" + "$ref": "#/definitions/sofascore.StatPeriod" }, "type": "array" }, - "keywords": { + "source_url": { + "description": "SofaScore URL the data was read from.", "type": "string" - }, - "location": { + } + }, + "type": "object" + }, + "sofascore.EventStatus": { + "properties": { + "code": { + "description": "SofaScore's numeric status code, for example 0 for not started and 100 for ended.", + "type": "integer" + }, + "description": { + "description": "Status as displayed, for example \"Ended\".", + "example": "Ended", "type": "string" }, - "page": { + "type": { + "description": "Status group, for example `notstarted`, `inprogress` or `finished`.", + "example": "finished", + "type": "string" + } + }, + "type": "object" + }, + "sofascore.EventSummary": { + "properties": { + "away_score": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.ScoreLine" + } + ], + "description": "Away side's score, when available." + }, + "away_team": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TeamRef" + } + ], + "description": "Away side." + }, + "home_score": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.ScoreLine" + } + ], + "description": "Home side's score, when available." + }, + "home_team": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TeamRef" + } + ], + "description": "Home side." + }, + "id": { + "description": "SofaScore event id. Use it with the event endpoints.", + "example": 14025013, "type": "integer" }, - "page_size": { + "slug": { + "description": "URL slug of the match on SofaScore.", + "type": "string" + }, + "start_time": { + "description": "Start time in UTC (RFC 3339).", + "example": "2025-08-15T19:00:00Z", + "type": "string" + }, + "start_timestamp": { + "description": "Start time as a Unix timestamp in seconds.", "type": "integer" }, - "total": { + "status": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.EventStatus" + } + ], + "description": "Current status of the match." + }, + "tournament": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TournamentRef" + } + ], + "description": "Tournament and parent competition the match belongs to." + }, + "winner_code": { + "description": "Result code: 1 when the home side won, 2 when the away side won, 3 for a draw. Omitted until the match is decided.", "type": "integer" } }, "type": "object" }, - "tes.JobSummary": { + "sofascore.EventTVChannelsResponse": { "properties": { - "closing_date": { - "type": "string" - }, - "contract_terms": { + "available_countries": { "items": { - "type": "string" + "$ref": "#/definitions/sofascore.TVCountryChannels" }, "type": "array" }, - "contract_types": { + "channels": { "items": { - "type": "string" + "$ref": "#/definitions/sofascore.TVChannel" }, "type": "array" }, - "employer": { - "type": "string" - }, - "employer_logo_url": { - "type": "string" - }, - "id": { - "type": "string" - }, - "location": { - "type": "string" - }, - "salary": { + "country": { + "example": "GB", "type": "string" }, - "short_description": { - "type": "string" + "event_id": { + "example": 16363867, + "type": "integer" }, - "title": { + "fetched_at": { "type": "string" }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "tes.ResourceAttachment": { + "sofascore.EventTeamHeatmapResponse": { "properties": { - "file_type": { - "type": "string" + "event_id": { + "example": 16363867, + "type": "integer" }, - "preview_image_url": { + "fetched_at": { "type": "string" }, - "size": { + "goalkeeper_points": { + "items": { + "$ref": "#/definitions/sofascore.HeatmapPoint" + }, + "type": "array" + }, + "player_points": { + "items": { + "$ref": "#/definitions/sofascore.HeatmapPoint" + }, + "type": "array" + }, + "source_url": { "type": "string" + }, + "team_id": { + "example": 17, + "type": "integer" } }, "type": "object" }, - "tes.ResourceDetail": { + "sofascore.EventTeamShotmapResponse": { "properties": { - "age_range": { + "count": { + "type": "integer" + }, + "event_id": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "attachments": { - "description": "Attachments lists each downloadable file's own type/size and a\npreview thumbnail -- metadata only (the file itself is never fetched;\nrobots.txt disallows /teaching-resource/download/ regardless).", + "locations": { "items": { - "$ref": "#/definitions/tes.ResourceAttachment" + "$ref": "#/definitions/sofascore.ShotLocation" }, "type": "array" }, - "author": { - "type": "string" - }, - "author_url": { + "source_url": { "type": "string" }, - "currency": { - "type": "string" + "team_id": { + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.EventTeamStreaksResponse": { + "properties": { + "event_id": { + "example": 16363867, + "type": "integer" }, - "description": { + "fetched_at": { "type": "string" }, - "free": { - "type": "boolean" + "general": { + "items": { + "$ref": "#/definitions/sofascore.TeamStreak" + }, + "type": "array" }, - "id": { - "type": "string" + "head2head": { + "items": { + "$ref": "#/definitions/sofascore.TeamStreak" + }, + "type": "array" }, - "license": { - "description": "License is the resource's own licence label as Tes's detail page\nitself displays it (e.g. \"Tes paid licence\", `Creative Commons\n\"Sharealike\"`) -- a longer display string than\nResourceSummary.License's short facet code, since the detail page has\nno equivalent short-code field to read.", + "source_url": { "type": "string" + } + }, + "type": "object" + }, + "sofascore.EventTennisPowerResponse": { + "properties": { + "count": { + "type": "integer" }, - "price": { - "type": "number" - }, - "rating": { - "type": "number" - }, - "rating_count": { + "event_id": { + "example": 17257382, "type": "integer" }, - "resource_type": { + "fetched_at": { "type": "string" }, - "reviews": { - "description": "Reviews is the most recent page of reviews (the same page the\npricing/reviews JSON endpoint returns by default -- see\nrawResourcePricing's doc comment). RatingCount is the true total\nacross every review, not just len(Reviews).", + "games": { "items": { - "$ref": "#/definitions/tes.ResourceReview" + "$ref": "#/definitions/sofascore.TennisPowerGame" }, "type": "array" }, - "subject": { + "source_url": { "type": "string" + } + }, + "type": "object" + }, + "sofascore.EventVotesResponse": { + "properties": { + "both_teams_to_score": { + "$ref": "#/definitions/sofascore.VoteBothTeamsToScore" }, - "thumbnail_url": { - "type": "string" + "event_id": { + "example": 16363867, + "type": "integer" }, - "title": { + "fetched_at": { "type": "string" }, - "url": { + "first_to_score": { + "$ref": "#/definitions/sofascore.VoteFirstToScore" + }, + "match_result": { + "$ref": "#/definitions/sofascore.VoteMatchResult" + }, + "source_url": { "type": "string" + }, + "who_should_have_won": { + "$ref": "#/definitions/sofascore.VoteWhoShouldHaveWon" } }, "type": "object" }, - "tes.ResourceReview": { + "sofascore.FeatureTournament": { "properties": { - "author": { - "type": "string" + "category_id": { + "example": 1465, + "type": "integer" }, - "author_url": { + "category_name": { + "example": "Europe", "type": "string" }, - "comment": { + "id": { + "example": 7, + "type": "integer" + }, + "name": { + "example": "UEFA Champions League", "type": "string" }, - "id": { + "slug": { + "example": "uefa-champions-league", "type": "string" }, - "posted": { + "sport": { + "example": "football", "type": "string" }, - "rating": { - "type": "number" + "user_count": { + "type": "integer" } }, "type": "object" }, - "tes.ResourceSearchResponse": { + "sofascore.GoalDistribution": { "properties": { - "country": { - "type": "string" - }, - "page": { + "conceded_goals": { + "example": 5, "type": "integer" }, - "page_size": { + "matches": { + "example": 5, "type": "integer" }, - "query": { - "type": "string" - }, - "resources": { + "periods": { "items": { - "$ref": "#/definitions/tes.ResourceSummary" + "$ref": "#/definitions/sofascore.GoalPeriod" }, "type": "array" }, - "total": { + "scored_goals": { + "example": 13, "type": "integer" + }, + "type": { + "example": "overall", + "type": "string" } }, "type": "object" }, - "tes.ResourceShop": { + "sofascore.GoalPeriod": { "properties": { - "avatar_url": { - "type": "string" + "conceded_goals": { + "example": 1, + "type": "integer" }, - "bio": { - "type": "string" + "end_minute": { + "example": 15, + "type": "integer" }, - "downloads": { + "scored_goals": { + "example": 1, "type": "integer" }, + "start_minute": { + "example": 1, + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.GrandSlamTournament": { + "properties": { "name": { + "example": "Australian Open, Men", "type": "string" }, - "page": { - "type": "integer" - }, - "rating": { - "type": "number" - }, - "rating_count": { + "tournament_id": { + "example": 2363, "type": "integer" }, - "resources": { + "years": { "items": { - "$ref": "#/definitions/tes.ShopResourceSummary" + "$ref": "#/definitions/sofascore.GrandSlamYear" }, "type": "array" + } + }, + "type": "object" + }, + "sofascore.GrandSlamYear": { + "properties": { + "is_live": { + "type": "boolean" }, - "uploads": { - "type": "integer" + "is_upcoming": { + "type": "boolean" }, - "url": { + "round": { + "example": "Final", "type": "string" }, - "username": { - "type": "string" + "season_id": { + "example": 48186, + "type": "integer" }, - "views": { + "winner": { + "type": "boolean" + }, + "year": { + "example": 2023, "type": "integer" } }, "type": "object" }, - "tes.ResourceSummary": { + "sofascore.GraphPoint": { "properties": { - "author": { - "type": "string" + "minute": { + "example": 45.5, + "type": "number" }, - "bundle_original_price": { + "value": { + "example": -12, + "type": "number" + } + }, + "type": "object" + }, + "sofascore.HeatmapPoint": { + "properties": { + "x": { + "example": 47.6, "type": "number" }, - "bundle_resource_count": { + "y": { + "example": 55.9, + "type": "number" + } + }, + "type": "object" + }, + "sofascore.Incident": { + "properties": { + "added_time": { + "description": "Minutes of added time at the point of the incident.", "type": "integer" }, - "currency": { + "away_score": { + "description": "Away team's score after the incident.", + "type": "integer" + }, + "card_color": { + "description": "Color of the card, such as `yellow` or `red`. Set for card incidents.", + "example": "yellow", "type": "string" }, - "downloads": { + "home_score": { + "description": "Home team's score after the incident.", "type": "integer" }, - "file_types": { - "items": { - "type": "string" - }, - "type": "array" + "is_home": { + "description": "Whether the incident belongs to the home team.", + "type": "boolean" }, - "first_published": { + "player": { + "description": "Name of the player involved in the incident.", "type": "string" }, - "free": { - "type": "boolean" - }, - "id": { + "player_in": { + "description": "Name of the player coming on in a substitution.", "type": "string" }, - "is_bundle": { - "description": "IsBundle marks a listing that packages multiple resources under one\nprice, tes.com's own \"Bundle\" badge. BundleResourceCount and\nBundleOriginalPrice are only meaningful when IsBundle is true.", - "type": "boolean" + "player_out": { + "description": "Name of the player going off in a substitution.", + "type": "string" }, - "last_published": { + "reason": { + "description": "Reason SofaScore gives for the incident.", "type": "string" }, - "license": { - "description": "License is Tes's own short licence code -- one of \"Paid\", \"CC-BY-SA\",\n\"CC-BY-ND\", \"CC-BY\" (its licence facet's own values, confirmed live\n2026-09-04).", + "text": { + "description": "Short label for the incident, such as `FT` for full time.", + "example": "FT", "type": "string" }, - "on_sale": { - "type": "boolean" + "time": { + "description": "Match minute at which the incident happened.", + "type": "integer" }, - "price": { - "type": "number" + "type": { + "description": "Incident type, such as `period`, `goal`, `card` or `substitution`.", + "example": "goal", + "type": "string" + } + }, + "type": "object" + }, + "sofascore.LineupPlayer": { + "properties": { + "jersey_number": { + "description": "Shirt number worn in this match.", + "type": "string" }, - "rating": { - "type": "number" + "player": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.PlayerRef" + } + ], + "description": "The player." }, - "rating_count": { + "position": { + "description": "Position in this match, for example G, D, M or F.", + "type": "string" + }, + "substitute": { + "description": "True for a player on the bench.", + "type": "boolean" + } + }, + "type": "object" + }, + "sofascore.LiveEventsResponse": { + "properties": { + "count": { + "description": "Number of events returned.", + "example": 10, "type": "integer" }, - "resource_types": { + "events": { + "description": "Matches currently in progress.", "items": { - "type": "string" + "$ref": "#/definitions/sofascore.EventSummary" }, "type": "array" }, - "thumbnail_url": { + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", "type": "string" }, - "title": { + "source_url": { + "description": "SofaScore URL the data was read from.", "type": "string" }, - "url": { + "sport": { + "description": "Sport the events belong to.", + "example": "football", "type": "string" } }, "type": "object" }, - "tes.SchoolSearchResponse": { + "sofascore.MMACardResponse": { "properties": { - "page": { + "card_id": { + "example": 197311, "type": "integer" }, - "page_size": { + "card_name": { + "example": "UFC 332: Silva vs. Wang", + "type": "string" + }, + "count": { "type": "integer" }, - "query": { + "fetched_at": { "type": "string" }, - "schools": { + "fights": { "items": { - "$ref": "#/definitions/tes.SchoolSummary" + "$ref": "#/definitions/sofascore.MMAFight" }, "type": "array" }, - "total": { + "org_id": { + "example": 19906, "type": "integer" }, - "total_pages": { - "type": "integer" + "part": { + "example": "all", + "type": "string" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "tes.SchoolSummary": { + "sofascore.MMAFight": { "properties": { - "address": { + "away_fighter": { + "$ref": "#/definitions/sofascore.MMAFighter" + }, + "card_id": { + "example": 197311, + "type": "integer" + }, + "card_name": { + "example": "UFC 332: Silva vs. Wang", "type": "string" }, - "country": { + "fight_type": { + "description": "FightType is the card segment the bout belongs to: `maincard`, `prelims`\nor `earlyprelims`.", + "example": "maincard", "type": "string" }, - "description": { + "final_round": { + "description": "FinalRound is the round the bout ended in; ScheduledRounds is its\nscheduled length. TimePlayedSeconds is the fight time actually fought.", + "example": 5, + "type": "integer" + }, + "gender": { + "example": "F", "type": "string" }, + "home_fighter": { + "$ref": "#/definitions/sofascore.MMAFighter" + }, "id": { - "type": "string" + "example": 17042538, + "type": "integer" }, - "logo_url": { + "order": { + "description": "Order is the bout's position on the card; the highest number is the main\nevent.", + "example": 14, + "type": "integer" + }, + "scheduled_rounds": { + "example": 5, + "type": "integer" + }, + "slug": { + "example": "wang-cong-natalia-silva", "type": "string" }, - "name": { + "start_time": { + "example": "2026-10-02T02:12:33Z", "type": "string" }, - "post_code": { + "start_timestamp": { + "type": "integer" + }, + "status": { + "$ref": "#/definitions/sofascore.EventStatus" + }, + "time_played_seconds": { + "example": 1500, + "type": "integer" + }, + "weight_class": { + "description": "WeightClass is SofaScore's division key, for example `fly`, `bantam`,\n`feather`, `light`, `welter`, `middle`, `lightheavy`, `heavy` or `straw`.", + "example": "fly", "type": "string" }, - "url": { + "win_type": { + "description": "WinType is how the bout ended, for example `KO`, `TKO`, `SUB`, `UD`, `SD`\nor `NC`; omitted until it has ended.", + "example": "UD", "type": "string" + }, + "winner_code": { + "description": "WinnerCode is 1 when the home fighter won, 2 for the away fighter; absent\nuntil decided.", + "example": 1, + "type": "integer" } }, "type": "object" }, - "tes.ShopResourceSummary": { + "sofascore.MMAFighter": { "properties": { - "currency": { + "country": { + "example": "Brazil", "type": "string" }, - "free": { - "type": "boolean" + "draws": { + "example": 1, + "type": "integer" }, "id": { - "type": "string" + "example": 461932, + "type": "integer" }, - "price": { - "type": "number" + "losses": { + "example": 5, + "type": "integer" }, - "thumbnail_url": { + "name": { + "example": "Natália Silva", "type": "string" }, - "title": { + "nickname": { + "example": "Deus da Guerra", "type": "string" }, - "url": { + "ranking": { + "description": "Ranking is the fighter's division ranking; 0 is the champion, and it is\nomitted for an unranked fighter.", + "example": 0, + "type": "integer" + }, + "slug": { + "example": "natalia-silva", "type": "string" + }, + "wins": { + "description": "Wins, Draws and Losses are the professional record going into the fight.", + "example": 21, + "type": "integer" } }, "type": "object" }, - "tes.employerDetailResponseDoc": { + "sofascore.MMAScheduleResponse": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/tes.EmployerDetail" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "main_events": { + "items": { + "$ref": "#/definitions/sofascore.MMAFight" + }, + "type": "array" + }, + "month": { + "example": "2026-10", "type": "string" - } - }, - "type": "object" - }, - "tes.jobDetailResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/tes.JobDetail" + "org_id": { + "example": 19906, + "type": "integer" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" } }, "type": "object" }, - "tes.jobSearchResponseDoc": { + "sofascore.ManagerBrief": { "properties": { - "code": { - "example": 200, + "id": { + "example": 794873, "type": "integer" }, - "data": { - "$ref": "#/definitions/tes.JobSearchResponse" + "name": { + "example": "Enzo Maresca", + "type": "string" }, - "msg": { - "example": "OK", + "short_name": { + "example": "E. Maresca", + "type": "string" + }, + "slug": { + "example": "enzo-maresca", "type": "string" } }, "type": "object" }, - "tes.resourceDetailResponseDoc": { + "sofascore.ManagerDetail": { "properties": { - "code": { - "example": 200, + "country": { + "example": "Italy", + "type": "string" + }, + "date_of_birth": { + "example": "1980-02-10", + "type": "string" + }, + "deceased": { + "type": "boolean" + }, + "former_player_id": { + "example": 2026, "type": "integer" }, - "data": { - "$ref": "#/definitions/tes.ResourceDetail" + "id": { + "example": 794873, + "type": "integer" }, - "msg": { - "example": "OK", + "name": { + "example": "Enzo Maresca", "type": "string" - } - }, - "type": "object" - }, - "tes.resourceSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/tes.ResourceSearchResponse" + "nationality_code": { + "example": "ITA", + "type": "string" }, - "msg": { - "example": "OK", + "nationality_iso2": { + "example": "IT", "type": "string" - } - }, - "type": "object" - }, - "tes.resourceShopResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/tes.ResourceShop" + "performance": { + "$ref": "#/definitions/sofascore.ManagerPerformance" }, - "msg": { - "example": "OK", + "preferred_formation": { + "example": "4-2-3-1", "type": "string" - } - }, - "type": "object" - }, - "tes.schoolSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/tes.SchoolSearchResponse" + "short_name": { + "example": "E. Maresca", + "type": "string" }, - "msg": { - "example": "OK", + "slug": { + "example": "enzo-maresca", "type": "string" + }, + "team": { + "$ref": "#/definitions/sofascore.TeamRef" + }, + "teams": { + "items": { + "$ref": "#/definitions/sofascore.TeamRef" + }, + "type": "array" } }, "type": "object" }, - "teslajobs.ListResponse": { + "sofascore.ManagerEventsResponse": { "properties": { - "jobs": { - "description": "Job listings on this page.", + "count": { + "type": "integer" + }, + "events": { "items": { - "$ref": "#/definitions/teslajobs.TeslaJobListing" + "$ref": "#/definitions/sofascore.EventSummary" }, "type": "array" }, - "location": { - "description": "Location filter that was applied.", - "example": "Palo Alto", + "fetched_at": { "type": "string" }, - "page": { - "description": "Page number returned, starting at 1.", - "example": 1, + "has_next_page": { + "type": "boolean" + }, + "manager_id": { + "example": 794873, "type": "integer" }, - "page_size": { - "description": "Number of job listings per page.", - "example": 20, + "page": { "type": "integer" }, - "query": { - "description": "Title or department filter that was applied.", - "example": "software engineer", + "source_url": { "type": "string" - }, - "total": { - "description": "Total number of job listings that match the filters.", - "example": 302, - "type": "integer" } }, "type": "object" }, - "teslajobs.TeslaJob": { + "sofascore.ManagerPerformance": { "properties": { - "apply_url": { - "type": "string" - }, - "compensation_text": { - "type": "string" - }, - "country": { - "example": "US", - "type": "string" + "draws": { + "example": 30, + "type": "integer" }, - "department": { - "example": "Tesla AI", - "type": "string" + "goals_conceded": { + "example": 211, + "type": "integer" }, - "description": { - "type": "string" + "goals_scored": { + "example": 418, + "type": "integer" }, - "employment_type": { - "example": "fulltime", - "type": "string" + "losses": { + "example": 44, + "type": "integer" }, - "id": { - "example": "224501", - "type": "string" + "total": { + "example": 194, + "type": "integer" }, - "job_family": { - "example": "AI", - "type": "string" + "total_points": { + "example": 390, + "type": "integer" }, - "location": { - "example": "Palo Alto, California", + "wins": { + "example": 120, + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.ManagerResponse": { + "properties": { + "fetched_at": { "type": "string" }, - "requirements": { - "type": "string" + "manager": { + "$ref": "#/definitions/sofascore.ManagerDetail" }, - "responsibilities": { + "source_url": { "type": "string" + } + }, + "type": "object" + }, + "sofascore.MoverOddsChoice": { + "properties": { + "change": { + "description": "Change is 1 when the fractional price is above its opening value, -1\nwhen below it and 0 when unchanged.", + "example": 1, + "type": "integer" }, - "state": { - "example": "CA", + "initial_value": { + "example": "31/50", "type": "string" }, - "title": { - "example": "AI Engineer, Manipulation, Optimus", + "name": { + "example": "1", "type": "string" }, - "url": { - "example": "https://www.tesla.com/careers/search/job/ai-engineer-manipulation-optimus-224501", + "value": { + "example": "29/100", "type": "string" } }, "type": "object" }, - "teslajobs.TeslaJobListing": { + "sofascore.MoverOddsMarket": { "properties": { - "department": { - "description": "Tesla department the job belongs to, such as `Tesla AI`.", - "example": "Tesla AI", - "type": "string" + "choices": { + "items": { + "$ref": "#/definitions/sofascore.MoverOddsChoice" + }, + "type": "array" }, - "id": { - "description": "Tesla careers job id. Use it with the job endpoint.", - "example": "224501", + "group": { + "example": "1X2", "type": "string" }, - "location": { - "description": "Job location as Tesla shows it, such as `Palo Alto, California`.", - "example": "Palo Alto, California", + "is_live": { + "type": "boolean" + }, + "name": { + "example": "Full time", "type": "string" }, - "title": { - "description": "Job title as shown on Tesla Careers.", - "example": "AI Engineer, Manipulation, Optimus", + "period": { + "example": "Full-time", "type": "string" + }, + "suspended": { + "type": "boolean" } }, "type": "object" }, - "teslajobs.jobResponseDoc": { + "sofascore.NamedCode": { "properties": { "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/teslajobs.TeslaJob" + "example": "EN", + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "example": "England", "type": "string" } }, "type": "object" }, - "teslajobs.listResponseDoc": { + "sofascore.OddsChoice": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/teslajobs.ListResponse" + "name": { + "description": "Outcome label, for example 1, X or 2.", + "example": "1", + "type": "string" }, - "msg": { - "example": "OK", + "value": { + "description": "Fractional odds, for example 29/100.", + "example": "29/100", "type": "string" + }, + "winning": { + "description": "True when this outcome won.", + "type": "boolean" } }, "type": "object" }, - "theage.ArticleResponse": { + "sofascore.OddsDroppingEvent": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" + "away_score": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.ScoreLine" + } + ], + "description": "Away side's score, when available." }, - "description": { - "type": "string" + "away_team": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TeamRef" + } + ], + "description": "Away side." }, - "image_url": { + "choice_name": { + "example": "2", "type": "string" }, - "is_accessible_for_free": { - "type": "boolean" + "home_score": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.ScoreLine" + } + ], + "description": "Home side's score, when available." }, - "is_truncated": { - "type": "boolean" + "home_team": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TeamRef" + } + ], + "description": "Home side." }, - "keywords": { - "items": { - "type": "string" - }, - "type": "array" + "id": { + "description": "SofaScore event id. Use it with the event endpoints.", + "example": 14025013, + "type": "integer" }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" + "market": { + "$ref": "#/definitions/sofascore.MoverOddsMarket" }, - "paywalled": { - "type": "boolean" + "percentage": { + "example": 63, + "type": "number" }, - "published_at": { + "slug": { + "description": "URL slug of the match on SofaScore.", "type": "string" }, - "section": { + "sport": { + "example": "football", "type": "string" }, - "title": { + "start_time": { + "description": "Start time in UTC (RFC 3339).", + "example": "2025-08-15T19:00:00Z", "type": "string" }, - "updated_at": { - "type": "string" + "start_timestamp": { + "description": "Start time as a Unix timestamp in seconds.", + "type": "integer" }, - "url": { - "type": "string" + "status": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.EventStatus" + } + ], + "description": "Current status of the match." + }, + "tournament": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TournamentRef" + } + ], + "description": "Tournament and parent competition the match belongs to." + }, + "winner_code": { + "description": "Result code: 1 when the home side won, 2 when the away side won, 3 for a draw. Omitted until the match is decided.", + "type": "integer" } }, "type": "object" }, - "theage.AuthorResponse": { + "sofascore.OddsDroppingResponse": { "properties": { - "articles": { + "count": { + "type": "integer" + }, + "events": { "items": { - "$ref": "#/definitions/theage.HeadlineItem" + "$ref": "#/definitions/sofascore.OddsDroppingEvent" }, "type": "array" }, - "bio": { - "type": "string" - }, - "email": { - "type": "string" - }, - "image_url": { + "fetched_at": { "type": "string" }, - "name": { + "source_url": { "type": "string" }, - "social_links": { - "items": { - "type": "string" - }, - "type": "array" - }, - "url": { + "sport": { + "example": "all", "type": "string" } }, "type": "object" }, - "theage.HeadlineItem": { + "sofascore.OddsMarket": { "properties": { - "author": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "published_at": { - "type": "string" + "choices": { + "description": "Outcomes that can be selected in this market.", + "items": { + "$ref": "#/definitions/sofascore.OddsChoice" + }, + "type": "array" }, - "summary": { + "group": { + "description": "Market group, for example 1X2.", + "example": "1X2", "type": "string" }, - "title": { + "name": { + "description": "Market name, for example \"Full time\".", + "example": "Full time", "type": "string" }, - "type": { + "period": { + "description": "Part of the match the market covers, for example \"Full-time\".", + "example": "Full-time", "type": "string" }, - "url": { - "type": "string" + "suspended": { + "description": "True while the market is suspended.", + "type": "boolean" } }, "type": "object" }, - "theatlantic.ArticleResponse": { + "sofascore.OddsWinningEvent": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" + "actual": { + "example": 1, + "type": "number" }, - "description": { - "type": "string" + "away_score": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.ScoreLine" + } + ], + "description": "Away side's score, when available." }, - "image_url": { - "type": "string" + "away_team": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TeamRef" + } + ], + "description": "Away side." }, - "metered": { - "type": "boolean" + "expected": { + "example": 51, + "type": "number" }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" + "home_score": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.ScoreLine" + } + ], + "description": "Home side's score, when available." }, - "published_at": { - "type": "string" + "home_team": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TeamRef" + } + ], + "description": "Home side." }, - "section": { - "type": "string" + "id": { + "description": "SofaScore event id. Use it with the event endpoints.", + "example": 14025013, + "type": "integer" }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" + "market": { + "$ref": "#/definitions/sofascore.MoverOddsMarket" }, - "title": { + "slug": { + "description": "URL slug of the match on SofaScore.", "type": "string" }, - "updated_at": { + "sport": { + "example": "basketball", "type": "string" }, - "url": { + "start_time": { + "description": "Start time in UTC (RFC 3339).", + "example": "2025-08-15T19:00:00Z", + "type": "string" + }, + "start_timestamp": { + "description": "Start time as a Unix timestamp in seconds.", + "type": "integer" + }, + "status": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.EventStatus" + } + ], + "description": "Current status of the match." + }, + "tournament": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TournamentRef" + } + ], + "description": "Tournament and parent competition the match belongs to." + }, + "winner_code": { + "description": "Result code: 1 when the home side won, 2 when the away side won, 3 for a draw. Omitted until the match is decided.", + "type": "integer" + }, + "winning_odds": { + "example": "24/25", "type": "string" } }, "type": "object" }, - "theatlantic.AuthorResponse": { + "sofascore.OddsWinningResponse": { "properties": { - "articles": { + "count": { + "type": "integer" + }, + "events": { "items": { - "$ref": "#/definitions/theatlantic.HeadlineItem" + "$ref": "#/definitions/sofascore.OddsWinningEvent" }, "type": "array" }, - "biography": { - "type": "string" - }, - "headshot_url": { + "fetched_at": { "type": "string" }, - "name": { + "source_url": { "type": "string" }, - "url": { + "sport": { + "example": "all", "type": "string" } }, "type": "object" }, - "theatlantic.HeadlineItem": { + "sofascore.PlayerAction": { "properties": { - "author": { - "type": "string" + "coordinates": { + "$ref": "#/definitions/sofascore.Coordinates" }, - "description": { - "type": "string" + "end_coordinates": { + "$ref": "#/definitions/sofascore.Coordinates" }, - "image_url": { - "type": "string" + "is_home": { + "type": "boolean" }, - "published_at": { - "type": "string" + "key_pass": { + "type": "boolean" }, - "title": { - "type": "string" + "outcome": { + "type": "boolean" }, - "url": { + "type": { "type": "string" } }, "type": "object" }, - "theatlantic.HeadlinesResponse": { + "sofascore.PlayerAttributeOverview": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/theatlantic.HeadlineItem" + "attributes": { + "additionalProperties": { + "format": "float64", + "type": "number" }, - "type": "array" + "type": "object" }, - "section": { + "position": { + "example": "F", "type": "string" + }, + "year_shift": { + "description": "YearShift is 0 for the current scores and N for the scores N years earlier.", + "example": 0, + "type": "integer" } }, "type": "object" }, - "theatlantic.Section": { + "sofascore.PlayerAttributesResponse": { "properties": { - "name": { - "type": "string" + "characteristics": { + "$ref": "#/definitions/sofascore.PlayerCharacteristics" }, - "slug": { + "characteristics_url": { "type": "string" }, - "url": { + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "theatlantic.SectionsResponse": { - "properties": { - "sections": { + }, + "overviews": { "items": { - "$ref": "#/definitions/theatlantic.Section" + "$ref": "#/definitions/sofascore.PlayerAttributeOverview" }, "type": "array" - } - }, - "type": "object" - }, - "theatlantic.articleResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "player_id": { + "example": 839956, "type": "integer" }, - "data": { - "$ref": "#/definitions/theatlantic.ArticleResponse" + "position_averages": { + "items": { + "$ref": "#/definitions/sofascore.PlayerAttributeOverview" + }, + "type": "array" }, - "msg": { - "example": "OK", + "source_url": { + "type": "string" + }, + "sport": { + "example": "football", "type": "string" } }, "type": "object" }, - "theatlantic.authorResponseDoc": { + "sofascore.PlayerBrief": { "properties": { - "code": { - "example": 200, + "id": { + "example": 839956, "type": "integer" }, - "data": { - "$ref": "#/definitions/theatlantic.AuthorResponse" + "jersey_number": { + "example": "9", + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "example": "Erling Haaland", "type": "string" - } - }, - "type": "object" - }, - "theatlantic.headlinesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/theatlantic.HeadlinesResponse" + "position": { + "example": "F", + "type": "string" }, - "msg": { - "example": "OK", + "short_name": { + "example": "E. Haaland", + "type": "string" + }, + "slug": { + "example": "erling-haaland", "type": "string" } }, "type": "object" }, - "theatlantic.sectionsResponseDoc": { + "sofascore.PlayerCharacteristic": { "properties": { "code": { - "example": 200, + "description": "Code is SofaScore's numeric characteristic code.", + "example": 5, "type": "integer" }, - "data": { - "$ref": "#/definitions/theatlantic.SectionsResponse" + "key": { + "description": "Key is the identifier the SofaScore web client uses for the code (for\nexample finishing); omitted for a code the client does not name.", + "example": "finishing", + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "example": "Finishing", "type": "string" + }, + "rank": { + "description": "Rank is SofaScore's rank value for the characteristic.", + "example": 25, + "type": "integer" } }, "type": "object" }, - "theblaze.AuthorResponse": { + "sofascore.PlayerCharacteristics": { "properties": { - "articles": { + "positions": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "type": "string" }, "type": "array" }, - "biography": { + "strengths": { "items": { - "type": "string" + "$ref": "#/definitions/sofascore.PlayerCharacteristic" }, "type": "array" }, - "image_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "role": { - "type": "string" - }, - "slug": { - "type": "string" - }, - "url": { - "type": "string" + "weaknesses": { + "items": { + "$ref": "#/definitions/sofascore.PlayerCharacteristic" + }, + "type": "array" } }, "type": "object" }, - "thedailybeast.AuthorArticle": { + "sofascore.PlayerDetail": { "properties": { - "title": { + "country": { + "description": "Player's country.", "type": "string" }, - "url": { + "date_of_birth": { + "description": "Date of birth (RFC 3339).", "type": "string" - } - }, - "type": "object" - }, - "thedailybeast.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/thedailybeast.AuthorArticle" - }, - "type": "array" }, - "bio": { - "items": { - "type": "string" - }, - "type": "array" + "deceased": { + "description": "True when the player has died.", + "type": "boolean" }, - "image_url": { - "type": "string" + "height": { + "description": "Height in centimetres.", + "type": "integer" }, - "job_title": { - "type": "string" + "id": { + "description": "SofaScore player id. Use it with the player endpoints.", + "type": "integer" }, - "name": { + "jersey_number": { + "description": "Shirt number.", "type": "string" }, - "twitter": { - "type": "string" + "market_value": { + "description": "SofaScore's estimated market value, in units of `market_value_currency`. Omitted when unavailable.", + "type": "integer" }, - "url": { + "market_value_currency": { + "description": "Currency of `market_value`, for example EUR.", "type": "string" - } - }, - "type": "object" - }, - "thehill.AuthorArticle": { - "properties": { - "category": { + }, + "name": { + "description": "Player's full name.", "type": "string" }, - "category_url": { + "position": { + "description": "Position code, for example G, D, M or F.", "type": "string" }, - "published_at": { + "preferred_foot": { + "description": "Preferred foot, for example \"Right\".", "type": "string" }, - "title": { + "short_name": { + "description": "Shortened name, for example \"E. Haaland\".", "type": "string" }, - "url": { + "slug": { + "description": "URL slug of the player on SofaScore.", "type": "string" + }, + "team": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TeamRef" + } + ], + "description": "The player's current team." } }, "type": "object" }, - "thehill.AuthorResponse": { + "sofascore.PlayerEventRow": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/thehill.AuthorArticle" - }, - "type": "array" - }, - "bio": { - "type": "string" + "event": { + "$ref": "#/definitions/sofascore.EventSummary" }, - "image_url": { - "type": "string" + "incident_counts": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "description": "IncidentCounts holds counts of the player's match incidents, for example\ngoals, assists, yellow_cards, red_cards and penalty_goals.", + "type": "object" }, - "job_title": { - "type": "string" + "on_bench": { + "description": "OnBench is true only when the player was an unused substitute.", + "type": "boolean" }, - "name": { - "type": "string" + "played_for_team_id": { + "description": "PlayedForTeamID is the team the player represented in the match.", + "example": 17, + "type": "integer" }, - "url": { - "type": "string" + "statistics": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "description": "Statistics holds the player's numbers in the match (football: rating and\nminutes_played; basketball: points, rebounds and more). It is absent when\nthe player did not play or the match has not started.", + "type": "object" } }, "type": "object" }, - "thehindu.AuthorResponse": { + "sofascore.PlayerEventsResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/thehindu.HeadlineItem" - }, - "type": "array" + "count": { + "type": "integer" }, - "biography": { + "events": { "items": { - "type": "string" + "$ref": "#/definitions/sofascore.PlayerEventRow" }, "type": "array" }, - "designation": { - "type": "string" - }, - "email": { - "type": "string" - }, - "facebook_url": { - "type": "string" - }, - "image_url": { + "fetched_at": { "type": "string" }, - "linkedin_url": { - "type": "string" + "has_next_page": { + "type": "boolean" }, - "name": { - "type": "string" + "page": { + "type": "integer" }, - "twitter_url": { - "type": "string" + "player_id": { + "example": 839956, + "type": "integer" }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "thehindu.HeadlineItem": { + "sofascore.PlayerFormEntry": { "properties": { - "author": { - "type": "string" - }, - "image_url": { + "date": { + "example": "2025-11-02T16:30:00Z", "type": "string" }, - "published_at": { - "type": "string" + "rating": { + "example": 9.3, + "type": "number" }, - "summary": { - "type": "string" + "timestamp": { + "type": "integer" }, - "title": { - "type": "string" + "tournament_id": { + "example": 17, + "type": "integer" }, "type": { + "example": "event", "type": "string" }, - "url": { + "value": { + "description": "Value is the upstream value as published: the rating for an event, an\nopaque number for an injury, absent for the other types.", + "example": "9.3", "type": "string" } }, "type": "object" }, - "thejournal.AuthorArticle": { + "sofascore.PlayerLastYearSummaryResponse": { "properties": { - "image_url": { - "type": "string" + "count": { + "type": "integer" }, - "section": { + "fetched_at": { "type": "string" }, - "summary": { - "type": "string" + "player_id": { + "example": 839956, + "type": "integer" }, - "title": { + "source_url": { "type": "string" }, - "url": { - "type": "string" + "summary": { + "items": { + "$ref": "#/definitions/sofascore.PlayerFormEntry" + }, + "type": "array" + }, + "tournaments": { + "items": { + "$ref": "#/definitions/sofascore.UniqueTournamentBrief" + }, + "type": "array" } }, "type": "object" }, - "thejournal.AuthorResponse": { + "sofascore.PlayerMatchRating": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/thejournal.AuthorArticle" - }, - "type": "array" + "event": { + "$ref": "#/definitions/sofascore.EventSummary" }, - "has_more": { + "event_id": { + "example": 14023936, + "type": "integer" + }, + "is_home": { "type": "boolean" }, - "id": { - "type": "string" + "opponent": { + "$ref": "#/definitions/sofascore.TeamRef" }, - "name": { - "type": "string" + "rating": { + "example": 7.4, + "type": "number" }, - "slug": { + "start_time": { + "example": "2026-05-20T19:00:00Z", "type": "string" }, - "url": { - "type": "string" + "start_timestamp": { + "type": "integer" } }, "type": "object" }, - "thenextweb.AuthorResponse": { + "sofascore.PlayerNationalTeamRecord": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" + "appearances": { + "example": 59, + "type": "integer" }, - "image_url": { + "debut_date": { + "example": "2019-09-06", "type": "string" }, - "name": { - "type": "string" + "debut_timestamp": { + "type": "integer" }, - "slug": { - "type": "string" + "goals": { + "example": 65, + "type": "integer" }, - "url": { - "type": "string" + "team": { + "$ref": "#/definitions/sofascore.TeamRef" } }, "type": "object" }, - "therealreal.AutocompleteResponse": { + "sofascore.PlayerNationalTeamStatisticsResponse": { "properties": { + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "player_id": { + "example": 839956, + "type": "integer" + }, "source_url": { "type": "string" }, - "suggestions": { - "items": { - "$ref": "#/definitions/therealreal.Suggestion" - }, - "type": "array" - } - }, - "type": "object" - }, - "therealreal.CategoriesResponse": { - "properties": { - "categories": { + "teams": { "items": { - "$ref": "#/definitions/therealreal.Category" + "$ref": "#/definitions/sofascore.PlayerNationalTeamRecord" }, "type": "array" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "therealreal.Category": { + "sofascore.PlayerPenalty": { "properties": { - "children": { - "items": { - "$ref": "#/definitions/therealreal.Category" - }, - "type": "array" + "event": { + "$ref": "#/definitions/sofascore.EventSummary" }, - "count": { - "example": 225361, + "id": { + "example": 6089564, "type": "integer" }, - "id": { - "example": "493", + "outcome": { + "example": "goal", "type": "string" }, - "name": { - "example": "Handbags", - "type": "string" + "x": { + "example": 68.82, + "type": "number" }, - "permalink": { - "example": "women/handbags", + "xg": { + "description": "XG is the expected-goals value of the penalty when SofaScore has one.", + "example": 0.78, + "type": "number" + }, + "y": { + "example": 95.83, + "type": "number" + }, + "zone": { + "example": "low-right", "type": "string" } }, "type": "object" }, - "therealreal.CollectionSlug": { + "sofascore.PlayerPenaltyHistoryResponse": { "properties": { - "slug": { - "example": "on-sale-now", - "type": "string" + "attempts": { + "example": 61, + "type": "integer" }, - "url": { - "example": "https://www.therealreal.com/sales/on-sale-now", + "count": { + "type": "integer" + }, + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "therealreal.CollectionsResponse": { - "properties": { - "collections": { + }, + "penalties": { "items": { - "$ref": "#/definitions/therealreal.CollectionSlug" + "$ref": "#/definitions/sofascore.PlayerPenalty" }, "type": "array" }, - "source_url": { - "type": "string" + "player_id": { + "example": 839956, + "type": "integer" }, - "total": { - "example": 535, + "scored": { + "example": 52, "type": "integer" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "therealreal.Condition": { + "sofascore.PlayerRatingsResponse": { "properties": { "count": { - "example": 162975, "type": "integer" }, - "id": { - "example": "20", + "fetched_at": { "type": "string" }, - "name": { - "example": "Very Good", - "type": "string" - } - }, - "type": "object" - }, - "therealreal.ConditionsResponse": { - "properties": { - "conditions": { + "player_id": { + "example": 839956, + "type": "integer" + }, + "ratings": { "items": { - "$ref": "#/definitions/therealreal.Condition" + "$ref": "#/definitions/sofascore.PlayerMatchRating" }, "type": "array" }, + "season": { + "example": 76986, + "type": "integer" + }, "source_url": { "type": "string" + }, + "tournament_id": { + "example": 17, + "type": "integer" + }, + "type": { + "example": "overall", + "type": "string" } }, "type": "object" }, - "therealreal.Designer": { + "sofascore.PlayerRef": { "properties": { - "id": { - "example": "267", + "country": { + "description": "Player's country.", + "example": "Spain", "type": "string" }, + "id": { + "description": "SofaScore player id. Use it with the player endpoints.", + "example": 855833, + "type": "integer" + }, "name": { - "example": "Chanel", + "description": "Player's full name.", + "example": "Ferran Torres", + "type": "string" + }, + "position": { + "description": "Position code, for example G, D, M or F.", + "example": "F", + "type": "string" + }, + "short_name": { + "description": "Shortened name, for example \"F. Torres\".", + "example": "F. Torres", "type": "string" }, "slug": { - "example": "chanel", + "description": "URL slug of the player on SofaScore.", + "example": "ferran-torres", "type": "string" } }, "type": "object" }, - "therealreal.DesignerDirectoryCategory": { + "sofascore.PlayerResponse": { "properties": { - "name": { - "example": "Women", + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", "type": "string" }, - "slug": { - "example": "women", + "player": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.PlayerDetail" + } + ], + "description": "The player's profile." + }, + "source_url": { + "description": "SofaScore URL the data was read from.", "type": "string" } }, "type": "object" }, - "therealreal.DesignersResponse": { + "sofascore.PlayerSeasonHeatmapResponse": { "properties": { - "categories": { + "count": { + "type": "integer" + }, + "events": { + "description": "Events are the matches the heatmap aggregates.", "items": { - "$ref": "#/definitions/therealreal.DesignerDirectoryCategory" + "$ref": "#/definitions/sofascore.EventSummary" }, "type": "array" }, - "category": { - "example": "women", + "fetched_at": { "type": "string" }, - "designers": { + "matches": { + "example": 35, + "type": "integer" + }, + "player_id": { + "example": 839956, + "type": "integer" + }, + "points": { "items": { - "$ref": "#/definitions/therealreal.Designer" + "$ref": "#/definitions/sofascore.SeasonHeatmapPoint" }, "type": "array" }, + "season": { + "example": 76986, + "type": "integer" + }, "source_url": { "type": "string" }, - "total": { - "example": 5413, + "tournament_id": { + "example": 17, "type": "integer" } }, "type": "object" }, - "therealreal.Listing": { + "sofascore.PlayerSeasonStatisticsResponse": { "properties": { - "available": { - "example": true, - "type": "boolean" - }, - "color": { - "example": "Blue", + "fetched_at": { "type": "string" }, - "condition": { - "example": "Very Good", - "type": "string" + "player_id": { + "example": 839956, + "type": "integer" }, - "designer": { - "example": "Chanel", - "type": "string" + "rating_breakdown": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "type": "object" }, - "designer_slug": { - "example": "chanel", - "type": "string" + "season": { + "example": 96668, + "type": "integer" }, - "gender": { - "example": "Women", + "source_url": { "type": "string" }, - "id": { - "example": "54388578", - "type": "string" + "statistics": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "type": "object" }, - "image_url": { - "example": "https://product-images.therealreal.com/CHA1494621_1_enlarged.jpg", - "type": "string" + "team": { + "$ref": "#/definitions/sofascore.TeamRef" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" + "tournament_id": { + "example": 17, + "type": "integer" }, - "name": { - "example": "Denim Pearl Crush Wallet On Chain", + "type": { + "example": "overall", "type": "string" + } + }, + "type": "object" + }, + "sofascore.PlayerStatisticRank": { + "properties": { + "count": { + "example": 421, + "type": "integer" }, - "original_price_usd": { - "example": 3800, - "type": "number" - }, - "price_usd": { - "example": 3800, - "type": "number" + "order": { + "description": "Order is the player's position when ties are broken; it is never lower than Rank.", + "example": 1, + "type": "integer" }, - "sku": { - "example": "CHA1494621", - "type": "string" + "rank": { + "description": "Rank is the competition rank (tied values share a rank) among Count players.", + "example": 1, + "type": "integer" }, - "url": { - "example": "https://www.therealreal.com/products/women/handbags/crossbody-bags/chanel-denim-pearl-crush-wallet-on-chain-wdqhu", + "statistic": { + "example": "goals", "type": "string" }, - "waitlisted": { - "example": false, - "type": "boolean" + "value": { + "example": 5, + "type": "number" } }, "type": "object" }, - "therealreal.ListingDetail": { + "sofascore.PlayerStatisticalRankingsResponse": { "properties": { - "available": { - "example": true, - "type": "boolean" - }, - "category_label": { - "example": "Women's Fashion & Accessories", - "type": "string" + "count": { + "type": "integer" }, - "category_name": { - "example": "Women", + "fetched_at": { "type": "string" }, - "color": { - "example": "Blue", - "type": "string" + "player_id": { + "example": 839956, + "type": "integer" }, - "condition": { - "example": "Very Good", - "type": "string" + "rankings": { + "items": { + "$ref": "#/definitions/sofascore.PlayerStatisticRank" + }, + "type": "array" }, - "condition_detail": { - "example": "Minor discoloration throughout; minor discoloration at hardware; minor scuff at corner.", - "type": "string" + "season": { + "$ref": "#/definitions/sofascore.Season" }, - "description": { + "source_url": { "type": "string" }, - "designer": { - "example": "Chanel", - "type": "string" - }, - "designer_slug": { - "example": "chanel", - "type": "string" - }, - "gender": { - "example": "Women", - "type": "string" - }, - "id": { - "example": "54388578", + "type": { + "example": "overall", "type": "string" + } + }, + "type": "object" + }, + "sofascore.PlayerStatisticsFilters": { + "properties": { + "min_appearances": { + "type": "integer" }, - "image_url": { - "example": "https://product-images.therealreal.com/CHA1494621_1_enlarged.jpg", - "type": "string" + "min_minutes": { + "type": "integer" }, - "images": { + "nationalities": { "items": { "type": "string" }, "type": "array" }, - "measurements": { - "additionalProperties": { + "positions": { + "items": { "type": "string" }, - "type": "object" - }, - "name": { - "example": "Denim Pearl Crush Wallet On Chain", - "type": "string" - }, - "original_price_usd": { - "example": 3800, - "type": "number" - }, - "price_usd": { - "example": 3800, - "type": "number" + "type": "array" }, - "sku": { - "example": "CHA1494621", - "type": "string" + "team_ids": { + "items": { + "type": "integer" + }, + "type": "array" + } + }, + "type": "object" + }, + "sofascore.PlayerStatisticsRow": { + "properties": { + "player": { + "$ref": "#/definitions/sofascore.PlayerRef" }, - "source_url": { - "type": "string" + "rank": { + "example": 1, + "type": "integer" }, - "url": { - "example": "https://www.therealreal.com/products/women/handbags/crossbody-bags/chanel-denim-pearl-crush-wallet-on-chain-wdqhu", - "type": "string" + "statistics": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "type": "object" }, - "waitlisted": { - "example": false, - "type": "boolean" + "team": { + "$ref": "#/definitions/sofascore.TeamRef" } }, "type": "object" }, - "therealreal.ProductsResponse": { + "sofascore.PlayerStatisticsSeasonsResponse": { "properties": { - "has_more": { - "example": true, - "type": "boolean" - }, - "listings": { - "items": { - "$ref": "#/definitions/therealreal.Listing" - }, - "type": "array" + "count": { + "type": "integer" }, - "next_after": { - "example": "YXJyYXljb25uZWN0aW9uOjExOQ==", + "fetched_at": { "type": "string" }, + "player_id": { + "example": 839956, + "type": "integer" + }, "source_url": { "type": "string" }, - "total": { - "example": 404167, - "type": "integer" - } - }, - "type": "object" - }, - "therealreal.SimilarResponse": { - "properties": { - "listings": { + "tournaments": { "items": { - "$ref": "#/definitions/therealreal.Listing" + "$ref": "#/definitions/sofascore.StatisticsTournament" }, "type": "array" - }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "therealreal.Suggestion": { - "properties": { - "text": { - "example": "gucci handbags", - "type": "string" } }, "type": "object" }, - "therealreal.autocompleteResponseDoc": { + "sofascore.PlayerTournamentsResponse": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/therealreal.AutocompleteResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "player_id": { + "example": 839956, + "type": "integer" + }, + "source_url": { "type": "string" + }, + "tournaments": { + "items": { + "$ref": "#/definitions/sofascore.UniqueTournamentBrief" + }, + "type": "array" } }, "type": "object" }, - "therealreal.categoriesResponseDoc": { + "sofascore.PlayerTransfersResponse": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/therealreal.CategoriesResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "player_id": { + "example": 839956, + "type": "integer" + }, + "source_url": { "type": "string" + }, + "transfers": { + "items": { + "$ref": "#/definitions/sofascore.Transfer" + }, + "type": "array" } }, "type": "object" }, - "therealreal.collectionsResponseDoc": { + "sofascore.PointByPointGame": { "properties": { - "code": { - "example": 200, + "game": { + "example": 10, "type": "integer" }, - "data": { - "$ref": "#/definitions/therealreal.CollectionsResponse" + "points": { + "items": { + "$ref": "#/definitions/sofascore.PointByPointPoint" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "score": { + "$ref": "#/definitions/sofascore.PointByPointScore" } }, "type": "object" }, - "therealreal.conditionsResponseDoc": { + "sofascore.PointByPointPoint": { "properties": { - "code": { - "example": 200, - "type": "integer" + "away_marker": { + "example": "set_or_match_point", + "type": "string" }, - "data": { - "$ref": "#/definitions/therealreal.ConditionsResponse" + "away_point": { + "example": "40", + "type": "string" }, - "msg": { - "example": "OK", + "away_point_type": { + "example": 2, + "type": "integer" + }, + "description": { + "description": "Description is `ace` or `double_fault` when SofaScore flags the point;\nomitted otherwise. DescriptionCode is the upstream code (0 none, 1 ace,\n2 double fault).", + "example": "ace", "type": "string" - } - }, - "type": "object" - }, - "therealreal.designersResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "description_code": { + "example": 0, "type": "integer" }, - "data": { - "$ref": "#/definitions/therealreal.DesignersResponse" + "home_marker": { + "description": "HomeMarker and AwayMarker name the codes that mean a player holds a\npoint opportunity after the point: `break_point` (code 2) and\n`set_or_match_point` (code 3).", + "example": "break_point", + "type": "string" }, - "msg": { - "example": "OK", + "home_point": { + "description": "HomePoint and AwayPoint are the points as SofaScore prints them: `0`,\n`15`, `30`, `40` and `A` in a tennis game, a plain count in a tie-break,\ntable tennis or badminton set.", + "example": "30", "type": "string" + }, + "home_point_type": { + "description": "HomePointType and AwayPointType are SofaScore's per-player point codes.", + "example": 5, + "type": "integer" } }, "type": "object" }, - "therealreal.listingResponseDoc": { + "sofascore.PointByPointScore": { "properties": { - "code": { - "example": 200, + "away_score": { + "example": 4, "type": "integer" }, - "data": { - "$ref": "#/definitions/therealreal.ListingDetail" + "home_score": { + "example": 6, + "type": "integer" }, - "msg": { - "example": "OK", + "server": { + "description": "Server is `home` or `away`; omitted when SofaScore does not know it.", + "example": "away", + "type": "string" + }, + "winner": { + "description": "Winner is `home` or `away`; omitted while the game or set is unfinished.", + "example": "away", "type": "string" } }, "type": "object" }, - "therealreal.searchResponseDoc": { + "sofascore.PointByPointSet": { "properties": { - "code": { - "example": 200, - "type": "integer" + "games": { + "items": { + "$ref": "#/definitions/sofascore.PointByPointGame" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/therealreal.ProductsResponse" + "points": { + "items": { + "$ref": "#/definitions/sofascore.PointByPointPoint" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "score": { + "$ref": "#/definitions/sofascore.PointByPointScore" + }, + "set": { + "example": 1, + "type": "integer" } }, "type": "object" }, - "therealreal.similarResponseDoc": { + "sofascore.PregameFormSide": { "properties": { - "code": { - "example": 200, - "type": "integer" + "avg_rating": { + "example": 7.91, + "type": "number" }, - "data": { - "$ref": "#/definitions/therealreal.SimilarResponse" + "form": { + "example": [ + "W", + "W", + "W", + "W" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "position": { + "example": 1, + "type": "integer" + }, + "value": { + "example": "12", "type": "string" } }, "type": "object" }, - "thestarmy.AuthorArticle": { + "sofascore.RankingEntity": { "properties": { - "image_url": { + "country": { + "example": "Italy", "type": "string" }, - "published_at": { + "country_code": { + "example": "IT", "type": "string" }, - "section": { + "gender": { + "example": "M", "type": "string" }, - "summary": { - "type": "string" + "id": { + "example": 720, + "type": "integer" }, - "title": { + "name": { + "example": "Jannik Sinner", "type": "string" }, - "url": { + "national": { + "type": "boolean" + }, + "record": { + "$ref": "#/definitions/sofascore.WDLRecord" + }, + "short_name": { + "example": "J. Sinner", "type": "string" - } - }, - "type": "object" - }, - "thestarmy.AuthorResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/thestarmy.AuthorArticle" - }, - "type": "array" }, - "email": { + "slug": { + "example": "sinner-jannik", "type": "string" }, - "name": { + "sport": { + "example": "tennis", "type": "string" }, - "url": { + "type": { + "example": "player", "type": "string" } }, "type": "object" }, - "theverge.AuthorArticle": { + "sofascore.RankingRow": { "properties": { - "category": { - "type": "string" + "best_rank": { + "type": "integer" }, - "excerpt": { - "type": "string" + "entity": { + "$ref": "#/definitions/sofascore.RankingEntity" }, - "published_at": { + "label": { + "example": "England", "type": "string" }, - "title": { - "type": "string" + "max_points": { + "type": "number" }, - "url": { + "next_win_points": { + "type": "number" + }, + "playing_teams": { + "type": "integer" + }, + "points": { + "type": "number" + }, + "previous_points": { + "type": "number" + }, + "previous_rank": { + "type": "integer" + }, + "rank": { + "example": 1, + "type": "integer" + }, + "total_teams": { + "type": "integer" + }, + "tournaments_played": { + "type": "integer" + }, + "year": { + "example": "2027", "type": "string" } }, "type": "object" }, - "theverge.AuthorResponse": { + "sofascore.RankingType": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/theverge.AuthorArticle" - }, - "type": "array" + "description": { + "type": "string" }, - "bio": { + "entity_type": { + "example": "player", "type": "string" }, - "job_title": { + "gender": { + "example": "M", "type": "string" }, "name": { + "example": "ATP men's singles ranking", "type": "string" }, - "url": { + "sport": { + "example": "tennis", "type": "string" + }, + "type": { + "example": 5, + "type": "integer" } }, "type": "object" }, - "thisismoney.AuthorArticle": { + "sofascore.RankingTypesResponse": { "properties": { - "excerpt": { - "type": "string" - }, - "published_at": { - "type": "string" - }, - "title": { - "type": "string" + "count": { + "example": 32, + "type": "integer" }, - "url": { - "type": "string" + "types": { + "items": { + "$ref": "#/definitions/sofascore.RankingType" + }, + "type": "array" } }, "type": "object" }, - "thisismoney.AuthorResponse": { + "sofascore.RankingsResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/thisismoney.AuthorArticle" - }, - "type": "array" + "count": { + "example": 500, + "type": "integer" }, - "bio": { + "entity_type": { + "example": "player", "type": "string" }, - "coverage": { + "fetched_at": { + "type": "string" + }, + "name": { + "example": "ATP men's singles ranking", + "type": "string" + }, + "rankings": { "items": { - "type": "string" + "$ref": "#/definitions/sofascore.RankingRow" }, "type": "array" }, - "job_title": { + "source_url": { "type": "string" }, - "name": { + "sport": { + "example": "tennis", "type": "string" }, - "url": { + "total_rows": { + "example": 500, + "type": "integer" + }, + "type": { + "example": 5, + "type": "integer" + }, + "updated_at": { + "example": "2026-10-06T23:00:37Z", "type": "string" + }, + "updated_timestamp": { + "type": "integer" } }, "type": "object" }, - "threads.Author": { + "sofascore.Referee": { "properties": { - "id": { - "description": "Threads user ID of the author.", + "country": { + "description": "Referee's country.", + "example": "England", "type": "string" }, - "name": { - "description": "Display name of the author.", - "type": "string" + "id": { + "description": "SofaScore referee id.", + "type": "integer" }, - "username": { - "description": "Threads username of the author.", + "name": { + "description": "Referee's name.", + "example": "Anthony Taylor", "type": "string" } }, "type": "object" }, - "threads.Post": { + "sofascore.RefereeCompetitionStatistics": { "properties": { - "author": { - "$ref": "#/definitions/threads.Author" + "appearances": { + "example": 27, + "type": "integer" }, - "code": { - "type": "string" + "competition": { + "$ref": "#/definitions/sofascore.UniqueTournamentBrief" }, - "image_url": { - "type": "string" + "penalties": { + "example": 11, + "type": "integer" }, - "text": { - "type": "string" + "red_cards": { + "example": 4, + "type": "integer" }, - "url": { - "type": "string" + "yellow_cards": { + "example": 86, + "type": "integer" + }, + "yellow_red_cards": { + "example": 1, + "type": "integer" } }, "type": "object" }, - "threads.Profile": { + "sofascore.RefereeDetail": { "properties": { - "avatar_url": { - "description": "URL of the profile picture.", + "country": { + "example": "England", "type": "string" }, - "biography": { - "description": "Bio text shown on the profile.", + "date_of_birth": { + "example": "1979-06-20", "type": "string" }, - "followers_count": { - "description": "Number of followers of the profile.", + "first_league_debut": { + "description": "FirstLeagueDebut is the date of the referee's first top-flight match when\nSofaScore records it.", + "example": "2010-02-03", + "type": "string" + }, + "games": { + "description": "Games, YellowCards, RedCards and YellowRedCards are career totals across\nevery competition; each is omitted when SofaScore gives none.", + "example": 321, + "type": "integer" + }, + "id": { + "example": 74264, "type": "integer" }, "name": { - "description": "Display name shown on the profile.", + "example": "Robert Jones", "type": "string" }, - "threads_count": { - "description": "Number of threads the profile has posted.", + "red_cards": { + "example": 20, "type": "integer" }, - "url": { - "description": "URL of the profile on Threads.", + "slug": { + "example": "robert-jones", "type": "string" }, - "username": { - "description": "Threads username of the profile.", + "sport": { + "example": "football", "type": "string" - } - }, - "type": "object" - }, - "threads.ProfileMediaResult": { - "properties": { - "has_more": { - "description": "Whether Threads reports more public media beyond this page.", - "type": "boolean" - }, - "items": { - "description": "Public media posts, including image and video attachments when available.", - "items": { - "$ref": "#/definitions/threads.Thread" - }, - "type": "array" }, - "pagination_limited": { - "description": "True when Threads gates additional media behind login or exposes no supported continuation cursor.", - "type": "boolean" + "yellow_cards": { + "example": 1156, + "type": "integer" }, - "username": { - "description": "Profile whose public Media tab was read.", - "type": "string" + "yellow_red_cards": { + "example": 13, + "type": "integer" } }, "type": "object" }, - "threads.ProfilePostsResult": { + "sofascore.RefereeEventsResponse": { "properties": { - "has_more": { - "type": "boolean" + "count": { + "type": "integer" }, - "items": { + "events": { "items": { - "$ref": "#/definitions/threads.Thread" + "$ref": "#/definitions/sofascore.EventSummary" }, "type": "array" }, - "next_cursor": { - "description": "Cursor to pass to fetch the next page when Threads provides one.", + "fetched_at": { "type": "string" }, - "pagination_limited": { - "description": "True when Threads reports more posts but does not provide a usable cursor.", - "type": "boolean" - }, - "username": { - "type": "string" - } - }, - "type": "object" - }, - "threads.ProfileRepliesResult": { - "properties": { - "has_more": { - "description": "Whether Threads reports more public items beyond the first page.", + "has_next_page": { "type": "boolean" }, - "items": { - "description": "Public items exposed on that tab, preserving each item's actual author.", - "items": { - "$ref": "#/definitions/threads.Thread" - }, - "type": "array" + "page": { + "type": "integer" }, - "pagination_limited": { - "description": "True when Threads gates additional items behind login or exposes no supported continuation cursor.", - "type": "boolean" + "referee_id": { + "example": 74264, + "type": "integer" }, - "username": { - "description": "Profile whose public Replies tab was read.", + "source_url": { "type": "string" } }, "type": "object" }, - "threads.ProfileRepostsResult": { + "sofascore.RefereeResponse": { "properties": { - "has_more": { - "description": "Whether Threads reports more public items beyond the first page.", - "type": "boolean" - }, - "items": { - "description": "Public posts reposted by the profile, retaining their original authors.", - "items": { - "$ref": "#/definitions/threads.Thread" - }, - "type": "array" + "fetched_at": { + "type": "string" }, - "pagination_limited": { - "description": "True when Threads gates additional items behind login or exposes no supported continuation cursor.", - "type": "boolean" + "referee": { + "$ref": "#/definitions/sofascore.RefereeDetail" }, - "username": { - "description": "Profile whose public Reposts tab was read.", + "source_url": { "type": "string" } }, "type": "object" }, - "threads.ProfileTopicsResult": { + "sofascore.RefereeStatisticsResponse": { "properties": { - "items": { - "description": "Every topic tag exposed on the profile page.", + "competitions": { "items": { - "$ref": "#/definitions/threads.Topic" + "$ref": "#/definitions/sofascore.RefereeCompetitionStatistics" }, "type": "array" }, - "username": { - "description": "Profile whose public topic tags were read.", - "type": "string" - } - }, - "type": "object" - }, - "threads.RepliesResult": { - "properties": { - "code": { - "type": "string" - }, - "has_more": { - "description": "Whether Threads reports more replies beyond this page.", - "type": "boolean" - }, - "items": { - "description": "Replies to the post, each as a thread.", - "items": { - "$ref": "#/definitions/threads.Thread" - }, - "type": "array" + "count": { + "type": "integer" }, - "next_cursor": { - "description": "Cursor to pass to fetch the next page of replies.", + "fetched_at": { "type": "string" }, - "pagination_limited": { - "description": "True when more replies exist but Threads gives no usable cursor to fetch them.", - "type": "boolean" + "referee_id": { + "example": 74264, + "type": "integer" }, - "username": { - "description": "Username of the post's author.", + "source_url": { "type": "string" } }, "type": "object" }, - "threads.SearchResult": { + "sofascore.RoundEventsResponse": { "properties": { - "has_more": { - "description": "Whether more results are available after this page.", - "type": "boolean" + "count": { + "description": "Number of events returned.", + "type": "integer" }, - "items": { - "description": "Threads matching the search, one entry per post.", + "events": { + "description": "Fixtures in the round.", "items": { - "$ref": "#/definitions/threads.Thread" + "$ref": "#/definitions/sofascore.EventSummary" }, "type": "array" }, - "next_cursor": { - "description": "Cursor to pass to fetch the next page of results.", + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", "type": "string" }, - "pagination_limited": { - "description": "True when Threads gates further results behind login or provides no supported continuation.", + "has_next_page": { + "description": "True when more fixtures are available on a further page.", "type": "boolean" }, - "query": { - "description": "Search query that was run.", - "type": "string" - }, - "sort": { - "description": "Result ordering selected for the search.", - "type": "string" - } - }, - "type": "object" - }, - "threads.Thread": { - "properties": { - "author": { - "allOf": [ - { - "$ref": "#/definitions/threads.Author" - } - ], - "description": "Account that posted the thread." - }, - "code": { - "type": "string" - }, - "created_at": { - "description": "Time the thread was posted, in UTC (RFC 3339).", - "type": "string" - }, - "id": { - "description": "Threads post ID.", + "prefix": { + "description": "Round prefix, set for stages such as Qualification.", + "example": "Qualification", "type": "string" }, - "image_urls": { - "description": "URLs of the images attached to the thread.", - "items": { - "type": "string" - }, - "type": "array" - }, - "is_reply": { - "description": "Whether the thread is a reply to another thread.", - "type": "boolean" - }, - "like_count": { - "description": "Number of likes on the thread.", - "type": "integer" - }, - "quote_count": { - "description": "Number of times the thread was quoted.", - "type": "integer" - }, - "reply_count": { - "description": "Number of replies to the thread.", + "round": { + "description": "Round number.", "type": "integer" }, - "reply_to": { - "description": "Username of the account this thread replies to.", - "type": "string" - }, - "repost_count": { - "description": "Number of times the thread was reposted.", + "season_id": { + "description": "SofaScore season id.", "type": "integer" }, - "text": { - "description": "Text of the thread.", + "slug": { + "description": "Round slug, set for named rounds such as `round-of-16`.", + "example": "round-of-16", "type": "string" }, - "topic": { - "allOf": [ - { - "$ref": "#/definitions/threads.Topic" - } - ], - "description": "Public topic/community tag attached to the thread, when present." - }, - "url": { - "description": "URL of the thread on Threads.", + "source_url": { + "description": "SofaScore URL the data was read from.", "type": "string" }, - "video_urls": { - "description": "URLs of the videos attached to the thread.", - "items": { - "type": "string" - }, - "type": "array" + "tournament_id": { + "description": "Id of the competition (the unique tournament id).", + "type": "integer" } }, "type": "object" }, - "threads.Topic": { + "sofascore.RoundRef": { "properties": { - "community_emoji": { - "description": "Community reaction emoji, when present on a post tag.", - "type": "string" - }, - "community_favicon_url": { - "description": "Community icon URL, when present.", - "type": "string" - }, - "display_name": { - "description": "Topic label shown in Threads.", - "type": "string" - }, - "id": { - "description": "Numeric Threads topic tag identifier.", - "type": "string" - }, - "is_community": { - "description": "Whether Threads identifies this topic as a community.", - "type": "boolean" - }, "name": { - "description": "Canonical topic query returned on profile topic lists.", + "example": "Round of 16", "type": "string" }, - "search_query": { - "description": "Query to pair with ID when calling the topic search endpoint.", + "prefix": { + "example": "Qualification", "type": "string" }, - "tag_cluster_name": { - "description": "Topic cluster or category label, when present.", + "round": { + "example": 5, + "type": "integer" + }, + "slug": { + "example": "round-of-16", "type": "string" } }, "type": "object" }, - "threads.TopicSearchResult": { + "sofascore.ScheduledEventsResponse": { "properties": { - "has_more": { - "description": "Whether Threads reports another page.", - "type": "boolean" + "category_id": { + "type": "integer" }, - "items": { - "description": "Public threads matching the topic tag.", + "count": { + "type": "integer" + }, + "date": { + "example": "2026-10-08", + "type": "string" + }, + "events": { "items": { - "$ref": "#/definitions/threads.Thread" + "$ref": "#/definitions/sofascore.EventSummary" }, "type": "array" }, - "pagination_limited": { - "description": "True when Threads gates further results behind login or provides no supported continuation.", - "type": "boolean" - }, - "query": { - "description": "Search query used by the topic tag.", + "fetched_at": { "type": "string" }, - "topic_id": { - "description": "Numeric Threads topic tag identifier.", + "source_url": { "type": "string" } }, "type": "object" }, - "threads.postResponseDoc": { + "sofascore.ScheduledTournament": { "properties": { - "code": { - "example": 200, + "category_id": { + "example": 13, "type": "integer" }, - "data": { - "$ref": "#/definitions/threads.Post" - }, - "msg": { - "example": "OK", + "category_name": { + "example": "Brazil", "type": "string" - } - }, - "type": "object" - }, - "threads.profileMediaResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/threads.ProfileMediaResult" + "event_count": { + "description": "EventCount is the number of events that start on the requested UTC date.", + "example": 3, + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "threads.profilePostsResponseDoc": { - "properties": { - "code": { - "example": 200, + "id": { + "example": 83, "type": "integer" }, - "data": { - "$ref": "#/definitions/threads.ProfilePostsResult" + "name": { + "example": "Campeonato Brasileiro Série A", + "type": "string" }, - "msg": { - "example": "OK", + "slug": { "type": "string" - } - }, - "type": "object" - }, - "threads.profileRepliesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/threads.ProfileRepliesResult" + "unique_tournament_id": { + "example": 325, + "type": "integer" }, - "msg": { - "example": "OK", + "unique_tournament_name": { "type": "string" } }, "type": "object" }, - "threads.profileRepostsResponseDoc": { + "sofascore.ScheduledTournamentsResponse": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/threads.ProfileRepostsResult" + "date": { + "example": "2026-10-08", + "type": "string" }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "threads.profileResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/threads.Profile" + "has_next_page": { + "type": "boolean" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "threads.profileTopicsResponseDoc": { - "properties": { - "code": { - "example": 200, + "page": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/threads.ProfileTopicsResult" + "source_url": { + "type": "string" }, - "msg": { - "example": "OK", + "sport": { + "example": "football", "type": "string" + }, + "tournaments": { + "items": { + "$ref": "#/definitions/sofascore.ScheduledTournament" + }, + "type": "array" } }, "type": "object" }, - "threads.repliesResponseDoc": { + "sofascore.ScoreLine": { "properties": { - "code": { - "example": 200, + "current": { + "description": "Current score, which is the final score once the match is over.", "type": "integer" }, - "data": { - "$ref": "#/definitions/threads.RepliesResult" + "period1": { + "description": "Score in the first period.", + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "period2": { + "description": "Score in the second period.", + "type": "integer" } }, "type": "object" }, - "threads.searchResponseDoc": { + "sofascore.SearchResponse": { "properties": { - "code": { - "example": 200, + "count": { + "description": "Number of results returned.", "type": "integer" }, - "data": { - "$ref": "#/definitions/threads.SearchResult" + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "type": "string" }, - "msg": { - "example": "OK", + "query": { + "description": "Search query that was run.", "type": "string" - } - }, - "type": "object" - }, - "threads.topicSearchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/threads.TopicSearchResult" + "results": { + "description": "Matching teams, players and other entities. Empty when nothing matches.", + "items": { + "$ref": "#/definitions/sofascore.SearchResult" + }, + "type": "array" }, - "msg": { - "example": "OK", + "source_url": { + "description": "SofaScore URL the data was read from.", "type": "string" } }, "type": "object" }, - "ticketmaster.Attraction": { + "sofascore.SearchResult": { "properties": { - "classification": { - "$ref": "#/definitions/ticketmaster.Classification" - }, - "discovery_id": { - "example": "K8vZ9172Qo7", + "country": { + "description": "Country of the result.", "type": "string" }, - "has_artist_video": { - "type": "boolean" - }, "id": { - "example": "1688071", - "type": "string" + "description": "SofaScore id of the result. Which endpoints accept it depends on `type`.", + "type": "integer" }, - "image_url": { + "name": { + "description": "Name of the result.", "type": "string" }, - "name": { - "example": "Ariana Grande", + "slug": { + "description": "URL slug of the result on SofaScore.", "type": "string" }, - "setlist_source_url": { + "sport": { + "description": "Sport the result belongs to.", "type": "string" }, - "setlists": { - "items": { - "$ref": "#/definitions/ticketmaster.Setlist" - }, - "type": "array" + "team_id": { + "description": "For a player, the SofaScore id of their team.", + "type": "integer" }, - "synopsis": { + "team_name": { + "description": "For a player, the name of their team.", "type": "string" }, - "url": { + "type": { + "description": "Kind of result, for example `team` or `player`.", + "example": "team", "type": "string" } }, "type": "object" }, - "ticketmaster.AttractionRef": { + "sofascore.SearchTypedResponse": { "properties": { - "discovery_id": { - "example": "K8vZ9172Qo7", - "type": "string" - }, - "id": { - "example": "1688071", - "type": "string" + "count": { + "type": "integer" }, - "image_url": { + "fetched_at": { "type": "string" }, - "name": { - "example": "Ariana Grande", - "type": "string" + "page": { + "type": "integer" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "ticketmaster.AttractionRelatedResponse": { - "properties": { - "attraction_id": { - "example": "1688071", + "query": { "type": "string" }, - "attractions": { + "results": { "items": { - "$ref": "#/definitions/ticketmaster.AttractionRef" + "$ref": "#/definitions/sofascore.TypedSearchResult" }, "type": "array" }, - "count": { - "type": "integer" + "source_url": { + "type": "string" }, - "fetched_at": { + "sport": { "type": "string" }, - "source_url": { + "type": { + "example": "teams", "type": "string" } }, "type": "object" }, - "ticketmaster.AttractionResponse": { + "sofascore.Season": { "properties": { - "attraction": { - "$ref": "#/definitions/ticketmaster.Attraction" + "id": { + "description": "SofaScore season id. Pass it to the standings and round endpoints.", + "type": "integer" }, - "fetched_at": { + "name": { + "description": "Season name.", "type": "string" }, - "source_url": { + "year": { + "description": "Season label, for example 26/27.", "type": "string" } }, "type": "object" }, - "ticketmaster.AttractionReviewsResponse": { + "sofascore.SeasonEvent": { "properties": { - "ai_review_summary": { - "type": "string" - }, - "attraction_id": { - "example": "1688071", - "type": "string" + "away_score": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.ScoreLine" + } + ], + "description": "Away side's score, when available." }, - "average_rating": { - "example": 4.6, - "type": "number" + "away_team": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TeamRef" + } + ], + "description": "Away side." }, - "best_rating": { - "example": 5, - "type": "number" + "home_score": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.ScoreLine" + } + ], + "description": "Home side's score, when available." }, - "fetched_at": { - "type": "string" + "home_team": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TeamRef" + } + ], + "description": "Home side." }, - "limit": { - "example": 10, + "id": { + "description": "SofaScore event id. Use it with the event endpoints.", + "example": 14025013, "type": "integer" }, - "offset": { - "example": 0, + "round": { + "example": 3, "type": "integer" }, - "reviews": { - "items": { - "$ref": "#/definitions/ticketmaster.Review" - }, - "type": "array" - }, - "source_url": { + "round_name": { "type": "string" }, - "time_zone": { - "example": "America/New_York", + "slug": { + "description": "URL slug of the match on SofaScore.", "type": "string" }, - "total": { - "example": 2024, - "type": "integer" - } - }, - "type": "object" - }, - "ticketmaster.Classification": { - "properties": { - "genre": { - "example": "Pop", + "start_time": { + "description": "Start time in UTC (RFC 3339).", + "example": "2025-08-15T19:00:00Z", "type": "string" }, - "segment": { - "example": "Music", - "type": "string" + "start_timestamp": { + "description": "Start time as a Unix timestamp in seconds.", + "type": "integer" }, - "sub_genre": { - "example": "Electro Pop", - "type": "string" + "status": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.EventStatus" + } + ], + "description": "Current status of the match." }, - "sub_type": { - "example": "Musician", - "type": "string" + "tournament": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TournamentRef" + } + ], + "description": "Tournament and parent competition the match belongs to." }, - "type": { - "example": "Individual", - "type": "string" + "winner_code": { + "description": "Result code: 1 when the home side won, 2 when the away side won, 3 for a draw. Omitted until the match is decided.", + "type": "integer" } }, "type": "object" }, - "ticketmaster.DiscoverCategoriesResponse": { + "sofascore.SeasonEventsResponse": { "properties": { - "categories": { + "count": { + "type": "integer" + }, + "direction": { + "example": "next", + "type": "string" + }, + "events": { "items": { - "$ref": "#/definitions/ticketmaster.DiscoverCategory" + "$ref": "#/definitions/sofascore.SeasonEvent" }, "type": "array" }, - "count": { - "type": "integer" - }, "fetched_at": { "type": "string" }, + "has_next_page": { + "type": "boolean" + }, "page": { "type": "integer" }, - "per_page": { + "season_id": { "type": "integer" }, - "section": { + "source_url": { "type": "string" }, - "source_urls": { - "items": { - "type": "string" - }, - "type": "array" - }, - "total": { + "tournament_id": { "type": "integer" } }, "type": "object" }, - "ticketmaster.DiscoverCategory": { + "sofascore.SeasonHeatmapPoint": { "properties": { - "id": { - "type": "string" - }, - "major": { - "type": "boolean" - }, - "name": { - "type": "string" + "count": { + "example": 1, + "type": "integer" }, - "section": { - "type": "string" + "x": { + "example": 71, + "type": "number" }, - "url": { - "type": "string" + "y": { + "example": 42, + "type": "number" } }, "type": "object" }, - "ticketmaster.DiscoverCitiesResponse": { + "sofascore.SeasonInfo": { "properties": { - "cities": { - "items": { - "$ref": "#/definitions/ticketmaster.DiscoverCity" - }, - "type": "array" + "away_team_wins": { + "type": "integer" }, - "count": { + "draws": { "type": "integer" }, - "country": { - "type": "string" + "goals": { + "type": "integer" }, - "fetched_at": { + "home_team_wins": { + "type": "integer" + }, + "id": { + "example": 96668, + "type": "integer" + }, + "name": { + "example": "Premier League 26/27", "type": "string" }, - "page": { + "newcomers_lower_division": { + "items": { + "$ref": "#/definitions/sofascore.TeamRef" + }, + "type": "array" + }, + "newcomers_other": { + "items": { + "$ref": "#/definitions/sofascore.TeamRef" + }, + "type": "array" + }, + "newcomers_upper_division": { + "items": { + "$ref": "#/definitions/sofascore.TeamRef" + }, + "type": "array" + }, + "number_of_competitors": { "type": "integer" }, - "per_page": { + "red_cards": { "type": "integer" }, - "source_url": { + "year": { + "example": "26/27", "type": "string" }, - "total": { + "yellow_cards": { "type": "integer" } }, "type": "object" }, - "ticketmaster.DiscoverCity": { + "sofascore.SeasonTeam": { "properties": { "country": { + "example": "England", "type": "string" }, - "image_url": { + "country_code": { + "example": "EN", "type": "string" }, - "locale": { + "gender": { + "example": "M", "type": "string" }, + "id": { + "example": 42, + "type": "integer" + }, "name": { + "example": "Arsenal", + "type": "string" + }, + "name_code": { + "example": "ARS", + "type": "string" + }, + "national": { + "type": "boolean" + }, + "ranking": { + "type": "integer" + }, + "short_name": { + "example": "Arsenal", "type": "string" }, "slug": { + "example": "arsenal", "type": "string" }, - "url": { + "sport": { + "example": "football", "type": "string" + }, + "type": { + "description": "Type is the upstream competitor type: 0 for a team, 1 for an individual\nplayer; other codes (for example doubles pairs) are passed through.", + "example": 0, + "type": "integer" + }, + "user_count": { + "type": "integer" } }, "type": "object" }, - "ticketmaster.EventDetail": { + "sofascore.Shot": { "properties": { - "attractions": { - "items": { - "$ref": "#/definitions/ticketmaster.AttractionRef" - }, - "type": "array" - }, - "cancelled": { - "type": "boolean" - }, - "classification": { - "$ref": "#/definitions/ticketmaster.Classification" - }, - "currency": { - "example": "USD", - "type": "string" + "added_time": { + "example": 4, + "type": "integer" }, - "description": { - "type": "string" + "block_coordinates": { + "$ref": "#/definitions/sofascore.Coordinates" }, - "discovery_id": { - "example": "vv1A7ZkG_GkdqBxS4", + "body_part": { + "example": "right-foot", "type": "string" }, - "event_change_status": { - "example": "none", - "type": "string" + "coordinates": { + "$ref": "#/definitions/sofascore.Coordinates" }, - "event_type": { - "example": "STANDARD", - "type": "string" + "goal_mouth_coordinates": { + "$ref": "#/definitions/sofascore.Coordinates" }, - "id": { - "example": "04006319DDEA2CD5", + "goal_mouth_location": { + "example": "low-left", "type": "string" }, - "image_url": { + "goal_type": { + "example": "regular", "type": "string" }, - "limited_availability": { - "type": "boolean" + "goalkeeper": { + "$ref": "#/definitions/sofascore.PlayerBrief" }, - "onsale_time": { - "example": "2025-09-10T15:00:00Z", - "type": "string" + "id": { + "type": "integer" }, - "postponed": { + "is_home": { "type": "boolean" }, - "presales": { - "items": { - "$ref": "#/definitions/ticketmaster.Presale" - }, - "type": "array" + "minute": { + "example": 90, + "type": "integer" }, - "product_type": { - "example": "General", + "outcome": { + "example": "saved", "type": "string" }, - "rescheduled": { - "type": "boolean" - }, - "seatmap_url": { + "period": { + "example": "1ST", "type": "string" }, - "sold_out": { - "type": "boolean" + "period_time_seconds": { + "example": 458, + "type": "integer" }, - "start_time": { - "example": "2026-08-04T02:00:00Z", - "type": "string" + "player": { + "$ref": "#/definitions/sofascore.PlayerBrief" }, - "tba": { - "type": "boolean" + "player_coordinates": { + "$ref": "#/definitions/sofascore.Coordinates" }, - "ticketing_status": { - "example": "UNKNOWN", - "type": "string" + "reversed_period_time_seconds": { + "example": 742, + "type": "integer" }, - "time_zone": { - "example": "America/Chicago", + "shot_type": { + "example": "goal", "type": "string" }, - "title": { - "example": "Ariana Grande - The Eternal Sunshine Tour", + "situation": { + "example": "assisted", "type": "string" }, - "url": { + "strength": { + "example": "powerplay", "type": "string" }, - "venue": { - "$ref": "#/definitions/ticketmaster.VenueRef" + "team": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TeamRef" + } + ], + "description": "Ice hockey fields. Hockey shots carry the shooting team, an outcome, the\nstrength situation and the period clock instead of a minute, and one\nrink position instead of pitch and goal-mouth coordinates." }, - "virtual": { - "type": "boolean" + "time_seconds": { + "type": "integer" + }, + "xg": { + "example": 0.19, + "type": "number" + }, + "xgot": { + "example": 0.08, + "type": "number" } }, "type": "object" }, - "ticketmaster.EventResponse": { + "sofascore.ShotLocation": { "properties": { - "event": { - "$ref": "#/definitions/ticketmaster.EventDetail" + "made": { + "type": "integer" }, - "fetched_at": { - "type": "string" + "missed": { + "type": "integer" }, - "source_url": { - "type": "string" + "saved": { + "type": "integer" + }, + "x": { + "type": "integer" + }, + "y": { + "type": "integer" } }, "type": "object" }, - "ticketmaster.EventSummary": { + "sofascore.SportEntry": { "properties": { - "attractions": { - "items": { - "$ref": "#/definitions/ticketmaster.AttractionRef" - }, - "type": "array" - }, - "cancelled": { - "type": "boolean" - }, - "discovery_id": { - "example": "vv1A7ZkG_GkdqBxS4", + "key": { + "example": "football", "type": "string" }, - "event_change_status": { - "example": "none", - "type": "string" + "live_events": { + "example": 3, + "type": "integer" }, - "id": { - "example": "04006319DDEA2CD5", + "name": { + "example": "Football", "type": "string" }, - "image_url": { - "type": "string" + "total_events": { + "example": 1441, + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.SportsResponse": { + "properties": { + "count": { + "example": 24, + "type": "integer" }, - "limited_availability": { + "counts_available": { + "description": "CountsAvailable is false when the live count feed could not be read; the\nsport list itself is always complete.", "type": "boolean" }, - "onsale_time": { - "example": "2025-09-10T15:00:00Z", + "fetched_at": { "type": "string" }, - "postponed": { - "type": "boolean" + "source_url": { + "type": "string" }, - "presales": { + "sports": { "items": { - "$ref": "#/definitions/ticketmaster.Presale" + "$ref": "#/definitions/sofascore.SportEntry" }, "type": "array" - }, - "rescheduled": { - "type": "boolean" - }, - "seatmap_url": { - "type": "string" - }, - "sold_out": { - "type": "boolean" - }, - "start_time": { - "example": "2026-08-04T02:00:00Z", - "type": "string" - }, - "tba": { - "type": "boolean" - }, - "ticketing_status": { - "example": "UNKNOWN", - "type": "string" - }, - "time_zone": { - "example": "America/Chicago", - "type": "string" - }, - "title": { - "example": "Ariana Grande - The Eternal Sunshine Tour", - "type": "string" - }, - "url": { - "type": "string" - }, - "venue": { - "$ref": "#/definitions/ticketmaster.VenueRef" - }, - "virtual": { - "type": "boolean" } }, "type": "object" }, - "ticketmaster.EventsResponse": { + "sofascore.SquadPlayer": { "properties": { - "count": { - "example": 20, - "type": "integer" + "country": { + "description": "Player's country.", + "type": "string" }, - "entity_id": { + "date_of_birth": { + "description": "Date of birth (RFC 3339).", "type": "string" }, - "events": { - "items": { - "$ref": "#/definitions/ticketmaster.EventSummary" - }, - "type": "array" + "height": { + "description": "Height in centimetres.", + "type": "integer" }, - "fetched_at": { + "id": { + "description": "SofaScore player id. Use it with the player endpoints.", + "type": "integer" + }, + "jersey_number": { + "description": "Shirt number.", "type": "string" }, - "page": { + "market_value": { + "description": "SofaScore's estimated market value, in units of `market_value_currency`. Omitted when unavailable.", "type": "integer" }, - "query": { + "market_value_currency": { + "description": "Currency of `market_value`, for example EUR.", "type": "string" }, - "sort": { - "example": "date", + "name": { + "description": "Player's full name.", "type": "string" }, - "source_url": { + "position": { + "description": "Position code, for example G, D, M or F.", "type": "string" }, - "total": { - "example": 28, - "type": "integer" - } - }, - "type": "object" - }, - "ticketmaster.Presale": { - "properties": { - "end_time": { - "example": "2025-09-10T03:00:00Z", + "preferred_foot": { + "description": "Preferred foot, for example \"Right\".", "type": "string" }, - "name": { - "example": "Artist Presale", + "short_name": { + "description": "Shortened name, for example \"E. Haaland\".", "type": "string" }, - "start_time": { - "example": "2025-09-09T15:00:00Z", + "slug": { + "description": "URL slug of the player on SofaScore.", "type": "string" } }, "type": "object" }, - "ticketmaster.Review": { + "sofascore.Stage": { "properties": { - "city": { - "example": "Chicago", - "type": "string" + "competition": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.StageCompetition" + } + ], + "description": "Competition is the series this stage belongs to." }, - "date_created": { - "example": "2026-08-14T16:14:29Z", + "country": { + "example": "Azerbaijan", "type": "string" }, - "nick_name": { - "example": "Lynn", + "country_code": { + "example": "AZ", "type": "string" }, - "rating": { - "example": 5, + "end_timestamp": { + "description": "EndTimestamp is omitted when SofaScore publishes none or one before the start.", "type": "integer" }, - "review": { - "type": "string" + "id": { + "example": 214258, + "type": "integer" }, - "title": { - "example": "Best concert of my life", - "type": "string" + "info": { + "$ref": "#/definitions/sofascore.StageInfo" }, - "venue": { - "example": "United Center", - "type": "string" - } - }, - "type": "object" - }, - "ticketmaster.Setlist": { - "properties": { - "city_name": { - "example": "London", + "name": { + "example": "Grand Prix", "type": "string" }, - "country_name": { - "example": "United Kingdom", - "type": "string" + "on_date": { + "description": "OnDate is true when at least one session of the event starts inside the\nrequested UTC day (stage-schedule only).", + "type": "boolean" }, - "event_date": { - "example": "2026-08-20", - "type": "string" + "parent": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.StageRef" + } + ], + "description": "Parent is the season of an event, the event of a session, and so on." }, - "sets": { + "parts": { + "description": "Parts are the qualifying or practice parts of a session (substages only).", "items": { - "$ref": "#/definitions/ticketmaster.SetlistSet" + "$ref": "#/definitions/sofascore.StageSession" }, "type": "array" }, - "tour_name": { - "example": "Eternal Sunshine", + "season_name": { + "example": "Formula 1 2026", "type": "string" }, - "venue_name": { - "example": "The O2 Arena", - "type": "string" - } - }, - "type": "object" - }, - "ticketmaster.SetlistSet": { - "properties": { - "name": { - "example": "Act I", - "type": "string" + "sequence": { + "description": "Sequence orders practice sessions and cycling stages within their event.", + "example": 1, + "type": "integer" }, - "songs": { + "session": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.StageSession" + } + ], + "description": "Session is the session SofaScore highlights for an event: the live,\nnext or latest one (schedule routes only)." + }, + "session_start_timestamps": { + "description": "SessionStartTimestamps lists every session start of an event (schedule\nroutes only).", "items": { - "$ref": "#/definitions/ticketmaster.SetlistSong" + "type": "integer" }, "type": "array" - } - }, - "type": "object" - }, - "ticketmaster.SetlistSong": { - "properties": { - "name": { - "example": "thank u, next", - "type": "string" - }, - "original_artist": { - "example": "Lady Gaga", - "type": "string" }, - "performance_notes": { - "example": "extended outro", + "slug": { + "example": "grand-prix", "type": "string" }, - "pre_recorded": { - "type": "boolean" - } - }, - "type": "object" - }, - "ticketmaster.Suggestion": { - "properties": { - "category": { + "start_time": { + "example": "2026-09-26T11:00:00Z", "type": "string" }, - "event_count": { + "start_timestamp": { + "example": 1790420400, "type": "integer" }, - "image_url": { - "type": "string" - }, - "title": { - "type": "string" + "status": { + "$ref": "#/definitions/sofascore.StageStatus" }, "type": { - "type": "string" + "$ref": "#/definitions/sofascore.StageType" }, - "url": { + "winner": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.StageEntity" + } + ], + "description": "Winner is set once the stage has a winner; for practice and qualifying it is the fastest competitor." + }, + "year": { + "example": "2026", "type": "string" } }, "type": "object" }, - "ticketmaster.SuggestionsResponse": { + "sofascore.StageCategoriesResponse": { "properties": { + "categories": { + "items": { + "$ref": "#/definitions/sofascore.StageCategory" + }, + "type": "array" + }, "count": { + "example": 28, "type": "integer" }, "fetched_at": { "type": "string" }, - "query": { - "type": "string" - }, "source_url": { "type": "string" }, - "suggestions": { - "items": { - "$ref": "#/definitions/ticketmaster.Suggestion" - }, - "type": "array" + "sport": { + "example": "motorsport", + "type": "string" } }, "type": "object" }, - "ticketmaster.TrendingAttraction": { + "sofascore.StageCategory": { "properties": { - "discovery_id": { - "example": "K8vZ9172Qo7", - "type": "string" - }, - "genre": { - "example": "Pop", - "type": "string" + "competitions": { + "items": { + "$ref": "#/definitions/sofascore.StageCompetition" + }, + "type": "array" }, - "genre_id": { - "example": "KnvZfZ7vAev", + "flag": { + "example": "formula-1", "type": "string" }, "id": { - "example": "1688071", - "type": "string" + "example": 36, + "type": "integer" }, - "image_url": { + "name": { + "example": "Formula 1", "type": "string" }, - "images": { - "items": { - "$ref": "#/definitions/ticketmaster.TrendingAttractionImage" - }, - "type": "array" + "priority": { + "example": 13, + "type": "integer" }, - "name": { - "example": "Ariana Grande", + "slug": { + "example": "formula-1", + "type": "string" + } + }, + "type": "object" + }, + "sofascore.StageCompetition": { + "properties": { + "category_id": { + "example": 36, + "type": "integer" + }, + "category_name": { + "example": "Formula 1", "type": "string" }, - "rank": { - "example": 1, + "id": { + "example": 40, "type": "integer" }, - "segment": { - "example": "Music", + "name": { + "example": "Formula 1", "type": "string" }, - "segment_id": { - "example": "KZFzniwnSyZfZ7v7nJ", + "slug": { + "example": "formula-1", "type": "string" }, - "url": { + "sport": { + "example": "motorsport", "type": "string" } }, "type": "object" }, - "ticketmaster.TrendingAttractionImage": { + "sofascore.StageDetailResponse": { "properties": { - "ratio": { - "example": "16_9", + "fetched_at": { "type": "string" }, - "url": { + "source_url": { "type": "string" + }, + "stage": { + "$ref": "#/definitions/sofascore.Stage" } }, "type": "object" }, - "ticketmaster.TrendingAttractionsResponse": { + "sofascore.StageDriverPerformanceResponse": { "properties": { - "attractions": { + "competitors": { "items": { - "$ref": "#/definitions/ticketmaster.TrendingAttraction" + "$ref": "#/definitions/sofascore.StagePerformance" }, "type": "array" }, "count": { - "example": 10, "type": "integer" }, "fetched_at": { @@ -232474,837 +238022,968 @@ }, "source_url": { "type": "string" + }, + "stage": { + "$ref": "#/definitions/sofascore.Stage" + }, + "stage_id": { + "example": 214258, + "type": "integer" } }, "type": "object" }, - "ticketmaster.Venue": { + "sofascore.StageEntity": { "properties": { - "address": { - "example": "1901 W Madison", - "type": "string" - }, - "city": { - "example": "Chicago", + "code": { + "description": "Code is the three-letter timing code (for example RUS), when published.", + "example": "RUS", "type": "string" }, - "city_categories": { - "items": { - "$ref": "#/definitions/ticketmaster.VenueCityCategory" - }, - "type": "array" - }, "country": { - "example": "US", + "example": "United Kingdom", "type": "string" }, - "discovery_id": { - "example": "KovZpa2M7e", + "country_code": { + "example": "GB", "type": "string" }, "id": { - "example": "32882", - "type": "string" + "example": 271315, + "type": "integer" }, - "image_url": { + "kind": { + "description": "Kind is individual for a driver or rider and team for a team or constructor.", + "example": "individual", "type": "string" }, - "info": { - "items": { - "$ref": "#/definitions/ticketmaster.VenueInfoBlock" - }, - "type": "array" - }, - "latitude": { - "example": 41.881244, - "type": "number" - }, - "longitude": { - "example": -87.674274, - "type": "number" - }, "name": { - "example": "United Center", - "type": "string" - }, - "postal_code": { - "example": "60612", + "example": "George Russell", "type": "string" }, - "seat_maps": { - "items": { - "$ref": "#/definitions/ticketmaster.VenueSeatMap" - }, - "type": "array" - }, - "state": { - "example": "IL", + "short_name": { + "example": "G. Russell", "type": "string" }, - "time_zone": { - "example": "America/Chicago", + "slug": { + "example": "russell-george", "type": "string" }, - "url": { - "type": "string" + "team": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.StageTeamRef" + } + ], + "description": "Team is the team or constructor of an individual competitor." } }, "type": "object" }, - "ticketmaster.VenueCityCategory": { + "sofascore.StageFeaturedResponse": { "properties": { - "id": { - "example": "KZFzniwnSyZfZ7v7nJ", - "type": "string" + "count": { + "type": "integer" }, - "name": { - "example": "Concerts", + "fetched_at": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "ticketmaster.VenueEnhancedDetailsResponse": { - "properties": { - "fetched_at": { + "source_url": { "type": "string" }, - "header_image_url": { + "sport": { + "example": "motorsport", "type": "string" }, - "related_links": { + "stages": { "items": { - "$ref": "#/definitions/ticketmaster.VenueRelatedLink" + "$ref": "#/definitions/sofascore.Stage" }, "type": "array" - }, - "source_url": { - "type": "string" - }, - "venue_id": { - "example": "32882", - "type": "string" } }, "type": "object" }, - "ticketmaster.VenueInfoBlock": { + "sofascore.StageInfo": { "properties": { - "name": { - "example": "Parking", - "type": "string" + "actual_distance": { + "example": 400.5, + "type": "number" }, - "text": { - "type": "string" - } - }, - "type": "object" - }, - "ticketmaster.VenueRef": { - "properties": { - "address": { - "example": "1901 W Madison", + "air_temperature": { + "description": "AirTemperature and TrackTemperature are degrees Celsius; Humidity is a percentage.", + "example": 26.5, + "type": "number" + }, + "arrival_city": { + "example": "Kampar", "type": "string" }, - "city": { - "example": "Chicago", + "average_speed": { + "example": 147.363, + "type": "number" + }, + "caution_laps": { + "example": 21, + "type": "integer" + }, + "cautions": { + "example": 4, + "type": "integer" + }, + "circuit": { + "example": "Baku City Circuit", "type": "string" }, - "country": { - "example": "US", + "circuit_city": { + "example": "Baku", "type": "string" }, - "discovery_id": { - "example": "KovZpa2M7e", + "circuit_country": { + "example": "Azerbaijan", "type": "string" }, - "id": { - "example": "32882", + "circuit_length_m": { + "example": 6003, + "type": "number" + }, + "departure_city": { + "example": "Shah Alam", "type": "string" }, - "image_url": { + "discipline": { + "description": "Cycling facts.", + "example": "Category Pro", "type": "string" }, - "latitude": { - "example": 41.881244, + "distance": { + "description": "NASCAR facts. Distances use the series' own unit (miles).", + "example": 400, "type": "number" }, - "longitude": { - "example": -87.674274, + "elapsed_time": { + "example": "2:43:04", + "type": "string" + }, + "humidity": { + "example": 50.4, "type": "number" }, - "name": { - "example": "United Center", + "lap_record": { + "example": "1:44.916", "type": "string" }, - "postal_code": { - "example": "60612", - "type": "string" + "laps": { + "description": "Laps is the scheduled lap count and LapsCompleted the laps actually run.", + "example": 51, + "type": "integer" }, - "state": { - "example": "IL", - "type": "string" + "laps_completed": { + "example": 51, + "type": "integer" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "ticketmaster.VenueRelatedLink": { - "properties": { - "image_url": { - "type": "string" + "lead_changes": { + "example": 12, + "type": "integer" }, - "title": { - "example": "Chicago Bulls", - "type": "string" + "race_distance_m": { + "description": "RaceDistanceM and CircuitLengthM are in metres.", + "example": 306049, + "type": "number" }, - "url": { + "race_segments": { + "description": "RaceSegments is the number of scored segments in a NASCAR race.", + "example": 2, + "type": "integer" + }, + "race_type": { + "example": "normal", "type": "string" - } - }, - "type": "object" - }, - "ticketmaster.VenueResponse": { - "properties": { - "fetched_at": { + }, + "round": { + "description": "Round is the championship round of an event, or the stage number within a\ncycling race or rally; practice, qualifying and race sessions carry none.", + "example": 15, + "type": "integer" + }, + "safety_car": { + "type": "boolean" + }, + "special_stages": { + "description": "SpecialStages is the number of special stages of a rally (0 for a canceled rally).", + "example": 17, + "type": "integer" + }, + "stage_day": { + "description": "StageDay is the weekday label (THU, FRI, SAT, SUN) of a rally stage or race-weekend session.", + "example": "FRI", "type": "string" }, - "source_url": { + "summary": { "type": "string" }, - "venue": { - "$ref": "#/definitions/ticketmaster.Venue" - } - }, - "type": "object" - }, - "ticketmaster.VenueSeatMap": { - "properties": { - "image_url": { + "track_condition": { + "example": "Dry", "type": "string" }, - "name": { - "example": "Chicago Bulls", + "track_temperature": { + "example": 40.1, + "type": "number" + }, + "weather": { + "example": "sunny", "type": "string" } }, "type": "object" }, - "ticketmaster.attractionRelatedResponseDoc": { + "sofascore.StageLap": { "properties": { - "code": { - "example": 200, + "lap": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/ticketmaster.AttractionRelatedResponse" + "pit_stop": { + "type": "boolean" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "ticketmaster.attractionResponseDoc": { - "properties": { - "code": { - "example": 200, + "position": { + "description": "Position is omitted on the lap a competitor retired.", + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/ticketmaster.AttractionResponse" + "retired": { + "type": "boolean" }, - "msg": { - "example": "OK", + "tyre_type": { + "example": "M", "type": "string" } }, "type": "object" }, - "ticketmaster.attractionReviewsResponseDoc": { + "sofascore.StagePerformance": { "properties": { - "code": { - "example": 200, - "type": "integer" + "competitor": { + "$ref": "#/definitions/sofascore.StageEntity" }, - "data": { - "$ref": "#/definitions/ticketmaster.AttractionReviewsResponse" + "laps": { + "description": "Laps is set for circuit races.", + "items": { + "$ref": "#/definitions/sofascore.StageLap" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "stage_positions": { + "description": "StagePositions is set for rallies.", + "items": { + "$ref": "#/definitions/sofascore.StageSpecialStagePosition" + }, + "type": "array" + }, + "start_number": { + "example": 63, + "type": "integer" } }, "type": "object" }, - "ticketmaster.categoriesResponseDoc": { + "sofascore.StageRef": { "properties": { - "code": { + "id": { + "example": 214253, "type": "integer" }, - "data": { - "$ref": "#/definitions/ticketmaster.DiscoverCategoriesResponse" + "name": { + "example": "Azerbaijan GP", + "type": "string" }, - "msg": { + "slug": { + "example": "azerbaijan-gp", "type": "string" + }, + "start_timestamp": { + "type": "integer" } }, "type": "object" }, - "ticketmaster.citiesResponseDoc": { + "sofascore.StageScheduleResponse": { "properties": { - "code": { + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/ticketmaster.DiscoverCitiesResponse" + "date": { + "example": "2026-10-04", + "type": "string" }, - "msg": { + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "ticketmaster.eventResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/ticketmaster.EventResponse" + "source_url": { + "type": "string" }, - "msg": { - "example": "OK", + "sport": { + "example": "motorsport", "type": "string" + }, + "stages": { + "items": { + "$ref": "#/definitions/sofascore.Stage" + }, + "type": "array" } }, "type": "object" }, - "ticketmaster.eventsResponseDoc": { + "sofascore.StageSeason": { "properties": { - "code": { - "example": 200, + "end_timestamp": { + "description": "EndTimestamp is omitted for the season still in progress.", + "example": 1765119600, "type": "integer" }, - "data": { - "$ref": "#/definitions/ticketmaster.EventsResponse" + "id": { + "example": 214140, + "type": "integer" }, - "msg": { - "example": "OK", + "name": { + "example": "Formula 1 2026", "type": "string" - } - }, - "type": "object" - }, - "ticketmaster.suggestionsResponseDoc": { - "properties": { - "code": { - "type": "integer" }, - "data": { - "$ref": "#/definitions/ticketmaster.SuggestionsResponse" + "slug": { + "example": "formula-1-2026", + "type": "string" }, - "msg": { + "start_timestamp": { + "example": 1767254187, + "type": "integer" + }, + "year": { + "example": "2026", "type": "string" } }, "type": "object" }, - "ticketmaster.trendingAttractionsResponseDoc": { + "sofascore.StageSeasonsResponse": { "properties": { - "code": { - "example": 200, + "competition": { + "$ref": "#/definitions/sofascore.StageCompetition" + }, + "count": { + "example": 77, "type": "integer" }, - "data": { - "$ref": "#/definitions/ticketmaster.TrendingAttractionsResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "seasons": { + "items": { + "$ref": "#/definitions/sofascore.StageSeason" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "ticketmaster.venueEnhancedDetailsResponseDoc": { + "sofascore.StageSession": { "properties": { - "code": { - "example": 200, + "id": { + "example": 214258, "type": "integer" }, - "data": { - "$ref": "#/definitions/ticketmaster.VenueEnhancedDetailsResponse" + "name": { + "example": "Grand Prix", + "type": "string" }, - "msg": { - "example": "OK", + "sequence": { + "example": 1, + "type": "integer" + }, + "slug": { + "example": "grand-prix", "type": "string" + }, + "start_timestamp": { + "example": 1790420400, + "type": "integer" + }, + "status": { + "$ref": "#/definitions/sofascore.StageStatus" + }, + "type": { + "$ref": "#/definitions/sofascore.StageType" } }, "type": "object" }, - "ticketmaster.venueResponseDoc": { + "sofascore.StageSpecialStagePosition": { "properties": { - "code": { - "example": 200, + "position": { + "example": 3, "type": "integer" }, - "data": { - "$ref": "#/definitions/ticketmaster.VenueResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "stage": { + "example": 1, + "type": "integer" } }, "type": "object" }, - "ticketweb.Attraction": { + "sofascore.StageStanding": { "properties": { - "category": { - "example": "Arts & Theater", - "type": "string" + "bonus_points": { + "type": "number" }, - "genre": { - "example": "Comedy", + "comment": { + "example": "Retired", "type": "string" }, - "id": { - "type": "string" + "competitor": { + "$ref": "#/definitions/sofascore.StageEntity" }, - "image_url": { - "type": "string" + "did_not_finish": { + "description": "DidNotFinish is 1 in a race row for a competitor who did not finish; in a\nNASCAR season row it counts the races not finished.", + "example": 1, + "type": "integer" }, - "name": { - "example": "Comedy Beast", - "type": "string" - } - }, - "type": "object" - }, - "ticketweb.DeliveryMethod": { - "properties": { - "description": { - "type": "string" + "distance": { + "description": "Distance is the distance covered in a NASCAR race, in the series' unit (miles).", + "example": 400, + "type": "number" }, - "fee": { - "example": "Free", + "fastest_lap_time": { + "example": "1:44.916", "type": "string" }, - "name": { - "example": "eTickets", + "fastest_laps": { + "description": "FastestLaps is the number of fastest laps (race row) or fastest laps of the season (season row).", + "example": 1, + "type": "integer" + }, + "gap": { + "description": "Gap is the time behind the leader, or DNF (did not finish) or DNS (did not start).", + "example": "+0.196", "type": "string" - } - }, - "type": "object" - }, - "ticketweb.EventDetail": { - "properties": { - "age_restriction": { - "example": 18, + }, + "grid_position": { + "description": "GridPosition is the starting grid slot of a race.", + "example": 1, "type": "integer" }, - "age_restriction_message": { - "example": "Ages 18+", + "interval": { + "description": "Interval is the time behind the competitor ahead.", + "example": "+0.196", "type": "string" }, - "announce_time": { + "jersey": { + "description": "Jersey is the classification jersey a cycling rider wears (general for the overall leader).", + "example": "general", "type": "string" }, - "attractions": { - "items": { - "$ref": "#/definitions/ticketweb.Attraction" - }, - "type": "array" + "laps": { + "example": 51, + "type": "integer" }, - "currency": { - "example": "USD", - "type": "string" + "laps_behind": { + "type": "integer" }, - "delivery_methods": { - "items": { - "$ref": "#/definitions/ticketweb.DeliveryMethod" - }, - "type": "array" + "laps_led": { + "example": 51, + "type": "integer" }, - "description": { - "type": "string" + "personal_fastest_lap": { + "example": 49, + "type": "integer" }, - "end_time": { + "personal_fastest_lap_time": { + "example": "1:44.916", "type": "string" }, - "has_tickets": { - "example": true, - "type": "boolean" + "pit_stops": { + "example": 2, + "type": "integer" }, - "id": { - "example": "14241184", + "podiums": { + "example": 13, + "type": "integer" + }, + "points": { + "description": "Points are omitted when the row earned none published.", + "example": 25, + "type": "number" + }, + "pole_positions": { + "example": 6, + "type": "integer" + }, + "position": { + "description": "Position is the classified position. It is omitted for competitors who\ndid not finish or set no time.", + "example": 1, + "type": "integer" + }, + "races_started": { + "example": 16, + "type": "integer" + }, + "races_with_points": { + "example": 14, + "type": "integer" + }, + "rank": { + "description": "Rank is the points rank of a NASCAR classification, which can differ from Position.", + "type": "integer" + }, + "start_number": { + "description": "StartNumber is the car, bike or bib number.", + "example": 63, + "type": "integer" + }, + "status": { + "description": "Status is Finished, Out or Did not start; SubStatus gives the reason (Retired, Did not start); Comment is free text.", + "example": "Out", "type": "string" }, - "image_url": { + "sub_status": { + "example": "Retired", "type": "string" }, - "name": { - "example": "Comedy Beast", + "time": { + "description": "Time is the race time, the best lap of a practice or qualifying session, or a stage time.\nSome series (IndyCar) publish the time behind the winner here for every row but the first.", + "example": "1:38:02.143", "type": "string" }, - "on_sale_time": { - "example": "2026-07-01T12:05:00.000-05:00", + "top10": { + "type": "integer" + }, + "top5": { + "type": "integer" + }, + "total_time": { + "example": "28:57:04", "type": "string" }, - "price_range": { - "$ref": "#/definitions/ticketweb.PriceRange" + "tyre_state": { + "example": "Used", + "type": "string" }, - "sections": { + "tyre_stints": { "items": { - "$ref": "#/definitions/ticketweb.TicketSection" + "$ref": "#/definitions/sofascore.StageTyreStint" }, "type": "array" }, - "start_time": { - "example": "2026-08-25T19:30:00.000-05:00", - "type": "string" - }, - "terms_and_conditions": { + "tyre_type": { + "description": "TyreType is the compound code at the finish (S, M observed); TyreStints lists every stint.", + "example": "S", "type": "string" }, - "url": { - "type": "string" + "updated_timestamp": { + "description": "UpdatedTimestamp is when SofaScore last updated the row (Unix seconds).", + "example": 1790428823, + "type": "integer" }, - "venue": { - "$ref": "#/definitions/ticketweb.EventVenue" + "victories": { + "description": "Season championship totals.", + "example": 8, + "type": "integer" } }, "type": "object" }, - "ticketweb.EventResponse": { + "sofascore.StageStandingsResponse": { "properties": { - "event": { - "$ref": "#/definitions/ticketweb.EventDetail" + "count": { + "type": "integer" }, "fetched_at": { "type": "string" }, "source_url": { "type": "string" + }, + "stage_id": { + "example": 214258, + "type": "integer" + }, + "standings": { + "items": { + "$ref": "#/definitions/sofascore.StageStanding" + }, + "type": "array" + }, + "type": { + "example": "competitor", + "type": "string" } }, "type": "object" }, - "ticketweb.EventSummary": { + "sofascore.StageStatus": { "properties": { - "availability": { - "enum": [ - "in_stock", - "sold_out", - "unknown" - ], - "example": "in_stock", - "type": "string" - }, - "id": { - "example": "14241184", + "description": { + "example": "Finished", "type": "string" }, - "image_url": { + "type": { + "example": "finished", "type": "string" + } + }, + "type": "object" + }, + "sofascore.StageSubstagesResponse": { + "properties": { + "count": { + "type": "integer" }, - "name": { - "example": "Comedy Beast", + "fetched_at": { "type": "string" }, - "start_time": { - "example": "2026-08-25T19:30", + "source_url": { "type": "string" }, - "url": { - "type": "string" + "stage_id": { + "example": 214253, + "type": "integer" }, - "venue": { - "$ref": "#/definitions/ticketweb.VenueRef" + "stages": { + "items": { + "$ref": "#/definitions/sofascore.Stage" + }, + "type": "array" } }, "type": "object" }, - "ticketweb.EventVenue": { + "sofascore.StageTeamRef": { "properties": { - "address": { - "example": "907 South Peters", + "chassis": { + "description": "Chassis and Engine are published for Formula 1 constructors only.", + "example": "W17", "type": "string" }, - "city": { - "example": "New Orleans", + "code": { + "example": "MER", "type": "string" }, "country": { - "example": "US", + "example": "Germany", "type": "string" }, - "id": { - "example": "15005", + "engine": { + "example": "Mercedes-AMG F1 M17", "type": "string" }, - "map_image": { - "type": "string" + "id": { + "example": 214910, + "type": "integer" }, "name": { - "example": "Howlin' Wolf", - "type": "string" - }, - "postal_code": { - "example": "70130", + "example": "Mercedes", "type": "string" }, - "state": { - "example": "LA", + "short_name": { + "example": "Mercedes", "type": "string" + } + }, + "type": "object" + }, + "sofascore.StageType": { + "properties": { + "id": { + "example": 6, + "type": "integer" }, - "time_zone": { - "example": "US/Central", + "name": { + "example": "Race", "type": "string" } }, "type": "object" }, - "ticketweb.PriceRange": { + "sofascore.StageTyreStint": { "properties": { - "max": { - "example": 8.16, - "type": "number" + "laps": { + "example": 31, + "type": "integer" }, - "min": { - "example": 8.16, - "type": "number" + "type": { + "example": "M", + "type": "string" } }, "type": "object" }, - "ticketweb.SearchResponse": { + "sofascore.StandingsGroup": { "properties": { - "count": { - "example": 20, - "type": "integer" + "name": { + "description": "Table name, set when the competition publishes more than one table, such as group-stage groups.", + "type": "string" }, - "events": { + "rows": { + "description": "Table rows in position order.", "items": { - "$ref": "#/definitions/ticketweb.EventSummary" + "$ref": "#/definitions/sofascore.StandingsRow" }, "type": "array" - }, + } + }, + "type": "object" + }, + "sofascore.StandingsResponse": { + "properties": { "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", "type": "string" }, - "page": { - "example": 1, + "groups": { + "description": "One entry per table the competition publishes.", + "items": { + "$ref": "#/definitions/sofascore.StandingsGroup" + }, + "type": "array" + }, + "season_id": { + "description": "SofaScore season id.", "type": "integer" }, - "query": { + "source_url": { + "description": "SofaScore URL the data was read from.", "type": "string" }, - "source_url": { + "tournament_id": { + "description": "Id of the competition (the unique tournament id).", + "type": "integer" + }, + "type": { + "description": "Which table was requested: `total`, `home` or `away`.", + "example": "total", "type": "string" } }, "type": "object" }, - "ticketweb.TicketFees": { + "sofascore.StandingsRow": { "properties": { - "credit_card": { - "example": 0.16, - "type": "number" + "draws": { + "description": "Matches drawn.", + "type": "integer" }, - "facility": { - "type": "number" + "losses": { + "description": "Matches lost.", + "type": "integer" }, - "per_ticket": { - "example": 1.5, - "type": "number" + "matches": { + "description": "Matches played.", + "type": "integer" }, - "rebate": { - "example": 1.5, - "type": "number" + "points": { + "description": "Points in the table.", + "type": "integer" }, - "taxes": { - "type": "number" - } - }, - "type": "object" - }, - "ticketweb.TicketPrice": { - "properties": { - "base": { - "example": 5, - "type": "number" + "position": { + "description": "Position in the table.", + "type": "integer" }, - "fees": { - "$ref": "#/definitions/ticketweb.TicketFees" + "promotion": { + "description": "What the position currently leads to, for example \"Champions League\". Omitted when the position carries nothing.", + "example": "Champions League", + "type": "string" }, - "max_purchase_limit": { - "example": 10, + "scores_against": { + "description": "Goals or points conceded.", "type": "integer" }, - "min_purchase_limit": { + "scores_for": { + "description": "Goals or points scored.", "type": "integer" }, - "name": { - "example": "GA Seating", - "type": "string" - }, - "sold_out": { - "type": "boolean" + "team": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TeamRef" + } + ], + "description": "The team." }, - "total": { - "example": 8.16, - "type": "number" + "wins": { + "description": "Matches won.", + "type": "integer" } }, "type": "object" }, - "ticketweb.TicketSection": { + "sofascore.StatGroup": { "properties": { - "name": { - "example": "GA Seating", - "type": "string" - }, - "prices": { + "items": { + "description": "Statistics in the group.", "items": { - "$ref": "#/definitions/ticketweb.TicketPrice" + "$ref": "#/definitions/sofascore.StatItem" }, "type": "array" }, - "purchase_limit": { - "example": 10, - "type": "integer" - }, - "sold_out": { - "type": "boolean" + "name": { + "description": "Group name, for example \"Match overview\" or \"Shots\".", + "type": "string" } }, "type": "object" }, - "ticketweb.VenueDetail": { + "sofascore.StatItem": { "properties": { - "address": { - "example": "907 South Peters, New Orleans, LA 70130", + "away": { + "description": "Away side's value as displayed, for example 39%.", + "example": "39%", "type": "string" }, - "id": { - "example": "15005", + "home": { + "description": "Home side's value as displayed, for example 61%.", + "example": "61%", "type": "string" }, - "name": { - "example": "Howlin' Wolf", + "key": { + "description": "Stable key for the statistic, for example `ballPossession`.", + "example": "ballPossession", "type": "string" }, - "url": { + "name": { + "description": "Statistic name, for example \"Ball possession\".", + "example": "Ball possession", "type": "string" } }, "type": "object" }, - "ticketweb.VenueRef": { + "sofascore.StatPeriod": { "properties": { - "address": { - "example": "New Orleans, LA", + "groups": { + "description": "Statistic groups for the period.", + "items": { + "$ref": "#/definitions/sofascore.StatGroup" + }, + "type": "array" + }, + "period": { + "description": "Period the statistics cover: `ALL`, `1ST` or `2ND`.", + "example": "ALL", "type": "string" + } + }, + "type": "object" + }, + "sofascore.StatisticsSeason": { + "properties": { + "id": { + "example": 96668, + "type": "integer" }, "name": { - "example": "Howlin' Wolf", + "example": "Premier League 26/27", "type": "string" }, - "url": { + "types": { + "items": { + "enum": [ + "overall", + "home", + "away", + "regular_season", + "playoffs" + ], + "type": "string" + }, + "type": "array" + }, + "year": { + "example": "26/27", "type": "string" } }, "type": "object" }, - "ticketweb.VenueResponse": { + "sofascore.StatisticsTournament": { "properties": { - "count": { - "example": 20, - "type": "integer" + "category": { + "example": "England", + "type": "string" }, - "events": { + "name": { + "example": "Premier League", + "type": "string" + }, + "seasons": { "items": { - "$ref": "#/definitions/ticketweb.EventSummary" + "$ref": "#/definitions/sofascore.StatisticsSeason" }, "type": "array" }, - "fetched_at": { + "slug": { + "example": "premier-league", "type": "string" }, - "page": { - "example": 1, + "unique_tournament_id": { + "example": 17, "type": "integer" - }, - "source_url": { - "type": "string" - }, - "venue": { - "$ref": "#/definitions/ticketweb.VenueDetail" } }, "type": "object" }, - "ticketweb.eventResponseDoc": { + "sofascore.TVChannel": { "properties": { - "code": { - "example": 200, + "id": { + "example": 1057, "type": "integer" }, - "data": { - "$ref": "#/definitions/ticketweb.EventResponse" - }, - "msg": { - "example": "OK", + "name": { + "example": "Sky Sports Premier League", "type": "string" } }, "type": "object" }, - "ticketweb.searchResponseDoc": { + "sofascore.TVCountryChannels": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/ticketweb.SearchResponse" + "channel_ids": { + "items": { + "type": "integer" + }, + "type": "array" }, - "msg": { - "example": "OK", + "country": { + "example": "GB", "type": "string" } }, "type": "object" }, - "ticketweb.venueResponseDoc": { + "sofascore.TeamAchievement": { "properties": { - "code": { - "example": 200, - "type": "integer" + "competition": { + "$ref": "#/definitions/sofascore.UniqueTournamentBrief" }, - "data": { - "$ref": "#/definitions/ticketweb.VenueResponse" + "seasons": { + "description": "Seasons lists the winning seasons, newest first. It can be empty or\nshorter than TrophiesWon (US leagues report a count without years).", + "items": { + "$ref": "#/definitions/sofascore.AchievementSeason" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "trophies_won": { + "example": 10, + "type": "integer" } }, "type": "object" }, - "tiffany.CategoriesResponse": { + "sofascore.TeamAchievementsResponse": { "properties": { - "categories": { + "achievements": { "items": { - "$ref": "#/definitions/tiffany.CategoryFacet" + "$ref": "#/definitions/sofascore.TeamAchievement" }, "type": "array" }, @@ -233316,327 +238995,377 @@ }, "source_url": { "type": "string" + }, + "team_id": { + "example": 17, + "type": "integer" + }, + "total_trophies": { + "example": 45, + "type": "integer" } }, "type": "object" }, - "tiffany.CategoryFacet": { + "sofascore.TeamDetail": { "properties": { - "id": { - "description": "ID is the exact value to pass as tiffany-category's own \"category\"\nquery parameter.", + "country": { + "description": "Country the team belongs to.", + "example": "Spain", "type": "string" }, - "kind": { - "description": "Kind distinguishes a real navigable department/category\n(\"category\", ids starting \"ecommerce_us_\") from a curated\nmerchandising/gift shelf (\"curated_shop\", ids starting\n\"curated_ecommerce_us_\") -- both are valid, filterable category ids,\nbut they serve different purposes: see the categories endpoint\ndocumentation.", + "id": { + "description": "SofaScore team id. Use it with the team endpoints.", + "example": 2817, + "type": "integer" + }, + "manager": { "type": "string" }, - "label": { - "description": "Label is a human-readable label derived from ID.", + "name": { + "description": "Full team name.", + "example": "FC Barcelona", "type": "string" }, - "product_count": { - "description": "ProductCount is the live count of in-index products carrying this\ncategory id, as of FetchedAt.", - "type": "integer" - } - }, - "type": "object" - }, - "tiffany.CategoryResponse": { - "properties": { - "category": { + "national": { + "description": "True for a national team.", + "type": "boolean" + }, + "primary_color": { "type": "string" }, - "count": { - "type": "integer" + "short_name": { + "description": "Shortened team name.", + "example": "Barcelona", + "type": "string" }, - "fetched_at": { + "slug": { + "description": "URL slug of the team on SofaScore.", + "example": "barcelona", "type": "string" }, - "page": { - "type": "integer" + "sport": { + "example": "Football", + "type": "string" }, - "per_page": { + "tournament_id": { "type": "integer" }, - "products": { - "items": { - "$ref": "#/definitions/tiffany.ProductSummary" - }, - "type": "array" - }, - "sort": { + "tournament_name": { "type": "string" }, - "source_url": { + "venue": { "type": "string" }, - "total_pages": { + "venue_capacity": { "type": "integer" }, - "total_products": { - "type": "integer" + "venue_city": { + "type": "string" } }, "type": "object" }, - "tiffany.ContentResult": { + "sofascore.TeamDuel": { "properties": { - "description": { - "type": "string" - }, - "image_url": { - "type": "string" + "away_wins": { + "description": "Past meetings won by the away side of this match.", + "type": "integer" }, - "title": { - "type": "string" + "draws": { + "description": "Past meetings that ended in a draw.", + "type": "integer" }, - "url": { - "type": "string" + "home_wins": { + "description": "Past meetings won by the home side of this match.", + "type": "integer" } }, "type": "object" }, - "tiffany.ContentSearchResponse": { + "sofascore.TeamEventsResponse": { "properties": { "count": { + "description": "Number of events on this page.", "type": "integer" }, - "fetched_at": { + "direction": { + "description": "Which fixtures were requested: `next` for upcoming, `last` for past.", + "example": "next", "type": "string" }, - "keyword": { + "events": { + "description": "Fixtures on this page. Empty when there are none.", + "items": { + "$ref": "#/definitions/sofascore.EventSummary" + }, + "type": "array" + }, + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", "type": "string" }, + "has_next_page": { + "description": "True when page + 1 has more fixtures in the same direction.", + "type": "boolean" + }, "page": { + "description": "Zero-based page number returned.", "type": "integer" }, - "per_page": { - "type": "integer" + "source_url": { + "description": "SofaScore URL the data was read from.", + "type": "string" }, - "results": { + "team_id": { + "description": "SofaScore team id the fixtures belong to.", + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.TeamGoalDistributionsResponse": { + "properties": { + "distributions": { "items": { - "$ref": "#/definitions/tiffany.ContentResult" + "$ref": "#/definitions/sofascore.GoalDistribution" }, "type": "array" }, + "fetched_at": { + "type": "string" + }, + "season_id": { + "example": 96668, + "type": "integer" + }, "source_url": { "type": "string" }, - "total_pages": { + "team_id": { + "example": 17, "type": "integer" }, - "total_results": { + "tournament_id": { + "example": 17, "type": "integer" } }, "type": "object" }, - "tiffany.FilterValue": { + "sofascore.TeamLineup": { "properties": { - "product_count": { - "type": "integer" - }, - "value": { + "formation": { + "description": "Formation, for example 4-3-3.", + "example": "4-3-3", "type": "string" + }, + "players": { + "description": "Starting players and substitutes.", + "items": { + "$ref": "#/definitions/sofascore.LineupPlayer" + }, + "type": "array" } }, "type": "object" }, - "tiffany.FiltersResponse": { + "sofascore.TeamNearEventsResponse": { "properties": { - "color": { - "items": { - "$ref": "#/definitions/tiffany.FilterValue" - }, - "type": "array" - }, - "designer": { - "items": { - "$ref": "#/definitions/tiffany.FilterValue" - }, - "type": "array" - }, "fetched_at": { "type": "string" }, - "gemstone": { - "items": { - "$ref": "#/definitions/tiffany.FilterValue" - }, - "type": "array" - }, - "gender": { - "items": { - "$ref": "#/definitions/tiffany.FilterValue" - }, - "type": "array" - }, - "material": { - "items": { - "$ref": "#/definitions/tiffany.FilterValue" - }, - "type": "array" + "next_event": { + "$ref": "#/definitions/sofascore.EventSummary" }, - "product_type": { - "items": { - "$ref": "#/definitions/tiffany.FilterValue" - }, - "type": "array" + "previous_event": { + "$ref": "#/definitions/sofascore.EventSummary" }, "source_url": { "type": "string" + }, + "team_id": { + "example": 17, + "type": "integer" } }, "type": "object" }, - "tiffany.ProductDetailResponse": { + "sofascore.TeamOfTheWeekPeriod": { "properties": { - "available_quantity": { - "type": "integer" - }, - "brand": { + "created_at": { "type": "string" }, - "categories": { - "items": { - "type": "string" - }, - "type": "array" - }, - "collection": { + "date_from": { "type": "string" }, - "color": { + "date_to": { "type": "string" }, - "currency": { - "type": "string" + "id": { + "example": 29321, + "type": "integer" }, - "description": { + "name": { + "example": "round", "type": "string" }, - "designer": { + "round": { + "type": "integer" + }, + "round_name": { "type": "string" }, - "fetched_at": { + "sequence": { + "type": "integer" + }, + "type": { + "example": "round", "type": "string" + } + }, + "type": "object" + }, + "sofascore.TeamOfTheWeekPeriodsResponse": { + "properties": { + "count": { + "type": "integer" }, - "gemstone": { + "fetched_at": { "type": "string" }, - "images": { + "periods": { "items": { - "type": "string" + "$ref": "#/definitions/sofascore.TeamOfTheWeekPeriod" }, "type": "array" }, - "in_stock": { - "type": "boolean" - }, - "low_inventory": { - "type": "boolean" - }, - "material": { - "type": "string" - }, - "name": { - "type": "string" - }, - "price": { - "type": "number" + "season_id": { + "type": "integer" }, - "product_id": { + "source_url": { "type": "string" }, - "product_type": { - "type": "string" + "tournament_id": { + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.TeamOfTheWeekPlayer": { + "properties": { + "event": { + "$ref": "#/definitions/sofascore.EventSummary" }, - "size": { + "jersey_number": { "type": "string" }, - "source_url": { - "type": "string" + "order": { + "example": 1, + "type": "integer" }, - "style_id": { - "type": "string" + "player": { + "$ref": "#/definitions/sofascore.PlayerRef" }, - "url": { - "type": "string" + "rating": { + "example": 8.6, + "type": "number" }, - "variations": { - "items": { - "$ref": "#/definitions/tiffany.ProductVariation" - }, - "type": "array" + "team": { + "$ref": "#/definitions/sofascore.TeamRef" } }, "type": "object" }, - "tiffany.ProductSummary": { + "sofascore.TeamOfTheWeekResponse": { "properties": { - "collection": { - "type": "string" - }, - "color": { - "type": "string" - }, - "currency": { - "type": "string" - }, - "designer": { - "type": "string" + "count": { + "type": "integer" }, - "gemstone": { + "fetched_at": { "type": "string" }, - "id": { + "formation": { + "example": "3-2-4-1", "type": "string" }, - "image_url": { - "type": "string" + "period": { + "$ref": "#/definitions/sofascore.TeamOfTheWeekPeriod" }, - "in_stock": { - "type": "boolean" + "players": { + "items": { + "$ref": "#/definitions/sofascore.TeamOfTheWeekPlayer" + }, + "type": "array" }, - "low_inventory": { - "type": "boolean" + "season_id": { + "type": "integer" }, - "material": { + "source_url": { "type": "string" }, - "name": { - "type": "string" + "tournament_id": { + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.TeamPerformanceEvent": { + "properties": { + "event": { + "$ref": "#/definitions/sofascore.EventSummary" }, - "price": { + "points": { + "description": "Points is SofaScore's per-match performance value for the team (higher\nis better, negative for a poor result). Omitted when SofaScore gave none.", + "example": 1.333, "type": "number" + } + }, + "type": "object" + }, + "sofascore.TeamPerformanceResponse": { + "properties": { + "count": { + "type": "integer" }, - "product_type": { - "type": "string" + "events": { + "items": { + "$ref": "#/definitions/sofascore.TeamPerformanceEvent" + }, + "type": "array" }, - "style_id": { + "fetched_at": { "type": "string" }, - "url": { + "source_url": { "type": "string" + }, + "team_id": { + "example": 17, + "type": "integer" } }, "type": "object" }, - "tiffany.ProductVariation": { + "sofascore.TeamPlayerStatistics": { "properties": { - "color": { - "type": "string" + "played_enough": { + "type": "boolean" }, - "id": { - "type": "string" + "player": { + "$ref": "#/definitions/sofascore.PlayerBrief" }, - "online": { - "type": "boolean" + "statistics": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "type": "object" } }, "type": "object" }, - "tiffany.SearchResponse": { + "sofascore.TeamPlayerStatisticsResponse": { "properties": { "count": { "type": "integer" @@ -233644,200 +239373,278 @@ "fetched_at": { "type": "string" }, - "keyword": { + "players": { + "items": { + "$ref": "#/definitions/sofascore.TeamPlayerStatistics" + }, + "type": "array" + }, + "season": { + "example": 96668, + "type": "integer" + }, + "source_url": { "type": "string" }, - "page": { + "team_id": { + "example": 17, "type": "integer" }, - "per_page": { + "tournament_id": { + "example": 17, "type": "integer" }, - "products": { - "items": { - "$ref": "#/definitions/tiffany.ProductSummary" - }, - "type": "array" + "type": { + "example": "overall", + "type": "string" + } + }, + "type": "object" + }, + "sofascore.TeamPlayerStatisticsSeasonsResponse": { + "properties": { + "count": { + "type": "integer" }, - "sort": { + "fetched_at": { "type": "string" }, "source_url": { "type": "string" }, - "total_pages": { + "team_id": { + "example": 17, "type": "integer" }, - "total_products": { - "type": "integer" + "tournaments": { + "items": { + "$ref": "#/definitions/sofascore.StatisticsTournament" + }, + "type": "array" } }, "type": "object" }, - "tiffany.SearchSuggestion": { + "sofascore.TeamPlayersResponse": { "properties": { - "popularity": { + "count": { + "description": "Number of players returned.", "type": "integer" }, - "query": { + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", "type": "string" }, - "result_count": { + "players": { + "description": "The team's squad.", + "items": { + "$ref": "#/definitions/sofascore.SquadPlayer" + }, + "type": "array" + }, + "source_url": { + "description": "SofaScore URL the data was read from.", + "type": "string" + }, + "team_id": { + "description": "SofaScore team id the squad belongs to.", "type": "integer" } }, "type": "object" }, - "tiffany.Store": { + "sofascore.TeamRanking": { "properties": { - "address1": { + "category": { + "example": "ATP", "type": "string" }, - "city": { + "gender": { + "example": "M", "type": "string" }, - "closed": { - "type": "boolean" - }, - "country_code": { + "last_updated": { "type": "string" }, - "distance_miles": { - "type": "number" + "last_updated_timestamp": { + "type": "integer" }, - "faqs": { - "items": { - "$ref": "#/definitions/tiffany.StoreFAQ" - }, - "type": "array" + "name": { + "example": "ATP Rankings", + "type": "string" }, - "hours": { + "rows": { "items": { - "$ref": "#/definitions/tiffany.StoreDayHours" + "$ref": "#/definitions/sofascore.TeamRankingRow" }, "type": "array" }, - "internal_store_id": { + "slug": { + "example": "atp-rankings", "type": "string" }, - "latitude": { - "type": "number" + "sport": { + "example": "tennis", + "type": "string" }, - "longitude": { - "type": "number" + "type_id": { + "example": 5, + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.TeamRankingRow": { + "properties": { + "best_position": { + "type": "integer" }, - "name": { - "type": "string" + "max_points": { + "type": "number" }, - "phone": { - "type": "string" + "next_win_points": { + "type": "number" }, - "postal_code": { - "type": "string" + "points": { + "example": 1168, + "type": "number" }, - "region": { - "type": "string" + "position": { + "example": 46, + "type": "integer" }, - "reservation_url": { - "type": "string" + "previous_points": { + "type": "number" }, - "services": { - "items": { - "type": "string" - }, - "type": "array" + "previous_position": { + "type": "integer" }, - "specialities": { - "items": { - "type": "string" - }, - "type": "array" + "team": { + "$ref": "#/definitions/sofascore.TeamRef" }, - "store_id": { - "type": "string" + "tournaments_played": { + "type": "integer" }, - "store_type": { - "example": "Flagship", + "updated_at": { "type": "string" }, - "timezone": { - "type": "string" + "updated_timestamp": { + "type": "integer" }, - "url": { - "type": "string" + "year": { + "example": 2026, + "type": "integer" } }, "type": "object" }, - "tiffany.StoreDayHours": { + "sofascore.TeamRankingsResponse": { "properties": { - "closed": { - "type": "boolean" + "count": { + "type": "integer" }, - "day": { + "fetched_at": { "type": "string" }, - "intervals": { + "rankings": { "items": { - "$ref": "#/definitions/tiffany.StoreHoursInterval" + "$ref": "#/definitions/sofascore.TeamRanking" }, "type": "array" + }, + "source_url": { + "type": "string" + }, + "team_id": { + "example": 112783, + "type": "integer" } }, "type": "object" }, - "tiffany.StoreFAQ": { + "sofascore.TeamRef": { "properties": { - "answer": { + "country": { + "description": "Country the team belongs to.", + "example": "Spain", "type": "string" }, - "question": { + "id": { + "description": "SofaScore team id. Use it with the team endpoints.", + "example": 2817, + "type": "integer" + }, + "name": { + "description": "Full team name.", + "example": "FC Barcelona", + "type": "string" + }, + "national": { + "description": "True for a national team.", + "type": "boolean" + }, + "short_name": { + "description": "Shortened team name.", + "example": "Barcelona", + "type": "string" + }, + "slug": { + "description": "URL slug of the team on SofaScore.", + "example": "barcelona", "type": "string" } }, "type": "object" }, - "tiffany.StoreHoursInterval": { + "sofascore.TeamResponse": { "properties": { - "end": { + "fetched_at": { "type": "string" }, - "start": { + "source_url": { "type": "string" + }, + "team": { + "$ref": "#/definitions/sofascore.TeamDetail" } }, "type": "object" }, - "tiffany.StoresResponse": { + "sofascore.TeamSeasonStatisticsResponse": { "properties": { - "count": { - "type": "integer" - }, "fetched_at": { "type": "string" }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" - }, - "radius": { - "type": "number" + "season": { + "example": 96668, + "type": "integer" }, "source_url": { "type": "string" }, - "stores": { - "items": { - "$ref": "#/definitions/tiffany.Store" + "statistics": { + "additionalProperties": { + "format": "float64", + "type": "number" }, - "type": "array" + "type": "object" + }, + "team_id": { + "example": 17, + "type": "integer" + }, + "tournament_id": { + "example": 17, + "type": "integer" + }, + "type": { + "example": "overall", + "type": "string" } }, "type": "object" }, - "tiffany.SuggestResponse": { + "sofascore.TeamStatisticsSeasonsResponse": { "properties": { "count": { "type": "integer" @@ -233845,923 +239652,1493 @@ "fetched_at": { "type": "string" }, - "query": { - "type": "string" - }, "source_url": { "type": "string" }, - "suggestions": { + "team_id": { + "example": 17, + "type": "integer" + }, + "tournaments": { "items": { - "$ref": "#/definitions/tiffany.SearchSuggestion" + "$ref": "#/definitions/sofascore.StatisticsTournament" }, "type": "array" } }, "type": "object" }, - "tiffany.categoriesResponseDoc": { + "sofascore.TeamStreak": { "properties": { - "code": { - "example": 200, - "type": "integer" + "continued": { + "type": "boolean" }, - "data": { - "$ref": "#/definitions/tiffany.CategoriesResponse" + "name": { + "example": "No goals conceded", + "type": "string" }, - "msg": { - "example": "OK", + "team": { + "example": "home", + "type": "string" + }, + "value": { + "example": "4", "type": "string" } }, "type": "object" }, - "tiffany.categoryResponseDoc": { + "sofascore.TeamTopPlayersResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "categories": { + "items": { + "$ref": "#/definitions/sofascore.TopPlayerCategory" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/tiffany.CategoryResponse" + "category_count": { + "type": "integer" }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "tiffany.contentSearchResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "season_id": { + "example": 96668, "type": "integer" }, - "data": { - "$ref": "#/definitions/tiffany.ContentSearchResponse" + "source_url": { + "type": "string" }, - "msg": { - "example": "OK", + "sport": { + "example": "football", "type": "string" - } - }, - "type": "object" - }, - "tiffany.filtersResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "team_id": { + "example": 17, "type": "integer" }, - "data": { - "$ref": "#/definitions/tiffany.FiltersResponse" + "tournament_id": { + "example": 17, + "type": "integer" }, - "msg": { - "example": "OK", + "type": { + "example": "overall", "type": "string" } }, "type": "object" }, - "tiffany.productResponseDoc": { + "sofascore.TeamTournamentsResponse": { "properties": { - "code": { - "example": 200, + "all": { + "type": "boolean" + }, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/tiffany.ProductDetailResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" + }, + "team_id": { + "example": 17, + "type": "integer" + }, + "tournaments": { + "items": { + "$ref": "#/definitions/sofascore.UniqueTournamentBrief" + }, + "type": "array" } }, "type": "object" }, - "tiffany.searchResponseDoc": { + "sofascore.TeamTransfersResponse": { "properties": { - "code": { - "example": 200, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "team_id": { + "example": 17, "type": "integer" }, - "data": { - "$ref": "#/definitions/tiffany.SearchResponse" + "transfers_in": { + "items": { + "$ref": "#/definitions/sofascore.Transfer" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "transfers_out": { + "items": { + "$ref": "#/definitions/sofascore.Transfer" + }, + "type": "array" } }, "type": "object" }, - "tiffany.storesResponseDoc": { + "sofascore.TennisGrandSlamResultsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/tiffany.StoresResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" + }, + "team_id": { + "example": 14882, + "type": "integer" + }, + "tournaments": { + "items": { + "$ref": "#/definitions/sofascore.GrandSlamTournament" + }, + "type": "array" } }, "type": "object" }, - "tiffany.suggestResponseDoc": { + "sofascore.TennisPowerGame": { "properties": { - "code": { - "example": 200, + "break_occurred": { + "type": "boolean" + }, + "game": { + "example": 3, "type": "integer" }, - "data": { - "$ref": "#/definitions/tiffany.SuggestResponse" + "set": { + "example": 1, + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "value": { + "description": "Value is SofaScore's momentum number for the game. Positive favours the\nhome player or team, negative the away side.", + "example": -54.2, + "type": "number" } }, "type": "object" }, - "tiktok.Category": { + "sofascore.TopPlayerCategory": { "properties": { - "name": { - "description": "Category name as shown on TikTok's Explore page.", - "type": "string" + "count": { + "type": "integer" }, - "type": { - "description": "Numeric category type code, as a string. Use it as the `id` of the explore endpoint.", + "key": { + "example": "goals", "type": "string" + }, + "players": { + "items": { + "$ref": "#/definitions/sofascore.TopPlayerEntry" + }, + "type": "array" } }, "type": "object" }, - "tiktok.ChallengeDetailResp": { + "sofascore.TopPlayerEntry": { "properties": { - "challengeInfo": { - "description": "Details of the hashtag (challenge), as TikTok returns them." + "appearances": { + "example": 5, + "type": "integer" }, - "extra": { - "description": "Response metadata from TikTok, such as the request log id and server time.", - "properties": { - "fatal_item_ids": { - "items": {}, - "type": "array" - }, - "logid": { - "type": "string" - }, - "now": { - "type": "integer" - } + "details": { + "additionalProperties": { + "format": "float64", + "type": "number" }, "type": "object" }, - "log_pb": { - "description": "Request tracking information from TikTok, holding the `impr_id` impression id.", - "properties": { - "impr_id": { - "type": "string" - } - }, - "type": "object" + "played_enough": { + "type": "boolean" }, - "shareMeta": { - "description": "Title and description TikTok uses when the hashtag is shared.", - "properties": { - "desc": { - "type": "string" - }, - "title": { - "type": "string" - } - }, - "type": "object" + "player": { + "$ref": "#/definitions/sofascore.PlayerRef" }, - "statusCode": { - "description": "TikTok status code for the request. `0` on a successful response.", + "rank": { + "example": 1, "type": "integer" }, - "status_code": { - "description": "Second copy of the TikTok status code, sent as `status_code`. `0` on a successful response.", - "type": "integer" + "team": { + "$ref": "#/definitions/sofascore.TeamRef" }, - "status_msg": { - "description": "Status message that goes with the status code.", - "type": "string" + "value": { + "example": 5, + "type": "number" } }, "type": "object" }, - "tiktok.ChallengeListResp": { + "sofascore.TopTeamCategory": { "properties": { - "cursor": { - "description": "Cursor to pass in the next request to get the next page of videos.", + "count": { + "type": "integer" + }, + "key": { + "example": "avgRating", "type": "string" }, - "extra": { - "description": "Response metadata from TikTok, such as the request log id and server time.", - "properties": { - "fatal_item_ids": { - "items": {}, - "type": "array" - }, - "logid": { - "type": "string" - }, - "now": { - "type": "integer" - } + "teams": { + "items": { + "$ref": "#/definitions/sofascore.TopTeamEntry" }, - "type": "object" - }, - "hasMore": { - "description": "Whether more videos remain after this page.", - "type": "boolean" - }, - "itemList": { - "description": "Videos posted under the hashtag, one entry per video, as TikTok returns them.", - "items": {}, "type": "array" - }, - "log_pb": { - "description": "Request tracking information from TikTok, holding the `impr_id` impression id.", - "properties": { - "impr_id": { - "type": "string" - } + } + }, + "type": "object" + }, + "sofascore.TopTeamEntry": { + "properties": { + "details": { + "additionalProperties": { + "format": "float64", + "type": "number" }, "type": "object" }, - "statusCode": { - "description": "TikTok status code for the request. `0` on a successful response.", + "matches": { + "example": 5, "type": "integer" }, - "status_code": { - "description": "Second copy of the TikTok status code, sent as `status_code`. `0` on a successful response.", + "rank": { + "example": 1, "type": "integer" }, - "status_msg": { - "description": "Status message that goes with the status code.", - "type": "string" + "team": { + "$ref": "#/definitions/sofascore.TeamRef" + }, + "value": { + "example": 7.896, + "type": "number" } }, "type": "object" }, - "tiktok.CommentResp": { + "sofascore.TournamentCupTreeResponse": { "properties": { - "alias_comment_deleted": { - "description": "Flag TikTok returns for deleted alias comments.", - "type": "boolean" - }, - "comments": { - "description": "Top-level comments on the video, one entry per comment, as TikTok returns them.", - "items": {}, - "type": "array" - }, - "cursor": { - "description": "Cursor to pass in the next request to get the next page of comments.", + "count": { "type": "integer" }, - "extra": { - "description": "Response metadata from TikTok, such as server time.", - "properties": { - "api_debug_info": {}, - "fatal_item_ids": {}, - "now": { - "type": "integer" - } - }, - "type": "object" + "fetched_at": { + "type": "string" }, - "has_filtered_comments": { - "description": "Flag showing whether TikTok filtered any comments out of the list.", + "season_id": { "type": "integer" }, - "has_more": { - "description": "Whether more comments remain after this page, as a number (`1` for yes).", + "source_url": { + "type": "string" + }, + "tournament_id": { "type": "integer" }, - "log_pb": { - "description": "Request tracking information from TikTok, holding the `impr_id` impression id.", - "properties": { - "impr_id": { - "type": "string" - } + "trees": { + "items": { + "$ref": "#/definitions/sofascore.CupTree" }, - "type": "object" + "type": "array" + } + }, + "type": "object" + }, + "sofascore.TournamentDetail": { + "properties": { + "category": { + "example": "England", + "type": "string" }, - "reply_style": { - "description": "Reply display style code that TikTok returns with the comments.", + "current_season_end": { + "example": "2027-05-23T00:00:00Z", + "type": "string" + }, + "current_season_start": { + "example": "2026-08-21T00:00:00Z", + "type": "string" + }, + "gender": { + "example": "M", + "type": "string" + }, + "has_groups": { + "type": "boolean" + }, + "has_playoff_series": { + "type": "boolean" + }, + "has_rounds": { + "type": "boolean" + }, + "id": { + "example": 17, "type": "integer" }, - "status_code": { - "description": "TikTok status code for the request. `0` on a successful response.", + "linked_tournaments": { + "items": { + "$ref": "#/definitions/sofascore.CompetitionRef" + }, + "type": "array" + }, + "lower_divisions": { + "items": { + "$ref": "#/definitions/sofascore.CompetitionRef" + }, + "type": "array" + }, + "most_titles": { "type": "integer" }, - "status_msg": { - "description": "Status message that goes with the status code.", + "most_titles_teams": { + "items": { + "$ref": "#/definitions/sofascore.TeamRef" + }, + "type": "array" + }, + "name": { + "example": "Premier League", "type": "string" }, - "top_gifts": { - "description": "Top gifts attached to the comments, as TikTok returns them." + "slug": { + "example": "premier-league", + "type": "string" }, - "total": { - "description": "Total number of comments on the video.", + "sport": { + "example": "football", + "type": "string" + }, + "tier": { + "type": "integer" + }, + "title_holder": { + "$ref": "#/definitions/sofascore.TeamRef" + }, + "title_holder_titles": { "type": "integer" + }, + "upper_divisions": { + "items": { + "$ref": "#/definitions/sofascore.CompetitionRef" + }, + "type": "array" } }, "type": "object" }, - "tiktok.ExploreResp": { + "sofascore.TournamentInfoResponse": { "properties": { - "cursor": { - "description": "Cursor to pass in the next request to get the next page of videos.", + "fetched_at": { "type": "string" }, - "extra": { - "description": "Response metadata from TikTok, such as the request log id and server time.", - "properties": { - "fatal_item_ids": { - "items": {}, - "type": "array" - }, - "logid": { - "type": "string" - }, - "now": { - "type": "integer" - } - }, - "type": "object" + "season": { + "$ref": "#/definitions/sofascore.SeasonInfo" }, - "hasMore": { - "description": "Whether more videos remain after this page.", - "type": "boolean" + "season_id": { + "example": 96668, + "type": "integer" }, - "itemList": { - "description": "Videos in the explore feed for the category, one entry per video, as TikTok returns them.", - "items": {}, - "type": "array" + "season_source_url": { + "type": "string" }, - "log_pb": { - "description": "Request tracking information from TikTok, holding the `impr_id` impression id.", - "properties": { - "impr_id": { - "type": "string" - } - }, - "type": "object" + "source_url": { + "type": "string" }, - "statusCode": { - "description": "TikTok status code for the request. `0` on a successful response.", + "tournament": { + "$ref": "#/definitions/sofascore.TournamentDetail" + }, + "tournament_id": { + "example": 17, + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.TournamentPlayerOfTheSeasonResponse": { + "properties": { + "appearances": { + "example": 35, "type": "integer" }, - "status_code": { - "description": "Second copy of the TikTok status code, sent as `status_code`. `0` on a successful response.", + "fetched_at": { + "type": "string" + }, + "jersey_number": { + "description": "JerseyNumber is the player's shirt number as published.", + "type": "string" + }, + "player": { + "$ref": "#/definitions/sofascore.PlayerRef" + }, + "rating": { + "description": "Rating is the player's average SofaScore rating over the season.", + "example": 7.61, + "type": "number" + }, + "season_id": { "type": "integer" }, - "status_msg": { - "description": "Status message that goes with the status code.", + "source_url": { + "type": "string" + }, + "statistics_type": { + "description": "StatisticsType is the scope of the rating: overall, regular_season, or\nthe upstream value verbatim for any other scope.", + "example": "overall", "type": "string" + }, + "team": { + "$ref": "#/definitions/sofascore.TeamRef" + }, + "tournament_id": { + "type": "integer" } }, "type": "object" }, - "tiktok.Profile": { + "sofascore.TournamentPlayerStatisticsResponse": { "properties": { - "stats": { - "allOf": [ - { - "$ref": "#/definitions/tiktok.ProfileStats" - } - ], - "description": "Follower, following, like and video counts for the account." + "accumulation": { + "example": "total", + "type": "string" }, - "user": { + "count": { + "type": "integer" + }, + "direction": { + "example": "desc", + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "filters": { "allOf": [ { - "$ref": "#/definitions/tiktok.User" + "$ref": "#/definitions/sofascore.PlayerStatisticsFilters" } ], - "description": "Account details: identity, bio, verification and region." - } - }, - "type": "object" - }, - "tiktok.ProfileStats": { - "properties": { - "diggCount": { - "description": "Number of videos the account has liked.", - "example": 0, + "description": "Filters echoes the filters applied and is omitted when none were given." + }, + "group": { + "example": "summary", + "type": "string" + }, + "has_next_page": { + "type": "boolean" + }, + "limit": { + "example": 20, "type": "integer" }, - "followerCount": { - "description": "Number of accounts that follow this account.", - "example": 458800, + "offset": { "type": "integer" }, - "followingCount": { - "description": "Number of accounts this account follows.", + "order": { + "example": "rating", + "type": "string" + }, + "page": { "example": 1, "type": "integer" }, - "friendCount": { - "description": "Number of friends, meaning accounts that follow each other.", - "example": 1, + "players": { + "items": { + "$ref": "#/definitions/sofascore.PlayerStatisticsRow" + }, + "type": "array" + }, + "season_id": { "type": "integer" }, - "heart": { - "description": "Total likes the account's videos have received. Very large totals are rounded.", - "example": 800300, + "source_url": { + "type": "string" + }, + "total_pages": { + "example": 22, "type": "integer" }, - "heartCount": { - "description": "Total likes the account's videos have received. Can be negative for accounts with more than about 2.1 billion likes; use `heart` then.", - "example": 800300, + "tournament_id": { "type": "integer" + } + }, + "type": "object" + }, + "sofascore.TournamentRef": { + "properties": { + "category": { + "description": "Category the tournament sits under, usually a country or region.", + "example": "England", + "type": "string" }, - "videoCount": { - "description": "Number of videos the account has posted.", - "example": 59, + "id": { + "description": "SofaScore id of the tournament the match is filed under. The seasons, standings and round endpoints take `unique_tournament_id` instead.", + "type": "integer" + }, + "name": { + "description": "Tournament name.", + "example": "Premier League", + "type": "string" + }, + "slug": { + "description": "URL slug of the tournament on SofaScore.", + "example": "premier-league", + "type": "string" + }, + "unique_tournament_id": { + "description": "Id of the parent competition. This is the tournament id the tournament-seasons, standings and round-events endpoints take.", + "example": 17, "type": "integer" + }, + "unique_tournament_name": { + "description": "Name of the parent competition.", + "example": "Premier League", + "type": "string" } }, "type": "object" }, - "tiktok.SearchHashtagResp": { + "sofascore.TournamentRoundsResponse": { "properties": { - "challenge_list": { - "description": "Hashtags (challenges) matching the keyword, one entry per hashtag, as TikTok returns them.", - "items": {}, + "count": { + "type": "integer" + }, + "current_round": { + "$ref": "#/definitions/sofascore.RoundRef" + }, + "fetched_at": { + "type": "string" + }, + "rounds": { + "items": { + "$ref": "#/definitions/sofascore.RoundRef" + }, "type": "array" }, - "cursor": { - "description": "Cursor to pass in the next request to get the next page of results.", + "season_id": { "type": "integer" }, - "extra": { - "description": "Response metadata from TikTok, such as the request log id." + "source_url": { + "type": "string" }, - "has_more": { - "description": "Whether more results remain after this page, as a number (`1` for yes).", + "tournament_id": { + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.TournamentSeasonsResponse": { + "properties": { + "count": { + "description": "Number of seasons returned.", "type": "integer" }, - "input_keyword": { - "description": "Search keyword that was run.", + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", "type": "string" }, - "log_pb": { - "description": "Request tracking information from TikTok, holding the `impr_id` impression id.", - "properties": { - "impr_id": { + "seasons": { + "description": "Seasons SofaScore has for the competition.", + "items": { + "$ref": "#/definitions/sofascore.Season" + }, + "type": "array" + }, + "source_url": { + "description": "SofaScore URL the data was read from.", + "type": "string" + }, + "tournament_id": { + "description": "Id of the competition (the unique tournament id).", + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.TournamentStatisticsInfoResponse": { + "properties": { + "detailed_groups": { + "additionalProperties": { + "items": { "type": "string" - } + }, + "type": "array" }, + "description": "DetailedGroups lists the further per-area statistic names the season\ntracks (upstream's \"detailed\" group); the table does not take them as\n`group` or `order` values.", "type": "object" }, - "music_list": { - "description": "Matching sounds, as TikTok returns them. Usually `null` for a hashtag search." - }, - "qc": { - "description": "Query token that TikTok returns with the search results.", + "fetched_at": { "type": "string" }, - "rid": { - "description": "Request id that TikTok returns with the search results.", - "type": "string" + "groups": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "description": "Groups lists the statistic columns of each `group` value.", + "type": "object" }, - "status_code": { - "description": "TikTok status code for the request. `0` on a successful response.", + "nationalities": { + "description": "Nationalities are the codes the `nationality` filter accepts. SofaScore\nuses its own codes for the home nations (EN England, SX Scotland, WA\nWales, NX Northern Ireland).", + "items": { + "$ref": "#/definitions/sofascore.NamedCode" + }, + "type": "array" + }, + "positions": { + "description": "Positions are the codes the `position` filter accepts. The set is fixed\nby this API (verified: G, D, M and F each filter the table; any other\ncode returns no rows).", + "items": { + "$ref": "#/definitions/sofascore.NamedCode" + }, + "type": "array" + }, + "season_id": { "type": "integer" }, - "status_msg": { - "description": "Status message that goes with the status code.", + "source_url": { "type": "string" }, - "type": { - "description": "Result type code that TikTok returns with the search results.", - "type": "integer" + "teams": { + "description": "Teams are the teams whose id the `team` filter accepts.", + "items": { + "$ref": "#/definitions/sofascore.TeamRef" + }, + "type": "array" }, - "user_list": { - "description": "Matching accounts, as TikTok returns them. Usually `null` for a hashtag search." + "tournament_id": { + "type": "integer" } }, "type": "object" }, - "tiktok.SearchResp": { + "sofascore.TournamentTeamOfTheSeasonResponse": { "properties": { - "cursor": { - "description": "Cursor to pass in the next request to get the next page of results.", + "count": { "type": "integer" }, - "data": { - "description": "Search results, one entry per matching video, as TikTok returns them.", - "items": {}, + "created_at": { + "example": "2026-05-25T10:00:00Z", + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "formation": { + "example": "3-2-4-1", + "type": "string" + }, + "players": { + "items": { + "$ref": "#/definitions/sofascore.TeamOfTheWeekPlayer" + }, "type": "array" }, - "extra": { - "description": "Response metadata from TikTok, such as the request log id." + "season_id": { + "type": "integer" }, - "feedback_type": { - "description": "Feedback type label that TikTok returns with the search results.", + "source_url": { "type": "string" }, - "has_more": { - "description": "Whether more results remain after this page, as a number (`1` for yes).", + "tournament_id": { + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.TournamentTeamsResponse": { + "properties": { + "count": { "type": "integer" }, - "input_keyword": { - "description": "Search keyword that was run.", + "fetched_at": { "type": "string" }, - "itemList": { - "description": "Matching videos, as TikTok returns them. Often `null` when results are in `data`.", - "items": {}, + "season_id": { + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "teams": { + "items": { + "$ref": "#/definitions/sofascore.SeasonTeam" + }, "type": "array" }, - "log_pb": { - "description": "Request tracking information from TikTok, holding the `impr_id` impression id.", - "properties": { - "impr_id": { - "type": "string" - } + "tournament_id": { + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.TournamentTopPlayersResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/sofascore.TopPlayerCategory" }, - "type": "object" + "type": "array" }, - "qc": { - "description": "Query token that TikTok returns with the search results.", - "type": "string" + "category_count": { + "type": "integer" }, - "rid": { - "description": "Request id that TikTok returns with the search results.", + "fetched_at": { "type": "string" }, - "status_code": { - "description": "TikTok status code for the request. `0` on a successful response.", + "season_id": { "type": "integer" }, - "status_msg": { - "description": "Status message that goes with the status code.", + "source_url": { "type": "string" }, - "type": { - "description": "Result type code that TikTok returns with the search results.", + "sport": { + "example": "football", + "type": "string" + }, + "tournament_id": { "type": "integer" + }, + "type": { + "example": "overall", + "type": "string" } }, "type": "object" }, - "tiktok.SearchUserResp": { + "sofascore.TournamentTopTeamsResponse": { "properties": { - "challenge_list": { - "description": "Matching hashtags, as TikTok returns them. Usually `null` for a user search." + "categories": { + "items": { + "$ref": "#/definitions/sofascore.TopTeamCategory" + }, + "type": "array" }, - "cursor": { - "description": "Cursor to pass in the next request to get the next page of results.", + "category_count": { "type": "integer" }, - "extra": { - "description": "Response metadata from TikTok, such as the request log id." + "fetched_at": { + "type": "string" }, - "feedback_type": { - "description": "Feedback type label that TikTok returns with the search results.", + "season_id": { + "type": "integer" + }, + "source_url": { "type": "string" }, - "global_doodle_config": { - "description": "Search page doodle settings that TikTok returns with the results." + "sport": { + "example": "football", + "type": "string" }, - "has_more": { - "description": "Whether more results remain after this page, as a number (`1` for yes).", + "tournament_id": { "type": "integer" }, - "input_keyword": { - "description": "Search keyword that was run.", + "type": { + "example": "overall", "type": "string" + } + }, + "type": "object" + }, + "sofascore.TournamentVenuesResponse": { + "properties": { + "count": { + "type": "integer" }, - "log_pb": { - "description": "Request tracking information from TikTok, holding the `impr_id` impression id.", - "properties": { - "impr_id": { - "type": "string" - } - }, - "type": "object" + "fetched_at": { + "type": "string" }, - "music_list": { - "description": "Matching sounds, as TikTok returns them. Usually `null` for a user search." + "season_id": { + "type": "integer" }, - "qc": { - "description": "Query token that TikTok returns with the search results.", + "source_url": { "type": "string" }, - "rid": { - "description": "Request id that TikTok returns with the search results.", + "tournament_id": { + "type": "integer" + }, + "venues": { + "items": { + "$ref": "#/definitions/sofascore.VenueRecord" + }, + "type": "array" + } + }, + "type": "object" + }, + "sofascore.TournamentWinner": { + "properties": { + "season_id": { + "description": "SeasonID is the season id to pass to tournament-seasons-based endpoints.", + "example": 76986, + "type": "integer" + }, + "winner": { + "$ref": "#/definitions/sofascore.TeamRef" + }, + "year": { + "description": "Year is the upstream year label of the season (the year it ended).", + "example": 2026, + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.TournamentWinnersResponse": { + "properties": { + "count": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "status_code": { - "description": "TikTok status code for the request. `0` on a successful response.", + "has_next_page": { + "type": "boolean" + }, + "page": { "type": "integer" }, - "status_msg": { - "description": "Status message that goes with the status code.", + "source_url": { "type": "string" }, - "type": { - "description": "Result type code that TikTok returns with the search results.", + "tournament_id": { "type": "integer" }, - "user_list": { - "description": "Accounts matching the keyword, one entry per account, as TikTok returns them.", - "items": {}, + "winners": { + "items": { + "$ref": "#/definitions/sofascore.TournamentWinner" + }, "type": "array" } }, "type": "object" }, - "tiktok.TrendingResp": { + "sofascore.TournamentsWithFeatureResponse": { "properties": { - "cursor": { - "description": "Cursor TikTok returns for the next page of the trending feed.", + "count": { + "type": "integer" + }, + "feature": { + "example": "cuptree", "type": "string" }, - "extra": { - "description": "Response metadata from TikTok, such as the request log id and server time.", - "properties": { - "fatal_item_ids": { - "items": {}, - "type": "array" - }, - "logid": { - "type": "string" - }, - "now": { - "type": "integer" - } - }, - "type": "object" + "fetched_at": { + "type": "string" }, - "hasMore": { - "description": "Whether more videos remain after this page.", - "type": "boolean" + "source_url": { + "type": "string" }, - "itemList": { - "description": "Videos in the trending feed, one entry per video, as TikTok returns them.", - "items": {}, - "type": "array" + "sport": { + "example": "football", + "type": "string" }, - "log_pb": { - "description": "Request tracking information from TikTok, holding the `impr_id` impression id.", - "properties": { - "impr_id": { - "type": "string" - } + "tournaments": { + "items": { + "$ref": "#/definitions/sofascore.FeatureTournament" }, - "type": "object" - }, - "statusCode": { - "description": "TikTok status code for the request. `0` on a successful response.", + "type": "array" + } + }, + "type": "object" + }, + "sofascore.Transfer": { + "properties": { + "fee": { + "example": 60000000, "type": "integer" }, - "statusMsg": { - "description": "Status message that goes with the status code.", + "fee_currency": { + "example": "EUR", "type": "string" }, - "status_code": { - "description": "Second copy of the TikTok status code, sent as `status_code`. `0` on a successful response.", + "fee_description": { + "example": "60M €", + "type": "string" + }, + "from_team": { + "$ref": "#/definitions/sofascore.TeamRef" + }, + "from_team_name": { + "example": "Borussia Dortmund", + "type": "string" + }, + "id": { "type": "integer" }, - "status_msg": { - "description": "Second copy of the status message, sent as `status_msg`.", + "player": { + "$ref": "#/definitions/sofascore.PlayerBrief" + }, + "to_team": { + "$ref": "#/definitions/sofascore.TeamRef" + }, + "to_team_name": { + "example": "Manchester City", "type": "string" }, - "trendingTopics": { - "description": "Trending topics returned with the feed, as TikTok returns them.", - "items": {}, - "type": "array" + "transfer_date": { + "example": "2022-07-01", + "type": "string" + }, + "transfer_timestamp": { + "type": "integer" + }, + "type_code": { + "example": 3, + "type": "integer" } }, "type": "object" }, - "tiktok.User": { + "sofascore.TrendingEvent": { "properties": { - "avatarLarger": { - "description": "URL of the account's large profile picture.", - "example": "https://p16-pu-sign-useast8.tiktokcdn-us.com/tos-useast5-avt-0068-tx/fb1ed871dc01261013179da3fafcc1cd~c5_1080x1080.jpeg?lk3s=a5d48078&nonce=62362&refresh_token=e3e8e01eff1ea0116ae406af630dc407&x-expires=1734098400&x-signature=MXMzwWT8Tl1nxFZfYNQxOZM%2F%2Byo%3D&shp=a5d48078&shcp=81f88b70", + "away_score": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.ScoreLine" + } + ], + "description": "Away side's score, when available." + }, + "away_team": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TeamRef" + } + ], + "description": "Away side." + }, + "home_score": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.ScoreLine" + } + ], + "description": "Home side's score, when available." + }, + "home_team": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TeamRef" + } + ], + "description": "Home side." + }, + "id": { + "description": "SofaScore event id. Use it with the event endpoints.", + "example": 14025013, + "type": "integer" + }, + "slug": { + "description": "URL slug of the match on SofaScore.", "type": "string" }, - "bioLink": { - "description": "Link shown in the account's bio.", - "properties": { - "link": { - "example": "www.openai.com/chatgpt", - "type": "string" + "sport": { + "example": "football", + "type": "string" + }, + "start_time": { + "description": "Start time in UTC (RFC 3339).", + "example": "2025-08-15T19:00:00Z", + "type": "string" + }, + "start_timestamp": { + "description": "Start time as a Unix timestamp in seconds.", + "type": "integer" + }, + "status": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.EventStatus" } - }, - "type": "object" + ], + "description": "Current status of the match." }, - "commerceUserInfo": { - "description": "Commerce details for the account: whether it is a commerce account and its category.", - "properties": { - "category": { - "example": "Software & Apps", - "type": "string" - }, - "commerceUser": { - "example": true, - "type": "boolean" + "tournament": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.TournamentRef" } + ], + "description": "Tournament and parent competition the match belongs to." + }, + "winner_code": { + "description": "Result code: 1 when the home side won, 2 when the away side won, 3 for a draw. Omitted until the match is decided.", + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.TrendingEventsResponse": { + "properties": { + "count": { + "type": "integer" + }, + "country": { + "example": "GB", + "type": "string" + }, + "events": { + "items": { + "$ref": "#/definitions/sofascore.TrendingEvent" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "sofascore.TrendingPlayer": { + "properties": { + "event": { + "$ref": "#/definitions/sofascore.EventSummary" + }, + "player": { + "$ref": "#/definitions/sofascore.PlayerBrief" + }, + "statistics": { + "additionalProperties": { + "format": "float64", + "type": "number" }, "type": "object" }, - "createTime": { - "description": "Time the account was created, in Unix seconds.", - "example": 1689461786, + "team": { + "$ref": "#/definitions/sofascore.TeamRef" + } + }, + "type": "object" + }, + "sofascore.TrendingPlayersResponse": { + "properties": { + "count": { "type": "integer" }, - "id": { - "description": "TikTok numeric user id of the account.", - "example": "7256182609359995947", + "fetched_at": { "type": "string" }, - "isOrganization": { - "description": "Organisation account flag; `1` marks an organisation account.", + "players": { + "items": { + "$ref": "#/definitions/sofascore.TrendingPlayer" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "sport": { + "example": "football", + "type": "string" + } + }, + "type": "object" + }, + "sofascore.TypedSearchResult": { + "properties": { + "capacity": { + "example": 60704, + "type": "integer" + }, + "category_id": { + "description": "Competition fields.", "example": 1, "type": "integer" }, - "language": { - "description": "Language code set on the account, for example `en`.", - "example": "en", + "category_name": { + "example": "England", "type": "string" }, - "nickname": { - "description": "Display name of the account.", - "example": "chatgpt", + "city": { + "description": "Venue fields.", + "example": "London", "type": "string" }, - "privateAccount": { - "description": "Whether the account is private.", - "example": false, + "country": { + "example": "England", + "type": "string" + }, + "deceased": { + "description": "Deceased applies to players and managers.", "type": "boolean" }, - "region": { - "description": "Country or region code of the account, for example `US`.", - "example": "US", + "event": { + "allOf": [ + { + "$ref": "#/definitions/sofascore.EventSummary" + } + ], + "description": "Event is the match summary of an event result." + }, + "gender": { + "example": "M", "type": "string" }, - "secUid": { - "description": "TikTok secUid of the account. Use it as the `secUid` of the posts endpoint.", - "example": "MS4wLjABAAAAT4vq3vsh9X-Vb_WtV6tz4QWTbKjliTKCiK5DqnJNtQEA2RUveHb7UdnL7xgPK2HB", + "id": { + "example": 42, + "type": "integer" + }, + "jersey_number": { "type": "string" }, - "secret": { - "description": "Secret-account flag as TikTok returns it.", - "example": false, - "type": "boolean" + "name": { + "example": "Arsenal", + "type": "string" }, - "signature": { - "description": "Bio text shown on the account's profile.", - "example": "What can I help with?", + "name_code": { "type": "string" }, - "ttSeller": { - "description": "Whether the account is a TikTok Shop seller.", - "example": false, + "national": { "type": "boolean" }, - "uniqueId": { - "description": "Account handle, the name that follows `@` in the profile URL.", - "example": "uniqueId", + "position": { + "description": "Player fields.", + "example": "F", "type": "string" }, - "verified": { - "description": "Whether the account has a verified badge.", - "example": true, + "retired": { "type": "boolean" + }, + "score": { + "description": "Score is SofaScore's relevance score; results are ordered by it.", + "example": 272039.88, + "type": "number" + }, + "short_name": { + "type": "string" + }, + "slug": { + "example": "arsenal", + "type": "string" + }, + "sport": { + "example": "football", + "type": "string" + }, + "team": { + "$ref": "#/definitions/sofascore.TeamRef" + }, + "type": { + "description": "Type is event, team, player, manager, referee, venue or unique_tournament.", + "example": "team", + "type": "string" + }, + "user_count": { + "type": "integer" } }, "type": "object" }, - "tiktok.UserPostLinkResp": { + "sofascore.UniqueTournamentBrief": { "properties": { - "cursor": { - "description": "Cursor to pass in the next request to get the next page of posts.", + "category": { + "example": "England", "type": "string" }, - "extra": { - "description": "Response metadata from TikTok, such as the request log id and server time.", - "properties": { - "fatal_item_ids": { - "items": {}, - "type": "array" - }, - "logid": { - "type": "string" - }, - "now": { - "type": "integer" - } + "gender": { + "example": "M", + "type": "string" + }, + "id": { + "example": 17, + "type": "integer" + }, + "name": { + "example": "Premier League", + "type": "string" + }, + "slug": { + "example": "premier-league", + "type": "string" + }, + "sport": { + "example": "football", + "type": "string" + } + }, + "type": "object" + }, + "sofascore.Venue": { + "properties": { + "capacity": { + "description": "Venue capacity.", + "example": 61276, + "type": "integer" + }, + "city": { + "description": "City the venue is in.", + "example": "Liverpool", + "type": "string" + }, + "country": { + "description": "Country the venue is in.", + "example": "England", + "type": "string" + }, + "name": { + "description": "Venue name.", + "example": "Anfield", + "type": "string" + } + }, + "type": "object" + }, + "sofascore.VenueEventsResponse": { + "properties": { + "count": { + "type": "integer" + }, + "direction": { + "example": "last", + "type": "string" + }, + "events": { + "items": { + "$ref": "#/definitions/sofascore.EventSummary" }, - "type": "object" + "type": "array" }, - "hasMore": { - "description": "Whether more posts remain after this page.", + "fetched_at": { + "type": "string" + }, + "has_next_page": { "type": "boolean" }, - "itemList": { - "description": "Videos posted by the account, one entry per video, as TikTok returns them.", - "items": {}, - "type": "array" + "page": { + "type": "integer" }, - "log_pb": { - "description": "Request tracking information from TikTok, holding the `impr_id` impression id.", - "properties": { - "impr_id": { - "type": "string" - } - }, - "type": "object" + "season_id": { + "type": "integer" }, - "status_code": { - "description": "TikTok status code for the request. `0` on a successful response.", + "source_url": { + "type": "string" + }, + "sport": { + "example": "all", + "type": "string" + }, + "tournament_id": { "type": "integer" }, - "status_msg": { - "description": "Status message that goes with the status code.", + "venue_id": { + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.VenueRecord": { + "properties": { + "capacity": { + "example": 60704, + "type": "integer" + }, + "city": { + "example": "London", + "type": "string" + }, + "country": { + "example": "England", + "type": "string" + }, + "hidden": { + "description": "Hidden is SofaScore's hidden flag. A hidden venue has no venue-wide match\nlist (venue-events answers not found without tournament and season), but\nits matches are still listed per competition season.", + "type": "boolean" + }, + "id": { + "example": 624, + "type": "integer" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "name": { + "example": "Emirates Stadium", + "type": "string" + }, + "slug": { + "example": "emirates-stadium", + "type": "string" + }, + "state": { + "example": "US-TX", "type": "string" } }, "type": "object" }, - "tiktok.VideoDetailResp": { + "sofascore.VenueResponse": { "properties": { - "extra": { - "description": "Response metadata from TikTok, such as the request log id and server time.", - "properties": { - "fatal_item_ids": { - "items": {}, - "type": "array" - }, - "logid": { - "type": "string" - }, - "now": { - "type": "integer" - } + "fetched_at": { + "type": "string" + }, + "main_teams": { + "items": { + "$ref": "#/definitions/sofascore.TeamRef" }, - "type": "object" + "type": "array" }, - "itemInfo": { - "description": "Details of the video, as TikTok returns them." + "source_url": { + "type": "string" }, - "log_pb": { - "description": "Request tracking information from TikTok, holding the `impr_id` impression id.", - "properties": { - "impr_id": { - "type": "string" - } + "sports": { + "items": { + "$ref": "#/definitions/sofascore.VenueSportStatistics" }, - "type": "object" + "type": "array" }, - "shareMeta": { - "description": "Title and description TikTok uses when the video is shared.", - "properties": { - "desc": { - "type": "string" - }, - "title": { - "type": "string" - } - }, - "type": "object" + "totals": { + "$ref": "#/definitions/sofascore.VenueTotals" }, - "status_code": { - "description": "TikTok status code for the request. `0` on a successful response.", - "type": "integer" + "venue": { + "$ref": "#/definitions/sofascore.VenueRecord" + } + }, + "type": "object" + }, + "sofascore.VenueSportStatistics": { + "properties": { + "draw_percentage": { + "type": "number" }, - "status_msg": { - "description": "Status message that goes with the status code.", + "goals_scored": { + "type": "number" + }, + "home_win_percentage": { + "description": "HomeWinPercentage and DrawPercentage are percentages (0 to 100).", + "type": "number" + }, + "sport": { + "example": "football", "type": "string" + }, + "total_matches": { + "example": 415, + "type": "integer" } }, "type": "object" }, - "tiktok.categoryResponseDoc": { + "sofascore.VenueTotals": { + "properties": { + "avg_corner_kicks_per_game": { + "type": "number" + }, + "avg_red_cards_per_game": { + "type": "number" + }, + "away_team_goals_scored": { + "type": "number" + }, + "away_team_wins_percentage": { + "type": "number" + }, + "draws_percentage": { + "type": "number" + }, + "home_team_goals_scored": { + "type": "number" + }, + "home_team_wins_percentage": { + "type": "number" + }, + "total_matches": { + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.VoteBothTeamsToScore": { + "properties": { + "no": { + "example": 4381, + "type": "integer" + }, + "yes": { + "example": 5882, + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.VoteFirstToScore": { + "properties": { + "away": { + "example": 457, + "type": "integer" + }, + "home": { + "example": 8908, + "type": "integer" + }, + "no_goal": { + "example": 159, + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.VoteMatchResult": { + "properties": { + "away": { + "example": 2503, + "type": "integer" + }, + "draw": { + "example": 3713, + "type": "integer" + }, + "home": { + "example": 52785, + "type": "integer" + }, + "total": { + "example": 59001, + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.VoteWhoShouldHaveWon": { + "properties": { + "away": { + "type": "integer" + }, + "home": { + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.WDLRecord": { + "properties": { + "draws": { + "type": "integer" + }, + "losses": { + "type": "integer" + }, + "wins": { + "type": "integer" + } + }, + "type": "object" + }, + "sofascore.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "items": { - "$ref": "#/definitions/tiktok.Category" - }, - "type": "array" + "$ref": "#/definitions/sofascore.CategoriesResponse" }, "msg": { "example": "OK", @@ -234770,14 +241147,14 @@ }, "type": "object" }, - "tiktok.challengeListResponseDoc": { + "sofascore.categoryTournamentsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktok.ChallengeListResp" + "$ref": "#/definitions/sofascore.CategoryTournamentsResponse" }, "msg": { "example": "OK", @@ -234786,14 +241163,14 @@ }, "type": "object" }, - "tiktok.challengeResponseDoc": { + "sofascore.draftPicksResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktok.ChallengeDetailResp" + "$ref": "#/definitions/sofascore.DraftPicksResponse" }, "msg": { "example": "OK", @@ -234802,14 +241179,14 @@ }, "type": "object" }, - "tiktok.commentsResponseDoc": { + "sofascore.draftResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktok.CommentResp" + "$ref": "#/definitions/sofascore.DraftResponse" }, "msg": { "example": "OK", @@ -234818,14 +241195,14 @@ }, "type": "object" }, - "tiktok.exploreResponseDoc": { + "sofascore.esportsGameResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktok.ExploreResp" + "$ref": "#/definitions/sofascore.EsportsGameResponse" }, "msg": { "example": "OK", @@ -234834,14 +241211,14 @@ }, "type": "object" }, - "tiktok.postResponseDoc": { + "sofascore.eventAtBatPitchesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktok.VideoDetailResp" + "$ref": "#/definitions/sofascore.EventAtBatPitchesResponse" }, "msg": { "example": "OK", @@ -234850,14 +241227,14 @@ }, "type": "object" }, - "tiktok.profilePostResponseDoc": { + "sofascore.eventAtBatsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktok.UserPostLinkResp" + "$ref": "#/definitions/sofascore.EventAtBatsResponse" }, "msg": { "example": "OK", @@ -234866,14 +241243,14 @@ }, "type": "object" }, - "tiktok.profileResponseDoc": { + "sofascore.eventAveragePositionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktok.Profile" + "$ref": "#/definitions/sofascore.EventAveragePositionsResponse" }, "msg": { "example": "OK", @@ -234882,14 +241259,14 @@ }, "type": "object" }, - "tiktok.searchHashtagResponseDoc": { + "sofascore.eventBaseballTopPerformersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktok.SearchHashtagResp" + "$ref": "#/definitions/sofascore.EventBaseballTopPerformersResponse" }, "msg": { "example": "OK", @@ -234898,14 +241275,14 @@ }, "type": "object" }, - "tiktok.searchResponseDoc": { + "sofascore.eventBestPlayersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktok.SearchResp" + "$ref": "#/definitions/sofascore.EventBestPlayersResponse" }, "msg": { "example": "OK", @@ -234914,14 +241291,14 @@ }, "type": "object" }, - "tiktok.searchUserResponseDoc": { + "sofascore.eventCommentsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktok.SearchUserResp" + "$ref": "#/definitions/sofascore.EventCommentsResponse" }, "msg": { "example": "OK", @@ -234930,14 +241307,14 @@ }, "type": "object" }, - "tiktok.trendingResponseDoc": { + "sofascore.eventEsportsGamesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktok.TrendingResp" + "$ref": "#/definitions/sofascore.EventEsportsGamesResponse" }, "msg": { "example": "OK", @@ -234946,1274 +241323,750 @@ }, "type": "object" }, - "tiktokmobile.CategoryListResponse": { + "sofascore.eventGraphResponseDoc": { "properties": { - "category_list": { - "items": {}, - "type": "array" - }, - "cursor": { - "type": "integer" - }, - "device_type": { + "code": { + "example": 200, "type": "integer" }, - "extra": {}, - "has_more": { - "type": "boolean" - }, - "log_pb": {}, - "status_code": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.EventGraphResponse" }, - "status_msg": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.CollectionDetailResponse": { + "sofascore.eventH2HResponseDoc": { "properties": { - "extra": {}, - "item_archive": {}, - "log_pb": {}, - "status_code": { + "code": { + "example": 200, "type": "integer" }, - "status_msg": { + "data": { + "$ref": "#/definitions/sofascore.EventH2HResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.CollectionListResponse": { + "sofascore.eventHighlightsResponseDoc": { "properties": { - "cursor": { + "code": { + "example": 200, "type": "integer" }, - "extra": {}, - "has_more": { - "type": "boolean" - }, - "item_archive_detail_list": { - "items": {}, - "type": "array" - }, - "log_pb": {}, - "status_code": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.EventHighlightsResponse" }, - "status_msg": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.CollectionVideosResponse": { + "sofascore.eventIncidentsResponseDoc": { "properties": { - "extra": {}, - "has_more": { - "type": "boolean" - }, - "items": { - "items": {}, - "type": "array" - }, - "log_pb": {}, - "max_cursor": { - "type": "integer" - }, - "min_cursor": { + "code": { + "example": 200, "type": "integer" }, - "status_code": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.EventIncidentsResponse" }, - "status_msg": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.CommentRepliesResponse": { + "sofascore.eventInningsResponseDoc": { "properties": { - "comments": { - "items": {}, - "type": "array" - }, - "cursor": { + "code": { + "example": 200, "type": "integer" }, - "has_more": { - "type": "boolean" - }, - "status_code": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.EventInningsResponse" }, - "status_msg": { + "msg": { + "example": "OK", "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "tiktokmobile.CommentsResponse": { + "sofascore.eventLineupsResponseDoc": { "properties": { - "comments": { - "items": {}, - "type": "array" - }, - "cursor": { + "code": { + "example": 200, "type": "integer" }, - "has_more": { - "type": "boolean" - }, - "status_code": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.EventLineupsResponse" }, - "status_msg": { + "msg": { + "example": "OK", "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "tiktokmobile.FeedItem": { + "sofascore.eventManagersResponseDoc": { "properties": { - "author_id": { + "code": { + "example": 200, "type": "integer" }, - "author_id_str": { - "description": "AuthorIDStr is the same uid as a string. TikTok uids exceed 2^53, so JavaScript consumers of the numeric\nauthor_id receive a rounded value; read this field instead. author_id stays for existing typed clients.", - "type": "string" - }, - "aweme_id": { - "type": "string" - }, - "create_time": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.EventManagersResponse" }, - "share_url": { + "msg": { + "example": "OK", "type": "string" - }, - "statistics": { - "$ref": "#/definitions/tiktokmobile.FeedStatistics" } }, "type": "object" }, - "tiktokmobile.FeedResponse": { + "sofascore.eventOddsResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" + "data": { + "$ref": "#/definitions/sofascore.EventOddsResponse" }, - "host": { + "msg": { + "example": "OK", "type": "string" - }, - "items": { - "items": { - "$ref": "#/definitions/tiktokmobile.FeedItem" - }, - "type": "array" } }, "type": "object" }, - "tiktokmobile.FeedStatistics": { + "sofascore.eventPlayerHeatmapResponseDoc": { "properties": { - "aweme_id": { - "type": "string" - }, - "collect_count": { - "type": "integer" - }, - "comment_count": { - "type": "integer" - }, - "digg_count": { - "type": "integer" - }, - "download_count": { - "type": "integer" - }, - "forward_count": { - "type": "integer" - }, - "lose_comment_count": { - "type": "integer" - }, - "lose_count": { - "type": "integer" - }, - "play_count": { - "type": "integer" - }, - "repost_count": { + "code": { + "example": 200, "type": "integer" }, - "share_count": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.EventPlayerHeatmapResponse" }, - "whatsapp_share_count": { - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "tiktokmobile.HashtagInfoResponse": { + "sofascore.eventPlayerStatisticsResponseDoc": { "properties": { - "ch_info": {}, - "hashtag_name": { - "type": "string" - }, - "status_code": { + "code": { + "example": 200, "type": "integer" }, - "status_msg": { + "data": { + "$ref": "#/definitions/sofascore.EventPlayerStatisticsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.HashtagPostsResponse": { + "sofascore.eventPointByPointResponseDoc": { "properties": { - "aweme_list": { - "items": {}, - "type": "array" - }, - "cursor": { + "code": { + "example": 200, "type": "integer" }, - "has_more": { - "type": "boolean" - }, - "status_code": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.EventPointByPointResponse" }, - "status_msg": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.HashtagSearchResponse": { + "sofascore.eventPregameFormResponseDoc": { "properties": { - "challenge_list": { - "items": {}, - "type": "array" - }, - "cursor": { + "code": { + "example": 200, "type": "integer" }, - "has_more": { - "type": "boolean" - }, - "status_code": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.EventPregameFormResponse" }, - "status_msg": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.HotMusicResponse": { + "sofascore.eventResponseDoc": { "properties": { - "cursor": { + "code": { + "example": 200, "type": "integer" }, - "extra": {}, - "has_more": { - "type": "boolean" + "data": { + "$ref": "#/definitions/sofascore.EventResponse" }, - "log_pb": {}, "msg": { - "type": "string" - }, - "music_list": { - "items": {}, - "type": "array" - }, - "status_code": { - "type": "integer" - }, - "status_msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.LiveGameCategory": { + "sofascore.eventShotmapResponseDoc": { "properties": { - "game_type": { + "code": { + "example": 200, "type": "integer" }, - "title": { + "data": { + "$ref": "#/definitions/sofascore.EventShotmapResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.LiveGameTag": { + "sofascore.eventStatisticsResponseDoc": { "properties": { - "bundle_id": { - "type": "string" - }, - "full_name": { - "type": "string" - }, - "game_category": { - "items": { - "$ref": "#/definitions/tiktokmobile.LiveGameCategory" - }, - "type": "array" - }, - "gar": { - "items": {}, - "type": "array" - }, - "hashtag_id": { - "items": {}, - "type": "array" - }, - "hashtag_list": { - "items": { - "$ref": "#/definitions/tiktokmobile.LiveHashtag" - }, - "type": "array" - }, - "id": { - "type": "integer" - }, - "is_new_game": { - "type": "boolean" - }, - "landscape": { + "code": { + "example": 200, "type": "integer" }, - "package_name": { - "type": "string" - }, - "short_name": { - "type": "string" + "data": { + "$ref": "#/definitions/sofascore.EventStatisticsResponse" }, - "show_name": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.LiveHashtag": { + "sofascore.eventTVChannelsResponseDoc": { "properties": { - "id": { + "code": { + "example": 200, "type": "integer" }, - "image": {}, - "namespace": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.EventTVChannelsResponse" }, - "title": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.LiveRoomOwner": { + "sofascore.eventTeamHeatmapResponseDoc": { "properties": { - "avatar": {}, - "nickname": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "user_id": { + "data": { + "$ref": "#/definitions/sofascore.EventTeamHeatmapResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.LiveRoomStats": { + "sofascore.eventTeamStreaksResponseDoc": { "properties": { - "comment_count": { - "type": "integer" - }, - "enter_count": { - "type": "integer" - }, - "follow_count": { - "type": "integer" - }, - "like_count": { + "code": { + "example": 200, "type": "integer" }, - "replay_viewers": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.EventTeamStreaksResponse" }, - "share_count": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "sofascore.eventTennisPowerResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "total_user": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.EventTennisPowerResponse" }, - "watch_user_count": { - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "tiktokmobile.LiveRoomStream": { + "sofascore.eventVotesResponseDoc": { "properties": { - "candidate_resolution": { - "items": { - "type": "string" - }, - "type": "array" - }, - "default_resolution": { - "type": "string" - }, - "flv_pull_url": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "code": { + "example": 200, + "type": "integer" }, - "hls_pull_url": { - "type": "string" + "data": { + "$ref": "#/definitions/sofascore.EventVotesResponse" }, - "rtmp_pull_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.LiveSearchResponse": { + "sofascore.liveEventsResponseDoc": { "properties": { - "cursor": { + "code": { + "example": 200, "type": "integer" }, "data": { - "items": {}, - "type": "array" + "$ref": "#/definitions/sofascore.LiveEventsResponse" }, - "extra": {}, - "extra_data": {}, - "feedback_type": { + "msg": { + "example": "OK", "type": "string" - }, - "global_doodle_config": {}, - "guide_search_words": {}, - "has_more": { - "type": "boolean" - }, - "log_pb": {}, - "status_code": { + } + }, + "type": "object" + }, + "sofascore.managerEventsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "status_msg": { + "data": { + "$ref": "#/definitions/sofascore.ManagerEventsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.MusicBeatsSongsResponse": { + "sofascore.managerResponseDoc": { "properties": { - "extra": {}, - "log_pb": {}, - "music_list": { - "items": {}, - "type": "array" - }, - "status_code": { + "code": { + "example": 200, "type": "integer" }, - "status_msg": { + "data": { + "$ref": "#/definitions/sofascore.ManagerResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.MusicChartResponse": { + "sofascore.mmaCardResponseDoc": { "properties": { - "chart_info": {}, - "cover_image_url": { - "type": "string" - }, - "cursor": { + "code": { + "example": 200, "type": "integer" }, - "extra": {}, - "has_more": { - "type": "boolean" + "data": { + "$ref": "#/definitions/sofascore.MMACardResponse" }, - "log_pb": {}, "msg": { + "example": "OK", "type": "string" - }, - "music_list": { - "items": {}, - "type": "array" - }, - "status_code": { + } + }, + "type": "object" + }, + "sofascore.mmaScheduleResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "status_msg": { + "data": { + "$ref": "#/definitions/sofascore.MMAScheduleResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.MusicCollectionFeedResponse": { + "sofascore.oddsDroppingResponseDoc": { "properties": { - "cursor": { + "code": { + "example": 200, "type": "integer" }, - "extra": {}, - "has_more": { - "type": "boolean" - }, - "log_pb": {}, - "mcf_list": { - "items": {}, - "type": "array" - }, - "status_code": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.OddsDroppingResponse" }, - "status_msg": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.MusicDetailResponse": { + "sofascore.oddsWinningResponseDoc": { "properties": { - "ai_recommend_music": {}, - "ai_recommend_video": {}, - "behind_the_song_exist": { - "type": "boolean" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/sofascore.OddsWinningResponse" }, - "cost_time_info": {}, - "extra": {}, - "log_pb": {}, "msg": { + "example": "OK", "type": "string" - }, - "music_chart_rank": {}, - "music_info": {}, - "rec_list": {}, - "similar_music": {}, - "similar_music_ids": {}, - "status_code": { + } + }, + "type": "object" + }, + "sofascore.playerAttributesResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "status_msg": { + "data": { + "$ref": "#/definitions/sofascore.PlayerAttributesResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.MusicFreshAwemeResponse": { + "sofascore.playerEventsResponseDoc": { "properties": { - "aweme_list": { - "items": {}, - "type": "array" - }, - "can_pin_video": { - "description": "popular listing only" - }, - "cursor": { + "code": { + "example": 200, "type": "integer" }, - "extra": {}, - "has_more": { - "type": "boolean" - }, - "log_pb": {}, - "need_lazy_loading": { - "description": "popular listing only" - }, - "status_code": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.PlayerEventsResponse" }, - "status_msg": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.MusicPickResponse": { + "sofascore.playerLastYearSummaryResponseDoc": { "properties": { - "cursor": { + "code": { + "example": 200, "type": "integer" }, - "has_more": { - "type": "boolean" - }, - "mc_list": { - "items": {}, - "type": "array" - }, - "music_list": { - "items": {}, - "type": "array" + "data": { + "$ref": "#/definitions/sofascore.PlayerLastYearSummaryResponse" }, - "radio_cursor": { + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "sofascore.playerNationalTeamStatisticsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "status_code": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.PlayerNationalTeamStatisticsResponse" }, - "status_msg": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.MusicRelatedResponse": { + "sofascore.playerPenaltyHistoryResponseDoc": { "properties": { - "cursor": { + "code": { + "example": 200, "type": "integer" }, - "has_more": { - "type": "boolean" + "data": { + "$ref": "#/definitions/sofascore.PlayerPenaltyHistoryResponse" }, - "music_list": { - "items": {}, - "type": "array" - }, - "music_type": { - "type": "integer" - }, - "recall_info_list": { - "items": {}, - "type": "array" - }, - "similar_song_ids": { - "items": {}, - "type": "array" - }, - "status_code": { - "type": "integer" - }, - "status_msg": { - "type": "string" - } - }, - "type": "object" - }, - "tiktokmobile.PlaceMediaResponse": { - "properties": { - "data_version": { - "type": "string" - }, - "extra": {}, - "has_more": { - "type": "boolean" - }, - "item_list": { - "items": {}, - "type": "array" - }, - "log_pb": {}, - "next_cursor": { - "type": "string" - }, - "pos": {}, - "post_bottom_bar_style": {}, - "status_code": { - "type": "integer" - }, - "status_msg": { - "type": "string" - }, - "title": { - "type": "string" - } - }, - "type": "object" - }, - "tiktokmobile.PlacePOIContainer": { - "properties": { - "poi_info": { - "items": {}, - "type": "array" - } - }, - "type": "object" - }, - "tiktokmobile.PlaceReviewsResponse": { - "properties": { - "collect_info": {}, - "cursor": { - "type": "integer" - }, - "extra": {}, - "folded_cursor": { - "type": "integer" - }, - "folded_has_more": { - "type": "boolean" - }, - "has_more": { - "type": "boolean" - }, - "is_hide_review_summary": { - "type": "boolean" - }, - "landing_tab": { - "type": "integer" - }, - "log_pb": {}, - "poi_id": { - "type": "string" - }, - "poi_name": { - "type": "string" - }, - "post_review_description": { - "type": "string" - }, - "post_review_sub_description": { - "type": "string" - }, - "review_summary": {}, - "review_tags": { - "items": {}, - "type": "array" - }, - "reviews": { - "items": {}, - "type": "array" - }, - "status_code": { - "type": "integer" - }, - "status_msg": { - "type": "string" - } - }, - "type": "object" - }, - "tiktokmobile.PlaylistDetailResponse": { - "properties": { - "extra": {}, - "is_collect": { - "type": "boolean" - }, - "log_pb": {}, - "mix": { - "$ref": "#/definitions/tiktokmobile.PlaylistSummary" - }, - "status_code": { - "type": "integer" - }, - "status_msg": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.PlaylistListResponse": { + "sofascore.playerRatingsResponseDoc": { "properties": { - "cursor": { + "code": { + "example": 200, "type": "integer" }, - "extra": {}, - "has_more": { - "type": "boolean" - }, - "log_pb": {}, - "mix_list": { - "items": { - "$ref": "#/definitions/tiktokmobile.PlaylistSummary" - }, - "type": "array" - }, - "status_code": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.PlayerRatingsResponse" }, - "status_msg": { + "msg": { + "example": "OK", "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "tiktokmobile.PlaylistSummary": { - "properties": { - "author": {}, - "creator_name": { - "type": "string" - }, - "last_add_video_timestamp": { - "type": "integer" - }, - "mix_id": { - "type": "string" - }, - "mix_type": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "share_info": {}, - "statistic": {}, - "status": {} - }, - "type": "object" - }, - "tiktokmobile.PlaylistVideosResponse": { + "sofascore.playerResponseDoc": { "properties": { - "cursor": { + "code": { + "example": 200, "type": "integer" }, - "has_more": { - "type": "boolean" - }, - "item_list": { - "items": {}, - "type": "array" - }, - "status_code": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.PlayerResponse" }, - "status_msg": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.SearchGeneralResponse": { + "sofascore.playerSeasonHeatmapResponseDoc": { "properties": { - "cursor": { + "code": { + "example": 200, "type": "integer" }, "data": { - "items": {}, - "type": "array" - }, - "has_more": { - "type": "boolean" - }, - "search_id": { - "type": "string" - }, - "status_code": { - "type": "integer" + "$ref": "#/definitions/sofascore.PlayerSeasonHeatmapResponse" }, - "status_msg": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.SearchMusicResponse": { + "sofascore.playerSeasonStatisticsResponseDoc": { "properties": { - "cursor": { + "code": { + "example": 200, "type": "integer" }, - "has_more": { - "type": "boolean" - }, - "music": { - "items": {}, - "type": "array" - }, - "music_info_list": { - "items": {}, - "type": "array" - }, - "status_code": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.PlayerSeasonStatisticsResponse" }, - "status_msg": { + "msg": { + "example": "OK", "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "tiktokmobile.SearchPlaceResponse": { + "sofascore.playerStatisticalRankingsResponseDoc": { "properties": { - "cursor": { - "type": "integer" - }, - "extra": {}, - "feedback_type": { - "type": "string" - }, - "has_more": { - "type": "boolean" - }, - "log_pb": {}, - "poi_info": { - "$ref": "#/definitions/tiktokmobile.PlacePOIContainer" - }, - "status_code": { + "code": { + "example": 200, "type": "integer" }, - "status_msg": { - "type": "string" - } - }, - "type": "object" - }, - "tiktokmobile.SearchSuggestion": { - "properties": { - "content": { - "type": "string" - }, - "extra_info": {}, - "highlight_pos": {}, - "pos": {}, - "rich_sug_sec_pos": {}, - "sug_type": { - "type": "string" - }, - "word_record": {} - }, - "type": "object" - }, - "tiktokmobile.SearchSuggestionResponse": { - "properties": { - "extra": {}, - "has_more": { - "type": "boolean" - }, - "log_pb": {}, - "rid": { - "type": "string" - }, - "status_code": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.PlayerStatisticalRankingsResponse" }, - "status_msg": { + "msg": { + "example": "OK", "type": "string" - }, - "sug_list": { - "items": { - "$ref": "#/definitions/tiktokmobile.SearchSuggestion" - }, - "type": "array" } }, "type": "object" }, - "tiktokmobile.SearchUsersResponse": { + "sofascore.playerStatisticsSeasonsResponseDoc": { "properties": { - "cursor": { + "code": { + "example": 200, "type": "integer" }, - "has_more": { - "type": "boolean" - }, - "status_code": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.PlayerStatisticsSeasonsResponse" }, - "status_msg": { + "msg": { + "example": "OK", "type": "string" - }, - "user_list": { - "items": {}, - "type": "array" } }, "type": "object" }, - "tiktokmobile.SearchVideosResponse": { + "sofascore.playerTournamentsResponseDoc": { "properties": { - "aweme_list": { - "items": {}, - "type": "array" - }, - "cursor": { + "code": { + "example": 200, "type": "integer" }, - "extra": {}, - "feedback_type": { - "type": "string" - }, - "has_more": { - "type": "boolean" - }, - "log_pb": {}, - "search_id": { - "type": "string" - }, - "search_item_list": { - "items": {}, - "type": "array" - }, - "status_code": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.PlayerTournamentsResponse" }, - "status_msg": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.StickerDiscoverResponse": { + "sofascore.playerTransfersResponseDoc": { "properties": { - "aweme_list": { - "items": {}, - "type": "array" - }, - "cursor": { + "code": { + "example": 200, "type": "integer" }, - "extra": {}, - "feed_session_id": { - "type": "string" - }, - "has_more": { - "type": "boolean" - }, - "log_pb": {}, - "status_code": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.PlayerTransfersResponse" }, - "status_msg": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.SubtitleCue": { + "sofascore.rankingTypesResponseDoc": { "properties": { - "end": { - "type": "string" - }, - "end_ms": { + "code": { + "example": 200, "type": "integer" }, - "start": { - "type": "string" - }, - "start_ms": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.RankingTypesResponse" }, - "text": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.UserFollowersResponse": { + "sofascore.rankingsResponseDoc": { "properties": { - "extra": {}, - "followers": { - "items": {}, - "type": "array" - }, - "has_more": { - "type": "boolean" - }, - "log_pb": {}, - "max_time": { - "type": "integer" - }, - "min_time": { - "type": "integer" - }, - "myself_user_id": { - "type": "string" - }, - "next_page_token": { - "type": "string" - }, - "offset": { + "code": { + "example": 200, "type": "integer" }, - "status_code": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.RankingsResponse" }, - "status_msg": { + "msg": { + "example": "OK", "type": "string" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "tiktokmobile.UserOriginalEffectsResponse": { + "sofascore.refereeEventsResponseDoc": { "properties": { - "cursor": { + "code": { + "example": 200, "type": "integer" }, - "effect": { - "items": {}, - "type": "array" - }, - "extra": {}, - "has_more": { - "type": "boolean" - }, - "log_pb": {}, - "status_code": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.RefereeEventsResponse" }, - "status_msg": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.UserOriginalMusicResponse": { + "sofascore.refereeResponseDoc": { "properties": { - "cursor": { + "code": { + "example": 200, "type": "integer" }, - "extra": {}, - "groups": { - "items": {}, - "type": "array" - }, - "has_more": { - "type": "boolean" - }, - "honor_label": {}, - "log_pb": {}, - "music": { - "items": {}, - "type": "array" - }, - "status_code": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.RefereeResponse" }, - "status_msg": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.UserPostsResponse": { + "sofascore.refereeStatisticsResponseDoc": { "properties": { - "aweme_list": { - "items": {}, - "type": "array" - }, - "extra": {}, - "has_more": { - "type": "boolean" - }, - "log_pb": {}, - "max_cursor": { - "type": "integer" - }, - "min_cursor": { - "type": "integer" - }, - "status_code": { + "code": { + "example": 200, "type": "integer" }, - "status_msg": { - "type": "string" - } - }, - "type": "object" - }, - "tiktokmobile.UserProfileResponse": { - "properties": { - "common": {}, - "extra": {}, - "header": {}, - "log_pb": {}, - "nav_bar": {}, - "profile_tab": {}, - "status_code": { - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.RefereeStatisticsResponse" }, - "status_msg": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.VideoDetailResponse": { + "sofascore.roundEventsResponseDoc": { "properties": { - "aweme_detail": {}, - "extra": {}, - "log_pb": {}, - "status_code": { + "code": { + "example": 200, "type": "integer" }, - "status_msg": { - "type": "string" - } - }, - "type": "object" - }, - "tiktokmobile.WebcastEffectsData": { - "properties": { - "assets": { - "items": {}, - "type": "array" - } - }, - "type": "object" - }, - "tiktokmobile.WebcastEffectsResponse": { - "properties": { "data": { - "$ref": "#/definitions/tiktokmobile.WebcastEffectsData" - }, - "extra": {}, - "status_code": { - "type": "integer" - } - }, - "type": "object" - }, - "tiktokmobile.WebcastGiftListResponse": { - "properties": { - "data": {}, - "extra": {}, - "status_code": { - "type": "integer" - } - }, - "type": "object" - }, - "tiktokmobile.anchorListResponseDoc": { - "properties": { - "anchors": { - "items": {}, - "type": "array" - }, - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" + "$ref": "#/definitions/sofascore.RoundEventsResponse" }, - "host": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.categoryListResponseDoc": { + "sofascore.scheduledEventsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.CategoryListResponse" + "$ref": "#/definitions/sofascore.ScheduledEventsResponse" }, "msg": { "example": "OK", @@ -236222,14 +242075,14 @@ }, "type": "object" }, - "tiktokmobile.collectionDetailResponseDoc": { + "sofascore.scheduledTournamentsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.CollectionDetailResponse" + "$ref": "#/definitions/sofascore.ScheduledTournamentsResponse" }, "msg": { "example": "OK", @@ -236238,14 +242091,14 @@ }, "type": "object" }, - "tiktokmobile.collectionListResponseDoc": { + "sofascore.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.CollectionListResponse" + "$ref": "#/definitions/sofascore.SearchResponse" }, "msg": { "example": "OK", @@ -236254,14 +242107,14 @@ }, "type": "object" }, - "tiktokmobile.collectionVideosResponseDoc": { + "sofascore.searchTypedResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.CollectionVideosResponse" + "$ref": "#/definitions/sofascore.SearchTypedResponse" }, "msg": { "example": "OK", @@ -236270,14 +242123,14 @@ }, "type": "object" }, - "tiktokmobile.commentRepliesResponseDoc": { + "sofascore.seasonEventsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.CommentRepliesResponse" + "$ref": "#/definitions/sofascore.SeasonEventsResponse" }, "msg": { "example": "OK", @@ -236286,14 +242139,14 @@ }, "type": "object" }, - "tiktokmobile.commentsResponseDoc": { + "sofascore.sportsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.CommentsResponse" + "$ref": "#/definitions/sofascore.SportsResponse" }, "msg": { "example": "OK", @@ -236302,40 +242155,14 @@ }, "type": "object" }, - "tiktokmobile.feedPostResponseDoc": { - "properties": { - "fetched_at": { - "example": "2026-10-20T08:20:00Z", - "type": "string" - }, - "host": { - "example": "aggr16-normal.tiktokv.us", - "type": "string" - }, - "items": { - "additionalProperties": {}, - "type": "object" - }, - "note": { - "type": "string" - }, - "strings": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "tiktokmobile.feedResponseDoc": { + "sofascore.stageCategoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.FeedResponse" + "$ref": "#/definitions/sofascore.StageCategoriesResponse" }, "msg": { "example": "OK", @@ -236344,14 +242171,14 @@ }, "type": "object" }, - "tiktokmobile.hashtagInfoResponseDoc": { + "sofascore.stageDetailResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.HashtagInfoResponse" + "$ref": "#/definitions/sofascore.StageDetailResponse" }, "msg": { "example": "OK", @@ -236360,14 +242187,14 @@ }, "type": "object" }, - "tiktokmobile.hashtagPostsResponseDoc": { + "sofascore.stageDriverPerformanceResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.HashtagPostsResponse" + "$ref": "#/definitions/sofascore.StageDriverPerformanceResponse" }, "msg": { "example": "OK", @@ -236376,14 +242203,14 @@ }, "type": "object" }, - "tiktokmobile.hashtagSearchResponseDoc": { + "sofascore.stageFeaturedResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.HashtagSearchResponse" + "$ref": "#/definitions/sofascore.StageFeaturedResponse" }, "msg": { "example": "OK", @@ -236392,38 +242219,14 @@ }, "type": "object" }, - "tiktokmobile.hashtagSuggestionsResponseDoc": { - "properties": { - "extra": {}, - "log_pb": {}, - "rid": { - "example": "20261021173213477CE85B8289CE303E4D", - "type": "string" - }, - "status_code": { - "example": 0, - "type": "integer" - }, - "status_msg": { - "example": "", - "type": "string" - }, - "sug_list": { - "items": {}, - "type": "array" - }, - "words_query_record": {} - }, - "type": "object" - }, - "tiktokmobile.hotMusicResponseDoc": { + "sofascore.stageScheduleResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.HotMusicResponse" + "$ref": "#/definitions/sofascore.StageScheduleResponse" }, "msg": { "example": "OK", @@ -236432,14 +242235,14 @@ }, "type": "object" }, - "tiktokmobile.liveEffectsResponseDoc": { + "sofascore.stageSeasonsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.WebcastEffectsResponse" + "$ref": "#/definitions/sofascore.StageSeasonsResponse" }, "msg": { "example": "OK", @@ -236448,14 +242251,14 @@ }, "type": "object" }, - "tiktokmobile.liveGiftsResponseDoc": { + "sofascore.stageStandingsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.WebcastGiftListResponse" + "$ref": "#/definitions/sofascore.StageStandingsResponse" }, "msg": { "example": "OK", @@ -236464,119 +242267,46 @@ }, "type": "object" }, - "tiktokmobile.liveHashtagCatalogResponseDoc": { + "sofascore.stageSubstagesResponseDoc": { "properties": { - "extra": {}, - "fetched_at": { - "type": "string" - }, - "game_hashtag": { - "$ref": "#/definitions/tiktokmobile.LiveHashtag" - }, - "game_tag_count": { - "example": 1500, + "code": { + "example": 200, "type": "integer" }, - "game_tag_list": { - "items": { - "$ref": "#/definitions/tiktokmobile.LiveGameTag" - }, - "type": "array" - }, - "hashtags": { - "items": { - "$ref": "#/definitions/tiktokmobile.LiveHashtag" - }, - "type": "array" - }, - "host": { - "example": "webcast16-normal-c-useast2a.tiktokv.com", - "type": "string" - }, - "live_studio_hashtags": { - "items": { - "$ref": "#/definitions/tiktokmobile.LiveHashtag" - }, - "type": "array" - }, - "live_voice_hashtags": { - "items": { - "$ref": "#/definitions/tiktokmobile.LiveHashtag" - }, - "type": "array" - }, - "status_code": { - "example": 0, - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.StageSubstagesResponse" }, - "status_msg": { - "example": "", + "msg": { + "example": "OK", "type": "string" - }, - "third_party_hashtags": { - "items": { - "$ref": "#/definitions/tiktokmobile.LiveHashtag" - }, - "type": "array" } }, "type": "object" }, - "tiktokmobile.liveRoomInfoResponseDoc": { + "sofascore.standingsResponseDoc": { "properties": { - "cover": {}, - "create_time": { - "example": 1792603783, - "type": "integer" - }, - "data": {}, - "fetched_at": { - "type": "string" - }, - "host": { - "example": "webcast16-normal-c-useast2a.tiktokv.com", - "type": "string" - }, - "owner": { - "$ref": "#/definitions/tiktokmobile.LiveRoomOwner" - }, - "room_id": { - "example": "7699174209096059678", - "type": "string" - }, - "stats": { - "$ref": "#/definitions/tiktokmobile.LiveRoomStats" - }, - "status": { - "example": 2, + "code": { + "example": 200, "type": "integer" }, - "stream": { - "$ref": "#/definitions/tiktokmobile.LiveRoomStream" - }, - "title": { - "example": "Lets Go LIVE!", - "type": "string" - }, - "user_count": { - "example": 1595, - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.StandingsResponse" }, - "user_id": { - "example": "6707748031095751686", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.liveSearchResponseDoc": { + "sofascore.teamAchievementsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.LiveSearchResponse" + "$ref": "#/definitions/sofascore.TeamAchievementsResponse" }, "msg": { "example": "OK", @@ -236585,28 +242315,14 @@ }, "type": "object" }, - "tiktokmobile.liveTabsResponseDoc": { - "properties": { - "data": { - "items": {}, - "type": "array" - }, - "extra": {}, - "status_code": { - "example": 0, - "type": "integer" - } - }, - "type": "object" - }, - "tiktokmobile.musicBeatsSongsResponseDoc": { + "sofascore.teamEventsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.MusicBeatsSongsResponse" + "$ref": "#/definitions/sofascore.TeamEventsResponse" }, "msg": { "example": "OK", @@ -236615,14 +242331,14 @@ }, "type": "object" }, - "tiktokmobile.musicChartResponseDoc": { + "sofascore.teamGoalDistributionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.MusicChartResponse" + "$ref": "#/definitions/sofascore.TeamGoalDistributionsResponse" }, "msg": { "example": "OK", @@ -236631,33 +242347,14 @@ }, "type": "object" }, - "tiktokmobile.musicChoicesResponseDoc": { - "properties": { - "extra": {}, - "log_pb": {}, - "music_list": { - "items": {}, - "type": "array" - }, - "status_code": { - "example": 0, - "type": "integer" - }, - "status_msg": { - "example": "", - "type": "string" - } - }, - "type": "object" - }, - "tiktokmobile.musicCollectionFeedResponseDoc": { + "sofascore.teamNearEventsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.MusicCollectionFeedResponse" + "$ref": "#/definitions/sofascore.TeamNearEventsResponse" }, "msg": { "example": "OK", @@ -236666,45 +242363,30 @@ }, "type": "object" }, - "tiktokmobile.musicCollectionListResponseDoc": { + "sofascore.teamOfTheWeekPeriodsResponseDoc": { "properties": { - "cursor": { - "example": 5, + "code": { + "example": 200, "type": "integer" }, - "extra": {}, - "has_more": { - "example": true, - "type": "boolean" - }, - "log_pb": {}, - "mc_list": { - "items": {}, - "type": "array" + "data": { + "$ref": "#/definitions/sofascore.TeamOfTheWeekPeriodsResponse" }, "msg": { - "example": "", - "type": "string" - }, - "status_code": { - "example": 0, - "type": "integer" - }, - "status_msg": { - "example": "", + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.musicDetailResponseDoc": { + "sofascore.teamOfTheWeekResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.MusicDetailResponse" + "$ref": "#/definitions/sofascore.TeamOfTheWeekResponse" }, "msg": { "example": "OK", @@ -236713,14 +242395,14 @@ }, "type": "object" }, - "tiktokmobile.musicFreshAwemeResponseDoc": { + "sofascore.teamPerformanceResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.MusicFreshAwemeResponse" + "$ref": "#/definitions/sofascore.TeamPerformanceResponse" }, "msg": { "example": "OK", @@ -236729,14 +242411,14 @@ }, "type": "object" }, - "tiktokmobile.musicPickResponseDoc": { + "sofascore.teamPlayerStatisticsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.MusicPickResponse" + "$ref": "#/definitions/sofascore.TeamPlayerStatisticsResponse" }, "msg": { "example": "OK", @@ -236745,14 +242427,14 @@ }, "type": "object" }, - "tiktokmobile.musicRelatedResponseDoc": { + "sofascore.teamPlayerStatisticsSeasonsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.MusicRelatedResponse" + "$ref": "#/definitions/sofascore.TeamPlayerStatisticsSeasonsResponse" }, "msg": { "example": "OK", @@ -236761,252 +242443,78 @@ }, "type": "object" }, - "tiktokmobile.mvFeedResponseDoc": { + "sofascore.teamPlayersResponseDoc": { "properties": { - "aweme_list": { - "items": {}, - "type": "array" - }, - "cursor": { - "example": 18, - "type": "integer" - }, - "extra": {}, - "fetched_at": { - "type": "string" - }, - "has_more": { - "example": true, - "type": "boolean" - }, - "host": { - "example": "aggr16-normal.tiktokv.us", - "type": "string" - }, - "item_count": { - "example": 15, + "code": { + "example": 200, "type": "integer" }, - "log_pb": {}, - "mv_id": { - "example": "1", - "type": "string" + "data": { + "$ref": "#/definitions/sofascore.TeamPlayersResponse" }, - "original_aweme_id": { - "example": "", + "msg": { + "example": "OK", "type": "string" - }, - "page_extra": {}, - "top_awemes": { - "items": {}, - "type": "array" } }, "type": "object" }, - "tiktokmobile.offlineFeedResponseDoc": { + "sofascore.teamRankingsResponseDoc": { "properties": { - "count": { - "example": 10, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "host": { - "example": "aggr16-normal.tiktokv.us", - "type": "string" - }, - "items": { - "additionalProperties": {}, - "type": "object" + "data": { + "$ref": "#/definitions/sofascore.TeamRankingsResponse" }, - "note": { + "msg": { + "example": "OK", "type": "string" - }, - "pull_type": { - "example": 11, - "type": "integer" - }, - "strings": { - "items": { - "type": "string" - }, - "type": "array" } }, "type": "object" }, - "tiktokmobile.placeDetailResponseDoc": { + "sofascore.teamResponseDoc": { "properties": { - "fetched_at": { - "type": "string" - }, - "frame_count": { - "example": 4, + "code": { + "example": 200, "type": "integer" }, - "frames": { - "items": {}, - "type": "array" - }, - "has_more_posts": { - "example": true, - "type": "boolean" - }, - "has_more_reviews": { - "example": false, - "type": "boolean" - }, - "host": { - "example": "aggr32-normal.tiktokv.us", - "type": "string" - }, - "layout": { - "additionalProperties": {}, - "type": "object" - }, - "nodes": { - "additionalProperties": {}, - "type": "object" - }, - "page_id": { - "example": "100614404", - "type": "string" + "data": { + "$ref": "#/definitions/sofascore.TeamResponse" }, - "poi_id": { - "example": "42203861086875992", + "msg": { + "example": "OK", "type": "string" - }, - "post_count": { - "example": 9, - "type": "integer" - }, - "post_cursor": { - "example": 9, - "type": "integer" - }, - "review_count": { - "example": 3, - "type": "integer" - }, - "top_video_count": { - "example": 6, - "type": "integer" } }, "type": "object" }, - "tiktokmobile.placeInfoResponseDoc": { + "sofascore.teamSeasonStatisticsResponseDoc": { "properties": { - "address": { - "example": "304 Ord St, Los Angeles, CA 90012, USA", - "type": "string" - }, - "average_price": { - "example": "$", - "type": "string" - }, - "category": { - "example": "Coffee Shop", - "type": "string" - }, - "city_code": { - "example": "116023605", - "type": "string" - }, - "claim_store_status": { - "example": false, - "type": "boolean" - }, - "cover": {}, - "favorite_count": { - "example": 1, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "host": { - "example": "aggr16-normal.tiktokv.us", - "type": "string" - }, - "is_collected": { - "example": false, - "type": "boolean" - }, - "latitude": { - "example": "34.060090", - "type": "string" - }, - "longitude": { - "example": "-118.239007", - "type": "string" - }, - "name": { - "example": "Nam Coffee", - "type": "string" - }, - "no_rating": { - "example": false, - "type": "boolean" - }, - "opening_hours": { - "example": "8:00 AM – 5:00 PM", - "type": "string" - }, - "opening_status": { - "example": true, - "type": "boolean" - }, - "parent_poi": {}, - "place": { - "additionalProperties": {}, - "type": "object" - }, - "poi_id": { - "example": "42203861086875992", - "type": "string" - }, - "region_code": { - "example": "6252001", - "type": "string" - }, - "review_count": { - "example": 2, + "code": { + "example": 200, "type": "integer" }, - "review_score": { - "example": 4.7, - "type": "number" - }, - "review_score_display": { - "example": "4.7", - "type": "string" - }, - "share_desc": { - "example": "Nam Coffee", - "type": "string" + "data": { + "$ref": "#/definitions/sofascore.TeamSeasonStatisticsResponse" }, - "share_url": { - "example": "https://www.tiktok.com/place/Nam-Coffee-42203861086875992", + "msg": { + "example": "OK", "type": "string" - }, - "video_count": { - "example": 11, - "type": "integer" } }, "type": "object" }, - "tiktokmobile.placeMediaResponseDoc": { + "sofascore.teamStatisticsSeasonsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.PlaceMediaResponse" + "$ref": "#/definitions/sofascore.TeamStatisticsSeasonsResponse" }, "msg": { "example": "OK", @@ -237015,43 +242523,30 @@ }, "type": "object" }, - "tiktokmobile.placePhotosResponseDoc": { + "sofascore.teamTopPlayersResponseDoc": { "properties": { - "categories": { - "items": {}, - "type": "array" - }, - "category_tab_info": {}, - "fetched_at": { - "type": "string" - }, - "host": { - "example": "aggr16-normal.tiktokv.us", - "type": "string" - }, - "photo_count": { - "example": 3, + "code": { + "example": 200, "type": "integer" }, - "poi_id": { - "example": "42203861086875992", - "type": "string" + "data": { + "$ref": "#/definitions/sofascore.TeamTopPlayersResponse" }, - "title": { - "example": "Gallery (3)", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.placeReviewsResponseDoc": { + "sofascore.teamTournamentsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.PlaceReviewsResponse" + "$ref": "#/definitions/sofascore.TeamTournamentsResponse" }, "msg": { "example": "OK", @@ -237060,47 +242555,14 @@ }, "type": "object" }, - "tiktokmobile.placeVideosResponseDoc": { - "properties": { - "aweme_list": { - "items": {}, - "type": "array" - }, - "cursor": { - "example": 20, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "has_more": { - "example": true, - "type": "boolean" - }, - "host": { - "example": "aggr16-normal.tiktokv.us", - "type": "string" - }, - "item_count": { - "example": 17, - "type": "integer" - }, - "poi_id": { - "example": "21568226355448582", - "type": "string" - }, - "poi_info": {} - }, - "type": "object" - }, - "tiktokmobile.playlistDetailResponseDoc": { + "sofascore.teamTransfersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.PlaylistDetailResponse" + "$ref": "#/definitions/sofascore.TeamTransfersResponse" }, "msg": { "example": "OK", @@ -237109,14 +242571,14 @@ }, "type": "object" }, - "tiktokmobile.playlistListResponseDoc": { + "sofascore.tennisGrandSlamResultsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.PlaylistListResponse" + "$ref": "#/definitions/sofascore.TennisGrandSlamResultsResponse" }, "msg": { "example": "OK", @@ -237125,14 +242587,14 @@ }, "type": "object" }, - "tiktokmobile.playlistVideosResponseDoc": { + "sofascore.tournamentCupTreeResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.PlaylistVideosResponse" + "$ref": "#/definitions/sofascore.TournamentCupTreeResponse" }, "msg": { "example": "OK", @@ -237141,49 +242603,30 @@ }, "type": "object" }, - "tiktokmobile.searchEffectsResponseDoc": { + "sofascore.tournamentInfoResponseDoc": { "properties": { - "bind_effects": {}, - "collection": {}, - "cursor": { - "example": 100, + "code": { + "example": 200, "type": "integer" }, - "effects": { - "items": {}, - "type": "array" - }, - "has_more": { - "example": true, - "type": "boolean" - }, - "search_id": { - "example": "20261021173221C8185FF1D4A1062AD97C", - "type": "string" - }, - "status_code": { - "example": 0, - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.TournamentInfoResponse" }, - "status_msg": { - "example": "", + "msg": { + "example": "OK", "type": "string" - }, - "use_hot": { - "example": false, - "type": "boolean" } }, "type": "object" }, - "tiktokmobile.searchGeneralResponseDoc": { + "sofascore.tournamentPlayerOfTheSeasonResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.SearchGeneralResponse" + "$ref": "#/definitions/sofascore.TournamentPlayerOfTheSeasonResponse" }, "msg": { "example": "OK", @@ -237192,14 +242635,14 @@ }, "type": "object" }, - "tiktokmobile.searchMusicResponseDoc": { + "sofascore.tournamentPlayerStatisticsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.SearchMusicResponse" + "$ref": "#/definitions/sofascore.TournamentPlayerStatisticsResponse" }, "msg": { "example": "OK", @@ -237208,53 +242651,30 @@ }, "type": "object" }, - "tiktokmobile.searchPhotosResponseDoc": { + "sofascore.tournamentRoundsResponseDoc": { "properties": { - "aweme_list": { - "items": {}, - "type": "array" - }, - "backtrace": {}, - "cursor": { - "example": 10, - "type": "integer" - }, - "extra": {}, - "feedback_type": { - "example": "photo_tab", - "type": "string" - }, - "has_more": { - "example": 1, - "type": "integer" - }, - "log_pb": {}, - "response_cropped": { - "example": 1, + "code": { + "example": 200, "type": "integer" }, - "search_item_list": { - "items": {}, - "type": "array" - }, - "status_code": { - "example": 0, - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.TournamentRoundsResponse" }, - "status_msg": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.searchPlaceResponseDoc": { + "sofascore.tournamentSeasonsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.SearchPlaceResponse" + "$ref": "#/definitions/sofascore.TournamentSeasonsResponse" }, "msg": { "example": "OK", @@ -237263,81 +242683,30 @@ }, "type": "object" }, - "tiktokmobile.searchPreInfoResponseDoc": { - "properties": { - "fetched_at": { - "type": "string" - }, - "host": { - "type": "string" - }, - "pre_info_id": { - "type": "string" - }, - "ttl": { - "example": 40, - "type": "integer" - } - }, - "type": "object" - }, - "tiktokmobile.searchStreamResponseDoc": { + "sofascore.tournamentStatisticsInfoResponseDoc": { "properties": { - "count": { - "example": 10, - "type": "integer" - }, - "cursor": { - "example": 10, - "type": "integer" - }, - "documents": { - "items": {}, - "type": "array" - }, - "fetched_at": { - "example": "2026-10-20T03:25:54Z", - "type": "string" - }, - "frame_count": { - "example": 5, + "code": { + "example": 200, "type": "integer" }, - "frames": { - "items": {}, - "type": "array" - }, - "has_more": { - "example": true, - "type": "boolean" - }, - "host": { - "example": "aggr32-normal.tiktokv.us", - "type": "string" - }, - "keyword": { - "example": "lofi", - "type": "string" - }, - "offset": { - "example": 0, - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.TournamentStatisticsInfoResponse" }, - "search_id": { - "example": "20261020032554E5C2D5286808E712236B", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.searchSuggestionResponseDoc": { + "sofascore.tournamentTeamOfTheSeasonResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.SearchSuggestionResponse" + "$ref": "#/definitions/sofascore.TournamentTeamOfTheSeasonResponse" }, "msg": { "example": "OK", @@ -237346,40 +242715,14 @@ }, "type": "object" }, - "tiktokmobile.searchTabsResponseDoc": { - "properties": { - "fetched_at": { - "type": "string" - }, - "host": { - "example": "aggr32-normal.tiktokv.us", - "type": "string" - }, - "is_failed": { - "example": 0, - "type": "integer" - }, - "keyword": { - "example": "lofi", - "type": "string" - }, - "tabs": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "tiktokmobile.searchUsersResponseDoc": { + "sofascore.tournamentTeamsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.SearchUsersResponse" + "$ref": "#/definitions/sofascore.TournamentTeamsResponse" }, "msg": { "example": "OK", @@ -237388,14 +242731,14 @@ }, "type": "object" }, - "tiktokmobile.searchVideosResponseDoc": { + "sofascore.tournamentTopPlayersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.SearchVideosResponse" + "$ref": "#/definitions/sofascore.TournamentTopPlayersResponse" }, "msg": { "example": "OK", @@ -237404,14 +242747,14 @@ }, "type": "object" }, - "tiktokmobile.stickerDiscoverResponseDoc": { + "sofascore.tournamentTopTeamsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.StickerDiscoverResponse" + "$ref": "#/definitions/sofascore.TournamentTopTeamsResponse" }, "msg": { "example": "OK", @@ -237420,55 +242763,30 @@ }, "type": "object" }, - "tiktokmobile.translationDescriptionResponseDoc": { + "sofascore.tournamentVenuesResponseDoc": { "properties": { - "extra": {}, - "fetched_at": { - "type": "string" - }, - "format": { - "example": 1, - "type": "integer" - }, - "host": { - "example": "aggr32-normal.tiktokv.us", - "type": "string" - }, - "item_id": { - "example": "7650052642089225493", - "type": "string" - }, - "log_pb": {}, - "perf_metrics": {}, - "status_code": { - "example": 0, + "code": { + "example": 200, "type": "integer" }, - "status_msg": { - "type": "string" - }, - "target_lang": { - "example": "en", - "type": "string" - }, - "text": { - "type": "string" + "data": { + "$ref": "#/definitions/sofascore.TournamentVenuesResponse" }, - "translated_client_text": {}, - "variant": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tiktokmobile.userFollowersResponseDoc": { + "sofascore.tournamentWinnersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.UserFollowersResponse" + "$ref": "#/definitions/sofascore.TournamentWinnersResponse" }, "msg": { "example": "OK", @@ -237477,62 +242795,30 @@ }, "type": "object" }, - "tiktokmobile.userFollowingResponseDoc": { + "sofascore.tournamentsWithFeatureResponseDoc": { "properties": { - "extra": {}, - "followings": { - "items": {}, - "type": "array" - }, - "has_more": { - "example": true, - "type": "boolean" - }, - "log_pb": {}, - "max_time": { - "example": 1792283000, - "type": "integer" - }, - "min_time": { - "example": 1721340854, - "type": "integer" - }, - "myself_user_id": {}, - "next_page_token": { - "example": "eyJtYXhfY3Vyc29yIjoxNzkyMjA2MTA2fQ==", - "type": "string" - }, - "offset": { - "example": 0, + "code": { + "example": 200, "type": "integer" }, - "rec_has_more": { - "example": true, - "type": "boolean" - }, - "status_code": { - "example": 0, - "type": "integer" + "data": { + "$ref": "#/definitions/sofascore.TournamentsWithFeatureResponse" }, - "status_msg": { - "example": "", + "msg": { + "example": "OK", "type": "string" - }, - "total": { - "example": 11, - "type": "integer" } }, "type": "object" }, - "tiktokmobile.userOriginalEffectsResponseDoc": { + "sofascore.trendingEventsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.UserOriginalEffectsResponse" + "$ref": "#/definitions/sofascore.TrendingEventsResponse" }, "msg": { "example": "OK", @@ -237541,14 +242827,14 @@ }, "type": "object" }, - "tiktokmobile.userOriginalMusicResponseDoc": { + "sofascore.trendingPlayersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.UserOriginalMusicResponse" + "$ref": "#/definitions/sofascore.TrendingPlayersResponse" }, "msg": { "example": "OK", @@ -237557,14 +242843,14 @@ }, "type": "object" }, - "tiktokmobile.userPostsResponseDoc": { + "sofascore.venueEventsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.UserPostsResponse" + "$ref": "#/definitions/sofascore.VenueEventsResponse" }, "msg": { "example": "OK", @@ -237573,14 +242859,14 @@ }, "type": "object" }, - "tiktokmobile.userProfileResponseDoc": { + "sofascore.venueResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tiktokmobile.UserProfileResponse" + "$ref": "#/definitions/sofascore.VenueResponse" }, "msg": { "example": "OK", @@ -237589,140 +242875,139 @@ }, "type": "object" }, - "tiktokmobile.userRecommendationsResponseDoc": { + "sonic.AvailabilityChannel": { "properties": { - "extra": {}, - "log_pb": {}, - "status_code": { - "example": 0, - "type": "integer" + "days": { + "items": { + "$ref": "#/definitions/sonic.AvailabilityDay" + }, + "type": "array" }, - "status_msg": { + "service_type": { + "description": "ServiceType is Sonic's own channel name, e.g. \"ORDER_AHEAD\",\n\"CURBSIDE_PICKUP\", \"DRIVE_THROUGH\", \"DELIVERY\".", + "example": "ORDER_AHEAD", "type": "string" - }, - "user_list": { - "items": {}, - "type": "array" } }, "type": "object" }, - "tiktokmobile.videoDetailResponseDoc": { + "sonic.AvailabilityDay": { "properties": { - "code": { - "example": 200, + "count": { + "example": 96, "type": "integer" }, - "data": { - "$ref": "#/definitions/tiktokmobile.VideoDetailResponse" - }, - "msg": { - "example": "OK", + "date": { + "example": "2026-09-05", "type": "string" + }, + "slots": { + "items": { + "$ref": "#/definitions/sonic.AvailabilitySlot" + }, + "type": "array" } }, "type": "object" }, - "tiktokmobile.videoSubtitlesResponseDoc": { + "sonic.AvailabilityResponse": { "properties": { - "content_source": { - "example": "redis", - "type": "string" - }, - "cue_count": { - "example": 9, - "type": "integer" - }, - "cues": { + "channels": { "items": { - "$ref": "#/definitions/tiktokmobile.SubtitleCue" + "$ref": "#/definitions/sonic.AvailabilityChannel" }, "type": "array" }, "fetched_at": { "type": "string" }, - "host": { - "example": "aggr16-normal.tiktokv.us", + "fulfillment": { + "example": "PICKUP", "type": "string" }, - "language": { - "example": "en", - "type": "string" + "lead_time_minutes": { + "description": "LeadTimeMinutes is the store's prep/handoff buffer before the first\nbookable slot -- the upstream reports it as pickupBuffer on a PICKUP\nquery and deliveryBuffer on a DELIVERY one; both are surfaced here\nunder one name.", + "example": 5, + "type": "integer" }, - "variant": { - "example": "glide_v3_1", + "service_types": { + "description": "ServiceTypes is every channel the store supports, which is a\nsuperset of the channels that have slots in this response.", + "items": { + "type": "string" + }, + "type": "array" + }, + "slot_duration_minutes": { + "description": "SlotDurationMinutes is how long each window lasts.", + "example": 5, + "type": "integer" + }, + "source_url": { "type": "string" }, - "video_id": { - "example": "7696141388324293918", + "store_id": { + "example": "4521", "type": "string" }, - "webvtt": { - "example": "WEBVTT\n\n00:00:00.080 --> 00:00:00.880\nHey.", + "timezone": { + "example": "America/Denver", "type": "string" + }, + "total_slots": { + "example": 288, + "type": "integer" } }, "type": "object" }, - "time.AuthorArticle": { + "sonic.AvailabilitySlot": { "properties": { - "excerpt": { - "type": "string" - }, - "published_at": { - "type": "string" - }, - "section": { - "type": "string" - }, - "section_url": { - "type": "string" - }, - "title": { + "end_time": { + "example": "2026-09-05T16:50:00Z", "type": "string" }, - "url": { + "start_time": { + "example": "2026-09-05T16:45:00Z", "type": "string" } }, "type": "object" }, - "time.AuthorResponse": { + "sonic.CategoriesResponse": { "properties": { - "articles": { + "categories": { "items": { - "$ref": "#/definitions/time.AuthorArticle" + "$ref": "#/definitions/sonic.Category" }, "type": "array" }, - "bio": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "job_title": { - "type": "string" + "count": { + "example": 20, + "type": "integer" }, - "name": { + "fetched_at": { "type": "string" }, - "social_accounts": { - "items": { - "type": "string" - }, - "type": "array" - }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "timesofindia.AuthorArticle": { + "sonic.Category": { "properties": { - "title": { + "name": { + "description": "Name is Sonic's own category name where known (see\ncategoryDisplayNames), otherwise a best-effort title-cased form of\nSlug -- see titleCaseSlug's doc comment.", + "example": "Tea & Coffee", + "type": "string" + }, + "page_count": { + "description": "PageCount is the number of subcategory and item pages Sonic's own\nmenu sitemap lists under this category -- a proxy for menu size, not\na deduplicated product count (a size-variant group like \"Coffee\"\ncounts as one page here even though it expands to several orderable\nsizes).", + "example": 24, + "type": "integer" + }, + "slug": { + "example": "tea-coffee", "type": "string" }, "url": { @@ -237731,79 +243016,81 @@ }, "type": "object" }, - "timesofindia.AuthorResponse": { + "sonic.Deal": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/timesofindia.AuthorArticle" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "cta_text": { + "description": "CTAText is the call-to-action button label, e.g. \"Order Now\".", + "example": "Order Now", + "type": "string" }, - "email": { + "cta_url": { + "description": "CTAURL is the destination the call-to-action links to, absolute for\non-site links.", + "example": "https://www.sonicdrivein.com/menu/categories/1-99-menu", "type": "string" }, - "image_url": { + "description": { + "description": "Description is the card's body copy.", + "example": "The Jr Bacon Cheeseburger brings crispy bacon, melty cheese, and juicy beef together for just $1.99.", "type": "string" }, - "job_title": { + "headline": { + "description": "Headline is the marketing headline shown on the card.", + "example": "BACON MAKES EVERYTHING BETTER", "type": "string" }, - "location": { + "image_url": { + "description": "ImageURL is the promotion's full-resolution creative.", "type": "string" }, "name": { + "description": "Name is the promotion's public name.", + "example": "$1.99 Jr Bacon Cheeseburger", "type": "string" }, - "organization": { + "section": { + "description": "Section is the on-page grouping this deal appeared under, e.g.\n\"Featured Deals\".", + "example": "Featured Deals", "type": "string" }, - "url": { + "terms": { + "description": "Terms is the promotion's legal/limitations text when published.", "type": "string" } }, "type": "object" }, - "timesofisrael.AuthorResponse": { + "sonic.DealsResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" + "count": { + "example": 3, + "type": "integer" }, - "biography": { + "deals": { "items": { - "type": "string" + "$ref": "#/definitions/sonic.Deal" }, "type": "array" }, - "image_url": { + "fetched_at": { "type": "string" }, - "name": { + "heading": { + "example": "Featured Sonic Deals", "type": "string" }, - "social_links": { - "items": { - "$ref": "#/definitions/timesofisrael.AuthorSocialLink" - }, - "type": "array" - }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "timesofisrael.AuthorSocialLink": { + "sonic.DeliveryProvider": { "properties": { - "type": { + "is_active": { + "type": "boolean" + }, + "name": { + "example": "DoorDash", "type": "string" }, "url": { @@ -237812,1069 +243099,1347 @@ }, "type": "object" }, - "tmdb.CastCredit": { + "sonic.DirectoryCity": { "properties": { - "character": { - "description": "Character the actor plays.", - "type": "string" + "count": { + "example": 1, + "type": "integer" }, "name": { - "description": "Name of the actor.", + "example": "Albertville", "type": "string" }, "slug": { - "description": "TMDB person id of the actor.", + "description": "Slug is the city segment as it appears in a store path, which is\nthe lowercased form GET /sonic/locations returns.", + "example": "albertville", "type": "string" } }, "type": "object" }, - "tmdb.CollectionResponse": { + "sonic.DirectoryCountry": { "properties": { - "id": { + "count": { + "example": 3364, + "type": "integer" + }, + "country_code": { + "example": "US", "type": "string" }, - "movies": { + "country_name": { + "example": "United States", + "type": "string" + }, + "states": { "items": { - "$ref": "#/definitions/tmdb.MediaRef" + "$ref": "#/definitions/sonic.DirectoryState" + }, + "type": "array" + } + }, + "type": "object" + }, + "sonic.DirectoryResponse": { + "properties": { + "countries": { + "items": { + "$ref": "#/definitions/sonic.DirectoryCountry" }, "type": "array" }, - "overview": { + "fetched_at": { "type": "string" }, "source_url": { "type": "string" }, - "title": { - "type": "string" - }, - "uri": { - "type": "string" + "total_count": { + "example": 3364, + "type": "integer" } }, "type": "object" }, - "tmdb.CrewCredit": { + "sonic.DirectoryState": { "properties": { - "jobs": { - "description": "Jobs the person holds on the title, for example `Creator` or `Director`.", + "cities": { "items": { - "type": "string" + "$ref": "#/definitions/sonic.DirectoryCity" }, "type": "array" }, - "name": { - "description": "Name of the crew member.", + "code": { + "example": "AL", "type": "string" }, - "slug": { - "description": "TMDB person id of the crew member.", + "count": { + "example": 95, + "type": "integer" + }, + "name": { + "example": "Alabama", "type": "string" } }, "type": "object" }, - "tmdb.FilmographyCredit": { + "sonic.ItemResponse": { "properties": { - "id": { + "description": { + "example": "Local Favorite! Fluffy egg, melty cheese, and bacon between a toasted bagel.", "type": "string" }, - "title": { + "fetched_at": { "type": "string" }, - "type": { - "example": "movie", + "image_url": { "type": "string" }, - "uri": { + "name": { + "example": "Bacon, Egg and Cheese Bagel", "type": "string" - } - }, - "type": "object" - }, - "tmdb.Genre": { - "properties": { - "id": { - "example": "18", + }, + "nutrition_guide_url": { + "description": "NutritionGuideURL is Sonic's site-wide nutrition/allergen PDF, not a\nper-item document -- every item detail page links the same guide.", "type": "string" }, - "name": { - "example": "Drama", + "path": { "type": "string" - } - }, - "type": "object" - }, - "tmdb.GenresResponse": { - "properties": { - "movie": { - "items": { - "$ref": "#/definitions/tmdb.Genre" - }, - "type": "array" }, "source_url": { "type": "string" - }, - "tv": { - "items": { - "$ref": "#/definitions/tmdb.Genre" - }, - "type": "array" } }, "type": "object" }, - "tmdb.MediaRef": { + "sonic.LocationEntry": { "properties": { - "id": { - "description": "TMDB id of the movie or TV show. Use it with the movie or TV detail endpoint.", + "address_slug": { + "example": "2540-dell-range-blvd", "type": "string" }, - "overview": { - "description": "Short plot summary. Not filled in for list and chart results.", + "city_slug": { + "example": "cheyenne", "type": "string" }, - "poster_url": { - "description": "URL of the poster image. Not filled in for list and chart results.", + "country_code": { + "example": "US", "type": "string" }, - "release_date": { - "description": "Release or first air date. Not filled in for list and chart results.", + "path": { + "description": "Path is the ready-made value GET /sonic/store takes.", + "example": "locations/us/wy/cheyenne/2540-dell-range-blvd/store-4521", "type": "string" }, - "title": { - "description": "Title of the movie or TV show.", + "state_code": { + "example": "WY", "type": "string" }, - "uri": { - "description": "Link to the title's page on TMDB.", + "store_id": { + "example": "4521", "type": "string" } }, "type": "object" }, - "tmdb.MovieListResponse": { + "sonic.LocationSuggestResponse": { "properties": { - "category": { - "type": "string" + "count": { + "example": 5, + "type": "integer" }, - "has_next_page": { - "type": "boolean" + "country": { + "example": "US", + "type": "string" }, - "movies": { - "items": { - "$ref": "#/definitions/tmdb.MediaRef" - }, - "type": "array" + "fetched_at": { + "type": "string" }, - "page": { + "limit": { + "example": 5, "type": "integer" }, + "query": { + "example": "cheyenne wy", + "type": "string" + }, "source_url": { "type": "string" + }, + "suggestions": { + "items": { + "$ref": "#/definitions/sonic.LocationSuggestion" + }, + "type": "array" } }, "type": "object" }, - "tmdb.MovieResponse": { + "sonic.LocationSuggestion": { "properties": { - "budget": { - "type": "number" - }, - "cast": { - "items": { - "$ref": "#/definitions/tmdb.CastCredit" - }, - "type": "array" - }, - "countries": { - "items": { - "type": "string" - }, - "type": "array" + "city": { + "example": "Cheyenne", + "type": "string" }, - "genres": { - "items": { - "type": "string" - }, - "type": "array" + "confidence": { + "description": "Confidence is the geocoder's own match confidence: \"exact\",\n\"interpolated\", or \"fallback\".", + "example": "exact", + "type": "string" }, - "homepage": { + "country": { + "example": "United States", "type": "string" }, - "id": { - "example": "27205", + "country_code": { + "example": "US", "type": "string" }, - "original_language": { - "example": "English", + "county": { + "example": "Laramie", "type": "string" }, - "overview": { + "formatted_address": { + "example": "2540 Dell Range Blvd, Cheyenne, WY 82009 US", "type": "string" }, - "poster_url": { + "label": { + "example": "2540 Dell Range Blvd", "type": "string" }, - "rating": { - "$ref": "#/definitions/tmdb.Rating" + "latitude": { + "example": 41.160549, + "type": "number" }, - "release_date": { - "example": "2010-07-15", + "layer": { + "description": "Layer is the match's granularity: \"address\", \"locality\", \"state\",\n\"postalCode\", or \"place\".", + "example": "address", "type": "string" }, - "revenue": { + "longitude": { + "example": -104.777671, "type": "number" }, - "runtime_minutes": { - "example": 148, - "type": "integer" - }, - "source_url": { + "number": { + "example": "2540", "type": "string" }, - "status": { - "example": "Released", + "postal_code": { + "example": "82009", "type": "string" }, - "tagline": { + "state": { + "example": "Wyoming", "type": "string" }, - "title": { - "example": "Inception", + "state_code": { + "example": "WY", "type": "string" }, - "top_crew": { - "items": { - "$ref": "#/definitions/tmdb.CrewCredit" - }, - "type": "array" - }, - "uri": { + "street": { + "example": "Dell Range Blvd", "type": "string" - }, - "year": { - "example": 2010, - "type": "integer" } }, "type": "object" }, - "tmdb.PersonListResponse": { + "sonic.LocationsResponse": { "properties": { - "has_next_page": { - "type": "boolean" + "city": { + "example": "cheyenne", + "type": "string" }, - "page": { + "count": { + "example": 100, "type": "integer" }, - "people": { + "fetched_at": { + "type": "string" + }, + "locations": { "items": { - "$ref": "#/definitions/tmdb.PersonRef" + "$ref": "#/definitions/sonic.LocationEntry" }, "type": "array" }, + "page": { + "example": 1, + "type": "integer" + }, + "page_size": { + "example": 100, + "type": "integer" + }, "source_url": { "type": "string" + }, + "state": { + "example": "WY", + "type": "string" + }, + "total": { + "example": 5125, + "type": "integer" + }, + "total_pages": { + "example": 52, + "type": "integer" } }, "type": "object" }, - "tmdb.PersonRef": { + "sonic.MenuItem": { "properties": { - "id": { - "type": "string" - }, - "known_for": { - "type": "string" + "calories": { + "description": "Calories is Sonic's own published calorie count. A genuine 0 (seen on\na few drink entries in this source) means Sonic did not publish a\ncount for that entry, not that the item has zero calories.", + "example": 530, + "type": "integer" }, "name": { - "type": "string" - }, - "profile_url": { - "type": "string" - }, - "uri": { + "example": "Bacon, Egg and Cheese Bagel", "type": "string" } }, "type": "object" }, - "tmdb.PersonResponse": { + "sonic.MenuResponse": { "properties": { - "biography": { + "category": { + "example": "breakfast", "type": "string" }, - "birth_date": { - "example": "1956-07-09", + "count": { + "example": 24, + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "filmography": { + "items": { "items": { - "$ref": "#/definitions/tmdb.FilmographyCredit" + "$ref": "#/definitions/sonic.MenuItem" }, "type": "array" }, - "id": { - "example": "31", - "type": "string" - }, - "name": { - "example": "Tom Hanks", - "type": "string" - }, - "photo_url": { - "type": "string" - }, "source_url": { "type": "string" - }, - "uri": { - "type": "string" } }, "type": "object" }, - "tmdb.Rating": { + "sonic.NearbyResponse": { "properties": { - "average": { - "description": "Average TMDB user rating, on a 0 to 10 scale.", - "example": 8.372, + "fetched_at": { + "type": "string" + }, + "is_last_page": { + "type": "boolean" + }, + "latitude": { + "example": 35.4676, "type": "number" }, - "count": { - "description": "Number of user ratings behind the average.", - "example": 39524, + "limit": { + "example": 10, "type": "integer" }, - "review_count": { - "description": "Number of written user reviews. Omitted when TMDB shows none.", - "example": 8, + "longitude": { + "example": -97.5164, + "type": "number" + }, + "page": { + "example": 0, + "type": "integer" + }, + "radius_miles": { + "example": 25, + "type": "integer" + }, + "returned_count": { + "example": 10, + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "stores": { + "items": { + "$ref": "#/definitions/sonic.NearbyStore" + }, + "type": "array" + }, + "total_pages": { + "example": 2, + "type": "integer" + }, + "total_stores": { + "example": 17, "type": "integer" } }, "type": "object" }, - "tmdb.SearchResponse": { + "sonic.NearbyStore": { "properties": { - "has_next_page": { - "description": "True when more pages of results are available.", + "address": { + "$ref": "#/definitions/sonic.StoreAddress" + }, + "amenities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "delivery_providers": { + "items": { + "$ref": "#/definitions/sonic.DeliveryProvider" + }, + "type": "array" + }, + "display_name": { + "example": "2540 Dell Range Blvd, Cheyenne, WY", + "type": "string" + }, + "distance_miles": { + "example": 3.45, + "type": "number" + }, + "has_drive_through": { "type": "boolean" }, - "page": { - "description": "Page number returned.", - "type": "integer" + "hours": { + "items": { + "$ref": "#/definitions/sonic.StoreHours" + }, + "type": "array" }, - "query": { - "description": "Search text that was run.", + "is_delivery_enabled": { + "type": "boolean" + }, + "is_digitally_enabled": { + "type": "boolean" + }, + "latitude": { + "example": 41.160531, + "type": "number" + }, + "longitude": { + "example": -104.777659, + "type": "number" + }, + "phone": { + "example": "307-632-9188", "type": "string" }, - "results": { - "description": "Search hits on this page, one item per movie, TV show, person or collection.", + "service_hours": { "items": { - "$ref": "#/definitions/tmdb.SearchResult" + "$ref": "#/definitions/sonic.StoreServiceHours" }, "type": "array" }, - "source_url": { - "description": "URL the data was read from.", + "status": { + "example": "OPEN", "type": "string" }, - "type": { - "description": "Result type the search was limited to: `movie`, `tv`, `person` or `collection`. Omitted for a mixed search.", + "store_id": { + "example": "4521", + "type": "string" + }, + "timezone": { + "example": "America/Denver", "type": "string" } }, "type": "object" }, - "tmdb.SearchResult": { + "sonic.NutritionDocument": { "properties": { - "id": { - "description": "TMDB id of the hit. Use it with the matching detail endpoint.", + "category": { + "description": "Category is the heading the document is grouped under. It usually\nmatches Name, since most groups hold a single document.", + "example": "Nutrition Guide", "type": "string" }, - "overview": { - "description": "Short plot summary or description. Present for movie, TV and collection hits.", + "content_type": { + "description": "ContentType is the document's MIME type, in practice\n\"application/pdf\".", + "example": "application/pdf", "type": "string" }, - "release_date": { - "description": "Release or first air date as TMDB shows it. Present for movie and TV hits.", + "file_name": { + "example": "61667-1_FEE_0926_Nutrition.pdf", + "type": "string" + }, + "name": { + "description": "Name is the label Sonic gives the document on the page, e.g.\n\"Nutrition Guide\" or \"Allergen Info\".", + "example": "Nutrition Guide", "type": "string" }, + "size_bytes": { + "description": "SizeBytes is the file size. These are large print-ready PDFs --\nseveral megabytes each -- so callers may want it before fetching.", + "example": 14351111, + "type": "integer" + }, "title": { - "description": "Title of the movie, TV show or collection, or name of the person.", + "example": "61131-13 SUM26 NAT WOP-English FA cp WCAG", "type": "string" }, - "type": { - "description": "Kind of hit: `movie`, `tv`, `person` or `collection`.", - "example": "movie", + "updated_at": { + "description": "UpdatedAt is when Sonic last republished the file.", + "example": "2026-06-30T16:45:09.549Z", "type": "string" }, - "uri": { - "description": "Link to the hit's page on TMDB.", + "url": { + "example": "https://downloads.ctfassets.net/.../nutrition-guide.pdf", "type": "string" } }, "type": "object" }, - "tmdb.TVListResponse": { + "sonic.NutritionDocumentsResponse": { "properties": { - "category": { - "description": "TV chart that was returned: `popular`, `top_rated`, `airing_today` or `on_the_air`.", - "type": "string" - }, - "has_next_page": { - "description": "True when more pages of shows are available.", - "type": "boolean" - }, - "page": { - "description": "Page number returned.", + "count": { + "example": 5, "type": "integer" }, - "shows": { - "description": "TV shows on this page, one item per show.", + "documents": { "items": { - "$ref": "#/definitions/tmdb.MediaRef" + "$ref": "#/definitions/sonic.NutritionDocument" }, "type": "array" }, + "fetched_at": { + "type": "string" + }, + "heading": { + "example": "Sonic Nutrition & Allergen Information", + "type": "string" + }, "source_url": { - "description": "URL the data was read from.", "type": "string" } }, "type": "object" }, - "tmdb.TVResponse": { + "sonic.SitemapEntry": { "properties": { - "cast": { - "description": "Top-billed cast, up to 25 credits.", + "kind": { + "description": "Kind classifies the page -- see SitemapOption.Kind's enum per section.", + "example": "item", + "type": "string" + }, + "path": { + "description": "Path is the site-relative path (no leading/trailing slash), the\nshape /sonic/menu's category param and /sonic/item's path param take\nfor \"menu\" section entries, and /sonic/store's path param takes for\n\"locations\" section \"store\" entries.", + "example": "menu/categories/breakfast/local-breakfast-favorites/bacon-egg-and-cheese-bagel", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "sonic.SitemapResponse": { + "properties": { + "count": { + "example": 100, + "type": "integer" + }, + "entries": { "items": { - "$ref": "#/definitions/tmdb.CastCredit" + "$ref": "#/definitions/sonic.SitemapEntry" }, "type": "array" }, - "countries": { - "description": "Countries the show comes from.", + "fetched_at": { + "type": "string" + }, + "page": { + "example": 1, + "type": "integer" + }, + "section": { + "example": "menu", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "total": { + "example": 298, + "type": "integer" + }, + "total_pages": { + "example": 3, + "type": "integer" + } + }, + "type": "object" + }, + "sonic.StoreAddress": { + "properties": { + "city": { + "example": "Cheyenne", + "type": "string" + }, + "country": { + "example": "US", + "type": "string" + }, + "line1": { + "example": "2540 Dell Range Blvd", + "type": "string" + }, + "line2": { + "type": "string" + }, + "postal_code": { + "example": "82009", + "type": "string" + }, + "state": { + "example": "WY", + "type": "string" + } + }, + "type": "object" + }, + "sonic.StoreHours": { + "properties": { + "closes": { + "example": "21:45", + "type": "string" + }, + "day_of_week": { + "example": "MONDAY", + "type": "string" + }, + "is_24_hour": { + "type": "boolean" + }, + "opens": { + "example": "07:00", + "type": "string" + } + }, + "type": "object" + }, + "sonic.StoreResponse": { + "properties": { + "address": { + "$ref": "#/definitions/sonic.StoreAddress" + }, + "amenities": { "items": { "type": "string" }, "type": "array" }, - "first_air_year": { - "description": "Year the show first aired.", - "example": 2008, - "type": "integer" - }, - "genres": { - "description": "Genres of the show.", + "delivery_providers": { "items": { - "type": "string" + "$ref": "#/definitions/sonic.DeliveryProvider" }, "type": "array" }, - "homepage": { - "description": "URL of the show's official website.", + "display_name": { + "example": "2540 Dell Range Blvd, Cheyenne, WY", "type": "string" }, - "id": { - "description": "TMDB id of the TV show.", - "example": "1396", + "fetched_at": { "type": "string" }, - "last_air_year": { - "description": "Year the show last aired. Omitted for shows still airing.", - "example": 2013, - "type": "integer" + "has_drive_through": { + "type": "boolean" }, - "number_of_episodes": { - "description": "Total number of episodes.", - "example": 62, - "type": "integer" + "hours": { + "items": { + "$ref": "#/definitions/sonic.StoreHours" + }, + "type": "array" }, - "original_language": { - "description": "Original language of the show, for example `English`.", - "example": "English", - "type": "string" + "is_delivery_enabled": { + "type": "boolean" }, - "overview": { - "description": "Plot summary of the show.", + "is_digitally_enabled": { + "type": "boolean" + }, + "latitude": { + "example": 41.160531, + "type": "number" + }, + "longitude": { + "example": -104.777659, + "type": "number" + }, + "path": { "type": "string" }, - "poster_url": { - "description": "URL of the poster image.", + "phone": { + "example": "307-632-9188", "type": "string" }, - "rating": { - "allOf": [ - { - "$ref": "#/definitions/tmdb.Rating" - } - ], - "description": "Aggregate TMDB user rating for the show." + "service_hours": { + "items": { + "$ref": "#/definitions/sonic.StoreServiceHours" + }, + "type": "array" }, "source_url": { - "description": "URL the data was read from.", "type": "string" }, "status": { - "description": "Production status of the show, for example `Ended`.", - "example": "Ended", + "example": "OPEN", "type": "string" }, - "tagline": { - "description": "Tagline of the show.", + "store_id": { + "example": "4521", "type": "string" }, - "title": { - "description": "Title of the show.", - "example": "Breaking Bad", + "timezone": { + "example": "America/Denver", "type": "string" - }, - "top_crew": { - "description": "Top-billed crew, such as the creator.", + } + }, + "type": "object" + }, + "sonic.StoreServiceHours": { + "properties": { + "hours": { "items": { - "$ref": "#/definitions/tmdb.CrewCredit" + "$ref": "#/definitions/sonic.StoreHours" }, "type": "array" }, - "uri": { - "description": "Link to the show's page on TMDB.", + "is_fulfillment": { + "type": "boolean" + }, + "is_tipping_enabled": { + "type": "boolean" + }, + "type": { + "description": "Type is Sonic's own channel name, e.g. \"ORDER_AHEAD\", \"PICKUP\",\n\"CURBSIDE_PICKUP\", \"STORE\", \"DELIVERY\", \"DRIVE_THROUGH\".", + "example": "DRIVE_THROUGH", "type": "string" } }, "type": "object" }, - "tmdb.collectionResponseDoc": { + "sonic.availabilityResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/tmdb.CollectionResponse" + "$ref": "#/definitions/sonic.AvailabilityResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "tmdb.genresResponseDoc": { + "sonic.categoriesResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/tmdb.GenresResponse" + "$ref": "#/definitions/sonic.CategoriesResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "tmdb.movieListResponseDoc": { + "sonic.dealsResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/tmdb.MovieListResponse" + "$ref": "#/definitions/sonic.DealsResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "tmdb.movieResponseDoc": { + "sonic.directoryResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/tmdb.MovieResponse" + "$ref": "#/definitions/sonic.DirectoryResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "tmdb.personListResponseDoc": { + "sonic.itemResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/tmdb.PersonListResponse" + "$ref": "#/definitions/sonic.ItemResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "tmdb.personResponseDoc": { + "sonic.locationSuggestResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/tmdb.PersonResponse" + "$ref": "#/definitions/sonic.LocationSuggestResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "tmdb.searchResponseDoc": { + "sonic.locationsResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/tmdb.SearchResponse" + "$ref": "#/definitions/sonic.LocationsResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "tmdb.tvListResponseDoc": { + "sonic.menuResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/tmdb.TVListResponse" + "$ref": "#/definitions/sonic.MenuResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "tmdb.tvResponseDoc": { + "sonic.nearbyResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/tmdb.TVResponse" + "$ref": "#/definitions/sonic.NearbyResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "tmz.AuthorArticle": { + "sonic.nutritionDocumentsResponseDoc": { "properties": { - "image_url": { - "type": "string" - }, - "published_at": { - "type": "string" - }, - "summary": { - "type": "string" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/sonic.NutritionDocumentsResponse" }, - "url": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "tmz.AuthorResponse": { + "sonic.sitemapResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/tmz.AuthorArticle" - }, - "type": "array" - }, - "name": { - "type": "string" - }, - "page": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "slug": { - "type": "string" + "data": { + "$ref": "#/definitions/sonic.SitemapResponse" }, - "url": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "tokopedia.AutocompleteResponse": { + "sonic.storeResponseDoc": { "properties": { - "browser_rendered": { - "type": "boolean" - }, - "fetched_at": { - "type": "string" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "query": { - "type": "string" + "data": { + "$ref": "#/definitions/sonic.StoreResponse" }, - "suggestions": { - "items": { - "$ref": "#/definitions/tokopedia.Suggestion" - }, - "type": "array" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "tokopedia.CategoryResponse": { + "soundcloud.Playlist": { "properties": { - "category_path": { + "artwork_url": { "type": "string" }, - "fetched_at": { + "created_at": { "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/tokopedia.Product" - }, - "type": "array" + "description": { + "type": "string" }, - "source_url": { + "genre": { "type": "string" - } - }, - "type": "object" - }, - "tokopedia.HomeResponse": { - "properties": { - "browser_rendered": { + }, + "id": { + "type": "integer" + }, + "is_album": { "type": "boolean" }, - "fetched_at": { + "likes_count": { + "example": 1024, + "type": "integer" + }, + "owner": { + "$ref": "#/definitions/soundcloud.Uploader" + }, + "permalink_url": { "type": "string" }, - "has_next_page": { + "public": { + "example": true, "type": "boolean" }, - "page": { + "reposts_count": { "type": "integer" }, - "products": { + "tag_list": { + "type": "string" + }, + "title": { + "type": "string" + }, + "track_count": { + "example": 416, + "type": "integer" + }, + "tracks": { "items": { - "$ref": "#/definitions/tokopedia.Product" + "$ref": "#/definitions/soundcloud.Track" }, "type": "array" - }, - "tab": { - "$ref": "#/definitions/tokopedia.HomeTab" } }, "type": "object" }, - "tokopedia.HomeTab": { + "soundcloud.Profile": { "properties": { + "avatar_url": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country_code": { + "example": "US", + "type": "string" + }, + "description": { + "type": "string" + }, + "followers_count": { + "example": 255531, + "type": "integer" + }, + "followings_count": { + "example": 634, + "type": "integer" + }, + "full_name": { + "type": "string" + }, "id": { + "type": "integer" + }, + "likes_count": { + "example": 1032, + "type": "integer" + }, + "permalink": { "type": "string" }, - "image_url": { + "permalink_url": { "type": "string" }, - "name": { + "playlist_count": { + "example": 27, + "type": "integer" + }, + "track_count": { + "example": 712, + "type": "integer" + }, + "username": { "type": "string" + }, + "verified": { + "type": "boolean" } }, "type": "object" }, - "tokopedia.HomeTabsResponse": { + "soundcloud.SearchResponse": { "properties": { - "fetched_at": { + "count": { + "example": 20, + "type": "integer" + }, + "query": { "type": "string" }, - "tabs": { + "tracks": { "items": { - "$ref": "#/definitions/tokopedia.HomeTab" + "$ref": "#/definitions/soundcloud.Track" }, "type": "array" } }, "type": "object" }, - "tokopedia.Product": { + "soundcloud.Track": { "properties": { - "image_url": { + "artwork_url": { "type": "string" }, - "name": { + "comment_count": { + "example": 57, + "type": "integer" + }, + "created_at": { + "example": "2021-06-14T15:40:10Z", "type": "string" }, - "price": { + "description": { + "type": "string" + }, + "duration_ms": { + "example": 165218, "type": "integer" }, - "price_text": { + "genre": { "type": "string" }, - "rating": { - "type": "string" + "id": { + "type": "integer" }, - "shop_city": { + "likes_count": { + "example": 10101, + "type": "integer" + }, + "permalink_url": { "type": "string" }, - "shop_name": { + "playback_count": { + "example": 2593224, + "type": "integer" + }, + "public": { + "example": true, + "type": "boolean" + }, + "reposts_count": { + "example": 196, + "type": "integer" + }, + "streamable": { + "example": true, + "type": "boolean" + }, + "tag_list": { "type": "string" }, - "url": { + "title": { "type": "string" + }, + "uploader": { + "$ref": "#/definitions/soundcloud.Uploader" } }, "type": "object" }, - "tokopedia.ProductDetail": { + "soundcloud.Uploader": { "properties": { - "browser_rendered": { - "type": "boolean" - }, - "description": { + "avatar_url": { "type": "string" }, - "discount_percent": { + "city": { "type": "string" }, - "fetched_at": { - "type": "string" + "followers_count": { + "example": 220, + "type": "integer" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" + "id": { + "type": "integer" }, - "name": { + "permalink": { "type": "string" }, - "original_price": { + "permalink_url": { "type": "string" }, - "price": { + "track_count": { + "example": 12, "type": "integer" }, - "price_text": { - "type": "string" - }, - "product_id": { + "username": { "type": "string" }, - "product_key": { - "type": "string" + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "soundcloud.UserTracksResponse": { + "properties": { + "count": { + "example": 20, + "type": "integer" }, - "shop_domain": { + "profile_url": { "type": "string" }, - "source_url": { - "type": "string" + "tracks": { + "items": { + "$ref": "#/definitions/soundcloud.Track" + }, + "type": "array" } }, "type": "object" }, - "tokopedia.ReviewFilterAvailability": { + "soundcloud.playlistResponseDoc": { "properties": { - "available": { - "type": "boolean" + "code": { + "example": 200, + "type": "integer" }, - "key": { + "data": { + "$ref": "#/definitions/soundcloud.Playlist" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tokopedia.ReviewFiltersResponse": { + "soundcloud.profileResponseDoc": { "properties": { - "browser_rendered": { - "type": "boolean" - }, - "fetched_at": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "media": { - "items": { - "$ref": "#/definitions/tokopedia.ReviewFilterAvailability" - }, - "type": "array" + "data": { + "$ref": "#/definitions/soundcloud.Profile" }, - "product_id": { + "msg": { + "example": "OK", "type": "string" - }, - "ratings": { - "items": { - "$ref": "#/definitions/tokopedia.ReviewFilterAvailability" - }, - "type": "array" - }, - "topics": { - "items": { - "$ref": "#/definitions/tokopedia.ReviewFilterAvailability" - }, - "type": "array" } }, "type": "object" }, - "tokopedia.SearchFilter": { + "soundcloud.searchResponseDoc": { "properties": { - "options": { - "items": { - "$ref": "#/definitions/tokopedia.SearchFilterOption" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "placeholder": { + "data": { + "$ref": "#/definitions/soundcloud.SearchResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "soundcloud.trackResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "searchable": { - "type": "boolean" + "data": { + "$ref": "#/definitions/soundcloud.Track" }, - "template": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "soundcloud.userTracksResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "title": { + "data": { + "$ref": "#/definitions/soundcloud.UserTracksResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "tokopedia.SearchFilterOption": { + "space.AuthorResponse": { "properties": { - "children": { + "articles": { "items": { - "$ref": "#/definitions/tokopedia.SearchFilterOption" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "description": { - "type": "string" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "hex_color": { + "image_url": { "type": "string" }, - "icon": { + "job_title": { "type": "string" }, - "input_type": { + "name": { "type": "string" }, - "key": { + "slug": { "type": "string" }, - "max": { + "url": { "type": "string" - }, - "min": { + } + }, + "type": "object" + }, + "sparkfun.CategoriesResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/sparkfun.Category" + }, + "type": "array" + } + }, + "type": "object" + }, + "sparkfun.Category": { + "properties": { + "id": { "type": "string" }, "name": { "type": "string" }, - "total_data": { + "url_key": { "type": "string" }, - "value": { + "url_path": { "type": "string" } }, "type": "object" }, - "tokopedia.SearchFiltersResponse": { + "sparkfun.CategoryResponse": { "properties": { - "fetched_at": { - "type": "string" + "category": { + "$ref": "#/definitions/sparkfun.Category" }, "filters": { "items": { - "$ref": "#/definitions/tokopedia.SearchFilter" + "$ref": "#/definitions/sparkfun.Filter" }, "type": "array" }, - "query": { - "type": "string" + "page": { + "type": "integer" }, - "sorts": { + "per_page": { + "type": "integer" + }, + "products": { "items": { - "$ref": "#/definitions/tokopedia.SearchSort" + "$ref": "#/definitions/sparkfun.Product" }, "type": "array" + }, + "total": { + "type": "integer" + }, + "total_pages": { + "type": "integer" } }, "type": "object" }, - "tokopedia.SearchResponse": { + "sparkfun.Filter": { "properties": { - "browser_rendered": { - "type": "boolean" - }, - "fetched_at": { + "attribute": { "type": "string" }, - "page": { - "type": "integer" + "label": { + "type": "string" }, - "products": { + "options": { "items": { - "$ref": "#/definitions/tokopedia.Product" + "$ref": "#/definitions/sparkfun.FilterOption" }, "type": "array" - }, - "query": { - "type": "string" - }, - "sort": { - "type": "integer" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "tokopedia.SearchSort": { + "sparkfun.FilterOption": { "properties": { - "apply_filter": { - "type": "string" - }, - "input_type": { - "type": "string" - }, - "key": { - "type": "string" + "count": { + "type": "integer" }, - "name": { + "label": { "type": "string" }, "value": { @@ -238883,12 +244448,9 @@ }, "type": "object" }, - "tokopedia.Suggestion": { + "sparkfun.Image": { "properties": { - "is_ad": { - "type": "boolean" - }, - "text": { + "label": { "type": "string" }, "url": { @@ -238897,62 +244459,112 @@ }, "type": "object" }, - "tokopedia.autocompleteResponseDoc": { + "sparkfun.Price": { "properties": { - "code": { - "example": 200, - "type": "integer" + "currency": { + "type": "string" }, - "data": { - "$ref": "#/definitions/tokopedia.AutocompleteResponse" + "value": { + "type": "number" + } + }, + "type": "object" + }, + "sparkfun.Product": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/sparkfun.Category" + }, + "type": "array" }, - "msg": { - "example": "OK", + "description": { + "type": "string" + }, + "image": { + "$ref": "#/definitions/sparkfun.Image" + }, + "media": { + "items": { + "$ref": "#/definitions/sparkfun.Image" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "price": { + "$ref": "#/definitions/sparkfun.Price" + }, + "recommendations": { + "items": { + "$ref": "#/definitions/sparkfun.ProductRecommendation" + }, + "type": "array" + }, + "sku": { + "type": "string" + }, + "stock_status": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "tokopedia.categoryResponseDoc": { + "sparkfun.ProductRecommendation": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/tokopedia.CategoryResponse" + "product": { + "$ref": "#/definitions/sparkfun.Product" }, - "msg": { - "example": "OK", + "relation": { "type": "string" } }, "type": "object" }, - "tokopedia.homeResponseDoc": { + "sparkfun.SearchResponse": { "properties": { - "code": { - "example": 200, + "filters": { + "items": { + "$ref": "#/definitions/sparkfun.Filter" + }, + "type": "array" + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/tokopedia.HomeResponse" + "per_page": { + "type": "integer" }, - "msg": { - "example": "OK", + "products": { + "items": { + "$ref": "#/definitions/sparkfun.Product" + }, + "type": "array" + }, + "query": { "type": "string" + }, + "total": { + "type": "integer" + }, + "total_pages": { + "type": "integer" } }, "type": "object" }, - "tokopedia.homeTabsResponseDoc": { + "sparkfun.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tokopedia.HomeTabsResponse" + "$ref": "#/definitions/sparkfun.CategoriesResponse" }, "msg": { "example": "OK", @@ -238961,14 +244573,14 @@ }, "type": "object" }, - "tokopedia.productResponseDoc": { + "sparkfun.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tokopedia.ProductDetail" + "$ref": "#/definitions/sparkfun.CategoryResponse" }, "msg": { "example": "OK", @@ -238977,14 +244589,14 @@ }, "type": "object" }, - "tokopedia.reviewFiltersResponseDoc": { + "sparkfun.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tokopedia.ReviewFiltersResponse" + "$ref": "#/definitions/sparkfun.Product" }, "msg": { "example": "OK", @@ -238993,14 +244605,14 @@ }, "type": "object" }, - "tokopedia.searchFiltersResponseDoc": { + "sparkfun.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tokopedia.SearchFiltersResponse" + "$ref": "#/definitions/sparkfun.SearchResponse" }, "msg": { "example": "OK", @@ -239009,66 +244621,88 @@ }, "type": "object" }, - "tokopedia.searchResponseDoc": { + "speedrun.OptionsResponseDoc": { "properties": { "code": { - "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/tokopedia.SearchResponse" + "additionalProperties": { + "$ref": "#/definitions/speedrun.ResourceOption" + }, + "type": "object" }, "msg": { - "example": "OK", "type": "string" } }, "type": "object" }, - "tomsguide.AuthorResponse": { + "speedrun.ResourceOption": { "properties": { - "articles": { + "catalog_paths": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "directions": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "type": "string" }, "type": "array" }, - "biography": { + "embeds": { "items": { "type": "string" }, "type": "array" }, - "has_next_page": { - "type": "boolean" - }, - "job_title": { - "type": "string" - }, - "name": { - "type": "string" - }, - "page": { - "type": "integer" - }, - "slug": { - "type": "string" + "orderby": { + "items": { + "type": "string" + }, + "type": "array" }, - "social_links": { + "timing": { "items": { - "$ref": "#/definitions/tomsguide.AuthorSocialLink" + "type": "string" }, "type": "array" + } + }, + "type": "object" + }, + "speedrun.ResponseDoc": { + "properties": { + "code": { + "type": "integer" }, - "url": { + "data": { + "additionalProperties": true, + "type": "object" + }, + "msg": { "type": "string" } }, "type": "object" }, - "tomsguide.AuthorSocialLink": { + "sportingnews.AuthorArticle": { "properties": { - "platform": { + "author": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "section": { + "type": "string" + }, + "title": { "type": "string" }, "url": { @@ -239077,38 +244711,29 @@ }, "type": "object" }, - "tomshardware.AuthorResponse": { + "sportingnews.AuthorResponse": { "properties": { "articles": { "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" + "$ref": "#/definitions/sportingnews.AuthorArticle" }, "type": "array" }, - "has_next_page": { - "type": "boolean" + "bio": { + "type": "string" }, - "job_title": { + "image_url": { "type": "string" }, "name": { "type": "string" }, - "page": { - "type": "integer" - }, "slug": { "type": "string" }, "social_links": { "items": { - "$ref": "#/definitions/tomshardware.AuthorSocialLink" + "type": "string" }, "type": "array" }, @@ -239118,1421 +244743,807 @@ }, "type": "object" }, - "tomshardware.AuthorSocialLink": { + "sportsbook.Event": { "properties": { - "platform": { + "id": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "torontostar.AuthorArticle": { - "properties": { - "published_at": { - "type": "string" + "markets": { + "items": { + "$ref": "#/definitions/sportsbook.Market" + }, + "type": "array" }, - "summary": { + "name": { + "example": "CAR Panthers @ BUF Bills", "type": "string" }, - "title": { + "participants": { + "items": { + "$ref": "#/definitions/sportsbook.Participant" + }, + "type": "array" + }, + "start_time": { "type": "string" }, - "url": { + "status": { + "example": "NOT_STARTED", "type": "string" } }, "type": "object" }, - "torontostar.AuthorResponse": { + "sportsbook.EventContextResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/torontostar.AuthorArticle" - }, - "type": "array" - }, - "bio": { + "event_id": { + "example": "34522271", "type": "string" }, - "image_url": { + "event_seo_id": { + "example": "chi-white-sox-@-det-tigers", "type": "string" }, - "job_title": { + "fetched_at": { "type": "string" }, - "location": { + "league_id": { + "example": "84240", "type": "string" }, - "name": { + "league_seo_id": { + "example": "mlb", "type": "string" }, - "slug": { + "source_url": { "type": "string" }, - "topics": { + "sport_id": { + "example": "7", "type": "string" }, - "url": { + "sport_seo_id": { + "example": "baseball", "type": "string" } }, "type": "object" }, - "townhall.AuthorArticle": { + "sportsbook.EventMarketsResponse": { "properties": { - "image_url": { - "type": "string" + "count": { + "type": "integer" }, - "published_at": { + "event_id": { "type": "string" }, - "section": { + "fetched_at": { "type": "string" }, - "title": { - "type": "string" + "markets": { + "items": { + "$ref": "#/definitions/sportsbook.Market" + }, + "type": "array" }, - "url": { + "source_url": { "type": "string" }, - "vip": { - "description": "VIP is true when Townhall marks the story with its VIP badge, meaning\nonly the lead paragraph is free (see Article's paywalled flag).", - "type": "boolean" + "subcategory_id": { + "type": "string" } }, "type": "object" }, - "townhall.AuthorResponse": { + "sportsbook.EventResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/townhall.AuthorArticle" - }, - "type": "array" + "fetched_at": { + "type": "string" }, - "bio": { + "id": { "type": "string" }, - "image_url": { + "league_id": { + "example": "84240", "type": "string" }, "name": { + "example": "CAR Panthers @ BUF Bills", "type": "string" }, - "slug": { + "participants": { + "items": { + "$ref": "#/definitions/sportsbook.Participant" + }, + "type": "array" + }, + "source_url": { "type": "string" }, - "url": { + "sport_id": { + "example": "7", "type": "string" }, - "x_url": { + "start_time": { + "type": "string" + }, + "status": { + "example": "NOT_STARTED", "type": "string" } }, "type": "object" }, - "trends.ExploreQueriesResponse": { + "sportsbook.FeaturedLeague": { "properties": { - "category": { - "description": "Trends category ID that was applied. `0` means all categories.", - "example": 0, + "featured_order": { + "example": 4855, "type": "integer" }, - "geo": { - "description": "Location code the data covers, such as `US`.", - "example": "US", + "has_live_offers": { + "type": "boolean" + }, + "id": { + "example": "84240", "type": "string" }, - "hl": { - "description": "Locale that was applied, such as `en-US`.", - "example": "en-US", + "name": { + "example": "MLB", "type": "string" }, - "keywords": { - "description": "Keywords that were compared.", + "slug": { + "example": "mlb", + "type": "string" + }, + "sport": { + "example": "Baseball", + "type": "string" + }, + "sport_id": { + "example": "7", + "type": "string" + }, + "tags": { "items": { "type": "string" }, "type": "array" + } + }, + "type": "object" + }, + "sportsbook.FeaturedLeaguesResponse": { + "properties": { + "count": { + "type": "integer" }, - "property": { - "description": "Google property filter that was applied, matching `type`.", + "fetched_at": { "type": "string" }, - "queries": { - "description": "Related queries, grouped by keyword.", + "leagues": { "items": { - "$ref": "#/definitions/trends.RelatedGroup" + "$ref": "#/definitions/sportsbook.FeaturedLeague" }, "type": "array" }, - "query_type": { - "description": "Kind of related queries returned: `top` or `rising`.", - "example": "top", - "type": "string" - }, - "time_range": { - "description": "Time range that was applied, such as `today 12-m`.", - "example": "today 12-m", - "type": "string" - }, - "type": { - "description": "Search type that was applied: `web`, `image`, `news`, `youtube` or `shopping`.", - "example": "web", + "source_url": { "type": "string" - }, - "tz": { - "description": "Timezone offset in minutes that was applied.", - "example": 0, - "type": "integer" } }, "type": "object" }, - "trends.ExploreRequest": { + "sportsbook.FuturesResponse": { "properties": { - "category": { - "example": 0, + "count": { "type": "integer" }, - "geo": { - "enum": [ - "WORLDWIDE", - "AF", - "AX", - "AL", - "DZ", - "AS", - "AD", - "AO", - "AI", - "AQ", - "AG", - "AR", - "AM", - "AW", - "AU", - "AT", - "AZ", - "BS", - "BH", - "BD", - "BB", - "BY", - "BE", - "BZ", - "BJ", - "BM", - "BT", - "BO", - "BA", - "BW", - "BV", - "BR", - "IO", - "VG", - "BN", - "BG", - "BF", - "BI", - "KH", - "CM", - "CA", - "CV", - "BQ", - "KY", - "CF", - "TD", - "CL", - "CN", - "CX", - "CC", - "CO", - "KM", - "CG", - "CD", - "CK", - "CR", - "CI", - "HR", - "CU", - "CW", - "CY", - "CZ", - "DK", - "DJ", - "DM", - "DO", - "EC", - "EG", - "SV", - "GQ", - "ER", - "EE", - "SZ", - "ET", - "FK", - "FO", - "FJ", - "FI", - "FR", - "GF", - "PF", - "TF", - "GA", - "GM", - "GE", - "DE", - "GH", - "GI", - "GR", - "GL", - "GD", - "GP", - "GU", - "GT", - "GG", - "GN", - "GW", - "GY", - "HT", - "HM", - "HN", - "HK", - "HU", - "IS", - "IN", - "ID", - "IR", - "IQ", - "IE", - "IM", - "IL", - "IT", - "JM", - "JP", - "JE", - "JO", - "KZ", - "KE", - "KI", - "XK", - "KW", - "KG", - "LA", - "LV", - "LB", - "LS", - "LR", - "LY", - "LI", - "LT", - "LU", - "MO", - "MG", - "MW", - "MY", - "MV", - "ML", - "MT", - "MH", - "MQ", - "MR", - "MU", - "YT", - "MX", - "FM", - "MD", - "MC", - "MN", - "ME", - "MS", - "MA", - "MZ", - "MM", - "NA", - "NR", - "NP", - "NL", - "NC", - "NZ", - "NI", - "NE", - "NG", - "NU", - "NF", - "KP", - "MK", - "MP", - "NO", - "OM", - "PK", - "PW", - "PS", - "PA", - "PG", - "PY", - "PE", - "PH", - "PN", - "PL", - "PT", - "PR", - "QA", - "RE", - "RO", - "RU", - "RW", - "WS", - "SM", - "ST", - "SA", - "SN", - "RS", - "SC", - "SL", - "SG", - "SX", - "SK", - "SI", - "SB", - "SO", - "ZA", - "GS", - "KR", - "SS", - "ES", - "LK", - "BL", - "SH", - "KN", - "LC", - "MF", - "PM", - "VC", - "SD", - "SR", - "SJ", - "SE", - "CH", - "SY", - "TW", - "TJ", - "TZ", - "TH", - "TL", - "TG", - "TK", - "TO", - "TT", - "TN", - "TR", - "TM", - "TC", - "TV", - "UM", - "VI", - "UG", - "UA", - "AE", - "GB", - "US", - "UY", - "UZ", - "VU", - "VA", - "VE", - "VN", - "WF", - "EH", - "YE", - "ZM", - "ZW" - ], - "example": "US", - "type": "string" - }, - "hl": { - "example": "en-US", - "type": "string" - }, - "keywords": { - "example": [ - "chatgpt", - "openai" - ], + "events": { "items": { - "type": "string" + "$ref": "#/definitions/sportsbook.Event" }, "type": "array" }, - "property": { - "example": "", + "fetched_at": { "type": "string" }, - "time_range": { - "enum": [ - "now 1-H", - "now 4-H", - "now 1-d", - "now 7-d", - "today 1-m", - "today 3-m", - "today 12-m", - "today 5-y", - "all" - ], - "example": "today 12-m", + "league": { + "example": "MLB", "type": "string" }, - "type": { - "enum": [ - "web", - "image", - "news", - "youtube", - "shopping" - ], - "example": "web", + "league_id": { "type": "string" }, - "tz": { - "example": 0, - "type": "integer" + "source_url": { + "type": "string" + }, + "sport": { + "example": "Baseball", + "type": "string" + }, + "subcategory_id": { + "type": "string" } }, "type": "object" }, - "trends.ExploreResponse": { + "sportsbook.League": { "properties": { - "category": { - "description": "Trends category ID that was applied. `0` means all categories.", - "example": 0, - "type": "integer" + "has_live_offers": { + "type": "boolean" }, - "geo": { - "description": "Location code the data covers, such as `US`.", - "example": "US", + "id": { + "example": "104557", "type": "string" }, - "hl": { - "description": "Locale that was applied, such as `en-US`.", - "example": "en-US", + "name": { + "example": "ITF Doubles - Muttenz (M)", "type": "string" }, - "interest_by_region": { - "description": "Interest in each keyword by region.", - "items": { - "$ref": "#/definitions/trends.RegionInterest" - }, - "type": "array" + "slug": { + "example": "itf-m25-muttenz%2C-doubles", + "type": "string" + } + }, + "type": "object" + }, + "sportsbook.LeagueEvent": { + "properties": { + "id": { + "example": "34522271", + "type": "string" }, - "interest_over_time": { - "description": "Interest in each keyword over time, one point per time step.", - "items": { - "$ref": "#/definitions/trends.InterestPoint" - }, - "type": "array" + "name": { + "example": "CHI White Sox @ DET Tigers", + "type": "string" }, - "keywords": { - "description": "Keywords that were compared.", + "participant_type": { + "example": "TwoTeam", + "type": "string" + }, + "participants": { "items": { - "type": "string" + "$ref": "#/definitions/sportsbook.Participant" }, "type": "array" }, - "property": { - "description": "Google property filter that was applied, matching `type`.", + "start_time": { "type": "string" }, - "related_queries": { - "description": "Top related queries, grouped by keyword. Same content as `top_queries`.", - "items": { - "$ref": "#/definitions/trends.RelatedGroup" - }, - "type": "array" + "status": { + "example": "NOT_STARTED", + "type": "string" }, - "related_topics": { - "description": "Related topics, grouped by keyword.", + "tags": { "items": { - "$ref": "#/definitions/trends.RelatedGroup" + "type": "string" }, "type": "array" + } + }, + "type": "object" + }, + "sportsbook.LeagueEventsResponse": { + "properties": { + "count": { + "type": "integer" }, - "rising_queries": { - "description": "Rising related queries, grouped by keyword.", + "events": { "items": { - "$ref": "#/definitions/trends.RelatedGroup" + "$ref": "#/definitions/sportsbook.LeagueEvent" }, "type": "array" }, - "time_range": { - "description": "Time range that was applied, such as `today 12-m`.", - "example": "today 12-m", + "fetched_at": { "type": "string" }, - "top_queries": { - "description": "Top related queries, grouped by keyword.", - "items": { - "$ref": "#/definitions/trends.RelatedGroup" - }, - "type": "array" + "league": { + "example": "MLB", + "type": "string" }, - "type": { - "description": "Search type that was applied: `web`, `image`, `news`, `youtube` or `shopping`.", - "example": "web", + "league_id": { + "example": "84240", "type": "string" }, - "tz": { - "description": "Timezone offset in minutes that was applied.", - "example": 0, - "type": "integer" + "source_url": { + "type": "string" + }, + "sport": { + "example": "Baseball", + "type": "string" + }, + "sport_id": { + "example": "7", + "type": "string" } }, "type": "object" }, - "trends.InterestByRegionResponse": { + "sportsbook.LeaguesResponse": { "properties": { - "category": { - "description": "Trends category ID that was applied. `0` means all categories.", - "example": 0, + "count": { "type": "integer" }, - "geo": { - "description": "Location code the data covers, such as `US`.", - "example": "US", + "fetched_at": { "type": "string" }, - "hl": { - "description": "Locale that was applied, such as `en-US`.", - "example": "en-US", + "source_url": { "type": "string" }, - "interest_by_region": { - "description": "Interest in each keyword by region.", - "items": { - "$ref": "#/definitions/trends.RegionInterest" - }, - "type": "array" - }, - "keywords": { - "description": "Keywords that were compared.", + "sports": { "items": { - "type": "string" + "$ref": "#/definitions/sportsbook.Sport" }, "type": "array" - }, - "property": { - "description": "Google property filter that was applied, matching `type`.", - "type": "string" - }, - "time_range": { - "description": "Time range that was applied, such as `today 12-m`.", - "example": "today 12-m", - "type": "string" - }, - "type": { - "description": "Search type that was applied: `web`, `image`, `news`, `youtube` or `shopping`.", - "example": "web", - "type": "string" - }, - "tz": { - "description": "Timezone offset in minutes that was applied.", - "example": 0, - "type": "integer" } }, "type": "object" }, - "trends.InterestOverTimeResponse": { + "sportsbook.LiveEvent": { "properties": { - "category": { - "description": "Trends category ID that was applied. `0` means all categories.", - "example": 0, - "type": "integer" + "categories": { + "items": { + "$ref": "#/definitions/sportsbook.MarketCategory" + }, + "type": "array" }, - "geo": { - "description": "Location code the data covers, such as `US`.", - "example": "US", + "id": { + "example": "34525244", "type": "string" }, - "hl": { - "description": "Locale that was applied, such as `en-US`.", - "example": "en-US", + "league_id": { + "example": "104557", "type": "string" }, - "interest_over_time": { - "description": "Interest in each keyword over time, one point per time step.", + "markets": { "items": { - "$ref": "#/definitions/trends.InterestPoint" + "$ref": "#/definitions/sportsbook.Market" }, "type": "array" }, - "keywords": { - "description": "Keywords that were compared.", + "name": { + "example": "A. Casanova / Parizzia vs N. Hipfl / C. Mueller", + "type": "string" + }, + "participants": { "items": { - "type": "string" + "$ref": "#/definitions/sportsbook.Participant" }, "type": "array" }, - "property": { - "description": "Google property filter that was applied, matching `type`.", + "period": { + "example": "2nd", "type": "string" }, - "time_range": { - "description": "Time range that was applied, such as `today 12-m`.", - "example": "today 12-m", + "score": { + "$ref": "#/definitions/sportsbook.LiveScore" + }, + "sport_id": { + "example": "6", "type": "string" }, - "type": { - "description": "Search type that was applied: `web`, `image`, `news`, `youtube` or `shopping`.", - "example": "web", + "start_time": { "type": "string" }, - "tz": { - "description": "Timezone offset in minutes that was applied.", - "example": 0, - "type": "integer" + "status": { + "example": "STARTED", + "type": "string" + }, + "subcategories": { + "items": { + "$ref": "#/definitions/sportsbook.MarketSubcategory" + }, + "type": "array" } }, "type": "object" }, - "trends.InterestPoint": { + "sportsbook.LiveResponse": { "properties": { - "formatted_axis_time": { - "description": "Date label used on the chart axis, such as `Apr 2026`.", - "example": "Apr 2026", - "type": "string" - }, - "formatted_time": { - "description": "Date label of this point as Google Trends shows it, such as `Apr 2026`.", - "example": "Apr 2026", - "type": "string" - }, - "time": { - "description": "Time of this data point, in Unix seconds, as a string.", - "example": "1777075200", - "type": "string" + "count": { + "type": "integer" }, - "values": { - "description": "Interest value for each keyword at this point.", + "events": { "items": { - "$ref": "#/definitions/trends.TrendValue" + "$ref": "#/definitions/sportsbook.LiveEvent" }, "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "trends.RegionInterest": { + "sportsbook.LiveScore": { "properties": { - "geo_code": { - "description": "Code of the region, such as `US-CA`.", - "example": "US-CA", - "type": "string" + "current": { + "$ref": "#/definitions/sportsbook.LiveScoreLine" }, - "geo_name": { - "description": "Name of the region, such as `California`.", - "example": "California", + "on_serve": { + "example": "away", "type": "string" }, - "values": { - "description": "Interest value for each keyword in this region.", + "periods": { "items": { - "$ref": "#/definitions/trends.TrendValue" + "$ref": "#/definitions/sportsbook.LiveScorePeriod" }, "type": "array" } }, "type": "object" }, - "trends.RelatedGroup": { + "sportsbook.LiveScoreLine": { "properties": { - "items": { - "description": "Related entries for this keyword.", - "items": { - "$ref": "#/definitions/trends.RelatedItem" - }, - "type": "array" + "away": { + "example": "30", + "type": "string" }, - "keyword": { - "description": "Keyword the related entries belong to.", - "example": "chatgpt", + "home": { + "example": "30", "type": "string" } }, "type": "object" }, - "trends.RelatedItem": { + "sportsbook.LiveScorePeriod": { "properties": { - "formatted_value": { - "description": "Value as Google Trends displays it.", - "example": "100", + "away": { + "example": "30", "type": "string" }, - "link": { - "description": "Google Trends path that opens this entry in Explore.", - "example": "/trends/explore?q=chatgpt", + "home": { + "example": "30", "type": "string" }, - "query": { - "description": "Related search query.", - "example": "chatgpt login", + "name": { + "example": "1", "type": "string" - }, - "topic_mid": { - "description": "Google topic ID of the related topic, such as `/g/11khcfz0y2`.", - "example": "/g/11khcfz0y2", + } + }, + "type": "object" + }, + "sportsbook.Market": { + "properties": { + "id": { "type": "string" }, - "topic_title": { - "description": "Title of the related topic.", - "example": "ChatGPT", - "type": "string" + "selections": { + "items": { + "$ref": "#/definitions/sportsbook.Selection" + }, + "type": "array" }, - "topic_type": { - "description": "Type label of the related topic, such as `Topic`.", - "example": "Topic", + "subcategory_id": { + "example": "4519", "type": "string" }, - "value": { - "description": "Relative popularity score Google Trends gives the entry.", - "example": 100, - "type": "integer" + "type": { + "example": "Moneyline", + "type": "string" } }, "type": "object" }, - "trends.RelatedTopicsResponse": { + "sportsbook.MarketCategory": { "properties": { - "category": { - "description": "Trends category ID that was applied. `0` means all categories.", - "example": 0, - "type": "integer" - }, - "geo": { - "description": "Location code the data covers, such as `US`.", - "example": "US", - "type": "string" - }, - "hl": { - "description": "Locale that was applied, such as `en-US`.", - "example": "en-US", - "type": "string" - }, - "keywords": { - "description": "Keywords that were compared.", - "items": { - "type": "string" - }, - "type": "array" - }, - "property": { - "description": "Google property filter that was applied, matching `type`.", - "type": "string" - }, - "related_topics": { - "description": "Related topics, grouped by keyword.", - "items": { - "$ref": "#/definitions/trends.RelatedGroup" - }, - "type": "array" - }, - "time_range": { - "description": "Time range that was applied, such as `today 12-m`.", - "example": "today 12-m", + "id": { + "example": "488", "type": "string" }, - "type": { - "description": "Search type that was applied: `web`, `image`, `news`, `youtube` or `shopping`.", - "example": "web", + "name": { + "example": "Match Lines", "type": "string" - }, - "tz": { - "description": "Timezone offset in minutes that was applied.", - "example": 0, - "type": "integer" } }, "type": "object" }, - "trends.TrendCategory": { + "sportsbook.MarketSubcategory": { "properties": { + "category_id": { + "example": "488", + "type": "string" + }, "id": { - "description": "Trends category ID. Pass it as `category`.", - "example": 0, - "type": "integer" + "example": "6364", + "type": "string" }, "name": { - "description": "Category name, such as `All`.", - "example": "All", + "example": "Moneyline", "type": "string" } }, "type": "object" }, - "trends.TrendValue": { + "sportsbook.Odds": { "properties": { - "formatted_value": { - "description": "Interest score as Google Trends displays it.", - "example": "87", + "american": { + "example": "+130", "type": "string" }, - "has_data": { - "description": "Whether Google Trends has data for this keyword at this point.", - "example": true, - "type": "boolean" - }, - "keyword": { - "description": "Keyword the value belongs to.", - "example": "chatgpt", + "decimal": { + "example": "2.30", "type": "string" }, - "value": { - "description": "Relative interest score for the keyword, as Google Trends reports it.", - "example": 87, - "type": "integer" + "fractional": { + "example": "13/10", + "type": "string" } }, "type": "object" }, - "trends.TrendingArticle": { + "sportsbook.OddsResponse": { "properties": { - "source": { - "description": "Name of the news outlet that published the article.", - "example": "Example News", + "count": { + "type": "integer" + }, + "events": { + "items": { + "$ref": "#/definitions/sportsbook.Event" + }, + "type": "array" + }, + "fetched_at": { "type": "string" }, - "time": { - "description": "When the article was published, as Google words it, such as `2 hours ago`.", - "example": "2 hours ago", + "league": { + "example": "NFL", "type": "string" }, - "title": { - "description": "Headline of the news article.", - "example": "Why chatgpt is trending", + "league_id": { "type": "string" }, - "url": { - "description": "URL of the news article.", - "example": "https://example.com/news", + "source_url": { + "type": "string" + }, + "sport": { + "example": "Football", "type": "string" } }, "type": "object" }, - "trends.TrendingDetailRequest": { + "sportsbook.Participant": { "properties": { - "category": { - "example": 0, - "type": "integer" - }, - "geo": { - "enum": [ - "WORLDWIDE", - "AF", - "AX", - "AL", - "DZ", - "AS", - "AD", - "AO", - "AI", - "AQ", - "AG", - "AR", - "AM", - "AW", - "AU", - "AT", - "AZ", - "BS", - "BH", - "BD", - "BB", - "BY", - "BE", - "BZ", - "BJ", - "BM", - "BT", - "BO", - "BA", - "BW", - "BV", - "BR", - "IO", - "VG", - "BN", - "BG", - "BF", - "BI", - "KH", - "CM", - "CV", - "CA", - "BQ", - "KY", - "CF", - "TD", - "CL", - "CN", - "CX", - "CC", - "CO", - "KM", - "CG", - "CD", - "CK", - "CR", - "CI", - "HR", - "CU", - "CW", - "CY", - "CZ", - "DK", - "DJ", - "DM", - "DO", - "EC", - "EG", - "SV", - "GQ", - "ER", - "EE", - "SZ", - "ET", - "FK", - "FO", - "FJ", - "FI", - "FR", - "GF", - "PF", - "TF", - "GA", - "GM", - "GE", - "DE", - "GH", - "GI", - "GR", - "GL", - "GD", - "GP", - "GU", - "GT", - "GG", - "GN", - "GW", - "GY", - "HT", - "HM", - "HN", - "HK", - "HU", - "IS", - "IN", - "ID", - "IR", - "IQ", - "IE", - "IM", - "IL", - "IT", - "JM", - "JP", - "JE", - "JO", - "KZ", - "KE", - "KI", - "XK", - "KW", - "KG", - "LA", - "LV", - "LB", - "LS", - "LR", - "LY", - "LI", - "LT", - "LU", - "MO", - "MG", - "MW", - "MY", - "MV", - "ML", - "MT", - "MH", - "MQ", - "MR", - "MU", - "YT", - "MX", - "FM", - "MD", - "MC", - "MN", - "ME", - "MS", - "MA", - "MZ", - "MM", - "NA", - "NR", - "NP", - "NL", - "NC", - "NZ", - "NI", - "NE", - "NG", - "NU", - "NF", - "KP", - "MK", - "MP", - "NO", - "OM", - "PK", - "PW", - "PS", - "PA", - "PG", - "PY", - "PE", - "PH", - "PN", - "PL", - "PT", - "PR", - "QA", - "RE", - "RO", - "RU", - "RW", - "WS", - "SM", - "ST", - "SA", - "SN", - "RS", - "SC", - "SL", - "SG", - "SX", - "SK", - "SI", - "SB", - "SO", - "ZA", - "GS", - "KR", - "SS", - "ES", - "LK", - "BL", - "SH", - "KN", - "LC", - "MF", - "PM", - "VC", - "SD", - "SR", - "SJ", - "SE", - "CH", - "SY", - "TW", - "TJ", - "TZ", - "TH", - "TL", - "TG", - "TK", - "TO", - "TT", - "TN", - "TR", - "TM", - "TC", - "TV", - "UM", - "VI", - "UG", - "UA", - "AE", - "GB", - "US", - "UY", - "UZ", - "VU", - "VA", - "VE", - "VN", - "WF", - "EH", - "YE", - "ZM", - "ZW" - ], - "example": "US", + "id": { "type": "string" }, - "hl": { - "example": "en-US", + "name": { + "example": "BUF Bills", "type": "string" }, - "property": { - "example": "", + "role": { + "example": "Home", "type": "string" - }, - "query": { - "example": "chatgpt", + } + }, + "type": "object" + }, + "sportsbook.QuickLink": { + "properties": { + "league_id": { + "example": "84240", "type": "string" }, - "time_range": { - "enum": [ - "now 1-H", - "now 4-H", - "now 1-d", - "now 7-d", - "today 1-m", - "today 3-m", - "today 12-m", - "today 5-y", - "all" - ], - "example": "now 7-d", + "name": { + "example": "MLB", "type": "string" }, - "type": { - "enum": [ - "web", - "image", - "news", - "youtube", - "shopping" - ], - "example": "web", + "path": { + "example": "/leagues/baseball/mlb", "type": "string" }, - "tz": { - "example": 0, - "type": "integer" + "sport_id": { + "example": "7", + "type": "string" } }, "type": "object" }, - "trends.TrendingItem": { + "sportsbook.QuickLinksResponse": { "properties": { - "articles": { - "description": "News articles linked to the trend.", + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "links": { "items": { - "$ref": "#/definitions/trends.TrendingArticle" + "$ref": "#/definitions/sportsbook.QuickLink" }, "type": "array" }, - "explore_url": { - "description": "Google Trends Explore URL for the trend.", - "example": "https://trends.google.com/trends/explore?q=chatgpt&geo=US", + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "sportsbook.Selection": { + "properties": { + "label": { + "example": "CAR Panthers", "type": "string" }, - "query": { - "description": "Search query behind the trend.", - "example": "chatgpt", + "odds": { + "$ref": "#/definitions/sportsbook.Odds" + }, + "outcome_type": { + "example": "Away", "type": "string" }, - "rank": { - "description": "Rank of the trend in the list, with `1` as the top entry.", - "example": 1, - "type": "integer" + "points": { + "example": 3, + "type": "number" + } + }, + "type": "object" + }, + "sportsbook.Sport": { + "properties": { + "id": { + "example": "6", + "type": "string" }, - "related_terms": { - "description": "Related search terms listed for the trend.", + "leagues": { "items": { - "type": "string" + "$ref": "#/definitions/sportsbook.League" }, "type": "array" }, - "share_url": { - "description": "Link for sharing the trend.", + "name": { + "example": "Tennis", "type": "string" }, - "started_unix": { - "description": "Time the trend started, in Unix seconds.", - "example": 1777075200, - "type": "integer" - }, - "status": { - "description": "Whether the trend is `active` or `ended`.", - "example": "active", + "slug": { + "example": "tennis", + "type": "string" + } + }, + "type": "object" + }, + "sportsbook.Team": { + "properties": { + "id": { + "example": "18454", "type": "string" }, - "title": { - "description": "Title of the trend.", - "example": "chatgpt", + "name": { + "example": "Arizona Cardinals", "type": "string" }, - "traffic": { - "description": "Approximate search volume label for the trend, such as `200K+`.", - "example": "200K+", + "slug": { + "example": "arizona-cardinals", "type": "string" }, - "updated_unix": { - "description": "Time the trend was last updated, in Unix seconds.", - "example": 1777078800, - "type": "integer" + "url": { + "example": "https://sportsbook.draftkings.com/teams/football/arizona-cardinals-odds-18454", + "type": "string" } }, "type": "object" }, - "trends.TrendingResponse": { + "sportsbook.TeamDetailResponse": { "properties": { - "category": { - "description": "Trends category ID that was applied. `0` means all categories.", - "example": 0, - "type": "integer" + "abbreviation": { + "example": "ARI", + "type": "string" }, - "geo": { - "description": "Country code the trends cover, such as `US`.", - "example": "US", + "city": { + "example": "Arizona", "type": "string" }, - "hl": { - "description": "Locale that was applied, such as `en-US`.", - "example": "en-US", + "fetched_at": { "type": "string" }, - "items": { - "description": "Trending searches, one entry per trend.", + "id": { + "example": "18454", + "type": "string" + }, + "leagues": { "items": { - "$ref": "#/definitions/trends.TrendingItem" + "$ref": "#/definitions/sportsbook.TeamLeagueRef" }, "type": "array" }, - "sort_by": { - "description": "Sort order that was applied: `relevance`, `title`, `recency` or `search_volume`.", - "example": "relevance", + "name": { + "example": "ARI Cardinals", "type": "string" }, - "status": { - "description": "Status filter that was applied: `all`, `active` or `ended`.", - "example": "all", + "primary_color": { + "example": "#97233F", "type": "string" }, - "time_range": { - "description": "Time window that was applied. Same value as `window`.", - "example": "24h", + "secondary_color": { + "example": "#000000", "type": "string" }, - "tz": { - "description": "Timezone offset in minutes that was applied.", - "example": 0, - "type": "integer" + "short_name": { + "example": "Cardinals", + "type": "string" }, - "window": { - "description": "Time window that was applied: `4h`, `24h`, `48h` or `7d`.", - "example": "24h", + "source_url": { + "type": "string" + }, + "sport": { + "example": "football", + "type": "string" + }, + "sport_id": { + "example": "3", "type": "string" } }, "type": "object" }, - "trends.TrendsCategoriesResponse": { + "sportsbook.TeamLeagueRef": { "properties": { - "categories": { - "description": "Supported Trends categories, each with an ID and name.", - "items": { - "$ref": "#/definitions/trends.TrendCategory" - }, - "type": "array" + "id": { + "example": "88808", + "type": "string" + }, + "slug": { + "example": "nfl", + "type": "string" } }, "type": "object" }, - "trends.TrendsEnumsResponse": { + "sportsbook.TeamsResponse": { "properties": { - "explore_time_ranges": { - "description": "Supported `time_range` values for the Explore endpoints.", - "items": { - "type": "string" - }, - "type": "array" - }, - "locations": { - "description": "Supported location codes.", - "items": { - "type": "string" - }, - "type": "array" + "count": { + "type": "integer" }, - "search_types": { - "description": "Supported search `type` values.", - "items": { - "type": "string" - }, - "type": "array" + "fetched_at": { + "type": "string" }, - "trend_statuses": { - "description": "Supported `status` values for Trending Now.", - "items": { - "type": "string" - }, - "type": "array" + "league": { + "example": "nfl", + "type": "string" }, - "trending_categories": { - "description": "Supported category IDs for Trending Now, each with a name.", - "items": { - "$ref": "#/definitions/trends.TrendCategory" - }, - "type": "array" + "source_url": { + "type": "string" }, - "trending_sort_bys": { - "description": "Supported `sort_by` values for Trending Now.", - "items": { - "type": "string" - }, - "type": "array" + "sport": { + "example": "football", + "type": "string" }, - "trending_time_ranges": { - "description": "Supported `window` values for Trending Now.", + "teams": { "items": { - "type": "string" + "$ref": "#/definitions/sportsbook.Team" }, "type": "array" } }, "type": "object" }, - "trends.TrendsLocationsResponse": { + "sportsbook.eventContextResponseDoc": { "properties": { - "locations": { - "description": "Supported location codes, such as `US`.", - "items": { - "type": "string" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/sportsbook.EventContextResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "trends.exploreQueriesResponseDoc": { + "sportsbook.eventMarketsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/trends.ExploreQueriesResponse" + "$ref": "#/definitions/sportsbook.EventMarketsResponse" }, "msg": { "example": "OK", @@ -240541,14 +245552,14 @@ }, "type": "object" }, - "trends.exploreResponseDoc": { + "sportsbook.eventResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/trends.ExploreResponse" + "$ref": "#/definitions/sportsbook.EventResponse" }, "msg": { "example": "OK", @@ -240557,14 +245568,14 @@ }, "type": "object" }, - "trends.interestByRegionResponseDoc": { + "sportsbook.featuredLeaguesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/trends.InterestByRegionResponse" + "$ref": "#/definitions/sportsbook.FeaturedLeaguesResponse" }, "msg": { "example": "OK", @@ -240573,14 +245584,14 @@ }, "type": "object" }, - "trends.interestOverTimeResponseDoc": { + "sportsbook.futuresResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/trends.InterestOverTimeResponse" + "$ref": "#/definitions/sportsbook.FuturesResponse" }, "msg": { "example": "OK", @@ -240589,14 +245600,14 @@ }, "type": "object" }, - "trends.relatedTopicsResponseDoc": { + "sportsbook.leagueEventsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/trends.RelatedTopicsResponse" + "$ref": "#/definitions/sportsbook.LeagueEventsResponse" }, "msg": { "example": "OK", @@ -240605,14 +245616,14 @@ }, "type": "object" }, - "trends.trendingResponseDoc": { + "sportsbook.leaguesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/trends.TrendingResponse" + "$ref": "#/definitions/sportsbook.LeaguesResponse" }, "msg": { "example": "OK", @@ -240621,14 +245632,14 @@ }, "type": "object" }, - "trends.trendsCategoriesResponseDoc": { + "sportsbook.liveResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/trends.TrendsCategoriesResponse" + "$ref": "#/definitions/sportsbook.LiveResponse" }, "msg": { "example": "OK", @@ -240637,14 +245648,14 @@ }, "type": "object" }, - "trends.trendsEnumsResponseDoc": { + "sportsbook.oddsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/trends.TrendsEnumsResponse" + "$ref": "#/definitions/sportsbook.OddsResponse" }, "msg": { "example": "OK", @@ -240653,14 +245664,14 @@ }, "type": "object" }, - "trends.trendsLocationsResponseDoc": { + "sportsbook.quickLinksResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/trends.TrendsLocationsResponse" + "$ref": "#/definitions/sportsbook.QuickLinksResponse" }, "msg": { "example": "OK", @@ -240669,7050 +245680,6723 @@ }, "type": "object" }, - "tripadvisor.AutocompleteResponse": { + "sportsbook.teamResponseDoc": { "properties": { - "locale": { - "description": "Locale code the suggestions were returned in, for example `en-HK`.", - "example": "en-HK", - "type": "string" - }, - "query": { - "description": "Search text that was run.", - "example": "hong kong", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "results": { - "description": "Suggested locations and places for the search text, one entry per suggestion.", - "items": { - "$ref": "#/definitions/tripadvisor.SearchItem" - }, - "type": "array" + "data": { + "$ref": "#/definitions/sportsbook.TeamDetailResponse" }, - "scope_geo_id": { - "description": "TripAdvisor geo id the suggestions were limited to. Defaults to `60763` when no scope is given.", - "example": 60763, - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "tripadvisor.EnumsResponse": { + "sportsbook.teamsResponseDoc": { "properties": { - "attraction_categories": { - "description": "Attraction category types accepted by the `type` parameter of the search endpoint.", - "example": [ - "attraction", - "tour", - "day_trip" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "attraction_category_ids": { - "additionalProperties": { - "type": "string" - }, - "description": "Map from each attraction category type to its TripAdvisor category id, for example `tour` to `c42`.", - "example": { - "day_trip": "c63", - "tour": "c42" - }, - "type": "object" - }, - "currencies": { - "description": "Currency codes accepted by the `currency` parameter, for example `HKD`.", - "example": [ - "HKD", - "USD", - "EUR" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "filter_ids": { - "description": "Filter ids accepted by the `filter_id` parameter.", - "example": [ - "class", - "ufe" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "hotel_amenities": { - "description": "Hotel amenity ids accepted by the `amenities` parameter.", - "example": [ - 9176, - 9179 - ], - "items": { - "type": "integer" - }, - "type": "array" - }, - "hotel_classes": { - "description": "Hotel star classes accepted by the `class` parameter.", - "example": [ - 1, - 2, - 3, - 4, - 5 - ], - "items": { - "type": "integer" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "languages": { - "description": "Review language codes accepted by the reviews endpoint, for example `en`.", - "example": [ - "en", - "fr", - "zh-CN" - ], - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/sportsbook.TeamsResponse" }, - "listing_types": { - "description": "Listing types accepted by the `type` parameter of the search endpoint, for example `hotel`.", - "example": [ - "hotel", - "restaurant", - "attraction" - ], + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "sportskeeda.AuthorResponse": { + "properties": { + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "locales": { - "description": "Locale codes accepted by the `locale` parameter, for example `en-HK`.", - "example": [ - "en-HK", - "en-US", - "en-GB" - ], + "biography": { "items": { "type": "string" }, "type": "array" }, - "pricing_modes": { - "description": "Pricing modes accepted by the `pricing_mode` parameter.", - "example": [ - "ALL_IN_RATE" - ], - "items": { - "type": "string" - }, - "type": "array" + "image_url": { + "type": "string" }, - "restaurant_options": { - "description": "Restaurant online-option ids accepted by the `online_options` parameter.", - "example": [ - 20693 - ], - "items": { - "type": "integer" - }, - "type": "array" + "name": { + "type": "string" }, - "restaurant_types": { - "description": "Restaurant establishment-type ids accepted by the `establishment_types` parameter.", - "example": [ - 10591 - ], - "items": { - "type": "integer" - }, - "type": "array" + "role": { + "type": "string" }, - "sorts": { - "description": "Sort orders accepted by the `sort` parameter, for example `BEST_VALUE`.", - "example": [ - "BEST_VALUE", - "POPULARITY" - ], - "items": { - "type": "string" - }, - "type": "array" + "slug": { + "type": "string" }, - "unsupported_entity_types": { - "description": "Entity types that cannot be searched, for example `airline`. Omitted when none.", - "example": [ - "airline", - "airport" - ], - "items": { - "type": "string" - }, - "type": "array" + "url": { + "type": "string" } }, "type": "object" }, - "tripadvisor.HotelItem": { + "sportskeeda.CalendarEvent": { "properties": { - "address": { - "description": "Street address of the hotel.", - "type": "string" - }, - "currency": { - "description": "Currency code of the listed price, for example `HKD`.", - "example": "HKD", - "type": "string" - }, - "id": { - "description": "TripAdvisor location id of the hotel. Use it with the place and reviews endpoints.", - "example": "113311", + "branding_logo": { "type": "string" }, - "image": { - "description": "URL of the hotel's main image.", + "branding_text": { "type": "string" }, - "latitude": { - "description": "Latitude of the hotel in decimal degrees.", - "example": 40.76174, - "type": "number" - }, - "longitude": { - "description": "Longitude of the hotel in decimal degrees.", - "example": -73.975365, - "type": "number" - }, - "parent": { - "description": "Name of the city or area the hotel is in.", - "example": "New York City", + "branding_text_color": { "type": "string" }, - "phone": { - "description": "Phone number of the hotel.", + "card_background": { "type": "string" }, - "price": { - "description": "Price shown on the listing, formatted with the currency symbol, for example `HK$7,793`.", - "example": "HK$7,793", + "card_background_color": { "type": "string" }, - "provider": { - "description": "Booking site that offers the listed price, for example `Agoda`.", - "example": "Agoda", + "description": { "type": "string" }, - "rank": { - "description": "Hotel's position in TripAdvisor's ranking for the location.", - "example": 146, + "duration_days": { "type": "integer" }, - "rank_label": { - "description": "Ranking text as TripAdvisor shows it, for example `#141 of 519 hotels in New York City`.", - "example": "#141 of 519 hotels in New York City", + "end_date": { + "example": "2026-10-17", "type": "string" }, - "rating": { - "description": "Average traveller rating out of 5.", - "example": 4.5, - "type": "number" + "image_links": { + "type": "string" }, - "review_count": { - "description": "Number of traveller reviews the hotel has.", - "example": 1517, - "type": "integer" + "invert_text_color": { + "type": "string" }, - "review_rating": { - "description": "Rating given in the review shown on the hotel listing.", - "type": "number" + "month": { + "example": "2026-09", + "type": "string" }, - "review_snippet": { - "description": "Excerpt of a review shown on the hotel listing.", + "month_label": { + "example": "September 2026", "type": "string" }, - "review_title": { - "description": "Title of the review shown on the hotel listing.", + "name": { "type": "string" }, - "star_rating": { - "description": "Official star class of the hotel, for example `5`.", - "example": 5, - "type": "number" + "open_link": { + "type": "string" }, - "tags": { - "description": "Short labels TripAdvisor shows on the hotel listing.", - "items": { - "type": "string" - }, - "type": "array" + "sport": { + "type": "string" }, - "title": { - "description": "Hotel name as shown on the listing.", - "example": "The Peninsula New York", + "start_date": { + "example": "2026-09-27", "type": "string" }, - "type": { - "description": "Listing type, for example `hotel`.", - "example": "hotel", + "venue": { "type": "string" }, - "url": { - "description": "TripAdvisor page URL of the hotel.", + "videos": { "type": "string" } }, "type": "object" }, - "tripadvisor.HotelListResponse": { + "sportskeeda.CollegeBasketballConference": { "properties": { - "currency": { - "description": "Currency code the prices are shown in, for example `HKD`.", - "example": "HKD", + "abbr": { "type": "string" }, - "full_matches": { - "description": "Number of hotels TripAdvisor counts as full matches for the filters. Omitted when TripAdvisor gives no count.", - "example": 519, + "id": { "type": "integer" }, - "geo_id": { - "description": "TripAdvisor geo id of the location the hotels are listed for.", - "example": 294217, - "type": "integer" + "name": { + "type": "string" }, - "limit": { - "description": "Maximum number of hotels returned on this page.", - "example": 30, + "slug": { + "type": "string" + } + }, + "type": "object" + }, + "sportskeeda.CollegeBasketballDivision": { + "properties": { + "id": { "type": "integer" }, - "offset": { - "description": "Result offset of this page.", - "example": 0, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "sportskeeda.CollegeBasketballLeader": { + "properties": { + "player_id": { "type": "integer" }, - "results": { - "description": "Hotels on this page, one entry per hotel.", - "items": { - "$ref": "#/definitions/tripadvisor.HotelItem" - }, - "type": "array" + "player_name": { + "type": "string" }, - "sort": { - "description": "Sort order that was applied, for example `BEST_VALUE`.", - "example": "BEST_VALUE", + "player_slug": { "type": "string" }, - "total": { - "description": "Total number of hotels TripAdvisor lists for the location and filters. Omitted when TripAdvisor gives no total.", - "example": 519, + "value": { "type": "integer" } }, "type": "object" }, - "tripadvisor.NestedSearchItem": { + "sportskeeda.CollegeBasketballLocation": { "properties": { - "query": { - "description": "Search text the shortcut runs, for example `hong kong hotels`.", - "example": "hong kong hotels", - "type": "string" - }, - "title": { - "description": "Label of the shortcut, for example `Hotels`.", - "example": "Hotels", - "type": "string" - }, - "type": { - "description": "Kind of search the shortcut opens, for example `hotel_search`.", - "example": "hotel_search", + "abbreviation": { "type": "string" }, - "url": { - "description": "TripAdvisor page URL of the shortcut.", - "example": "https://en.tripadvisor.com.hk/Hotels-g294217-Hong_Kong-Hotels.html", + "name": { "type": "string" } }, "type": "object" }, - "tripadvisor.PlaceAddressParts": { + "sportskeeda.CollegeBasketballScheduleGame": { "properties": { - "country": { - "description": "Country name of the place's address.", - "type": "string" + "away_team": { + "$ref": "#/definitions/sportskeeda.CollegeBasketballTeam" }, - "locality": { - "description": "City or town.", + "end_date": { "type": "string" }, - "postal_code": { - "description": "Postal or ZIP code.", - "type": "string" + "event_id": { + "type": "integer" }, - "region": { - "description": "State, province or region.", + "event_type_id": { + "type": "integer" + }, + "has_score": { + "type": "boolean" + }, + "home_team": { + "$ref": "#/definitions/sportskeeda.CollegeBasketballTeam" + }, + "is_tba": { + "type": "boolean" + }, + "loser_high": { + "$ref": "#/definitions/sportskeeda.CollegeBasketballLeader" + }, + "start_date": { "type": "string" }, - "street": { - "description": "Street address line.", + "status": { "type": "string" + }, + "tv_stations": { + "items": { + "type": "string" + }, + "type": "array" + }, + "venue": { + "$ref": "#/definitions/sportskeeda.CollegeBasketballVenue" + }, + "winner_high": { + "$ref": "#/definitions/sportskeeda.CollegeBasketballLeader" } }, "type": "object" }, - "tripadvisor.PlaceImage": { + "sportskeeda.CollegeBasketballScheduleOptionsResponse": { "properties": { - "caption": { - "description": "Caption of the image.", + "conference_filter_supported": { + "type": "boolean" + }, + "date": { "type": "string" }, - "height": { - "description": "Height of the image in pixels.", - "example": 768, - "type": "integer" + "date_end": { + "type": "string" }, - "url": { - "description": "URL of the image.", + "date_start": { "type": "string" }, - "width": { - "description": "Width of the image in pixels.", - "example": 1024, + "season": { "type": "integer" + }, + "season_name": { + "type": "string" + }, + "seasons": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "slug": { + "type": "string" } }, "type": "object" }, - "tripadvisor.PlaceItem": { + "sportskeeda.CollegeBasketballScheduleResponse": { "properties": { - "address": { - "description": "Street address of the place.", - "type": "string" - }, - "booking_url": { - "description": "URL where TripAdvisor lets you book or reserve the place.", + "date": { "type": "string" }, - "categories": { - "description": "Categories TripAdvisor lists for the place.", + "games": { "items": { - "type": "string" + "$ref": "#/definitions/sportskeeda.CollegeBasketballScheduleGame" }, "type": "array" }, - "cuisines": { - "description": "Cuisines a restaurant serves.", - "items": { - "type": "string" - }, - "type": "array" + "season": { + "type": "integer" }, - "currency": { - "description": "Currency code of the listed price, for example `HKD`.", - "example": "HKD", + "season_name": { "type": "string" }, - "id": { - "description": "TripAdvisor location id of the place. Use it with the place and reviews endpoints.", - "example": "5493196", + "status": { + "enum": [ + "ok", + "no_games" + ], "type": "string" }, - "image": { - "description": "URL of the place's main image.", + "updated_at": { + "type": "string" + } + }, + "type": "object" + }, + "sportskeeda.CollegeBasketballTeam": { + "properties": { + "abbr": { "type": "string" }, - "latitude": { - "description": "Latitude of the place in decimal degrees.", - "example": 22.28331, - "type": "number" - }, - "longitude": { - "description": "Longitude of the place in decimal degrees.", - "example": 114.15874, - "type": "number" + "conference": { + "$ref": "#/definitions/sportskeeda.CollegeBasketballConference" }, - "parent": { - "description": "Name of the city or area the place is in.", - "example": "Hong Kong", - "type": "string" + "division": { + "$ref": "#/definitions/sportskeeda.CollegeBasketballDivision" }, - "phone": { - "description": "Phone number of the place.", - "type": "string" + "is_winner": { + "type": "boolean" }, - "price": { - "description": "Price shown on the listing, formatted with the currency symbol, for example `HK$7,793`.", - "example": "HK$7,793", + "location": { "type": "string" }, - "price_level": { - "description": "Price band as TripAdvisor shows it, for example `$$ - $$$`.", - "example": "$$ - $$$", + "location_type": { "type": "string" }, - "provider": { - "description": "Booking or reservation provider shown on the listing, for example `Agoda`.", - "example": "Agoda", + "nickname": { "type": "string" }, - "rank": { - "description": "Place's position in TripAdvisor's ranking for the location.", - "example": 12, + "score": { "type": "integer" }, - "rank_label": { - "description": "Ranking text as TripAdvisor shows it, for example `#12 of 12000 restaurants in Hong Kong`.", - "example": "#12 of 12000 restaurants in Hong Kong", - "type": "string" - }, - "rating": { - "description": "Average traveller rating out of 5.", - "example": 4.5, - "type": "number" - }, - "review_count": { - "description": "Number of traveller reviews the place has.", - "example": 1217, + "team_id": { "type": "integer" }, - "review_rating": { - "description": "Rating given in the review shown on the listing.", - "type": "number" - }, - "review_snippet": { - "description": "Excerpt of a review shown on the listing.", - "type": "string" - }, - "review_title": { - "description": "Title of the review shown on the listing.", - "type": "string" - }, - "star_rating": { - "description": "Official star class of the place, for example `5`. Shown for hotels.", - "example": 5, - "type": "number" - }, - "tags": { - "description": "Short labels TripAdvisor shows on the listing.", - "items": { - "type": "string" - }, - "type": "array" - }, - "title": { - "description": "Place name as shown on the listing.", - "example": "Hong Kong Asian Cuisine", - "type": "string" - }, - "type": { - "description": "Listing type, for example `restaurant`.", - "example": "restaurant", + "team_name": { "type": "string" }, - "url": { - "description": "TripAdvisor page URL of the place.", + "team_slug": { "type": "string" } }, "type": "object" }, - "tripadvisor.PlaceLink": { + "sportskeeda.CollegeBasketballVenue": { "properties": { - "label": { - "description": "Link label, for example `Official website`.", - "example": "Official website", + "city": { "type": "string" }, - "type": { - "description": "Kind of link, for example `website` or `canonical`.", - "example": "website", - "type": "string" + "country": { + "$ref": "#/definitions/sportskeeda.CollegeBasketballLocation" }, - "url": { - "description": "Address of the link.", + "name": { "type": "string" + }, + "state": { + "$ref": "#/definitions/sportskeeda.CollegeBasketballLocation" } }, "type": "object" }, - "tripadvisor.PlaceResponse": { + "sportskeeda.CricketCommentaryResponse": { "properties": { - "address": { - "description": "Full address of the place as one line.", - "type": "string" - }, - "address_parts": { - "allOf": [ - { - "$ref": "#/definitions/tripadvisor.PlaceAddressParts" - } - ], - "description": "Address split into street, locality, region, postal code and country." - }, - "amenities": { - "description": "Amenities TripAdvisor lists for the place.", + "commentary": { "items": { - "type": "string" + "additionalProperties": true, + "type": "object" }, "type": "array" }, - "awards": { - "description": "Awards shown on the place's page, for example `Travelers' Choice`.", - "items": { - "type": "string" - }, - "type": "array" + "count": { + "type": "integer" }, - "breadcrumbs": { - "description": "Locations above the place, from the widest region to the city, for example `Asia`, `China`, `Hong Kong`.", - "items": { - "type": "string" - }, - "type": "array" + "cursor": { + "type": "string" }, - "canonical_url": { - "description": "Canonical TripAdvisor page URL of the place.", + "language": { "type": "string" }, - "categories": { - "description": "Categories TripAdvisor lists for the place.", + "slug": { + "type": "string" + } + }, + "type": "object" + }, + "sportskeeda.CricketMatchResponse": { + "properties": { + "commentary": { "items": { - "type": "string" + "additionalProperties": true, + "type": "object" }, "type": "array" }, - "cuisines": { - "description": "Cuisines a restaurant serves.", - "items": { - "type": "string" - }, - "type": "array" + "competition_id": {}, + "datetime": { + "type": "integer" }, - "description": { - "description": "Longer description of the place.", + "day": { "type": "string" }, - "features": { - "description": "Features TripAdvisor lists for the place.", - "items": { - "type": "string" - }, - "type": "array" + "game_format": { + "type": "integer" }, - "geo_id": { - "description": "TripAdvisor geo id of the location the place is in.", - "example": "60763", + "game_type": { "type": "string" }, - "id": { - "description": "TripAdvisor location id of the place.", - "example": "5493196", - "type": "string" + "in_play": { + "type": "boolean" }, - "image": { - "description": "URL of the place's main image.", + "info": { "type": "string" }, - "images": { - "description": "Photos of the place, one entry per image.", + "innings": { "items": { - "$ref": "#/definitions/tripadvisor.PlaceImage" + "additionalProperties": true, + "type": "object" }, "type": "array" }, - "latitude": { - "description": "Latitude of the place in decimal degrees.", - "example": 22.28331, - "type": "number" + "match_id": { + "type": "string" }, - "links": { - "description": "Useful links for the place, such as its TripAdvisor page and official website.", - "items": { - "$ref": "#/definitions/tripadvisor.PlaceLink" - }, - "type": "array" + "match_number": {}, + "match_number_with_format": { + "type": "string" }, - "longitude": { - "description": "Longitude of the place in decimal degrees.", - "example": 114.15874, - "type": "number" + "match_status": { + "type": "string" }, - "opening_hours": { - "description": "Opening hours, one entry per line, for example `Monday 10:00 - 22:00`.", + "now_batting": { + "additionalProperties": true, + "type": "object" + }, + "now_bowling": { + "additionalProperties": true, + "type": "object" + }, + "score_strip": { "items": { - "type": "string" + "additionalProperties": true, + "type": "object" }, "type": "array" }, - "phone": { - "description": "Phone number of the place.", + "series": { "type": "string" }, - "price_level": { - "description": "Price band as TripAdvisor shows it, for example `$$ - $$$`.", - "example": "$$ - $$$", + "series_keeda_slug": { "type": "string" }, - "price_range": { - "description": "Price range as TripAdvisor shows it, for example `$$ - $$$`.", - "example": "$$ - $$$", + "session": { "type": "string" }, - "rank": { - "description": "Place's position in TripAdvisor's ranking for its location.", - "example": 1, - "type": "integer" - }, - "rank_label": { - "description": "Ranking text as TripAdvisor shows it, for example `#1 of 1,531 things to do in Hong Kong`.", - "example": "#1 of 1,531 things to do in Hong Kong", + "short_title": { "type": "string" }, - "rating": { - "description": "Average traveller rating out of 5.", - "type": "number" - }, - "reviews": { - "description": "Number of traveller reviews the place has.", - "type": "integer" - }, - "summary": { - "description": "Short summary of the place.", + "slug": { "type": "string" }, - "tags": { - "description": "Short labels TripAdvisor shows for the place.", + "squad": { "items": { - "type": "string" + "additionalProperties": true, + "type": "object" }, "type": "array" }, "title": { - "description": "Place name as shown on TripAdvisor.", "type": "string" }, - "type": { - "description": "Kind of page, such as `attraction`, `geo` for a destination or `attraction_product` for a bookable tour.", + "toss_decision": { "type": "string" }, - "url": { - "description": "TripAdvisor page URL of the place.", + "toss_won_by": { "type": "string" }, - "website_url": { - "description": "URL of the place's own website.", + "updated_at": { + "type": "integer" + }, + "venue": { "type": "string" } }, "type": "object" }, - "tripadvisor.ReviewItem": { + "sportskeeda.DataTable": { "properties": { - "author": { - "description": "Reviewer's display name.", - "type": "string" - }, - "author_avatar": { - "description": "URL of the reviewer's profile picture.", - "type": "string" - }, - "author_hometown": { - "description": "Reviewer's hometown as shown on their profile.", - "type": "string" - }, - "author_id": { - "description": "TripAdvisor id of the reviewer.", - "type": "string" - }, - "author_url": { - "description": "TripAdvisor profile URL of the reviewer.", - "type": "string" - }, - "created_date": { - "description": "Date the review was written, for example `2026-05-01`.", - "type": "string" - }, - "date": { - "description": "Date the review was published, for example `2026-05-01`.", - "type": "string" - }, - "helpful": { - "description": "Number of helpful votes the review received.", - "type": "integer" - }, - "id": { - "description": "TripAdvisor review id.", - "type": "string" - }, - "language": { - "description": "Language code of the review text returned.", - "type": "string" - }, - "original_language": { - "description": "Language code the review was originally written in.", - "type": "string" - }, - "photos": { - "description": "URLs of photos attached to the review.", + "columns": { "items": { "type": "string" }, "type": "array" }, - "rating": { - "description": "Rating the reviewer gave, out of 5.", - "type": "number" - }, - "stay_date": { - "description": "Date of the reviewer's visit or stay, as TripAdvisor gives it.", + "name": { "type": "string" }, - "text": { - "description": "Full text of the review.", + "rows": { + "items": { + "items": { + "$ref": "#/definitions/sportskeeda.TableCell" + }, + "type": "array" + }, + "type": "array" + } + }, + "type": "object" + }, + "sportskeeda.DepthChartPosition": { + "properties": { + "name": { "type": "string" }, - "title": { - "description": "Title the reviewer gave the review.", + "players": { + "items": { + "$ref": "#/definitions/sportskeeda.PageView" + }, + "type": "array" + } + }, + "type": "object" + }, + "sportskeeda.DepthChartResponse": { + "properties": { + "slug": { "type": "string" }, - "trip_type": { - "description": "Type of trip the reviewer reported, as TripAdvisor labels it.", - "type": "string" + "teams": { + "items": { + "$ref": "#/definitions/sportskeeda.DepthChartTeam" + }, + "type": "array" }, - "url": { - "description": "TripAdvisor page URL of the review.", + "title": { "type": "string" } }, "type": "object" }, - "tripadvisor.ReviewsResponse": { + "sportskeeda.DepthChartTeam": { "properties": { - "id": { - "description": "TripAdvisor location id the reviews belong to.", - "example": "5493196", - "type": "string" - }, - "language": { - "description": "Review language code that was applied, for example `en`.", - "example": "en", + "name": { "type": "string" }, - "limit": { - "description": "Maximum number of reviews returned per page.", - "example": 20, - "type": "integer" - }, - "page": { - "description": "Page number returned.", - "example": 1, - "type": "integer" - }, - "reviews": { - "description": "Reviews on this page, one entry per review.", + "positions": { "items": { - "$ref": "#/definitions/tripadvisor.ReviewItem" + "$ref": "#/definitions/sportskeeda.DepthChartPosition" }, "type": "array" }, - "total": { - "description": "Total number of reviews matching the filters.", - "example": 25770, - "type": "integer" - }, - "url": { - "description": "TripAdvisor page URL of the place the reviews belong to.", + "slug": { "type": "string" } }, "type": "object" }, - "tripadvisor.SearchItem": { + "sportskeeda.DraftPick": { "properties": { - "document_id": { - "description": "TripAdvisor document id of the suggestion, for example `loc;294217;g294217`.", - "example": "loc;294217;g294217", + "college": { "type": "string" }, - "id": { - "description": "TripAdvisor id of the suggested place or location.", - "example": "294217", + "name": { "type": "string" }, - "image": { - "description": "URL of an image for the suggestion.", + "overall_pick": { "type": "string" }, - "latitude": { - "description": "Latitude of the suggestion in decimal degrees.", - "example": 22.28331, - "type": "number" - }, - "longitude": { - "description": "Longitude of the suggestion in decimal degrees.", - "example": 114.15874, - "type": "number" - }, - "nested_results": { - "description": "Search shortcuts TripAdvisor offers under the suggestion, such as hotels or things to do in that location.", - "items": { - "$ref": "#/definitions/tripadvisor.NestedSearchItem" - }, - "type": "array" - }, - "parent": { - "description": "Parent locations of the suggestion, for example `China, Asia`.", - "example": "China, Asia", + "position": { "type": "string" }, - "title": { - "description": "Name of the suggested place or location.", - "example": "Hong Kong", + "round": { "type": "string" }, - "type": { - "description": "Kind of suggestion, for example `geo` for a destination.", - "example": "geo", + "round_pick": { "type": "string" }, - "url": { - "description": "TripAdvisor page URL of the suggestion.", - "example": "https://en.tripadvisor.com.hk/Tourism-g294217-Hong_Kong-Vacations.html", + "team_code": { "type": "string" + }, + "year": { + "type": "integer" } }, "type": "object" }, - "tripadvisor.SearchResponse": { + "sportskeeda.DraftPicksOptionsResponse": { "properties": { - "currency": { - "description": "Currency code the prices are shown in, for example `HKD`.", - "example": "HKD", - "type": "string" - }, - "geo_id": { - "description": "TripAdvisor geo id of the location the places are listed for.", - "example": 294217, - "type": "integer" - }, - "limit": { - "description": "Maximum number of places returned on this page.", - "example": 30, - "type": "integer" - }, - "locale": { - "description": "Locale code the results were returned in, for example `en-HK`.", - "example": "en-HK", - "type": "string" - }, - "offset": { - "description": "Result offset of this page.", - "example": 0, - "type": "integer" + "positions": { + "items": { + "type": "string" + }, + "type": "array" }, - "results": { - "description": "Places on this page, one entry per place.", + "rounds": { "items": { - "$ref": "#/definitions/tripadvisor.PlaceItem" + "type": "string" }, "type": "array" }, - "sort": { - "description": "Sort order that was applied, for example `POPULARITY`.", - "example": "POPULARITY", + "slug": { "type": "string" }, - "source": { - "description": "Label for the kind of TripAdvisor listing the results came from.", - "example": "html_listing", + "team": { "type": "string" }, - "type": { - "description": "Listing type that was searched, for example `restaurant`.", - "example": "restaurant", - "type": "string" + "total": { + "type": "integer" }, - "unsupported_types": { - "description": "Entity types that this search does not cover, for example `airline`. Omitted when none.", - "example": [ - "vacation_rental", - "tour", - "airline" - ], + "years": { "items": { - "type": "string" + "type": "integer" }, "type": "array" } }, "type": "object" }, - "tripadvisor.tripadvisorAutocompleteResponseDoc": { + "sportskeeda.DraftPicksResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "has_more": { + "type": "boolean" }, - "data": { - "$ref": "#/definitions/tripadvisor.AutocompleteResponse" + "page": { + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "tripadvisor.tripadvisorEnumsResponseDoc": { - "properties": { - "code": { - "example": 200, + "per_page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/tripadvisor.EnumsResponse" + "picks": { + "items": { + "$ref": "#/definitions/sportskeeda.DraftPick" + }, + "type": "array" }, - "msg": { - "example": "OK", + "position": { "type": "string" - } - }, - "type": "object" - }, - "tripadvisor.tripadvisorHotelsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/tripadvisor.HotelListResponse" + "q": { + "type": "string" }, - "msg": { - "example": "OK", + "round": { "type": "string" - } - }, - "type": "object" - }, - "tripadvisor.tripadvisorReviewsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/tripadvisor.ReviewsResponse" + "slug": { + "type": "string" }, - "msg": { - "example": "OK", + "team": { "type": "string" + }, + "total": { + "type": "integer" + }, + "year": { + "type": "integer" } }, "type": "object" }, - "tripadvisor.tripadvisorSearchResponseDoc": { + "sportskeeda.EventCalendarOptionsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/tripadvisor.SearchResponse" - }, - "msg": { - "example": "OK", - "type": "string" + "regions": { + "items": { + "$ref": "#/definitions/sportskeeda.EventCalendarRegionOptions" + }, + "type": "array" } }, "type": "object" }, - "tripcom.DetailResponse": { + "sportskeeda.EventCalendarRegionOptions": { "properties": { - "city_name": { - "example": "Bang Sao Thong", - "type": "string" - }, - "country_name": { - "example": "Thailand", - "type": "string" - }, - "description": { - "type": "string" - }, - "highlights": { + "months": { "example": [ - "Free airport transfers", - "Great views" + "2026-09", + "2026-10", + "2026-11", + "2026-12" ], "items": { "type": "string" }, "type": "array" }, - "hotel_id": { - "example": 39371462, - "type": "integer" - }, - "image_count": { - "example": 10, - "type": "integer" + "region": { + "enum": [ + "us", + "india" + ], + "type": "string" }, - "images": { + "sports": { "items": { "type": "string" }, "type": "array" - }, - "local_name": { - "type": "string" - }, - "location": { - "$ref": "#/definitions/tripcom.Location" - }, - "name": { - "example": "Divalux Resort and Spa Bangkok, Suvarnabhumi Airport-Free Shuttle", - "type": "string" - }, - "open_year": { - "example": "2019", + } + }, + "type": "object" + }, + "sportskeeda.EventCalendarResponse": { + "properties": { + "end_date": { "type": "string" }, - "policy": { - "$ref": "#/definitions/tripcom.Policy" + "events": { + "items": { + "$ref": "#/definitions/sportskeeda.CalendarEvent" + }, + "type": "array" }, - "popular_facilities": { - "example": [ - "Outdoor swimming pool", - "Spa", - "Massage room" - ], + "months": { "items": { "type": "string" }, "type": "array" }, - "province_name": { - "example": "Samut Prakan Province", + "region": { + "enum": [ + "us", + "india" + ], "type": "string" }, - "rating": { - "$ref": "#/definitions/tripcom.Rating" + "sport": { + "type": "string" }, - "source_url": { - "example": "https://www.trip.com/hotels/bang-sao-thong-district-hotel-detail-39371462/divalux-resort-and-spa-bangkok-suvarnabhumi-airport-free-shuttle/", + "start_date": { "type": "string" }, - "star_rating": { - "example": 5, + "total": { "type": "integer" } }, "type": "object" }, - "tripcom.HotelSummary": { + "sportskeeda.FeedItem": { "properties": { - "description": { - "example": "The hotel has a relaxing wellness atmosphere...", + "age": { "type": "string" }, - "hotel_id": { - "example": 39371462, - "type": "integer" - }, - "image_url": { - "example": "https://ak-d.tripcdn.com/images/0585b12000sq6ih4c6345.jpg", + "category": { "type": "string" }, - "location": { - "example": "88 Moo3, Sriwaree Road, Sisa Chokhe Noi, Bang Sao Thong District, Srisa Chorakhe Noi, Bang Sao Thong", + "image": { "type": "string" }, - "name": { - "example": "Divalux Resort and Spa Bangkok, Suvarnabhumi Airport-Free Shuttle", + "section": { "type": "string" }, - "price": { - "$ref": "#/definitions/tripcom.Price" - }, - "rating_score": { - "example": 8.7, - "type": "number" - }, - "review_count": { - "example": 872, - "type": "integer" + "slug": { + "type": "string" }, - "star_rating": { - "example": 5, - "type": "integer" + "title": { + "type": "string" }, "url": { - "example": "https://www.trip.com/hotels/bang-sao-thong-district-hotel-detail-39371462/divalux-resort-and-spa-bangkok-suvarnabhumi-airport-free-shuttle/", "type": "string" } }, "type": "object" }, - "tripcom.Location": { + "sportskeeda.FeedResponse": { "properties": { - "address": { - "example": "88 Moo3, Sriwaree Road, Sisa Chokhe Noi, Bang Sao Thong District, Samut Prakan Province, 10570, Thailand", - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/sportskeeda.FeedItem" + }, + "type": "array" }, - "latitude": { - "example": 13.69316, - "type": "number" + "next_page": { + "type": "integer" }, - "longitude": { - "example": 100.793475, - "type": "number" + "page": { + "type": "integer" }, - "traffic_description": { - "example": "15 km from Pra Chom Klao, approx. 27 mins by car", + "slug": { "type": "string" }, - "zone_name": { - "example": "Suvarnabhumi Airport", + "title": { "type": "string" } }, "type": "object" }, - "tripcom.Policy": { + "sportskeeda.FootballDataResponse": { "properties": { - "check_in_out": { - "example": [ - "Check-in: After 14:00", - "Check-out: Before 12:00", - "Front desk hours: 24/7" - ], + "event": { + "type": "string" + }, + "event_name": { + "type": "string" + }, + "matchday": { + "type": "string" + }, + "matchday_name": { + "type": "string" + }, + "matches": { "items": { - "type": "string" + "$ref": "#/definitions/sportskeeda.FootballFixture" }, "type": "array" }, - "child": { - "example": [ - "Children of all ages are welcome at this property." - ], + "next_matchday": { + "type": "string" + }, + "previous_matchday": { + "type": "string" + }, + "standings": { "items": { - "type": "string" + "$ref": "#/definitions/sportskeeda.FootballStanding" }, "type": "array" + }, + "status": { + "enum": [ + "ok", + "no_matches" + ], + "type": "string" } }, "type": "object" }, - "tripcom.Price": { + "sportskeeda.FootballEvent": { "properties": { - "amount": { - "example": 38, - "type": "number" - }, - "currency": { - "example": "US$", + "logo": { "type": "string" }, - "raw": { - "example": "US$38", + "name": { "type": "string" }, - "unit": { - "example": "1 night", + "slug": { "type": "string" } }, "type": "object" }, - "tripcom.Rating": { + "sportskeeda.FootballFixture": { "properties": { - "amenities_score": { - "example": 8.8, - "type": "number" + "away": { + "type": "string" }, - "cleanliness_score": { - "example": 8.7, - "type": "number" + "away_score": { + "type": "string" }, - "location_score": { - "example": 8.3, - "type": "number" + "away_slug": { + "type": "string" }, - "recommend": { - "example": "79% Recommended", + "datetime": { "type": "string" }, - "score": { - "example": 8.6, - "type": "number" + "home": { + "type": "string" }, - "score_description": { - "example": "Very good", + "home_score": { "type": "string" }, - "score_max": { - "example": 10, - "type": "number" + "home_slug": { + "type": "string" }, - "service_score": { - "example": 8.7, - "type": "number" + "id": { + "type": "string" }, - "total_comment": { - "example": 875, + "postponed": { + "type": "boolean" + }, + "result": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "type": "object" + }, + "sportskeeda.FootballMatchday": { + "properties": { + "end": { + "type": "string" + }, + "match_count": { "type": "integer" + }, + "name": { + "type": "string" + }, + "selected": { + "type": "boolean" + }, + "slug": { + "type": "string" + }, + "start": { + "type": "string" } }, "type": "object" }, - "tripcom.SearchResponse": { + "sportskeeda.FootballOptionsResponse": { "properties": { - "city_id": { - "example": "359", + "event": { "type": "string" }, - "city_slug": { - "example": "bangkok", + "events": { + "items": { + "$ref": "#/definitions/sportskeeda.FootballEvent" + }, + "type": "array" + }, + "matchdays": { + "items": { + "$ref": "#/definitions/sportskeeda.FootballMatchday" + }, + "type": "array" + } + }, + "type": "object" + }, + "sportskeeda.FootballStanding": { + "properties": { + "draws": { + "type": "integer" + }, + "goal_difference": { "type": "string" }, - "count": { - "example": 9, + "goals_against": { + "type": "string" + }, + "goals_for": { + "type": "string" + }, + "group": { + "type": "string" + }, + "league": { + "type": "string" + }, + "losses": { "type": "integer" }, - "hotels": { + "played": { + "type": "integer" + }, + "points": { + "type": "integer" + }, + "position": { + "type": "integer" + }, + "qualification": { + "type": "string" + }, + "team": { + "type": "string" + }, + "team_code": { + "type": "string" + }, + "team_slug": { + "type": "string" + }, + "wins": { + "type": "integer" + } + }, + "type": "object" + }, + "sportskeeda.GuessingGameClue": { + "properties": { + "image": { + "type": "string" + }, + "order": { + "type": "integer" + }, + "text": { + "type": "string" + } + }, + "type": "object" + }, + "sportskeeda.GuessingGameDataResponse": { + "properties": { + "date": { + "type": "string" + }, + "game_name": { + "type": "string" + }, + "game_slug": { + "type": "string" + }, + "instances": { "items": { - "$ref": "#/definitions/tripcom.HotelSummary" + "$ref": "#/definitions/sportskeeda.GuessingGameInstance" }, "type": "array" }, - "source_url": { - "example": "https://www.trip.com/hotels/bangkok-hotels-list-359/", + "slug": { "type": "string" } }, "type": "object" }, - "tripcom.searchResponseDoc": { + "sportskeeda.GuessingGameEntitiesResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "entities": { + "items": { + "$ref": "#/definitions/sportskeeda.GuessingGameEntity" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/tripcom.SearchResponse" + "game_slug": { + "type": "string" }, - "msg": { - "example": "OK", + "slug": { "type": "string" } }, "type": "object" }, - "trustmrr.AcquireListing": { + "sportskeeda.GuessingGameEntity": { "properties": { - "asking_price": { - "type": "number" + "age_at_death": { + "type": "integer" }, - "category": { - "example": "SaaS", + "alias1": { "type": "string" }, - "description": { + "brand": { "type": "string" }, - "first_listed_for_sale_at": { + "conference": { "type": "string" }, - "founded_date": { + "date_of_birth": { "type": "string" }, - "growth_30d": { - "type": "number" + "dead": { + "type": "string" }, - "icon": { + "division": { "type": "string" }, - "listing_tier": { + "experience": { "type": "string" }, - "multiple": { - "type": "number" + "gender": { + "type": "string" }, - "name": { - "example": "Ploxto", + "hall_of_fame": { "type": "string" }, - "offer_count": { + "height_in_inches": { "type": "integer" }, - "payment_provider": { + "id": { "type": "string" }, - "profit_margin_last_30_days": { - "type": "number" - }, - "revenue_last_30_days": { - "type": "number" + "identifier": { + "type": "string" }, - "slug": { - "example": "ploxto", + "name": { "type": "string" }, - "stealth_mode": { - "type": "boolean" + "position": { + "type": "string" }, - "url": { - "example": "https://trustmrr.com/startup/ploxto", + "team": { "type": "string" + }, + "touchdowns": { + "type": "integer" + }, + "uniform": { + "type": "integer" + }, + "wrestlemania_appearances": { + "type": "integer" } }, "type": "object" }, - "trustmrr.AcquireResponse": { + "sportskeeda.GuessingGameInstance": { "properties": { - "count": { - "type": "integer" - }, - "startups": { + "clues": { "items": { - "$ref": "#/definitions/trustmrr.AcquireListing" + "$ref": "#/definitions/sportskeeda.GuessingGameClue" }, "type": "array" + }, + "date": { + "type": "string" + }, + "id": { + "type": "string" + }, + "original_image": { + "type": "string" } }, "type": "object" }, - "trustmrr.AskingPricePoint": { + "sportskeeda.GuessingGameOption": { "properties": { - "created_at": { - "description": "Time the asking price was set, in ISO 8601.", + "game_slug": { "type": "string" }, - "price": { - "description": "Asking price recorded at that time.", - "type": "number" + "name": { + "type": "string" + }, + "slug": { + "type": "string" } }, "type": "object" }, - "trustmrr.CategoriesResponse": { + "sportskeeda.GuessingGamesResponse": { "properties": { - "categories": { - "description": "TrustMRR startup categories, one item per category.", + "games": { "items": { - "$ref": "#/definitions/trustmrr.Category" + "$ref": "#/definitions/sportskeeda.GuessingGameOption" }, "type": "array" - }, - "count": { - "description": "Number of categories returned.", - "example": 31, - "type": "integer" } }, "type": "object" }, - "trustmrr.Category": { + "sportskeeda.NBAQueriesResponse": { "properties": { - "description": { - "description": "Short description of the category.", - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/sportskeeda.NBAQueryCategory" + }, + "type": "array" }, - "icon": { - "description": "Name of the icon TrustMRR uses for the category, for example `Sparkles`.", - "example": "Sparkles", + "category": { + "enum": [ + "player-stat", + "player-vs-team" + ], "type": "string" }, - "keywords": { - "description": "Keywords associated with the category.", + "items": { "items": { - "type": "string" + "$ref": "#/definitions/sportskeeda.NBAQueryItem" }, "type": "array" }, - "label": { - "description": "Full category name, for example `Artificial Intelligence`.", - "example": "Artificial Intelligence", - "type": "string" - }, - "label_short": { - "description": "Short category name, for example `AI`.", - "example": "AI", - "type": "string" + "limit": { + "type": "integer" }, - "slug": { - "description": "URL slug of the category. Use it with the category endpoint.", - "example": "ai", - "type": "string" + "offset": { + "type": "integer" }, - "url": { - "description": "Link to the category page on TrustMRR.", - "example": "https://trustmrr.com/category/ai", - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "trustmrr.CategoryResponse": { + "sportskeeda.NBAQueryCategory": { "properties": { "count": { - "description": "Number of startups returned.", "type": "integer" }, - "slug": { - "description": "URL slug of the category that was requested.", - "example": "saas", + "id": { + "enum": [ + "player-stat", + "player-vs-team" + ], "type": "string" }, - "startups": { - "description": "Startups listed in the category, one item per startup.", - "items": { - "$ref": "#/definitions/trustmrr.CategoryStartup" - }, - "type": "array" - }, - "url": { - "description": "Link to the category page on TrustMRR.", - "example": "https://trustmrr.com/category/saas", + "name": { "type": "string" } }, "type": "object" }, - "trustmrr.CategoryStartup": { + "sportskeeda.NBAQueryItem": { "properties": { - "current_last_30_days_revenue": { - "description": "Verified revenue over the last 30 days, in US dollars.", - "type": "number" - }, - "current_mrr": { - "description": "Verified monthly recurring revenue, in US dollars.", - "type": "number" - }, - "current_total_revenue": { - "description": "Verified total revenue to date, in US dollars.", - "type": "number" + "category": { + "enum": [ + "player-stat", + "player-vs-team" + ], + "type": "string" }, - "description": { - "description": "Startup description as shown on TrustMRR.", + "slug": { "type": "string" }, - "icon": { - "description": "URL of the startup's icon image.", + "subject": { "type": "string" }, - "is_merchant_of_record": { - "description": "`true` when the startup is flagged as the merchant of record for its sales.", - "type": "boolean" + "title": { + "type": "string" + } + }, + "type": "object" + }, + "sportskeeda.NavigationGroup": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/sportskeeda.SectionLink" + }, + "type": "array" }, "name": { - "description": "Startup name as shown on TrustMRR.", - "example": "Hidden Business", "type": "string" }, - "on_sale": { - "description": "`true` when the startup is currently listed for sale.", - "type": "boolean" - }, "slug": { - "description": "URL slug of the startup on TrustMRR. Use it with the startup endpoint.", - "example": "hidden-business-3", "type": "string" }, "url": { - "description": "Link to the startup's page on TrustMRR.", - "example": "https://trustmrr.com/startup/hidden-business-3", "type": "string" } }, "type": "object" }, - "trustmrr.LeaderboardEntry": { + "sportskeeda.PageFilter": { "properties": { - "current_last_30_days_revenue": { - "description": "Verified revenue over the last 30 days, in US dollars.", - "type": "number" - }, - "current_mrr": { - "description": "Verified monthly recurring revenue, in US dollars.", - "example": 3569654.22, - "type": "number" - }, - "current_total_revenue": { - "description": "Verified total revenue to date, in US dollars.", - "example": 76627685.07, - "type": "number" - }, - "description": { - "description": "Startup description as shown on TrustMRR.", + "label": { "type": "string" }, - "growth_30d": { - "description": "Growth over the last 30 days, in percent.", - "type": "number" - }, - "growth_mrr_30d": { - "description": "Growth in monthly recurring revenue over the last 30 days, in percent.", - "type": "number" - }, - "icon": { - "description": "URL of the startup's icon image.", + "name": { "type": "string" }, - "is_merchant_of_record": { - "description": "`true` when the startup is flagged as the merchant of record for its sales.", - "type": "boolean" - }, + "values": { + "items": { + "$ref": "#/definitions/sportskeeda.PageFilterValue" + }, + "type": "array" + } + }, + "type": "object" + }, + "sportskeeda.PageFilterValue": { + "properties": { "name": { - "description": "Startup name as shown on TrustMRR.", - "example": "Stan", "type": "string" }, - "on_sale": { - "description": "`true` when the startup is currently listed for sale.", + "selected": { "type": "boolean" }, - "rank": { - "description": "Position in the leaderboard for the selected metric, starting at 1.", - "example": 1, - "type": "integer" - }, - "revenue_per_visitor_last_30_days": { - "description": "Revenue per visitor over the last 30 days.", - "type": "number" - }, "slug": { - "description": "URL slug of the startup on TrustMRR. Use it with the startup endpoint.", - "example": "stan", - "type": "string" - }, - "stealth_mode": { - "description": "`true` when the startup is listed in stealth mode.", - "type": "boolean" - }, - "traffic_last_30_days": { - "description": "Traffic to the startup's website over the last 30 days.", - "type": "number" - }, - "url": { - "description": "Link to the startup's page on TrustMRR.", - "example": "https://trustmrr.com/startup/stan", - "type": "string" - }, - "x_founder_name": { - "description": "Founder's display name on X.", "type": "string" }, - "x_handle": { - "description": "Founder's X handle, without the `@`.", + "value": { "type": "string" + } + }, + "type": "object" + }, + "sportskeeda.PageGroup": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/sportskeeda.PageView" + }, + "type": "array" }, - "x_profile_picture": { - "description": "URL of the founder's X profile picture.", + "name": { "type": "string" } }, "type": "object" }, - "trustmrr.LeaderboardMetric": { - "enum": [ - "mrr", - "last_30_days_revenue", - "all_time_revenue", - "growth", - "traffic", - "revenue_per_visitor" - ], - "type": "string", - "x-enum-varnames": [ - "MetricMRR", - "MetricLast30DaysRevenue", - "MetricAllTimeRevenue", - "MetricGrowth", - "MetricTraffic", - "MetricRevenuePerVisitor" - ] - }, - "trustmrr.LeaderboardResponse": { + "sportskeeda.PageMenu": { "properties": { - "count": { - "description": "Number of startups in the leaderboard.", - "example": 100, - "type": "integer" - }, - "entries": { - "description": "Ranked startups, best first.", + "groups": { "items": { - "$ref": "#/definitions/trustmrr.LeaderboardEntry" + "$ref": "#/definitions/sportskeeda.PageGroup" }, "type": "array" }, - "metric": { - "allOf": [ - { - "$ref": "#/definitions/trustmrr.LeaderboardMetric" - } - ], - "description": "Metric the leaderboard is ranked by: `mrr`, `last_30_days_revenue`, `all_time_revenue`, `growth`, `traffic` or `revenue_per_visitor`.", - "example": "mrr" + "name": { + "type": "string" } }, "type": "object" }, - "trustmrr.MarketplaceResponse": { + "sportskeeda.PageOptionsResponse": { "properties": { - "best_deals": { + "filters": { "items": { - "$ref": "#/definitions/trustmrr.MarketplaceStartup" + "$ref": "#/definitions/sportskeeda.PageFilter" }, "type": "array" }, - "recently_listed": { + "menus": { "items": { - "$ref": "#/definitions/trustmrr.MarketplaceStartup" + "$ref": "#/definitions/sportskeeda.PageMenu" + }, + "type": "array" + }, + "slug": { + "type": "string" + }, + "sports": { + "items": { + "$ref": "#/definitions/sportskeeda.PageView" + }, + "type": "array" + }, + "tabs": { + "items": { + "$ref": "#/definitions/sportskeeda.PageView" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "views": { + "items": { + "$ref": "#/definitions/sportskeeda.PageView" }, "type": "array" } }, "type": "object" }, - "trustmrr.MarketplaceRevenue": { + "sportskeeda.PageView": { "properties": { - "last_30_days": { - "example": 23589.38, - "type": "number" - }, - "mrr": { - "example": 20361.89, - "type": "number" + "name": { + "type": "string" }, - "total": { - "example": 23589.38, - "type": "number" + "slug": { + "type": "string" } }, "type": "object" }, - "trustmrr.MarketplaceStartup": { + "sportskeeda.PlayerSeasonStats": { "properties": { - "active_subscriptions": { - "example": 4790, - "type": "integer" - }, - "asking_price": { - "example": 600000, - "type": "number" - }, - "category": { - "example": "Mobile Apps", - "type": "string" - }, - "country": { - "example": "PL", + "event_type": { "type": "string" }, - "customers": { - "example": 0, + "games_played": { "type": "integer" }, - "description": { - "type": "string" + "games_started": { + "type": "integer" }, - "first_listed_for_sale_at": { - "type": "string" + "metrics": { + "additionalProperties": {}, + "type": "object" }, - "founded_date": { - "example": "2025-06-01T00:00:00.000Z", + "name": { "type": "string" }, - "google_search_impressions_last_30_days": { + "season": { "type": "integer" }, - "growth_30d": { - "type": "number" + "team": { + "$ref": "#/definitions/sportskeeda.PlayerStatsTeam" + } + }, + "type": "object" + }, + "sportskeeda.PlayerStatsResponse": { + "properties": { + "event_types": { + "items": { + "$ref": "#/definitions/sportskeeda.PageFilterValue" + }, + "type": "array" }, - "growth_mrr_30d": { - "type": "number" + "records": { + "items": { + "$ref": "#/definitions/sportskeeda.PlayerSeasonStats" + }, + "type": "array" }, - "icon": { + "selected_event_type": { "type": "string" }, - "multiple": { - "example": 2.1, - "type": "number" + "slug": { + "type": "string" }, - "name": { - "example": "TrackAI", + "sport": { "type": "string" }, - "on_sale": { - "example": true, - "type": "boolean" + "stat_fields": { + "items": { + "type": "string" + }, + "type": "array" }, - "payment_provider": { - "example": "revenuecat", + "title": { + "type": "string" + } + }, + "type": "object" + }, + "sportskeeda.PlayerStatsTeam": { + "properties": { + "abbreviation": { "type": "string" }, - "profit_margin_last_30_days": { - "example": 10, - "type": "number" - }, - "rank": { - "example": 858, + "id": { "type": "integer" }, - "revenue": { - "$ref": "#/definitions/trustmrr.MarketplaceRevenue" + "image_url": { + "type": "string" }, - "revenue_per_visitor": { - "type": "number" + "name": { + "type": "string" }, "slug": { - "example": "trackai", "type": "string" - }, - "target_audience": { - "example": "B2C", + } + }, + "type": "object" + }, + "sportskeeda.ProfileFact": { + "properties": { + "name": { "type": "string" }, - "url": { - "example": "https://trustmrr.com/startup/trackai", + "value": { + "type": "string" + } + }, + "type": "object" + }, + "sportskeeda.ProfileResponse": { + "properties": { + "description": { "type": "string" }, - "visitors_last_30_days": { - "type": "integer" + "facts": { + "items": { + "$ref": "#/definitions/sportskeeda.ProfileFact" + }, + "type": "array" }, - "website": { - "example": "https://trackai.app", + "kind": { "type": "string" }, - "x_handle": { + "name": { "type": "string" }, - "x_profile_picture": { + "news": { + "items": { + "$ref": "#/definitions/sportskeeda.FeedItem" + }, + "type": "array" + }, + "slug": { "type": "string" } }, "type": "object" }, - "trustmrr.Startup": { + "sportskeeda.QuizCategoriesResponse": { "properties": { - "ahrefs_domain": { - "description": "Domain TrustMRR uses to look up the startup's Ahrefs domain rating.", + "categories": { + "items": { + "$ref": "#/definitions/sportskeeda.QuizCategory" + }, + "type": "array" + } + }, + "type": "object" + }, + "sportskeeda.QuizCategory": { + "properties": { + "name": { "type": "string" }, - "ahrefs_domain_rating": { - "description": "Ahrefs domain rating of the startup's website.", - "type": "integer" + "slug": { + "type": "string" + } + }, + "type": "object" + }, + "sportskeeda.QuizChoice": { + "properties": { + "text": { + "type": "string" + } + }, + "type": "object" + }, + "sportskeeda.QuizQuestion": { + "properties": { + "image": { + "type": "string" }, - "asking_price": { - "description": "Price the seller is asking for the startup.", - "example": 600000, - "type": "number" + "number": { + "type": "integer" }, - "asking_price_history": { - "description": "Earlier asking prices for the startup, one item per recorded price.", + "options": { "items": { - "$ref": "#/definitions/trustmrr.AskingPricePoint" + "$ref": "#/definitions/sportskeeda.QuizChoice" }, "type": "array" }, - "branding_primary_color": { - "description": "Primary brand color of the startup, as a hex code.", - "example": "#ffffff", + "text": { "type": "string" }, - "branding_secondary_color": { - "description": "Secondary brand color of the startup, as a hex code.", - "example": "#000000", + "type": { "type": "string" - }, + } + }, + "type": "object" + }, + "sportskeeda.QuizResponse": { + "properties": { "category": { - "description": "Category label of the startup, for example `Mobile App`.", - "example": "Mobile App", - "type": "string" - }, - "category_slug": { - "description": "URL slug of the startup's category, for example `mobile-app`.", - "example": "mobile-app", "type": "string" }, - "country": { - "description": "Country code of the startup, for example `PL`.", - "example": "PL", - "type": "string" + "questions": { + "items": { + "$ref": "#/definitions/sportskeeda.QuizQuestion" + }, + "type": "array" }, - "created_at": { - "description": "Time the startup was added to TrustMRR, in ISO 8601.", + "slug": { "type": "string" }, - "deal_score": { - "description": "TrustMRR's recency-aware acquisition score for the listing.", - "type": "number" + "time_limit_seconds": { + "type": "integer" }, - "description": { - "description": "Startup description as shown on TrustMRR.", + "title": { "type": "string" }, - "enrichment": { - "allOf": [ - { - "$ref": "#/definitions/trustmrr.StartupEnrichment" - } - ], - "description": "TrustMRR's AI-generated business summary for the startup." - }, - "first_listed_for_sale_at": { - "description": "Time the startup was first listed for sale, in ISO 8601.", + "version_id": { "type": "string" - }, - "founded_date": { - "description": "Date the startup was founded, in ISO 8601.", + } + }, + "type": "object" + }, + "sportskeeda.QuizSummary": { + "properties": { + "image": { "type": "string" }, - "growth_30d": { - "description": "Growth over the last 30 days, in percent.", - "type": "number" - }, - "growth_mrr_30d": { - "description": "Growth in monthly recurring revenue over the last 30 days, in percent.", - "type": "number" - }, - "has_dofollow_backlink": { - "description": "`true` when TrustMRR has verified a dofollow backlink for the startup.", - "type": "boolean" - }, - "has_google_analytics": { - "description": "`true` when TrustMRR has verified Google Analytics for the startup.", - "type": "boolean" - }, - "has_search_console": { - "description": "`true` when TrustMRR has verified Google Search Console for the startup.", - "type": "boolean" - }, - "icon": { - "description": "URL of the startup's icon image.", + "slug": { "type": "string" }, - "insight_overrides": { - "allOf": [ - { - "$ref": "#/definitions/trustmrr.StartupInsight" - } - ], - "description": "InsightOverrides holds the human-curated business summary TrustMRR displays\nin place of the AI enrichment when a seller has edited it." - }, - "is_merchant_of_record": { - "description": "`true` when the startup is flagged as the merchant of record for its sales.", - "type": "boolean" - }, - "is_sponsored": { - "description": "`true` when the listing is sponsored.", - "type": "boolean" - }, - "listing_tier": { - "description": "Marketplace listing tier of the startup, for example `pro`.", - "example": "pro", + "time_limit": { "type": "string" }, - "looking_for_cofounder": { - "description": "`true` when the startup is looking for a cofounder.", - "type": "boolean" - }, - "looking_for_cofounder_message": { - "description": "Message from the founder about the cofounder search. Text written by the founder.", + "title": { "type": "string" - }, - "marketing_channels": { - "description": "Marketing channels detected for the startup, one item per channel.", + } + }, + "type": "object" + }, + "sportskeeda.QuizzesResponse": { + "properties": { + "items": { "items": { - "$ref": "#/definitions/trustmrr.StartupChannel" + "$ref": "#/definitions/sportskeeda.QuizSummary" }, "type": "array" }, - "merchant_category_code": { - "description": "Merchant category code of the startup's payment processor account, for example `7372`.", - "example": "7372", + "slug": { "type": "string" }, - "mrr_last_synced_at": { - "description": "Time the monthly recurring revenue was last synced, in ISO 8601.", + "title": { "type": "string" + } + }, + "type": "object" + }, + "sportskeeda.SalaryBreakdown": { + "properties": { + "base_salary": { + "type": "integer" }, - "multiple": { - "description": "Asking price divided by trailing revenue.", - "example": 2.12, - "type": "number" + "guaranteed": { + "type": "integer" }, - "name": { - "description": "Startup name as shown on TrustMRR.", - "example": "TrackAI", - "type": "string" + "option_bonus": { + "type": "integer" }, - "offer_count": { - "description": "Number of offers made on the listing.", + "other_bonus": { "type": "integer" }, - "on_sale": { - "description": "`true` when the startup is currently listed for sale.", - "type": "boolean" + "per_game_bonus": { + "type": "integer" }, - "payment_provider": { - "description": "Payment provider that verifies the startup's revenue, for example `revenuecat`.", - "example": "revenuecat", - "type": "string" + "roster_bonus": { + "type": "integer" }, - "profit_margin_last_30_days": { - "description": "Profit margin over the last 30 days, in percent.", - "example": 10, - "type": "number" + "signing_bonus": { + "type": "integer" }, - "rank": { - "description": "Position of the startup on TrustMRR's ranking.", - "example": 858, + "workout_bonus": { "type": "integer" + } + }, + "type": "object" + }, + "sportskeeda.SalaryCapPlayer": { + "properties": { + "breakdown": { + "$ref": "#/definitions/sportskeeda.SalaryBreakdown" }, - "revenue": { - "allOf": [ - { - "$ref": "#/definitions/trustmrr.StartupRevenue" - } - ], - "description": "Verified revenue figures for the startup, in US dollars." + "cap_number": { + "type": "integer" }, - "revenue_last_synced_at": { - "description": "Time the revenue figures were last synced, in ISO 8601.", - "type": "string" + "cut_post_june_1_cap_saving": { + "type": "integer" }, - "revenue_per_visitor_last_30_days": { - "description": "Revenue per visitor over the last 30 days.", - "type": "number" + "cut_post_june_1_dead_money": { + "type": "integer" }, - "secondary_payment_provider": { - "description": "Second payment provider connected to the startup, when it has one.", - "type": "string" + "cut_pre_june_1_cap_saving": { + "type": "integer" }, - "seller_message": { - "description": "Message from the seller on the listing. Text written by the seller.", - "type": "string" + "cut_pre_june_1_dead_money": { + "type": "integer" }, - "slug": { - "description": "URL slug of the startup on TrustMRR. Use it with the startup endpoint.", - "example": "trackai", - "type": "string" + "extension_cap_saving": { + "type": "integer" }, - "status": { - "description": "Startup status on TrustMRR, for example `active`.", - "example": "active", + "name": { "type": "string" }, - "stealth_mode": { - "description": "`true` when the startup is listed in stealth mode.", - "type": "boolean" + "restructure_cap_saving": { + "type": "integer" }, - "target_audience": { - "description": "Audience the startup sells to, for example `B2C` or `B2B`.", - "example": "B2C", + "slug": { "type": "string" }, - "tech_stack": { - "description": "Technologies detected in the startup's stack, one item per technology.", - "items": { - "$ref": "#/definitions/trustmrr.StartupTech" - }, - "type": "array" + "trade_post_june_1_cap_saving": { + "type": "integer" }, - "traffic_last_12_months": { - "description": "Traffic to the startup's website over the last 12 months.", - "type": "number" + "trade_post_june_1_dead_money": { + "type": "integer" }, - "traffic_last_24_hours": { - "description": "Traffic to the startup's website over the last 24 hours.", - "type": "number" + "trade_pre_june_1_cap_saving": { + "type": "integer" }, - "traffic_last_30_days": { - "description": "Traffic to the startup's website over the last 30 days.", - "type": "number" + "trade_pre_june_1_dead_money": { + "type": "integer" + } + }, + "type": "object" + }, + "sportskeeda.SalaryCapResponse": { + "properties": { + "active_cap_spend": { + "type": "integer" }, - "traffic_last_7_days": { - "description": "Traffic to the startup's website over the last 7 days.", - "type": "number" + "cap_space": { + "type": "integer" }, - "updated_at": { - "description": "Time the startup record was last updated, in ISO 8601.", - "type": "string" + "dead_money": { + "type": "integer" }, - "url": { - "description": "Link to the startup's page on TrustMRR.", - "example": "https://trustmrr.com/startup/trackai", + "order": { "type": "string" }, - "user_category": { - "description": "Second category label for the startup, for example `Mobile Apps`.", - "example": "Mobile Apps", - "type": "string" + "players": { + "items": { + "$ref": "#/definitions/sportskeeda.SalaryCapPlayer" + }, + "type": "array" }, - "user_category_slug": { - "description": "URL slug of the second category label, for example `mobile-apps`.", - "example": "mobile-apps", + "q": { "type": "string" }, - "website": { - "description": "Startup's website address.", - "example": "https://trackai.app", - "type": "string" + "salary_cap": { + "type": "integer" }, - "x_follower_count": { - "description": "Number of followers of the founder's X account.", + "season": { "type": "integer" }, - "x_founder_name": { - "description": "Founder's display name on X.", + "slug": { "type": "string" }, - "x_handle": { - "description": "Founder's X handle, without the `@`.", + "sort_by": { "type": "string" }, - "x_profile_picture": { - "description": "URL of the founder's X profile picture.", - "type": "string" - } - }, - "type": "object" - }, - "trustmrr.StartupChannel": { - "properties": { - "category": { - "description": "Marketing channel category, for example `paid`.", - "example": "paid", + "status": { + "enum": [ + "ok", + "no_data" + ], "type": "string" }, - "slug": { - "description": "Marketing channel identifier, for example `meta-ads`.", - "example": "meta-ads", + "team": { "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "trustmrr.StartupEnrichment": { + "sportskeeda.ScheduleMatch": { "properties": { - "business_type": { - "description": "Business type of the startup, for example `B2C`.", - "example": "B2C", + "competition": { "type": "string" }, - "estimated_user_count": { - "description": "Estimated number of users of the startup's product.", - "type": "integer" + "date_time": { + "type": "string" }, - "funding_status": { - "description": "Funding status of the startup, for example `Unknown`.", + "result": { "type": "string" }, - "last_enriched_at": { - "description": "Time the summary was last generated, in ISO 8601.", + "score_1": { "type": "string" }, - "pricing_model": { - "description": "Short description of how the startup charges for its product.", + "score_2": { "type": "string" }, - "problem_solved": { - "description": "Problem the startup's product solves.", + "slug": { "type": "string" }, - "screenshots": { - "description": "Screenshots of the startup's site, one item per screenshot.", - "items": { - "$ref": "#/definitions/trustmrr.StartupScreenshot" - }, - "type": "array" + "status": { + "type": "string" }, - "tags": { - "description": "Topic tags for the startup, for example `ai` or `saas`.", - "items": { - "type": "string" - }, - "type": "array" + "team_1": { + "type": "string" }, - "target_persona": { - "description": "Type of customer the startup's product is aimed at.", + "team_2": { "type": "string" }, - "value_proposition": { - "description": "One-line summary of what the startup's product offers.", + "venue": { "type": "string" } }, "type": "object" }, - "trustmrr.StartupInsight": { + "sportskeeda.SectionLink": { "properties": { - "business_type": { - "description": "Business type of the startup, for example `B2C`.", - "example": "B2C", - "type": "string" - }, - "estimated_user_count": { - "description": "Estimated number of users of the startup's product.", - "type": "integer" - }, - "pricing_model": { - "description": "Short description of how the startup charges for its product.", - "type": "string" + "external": { + "type": "boolean" }, - "problem_solved": { - "description": "Problem the startup's product solves.", + "name": { "type": "string" }, - "target_persona": { - "description": "Type of customer the startup's product is aimed at.", + "slug": { "type": "string" }, - "updated_at": { - "description": "Time the summary was last updated, in ISO 8601.", + "url": { "type": "string" + } + }, + "type": "object" + }, + "sportskeeda.SectionsResponse": { + "properties": { + "navigation": { + "items": { + "$ref": "#/definitions/sportskeeda.NavigationGroup" + }, + "type": "array" }, - "value_proposition": { - "description": "One-line summary of what the startup's product offers.", - "type": "string" + "sections": { + "items": { + "$ref": "#/definitions/sportskeeda.SportSection" + }, + "type": "array" } }, "type": "object" }, - "trustmrr.StartupRef": { + "sportskeeda.SitemapItem": { "properties": { "last_modified": { - "description": "Last-modified time TrustMRR lists for the startup page, in ISO 8601.", - "example": "2026-07-08T05:09:42.880Z", "type": "string" }, "slug": { - "description": "URL slug of the startup on TrustMRR. Use it with the startup endpoint.", - "example": "gumroad", "type": "string" }, "url": { - "description": "Link to the startup's page on TrustMRR.", - "example": "https://trustmrr.com/startup/gumroad", "type": "string" } }, "type": "object" }, - "trustmrr.StartupRevenue": { + "sportskeeda.SitemapItemsResponse": { "properties": { - "active_subscriptions": { - "description": "Number of active subscriptions.", + "has_more": { + "type": "boolean" + }, + "items": { + "items": { + "$ref": "#/definitions/sportskeeda.SitemapItem" + }, + "type": "array" + }, + "limit": { "type": "integer" }, - "customers": { - "description": "Number of customers.", + "offset": { "type": "integer" }, - "last_30_days": { - "description": "Revenue over the last 30 days, in US dollars.", - "type": "number" + "sitemap_url": { + "type": "string" }, - "mrr": { - "description": "Monthly recurring revenue, in US dollars.", - "type": "number" + "slug": { + "type": "string" }, "total": { - "description": "Total revenue to date, in US dollars.", - "type": "number" + "type": "integer" } }, "type": "object" }, - "trustmrr.StartupScreenshot": { + "sportskeeda.SitemapSource": { "properties": { - "captured_at": { - "description": "Time the screenshot was taken, in ISO 8601.", + "last_modified": { "type": "string" }, - "label": { - "description": "Label of the screenshot, for example `Landing page`.", + "name": { + "type": "string" + }, + "slug": { "type": "string" }, "url": { - "description": "URL of the screenshot image.", "type": "string" } }, "type": "object" }, - "trustmrr.StartupTech": { + "sportskeeda.SitemapsResponse": { "properties": { - "category": { - "description": "Technology category, for example `frontend`.", - "example": "frontend", + "sources": { + "items": { + "$ref": "#/definitions/sportskeeda.SitemapSource" + }, + "type": "array" + } + }, + "type": "object" + }, + "sportskeeda.SportSection": { + "properties": { + "last_modified": { "type": "string" }, "slug": { - "description": "Technology identifier, for example `reactnative`.", - "example": "reactnative", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "trustmrr.StartupsResponse": { + "sportskeeda.StandingsOptionsResponse": { "properties": { - "has_next": { - "description": "`true` when more pages of startups remain.", - "example": true, - "type": "boolean" - }, - "page": { - "description": "Page number returned, starting at 1.", - "example": 1, - "type": "integer" - }, - "page_size": { - "description": "Number of startups per page.", - "example": 100, - "type": "integer" + "conferences": { + "items": { + "$ref": "#/definitions/sportskeeda.PageView" + }, + "type": "array" }, - "startups": { - "description": "Startups on this page, one item per startup.", + "seasons": { "items": { - "$ref": "#/definitions/trustmrr.StartupRef" + "type": "integer" }, "type": "array" }, - "total": { - "description": "Total number of startups listed on TrustMRR.", - "example": 8196, - "type": "integer" + "slug": { + "type": "string" } }, "type": "object" }, - "trustmrr.acquireResponseDoc": { + "sportskeeda.TableCell": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/trustmrr.AcquireResponse" + "slug": { + "type": "string" }, - "msg": { - "example": "OK", + "text": { "type": "string" } }, "type": "object" }, - "trustmrr.categoriesResponseDoc": { + "sportskeeda.TablesResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "matches": { + "items": { + "$ref": "#/definitions/sportskeeda.ScheduleMatch" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/trustmrr.CategoriesResponse" + "slug": { + "type": "string" }, - "msg": { - "example": "OK", + "status": { + "type": "string" + }, + "tables": { + "items": { + "$ref": "#/definitions/sportskeeda.DataTable" + }, + "type": "array" + }, + "title": { "type": "string" + }, + "views": { + "items": { + "$ref": "#/definitions/sportskeeda.PageView" + }, + "type": "array" } }, "type": "object" }, - "trustmrr.categoryResponseDoc": { + "sportskeeda.TaxonomyResult": { "properties": { - "code": { - "example": 200, + "id": { + "type": "string" + }, + "image": { + "type": "string" + }, + "path_slug": { + "type": "string" + }, + "post_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/trustmrr.CategoryResponse" + "slug": { + "type": "string" }, - "msg": { - "example": "OK", + "taxonomy": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "trustmrr.leaderboardResponseDoc": { + "sportskeeda.TaxonomySearchResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "query": { + "type": "string" }, - "data": { - "$ref": "#/definitions/trustmrr.LeaderboardResponse" + "results": { + "items": { + "$ref": "#/definitions/sportskeeda.TaxonomyResult" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "taxonomies": { + "items": { + "enum": [ + "category", + "event", + "team", + "player", + "wiki", + "wiki_tag" + ], + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "trustmrr.marketplaceResponseDoc": { + "sportskeeda.TopicBlock": { "properties": { - "code": { - "example": 200, + "alt": { + "type": "string" + }, + "caption": { + "type": "string" + }, + "embed_url": { + "type": "string" + }, + "image": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/sportskeeda.TopicListItem" + }, + "type": "array" + }, + "level": { "type": "integer" }, - "data": { - "$ref": "#/definitions/trustmrr.MarketplaceResponse" + "links": { + "items": { + "$ref": "#/definitions/sportskeeda.TopicLink" + }, + "type": "array" }, - "msg": { - "example": "OK", + "ordered": { + "type": "boolean" + }, + "rows": { + "items": { + "items": { + "$ref": "#/definitions/sportskeeda.TopicTableCell" + }, + "type": "array" + }, + "type": "array" + }, + "text": { + "type": "string" + }, + "type": { + "enum": [ + "paragraph", + "heading", + "list", + "table", + "image", + "embed" + ], "type": "string" } }, "type": "object" }, - "trustmrr.startupResponseDoc": { + "sportskeeda.TopicLink": { "properties": { - "code": { - "example": 200, - "type": "integer" + "slug": { + "type": "string" }, - "data": { - "$ref": "#/definitions/trustmrr.Startup" + "text": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "trustmrr.startupsResponseDoc": { + "sportskeeda.TopicListItem": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/trustmrr.StartupsResponse" + "links": { + "items": { + "$ref": "#/definitions/sportskeeda.TopicLink" + }, + "type": "array" }, - "msg": { - "example": "OK", + "text": { "type": "string" } }, "type": "object" }, - "trustpilot.BusinessAbout": { + "sportskeeda.TopicResponse": { "properties": { - "business_country_code": { - "description": "Country code of the business, such as `DK`.", - "example": "DK", - "type": "string" - }, - "contact": { - "allOf": [ - { - "$ref": "#/definitions/trustpilot.BusinessContact" - } - ], - "description": "Contact details the business lists on its profile." - }, - "description_html": { - "description": "Business description from the profile, as HTML.", - "type": "string" - }, - "description_text": { - "description": "Business description from the profile, as plain text.", + "author": { "type": "string" }, - "facebook_url": { - "description": "URL of the business's Facebook page.", - "example": "https://www.facebook.com/Trustpilot", + "author_slug": { "type": "string" }, - "has_company_elements": { - "description": "Whether the profile shows company information added by the business.", - "example": true, - "type": "boolean" + "blocks": { + "items": { + "$ref": "#/definitions/sportskeeda.TopicBlock" + }, + "type": "array" }, - "information_source": { - "description": "Who supplied the company information, as Trustpilot reports it, such as `customer` or `none`.", - "example": "customer", + "last_modified": { "type": "string" }, - "promotion_points": { - "description": "Selling points listed in the business's promotion box.", + "related": { "items": { - "type": "string" + "$ref": "#/definitions/sportskeeda.FeedItem" }, "type": "array" }, - "promotion_title": { - "description": "Title of the promotion box on the business profile.", + "slug": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "trustpilot.BusinessActivity": { + "sportskeeda.TopicTableCell": { "properties": { - "claimed_date": { - "description": "Time the business claimed its profile, in ISO 8601 UTC.", - "type": "string" - }, - "has_business_unit_merge_history": { - "description": "Whether this profile has been merged with other Trustpilot business profiles.", - "example": false, - "type": "boolean" - }, - "has_subscription": { - "description": "Whether the business has a Trustpilot subscription.", - "example": false, - "type": "boolean" - }, - "is_asking_for_reviews": { - "description": "Whether the business invites customers to review it on Trustpilot.", - "example": false, - "type": "boolean" - }, - "is_claimed": { - "description": "Whether the business has claimed its Trustpilot profile.", - "example": false, - "type": "boolean" + "colspan": { + "type": "integer" }, - "is_using_ai_responses": { - "description": "Whether the business uses AI-generated responses to reviews.", - "example": false, + "header": { "type": "boolean" }, - "is_using_paid_features": { - "description": "Whether the business uses paid Trustpilot features.", - "example": false, - "type": "boolean" + "links": { + "items": { + "$ref": "#/definitions/sportskeeda.TopicLink" + }, + "type": "array" }, - "previously_claimed": { - "description": "Whether the profile has been claimed before.", - "example": false, - "type": "boolean" + "rowspan": { + "type": "integer" }, - "verification": { - "allOf": [ - { - "$ref": "#/definitions/trustpilot.BusinessVerification" - } - ], - "description": "Verification checks the business has passed." + "text": { + "type": "string" } }, "type": "object" }, - "trustpilot.BusinessBreadcrumb": { + "sportskeeda.TradeValuePlayer": { "properties": { - "id": { - "description": "Trustpilot category id at this level of the path.", - "example": "electronics_technology", + "name": { "type": "string" }, - "level": { - "description": "Level of the category in the path: `top`, `mid` or `bottom`.", - "example": "top", + "position": { "type": "string" }, - "name": { - "description": "Display name of the category at this level.", - "example": "Electronics & Technology", + "rank": { + "type": "integer" + }, + "slug": { + "type": "string" + }, + "team": { + "type": "string" + }, + "value": { "type": "string" } }, "type": "object" }, - "trustpilot.BusinessCategory": { + "sportskeeda.TradeValuesResponse": { "properties": { - "cardinality": { - "description": "Cardinality value Trustpilot assigns to this category for the business.", - "example": 2, + "limit": { "type": "integer" }, - "id": { - "description": "Trustpilot category id, such as `software_company`.", - "example": "software_company", + "mode": { "type": "string" }, - "is_primary": { - "description": "Whether this is the business's primary category.", - "example": true, - "type": "boolean" + "next_offset": { + "type": "integer" }, - "name": { - "description": "Display name of the category.", - "example": "Software Company", + "offset": { + "type": "integer" + }, + "players": { + "items": { + "$ref": "#/definitions/sportskeeda.TradeValuePlayer" + }, + "type": "array" + }, + "position": { "type": "string" }, - "rank": { - "description": "Rank value Trustpilot assigns to this category for the business.", - "example": 1, + "scoring": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "superflex": { + "type": "boolean" + }, + "total": { "type": "integer" + }, + "updated_at": { + "type": "string" } }, "type": "object" }, - "trustpilot.BusinessCompanyReply": { + "sportskeeda.Transaction": { "properties": { - "message": { - "description": "Text of the business's reply.", + "date": { "type": "string" }, - "published_at_text": { - "description": "Time the reply was published, in ISO 8601 UTC.", + "description": { "type": "string" }, - "updated_at_text": { - "description": "Time the reply was last updated, in ISO 8601 UTC.", + "from_team": { + "$ref": "#/definitions/sportskeeda.TransactionParty" + }, + "id": { + "type": "integer" + }, + "player": { + "$ref": "#/definitions/sportskeeda.TransactionPerson" + }, + "positions": { + "items": { + "$ref": "#/definitions/sportskeeda.TransactionPosition" + }, + "type": "array" + }, + "team": { + "$ref": "#/definitions/sportskeeda.TransactionParty" + }, + "type": { "type": "string" } }, "type": "object" }, - "trustpilot.BusinessContact": { + "sportskeeda.TransactionMonth": { "properties": { - "address": { - "description": "Street address of the business.", - "type": "string" - }, - "city": { - "description": "City of the business.", + "code": { "type": "string" }, - "country": { - "description": "Country of the business.", + "label": { "type": "string" - }, - "email": { - "description": "Contact email address of the business.", + } + }, + "type": "object" + }, + "sportskeeda.TransactionParty": { + "properties": { + "abbr": { "type": "string" }, - "phone": { - "description": "Contact phone number of the business.", + "name": { "type": "string" }, - "zip_code": { - "description": "Postal code of the business.", + "slug": { "type": "string" } }, "type": "object" }, - "trustpilot.BusinessPageLanguage": { + "sportskeeda.TransactionPerson": { "properties": { - "iso_language": { - "description": "Language and region code of this version, such as `en-US`.", - "example": "en-US", + "name": { "type": "string" }, - "language_code": { - "description": "Language code of this version, such as `en`.", - "example": "en", + "slug": { "type": "string" - }, - "locale": { - "description": "Locale of this version, such as `en-US`.", - "example": "en-US", + } + }, + "type": "object" + }, + "sportskeeda.TransactionPosition": { + "properties": { + "abbr": { "type": "string" }, - "uri": { - "description": "Base URL of the Trustpilot site for this language version.", - "example": "https://www.trustpilot.com", + "name": { "type": "string" } }, "type": "object" }, - "trustpilot.BusinessPageMeta": { + "sportskeeda.TransactionTeam": { "properties": { - "canonical_url": { - "description": "Canonical URL of the business profile page.", - "example": "https://www.trustpilot.com/review/openai.com", + "name": { "type": "string" }, - "domain": { - "description": "Trustpilot domain the profile page is served from.", - "example": "https://www.trustpilot.com", + "slug": { "type": "string" + } + }, + "type": "object" + }, + "sportskeeda.TransactionsOptionsResponse": { + "properties": { + "months": { + "items": { + "$ref": "#/definitions/sportskeeda.TransactionMonth" + }, + "type": "array" }, - "languages": { - "description": "Language versions of the profile page.", + "season": { + "type": "integer" + }, + "seasons": { "items": { - "$ref": "#/definitions/trustpilot.BusinessPageLanguage" + "type": "integer" }, "type": "array" }, - "locale": { - "description": "Locale of the profile page, such as `en-US`.", - "example": "en-US", - "type": "string" + "teams": { + "items": { + "$ref": "#/definitions/sportskeeda.TransactionTeam" + }, + "type": "array" } }, "type": "object" }, - "trustpilot.BusinessRatingHistogram": { + "sportskeeda.TransactionsResponse": { "properties": { - "five": { - "description": "Number of 5-star reviews.", - "example": 80, - "type": "integer" + "has_more": { + "type": "boolean" }, - "four": { - "description": "Number of 4-star reviews.", - "example": 20, - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/sportskeeda.Transaction" + }, + "type": "array" }, - "one": { - "description": "Number of 1-star reviews.", - "example": 817, + "month": { + "type": "string" + }, + "page": { "type": "integer" }, - "three": { - "description": "Number of 3-star reviews.", - "example": 22, + "per_page": { "type": "integer" }, - "total": { - "description": "Total number of reviews counted across all star levels.", - "example": 984, + "season": { "type": "integer" }, - "two": { - "description": "Number of 2-star reviews.", - "example": 45, + "slug": { + "type": "string" + }, + "total": { "type": "integer" } }, "type": "object" }, - "trustpilot.BusinessRelatedResponse": { + "sportskeeda.VideoItem": { "properties": { - "business": { - "allOf": [ - { - "$ref": "#/definitions/trustpilot.businessHeader" - } - ], - "description": "Summary of the business whose related businesses are listed." + "channel": { + "type": "string" }, - "items": { - "description": "Businesses Trustpilot shows as related to this business.", - "items": { - "$ref": "#/definitions/trustpilot.RelatedBusiness" - }, - "type": "array" + "duration": { + "type": "string" + }, + "image": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "trustpilot.BusinessReplyMetrics": { + "sportskeeda.VideoResponse": { "properties": { - "average_days_to_reply": { - "description": "Average number of days the business takes to reply to reviews.", - "example": 10.59, - "type": "number" + "description": { + "type": "string" }, - "last_reply_to_negative_review": { - "description": "Time of the business's most recent reply to a negative review, as Trustpilot reports it.", + "id": { "type": "string" }, - "negative_reviews_with_replies": { - "description": "Number of negative reviews the business has replied to.", - "example": 7964, - "type": "integer" + "poster": { + "type": "string" }, - "reply_percentage": { - "description": "Percentage of negative reviews the business has replied to.", - "example": 47.88, - "type": "number" + "slug": { + "type": "string" }, - "total_negative_reviews": { - "description": "Total number of negative reviews the business has received.", - "example": 16630, - "type": "integer" + "stream_url": { + "type": "string" + }, + "title": { + "type": "string" } }, "type": "object" }, - "trustpilot.BusinessResponse": { + "sportskeeda.VideosResponse": { "properties": { - "about": { - "allOf": [ - { - "$ref": "#/definitions/trustpilot.BusinessAbout" - } - ], - "description": "Company information the business shows on its Trustpilot profile." + "channels": { + "items": { + "$ref": "#/definitions/sportskeeda.PageView" + }, + "type": "array" }, - "breadcrumbs": { - "description": "Category path of the business, from top level down to the most specific level.", + "items": { "items": { - "$ref": "#/definitions/trustpilot.BusinessBreadcrumb" + "$ref": "#/definitions/sportskeeda.VideoItem" }, "type": "array" }, - "categories": { - "description": "Categories the business is listed under on Trustpilot.", + "slug": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "sportskeeda.WikiActivityResponse": { + "properties": { + "activities": { "items": { - "$ref": "#/definitions/trustpilot.BusinessCategory" + "$ref": "#/definitions/sportskeeda.WikiContribution" }, "type": "array" }, - "claimed": { - "description": "Whether the business has claimed its Trustpilot profile.", - "example": false, - "type": "boolean" + "limit": { + "type": "integer" }, - "company_activity": { - "allOf": [ - { - "$ref": "#/definitions/trustpilot.BusinessActivity" - } - ], - "description": "How the business uses Trustpilot, such as claiming, subscriptions and verification." + "page": { + "type": "integer" }, - "name": { - "description": "Display name of the business on Trustpilot.", - "example": "OpenAI", + "slug": { "type": "string" }, - "page_meta": { - "allOf": [ - { - "$ref": "#/definitions/trustpilot.BusinessPageMeta" - } - ], - "description": "Page details of the Trustpilot profile, such as canonical URL and language versions." + "sort": { + "type": "string" }, - "paid_subscription": { - "description": "Whether the business uses paid Trustpilot features or has a Trustpilot subscription.", - "example": false, - "type": "boolean" + "sort_by": { + "type": "string" }, - "rating": { - "description": "Star rating shown on the business profile, out of 5.", - "example": 1.5, - "type": "number" + "total_items": { + "type": "integer" }, - "rating_histogram": { - "allOf": [ - { - "$ref": "#/definitions/trustpilot.BusinessRatingHistogram" - } - ], - "description": "Number of reviews at each star level." + "total_pages": { + "type": "integer" }, - "reply_metrics": { - "allOf": [ - { - "$ref": "#/definitions/trustpilot.BusinessReplyMetrics" - } - ], - "description": "Statistics on how the business replies to negative reviews." + "wiki": { + "type": "string" + } + }, + "type": "object" + }, + "sportskeeda.WikiArticleResponse": { + "properties": { + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "review_count": { - "description": "Total number of reviews the business has on Trustpilot.", - "example": 984, - "type": "integer" + "description": { + "type": "string" }, - "review_summary": { - "allOf": [ - { - "$ref": "#/definitions/trustpilot.BusinessReviewSummary" - } - ], - "description": "AI-generated summary of the business's reviews shown on its profile." + "image_url": { + "type": "string" }, - "review_topics": { - "description": "AI-generated summaries of what reviewers say about individual topics.", + "paragraphs": { "items": { - "$ref": "#/definitions/trustpilot.BusinessReviewTopic" + "type": "string" }, "type": "array" }, + "published_at": { + "type": "string" + }, + "section": { + "type": "string" + }, "slug": { - "description": "Business slug used in the Trustpilot profile URL, usually the website domain.", - "example": "openai.com", "type": "string" }, - "trust_score": { - "description": "Trustpilot TrustScore of the business, as a decimal number.", - "example": 1.3, - "type": "number" + "title": { + "type": "string" }, - "trustpilot_url": { - "description": "URL of the business profile on Trustpilot.", - "example": "https://www.trustpilot.com/review/openai.com", + "updated_at": { "type": "string" }, - "website_url": { - "description": "Website address of the business.", - "example": "https://openai.com", + "wiki": { "type": "string" } }, "type": "object" }, - "trustpilot.BusinessReviewItem": { + "sportskeeda.WikiCategoriesResponse": { "properties": { - "author_country": { - "description": "Country code of the reviewer, such as `GB`.", - "example": "GB", - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/sportskeeda.WikiCategory" + }, + "type": "array" }, - "author_name": { - "description": "Name of the reviewer as shown on the review.", - "example": "Summit", - "type": "string" - }, - "author_review_count": { - "description": "Number of reviews the reviewer has written on Trustpilot.", - "example": 1, - "type": "integer" - }, - "body": { - "description": "Full text of the review.", - "type": "string" - }, - "company_reply": { - "allOf": [ - { - "$ref": "#/definitions/trustpilot.BusinessCompanyReply" - } - ], - "description": "Reply the business posted to the review. Omitted when there is none." - }, - "experienced_at_text": { - "description": "Date of the experience the review describes, in ISO 8601 UTC.", + "wiki": { "type": "string" + } + }, + "type": "object" + }, + "sportskeeda.WikiCategory": { + "properties": { + "children": { + "items": { + "$ref": "#/definitions/sportskeeda.WikiCategory" + }, + "type": "array" }, - "id": { - "description": "Trustpilot id of the review.", - "example": "69b2e2443283f179ac73d3ce", + "path_slug": { "type": "string" }, - "invited": { - "description": "Whether the reviewer was invited by the business to write the review.", - "example": false, - "type": "boolean" - }, - "labels": { - "allOf": [ - { - "$ref": "#/definitions/trustpilot.BusinessReviewLabels" - } - ], - "description": "Labels Trustpilot attaches to the review, such as source and verification." + "sequence": { + "type": "integer" }, - "published_at_text": { - "description": "Time the review was published, in ISO 8601 UTC.", + "slug": { "type": "string" }, - "rating": { - "description": "Star rating the reviewer gave, from 1 to 5.", - "example": 1, + "taxonomy_id": { "type": "integer" }, "title": { - "description": "Headline of the review.", - "type": "string" - }, - "updated_at_text": { - "description": "Time the review was last updated, in ISO 8601 UTC.", "type": "string" - }, - "verified": { - "description": "Whether Trustpilot marks the review as verified.", - "example": false, - "type": "boolean" } }, "type": "object" }, - "trustpilot.BusinessReviewLabels": { + "sportskeeda.WikiContribution": { "properties": { - "filtered": { - "description": "Whether the review is marked as filtered on Trustpilot.", - "example": false, - "type": "boolean" + "author_name": { + "type": "string" }, - "merged": { - "description": "Merge label shown on the review, such as `merged`.", + "author_slug": { "type": "string" }, - "pending": { - "description": "Whether the review is still pending.", - "example": false, - "type": "boolean" + "bytes_added": { + "type": "string" }, - "review_source": { - "description": "How the review was collected, as Trustpilot labels it, such as `Organic` or `Invited`.", - "example": "Organic", + "bytes_removed": { "type": "string" }, - "verification_level": { - "description": "Verification level of the review, such as `verified` or `not-verified`.", - "example": "not-verified", + "created_at": { "type": "string" }, - "verification_source": { - "description": "How the review was verified, such as `email` or `invitation`.", - "example": "invitation", + "id": { + "type": "integer" + }, + "parent_wiki_name": { "type": "string" - } - }, - "type": "object" - }, - "trustpilot.BusinessReviewSummary": { - "properties": { - "model_version": { - "description": "Version of the model that generated the summary, as Trustpilot reports it.", + }, + "parent_wiki_slug": { + "type": "string" + }, + "path_slug": { "type": "string" }, "status": { - "description": "Publication status of the summary, as Trustpilot reports it.", "type": "string" }, - "summary": { - "description": "Text of the AI-generated summary of the business's reviews.", + "taxonomy_name": { "type": "string" }, "updated_at": { - "description": "Time the summary was last updated, as Trustpilot reports it.", + "type": "string" + }, + "version_number": { + "type": "integer" + }, + "words_added": { + "type": "string" + }, + "words_removed": { "type": "string" } }, "type": "object" }, - "trustpilot.BusinessReviewTopic": { + "sportskeeda.WikiContributorsResponse": { "properties": { - "model_version": { - "description": "Version of the model that generated the topic summary, as Trustpilot reports it.", - "type": "string" + "contributors": { + "items": { + "$ref": "#/definitions/sportskeeda.WikiContribution" + }, + "type": "array" }, - "order": { - "description": "Position in which Trustpilot lists the topic.", - "example": 1, + "limit": { "type": "integer" }, - "summary": { - "description": "Text of the AI-generated summary of what reviewers say about the topic.", + "page": { + "type": "integer" + }, + "slug": { "type": "string" }, - "topic": { - "description": "Topic the summary covers, such as `user_experience`.", - "example": "user_experience", + "sort": { "type": "string" }, - "updated_at": { - "description": "Time the topic summary was last updated, as Trustpilot reports it.", + "sort_by": { + "type": "string" + }, + "total_items": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "wiki": { "type": "string" } }, "type": "object" }, - "trustpilot.BusinessReviewsAppliedFilters": { + "sportskeeda.WikiIssue": { "properties": { - "language": { - "description": "Review language code that was applied, in lowercase.", - "example": "en", + "created_at": { "type": "string" }, - "query": { - "description": "Text search that was applied to the review content.", - "example": "refund", + "creator_name": { "type": "string" }, - "replied": { - "description": "Whether only reviews with a business reply were requested.", - "type": "boolean" + "creator_slug": { + "type": "string" }, - "stars": { - "description": "Star rating, from 1 to 5, that reviews were filtered to.", - "example": 1, + "description": { + "type": "string" + }, + "id": { "type": "integer" }, - "verified": { - "description": "Whether only verified reviews were requested.", - "type": "boolean" + "last_opened_at": { + "type": "string" + }, + "status": { + "type": "string" + }, + "title": { + "type": "string" } }, "type": "object" }, - "trustpilot.BusinessReviewsPagination": { + "sportskeeda.WikiIssuesResponse": { "properties": { - "has_next_page": { - "description": "Whether another page of reviews follows this one.", - "example": true, - "type": "boolean" - }, - "next_page": { - "description": "Number of the next page. Omitted on the last page.", - "example": 2, + "closed_issues_count": { "type": "integer" }, - "page": { - "description": "Page number returned.", - "example": 1, - "type": "integer" + "issues": { + "items": { + "$ref": "#/definitions/sportskeeda.WikiIssue" + }, + "type": "array" }, - "per_page": { - "description": "Number of reviews per page.", - "example": 20, + "limit": { "type": "integer" }, - "total_pages": { - "description": "Total number of pages of reviews.", - "example": 50, + "opened_issues_count": { "type": "integer" }, - "total_reviews": { - "description": "Total number of reviews available for the business.", - "example": 984, + "page": { "type": "integer" - } - }, - "type": "object" - }, - "trustpilot.BusinessReviewsResponse": { - "properties": { - "applied_filters": { - "allOf": [ - { - "$ref": "#/definitions/trustpilot.BusinessReviewsAppliedFilters" - } - ], - "description": "Filters that were applied to the reviews. Omitted when no filter was used." }, - "business": { - "allOf": [ - { - "$ref": "#/definitions/trustpilot.businessHeader" - } - ], - "description": "Summary of the business the reviews belong to." + "slug": { + "type": "string" }, - "items": { - "description": "Reviews on this page, as listed on the business's Trustpilot page.", - "items": { - "$ref": "#/definitions/trustpilot.BusinessReviewItem" - }, - "type": "array" + "status": { + "type": "string" }, - "pagination": { - "allOf": [ - { - "$ref": "#/definitions/trustpilot.BusinessReviewsPagination" - } - ], - "description": "Paging details for the reviews." + "total_pages": { + "type": "integer" + }, + "wiki": { + "type": "string" } }, "type": "object" }, - "trustpilot.BusinessVerification": { + "sportskeeda.WikiOption": { "properties": { - "verified_by_google": { - "description": "Whether the business is verified through Google.", - "example": false, - "type": "boolean" + "name": { + "type": "string" }, - "verified_payment_method": { - "description": "Whether the business has a verified payment method.", - "example": false, - "type": "boolean" + "slug": { + "type": "string" }, - "verified_user_identity": { - "description": "Whether the identity of the user managing the profile is verified.", - "example": false, - "type": "boolean" + "taxonomy_id": { + "type": "string" + }, + "taxonomy_slug": { + "type": "string" } }, "type": "object" }, - "trustpilot.CategoriesResponse": { + "sportskeeda.WikiOptionsResponse": { "properties": { - "groups": { - "description": "Top-level category groups, each with the categories it contains.", + "wikis": { "items": { - "$ref": "#/definitions/trustpilot.CategoryGroup" + "$ref": "#/definitions/sportskeeda.WikiOption" }, "type": "array" } }, "type": "object" }, - "trustpilot.CategoryBusiness": { + "sportskeeda.WikiPageItem": { "properties": { - "business_unit_id": { - "description": "Trustpilot id of the business.", - "example": "5e18c99abe863e0001b6ff0c", - "type": "string" - }, - "categories": { - "description": "Categories the business is tagged with.", - "items": { - "$ref": "#/definitions/trustpilot.CategoryBusinessTag" - }, - "type": "array" - }, - "display_name": { - "description": "Display name of the business on Trustpilot.", - "example": "Houzeo", - "type": "string" - }, - "email": { - "description": "Contact email address of the business.", - "example": "support@houzeo.com", + "id": { "type": "string" }, - "identifying_name": { - "description": "Business slug used in the Trustpilot profile URL, usually the website domain. Use it with the business endpoint.", - "example": "www.houzeo.com", + "image": { "type": "string" }, - "location": { - "allOf": [ - { - "$ref": "#/definitions/trustpilot.CategoryBusinessLocation" - } - ], - "description": "Location of the business. Omitted when Trustpilot lists none." - }, - "logo_url": { - "description": "URL of the business's logo.", - "example": "https://s3-eu-west-1.amazonaws.com/tpd/screenshotlogo-domain/example/198x149.png", - "type": "string" + "meta": { + "$ref": "#/definitions/sportskeeda.WikiPageMeta" }, - "phone": { - "description": "Contact phone number of the business.", - "example": "(844) 448-0110", + "path_slug": { "type": "string" }, - "recommended": { - "description": "Whether Trustpilot recommends the business in its categories.", - "example": true, - "type": "boolean" - }, - "review_count": { - "description": "Total number of reviews the business has on Trustpilot.", - "example": 3473, + "post_count": { "type": "integer" }, - "stars": { - "description": "Star rating of the business, out of 5.", - "example": 5, - "type": "number" - }, - "trust_score": { - "description": "Trustpilot TrustScore of the business, as a decimal number.", - "example": 4.8, - "type": "number" - }, - "trustpilot_url": { - "description": "URL of the business profile on Trustpilot.", - "example": "https://www.trustpilot.com/review/www.houzeo.com", - "type": "string" - }, - "website_url": { - "description": "Website address of the business.", - "example": "https://www.houzeo.com", - "type": "string" - } - }, - "type": "object" - }, - "trustpilot.CategoryBusinessLocation": { - "properties": { - "address": { - "description": "Street address of the business.", + "slug": { "type": "string" }, - "city": { - "description": "City of the business.", + "taxonomy": { "type": "string" }, - "country": { - "description": "Country of the business.", + "title": { "type": "string" }, - "zip_code": { - "description": "Postal code of the business.", + "url": { "type": "string" } }, "type": "object" }, - "trustpilot.CategoryBusinessTag": { + "sportskeeda.WikiPageMeta": { "properties": { - "category_id": { - "description": "Trustpilot category id, such as `software_company`.", - "example": "software_company", - "type": "string" + "issues_count": { + "type": "integer" }, - "display_name": { - "description": "Display name of the category.", - "example": "Software Company", + "last_updated": { "type": "string" }, - "is_predicted": { - "description": "Whether Trustpilot predicted this category for the business.", - "example": false, - "type": "boolean" + "page_size": { + "type": "integer" }, - "is_primary": { - "description": "Whether this is the business's primary category.", - "example": true, - "type": "boolean" + "ratings": { + "type": "string" } }, "type": "object" }, - "trustpilot.CategoryGroup": { + "sportskeeda.WikiPagesResponse": { "properties": { "items": { - "description": "Categories that belong to this group.", "items": { - "$ref": "#/definitions/trustpilot.CategoryLink" + "$ref": "#/definitions/sportskeeda.WikiPageItem" }, "type": "array" }, - "name": { - "description": "Display name of the category group.", - "example": "Electronics & Technology", + "limit": { + "type": "integer" + }, + "page": { + "type": "integer" + }, + "search": { "type": "string" }, - "slug": { - "description": "Slug of the category group, such as `electronics_technology`.", - "example": "electronics_technology", + "sort": { "type": "string" }, - "url": { - "description": "URL of the category group page on Trustpilot.", - "example": "https://www.trustpilot.com/categories/electronics_technology", + "sort_by": { + "type": "string" + }, + "total_items": { + "type": "integer" + }, + "wiki": { "type": "string" } }, "type": "object" }, - "trustpilot.CategoryLink": { + "sportskeeda.WikiSummaryResponse": { "properties": { - "name": { - "description": "Display name of the category.", - "example": "Software Company", - "type": "string" + "open_issues_count": { + "type": "integer" }, "slug": { - "description": "Category slug. Use it with the category endpoint.", - "example": "software_company", "type": "string" }, - "url": { - "description": "URL of the category page on Trustpilot.", - "example": "https://www.trustpilot.com/categories/software_company", + "total_activity_count": { + "type": "integer" + }, + "total_contributor_count": { + "type": "integer" + }, + "wiki": { "type": "string" } }, "type": "object" }, - "trustpilot.CategoryPagination": { + "spotify.AlbumMeta": { "properties": { - "has_next_page": { - "description": "Whether another page of businesses follows this one.", - "example": true, - "type": "boolean" - }, - "next_page": { - "description": "Number of the next page. Omitted on the last page.", - "example": 3, - "type": "integer" - }, - "page": { - "description": "Page number returned.", - "example": 2, - "type": "integer" + "appVersion": { + "description": "Version of the Spotify web player the data was read from.", + "type": "string" }, - "per_page": { - "description": "Number of businesses per page.", - "example": 20, - "type": "integer" + "fetchedAt": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "type": "string" }, - "total_hits": { - "description": "Total number of businesses in the category.", - "example": 7963, - "type": "integer" + "operationName": { + "description": "Name of the Spotify web player operation that returned the data.", + "type": "string" }, - "total_pages": { - "description": "Total number of pages in the category.", - "example": 399, + "trackCount": { + "description": "Number of tracks returned.", "type": "integer" } }, "type": "object" }, - "trustpilot.CategoryResponse": { + "spotify.AlbumResponse": { "properties": { - "breadcrumbs": { - "description": "Parent categories leading to this category.", + "albumType": { + "description": "Album format as Spotify labels it.", + "type": "string" + }, + "artists": { + "description": "Artists credited on the album.", "items": { - "$ref": "#/definitions/trustpilot.CategoryLink" + "$ref": "#/definitions/spotify.SearchResultSummary" }, "type": "array" }, - "country": { - "description": "Country the listing is filtered to, as Trustpilot reports it.", - "example": "US", - "type": "string" - }, - "items": { - "description": "Businesses listed on this page of the category.", + "copyrights": { + "description": "Copyright notices listed for the album.", "items": { - "$ref": "#/definitions/trustpilot.CategoryBusiness" + "type": "string" }, "type": "array" }, - "name": { - "description": "Display name of the category.", - "example": "Software Company", + "durationMs": { + "description": "Total album length in milliseconds.", + "type": "integer" + }, + "externalUrl": { + "description": "Link to the album on open.spotify.com.", "type": "string" }, - "newest_companies": { - "description": "Businesses recently added to the category.", + "id": { + "description": "Spotify ID of the album.", + "type": "string" + }, + "imageUrl": { + "description": "URL of the album cover image.", + "type": "string" + }, + "images": { + "description": "Cover images available for the album, with their sizes.", "items": { - "$ref": "#/definitions/trustpilot.CategoryBusiness" + "$ref": "#/definitions/spotify.ImageAsset" }, "type": "array" }, - "page": { - "description": "Page number returned.", - "example": 2, + "isExplicit": { + "description": "Whether Spotify marks the album as explicit.", + "type": "boolean" + }, + "isPlayable": { + "description": "Whether the album can be played.", + "type": "boolean" + }, + "limit": { + "description": "Maximum number of tracks requested.", "type": "integer" }, - "pagination": { + "meta": { "allOf": [ { - "$ref": "#/definitions/trustpilot.CategoryPagination" + "$ref": "#/definitions/spotify.AlbumMeta" } ], - "description": "Paging details for the category listing." + "description": "Details about this response." }, - "recently_reviewed_companies": { - "description": "Businesses in the category that were reviewed recently.", - "items": { - "$ref": "#/definitions/trustpilot.CategoryBusiness" - }, - "type": "array" + "name": { + "description": "Album title as Spotify shows it.", + "type": "string" }, - "related_categories": { - "description": "Categories related to this one.", - "items": { - "$ref": "#/definitions/trustpilot.CategoryLink" - }, - "type": "array" + "offset": { + "description": "Position of the first track returned.", + "type": "integer" }, - "slug": { - "description": "Category slug, such as `software_company`.", - "example": "software_company", + "releaseDate": { + "description": "Date the album was released, as Spotify returns it.", "type": "string" }, - "sort": { - "description": "Sort order of the listing, as Trustpilot reports it, such as `recommended`.", - "example": "recommended", + "shareUrl": { + "description": "Link to the album that Spotify offers for sharing.", "type": "string" }, - "trustpilot_url": { - "description": "URL of the category page on Trustpilot.", - "example": "https://www.trustpilot.com/categories/software_company", - "type": "string" - } - }, - "type": "object" - }, - "trustpilot.CategorySearchResponse": { - "properties": { - "categories": { - "description": "Categories matching the query.", + "totalTracks": { + "description": "Total number of tracks on the album.", + "type": "integer" + }, + "tracks": { + "description": "Tracks returned for the album.", "items": { - "$ref": "#/definitions/trustpilot.CategorySearchResult" + "$ref": "#/definitions/spotify.SearchResultSummary" }, "type": "array" }, - "country": { - "description": "Two-letter country code the search was run for.", - "example": "US", - "type": "string" - }, - "locale": { - "description": "Locale the search was run for, such as `en-US`.", - "example": "en-US", + "type": { + "description": "Kind of item as Spotify labels it, for example `Album`.", "type": "string" }, - "query": { - "description": "Query that was run.", - "example": "openai", + "uri": { + "description": "Spotify URI of the album.", "type": "string" - }, - "size": { - "description": "Maximum number of categories requested.", - "example": 3, - "type": "integer" } }, "type": "object" }, - "trustpilot.CategorySearchResult": { + "spotify.ArtistAlbumsMeta": { "properties": { - "category_id": { - "description": "Trustpilot category id, such as `software_company`.", - "example": "software_company", + "appVersion": { + "description": "Version of the Spotify web player the data was read from.", "type": "string" }, - "display_name": { - "description": "Display name of the category.", - "example": "Software Company", + "count": { + "description": "Number of releases returned.", + "type": "integer" + }, + "fetchedAt": { + "description": "Time the data was fetched, in UTC (RFC 3339).", "type": "string" }, - "top_level_category_id": { - "description": "Id of the top-level category group the category belongs to.", - "example": "electronics_technology", + "operationName": { + "description": "Name of the Spotify web player operation that returned the data.", "type": "string" } }, "type": "object" }, - "trustpilot.RelatedBusiness": { + "spotify.ArtistAlbumsResponse": { "properties": { - "business_unit_id": { - "description": "Trustpilot id of the related business.", - "example": "63e1530f2ba9106ee583e099", + "id": { + "description": "Spotify ID of the artist.", "type": "string" }, - "display_name": { - "description": "Display name of the related business.", - "example": "Chatgpt", - "type": "string" + "items": { + "description": "Releases returned for the artist.", + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" }, - "identifying_name": { - "description": "Slug of the related business, usually its website domain. Use it with the business endpoint.", - "example": "chatgpt.com", - "type": "string" + "limit": { + "description": "Maximum number of releases requested.", + "type": "integer" }, - "logo_url": { - "description": "URL of the related business's logo.", - "example": "https://s3-eu-west-1.amazonaws.com/tpd/screenshots/example/198x149.png", - "type": "string" + "meta": { + "allOf": [ + { + "$ref": "#/definitions/spotify.ArtistAlbumsMeta" + } + ], + "description": "Details about this response." }, - "review_count": { - "description": "Total number of reviews the related business has.", - "example": 2720, + "offset": { + "description": "Position of the first release returned.", "type": "integer" }, - "source": { - "description": "Section of the profile page the business came from: `suggested_companies` or `also_viewed`.", - "example": "suggested_companies", + "order": { + "description": "Sort order that was applied: `date_desc`, `date_asc`, `name_asc` or `name_desc`.", "type": "string" }, - "stars": { - "description": "Star rating of the related business, out of 5.", - "example": 1.5, - "type": "number" + "total": { + "description": "Total number of releases of this type on Spotify.", + "type": "integer" }, - "trust_score": { - "description": "Trustpilot TrustScore of the related business, as a decimal number.", - "example": 1.6, - "type": "number" + "type": { + "description": "Release type that was requested: `album`, `single`, `compilation`, `appears_on` or `all`.", + "type": "string" }, - "trustpilot_url": { - "description": "URL of the related business's profile on Trustpilot.", - "example": "https://www.trustpilot.com/review/chatgpt.com", + "uri": { + "description": "Spotify URI of the artist.", "type": "string" } }, "type": "object" }, - "trustpilot.SearchAddress": { + "spotify.ArtistCollectionMeta": { "properties": { - "approximate_area": { - "allOf": [ - { - "$ref": "#/definitions/trustpilot.SearchAreaBounds" - } - ], - "description": "Bounding box of the approximate area the address falls in." - }, - "city": { - "description": "City of the business.", - "example": "San Francisco", - "type": "string" - }, - "coordinates": { - "allOf": [ - { - "$ref": "#/definitions/trustpilot.SearchCoordinates" - } - ], - "description": "Latitude and longitude of the business." - }, - "country": { - "description": "Country name of the business.", - "example": "United States", + "appVersion": { + "description": "Version of the Spotify web player the data was read from.", "type": "string" }, - "country_code": { - "description": "Country code of the business, such as `US`.", - "example": "US", - "type": "string" + "count": { + "description": "Number of items returned.", + "type": "integer" }, - "postcode": { - "description": "Postal code of the business.", - "example": "94105", + "fetchedAt": { + "description": "Time the data was fetched, in UTC (RFC 3339).", "type": "string" }, - "street": { - "description": "Street address of the business.", - "example": "1 Market St", + "operationName": { + "description": "Name of the Spotify web player operation that returned the data.", "type": "string" } }, "type": "object" }, - "trustpilot.SearchAreaBounds": { + "spotify.ArtistCollectionResponse": { "properties": { - "north_west": { - "allOf": [ - { - "$ref": "#/definitions/trustpilot.SearchCoordinates" - } - ], - "description": "North-west corner of the area." + "id": { + "description": "Spotify ID of the artist.", + "type": "string" }, - "south_east": { + "items": { + "description": "Playlists or related artists returned for the artist.", + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" + }, + "meta": { "allOf": [ { - "$ref": "#/definitions/trustpilot.SearchCoordinates" + "$ref": "#/definitions/spotify.ArtistCollectionMeta" } ], - "description": "South-east corner of the area." - } - }, - "type": "object" - }, - "trustpilot.SearchCategory": { - "properties": { - "id": { - "description": "Trustpilot category id, such as `software_company`.", - "example": "software_company", - "type": "string" + "description": "Details about this response." }, - "name": { - "description": "Display name of the category.", - "example": "Software Company", + "uri": { + "description": "Spotify URI of the artist.", "type": "string" - }, - "primary": { - "description": "Whether this is the business's primary category.", - "example": true, - "type": "boolean" - } - }, - "type": "object" - }, - "trustpilot.SearchCoordinates": { - "properties": { - "lat": { - "description": "Latitude in decimal degrees.", - "example": 39.7837304, - "type": "number" - }, - "lon": { - "description": "Longitude in decimal degrees.", - "example": -100.445882, - "type": "number" } }, "type": "object" }, - "trustpilot.SearchResponse": { + "spotify.ArtistMeta": { "properties": { - "country": { - "description": "Two-letter country code the search was run for.", - "example": "US", + "appVersion": { + "description": "Version of the Spotify web player the data was read from.", "type": "string" }, - "items": { - "description": "Businesses matching the query on this page.", - "items": { - "$ref": "#/definitions/trustpilot.SearchResult" - }, - "type": "array" - }, - "page": { - "description": "Page number returned.", - "example": 1, - "type": "integer" - }, - "page_size": { - "description": "Number of results per page.", - "example": 5, + "discographyCount": { + "description": "Number of discography entries returned.", "type": "integer" }, - "query": { - "description": "Query that was run.", - "example": "openai", + "fetchedAt": { + "description": "Time the data was fetched, in UTC (RFC 3339).", "type": "string" }, - "search_mode": { - "description": "How Trustpilot matched the query, such as `keyword`.", - "example": "keyword", + "operationName": { + "description": "Name of the Spotify web player operation that returned the data.", "type": "string" }, - "total_hits": { - "description": "Total number of businesses matching the query.", - "example": 147, + "playlistCount": { + "description": "Number of playlists returned.", "type": "integer" }, - "total_pages": { - "description": "Total number of result pages.", - "example": 30, + "relatedCount": { + "description": "Number of related artists returned.", + "type": "integer" + }, + "topTrackCount": { + "description": "Number of top tracks returned.", "type": "integer" } }, "type": "object" }, - "trustpilot.SearchResult": { + "spotify.ArtistResponse": { "properties": { - "address": { - "allOf": [ - { - "$ref": "#/definitions/trustpilot.SearchAddress" - } - ], - "description": "Address of the business. Omitted when Trustpilot lists none." - }, - "business_unit_id": { - "description": "Trustpilot id of the business.", - "example": "630f21bc9f08b0302a52590d", + "biography": { + "description": "Artist biography text.", "type": "string" }, - "categories": { - "description": "Categories the business is listed under.", + "discography": { + "description": "Selection of the artist's albums and releases.", "items": { - "$ref": "#/definitions/trustpilot.SearchCategory" + "$ref": "#/definitions/spotify.SearchResultSummary" }, "type": "array" }, - "country_code": { - "description": "Country code of the business, such as `FR`.", - "example": "FR", - "type": "string" - }, - "display_name": { - "description": "Display name of the business on Trustpilot.", - "example": "OpenAI", + "externalUrl": { + "description": "Link to the artist on open.spotify.com.", "type": "string" }, - "email": { - "description": "Contact email address of the business.", - "example": "hello@example.com", - "type": "string" + "followers": { + "description": "Number of Spotify followers the artist has.", + "type": "integer" }, - "identifying_name": { - "description": "Business slug used in the Trustpilot profile URL, usually the website domain. Use it with the business endpoint.", - "example": "openai.com", + "id": { + "description": "Spotify ID of the artist.", "type": "string" }, - "logo_url": { - "description": "URL of the business's logo.", - "example": "https://s3-eu-west-1.amazonaws.com/tpd/logos/example/0x0.png", + "imageUrl": { + "description": "URL of the main artist image.", "type": "string" }, - "phone": { - "description": "Contact phone number of the business.", - "example": "+1-555-555-5555", - "type": "string" + "images": { + "description": "Images available for the artist, with their sizes.", + "items": { + "$ref": "#/definitions/spotify.ImageAsset" + }, + "type": "array" }, - "predicted_top_category": { + "meta": { "allOf": [ { - "$ref": "#/definitions/trustpilot.SearchCategory" + "$ref": "#/definitions/spotify.ArtistMeta" } ], - "description": "Category Trustpilot predicts as the business's top category." + "description": "Details about this response." }, - "review_count": { - "description": "Total number of reviews the business has on Trustpilot.", - "example": 984, + "monthlyUsers": { + "description": "Number of monthly listeners Spotify shows for the artist.", "type": "integer" }, - "stars": { - "description": "Star rating of the business, out of 5.", - "example": 1.5, - "type": "number" - }, - "trust_score": { - "description": "Trustpilot TrustScore of the business, as a decimal number.", - "example": 1.3, - "type": "number" - }, - "trustpilot_url": { - "description": "URL of the business profile on Trustpilot.", - "example": "https://www.trustpilot.com/review/openai.com", - "type": "string" - }, - "verified": { - "description": "Whether Trustpilot marks the business as verified.", - "example": false, - "type": "boolean" - }, - "website_url": { - "description": "Website address of the business.", - "example": "https://openai.com", - "type": "string" - } - }, - "type": "object" - }, - "trustpilot.businessHeader": { - "properties": { - "claimed": { - "description": "Whether the business has claimed its Trustpilot profile.", - "example": false, - "type": "boolean" - }, "name": { - "description": "Display name of the business on Trustpilot.", - "example": "OpenAI", + "description": "Artist name as Spotify shows it.", "type": "string" }, - "rating": { - "description": "Star rating shown on the business profile, out of 5.", - "example": 1.5, - "type": "number" + "playlists": { + "description": "Playlists featuring the artist.", + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" }, - "review_count": { - "description": "Total number of reviews the business has on Trustpilot.", - "example": 984, - "type": "integer" + "related": { + "description": "Artists related to this artist.", + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" }, - "slug": { - "description": "Business slug used in the Trustpilot profile URL, usually the website domain.", - "example": "openai.com", + "shareUrl": { + "description": "Link to the artist that Spotify offers for sharing.", "type": "string" }, - "trust_score": { - "description": "Trustpilot TrustScore of the business, as a decimal number.", - "example": 1.3, - "type": "number" + "topTracks": { + "description": "Most popular tracks of the artist.", + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" }, - "trustpilot_url": { - "description": "URL of the business profile on Trustpilot.", - "example": "https://www.trustpilot.com/review/openai.com", + "type": { + "description": "Kind of item as Spotify labels it, for example `Artist`.", "type": "string" }, - "website_url": { - "description": "Website address of the business.", - "example": "https://openai.com", + "uri": { + "description": "Spotify URI of the artist.", "type": "string" - } - }, - "type": "object" - }, - "trustpilot.businessProfileResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/trustpilot.BusinessResponse" }, - "msg": { - "example": "OK", - "type": "string" + "verified": { + "description": "Whether Spotify shows the artist as verified.", + "type": "boolean" } }, "type": "object" }, - "trustpilot.businessRelatedResponseDoc": { + "spotify.AudiobookChaptersMeta": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/trustpilot.BusinessRelatedResponse" - }, - "msg": { - "example": "OK", + "appVersion": { + "description": "Version of the Spotify web player the data was read from.", "type": "string" - } - }, - "type": "object" - }, - "trustpilot.businessReviewsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "count": { + "description": "Number of chapters returned.", "type": "integer" }, - "data": { - "$ref": "#/definitions/trustpilot.BusinessReviewsResponse" + "fetchedAt": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "type": "string" }, - "msg": { - "example": "OK", + "operationName": { + "description": "Name of the Spotify web player operation that returned the data.", "type": "string" } }, "type": "object" }, - "trustpilot.businessSearchResponseDoc": { + "spotify.AudiobookChaptersResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/trustpilot.SearchResponse" + "chapters": { + "description": "Chapters returned for the audiobook.", + "items": { + "$ref": "#/definitions/spotify.PodcastEpisodeSummary" + }, + "type": "array" }, - "msg": { - "example": "OK", + "id": { + "description": "Spotify ID of the audiobook.", "type": "string" - } - }, - "type": "object" - }, - "trustpilot.categoriesResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "limit": { + "description": "Maximum number of chapters requested.", "type": "integer" }, - "data": { - "$ref": "#/definitions/trustpilot.CategoriesResponse" + "meta": { + "allOf": [ + { + "$ref": "#/definitions/spotify.AudiobookChaptersMeta" + } + ], + "description": "Details about this response." }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "trustpilot.categoryResponseDoc": { - "properties": { - "code": { - "example": 200, + "offset": { + "description": "Position of the first chapter returned.", "type": "integer" }, - "data": { - "$ref": "#/definitions/trustpilot.CategoryResponse" + "total": { + "description": "Total number of chapters in the audiobook.", + "type": "integer" }, - "msg": { - "example": "OK", + "uri": { + "description": "Spotify URI of the audiobook.", "type": "string" } }, "type": "object" }, - "trustpilot.categorySearchResponseDoc": { + "spotify.AudiobookMeta": { "properties": { - "code": { - "example": 200, - "type": "integer" + "appVersion": { + "description": "Version of the Spotify web player the data was read from.", + "type": "string" }, - "data": { - "$ref": "#/definitions/trustpilot.CategorySearchResponse" + "fetchedAt": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "type": "string" }, - "msg": { - "example": "OK", + "operationName": { + "description": "Name of the Spotify web player operation that returned the data.", "type": "string" } }, "type": "object" }, - "twitch.ChannelGame": { + "spotify.AudiobookResponse": { "properties": { - "id": { - "type": "string" + "authors": { + "description": "Names of the audiobook's authors.", + "items": { + "type": "string" + }, + "type": "array" }, - "name": { - "example": "League of Legends", + "description": { + "description": "Description text of the audiobook.", "type": "string" }, - "slug": { - "example": "league-of-legends", + "externalUrl": { + "description": "Link to the audiobook on open.spotify.com.", "type": "string" - } - }, - "type": "object" - }, - "twitch.ChannelResponse": { - "properties": { + }, "id": { + "description": "Spotify ID of the audiobook.", "type": "string" }, - "is_live": { - "example": true, - "type": "boolean" + "imageUrl": { + "description": "URL of the audiobook cover image.", + "type": "string" }, - "is_partner": { - "example": true, + "images": { + "description": "Cover images available for the audiobook, with their sizes.", + "items": { + "$ref": "#/definitions/spotify.ImageAsset" + }, + "type": "array" + }, + "isExplicit": { + "description": "Whether Spotify marks the audiobook as explicit.", "type": "boolean" }, - "last_broadcast_title": { + "mediaType": { + "description": "Kind of media the audiobook carries, as Spotify labels it.", "type": "string" }, - "login": { - "type": "string" + "meta": { + "allOf": [ + { + "$ref": "#/definitions/spotify.AudiobookMeta" + } + ], + "description": "Details about this response." }, - "primary_color_hex": { - "example": "8205B3", + "name": { + "description": "Audiobook title as Spotify shows it.", "type": "string" }, - "primary_team": { - "$ref": "#/definitions/twitch.ChannelTeam" + "narrators": { + "description": "Names of the audiobook's narrators.", + "items": { + "type": "string" + }, + "type": "array" }, - "profile_image_url": { + "publisher": { + "description": "Name of the audiobook's publisher.", "type": "string" }, - "stream": { - "$ref": "#/definitions/twitch.ChannelStream" - } - }, - "type": "object" - }, - "twitch.ChannelStream": { - "properties": { - "game": { - "$ref": "#/definitions/twitch.ChannelGame" + "totalChapters": { + "description": "Total number of chapters in the audiobook.", + "type": "integer" }, - "id": { + "type": { + "description": "Kind of item as Spotify labels it, for example `Audiobook`.", "type": "string" }, - "started_at": { - "example": "2026-08-14T07:18:46Z", + "uri": { + "description": "Spotify URI of the audiobook.", "type": "string" } }, "type": "object" }, - "twitch.ChannelTeam": { + "spotify.BrowsePageItem": { "properties": { - "id": { + "description": { + "description": "Description text of the item.", + "example": "The official podcast of comedian Joe Rogan.", "type": "string" }, - "name": { - "example": "yumetalent", - "type": "string" - } - }, - "type": "object" - }, - "twitch.Clip": { - "properties": { - "created_at": { - "example": "2026-08-07T10:59:22Z", + "externalUrl": { + "description": "Link to the item on open.spotify.com.", + "example": "https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk", "type": "string" }, - "curator": { - "$ref": "#/definitions/twitch.ClipCurator" - }, - "duration_seconds": { - "example": 42, - "type": "number" + "imageUrl": { + "description": "URL of the main image for the item.", + "example": "https://i.scdn.co/image/ab67656300005f1f54e6837957803d762a3f4d2b", + "type": "string" }, - "game": { - "$ref": "#/definitions/twitch.ClipGame" + "images": { + "description": "Images available for the item, with their sizes.", + "items": { + "$ref": "#/definitions/spotify.ImageAsset" + }, + "type": "array" }, - "id": { + "publisher": { + "description": "Publisher or creator name of the item.", + "example": "Joe Rogan", "type": "string" }, - "thumbnail_url": { + "subtitle": { + "description": "Secondary line shown under the item title, such as the creator name.", + "example": "Joe Rogan", "type": "string" }, "title": { + "description": "Item title as Spotify shows it.", + "example": "The Joe Rogan Experience", "type": "string" }, - "url": { + "type": { + "description": "Kind of item as Spotify labels it, for example `Podcast`.", + "example": "Podcast", "type": "string" }, - "view_count": { - "example": 5370, - "type": "integer" + "uri": { + "description": "Spotify URI of the item.", + "example": "spotify:show:4rOoJ6Egrf8K2IrywzwOMk", + "type": "string" } }, "type": "object" }, - "twitch.ClipCurator": { + "spotify.BrowsePageMeta": { "properties": { - "display_name": { + "appVersion": { + "description": "Version of the Spotify web player the data was read from.", + "example": "1.2.90.403.gf901f20f", "type": "string" }, - "id": { + "fetchedAt": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-05-13T20:41:12Z", "type": "string" }, - "login": { + "operationName": { + "description": "Name of the Spotify web player operation that returned the data.", + "example": "browsePage", "type": "string" + }, + "sectionCount": { + "description": "Number of sections returned.", + "example": 8, + "type": "integer" } }, "type": "object" }, - "twitch.ClipGame": { + "spotify.BrowsePageResponse": { "properties": { - "id": { + "meta": { + "allOf": [ + { + "$ref": "#/definitions/spotify.BrowsePageMeta" + } + ], + "description": "Details about this response." + }, + "sections": { + "description": "Sections of the page, in display order.", + "items": { + "$ref": "#/definitions/spotify.BrowsePageSection" + }, + "type": "array" + }, + "subtitle": { + "description": "Secondary line shown under the page title.", + "example": "New shows and episodes", "type": "string" }, - "name": { - "example": "League of Legends", + "title": { + "description": "Page title as Spotify shows it.", + "example": "Podcasts", "type": "string" }, - "slug": { - "example": "league-of-legends", + "type": { + "description": "Kind of page container as Spotify labels it.", + "example": "BrowseSectionContainer", + "type": "string" + }, + "uri": { + "description": "Spotify URI of the page that was loaded.", + "example": "spotify:genre:podcasts-web", "type": "string" } }, "type": "object" }, - "twitch.ClipsResponse": { + "spotify.BrowsePageSection": { "properties": { - "clips": { + "items": { + "description": "Items returned for this section.", "items": { - "$ref": "#/definitions/twitch.Clip" + "$ref": "#/definitions/spotify.BrowsePageItem" }, "type": "array" }, - "count": { - "example": 20, - "type": "integer" - }, - "login": { - "type": "string" - } - }, - "type": "object" - }, - "twitch.ScheduleCategory": { - "properties": { - "box_art_url": { + "subtitle": { + "description": "Secondary line shown under the section heading.", + "example": "Recommended shows", "type": "string" }, - "id": { + "title": { + "description": "Section heading as Spotify shows it.", + "example": "Popular podcasts", "type": "string" }, - "name": { - "example": "League of Legends", + "totalCount": { + "description": "Total number of items in the section on Spotify.", + "example": 20, + "type": "integer" + }, + "type": { + "description": "Kind of section as Spotify labels it.", + "example": "BrowseGenericSectionData", "type": "string" }, - "slug": { - "example": "league-of-legends", + "uri": { + "description": "Spotify URI of the section.", + "example": "spotify:section:0JQ5IMCbQBLqNPkcmYxQPQ", "type": "string" } }, "type": "object" }, - "twitch.ScheduleResponse": { + "spotify.BrowseSectionMeta": { "properties": { - "channel": { + "appVersion": { + "description": "Version of the Spotify web player the data was read from.", + "example": "1.2.90.403.gf901f20f", "type": "string" }, "count": { - "example": 5, + "description": "Number of items returned.", + "example": 20, "type": "integer" }, - "next_segment_at": { - "example": "2026-08-15T12:00:00Z", + "fetchedAt": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-05-13T20:41:12Z", "type": "string" }, - "next_segment_id": { + "operationName": { + "description": "Name of the Spotify web player operation that returned the data.", + "example": "browseSection", "type": "string" - }, - "segments": { - "items": { - "$ref": "#/definitions/twitch.ScheduleSegment" - }, - "type": "array" } }, "type": "object" }, - "twitch.ScheduleSegment": { + "spotify.BrowseSectionResponse": { "properties": { - "cancelled_until": { - "type": "string" - }, - "categories": { + "items": { + "description": "Items returned for this section.", "items": { - "$ref": "#/definitions/twitch.ScheduleCategory" + "$ref": "#/definitions/spotify.BrowsePageItem" }, "type": "array" }, - "end_at": { - "example": "2026-08-15T19:00:00Z", + "limit": { + "description": "Maximum number of items requested.", + "example": 20, + "type": "integer" + }, + "meta": { + "allOf": [ + { + "$ref": "#/definitions/spotify.BrowseSectionMeta" + } + ], + "description": "Details about this response." + }, + "offset": { + "description": "Position of the first item returned within the section.", + "example": 0, + "type": "integer" + }, + "subtitle": { + "description": "Secondary line shown under the section heading.", + "example": "Recommended shows", "type": "string" }, - "id": { + "title": { + "description": "Section heading as Spotify shows it.", + "example": "Popular podcasts", "type": "string" }, - "is_cancelled": { - "example": false, - "type": "boolean" + "totalCount": { + "description": "Total number of items in the section on Spotify.", + "example": 50, + "type": "integer" }, - "start_at": { - "example": "2026-08-15T12:00:00Z", + "type": { + "description": "Kind of section as Spotify labels it.", + "example": "BrowseGenericSectionData", "type": "string" }, - "title": { - "example": "LEC", + "uri": { + "description": "Spotify URI of the section that was loaded.", + "example": "spotify:section:0JQ5IMCbQBLqNPkcmYxQPQ", "type": "string" } }, "type": "object" }, - "twitch.SearchCategory": { + "spotify.ChartItem": { "properties": { - "box_art_url": { + "description": { + "description": "Description text of the chart entry.", + "example": "The official podcast of comedian Joe Rogan.", "type": "string" }, - "id": { + "episodeDescription": { + "description": "Description text of the episode, for episode charts.", + "example": "A representative chart episode.", "type": "string" }, - "slug": { - "example": "valorant", + "episodeExternalUrl": { + "description": "Link to the episode on open.spotify.com, for episode charts.", + "example": "https://open.spotify.com/episode/2C2Y5kNq7qCVOVhbA0G3os", "type": "string" - } - }, - "type": "object" - }, - "twitch.SearchChannel": { - "properties": { - "game_name": { + }, + "episodeImageUrl": { + "description": "URL of the episode's cover image, for episode charts.", + "example": "https://i.scdn.co/image/ab67656300005f1f54e6837957803d762a3f4d2b", "type": "string" }, - "id": { + "episodeName": { + "description": "Episode title as Spotify shows it, for episode charts.", + "example": "Example episode", "type": "string" }, - "is_live": { - "example": true, - "type": "boolean" + "episodeUri": { + "description": "Spotify URI of the episode, for episode charts.", + "example": "spotify:episode:2C2Y5kNq7qCVOVhbA0G3os", + "type": "string" }, - "is_verified": { - "type": "boolean" + "externalUrl": { + "description": "Link to the chart entry on open.spotify.com.", + "example": "https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk", + "type": "string" }, - "login": { + "imageUrl": { + "description": "URL of the cover image for the chart entry.", + "example": "https://i.scdn.co/image/ab67656300005f1f54e6837957803d762a3f4d2b", "type": "string" }, - "profile_image_url": { + "name": { + "description": "Title of the chart entry (episode title for episode charts, otherwise show title).", + "example": "The Joe Rogan Experience", "type": "string" }, - "stream_title": { + "publisher": { + "description": "Name of the publisher of the show.", + "example": "Joe Rogan", "type": "string" }, - "viewers_count": { - "example": 3361, - "type": "integer" - } - }, - "type": "object" - }, - "twitch.SearchResponse": { - "properties": { - "count": { - "example": 10, + "rank": { + "description": "Position of the entry in the chart, starting at 1.", + "example": 1, "type": "integer" }, - "query": { + "rankMove": { + "description": "Change in rank since the previous chart period, as Spotify labels it, for example `UNCHANGED`.", + "example": "UNCHANGED", "type": "string" }, - "results": { - "items": { - "$ref": "#/definitions/twitch.SearchResult" - }, - "type": "array" + "showDescription": { + "description": "Description text of the show.", + "example": "The official podcast of comedian Joe Rogan.", + "type": "string" + }, + "showExternalUrl": { + "description": "Link to the show on open.spotify.com.", + "example": "https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk", + "type": "string" + }, + "showImageUrl": { + "description": "URL of the show's cover image.", + "example": "https://i.scdn.co/image/ab67656300005f1f54e6837957803d762a3f4d2b", + "type": "string" + }, + "showName": { + "description": "Show title as Spotify shows it.", + "example": "The Joe Rogan Experience", + "type": "string" + }, + "showPublisher": { + "description": "Name of the show's publisher.", + "example": "Joe Rogan", + "type": "string" + }, + "showUri": { + "description": "Spotify URI of the show.", + "example": "spotify:show:4rOoJ6Egrf8K2IrywzwOMk", + "type": "string" + }, + "uri": { + "description": "Spotify URI of the chart entry (an episode for episode charts, otherwise a show).", + "example": "spotify:show:4rOoJ6Egrf8K2IrywzwOMk", + "type": "string" } }, "type": "object" }, - "twitch.SearchResult": { + "spotify.ChartMeta": { "properties": { - "category": { - "$ref": "#/definitions/twitch.SearchCategory" - }, - "channel": { - "$ref": "#/definitions/twitch.SearchChannel" + "count": { + "description": "Number of chart entries returned.", + "example": 100, + "type": "integer" }, - "text": { + "fetchedAt": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-05-13T20:41:13Z", "type": "string" }, - "type": { - "description": "\"category\" or \"channel\"", - "example": "channel", + "sourceUrl": { + "description": "URL the data was read from.", + "example": "https://podcastcharts.byspotify.com/api/charts/top-podcasts?region=us", "type": "string" } }, "type": "object" }, - "twitch.Stream": { + "spotify.ChartResponse": { "properties": { - "broadcaster": { - "$ref": "#/definitions/twitch.StreamBroadcaster" + "chart": { + "description": "Chart identifier that was requested, for example `top-podcasts`.", + "example": "top-podcasts", + "type": "string" }, - "id": { + "chartName": { + "description": "Display name of the chart.", + "example": "Top Podcasts", "type": "string" }, - "preview_image_url": { + "chartType": { + "description": "Whether the chart is an overall `chart` or a `category` chart.", + "example": "chart", "type": "string" }, - "tags": { + "items": { + "description": "Chart entries, ordered by rank.", "items": { - "type": "string" + "$ref": "#/definitions/spotify.ChartItem" }, "type": "array" }, - "title": { - "type": "string" - }, - "viewers_count": { - "example": 56596, + "limit": { + "description": "Maximum number of chart entries requested.", + "example": 100, "type": "integer" - } - }, - "type": "object" - }, - "twitch.StreamBroadcaster": { - "properties": { - "display_name": { - "type": "string" }, - "id": { - "type": "string" + "meta": { + "allOf": [ + { + "$ref": "#/definitions/spotify.ChartMeta" + } + ], + "description": "Details about this response." }, - "is_partner": { - "example": true, - "type": "boolean" + "region": { + "description": "Region code the chart was loaded for.", + "example": "us", + "type": "string" }, - "login": { + "regionName": { + "description": "Name of the chart region.", + "example": "United States", "type": "string" } }, "type": "object" }, - "twitch.StreamsResponse": { + "spotify.CountryHubContentID": { "properties": { - "count": { - "example": 20, - "type": "integer" - }, - "game": { + "id": { + "description": "Content identifier to pass when requesting that section, for example `CHARTS`.", + "example": "CHARTS", "type": "string" }, - "streams": { - "items": { - "$ref": "#/definitions/twitch.Stream" - }, - "type": "array" + "title": { + "description": "Section heading as Spotify shows it.", + "example": "Featured Charts", + "type": "string" } }, "type": "object" }, - "twitch.TeamMember": { + "spotify.CountryHubContentMeta": { "properties": { - "display_name": { + "appVersion": { + "description": "Version of the Spotify web player the data was read from.", + "example": "1.2.90.403.gf901f20f", "type": "string" }, - "id": { + "fetchedAt": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-05-13T20:41:13Z", "type": "string" }, - "is_live": { - "example": true, - "type": "boolean" - }, - "login": { - "type": "string" + "itemCount": { + "description": "Number of items returned.", + "example": 20, + "type": "integer" }, - "profile_image_url": { + "operationName": { + "description": "Name of the Spotify web player operation that returned the data.", + "example": "countryHubContent", "type": "string" }, - "viewers_count": { - "example": 38251, + "partialErrors": { + "description": "PartialErrors counts upstream GraphQL field errors tolerated alongside\nusable items. Zero on a fully clean response.", + "example": 1, "type": "integer" } }, "type": "object" }, - "twitch.TeamResponse": { + "spotify.CountryHubContentResponse": { "properties": { - "banner_url": { + "contentId": { + "description": "Content identifier that was requested: `CHARTS`, `POPULAR_ALBUMS`, `POPULAR_ARTISTS` or `TRENDING_SONGS`.", + "example": "CHARTS", "type": "string" }, - "description": { + "countryCode": { + "description": "Country code the content was loaded for.", + "example": "US", "type": "string" }, - "display_name": { - "example": "Yume Talent", + "countryName": { + "description": "Name of the country.", + "example": "United States", "type": "string" }, - "id": { + "hexColor": { + "description": "Accent color of the country page, as a hex color code.", + "example": "#1DB954", "type": "string" }, - "logo_url": { - "type": "string" + "items": { + "description": "Items returned for the section.", + "items": { + "$ref": "#/definitions/spotify.CountryHubItem" + }, + "type": "array" }, - "member_count": { - "example": 5, - "type": "integer" + "meta": { + "allOf": [ + { + "$ref": "#/definitions/spotify.CountryHubContentMeta" + } + ], + "description": "Details about this response." }, - "members": { + "supportedContentIds": { + "description": "Content sections available on the country page.", "items": { - "$ref": "#/definitions/twitch.TeamMember" + "$ref": "#/definitions/spotify.CountryHubContentID" }, "type": "array" }, - "name": { - "type": "string" + "supportedCountries": { + "description": "Countries Spotify offers a popular-in page for.", + "items": { + "$ref": "#/definitions/spotify.PopularCountry" + }, + "type": "array" }, - "owner_login": { + "title": { + "description": "Section heading as Spotify shows it.", + "example": "Featured Charts", "type": "string" } }, "type": "object" }, - "twitch.TopGame": { + "spotify.CountryHubItem": { "properties": { - "box_art_url": { - "type": "string" + "album": { + "allOf": [ + { + "$ref": "#/definitions/spotify.SearchResultSummary" + } + ], + "description": "Album the item appears on." }, - "id": { - "type": "string" + "artists": { + "description": "Artists credited on the item.", + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" }, - "name": { - "example": "Dota 2", - "type": "string" + "attributes": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional key-value attributes Spotify returns for the item.", + "example": { + "{\"chart\"": "\"top-50\"}" + }, + "type": "object" }, - "slug": { - "example": "dota-2", + "description": { + "description": "Description text of the item.", + "example": "Your daily update of the most played tracks right now.", "type": "string" }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" + "externalUrl": { + "description": "Link to the item on open.spotify.com.", + "example": "https://open.spotify.com/playlist/37i9dQZEVXbLRQDuF5jeBpM", + "type": "string" }, - "viewers_count": { - "example": 390201, - "type": "integer" - } - }, - "type": "object" - }, - "twitch.TopGamesResponse": { - "properties": { - "count": { - "example": 20, - "type": "integer" + "imageUrl": { + "description": "URL of the main image for the item.", + "example": "https://charts-images.scdn.co/assets/locale_en/regional/daily/region_us_default.jpg", + "type": "string" }, - "games": { + "images": { + "description": "Images available for the item, with their sizes.", "items": { - "$ref": "#/definitions/twitch.TopGame" + "$ref": "#/definitions/spotify.ImageAsset" }, "type": "array" - } - }, - "type": "object" - }, - "twitch.Video": { - "properties": { - "game": { - "$ref": "#/definitions/twitch.ClipGame" - }, - "id": { - "type": "string" - }, - "length_seconds": { - "example": 20818, - "type": "integer" }, "owner": { - "$ref": "#/definitions/twitch.VideoOwner" + "allOf": [ + { + "$ref": "#/definitions/spotify.SearchResultSummary" + } + ], + "description": "User or account that owns the item." }, - "published_at": { - "example": "2022-04-02T07:10:16Z", + "subtitle": { + "description": "Secondary line shown under the item title.", + "example": "Spotify", "type": "string" }, - "thumbnail_url": { + "title": { + "description": "Item title as Spotify shows it.", + "example": "Top 50 - USA", "type": "string" }, - "title": { + "type": { + "description": "Kind of item as Spotify labels it, for example `Playlist`.", + "example": "Playlist", "type": "string" }, - "view_count": { - "example": 2800795, - "type": "integer" + "uri": { + "description": "Spotify URI of the item.", + "example": "spotify:playlist:37i9dQZEVXbLRQDuF5jeBpM", + "type": "string" } }, "type": "object" }, - "twitch.VideoOwner": { + "spotify.CountryHubMeta": { "properties": { - "display_name": { + "appVersion": { + "description": "Version of the Spotify web player the data was read from.", + "example": "1.2.90.403.gf901f20f", "type": "string" }, - "id": { + "fetchedAt": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-05-13T20:41:13Z", "type": "string" }, - "is_partner": { - "example": true, - "type": "boolean" + "itemCount": { + "description": "Number of items returned across all sections.", + "example": 20, + "type": "integer" }, - "login": { + "operationName": { + "description": "Name of the Spotify web player operation that returned the data.", + "example": "countryHubsPage", "type": "string" + }, + "partialErrors": { + "description": "PartialErrors counts upstream GraphQL field errors that were tolerated\nbecause usable shelves were still returned (e.g. one broken shelf among\nseveral). Zero on a fully clean response.", + "example": 1, + "type": "integer" + }, + "sectionCount": { + "description": "Number of sections returned.", + "example": 5, + "type": "integer" } }, "type": "object" }, - "twitch.VideosResponse": { + "spotify.CountryHubResponse": { "properties": { - "count": { - "example": 20, - "type": "integer" + "countryCode": { + "description": "Country code the hub was loaded for.", + "example": "US", + "type": "string" }, - "login": { + "countryName": { + "description": "Name of the country.", + "example": "United States", "type": "string" }, - "videos": { + "hexColor": { + "description": "Accent color of the country page, as a hex color code.", + "example": "#1DB954", + "type": "string" + }, + "meta": { + "allOf": [ + { + "$ref": "#/definitions/spotify.CountryHubMeta" + } + ], + "description": "Details about this response." + }, + "sections": { + "description": "Content sections of the country page.", "items": { - "$ref": "#/definitions/twitch.Video" + "$ref": "#/definitions/spotify.CountryHubSection" + }, + "type": "array" + }, + "supportedCountries": { + "description": "Countries Spotify offers a popular-in page for.", + "items": { + "$ref": "#/definitions/spotify.PopularCountry" }, "type": "array" } }, "type": "object" }, - "twitch.VodComment": { + "spotify.CountryHubSection": { "properties": { - "badges": { - "items": { - "type": "string" - }, - "type": "array" - }, - "commenter": { - "$ref": "#/definitions/twitch.VodCommentCommenter" - }, - "created_at": { - "example": "2026-08-14T07:20:39Z", + "contentId": { + "description": "Identifier of the section content, for example `CHARTS`.", + "example": "CHARTS", "type": "string" }, - "fragments": { + "items": { + "description": "Items returned for this section.", "items": { - "$ref": "#/definitions/twitch.VodCommentFragment" + "$ref": "#/definitions/spotify.CountryHubItem" }, "type": "array" }, - "id": { - "type": "string" - }, - "message": { + "title": { + "description": "Section heading as Spotify shows it.", + "example": "Featured Charts", "type": "string" }, - "offset_seconds": { - "example": 113, + "totalCount": { + "description": "Total number of items in the section on Spotify.", + "example": 20, "type": "integer" - }, - "user_color": { - "example": "#0000FF", - "type": "string" } }, "type": "object" }, - "twitch.VodCommentCommenter": { + "spotify.HomeMeta": { "properties": { - "display_name": { + "appVersion": { + "description": "Version of the Spotify web player the data was read from.", + "example": "1.2.90.403.gf901f20f", "type": "string" }, - "id": { + "fetchedAt": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-05-13T20:41:12Z", "type": "string" }, - "login": { + "operationName": { + "description": "Name of the Spotify web player operation that returned the data.", + "example": "home", "type": "string" + }, + "sectionCount": { + "description": "Number of sections returned.", + "example": 8, + "type": "integer" } }, "type": "object" }, - "twitch.VodCommentFragment": { + "spotify.HomeResponse": { "properties": { - "emote_id": { + "facet": { + "description": "Home page filter that was applied, for example `music`.", + "example": "music", "type": "string" }, - "text": { + "greeting": { + "description": "Greeting Spotify shows at the top of the home page, for example `Good afternoon`.", + "example": "Good afternoon", "type": "string" - } - }, - "type": "object" - }, - "twitch.VodCommentsResponse": { - "properties": { - "comments": { + }, + "meta": { + "allOf": [ + { + "$ref": "#/definitions/spotify.HomeMeta" + } + ], + "description": "Details about this response." + }, + "sections": { + "description": "Home page sections, in display order.", "items": { - "$ref": "#/definitions/twitch.VodComment" + "$ref": "#/definitions/spotify.BrowsePageSection" }, "type": "array" }, - "count": { - "example": 55, - "type": "integer" - }, - "has_more": { - "example": true, - "type": "boolean" - }, - "next_offset_seconds": { - "example": 140, - "type": "integer" - }, - "offset_seconds": { - "example": 0, - "type": "integer" - }, - "video_id": { + "timeZone": { + "description": "Time zone the home page was personalized for.", + "example": "UTC", "type": "string" } }, "type": "object" }, - "twitch.channelResponseDoc": { + "spotify.ImageAsset": { "properties": { - "code": { - "example": 200, + "height": { + "description": "Image height in pixels.", + "example": 640, "type": "integer" }, - "data": { - "$ref": "#/definitions/twitch.ChannelResponse" - }, - "msg": { - "example": "OK", + "url": { + "description": "URL of the image.", + "example": "https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0", "type": "string" + }, + "width": { + "description": "Image width in pixels.", + "example": 640, + "type": "integer" } }, "type": "object" }, - "twitch.clipsResponseDoc": { + "spotify.PlaylistMeta": { "properties": { - "code": { - "example": 200, - "type": "integer" + "appVersion": { + "description": "Version of the Spotify web player the data was read from.", + "example": "1.2.90.403.gf901f20f", + "type": "string" }, - "data": { - "$ref": "#/definitions/twitch.ClipsResponse" + "episodeCount": { + "description": "Number of episodes among the returned items.", + "example": 0, + "type": "integer" }, - "msg": { - "example": "OK", + "fetchedAt": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-05-13T20:41:12Z", "type": "string" - } - }, - "type": "object" - }, - "twitch.scheduleResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/twitch.ScheduleResponse" + "itemCount": { + "description": "Number of items returned.", + "example": 20, + "type": "integer" }, - "msg": { - "example": "OK", + "operationName": { + "description": "Name of the Spotify web player operation that returned the data.", + "example": "fetchPlaylist", "type": "string" + }, + "trackCount": { + "description": "Number of tracks among the returned items.", + "example": 20, + "type": "integer" } }, "type": "object" }, - "twitch.searchResponseDoc": { + "spotify.PlaylistResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/twitch.SearchResponse" + "collaborative": { + "description": "Whether the playlist is collaborative.", + "example": false, + "type": "boolean" }, - "msg": { - "example": "OK", + "description": { + "description": "Description text of the playlist.", + "example": "Your daily update of the most played tracks right now.", "type": "string" - } - }, - "type": "object" - }, - "twitch.streamsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/twitch.StreamsResponse" + "episodes": { + "description": "The podcast episode entries among the returned items.", + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" }, - "msg": { - "example": "OK", + "externalUrl": { + "description": "Link to the playlist on open.spotify.com.", + "example": "https://open.spotify.com/playlist/37i9dQZEVXbLwpL8TjsxOG", "type": "string" - } - }, - "type": "object" - }, - "twitch.teamResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "followers": { + "description": "Number of followers the playlist has.", + "example": 17500000, "type": "integer" }, - "data": { - "$ref": "#/definitions/twitch.TeamResponse" + "id": { + "description": "Spotify ID of the playlist.", + "example": "37i9dQZEVXbLwpL8TjsxOG", + "type": "string" }, - "msg": { - "example": "OK", + "imageUrl": { + "description": "URL of the playlist cover image.", + "example": "https://charts-images.scdn.co/assets/locale_en/regional/daily/region_global_default.jpg", "type": "string" - } - }, - "type": "object" - }, - "twitch.topGamesResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "images": { + "description": "Cover images available for the playlist, with their sizes.", + "items": { + "$ref": "#/definitions/spotify.ImageAsset" + }, + "type": "array" + }, + "items": { + "description": "Tracks and episodes returned from the playlist, in playlist order.", + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" + }, + "limit": { + "description": "Maximum number of items requested.", + "example": 20, "type": "integer" }, - "data": { - "$ref": "#/definitions/twitch.TopGamesResponse" + "meta": { + "allOf": [ + { + "$ref": "#/definitions/spotify.PlaylistMeta" + } + ], + "description": "Details about this response." }, - "msg": { - "example": "OK", + "name": { + "description": "Playlist title as Spotify shows it.", + "example": "Top 50 - Global", "type": "string" - } - }, - "type": "object" - }, - "twitch.videosResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "offset": { + "description": "Position of the first item returned.", + "example": 0, "type": "integer" }, - "data": { - "$ref": "#/definitions/twitch.VideosResponse" + "owner": { + "allOf": [ + { + "$ref": "#/definitions/spotify.SearchResultSummary" + } + ], + "description": "User or account that owns the playlist." }, - "msg": { - "example": "OK", + "shareUrl": { + "description": "Link to the playlist that Spotify offers for sharing.", + "example": "https://open.spotify.com/playlist/37i9dQZEVXbLwpL8TjsxOG", "type": "string" - } - }, - "type": "object" - }, - "twitch.vodCommentsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "total": { + "description": "Total number of items in the playlist.", + "example": 50, "type": "integer" }, - "data": { - "$ref": "#/definitions/twitch.VodCommentsResponse" + "tracks": { + "description": "The track entries among the returned items.", + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" }, - "msg": { - "example": "OK", + "type": { + "description": "Kind of item as Spotify labels it, for example `Playlist`.", + "example": "Playlist", + "type": "string" + }, + "uri": { + "description": "Spotify URI of the playlist.", + "example": "spotify:playlist:37i9dQZEVXbLwpL8TjsxOG", "type": "string" } }, "type": "object" }, - "ubereats.Address": { + "spotify.PodcastEpisodeMeta": { "properties": { - "city": { - "type": "string" - }, - "country": { + "appVersion": { + "description": "Version of the Spotify web player the data was read from.", + "example": "1.2.90.403.gf901f20f", "type": "string" }, - "postalCode": { + "fetchedAt": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-05-13T20:41:13Z", "type": "string" }, - "region": { + "operationName": { + "description": "Name of the Spotify web player operation that returned the data.", + "example": "getEpisodeOrChapter", "type": "string" }, - "street": { + "sourceUrl": { + "description": "URL the data was read from.", + "example": "https://open.spotify.com/episode/2C2Y5kNq7qCVOVhbA0G3os", "type": "string" } }, "type": "object" }, - "ubereats.MenuItem": { + "spotify.PodcastEpisodeResponse": { "properties": { "description": { + "description": "Plain-text description of the episode.", + "example": "A new adventure from the Stinky Dragon crew.", "type": "string" }, - "imageUrl": { - "type": "string" - }, - "isSoldOut": { - "type": "boolean" + "durationMs": { + "description": "Episode length in milliseconds.", + "example": 3600000, + "type": "integer" }, - "price": { - "type": "number" + "externalUrl": { + "description": "Link to the episode on open.spotify.com.", + "example": "https://open.spotify.com/episode/2C2Y5kNq7qCVOVhbA0G3os", + "type": "string" }, - "title": { + "htmlDescription": { + "description": "Description of the episode with its HTML formatting.", + "example": "A new adventure from the Stinky Dragon crew.", "type": "string" }, - "uuid": { + "id": { + "description": "Spotify ID of the episode.", + "example": "2C2Y5kNq7qCVOVhbA0G3os", "type": "string" - } - }, - "type": "object" - }, - "ubereats.MenuResponse": { - "properties": { - "currencyCode": { + }, + "imageUrl": { + "description": "URL of the main cover image for the episode.", + "example": "https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0", "type": "string" }, - "sections": { + "images": { + "description": "Cover images available for the episode, with their sizes.", "items": { - "$ref": "#/definitions/ubereats.MenuSection" + "$ref": "#/definitions/spotify.ImageAsset" }, "type": "array" }, - "storeTitle": { - "type": "string" + "isExplicit": { + "description": "Whether Spotify marks the episode as explicit.", + "example": false, + "type": "boolean" }, - "storeUuid": { - "type": "string" + "isPaywallContent": { + "description": "Whether the episode is paywalled content.", + "example": false, + "type": "boolean" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "ubereats.MenuSection": { - "properties": { - "items": { + "isPlayable": { + "description": "Whether the episode can be played.", + "example": true, + "type": "boolean" + }, + "mediaTypes": { + "description": "Media types the episode is available in, for example `AUDIO`.", + "example": [ + "AUDIO" + ], "items": { - "$ref": "#/definitions/ubereats.MenuItem" + "type": "string" }, "type": "array" }, - "title": { + "meta": { + "allOf": [ + { + "$ref": "#/definitions/spotify.PodcastEpisodeMeta" + } + ], + "description": "Details about this response." + }, + "name": { + "description": "Episode title as Spotify shows it.", + "example": "Tales from the Stinky Dragon", "type": "string" - } - }, - "type": "object" - }, - "ubereats.Restaurant": { - "properties": { - "cuisineTags": { - "description": "Cuisine labels shown on the restaurant card.", + }, + "playabilityReason": { + "description": "Reason code Spotify gives for the episode's playability, for example `PLAYABLE`.", + "example": "PLAYABLE", + "type": "string" + }, + "previewAudioUrl": { + "description": "URL of an audio preview of the episode.", + "example": "https://p.scdn.co/mp3-preview/example", + "type": "string" + }, + "previewAudioUrls": { + "description": "URLs of the audio previews available for the episode.", + "example": [ + "https://p.scdn.co/mp3-preview/example" + ], "items": { "type": "string" }, "type": "array" }, - "currencyCode": { - "description": "Currency code used for the restaurant's prices, such as `USD`.", + "previewVideoUrl": { + "description": "URL of a video preview of the episode.", + "example": "https://p.scdn.co/video-preview/example", "type": "string" }, - "deliveryEtaText": { - "description": "Estimated delivery time as shown on the card, such as `21 min`.", + "releaseDate": { + "description": "Date the episode was released, as Spotify returns it.", + "example": "2026-05-13", "type": "string" }, - "imageUrl": { - "description": "URL of the restaurant's card image.", + "releaseDatePrecision": { + "description": "How precise the release date is, for example `DAY`.", + "example": "DAY", "type": "string" }, - "isSponsored": { - "description": "Whether Uber Eats shows the restaurant as a sponsored listing.", - "type": "boolean" - }, - "latitude": { - "description": "Latitude of the restaurant, in decimal degrees.", - "type": "number" - }, - "longitude": { - "description": "Longitude of the restaurant, in decimal degrees.", - "type": "number" - }, - "name": { - "description": "Restaurant name as shown on the feed card.", + "shareUrl": { + "description": "Link to the episode that Spotify offers for sharing.", + "example": "https://open.spotify.com/episode/2C2Y5kNq7qCVOVhbA0G3os", "type": "string" }, - "rating": { - "description": "Average customer rating of the restaurant.", - "type": "number" + "show": { + "allOf": [ + { + "$ref": "#/definitions/spotify.PodcastEpisodeShowSummary" + } + ], + "description": "Show the episode belongs to." }, - "reviewCount": { - "description": "Number of customer reviews the restaurant has.", + "transcriptCount": { + "description": "Number of transcripts Spotify has for the episode.", + "example": 1, "type": "integer" }, - "slug": { - "description": "URL slug of the restaurant's Uber Eats page.", + "type": { + "description": "Kind of item as Spotify labels it, for example `Episode`.", + "example": "Episode", "type": "string" }, - "storeUuid": { - "description": "Uber Eats store UUID. Use it with the store endpoints.", + "unplayabilityReasons": { + "description": "Reasons the episode cannot be played, such as `not_available_in_region`.", + "example": [ + "not_available_in_region" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "uri": { + "description": "Spotify URI of the episode.", + "example": "spotify:episode:2C2Y5kNq7qCVOVhbA0G3os", "type": "string" }, - "url": { - "description": "URL of the restaurant's page on Uber Eats.", + "videoThumbnailUrl": { + "description": "URL of the video thumbnail for the episode.", + "example": "https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0", "type": "string" + }, + "videoThumbnails": { + "description": "Video thumbnails available for the episode, with their sizes.", + "items": { + "$ref": "#/definitions/spotify.ImageAsset" + }, + "type": "array" } }, "type": "object" }, - "ubereats.Review": { + "spotify.PodcastEpisodeShowSummary": { "properties": { - "createdAt": { - "description": "Time the review was created, in ISO 8601 format.", + "description": { + "description": "Description text of the show.", + "example": "Tales from the Stinky Dragon is an actual-play comedy podcast.", "type": "string" }, - "eaterName": { - "description": "Reviewer's display name as Uber Eats shows it, such as `Jamie L.`.", + "externalUrl": { + "description": "Link to the show on open.spotify.com.", + "example": "https://open.spotify.com/show/1QQJ7FElLE0K6CIfZNCxU4", "type": "string" }, - "formattedDate": { - "description": "Review date as Uber Eats displays it, such as `01/01/26`.", + "id": { + "description": "Spotify ID of the show.", + "example": "1QQJ7FElLE0K6CIfZNCxU4", "type": "string" }, - "text": { - "description": "Full text of the review.", + "imageUrl": { + "description": "URL of the main cover image for the show.", + "example": "https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0", "type": "string" }, - "timeSinceReview": { - "description": "How long ago the review was posted, as text such as `2 months ago`.", - "type": "string" - } - }, - "type": "object" - }, - "ubereats.SearchResponse": { - "properties": { - "cityName": { - "description": "Name of the city feed that was returned, such as `san_francisco`. Set for location feeds only.", - "type": "string" + "images": { + "description": "Cover images available for the show, with their sizes.", + "items": { + "$ref": "#/definitions/spotify.ImageAsset" + }, + "type": "array" }, - "cursor": { - "description": "Cursor to pass in the next keyword search request to get more results.", + "mediaType": { + "description": "Kind of media the show carries, for example `MIXED`.", + "example": "MIXED", "type": "string" }, - "hasMore": { - "description": "Whether more restaurants are available beyond this response.", - "type": "boolean" + "name": { + "description": "Show title as Spotify shows it.", + "example": "Tales from the Stinky Dragon", + "type": "string" }, - "offset": { - "description": "Offset of the first restaurant returned.", - "type": "integer" + "publisher": { + "description": "Name of the show's publisher.", + "example": "Stinky Dragon", + "type": "string" }, - "restaurants": { - "description": "Restaurants matching the search, or found in the location feed.", + "showTypes": { + "description": "Show type labels Spotify assigns, for example `PODCAST`.", + "example": [ + "PODCAST" + ], "items": { - "$ref": "#/definitions/ubereats.Restaurant" + "type": "string" }, "type": "array" + }, + "type": { + "description": "Kind of item as Spotify labels it, for example `Podcast`.", + "example": "Podcast", + "type": "string" + }, + "uri": { + "description": "Spotify URI of the show.", + "example": "spotify:show:1QQJ7FElLE0K6CIfZNCxU4", + "type": "string" } }, "type": "object" }, - "ubereats.StoreDetail": { + "spotify.PodcastEpisodeSummary": { "properties": { - "address": { - "$ref": "#/definitions/ubereats.Address" + "description": { + "description": "Description text of the episode.", + "example": "A new adventure from the Stinky Dragon crew.", + "type": "string" }, - "cuisineTags": { - "items": { - "type": "string" - }, - "type": "array" + "durationMs": { + "description": "Episode length in milliseconds.", + "example": 3600000, + "type": "integer" }, - "currencyCode": { + "externalUrl": { + "description": "Link to the episode on open.spotify.com.", + "example": "https://open.spotify.com/episode/2C2Y5kNq7qCVOVhbA0G3os", "type": "string" }, - "heroImageUrl": { + "imageUrl": { + "description": "URL of the main cover image for the episode.", + "example": "https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0", "type": "string" }, - "isOpen": { - "type": "boolean" - }, - "isOrderable": { - "type": "boolean" - }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" - }, - "menu": { + "images": { + "description": "Cover images available for the episode, with their sizes.", "items": { - "$ref": "#/definitions/ubereats.MenuSection" + "$ref": "#/definitions/spotify.ImageAsset" }, "type": "array" }, - "phoneNumber": { - "type": "string" - }, - "priceBucket": { - "type": "string" - }, - "rating": { - "type": "number" - }, - "reviewCount": { - "type": "integer" + "isExplicit": { + "description": "Whether Spotify marks the episode as explicit.", + "example": false, + "type": "boolean" }, - "slug": { - "type": "string" + "isPlayable": { + "description": "Whether the episode can be played.", + "example": true, + "type": "boolean" }, - "storeUuid": { + "name": { + "description": "Episode title as Spotify shows it.", + "example": "Tales from the Stinky Dragon", "type": "string" }, - "title": { + "releaseDate": { + "description": "Date the episode was released, as Spotify returns it.", + "example": "2026-05-13", "type": "string" }, - "url": { + "type": { + "description": "Kind of item as Spotify labels it, for example `Episode`.", + "example": "Episode", "type": "string" }, - "workingHoursTagline": { + "uri": { + "description": "Spotify URI of the episode.", + "example": "spotify:episode:2C2Y5kNq7qCVOVhbA0G3os", "type": "string" } }, "type": "object" }, - "ubereats.StoreReviewsResponse": { + "spotify.PodcastEpisodesMeta": { "properties": { - "rating": { - "description": "Average customer rating of the store.", - "type": "number" - }, - "reviewCount": { - "description": "Total number of reviews the store has.", - "type": "integer" + "appVersion": { + "description": "Version of the Spotify web player the data was read from.", + "example": "1.2.90.403.gf901f20f", + "type": "string" }, - "reviews": { - "description": "Sample of recent reviews shown on the store page.", - "items": { - "$ref": "#/definitions/ubereats.Review" - }, - "type": "array" + "fetchedAt": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-05-13T20:41:13Z", + "type": "string" }, - "storeUuid": { - "description": "Uber Eats store UUID that was requested.", + "operationName": { + "description": "Name of the Spotify web player operation that returned the data.", + "example": "queryPodcastEpisodes", "type": "string" } }, "type": "object" }, - "ubereats.feedResponseDoc": { + "spotify.PodcastEpisodesResponse": { "properties": { - "code": { - "example": 200, + "episodes": { + "description": "Episodes returned for the show.", + "items": { + "$ref": "#/definitions/spotify.PodcastEpisodeSummary" + }, + "type": "array" + }, + "limit": { + "description": "Maximum number of episodes requested.", + "example": 20, "type": "integer" }, - "data": { - "$ref": "#/definitions/ubereats.SearchResponse" + "meta": { + "allOf": [ + { + "$ref": "#/definitions/spotify.PodcastEpisodesMeta" + } + ], + "description": "Details about this response." }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "ubereats.menuResponseDoc": { - "properties": { - "code": { - "example": 200, + "offset": { + "description": "Position of the first episode returned.", + "example": 0, "type": "integer" }, - "data": { - "$ref": "#/definitions/ubereats.MenuResponse" + "total": { + "description": "Total number of episodes the show has on Spotify.", + "example": 202, + "type": "integer" }, - "msg": { - "example": "OK", + "uri": { + "description": "Spotify URI of the show whose episodes are listed.", + "example": "spotify:show:1QQJ7FElLE0K6CIfZNCxU4", "type": "string" } }, "type": "object" }, - "ubereats.searchResponseDoc": { + "spotify.PopularCountry": { "properties": { "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/ubereats.SearchResponse" + "example": "us", + "type": "string" }, - "msg": { - "example": "OK", + "name": { + "description": "Country name in English.", + "example": "United States", "type": "string" } }, "type": "object" }, - "ubereats.storeResponseDoc": { + "spotify.RecommendationSummary": { "properties": { - "code": { - "example": 200, - "type": "integer" + "description": { + "description": "Description text of the recommended item.", + "example": "The official podcast of comedian Joe Rogan.", + "type": "string" }, - "data": { - "$ref": "#/definitions/ubereats.StoreDetail" + "externalUrl": { + "description": "Link to the recommended item on open.spotify.com.", + "example": "https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk", + "type": "string" }, - "msg": { - "example": "OK", + "imageUrl": { + "description": "URL of the main image for the recommended item.", + "example": "https://i.scdn.co/image/ab67656300005f1f54e6837957803d762a3f4d2b", "type": "string" - } - }, - "type": "object" - }, - "ubereats.storeReviewsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/ubereats.StoreReviewsResponse" + "images": { + "description": "Images available for the recommended item, with their sizes.", + "items": { + "$ref": "#/definitions/spotify.ImageAsset" + }, + "type": "array" }, - "msg": { - "example": "OK", + "publisher": { + "description": "Publisher or creator name of the recommended item.", + "example": "Joe Rogan", + "type": "string" + }, + "subtitle": { + "description": "Secondary line shown under the title, such as the creator name.", + "example": "Joe Rogan", + "type": "string" + }, + "title": { + "description": "Title of the recommended item as Spotify shows it.", + "example": "The Joe Rogan Experience", + "type": "string" + }, + "type": { + "description": "Kind of item as Spotify labels it, for example `Podcast`.", + "example": "Podcast", + "type": "string" + }, + "uri": { + "description": "Spotify URI of the recommended item.", + "example": "spotify:show:4rOoJ6Egrf8K2IrywzwOMk", "type": "string" } }, "type": "object" }, - "ulta.Answer": { + "spotify.SearchMeta": { "properties": { - "author": { - "description": "Display name of the answer's author.", - "type": "string" + "albumCount": { + "description": "Number of albums returned.", + "example": 3, + "type": "integer" }, - "created_at": { - "description": "Time the answer was posted, in UTC (RFC 3339).", + "appVersion": { + "description": "Version of the Spotify web player the data was read from.", + "example": "1.2.90.403.gf901f20f", "type": "string" }, - "helpful_votes": { - "description": "Number of shoppers who marked the answer helpful.", + "artistCount": { + "description": "Number of artists returned.", + "example": 5, "type": "integer" }, - "id": { - "description": "Ulta answer id.", - "type": "string" - }, - "is_expert": { - "description": "Whether the answer comes from a brand representative rather than a fellow customer.", - "type": "boolean" + "audiobookCount": { + "description": "Number of audiobooks returned.", + "example": 2, + "type": "integer" }, - "not_helpful_votes": { - "description": "Number of shoppers who marked the answer not helpful.", + "episodeCount": { + "description": "Number of episodes returned.", + "example": 2, "type": "integer" }, - "text": { - "description": "Text of the answer.", + "fetchedAt": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-05-13T20:41:12Z", "type": "string" - } - }, - "type": "object" - }, - "ulta.CategoriesResponse": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/ulta.CategoryEntry" - }, - "type": "array" }, - "fetched_at": { + "operationName": { + "description": "Name of the Spotify web player operation that returned the data.", + "example": "searchDesktop", "type": "string" }, - "source_url": { - "type": "string" + "playlistCount": { + "description": "Number of playlists returned.", + "example": 2, + "type": "integer" + }, + "resultCount": { + "description": "Total number of results returned.", + "example": 22, + "type": "integer" + }, + "showCount": { + "description": "Number of shows returned.", + "example": 4, + "type": "integer" + }, + "topCount": { + "description": "Number of top results returned.", + "example": 3, + "type": "integer" + }, + "trackCount": { + "description": "Number of tracks returned.", + "example": 2, + "type": "integer" + }, + "userCount": { + "description": "Number of user profiles returned.", + "example": 2, + "type": "integer" } }, "type": "object" }, - "ulta.CategoryEntry": { + "spotify.SearchPodcastsMeta": { "properties": { - "department": { - "example": "makeup-nails", + "appVersion": { + "description": "Version of the Spotify web player the data was read from.", + "example": "1.2.90.403.gf901f20f", "type": "string" }, - "group": { - "example": "Eyes", - "type": "string" + "episodeCount": { + "description": "Number of episodes returned.", + "example": 2, + "type": "integer" }, - "name": { - "example": "Mascara", + "fetchedAt": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-05-13T20:41:12Z", "type": "string" }, - "url": { - "example": "https://www.ulta.com/shop/makeup/eyes/mascara", + "operationName": { + "description": "Name of the Spotify web player operation that returned the data.", + "example": "searchPodcasts", "type": "string" + }, + "showCount": { + "description": "Number of shows returned.", + "example": 4, + "type": "integer" + }, + "topCount": { + "description": "Number of top results returned.", + "example": 3, + "type": "integer" } }, "type": "object" }, - "ulta.CategoryFacet": { + "spotify.SearchPodcastsResponse": { "properties": { - "label": { - "type": "string" + "episodes": { + "description": "Podcast episodes that matched the search term.", + "items": { + "$ref": "#/definitions/spotify.PodcastEpisodeSummary" + }, + "type": "array" }, - "selected": { - "type": "boolean" + "limit": { + "description": "Maximum number of results requested per section.", + "example": 20, + "type": "integer" }, - "value": { + "meta": { + "allOf": [ + { + "$ref": "#/definitions/spotify.SearchPodcastsMeta" + } + ], + "description": "Details about this response." + }, + "offset": { + "description": "Position of the first result returned.", + "example": 0, + "type": "integer" + }, + "searchTerm": { + "description": "Search term that was run.", + "example": "hello", "type": "string" + }, + "shows": { + "description": "Podcast shows that matched the search term.", + "items": { + "$ref": "#/definitions/spotify.RecommendationSummary" + }, + "type": "array" + }, + "topResults": { + "description": "Best matches across all result types.", + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" } }, "type": "object" }, - "ulta.CategoryResponse": { + "spotify.SearchResponse": { "properties": { - "category": { - "type": "string" - }, - "count": { - "type": "integer" - }, - "facets": { - "description": "Facets is the category's own guided-navigation refinement options,\nread from the same response this package already fetches -- no\nseparate upstream call needed. Confirmed live 2026-08-11 present and\nnon-empty (46 options on an unfiltered category, 17 on a filtered\none) on every case tried (unfiltered, filtered, and page 2), so this\nfield is populated whenever the upstream returns it, nil otherwise.\nUlta's own guidedNavigation does not carry a live per-option result\ncount (unlike this repo's Nike/Zappos facet shapes), so CategoryFacet\nhas no result-count field.", + "albums": { + "description": "Albums that matched the search term.", "items": { - "$ref": "#/definitions/ulta.CategoryFacet" + "$ref": "#/definitions/spotify.SearchResultSummary" }, "type": "array" }, - "fetched_at": { - "type": "string" + "artists": { + "description": "Artists that matched the search term.", + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" }, - "filter": { - "type": "string" + "audiobooks": { + "description": "Audiobooks that matched the search term.", + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" }, - "has_more": { - "type": "boolean" + "episodes": { + "description": "Podcast episodes that matched the search term.", + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" }, - "page": { + "limit": { + "description": "Maximum number of results requested per section.", + "example": 20, "type": "integer" }, - "page_size": { + "meta": { + "allOf": [ + { + "$ref": "#/definitions/spotify.SearchMeta" + } + ], + "description": "Details about this response." + }, + "offset": { + "description": "Position of the first result returned.", + "example": 0, "type": "integer" }, - "products": { + "playlists": { + "description": "Playlists that matched the search term.", "items": { - "$ref": "#/definitions/ulta.ProductSummary" + "$ref": "#/definitions/spotify.SearchResultSummary" }, "type": "array" }, - "result_count": { - "type": "integer" + "results": { + "description": "All results found, across every type.", + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "ulta.ProductDetailResponse": { - "properties": { - "brand_name": { + "searchTerm": { + "description": "Search term that was run.", + "example": "hello", "type": "string" }, - "category": { + "shows": { + "description": "Podcast shows that matched the search term.", "items": { - "type": "string" + "$ref": "#/definitions/spotify.SearchResultSummary" }, "type": "array" }, - "currency_code": { - "type": "string" + "topResults": { + "description": "Best matches across all result types.", + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" }, + "tracks": { + "description": "Tracks that matched the search term.", + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" + }, + "users": { + "description": "User profiles that matched the search term.", + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" + } + }, + "type": "object" + }, + "spotify.SearchResultSummary": { + "properties": { "description": { + "description": "Description text of the result.", + "example": "The official podcast of comedian Joe Rogan.", "type": "string" }, - "fetched_at": { + "externalUrl": { + "description": "Link to the result on open.spotify.com.", + "example": "https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk", + "type": "string" + }, + "imageUrl": { + "description": "URL of the main image for the result.", + "example": "https://i.scdn.co/image/ab67656300005f1f54e6837957803d762a3f4d2b", "type": "string" }, "images": { + "description": "Images available for the result, with their sizes.", "items": { - "type": "string" + "$ref": "#/definitions/spotify.ImageAsset" }, "type": "array" }, - "list_price": { + "publisher": { + "description": "Publisher or creator name of the result.", + "example": "Joe Rogan", "type": "string" }, - "product_id": { + "subtitle": { + "description": "Secondary line shown under the title, such as the artist or creator name.", + "example": "Joe Rogan", "type": "string" }, - "product_name": { + "title": { + "description": "Result title as Spotify shows it.", + "example": "The Joe Rogan Experience", "type": "string" }, - "rating": { - "type": "number" - }, - "review_count": { - "type": "integer" + "type": { + "description": "Kind of result as Spotify labels it, for example `Podcast`.", + "example": "Podcast", + "type": "string" }, - "sale_price": { + "uri": { + "description": "Spotify URI of the result.", + "example": "spotify:show:4rOoJ6Egrf8K2IrywzwOMk", + "type": "string" + } + }, + "type": "object" + }, + "spotify.ShowMetadataMeta": { + "properties": { + "appVersion": { + "example": "1.2.90.403.gf901f20f", "type": "string" }, - "sku_id": { + "fetchedAt": { + "example": "2026-05-13T20:41:13Z", "type": "string" }, - "source_url": { + "operationName": { + "example": "queryShowMetadataV2", + "type": "string" + } + }, + "type": "object" + }, + "spotify.ShowMetadataResponse": { + "properties": { + "description": { + "example": "Tales from the Stinky Dragon is an actual-play comedy podcast.", "type": "string" }, - "unavailable": { - "type": "boolean" + "externalUrl": { + "example": "https://open.spotify.com/show/1QQJ7FElLE0K6CIfZNCxU4", + "type": "string" }, - "url": { + "imageUrl": { + "example": "https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0", "type": "string" }, - "variants": { + "images": { "items": { - "$ref": "#/definitions/ulta.ProductVariant" + "$ref": "#/definitions/spotify.ImageAsset" }, "type": "array" + }, + "isExplicit": { + "example": false, + "type": "boolean" + }, + "mediaType": { + "example": "MIXED", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/spotify.ShowMetadataMeta" + }, + "name": { + "example": "Tales from the Stinky Dragon", + "type": "string" + }, + "publisher": { + "example": "Stinky Dragon", + "type": "string" + }, + "totalEpisodes": { + "example": 202, + "type": "integer" + }, + "type": { + "example": "Podcast", + "type": "string" + }, + "uri": { + "example": "spotify:show:1QQJ7FElLE0K6CIfZNCxU4", + "type": "string" } }, "type": "object" }, - "ulta.ProductQuestionsResponse": { + "spotify.ShowRecommendationsMeta": { "properties": { + "appVersion": { + "description": "Version of the Spotify web player the data was read from.", + "example": "1.2.90.403.gf901f20f", + "type": "string" + }, "count": { - "description": "Number of questions returned on this page.", + "description": "Number of recommendations returned.", + "example": 10, "type": "integer" }, - "fetched_at": { + "fetchedAt": { "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-05-13T20:41:13Z", "type": "string" }, - "page": { - "description": "Page number returned, starting at 1.", - "type": "integer" - }, - "page_size": { - "description": "Number of questions per page.", - "type": "integer" - }, - "product_id": { - "description": "Ulta product id that was requested.", + "operationName": { + "description": "Name of the Spotify web player operation that returned the data.", + "example": "internalLinkRecommenderShow", "type": "string" + } + }, + "type": "object" + }, + "spotify.ShowRecommendationsResponse": { + "properties": { + "meta": { + "allOf": [ + { + "$ref": "#/definitions/spotify.ShowRecommendationsMeta" + } + ], + "description": "Details about this response." }, - "questions": { - "description": "Customer questions on this page, each with its answers.", + "recommendations": { + "description": "Related shows and episodes Spotify suggests.", "items": { - "$ref": "#/definitions/ulta.Question" + "$ref": "#/definitions/spotify.RecommendationSummary" }, "type": "array" }, - "source_url": { - "description": "URL the data was read from.", + "uri": { + "description": "Spotify URI of the show the recommendations are for.", + "example": "spotify:show:1QQJ7FElLE0K6CIfZNCxU4", + "type": "string" + } + }, + "type": "object" + }, + "spotify.TrackMeta": { + "properties": { + "appVersion": { + "description": "Version of the Spotify web player the data was read from.", + "example": "1.2.90.403.gf901f20f", "type": "string" }, - "total_pages": { - "description": "Total number of question pages for the product.", - "type": "integer" + "fetchedAt": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-05-13T20:41:10Z", + "type": "string" }, - "total_questions": { - "description": "Total number of questions for the product.", - "type": "integer" + "operationName": { + "description": "Name of the Spotify web player operation that returned the data.", + "example": "getTrack", + "type": "string" } }, "type": "object" }, - "ulta.ProductReviewsResponse": { + "spotify.TrackRecommendedMeta": { "properties": { - "average_rating": { - "type": "number" + "appVersion": { + "description": "Version of the Spotify web player the data was read from.", + "example": "1.2.90.403.gf901f20f", + "type": "string" }, "count": { + "description": "Number of recommendations returned.", + "example": 10, "type": "integer" }, - "fetched_at": { + "fetchedAt": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-05-13T20:41:12Z", "type": "string" }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "product_id": { + "operationName": { + "description": "Name of the Spotify web player operation that returned the data.", + "example": "internalLinkRecommenderTrack", "type": "string" - }, - "rating_count": { - "description": "RatingCount, AverageRating, RecommendedRatio, and RatingHistogram are\nthe product's site-wide aggregate rating summary, not just this page --\nabsent (zero-valued) for a product with no reviews yet.", + } + }, + "type": "object" + }, + "spotify.TrackRecommendedResponse": { + "properties": { + "limit": { + "description": "Maximum number of recommendations requested.", + "example": 10, "type": "integer" }, - "rating_histogram": { - "description": "RatingHistogram is the count of ratings per star, ascending: index 0\nis 1-star, index 4 is 5-star.", + "meta": { + "allOf": [ + { + "$ref": "#/definitions/spotify.TrackRecommendedMeta" + } + ], + "description": "Details about this response." + }, + "recommendations": { + "description": "Items Spotify recommends for the track.", "items": { - "type": "integer" + "$ref": "#/definitions/spotify.RecommendationSummary" }, "type": "array" }, - "recommended_ratio": { - "type": "number" + "uri": { + "description": "Spotify URI of the track the recommendations are for.", + "example": "spotify:track:4vGg44GdCw3X8i8r01XJH0", + "type": "string" + } + }, + "type": "object" + }, + "spotify.TrackResponse": { + "properties": { + "album": { + "allOf": [ + { + "$ref": "#/definitions/spotify.SearchResultSummary" + } + ], + "description": "Album the track appears on." }, - "reviews": { + "artists": { + "description": "Artists credited on the track.", "items": { - "$ref": "#/definitions/ulta.Review" + "$ref": "#/definitions/spotify.SearchResultSummary" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "total_pages": { + "discNumber": { + "description": "Disc number of the track within its album.", + "example": 1, "type": "integer" }, - "total_reviews": { + "durationMs": { + "description": "Track length in milliseconds.", + "example": 234083, "type": "integer" - } - }, - "type": "object" - }, - "ulta.ProductSummary": { - "properties": { - "brand_name": { + }, + "externalUrl": { + "description": "Link to the track on open.spotify.com.", + "example": "https://open.spotify.com/track/4vGg44GdCw3X8i8r01XJH0", "type": "string" }, - "discount": { + "id": { + "description": "Spotify ID of the track.", + "example": "4vGg44GdCw3X8i8r01XJH0", "type": "string" }, - "image_url": { + "imageUrl": { + "description": "URL of the track's cover image.", + "example": "https://i.scdn.co/image/ab67616d0000b273f377730d2a9c2e432139ac79", "type": "string" }, - "is_limited_stock": { + "images": { + "description": "Cover images available for the track, with their sizes.", + "items": { + "$ref": "#/definitions/spotify.ImageAsset" + }, + "type": "array" + }, + "isExplicit": { + "description": "Whether Spotify marks the track as explicit.", + "example": false, "type": "boolean" }, - "list_price": { + "isPlayable": { + "description": "Whether the track can be played.", + "example": true, + "type": "boolean" + }, + "meta": { + "allOf": [ + { + "$ref": "#/definitions/spotify.TrackMeta" + } + ], + "description": "Details about this response." + }, + "name": { + "description": "Track title as Spotify shows it.", + "example": "Example Track", "type": "string" }, - "product_id": { + "playabilityReason": { + "description": "Reason code Spotify gives for the track's playability, for example `PLAYABLE`.", + "example": "PLAYABLE", "type": "string" }, - "product_name": { + "playcount": { + "description": "Number of times the track has been played, as Spotify shows it.", + "example": "13129249", "type": "string" }, - "promo_text": { + "previewAudioUrl": { + "description": "URL of an audio preview of the track.", + "example": "https://p.scdn.co/mp3-preview/example", "type": "string" }, - "rating": { - "type": "number" + "previewAudioUrls": { + "description": "URLs of the audio previews available for the track.", + "example": [ + "https://p.scdn.co/mp3-preview/example" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "review_count": { + "shareUrl": { + "description": "Link to the track that Spotify offers for sharing.", + "example": "https://open.spotify.com/track/4vGg44GdCw3X8i8r01XJH0", + "type": "string" + }, + "trackNumber": { + "description": "Position of the track within its album.", + "example": 7, "type": "integer" }, - "sale_price": { + "type": { + "description": "Kind of item as Spotify labels it, for example `Track`.", + "example": "Track", "type": "string" }, - "sku_id": { + "unplayabilityReasons": { + "description": "Reasons the track cannot be played, such as `not_available_in_region`.", + "example": [ + "not_available_in_region" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "uri": { + "description": "Spotify URI of the track.", + "example": "spotify:track:4vGg44GdCw3X8i8r01XJH0", + "type": "string" + } + }, + "type": "object" + }, + "spotify.TrackSimilarAlbumsMeta": { + "properties": { + "appVersion": { + "description": "Version of the Spotify web player the data was read from.", + "example": "1.2.90.403.gf901f20f", "type": "string" }, - "sponsored": { - "type": "boolean" + "count": { + "description": "Number of albums returned.", + "example": 10, + "type": "integer" }, - "url": { + "fetchedAt": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-05-13T20:41:12Z", "type": "string" }, - "variant_label": { + "operationName": { + "description": "Name of the Spotify web player operation that returned the data.", + "example": "similarAlbumsBasedOnThisTrack", "type": "string" } }, "type": "object" }, - "ulta.ProductVariant": { + "spotify.TrackSimilarAlbumsResponse": { "properties": { - "name": { - "type": "string" + "albums": { + "description": "Albums Spotify suggests as similar to the track.", + "items": { + "$ref": "#/definitions/spotify.SearchResultSummary" + }, + "type": "array" }, - "product_id": { - "type": "string" + "albumsOnly": { + "description": "Whether only album recommendations were requested.", + "example": true, + "type": "boolean" }, - "sku_id": { + "limit": { + "description": "Maximum number of albums requested.", + "example": 10, + "type": "integer" + }, + "meta": { + "allOf": [ + { + "$ref": "#/definitions/spotify.TrackSimilarAlbumsMeta" + } + ], + "description": "Details about this response." + }, + "uri": { + "description": "Spotify URI of the track the albums are similar to.", + "example": "spotify:track:4vGg44GdCw3X8i8r01XJH0", "type": "string" } }, "type": "object" }, - "ulta.Question": { + "spotify.UserProfileFollowersResponse": { "properties": { - "answer_count": { - "description": "Number of answers the question received.", + "limit": { + "description": "Maximum number of followers requested.", + "example": 50, "type": "integer" }, - "answers": { - "description": "Answers the question received.", + "meta": { + "allOf": [ + { + "$ref": "#/definitions/spotify.UserProfileMeta" + } + ], + "description": "Details about this response." + }, + "offset": { + "description": "Position of the first follower returned.", + "example": 0, + "type": "integer" + }, + "profiles": { + "description": "Follower profiles returned.", "items": { - "$ref": "#/definitions/ulta.Answer" + "$ref": "#/definitions/spotify.UserProfileSummary" }, "type": "array" }, - "author": { - "description": "Display name of the customer who asked the question.", - "type": "string" + "total": { + "description": "Total number of followers the user has.", + "example": 998, + "type": "integer" }, - "created_at": { - "description": "Time the question was posted, in UTC (RFC 3339).", + "uri": { + "description": "Spotify URI of the user.", + "example": "spotify:user:spotify", "type": "string" }, - "id": { - "description": "Ulta question id.", + "username": { + "description": "Spotify username of the user.", + "example": "spotify", + "type": "string" + } + }, + "type": "object" + }, + "spotify.UserProfileMeta": { + "properties": { + "appVersion": { + "description": "Version of the Spotify web player the data was read from.", + "example": "1.2.90.403.gf901f20f", "type": "string" }, - "location": { - "description": "Location the asker gave, such as `fl`.", + "artistCount": { + "description": "Number of recently played artists returned.", + "example": 0, + "type": "integer" + }, + "fetchedAt": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-05-13T20:41:12Z", "type": "string" }, - "text": { - "description": "Text of the question.", + "operationName": { + "description": "Name of the Spotify web player operation that returned the data.", + "example": "userProfileView", "type": "string" + }, + "playlistCount": { + "description": "Number of playlists returned.", + "example": 10, + "type": "integer" + }, + "profileCount": { + "description": "Number of user profiles returned.", + "example": 50, + "type": "integer" } }, "type": "object" }, - "ulta.Review": { + "spotify.UserProfilePlaylist": { "properties": { - "author": { + "externalUrl": { + "description": "Link to the playlist on open.spotify.com.", + "example": "https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M", "type": "string" }, - "body": { - "type": "string" + "followersCount": { + "description": "Number of followers the playlist has.", + "example": 34324513, + "type": "integer" }, - "created_at": { + "id": { + "description": "Spotify ID of the playlist.", + "example": "37i9dQZF1DXcBWIGoYBM5M", "type": "string" }, - "headline": { + "imageUrl": { + "description": "URL of the playlist cover image.", + "example": "https://i.scdn.co/image/ab67706f0000000273f7bb6e77ec5e23d7840ae5", "type": "string" }, - "helpful_votes": { - "type": "integer" + "isFollowing": { + "description": "Whether Spotify marks the playlist as followed.", + "example": false, + "type": "boolean" }, - "id": { + "name": { + "description": "Playlist title as Spotify shows it.", + "example": "Today’s Top Hits", "type": "string" }, - "location": { + "ownerName": { + "description": "Display name of the playlist owner.", + "example": "Spotify", "type": "string" }, - "not_helpful_votes": { - "type": "integer" + "ownerUri": { + "description": "Spotify URI of the playlist owner.", + "example": "spotify:user:spotify", + "type": "string" }, - "rating": { - "type": "integer" + "ownerUrl": { + "description": "Link to the playlist owner's profile on open.spotify.com.", + "example": "https://open.spotify.com/user/spotify", + "type": "string" }, - "updated_at": { + "ownerUsername": { + "description": "Spotify username of the playlist owner.", + "example": "spotify", "type": "string" }, - "verified_purchase": { - "type": "boolean" + "uri": { + "description": "Spotify URI of the playlist.", + "example": "spotify:playlist:37i9dQZF1DXcBWIGoYBM5M", + "type": "string" } }, "type": "object" }, - "ulta.SearchResponse": { + "spotify.UserProfilePlaylistsResponse": { "properties": { - "count": { + "limit": { + "description": "Maximum number of playlists requested.", + "example": 20, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "has_more": { - "type": "boolean" - }, - "page": { - "type": "integer" + "meta": { + "allOf": [ + { + "$ref": "#/definitions/spotify.UserProfileMeta" + } + ], + "description": "Details about this response." }, - "page_size": { + "offset": { + "description": "Position of the first playlist returned.", + "example": 0, "type": "integer" }, - "products": { + "publicPlaylists": { + "description": "Public playlists of the user.", "items": { - "$ref": "#/definitions/ulta.ProductSummary" + "$ref": "#/definitions/spotify.UserProfilePlaylist" }, "type": "array" }, - "query": { - "type": "string" - }, - "result_count": { + "totalPublicPlaylistsCount": { + "description": "Total number of public playlists the user has.", + "example": 1519, "type": "integer" }, - "source_url": { + "uri": { + "description": "Spotify URI of the user.", + "example": "spotify:user:spotify", + "type": "string" + }, + "username": { + "description": "Spotify username of the user.", + "example": "spotify", "type": "string" } }, "type": "object" }, - "ulta.Store": { + "spotify.UserProfileResponse": { "properties": { - "address": { - "type": "string" + "allowFollows": { + "description": "Whether the profile allows other users to follow it.", + "example": true, + "type": "boolean" }, - "city": { - "type": "string" + "color": { + "description": "Accent color of the profile, as a number.", + "example": 16085920, + "type": "integer" }, - "country": { + "externalUrl": { + "description": "Link to the user's profile on open.spotify.com.", + "example": "https://open.spotify.com/user/spotify", "type": "string" }, - "hours": { - "additionalProperties": { - "type": "string" - }, - "description": "Hours maps a three-letter day abbreviation (\"Mon\"..\"Sun\") to that\nday's opening range(s), e.g. \"09:00-21:00\" -- joined with \", \" for\nthe rare split-hours day (the upstream's own hoursOfOperation\nshape supports more than one range per day).", - "type": "object" + "followersCount": { + "description": "Number of followers the user has.", + "example": 12162371, + "type": "integer" }, - "id": { + "followingCount": { + "description": "Number of accounts the user follows.", + "example": 327, "type": "integer" }, - "is_permanently_closed": { + "hasSpotifyImage": { + "description": "Whether the profile has an image set on Spotify.", + "example": true, "type": "boolean" }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" + "hasSpotifyName": { + "description": "Whether the profile has a display name set on Spotify.", + "example": true, + "type": "boolean" }, - "name": { + "imageUrl": { + "description": "URL of the user's profile image.", + "example": "https://i.scdn.co/image/ab6775700000ee8555c25988a6ac314394d3fbf5", "type": "string" }, - "phone": { - "type": "string" + "isCurrentUser": { + "description": "Whether Spotify marks the profile as the current user's own.", + "example": false, + "type": "boolean" }, - "postal_code": { + "isVerified": { + "description": "Whether Spotify shows the profile as verified.", + "example": true, + "type": "boolean" + }, + "meta": { + "allOf": [ + { + "$ref": "#/definitions/spotify.UserProfileMeta" + } + ], + "description": "Details about this response." + }, + "name": { + "description": "Display name of the user.", + "example": "Spotify", "type": "string" }, - "services": { + "publicPlaylists": { + "description": "Public playlists of the user.", "items": { - "type": "string" + "$ref": "#/definitions/spotify.UserProfilePlaylist" }, "type": "array" }, - "slug": { - "type": "string" + "recentlyPlayedArtists": { + "description": "Artists the user played recently.", + "items": { + "$ref": "#/definitions/spotify.UserProfileSummary" + }, + "type": "array" }, - "state": { + "showFollows": { + "description": "Whether Spotify shows the profile's follows publicly.", + "example": true, + "type": "boolean" + }, + "topArtists": { + "allOf": [ + { + "$ref": "#/definitions/spotify.UserProfileTopArtists" + } + ], + "description": "Top artists section of the profile." + }, + "totalPublicPlaylistsCount": { + "description": "Total number of public playlists the user has.", + "example": 1519, + "type": "integer" + }, + "uri": { + "description": "Spotify URI of the user.", + "example": "spotify:user:spotify", "type": "string" }, - "url": { + "username": { + "description": "Spotify username of the user.", + "example": "spotify", "type": "string" } }, "type": "object" }, - "ulta.StoreResponse": { + "spotify.UserProfileSummary": { "properties": { - "count": { + "color": { + "description": "Accent color of the profile, as a number.", + "example": 16085920, "type": "integer" }, - "fetched_at": { + "externalUrl": { + "description": "Link to the user's profile on open.spotify.com.", + "example": "https://open.spotify.com/user/example", "type": "string" }, - "lat": { - "type": "number" + "followersCount": { + "description": "Number of followers the user has.", + "example": 1000, + "type": "integer" }, - "lng": { - "type": "number" + "imageUrl": { + "description": "URL of the user's profile image.", + "example": "https://i.scdn.co/image/ab6775700000ee8555c25988a6ac314394d3fbf5", + "type": "string" }, - "radius_meters": { - "type": "integer" + "isFollowing": { + "description": "Whether Spotify marks the user as followed.", + "example": false, + "type": "boolean" }, - "search": { + "name": { + "description": "Display name of the user.", + "example": "Example", "type": "string" }, - "source_url": { + "uri": { + "description": "Spotify URI of the user.", + "example": "spotify:user:example", "type": "string" }, - "stores": { - "items": { - "$ref": "#/definitions/ulta.Store" - }, - "type": "array" + "username": { + "description": "Spotify username of the user.", + "example": "example", + "type": "string" } }, "type": "object" }, - "ulta.SuggestProduct": { + "spotify.UserProfileTopArtists": { "properties": { - "brand_name": { + "imageUrl": { + "description": "URL of the image shown for the section.", + "example": "https://i.scdn.co/image/ab6775700000ee8555c25988a6ac314394d3fbf5", "type": "string" }, - "image_url": { + "subtitle": { + "description": "Secondary line shown under the section heading.", + "example": "Only visible to the user", "type": "string" }, - "product_name": { + "title": { + "description": "Heading of the top artists section, as Spotify shows it.", + "example": "Top artists this month", "type": "string" }, - "url": { + "topArtistsPageUri": { + "description": "Spotify URI of the page that lists the user's top artists.", + "example": "spotify:user:spotify:top:artists", "type": "string" } }, "type": "object" }, - "ulta.SuggestResponse": { + "spotify.albumResponseDoc": { "properties": { - "count": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "first_top_result": { - "items": { - "$ref": "#/definitions/ulta.SuggestProduct" - }, - "type": "array" - }, - "query": { - "type": "string" - }, - "source_url": { - "type": "string" + "data": { + "$ref": "#/definitions/spotify.AlbumResponse" }, - "suggestions": { - "items": { - "$ref": "#/definitions/ulta.Suggestion" - }, - "type": "array" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ulta.Suggestion": { + "spotify.artistAlbumsResponseDoc": { "properties": { - "label": { - "type": "string" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "top_results": { - "items": { - "$ref": "#/definitions/ulta.SuggestProduct" - }, - "type": "array" + "data": { + "$ref": "#/definitions/spotify.ArtistAlbumsResponse" }, - "url": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ulta.categoriesResponseDoc": { + "spotify.artistCollectionResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/ulta.CategoriesResponse" + "$ref": "#/definitions/spotify.ArtistCollectionResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ulta.categoryResponseDoc": { + "spotify.artistResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/ulta.CategoryResponse" + "$ref": "#/definitions/spotify.ArtistResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ulta.productDetailResponseDoc": { + "spotify.audiobookChaptersResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/ulta.ProductDetailResponse" + "$ref": "#/definitions/spotify.AudiobookChaptersResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ulta.productQuestionsResponseDoc": { + "spotify.audiobookResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/ulta.ProductQuestionsResponse" + "$ref": "#/definitions/spotify.AudiobookResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ulta.productReviewsResponseDoc": { + "spotify.browsePageResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/ulta.ProductReviewsResponse" + "$ref": "#/definitions/spotify.BrowsePageResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ulta.searchResponseDoc": { + "spotify.browseSectionResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/ulta.SearchResponse" + "$ref": "#/definitions/spotify.BrowseSectionResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ulta.storesResponseDoc": { + "spotify.chartsResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/ulta.StoreResponse" + "$ref": "#/definitions/spotify.ChartResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "ulta.suggestResponseDoc": { + "spotify.countryHubContentResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/ulta.SuggestResponse" + "$ref": "#/definitions/spotify.CountryHubContentResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "upwork.FreelancerFeedback": { + "spotify.countryHubResponseDoc": { "properties": { - "client_name": { - "type": "string" - }, - "comment": { - "type": "string" - }, - "date": { - "type": "string" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "rating": { - "type": "number" + "data": { + "$ref": "#/definitions/spotify.CountryHubResponse" }, - "title": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "upwork.FreelancerResponse": { + "spotify.episodeResponseDoc": { "properties": { - "feedback": { - "items": { - "$ref": "#/definitions/upwork.FreelancerFeedback" - }, - "type": "array" - }, - "hourly_rate": { - "type": "string" - }, - "id": { - "type": "string" - }, - "job_success_score": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "local_time": { - "type": "string" + "data": { + "$ref": "#/definitions/spotify.PodcastEpisodeResponse" }, - "location": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "spotify.homeResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/spotify.HomeResponse" }, - "overview": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "spotify.playlistResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "rating": { - "type": "number" + "data": { + "$ref": "#/definitions/spotify.PlaylistResponse" }, - "review_count": { + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "spotify.searchCatalogResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/spotify.SearchResponse" }, - "total_hours": { + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "spotify.searchResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "total_jobs": { + "data": { + "$ref": "#/definitions/spotify.SearchPodcastsResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "spotify.showEpisodesResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "url": { - "type": "string" + "data": { + "$ref": "#/definitions/spotify.PodcastEpisodesResponse" }, - "verified": { - "type": "boolean" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "upwork.JobClient": { + "spotify.showRecommendationsResponseDoc": { "properties": { - "company_size": { - "description": "Size of the client's company, as Upwork shows it, such as `Small company (2-9 people)`.", - "type": "string" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "country": { - "description": "Client's country, as Upwork shows it: either a short code such as `UKR` or the full country name.", - "type": "string" + "data": { + "$ref": "#/definitions/spotify.ShowRecommendationsResponse" }, - "hires": { - "description": "Client's hiring history, as text such as `32 hires, 1 active`.", - "type": "string" - }, - "industry": { - "description": "Industry of the client's company, as Upwork shows it.", - "type": "string" - }, - "location": { - "description": "City of the client, as Upwork shows it.", - "type": "string" - }, - "member_since": { - "description": "Date the client joined Upwork, as text such as `Aug 30, 2023`.", - "type": "string" - }, - "total_hours": { - "description": "Total hours shown for the client, as text such as `207 hours`.", - "type": "string" - }, - "total_spent": { - "description": "Total amount the client has spent on Upwork, as text such as `$9K total spent`.", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "upwork.JobResponse": { + "spotify.showResponseDoc": { "properties": { - "applicant_countries": { - "description": "Countries the client accepts applicants from.", - "items": { - "type": "string" - }, - "type": "array" - }, - "budget_type": { - "description": "Budget type of the job: `hourly` or `fixed`.", - "type": "string" - }, - "client": { - "allOf": [ - { - "$ref": "#/definitions/upwork.JobClient" - } - ], - "description": "Summary of the client who posted the job." - }, - "country": { - "description": "Country of the job's location, as a code such as `US`.", - "type": "string" - }, - "currency": { - "description": "Currency of the job budget, such as `USD`.", - "type": "string" - }, - "description": { - "description": "Full text of the job description.", - "type": "string" - }, - "duration": { - "description": "Expected length of the project, such as `1 to 3 months`.", - "type": "string" - }, - "employment_type": { - "description": "Employment types of the posting, such as `CONTRACTOR` or `TEMPORARY`.", - "items": { - "type": "string" - }, - "type": "array" - }, - "experience_level": { - "description": "Experience level the client asks for, such as `Expert`.", - "type": "string" - }, - "fixed_budget": { - "description": "Fixed price of the job, in `currency`. Set when `budget_type` is `fixed`.", - "type": "number" - }, - "hourly_max": { - "description": "Highest hourly rate offered, in `currency`. Set when `budget_type` is `hourly`.", - "type": "number" - }, - "hourly_min": { - "description": "Lowest hourly rate offered, in `currency`. Set when `budget_type` is `hourly`.", - "type": "number" - }, - "id": { - "description": "Upwork job id, as returned by the search endpoint.", - "type": "string" - }, - "location_type": { - "description": "Where the work is done, such as `TELECOMMUTE` for remote work.", - "type": "string" - }, - "posted_at": { - "description": "Time the job was posted, in ISO 8601.", - "type": "string" - }, - "project_type": { - "description": "Project type, such as `Ongoing project`.", - "type": "string" - }, - "proposals": { - "description": "Number of proposals the job has received, as text such as `50+`.", - "type": "string" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "title": { - "description": "Title of the job posting.", - "type": "string" + "data": { + "$ref": "#/definitions/spotify.ShowMetadataResponse" }, - "url": { - "description": "Upwork URL of the job posting.", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "upwork.JobSummary": { + "spotify.trackRecommendedResponseDoc": { "properties": { - "budget_text": { - "type": "string" - }, - "budget_type": { - "description": "\"hourly\" or \"fixed\"", - "type": "string" - }, - "description": { - "type": "string" - }, - "duration": { - "type": "string" - }, - "experience_level": { - "type": "string" - }, - "id": { - "description": "ID is Upwork's own opaque job identifier (the digits after \"~\" in the\njob's URL), suitable for Service.Job.", - "type": "string" - }, - "posted_at": { - "type": "string" - }, - "skills": { - "items": { - "type": "string" - }, - "type": "array" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/spotify.TrackRecommendedResponse" }, - "url": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "upwork.SearchResponse": { + "spotify.trackResponseDoc": { "properties": { - "jobs": { - "items": { - "$ref": "#/definitions/upwork.JobSummary" - }, - "type": "array" - }, - "page": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "query": { - "type": "string" + "data": { + "$ref": "#/definitions/spotify.TrackResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "upwork.freelancerResponseDoc": { + "spotify.trackSimilarAlbumsResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/upwork.FreelancerResponse" + "$ref": "#/definitions/spotify.TrackSimilarAlbumsResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "upwork.jobResponseDoc": { + "spotify.userProfileFollowersResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/upwork.JobResponse" + "$ref": "#/definitions/spotify.UserProfileFollowersResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "upwork.searchResponseDoc": { + "spotify.userProfilePlaylistsResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/upwork.SearchResponse" + "$ref": "#/definitions/spotify.UserProfilePlaylistsResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "usage.usageBillingStateDoc": { + "spotify.userProfileResponseDoc": { "properties": { - "allow_overage": { - "example": true, - "type": "boolean" - }, - "created_at": { - "example": "2026-04-01T00:00:00Z", - "type": "string" - }, - "credits_remaining": { - "example": 398750, - "type": "integer" - }, - "credits_used": { - "example": 1250, - "type": "integer" - }, - "currency": { - "example": "usd", - "type": "string" - }, - "daily_credit_limit": { - "example": 25000, - "type": "integer" - }, - "daily_credits_remaining": { - "example": 24100, - "type": "integer" - }, - "daily_credits_used": { - "example": 900, - "type": "integer" - }, - "daily_key": { - "example": "2026-04-22", - "type": "string" - }, - "expected_subscription_amount_cents": { - "example": 7900, - "type": "integer" - }, - "expected_total_amount_cents": { - "example": 7900, - "type": "integer" - }, - "hard_limit": { - "example": false, - "type": "boolean" - }, - "included_credits": { - "example": 400000, - "type": "integer" - }, - "overage_credits": { - "example": 0, - "type": "integer" - }, - "period_end": { - "example": "2026-05-01T00:00:00Z", - "type": "string" - }, - "period_key": { - "example": "2026-04", - "type": "string" - }, - "period_start": { - "example": "2026-04-01T00:00:00Z", - "type": "string" - }, - "plan": { - "example": "Pro", - "type": "string" - }, - "pricing_source": { - "example": "plan_default", - "type": "string" - }, - "subscription_price_cents": { - "example": 7900, + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "updated_at": { - "example": "2026-04-22T12:00:00Z", - "type": "string" + "data": { + "$ref": "#/definitions/spotify.UserProfileResponse" }, - "user_id": { - "example": "user-1", - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "usage.usageEndpointItemDoc": { + "standard.AuthorArticle": { "properties": { - "charged_requests": { - "example": 220, - "type": "integer" - }, - "credits": { - "example": 660, - "type": "integer" - }, - "endpoint": { - "example": "google/search", + "section": { "type": "string" }, - "failed_requests": { - "example": 8, - "type": "integer" - }, - "non_billable_requests": { - "example": 12, - "type": "integer" + "section_url": { + "type": "string" }, - "overage": { - "example": 0, - "type": "integer" + "title": { + "type": "string" }, - "requests": { - "example": 240, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "usage.usageEndpointsDoc": { + "standard.AuthorResponse": { "properties": { - "from": { - "example": "2026-04-01T00:00:00Z", - "type": "string" - }, - "items": { + "articles": { "items": { - "$ref": "#/definitions/usage.usageEndpointItemDoc" + "$ref": "#/definitions/standard.AuthorArticle" }, "type": "array" }, - "range": { - "example": "period", + "bio": { "type": "string" }, - "to": { - "example": "2026-05-01T00:00:00Z", + "job_title": { "type": "string" - } - }, - "type": "object" - }, - "usage.usageEndpointsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/usage.usageEndpointsDoc" }, - "msg": { - "example": "OK", + "name": { "type": "string" - } - }, - "type": "object" - }, - "usage.usageOverviewDoc": { - "properties": { - "billing": { - "$ref": "#/definitions/usage.usageBillingStateDoc" }, - "from": { - "example": "2026-04-01T00:00:00Z", + "slug": { "type": "string" }, - "range": { - "example": "period", + "twitter": { "type": "string" }, - "requests": { - "$ref": "#/definitions/usage.usageRequestSummaryDoc" - }, - "to": { - "example": "2026-05-01T00:00:00Z", + "url": { "type": "string" - }, - "usage": { - "$ref": "#/definitions/usage.usageWindowSummaryDoc" } }, "type": "object" }, - "usage.usageOverviewResponseDoc": { + "starbucks.Amenity": { "properties": { "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/usage.usageOverviewDoc" + "type": "string" }, - "msg": { - "example": "OK", + "name": { "type": "string" } }, "type": "object" }, - "usage.usagePlatformAdjacencyDoc": { + "starbucks.MenuCategory": { "properties": { - "generated_at": { - "example": "2026-09-06T02:00:00Z", - "type": "string" - }, - "platforms": { + "children": { "items": { - "$ref": "#/definitions/usage.usagePlatformAdjacencyItemDoc" + "$ref": "#/definitions/starbucks.MenuCategory" }, "type": "array" }, - "users": { - "example": 97, + "display_order": { "type": "integer" }, - "window": { - "example": "lifetime", + "hero_image_url": { "type": "string" - } - }, - "type": "object" - }, - "usage.usagePlatformAdjacencyItemDoc": { - "properties": { - "co_used": { - "items": { - "$ref": "#/definitions/usage.usagePlatformCoUseDoc" - }, - "type": "array" }, - "platform": { - "example": "tiktok", + "image_url": { "type": "string" }, - "requests": { - "example": 2410, - "type": "integer" + "name": { + "type": "string" }, - "top_endpoints": { + "products": { "items": { - "$ref": "#/definitions/usage.usagePlatformEndpointTotalDoc" + "$ref": "#/definitions/starbucks.MenuProduct" }, "type": "array" - }, - "users": { - "example": 9, - "type": "integer" } }, "type": "object" }, - "usage.usagePlatformAdjacencyResponseDoc": { + "starbucks.MenuProduct": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/usage.usagePlatformAdjacencyDoc" + "availability": { + "description": "Availability is \"Available\" on the unscoped menu; a store-scoped\nmenu also returns \"NotAvailableHere\" for items that store lacks.", + "type": "string" }, - "msg": { - "example": "OK", + "default_size": { "type": "string" - } - }, - "type": "object" - }, - "usage.usagePlatformCoUseDoc": { - "properties": { - "platform": { - "example": "instagram", + }, + "default_size_sku": { "type": "string" }, - "users": { - "example": 4, + "display_order": { "type": "integer" - } - }, - "type": "object" - }, - "usage.usagePlatformEndpointTotalDoc": { - "properties": { - "endpoint": { - "example": "tiktok/search", + }, + "form": { + "description": "Form is the normalized, lowercase form slug (\"iced\", \"hot\",\n\"single\", \"packaged\", \"whole-bean\", \"via\") taken from the product's\nown menu URI. It is the second path segment Product requires.", "type": "string" }, - "requests": { - "example": 1830, - "type": "integer" - } - }, - "type": "object" - }, - "usage.usageRecentIPItemDoc": { - "properties": { - "error_count": { - "example": 6, - "type": "integer" + "image_url": { + "type": "string" }, - "ip": { - "example": "203.0.113.10", + "menu_uri": { "type": "string" }, - "last_seen_at": { - "example": "2026-04-22T12:00:00Z", + "name": { "type": "string" }, - "last_user_agent": { - "example": "Mozilla/5.0", + "product_detail_url": { "type": "string" }, - "request_count": { - "example": 90, - "type": "integer" + "product_number": { + "type": "string" }, - "success_count": { - "example": 84, - "type": "integer" + "product_type": { + "description": "ProductType is Starbucks' own coarse classification: \"Beverage\",\n\"Food\", or \"Coffee\".", + "type": "string" + }, + "sizes": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "usage.usageRecentIPsDoc": { + "starbucks.MenuResponse": { "properties": { - "from": { - "example": "2026-04-01T00:00:00Z", - "type": "string" - }, - "items": { + "categories": { "items": { - "$ref": "#/definitions/usage.usageRecentIPItemDoc" + "$ref": "#/definitions/starbucks.MenuCategory" }, "type": "array" }, - "range": { - "example": "period", + "category_count": { + "description": "CategoryCount counts top-level categories; ProductCount counts\ndistinct products anywhere in the tree.", + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "to": { - "example": "2026-05-01T00:00:00Z", + "market": { "type": "string" - } - }, - "type": "object" - }, - "usage.usageRecentIPsResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "product_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/usage.usageRecentIPsDoc" + "source_url": { + "type": "string" }, - "msg": { - "example": "OK", + "store_number": { "type": "string" } }, "type": "object" }, - "usage.usageRequestSummaryDoc": { + "starbucks.NearestStoreResponse": { "properties": { - "avg_latency_ms": { - "example": 824.5, + "distance_miles": { "type": "number" }, - "distinct_ip_count": { - "example": 3, - "type": "integer" + "fetched_at": { + "type": "string" }, - "error_requests": { - "example": 30, - "type": "integer" + "found": { + "description": "Found is false when Starbucks reports no nearest store for the\npoint at all.", + "type": "boolean" }, - "last_request_at": { - "example": "2026-04-22T12:00:00Z", + "lat": { + "type": "number" + }, + "lng": { + "type": "number" + }, + "market": { "type": "string" }, - "requests": { - "example": 420, - "type": "integer" + "nearest_latitude": { + "type": "number" }, - "success_requests": { - "example": 390, - "type": "integer" + "nearest_longitude": { + "type": "number" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "usage.usageTimeseriesDoc": { + "starbucks.Nutrition": { "properties": { - "bucket": { - "example": "day", + "calories": { "type": "string" }, - "from": { - "example": "2026-04-01T00:00:00Z", + "calories_from_fat": { "type": "string" }, - "items": { + "facts": { "items": { - "$ref": "#/definitions/usage.usageTimeseriesItemDoc" + "$ref": "#/definitions/starbucks.NutritionFact" }, "type": "array" }, - "range": { - "example": "period", - "type": "string" - }, - "to": { - "example": "2026-05-01T00:00:00Z", + "serving_size": { "type": "string" } }, "type": "object" }, - "usage.usageTimeseriesItemDoc": { + "starbucks.NutritionFact": { "properties": { - "bucket_end": { - "example": "2026-04-22T11:00:00Z", + "daily_percent_value": { "type": "string" }, - "bucket_start": { - "example": "2026-04-22T10:00:00Z", + "name": { "type": "string" }, - "charged_requests": { - "example": 28, - "type": "integer" - }, - "credits": { - "example": 84, - "type": "integer" - }, - "failed_requests": { - "example": 2, - "type": "integer" - }, - "non_billable_requests": { - "example": 2, - "type": "integer" + "subfacts": { + "items": { + "$ref": "#/definitions/starbucks.NutritionFact" + }, + "type": "array" }, - "overage": { - "example": 0, - "type": "integer" + "unit_of_measure": { + "type": "string" }, - "requests": { - "example": 32, - "type": "integer" + "value": { + "type": "string" } }, "type": "object" }, - "usage.usageTimeseriesResponseDoc": { + "starbucks.NutritionModifier": { "properties": { - "code": { - "example": 200, + "quantity": { + "description": "Quantity is how many of this modifier. Defaults to 1. For countable\nmodifiers (formCode \"qty\" -- espresso shots, syrup pumps) this is the\ndial that actually moves the numbers.", + "example": 3, "type": "integer" }, - "data": { - "$ref": "#/definitions/usage.usageTimeseriesDoc" + "replaced_sku": { + "description": "ReplacedSKU is the default modifier this one substitutes, when the\ncaller is swapping a pick-one slot such as the milk. Leave empty for\na modifier that is not replacing anything.", + "type": "string" }, - "msg": { - "example": "OK", + "sku": { + "description": "SKU is the modifier's sku, from a product size's default_recipe[].sku\nor from an option in the product's options tree (e.g. a different\nmilk).", + "example": "55", "type": "string" } }, "type": "object" }, - "usage.usageWindowSummaryDoc": { + "starbucks.NutritionOption": { "properties": { - "charged_requests": { - "example": 380, - "type": "integer" - }, - "credits": { - "example": 1140, - "type": "integer" + "form": { + "example": "hot", + "type": "string" }, - "failed_requests": { - "example": 15, - "type": "integer" + "market": { + "description": "Market selects which country site answers. Defaults to us.", + "example": "us", + "type": "string" }, - "non_billable_requests": { - "example": 25, - "type": "integer" + "modifiers": { + "description": "Modifiers is the COMPLETE build, not a delta from the default. Start\nfrom the size's default_recipe (returned by /starbucks/product),\nchange what you want, and send the whole list back. An empty list is\nrejected by Starbucks with \"Modifiers list required\".", + "items": { + "$ref": "#/definitions/starbucks.NutritionModifier" + }, + "type": "array" }, - "overage": { - "example": 0, - "type": "integer" + "product_number": { + "description": "ProductNumber and Form identify the product. Only the four\ncombinations in dynamicNutritionProducts are supported upstream.", + "example": "406", + "type": "string" }, - "requests": { - "example": 420, - "type": "integer" + "size_sku": { + "description": "SizeSKU is the sku of the size being built, from a /starbucks/product\nresult's sizes[].sku.", + "example": "93", + "type": "string" } }, "type": "object" }, - "usatoday.ArticleResponse": { + "starbucks.NutritionResponse": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "description": { + "fetched_at": { "type": "string" }, - "image_url": { + "form": { "type": "string" }, - "is_accessible_for_free": { - "type": "boolean" + "market": { + "type": "string" }, - "paragraphs": { + "modifiers": { "items": { - "type": "string" + "$ref": "#/definitions/starbucks.NutritionModifier" }, "type": "array" }, - "published_at": { - "type": "string" - }, - "section": { + "product_number": { "type": "string" }, - "title": { + "size_sku": { "type": "string" }, - "updated_at": { + "source_url": { "type": "string" }, - "url": { - "type": "string" + "values": { + "items": { + "$ref": "#/definitions/starbucks.NutritionValue" + }, + "type": "array" } }, "type": "object" }, - "usatoday.AuthorArticle": { + "starbucks.NutritionValue": { "properties": { - "description": { - "type": "string" - }, - "image_url": { + "key": { "type": "string" }, - "published_label": { + "name": { "type": "string" }, - "title": { + "unit_of_measure": { "type": "string" }, - "url": { + "value": { "type": "string" } }, "type": "object" }, - "usatoday.AuthorResponse": { + "starbucks.PickUpOption": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/usatoday.AuthorArticle" - }, - "type": "array" + "available": { + "type": "boolean" }, - "bio": { + "code": { "type": "string" }, "name": { "type": "string" - }, - "profile_id": { - "type": "string" - }, - "social_accounts": { - "items": { - "$ref": "#/definitions/usatoday.AuthorSocialAccount" - }, - "type": "array" - }, - "url": { - "type": "string" } }, "type": "object" }, - "usatoday.AuthorSocialAccount": { + "starbucks.ProductOptionGroup": { "properties": { - "platform": { + "name": { "type": "string" }, - "url": { + "type": { "type": "string" } }, "type": "object" }, - "usatoday.HeadlineItem": { + "starbucks.ProductResponse": { "properties": { - "image_url": { + "description": { "type": "string" }, - "published_at": { + "fetched_at": { "type": "string" }, - "title": { + "form": { "type": "string" }, - "updated_at": { + "image_url": { "type": "string" }, - "url": { + "in_catalog": { + "type": "boolean" + }, + "market": { "type": "string" - } - }, - "type": "object" - }, - "usatoday.HeadlinesResponse": { - "properties": { - "items": { + }, + "name": { + "type": "string" + }, + "options": { + "description": "Options are the customization choices Starbucks offers for this\nproduct, e.g. milk, syrups, espresso shots.", "items": { - "$ref": "#/definitions/usatoday.HeadlineItem" + "$ref": "#/definitions/starbucks.ProductOptionGroup" }, "type": "array" }, - "section": { + "product_number": { "type": "string" - } - }, - "type": "object" - }, - "usatoday.NewsResponse": { - "properties": { - "items": { + }, + "product_type": { + "type": "string" + }, + "sizes": { "items": { - "$ref": "#/definitions/usatoday.HeadlineItem" + "$ref": "#/definitions/starbucks.ProductSize" }, "type": "array" - } - }, - "type": "object" - }, - "usatoday.Section": { - "properties": { - "name": { - "type": "string" }, - "slug": { + "source_url": { "type": "string" }, - "url": { + "star_cost": { + "type": "integer" + }, + "store_number": { "type": "string" } }, "type": "object" }, - "usatoday.SectionsResponse": { + "starbucks.ProductSize": { "properties": { - "sections": { + "default_recipe": { + "description": "DefaultRecipe is the size's standard build -- the modifiers a plain\norder of this size already includes. It is exposed because it is the\nrequired input to the nutrition-calculate endpoint: that endpoint\nwants the FULL modifier set, not a delta, so a caller starts from\nthis list, changes what they want, and posts the whole thing back.", "items": { - "$ref": "#/definitions/usatoday.Section" + "$ref": "#/definitions/starbucks.RecipeModifier" }, "type": "array" - } - }, - "type": "object" - }, - "usatoday.articleResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/usatoday.ArticleResponse" }, - "msg": { - "example": "OK", + "display_name": { "type": "string" - } - }, - "type": "object" - }, - "usatoday.authorResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/usatoday.AuthorResponse" + "nutrition": { + "$ref": "#/definitions/starbucks.Nutrition" }, - "msg": { - "example": "OK", + "size_code": { "type": "string" - } - }, - "type": "object" - }, - "usatoday.headlinesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/usatoday.HeadlinesResponse" }, - "msg": { - "example": "OK", + "sku": { "type": "string" } }, "type": "object" }, - "usatoday.newsResponseDoc": { + "starbucks.RecipeModifier": { "properties": { - "code": { - "example": 200, - "type": "integer" + "form_code": { + "description": "FormCode describes how the modifier behaves: \"one\" is a\npick-exactly-one slot (the milk), \"qty\" is a countable (espresso\nshots, syrup pumps), \"modifier\"/\"yes-no\" are toggles.", + "type": "string" }, - "data": { - "$ref": "#/definitions/usatoday.NewsResponse" + "name": { + "type": "string" }, - "msg": { - "example": "OK", + "option_product_number": { + "description": "OptionProductNumber identifies the option in the product's own\noptions tree.", + "type": "string" + }, + "sku": { + "description": "SKU is the value to send as a nutrition-calculate modifier sku.", "type": "string" } }, "type": "object" }, - "usatoday.sectionsResponseDoc": { + "starbucks.Store": { "properties": { - "code": { - "example": 200, - "type": "integer" + "address": { + "type": "string" }, - "data": { - "$ref": "#/definitions/usatoday.SectionsResponse" + "amenities": { + "description": "Amenities are the store's features, each with Starbucks' own code\nand its human-readable name.", + "items": { + "$ref": "#/definitions/starbucks.Amenity" + }, + "type": "array" }, - "msg": { - "example": "OK", + "city": { "type": "string" - } - }, - "type": "object" - }, - "user.userAPIKeyItemDoc": { - "properties": { - "created_at": { - "example": "2026-04-22T12:00:00Z", + }, + "country": { "type": "string" }, - "expires_at": { - "example": "2026-04-23T12:00:00Z", + "distance_miles": { + "type": "number" + }, + "guest_ordering": { + "type": "boolean" + }, + "hours_status": { "type": "string" }, "id": { - "example": "2f8c3c7c4d8f4a4bb4bcb2d2f9e7f8f1", "type": "string" }, - "key_prefix": { - "example": "abcd1234", + "is_open_24_hours": { + "type": "boolean" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "mobile_ordering_availability": { + "description": "MobileOrderingAvailability is the upstream's own enum-ish state for\nMobile Order & Pay at this store, e.g. \"READY\" / \"NOT_READY\". It is\na live readiness state, not a static capability -- a store that\nsupports mobile ordering still reports NOT_READY while closed. Use\nthe \"XO\" amenity code for the static capability.", "type": "string" }, - "key_suffix": { - "example": "ef90", + "name": { "type": "string" }, - "last_used_at": { - "example": "2026-04-22T11:58:00Z", + "open": { + "type": "boolean" + }, + "open_status": { "type": "string" }, - "last_used_ip": { - "example": "203.0.113.10", + "ownership_type_code": { + "description": "OwnershipTypeCode distinguishes company-operated (\"CO\") from\nlicensed stores, which is why an airport or grocery-store kiosk\nbehaves differently from a standalone café.", "type": "string" }, - "masked_key": { - "example": "abcd1234...ef90", + "phone": { "type": "string" }, - "rotated_at": { - "example": "2026-04-22T12:00:00Z", + "pick_up_options": { + "description": "PickUpOptions are the fulfillment modes the store supports, each\nwith its own live availability flag.", + "items": { + "$ref": "#/definitions/starbucks.PickUpOption" + }, + "type": "array" + }, + "postal_code": { "type": "string" }, - "source": { - "example": "manual_rotate", + "schedule": { + "description": "Schedule is the store's weekly opening hours, Sunday-first as the\nupstream returns them.", + "items": { + "$ref": "#/definitions/starbucks.StoreDay" + }, + "type": "array" + }, + "state": { "type": "string" }, - "status": { - "example": "active", + "store_number": { + "description": "StoreNumber is Starbucks' own public store identifier, e.g.\n\"101-54\". ID is the locator's separate internal numeric id.", "type": "string" }, - "updated_at": { - "example": "2026-04-22T12:00:00Z", + "time_zone": { "type": "string" } }, "type": "object" }, - "user.userAPIKeysDoc": { + "starbucks.StoreDay": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/user.userAPIKeyItemDoc" - }, - "type": "array" + "day_of_week": { + "type": "string" + }, + "holiday": { + "type": "string" + }, + "hours": { + "type": "string" + }, + "open": { + "type": "boolean" } }, "type": "object" }, - "user.userAPIKeysResponseDoc": { + "starbucks.StoreResponse": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/user.userAPIKeysDoc" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "lat": { + "type": "number" + }, + "lng": { + "type": "number" + }, + "market": { "type": "string" - } - }, - "type": "object" - }, - "user.userBrowserLanguageDoc": { - "properties": { - "updated": { - "example": true, + }, + "place": { + "type": "string" + }, + "place_not_found": { + "description": "PlaceNotFound is true when Starbucks could not geocode Place at all.\nThe upstream signals this with a distinct object shape rather than an\nempty list, so a genuine no-results answer stays distinguishable from\nparser drift.", "type": "boolean" - } - }, - "type": "object" - }, - "user.userBrowserLanguageReq": { - "properties": { - "accept_language": { - "description": "AcceptLanguage is the raw Accept-Language header captured from a live console\nvisit (already ASCII-filtered and length-capped by the frontend, same as the\nOAuth signup path — see the SignupAcceptLanguage comment on models.User).", + }, + "result_capped": { + "description": "ResultCapped is true when the upstream returned its hard 50-result\nceiling, meaning more stores may exist near this point that the\nupstream will not return under any pagination parameter.", + "type": "boolean" + }, + "source_url": { "type": "string" + }, + "stores": { + "items": { + "$ref": "#/definitions/starbucks.Store" + }, + "type": "array" } }, "type": "object" }, - "user.userBrowserLanguageResponseDoc": { + "starbucks.menuResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/user.userBrowserLanguageDoc" + "$ref": "#/definitions/starbucks.MenuResponse" }, "msg": { "example": "OK", @@ -247721,35 +252405,30 @@ }, "type": "object" }, - "user.userMeDoc": { + "starbucks.nearestStoreResponseDoc": { "properties": { - "email": { - "example": "operator@example.com", - "type": "string" - }, - "id": { - "example": "user-1", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "plan": { - "example": "Pro", - "type": "string" + "data": { + "$ref": "#/definitions/starbucks.NearestStoreResponse" }, - "username": { - "example": "operator", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "user.userMeResponseDoc": { + "starbucks.nutritionResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/user.userMeDoc" + "$ref": "#/definitions/starbucks.NutritionResponse" }, "msg": { "example": "OK", @@ -247758,26 +252437,14 @@ }, "type": "object" }, - "user.userRevealAPIKeyDoc": { - "properties": { - "api_key": { - "example": "7d0f3f6a5f6c4b91a6e3f5d91ef7dc7e5c7b0c8b4f2b4e57a7d8f1e2c3b4a5d6", - "type": "string" - }, - "key": { - "$ref": "#/definitions/user.userAPIKeyItemDoc" - } - }, - "type": "object" - }, - "user.userRevealAPIKeyResponseDoc": { + "starbucks.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/user.userRevealAPIKeyDoc" + "$ref": "#/definitions/starbucks.ProductResponse" }, "msg": { "example": "OK", @@ -247786,33 +252453,30 @@ }, "type": "object" }, - "user.userRotateAPIKeyDoc": { + "starbucks.storesResponseDoc": { "properties": { - "active_key": { - "$ref": "#/definitions/user.userAPIKeyItemDoc" - }, - "grace_period_seconds": { - "example": 86400, + "code": { + "example": 200, "type": "integer" }, - "new_api_key": { - "example": "7d0f3f6a5f6c4b91a6e3f5d91ef7dc7e5c7b0c8b4f2b4e57a7d8f1e2c3b4a5d6", - "type": "string" + "data": { + "$ref": "#/definitions/starbucks.StoreResponse" }, - "previous_key": { - "$ref": "#/definitions/user.userAPIKeyItemDoc" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "user.userRotateAPIKeyResponseDoc": { + "startpage.suggestResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/user.userRotateAPIKeyDoc" + "$ref": "#/definitions/suggest.Response" }, "msg": { "example": "OK", @@ -247821,1033 +252485,1413 @@ }, "type": "object" }, - "usmagazine.AuthorLink": { - "properties": { - "type": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "usmagazine.AuthorResponse": { + "steam.AchievementsResponse": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/usmagazine.HeadlineItem" - }, - "type": "array" - }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" - }, - "links": { + "achievements": { + "description": "Achievements of the app with their global unlock percentage, most unlocked first.", "items": { - "$ref": "#/definitions/usmagazine.AuthorLink" + "$ref": "#/definitions/steam.GlobalAchievement" }, "type": "array" }, - "name": { + "appid": { + "description": "Steam app id the achievements belong to.", "type": "string" }, - "url": { + "count": { + "description": "Number of achievements returned.", + "type": "integer" + }, + "source_url": { + "description": "URL the data was read from.", "type": "string" } }, "type": "object" }, - "usmagazine.HeadlineItem": { + "steam.AppDetails": { "properties": { - "author": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "published_at": { - "type": "string" - }, - "summary": { - "type": "string" + "achievements_total": { + "description": "Total number of achievements the app has.", + "type": "integer" }, - "title": { - "type": "string" + "appid": { + "description": "Steam app id.", + "type": "integer" }, - "type": { + "background": { + "description": "URL of the background image on the store page.", "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "usptoppubs.DetailResponse": { - "properties": { - "abstract": { + "capsule_image": { + "description": "URL of the capsule image used on store listings.", "type": "string" }, - "applicant_names": { + "categories": { + "description": "Steam store categories assigned to the app, each with an id and a name.", "items": { - "type": "string" + "$ref": "#/definitions/steam.IDName" }, "type": "array" }, - "application_number": { - "example": "19/048819", - "type": "string" + "content_descriptor_ids": { + "description": "ContentDescriptorIDs are Steam's mature-content flag ids (e.g. 1 nudity, 3\nadult content, 5 strong violence) — the store's own age/adult markers.", + "items": { + "type": "integer" + }, + "type": "array" }, - "assignee_name": { + "controller_support": { + "description": "Level of controller support Steam lists for the app.", "type": "string" }, - "claims": { + "developers": { + "description": "Names of the developers of the app.", "items": { "type": "string" }, "type": "array" }, - "cpc_codes": { - "type": "string" - }, - "database": { - "example": "US-PGPUB", - "type": "string" + "dlc": { + "description": "Steam app ids of the downloadable content for the app.", + "items": { + "type": "integer" + }, + "type": "array" }, - "description": { + "genres": { + "description": "Genres assigned to the app, each with an id and a name.", "items": { - "type": "string" + "$ref": "#/definitions/steam.IDName" }, "type": "array" }, - "fetched_at": { + "header_image": { + "description": "URL of the header image on the store page.", "type": "string" }, - "filing_date": { - "example": "2025-02-07", - "type": "string" + "is_free": { + "description": "Whether the app is free to play or free to own.", + "type": "boolean" }, - "guid": { - "example": "US-20260238009-A1", - "type": "string" + "metacritic": { + "allOf": [ + { + "$ref": "#/definitions/steam.Metacritic" + } + ], + "description": "Metacritic score and link for the app. Omitted when the store shows none." }, - "inventors_short": { - "type": "string" + "movies": { + "description": "Number of videos on the store page.", + "type": "integer" }, - "ipc_codes": { + "name": { + "description": "Name of the app on the Steam store.", "type": "string" }, - "kind_codes": { + "packages": { + "description": "Ids of the Steam packages that include the app. Use them with the package endpoint.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "platforms": { + "allOf": [ + { + "$ref": "#/definitions/steam.Platforms" + } + ], + "description": "Operating systems the app supports." + }, + "price_overview": { + "allOf": [ + { + "$ref": "#/definitions/steam.Price" + } + ], + "description": "Current price of the app. Omitted when the store shows no price." + }, + "publishers": { + "description": "Names of the publishers of the app.", "items": { "type": "string" }, "type": "array" }, - "language": { - "example": "EN", - "type": "string" + "recommendations": { + "description": "Total number of user recommendations the app has on Steam.", + "type": "integer" }, - "page_count": { + "release_date": { + "allOf": [ + { + "$ref": "#/definitions/steam.AppRelease" + } + ], + "description": "Release information of the app." + }, + "required_age": { + "description": "Minimum age in years that Steam requires to view the app.", "type": "integer" }, - "publication_date": { - "example": "2026-08-13", - "type": "string" + "screenshots": { + "description": "Number of screenshots on the store page.", + "type": "integer" }, - "publication_number": { - "example": "US20260238009A1", + "short_description": { + "description": "Short description of the app from the store page, as plain text.", "type": "string" }, "source_url": { + "description": "URL the data was read from.", "type": "string" }, - "title": { - "example": "HOME GRID FOR IMPROVED EFFICIENCY OF SOLAR ENERGY", + "supported_languages": { + "description": "Languages the app supports, as listed on the store page.", + "type": "string" + }, + "type": { + "description": "Kind of store item, such as `game`.", + "type": "string" + }, + "website": { + "description": "URL of the app's official website.", "type": "string" } }, "type": "object" }, - "usptoppubs.SearchResponse": { + "steam.AppRelease": { "properties": { - "fetched_at": { - "type": "string" - }, - "num_found": { - "example": 500, - "type": "integer" - }, - "page": { - "example": 0, - "type": "integer" - }, - "per_page": { - "example": 20, - "type": "integer" + "coming_soon": { + "description": "Whether the app has not been released yet.", + "type": "boolean" }, - "query": { - "example": "battery", + "date": { + "description": "Release date as the store displays it.", "type": "string" + } + }, + "type": "object" + }, + "steam.CategoryBrowseResponse": { + "properties": { + "count": { + "type": "integer" }, - "results": { + "items": { "items": { - "$ref": "#/definitions/usptoppubs.SearchResult" + "$ref": "#/definitions/steam.CategoryItem" }, "type": "array" }, + "slug": { + "type": "string" + }, "source_url": { "type": "string" + }, + "start": { + "type": "integer" + }, + "tag_id": { + "type": "integer" + }, + "tag_name": { + "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "usptoppubs.SearchResult": { + "steam.CategoryItem": { "properties": { - "applicant_names": { + "appid": { + "type": "integer" + }, + "developers": { "items": { "type": "string" }, "type": "array" }, - "application_number": { - "example": "15/620,213", + "name": { "type": "string" }, - "assignee_name": { - "type": "string" + "platforms": { + "$ref": "#/definitions/steam.Platforms" }, - "cpc_codes": { - "type": "string" + "price_overview": { + "$ref": "#/definitions/steam.Price" }, - "database": { - "example": "USPAT", - "type": "string" + "publishers": { + "items": { + "type": "string" + }, + "type": "array" }, - "filing_date": { - "example": "2017-06-12", - "type": "string" + "release_date_unix": { + "type": "integer" }, - "guid": { - "example": "US-10758101-B2", - "type": "string" + "review_count": { + "type": "integer" }, - "inventors_short": { + "review_percent_positive": { + "type": "integer" + }, + "review_summary": { "type": "string" }, - "ipc_codes": { + "short_description": { "type": "string" }, - "kind_codes": { + "tags": { "items": { - "type": "string" + "$ref": "#/definitions/steam.WeightedTag" }, "type": "array" }, - "language": { - "example": "EN", - "type": "string" - }, - "page_count": { + "type": { "type": "integer" }, - "publication_date": { - "example": "2020-09-01", - "type": "string" - }, - "publication_number": { - "example": "US10758101B2", - "type": "string" - }, - "title": { - "example": "UPRIGHT VACUUM CLEANER WITH BATTERY SUPPORT PLATE", + "url": { "type": "string" } }, "type": "object" }, - "usptoppubs.detailResponseDoc": { + "steam.ChartRank": { "properties": { - "code": { - "example": 200, + "appid": { "type": "integer" }, - "data": { - "$ref": "#/definitions/usptoppubs.DetailResponse" + "concurrent_in_game": { + "type": "integer" }, - "msg": { - "example": "OK", + "last_week_rank": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "peak_in_game": { + "type": "integer" + }, + "rank": { + "type": "integer" + }, + "review_summary": { "type": "string" } }, "type": "object" }, - "usptoppubs.searchResponseDoc": { + "steam.ChartResponse": { "properties": { - "code": { - "example": 200, + "chart": { + "type": "string" + }, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/usptoppubs.SearchResponse" + "enriched": { + "type": "boolean" }, - "msg": { - "example": "OK", + "ranks": { + "items": { + "$ref": "#/definitions/steam.ChartRank" + }, + "type": "array" + }, + "source_url": { "type": "string" + }, + "updated_unix": { + "type": "integer" } }, "type": "object" }, - "valnet.AuthorSocialLink": { + "steam.CommunityRecommendationsResponse": { "properties": { - "type": { + "count": { + "type": "integer" + }, + "review_filter": { "type": "string" }, - "url": { + "reviews": { + "items": { + "$ref": "#/definitions/steam.CommunityReview" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "vanguardng.AuthorArticle": { + "steam.CommunityReview": { "properties": { - "byline": { + "appid": { "type": "string" }, - "published_at": { + "author_name": { "type": "string" }, - "summary": { + "author_profile_url": { "type": "string" }, - "title": { + "helpful": { "type": "string" }, - "url": { + "playtime": { + "type": "string" + }, + "recommendation_id": { + "type": "string" + }, + "review_excerpt": { + "type": "string" + }, + "review_url": { "type": "string" } }, "type": "object" }, - "vanguardng.AuthorResponse": { + "steam.FeaturedBucket": { "properties": { - "articles": { + "count": { + "description": "Number of items in the bucket.", + "type": "integer" + }, + "id": { + "description": "Id of the bucket, as Steam names it.", + "type": "string" + }, + "items": { + "description": "Items in the bucket.", "items": { - "$ref": "#/definitions/vanguardng.AuthorArticle" + "$ref": "#/definitions/steam.FeaturedItem" }, "type": "array" }, - "feed_url": { - "type": "string" - }, "name": { + "description": "Display name of the bucket.", "type": "string" + } + }, + "type": "object" + }, + "steam.FeaturedCategoriesResponse": { + "properties": { + "coming_soon": { + "allOf": [ + { + "$ref": "#/definitions/steam.FeaturedBucket" + } + ], + "description": "Bucket of upcoming releases." }, - "scanned": { - "type": "integer" + "new_releases": { + "allOf": [ + { + "$ref": "#/definitions/steam.FeaturedBucket" + } + ], + "description": "Bucket of new releases." }, - "section": { + "source_url": { + "description": "URL the data was read from.", "type": "string" + }, + "specials": { + "allOf": [ + { + "$ref": "#/definitions/steam.FeaturedBucket" + } + ], + "description": "Bucket of items currently on special offer." + }, + "top_sellers": { + "allOf": [ + { + "$ref": "#/definitions/steam.FeaturedBucket" + } + ], + "description": "Bucket of the store's top-selling items." } }, "type": "object" }, - "vanityfair.AuthorArticle": { + "steam.FeaturedItem": { "properties": { - "published_at": { + "currency": { + "description": "Currency code of the prices, such as `USD`.", "type": "string" }, - "title": { + "discount_percent": { + "description": "Discount currently applied, as a percentage.", + "type": "integer" + }, + "discounted": { + "description": "Whether the item is currently discounted.", + "type": "boolean" + }, + "final_price": { + "description": "Price after any discount, in minor currency units such as cents.", + "type": "integer" + }, + "header_image": { + "description": "URL of the item's header image.", "type": "string" }, - "url": { + "id": { + "description": "Steam id of the featured item.", + "type": "integer" + }, + "linux_available": { + "description": "Whether the item is available on Linux.", + "type": "boolean" + }, + "mac_available": { + "description": "Whether the item is available on macOS.", + "type": "boolean" + }, + "name": { + "description": "Name of the featured item.", "type": "string" + }, + "original_price": { + "description": "Price before any discount, in minor currency units such as cents.", + "type": "integer" + }, + "type": { + "description": "Numeric type code Steam gives the featured item.", + "type": "integer" + }, + "windows_available": { + "description": "Whether the item is available on Windows.", + "type": "boolean" } }, "type": "object" }, - "vanityfair.AuthorResponse": { + "steam.FeaturedResponse": { "properties": { - "articles": { + "featured_linux": { + "description": "Items featured for Linux players.", "items": { - "$ref": "#/definitions/vanityfair.AuthorArticle" + "$ref": "#/definitions/steam.FeaturedItem" }, "type": "array" }, - "biography": { + "featured_mac": { + "description": "Items featured for macOS players.", "items": { - "type": "string" + "$ref": "#/definitions/steam.FeaturedItem" }, "type": "array" }, - "image_url": { - "type": "string" - }, - "job_title": { - "type": "string" - }, - "name": { - "type": "string" + "featured_win": { + "description": "Items featured for Windows players.", + "items": { + "$ref": "#/definitions/steam.FeaturedItem" + }, + "type": "array" }, - "social_links": { + "large_capsules": { + "description": "Large spotlight capsules shown on the store front page.", "items": { - "type": "string" + "$ref": "#/definitions/steam.FeaturedItem" }, "type": "array" }, - "url": { + "source_url": { + "description": "URL the data was read from.", "type": "string" } }, "type": "object" }, - "variety.AuthorResponse": { + "steam.GlobalAchievement": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" + "name": { + "description": "Achievement identifier as Steam lists it, such as `TF_PLAY_GAME_EVERYCLASS`.", + "type": "string" }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "percent": { + "description": "Percentage of all players who have unlocked the achievement.", + "type": "number" + } + }, + "type": "object" + }, + "steam.HistogramBucket": { + "properties": { + "date": { + "description": "Start of the bucket, in Unix seconds.", + "type": "integer" }, - "has_next_page": { - "type": "boolean" + "recommendations_down": { + "description": "Number of negative recommendations in the bucket.", + "type": "integer" }, - "image_url": { + "recommendations_up": { + "description": "Number of positive recommendations in the bucket.", + "type": "integer" + } + }, + "type": "object" + }, + "steam.IDName": { + "properties": { + "description": { + "description": "Display name of the item, such as a category, genre or app name.", "type": "string" }, - "name": { + "id": { + "description": "Id of the item.", "type": "string" - }, - "page": { + } + }, + "type": "object" + }, + "steam.ItemsResponse": { + "properties": { + "count": { "type": "integer" }, - "slug": { - "type": "string" - }, - "social_links": { + "items": { "items": { - "$ref": "#/definitions/variety.AuthorSocialLink" + "$ref": "#/definitions/steam.CategoryItem" }, "type": "array" }, - "url": { + "source_url": { "type": "string" } }, "type": "object" }, - "variety.AuthorSocialLink": { + "steam.Metacritic": { "properties": { - "platform": { - "type": "string" + "score": { + "description": "Metacritic score of the app, out of 100.", + "type": "integer" }, "url": { + "description": "URL of the app's page on Metacritic.", "type": "string" } }, "type": "object" }, - "vestiaire.Brand": { + "steam.NewsItem": { "properties": { - "id": { - "example": "50", + "author": { + "description": "Name of the post's author.", "type": "string" }, - "name": { - "example": "Chanel", + "contents": { + "description": "Body text of the post, shortened to the requested maximum length.", "type": "string" }, - "url": { - "example": "https://www.vestiairecollective.com/chanel/", + "date": { + "description": "Time the post was published, in Unix seconds.", + "type": "integer" + }, + "feedlabel": { + "description": "Label of the news feed the post came from, such as `Community Announcements`.", "type": "string" - } - }, - "type": "object" - }, - "vestiaire.BrandsResponse": { - "properties": { - "brands": { + }, + "feedname": { + "description": "Name of the news feed the post came from, such as `steam_community_announcements`.", + "type": "string" + }, + "gid": { + "description": "Unique id of the news post.", + "type": "string" + }, + "is_external_url": { + "description": "Whether Steam flags the post's `url` as an external link.", + "type": "boolean" + }, + "tags": { + "description": "Tags Steam attaches to the post, such as `patchnotes`.", "items": { - "$ref": "#/definitions/vestiaire.Brand" + "type": "string" }, "type": "array" }, - "fetched_at": { - "example": "2026-09-09T12:00:00Z", + "title": { + "description": "Headline of the news post.", "type": "string" }, - "total": { - "example": 13693, - "type": "integer" + "url": { + "description": "URL of the news post.", + "type": "string" } }, "type": "object" }, - "vestiaire.CategoriesResponse": { + "steam.NewsResponse": { "properties": { - "fetched_at": { - "example": "2026-09-09T12:00:00Z", + "appid": { + "description": "Steam app id the news belongs to.", "type": "string" }, - "universes": { + "count": { + "description": "Number of news posts returned.", + "type": "integer" + }, + "items": { + "description": "News posts for the app.", "items": { - "$ref": "#/definitions/vestiaire.Universe" + "$ref": "#/definitions/steam.NewsItem" }, "type": "array" + }, + "source_url": { + "description": "URL the data was read from.", + "type": "string" } }, "type": "object" }, - "vestiaire.Category": { + "steam.PackageDetails": { "properties": { - "children": { + "apps": { + "description": "Apps included in the package. Each item has the app id in `id` and the app name in `description`.", "items": { - "$ref": "#/definitions/vestiaire.Category" + "$ref": "#/definitions/steam.IDName" }, "type": "array" }, - "count": { - "example": 82421, - "type": "integer" - }, - "id": { - "example": "5", + "header_image": { + "description": "URL of the package's header image.", "type": "string" }, "name": { - "example": "Bags", + "description": "Name of the package.", + "type": "string" + }, + "packageid": { + "description": "Steam package id.", + "type": "integer" + }, + "platforms": { + "allOf": [ + { + "$ref": "#/definitions/steam.Platforms" + } + ], + "description": "Operating systems the package supports." + }, + "price": { + "allOf": [ + { + "$ref": "#/definitions/steam.PackagePrice" + } + ], + "description": "Current price of the package. Omitted when the store shows no price." + }, + "release_date": { + "allOf": [ + { + "$ref": "#/definitions/steam.AppRelease" + } + ], + "description": "Release information of the package." + }, + "source_url": { + "description": "URL the data was read from.", "type": "string" } }, "type": "object" }, - "vestiaire.ConditionsResponse": { + "steam.PackagePrice": { "properties": { - "conditions": { - "items": { - "$ref": "#/definitions/vestiaire.FacetValue" - }, - "type": "array" - }, - "fetched_at": { - "example": "2026-09-09T12:00:00Z", + "currency": { + "description": "Currency code of the prices, such as `USD`.", "type": "string" + }, + "discount_percent": { + "description": "Discount currently applied, as a percentage.", + "type": "integer" + }, + "final": { + "description": "Price after any discount, in minor currency units such as cents.", + "type": "integer" + }, + "individual": { + "description": "Price of the apps in the package bought individually, in minor currency units such as cents.", + "type": "integer" + }, + "initial": { + "description": "Price before any discount, in minor currency units such as cents.", + "type": "integer" } }, "type": "object" }, - "vestiaire.FacetValue": { + "steam.Platforms": { "properties": { - "count": { - "example": 119169, - "type": "integer" + "linux": { + "description": "Whether the title supports Linux.", + "type": "boolean" }, - "id": { - "example": "50", - "type": "string" + "mac": { + "description": "Whether the title supports macOS.", + "type": "boolean" }, - "name": { - "example": "Chanel", - "type": "string" + "windows": { + "description": "Whether the title supports Windows.", + "type": "boolean" } }, "type": "object" }, - "vestiaire.PriceRange": { + "steam.PlayersResponse": { "properties": { - "max_cents": { - "example": 9765700, - "type": "integer" + "appid": { + "description": "Steam app id the count belongs to.", + "type": "string" }, - "min_cents": { - "example": 700, + "player_count": { + "description": "Number of players currently in the app.", "type": "integer" + }, + "source_url": { + "description": "URL the data was read from.", + "type": "string" } }, "type": "object" }, - "vestiaire.ProductRef": { + "steam.Price": { "properties": { - "id": { - "example": "6444", + "currency": { + "description": "Currency code of the prices, such as `USD`.", "type": "string" }, - "name": { - "example": "Off-White", + "discount_percent": { + "description": "Discount currently applied, as a percentage.", + "type": "integer" + }, + "final": { + "description": "Price after any discount, in minor currency units such as cents.", + "type": "integer" + }, + "final_formatted": { + "description": "Price after any discount, formatted for display as Steam shows it.", "type": "string" }, - "parent_id": { - "example": "2", + "initial": { + "description": "Price before any discount, in minor currency units such as cents.", + "type": "integer" + }, + "initial_formatted": { + "description": "Price before any discount, formatted for display as Steam shows it.", "type": "string" } }, "type": "object" }, - "vestiaire.ProductResponse": { + "steam.Review": { "properties": { - "available": { - "example": true, - "type": "boolean" - }, - "brand": { - "$ref": "#/definitions/vestiaire.ProductRef" + "author": { + "allOf": [ + { + "$ref": "#/definitions/steam.ReviewAuthor" + } + ], + "description": "Author of the review." }, - "category": { - "$ref": "#/definitions/vestiaire.ProductRef" + "comment_count": { + "description": "Number of comments on the review.", + "type": "integer" }, - "color": { - "example": "Black", + "language": { + "description": "Language the review is written in, as a Steam language name such as `english`.", "type": "string" }, - "condition": { - "example": "Never worn", - "type": "string" + "received_for_free": { + "description": "Whether the author received the game for free.", + "type": "boolean" }, - "currency": { - "example": "USD", + "recommendation_id": { + "description": "Steam id of the review.", "type": "string" }, - "description": { - "example": "Black leather jacket from Off-White for women. Never worn.", + "review": { + "description": "Full text of the review.", "type": "string" }, - "fetched_at": { - "example": "2026-09-09T12:00:00Z", - "type": "string" + "steam_purchase": { + "description": "Whether the author bought the game on Steam.", + "type": "boolean" }, - "id": { - "example": "70860454", - "type": "string" + "timestamp_created": { + "description": "Time the review was posted, in Unix seconds.", + "type": "integer" }, - "in_stock": { - "example": false, + "timestamp_updated": { + "description": "Time the review was last edited, in Unix seconds.", + "type": "integer" + }, + "voted_up": { + "description": "Whether the review recommends the game.", "type": "boolean" }, - "like_count": { - "example": 2, + "votes_funny": { + "description": "Number of votes marking the review as funny.", "type": "integer" }, - "material": { - "example": "Leather", - "type": "string" + "votes_up": { + "description": "Number of votes marking the review as helpful.", + "type": "integer" }, - "model": { - "$ref": "#/definitions/vestiaire.ProductRef" + "weighted_vote_score": { + "description": "Helpfulness score Steam gives the review, returned as a string such as `0.5`.", + "type": "string" }, - "name": { - "example": "Leather biker jacket", - "type": "string" - }, - "negotiable": { - "example": true, + "written_during_early_access": { + "description": "Whether the review was written while the game was in Early Access.", "type": "boolean" - }, - "pictures": { - "items": { - "type": "string" - }, - "type": "array" - }, - "price_cents": { - "example": 31100, + } + }, + "type": "object" + }, + "steam.ReviewAuthor": { + "properties": { + "last_played": { + "description": "Time the author last played the game.", "type": "integer" }, - "reserved": { - "example": false, - "type": "boolean" - }, - "seller": { - "$ref": "#/definitions/vestiaire.ProductSeller" - }, - "size": { - "example": "L", - "type": "string" + "num_games_owned": { + "description": "Number of games the author owns on Steam.", + "type": "integer" }, - "size_standard": { - "example": "International", - "type": "string" + "num_reviews": { + "description": "Number of reviews the author has written on Steam.", + "type": "integer" }, - "sold": { - "example": false, - "type": "boolean" + "playtime_at_review": { + "description": "Author's playtime in the game when the review was written, in minutes.", + "type": "integer" }, - "source_url": { - "example": "https://www.vestiairecollective.com/women-clothing/biker-jackets/off-white/black-leather-off-white-biker-jacket-70860454.shtml", - "type": "string" + "playtime_forever": { + "description": "Author's total playtime in the game, in minutes.", + "type": "integer" }, - "universe": { - "example": "Women", - "type": "string" + "playtime_last_two_weeks": { + "description": "Author's playtime in the game over the last two weeks, in minutes.", + "type": "integer" }, - "url": { - "example": "https://www.vestiairecollective.com/women-clothing/biker-jackets/off-white/black-leather-off-white-biker-jacket-70860454.shtml", + "steamid": { + "description": "Steam id of the review author.", "type": "string" } }, "type": "object" }, - "vestiaire.ProductSeller": { + "steam.ReviewSummary": { "properties": { - "badge": { - "example": "Common", - "type": "string" - }, - "country": { - "example": "United States", - "type": "string" + "num_reviews": { + "description": "Number of reviews returned in this response.", + "type": "integer" }, - "country_iso": { - "example": "US", - "type": "string" + "review_score": { + "description": "Numeric review score Steam gives the app. Set on the first page only.", + "type": "integer" }, - "id": { - "example": "36526194", + "review_score_desc": { + "description": "Review rating label, such as `Very Positive`. Set on the first page only.", "type": "string" }, - "products_listed": { - "example": 23, + "total_negative": { + "description": "Total number of negative reviews. Set on the first page only.", "type": "integer" }, - "products_sold": { - "example": 8, + "total_positive": { + "description": "Total number of positive reviews. Set on the first page only.", "type": "integer" }, - "username": { - "example": "michelle36526194", - "type": "string" + "total_reviews": { + "description": "Total number of reviews. Set on the first page only.", + "type": "integer" } }, "type": "object" }, - "vestiaire.SearchFacets": { + "steam.ReviewsHistogramResponse": { "properties": { - "brands": { - "items": { - "$ref": "#/definitions/vestiaire.FacetValue" - }, - "type": "array" + "appid": { + "description": "Steam app id the histogram belongs to.", + "type": "string" }, - "categories": { + "count_all_reviews": { + "description": "Total number of reviews counted for the histogram.", + "type": "integer" + }, + "end_date": { + "description": "End of the period the histogram covers, in Unix seconds.", + "type": "integer" + }, + "recent": { + "description": "Daily buckets of recommendations for the most recent period.", "items": { - "$ref": "#/definitions/vestiaire.FacetValue" + "$ref": "#/definitions/steam.HistogramBucket" }, "type": "array" }, - "conditions": { + "rollup_type": { + "description": "Size of each bucket in `rollups`, such as `week`.", + "type": "string" + }, + "rollups": { + "description": "Weekly or monthly buckets of recommendations covering the whole period.", "items": { - "$ref": "#/definitions/vestiaire.FacetValue" + "$ref": "#/definitions/steam.HistogramBucket" }, "type": "array" + }, + "source_url": { + "description": "URL the data was read from.", + "type": "string" + }, + "start_date": { + "description": "Start of the period the histogram covers, in Unix seconds.", + "type": "integer" } }, "type": "object" }, - "vestiaire.SearchItem": { + "steam.ReviewsResponse": { "properties": { - "brand": { - "example": "Chanel", + "appid": { + "description": "Steam app id the reviews belong to.", "type": "string" }, - "brand_id": { - "example": "50", - "type": "string" + "count": { + "description": "Number of reviews returned.", + "type": "integer" }, - "color": { - "example": "Black", + "cursor": { + "description": "Cursor to pass back to fetch the next page of reviews.", "type": "string" }, - "country": { - "example": "US", - "type": "string" + "query_summary": { + "allOf": [ + { + "$ref": "#/definitions/steam.ReviewSummary" + } + ], + "description": "Review totals and score for the query." }, - "created_at": { - "example": "2026-09-08T10:00:03Z", - "type": "string" + "reviews": { + "description": "Reviews on this page.", + "items": { + "$ref": "#/definitions/steam.Review" + }, + "type": "array" }, - "currency": { - "example": "USD", + "source_url": { + "description": "URL the data was read from.", "type": "string" - }, - "id": { - "example": "70816051", + } + }, + "type": "object" + }, + "steam.SearchItem": { + "properties": { + "controller_support": { + "description": "Level of controller support Steam lists for the item.", "type": "string" }, - "in_stock": { - "example": false, - "type": "boolean" - }, - "likes": { - "example": 1, + "id": { + "description": "Steam id of the result. Use it with the app endpoint when `type` is `app`.", "type": "integer" }, - "model": { - "example": "Timeless/Classique Chain", + "metascore": { + "description": "Metacritic score of the item, returned as a string such as `90`.", "type": "string" }, "name": { - "example": "Timeless/Classique Chain leather backpack", + "description": "Name of the item on the Steam store.", "type": "string" }, - "pictures": { - "items": { - "type": "string" - }, - "type": "array" - }, - "price_cents": { - "example": 270000, - "type": "integer" + "platforms": { + "allOf": [ + { + "$ref": "#/definitions/steam.Platforms" + } + ], + "description": "Operating systems the item supports." }, - "seller_id": { - "example": "28924234", - "type": "string" + "price": { + "allOf": [ + { + "$ref": "#/definitions/steam.Price" + } + ], + "description": "Current price of the item. Omitted when the store shows no price." }, - "sold": { - "example": false, + "streamingvideo": { + "description": "Whether Steam marks the item as streaming video.", "type": "boolean" }, - "url": { - "example": "https://www.vestiairecollective.com/women-bags/backpacks/chanel/black-leather-timeless-classique-chain-chanel-backpack-70816051.shtml", + "tiny_image": { + "description": "URL of a small image of the item.", + "type": "string" + }, + "type": { + "description": "Kind of result, such as `app`.", "type": "string" } }, "type": "object" }, - "vestiaire.SearchResponse": { + "steam.SearchResponse": { "properties": { - "facets": { - "$ref": "#/definitions/vestiaire.SearchFacets" - }, - "fetched_at": { - "example": "2026-09-09T12:00:00Z", - "type": "string" + "count": { + "description": "Number of results returned.", + "type": "integer" }, "items": { + "description": "Store items matching the search term.", "items": { - "$ref": "#/definitions/vestiaire.SearchItem" + "$ref": "#/definitions/steam.SearchItem" }, "type": "array" }, - "page": { - "example": 1, - "type": "integer" + "source_url": { + "description": "URL the data was read from.", + "type": "string" }, - "per_page": { - "example": 24, + "term": { + "description": "Search term that was used.", + "type": "string" + }, + "total": { + "description": "Total number of matches Steam reports for the term.", "type": "integer" + } + }, + "type": "object" + }, + "steam.SearchResultRow": { + "properties": { + "appid": { + "description": "Steam app id of the row, when the row is an app.", + "type": "string" }, - "price_range": { - "$ref": "#/definitions/vestiaire.PriceRange" + "bundleid": { + "description": "Steam bundle id of the row, when the row is a bundle.", + "type": "string" }, - "q": { - "example": "chanel bag", + "discount_pct": { + "description": "Discount shown on the row, as text.", "type": "string" }, - "sort": { - "example": "relevance", + "name": { + "description": "Name of the item on the Steam store.", "type": "string" }, - "source_url": { - "example": "https://www.vestiairecollective.com/search/?q=chanel+bag", + "packageid": { + "description": "Steam package id of the row, when the row is a package.", "type": "string" }, - "total_items": { - "example": 10000, - "type": "integer" + "platforms": { + "allOf": [ + { + "$ref": "#/definitions/steam.Platforms" + } + ], + "description": "Operating systems the item supports." }, - "total_pages": { - "example": 417, - "type": "integer" + "price": { + "description": "Price shown on the row, as text.", + "type": "string" + }, + "release_date": { + "description": "Release date shown on the row, such as `20 Oct, 2022`.", + "type": "string" + }, + "review_summary": { + "description": "Review rating label shown on the row, such as `Overwhelmingly Positive`.", + "type": "string" + }, + "tag_ids": { + "description": "Ids of the item's most-weighted community tags. Resolve their names with the tags list endpoint.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "url": { + "description": "URL of the item's store page.", + "type": "string" } }, "type": "object" }, - "vestiaire.SearchSellersResponse": { + "steam.SearchResultsResponse": { "properties": { - "fetched_at": { - "example": "2026-09-09T12:00:00Z", - "type": "string" - }, - "q": { - "example": "michelle", - "type": "string" + "count": { + "description": "Number of rows returned.", + "type": "integer" }, - "sellers": { + "results": { + "description": "Rows of the store search results on this page.", "items": { - "$ref": "#/definitions/vestiaire.SellerSearchMatch" + "$ref": "#/definitions/steam.SearchResultRow" }, "type": "array" + }, + "source_url": { + "description": "URL the data was read from.", + "type": "string" + }, + "start": { + "description": "Offset of the first row returned.", + "type": "integer" + }, + "term": { + "description": "Search term that was used.", + "type": "string" + }, + "total": { + "description": "Total number of matches Steam reports for the term.", + "type": "integer" } }, "type": "object" }, - "vestiaire.SellerResponse": { + "steam.SteamSpyResponse": { "properties": { - "community_rank": { - "example": 0, + "appid": { + "description": "Steam app id.", "type": "integer" }, - "country": { - "example": "United States", + "average_2weeks": { + "description": "Average playtime over the last two weeks, in minutes, as SteamSpy estimates it.", + "type": "integer" + }, + "average_forever": { + "description": "Average total playtime, in minutes, as SteamSpy estimates it.", + "type": "integer" + }, + "ccu": { + "description": "Concurrent users, as SteamSpy estimates it.", + "type": "integer" + }, + "developer": { + "description": "Name of the developer, as SteamSpy lists it.", "type": "string" }, - "country_iso": { - "example": "US", + "discount": { + "description": "Current discount, as SteamSpy reports it.", "type": "string" }, - "fetched_at": { - "example": "2026-09-09T12:00:00Z", + "genre": { + "description": "Genres of the app, as a comma-separated list such as `Action, Free to Play, Strategy`.", "type": "string" }, - "firstname": { - "example": "michelle", + "initialprice": { + "description": "Price before any discount, as SteamSpy reports it.", "type": "string" }, - "followers": { - "example": 26, + "languages": { + "description": "Languages the app supports, as SteamSpy lists them.", + "type": "string" + }, + "median_2weeks": { + "description": "Median playtime over the last two weeks, in minutes, as SteamSpy estimates it.", "type": "integer" }, - "following": { - "example": 11, + "median_forever": { + "description": "Median total playtime, in minutes, as SteamSpy estimates it.", "type": "integer" }, - "id": { - "example": "36526194", + "name": { + "description": "Name of the app, as SteamSpy lists it.", "type": "string" }, - "products_bought": { - "example": 0, + "negative": { + "description": "Number of negative reviews, as SteamSpy counts them.", "type": "integer" }, - "products_listed": { - "example": 23, - "type": "integer" + "owners": { + "description": "Estimated range of owners, such as `100,000,000 .. 200,000,000`.", + "type": "string" }, - "products_sold": { - "example": 8, + "positive": { + "description": "Number of positive reviews, as SteamSpy counts them.", "type": "integer" }, - "segment": { - "example": "C2C", + "price": { + "description": "Current price, as SteamSpy reports it.", "type": "string" }, - "source_url": { - "example": "https://www.vestiairecollective.com/profile/36526194", + "publisher": { + "description": "Name of the publisher, as SteamSpy lists it.", "type": "string" }, - "url": { - "example": "https://www.vestiairecollective.com/profile/36526194", + "source": { + "description": "Name of the data source, always `steamspy`.", "type": "string" }, - "username": { - "example": "michelle36526194", + "source_url": { + "description": "URL the data was read from.", "type": "string" + }, + "tags": { + "additionalProperties": { + "type": "integer" + }, + "description": "Map of tag name to the number of votes the tag received.", + "type": "object" + }, + "userscore": { + "description": "User score of the app, as SteamSpy reports it.", + "type": "integer" } }, "type": "object" }, - "vestiaire.SellerSearchMatch": { + "steam.TagEntry": { "properties": { - "avatar_url": { - "type": "string" - }, - "id": { - "example": "36526194", - "type": "string" - }, "name": { - "example": "michelle", "type": "string" }, - "username": { - "example": "michelle36526194", - "type": "string" + "tagid": { + "type": "integer" } }, "type": "object" }, - "vestiaire.SuggestBrand": { + "steam.TagsListResponse": { "properties": { - "id": { - "example": "50", - "type": "string" + "count": { + "type": "integer" }, - "name": { - "example": "Chanel", + "language": { "type": "string" }, - "url": { - "example": "https://www.vestiairecollective.com/chanel/", + "source_url": { "type": "string" + }, + "tags": { + "items": { + "$ref": "#/definitions/steam.TagEntry" + }, + "type": "array" } }, "type": "object" }, - "vestiaire.SuggestResponse": { + "steam.TopReleasePage": { "properties": { - "brands": { + "appids": { "items": { - "$ref": "#/definitions/vestiaire.SuggestBrand" + "type": "integer" }, "type": "array" }, - "fetched_at": { - "example": "2026-09-09T12:00:00Z", + "name": { "type": "string" }, - "q": { - "example": "chane", + "start_of_month_unix": { + "type": "integer" + }, + "url_path": { "type": "string" + } + }, + "type": "object" + }, + "steam.TopReleasesResponse": { + "properties": { + "count": { + "type": "integer" }, - "suggestions": { + "pages": { "items": { - "type": "string" + "$ref": "#/definitions/steam.TopReleasePage" }, "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "vestiaire.Universe": { + "steam.TopSellerRank": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/vestiaire.Category" - }, - "type": "array" + "appid": { + "type": "integer" + }, + "item": { + "$ref": "#/definitions/steam.CategoryItem" }, + "rank": { + "type": "integer" + } + }, + "type": "object" + }, + "steam.TopSellersResponse": { + "properties": { "count": { - "example": 346038, "type": "integer" }, - "id": { - "example": "1", + "country_code": { "type": "string" }, - "name": { - "example": "Women", + "ranks": { + "items": { + "$ref": "#/definitions/steam.TopSellerRank" + }, + "type": "array" + }, + "source_url": { "type": "string" + }, + "start_date_unix": { + "type": "integer" } }, "type": "object" }, - "vestiaire.brandsResponseDoc": { + "steam.WeightedTag": { + "properties": { + "tagid": { + "type": "integer" + }, + "weight": { + "type": "integer" + } + }, + "type": "object" + }, + "steam.achievementsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vestiaire.BrandsResponse" + "$ref": "#/definitions/steam.AchievementsResponse" }, "msg": { "example": "OK", @@ -248856,14 +253900,14 @@ }, "type": "object" }, - "vestiaire.categoriesResponseDoc": { + "steam.appResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vestiaire.CategoriesResponse" + "$ref": "#/definitions/steam.AppDetails" }, "msg": { "example": "OK", @@ -248872,14 +253916,14 @@ }, "type": "object" }, - "vestiaire.conditionsResponseDoc": { + "steam.categoryBrowseResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vestiaire.ConditionsResponse" + "$ref": "#/definitions/steam.CategoryBrowseResponse" }, "msg": { "example": "OK", @@ -248888,14 +253932,14 @@ }, "type": "object" }, - "vestiaire.productResponseDoc": { + "steam.chartResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vestiaire.ProductResponse" + "$ref": "#/definitions/steam.ChartResponse" }, "msg": { "example": "OK", @@ -248904,14 +253948,14 @@ }, "type": "object" }, - "vestiaire.searchResponseDoc": { + "steam.communityRecommendationsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vestiaire.SearchResponse" + "$ref": "#/definitions/steam.CommunityRecommendationsResponse" }, "msg": { "example": "OK", @@ -248920,14 +253964,14 @@ }, "type": "object" }, - "vestiaire.searchSellersResponseDoc": { + "steam.featuredCategoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vestiaire.SearchSellersResponse" + "$ref": "#/definitions/steam.FeaturedCategoriesResponse" }, "msg": { "example": "OK", @@ -248936,14 +253980,14 @@ }, "type": "object" }, - "vestiaire.sellerResponseDoc": { + "steam.featuredResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vestiaire.SellerResponse" + "$ref": "#/definitions/steam.FeaturedResponse" }, "msg": { "example": "OK", @@ -248952,14 +253996,14 @@ }, "type": "object" }, - "vestiaire.suggestResponseDoc": { + "steam.histogramResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vestiaire.SuggestResponse" + "$ref": "#/definitions/steam.ReviewsHistogramResponse" }, "msg": { "example": "OK", @@ -248968,432 +254012,611 @@ }, "type": "object" }, - "vice.AuthorResponse": { + "steam.itemsResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/vice.HeadlineItem" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/steam.ItemsResponse" }, - "image_url": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "steam.newsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/steam.NewsResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "vice.HeadlineItem": { + "steam.packageResponseDoc": { "properties": { - "author": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "image_url": { - "type": "string" + "data": { + "$ref": "#/definitions/steam.PackageDetails" }, - "published_at": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "steam.playersResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "summary": { - "type": "string" + "data": { + "$ref": "#/definitions/steam.PlayersResponse" }, - "title": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "steam.reviewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "type": { - "type": "string" + "data": { + "$ref": "#/definitions/steam.ReviewsResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "vinted.BrandEntry": { + "steam.searchResponseDoc": { "properties": { - "id": { - "example": "14", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "example": "adidas", - "type": "string" + "data": { + "$ref": "#/definitions/steam.SearchResponse" }, - "url": { - "example": "https://www.vinted.com/brand/14-adidas", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "vinted.BrandResponse": { + "steam.searchResultsResponseDoc": { "properties": { - "fetched_at": { - "example": "2026-08-07T12:00:00Z", - "type": "string" - }, - "id": { - "example": "386688", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "items": { - "items": { - "$ref": "#/definitions/vinted.ItemCard" - }, - "type": "array" + "data": { + "$ref": "#/definitions/steam.SearchResultsResponse" }, - "name": { - "example": "Cabela's", + "msg": { + "example": "OK", "type": "string" - }, - "page": { - "example": 1, + } + }, + "type": "object" + }, + "steam.steamspyResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "source_url": { - "example": "https://www.vinted.com/brand/386688", - "type": "string" + "data": { + "$ref": "#/definitions/steam.SteamSpyResponse" }, - "url": { - "example": "https://www.vinted.com/brand/386688", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "vinted.BrandsResponse": { + "steam.tagsListResponseDoc": { "properties": { - "brands": { - "items": { - "$ref": "#/definitions/vinted.BrandEntry" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "fetched_at": { - "example": "2026-08-07T12:00:00Z", - "type": "string" + "data": { + "$ref": "#/definitions/steam.TagsListResponse" }, - "source_url": { - "example": "https://www.vinted.com/brands", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "vinted.CatalogResponse": { + "steam.topReleasesResponseDoc": { "properties": { - "fetched_at": { - "example": "2026-08-07T12:00:00Z", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "items": { - "items": { - "$ref": "#/definitions/vinted.ItemCard" - }, - "type": "array" + "data": { + "$ref": "#/definitions/steam.TopReleasesResponse" }, - "page": { - "example": 1, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "steam.topSellersResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "search_text": { - "example": "jacket", - "type": "string" + "data": { + "$ref": "#/definitions/steam.TopSellersResponse" }, - "source_url": { - "example": "https://www.vinted.com/catalog?search_text=jacket", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "vinted.CategoriesResponse": { + "stockx.AskServiceLevel": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/vinted.CategoryEntry" - }, - "type": "array" + "count": { + "example": 1341, + "type": "integer" }, - "fetched_at": { - "example": "2026-08-07T12:00:00Z", + "inventory_type": { + "example": "CUSTODIAL", "type": "string" }, - "source_url": { - "example": "https://www.vinted.com/catalog", - "type": "string" + "lowest_ask": { + "example": 260, + "type": "integer" } }, "type": "object" }, - "vinted.CategoryEntry": { + "stockx.Badge": { "properties": { "id": { - "example": "1904", + "example": "SELLING_FAST", "type": "string" }, - "name": { - "example": "Women", + "subtitle": { + "example": "This item sells fast.", "type": "string" }, - "url": { - "example": "https://www.vinted.com/catalog/1904-women_root", + "title": { + "example": "713 Sold in Last 3 Days!", "type": "string" } }, "type": "object" }, - "vinted.CategoryResponse": { + "stockx.Brand": { "properties": { - "fetched_at": { - "example": "2026-08-07T12:00:00Z", + "group": { + "example": "M-O", "type": "string" }, - "id": { - "example": "1904", + "name": { + "example": "Nike", "type": "string" }, - "items": { + "slug": { + "example": "nike", + "type": "string" + } + }, + "type": "object" + }, + "stockx.BrandsResponse": { + "properties": { + "brands": { "items": { - "$ref": "#/definitions/vinted.ItemCard" + "$ref": "#/definitions/stockx.Brand" }, "type": "array" }, + "total_count": { + "example": 396, + "type": "integer" + } + }, + "type": "object" + }, + "stockx.CategoriesResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/stockx.Category" + }, + "type": "array" + } + }, + "type": "object" + }, + "stockx.Category": { + "properties": { "name": { - "example": "Women", + "example": "Shoes", "type": "string" }, - "page": { - "example": 1, - "type": "integer" - }, - "source_url": { - "example": "https://www.vinted.com/catalog/1904", + "slug": { + "example": "shoes", "type": "string" }, - "url": { - "example": "https://www.vinted.com/catalog/1904", - "type": "string" + "subcategories": { + "items": { + "$ref": "#/definitions/stockx.Subcategory" + }, + "type": "array" } }, "type": "object" }, - "vinted.ItemCard": { + "stockx.Listing": { "properties": { - "brand": { - "example": "Cabela's", - "type": "string" - }, "condition": { - "example": "Good", + "example": "New - Other", "type": "string" }, - "favourite_count": { - "example": 9, - "type": "integer" + "condition_alias": { + "example": "new-other", + "type": "string" }, - "id": { - "example": "9595406652", + "condition_description": { + "example": "Replacement box", "type": "string" }, "image_url": { - "example": "https://images1.vinted.net/t/01_00ebe_Runxp7FBSGM86vRdXFhYhM4A/310x430/3e52418b.webp", "type": "string" }, - "price_raw": { - "example": "$20.00", - "type": "string" + "price": { + "example": 250, + "type": "integer" }, "size": { - "example": "L / US 12-14", + "example": "12", "type": "string" }, - "title": { - "example": "Vintage leather Cabelas Women's jacket", + "size_descriptor": { + "example": "Size", "type": "string" + } + }, + "type": "object" + }, + "stockx.MarketData": { + "properties": { + "annual_average_price": { + "example": 253, + "type": "integer" }, - "total_price_raw": { - "example": "$21.70", - "type": "string" + "annual_sales_count": { + "example": 12394, + "type": "integer" }, - "url": { - "example": "https://www.vinted.com/items/9595406652-vintage-leather-cabelas-womens-jacket", - "type": "string" + "ask_service_levels": { + "additionalProperties": { + "$ref": "#/definitions/stockx.AskServiceLevel" + }, + "type": "object" + }, + "highest_bid": { + "example": 315, + "type": "integer" + }, + "last_90_days_average_price": { + "example": 253, + "type": "integer" + }, + "last_90_days_sales_count": { + "example": 12394, + "type": "integer" + }, + "last_sale": { + "example": 271, + "type": "integer" + }, + "lowest_ask": { + "example": 260, + "type": "integer" + }, + "number_of_asks": { + "example": 1341, + "type": "integer" + }, + "number_of_bids": { + "example": 334, + "type": "integer" + }, + "sales_last_72_hours": { + "example": 713, + "type": "integer" } }, "type": "object" }, - "vinted.ItemResponse": { + "stockx.ProductDetail": { "properties": { - "brand": { - "example": "Cabela's", - "type": "string" - }, - "categories": { - "example": [ - "Women", - "Clothing", - "Coats & Jackets" - ], + "badges": { "items": { - "type": "string" + "$ref": "#/definitions/stockx.Badge" }, "type": "array" }, - "color": { - "example": "Brown", + "brand": { + "example": "Jordan", "type": "string" }, - "condition": { - "example": "Good", + "colorway": { + "example": "Black/University Blue/White", "type": "string" }, "description": { - "example": "In good condition. Has scratches and scuffs.", "type": "string" }, - "fetched_at": { - "example": "2026-08-07T12:00:00Z", + "gender": { + "example": "men", "type": "string" }, "id": { - "example": "9595406652", + "example": "019ac251-3a0d-7243-bb16-5128353be8bf", "type": "string" }, - "material": { - "example": "Leather", + "image_url": { "type": "string" }, - "photos": { + "listings": { "items": { - "type": "string" + "$ref": "#/definitions/stockx.Listing" }, "type": "array" }, - "price_raw": { - "example": "$20.00", + "market": { + "$ref": "#/definitions/stockx.MarketData" + }, + "model": { + "example": "Jordan 5 Retro", "type": "string" }, - "size": { - "example": "L / US 12-14", + "primary_category": { + "example": "Air Jordan", + "type": "string" + }, + "primary_title": { + "example": "Jordan 5 Retro", + "type": "string" + }, + "product_category": { + "example": "sneakers", + "type": "string" + }, + "related_products": { + "items": { + "$ref": "#/definitions/stockx.ProductSummary" + }, + "type": "array" + }, + "release_date": { + "example": "2026-06-20", + "type": "string" + }, + "retail_price": { + "example": "220", + "type": "string" + }, + "secondary_title": { + "example": "Black University Blue (2026)", "type": "string" }, "source_url": { - "example": "https://www.vinted.com/items/9595406652-vintage-leather-cabelas-womens-jacket", + "example": "https://stockx.com/air-jordan-5-retro-black-university-blue-2026", + "type": "string" + }, + "style_id": { + "example": "DD0587-008", "type": "string" }, "title": { - "example": "Vintage leather Cabelas Women's jacket", + "example": "Jordan 5 Retro Black University Blue (2026)", "type": "string" }, - "url": { - "example": "https://www.vinted.com/items/9595406652-vintage-leather-cabelas-womens-jacket", + "traits": { + "items": { + "$ref": "#/definitions/stockx.ProductTrait" + }, + "type": "array" + }, + "url_key": { + "example": "air-jordan-5-retro-black-university-blue-2026", "type": "string" } }, "type": "object" }, - "vinted.MemberResponse": { + "stockx.ProductSummary": { "properties": { - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", - "example": "2026-08-07T12:00:00Z", + "brand": { + "example": "Jordan", "type": "string" }, - "followers_count": { - "description": "Number of members following this member.", - "example": 5, - "type": "integer" + "gender": { + "example": "men", + "type": "string" }, - "following_count": { - "description": "Number of members this member follows.", - "example": 0, + "highest_bid": { + "example": 267, "type": "integer" }, "id": { - "description": "Vinted member id.", - "example": "3159465141", + "example": "9acafeb5-bc4a-4d66-bc3a-4899d2e64775", "type": "string" }, - "location": { - "description": "City and country the member gives on their public profile.", - "example": "Scottsbluff, United States", + "image_url": { "type": "string" }, - "rating": { - "description": "Member's average rating on Vinted.", - "example": 5, - "type": "number" + "last_sale": { + "example": 176, + "type": "integer" }, - "source_url": { - "description": "URL the data was read from.", - "example": "https://www.vinted.com/member/3159465141", + "lowest_ask": { + "example": 173, + "type": "integer" + }, + "model": { + "example": "Jordan 4 Retro", "type": "string" }, - "url": { - "description": "URL of the member's profile page on Vinted.", - "example": "https://www.vinted.com/member/3159465141", + "product_category": { + "example": "sneakers", "type": "string" }, - "username": { - "description": "Member's Vinted username.", - "example": "alexist738", + "release_date": { + "example": "2026-08-05", + "type": "string" + }, + "title": { + "example": "Jordan 4 Retro Toro Bravo (2026)", + "type": "string" + }, + "url_key": { + "example": "air-jordan-4-retro-toro-bravo-2026", "type": "string" } }, "type": "object" }, - "vinted.brandResponseDoc": { + "stockx.ProductTrait": { "properties": { - "code": { - "example": 200, - "type": "integer" + "format": { + "example": "currency", + "type": "string" }, - "data": { - "$ref": "#/definitions/vinted.BrandResponse" + "name": { + "example": "Style", + "type": "string" }, - "msg": { - "example": "OK", + "value": { + "example": "DD0587-008", "type": "string" } }, "type": "object" }, - "vinted.brandsResponseDoc": { + "stockx.ReleaseCalendarResponse": { "properties": { - "code": { - "example": 200, + "from": { + "example": "2026-08-04", + "type": "string" + }, + "limit": { + "example": 20, "type": "integer" }, - "data": { - "$ref": "#/definitions/vinted.BrandsResponse" + "page": { + "example": 1, + "type": "integer" }, - "msg": { - "example": "OK", + "releases": { + "items": { + "$ref": "#/definitions/stockx.ProductSummary" + }, + "type": "array" + }, + "total_count": { + "example": 469, + "type": "integer" + } + }, + "type": "object" + }, + "stockx.SearchResponse": { + "properties": { + "category": { + "example": "sneakers", + "type": "string" + }, + "limit": { + "example": 20, + "type": "integer" + }, + "page": { + "example": 1, + "type": "integer" + }, + "products": { + "items": { + "$ref": "#/definitions/stockx.ProductSummary" + }, + "type": "array" + }, + "query": { + "example": "jordan 5", + "type": "string" + }, + "sort": { + "example": "featured", "type": "string" + }, + "total_count": { + "example": 1000, + "type": "integer" } }, "type": "object" }, - "vinted.catalogResponseDoc": { + "stockx.Subcategory": { + "properties": { + "name": { + "example": "Boots", + "type": "string" + }, + "slug": { + "example": "boots", + "type": "string" + } + }, + "type": "object" + }, + "stockx.brandsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vinted.CatalogResponse" + "$ref": "#/definitions/stockx.BrandsResponse" }, "msg": { "example": "OK", @@ -249402,14 +254625,14 @@ }, "type": "object" }, - "vinted.categoriesResponseDoc": { + "stockx.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vinted.CategoriesResponse" + "$ref": "#/definitions/stockx.CategoriesResponse" }, "msg": { "example": "OK", @@ -249418,14 +254641,14 @@ }, "type": "object" }, - "vinted.categoryResponseDoc": { + "stockx.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vinted.CategoryResponse" + "$ref": "#/definitions/stockx.ProductDetail" }, "msg": { "example": "OK", @@ -249434,14 +254657,14 @@ }, "type": "object" }, - "vinted.itemResponseDoc": { + "stockx.releasesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vinted.ItemResponse" + "$ref": "#/definitions/stockx.ReleaseCalendarResponse" }, "msg": { "example": "OK", @@ -249450,14 +254673,14 @@ }, "type": "object" }, - "vinted.memberResponseDoc": { + "stockx.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vinted.MemberResponse" + "$ref": "#/definitions/stockx.SearchResponse" }, "msg": { "example": "OK", @@ -249466,1371 +254689,1225 @@ }, "type": "object" }, - "vlr.AdvancedLine": { + "straitstimes.AuthorResponse": { "properties": { - "agent": { - "example": "omen", - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "clutches_1v1": { - "example": 0, - "type": "integer" + "email": { + "type": "string" }, - "clutches_1v2": { - "example": 0, - "type": "integer" + "name": { + "type": "string" }, - "clutches_1v3": { - "example": 0, - "type": "integer" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "strava.Challenge": { + "properties": { + "cover_image_url": { + "example": "https://dgalywyr863hv.cloudfront.net/challenges/6162/6162-cover.png", + "type": "string" }, - "clutches_1v4": { - "example": 0, - "type": "integer" + "dimension": { + "example": "avg_pace_min_distance", + "type": "string" }, - "clutches_1v5": { - "example": 0, - "type": "integer" + "duration": { + "example": "Aug 1, 2026 to Aug 31, 2026", + "type": "string" }, - "defuses": { - "example": 3, - "type": "integer" + "goal": { + "example": 10000, + "type": "number" }, - "econ_rating": { - "example": 49, - "type": "integer" + "goal_description": { + "example": "Complete a 10 km (6.2 mi) run.", + "type": "string" }, - "multikills_2k": { - "example": 13, - "type": "integer" + "icon": { + "example": "run", + "type": "string" }, - "multikills_3k": { - "example": 1, + "id": { + "example": 6162, "type": "integer" }, - "multikills_4k": { - "example": 1, - "type": "integer" + "logo_image_url": { + "example": "https://dgalywyr863hv.cloudfront.net/challenges/6162/6162-logo.png", + "type": "string" }, - "multikills_5k": { - "example": 0, - "type": "integer" + "name": { + "example": "August 10K Challenge", + "type": "string" }, - "plants": { - "example": 8, - "type": "integer" + "sponsored": { + "example": false, + "type": "boolean" }, - "player": { - "$ref": "#/definitions/vlr.MatrixPlayer" + "url": { + "example": "https://www.strava.com/challenges/August-10K-challenge-2026", + "type": "string" } }, "type": "object" }, - "vlr.AgentPick": { + "strava.ChallengeSection": { "properties": { - "agent": { - "example": "omen", + "category": { + "example": "run", "type": "string" }, - "percent": { - "example": 79, - "type": "number" + "challenges": { + "items": { + "$ref": "#/definitions/strava.Challenge" + }, + "type": "array" + }, + "title": { + "example": "Run Challenges", + "type": "string" } }, "type": "object" }, - "vlr.AgentUsage": { + "strava.ChallengesResponse": { "properties": { - "acs": { - "example": 206.5, - "type": "number" - }, - "adr": { - "example": 128.8, - "type": "number" - }, - "agent": { - "example": "Jett", + "fetched_at": { + "example": "2026-08-07T12:00:00Z", "type": "string" }, - "assists": { - "example": 26, - "type": "integer" + "promoted_challenge": { + "$ref": "#/definitions/strava.Challenge" }, - "assists_per_round": { - "example": 0.19, - "type": "number" + "sections": { + "items": { + "$ref": "#/definitions/strava.ChallengeSection" + }, + "type": "array" }, - "deaths": { - "example": 103, - "type": "integer" + "source_url": { + "example": "https://www.strava.com/challenges", + "type": "string" + } + }, + "type": "object" + }, + "strava.ClubResponse": { + "properties": { + "avatar_image_url": { + "example": "https://dgalywyr863hv.cloudfront.net/pictures/clubs/521703/11986503/2/large.jpg", + "type": "string" }, - "first_deaths": { - "example": 23, - "type": "integer" + "country_code": { + "example": "us", + "type": "string" }, - "first_kills": { - "example": 14, - "type": "integer" + "cover_image_url": { + "example": "https://dgalywyr863hv.cloudfront.net/pictures/clubs/521703/11986498/3/large.jpg", + "type": "string" }, - "first_kills_per_round": { - "example": 0.61, - "type": "number" + "description": { + "example": "Founded in 2019 Women of OZ NWA is an inclusive, non-profit organization...", + "type": "string" }, - "kast_percent": { - "example": 63, - "type": "number" + "fetched_at": { + "example": "2026-08-07T12:00:00Z", + "type": "string" }, - "kd": { - "example": 0.98, - "type": "number" + "id": { + "example": "521703", + "type": "string" }, - "kills": { - "example": 101, + "location": { + "example": "Bentonville, Arkansas", + "type": "string" + }, + "member_count": { + "example": 937, "type": "integer" }, - "kills_per_round": { - "example": 0.74, - "type": "number" + "name": { + "example": "Women of OZ NWA", + "type": "string" }, - "rating": { - "example": 0.93, - "type": "number" + "private": { + "example": true, + "type": "boolean" }, - "rounds": { - "example": 137, - "type": "integer" + "source_url": { + "example": "https://www.strava.com/clubs/521703", + "type": "string" }, - "use": { - "example": "(6) 29%", + "url": { + "example": "https://www.strava.com/clubs/521703", "type": "string" + }, + "verified": { + "example": false, + "type": "boolean" } }, "type": "object" }, - "vlr.ArticleDetail": { + "strava.RouteCard": { "properties": { - "author": { - "example": "jenopelle", + "description": { + "description": "Short description of the route.", + "example": "The Mallory Cave hike takes you to the mouth of a beautiful cave...", "type": "string" }, - "external_links": { - "items": { - "type": "string" - }, - "type": "array" - }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "difficulty": { + "description": "Difficulty label Strava shows for the route, such as `Easy`.", + "example": "Easy", "type": "string" }, - "id": { - "example": "781119", + "distance_raw": { + "description": "Route distance as Strava displays it, with its unit, such as `1.46 mi`.", + "example": "1.46 mi", "type": "string" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" - }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" - }, - "published_at": { - "example": "2026-10-28T09:16:51Z", + "elevation_gain_raw": { + "description": "Elevation gain as Strava displays it, with its unit, such as `345 ft`.", + "example": "345 ft", "type": "string" }, - "references": { - "items": { - "$ref": "#/definitions/vlr.ArticleRef" - }, - "type": "array" - }, - "source_url": { - "example": "https://www.vlr.gg/matches", + "image_url": { + "description": "URL of the route's image.", + "example": "https://dgtzuqphqg23d.cloudfront.net/8UruePMrrrQMdHGsELroGsOsTMWqh030g7159PMSue4-768x576.jpg", "type": "string" }, - "text": { + "name": { + "description": "Name of the route as Strava shows it.", + "example": "Mallory Cave via N.C.A.R. Trail", "type": "string" }, - "title": { - "example": "Efina set to leave Gen.G as free agent", + "path": { + "description": "Route path on Strava. Pass it to the route detail endpoint.", + "example": "hiking/usa/colorado/boulder/mallory-cave_5171952737974445730", "type": "string" }, + "rank": { + "description": "Position of the route in the listing.", + "example": 1, + "type": "integer" + }, "url": { + "description": "URL of the route page on Strava.", + "example": "https://www.strava.com/routes/hiking/usa/colorado/boulder/mallory-cave_5171952737974445730", "type": "string" } }, "type": "object" }, - "vlr.ArticleRef": { + "strava.RouteDetailResponse": { "properties": { - "id": { - "example": "17", + "difficulty": { + "example": "Easy", + "type": "string" + }, + "distance_raw": { + "example": "1.46 mi", + "type": "string" + }, + "elevation_gain_raw": { + "example": "345 ft", + "type": "string" + }, + "estimated_time_raw": { + "example": "33:48", + "type": "string" + }, + "fetched_at": { + "example": "2026-08-07T12:00:00Z", "type": "string" }, "name": { - "example": "Gen.G", + "example": "Mallory Cave via N.C.A.R. Trail", "type": "string" }, - "slug": { - "example": "gen-g", + "path": { + "example": "hiking/usa/colorado/boulder/mallory-cave_5171952737974445730", "type": "string" }, - "type": { - "enum": [ - "team", - "player", - "event" - ], - "example": "team", + "route_type": { + "example": "Hiking Trail", + "type": "string" + }, + "source_url": { + "example": "https://www.strava.com/routes/hiking/usa/colorado/boulder/mallory-cave_5171952737974445730", + "type": "string" + }, + "summary": { + "example": "The Mallory Cave hike takes you to the mouth of a beautiful cave...", "type": "string" }, "url": { - "example": "https://www.vlr.gg/team/17/gen-g", + "example": "https://www.strava.com/routes/hiking/usa/colorado/boulder/mallory-cave_5171952737974445730", "type": "string" } }, "type": "object" }, - "vlr.BuyBucket": { + "strava.RoutesResponse": { "properties": { - "buy": { - "enum": [ - "eco", - "half", - "full" - ], - "example": "eco", + "country": { + "description": "Country slug that was requested, such as `usa`.", + "example": "usa", "type": "string" }, - "label": { - "example": "On Eco <10k", + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-08-07T12:00:00Z", "type": "string" }, - "teams": { + "page": { + "description": "Page number returned, starting at 1.", + "example": 1, + "type": "integer" + }, + "region": { + "description": "Region slug that was requested, such as `colorado`.", + "example": "colorado", + "type": "string" + }, + "routes": { + "description": "Routes listed on this page.", "items": { - "$ref": "#/definitions/vlr.BuyOutcome" + "$ref": "#/definitions/strava.RouteCard" }, "type": "array" - } - }, - "type": "object" - }, - "vlr.BuyOutcome": { - "properties": { - "team": { - "example": "LOUD", + }, + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.strava.com/routes/hiking/usa/colorado?page=1", "type": "string" }, - "vs_eco": { - "$ref": "#/definitions/vlr.Ratio" + "sport": { + "description": "Sport the routes are for, such as `hiking`.", + "example": "hiking", + "type": "string" }, - "vs_full": { - "$ref": "#/definitions/vlr.Ratio" + "title": { + "description": "Title of the Strava route listing page.", + "example": "The Best Hiking Trails in Colorado", + "type": "string" }, - "vs_half": { - "$ref": "#/definitions/vlr.Ratio" + "total_pages": { + "description": "Total number of pages in the route listing.", + "example": 16, + "type": "integer" + }, + "total_results": { + "description": "Total number of routes in the listing.", + "example": 318, + "type": "integer" } }, "type": "object" }, - "vlr.CompositionMatch": { + "strava.challengesResponseDoc": { "properties": { - "agents": { - "items": { - "type": "string" - }, - "type": "array" - }, - "match_id": { - "example": "777952", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "opponent": { - "example": "Nova Esports", - "type": "string" + "data": { + "$ref": "#/definitions/strava.ChallengesResponse" }, - "result": { - "enum": [ - "win", - "loss" - ], - "example": "win", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "vlr.EconomyBlock": { + "strava.clubResponseDoc": { "properties": { - "buy_buckets": { - "items": { - "$ref": "#/definitions/vlr.BuyBucket" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "game_id": { - "example": "283286", - "type": "string" + "data": { + "$ref": "#/definitions/strava.ClubResponse" }, - "map": { - "example": "Bind", + "msg": { + "example": "OK", "type": "string" - }, - "map_number": { - "example": 1, + } + }, + "type": "object" + }, + "strava.routeDetailResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "rounds": { - "items": { - "$ref": "#/definitions/vlr.EconomyRound" - }, - "type": "array" + "data": { + "$ref": "#/definitions/strava.RouteDetailResponse" }, - "teams": { - "items": { - "$ref": "#/definitions/vlr.TeamEconomy" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "vlr.EconomyRound": { + "strava.routesResponseDoc": { "properties": { - "pistol": { - "example": true, - "type": "boolean" - }, - "round": { - "example": 1, + "code": { + "example": 200, "type": "integer" }, - "team1_bank_k": { - "example": 0.1, - "type": "number" + "data": { + "$ref": "#/definitions/strava.RoutesResponse" }, - "team1_buy": { - "enum": [ - "eco", - "half", - "full" - ], - "example": "eco", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "streeteasy.Area": { + "properties": { + "id": { + "type": "integer" }, - "team1_loadout_k": { - "example": 3.9, - "type": "number" - }, - "team2_bank_k": { - "example": 0.1, - "type": "number" + "level": { + "type": "integer" }, - "team2_buy": { - "enum": [ - "eco", - "half", - "full" - ], - "example": "eco", + "name": { "type": "string" }, - "team2_loadout_k": { - "example": 4, - "type": "number" + "parentId": { + "type": "integer" }, - "winner_side": { - "enum": [ - "attack", - "defense" - ], - "example": "defense", + "short": { "type": "string" + } + }, + "type": "object" + }, + "streeteasy.BuildingAmenityGroup": { + "properties": { + "items": { + "items": { + "type": "string" + }, + "type": "array" }, - "winner_team": { - "example": "VIT", + "name": { "type": "string" } }, "type": "object" }, - "vlr.EventAgentsResponse": { + "streeteasy.BuildingDetails": { "properties": { - "agents": { - "example": [ - "omen" - ], + "address": { + "type": "string" + }, + "amenities": { "items": { - "type": "string" + "$ref": "#/definitions/streeteasy.BuildingAmenityGroup" }, "type": "array" }, - "compositions": { + "available_rental_count": { + "type": "integer" + }, + "available_rental_listings": { "items": { - "$ref": "#/definitions/vlr.MapCompositions" + "$ref": "#/definitions/streeteasy.BuildingListing" }, "type": "array" }, - "event_id": { - "example": "3166", + "available_sale_count": { + "type": "integer" + }, + "available_sale_listings": { + "items": { + "$ref": "#/definitions/streeteasy.BuildingListing" + }, + "type": "array" + }, + "building_type": { "type": "string" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "description": { "type": "string" }, - "maps": { + "facts": { "items": { - "$ref": "#/definitions/vlr.MapAgentRow" + "$ref": "#/definitions/streeteasy.BuildingFact" }, "type": "array" }, - "overall": { - "$ref": "#/definitions/vlr.MapAgentRow" + "floor_count": { + "type": "integer" }, - "source_url": { - "example": "https://www.vlr.gg/matches", + "name": { + "type": "string" + }, + "neighborhoods": { + "items": { + "type": "string" + }, + "type": "array" + }, + "policies": { + "items": { + "type": "string" + }, + "type": "array" + }, + "slug": { + "type": "string" + }, + "unit_count": { + "type": "integer" + }, + "url": { "type": "string" + }, + "year_built": { + "type": "integer" } }, "type": "object" }, - "vlr.EventDetail": { + "streeteasy.BuildingFact": { "properties": { - "dates": { - "example": "Oct 21 – Nov 1, 2026", + "label": { "type": "string" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "value": { "type": "string" - }, - "id": { - "example": "3166", + } + }, + "type": "object" + }, + "streeteasy.BuildingListing": { + "properties": { + "bathrooms": { "type": "string" }, - "image_url": { + "bedrooms": { "type": "string" }, - "location": { + "listed_by": { "type": "string" }, - "name": { - "example": "VCT 2026: China Threshold", + "listing_type": { "type": "string" }, - "prize": { - "example": "TBD", + "photo_url": { "type": "string" }, - "series": { - "example": "Valorant Champions Tour 2027", + "price": { "type": "string" }, - "source_url": { - "example": "https://www.vlr.gg/matches", + "square_footage": { "type": "string" }, - "subtitle": { + "unit": { "type": "string" }, - "teams": { - "items": { - "$ref": "#/definitions/vlr.TeamRef" - }, - "type": "array" + "url_path": { + "type": "string" } }, "type": "object" }, - "vlr.EventMatchesResponse": { + "streeteasy.GeoPoint": { "properties": { - "count": { - "example": 22, - "type": "integer" - }, - "event_id": { - "example": "3166", - "type": "string" - }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" - }, - "matches": { - "items": { - "$ref": "#/definitions/vlr.MatchSummary" - }, - "type": "array" + "latitude": { + "type": "number" }, - "source_url": { - "example": "https://www.vlr.gg/matches", - "type": "string" + "longitude": { + "type": "number" } }, "type": "object" }, - "vlr.EventRef": { + "streeteasy.LeadMedia": { "properties": { - "id": { - "example": "3166", - "type": "string" - }, - "name": { - "example": "VCT 2026: China Threshold", - "type": "string" - }, - "series": { - "example": "Week 2: Round of 12", - "type": "string" - }, - "url": { - "type": "string" + "photo": { + "$ref": "#/definitions/streeteasy.Photo" } }, "type": "object" }, - "vlr.EventStatsResponse": { + "streeteasy.MarketDataCatalog": { "properties": { - "count": { - "example": 67, - "type": "integer" - }, - "event_id": { - "example": "3166", - "type": "string" - }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" - }, - "players": { + "metrics": { "items": { - "$ref": "#/definitions/vlr.StatsRow" + "$ref": "#/definitions/streeteasy.MarketDataMetric" }, "type": "array" }, - "side": { - "enum": [ - "all", - "t", - "ct" - ], - "example": "all", - "type": "string" - }, - "source_url": { - "example": "https://www.vlr.gg/matches", + "source": { "type": "string" } }, "type": "object" }, - "vlr.EventSummary": { + "streeteasy.MarketDataMetric": { "properties": { - "country_code": { - "example": "br", - "type": "string" - }, - "dates": { - "example": "Oct 22—Nov 3", + "bedrooms": { "type": "string" }, "id": { - "example": "3166", - "type": "string" - }, - "image_url": { - "type": "string" - }, - "name": { - "example": "VCT 2026: China Threshold", "type": "string" }, - "prize": { - "example": "$500,000", + "label": { "type": "string" }, - "status": { - "enum": [ - "upcoming", - "ongoing", - "completed" - ], - "example": "ongoing", + "property_type": { "type": "string" }, - "url": { + "type": { "type": "string" } }, "type": "object" }, - "vlr.EventsResponse": { + "streeteasy.MarketDataSeries": { "properties": { - "count": { - "example": 40, + "area_count": { "type": "integer" }, - "events": { + "areas": { "items": { - "$ref": "#/definitions/vlr.EventSummary" + "$ref": "#/definitions/streeteasy.MarketDataSeriesArea" }, "type": "array" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "data_through": { "type": "string" }, - "has_more": { - "example": true, - "type": "boolean" - }, - "page": { - "example": 1, - "type": "integer" + "dataset": { + "$ref": "#/definitions/streeteasy.MarketDataMetric" }, - "region": { - "example": "all", + "end_month": { "type": "string" }, - "source_url": { - "example": "https://www.vlr.gg/matches", + "source": { "type": "string" }, - "tier": { - "example": "all", + "start_month": { "type": "string" } }, "type": "object" }, - "vlr.ForumCategoriesResponse": { + "streeteasy.MarketDataSeriesArea": { "properties": { - "categories": { + "borough": { + "type": "string" + }, + "months": { "items": { - "$ref": "#/definitions/vlr.ForumCategory" + "$ref": "#/definitions/streeteasy.MarketDataSeriesMonth" }, "type": "array" }, - "count": { - "example": 3, - "type": "integer" - }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "name": { "type": "string" }, - "source_url": { - "example": "https://www.vlr.gg/matches", + "type": { "type": "string" } }, "type": "object" }, - "vlr.ForumCategory": { + "streeteasy.MarketDataSeriesMonth": { "properties": { - "description": { - "example": "Anything and everything Valorant", + "month": { "type": "string" }, - "group": { - "example": "Valorant", - "type": "string" + "value": { + "type": "number" + } + }, + "type": "object" + }, + "streeteasy.MarketIndices": { + "properties": { + "area_count": { + "type": "integer" }, - "last_post_time": { - "example": "Oct 27, 2026 at 20:35 CET", - "type": "string" + "areas": { + "items": { + "$ref": "#/definitions/streeteasy.MarketIndicesArea" + }, + "type": "array" }, - "last_poster": { - "example": "iceypicks", + "data_through": { "type": "string" }, - "last_thread_id": { - "example": "780920", + "end_month": { "type": "string" }, - "name": { - "example": "Valorant Discussion", + "source": { "type": "string" }, - "posts": { - "example": 5543705, - "type": "integer" - }, - "slug": { - "enum": [ - "valorant-discussion", - "off-topic", - "site-feedback" - ], - "example": "valorant-discussion", + "start_month": { "type": "string" - }, - "threads": { - "example": 577804, - "type": "integer" } }, "type": "object" }, - "vlr.ForumThread": { + "streeteasy.MarketIndicesArea": { "properties": { - "author": { - "example": "enigma", + "borough": { "type": "string" }, - "category": { - "example": "valorant-discussion", + "months": { + "items": { + "$ref": "#/definitions/streeteasy.MarketIndicesMonth" + }, + "type": "array" + }, + "name": { "type": "string" }, - "category_name": { - "example": "Valorant Discussion", + "type": { + "type": "string" + } + }, + "type": "object" + }, + "streeteasy.MarketIndicesMonth": { + "properties": { + "month": { "type": "string" }, - "frags": { - "example": 2408, + "rent_index": { + "type": "number" + }, + "sales_price_index": { + "type": "number" + } + }, + "type": "object" + }, + "streeteasy.MarketInventory": { + "properties": { + "area_count": { "type": "integer" }, - "id": { - "example": "780920", - "type": "string" + "areas": { + "items": { + "$ref": "#/definitions/streeteasy.MarketInventoryArea" + }, + "type": "array" }, - "last_active": { - "example": "5 years ago", + "data_through": { "type": "string" }, - "last_poster": { - "example": "enigma", + "end_month": { "type": "string" }, - "pinned": { - "example": false, - "type": "boolean" + "source": { + "type": "string" }, - "posted": { - "example": "5 years ago", + "start_month": { + "type": "string" + } + }, + "type": "object" + }, + "streeteasy.MarketInventoryArea": { + "properties": { + "borough": { "type": "string" }, - "replies": { - "example": 1, - "type": "integer" + "months": { + "items": { + "$ref": "#/definitions/streeteasy.MarketInventoryMonth" + }, + "type": "array" }, - "title": { - "example": "Zak9: Cane is back", + "name": { "type": "string" }, - "url": { + "type": { "type": "string" } }, "type": "object" }, - "vlr.ForumThreadsResponse": { + "streeteasy.MarketInventoryMonth": { "properties": { - "category": { - "example": "valorant-discussion", + "month": { "type": "string" }, - "count": { - "example": 30, + "rental_inventory": { "type": "integer" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" - }, - "has_more": { - "example": true, - "type": "boolean" - }, - "page": { - "example": 1, + "sales_inventory": { "type": "integer" - }, - "source_url": { - "example": "https://www.vlr.gg/matches", - "type": "string" - }, - "threads": { - "items": { - "$ref": "#/definitions/vlr.ForumThread" - }, - "type": "array" } }, "type": "object" }, - "vlr.H2HMatch": { + "streeteasy.OpenHouse": { "properties": { - "date": { - "example": "2026/10/16", - "type": "string" - }, - "event": { - "example": "Champions 2026", + "end_date": { "type": "string" }, - "id": { - "example": "754736", + "name": { "type": "string" }, - "stage": { - "example": "UBF", + "start_date": { "type": "string" }, - "team1_score": { - "example": 2, - "type": "integer" - }, - "team2_score": { - "example": 1, - "type": "integer" - }, - "url": { + "status": { "type": "string" - }, - "winner": { - "description": "team1/team2 are the head_to_head teams, left and right", - "enum": [ - "team1", - "team2" - ], - "example": "team1", + } + }, + "type": "object" + }, + "streeteasy.Photo": { + "properties": { + "key": { "type": "string" } }, "type": "object" }, - "vlr.HeadToHead": { + "streeteasy.QuickSearchEntry": { "properties": { - "matches": { + "details": { "items": { - "$ref": "#/definitions/vlr.H2HMatch" + "type": "string" }, "type": "array" }, - "team1": { - "example": "LOUD", + "name": { "type": "string" }, - "team2": { - "example": "Team Vitality", + "url": { "type": "string" } }, "type": "object" }, - "vlr.HistoryResponse": { + "streeteasy.QuickSearchGroup": { "properties": { - "count": { - "example": 50, - "type": "integer" + "entries": { + "items": { + "$ref": "#/definitions/streeteasy.QuickSearchEntry" + }, + "type": "array" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "id": { "type": "string" }, - "has_more": { - "example": true, + "is_preview": { "type": "boolean" }, - "id": { - "example": "2059", + "title": { "type": "string" }, - "matches": { - "items": { - "$ref": "#/definitions/vlr.TeamMatch" - }, - "type": "array" - }, - "page": { - "example": 1, + "total_count": { "type": "integer" - }, - "source_url": { - "example": "https://www.vlr.gg/matches", - "type": "string" } }, "type": "object" }, - "vlr.KillMatrix": { + "streeteasy.QuickSearchResult": { "properties": { - "mode": { - "enum": [ - "overall", - "first_kills", - "op_kills" - ], - "example": "overall", - "type": "string" - }, - "rows": { + "groups": { "items": { - "$ref": "#/definitions/vlr.MatrixRow" + "$ref": "#/definitions/streeteasy.QuickSearchGroup" }, "type": "array" + }, + "query": { + "type": "string" } }, "type": "object" }, - "vlr.MapAgentRow": { + "streeteasy.RentalEdge": { "properties": { - "attack_win_percent": { - "example": 49, - "type": "number" - }, - "defense_win_percent": { - "example": 51, - "type": "number" - }, - "games": { - "example": 8, - "type": "integer" + "node": { + "$ref": "#/definitions/streeteasy.RentalListing" }, - "map": { - "example": "Summit", + "type": { "type": "string" - }, - "pick_rates": { - "items": { - "$ref": "#/definitions/vlr.AgentPick" - }, - "type": "array" } }, "type": "object" }, - "vlr.MapCompositions": { + "streeteasy.RentalListing": { "properties": { - "map": { - "example": "Split", + "advertisedOnSe": { + "type": "boolean" + }, + "areaName": { "type": "string" }, - "teams": { - "items": { - "$ref": "#/definitions/vlr.TeamComposition" - }, - "type": "array" - } - }, - "type": "object" - }, - "vlr.MapResult": { - "properties": { - "duration": { - "example": "41:12", + "bedroomCount": { + "type": "integer" + }, + "buildingType": { "type": "string" }, + "fullBathroomCount": { + "type": "integer" + }, + "furnished": { + "type": "boolean" + }, + "geoPoint": { + "$ref": "#/definitions/streeteasy.GeoPoint" + }, + "halfBathroomCount": { + "type": "integer" + }, "id": { - "example": "287476", "type": "string" }, - "name": { - "example": "Summit", + "isPremiumHdpEnabled": { + "type": "boolean" + }, + "leadMedia": { + "$ref": "#/definitions/streeteasy.LeadMedia" + }, + "offMarketAt": { "type": "string" }, - "number": { - "example": 1, - "type": "integer" + "price": { + "type": "number" }, - "picked_by": { - "example": "Unsettled Resentment", + "saleType": { "type": "string" }, - "players": { - "items": { - "$ref": "#/definitions/vlr.PlayerLine" - }, - "type": "array" + "sourceGroupLabel": { + "type": "string" }, - "teams": { - "items": { - "$ref": "#/definitions/vlr.MapTeamResult" - }, - "type": "array" + "status": { + "type": "string" + }, + "street": { + "type": "string" + }, + "tier": { + "type": "string" + }, + "totalMonthlyPrice": { + "type": "number" + }, + "unit": { + "type": "string" + }, + "urlPath": { + "type": "string" } }, "type": "object" }, - "vlr.MapSide": { + "streeteasy.RentalSearch": { "properties": { - "first_rounds": { - "example": 21, - "type": "integer" - }, - "round_win_percent": { - "example": 47, - "type": "number" + "edges": { + "items": { + "$ref": "#/definitions/streeteasy.RentalEdge" + }, + "type": "array" }, - "rounds_lost": { - "example": 248, - "type": "integer" + "search": { + "properties": { + "criteria": { + "type": "string" + } + }, + "type": "object" }, - "rounds_won": { - "example": 223, + "totalCount": { "type": "integer" } }, "type": "object" }, - "vlr.MapTeamResult": { + "streeteasy.SaleEdge": { "properties": { - "name": { - "example": "Unsettled Resentment", - "type": "string" - }, - "rounds": { - "$ref": "#/definitions/vlr.RoundSplit" + "node": { + "$ref": "#/definitions/streeteasy.SaleListing" }, - "score": { - "example": 17, - "type": "integer" + "type": { + "type": "string" } }, "type": "object" }, - "vlr.MatchDetail": { + "streeteasy.SaleListing": { "properties": { - "all_maps_players": { - "items": { - "$ref": "#/definitions/vlr.PlayerLine" - }, - "type": "array" - }, - "event": { - "$ref": "#/definitions/vlr.EventRef" + "advertisedOnSe": { + "type": "boolean" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "areaName": { "type": "string" }, - "format": { - "example": "Bo3", + "bedroomCount": { + "type": "integer" + }, + "buildingType": { "type": "string" }, - "head_to_head": { - "$ref": "#/definitions/vlr.HeadToHead" + "fullBathroomCount": { + "type": "integer" + }, + "furnished": { + "type": "boolean" + }, + "geoPoint": { + "$ref": "#/definitions/streeteasy.GeoPoint" }, "id": { - "example": "777956", "type": "string" }, - "maps": { - "items": { - "$ref": "#/definitions/vlr.MapResult" - }, - "type": "array" + "isPremiumHdpEnabled": { + "type": "boolean" }, - "note": { + "leadMedia": { + "$ref": "#/definitions/streeteasy.LeadMedia" + }, + "offMarketAt": { "type": "string" }, - "past_matches": { - "items": { - "$ref": "#/definitions/vlr.PastMatches" - }, - "type": "array" + "price": { + "type": "number" }, - "source_url": { - "example": "https://www.vlr.gg/matches", + "saleType": { "type": "string" }, - "start_time_utc": { - "example": "2026-10-27T05:00:00Z", + "sourceGroupLabel": { "type": "string" }, - "status": { - "example": "final", + "street": { "type": "string" }, - "teams": { - "items": { - "$ref": "#/definitions/vlr.TeamScore" - }, - "type": "array" + "unit": { + "type": "string" }, - "url": { + "urlPath": { "type": "string" } }, "type": "object" }, - "vlr.MatchEconomy": { + "streeteasy.SaleSearch": { "properties": { - "all_maps": { - "$ref": "#/definitions/vlr.EconomyBlock" - }, - "available": { - "example": true, - "type": "boolean" - }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" - }, - "id": { - "example": "754737", - "type": "string" - }, - "maps": { + "edges": { "items": { - "$ref": "#/definitions/vlr.EconomyBlock" + "$ref": "#/definitions/streeteasy.SaleEdge" }, "type": "array" }, - "source_url": { - "example": "https://www.vlr.gg/matches", - "type": "string" + "search": { + "properties": { + "criteria": { + "type": "string" + } + }, + "type": "object" + }, + "totalCount": { + "type": "integer" } }, "type": "object" }, - "vlr.MatchListResponse": { + "streeteasy.SchoolDetails": { "properties": { - "count": { - "example": 50, + "address": { + "type": "string" + }, + "district": { "type": "integer" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "fax": { "type": "string" }, - "has_more": { - "example": true, - "type": "boolean" - }, - "matches": { + "grades": { "items": { - "$ref": "#/definitions/vlr.MatchSummary" + "type": "string" }, "type": "array" }, - "page": { - "example": 1, - "type": "integer" - }, - "source_url": { - "example": "https://www.vlr.gg/matches", + "name": { "type": "string" - } - }, - "type": "object" - }, - "vlr.MatchPerformance": { - "properties": { - "all_maps": { - "$ref": "#/definitions/vlr.PerformanceBlock" - }, - "available": { - "example": true, - "type": "boolean" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "neighborhood": { "type": "string" }, - "id": { - "example": "754737", + "phone": { "type": "string" }, - "maps": { - "items": { - "$ref": "#/definitions/vlr.PerformanceBlock" - }, - "type": "array" + "slug": { + "type": "string" }, - "source_url": { - "example": "https://www.vlr.gg/matches", + "url": { "type": "string" } }, "type": "object" }, - "vlr.MatchRounds": { + "streeteasy.UnitAddress": { "properties": { - "available": { - "example": true, - "type": "boolean" + "country": { + "type": "string" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "neighborhood": { "type": "string" }, - "id": { - "example": "754737", + "postal_code": { "type": "string" }, - "maps": { - "items": { - "$ref": "#/definitions/vlr.RoundsBlock" - }, - "type": "array" + "region": { + "type": "string" }, - "source_url": { - "example": "https://www.vlr.gg/matches", + "street": { "type": "string" } }, "type": "object" }, - "vlr.MatchSummary": { + "streeteasy.UnitDetails": { "properties": { - "date": { - "example": "2026-10-27", - "type": "string" + "address": { + "$ref": "#/definitions/streeteasy.UnitAddress" }, - "eta": { - "example": "3h 33m", - "type": "string" + "amenities": { + "items": { + "type": "string" + }, + "type": "array" }, - "event": { - "example": "VCT 2026: China Threshold", + "availability": { "type": "string" }, - "has_stats": { - "example": true, - "type": "boolean" - }, - "has_vods": { - "example": false, - "type": "boolean" + "building_slug": { + "type": "string" }, - "id": { - "example": "777956", + "currency": { "type": "string" }, - "note": { + "description": { "type": "string" }, - "series": { - "example": "Week 2–Round of 12", + "listed_date": { "type": "string" }, - "status": { - "enum": [ - "upcoming", - "live", - "completed" - ], - "example": "completed", + "name": { "type": "string" }, - "teams": { + "open_houses": { "items": { - "$ref": "#/definitions/vlr.MatchTeam" + "$ref": "#/definitions/streeteasy.OpenHouse" }, "type": "array" }, - "time_label": { - "example": "5:00 PM", + "photo_url": { + "type": "string" + }, + "price": { + "type": "number" + }, + "unit": { "type": "string" }, "url": { - "example": "https://www.vlr.gg/777956/unsettled-resentment-vs-victory-no-limits-gaming-vct-2026-china-threshold-week-2-ro12", "type": "string" } }, "type": "object" }, - "vlr.MatchTeam": { + "stubhub.CarouselEvent": { "properties": { - "country_code": { - "example": "cn", - "type": "string" + "category_id": { + "example": 33253, + "type": "integer" }, - "name": { - "example": "Unsettled Resentment", + "day_of_week": { + "example": "Sat", "type": "string" }, - "score": { - "example": 2, + "event_id": { + "example": 161204289, "type": "integer" }, - "winner": { - "example": true, + "image_url": { + "type": "string" + }, + "is_date_confirmed": { "type": "boolean" - } - }, - "type": "object" - }, - "vlr.MatrixCell": { - "properties": { - "deaths": { - "example": 15, - "type": "integer" }, - "diff": { - "example": -4, - "type": "integer" + "is_time_confirmed": { + "type": "boolean" }, - "kills": { - "example": 11, - "type": "integer" + "local_event_date": { + "example": "Mar 06 2027", + "type": "string" + }, + "local_event_time": { + "example": "7:30 PM", + "type": "string" + }, + "location": { + "example": "Kai Tak, Kowloon City", + "type": "string" + }, + "min_price": { + "example": 99, + "type": "number" }, - "opponent": { - "$ref": "#/definitions/vlr.MatrixPlayer" - } - }, - "type": "object" - }, - "vlr.MatrixPlayer": { - "properties": { "name": { - "example": "erde", + "example": "BTS", "type": "string" }, - "team": { - "example": "LOUD", + "url": { "type": "string" - } - }, - "type": "object" - }, - "vlr.MatrixRow": { - "properties": { - "player": { - "$ref": "#/definitions/vlr.MatrixPlayer" }, - "vs": { - "items": { - "$ref": "#/definitions/vlr.MatrixCell" - }, - "type": "array" + "venue_name": { + "type": "string" } }, "type": "object" }, - "vlr.NewsItem": { + "stubhub.CarouselPerson": { "properties": { - "author": { - "example": "jenopelle", - "type": "string" + "available_local_events": { + "example": 4, + "type": "integer" }, - "country_code": { - "example": "kr", - "type": "string" + "category_id": { + "example": 26202, + "type": "integer" }, - "date": { - "example": "2026-10-27", + "formatted_local_events_dates": { + "example": "Nov 27 - Dec 06", "type": "string" }, - "description": { + "image_credit_name": { "type": "string" }, - "id": { - "example": "780785", + "image_url": { "type": "string" }, - "title": { - "example": "T1 Academy's full roster released ahead of 2027 season", + "name": { + "example": "The Weeknd", "type": "string" }, "url": { @@ -250839,1189 +255916,945 @@ }, "type": "object" }, - "vlr.NewsResponse": { + "stubhub.CarouselResponse": { "properties": { - "count": { - "example": 30, + "alternative_performers": { + "items": { + "$ref": "#/definitions/stubhub.CarouselPerson" + }, + "type": "array" + }, + "category_id": { "type": "integer" }, "fetched_at": { - "example": "2026-10-27T10:00:00Z", "type": "string" }, - "has_more": { - "example": true, - "type": "boolean" + "lat": { + "type": "number" }, - "items": { + "lon": { + "type": "number" + }, + "max": { + "type": "integer" + }, + "maybe_interested_in": { "items": { - "$ref": "#/definitions/vlr.NewsItem" + "$ref": "#/definitions/stubhub.CarouselPerson" }, "type": "array" }, - "page": { - "example": 1, + "performer_id": { "type": "integer" }, + "performer_slug": { + "type": "string" + }, + "recently_viewed": { + "items": { + "$ref": "#/definitions/stubhub.CarouselPerson" + }, + "type": "array" + }, "source_url": { - "example": "https://www.vlr.gg/matches", "type": "string" + }, + "top_level_category_id": { + "type": "integer" + }, + "trending_events": { + "items": { + "$ref": "#/definitions/stubhub.CarouselEvent" + }, + "type": "array" } }, "type": "object" }, - "vlr.PastMatch": { + "stubhub.CategoriesResponse": { "properties": { - "date": { - "example": "2026/10/16", - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/stubhub.Category" + }, + "type": "array" }, - "id": { - "example": "754736", - "type": "string" + "count": { + "example": 12, + "type": "integer" }, - "opponent": { - "example": "Team Vitality", + "fetched_at": { "type": "string" }, - "result": { - "enum": [ - "win", - "loss" - ], - "example": "win", + "from": { "type": "string" }, - "score": { - "example": "2:1", + "source_url": { "type": "string" }, - "url": { + "to": { "type": "string" } }, "type": "object" }, - "vlr.PastMatches": { + "stubhub.Category": { "properties": { - "matches": { - "items": { - "$ref": "#/definitions/vlr.PastMatch" - }, - "type": "array" + "id": { + "example": 5084, + "type": "integer" }, - "team": { - "example": "LOUD", + "is_venue": { + "type": "boolean" + }, + "min_price": { + "example": 45, + "type": "number" + }, + "name": { + "example": "NFL", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "vlr.PerformanceBlock": { + "stubhub.CategoryEvent": { "properties": { - "advanced": { - "items": { - "$ref": "#/definitions/vlr.AdvancedLine" - }, - "type": "array" + "country": { + "example": "USA", + "type": "string" }, - "game_id": { - "example": "283286", + "date": { + "example": "Sep 15", "type": "string" }, - "kill_matrices": { - "items": { - "$ref": "#/definitions/vlr.KillMatrix" - }, - "type": "array" + "day_of_week": { + "example": "Tue", + "type": "string" }, - "map": { - "example": "Bind", + "distance_miles": { + "example": "26 mi", "type": "string" }, - "map_number": { - "example": 1, + "event_id": { + "example": 161280784, "type": "integer" - } - }, - "type": "object" - }, - "vlr.PlayerDetail": { - "properties": { - "agent_stats": { - "items": { - "$ref": "#/definitions/vlr.AgentUsage" - }, - "type": "array" }, - "alias": { - "example": "Jamppi", - "type": "string" + "has_active_listings": { + "type": "boolean" }, - "country": { - "example": "FINLAND", - "type": "string" + "is_date_confirmed": { + "type": "boolean" }, - "country_code": { - "example": "fi", - "type": "string" + "is_multiday_event": { + "type": "boolean" }, - "current_teams": { - "items": { - "$ref": "#/definitions/vlr.PlayerTeam" - }, - "type": "array" + "is_parking_pass": { + "type": "boolean" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" + "is_time_confirmed": { + "type": "boolean" }, - "id": { - "example": "9780", + "name": { + "example": "ERRA", "type": "string" }, - "image_url": { + "time": { + "example": "6:30 PM", "type": "string" }, - "links": { - "items": { - "type": "string" - }, - "type": "array" - }, - "past_teams": { - "items": { - "$ref": "#/definitions/vlr.PlayerTeam" - }, - "type": "array" + "url": { + "type": "string" }, - "real_name": { - "example": "Elias Olkkonen", + "venue_city": { + "example": "Sayreville", "type": "string" }, - "recent_matches": { - "items": { - "$ref": "#/definitions/vlr.TeamMatch" - }, - "type": "array" + "venue_name": { + "example": "Starland Ballroom", + "type": "string" }, - "source_url": { - "example": "https://www.vlr.gg/matches", + "venue_state": { + "example": "NJ", "type": "string" } }, "type": "object" }, - "vlr.PlayerLine": { + "stubhub.CategoryEventsResponse": { "properties": { - "acs": { - "example": 297, + "category_id": { "type": "integer" }, - "adr": { - "example": 178.3, - "type": "number" + "count": { + "example": 20, + "type": "integer" }, - "agents": { - "example": [ - "Harbor" - ], + "events": { "items": { - "type": "string" + "$ref": "#/definitions/stubhub.CategoryEvent" }, "type": "array" }, - "assists": { - "example": 12, - "type": "integer" - }, - "country_code": { - "example": "cn", + "fetched_at": { "type": "string" }, - "deaths": { - "example": 23, - "type": "integer" - }, - "first_deaths": { - "example": 3, - "type": "integer" - }, - "first_kills": { - "example": 5, + "page": { + "example": 1, "type": "integer" }, - "fk_diff": { - "example": 2, + "page_size": { + "example": 20, "type": "integer" }, - "headshot_percent": { - "example": 24, - "type": "number" - }, - "id": { - "example": "66833", + "source_url": { "type": "string" }, - "kast_percent": { - "example": 72, - "type": "number" - }, - "kd_diff": { - "example": 13, - "type": "integer" - }, - "kills": { - "example": 36, + "total_count": { + "example": 1588, "type": "integer" - }, - "name": { - "example": "Hopedawn", - "type": "string" - }, - "rating": { - "example": 1.12, - "type": "number" - }, - "team": { - "example": "UR", - "type": "string" } }, "type": "object" }, - "vlr.PlayerRef": { + "stubhub.ExploreEvent": { "properties": { - "country_code": { - "example": "cl", - "type": "string" + "category_id": { + "example": 5084, + "type": "integer" }, - "id": { - "example": "29242", + "date": { + "example": "Sep 15", "type": "string" }, - "name": { - "example": "erde", + "day_of_week": { + "example": "Tue", "type": "string" }, - "team": { - "example": "LOUD", - "type": "string" - } - }, - "type": "object" - }, - "vlr.PlayerTeam": { - "properties": { - "id": { - "example": "21919", + "event_id": { + "example": 161341819, + "type": "integer" + }, + "has_active_listings": { + "type": "boolean" + }, + "image_url": { "type": "string" }, - "logo_url": { + "is_date_confirmed": { + "type": "boolean" + }, + "is_time_confirmed": { + "type": "boolean" + }, + "location": { + "example": "Inglewood, CA, USA", "type": "string" }, "name": { - "example": "Unsettled Resentment", + "example": "Taylor Swift", "type": "string" }, - "period": { - "example": "January 2025 - Present", + "time": { + "example": "10:00 AM", "type": "string" }, - "tag": { - "example": "UR", + "url": { "type": "string" }, - "url": { + "venue_name": { + "example": "SoFi Stadium", "type": "string" } }, "type": "object" }, - "vlr.RankingRow": { + "stubhub.ExploreResponse": { "properties": { - "country": { - "example": "United States", - "type": "string" + "count": { + "example": 20, + "type": "integer" }, - "earnings": { - "example": "$1,191,150", + "events": { + "items": { + "$ref": "#/definitions/stubhub.ExploreEvent" + }, + "type": "array" + }, + "fetched_at": { "type": "string" }, - "last_match_id": { - "example": "754743", + "from": { "type": "string" }, - "rank": { - "example": 1, - "type": "integer" + "lat": { + "type": "number" }, - "rating": { - "example": 2000, + "lon": { "type": "number" }, - "record": { - "example": "62–35", + "source_url": { "type": "string" }, - "streak": { - "example": "1L", + "to": { "type": "string" - }, - "team": { - "$ref": "#/definitions/vlr.TeamRef" } }, "type": "object" }, - "vlr.RankingsResponse": { + "stubhub.NavigationCategoriesResponse": { "properties": { - "count": { - "example": 50, + "category_id": { + "example": 1, "type": "integer" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" - }, - "region": { - "example": "north-america", - "type": "string" - }, - "source_url": { - "example": "https://www.vlr.gg/matches", - "type": "string" + "id": { + "example": 1, + "type": "integer" }, - "teams": { + "subcategories": { "items": { - "$ref": "#/definitions/vlr.RankingRow" + "$ref": "#/definitions/stubhub.NavigationCategory" }, "type": "array" }, - "total": { - "example": 197, - "type": "integer" - } - }, - "type": "object" - }, - "vlr.Ratio": { - "properties": { - "played": { - "example": 8, - "type": "integer" + "title": { + "example": "Theater", + "type": "string" }, - "won": { - "example": 3, - "type": "integer" + "url": { + "example": "https://www.stubhub.com/theater-and-arts-tickets/category/174", + "type": "string" + }, + "view_all_content": { + "example": "View More Theater", + "type": "string" } }, "type": "object" }, - "vlr.RosterMember": { + "stubhub.NavigationCategory": { "properties": { - "alias": { - "example": "Jamppi", - "type": "string" - }, - "country_code": { - "example": "fi", - "type": "string" - }, "id": { - "example": "9780", - "type": "string" + "example": 12585, + "type": "integer" }, - "image_url": { + "subcategories": { + "items": { + "$ref": "#/definitions/stubhub.NavigationCategory" + }, + "type": "array" + }, + "title": { + "example": "Broadway Shows", "type": "string" }, - "real_name": { - "example": "Elias Olkkonen", + "url": { + "example": "https://www.stubhub.com/broadway-shows-tickets/category/138275421", "type": "string" }, - "role": { - "enum": [ - "player", - "captain", - "coach", - "manager", - "analyst", - "staff" - ], - "example": "player", + "view_all_content": { + "example": "View More Theater", "type": "string" } }, "type": "object" }, - "vlr.RoundEvent": { + "stubhub.PerformerEvent": { "properties": { - "player": { - "example": "Derke", + "availability": { + "example": "http://schema.org/InStock", "type": "string" }, - "player_team": { - "example": "VIT", - "type": "string" + "low_price": { + "example": 71.87, + "type": "number" }, - "time": { - "example": "0:02", + "name": { + "example": "Indianapolis Colts at Kansas City Chiefs", "type": "string" }, - "type": { - "enum": [ - "kill", - "plant", - "defuse" - ], - "example": "kill", + "price_currency": { + "example": "USD", "type": "string" }, - "victim": { - "example": "lukxo", + "start_date": { + "example": "2026-09-20T19:20:00", "type": "string" }, - "weapon": { - "example": "Headhunter", - "type": "string" - } - }, - "type": "object" - }, - "vlr.RoundLoadout": { - "properties": { - "agent": { - "example": "Sage", + "url": { "type": "string" }, - "armor": { - "example": "Light armor", + "venue_city": { + "example": "Kansas City", "type": "string" }, - "credits_left": { - "example": 0, - "type": "integer" - }, - "player": { - "example": "erde", + "venue_country": { + "example": "USA", "type": "string" }, - "spent": { - "example": 800, - "type": "integer" - }, - "team": { - "example": "LOUD", + "venue_name": { + "example": "GEHA Field at Arrowhead Stadium", "type": "string" }, - "weapon": { - "example": "Ghost", + "venue_state": { + "example": "Missouri", "type": "string" } }, "type": "object" }, - "vlr.RoundLog": { + "stubhub.PerformerEventsResponse": { "properties": { - "attacking_team": { - "example": "LOUD", - "type": "string" + "count": { + "example": 10, + "type": "integer" }, "events": { "items": { - "$ref": "#/definitions/vlr.RoundEvent" + "$ref": "#/definitions/stubhub.PerformerEvent" }, "type": "array" }, - "loadouts": { - "items": { - "$ref": "#/definitions/vlr.RoundLoadout" - }, - "type": "array" + "fetched_at": { + "type": "string" }, - "round": { - "example": 1, + "performer_id": { "type": "integer" }, - "score_after": { - "$ref": "#/definitions/vlr.RoundScore" - }, - "spike_detonated": { - "example": false, - "type": "boolean" + "performer_slug": { + "type": "string" }, - "winner_team": { - "example": "Team Vitality", + "source_url": { "type": "string" } }, "type": "object" }, - "vlr.RoundScore": { + "stubhub.SearchGroup": { "properties": { - "team1": { - "example": 0, + "count": { + "example": 3, "type": "integer" }, - "team2": { - "example": 1, + "entity": { + "example": 5, "type": "integer" + }, + "results": { + "items": { + "$ref": "#/definitions/stubhub.SearchResult" + }, + "type": "array" } }, "type": "object" }, - "vlr.RoundSplit": { + "stubhub.SearchResponse": { "properties": { - "attack": { - "example": 6, - "type": "integer" + "fetched_at": { + "type": "string" }, - "defend": { - "example": 6, - "type": "integer" + "groups": { + "items": { + "$ref": "#/definitions/stubhub.SearchGroup" + }, + "type": "array" }, - "overtime": { - "example": 5, - "type": "integer" + "more": { + "type": "boolean" + }, + "query": { + "example": "The Weeknd", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "special_char_only": { + "type": "boolean" } }, "type": "object" }, - "vlr.RoundsBlock": { + "stubhub.SearchResult": { "properties": { - "game_id": { - "example": "283286", + "category_image_url": { "type": "string" }, - "map": { - "example": "Summit", + "entity_type": { + "example": 1, + "type": "integer" + }, + "icon_name": { + "example": "Concert", "type": "string" }, - "map_number": { - "example": 1, + "id": { + "example": 26202, "type": "integer" }, - "rounds": { - "items": { - "$ref": "#/definitions/vlr.RoundLog" - }, - "type": "array" + "image_url": { + "type": "string" + }, + "subtitle": { + "example": "Concert Tickets", + "type": "string" + }, + "title": { + "example": "The Weeknd", + "type": "string" + }, + "url": { + "example": "https://www.stubhub.com/the-weeknd-tickets/performer/714235", + "type": "string" } }, "type": "object" }, - "vlr.SearchCounts": { + "stubhub.SuggestedSearch": { "properties": { - "events": { - "example": 5, - "type": "integer" + "category_image_url": { + "type": "string" }, - "players": { - "example": 16, + "id": { + "example": 26202, "type": "integer" }, - "teams": { - "example": 26, + "title": { + "example": "The Weeknd", + "type": "string" + }, + "top_level_category_id": { + "example": 3, "type": "integer" + }, + "url": { + "example": "https://www.stubhub.com/the-weeknd-tickets/performer/714235", + "type": "string" } }, "type": "object" }, - "vlr.SearchResponse": { + "stubhub.SuggestedSearchesResponse": { "properties": { "count": { - "example": 47, + "example": 10, "type": "integer" }, - "counts": { - "$ref": "#/definitions/vlr.SearchCounts" - }, "fetched_at": { - "example": "2026-10-27T10:00:00Z", "type": "string" }, - "query": { - "example": "prime", + "source_url": { "type": "string" }, - "results": { + "suggestions": { "items": { - "$ref": "#/definitions/vlr.SearchResult" + "$ref": "#/definitions/stubhub.SuggestedSearch" }, "type": "array" - }, - "source_url": { - "example": "https://www.vlr.gg/matches", - "type": "string" - }, - "type": { - "enum": [ - "all", - "teams", - "events", - "players" - ], - "example": "all", - "type": "string" } }, "type": "object" }, - "vlr.SearchResult": { + "stubhub.TrendingEvent": { "properties": { - "date_range": { - "example": "May 27, 2026 to Jul 28, 2026", - "type": "string" + "category_id": { + "example": 4892, + "type": "integer" }, - "description": { - "example": "May 27, 2026 to Jul 28, 2026 ⋅ $500", + "date": { + "example": "Sep 19 2026", "type": "string" }, - "id": { - "example": "2", + "day_of_week": { + "example": "Sat", "type": "string" }, + "event_id": { + "example": 160790802, + "type": "integer" + }, "image_url": { "type": "string" }, - "inactive": { - "example": true, + "is_date_confirmed": { "type": "boolean" }, - "kind": { - "enum": [ - "team", - "event", - "player" - ], - "example": "team", + "is_time_confirmed": { + "type": "boolean" + }, + "location": { + "example": "Nanterre, Ile-de-France", "type": "string" }, "name": { - "example": "Sentinels", + "example": "Celine Dion", "type": "string" }, - "prize_pool": { - "example": "$500", + "time": { + "example": "7:30 PM", "type": "string" }, - "successor": { - "example": "Into The Breach Prime", + "url": { "type": "string" }, - "url": { - "example": "https://www.vlr.gg/team/2", + "venue_name": { "type": "string" } }, "type": "object" }, - "vlr.StatsResponse": { + "stubhub.TrendingEventsResponse": { "properties": { "count": { - "example": 50, + "example": 20, "type": "integer" }, + "events": { + "items": { + "$ref": "#/definitions/stubhub.TrendingEvent" + }, + "type": "array" + }, "fetched_at": { - "example": "2026-10-27T10:00:00Z", "type": "string" }, - "has_more": { - "example": true, - "type": "boolean" - }, "page": { "example": 1, "type": "integer" }, - "players": { - "items": { - "$ref": "#/definitions/vlr.StatsRow" - }, - "type": "array" + "page_size": { + "example": 20, + "type": "integer" }, "source_url": { - "example": "https://www.vlr.gg/matches", "type": "string" + }, + "top_level_category_id": { + "type": "integer" + }, + "total_count": { + "example": 200, + "type": "integer" } }, "type": "object" }, - "vlr.StatsRow": { + "stubhub.TrendingPerformer": { "properties": { - "acs": { - "example": 224, - "type": "number" - }, - "adr": { - "example": 147.2, - "type": "number" - }, - "agent_usage": { - "example": [ - "54%" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "agents": { - "example": [ - "Jett" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "assists": { - "example": 289, - "type": "integer" - }, - "assists_per_round": { - "example": 0.38, - "type": "number" - }, - "clutch_percent": { - "example": 15, - "type": "number" - }, - "clutches_total": { - "example": 89, - "type": "integer" - }, - "clutches_won": { - "example": 13, - "type": "integer" - }, - "deaths": { - "example": 466, - "type": "integer" - }, - "first_death_percent": { - "example": 9, - "type": "number" - }, - "first_deaths": { - "example": 69, - "type": "integer" - }, - "first_kill_percent": { - "example": 10, - "type": "number" - }, - "first_kills": { - "example": 73, - "type": "integer" - }, - "fk_fd_ratio": { - "example": 1.06, - "type": "number" - }, - "headshot_percent": { - "example": 28, - "type": "number" - }, - "kast_percent": { - "example": 76, - "type": "number" - }, - "kd": { - "example": 1.27, - "type": "number" - }, - "kills": { - "example": 594, - "type": "integer" - }, - "kills_per_round": { - "example": 0.79, - "type": "number" + "event_dates_range": { + "example": "Sep 16 - May 29 2027", + "type": "string" }, - "maps": { - "example": 35, + "favorites_count": { + "example": 154655, "type": "integer" }, - "max_kills": { - "example": 28, + "id": { + "example": 20519, "type": "integer" }, - "player": { - "$ref": "#/definitions/vlr.PlayerRef" + "image_url": { + "type": "string" }, - "rating": { - "example": 1.22, - "type": "number" + "name": { + "example": "Bruno Mars", + "type": "string" }, - "rounds": { - "example": 752, - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "vlr.TeamComposition": { + "stubhub.TrendingResponse": { "properties": { - "agents_used": { - "items": { - "type": "string" - }, - "type": "array" + "count": { + "example": 10, + "type": "integer" }, - "matches": { + "fetched_at": { + "type": "string" + }, + "performers": { "items": { - "$ref": "#/definitions/vlr.CompositionMatch" + "$ref": "#/definitions/stubhub.TrendingPerformer" }, "type": "array" }, - "team": { - "example": "Dragon Ranger Gaming", + "source_url": { "type": "string" }, - "team_id": { - "example": "11981", - "type": "string" + "top_level_category_id": { + "type": "integer" } }, "type": "object" }, - "vlr.TeamDetail": { + "stubhub.VenueEvent": { "properties": { - "country": { - "example": "Europe", + "availability": { + "example": "http://schema.org/InStock", "type": "string" }, - "country_code": { - "example": "eu", - "type": "string" + "low_price": { + "example": 71.87, + "type": "number" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", + "name": { + "example": "Indianapolis Colts at Kansas City Chiefs", "type": "string" }, - "id": { - "example": "2059", + "price_currency": { + "example": "USD", "type": "string" }, - "links": { - "items": { - "type": "string" - }, - "type": "array" - }, - "logo_url": { + "start_date": { + "example": "2026-09-20T19:20:00", "type": "string" }, - "name": { - "example": "Team Vitality", + "url": { "type": "string" + } + }, + "type": "object" + }, + "stubhub.VenueEventsResponse": { + "properties": { + "count": { + "example": 11, + "type": "integer" }, - "news": { - "items": { - "$ref": "#/definitions/vlr.NewsItem" - }, - "type": "array" - }, - "recent_matches": { + "events": { "items": { - "$ref": "#/definitions/vlr.TeamMatch" + "$ref": "#/definitions/stubhub.VenueEvent" }, "type": "array" }, - "roster": { - "items": { - "$ref": "#/definitions/vlr.RosterMember" - }, - "type": "array" + "fetched_at": { + "type": "string" }, "source_url": { - "example": "https://www.vlr.gg/matches", "type": "string" }, - "tag": { - "example": "VIT", + "venue_id": { + "type": "integer" + }, + "venue_slug": { "type": "string" } }, "type": "object" }, - "vlr.TeamEconomy": { + "stubhub.carouselResponseDoc": { "properties": { - "bonus_rounds": { - "$ref": "#/definitions/vlr.Ratio" - }, - "pistol_conversion": { - "$ref": "#/definitions/vlr.Ratio" + "code": { + "example": 200, + "type": "integer" }, - "pistol_rounds": { - "$ref": "#/definitions/vlr.Ratio" + "data": { + "$ref": "#/definitions/stubhub.CarouselResponse" }, - "team": { - "example": "LOUD", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "vlr.TeamMapRow": { + "stubhub.categoriesResponseDoc": { "properties": { - "attack": { - "$ref": "#/definitions/vlr.MapSide" - }, - "defense": { - "$ref": "#/definitions/vlr.MapSide" - }, - "losses": { - "example": 25, - "type": "integer" - }, - "map": { - "example": "Bind", - "type": "string" - }, - "played": { - "example": 45, + "code": { + "example": 200, "type": "integer" }, - "win_percent": { - "example": 44, - "type": "number" + "data": { + "$ref": "#/definitions/stubhub.CategoriesResponse" }, - "wins": { - "example": 20, - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "vlr.TeamMapsResponse": { + "stubhub.categoryEventsResponseDoc": { "properties": { - "count": { - "example": 12, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "example": "2026-10-27T10:00:00Z", - "type": "string" - }, - "maps": { - "items": { - "$ref": "#/definitions/vlr.TeamMapRow" - }, - "type": "array" - }, - "source_url": { - "example": "https://www.vlr.gg/matches", - "type": "string" + "data": { + "$ref": "#/definitions/stubhub.CategoryEventsResponse" }, - "team_id": { - "example": "2059", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "vlr.TeamMatch": { + "stubhub.exploreResponseDoc": { "properties": { - "date": { - "example": "2026/10/18", - "type": "string" - }, - "event": { - "example": "Champions 2026", - "type": "string" - }, - "id": { - "example": "754737", - "type": "string" - }, - "opponent": { - "example": "LOUD", - "type": "string" - }, - "result": { - "enum": [ - "win", - "loss" - ], - "example": "loss", - "type": "string" - }, - "score": { - "example": "1:3", - "type": "string" - }, - "stage": { - "example": "Playoffs ⋅ GF", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "team": { - "example": "Team Vitality", - "type": "string" + "data": { + "$ref": "#/definitions/stubhub.ExploreResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "vlr.TeamRef": { + "stubhub.navigationCategoriesResponseDoc": { "properties": { - "id": { - "example": "21919", - "type": "string" - }, - "logo_url": { - "type": "string" - }, - "name": { - "example": "Unsettled Resentment", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "tag": { - "example": "UR", - "type": "string" + "data": { + "$ref": "#/definitions/stubhub.NavigationCategoriesResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "vlr.TeamScore": { + "stubhub.performerEventsResponseDoc": { "properties": { - "id": { - "example": "21919", - "type": "string" - }, - "logo_url": { - "type": "string" - }, - "name": { - "example": "Unsettled Resentment", - "type": "string" - }, - "score": { - "example": 2, + "code": { + "example": 200, "type": "integer" }, - "tag": { - "example": "UR", - "type": "string" + "data": { + "$ref": "#/definitions/stubhub.PerformerEventsResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" - }, - "winner": { - "example": true, - "type": "boolean" } }, "type": "object" }, - "vox.AuthorArticle": { + "stubhub.searchResponseDoc": { "properties": { - "category": { - "type": "string" - }, - "excerpt": { - "type": "string" - }, - "published_at": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/stubhub.SearchResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "vox.AuthorResponse": { + "stubhub.suggestedSearchesResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/vox.AuthorArticle" - }, - "type": "array" - }, - "bio": { - "type": "string" - }, - "job_title": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/stubhub.SuggestedSearchesResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "vrbo.AmenityGroup": { + "stubhub.trendingEventsResponseDoc": { "properties": { - "items": { - "items": { - "type": "string" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "name": { + "data": { + "$ref": "#/definitions/stubhub.TrendingEventsResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "vrbo.CalendarDate": { + "stubhub.trendingResponseDoc": { "properties": { - "day": { + "code": { + "example": 200, "type": "integer" }, - "month": { - "type": "integer" + "data": { + "$ref": "#/definitions/stubhub.TrendingResponse" }, - "year": { - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "vrbo.Listing": { + "stubhub.venueEventsResponseDoc": { "properties": { - "bedrooms": { + "code": { + "example": 200, "type": "integer" }, - "currency": { + "data": { + "$ref": "#/definitions/stubhub.VenueEventsResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "stuff.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/stuff.HeadlineItem" + }, + "type": "array" }, - "description": { + "biography": { "type": "string" }, - "id": { + "email": { "type": "string" }, "image_url": { "type": "string" }, - "name": { + "job_title": { "type": "string" }, - "price": { - "type": "number" - }, - "property_type": { + "location": { "type": "string" }, - "rating": { - "type": "number" + "name": { + "type": "string" }, - "review_count": { - "type": "integer" + "slug": { + "type": "string" }, "url": { "type": "string" @@ -252029,126 +256862,154 @@ }, "type": "object" }, - "vrbo.LocationSuggestion": { + "stuff.HeadlineItem": { "properties": { - "geo_type": { + "author": { "type": "string" }, - "location_full_name": { + "image_url": { "type": "string" }, - "primary_text": { + "published_at": { "type": "string" }, - "region_id": { + "summary": { "type": "string" }, - "secondary_text": { + "title": { "type": "string" }, - "sub_items": { - "items": { - "$ref": "#/definitions/vrbo.LocationSuggestion" - }, - "type": "array" - }, "type": { "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "vrbo.LocationSuggestionGroup": { + "substack.AppStorePlan": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/vrbo.LocationSuggestion" - }, - "type": "array" + "active": { + "type": "boolean" }, - "title": { + "amount_cents": { + "example": 1400, + "type": "integer" + }, + "currency": { + "example": "usd", + "type": "string" + }, + "display_name": { + "type": "string" + }, + "display_price": { + "example": "$14", + "type": "string" + }, + "is_founding": { + "type": "boolean" + }, + "period": { + "example": "month", + "type": "string" + }, + "sku": { "type": "string" } }, "type": "object" }, - "vrbo.LocationSuggestionsResponse": { + "substack.CategoriesResult": { "properties": { - "groups": { + "categories": { "items": { - "$ref": "#/definitions/vrbo.LocationSuggestionGroup" + "$ref": "#/definitions/substack.Category" }, "type": "array" - }, - "search_term": { - "type": "string" } }, "type": "object" }, - "vrbo.Photo": { + "substack.Category": { "properties": { - "description": { + "emoji": { + "example": "🕹", "type": "string" }, - "url": { + "id": { + "example": "4", + "type": "string" + }, + "in_category_listing": { + "description": "InCategoryListing is false for the one id the category listing\nrejects (\"bestseller\", which exists only as a leaderboard).", + "type": "boolean" + }, + "in_leaderboard": { + "description": "InLeaderboard is true when /substack/leaderboard accepts this id.", + "type": "boolean" + }, + "name": { + "example": "Technology", + "type": "string" + }, + "slug": { + "example": "technology", "type": "string" } }, "type": "object" }, - "vrbo.Property": { + "substack.CategoryResult": { "properties": { - "amenities": { - "items": { - "type": "string" - }, - "type": "array" - }, - "amenity_groups": { - "items": { - "$ref": "#/definitions/vrbo.AmenityGroup" - }, - "type": "array" + "category_id": { + "example": "4", + "type": "string" }, - "content_sections": { - "items": { - "$ref": "#/definitions/vrbo.PropertyContentSection" - }, - "type": "array" + "has_more": { + "type": "boolean" }, - "description": { - "type": "string" + "page": { + "type": "integer" }, - "faqs": { + "publications": { "items": { - "$ref": "#/definitions/vrbo.PropertyFAQ" + "$ref": "#/definitions/substack.PublicationListItem" }, "type": "array" }, - "id": { + "type": { + "example": "paid", "type": "string" + } + }, + "type": "object" + }, + "substack.Contributor": { + "properties": { + "bestseller_tier": { + "type": "integer" }, - "location": { + "bio": { "type": "string" }, - "name": { + "handle": { "type": "string" }, - "photos": { - "items": { - "$ref": "#/definitions/vrbo.Photo" - }, - "type": "array" + "id": { + "example": 29561926, + "type": "integer" }, - "rating": { - "type": "number" + "is_byline_only": { + "type": "boolean" }, - "rating_label": { + "name": { + "example": "Sergiu Klainerman", "type": "string" }, - "review_count": { - "type": "integer" + "photo_url": { + "type": "string" }, "url": { "type": "string" @@ -252156,672 +257017,973 @@ }, "type": "object" }, - "vrbo.PropertyContentSection": { + "substack.ContributorsResult": { "properties": { - "items": { + "contributors": { "items": { - "type": "string" + "$ref": "#/definitions/substack.Contributor" }, "type": "array" }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "vrbo.PropertyFAQ": { - "properties": { - "answer": { - "type": "string" + "page": { + "type": "integer" }, - "question": { + "publication": { + "example": "www.thefp.com", "type": "string" } }, "type": "object" }, - "vrbo.PropertyReview": { + "substack.ExploreModule": { "properties": { - "author": { - "type": "string" - }, - "id": { + "category_id": { "type": "string" }, - "locale": { + "category_name": { "type": "string" }, - "management_responses": { + "notes": { "items": { - "$ref": "#/definitions/vrbo.PropertyReviewResponse" + "$ref": "#/definitions/substack.Note" }, "type": "array" }, - "rating": { - "type": "number" - }, - "rating_label": { - "type": "string" + "posts": { + "items": { + "$ref": "#/definitions/substack.Post" + }, + "type": "array" }, - "submission_time": { - "type": "string" + "profiles": { + "items": { + "$ref": "#/definitions/substack.User" + }, + "type": "array" }, - "text": { - "type": "string" + "publications": { + "items": { + "$ref": "#/definitions/substack.PublicationListItem" + }, + "type": "array" }, "title": { + "example": "Trending posts", "type": "string" }, - "travelers": { + "topics": { "items": { - "type": "string" + "$ref": "#/definitions/substack.ExploreTopic" }, "type": "array" + }, + "type": { + "description": "Type is the upstream module kind. Known values:\ntrendingTopicsExplore, trendingPostsExplore, newBestsellersExplore,\nvideoSuggestionsExplore, categoryLeaderboard, comment, post.", + "example": "trendingPostsExplore", + "type": "string" } }, "type": "object" }, - "vrbo.PropertyReviewResponse": { + "substack.ExploreResult": { "properties": { - "header": { + "has_more": { + "type": "boolean" + }, + "modules": { + "items": { + "$ref": "#/definitions/substack.ExploreModule" + }, + "type": "array" + }, + "next_cursor": { "type": "string" }, - "id": { + "tab": { + "example": "explore", "type": "string" }, - "response": { + "type": { + "example": "base", "type": "string" } }, "type": "object" }, - "vrbo.RateCalendar": { + "substack.ExploreTopic": { "properties": { - "configuration": { - "$ref": "#/definitions/vrbo.RateCalendarConfiguration" - }, - "days": { + "alternate_queries": { "items": { - "$ref": "#/definitions/vrbo.RateCalendarDay" + "type": "string" }, "type": "array" }, - "product_id": { + "category": { "type": "string" }, - "property_id": { + "description": { "type": "string" }, - "source_url": { + "featured": { + "type": "boolean" + }, + "first_trending_at": { "type": "string" }, - "submit_button_label": { + "id": { "type": "string" }, - "validation_message": { + "query": { + "example": "Trump campaign rhetoric 2026", + "type": "string" + }, + "source": { + "example": "search_history", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "vrbo.RateCalendarConfiguration": { + "substack.LeaderboardEntry": { "properties": { - "available_by_default": { - "type": "boolean" + "author": { + "$ref": "#/definitions/substack.User" }, - "begin_date": { - "$ref": "#/definitions/vrbo.CalendarDate" + "publication": { + "$ref": "#/definitions/substack.PublicationListItem" }, - "calendar_template_type": { + "rank": { + "example": 1, + "type": "integer" + } + }, + "type": "object" + }, + "substack.LeaderboardResult": { + "properties": { + "category_id": { + "example": "96", "type": "string" }, - "current_date": { - "$ref": "#/definitions/vrbo.CalendarDate" - }, - "end_date": { - "$ref": "#/definitions/vrbo.CalendarDate" - }, - "tnl_fields": { + "entries": { "items": { - "$ref": "#/definitions/vrbo.RateCalendarField" + "$ref": "#/definitions/substack.LeaderboardEntry" }, "type": "array" + }, + "has_more": { + "type": "boolean" + }, + "page": { + "type": "integer" + }, + "title": { + "example": "Culture Bestsellers", + "type": "string" + }, + "type": { + "example": "trending", + "type": "string" } }, "type": "object" }, - "vrbo.RateCalendarDay": { + "substack.Note": { "properties": { - "accessibility_label": { + "attached_post": { + "$ref": "#/definitions/substack.NotePost" + }, + "author_bestseller_tier": { + "type": "integer" + }, + "author_handle": { + "example": "jameelajamil", "type": "string" }, - "available": { - "type": "boolean" + "author_id": { + "example": 138271663, + "type": "integer" }, - "checkin_validity": { - "type": "boolean" + "author_name": { + "example": "Jameela Jamil", + "type": "string" }, - "checkout_validity": { + "author_photo_url": { + "type": "string" + }, + "author_url": { + "type": "string" + }, + "body": { + "type": "string" + }, + "edited_at": { + "type": "string" + }, + "id": { + "example": 316240438, + "type": "integer" + }, + "is_ai_generated": { "type": "boolean" }, - "date": { - "$ref": "#/definitions/vrbo.CalendarDate" + "language": { + "type": "string" }, - "display_price": { + "published_at": { "type": "string" }, - "stay_constraints": { - "$ref": "#/definitions/vrbo.RateCalendarStayConstraints" + "reaction_count": { + "example": 12846, + "type": "integer" }, - "theme": { + "reactions": { + "additionalProperties": { + "format": "int64", + "type": "integer" + }, + "type": "object" + }, + "reply_count": { + "example": 129, + "type": "integer" + }, + "restack_count": { + "example": 1139, + "type": "integer" + }, + "url": { "type": "string" } }, "type": "object" }, - "vrbo.RateCalendarField": { + "substack.NotePost": { "properties": { - "key": { + "id": { + "type": "integer" + }, + "title": { "type": "string" }, - "value": { + "url": { "type": "string" } }, "type": "object" }, - "vrbo.RateCalendarStayConstraints": { + "substack.NoteRepliesResult": { "properties": { - "maximum_stay_in_days": { - "type": "integer" + "has_more": { + "type": "boolean" }, - "minimum_stay_in_days": { + "more_count": { + "description": "MoreCount is how many further reply branches the upstream reports.", "type": "integer" }, - "stay_increment_in_days": { + "next_cursor": { + "type": "string" + }, + "note_id": { + "example": 316240438, "type": "integer" + }, + "replies": { + "items": { + "$ref": "#/definitions/substack.Note" + }, + "type": "array" } }, "type": "object" }, - "vrbo.ReviewSortOption": { + "substack.NoteRestacksResult": { "properties": { - "description": { - "type": "string" + "has_more": { + "type": "boolean" }, - "label": { + "next_cursor": { "type": "string" }, - "selected": { - "type": "boolean" + "note_id": { + "example": 316240438, + "type": "integer" }, - "value": { - "type": "string" + "restacks": { + "items": { + "$ref": "#/definitions/substack.Note" + }, + "type": "array" } }, "type": "object" }, - "vrbo.ReviewsResponse": { + "substack.NotesFeedResult": { "properties": { - "product_id": { - "type": "string" + "has_more": { + "type": "boolean" }, - "property_id": { + "next_cursor": { "type": "string" }, - "reviews": { + "notes": { "items": { - "$ref": "#/definitions/vrbo.PropertyReview" + "$ref": "#/definitions/substack.Note" }, "type": "array" }, - "size": { - "type": "integer" - }, - "sort_by": { + "tab": { + "example": "for-you", "type": "string" }, - "sort_options": { - "items": { - "$ref": "#/definitions/vrbo.ReviewSortOption" - }, - "type": "array" - }, - "source_url": { + "type": { + "example": "base", "type": "string" - }, - "start_index": { - "type": "integer" - }, - "total_count": { - "type": "integer" } }, "type": "object" }, - "vrbo.SearchFilterGroup": { + "substack.NotesFeedTab": { "properties": { - "control_type": { - "type": "string" - }, "id": { + "example": "for-you", "type": "string" }, - "label": { + "name": { + "example": "For you", "type": "string" }, - "options": { - "items": { - "$ref": "#/definitions/vrbo.SearchFilterOption" - }, - "type": "array" - }, - "range": { - "$ref": "#/definitions/vrbo.SearchFilterRange" + "type": { + "example": "base", + "type": "string" + } + }, + "type": "object" + }, + "substack.NotesFeedTabsResult": { + "properties": { + "surface": { + "example": "feed", + "type": "string" }, - "ranges": { - "description": "Ranges lists every range option nested under a range control. Range\nremains the first option for compatibility with the original response.", + "tabs": { "items": { - "$ref": "#/definitions/vrbo.SearchFilterRange" + "$ref": "#/definitions/substack.NotesFeedTab" }, "type": "array" + } + }, + "type": "object" + }, + "substack.PlanCurrency": { + "properties": { + "amount_cents": { + "example": 900, + "type": "integer" }, - "section": { + "currency": { + "example": "eur", "type": "string" - }, - "step_input": { - "$ref": "#/definitions/vrbo.SearchFilterStep" } }, "type": "object" }, - "vrbo.SearchFilterOption": { + "substack.Post": { "properties": { - "disabled": { - "type": "boolean" + "audience": { + "example": "everyone", + "type": "string" }, - "id": { + "comment_count": { + "type": "integer" + }, + "cover_image_url": { "type": "string" }, - "label": { + "description": { "type": "string" }, - "result_count": { + "id": { + "example": 213613469, "type": "integer" }, - "selected": { + "paywalled": { "type": "boolean" }, - "value": { + "published_at": { + "type": "string" + }, + "reaction_count": { + "type": "integer" + }, + "slug": { + "type": "string" + }, + "subtitle": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "example": "newsletter", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "vrbo.SearchFilterRange": { + "substack.PostByline": { "properties": { + "handle": { + "type": "string" + }, "id": { + "example": 134996999, + "type": "integer" + }, + "name": { + "example": "Max Kan", "type": "string" }, - "max": { - "type": "number" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "substack.PostDetail": { + "properties": { + "audience": { + "example": "everyone", + "type": "string" }, - "max_label": { + "bylines": { + "items": { + "$ref": "#/definitions/substack.PostByline" + }, + "type": "array" + }, + "comment_count": { + "type": "integer" + }, + "cover_image_url": { "type": "string" }, - "min": { - "type": "number" + "description": { + "type": "string" }, - "min_label": { + "id": { + "example": 213613469, + "type": "integer" + }, + "paywalled": { + "type": "boolean" + }, + "podcast_duration_seconds": { + "type": "integer" + }, + "podcast_url": { "type": "string" }, - "number_format": { + "published_at": { "type": "string" }, - "selected_max": { - "type": "number" + "reaction_count": { + "type": "integer" }, - "selected_min": { - "type": "number" + "slug": { + "type": "string" }, - "step": { - "type": "number" - } - }, - "type": "object" - }, - "vrbo.SearchFilterRangeSelection": { - "properties": { - "id": { - "example": "nightly_price", + "subtitle": { "type": "string" }, - "max": { - "example": 500, - "type": "number" + "title": { + "type": "string" }, - "min": { - "example": 100, - "type": "number" + "type": { + "example": "newsletter", + "type": "string" + }, + "url": { + "type": "string" + }, + "wordcount": { + "example": 3953, + "type": "integer" } }, "type": "object" }, - "vrbo.SearchFilterSelection": { + "substack.PostsResult": { "properties": { - "id": { - "example": "property_type_group", - "type": "string" + "limit": { + "type": "integer" }, - "values": { - "example": [ - "house" - ], + "offset": { + "type": "integer" + }, + "posts": { "items": { - "type": "string" + "$ref": "#/definitions/substack.Post" }, "type": "array" + }, + "publication": { + "example": "semianalysis", + "type": "string" + }, + "search": { + "example": "nvidia", + "type": "string" + }, + "sort": { + "example": "new", + "type": "string" } }, "type": "object" }, - "vrbo.SearchFilterStep": { + "substack.Publication": { "properties": { - "current": { + "author_id": { "type": "integer" }, - "default": { - "type": "integer" + "copyright": { + "type": "string" }, - "label": { + "custom_domain": { "type": "string" }, - "max": { - "type": "integer" + "explicit": { + "type": "boolean" }, - "min": { - "type": "integer" + "hero_text": { + "type": "string" }, - "step": { + "id": { + "example": 6349492, "type": "integer" + }, + "invite_only": { + "type": "boolean" + }, + "language": { + "type": "string" + }, + "logo_url": { + "type": "string" + }, + "name": { + "example": "SemiAnalysis", + "type": "string" + }, + "subdomain": { + "type": "string" + }, + "subscribers": { + "$ref": "#/definitions/substack.SubscriberCounts" + }, + "subscription": { + "$ref": "#/definitions/substack.Subscription" + }, + "url": { + "example": "https://semianalysis.substack.com", + "type": "string" } }, "type": "object" }, - "vrbo.SearchOption": { + "substack.PublicationListItem": { "properties": { - "adults": { - "example": 2, + "author_handle": { + "type": "string" + }, + "author_id": { "type": "integer" }, - "check_in": { - "example": "2026-10-10", + "author_name": { + "example": "Dylan Patel", "type": "string" }, - "check_out": { - "example": "2026-10-24", + "custom_domain": { "type": "string" }, - "child_ages": { - "description": "ChildAges contains ages 2–17 for children in the default single room.", - "example": [ - 8, - 12 - ], - "items": { - "type": "integer" - }, - "type": "array" + "explicit": { + "type": "boolean" }, - "destination": { - "example": "Miami Beach, Florida, United States of America", + "hero_text": { "type": "string" }, - "filter_ranges": { - "description": "Ranges applies numeric ranges by their live nested facet ID.", + "id": { + "example": 6349492, + "type": "integer" + }, + "language": { + "type": "string" + }, + "logo_url": { + "type": "string" + }, + "name": { + "example": "SemiAnalysis", + "type": "string" + }, + "payments_enabled": { + "type": "boolean" + }, + "subdomain": { + "example": "semianalysis", + "type": "string" + }, + "subscribers": { + "$ref": "#/definitions/substack.SubscriberCounts" + }, + "subscription": { + "$ref": "#/definitions/substack.Subscription" + }, + "url": { + "example": "https://semianalysis.substack.com", + "type": "string" + } + }, + "type": "object" + }, + "substack.RecommendationsResult": { + "properties": { + "publication_id": { + "example": 6349492, + "type": "integer" + }, + "recommendations": { "items": { - "$ref": "#/definitions/vrbo.SearchFilterRangeSelection" + "$ref": "#/definitions/substack.PublicationListItem" }, "type": "array" - }, - "filters": { - "description": "Filters are selections copied from the live facet metadata in a search response.", + } + }, + "type": "object" + }, + "substack.SearchResult": { + "properties": { + "focused_posts": { "items": { - "$ref": "#/definitions/vrbo.SearchFilterSelection" + "$ref": "#/definitions/substack.Post" }, "type": "array" }, - "flexibility": { - "example": "3_DAY", - "type": "string" - }, - "lat_long": { - "example": "25.790653,-80.130043", - "type": "string" + "has_more": { + "type": "boolean" }, - "limit": { - "example": 10, + "page": { "type": "integer" }, - "region_id": { - "example": "8833", - "type": "string" + "posts": { + "items": { + "$ref": "#/definitions/substack.Post" + }, + "type": "array" }, - "rooms": { - "description": "Rooms overrides Adults and ChildAges and supports multi-room searches.", + "publications": { "items": { - "$ref": "#/definitions/vrbo.SearchRoom" + "$ref": "#/definitions/substack.PublicationListItem" }, "type": "array" }, - "sort": { - "enum": [ - "RECOMMENDED", - "PRICE_LOW_TO_HIGH", - "PRICE_HIGH_TO_LOW", - "REVIEW", - "REVIEW_COUNT" - ], - "example": "PRICE_LOW_TO_HIGH", + "query": { + "example": "artificial intelligence", "type": "string" } }, - "required": [ - "check_in", - "check_out", - "destination", - "lat_long", - "region_id" - ], "type": "object" }, - "vrbo.SearchResponse": { + "substack.SubscriberCounts": { "properties": { - "check_in": { + "follower_count": { + "example": 365727, + "type": "integer" + }, + "paid_rough": { + "description": "PaidRough and PaidRoughInt are the only paid-subscriber figures\nSubstack publishes, and both are buckets rather than counts.\nPaidRoughInt is the finer of the two and is always present; PaidTier\nis the coarser threshold behind the public bestseller badge.", + "example": "Thousands of paid subscribers", "type": "string" }, - "check_out": { + "paid_rough_int": { + "example": 1000, + "type": "integer" + }, + "paid_tier": { + "example": 1000, + "type": "integer" + }, + "total": { + "example": 315000, + "type": "integer" + }, + "total_display": { + "example": "315K+", "type": "string" }, - "destination": { + "total_hidden": { + "type": "boolean" + }, + "total_rough": { + "example": "Hundreds of thousands of subscribers", "type": "string" + } + }, + "type": "object" + }, + "substack.Subscription": { + "properties": { + "annual_disabled": { + "type": "boolean" }, - "filters": { + "app_store_plans": { "items": { - "$ref": "#/definitions/vrbo.SearchFilterGroup" + "$ref": "#/definitions/substack.AppStorePlan" }, "type": "array" }, - "region_id": { + "founding_benefits": { + "items": { + "type": "string" + }, + "type": "array" + }, + "founding_plan_name": { + "example": "Founding Member", "type": "string" }, - "results": { + "free_benefits": { "items": { - "$ref": "#/definitions/vrbo.Listing" + "type": "string" }, "type": "array" }, - "rooms": { + "free_trial_enabled": { + "type": "boolean" + }, + "group_discount_percent": { + "example": 20, + "type": "number" + }, + "monthly_disabled": { + "type": "boolean" + }, + "paid_benefits": { "items": { - "$ref": "#/definitions/vrbo.SearchRoom" + "type": "string" }, "type": "array" }, - "sort_options": { + "payments_state": { + "example": "enabled", + "type": "string" + }, + "plans": { "items": { - "$ref": "#/definitions/vrbo.SearchSortOption" + "$ref": "#/definitions/substack.SubscriptionPlan" }, "type": "array" }, - "total_results": { - "type": "integer" + "pledges_enabled": { + "type": "boolean" } }, "type": "object" }, - "vrbo.SearchRoom": { + "substack.SubscriptionPlan": { "properties": { - "adults": { - "example": 2, + "active": { + "type": "boolean" + }, + "amount_cents": { + "example": 5000, "type": "integer" }, - "child_ages": { - "example": [ - 8 - ], + "currencies": { "items": { - "type": "integer" + "$ref": "#/definitions/substack.PlanCurrency" }, "type": "array" - } - }, - "type": "object" - }, - "vrbo.SearchSortOption": { - "properties": { - "default": { - "type": "boolean" + }, + "currency": { + "example": "usd", + "type": "string" }, "id": { + "example": "monthly50usd_982ddb86", "type": "string" }, - "label": { + "interval": { + "example": "month", "type": "string" }, - "selected": { - "type": "boolean" + "interval_count": { + "example": 1, + "type": "integer" }, - "value": { + "kind": { + "example": "monthly", + "type": "string" + }, + "nickname": { + "example": "$50 a month", "type": "string" + }, + "trial_period_days": { + "type": "integer" } }, "type": "object" }, - "vrbo.TravelPage": { + "substack.User": { "properties": { - "path": { + "bestseller_tier": { + "example": 10000, + "type": "integer" + }, + "bio": { "type": "string" }, - "title": { + "handle": { + "example": "pragmaticengineer", "type": "string" }, - "url": { + "id": { + "example": 2067309, + "type": "integer" + }, + "name": { + "example": "Gergely Orosz", "type": "string" - } - }, - "type": "object" - }, - "vrbo.TravelPageDetail": { - "properties": { - "description": { + }, + "photo_url": { "type": "string" }, - "editorial_sections": { + "profile_set_up_at": { + "type": "string" + }, + "publications": { "items": { - "$ref": "#/definitions/vrbo.TravelPageEditorialSection" + "$ref": "#/definitions/substack.UserPublication" }, "type": "array" }, - "path": { + "slug": { "type": "string" }, - "related_page_groups": { - "items": { - "$ref": "#/definitions/vrbo.TravelPageLinkGroup" - }, - "type": "array" + "subscribers": { + "$ref": "#/definitions/substack.SubscriberCounts" }, - "sections": { + "subscriptions": { "items": { - "$ref": "#/definitions/vrbo.TravelPageSection" + "$ref": "#/definitions/substack.UserSubscription" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "title": { + "url": { + "example": "https://substack.com/@pragmaticengineer", "type": "string" } }, "type": "object" }, - "vrbo.TravelPageEditorialSection": { + "substack.UserActivityItem": { "properties": { - "description": { + "kind": { + "example": "comment_restack", "type": "string" }, - "parent_title": { - "type": "string" + "note": { + "$ref": "#/definitions/substack.Note" }, - "title": { + "post": { + "$ref": "#/definitions/substack.Post" + }, + "timestamp": { "type": "string" } }, "type": "object" }, - "vrbo.TravelPageLinkGroup": { + "substack.UserActivityResult": { "properties": { - "pages": { + "has_more": { + "type": "boolean" + }, + "items": { "items": { - "$ref": "#/definitions/vrbo.TravelPage" + "$ref": "#/definitions/substack.UserActivityItem" }, "type": "array" }, - "title": { + "next_cursor": { "type": "string" + }, + "types": { + "items": { + "type": "string" + }, + "type": "array" + }, + "user_id": { + "example": 49731969, + "type": "integer" } }, "type": "object" }, - "vrbo.TravelPageListing": { + "substack.UserConnectionsResult": { "properties": { - "description": { - "type": "string" - }, - "location": { + "list": { + "example": "followers", "type": "string" }, "name": { + "example": "Followers", "type": "string" }, - "photos": { + "user_id": { + "example": 49731969, + "type": "integer" + }, + "users": { "items": { - "$ref": "#/definitions/vrbo.Photo" + "$ref": "#/definitions/substack.User" }, "type": "array" + } + }, + "type": "object" + }, + "substack.UserPublication": { + "properties": { + "custom_domain": { + "type": "string" }, - "rating": { - "type": "number" + "id": { + "example": 458709, + "type": "integer" }, - "rating_label": { + "is_primary": { + "type": "boolean" + }, + "name": { + "example": "The Pragmatic Engineer", "type": "string" }, - "review_count": { - "type": "integer" + "role": { + "example": "admin", + "type": "string" }, - "summary": { + "subdomain": { "type": "string" }, "url": { @@ -252830,1489 +257992,1591 @@ }, "type": "object" }, - "vrbo.TravelPageSection": { + "substack.UserSearchResult": { "properties": { - "description": { + "has_more": { + "type": "boolean" + }, + "page": { + "type": "integer" + }, + "query": { + "example": "pragmatic engineer", "type": "string" }, - "listings": { + "users": { "items": { - "$ref": "#/definitions/vrbo.TravelPageListing" + "$ref": "#/definitions/substack.User" }, "type": "array" + } + }, + "type": "object" + }, + "substack.UserSubscription": { + "properties": { + "is_founding": { + "type": "boolean" }, - "subtitle": { + "membership_state": { + "example": "free_signup", "type": "string" }, - "title": { + "publication_id": { + "type": "integer" + }, + "publication_name": { + "type": "string" + }, + "subdomain": { "type": "string" } }, "type": "object" }, - "vrbo.TravelPagesResponse": { + "substack.categoriesResponseDoc": { "properties": { - "pages": { - "items": { - "$ref": "#/definitions/vrbo.TravelPage" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "source_url": { + "data": { + "$ref": "#/definitions/substack.CategoriesResult" + }, + "msg": { + "example": "success", "type": "string" } }, "type": "object" }, - "vrbo.vrboLocationSuggestionsResponseDoc": { + "substack.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vrbo.LocationSuggestionsResponse" + "$ref": "#/definitions/substack.CategoryResult" + }, + "msg": { + "example": "success", + "type": "string" } }, "type": "object" }, - "vrbo.vrboPropertyResponseDoc": { + "substack.contributorsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vrbo.Property" + "$ref": "#/definitions/substack.ContributorsResult" + }, + "msg": { + "example": "success", + "type": "string" } }, "type": "object" }, - "vrbo.vrboRateCalendarResponseDoc": { + "substack.exploreResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vrbo.RateCalendar" + "$ref": "#/definitions/substack.ExploreResult" + }, + "msg": { + "example": "success", + "type": "string" } }, "type": "object" }, - "vrbo.vrboReviewsResponseDoc": { + "substack.leaderboardResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vrbo.ReviewsResponse" + "$ref": "#/definitions/substack.LeaderboardResult" + }, + "msg": { + "example": "success", + "type": "string" } }, "type": "object" }, - "vrbo.vrboSearchResponseDoc": { + "substack.noteRepliesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vrbo.SearchResponse" + "$ref": "#/definitions/substack.NoteRepliesResult" + }, + "msg": { + "example": "success", + "type": "string" } }, "type": "object" }, - "vrbo.vrboTravelPageDetailResponseDoc": { + "substack.noteResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vrbo.TravelPageDetail" + "$ref": "#/definitions/substack.Note" + }, + "msg": { + "example": "success", + "type": "string" } }, "type": "object" }, - "vrbo.vrboTravelPagesResponseDoc": { + "substack.noteRestacksResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/vrbo.TravelPagesResponse" + "$ref": "#/definitions/substack.NoteRestacksResult" + }, + "msg": { + "example": "success", + "type": "string" } }, "type": "object" }, - "walgreens.Store": { + "substack.notesFeedResponseDoc": { "properties": { - "address_line1": { - "type": "string" - }, - "brand": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "city": { - "type": "string" + "data": { + "$ref": "#/definitions/substack.NotesFeedResult" }, - "county": { + "msg": { + "example": "success", "type": "string" + } + }, + "type": "object" + }, + "substack.notesFeedTabsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "distance_miles": { - "type": "number" - }, - "fax": { - "type": "string" + "data": { + "$ref": "#/definitions/substack.NotesFeedTabsResult" }, - "intersection": { + "msg": { + "example": "success", "type": "string" + } + }, + "type": "object" + }, + "substack.postResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" + "data": { + "$ref": "#/definitions/substack.PostDetail" }, - "name": { + "msg": { + "example": "success", "type": "string" + } + }, + "type": "object" + }, + "substack.postsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "pharmacy_close_time": { - "type": "string" + "data": { + "$ref": "#/definitions/substack.PostsResult" }, - "pharmacy_open_time": { + "msg": { + "example": "success", "type": "string" + } + }, + "type": "object" + }, + "substack.publicationResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "phone": { + "data": { + "$ref": "#/definitions/substack.Publication" + }, + "msg": { + "example": "success", "type": "string" + } + }, + "type": "object" + }, + "substack.recommendationsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "services": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/substack.RecommendationsResult" }, - "state": { + "msg": { + "example": "success", "type": "string" + } + }, + "type": "object" + }, + "substack.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "store_close_time": { - "type": "string" + "data": { + "$ref": "#/definitions/substack.SearchResult" }, - "store_number": { + "msg": { + "example": "success", "type": "string" + } + }, + "type": "object" + }, + "substack.userActivityResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "store_open_time": { - "type": "string" + "data": { + "$ref": "#/definitions/substack.UserActivityResult" }, - "store_type": { + "msg": { + "example": "success", "type": "string" + } + }, + "type": "object" + }, + "substack.userConnectionsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "time_zone": { - "type": "string" + "data": { + "$ref": "#/definitions/substack.UserConnectionsResult" }, - "zip": { + "msg": { + "example": "success", "type": "string" } }, "type": "object" }, - "walgreens.StoresResponse": { + "substack.userResponseDoc": { "properties": { - "stores": { - "items": { - "$ref": "#/definitions/walgreens.Store" - }, - "type": "array" - }, - "total_count": { + "code": { + "example": 200, "type": "integer" + }, + "data": { + "$ref": "#/definitions/substack.User" + }, + "msg": { + "example": "success", + "type": "string" } }, "type": "object" }, - "walgreens.storesResponseDoc": { + "substack.userSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/walgreens.StoresResponse" + "$ref": "#/definitions/substack.UserSearchResult" }, "msg": { - "example": "OK", + "example": "success", "type": "string" } }, "type": "object" }, - "wallapop.CategoriesResponse": { + "subway.Allergen": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/wallapop.Category" - }, - "type": "array" + "contains": { + "type": "boolean" + }, + "may_contain": { + "type": "boolean" }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "subway.AvailableTimesResponse": { + "properties": { "count": { - "example": 997, + "example": 177, "type": "integer" }, + "earliest_slot": { + "description": "EarliestSlot and LatestSlot bracket Slots, kept as their own fields\nso a caller can read the window without scanning the array.", + "example": "2026-09-05T13:15:00Z", + "type": "string" + }, "fetched_at": { - "example": "2026-10-25T00:00:00Z", "type": "string" }, - "max_depth": { + "interval_minutes": { + "description": "IntervalMinutes is the spacing between consecutive slots, derived\nfrom the returned data rather than assumed. It is 0 when fewer than\ntwo slots came back.", "example": 5, "type": "integer" }, - "root_count": { - "example": 18, - "type": "integer" + "latest_slot": { + "example": "2026-09-06T03:55:00Z", + "type": "string" + }, + "slots": { + "description": "Slots are RFC3339 UTC instants, earliest first, spaced by\nIntervalMinutes. They start at the store's next orderable time --\nroughly half an hour out, not immediately -- and run to closing.", + "items": { + "type": "string" + }, + "type": "array" }, "source_url": { - "example": "https://api.wallapop.com/api/v3/categories?context=search", + "type": "string" + }, + "store_id": { + "example": "75376-0", "type": "string" } }, "type": "object" }, - "wallapop.Category": { + "subway.ComboItem": { "properties": { - "depth": { - "example": 1, - "type": "integer" + "a_la_carte_price": { + "example": 12.97, + "type": "number" + }, + "description": { + "description": "Description comes from the matching translation when the upstream\ncarries one; it is frequently empty.", + "type": "string" }, "id": { - "example": 12465, - "type": "integer" + "example": "6", + "type": "string" }, - "is_leaf": { - "example": false, - "type": "boolean" + "min_bundled_price": { + "description": "MinBundledPrice is the cheapest advertised price for taking the\ncategory as a bundle; ALaCartePrice is the cheapest for buying its\ncontents separately. Either can be absent, so both are pointers --\na missing price and a genuine 0.00 are different facts.", + "example": 9.99, + "type": "number" }, "name": { - "example": "Fashion & accessories", + "example": "Sub Meal Deal", "type": "string" }, "parent_id": { - "example": 11002, + "description": "ParentID is set for a category nested under another, empty for a\ntop-level one.", + "type": "string" + }, + "sort_order": { + "example": 36, "type": "integer" + } + }, + "type": "object" + }, + "subway.ComboResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/subway.ComboItem" + }, + "type": "array" }, - "path": { - "example": "fashion-and-accessories/women", + "count": { + "example": 6, + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "root_id": { - "example": 12465, - "type": "integer" + "source_url": { + "type": "string" }, - "vertical_id": { - "example": "fashion", + "store_id": { + "example": "50916-0", "type": "string" } }, "type": "object" }, - "wallapop.FilterDefinition": { + "subway.MenuCategory": { "properties": { - "format": { + "description": { + "example": "", "type": "string" }, "id": { "type": "string" }, - "is_search_enabled": { + "is_main_category": { "type": "boolean" }, - "label": { - "type": "string" - }, - "options": { + "items": { "items": { - "$ref": "#/definitions/wallapop.FilterOption" + "$ref": "#/definitions/subway.MenuItem" }, "type": "array" }, - "options_endpoint": { + "name": { "type": "string" }, - "reload_when_changed": { - "type": "boolean" - }, - "search_params": { - "additionalProperties": { - "$ref": "#/definitions/wallapop.FilterParamBinding" - }, - "type": "object" + "slug": { + "type": "string" + } + }, + "type": "object" + }, + "subway.MenuItem": { + "properties": { + "id": { + "type": "string" }, - "selection": { + "name": { "type": "string" }, - "source": { + "slug": { "type": "string" }, - "steps": { + "variants": { "items": { - "$ref": "#/definitions/wallapop.FilterRangeStep" + "$ref": "#/definitions/subway.MenuVariant" + }, + "type": "array" + } + }, + "type": "object" + }, + "subway.MenuResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/subway.MenuCategory" }, "type": "array" }, - "title": { + "category_count": { + "type": "integer" + }, + "currency": { + "example": "USD", "type": "string" }, - "type": { + "fetched_at": { "type": "string" }, - "unit": { + "product_count": { + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "store_id": { "type": "string" } }, "type": "object" }, - "wallapop.FilterOption": { + "subway.MenuVariant": { "properties": { + "allergens": { + "items": { + "$ref": "#/definitions/subway.Allergen" + }, + "type": "array" + }, + "available": { + "type": "boolean" + }, "id": { "type": "string" }, - "title": { + "image_asset_urn": { + "description": "ImageAssetURN is Subway's own Adobe AEM asset identifier, not a\ndirectly fetchable URL -- confirmed live 2026-09-02 that the\nupstream's own imageUrl field is always empty; this is what is\nactually populated. Kept as-is rather than inventing an unverified\ndelivery-URL scheme.", + "type": "string" + }, + "name": { + "description": "Name is the upstream product name, which sometimes carries an\ninternal build code in parentheses (e.g. \"(1DM)\") -- passed through\nverbatim rather than stripped, since the meaning of that code is not\ndocumented anywhere this family could confirm.", + "type": "string" + }, + "nutrition": { + "items": { + "$ref": "#/definitions/subway.NutritionFact" + }, + "type": "array" + }, + "price": { + "type": "number" + }, + "size": { + "description": "Size is the build label (\"Footlong\", \"6''\", \"Kids\") distinguishing\nthis variant from siblings of the same MenuItem.", "type": "string" } }, "type": "object" }, - "wallapop.FilterOptionsResponse": { + "subway.NearbyResponse": { "properties": { - "brand": { - "type": "string" - }, - "category_id": { + "count": { "type": "integer" }, "fetched_at": { "type": "string" }, - "filter_id": { + "next_offset": { + "description": "NextOffset pages through TotalResults -- pass it back as offset on\nthe next call. Upstream does not signal \"last page\" explicitly;\ncompare count/total_results, or stop once a page returns fewer\nstores than requested.", "type": "string" }, - "next_cursor": { + "source_url": { "type": "string" }, - "options": { + "stores": { "items": { - "$ref": "#/definitions/wallapop.FilterOption" + "$ref": "#/definitions/subway.NearbyStore" }, "type": "array" }, - "options_query": { + "total_results": { + "type": "integer" + } + }, + "type": "object" + }, + "subway.NearbyStore": { + "properties": { + "address": { + "$ref": "#/definitions/subway.StoreAddress" + }, + "can_take_online_orders": { + "type": "boolean" + }, + "catering_url": { "type": "string" }, - "page_size": { - "type": "integer" + "distance_miles": { + "description": "DistanceMiles is measured from the requested coordinate/query.", + "type": "number" }, - "q": { + "features": { + "description": "Features lists which of the seven documented filter values this\nstore actually has -- the same tokens the features query param\naccepts as input.", + "items": { + "type": "string" + }, + "type": "array" + }, + "hours": { + "items": { + "$ref": "#/definitions/subway.StoreHours" + }, + "type": "array" + }, + "is_open_now": { + "type": "boolean" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "payment_methods": { + "items": { + "type": "string" + }, + "type": "array" + }, + "phone_number": { "type": "string" }, - "sort": { + "store_id": { "type": "string" }, - "source_url": { + "timezone": { "type": "string" } }, "type": "object" }, - "wallapop.FilterParamBinding": { + "subway.NutritionFact": { "properties": { - "param_key": { + "name": { "type": "string" }, - "param_value": { - "type": "string" + "value": { + "type": "number" } }, "type": "object" }, - "wallapop.FilterRangeStep": { + "subway.SitemapEntry": { "properties": { - "end": { - "type": "number" + "depth": { + "description": "Depth is how many path segments the entry has. A store page is the\ndeepest level; shallower entries are country/region/city directory\npages that are also listed in the same sitemap.", + "example": 4, + "type": "integer" }, - "increment": { - "type": "number" + "path": { + "description": "Path is the locator path, the value /subway/store takes.", + "example": "united-states/ny/new-york/1-penn-plaza", + "type": "string" }, - "start": { - "type": "number" + "url": { + "type": "string" } }, "type": "object" }, - "wallapop.FiltersResponse": { + "subway.SitemapResponse": { "properties": { - "category_id": { - "type": "integer" - }, "count": { + "example": 100, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "filters": { + "entries": { "items": { - "$ref": "#/definitions/wallapop.FilterDefinition" + "$ref": "#/definitions/subway.SitemapEntry" }, "type": "array" }, - "query": { + "fetched_at": { "type": "string" }, - "root_category_id": { + "page": { + "example": 1, + "type": "integer" + }, + "shard": { + "example": 0, + "type": "integer" + }, + "shard_count": { + "example": 1, "type": "integer" }, "source_url": { "type": "string" + }, + "total_in_shard": { + "example": 22706, + "type": "integer" + }, + "total_pages": { + "example": 228, + "type": "integer" } }, "type": "object" }, - "wallapop.ItemDetailAttribute": { + "subway.StoreAddress": { "properties": { - "key": { + "city": { + "example": "New York", "type": "string" }, - "text": { + "country": { + "example": "US", "type": "string" }, - "title": { + "postal_code": { + "example": "10119", "type": "string" }, - "value": { - "type": "string" - } - }, - "type": "object" - }, - "wallapop.ItemDetailCharacteristic": { - "properties": { - "attribute": { + "region": { + "example": "NY", "type": "string" }, - "value": { + "street": { + "example": "1 Penn Plaza", "type": "string" } }, "type": "object" }, - "wallapop.ItemDetailCondition": { + "subway.StoreHours": { "properties": { - "text": { - "type": "string" + "closed": { + "example": false, + "type": "boolean" }, - "title": { + "closes": { + "example": "23:00", "type": "string" }, - "value": { - "type": "string" - } - }, - "type": "object" - }, - "wallapop.ItemDetailRelatedSearch": { - "properties": { - "title": { + "day_of_week": { + "example": "Monday", "type": "string" }, - "url": { + "opens": { + "example": "09:00", "type": "string" + }, + "segments": { + "items": { + "$ref": "#/definitions/subway.TimeSegment" + }, + "type": "array" } }, "type": "object" }, - "wallapop.ItemDetailResponse": { + "subway.StoreResponse": { "properties": { - "attributes": { - "items": { - "$ref": "#/definitions/wallapop.ItemDetailAttribute" - }, - "type": "array" - }, - "category_id": { - "type": "integer" + "address": { + "$ref": "#/definitions/subway.StoreAddress" }, - "characteristics": { - "items": { - "$ref": "#/definitions/wallapop.ItemDetailCharacteristic" - }, - "type": "array" + "description": { + "description": "Description is the store's marketing blurb.", + "type": "string" }, - "condition": { - "$ref": "#/definitions/wallapop.ItemDetailCondition" + "fetched_at": { + "type": "string" }, - "currency": { + "franchise_number": { + "description": "FranchiseNumber is the store's franchise identifier, distinct from\nStoreID (which carries a \"-0\" ordering suffix).", + "example": "75376", "type": "string" }, - "description": { + "google_cid": { + "example": "7950893118019215099", "type": "string" }, - "fetched_at": { + "google_place_id": { + "description": "GooglePlaceID and GoogleCID identify this store in Google's own\ndata, so a caller can join a Subway location to a Google Maps\nplace without geocoding it themselves.", + "example": "ChIJcXhciqhZwokR-x6iSio_V24", "type": "string" }, - "hashtags": { - "items": { - "type": "string" - }, - "type": "array" + "has_catering": { + "type": "boolean" }, - "id": { - "type": "string" + "has_drive_through": { + "type": "boolean" }, - "images": { + "has_online_ordering": { + "description": "HasOnlineOrdering, HasCatering and HasDriveThrough are the\nlocator's explicit booleans. They are pointers so \"not published\"\nstays distinguishable from a published false.", + "type": "boolean" + }, + "hours": { "items": { - "type": "string" + "$ref": "#/definitions/subway.StoreHours" }, "type": "array" }, - "location": { - "$ref": "#/definitions/wallapop.ListingLocation" + "latitude": { + "example": 40.7517026, + "type": "number" }, - "price": { + "longitude": { + "example": -73.9925826, "type": "number" }, - "related_searches": { + "meals_served": { "items": { - "$ref": "#/definitions/wallapop.ItemDetailRelatedSearch" + "type": "string" }, "type": "array" }, - "shipping": { - "$ref": "#/definitions/wallapop.ListingShipping" + "menu_url": { + "description": "MenuURL and OrderURL point at the store's ordering pages.", + "example": "https://order.subway.com/en-us/restaurant/75376-0/menu/", + "type": "string" }, - "slug": { + "name": { + "example": "Subway", "type": "string" }, - "taxonomy": { - "items": { - "$ref": "#/definitions/wallapop.ListingTaxonomy" - }, - "type": "array" + "open": { + "description": "Open reports the location's own published status. False means the\nstore is flagged closed (permanently or long-term), which is not\nthe same as being outside today's opening hours.", + "example": true, + "type": "boolean" }, - "title": { + "order_url": { "type": "string" }, - "url": { + "path": { "type": "string" - } - }, - "type": "object" - }, - "wallapop.ListingCard": { - "properties": { - "category_id": { - "type": "integer" }, - "currency": { + "phone_e164": { + "description": "PhoneE164 is the same number in dialable E.164 form.", + "example": "+12122440101", "type": "string" }, - "id": { + "phone_number": { + "example": "(212) 244-0101", "type": "string" }, - "images": { + "pickup_and_delivery_services": { + "description": "PickupAndDeliveryServices and MealsServed are the locator's own\nseparate groupings, kept distinct rather than merged into Services.", "items": { "type": "string" }, "type": "array" }, - "location": { - "$ref": "#/definitions/wallapop.ListingLocation" - }, - "price": { - "type": "number" - }, - "shipping": { - "$ref": "#/definitions/wallapop.ListingShipping" - }, - "slug": { + "price_range": { + "description": "PriceRange is the locator's own band, e.g. \"$\".", + "example": "$", "type": "string" }, - "taxonomy": { + "services": { + "description": "Services lists the amenities the locator publishes for this store,\ne.g. \"online ordering\", \"delivery\", \"catering\".", "items": { - "$ref": "#/definitions/wallapop.ListingTaxonomy" + "type": "string" }, "type": "array" }, - "title": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "wallapop.ListingLocation": { - "properties": { - "city": { - "type": "string" - }, - "country_code": { + "source_url": { "type": "string" }, - "region": { + "store_id": { + "description": "StoreID is the numeric ordering identifier (e.g. \"75376-0\") this\nstore uses on subway.com's ordering app -- pass it to\nGET /subway/menu as store_id. It comes free with this same page\nfetch; the locator and ordering platforms share one store ID.", + "example": "75376-0", "type": "string" }, - "region2": { + "timezone": { + "description": "Timezone is the store's IANA zone -- needed to read the UTC slots\nfrom GET /subway/available-times as local wall-clock times.", + "example": "America/New_York", "type": "string" } }, "type": "object" }, - "wallapop.ListingShipping": { + "subway.TimeSegment": { "properties": { - "item_is_shippable": { - "type": "boolean" + "closes": { + "example": "23:00", + "type": "string" }, - "user_allows_shipping": { - "type": "boolean" + "opens": { + "example": "09:00", + "type": "string" } }, "type": "object" }, - "wallapop.ListingTaxonomy": { + "subway.availableTimesResponseDoc": { "properties": { - "id": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/subway.AvailableTimesResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "wallapop.SearchResponse": { + "subway.combosResponseDoc": { "properties": { - "category_id": { - "type": "integer" - }, - "count": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, - "country_code": { - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "items": { - "items": { - "$ref": "#/definitions/wallapop.ListingCard" - }, - "type": "array" - }, - "next_cursor": { - "type": "string" - }, - "query": { - "type": "string" - }, - "sort": { - "type": "string" + "data": { + "$ref": "#/definitions/subway.ComboResponse" }, - "source_url": { - "type": "string" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "wallapop.categoriesResponseDoc": { + "subway.menuResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/wallapop.CategoriesResponse" + "$ref": "#/definitions/subway.MenuResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "wallapop.filterOptionsResponseDoc": { + "subway.nearbyResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/wallapop.FilterOptionsResponse" + "$ref": "#/definitions/subway.NearbyResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "wallapop.filtersResponseDoc": { + "subway.sitemapResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/wallapop.FiltersResponse" + "$ref": "#/definitions/subway.SitemapResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "wallapop.itemDetailResponseDoc": { + "subway.storeResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/wallapop.ItemDetailResponse" + "$ref": "#/definitions/subway.StoreResponse" }, "msg": { - "example": "OK", + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "suggest.Response": { + "properties": { + "query": { + "example": "openai", "type": "string" + }, + "suggestions": { + "items": { + "$ref": "#/definitions/suggest.Suggestion" + }, + "type": "array" } }, "type": "object" }, - "wallapop.searchResponseDoc": { + "suggest.Suggestion": { "properties": { - "code": { - "example": 200, + "position": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/wallapop.SearchResponse" - }, - "msg": { - "example": "OK", + "query": { + "example": "openai api key", "type": "string" } }, "type": "object" }, - "walmart.Product": { + "sun.AuthorArticle": { "properties": { - "attributes": { - "additionalProperties": { - "type": "string" - }, - "type": "object" - }, - "availability": { - "example": "IN_STOCK", + "category": { "type": "string" }, - "brand": { - "example": "Apple", + "category_url": { "type": "string" }, - "canonical_url": { - "example": "https://www.walmart.com/ip/5689919121", + "excerpt": { "type": "string" }, - "category": { - "example": "Electronics", + "title": { "type": "string" }, - "currency": { - "example": "USD", + "url": { "type": "string" - }, - "description": { - "example": "Wireless earbuds with active noise cancellation.", - "type": "string" - }, - "highlights": { - "items": { - "type": "string" - }, - "type": "array" - }, - "image": { - "example": "https://i5.walmartimages.com/seo/example.jpeg", - "type": "string" - }, - "images": { + } + }, + "type": "object" + }, + "sun.AuthorResponse": { + "properties": { + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/sun.AuthorArticle" }, "type": "array" }, - "is_sponsored": { - "example": false, - "type": "boolean" - }, - "item_id": { - "example": "5689919121", - "type": "string" - }, - "price": { - "example": 169, - "type": "number" - }, - "price_text": { - "example": "$169.00", + "bio": { "type": "string" }, - "product_id": { - "example": "5689919121", + "job_title": { "type": "string" }, - "rating": { - "example": 4.6, - "type": "number" - }, - "review_count": { - "example": 17823, - "type": "integer" - }, - "seller_name": { - "example": "Walmart.com", + "name": { "type": "string" }, - "title": { - "example": "Apple AirPods Pro 2", + "url": { "type": "string" - }, - "variants": { - "items": { - "$ref": "#/definitions/walmart.ProductSummary" - }, - "type": "array" } }, "type": "object" }, - "walmart.ProductSummary": { + "swiggy.Collection": { "properties": { - "availability": { - "example": "IN_STOCK", - "type": "string" - }, - "brand": { - "example": "Apple", - "type": "string" - }, - "canonical_url": { - "example": "https://www.walmart.com/ip/5689919121", + "id": { "type": "string" }, - "currency": { - "example": "USD", + "image_url": { "type": "string" }, - "image": { - "example": "https://i5.walmartimages.com/seo/example.jpeg", + "title": { "type": "string" - }, - "images": { + } + }, + "type": "object" + }, + "swiggy.CollectionsResponse": { + "properties": { + "collections": { "items": { - "type": "string" + "$ref": "#/definitions/swiggy.Collection" }, "type": "array" }, - "is_sponsored": { - "example": false, + "is_serviceable": { + "description": "IsServiceable reports whether Swiggy delivers to the requested\ncoordinates at all. False means the coordinates are outside\nSwiggy's delivery coverage, so an empty collections list is a\ncoverage answer rather than a served location that simply has no\ncurated collections. The same field is returned by /swiggy/search's\nplain nearby browse.", "type": "boolean" - }, - "item_id": { - "example": "5689919121", - "type": "string" - }, - "price": { - "example": 169, - "type": "number" - }, - "price_text": { - "example": "$169.00", - "type": "string" - }, - "product_id": { - "example": "5689919121", + } + }, + "type": "object" + }, + "swiggy.ExternalRating": { + "properties": { + "count": { "type": "string" }, "rating": { - "example": 4.6, "type": "number" }, - "review_count": { - "example": 17823, - "type": "integer" - }, - "seller_name": { - "example": "Walmart.com", - "type": "string" - }, - "title": { - "example": "Apple AirPods Pro 2", + "source": { "type": "string" } }, "type": "object" }, - "walmart.RatingBreakdown": { + "swiggy.MenuCategory": { "properties": { - "five_star": { - "description": "Number of 5-star ratings on the product.", - "example": 1698, - "type": "integer" - }, - "four_star": { - "description": "Number of 4-star ratings on the product.", - "example": 273, - "type": "integer" - }, - "one_star": { - "description": "Number of 1-star ratings on the product.", - "example": 215, - "type": "integer" + "items": { + "items": { + "$ref": "#/definitions/swiggy.MenuItem" + }, + "type": "array" }, - "three_star": { - "description": "Number of 3-star ratings on the product.", - "example": 150, - "type": "integer" + "subcategory": { + "type": "string" }, - "two_star": { - "description": "Number of 2-star ratings on the product.", - "example": 116, - "type": "integer" + "title": { + "type": "string" } }, "type": "object" }, - "walmart.Review": { + "swiggy.MenuItem": { "properties": { - "author": { - "description": "Nickname of the reviewer.", - "example": "MusicFan", + "category": { "type": "string" }, - "negative_feedback": { - "description": "Number of shoppers who voted the review not helpful.", - "example": 1, - "type": "integer" - }, - "positive_feedback": { - "description": "Number of shoppers who voted the review helpful.", - "example": 12, - "type": "integer" + "description": { + "type": "string" }, - "rating": { - "description": "Star rating the reviewer gave, out of 5.", - "example": 5, + "discounted_price": { "type": "number" }, - "review_id": { - "description": "Walmart review id.", - "example": "406499690", + "id": { "type": "string" }, - "submission_date": { - "description": "Date the review was submitted, as Walmart shows it, for example `11/30/2025`.", - "example": "11/30/2025", + "image_url": { "type": "string" }, - "text": { - "description": "Body text of the review.", - "type": "string" + "in_stock": { + "type": "boolean" }, - "title": { - "description": "Headline the reviewer gave the review.", - "example": "Great sound", - "type": "string" - } - }, - "type": "object" - }, - "walmart.ReviewsResponse": { - "properties": { - "average_rating": { - "description": "Average star rating of the product, out of 5.", - "example": 4.3, - "type": "number" + "is_veg": { + "type": "boolean" }, - "item_id": { - "description": "Walmart item id the reviews belong to.", - "example": "5689919121", + "name": { "type": "string" }, - "rating_counts": { - "allOf": [ - { - "$ref": "#/definitions/walmart.RatingBreakdown" - } - ], - "description": "Number of ratings the product received at each star level." - }, - "recommended_percent": { - "description": "Percentage of reviewers who recommend the product.", - "example": 87, + "price": { "type": "number" }, - "reviews": { - "description": "Sample of recent customer reviews shown on the product page.", - "items": { - "$ref": "#/definitions/walmart.Review" - }, - "type": "array" - }, - "reviews_with_text_count": { - "description": "Number of reviews that include written text.", - "example": 1345, - "type": "integer" - }, - "top_negative_review": { - "allOf": [ - { - "$ref": "#/definitions/walmart.Review" - } - ], - "description": "Most helpful critical review Walmart highlights. Omitted when there is none." - }, - "top_positive_review": { - "allOf": [ - { - "$ref": "#/definitions/walmart.Review" - } - ], - "description": "Most helpful positive review Walmart highlights. Omitted when there is none." + "rating": { + "description": "Rating and TotalRatings are Swiggy's own aggregate score and review\ncount for this individual dish, the same two fields a restaurant\ncarries. Omitted when the dish has no rating yet. Only the headline\naggregate is returned -- individual reviews and reviewer identity\nare out of scope for this platform.", + "type": "number" }, - "total_review_count": { - "description": "Total number of reviews on the product.", - "example": 2452, + "total_ratings": { "type": "integer" } }, "type": "object" }, - "walmart.SearchResponse": { + "swiggy.MenuResponse": { "properties": { - "items": { + "categories": { "items": { - "$ref": "#/definitions/walmart.ProductSummary" + "$ref": "#/definitions/swiggy.MenuCategory" }, "type": "array" }, - "page": { - "example": 1, - "type": "integer" - }, - "query": { - "example": "lego", - "type": "string" + "offers": { + "items": { + "$ref": "#/definitions/swiggy.Offer" + }, + "type": "array" }, - "total_results": { - "example": 1200, - "type": "integer" + "restaurant": { + "$ref": "#/definitions/swiggy.Restaurant" } }, "type": "object" }, - "walmart.productResponseDoc": { + "swiggy.Offer": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/walmart.Product" + "coupon_code": { + "type": "string" }, - "msg": { - "example": "OK", + "description": { "type": "string" - } - }, - "type": "object" - }, - "walmart.reviewsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/walmart.ReviewsResponse" + "tag": { + "type": "string" }, - "msg": { - "example": "OK", + "title": { "type": "string" } }, "type": "object" }, - "walmart.searchResponseDoc": { + "swiggy.OpeningHours": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/walmart.SearchResponse" + "day": { + "type": "string" }, - "msg": { - "example": "OK", + "hours": { "type": "string" } }, "type": "object" }, - "wapo.ArticleResponse": { + "swiggy.Restaurant": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" + "address": { + "type": "string" }, - "description": { + "area": { "type": "string" }, - "image_url": { + "city": { "type": "string" }, - "paragraphs": { + "cost_for_two": { + "type": "string" + }, + "cuisines": { "items": { "type": "string" }, "type": "array" }, - "published_at": { - "type": "string" - }, - "section": { - "type": "string" - }, - "title": { - "type": "string" - }, - "updated_at": { - "type": "string" + "delivery_time_minutes": { + "type": "integer" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "wapo.AuthorResponse": { - "properties": { - "articles": { + "dishes": { + "description": "Dishes are the menu items that actually matched a /swiggy/search\nquery, carried only by Swiggy's own \"Dishes\" search tab (tab=dish).\nEmpty on the restaurant tab, on a plain nearby browse, on a\ncollection browse, and on /swiggy/restaurant -- none of those\nupstream shapes carry per-restaurant dish matches.", "items": { - "$ref": "#/definitions/wapo.HeadlineItem" + "$ref": "#/definitions/swiggy.MenuItem" }, "type": "array" }, - "author_type": { - "type": "string" - }, - "bio": { - "type": "string" + "external_rating": { + "$ref": "#/definitions/swiggy.ExternalRating" }, - "email": { + "hours_message": { "type": "string" }, - "expertise": { + "hours_status": { + "description": "HoursStatus/HoursMessage are Swiggy's own live open/close callout\nfor this outlet (\"Open now\" / \"Closes 11:30 pm\"); OpeningHours is\nits weekly schedule. Only the restaurant detail and menu responses\ncarry these -- search and collection listing cards do not, so they\nare empty on /swiggy/search results.", "type": "string" }, - "facebook_url": { + "id": { "type": "string" }, "image_url": { "type": "string" }, - "linkedin_url": { - "type": "string" - }, - "location": { - "type": "string" + "is_open": { + "type": "boolean" }, - "name": { - "type": "string" + "is_promoted": { + "description": "IsPromoted reports whether Swiggy itself labels this a promoted\n(sponsored, paid-placement) result rather than an organic one.\nPresent and true only for those; Swiggy marks none on a plain\nnearby browse.", + "type": "boolean" }, - "page": { - "type": "integer" + "latitude": { + "type": "number" }, - "role": { + "locality": { "type": "string" }, - "slug": { - "type": "string" + "longitude": { + "type": "number" }, - "total_count": { - "type": "integer" + "name": { + "type": "string" }, - "total_pages": { - "type": "integer" + "offers": { + "description": "Offers are the promotions Swiggy shows on this restaurant's own\nlisting card in a search, browse, or collection result -- the\nheadline discount and its condition, its badge, and any separate\nfree-delivery benefit. Absent when the card shows no promotion, and\non /swiggy/restaurant and /swiggy/restaurant/menu, whose responses\ncarry the restaurant's fuller offer list at the top level instead.", + "items": { + "$ref": "#/definitions/swiggy.Offer" + }, + "type": "array" }, - "twitter_url": { - "type": "string" + "opening_hours": { + "items": { + "$ref": "#/definitions/swiggy.OpeningHours" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "wapo.HeadlineItem": { - "properties": { - "description": { + "phone": { "type": "string" }, - "image_url": { + "postal_code": { "type": "string" }, - "published_at": { - "type": "string" + "rating": { + "type": "number" }, - "section": { + "rating_count": { "type": "string" }, - "title": { - "type": "string" + "total_ratings": { + "type": "integer" }, - "url": { + "unavailable_message": { + "description": "UnavailableMessage is Swiggy's own reason this listed restaurant\ncannot be ordered from right now (\"Currently not taking orders for\nthis location\", \"Opens next at 5 pm, today\", \"Temporarily closed for\ndelivery\"). Absent for a restaurant that is currently orderable.\nNote it is not simply the inverse of is_open: a restaurant Swiggy\nreports as open can still be unavailable for the requested location.", "type": "string" } }, "type": "object" }, - "wapo.HeadlinesResponse": { + "swiggy.RestaurantResponse": { "properties": { - "count": { - "type": "integer" - }, - "has_more": { - "type": "boolean" - }, - "items": { + "offers": { "items": { - "$ref": "#/definitions/wapo.HeadlineItem" + "$ref": "#/definitions/swiggy.Offer" }, "type": "array" }, - "section": { - "type": "string" + "restaurant": { + "$ref": "#/definitions/swiggy.Restaurant" } }, "type": "object" }, - "wapo.NewsItem": { + "swiggy.SearchResponse": { "properties": { - "last_modified": { - "type": "string" - }, - "published_at": { - "type": "string" + "is_serviceable": { + "description": "IsServiceable reports whether Swiggy delivers to the requested\ncoordinates at all. False means the coordinates are outside\nSwiggy's delivery coverage, so an empty restaurants list is a\ncoverage answer rather than a no-matches answer; an empty list\nwithout this field means no matches in a served area. Returned\nonly for the plain nearby browse -- keyword search and a\ncollection_id browse omit it, because Swiggy answers neither with\na coverage verdict.", + "type": "boolean" }, - "title": { + "next_offset": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "wapo.NewsResponse": { - "properties": { - "items": { + "restaurants": { "items": { - "$ref": "#/definitions/wapo.NewsItem" + "$ref": "#/definitions/swiggy.Restaurant" }, "type": "array" } }, "type": "object" }, - "wapo.Section": { + "swiggy.collectionsResponseDoc": { "properties": { - "name": { - "type": "string" + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" }, - "slug": { - "type": "string" + "data": { + "$ref": "#/definitions/swiggy.CollectionsResponse" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "wapo.SectionsResponse": { - "properties": { - "sections": { - "items": { - "$ref": "#/definitions/wapo.Section" - }, - "type": "array" + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "wapo.articleResponseDoc": { + "swiggy.menuResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/wapo.ArticleResponse" + "$ref": "#/definitions/swiggy.MenuResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "wapo.authorResponseDoc": { + "swiggy.restaurantResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/wapo.AuthorResponse" + "$ref": "#/definitions/swiggy.RestaurantResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "wapo.headlinesResponseDoc": { + "swiggy.searchResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/wapo.HeadlinesResponse" + "$ref": "#/definitions/swiggy.SearchResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "wapo.newsResponseDoc": { + "tacobell.AppMenuBundleChoice": { "properties": { "code": { - "example": 200, - "type": "integer" + "example": "22603_22902_1", + "type": "string" }, - "data": { - "$ref": "#/definitions/wapo.NewsResponse" + "default_product_codes": { + "example": [ + "22101" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" + "max_selections": { + "example": 1, + "type": "integer" + }, + "min_selections": { + "example": 1, + "type": "integer" } }, "type": "object" }, - "wapo.sectionsResponseDoc": { + "tacobell.AppMenuCategory": { "properties": { "code": { - "example": 200, - "type": "integer" + "example": "tacos", + "type": "string" }, - "data": { - "$ref": "#/definitions/wapo.SectionsResponse" + "items": { + "items": { + "$ref": "#/definitions/tacobell.AppMenuItem" + }, + "type": "array" }, - "msg": { - "example": "OK", + "name": { + "example": "Tacos", "type": "string" } }, "type": "object" }, - "wattpad.Author": { + "tacobell.AppMenuDaypart": { "properties": { - "avatar": { + "code": { + "example": "HappyHour", "type": "string" }, "name": { + "example": "Happy Hour", "type": "string" - }, - "username": { - "type": "string" - }, - "verified": { - "type": "boolean" } }, "type": "object" }, - "wattpad.CategoriesResponse": { + "tacobell.AppMenuItem": { "properties": { - "categories": { + "calories": { + "example": 771, + "type": "integer" + }, + "choices": { + "description": "Choices is populated only when kind is \"bundle\".", "items": { - "$ref": "#/definitions/wattpad.Category" + "$ref": "#/definitions/tacobell.AppMenuBundleChoice" + }, + "type": "array" + }, + "code": { + "example": "22603", + "type": "string" + }, + "daypart_codes": { + "example": [ + "BalanceOfDay" + ], + "items": { + "type": "string" }, "type": "array" + }, + "description": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "kind": { + "example": "bundle", + "type": "string" + }, + "name": { + "example": "3 Crunchy Tacos Supreme Combo", + "type": "string" + }, + "price": { + "$ref": "#/definitions/tacobell.Money" } }, "type": "object" }, - "wattpad.Category": { + "tacobell.AppMenuResponse": { "properties": { - "id": { + "categories": { + "items": { + "$ref": "#/definitions/tacobell.AppMenuCategory" + }, + "type": "array" + }, + "category_count": { + "example": 17, "type": "integer" }, - "name": { + "dayparts": { + "items": { + "$ref": "#/definitions/tacobell.AppMenuDaypart" + }, + "type": "array" + }, + "fetched_at": { "type": "string" }, - "name_english": { + "item_count": { + "example": 207, + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "store_number": { + "example": "034922", "type": "string" } }, "type": "object" }, - "wattpad.Comment": { + "tacobell.CategoriesResponse": { "properties": { - "author": { - "type": "string" - }, - "author_avatar": { - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/tacobell.Category" + }, + "type": "array" }, - "body": { - "type": "string" + "count": { + "example": 17, + "type": "integer" }, - "created_at": { + "fetched_at": { "type": "string" }, - "id": { + "source_url": { "type": "string" - }, - "is_reply": { + } + }, + "type": "object" + }, + "tacobell.Category": { + "properties": { + "hidden_from_menu": { + "description": "HiddenFromMenu marks a category Taco Bell does not surface in its own\nmenu navigation; it is still fetchable.", + "example": false, "type": "boolean" }, - "parent_id": { + "name": { + "example": "Tacos", "type": "string" }, - "replies": { - "type": "integer" + "slug": { + "example": "tacos", + "type": "string" }, "url": { "type": "string" @@ -254320,1442 +259584,1678 @@ }, "type": "object" }, - "wattpad.Language": { + "tacobell.CustomizationGroup": { "properties": { - "id": { + "count": { + "example": 9, "type": "integer" }, - "name": { + "group": { + "example": "sauce_options", "type": "string" - } - }, - "type": "object" - }, - "wattpad.LanguagesResponse": { - "properties": { - "languages": { + }, + "options": { "items": { - "$ref": "#/definitions/wattpad.Language" + "$ref": "#/definitions/tacobell.CustomizationOption" }, "type": "array" } }, "type": "object" }, - "wattpad.Part": { + "tacobell.CustomizationOption": { "properties": { - "comments": { - "type": "integer" - }, - "created_at": { - "type": "string" + "accurate_calories": { + "description": "AccurateCalories is Taco Bell's unrounded figure; `calories` is the\nrounded number the site displays.", + "example": 4.0419, + "type": "number" }, - "draft": { + "available_in_store": { + "example": true, "type": "boolean" }, - "id": { - "type": "string" - }, - "length": { + "calories": { + "example": 0, "type": "integer" }, - "modified_at": { + "code": { + "example": "2111", "type": "string" }, - "reads": { - "type": "integer" - }, - "title": { + "description": { "type": "string" }, - "url": { + "image_url": { "type": "string" }, - "votes": { - "type": "integer" + "name": { + "example": "Pico De Gallo", + "type": "string" }, - "word_count": { - "type": "integer" + "price": { + "$ref": "#/definitions/tacobell.Money" } }, "type": "object" }, - "wattpad.PartCommentsResponse": { + "tacobell.DayHours": { "properties": { - "comments": { + "closes": { + "example": "4:00 AM", + "type": "string" + }, + "dayparts": { "items": { - "$ref": "#/definitions/wattpad.Comment" + "$ref": "#/definitions/tacobell.Daypart" }, "type": "array" }, - "limit": { - "type": "integer" - }, - "next_offset": { - "description": "NextOffset is the offset of the next page; absent when this page held\nfewer comments than were asked for, which means it was the last.", - "type": "integer" - }, - "offset": { - "type": "integer" + "opens": { + "example": "7:00 AM", + "type": "string" }, - "part_id": { + "week_day": { + "example": "Monday", "type": "string" } }, "type": "object" }, - "wattpad.PartDetail": { + "tacobell.Daypart": { "properties": { - "comments": { - "type": "integer" + "all_day": { + "example": false, + "type": "boolean" }, - "created_at": { + "closed": { + "example": false, + "type": "boolean" + }, + "ends": { + "example": "4:00 AM", "type": "string" }, - "draft": { - "type": "boolean" + "name": { + "example": "Balance Of Day", + "type": "string" }, - "id": { + "starts": { + "example": "7:00 AM", "type": "string" + } + }, + "type": "object" + }, + "tacobell.MenuItem": { + "properties": { + "available_in_store": { + "example": true, + "type": "boolean" }, - "length": { + "calories": { + "example": 430, "type": "integer" }, - "modified_at": { + "calories_text": { + "example": "430 Cal", "type": "string" }, - "reads": { - "type": "integer" + "category": { + "example": "tacos", + "type": "string" }, - "story_id": { + "code": { + "example": "CB-1234", "type": "string" }, - "story_title": { + "food_type": { "type": "string" }, - "title": { + "has_meatless": { + "description": "HasMeatless marks an item with a meatless variant available.", + "example": false, + "type": "boolean" + }, + "image_url": { "type": "string" }, - "url": { + "item_type": { "type": "string" }, - "votes": { - "type": "integer" + "modifiable": { + "description": "Modifiable marks an item Taco Bell allows customizing.", + "example": true, + "type": "boolean" }, - "word_count": { - "type": "integer" + "name": { + "example": "Naked Chicken Chalupa", + "type": "string" + }, + "price": { + "$ref": "#/definitions/tacobell.Money" + }, + "product_type": { + "type": "string" } }, "type": "object" }, - "wattpad.PartResponse": { + "tacobell.MenuResponse": { "properties": { - "part": { - "$ref": "#/definitions/wattpad.PartDetail" + "category": { + "example": "tacos", + "type": "string" + }, + "count": { + "example": 16, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/tacobell.MenuItem" + }, + "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "wattpad.RecommendationsResponse": { + "tacobell.Money": { "properties": { - "stories": { - "items": { - "$ref": "#/definitions/wattpad.Story" - }, - "type": "array" + "currency": { + "example": "USD", + "type": "string" }, - "story_id": { + "formatted": { + "description": "Formatted is Taco Bell's own rendering, kept because it carries the\nupstream's rounding/symbol conventions.", + "example": "$5.99", "type": "string" + }, + "value": { + "example": 5.99, + "type": "number" } }, "type": "object" }, - "wattpad.SearchResponse": { + "tacobell.NutritionFacts": { "properties": { - "limit": { - "type": "integer" + "added_sugars_g": { + "example": 2.01, + "type": "number" }, - "next_offset": { - "description": "NextOffset is the offset of the next page, absent on the last one. A\npage can hold fewer than limit stories (or none) when Wattpad filters\nafter paging, so advance by next_offset rather than by the item count.", - "type": "integer" + "caffeine_mg": { + "type": "number" }, - "offset": { - "type": "integer" + "calcium_mg": { + "example": 214.1077, + "type": "number" }, - "stories": { + "calories": { + "example": 392.9079, + "type": "number" + }, + "calories_from_fat": { + "example": 118.0107, + "type": "number" + }, + "cholesterol_mg": { + "example": 27.4909, + "type": "number" + }, + "dietary_fiber_g": { + "example": 7.5198, + "type": "number" + }, + "iron_mg": { + "example": 4.1016, + "type": "number" + }, + "monounsaturated_fat_g": { + "example": 3.6845, + "type": "number" + }, + "polyunsaturated_fat_g": { + "example": 3.33, + "type": "number" + }, + "potassium_mg": { + "type": "number" + }, + "protein_g": { + "example": 15.6483, + "type": "number" + }, + "saturated_fat_g": { + "example": 6.4715, + "type": "number" + }, + "sodium_mg": { + "example": 1163.993, + "type": "number" + }, + "sugar_alcohol_g": { + "type": "number" + }, + "sugars_g": { + "example": 4.0006, + "type": "number" + }, + "total_carbohydrate_g": { + "example": 51.5623, + "type": "number" + }, + "total_fat_g": { + "example": 13.8961, + "type": "number" + }, + "trans_fat_g": { + "example": 0.2417, + "type": "number" + }, + "vitamin_a": { + "example": 11.4691, + "type": "number" + }, + "vitamin_c": { + "example": 7.2259, + "type": "number" + }, + "vitamin_d_mcg": { + "example": 1.6074, + "type": "number" + } + }, + "type": "object" + }, + "tacobell.NutritionResponse": { + "properties": { + "allergens": { + "description": "Allergens is the label's \"Contains:\" statement, split into items.", "items": { - "$ref": "#/definitions/wattpad.Story" + "type": "string" }, "type": "array" }, - "total": { - "description": "Total is the number of matches Wattpad reports; browse requests (no\ntext query) are capped at 1500.", - "type": "integer" + "category": { + "example": "burritos", + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "ingredients": { + "description": "Ingredients is the full component-by-component statement, present\nonly when include_ingredients is set.", + "type": "string" + }, + "label_name": { + "description": "LabelName is the label's own item name, which can be more specific\nthan the menu name (e.g. \"Burrito Supreme® - Beef\").", + "type": "string" + }, + "label_url": { + "description": "LabelURL is the nutrition label this data came from. Taco Bell\npublishes its panel there rather than on tacobell.com.", + "type": "string" + }, + "nutrition": { + "$ref": "#/definitions/tacobell.NutritionFacts" + }, + "product": { + "example": "burrito-supreme", + "type": "string" + }, + "serving_size_unit": { + "example": "Burrito", + "type": "string" + }, + "serving_weight_grams": { + "example": 232.4657, + "type": "number" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "wattpad.SearchUsersResponse": { + "tacobell.ProductImage": { "properties": { - "limit": { - "type": "integer" - }, - "next_offset": { - "description": "NextOffset is the offset of the next page; it is absent when this page\nheld fewer users than were asked for.", - "type": "integer" + "format": { + "example": "640x650", + "type": "string" }, - "offset": { - "type": "integer" + "type": { + "example": "PRIMARY", + "type": "string" }, - "users": { - "items": { - "$ref": "#/definitions/wattpad.UserSummary" - }, - "type": "array" + "url": { + "type": "string" } }, "type": "object" }, - "wattpad.Story": { + "tacobell.ProductResponse": { "properties": { - "author": { - "$ref": "#/definitions/wattpad.Author" + "accurate_calories": { + "description": "AccurateCalories is the unrounded figure behind `calories`.", + "example": 392.9079, + "type": "number" }, - "category_ids": { - "items": { - "type": "integer" - }, - "type": "array" + "available_in_store": { + "example": true, + "type": "boolean" }, - "comments": { + "calories": { + "example": 390, "type": "integer" }, - "completed": { - "type": "boolean" - }, - "cover": { + "category": { + "example": "burritos", "type": "string" }, - "created_at": { + "code": { + "example": "22201", "type": "string" }, + "customizations": { + "description": "Customizations are the option groups this item accepts, each with\nper-option calories and prices. Empty for a non-modifiable item.", + "items": { + "$ref": "#/definitions/tacobell.CustomizationGroup" + }, + "type": "array" + }, "description": { "type": "string" }, - "id": { + "fetched_at": { "type": "string" }, - "language": { - "$ref": "#/definitions/wattpad.Language" + "has_meatless": { + "example": false, + "type": "boolean" }, - "mature": { + "images": { + "items": { + "$ref": "#/definitions/tacobell.ProductImage" + }, + "type": "array" + }, + "modifiable": { + "example": true, "type": "boolean" }, - "modified_at": { + "name": { + "example": "Burrito Supreme®", "type": "string" }, - "parts": { - "type": "integer" + "nutrition_label_url": { + "description": "NutritionLabelURL is the full nutrition-facts label Taco Bell links\nfor this item. /taco-bell/nutrition reads it.", + "type": "string" }, - "reads": { - "type": "integer" + "price": { + "$ref": "#/definitions/tacobell.Money" }, - "tags": { + "related": { "items": { - "type": "string" + "$ref": "#/definitions/tacobell.RelatedProduct" }, "type": "array" }, - "title": { + "source_url": { "type": "string" }, "url": { "type": "string" }, - "votes": { - "type": "integer" + "vegetarian_friendly": { + "example": false, + "type": "boolean" } }, "type": "object" }, - "wattpad.StoryDetail": { + "tacobell.RelatedProduct": { "properties": { - "author": { - "$ref": "#/definitions/wattpad.Author" - }, - "category_ids": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "comments": { - "type": "integer" - }, - "completed": { - "type": "boolean" - }, - "copyright": { + "calories": { + "example": 690, "type": "integer" }, - "cover": { + "code": { + "example": "22963", "type": "string" }, - "created_at": { + "image_url": { "type": "string" }, - "description": { + "name": { + "example": "Grilled Cheese Burrito", "type": "string" }, - "first_part_id": { - "type": "string" + "price": { + "$ref": "#/definitions/tacobell.Money" }, - "id": { + "reference_type": { + "example": "CROSSELLING", "type": "string" }, - "language": { - "$ref": "#/definitions/wattpad.Language" - }, - "last_published_at": { + "url": { "type": "string" + } + }, + "type": "object" + }, + "tacobell.Store": { + "properties": { + "address": { + "$ref": "#/definitions/tacobell.StoreAddress" }, - "mature": { + "capabilities": { + "$ref": "#/definitions/tacobell.StoreCapabilities" + }, + "delivery": { + "example": true, "type": "boolean" }, - "modified_at": { + "distance_text": { + "example": "0.90 Miles", "type": "string" }, - "paid_model": { + "name": { + "example": "040890", "type": "string" }, - "parts": { - "type": "integer" - }, - "paywalled": { + "online_available": { + "example": true, "type": "boolean" }, - "rating": { - "type": "integer" + "phone_number": { + "example": "+16268423006", + "type": "string" }, - "reads": { - "type": "integer" + "status": { + "example": "openNow", + "type": "string" }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" + "store_number": { + "example": "040890", + "type": "string" }, - "title": { + "timezone": { + "example": "America/Los_Angeles", "type": "string" }, - "url": { + "timezone_offset": { + "example": "GMT-07:00", "type": "string" }, - "votes": { - "type": "integer" + "today_hours": { + "$ref": "#/definitions/tacobell.StoreHours" } }, "type": "object" }, - "wattpad.StoryPartsResponse": { + "tacobell.StoreAddress": { "properties": { - "parts": { - "items": { - "$ref": "#/definitions/wattpad.Part" - }, - "type": "array" + "city": { + "example": "Los Angeles", + "type": "string" }, - "story_id": { + "country": { + "example": "US", "type": "string" }, - "title": { + "latitude": { + "example": 34.048934, + "type": "number" + }, + "line1": { + "example": "801 West 7th Street", "type": "string" }, - "total": { - "type": "integer" + "line2": { + "type": "string" + }, + "longitude": { + "example": -118.258867, + "type": "number" + }, + "postal_code": { + "example": "90017", + "type": "string" + }, + "region": { + "example": "US-CA", + "type": "string" } }, "type": "object" }, - "wattpad.StoryResponse": { + "tacobell.StoreCapabilities": { "properties": { - "story": { - "$ref": "#/definitions/wattpad.StoryDetail" + "breakfast": { + "example": true, + "type": "boolean" + }, + "delivery_enabled": { + "example": true, + "type": "boolean" + }, + "drive_thru": { + "example": false, + "type": "boolean" + }, + "live_mas_cafe": { + "example": false, + "type": "boolean" + }, + "mobile_enabled": { + "example": true, + "type": "boolean" + }, + "online": { + "example": true, + "type": "boolean" + }, + "open_late": { + "example": false, + "type": "boolean" + }, + "pickup_shelves": { + "example": true, + "type": "boolean" } }, "type": "object" }, - "wattpad.UserProfile": { + "tacobell.StoreDetailResponse": { "properties": { - "ambassador": { + "address": { + "$ref": "#/definitions/tacobell.StoreAddress" + }, + "breakfast_available": { + "description": "BreakfastAvailable is the store-hours record's own flag, which can\ndiffer from capabilities.breakfast.", + "example": true, "type": "boolean" }, - "avatar": { - "type": "string" + "capabilities": { + "$ref": "#/definitions/tacobell.StoreCapabilities" }, - "background": { - "type": "string" + "delivery": { + "example": true, + "type": "boolean" }, - "description": { + "fetched_at": { "type": "string" }, - "followers": { + "geofencing_radius": { + "example": 3, "type": "integer" }, - "following": { - "type": "integer" + "hours": { + "description": "Hours is the full published week, Monday-first. /taco-bell/stores\ncarries only today's window.", + "items": { + "$ref": "#/definitions/tacobell.DayHours" + }, + "type": "array" }, - "joined_at": { + "name": { + "example": "040890", "type": "string" }, - "lists": { - "type": "integer" + "online_available": { + "example": true, + "type": "boolean" }, - "location": { + "phone_number": { + "example": "+16268423006", "type": "string" }, - "modified_at": { + "pickup_status": { + "description": "PickupStatus is whether mobile pickup ordering is switched on for\nthis restaurant.", + "example": "Activated", "type": "string" }, - "name": { + "source_url": { "type": "string" }, - "stories_published": { - "type": "integer" - }, - "url": { + "status": { + "example": "openNow", "type": "string" }, - "username": { + "store_number": { + "example": "040890", "type": "string" }, - "verified": { - "type": "boolean" - }, - "votes_received": { - "type": "integer" + "timezone": { + "description": "Timezone is the IANA zone; TimezoneOffset is Taco Bell's own GMT\nrendering, kept because it reflects the store's current DST state.", + "example": "America/Los_Angeles", + "type": "string" }, - "website": { + "timezone_offset": { + "example": "GMT-07:00", "type": "string" + }, + "today_hours": { + "$ref": "#/definitions/tacobell.DayHours" } }, "type": "object" }, - "wattpad.UserResponse": { + "tacobell.StoreHours": { "properties": { - "user": { - "$ref": "#/definitions/wattpad.UserProfile" + "closes": { + "example": "4:00 AM", + "type": "string" + }, + "opens": { + "example": "5:30 AM", + "type": "string" + }, + "week_day": { + "example": "Sunday", + "type": "string" } }, "type": "object" }, - "wattpad.UserStoriesResponse": { + "tacobell.StoreMenuCategory": { "properties": { - "limit": { - "type": "integer" - }, - "next_offset": { - "type": "integer" - }, - "offset": { - "type": "integer" + "code": { + "example": "breakfast", + "type": "string" }, - "stories": { + "items": { "items": { - "$ref": "#/definitions/wattpad.Story" + "$ref": "#/definitions/tacobell.MenuItem" }, "type": "array" }, - "total": { - "type": "integer" - }, - "username": { + "name": { + "example": "Breakfast", "type": "string" } }, "type": "object" }, - "wattpad.UserSummary": { + "tacobell.StoreMenuResponse": { "properties": { - "avatar": { - "type": "string" - }, - "description": { - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/tacobell.StoreMenuCategory" + }, + "type": "array" }, - "followers": { + "category_count": { + "example": 17, "type": "integer" }, - "name": { + "fetched_at": { "type": "string" }, - "stories_published": { + "happier_hours": { + "allOf": [ + { + "$ref": "#/definitions/tacobell.TimeWindow" + } + ], + "description": "HappierHours is this store's current happy-hour discount window, if\none is in effect. Not published anywhere else in this family." + }, + "item_count": { + "example": 312, "type": "integer" }, - "username": { + "source_url": { "type": "string" }, - "verified": { - "type": "boolean" + "store_number": { + "example": "040890", + "type": "string" } }, "type": "object" }, - "wattpad.categoriesResponseDoc": { + "tacobell.StoresResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 10, "type": "integer" }, - "data": { - "$ref": "#/definitions/wattpad.CategoriesResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" + }, + "stores": { + "items": { + "$ref": "#/definitions/tacobell.Store" + }, + "type": "array" } }, "type": "object" }, - "wattpad.languagesResponseDoc": { + "tacobell.TimeWindow": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/wattpad.LanguagesResponse" + "ends_at": { + "example": "2026-09-02T00:00:00Z", + "type": "string" }, - "msg": { - "example": "OK", + "starts_at": { + "example": "2026-09-01T21:00:00Z", "type": "string" } }, "type": "object" }, - "wattpad.partCommentsResponseDoc": { + "tacobell.appMenuResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/wattpad.PartCommentsResponse" + "$ref": "#/definitions/tacobell.AppMenuResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "wattpad.partResponseDoc": { + "tacobell.categoriesResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/wattpad.PartResponse" + "$ref": "#/definitions/tacobell.CategoriesResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "wattpad.recommendationsResponseDoc": { + "tacobell.menuResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/wattpad.RecommendationsResponse" + "$ref": "#/definitions/tacobell.MenuResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "wattpad.searchResponseDoc": { + "tacobell.nutritionResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/wattpad.SearchResponse" + "$ref": "#/definitions/tacobell.NutritionResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "wattpad.searchUsersResponseDoc": { + "tacobell.productResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/wattpad.SearchUsersResponse" + "$ref": "#/definitions/tacobell.ProductResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "wattpad.storyPartsResponseDoc": { + "tacobell.storeDetailResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/wattpad.StoryPartsResponse" + "$ref": "#/definitions/tacobell.StoreDetailResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "wattpad.storyResponseDoc": { + "tacobell.storeMenuResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/wattpad.StoryResponse" + "$ref": "#/definitions/tacobell.StoreMenuResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "wattpad.userResponseDoc": { + "tacobell.storesResponseDoc": { "properties": { "code": { - "example": 200, + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", "type": "integer" }, "data": { - "$ref": "#/definitions/wattpad.UserResponse" + "$ref": "#/definitions/tacobell.StoresResponse" }, "msg": { - "example": "OK", - "type": "string" + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" } }, "type": "object" }, - "wattpad.userStoriesResponseDoc": { + "target.Answer": { "properties": { - "code": { - "example": 200, + "author": { + "type": "string" + }, + "helpful": { "type": "integer" }, - "data": { - "$ref": "#/definitions/wattpad.UserStoriesResponse" + "id": { + "type": "string" }, - "msg": { - "example": "OK", + "submitted_at": { + "type": "string" + }, + "text": { "type": "string" } }, "type": "object" }, - "wayfair.CategoriesResponse": { + "target.Availability": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/wayfair.CategoryRef" - }, - "type": "array" + "backup_store": { + "type": "boolean" }, - "has_next": { - "example": true, + "primary_store": { "type": "boolean" }, - "page": { - "example": 1, - "type": "integer" + "scheduled_delivery": { + "type": "boolean" }, - "page_size": { - "example": 100, - "type": "integer" + "shipping": { + "type": "boolean" }, - "total": { - "example": 1521, - "type": "integer" + "sold_out": { + "type": "boolean" } }, "type": "object" }, - "wayfair.CategoryRef": { + "target.Breadcrumb": { "properties": { - "department": { - "example": "baby-kids", - "type": "string" - }, "id": { - "example": "1829184", + "example": "4yi5p", "type": "string" }, "name": { - "example": "Kids Shower Curtains", + "example": "Coffee", "type": "string" }, "url": { - "example": "https://www.wayfair.com/baby-kids/sb0/kids-shower-curtains-c1829184.html", "type": "string" } }, "type": "object" }, - "wayfair.CategoryResponse": { + "target.CategoriesResponse": { "properties": { - "category": { - "type": "string" - }, - "category_id": { - "type": "string" + "categories": { + "items": { + "$ref": "#/definitions/target.Category" + }, + "type": "array" }, "count": { + "example": 29, "type": "integer" }, "fetched_at": { "type": "string" }, - "has_more": { - "type": "boolean" - }, - "page": { + "group_count": { + "example": 16, "type": "integer" }, - "products": { + "groups": { "items": { - "$ref": "#/definitions/wayfair.ProductSummary" + "$ref": "#/definitions/target.CategoryGroup" }, "type": "array" }, "source_url": { "type": "string" - }, - "total_count": { - "type": "integer" } }, "type": "object" }, - "wayfair.ProductDetailResponse": { + "target.Category": { "properties": { - "brand_name": { + "id": { + "example": "5xt1a", "type": "string" }, - "currency_code": { + "image_url": { "type": "string" }, - "fetched_at": { + "name": { + "example": "Grocery", "type": "string" }, - "highlights": { - "description": "Highlights are Wayfair's own site-selected feature bullets (its \"Why\nWe Love It\" section), the closest available substitute for a\nmarketing description -- a distinct marketing description field was\nnot found in the page's initial data.", + "url": { + "example": "https://www.target.com/c/grocery/-/N-5xt1a", + "type": "string" + } + }, + "type": "object" + }, + "target.CategoryGroup": { + "properties": { + "categories": { "items": { - "type": "string" + "$ref": "#/definitions/target.Category" }, "type": "array" }, - "images": { - "description": "Images lists every distinct product image found on the page.", + "name": { + "example": "Grocery", + "type": "string" + } + }, + "type": "object" + }, + "target.CategoryProductsResponse": { + "properties": { + "applied_filter_ids": { "items": { "type": "string" }, "type": "array" }, - "in_stock": { - "type": "boolean" - }, - "original_price": { - "type": "string" - }, - "price": { + "category_id": { + "example": "5q0ga", "type": "string" }, - "product_id": { - "type": "string" + "count": { + "example": 24, + "type": "integer" }, - "product_name": { + "fetched_at": { "type": "string" }, - "rating": { - "type": "number" - }, - "rating_breakdown": { - "additionalProperties": { - "type": "integer" + "filter_groups": { + "items": { + "$ref": "#/definitions/target.FilterGroup" }, - "description": "RatingBreakdown maps each star value (\"1\" through \"5\") to the number\nof reviews with that rating.", - "type": "object" + "type": "array" }, - "rating_count": { - "description": "RatingCount is the product's total review count, sourced from the\npage's own aggregate rating summary.", + "page": { + "example": 1, "type": "integer" }, - "selected_color": { - "description": "SelectedColor is the color variant this page rendered (from its own\nURL/piid) -- kept for backward compatibility. VariantCategories below\ncovers every variant dimension's full option list, not just the one\nselected color.", - "type": "string" - }, - "source_url": { - "type": "string" - }, - "stock_message": { - "description": "StockMessage is Wayfair's own inventory status text (e.g. \"795 Left\nin Stock\"), surfaced verbatim since it is more informative than a\nplain boolean.", - "type": "string" - }, - "url": { - "type": "string" + "page_size": { + "example": 24, + "type": "integer" }, - "variant_categories": { - "description": "VariantCategories lists every variant dimension this product offers\n(e.g. \"Base Finish\", \"Upholstery Color\", \"Cord Color\") with every one\nof its options -- not just the single option SelectedColor covers.\nEach option's Available reflects both whether it can be selected\ntogether with the product's other currently-selected variant choices\nand, when known, its own stock status -- confirmed live 2026-08-11\nagainst Wayfair's own PDP data (see service.go's doc comment).", + "products": { "items": { - "$ref": "#/definitions/wayfair.VariantCategory" + "$ref": "#/definitions/target.ProductSummary" }, "type": "array" - } - }, - "type": "object" - }, - "wayfair.ProductSummary": { - "properties": { - "brand_name": { - "type": "string" - }, - "currency_code": { - "type": "string" - }, - "image_url": { - "type": "string" }, - "original_price": { + "sort": { + "example": "featured", "type": "string" }, - "price": { + "source_url": { "type": "string" }, - "product_id": { - "type": "string" + "store_id": { + "example": 2885, + "type": "integer" }, - "product_name": { - "type": "string" + "total": { + "example": 4158, + "type": "integer" }, - "url": { - "type": "string" + "total_pages": { + "example": 50, + "type": "integer" } }, "type": "object" }, - "wayfair.VariantCategory": { + "target.FilterGroup": { "properties": { - "name": { + "display_name": { + "description": "Name of the filter group as Target shows it, such as `Deals`.", + "example": "Deals", + "type": "string" + }, + "expanded": { + "description": "Whether Target shows the group expanded.", + "type": "boolean" + }, + "id": { + "description": "Target filter group id, such as `d_deals`.", + "example": "d_deals", "type": "string" }, "options": { + "description": "Filter options in the group.", "items": { - "$ref": "#/definitions/wayfair.VariantOption" + "$ref": "#/definitions/target.FilterOption" }, "type": "array" + }, + "type": { + "description": "Kind of control Target uses for the group, such as `checkbox`.", + "example": "checkbox", + "type": "string" } }, "type": "object" }, - "wayfair.VariantOption": { + "target.FilterOption": { "properties": { - "available": { - "description": "Available is false when this option cannot be selected together\nwith the product's other currently-selected variant choices, or\n(when its stock status is known) when it is itself out of stock.", - "type": "boolean" - }, - "image_url": { + "display_name": { + "description": "Label of the option as Target shows it, such as `Clearance`.", + "example": "Clearance", "type": "string" }, - "name": { + "id": { + "description": "Target filter option id, such as `5tdv1`.", + "example": "5tdv1", "type": "string" }, "selected": { - "description": "Selected is true for the option this page's own URL/piid rendered\n(the same option SelectedColor names, for whichever category it\nbelongs to).", + "description": "Whether the option is currently applied.", "type": "boolean" - } - }, - "type": "object" - }, - "wayfair.categoriesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/wayfair.CategoriesResponse" + "url": { + "description": "Filter reference for the option, such as `d_deals:clearance`.", + "example": "d_deals:clearance", + "type": "string" }, - "msg": { - "example": "OK", + "value": { + "description": "Value of the option, such as `clearance`.", + "example": "clearance", "type": "string" } }, "type": "object" }, - "wayfair.categoryResponseDoc": { + "target.FilterOptionsResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/wayfair.CategoryResponse" + "applied_filter_ids": { + "description": "Ids of the filter options currently applied.", + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "category_id": { + "description": "Target category id the filters are for. Omitted when filters were requested by search query.", + "example": "5q0ga", "type": "string" - } - }, - "type": "object" - }, - "wayfair.productDetailResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "count": { + "description": "Number of filter groups returned.", + "example": 7, "type": "integer" }, - "data": { - "$ref": "#/definitions/wayfair.ProductDetailResponse" + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "type": "string" }, - "msg": { - "example": "OK", + "filter_groups": { + "description": "Filter groups and their options for the current result set.", + "items": { + "$ref": "#/definitions/target.FilterGroup" + }, + "type": "array" + }, + "query": { + "description": "Search query the filters are for. Omitted when filters were requested by category.", + "example": "coffee", + "type": "string" + }, + "source_url": { + "description": "URL the data was read from.", "type": "string" + }, + "store_id": { + "description": "Target store id the results are for.", + "example": 2885, + "type": "integer" + }, + "total": { + "description": "Number of products in the current result set.", + "example": 4158, + "type": "integer" } }, "type": "object" }, - "wccftech.AuthorArticle": { + "target.Price": { "properties": { - "image_url": { - "type": "string" + "current": { + "example": 12.79, + "type": "number" }, - "published_at": { + "formatted": { + "example": "$12.79", "type": "string" }, - "summary": { - "type": "string" + "regular": { + "example": 12.79, + "type": "number" }, - "title": { - "type": "string" + "store_id": { + "example": 2885, + "type": "integer" }, - "url": { + "unit_formatted": { + "example": "$1.07/ounce", "type": "string" } }, "type": "object" }, - "wccftech.AuthorResponse": { + "target.Product": { "properties": { - "articles": { + "availability": { + "$ref": "#/definitions/target.Availability" + }, + "brand": { + "example": "Starbucks", + "type": "string" + }, + "breadcrumbs": { "items": { - "$ref": "#/definitions/wccftech.AuthorArticle" + "$ref": "#/definitions/target.Breadcrumb" }, "type": "array" }, - "bio": { - "type": "string" + "bullets": { + "items": { + "type": "string" + }, + "type": "array" }, - "image_url": { + "category": { + "example": "Ground Coffee", "type": "string" }, - "name": { + "category_id": { + "example": "x2hqv", "type": "string" }, - "role": { + "description": { "type": "string" }, - "slug": { + "dpci": { + "example": "231-10-1932", "type": "string" }, - "url": { + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "item_type": { + "example": "Coffee", "type": "string" - } - }, - "type": "object" - }, - "web.ScrapeInfo": { - "properties": { - "backend": { - "description": "headless backend that rendered, when method=browser", + }, + "parent_category_id": { + "example": "4yi5p", "type": "string" }, - "cache_state": { - "description": "\"hit\" | \"miss\" — whether this response came from the cache", + "parent_tcin": { + "example": "89169599", "type": "string" }, - "cached_at": { - "description": "RFC3339 time the served copy was fetched (cache hits only)", + "price": { + "$ref": "#/definitions/target.Price" + }, + "primary_image_url": { "type": "string" }, - "escalated": { - "description": "true when the fetch escalated from HTTP to a headless browser", - "type": "boolean" + "rating": { + "$ref": "#/definitions/target.Rating" }, - "method": { - "description": "\"http\" | \"browser\"", + "specifications": { + "items": { + "type": "string" + }, + "type": "array" + }, + "tcin": { + "example": "12954151", "type": "string" }, - "render_failed": { - "description": "RenderFailed is true when a browser render was requested (render=browser or a\npinned backend) but no backend produced a page, so the content is the\nHTTP-tier fallback. Such a page ran no JavaScript and is billed at the\nHTTP-tier price.", - "type": "boolean" + "title": { + "example": "Starbucks Pike Place Roast Medium Ground Coffee - 12oz", + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "web.ScrapeLink": { + "target.ProductResponse": { "properties": { - "href": { + "fetched_at": { "type": "string" }, - "rel": { - "type": "string" + "product": { + "$ref": "#/definitions/target.Product" }, - "text": { + "source_url": { "type": "string" + }, + "store_id": { + "example": 2885, + "type": "integer" } }, "type": "object" }, - "web.ScrapeMetadata": { + "target.ProductSummary": { "properties": { - "author": { - "type": "string" - }, - "canonical_url": { - "type": "string" - }, - "content_type": { + "brand": { + "example": "Starbucks", "type": "string" }, - "description": { + "category_id": { + "example": "x2hqv", "type": "string" }, - "final_url": { + "parent_category_id": { + "example": "4yi5p", "type": "string" }, - "image": { + "parent_tcin": { + "example": "89169599", "type": "string" }, - "language": { - "type": "string" + "price": { + "$ref": "#/definitions/target.Price" }, - "modified_at": { + "primary_image_url": { "type": "string" }, - "published_at": { - "type": "string" + "rating": { + "$ref": "#/definitions/target.Rating" }, - "section": { + "tcin": { + "example": "12954151", "type": "string" }, - "site_name": { + "title": { + "example": "Starbucks Pike Place Roast Medium Ground Coffee - 12oz", "type": "string" }, - "source_url": { - "type": "string" - }, - "status_code": { - "type": "integer" - }, - "title": { + "url": { "type": "string" } }, "type": "object" }, - "web.ScrapeOption": { + "target.Question": { "properties": { - "backend": { - "example": "", - "type": "string" - }, - "dedicated": { - "type": "boolean" - }, - "formats": { - "example": [ - "markdown" - ], + "answers": { "items": { - "type": "string" + "$ref": "#/definitions/target.Answer" }, "type": "array" }, - "max_age": { - "example": 604800000, - "type": "integer" + "author": { + "type": "string" }, - "only_main_content": { - "type": "boolean" + "helpful": { + "type": "integer" }, - "proxy": { - "example": "", + "id": { "type": "string" }, - "render": { - "enum": [ - "auto", - "http", - "browser", - "unblocker" - ], - "example": "auto", + "submitted_at": { "type": "string" }, - "store_in_cache": { - "type": "boolean" - }, - "url": { - "example": "https://example.com", + "text": { "type": "string" - }, - "wait_for": { - "example": 0, - "type": "integer" } }, - "required": [ - "url" - ], "type": "object" }, - "web.ScrapeResult": { + "target.QuestionsResponse": { "properties": { - "html": { + "count": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "link_details": { - "items": { - "$ref": "#/definitions/web.ScrapeLink" - }, - "type": "array" + "page": { + "type": "integer" }, - "links": { + "per_page": { + "type": "integer" + }, + "questions": { "items": { - "type": "string" + "$ref": "#/definitions/target.Question" }, "type": "array" }, - "markdown": { + "source_url": { "type": "string" }, - "metadata": { - "$ref": "#/definitions/web.ScrapeMetadata" - }, - "raw_html": { + "tcin": { "type": "string" }, - "scrape": { - "$ref": "#/definitions/web.ScrapeInfo" + "total_pages": { + "type": "integer" } }, "type": "object" }, - "web.TechStackOption": { + "target.Rating": { "properties": { - "render": { - "enum": [ - "browser", - "auto", - "http" - ], - "example": "browser", - "type": "string" + "average": { + "example": 4.51, + "type": "number" }, - "url": { - "example": "https://www.example.com", - "type": "string" + "rating_count": { + "example": 1586, + "type": "integer" + }, + "review_count": { + "example": 1076, + "type": "integer" } }, - "required": [ - "url" - ], "type": "object" }, - "web.TechStackResult": { + "target.Review": { "properties": { - "categories": { - "items": { - "type": "string" - }, - "type": "array" + "author": { + "type": "string" }, - "count": { + "helpful": { "type": "integer" }, - "detector_version": { + "id": { "type": "string" }, - "failure_reason": { - "type": "string" + "rating": { + "type": "integer" }, - "final_url": { + "submitted_at": { "type": "string" }, - "is_infrastructure": { - "description": "IsInfrastructure is true when the URL's host looks like backend\ninfrastructure (a CDN, DNS, or cloud-vendor hostname) rather than a\nreal, human-navigable website.", - "type": "boolean" - }, - "reachable": { + "syndicated": { "type": "boolean" }, - "technologies": { - "items": { - "$ref": "#/definitions/techstack.Technology" - }, - "type": "array" - }, - "unmatched_evidence": { - "allOf": [ - { - "$ref": "#/definitions/techstack.UnmatchedEvidence" - } - ], - "description": "UnmatchedEvidence is the third-party script/stylesheet host domains and\n value seen on the page that don't match any current\nsignature — useful for spotting a vendor worth requesting coverage for." + "text": { + "type": "string" }, - "url": { + "title": { "type": "string" + }, + "verified": { + "type": "boolean" } }, "type": "object" }, - "web.billingRejectionDoc": { + "target.ReviewsResponse": { "properties": { - "credit_cost": { - "description": "credit_cost is what the rejected request would have cost. Credit rejections only.", - "example": 1, + "count": { "type": "integer" }, - "credits_included": { - "description": "credits_included is the plan's credit allowance for the period. Credit rejections only.", - "example": 2000, - "type": "integer" + "fetched_at": { + "type": "string" }, - "credits_remaining": { - "description": "credits_remaining is what is left this period. Credit rejections only.", - "example": 0, + "page": { "type": "integer" }, - "credits_used": { - "description": "credits_used is credits spent so far this period. Credit rejections only.", - "example": 2000, + "per_page": { "type": "integer" }, - "daily_credit_limit": { - "description": "daily_credit_limit is the plan's daily cap; 0 means no daily cap. Credit rejections only.", - "example": 500, + "reviews": { + "items": { + "$ref": "#/definitions/target.Review" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "tcin": { + "type": "string" + }, + "total": { "type": "integer" }, - "daily_credits_remaining": { - "description": "daily_credits_remaining is what is left today (UTC). Credit rejections only.", - "example": 0, + "total_pages": { "type": "integer" + } + }, + "type": "object" + }, + "target.SearchResponse": { + "properties": { + "applied_filter_ids": { + "items": { + "type": "string" + }, + "type": "array" }, - "daily_credits_used": { - "description": "daily_credits_used is credits spent so far today (UTC). Credit rejections only.", - "example": 500, + "count": { + "example": 24, "type": "integer" }, - "message": { - "description": "message is a human-readable explanation of the rejection.", - "example": "Your Free plan's 2000 monthly credits are used up. They reset at 2026-08-02T00:00:00Z.", + "fetched_at": { "type": "string" }, - "plan": { - "description": "plan is the caller's current plan.", - "example": "Free", - "type": "string" + "filter_groups": { + "items": { + "$ref": "#/definitions/target.FilterGroup" + }, + "type": "array" }, - "rate_limit_per_minute": { - "description": "rate_limit_per_minute is the plan's request rate. rate_limited only.", - "example": 5, + "page": { + "example": 1, "type": "integer" }, - "reason": { - "description": "reason identifies the limit that was hit.", - "enum": [ - "insufficient_credits", - "daily_credit_limit", - "rate_limited", - "ip_rate_limited" - ], - "example": "insufficient_credits", + "page_size": { + "example": 24, + "type": "integer" + }, + "products": { + "items": { + "$ref": "#/definitions/target.ProductSummary" + }, + "type": "array" + }, + "query": { + "example": "coffee", "type": "string" }, - "reset_scope": { - "description": "reset_scope names the window that clears this rejection.", - "enum": [ - "daily", - "monthly", - "minute", - "ip_window" - ], - "example": "monthly", + "sort": { + "example": "relevance", "type": "string" }, - "resets_at": { - "description": "resets_at is when that window next rolls over, so the caller knows when\nrequests will succeed again without any action. Omitted only for an\ninsufficient_credits rejection whose billing period is not on record (a\nstate that predates period tracking).", - "example": "2026-08-02T00:00:00Z", + "source_url": { "type": "string" }, - "retry_after_seconds": { - "description": "retry_after_seconds is how long to wait before retrying, rounded up to the\nnext whole second. Matches the Retry-After response header. Present on every\nreason whenever resets_at is present — this is not rate_limited-only.", - "example": 12, + "store_id": { + "example": 2885, "type": "integer" }, - "suggested_plan": { - "description": "suggested_plan is the cheapest plan that would cover the caller's observed\nusage. Omitted when no higher plan applies, and always omitted for\nip_rate_limited (upgrading plan does not clear an IP-sharing block).", - "example": "Starter", - "type": "string" + "total": { + "example": 20939, + "type": "integer" }, - "upgrade_url": { - "description": "upgrade_url is where to change plan.", - "example": "https://crawlora.net/pricing", - "type": "string" + "total_pages": { + "example": 50, + "type": "integer" } }, "type": "object" }, - "web.billingRejectionResponseDoc": { + "target.Store": { "properties": { - "code": { - "example": 402, - "type": "integer" + "address_line1": { + "example": "20745 Stevens Creek Blvd", + "type": "string" }, - "data": { - "$ref": "#/definitions/web.billingRejectionDoc" + "city": { + "example": "Cupertino", + "type": "string" }, - "msg": { - "example": "Payment Required", + "country": { + "example": "US", "type": "string" - } - }, - "type": "object" - }, - "web.scrapeResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/web.ScrapeResult" + "distance_miles": { + "example": 2.62, + "type": "number" }, - "msg": { - "example": "OK", + "hours": { + "items": { + "$ref": "#/definitions/target.StoreHoursDay" + }, + "type": "array" + }, + "name": { + "example": "Cupertino De Anza Blvd", "type": "string" - } - }, - "type": "object" - }, - "web.techStackResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/web.TechStackResult" + "phone": { + "example": "408-725-2651", + "type": "string" }, - "msg": { - "example": "OK", + "postal_code": { + "example": "95014-2123", "type": "string" - } - }, - "type": "object" - }, - "webmonitor.checkDoc": { - "properties": { - "added_urls": { + }, + "services": { + "description": "Services is Target's own service/amenity label list for this store\n(e.g. \"Starbucks Cafe\", \"Drive Up\", \"Wine, Beer & Spirits Available\"),\npassed through as-is rather than translated to a fixed vocabulary.", "items": { "type": "string" }, "type": "array" }, - "billed": { - "example": true, - "type": "boolean" + "state": { + "example": "CA", + "type": "string" }, - "changed": { - "example": false, - "type": "boolean" + "status": { + "example": "Open", + "type": "string" }, - "checked_at": { - "example": "2026-08-22T10:00:00Z", + "store_id": { + "example": "323", "type": "string" }, - "diff": { + "time_zone": { + "example": "PST", + "type": "string" + } + }, + "type": "object" + }, + "target.StoreHoursDay": { + "properties": { + "close_time": { + "example": "23:00:00", "type": "string" }, - "error": { + "date": { + "example": "2026-09-15", "type": "string" }, - "fingerprint": { + "day_name": { + "example": "Tuesday", "type": "string" }, - "id": { - "example": "66d2f0c1c2a4e5f6a7b8c9d1", + "is_open": { + "type": "boolean" + }, + "open_time": { + "example": "07:00:00", "type": "string" + } + }, + "type": "object" + }, + "target.StoresResponse": { + "properties": { + "count": { + "example": 20, + "type": "integer" }, - "monitor_id": { - "example": "66d2f0b1c2a4e5f6a7b8c9d0", + "fetched_at": { "type": "string" }, - "removed_urls": { - "items": { - "type": "string" - }, - "type": "array" + "place": { + "example": "95014", + "type": "string" }, - "skipped": { - "example": false, - "type": "boolean" + "source_url": { + "type": "string" }, - "webhook_deliveries": { + "stores": { "items": { - "$ref": "#/definitions/webmonitor.webhookDeliveryDoc" + "$ref": "#/definitions/target.Store" }, "type": "array" } }, "type": "object" }, - "webmonitor.checkListResponseDoc": { + "target.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "items": { - "$ref": "#/definitions/webmonitor.checkDoc" - }, - "type": "array" + "$ref": "#/definitions/target.CategoriesResponse" }, "msg": { "example": "OK", @@ -255764,55 +261264,30 @@ }, "type": "object" }, - "webmonitor.createMonitorBodyDoc": { + "target.categoryProductsResponseDoc": { "properties": { - "cadence_minutes": { - "example": 60, + "code": { + "example": 200, "type": "integer" }, - "enabled": { - "example": true, - "type": "boolean" - }, - "name": { - "example": "Pricing page", - "type": "string" - }, - "notification": { - "$ref": "#/definitions/webmonitor.notificationBodyDoc" - }, - "sitemap": { - "$ref": "#/definitions/webmonitor.sitemapTargetBodyDoc" - }, - "target_type": { - "enum": [ - "page", - "sitemap" - ], - "example": "page", - "type": "string" + "data": { + "$ref": "#/definitions/target.CategoryProductsResponse" }, - "url": { - "example": "https://example.com/pricing", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "webmonitor.monitorDeleteResponseDoc": { + "target.filterOptionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "properties": { - "deleted": { - "example": true, - "type": "boolean" - } - }, - "type": "object" + "$ref": "#/definitions/target.FilterOptionsResponse" }, "msg": { "example": "OK", @@ -255821,83 +261296,58 @@ }, "type": "object" }, - "webmonitor.monitorDoc": { + "target.productResponseDoc": { "properties": { - "cadence_minutes": { - "example": 60, - "type": "integer" - }, - "created_at": { - "example": "2026-08-01T00:00:00Z", - "type": "string" - }, - "enabled": { - "example": true, - "type": "boolean" - }, - "failures": { - "example": 0, + "code": { + "example": 200, "type": "integer" }, - "id": { - "example": "66d2f0b1c2a4e5f6a7b8c9d0", - "type": "string" - }, - "last_changed_at": { - "example": "2026-08-20T09:00:00Z", - "type": "string" - }, - "last_checked_at": { - "example": "2026-08-22T10:00:00Z", - "type": "string" - }, - "last_error": { - "type": "string" - }, - "name": { - "example": "Pricing page", - "type": "string" + "data": { + "$ref": "#/definitions/target.ProductResponse" }, - "next_check_at": { - "example": "2026-08-22T11:00:00Z", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "target.questionsResponseDoc": { + "properties": { + "code": { + "type": "integer" }, - "notification": { - "$ref": "#/definitions/webmonitor.notificationDoc" - }, - "sitemap": { - "$ref": "#/definitions/webmonitor.sitemapTargetDoc" + "data": { + "$ref": "#/definitions/target.QuestionsResponse" }, - "target_type": { - "enum": [ - "page", - "sitemap" - ], - "example": "page", + "msg": { "type": "string" + } + }, + "type": "object" + }, + "target.reviewsResponseDoc": { + "properties": { + "code": { + "type": "integer" }, - "updated_at": { - "example": "2026-08-22T10:00:00Z", - "type": "string" + "data": { + "$ref": "#/definitions/target.ReviewsResponse" }, - "url": { - "example": "https://example.com/pricing", + "msg": { "type": "string" } }, "type": "object" }, - "webmonitor.monitorListResponseDoc": { + "target.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "items": { - "$ref": "#/definitions/webmonitor.monitorDoc" - }, - "type": "array" + "$ref": "#/definitions/target.SearchResponse" }, "msg": { "example": "OK", @@ -255906,14 +261356,14 @@ }, "type": "object" }, - "webmonitor.monitorResponseDoc": { + "target.storesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/webmonitor.monitorDoc" + "$ref": "#/definitions/target.StoresResponse" }, "msg": { "example": "OK", @@ -255922,1284 +261372,846 @@ }, "type": "object" }, - "webmonitor.notificationBodyDoc": { + "tcgplayer.Facet": { "properties": { - "events": { - "example": [ - "change.detected", - "run.completed" - ], - "items": { - "type": "string" - }, - "type": "array" + "count": { + "type": "integer" }, - "webhook_secret": { - "example": "whsec_...", + "url_value": { "type": "string" }, - "webhook_url": { - "example": "https://example.com/webhooks/crawlora", + "value": { "type": "string" } }, "type": "object" }, - "webmonitor.notificationDoc": { + "tcgplayer.Facets": { "properties": { - "events": { - "example": [ - "change.detected", - "run.completed" - ], + "card_types": { "items": { - "type": "string" + "$ref": "#/definitions/tcgplayer.Facet" }, "type": "array" }, - "webhook_url": { - "example": "https://example.com/webhooks/crawlora", - "type": "string" - } - }, - "type": "object" - }, - "webmonitor.sitemapTargetBodyDoc": { - "properties": { - "exclude_patterns": { - "example": [ - "/blog/*" - ], + "energy_types": { "items": { - "type": "string" + "$ref": "#/definitions/tcgplayer.Facet" }, "type": "array" }, - "include_patterns": { - "example": [ - "/products/*" - ], + "product_lines": { "items": { - "type": "string" + "$ref": "#/definitions/tcgplayer.Facet" }, "type": "array" }, - "max_urls": { - "example": 5000, - "type": "integer" - } - }, - "type": "object" - }, - "webmonitor.sitemapTargetDoc": { - "properties": { - "exclude_patterns": { - "example": [ - "/blog/*" - ], + "product_types": { "items": { - "type": "string" + "$ref": "#/definitions/tcgplayer.Facet" }, "type": "array" }, - "include_patterns": { - "example": [ - "/products/*" - ], + "rarities": { "items": { - "type": "string" + "$ref": "#/definitions/tcgplayer.Facet" }, "type": "array" }, - "max_urls": { - "example": 5000, - "type": "integer" + "sets": { + "items": { + "$ref": "#/definitions/tcgplayer.Facet" + }, + "type": "array" } }, "type": "object" }, - "webmonitor.updateMonitorBodyDoc": { + "tcgplayer.FilterValue": { "properties": { - "cadence_minutes": { - "example": 60, - "type": "integer" - }, - "enabled": { - "example": true, - "type": "boolean" - }, - "name": { - "example": "Pricing page", + "abbreviation": { "type": "string" }, - "notification": { - "$ref": "#/definitions/webmonitor.notificationBodyDoc" - }, - "sitemap": { - "$ref": "#/definitions/webmonitor.sitemapTargetBodyDoc" + "id": { + "type": "integer" }, - "target_type": { - "enum": [ - "page", - "sitemap" - ], - "example": "page", + "name": { "type": "string" } }, "type": "object" }, - "webmonitor.webhookDeliveryDoc": { + "tcgplayer.FiltersResponse": { "properties": { - "attempts": { - "example": 1, - "type": "integer" + "conditions": { + "items": { + "$ref": "#/definitions/tcgplayer.FilterValue" + }, + "type": "array" }, - "delivered_at": { - "example": "2026-08-22T10:00:02Z", - "type": "string" + "languages": { + "items": { + "$ref": "#/definitions/tcgplayer.FilterValue" + }, + "type": "array" }, - "error": { - "type": "string" + "listing_types": { + "items": { + "type": "string" + }, + "type": "array" }, - "event": { - "enum": [ - "change.detected", - "run.completed" - ], - "example": "change.detected", - "type": "string" + "product_id": { + "type": "integer" }, - "status": { - "enum": [ - "delivered", - "rejected", - "failed", - "skipped_unsafe_url" - ], - "example": "delivered", + "product_line": { "type": "string" }, - "status_code": { - "example": 200, + "product_line_id": { "type": "integer" + }, + "variants": { + "items": { + "$ref": "#/definitions/tcgplayer.FilterValue" + }, + "type": "array" } }, "type": "object" }, - "webretrieval.DiscoveredURL": { + "tcgplayer.Listing": { "properties": { - "discovered_via": { - "type": "string" - }, - "last_modified": { - "type": "string" - }, - "observed_at": { - "type": "string" - }, - "parent_url": { - "type": "string" - }, - "title": { + "condition": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "webretrieval.WebSearchHit": { - "properties": { - "document": { - "$ref": "#/definitions/retrievaltypes.Document" + "direct_seller": { + "type": "boolean" }, - "fetch_failure": { - "$ref": "#/definitions/retrievaltypes.Failure" + "gold_seller": { + "type": "boolean" }, - "provider": { + "language": { "type": "string" }, - "rank": { + "listing_id": { "type": "integer" }, - "retrieved_at": { - "type": "string" - }, - "snippet": { + "listing_type": { "type": "string" }, - "title": { - "type": "string" + "price": { + "type": "number" }, - "url": { + "printing": { "type": "string" - } - }, - "type": "object" - }, - "wendys.CategoriesResponse": { - "properties": { - "categories": { - "items": { - "$ref": "#/definitions/wendys.Category" - }, - "type": "array" }, - "count": { - "example": 25, + "quantity": { "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "source_url": { + "seller_city": { "type": "string" - } - }, - "type": "object" - }, - "wendys.Category": { - "properties": { - "dayparts": { - "description": "Dayparts lists which of Wendy's own top-level menu groupings\n(\"Lunch/Dinner\", \"Breakfast\") this category appears under. A few\ncategories (Coffee, Beverages, Give Something Back, Bakery) appear\nunder both.", - "items": { - "type": "string" - }, - "type": "array" }, - "id": { - "example": "100", + "seller_country": { "type": "string" }, - "image_url": { + "seller_name": { "type": "string" }, - "name": { - "example": "Hamburgers", - "type": "string" + "seller_rating": { + "type": "number" }, - "slug": { - "example": "hamburgers", + "seller_sales": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "wendys.ComboNutritionSelection": { - "properties": { - "name": { - "example": "Dave's Single®", + "seller_state": { "type": "string" }, - "slot_type": { - "example": "ENTREE", - "type": "string" - } - }, - "type": "object" - }, - "wendys.ComboOption": { - "properties": { - "base_price": { - "example": 5.59, + "shipping_price": { "type": "number" }, - "calories": { - "example": "560 Cal", - "type": "string" - }, - "is_default": { + "verified_seller": { "type": "boolean" - }, - "name": { - "example": "Dave's Single®", - "type": "string" - }, - "product_id": { - "example": "10000000000081", - "type": "string" } }, "type": "object" }, - "wendys.ComboSlot": { + "tcgplayer.ListingFacets": { "properties": { - "name": { - "example": "Dave's Hamburger Combo", - "type": "string" - }, - "options": { + "conditions": { "items": { - "$ref": "#/definitions/wendys.ComboOption" + "$ref": "#/definitions/tcgplayer.Facet" }, "type": "array" }, - "slot_type": { - "example": "ENTREE", - "type": "string" - } - }, - "type": "object" - }, - "wendys.Component": { - "properties": { - "allergens": { - "example": [ - "Wheat", - "Milk" - ], + "languages": { "items": { - "type": "string" + "$ref": "#/definitions/tcgplayer.Facet" }, "type": "array" }, - "description": { - "type": "string" - }, - "group": { - "description": "Group is \"default\" (comes with the item), \"extra\" (a paid add-on), or\n\"required\" (the caller must choose one option from a named group,\ne.g. a salad's dressing).", - "example": "default", - "type": "string" - }, - "is_default_option": { - "type": "boolean" - }, - "name": { - "example": "Grilled Chicken", - "type": "string" - }, - "price": { - "example": 0.5, - "type": "number" - }, - "required_group_name": { - "description": "RequiredGroupName and IsDefaultOption are only set for Group ==\n\"required\" -- e.g. RequiredGroupName \"Dressing\", with\nIsDefaultOption true on whichever dressing Wendy's page pre-selects.", - "example": "Dressing", - "type": "string" + "printings": { + "items": { + "$ref": "#/definitions/tcgplayer.Facet" + }, + "type": "array" } }, "type": "object" }, - "wendys.DirectoryChild": { + "tcgplayer.ListingsResponse": { "properties": { - "is_store": { - "description": "IsStore marks a child that is a store page rather than another\ndirectory level -- call /wendys/store with its path.", - "example": false, - "type": "boolean" - }, - "name": { - "example": "Ohio", - "type": "string" - }, - "path": { - "example": "united-states/oh", - "type": "string" + "facets": { + "$ref": "#/definitions/tcgplayer.ListingFacets" }, - "store_count": { - "description": "StoreCount is how many stores sit under this branch. Present at the\ncountry/state/city levels; absent once children are stores\nthemselves.", - "example": 388, + "limit": { "type": "integer" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "wendys.DirectoryResponse": { - "properties": { - "children": { + "listings": { "items": { - "$ref": "#/definitions/wendys.DirectoryChild" + "$ref": "#/definitions/tcgplayer.Listing" }, "type": "array" }, - "count": { - "example": 88, + "next_offset": { "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "name": { - "type": "string" + "offset": { + "type": "integer" }, - "path": { - "example": "united-states/oh", - "type": "string" + "product_id": { + "type": "integer" }, - "source_url": { - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "wendys.ItemResponse": { + "tcgplayer.PriceBucket": { "properties": { - "allergens": { - "description": "Allergens is the union of allergens across the item's default\ncomponents and each required group's default-selected option --\ni.e. the item's allergen profile as configured on Wendy's own page\nbefore any customization. Customizing (removing a default component,\npicking a different required option) changes this in ways this\nsummary field cannot capture; Components lists every option's own\nallergens individually for that.", - "items": { - "type": "string" - }, - "type": "array" - }, - "base_price": { - "example": 7.99, + "high_sale_price": { "type": "number" }, - "calories": { - "example": "520 Cal", - "type": "string" + "high_sale_price_with_shipping": { + "type": "number" }, - "category": { - "example": "hamburgers", - "type": "string" + "low_sale_price": { + "type": "number" }, - "combo_slots": { - "description": "ComboSlots is set only when IsCombo is true.", - "items": { - "$ref": "#/definitions/wendys.ComboSlot" - }, - "type": "array" + "low_sale_price_with_shipping": { + "type": "number" }, - "components": { - "items": { - "$ref": "#/definitions/wendys.Component" - }, - "type": "array" + "market_price": { + "type": "number" }, - "description": { - "description": "Description, BasePrice, Calories, Components and Variants are set\nonly when IsCombo is false.", - "type": "string" + "quantity_sold": { + "type": "integer" }, - "fetched_at": { + "start_date": { "type": "string" }, - "image_url": { + "transaction_count": { + "type": "integer" + } + }, + "type": "object" + }, + "tcgplayer.PriceGuideResponse": { + "properties": { + "game": { "type": "string" }, - "is_combo": { - "type": "boolean" - }, - "item": { - "example": "daves-combo", - "type": "string" + "limit": { + "type": "integer" }, - "name": { - "example": "Dave's Combo", - "type": "string" + "next_offset": { + "type": "integer" }, - "source_url": { - "type": "string" + "offset": { + "type": "integer" }, - "variants": { + "rows": { "items": { - "$ref": "#/definitions/wendys.ItemVariant" + "$ref": "#/definitions/tcgplayer.PriceGuideRow" }, "type": "array" - } - }, - "type": "object" - }, - "wendys.ItemVariant": { - "properties": { - "base_price": { - "example": 2.79, - "type": "number" - }, - "calories": { - "example": "260 Cal", - "type": "string" }, - "description": { + "set_abbreviation": { "type": "string" }, - "is_default": { - "description": "IsDefault marks the variant Wendy's own page selects by default.", - "type": "boolean" - }, - "item_id": { - "example": "40054", - "type": "string" + "set_id": { + "type": "integer" }, - "name": { - "example": "Small Natural-Cut Fries", + "set_name": { "type": "string" }, - "short_name": { - "example": "Small", - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "wendys.MenuItemSummary": { + "tcgplayer.PriceGuideRow": { "properties": { - "calories": { - "example": "760 Cal", + "condition": { "type": "string" }, - "has_required_modifiers": { - "type": "boolean" - }, - "image_url": { + "language": { "type": "string" }, - "is_combo": { - "description": "IsCombo marks an item whose /wendys/item response returns\ncombo_slots instead of components/variants.", - "type": "boolean" - }, - "is_limited_time_offer": { - "type": "boolean" + "low_price": { + "type": "number" }, - "item_id": { - "example": "31009", - "type": "string" + "market_price": { + "type": "number" }, "name": { - "example": "Dave's Combo", - "type": "string" - }, - "price": { - "description": "Price is Wendy's own displayed price string. It is a string, not a\nnumber, because a size-variant item (e.g. fries) displays a \"from\"\nprice for its default variant here -- GET /wendys/item returns the\nexact per-variant numeric price.", - "example": "$7.29", "type": "string" }, - "slug": { - "example": "daves-combo", + "number": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "wendys.MenuResponse": { - "properties": { - "category": { - "example": "hamburgers", + "printing": { "type": "string" }, - "count": { - "example": 12, + "product_id": { "type": "integer" }, - "fetched_at": { + "rarity": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/wendys.MenuItemSummary" - }, - "type": "array" - }, - "source_url": { - "type": "string" + "sales": { + "type": "integer" } }, "type": "object" }, - "wendys.NearbyResponse": { + "tcgplayer.PriceHistoryResponse": { "properties": { - "count": { - "example": 25, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "radius": { - "example": 20, + "product_id": { "type": "integer" }, - "source_url": { + "range": { "type": "string" }, - "stores": { + "skus": { "items": { - "$ref": "#/definitions/wendys.NearbyStore" + "$ref": "#/definitions/tcgplayer.SKUHistory" }, "type": "array" } }, "type": "object" }, - "wendys.NearbyStore": { + "tcgplayer.PricePoint": { "properties": { - "address": { - "$ref": "#/definitions/wendys.StoreAddress" - }, - "breakfast_hours": { - "items": { - "$ref": "#/definitions/wendys.StoreHours" - }, - "type": "array" - }, - "distance_miles": { - "example": 1.30845, + "buylist_market_price": { "type": "number" }, - "has_breakfast": { - "type": "boolean" - }, - "has_carry_out": { - "type": "boolean" - }, - "has_delivery": { - "type": "boolean" - }, - "has_drive_thru": { - "type": "boolean" - }, - "has_mobile_order": { - "type": "boolean" - }, - "has_wifi": { - "type": "boolean" - }, - "hours": { - "description": "Hours is the published week of general dining hours, and\nBreakfastHours the published week of breakfast service hours (often\nnarrower and always starting no later than dining) -- the same dual-\nhours shape /wendys/store publishes, from this API's own per-day\nschedule rather than a second upstream call.", - "items": { - "$ref": "#/definitions/wendys.StoreHours" - }, - "type": "array" - }, - "is_open": { - "type": "boolean" - }, - "latitude": { - "example": 38.897527, + "listed_median_price": { "type": "number" }, - "longitude": { - "example": -77.006362, + "market_price": { "type": "number" }, - "name": { - "example": "WASHINGTON UNION STATION", - "type": "string" - }, - "phone_number": { - "example": "2028380978", - "type": "string" - }, - "store_id": { - "example": "12921", - "type": "string" - }, - "timezone": { - "example": "US/Eastern", + "printing": { "type": "string" } }, "type": "object" }, - "wendys.NutritionFacts": { + "tcgplayer.Product": { "properties": { - "calcium_mg": { - "example": 15, - "type": "number" - }, - "calories": { - "example": 560, - "type": "number" + "attributes": { + "additionalProperties": { + "type": "string" + }, + "type": "object" }, - "calories_from_fat": { - "example": 300, - "type": "number" + "description": { + "type": "string" }, - "cholesterol_mg": { - "example": 90, - "type": "number" + "foil_only": { + "type": "boolean" }, - "dietary_fiber_g": { - "example": 2, - "type": "number" + "image_url": { + "type": "string" }, - "iron_mg": { - "example": 25, + "lowest_price": { "type": "number" }, - "monounsaturated_fat_g": { + "lowest_price_with_shipping": { "type": "number" }, - "polyunsaturated_fat_g": { + "market_price": { "type": "number" }, - "potassium_mg": { - "example": 10, + "median_price": { "type": "number" }, - "protein_g": { - "example": 31, - "type": "number" + "name": { + "type": "string" }, - "saturated_fat_g": { - "example": 14, - "type": "number" + "normal_only": { + "type": "boolean" }, - "serving_weight_grams": { - "description": "ServingWeightGrams is omitted (not published) when Wendy's own service\nleaves it out, which it does for some single-component items.", - "example": 245.43, - "type": "number" + "number": { + "type": "string" }, - "sodium_mg": { - "example": 1170, - "type": "number" + "price_points": { + "items": { + "$ref": "#/definitions/tcgplayer.PricePoint" + }, + "type": "array" }, - "sugars_g": { - "example": 9, - "type": "number" + "product_id": { + "type": "integer" }, - "total_carbohydrate_g": { - "example": 37, - "type": "number" + "product_line": { + "type": "string" }, - "total_fat_g": { - "example": 34, - "type": "number" + "product_line_url_name": { + "type": "string" }, - "trans_fat_g": { - "example": 1.5, - "type": "number" + "product_type": { + "type": "string" }, - "vitamin_a": { - "type": "number" + "rarity": { + "type": "string" }, - "vitamin_c": { - "type": "number" + "sealed": { + "type": "boolean" }, - "vitamin_d_mcg": { - "type": "number" - } - }, - "type": "object" - }, - "wendys.NutritionResponse": { - "properties": { - "allergens": { - "description": "Allergens is Wendy's own declared allergen flags for this exact\ndefault configuration -- the same union Wendy's \"Allergens\" panel\nshows next to the nutrition table.", - "example": [ - "Egg", - "Milk", - "Sesame", - "Soy", - "Wheat" - ], - "items": { - "type": "string" - }, - "type": "array" + "set_code": { + "type": "string" }, - "category": { - "example": "hamburgers", + "set_name": { "type": "string" }, - "combo_selections": { + "skus": { "items": { - "$ref": "#/definitions/wendys.ComboNutritionSelection" + "$ref": "#/definitions/tcgplayer.SKU" }, "type": "array" }, - "disclaimers": { - "description": "Disclaimers is any upstream-published caveat text for this item\n(usually empty). Passed through verbatim.", - "items": { - "type": "string" - }, - "type": "array" + "total_listings": { + "type": "integer" }, - "fetched_at": { - "type": "string" + "total_sellers": { + "type": "integer" }, - "is_combo": { - "description": "IsCombo marks a combo response. Nutrition/Allergens/Disclaimers then\ncover the *combined* total across every slot's selected option\n(ComboSelections), computed in one nutritionalData request the same\nway a caller building a full order would sum it themselves -- not a\nseparate per-slot breakdown.", + "url": { + "type": "string" + } + }, + "type": "object" + }, + "tcgplayer.ProductLine": { + "properties": { + "direct": { "type": "boolean" }, - "item": { - "example": "daves-single", - "type": "string" + "id": { + "type": "integer" }, "name": { - "example": "Dave's Single", "type": "string" }, - "nutrition": { - "$ref": "#/definitions/wendys.NutritionFacts" - }, - "source_url": { + "url_name": { "type": "string" } }, "type": "object" }, - "wendys.RestaurantResponse": { + "tcgplayer.ProductLinesResponse": { "properties": { - "active_day_part": { - "description": "ActiveDayPart is which of the restaurant's own dayparts (breakfast,\nlunch/dinner, ...) is currently serving.", - "example": "BREAKFAST", - "type": "string" - }, - "address": { - "$ref": "#/definitions/wendys.StoreAddress" - }, - "breakfast_hours": { + "product_lines": { "items": { - "$ref": "#/definitions/wendys.StoreHours" + "$ref": "#/definitions/tcgplayer.ProductLine" }, "type": "array" - }, - "currency": { - "example": "USD", - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "has_breakfast": { - "type": "boolean" - }, - "has_coke_freestyle": { - "type": "boolean" - }, - "has_digital_coupon": { - "type": "boolean" - }, - "has_gift_card": { - "type": "boolean" - }, - "has_loyalty": { - "type": "boolean" - }, - "has_mobile_order": { - "type": "boolean" - }, - "has_mobile_pay": { - "type": "boolean" - }, - "has_wifi": { - "type": "boolean" - }, - "hours": { - "description": "Hours is the published week of general dining hours, and\nBreakfastHours the published week of breakfast service hours -- the\nsame StoreHours shape /wendys/store and /wendys/nearby publish.", + } + }, + "type": "object" + }, + "tcgplayer.ProductResponse": { + "properties": { + "product": { + "$ref": "#/definitions/tcgplayer.Product" + } + }, + "type": "object" + }, + "tcgplayer.ProductSummary": { + "properties": { + "card_types": { "items": { - "$ref": "#/definitions/wendys.StoreHours" + "type": "string" }, "type": "array" }, - "is_open": { + "foil_only": { "type": "boolean" }, - "is_open_24_hours": { - "type": "boolean" + "image_url": { + "type": "string" }, - "is_open_late": { - "type": "boolean" + "lowest_price": { + "type": "number" }, - "latitude": { - "example": 38.897527, + "lowest_price_with_shipping": { "type": "number" }, - "longitude": { - "example": -77.006362, + "market_price": { + "type": "number" + }, + "median_price": { "type": "number" }, "name": { - "example": "WASHINGTON UNION STATION", "type": "string" }, - "phone_number": { - "example": "2028380978", + "number": { "type": "string" }, - "source_url": { + "product_id": { + "type": "integer" + }, + "product_line": { "type": "string" }, - "store_id": { - "example": "12921", + "rarity": { "type": "string" }, - "supports_carry_out": { - "description": "SupportsCarryOut/SupportsDineIn/SupportsDriveThru are whether this\nrestaurant physically offers each fulfillment mode at all -- distinct\nfrom /wendys/nearby's has_drive_thru, which reflects only whether\nthat mode is open right now.", + "sealed": { "type": "boolean" }, - "supports_dine_in": { - "type": "boolean" + "set_code": { + "type": "string" }, - "supports_drive_thru": { - "type": "boolean" + "set_name": { + "type": "string" }, - "timezone": { - "example": "US/Eastern", + "total_listings": { + "type": "integer" + }, + "url": { "type": "string" } }, "type": "object" }, - "wendys.StoreAddress": { + "tcgplayer.SKU": { "properties": { - "city": { - "example": "Alliance", - "type": "string" - }, - "country": { - "example": "US", + "condition": { "type": "string" }, - "line1": { - "example": "1833 W. State St.", + "language": { "type": "string" }, - "postal_code": { - "example": "44601-3538", - "type": "string" + "sku": { + "type": "integer" }, - "region": { - "example": "OH", + "variant": { "type": "string" } }, "type": "object" }, - "wendys.StoreHours": { + "tcgplayer.SKUHistory": { "properties": { - "closed": { - "description": "Closed is true when Wendy's publishes the day with no open interval.", - "example": false, - "type": "boolean" + "average_daily_quantity_sold": { + "type": "number" }, - "closes": { - "example": "22:00", + "average_daily_transaction_count": { + "type": "number" + }, + "buckets": { + "items": { + "$ref": "#/definitions/tcgplayer.PriceBucket" + }, + "type": "array" + }, + "condition": { "type": "string" }, - "day_of_week": { - "example": "Monday", + "language": { "type": "string" }, - "opens": { - "example": "06:30", + "sku": { + "type": "integer" + }, + "total_quantity_sold": { + "type": "integer" + }, + "total_transaction_count": { + "type": "integer" + }, + "variant": { "type": "string" } }, "type": "object" }, - "wendys.StoreMenuItem": { + "tcgplayer.Sale": { "properties": { - "calories": { - "example": "560 Cal", + "condition": { "type": "string" }, - "day_part": { - "description": "DayPart is when this item is on the menu (e.g. \"BREAKFAST\",\n\"LUNCH\") -- an item can appear more than once, once per day-part it\nserves in, each as its own entry.", - "example": "LUNCH", + "language": { "type": "string" }, - "description": { - "description": "Description is omitted for combo/bundle entries, which the upstream\ndoes not publish one for (see /wendys/item's combo_slots for a\ncombo's own constituent-item descriptions instead).", + "listing_type": { "type": "string" }, - "menu_item_id": { - "example": 30013, + "order_date": { + "type": "string" + }, + "purchase_price": { + "type": "number" + }, + "quantity": { "type": "integer" }, - "name": { - "example": "Spicy Chicken Sandwich", - "type": "string" + "shipping_price": { + "type": "number" }, - "price": { - "description": "Price is this store's own displayed price string -- for a combo/\nbundle entry, this is the real bundle price, which /wendys/item does\nnot compute at all (a combo's own price varies by what's chosen in\neach slot; see item.go).", - "example": "$7.85", + "variant": { "type": "string" } }, "type": "object" }, - "wendys.StoreMenuResponse": { + "tcgplayer.SalesResponse": { "properties": { - "count": { - "example": 170, + "product_id": { "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "items": { + "sales": { "items": { - "$ref": "#/definitions/wendys.StoreMenuItem" + "$ref": "#/definitions/tcgplayer.Sale" }, "type": "array" - }, - "source_url": { - "type": "string" - }, - "store_id": { - "example": "12921", - "type": "string" } }, "type": "object" }, - "wendys.StoreResponse": { + "tcgplayer.SearchResponse": { "properties": { - "address": { - "$ref": "#/definitions/wendys.StoreAddress" + "facets": { + "$ref": "#/definitions/tcgplayer.Facets" }, - "delivery_platforms": { - "description": "DeliveryPlatforms lists the third-party platforms this store's page\nlinks out to.", - "items": { - "type": "string" - }, - "type": "array" + "limit": { + "type": "integer" }, - "drive_thru_hours": { - "description": "DriveThruHours is the published week of drive-thru hours, which\nWendy's often publishes separately from (and later-closing than)\ngeneral restaurant hours.", - "items": { - "$ref": "#/definitions/wendys.StoreHours" - }, - "type": "array" + "next_offset": { + "type": "integer" }, - "fetched_at": { - "type": "string" + "offset": { + "type": "integer" }, - "hours": { - "description": "Hours is the published week of general restaurant hours.", + "products": { "items": { - "$ref": "#/definitions/wendys.StoreHours" + "$ref": "#/definitions/tcgplayer.ProductSummary" }, "type": "array" }, - "latitude": { - "example": 40.90233810995588, - "type": "number" - }, - "longitude": { - "example": -81.1329160630703, - "type": "number" - }, - "name": { - "example": "Wendy's 1833 W. STATE ST in Alliance, OH", - "type": "string" - }, - "order_url": { - "type": "string" - }, - "path": { - "type": "string" - }, - "phone_number": { - "example": "(330) 821-4338", - "type": "string" - }, - "source_url": { + "query": { "type": "string" }, - "store_id": { - "example": "11456", - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "wendys.TimeSlotsResponse": { + "tcgplayer.Set": { "properties": { - "asap_available": { - "description": "ASAPAvailable is whether an immediate (\"as soon as possible\") pickup\nslot is currently offered, as opposed to only scheduled future slots.", - "type": "boolean" - }, - "available_times": { - "description": "AvailableTimes is every schedulable slot, as Wendy's own service\npublishes them (no explicit UTC offset in the upstream payload).", - "items": { - "type": "string" - }, - "type": "array" + "abbreviation": { + "type": "string" }, - "count": { - "example": 61, + "id": { "type": "integer" }, - "fetched_at": { + "name": { "type": "string" }, - "source_url": { + "release_date": { "type": "string" }, - "store_id": { - "example": "12921", + "supplemental": { + "type": "boolean" + }, + "url_name": { "type": "string" } }, "type": "object" }, - "wendys.categoriesResponseDoc": { + "tcgplayer.SetsResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" - }, - "data": { - "$ref": "#/definitions/wendys.CategoriesResponse" + "product_line": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "sets": { + "items": { + "$ref": "#/definitions/tcgplayer.Set" + }, + "type": "array" } }, "type": "object" }, - "wendys.directoryResponseDoc": { + "tcgplayer.filtersResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wendys.DirectoryResponse" + "$ref": "#/definitions/tcgplayer.FiltersResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "wendys.itemResponseDoc": { + "tcgplayer.listingsResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wendys.ItemResponse" + "$ref": "#/definitions/tcgplayer.ListingsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "wendys.menuResponseDoc": { + "tcgplayer.priceGuideResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wendys.MenuResponse" + "$ref": "#/definitions/tcgplayer.PriceGuideResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "wendys.nearbyResponseDoc": { + "tcgplayer.priceHistoryResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wendys.NearbyResponse" + "$ref": "#/definitions/tcgplayer.PriceHistoryResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "wendys.nutritionResponseDoc": { + "tcgplayer.productLinesResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wendys.NutritionResponse" + "$ref": "#/definitions/tcgplayer.ProductLinesResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "wendys.restaurantResponseDoc": { + "tcgplayer.productResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wendys.RestaurantResponse" + "$ref": "#/definitions/tcgplayer.ProductResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "wendys.storeMenuResponseDoc": { + "tcgplayer.salesResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wendys.StoreMenuResponse" + "$ref": "#/definitions/tcgplayer.SalesResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "wendys.storeResponseDoc": { + "tcgplayer.searchResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wendys.StoreResponse" + "$ref": "#/definitions/tcgplayer.SearchResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "wendys.timeSlotsResponseDoc": { + "tcgplayer.setsResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wendys.TimeSlotsResponse" + "$ref": "#/definitions/tcgplayer.SetsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "whataburger.SitemapEntry": { + "techcrunch.AuthorArticle": { "properties": { - "kind": { - "description": "Kind classifies the page: \"store\" is the canonical restaurant page,\n\"curbside\"/\"delivery\" are separate Yext entities for the same\nrestaurant's curbside or delivery service, and \"directory\" is a\nstate- or city-level listing page with no address of its own.", - "example": "store", - "type": "string" - }, - "path": { - "description": "Path is the locator path, the value /whataburger/store takes.", - "example": "tx/abilene/1625-tx-hwy-351.html", + "category": { "type": "string" }, - "store_number": { - "description": "StoreNumber is only derivable from the short-permalink Curbside/\nDelivery variants (e.g. \"1197C.html\"); it is empty for every other\nkind, since Whataburger's canonical and long-form variant paths use a\nstreet-name slug instead of a numeric id.", - "example": "1197", + "title": { "type": "string" }, "url": { @@ -257208,368 +262220,294 @@ }, "type": "object" }, - "whataburger.SitemapResponse": { + "techcrunch.AuthorResponse": { "properties": { - "count": { - "example": 100, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/techcrunch.AuthorArticle" + }, + "type": "array" }, - "entries": { + "biography": { "items": { - "$ref": "#/definitions/whataburger.SitemapEntry" + "type": "string" }, "type": "array" }, - "fetched_at": { + "headshot_url": { "type": "string" }, - "page": { - "example": 1, - "type": "integer" + "job_title": { + "type": "string" }, - "source_url": { + "name": { "type": "string" }, - "total": { - "example": 3955, + "page": { "type": "integer" }, - "total_pages": { - "example": 40, - "type": "integer" + "social_links": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "url": { + "type": "string" } }, "type": "object" }, - "whataburger.StoreAddress": { + "techradar.AuthorResponse": { "properties": { - "city": { - "example": "ABILENE", - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "country": { - "example": "US", - "type": "string" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "line1": { - "example": "1625 TX HWY 351", + "has_next_page": { + "type": "boolean" + }, + "job_title": { "type": "string" }, - "line2": { + "name": { "type": "string" }, - "postal_code": { - "example": "79601", + "page": { + "type": "integer" + }, + "slug": { "type": "string" }, - "region": { - "example": "TX", + "social_links": { + "items": { + "$ref": "#/definitions/techradar.AuthorSocialLink" + }, + "type": "array" + }, + "url": { "type": "string" } }, "type": "object" }, - "whataburger.StoreHours": { + "techradar.AuthorSocialLink": { "properties": { - "closed": { - "description": "Closed is true when Whataburger publishes the day with no open interval.", - "example": false, - "type": "boolean" - }, - "closes": { - "example": "23:59", - "type": "string" - }, - "day_of_week": { - "example": "Monday", + "platform": { "type": "string" }, - "opens": { - "example": "00:00", + "url": { "type": "string" } }, "type": "object" }, - "whataburger.StoreResponse": { + "techstack.Technology": { "properties": { - "address": { - "$ref": "#/definitions/whataburger.StoreAddress" - }, - "fetched_at": { - "type": "string" - }, - "google_place_id": { - "type": "string" - }, - "hours": { + "categories": { "items": { - "$ref": "#/definitions/whataburger.StoreHours" + "type": "string" }, "type": "array" }, - "latitude": { - "example": 32.481983, - "type": "number" - }, - "longitude": { - "example": -99.744767, - "type": "number" - }, - "name": { - "example": "Whataburger", - "type": "string" - }, - "path": { - "description": "Path is the canonical /whataburger/store path for this restaurant, as\nWhataburger's own entity data publishes it -- present even when the\nrequested path was a Curbside or Delivery variant of the same store.", - "type": "string" - }, - "phone_number": { - "example": "(325) 692-8480", + "confidence": { + "description": "high | medium | low", "type": "string" }, - "service_hours": { - "allOf": [ - { - "$ref": "#/definitions/whataburger.StoreServiceHours" - } - ], - "description": "ServiceHours breaks the same week down per fulfillment channel --\ndine-in, drive-thru, curbside and delivery windows can and do differ\nfrom each other and from Hours (dine-in) at the same store. Whataburger\nalways publishes drive-thru and dine-in hours; curbside and delivery\nare omitted here when the entity carries no schedule for them (a store\nthat does not list that service in Services)." - }, - "services": { - "description": "Services are the restaurant services Whataburger publishes for this\nlocation, e.g. \"Curbside\", \"Delivery\".", - "items": { - "type": "string" - }, - "type": "array" - }, - "source_url": { + "evidence": { + "description": "Evidence is a short, human-readable hint of what matched (e.g. a script\nhost or a value) — not the full markup.", "type": "string" }, - "store_id": { - "example": "1403", + "name": { "type": "string" }, - "timezone": { - "example": "America/Chicago", + "version": { "type": "string" } }, "type": "object" }, - "whataburger.StoreServiceHours": { + "techstack.UnmatchedEvidence": { "properties": { - "curbside": { - "items": { - "$ref": "#/definitions/whataburger.StoreHours" - }, - "type": "array" - }, - "delivery": { - "items": { - "$ref": "#/definitions/whataburger.StoreHours" - }, - "type": "array" - }, - "dine_in": { + "domains": { "items": { - "$ref": "#/definitions/whataburger.StoreHours" + "type": "string" }, "type": "array" }, - "drive_thru": { - "items": { - "$ref": "#/definitions/whataburger.StoreHours" - }, - "type": "array" + "generator": { + "type": "string" } }, "type": "object" }, - "whataburger.sitemapResponseDoc": { + "telegram.BotResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "avatar_url": { + "type": "string" }, - "data": { - "$ref": "#/definitions/whataburger.SitemapResponse" + "description": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "whataburger.storeResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "monthly_users": { "type": "integer" }, - "data": { - "$ref": "#/definitions/whataburger.StoreResponse" + "name": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "whatnot.BrowseResponse": { - "properties": { - "category": { + "url": { "type": "string" }, - "shows": { - "items": { - "$ref": "#/definitions/whatnot.LiveShow" - }, - "type": "array" + "username": { + "type": "string" + }, + "verified": { + "type": "boolean" } }, "type": "object" }, - "whatnot.CategoriesResponse": { + "telegram.ChannelPostsResponse": { "properties": { - "categories": { + "has_more": { + "type": "boolean" + }, + "next_before": { + "type": "integer" + }, + "posts": { "items": { - "$ref": "#/definitions/whatnot.Category" + "$ref": "#/definitions/telegram.Post" }, "type": "array" - } - }, - "type": "object" - }, - "whatnot.Category": { - "properties": { - "id": { + }, + "query": { "type": "string" }, - "name": { + "title": { "type": "string" }, - "slug": { - "description": "e.g. \"trading_card_games\"", + "username": { "type": "string" } }, "type": "object" }, - "whatnot.LiveProduct": { + "telegram.ChannelResponse": { "properties": { - "currency": { + "avatar_url": { "type": "string" }, - "current_bid_cents": { - "type": "integer" - }, - "current_bid_count": { - "type": "integer" - }, "description": { "type": "string" }, - "id": { - "type": "string" + "files_count": { + "type": "integer" }, - "price_cents": { + "links_count": { "type": "integer" }, - "quantity": { + "photos_count": { "type": "integer" }, - "seller": { - "$ref": "#/definitions/whatnot.LiveSeller" - }, - "status": { - "description": "Status is the listing's own lifecycle state: active, created, or\nrunning. A terminal \"sold\"/\"sold out\"-style value almost certainly\nalso exists but was not observed in live testing.", - "enum": [ - "active", - "created", - "running" - ], - "example": "running", + "preview_url": { "type": "string" }, + "subscribers": { + "type": "integer" + }, + "subscribers_approximate": { + "type": "boolean" + }, "title": { "type": "string" }, - "transaction_type": { - "description": "TransactionType distinguishes how a listing is sold: AUCTION,\nGIVEAWAY, or BUY_IT_NOW.", - "enum": [ - "AUCTION", - "GIVEAWAY", - "BUY_IT_NOW" - ], - "example": "AUCTION", + "url": { + "type": "string" + }, + "username": { "type": "string" + }, + "verified": { + "type": "boolean" + }, + "videos_count": { + "type": "integer" } }, "type": "object" }, - "whatnot.LiveResponse": { + "telegram.ForwardedRef": { "properties": { - "id": { + "name": { "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/whatnot.LiveProduct" - }, - "type": "array" - }, "url": { "type": "string" } }, "type": "object" }, - "whatnot.LiveSeller": { + "telegram.GroupResponse": { "properties": { - "rating": { - "type": "number" + "avatar_url": { + "type": "string" }, - "review_count": { + "description": { + "type": "string" + }, + "members": { + "type": "integer" + }, + "online": { "type": "integer" }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + }, "username": { "type": "string" } }, "type": "object" }, - "whatnot.LiveShow": { + "telegram.LinkPreview": { "properties": { - "id": { - "description": "pass as the :id path param to /whatnot/live/{id}", + "description": { "type": "string" }, - "seller_username": { + "image_url": { "type": "string" }, - "start_time_ms": { - "type": "integer" - }, - "status": { - "description": "Status is the show's own lifecycle state: PLAYING (currently live) or\nCREATED (scheduled, not yet started). An ended-show state almost\ncertainly also exists but was not observed in live testing -- ended\nshows drop out of Whatnot's own Browse/category feeds essentially\nimmediately.", - "enum": [ - "PLAYING", - "CREATED" - ], - "example": "PLAYING", + "site_name": { "type": "string" }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" + "title": { + "type": "string" }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "telegram.Media": { + "properties": { "thumbnail_url": { "type": "string" }, - "title": { + "type": { "type": "string" }, "url": { @@ -257578,78 +262516,112 @@ }, "type": "object" }, - "whatnot.SellerProfile": { + "telegram.Post": { "properties": { - "average_ship_days": { - "type": "integer" - }, - "bio": { + "author": { "type": "string" }, - "display_name": { - "type": "string" + "edited": { + "type": "boolean" }, - "follower_count": { - "type": "integer" + "forwarded_from": { + "$ref": "#/definitions/telegram.ForwardedRef" }, - "following_count": { + "id": { "type": "integer" }, - "is_live": { - "type": "boolean" + "link_preview": { + "$ref": "#/definitions/telegram.LinkPreview" }, - "is_premier_shop": { - "type": "boolean" + "links": { + "items": { + "type": "string" + }, + "type": "array" }, - "is_verified_seller": { - "type": "boolean" + "media": { + "items": { + "$ref": "#/definitions/telegram.Media" + }, + "type": "array" }, - "rating": { - "type": "number" + "published_at": { + "type": "string" }, - "review_count": { - "type": "integer" + "reactions": { + "items": { + "$ref": "#/definitions/telegram.Reaction" + }, + "type": "array" }, - "sold_count": { - "type": "integer" + "reply_to": { + "$ref": "#/definitions/telegram.ReplyRef" + }, + "text": { + "type": "string" + }, + "url": { + "type": "string" }, "username": { "type": "string" + }, + "views": { + "type": "integer" } }, "type": "object" }, - "whatnot.SellerResponse": { + "telegram.PostResponse": { "properties": { - "has_more": { - "type": "boolean" + "post": { + "$ref": "#/definitions/telegram.Post" + } + }, + "type": "object" + }, + "telegram.Reaction": { + "properties": { + "count": { + "type": "integer" }, - "next_cursor": { + "custom_emoji_id": { "type": "string" }, - "profile": { - "$ref": "#/definitions/whatnot.SellerProfile" + "emoji": { + "type": "string" }, - "shows": { - "items": { - "$ref": "#/definitions/whatnot.LiveShow" - }, - "type": "array" + "paid": { + "type": "boolean" + } + }, + "type": "object" + }, + "telegram.ReplyRef": { + "properties": { + "author": { + "type": "string" }, - "total_count": { + "id": { "type": "integer" + }, + "text": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "whatnot.browseResponseDoc": { + "telegram.botResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/whatnot.BrowseResponse" + "$ref": "#/definitions/telegram.BotResponse" }, "msg": { "example": "OK", @@ -257658,14 +262630,14 @@ }, "type": "object" }, - "whatnot.categoriesResponseDoc": { + "telegram.channelPostsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/whatnot.CategoriesResponse" + "$ref": "#/definitions/telegram.ChannelPostsResponse" }, "msg": { "example": "OK", @@ -257674,14 +262646,14 @@ }, "type": "object" }, - "whatnot.liveResponseDoc": { + "telegram.channelResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/whatnot.LiveResponse" + "$ref": "#/definitions/telegram.ChannelResponse" }, "msg": { "example": "OK", @@ -257690,14 +262662,14 @@ }, "type": "object" }, - "whatnot.sellerResponseDoc": { + "telegram.groupResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/whatnot.SellerResponse" + "$ref": "#/definitions/telegram.GroupResponse" }, "msg": { "example": "OK", @@ -257706,48 +262678,31 @@ }, "type": "object" }, - "wingstop.DeliveryStoreResponse": { + "telegram.postResponseDoc": { "properties": { - "drive_time_minutes": { - "example": 17, + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "location_status": { - "example": "Active", - "type": "string" - }, - "slug": { - "description": "Slug can be passed directly as /wingstop/menu's path with\nservice_mode=delivery.", - "example": "wingstop-128-houston-tx-77065", - "type": "string" + "data": { + "$ref": "#/definitions/telegram.PostResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "wingstop.DirectoryChild": { + "telegraph.AuthorArticle": { "properties": { - "is_store": { - "description": "IsStore is a convenience flag equivalent to Kind == \"store\".", - "example": false, - "type": "boolean" - }, - "kind": { - "description": "Kind classifies the child: \"country\", \"state\", \"city\", or \"store\".\nOnly a \"store\" child carries no further directory levels -- pass its\npath to GET /wingstop/store instead of GET /wingstop/directory.", - "example": "city", + "excerpt": { "type": "string" }, - "name": { - "example": "Houston", + "published_at": { "type": "string" }, - "path": { - "example": "us/tx/houston", + "title": { "type": "string" }, "url": { @@ -257756,672 +262711,578 @@ }, "type": "object" }, - "wingstop.DirectoryResponse": { + "telegraph.AuthorResponse": { "properties": { - "children": { + "articles": { "items": { - "$ref": "#/definitions/wingstop.DirectoryChild" + "$ref": "#/definitions/telegraph.AuthorArticle" }, "type": "array" }, - "count": { - "example": 48, - "type": "integer" - }, - "fetched_at": { + "bio": { "type": "string" }, - "name": { + "job_title": { "type": "string" }, - "path": { - "example": "us/tx", + "name": { "type": "string" }, - "source_url": { + "url": { "type": "string" } }, "type": "object" }, - "wingstop.Flavor": { + "tes.EmployerDetail": { "properties": { - "description": { + "address": { "type": "string" }, - "heat_scale": { - "description": "HeatScale is Wingstop's own 0 (no heat) to 5 (hottest) rating.", - "example": 1, - "type": "integer" - }, - "id": { + "age_range": { "type": "string" }, - "image_url": { + "description": { "type": "string" }, - "is_active": { - "description": "IsActive is false for a retired flavor Wingstop's catalog still\ncarries a record for but no longer offers -- confirmed live via\n\"Hot Lemon\", present in the feed but absent from the rendered page.", - "type": "boolean" - }, - "is_dry": { - "description": "IsDry distinguishes a dry rub from a wet sauce.", - "type": "boolean" + "funding_status": { + "type": "string" }, - "is_limited_time": { - "type": "boolean" + "gender": { + "type": "string" }, - "is_new": { - "type": "boolean" + "id": { + "type": "string" }, - "is_popular": { - "type": "boolean" + "location": { + "type": "string" }, "name": { - "example": "Lemon Pepper", "type": "string" - } - }, - "type": "object" - }, - "wingstop.FlavorsResponse": { - "properties": { - "count": { - "example": 16, - "type": "integer" }, - "fetched_at": { + "phase": { "type": "string" }, - "flavors": { + "positions": { "items": { - "$ref": "#/definitions/wingstop.Flavor" + "$ref": "#/definitions/tes.EmployerPosition" }, "type": "array" }, - "source_url": { + "type": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "wingstop.MenuCategory": { + "tes.EmployerPosition": { "properties": { "id": { "type": "string" }, - "image_url": { - "type": "string" - }, - "name": { - "example": "Wing Combos", + "title": { "type": "string" }, - "products": { - "items": { - "$ref": "#/definitions/wingstop.MenuProduct" - }, - "type": "array" - }, - "slug": { - "example": "wing-combos", + "url": { "type": "string" } }, "type": "object" }, - "wingstop.MenuProduct": { + "tes.JobDetail": { "properties": { - "description": { - "type": "string" - }, - "id": { - "type": "string" - }, - "image_url": { + "application_email": { "type": "string" }, - "name": { - "example": "6 pc Wing Combo", + "application_url": { "type": "string" }, - "slug": { - "example": "6-wing-combo", + "closing_date": { "type": "string" }, - "variants": { - "description": "Variants is always non-empty: one entry for a standalone item, one\nper size/preparation for a family.", + "contract_terms": { "items": { - "$ref": "#/definitions/wingstop.MenuVariant" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "wingstop.MenuResponse": { - "properties": { - "categories": { + }, + "contract_types": { "items": { - "$ref": "#/definitions/wingstop.MenuCategory" + "type": "string" }, "type": "array" }, - "fetched_at": { - "type": "string" - }, - "path": { - "type": "string" - }, - "service_mode": { - "example": "carryout", - "type": "string" - }, - "source_url": { + "description_excerpt": { "type": "string" }, - "store": { - "$ref": "#/definitions/wingstop.MenuStoreSummary" - } - }, - "type": "object" - }, - "wingstop.MenuStoreSummary": { - "properties": { - "currency_code": { - "example": "USD", + "employer": { "type": "string" }, - "lead_time_minutes": { - "example": 10, - "type": "integer" - }, - "name": { - "example": "Wingstop Houston Jones", + "employer_header_url": { "type": "string" }, - "slug": { - "example": "wingstop-128-houston-tx-77065", + "employer_logo_url": { "type": "string" }, - "store_id": { - "example": "128", + "employer_url": { "type": "string" }, - "tax_rate_percent": { - "example": 8.25, - "type": "number" - } - }, - "type": "object" - }, - "wingstop.MenuVariant": { - "properties": { - "description": { + "employer_website": { "type": "string" }, "id": { "type": "string" }, - "image_url": { + "location": { "type": "string" }, - "is_default": { - "type": "boolean" - }, - "is_limited_time": { - "type": "boolean" - }, - "is_new": { - "type": "boolean" + "posted_date": { + "type": "string" }, - "is_popular": { + "quick_apply": { "type": "boolean" }, - "max_calories": { - "example": 1330, - "type": "integer" - }, - "min_calories": { - "example": 430, - "type": "integer" - }, - "name": { - "example": "6 pc Boneless Combo", + "salary": { "type": "string" }, - "price": { - "example": 10.69, - "type": "number" - }, - "short_name": { + "title": { "type": "string" }, - "slug": { - "example": "6-boneless-combo", + "url": { "type": "string" } }, "type": "object" }, - "wingstop.NearbyResponse": { + "tes.JobFacet": { "properties": { - "count": { - "example": 20, - "type": "integer" - }, - "fetched_at": { - "type": "string" + "children": { + "items": { + "$ref": "#/definitions/tes.JobFacet" + }, + "type": "array" }, - "radius_miles": { - "example": 20, + "count": { "type": "integer" }, - "source_url": { + "value": { "type": "string" - }, - "stores": { - "items": { - "$ref": "#/definitions/wingstop.NearbyStore" - }, - "type": "array" } }, "type": "object" }, - "wingstop.NearbyStore": { + "tes.JobFacets": { "properties": { - "address": { - "$ref": "#/definitions/wingstop.StoreAddress" - }, - "amenities": { - "description": "Amenities are optional in-store features this location has, e.g.\n\"Coca Cola Freestyle\" -- present on a minority of stores (confirmed\nlive: about 60% of a sample radius search carried none).", - "example": [ - "Coca Cola Freestyle" - ], + "contract_terms": { "items": { - "type": "string" + "$ref": "#/definitions/tes.JobFacet" }, "type": "array" }, - "distance_miles": { - "example": 0.6, - "type": "number" - }, - "fulfillment_services": { - "description": "FulfillmentServices are this store's enabled handoff modes, e.g.\n\"carryout\", \"delivery\".", + "contract_types": { "items": { - "type": "string" + "$ref": "#/definitions/tes.JobFacet" }, "type": "array" }, - "hours": { - "description": "Hours is this store's general published week, parsed from the\nlocation-worker record's own \"NotDetermined\"/\"Normal\" calendar\nblock -- a different source and shape from /wingstop/store's Yext\nhours, so day-for-day agreement between the two is not guaranteed.", + "positions": { "items": { - "$ref": "#/definitions/wingstop.StoreHours" + "$ref": "#/definitions/tes.JobFacet" }, "type": "array" }, - "latitude": { - "example": 29.9159405, - "type": "number" + "subjects": { + "items": { + "$ref": "#/definitions/tes.JobFacet" + }, + "type": "array" }, - "location_status": { - "example": "Active", - "type": "string" + "workplaces": { + "items": { + "$ref": "#/definitions/tes.JobFacet" + }, + "type": "array" + } + }, + "type": "object" + }, + "tes.JobSearchResponse": { + "properties": { + "facets": { + "allOf": [ + { + "$ref": "#/definitions/tes.JobFacets" + } + ], + "description": "Facets is the same live faceted-search breakdown tes.com's own search\npage renders as its filter sidebar (position/subject/workplace\ncategory trees plus contract type/term counts), so a caller can\ndiscover exact Position/Subject/Workplace filter values without\nguessing. Counts reflect the query and other filters already applied." }, - "longitude": { - "example": -95.5838414, - "type": "number" + "jobs": { + "items": { + "$ref": "#/definitions/tes.JobSummary" + }, + "type": "array" }, - "name": { - "example": "Wingstop Houston Jones", + "keywords": { "type": "string" }, - "phone_number": { - "example": "+12814779464", + "location": { "type": "string" }, - "slug": { - "example": "wingstop-128-houston-tx-77065", - "type": "string" + "page": { + "type": "integer" }, - "store_id": { - "example": "128", - "type": "string" + "page_size": { + "type": "integer" }, - "timezone": { - "example": "America/Chicago", - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "wingstop.StoreAddress": { + "tes.JobSummary": { "properties": { - "city": { - "example": "Houston", + "closing_date": { "type": "string" }, - "country": { - "example": "US", + "contract_terms": { + "items": { + "type": "string" + }, + "type": "array" + }, + "contract_types": { + "items": { + "type": "string" + }, + "type": "array" + }, + "employer": { "type": "string" }, - "line1": { - "example": "9804 Jones Rd Ste A", + "employer_logo_url": { "type": "string" }, - "line2": { + "id": { "type": "string" }, - "postal_code": { - "example": "77065", + "location": { "type": "string" }, - "region": { - "example": "TX", + "salary": { + "type": "string" + }, + "short_description": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "wingstop.StoreHours": { + "tes.ResourceAttachment": { "properties": { - "closed": { - "description": "Closed is true when Wingstop publishes the day with no open interval.", - "example": false, - "type": "boolean" - }, - "closes": { - "example": "01:00", + "file_type": { "type": "string" }, - "day_of_week": { - "example": "Monday", + "preview_image_url": { "type": "string" }, - "opens": { - "example": "10:30", + "size": { "type": "string" } }, "type": "object" }, - "wingstop.StoreResponse": { + "tes.ResourceDetail": { "properties": { - "address": { - "$ref": "#/definitions/wingstop.StoreAddress" - }, - "fetched_at": { + "age_range": { "type": "string" }, - "fulfillment_services": { - "description": "FulfillmentServices are the pickup/delivery service flags Wingstop\npublishes for this store, e.g. \"In-Store Pickup\", \"Delivery\", \"Same\nDay Delivery\", \"No-Contact Delivery\".", + "attachments": { + "description": "Attachments lists each downloadable file's own type/size and a\npreview thumbnail -- metadata only (the file itself is never fetched;\nrobots.txt disallows /teaching-resource/download/ regardless).", "items": { - "type": "string" + "$ref": "#/definitions/tes.ResourceAttachment" }, "type": "array" }, - "google_place_id": { + "author": { "type": "string" }, - "hours": { - "description": "Hours is the store's general published week of hours.", - "items": { - "$ref": "#/definitions/wingstop.StoreHours" - }, - "type": "array" + "author_url": { + "type": "string" }, - "latitude": { - "example": 29.9159405, - "type": "number" + "currency": { + "type": "string" }, - "location_status": { - "description": "LocationStatus is Wingstop's own operating-status label for this\nstore, e.g. \"Active\".", - "example": "Active", + "description": { "type": "string" }, - "longitude": { - "example": -95.5838414, - "type": "number" + "free": { + "type": "boolean" }, - "name": { - "example": "Wingstop", + "id": { "type": "string" }, - "path": { - "description": "Path is the canonical /wingstop/store path for this restaurant, as\nrequested.", + "license": { + "description": "License is the resource's own licence label as Tes's detail page\nitself displays it (e.g. \"Tes paid licence\", `Creative Commons\n\"Sharealike\"`) -- a longer display string than\nResourceSummary.License's short facet code, since the detail page has\nno equivalent short-code field to read.", "type": "string" }, - "phone_number": { - "example": "+12814779464", - "type": "string" + "price": { + "type": "number" }, - "price_range": { - "example": "$", + "rating": { + "type": "number" + }, + "rating_count": { + "type": "integer" + }, + "resource_type": { "type": "string" }, - "service_hours": { - "allOf": [ - { - "$ref": "#/definitions/wingstop.StoreServiceHours" - } - ], - "description": "ServiceHours is the same week broken down per fulfillment channel --\nsee StoreServiceHours." + "reviews": { + "description": "Reviews is the most recent page of reviews (the same page the\npricing/reviews JSON endpoint returns by default -- see\nrawResourcePricing's doc comment). RatingCount is the true total\nacross every review, not just len(Reviews).", + "items": { + "$ref": "#/definitions/tes.ResourceReview" + }, + "type": "array" }, - "source_url": { + "subject": { "type": "string" }, - "store_id": { - "example": "128", + "thumbnail_url": { "type": "string" }, - "timezone": { - "example": "America/Chicago", + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "wingstop.StoreServiceHours": { + "tes.ResourceReview": { "properties": { - "delivery": { - "items": { - "$ref": "#/definitions/wingstop.StoreHours" - }, - "type": "array" + "author": { + "type": "string" }, - "drive_through": { - "items": { - "$ref": "#/definitions/wingstop.StoreHours" - }, - "type": "array" + "author_url": { + "type": "string" }, - "pickup": { - "items": { - "$ref": "#/definitions/wingstop.StoreHours" - }, - "type": "array" + "comment": { + "type": "string" }, - "takeout": { - "items": { - "$ref": "#/definitions/wingstop.StoreHours" - }, - "type": "array" + "id": { + "type": "string" + }, + "posted": { + "type": "string" + }, + "rating": { + "type": "number" } }, "type": "object" }, - "wingstop.deliveryStoreResponseDoc": { + "tes.ResourceSearchResponse": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "country": { + "type": "string" + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/wingstop.DeliveryStoreResponse" + "page_size": { + "type": "integer" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "query": { + "type": "string" + }, + "resources": { + "items": { + "$ref": "#/definitions/tes.ResourceSummary" + }, + "type": "array" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "wingstop.directoryResponseDoc": { + "tes.ResourceShop": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "avatar_url": { + "type": "string" + }, + "bio": { + "type": "string" + }, + "downloads": { "type": "integer" }, - "data": { - "$ref": "#/definitions/wingstop.DirectoryResponse" + "name": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "wingstop.flavorsResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/wingstop.FlavorsResponse" + "rating": { + "type": "number" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "wingstop.menuResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "rating_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/wingstop.MenuResponse" + "resources": { + "items": { + "$ref": "#/definitions/tes.ShopResourceSummary" + }, + "type": "array" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "wingstop.nearbyResponseDoc": { - "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "uploads": { "type": "integer" }, - "data": { - "$ref": "#/definitions/wingstop.NearbyResponse" + "url": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "username": { + "type": "string" + }, + "views": { + "type": "integer" } }, "type": "object" }, - "wingstop.storeResponseDoc": { + "tes.ResourceSummary": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "author": { + "type": "string" + }, + "bundle_original_price": { + "type": "number" + }, + "bundle_resource_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/wingstop.StoreResponse" + "currency": { + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" - } - }, - "type": "object" - }, - "wired.ArticleResponse": { - "properties": { - "authors": { + "downloads": { + "type": "integer" + }, + "file_types": { "items": { "type": "string" }, "type": "array" }, - "description": { + "first_published": { "type": "string" }, - "image_url": { + "free": { + "type": "boolean" + }, + "id": { "type": "string" }, - "paragraphs": { + "is_bundle": { + "description": "IsBundle marks a listing that packages multiple resources under one\nprice, tes.com's own \"Bundle\" badge. BundleResourceCount and\nBundleOriginalPrice are only meaningful when IsBundle is true.", + "type": "boolean" + }, + "last_published": { + "type": "string" + }, + "license": { + "description": "License is Tes's own short licence code -- one of \"Paid\", \"CC-BY-SA\",\n\"CC-BY-ND\", \"CC-BY\" (its licence facet's own values, confirmed live\n2026-09-04).", + "type": "string" + }, + "on_sale": { + "type": "boolean" + }, + "price": { + "type": "number" + }, + "rating": { + "type": "number" + }, + "rating_count": { + "type": "integer" + }, + "resource_types": { "items": { "type": "string" }, "type": "array" }, - "published_at": { - "type": "string" - }, - "section": { + "thumbnail_url": { "type": "string" }, "title": { "type": "string" }, - "updated_at": { - "type": "string" - }, "url": { "type": "string" } }, "type": "object" }, - "wired.AuthorArticle": { + "tes.SchoolSearchResponse": { "properties": { - "published_at": { - "type": "string" + "page": { + "type": "integer" }, - "title": { - "type": "string" + "page_size": { + "type": "integer" }, - "url": { + "query": { "type": "string" + }, + "schools": { + "items": { + "$ref": "#/definitions/tes.SchoolSummary" + }, + "type": "array" + }, + "total": { + "type": "integer" + }, + "total_pages": { + "type": "integer" } }, "type": "object" }, - "wired.AuthorResponse": { + "tes.SchoolSummary": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/wired.AuthorArticle" - }, - "type": "array" + "address": { + "type": "string" }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "country": { + "type": "string" }, - "image_url": { + "description": { "type": "string" }, - "job_title": { + "id": { + "type": "string" + }, + "logo_url": { "type": "string" }, "name": { "type": "string" }, - "social_links": { - "items": { - "type": "string" - }, - "type": "array" + "post_code": { + "type": "string" }, "url": { "type": "string" @@ -258429,50 +263290,72 @@ }, "type": "object" }, - "wired.HeadlinesResponse": { + "tes.ShopResourceSummary": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" + "currency": { + "type": "string" }, - "section": { + "free": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "price": { + "type": "number" + }, + "thumbnail_url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "wired.NewsResponse": { + "tes.employerDetailResponseDoc": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/tes.EmployerDetail" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "wired.SectionsResponse": { + "tes.jobDetailResponseDoc": { "properties": { - "sections": { - "items": { - "$ref": "#/definitions/newsplatform.Section" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/tes.JobDetail" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "wired.articleResponseDoc": { + "tes.jobSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wired.ArticleResponse" + "$ref": "#/definitions/tes.JobSearchResponse" }, "msg": { "example": "OK", @@ -258481,14 +263364,14 @@ }, "type": "object" }, - "wired.authorResponseDoc": { + "tes.resourceDetailResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wired.AuthorResponse" + "$ref": "#/definitions/tes.ResourceDetail" }, "msg": { "example": "OK", @@ -258497,14 +263380,14 @@ }, "type": "object" }, - "wired.headlinesResponseDoc": { + "tes.resourceSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wired.HeadlinesResponse" + "$ref": "#/definitions/tes.ResourceSearchResponse" }, "msg": { "example": "OK", @@ -258513,14 +263396,14 @@ }, "type": "object" }, - "wired.newsResponseDoc": { + "tes.resourceShopResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wired.NewsResponse" + "$ref": "#/definitions/tes.ResourceShop" }, "msg": { "example": "OK", @@ -258529,14 +263412,14 @@ }, "type": "object" }, - "wired.sectionsResponseDoc": { + "tes.schoolSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wired.SectionsResponse" + "$ref": "#/definitions/tes.SchoolSearchResponse" }, "msg": { "example": "OK", @@ -258545,189 +263428,260 @@ }, "type": "object" }, - "wish.CategoriesResponse": { + "teslajobs.ListResponse": { "properties": { - "categories": { + "jobs": { + "description": "Job listings on this page.", "items": { - "$ref": "#/definitions/wish.Category" + "$ref": "#/definitions/teslajobs.TeslaJobListing" }, "type": "array" }, - "fetched_at": { + "location": { + "description": "Location filter that was applied.", + "example": "Palo Alto", "type": "string" }, - "source_url": { + "page": { + "description": "Page number returned, starting at 1.", + "example": 1, + "type": "integer" + }, + "page_size": { + "description": "Number of job listings per page.", + "example": 20, + "type": "integer" + }, + "query": { + "description": "Title or department filter that was applied.", + "example": "software engineer", "type": "string" + }, + "total": { + "description": "Total number of job listings that match the filters.", + "example": 302, + "type": "integer" } }, "type": "object" }, - "wish.Category": { + "teslajobs.TeslaJob": { "properties": { - "filter_groups": { - "items": { - "$ref": "#/definitions/wish.FilterGroup" - }, - "type": "array" + "apply_url": { + "type": "string" }, - "filter_id": { + "compensation_text": { "type": "string" }, - "is_main_tab": { - "type": "boolean" + "country": { + "example": "US", + "type": "string" }, - "name": { + "department": { + "example": "Tesla AI", + "type": "string" + }, + "description": { + "type": "string" + }, + "employment_type": { + "example": "fulltime", + "type": "string" + }, + "id": { + "example": "224501", + "type": "string" + }, + "job_family": { + "example": "AI", + "type": "string" + }, + "location": { + "example": "Palo Alto, California", + "type": "string" + }, + "requirements": { + "type": "string" + }, + "responsibilities": { + "type": "string" + }, + "state": { + "example": "CA", + "type": "string" + }, + "title": { + "example": "AI Engineer, Manipulation, Optimus", + "type": "string" + }, + "url": { + "example": "https://www.tesla.com/careers/search/job/ai-engineer-manipulation-optimus-224501", "type": "string" } }, "type": "object" }, - "wish.Filter": { + "teslajobs.TeslaJobListing": { "properties": { - "default_selected": { - "type": "boolean" - }, - "filter_id": { + "department": { + "description": "Tesla department the job belongs to, such as `Tesla AI`.", + "example": "Tesla AI", "type": "string" }, - "is_quick_filter": { - "type": "boolean" + "id": { + "description": "Tesla careers job id. Use it with the job endpoint.", + "example": "224501", + "type": "string" }, - "is_toggle": { - "type": "boolean" + "location": { + "description": "Job location as Tesla shows it, such as `Palo Alto, California`.", + "example": "Palo Alto, California", + "type": "string" }, - "name": { + "title": { + "description": "Job title as shown on Tesla Careers.", + "example": "AI Engineer, Manipulation, Optimus", "type": "string" } }, "type": "object" }, - "wish.FilterGroup": { + "teslajobs.jobResponseDoc": { "properties": { - "filters": { - "items": { - "$ref": "#/definitions/wish.Filter" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "icon_url": { - "type": "string" + "data": { + "$ref": "#/definitions/teslajobs.TeslaJob" }, - "id": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "teslajobs.listResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "name": { + "data": { + "$ref": "#/definitions/teslajobs.ListResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "wish.ProductDetailResponse": { + "theage.ArticleResponse": { "properties": { + "authors": { + "items": { + "type": "string" + }, + "type": "array" + }, "description": { "type": "string" }, - "fetched_at": { + "image_url": { "type": "string" }, - "images": { + "is_accessible_for_free": { + "type": "boolean" + }, + "is_truncated": { + "type": "boolean" + }, + "keywords": { "items": { "type": "string" }, "type": "array" }, - "is_sold_out": { + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "paywalled": { "type": "boolean" }, - "name": { + "published_at": { "type": "string" }, - "product_id": { + "section": { "type": "string" }, - "rating": { - "description": "Rating and RatingCount are the product's own aggregate rating, sourced\nfrom product-detail's dedicated rating module. A brand-new product\nwith no reviews yet carries a zero value for both rather than an\nerror.", - "type": "number" - }, - "rating_count": { - "type": "integer" + "title": { + "type": "string" }, - "source_url": { + "updated_at": { "type": "string" }, "url": { "type": "string" - }, - "variations": { - "items": { - "$ref": "#/definitions/wish.ProductVariation" - }, - "type": "array" } }, "type": "object" }, - "wish.ProductReviewsResponse": { + "theage.AuthorResponse": { "properties": { - "count": { - "description": "Number of reviews that was requested.", - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/theage.HeadlineItem" + }, + "type": "array" }, - "fetched_at": { - "description": "Time the data was fetched, in UTC (RFC 3339).", + "bio": { "type": "string" }, - "has_more": { - "description": "Whether more reviews exist beyond those returned.", - "type": "boolean" + "email": { + "type": "string" }, - "product_id": { - "description": "Wish product id that was requested.", + "image_url": { "type": "string" }, - "result_count": { - "description": "Number of reviews returned.", - "type": "integer" + "name": { + "type": "string" }, - "reviews": { - "description": "Customer reviews of the product.", + "social_links": { "items": { - "$ref": "#/definitions/wish.Review" + "type": "string" }, "type": "array" }, - "source_url": { - "description": "URL the data was read from.", + "url": { "type": "string" } }, "type": "object" }, - "wish.ProductSummary": { + "theage.HeadlineItem": { "properties": { - "currency_code": { + "author": { "type": "string" }, "image_url": { "type": "string" }, - "merchant_id": { + "published_at": { "type": "string" }, - "name": { + "summary": { "type": "string" }, - "price": { - "type": "number" - }, - "product_id": { + "title": { "type": "string" }, - "rating": { - "type": "number" - }, - "review_count": { - "type": "integer" + "type": { + "type": "string" }, "url": { "type": "string" @@ -258735,238 +263689,146 @@ }, "type": "object" }, - "wish.ProductVariation": { + "theatlantic.ArticleResponse": { "properties": { - "color": { - "type": "string" - }, - "currency_code": { - "type": "string" - }, - "inventory": { - "type": "integer" + "authors": { + "items": { + "type": "string" + }, + "type": "array" }, - "merchant_id": { + "description": { "type": "string" }, - "merchant_name": { + "image_url": { "type": "string" }, - "merchant_rating": { - "type": "number" - }, - "price": { - "type": "number" + "metered": { + "type": "boolean" }, - "size": { - "type": "string" + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" }, - "variation_id": { - "type": "string" - } - }, - "type": "object" - }, - "wish.RelatedItem": { - "properties": { - "currency_code": { + "published_at": { "type": "string" }, - "image_url": { + "section": { "type": "string" }, - "merchant_id": { - "type": "string" + "tags": { + "items": { + "type": "string" + }, + "type": "array" }, - "name": { + "title": { "type": "string" }, - "price": { - "type": "number" - }, - "product_id": { + "updated_at": { "type": "string" }, - "rating": { - "type": "number" - }, - "review_count": { - "type": "integer" - }, "url": { "type": "string" } }, "type": "object" }, - "wish.RelatedItemsResponse": { + "theatlantic.AuthorResponse": { "properties": { - "fetched_at": { - "type": "string" - }, - "product_id": { - "type": "string" - }, - "shelves": { + "articles": { "items": { - "$ref": "#/definitions/wish.RelatedShelf" + "$ref": "#/definitions/theatlantic.HeadlineItem" }, "type": "array" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "wish.RelatedShelf": { - "properties": { - "feed_mode": { - "example": "similar", + "biography": { "type": "string" }, - "has_more": { - "type": "boolean" - }, - "items": { - "items": { - "$ref": "#/definitions/wish.RelatedItem" - }, - "type": "array" + "headshot_url": { + "type": "string" }, - "subtitle": { - "example": "Similar Items with 5-7 Day Shipping", + "name": { "type": "string" }, - "title": { - "example": "Faster Shipping", + "url": { "type": "string" } }, "type": "object" }, - "wish.Review": { + "theatlantic.HeadlineItem": { "properties": { - "color": { - "description": "Product color the review is for.", + "author": { "type": "string" }, - "comment": { - "description": "Text of the review.", + "description": { "type": "string" }, - "created_at": { - "description": "Time the review was posted, in ISO 8601 format.", + "image_url": { "type": "string" }, - "downvote_count": { - "description": "Number of downvotes the review received.", - "type": "integer" - }, - "id": { - "description": "Wish review id.", + "published_at": { "type": "string" }, - "image_ids": { - "description": "Ids of the photos attached to the review.", - "items": { - "type": "string" - }, - "type": "array" - }, - "is_wish_star": { - "description": "Whether Wish marks the review as a Wish Star rating.", - "type": "boolean" - }, - "rating": { - "description": "Star rating the reviewer gave.", - "type": "integer" - }, "title": { - "description": "Review headline written by the reviewer.", - "type": "string" - }, - "upvote_count": { - "description": "Number of upvotes the review received.", - "type": "integer" - }, - "user_country_code": { - "description": "Country code of the reviewer, such as `US`.", "type": "string" }, - "user_name": { - "description": "Display name of the reviewer.", + "url": { "type": "string" } }, "type": "object" }, - "wish.SearchResponse": { + "theatlantic.HeadlinesResponse": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "has_more": { - "type": "boolean" - }, - "next_offset": { - "type": "integer" - }, - "offset": { - "type": "integer" - }, - "products": { + "items": { "items": { - "$ref": "#/definitions/wish.ProductSummary" + "$ref": "#/definitions/theatlantic.HeadlineItem" }, "type": "array" }, - "query": { - "type": "string" - }, - "result_count": { - "type": "integer" - }, - "source_url": { + "section": { "type": "string" } }, "type": "object" }, - "wish.SuggestResponse": { + "theatlantic.Section": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { + "name": { "type": "string" }, - "query": { + "slug": { "type": "string" }, - "source_url": { + "url": { "type": "string" - }, - "suggestions": { + } + }, + "type": "object" + }, + "theatlantic.SectionsResponse": { + "properties": { + "sections": { "items": { - "type": "string" + "$ref": "#/definitions/theatlantic.Section" }, "type": "array" } }, "type": "object" }, - "wish.categoriesResponseDoc": { + "theatlantic.articleResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wish.CategoriesResponse" + "$ref": "#/definitions/theatlantic.ArticleResponse" }, "msg": { "example": "OK", @@ -258975,14 +263837,14 @@ }, "type": "object" }, - "wish.productDetailResponseDoc": { + "theatlantic.authorResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wish.ProductDetailResponse" + "$ref": "#/definitions/theatlantic.AuthorResponse" }, "msg": { "example": "OK", @@ -258991,14 +263853,14 @@ }, "type": "object" }, - "wish.productReviewsResponseDoc": { + "theatlantic.headlinesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wish.ProductReviewsResponse" + "$ref": "#/definitions/theatlantic.HeadlinesResponse" }, "msg": { "example": "OK", @@ -259007,14 +263869,14 @@ }, "type": "object" }, - "wish.relatedItemsResponseDoc": { + "theatlantic.sectionsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wish.RelatedItemsResponse" + "$ref": "#/definitions/theatlantic.SectionsResponse" }, "msg": { "example": "OK", @@ -259023,787 +263885,824 @@ }, "type": "object" }, - "wish.searchResponseDoc": { + "theblaze.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/wish.SearchResponse" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "role": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "wish.suggestResponseDoc": { + "thedailybeast.AuthorArticle": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/wish.SuggestResponse" + "title": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "wolt.AvailabilityResponse": { + "thedailybeast.AuthorResponse": { "properties": { - "delivery_enabled": { - "type": "boolean" + "articles": { + "items": { + "$ref": "#/definitions/thedailybeast.AuthorArticle" + }, + "type": "array" }, - "delivery_fee": { - "description": "DeliveryFee is the base delivery price for this caller's coordinate,\nin major currency units (e.g. euros). Wolt scales it with distance --\nconfirmed live 2026-09-05: the same venue returned 1.99 for a 474m\ncoordinate and 7.99 for a 16.2km one.", - "type": "number" + "bio": { + "items": { + "type": "string" + }, + "type": "array" }, - "delivery_fee_label": { - "description": "DeliveryFeeLabel is Wolt's own locale-formatted rendering of the fee\nactually shown on the venue page (e.g. \"€0.00\" while a free-delivery\ncampaign is running), which can differ from DeliveryFee's list price.", + "image_url": { "type": "string" }, - "delivery_method_default": { - "description": "DeliveryMethodDefault is the fulfilment method Wolt itself would\npreselect for this caller's coordinate: \"DELIVERY\", \"PICKUP\", or\n\"UNAVAILABLE\" when no coordinate was supplied (or the venue does not\ndeliver there at all). Confirmed live 2026-09-05.", + "job_title": { "type": "string" }, - "delivery_open_status": { - "$ref": "#/definitions/wolt.OpenStatus" - }, - "distance_label": { - "description": "DistanceLabel is Wolt's own formatted venue distance from the\ncaller's coordinate (e.g. \"474 m\", \"16.2 km\"). Only present when\ncoordinates were supplied.", + "name": { "type": "string" }, - "estimates": { - "items": { - "$ref": "#/definitions/wolt.DeliveryEstimate" - }, - "type": "array" - }, - "id": { + "twitter": { "type": "string" }, - "online": { - "type": "boolean" - }, - "open_status": { - "$ref": "#/definitions/wolt.OpenStatus" - }, - "order_minimum": { - "description": "OrderMinimum is the venue's minimum order value in major currency\nunits, and OrderMinimumLabel Wolt's own locale-formatted rendering of\nit (e.g. \"Min. order €10.00\").", - "type": "number" + "url": { + "type": "string" + } + }, + "type": "object" + }, + "thehill.AuthorArticle": { + "properties": { + "category": { + "type": "string" }, - "order_minimum_label": { + "category_url": { "type": "string" }, - "promotions": { - "description": "Promotions are the discount campaign labels Wolt currently shows on\nthe venue's own public page (e.g. \"0 € delivery fee\", \"3x5 €\"). This\nis display text only -- no campaign is claimed, redeemed, or applied.", - "items": { - "type": "string" - }, - "type": "array" + "published_at": { + "type": "string" }, - "self_delivery": { - "type": "boolean" + "title": { + "type": "string" }, - "slug": { + "url": { "type": "string" } }, "type": "object" }, - "wolt.CategoryFilter": { + "thehill.AuthorResponse": { "properties": { - "count": { - "type": "integer" + "articles": { + "items": { + "$ref": "#/definitions/thehill.AuthorArticle" + }, + "type": "array" }, - "id": { + "bio": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "job_title": { "type": "string" }, "name": { "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "wolt.CitiesResponse": { + "thehindu.AuthorResponse": { "properties": { - "cities": { + "articles": { "items": { - "$ref": "#/definitions/wolt.City" + "$ref": "#/definitions/thehindu.HeadlineItem" }, "type": "array" }, - "country": { + "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "designation": { "type": "string" }, - "total_results": { - "type": "integer" + "email": { + "type": "string" + }, + "facebook_url": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "linkedin_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "twitter_url": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "wolt.City": { + "thehindu.HeadlineItem": { "properties": { - "country": { + "author": { "type": "string" }, - "country_iso3": { + "image_url": { "type": "string" }, - "distance_km": { - "description": "DistanceKm is Wolt's own whole-kilometre distance from the reference\ncoordinate, present only when latitude/longitude were supplied.\nConfirmed live 2026-09-05 against a haversine recomputation: Wolt\nreports 9 for a city 9.65km away and 13 for one 13.79km away, i.e.\nkilometres truncated to an integer, not metres.", - "type": "integer" - }, - "id": { + "published_at": { "type": "string" }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" + "summary": { + "type": "string" }, - "name": { + "title": { "type": "string" }, - "slug": { + "type": { "type": "string" }, - "timezone": { + "url": { "type": "string" } }, "type": "object" }, - "wolt.Collection": { + "thejournal.AuthorArticle": { "properties": { - "id": { + "image_url": { "type": "string" }, - "restaurants": { - "items": { - "$ref": "#/definitions/wolt.Restaurant" - }, - "type": "array" + "section": { + "type": "string" + }, + "summary": { + "type": "string" }, "title": { "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "wolt.CollectionsResponse": { + "thejournal.AuthorResponse": { "properties": { - "collections": { + "articles": { "items": { - "$ref": "#/definitions/wolt.Collection" + "$ref": "#/definitions/thejournal.AuthorArticle" }, "type": "array" }, - "is_serviceable": { - "description": "IsServiceable reports whether Wolt delivers to the requested\ncoordinates at all. False means the coordinates are outside Wolt's\ndelivery coverage, so an empty collections list is a coverage\nanswer rather than a served location whose homepage happens to\ncarry no curated lists.", + "has_more": { "type": "boolean" - } - }, - "type": "object" - }, - "wolt.DaySchedule": { - "properties": { - "day": { + }, + "id": { "type": "string" }, - "formatted_times": { + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "wolt.DeliveryEstimate": { + "thenextweb.AuthorResponse": { "properties": { - "label": { - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" }, - "max_minutes": { - "type": "integer" + "image_url": { + "type": "string" }, - "method": { + "name": { "type": "string" }, - "min_minutes": { - "type": "integer" + "slug": { + "type": "string" }, - "minutes": { - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "wolt.FiltersResponse": { + "therealreal.AutocompleteResponse": { "properties": { - "categories": { + "source_url": { + "type": "string" + }, + "suggestions": { "items": { - "$ref": "#/definitions/wolt.CategoryFilter" + "$ref": "#/definitions/therealreal.Suggestion" }, "type": "array" - }, - "total_results": { - "type": "integer" } }, "type": "object" }, - "wolt.MenuCategory": { + "therealreal.CategoriesResponse": { "properties": { - "items": { + "categories": { "items": { - "$ref": "#/definitions/wolt.MenuItem" + "$ref": "#/definitions/therealreal.Category" }, "type": "array" }, - "name": { - "type": "string" - }, - "subcategory": { + "source_url": { "type": "string" } }, "type": "object" }, - "wolt.MenuItem": { + "therealreal.Category": { "properties": { - "barcode_gtin": { - "description": "BarcodeGTIN, UnitInfo, and UnitPrice are retail/grocery product\nfields. A restaurant dish carries none of them; a packaged store\nproduct usually carries all three.", - "type": "string" - }, - "description": { - "type": "string" - }, - "dietary_preferences": { + "children": { "items": { - "type": "string" + "$ref": "#/definitions/therealreal.Category" }, "type": "array" }, - "id": { - "type": "string" + "count": { + "example": 225361, + "type": "integer" }, - "image_url": { + "id": { + "example": "493", "type": "string" }, "name": { + "example": "Handbags", "type": "string" }, - "original_price": { - "type": "number" - }, - "price": { - "type": "number" + "permalink": { + "example": "women/handbags", + "type": "string" + } + }, + "type": "object" + }, + "therealreal.CollectionSlug": { + "properties": { + "slug": { + "example": "on-sale-now", + "type": "string" }, - "tags": { + "url": { + "example": "https://www.therealreal.com/sales/on-sale-now", + "type": "string" + } + }, + "type": "object" + }, + "therealreal.CollectionsResponse": { + "properties": { + "collections": { "items": { - "type": "string" + "$ref": "#/definitions/therealreal.CollectionSlug" }, "type": "array" }, - "unit_info": { + "source_url": { "type": "string" }, - "unit_price": { - "$ref": "#/definitions/wolt.UnitPrice" + "total": { + "example": 535, + "type": "integer" } }, "type": "object" }, - "wolt.MenuResponse": { + "therealreal.Condition": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/wolt.MenuCategory" - }, - "type": "array" + "count": { + "example": 162975, + "type": "integer" }, - "loading_strategy": { - "description": "LoadingStrategy reports whether this venue's items are included.\n\"full\" means every category below carries its items. \"partial\"\nmeans Wolt does not bulk-load this venue's assortment: the\ncategories are real but every one of them comes back with an empty\nitems list, and the venue's items are reachable only by keyword\nthrough /wolt/restaurant/menu/search. Large stores of any kind --\nsupermarkets, pharmacies, drugstores, DIY and toy stores -- are\ncommonly \"partial\"; restaurants are \"full\".", + "id": { + "example": "20", "type": "string" }, - "restaurant": { - "$ref": "#/definitions/wolt.RestaurantResponse" + "name": { + "example": "Very Good", + "type": "string" } }, "type": "object" }, - "wolt.MenuSearchResponse": { + "therealreal.ConditionsResponse": { "properties": { - "items": { + "conditions": { "items": { - "$ref": "#/definitions/wolt.MenuItem" + "$ref": "#/definitions/therealreal.Condition" }, "type": "array" }, - "query": { - "type": "string" - }, - "slug": { + "source_url": { "type": "string" - }, - "total_results": { - "type": "integer" } }, "type": "object" }, - "wolt.OpenStatus": { + "therealreal.Designer": { "properties": { - "is_open": { - "type": "boolean" - }, - "label": { + "id": { + "example": "267", "type": "string" }, - "next_close": { + "name": { + "example": "Chanel", "type": "string" }, - "next_open": { + "slug": { + "example": "chanel", "type": "string" - }, - "now": { + } + }, + "type": "object" + }, + "therealreal.DesignerDirectoryCategory": { + "properties": { + "name": { + "example": "Women", "type": "string" }, - "previous_open": { + "slug": { + "example": "women", "type": "string" } }, "type": "object" }, - "wolt.Restaurant": { + "therealreal.DesignersResponse": { "properties": { - "address": { - "type": "string" - }, "categories": { - "description": "Categories are the venue's own category ids, in the same taxonomy\n/wolt/search's category parameter and /wolt/search/filters use. This\nis a machine-readable vocabulary, distinct from Tags's free-text\ndisplay list. Only the two browse modes carry it; a keyword search\nomits it.", "items": { - "type": "string" + "$ref": "#/definitions/therealreal.DesignerDirectoryCategory" }, "type": "array" }, - "city": { + "category": { + "example": "women", "type": "string" }, - "country": { - "type": "string" + "designers": { + "items": { + "$ref": "#/definitions/therealreal.Designer" + }, + "type": "array" }, - "currency": { + "source_url": { "type": "string" }, - "delivers": { - "type": "boolean" - }, - "estimate_minutes": { + "total": { + "example": 5413, "type": "integer" + } + }, + "type": "object" + }, + "therealreal.Listing": { + "properties": { + "available": { + "example": true, + "type": "boolean" }, - "estimate_range": { + "color": { + "example": "Blue", "type": "string" }, - "id": { + "condition": { + "example": "Very Good", "type": "string" }, - "image_url": { + "designer": { + "example": "Chanel", "type": "string" }, - "latitude": { - "description": "Latitude/Longitude are the venue's own coordinates.", - "type": "number" + "designer_slug": { + "example": "chanel", + "type": "string" }, - "longitude": { - "type": "number" + "gender": { + "example": "Women", + "type": "string" }, - "name": { + "id": { + "example": "54388578", "type": "string" }, - "online": { - "type": "boolean" + "image_url": { + "example": "https://product-images.therealreal.com/CHA1494621_1_enlarged.jpg", + "type": "string" }, - "price_range": { - "type": "integer" + "images": { + "items": { + "type": "string" + }, + "type": "array" }, - "product_line": { + "name": { + "example": "Denim Pearl Crush Wallet On Chain", "type": "string" }, - "rating_count": { - "type": "integer" + "original_price_usd": { + "example": 3800, + "type": "number" }, - "rating_score": { + "price_usd": { + "example": 3800, "type": "number" }, - "short_description": { + "sku": { + "example": "CHA1494621", "type": "string" }, - "slug": { + "url": { + "example": "https://www.therealreal.com/products/women/handbags/crossbody-bags/chanel-denim-pearl-crush-wallet-on-chain-wdqhu", "type": "string" }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" + "waitlisted": { + "example": false, + "type": "boolean" } }, "type": "object" }, - "wolt.RestaurantResponse": { + "therealreal.ListingDetail": { "properties": { - "address": { + "available": { + "example": true, + "type": "boolean" + }, + "category_label": { + "example": "Women's Fashion & Accessories", "type": "string" }, - "brand_name": { + "category_name": { + "example": "Women", "type": "string" }, - "brand_slug": { - "description": "BrandSlug is a grouping key shared by every location of a chain\n(e.g. \"mcdonalds\"). Wolt publishes no brand listing, so it is not\naccepted as a parameter anywhere -- it is useful for collapsing\nresults by chain.", + "color": { + "example": "Blue", "type": "string" }, - "categories": { - "description": "Categories are the venue's own categories, each with the id\n/wolt/search's category parameter accepts, a display name, and a\nflag for the venue's primary category.", - "items": { - "$ref": "#/definitions/wolt.VenueCategory" - }, - "type": "array" + "condition": { + "example": "Very Good", + "type": "string" }, - "city": { + "condition_detail": { + "example": "Minor discoloration throughout; minor discoloration at hardware; minor scuff at corner.", "type": "string" }, - "city_id": { - "description": "CityID is the id of the /wolt/cities entry this venue belongs to.", + "description": { "type": "string" }, - "country": { + "designer": { + "example": "Chanel", "type": "string" }, - "currency": { + "designer_slug": { + "example": "chanel", "type": "string" }, - "delivery_base_price": { - "type": "integer" - }, - "delivery_methods": { - "items": { - "type": "string" - }, - "type": "array" - }, - "delivery_times": { - "items": { - "$ref": "#/definitions/wolt.DaySchedule" - }, - "type": "array" - }, - "description": { - "type": "string" + "gender": { + "example": "Women", + "type": "string" }, "id": { + "example": "54388578", "type": "string" }, "image_url": { + "example": "https://product-images.therealreal.com/CHA1494621_1_enlarged.jpg", "type": "string" }, - "latitude": { - "description": "Latitude/Longitude are the venue's own coordinates.", - "type": "number" - }, - "longitude": { - "type": "number" - }, - "name": { - "type": "string" - }, - "opening_times": { + "images": { "items": { - "$ref": "#/definitions/wolt.DaySchedule" + "type": "string" }, "type": "array" }, - "order_minimum": { - "type": "string" - }, - "phone": { - "type": "string" - }, - "pickup_friendly": { - "type": "boolean" - }, - "post_code": { - "type": "string" - }, - "price_range": { - "description": "PriceRange is Wolt's own 1-4 price tier and Tags its free-text\ndisplay cuisine list -- the same two fields /wolt/search returns per\nresult.", - "type": "integer" + "measurements": { + "additionalProperties": { + "type": "string" + }, + "type": "object" }, - "product_line": { + "name": { + "example": "Denim Pearl Crush Wallet On Chain", "type": "string" }, - "rating_count": { - "type": "integer" - }, - "rating_score": { + "original_price_usd": { + "example": 3800, "type": "number" }, - "service_fee_max": { - "type": "integer" - }, - "service_fee_min": { - "type": "integer" - }, - "service_fee_percent": { - "type": "integer" - }, - "share_url": { - "type": "string" + "price_usd": { + "example": 3800, + "type": "number" }, - "slug": { + "sku": { + "example": "CHA1494621", "type": "string" }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "timezone": { - "description": "Timezone is the IANA zone (e.g. \"Europe/Helsinki\") the venue's\nopening and delivery hours are expressed in.", + "source_url": { "type": "string" }, - "website": { + "url": { + "example": "https://www.therealreal.com/products/women/handbags/crossbody-bags/chanel-denim-pearl-crush-wallet-on-chain-wdqhu", "type": "string" }, - "wolt_plus": { - "description": "WoltPlus reports whether the venue participates in Wolt's\nsubscription programme.", + "waitlisted": { + "example": false, "type": "boolean" } }, "type": "object" }, - "wolt.SearchResponse": { + "therealreal.ProductsResponse": { "properties": { - "category": { - "type": "string" - }, - "is_serviceable": { - "description": "IsServiceable reports whether Wolt delivers to the requested\ncoordinates at all. False means the coordinates are outside Wolt's\ndelivery coverage, so an empty restaurants list is a coverage\nanswer rather than a no-matches answer. True with an empty list\nmeans the location is served but nothing matched. Always present:\nall three search modes -- plain browse, keyword search, and\ncategory browse -- answer it definitively.", - "type": "boolean" - }, - "open_now": { + "has_more": { + "example": true, "type": "boolean" }, - "product_line": { - "type": "string" - }, - "query": { - "type": "string" - }, - "restaurants": { + "listings": { "items": { - "$ref": "#/definitions/wolt.Restaurant" + "$ref": "#/definitions/therealreal.Listing" }, "type": "array" }, - "sort": { + "next_after": { + "example": "YXJyYXljb25uZWN0aW9uOjExOQ==", "type": "string" }, - "total_results": { + "source_url": { + "type": "string" + }, + "total": { + "example": 404167, "type": "integer" } }, "type": "object" }, - "wolt.UnitPrice": { + "therealreal.SimilarResponse": { "properties": { - "base": { - "type": "integer" - }, - "price": { - "type": "number" + "listings": { + "items": { + "$ref": "#/definitions/therealreal.Listing" + }, + "type": "array" }, - "unit": { + "source_url": { "type": "string" } }, "type": "object" }, - "wolt.VenueCategory": { + "therealreal.Suggestion": { "properties": { - "id": { - "type": "string" - }, - "name": { + "text": { + "example": "gucci handbags", "type": "string" - }, - "primary": { - "type": "boolean" } }, "type": "object" }, - "wolt.availabilityResponseDoc": { + "therealreal.autocompleteResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wolt.AvailabilityResponse" + "$ref": "#/definitions/therealreal.AutocompleteResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "wolt.citiesResponseDoc": { + "therealreal.categoriesResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wolt.CitiesResponse" + "$ref": "#/definitions/therealreal.CategoriesResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "wolt.collectionsResponseDoc": { + "therealreal.collectionsResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wolt.CollectionsResponse" + "$ref": "#/definitions/therealreal.CollectionsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "wolt.filtersResponseDoc": { + "therealreal.conditionsResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wolt.FiltersResponse" + "$ref": "#/definitions/therealreal.ConditionsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "wolt.menuResponseDoc": { + "therealreal.designersResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wolt.MenuResponse" + "$ref": "#/definitions/therealreal.DesignersResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "wolt.menuSearchResponseDoc": { + "therealreal.listingResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wolt.MenuSearchResponse" + "$ref": "#/definitions/therealreal.ListingDetail" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "wolt.restaurantResponseDoc": { + "therealreal.searchResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wolt.RestaurantResponse" + "$ref": "#/definitions/therealreal.ProductsResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "wolt.searchResponseDoc": { + "therealreal.similarResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/wolt.SearchResponse" + "$ref": "#/definitions/therealreal.SimilarResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "wsj.ArticleResponse": { + "thestarmy.AuthorArticle": { "properties": { - "archive_timestamp": { + "image_url": { "type": "string" }, - "archive_url": { + "published_at": { "type": "string" }, - "author": { + "section": { "type": "string" }, - "paragraphs": { + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "thestarmy.AuthorResponse": { + "properties": { + "articles": { "items": { - "type": "string" + "$ref": "#/definitions/thestarmy.AuthorArticle" }, "type": "array" }, - "published_at": { + "email": { "type": "string" }, - "title": { + "name": { "type": "string" }, "url": { "type": "string" - }, - "word_count": { - "type": "integer" } }, "type": "object" }, - "wsj.AuthorArticle": { + "theverge.AuthorArticle": { "properties": { + "category": { + "type": "string" + }, + "excerpt": { + "type": "string" + }, "published_at": { "type": "string" }, @@ -259816,136 +264715,101 @@ }, "type": "object" }, - "wsj.AuthorResponse": { + "theverge.AuthorResponse": { "properties": { "articles": { "items": { - "$ref": "#/definitions/wsj.AuthorArticle" + "$ref": "#/definitions/theverge.AuthorArticle" }, "type": "array" }, "bio": { "type": "string" }, - "email": { - "type": "string" - }, "job_title": { "type": "string" }, "name": { "type": "string" }, - "social_accounts": { - "items": { - "$ref": "#/definitions/wsj.AuthorSocialAccount" - }, - "type": "array" - }, "url": { "type": "string" } }, "type": "object" }, - "wsj.AuthorSocialAccount": { + "thisismoney.AuthorArticle": { "properties": { - "platform": { + "excerpt": { "type": "string" }, - "url": { + "published_at": { "type": "string" - } - }, - "type": "object" - }, - "wsj.articleResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/wsj.ArticleResponse" + "title": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "wsj.authorResponseDoc": { + "thisismoney.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/wsj.AuthorResponse" + "articles": { + "items": { + "$ref": "#/definitions/thisismoney.AuthorArticle" + }, + "type": "array" }, - "msg": { - "example": "OK", + "bio": { "type": "string" - } - }, - "type": "object" - }, - "x.Metrics": { - "properties": { - "bookmarks": { - "type": "integer" }, - "likes": { - "type": "integer" + "coverage": { + "items": { + "type": "string" + }, + "type": "array" }, - "replies": { - "type": "integer" + "job_title": { + "type": "string" }, - "reposts": { - "type": "integer" + "name": { + "type": "string" }, - "views": { - "type": "integer" + "url": { + "type": "string" } }, "type": "object" }, - "x.Post": { + "threads.Author": { "properties": { - "author": { - "$ref": "#/definitions/x.User" - }, - "created_at": { - "type": "string" - }, "id": { + "description": "Threads user ID of the author.", "type": "string" }, - "metrics": { - "$ref": "#/definitions/x.Metrics" - }, - "quoted": { - "$ref": "#/definitions/x.PostQuote" - }, - "text": { + "name": { + "description": "Display name of the author.", "type": "string" }, - "url": { + "username": { + "description": "Threads username of the author.", "type": "string" } }, "type": "object" }, - "x.PostQuote": { + "threads.Post": { "properties": { "author": { - "$ref": "#/definitions/x.User" + "$ref": "#/definitions/threads.Author" }, - "created_at": { + "code": { "type": "string" }, - "id": { + "image_url": { "type": "string" }, "text": { @@ -259957,634 +264821,446 @@ }, "type": "object" }, - "x.Profile": { + "threads.Profile": { "properties": { - "affiliate_label": { - "description": "AffiliateLabel is the small highlighted-affiliation badge X shows next\nto the display name (e.g. \"Prime Video\" for an account run on behalf\nof that brand). Distinct from VerifiedType; empty when the account has\nno highlighted affiliation.", - "type": "string" - }, "avatar_url": { + "description": "URL of the profile picture.", "type": "string" }, - "banner_url": { - "type": "string" - }, - "bio_urls": { - "description": "BioURLs are links written inside the bio, expanded from their t.co form.\nDistinct from ExternalURL, which is the single profile-header link.", - "items": { - "type": "string" - }, - "type": "array" - }, - "created_at": { - "type": "string" - }, - "description": { - "type": "string" - }, - "email": { - "description": "Email is an address the account self-published in its own bio text. It is\nonly ever extracted, never inferred or de-obfuscated. Empty for the vast\nmajority of profiles.", - "type": "string" - }, - "external_url": { - "type": "string" - }, - "id": { - "type": "string" - }, - "is_blue_verified": { - "type": "boolean" - }, - "is_default_profile_image": { - "description": "IsDefaultProfileImage marks accounts still on the placeholder avatar --\na strong shell/abandoned-account signal.", - "type": "boolean" - }, - "is_protected": { - "type": "boolean" - }, - "is_unavailable": { - "type": "boolean" - }, - "location": { + "biography": { + "description": "Bio text shown on the profile.", "type": "string" }, - "metrics": { - "$ref": "#/definitions/x.ProfileMetrics" + "followers_count": { + "description": "Number of followers of the profile.", + "type": "integer" }, "name": { + "description": "Display name shown on the profile.", "type": "string" }, + "threads_count": { + "description": "Number of threads the profile has posted.", + "type": "integer" + }, "url": { + "description": "URL of the profile on Threads.", "type": "string" }, "username": { - "type": "string" - }, - "verified_type": { - "description": "VerifiedType distinguishes the flavour of verification (e.g. \"Business\",\n\"Government\"); empty for ordinary/blue accounts.", + "description": "Threads username of the profile.", "type": "string" } }, "type": "object" }, - "x.ProfileMetrics": { + "threads.ProfileMediaResult": { "properties": { - "followers": { - "type": "integer" - }, - "following": { - "type": "integer" - }, - "likes": { - "type": "integer" + "has_more": { + "description": "Whether Threads reports more public media beyond this page.", + "type": "boolean" }, - "listed": { - "description": "Listed is how many curated lists include this account -- the best\nauthority proxy in the payload. Media/Likes are activity signals.\nOnly the syndication source populates these; the x.com page parser\nleaves them zero.", - "type": "integer" + "items": { + "description": "Public media posts, including image and video attachments when available.", + "items": { + "$ref": "#/definitions/threads.Thread" + }, + "type": "array" }, - "media": { - "type": "integer" + "pagination_limited": { + "description": "True when Threads gates additional media behind login or exposes no supported continuation cursor.", + "type": "boolean" }, - "posts": { - "type": "integer" + "username": { + "description": "Profile whose public Media tab was read.", + "type": "string" } }, "type": "object" }, - "x.ProfilePosts": { + "threads.ProfilePostsResult": { "properties": { - "count": { - "type": "integer" + "has_more": { + "type": "boolean" }, - "posts": { + "items": { "items": { - "$ref": "#/definitions/x.Post" + "$ref": "#/definitions/threads.Thread" }, "type": "array" }, - "url": { + "next_cursor": { + "description": "Cursor to pass to fetch the next page when Threads provides one.", "type": "string" }, + "pagination_limited": { + "description": "True when Threads reports more posts but does not provide a usable cursor.", + "type": "boolean" + }, "username": { "type": "string" } }, "type": "object" }, - "x.User": { + "threads.ProfileRepliesResult": { "properties": { - "avatar_url": { - "type": "string" - }, - "banner_url": { - "type": "string" - }, - "id": { - "type": "string" - }, - "is_blue_verified": { - "type": "boolean" - }, - "is_protected": { + "has_more": { + "description": "Whether Threads reports more public items beyond the first page.", "type": "boolean" }, - "name": { - "type": "string" + "items": { + "description": "Public items exposed on that tab, preserving each item's actual author.", + "items": { + "$ref": "#/definitions/threads.Thread" + }, + "type": "array" }, - "url": { - "type": "string" + "pagination_limited": { + "description": "True when Threads gates additional items behind login or exposes no supported continuation cursor.", + "type": "boolean" }, "username": { + "description": "Profile whose public Replies tab was read.", "type": "string" } }, "type": "object" }, - "x.postResponseDoc": { + "threads.ProfileRepostsResult": { "properties": { - "code": { - "example": 200, - "type": "integer" + "has_more": { + "description": "Whether Threads reports more public items beyond the first page.", + "type": "boolean" }, - "data": { - "$ref": "#/definitions/x.Post" + "items": { + "description": "Public posts reposted by the profile, retaining their original authors.", + "items": { + "$ref": "#/definitions/threads.Thread" + }, + "type": "array" }, - "msg": { - "example": "OK", + "pagination_limited": { + "description": "True when Threads gates additional items behind login or exposes no supported continuation cursor.", + "type": "boolean" + }, + "username": { + "description": "Profile whose public Reposts tab was read.", "type": "string" } }, "type": "object" }, - "x.profilePostsResponseDoc": { + "threads.ProfileTopicsResult": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/x.ProfilePosts" + "items": { + "description": "Every topic tag exposed on the profile page.", + "items": { + "$ref": "#/definitions/threads.Topic" + }, + "type": "array" }, - "msg": { - "example": "OK", + "username": { + "description": "Profile whose public topic tags were read.", "type": "string" } }, "type": "object" }, - "x.profileResponseDoc": { + "threads.RepliesResult": { "properties": { "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/x.Profile" - }, - "msg": { - "example": "OK", "type": "string" - } - }, - "type": "object" - }, - "xbox.BrowseResponse": { - "properties": { + }, "has_more": { - "example": true, + "description": "Whether Threads reports more replies beyond this page.", "type": "boolean" }, "items": { + "description": "Replies to the post, each as a thread.", "items": { - "$ref": "#/definitions/xbox.GameSummary" + "$ref": "#/definitions/threads.Thread" }, "type": "array" }, "next_cursor": { + "description": "Cursor to pass to fetch the next page of replies.", "type": "string" }, - "total_items": { - "example": 17620, - "type": "integer" + "pagination_limited": { + "description": "True when more replies exist but Threads gives no usable cursor to fetch them.", + "type": "boolean" + }, + "username": { + "description": "Username of the post's author.", + "type": "string" } }, "type": "object" }, - "xbox.CollectionResponse": { + "threads.SearchResult": { "properties": { "has_more": { - "example": true, + "description": "Whether more results are available after this page.", "type": "boolean" }, - "id": { - "example": "TopFreeGames", - "type": "string" - }, "items": { + "description": "Threads matching the search, one entry per post.", "items": { - "$ref": "#/definitions/xbox.GameSummary" + "$ref": "#/definitions/threads.Thread" }, "type": "array" }, "next_cursor": { + "description": "Cursor to pass to fetch the next page of results.", "type": "string" }, - "title": { - "example": "Top free games", - "type": "string" - }, - "total_items": { - "example": 500, - "type": "integer" - } - }, - "type": "object" - }, - "xbox.ContentRating": { - "properties": { - "age": { - "example": 17, - "type": "integer" - }, - "board": { - "example": "ESRB", - "type": "string" - }, - "description": { - "example": "For ages 17 and up", - "type": "string" - }, - "descriptors": { - "example": [ - "[\"Blood and Gore\"", - "\"Intense Violence\"]" - ], - "items": { - "type": "string" - }, - "type": "array" + "pagination_limited": { + "description": "True when Threads gates further results behind login or provides no supported continuation.", + "type": "boolean" }, - "image_url": { + "query": { + "description": "Search query that was run.", "type": "string" }, - "rating": { - "example": "MATURE 17+", + "sort": { + "description": "Result ordering selected for the search.", "type": "string" } }, "type": "object" }, - "xbox.GameDetail": { + "threads.Thread": { "properties": { - "available_on": { - "example": [ - "[\"XboxSeriesX|S\"", - "\"PC\"]" + "author": { + "allOf": [ + { + "$ref": "#/definitions/threads.Author" + } ], - "items": { - "type": "string" - }, - "type": "array" - }, - "average_rating": { - "example": 4.5, - "type": "number" + "description": "Account that posted the thread." }, - "box_art_url": { + "code": { "type": "string" }, - "categories": { - "example": [ - "[\"Shooter\"]" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "content_rating": { - "$ref": "#/definitions/xbox.ContentRating" - }, - "description": { + "created_at": { + "description": "Time the thread was posted, in UTC (RFC 3339).", "type": "string" }, - "has_add_ons": { - "type": "boolean" - }, - "hero_art_url": { + "id": { + "description": "Threads post ID.", "type": "string" }, - "included_with_subscription_ids": { - "example": [ - "[\"CFQ7TTC0KHS0\"]" - ], + "image_urls": { + "description": "URLs of the images attached to the thread.", "items": { "type": "string" }, "type": "array" }, - "is_preorder": { + "is_reply": { + "description": "Whether the thread is a reply to another thread.", "type": "boolean" }, - "poster_url": { - "type": "string" - }, - "price": { - "$ref": "#/definitions/xbox.Price" + "like_count": { + "description": "Number of likes on the thread.", + "type": "integer" }, - "product_id": { - "example": "9PK3G146XXVF", - "type": "string" + "quote_count": { + "description": "Number of times the thread was quoted.", + "type": "integer" }, - "product_kind": { - "example": "Game", - "type": "string" + "reply_count": { + "description": "Number of replies to the thread.", + "type": "integer" }, - "publisher": { - "example": "343 Industries", + "reply_to": { + "description": "Username of the account this thread replies to.", "type": "string" }, - "rating_count": { + "repost_count": { + "description": "Number of times the thread was reposted.", "type": "integer" }, - "release_date_utc": { - "example": "2021-12-08T00:00:00Z", - "type": "string" - }, - "short_description": { + "text": { + "description": "Text of the thread.", "type": "string" }, - "title": { - "example": "Halo Infinite", - "type": "string" + "topic": { + "allOf": [ + { + "$ref": "#/definitions/threads.Topic" + } + ], + "description": "Public topic/community tag attached to the thread, when present." }, "url": { - "example": "https://www.xbox.com/en-US/games/store/game/9pk3g146xxvf", + "description": "URL of the thread on Threads.", "type": "string" }, - "videos": { + "video_urls": { + "description": "URLs of the videos attached to the thread.", "items": { - "$ref": "#/definitions/xbox.Video" + "type": "string" }, "type": "array" } }, "type": "object" }, - "xbox.GameSummary": { + "threads.Topic": { "properties": { - "available_on": { - "example": [ - "[\"XboxSeriesX|S\"", - "\"PC\"]" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "average_rating": { - "example": 4.5, - "type": "number" - }, - "box_art_url": { - "type": "string" - }, - "categories": { - "example": [ - "[\"Shooter\"]" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "content_rating": { - "$ref": "#/definitions/xbox.ContentRating" - }, - "hero_art_url": { - "type": "string" - }, - "is_preorder": { - "type": "boolean" - }, - "poster_url": { + "community_emoji": { + "description": "Community reaction emoji, when present on a post tag.", "type": "string" }, - "price": { - "$ref": "#/definitions/xbox.Price" - }, - "product_id": { - "example": "9PK3G146XXVF", + "community_favicon_url": { + "description": "Community icon URL, when present.", "type": "string" }, - "product_kind": { - "example": "Game", + "display_name": { + "description": "Topic label shown in Threads.", "type": "string" }, - "publisher": { - "example": "343 Industries", + "id": { + "description": "Numeric Threads topic tag identifier.", "type": "string" }, - "rating_count": { - "type": "integer" + "is_community": { + "description": "Whether Threads identifies this topic as a community.", + "type": "boolean" }, - "release_date_utc": { - "example": "2021-12-08T00:00:00Z", + "name": { + "description": "Canonical topic query returned on profile topic lists.", "type": "string" }, - "title": { - "example": "Halo Infinite", + "search_query": { + "description": "Query to pair with ID when calling the topic search endpoint.", "type": "string" }, - "url": { - "example": "https://www.xbox.com/en-US/games/store/game/9pk3g146xxvf", + "tag_cluster_name": { + "description": "Topic cluster or category label, when present.", "type": "string" } }, "type": "object" }, - "xbox.Price": { + "threads.TopicSearchResult": { "properties": { - "currency": { - "example": "USD", - "type": "string" + "has_more": { + "description": "Whether Threads reports another page.", + "type": "boolean" }, - "discount_percentage": { - "example": 25, - "type": "number" + "items": { + "description": "Public threads matching the topic tag.", + "items": { + "$ref": "#/definitions/threads.Thread" + }, + "type": "array" }, - "is_free": { - "example": false, + "pagination_limited": { + "description": "True when Threads gates further results behind login or provides no supported continuation.", "type": "boolean" }, - "list_price": { - "example": 59.99, - "type": "number" - }, - "msrp": { - "example": 59.99, - "type": "number" + "query": { + "description": "Search query used by the topic tag.", + "type": "string" }, - "sale_end_date_utc": { - "example": "2026-10-23T03:59:59Z", + "topic_id": { + "description": "Numeric Threads topic tag identifier.", "type": "string" } }, "type": "object" }, - "xbox.RatingsSummary": { + "threads.postResponseDoc": { "properties": { - "average_rating": { - "example": 3.3, - "type": "number" - }, - "star1_count": { - "example": 82702, - "type": "integer" - }, - "star2_count": { - "example": 8799, - "type": "integer" - }, - "star3_count": { - "example": 9863, - "type": "integer" - }, - "star4_count": { - "example": 12807, + "code": { + "example": 200, "type": "integer" }, - "star5_count": { - "example": 112007, - "type": "integer" + "data": { + "$ref": "#/definitions/threads.Post" }, - "total_count": { - "example": 226178, - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "xbox.Review": { + "threads.profileMediaResponseDoc": { "properties": { - "device_family": { - "example": "Windows.Xbox", - "type": "string" - }, - "helpful_negative": { - "example": 647, - "type": "integer" - }, - "helpful_positive": { - "example": 16025, - "type": "integer" - }, - "rating": { - "example": 5, + "code": { + "example": 200, "type": "integer" }, - "review_id": { - "type": "string" - }, - "submitted_date_time": { - "example": "2024-04-19T18:53:50Z", - "type": "string" - }, - "text": { - "type": "string" - }, - "title": { - "example": "Great game", - "type": "string" + "data": { + "$ref": "#/definitions/threads.ProfileMediaResult" }, - "user_name": { - "example": "Ryder2010676", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "xbox.ReviewsResponse": { + "threads.profilePostsResponseDoc": { "properties": { - "product_id": { - "example": "BT5P2X999VH2", - "type": "string" - }, - "ratings": { - "$ref": "#/definitions/xbox.RatingsSummary" + "code": { + "example": 200, + "type": "integer" }, - "reviews": { - "items": { - "$ref": "#/definitions/xbox.Review" - }, - "type": "array" + "data": { + "$ref": "#/definitions/threads.ProfilePostsResult" }, - "total_reviews": { - "example": 91078, - "type": "integer" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "xbox.SearchResponse": { + "threads.profileRepliesResponseDoc": { "properties": { - "category": { - "example": "games", - "type": "string" - }, - "has_more": { - "example": true, - "type": "boolean" - }, - "items": { - "items": { - "$ref": "#/definitions/xbox.GameSummary" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "next_cursor": { - "type": "string" + "data": { + "$ref": "#/definitions/threads.ProfileRepliesResult" }, - "query": { - "example": "halo", + "msg": { + "example": "OK", "type": "string" - }, - "total_items": { - "example": 41, - "type": "integer" } }, "type": "object" }, - "xbox.Video": { + "threads.profileRepostsResponseDoc": { "properties": { - "height": { + "code": { + "example": 200, "type": "integer" }, - "preview_image_url": { - "type": "string" - }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/threads.ProfileRepostsResult" }, - "url": { + "msg": { + "example": "OK", "type": "string" - }, - "width": { - "type": "integer" } }, "type": "object" }, - "xbox.browseResponseDoc": { + "threads.profileResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/xbox.BrowseResponse" + "$ref": "#/definitions/threads.Profile" }, "msg": { "example": "OK", @@ -260593,14 +265269,14 @@ }, "type": "object" }, - "xbox.collectionResponseDoc": { + "threads.profileTopicsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/xbox.CollectionResponse" + "$ref": "#/definitions/threads.ProfileTopicsResult" }, "msg": { "example": "OK", @@ -260609,14 +265285,14 @@ }, "type": "object" }, - "xbox.gameResponseDoc": { + "threads.repliesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/xbox.GameDetail" + "$ref": "#/definitions/threads.RepliesResult" }, "msg": { "example": "OK", @@ -260625,14 +265301,14 @@ }, "type": "object" }, - "xbox.reviewsResponseDoc": { + "threads.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/xbox.ReviewsResponse" + "$ref": "#/definitions/threads.SearchResult" }, "msg": { "example": "OK", @@ -260641,14 +265317,14 @@ }, "type": "object" }, - "xbox.searchResponseDoc": { + "threads.topicSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/xbox.SearchResponse" + "$ref": "#/definitions/threads.TopicSearchResult" }, "msg": { "example": "OK", @@ -260657,30 +265333,39 @@ }, "type": "object" }, - "xda.AuthorResponse": { + "ticketmaster.Attraction": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" + "classification": { + "$ref": "#/definitions/ticketmaster.Classification" }, - "biography": { + "discovery_id": { + "example": "K8vZ9172Qo7", + "type": "string" + }, + "has_artist_video": { + "type": "boolean" + }, + "id": { + "example": "1688071", "type": "string" }, "image_url": { "type": "string" }, "name": { + "example": "Ariana Grande", "type": "string" }, - "social_links": { + "setlist_source_url": { + "type": "string" + }, + "setlists": { "items": { - "$ref": "#/definitions/valnet.AuthorSocialLink" + "$ref": "#/definitions/ticketmaster.Setlist" }, "type": "array" }, - "title": { + "synopsis": { "type": "string" }, "url": { @@ -260689,397 +265374,614 @@ }, "type": "object" }, - "xiaohongshu.Channel": { + "ticketmaster.AttractionRef": { "properties": { + "discovery_id": { + "example": "K8vZ9172Qo7", + "type": "string" + }, "id": { - "example": "homefeed.food_v3", + "example": "1688071", + "type": "string" + }, + "image_url": { "type": "string" }, "name": { - "example": "美食", + "example": "Ariana Grande", + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "xiaohongshu.Comment": { + "ticketmaster.AttractionRelatedResponse": { "properties": { - "author": { - "$ref": "#/definitions/xiaohongshu.CommentAuthor" + "attraction_id": { + "example": "1688071", + "type": "string" }, - "comment_id": { - "example": "0123456789abcdef01234567", + "attractions": { + "items": { + "$ref": "#/definitions/ticketmaster.AttractionRef" + }, + "type": "array" + }, + "count": { + "type": "integer" + }, + "fetched_at": { "type": "string" }, - "content": { + "source_url": { "type": "string" + } + }, + "type": "object" + }, + "ticketmaster.AttractionResponse": { + "properties": { + "attraction": { + "$ref": "#/definitions/ticketmaster.Attraction" }, - "created_at": { - "example": 1700000000, - "type": "integer" + "fetched_at": { + "type": "string" }, - "ip_location": { - "example": "上海", + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "ticketmaster.AttractionReviewsResponse": { + "properties": { + "ai_review_summary": { "type": "string" }, - "like_count": { - "example": 12, + "attraction_id": { + "example": "1688071", + "type": "string" + }, + "average_rating": { + "example": 4.6, + "type": "number" + }, + "best_rating": { + "example": 5, + "type": "number" + }, + "fetched_at": { + "type": "string" + }, + "limit": { + "example": 10, "type": "integer" }, - "sub_comment_count": { - "example": 3, + "offset": { + "example": 0, "type": "integer" }, - "sub_comments": { + "reviews": { "items": { - "$ref": "#/definitions/xiaohongshu.Comment" + "$ref": "#/definitions/ticketmaster.Review" }, "type": "array" + }, + "source_url": { + "type": "string" + }, + "time_zone": { + "example": "America/New_York", + "type": "string" + }, + "total": { + "example": 2024, + "type": "integer" } }, "type": "object" }, - "xiaohongshu.CommentAuthor": { + "ticketmaster.Classification": { "properties": { - "avatar_url": { + "genre": { + "example": "Pop", "type": "string" }, - "nickname": { - "example": "synthetic_user", + "segment": { + "example": "Music", "type": "string" }, - "user_id": { - "example": "000000000000000000000002", + "sub_genre": { + "example": "Electro Pop", + "type": "string" + }, + "sub_type": { + "example": "Musician", + "type": "string" + }, + "type": { + "example": "Individual", "type": "string" } }, "type": "object" }, - "xiaohongshu.CommentsResponse": { + "ticketmaster.DiscoverCategoriesResponse": { "properties": { + "categories": { + "items": { + "$ref": "#/definitions/ticketmaster.DiscoverCategory" + }, + "type": "array" + }, "count": { - "example": 20, "type": "integer" }, - "cursor": { + "fetched_at": { "type": "string" }, - "has_more": { - "type": "boolean" + "page": { + "type": "integer" }, - "items": { + "per_page": { + "type": "integer" + }, + "section": { + "type": "string" + }, + "source_urls": { "items": { - "$ref": "#/definitions/xiaohongshu.Comment" + "type": "string" }, "type": "array" }, - "note_id": { - "example": "0123456789abcdef01234567", - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "xiaohongshu.ExploreCard": { + "ticketmaster.DiscoverCategory": { "properties": { - "author": { - "$ref": "#/definitions/xiaohongshu.NoteAuthor" - }, - "cover_url": { - "type": "string" - }, - "liked_count": { - "example": 14000, - "type": "integer" - }, - "note_id": { - "example": "0123456789abcdef01234567", + "id": { "type": "string" }, - "note_url": { - "type": "string" + "major": { + "type": "boolean" }, - "title": { + "name": { "type": "string" }, - "type": { - "example": "video", + "section": { "type": "string" }, - "xsec_token": { + "url": { "type": "string" } }, "type": "object" }, - "xiaohongshu.ExploreResponse": { + "ticketmaster.DiscoverCitiesResponse": { "properties": { - "channel_id": { - "example": "homefeed_recommend", - "type": "string" - }, - "channels": { + "cities": { "items": { - "$ref": "#/definitions/xiaohongshu.Channel" + "$ref": "#/definitions/ticketmaster.DiscoverCity" }, "type": "array" }, "count": { - "example": 30, "type": "integer" }, - "items": { - "items": { - "$ref": "#/definitions/xiaohongshu.ExploreCard" - }, - "type": "array" + "country": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "total": { + "type": "integer" } }, "type": "object" }, - "xiaohongshu.NoteAuthor": { + "ticketmaster.DiscoverCity": { "properties": { - "avatar_url": { + "country": { "type": "string" }, - "nickname": { - "example": "synthetic_user", + "image_url": { "type": "string" }, - "user_id": { - "example": "000000000000000000000002", + "locale": { + "type": "string" + }, + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "xiaohongshu.NoteResponse": { + "ticketmaster.EventDetail": { "properties": { - "author": { - "$ref": "#/definitions/xiaohongshu.NoteAuthor" + "attractions": { + "items": { + "$ref": "#/definitions/ticketmaster.AttractionRef" + }, + "type": "array" + }, + "cancelled": { + "type": "boolean" + }, + "classification": { + "$ref": "#/definitions/ticketmaster.Classification" + }, + "currency": { + "example": "USD", + "type": "string" }, "description": { "type": "string" }, - "image_urls": { - "items": { - "type": "string" - }, - "type": "array" + "discovery_id": { + "example": "vv1A7ZkG_GkdqBxS4", + "type": "string" }, - "note_id": { - "example": "0123456789abcdef01234567", + "event_change_status": { + "example": "none", "type": "string" }, - "published_at": { - "example": "2026-09-22T04:03:46Z", + "event_type": { + "example": "STANDARD", "type": "string" }, - "stats": { - "$ref": "#/definitions/xiaohongshu.NoteStats" + "id": { + "example": "04006319DDEA2CD5", + "type": "string" }, - "tags": { + "image_url": { + "type": "string" + }, + "limited_availability": { + "type": "boolean" + }, + "onsale_time": { + "example": "2025-09-10T15:00:00Z", + "type": "string" + }, + "postponed": { + "type": "boolean" + }, + "presales": { "items": { - "$ref": "#/definitions/xiaohongshu.NoteTag" + "$ref": "#/definitions/ticketmaster.Presale" }, "type": "array" }, - "title": { + "product_type": { + "example": "General", "type": "string" }, - "type": { - "example": "video", + "rescheduled": { + "type": "boolean" + }, + "seatmap_url": { "type": "string" }, - "url": { + "sold_out": { + "type": "boolean" + }, + "start_time": { + "example": "2026-08-04T02:00:00Z", "type": "string" }, - "video_duration_seconds": { - "type": "integer" + "tba": { + "type": "boolean" }, - "video_url": { + "ticketing_status": { + "example": "UNKNOWN", "type": "string" - } - }, - "type": "object" - }, - "xiaohongshu.NoteStats": { - "properties": { - "collected_count": { - "type": "integer" }, - "comment_count": { - "type": "integer" + "time_zone": { + "example": "America/Chicago", + "type": "string" }, - "liked_count": { - "type": "integer" + "title": { + "example": "Ariana Grande - The Eternal Sunshine Tour", + "type": "string" }, - "share_count": { - "type": "integer" + "url": { + "type": "string" + }, + "venue": { + "$ref": "#/definitions/ticketmaster.VenueRef" + }, + "virtual": { + "type": "boolean" } }, "type": "object" }, - "xiaohongshu.NoteTag": { + "ticketmaster.EventResponse": { "properties": { - "id": { + "event": { + "$ref": "#/definitions/ticketmaster.EventDetail" + }, + "fetched_at": { "type": "string" }, - "name": { - "example": "美食", + "source_url": { "type": "string" } }, "type": "object" }, - "xiaohongshu.SuggestItem": { + "ticketmaster.EventSummary": { "properties": { - "highlight_flags": { + "attractions": { "items": { - "type": "boolean" + "$ref": "#/definitions/ticketmaster.AttractionRef" }, "type": "array" }, - "search_type": { - "example": "notes", + "cancelled": { + "type": "boolean" + }, + "discovery_id": { + "example": "vv1A7ZkG_GkdqBxS4", "type": "string" }, - "text": { - "example": "coffee", + "event_change_status": { + "example": "none", "type": "string" }, - "type": { - "example": "top_note", + "id": { + "example": "04006319DDEA2CD5", "type": "string" - } - }, - "type": "object" - }, - "xiaohongshu.SuggestResponse": { - "properties": { - "count": { - "example": 10, - "type": "integer" }, - "items": { + "image_url": { + "type": "string" + }, + "limited_availability": { + "type": "boolean" + }, + "onsale_time": { + "example": "2025-09-10T15:00:00Z", + "type": "string" + }, + "postponed": { + "type": "boolean" + }, + "presales": { "items": { - "$ref": "#/definitions/xiaohongshu.SuggestItem" + "$ref": "#/definitions/ticketmaster.Presale" }, "type": "array" }, - "keyword": { - "example": "coffee", + "rescheduled": { + "type": "boolean" + }, + "seatmap_url": { "type": "string" }, - "search_cpl_id": { + "sold_out": { + "type": "boolean" + }, + "start_time": { + "example": "2026-08-04T02:00:00Z", "type": "string" }, - "word_request_id": { + "tba": { + "type": "boolean" + }, + "ticketing_status": { + "example": "UNKNOWN", + "type": "string" + }, + "time_zone": { + "example": "America/Chicago", "type": "string" + }, + "title": { + "example": "Ariana Grande - The Eternal Sunshine Tour", + "type": "string" + }, + "url": { + "type": "string" + }, + "venue": { + "$ref": "#/definitions/ticketmaster.VenueRef" + }, + "virtual": { + "type": "boolean" } }, "type": "object" }, - "xiaohongshu.commentsResponseDoc": { + "ticketmaster.EventsResponse": { "properties": { - "code": { - "example": 200, + "count": { + "example": 20, "type": "integer" }, - "data": { - "$ref": "#/definitions/xiaohongshu.CommentsResponse" + "entity_id": { + "type": "string" }, - "msg": { - "example": "OK", + "events": { + "items": { + "$ref": "#/definitions/ticketmaster.EventSummary" + }, + "type": "array" + }, + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "xiaohongshu.exploreResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/xiaohongshu.ExploreResponse" + "query": { + "type": "string" }, - "msg": { - "example": "OK", + "sort": { + "example": "date", + "type": "string" + }, + "source_url": { "type": "string" + }, + "total": { + "example": 28, + "type": "integer" } }, "type": "object" }, - "xiaohongshu.noteResponseDoc": { + "ticketmaster.Presale": { "properties": { - "code": { - "example": 200, - "type": "integer" + "end_time": { + "example": "2025-09-10T03:00:00Z", + "type": "string" }, - "data": { - "$ref": "#/definitions/xiaohongshu.NoteResponse" + "name": { + "example": "Artist Presale", + "type": "string" }, - "msg": { - "example": "OK", + "start_time": { + "example": "2025-09-09T15:00:00Z", "type": "string" } }, "type": "object" }, - "xiaohongshu.suggestResponseDoc": { + "ticketmaster.Review": { "properties": { - "code": { - "example": 200, + "city": { + "example": "Chicago", + "type": "string" + }, + "date_created": { + "example": "2026-08-14T16:14:29Z", + "type": "string" + }, + "nick_name": { + "example": "Lynn", + "type": "string" + }, + "rating": { + "example": 5, "type": "integer" }, - "data": { - "$ref": "#/definitions/xiaohongshu.SuggestResponse" + "review": { + "type": "string" }, - "msg": { - "example": "OK", + "title": { + "example": "Best concert of my life", + "type": "string" + }, + "venue": { + "example": "United Center", "type": "string" } }, "type": "object" }, - "yahooautos.ArticleResponse": { + "ticketmaster.Setlist": { "properties": { - "author": { + "city_name": { + "example": "London", "type": "string" }, - "description": { + "country_name": { + "example": "United Kingdom", "type": "string" }, - "image_url": { + "event_date": { + "example": "2026-08-20", "type": "string" }, - "keywords": { + "sets": { "items": { - "type": "string" + "$ref": "#/definitions/ticketmaster.SetlistSet" }, "type": "array" }, - "paragraphs": { + "tour_name": { + "example": "Eternal Sunshine", + "type": "string" + }, + "venue_name": { + "example": "The O2 Arena", + "type": "string" + } + }, + "type": "object" + }, + "ticketmaster.SetlistSet": { + "properties": { + "name": { + "example": "Act I", + "type": "string" + }, + "songs": { "items": { - "type": "string" + "$ref": "#/definitions/ticketmaster.SetlistSong" }, "type": "array" + } + }, + "type": "object" + }, + "ticketmaster.SetlistSong": { + "properties": { + "name": { + "example": "thank u, next", + "type": "string" }, - "provider": { + "original_artist": { + "example": "Lady Gaga", "type": "string" }, - "published_at": { + "performance_notes": { + "example": "extended outro", "type": "string" }, - "section": { + "pre_recorded": { + "type": "boolean" + } + }, + "type": "object" + }, + "ticketmaster.Suggestion": { + "properties": { + "category": { + "type": "string" + }, + "event_count": { + "type": "integer" + }, + "image_url": { "type": "string" }, "title": { "type": "string" }, - "updated_at": { + "type": { "type": "string" }, "url": { @@ -261088,59 +265990,70 @@ }, "type": "object" }, - "yahooautos.CategoryPaginate": { + "ticketmaster.SuggestionsResponse": { "properties": { - "next_page": { - "example": 2, + "count": { "type": "integer" }, - "page": { - "example": 1, - "type": "integer" - } - }, - "type": "object" - }, - "yahooautos.CategoryResponse": { - "properties": { - "category": { + "fetched_at": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/yahooautos.StreamItem" - }, - "type": "array" + "query": { + "type": "string" }, - "pagination": { - "$ref": "#/definitions/yahooautos.CategoryPaginate" - } - }, - "type": "object" - }, - "yahooautos.HomeResponse": { - "properties": { - "items": { + "source_url": { + "type": "string" + }, + "suggestions": { "items": { - "$ref": "#/definitions/yahooautos.StreamItem" + "$ref": "#/definitions/ticketmaster.Suggestion" }, "type": "array" } }, "type": "object" }, - "yahooautos.StreamItem": { + "ticketmaster.TrendingAttraction": { "properties": { - "category": { + "discovery_id": { + "example": "K8vZ9172Qo7", + "type": "string" + }, + "genre": { + "example": "Pop", + "type": "string" + }, + "genre_id": { + "example": "KnvZfZ7vAev", "type": "string" }, "id": { + "example": "1688071", "type": "string" }, - "thumbnail_url": { + "image_url": { "type": "string" }, - "title": { + "images": { + "items": { + "$ref": "#/definitions/ticketmaster.TrendingAttractionImage" + }, + "type": "array" + }, + "name": { + "example": "Ariana Grande", + "type": "string" + }, + "rank": { + "example": 1, + "type": "integer" + }, + "segment": { + "example": "Music", + "type": "string" + }, + "segment_id": { + "example": "KZFzniwnSyZfZ7v7nJ", "type": "string" }, "url": { @@ -261149,90 +266062,104 @@ }, "type": "object" }, - "yahooautos.articleResponseDoc": { + "ticketmaster.TrendingAttractionImage": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/yahooautos.ArticleResponse" + "ratio": { + "example": "16_9", + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "yahooautos.categoryResponseDoc": { + "ticketmaster.TrendingAttractionsResponse": { "properties": { - "code": { - "example": 200, + "attractions": { + "items": { + "$ref": "#/definitions/ticketmaster.TrendingAttraction" + }, + "type": "array" + }, + "count": { + "example": 10, "type": "integer" }, - "data": { - "$ref": "#/definitions/yahooautos.CategoryResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" } }, "type": "object" }, - "yahooautos.homeResponseDoc": { + "ticketmaster.Venue": { "properties": { - "code": { - "example": 200, - "type": "integer" + "address": { + "example": "1901 W Madison", + "type": "string" }, - "data": { - "$ref": "#/definitions/yahooautos.HomeResponse" + "city": { + "example": "Chicago", + "type": "string" }, - "msg": { - "example": "OK", + "city_categories": { + "items": { + "$ref": "#/definitions/ticketmaster.VenueCityCategory" + }, + "type": "array" + }, + "country": { + "example": "US", "type": "string" - } - }, - "type": "object" - }, - "yahooentertainment.ArticleResponse": { - "properties": { - "author": { + }, + "discovery_id": { + "example": "KovZpa2M7e", "type": "string" }, - "description": { + "id": { + "example": "32882", "type": "string" }, "image_url": { "type": "string" }, - "keywords": { + "info": { "items": { - "type": "string" + "$ref": "#/definitions/ticketmaster.VenueInfoBlock" }, "type": "array" }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" + "latitude": { + "example": 41.881244, + "type": "number" }, - "provider": { - "type": "string" + "longitude": { + "example": -87.674274, + "type": "number" }, - "published_at": { + "name": { + "example": "United Center", "type": "string" }, - "section": { + "postal_code": { + "example": "60612", "type": "string" }, - "title": { + "seat_maps": { + "items": { + "$ref": "#/definitions/ticketmaster.VenueSeatMap" + }, + "type": "array" + }, + "state": { + "example": "IL", "type": "string" }, - "updated_at": { + "time_zone": { + "example": "America/Chicago", "type": "string" }, "url": { @@ -261241,59 +266168,116 @@ }, "type": "object" }, - "yahooentertainment.CategoryPaginate": { + "ticketmaster.VenueCityCategory": { "properties": { - "next_page": { - "example": 2, - "type": "integer" + "id": { + "example": "KZFzniwnSyZfZ7v7nJ", + "type": "string" }, - "page": { - "example": 1, - "type": "integer" + "name": { + "example": "Concerts", + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "yahooentertainment.CategoryResponse": { + "ticketmaster.VenueEnhancedDetailsResponse": { "properties": { - "category": { + "fetched_at": { "type": "string" }, - "items": { + "header_image_url": { + "type": "string" + }, + "related_links": { "items": { - "$ref": "#/definitions/yahooentertainment.StreamItem" + "$ref": "#/definitions/ticketmaster.VenueRelatedLink" }, "type": "array" }, - "pagination": { - "$ref": "#/definitions/yahooentertainment.CategoryPaginate" + "source_url": { + "type": "string" + }, + "venue_id": { + "example": "32882", + "type": "string" } }, "type": "object" }, - "yahooentertainment.HomeResponse": { + "ticketmaster.VenueInfoBlock": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/yahooentertainment.StreamItem" - }, - "type": "array" + "name": { + "example": "Parking", + "type": "string" + }, + "text": { + "type": "string" } }, "type": "object" }, - "yahooentertainment.StreamItem": { + "ticketmaster.VenueRef": { "properties": { - "category": { + "address": { + "example": "1901 W Madison", + "type": "string" + }, + "city": { + "example": "Chicago", + "type": "string" + }, + "country": { + "example": "US", + "type": "string" + }, + "discovery_id": { + "example": "KovZpa2M7e", "type": "string" }, "id": { + "example": "32882", "type": "string" }, - "thumbnail_url": { + "image_url": { + "type": "string" + }, + "latitude": { + "example": 41.881244, + "type": "number" + }, + "longitude": { + "example": -87.674274, + "type": "number" + }, + "name": { + "example": "United Center", + "type": "string" + }, + "postal_code": { + "example": "60612", + "type": "string" + }, + "state": { + "example": "IL", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "ticketmaster.VenueRelatedLink": { + "properties": { + "image_url": { "type": "string" }, "title": { + "example": "Chicago Bulls", "type": "string" }, "url": { @@ -261302,14 +266286,40 @@ }, "type": "object" }, - "yahooentertainment.articleResponseDoc": { + "ticketmaster.VenueResponse": { + "properties": { + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "venue": { + "$ref": "#/definitions/ticketmaster.Venue" + } + }, + "type": "object" + }, + "ticketmaster.VenueSeatMap": { + "properties": { + "image_url": { + "type": "string" + }, + "name": { + "example": "Chicago Bulls", + "type": "string" + } + }, + "type": "object" + }, + "ticketmaster.attractionRelatedResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahooentertainment.ArticleResponse" + "$ref": "#/definitions/ticketmaster.AttractionRelatedResponse" }, "msg": { "example": "OK", @@ -261318,14 +266328,14 @@ }, "type": "object" }, - "yahooentertainment.categoryResponseDoc": { + "ticketmaster.attractionResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahooentertainment.CategoryResponse" + "$ref": "#/definitions/ticketmaster.AttractionResponse" }, "msg": { "example": "OK", @@ -261334,14 +266344,14 @@ }, "type": "object" }, - "yahooentertainment.homeResponseDoc": { + "ticketmaster.attractionReviewsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahooentertainment.HomeResponse" + "$ref": "#/definitions/ticketmaster.AttractionReviewsResponse" }, "msg": { "example": "OK", @@ -261350,904 +266360,523 @@ }, "type": "object" }, - "yahoofinance.ActionEvents": { + "ticketmaster.categoriesResponseDoc": { "properties": { - "capital_gains": { - "description": "Capital gain distributions in the period.", - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "code": { + "type": "integer" }, - "dividends": { - "description": "Dividend payments in the period.", - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "data": { + "$ref": "#/definitions/ticketmaster.DiscoverCategoriesResponse" }, - "splits": { - "description": "Stock splits in the period.", - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "msg": { + "type": "string" } }, "type": "object" }, - "yahoofinance.CalendarResponse": { + "ticketmaster.citiesResponseDoc": { "properties": { - "end": { - "description": "Last date covered, as YYYY-MM-DD.", - "example": "2026-05-27", - "type": "string" - }, - "limit": { - "description": "Maximum number of rows returned.", - "example": 12, - "type": "integer" - }, - "offset": { - "description": "Zero-based offset of the first row.", - "example": 0, + "code": { "type": "integer" }, - "rows": { - "description": "Calendar entries, one object per row, with the columns Yahoo Finance shows.", - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "start": { - "description": "First date covered, as YYYY-MM-DD.", - "example": "2026-05-20", - "type": "string" + "data": { + "$ref": "#/definitions/ticketmaster.DiscoverCitiesResponse" }, - "type": { - "description": "Calendar returned, for example `earnings`.", - "example": "earnings", + "msg": { "type": "string" } }, "type": "object" }, - "yahoofinance.CalendarsResponse": { + "ticketmaster.eventResponseDoc": { "properties": { - "calendars": { - "description": "Names of the available calendars.", - "items": { - "type": "string" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/ticketmaster.EventResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "yahoofinance.DomainListResponse": { + "ticketmaster.eventsResponseDoc": { "properties": { - "items": { - "description": "Sectors or industries in the list.", - "items": { - "$ref": "#/definitions/yahoofinance.DomainRef" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/ticketmaster.EventsResponse" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "yahoofinance.DomainRef": { + "ticketmaster.suggestionsResponseDoc": { "properties": { - "key": { - "description": "Identifier of the sector or industry. Use it with the matching endpoint.", - "example": "technology", - "type": "string" + "code": { + "type": "integer" }, - "name": { - "description": "Display name of the sector or industry.", - "example": "Technology", + "data": { + "$ref": "#/definitions/ticketmaster.SuggestionsResponse" + }, + "msg": { "type": "string" } }, "type": "object" }, - "yahoofinance.DownloadRequest": { + "ticketmaster.trendingAttractionsResponseDoc": { "properties": { - "auto_adjust": { - "type": "boolean" - }, - "back_adjust": { - "type": "boolean" - }, - "end": { - "type": "string" - }, - "include_actions": { - "type": "boolean" - }, - "include_prepost": { - "type": "boolean" - }, - "interval": { - "type": "string" - }, - "keepna": { - "type": "boolean" - }, - "period": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "rounding": { - "type": "boolean" + "data": { + "$ref": "#/definitions/ticketmaster.TrendingAttractionsResponse" }, - "start": { + "msg": { + "example": "OK", "type": "string" - }, - "symbols": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "symbols" - ], - "type": "object" - }, - "yahoofinance.DownloadResponse": { - "properties": { - "results": { - "description": "One result per requested symbol, in request order.", - "items": { - "$ref": "#/definitions/yahoofinance.DownloadResult" - }, - "type": "array" } }, "type": "object" }, - "yahoofinance.DownloadResult": { + "ticketmaster.venueEnhancedDetailsResponseDoc": { "properties": { - "error": { - "description": "Message explaining why the history could not be returned. Omitted on success.", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "history": { - "allOf": [ - { - "$ref": "#/definitions/yahoofinance.HistoryResponse" - } - ], - "description": "Price history of the symbol. Omitted when the symbol failed." + "data": { + "$ref": "#/definitions/ticketmaster.VenueEnhancedDetailsResponse" }, - "symbol": { - "description": "Ticker symbol this result is for.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "yahoofinance.EarningsDatesResponse": { + "ticketmaster.venueResponseDoc": { "properties": { - "limit": { - "description": "Maximum number of rows returned.", - "example": 12, - "type": "integer" - }, - "offset": { - "description": "Zero-based offset of the first row.", - "example": 0, + "code": { + "example": 200, "type": "integer" }, - "rows": { - "description": "Earnings dates, one object per row.", - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "data": { + "$ref": "#/definitions/ticketmaster.VenueResponse" }, - "symbol": { - "description": "Ticker symbol, for example `AAPL`.", - "example": "AAPL", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "yahoofinance.FinancialsResponse": { + "ticketweb.Attraction": { "properties": { - "modules": { - "additionalProperties": {}, - "description": "Statement line items grouped by section.", - "type": "object" + "category": { + "example": "Arts & Theater", + "type": "string" }, - "period": { - "description": "Reporting period returned, for example `annual`.", - "example": "annual", + "genre": { + "example": "Comedy", "type": "string" }, - "statement": { - "description": "Statement returned, for example `income`.", - "example": "income", + "id": { "type": "string" }, - "symbol": { - "description": "Ticker symbol, for example `AAPL`.", - "example": "AAPL", + "image_url": { + "type": "string" + }, + "name": { + "example": "Comedy Beast", "type": "string" } }, "type": "object" }, - "yahoofinance.HistoryMetadataResponse": { + "ticketweb.DeliveryMethod": { "properties": { - "meta": { - "additionalProperties": {}, - "description": "Metadata about the instrument and its price history, as Yahoo Finance reports it.", - "type": "object" + "description": { + "type": "string" }, - "symbol": { - "description": "Ticker symbol, for example `AAPL`.", - "example": "AAPL", + "fee": { + "example": "Free", + "type": "string" + }, + "name": { + "example": "eTickets", "type": "string" } }, "type": "object" }, - "yahoofinance.HistoryResponse": { + "ticketweb.EventDetail": { "properties": { - "events": { - "allOf": [ - { - "$ref": "#/definitions/yahoofinance.ActionEvents" - } - ], - "description": "Dividends, splits and capital gains in the period. Present when actions were requested." + "age_restriction": { + "example": 18, + "type": "integer" }, - "meta": { - "additionalProperties": {}, - "description": "Metadata about the instrument and the price series, as Yahoo Finance reports it.", - "type": "object" + "age_restriction_message": { + "example": "Ages 18+", + "type": "string" }, - "points": { - "description": "Price candles in time order.", + "announce_time": { + "type": "string" + }, + "attractions": { "items": { - "$ref": "#/definitions/yahoofinance.PricePoint" + "$ref": "#/definitions/ticketweb.Attraction" }, "type": "array" }, - "symbol": { - "description": "Ticker symbol, for example `AAPL`.", - "example": "AAPL", + "currency": { + "example": "USD", "type": "string" - } - }, - "type": "object" - }, - "yahoofinance.ISINResponse": { - "properties": { - "isin": { - "description": "International Securities Identification Number of the instrument, for example `US0378331005`.", - "example": "US0378331005", + }, + "delivery_methods": { + "items": { + "$ref": "#/definitions/ticketweb.DeliveryMethod" + }, + "type": "array" + }, + "description": { "type": "string" }, - "symbol": { - "description": "Ticker symbol, for example `AAPL`.", - "example": "AAPL", + "end_time": { "type": "string" - } - }, - "type": "object" - }, - "yahoofinance.IndustryResponse": { - "properties": { - "key": { - "description": "Identifier of the industry.", - "example": "semiconductors", + }, + "has_tickets": { + "example": true, + "type": "boolean" + }, + "id": { + "example": "14241184", + "type": "string" + }, + "image_url": { "type": "string" }, "name": { - "description": "Name of the industry.", - "example": "Semiconductors", + "example": "Comedy Beast", "type": "string" }, - "overview": { - "additionalProperties": {}, - "description": "Summary figures for the industry.", - "type": "object" + "on_sale_time": { + "example": "2026-07-01T12:05:00.000-05:00", + "type": "string" }, - "research_reports": { - "description": "Research reports about the industry.", + "price_range": { + "$ref": "#/definitions/ticketweb.PriceRange" + }, + "sections": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/ticketweb.TicketSection" }, "type": "array" }, - "sector_key": { - "description": "Identifier of the sector the industry belongs to.", - "example": "technology", + "start_time": { + "example": "2026-08-25T19:30:00.000-05:00", "type": "string" }, - "sector_name": { - "description": "Name of the sector the industry belongs to.", - "example": "Technology", + "terms_and_conditions": { "type": "string" }, - "symbol": { - "description": "Index symbol that tracks the industry.", + "url": { "type": "string" }, - "top_companies": { - "description": "Largest companies in the industry.", - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "top_growth_companies": { - "description": "Fastest-growing companies in the industry.", - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "top_performing_companies": { - "description": "Best-performing companies in the industry.", - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "venue": { + "$ref": "#/definitions/ticketweb.EventVenue" } }, "type": "object" }, - "yahoofinance.InfoResponse": { + "ticketweb.EventResponse": { "properties": { - "modules": { - "additionalProperties": {}, - "description": "Company and quote information grouped by section.", - "type": "object" + "event": { + "$ref": "#/definitions/ticketweb.EventDetail" }, - "symbol": { - "description": "Ticker symbol, for example `AAPL`.", - "example": "AAPL", + "fetched_at": { + "type": "string" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "yahoofinance.LookupResponse": { + "ticketweb.EventSummary": { "properties": { - "count": { - "description": "Number of documents returned.", - "example": 10, - "type": "integer" + "availability": { + "enum": [ + "in_stock", + "sold_out", + "unknown" + ], + "example": "in_stock", + "type": "string" }, - "documents": { - "description": "Matching instruments, one object per match.", - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "id": { + "example": "14241184", + "type": "string" }, - "query": { - "description": "Lookup text that was run.", - "example": "apple", + "image_url": { "type": "string" }, - "start": { - "description": "Zero-based offset of the first result.", - "example": 0, - "type": "integer" + "name": { + "example": "Comedy Beast", + "type": "string" }, - "total": { - "description": "Total number of matches reported by Yahoo Finance.", - "example": 10, - "type": "integer" + "start_time": { + "example": "2026-08-25T19:30", + "type": "string" }, - "type": { - "description": "Instrument type filter applied, for example `all`.", - "example": "all", + "url": { "type": "string" + }, + "venue": { + "$ref": "#/definitions/ticketweb.VenueRef" } }, "type": "object" }, - "yahoofinance.MarketStatusResponse": { + "ticketweb.EventVenue": { "properties": { - "market": { - "description": "Market code, for example `US`.", - "example": "US", + "address": { + "example": "907 South Peters", "type": "string" }, - "status": { - "additionalProperties": {}, - "description": "Current trading status of the market, as Yahoo Finance reports it.", - "type": "object" - } - }, - "type": "object" - }, - "yahoofinance.MarketSummaryResponse": { - "properties": { - "market": { - "description": "Market code, for example `US`.", + "city": { + "example": "New Orleans", + "type": "string" + }, + "country": { "example": "US", "type": "string" }, - "summary": { - "description": "Market summary entries, one object per index or instrument.", - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - "yahoofinance.ModuleResponse": { - "properties": { - "modules": { - "additionalProperties": {}, - "description": "Data grouped by section.", - "type": "object" + "id": { + "example": "15005", + "type": "string" }, - "symbol": { - "description": "Ticker symbol, for example `AAPL`.", - "example": "AAPL", + "map_image": { + "type": "string" + }, + "name": { + "example": "Howlin' Wolf", + "type": "string" + }, + "postal_code": { + "example": "70130", + "type": "string" + }, + "state": { + "example": "LA", + "type": "string" + }, + "time_zone": { + "example": "US/Central", "type": "string" } }, "type": "object" }, - "yahoofinance.OptionExpiration": { + "ticketweb.PriceRange": { "properties": { - "calls": { - "description": "Call option contracts for this expiration.", - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "expiration_date": { - "description": "Expiration date of the chain, in Unix seconds.", - "example": 1779235200, - "type": "integer" + "max": { + "example": 8.16, + "type": "number" }, - "puts": { - "description": "Put option contracts for this expiration.", - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "min": { + "example": 8.16, + "type": "number" } }, "type": "object" }, - "yahoofinance.OptionsResponse": { + "ticketweb.SearchResponse": { "properties": { - "expiration_dates": { - "description": "Available option expiration dates, in Unix seconds.", - "items": { - "type": "integer" - }, - "type": "array" + "count": { + "example": 20, + "type": "integer" }, - "options": { - "description": "Option chains, one entry per expiration date.", + "events": { "items": { - "$ref": "#/definitions/yahoofinance.OptionExpiration" + "$ref": "#/definitions/ticketweb.EventSummary" }, "type": "array" }, - "symbol": { - "description": "Ticker symbol, for example `AAPL`.", - "example": "AAPL", + "fetched_at": { "type": "string" }, - "underlying": { - "additionalProperties": {}, - "description": "Quote data of the underlying stock.", - "type": "object" + "page": { + "example": 1, + "type": "integer" + }, + "query": { + "type": "string" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "yahoofinance.PricePoint": { + "ticketweb.TicketFees": { "properties": { - "adj_close": { - "description": "Closing price adjusted for dividends and splits.", - "example": 211, + "credit_card": { + "example": 0.16, "type": "number" }, - "close": { - "description": "Closing price of the candle.", - "example": 211, + "facility": { "type": "number" }, - "datetime": { - "description": "Start of the candle, in UTC (RFC 3339).", - "example": "2026-05-18T13:30:00Z", - "type": "string" - }, - "high": { - "description": "Highest price of the candle.", - "example": 212, + "per_ticket": { + "example": 1.5, "type": "number" }, - "low": { - "description": "Lowest price of the candle.", - "example": 209, + "rebate": { + "example": 1.5, "type": "number" }, - "open": { - "description": "Opening price of the candle.", - "example": 210, + "taxes": { "type": "number" - }, - "timestamp": { - "description": "Start of the candle, in Unix seconds.", - "example": 1779111000, - "type": "integer" - }, - "volume": { - "description": "Number of shares traded during the candle.", - "example": 54200000, - "type": "integer" } }, "type": "object" }, - "yahoofinance.QuoteResponse": { + "ticketweb.TicketPrice": { "properties": { - "quotes": { - "description": "Quote data, one object per symbol.", - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "base": { + "example": 5, + "type": "number" }, - "symbols": { - "description": "Ticker symbols that were requested.", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "yahoofinance.ScreenerRequest": { - "properties": { - "count": { - "description": "Count is the maximum number of matching quotes to return (default 25, maximum 250).", - "type": "integer" + "fees": { + "$ref": "#/definitions/ticketweb.TicketFees" }, - "offset": { - "description": "Offset is the zero-based index of the first matching quote (default 0, maximum 10000).", + "max_purchase_limit": { + "example": 10, "type": "integer" }, - "query": { - "additionalProperties": {}, - "description": "Query is required and contains Yahoo's recursive criteria tree. Combine conditions with AND or OR; leaves use an operator such as EQ or GT with operands [field, value], for example {operator: GT, operands: [dayvolume, 1000000]}. Accepted fields depend on quote_type.", - "type": "object" + "min_purchase_limit": { + "type": "integer" }, - "quote_type": { - "description": "QuoteType selects the instrument class to screen. Allowed values are EQUITY (default), ETF, and MUTUALFUND.", + "name": { + "example": "GA Seating", "type": "string" }, - "sort_asc": { - "description": "SortAsc sorts in ascending order when true; the default is descending.", + "sold_out": { "type": "boolean" }, - "sort_field": { - "description": "SortField selects the quote field used to order results, such as ticker or marketcap (default ticker).", - "type": "string" + "total": { + "example": 8.16, + "type": "number" } }, - "required": [ - "query" - ], "type": "object" }, - "yahoofinance.ScreenerResponse": { + "ticketweb.TicketSection": { "properties": { - "description": { - "description": "Description of the screener.", - "type": "string" - }, - "id": { - "description": "Identifier of the screener, for example `day_gainers`.", - "example": "day_gainers", + "name": { + "example": "GA Seating", "type": "string" }, - "meta": { - "additionalProperties": {}, - "description": "Screener metadata: its canonical name and criteria details.", - "type": "object" - }, - "quotes": { - "description": "Instruments that match the screener.", + "prices": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/ticketweb.TicketPrice" }, "type": "array" }, - "title": { - "description": "Display title of the screener, for example `Day Gainers`.", - "example": "Day Gainers", - "type": "string" - }, - "total": { - "description": "Total number of instruments that match the screener.", - "example": 25, + "purchase_limit": { + "example": 10, "type": "integer" - } - }, - "type": "object" - }, - "yahoofinance.ScreenersResponse": { - "properties": { - "screeners": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "yahoofinance.SearchResponse": { - "properties": { - "lists": { - "description": "Yahoo Finance lists matching the query.", - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "news": { - "description": "News articles matching the query.", - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "query": { - "description": "Search text that was run.", - "type": "string" - }, - "quotes": { - "description": "Ticker and company matches.", - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" }, - "research": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "sold_out": { + "type": "boolean" } }, "type": "object" }, - "yahoofinance.SectorResponse": { + "ticketweb.VenueDetail": { "properties": { - "industries": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" + "address": { + "example": "907 South Peters, New Orleans, LA 70130", + "type": "string" }, - "key": { - "example": "technology", + "id": { + "example": "15005", "type": "string" }, "name": { - "example": "Technology", + "example": "Howlin' Wolf", "type": "string" }, - "overview": { - "additionalProperties": {}, - "type": "object" - }, - "research_reports": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "symbol": { - "example": "^IXT", + "url": { "type": "string" - }, - "top_companies": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "top_etfs": { - "additionalProperties": { - "type": "string" - }, - "type": "object" - }, - "top_mutual_funds": { - "additionalProperties": { - "type": "string" - }, - "type": "object" } }, "type": "object" }, - "yahoofinance.SharesFullResponse": { + "ticketweb.VenueRef": { "properties": { - "end": { - "description": "Last date covered, as YYYY-MM-DD.", - "example": "2026-05-20", - "type": "string" - }, - "points": { - "description": "Share count history, one object per data point.", - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "start": { - "description": "First date covered, as YYYY-MM-DD.", - "example": "2025-01-01", + "address": { + "example": "New Orleans, LA", "type": "string" }, - "symbol": { - "description": "Ticker symbol, for example `AAPL`.", - "example": "AAPL", + "name": { + "example": "Howlin' Wolf", "type": "string" - } - }, - "type": "object" - }, - "yahoofinance.SharesResponse": { - "properties": { - "shares": { - "additionalProperties": {}, - "description": "Share count information, as Yahoo Finance reports it.", - "type": "object" }, - "symbol": { - "description": "Ticker symbol, for example `AAPL`.", - "example": "AAPL", + "url": { "type": "string" } }, "type": "object" }, - "yahoofinance.TrendingResponse": { + "ticketweb.VenueResponse": { "properties": { "count": { - "description": "Number of trending symbols returned.", - "example": 5, - "type": "integer" - }, - "job_timestamp": { - "description": "Time Yahoo Finance generated the list, in Unix milliseconds.", - "example": 1779268508061, - "type": "integer" - }, - "region": { - "description": "Region code of the trending list, for example `US`.", - "example": "US", - "type": "string" - }, - "start_interval": { - "description": "Start of the trending interval, as a 12-digit number such as `202605200800`.", - "example": 202605200800, + "example": 20, "type": "integer" }, - "symbols": { - "description": "Trending ticker symbols.", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "yahoofinance.ValuationResponse": { - "properties": { - "headers": { - "description": "Column headers of the valuation table.", - "items": { - "type": "string" - }, - "type": "array" - }, - "rows": { - "description": "Valuation measures, one object per row.", + "events": { "items": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/definitions/ticketweb.EventSummary" }, "type": "array" }, - "symbol": { - "description": "Ticker symbol, for example `AAPL`.", - "example": "AAPL", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "yahoofinance.actionsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/yahoofinance.ActionEvents" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "yahoofinance.calendarResponseDoc": { - "properties": { - "code": { - "example": 200, + "page": { + "example": 1, "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoofinance.CalendarResponse" - }, - "msg": { - "example": "OK", + "source_url": { "type": "string" + }, + "venue": { + "$ref": "#/definitions/ticketweb.VenueDetail" } }, "type": "object" }, - "yahoofinance.calendarsResponseDoc": { + "ticketweb.eventResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoofinance.CalendarsResponse" + "$ref": "#/definitions/ticketweb.EventResponse" }, "msg": { "example": "OK", @@ -262256,14 +266885,14 @@ }, "type": "object" }, - "yahoofinance.domainListResponseDoc": { + "ticketweb.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoofinance.DomainListResponse" + "$ref": "#/definitions/ticketweb.SearchResponse" }, "msg": { "example": "OK", @@ -262272,14 +266901,14 @@ }, "type": "object" }, - "yahoofinance.downloadResponseDoc": { + "ticketweb.venueResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoofinance.DownloadResponse" + "$ref": "#/definitions/ticketweb.VenueResponse" }, "msg": { "example": "OK", @@ -262288,531 +266917,320 @@ }, "type": "object" }, - "yahoofinance.earningsDatesResponseDoc": { + "tiffany.CategoriesResponse": { "properties": { - "code": { - "example": 200, + "categories": { + "items": { + "$ref": "#/definitions/tiffany.CategoryFacet" + }, + "type": "array" + }, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoofinance.EarningsDatesResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" } }, "type": "object" }, - "yahoofinance.financialsResponseDoc": { + "tiffany.CategoryFacet": { "properties": { - "code": { - "example": 200, - "type": "integer" + "id": { + "description": "ID is the exact value to pass as tiffany-category's own \"category\"\nquery parameter.", + "type": "string" }, - "data": { - "$ref": "#/definitions/yahoofinance.FinancialsResponse" + "kind": { + "description": "Kind distinguishes a real navigable department/category\n(\"category\", ids starting \"ecommerce_us_\") from a curated\nmerchandising/gift shelf (\"curated_shop\", ids starting\n\"curated_ecommerce_us_\") -- both are valid, filterable category ids,\nbut they serve different purposes: see the categories endpoint\ndocumentation.", + "type": "string" }, - "msg": { - "example": "OK", + "label": { + "description": "Label is a human-readable label derived from ID.", "type": "string" + }, + "product_count": { + "description": "ProductCount is the live count of in-index products carrying this\ncategory id, as of FetchedAt.", + "type": "integer" } }, "type": "object" }, - "yahoofinance.historyMetadataResponseDoc": { + "tiffany.CategoryResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "category": { + "type": "string" }, - "data": { - "$ref": "#/definitions/yahoofinance.HistoryMetadataResponse" + "count": { + "type": "integer" }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "yahoofinance.historyResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoofinance.HistoryResponse" + "page": { + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "yahoofinance.industryResponseDoc": { - "properties": { - "code": { - "example": 200, + "per_page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoofinance.IndustryResponse" + "products": { + "items": { + "$ref": "#/definitions/tiffany.ProductSummary" + }, + "type": "array" }, - "msg": { - "example": "OK", + "sort": { "type": "string" - } - }, - "type": "object" - }, - "yahoofinance.infoResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/yahoofinance.InfoResponse" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" - } - }, - "type": "object" - }, - "yahoofinance.isinResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoofinance.ISINResponse" + "total_pages": { + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "total_products": { + "type": "integer" } }, "type": "object" }, - "yahoofinance.lookupResponseDoc": { + "tiffany.ContentResult": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/yahoofinance.LookupResponse" + "description": { + "type": "string" }, - "msg": { - "example": "OK", + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "yahoofinance.marketStatusResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoofinance.MarketStatusResponse" + "title": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "yahoofinance.marketSummaryResponseDoc": { + "tiffany.ContentSearchResponse": { "properties": { - "code": { - "example": 200, + "count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoofinance.MarketSummaryResponse" + "fetched_at": { + "type": "string" }, - "msg": { - "example": "OK", + "keyword": { "type": "string" - } - }, - "type": "object" - }, - "yahoofinance.moduleResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoofinance.ModuleResponse" + "page": { + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "yahoofinance.optionsResponseDoc": { - "properties": { - "code": { - "example": 200, + "per_page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoofinance.OptionsResponse" + "results": { + "items": { + "$ref": "#/definitions/tiffany.ContentResult" + }, + "type": "array" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" - } - }, - "type": "object" - }, - "yahoofinance.quoteResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoofinance.QuoteResponse" + "total_pages": { + "type": "integer" }, - "msg": { - "example": "OK", - "type": "string" + "total_results": { + "type": "integer" } }, "type": "object" }, - "yahoofinance.screenerResponseDoc": { + "tiffany.FilterValue": { "properties": { - "code": { - "example": 200, + "product_count": { "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoofinance.ScreenerResponse" - }, - "msg": { - "example": "OK", + "value": { "type": "string" } }, "type": "object" }, - "yahoofinance.screenersResponseDoc": { + "tiffany.FiltersResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" + "color": { + "items": { + "$ref": "#/definitions/tiffany.FilterValue" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/yahoofinance.ScreenersResponse" + "designer": { + "items": { + "$ref": "#/definitions/tiffany.FilterValue" + }, + "type": "array" }, - "msg": { - "example": "OK", + "fetched_at": { "type": "string" - } - }, - "type": "object" - }, - "yahoofinance.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoofinance.SearchResponse" + "gemstone": { + "items": { + "$ref": "#/definitions/tiffany.FilterValue" + }, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "yahoofinance.sectorResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "gender": { + "items": { + "$ref": "#/definitions/tiffany.FilterValue" + }, + "type": "array" }, - "data": { - "$ref": "#/definitions/yahoofinance.SectorResponse" + "material": { + "items": { + "$ref": "#/definitions/tiffany.FilterValue" + }, + "type": "array" }, - "msg": { - "example": "OK", + "product_type": { + "items": { + "$ref": "#/definitions/tiffany.FilterValue" + }, + "type": "array" + }, + "source_url": { "type": "string" } }, "type": "object" }, - "yahoofinance.sharesFullResponseDoc": { + "tiffany.ProductDetailResponse": { "properties": { - "code": { - "example": 200, + "available_quantity": { "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoofinance.SharesFullResponse" - }, - "msg": { - "example": "OK", + "brand": { "type": "string" - } - }, - "type": "object" - }, - "yahoofinance.sharesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoofinance.SharesResponse" + "categories": { + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "collection": { "type": "string" - } - }, - "type": "object" - }, - "yahoofinance.trendingResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoofinance.TrendingResponse" - }, - "msg": { - "example": "OK", + "color": { "type": "string" - } - }, - "type": "object" - }, - "yahoofinance.valuationResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoofinance.ValuationResponse" + "currency": { + "type": "string" }, - "msg": { - "example": "OK", + "description": { "type": "string" - } - }, - "type": "object" - }, - "yahoohealth.ArticleResponse": { - "properties": { - "author": { + }, + "designer": { "type": "string" }, - "description": { + "fetched_at": { "type": "string" }, - "image_url": { + "gemstone": { "type": "string" }, - "keywords": { + "images": { "items": { "type": "string" }, "type": "array" }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" + "in_stock": { + "type": "boolean" }, - "provider": { + "low_inventory": { + "type": "boolean" + }, + "material": { "type": "string" }, - "published_at": { + "name": { "type": "string" }, - "section": { + "price": { + "type": "number" + }, + "product_id": { "type": "string" }, - "title": { + "product_type": { "type": "string" }, - "updated_at": { + "size": { "type": "string" }, - "url": { + "source_url": { "type": "string" - } - }, - "type": "object" - }, - "yahoohealth.CategoryPaginate": { - "properties": { - "next_page": { - "example": 2, - "type": "integer" }, - "page": { - "example": 1, - "type": "integer" - } - }, - "type": "object" - }, - "yahoohealth.CategoryResponse": { - "properties": { - "category": { + "style_id": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/yahoohealth.StreamItem" - }, - "type": "array" + "url": { + "type": "string" }, - "pagination": { - "$ref": "#/definitions/yahoohealth.CategoryPaginate" - } - }, - "type": "object" - }, - "yahoohealth.HomeResponse": { - "properties": { - "items": { + "variations": { "items": { - "$ref": "#/definitions/yahoohealth.StreamItem" + "$ref": "#/definitions/tiffany.ProductVariation" }, "type": "array" } }, "type": "object" }, - "yahoohealth.StreamItem": { + "tiffany.ProductSummary": { "properties": { - "category": { - "type": "string" - }, - "id": { - "type": "string" - }, - "thumbnail_url": { - "type": "string" - }, - "title": { + "collection": { "type": "string" }, - "url": { + "color": { "type": "string" - } - }, - "type": "object" - }, - "yahoohealth.articleResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/yahoohealth.ArticleResponse" }, - "msg": { - "example": "OK", + "currency": { "type": "string" - } - }, - "type": "object" - }, - "yahoohealth.categoryResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoohealth.CategoryResponse" - }, - "msg": { - "example": "OK", + "designer": { "type": "string" - } - }, - "type": "object" - }, - "yahoohealth.homeResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/yahoohealth.HomeResponse" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "yahoolife.ArticleResponse": { - "properties": { - "author": { + "gemstone": { "type": "string" }, - "description": { + "id": { "type": "string" }, "image_url": { "type": "string" }, - "keywords": { - "items": { - "type": "string" - }, - "type": "array" + "in_stock": { + "type": "boolean" }, - "paragraphs": { - "items": { - "type": "string" - }, - "type": "array" + "low_inventory": { + "type": "boolean" }, - "provider": { + "material": { "type": "string" }, - "published_at": { + "name": { "type": "string" }, - "section": { - "type": "string" + "price": { + "type": "number" }, - "title": { + "product_type": { "type": "string" }, - "updated_at": { + "style_id": { "type": "string" }, "url": { @@ -262821,362 +267239,230 @@ }, "type": "object" }, - "yahoolife.HomeResponse": { + "tiffany.ProductVariation": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/yahoolife.StreamItem" - }, - "type": "array" + "color": { + "type": "string" + }, + "id": { + "type": "string" + }, + "online": { + "type": "boolean" } }, "type": "object" }, - "yahoolife.StreamItem": { + "tiffany.SearchResponse": { "properties": { - "id": { - "type": "string" + "count": { + "type": "integer" }, - "thumbnail_url": { + "fetched_at": { "type": "string" }, - "title": { + "keyword": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "yahoolife.articleResponseDoc": { - "properties": { - "code": { - "example": 200, + "page": { "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoolife.ArticleResponse" + "per_page": { + "type": "integer" }, - "msg": { - "example": "OK", + "products": { + "items": { + "$ref": "#/definitions/tiffany.ProductSummary" + }, + "type": "array" + }, + "sort": { + "type": "string" + }, + "source_url": { "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_products": { + "type": "integer" } }, "type": "object" }, - "yahoolife.homeResponseDoc": { + "tiffany.SearchSuggestion": { "properties": { - "code": { - "example": 200, + "popularity": { "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoolife.HomeResponse" - }, - "msg": { - "example": "OK", + "query": { "type": "string" + }, + "result_count": { + "type": "integer" } }, "type": "object" }, - "yahoonews.ArticleResponse": { + "tiffany.Store": { "properties": { - "author": { + "address1": { "type": "string" }, - "category": { + "city": { "type": "string" }, - "description": { - "type": "string" + "closed": { + "type": "boolean" }, - "id": { + "country_code": { "type": "string" }, - "image_url": { - "type": "string" + "distance_miles": { + "type": "number" }, - "keywords": { + "faqs": { "items": { - "type": "string" + "$ref": "#/definitions/tiffany.StoreFAQ" }, "type": "array" }, - "paragraphs": { + "hours": { "items": { - "type": "string" + "$ref": "#/definitions/tiffany.StoreDayHours" }, "type": "array" }, - "provider": { + "internal_store_id": { "type": "string" }, - "provider_url": { - "type": "string" + "latitude": { + "type": "number" }, - "published_at": { + "longitude": { + "type": "number" + }, + "name": { "type": "string" }, - "title": { + "phone": { "type": "string" }, - "updated_at": { + "postal_code": { "type": "string" }, - "url": { + "region": { "type": "string" - } - }, - "type": "object" - }, - "yahoonews.CategoryResponse": { - "properties": { - "category": { + }, + "reservation_url": { "type": "string" }, - "items": { + "services": { "items": { - "$ref": "#/definitions/yahoonews.StreamItem" + "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "yahoonews.Comment": { - "properties": { - "author": { - "$ref": "#/definitions/yahoonews.CommentAuthor" - }, - "body": { - "type": "string" }, - "created_at": { - "type": "string" + "specialities": { + "items": { + "type": "string" + }, + "type": "array" }, - "id": { + "store_id": { "type": "string" }, - "pinned": { - "type": "boolean" - }, - "reactions": { - "$ref": "#/definitions/yahoonews.CommentReactions" - }, - "reply_count": { - "type": "integer" - }, - "updated_at": { - "type": "string" - } - }, - "type": "object" - }, - "yahoonews.CommentAuthor": { - "properties": { - "avatar_url": { + "store_type": { + "example": "Flagship", "type": "string" }, - "handle": { + "timezone": { "type": "string" }, - "has_default_avatar": { - "type": "boolean" - }, - "nickname": { + "url": { "type": "string" - }, - "total_comment_count": { - "type": "integer" - }, - "total_reaction_count": { - "type": "integer" - } - }, - "type": "object" - }, - "yahoonews.CommentReactions": { - "properties": { - "clap": { - "type": "integer" - }, - "heart": { - "type": "integer" - }, - "laugh": { - "type": "integer" - }, - "sad": { - "type": "integer" - }, - "thumbs_down": { - "type": "integer" - }, - "thumbs_up": { - "type": "integer" - }, - "total": { - "type": "integer" } }, "type": "object" }, - "yahoonews.CommentsResponse": { + "tiffany.StoreDayHours": { "properties": { - "comments_count": { - "type": "integer" - }, - "content_id": { - "type": "string" - }, - "has_next_page": { + "closed": { "type": "boolean" }, - "items": { - "items": { - "$ref": "#/definitions/yahoonews.Comment" - }, - "type": "array" - }, - "next_cursor": { + "day": { "type": "string" }, - "sort": { - "type": "string" - } - }, - "type": "object" - }, - "yahoonews.HomeResponse": { - "properties": { - "items": { + "intervals": { "items": { - "$ref": "#/definitions/yahoonews.StreamItem" + "$ref": "#/definitions/tiffany.StoreHoursInterval" }, "type": "array" } }, "type": "object" }, - "yahoonews.Image": { - "properties": { - "height": { - "type": "integer" - }, - "url": { - "type": "string" - }, - "width": { - "type": "integer" - } - }, - "type": "object" - }, - "yahoonews.RelatedResponse": { + "tiffany.StoreFAQ": { "properties": { - "content_id": { + "answer": { "type": "string" }, - "has_next_page": { - "type": "boolean" - }, - "items": { - "items": { - "$ref": "#/definitions/yahoonews.StreamItem" - }, - "type": "array" - }, - "next_cursor": { + "question": { "type": "string" } }, "type": "object" }, - "yahoonews.RepliesResponse": { + "tiffany.StoreHoursInterval": { "properties": { - "comment_id": { - "type": "string" - }, - "content_id": { - "type": "string" - }, - "has_next_page": { - "type": "boolean" - }, - "items": { - "items": { - "$ref": "#/definitions/yahoonews.Comment" - }, - "type": "array" - }, - "next_cursor": { + "end": { "type": "string" }, - "sort": { + "start": { "type": "string" - }, - "total_count": { - "type": "integer" } }, "type": "object" }, - "yahoonews.StreamItem": { + "tiffany.StoresResponse": { "properties": { - "authors": { - "items": { - "type": "string" - }, - "type": "array" - }, - "category": { - "type": "string" - }, - "comment_count": { + "count": { "type": "integer" }, - "id": { + "fetched_at": { "type": "string" }, - "images": { - "items": { - "$ref": "#/definitions/yahoonews.Image" - }, - "type": "array" + "latitude": { + "type": "number" }, - "published_at": { - "type": "string" + "longitude": { + "type": "number" }, - "source": { - "type": "string" + "radius": { + "type": "number" }, "source_url": { "type": "string" }, - "summary": { - "type": "string" - }, - "thumbnail_url": { - "type": "string" - }, - "title": { - "type": "string" - }, - "url": { - "type": "string" + "stores": { + "items": { + "$ref": "#/definitions/tiffany.Store" + }, + "type": "array" } }, "type": "object" }, - "yahoonews.SuggestResponse": { + "tiffany.SuggestResponse": { "properties": { + "count": { + "type": "integer" + }, "fetched_at": { "type": "string" }, "query": { - "example": "chatgpt", "type": "string" }, "source_url": { @@ -263184,21 +267470,21 @@ }, "suggestions": { "items": { - "type": "string" + "$ref": "#/definitions/tiffany.SearchSuggestion" }, "type": "array" } }, "type": "object" }, - "yahoonews.articleResponseDoc": { + "tiffany.categoriesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoonews.ArticleResponse" + "$ref": "#/definitions/tiffany.CategoriesResponse" }, "msg": { "example": "OK", @@ -263207,14 +267493,14 @@ }, "type": "object" }, - "yahoonews.categoryResponseDoc": { + "tiffany.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoonews.CategoryResponse" + "$ref": "#/definitions/tiffany.CategoryResponse" }, "msg": { "example": "OK", @@ -263223,14 +267509,14 @@ }, "type": "object" }, - "yahoonews.commentsResponseDoc": { + "tiffany.contentSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoonews.CommentsResponse" + "$ref": "#/definitions/tiffany.ContentSearchResponse" }, "msg": { "example": "OK", @@ -263239,14 +267525,14 @@ }, "type": "object" }, - "yahoonews.homeResponseDoc": { + "tiffany.filtersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoonews.HomeResponse" + "$ref": "#/definitions/tiffany.FiltersResponse" }, "msg": { "example": "OK", @@ -263255,14 +267541,14 @@ }, "type": "object" }, - "yahoonews.relatedResponseDoc": { + "tiffany.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoonews.RelatedResponse" + "$ref": "#/definitions/tiffany.ProductDetailResponse" }, "msg": { "example": "OK", @@ -263271,14 +267557,14 @@ }, "type": "object" }, - "yahoonews.repliesResponseDoc": { + "tiffany.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoonews.RepliesResponse" + "$ref": "#/definitions/tiffany.SearchResponse" }, "msg": { "example": "OK", @@ -263287,14 +267573,14 @@ }, "type": "object" }, - "yahoonews.suggestResponseDoc": { + "tiffany.storesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoonews.SuggestResponse" + "$ref": "#/definitions/tiffany.StoresResponse" }, "msg": { "example": "OK", @@ -263303,664 +267589,844 @@ }, "type": "object" }, - "yahoosearch.ImageResult": { + "tiffany.suggestResponseDoc": { "properties": { - "domain": { - "example": "example.com", - "type": "string" - }, - "height": { - "example": 1080, - "type": "integer" - }, - "image_url": { - "example": "https://example.com/chatgpt.jpg", - "type": "string" - }, - "page_url": { - "example": "https://example.com/article", - "type": "string" - }, - "position": { - "example": 1, + "code": { + "example": 200, "type": "integer" }, - "thumbnail_url": { - "type": "string" + "data": { + "$ref": "#/definitions/tiffany.SuggestResponse" }, - "title": { - "example": "ChatGPT logo", + "msg": { + "example": "OK", "type": "string" - }, - "width": { - "example": 1920, - "type": "integer" } }, "type": "object" }, - "yahoosearch.ImagesResponse": { + "tiktok.Category": { "properties": { - "query": { - "example": "chatgpt", + "name": { + "description": "Category name as shown on TikTok's Explore page.", "type": "string" }, - "results": { - "items": { - "$ref": "#/definitions/yahoosearch.ImageResult" - }, - "type": "array" - } - }, - "type": "object" - }, - "yahoosearch.LocalResponse": { - "properties": { - "query": { - "example": "pizza near seattle wa", + "type": { + "description": "Numeric category type code, as a string. Use it as the `id` of the explore endpoint.", "type": "string" - }, - "results": { - "items": { - "$ref": "#/definitions/yahoosearch.LocalResult" - }, - "type": "array" } }, "type": "object" }, - "yahoosearch.LocalResult": { + "tiktok.ChallengeDetailResp": { "properties": { - "address": { - "example": "2001 4th Ave", - "type": "string" - }, - "category": { - "example": "Pizza", - "type": "string" - }, - "id": { - "example": "36383310", - "type": "string" + "challengeInfo": { + "description": "Details of the hashtag (challenge), as TikTok returns them." }, - "image_url": { - "type": "string" + "extra": { + "description": "Response metadata from TikTok, such as the request log id and server time.", + "properties": { + "fatal_item_ids": { + "items": {}, + "type": "array" + }, + "logid": { + "type": "string" + }, + "now": { + "type": "integer" + } + }, + "type": "object" }, - "name": { - "example": "Serious Pie Downtown", - "type": "string" + "log_pb": { + "description": "Request tracking information from TikTok, holding the `impr_id` impression id.", + "properties": { + "impr_id": { + "type": "string" + } + }, + "type": "object" }, - "open_status": { - "example": "Closed", - "type": "string" + "shareMeta": { + "description": "Title and description TikTok uses when the hashtag is shared.", + "properties": { + "desc": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" }, - "phone": { - "example": "(206) 838-7388", - "type": "string" + "statusCode": { + "description": "TikTok status code for the request. `0` on a successful response.", + "type": "integer" }, - "position": { - "example": 1, + "status_code": { + "description": "Second copy of the TikTok status code, sent as `status_code`. `0` on a successful response.", "type": "integer" }, - "price_range": { - "example": "$$", + "status_msg": { + "description": "Status message that goes with the status code.", "type": "string" - }, - "rating": { - "example": 4, - "type": "number" - }, - "review_count": { - "example": 4870, - "type": "integer" } }, "type": "object" }, - "yahoosearch.NewsResponse": { + "tiktok.ChallengeListResp": { "properties": { - "query": { - "example": "chatgpt", + "cursor": { + "description": "Cursor to pass in the next request to get the next page of videos.", "type": "string" }, - "results": { - "items": { - "$ref": "#/definitions/yahoosearch.NewsResult" + "extra": { + "description": "Response metadata from TikTok, such as the request log id and server time.", + "properties": { + "fatal_item_ids": { + "items": {}, + "type": "array" + }, + "logid": { + "type": "string" + }, + "now": { + "type": "integer" + } }, - "type": "array" - } - }, - "type": "object" - }, - "yahoosearch.NewsResult": { - "properties": { - "age": { - "example": "29 minutes ago", - "type": "string" + "type": "object" }, - "description": { - "type": "string" + "hasMore": { + "description": "Whether more videos remain after this page.", + "type": "boolean" }, - "position": { - "example": 1, - "type": "integer" + "itemList": { + "description": "Videos posted under the hashtag, one entry per video, as TikTok returns them.", + "items": {}, + "type": "array" }, - "source": { - "example": "AFP", - "type": "string" + "log_pb": { + "description": "Request tracking information from TikTok, holding the `impr_id` impression id.", + "properties": { + "impr_id": { + "type": "string" + } + }, + "type": "object" }, - "thumbnail_url": { - "type": "string" + "statusCode": { + "description": "TikTok status code for the request. `0` on a successful response.", + "type": "integer" }, - "title": { - "example": "OpenAI announces ChatGPT update", - "type": "string" + "status_code": { + "description": "Second copy of the TikTok status code, sent as `status_code`. `0` on a successful response.", + "type": "integer" }, - "url": { - "example": "https://example.com/article", + "status_msg": { + "description": "Status message that goes with the status code.", "type": "string" } }, "type": "object" }, - "yahoosearch.SearchPagination": { + "tiktok.CommentResp": { "properties": { - "next_page": { - "example": 2, + "alias_comment_deleted": { + "description": "Flag TikTok returns for deleted alias comments.", + "type": "boolean" + }, + "comments": { + "description": "Top-level comments on the video, one entry per comment, as TikTok returns them.", + "items": {}, + "type": "array" + }, + "cursor": { + "description": "Cursor to pass in the next request to get the next page of comments.", "type": "integer" }, - "page": { - "example": 1, + "extra": { + "description": "Response metadata from TikTok, such as server time.", + "properties": { + "api_debug_info": {}, + "fatal_item_ids": {}, + "now": { + "type": "integer" + } + }, + "type": "object" + }, + "has_filtered_comments": { + "description": "Flag showing whether TikTok filtered any comments out of the list.", "type": "integer" - } - }, - "type": "object" - }, - "yahoosearch.SearchResponse": { - "properties": { - "pagination": { - "$ref": "#/definitions/yahoosearch.SearchPagination" }, - "query": { - "example": "openai", - "type": "string" + "has_more": { + "description": "Whether more comments remain after this page, as a number (`1` for yes).", + "type": "integer" }, - "results": { - "items": { - "$ref": "#/definitions/yahoosearch.SearchResult" + "log_pb": { + "description": "Request tracking information from TikTok, holding the `impr_id` impression id.", + "properties": { + "impr_id": { + "type": "string" + } }, - "type": "array" - } - }, - "type": "object" - }, - "yahoosearch.SearchResult": { - "properties": { - "description": { - "example": "OpenAI is an AI research and deployment company. Our mission is to ensure that artificial general intelligence benefits all of humanity.", - "type": "string" + "type": "object" }, - "hostname": { - "example": "openai.com", - "type": "string" + "reply_style": { + "description": "Reply display style code that TikTok returns with the comments.", + "type": "integer" }, - "position": { - "example": 1, + "status_code": { + "description": "TikTok status code for the request. `0` on a successful response.", "type": "integer" }, - "title": { - "example": "OpenAI | Research & Deployment", + "status_msg": { + "description": "Status message that goes with the status code.", "type": "string" }, - "url": { - "example": "https://openai.com/", - "type": "string" + "top_gifts": { + "description": "Top gifts attached to the comments, as TikTok returns them." + }, + "total": { + "description": "Total number of comments on the video.", + "type": "integer" } }, "type": "object" }, - "yahoosearch.SuggestResponse": { + "tiktok.ExploreResp": { "properties": { - "fetched_at": { - "type": "string" - }, - "query": { - "example": "chatgpt", + "cursor": { + "description": "Cursor to pass in the next request to get the next page of videos.", "type": "string" }, - "source_url": { - "type": "string" - }, - "suggestions": { - "items": { - "$ref": "#/definitions/yahoosearch.Suggestion" + "extra": { + "description": "Response metadata from TikTok, such as the request log id and server time.", + "properties": { + "fatal_item_ids": { + "items": {}, + "type": "array" + }, + "logid": { + "type": "string" + }, + "now": { + "type": "integer" + } }, + "type": "object" + }, + "hasMore": { + "description": "Whether more videos remain after this page.", + "type": "boolean" + }, + "itemList": { + "description": "Videos in the explore feed for the category, one entry per video, as TikTok returns them.", + "items": {}, "type": "array" - } - }, - "type": "object" - }, - "yahoosearch.Suggestion": { - "properties": { - "entity": { - "$ref": "#/definitions/yahoosearch.SuggestionEntity" }, - "text": { - "example": "chatgpt free", + "log_pb": { + "description": "Request tracking information from TikTok, holding the `impr_id` impression id.", + "properties": { + "impr_id": { + "type": "string" + } + }, + "type": "object" + }, + "statusCode": { + "description": "TikTok status code for the request. `0` on a successful response.", + "type": "integer" + }, + "status_code": { + "description": "Second copy of the TikTok status code, sent as `status_code`. `0` on a successful response.", + "type": "integer" + }, + "status_msg": { + "description": "Status message that goes with the status code.", "type": "string" } }, "type": "object" }, - "yahoosearch.SuggestionEntity": { + "tiktok.Profile": { "properties": { - "description": { - "type": "string" - }, - "image_url": { - "type": "string" - }, - "subtitle": { - "type": "string" + "stats": { + "allOf": [ + { + "$ref": "#/definitions/tiktok.ProfileStats" + } + ], + "description": "Follower, following, like and video counts for the account." }, - "type": { - "example": "company", - "type": "string" + "user": { + "allOf": [ + { + "$ref": "#/definitions/tiktok.User" + } + ], + "description": "Account details: identity, bio, verification and region." } }, "type": "object" }, - "yahoosearch.VideoResult": { + "tiktok.ProfileStats": { "properties": { - "description": { - "type": "string" + "diggCount": { + "description": "Number of videos the account has liked.", + "example": 0, + "type": "integer" }, - "domain": { - "example": "YouTube", - "type": "string" + "followerCount": { + "description": "Number of accounts that follow this account.", + "example": 458800, + "type": "integer" }, - "duration": { - "example": "00:29", - "type": "string" + "followingCount": { + "description": "Number of accounts this account follows.", + "example": 1, + "type": "integer" }, - "position": { + "friendCount": { + "description": "Number of friends, meaning accounts that follow each other.", "example": 1, "type": "integer" }, - "thumbnail_url": { - "type": "string" + "heart": { + "description": "Total likes the account's videos have received. Very large totals are rounded.", + "example": 800300, + "type": "integer" }, - "title": { - "example": "ChatGPT Demo", - "type": "string" + "heartCount": { + "description": "Total likes the account's videos have received. Can be negative for accounts with more than about 2.1 billion likes; use `heart` then.", + "example": 800300, + "type": "integer" }, - "url": { - "example": "https://www.youtube.com/watch?v=example", - "type": "string" + "videoCount": { + "description": "Number of videos the account has posted.", + "example": 59, + "type": "integer" } }, "type": "object" }, - "yahoosearch.VideosResponse": { + "tiktok.SearchHashtagResp": { "properties": { - "query": { - "example": "chatgpt", + "challenge_list": { + "description": "Hashtags (challenges) matching the keyword, one entry per hashtag, as TikTok returns them.", + "items": {}, + "type": "array" + }, + "cursor": { + "description": "Cursor to pass in the next request to get the next page of results.", + "type": "integer" + }, + "extra": { + "description": "Response metadata from TikTok, such as the request log id." + }, + "has_more": { + "description": "Whether more results remain after this page, as a number (`1` for yes).", + "type": "integer" + }, + "input_keyword": { + "description": "Search keyword that was run.", "type": "string" }, - "results": { - "items": { - "$ref": "#/definitions/yahoosearch.VideoResult" + "log_pb": { + "description": "Request tracking information from TikTok, holding the `impr_id` impression id.", + "properties": { + "impr_id": { + "type": "string" + } }, - "type": "array" - } - }, - "type": "object" - }, - "yahoosearch.imagesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" + "type": "object" }, - "data": { - "$ref": "#/definitions/yahoosearch.ImagesResponse" + "music_list": { + "description": "Matching sounds, as TikTok returns them. Usually `null` for a hashtag search." }, - "msg": { - "example": "OK", + "qc": { + "description": "Query token that TikTok returns with the search results.", "type": "string" - } - }, - "type": "object" - }, - "yahoosearch.localResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoosearch.LocalResponse" + "rid": { + "description": "Request id that TikTok returns with the search results.", + "type": "string" }, - "msg": { - "example": "OK", + "status_code": { + "description": "TikTok status code for the request. `0` on a successful response.", + "type": "integer" + }, + "status_msg": { + "description": "Status message that goes with the status code.", "type": "string" + }, + "type": { + "description": "Result type code that TikTok returns with the search results.", + "type": "integer" + }, + "user_list": { + "description": "Matching accounts, as TikTok returns them. Usually `null` for a hashtag search." } }, "type": "object" }, - "yahoosearch.newsResponseDoc": { + "tiktok.SearchResp": { "properties": { - "code": { - "example": 200, + "cursor": { + "description": "Cursor to pass in the next request to get the next page of results.", "type": "integer" }, "data": { - "$ref": "#/definitions/yahoosearch.NewsResponse" + "description": "Search results, one entry per matching video, as TikTok returns them.", + "items": {}, + "type": "array" }, - "msg": { - "example": "OK", + "extra": { + "description": "Response metadata from TikTok, such as the request log id." + }, + "feedback_type": { + "description": "Feedback type label that TikTok returns with the search results.", "type": "string" - } - }, - "type": "object" - }, - "yahoosearch.searchResponseDoc": { - "properties": { - "code": { - "example": 200, + }, + "has_more": { + "description": "Whether more results remain after this page, as a number (`1` for yes).", "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoosearch.SearchResponse" + "input_keyword": { + "description": "Search keyword that was run.", + "type": "string" }, - "msg": { - "example": "OK", + "itemList": { + "description": "Matching videos, as TikTok returns them. Often `null` when results are in `data`.", + "items": {}, + "type": "array" + }, + "log_pb": { + "description": "Request tracking information from TikTok, holding the `impr_id` impression id.", + "properties": { + "impr_id": { + "type": "string" + } + }, + "type": "object" + }, + "qc": { + "description": "Query token that TikTok returns with the search results.", "type": "string" - } - }, - "type": "object" - }, - "yahoosearch.suggestResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoosearch.SuggestResponse" + "rid": { + "description": "Request id that TikTok returns with the search results.", + "type": "string" }, - "msg": { - "example": "OK", + "status_code": { + "description": "TikTok status code for the request. `0` on a successful response.", + "type": "integer" + }, + "status_msg": { + "description": "Status message that goes with the status code.", "type": "string" + }, + "type": { + "description": "Result type code that TikTok returns with the search results.", + "type": "integer" } }, "type": "object" }, - "yahoosearch.videosResponseDoc": { + "tiktok.SearchUserResp": { "properties": { - "code": { - "example": 200, + "challenge_list": { + "description": "Matching hashtags, as TikTok returns them. Usually `null` for a user search." + }, + "cursor": { + "description": "Cursor to pass in the next request to get the next page of results.", "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoosearch.VideosResponse" + "extra": { + "description": "Response metadata from TikTok, such as the request log id." }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "yahooshopping.ArticleResponse": { - "properties": { - "author": { + "feedback_type": { + "description": "Feedback type label that TikTok returns with the search results.", "type": "string" }, - "description": { - "type": "string" + "global_doodle_config": { + "description": "Search page doodle settings that TikTok returns with the results." }, - "image_url": { - "type": "string" + "has_more": { + "description": "Whether more results remain after this page, as a number (`1` for yes).", + "type": "integer" }, - "keywords": { - "items": { - "type": "string" - }, - "type": "array" + "input_keyword": { + "description": "Search keyword that was run.", + "type": "string" }, - "paragraphs": { - "items": { - "type": "string" + "log_pb": { + "description": "Request tracking information from TikTok, holding the `impr_id` impression id.", + "properties": { + "impr_id": { + "type": "string" + } }, - "type": "array" + "type": "object" }, - "provider": { - "type": "string" + "music_list": { + "description": "Matching sounds, as TikTok returns them. Usually `null` for a user search." }, - "published_at": { + "qc": { + "description": "Query token that TikTok returns with the search results.", "type": "string" }, - "section": { + "rid": { + "description": "Request id that TikTok returns with the search results.", "type": "string" }, - "title": { - "type": "string" + "status_code": { + "description": "TikTok status code for the request. `0` on a successful response.", + "type": "integer" }, - "updated_at": { + "status_msg": { + "description": "Status message that goes with the status code.", "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "yahooshopping.CategoryPaginate": { - "properties": { - "next_page": { - "example": 2, + "type": { + "description": "Result type code that TikTok returns with the search results.", "type": "integer" }, - "page": { - "example": 1, - "type": "integer" + "user_list": { + "description": "Accounts matching the keyword, one entry per account, as TikTok returns them.", + "items": {}, + "type": "array" } }, "type": "object" }, - "yahooshopping.CategoryResponse": { + "tiktok.TrendingResp": { "properties": { - "category": { + "cursor": { + "description": "Cursor TikTok returns for the next page of the trending feed.", "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/yahooshopping.StreamItem" + "extra": { + "description": "Response metadata from TikTok, such as the request log id and server time.", + "properties": { + "fatal_item_ids": { + "items": {}, + "type": "array" + }, + "logid": { + "type": "string" + }, + "now": { + "type": "integer" + } }, + "type": "object" + }, + "hasMore": { + "description": "Whether more videos remain after this page.", + "type": "boolean" + }, + "itemList": { + "description": "Videos in the trending feed, one entry per video, as TikTok returns them.", + "items": {}, "type": "array" }, - "pagination": { - "$ref": "#/definitions/yahooshopping.CategoryPaginate" - } - }, - "type": "object" - }, - "yahooshopping.HomeResponse": { - "properties": { - "items": { - "items": { - "$ref": "#/definitions/yahooshopping.StreamItem" + "log_pb": { + "description": "Request tracking information from TikTok, holding the `impr_id` impression id.", + "properties": { + "impr_id": { + "type": "string" + } }, + "type": "object" + }, + "statusCode": { + "description": "TikTok status code for the request. `0` on a successful response.", + "type": "integer" + }, + "statusMsg": { + "description": "Status message that goes with the status code.", + "type": "string" + }, + "status_code": { + "description": "Second copy of the TikTok status code, sent as `status_code`. `0` on a successful response.", + "type": "integer" + }, + "status_msg": { + "description": "Second copy of the status message, sent as `status_msg`.", + "type": "string" + }, + "trendingTopics": { + "description": "Trending topics returned with the feed, as TikTok returns them.", + "items": {}, "type": "array" } }, "type": "object" }, - "yahooshopping.ShoppingListItem": { + "tiktok.User": { "properties": { - "currency": { + "avatarLarger": { + "description": "URL of the account's large profile picture.", + "example": "https://p16-pu-sign-useast8.tiktokcdn-us.com/tos-useast5-avt-0068-tx/fb1ed871dc01261013179da3fafcc1cd~c5_1080x1080.jpeg?lk3s=a5d48078&nonce=62362&refresh_token=e3e8e01eff1ea0116ae406af630dc407&x-expires=1734098400&x-signature=MXMzwWT8Tl1nxFZfYNQxOZM%2F%2Byo%3D&shp=a5d48078&shcp=81f88b70", "type": "string" }, - "image_url": { - "type": "string" + "bioLink": { + "description": "Link shown in the account's bio.", + "properties": { + "link": { + "example": "www.openai.com/chatgpt", + "type": "string" + } + }, + "type": "object" }, - "price": { - "type": "number" + "commerceUserInfo": { + "description": "Commerce details for the account: whether it is a commerce account and its category.", + "properties": { + "category": { + "example": "Software & Apps", + "type": "string" + }, + "commerceUser": { + "example": true, + "type": "boolean" + } + }, + "type": "object" }, - "sale_price": { - "type": "number" + "createTime": { + "description": "Time the account was created, in Unix seconds.", + "example": 1689461786, + "type": "integer" }, - "seller": { + "id": { + "description": "TikTok numeric user id of the account.", + "example": "7256182609359995947", "type": "string" }, - "title": { - "type": "string" + "isOrganization": { + "description": "Organisation account flag; `1` marks an organisation account.", + "example": 1, + "type": "integer" }, - "url": { + "language": { + "description": "Language code set on the account, for example `en`.", + "example": "en", "type": "string" - } - }, - "type": "object" - }, - "yahooshopping.ShoppingListListing": { - "properties": { - "image_url": { + }, + "nickname": { + "description": "Display name of the account.", + "example": "chatgpt", "type": "string" }, - "list": { + "privateAccount": { + "description": "Whether the account is private.", + "example": false, + "type": "boolean" + }, + "region": { + "description": "Country or region code of the account, for example `US`.", + "example": "US", "type": "string" }, - "title": { + "secUid": { + "description": "TikTok secUid of the account. Use it as the `secUid` of the posts endpoint.", + "example": "MS4wLjABAAAAT4vq3vsh9X-Vb_WtV6tz4QWTbKjliTKCiK5DqnJNtQEA2RUveHb7UdnL7xgPK2HB", "type": "string" - } - }, - "type": "object" - }, - "yahooshopping.ShoppingListResponse": { - "properties": { - "items": { - "items": { - "$ref": "#/definitions/yahooshopping.ShoppingListItem" - }, - "type": "array" }, - "list": { + "secret": { + "description": "Secret-account flag as TikTok returns it.", + "example": false, + "type": "boolean" + }, + "signature": { + "description": "Bio text shown on the account's profile.", + "example": "What can I help with?", "type": "string" }, - "title": { + "ttSeller": { + "description": "Whether the account is a TikTok Shop seller.", + "example": false, + "type": "boolean" + }, + "uniqueId": { + "description": "Account handle, the name that follows `@` in the profile URL.", + "example": "uniqueId", "type": "string" + }, + "verified": { + "description": "Whether the account has a verified badge.", + "example": true, + "type": "boolean" } }, "type": "object" }, - "yahooshopping.ShoppingListsResponse": { + "tiktok.UserPostLinkResp": { "properties": { - "lists": { - "items": { - "$ref": "#/definitions/yahooshopping.ShoppingListListing" + "cursor": { + "description": "Cursor to pass in the next request to get the next page of posts.", + "type": "string" + }, + "extra": { + "description": "Response metadata from TikTok, such as the request log id and server time.", + "properties": { + "fatal_item_ids": { + "items": {}, + "type": "array" + }, + "logid": { + "type": "string" + }, + "now": { + "type": "integer" + } }, + "type": "object" + }, + "hasMore": { + "description": "Whether more posts remain after this page.", + "type": "boolean" + }, + "itemList": { + "description": "Videos posted by the account, one entry per video, as TikTok returns them.", + "items": {}, "type": "array" - } - }, - "type": "object" - }, - "yahooshopping.StoreListing": { - "properties": { - "logo_url": { - "type": "string" }, - "name": { - "type": "string" + "log_pb": { + "description": "Request tracking information from TikTok, holding the `impr_id` impression id.", + "properties": { + "impr_id": { + "type": "string" + } + }, + "type": "object" }, - "store": { + "status_code": { + "description": "TikTok status code for the request. `0` on a successful response.", + "type": "integer" + }, + "status_msg": { + "description": "Status message that goes with the status code.", "type": "string" } }, "type": "object" }, - "yahooshopping.StoreOffer": { + "tiktok.VideoDetailResp": { "properties": { - "brand": { - "type": "string" - }, - "currency": { - "type": "string" + "extra": { + "description": "Response metadata from TikTok, such as the request log id and server time.", + "properties": { + "fatal_item_ids": { + "items": {}, + "type": "array" + }, + "logid": { + "type": "string" + }, + "now": { + "type": "integer" + } + }, + "type": "object" }, - "image_url": { - "type": "string" + "itemInfo": { + "description": "Details of the video, as TikTok returns them." }, - "price": { - "type": "number" + "log_pb": { + "description": "Request tracking information from TikTok, holding the `impr_id` impression id.", + "properties": { + "impr_id": { + "type": "string" + } + }, + "type": "object" }, - "sale_price": { - "type": "number" + "shareMeta": { + "description": "Title and description TikTok uses when the video is shared.", + "properties": { + "desc": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" }, - "title": { - "type": "string" + "status_code": { + "description": "TikTok status code for the request. `0` on a successful response.", + "type": "integer" }, - "url": { + "status_msg": { + "description": "Status message that goes with the status code.", "type": "string" } }, "type": "object" }, - "yahooshopping.StoreResponse": { + "tiktok.categoryResponseDoc": { "properties": { - "name": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "offers": { + "data": { "items": { - "$ref": "#/definitions/yahooshopping.StoreOffer" + "$ref": "#/definitions/tiktok.Category" }, "type": "array" }, - "store": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "yahooshopping.StoresResponse": { + "tiktok.challengeListResponseDoc": { "properties": { - "stores": { - "items": { - "$ref": "#/definitions/yahooshopping.StoreListing" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/tiktok.ChallengeListResp" + }, + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "yahooshopping.StreamItem": { + "tiktok.challengeResponseDoc": { "properties": { - "category": { - "type": "string" - }, - "id": { - "type": "string" - }, - "thumbnail_url": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "title": { - "type": "string" + "data": { + "$ref": "#/definitions/tiktok.ChallengeDetailResp" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "yahooshopping.articleResponseDoc": { + "tiktok.commentsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahooshopping.ArticleResponse" + "$ref": "#/definitions/tiktok.CommentResp" }, "msg": { "example": "OK", @@ -263969,14 +268435,14 @@ }, "type": "object" }, - "yahooshopping.categoryResponseDoc": { + "tiktok.exploreResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahooshopping.CategoryResponse" + "$ref": "#/definitions/tiktok.ExploreResp" }, "msg": { "example": "OK", @@ -263985,14 +268451,14 @@ }, "type": "object" }, - "yahooshopping.homeResponseDoc": { + "tiktok.postResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahooshopping.HomeResponse" + "$ref": "#/definitions/tiktok.VideoDetailResp" }, "msg": { "example": "OK", @@ -264001,14 +268467,14 @@ }, "type": "object" }, - "yahooshopping.shoppingListResponseDoc": { + "tiktok.profilePostResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahooshopping.ShoppingListResponse" + "$ref": "#/definitions/tiktok.UserPostLinkResp" }, "msg": { "example": "OK", @@ -264017,14 +268483,14 @@ }, "type": "object" }, - "yahooshopping.shoppingListsResponseDoc": { + "tiktok.profileResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahooshopping.ShoppingListsResponse" + "$ref": "#/definitions/tiktok.Profile" }, "msg": { "example": "OK", @@ -264033,14 +268499,14 @@ }, "type": "object" }, - "yahooshopping.storeResponseDoc": { + "tiktok.searchHashtagResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahooshopping.StoreResponse" + "$ref": "#/definitions/tiktok.SearchHashtagResp" }, "msg": { "example": "OK", @@ -264049,14 +268515,14 @@ }, "type": "object" }, - "yahooshopping.storesResponseDoc": { + "tiktok.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahooshopping.StoresResponse" + "$ref": "#/definitions/tiktok.SearchResp" }, "msg": { "example": "OK", @@ -264065,1690 +268531,1306 @@ }, "type": "object" }, - "yahoosports.Broadcast": { + "tiktok.searchUserResponseDoc": { "properties": { - "abbr": { - "example": "NFLN", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "example": "NFL Network", + "data": { + "$ref": "#/definitions/tiktok.SearchUserResp" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "yahoosports.Game": { + "tiktok.trendingResponseDoc": { "properties": { - "away_score": { + "code": { + "example": 200, "type": "integer" }, - "away_team": { - "$ref": "#/definitions/yahoosports.TeamRef" - }, - "broadcasts": { - "items": { - "$ref": "#/definitions/yahoosports.Broadcast" - }, - "type": "array" + "data": { + "$ref": "#/definitions/tiktok.TrendingResp" }, - "display_name": { - "example": "Green Bay @ Pittsburgh", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "tiktokmobile.CategoryListResponse": { + "properties": { + "category_list": { + "items": {}, + "type": "array" }, - "home_score": { + "cursor": { "type": "integer" }, - "home_team": { - "$ref": "#/definitions/yahoosports.TeamRef" - }, - "id": { - "example": "nfl.g.20260813023", - "type": "string" - }, - "slug": { - "example": "green-bay-packers-pittsburgh-steelers-20260813023", - "type": "string" + "device_type": { + "type": "integer" }, - "start_time": { - "example": "2026-08-13T16:00:00-07:00", - "type": "string" + "extra": {}, + "has_more": { + "type": "boolean" }, - "status": { - "example": "PREGAME", - "type": "string" + "log_pb": {}, + "status_code": { + "type": "integer" }, - "status_display": { + "status_msg": { "type": "string" + } + }, + "type": "object" + }, + "tiktokmobile.CollectionDetailResponse": { + "properties": { + "extra": {}, + "item_archive": {}, + "log_pb": {}, + "status_code": { + "type": "integer" }, - "url": { + "status_msg": { "type": "string" - }, - "venue": { - "$ref": "#/definitions/yahoosports.Venue" - }, - "week": { - "type": "integer" } }, "type": "object" }, - "yahoosports.GameResponse": { + "tiktokmobile.CollectionListResponse": { "properties": { - "away_score": { + "cursor": { "type": "integer" }, - "away_team": { - "$ref": "#/definitions/yahoosports.TeamRef" + "extra": {}, + "has_more": { + "type": "boolean" }, - "broadcasts": { - "items": { - "$ref": "#/definitions/yahoosports.Broadcast" - }, + "item_archive_detail_list": { + "items": {}, "type": "array" }, - "display_name": { - "example": "Cleveland @ Detroit", - "type": "string" + "log_pb": {}, + "status_code": { + "type": "integer" }, - "fetched_at": { + "status_msg": { "type": "string" + } + }, + "type": "object" + }, + "tiktokmobile.CollectionVideosResponse": { + "properties": { + "extra": {}, + "has_more": { + "type": "boolean" }, - "game": { - "example": "cleveland-guardians-detroit-tigers-460811106", - "type": "string" + "items": { + "items": {}, + "type": "array" }, - "home_score": { + "log_pb": {}, + "max_cursor": { "type": "integer" }, - "home_team": { - "$ref": "#/definitions/yahoosports.TeamRef" + "min_cursor": { + "type": "integer" }, - "id": { - "example": "mlb.g.460811106", - "type": "string" + "status_code": { + "type": "integer" }, - "league": { - "example": "mlb", + "status_msg": { "type": "string" - }, - "line_score": { - "items": { - "$ref": "#/definitions/yahoosports.LinePeriod" - }, + } + }, + "type": "object" + }, + "tiktokmobile.CommentRepliesResponse": { + "properties": { + "comments": { + "items": {}, "type": "array" }, - "source_url": { - "type": "string" + "cursor": { + "type": "integer" }, - "start_time": { - "type": "string" + "has_more": { + "type": "boolean" }, - "status": { - "example": "FINAL", - "type": "string" + "status_code": { + "type": "integer" }, - "status_display": { - "example": "Final", + "status_msg": { "type": "string" }, - "team_stats": { - "items": { - "$ref": "#/definitions/yahoosports.TeamStatLine" - }, - "type": "array" - }, - "venue": { - "$ref": "#/definitions/yahoosports.Venue" - }, - "week": { + "total": { "type": "integer" - }, - "winning_team_id": { - "type": "string" } }, "type": "object" }, - "yahoosports.GolfLeaderboardEntry": { + "tiktokmobile.CommentsResponse": { "properties": { - "player": { - "$ref": "#/definitions/yahoosports.GolfPlayerRef" - }, - "rank": { - "example": "T1", - "type": "string" - }, - "rounds": { - "items": { - "$ref": "#/definitions/yahoosports.GolfRoundResult" - }, + "comments": { + "items": {}, "type": "array" }, - "score": { - "example": -5, + "cursor": { "type": "integer" }, - "score_display": { - "example": "-5", - "type": "string" + "has_more": { + "type": "boolean" }, - "stats": { - "$ref": "#/definitions/yahoosports.GolfPlayerStats" + "status_code": { + "type": "integer" }, - "status": { - "example": "IN_PROGRESS", + "status_msg": { "type": "string" }, - "thru": { - "example": 18, + "total": { "type": "integer" } }, "type": "object" }, - "yahoosports.GolfLeaderboardResponse": { + "tiktokmobile.FeedItem": { "properties": { - "count": { - "example": 156, + "author_id": { "type": "integer" }, - "entries": { - "items": { - "$ref": "#/definitions/yahoosports.GolfLeaderboardEntry" - }, - "type": "array" + "author_id_str": { + "description": "AuthorIDStr is the same uid as a string. TikTok uids exceed 2^53, so JavaScript consumers of the numeric\nauthor_id receive a rounded value; read this field instead. author_id stays for existing typed clients.", + "type": "string" }, - "fetched_at": { + "aweme_id": { "type": "string" }, - "season": { - "example": 2026, + "create_time": { "type": "integer" }, - "source_url": { - "type": "string" - }, - "tour": { - "example": "pga-tour", + "share_url": { "type": "string" }, - "tournament": { - "$ref": "#/definitions/yahoosports.GolfTournamentRef" + "statistics": { + "$ref": "#/definitions/tiktokmobile.FeedStatistics" } }, "type": "object" }, - "yahoosports.GolfPlayerRef": { + "tiktokmobile.FeedResponse": { "properties": { - "country": { - "example": "United States", - "type": "string" - }, - "id": { - "example": "golf.p.23296", - "type": "string" + "count": { + "type": "integer" }, - "name": { - "example": "Michael Thorbjornsen", + "fetched_at": { "type": "string" }, - "short_name": { - "example": "M. Thorbjornsen", + "host": { "type": "string" }, - "url": { - "type": "string" + "items": { + "items": { + "$ref": "#/definitions/tiktokmobile.FeedItem" + }, + "type": "array" } }, "type": "object" }, - "yahoosports.GolfPlayerStats": { + "tiktokmobile.FeedStatistics": { "properties": { - "birdies": { - "example": 12, + "aweme_id": { + "type": "string" + }, + "collect_count": { "type": "integer" }, - "bogeys": { - "example": 3, + "comment_count": { "type": "integer" }, - "double_bogeys": { - "example": 0, + "digg_count": { "type": "integer" }, - "eagles": { - "example": 1, + "download_count": { "type": "integer" }, - "earnings": { - "example": "$0.00", - "type": "string" + "forward_count": { + "type": "integer" }, - "pars": { - "example": 48, + "lose_comment_count": { "type": "integer" - } - }, - "type": "object" - }, - "yahoosports.GolfRoundResult": { - "properties": { - "round": { - "example": 1, + }, + "lose_count": { "type": "integer" }, - "score": { - "example": -5, + "play_count": { "type": "integer" }, - "score_display": { - "example": "-5", - "type": "string" + "repost_count": { + "type": "integer" }, - "strokes": { - "example": 65, + "share_count": { + "type": "integer" + }, + "whatsapp_share_count": { "type": "integer" } }, "type": "object" }, - "yahoosports.GolfScheduleResponse": { + "tiktokmobile.HashtagInfoResponse": { "properties": { - "count": { - "example": 41, - "type": "integer" - }, - "fetched_at": { + "ch_info": {}, + "hashtag_name": { "type": "string" }, - "season": { - "example": 2026, + "status_code": { "type": "integer" }, - "source_url": { - "type": "string" - }, - "tour": { - "example": "pga-tour", + "status_msg": { "type": "string" - }, - "tournaments": { - "items": { - "$ref": "#/definitions/yahoosports.GolfTournament" - }, - "type": "array" } }, "type": "object" }, - "yahoosports.GolfTournament": { + "tiktokmobile.HashtagPostsResponse": { "properties": { - "end_date": { - "example": "2026-08-16", - "type": "string" + "aweme_list": { + "items": {}, + "type": "array" }, - "id": { - "example": "golf.e.23", - "type": "string" + "cursor": { + "type": "integer" }, - "name": { - "example": "FedEx St. Jude Championship", - "type": "string" + "has_more": { + "type": "boolean" }, - "purse": { - "example": "20000000.00", + "status_code": { + "type": "integer" + }, + "status_msg": { "type": "string" + } + }, + "type": "object" + }, + "tiktokmobile.HashtagSearchResponse": { + "properties": { + "challenge_list": { + "items": {}, + "type": "array" }, - "season": { - "example": 2026, + "cursor": { "type": "integer" }, - "start_date": { - "example": "2026-08-13", - "type": "string" + "has_more": { + "type": "boolean" }, - "status": { - "example": "IN_PROGRESS", - "type": "string" + "status_code": { + "type": "integer" }, - "url": { + "status_msg": { "type": "string" - }, - "venue": { - "$ref": "#/definitions/yahoosports.Venue" } }, "type": "object" }, - "yahoosports.GolfTournamentRef": { + "tiktokmobile.HotMusicResponse": { "properties": { - "current_round": { - "example": 1, + "cursor": { "type": "integer" }, - "end_date": { - "example": "2026-08-16", - "type": "string" - }, - "id": { - "example": "golf.e.23", - "type": "string" + "extra": {}, + "has_more": { + "type": "boolean" }, - "name": { - "example": "FedEx St. Jude Championship", + "log_pb": {}, + "msg": { "type": "string" }, - "purse": { - "example": "20000000.00", - "type": "string" + "music_list": { + "items": {}, + "type": "array" }, - "rounds": { - "example": 4, + "status_code": { "type": "integer" }, - "start_date": { - "example": "2026-08-13", - "type": "string" - }, - "status": { - "example": "IN_PROGRESS", - "type": "string" - }, - "url": { + "status_msg": { "type": "string" - }, - "venue": { - "$ref": "#/definitions/yahoosports.Venue" } }, "type": "object" }, - "yahoosports.LinePeriod": { + "tiktokmobile.LiveGameCategory": { "properties": { - "away": { - "type": "integer" - }, - "home": { + "game_type": { "type": "integer" }, - "label": { - "example": "Bottom 5th", + "title": { "type": "string" } }, "type": "object" }, - "yahoosports.MMAEvent": { + "tiktokmobile.LiveGameTag": { "properties": { - "id": { - "example": "combat.e.2144", - "type": "string" - }, - "name": { - "example": "UFC 324: Gaethje vs. Pimblett", + "bundle_id": { "type": "string" }, - "start_time": { - "example": "2026-01-25T07:12:00+08:00", + "full_name": { "type": "string" }, - "status": { - "example": "FINAL", - "type": "string" - } - }, - "type": "object" - }, - "yahoosports.MMAFight": { - "properties": { - "card_position": { - "example": "Main", - "type": "string" + "game_category": { + "items": { + "$ref": "#/definitions/tiktokmobile.LiveGameCategory" + }, + "type": "array" }, - "current_round": { - "type": "integer" + "gar": { + "items": {}, + "type": "array" }, - "fighter_one": { - "$ref": "#/definitions/yahoosports.MMAFighterRef" + "hashtag_id": { + "items": {}, + "type": "array" }, - "fighter_two": { - "$ref": "#/definitions/yahoosports.MMAFighterRef" + "hashtag_list": { + "items": { + "$ref": "#/definitions/tiktokmobile.LiveHashtag" + }, + "type": "array" }, "id": { - "example": "combat.g.13595836", - "type": "string" + "type": "integer" }, - "start_time": { - "example": "2026-08-16T10:00:00+08:00", - "type": "string" + "is_new_game": { + "type": "boolean" }, - "status": { - "example": "PREGAME", + "landscape": { + "type": "integer" + }, + "package_name": { "type": "string" }, - "weight_class": { - "example": "Womens Strawweight", + "short_name": { "type": "string" }, - "winner_id": { + "show_name": { "type": "string" } }, "type": "object" }, - "yahoosports.MMAFightCardResponse": { + "tiktokmobile.LiveHashtag": { "properties": { - "count": { - "example": 12, + "id": { "type": "integer" }, - "event": { - "$ref": "#/definitions/yahoosports.MMAEvent" + "image": {}, + "namespace": { + "type": "integer" }, - "fetched_at": { + "title": { "type": "string" - }, - "fights": { - "items": { - "$ref": "#/definitions/yahoosports.MMAFight" - }, - "type": "array" - }, - "promotion": { - "example": "UFC", + } + }, + "type": "object" + }, + "tiktokmobile.LiveRoomOwner": { + "properties": { + "avatar": {}, + "nickname": { "type": "string" }, - "source_url": { + "user_id": { "type": "string" } }, "type": "object" }, - "yahoosports.MMAFighterRef": { + "tiktokmobile.LiveRoomStats": { "properties": { - "country": { - "example": "United States", - "type": "string" + "comment_count": { + "type": "integer" }, - "fighting_out_of": { - "example": "United States", - "type": "string" + "enter_count": { + "type": "integer" }, - "headshot_url": { - "type": "string" + "follow_count": { + "type": "integer" }, - "id": { - "example": "combat.p.2087412", - "type": "string" + "like_count": { + "type": "integer" }, - "name": { - "example": "Mackenzie Dern", - "type": "string" + "replay_viewers": { + "type": "integer" }, - "rank": { - "example": 5, + "share_count": { "type": "integer" }, - "record": { - "example": "16-5-0", - "type": "string" + "total_user": { + "type": "integer" + }, + "watch_user_count": { + "type": "integer" } }, "type": "object" }, - "yahoosports.MMAScheduleResponse": { + "tiktokmobile.LiveRoomStream": { "properties": { - "count": { - "example": 51, - "type": "integer" - }, - "events": { + "candidate_resolution": { "items": { - "$ref": "#/definitions/yahoosports.MMAEvent" + "type": "string" }, "type": "array" }, - "fetched_at": { + "default_resolution": { "type": "string" }, - "promotion": { - "example": "UFC", + "flv_pull_url": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "hls_pull_url": { "type": "string" }, - "source_url": { + "rtmp_pull_url": { "type": "string" } }, "type": "object" }, - "yahoosports.MotorsportsCar": { + "tiktokmobile.LiveSearchResponse": { "properties": { - "engine": { - "example": "Mercedes M08 EQ Power+", - "type": "string" + "cursor": { + "type": "integer" }, - "model": { - "example": "Mercedes F1 W08 EQ Power+", + "data": { + "items": {}, + "type": "array" + }, + "extra": {}, + "extra_data": {}, + "feedback_type": { "type": "string" }, - "number": { - "example": 63, + "global_doodle_config": {}, + "guide_search_words": {}, + "has_more": { + "type": "boolean" + }, + "log_pb": {}, + "status_code": { "type": "integer" }, - "owner": { - "example": "Mercedes AMG Motorsport", + "status_msg": { "type": "string" } }, "type": "object" }, - "yahoosports.MotorsportsDriverRef": { + "tiktokmobile.MusicBeatsSongsResponse": { "properties": { - "id": { - "example": "motorsports.p.1490", - "type": "string" + "extra": {}, + "log_pb": {}, + "music_list": { + "items": {}, + "type": "array" }, - "name": { - "example": "George Russell", - "type": "string" + "status_code": { + "type": "integer" }, - "url": { + "status_msg": { "type": "string" } }, "type": "object" }, - "yahoosports.MotorsportsRace": { + "tiktokmobile.MusicChartResponse": { "properties": { - "distance_mi": { - "example": "306.12", - "type": "string" - }, - "id": { - "example": "motorsports.g.2961", + "chart_info": {}, + "cover_image_url": { "type": "string" }, - "laps": { - "example": 58, + "cursor": { "type": "integer" }, - "laps_completed": { - "example": 58, - "type": "integer" + "extra": {}, + "has_more": { + "type": "boolean" }, - "name": { - "example": "Australian Grand Prix", + "log_pb": {}, + "msg": { "type": "string" }, - "pole_winner": { - "$ref": "#/definitions/yahoosports.MotorsportsDriverRef" - }, - "race_winner": { - "$ref": "#/definitions/yahoosports.MotorsportsDriverRef" - }, - "start_time": { - "example": "2026-03-07T20:00:00-08:00", - "type": "string" + "music_list": { + "items": {}, + "type": "array" }, - "status": { - "example": "FINAL", - "type": "string" + "status_code": { + "type": "integer" }, - "url": { + "status_msg": { "type": "string" - }, - "venue": { - "$ref": "#/definitions/yahoosports.Venue" } }, "type": "object" }, - "yahoosports.MotorsportsRaceResponse": { + "tiktokmobile.MusicCollectionFeedResponse": { "properties": { - "count": { - "example": 20, + "cursor": { "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "race": { - "$ref": "#/definitions/yahoosports.MotorsportsRace" + "extra": {}, + "has_more": { + "type": "boolean" }, - "results": { - "items": { - "$ref": "#/definitions/yahoosports.MotorsportsResult" - }, + "log_pb": {}, + "mcf_list": { + "items": {}, "type": "array" }, - "season": { - "example": 2026, + "status_code": { "type": "integer" }, - "series": { - "example": "f1", - "type": "string" - }, - "source_url": { + "status_msg": { "type": "string" } }, "type": "object" }, - "yahoosports.MotorsportsResult": { + "tiktokmobile.MusicDetailResponse": { "properties": { - "bonus_points": { - "type": "integer" - }, - "car": { - "$ref": "#/definitions/yahoosports.MotorsportsCar" - }, - "driver": { - "$ref": "#/definitions/yahoosports.MotorsportsDriverRef" + "ai_recommend_music": {}, + "ai_recommend_video": {}, + "behind_the_song_exist": { + "type": "boolean" }, - "fastest_lap_time": { - "example": "1:22.670", + "cost_time_info": {}, + "extra": {}, + "log_pb": {}, + "msg": { "type": "string" }, - "laps": { - "example": 58, - "type": "integer" - }, - "laps_led": { - "example": 32, - "type": "integer" - }, - "place": { - "example": 1, - "type": "integer" - }, - "points": { - "example": 25, - "type": "integer" - }, - "starting_pos": { - "example": 1, + "music_chart_rank": {}, + "music_info": {}, + "rec_list": {}, + "similar_music": {}, + "similar_music_ids": {}, + "status_code": { "type": "integer" }, - "status": { - "example": "RUNNING", - "type": "string" - }, - "time": { - "example": "1:23:06.801", + "status_msg": { "type": "string" } }, "type": "object" }, - "yahoosports.MotorsportsScheduleResponse": { + "tiktokmobile.MusicFreshAwemeResponse": { "properties": { - "count": { - "example": 24, + "aweme_list": { + "items": {}, + "type": "array" + }, + "can_pin_video": { + "description": "popular listing only" + }, + "cursor": { "type": "integer" }, - "fetched_at": { - "type": "string" + "extra": {}, + "has_more": { + "type": "boolean" }, - "races": { - "items": { - "$ref": "#/definitions/yahoosports.MotorsportsRace" - }, - "type": "array" + "log_pb": {}, + "need_lazy_loading": { + "description": "popular listing only" }, - "season": { - "example": 2026, + "status_code": { "type": "integer" }, - "series": { - "example": "f1", - "type": "string" - }, - "source_url": { + "status_msg": { "type": "string" } }, "type": "object" }, - "yahoosports.NewsArticle": { + "tiktokmobile.MusicPickResponse": { "properties": { - "author": { - "example": "Yahoo Sports Staff", - "type": "string" - }, - "category": { - "example": "Sports", - "type": "string" - }, - "published": { - "example": "2026-08-13T15:25:12Z", - "type": "string" + "cursor": { + "type": "integer" }, - "summary": { - "type": "string" + "has_more": { + "type": "boolean" }, - "title": { - "example": "NFL news, live updates: ...", - "type": "string" + "mc_list": { + "items": {}, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "yahoosports.NewsResponse": { - "properties": { - "articles": { - "items": { - "$ref": "#/definitions/yahoosports.NewsArticle" - }, + "music_list": { + "items": {}, "type": "array" }, - "count": { - "example": 50, + "radio_cursor": { "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "league": { - "example": "nfl", - "type": "string" + "status_code": { + "type": "integer" }, - "source_url": { + "status_msg": { "type": "string" } }, "type": "object" }, - "yahoosports.OlympicsCountryMedals": { + "tiktokmobile.MusicRelatedResponse": { "properties": { - "bronze": { - "example": 11, + "cursor": { "type": "integer" }, - "country": { - "example": "Norway", - "type": "string" + "has_more": { + "type": "boolean" }, - "gold": { - "example": 18, - "type": "integer" + "music_list": { + "items": {}, + "type": "array" }, - "ioc_code": { - "example": "NOR", - "type": "string" + "music_type": { + "type": "integer" }, - "iso_code": { - "example": "NOR", - "type": "string" + "recall_info_list": { + "items": {}, + "type": "array" }, - "rank": { - "example": 1, - "type": "integer" + "similar_song_ids": { + "items": {}, + "type": "array" }, - "silver": { - "example": 12, + "status_code": { "type": "integer" }, - "total": { - "example": 41, - "type": "integer" + "status_msg": { + "type": "string" } }, "type": "object" }, - "yahoosports.OlympicsGames": { + "tiktokmobile.PlaceMediaResponse": { "properties": { - "end_date": { - "example": "2026-02-22T08:00:00+08:00", + "data_version": { "type": "string" }, - "name": { - "example": "Milan 2026 Winter Olympics", + "extra": {}, + "has_more": { + "type": "boolean" + }, + "item_list": { + "items": {}, + "type": "array" + }, + "log_pb": {}, + "next_cursor": { "type": "string" }, - "season": { - "example": 2026, + "pos": {}, + "post_bottom_bar_style": {}, + "status_code": { "type": "integer" }, - "short_name": { - "example": "Milan", + "status_msg": { "type": "string" }, - "start_date": { - "example": "2026-02-06T08:00:00+08:00", + "title": { "type": "string" } }, "type": "object" }, - "yahoosports.OlympicsMedalsResponse": { + "tiktokmobile.PlacePOIContainer": { "properties": { - "count": { - "example": 93, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "games": { - "$ref": "#/definitions/yahoosports.OlympicsGames" - }, - "medals": { - "items": { - "$ref": "#/definitions/yahoosports.OlympicsCountryMedals" - }, + "poi_info": { + "items": {}, "type": "array" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "yahoosports.PlayerDetail": { + "tiktokmobile.PlaceReviewsResponse": { "properties": { - "age": { - "type": "integer" - }, - "college": { - "type": "string" - }, - "draft_pick": { - "example": 34, + "collect_info": {}, + "cursor": { "type": "integer" }, - "draft_round": { - "example": 7, + "extra": {}, + "folded_cursor": { "type": "integer" }, - "draft_year": { - "example": 2025, - "type": "integer" + "folded_has_more": { + "type": "boolean" }, - "experience_years": { - "type": "integer" + "has_more": { + "type": "boolean" }, - "height": { - "example": "6'4\"", - "type": "string" + "is_hide_review_summary": { + "type": "boolean" }, - "id": { - "example": "nfl.p.42019", - "type": "string" + "landing_tab": { + "type": "integer" }, - "injury": { - "example": "Questionable", + "log_pb": {}, + "poi_id": { "type": "string" }, - "name": { - "example": "John Williams", + "poi_name": { "type": "string" }, - "number": { - "example": "73", + "post_review_description": { "type": "string" }, - "position": { - "example": "G", + "post_review_sub_description": { "type": "string" }, - "season_stats": { - "items": { - "$ref": "#/definitions/yahoosports.SeasonStatCategory" - }, + "review_summary": {}, + "review_tags": { + "items": {}, "type": "array" }, - "status": { - "example": "ACT", - "type": "string" + "reviews": { + "items": {}, + "type": "array" }, - "team": { - "$ref": "#/definitions/yahoosports.TeamRef" + "status_code": { + "type": "integer" }, - "url": { + "status_msg": { "type": "string" - }, - "weight": { - "type": "integer" } }, "type": "object" }, - "yahoosports.PlayerResponse": { + "tiktokmobile.PlaylistDetailResponse": { "properties": { - "fetched_at": { - "type": "string" + "extra": {}, + "is_collect": { + "type": "boolean" }, - "league": { - "example": "nfl", - "type": "string" + "log_pb": {}, + "mix": { + "$ref": "#/definitions/tiktokmobile.PlaylistSummary" }, - "player": { - "$ref": "#/definitions/yahoosports.PlayerDetail" + "status_code": { + "type": "integer" }, - "source_url": { + "status_msg": { "type": "string" } }, "type": "object" }, - "yahoosports.RosterPlayer": { + "tiktokmobile.PlaylistListResponse": { "properties": { - "age": { + "cursor": { "type": "integer" }, - "college": { - "type": "string" - }, - "experience_years": { - "type": "integer" + "extra": {}, + "has_more": { + "type": "boolean" }, - "height": { - "example": "6'4\"", - "type": "string" + "log_pb": {}, + "mix_list": { + "items": { + "$ref": "#/definitions/tiktokmobile.PlaylistSummary" + }, + "type": "array" }, - "id": { - "example": "nfl.p.42019", - "type": "string" + "status_code": { + "type": "integer" }, - "injury": { - "example": "Questionable", + "status_msg": { "type": "string" }, - "name": { - "example": "John Williams", + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "tiktokmobile.PlaylistSummary": { + "properties": { + "author": {}, + "creator_name": { "type": "string" }, - "number": { - "example": "73", - "type": "string" + "last_add_video_timestamp": { + "type": "integer" }, - "position": { - "example": "G", + "mix_id": { "type": "string" }, - "status": { - "example": "ACT", - "type": "string" + "mix_type": { + "type": "integer" }, - "url": { + "name": { "type": "string" }, - "weight": { - "type": "integer" - } + "share_info": {}, + "statistic": {}, + "status": {} }, "type": "object" }, - "yahoosports.RosterResponse": { + "tiktokmobile.PlaylistVideosResponse": { "properties": { - "count": { - "example": 53, + "cursor": { "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "league": { - "example": "nfl", - "type": "string" + "has_more": { + "type": "boolean" }, - "players": { - "items": { - "$ref": "#/definitions/yahoosports.RosterPlayer" - }, + "item_list": { + "items": {}, "type": "array" }, - "source_url": { - "type": "string" + "status_code": { + "type": "integer" }, - "team": { - "$ref": "#/definitions/yahoosports.TeamRef" + "status_msg": { + "type": "string" } }, "type": "object" }, - "yahoosports.ScoreboardResponse": { + "tiktokmobile.SearchGeneralResponse": { "properties": { - "count": { - "example": 8, + "cursor": { "type": "integer" }, - "date": { - "example": "2026-08-13", - "type": "string" - }, - "fetched_at": { - "type": "string" - }, - "games": { - "items": { - "$ref": "#/definitions/yahoosports.Game" - }, + "data": { + "items": {}, "type": "array" }, - "league": { - "example": "nfl", + "has_more": { + "type": "boolean" + }, + "search_id": { "type": "string" }, - "source_url": { + "status_code": { + "type": "integer" + }, + "status_msg": { "type": "string" } }, "type": "object" }, - "yahoosports.SeasonStatCategory": { + "tiktokmobile.SearchMusicResponse": { "properties": { - "category": { - "example": "passing", + "cursor": { + "type": "integer" + }, + "has_more": { + "type": "boolean" + }, + "music": { + "items": {}, + "type": "array" + }, + "music_info_list": { + "items": {}, + "type": "array" + }, + "status_code": { + "type": "integer" + }, + "status_msg": { "type": "string" }, - "stats": { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "total": { + "type": "integer" } }, "type": "object" }, - "yahoosports.StandingsEntry": { + "tiktokmobile.SearchPlaceResponse": { "properties": { - "away_record": { - "example": "35-25", - "type": "string" + "cursor": { + "type": "integer" }, - "clinched_division": { - "type": "boolean" + "extra": {}, + "feedback_type": { + "type": "string" }, - "clinched_playoff": { + "has_more": { "type": "boolean" }, - "games_back": { - "type": "number" - }, - "home_record": { - "example": "29-31", - "type": "string" - }, - "last10": { - "example": "5-5", - "type": "string" + "log_pb": {}, + "poi_info": { + "$ref": "#/definitions/tiktokmobile.PlacePOIContainer" }, - "position": { - "example": 3, + "status_code": { "type": "integer" }, - "record": { - "$ref": "#/definitions/yahoosports.TeamRecord" - }, - "streak": { - "example": "L-5", + "status_msg": { "type": "string" - }, - "team": { - "$ref": "#/definitions/yahoosports.TeamRef" } }, "type": "object" }, - "yahoosports.StandingsGroup": { + "tiktokmobile.SearchSuggestion": { "properties": { - "conference": { - "example": "American League", + "content": { "type": "string" }, - "division": { - "example": "East", + "extra_info": {}, + "highlight_pos": {}, + "pos": {}, + "rich_sug_sec_pos": {}, + "sug_type": { "type": "string" }, - "entries": { - "items": { - "$ref": "#/definitions/yahoosports.StandingsEntry" - }, - "type": "array" - } + "word_record": {} }, "type": "object" }, - "yahoosports.StandingsResponse": { + "tiktokmobile.SearchSuggestionResponse": { "properties": { - "count": { - "example": 30, + "extra": {}, + "has_more": { + "type": "boolean" + }, + "log_pb": {}, + "rid": { + "type": "string" + }, + "status_code": { "type": "integer" }, - "fetched_at": { + "status_msg": { "type": "string" }, - "groups": { + "sug_list": { "items": { - "$ref": "#/definitions/yahoosports.StandingsGroup" + "$ref": "#/definitions/tiktokmobile.SearchSuggestion" }, "type": "array" - }, - "league": { - "example": "mlb", - "type": "string" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "yahoosports.Stat": { + "tiktokmobile.SearchUsersResponse": { "properties": { - "id": { - "example": "RUNS", - "type": "string" + "cursor": { + "type": "integer" }, - "label": { - "example": "Runs", - "type": "string" + "has_more": { + "type": "boolean" }, - "value": { - "example": "6", + "status_code": { + "type": "integer" + }, + "status_msg": { "type": "string" + }, + "user_list": { + "items": {}, + "type": "array" } }, "type": "object" }, - "yahoosports.TeamDetail": { + "tiktokmobile.SearchVideosResponse": { "properties": { - "abbreviation": { - "example": "GB", - "type": "string" + "aweme_list": { + "items": {}, + "type": "array" }, - "conference": { - "example": "NFC", + "cursor": { + "type": "integer" + }, + "extra": {}, + "feedback_type": { "type": "string" }, - "division": { - "example": "NFC North", - "type": "string" - }, - "id": { - "example": "nfl.t.9", - "type": "string" - }, - "location": { - "example": "Green Bay", - "type": "string" - }, - "logo": { - "type": "string" - }, - "name": { - "example": "Green Bay Packers", - "type": "string" - }, - "nickname": { - "example": "Packers", - "type": "string" - }, - "primary_color": { - "example": "203731", - "type": "string" - }, - "record": { - "$ref": "#/definitions/yahoosports.TeamRecord" + "has_more": { + "type": "boolean" }, - "secondary_color": { - "example": "FFB612", + "log_pb": {}, + "search_id": { "type": "string" }, - "short_name": { - "example": "Green Bay", - "type": "string" + "search_item_list": { + "items": {}, + "type": "array" }, - "standing_summary": { - "example": "4th NFC North", - "type": "string" + "status_code": { + "type": "integer" }, - "url": { - "example": "https://sports.yahoo.com/nfl/teams/green-bay/", + "status_msg": { "type": "string" } }, "type": "object" }, - "yahoosports.TeamRecord": { + "tiktokmobile.StickerDiscoverResponse": { "properties": { - "display": { - "example": "64-56", - "type": "string" + "aweme_list": { + "items": {}, + "type": "array" }, - "losses": { + "cursor": { "type": "integer" }, - "points": { - "description": "Points is soccer's own standings metric (3 per win, 1 per draw);\nomitted for every other league.", - "example": 85, - "type": "integer" + "extra": {}, + "feed_session_id": { + "type": "string" }, - "ties": { + "has_more": { + "type": "boolean" + }, + "log_pb": {}, + "status_code": { "type": "integer" }, - "win_pct": { - "example": ".533", + "status_msg": { "type": "string" - }, - "wins": { - "type": "integer" } }, "type": "object" }, - "yahoosports.TeamRef": { + "tiktokmobile.SubtitleCue": { "properties": { - "abbreviation": { - "example": "GB", - "type": "string" - }, - "id": { - "example": "nfl.t.9", - "type": "string" - }, - "location": { - "example": "Green Bay", - "type": "string" - }, - "logo": { - "type": "string" - }, - "name": { - "example": "Green Bay Packers", - "type": "string" - }, - "nickname": { - "example": "Packers", + "end": { "type": "string" }, - "primary_color": { - "example": "203731", - "type": "string" + "end_ms": { + "type": "integer" }, - "secondary_color": { - "example": "FFB612", + "start": { "type": "string" }, - "short_name": { - "example": "Green Bay", - "type": "string" + "start_ms": { + "type": "integer" }, - "url": { - "example": "https://sports.yahoo.com/nfl/teams/green-bay/", + "text": { "type": "string" } }, "type": "object" }, - "yahoosports.TeamResponse": { + "tiktokmobile.UserFollowersResponse": { "properties": { - "fetched_at": { - "type": "string" + "extra": {}, + "followers": { + "items": {}, + "type": "array" }, - "league": { - "example": "nfl", - "type": "string" + "has_more": { + "type": "boolean" }, - "source_url": { - "type": "string" + "log_pb": {}, + "max_time": { + "type": "integer" }, - "team": { - "$ref": "#/definitions/yahoosports.TeamDetail" - } - }, - "type": "object" - }, - "yahoosports.TeamScheduleResponse": { - "properties": { - "count": { - "example": 25, + "min_time": { "type": "integer" }, - "fetched_at": { + "myself_user_id": { "type": "string" }, - "games": { - "items": { - "$ref": "#/definitions/yahoosports.Game" - }, - "type": "array" - }, - "league": { - "example": "nfl", + "next_page_token": { "type": "string" }, - "source_url": { - "type": "string" + "offset": { + "type": "integer" }, - "team": { - "$ref": "#/definitions/yahoosports.TeamRef" - } - }, - "type": "object" - }, - "yahoosports.TeamStatLine": { - "properties": { - "stats": { - "items": { - "$ref": "#/definitions/yahoosports.Stat" - }, - "type": "array" + "status_code": { + "type": "integer" }, - "team": { - "$ref": "#/definitions/yahoosports.TeamRef" - } - }, - "type": "object" - }, - "yahoosports.TennisChampion": { - "properties": { - "name": { - "example": "Daniil Medvedev", + "status_msg": { "type": "string" }, - "player_id": { - "example": "ten.p.19603", - "type": "string" + "total": { + "type": "integer" } }, "type": "object" }, - "yahoosports.TennisMatch": { + "tiktokmobile.UserOriginalEffectsResponse": { "properties": { - "event": { - "example": "Men's Singles", - "type": "string" - }, - "id": { - "example": "ten.g.15754498", - "type": "string" - }, - "league": { - "example": "ATP", - "type": "string" - }, - "round": { - "example": "Round of 128", - "type": "string" - }, - "sets": { - "items": { - "$ref": "#/definitions/yahoosports.TennisSetScore" - }, - "type": "array" - }, - "side1": { - "items": { - "$ref": "#/definitions/yahoosports.TennisPlayerRef" - }, - "type": "array" - }, - "side1_seed": { + "cursor": { "type": "integer" }, - "side2": { - "items": { - "$ref": "#/definitions/yahoosports.TennisPlayerRef" - }, + "effect": { + "items": {}, "type": "array" }, - "side2_seed": { - "type": "integer" - }, - "start_time": { - "example": "2026-08-13T19:35:00-07:00", - "type": "string" - }, - "status": { - "example": "IN_PROGRESS", - "type": "string" - }, - "status_display": { - "example": "Set 2", - "type": "string" - }, - "surface": { - "example": "Hard", - "type": "string" + "extra": {}, + "has_more": { + "type": "boolean" }, - "tournament": { - "example": "Western & Southern Open", - "type": "string" + "log_pb": {}, + "status_code": { + "type": "integer" }, - "url": { + "status_msg": { "type": "string" - }, - "venue": { - "$ref": "#/definitions/yahoosports.Venue" - }, - "winner_ids": { - "items": { - "type": "string" - }, - "type": "array" } }, "type": "object" }, - "yahoosports.TennisPlayerRef": { + "tiktokmobile.UserOriginalMusicResponse": { "properties": { - "country": { - "example": "Spain", - "type": "string" + "cursor": { + "type": "integer" }, - "id": { - "example": "ten.p.34440", - "type": "string" + "extra": {}, + "groups": { + "items": {}, + "type": "array" }, - "name": { - "example": "Martin Landaluce", - "type": "string" + "has_more": { + "type": "boolean" }, - "rank": { - "example": 64, + "honor_label": {}, + "log_pb": {}, + "music": { + "items": {}, + "type": "array" + }, + "status_code": { "type": "integer" }, - "short_name": { - "example": "M. Landaluce", + "status_msg": { "type": "string" } }, "type": "object" }, - "yahoosports.TennisRankingEntry": { + "tiktokmobile.UserPostsResponse": { "properties": { - "age": { - "example": 24, - "type": "integer" + "aweme_list": { + "items": {}, + "type": "array" }, - "country": { - "example": "Italy", - "type": "string" + "extra": {}, + "has_more": { + "type": "boolean" }, - "name": { - "example": "Jannik Sinner", - "type": "string" + "log_pb": {}, + "max_cursor": { + "type": "integer" }, - "points": { - "example": 13450, + "min_cursor": { "type": "integer" }, - "rank": { - "example": 1, + "status_code": { "type": "integer" + }, + "status_msg": { + "type": "string" } }, "type": "object" }, - "yahoosports.TennisRankingsResponse": { + "tiktokmobile.UserProfileResponse": { "properties": { - "count": { - "example": 100, + "common": {}, + "extra": {}, + "header": {}, + "log_pb": {}, + "nav_bar": {}, + "profile_tab": {}, + "status_code": { "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "rankings": { - "items": { - "$ref": "#/definitions/yahoosports.TennisRankingEntry" - }, - "type": "array" - }, - "source_url": { - "type": "string" - }, - "type": { - "example": "mens-singles", + "status_msg": { "type": "string" } }, "type": "object" }, - "yahoosports.TennisScheduleResponse": { + "tiktokmobile.VideoDetailResponse": { "properties": { - "count": { - "example": 86, + "aweme_detail": {}, + "extra": {}, + "log_pb": {}, + "status_code": { "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "source_url": { + "status_msg": { "type": "string" - }, - "tournaments": { - "items": { - "$ref": "#/definitions/yahoosports.TennisTournament" - }, - "type": "array" } }, "type": "object" }, - "yahoosports.TennisScoreboardResponse": { + "tiktokmobile.WebcastEffectsData": { "properties": { - "count": { - "example": 20, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "matches": { - "items": { - "$ref": "#/definitions/yahoosports.TennisMatch" - }, + "assets": { + "items": {}, "type": "array" - }, - "source_url": { - "type": "string" } }, "type": "object" }, - "yahoosports.TennisSetScore": { + "tiktokmobile.WebcastEffectsResponse": { "properties": { - "set": { - "example": 1, - "type": "integer" - }, - "side1_score": { - "example": 6, - "type": "integer" - }, - "side1_tiebreak": { - "type": "integer" - }, - "side2_score": { - "example": 3, - "type": "integer" + "data": { + "$ref": "#/definitions/tiktokmobile.WebcastEffectsData" }, - "side2_tiebreak": { + "extra": {}, + "status_code": { "type": "integer" } }, "type": "object" }, - "yahoosports.TennisTournament": { + "tiktokmobile.WebcastGiftListResponse": { "properties": { - "champion": { - "$ref": "#/definitions/yahoosports.TennisChampion" - }, - "end_time": { - "example": "2026-01-11T04:00:00-08:00", - "type": "string" - }, - "gender": { - "example": "MEN", - "type": "string" - }, - "id": { - "example": "ten.e.2042", - "type": "string" - }, - "match_type": { - "example": "SINGLES", - "type": "string" - }, - "name": { - "example": "Brisbane International presented by Evie", - "type": "string" - }, - "start_time": { - "example": "2026-01-03T16:00:00-08:00", - "type": "string" - }, - "status": { - "example": "FINAL", - "type": "string" - }, - "surface": { - "example": "Hard", - "type": "string" - }, - "url": { - "type": "string" - }, - "venue": { - "$ref": "#/definitions/yahoosports.Venue" + "data": {}, + "extra": {}, + "status_code": { + "type": "integer" } }, "type": "object" }, - "yahoosports.Venue": { + "tiktokmobile.anchorListResponseDoc": { "properties": { - "city": { - "type": "string" + "anchors": { + "items": {}, + "type": "array" }, - "country": { - "type": "string" + "count": { + "type": "integer" }, - "name": { - "example": "Acrisure Stadium", + "fetched_at": { "type": "string" }, - "state": { + "host": { "type": "string" } }, "type": "object" }, - "yahoosports.gameResponseDoc": { + "tiktokmobile.categoryListResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoosports.GameResponse" + "$ref": "#/definitions/tiktokmobile.CategoryListResponse" }, "msg": { "example": "OK", @@ -265757,14 +269839,14 @@ }, "type": "object" }, - "yahoosports.golfLeaderboardResponseDoc": { + "tiktokmobile.collectionDetailResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoosports.GolfLeaderboardResponse" + "$ref": "#/definitions/tiktokmobile.CollectionDetailResponse" }, "msg": { "example": "OK", @@ -265773,14 +269855,14 @@ }, "type": "object" }, - "yahoosports.golfScheduleResponseDoc": { + "tiktokmobile.collectionListResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoosports.GolfScheduleResponse" + "$ref": "#/definitions/tiktokmobile.CollectionListResponse" }, "msg": { "example": "OK", @@ -265789,14 +269871,14 @@ }, "type": "object" }, - "yahoosports.mmaFightCardResponseDoc": { + "tiktokmobile.collectionVideosResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoosports.MMAFightCardResponse" + "$ref": "#/definitions/tiktokmobile.CollectionVideosResponse" }, "msg": { "example": "OK", @@ -265805,14 +269887,14 @@ }, "type": "object" }, - "yahoosports.mmaScheduleResponseDoc": { + "tiktokmobile.commentRepliesResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoosports.MMAScheduleResponse" + "$ref": "#/definitions/tiktokmobile.CommentRepliesResponse" }, "msg": { "example": "OK", @@ -265821,14 +269903,14 @@ }, "type": "object" }, - "yahoosports.motorsportsRaceResponseDoc": { + "tiktokmobile.commentsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoosports.MotorsportsRaceResponse" + "$ref": "#/definitions/tiktokmobile.CommentsResponse" }, "msg": { "example": "OK", @@ -265837,62 +269919,40 @@ }, "type": "object" }, - "yahoosports.motorsportsScheduleResponseDoc": { + "tiktokmobile.feedPostResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/yahoosports.MotorsportsScheduleResponse" - }, - "msg": { - "example": "OK", + "fetched_at": { + "example": "2026-10-20T08:20:00Z", "type": "string" - } - }, - "type": "object" - }, - "yahoosports.newsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/yahoosports.NewsResponse" }, - "msg": { - "example": "OK", + "host": { + "example": "aggr16-normal.tiktokv.us", "type": "string" - } - }, - "type": "object" - }, - "yahoosports.olympicsMedalsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoosports.OlympicsMedalsResponse" + "items": { + "additionalProperties": {}, + "type": "object" }, - "msg": { - "example": "OK", + "note": { "type": "string" + }, + "strings": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "yahoosports.playerResponseDoc": { + "tiktokmobile.feedResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoosports.PlayerResponse" + "$ref": "#/definitions/tiktokmobile.FeedResponse" }, "msg": { "example": "OK", @@ -265901,14 +269961,14 @@ }, "type": "object" }, - "yahoosports.rosterResponseDoc": { + "tiktokmobile.hashtagInfoResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoosports.RosterResponse" + "$ref": "#/definitions/tiktokmobile.HashtagInfoResponse" }, "msg": { "example": "OK", @@ -265917,14 +269977,14 @@ }, "type": "object" }, - "yahoosports.scoreboardResponseDoc": { + "tiktokmobile.hashtagPostsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoosports.ScoreboardResponse" + "$ref": "#/definitions/tiktokmobile.HashtagPostsResponse" }, "msg": { "example": "OK", @@ -265933,14 +269993,14 @@ }, "type": "object" }, - "yahoosports.standingsResponseDoc": { + "tiktokmobile.hashtagSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoosports.StandingsResponse" + "$ref": "#/definitions/tiktokmobile.HashtagSearchResponse" }, "msg": { "example": "OK", @@ -265949,46 +270009,38 @@ }, "type": "object" }, - "yahoosports.teamResponseDoc": { + "tiktokmobile.hashtagSuggestionsResponseDoc": { "properties": { - "code": { - "example": 200, - "type": "integer" + "extra": {}, + "log_pb": {}, + "rid": { + "example": "20261021173213477CE85B8289CE303E4D", + "type": "string" }, - "data": { - "$ref": "#/definitions/yahoosports.TeamResponse" + "status_code": { + "example": 0, + "type": "integer" }, - "msg": { - "example": "OK", + "status_msg": { + "example": "", "type": "string" - } - }, - "type": "object" - }, - "yahoosports.teamScheduleResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/yahoosports.TeamScheduleResponse" + "sug_list": { + "items": {}, + "type": "array" }, - "msg": { - "example": "OK", - "type": "string" - } + "words_query_record": {} }, "type": "object" }, - "yahoosports.tennisRankingsResponseDoc": { + "tiktokmobile.hotMusicResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoosports.TennisRankingsResponse" + "$ref": "#/definitions/tiktokmobile.HotMusicResponse" }, "msg": { "example": "OK", @@ -265997,14 +270049,14 @@ }, "type": "object" }, - "yahoosports.tennisScheduleResponseDoc": { + "tiktokmobile.liveEffectsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoosports.TennisScheduleResponse" + "$ref": "#/definitions/tiktokmobile.WebcastEffectsResponse" }, "msg": { "example": "OK", @@ -266013,14 +270065,14 @@ }, "type": "object" }, - "yahoosports.tennisScoreboardResponseDoc": { + "tiktokmobile.liveGiftsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahoosports.TennisScoreboardResponse" + "$ref": "#/definitions/tiktokmobile.WebcastGiftListResponse" }, "msg": { "example": "OK", @@ -266029,119 +270081,119 @@ }, "type": "object" }, - "yahootech.ArticleResponse": { + "tiktokmobile.liveHashtagCatalogResponseDoc": { "properties": { - "author": { + "extra": {}, + "fetched_at": { "type": "string" }, - "description": { - "type": "string" + "game_hashtag": { + "$ref": "#/definitions/tiktokmobile.LiveHashtag" }, - "image_url": { - "type": "string" + "game_tag_count": { + "example": 1500, + "type": "integer" }, - "keywords": { + "game_tag_list": { "items": { - "type": "string" + "$ref": "#/definitions/tiktokmobile.LiveGameTag" }, "type": "array" }, - "paragraphs": { + "hashtags": { "items": { - "type": "string" + "$ref": "#/definitions/tiktokmobile.LiveHashtag" }, "type": "array" }, - "provider": { - "type": "string" - }, - "published_at": { - "type": "string" - }, - "section": { + "host": { + "example": "webcast16-normal-c-useast2a.tiktokv.com", "type": "string" }, - "title": { - "type": "string" + "live_studio_hashtags": { + "items": { + "$ref": "#/definitions/tiktokmobile.LiveHashtag" + }, + "type": "array" }, - "updated_at": { - "type": "string" + "live_voice_hashtags": { + "items": { + "$ref": "#/definitions/tiktokmobile.LiveHashtag" + }, + "type": "array" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "yahootech.CategoryPaginate": { - "properties": { - "next_page": { - "example": 2, + "status_code": { + "example": 0, "type": "integer" }, - "page": { - "example": 1, - "type": "integer" - } - }, - "type": "object" - }, - "yahootech.CategoryResponse": { - "properties": { - "category": { + "status_msg": { + "example": "", "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/yahootech.StreamItem" - }, - "type": "array" - }, - "pagination": { - "$ref": "#/definitions/yahootech.CategoryPaginate" - } - }, - "type": "object" - }, - "yahootech.HomeResponse": { - "properties": { - "items": { + "third_party_hashtags": { "items": { - "$ref": "#/definitions/yahootech.StreamItem" + "$ref": "#/definitions/tiktokmobile.LiveHashtag" }, "type": "array" } }, "type": "object" }, - "yahootech.StreamItem": { + "tiktokmobile.liveRoomInfoResponseDoc": { "properties": { - "category": { + "cover": {}, + "create_time": { + "example": 1792603783, + "type": "integer" + }, + "data": {}, + "fetched_at": { "type": "string" }, - "id": { + "host": { + "example": "webcast16-normal-c-useast2a.tiktokv.com", "type": "string" }, - "thumbnail_url": { + "owner": { + "$ref": "#/definitions/tiktokmobile.LiveRoomOwner" + }, + "room_id": { + "example": "7699174209096059678", "type": "string" }, + "stats": { + "$ref": "#/definitions/tiktokmobile.LiveRoomStats" + }, + "status": { + "example": 2, + "type": "integer" + }, + "stream": { + "$ref": "#/definitions/tiktokmobile.LiveRoomStream" + }, "title": { + "example": "Lets Go LIVE!", "type": "string" }, - "url": { + "user_count": { + "example": 1595, + "type": "integer" + }, + "user_id": { + "example": "6707748031095751686", "type": "string" } }, "type": "object" }, - "yahootech.articleResponseDoc": { + "tiktokmobile.liveSearchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahootech.ArticleResponse" + "$ref": "#/definitions/tiktokmobile.LiveSearchResponse" }, "msg": { "example": "OK", @@ -266150,14 +270202,28 @@ }, "type": "object" }, - "yahootech.categoryResponseDoc": { + "tiktokmobile.liveTabsResponseDoc": { + "properties": { + "data": { + "items": {}, + "type": "array" + }, + "extra": {}, + "status_code": { + "example": 0, + "type": "integer" + } + }, + "type": "object" + }, + "tiktokmobile.musicBeatsSongsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahootech.CategoryResponse" + "$ref": "#/definitions/tiktokmobile.MusicBeatsSongsResponse" }, "msg": { "example": "OK", @@ -266166,14 +270232,14 @@ }, "type": "object" }, - "yahootech.homeResponseDoc": { + "tiktokmobile.musicChartResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yahootech.HomeResponse" + "$ref": "#/definitions/tiktokmobile.MusicChartResponse" }, "msg": { "example": "OK", @@ -266182,70 +270248,80 @@ }, "type": "object" }, - "yandex.SearchPagination": { + "tiktokmobile.musicChoicesResponseDoc": { "properties": { - "next_page": { - "example": 2, - "type": "integer" + "extra": {}, + "log_pb": {}, + "music_list": { + "items": {}, + "type": "array" }, - "page": { - "example": 1, + "status_code": { + "example": 0, "type": "integer" + }, + "status_msg": { + "example": "", + "type": "string" } }, "type": "object" }, - "yandex.SearchResponse": { + "tiktokmobile.musicCollectionFeedResponseDoc": { "properties": { - "pagination": { - "$ref": "#/definitions/yandex.SearchPagination" + "code": { + "example": 200, + "type": "integer" }, - "query": { - "example": "openai", - "type": "string" + "data": { + "$ref": "#/definitions/tiktokmobile.MusicCollectionFeedResponse" }, - "results": { - "items": { - "$ref": "#/definitions/yandex.SearchResult" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "yandex.SearchResult": { + "tiktokmobile.musicCollectionListResponseDoc": { "properties": { - "description": { - "example": "OpenAI is an AI research and deployment company.", - "type": "string" + "cursor": { + "example": 5, + "type": "integer" }, - "display_url": { - "example": "openai.com", - "type": "string" + "extra": {}, + "has_more": { + "example": true, + "type": "boolean" }, - "position": { - "example": 1, - "type": "integer" + "log_pb": {}, + "mc_list": { + "items": {}, + "type": "array" }, - "title": { - "example": "OpenAI | Research & Deployment", + "msg": { + "example": "", "type": "string" }, - "url": { - "example": "https://openai.com/", + "status_code": { + "example": 0, + "type": "integer" + }, + "status_msg": { + "example": "", "type": "string" } }, "type": "object" }, - "yandex.searchResponseDoc": { + "tiktokmobile.musicDetailResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yandex.SearchResponse" + "$ref": "#/definitions/tiktokmobile.MusicDetailResponse" }, "msg": { "example": "OK", @@ -266254,14 +270330,14 @@ }, "type": "object" }, - "yandex.suggestResponseDoc": { + "tiktokmobile.musicFreshAwemeResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/suggest.Response" + "$ref": "#/definitions/tiktokmobile.MusicFreshAwemeResponse" }, "msg": { "example": "OK", @@ -266270,581 +270346,378 @@ }, "type": "object" }, - "yardbarker.AuthorResponse": { + "tiktokmobile.musicPickResponseDoc": { "properties": { - "articles": { - "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" - }, - "type": "array" - }, - "image_url": { - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/tiktokmobile.MusicPickResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "yelp.AddressDetails": { + "tiktokmobile.musicRelatedResponseDoc": { "properties": { - "address_line_1": { - "type": "string" - }, - "address_line_2": { - "type": "string" - }, - "address_line_3": { - "type": "string" - }, - "city": { - "type": "string" - }, - "country": { - "type": "string" - }, - "formatted_address": { - "items": { - "type": "string" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "postal_code": { - "type": "string" + "data": { + "$ref": "#/definitions/tiktokmobile.MusicRelatedResponse" }, - "state": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "yelp.BusinessAttribute": { + "tiktokmobile.mvFeedResponseDoc": { "properties": { - "alias": { - "type": "string" - }, - "title": { - "type": "string" - }, - "value": { - "type": "string" - }, - "values": { - "items": { - "type": "string" - }, + "aweme_list": { + "items": {}, "type": "array" - } - }, - "type": "object" - }, - "yelp.BusinessItem": { - "properties": { - "address": { - "type": "string" }, - "address_details": { - "$ref": "#/definitions/yelp.AddressDetails" + "cursor": { + "example": 18, + "type": "integer" }, - "alias": { + "extra": {}, + "fetched_at": { "type": "string" }, - "categories": { - "items": { - "type": "string" - }, - "type": "array" - }, - "claimed": { - "type": "boolean" - }, - "closed": { + "has_more": { + "example": true, "type": "boolean" }, - "coordinates": { - "$ref": "#/definitions/yelp.Coordinates" - }, - "encoded_id": { - "type": "string" - }, - "id": { - "example": "tonys-pizza-napoletana-san-francisco", - "type": "string" - }, - "image": { - "type": "string" - }, - "name": { + "host": { + "example": "aggr16-normal.tiktokv.us", "type": "string" }, - "neighborhoods": { - "items": { - "type": "string" - }, - "type": "array" + "item_count": { + "example": 15, + "type": "integer" }, - "phone": { + "log_pb": {}, + "mv_id": { + "example": "1", "type": "string" }, - "phone_number": { + "original_aweme_id": { + "example": "", "type": "string" }, - "photos": { - "items": { - "type": "string" - }, + "page_extra": {}, + "top_awemes": { + "items": {}, "type": "array" - }, - "price": { - "type": "string" - }, - "rating": { - "type": "number" - }, - "review_count": { - "type": "integer" - }, - "url": { - "type": "string" - }, - "website": { - "type": "string" } }, "type": "object" }, - "yelp.Coordinates": { + "tiktokmobile.offlineFeedResponseDoc": { "properties": { - "latitude": { - "type": "number" + "count": { + "example": 10, + "type": "integer" }, - "longitude": { - "type": "number" - } - }, - "type": "object" - }, - "yelp.MobileBusinessMenuResponse": { - "properties": { - "id": { - "example": "pequods-pizza-chicago-3", + "fetched_at": { "type": "string" }, - "items": { - "items": { - "$ref": "#/definitions/yelp.MobileMenuItem" - }, - "type": "array" - } - }, - "type": "object" - }, - "yelp.MobileBusinessPhotosResponse": { - "properties": { - "id": { - "example": "pequods-pizza-chicago-3", + "host": { + "example": "aggr16-normal.tiktokv.us", "type": "string" }, - "limit": { - "example": 20, - "type": "integer" + "items": { + "additionalProperties": {}, + "type": "object" }, - "offset": { - "example": 0, + "note": { + "type": "string" + }, + "pull_type": { + "example": 11, "type": "integer" }, - "photos": { + "strings": { "items": { - "$ref": "#/definitions/yelp.MobilePhotoItem" + "type": "string" }, "type": "array" - }, - "total": { - "example": 6052, - "type": "integer" } }, "type": "object" }, - "yelp.MobileBusinessResponse": { + "tiktokmobile.placeDetailResponseDoc": { "properties": { - "address": { - "type": "string" - }, - "address_details": { - "$ref": "#/definitions/yelp.AddressDetails" - }, - "alias": { + "fetched_at": { "type": "string" }, - "attributes": { - "items": { - "$ref": "#/definitions/yelp.BusinessAttribute" - }, - "type": "array" + "frame_count": { + "example": 4, + "type": "integer" }, - "categories": { - "items": { - "type": "string" - }, + "frames": { + "items": {}, "type": "array" }, - "claimed": { + "has_more_posts": { + "example": true, "type": "boolean" }, - "closed": { + "has_more_reviews": { + "example": false, "type": "boolean" }, - "coordinates": { - "$ref": "#/definitions/yelp.Coordinates" - }, - "description": { - "type": "string" - }, - "encoded_id": { - "type": "string" - }, - "health_score": { - "type": "string" - }, - "hours": { - "items": { - "type": "string" - }, - "type": "array" - }, - "id": { - "example": "tonys-pizza-napoletana-san-francisco", - "type": "string" - }, - "image": { + "host": { + "example": "aggr32-normal.tiktokv.us", "type": "string" }, - "name": { - "type": "string" + "layout": { + "additionalProperties": {}, + "type": "object" }, - "neighborhoods": { - "items": { - "type": "string" - }, - "type": "array" + "nodes": { + "additionalProperties": {}, + "type": "object" }, - "phone": { + "page_id": { + "example": "100614404", "type": "string" }, - "phone_number": { + "poi_id": { + "example": "42203861086875992", "type": "string" }, - "photo_count": { + "post_count": { + "example": 9, "type": "integer" }, - "photos": { - "items": { - "type": "string" - }, - "type": "array" - }, - "price": { - "type": "string" - }, - "rating": { - "type": "number" + "post_cursor": { + "example": 9, + "type": "integer" }, "review_count": { + "example": 3, "type": "integer" }, - "url": { - "type": "string" - }, - "website": { - "type": "string" - }, - "year_established": { + "top_video_count": { + "example": 6, "type": "integer" } }, "type": "object" }, - "yelp.MobileBusinessReviewHighlightsResponse": { + "tiktokmobile.placeInfoResponseDoc": { "properties": { - "highlights": { - "items": { - "$ref": "#/definitions/yelp.MobileReviewHighlight" - }, - "type": "array" - }, - "id": { - "example": "pequods-pizza-chicago-3", + "address": { + "example": "304 Ord St, Los Angeles, CA 90012, USA", "type": "string" }, - "total": { - "example": 5, - "type": "integer" - } - }, - "type": "object" - }, - "yelp.MobileBusinessReviewsResponse": { - "properties": { - "id": { - "example": "pequods-pizza-chicago-3", + "average_price": { + "example": "$", "type": "string" }, - "limit": { - "example": 20, - "type": "integer" - }, - "offset": { - "example": 0, - "type": "integer" - }, - "reviews": { - "items": { - "$ref": "#/definitions/yelp.MobileReviewItem" - }, - "type": "array" - } - }, - "type": "object" - }, - "yelp.MobileBusinessReviewsSearchResponse": { - "properties": { - "id": { - "example": "pequods-pizza-chicago-3", + "category": { + "example": "Coffee Shop", "type": "string" }, - "reviews": { - "items": { - "$ref": "#/definitions/yelp.MobileReviewSearchItem" - }, - "type": "array" - }, - "term": { - "example": "crust", + "city_code": { + "example": "116023605", "type": "string" }, - "total": { - "example": 20, + "claim_store_status": { + "example": false, + "type": "boolean" + }, + "cover": {}, + "favorite_count": { + "example": 1, "type": "integer" - } - }, - "type": "object" - }, - "yelp.MobileGeocodeResponse": { - "properties": { - "address": { - "example": "1600 Amphitheatre Parkway, Mountain View, CA", - "type": "string" }, - "address_line_1": { + "fetched_at": { "type": "string" }, - "city": { + "host": { + "example": "aggr16-normal.tiktokv.us", "type": "string" }, - "coordinates": { - "$ref": "#/definitions/yelp.Coordinates" + "is_collected": { + "example": false, + "type": "boolean" }, - "country": { + "latitude": { + "example": "34.060090", "type": "string" }, - "county": { + "longitude": { + "example": "-118.239007", "type": "string" }, - "display_name": { + "name": { + "example": "Nam Coffee", "type": "string" }, - "postal_code": { - "type": "string" + "no_rating": { + "example": false, + "type": "boolean" }, - "state": { + "opening_hours": { + "example": "8:00 AM – 5:00 PM", "type": "string" }, - "yelp_available": { + "opening_status": { + "example": true, "type": "boolean" - } - }, - "type": "object" - }, - "yelp.MobileMenuItem": { - "properties": { - "alias": { - "type": "string" - }, - "description": { - "type": "string" }, - "name": { - "type": "string" + "parent_poi": {}, + "place": { + "additionalProperties": {}, + "type": "object" }, - "photo": { + "poi_id": { + "example": "42203861086875992", "type": "string" }, - "photo_count": { - "type": "integer" - }, - "price": { + "region_code": { + "example": "6252001", "type": "string" }, "review_count": { + "example": 2, "type": "integer" - } - }, - "type": "object" - }, - "yelp.MobilePhotoItem": { - "properties": { - "caption": { - "type": "string" }, - "height": { - "type": "integer" + "review_score": { + "example": 4.7, + "type": "number" }, - "id": { + "review_score_display": { + "example": "4.7", "type": "string" }, - "share_url": { + "share_desc": { + "example": "Nam Coffee", "type": "string" }, - "time_created": { - "type": "integer" - }, - "url": { + "share_url": { + "example": "https://www.tiktok.com/place/Nam-Coffee-42203861086875992", "type": "string" }, - "width": { + "video_count": { + "example": 11, "type": "integer" } }, "type": "object" }, - "yelp.MobileReviewHighlight": { + "tiktokmobile.placeMediaResponseDoc": { "properties": { - "identifier": { - "type": "string" - }, - "photo_url": { - "type": "string" - }, - "review_count": { + "code": { + "example": 200, "type": "integer" }, - "review_id": { - "type": "string" + "data": { + "$ref": "#/definitions/tiktokmobile.PlaceMediaResponse" }, - "sentence_html": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "yelp.MobileReviewItem": { + "tiktokmobile.placePhotosResponseDoc": { "properties": { - "author": { - "type": "string" - }, - "author_location": { - "type": "string" - }, - "author_review_count": { - "type": "integer" + "categories": { + "items": {}, + "type": "array" }, - "id": { + "category_tab_info": {}, + "fetched_at": { "type": "string" }, - "language": { + "host": { + "example": "aggr16-normal.tiktokv.us", "type": "string" }, - "rating": { - "type": "number" + "photo_count": { + "example": 3, + "type": "integer" }, - "share_url": { + "poi_id": { + "example": "42203861086875992", "type": "string" }, - "text": { + "title": { + "example": "Gallery (3)", "type": "string" - }, - "time_modified": { - "type": "integer" } }, "type": "object" }, - "yelp.MobileReviewSearchItem": { + "tiktokmobile.placeReviewsResponseDoc": { "properties": { - "author": { - "type": "string" - }, - "author_location": { - "type": "string" - }, - "author_review_count": { + "code": { + "example": 200, "type": "integer" }, - "excerpt_html": { - "type": "string" - }, - "id": { - "type": "string" - }, - "language": { - "type": "string" - }, - "rating": { - "type": "number" + "data": { + "$ref": "#/definitions/tiktokmobile.PlaceReviewsResponse" }, - "share_url": { + "msg": { + "example": "OK", "type": "string" - }, - "time_modified": { - "type": "integer" } }, "type": "object" }, - "yelp.MobileSearchResponse": { + "tiktokmobile.placeVideosResponseDoc": { "properties": { - "limit": { + "aweme_list": { + "items": {}, + "type": "array" + }, + "cursor": { "example": 20, "type": "integer" }, - "location": { - "example": "San Francisco, CA", + "fetched_at": { "type": "string" }, - "offset": { - "example": 0, - "type": "integer" - }, - "results": { - "items": { - "$ref": "#/definitions/yelp.BusinessItem" - }, - "type": "array" + "has_more": { + "example": true, + "type": "boolean" }, - "term": { - "example": "pizza", + "host": { + "example": "aggr16-normal.tiktokv.us", "type": "string" }, - "total": { - "example": 240, + "item_count": { + "example": 17, "type": "integer" - } + }, + "poi_id": { + "example": "21568226355448582", + "type": "string" + }, + "poi_info": {} }, "type": "object" }, - "yelp.mobileBusinessMenuResponseDoc": { + "tiktokmobile.playlistDetailResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yelp.MobileBusinessMenuResponse" + "$ref": "#/definitions/tiktokmobile.PlaylistDetailResponse" }, "msg": { "example": "OK", @@ -266853,14 +270726,14 @@ }, "type": "object" }, - "yelp.mobileBusinessPhotosResponseDoc": { + "tiktokmobile.playlistListResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yelp.MobileBusinessPhotosResponse" + "$ref": "#/definitions/tiktokmobile.PlaylistListResponse" }, "msg": { "example": "OK", @@ -266869,14 +270742,14 @@ }, "type": "object" }, - "yelp.mobileBusinessResponseDoc": { + "tiktokmobile.playlistVideosResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yelp.MobileBusinessResponse" + "$ref": "#/definitions/tiktokmobile.PlaylistVideosResponse" }, "msg": { "example": "OK", @@ -266885,30 +270758,49 @@ }, "type": "object" }, - "yelp.mobileBusinessReviewHighlightsResponseDoc": { + "tiktokmobile.searchEffectsResponseDoc": { "properties": { - "code": { - "example": 200, + "bind_effects": {}, + "collection": {}, + "cursor": { + "example": 100, "type": "integer" }, - "data": { - "$ref": "#/definitions/yelp.MobileBusinessReviewHighlightsResponse" + "effects": { + "items": {}, + "type": "array" }, - "msg": { - "example": "OK", + "has_more": { + "example": true, + "type": "boolean" + }, + "search_id": { + "example": "20261021173221C8185FF1D4A1062AD97C", + "type": "string" + }, + "status_code": { + "example": 0, + "type": "integer" + }, + "status_msg": { + "example": "", "type": "string" + }, + "use_hot": { + "example": false, + "type": "boolean" } }, "type": "object" }, - "yelp.mobileBusinessReviewsResponseDoc": { + "tiktokmobile.searchGeneralResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yelp.MobileBusinessReviewsResponse" + "$ref": "#/definitions/tiktokmobile.SearchGeneralResponse" }, "msg": { "example": "OK", @@ -266917,14 +270809,14 @@ }, "type": "object" }, - "yelp.mobileBusinessReviewsSearchResponseDoc": { + "tiktokmobile.searchMusicResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yelp.MobileBusinessReviewsSearchResponse" + "$ref": "#/definitions/tiktokmobile.SearchMusicResponse" }, "msg": { "example": "OK", @@ -266933,30 +270825,53 @@ }, "type": "object" }, - "yelp.mobileGeocodeResponseDoc": { + "tiktokmobile.searchPhotosResponseDoc": { "properties": { - "code": { - "example": 200, + "aweme_list": { + "items": {}, + "type": "array" + }, + "backtrace": {}, + "cursor": { + "example": 10, "type": "integer" }, - "data": { - "$ref": "#/definitions/yelp.MobileGeocodeResponse" + "extra": {}, + "feedback_type": { + "example": "photo_tab", + "type": "string" }, - "msg": { - "example": "OK", + "has_more": { + "example": 1, + "type": "integer" + }, + "log_pb": {}, + "response_cropped": { + "example": 1, + "type": "integer" + }, + "search_item_list": { + "items": {}, + "type": "array" + }, + "status_code": { + "example": 0, + "type": "integer" + }, + "status_msg": { "type": "string" } }, "type": "object" }, - "yelp.mobileSearchResponseDoc": { + "tiktokmobile.searchPlaceResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yelp.MobileSearchResponse" + "$ref": "#/definitions/tiktokmobile.SearchPlaceResponse" }, "msg": { "example": "OK", @@ -266965,206 +270880,276 @@ }, "type": "object" }, - "yoox.CategoriesResponse": { - "properties": { - "departments": { - "items": { - "$ref": "#/definitions/yoox.DepartmentCategories" - }, - "type": "array" - } - }, - "type": "object" - }, - "yoox.Category": { + "tiktokmobile.searchPreInfoResponseDoc": { "properties": { - "name": { + "fetched_at": { "type": "string" }, - "slug": { + "host": { "type": "string" }, - "url": { + "pre_info_id": { "type": "string" + }, + "ttl": { + "example": 40, + "type": "integer" } }, "type": "object" }, - "yoox.DepartmentCategories": { + "tiktokmobile.searchStreamResponseDoc": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/yoox.Category" - }, + "count": { + "example": 10, + "type": "integer" + }, + "cursor": { + "example": 10, + "type": "integer" + }, + "documents": { + "items": {}, "type": "array" }, - "department": { + "fetched_at": { + "example": "2026-10-20T03:25:54Z", "type": "string" - } - }, - "type": "object" - }, - "yoox.Designer": { - "properties": { - "name": { + }, + "frame_count": { + "example": 5, + "type": "integer" + }, + "frames": { + "items": {}, + "type": "array" + }, + "has_more": { + "example": true, + "type": "boolean" + }, + "host": { + "example": "aggr32-normal.tiktokv.us", "type": "string" }, - "slug": { + "keyword": { + "example": "lofi", "type": "string" }, - "url": { + "offset": { + "example": 0, + "type": "integer" + }, + "search_id": { + "example": "20261020032554E5C2D5286808E712236B", "type": "string" } }, "type": "object" }, - "yoox.DesignersResponse": { + "tiktokmobile.searchSuggestionResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "department": { - "type": "string" + "data": { + "$ref": "#/definitions/tiktokmobile.SearchSuggestionResponse" }, - "designers": { - "items": { - "$ref": "#/definitions/yoox.Designer" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "yoox.Detail": { + "tiktokmobile.searchTabsResponseDoc": { "properties": { - "brand": { - "type": "string" - }, - "category": { + "fetched_at": { "type": "string" }, - "currency": { + "host": { + "example": "aggr32-normal.tiktokv.us", "type": "string" }, - "description": { - "type": "string" + "is_failed": { + "example": 0, + "type": "integer" }, - "id": { + "keyword": { + "example": "lofi", "type": "string" }, - "images": { + "tabs": { "items": { "type": "string" }, "type": "array" + } + }, + "type": "object" + }, + "tiktokmobile.searchUsersResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "in_stock": { - "type": "boolean" + "data": { + "$ref": "#/definitions/tiktokmobile.SearchUsersResponse" }, - "name": { + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "tiktokmobile.searchVideosResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "price": { - "type": "number" + "data": { + "$ref": "#/definitions/tiktokmobile.SearchVideosResponse" }, - "url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "yoox.Facets": { + "tiktokmobile.stickerDiscoverResponseDoc": { "properties": { - "colors": { - "items": { - "type": "string" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "sizes": { - "items": { - "type": "string" - }, - "type": "array" + "data": { + "$ref": "#/definitions/tiktokmobile.StickerDiscoverResponse" }, - "sorts": { - "items": { - "type": "string" - }, - "type": "array" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "yoox.Product": { + "tiktokmobile.translationDescriptionResponseDoc": { "properties": { - "brand": { + "extra": {}, + "fetched_at": { "type": "string" }, - "currency": { - "type": "string" + "format": { + "example": 1, + "type": "integer" }, - "id": { + "host": { + "example": "aggr32-normal.tiktokv.us", "type": "string" }, - "image_url": { + "item_id": { + "example": "7650052642089225493", "type": "string" }, - "in_stock": { - "type": "boolean" + "log_pb": {}, + "perf_metrics": {}, + "status_code": { + "example": 0, + "type": "integer" }, - "name": { + "status_msg": { "type": "string" }, - "price": { - "type": "number" + "target_lang": { + "example": "en", + "type": "string" }, - "url": { + "text": { + "type": "string" + }, + "translated_client_text": {}, + "variant": { "type": "string" } }, "type": "object" }, - "yoox.SearchResponse": { + "tiktokmobile.userFollowersResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "department": { + "data": { + "$ref": "#/definitions/tiktokmobile.UserFollowersResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "tiktokmobile.userFollowingResponseDoc": { + "properties": { + "extra": {}, + "followings": { + "items": {}, + "type": "array" }, - "facets": { - "$ref": "#/definitions/yoox.Facets" + "has_more": { + "example": true, + "type": "boolean" }, - "limit": { + "log_pb": {}, + "max_time": { + "example": 1792283000, "type": "integer" }, - "page": { + "min_time": { + "example": 1721340854, "type": "integer" }, - "products": { - "items": { - "$ref": "#/definitions/yoox.Product" - }, - "type": "array" - }, - "query": { + "myself_user_id": {}, + "next_page_token": { + "example": "eyJtYXhfY3Vyc29yIjoxNzkyMjA2MTA2fQ==", "type": "string" }, - "source_url": { + "offset": { + "example": 0, + "type": "integer" + }, + "rec_has_more": { + "example": true, + "type": "boolean" + }, + "status_code": { + "example": 0, + "type": "integer" + }, + "status_msg": { + "example": "", "type": "string" + }, + "total": { + "example": 11, + "type": "integer" } }, "type": "object" }, - "yoox.categoriesDoc": { + "tiktokmobile.userOriginalEffectsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yoox.CategoriesResponse" + "$ref": "#/definitions/tiktokmobile.UserOriginalEffectsResponse" }, "msg": { "example": "OK", @@ -267173,14 +271158,14 @@ }, "type": "object" }, - "yoox.designersDoc": { + "tiktokmobile.userOriginalMusicResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yoox.DesignersResponse" + "$ref": "#/definitions/tiktokmobile.UserOriginalMusicResponse" }, "msg": { "example": "OK", @@ -267189,14 +271174,14 @@ }, "type": "object" }, - "yoox.productDoc": { + "tiktokmobile.userPostsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yoox.Detail" + "$ref": "#/definitions/tiktokmobile.UserPostsResponse" }, "msg": { "example": "OK", @@ -267205,14 +271190,14 @@ }, "type": "object" }, - "yoox.searchDoc": { + "tiktokmobile.userProfileResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/yoox.SearchResponse" + "$ref": "#/definitions/tiktokmobile.UserProfileResponse" }, "msg": { "example": "OK", @@ -267221,733 +271206,772 @@ }, "type": "object" }, - "youtube.Caption": { + "tiktokmobile.userRecommendationsResponseDoc": { "properties": { - "duration": { - "description": "Length of the caption cue, in seconds.", - "type": "number" + "extra": {}, + "log_pb": {}, + "status_code": { + "example": 0, + "type": "integer" }, - "start": { - "description": "Time the caption cue starts, in seconds from the start of the video.", - "type": "number" + "status_msg": { + "type": "string" }, - "text": { - "description": "Caption text shown for this cue.", + "user_list": { + "items": {}, + "type": "array" + } + }, + "type": "object" + }, + "tiktokmobile.videoDetailResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/tiktokmobile.VideoDetailResponse" + }, + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "youtube.ChannelFeedResponse": { + "tiktokmobile.videoSubtitlesResponseDoc": { "properties": { - "channel_id": { - "description": "YouTube channel ID, starting with `UC`.", - "example": "UCXZCJLdBC09xxGZ6gcdrc6A", + "content_source": { + "example": "redis", "type": "string" }, - "channel_title": { - "description": "Channel name as shown on YouTube.", - "example": "OpenAI", - "type": "string" + "cue_count": { + "example": 9, + "type": "integer" }, - "channel_url": { - "description": "Link to the channel on YouTube.", - "example": "https://www.youtube.com/@OpenAI", + "cues": { + "items": { + "$ref": "#/definitions/tiktokmobile.SubtitleCue" + }, + "type": "array" + }, + "fetched_at": { "type": "string" }, - "continuation_token": { - "description": "Token to pass in the next request to get the following page. Omitted on the last page.", - "example": "NEXT_TOKEN", + "host": { + "example": "aggr16-normal.tiktokv.us", "type": "string" }, - "handle": { - "description": "Channel handle, starting with `@`.", - "example": "@OpenAI", + "language": { + "example": "en", "type": "string" }, - "items": { - "description": "Videos or other items from the channel, in the order YouTube lists them.", - "items": { - "$ref": "#/definitions/youtube.SearchItem" - }, - "type": "array" + "variant": { + "example": "glide_v3_1", + "type": "string" }, - "query": { - "description": "Search text used to look inside the channel. Omitted when no search was run.", - "example": "gpt", + "video_id": { + "example": "7696141388324293918", "type": "string" }, - "thumbnail": { - "description": "URL of the channel's avatar image.", - "example": "https://yt3.googleusercontent.com/example=s176-c-k-c0x00ffffff-no-rj", + "webvtt": { + "example": "WEBVTT\n\n00:00:00.080 --> 00:00:00.880\nHey.", "type": "string" } }, "type": "object" }, - "youtube.ChannelShort": { + "time.AuthorArticle": { "properties": { - "position": { - "description": "Position of the Short in the channel's Shorts list, starting at 1.", - "example": 1, - "type": "integer" + "excerpt": { + "type": "string" }, - "thumbnail": { - "description": "URL of the Short's thumbnail image.", - "example": "https://i.ytimg.com/vi/abc123xyz89/oar2.jpg", + "published_at": { "type": "string" }, - "title": { - "description": "Title of the Short.", - "example": "OpenAI demo clip", + "section": { "type": "string" }, - "url": { - "description": "Link to the Short on YouTube.", - "example": "https://www.youtube.com/shorts/abc123xyz89", + "section_url": { "type": "string" }, - "video_id": { - "description": "YouTube video ID of the Short.", - "example": "abc123xyz89", + "title": { "type": "string" }, - "view_count": { - "description": "View count as YouTube displays it, such as `1.2M views`.", - "example": "1.2M views", + "url": { "type": "string" } }, "type": "object" }, - "youtube.ChannelShortsResponse": { + "time.AuthorResponse": { "properties": { - "channel_id": { - "description": "YouTube channel ID, starting with `UC`.", - "example": "UCXZCJLdBC09xxGZ6gcdrc6A", - "type": "string" + "articles": { + "items": { + "$ref": "#/definitions/time.AuthorArticle" + }, + "type": "array" }, - "channel_title": { - "description": "Channel name as shown on YouTube.", - "example": "OpenAI", + "bio": { "type": "string" }, - "channel_url": { - "description": "Link to the channel on YouTube.", - "example": "https://www.youtube.com/@OpenAI", + "image_url": { "type": "string" }, - "continuation_token": { - "description": "Token to pass in the next request to get the following page. Omitted on the last page.", - "example": "NEXT_TOKEN", + "job_title": { "type": "string" }, - "handle": { - "description": "Channel handle, starting with `@`.", - "example": "@OpenAI", + "name": { "type": "string" }, - "shorts": { - "description": "YouTube Shorts published by the channel.", + "social_accounts": { "items": { - "$ref": "#/definitions/youtube.ChannelShort" + "type": "string" }, "type": "array" }, - "thumbnail": { - "description": "URL of the channel's avatar image.", - "example": "https://yt3.googleusercontent.com/example=s176-c-k-c0x00ffffff-no-rj", + "url": { "type": "string" } }, "type": "object" }, - "youtube.Comment": { + "timesofindia.AuthorArticle": { "properties": { - "channel_id": { - "description": "YouTube channel ID of the commenter.", + "title": { "type": "string" }, - "comment_id": { - "description": "YouTube ID of the comment.", + "url": { "type": "string" + } + }, + "type": "object" + }, + "timesofindia.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/timesofindia.AuthorArticle" + }, + "type": "array" }, - "content": { - "description": "Text of the comment.", + "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "email": { "type": "string" }, - "continuation_token": { - "description": "Token for loading the replies to this comment. Omitted when none is available.", + "image_url": { "type": "string" }, - "likes_count": { - "description": "Number of likes on the comment.", - "type": "integer" + "job_title": { + "type": "string" }, - "published_time": { - "description": "Approximate time the comment was posted, in UTC (RFC 3339).", + "location": { "type": "string" }, - "reply_count": { - "description": "Number of replies to the comment.", - "type": "integer" + "name": { + "type": "string" }, - "user_name": { - "description": "Display name of the commenter, such as `@handle`.", + "organization": { + "type": "string" + }, + "url": { "type": "string" } }, "type": "object" }, - "youtube.CommentResponse": { + "timesofisrael.AuthorResponse": { "properties": { - "comments": { - "description": "Comments on this page of the video.", + "articles": { "items": { - "$ref": "#/definitions/youtube.Comment" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "continuation_token": { - "description": "Token to pass in the next request to get the following page.", - "type": "string" - } - }, - "type": "object" - }, - "youtube.PlaylistResponse": { - "properties": { - "channel_id": { - "description": "YouTube channel ID of the playlist owner.", - "example": "UCXZCJLdBC09xxGZ6gcdrc6A", - "type": "string" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "channel_title": { - "description": "Name of the channel that owns the playlist.", - "example": "OpenAI", + "image_url": { "type": "string" }, - "continuation_token": { - "description": "Token to pass in the next request to get the following page. Omitted on the last page.", - "example": "NEXT_TOKEN", + "name": { "type": "string" }, - "items": { - "description": "Videos in the playlist, in playlist order.", + "social_links": { "items": { - "$ref": "#/definitions/youtube.SearchItem" + "$ref": "#/definitions/timesofisrael.AuthorSocialLink" }, "type": "array" }, - "playlist_id": { - "description": "YouTube playlist ID.", - "example": "PL1234567890abcdef", - "type": "string" - }, - "thumbnail": { - "description": "URL of the playlist's thumbnail image.", - "example": "https://i.ytimg.com/vi/abc123xyz89/hqdefault.jpg", + "url": { "type": "string" - }, - "title": { - "description": "Playlist title as shown on YouTube.", - "example": "OpenAI Podcast", + } + }, + "type": "object" + }, + "timesofisrael.AuthorSocialLink": { + "properties": { + "type": { "type": "string" }, "url": { - "description": "Link to the playlist on YouTube.", - "example": "https://www.youtube.com/playlist?list=PL1234567890abcdef", - "type": "string" - }, - "video_count": { - "description": "Number of videos in the playlist as YouTube displays it, such as `12 videos`.", - "example": "12 videos", "type": "string" } }, "type": "object" }, - "youtube.Profile": { + "tmdb.CastCredit": { "properties": { - "bio": { - "example": "OpenAI’s mission is to ensure that artificial general intelligence benefits all of humanity.", + "character": { + "description": "Character the actor plays.", "type": "string" }, - "channel_id": { - "example": "UCXZCJLdBC09xxGZ6gcdrc6A", + "name": { + "description": "Name of the actor.", "type": "string" }, - "channel_name": { - "example": "OpenAI", + "slug": { + "description": "TMDB person id of the actor.", "type": "string" - }, - "channel_url": { - "example": "http://www.youtube.com/@OpenAI", + } + }, + "type": "object" + }, + "tmdb.CollectionResponse": { + "properties": { + "id": { "type": "string" }, - "created_at": { - "example": "2025-07-12T08:46:11.740932549Z", + "movies": { + "items": { + "$ref": "#/definitions/tmdb.MediaRef" + }, + "type": "array" + }, + "overview": { "type": "string" }, - "id": { - "example": "fe03dcedad8ab90c5f81eb4a405a464b", + "source_url": { "type": "string" }, - "joined_date": { - "example": "2017-03-10T00:00:00Z", + "title": { "type": "string" }, - "links": { - "example": [ - "twitter.com/openai", - "linkedin.com/company/openai", - "openai.com" - ], + "uri": { + "type": "string" + } + }, + "type": "object" + }, + "tmdb.CrewCredit": { + "properties": { + "jobs": { + "description": "Jobs the person holds on the title, for example `Creator` or `Director`.", "items": { "type": "string" }, "type": "array" }, - "profile_pic": { - "example": "https://yt3.googleusercontent.com/MopgmVAFV9BqlzOJ-UINtmutvEPcNe5IbKMmP_4vZZo3vnJXcZGtybUBsXaEVxkmxKyGqX9R=s900-c-k-c0x00ffffff-no-rj", + "name": { + "description": "Name of the crew member.", "type": "string" }, - "region": { - "example": "United States", + "slug": { + "description": "TMDB person id of the crew member.", + "type": "string" + } + }, + "type": "object" + }, + "tmdb.FilmographyCredit": { + "properties": { + "id": { "type": "string" }, - "stats": { - "$ref": "#/definitions/youtube.ProfileStats" + "title": { + "type": "string" }, - "updated_at": { - "example": "2025-07-12T08:46:11.740932749Z", + "type": { + "example": "movie", + "type": "string" + }, + "uri": { "type": "string" } }, "type": "object" }, - "youtube.ProfileStats": { + "tmdb.Genre": { "properties": { - "followers_count": { - "example": 1580000, - "type": "integer" - }, - "videos_count": { - "example": 305, - "type": "integer" + "id": { + "example": "18", + "type": "string" }, - "views_count": { - "example": 75159285, - "type": "integer" + "name": { + "example": "Drama", + "type": "string" } }, "type": "object" }, - "youtube.SearchItem": { + "tmdb.GenresResponse": { "properties": { - "badges": { - "description": "Badge labels shown on the video, such as `HD` or `CC`.", - "example": [ - "HD", - "CC" - ], + "movie": { "items": { - "type": "string" + "$ref": "#/definitions/tmdb.Genre" }, "type": "array" }, - "channel_id": { - "description": "YouTube channel ID, starting with `UC`.", - "example": "UCXZCJLdBC09xxGZ6gcdrc6A", + "source_url": { "type": "string" }, - "channel_thumbnail": { - "description": "URL of the publishing channel's avatar image.", - "example": "https://yt3.ggpht.com/example=s68-c-k-c0x00ffffff-no-rj", + "tv": { + "items": { + "$ref": "#/definitions/tmdb.Genre" + }, + "type": "array" + } + }, + "type": "object" + }, + "tmdb.MediaRef": { + "properties": { + "id": { + "description": "TMDB id of the movie or TV show. Use it with the movie or TV detail endpoint.", "type": "string" }, - "channel_title": { - "description": "Name of the channel that published the video or playlist.", - "example": "OpenAI", + "overview": { + "description": "Short plot summary. Not filled in for list and chart results.", "type": "string" }, - "description_snippet": { - "description": "Short excerpt of the video or channel description shown in the results.", - "example": "A concise walkthrough of GPT features.", + "poster_url": { + "description": "URL of the poster image. Not filled in for list and chart results.", "type": "string" }, - "duration": { - "description": "Video length as YouTube displays it, such as `12:34`.", - "example": "12:34", + "release_date": { + "description": "Release or first air date. Not filled in for list and chart results.", "type": "string" }, - "duration_seconds": { - "description": "Video length in seconds.", - "example": 754, - "type": "integer" + "title": { + "description": "Title of the movie or TV show.", + "type": "string" }, - "handle": { - "description": "Channel handle, starting with `@`. Set for channel results.", - "example": "@OpenAI", + "uri": { + "description": "Link to the title's page on TMDB.", + "type": "string" + } + }, + "type": "object" + }, + "tmdb.MovieListResponse": { + "properties": { + "category": { "type": "string" }, - "is_live": { - "description": "Whether the video is a live stream.", + "has_next_page": { "type": "boolean" }, - "is_short": { - "description": "Whether the video is a YouTube Short.", - "type": "boolean" + "movies": { + "items": { + "$ref": "#/definitions/tmdb.MediaRef" + }, + "type": "array" }, - "is_verified": { - "description": "Whether the channel carries a verified badge.", - "type": "boolean" + "page": { + "type": "integer" }, - "playlist_id": { - "description": "YouTube playlist ID. Set for playlist results.", - "example": "PL1234567890abcdef", + "source_url": { "type": "string" + } + }, + "type": "object" + }, + "tmdb.MovieResponse": { + "properties": { + "budget": { + "type": "number" }, - "position": { - "description": "Position of the item on this page of results, starting at 1.", - "example": 1, - "type": "integer" + "cast": { + "items": { + "$ref": "#/definitions/tmdb.CastCredit" + }, + "type": "array" }, - "published_text": { - "description": "Upload time as YouTube displays it, such as `2 days ago`.", - "example": "2 days ago", - "type": "string" + "countries": { + "items": { + "type": "string" + }, + "type": "array" }, - "short_view_count": { - "description": "Abbreviated view count as YouTube displays it, such as `123K views`.", - "example": "123K views", - "type": "string" + "genres": { + "items": { + "type": "string" + }, + "type": "array" }, - "subscriber_count": { - "description": "Subscriber count as YouTube displays it, such as `1.93M subscribers`.", - "example": "1.93M subscribers", + "homepage": { "type": "string" }, - "thumbnail": { - "description": "URL of the item's thumbnail image.", - "example": "https://i.ytimg.com/vi/abc123/hq720.jpg", + "id": { + "example": "27205", "type": "string" }, - "title": { - "description": "Video or playlist title, or channel name.", - "example": "ChatGPT Explained", + "original_language": { + "example": "English", "type": "string" }, - "type": { - "description": "Kind of result: `video`, `channel` or `playlist`.", - "example": "video", + "overview": { "type": "string" }, - "url": { - "description": "Link to the video, channel or playlist on YouTube.", - "example": "https://www.youtube.com/watch?v=abc123", + "poster_url": { "type": "string" }, - "video_count": { - "description": "Number of videos as YouTube displays it, such as `12 videos`. Set for channel and playlist results.", - "example": "9 lessons", + "rating": { + "$ref": "#/definitions/tmdb.Rating" + }, + "release_date": { + "example": "2010-07-15", "type": "string" }, - "video_id": { - "description": "YouTube video ID. Set for video results.", - "example": "abc123xyz89", + "revenue": { + "type": "number" + }, + "runtime_minutes": { + "example": 148, + "type": "integer" + }, + "source_url": { "type": "string" }, - "view_count": { - "description": "View count as YouTube displays it, such as `123,456 views`.", - "example": "123,456 views", + "status": { + "example": "Released", "type": "string" - } - }, - "type": "object" - }, - "youtube.SearchResponse": { - "properties": { - "continuation_token": { - "description": "Token to pass in the next request to get the following page. Omitted on the last page.", - "example": "NEXT_TOKEN", + }, + "tagline": { "type": "string" }, - "estimated_results": { - "description": "Approximate number of results YouTube reports for the search.", - "example": 9895225, - "type": "integer" + "title": { + "example": "Inception", + "type": "string" }, - "items": { - "description": "Videos, channels and playlists on this page of results.", + "top_crew": { "items": { - "$ref": "#/definitions/youtube.SearchItem" + "$ref": "#/definitions/tmdb.CrewCredit" }, "type": "array" }, - "query": { - "description": "Search text that was run.", - "example": "gpt", + "uri": { "type": "string" + }, + "year": { + "example": 2010, + "type": "integer" } }, "type": "object" }, - "youtube.TagResp": { + "tmdb.PersonListResponse": { "properties": { - "continuation_token": { - "description": "Token to pass in the next request to get the following page.", - "type": "string" + "has_next_page": { + "type": "boolean" }, - "meta": { - "allOf": [ - { - "$ref": "#/definitions/youtube.tagMeta" - } - ], - "description": "Totals shown on the hashtag page. Present on the first page only." + "page": { + "type": "integer" }, - "videos": { - "description": "Videos posted under the hashtag.", + "people": { "items": { - "$ref": "#/definitions/youtube.VideoDetail" + "$ref": "#/definitions/tmdb.PersonRef" }, "type": "array" + }, + "source_url": { + "type": "string" } }, "type": "object" }, - "youtube.TranscriptLanguage": { + "tmdb.PersonRef": { "properties": { - "is_generated": { - "description": "Whether the transcript is auto-generated rather than written by a person.", - "type": "boolean" + "id": { + "type": "string" }, - "is_translatable": { - "description": "Whether YouTube offers translations of this transcript.", - "type": "boolean" + "known_for": { + "type": "string" }, - "language": { - "description": "Language name, such as `English`.", - "example": "English", + "name": { "type": "string" }, - "language_code": { - "description": "Language code of the transcript, such as `en`.", - "example": "en", + "profile_url": { + "type": "string" + }, + "uri": { "type": "string" } }, "type": "object" }, - "youtube.TranscriptResponse": { + "tmdb.PersonResponse": { "properties": { - "is_generated": { - "description": "Whether the transcript is auto-generated rather than written by a person.", - "type": "boolean" - }, - "language": { - "description": "Language name of the transcript, such as `English`.", - "example": "English", + "biography": { "type": "string" }, - "language_code": { - "description": "Language code of the transcript, such as `en`.", - "example": "en", + "birth_date": { + "example": "1956-07-09", "type": "string" }, - "segments": { - "description": "Transcript split into timed segments.", + "filmography": { "items": { - "$ref": "#/definitions/youtube.TranscriptSegment" + "$ref": "#/definitions/tmdb.FilmographyCredit" }, "type": "array" }, - "text": { - "description": "Full transcript as one block of text.", - "example": "Never gonna give you up", + "id": { + "example": "31", "type": "string" }, - "translation_language": { - "description": "Language code the transcript was translated into. Omitted when no translation was requested.", - "example": "es", + "name": { + "example": "Tom Hanks", "type": "string" }, - "video_id": { - "description": "YouTube video ID the transcript belongs to.", - "example": "dQw4w9WgXcQ", + "photo_url": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "uri": { "type": "string" } }, "type": "object" }, - "youtube.TranscriptSegment": { + "tmdb.Rating": { "properties": { - "duration": { - "description": "Length of the segment, in seconds.", + "average": { + "description": "Average TMDB user rating, on a 0 to 10 scale.", + "example": 8.372, "type": "number" }, - "start": { - "description": "Time the segment starts, in seconds from the start of the video.", - "type": "number" + "count": { + "description": "Number of user ratings behind the average.", + "example": 39524, + "type": "integer" }, - "text": { - "description": "Transcript text spoken in this segment.", - "type": "string" + "review_count": { + "description": "Number of written user reviews. Omitted when TMDB shows none.", + "example": 8, + "type": "integer" } }, "type": "object" }, - "youtube.VideoDetail": { + "tmdb.SearchResponse": { "properties": { - "channel_id": { - "description": "YouTube channel ID of the uploader.", - "example": "UCXZCJLdBC09xxGZ6gcdrc6A", - "type": "string" - }, - "channel_title": { - "description": "Name of the channel that uploaded the video.", - "example": "OpenAI", - "type": "string" + "has_next_page": { + "description": "True when more pages of results are available.", + "type": "boolean" }, - "comments_count": { - "description": "Number of comments on the video; may be rounded when YouTube shows an abbreviated count. Omitted when unavailable.", - "example": 1400, + "page": { + "description": "Page number returned.", "type": "integer" }, - "description": { - "description": "Full video description.", - "example": "On the first episode of the OpenAI Podcast...", + "query": { + "description": "Search text that was run.", "type": "string" }, - "dislikes_count": { - "description": "may be hidden", - "example": 0, - "type": "integer" + "results": { + "description": "Search hits on this page, one item per movie, TV show, person or collection.", + "items": { + "$ref": "#/definitions/tmdb.SearchResult" + }, + "type": "array" }, - "duration_seconds": { - "description": "length in seconds", - "example": 2423, - "type": "number" + "source_url": { + "description": "URL the data was read from.", + "type": "string" }, + "type": { + "description": "Result type the search was limited to: `movie`, `tv`, `person` or `collection`. Omitted for a mixed search.", + "type": "string" + } + }, + "type": "object" + }, + "tmdb.SearchResult": { + "properties": { "id": { - "description": "YouTube video ID.", - "example": "YbJOTdZBX1g", + "description": "TMDB id of the hit. Use it with the matching detail endpoint.", "type": "string" }, - "likes_count": { - "description": "Number of likes on the video; may be rounded when YouTube shows an abbreviated count. Omitted when unavailable.", - "example": 11000, - "type": "integer" + "overview": { + "description": "Short plot summary or description. Present for movie, TV and collection hits.", + "type": "string" }, - "published_at": { - "description": "Time the video was published, in RFC 3339.", - "example": "2025-06-18T07:59:20-07:00", + "release_date": { + "description": "Release or first air date as TMDB shows it. Present for movie and TV hits.", "type": "string" }, "title": { - "description": "Video title as shown on YouTube.", - "example": "Sam Altman on AGI, GPT-5, and what’s next — the OpenAI Podcast Ep. 1", + "description": "Title of the movie, TV show or collection, or name of the person.", "type": "string" }, - "views_count": { - "description": "Number of views of the video. Omitted when unavailable.", - "example": 460176, - "type": "integer" + "type": { + "description": "Kind of hit: `movie`, `tv`, `person` or `collection`.", + "example": "movie", + "type": "string" + }, + "uri": { + "description": "Link to the hit's page on TMDB.", + "type": "string" } }, "type": "object" }, - "youtube.captionsResponseDoc": { + "tmdb.TVListResponse": { "properties": { - "code": { - "example": 200, + "category": { + "description": "TV chart that was returned: `popular`, `top_rated`, `airing_today` or `on_the_air`.", + "type": "string" + }, + "has_next_page": { + "description": "True when more pages of shows are available.", + "type": "boolean" + }, + "page": { + "description": "Page number returned.", "type": "integer" }, - "data": { + "shows": { + "description": "TV shows on this page, one item per show.", "items": { - "$ref": "#/definitions/youtube.Caption" + "$ref": "#/definitions/tmdb.MediaRef" }, "type": "array" }, - "msg": { - "example": "OK", + "source_url": { + "description": "URL the data was read from.", "type": "string" } }, "type": "object" }, - "youtube.channelFeedResponseDoc": { + "tmdb.TVResponse": { "properties": { - "code": { - "example": 200, + "cast": { + "description": "Top-billed cast, up to 25 credits.", + "items": { + "$ref": "#/definitions/tmdb.CastCredit" + }, + "type": "array" + }, + "countries": { + "description": "Countries the show comes from.", + "items": { + "type": "string" + }, + "type": "array" + }, + "first_air_year": { + "description": "Year the show first aired.", + "example": 2008, "type": "integer" }, - "data": { - "$ref": "#/definitions/youtube.ChannelFeedResponse" + "genres": { + "description": "Genres of the show.", + "items": { + "type": "string" + }, + "type": "array" }, - "msg": { - "example": "OK", + "homepage": { + "description": "URL of the show's official website.", "type": "string" - } - }, - "type": "object" - }, - "youtube.channelSearchResponseDataDoc": { - "properties": { - "channel_id": { - "description": "YouTube channel ID, starting with `UC`.", - "example": "UCXZCJLdBC09xxGZ6gcdrc6A", + }, + "id": { + "description": "TMDB id of the TV show.", + "example": "1396", "type": "string" }, - "channel_title": { - "description": "Channel name as shown on YouTube.", - "example": "OpenAI", + "last_air_year": { + "description": "Year the show last aired. Omitted for shows still airing.", + "example": 2013, + "type": "integer" + }, + "number_of_episodes": { + "description": "Total number of episodes.", + "example": 62, + "type": "integer" + }, + "original_language": { + "description": "Original language of the show, for example `English`.", + "example": "English", "type": "string" }, - "channel_url": { - "description": "Link to the channel on YouTube.", - "example": "https://www.youtube.com/@OpenAI", + "overview": { + "description": "Plot summary of the show.", "type": "string" }, - "continuation_token": { - "description": "Token to pass in the next request to get the following page. Omitted on the last page.", - "example": "NEXT_TOKEN", + "poster_url": { + "description": "URL of the poster image.", "type": "string" }, - "handle": { - "description": "Channel handle, starting with `@`.", - "example": "@OpenAI", + "rating": { + "allOf": [ + { + "$ref": "#/definitions/tmdb.Rating" + } + ], + "description": "Aggregate TMDB user rating for the show." + }, + "source_url": { + "description": "URL the data was read from.", "type": "string" }, - "items": { - "description": "Videos from the channel that match the search text.", + "status": { + "description": "Production status of the show, for example `Ended`.", + "example": "Ended", + "type": "string" + }, + "tagline": { + "description": "Tagline of the show.", + "type": "string" + }, + "title": { + "description": "Title of the show.", + "example": "Breaking Bad", + "type": "string" + }, + "top_crew": { + "description": "Top-billed crew, such as the creator.", "items": { - "$ref": "#/definitions/youtube.SearchItem" + "$ref": "#/definitions/tmdb.CrewCredit" }, "type": "array" }, - "query": { - "description": "Search text that was run inside the channel.", - "example": "gpt", - "type": "string" - }, - "thumbnail": { - "description": "URL of the channel's avatar image.", - "example": "https://yt3.googleusercontent.com/example=s176-c-k-c0x00ffffff-no-rj", + "uri": { + "description": "Link to the show's page on TMDB.", "type": "string" } }, "type": "object" }, - "youtube.channelSearchResponseDoc": { + "tmdb.collectionResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/youtube.channelSearchResponseDataDoc" + "$ref": "#/definitions/tmdb.CollectionResponse" }, "msg": { "example": "OK", @@ -267956,14 +271980,14 @@ }, "type": "object" }, - "youtube.channelShortsResponseDoc": { + "tmdb.genresResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/youtube.ChannelShortsResponse" + "$ref": "#/definitions/tmdb.GenresResponse" }, "msg": { "example": "OK", @@ -267972,14 +271996,14 @@ }, "type": "object" }, - "youtube.commentsResponseDoc": { + "tmdb.movieListResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/youtube.CommentResponse" + "$ref": "#/definitions/tmdb.MovieListResponse" }, "msg": { "example": "OK", @@ -267988,14 +272012,14 @@ }, "type": "object" }, - "youtube.playlistResponseDoc": { + "tmdb.movieResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/youtube.PlaylistResponse" + "$ref": "#/definitions/tmdb.MovieResponse" }, "msg": { "example": "OK", @@ -268004,14 +272028,14 @@ }, "type": "object" }, - "youtube.profileResponseDoc": { + "tmdb.personListResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/youtube.Profile" + "$ref": "#/definitions/tmdb.PersonListResponse" }, "msg": { "example": "OK", @@ -268020,14 +272044,14 @@ }, "type": "object" }, - "youtube.searchResponseDoc": { + "tmdb.personResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/youtube.SearchResponse" + "$ref": "#/definitions/tmdb.PersonResponse" }, "msg": { "example": "OK", @@ -268036,14 +272060,14 @@ }, "type": "object" }, - "youtube.suggestResponseDoc": { + "tmdb.searchResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/suggest.Response" + "$ref": "#/definitions/tmdb.SearchResponse" }, "msg": { "example": "OK", @@ -268052,29 +272076,14 @@ }, "type": "object" }, - "youtube.tagMeta": { - "properties": { - "channelsCount": { - "description": "Number of channels using the hashtag, as shown on the hashtag page.", - "format": "int64", - "type": "integer" - }, - "videosCount": { - "description": "Number of videos using the hashtag, as shown on the hashtag page.", - "format": "int64", - "type": "integer" - } - }, - "type": "object" - }, - "youtube.tagResponseDoc": { + "tmdb.tvListResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/youtube.TagResp" + "$ref": "#/definitions/tmdb.TVListResponse" }, "msg": { "example": "OK", @@ -268083,17 +272092,14 @@ }, "type": "object" }, - "youtube.transcriptLanguagesResponseDoc": { + "tmdb.tvResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "items": { - "$ref": "#/definitions/youtube.TranscriptLanguage" - }, - "type": "array" + "$ref": "#/definitions/tmdb.TVResponse" }, "msg": { "example": "OK", @@ -268102,290 +272108,164 @@ }, "type": "object" }, - "youtube.transcriptResponseDoc": { + "tmz.AuthorArticle": { "properties": { - "code": { - "example": 200, - "type": "integer" + "image_url": { + "type": "string" }, - "data": { - "$ref": "#/definitions/youtube.TranscriptResponse" + "published_at": { + "type": "string" }, - "msg": { - "example": "OK", + "summary": { "type": "string" - } - }, - "type": "object" - }, - "youtube.videoResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/youtube.VideoDetail" + "title": { + "type": "string" }, - "msg": { - "example": "OK", + "url": { "type": "string" } }, "type": "object" }, - "zalando.CategoriesResponse": { + "tmz.AuthorResponse": { "properties": { - "categories": { + "articles": { "items": { - "$ref": "#/definitions/zalando.CategoryTaxonomyEntry" + "$ref": "#/definitions/tmz.AuthorArticle" }, "type": "array" }, - "count": { - "example": 11, + "name": { + "type": "string" + }, + "page": { "type": "integer" }, - "department": { - "example": "women", + "slug": { + "type": "string" + }, + "url": { "type": "string" + } + }, + "type": "object" + }, + "tokopedia.AutocompleteResponse": { + "properties": { + "browser_rendered": { + "type": "boolean" }, "fetched_at": { "type": "string" }, - "market": { - "example": "de", + "query": { "type": "string" }, - "source_urls": { + "suggestions": { "items": { - "type": "string" + "$ref": "#/definitions/tokopedia.Suggestion" }, "type": "array" } }, "type": "object" }, - "zalando.CategoryResponse": { + "tokopedia.CategoryResponse": { "properties": { - "category": { - "example": "shoes", + "category_path": { "type": "string" }, - "count": { - "example": 24, - "type": "integer" - }, "fetched_at": { "type": "string" }, - "market": { - "example": "de", - "type": "string" - }, "products": { "items": { - "$ref": "#/definitions/zalando.ProductSummary" + "$ref": "#/definitions/tokopedia.Product" }, "type": "array" }, "source_url": { "type": "string" - }, - "total_count": { - "example": 145032, - "type": "integer" } }, "type": "object" }, - "zalando.CategoryTaxonomyEntry": { + "tokopedia.HomeResponse": { "properties": { - "category": { - "example": "womens-clothing", - "type": "string" - }, - "department": { - "example": "women", - "type": "string" + "browser_rendered": { + "type": "boolean" }, - "name": { - "example": "Clothing", + "fetched_at": { "type": "string" }, - "url": { - "example": "https://en.zalando.de/womens-clothing/", - "type": "string" - } - }, - "type": "object" - }, - "zalando.Market": { - "properties": { - "code": { - "example": "de", - "type": "string" + "has_next_page": { + "type": "boolean" }, - "domain": { - "example": "en.zalando.de", - "type": "string" - } - }, - "type": "object" - }, - "zalando.MarketsResponse": { - "properties": { - "count": { - "example": 8, + "page": { "type": "integer" }, - "markets": { + "products": { "items": { - "$ref": "#/definitions/zalando.Market" + "$ref": "#/definitions/tokopedia.Product" }, "type": "array" + }, + "tab": { + "$ref": "#/definitions/tokopedia.HomeTab" } }, "type": "object" }, - "zalando.Product": { + "tokopedia.HomeTab": { "properties": { - "brand": { - "example": "On", - "type": "string" - }, - "color": { - "example": "white white/white", - "type": "string" - }, - "currency": { - "example": "EUR", + "id": { "type": "string" }, - "description": { + "image_url": { "type": "string" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" - }, "name": { - "example": "CLOUD 6 - Trainers - white white", - "type": "string" - }, - "price": { - "example": 160, - "type": "number" - }, - "sku": { - "example": "ONM11A03W-A12", "type": "string" - }, - "url": { - "example": "https://en.zalando.de/on-cloud-trainers-white-white-onm11a03w-a12.html", - "type": "string" - }, - "variants": { - "items": { - "$ref": "#/definitions/zalando.ProductVariant" - }, - "type": "array" } }, "type": "object" }, - "zalando.ProductResponse": { + "tokopedia.HomeTabsResponse": { "properties": { "fetched_at": { "type": "string" }, - "market": { - "example": "de", - "type": "string" - }, - "product": { - "$ref": "#/definitions/zalando.Product" - }, - "source_url": { - "type": "string" + "tabs": { + "items": { + "$ref": "#/definitions/tokopedia.HomeTab" + }, + "type": "array" } }, "type": "object" }, - "zalando.ProductSummary": { + "tokopedia.Product": { "properties": { - "brand": { - "example": "On", - "type": "string" - }, - "condition": { - "example": "NEW", - "type": "string" - }, - "currency": { - "example": "EUR", - "type": "string" - }, - "discount_percent": { - "example": 20, - "type": "integer" - }, - "image": { + "image_url": { "type": "string" }, "name": { - "example": "CLOUD 6 - Trainers - white white", "type": "string" }, - "original_price": { - "example": 199.95, - "type": "number" - }, "price": { - "example": 160, - "type": "number" - }, - "silhouette": { - "example": "LOW_SHOE", - "type": "string" - }, - "sku": { - "example": "ONM11A03W-A12", - "type": "string" - }, - "url": { - "example": "https://en.zalando.de/on-cloud-trainers-white-white-onm11a03w-a12.html", - "type": "string" - } - }, - "type": "object" - }, - "zalando.ProductVariant": { - "properties": { - "availability": { - "example": "InStock", - "type": "string" + "type": "integer" }, - "currency": { - "example": "EUR", + "price_text": { "type": "string" }, - "gtin": { - "example": "7615537206202", + "rating": { "type": "string" }, - "price": { - "example": 160, - "type": "number" - }, - "size": { - "example": "42", + "shop_city": { "type": "string" }, - "sku": { - "example": "ONM11A03W-A120010000", + "shop_name": { "type": "string" }, "url": { @@ -268394,620 +272274,270 @@ }, "type": "object" }, - "zalando.SearchResponse": { + "tokopedia.ProductDetail": { "properties": { - "count": { - "example": 24, - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "market": { - "example": "de", - "type": "string" - }, - "products": { - "items": { - "$ref": "#/definitions/zalando.ProductSummary" - }, - "type": "array" + "browser_rendered": { + "type": "boolean" }, - "query": { - "example": "running shoes", + "description": { "type": "string" }, - "source_url": { + "discount_percent": { "type": "string" }, - "total_count": { - "example": 4911, - "type": "integer" - } - }, - "type": "object" - }, - "zalando.SuggestResponse": { - "properties": { "fetched_at": { "type": "string" }, - "market": { - "example": "de", - "type": "string" - }, - "query": { - "example": "running sho", - "type": "string" - }, - "source_url": { - "type": "string" - }, - "suggestions": { - "example": [ - "running shoes", - "running shoes nike", - "running shoes adidas" - ], + "images": { "items": { "type": "string" }, "type": "array" - } - }, - "type": "object" - }, - "zalando.categoriesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/zalando.CategoriesResponse" - }, - "msg": { - "example": "OK", + "name": { "type": "string" - } - }, - "type": "object" - }, - "zalando.categoryResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/zalando.CategoryResponse" }, - "msg": { - "example": "OK", + "original_price": { "type": "string" - } - }, - "type": "object" - }, - "zalando.marketsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/zalando.MarketsResponse" }, - "msg": { - "example": "OK", - "type": "string" - } - }, - "type": "object" - }, - "zalando.productResponseDoc": { - "properties": { - "code": { - "example": 200, + "price": { "type": "integer" }, - "data": { - "$ref": "#/definitions/zalando.ProductResponse" - }, - "msg": { - "example": "OK", + "price_text": { "type": "string" - } - }, - "type": "object" - }, - "zalando.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/zalando.SearchResponse" + "product_id": { + "type": "string" }, - "msg": { - "example": "OK", + "product_key": { "type": "string" - } - }, - "type": "object" - }, - "zalando.suggestResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/zalando.SuggestResponse" + "shop_domain": { + "type": "string" }, - "msg": { - "example": "OK", + "source_url": { "type": "string" } }, "type": "object" }, - "zappos.BrandRef": { + "tokopedia.ReviewFilterAvailability": { "properties": { - "id": { - "example": "WgLNGeICAQs", - "type": "string" - }, - "name": { - "example": "Adidas Outdoor", - "type": "string" - }, - "slug": { - "example": "adidas-outdoor", - "type": "string" + "available": { + "type": "boolean" }, - "url": { - "example": "https://www.zappos.com/adidas-outdoor/WgLNGeICAQs.zso", + "key": { "type": "string" } }, "type": "object" }, - "zappos.BrandResponse": { + "tokopedia.ReviewFiltersResponse": { "properties": { - "brand": { - "type": "string" + "browser_rendered": { + "type": "boolean" }, - "brand_id": { + "fetched_at": { "type": "string" }, - "count": { - "type": "integer" - }, - "facets": { + "media": { "items": { - "$ref": "#/definitions/zappos.Facet" + "$ref": "#/definitions/tokopedia.ReviewFilterAvailability" }, "type": "array" }, - "fetched_at": { + "product_id": { "type": "string" }, - "has_more": { - "type": "boolean" - }, - "page": { - "type": "integer" - }, - "page_count": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "products": { + "ratings": { "items": { - "$ref": "#/definitions/zappos.ProductSummary" + "$ref": "#/definitions/tokopedia.ReviewFilterAvailability" }, "type": "array" }, - "source_url": { - "type": "string" - }, - "total_count": { - "type": "integer" - } - }, - "type": "object" - }, - "zappos.BrandsResponse": { - "properties": { - "brands": { + "topics": { "items": { - "$ref": "#/definitions/zappos.BrandRef" + "$ref": "#/definitions/tokopedia.ReviewFilterAvailability" }, "type": "array" - }, - "has_next": { - "example": true, - "type": "boolean" - }, - "page": { - "example": 1, - "type": "integer" - }, - "page_size": { - "example": 100, - "type": "integer" - }, - "total": { - "example": 440, - "type": "integer" } }, "type": "object" }, - "zappos.ColorVariant": { + "tokopedia.SearchFilter": { "properties": { - "color_id": { - "type": "string" - }, - "color_name": { - "type": "string" + "options": { + "items": { + "$ref": "#/definitions/tokopedia.SearchFilterOption" + }, + "type": "array" }, - "original_price": { + "placeholder": { "type": "string" }, - "percent_off": { - "type": "string" + "searchable": { + "type": "boolean" }, - "price": { + "template": { "type": "string" }, - "url": { + "title": { "type": "string" } }, "type": "object" }, - "zappos.Facet": { + "tokopedia.SearchFilterOption": { "properties": { - "field": { - "example": "txAttrFacet_Gender", - "type": "string" - }, - "multi_select": { - "type": "boolean" - }, - "name": { - "example": "Gender", - "type": "string" - }, - "values": { + "children": { "items": { - "$ref": "#/definitions/zappos.FacetValue" + "$ref": "#/definitions/tokopedia.SearchFilterOption" }, "type": "array" - } - }, - "type": "object" - }, - "zappos.FacetValue": { - "properties": { - "count": { - "example": 69, - "type": "integer" - }, - "selected": { - "type": "boolean" }, - "url": { + "description": { "type": "string" }, - "value": { - "example": "Women", - "type": "string" - } - }, - "type": "object" - }, - "zappos.FeaturedReview": { - "properties": { - "author": { + "hex_color": { "type": "string" }, - "body": { + "icon": { "type": "string" }, - "comfort_rating": { - "type": "number" - }, - "date": { + "input_type": { "type": "string" }, - "id": { + "key": { "type": "string" }, - "look_rating": { - "type": "integer" - }, - "overall_rating": { - "type": "integer" + "max": { + "type": "string" }, - "up_votes": { - "type": "integer" + "min": { + "type": "string" }, - "verified_purchase": { - "type": "boolean" - } - }, - "type": "object" - }, - "zappos.FitFeedback": { - "properties": { - "most_common_answer": { - "description": "MostCommonAnswer and MostCommonPercentage are Zappos's own \"most\ncommon answer\" summary for this dimension, e.g. \"Felt true to size\"\nat 80%.", + "name": { "type": "string" }, - "most_common_percentage": { - "type": "number" + "total_data": { + "type": "string" }, - "percentages": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "description": "Percentages maps each response option's own text (e.g. \"Felt true to\nsize\") to the percentage of reviewers who chose it.", - "type": "object" + "value": { + "type": "string" } }, "type": "object" }, - "zappos.ProductDetailResponse": { + "tokopedia.SearchFiltersResponse": { "properties": { - "arch_fit": { - "$ref": "#/definitions/zappos.FitFeedback" - }, - "brand_name": { - "type": "string" - }, - "breadcrumbs": { - "description": "Breadcrumbs is the site's own navigation path to this product (e.g.\n[\"shoes\", \"sneakers & athletic shoes\", \"adidas Outdoor\"]).", - "items": { - "type": "string" - }, - "type": "array" - }, - "category": { - "type": "string" - }, - "color": { - "type": "string" - }, - "color_id": { + "fetched_at": { "type": "string" }, - "color_variants": { - "description": "ColorVariants lists every sibling color variant of this product\n(including this one), each with its own price. See service.go's doc\ncomment on where this is sourced from.", + "filters": { "items": { - "$ref": "#/definitions/zappos.ColorVariant" + "$ref": "#/definitions/tokopedia.SearchFilter" }, "type": "array" }, - "currency_code": { - "type": "string" - }, - "description": { + "query": { "type": "string" }, - "featured_reviews": { - "description": "FeaturedReviews holds Zappos's own site-selected featured reviews --\nat most two (the page's own \"most helpful\" and \"most voted\" picks,\ndeduplicated if they are the same single review) -- each with real\nauthor/date/body/rating, not the whole review corpus. See service.go's\ndoc comment for why this differs from the JSON-LD block's own\ncontent-free review stub.", + "sorts": { "items": { - "$ref": "#/definitions/zappos.FeaturedReview" + "$ref": "#/definitions/tokopedia.SearchSort" }, "type": "array" + } + }, + "type": "object" + }, + "tokopedia.SearchResponse": { + "properties": { + "browser_rendered": { + "type": "boolean" }, "fetched_at": { "type": "string" }, - "images": { + "page": { + "type": "integer" + }, + "products": { "items": { - "type": "string" + "$ref": "#/definitions/tokopedia.Product" }, "type": "array" }, - "in_stock": { - "type": "boolean" - }, - "original_price": { - "type": "string" - }, - "price": { - "type": "string" - }, - "product_id": { - "type": "string" - }, - "product_name": { + "query": { "type": "string" }, - "rating": { - "type": "number" - }, - "rating_breakdown": { - "additionalProperties": { - "format": "float64", - "type": "number" - }, - "description": "RatingBreakdown maps each star value (\"1\" through \"5\") to the\npercentage of reviewers who gave that rating.", - "type": "object" - }, - "rating_count": { - "description": "RatingCount is the product's total review count, sourced from the\npage's own aggregate rating summary (not the number of entries in\nFeaturedReviews, which is at most 2 -- see FeaturedReviews' doc\ncomment).", + "sort": { "type": "integer" }, - "size_fit": { - "allOf": [ - { - "$ref": "#/definitions/zappos.FitFeedback" - } - ], - "description": "SizeFit, WidthFit, and ArchFit summarize reviewer-submitted fit\nfeedback for this product -- nil when the product has no fit-feedback\ndata. Sourced from the same RSC \"reviews\" object as RatingBreakdown/\nFeaturedReviews, at no extra upstream cost. See FitFeedback's doc\ncomment." - }, "source_url": { "type": "string" - }, - "url": { - "type": "string" - }, - "width_fit": { - "$ref": "#/definitions/zappos.FitFeedback" } }, "type": "object" }, - "zappos.ProductSummary": { + "tokopedia.SearchSort": { "properties": { - "brand_name": { - "type": "string" - }, - "color": { - "type": "string" - }, - "color_id": { - "type": "string" - }, - "gender": { - "items": { - "type": "string" - }, - "type": "array" - }, - "image_url": { - "type": "string" - }, - "is_new": { - "type": "boolean" - }, - "on_hand": { - "type": "integer" - }, - "on_sale": { - "type": "boolean" - }, - "original_price": { - "type": "string" - }, - "percent_off": { - "type": "string" - }, - "price": { - "type": "string" - }, - "product_id": { - "type": "string" - }, - "product_name": { + "apply_filter": { "type": "string" }, - "product_type": { + "input_type": { "type": "string" }, - "rating": { - "type": "number" - }, - "review_count": { - "type": "integer" - }, - "style_color": { + "key": { "type": "string" }, - "style_id": { + "name": { "type": "string" }, - "url": { + "value": { "type": "string" } }, "type": "object" }, - "zappos.SearchResponse": { + "tokopedia.Suggestion": { "properties": { - "count": { - "type": "integer" - }, - "facets": { - "description": "Facets lists this page's own filterable fields (gender, department,\nshoe size, etc.), each with live result counts and drill-down URLs --\nsourced from the same response this package already fetches, not a\nseparate upstream call. See buildFacets's doc comment.", - "items": { - "$ref": "#/definitions/zappos.Facet" - }, - "type": "array" - }, - "fetched_at": { - "type": "string" - }, - "has_more": { + "is_ad": { "type": "boolean" }, - "page": { - "type": "integer" - }, - "page_count": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "products": { - "items": { - "$ref": "#/definitions/zappos.ProductSummary" - }, - "type": "array" - }, - "source_url": { + "text": { "type": "string" }, - "term": { + "url": { "type": "string" - }, - "total_count": { - "type": "integer" } }, "type": "object" }, - "zappos.SuggestResponse": { + "tokopedia.autocompleteResponseDoc": { "properties": { - "count": { + "code": { + "example": 200, "type": "integer" }, - "fetched_at": { - "type": "string" - }, - "query": { - "type": "string" + "data": { + "$ref": "#/definitions/tokopedia.AutocompleteResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" - }, - "suggestions": { - "items": { - "type": "string" - }, - "type": "array" } }, "type": "object" }, - "zappos.brandResponseDoc": { + "tokopedia.categoryResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/zappos.BrandResponse" + "$ref": "#/definitions/tokopedia.CategoryResponse" }, "msg": { "example": "OK", @@ -269016,14 +272546,14 @@ }, "type": "object" }, - "zappos.brandsResponseDoc": { + "tokopedia.homeResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/zappos.BrandsResponse" + "$ref": "#/definitions/tokopedia.HomeResponse" }, "msg": { "example": "OK", @@ -269032,14 +272562,14 @@ }, "type": "object" }, - "zappos.productDetailResponseDoc": { + "tokopedia.homeTabsResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/zappos.ProductDetailResponse" + "$ref": "#/definitions/tokopedia.HomeTabsResponse" }, "msg": { "example": "OK", @@ -269048,14 +272578,14 @@ }, "type": "object" }, - "zappos.searchResponseDoc": { + "tokopedia.productResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/zappos.SearchResponse" + "$ref": "#/definitions/tokopedia.ProductDetail" }, "msg": { "example": "OK", @@ -269064,14 +272594,14 @@ }, "type": "object" }, - "zappos.suggestResponseDoc": { + "tokopedia.reviewFiltersResponseDoc": { "properties": { "code": { "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/zappos.SuggestResponse" + "$ref": "#/definitions/tokopedia.ReviewFiltersResponse" }, "msg": { "example": "OK", @@ -269080,214 +272610,124 @@ }, "type": "object" }, - "zara.CategoriesResponse": { + "tokopedia.searchFiltersResponseDoc": { "properties": { - "categories": { - "items": { - "$ref": "#/definitions/zara.CategoryNode" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "fetched_at": { - "type": "string" + "data": { + "$ref": "#/definitions/tokopedia.SearchFiltersResponse" }, - "source_url": { + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "zara.CategoryNode": { + "tokopedia.searchResponseDoc": { "properties": { - "has_subcategories": { - "type": "boolean" - }, - "id": { + "code": { + "example": 200, "type": "integer" }, - "name": { - "type": "string" + "data": { + "$ref": "#/definitions/tokopedia.SearchResponse" }, - "section_name": { + "msg": { + "example": "OK", "type": "string" - }, - "subcategories": { - "items": { - "$ref": "#/definitions/zara.CategoryNode" - }, - "type": "array" } }, "type": "object" }, - "zara.CategoryProductsResponse": { + "tomsguide.AuthorResponse": { "properties": { - "category_id": { - "type": "string" - }, - "count": { - "type": "integer" - }, - "fetched_at": { - "type": "string" - }, - "products": { + "articles": { "items": { - "$ref": "#/definitions/zara.ProductSummary" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "source_url": { - "type": "string" - } - }, - "type": "object" - }, - "zara.ColorSummary": { - "properties": { - "availability": { - "type": "string" + "biography": { + "items": { + "type": "string" + }, + "type": "array" }, - "id": { - "type": "string" + "has_next_page": { + "type": "boolean" }, - "image_url": { + "job_title": { "type": "string" }, "name": { "type": "string" }, - "price": { - "type": "number" - }, - "product_id": { + "page": { "type": "integer" - } - }, - "type": "object" - }, - "zara.CompositionComponent": { - "properties": { - "material": { - "type": "string" - }, - "percentage": { - "type": "string" - } - }, - "type": "object" - }, - "zara.CompositionPart": { - "properties": { - "components": { - "items": { - "$ref": "#/definitions/zara.CompositionComponent" - }, - "type": "array" }, - "description": { - "type": "string" - } - }, - "type": "object" - }, - "zara.Facet": { - "properties": { - "key": { + "slug": { "type": "string" }, - "values": { + "social_links": { "items": { - "$ref": "#/definitions/zara.FacetValue" + "$ref": "#/definitions/tomsguide.AuthorSocialLink" }, "type": "array" - } - }, - "type": "object" - }, - "zara.FacetValue": { - "properties": { - "count": { - "type": "integer" }, - "id": { - "type": "string" - }, - "label": { + "url": { "type": "string" } }, "type": "object" }, - "zara.ProductDetailColor": { + "tomsguide.AuthorSocialLink": { "properties": { - "availability": { - "type": "string" - }, - "description": { - "type": "string" - }, - "id": { + "platform": { "type": "string" }, - "images": { - "items": { - "type": "string" - }, - "type": "array" - }, - "name": { + "url": { "type": "string" - }, - "price": { - "type": "number" - }, - "sizes": { - "items": { - "$ref": "#/definitions/zara.ProductDetailSize" - }, - "type": "array" } }, "type": "object" }, - "zara.ProductDetailResponse": { + "tomshardware.AuthorResponse": { "properties": { - "colors": { + "articles": { "items": { - "$ref": "#/definitions/zara.ProductDetailColor" + "$ref": "#/definitions/newsplatform.HeadlineItem" }, "type": "array" }, - "composition": { + "biography": { "items": { - "$ref": "#/definitions/zara.CompositionPart" + "type": "string" }, "type": "array" }, - "family_name": { - "type": "string" + "has_next_page": { + "type": "boolean" }, - "fetched_at": { + "job_title": { "type": "string" }, "name": { "type": "string" }, - "product_id": { - "type": "string" - }, - "reference": { - "type": "string" - }, - "section_name": { - "type": "string" + "page": { + "type": "integer" }, - "source_url": { + "slug": { "type": "string" }, - "subfamily_name": { - "type": "string" + "social_links": { + "items": { + "$ref": "#/definitions/tomshardware.AuthorSocialLink" + }, + "type": "array" }, "url": { "type": "string" @@ -269295,59 +272735,26 @@ }, "type": "object" }, - "zara.ProductDetailSize": { + "tomshardware.AuthorSocialLink": { "properties": { - "availability": { + "platform": { "type": "string" }, - "id": { - "type": "integer" - }, - "name": { + "url": { "type": "string" - }, - "price": { - "type": "number" - }, - "sku": { - "type": "integer" } }, "type": "object" }, - "zara.ProductSummary": { + "torontostar.AuthorArticle": { "properties": { - "availability": { - "type": "string" - }, - "colors": { - "items": { - "$ref": "#/definitions/zara.ColorSummary" - }, - "type": "array" - }, - "family_name": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "image_url": { - "type": "string" - }, - "name": { - "type": "string" - }, - "price": { - "type": "number" - }, - "reference": { + "published_at": { "type": "string" }, - "section_name": { + "summary": { "type": "string" }, - "subfamily_name": { + "title": { "type": "string" }, "url": { @@ -269356,101 +272763,33 @@ }, "type": "object" }, - "zara.SearchResponse": { + "torontostar.AuthorResponse": { "properties": { - "count": { - "type": "integer" - }, - "facets": { - "items": { - "$ref": "#/definitions/zara.Facet" - }, - "type": "array" - }, - "fetched_at": { - "type": "string" - }, - "is_last_page": { - "type": "boolean" - }, - "limit": { - "type": "integer" - }, - "offset": { - "type": "integer" - }, - "products": { + "articles": { "items": { - "$ref": "#/definitions/zara.ProductSummary" + "$ref": "#/definitions/torontostar.AuthorArticle" }, "type": "array" }, - "query": { - "type": "string" - }, - "section": { - "type": "string" - }, - "source_url": { - "type": "string" - }, - "total_count": { - "type": "integer" - } - }, - "type": "object" - }, - "zara.Store": { - "properties": { - "address": { + "bio": { "type": "string" }, - "city": { + "image_url": { "type": "string" }, - "commercial_name": { + "job_title": { "type": "string" }, - "country": { + "location": { "type": "string" }, - "donation_allowed": { - "type": "boolean" - }, - "id": { - "type": "integer" - }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" - }, "name": { "type": "string" }, - "phone": { - "type": "string" - }, - "pickup_allowed": { - "type": "boolean" - }, - "postal_code": { - "type": "string" - }, - "sections": { - "items": { - "type": "string" - }, - "type": "array" - }, - "state": { - "type": "string" - }, - "status": { + "slug": { "type": "string" }, - "type": { + "topics": { "type": "string" }, "url": { @@ -269459,2466 +272798,69088 @@ }, "type": "object" }, - "zara.StoreResponse": { + "townhall.AuthorArticle": { "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { + "image_url": { "type": "string" }, - "lat": { - "type": "number" - }, - "lng": { - "type": "number" - }, - "radius": { - "type": "integer" - }, - "source_url": { + "published_at": { "type": "string" }, - "stores": { - "items": { - "$ref": "#/definitions/zara.Store" - }, - "type": "array" - } - }, - "type": "object" - }, - "zara.SuggestResponse": { - "properties": { - "count": { - "type": "integer" - }, - "fetched_at": { + "section": { "type": "string" }, - "query": { + "title": { "type": "string" }, - "source_url": { + "url": { "type": "string" }, - "suggestions": { - "items": { - "type": "string" - }, - "type": "array" + "vip": { + "description": "VIP is true when Townhall marks the story with its VIP badge, meaning\nonly the lead paragraph is free (see Article's paywalled flag).", + "type": "boolean" } }, "type": "object" }, - "zara.categoriesResponseDoc": { + "townhall.AuthorResponse": { "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/zara.CategoriesResponse" + "articles": { + "items": { + "$ref": "#/definitions/townhall.AuthorArticle" + }, + "type": "array" }, - "msg": { - "example": "OK", + "bio": { "type": "string" - } - }, - "type": "object" - }, - "zara.categoryProductsResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/zara.CategoryProductsResponse" }, - "msg": { - "example": "OK", + "image_url": { "type": "string" - } - }, - "type": "object" - }, - "zara.productDetailResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/zara.ProductDetailResponse" }, - "msg": { - "example": "OK", + "name": { "type": "string" - } - }, - "type": "object" - }, - "zara.searchResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" - }, - "data": { - "$ref": "#/definitions/zara.SearchResponse" }, - "msg": { - "example": "OK", + "slug": { "type": "string" - } - }, - "type": "object" - }, - "zara.storesResponseDoc": { - "properties": { - "code": { - "example": 200, - "type": "integer" }, - "data": { - "$ref": "#/definitions/zara.StoreResponse" + "url": { + "type": "string" }, - "msg": { - "example": "OK", + "x_url": { "type": "string" } }, "type": "object" }, - "zara.suggestResponseDoc": { + "trends.ExploreQueriesResponse": { "properties": { - "code": { - "example": 200, + "category": { + "description": "Trends category ID that was applied. `0` means all categories.", + "example": 0, "type": "integer" }, - "data": { - "$ref": "#/definitions/zara.SuggestResponse" - }, - "msg": { - "example": "OK", + "geo": { + "description": "Location code the data covers, such as `US`.", + "example": "US", "type": "string" - } - }, - "type": "object" - }, - "zaxbys.MenuCategory": { - "properties": { - "catering": { - "description": "Catering marks a catering-only section (larger platters/boxed\nlunches), separate from the everyday menu.", - "type": "boolean" - }, - "id": { - "type": "integer" }, - "image": { + "hl": { + "description": "Locale that was applied, such as `en-US`.", + "example": "en-US", "type": "string" }, - "name": { - "example": "Fingerz™ & Wings Meals", + "keywords": { + "description": "Keywords that were compared.", + "items": { + "type": "string" + }, + "type": "array" + }, + "property": { + "description": "Google property filter that was applied, matching `type`.", "type": "string" }, - "products": { + "queries": { + "description": "Related queries, grouped by keyword.", "items": { - "$ref": "#/definitions/zaxbys.MenuProduct" + "$ref": "#/definitions/trends.RelatedGroup" }, "type": "array" }, - "slug": { + "query_type": { + "description": "Kind of related queries returned: `top` or `rising`.", + "example": "top", "type": "string" }, - "spotlight": { - "type": "boolean" - } - }, - "type": "object" - }, - "zaxbys.MenuModifierGroup": { - "properties": { - "id": { - "type": "integer" + "time_range": { + "description": "Time range that was applied, such as `today 12-m`.", + "example": "today 12-m", + "type": "string" }, - "name": { - "example": "Boneless or traditional?", + "type": { + "description": "Search type that was applied: `web`, `image`, `news`, `youtube` or `shopping`.", + "example": "web", "type": "string" }, - "options": { - "items": { - "$ref": "#/definitions/zaxbys.MenuModifierOption" - }, - "type": "array" + "tz": { + "description": "Timezone offset in minutes that was applied.", + "example": 0, + "type": "integer" } }, "type": "object" }, - "zaxbys.MenuModifierOption": { + "trends.ExploreRequest": { "properties": { - "cost": { - "example": 17, - "type": "number" + "category": { + "example": 0, + "type": "integer" }, - "default": { - "type": "boolean" + "geo": { + "enum": [ + "WORLDWIDE", + "AF", + "AX", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BA", + "BW", + "BV", + "BR", + "IO", + "VG", + "BN", + "BG", + "BF", + "BI", + "KH", + "CM", + "CA", + "CV", + "BQ", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CG", + "CD", + "CK", + "CR", + "CI", + "HR", + "CU", + "CW", + "CY", + "CZ", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "XK", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "KP", + "MK", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "RE", + "RO", + "RU", + "RW", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "KR", + "SS", + "ES", + "LK", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UM", + "VI", + "UG", + "UA", + "AE", + "GB", + "US", + "UY", + "UZ", + "VU", + "VA", + "VE", + "VN", + "WF", + "EH", + "YE", + "ZM", + "ZW" + ], + "example": "US", + "type": "string" }, - "groups": { + "hl": { + "example": "en-US", + "type": "string" + }, + "keywords": { + "example": [ + "chatgpt", + "openai" + ], "items": { - "$ref": "#/definitions/zaxbys.MenuModifierGroup" + "type": "string" }, "type": "array" }, - "id": { - "type": "integer" + "property": { + "example": "", + "type": "string" }, - "name": { - "example": "Sauced Fingerz", + "time_range": { + "enum": [ + "now 1-H", + "now 4-H", + "now 1-d", + "now 7-d", + "today 1-m", + "today 3-m", + "today 12-m", + "today 5-y", + "all" + ], + "example": "today 12-m", + "type": "string" + }, + "type": { + "enum": [ + "web", + "image", + "news", + "youtube", + "shopping" + ], + "example": "web", "type": "string" + }, + "tz": { + "example": 0, + "type": "integer" } }, "type": "object" }, - "zaxbys.MenuProduct": { + "trends.ExploreResponse": { "properties": { - "available_now": { - "description": "AvailableNow reflects the upstream's own current-availability flag\n(e.g. a limited-time item outside its active window is excluded here,\nnot filtered out of the response -- callers can decide what to do\nwith a not-currently-available item).", - "type": "boolean" + "category": { + "description": "Trends category ID that was applied. `0` means all categories.", + "example": 0, + "type": "integer" }, - "badges": { + "geo": { + "description": "Location code the data covers, such as `US`.", + "example": "US", + "type": "string" + }, + "hl": { + "description": "Locale that was applied, such as `en-US`.", + "example": "en-US", + "type": "string" + }, + "interest_by_region": { + "description": "Interest in each keyword by region.", "items": { - "type": "string" + "$ref": "#/definitions/trends.RegionInterest" }, "type": "array" }, - "calories": { - "example": "1440 - 1770", - "type": "string" - }, - "cost": { - "example": 0, - "type": "number" + "interest_over_time": { + "description": "Interest in each keyword over time, one point per time step.", + "items": { + "$ref": "#/definitions/trends.InterestPoint" + }, + "type": "array" }, - "customization_available": { - "type": "boolean" + "keywords": { + "description": "Keywords that were compared.", + "items": { + "type": "string" + }, + "type": "array" }, - "description": { + "property": { + "description": "Google property filter that was applied, matching `type`.", "type": "string" }, - "groups": { + "related_queries": { + "description": "Top related queries, grouped by keyword. Same content as `top_queries`.", "items": { - "$ref": "#/definitions/zaxbys.MenuModifierGroup" + "$ref": "#/definitions/trends.RelatedGroup" }, "type": "array" }, - "image": { - "type": "string" - }, - "product_id": { - "example": 113251777, - "type": "integer" + "related_topics": { + "description": "Related topics, grouped by keyword.", + "items": { + "$ref": "#/definitions/trends.RelatedGroup" + }, + "type": "array" }, - "short_description": { - "type": "string" + "rising_queries": { + "description": "Rising related queries, grouped by keyword.", + "items": { + "$ref": "#/definitions/trends.RelatedGroup" + }, + "type": "array" }, - "size": { + "time_range": { + "description": "Time range that was applied, such as `today 12-m`.", + "example": "today 12-m", "type": "string" }, - "tags": { + "top_queries": { + "description": "Top related queries, grouped by keyword.", "items": { - "type": "string" + "$ref": "#/definitions/trends.RelatedGroup" }, "type": "array" }, - "title": { - "example": "Lemon Pepper Wings & Things Meal", + "type": { + "description": "Search type that was applied: `web`, `image`, `news`, `youtube` or `shopping`.", + "example": "web", "type": "string" + }, + "tz": { + "description": "Timezone offset in minutes that was applied.", + "example": 0, + "type": "integer" } }, "type": "object" }, - "zaxbys.MenuResponse": { + "trends.InterestByRegionResponse": { "properties": { - "categories": { + "category": { + "description": "Trends category ID that was applied. `0` means all categories.", + "example": 0, + "type": "integer" + }, + "geo": { + "description": "Location code the data covers, such as `US`.", + "example": "US", + "type": "string" + }, + "hl": { + "description": "Locale that was applied, such as `en-US`.", + "example": "en-US", + "type": "string" + }, + "interest_by_region": { + "description": "Interest in each keyword by region.", "items": { - "$ref": "#/definitions/zaxbys.MenuCategory" + "$ref": "#/definitions/trends.RegionInterest" }, "type": "array" }, - "category_count": { - "example": 15, - "type": "integer" + "keywords": { + "description": "Keywords that were compared.", + "items": { + "type": "string" + }, + "type": "array" }, - "fetched_at": { + "property": { + "description": "Google property filter that was applied, matching `type`.", "type": "string" }, - "product_count": { - "example": 106, - "type": "integer" + "time_range": { + "description": "Time range that was applied, such as `today 12-m`.", + "example": "today 12-m", + "type": "string" }, - "source_url": { + "type": { + "description": "Search type that was applied: `web`, `image`, `news`, `youtube` or `shopping`.", + "example": "web", "type": "string" + }, + "tz": { + "description": "Timezone offset in minutes that was applied.", + "example": 0, + "type": "integer" } }, "type": "object" }, - "zaxbys.NearbyResponse": { + "trends.InterestOverTimeResponse": { "properties": { - "count": { - "example": 10, + "category": { + "description": "Trends category ID that was applied. `0` means all categories.", + "example": 0, "type": "integer" }, - "fetched_at": { + "geo": { + "description": "Location code the data covers, such as `US`.", + "example": "US", "type": "string" }, - "radius_miles": { - "example": 25, - "type": "integer" - }, - "source_url": { + "hl": { + "description": "Locale that was applied, such as `en-US`.", + "example": "en-US", "type": "string" }, - "stores": { + "interest_over_time": { + "description": "Interest in each keyword over time, one point per time step.", "items": { - "$ref": "#/definitions/zaxbys.NearbyStore" + "$ref": "#/definitions/trends.InterestPoint" }, "type": "array" - } - }, - "type": "object" - }, - "zaxbys.NearbyStore": { - "properties": { - "address": { - "$ref": "#/definitions/zaxbys.StoreAddress" - }, - "available": { - "description": "Available is Zaxby's own overall availability flag for this store\n(distinct from CurrentlyOpen, which reflects today's hours).", - "type": "boolean" - }, - "currently_open": { - "type": "boolean" - }, - "distance_miles": { - "description": "DistanceMiles is measured from the requested coordinate.", - "example": 1.78, - "type": "number" - }, - "eta": { - "description": "ETA is Zaxby's own published estimate for this store, e.g. \"24MIN\".\nNot a fixed unit-tagged duration upstream, so it is passed through as-is.", - "example": "24MIN", - "type": "string" }, - "hours": { + "keywords": { + "description": "Keywords that were compared.", "items": { - "$ref": "#/definitions/zaxbys.StoreHours" + "type": "string" }, "type": "array" }, - "latitude": { - "example": 40.872505, - "type": "number" - }, - "longitude": { - "example": -73.854276, - "type": "number" - }, - "name": { - "example": "Bronx - 3260 Boston Road", - "type": "string" - }, - "order_url": { - "description": "OrderURL is Zaxby's own Olo-hosted ordering page for this store.", + "property": { + "description": "Google property filter that was applied, matching `type`.", "type": "string" }, - "phone": { - "example": "(929) 992-4390", + "time_range": { + "description": "Time range that was applied, such as `today 12-m`.", + "example": "today 12-m", "type": "string" }, - "services": { - "$ref": "#/definitions/zaxbys.StoreServices" - }, - "slug": { - "example": "bronx-3260-boston-road", + "type": { + "description": "Search type that was applied: `web`, `image`, `news`, `youtube` or `shopping`.", + "example": "web", "type": "string" }, - "store_id": { - "example": 299987, + "tz": { + "description": "Timezone offset in minutes that was applied.", + "example": 0, "type": "integer" - }, - "store_number": { - "example": "75030", - "type": "string" } }, "type": "object" }, - "zaxbys.StoreAddress": { + "trends.InterestPoint": { "properties": { - "city": { - "example": "Bronx", + "formatted_axis_time": { + "description": "Date label used on the chart axis, such as `Apr 2026`.", + "example": "Apr 2026", "type": "string" }, - "postal_code": { - "description": "PostalCode is a US ZIP code. The upstream source is US-only.", - "example": "10469", + "formatted_time": { + "description": "Date label of this point as Google Trends shows it, such as `Apr 2026`.", + "example": "Apr 2026", "type": "string" }, - "region": { - "example": "NY", + "time": { + "description": "Time of this data point, in Unix seconds, as a string.", + "example": "1777075200", "type": "string" }, - "street": { - "example": "3260 Boston Road", - "type": "string" + "values": { + "description": "Interest value for each keyword at this point.", + "items": { + "$ref": "#/definitions/trends.TrendValue" + }, + "type": "array" } }, "type": "object" }, - "zaxbys.StoreHours": { + "trends.RegionInterest": { "properties": { - "label": { - "example": "Delivery", + "geo_code": { + "description": "Code of the region, such as `US-CA`.", + "example": "US-CA", "type": "string" }, - "ranges": { + "geo_name": { + "description": "Name of the region, such as `California`.", + "example": "California", + "type": "string" + }, + "values": { + "description": "Interest value for each keyword in this region.", "items": { - "$ref": "#/definitions/zaxbys.StoreHoursRange" + "$ref": "#/definitions/trends.TrendValue" + }, + "type": "array" + } + }, + "type": "object" + }, + "trends.RelatedGroup": { + "properties": { + "items": { + "description": "Related entries for this keyword.", + "items": { + "$ref": "#/definitions/trends.RelatedItem" }, "type": "array" }, - "type": { - "example": "drivethru", + "keyword": { + "description": "Keyword the related entries belong to.", + "example": "chatgpt", "type": "string" } }, "type": "object" }, - "zaxbys.StoreHoursRange": { + "trends.RelatedItem": { "properties": { - "closes_at": { - "example": "2026-09-06 03:00", + "formatted_value": { + "description": "Value as Google Trends displays it.", + "example": "100", "type": "string" }, - "day": { - "example": "Sat", + "link": { + "description": "Google Trends path that opens this entry in Explore.", + "example": "/trends/explore?q=chatgpt", "type": "string" }, - "opens_at": { - "example": "2026-09-05 10:30", + "query": { + "description": "Related search query.", + "example": "chatgpt login", + "type": "string" + }, + "topic_mid": { + "description": "Google topic ID of the related topic, such as `/g/11khcfz0y2`.", + "example": "/g/11khcfz0y2", + "type": "string" + }, + "topic_title": { + "description": "Title of the related topic.", + "example": "ChatGPT", + "type": "string" + }, + "topic_type": { + "description": "Type label of the related topic, such as `Topic`.", + "example": "Topic", "type": "string" + }, + "value": { + "description": "Relative popularity score Google Trends gives the entry.", + "example": 100, + "type": "integer" } }, "type": "object" }, - "zaxbys.StoreResponse": { + "trends.RelatedTopicsResponse": { "properties": { - "address": { - "$ref": "#/definitions/zaxbys.StoreAddress" - }, - "available": { - "description": "Available is Zaxby's own overall availability flag for this store\n(distinct from CurrentlyOpen, which reflects today's hours).", - "type": "boolean" - }, - "currently_open": { - "type": "boolean" + "category": { + "description": "Trends category ID that was applied. `0` means all categories.", + "example": 0, + "type": "integer" }, - "eta": { - "description": "ETA is Zaxby's own published estimate for this store, e.g. \"24MIN\".\nNot a fixed unit-tagged duration upstream, so it is passed through as-is.", - "example": "24MIN", + "geo": { + "description": "Location code the data covers, such as `US`.", + "example": "US", "type": "string" }, - "fetched_at": { + "hl": { + "description": "Locale that was applied, such as `en-US`.", + "example": "en-US", "type": "string" }, - "hours": { + "keywords": { + "description": "Keywords that were compared.", "items": { - "$ref": "#/definitions/zaxbys.StoreHours" + "type": "string" }, "type": "array" }, - "latitude": { - "example": 40.872505, - "type": "number" - }, - "longitude": { - "example": -73.854276, - "type": "number" - }, - "name": { - "example": "Bronx - 3260 Boston Road", - "type": "string" - }, - "order_url": { - "description": "OrderURL is Zaxby's own Olo-hosted ordering page for this store.", - "type": "string" - }, - "phone": { - "example": "(929) 992-4390", + "property": { + "description": "Google property filter that was applied, matching `type`.", "type": "string" }, - "services": { - "$ref": "#/definitions/zaxbys.StoreServices" + "related_topics": { + "description": "Related topics, grouped by keyword.", + "items": { + "$ref": "#/definitions/trends.RelatedGroup" + }, + "type": "array" }, - "slug": { - "example": "bronx-3260-boston-road", + "time_range": { + "description": "Time range that was applied, such as `today 12-m`.", + "example": "today 12-m", "type": "string" }, - "source_url": { + "type": { + "description": "Search type that was applied: `web`, `image`, `news`, `youtube` or `shopping`.", + "example": "web", "type": "string" }, - "store_id": { - "example": 299987, + "tz": { + "description": "Timezone offset in minutes that was applied.", + "example": 0, "type": "integer" - }, - "store_number": { - "example": "75030", - "type": "string" } }, "type": "object" }, - "zaxbys.StoreServices": { + "trends.TrendCategory": { "properties": { - "catering": { - "type": "boolean" - }, - "curbside": { - "type": "boolean" - }, - "delivery": { - "type": "boolean" - }, - "dine_in": { - "type": "boolean" - }, - "dispatch": { - "type": "boolean" - }, - "drive_thru": { - "type": "boolean" - }, - "free_wifi": { - "type": "boolean" - }, - "milkshakes": { - "type": "boolean" - }, - "online_ordering": { - "type": "boolean" - }, - "open_late": { - "type": "boolean" + "id": { + "description": "Trends category ID. Pass it as `category`.", + "example": 0, + "type": "integer" }, - "pickup": { - "type": "boolean" + "name": { + "description": "Category name, such as `All`.", + "example": "All", + "type": "string" } }, "type": "object" }, - "zaxbys.menuResponseDoc": { + "trends.TrendValue": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "formatted_value": { + "description": "Interest score as Google Trends displays it.", + "example": "87", + "type": "string" }, - "data": { - "$ref": "#/definitions/zaxbys.MenuResponse" + "has_data": { + "description": "Whether Google Trends has data for this keyword at this point.", + "example": true, + "type": "boolean" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "keyword": { + "description": "Keyword the value belongs to.", + "example": "chatgpt", + "type": "string" + }, + "value": { + "description": "Relative interest score for the keyword, as Google Trends reports it.", + "example": 87, + "type": "integer" } }, "type": "object" }, - "zaxbys.nearbyResponseDoc": { + "trends.TrendingArticle": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", - "type": "integer" + "source": { + "description": "Name of the news outlet that published the article.", + "example": "Example News", + "type": "string" }, - "data": { - "$ref": "#/definitions/zaxbys.NearbyResponse" + "time": { + "description": "When the article was published, as Google words it, such as `2 hours ago`.", + "example": "2 hours ago", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "title": { + "description": "Headline of the news article.", + "example": "Why chatgpt is trending", + "type": "string" + }, + "url": { + "description": "URL of the news article.", + "example": "https://example.com/news", + "type": "string" } }, "type": "object" }, - "zaxbys.storeResponseDoc": { + "trends.TrendingDetailRequest": { "properties": { - "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "category": { + "example": 0, "type": "integer" }, - "data": { - "$ref": "#/definitions/zaxbys.StoreResponse" + "geo": { + "enum": [ + "WORLDWIDE", + "AF", + "AX", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BA", + "BW", + "BV", + "BR", + "IO", + "VG", + "BN", + "BG", + "BF", + "BI", + "KH", + "CM", + "CV", + "CA", + "BQ", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CG", + "CD", + "CK", + "CR", + "CI", + "HR", + "CU", + "CW", + "CY", + "CZ", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "XK", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "KP", + "MK", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "RE", + "RO", + "RU", + "RW", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "KR", + "SS", + "ES", + "LK", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UM", + "VI", + "UG", + "UA", + "AE", + "GB", + "US", + "UY", + "UZ", + "VU", + "VA", + "VE", + "VN", + "WF", + "EH", + "YE", + "ZM", + "ZW" + ], + "example": "US", + "type": "string" }, - "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "hl": { + "example": "en-US", + "type": "string" + }, + "property": { + "example": "", + "type": "string" + }, + "query": { + "example": "chatgpt", + "type": "string" + }, + "time_range": { + "enum": [ + "now 1-H", + "now 4-H", + "now 1-d", + "now 7-d", + "today 1-m", + "today 3-m", + "today 12-m", + "today 5-y", + "all" + ], + "example": "now 7-d", + "type": "string" + }, + "type": { + "enum": [ + "web", + "image", + "news", + "youtube", + "shopping" + ], + "example": "web", + "type": "string" + }, + "tz": { + "example": 0, + "type": "integer" } }, "type": "object" }, - "zdnet.AuthorResponse": { + "trends.TrendingItem": { "properties": { - "article_count": { - "type": "integer" - }, "articles": { + "description": "News articles linked to the trend.", "items": { - "$ref": "#/definitions/newsplatform.HeadlineItem" + "$ref": "#/definitions/trends.TrendingArticle" }, "type": "array" }, - "biography": { - "items": { - "type": "string" - }, - "type": "array" + "explore_url": { + "description": "Google Trends Explore URL for the trend.", + "example": "https://trends.google.com/trends/explore?q=chatgpt&geo=US", + "type": "string" }, - "credentials": { + "query": { + "description": "Search query behind the trend.", + "example": "chatgpt", "type": "string" }, - "expertise": { + "rank": { + "description": "Rank of the trend in the list, with `1` as the top entry.", + "example": 1, + "type": "integer" + }, + "related_terms": { + "description": "Related search terms listed for the trend.", "items": { - "$ref": "#/definitions/zdnet.AuthorTopic" + "type": "string" }, "type": "array" }, - "has_next_page": { - "type": "boolean" + "share_url": { + "description": "Link for sharing the trend.", + "type": "string" }, - "image_url": { + "started_unix": { + "description": "Time the trend started, in Unix seconds.", + "example": 1777075200, + "type": "integer" + }, + "status": { + "description": "Whether the trend is `active` or `ended`.", + "example": "active", "type": "string" }, - "joined_at": { + "title": { + "description": "Title of the trend.", + "example": "chatgpt", "type": "string" }, - "name": { + "traffic": { + "description": "Approximate search volume label for the trend, such as `200K+`.", + "example": "200K+", "type": "string" }, - "page": { + "updated_unix": { + "description": "Time the trend was last updated, in Unix seconds.", + "example": 1777078800, + "type": "integer" + } + }, + "type": "object" + }, + "trends.TrendingResponse": { + "properties": { + "category": { + "description": "Trends category ID that was applied. `0` means all categories.", + "example": 0, "type": "integer" }, - "role": { + "geo": { + "description": "Country code the trends cover, such as `US`.", + "example": "US", "type": "string" }, - "slug": { + "hl": { + "description": "Locale that was applied, such as `en-US`.", + "example": "en-US", "type": "string" }, - "social_links": { + "items": { + "description": "Trending searches, one entry per trend.", "items": { - "$ref": "#/definitions/zdnet.AuthorSocialLink" + "$ref": "#/definitions/trends.TrendingItem" }, "type": "array" }, - "url": { + "sort_by": { + "description": "Sort order that was applied: `relevance`, `title`, `recency` or `search_volume`.", + "example": "relevance", "type": "string" - } - }, - "type": "object" - }, - "zdnet.AuthorSocialLink": { - "properties": { - "platform": { + }, + "status": { + "description": "Status filter that was applied: `all`, `active` or `ended`.", + "example": "all", "type": "string" }, - "url": { + "time_range": { + "description": "Time window that was applied. Same value as `window`.", + "example": "24h", + "type": "string" + }, + "tz": { + "description": "Timezone offset in minutes that was applied.", + "example": 0, + "type": "integer" + }, + "window": { + "description": "Time window that was applied: `4h`, `24h`, `48h` or `7d`.", + "example": "24h", "type": "string" } }, "type": "object" }, - "zdnet.AuthorTopic": { + "trends.TrendsCategoriesResponse": { "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" + "categories": { + "description": "Supported Trends categories, each with an ID and name.", + "items": { + "$ref": "#/definitions/trends.TrendCategory" + }, + "type": "array" } }, "type": "object" }, - "zillow.AutocompleteItem": { + "trends.TrendsEnumsResponse": { "properties": { - "city": { - "description": "City name of the suggested place.", - "example": "Los Angeles", - "type": "string" - }, - "county": { - "description": "County name of the suggested place.", - "example": "Los Angeles County", - "type": "string" - }, - "id": { - "description": "Identifier of the suggestion, as Zillow returns it.", - "type": "string" - }, - "latitude": { - "description": "Latitude of the suggested location, in decimal degrees.", - "type": "number" - }, - "longitude": { - "description": "Longitude of the suggested location, in decimal degrees.", - "type": "number" - }, - "near_me": { - "description": "Whether the suggestion is Zillow's near-me search option.", - "type": "boolean" - }, - "plid": { - "description": "Place identifier of the suggestion, as Zillow returns it.", - "type": "string" - }, - "region_display_ids": { - "description": "Display ids of the regions listed in `region_ids`, as Zillow returns them.", + "explore_time_ranges": { + "description": "Supported `time_range` values for the Explore endpoints.", "items": { "type": "string" }, "type": "array" }, - "region_id": { - "description": "Zillow region id of the suggestion. Pass it as `region_id` to the search endpoint.", - "example": 12447, - "type": "integer" - }, - "region_ids": { - "description": "Zillow region ids covered by a suggestion that spans several regions.", + "locations": { + "description": "Supported location codes.", "items": { - "type": "integer" + "type": "string" }, "type": "array" }, - "region_type": { - "description": "Zillow region type code that goes with `region_id`. Pass it as `region_type` to the search endpoint.", - "example": 6, - "type": "integer" - }, - "region_types": { - "description": "Zillow region type codes that match the region ids in `region_ids`.", + "search_types": { + "description": "Supported search `type` values.", "items": { - "type": "integer" + "type": "string" }, "type": "array" }, - "school_district_ids": { - "description": "Zillow ids of the school districts the suggestion refers to.", + "trend_statuses": { + "description": "Supported `status` values for Trending Now.", "items": { - "type": "integer" + "type": "string" }, "type": "array" }, - "school_ids": { - "description": "Zillow ids of the schools the suggestion refers to.", + "trending_categories": { + "description": "Supported category IDs for Trending Now, each with a name.", "items": { - "type": "integer" + "$ref": "#/definitions/trends.TrendCategory" }, "type": "array" }, - "state": { - "description": "State abbreviation of the suggested place, such as `CA`.", - "example": "CA", - "type": "string" - }, - "sub_type": { - "description": "Kind of place the suggestion is, such as `city`.", - "type": "string" + "trending_sort_bys": { + "description": "Supported `sort_by` values for Trending Now.", + "items": { + "type": "string" + }, + "type": "array" }, - "view_latitude_delta": { - "description": "Latitude span of the map view Zillow suggests for this result.", - "type": "number" + "trending_time_ranges": { + "description": "Supported `window` values for Trending Now.", + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "zillow.AutocompleteResponse": { + "trends.TrendsLocationsResponse": { "properties": { - "query": { - "description": "Query that was run.", - "example": "Los Angeles, CA", - "type": "string" - }, - "request_id": { - "description": "Identifier Zillow gave to this autocomplete request.", - "type": "string" - }, - "results": { - "description": "Location suggestions, in the order Zillow returned them.", + "locations": { + "description": "Supported location codes, such as `US`.", "items": { - "$ref": "#/definitions/zillow.AutocompleteItem" + "type": "string" }, "type": "array" } }, "type": "object" }, - "zillow.PropertyAddressParts": { + "trends.exploreQueriesResponseDoc": { "properties": { - "city": { - "description": "City of the property.", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "county": { - "description": "County of the property.", - "type": "string" + "data": { + "$ref": "#/definitions/trends.ExploreQueriesResponse" }, - "neighborhood": { - "description": "Neighborhood of the property.", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "trends.exploreResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "state": { - "description": "State of the property.", - "type": "string" + "data": { + "$ref": "#/definitions/trends.ExploreResponse" }, - "street": { - "description": "Street address of the property.", + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "trends.interestByRegionResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "subdivision": { - "description": "Subdivision the property belongs to.", - "type": "string" + "data": { + "$ref": "#/definitions/trends.InterestByRegionResponse" }, - "zipcode": { - "description": "ZIP code of the property.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "zillow.PropertyAgent": { + "trends.interestOverTimeResponseDoc": { "properties": { - "email": { - "description": "Email address of the agent, as shown on the listing.", - "type": "string" - }, - "name": { - "description": "Full name of the agent.", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "phone": { - "description": "Phone number of the agent, as shown on the listing.", - "type": "string" + "data": { + "$ref": "#/definitions/trends.InterestOverTimeResponse" }, - "type": { - "description": "Role of the agent on the listing, as Zillow labels it.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "zillow.PropertyArea": { + "trends.relatedTopicsResponseDoc": { "properties": { - "text": { - "description": "Area together with its unit, as text.", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "unit": { - "description": "Unit of `value`, such as `sqft` or `acres`.", - "type": "string" + "data": { + "$ref": "#/definitions/trends.RelatedTopicsResponse" }, - "value": { - "description": "Area as a number, in the unit given by `unit`.", - "type": "number" + "msg": { + "example": "OK", + "type": "string" } }, "type": "object" }, - "zillow.PropertyFact": { + "trends.trendingResponseDoc": { "properties": { - "key": { - "description": "Name of the fact in snake case, such as `year_built`.", - "type": "string" + "code": { + "example": 200, + "type": "integer" }, - "label": { - "description": "Readable label of the fact.", - "type": "string" + "data": { + "$ref": "#/definitions/trends.TrendingResponse" }, - "value": { - "description": "Value of the fact, as text.", + "msg": { + "example": "OK", "type": "string" } }, "type": "object" }, - "zillow.PropertyFacts": { + "trends.trendsCategoriesResponseDoc": { "properties": { - "accessibility_features": { - "description": "Accessibility features of the home.", - "items": { - "type": "string" - }, - "type": "array" - }, - "additional": { - "description": "Further facts Zillow lists that have no dedicated field here, one entry per fact.", - "items": { - "$ref": "#/definitions/zillow.PropertyFact" - }, - "type": "array" - }, - "appliances": { - "description": "Appliances included with the home.", - "items": { - "type": "string" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "architectural_style": { - "description": "Architectural style of the home.", - "type": "string" + "data": { + "$ref": "#/definitions/trends.TrendsCategoriesResponse" }, - "basement": { - "description": "Description of the home's basement.", + "msg": { + "example": "OK", "type": "string" - }, - "bathrooms": { - "description": "Total number of bathrooms.", - "type": "number" - }, - "bathrooms_full": { - "description": "Number of full bathrooms.", - "type": "integer" - }, - "bathrooms_half": { - "description": "Number of half bathrooms.", + } + }, + "type": "object" + }, + "trends.trendsEnumsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "bathrooms_one_quarter": { - "description": "Number of one-quarter bathrooms.", - "type": "integer" + "data": { + "$ref": "#/definitions/trends.TrendsEnumsResponse" }, - "bathrooms_three_quarter": { - "description": "Number of three-quarter bathrooms.", + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "trends.trendsLocationsResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "bedrooms": { - "description": "Number of bedrooms.", - "type": "number" + "data": { + "$ref": "#/definitions/trends.TrendsLocationsResponse" }, - "builder_model": { - "description": "Builder's model name of the home.", + "msg": { + "example": "OK", "type": "string" - }, - "builder_name": { - "description": "Name of the home's builder.", + } + }, + "type": "object" + }, + "tripadvisor.AutocompleteResponse": { + "properties": { + "locale": { + "description": "Locale code the suggestions were returned in, for example `en-HK`.", + "example": "en-HK", "type": "string" }, - "community_features": { - "description": "Features of the community the home is in.", - "items": { - "type": "string" - }, - "type": "array" - }, - "construction_materials": { - "description": "Materials the home is built from.", - "items": { - "type": "string" - }, - "type": "array" - }, - "cooling": { - "description": "Cooling systems of the home.", - "items": { - "type": "string" - }, - "type": "array" - }, - "exterior_features": { - "description": "Exterior features of the home.", - "items": { - "type": "string" - }, - "type": "array" - }, - "fireplace_features": { - "description": "Fireplace features of the home.", - "items": { - "type": "string" - }, - "type": "array" - }, - "flooring": { - "description": "Flooring types in the home.", - "items": { - "type": "string" - }, - "type": "array" + "query": { + "description": "Search text that was run.", + "example": "hong kong", + "type": "string" }, - "foundation_details": { - "description": "Foundation details of the home.", + "results": { + "description": "Suggested locations and places for the search text, one entry per suggestion.", "items": { - "type": "string" + "$ref": "#/definitions/tripadvisor.SearchItem" }, "type": "array" }, - "garage_spaces": { - "description": "Number of garage parking spaces.", - "type": "number" - }, - "has_fireplace": { - "description": "Whether the home has a fireplace.", - "type": "boolean" - }, - "heating": { - "description": "Heating systems of the home.", + "scope_geo_id": { + "description": "TripAdvisor geo id the suggestions were limited to. Defaults to `60763` when no scope is given.", + "example": 60763, + "type": "integer" + } + }, + "type": "object" + }, + "tripadvisor.EnumsResponse": { + "properties": { + "attraction_categories": { + "description": "Attraction category types accepted by the `type` parameter of the search endpoint.", + "example": [ + "attraction", + "tour", + "day_trip" + ], "items": { "type": "string" }, "type": "array" }, - "hoa_fee": { - "description": "Homeowners association fee, as text shown by Zillow.", - "type": "string" - }, - "home_type": { - "description": "Property type of the home, as Zillow labels it.", - "type": "string" - }, - "laundry_features": { - "description": "Laundry features of the home.", - "items": { + "attraction_category_ids": { + "additionalProperties": { "type": "string" }, - "type": "array" - }, - "levels": { - "description": "Floor levels of the home.", - "items": { - "type": "string" + "description": "Map from each attraction category type to its TripAdvisor category id, for example `tour` to `c42`.", + "example": { + "day_trip": "c63", + "tour": "c42" }, - "type": "array" - }, - "living_area": { - "allOf": [ - { - "$ref": "#/definitions/zillow.PropertyArea" - } - ], - "description": "Interior living area of the home." + "type": "object" }, - "lot_size": { - "allOf": [ - { - "$ref": "#/definitions/zillow.PropertyArea" - } + "currencies": { + "description": "Currency codes accepted by the `currency` parameter, for example `HKD`.", + "example": [ + "HKD", + "USD", + "EUR" ], - "description": "Lot size of the property." - }, - "lot_size_dimensions": { - "description": "Lot dimensions, as text.", - "type": "string" - }, - "parcel_number": { - "description": "Assessor parcel number of the property.", - "type": "string" - }, - "parking_capacity": { - "description": "Total number of parking spaces.", - "type": "integer" - }, - "parking_features": { - "description": "Parking features of the home.", "items": { "type": "string" }, "type": "array" }, - "patio_and_porch_features": { - "description": "Patio and porch features of the home.", + "filter_ids": { + "description": "Filter ids accepted by the `filter_id` parameter.", + "example": [ + "class", + "ufe" + ], "items": { "type": "string" }, "type": "array" }, - "pool_features": { - "description": "Pool features of the property.", + "hotel_amenities": { + "description": "Hotel amenity ids accepted by the `amenities` parameter.", + "example": [ + 9176, + 9179 + ], "items": { - "type": "string" + "type": "integer" }, "type": "array" }, - "property_sub_type": { - "description": "Property subtypes of the home, as Zillow labels them.", + "hotel_classes": { + "description": "Hotel star classes accepted by the `class` parameter.", + "example": [ + 1, + 2, + 3, + 4, + 5 + ], "items": { - "type": "string" + "type": "integer" }, "type": "array" }, - "roof": { - "description": "Roof type or material.", - "type": "string" - }, - "rooms": { - "description": "Room types listed for the home.", + "languages": { + "description": "Review language codes accepted by the reviews endpoint, for example `en`.", + "example": [ + "en", + "fr", + "zh-CN" + ], "items": { "type": "string" }, "type": "array" }, - "security_features": { - "description": "Security features of the home.", + "listing_types": { + "description": "Listing types accepted by the `type` parameter of the search endpoint, for example `hotel`.", + "example": [ + "hotel", + "restaurant", + "attraction" + ], "items": { "type": "string" }, "type": "array" }, - "sewer": { - "description": "Sewer arrangements of the property.", + "locales": { + "description": "Locale codes accepted by the `locale` parameter, for example `en-HK`.", + "example": [ + "en-HK", + "en-US", + "en-GB" + ], "items": { "type": "string" }, "type": "array" }, - "spa_features": { - "description": "Spa features of the property.", + "pricing_modes": { + "description": "Pricing modes accepted by the `pricing_mode` parameter.", + "example": [ + "ALL_IN_RATE" + ], "items": { "type": "string" }, "type": "array" }, - "stories": { - "description": "Number of stories in the building.", - "type": "number" - }, - "structure_type": { - "description": "Structure type of the home.", - "type": "string" - }, - "tax_annual_amount": { - "description": "Annual property tax amount.", - "type": "number" - }, - "tax_assessed_value": { - "description": "Assessed value of the property for tax purposes.", - "type": "number" - }, - "utilities": { - "description": "Utilities available to or included with the home.", + "restaurant_options": { + "description": "Restaurant online-option ids accepted by the `online_options` parameter.", + "example": [ + 20693 + ], "items": { - "type": "string" + "type": "integer" }, "type": "array" }, - "view": { - "description": "Views the property has.", + "restaurant_types": { + "description": "Restaurant establishment-type ids accepted by the `establishment_types` parameter.", + "example": [ + 10591 + ], "items": { - "type": "string" + "type": "integer" }, "type": "array" }, - "water_source": { - "description": "Water source of the property.", + "sorts": { + "description": "Sort orders accepted by the `sort` parameter, for example `BEST_VALUE`.", + "example": [ + "BEST_VALUE", + "POPULARITY" + ], "items": { "type": "string" }, "type": "array" }, - "waterfront_features": { - "description": "Waterfront features of the property.", + "unsupported_entity_types": { + "description": "Entity types that cannot be searched, for example `airline`. Omitted when none.", + "example": [ + "airline", + "airport" + ], "items": { "type": "string" }, "type": "array" - }, - "year_built": { - "description": "Year the home was built.", - "type": "integer" - }, - "zoning": { - "description": "Zoning designation of the property.", - "type": "string" } }, "type": "object" }, - "zillow.PropertyHistory": { + "tripadvisor.HotelItem": { "properties": { - "price": { - "description": "Price history of the property, one entry per event.", - "items": { - "$ref": "#/definitions/zillow.PropertyPriceHistoryEntry" - }, - "type": "array" + "address": { + "description": "Street address of the hotel.", + "type": "string" }, - "tax": { - "description": "Property tax history, one entry per tax year.", - "items": { - "$ref": "#/definitions/zillow.PropertyTaxHistoryEntry" - }, - "type": "array" - } - }, - "type": "object" - }, - "zillow.PropertyListing": { - "properties": { - "agent_name": { - "description": "Name of the listing agent.", + "currency": { + "description": "Currency code of the listed price, for example `HKD`.", + "example": "HKD", "type": "string" }, - "agents": { - "description": "Agents named on the listing.", - "items": { - "$ref": "#/definitions/zillow.PropertyAgent" - }, - "type": "array" + "id": { + "description": "TripAdvisor location id of the hotel. Use it with the place and reviews endpoints.", + "example": "113311", + "type": "string" }, - "attribution_text": { - "description": "Attribution or disclaimer text Zillow shows for the listing source.", + "image": { + "description": "URL of the hotel's main image.", "type": "string" }, - "broker_name": { - "description": "Name of the brokerage that holds the listing.", + "latitude": { + "description": "Latitude of the hotel in decimal degrees.", + "example": 40.76174, + "type": "number" + }, + "longitude": { + "description": "Longitude of the hotel in decimal degrees.", + "example": -73.975365, + "type": "number" + }, + "parent": { + "description": "Name of the city or area the hotel is in.", + "example": "New York City", "type": "string" }, - "broker_phone": { - "description": "Phone number of the brokerage, as shown on the listing.", + "phone": { + "description": "Phone number of the hotel.", "type": "string" }, - "date_posted": { - "description": "Date the listing was posted.", + "price": { + "description": "Price shown on the listing, formatted with the currency symbol, for example `HK$7,793`.", + "example": "HK$7,793", "type": "string" }, - "date_updated": { - "description": "Date the listing was last updated.", + "provider": { + "description": "Booking site that offers the listed price, for example `Agoda`.", + "example": "Agoda", "type": "string" }, - "days_on_zillow": { - "description": "Number of days the listing has been on Zillow.", + "rank": { + "description": "Hotel's position in TripAdvisor's ranking for the location.", + "example": 146, "type": "integer" }, - "listing_id": { - "description": "Identifier of the listing, as Zillow returns it.", + "rank_label": { + "description": "Ranking text as TripAdvisor shows it, for example `#141 of 519 hotels in New York City`.", + "example": "#141 of 519 hotels in New York City", "type": "string" }, - "mls_id": { - "description": "MLS number of the listing.", - "type": "string" + "rating": { + "description": "Average traveller rating out of 5.", + "example": 4.5, + "type": "number" }, - "open_houses": { - "description": "Scheduled open houses for the listing.", - "items": { - "$ref": "#/definitions/zillow.PropertyOpenHouse" - }, - "type": "array" + "review_count": { + "description": "Number of traveller reviews the hotel has.", + "example": 1517, + "type": "integer" }, - "provider": { - "description": "Name of the provider that supplied the listing, as Zillow gives it.", - "type": "string" + "review_rating": { + "description": "Rating given in the review shown on the hotel listing.", + "type": "number" }, - "provider_listing_id": { - "description": "Listing id assigned by the listing provider.", + "review_snippet": { + "description": "Excerpt of a review shown on the hotel listing.", "type": "string" }, - "source": { - "description": "Source of the listing, such as the MLS name, as Zillow gives it.", + "review_title": { + "description": "Title of the review shown on the hotel listing.", "type": "string" }, - "status": { - "description": "Listing status, as Zillow labels it, such as `FOR_SALE`.", - "type": "string" + "star_rating": { + "description": "Official star class of the hotel, for example `5`.", + "example": 5, + "type": "number" }, - "sub_types": { - "description": "Listing subtypes that apply to the listing, such as `is_FSBA`.", + "tags": { + "description": "Short labels TripAdvisor shows on the hotel listing.", "items": { "type": "string" }, "type": "array" }, - "time_on_zillow": { - "description": "How long the listing has been on Zillow, as text such as `9 days`.", + "title": { + "description": "Hotel name as shown on the listing.", + "example": "The Peninsula New York", "type": "string" }, "type": { - "description": "Listing type, as Zillow labels it.", + "description": "Listing type, for example `hotel`.", + "example": "hotel", + "type": "string" + }, + "url": { + "description": "TripAdvisor page URL of the hotel.", "type": "string" } }, "type": "object" }, - "zillow.PropertyMedia": { + "tripadvisor.HotelListResponse": { "properties": { - "has_3d_model": { - "description": "Whether the listing has a 3D tour model.", - "type": "boolean" + "currency": { + "description": "Currency code the prices are shown in, for example `HKD`.", + "example": "HKD", + "type": "string" }, - "has_video": { - "description": "Whether the listing has a video.", - "type": "boolean" + "full_matches": { + "description": "Number of hotels TripAdvisor counts as full matches for the filters. Omitted when TripAdvisor gives no count.", + "example": 519, + "type": "integer" }, - "photo_count": { - "description": "Number of photos on the listing.", + "geo_id": { + "description": "TripAdvisor geo id of the location the hotels are listed for.", + "example": 294217, "type": "integer" }, - "photos": { - "description": "Photos of the listing with their sizes.", + "limit": { + "description": "Maximum number of hotels returned on this page.", + "example": 30, + "type": "integer" + }, + "offset": { + "description": "Result offset of this page.", + "example": 0, + "type": "integer" + }, + "results": { + "description": "Hotels on this page, one entry per hotel.", "items": { - "$ref": "#/definitions/zillow.PropertyPhoto" + "$ref": "#/definitions/tripadvisor.HotelItem" }, "type": "array" }, - "primary_image": { - "description": "URL of the main listing photo.", - "type": "string" - }, - "video_url": { - "description": "URL of the listing video.", + "sort": { + "description": "Sort order that was applied, for example `BEST_VALUE`.", + "example": "BEST_VALUE", "type": "string" }, - "virtual_tour_url": { - "description": "URL of the virtual tour of the property.", - "type": "string" + "total": { + "description": "Total number of hotels TripAdvisor lists for the location and filters. Omitted when TripAdvisor gives no total.", + "example": 519, + "type": "integer" } }, "type": "object" }, - "zillow.PropertyNearby": { + "tripadvisor.NestedSearchItem": { "properties": { - "address": { - "description": "Address of the nearby home.", + "query": { + "description": "Search text the shortcut runs, for example `hong kong hotels`.", + "example": "hong kong hotels", "type": "string" }, - "baths": { - "description": "Number of bathrooms in the nearby home.", - "type": "number" - }, - "beds": { - "description": "Number of bedrooms in the nearby home.", - "type": "number" - }, - "home_status": { - "description": "Listing status of the nearby home, as Zillow labels it.", + "title": { + "description": "Label of the shortcut, for example `Hotels`.", + "example": "Hotels", "type": "string" }, - "living_area": { - "description": "Interior living area of the nearby home.", - "type": "number" - }, - "price": { - "description": "Price of the nearby home, as a number.", - "type": "number" - }, - "price_text": { - "description": "Price of the nearby home, as text shown by Zillow.", + "type": { + "description": "Kind of search the shortcut opens, for example `hotel_search`.", + "example": "hotel_search", "type": "string" }, "url": { - "description": "Zillow page URL of the nearby home.", - "type": "string" - }, - "zpid": { - "description": "Zillow property id of the nearby home. Use it with the property endpoint.", + "description": "TripAdvisor page URL of the shortcut.", + "example": "https://en.tripadvisor.com.hk/Hotels-g294217-Hong_Kong-Hotels.html", "type": "string" } }, "type": "object" }, - "zillow.PropertyOpenHouse": { + "tripadvisor.PlaceAddressParts": { "properties": { - "end_time": { - "description": "End time of the open house.", + "country": { + "description": "Country name of the place's address.", "type": "string" }, - "start_time": { - "description": "Start time of the open house.", + "locality": { + "description": "City or town.", "type": "string" }, - "text": { - "description": "Open house time as Zillow shows it, for example `Sun 1-4 PM`.", + "postal_code": { + "description": "Postal or ZIP code.", + "type": "string" + }, + "region": { + "description": "State, province or region.", + "type": "string" + }, + "street": { + "description": "Street address line.", "type": "string" } }, "type": "object" }, - "zillow.PropertyPhoto": { + "tripadvisor.PlaceImage": { "properties": { + "caption": { + "description": "Caption of the image.", + "type": "string" + }, "height": { - "description": "Photo height in pixels.", + "description": "Height of the image in pixels.", + "example": 768, "type": "integer" }, - "source": { - "description": "Source or caption of the photo, as Zillow gives it.", - "type": "string" - }, "url": { - "description": "URL of the photo.", + "description": "URL of the image.", "type": "string" }, "width": { - "description": "Photo width in pixels.", + "description": "Width of the image in pixels.", + "example": 1024, "type": "integer" } }, "type": "object" }, - "zillow.PropertyPriceHistoryEntry": { + "tripadvisor.PlaceItem": { "properties": { - "buyer_agent": { - "description": "Name of the buyer's agent for the event.", + "address": { + "description": "Street address of the place.", "type": "string" }, - "change": { - "description": "Price change at this event, as Zillow reports it.", - "type": "number" + "booking_url": { + "description": "URL where TripAdvisor lets you book or reserve the place.", + "type": "string" }, - "date": { - "description": "Date of the price event.", + "categories": { + "description": "Categories TripAdvisor lists for the place.", + "items": { + "type": "string" + }, + "type": "array" + }, + "cuisines": { + "description": "Cuisines a restaurant serves.", + "items": { + "type": "string" + }, + "type": "array" + }, + "currency": { + "description": "Currency code of the listed price, for example `HKD`.", + "example": "HKD", "type": "string" }, - "event": { - "description": "Kind of price event, such as `Listed for sale`.", + "id": { + "description": "TripAdvisor location id of the place. Use it with the place and reviews endpoints.", + "example": "5493196", "type": "string" }, - "price": { - "description": "Price at this event, as a number.", + "image": { + "description": "URL of the place's main image.", + "type": "string" + }, + "latitude": { + "description": "Latitude of the place in decimal degrees.", + "example": 22.28331, "type": "number" }, - "price_text": { - "description": "Price at this event, as text shown by Zillow.", + "longitude": { + "description": "Longitude of the place in decimal degrees.", + "example": 114.15874, + "type": "number" + }, + "parent": { + "description": "Name of the city or area the place is in.", + "example": "Hong Kong", "type": "string" }, - "seller_agent": { - "description": "Name of the seller's agent for the event.", + "phone": { + "description": "Phone number of the place.", "type": "string" }, - "source": { - "description": "Data source that reported the event, such as an MLS name.", + "price": { + "description": "Price shown on the listing, formatted with the currency symbol, for example `HK$7,793`.", + "example": "HK$7,793", "type": "string" }, - "time": { - "description": "Time of the price event, as the numeric timestamp Zillow gives.", + "price_level": { + "description": "Price band as TripAdvisor shows it, for example `$$ - $$$`.", + "example": "$$ - $$$", + "type": "string" + }, + "provider": { + "description": "Booking or reservation provider shown on the listing, for example `Agoda`.", + "example": "Agoda", + "type": "string" + }, + "rank": { + "description": "Place's position in TripAdvisor's ranking for the location.", + "example": 12, "type": "integer" - } - }, - "type": "object" - }, - "zillow.PropertyPricing": { - "properties": { - "currency": { - "description": "Currency of the price, as Zillow shows it.", + }, + "rank_label": { + "description": "Ranking text as TripAdvisor shows it, for example `#12 of 12000 restaurants in Hong Kong`.", + "example": "#12 of 12000 restaurants in Hong Kong", "type": "string" }, - "estimated_monthly_payment": { - "description": "Estimated monthly mortgage payment for the property.", + "rating": { + "description": "Average traveller rating out of 5.", + "example": 4.5, "type": "number" }, - "monthly_hoa_fee": { - "description": "Monthly homeowners association fee.", - "type": "number" + "review_count": { + "description": "Number of traveller reviews the place has.", + "example": 1217, + "type": "integer" }, - "price": { - "description": "Listing price, as a number.", + "review_rating": { + "description": "Rating given in the review shown on the listing.", "type": "number" }, - "price_per_square_foot": { - "description": "Listing price per square foot.", - "type": "number" + "review_snippet": { + "description": "Excerpt of a review shown on the listing.", + "type": "string" }, - "price_text": { - "description": "Listing price as text shown by Zillow.", + "review_title": { + "description": "Title of the review shown on the listing.", "type": "string" }, - "property_tax_rate": { - "description": "Property tax rate, as Zillow reports it.", + "star_rating": { + "description": "Official star class of the place, for example `5`. Shown for hotels.", + "example": 5, "type": "number" }, - "rent_zestimate": { - "description": "Zillow's estimated monthly rent for the property (Rent Zestimate).", - "type": "number" + "tags": { + "description": "Short labels TripAdvisor shows on the listing.", + "items": { + "type": "string" + }, + "type": "array" }, - "zestimate": { - "description": "Zillow's estimated market value of the property (Zestimate).", - "type": "number" + "title": { + "description": "Place name as shown on the listing.", + "example": "Hong Kong Asian Cuisine", + "type": "string" + }, + "type": { + "description": "Listing type, for example `restaurant`.", + "example": "restaurant", + "type": "string" + }, + "url": { + "description": "TripAdvisor page URL of the place.", + "type": "string" } }, "type": "object" }, - "zillow.PropertyResponse": { + "tripadvisor.PlaceLink": { + "properties": { + "label": { + "description": "Link label, for example `Official website`.", + "example": "Official website", + "type": "string" + }, + "type": { + "description": "Kind of link, for example `website` or `canonical`.", + "example": "website", + "type": "string" + }, + "url": { + "description": "Address of the link.", + "type": "string" + } + }, + "type": "object" + }, + "tripadvisor.PlaceResponse": { "properties": { "address": { - "description": "Full address of the property.", + "description": "Full address of the place as one line.", "type": "string" }, "address_parts": { "allOf": [ { - "$ref": "#/definitions/zillow.PropertyAddressParts" + "$ref": "#/definitions/tripadvisor.PlaceAddressParts" } ], - "description": "Address of the property split into street, city, state, ZIP code and similar parts." + "description": "Address split into street, locality, region, postal code and country." }, - "baths": { - "description": "Number of bathrooms.", - "type": "number" + "amenities": { + "description": "Amenities TripAdvisor lists for the place.", + "items": { + "type": "string" + }, + "type": "array" }, - "beds": { - "description": "Number of bedrooms.", - "type": "number" + "awards": { + "description": "Awards shown on the place's page, for example `Travelers' Choice`.", + "items": { + "type": "string" + }, + "type": "array" }, - "broker_name": { - "description": "Name of the brokerage that holds the listing.", - "type": "string" + "breadcrumbs": { + "description": "Locations above the place, from the widest region to the city, for example `Asia`, `China`, `Hong Kong`.", + "items": { + "type": "string" + }, + "type": "array" }, - "currency": { - "description": "Currency of the price, as Zillow shows it.", + "canonical_url": { + "description": "Canonical TripAdvisor page URL of the place.", "type": "string" }, - "days_on_zillow": { - "description": "Number of days the listing has been on Zillow.", - "type": "integer" + "categories": { + "description": "Categories TripAdvisor lists for the place.", + "items": { + "type": "string" + }, + "type": "array" }, - "description": { - "description": "Listing description text.", - "type": "string" + "cuisines": { + "description": "Cuisines a restaurant serves.", + "items": { + "type": "string" + }, + "type": "array" }, - "detail_text": { - "description": "Short detail text Zillow shows with the listing.", + "description": { + "description": "Longer description of the place.", "type": "string" }, - "facts": { - "allOf": [ - { - "$ref": "#/definitions/zillow.PropertyFacts" - } - ], - "description": "Structured facts about the home, such as size, rooms, parking, heating and tax." - }, - "has_3d_model": { - "description": "Whether the listing has a 3D tour model.", - "type": "boolean" - }, - "has_video": { - "description": "Whether the listing has a video.", - "type": "boolean" - }, - "history": { - "allOf": [ - { - "$ref": "#/definitions/zillow.PropertyHistory" - } - ], - "description": "Price and tax history of the property." + "features": { + "description": "Features TripAdvisor lists for the place.", + "items": { + "type": "string" + }, + "type": "array" }, - "home_status": { - "description": "Listing status in Zillow's terms, such as `FOR_SALE` or `FOR_RENT`.", + "geo_id": { + "description": "TripAdvisor geo id of the location the place is in.", + "example": "60763", "type": "string" }, - "home_type": { - "description": "Property type, as Zillow labels it, such as `SINGLE_FAMILY`.", + "id": { + "description": "TripAdvisor location id of the place.", + "example": "5493196", "type": "string" }, "image": { - "description": "URL of the main listing photo.", + "description": "URL of the place's main image.", "type": "string" }, - "is_showcase": { - "description": "Whether Zillow shows the listing as a showcase listing.", - "type": "boolean" + "images": { + "description": "Photos of the place, one entry per image.", + "items": { + "$ref": "#/definitions/tripadvisor.PlaceImage" + }, + "type": "array" }, "latitude": { - "description": "Latitude of the property, in decimal degrees.", + "description": "Latitude of the place in decimal degrees.", + "example": 22.28331, "type": "number" }, - "listing": { - "allOf": [ - { - "$ref": "#/definitions/zillow.PropertyListing" - } - ], - "description": "Listing details: identifiers, source, broker, agents, dates and open houses." - }, - "listing_sub_type": { - "description": "Listing subtypes that apply to the listing, such as `is_FSBA`.", + "links": { + "description": "Useful links for the place, such as its TripAdvisor page and official website.", "items": { - "type": "string" + "$ref": "#/definitions/tripadvisor.PlaceLink" }, "type": "array" }, - "living_area": { - "description": "Interior living area in square feet.", - "type": "number" - }, "longitude": { - "description": "Longitude of the property, in decimal degrees.", - "type": "number" - }, - "lot_area": { - "description": "Lot size, in the unit given by `lot_area_unit`.", + "description": "Longitude of the place in decimal degrees.", + "example": 114.15874, "type": "number" }, - "lot_area_unit": { - "description": "Unit of `lot_area`, as Zillow gives it.", - "type": "string" - }, - "media": { - "allOf": [ - { - "$ref": "#/definitions/zillow.PropertyMedia" - } - ], - "description": "Photos, video and tour links of the listing." - }, - "nearby": { - "description": "Compact summaries of nearby homes.", - "items": { - "$ref": "#/definitions/zillow.PropertyNearby" - }, - "type": "array" - }, - "photos": { - "description": "URLs of the listing photos.", + "opening_hours": { + "description": "Opening hours, one entry per line, for example `Monday 10:00 - 22:00`.", "items": { "type": "string" }, "type": "array" }, - "price": { - "description": "Listing price, as a number. The text Zillow shows is in `price_text`.", - "type": "number" + "phone": { + "description": "Phone number of the place.", + "type": "string" }, - "price_text": { - "description": "Listing price as text shown by Zillow, such as `$1,000,000` or `Contact Landlord`.", + "price_level": { + "description": "Price band as TripAdvisor shows it, for example `$$ - $$$`.", + "example": "$$ - $$$", "type": "string" }, - "pricing": { - "allOf": [ - { - "$ref": "#/definitions/zillow.PropertyPricing" - } - ], - "description": "Price, estimates, fees and monthly payment of the property." + "price_range": { + "description": "Price range as TripAdvisor shows it, for example `$$ - $$$`.", + "example": "$$ - $$$", + "type": "string" }, - "rent_zestimate": { - "description": "Zillow's estimated monthly rent for the home (Rent Zestimate).", + "rank": { + "description": "Place's position in TripAdvisor's ranking for its location.", + "example": 1, + "type": "integer" + }, + "rank_label": { + "description": "Ranking text as TripAdvisor shows it, for example `#1 of 1,531 things to do in Hong Kong`.", + "example": "#1 of 1,531 things to do in Hong Kong", + "type": "string" + }, + "rating": { + "description": "Average traveller rating out of 5.", "type": "number" }, - "schools": { - "description": "Schools assigned to or near the property.", + "reviews": { + "description": "Number of traveller reviews the place has.", + "type": "integer" + }, + "summary": { + "description": "Short summary of the place.", + "type": "string" + }, + "tags": { + "description": "Short labels TripAdvisor shows for the place.", "items": { - "$ref": "#/definitions/zillow.PropertySchool" + "type": "string" }, "type": "array" }, - "status_text": { - "description": "Status label shown on the listing, such as `House for sale`.", + "title": { + "description": "Place name as shown on TripAdvisor.", "type": "string" }, - "url": { - "description": "Zillow page URL of the listing.", + "type": { + "description": "Kind of page, such as `attraction`, `geo` for a destination or `attraction_product` for a bookable tour.", "type": "string" }, - "zestimate": { - "description": "Zillow's estimated market value of the home (Zestimate).", - "type": "number" + "url": { + "description": "TripAdvisor page URL of the place.", + "type": "string" }, - "zpid": { - "description": "Zillow property id. Use it with the property endpoint. Rental building rows carry a `latitude--longitude` identifier instead.", - "example": "12345678", + "website_url": { + "description": "URL of the place's own website.", "type": "string" } }, "type": "object" }, - "zillow.PropertySchool": { + "tripadvisor.ReviewItem": { "properties": { - "assigned": { - "description": "Whether the school is assigned to the property's address.", - "type": "boolean" + "author": { + "description": "Reviewer's display name.", + "type": "string" }, - "distance": { - "description": "Distance from the property to the school, as Zillow reports it.", - "type": "number" + "author_avatar": { + "description": "URL of the reviewer's profile picture.", + "type": "string" }, - "district": { - "description": "Name of the school district.", + "author_hometown": { + "description": "Reviewer's hometown as shown on their profile.", "type": "string" }, - "grades": { - "description": "Grades the school serves, such as `K-5`.", + "author_id": { + "description": "TripAdvisor id of the reviewer.", "type": "string" }, - "id": { - "description": "Identifier of the school, as Zillow returns it.", + "author_url": { + "description": "TripAdvisor profile URL of the reviewer.", "type": "string" }, - "level": { - "description": "School level, such as `Elementary`.", + "created_date": { + "description": "Date the review was written, for example `2026-05-01`.", "type": "string" }, - "link": { - "description": "Zillow page URL of the school.", + "date": { + "description": "Date the review was published, for example `2026-05-01`.", "type": "string" }, - "name": { - "description": "Name of the school.", + "helpful": { + "description": "Number of helpful votes the review received.", + "type": "integer" + }, + "id": { + "description": "TripAdvisor review id.", + "type": "string" + }, + "language": { + "description": "Language code of the review text returned.", + "type": "string" + }, + "original_language": { + "description": "Language code the review was originally written in.", "type": "string" }, + "photos": { + "description": "URLs of photos attached to the review.", + "items": { + "type": "string" + }, + "type": "array" + }, "rating": { - "description": "School rating, as Zillow shows it.", + "description": "Rating the reviewer gave, out of 5.", "type": "number" }, - "type": { - "description": "School type, such as `Public`.", + "stay_date": { + "description": "Date of the reviewer's visit or stay, as TripAdvisor gives it.", + "type": "string" + }, + "text": { + "description": "Full text of the review.", + "type": "string" + }, + "title": { + "description": "Title the reviewer gave the review.", + "type": "string" + }, + "trip_type": { + "description": "Type of trip the reviewer reported, as TripAdvisor labels it.", + "type": "string" + }, + "url": { + "description": "TripAdvisor page URL of the review.", "type": "string" } }, "type": "object" }, - "zillow.PropertyTaxHistoryEntry": { + "tripadvisor.ReviewsResponse": { "properties": { - "tax_increase": { - "description": "Rate of increase in tax paid, as Zillow reports it.", - "type": "number" + "id": { + "description": "TripAdvisor location id the reviews belong to.", + "example": "5493196", + "type": "string" }, - "tax_paid": { - "description": "Property tax paid for the year.", - "type": "number" + "language": { + "description": "Review language code that was applied, for example `en`.", + "example": "en", + "type": "string" }, - "time": { - "description": "Time of the tax record, as the numeric timestamp Zillow gives.", + "limit": { + "description": "Maximum number of reviews returned per page.", + "example": 20, "type": "integer" }, - "value": { - "description": "Assessed value of the property for the year.", - "type": "number" + "page": { + "description": "Page number returned.", + "example": 1, + "type": "integer" }, - "value_increase": { - "description": "Rate of increase in assessed value, as Zillow reports it.", - "type": "number" + "reviews": { + "description": "Reviews on this page, one entry per review.", + "items": { + "$ref": "#/definitions/tripadvisor.ReviewItem" + }, + "type": "array" }, - "year": { - "description": "Tax year of the record.", + "total": { + "description": "Total number of reviews matching the filters.", + "example": 25770, "type": "integer" + }, + "url": { + "description": "TripAdvisor page URL of the place the reviews belong to.", + "type": "string" } }, "type": "object" }, - "zillow.RentalUnit": { + "tripadvisor.SearchItem": { "properties": { - "beds": { - "description": "Number of bedrooms of this unit tier. `0` means a studio.", - "example": 1, + "document_id": { + "description": "TripAdvisor document id of the suggestion, for example `loc;294217;g294217`.", + "example": "loc;294217;g294217", + "type": "string" + }, + "id": { + "description": "TripAdvisor id of the suggested place or location.", + "example": "294217", + "type": "string" + }, + "image": { + "description": "URL of an image for the suggestion.", + "type": "string" + }, + "latitude": { + "description": "Latitude of the suggestion in decimal degrees.", + "example": 22.28331, "type": "number" }, - "price": { - "description": "Starting monthly rent of this unit tier.", - "example": 2657, + "longitude": { + "description": "Longitude of the suggestion in decimal degrees.", + "example": 114.15874, "type": "number" }, - "price_text": { - "description": "Starting rent of this unit tier as shown by Zillow, such as `$2,657+`.", - "example": "$2,657+", + "nested_results": { + "description": "Search shortcuts TripAdvisor offers under the suggestion, such as hotels or things to do in that location.", + "items": { + "$ref": "#/definitions/tripadvisor.NestedSearchItem" + }, + "type": "array" + }, + "parent": { + "description": "Parent locations of the suggestion, for example `China, Asia`.", + "example": "China, Asia", + "type": "string" + }, + "title": { + "description": "Name of the suggested place or location.", + "example": "Hong Kong", + "type": "string" + }, + "type": { + "description": "Kind of suggestion, for example `geo` for a destination.", + "example": "geo", + "type": "string" + }, + "url": { + "description": "TripAdvisor page URL of the suggestion.", + "example": "https://en.tripadvisor.com.hk/Tourism-g294217-Hong_Kong-Vacations.html", "type": "string" } }, "type": "object" }, - "zillow.SearchItem": { + "tripadvisor.SearchResponse": { "properties": { - "address": { - "description": "Full address of the property.", + "currency": { + "description": "Currency code the prices are shown in, for example `HKD`.", + "example": "HKD", "type": "string" }, - "availability_count": { - "description": "Number of units currently available in the rental building.", - "example": 6, + "geo_id": { + "description": "TripAdvisor geo id of the location the places are listed for.", + "example": 294217, "type": "integer" }, - "baths": { - "description": "Number of bathrooms.", - "type": "number" + "limit": { + "description": "Maximum number of places returned on this page.", + "example": 30, + "type": "integer" }, - "beds": { - "description": "Number of bedrooms.", - "type": "number" + "locale": { + "description": "Locale code the results were returned in, for example `en-HK`.", + "example": "en-HK", + "type": "string" }, - "broker_name": { - "description": "Name of the brokerage that holds the listing.", + "offset": { + "description": "Result offset of this page.", + "example": 0, + "type": "integer" + }, + "results": { + "description": "Places on this page, one entry per place.", + "items": { + "$ref": "#/definitions/tripadvisor.PlaceItem" + }, + "type": "array" + }, + "sort": { + "description": "Sort order that was applied, for example `POPULARITY`.", + "example": "POPULARITY", "type": "string" }, - "building_name": { - "description": "Name of the rental building, such as an apartment community.", - "example": "The Pointe at Warner Center", + "source": { + "description": "Label for the kind of TripAdvisor listing the results came from.", + "example": "html_listing", "type": "string" }, - "currency": { - "description": "Currency of the price, as Zillow shows it.", + "type": { + "description": "Listing type that was searched, for example `restaurant`.", + "example": "restaurant", "type": "string" }, - "days_on_zillow": { - "description": "Number of days the listing has been on Zillow.", + "unsupported_types": { + "description": "Entity types that this search does not cover, for example `airline`. Omitted when none.", + "example": [ + "vacation_rental", + "tour", + "airline" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "tripadvisor.tripadvisorAutocompleteResponseDoc": { + "properties": { + "code": { + "example": 200, "type": "integer" }, - "detail_text": { - "description": "Short detail text Zillow shows with the listing.", + "data": { + "$ref": "#/definitions/tripadvisor.AutocompleteResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "tripadvisor.tripadvisorEnumsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "has_3d_model": { - "description": "Whether the listing has a 3D tour model.", - "type": "boolean" + "data": { + "$ref": "#/definitions/tripadvisor.EnumsResponse" }, - "has_video": { - "description": "Whether the listing has a video.", - "type": "boolean" + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "tripadvisor.tripadvisorHotelsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "home_status": { - "description": "Listing status in Zillow's terms, such as `FOR_SALE` or `FOR_RENT`.", + "data": { + "$ref": "#/definitions/tripadvisor.HotelListResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "tripadvisor.tripadvisorReviewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "home_type": { - "description": "Property type, as Zillow labels it, such as `SINGLE_FAMILY`.", + "data": { + "$ref": "#/definitions/tripadvisor.ReviewsResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "tripadvisor.tripadvisorSearchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" }, - "image": { - "description": "URL of the main listing photo.", + "data": { + "$ref": "#/definitions/tripadvisor.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "tripcom.DetailResponse": { + "properties": { + "city_name": { + "example": "Bang Sao Thong", "type": "string" }, - "is_building": { - "description": "Whether the row is a rental building rather than a single listing.", - "example": true, - "type": "boolean" + "country_name": { + "example": "Thailand", + "type": "string" }, - "is_showcase": { - "description": "Whether Zillow shows the listing as a showcase listing.", - "type": "boolean" + "description": { + "type": "string" }, - "latitude": { - "description": "Latitude of the property, in decimal degrees.", - "type": "number" + "highlights": { + "example": [ + "Free airport transfers", + "Great views" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "listing_sub_type": { - "description": "Listing subtypes that apply to the listing, such as `is_FSBA`.", + "hotel_id": { + "example": 39371462, + "type": "integer" + }, + "image_count": { + "example": 10, + "type": "integer" + }, + "images": { "items": { "type": "string" }, "type": "array" }, - "living_area": { - "description": "Interior living area in square feet.", - "type": "number" + "local_name": { + "type": "string" }, - "longitude": { - "description": "Longitude of the property, in decimal degrees.", - "type": "number" + "location": { + "$ref": "#/definitions/tripcom.Location" }, - "lot_area": { - "description": "Lot size, in the unit given by `lot_area_unit`.", - "type": "number" + "name": { + "example": "Divalux Resort and Spa Bangkok, Suvarnabhumi Airport-Free Shuttle", + "type": "string" }, - "lot_area_unit": { - "description": "Unit of `lot_area`, as Zillow gives it.", + "open_year": { + "example": "2019", "type": "string" }, - "photos": { - "description": "URLs of the listing photos.", + "policy": { + "$ref": "#/definitions/tripcom.Policy" + }, + "popular_facilities": { + "example": [ + "Outdoor swimming pool", + "Spa", + "Massage room" + ], "items": { "type": "string" }, "type": "array" }, - "price": { - "description": "Listing price, as a number. The text Zillow shows is in `price_text`.", - "type": "number" + "province_name": { + "example": "Samut Prakan Province", + "type": "string" }, - "price_max": { - "description": "Highest monthly rent in the rental building.", - "example": 3157, - "type": "number" + "rating": { + "$ref": "#/definitions/tripcom.Rating" }, - "price_text": { - "description": "Listing price as text shown by Zillow, such as `$1,000,000` or `Contact Landlord`.", + "source_url": { + "example": "https://www.trip.com/hotels/bang-sao-thong-district-hotel-detail-39371462/divalux-resort-and-spa-bangkok-suvarnabhumi-airport-free-shuttle/", "type": "string" }, - "rent_zestimate": { - "description": "Zillow's estimated monthly rent for the home (Rent Zestimate).", - "type": "number" + "star_rating": { + "example": 5, + "type": "integer" + } + }, + "type": "object" + }, + "tripcom.HotelSummary": { + "properties": { + "description": { + "example": "The hotel has a relaxing wellness atmosphere...", + "type": "string" }, - "status_text": { - "description": "Status label shown on the listing, such as `House for sale`.", + "hotel_id": { + "example": 39371462, + "type": "integer" + }, + "image_url": { + "example": "https://ak-d.tripcdn.com/images/0585b12000sq6ih4c6345.jpg", "type": "string" }, - "units": { - "description": "Unit tiers of the rental building, one per bedroom count, with starting rent.", - "items": { - "$ref": "#/definitions/zillow.RentalUnit" - }, - "type": "array" + "location": { + "example": "88 Moo3, Sriwaree Road, Sisa Chokhe Noi, Bang Sao Thong District, Srisa Chorakhe Noi, Bang Sao Thong", + "type": "string" }, - "url": { - "description": "Zillow page URL of the listing.", + "name": { + "example": "Divalux Resort and Spa Bangkok, Suvarnabhumi Airport-Free Shuttle", "type": "string" }, - "zestimate": { - "description": "Zillow's estimated market value of the home (Zestimate).", + "price": { + "$ref": "#/definitions/tripcom.Price" + }, + "rating_score": { + "example": 8.7, "type": "number" }, - "zpid": { - "description": "Zillow property id. Use it with the property endpoint. Rental building rows carry a `latitude--longitude` identifier instead.", - "example": "12345678", + "review_count": { + "example": 872, + "type": "integer" + }, + "star_rating": { + "example": 5, + "type": "integer" + }, + "url": { + "example": "https://www.trip.com/hotels/bang-sao-thong-district-hotel-detail-39371462/divalux-resort-and-spa-bangkok-suvarnabhumi-airport-free-shuttle/", "type": "string" } }, "type": "object" }, - "zillow.SearchResponse": { + "tripcom.Location": { "properties": { - "location": { - "description": "Location that was searched.", - "example": "San Francisco, CA", + "address": { + "example": "88 Moo3, Sriwaree Road, Sisa Chokhe Noi, Bang Sao Thong District, Samut Prakan Province, 10570, Thailand", "type": "string" }, - "page": { - "description": "Page number returned.", - "example": 1, - "type": "integer" + "latitude": { + "example": 13.69316, + "type": "number" }, - "results": { - "description": "Listings and rental buildings matching the search.", - "items": { - "$ref": "#/definitions/zillow.SearchItem" - }, - "type": "array" + "longitude": { + "example": 100.793475, + "type": "number" + }, + "traffic_description": { + "example": "15 km from Pra Chom Klao, approx. 27 mins by car", + "type": "string" + }, + "zone_name": { + "example": "Suvarnabhumi Airport", + "type": "string" } }, "type": "object" }, - "zomato.CitiesResponse": { + "tripcom.Policy": { "properties": { - "cities": { + "check_in_out": { + "example": [ + "Check-in: After 14:00", + "Check-out: Before 12:00", + "Front desk hours: 24/7" + ], "items": { - "$ref": "#/definitions/zomato.City" + "type": "string" }, "type": "array" }, - "total": { - "type": "integer" + "child": { + "example": [ + "Children of all ages are welcome at this property." + ], + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "zomato.City": { + "tripcom.Price": { "properties": { - "name": { - "description": "Name is Zomato's own display name for the city (e.g. \"Bengaluru\",\n\"Delhi NCR\") -- not always the same word as Slug.", - "example": "Mumbai", + "amount": { + "example": 38, + "type": "number" + }, + "currency": { + "example": "US$", "type": "string" }, - "slug": { - "description": "Slug is the public Zomato city slug -- the value the `city` param on\nzomato-search/zomato-collections and the first path segment of every\nrestaurant/collection URL this family returns use. Not always a\nlower-cased version of Name -- e.g. \"Delhi NCR\" is slug \"ncr\".", - "example": "mumbai", + "raw": { + "example": "US$38", "type": "string" }, - "url": { - "description": "URL is the city's canonical public Zomato page.", - "example": "https://www.zomato.com/mumbai", + "unit": { + "example": "1 night", "type": "string" } }, "type": "object" }, - "zomato.CollectionResponse": { + "tripcom.Rating": { "properties": { - "description": { + "amenities_score": { + "example": 8.8, + "type": "number" + }, + "cleanliness_score": { + "example": 8.7, + "type": "number" + }, + "location_score": { + "example": 8.3, + "type": "number" + }, + "recommend": { + "example": "79% Recommended", "type": "string" }, - "name": { + "score": { + "example": 8.6, + "type": "number" + }, + "score_description": { + "example": "Very good", "type": "string" }, - "num_places": { + "score_max": { + "example": 10, + "type": "number" + }, + "service_score": { + "example": 8.7, + "type": "number" + }, + "total_comment": { + "example": 875, + "type": "integer" + } + }, + "type": "object" + }, + "tripcom.SearchResponse": { + "properties": { + "city_id": { + "example": "359", "type": "string" }, - "restaurants": { + "city_slug": { + "example": "bangkok", + "type": "string" + }, + "count": { + "example": 9, + "type": "integer" + }, + "hotels": { "items": { - "$ref": "#/definitions/zomato.CollectionRestaurant" + "$ref": "#/definitions/tripcom.HotelSummary" }, "type": "array" }, - "url": { + "source_url": { + "example": "https://www.trip.com/hotels/bangkok-hotels-list-359/", "type": "string" } }, "type": "object" }, - "zomato.CollectionRestaurant": { + "tripcom.searchResponseDoc": { "properties": { - "cuisines": { - "items": { - "type": "string" - }, - "type": "array" + "code": { + "example": 200, + "type": "integer" }, - "id": { + "data": { + "$ref": "#/definitions/tripcom.SearchResponse" + }, + "msg": { + "example": "OK", "type": "string" + } + }, + "type": "object" + }, + "trustmrr.AcquireListing": { + "properties": { + "asking_price": { + "type": "number" }, - "image_url": { + "category": { + "example": "SaaS", "type": "string" }, - "locality": { + "description": { "type": "string" }, - "name": { + "first_listed_for_sale_at": { "type": "string" }, - "rating": { + "founded_date": { + "type": "string" + }, + "growth_30d": { "type": "number" }, - "rating_count": { + "icon": { "type": "string" }, - "type": { + "listing_tier": { + "type": "string" + }, + "multiple": { + "type": "number" + }, + "name": { + "example": "Ploxto", + "type": "string" + }, + "offer_count": { + "type": "integer" + }, + "payment_provider": { + "type": "string" + }, + "profit_margin_last_30_days": { + "type": "number" + }, + "revenue_last_30_days": { + "type": "number" + }, + "slug": { + "example": "ploxto", "type": "string" }, + "stealth_mode": { + "type": "boolean" + }, "url": { + "example": "https://trustmrr.com/startup/ploxto", "type": "string" } }, "type": "object" }, - "zomato.CollectionSummary": { + "trustmrr.AcquireResponse": { "properties": { - "image_url": { + "count": { + "type": "integer" + }, + "startups": { + "items": { + "$ref": "#/definitions/trustmrr.AcquireListing" + }, + "type": "array" + } + }, + "type": "object" + }, + "trustmrr.AskingPricePoint": { + "properties": { + "created_at": { + "description": "Time the asking price was set, in ISO 8601.", "type": "string" }, - "name": { + "price": { + "description": "Asking price recorded at that time.", + "type": "number" + } + }, + "type": "object" + }, + "trustmrr.CategoriesResponse": { + "properties": { + "categories": { + "description": "TrustMRR startup categories, one item per category.", + "items": { + "$ref": "#/definitions/trustmrr.Category" + }, + "type": "array" + }, + "count": { + "description": "Number of categories returned.", + "example": 31, + "type": "integer" + } + }, + "type": "object" + }, + "trustmrr.Category": { + "properties": { + "description": { + "description": "Short description of the category.", "type": "string" }, - "num_places": { + "icon": { + "description": "Name of the icon TrustMRR uses for the category, for example `Sparkles`.", + "example": "Sparkles", + "type": "string" + }, + "keywords": { + "description": "Keywords associated with the category.", + "items": { + "type": "string" + }, + "type": "array" + }, + "label": { + "description": "Full category name, for example `Artificial Intelligence`.", + "example": "Artificial Intelligence", + "type": "string" + }, + "label_short": { + "description": "Short category name, for example `AI`.", + "example": "AI", + "type": "string" + }, + "slug": { + "description": "URL slug of the category. Use it with the category endpoint.", + "example": "ai", "type": "string" }, "url": { + "description": "Link to the category page on TrustMRR.", + "example": "https://trustmrr.com/category/ai", "type": "string" } }, "type": "object" }, - "zomato.CollectionsResponse": { + "trustmrr.CategoryResponse": { "properties": { - "city": { + "count": { + "description": "Number of startups returned.", + "type": "integer" + }, + "slug": { + "description": "URL slug of the category that was requested.", + "example": "saas", "type": "string" }, - "collections": { + "startups": { + "description": "Startups listed in the category, one item per startup.", "items": { - "$ref": "#/definitions/zomato.CollectionSummary" + "$ref": "#/definitions/trustmrr.CategoryStartup" }, "type": "array" + }, + "url": { + "description": "Link to the category page on TrustMRR.", + "example": "https://trustmrr.com/category/saas", + "type": "string" } }, "type": "object" }, - "zomato.MenuCategory": { + "trustmrr.CategoryStartup": { "properties": { - "items": { - "items": { - "$ref": "#/definitions/zomato.MenuItem" - }, - "type": "array" + "current_last_30_days_revenue": { + "description": "Verified revenue over the last 30 days, in US dollars.", + "type": "number" + }, + "current_mrr": { + "description": "Verified monthly recurring revenue, in US dollars.", + "type": "number" + }, + "current_total_revenue": { + "description": "Verified total revenue to date, in US dollars.", + "type": "number" + }, + "description": { + "description": "Startup description as shown on TrustMRR.", + "type": "string" + }, + "icon": { + "description": "URL of the startup's icon image.", + "type": "string" + }, + "is_merchant_of_record": { + "description": "`true` when the startup is flagged as the merchant of record for its sales.", + "type": "boolean" }, "name": { + "description": "Startup name as shown on TrustMRR.", + "example": "Hidden Business", + "type": "string" + }, + "on_sale": { + "description": "`true` when the startup is currently listed for sale.", + "type": "boolean" + }, + "slug": { + "description": "URL slug of the startup on TrustMRR. Use it with the startup endpoint.", + "example": "hidden-business-3", + "type": "string" + }, + "url": { + "description": "Link to the startup's page on TrustMRR.", + "example": "https://trustmrr.com/startup/hidden-business-3", "type": "string" } }, "type": "object" }, - "zomato.MenuItem": { + "trustmrr.LeaderboardEntry": { "properties": { + "current_last_30_days_revenue": { + "description": "Verified revenue over the last 30 days, in US dollars.", + "type": "number" + }, + "current_mrr": { + "description": "Verified monthly recurring revenue, in US dollars.", + "example": 3569654.22, + "type": "number" + }, + "current_total_revenue": { + "description": "Verified total revenue to date, in US dollars.", + "example": 76627685.07, + "type": "number" + }, "description": { + "description": "Startup description as shown on TrustMRR.", "type": "string" }, - "id": { - "type": "string" + "growth_30d": { + "description": "Growth over the last 30 days, in percent.", + "type": "number" }, - "image_url": { + "growth_mrr_30d": { + "description": "Growth in monthly recurring revenue over the last 30 days, in percent.", + "type": "number" + }, + "icon": { + "description": "URL of the startup's icon image.", "type": "string" }, - "is_veg": { + "is_merchant_of_record": { + "description": "`true` when the startup is flagged as the merchant of record for its sales.", "type": "boolean" }, "name": { + "description": "Startup name as shown on TrustMRR.", + "example": "Stan", "type": "string" }, - "price": { + "on_sale": { + "description": "`true` when the startup is currently listed for sale.", + "type": "boolean" + }, + "rank": { + "description": "Position in the leaderboard for the selected metric, starting at 1.", + "example": 1, + "type": "integer" + }, + "revenue_per_visitor_last_30_days": { + "description": "Revenue per visitor over the last 30 days.", + "type": "number" + }, + "slug": { + "description": "URL slug of the startup on TrustMRR. Use it with the startup endpoint.", + "example": "stan", + "type": "string" + }, + "stealth_mode": { + "description": "`true` when the startup is listed in stealth mode.", + "type": "boolean" + }, + "traffic_last_30_days": { + "description": "Traffic to the startup's website over the last 30 days.", "type": "number" + }, + "url": { + "description": "Link to the startup's page on TrustMRR.", + "example": "https://trustmrr.com/startup/stan", + "type": "string" + }, + "x_founder_name": { + "description": "Founder's display name on X.", + "type": "string" + }, + "x_handle": { + "description": "Founder's X handle, without the `@`.", + "type": "string" + }, + "x_profile_picture": { + "description": "URL of the founder's X profile picture.", + "type": "string" } }, "type": "object" }, - "zomato.MenuResponse": { + "trustmrr.LeaderboardMetric": { + "enum": [ + "mrr", + "last_30_days_revenue", + "all_time_revenue", + "growth", + "traffic", + "revenue_per_visitor" + ], + "type": "string", + "x-enum-varnames": [ + "MetricMRR", + "MetricLast30DaysRevenue", + "MetricAllTimeRevenue", + "MetricGrowth", + "MetricTraffic", + "MetricRevenuePerVisitor" + ] + }, + "trustmrr.LeaderboardResponse": { "properties": { - "categories": { + "count": { + "description": "Number of startups in the leaderboard.", + "example": 100, + "type": "integer" + }, + "entries": { + "description": "Ranked startups, best first.", "items": { - "$ref": "#/definitions/zomato.MenuCategory" + "$ref": "#/definitions/trustmrr.LeaderboardEntry" }, "type": "array" }, - "restaurant": { - "$ref": "#/definitions/zomato.RestaurantResponse" + "metric": { + "allOf": [ + { + "$ref": "#/definitions/trustmrr.LeaderboardMetric" + } + ], + "description": "Metric the leaderboard is ranked by: `mrr`, `last_30_days_revenue`, `all_time_revenue`, `growth`, `traffic` or `revenue_per_visitor`.", + "example": "mrr" } }, "type": "object" }, - "zomato.OpeningHours": { + "trustmrr.MarketplaceResponse": { "properties": { - "days": { - "type": "string" + "best_deals": { + "items": { + "$ref": "#/definitions/trustmrr.MarketplaceStartup" + }, + "type": "array" }, - "timing": { - "type": "string" + "recently_listed": { + "items": { + "$ref": "#/definitions/trustmrr.MarketplaceStartup" + }, + "type": "array" } }, "type": "object" }, - "zomato.RestaurantCard": { + "trustmrr.MarketplaceRevenue": { "properties": { - "address": { + "last_30_days": { + "example": 23589.38, + "type": "number" + }, + "mrr": { + "example": 20361.89, + "type": "number" + }, + "total": { + "example": 23589.38, + "type": "number" + } + }, + "type": "object" + }, + "trustmrr.MarketplaceStartup": { + "properties": { + "active_subscriptions": { + "example": 4790, + "type": "integer" + }, + "asking_price": { + "example": 600000, + "type": "number" + }, + "category": { + "example": "Mobile Apps", "type": "string" }, - "cost_for_two": { + "country": { + "example": "PL", "type": "string" }, - "cuisines": { - "items": { - "type": "string" - }, - "type": "array" + "customers": { + "example": 0, + "type": "integer" }, - "delivery_time": { - "description": "DeliveryTime is Zomato's own delivery ETA (e.g. \"38 min\"), present\non results that carry its delivery-order metadata. Both search\nsources carry it but in different display shapes -- the city-wide\nlisting serves a bare \"38 min\", keyword search a prefixed\n\"Delivery in 38 min\" -- so it is normalized to the bare form (see\nnormalizeDeliveryTime). Absent for a restaurant Zomato is not\ncurrently delivering from.", + "description": { "type": "string" }, - "distance": { - "description": "Distance is Zomato's own display distance from the resolved city\nlocation to the restaurant (e.g. \"1.2 km\"). Present on both search\npaths.", + "first_listed_for_sale_at": { "type": "string" }, - "id": { + "founded_date": { + "example": "2025-06-01T00:00:00.000Z", "type": "string" }, - "image_url": { - "type": "string" + "google_search_impressions_last_30_days": { + "type": "integer" }, - "is_promoted": { - "description": "IsPromoted reports whether Zomato itself labels this a promoted\n(sponsored) placement rather than an organic result.", - "type": "boolean" + "growth_30d": { + "type": "number" }, - "is_serviceable": { - "description": "IsServiceable reports whether Zomato will currently deliver here\nfrom the resolved location. A pointer so a source that does not\ncarry the flag omits it rather than reporting a false \"not\nserviceable\".", - "type": "boolean" + "growth_mrr_30d": { + "type": "number" }, - "locality": { + "icon": { "type": "string" }, + "multiple": { + "example": 2.1, + "type": "number" + }, "name": { + "example": "TrackAI", "type": "string" }, - "offers": { - "description": "Offers carries Zomato's own headline offer badges for this\nrestaurant (e.g. \"50% OFF\", \"₹100 OFF\"). Only the city-wide listing\ncarries them -- keyword search results do not.", - "items": { - "type": "string" - }, - "type": "array" + "on_sale": { + "example": true, + "type": "boolean" }, - "rating": { + "payment_provider": { + "example": "revenuecat", + "type": "string" + }, + "profit_margin_last_30_days": { + "example": 10, "type": "number" }, - "rating_count": { + "rank": { + "example": 858, + "type": "integer" + }, + "revenue": { + "$ref": "#/definitions/trustmrr.MarketplaceRevenue" + }, + "revenue_per_visitor": { + "type": "number" + }, + "slug": { + "example": "trackai", + "type": "string" + }, + "target_audience": { + "example": "B2C", "type": "string" }, "url": { + "example": "https://trustmrr.com/startup/trackai", + "type": "string" + }, + "visitors_last_30_days": { + "type": "integer" + }, + "website": { + "example": "https://trackai.app", + "type": "string" + }, + "x_handle": { + "type": "string" + }, + "x_profile_picture": { "type": "string" } }, "type": "object" }, - "zomato.RestaurantDelivery": { + "trustmrr.Startup": { "properties": { - "has_online_ordering": { - "type": "boolean" + "ahrefs_domain": { + "description": "Domain TrustMRR uses to look up the startup's Ahrefs domain rating.", + "type": "string" }, - "is_serviceable": { - "type": "boolean" + "ahrefs_domain_rating": { + "description": "Ahrefs domain rating of the startup's website.", + "type": "integer" }, - "min_order_amount": { + "asking_price": { + "description": "Price the seller is asking for the startup.", + "example": 600000, "type": "number" }, - "pickup_available": { - "type": "boolean" + "asking_price_history": { + "description": "Earlier asking prices for the startup, one item per recorded price.", + "items": { + "$ref": "#/definitions/trustmrr.AskingPricePoint" + }, + "type": "array" }, - "time": { + "branding_primary_color": { + "description": "Primary brand color of the startup, as a hex code.", + "example": "#ffffff", "type": "string" - } - }, - "type": "object" - }, - "zomato.RestaurantRatings": { - "properties": { - "delivery": { - "$ref": "#/definitions/zomato.SplitRating" }, - "dining": { - "$ref": "#/definitions/zomato.SplitRating" - } - }, - "type": "object" - }, - "zomato.RestaurantResponse": { - "properties": { - "address": { + "branding_secondary_color": { + "description": "Secondary brand color of the startup, as a hex code.", + "example": "#000000", "type": "string" }, - "city": { - "description": "City/Zipcode/Country/Latitude/Longitude come from the same contact\nsection Address and Locality already do -- Zipcode is frequently\nblank or \"0\" upstream and is omitted when it is.", + "category": { + "description": "Category label of the startup, for example `Mobile App`.", + "example": "Mobile App", + "type": "string" + }, + "category_slug": { + "description": "URL slug of the startup's category, for example `mobile-app`.", + "example": "mobile-app", "type": "string" }, "country": { + "description": "Country code of the startup, for example `PL`.", + "example": "PL", "type": "string" }, - "cuisines": { - "items": { - "type": "string" - }, - "type": "array" + "created_at": { + "description": "Time the startup was added to TrustMRR, in ISO 8601.", + "type": "string" }, - "delivery": { + "deal_score": { + "description": "TrustMRR's recency-aware acquisition score for the listing.", + "type": "number" + }, + "description": { + "description": "Startup description as shown on TrustMRR.", + "type": "string" + }, + "enrichment": { "allOf": [ { - "$ref": "#/definitions/zomato.RestaurantDelivery" + "$ref": "#/definitions/trustmrr.StartupEnrichment" } ], - "description": "Delivery is present only when Zomato carries delivery metadata for\nthis restaurant." + "description": "TrustMRR's AI-generated business summary for the startup." }, - "id": { + "first_listed_for_sale_at": { + "description": "Time the startup was first listed for sale, in ISO 8601.", "type": "string" }, - "image_url": { + "founded_date": { + "description": "Date the startup was founded, in ISO 8601.", "type": "string" }, - "is_dark_kitchen": { + "growth_30d": { + "description": "Growth over the last 30 days, in percent.", + "type": "number" + }, + "growth_mrr_30d": { + "description": "Growth in monthly recurring revenue over the last 30 days, in percent.", + "type": "number" + }, + "has_dofollow_backlink": { + "description": "`true` when TrustMRR has verified a dofollow backlink for the startup.", "type": "boolean" }, - "is_delivery_only": { - "description": "IsDeliveryOnly marks a kitchen Zomato lists for delivery only (no\ndining), IsDarkKitchen a delivery-only kitchen with no storefront at\nall, and the two closed flags Zomato's own temporary/permanent\nclosure states.", + "has_google_analytics": { + "description": "`true` when TrustMRR has verified Google Analytics for the startup.", "type": "boolean" }, - "is_permanently_closed": { + "has_search_console": { + "description": "`true` when TrustMRR has verified Google Search Console for the startup.", "type": "boolean" }, - "is_temporarily_closed": { + "icon": { + "description": "URL of the startup's icon image.", + "type": "string" + }, + "insight_overrides": { + "allOf": [ + { + "$ref": "#/definitions/trustmrr.StartupInsight" + } + ], + "description": "InsightOverrides holds the human-curated business summary TrustMRR displays\nin place of the AI enrichment when a seller has edited it." + }, + "is_merchant_of_record": { + "description": "`true` when the startup is flagged as the merchant of record for its sales.", "type": "boolean" }, - "latitude": { - "type": "number" + "is_sponsored": { + "description": "`true` when the listing is sponsored.", + "type": "boolean" }, - "locality": { + "listing_tier": { + "description": "Marketplace listing tier of the startup, for example `pro`.", + "example": "pro", "type": "string" }, - "longitude": { - "type": "number" + "looking_for_cofounder": { + "description": "`true` when the startup is looking for a cofounder.", + "type": "boolean" }, - "name": { + "looking_for_cofounder_message": { + "description": "Message from the founder about the cofounder search. Text written by the founder.", "type": "string" }, - "opening_hours": { - "description": "OpeningHours is the full weekly table behind the single-line Timing\nstring above.", + "marketing_channels": { + "description": "Marketing channels detected for the startup, one item per channel.", "items": { - "$ref": "#/definitions/zomato.OpeningHours" + "$ref": "#/definitions/trustmrr.StartupChannel" }, "type": "array" }, - "phone": { + "merchant_category_code": { + "description": "Merchant category code of the startup's payment processor account, for example `7372`.", + "example": "7372", "type": "string" }, - "rating": { + "mrr_last_synced_at": { + "description": "Time the monthly recurring revenue was last synced, in ISO 8601.", + "type": "string" + }, + "multiple": { + "description": "Asking price divided by trailing revenue.", + "example": 2.12, "type": "number" }, - "rating_count": { + "name": { + "description": "Startup name as shown on TrustMRR.", + "example": "TrackAI", "type": "string" }, - "ratings": { + "offer_count": { + "description": "Number of offers made on the listing.", + "type": "integer" + }, + "on_sale": { + "description": "`true` when the startup is currently listed for sale.", + "type": "boolean" + }, + "payment_provider": { + "description": "Payment provider that verifies the startup's revenue, for example `revenuecat`.", + "example": "revenuecat", + "type": "string" + }, + "profit_margin_last_30_days": { + "description": "Profit margin over the last 30 days, in percent.", + "example": 10, + "type": "number" + }, + "rank": { + "description": "Position of the startup on TrustMRR's ranking.", + "example": 858, + "type": "integer" + }, + "revenue": { "allOf": [ { - "$ref": "#/definitions/zomato.RestaurantRatings" + "$ref": "#/definitions/trustmrr.StartupRevenue" } ], - "description": "Ratings splits the single headline Rating above into Zomato's own\nseparately-aggregated dining and delivery figures." + "description": "Verified revenue figures for the startup, in US dollars." }, - "status_text": { + "revenue_last_synced_at": { + "description": "Time the revenue figures were last synced, in ISO 8601.", "type": "string" }, - "timing": { + "revenue_per_visitor_last_30_days": { + "description": "Revenue per visitor over the last 30 days.", + "type": "number" + }, + "secondary_payment_provider": { + "description": "Second payment provider connected to the startup, when it has one.", + "type": "string" + }, + "seller_message": { + "description": "Message from the seller on the listing. Text written by the seller.", + "type": "string" + }, + "slug": { + "description": "URL slug of the startup on TrustMRR. Use it with the startup endpoint.", + "example": "trackai", + "type": "string" + }, + "status": { + "description": "Startup status on TrustMRR, for example `active`.", + "example": "active", + "type": "string" + }, + "stealth_mode": { + "description": "`true` when the startup is listed in stealth mode.", + "type": "boolean" + }, + "target_audience": { + "description": "Audience the startup sells to, for example `B2C` or `B2B`.", + "example": "B2C", + "type": "string" + }, + "tech_stack": { + "description": "Technologies detected in the startup's stack, one item per technology.", + "items": { + "$ref": "#/definitions/trustmrr.StartupTech" + }, + "type": "array" + }, + "traffic_last_12_months": { + "description": "Traffic to the startup's website over the last 12 months.", + "type": "number" + }, + "traffic_last_24_hours": { + "description": "Traffic to the startup's website over the last 24 hours.", + "type": "number" + }, + "traffic_last_30_days": { + "description": "Traffic to the startup's website over the last 30 days.", + "type": "number" + }, + "traffic_last_7_days": { + "description": "Traffic to the startup's website over the last 7 days.", + "type": "number" + }, + "updated_at": { + "description": "Time the startup record was last updated, in ISO 8601.", "type": "string" }, "url": { + "description": "Link to the startup's page on TrustMRR.", + "example": "https://trustmrr.com/startup/trackai", "type": "string" }, - "zipcode": { + "user_category": { + "description": "Second category label for the startup, for example `Mobile Apps`.", + "example": "Mobile Apps", + "type": "string" + }, + "user_category_slug": { + "description": "URL slug of the second category label, for example `mobile-apps`.", + "example": "mobile-apps", + "type": "string" + }, + "website": { + "description": "Startup's website address.", + "example": "https://trackai.app", + "type": "string" + }, + "x_follower_count": { + "description": "Number of followers of the founder's X account.", + "type": "integer" + }, + "x_founder_name": { + "description": "Founder's display name on X.", + "type": "string" + }, + "x_handle": { + "description": "Founder's X handle, without the `@`.", + "type": "string" + }, + "x_profile_picture": { + "description": "URL of the founder's X profile picture.", "type": "string" } }, "type": "object" }, - "zomato.SearchResponse": { + "trustmrr.StartupChannel": { "properties": { - "city": { + "category": { + "description": "Marketing channel category, for example `paid`.", + "example": "paid", "type": "string" }, - "has_more": { - "type": "boolean" + "slug": { + "description": "Marketing channel identifier, for example `meta-ads`.", + "example": "meta-ads", + "type": "string" + } + }, + "type": "object" + }, + "trustmrr.StartupEnrichment": { + "properties": { + "business_type": { + "description": "Business type of the startup, for example `B2C`.", + "example": "B2C", + "type": "string" }, - "next_cursor": { + "estimated_user_count": { + "description": "Estimated number of users of the startup's product.", + "type": "integer" + }, + "funding_status": { + "description": "Funding status of the startup, for example `Unknown`.", "type": "string" }, - "query": { + "last_enriched_at": { + "description": "Time the summary was last generated, in ISO 8601.", "type": "string" }, - "restaurants": { + "pricing_model": { + "description": "Short description of how the startup charges for its product.", + "type": "string" + }, + "problem_solved": { + "description": "Problem the startup's product solves.", + "type": "string" + }, + "screenshots": { + "description": "Screenshots of the startup's site, one item per screenshot.", "items": { - "$ref": "#/definitions/zomato.RestaurantCard" + "$ref": "#/definitions/trustmrr.StartupScreenshot" }, "type": "array" }, - "total_results": { + "tags": { + "description": "Topic tags for the startup, for example `ai` or `saas`.", + "items": { + "type": "string" + }, + "type": "array" + }, + "target_persona": { + "description": "Type of customer the startup's product is aimed at.", + "type": "string" + }, + "value_proposition": { + "description": "One-line summary of what the startup's product offers.", + "type": "string" + } + }, + "type": "object" + }, + "trustmrr.StartupInsight": { + "properties": { + "business_type": { + "description": "Business type of the startup, for example `B2C`.", + "example": "B2C", + "type": "string" + }, + "estimated_user_count": { + "description": "Estimated number of users of the startup's product.", "type": "integer" + }, + "pricing_model": { + "description": "Short description of how the startup charges for its product.", + "type": "string" + }, + "problem_solved": { + "description": "Problem the startup's product solves.", + "type": "string" + }, + "target_persona": { + "description": "Type of customer the startup's product is aimed at.", + "type": "string" + }, + "updated_at": { + "description": "Time the summary was last updated, in ISO 8601.", + "type": "string" + }, + "value_proposition": { + "description": "One-line summary of what the startup's product offers.", + "type": "string" } }, "type": "object" }, - "zomato.SplitRating": { + "trustmrr.StartupRef": { "properties": { - "rating": { + "last_modified": { + "description": "Last-modified time TrustMRR lists for the startup page, in ISO 8601.", + "example": "2026-07-08T05:09:42.880Z", + "type": "string" + }, + "slug": { + "description": "URL slug of the startup on TrustMRR. Use it with the startup endpoint.", + "example": "gumroad", + "type": "string" + }, + "url": { + "description": "Link to the startup's page on TrustMRR.", + "example": "https://trustmrr.com/startup/gumroad", + "type": "string" + } + }, + "type": "object" + }, + "trustmrr.StartupRevenue": { + "properties": { + "active_subscriptions": { + "description": "Number of active subscriptions.", + "type": "integer" + }, + "customers": { + "description": "Number of customers.", + "type": "integer" + }, + "last_30_days": { + "description": "Revenue over the last 30 days, in US dollars.", "type": "number" }, - "review_count": { + "mrr": { + "description": "Monthly recurring revenue, in US dollars.", + "type": "number" + }, + "total": { + "description": "Total revenue to date, in US dollars.", + "type": "number" + } + }, + "type": "object" + }, + "trustmrr.StartupScreenshot": { + "properties": { + "captured_at": { + "description": "Time the screenshot was taken, in ISO 8601.", + "type": "string" + }, + "label": { + "description": "Label of the screenshot, for example `Landing page`.", + "type": "string" + }, + "url": { + "description": "URL of the screenshot image.", "type": "string" } }, "type": "object" }, - "zomato.citiesResponseDoc": { + "trustmrr.StartupTech": { + "properties": { + "category": { + "description": "Technology category, for example `frontend`.", + "example": "frontend", + "type": "string" + }, + "slug": { + "description": "Technology identifier, for example `reactnative`.", + "example": "reactnative", + "type": "string" + } + }, + "type": "object" + }, + "trustmrr.StartupsResponse": { + "properties": { + "has_next": { + "description": "`true` when more pages of startups remain.", + "example": true, + "type": "boolean" + }, + "page": { + "description": "Page number returned, starting at 1.", + "example": 1, + "type": "integer" + }, + "page_size": { + "description": "Number of startups per page.", + "example": 100, + "type": "integer" + }, + "startups": { + "description": "Startups on this page, one item per startup.", + "items": { + "$ref": "#/definitions/trustmrr.StartupRef" + }, + "type": "array" + }, + "total": { + "description": "Total number of startups listed on TrustMRR.", + "example": 8196, + "type": "integer" + } + }, + "type": "object" + }, + "trustmrr.acquireResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/zomato.CitiesResponse" + "$ref": "#/definitions/trustmrr.AcquireResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "zomato.collectionResponseDoc": { + "trustmrr.categoriesResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/zomato.CollectionResponse" + "$ref": "#/definitions/trustmrr.CategoriesResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "zomato.collectionsResponseDoc": { + "trustmrr.categoryResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/zomato.CollectionsResponse" + "$ref": "#/definitions/trustmrr.CategoryResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "zomato.menuResponseDoc": { + "trustmrr.leaderboardResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/zomato.MenuResponse" + "$ref": "#/definitions/trustmrr.LeaderboardResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "zomato.restaurantResponseDoc": { + "trustmrr.marketplaceResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/zomato.RestaurantResponse" + "$ref": "#/definitions/trustmrr.MarketplaceResponse" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" }, - "zomato.searchResponseDoc": { + "trustmrr.startupResponseDoc": { "properties": { "code": { - "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "example": 200, "type": "integer" }, "data": { - "$ref": "#/definitions/zomato.SearchResponse" + "$ref": "#/definitions/trustmrr.Startup" }, "msg": { - "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + "example": "OK", + "type": "string" } }, "type": "object" - } - }, - "host": "api.crawlora.net", - "info": { - "contact": { - "email": "support@crawlora.net", - "name": "API Support", - "url": "https://crawlora.net" }, - "description": "Crawlora is a hosted web-data and SERP API: call documented REST endpoints and get normalized JSON instead of HTML to parse — across search/SERP, maps and local, e-commerce, app stores, social, media and finance. One API key; Crawlora runs the proxy rotation, headless browsers and parsing behind the scenes. Billed pay-on-success: charged only on a successful 2xx response, 1-10 credits per call, with a free tier of 2,000 credits per month and no card. A hosted MCP server (mcp.crawlora.net/mcp) exposes the same catalog as agent tools. Search endpoints accept `q` as a universal alias for whichever search-term parameter they document (`query`, `term`, `keyword`, or Amazon's `k`), so one parameter name works across the whole catalog; an explicitly supplied documented name always wins.", - "license": { + "trustmrr.startupsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/trustmrr.StartupsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.BusinessAbout": { + "properties": { + "business_country_code": { + "description": "Country code of the business, such as `DK`.", + "example": "DK", + "type": "string" + }, + "contact": { + "allOf": [ + { + "$ref": "#/definitions/trustpilot.BusinessContact" + } + ], + "description": "Contact details the business lists on its profile." + }, + "description_html": { + "description": "Business description from the profile, as HTML.", + "type": "string" + }, + "description_text": { + "description": "Business description from the profile, as plain text.", + "type": "string" + }, + "facebook_url": { + "description": "URL of the business's Facebook page.", + "example": "https://www.facebook.com/Trustpilot", + "type": "string" + }, + "has_company_elements": { + "description": "Whether the profile shows company information added by the business.", + "example": true, + "type": "boolean" + }, + "information_source": { + "description": "Who supplied the company information, as Trustpilot reports it, such as `customer` or `none`.", + "example": "customer", + "type": "string" + }, + "promotion_points": { + "description": "Selling points listed in the business's promotion box.", + "items": { + "type": "string" + }, + "type": "array" + }, + "promotion_title": { + "description": "Title of the promotion box on the business profile.", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.BusinessActivity": { + "properties": { + "claimed_date": { + "description": "Time the business claimed its profile, in ISO 8601 UTC.", + "type": "string" + }, + "has_business_unit_merge_history": { + "description": "Whether this profile has been merged with other Trustpilot business profiles.", + "example": false, + "type": "boolean" + }, + "has_subscription": { + "description": "Whether the business has a Trustpilot subscription.", + "example": false, + "type": "boolean" + }, + "is_asking_for_reviews": { + "description": "Whether the business invites customers to review it on Trustpilot.", + "example": false, + "type": "boolean" + }, + "is_claimed": { + "description": "Whether the business has claimed its Trustpilot profile.", + "example": false, + "type": "boolean" + }, + "is_using_ai_responses": { + "description": "Whether the business uses AI-generated responses to reviews.", + "example": false, + "type": "boolean" + }, + "is_using_paid_features": { + "description": "Whether the business uses paid Trustpilot features.", + "example": false, + "type": "boolean" + }, + "previously_claimed": { + "description": "Whether the profile has been claimed before.", + "example": false, + "type": "boolean" + }, + "verification": { + "allOf": [ + { + "$ref": "#/definitions/trustpilot.BusinessVerification" + } + ], + "description": "Verification checks the business has passed." + } + }, + "type": "object" + }, + "trustpilot.BusinessBreadcrumb": { + "properties": { + "id": { + "description": "Trustpilot category id at this level of the path.", + "example": "electronics_technology", + "type": "string" + }, + "level": { + "description": "Level of the category in the path: `top`, `mid` or `bottom`.", + "example": "top", + "type": "string" + }, + "name": { + "description": "Display name of the category at this level.", + "example": "Electronics & Technology", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.BusinessCategory": { + "properties": { + "cardinality": { + "description": "Cardinality value Trustpilot assigns to this category for the business.", + "example": 2, + "type": "integer" + }, + "id": { + "description": "Trustpilot category id, such as `software_company`.", + "example": "software_company", + "type": "string" + }, + "is_primary": { + "description": "Whether this is the business's primary category.", + "example": true, + "type": "boolean" + }, + "name": { + "description": "Display name of the category.", + "example": "Software Company", + "type": "string" + }, + "rank": { + "description": "Rank value Trustpilot assigns to this category for the business.", + "example": 1, + "type": "integer" + } + }, + "type": "object" + }, + "trustpilot.BusinessCompanyReply": { + "properties": { + "message": { + "description": "Text of the business's reply.", + "type": "string" + }, + "published_at_text": { + "description": "Time the reply was published, in ISO 8601 UTC.", + "type": "string" + }, + "updated_at_text": { + "description": "Time the reply was last updated, in ISO 8601 UTC.", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.BusinessContact": { + "properties": { + "address": { + "description": "Street address of the business.", + "type": "string" + }, + "city": { + "description": "City of the business.", + "type": "string" + }, + "country": { + "description": "Country of the business.", + "type": "string" + }, + "email": { + "description": "Contact email address of the business.", + "type": "string" + }, + "phone": { + "description": "Contact phone number of the business.", + "type": "string" + }, + "zip_code": { + "description": "Postal code of the business.", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.BusinessPageLanguage": { + "properties": { + "iso_language": { + "description": "Language and region code of this version, such as `en-US`.", + "example": "en-US", + "type": "string" + }, + "language_code": { + "description": "Language code of this version, such as `en`.", + "example": "en", + "type": "string" + }, + "locale": { + "description": "Locale of this version, such as `en-US`.", + "example": "en-US", + "type": "string" + }, + "uri": { + "description": "Base URL of the Trustpilot site for this language version.", + "example": "https://www.trustpilot.com", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.BusinessPageMeta": { + "properties": { + "canonical_url": { + "description": "Canonical URL of the business profile page.", + "example": "https://www.trustpilot.com/review/openai.com", + "type": "string" + }, + "domain": { + "description": "Trustpilot domain the profile page is served from.", + "example": "https://www.trustpilot.com", + "type": "string" + }, + "languages": { + "description": "Language versions of the profile page.", + "items": { + "$ref": "#/definitions/trustpilot.BusinessPageLanguage" + }, + "type": "array" + }, + "locale": { + "description": "Locale of the profile page, such as `en-US`.", + "example": "en-US", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.BusinessRatingHistogram": { + "properties": { + "five": { + "description": "Number of 5-star reviews.", + "example": 80, + "type": "integer" + }, + "four": { + "description": "Number of 4-star reviews.", + "example": 20, + "type": "integer" + }, + "one": { + "description": "Number of 1-star reviews.", + "example": 817, + "type": "integer" + }, + "three": { + "description": "Number of 3-star reviews.", + "example": 22, + "type": "integer" + }, + "total": { + "description": "Total number of reviews counted across all star levels.", + "example": 984, + "type": "integer" + }, + "two": { + "description": "Number of 2-star reviews.", + "example": 45, + "type": "integer" + } + }, + "type": "object" + }, + "trustpilot.BusinessRelatedResponse": { + "properties": { + "business": { + "allOf": [ + { + "$ref": "#/definitions/trustpilot.businessHeader" + } + ], + "description": "Summary of the business whose related businesses are listed." + }, + "items": { + "description": "Businesses Trustpilot shows as related to this business.", + "items": { + "$ref": "#/definitions/trustpilot.RelatedBusiness" + }, + "type": "array" + } + }, + "type": "object" + }, + "trustpilot.BusinessReplyMetrics": { + "properties": { + "average_days_to_reply": { + "description": "Average number of days the business takes to reply to reviews.", + "example": 10.59, + "type": "number" + }, + "last_reply_to_negative_review": { + "description": "Time of the business's most recent reply to a negative review, as Trustpilot reports it.", + "type": "string" + }, + "negative_reviews_with_replies": { + "description": "Number of negative reviews the business has replied to.", + "example": 7964, + "type": "integer" + }, + "reply_percentage": { + "description": "Percentage of negative reviews the business has replied to.", + "example": 47.88, + "type": "number" + }, + "total_negative_reviews": { + "description": "Total number of negative reviews the business has received.", + "example": 16630, + "type": "integer" + } + }, + "type": "object" + }, + "trustpilot.BusinessResponse": { + "properties": { + "about": { + "allOf": [ + { + "$ref": "#/definitions/trustpilot.BusinessAbout" + } + ], + "description": "Company information the business shows on its Trustpilot profile." + }, + "breadcrumbs": { + "description": "Category path of the business, from top level down to the most specific level.", + "items": { + "$ref": "#/definitions/trustpilot.BusinessBreadcrumb" + }, + "type": "array" + }, + "categories": { + "description": "Categories the business is listed under on Trustpilot.", + "items": { + "$ref": "#/definitions/trustpilot.BusinessCategory" + }, + "type": "array" + }, + "claimed": { + "description": "Whether the business has claimed its Trustpilot profile.", + "example": false, + "type": "boolean" + }, + "company_activity": { + "allOf": [ + { + "$ref": "#/definitions/trustpilot.BusinessActivity" + } + ], + "description": "How the business uses Trustpilot, such as claiming, subscriptions and verification." + }, + "name": { + "description": "Display name of the business on Trustpilot.", + "example": "OpenAI", + "type": "string" + }, + "page_meta": { + "allOf": [ + { + "$ref": "#/definitions/trustpilot.BusinessPageMeta" + } + ], + "description": "Page details of the Trustpilot profile, such as canonical URL and language versions." + }, + "paid_subscription": { + "description": "Whether the business uses paid Trustpilot features or has a Trustpilot subscription.", + "example": false, + "type": "boolean" + }, + "rating": { + "description": "Star rating shown on the business profile, out of 5.", + "example": 1.5, + "type": "number" + }, + "rating_histogram": { + "allOf": [ + { + "$ref": "#/definitions/trustpilot.BusinessRatingHistogram" + } + ], + "description": "Number of reviews at each star level." + }, + "reply_metrics": { + "allOf": [ + { + "$ref": "#/definitions/trustpilot.BusinessReplyMetrics" + } + ], + "description": "Statistics on how the business replies to negative reviews." + }, + "review_count": { + "description": "Total number of reviews the business has on Trustpilot.", + "example": 984, + "type": "integer" + }, + "review_summary": { + "allOf": [ + { + "$ref": "#/definitions/trustpilot.BusinessReviewSummary" + } + ], + "description": "AI-generated summary of the business's reviews shown on its profile." + }, + "review_topics": { + "description": "AI-generated summaries of what reviewers say about individual topics.", + "items": { + "$ref": "#/definitions/trustpilot.BusinessReviewTopic" + }, + "type": "array" + }, + "slug": { + "description": "Business slug used in the Trustpilot profile URL, usually the website domain.", + "example": "openai.com", + "type": "string" + }, + "trust_score": { + "description": "Trustpilot TrustScore of the business, as a decimal number.", + "example": 1.3, + "type": "number" + }, + "trustpilot_url": { + "description": "URL of the business profile on Trustpilot.", + "example": "https://www.trustpilot.com/review/openai.com", + "type": "string" + }, + "website_url": { + "description": "Website address of the business.", + "example": "https://openai.com", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.BusinessReviewItem": { + "properties": { + "author_country": { + "description": "Country code of the reviewer, such as `GB`.", + "example": "GB", + "type": "string" + }, + "author_name": { + "description": "Name of the reviewer as shown on the review.", + "example": "Summit", + "type": "string" + }, + "author_review_count": { + "description": "Number of reviews the reviewer has written on Trustpilot.", + "example": 1, + "type": "integer" + }, + "body": { + "description": "Full text of the review.", + "type": "string" + }, + "company_reply": { + "allOf": [ + { + "$ref": "#/definitions/trustpilot.BusinessCompanyReply" + } + ], + "description": "Reply the business posted to the review. Omitted when there is none." + }, + "experienced_at_text": { + "description": "Date of the experience the review describes, in ISO 8601 UTC.", + "type": "string" + }, + "id": { + "description": "Trustpilot id of the review.", + "example": "69b2e2443283f179ac73d3ce", + "type": "string" + }, + "invited": { + "description": "Whether the reviewer was invited by the business to write the review.", + "example": false, + "type": "boolean" + }, + "labels": { + "allOf": [ + { + "$ref": "#/definitions/trustpilot.BusinessReviewLabels" + } + ], + "description": "Labels Trustpilot attaches to the review, such as source and verification." + }, + "published_at_text": { + "description": "Time the review was published, in ISO 8601 UTC.", + "type": "string" + }, + "rating": { + "description": "Star rating the reviewer gave, from 1 to 5.", + "example": 1, + "type": "integer" + }, + "title": { + "description": "Headline of the review.", + "type": "string" + }, + "updated_at_text": { + "description": "Time the review was last updated, in ISO 8601 UTC.", + "type": "string" + }, + "verified": { + "description": "Whether Trustpilot marks the review as verified.", + "example": false, + "type": "boolean" + } + }, + "type": "object" + }, + "trustpilot.BusinessReviewLabels": { + "properties": { + "filtered": { + "description": "Whether the review is marked as filtered on Trustpilot.", + "example": false, + "type": "boolean" + }, + "merged": { + "description": "Merge label shown on the review, such as `merged`.", + "type": "string" + }, + "pending": { + "description": "Whether the review is still pending.", + "example": false, + "type": "boolean" + }, + "review_source": { + "description": "How the review was collected, as Trustpilot labels it, such as `Organic` or `Invited`.", + "example": "Organic", + "type": "string" + }, + "verification_level": { + "description": "Verification level of the review, such as `verified` or `not-verified`.", + "example": "not-verified", + "type": "string" + }, + "verification_source": { + "description": "How the review was verified, such as `email` or `invitation`.", + "example": "invitation", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.BusinessReviewSummary": { + "properties": { + "model_version": { + "description": "Version of the model that generated the summary, as Trustpilot reports it.", + "type": "string" + }, + "status": { + "description": "Publication status of the summary, as Trustpilot reports it.", + "type": "string" + }, + "summary": { + "description": "Text of the AI-generated summary of the business's reviews.", + "type": "string" + }, + "updated_at": { + "description": "Time the summary was last updated, as Trustpilot reports it.", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.BusinessReviewTopic": { + "properties": { + "model_version": { + "description": "Version of the model that generated the topic summary, as Trustpilot reports it.", + "type": "string" + }, + "order": { + "description": "Position in which Trustpilot lists the topic.", + "example": 1, + "type": "integer" + }, + "summary": { + "description": "Text of the AI-generated summary of what reviewers say about the topic.", + "type": "string" + }, + "topic": { + "description": "Topic the summary covers, such as `user_experience`.", + "example": "user_experience", + "type": "string" + }, + "updated_at": { + "description": "Time the topic summary was last updated, as Trustpilot reports it.", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.BusinessReviewsAppliedFilters": { + "properties": { + "language": { + "description": "Review language code that was applied, in lowercase.", + "example": "en", + "type": "string" + }, + "query": { + "description": "Text search that was applied to the review content.", + "example": "refund", + "type": "string" + }, + "replied": { + "description": "Whether only reviews with a business reply were requested.", + "type": "boolean" + }, + "stars": { + "description": "Star rating, from 1 to 5, that reviews were filtered to.", + "example": 1, + "type": "integer" + }, + "verified": { + "description": "Whether only verified reviews were requested.", + "type": "boolean" + } + }, + "type": "object" + }, + "trustpilot.BusinessReviewsPagination": { + "properties": { + "has_next_page": { + "description": "Whether another page of reviews follows this one.", + "example": true, + "type": "boolean" + }, + "next_page": { + "description": "Number of the next page. Omitted on the last page.", + "example": 2, + "type": "integer" + }, + "page": { + "description": "Page number returned.", + "example": 1, + "type": "integer" + }, + "per_page": { + "description": "Number of reviews per page.", + "example": 20, + "type": "integer" + }, + "total_pages": { + "description": "Total number of pages of reviews.", + "example": 50, + "type": "integer" + }, + "total_reviews": { + "description": "Total number of reviews available for the business.", + "example": 984, + "type": "integer" + } + }, + "type": "object" + }, + "trustpilot.BusinessReviewsResponse": { + "properties": { + "applied_filters": { + "allOf": [ + { + "$ref": "#/definitions/trustpilot.BusinessReviewsAppliedFilters" + } + ], + "description": "Filters that were applied to the reviews. Omitted when no filter was used." + }, + "business": { + "allOf": [ + { + "$ref": "#/definitions/trustpilot.businessHeader" + } + ], + "description": "Summary of the business the reviews belong to." + }, + "items": { + "description": "Reviews on this page, as listed on the business's Trustpilot page.", + "items": { + "$ref": "#/definitions/trustpilot.BusinessReviewItem" + }, + "type": "array" + }, + "pagination": { + "allOf": [ + { + "$ref": "#/definitions/trustpilot.BusinessReviewsPagination" + } + ], + "description": "Paging details for the reviews." + } + }, + "type": "object" + }, + "trustpilot.BusinessVerification": { + "properties": { + "verified_by_google": { + "description": "Whether the business is verified through Google.", + "example": false, + "type": "boolean" + }, + "verified_payment_method": { + "description": "Whether the business has a verified payment method.", + "example": false, + "type": "boolean" + }, + "verified_user_identity": { + "description": "Whether the identity of the user managing the profile is verified.", + "example": false, + "type": "boolean" + } + }, + "type": "object" + }, + "trustpilot.CategoriesResponse": { + "properties": { + "groups": { + "description": "Top-level category groups, each with the categories it contains.", + "items": { + "$ref": "#/definitions/trustpilot.CategoryGroup" + }, + "type": "array" + } + }, + "type": "object" + }, + "trustpilot.CategoryBusiness": { + "properties": { + "business_unit_id": { + "description": "Trustpilot id of the business.", + "example": "5e18c99abe863e0001b6ff0c", + "type": "string" + }, + "categories": { + "description": "Categories the business is tagged with.", + "items": { + "$ref": "#/definitions/trustpilot.CategoryBusinessTag" + }, + "type": "array" + }, + "display_name": { + "description": "Display name of the business on Trustpilot.", + "example": "Houzeo", + "type": "string" + }, + "email": { + "description": "Contact email address of the business.", + "example": "support@houzeo.com", + "type": "string" + }, + "identifying_name": { + "description": "Business slug used in the Trustpilot profile URL, usually the website domain. Use it with the business endpoint.", + "example": "www.houzeo.com", + "type": "string" + }, + "location": { + "allOf": [ + { + "$ref": "#/definitions/trustpilot.CategoryBusinessLocation" + } + ], + "description": "Location of the business. Omitted when Trustpilot lists none." + }, + "logo_url": { + "description": "URL of the business's logo.", + "example": "https://s3-eu-west-1.amazonaws.com/tpd/screenshotlogo-domain/example/198x149.png", + "type": "string" + }, + "phone": { + "description": "Contact phone number of the business.", + "example": "(844) 448-0110", + "type": "string" + }, + "recommended": { + "description": "Whether Trustpilot recommends the business in its categories.", + "example": true, + "type": "boolean" + }, + "review_count": { + "description": "Total number of reviews the business has on Trustpilot.", + "example": 3473, + "type": "integer" + }, + "stars": { + "description": "Star rating of the business, out of 5.", + "example": 5, + "type": "number" + }, + "trust_score": { + "description": "Trustpilot TrustScore of the business, as a decimal number.", + "example": 4.8, + "type": "number" + }, + "trustpilot_url": { + "description": "URL of the business profile on Trustpilot.", + "example": "https://www.trustpilot.com/review/www.houzeo.com", + "type": "string" + }, + "website_url": { + "description": "Website address of the business.", + "example": "https://www.houzeo.com", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.CategoryBusinessLocation": { + "properties": { + "address": { + "description": "Street address of the business.", + "type": "string" + }, + "city": { + "description": "City of the business.", + "type": "string" + }, + "country": { + "description": "Country of the business.", + "type": "string" + }, + "zip_code": { + "description": "Postal code of the business.", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.CategoryBusinessTag": { + "properties": { + "category_id": { + "description": "Trustpilot category id, such as `software_company`.", + "example": "software_company", + "type": "string" + }, + "display_name": { + "description": "Display name of the category.", + "example": "Software Company", + "type": "string" + }, + "is_predicted": { + "description": "Whether Trustpilot predicted this category for the business.", + "example": false, + "type": "boolean" + }, + "is_primary": { + "description": "Whether this is the business's primary category.", + "example": true, + "type": "boolean" + } + }, + "type": "object" + }, + "trustpilot.CategoryGroup": { + "properties": { + "items": { + "description": "Categories that belong to this group.", + "items": { + "$ref": "#/definitions/trustpilot.CategoryLink" + }, + "type": "array" + }, + "name": { + "description": "Display name of the category group.", + "example": "Electronics & Technology", + "type": "string" + }, + "slug": { + "description": "Slug of the category group, such as `electronics_technology`.", + "example": "electronics_technology", + "type": "string" + }, + "url": { + "description": "URL of the category group page on Trustpilot.", + "example": "https://www.trustpilot.com/categories/electronics_technology", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.CategoryLink": { + "properties": { + "name": { + "description": "Display name of the category.", + "example": "Software Company", + "type": "string" + }, + "slug": { + "description": "Category slug. Use it with the category endpoint.", + "example": "software_company", + "type": "string" + }, + "url": { + "description": "URL of the category page on Trustpilot.", + "example": "https://www.trustpilot.com/categories/software_company", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.CategoryPagination": { + "properties": { + "has_next_page": { + "description": "Whether another page of businesses follows this one.", + "example": true, + "type": "boolean" + }, + "next_page": { + "description": "Number of the next page. Omitted on the last page.", + "example": 3, + "type": "integer" + }, + "page": { + "description": "Page number returned.", + "example": 2, + "type": "integer" + }, + "per_page": { + "description": "Number of businesses per page.", + "example": 20, + "type": "integer" + }, + "total_hits": { + "description": "Total number of businesses in the category.", + "example": 7963, + "type": "integer" + }, + "total_pages": { + "description": "Total number of pages in the category.", + "example": 399, + "type": "integer" + } + }, + "type": "object" + }, + "trustpilot.CategoryResponse": { + "properties": { + "breadcrumbs": { + "description": "Parent categories leading to this category.", + "items": { + "$ref": "#/definitions/trustpilot.CategoryLink" + }, + "type": "array" + }, + "country": { + "description": "Country the listing is filtered to, as Trustpilot reports it.", + "example": "US", + "type": "string" + }, + "items": { + "description": "Businesses listed on this page of the category.", + "items": { + "$ref": "#/definitions/trustpilot.CategoryBusiness" + }, + "type": "array" + }, + "name": { + "description": "Display name of the category.", + "example": "Software Company", + "type": "string" + }, + "newest_companies": { + "description": "Businesses recently added to the category.", + "items": { + "$ref": "#/definitions/trustpilot.CategoryBusiness" + }, + "type": "array" + }, + "page": { + "description": "Page number returned.", + "example": 2, + "type": "integer" + }, + "pagination": { + "allOf": [ + { + "$ref": "#/definitions/trustpilot.CategoryPagination" + } + ], + "description": "Paging details for the category listing." + }, + "recently_reviewed_companies": { + "description": "Businesses in the category that were reviewed recently.", + "items": { + "$ref": "#/definitions/trustpilot.CategoryBusiness" + }, + "type": "array" + }, + "related_categories": { + "description": "Categories related to this one.", + "items": { + "$ref": "#/definitions/trustpilot.CategoryLink" + }, + "type": "array" + }, + "slug": { + "description": "Category slug, such as `software_company`.", + "example": "software_company", + "type": "string" + }, + "sort": { + "description": "Sort order of the listing, as Trustpilot reports it, such as `recommended`.", + "example": "recommended", + "type": "string" + }, + "trustpilot_url": { + "description": "URL of the category page on Trustpilot.", + "example": "https://www.trustpilot.com/categories/software_company", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.CategorySearchResponse": { + "properties": { + "categories": { + "description": "Categories matching the query.", + "items": { + "$ref": "#/definitions/trustpilot.CategorySearchResult" + }, + "type": "array" + }, + "country": { + "description": "Two-letter country code the search was run for.", + "example": "US", + "type": "string" + }, + "locale": { + "description": "Locale the search was run for, such as `en-US`.", + "example": "en-US", + "type": "string" + }, + "query": { + "description": "Query that was run.", + "example": "openai", + "type": "string" + }, + "size": { + "description": "Maximum number of categories requested.", + "example": 3, + "type": "integer" + } + }, + "type": "object" + }, + "trustpilot.CategorySearchResult": { + "properties": { + "category_id": { + "description": "Trustpilot category id, such as `software_company`.", + "example": "software_company", + "type": "string" + }, + "display_name": { + "description": "Display name of the category.", + "example": "Software Company", + "type": "string" + }, + "top_level_category_id": { + "description": "Id of the top-level category group the category belongs to.", + "example": "electronics_technology", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.RelatedBusiness": { + "properties": { + "business_unit_id": { + "description": "Trustpilot id of the related business.", + "example": "63e1530f2ba9106ee583e099", + "type": "string" + }, + "display_name": { + "description": "Display name of the related business.", + "example": "Chatgpt", + "type": "string" + }, + "identifying_name": { + "description": "Slug of the related business, usually its website domain. Use it with the business endpoint.", + "example": "chatgpt.com", + "type": "string" + }, + "logo_url": { + "description": "URL of the related business's logo.", + "example": "https://s3-eu-west-1.amazonaws.com/tpd/screenshots/example/198x149.png", + "type": "string" + }, + "review_count": { + "description": "Total number of reviews the related business has.", + "example": 2720, + "type": "integer" + }, + "source": { + "description": "Section of the profile page the business came from: `suggested_companies` or `also_viewed`.", + "example": "suggested_companies", + "type": "string" + }, + "stars": { + "description": "Star rating of the related business, out of 5.", + "example": 1.5, + "type": "number" + }, + "trust_score": { + "description": "Trustpilot TrustScore of the related business, as a decimal number.", + "example": 1.6, + "type": "number" + }, + "trustpilot_url": { + "description": "URL of the related business's profile on Trustpilot.", + "example": "https://www.trustpilot.com/review/chatgpt.com", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.SearchAddress": { + "properties": { + "approximate_area": { + "allOf": [ + { + "$ref": "#/definitions/trustpilot.SearchAreaBounds" + } + ], + "description": "Bounding box of the approximate area the address falls in." + }, + "city": { + "description": "City of the business.", + "example": "San Francisco", + "type": "string" + }, + "coordinates": { + "allOf": [ + { + "$ref": "#/definitions/trustpilot.SearchCoordinates" + } + ], + "description": "Latitude and longitude of the business." + }, + "country": { + "description": "Country name of the business.", + "example": "United States", + "type": "string" + }, + "country_code": { + "description": "Country code of the business, such as `US`.", + "example": "US", + "type": "string" + }, + "postcode": { + "description": "Postal code of the business.", + "example": "94105", + "type": "string" + }, + "street": { + "description": "Street address of the business.", + "example": "1 Market St", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.SearchAreaBounds": { + "properties": { + "north_west": { + "allOf": [ + { + "$ref": "#/definitions/trustpilot.SearchCoordinates" + } + ], + "description": "North-west corner of the area." + }, + "south_east": { + "allOf": [ + { + "$ref": "#/definitions/trustpilot.SearchCoordinates" + } + ], + "description": "South-east corner of the area." + } + }, + "type": "object" + }, + "trustpilot.SearchCategory": { + "properties": { + "id": { + "description": "Trustpilot category id, such as `software_company`.", + "example": "software_company", + "type": "string" + }, + "name": { + "description": "Display name of the category.", + "example": "Software Company", + "type": "string" + }, + "primary": { + "description": "Whether this is the business's primary category.", + "example": true, + "type": "boolean" + } + }, + "type": "object" + }, + "trustpilot.SearchCoordinates": { + "properties": { + "lat": { + "description": "Latitude in decimal degrees.", + "example": 39.7837304, + "type": "number" + }, + "lon": { + "description": "Longitude in decimal degrees.", + "example": -100.445882, + "type": "number" + } + }, + "type": "object" + }, + "trustpilot.SearchResponse": { + "properties": { + "country": { + "description": "Two-letter country code the search was run for.", + "example": "US", + "type": "string" + }, + "items": { + "description": "Businesses matching the query on this page.", + "items": { + "$ref": "#/definitions/trustpilot.SearchResult" + }, + "type": "array" + }, + "page": { + "description": "Page number returned.", + "example": 1, + "type": "integer" + }, + "page_size": { + "description": "Number of results per page.", + "example": 5, + "type": "integer" + }, + "query": { + "description": "Query that was run.", + "example": "openai", + "type": "string" + }, + "search_mode": { + "description": "How Trustpilot matched the query, such as `keyword`.", + "example": "keyword", + "type": "string" + }, + "total_hits": { + "description": "Total number of businesses matching the query.", + "example": 147, + "type": "integer" + }, + "total_pages": { + "description": "Total number of result pages.", + "example": 30, + "type": "integer" + } + }, + "type": "object" + }, + "trustpilot.SearchResult": { + "properties": { + "address": { + "allOf": [ + { + "$ref": "#/definitions/trustpilot.SearchAddress" + } + ], + "description": "Address of the business. Omitted when Trustpilot lists none." + }, + "business_unit_id": { + "description": "Trustpilot id of the business.", + "example": "630f21bc9f08b0302a52590d", + "type": "string" + }, + "categories": { + "description": "Categories the business is listed under.", + "items": { + "$ref": "#/definitions/trustpilot.SearchCategory" + }, + "type": "array" + }, + "country_code": { + "description": "Country code of the business, such as `FR`.", + "example": "FR", + "type": "string" + }, + "display_name": { + "description": "Display name of the business on Trustpilot.", + "example": "OpenAI", + "type": "string" + }, + "email": { + "description": "Contact email address of the business.", + "example": "hello@example.com", + "type": "string" + }, + "identifying_name": { + "description": "Business slug used in the Trustpilot profile URL, usually the website domain. Use it with the business endpoint.", + "example": "openai.com", + "type": "string" + }, + "logo_url": { + "description": "URL of the business's logo.", + "example": "https://s3-eu-west-1.amazonaws.com/tpd/logos/example/0x0.png", + "type": "string" + }, + "phone": { + "description": "Contact phone number of the business.", + "example": "+1-555-555-5555", + "type": "string" + }, + "predicted_top_category": { + "allOf": [ + { + "$ref": "#/definitions/trustpilot.SearchCategory" + } + ], + "description": "Category Trustpilot predicts as the business's top category." + }, + "review_count": { + "description": "Total number of reviews the business has on Trustpilot.", + "example": 984, + "type": "integer" + }, + "stars": { + "description": "Star rating of the business, out of 5.", + "example": 1.5, + "type": "number" + }, + "trust_score": { + "description": "Trustpilot TrustScore of the business, as a decimal number.", + "example": 1.3, + "type": "number" + }, + "trustpilot_url": { + "description": "URL of the business profile on Trustpilot.", + "example": "https://www.trustpilot.com/review/openai.com", + "type": "string" + }, + "verified": { + "description": "Whether Trustpilot marks the business as verified.", + "example": false, + "type": "boolean" + }, + "website_url": { + "description": "Website address of the business.", + "example": "https://openai.com", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.businessHeader": { + "properties": { + "claimed": { + "description": "Whether the business has claimed its Trustpilot profile.", + "example": false, + "type": "boolean" + }, + "name": { + "description": "Display name of the business on Trustpilot.", + "example": "OpenAI", + "type": "string" + }, + "rating": { + "description": "Star rating shown on the business profile, out of 5.", + "example": 1.5, + "type": "number" + }, + "review_count": { + "description": "Total number of reviews the business has on Trustpilot.", + "example": 984, + "type": "integer" + }, + "slug": { + "description": "Business slug used in the Trustpilot profile URL, usually the website domain.", + "example": "openai.com", + "type": "string" + }, + "trust_score": { + "description": "Trustpilot TrustScore of the business, as a decimal number.", + "example": 1.3, + "type": "number" + }, + "trustpilot_url": { + "description": "URL of the business profile on Trustpilot.", + "example": "https://www.trustpilot.com/review/openai.com", + "type": "string" + }, + "website_url": { + "description": "Website address of the business.", + "example": "https://openai.com", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.businessProfileResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/trustpilot.BusinessResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.businessRelatedResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/trustpilot.BusinessRelatedResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.businessReviewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/trustpilot.BusinessReviewsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.businessSearchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/trustpilot.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.categoriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/trustpilot.CategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.categoryResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/trustpilot.CategoryResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "trustpilot.categorySearchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/trustpilot.CategorySearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "twitch.ChannelGame": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "example": "League of Legends", + "type": "string" + }, + "slug": { + "example": "league-of-legends", + "type": "string" + } + }, + "type": "object" + }, + "twitch.ChannelResponse": { + "properties": { + "id": { + "type": "string" + }, + "is_live": { + "example": true, + "type": "boolean" + }, + "is_partner": { + "example": true, + "type": "boolean" + }, + "last_broadcast_title": { + "type": "string" + }, + "login": { + "type": "string" + }, + "primary_color_hex": { + "example": "8205B3", + "type": "string" + }, + "primary_team": { + "$ref": "#/definitions/twitch.ChannelTeam" + }, + "profile_image_url": { + "type": "string" + }, + "stream": { + "$ref": "#/definitions/twitch.ChannelStream" + } + }, + "type": "object" + }, + "twitch.ChannelStream": { + "properties": { + "game": { + "$ref": "#/definitions/twitch.ChannelGame" + }, + "id": { + "type": "string" + }, + "started_at": { + "example": "2026-08-14T07:18:46Z", + "type": "string" + } + }, + "type": "object" + }, + "twitch.ChannelTeam": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "example": "yumetalent", + "type": "string" + } + }, + "type": "object" + }, + "twitch.Clip": { + "properties": { + "created_at": { + "example": "2026-08-07T10:59:22Z", + "type": "string" + }, + "curator": { + "$ref": "#/definitions/twitch.ClipCurator" + }, + "duration_seconds": { + "example": 42, + "type": "number" + }, + "game": { + "$ref": "#/definitions/twitch.ClipGame" + }, + "id": { + "type": "string" + }, + "thumbnail_url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + }, + "view_count": { + "example": 5370, + "type": "integer" + } + }, + "type": "object" + }, + "twitch.ClipCurator": { + "properties": { + "display_name": { + "type": "string" + }, + "id": { + "type": "string" + }, + "login": { + "type": "string" + } + }, + "type": "object" + }, + "twitch.ClipGame": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "example": "League of Legends", + "type": "string" + }, + "slug": { + "example": "league-of-legends", + "type": "string" + } + }, + "type": "object" + }, + "twitch.ClipsResponse": { + "properties": { + "clips": { + "items": { + "$ref": "#/definitions/twitch.Clip" + }, + "type": "array" + }, + "count": { + "example": 20, + "type": "integer" + }, + "login": { + "type": "string" + } + }, + "type": "object" + }, + "twitch.ScheduleCategory": { + "properties": { + "box_art_url": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "example": "League of Legends", + "type": "string" + }, + "slug": { + "example": "league-of-legends", + "type": "string" + } + }, + "type": "object" + }, + "twitch.ScheduleResponse": { + "properties": { + "channel": { + "type": "string" + }, + "count": { + "example": 5, + "type": "integer" + }, + "next_segment_at": { + "example": "2026-08-15T12:00:00Z", + "type": "string" + }, + "next_segment_id": { + "type": "string" + }, + "segments": { + "items": { + "$ref": "#/definitions/twitch.ScheduleSegment" + }, + "type": "array" + } + }, + "type": "object" + }, + "twitch.ScheduleSegment": { + "properties": { + "cancelled_until": { + "type": "string" + }, + "categories": { + "items": { + "$ref": "#/definitions/twitch.ScheduleCategory" + }, + "type": "array" + }, + "end_at": { + "example": "2026-08-15T19:00:00Z", + "type": "string" + }, + "id": { + "type": "string" + }, + "is_cancelled": { + "example": false, + "type": "boolean" + }, + "start_at": { + "example": "2026-08-15T12:00:00Z", + "type": "string" + }, + "title": { + "example": "LEC", + "type": "string" + } + }, + "type": "object" + }, + "twitch.SearchCategory": { + "properties": { + "box_art_url": { + "type": "string" + }, + "id": { + "type": "string" + }, + "slug": { + "example": "valorant", + "type": "string" + } + }, + "type": "object" + }, + "twitch.SearchChannel": { + "properties": { + "game_name": { + "type": "string" + }, + "id": { + "type": "string" + }, + "is_live": { + "example": true, + "type": "boolean" + }, + "is_verified": { + "type": "boolean" + }, + "login": { + "type": "string" + }, + "profile_image_url": { + "type": "string" + }, + "stream_title": { + "type": "string" + }, + "viewers_count": { + "example": 3361, + "type": "integer" + } + }, + "type": "object" + }, + "twitch.SearchResponse": { + "properties": { + "count": { + "example": 10, + "type": "integer" + }, + "query": { + "type": "string" + }, + "results": { + "items": { + "$ref": "#/definitions/twitch.SearchResult" + }, + "type": "array" + } + }, + "type": "object" + }, + "twitch.SearchResult": { + "properties": { + "category": { + "$ref": "#/definitions/twitch.SearchCategory" + }, + "channel": { + "$ref": "#/definitions/twitch.SearchChannel" + }, + "text": { + "type": "string" + }, + "type": { + "description": "\"category\" or \"channel\"", + "example": "channel", + "type": "string" + } + }, + "type": "object" + }, + "twitch.Stream": { + "properties": { + "broadcaster": { + "$ref": "#/definitions/twitch.StreamBroadcaster" + }, + "id": { + "type": "string" + }, + "preview_image_url": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "viewers_count": { + "example": 56596, + "type": "integer" + } + }, + "type": "object" + }, + "twitch.StreamBroadcaster": { + "properties": { + "display_name": { + "type": "string" + }, + "id": { + "type": "string" + }, + "is_partner": { + "example": true, + "type": "boolean" + }, + "login": { + "type": "string" + } + }, + "type": "object" + }, + "twitch.StreamsResponse": { + "properties": { + "count": { + "example": 20, + "type": "integer" + }, + "game": { + "type": "string" + }, + "streams": { + "items": { + "$ref": "#/definitions/twitch.Stream" + }, + "type": "array" + } + }, + "type": "object" + }, + "twitch.TeamMember": { + "properties": { + "display_name": { + "type": "string" + }, + "id": { + "type": "string" + }, + "is_live": { + "example": true, + "type": "boolean" + }, + "login": { + "type": "string" + }, + "profile_image_url": { + "type": "string" + }, + "viewers_count": { + "example": 38251, + "type": "integer" + } + }, + "type": "object" + }, + "twitch.TeamResponse": { + "properties": { + "banner_url": { + "type": "string" + }, + "description": { + "type": "string" + }, + "display_name": { + "example": "Yume Talent", + "type": "string" + }, + "id": { + "type": "string" + }, + "logo_url": { + "type": "string" + }, + "member_count": { + "example": 5, + "type": "integer" + }, + "members": { + "items": { + "$ref": "#/definitions/twitch.TeamMember" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "owner_login": { + "type": "string" + } + }, + "type": "object" + }, + "twitch.TopGame": { + "properties": { + "box_art_url": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "example": "Dota 2", + "type": "string" + }, + "slug": { + "example": "dota-2", + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "viewers_count": { + "example": 390201, + "type": "integer" + } + }, + "type": "object" + }, + "twitch.TopGamesResponse": { + "properties": { + "count": { + "example": 20, + "type": "integer" + }, + "games": { + "items": { + "$ref": "#/definitions/twitch.TopGame" + }, + "type": "array" + } + }, + "type": "object" + }, + "twitch.Video": { + "properties": { + "game": { + "$ref": "#/definitions/twitch.ClipGame" + }, + "id": { + "type": "string" + }, + "length_seconds": { + "example": 20818, + "type": "integer" + }, + "owner": { + "$ref": "#/definitions/twitch.VideoOwner" + }, + "published_at": { + "example": "2022-04-02T07:10:16Z", + "type": "string" + }, + "thumbnail_url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "view_count": { + "example": 2800795, + "type": "integer" + } + }, + "type": "object" + }, + "twitch.VideoOwner": { + "properties": { + "display_name": { + "type": "string" + }, + "id": { + "type": "string" + }, + "is_partner": { + "example": true, + "type": "boolean" + }, + "login": { + "type": "string" + } + }, + "type": "object" + }, + "twitch.VideosResponse": { + "properties": { + "count": { + "example": 20, + "type": "integer" + }, + "login": { + "type": "string" + }, + "videos": { + "items": { + "$ref": "#/definitions/twitch.Video" + }, + "type": "array" + } + }, + "type": "object" + }, + "twitch.VodComment": { + "properties": { + "badges": { + "items": { + "type": "string" + }, + "type": "array" + }, + "commenter": { + "$ref": "#/definitions/twitch.VodCommentCommenter" + }, + "created_at": { + "example": "2026-08-14T07:20:39Z", + "type": "string" + }, + "fragments": { + "items": { + "$ref": "#/definitions/twitch.VodCommentFragment" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "message": { + "type": "string" + }, + "offset_seconds": { + "example": 113, + "type": "integer" + }, + "user_color": { + "example": "#0000FF", + "type": "string" + } + }, + "type": "object" + }, + "twitch.VodCommentCommenter": { + "properties": { + "display_name": { + "type": "string" + }, + "id": { + "type": "string" + }, + "login": { + "type": "string" + } + }, + "type": "object" + }, + "twitch.VodCommentFragment": { + "properties": { + "emote_id": { + "type": "string" + }, + "text": { + "type": "string" + } + }, + "type": "object" + }, + "twitch.VodCommentsResponse": { + "properties": { + "comments": { + "items": { + "$ref": "#/definitions/twitch.VodComment" + }, + "type": "array" + }, + "count": { + "example": 55, + "type": "integer" + }, + "has_more": { + "example": true, + "type": "boolean" + }, + "next_offset_seconds": { + "example": 140, + "type": "integer" + }, + "offset_seconds": { + "example": 0, + "type": "integer" + }, + "video_id": { + "type": "string" + } + }, + "type": "object" + }, + "twitch.channelResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/twitch.ChannelResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "twitch.clipsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/twitch.ClipsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "twitch.scheduleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/twitch.ScheduleResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "twitch.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/twitch.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "twitch.streamsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/twitch.StreamsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "twitch.teamResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/twitch.TeamResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "twitch.topGamesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/twitch.TopGamesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "twitch.videosResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/twitch.VideosResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "twitch.vodCommentsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/twitch.VodCommentsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "ubereats.Address": { + "properties": { + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "postalCode": { + "type": "string" + }, + "region": { + "type": "string" + }, + "street": { + "type": "string" + } + }, + "type": "object" + }, + "ubereats.MenuItem": { + "properties": { + "description": { + "type": "string" + }, + "imageUrl": { + "type": "string" + }, + "isSoldOut": { + "type": "boolean" + }, + "price": { + "type": "number" + }, + "title": { + "type": "string" + }, + "uuid": { + "type": "string" + } + }, + "type": "object" + }, + "ubereats.MenuResponse": { + "properties": { + "currencyCode": { + "type": "string" + }, + "sections": { + "items": { + "$ref": "#/definitions/ubereats.MenuSection" + }, + "type": "array" + }, + "storeTitle": { + "type": "string" + }, + "storeUuid": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "ubereats.MenuSection": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/ubereats.MenuItem" + }, + "type": "array" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "ubereats.Restaurant": { + "properties": { + "cuisineTags": { + "description": "Cuisine labels shown on the restaurant card.", + "items": { + "type": "string" + }, + "type": "array" + }, + "currencyCode": { + "description": "Currency code used for the restaurant's prices, such as `USD`.", + "type": "string" + }, + "deliveryEtaText": { + "description": "Estimated delivery time as shown on the card, such as `21 min`.", + "type": "string" + }, + "imageUrl": { + "description": "URL of the restaurant's card image.", + "type": "string" + }, + "isSponsored": { + "description": "Whether Uber Eats shows the restaurant as a sponsored listing.", + "type": "boolean" + }, + "latitude": { + "description": "Latitude of the restaurant, in decimal degrees.", + "type": "number" + }, + "longitude": { + "description": "Longitude of the restaurant, in decimal degrees.", + "type": "number" + }, + "name": { + "description": "Restaurant name as shown on the feed card.", + "type": "string" + }, + "rating": { + "description": "Average customer rating of the restaurant.", + "type": "number" + }, + "reviewCount": { + "description": "Number of customer reviews the restaurant has.", + "type": "integer" + }, + "slug": { + "description": "URL slug of the restaurant's Uber Eats page.", + "type": "string" + }, + "storeUuid": { + "description": "Uber Eats store UUID. Use it with the store endpoints.", + "type": "string" + }, + "url": { + "description": "URL of the restaurant's page on Uber Eats.", + "type": "string" + } + }, + "type": "object" + }, + "ubereats.Review": { + "properties": { + "createdAt": { + "description": "Time the review was created, in ISO 8601 format.", + "type": "string" + }, + "eaterName": { + "description": "Reviewer's display name as Uber Eats shows it, such as `Jamie L.`.", + "type": "string" + }, + "formattedDate": { + "description": "Review date as Uber Eats displays it, such as `01/01/26`.", + "type": "string" + }, + "text": { + "description": "Full text of the review.", + "type": "string" + }, + "timeSinceReview": { + "description": "How long ago the review was posted, as text such as `2 months ago`.", + "type": "string" + } + }, + "type": "object" + }, + "ubereats.SearchResponse": { + "properties": { + "cityName": { + "description": "Name of the city feed that was returned, such as `san_francisco`. Set for location feeds only.", + "type": "string" + }, + "cursor": { + "description": "Cursor to pass in the next keyword search request to get more results.", + "type": "string" + }, + "hasMore": { + "description": "Whether more restaurants are available beyond this response.", + "type": "boolean" + }, + "offset": { + "description": "Offset of the first restaurant returned.", + "type": "integer" + }, + "restaurants": { + "description": "Restaurants matching the search, or found in the location feed.", + "items": { + "$ref": "#/definitions/ubereats.Restaurant" + }, + "type": "array" + } + }, + "type": "object" + }, + "ubereats.StoreDetail": { + "properties": { + "address": { + "$ref": "#/definitions/ubereats.Address" + }, + "cuisineTags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "currencyCode": { + "type": "string" + }, + "heroImageUrl": { + "type": "string" + }, + "isOpen": { + "type": "boolean" + }, + "isOrderable": { + "type": "boolean" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "menu": { + "items": { + "$ref": "#/definitions/ubereats.MenuSection" + }, + "type": "array" + }, + "phoneNumber": { + "type": "string" + }, + "priceBucket": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "reviewCount": { + "type": "integer" + }, + "slug": { + "type": "string" + }, + "storeUuid": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + }, + "workingHoursTagline": { + "type": "string" + } + }, + "type": "object" + }, + "ubereats.StoreReviewsResponse": { + "properties": { + "rating": { + "description": "Average customer rating of the store.", + "type": "number" + }, + "reviewCount": { + "description": "Total number of reviews the store has.", + "type": "integer" + }, + "reviews": { + "description": "Sample of recent reviews shown on the store page.", + "items": { + "$ref": "#/definitions/ubereats.Review" + }, + "type": "array" + }, + "storeUuid": { + "description": "Uber Eats store UUID that was requested.", + "type": "string" + } + }, + "type": "object" + }, + "ubereats.feedResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/ubereats.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "ubereats.menuResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/ubereats.MenuResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "ubereats.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/ubereats.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "ubereats.storeResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/ubereats.StoreDetail" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "ubereats.storeReviewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/ubereats.StoreReviewsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "ulta.Answer": { + "properties": { + "author": { + "description": "Display name of the answer's author.", + "type": "string" + }, + "created_at": { + "description": "Time the answer was posted, in UTC (RFC 3339).", + "type": "string" + }, + "helpful_votes": { + "description": "Number of shoppers who marked the answer helpful.", + "type": "integer" + }, + "id": { + "description": "Ulta answer id.", + "type": "string" + }, + "is_expert": { + "description": "Whether the answer comes from a brand representative rather than a fellow customer.", + "type": "boolean" + }, + "not_helpful_votes": { + "description": "Number of shoppers who marked the answer not helpful.", + "type": "integer" + }, + "text": { + "description": "Text of the answer.", + "type": "string" + } + }, + "type": "object" + }, + "ulta.CategoriesResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/ulta.CategoryEntry" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "ulta.CategoryEntry": { + "properties": { + "department": { + "example": "makeup-nails", + "type": "string" + }, + "group": { + "example": "Eyes", + "type": "string" + }, + "name": { + "example": "Mascara", + "type": "string" + }, + "url": { + "example": "https://www.ulta.com/shop/makeup/eyes/mascara", + "type": "string" + } + }, + "type": "object" + }, + "ulta.CategoryFacet": { + "properties": { + "label": { + "type": "string" + }, + "selected": { + "type": "boolean" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "ulta.CategoryResponse": { + "properties": { + "category": { + "type": "string" + }, + "count": { + "type": "integer" + }, + "facets": { + "description": "Facets is the category's own guided-navigation refinement options,\nread from the same response this package already fetches -- no\nseparate upstream call needed. Confirmed live 2026-08-11 present and\nnon-empty (46 options on an unfiltered category, 17 on a filtered\none) on every case tried (unfiltered, filtered, and page 2), so this\nfield is populated whenever the upstream returns it, nil otherwise.\nUlta's own guidedNavigation does not carry a live per-option result\ncount (unlike this repo's Nike/Zappos facet shapes), so CategoryFacet\nhas no result-count field.", + "items": { + "$ref": "#/definitions/ulta.CategoryFacet" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "filter": { + "type": "string" + }, + "has_more": { + "type": "boolean" + }, + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "products": { + "items": { + "$ref": "#/definitions/ulta.ProductSummary" + }, + "type": "array" + }, + "result_count": { + "type": "integer" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "ulta.ProductDetailResponse": { + "properties": { + "brand_name": { + "type": "string" + }, + "category": { + "items": { + "type": "string" + }, + "type": "array" + }, + "currency_code": { + "type": "string" + }, + "description": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "list_price": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "product_name": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "review_count": { + "type": "integer" + }, + "sale_price": { + "type": "string" + }, + "sku_id": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "unavailable": { + "type": "boolean" + }, + "url": { + "type": "string" + }, + "variants": { + "items": { + "$ref": "#/definitions/ulta.ProductVariant" + }, + "type": "array" + } + }, + "type": "object" + }, + "ulta.ProductQuestionsResponse": { + "properties": { + "count": { + "description": "Number of questions returned on this page.", + "type": "integer" + }, + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "type": "string" + }, + "page": { + "description": "Page number returned, starting at 1.", + "type": "integer" + }, + "page_size": { + "description": "Number of questions per page.", + "type": "integer" + }, + "product_id": { + "description": "Ulta product id that was requested.", + "type": "string" + }, + "questions": { + "description": "Customer questions on this page, each with its answers.", + "items": { + "$ref": "#/definitions/ulta.Question" + }, + "type": "array" + }, + "source_url": { + "description": "URL the data was read from.", + "type": "string" + }, + "total_pages": { + "description": "Total number of question pages for the product.", + "type": "integer" + }, + "total_questions": { + "description": "Total number of questions for the product.", + "type": "integer" + } + }, + "type": "object" + }, + "ulta.ProductReviewsResponse": { + "properties": { + "average_rating": { + "type": "number" + }, + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "product_id": { + "type": "string" + }, + "rating_count": { + "description": "RatingCount, AverageRating, RecommendedRatio, and RatingHistogram are\nthe product's site-wide aggregate rating summary, not just this page --\nabsent (zero-valued) for a product with no reviews yet.", + "type": "integer" + }, + "rating_histogram": { + "description": "RatingHistogram is the count of ratings per star, ascending: index 0\nis 1-star, index 4 is 5-star.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "recommended_ratio": { + "type": "number" + }, + "reviews": { + "items": { + "$ref": "#/definitions/ulta.Review" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "total_pages": { + "type": "integer" + }, + "total_reviews": { + "type": "integer" + } + }, + "type": "object" + }, + "ulta.ProductSummary": { + "properties": { + "brand_name": { + "type": "string" + }, + "discount": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "is_limited_stock": { + "type": "boolean" + }, + "list_price": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "product_name": { + "type": "string" + }, + "promo_text": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "review_count": { + "type": "integer" + }, + "sale_price": { + "type": "string" + }, + "sku_id": { + "type": "string" + }, + "sponsored": { + "type": "boolean" + }, + "url": { + "type": "string" + }, + "variant_label": { + "type": "string" + } + }, + "type": "object" + }, + "ulta.ProductVariant": { + "properties": { + "name": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "sku_id": { + "type": "string" + } + }, + "type": "object" + }, + "ulta.Question": { + "properties": { + "answer_count": { + "description": "Number of answers the question received.", + "type": "integer" + }, + "answers": { + "description": "Answers the question received.", + "items": { + "$ref": "#/definitions/ulta.Answer" + }, + "type": "array" + }, + "author": { + "description": "Display name of the customer who asked the question.", + "type": "string" + }, + "created_at": { + "description": "Time the question was posted, in UTC (RFC 3339).", + "type": "string" + }, + "id": { + "description": "Ulta question id.", + "type": "string" + }, + "location": { + "description": "Location the asker gave, such as `fl`.", + "type": "string" + }, + "text": { + "description": "Text of the question.", + "type": "string" + } + }, + "type": "object" + }, + "ulta.Review": { + "properties": { + "author": { + "type": "string" + }, + "body": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "headline": { + "type": "string" + }, + "helpful_votes": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "location": { + "type": "string" + }, + "not_helpful_votes": { + "type": "integer" + }, + "rating": { + "type": "integer" + }, + "updated_at": { + "type": "string" + }, + "verified_purchase": { + "type": "boolean" + } + }, + "type": "object" + }, + "ulta.SearchResponse": { + "properties": { + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "has_more": { + "type": "boolean" + }, + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "products": { + "items": { + "$ref": "#/definitions/ulta.ProductSummary" + }, + "type": "array" + }, + "query": { + "type": "string" + }, + "result_count": { + "type": "integer" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "ulta.Store": { + "properties": { + "address": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "hours": { + "additionalProperties": { + "type": "string" + }, + "description": "Hours maps a three-letter day abbreviation (\"Mon\"..\"Sun\") to that\nday's opening range(s), e.g. \"09:00-21:00\" -- joined with \", \" for\nthe rare split-hours day (the upstream's own hoursOfOperation\nshape supports more than one range per day).", + "type": "object" + }, + "id": { + "type": "integer" + }, + "is_permanently_closed": { + "type": "boolean" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "name": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "services": { + "items": { + "type": "string" + }, + "type": "array" + }, + "slug": { + "type": "string" + }, + "state": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "ulta.StoreResponse": { + "properties": { + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "lat": { + "type": "number" + }, + "lng": { + "type": "number" + }, + "radius_meters": { + "type": "integer" + }, + "search": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "stores": { + "items": { + "$ref": "#/definitions/ulta.Store" + }, + "type": "array" + } + }, + "type": "object" + }, + "ulta.SuggestProduct": { + "properties": { + "brand_name": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "product_name": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "ulta.SuggestResponse": { + "properties": { + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "first_top_result": { + "items": { + "$ref": "#/definitions/ulta.SuggestProduct" + }, + "type": "array" + }, + "query": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "suggestions": { + "items": { + "$ref": "#/definitions/ulta.Suggestion" + }, + "type": "array" + } + }, + "type": "object" + }, + "ulta.Suggestion": { + "properties": { + "label": { + "type": "string" + }, + "top_results": { + "items": { + "$ref": "#/definitions/ulta.SuggestProduct" + }, + "type": "array" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "ulta.categoriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/ulta.CategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "ulta.categoryResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/ulta.CategoryResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "ulta.productDetailResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/ulta.ProductDetailResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "ulta.productQuestionsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/ulta.ProductQuestionsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "ulta.productReviewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/ulta.ProductReviewsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "ulta.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/ulta.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "ulta.storesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/ulta.StoreResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "ulta.suggestResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/ulta.SuggestResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "upwork.FreelancerFeedback": { + "properties": { + "client_name": { + "type": "string" + }, + "comment": { + "type": "string" + }, + "date": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "upwork.FreelancerResponse": { + "properties": { + "feedback": { + "items": { + "$ref": "#/definitions/upwork.FreelancerFeedback" + }, + "type": "array" + }, + "hourly_rate": { + "type": "string" + }, + "id": { + "type": "string" + }, + "job_success_score": { + "type": "integer" + }, + "local_time": { + "type": "string" + }, + "location": { + "type": "string" + }, + "name": { + "type": "string" + }, + "overview": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "review_count": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "total_hours": { + "type": "integer" + }, + "total_jobs": { + "type": "integer" + }, + "url": { + "type": "string" + }, + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "upwork.JobClient": { + "properties": { + "company_size": { + "description": "Size of the client's company, as Upwork shows it, such as `Small company (2-9 people)`.", + "type": "string" + }, + "country": { + "description": "Client's country, as Upwork shows it: either a short code such as `UKR` or the full country name.", + "type": "string" + }, + "hires": { + "description": "Client's hiring history, as text such as `32 hires, 1 active`.", + "type": "string" + }, + "industry": { + "description": "Industry of the client's company, as Upwork shows it.", + "type": "string" + }, + "location": { + "description": "City of the client, as Upwork shows it.", + "type": "string" + }, + "member_since": { + "description": "Date the client joined Upwork, as text such as `Aug 30, 2023`.", + "type": "string" + }, + "total_hours": { + "description": "Total hours shown for the client, as text such as `207 hours`.", + "type": "string" + }, + "total_spent": { + "description": "Total amount the client has spent on Upwork, as text such as `$9K total spent`.", + "type": "string" + } + }, + "type": "object" + }, + "upwork.JobResponse": { + "properties": { + "applicant_countries": { + "description": "Countries the client accepts applicants from.", + "items": { + "type": "string" + }, + "type": "array" + }, + "budget_type": { + "description": "Budget type of the job: `hourly` or `fixed`.", + "type": "string" + }, + "client": { + "allOf": [ + { + "$ref": "#/definitions/upwork.JobClient" + } + ], + "description": "Summary of the client who posted the job." + }, + "country": { + "description": "Country of the job's location, as a code such as `US`.", + "type": "string" + }, + "currency": { + "description": "Currency of the job budget, such as `USD`.", + "type": "string" + }, + "description": { + "description": "Full text of the job description.", + "type": "string" + }, + "duration": { + "description": "Expected length of the project, such as `1 to 3 months`.", + "type": "string" + }, + "employment_type": { + "description": "Employment types of the posting, such as `CONTRACTOR` or `TEMPORARY`.", + "items": { + "type": "string" + }, + "type": "array" + }, + "experience_level": { + "description": "Experience level the client asks for, such as `Expert`.", + "type": "string" + }, + "fixed_budget": { + "description": "Fixed price of the job, in `currency`. Set when `budget_type` is `fixed`.", + "type": "number" + }, + "hourly_max": { + "description": "Highest hourly rate offered, in `currency`. Set when `budget_type` is `hourly`.", + "type": "number" + }, + "hourly_min": { + "description": "Lowest hourly rate offered, in `currency`. Set when `budget_type` is `hourly`.", + "type": "number" + }, + "id": { + "description": "Upwork job id, as returned by the search endpoint.", + "type": "string" + }, + "location_type": { + "description": "Where the work is done, such as `TELECOMMUTE` for remote work.", + "type": "string" + }, + "posted_at": { + "description": "Time the job was posted, in ISO 8601.", + "type": "string" + }, + "project_type": { + "description": "Project type, such as `Ongoing project`.", + "type": "string" + }, + "proposals": { + "description": "Number of proposals the job has received, as text such as `50+`.", + "type": "string" + }, + "title": { + "description": "Title of the job posting.", + "type": "string" + }, + "url": { + "description": "Upwork URL of the job posting.", + "type": "string" + } + }, + "type": "object" + }, + "upwork.JobSummary": { + "properties": { + "budget_text": { + "type": "string" + }, + "budget_type": { + "description": "\"hourly\" or \"fixed\"", + "type": "string" + }, + "description": { + "type": "string" + }, + "duration": { + "type": "string" + }, + "experience_level": { + "type": "string" + }, + "id": { + "description": "ID is Upwork's own opaque job identifier (the digits after \"~\" in the\njob's URL), suitable for Service.Job.", + "type": "string" + }, + "posted_at": { + "type": "string" + }, + "skills": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "upwork.SearchResponse": { + "properties": { + "jobs": { + "items": { + "$ref": "#/definitions/upwork.JobSummary" + }, + "type": "array" + }, + "page": { + "type": "integer" + }, + "query": { + "type": "string" + } + }, + "type": "object" + }, + "upwork.freelancerResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/upwork.FreelancerResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "upwork.jobResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/upwork.JobResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "upwork.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/upwork.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "usage.usageBillingStateDoc": { + "properties": { + "allow_overage": { + "example": true, + "type": "boolean" + }, + "created_at": { + "example": "2026-04-01T00:00:00Z", + "type": "string" + }, + "credits_remaining": { + "example": 398750, + "type": "integer" + }, + "credits_used": { + "example": 1250, + "type": "integer" + }, + "currency": { + "example": "usd", + "type": "string" + }, + "daily_credit_limit": { + "example": 25000, + "type": "integer" + }, + "daily_credits_remaining": { + "example": 24100, + "type": "integer" + }, + "daily_credits_used": { + "example": 900, + "type": "integer" + }, + "daily_key": { + "example": "2026-04-22", + "type": "string" + }, + "expected_subscription_amount_cents": { + "example": 7900, + "type": "integer" + }, + "expected_total_amount_cents": { + "example": 7900, + "type": "integer" + }, + "hard_limit": { + "example": false, + "type": "boolean" + }, + "included_credits": { + "example": 400000, + "type": "integer" + }, + "overage_credits": { + "example": 0, + "type": "integer" + }, + "period_end": { + "example": "2026-05-01T00:00:00Z", + "type": "string" + }, + "period_key": { + "example": "2026-04", + "type": "string" + }, + "period_start": { + "example": "2026-04-01T00:00:00Z", + "type": "string" + }, + "plan": { + "example": "Pro", + "type": "string" + }, + "pricing_source": { + "example": "plan_default", + "type": "string" + }, + "subscription_price_cents": { + "example": 7900, + "type": "integer" + }, + "updated_at": { + "example": "2026-04-22T12:00:00Z", + "type": "string" + }, + "user_id": { + "example": "user-1", + "type": "string" + } + }, + "type": "object" + }, + "usage.usageEndpointItemDoc": { + "properties": { + "charged_requests": { + "example": 220, + "type": "integer" + }, + "credits": { + "example": 660, + "type": "integer" + }, + "endpoint": { + "example": "google/search", + "type": "string" + }, + "failed_requests": { + "example": 8, + "type": "integer" + }, + "non_billable_requests": { + "example": 12, + "type": "integer" + }, + "overage": { + "example": 0, + "type": "integer" + }, + "requests": { + "example": 240, + "type": "integer" + } + }, + "type": "object" + }, + "usage.usageEndpointsDoc": { + "properties": { + "from": { + "example": "2026-04-01T00:00:00Z", + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/usage.usageEndpointItemDoc" + }, + "type": "array" + }, + "range": { + "example": "period", + "type": "string" + }, + "to": { + "example": "2026-05-01T00:00:00Z", + "type": "string" + } + }, + "type": "object" + }, + "usage.usageEndpointsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/usage.usageEndpointsDoc" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "usage.usageOverviewDoc": { + "properties": { + "billing": { + "$ref": "#/definitions/usage.usageBillingStateDoc" + }, + "from": { + "example": "2026-04-01T00:00:00Z", + "type": "string" + }, + "range": { + "example": "period", + "type": "string" + }, + "requests": { + "$ref": "#/definitions/usage.usageRequestSummaryDoc" + }, + "to": { + "example": "2026-05-01T00:00:00Z", + "type": "string" + }, + "usage": { + "$ref": "#/definitions/usage.usageWindowSummaryDoc" + } + }, + "type": "object" + }, + "usage.usageOverviewResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/usage.usageOverviewDoc" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "usage.usagePlatformAdjacencyDoc": { + "properties": { + "generated_at": { + "example": "2026-09-06T02:00:00Z", + "type": "string" + }, + "platforms": { + "items": { + "$ref": "#/definitions/usage.usagePlatformAdjacencyItemDoc" + }, + "type": "array" + }, + "users": { + "example": 97, + "type": "integer" + }, + "window": { + "example": "lifetime", + "type": "string" + } + }, + "type": "object" + }, + "usage.usagePlatformAdjacencyItemDoc": { + "properties": { + "co_used": { + "items": { + "$ref": "#/definitions/usage.usagePlatformCoUseDoc" + }, + "type": "array" + }, + "platform": { + "example": "tiktok", + "type": "string" + }, + "requests": { + "example": 2410, + "type": "integer" + }, + "top_endpoints": { + "items": { + "$ref": "#/definitions/usage.usagePlatformEndpointTotalDoc" + }, + "type": "array" + }, + "users": { + "example": 9, + "type": "integer" + } + }, + "type": "object" + }, + "usage.usagePlatformAdjacencyResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/usage.usagePlatformAdjacencyDoc" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "usage.usagePlatformCoUseDoc": { + "properties": { + "platform": { + "example": "instagram", + "type": "string" + }, + "users": { + "example": 4, + "type": "integer" + } + }, + "type": "object" + }, + "usage.usagePlatformEndpointTotalDoc": { + "properties": { + "endpoint": { + "example": "tiktok/search", + "type": "string" + }, + "requests": { + "example": 1830, + "type": "integer" + } + }, + "type": "object" + }, + "usage.usageRecentIPItemDoc": { + "properties": { + "error_count": { + "example": 6, + "type": "integer" + }, + "ip": { + "example": "203.0.113.10", + "type": "string" + }, + "last_seen_at": { + "example": "2026-04-22T12:00:00Z", + "type": "string" + }, + "last_user_agent": { + "example": "Mozilla/5.0", + "type": "string" + }, + "request_count": { + "example": 90, + "type": "integer" + }, + "success_count": { + "example": 84, + "type": "integer" + } + }, + "type": "object" + }, + "usage.usageRecentIPsDoc": { + "properties": { + "from": { + "example": "2026-04-01T00:00:00Z", + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/usage.usageRecentIPItemDoc" + }, + "type": "array" + }, + "range": { + "example": "period", + "type": "string" + }, + "to": { + "example": "2026-05-01T00:00:00Z", + "type": "string" + } + }, + "type": "object" + }, + "usage.usageRecentIPsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/usage.usageRecentIPsDoc" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "usage.usageRequestSummaryDoc": { + "properties": { + "avg_latency_ms": { + "example": 824.5, + "type": "number" + }, + "distinct_ip_count": { + "example": 3, + "type": "integer" + }, + "error_requests": { + "example": 30, + "type": "integer" + }, + "last_request_at": { + "example": "2026-04-22T12:00:00Z", + "type": "string" + }, + "requests": { + "example": 420, + "type": "integer" + }, + "success_requests": { + "example": 390, + "type": "integer" + } + }, + "type": "object" + }, + "usage.usageTimeseriesDoc": { + "properties": { + "bucket": { + "example": "day", + "type": "string" + }, + "from": { + "example": "2026-04-01T00:00:00Z", + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/usage.usageTimeseriesItemDoc" + }, + "type": "array" + }, + "range": { + "example": "period", + "type": "string" + }, + "to": { + "example": "2026-05-01T00:00:00Z", + "type": "string" + } + }, + "type": "object" + }, + "usage.usageTimeseriesItemDoc": { + "properties": { + "bucket_end": { + "example": "2026-04-22T11:00:00Z", + "type": "string" + }, + "bucket_start": { + "example": "2026-04-22T10:00:00Z", + "type": "string" + }, + "charged_requests": { + "example": 28, + "type": "integer" + }, + "credits": { + "example": 84, + "type": "integer" + }, + "failed_requests": { + "example": 2, + "type": "integer" + }, + "non_billable_requests": { + "example": 2, + "type": "integer" + }, + "overage": { + "example": 0, + "type": "integer" + }, + "requests": { + "example": 32, + "type": "integer" + } + }, + "type": "object" + }, + "usage.usageTimeseriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/usage.usageTimeseriesDoc" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "usage.usageWindowSummaryDoc": { + "properties": { + "charged_requests": { + "example": 380, + "type": "integer" + }, + "credits": { + "example": 1140, + "type": "integer" + }, + "failed_requests": { + "example": 15, + "type": "integer" + }, + "non_billable_requests": { + "example": 25, + "type": "integer" + }, + "overage": { + "example": 0, + "type": "integer" + }, + "requests": { + "example": 420, + "type": "integer" + } + }, + "type": "object" + }, + "usatoday.ArticleResponse": { + "properties": { + "authors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "description": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "is_accessible_for_free": { + "type": "boolean" + }, + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "published_at": { + "type": "string" + }, + "section": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "usatoday.AuthorArticle": { + "properties": { + "description": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "published_label": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "usatoday.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/usatoday.AuthorArticle" + }, + "type": "array" + }, + "bio": { + "type": "string" + }, + "name": { + "type": "string" + }, + "profile_id": { + "type": "string" + }, + "social_accounts": { + "items": { + "$ref": "#/definitions/usatoday.AuthorSocialAccount" + }, + "type": "array" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "usatoday.AuthorSocialAccount": { + "properties": { + "platform": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "usatoday.HeadlineItem": { + "properties": { + "image_url": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "usatoday.HeadlinesResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/usatoday.HeadlineItem" + }, + "type": "array" + }, + "section": { + "type": "string" + } + }, + "type": "object" + }, + "usatoday.NewsResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/usatoday.HeadlineItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "usatoday.Section": { + "properties": { + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "usatoday.SectionsResponse": { + "properties": { + "sections": { + "items": { + "$ref": "#/definitions/usatoday.Section" + }, + "type": "array" + } + }, + "type": "object" + }, + "usatoday.articleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/usatoday.ArticleResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "usatoday.authorResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/usatoday.AuthorResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "usatoday.headlinesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/usatoday.HeadlinesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "usatoday.newsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/usatoday.NewsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "usatoday.sectionsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/usatoday.SectionsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "user.userAPIKeyItemDoc": { + "properties": { + "created_at": { + "example": "2026-04-22T12:00:00Z", + "type": "string" + }, + "expires_at": { + "example": "2026-04-23T12:00:00Z", + "type": "string" + }, + "id": { + "example": "2f8c3c7c4d8f4a4bb4bcb2d2f9e7f8f1", + "type": "string" + }, + "key_prefix": { + "example": "abcd1234", + "type": "string" + }, + "key_suffix": { + "example": "ef90", + "type": "string" + }, + "last_used_at": { + "example": "2026-04-22T11:58:00Z", + "type": "string" + }, + "last_used_ip": { + "example": "203.0.113.10", + "type": "string" + }, + "masked_key": { + "example": "abcd1234...ef90", + "type": "string" + }, + "rotated_at": { + "example": "2026-04-22T12:00:00Z", + "type": "string" + }, + "source": { + "example": "manual_rotate", + "type": "string" + }, + "status": { + "example": "active", + "type": "string" + }, + "updated_at": { + "example": "2026-04-22T12:00:00Z", + "type": "string" + } + }, + "type": "object" + }, + "user.userAPIKeysDoc": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/user.userAPIKeyItemDoc" + }, + "type": "array" + } + }, + "type": "object" + }, + "user.userAPIKeysResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/user.userAPIKeysDoc" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "user.userBrowserLanguageDoc": { + "properties": { + "updated": { + "example": true, + "type": "boolean" + } + }, + "type": "object" + }, + "user.userBrowserLanguageReq": { + "properties": { + "accept_language": { + "description": "AcceptLanguage is the raw Accept-Language header captured from a live console\nvisit (already ASCII-filtered and length-capped by the frontend, same as the\nOAuth signup path — see the SignupAcceptLanguage comment on models.User).", + "type": "string" + } + }, + "type": "object" + }, + "user.userBrowserLanguageResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/user.userBrowserLanguageDoc" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "user.userMeDoc": { + "properties": { + "email": { + "example": "operator@example.com", + "type": "string" + }, + "id": { + "example": "user-1", + "type": "string" + }, + "plan": { + "example": "Pro", + "type": "string" + }, + "username": { + "example": "operator", + "type": "string" + } + }, + "type": "object" + }, + "user.userMeResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/user.userMeDoc" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "user.userRevealAPIKeyDoc": { + "properties": { + "api_key": { + "example": "7d0f3f6a5f6c4b91a6e3f5d91ef7dc7e5c7b0c8b4f2b4e57a7d8f1e2c3b4a5d6", + "type": "string" + }, + "key": { + "$ref": "#/definitions/user.userAPIKeyItemDoc" + } + }, + "type": "object" + }, + "user.userRevealAPIKeyResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/user.userRevealAPIKeyDoc" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "user.userRotateAPIKeyDoc": { + "properties": { + "active_key": { + "$ref": "#/definitions/user.userAPIKeyItemDoc" + }, + "grace_period_seconds": { + "example": 86400, + "type": "integer" + }, + "new_api_key": { + "example": "7d0f3f6a5f6c4b91a6e3f5d91ef7dc7e5c7b0c8b4f2b4e57a7d8f1e2c3b4a5d6", + "type": "string" + }, + "previous_key": { + "$ref": "#/definitions/user.userAPIKeyItemDoc" + } + }, + "type": "object" + }, + "user.userRotateAPIKeyResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/user.userRotateAPIKeyDoc" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "usmagazine.AuthorLink": { + "properties": { + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "usmagazine.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/usmagazine.HeadlineItem" + }, + "type": "array" + }, + "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "links": { + "items": { + "$ref": "#/definitions/usmagazine.AuthorLink" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "usmagazine.HeadlineItem": { + "properties": { + "author": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "usptoppubs.DetailResponse": { + "properties": { + "abstract": { + "type": "string" + }, + "applicant_names": { + "items": { + "type": "string" + }, + "type": "array" + }, + "application_number": { + "example": "19/048819", + "type": "string" + }, + "assignee_name": { + "type": "string" + }, + "claims": { + "items": { + "type": "string" + }, + "type": "array" + }, + "cpc_codes": { + "type": "string" + }, + "database": { + "example": "US-PGPUB", + "type": "string" + }, + "description": { + "items": { + "type": "string" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "filing_date": { + "example": "2025-02-07", + "type": "string" + }, + "guid": { + "example": "US-20260238009-A1", + "type": "string" + }, + "inventors_short": { + "type": "string" + }, + "ipc_codes": { + "type": "string" + }, + "kind_codes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "language": { + "example": "EN", + "type": "string" + }, + "page_count": { + "type": "integer" + }, + "publication_date": { + "example": "2026-08-13", + "type": "string" + }, + "publication_number": { + "example": "US20260238009A1", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "title": { + "example": "HOME GRID FOR IMPROVED EFFICIENCY OF SOLAR ENERGY", + "type": "string" + } + }, + "type": "object" + }, + "usptoppubs.SearchResponse": { + "properties": { + "fetched_at": { + "type": "string" + }, + "num_found": { + "example": 500, + "type": "integer" + }, + "page": { + "example": 0, + "type": "integer" + }, + "per_page": { + "example": 20, + "type": "integer" + }, + "query": { + "example": "battery", + "type": "string" + }, + "results": { + "items": { + "$ref": "#/definitions/usptoppubs.SearchResult" + }, + "type": "array" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "usptoppubs.SearchResult": { + "properties": { + "applicant_names": { + "items": { + "type": "string" + }, + "type": "array" + }, + "application_number": { + "example": "15/620,213", + "type": "string" + }, + "assignee_name": { + "type": "string" + }, + "cpc_codes": { + "type": "string" + }, + "database": { + "example": "USPAT", + "type": "string" + }, + "filing_date": { + "example": "2017-06-12", + "type": "string" + }, + "guid": { + "example": "US-10758101-B2", + "type": "string" + }, + "inventors_short": { + "type": "string" + }, + "ipc_codes": { + "type": "string" + }, + "kind_codes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "language": { + "example": "EN", + "type": "string" + }, + "page_count": { + "type": "integer" + }, + "publication_date": { + "example": "2020-09-01", + "type": "string" + }, + "publication_number": { + "example": "US10758101B2", + "type": "string" + }, + "title": { + "example": "UPRIGHT VACUUM CLEANER WITH BATTERY SUPPORT PLATE", + "type": "string" + } + }, + "type": "object" + }, + "usptoppubs.detailResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/usptoppubs.DetailResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "usptoppubs.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/usptoppubs.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "valnet.AuthorSocialLink": { + "properties": { + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "vanguardng.AuthorArticle": { + "properties": { + "byline": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "vanguardng.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/vanguardng.AuthorArticle" + }, + "type": "array" + }, + "feed_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "scanned": { + "type": "integer" + }, + "section": { + "type": "string" + } + }, + "type": "object" + }, + "vanityfair.AuthorArticle": { + "properties": { + "published_at": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "vanityfair.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/vanityfair.AuthorArticle" + }, + "type": "array" + }, + "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "image_url": { + "type": "string" + }, + "job_title": { + "type": "string" + }, + "name": { + "type": "string" + }, + "social_links": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "variety.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" + }, + "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "has_next_page": { + "type": "boolean" + }, + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "page": { + "type": "integer" + }, + "slug": { + "type": "string" + }, + "social_links": { + "items": { + "$ref": "#/definitions/variety.AuthorSocialLink" + }, + "type": "array" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "variety.AuthorSocialLink": { + "properties": { + "platform": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "vestiaire.Brand": { + "properties": { + "id": { + "example": "50", + "type": "string" + }, + "name": { + "example": "Chanel", + "type": "string" + }, + "url": { + "example": "https://www.vestiairecollective.com/chanel/", + "type": "string" + } + }, + "type": "object" + }, + "vestiaire.BrandsResponse": { + "properties": { + "brands": { + "items": { + "$ref": "#/definitions/vestiaire.Brand" + }, + "type": "array" + }, + "fetched_at": { + "example": "2026-09-09T12:00:00Z", + "type": "string" + }, + "total": { + "example": 13693, + "type": "integer" + } + }, + "type": "object" + }, + "vestiaire.CategoriesResponse": { + "properties": { + "fetched_at": { + "example": "2026-09-09T12:00:00Z", + "type": "string" + }, + "universes": { + "items": { + "$ref": "#/definitions/vestiaire.Universe" + }, + "type": "array" + } + }, + "type": "object" + }, + "vestiaire.Category": { + "properties": { + "children": { + "items": { + "$ref": "#/definitions/vestiaire.Category" + }, + "type": "array" + }, + "count": { + "example": 82421, + "type": "integer" + }, + "id": { + "example": "5", + "type": "string" + }, + "name": { + "example": "Bags", + "type": "string" + } + }, + "type": "object" + }, + "vestiaire.ConditionsResponse": { + "properties": { + "conditions": { + "items": { + "$ref": "#/definitions/vestiaire.FacetValue" + }, + "type": "array" + }, + "fetched_at": { + "example": "2026-09-09T12:00:00Z", + "type": "string" + } + }, + "type": "object" + }, + "vestiaire.FacetValue": { + "properties": { + "count": { + "example": 119169, + "type": "integer" + }, + "id": { + "example": "50", + "type": "string" + }, + "name": { + "example": "Chanel", + "type": "string" + } + }, + "type": "object" + }, + "vestiaire.PriceRange": { + "properties": { + "max_cents": { + "example": 9765700, + "type": "integer" + }, + "min_cents": { + "example": 700, + "type": "integer" + } + }, + "type": "object" + }, + "vestiaire.ProductRef": { + "properties": { + "id": { + "example": "6444", + "type": "string" + }, + "name": { + "example": "Off-White", + "type": "string" + }, + "parent_id": { + "example": "2", + "type": "string" + } + }, + "type": "object" + }, + "vestiaire.ProductResponse": { + "properties": { + "available": { + "example": true, + "type": "boolean" + }, + "brand": { + "$ref": "#/definitions/vestiaire.ProductRef" + }, + "category": { + "$ref": "#/definitions/vestiaire.ProductRef" + }, + "color": { + "example": "Black", + "type": "string" + }, + "condition": { + "example": "Never worn", + "type": "string" + }, + "currency": { + "example": "USD", + "type": "string" + }, + "description": { + "example": "Black leather jacket from Off-White for women. Never worn.", + "type": "string" + }, + "fetched_at": { + "example": "2026-09-09T12:00:00Z", + "type": "string" + }, + "id": { + "example": "70860454", + "type": "string" + }, + "in_stock": { + "example": false, + "type": "boolean" + }, + "like_count": { + "example": 2, + "type": "integer" + }, + "material": { + "example": "Leather", + "type": "string" + }, + "model": { + "$ref": "#/definitions/vestiaire.ProductRef" + }, + "name": { + "example": "Leather biker jacket", + "type": "string" + }, + "negotiable": { + "example": true, + "type": "boolean" + }, + "pictures": { + "items": { + "type": "string" + }, + "type": "array" + }, + "price_cents": { + "example": 31100, + "type": "integer" + }, + "reserved": { + "example": false, + "type": "boolean" + }, + "seller": { + "$ref": "#/definitions/vestiaire.ProductSeller" + }, + "size": { + "example": "L", + "type": "string" + }, + "size_standard": { + "example": "International", + "type": "string" + }, + "sold": { + "example": false, + "type": "boolean" + }, + "source_url": { + "example": "https://www.vestiairecollective.com/women-clothing/biker-jackets/off-white/black-leather-off-white-biker-jacket-70860454.shtml", + "type": "string" + }, + "universe": { + "example": "Women", + "type": "string" + }, + "url": { + "example": "https://www.vestiairecollective.com/women-clothing/biker-jackets/off-white/black-leather-off-white-biker-jacket-70860454.shtml", + "type": "string" + } + }, + "type": "object" + }, + "vestiaire.ProductSeller": { + "properties": { + "badge": { + "example": "Common", + "type": "string" + }, + "country": { + "example": "United States", + "type": "string" + }, + "country_iso": { + "example": "US", + "type": "string" + }, + "id": { + "example": "36526194", + "type": "string" + }, + "products_listed": { + "example": 23, + "type": "integer" + }, + "products_sold": { + "example": 8, + "type": "integer" + }, + "username": { + "example": "michelle36526194", + "type": "string" + } + }, + "type": "object" + }, + "vestiaire.SearchFacets": { + "properties": { + "brands": { + "items": { + "$ref": "#/definitions/vestiaire.FacetValue" + }, + "type": "array" + }, + "categories": { + "items": { + "$ref": "#/definitions/vestiaire.FacetValue" + }, + "type": "array" + }, + "conditions": { + "items": { + "$ref": "#/definitions/vestiaire.FacetValue" + }, + "type": "array" + } + }, + "type": "object" + }, + "vestiaire.SearchItem": { + "properties": { + "brand": { + "example": "Chanel", + "type": "string" + }, + "brand_id": { + "example": "50", + "type": "string" + }, + "color": { + "example": "Black", + "type": "string" + }, + "country": { + "example": "US", + "type": "string" + }, + "created_at": { + "example": "2026-09-08T10:00:03Z", + "type": "string" + }, + "currency": { + "example": "USD", + "type": "string" + }, + "id": { + "example": "70816051", + "type": "string" + }, + "in_stock": { + "example": false, + "type": "boolean" + }, + "likes": { + "example": 1, + "type": "integer" + }, + "model": { + "example": "Timeless/Classique Chain", + "type": "string" + }, + "name": { + "example": "Timeless/Classique Chain leather backpack", + "type": "string" + }, + "pictures": { + "items": { + "type": "string" + }, + "type": "array" + }, + "price_cents": { + "example": 270000, + "type": "integer" + }, + "seller_id": { + "example": "28924234", + "type": "string" + }, + "sold": { + "example": false, + "type": "boolean" + }, + "url": { + "example": "https://www.vestiairecollective.com/women-bags/backpacks/chanel/black-leather-timeless-classique-chain-chanel-backpack-70816051.shtml", + "type": "string" + } + }, + "type": "object" + }, + "vestiaire.SearchResponse": { + "properties": { + "facets": { + "$ref": "#/definitions/vestiaire.SearchFacets" + }, + "fetched_at": { + "example": "2026-09-09T12:00:00Z", + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/vestiaire.SearchItem" + }, + "type": "array" + }, + "page": { + "example": 1, + "type": "integer" + }, + "per_page": { + "example": 24, + "type": "integer" + }, + "price_range": { + "$ref": "#/definitions/vestiaire.PriceRange" + }, + "q": { + "example": "chanel bag", + "type": "string" + }, + "sort": { + "example": "relevance", + "type": "string" + }, + "source_url": { + "example": "https://www.vestiairecollective.com/search/?q=chanel+bag", + "type": "string" + }, + "total_items": { + "example": 10000, + "type": "integer" + }, + "total_pages": { + "example": 417, + "type": "integer" + } + }, + "type": "object" + }, + "vestiaire.SearchSellersResponse": { + "properties": { + "fetched_at": { + "example": "2026-09-09T12:00:00Z", + "type": "string" + }, + "q": { + "example": "michelle", + "type": "string" + }, + "sellers": { + "items": { + "$ref": "#/definitions/vestiaire.SellerSearchMatch" + }, + "type": "array" + } + }, + "type": "object" + }, + "vestiaire.SellerResponse": { + "properties": { + "community_rank": { + "example": 0, + "type": "integer" + }, + "country": { + "example": "United States", + "type": "string" + }, + "country_iso": { + "example": "US", + "type": "string" + }, + "fetched_at": { + "example": "2026-09-09T12:00:00Z", + "type": "string" + }, + "firstname": { + "example": "michelle", + "type": "string" + }, + "followers": { + "example": 26, + "type": "integer" + }, + "following": { + "example": 11, + "type": "integer" + }, + "id": { + "example": "36526194", + "type": "string" + }, + "products_bought": { + "example": 0, + "type": "integer" + }, + "products_listed": { + "example": 23, + "type": "integer" + }, + "products_sold": { + "example": 8, + "type": "integer" + }, + "segment": { + "example": "C2C", + "type": "string" + }, + "source_url": { + "example": "https://www.vestiairecollective.com/profile/36526194", + "type": "string" + }, + "url": { + "example": "https://www.vestiairecollective.com/profile/36526194", + "type": "string" + }, + "username": { + "example": "michelle36526194", + "type": "string" + } + }, + "type": "object" + }, + "vestiaire.SellerSearchMatch": { + "properties": { + "avatar_url": { + "type": "string" + }, + "id": { + "example": "36526194", + "type": "string" + }, + "name": { + "example": "michelle", + "type": "string" + }, + "username": { + "example": "michelle36526194", + "type": "string" + } + }, + "type": "object" + }, + "vestiaire.SuggestBrand": { + "properties": { + "id": { + "example": "50", + "type": "string" + }, + "name": { + "example": "Chanel", + "type": "string" + }, + "url": { + "example": "https://www.vestiairecollective.com/chanel/", + "type": "string" + } + }, + "type": "object" + }, + "vestiaire.SuggestResponse": { + "properties": { + "brands": { + "items": { + "$ref": "#/definitions/vestiaire.SuggestBrand" + }, + "type": "array" + }, + "fetched_at": { + "example": "2026-09-09T12:00:00Z", + "type": "string" + }, + "q": { + "example": "chane", + "type": "string" + }, + "suggestions": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "vestiaire.Universe": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/vestiaire.Category" + }, + "type": "array" + }, + "count": { + "example": 346038, + "type": "integer" + }, + "id": { + "example": "1", + "type": "string" + }, + "name": { + "example": "Women", + "type": "string" + } + }, + "type": "object" + }, + "vestiaire.brandsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/vestiaire.BrandsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "vestiaire.categoriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/vestiaire.CategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "vestiaire.conditionsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/vestiaire.ConditionsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "vestiaire.productResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/vestiaire.ProductResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "vestiaire.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/vestiaire.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "vestiaire.searchSellersResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/vestiaire.SearchSellersResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "vestiaire.sellerResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/vestiaire.SellerResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "vestiaire.suggestResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/vestiaire.SuggestResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "vice.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/vice.HeadlineItem" + }, + "type": "array" + }, + "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "vice.HeadlineItem": { + "properties": { + "author": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "vinted.BrandEntry": { + "properties": { + "id": { + "example": "14", + "type": "string" + }, + "name": { + "example": "adidas", + "type": "string" + }, + "url": { + "example": "https://www.vinted.com/brand/14-adidas", + "type": "string" + } + }, + "type": "object" + }, + "vinted.BrandResponse": { + "properties": { + "fetched_at": { + "example": "2026-08-07T12:00:00Z", + "type": "string" + }, + "id": { + "example": "386688", + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/vinted.ItemCard" + }, + "type": "array" + }, + "name": { + "example": "Cabela's", + "type": "string" + }, + "page": { + "example": 1, + "type": "integer" + }, + "source_url": { + "example": "https://www.vinted.com/brand/386688", + "type": "string" + }, + "url": { + "example": "https://www.vinted.com/brand/386688", + "type": "string" + } + }, + "type": "object" + }, + "vinted.BrandsResponse": { + "properties": { + "brands": { + "items": { + "$ref": "#/definitions/vinted.BrandEntry" + }, + "type": "array" + }, + "fetched_at": { + "example": "2026-08-07T12:00:00Z", + "type": "string" + }, + "source_url": { + "example": "https://www.vinted.com/brands", + "type": "string" + } + }, + "type": "object" + }, + "vinted.CatalogResponse": { + "properties": { + "fetched_at": { + "example": "2026-08-07T12:00:00Z", + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/vinted.ItemCard" + }, + "type": "array" + }, + "page": { + "example": 1, + "type": "integer" + }, + "search_text": { + "example": "jacket", + "type": "string" + }, + "source_url": { + "example": "https://www.vinted.com/catalog?search_text=jacket", + "type": "string" + } + }, + "type": "object" + }, + "vinted.CategoriesResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/vinted.CategoryEntry" + }, + "type": "array" + }, + "fetched_at": { + "example": "2026-08-07T12:00:00Z", + "type": "string" + }, + "source_url": { + "example": "https://www.vinted.com/catalog", + "type": "string" + } + }, + "type": "object" + }, + "vinted.CategoryEntry": { + "properties": { + "id": { + "example": "1904", + "type": "string" + }, + "name": { + "example": "Women", + "type": "string" + }, + "url": { + "example": "https://www.vinted.com/catalog/1904-women_root", + "type": "string" + } + }, + "type": "object" + }, + "vinted.CategoryResponse": { + "properties": { + "fetched_at": { + "example": "2026-08-07T12:00:00Z", + "type": "string" + }, + "id": { + "example": "1904", + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/vinted.ItemCard" + }, + "type": "array" + }, + "name": { + "example": "Women", + "type": "string" + }, + "page": { + "example": 1, + "type": "integer" + }, + "source_url": { + "example": "https://www.vinted.com/catalog/1904", + "type": "string" + }, + "url": { + "example": "https://www.vinted.com/catalog/1904", + "type": "string" + } + }, + "type": "object" + }, + "vinted.ItemCard": { + "properties": { + "brand": { + "example": "Cabela's", + "type": "string" + }, + "condition": { + "example": "Good", + "type": "string" + }, + "favourite_count": { + "example": 9, + "type": "integer" + }, + "id": { + "example": "9595406652", + "type": "string" + }, + "image_url": { + "example": "https://images1.vinted.net/t/01_00ebe_Runxp7FBSGM86vRdXFhYhM4A/310x430/3e52418b.webp", + "type": "string" + }, + "price_raw": { + "example": "$20.00", + "type": "string" + }, + "size": { + "example": "L / US 12-14", + "type": "string" + }, + "title": { + "example": "Vintage leather Cabelas Women's jacket", + "type": "string" + }, + "total_price_raw": { + "example": "$21.70", + "type": "string" + }, + "url": { + "example": "https://www.vinted.com/items/9595406652-vintage-leather-cabelas-womens-jacket", + "type": "string" + } + }, + "type": "object" + }, + "vinted.ItemResponse": { + "properties": { + "brand": { + "example": "Cabela's", + "type": "string" + }, + "categories": { + "example": [ + "Women", + "Clothing", + "Coats & Jackets" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "color": { + "example": "Brown", + "type": "string" + }, + "condition": { + "example": "Good", + "type": "string" + }, + "description": { + "example": "In good condition. Has scratches and scuffs.", + "type": "string" + }, + "fetched_at": { + "example": "2026-08-07T12:00:00Z", + "type": "string" + }, + "id": { + "example": "9595406652", + "type": "string" + }, + "material": { + "example": "Leather", + "type": "string" + }, + "photos": { + "items": { + "type": "string" + }, + "type": "array" + }, + "price_raw": { + "example": "$20.00", + "type": "string" + }, + "size": { + "example": "L / US 12-14", + "type": "string" + }, + "source_url": { + "example": "https://www.vinted.com/items/9595406652-vintage-leather-cabelas-womens-jacket", + "type": "string" + }, + "title": { + "example": "Vintage leather Cabelas Women's jacket", + "type": "string" + }, + "url": { + "example": "https://www.vinted.com/items/9595406652-vintage-leather-cabelas-womens-jacket", + "type": "string" + } + }, + "type": "object" + }, + "vinted.MemberResponse": { + "properties": { + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "example": "2026-08-07T12:00:00Z", + "type": "string" + }, + "followers_count": { + "description": "Number of members following this member.", + "example": 5, + "type": "integer" + }, + "following_count": { + "description": "Number of members this member follows.", + "example": 0, + "type": "integer" + }, + "id": { + "description": "Vinted member id.", + "example": "3159465141", + "type": "string" + }, + "location": { + "description": "City and country the member gives on their public profile.", + "example": "Scottsbluff, United States", + "type": "string" + }, + "rating": { + "description": "Member's average rating on Vinted.", + "example": 5, + "type": "number" + }, + "source_url": { + "description": "URL the data was read from.", + "example": "https://www.vinted.com/member/3159465141", + "type": "string" + }, + "url": { + "description": "URL of the member's profile page on Vinted.", + "example": "https://www.vinted.com/member/3159465141", + "type": "string" + }, + "username": { + "description": "Member's Vinted username.", + "example": "alexist738", + "type": "string" + } + }, + "type": "object" + }, + "vinted.brandResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/vinted.BrandResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "vinted.brandsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/vinted.BrandsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "vinted.catalogResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/vinted.CatalogResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "vinted.categoriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/vinted.CategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "vinted.categoryResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/vinted.CategoryResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "vinted.itemResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/vinted.ItemResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "vinted.memberResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/vinted.MemberResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "vlr.AdvancedLine": { + "properties": { + "agent": { + "example": "omen", + "type": "string" + }, + "clutches_1v1": { + "example": 0, + "type": "integer" + }, + "clutches_1v2": { + "example": 0, + "type": "integer" + }, + "clutches_1v3": { + "example": 0, + "type": "integer" + }, + "clutches_1v4": { + "example": 0, + "type": "integer" + }, + "clutches_1v5": { + "example": 0, + "type": "integer" + }, + "defuses": { + "example": 3, + "type": "integer" + }, + "econ_rating": { + "example": 49, + "type": "integer" + }, + "multikills_2k": { + "example": 13, + "type": "integer" + }, + "multikills_3k": { + "example": 1, + "type": "integer" + }, + "multikills_4k": { + "example": 1, + "type": "integer" + }, + "multikills_5k": { + "example": 0, + "type": "integer" + }, + "plants": { + "example": 8, + "type": "integer" + }, + "player": { + "$ref": "#/definitions/vlr.MatrixPlayer" + } + }, + "type": "object" + }, + "vlr.AgentPick": { + "properties": { + "agent": { + "example": "omen", + "type": "string" + }, + "percent": { + "example": 79, + "type": "number" + } + }, + "type": "object" + }, + "vlr.AgentUsage": { + "properties": { + "acs": { + "example": 206.5, + "type": "number" + }, + "adr": { + "example": 128.8, + "type": "number" + }, + "agent": { + "example": "Jett", + "type": "string" + }, + "assists": { + "example": 26, + "type": "integer" + }, + "assists_per_round": { + "example": 0.19, + "type": "number" + }, + "deaths": { + "example": 103, + "type": "integer" + }, + "first_deaths": { + "example": 23, + "type": "integer" + }, + "first_kills": { + "example": 14, + "type": "integer" + }, + "first_kills_per_round": { + "example": 0.61, + "type": "number" + }, + "kast_percent": { + "example": 63, + "type": "number" + }, + "kd": { + "example": 0.98, + "type": "number" + }, + "kills": { + "example": 101, + "type": "integer" + }, + "kills_per_round": { + "example": 0.74, + "type": "number" + }, + "rating": { + "example": 0.93, + "type": "number" + }, + "rounds": { + "example": 137, + "type": "integer" + }, + "use": { + "example": "(6) 29%", + "type": "string" + } + }, + "type": "object" + }, + "vlr.ArticleDetail": { + "properties": { + "author": { + "example": "jenopelle", + "type": "string" + }, + "external_links": { + "items": { + "type": "string" + }, + "type": "array" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "id": { + "example": "781119", + "type": "string" + }, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "published_at": { + "example": "2026-10-28T09:16:51Z", + "type": "string" + }, + "references": { + "items": { + "$ref": "#/definitions/vlr.ArticleRef" + }, + "type": "array" + }, + "source_url": { + "example": "https://www.vlr.gg/matches", + "type": "string" + }, + "text": { + "type": "string" + }, + "title": { + "example": "Efina set to leave Gen.G as free agent", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "vlr.ArticleRef": { + "properties": { + "id": { + "example": "17", + "type": "string" + }, + "name": { + "example": "Gen.G", + "type": "string" + }, + "slug": { + "example": "gen-g", + "type": "string" + }, + "type": { + "enum": [ + "team", + "player", + "event" + ], + "example": "team", + "type": "string" + }, + "url": { + "example": "https://www.vlr.gg/team/17/gen-g", + "type": "string" + } + }, + "type": "object" + }, + "vlr.BuyBucket": { + "properties": { + "buy": { + "enum": [ + "eco", + "half", + "full" + ], + "example": "eco", + "type": "string" + }, + "label": { + "example": "On Eco <10k", + "type": "string" + }, + "teams": { + "items": { + "$ref": "#/definitions/vlr.BuyOutcome" + }, + "type": "array" + } + }, + "type": "object" + }, + "vlr.BuyOutcome": { + "properties": { + "team": { + "example": "LOUD", + "type": "string" + }, + "vs_eco": { + "$ref": "#/definitions/vlr.Ratio" + }, + "vs_full": { + "$ref": "#/definitions/vlr.Ratio" + }, + "vs_half": { + "$ref": "#/definitions/vlr.Ratio" + } + }, + "type": "object" + }, + "vlr.CompositionMatch": { + "properties": { + "agents": { + "items": { + "type": "string" + }, + "type": "array" + }, + "match_id": { + "example": "777952", + "type": "string" + }, + "opponent": { + "example": "Nova Esports", + "type": "string" + }, + "result": { + "enum": [ + "win", + "loss" + ], + "example": "win", + "type": "string" + } + }, + "type": "object" + }, + "vlr.EconomyBlock": { + "properties": { + "buy_buckets": { + "items": { + "$ref": "#/definitions/vlr.BuyBucket" + }, + "type": "array" + }, + "game_id": { + "example": "283286", + "type": "string" + }, + "map": { + "example": "Bind", + "type": "string" + }, + "map_number": { + "example": 1, + "type": "integer" + }, + "rounds": { + "items": { + "$ref": "#/definitions/vlr.EconomyRound" + }, + "type": "array" + }, + "teams": { + "items": { + "$ref": "#/definitions/vlr.TeamEconomy" + }, + "type": "array" + } + }, + "type": "object" + }, + "vlr.EconomyRound": { + "properties": { + "pistol": { + "example": true, + "type": "boolean" + }, + "round": { + "example": 1, + "type": "integer" + }, + "team1_bank_k": { + "example": 0.1, + "type": "number" + }, + "team1_buy": { + "enum": [ + "eco", + "half", + "full" + ], + "example": "eco", + "type": "string" + }, + "team1_loadout_k": { + "example": 3.9, + "type": "number" + }, + "team2_bank_k": { + "example": 0.1, + "type": "number" + }, + "team2_buy": { + "enum": [ + "eco", + "half", + "full" + ], + "example": "eco", + "type": "string" + }, + "team2_loadout_k": { + "example": 4, + "type": "number" + }, + "winner_side": { + "enum": [ + "attack", + "defense" + ], + "example": "defense", + "type": "string" + }, + "winner_team": { + "example": "VIT", + "type": "string" + } + }, + "type": "object" + }, + "vlr.EventAgentsResponse": { + "properties": { + "agents": { + "example": [ + "omen" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "compositions": { + "items": { + "$ref": "#/definitions/vlr.MapCompositions" + }, + "type": "array" + }, + "event_id": { + "example": "3166", + "type": "string" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "maps": { + "items": { + "$ref": "#/definitions/vlr.MapAgentRow" + }, + "type": "array" + }, + "overall": { + "$ref": "#/definitions/vlr.MapAgentRow" + }, + "source_url": { + "example": "https://www.vlr.gg/matches", + "type": "string" + } + }, + "type": "object" + }, + "vlr.EventDetail": { + "properties": { + "dates": { + "example": "Oct 21 – Nov 1, 2026", + "type": "string" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "id": { + "example": "3166", + "type": "string" + }, + "image_url": { + "type": "string" + }, + "location": { + "type": "string" + }, + "name": { + "example": "VCT 2026: China Threshold", + "type": "string" + }, + "prize": { + "example": "TBD", + "type": "string" + }, + "series": { + "example": "Valorant Champions Tour 2027", + "type": "string" + }, + "source_url": { + "example": "https://www.vlr.gg/matches", + "type": "string" + }, + "subtitle": { + "type": "string" + }, + "teams": { + "items": { + "$ref": "#/definitions/vlr.TeamRef" + }, + "type": "array" + } + }, + "type": "object" + }, + "vlr.EventMatchesResponse": { + "properties": { + "count": { + "example": 22, + "type": "integer" + }, + "event_id": { + "example": "3166", + "type": "string" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "group": { + "enum": [ + "completed", + "upcoming" + ], + "example": "completed", + "type": "string" + }, + "matches": { + "items": { + "$ref": "#/definitions/vlr.MatchSummary" + }, + "type": "array" + }, + "series_id": { + "example": "6080", + "type": "string" + }, + "source_url": { + "example": "https://www.vlr.gg/matches", + "type": "string" + }, + "stages": { + "items": { + "$ref": "#/definitions/vlr.EventStage" + }, + "type": "array" + } + }, + "type": "object" + }, + "vlr.EventRef": { + "properties": { + "id": { + "example": "3166", + "type": "string" + }, + "name": { + "example": "VCT 2026: China Threshold", + "type": "string" + }, + "series": { + "example": "Week 2: Round of 12", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "vlr.EventStage": { + "properties": { + "id": { + "example": "6080", + "type": "string" + }, + "name": { + "example": "Week 1", + "type": "string" + } + }, + "type": "object" + }, + "vlr.EventStatsResponse": { + "properties": { + "count": { + "example": 67, + "type": "integer" + }, + "event_id": { + "example": "3166", + "type": "string" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "players": { + "items": { + "$ref": "#/definitions/vlr.StatsRow" + }, + "type": "array" + }, + "side": { + "enum": [ + "all", + "t", + "ct" + ], + "example": "all", + "type": "string" + }, + "source_url": { + "example": "https://www.vlr.gg/matches", + "type": "string" + } + }, + "type": "object" + }, + "vlr.EventSummary": { + "properties": { + "country_code": { + "example": "br", + "type": "string" + }, + "dates": { + "example": "Oct 22—Nov 3", + "type": "string" + }, + "id": { + "example": "3166", + "type": "string" + }, + "image_url": { + "type": "string" + }, + "name": { + "example": "VCT 2026: China Threshold", + "type": "string" + }, + "prize": { + "example": "$500,000", + "type": "string" + }, + "status": { + "enum": [ + "upcoming", + "ongoing", + "completed" + ], + "example": "ongoing", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "vlr.EventsResponse": { + "properties": { + "count": { + "example": 40, + "type": "integer" + }, + "events": { + "items": { + "$ref": "#/definitions/vlr.EventSummary" + }, + "type": "array" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "has_more": { + "example": true, + "type": "boolean" + }, + "page": { + "example": 1, + "type": "integer" + }, + "region": { + "example": "all", + "type": "string" + }, + "source_url": { + "example": "https://www.vlr.gg/matches", + "type": "string" + }, + "tier": { + "example": "all", + "type": "string" + } + }, + "type": "object" + }, + "vlr.ForumCategoriesResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/vlr.ForumCategory" + }, + "type": "array" + }, + "count": { + "example": 3, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "source_url": { + "example": "https://www.vlr.gg/matches", + "type": "string" + } + }, + "type": "object" + }, + "vlr.ForumCategory": { + "properties": { + "description": { + "example": "Anything and everything Valorant", + "type": "string" + }, + "group": { + "example": "Valorant", + "type": "string" + }, + "last_post_time": { + "example": "Oct 27, 2026 at 20:35 CET", + "type": "string" + }, + "last_poster": { + "example": "iceypicks", + "type": "string" + }, + "last_thread_id": { + "example": "780920", + "type": "string" + }, + "name": { + "example": "Valorant Discussion", + "type": "string" + }, + "posts": { + "example": 5543705, + "type": "integer" + }, + "slug": { + "enum": [ + "valorant-discussion", + "off-topic", + "site-feedback" + ], + "example": "valorant-discussion", + "type": "string" + }, + "threads": { + "example": 577804, + "type": "integer" + } + }, + "type": "object" + }, + "vlr.ForumThread": { + "properties": { + "author": { + "example": "enigma", + "type": "string" + }, + "category": { + "example": "valorant-discussion", + "type": "string" + }, + "category_name": { + "example": "Valorant Discussion", + "type": "string" + }, + "frags": { + "example": 2408, + "type": "integer" + }, + "id": { + "example": "780920", + "type": "string" + }, + "last_active": { + "example": "5 years ago", + "type": "string" + }, + "last_poster": { + "example": "enigma", + "type": "string" + }, + "pinned": { + "example": false, + "type": "boolean" + }, + "posted": { + "example": "5 years ago", + "type": "string" + }, + "replies": { + "example": 1, + "type": "integer" + }, + "title": { + "example": "Zak9: Cane is back", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "vlr.ForumThreadsResponse": { + "properties": { + "category": { + "example": "valorant-discussion", + "type": "string" + }, + "count": { + "example": 30, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "has_more": { + "example": true, + "type": "boolean" + }, + "page": { + "example": 1, + "type": "integer" + }, + "sort": { + "enum": [ + "hot", + "new", + "top" + ], + "example": "new", + "type": "string" + }, + "source_url": { + "example": "https://www.vlr.gg/matches", + "type": "string" + }, + "threads": { + "items": { + "$ref": "#/definitions/vlr.ForumThread" + }, + "type": "array" + } + }, + "type": "object" + }, + "vlr.H2HMatch": { + "properties": { + "date": { + "example": "2026/10/16", + "type": "string" + }, + "event": { + "example": "Champions 2026", + "type": "string" + }, + "id": { + "example": "754736", + "type": "string" + }, + "stage": { + "example": "UBF", + "type": "string" + }, + "team1_score": { + "example": 2, + "type": "integer" + }, + "team2_score": { + "example": 1, + "type": "integer" + }, + "url": { + "type": "string" + }, + "winner": { + "description": "team1/team2 are the head_to_head teams, left and right", + "enum": [ + "team1", + "team2" + ], + "example": "team1", + "type": "string" + } + }, + "type": "object" + }, + "vlr.HeadToHead": { + "properties": { + "matches": { + "items": { + "$ref": "#/definitions/vlr.H2HMatch" + }, + "type": "array" + }, + "team1": { + "example": "LOUD", + "type": "string" + }, + "team2": { + "example": "Team Vitality", + "type": "string" + } + }, + "type": "object" + }, + "vlr.HistoryResponse": { + "properties": { + "count": { + "example": 50, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "group": { + "enum": [ + "completed", + "upcoming" + ], + "example": "completed", + "type": "string" + }, + "has_more": { + "example": true, + "type": "boolean" + }, + "id": { + "example": "2059", + "type": "string" + }, + "matches": { + "items": { + "$ref": "#/definitions/vlr.TeamMatch" + }, + "type": "array" + }, + "page": { + "example": 1, + "type": "integer" + }, + "source_url": { + "example": "https://www.vlr.gg/matches", + "type": "string" + } + }, + "type": "object" + }, + "vlr.KillMatrix": { + "properties": { + "mode": { + "enum": [ + "overall", + "first_kills", + "op_kills" + ], + "example": "overall", + "type": "string" + }, + "rows": { + "items": { + "$ref": "#/definitions/vlr.MatrixRow" + }, + "type": "array" + } + }, + "type": "object" + }, + "vlr.MapAgentRow": { + "properties": { + "attack_win_percent": { + "example": 49, + "type": "number" + }, + "defense_win_percent": { + "example": 51, + "type": "number" + }, + "games": { + "example": 8, + "type": "integer" + }, + "map": { + "example": "Summit", + "type": "string" + }, + "pick_rates": { + "items": { + "$ref": "#/definitions/vlr.AgentPick" + }, + "type": "array" + } + }, + "type": "object" + }, + "vlr.MapCompositions": { + "properties": { + "map": { + "example": "Split", + "type": "string" + }, + "teams": { + "items": { + "$ref": "#/definitions/vlr.TeamComposition" + }, + "type": "array" + } + }, + "type": "object" + }, + "vlr.MapResult": { + "properties": { + "duration": { + "example": "41:12", + "type": "string" + }, + "id": { + "example": "287476", + "type": "string" + }, + "name": { + "example": "Summit", + "type": "string" + }, + "number": { + "example": 1, + "type": "integer" + }, + "picked_by": { + "example": "Unsettled Resentment", + "type": "string" + }, + "players": { + "items": { + "$ref": "#/definitions/vlr.PlayerLine" + }, + "type": "array" + }, + "teams": { + "items": { + "$ref": "#/definitions/vlr.MapTeamResult" + }, + "type": "array" + } + }, + "type": "object" + }, + "vlr.MapSide": { + "properties": { + "first_rounds": { + "example": 21, + "type": "integer" + }, + "round_win_percent": { + "example": 47, + "type": "number" + }, + "rounds_lost": { + "example": 248, + "type": "integer" + }, + "rounds_won": { + "example": 223, + "type": "integer" + } + }, + "type": "object" + }, + "vlr.MapTeamResult": { + "properties": { + "name": { + "example": "Unsettled Resentment", + "type": "string" + }, + "rounds": { + "$ref": "#/definitions/vlr.RoundSplit" + }, + "score": { + "example": 17, + "type": "integer" + } + }, + "type": "object" + }, + "vlr.MatchDetail": { + "properties": { + "all_maps_players": { + "items": { + "$ref": "#/definitions/vlr.PlayerLine" + }, + "type": "array" + }, + "event": { + "$ref": "#/definitions/vlr.EventRef" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "format": { + "example": "Bo3", + "type": "string" + }, + "head_to_head": { + "$ref": "#/definitions/vlr.HeadToHead" + }, + "id": { + "example": "777956", + "type": "string" + }, + "maps": { + "items": { + "$ref": "#/definitions/vlr.MapResult" + }, + "type": "array" + }, + "note": { + "type": "string" + }, + "past_matches": { + "items": { + "$ref": "#/definitions/vlr.PastMatches" + }, + "type": "array" + }, + "source_url": { + "example": "https://www.vlr.gg/matches", + "type": "string" + }, + "start_time_utc": { + "example": "2026-10-27T05:00:00Z", + "type": "string" + }, + "status": { + "example": "final", + "type": "string" + }, + "teams": { + "items": { + "$ref": "#/definitions/vlr.TeamScore" + }, + "type": "array" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "vlr.MatchEconomy": { + "properties": { + "all_maps": { + "$ref": "#/definitions/vlr.EconomyBlock" + }, + "available": { + "example": true, + "type": "boolean" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "id": { + "example": "754737", + "type": "string" + }, + "maps": { + "items": { + "$ref": "#/definitions/vlr.EconomyBlock" + }, + "type": "array" + }, + "source_url": { + "example": "https://www.vlr.gg/matches", + "type": "string" + } + }, + "type": "object" + }, + "vlr.MatchListResponse": { + "properties": { + "count": { + "example": 50, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "has_more": { + "example": true, + "type": "boolean" + }, + "matches": { + "items": { + "$ref": "#/definitions/vlr.MatchSummary" + }, + "type": "array" + }, + "page": { + "example": 1, + "type": "integer" + }, + "source_url": { + "example": "https://www.vlr.gg/matches", + "type": "string" + } + }, + "type": "object" + }, + "vlr.MatchPerformance": { + "properties": { + "all_maps": { + "$ref": "#/definitions/vlr.PerformanceBlock" + }, + "available": { + "example": true, + "type": "boolean" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "id": { + "example": "754737", + "type": "string" + }, + "maps": { + "items": { + "$ref": "#/definitions/vlr.PerformanceBlock" + }, + "type": "array" + }, + "source_url": { + "example": "https://www.vlr.gg/matches", + "type": "string" + } + }, + "type": "object" + }, + "vlr.MatchRounds": { + "properties": { + "available": { + "example": true, + "type": "boolean" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "id": { + "example": "754737", + "type": "string" + }, + "maps": { + "items": { + "$ref": "#/definitions/vlr.RoundsBlock" + }, + "type": "array" + }, + "source_url": { + "example": "https://www.vlr.gg/matches", + "type": "string" + } + }, + "type": "object" + }, + "vlr.MatchSummary": { + "properties": { + "date": { + "example": "2026-10-27", + "type": "string" + }, + "eta": { + "example": "3h 33m", + "type": "string" + }, + "event": { + "example": "VCT 2026: China Threshold", + "type": "string" + }, + "has_stats": { + "example": true, + "type": "boolean" + }, + "has_vods": { + "example": false, + "type": "boolean" + }, + "id": { + "example": "777956", + "type": "string" + }, + "note": { + "type": "string" + }, + "series": { + "example": "Week 2–Round of 12", + "type": "string" + }, + "status": { + "enum": [ + "upcoming", + "live", + "completed" + ], + "example": "completed", + "type": "string" + }, + "teams": { + "items": { + "$ref": "#/definitions/vlr.MatchTeam" + }, + "type": "array" + }, + "time_label": { + "example": "5:00 PM", + "type": "string" + }, + "url": { + "example": "https://www.vlr.gg/777956/unsettled-resentment-vs-victory-no-limits-gaming-vct-2026-china-threshold-week-2-ro12", + "type": "string" + } + }, + "type": "object" + }, + "vlr.MatchTeam": { + "properties": { + "country_code": { + "example": "cn", + "type": "string" + }, + "name": { + "example": "Unsettled Resentment", + "type": "string" + }, + "score": { + "example": 2, + "type": "integer" + }, + "winner": { + "example": true, + "type": "boolean" + } + }, + "type": "object" + }, + "vlr.MatrixCell": { + "properties": { + "deaths": { + "example": 15, + "type": "integer" + }, + "diff": { + "example": -4, + "type": "integer" + }, + "kills": { + "example": 11, + "type": "integer" + }, + "opponent": { + "$ref": "#/definitions/vlr.MatrixPlayer" + } + }, + "type": "object" + }, + "vlr.MatrixPlayer": { + "properties": { + "name": { + "example": "erde", + "type": "string" + }, + "team": { + "example": "LOUD", + "type": "string" + } + }, + "type": "object" + }, + "vlr.MatrixRow": { + "properties": { + "player": { + "$ref": "#/definitions/vlr.MatrixPlayer" + }, + "vs": { + "items": { + "$ref": "#/definitions/vlr.MatrixCell" + }, + "type": "array" + } + }, + "type": "object" + }, + "vlr.NewsItem": { + "properties": { + "author": { + "example": "jenopelle", + "type": "string" + }, + "country_code": { + "example": "kr", + "type": "string" + }, + "date": { + "example": "2026-10-27", + "type": "string" + }, + "description": { + "type": "string" + }, + "id": { + "example": "780785", + "type": "string" + }, + "title": { + "example": "T1 Academy's full roster released ahead of 2027 season", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "vlr.NewsResponse": { + "properties": { + "count": { + "example": 30, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "has_more": { + "example": true, + "type": "boolean" + }, + "items": { + "items": { + "$ref": "#/definitions/vlr.NewsItem" + }, + "type": "array" + }, + "page": { + "example": 1, + "type": "integer" + }, + "source_url": { + "example": "https://www.vlr.gg/matches", + "type": "string" + } + }, + "type": "object" + }, + "vlr.PastMatch": { + "properties": { + "date": { + "example": "2026/10/16", + "type": "string" + }, + "id": { + "example": "754736", + "type": "string" + }, + "opponent": { + "example": "Team Vitality", + "type": "string" + }, + "result": { + "enum": [ + "win", + "loss" + ], + "example": "win", + "type": "string" + }, + "score": { + "example": "2:1", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "vlr.PastMatches": { + "properties": { + "matches": { + "items": { + "$ref": "#/definitions/vlr.PastMatch" + }, + "type": "array" + }, + "team": { + "example": "LOUD", + "type": "string" + } + }, + "type": "object" + }, + "vlr.PerformanceBlock": { + "properties": { + "advanced": { + "items": { + "$ref": "#/definitions/vlr.AdvancedLine" + }, + "type": "array" + }, + "game_id": { + "example": "283286", + "type": "string" + }, + "kill_matrices": { + "items": { + "$ref": "#/definitions/vlr.KillMatrix" + }, + "type": "array" + }, + "map": { + "example": "Bind", + "type": "string" + }, + "map_number": { + "example": 1, + "type": "integer" + } + }, + "type": "object" + }, + "vlr.PlayerDetail": { + "properties": { + "agent_stats": { + "items": { + "$ref": "#/definitions/vlr.AgentUsage" + }, + "type": "array" + }, + "alias": { + "example": "Jamppi", + "type": "string" + }, + "country": { + "example": "FINLAND", + "type": "string" + }, + "country_code": { + "example": "fi", + "type": "string" + }, + "current_teams": { + "items": { + "$ref": "#/definitions/vlr.PlayerTeam" + }, + "type": "array" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "id": { + "example": "9780", + "type": "string" + }, + "image_url": { + "type": "string" + }, + "links": { + "items": { + "type": "string" + }, + "type": "array" + }, + "past_teams": { + "items": { + "$ref": "#/definitions/vlr.PlayerTeam" + }, + "type": "array" + }, + "real_name": { + "example": "Elias Olkkonen", + "type": "string" + }, + "recent_matches": { + "items": { + "$ref": "#/definitions/vlr.TeamMatch" + }, + "type": "array" + }, + "source_url": { + "example": "https://www.vlr.gg/matches", + "type": "string" + }, + "timespan": { + "enum": [ + "all", + "30d", + "60d", + "90d" + ], + "example": "90d", + "type": "string" + } + }, + "type": "object" + }, + "vlr.PlayerLine": { + "properties": { + "acs": { + "example": 297, + "type": "integer" + }, + "adr": { + "example": 178.3, + "type": "number" + }, + "agents": { + "example": [ + "Harbor" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "assists": { + "example": 12, + "type": "integer" + }, + "country_code": { + "example": "cn", + "type": "string" + }, + "deaths": { + "example": 23, + "type": "integer" + }, + "first_deaths": { + "example": 3, + "type": "integer" + }, + "first_kills": { + "example": 5, + "type": "integer" + }, + "fk_diff": { + "example": 2, + "type": "integer" + }, + "headshot_percent": { + "example": 24, + "type": "number" + }, + "id": { + "example": "66833", + "type": "string" + }, + "kast_percent": { + "example": 72, + "type": "number" + }, + "kd_diff": { + "example": 13, + "type": "integer" + }, + "kills": { + "example": 36, + "type": "integer" + }, + "name": { + "example": "Hopedawn", + "type": "string" + }, + "rating": { + "example": 1.12, + "type": "number" + }, + "team": { + "example": "UR", + "type": "string" + } + }, + "type": "object" + }, + "vlr.PlayerRef": { + "properties": { + "country_code": { + "example": "cl", + "type": "string" + }, + "id": { + "example": "29242", + "type": "string" + }, + "name": { + "example": "erde", + "type": "string" + }, + "team": { + "example": "LOUD", + "type": "string" + } + }, + "type": "object" + }, + "vlr.PlayerTeam": { + "properties": { + "id": { + "example": "21919", + "type": "string" + }, + "logo_url": { + "type": "string" + }, + "name": { + "example": "Unsettled Resentment", + "type": "string" + }, + "period": { + "example": "January 2025 - Present", + "type": "string" + }, + "tag": { + "example": "UR", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "vlr.RankingRow": { + "properties": { + "country": { + "example": "United States", + "type": "string" + }, + "earnings": { + "example": "$1,191,150", + "type": "string" + }, + "last_match_id": { + "example": "754743", + "type": "string" + }, + "rank": { + "example": 1, + "type": "integer" + }, + "rating": { + "example": 2000, + "type": "number" + }, + "record": { + "example": "62–35", + "type": "string" + }, + "streak": { + "example": "1L", + "type": "string" + }, + "team": { + "$ref": "#/definitions/vlr.TeamRef" + } + }, + "type": "object" + }, + "vlr.RankingsResponse": { + "properties": { + "count": { + "example": 50, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "region": { + "example": "north-america", + "type": "string" + }, + "source_url": { + "example": "https://www.vlr.gg/matches", + "type": "string" + }, + "teams": { + "items": { + "$ref": "#/definitions/vlr.RankingRow" + }, + "type": "array" + }, + "total": { + "example": 197, + "type": "integer" + } + }, + "type": "object" + }, + "vlr.Ratio": { + "properties": { + "played": { + "example": 8, + "type": "integer" + }, + "won": { + "example": 3, + "type": "integer" + } + }, + "type": "object" + }, + "vlr.RosterMember": { + "properties": { + "alias": { + "example": "Jamppi", + "type": "string" + }, + "country_code": { + "example": "fi", + "type": "string" + }, + "id": { + "example": "9780", + "type": "string" + }, + "image_url": { + "type": "string" + }, + "real_name": { + "example": "Elias Olkkonen", + "type": "string" + }, + "role": { + "enum": [ + "player", + "captain", + "coach", + "manager", + "analyst", + "staff" + ], + "example": "player", + "type": "string" + } + }, + "type": "object" + }, + "vlr.RoundEvent": { + "properties": { + "player": { + "example": "Derke", + "type": "string" + }, + "player_team": { + "example": "VIT", + "type": "string" + }, + "time": { + "example": "0:02", + "type": "string" + }, + "type": { + "enum": [ + "kill", + "plant", + "defuse" + ], + "example": "kill", + "type": "string" + }, + "victim": { + "example": "lukxo", + "type": "string" + }, + "weapon": { + "example": "Headhunter", + "type": "string" + } + }, + "type": "object" + }, + "vlr.RoundLoadout": { + "properties": { + "agent": { + "example": "Sage", + "type": "string" + }, + "armor": { + "example": "Light armor", + "type": "string" + }, + "credits_left": { + "example": 0, + "type": "integer" + }, + "player": { + "example": "erde", + "type": "string" + }, + "spent": { + "example": 800, + "type": "integer" + }, + "team": { + "example": "LOUD", + "type": "string" + }, + "weapon": { + "example": "Ghost", + "type": "string" + } + }, + "type": "object" + }, + "vlr.RoundLog": { + "properties": { + "attacking_team": { + "example": "LOUD", + "type": "string" + }, + "events": { + "items": { + "$ref": "#/definitions/vlr.RoundEvent" + }, + "type": "array" + }, + "loadouts": { + "items": { + "$ref": "#/definitions/vlr.RoundLoadout" + }, + "type": "array" + }, + "round": { + "example": 1, + "type": "integer" + }, + "score_after": { + "$ref": "#/definitions/vlr.RoundScore" + }, + "spike_detonated": { + "example": false, + "type": "boolean" + }, + "winner_team": { + "example": "Team Vitality", + "type": "string" + } + }, + "type": "object" + }, + "vlr.RoundScore": { + "properties": { + "team1": { + "example": 0, + "type": "integer" + }, + "team2": { + "example": 1, + "type": "integer" + } + }, + "type": "object" + }, + "vlr.RoundSplit": { + "properties": { + "attack": { + "example": 6, + "type": "integer" + }, + "defend": { + "example": 6, + "type": "integer" + }, + "overtime": { + "example": 5, + "type": "integer" + } + }, + "type": "object" + }, + "vlr.RoundsBlock": { + "properties": { + "game_id": { + "example": "283286", + "type": "string" + }, + "map": { + "example": "Summit", + "type": "string" + }, + "map_number": { + "example": 1, + "type": "integer" + }, + "rounds": { + "items": { + "$ref": "#/definitions/vlr.RoundLog" + }, + "type": "array" + } + }, + "type": "object" + }, + "vlr.SearchCounts": { + "properties": { + "events": { + "example": 5, + "type": "integer" + }, + "players": { + "example": 16, + "type": "integer" + }, + "teams": { + "example": 26, + "type": "integer" + } + }, + "type": "object" + }, + "vlr.SearchResponse": { + "properties": { + "count": { + "example": 47, + "type": "integer" + }, + "counts": { + "$ref": "#/definitions/vlr.SearchCounts" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "query": { + "example": "prime", + "type": "string" + }, + "results": { + "items": { + "$ref": "#/definitions/vlr.SearchResult" + }, + "type": "array" + }, + "source_url": { + "example": "https://www.vlr.gg/matches", + "type": "string" + }, + "type": { + "enum": [ + "all", + "teams", + "events", + "players" + ], + "example": "all", + "type": "string" + } + }, + "type": "object" + }, + "vlr.SearchResult": { + "properties": { + "date_range": { + "example": "May 27, 2026 to Jul 28, 2026", + "type": "string" + }, + "description": { + "example": "May 27, 2026 to Jul 28, 2026 ⋅ $500", + "type": "string" + }, + "id": { + "example": "2", + "type": "string" + }, + "image_url": { + "type": "string" + }, + "inactive": { + "example": true, + "type": "boolean" + }, + "kind": { + "enum": [ + "team", + "event", + "player" + ], + "example": "team", + "type": "string" + }, + "name": { + "example": "Sentinels", + "type": "string" + }, + "prize_pool": { + "example": "$500", + "type": "string" + }, + "successor": { + "example": "Into The Breach Prime", + "type": "string" + }, + "url": { + "example": "https://www.vlr.gg/team/2", + "type": "string" + } + }, + "type": "object" + }, + "vlr.StatsResponse": { + "properties": { + "count": { + "example": 50, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "has_more": { + "example": true, + "type": "boolean" + }, + "page": { + "example": 1, + "type": "integer" + }, + "players": { + "items": { + "$ref": "#/definitions/vlr.StatsRow" + }, + "type": "array" + }, + "source_url": { + "example": "https://www.vlr.gg/matches", + "type": "string" + } + }, + "type": "object" + }, + "vlr.StatsRow": { + "properties": { + "acs": { + "example": 224, + "type": "number" + }, + "adr": { + "example": 147.2, + "type": "number" + }, + "agent_usage": { + "example": [ + "54%" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "agents": { + "example": [ + "Jett" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "assists": { + "example": 289, + "type": "integer" + }, + "assists_per_round": { + "example": 0.38, + "type": "number" + }, + "clutch_percent": { + "example": 15, + "type": "number" + }, + "clutches_total": { + "example": 89, + "type": "integer" + }, + "clutches_won": { + "example": 13, + "type": "integer" + }, + "deaths": { + "example": 466, + "type": "integer" + }, + "first_death_percent": { + "example": 9, + "type": "number" + }, + "first_deaths": { + "example": 69, + "type": "integer" + }, + "first_kill_percent": { + "example": 10, + "type": "number" + }, + "first_kills": { + "example": 73, + "type": "integer" + }, + "fk_fd_ratio": { + "example": 1.06, + "type": "number" + }, + "headshot_percent": { + "example": 28, + "type": "number" + }, + "kast_percent": { + "example": 76, + "type": "number" + }, + "kd": { + "example": 1.27, + "type": "number" + }, + "kills": { + "example": 594, + "type": "integer" + }, + "kills_per_round": { + "example": 0.79, + "type": "number" + }, + "maps": { + "example": 35, + "type": "integer" + }, + "max_kills": { + "example": 28, + "type": "integer" + }, + "player": { + "$ref": "#/definitions/vlr.PlayerRef" + }, + "rating": { + "example": 1.22, + "type": "number" + }, + "rounds": { + "example": 752, + "type": "integer" + } + }, + "type": "object" + }, + "vlr.TeamComposition": { + "properties": { + "agents_used": { + "items": { + "type": "string" + }, + "type": "array" + }, + "matches": { + "items": { + "$ref": "#/definitions/vlr.CompositionMatch" + }, + "type": "array" + }, + "team": { + "example": "Dragon Ranger Gaming", + "type": "string" + }, + "team_id": { + "example": "11981", + "type": "string" + } + }, + "type": "object" + }, + "vlr.TeamDetail": { + "properties": { + "country": { + "example": "Europe", + "type": "string" + }, + "country_code": { + "example": "eu", + "type": "string" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "id": { + "example": "2059", + "type": "string" + }, + "links": { + "items": { + "type": "string" + }, + "type": "array" + }, + "logo_url": { + "type": "string" + }, + "name": { + "example": "Team Vitality", + "type": "string" + }, + "news": { + "items": { + "$ref": "#/definitions/vlr.NewsItem" + }, + "type": "array" + }, + "recent_matches": { + "items": { + "$ref": "#/definitions/vlr.TeamMatch" + }, + "type": "array" + }, + "roster": { + "items": { + "$ref": "#/definitions/vlr.RosterMember" + }, + "type": "array" + }, + "source_url": { + "example": "https://www.vlr.gg/matches", + "type": "string" + }, + "tag": { + "example": "VIT", + "type": "string" + } + }, + "type": "object" + }, + "vlr.TeamEconomy": { + "properties": { + "bonus_rounds": { + "$ref": "#/definitions/vlr.Ratio" + }, + "pistol_conversion": { + "$ref": "#/definitions/vlr.Ratio" + }, + "pistol_rounds": { + "$ref": "#/definitions/vlr.Ratio" + }, + "team": { + "example": "LOUD", + "type": "string" + } + }, + "type": "object" + }, + "vlr.TeamMapRow": { + "properties": { + "attack": { + "$ref": "#/definitions/vlr.MapSide" + }, + "defense": { + "$ref": "#/definitions/vlr.MapSide" + }, + "losses": { + "example": 25, + "type": "integer" + }, + "map": { + "example": "Bind", + "type": "string" + }, + "played": { + "example": 45, + "type": "integer" + }, + "win_percent": { + "example": 44, + "type": "number" + }, + "wins": { + "example": 20, + "type": "integer" + } + }, + "type": "object" + }, + "vlr.TeamMapsResponse": { + "properties": { + "count": { + "example": 12, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-27T10:00:00Z", + "type": "string" + }, + "maps": { + "items": { + "$ref": "#/definitions/vlr.TeamMapRow" + }, + "type": "array" + }, + "source_url": { + "example": "https://www.vlr.gg/matches", + "type": "string" + }, + "team_id": { + "example": "2059", + "type": "string" + } + }, + "type": "object" + }, + "vlr.TeamMatch": { + "properties": { + "date": { + "example": "2026/10/18", + "type": "string" + }, + "eta": { + "example": "1d 17h", + "type": "string" + }, + "event": { + "example": "Champions 2026", + "type": "string" + }, + "id": { + "example": "754737", + "type": "string" + }, + "opponent": { + "example": "LOUD", + "type": "string" + }, + "result": { + "enum": [ + "win", + "loss", + "upcoming" + ], + "example": "loss", + "type": "string" + }, + "score": { + "example": "1:3", + "type": "string" + }, + "stage": { + "example": "Playoffs ⋅ GF", + "type": "string" + }, + "team": { + "example": "Team Vitality", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "vlr.TeamRef": { + "properties": { + "id": { + "example": "21919", + "type": "string" + }, + "logo_url": { + "type": "string" + }, + "name": { + "example": "Unsettled Resentment", + "type": "string" + }, + "tag": { + "example": "UR", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "vlr.TeamScore": { + "properties": { + "id": { + "example": "21919", + "type": "string" + }, + "logo_url": { + "type": "string" + }, + "name": { + "example": "Unsettled Resentment", + "type": "string" + }, + "score": { + "example": 2, + "type": "integer" + }, + "tag": { + "example": "UR", + "type": "string" + }, + "url": { + "type": "string" + }, + "winner": { + "example": true, + "type": "boolean" + } + }, + "type": "object" + }, + "vox.AuthorArticle": { + "properties": { + "category": { + "type": "string" + }, + "excerpt": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "vox.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/vox.AuthorArticle" + }, + "type": "array" + }, + "bio": { + "type": "string" + }, + "job_title": { + "type": "string" + }, + "name": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.AmenityGroup": { + "properties": { + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.CalendarDate": { + "properties": { + "day": { + "type": "integer" + }, + "month": { + "type": "integer" + }, + "year": { + "type": "integer" + } + }, + "type": "object" + }, + "vrbo.Listing": { + "properties": { + "bedrooms": { + "type": "integer" + }, + "currency": { + "type": "string" + }, + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "price": { + "type": "number" + }, + "property_type": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "review_count": { + "type": "integer" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.LocationSuggestion": { + "properties": { + "geo_type": { + "type": "string" + }, + "location_full_name": { + "type": "string" + }, + "primary_text": { + "type": "string" + }, + "region_id": { + "type": "string" + }, + "secondary_text": { + "type": "string" + }, + "sub_items": { + "items": { + "$ref": "#/definitions/vrbo.LocationSuggestion" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.LocationSuggestionGroup": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/vrbo.LocationSuggestion" + }, + "type": "array" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.LocationSuggestionsResponse": { + "properties": { + "groups": { + "items": { + "$ref": "#/definitions/vrbo.LocationSuggestionGroup" + }, + "type": "array" + }, + "search_term": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.Photo": { + "properties": { + "description": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.Property": { + "properties": { + "amenities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "amenity_groups": { + "items": { + "$ref": "#/definitions/vrbo.AmenityGroup" + }, + "type": "array" + }, + "content_sections": { + "items": { + "$ref": "#/definitions/vrbo.PropertyContentSection" + }, + "type": "array" + }, + "description": { + "type": "string" + }, + "faqs": { + "items": { + "$ref": "#/definitions/vrbo.PropertyFAQ" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "location": { + "type": "string" + }, + "name": { + "type": "string" + }, + "photos": { + "items": { + "$ref": "#/definitions/vrbo.Photo" + }, + "type": "array" + }, + "rating": { + "type": "number" + }, + "rating_label": { + "type": "string" + }, + "review_count": { + "type": "integer" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.PropertyContentSection": { + "properties": { + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.PropertyFAQ": { + "properties": { + "answer": { + "type": "string" + }, + "question": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.PropertyReview": { + "properties": { + "author": { + "type": "string" + }, + "id": { + "type": "string" + }, + "locale": { + "type": "string" + }, + "management_responses": { + "items": { + "$ref": "#/definitions/vrbo.PropertyReviewResponse" + }, + "type": "array" + }, + "rating": { + "type": "number" + }, + "rating_label": { + "type": "string" + }, + "submission_time": { + "type": "string" + }, + "text": { + "type": "string" + }, + "title": { + "type": "string" + }, + "travelers": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "vrbo.PropertyReviewResponse": { + "properties": { + "header": { + "type": "string" + }, + "id": { + "type": "string" + }, + "response": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.RateCalendar": { + "properties": { + "configuration": { + "$ref": "#/definitions/vrbo.RateCalendarConfiguration" + }, + "days": { + "items": { + "$ref": "#/definitions/vrbo.RateCalendarDay" + }, + "type": "array" + }, + "product_id": { + "type": "string" + }, + "property_id": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "submit_button_label": { + "type": "string" + }, + "validation_message": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.RateCalendarConfiguration": { + "properties": { + "available_by_default": { + "type": "boolean" + }, + "begin_date": { + "$ref": "#/definitions/vrbo.CalendarDate" + }, + "calendar_template_type": { + "type": "string" + }, + "current_date": { + "$ref": "#/definitions/vrbo.CalendarDate" + }, + "end_date": { + "$ref": "#/definitions/vrbo.CalendarDate" + }, + "tnl_fields": { + "items": { + "$ref": "#/definitions/vrbo.RateCalendarField" + }, + "type": "array" + } + }, + "type": "object" + }, + "vrbo.RateCalendarDay": { + "properties": { + "accessibility_label": { + "type": "string" + }, + "available": { + "type": "boolean" + }, + "checkin_validity": { + "type": "boolean" + }, + "checkout_validity": { + "type": "boolean" + }, + "date": { + "$ref": "#/definitions/vrbo.CalendarDate" + }, + "display_price": { + "type": "string" + }, + "stay_constraints": { + "$ref": "#/definitions/vrbo.RateCalendarStayConstraints" + }, + "theme": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.RateCalendarField": { + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.RateCalendarStayConstraints": { + "properties": { + "maximum_stay_in_days": { + "type": "integer" + }, + "minimum_stay_in_days": { + "type": "integer" + }, + "stay_increment_in_days": { + "type": "integer" + } + }, + "type": "object" + }, + "vrbo.ReviewSortOption": { + "properties": { + "description": { + "type": "string" + }, + "label": { + "type": "string" + }, + "selected": { + "type": "boolean" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.ReviewsResponse": { + "properties": { + "product_id": { + "type": "string" + }, + "property_id": { + "type": "string" + }, + "reviews": { + "items": { + "$ref": "#/definitions/vrbo.PropertyReview" + }, + "type": "array" + }, + "size": { + "type": "integer" + }, + "sort_by": { + "type": "string" + }, + "sort_options": { + "items": { + "$ref": "#/definitions/vrbo.ReviewSortOption" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "start_index": { + "type": "integer" + }, + "total_count": { + "type": "integer" + } + }, + "type": "object" + }, + "vrbo.SearchFilterGroup": { + "properties": { + "control_type": { + "type": "string" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "options": { + "items": { + "$ref": "#/definitions/vrbo.SearchFilterOption" + }, + "type": "array" + }, + "range": { + "$ref": "#/definitions/vrbo.SearchFilterRange" + }, + "ranges": { + "description": "Ranges lists every range option nested under a range control. Range\nremains the first option for compatibility with the original response.", + "items": { + "$ref": "#/definitions/vrbo.SearchFilterRange" + }, + "type": "array" + }, + "section": { + "type": "string" + }, + "step_input": { + "$ref": "#/definitions/vrbo.SearchFilterStep" + } + }, + "type": "object" + }, + "vrbo.SearchFilterOption": { + "properties": { + "disabled": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "result_count": { + "type": "integer" + }, + "selected": { + "type": "boolean" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.SearchFilterRange": { + "properties": { + "id": { + "type": "string" + }, + "max": { + "type": "number" + }, + "max_label": { + "type": "string" + }, + "min": { + "type": "number" + }, + "min_label": { + "type": "string" + }, + "number_format": { + "type": "string" + }, + "selected_max": { + "type": "number" + }, + "selected_min": { + "type": "number" + }, + "step": { + "type": "number" + } + }, + "type": "object" + }, + "vrbo.SearchFilterRangeSelection": { + "properties": { + "id": { + "example": "nightly_price", + "type": "string" + }, + "max": { + "example": 500, + "type": "number" + }, + "min": { + "example": 100, + "type": "number" + } + }, + "type": "object" + }, + "vrbo.SearchFilterSelection": { + "properties": { + "id": { + "example": "property_type_group", + "type": "string" + }, + "values": { + "example": [ + "house" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "vrbo.SearchFilterStep": { + "properties": { + "current": { + "type": "integer" + }, + "default": { + "type": "integer" + }, + "label": { + "type": "string" + }, + "max": { + "type": "integer" + }, + "min": { + "type": "integer" + }, + "step": { + "type": "integer" + } + }, + "type": "object" + }, + "vrbo.SearchOption": { + "properties": { + "adults": { + "example": 2, + "type": "integer" + }, + "check_in": { + "example": "2026-10-10", + "type": "string" + }, + "check_out": { + "example": "2026-10-24", + "type": "string" + }, + "child_ages": { + "description": "ChildAges contains ages 2–17 for children in the default single room.", + "example": [ + 8, + 12 + ], + "items": { + "type": "integer" + }, + "type": "array" + }, + "destination": { + "example": "Miami Beach, Florida, United States of America", + "type": "string" + }, + "filter_ranges": { + "description": "Ranges applies numeric ranges by their live nested facet ID.", + "items": { + "$ref": "#/definitions/vrbo.SearchFilterRangeSelection" + }, + "type": "array" + }, + "filters": { + "description": "Filters are selections copied from the live facet metadata in a search response.", + "items": { + "$ref": "#/definitions/vrbo.SearchFilterSelection" + }, + "type": "array" + }, + "flexibility": { + "example": "3_DAY", + "type": "string" + }, + "lat_long": { + "example": "25.790653,-80.130043", + "type": "string" + }, + "limit": { + "example": 10, + "type": "integer" + }, + "region_id": { + "example": "8833", + "type": "string" + }, + "rooms": { + "description": "Rooms overrides Adults and ChildAges and supports multi-room searches.", + "items": { + "$ref": "#/definitions/vrbo.SearchRoom" + }, + "type": "array" + }, + "sort": { + "enum": [ + "RECOMMENDED", + "PRICE_LOW_TO_HIGH", + "PRICE_HIGH_TO_LOW", + "REVIEW", + "REVIEW_COUNT" + ], + "example": "PRICE_LOW_TO_HIGH", + "type": "string" + } + }, + "required": [ + "check_in", + "check_out", + "destination", + "lat_long", + "region_id" + ], + "type": "object" + }, + "vrbo.SearchResponse": { + "properties": { + "check_in": { + "type": "string" + }, + "check_out": { + "type": "string" + }, + "destination": { + "type": "string" + }, + "filters": { + "items": { + "$ref": "#/definitions/vrbo.SearchFilterGroup" + }, + "type": "array" + }, + "region_id": { + "type": "string" + }, + "results": { + "items": { + "$ref": "#/definitions/vrbo.Listing" + }, + "type": "array" + }, + "rooms": { + "items": { + "$ref": "#/definitions/vrbo.SearchRoom" + }, + "type": "array" + }, + "sort_options": { + "items": { + "$ref": "#/definitions/vrbo.SearchSortOption" + }, + "type": "array" + }, + "total_results": { + "type": "integer" + } + }, + "type": "object" + }, + "vrbo.SearchRoom": { + "properties": { + "adults": { + "example": 2, + "type": "integer" + }, + "child_ages": { + "example": [ + 8 + ], + "items": { + "type": "integer" + }, + "type": "array" + } + }, + "type": "object" + }, + "vrbo.SearchSortOption": { + "properties": { + "default": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "selected": { + "type": "boolean" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.TravelPage": { + "properties": { + "path": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.TravelPageDetail": { + "properties": { + "description": { + "type": "string" + }, + "editorial_sections": { + "items": { + "$ref": "#/definitions/vrbo.TravelPageEditorialSection" + }, + "type": "array" + }, + "path": { + "type": "string" + }, + "related_page_groups": { + "items": { + "$ref": "#/definitions/vrbo.TravelPageLinkGroup" + }, + "type": "array" + }, + "sections": { + "items": { + "$ref": "#/definitions/vrbo.TravelPageSection" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.TravelPageEditorialSection": { + "properties": { + "description": { + "type": "string" + }, + "parent_title": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.TravelPageLinkGroup": { + "properties": { + "pages": { + "items": { + "$ref": "#/definitions/vrbo.TravelPage" + }, + "type": "array" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.TravelPageListing": { + "properties": { + "description": { + "type": "string" + }, + "location": { + "type": "string" + }, + "name": { + "type": "string" + }, + "photos": { + "items": { + "$ref": "#/definitions/vrbo.Photo" + }, + "type": "array" + }, + "rating": { + "type": "number" + }, + "rating_label": { + "type": "string" + }, + "review_count": { + "type": "integer" + }, + "summary": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.TravelPageSection": { + "properties": { + "description": { + "type": "string" + }, + "listings": { + "items": { + "$ref": "#/definitions/vrbo.TravelPageListing" + }, + "type": "array" + }, + "subtitle": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.TravelPagesResponse": { + "properties": { + "pages": { + "items": { + "$ref": "#/definitions/vrbo.TravelPage" + }, + "type": "array" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "vrbo.vrboLocationSuggestionsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/vrbo.LocationSuggestionsResponse" + } + }, + "type": "object" + }, + "vrbo.vrboPropertyResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/vrbo.Property" + } + }, + "type": "object" + }, + "vrbo.vrboRateCalendarResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/vrbo.RateCalendar" + } + }, + "type": "object" + }, + "vrbo.vrboReviewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/vrbo.ReviewsResponse" + } + }, + "type": "object" + }, + "vrbo.vrboSearchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/vrbo.SearchResponse" + } + }, + "type": "object" + }, + "vrbo.vrboTravelPageDetailResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/vrbo.TravelPageDetail" + } + }, + "type": "object" + }, + "vrbo.vrboTravelPagesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/vrbo.TravelPagesResponse" + } + }, + "type": "object" + }, + "walgreens.Store": { + "properties": { + "address_line1": { + "type": "string" + }, + "brand": { + "type": "string" + }, + "city": { + "type": "string" + }, + "county": { + "type": "string" + }, + "distance_miles": { + "type": "number" + }, + "fax": { + "type": "string" + }, + "intersection": { + "type": "string" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "name": { + "type": "string" + }, + "pharmacy_close_time": { + "type": "string" + }, + "pharmacy_open_time": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "services": { + "items": { + "type": "string" + }, + "type": "array" + }, + "state": { + "type": "string" + }, + "store_close_time": { + "type": "string" + }, + "store_number": { + "type": "string" + }, + "store_open_time": { + "type": "string" + }, + "store_type": { + "type": "string" + }, + "time_zone": { + "type": "string" + }, + "zip": { + "type": "string" + } + }, + "type": "object" + }, + "walgreens.StoresResponse": { + "properties": { + "stores": { + "items": { + "$ref": "#/definitions/walgreens.Store" + }, + "type": "array" + }, + "total_count": { + "type": "integer" + } + }, + "type": "object" + }, + "walgreens.storesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/walgreens.StoresResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wallapop.CategoriesResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/wallapop.Category" + }, + "type": "array" + }, + "count": { + "example": 997, + "type": "integer" + }, + "fetched_at": { + "example": "2026-10-25T00:00:00Z", + "type": "string" + }, + "max_depth": { + "example": 5, + "type": "integer" + }, + "root_count": { + "example": 18, + "type": "integer" + }, + "source_url": { + "example": "https://api.wallapop.com/api/v3/categories?context=search", + "type": "string" + } + }, + "type": "object" + }, + "wallapop.Category": { + "properties": { + "depth": { + "example": 1, + "type": "integer" + }, + "id": { + "example": 12465, + "type": "integer" + }, + "is_leaf": { + "example": false, + "type": "boolean" + }, + "name": { + "example": "Fashion & accessories", + "type": "string" + }, + "parent_id": { + "example": 11002, + "type": "integer" + }, + "path": { + "example": "fashion-and-accessories/women", + "type": "string" + }, + "root_id": { + "example": 12465, + "type": "integer" + }, + "vertical_id": { + "example": "fashion", + "type": "string" + } + }, + "type": "object" + }, + "wallapop.FilterDefinition": { + "properties": { + "format": { + "type": "string" + }, + "id": { + "type": "string" + }, + "is_search_enabled": { + "type": "boolean" + }, + "label": { + "type": "string" + }, + "options": { + "items": { + "$ref": "#/definitions/wallapop.FilterOption" + }, + "type": "array" + }, + "options_endpoint": { + "type": "string" + }, + "reload_when_changed": { + "type": "boolean" + }, + "search_params": { + "additionalProperties": { + "$ref": "#/definitions/wallapop.FilterParamBinding" + }, + "type": "object" + }, + "selection": { + "type": "string" + }, + "source": { + "type": "string" + }, + "steps": { + "items": { + "$ref": "#/definitions/wallapop.FilterRangeStep" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "unit": { + "type": "string" + } + }, + "type": "object" + }, + "wallapop.FilterOption": { + "properties": { + "id": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "wallapop.FilterOptionsResponse": { + "properties": { + "brand": { + "type": "string" + }, + "category_id": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "filter_id": { + "type": "string" + }, + "next_cursor": { + "type": "string" + }, + "options": { + "items": { + "$ref": "#/definitions/wallapop.FilterOption" + }, + "type": "array" + }, + "options_query": { + "type": "string" + }, + "page_size": { + "type": "integer" + }, + "q": { + "type": "string" + }, + "sort": { + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "wallapop.FilterParamBinding": { + "properties": { + "param_key": { + "type": "string" + }, + "param_value": { + "type": "string" + } + }, + "type": "object" + }, + "wallapop.FilterRangeStep": { + "properties": { + "end": { + "type": "number" + }, + "increment": { + "type": "number" + }, + "start": { + "type": "number" + } + }, + "type": "object" + }, + "wallapop.FiltersResponse": { + "properties": { + "category_id": { + "type": "integer" + }, + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "filters": { + "items": { + "$ref": "#/definitions/wallapop.FilterDefinition" + }, + "type": "array" + }, + "query": { + "type": "string" + }, + "root_category_id": { + "type": "integer" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "wallapop.ItemDetailAttribute": { + "properties": { + "key": { + "type": "string" + }, + "text": { + "type": "string" + }, + "title": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "wallapop.ItemDetailCharacteristic": { + "properties": { + "attribute": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "wallapop.ItemDetailCondition": { + "properties": { + "text": { + "type": "string" + }, + "title": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "wallapop.ItemDetailRelatedSearch": { + "properties": { + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wallapop.ItemDetailResponse": { + "properties": { + "attributes": { + "items": { + "$ref": "#/definitions/wallapop.ItemDetailAttribute" + }, + "type": "array" + }, + "category_id": { + "type": "integer" + }, + "characteristics": { + "items": { + "$ref": "#/definitions/wallapop.ItemDetailCharacteristic" + }, + "type": "array" + }, + "condition": { + "$ref": "#/definitions/wallapop.ItemDetailCondition" + }, + "currency": { + "type": "string" + }, + "description": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "hashtags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "location": { + "$ref": "#/definitions/wallapop.ListingLocation" + }, + "price": { + "type": "number" + }, + "related_searches": { + "items": { + "$ref": "#/definitions/wallapop.ItemDetailRelatedSearch" + }, + "type": "array" + }, + "shipping": { + "$ref": "#/definitions/wallapop.ListingShipping" + }, + "slug": { + "type": "string" + }, + "taxonomy": { + "items": { + "$ref": "#/definitions/wallapop.ListingTaxonomy" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wallapop.ListingCard": { + "properties": { + "category_id": { + "type": "integer" + }, + "currency": { + "type": "string" + }, + "id": { + "type": "string" + }, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "location": { + "$ref": "#/definitions/wallapop.ListingLocation" + }, + "price": { + "type": "number" + }, + "shipping": { + "$ref": "#/definitions/wallapop.ListingShipping" + }, + "slug": { + "type": "string" + }, + "taxonomy": { + "items": { + "$ref": "#/definitions/wallapop.ListingTaxonomy" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wallapop.ListingLocation": { + "properties": { + "city": { + "type": "string" + }, + "country_code": { + "type": "string" + }, + "region": { + "type": "string" + }, + "region2": { + "type": "string" + } + }, + "type": "object" + }, + "wallapop.ListingShipping": { + "properties": { + "item_is_shippable": { + "type": "boolean" + }, + "user_allows_shipping": { + "type": "boolean" + } + }, + "type": "object" + }, + "wallapop.ListingTaxonomy": { + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "wallapop.SearchResponse": { + "properties": { + "category_id": { + "type": "integer" + }, + "count": { + "type": "integer" + }, + "country_code": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/wallapop.ListingCard" + }, + "type": "array" + }, + "next_cursor": { + "type": "string" + }, + "query": { + "type": "string" + }, + "sort": { + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "wallapop.categoriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wallapop.CategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wallapop.filterOptionsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wallapop.FilterOptionsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wallapop.filtersResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wallapop.FiltersResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wallapop.itemDetailResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wallapop.ItemDetailResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wallapop.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wallapop.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "walmart.Product": { + "properties": { + "attributes": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "availability": { + "example": "IN_STOCK", + "type": "string" + }, + "brand": { + "example": "Apple", + "type": "string" + }, + "canonical_url": { + "example": "https://www.walmart.com/ip/5689919121", + "type": "string" + }, + "category": { + "example": "Electronics", + "type": "string" + }, + "currency": { + "example": "USD", + "type": "string" + }, + "description": { + "example": "Wireless earbuds with active noise cancellation.", + "type": "string" + }, + "highlights": { + "items": { + "type": "string" + }, + "type": "array" + }, + "image": { + "example": "https://i5.walmartimages.com/seo/example.jpeg", + "type": "string" + }, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "is_sponsored": { + "example": false, + "type": "boolean" + }, + "item_id": { + "example": "5689919121", + "type": "string" + }, + "price": { + "example": 169, + "type": "number" + }, + "price_text": { + "example": "$169.00", + "type": "string" + }, + "product_id": { + "example": "5689919121", + "type": "string" + }, + "rating": { + "example": 4.6, + "type": "number" + }, + "review_count": { + "example": 17823, + "type": "integer" + }, + "seller_name": { + "example": "Walmart.com", + "type": "string" + }, + "title": { + "example": "Apple AirPods Pro 2", + "type": "string" + }, + "variants": { + "items": { + "$ref": "#/definitions/walmart.ProductSummary" + }, + "type": "array" + } + }, + "type": "object" + }, + "walmart.ProductSummary": { + "properties": { + "availability": { + "example": "IN_STOCK", + "type": "string" + }, + "brand": { + "example": "Apple", + "type": "string" + }, + "canonical_url": { + "example": "https://www.walmart.com/ip/5689919121", + "type": "string" + }, + "currency": { + "example": "USD", + "type": "string" + }, + "image": { + "example": "https://i5.walmartimages.com/seo/example.jpeg", + "type": "string" + }, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "is_sponsored": { + "example": false, + "type": "boolean" + }, + "item_id": { + "example": "5689919121", + "type": "string" + }, + "price": { + "example": 169, + "type": "number" + }, + "price_text": { + "example": "$169.00", + "type": "string" + }, + "product_id": { + "example": "5689919121", + "type": "string" + }, + "rating": { + "example": 4.6, + "type": "number" + }, + "review_count": { + "example": 17823, + "type": "integer" + }, + "seller_name": { + "example": "Walmart.com", + "type": "string" + }, + "title": { + "example": "Apple AirPods Pro 2", + "type": "string" + } + }, + "type": "object" + }, + "walmart.RatingBreakdown": { + "properties": { + "five_star": { + "description": "Number of 5-star ratings on the product.", + "example": 1698, + "type": "integer" + }, + "four_star": { + "description": "Number of 4-star ratings on the product.", + "example": 273, + "type": "integer" + }, + "one_star": { + "description": "Number of 1-star ratings on the product.", + "example": 215, + "type": "integer" + }, + "three_star": { + "description": "Number of 3-star ratings on the product.", + "example": 150, + "type": "integer" + }, + "two_star": { + "description": "Number of 2-star ratings on the product.", + "example": 116, + "type": "integer" + } + }, + "type": "object" + }, + "walmart.Review": { + "properties": { + "author": { + "description": "Nickname of the reviewer.", + "example": "MusicFan", + "type": "string" + }, + "negative_feedback": { + "description": "Number of shoppers who voted the review not helpful.", + "example": 1, + "type": "integer" + }, + "positive_feedback": { + "description": "Number of shoppers who voted the review helpful.", + "example": 12, + "type": "integer" + }, + "rating": { + "description": "Star rating the reviewer gave, out of 5.", + "example": 5, + "type": "number" + }, + "review_id": { + "description": "Walmart review id.", + "example": "406499690", + "type": "string" + }, + "submission_date": { + "description": "Date the review was submitted, as Walmart shows it, for example `11/30/2025`.", + "example": "11/30/2025", + "type": "string" + }, + "text": { + "description": "Body text of the review.", + "type": "string" + }, + "title": { + "description": "Headline the reviewer gave the review.", + "example": "Great sound", + "type": "string" + } + }, + "type": "object" + }, + "walmart.ReviewsResponse": { + "properties": { + "average_rating": { + "description": "Average star rating of the product, out of 5.", + "example": 4.3, + "type": "number" + }, + "item_id": { + "description": "Walmart item id the reviews belong to.", + "example": "5689919121", + "type": "string" + }, + "rating_counts": { + "allOf": [ + { + "$ref": "#/definitions/walmart.RatingBreakdown" + } + ], + "description": "Number of ratings the product received at each star level." + }, + "recommended_percent": { + "description": "Percentage of reviewers who recommend the product.", + "example": 87, + "type": "number" + }, + "reviews": { + "description": "Sample of recent customer reviews shown on the product page.", + "items": { + "$ref": "#/definitions/walmart.Review" + }, + "type": "array" + }, + "reviews_with_text_count": { + "description": "Number of reviews that include written text.", + "example": 1345, + "type": "integer" + }, + "top_negative_review": { + "allOf": [ + { + "$ref": "#/definitions/walmart.Review" + } + ], + "description": "Most helpful critical review Walmart highlights. Omitted when there is none." + }, + "top_positive_review": { + "allOf": [ + { + "$ref": "#/definitions/walmart.Review" + } + ], + "description": "Most helpful positive review Walmart highlights. Omitted when there is none." + }, + "total_review_count": { + "description": "Total number of reviews on the product.", + "example": 2452, + "type": "integer" + } + }, + "type": "object" + }, + "walmart.SearchResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/walmart.ProductSummary" + }, + "type": "array" + }, + "page": { + "example": 1, + "type": "integer" + }, + "query": { + "example": "lego", + "type": "string" + }, + "total_results": { + "example": 1200, + "type": "integer" + } + }, + "type": "object" + }, + "walmart.productResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/walmart.Product" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "walmart.reviewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/walmart.ReviewsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "walmart.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/walmart.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wapo.ArticleResponse": { + "properties": { + "authors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "description": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "published_at": { + "type": "string" + }, + "section": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wapo.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/wapo.HeadlineItem" + }, + "type": "array" + }, + "author_type": { + "type": "string" + }, + "bio": { + "type": "string" + }, + "email": { + "type": "string" + }, + "expertise": { + "type": "string" + }, + "facebook_url": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "linkedin_url": { + "type": "string" + }, + "location": { + "type": "string" + }, + "name": { + "type": "string" + }, + "page": { + "type": "integer" + }, + "role": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "total_count": { + "type": "integer" + }, + "total_pages": { + "type": "integer" + }, + "twitter_url": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wapo.HeadlineItem": { + "properties": { + "description": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "section": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wapo.HeadlinesResponse": { + "properties": { + "count": { + "type": "integer" + }, + "has_more": { + "type": "boolean" + }, + "items": { + "items": { + "$ref": "#/definitions/wapo.HeadlineItem" + }, + "type": "array" + }, + "section": { + "type": "string" + } + }, + "type": "object" + }, + "wapo.NewsItem": { + "properties": { + "last_modified": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wapo.NewsResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/wapo.NewsItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "wapo.Section": { + "properties": { + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wapo.SectionsResponse": { + "properties": { + "sections": { + "items": { + "$ref": "#/definitions/wapo.Section" + }, + "type": "array" + } + }, + "type": "object" + }, + "wapo.articleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wapo.ArticleResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wapo.authorResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wapo.AuthorResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wapo.headlinesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wapo.HeadlinesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wapo.newsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wapo.NewsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wapo.sectionsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wapo.SectionsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wattpad.Author": { + "properties": { + "avatar": { + "type": "string" + }, + "name": { + "type": "string" + }, + "username": { + "type": "string" + }, + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "wattpad.CategoriesResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/wattpad.Category" + }, + "type": "array" + } + }, + "type": "object" + }, + "wattpad.Category": { + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "name_english": { + "type": "string" + } + }, + "type": "object" + }, + "wattpad.Comment": { + "properties": { + "author": { + "type": "string" + }, + "author_avatar": { + "type": "string" + }, + "body": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "id": { + "type": "string" + }, + "is_reply": { + "type": "boolean" + }, + "parent_id": { + "type": "string" + }, + "replies": { + "type": "integer" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wattpad.Language": { + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "wattpad.LanguagesResponse": { + "properties": { + "languages": { + "items": { + "$ref": "#/definitions/wattpad.Language" + }, + "type": "array" + } + }, + "type": "object" + }, + "wattpad.Part": { + "properties": { + "comments": { + "type": "integer" + }, + "created_at": { + "type": "string" + }, + "draft": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "length": { + "type": "integer" + }, + "modified_at": { + "type": "string" + }, + "reads": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + }, + "votes": { + "type": "integer" + }, + "word_count": { + "type": "integer" + } + }, + "type": "object" + }, + "wattpad.PartCommentsResponse": { + "properties": { + "comments": { + "items": { + "$ref": "#/definitions/wattpad.Comment" + }, + "type": "array" + }, + "limit": { + "type": "integer" + }, + "next_offset": { + "description": "NextOffset is the offset of the next page; absent when this page held\nfewer comments than were asked for, which means it was the last.", + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "part_id": { + "type": "string" + } + }, + "type": "object" + }, + "wattpad.PartDetail": { + "properties": { + "comments": { + "type": "integer" + }, + "created_at": { + "type": "string" + }, + "draft": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "length": { + "type": "integer" + }, + "modified_at": { + "type": "string" + }, + "reads": { + "type": "integer" + }, + "story_id": { + "type": "string" + }, + "story_title": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + }, + "votes": { + "type": "integer" + }, + "word_count": { + "type": "integer" + } + }, + "type": "object" + }, + "wattpad.PartResponse": { + "properties": { + "part": { + "$ref": "#/definitions/wattpad.PartDetail" + } + }, + "type": "object" + }, + "wattpad.RecommendationsResponse": { + "properties": { + "stories": { + "items": { + "$ref": "#/definitions/wattpad.Story" + }, + "type": "array" + }, + "story_id": { + "type": "string" + } + }, + "type": "object" + }, + "wattpad.SearchResponse": { + "properties": { + "limit": { + "type": "integer" + }, + "next_offset": { + "description": "NextOffset is the offset of the next page, absent on the last one. A\npage can hold fewer than limit stories (or none) when Wattpad filters\nafter paging, so advance by next_offset rather than by the item count.", + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "stories": { + "items": { + "$ref": "#/definitions/wattpad.Story" + }, + "type": "array" + }, + "total": { + "description": "Total is the number of matches Wattpad reports; browse requests (no\ntext query) are capped at 1500.", + "type": "integer" + } + }, + "type": "object" + }, + "wattpad.SearchUsersResponse": { + "properties": { + "limit": { + "type": "integer" + }, + "next_offset": { + "description": "NextOffset is the offset of the next page; it is absent when this page\nheld fewer users than were asked for.", + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "users": { + "items": { + "$ref": "#/definitions/wattpad.UserSummary" + }, + "type": "array" + } + }, + "type": "object" + }, + "wattpad.Story": { + "properties": { + "author": { + "$ref": "#/definitions/wattpad.Author" + }, + "category_ids": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "comments": { + "type": "integer" + }, + "completed": { + "type": "boolean" + }, + "cover": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "language": { + "$ref": "#/definitions/wattpad.Language" + }, + "mature": { + "type": "boolean" + }, + "modified_at": { + "type": "string" + }, + "parts": { + "type": "integer" + }, + "reads": { + "type": "integer" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + }, + "votes": { + "type": "integer" + } + }, + "type": "object" + }, + "wattpad.StoryDetail": { + "properties": { + "author": { + "$ref": "#/definitions/wattpad.Author" + }, + "category_ids": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "comments": { + "type": "integer" + }, + "completed": { + "type": "boolean" + }, + "copyright": { + "type": "integer" + }, + "cover": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "description": { + "type": "string" + }, + "first_part_id": { + "type": "string" + }, + "id": { + "type": "string" + }, + "language": { + "$ref": "#/definitions/wattpad.Language" + }, + "last_published_at": { + "type": "string" + }, + "mature": { + "type": "boolean" + }, + "modified_at": { + "type": "string" + }, + "paid_model": { + "type": "string" + }, + "parts": { + "type": "integer" + }, + "paywalled": { + "type": "boolean" + }, + "rating": { + "type": "integer" + }, + "reads": { + "type": "integer" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + }, + "votes": { + "type": "integer" + } + }, + "type": "object" + }, + "wattpad.StoryPartsResponse": { + "properties": { + "parts": { + "items": { + "$ref": "#/definitions/wattpad.Part" + }, + "type": "array" + }, + "story_id": { + "type": "string" + }, + "title": { + "type": "string" + }, + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "wattpad.StoryResponse": { + "properties": { + "story": { + "$ref": "#/definitions/wattpad.StoryDetail" + } + }, + "type": "object" + }, + "wattpad.UserProfile": { + "properties": { + "ambassador": { + "type": "boolean" + }, + "avatar": { + "type": "string" + }, + "background": { + "type": "string" + }, + "description": { + "type": "string" + }, + "followers": { + "type": "integer" + }, + "following": { + "type": "integer" + }, + "joined_at": { + "type": "string" + }, + "lists": { + "type": "integer" + }, + "location": { + "type": "string" + }, + "modified_at": { + "type": "string" + }, + "name": { + "type": "string" + }, + "stories_published": { + "type": "integer" + }, + "url": { + "type": "string" + }, + "username": { + "type": "string" + }, + "verified": { + "type": "boolean" + }, + "votes_received": { + "type": "integer" + }, + "website": { + "type": "string" + } + }, + "type": "object" + }, + "wattpad.UserResponse": { + "properties": { + "user": { + "$ref": "#/definitions/wattpad.UserProfile" + } + }, + "type": "object" + }, + "wattpad.UserStoriesResponse": { + "properties": { + "limit": { + "type": "integer" + }, + "next_offset": { + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "stories": { + "items": { + "$ref": "#/definitions/wattpad.Story" + }, + "type": "array" + }, + "total": { + "type": "integer" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "wattpad.UserSummary": { + "properties": { + "avatar": { + "type": "string" + }, + "description": { + "type": "string" + }, + "followers": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "stories_published": { + "type": "integer" + }, + "username": { + "type": "string" + }, + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "wattpad.categoriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wattpad.CategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wattpad.languagesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wattpad.LanguagesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wattpad.partCommentsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wattpad.PartCommentsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wattpad.partResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wattpad.PartResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wattpad.recommendationsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wattpad.RecommendationsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wattpad.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wattpad.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wattpad.searchUsersResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wattpad.SearchUsersResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wattpad.storyPartsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wattpad.StoryPartsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wattpad.storyResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wattpad.StoryResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wattpad.userResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wattpad.UserResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wattpad.userStoriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wattpad.UserStoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wayfair.CategoriesResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/wayfair.CategoryRef" + }, + "type": "array" + }, + "has_next": { + "example": true, + "type": "boolean" + }, + "page": { + "example": 1, + "type": "integer" + }, + "page_size": { + "example": 100, + "type": "integer" + }, + "total": { + "example": 1521, + "type": "integer" + } + }, + "type": "object" + }, + "wayfair.CategoryRef": { + "properties": { + "department": { + "example": "baby-kids", + "type": "string" + }, + "id": { + "example": "1829184", + "type": "string" + }, + "name": { + "example": "Kids Shower Curtains", + "type": "string" + }, + "url": { + "example": "https://www.wayfair.com/baby-kids/sb0/kids-shower-curtains-c1829184.html", + "type": "string" + } + }, + "type": "object" + }, + "wayfair.CategoryResponse": { + "properties": { + "category": { + "type": "string" + }, + "category_id": { + "type": "string" + }, + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "has_more": { + "type": "boolean" + }, + "page": { + "type": "integer" + }, + "products": { + "items": { + "$ref": "#/definitions/wayfair.ProductSummary" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "total_count": { + "type": "integer" + } + }, + "type": "object" + }, + "wayfair.ProductDetailResponse": { + "properties": { + "brand_name": { + "type": "string" + }, + "currency_code": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "highlights": { + "description": "Highlights are Wayfair's own site-selected feature bullets (its \"Why\nWe Love It\" section), the closest available substitute for a\nmarketing description -- a distinct marketing description field was\nnot found in the page's initial data.", + "items": { + "type": "string" + }, + "type": "array" + }, + "images": { + "description": "Images lists every distinct product image found on the page.", + "items": { + "type": "string" + }, + "type": "array" + }, + "in_stock": { + "type": "boolean" + }, + "original_price": { + "type": "string" + }, + "price": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "product_name": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "rating_breakdown": { + "additionalProperties": { + "type": "integer" + }, + "description": "RatingBreakdown maps each star value (\"1\" through \"5\") to the number\nof reviews with that rating.", + "type": "object" + }, + "rating_count": { + "description": "RatingCount is the product's total review count, sourced from the\npage's own aggregate rating summary.", + "type": "integer" + }, + "selected_color": { + "description": "SelectedColor is the color variant this page rendered (from its own\nURL/piid) -- kept for backward compatibility. VariantCategories below\ncovers every variant dimension's full option list, not just the one\nselected color.", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "stock_message": { + "description": "StockMessage is Wayfair's own inventory status text (e.g. \"795 Left\nin Stock\"), surfaced verbatim since it is more informative than a\nplain boolean.", + "type": "string" + }, + "url": { + "type": "string" + }, + "variant_categories": { + "description": "VariantCategories lists every variant dimension this product offers\n(e.g. \"Base Finish\", \"Upholstery Color\", \"Cord Color\") with every one\nof its options -- not just the single option SelectedColor covers.\nEach option's Available reflects both whether it can be selected\ntogether with the product's other currently-selected variant choices\nand, when known, its own stock status -- confirmed live 2026-08-11\nagainst Wayfair's own PDP data (see service.go's doc comment).", + "items": { + "$ref": "#/definitions/wayfair.VariantCategory" + }, + "type": "array" + } + }, + "type": "object" + }, + "wayfair.ProductSummary": { + "properties": { + "brand_name": { + "type": "string" + }, + "currency_code": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "original_price": { + "type": "string" + }, + "price": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "product_name": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wayfair.VariantCategory": { + "properties": { + "name": { + "type": "string" + }, + "options": { + "items": { + "$ref": "#/definitions/wayfair.VariantOption" + }, + "type": "array" + } + }, + "type": "object" + }, + "wayfair.VariantOption": { + "properties": { + "available": { + "description": "Available is false when this option cannot be selected together\nwith the product's other currently-selected variant choices, or\n(when its stock status is known) when it is itself out of stock.", + "type": "boolean" + }, + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "selected": { + "description": "Selected is true for the option this page's own URL/piid rendered\n(the same option SelectedColor names, for whichever category it\nbelongs to).", + "type": "boolean" + } + }, + "type": "object" + }, + "wayfair.categoriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wayfair.CategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wayfair.categoryResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wayfair.CategoryResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wayfair.productDetailResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wayfair.ProductDetailResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wccftech.AuthorArticle": { + "properties": { + "image_url": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wccftech.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/wccftech.AuthorArticle" + }, + "type": "array" + }, + "bio": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "role": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "web.ScrapeInfo": { + "properties": { + "backend": { + "description": "headless backend that rendered, when method=browser", + "type": "string" + }, + "cache_state": { + "description": "\"hit\" | \"miss\" — whether this response came from the cache", + "type": "string" + }, + "cached_at": { + "description": "RFC3339 time the served copy was fetched (cache hits only)", + "type": "string" + }, + "escalated": { + "description": "true when the fetch escalated from HTTP to a headless browser", + "type": "boolean" + }, + "method": { + "description": "\"http\" | \"browser\"", + "type": "string" + }, + "render_failed": { + "description": "RenderFailed is true when a browser render was requested (render=browser or a\npinned backend) but no backend produced a page, so the content is the\nHTTP-tier fallback. Such a page ran no JavaScript and is billed at the\nHTTP-tier price.", + "type": "boolean" + } + }, + "type": "object" + }, + "web.ScrapeLink": { + "properties": { + "href": { + "type": "string" + }, + "rel": { + "type": "string" + }, + "text": { + "type": "string" + } + }, + "type": "object" + }, + "web.ScrapeMetadata": { + "properties": { + "author": { + "type": "string" + }, + "canonical_url": { + "type": "string" + }, + "content_type": { + "type": "string" + }, + "description": { + "type": "string" + }, + "final_url": { + "type": "string" + }, + "image": { + "type": "string" + }, + "language": { + "type": "string" + }, + "modified_at": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "section": { + "type": "string" + }, + "site_name": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "status_code": { + "type": "integer" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "web.ScrapeOption": { + "properties": { + "backend": { + "example": "", + "type": "string" + }, + "dedicated": { + "type": "boolean" + }, + "formats": { + "example": [ + "markdown" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "max_age": { + "example": 604800000, + "type": "integer" + }, + "only_main_content": { + "type": "boolean" + }, + "proxy": { + "example": "", + "type": "string" + }, + "render": { + "enum": [ + "auto", + "http", + "browser", + "unblocker" + ], + "example": "auto", + "type": "string" + }, + "store_in_cache": { + "type": "boolean" + }, + "url": { + "example": "https://example.com", + "type": "string" + }, + "wait_for": { + "example": 0, + "type": "integer" + } + }, + "required": [ + "url" + ], + "type": "object" + }, + "web.ScrapeResult": { + "properties": { + "html": { + "type": "string" + }, + "link_details": { + "items": { + "$ref": "#/definitions/web.ScrapeLink" + }, + "type": "array" + }, + "links": { + "items": { + "type": "string" + }, + "type": "array" + }, + "markdown": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/web.ScrapeMetadata" + }, + "raw_html": { + "type": "string" + }, + "scrape": { + "$ref": "#/definitions/web.ScrapeInfo" + } + }, + "type": "object" + }, + "web.TechStackOption": { + "properties": { + "render": { + "enum": [ + "browser", + "auto", + "http" + ], + "example": "browser", + "type": "string" + }, + "url": { + "example": "https://www.example.com", + "type": "string" + } + }, + "required": [ + "url" + ], + "type": "object" + }, + "web.TechStackResult": { + "properties": { + "categories": { + "items": { + "type": "string" + }, + "type": "array" + }, + "count": { + "type": "integer" + }, + "detector_version": { + "type": "string" + }, + "failure_reason": { + "type": "string" + }, + "final_url": { + "type": "string" + }, + "is_infrastructure": { + "description": "IsInfrastructure is true when the URL's host looks like backend\ninfrastructure (a CDN, DNS, or cloud-vendor hostname) rather than a\nreal, human-navigable website.", + "type": "boolean" + }, + "reachable": { + "type": "boolean" + }, + "technologies": { + "items": { + "$ref": "#/definitions/techstack.Technology" + }, + "type": "array" + }, + "unmatched_evidence": { + "allOf": [ + { + "$ref": "#/definitions/techstack.UnmatchedEvidence" + } + ], + "description": "UnmatchedEvidence is the third-party script/stylesheet host domains and\n value seen on the page that don't match any current\nsignature — useful for spotting a vendor worth requesting coverage for." + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "web.billingRejectionDoc": { + "properties": { + "credit_cost": { + "description": "credit_cost is what the rejected request would have cost. Credit rejections only.", + "example": 1, + "type": "integer" + }, + "credits_included": { + "description": "credits_included is the plan's credit allowance for the period. Credit rejections only.", + "example": 2000, + "type": "integer" + }, + "credits_remaining": { + "description": "credits_remaining is what is left this period. Credit rejections only.", + "example": 0, + "type": "integer" + }, + "credits_used": { + "description": "credits_used is credits spent so far this period. Credit rejections only.", + "example": 2000, + "type": "integer" + }, + "daily_credit_limit": { + "description": "daily_credit_limit is the plan's daily cap; 0 means no daily cap. Credit rejections only.", + "example": 500, + "type": "integer" + }, + "daily_credits_remaining": { + "description": "daily_credits_remaining is what is left today (UTC). Credit rejections only.", + "example": 0, + "type": "integer" + }, + "daily_credits_used": { + "description": "daily_credits_used is credits spent so far today (UTC). Credit rejections only.", + "example": 500, + "type": "integer" + }, + "message": { + "description": "message is a human-readable explanation of the rejection.", + "example": "Your Free plan's 2000 monthly credits are used up. They reset at 2026-08-02T00:00:00Z.", + "type": "string" + }, + "plan": { + "description": "plan is the caller's current plan.", + "example": "Free", + "type": "string" + }, + "rate_limit_per_minute": { + "description": "rate_limit_per_minute is the plan's request rate. rate_limited only.", + "example": 5, + "type": "integer" + }, + "reason": { + "description": "reason identifies the limit that was hit.", + "enum": [ + "insufficient_credits", + "daily_credit_limit", + "rate_limited", + "ip_rate_limited" + ], + "example": "insufficient_credits", + "type": "string" + }, + "reset_scope": { + "description": "reset_scope names the window that clears this rejection.", + "enum": [ + "daily", + "monthly", + "minute", + "ip_window" + ], + "example": "monthly", + "type": "string" + }, + "resets_at": { + "description": "resets_at is when that window next rolls over, so the caller knows when\nrequests will succeed again without any action. Omitted only for an\ninsufficient_credits rejection whose billing period is not on record (a\nstate that predates period tracking).", + "example": "2026-08-02T00:00:00Z", + "type": "string" + }, + "retry_after_seconds": { + "description": "retry_after_seconds is how long to wait before retrying, rounded up to the\nnext whole second. Matches the Retry-After response header. Present on every\nreason whenever resets_at is present — this is not rate_limited-only.", + "example": 12, + "type": "integer" + }, + "suggested_plan": { + "description": "suggested_plan is the cheapest plan that would cover the caller's observed\nusage. Omitted when no higher plan applies, and always omitted for\nip_rate_limited (upgrading plan does not clear an IP-sharing block).", + "example": "Starter", + "type": "string" + }, + "upgrade_url": { + "description": "upgrade_url is where to change plan.", + "example": "https://crawlora.net/pricing", + "type": "string" + } + }, + "type": "object" + }, + "web.billingRejectionResponseDoc": { + "properties": { + "code": { + "example": 402, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/web.billingRejectionDoc" + }, + "msg": { + "example": "Payment Required", + "type": "string" + } + }, + "type": "object" + }, + "web.scrapeResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/web.ScrapeResult" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "web.techStackResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/web.TechStackResult" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "webmonitor.checkDoc": { + "properties": { + "added_urls": { + "items": { + "type": "string" + }, + "type": "array" + }, + "billed": { + "example": true, + "type": "boolean" + }, + "changed": { + "example": false, + "type": "boolean" + }, + "checked_at": { + "example": "2026-08-22T10:00:00Z", + "type": "string" + }, + "diff": { + "type": "string" + }, + "error": { + "type": "string" + }, + "fingerprint": { + "type": "string" + }, + "id": { + "example": "66d2f0c1c2a4e5f6a7b8c9d1", + "type": "string" + }, + "monitor_id": { + "example": "66d2f0b1c2a4e5f6a7b8c9d0", + "type": "string" + }, + "removed_urls": { + "items": { + "type": "string" + }, + "type": "array" + }, + "skipped": { + "example": false, + "type": "boolean" + }, + "webhook_deliveries": { + "items": { + "$ref": "#/definitions/webmonitor.webhookDeliveryDoc" + }, + "type": "array" + } + }, + "type": "object" + }, + "webmonitor.checkListResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "items": { + "$ref": "#/definitions/webmonitor.checkDoc" + }, + "type": "array" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "webmonitor.createMonitorBodyDoc": { + "properties": { + "cadence_minutes": { + "example": 60, + "type": "integer" + }, + "enabled": { + "example": true, + "type": "boolean" + }, + "name": { + "example": "Pricing page", + "type": "string" + }, + "notification": { + "$ref": "#/definitions/webmonitor.notificationBodyDoc" + }, + "sitemap": { + "$ref": "#/definitions/webmonitor.sitemapTargetBodyDoc" + }, + "target_type": { + "enum": [ + "page", + "sitemap" + ], + "example": "page", + "type": "string" + }, + "url": { + "example": "https://example.com/pricing", + "type": "string" + } + }, + "type": "object" + }, + "webmonitor.monitorDeleteResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "properties": { + "deleted": { + "example": true, + "type": "boolean" + } + }, + "type": "object" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "webmonitor.monitorDoc": { + "properties": { + "cadence_minutes": { + "example": 60, + "type": "integer" + }, + "created_at": { + "example": "2026-08-01T00:00:00Z", + "type": "string" + }, + "enabled": { + "example": true, + "type": "boolean" + }, + "failures": { + "example": 0, + "type": "integer" + }, + "id": { + "example": "66d2f0b1c2a4e5f6a7b8c9d0", + "type": "string" + }, + "last_changed_at": { + "example": "2026-08-20T09:00:00Z", + "type": "string" + }, + "last_checked_at": { + "example": "2026-08-22T10:00:00Z", + "type": "string" + }, + "last_error": { + "type": "string" + }, + "name": { + "example": "Pricing page", + "type": "string" + }, + "next_check_at": { + "example": "2026-08-22T11:00:00Z", + "type": "string" + }, + "notification": { + "$ref": "#/definitions/webmonitor.notificationDoc" + }, + "sitemap": { + "$ref": "#/definitions/webmonitor.sitemapTargetDoc" + }, + "target_type": { + "enum": [ + "page", + "sitemap" + ], + "example": "page", + "type": "string" + }, + "updated_at": { + "example": "2026-08-22T10:00:00Z", + "type": "string" + }, + "url": { + "example": "https://example.com/pricing", + "type": "string" + } + }, + "type": "object" + }, + "webmonitor.monitorListResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "items": { + "$ref": "#/definitions/webmonitor.monitorDoc" + }, + "type": "array" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "webmonitor.monitorResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/webmonitor.monitorDoc" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "webmonitor.notificationBodyDoc": { + "properties": { + "events": { + "example": [ + "change.detected", + "run.completed" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "webhook_secret": { + "example": "whsec_...", + "type": "string" + }, + "webhook_url": { + "example": "https://example.com/webhooks/crawlora", + "type": "string" + } + }, + "type": "object" + }, + "webmonitor.notificationDoc": { + "properties": { + "events": { + "example": [ + "change.detected", + "run.completed" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "webhook_url": { + "example": "https://example.com/webhooks/crawlora", + "type": "string" + } + }, + "type": "object" + }, + "webmonitor.sitemapTargetBodyDoc": { + "properties": { + "exclude_patterns": { + "example": [ + "/blog/*" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "include_patterns": { + "example": [ + "/products/*" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "max_urls": { + "example": 5000, + "type": "integer" + } + }, + "type": "object" + }, + "webmonitor.sitemapTargetDoc": { + "properties": { + "exclude_patterns": { + "example": [ + "/blog/*" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "include_patterns": { + "example": [ + "/products/*" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "max_urls": { + "example": 5000, + "type": "integer" + } + }, + "type": "object" + }, + "webmonitor.updateMonitorBodyDoc": { + "properties": { + "cadence_minutes": { + "example": 60, + "type": "integer" + }, + "enabled": { + "example": true, + "type": "boolean" + }, + "name": { + "example": "Pricing page", + "type": "string" + }, + "notification": { + "$ref": "#/definitions/webmonitor.notificationBodyDoc" + }, + "sitemap": { + "$ref": "#/definitions/webmonitor.sitemapTargetBodyDoc" + }, + "target_type": { + "enum": [ + "page", + "sitemap" + ], + "example": "page", + "type": "string" + } + }, + "type": "object" + }, + "webmonitor.webhookDeliveryDoc": { + "properties": { + "attempts": { + "example": 1, + "type": "integer" + }, + "delivered_at": { + "example": "2026-08-22T10:00:02Z", + "type": "string" + }, + "error": { + "type": "string" + }, + "event": { + "enum": [ + "change.detected", + "run.completed" + ], + "example": "change.detected", + "type": "string" + }, + "status": { + "enum": [ + "delivered", + "rejected", + "failed", + "skipped_unsafe_url" + ], + "example": "delivered", + "type": "string" + }, + "status_code": { + "example": 200, + "type": "integer" + } + }, + "type": "object" + }, + "webretrieval.DiscoveredURL": { + "properties": { + "discovered_via": { + "type": "string" + }, + "last_modified": { + "type": "string" + }, + "observed_at": { + "type": "string" + }, + "parent_url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "webretrieval.WebSearchHit": { + "properties": { + "document": { + "$ref": "#/definitions/retrievaltypes.Document" + }, + "fetch_failure": { + "$ref": "#/definitions/retrievaltypes.Failure" + }, + "provider": { + "type": "string" + }, + "rank": { + "type": "integer" + }, + "retrieved_at": { + "type": "string" + }, + "snippet": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "webtoon.Episode": { + "properties": { + "date": { + "description": "Release date, YYYY-MM-DD when the site's text parses, otherwise the\nupstream text unchanged.", + "example": "2026-11-06", + "type": "string" + }, + "episode_no": { + "description": "Episode number within the series.", + "example": 83, + "type": "integer" + }, + "is_up": { + "description": "True when the episode carries the site's UP badge (paid early access).", + "type": "boolean" + }, + "thumbnail": { + "description": "Thumbnail URL.", + "type": "string" + }, + "title": { + "description": "Episode title as the site prints it.", + "example": "Episode 83", + "type": "string" + }, + "url": { + "description": "Viewer URL on webtoons.com. The viewer's panel images are never read.", + "type": "string" + } + }, + "type": "object" + }, + "webtoon.Genre": { + "properties": { + "label": { + "description": "Display label as the site prints it, e.g. \"ROMANCE\".", + "example": "ROMANCE", + "type": "string" + }, + "slug": { + "description": "Slug used in the listing URL, e.g. \"romance\".", + "example": "romance", + "type": "string" + }, + "url": { + "description": "Listing URL for the genre.", + "type": "string" + } + }, + "type": "object" + }, + "webtoon.GenreResponse": { + "properties": { + "genre": { + "example": "romance", + "type": "string" + }, + "label": { + "example": "ROMANCE", + "type": "string" + }, + "sort": { + "example": "MANA", + "type": "string" + }, + "titles": { + "items": { + "$ref": "#/definitions/webtoon.Title" + }, + "type": "array" + }, + "total": { + "description": "The site's own series count for this genre, when the page carries it.", + "example": 616, + "type": "integer" + } + }, + "type": "object" + }, + "webtoon.GenresResponse": { + "properties": { + "genres": { + "items": { + "$ref": "#/definitions/webtoon.Genre" + }, + "type": "array" + } + }, + "type": "object" + }, + "webtoon.OriginalsResponse": { + "properties": { + "day": { + "example": "saturday", + "type": "string" + }, + "sort": { + "example": "MANA", + "type": "string" + }, + "titles": { + "items": { + "$ref": "#/definitions/webtoon.Title" + }, + "type": "array" + } + }, + "type": "object" + }, + "webtoon.RankingsResponse": { + "properties": { + "tab": { + "example": "popular", + "type": "string" + }, + "titles": { + "items": { + "$ref": "#/definitions/webtoon.Title" + }, + "type": "array" + } + }, + "type": "object" + }, + "webtoon.SearchResponse": { + "properties": { + "has_next_page": { + "description": "True when the returned card window was full and the scope is pageable. The\npage prints no exact remaining count, so this is a window-size signal, never\na promise. Always false for scope=all, which is a preview and is not pageable.", + "example": false, + "type": "boolean" + }, + "keyword": { + "example": "tower", + "type": "string" + }, + "page": { + "example": 1, + "type": "integer" + }, + "scope": { + "example": "all", + "type": "string" + }, + "sections": { + "description": "Result sections in the order the page renders them. Empty when the search\ngenuinely matched nothing or the requested page is past the end.", + "items": { + "$ref": "#/definitions/webtoon.SearchSection" + }, + "type": "array" + } + }, + "type": "object" + }, + "webtoon.SearchSection": { + "properties": { + "name": { + "description": "The site's own section heading, as served.", + "example": "ORIGINALS", + "type": "string" + }, + "titles": { + "description": "Cards in this section window.", + "items": { + "$ref": "#/definitions/webtoon.SearchTitle" + }, + "type": "array" + }, + "total": { + "description": "That section's own series count, when the page prints one. Omitted when\nabsent; it is the upstream count, not the number of cards in this window.", + "example": 100, + "type": "integer" + } + }, + "type": "object" + }, + "webtoon.SearchTitle": { + "properties": { + "authors": { + "description": "Author/cartoonist names when the card prints them, split on the site's\nown separators.", + "items": { + "type": "string" + }, + "type": "array" + }, + "genre": { + "description": "Genre path segment taken from the card's own href (for example \"fantasy\").\nSearch cards carry no genre label, so this is the URL segment, not the\ndisplay label, and multi-word segments are hyphenated (\"slice-of-life\")\nwhereas webtoon-genres slugs are underscored (\"slice_of_life\"); map through\nwebtoon-genres before calling webtoon-genre. Empty for canvas cards, whose\npath segment is \"canvas\".", + "example": "fantasy", + "type": "string" + }, + "is_adult": { + "description": "True when the card is flagged unsuitable for children (the card's own\ndata-title-unsuitable-for-children attribute).", + "type": "boolean" + }, + "is_up": { + "description": "True when the card carries the UP (paid early access) badge.", + "type": "boolean" + }, + "thumbnail": { + "description": "Card thumbnail URL.", + "type": "string" + }, + "title": { + "example": "Tower of God", + "type": "string" + }, + "title_no": { + "example": 9701, + "type": "integer" + }, + "url": { + "description": "Absolute canonical series URL on webtoons.com.", + "type": "string" + }, + "view_count": { + "description": "The site's own view counter as printed, e.g. \"1M Views\". Display text, not\nan exact integer.", + "example": "1M Views", + "type": "string" + }, + "webtoon_type": { + "description": "Normalised content type: \"originals\" or \"canvas\", from the card's\ndata-webtoon-type (WEBTOON / CHALLENGE).", + "example": "originals", + "type": "string" + } + }, + "type": "object" + }, + "webtoon.SeriesResponse": { + "properties": { + "authors": { + "description": "Author names as printed, split on the site's own separators.", + "items": { + "type": "string" + }, + "type": "array" + }, + "episodes": { + "description": "Episodes in this page window, newest first.", + "items": { + "$ref": "#/definitions/webtoon.Episode" + }, + "type": "array" + }, + "genre": { + "example": "Action", + "type": "string" + }, + "has_next_page": { + "description": "True when this window was full, so a further page probably exists. The\npage carries no total episode count, so this is a window-size signal and\nnever a promise about the exact remaining count.", + "example": true, + "type": "boolean" + }, + "is_up": { + "description": "True when the series is currently flagged UP (paid early access).", + "type": "boolean" + }, + "page": { + "description": "Page returned and the fixed window size.", + "example": 1, + "type": "integer" + }, + "per_page": { + "example": 10, + "type": "integer" + }, + "rss_url": { + "description": "RSS feed of the newest 20 episodes.", + "type": "string" + }, + "subscribe_count": { + "example": "181,363", + "type": "string" + }, + "summary": { + "description": "Series summary from the page's own summary block.", + "type": "string" + }, + "thumbnail": { + "description": "Cover image URL (the page's og:image).", + "type": "string" + }, + "title": { + "example": "Emperor of Solo Play", + "type": "string" + }, + "title_no": { + "example": 7830, + "type": "integer" + }, + "update_day": { + "description": "The series' release day line as printed, e.g. \"EVERY SATURDAY\".", + "type": "string" + }, + "url": { + "description": "Canonical series URL on webtoons.com.", + "type": "string" + }, + "view_count": { + "description": "The site's own counter strings, e.g. \"8.3M\" and \"181,363\". Returned raw:\nthey are display text, not exact integers.", + "example": "8.3M", + "type": "string" + } + }, + "type": "object" + }, + "webtoon.Title": { + "properties": { + "authors": { + "description": "Author/cartoonist names when the card prints them.", + "items": { + "type": "string" + }, + "type": "array" + }, + "genre": { + "description": "Genre display label from the card (or the listing context).", + "example": "ROMANCE", + "type": "string" + }, + "is_up": { + "description": "True when the card carries the UP (paid early access) badge.", + "type": "boolean" + }, + "rank": { + "description": "1-based ranking position, only on the ranking endpoints.", + "example": 1, + "type": "integer" + }, + "thumbnail": { + "description": "Card thumbnail URL.", + "type": "string" + }, + "title": { + "example": "Star Catcher", + "type": "string" + }, + "title_no": { + "example": 6510, + "type": "integer" + }, + "url": { + "description": "Canonical series URL on webtoons.com.", + "type": "string" + }, + "view_count": { + "description": "The site's own view/like counter string, e.g. \"3.5M\".", + "example": "3.5M", + "type": "string" + } + }, + "type": "object" + }, + "webtoon.genreResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/webtoon.GenreResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "webtoon.genresResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/webtoon.GenresResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "webtoon.originalsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/webtoon.OriginalsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "webtoon.rankingsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/webtoon.RankingsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "webtoon.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/webtoon.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "webtoon.seriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/webtoon.SeriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wendys.CategoriesResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/wendys.Category" + }, + "type": "array" + }, + "count": { + "example": 25, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "wendys.Category": { + "properties": { + "dayparts": { + "description": "Dayparts lists which of Wendy's own top-level menu groupings\n(\"Lunch/Dinner\", \"Breakfast\") this category appears under. A few\ncategories (Coffee, Beverages, Give Something Back, Bakery) appear\nunder both.", + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "example": "100", + "type": "string" + }, + "image_url": { + "type": "string" + }, + "name": { + "example": "Hamburgers", + "type": "string" + }, + "slug": { + "example": "hamburgers", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wendys.ComboNutritionSelection": { + "properties": { + "name": { + "example": "Dave's Single®", + "type": "string" + }, + "slot_type": { + "example": "ENTREE", + "type": "string" + } + }, + "type": "object" + }, + "wendys.ComboOption": { + "properties": { + "base_price": { + "example": 5.59, + "type": "number" + }, + "calories": { + "example": "560 Cal", + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "name": { + "example": "Dave's Single®", + "type": "string" + }, + "product_id": { + "example": "10000000000081", + "type": "string" + } + }, + "type": "object" + }, + "wendys.ComboSlot": { + "properties": { + "name": { + "example": "Dave's Hamburger Combo", + "type": "string" + }, + "options": { + "items": { + "$ref": "#/definitions/wendys.ComboOption" + }, + "type": "array" + }, + "slot_type": { + "example": "ENTREE", + "type": "string" + } + }, + "type": "object" + }, + "wendys.Component": { + "properties": { + "allergens": { + "example": [ + "Wheat", + "Milk" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "description": { + "type": "string" + }, + "group": { + "description": "Group is \"default\" (comes with the item), \"extra\" (a paid add-on), or\n\"required\" (the caller must choose one option from a named group,\ne.g. a salad's dressing).", + "example": "default", + "type": "string" + }, + "is_default_option": { + "type": "boolean" + }, + "name": { + "example": "Grilled Chicken", + "type": "string" + }, + "price": { + "example": 0.5, + "type": "number" + }, + "required_group_name": { + "description": "RequiredGroupName and IsDefaultOption are only set for Group ==\n\"required\" -- e.g. RequiredGroupName \"Dressing\", with\nIsDefaultOption true on whichever dressing Wendy's page pre-selects.", + "example": "Dressing", + "type": "string" + } + }, + "type": "object" + }, + "wendys.DirectoryChild": { + "properties": { + "is_store": { + "description": "IsStore marks a child that is a store page rather than another\ndirectory level -- call /wendys/store with its path.", + "example": false, + "type": "boolean" + }, + "name": { + "example": "Ohio", + "type": "string" + }, + "path": { + "example": "united-states/oh", + "type": "string" + }, + "store_count": { + "description": "StoreCount is how many stores sit under this branch. Present at the\ncountry/state/city levels; absent once children are stores\nthemselves.", + "example": 388, + "type": "integer" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wendys.DirectoryResponse": { + "properties": { + "children": { + "items": { + "$ref": "#/definitions/wendys.DirectoryChild" + }, + "type": "array" + }, + "count": { + "example": 88, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "name": { + "type": "string" + }, + "path": { + "example": "united-states/oh", + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "wendys.ItemResponse": { + "properties": { + "allergens": { + "description": "Allergens is the union of allergens across the item's default\ncomponents and each required group's default-selected option --\ni.e. the item's allergen profile as configured on Wendy's own page\nbefore any customization. Customizing (removing a default component,\npicking a different required option) changes this in ways this\nsummary field cannot capture; Components lists every option's own\nallergens individually for that.", + "items": { + "type": "string" + }, + "type": "array" + }, + "base_price": { + "example": 7.99, + "type": "number" + }, + "calories": { + "example": "520 Cal", + "type": "string" + }, + "category": { + "example": "hamburgers", + "type": "string" + }, + "combo_slots": { + "description": "ComboSlots is set only when IsCombo is true.", + "items": { + "$ref": "#/definitions/wendys.ComboSlot" + }, + "type": "array" + }, + "components": { + "items": { + "$ref": "#/definitions/wendys.Component" + }, + "type": "array" + }, + "description": { + "description": "Description, BasePrice, Calories, Components and Variants are set\nonly when IsCombo is false.", + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "is_combo": { + "type": "boolean" + }, + "item": { + "example": "daves-combo", + "type": "string" + }, + "name": { + "example": "Dave's Combo", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "variants": { + "items": { + "$ref": "#/definitions/wendys.ItemVariant" + }, + "type": "array" + } + }, + "type": "object" + }, + "wendys.ItemVariant": { + "properties": { + "base_price": { + "example": 2.79, + "type": "number" + }, + "calories": { + "example": "260 Cal", + "type": "string" + }, + "description": { + "type": "string" + }, + "is_default": { + "description": "IsDefault marks the variant Wendy's own page selects by default.", + "type": "boolean" + }, + "item_id": { + "example": "40054", + "type": "string" + }, + "name": { + "example": "Small Natural-Cut Fries", + "type": "string" + }, + "short_name": { + "example": "Small", + "type": "string" + } + }, + "type": "object" + }, + "wendys.MenuItemSummary": { + "properties": { + "calories": { + "example": "760 Cal", + "type": "string" + }, + "has_required_modifiers": { + "type": "boolean" + }, + "image_url": { + "type": "string" + }, + "is_combo": { + "description": "IsCombo marks an item whose /wendys/item response returns\ncombo_slots instead of components/variants.", + "type": "boolean" + }, + "is_limited_time_offer": { + "type": "boolean" + }, + "item_id": { + "example": "31009", + "type": "string" + }, + "name": { + "example": "Dave's Combo", + "type": "string" + }, + "price": { + "description": "Price is Wendy's own displayed price string. It is a string, not a\nnumber, because a size-variant item (e.g. fries) displays a \"from\"\nprice for its default variant here -- GET /wendys/item returns the\nexact per-variant numeric price.", + "example": "$7.29", + "type": "string" + }, + "slug": { + "example": "daves-combo", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wendys.MenuResponse": { + "properties": { + "category": { + "example": "hamburgers", + "type": "string" + }, + "count": { + "example": 12, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/wendys.MenuItemSummary" + }, + "type": "array" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "wendys.NearbyResponse": { + "properties": { + "count": { + "example": 25, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "radius": { + "example": 20, + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "stores": { + "items": { + "$ref": "#/definitions/wendys.NearbyStore" + }, + "type": "array" + } + }, + "type": "object" + }, + "wendys.NearbyStore": { + "properties": { + "address": { + "$ref": "#/definitions/wendys.StoreAddress" + }, + "breakfast_hours": { + "items": { + "$ref": "#/definitions/wendys.StoreHours" + }, + "type": "array" + }, + "distance_miles": { + "example": 1.30845, + "type": "number" + }, + "has_breakfast": { + "type": "boolean" + }, + "has_carry_out": { + "type": "boolean" + }, + "has_delivery": { + "type": "boolean" + }, + "has_drive_thru": { + "type": "boolean" + }, + "has_mobile_order": { + "type": "boolean" + }, + "has_wifi": { + "type": "boolean" + }, + "hours": { + "description": "Hours is the published week of general dining hours, and\nBreakfastHours the published week of breakfast service hours (often\nnarrower and always starting no later than dining) -- the same dual-\nhours shape /wendys/store publishes, from this API's own per-day\nschedule rather than a second upstream call.", + "items": { + "$ref": "#/definitions/wendys.StoreHours" + }, + "type": "array" + }, + "is_open": { + "type": "boolean" + }, + "latitude": { + "example": 38.897527, + "type": "number" + }, + "longitude": { + "example": -77.006362, + "type": "number" + }, + "name": { + "example": "WASHINGTON UNION STATION", + "type": "string" + }, + "phone_number": { + "example": "2028380978", + "type": "string" + }, + "store_id": { + "example": "12921", + "type": "string" + }, + "timezone": { + "example": "US/Eastern", + "type": "string" + } + }, + "type": "object" + }, + "wendys.NutritionFacts": { + "properties": { + "calcium_mg": { + "example": 15, + "type": "number" + }, + "calories": { + "example": 560, + "type": "number" + }, + "calories_from_fat": { + "example": 300, + "type": "number" + }, + "cholesterol_mg": { + "example": 90, + "type": "number" + }, + "dietary_fiber_g": { + "example": 2, + "type": "number" + }, + "iron_mg": { + "example": 25, + "type": "number" + }, + "monounsaturated_fat_g": { + "type": "number" + }, + "polyunsaturated_fat_g": { + "type": "number" + }, + "potassium_mg": { + "example": 10, + "type": "number" + }, + "protein_g": { + "example": 31, + "type": "number" + }, + "saturated_fat_g": { + "example": 14, + "type": "number" + }, + "serving_weight_grams": { + "description": "ServingWeightGrams is omitted (not published) when Wendy's own service\nleaves it out, which it does for some single-component items.", + "example": 245.43, + "type": "number" + }, + "sodium_mg": { + "example": 1170, + "type": "number" + }, + "sugars_g": { + "example": 9, + "type": "number" + }, + "total_carbohydrate_g": { + "example": 37, + "type": "number" + }, + "total_fat_g": { + "example": 34, + "type": "number" + }, + "trans_fat_g": { + "example": 1.5, + "type": "number" + }, + "vitamin_a": { + "type": "number" + }, + "vitamin_c": { + "type": "number" + }, + "vitamin_d_mcg": { + "type": "number" + } + }, + "type": "object" + }, + "wendys.NutritionResponse": { + "properties": { + "allergens": { + "description": "Allergens is Wendy's own declared allergen flags for this exact\ndefault configuration -- the same union Wendy's \"Allergens\" panel\nshows next to the nutrition table.", + "example": [ + "Egg", + "Milk", + "Sesame", + "Soy", + "Wheat" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "category": { + "example": "hamburgers", + "type": "string" + }, + "combo_selections": { + "items": { + "$ref": "#/definitions/wendys.ComboNutritionSelection" + }, + "type": "array" + }, + "disclaimers": { + "description": "Disclaimers is any upstream-published caveat text for this item\n(usually empty). Passed through verbatim.", + "items": { + "type": "string" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "is_combo": { + "description": "IsCombo marks a combo response. Nutrition/Allergens/Disclaimers then\ncover the *combined* total across every slot's selected option\n(ComboSelections), computed in one nutritionalData request the same\nway a caller building a full order would sum it themselves -- not a\nseparate per-slot breakdown.", + "type": "boolean" + }, + "item": { + "example": "daves-single", + "type": "string" + }, + "name": { + "example": "Dave's Single", + "type": "string" + }, + "nutrition": { + "$ref": "#/definitions/wendys.NutritionFacts" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "wendys.RestaurantResponse": { + "properties": { + "active_day_part": { + "description": "ActiveDayPart is which of the restaurant's own dayparts (breakfast,\nlunch/dinner, ...) is currently serving.", + "example": "BREAKFAST", + "type": "string" + }, + "address": { + "$ref": "#/definitions/wendys.StoreAddress" + }, + "breakfast_hours": { + "items": { + "$ref": "#/definitions/wendys.StoreHours" + }, + "type": "array" + }, + "currency": { + "example": "USD", + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "has_breakfast": { + "type": "boolean" + }, + "has_coke_freestyle": { + "type": "boolean" + }, + "has_digital_coupon": { + "type": "boolean" + }, + "has_gift_card": { + "type": "boolean" + }, + "has_loyalty": { + "type": "boolean" + }, + "has_mobile_order": { + "type": "boolean" + }, + "has_mobile_pay": { + "type": "boolean" + }, + "has_wifi": { + "type": "boolean" + }, + "hours": { + "description": "Hours is the published week of general dining hours, and\nBreakfastHours the published week of breakfast service hours -- the\nsame StoreHours shape /wendys/store and /wendys/nearby publish.", + "items": { + "$ref": "#/definitions/wendys.StoreHours" + }, + "type": "array" + }, + "is_open": { + "type": "boolean" + }, + "is_open_24_hours": { + "type": "boolean" + }, + "is_open_late": { + "type": "boolean" + }, + "latitude": { + "example": 38.897527, + "type": "number" + }, + "longitude": { + "example": -77.006362, + "type": "number" + }, + "name": { + "example": "WASHINGTON UNION STATION", + "type": "string" + }, + "phone_number": { + "example": "2028380978", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "store_id": { + "example": "12921", + "type": "string" + }, + "supports_carry_out": { + "description": "SupportsCarryOut/SupportsDineIn/SupportsDriveThru are whether this\nrestaurant physically offers each fulfillment mode at all -- distinct\nfrom /wendys/nearby's has_drive_thru, which reflects only whether\nthat mode is open right now.", + "type": "boolean" + }, + "supports_dine_in": { + "type": "boolean" + }, + "supports_drive_thru": { + "type": "boolean" + }, + "timezone": { + "example": "US/Eastern", + "type": "string" + } + }, + "type": "object" + }, + "wendys.StoreAddress": { + "properties": { + "city": { + "example": "Alliance", + "type": "string" + }, + "country": { + "example": "US", + "type": "string" + }, + "line1": { + "example": "1833 W. State St.", + "type": "string" + }, + "postal_code": { + "example": "44601-3538", + "type": "string" + }, + "region": { + "example": "OH", + "type": "string" + } + }, + "type": "object" + }, + "wendys.StoreHours": { + "properties": { + "closed": { + "description": "Closed is true when Wendy's publishes the day with no open interval.", + "example": false, + "type": "boolean" + }, + "closes": { + "example": "22:00", + "type": "string" + }, + "day_of_week": { + "example": "Monday", + "type": "string" + }, + "opens": { + "example": "06:30", + "type": "string" + } + }, + "type": "object" + }, + "wendys.StoreMenuItem": { + "properties": { + "calories": { + "example": "560 Cal", + "type": "string" + }, + "day_part": { + "description": "DayPart is when this item is on the menu (e.g. \"BREAKFAST\",\n\"LUNCH\") -- an item can appear more than once, once per day-part it\nserves in, each as its own entry.", + "example": "LUNCH", + "type": "string" + }, + "description": { + "description": "Description is omitted for combo/bundle entries, which the upstream\ndoes not publish one for (see /wendys/item's combo_slots for a\ncombo's own constituent-item descriptions instead).", + "type": "string" + }, + "menu_item_id": { + "example": 30013, + "type": "integer" + }, + "name": { + "example": "Spicy Chicken Sandwich", + "type": "string" + }, + "price": { + "description": "Price is this store's own displayed price string -- for a combo/\nbundle entry, this is the real bundle price, which /wendys/item does\nnot compute at all (a combo's own price varies by what's chosen in\neach slot; see item.go).", + "example": "$7.85", + "type": "string" + } + }, + "type": "object" + }, + "wendys.StoreMenuResponse": { + "properties": { + "count": { + "example": 170, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/wendys.StoreMenuItem" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "store_id": { + "example": "12921", + "type": "string" + } + }, + "type": "object" + }, + "wendys.StoreResponse": { + "properties": { + "address": { + "$ref": "#/definitions/wendys.StoreAddress" + }, + "delivery_platforms": { + "description": "DeliveryPlatforms lists the third-party platforms this store's page\nlinks out to.", + "items": { + "type": "string" + }, + "type": "array" + }, + "drive_thru_hours": { + "description": "DriveThruHours is the published week of drive-thru hours, which\nWendy's often publishes separately from (and later-closing than)\ngeneral restaurant hours.", + "items": { + "$ref": "#/definitions/wendys.StoreHours" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "hours": { + "description": "Hours is the published week of general restaurant hours.", + "items": { + "$ref": "#/definitions/wendys.StoreHours" + }, + "type": "array" + }, + "latitude": { + "example": 40.90233810995588, + "type": "number" + }, + "longitude": { + "example": -81.1329160630703, + "type": "number" + }, + "name": { + "example": "Wendy's 1833 W. STATE ST in Alliance, OH", + "type": "string" + }, + "order_url": { + "type": "string" + }, + "path": { + "type": "string" + }, + "phone_number": { + "example": "(330) 821-4338", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "store_id": { + "example": "11456", + "type": "string" + } + }, + "type": "object" + }, + "wendys.TimeSlotsResponse": { + "properties": { + "asap_available": { + "description": "ASAPAvailable is whether an immediate (\"as soon as possible\") pickup\nslot is currently offered, as opposed to only scheduled future slots.", + "type": "boolean" + }, + "available_times": { + "description": "AvailableTimes is every schedulable slot, as Wendy's own service\npublishes them (no explicit UTC offset in the upstream payload).", + "items": { + "type": "string" + }, + "type": "array" + }, + "count": { + "example": 61, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "store_id": { + "example": "12921", + "type": "string" + } + }, + "type": "object" + }, + "wendys.categoriesResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wendys.CategoriesResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "wendys.directoryResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wendys.DirectoryResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "wendys.itemResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wendys.ItemResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "wendys.menuResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wendys.MenuResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "wendys.nearbyResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wendys.NearbyResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "wendys.nutritionResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wendys.NutritionResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "wendys.restaurantResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wendys.RestaurantResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "wendys.storeMenuResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wendys.StoreMenuResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "wendys.storeResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wendys.StoreResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "wendys.timeSlotsResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wendys.TimeSlotsResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "whataburger.SitemapEntry": { + "properties": { + "kind": { + "description": "Kind classifies the page: \"store\" is the canonical restaurant page,\n\"curbside\"/\"delivery\" are separate Yext entities for the same\nrestaurant's curbside or delivery service, and \"directory\" is a\nstate- or city-level listing page with no address of its own.", + "example": "store", + "type": "string" + }, + "path": { + "description": "Path is the locator path, the value /whataburger/store takes.", + "example": "tx/abilene/1625-tx-hwy-351.html", + "type": "string" + }, + "store_number": { + "description": "StoreNumber is only derivable from the short-permalink Curbside/\nDelivery variants (e.g. \"1197C.html\"); it is empty for every other\nkind, since Whataburger's canonical and long-form variant paths use a\nstreet-name slug instead of a numeric id.", + "example": "1197", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "whataburger.SitemapResponse": { + "properties": { + "count": { + "example": 100, + "type": "integer" + }, + "entries": { + "items": { + "$ref": "#/definitions/whataburger.SitemapEntry" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "page": { + "example": 1, + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "total": { + "example": 3955, + "type": "integer" + }, + "total_pages": { + "example": 40, + "type": "integer" + } + }, + "type": "object" + }, + "whataburger.StoreAddress": { + "properties": { + "city": { + "example": "ABILENE", + "type": "string" + }, + "country": { + "example": "US", + "type": "string" + }, + "line1": { + "example": "1625 TX HWY 351", + "type": "string" + }, + "line2": { + "type": "string" + }, + "postal_code": { + "example": "79601", + "type": "string" + }, + "region": { + "example": "TX", + "type": "string" + } + }, + "type": "object" + }, + "whataburger.StoreHours": { + "properties": { + "closed": { + "description": "Closed is true when Whataburger publishes the day with no open interval.", + "example": false, + "type": "boolean" + }, + "closes": { + "example": "23:59", + "type": "string" + }, + "day_of_week": { + "example": "Monday", + "type": "string" + }, + "opens": { + "example": "00:00", + "type": "string" + } + }, + "type": "object" + }, + "whataburger.StoreResponse": { + "properties": { + "address": { + "$ref": "#/definitions/whataburger.StoreAddress" + }, + "fetched_at": { + "type": "string" + }, + "google_place_id": { + "type": "string" + }, + "hours": { + "items": { + "$ref": "#/definitions/whataburger.StoreHours" + }, + "type": "array" + }, + "latitude": { + "example": 32.481983, + "type": "number" + }, + "longitude": { + "example": -99.744767, + "type": "number" + }, + "name": { + "example": "Whataburger", + "type": "string" + }, + "path": { + "description": "Path is the canonical /whataburger/store path for this restaurant, as\nWhataburger's own entity data publishes it -- present even when the\nrequested path was a Curbside or Delivery variant of the same store.", + "type": "string" + }, + "phone_number": { + "example": "(325) 692-8480", + "type": "string" + }, + "service_hours": { + "allOf": [ + { + "$ref": "#/definitions/whataburger.StoreServiceHours" + } + ], + "description": "ServiceHours breaks the same week down per fulfillment channel --\ndine-in, drive-thru, curbside and delivery windows can and do differ\nfrom each other and from Hours (dine-in) at the same store. Whataburger\nalways publishes drive-thru and dine-in hours; curbside and delivery\nare omitted here when the entity carries no schedule for them (a store\nthat does not list that service in Services)." + }, + "services": { + "description": "Services are the restaurant services Whataburger publishes for this\nlocation, e.g. \"Curbside\", \"Delivery\".", + "items": { + "type": "string" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "store_id": { + "example": "1403", + "type": "string" + }, + "timezone": { + "example": "America/Chicago", + "type": "string" + } + }, + "type": "object" + }, + "whataburger.StoreServiceHours": { + "properties": { + "curbside": { + "items": { + "$ref": "#/definitions/whataburger.StoreHours" + }, + "type": "array" + }, + "delivery": { + "items": { + "$ref": "#/definitions/whataburger.StoreHours" + }, + "type": "array" + }, + "dine_in": { + "items": { + "$ref": "#/definitions/whataburger.StoreHours" + }, + "type": "array" + }, + "drive_thru": { + "items": { + "$ref": "#/definitions/whataburger.StoreHours" + }, + "type": "array" + } + }, + "type": "object" + }, + "whataburger.sitemapResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/whataburger.SitemapResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "whataburger.storeResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/whataburger.StoreResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "whatnot.BrowseResponse": { + "properties": { + "category": { + "type": "string" + }, + "shows": { + "items": { + "$ref": "#/definitions/whatnot.LiveShow" + }, + "type": "array" + } + }, + "type": "object" + }, + "whatnot.CategoriesResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/whatnot.Category" + }, + "type": "array" + } + }, + "type": "object" + }, + "whatnot.Category": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "slug": { + "description": "e.g. \"trading_card_games\"", + "type": "string" + } + }, + "type": "object" + }, + "whatnot.LiveProduct": { + "properties": { + "currency": { + "type": "string" + }, + "current_bid_cents": { + "type": "integer" + }, + "current_bid_count": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "price_cents": { + "type": "integer" + }, + "quantity": { + "type": "integer" + }, + "seller": { + "$ref": "#/definitions/whatnot.LiveSeller" + }, + "status": { + "description": "Status is the listing's own lifecycle state: active, created, or\nrunning. A terminal \"sold\"/\"sold out\"-style value almost certainly\nalso exists but was not observed in live testing.", + "enum": [ + "active", + "created", + "running" + ], + "example": "running", + "type": "string" + }, + "title": { + "type": "string" + }, + "transaction_type": { + "description": "TransactionType distinguishes how a listing is sold: AUCTION,\nGIVEAWAY, or BUY_IT_NOW.", + "enum": [ + "AUCTION", + "GIVEAWAY", + "BUY_IT_NOW" + ], + "example": "AUCTION", + "type": "string" + } + }, + "type": "object" + }, + "whatnot.LiveResponse": { + "properties": { + "id": { + "type": "string" + }, + "products": { + "items": { + "$ref": "#/definitions/whatnot.LiveProduct" + }, + "type": "array" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "whatnot.LiveSeller": { + "properties": { + "rating": { + "type": "number" + }, + "review_count": { + "type": "integer" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "whatnot.LiveShow": { + "properties": { + "id": { + "description": "pass as the :id path param to /whatnot/live/{id}", + "type": "string" + }, + "seller_username": { + "type": "string" + }, + "start_time_ms": { + "type": "integer" + }, + "status": { + "description": "Status is the show's own lifecycle state: PLAYING (currently live) or\nCREATED (scheduled, not yet started). An ended-show state almost\ncertainly also exists but was not observed in live testing -- ended\nshows drop out of Whatnot's own Browse/category feeds essentially\nimmediately.", + "enum": [ + "PLAYING", + "CREATED" + ], + "example": "PLAYING", + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "thumbnail_url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "whatnot.SellerProfile": { + "properties": { + "average_ship_days": { + "type": "integer" + }, + "bio": { + "type": "string" + }, + "display_name": { + "type": "string" + }, + "follower_count": { + "type": "integer" + }, + "following_count": { + "type": "integer" + }, + "is_live": { + "type": "boolean" + }, + "is_premier_shop": { + "type": "boolean" + }, + "is_verified_seller": { + "type": "boolean" + }, + "rating": { + "type": "number" + }, + "review_count": { + "type": "integer" + }, + "sold_count": { + "type": "integer" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "whatnot.SellerResponse": { + "properties": { + "has_more": { + "type": "boolean" + }, + "next_cursor": { + "type": "string" + }, + "profile": { + "$ref": "#/definitions/whatnot.SellerProfile" + }, + "shows": { + "items": { + "$ref": "#/definitions/whatnot.LiveShow" + }, + "type": "array" + }, + "total_count": { + "type": "integer" + } + }, + "type": "object" + }, + "whatnot.browseResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/whatnot.BrowseResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "whatnot.categoriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/whatnot.CategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "whatnot.liveResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/whatnot.LiveResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "whatnot.sellerResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/whatnot.SellerResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wingstop.DeliveryStoreResponse": { + "properties": { + "drive_time_minutes": { + "example": 17, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "location_status": { + "example": "Active", + "type": "string" + }, + "slug": { + "description": "Slug can be passed directly as /wingstop/menu's path with\nservice_mode=delivery.", + "example": "wingstop-128-houston-tx-77065", + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "wingstop.DirectoryChild": { + "properties": { + "is_store": { + "description": "IsStore is a convenience flag equivalent to Kind == \"store\".", + "example": false, + "type": "boolean" + }, + "kind": { + "description": "Kind classifies the child: \"country\", \"state\", \"city\", or \"store\".\nOnly a \"store\" child carries no further directory levels -- pass its\npath to GET /wingstop/store instead of GET /wingstop/directory.", + "example": "city", + "type": "string" + }, + "name": { + "example": "Houston", + "type": "string" + }, + "path": { + "example": "us/tx/houston", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wingstop.DirectoryResponse": { + "properties": { + "children": { + "items": { + "$ref": "#/definitions/wingstop.DirectoryChild" + }, + "type": "array" + }, + "count": { + "example": 48, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "name": { + "type": "string" + }, + "path": { + "example": "us/tx", + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "wingstop.Flavor": { + "properties": { + "description": { + "type": "string" + }, + "heat_scale": { + "description": "HeatScale is Wingstop's own 0 (no heat) to 5 (hottest) rating.", + "example": 1, + "type": "integer" + }, + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "is_active": { + "description": "IsActive is false for a retired flavor Wingstop's catalog still\ncarries a record for but no longer offers -- confirmed live via\n\"Hot Lemon\", present in the feed but absent from the rendered page.", + "type": "boolean" + }, + "is_dry": { + "description": "IsDry distinguishes a dry rub from a wet sauce.", + "type": "boolean" + }, + "is_limited_time": { + "type": "boolean" + }, + "is_new": { + "type": "boolean" + }, + "is_popular": { + "type": "boolean" + }, + "name": { + "example": "Lemon Pepper", + "type": "string" + } + }, + "type": "object" + }, + "wingstop.FlavorsResponse": { + "properties": { + "count": { + "example": 16, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "flavors": { + "items": { + "$ref": "#/definitions/wingstop.Flavor" + }, + "type": "array" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "wingstop.MenuCategory": { + "properties": { + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "name": { + "example": "Wing Combos", + "type": "string" + }, + "products": { + "items": { + "$ref": "#/definitions/wingstop.MenuProduct" + }, + "type": "array" + }, + "slug": { + "example": "wing-combos", + "type": "string" + } + }, + "type": "object" + }, + "wingstop.MenuProduct": { + "properties": { + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "name": { + "example": "6 pc Wing Combo", + "type": "string" + }, + "slug": { + "example": "6-wing-combo", + "type": "string" + }, + "variants": { + "description": "Variants is always non-empty: one entry for a standalone item, one\nper size/preparation for a family.", + "items": { + "$ref": "#/definitions/wingstop.MenuVariant" + }, + "type": "array" + } + }, + "type": "object" + }, + "wingstop.MenuResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/wingstop.MenuCategory" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "path": { + "type": "string" + }, + "service_mode": { + "example": "carryout", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "store": { + "$ref": "#/definitions/wingstop.MenuStoreSummary" + } + }, + "type": "object" + }, + "wingstop.MenuStoreSummary": { + "properties": { + "currency_code": { + "example": "USD", + "type": "string" + }, + "lead_time_minutes": { + "example": 10, + "type": "integer" + }, + "name": { + "example": "Wingstop Houston Jones", + "type": "string" + }, + "slug": { + "example": "wingstop-128-houston-tx-77065", + "type": "string" + }, + "store_id": { + "example": "128", + "type": "string" + }, + "tax_rate_percent": { + "example": 8.25, + "type": "number" + } + }, + "type": "object" + }, + "wingstop.MenuVariant": { + "properties": { + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "is_default": { + "type": "boolean" + }, + "is_limited_time": { + "type": "boolean" + }, + "is_new": { + "type": "boolean" + }, + "is_popular": { + "type": "boolean" + }, + "max_calories": { + "example": 1330, + "type": "integer" + }, + "min_calories": { + "example": 430, + "type": "integer" + }, + "name": { + "example": "6 pc Boneless Combo", + "type": "string" + }, + "price": { + "example": 10.69, + "type": "number" + }, + "short_name": { + "type": "string" + }, + "slug": { + "example": "6-boneless-combo", + "type": "string" + } + }, + "type": "object" + }, + "wingstop.NearbyResponse": { + "properties": { + "count": { + "example": 20, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "radius_miles": { + "example": 20, + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "stores": { + "items": { + "$ref": "#/definitions/wingstop.NearbyStore" + }, + "type": "array" + } + }, + "type": "object" + }, + "wingstop.NearbyStore": { + "properties": { + "address": { + "$ref": "#/definitions/wingstop.StoreAddress" + }, + "amenities": { + "description": "Amenities are optional in-store features this location has, e.g.\n\"Coca Cola Freestyle\" -- present on a minority of stores (confirmed\nlive: about 60% of a sample radius search carried none).", + "example": [ + "Coca Cola Freestyle" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "distance_miles": { + "example": 0.6, + "type": "number" + }, + "fulfillment_services": { + "description": "FulfillmentServices are this store's enabled handoff modes, e.g.\n\"carryout\", \"delivery\".", + "items": { + "type": "string" + }, + "type": "array" + }, + "hours": { + "description": "Hours is this store's general published week, parsed from the\nlocation-worker record's own \"NotDetermined\"/\"Normal\" calendar\nblock -- a different source and shape from /wingstop/store's Yext\nhours, so day-for-day agreement between the two is not guaranteed.", + "items": { + "$ref": "#/definitions/wingstop.StoreHours" + }, + "type": "array" + }, + "latitude": { + "example": 29.9159405, + "type": "number" + }, + "location_status": { + "example": "Active", + "type": "string" + }, + "longitude": { + "example": -95.5838414, + "type": "number" + }, + "name": { + "example": "Wingstop Houston Jones", + "type": "string" + }, + "phone_number": { + "example": "+12814779464", + "type": "string" + }, + "slug": { + "example": "wingstop-128-houston-tx-77065", + "type": "string" + }, + "store_id": { + "example": "128", + "type": "string" + }, + "timezone": { + "example": "America/Chicago", + "type": "string" + } + }, + "type": "object" + }, + "wingstop.StoreAddress": { + "properties": { + "city": { + "example": "Houston", + "type": "string" + }, + "country": { + "example": "US", + "type": "string" + }, + "line1": { + "example": "9804 Jones Rd Ste A", + "type": "string" + }, + "line2": { + "type": "string" + }, + "postal_code": { + "example": "77065", + "type": "string" + }, + "region": { + "example": "TX", + "type": "string" + } + }, + "type": "object" + }, + "wingstop.StoreHours": { + "properties": { + "closed": { + "description": "Closed is true when Wingstop publishes the day with no open interval.", + "example": false, + "type": "boolean" + }, + "closes": { + "example": "01:00", + "type": "string" + }, + "day_of_week": { + "example": "Monday", + "type": "string" + }, + "opens": { + "example": "10:30", + "type": "string" + } + }, + "type": "object" + }, + "wingstop.StoreResponse": { + "properties": { + "address": { + "$ref": "#/definitions/wingstop.StoreAddress" + }, + "fetched_at": { + "type": "string" + }, + "fulfillment_services": { + "description": "FulfillmentServices are the pickup/delivery service flags Wingstop\npublishes for this store, e.g. \"In-Store Pickup\", \"Delivery\", \"Same\nDay Delivery\", \"No-Contact Delivery\".", + "items": { + "type": "string" + }, + "type": "array" + }, + "google_place_id": { + "type": "string" + }, + "hours": { + "description": "Hours is the store's general published week of hours.", + "items": { + "$ref": "#/definitions/wingstop.StoreHours" + }, + "type": "array" + }, + "latitude": { + "example": 29.9159405, + "type": "number" + }, + "location_status": { + "description": "LocationStatus is Wingstop's own operating-status label for this\nstore, e.g. \"Active\".", + "example": "Active", + "type": "string" + }, + "longitude": { + "example": -95.5838414, + "type": "number" + }, + "name": { + "example": "Wingstop", + "type": "string" + }, + "path": { + "description": "Path is the canonical /wingstop/store path for this restaurant, as\nrequested.", + "type": "string" + }, + "phone_number": { + "example": "+12814779464", + "type": "string" + }, + "price_range": { + "example": "$", + "type": "string" + }, + "service_hours": { + "allOf": [ + { + "$ref": "#/definitions/wingstop.StoreServiceHours" + } + ], + "description": "ServiceHours is the same week broken down per fulfillment channel --\nsee StoreServiceHours." + }, + "source_url": { + "type": "string" + }, + "store_id": { + "example": "128", + "type": "string" + }, + "timezone": { + "example": "America/Chicago", + "type": "string" + } + }, + "type": "object" + }, + "wingstop.StoreServiceHours": { + "properties": { + "delivery": { + "items": { + "$ref": "#/definitions/wingstop.StoreHours" + }, + "type": "array" + }, + "drive_through": { + "items": { + "$ref": "#/definitions/wingstop.StoreHours" + }, + "type": "array" + }, + "pickup": { + "items": { + "$ref": "#/definitions/wingstop.StoreHours" + }, + "type": "array" + }, + "takeout": { + "items": { + "$ref": "#/definitions/wingstop.StoreHours" + }, + "type": "array" + } + }, + "type": "object" + }, + "wingstop.deliveryStoreResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wingstop.DeliveryStoreResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "wingstop.directoryResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wingstop.DirectoryResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "wingstop.flavorsResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wingstop.FlavorsResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "wingstop.menuResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wingstop.MenuResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "wingstop.nearbyResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wingstop.NearbyResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "wingstop.storeResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wingstop.StoreResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "wired.ArticleResponse": { + "properties": { + "authors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "description": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "published_at": { + "type": "string" + }, + "section": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wired.AuthorArticle": { + "properties": { + "published_at": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wired.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/wired.AuthorArticle" + }, + "type": "array" + }, + "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "image_url": { + "type": "string" + }, + "job_title": { + "type": "string" + }, + "name": { + "type": "string" + }, + "social_links": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wired.HeadlinesResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" + }, + "section": { + "type": "string" + } + }, + "type": "object" + }, + "wired.NewsResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "wired.SectionsResponse": { + "properties": { + "sections": { + "items": { + "$ref": "#/definitions/newsplatform.Section" + }, + "type": "array" + } + }, + "type": "object" + }, + "wired.articleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wired.ArticleResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wired.authorResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wired.AuthorResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wired.headlinesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wired.HeadlinesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wired.newsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wired.NewsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wired.sectionsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wired.SectionsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wish.CategoriesResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/wish.Category" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "wish.Category": { + "properties": { + "filter_groups": { + "items": { + "$ref": "#/definitions/wish.FilterGroup" + }, + "type": "array" + }, + "filter_id": { + "type": "string" + }, + "is_main_tab": { + "type": "boolean" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "wish.Filter": { + "properties": { + "default_selected": { + "type": "boolean" + }, + "filter_id": { + "type": "string" + }, + "is_quick_filter": { + "type": "boolean" + }, + "is_toggle": { + "type": "boolean" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "wish.FilterGroup": { + "properties": { + "filters": { + "items": { + "$ref": "#/definitions/wish.Filter" + }, + "type": "array" + }, + "icon_url": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "wish.ProductDetailResponse": { + "properties": { + "description": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "is_sold_out": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "rating": { + "description": "Rating and RatingCount are the product's own aggregate rating, sourced\nfrom product-detail's dedicated rating module. A brand-new product\nwith no reviews yet carries a zero value for both rather than an\nerror.", + "type": "number" + }, + "rating_count": { + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "url": { + "type": "string" + }, + "variations": { + "items": { + "$ref": "#/definitions/wish.ProductVariation" + }, + "type": "array" + } + }, + "type": "object" + }, + "wish.ProductReviewsResponse": { + "properties": { + "count": { + "description": "Number of reviews that was requested.", + "type": "integer" + }, + "fetched_at": { + "description": "Time the data was fetched, in UTC (RFC 3339).", + "type": "string" + }, + "has_more": { + "description": "Whether more reviews exist beyond those returned.", + "type": "boolean" + }, + "product_id": { + "description": "Wish product id that was requested.", + "type": "string" + }, + "result_count": { + "description": "Number of reviews returned.", + "type": "integer" + }, + "reviews": { + "description": "Customer reviews of the product.", + "items": { + "$ref": "#/definitions/wish.Review" + }, + "type": "array" + }, + "source_url": { + "description": "URL the data was read from.", + "type": "string" + } + }, + "type": "object" + }, + "wish.ProductSummary": { + "properties": { + "currency_code": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "merchant_id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "price": { + "type": "number" + }, + "product_id": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "review_count": { + "type": "integer" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wish.ProductVariation": { + "properties": { + "color": { + "type": "string" + }, + "currency_code": { + "type": "string" + }, + "inventory": { + "type": "integer" + }, + "merchant_id": { + "type": "string" + }, + "merchant_name": { + "type": "string" + }, + "merchant_rating": { + "type": "number" + }, + "price": { + "type": "number" + }, + "size": { + "type": "string" + }, + "variation_id": { + "type": "string" + } + }, + "type": "object" + }, + "wish.RelatedItem": { + "properties": { + "currency_code": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "merchant_id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "price": { + "type": "number" + }, + "product_id": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "review_count": { + "type": "integer" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wish.RelatedItemsResponse": { + "properties": { + "fetched_at": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "shelves": { + "items": { + "$ref": "#/definitions/wish.RelatedShelf" + }, + "type": "array" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "wish.RelatedShelf": { + "properties": { + "feed_mode": { + "example": "similar", + "type": "string" + }, + "has_more": { + "type": "boolean" + }, + "items": { + "items": { + "$ref": "#/definitions/wish.RelatedItem" + }, + "type": "array" + }, + "subtitle": { + "example": "Similar Items with 5-7 Day Shipping", + "type": "string" + }, + "title": { + "example": "Faster Shipping", + "type": "string" + } + }, + "type": "object" + }, + "wish.Review": { + "properties": { + "color": { + "description": "Product color the review is for.", + "type": "string" + }, + "comment": { + "description": "Text of the review.", + "type": "string" + }, + "created_at": { + "description": "Time the review was posted, in ISO 8601 format.", + "type": "string" + }, + "downvote_count": { + "description": "Number of downvotes the review received.", + "type": "integer" + }, + "id": { + "description": "Wish review id.", + "type": "string" + }, + "image_ids": { + "description": "Ids of the photos attached to the review.", + "items": { + "type": "string" + }, + "type": "array" + }, + "is_wish_star": { + "description": "Whether Wish marks the review as a Wish Star rating.", + "type": "boolean" + }, + "rating": { + "description": "Star rating the reviewer gave.", + "type": "integer" + }, + "title": { + "description": "Review headline written by the reviewer.", + "type": "string" + }, + "upvote_count": { + "description": "Number of upvotes the review received.", + "type": "integer" + }, + "user_country_code": { + "description": "Country code of the reviewer, such as `US`.", + "type": "string" + }, + "user_name": { + "description": "Display name of the reviewer.", + "type": "string" + } + }, + "type": "object" + }, + "wish.SearchResponse": { + "properties": { + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "has_more": { + "type": "boolean" + }, + "next_offset": { + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "products": { + "items": { + "$ref": "#/definitions/wish.ProductSummary" + }, + "type": "array" + }, + "query": { + "type": "string" + }, + "result_count": { + "type": "integer" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "wish.SuggestResponse": { + "properties": { + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "query": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "suggestions": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "wish.categoriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wish.CategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wish.productDetailResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wish.ProductDetailResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wish.productReviewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wish.ProductReviewsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wish.relatedItemsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wish.RelatedItemsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wish.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wish.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wish.suggestResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wish.SuggestResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wolt.AvailabilityResponse": { + "properties": { + "delivery_enabled": { + "type": "boolean" + }, + "delivery_fee": { + "description": "DeliveryFee is the base delivery price for this caller's coordinate,\nin major currency units (e.g. euros). Wolt scales it with distance --\nconfirmed live 2026-09-05: the same venue returned 1.99 for a 474m\ncoordinate and 7.99 for a 16.2km one.", + "type": "number" + }, + "delivery_fee_label": { + "description": "DeliveryFeeLabel is Wolt's own locale-formatted rendering of the fee\nactually shown on the venue page (e.g. \"€0.00\" while a free-delivery\ncampaign is running), which can differ from DeliveryFee's list price.", + "type": "string" + }, + "delivery_method_default": { + "description": "DeliveryMethodDefault is the fulfilment method Wolt itself would\npreselect for this caller's coordinate: \"DELIVERY\", \"PICKUP\", or\n\"UNAVAILABLE\" when no coordinate was supplied (or the venue does not\ndeliver there at all). Confirmed live 2026-09-05.", + "type": "string" + }, + "delivery_open_status": { + "$ref": "#/definitions/wolt.OpenStatus" + }, + "distance_label": { + "description": "DistanceLabel is Wolt's own formatted venue distance from the\ncaller's coordinate (e.g. \"474 m\", \"16.2 km\"). Only present when\ncoordinates were supplied.", + "type": "string" + }, + "estimates": { + "items": { + "$ref": "#/definitions/wolt.DeliveryEstimate" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "online": { + "type": "boolean" + }, + "open_status": { + "$ref": "#/definitions/wolt.OpenStatus" + }, + "order_minimum": { + "description": "OrderMinimum is the venue's minimum order value in major currency\nunits, and OrderMinimumLabel Wolt's own locale-formatted rendering of\nit (e.g. \"Min. order €10.00\").", + "type": "number" + }, + "order_minimum_label": { + "type": "string" + }, + "promotions": { + "description": "Promotions are the discount campaign labels Wolt currently shows on\nthe venue's own public page (e.g. \"0 € delivery fee\", \"3x5 €\"). This\nis display text only -- no campaign is claimed, redeemed, or applied.", + "items": { + "type": "string" + }, + "type": "array" + }, + "self_delivery": { + "type": "boolean" + }, + "slug": { + "type": "string" + } + }, + "type": "object" + }, + "wolt.CategoryFilter": { + "properties": { + "count": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "wolt.CitiesResponse": { + "properties": { + "cities": { + "items": { + "$ref": "#/definitions/wolt.City" + }, + "type": "array" + }, + "country": { + "type": "string" + }, + "total_results": { + "type": "integer" + } + }, + "type": "object" + }, + "wolt.City": { + "properties": { + "country": { + "type": "string" + }, + "country_iso3": { + "type": "string" + }, + "distance_km": { + "description": "DistanceKm is Wolt's own whole-kilometre distance from the reference\ncoordinate, present only when latitude/longitude were supplied.\nConfirmed live 2026-09-05 against a haversine recomputation: Wolt\nreports 9 for a city 9.65km away and 13 for one 13.79km away, i.e.\nkilometres truncated to an integer, not metres.", + "type": "integer" + }, + "id": { + "type": "string" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "timezone": { + "type": "string" + } + }, + "type": "object" + }, + "wolt.Collection": { + "properties": { + "id": { + "type": "string" + }, + "restaurants": { + "items": { + "$ref": "#/definitions/wolt.Restaurant" + }, + "type": "array" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "wolt.CollectionsResponse": { + "properties": { + "collections": { + "items": { + "$ref": "#/definitions/wolt.Collection" + }, + "type": "array" + }, + "is_serviceable": { + "description": "IsServiceable reports whether Wolt delivers to the requested\ncoordinates at all. False means the coordinates are outside Wolt's\ndelivery coverage, so an empty collections list is a coverage\nanswer rather than a served location whose homepage happens to\ncarry no curated lists.", + "type": "boolean" + } + }, + "type": "object" + }, + "wolt.DaySchedule": { + "properties": { + "day": { + "type": "string" + }, + "formatted_times": { + "type": "string" + } + }, + "type": "object" + }, + "wolt.DeliveryEstimate": { + "properties": { + "label": { + "type": "string" + }, + "max_minutes": { + "type": "integer" + }, + "method": { + "type": "string" + }, + "min_minutes": { + "type": "integer" + }, + "minutes": { + "type": "integer" + } + }, + "type": "object" + }, + "wolt.FiltersResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/wolt.CategoryFilter" + }, + "type": "array" + }, + "total_results": { + "type": "integer" + } + }, + "type": "object" + }, + "wolt.MenuCategory": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/wolt.MenuItem" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "subcategory": { + "type": "string" + } + }, + "type": "object" + }, + "wolt.MenuItem": { + "properties": { + "barcode_gtin": { + "description": "BarcodeGTIN, UnitInfo, and UnitPrice are retail/grocery product\nfields. A restaurant dish carries none of them; a packaged store\nproduct usually carries all three.", + "type": "string" + }, + "description": { + "type": "string" + }, + "dietary_preferences": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "original_price": { + "type": "number" + }, + "price": { + "type": "number" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "unit_info": { + "type": "string" + }, + "unit_price": { + "$ref": "#/definitions/wolt.UnitPrice" + } + }, + "type": "object" + }, + "wolt.MenuResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/wolt.MenuCategory" + }, + "type": "array" + }, + "loading_strategy": { + "description": "LoadingStrategy reports whether this venue's items are included.\n\"full\" means every category below carries its items. \"partial\"\nmeans Wolt does not bulk-load this venue's assortment: the\ncategories are real but every one of them comes back with an empty\nitems list, and the venue's items are reachable only by keyword\nthrough /wolt/restaurant/menu/search. Large stores of any kind --\nsupermarkets, pharmacies, drugstores, DIY and toy stores -- are\ncommonly \"partial\"; restaurants are \"full\".", + "type": "string" + }, + "restaurant": { + "$ref": "#/definitions/wolt.RestaurantResponse" + } + }, + "type": "object" + }, + "wolt.MenuSearchResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/wolt.MenuItem" + }, + "type": "array" + }, + "query": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "total_results": { + "type": "integer" + } + }, + "type": "object" + }, + "wolt.OpenStatus": { + "properties": { + "is_open": { + "type": "boolean" + }, + "label": { + "type": "string" + }, + "next_close": { + "type": "string" + }, + "next_open": { + "type": "string" + }, + "now": { + "type": "string" + }, + "previous_open": { + "type": "string" + } + }, + "type": "object" + }, + "wolt.Restaurant": { + "properties": { + "address": { + "type": "string" + }, + "categories": { + "description": "Categories are the venue's own category ids, in the same taxonomy\n/wolt/search's category parameter and /wolt/search/filters use. This\nis a machine-readable vocabulary, distinct from Tags's free-text\ndisplay list. Only the two browse modes carry it; a keyword search\nomits it.", + "items": { + "type": "string" + }, + "type": "array" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "delivers": { + "type": "boolean" + }, + "estimate_minutes": { + "type": "integer" + }, + "estimate_range": { + "type": "string" + }, + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "latitude": { + "description": "Latitude/Longitude are the venue's own coordinates.", + "type": "number" + }, + "longitude": { + "type": "number" + }, + "name": { + "type": "string" + }, + "online": { + "type": "boolean" + }, + "price_range": { + "type": "integer" + }, + "product_line": { + "type": "string" + }, + "rating_count": { + "type": "integer" + }, + "rating_score": { + "type": "number" + }, + "short_description": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "wolt.RestaurantResponse": { + "properties": { + "address": { + "type": "string" + }, + "brand_name": { + "type": "string" + }, + "brand_slug": { + "description": "BrandSlug is a grouping key shared by every location of a chain\n(e.g. \"mcdonalds\"). Wolt publishes no brand listing, so it is not\naccepted as a parameter anywhere -- it is useful for collapsing\nresults by chain.", + "type": "string" + }, + "categories": { + "description": "Categories are the venue's own categories, each with the id\n/wolt/search's category parameter accepts, a display name, and a\nflag for the venue's primary category.", + "items": { + "$ref": "#/definitions/wolt.VenueCategory" + }, + "type": "array" + }, + "city": { + "type": "string" + }, + "city_id": { + "description": "CityID is the id of the /wolt/cities entry this venue belongs to.", + "type": "string" + }, + "country": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "delivery_base_price": { + "type": "integer" + }, + "delivery_methods": { + "items": { + "type": "string" + }, + "type": "array" + }, + "delivery_times": { + "items": { + "$ref": "#/definitions/wolt.DaySchedule" + }, + "type": "array" + }, + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "latitude": { + "description": "Latitude/Longitude are the venue's own coordinates.", + "type": "number" + }, + "longitude": { + "type": "number" + }, + "name": { + "type": "string" + }, + "opening_times": { + "items": { + "$ref": "#/definitions/wolt.DaySchedule" + }, + "type": "array" + }, + "order_minimum": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "pickup_friendly": { + "type": "boolean" + }, + "post_code": { + "type": "string" + }, + "price_range": { + "description": "PriceRange is Wolt's own 1-4 price tier and Tags its free-text\ndisplay cuisine list -- the same two fields /wolt/search returns per\nresult.", + "type": "integer" + }, + "product_line": { + "type": "string" + }, + "rating_count": { + "type": "integer" + }, + "rating_score": { + "type": "number" + }, + "service_fee_max": { + "type": "integer" + }, + "service_fee_min": { + "type": "integer" + }, + "service_fee_percent": { + "type": "integer" + }, + "share_url": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "timezone": { + "description": "Timezone is the IANA zone (e.g. \"Europe/Helsinki\") the venue's\nopening and delivery hours are expressed in.", + "type": "string" + }, + "website": { + "type": "string" + }, + "wolt_plus": { + "description": "WoltPlus reports whether the venue participates in Wolt's\nsubscription programme.", + "type": "boolean" + } + }, + "type": "object" + }, + "wolt.SearchResponse": { + "properties": { + "category": { + "type": "string" + }, + "is_serviceable": { + "description": "IsServiceable reports whether Wolt delivers to the requested\ncoordinates at all. False means the coordinates are outside Wolt's\ndelivery coverage, so an empty restaurants list is a coverage\nanswer rather than a no-matches answer. True with an empty list\nmeans the location is served but nothing matched. Always present:\nall three search modes -- plain browse, keyword search, and\ncategory browse -- answer it definitively.", + "type": "boolean" + }, + "open_now": { + "type": "boolean" + }, + "product_line": { + "type": "string" + }, + "query": { + "type": "string" + }, + "restaurants": { + "items": { + "$ref": "#/definitions/wolt.Restaurant" + }, + "type": "array" + }, + "sort": { + "type": "string" + }, + "total_results": { + "type": "integer" + } + }, + "type": "object" + }, + "wolt.UnitPrice": { + "properties": { + "base": { + "type": "integer" + }, + "price": { + "type": "number" + }, + "unit": { + "type": "string" + } + }, + "type": "object" + }, + "wolt.VenueCategory": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "primary": { + "type": "boolean" + } + }, + "type": "object" + }, + "wolt.availabilityResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wolt.AvailabilityResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "wolt.citiesResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wolt.CitiesResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "wolt.collectionsResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wolt.CollectionsResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "wolt.filtersResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wolt.FiltersResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "wolt.menuResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wolt.MenuResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "wolt.menuSearchResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wolt.MenuSearchResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "wolt.restaurantResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wolt.RestaurantResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "wolt.searchResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wolt.SearchResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "wsj.ArticleResponse": { + "properties": { + "archive_timestamp": { + "type": "string" + }, + "archive_url": { + "type": "string" + }, + "author": { + "type": "string" + }, + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "published_at": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + }, + "word_count": { + "type": "integer" + } + }, + "type": "object" + }, + "wsj.AuthorArticle": { + "properties": { + "published_at": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wsj.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/wsj.AuthorArticle" + }, + "type": "array" + }, + "bio": { + "type": "string" + }, + "email": { + "type": "string" + }, + "job_title": { + "type": "string" + }, + "name": { + "type": "string" + }, + "social_accounts": { + "items": { + "$ref": "#/definitions/wsj.AuthorSocialAccount" + }, + "type": "array" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wsj.AuthorSocialAccount": { + "properties": { + "platform": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "wsj.articleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wsj.ArticleResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wsj.authorResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wsj.AuthorResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "wta.CalendarPage": { + "properties": { + "content": { + "items": { + "$ref": "#/definitions/wta.Tournament" + }, + "type": "array" + }, + "pageInfo": { + "$ref": "#/definitions/wta.CalendarPageInfo" + } + }, + "type": "object" + }, + "wta.CalendarPageInfo": { + "properties": { + "numEntries": { + "type": "integer" + }, + "numPages": { + "type": "integer" + }, + "page": { + "type": "integer" + }, + "pageSize": { + "type": "integer" + } + }, + "type": "object" + }, + "wta.CountriesResponseDoc": { + "properties": { + "code": { + "type": "integer" + }, + "data": { + "items": { + "$ref": "#/definitions/wta.Country" + }, + "type": "array" + }, + "msg": { + "type": "string" + } + }, + "type": "object" + }, + "wta.Country": { + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "wta.MatchStateChoice": { + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "wta.MatchStatesResponseDoc": { + "properties": { + "code": { + "type": "integer" + }, + "data": { + "items": { + "$ref": "#/definitions/wta.MatchStateChoice" + }, + "type": "array" + }, + "msg": { + "type": "string" + } + }, + "type": "object" + }, + "wta.Player": { + "properties": { + "countryCode": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "fullName": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "lastName": { + "type": "string" + } + }, + "type": "object" + }, + "wta.Ranking": { + "properties": { + "movement": { + "example": 0, + "type": "number" + }, + "player": { + "$ref": "#/definitions/wta.Player" + }, + "player1": { + "$ref": "#/definitions/wta.Player" + }, + "player2": { + "$ref": "#/definitions/wta.Player" + }, + "points": { + "example": 8099, + "type": "number" + }, + "rankedAt": { + "example": "2026-11-02T00:00:00Z", + "type": "string" + }, + "ranking": { + "example": 1, + "type": "number" + }, + "tournamentsPlayed": { + "example": 20, + "type": "number" + } + }, + "type": "object" + }, + "wta.RankingsResponseDoc": { + "properties": { + "code": { + "type": "integer" + }, + "data": { + "items": { + "$ref": "#/definitions/wta.Ranking" + }, + "type": "array" + }, + "msg": { + "type": "string" + } + }, + "type": "object" + }, + "wta.Tournament": { + "properties": { + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "doublesDrawSize": { + "type": "integer" + }, + "endDate": { + "type": "string" + }, + "inOutdoor": { + "type": "string" + }, + "level": { + "type": "string" + }, + "prizeMoney": { + "type": "number" + }, + "prizeMoneyCurrency": { + "type": "string" + }, + "singlesDrawSize": { + "type": "integer" + }, + "startDate": { + "type": "string" + }, + "status": { + "type": "string" + }, + "surface": { + "type": "string" + }, + "title": { + "type": "string" + }, + "tournamentGroup": { + "$ref": "#/definitions/wta.TournamentGroup" + }, + "year": { + "type": "integer" + } + }, + "type": "object" + }, + "wta.TournamentGroup": { + "properties": { + "id": { + "type": "integer" + }, + "level": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "wta.TournamentResourceResponseDoc": { + "properties": { + "code": { + "type": "integer" + }, + "data": { + "additionalProperties": true, + "type": "object" + }, + "msg": { + "type": "string" + } + }, + "type": "object" + }, + "wta.TournamentSeasonsResponseDoc": { + "properties": { + "code": { + "type": "integer" + }, + "data": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "msg": { + "type": "string" + } + }, + "type": "object" + }, + "wta.TournamentsResponseDoc": { + "properties": { + "code": { + "type": "integer" + }, + "data": { + "$ref": "#/definitions/wta.CalendarPage" + }, + "msg": { + "type": "string" + } + }, + "type": "object" + }, + "x.Metrics": { + "properties": { + "bookmarks": { + "type": "integer" + }, + "likes": { + "type": "integer" + }, + "replies": { + "type": "integer" + }, + "reposts": { + "type": "integer" + }, + "views": { + "type": "integer" + } + }, + "type": "object" + }, + "x.Post": { + "properties": { + "author": { + "$ref": "#/definitions/x.User" + }, + "created_at": { + "type": "string" + }, + "id": { + "type": "string" + }, + "metrics": { + "$ref": "#/definitions/x.Metrics" + }, + "quoted": { + "$ref": "#/definitions/x.PostQuote" + }, + "text": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "x.PostQuote": { + "properties": { + "author": { + "$ref": "#/definitions/x.User" + }, + "created_at": { + "type": "string" + }, + "id": { + "type": "string" + }, + "text": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "x.Profile": { + "properties": { + "affiliate_label": { + "description": "AffiliateLabel is the small highlighted-affiliation badge X shows next\nto the display name (e.g. \"Prime Video\" for an account run on behalf\nof that brand). Distinct from VerifiedType; empty when the account has\nno highlighted affiliation.", + "type": "string" + }, + "avatar_url": { + "type": "string" + }, + "banner_url": { + "type": "string" + }, + "bio_urls": { + "description": "BioURLs are links written inside the bio, expanded from their t.co form.\nDistinct from ExternalURL, which is the single profile-header link.", + "items": { + "type": "string" + }, + "type": "array" + }, + "created_at": { + "type": "string" + }, + "description": { + "type": "string" + }, + "email": { + "description": "Email is an address the account self-published in its own bio text. It is\nonly ever extracted, never inferred or de-obfuscated. Empty for the vast\nmajority of profiles.", + "type": "string" + }, + "external_url": { + "type": "string" + }, + "id": { + "type": "string" + }, + "is_blue_verified": { + "type": "boolean" + }, + "is_default_profile_image": { + "description": "IsDefaultProfileImage marks accounts still on the placeholder avatar --\na strong shell/abandoned-account signal.", + "type": "boolean" + }, + "is_protected": { + "type": "boolean" + }, + "is_unavailable": { + "type": "boolean" + }, + "location": { + "type": "string" + }, + "metrics": { + "$ref": "#/definitions/x.ProfileMetrics" + }, + "name": { + "type": "string" + }, + "url": { + "type": "string" + }, + "username": { + "type": "string" + }, + "verified_type": { + "description": "VerifiedType distinguishes the flavour of verification (e.g. \"Business\",\n\"Government\"); empty for ordinary/blue accounts.", + "type": "string" + } + }, + "type": "object" + }, + "x.ProfileMetrics": { + "properties": { + "followers": { + "type": "integer" + }, + "following": { + "type": "integer" + }, + "likes": { + "type": "integer" + }, + "listed": { + "description": "Listed is how many curated lists include this account -- the best\nauthority proxy in the payload. Media/Likes are activity signals.\nOnly the syndication source populates these; the x.com page parser\nleaves them zero.", + "type": "integer" + }, + "media": { + "type": "integer" + }, + "posts": { + "type": "integer" + } + }, + "type": "object" + }, + "x.ProfilePosts": { + "properties": { + "count": { + "type": "integer" + }, + "posts": { + "items": { + "$ref": "#/definitions/x.Post" + }, + "type": "array" + }, + "url": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "x.User": { + "properties": { + "avatar_url": { + "type": "string" + }, + "banner_url": { + "type": "string" + }, + "id": { + "type": "string" + }, + "is_blue_verified": { + "type": "boolean" + }, + "is_protected": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "url": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "x.postResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/x.Post" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "x.profilePostsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/x.ProfilePosts" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "x.profileResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/x.Profile" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "xbox.BrowseResponse": { + "properties": { + "has_more": { + "example": true, + "type": "boolean" + }, + "items": { + "items": { + "$ref": "#/definitions/xbox.GameSummary" + }, + "type": "array" + }, + "next_cursor": { + "type": "string" + }, + "total_items": { + "example": 17620, + "type": "integer" + } + }, + "type": "object" + }, + "xbox.CollectionResponse": { + "properties": { + "has_more": { + "example": true, + "type": "boolean" + }, + "id": { + "example": "TopFreeGames", + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/xbox.GameSummary" + }, + "type": "array" + }, + "next_cursor": { + "type": "string" + }, + "title": { + "example": "Top free games", + "type": "string" + }, + "total_items": { + "example": 500, + "type": "integer" + } + }, + "type": "object" + }, + "xbox.ContentRating": { + "properties": { + "age": { + "example": 17, + "type": "integer" + }, + "board": { + "example": "ESRB", + "type": "string" + }, + "description": { + "example": "For ages 17 and up", + "type": "string" + }, + "descriptors": { + "example": [ + "[\"Blood and Gore\"", + "\"Intense Violence\"]" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "image_url": { + "type": "string" + }, + "rating": { + "example": "MATURE 17+", + "type": "string" + } + }, + "type": "object" + }, + "xbox.GameDetail": { + "properties": { + "available_on": { + "example": [ + "[\"XboxSeriesX|S\"", + "\"PC\"]" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "average_rating": { + "example": 4.5, + "type": "number" + }, + "box_art_url": { + "type": "string" + }, + "categories": { + "example": [ + "[\"Shooter\"]" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "content_rating": { + "$ref": "#/definitions/xbox.ContentRating" + }, + "description": { + "type": "string" + }, + "has_add_ons": { + "type": "boolean" + }, + "hero_art_url": { + "type": "string" + }, + "included_with_subscription_ids": { + "example": [ + "[\"CFQ7TTC0KHS0\"]" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "is_preorder": { + "type": "boolean" + }, + "poster_url": { + "type": "string" + }, + "price": { + "$ref": "#/definitions/xbox.Price" + }, + "product_id": { + "example": "9PK3G146XXVF", + "type": "string" + }, + "product_kind": { + "example": "Game", + "type": "string" + }, + "publisher": { + "example": "343 Industries", + "type": "string" + }, + "rating_count": { + "type": "integer" + }, + "release_date_utc": { + "example": "2021-12-08T00:00:00Z", + "type": "string" + }, + "short_description": { + "type": "string" + }, + "title": { + "example": "Halo Infinite", + "type": "string" + }, + "url": { + "example": "https://www.xbox.com/en-US/games/store/game/9pk3g146xxvf", + "type": "string" + }, + "videos": { + "items": { + "$ref": "#/definitions/xbox.Video" + }, + "type": "array" + } + }, + "type": "object" + }, + "xbox.GameSummary": { + "properties": { + "available_on": { + "example": [ + "[\"XboxSeriesX|S\"", + "\"PC\"]" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "average_rating": { + "example": 4.5, + "type": "number" + }, + "box_art_url": { + "type": "string" + }, + "categories": { + "example": [ + "[\"Shooter\"]" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "content_rating": { + "$ref": "#/definitions/xbox.ContentRating" + }, + "hero_art_url": { + "type": "string" + }, + "is_preorder": { + "type": "boolean" + }, + "poster_url": { + "type": "string" + }, + "price": { + "$ref": "#/definitions/xbox.Price" + }, + "product_id": { + "example": "9PK3G146XXVF", + "type": "string" + }, + "product_kind": { + "example": "Game", + "type": "string" + }, + "publisher": { + "example": "343 Industries", + "type": "string" + }, + "rating_count": { + "type": "integer" + }, + "release_date_utc": { + "example": "2021-12-08T00:00:00Z", + "type": "string" + }, + "title": { + "example": "Halo Infinite", + "type": "string" + }, + "url": { + "example": "https://www.xbox.com/en-US/games/store/game/9pk3g146xxvf", + "type": "string" + } + }, + "type": "object" + }, + "xbox.Price": { + "properties": { + "currency": { + "example": "USD", + "type": "string" + }, + "discount_percentage": { + "example": 25, + "type": "number" + }, + "is_free": { + "example": false, + "type": "boolean" + }, + "list_price": { + "example": 59.99, + "type": "number" + }, + "msrp": { + "example": 59.99, + "type": "number" + }, + "sale_end_date_utc": { + "example": "2026-10-23T03:59:59Z", + "type": "string" + } + }, + "type": "object" + }, + "xbox.RatingsSummary": { + "properties": { + "average_rating": { + "example": 3.3, + "type": "number" + }, + "star1_count": { + "example": 82702, + "type": "integer" + }, + "star2_count": { + "example": 8799, + "type": "integer" + }, + "star3_count": { + "example": 9863, + "type": "integer" + }, + "star4_count": { + "example": 12807, + "type": "integer" + }, + "star5_count": { + "example": 112007, + "type": "integer" + }, + "total_count": { + "example": 226178, + "type": "integer" + } + }, + "type": "object" + }, + "xbox.Review": { + "properties": { + "device_family": { + "example": "Windows.Xbox", + "type": "string" + }, + "helpful_negative": { + "example": 647, + "type": "integer" + }, + "helpful_positive": { + "example": 16025, + "type": "integer" + }, + "rating": { + "example": 5, + "type": "integer" + }, + "review_id": { + "type": "string" + }, + "submitted_date_time": { + "example": "2024-04-19T18:53:50Z", + "type": "string" + }, + "text": { + "type": "string" + }, + "title": { + "example": "Great game", + "type": "string" + }, + "user_name": { + "example": "Ryder2010676", + "type": "string" + } + }, + "type": "object" + }, + "xbox.ReviewsResponse": { + "properties": { + "product_id": { + "example": "BT5P2X999VH2", + "type": "string" + }, + "ratings": { + "$ref": "#/definitions/xbox.RatingsSummary" + }, + "reviews": { + "items": { + "$ref": "#/definitions/xbox.Review" + }, + "type": "array" + }, + "total_reviews": { + "example": 91078, + "type": "integer" + } + }, + "type": "object" + }, + "xbox.SearchResponse": { + "properties": { + "category": { + "example": "games", + "type": "string" + }, + "has_more": { + "example": true, + "type": "boolean" + }, + "items": { + "items": { + "$ref": "#/definitions/xbox.GameSummary" + }, + "type": "array" + }, + "next_cursor": { + "type": "string" + }, + "query": { + "example": "halo", + "type": "string" + }, + "total_items": { + "example": 41, + "type": "integer" + } + }, + "type": "object" + }, + "xbox.Video": { + "properties": { + "height": { + "type": "integer" + }, + "preview_image_url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + }, + "width": { + "type": "integer" + } + }, + "type": "object" + }, + "xbox.browseResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/xbox.BrowseResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "xbox.collectionResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/xbox.CollectionResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "xbox.gameResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/xbox.GameDetail" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "xbox.reviewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/xbox.ReviewsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "xbox.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/xbox.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "xda.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" + }, + "biography": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "social_links": { + "items": { + "$ref": "#/definitions/valnet.AuthorSocialLink" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "xiaohongshu.Channel": { + "properties": { + "id": { + "example": "homefeed.food_v3", + "type": "string" + }, + "name": { + "example": "美食", + "type": "string" + } + }, + "type": "object" + }, + "xiaohongshu.Comment": { + "properties": { + "author": { + "$ref": "#/definitions/xiaohongshu.CommentAuthor" + }, + "comment_id": { + "example": "0123456789abcdef01234567", + "type": "string" + }, + "content": { + "type": "string" + }, + "created_at": { + "example": 1700000000, + "type": "integer" + }, + "ip_location": { + "example": "上海", + "type": "string" + }, + "like_count": { + "example": 12, + "type": "integer" + }, + "sub_comment_count": { + "example": 3, + "type": "integer" + }, + "sub_comments": { + "items": { + "$ref": "#/definitions/xiaohongshu.Comment" + }, + "type": "array" + } + }, + "type": "object" + }, + "xiaohongshu.CommentAuthor": { + "properties": { + "avatar_url": { + "type": "string" + }, + "nickname": { + "example": "synthetic_user", + "type": "string" + }, + "user_id": { + "example": "000000000000000000000002", + "type": "string" + } + }, + "type": "object" + }, + "xiaohongshu.CommentsResponse": { + "properties": { + "count": { + "example": 20, + "type": "integer" + }, + "cursor": { + "type": "string" + }, + "has_more": { + "type": "boolean" + }, + "items": { + "items": { + "$ref": "#/definitions/xiaohongshu.Comment" + }, + "type": "array" + }, + "note_id": { + "example": "0123456789abcdef01234567", + "type": "string" + } + }, + "type": "object" + }, + "xiaohongshu.ExploreCard": { + "properties": { + "author": { + "$ref": "#/definitions/xiaohongshu.NoteAuthor" + }, + "cover_url": { + "type": "string" + }, + "liked_count": { + "example": 14000, + "type": "integer" + }, + "note_id": { + "example": "0123456789abcdef01234567", + "type": "string" + }, + "note_url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "example": "video", + "type": "string" + }, + "xsec_token": { + "type": "string" + } + }, + "type": "object" + }, + "xiaohongshu.ExploreResponse": { + "properties": { + "channel_id": { + "example": "homefeed_recommend", + "type": "string" + }, + "channels": { + "items": { + "$ref": "#/definitions/xiaohongshu.Channel" + }, + "type": "array" + }, + "count": { + "example": 30, + "type": "integer" + }, + "items": { + "items": { + "$ref": "#/definitions/xiaohongshu.ExploreCard" + }, + "type": "array" + } + }, + "type": "object" + }, + "xiaohongshu.NoteAuthor": { + "properties": { + "avatar_url": { + "type": "string" + }, + "nickname": { + "example": "synthetic_user", + "type": "string" + }, + "user_id": { + "example": "000000000000000000000002", + "type": "string" + } + }, + "type": "object" + }, + "xiaohongshu.NoteResponse": { + "properties": { + "author": { + "$ref": "#/definitions/xiaohongshu.NoteAuthor" + }, + "description": { + "type": "string" + }, + "image_urls": { + "items": { + "type": "string" + }, + "type": "array" + }, + "note_id": { + "example": "0123456789abcdef01234567", + "type": "string" + }, + "published_at": { + "example": "2026-09-22T04:03:46Z", + "type": "string" + }, + "stats": { + "$ref": "#/definitions/xiaohongshu.NoteStats" + }, + "tags": { + "items": { + "$ref": "#/definitions/xiaohongshu.NoteTag" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "type": { + "example": "video", + "type": "string" + }, + "url": { + "type": "string" + }, + "video_duration_seconds": { + "type": "integer" + }, + "video_url": { + "type": "string" + } + }, + "type": "object" + }, + "xiaohongshu.NoteStats": { + "properties": { + "collected_count": { + "type": "integer" + }, + "comment_count": { + "type": "integer" + }, + "liked_count": { + "type": "integer" + }, + "share_count": { + "type": "integer" + } + }, + "type": "object" + }, + "xiaohongshu.NoteTag": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "example": "美食", + "type": "string" + } + }, + "type": "object" + }, + "xiaohongshu.SuggestItem": { + "properties": { + "highlight_flags": { + "items": { + "type": "boolean" + }, + "type": "array" + }, + "search_type": { + "example": "notes", + "type": "string" + }, + "text": { + "example": "coffee", + "type": "string" + }, + "type": { + "example": "top_note", + "type": "string" + } + }, + "type": "object" + }, + "xiaohongshu.SuggestResponse": { + "properties": { + "count": { + "example": 10, + "type": "integer" + }, + "items": { + "items": { + "$ref": "#/definitions/xiaohongshu.SuggestItem" + }, + "type": "array" + }, + "keyword": { + "example": "coffee", + "type": "string" + }, + "search_cpl_id": { + "type": "string" + }, + "word_request_id": { + "type": "string" + } + }, + "type": "object" + }, + "xiaohongshu.commentsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/xiaohongshu.CommentsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "xiaohongshu.exploreResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/xiaohongshu.ExploreResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "xiaohongshu.noteResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/xiaohongshu.NoteResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "xiaohongshu.suggestResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/xiaohongshu.SuggestResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahooautos.ArticleResponse": { + "properties": { + "author": { + "type": "string" + }, + "description": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "keywords": { + "items": { + "type": "string" + }, + "type": "array" + }, + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "provider": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "section": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahooautos.CategoryPaginate": { + "properties": { + "next_page": { + "example": 2, + "type": "integer" + }, + "page": { + "example": 1, + "type": "integer" + } + }, + "type": "object" + }, + "yahooautos.CategoryResponse": { + "properties": { + "category": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/yahooautos.StreamItem" + }, + "type": "array" + }, + "pagination": { + "$ref": "#/definitions/yahooautos.CategoryPaginate" + } + }, + "type": "object" + }, + "yahooautos.HomeResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/yahooautos.StreamItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahooautos.StreamItem": { + "properties": { + "category": { + "type": "string" + }, + "id": { + "type": "string" + }, + "thumbnail_url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahooautos.articleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahooautos.ArticleResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahooautos.categoryResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahooautos.CategoryResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahooautos.homeResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahooautos.HomeResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahooentertainment.ArticleResponse": { + "properties": { + "author": { + "type": "string" + }, + "description": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "keywords": { + "items": { + "type": "string" + }, + "type": "array" + }, + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "provider": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "section": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahooentertainment.CategoryPaginate": { + "properties": { + "next_page": { + "example": 2, + "type": "integer" + }, + "page": { + "example": 1, + "type": "integer" + } + }, + "type": "object" + }, + "yahooentertainment.CategoryResponse": { + "properties": { + "category": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/yahooentertainment.StreamItem" + }, + "type": "array" + }, + "pagination": { + "$ref": "#/definitions/yahooentertainment.CategoryPaginate" + } + }, + "type": "object" + }, + "yahooentertainment.HomeResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/yahooentertainment.StreamItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahooentertainment.StreamItem": { + "properties": { + "category": { + "type": "string" + }, + "id": { + "type": "string" + }, + "thumbnail_url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahooentertainment.articleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahooentertainment.ArticleResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahooentertainment.categoryResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahooentertainment.CategoryResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahooentertainment.homeResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahooentertainment.HomeResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.ActionEvents": { + "properties": { + "capital_gains": { + "description": "Capital gain distributions in the period.", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "dividends": { + "description": "Dividend payments in the period.", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "splits": { + "description": "Stock splits in the period.", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoofinance.CalendarResponse": { + "properties": { + "end": { + "description": "Last date covered, as YYYY-MM-DD.", + "example": "2026-05-27", + "type": "string" + }, + "limit": { + "description": "Maximum number of rows returned.", + "example": 12, + "type": "integer" + }, + "offset": { + "description": "Zero-based offset of the first row.", + "example": 0, + "type": "integer" + }, + "rows": { + "description": "Calendar entries, one object per row, with the columns Yahoo Finance shows.", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "start": { + "description": "First date covered, as YYYY-MM-DD.", + "example": "2026-05-20", + "type": "string" + }, + "type": { + "description": "Calendar returned, for example `earnings`.", + "example": "earnings", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.CalendarsResponse": { + "properties": { + "calendars": { + "description": "Names of the available calendars.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoofinance.DomainListResponse": { + "properties": { + "items": { + "description": "Sectors or industries in the list.", + "items": { + "$ref": "#/definitions/yahoofinance.DomainRef" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoofinance.DomainRef": { + "properties": { + "key": { + "description": "Identifier of the sector or industry. Use it with the matching endpoint.", + "example": "technology", + "type": "string" + }, + "name": { + "description": "Display name of the sector or industry.", + "example": "Technology", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.DownloadRequest": { + "properties": { + "auto_adjust": { + "type": "boolean" + }, + "back_adjust": { + "type": "boolean" + }, + "end": { + "type": "string" + }, + "include_actions": { + "type": "boolean" + }, + "include_prepost": { + "type": "boolean" + }, + "interval": { + "type": "string" + }, + "keepna": { + "type": "boolean" + }, + "period": { + "type": "string" + }, + "rounding": { + "type": "boolean" + }, + "start": { + "type": "string" + }, + "symbols": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "symbols" + ], + "type": "object" + }, + "yahoofinance.DownloadResponse": { + "properties": { + "results": { + "description": "One result per requested symbol, in request order.", + "items": { + "$ref": "#/definitions/yahoofinance.DownloadResult" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoofinance.DownloadResult": { + "properties": { + "error": { + "description": "Message explaining why the history could not be returned. Omitted on success.", + "type": "string" + }, + "history": { + "allOf": [ + { + "$ref": "#/definitions/yahoofinance.HistoryResponse" + } + ], + "description": "Price history of the symbol. Omitted when the symbol failed." + }, + "symbol": { + "description": "Ticker symbol this result is for.", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.EarningsDatesResponse": { + "properties": { + "limit": { + "description": "Maximum number of rows returned.", + "example": 12, + "type": "integer" + }, + "offset": { + "description": "Zero-based offset of the first row.", + "example": 0, + "type": "integer" + }, + "rows": { + "description": "Earnings dates, one object per row.", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "symbol": { + "description": "Ticker symbol, for example `AAPL`.", + "example": "AAPL", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.FinancialsResponse": { + "properties": { + "modules": { + "additionalProperties": {}, + "description": "Statement line items grouped by section.", + "type": "object" + }, + "period": { + "description": "Reporting period returned, for example `annual`.", + "example": "annual", + "type": "string" + }, + "statement": { + "description": "Statement returned, for example `income`.", + "example": "income", + "type": "string" + }, + "symbol": { + "description": "Ticker symbol, for example `AAPL`.", + "example": "AAPL", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.HistoryMetadataResponse": { + "properties": { + "meta": { + "additionalProperties": {}, + "description": "Metadata about the instrument and its price history, as Yahoo Finance reports it.", + "type": "object" + }, + "symbol": { + "description": "Ticker symbol, for example `AAPL`.", + "example": "AAPL", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.HistoryResponse": { + "properties": { + "events": { + "allOf": [ + { + "$ref": "#/definitions/yahoofinance.ActionEvents" + } + ], + "description": "Dividends, splits and capital gains in the period. Present when actions were requested." + }, + "meta": { + "additionalProperties": {}, + "description": "Metadata about the instrument and the price series, as Yahoo Finance reports it.", + "type": "object" + }, + "points": { + "description": "Price candles in time order.", + "items": { + "$ref": "#/definitions/yahoofinance.PricePoint" + }, + "type": "array" + }, + "symbol": { + "description": "Ticker symbol, for example `AAPL`.", + "example": "AAPL", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.ISINResponse": { + "properties": { + "isin": { + "description": "International Securities Identification Number of the instrument, for example `US0378331005`.", + "example": "US0378331005", + "type": "string" + }, + "symbol": { + "description": "Ticker symbol, for example `AAPL`.", + "example": "AAPL", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.IndustryResponse": { + "properties": { + "key": { + "description": "Identifier of the industry.", + "example": "semiconductors", + "type": "string" + }, + "name": { + "description": "Name of the industry.", + "example": "Semiconductors", + "type": "string" + }, + "overview": { + "additionalProperties": {}, + "description": "Summary figures for the industry.", + "type": "object" + }, + "research_reports": { + "description": "Research reports about the industry.", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "sector_key": { + "description": "Identifier of the sector the industry belongs to.", + "example": "technology", + "type": "string" + }, + "sector_name": { + "description": "Name of the sector the industry belongs to.", + "example": "Technology", + "type": "string" + }, + "symbol": { + "description": "Index symbol that tracks the industry.", + "type": "string" + }, + "top_companies": { + "description": "Largest companies in the industry.", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "top_growth_companies": { + "description": "Fastest-growing companies in the industry.", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "top_performing_companies": { + "description": "Best-performing companies in the industry.", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoofinance.InfoResponse": { + "properties": { + "modules": { + "additionalProperties": {}, + "description": "Company and quote information grouped by section.", + "type": "object" + }, + "symbol": { + "description": "Ticker symbol, for example `AAPL`.", + "example": "AAPL", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.LookupResponse": { + "properties": { + "count": { + "description": "Number of documents returned.", + "example": 10, + "type": "integer" + }, + "documents": { + "description": "Matching instruments, one object per match.", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "query": { + "description": "Lookup text that was run.", + "example": "apple", + "type": "string" + }, + "start": { + "description": "Zero-based offset of the first result.", + "example": 0, + "type": "integer" + }, + "total": { + "description": "Total number of matches reported by Yahoo Finance.", + "example": 10, + "type": "integer" + }, + "type": { + "description": "Instrument type filter applied, for example `all`.", + "example": "all", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.MarketStatusResponse": { + "properties": { + "market": { + "description": "Market code, for example `US`.", + "example": "US", + "type": "string" + }, + "status": { + "additionalProperties": {}, + "description": "Current trading status of the market, as Yahoo Finance reports it.", + "type": "object" + } + }, + "type": "object" + }, + "yahoofinance.MarketSummaryResponse": { + "properties": { + "market": { + "description": "Market code, for example `US`.", + "example": "US", + "type": "string" + }, + "summary": { + "description": "Market summary entries, one object per index or instrument.", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoofinance.ModuleResponse": { + "properties": { + "modules": { + "additionalProperties": {}, + "description": "Data grouped by section.", + "type": "object" + }, + "symbol": { + "description": "Ticker symbol, for example `AAPL`.", + "example": "AAPL", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.OptionExpiration": { + "properties": { + "calls": { + "description": "Call option contracts for this expiration.", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "expiration_date": { + "description": "Expiration date of the chain, in Unix seconds.", + "example": 1779235200, + "type": "integer" + }, + "puts": { + "description": "Put option contracts for this expiration.", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoofinance.OptionsResponse": { + "properties": { + "expiration_dates": { + "description": "Available option expiration dates, in Unix seconds.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "options": { + "description": "Option chains, one entry per expiration date.", + "items": { + "$ref": "#/definitions/yahoofinance.OptionExpiration" + }, + "type": "array" + }, + "symbol": { + "description": "Ticker symbol, for example `AAPL`.", + "example": "AAPL", + "type": "string" + }, + "underlying": { + "additionalProperties": {}, + "description": "Quote data of the underlying stock.", + "type": "object" + } + }, + "type": "object" + }, + "yahoofinance.PricePoint": { + "properties": { + "adj_close": { + "description": "Closing price adjusted for dividends and splits.", + "example": 211, + "type": "number" + }, + "close": { + "description": "Closing price of the candle.", + "example": 211, + "type": "number" + }, + "datetime": { + "description": "Start of the candle, in UTC (RFC 3339).", + "example": "2026-05-18T13:30:00Z", + "type": "string" + }, + "high": { + "description": "Highest price of the candle.", + "example": 212, + "type": "number" + }, + "low": { + "description": "Lowest price of the candle.", + "example": 209, + "type": "number" + }, + "open": { + "description": "Opening price of the candle.", + "example": 210, + "type": "number" + }, + "timestamp": { + "description": "Start of the candle, in Unix seconds.", + "example": 1779111000, + "type": "integer" + }, + "volume": { + "description": "Number of shares traded during the candle.", + "example": 54200000, + "type": "integer" + } + }, + "type": "object" + }, + "yahoofinance.QuoteResponse": { + "properties": { + "quotes": { + "description": "Quote data, one object per symbol.", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "symbols": { + "description": "Ticker symbols that were requested.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoofinance.ScreenerRequest": { + "properties": { + "count": { + "description": "Count is the maximum number of matching quotes to return (default 25, maximum 250).", + "type": "integer" + }, + "offset": { + "description": "Offset is the zero-based index of the first matching quote (default 0, maximum 10000).", + "type": "integer" + }, + "query": { + "additionalProperties": {}, + "description": "Query is required and contains Yahoo's recursive criteria tree. Combine conditions with AND or OR; leaves use an operator such as EQ or GT with operands [field, value], for example {operator: GT, operands: [dayvolume, 1000000]}. Accepted fields depend on quote_type.", + "type": "object" + }, + "quote_type": { + "description": "QuoteType selects the instrument class to screen. Allowed values are EQUITY (default), ETF, and MUTUALFUND.", + "type": "string" + }, + "sort_asc": { + "description": "SortAsc sorts in ascending order when true; the default is descending.", + "type": "boolean" + }, + "sort_field": { + "description": "SortField selects the quote field used to order results, such as ticker or marketcap (default ticker).", + "type": "string" + } + }, + "required": [ + "query" + ], + "type": "object" + }, + "yahoofinance.ScreenerResponse": { + "properties": { + "description": { + "description": "Description of the screener.", + "type": "string" + }, + "id": { + "description": "Identifier of the screener, for example `day_gainers`.", + "example": "day_gainers", + "type": "string" + }, + "meta": { + "additionalProperties": {}, + "description": "Screener metadata: its canonical name and criteria details.", + "type": "object" + }, + "quotes": { + "description": "Instruments that match the screener.", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "title": { + "description": "Display title of the screener, for example `Day Gainers`.", + "example": "Day Gainers", + "type": "string" + }, + "total": { + "description": "Total number of instruments that match the screener.", + "example": 25, + "type": "integer" + } + }, + "type": "object" + }, + "yahoofinance.ScreenersResponse": { + "properties": { + "screeners": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoofinance.SearchResponse": { + "properties": { + "lists": { + "description": "Yahoo Finance lists matching the query.", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "news": { + "description": "News articles matching the query.", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "query": { + "description": "Search text that was run.", + "type": "string" + }, + "quotes": { + "description": "Ticker and company matches.", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "research": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoofinance.SectorResponse": { + "properties": { + "industries": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "key": { + "example": "technology", + "type": "string" + }, + "name": { + "example": "Technology", + "type": "string" + }, + "overview": { + "additionalProperties": {}, + "type": "object" + }, + "research_reports": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "symbol": { + "example": "^IXT", + "type": "string" + }, + "top_companies": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "top_etfs": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "top_mutual_funds": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + }, + "type": "object" + }, + "yahoofinance.SharesFullResponse": { + "properties": { + "end": { + "description": "Last date covered, as YYYY-MM-DD.", + "example": "2026-05-20", + "type": "string" + }, + "points": { + "description": "Share count history, one object per data point.", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "start": { + "description": "First date covered, as YYYY-MM-DD.", + "example": "2025-01-01", + "type": "string" + }, + "symbol": { + "description": "Ticker symbol, for example `AAPL`.", + "example": "AAPL", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.SharesResponse": { + "properties": { + "shares": { + "additionalProperties": {}, + "description": "Share count information, as Yahoo Finance reports it.", + "type": "object" + }, + "symbol": { + "description": "Ticker symbol, for example `AAPL`.", + "example": "AAPL", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.TrendingResponse": { + "properties": { + "count": { + "description": "Number of trending symbols returned.", + "example": 5, + "type": "integer" + }, + "job_timestamp": { + "description": "Time Yahoo Finance generated the list, in Unix milliseconds.", + "example": 1779268508061, + "type": "integer" + }, + "region": { + "description": "Region code of the trending list, for example `US`.", + "example": "US", + "type": "string" + }, + "start_interval": { + "description": "Start of the trending interval, as a 12-digit number such as `202605200800`.", + "example": 202605200800, + "type": "integer" + }, + "symbols": { + "description": "Trending ticker symbols.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoofinance.ValuationResponse": { + "properties": { + "headers": { + "description": "Column headers of the valuation table.", + "items": { + "type": "string" + }, + "type": "array" + }, + "rows": { + "description": "Valuation measures, one object per row.", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "symbol": { + "description": "Ticker symbol, for example `AAPL`.", + "example": "AAPL", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.actionsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.ActionEvents" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.calendarResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.CalendarResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.calendarsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.CalendarsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.domainListResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.DomainListResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.downloadResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.DownloadResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.earningsDatesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.EarningsDatesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.financialsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.FinancialsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.historyMetadataResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.HistoryMetadataResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.historyResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.HistoryResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.industryResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.IndustryResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.infoResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.InfoResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.isinResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.ISINResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.lookupResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.LookupResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.marketStatusResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.MarketStatusResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.marketSummaryResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.MarketSummaryResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.moduleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.ModuleResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.optionsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.OptionsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.quoteResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.QuoteResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.screenerResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.ScreenerResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.screenersResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.ScreenersResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.sectorResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.SectorResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.sharesFullResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.SharesFullResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.sharesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.SharesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.trendingResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.TrendingResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoofinance.valuationResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoofinance.ValuationResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoohealth.ArticleResponse": { + "properties": { + "author": { + "type": "string" + }, + "description": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "keywords": { + "items": { + "type": "string" + }, + "type": "array" + }, + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "provider": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "section": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoohealth.CategoryPaginate": { + "properties": { + "next_page": { + "example": 2, + "type": "integer" + }, + "page": { + "example": 1, + "type": "integer" + } + }, + "type": "object" + }, + "yahoohealth.CategoryResponse": { + "properties": { + "category": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/yahoohealth.StreamItem" + }, + "type": "array" + }, + "pagination": { + "$ref": "#/definitions/yahoohealth.CategoryPaginate" + } + }, + "type": "object" + }, + "yahoohealth.HomeResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/yahoohealth.StreamItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoohealth.StreamItem": { + "properties": { + "category": { + "type": "string" + }, + "id": { + "type": "string" + }, + "thumbnail_url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoohealth.articleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoohealth.ArticleResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoohealth.categoryResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoohealth.CategoryResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoohealth.homeResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoohealth.HomeResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoolife.ArticleResponse": { + "properties": { + "author": { + "type": "string" + }, + "description": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "keywords": { + "items": { + "type": "string" + }, + "type": "array" + }, + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "provider": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "section": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoolife.HomeResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/yahoolife.StreamItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoolife.StreamItem": { + "properties": { + "id": { + "type": "string" + }, + "thumbnail_url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoolife.articleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoolife.ArticleResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoolife.homeResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoolife.HomeResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoonews.ArticleResponse": { + "properties": { + "author": { + "type": "string" + }, + "category": { + "type": "string" + }, + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "keywords": { + "items": { + "type": "string" + }, + "type": "array" + }, + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "provider": { + "type": "string" + }, + "provider_url": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoonews.CategoryResponse": { + "properties": { + "category": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/yahoonews.StreamItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoonews.Comment": { + "properties": { + "author": { + "$ref": "#/definitions/yahoonews.CommentAuthor" + }, + "body": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "id": { + "type": "string" + }, + "pinned": { + "type": "boolean" + }, + "reactions": { + "$ref": "#/definitions/yahoonews.CommentReactions" + }, + "reply_count": { + "type": "integer" + }, + "updated_at": { + "type": "string" + } + }, + "type": "object" + }, + "yahoonews.CommentAuthor": { + "properties": { + "avatar_url": { + "type": "string" + }, + "handle": { + "type": "string" + }, + "has_default_avatar": { + "type": "boolean" + }, + "nickname": { + "type": "string" + }, + "total_comment_count": { + "type": "integer" + }, + "total_reaction_count": { + "type": "integer" + } + }, + "type": "object" + }, + "yahoonews.CommentReactions": { + "properties": { + "clap": { + "type": "integer" + }, + "heart": { + "type": "integer" + }, + "laugh": { + "type": "integer" + }, + "sad": { + "type": "integer" + }, + "thumbs_down": { + "type": "integer" + }, + "thumbs_up": { + "type": "integer" + }, + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "yahoonews.CommentsResponse": { + "properties": { + "comments_count": { + "type": "integer" + }, + "content_id": { + "type": "string" + }, + "has_next_page": { + "type": "boolean" + }, + "items": { + "items": { + "$ref": "#/definitions/yahoonews.Comment" + }, + "type": "array" + }, + "next_cursor": { + "type": "string" + }, + "sort": { + "type": "string" + } + }, + "type": "object" + }, + "yahoonews.HomeResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/yahoonews.StreamItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoonews.Image": { + "properties": { + "height": { + "type": "integer" + }, + "url": { + "type": "string" + }, + "width": { + "type": "integer" + } + }, + "type": "object" + }, + "yahoonews.RelatedResponse": { + "properties": { + "content_id": { + "type": "string" + }, + "has_next_page": { + "type": "boolean" + }, + "items": { + "items": { + "$ref": "#/definitions/yahoonews.StreamItem" + }, + "type": "array" + }, + "next_cursor": { + "type": "string" + } + }, + "type": "object" + }, + "yahoonews.RepliesResponse": { + "properties": { + "comment_id": { + "type": "string" + }, + "content_id": { + "type": "string" + }, + "has_next_page": { + "type": "boolean" + }, + "items": { + "items": { + "$ref": "#/definitions/yahoonews.Comment" + }, + "type": "array" + }, + "next_cursor": { + "type": "string" + }, + "sort": { + "type": "string" + }, + "total_count": { + "type": "integer" + } + }, + "type": "object" + }, + "yahoonews.StreamItem": { + "properties": { + "authors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "category": { + "type": "string" + }, + "comment_count": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "images": { + "items": { + "$ref": "#/definitions/yahoonews.Image" + }, + "type": "array" + }, + "published_at": { + "type": "string" + }, + "source": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "thumbnail_url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoonews.SuggestResponse": { + "properties": { + "fetched_at": { + "type": "string" + }, + "query": { + "example": "chatgpt", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "suggestions": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoonews.articleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoonews.ArticleResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoonews.categoryResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoonews.CategoryResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoonews.commentsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoonews.CommentsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoonews.homeResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoonews.HomeResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoonews.relatedResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoonews.RelatedResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoonews.repliesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoonews.RepliesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoonews.suggestResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoonews.SuggestResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosearch.ImageResult": { + "properties": { + "domain": { + "example": "example.com", + "type": "string" + }, + "height": { + "example": 1080, + "type": "integer" + }, + "image_url": { + "example": "https://example.com/chatgpt.jpg", + "type": "string" + }, + "page_url": { + "example": "https://example.com/article", + "type": "string" + }, + "position": { + "example": 1, + "type": "integer" + }, + "thumbnail_url": { + "type": "string" + }, + "title": { + "example": "ChatGPT logo", + "type": "string" + }, + "width": { + "example": 1920, + "type": "integer" + } + }, + "type": "object" + }, + "yahoosearch.ImagesResponse": { + "properties": { + "query": { + "example": "chatgpt", + "type": "string" + }, + "results": { + "items": { + "$ref": "#/definitions/yahoosearch.ImageResult" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoosearch.LocalResponse": { + "properties": { + "query": { + "example": "pizza near seattle wa", + "type": "string" + }, + "results": { + "items": { + "$ref": "#/definitions/yahoosearch.LocalResult" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoosearch.LocalResult": { + "properties": { + "address": { + "example": "2001 4th Ave", + "type": "string" + }, + "category": { + "example": "Pizza", + "type": "string" + }, + "id": { + "example": "36383310", + "type": "string" + }, + "image_url": { + "type": "string" + }, + "name": { + "example": "Serious Pie Downtown", + "type": "string" + }, + "open_status": { + "example": "Closed", + "type": "string" + }, + "phone": { + "example": "(206) 838-7388", + "type": "string" + }, + "position": { + "example": 1, + "type": "integer" + }, + "price_range": { + "example": "$$", + "type": "string" + }, + "rating": { + "example": 4, + "type": "number" + }, + "review_count": { + "example": 4870, + "type": "integer" + } + }, + "type": "object" + }, + "yahoosearch.NewsResponse": { + "properties": { + "query": { + "example": "chatgpt", + "type": "string" + }, + "results": { + "items": { + "$ref": "#/definitions/yahoosearch.NewsResult" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoosearch.NewsResult": { + "properties": { + "age": { + "example": "29 minutes ago", + "type": "string" + }, + "description": { + "type": "string" + }, + "position": { + "example": 1, + "type": "integer" + }, + "source": { + "example": "AFP", + "type": "string" + }, + "thumbnail_url": { + "type": "string" + }, + "title": { + "example": "OpenAI announces ChatGPT update", + "type": "string" + }, + "url": { + "example": "https://example.com/article", + "type": "string" + } + }, + "type": "object" + }, + "yahoosearch.SearchPagination": { + "properties": { + "next_page": { + "example": 2, + "type": "integer" + }, + "page": { + "example": 1, + "type": "integer" + } + }, + "type": "object" + }, + "yahoosearch.SearchResponse": { + "properties": { + "pagination": { + "$ref": "#/definitions/yahoosearch.SearchPagination" + }, + "query": { + "example": "openai", + "type": "string" + }, + "results": { + "items": { + "$ref": "#/definitions/yahoosearch.SearchResult" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoosearch.SearchResult": { + "properties": { + "description": { + "example": "OpenAI is an AI research and deployment company. Our mission is to ensure that artificial general intelligence benefits all of humanity.", + "type": "string" + }, + "hostname": { + "example": "openai.com", + "type": "string" + }, + "position": { + "example": 1, + "type": "integer" + }, + "title": { + "example": "OpenAI | Research & Deployment", + "type": "string" + }, + "url": { + "example": "https://openai.com/", + "type": "string" + } + }, + "type": "object" + }, + "yahoosearch.SuggestResponse": { + "properties": { + "fetched_at": { + "type": "string" + }, + "query": { + "example": "chatgpt", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "suggestions": { + "items": { + "$ref": "#/definitions/yahoosearch.Suggestion" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoosearch.Suggestion": { + "properties": { + "entity": { + "$ref": "#/definitions/yahoosearch.SuggestionEntity" + }, + "text": { + "example": "chatgpt free", + "type": "string" + } + }, + "type": "object" + }, + "yahoosearch.SuggestionEntity": { + "properties": { + "description": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "subtitle": { + "type": "string" + }, + "type": { + "example": "company", + "type": "string" + } + }, + "type": "object" + }, + "yahoosearch.VideoResult": { + "properties": { + "description": { + "type": "string" + }, + "domain": { + "example": "YouTube", + "type": "string" + }, + "duration": { + "example": "00:29", + "type": "string" + }, + "position": { + "example": 1, + "type": "integer" + }, + "thumbnail_url": { + "type": "string" + }, + "title": { + "example": "ChatGPT Demo", + "type": "string" + }, + "url": { + "example": "https://www.youtube.com/watch?v=example", + "type": "string" + } + }, + "type": "object" + }, + "yahoosearch.VideosResponse": { + "properties": { + "query": { + "example": "chatgpt", + "type": "string" + }, + "results": { + "items": { + "$ref": "#/definitions/yahoosearch.VideoResult" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoosearch.imagesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosearch.ImagesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosearch.localResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosearch.LocalResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosearch.newsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosearch.NewsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosearch.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosearch.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosearch.suggestResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosearch.SuggestResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosearch.videosResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosearch.VideosResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.ArticleResponse": { + "properties": { + "author": { + "type": "string" + }, + "author_url": { + "type": "string" + }, + "description": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "keywords": { + "items": { + "type": "string" + }, + "type": "array" + }, + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "provider": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "section": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.AuthorPagination": { + "properties": { + "next_page": { + "example": 2, + "type": "integer" + }, + "page": { + "example": 1, + "type": "integer" + }, + "total_pages": { + "example": 190, + "type": "integer" + } + }, + "type": "object" + }, + "yahooshopping.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/yahooshopping.StreamItem" + }, + "type": "array" + }, + "articles_on_yahoo": { + "type": "string" + }, + "author": { + "type": "string" + }, + "bio": { + "type": "string" + }, + "editorial_awards": { + "type": "string" + }, + "expertise": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "pagination": { + "$ref": "#/definitions/yahooshopping.AuthorPagination" + }, + "role": { + "type": "string" + }, + "url": { + "type": "string" + }, + "years_writing": { + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.CategoriesResponse": { + "properties": { + "article_shortcuts": { + "items": { + "$ref": "#/definitions/yahooshopping.ShoppingArticleShortcut" + }, + "type": "array" + }, + "categories": { + "items": { + "$ref": "#/definitions/yahooshopping.ShoppingCategory" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahooshopping.CategoryPaginate": { + "properties": { + "next_page": { + "example": 2, + "type": "integer" + }, + "page": { + "example": 1, + "type": "integer" + } + }, + "type": "object" + }, + "yahooshopping.CategoryResponse": { + "properties": { + "category": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/yahooshopping.StreamItem" + }, + "type": "array" + }, + "pagination": { + "$ref": "#/definitions/yahooshopping.CategoryPaginate" + }, + "subcategory": { + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.ExpertsResponse": { + "properties": { + "experts": { + "items": { + "$ref": "#/definitions/yahooshopping.FeaturedExpert" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahooshopping.FeaturedExpert": { + "properties": { + "author": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "role": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.HomeResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/yahooshopping.StreamItem" + }, + "type": "array" + }, + "pagination": { + "$ref": "#/definitions/yahooshopping.CategoryPaginate" + } + }, + "type": "object" + }, + "yahooshopping.ShoppingArticleShortcut": { + "properties": { + "category": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.ShoppingCategory": { + "properties": { + "category": { + "type": "string" + }, + "name": { + "type": "string" + }, + "subcategories": { + "items": { + "$ref": "#/definitions/yahooshopping.ShoppingSubcategory" + }, + "type": "array" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.ShoppingListItem": { + "properties": { + "currency": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "price": { + "type": "number" + }, + "sale_price": { + "type": "number" + }, + "seller": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.ShoppingListListing": { + "properties": { + "image_url": { + "type": "string" + }, + "list": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.ShoppingListResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/yahooshopping.ShoppingListItem" + }, + "type": "array" + }, + "list": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.ShoppingListsResponse": { + "properties": { + "lists": { + "items": { + "$ref": "#/definitions/yahooshopping.ShoppingListListing" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahooshopping.ShoppingSubcategory": { + "properties": { + "name": { + "type": "string" + }, + "subcategory": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.ShoppingSuggestion": { + "properties": { + "search_count": { + "type": "integer" + }, + "text": { + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.SitemapArticle": { + "properties": { + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.SitemapLink": { + "properties": { + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.SitemapPageResponse": { + "properties": { + "archives": { + "items": { + "$ref": "#/definitions/yahooshopping.SitemapLink" + }, + "type": "array" + }, + "articles": { + "items": { + "$ref": "#/definitions/yahooshopping.SitemapArticle" + }, + "type": "array" + }, + "days": { + "items": { + "$ref": "#/definitions/yahooshopping.SitemapLink" + }, + "type": "array" + }, + "page_type": { + "example": "archive", + "type": "string" + }, + "sections": { + "items": { + "$ref": "#/definitions/yahooshopping.SitemapSection" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.SitemapSection": { + "properties": { + "section": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.SitemapsResponse": { + "properties": { + "sections": { + "items": { + "$ref": "#/definitions/yahooshopping.SitemapSection" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahooshopping.StoreListing": { + "properties": { + "logo_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "store": { + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.StoreOffer": { + "properties": { + "brand": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "price": { + "type": "number" + }, + "sale_price": { + "type": "number" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.StoreResponse": { + "properties": { + "name": { + "type": "string" + }, + "offers": { + "items": { + "$ref": "#/definitions/yahooshopping.StoreOffer" + }, + "type": "array" + }, + "store": { + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.StoresResponse": { + "properties": { + "stores": { + "items": { + "$ref": "#/definitions/yahooshopping.StoreListing" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahooshopping.StreamItem": { + "properties": { + "category": { + "type": "string" + }, + "id": { + "type": "string" + }, + "thumbnail_url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.SuggestResponse": { + "properties": { + "fetched_at": { + "type": "string" + }, + "query": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "suggestions": { + "items": { + "$ref": "#/definitions/yahooshopping.ShoppingSuggestion" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahooshopping.articleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahooshopping.ArticleResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.authorResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahooshopping.AuthorResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.categoriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahooshopping.CategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.categoryResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahooshopping.CategoryResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.expertsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahooshopping.ExpertsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.homeResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahooshopping.HomeResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.shoppingListResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahooshopping.ShoppingListResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.shoppingListsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahooshopping.ShoppingListsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.sitemapPageResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahooshopping.SitemapPageResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.sitemapsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahooshopping.SitemapsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.storeResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahooshopping.StoreResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.storesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahooshopping.StoresResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahooshopping.suggestResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahooshopping.SuggestResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.BracketSeasonOption": { + "properties": { + "name": { + "example": "2025", + "type": "string" + }, + "value": { + "example": 2025, + "type": "integer" + } + }, + "type": "object" + }, + "yahoosports.Broadcast": { + "properties": { + "abbr": { + "example": "NFLN", + "type": "string" + }, + "name": { + "example": "NFL Network", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.CollegeRankingsFilter": { + "properties": { + "name": { + "example": "Poll Type", + "type": "string" + }, + "options": { + "items": { + "$ref": "#/definitions/yahoosports.CollegeRankingsFilterOption" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoosports.CollegeRankingsFilterOption": { + "properties": { + "label": { + "example": "AP Top 25", + "type": "string" + }, + "selected": { + "type": "boolean" + }, + "value": { + "example": "AP_TOP_25", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.CollegeRankingsResponse": { + "properties": { + "count": { + "example": 25, + "type": "integer" + }, + "current_season": { + "example": 2026, + "type": "integer" + }, + "data": { + "type": "object" + }, + "date": { + "example": "2026-10-25-07:00", + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "filters": { + "items": { + "$ref": "#/definitions/yahoosports.CollegeRankingsFilter" + }, + "type": "array" + }, + "graphite_league": { + "example": "ncaaw", + "type": "string" + }, + "league": { + "example": "college-womens-basketball", + "type": "string" + }, + "page_url": { + "type": "string" + }, + "poll_type": { + "example": "AP_TOP_25", + "type": "string" + }, + "rankings": { + "items": { + "type": "object" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "tz": { + "example": "UTC", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.DropdownCatalogResponse": { + "properties": { + "data": { + "type": "object" + }, + "entry_count": { + "example": 11, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.Game": { + "properties": { + "away_score": { + "type": "integer" + }, + "away_team": { + "$ref": "#/definitions/yahoosports.TeamRef" + }, + "broadcasts": { + "items": { + "$ref": "#/definitions/yahoosports.Broadcast" + }, + "type": "array" + }, + "competition": { + "$ref": "#/definitions/yahoosports.SoccerCompetitionRef" + }, + "display_name": { + "example": "Green Bay @ Pittsburgh", + "type": "string" + }, + "home_score": { + "type": "integer" + }, + "home_team": { + "$ref": "#/definitions/yahoosports.TeamRef" + }, + "id": { + "example": "nfl.g.20260813023", + "type": "string" + }, + "slug": { + "example": "green-bay-packers-pittsburgh-steelers-20260813023", + "type": "string" + }, + "start_time": { + "example": "2026-08-13T16:00:00-07:00", + "type": "string" + }, + "status": { + "example": "PREGAME", + "type": "string" + }, + "status_display": { + "type": "string" + }, + "url": { + "type": "string" + }, + "venue": { + "$ref": "#/definitions/yahoosports.Venue" + }, + "week": { + "type": "integer" + } + }, + "type": "object" + }, + "yahoosports.GameResponse": { + "properties": { + "away_score": { + "type": "integer" + }, + "away_team": { + "$ref": "#/definitions/yahoosports.TeamRef" + }, + "broadcasts": { + "items": { + "$ref": "#/definitions/yahoosports.Broadcast" + }, + "type": "array" + }, + "competition": { + "$ref": "#/definitions/yahoosports.SoccerCompetitionRef" + }, + "display_name": { + "example": "Cleveland @ Detroit", + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "game": { + "example": "cleveland-guardians-detroit-tigers-460811106", + "type": "string" + }, + "home_score": { + "type": "integer" + }, + "home_team": { + "$ref": "#/definitions/yahoosports.TeamRef" + }, + "id": { + "example": "mlb.g.460811106", + "type": "string" + }, + "league": { + "example": "mlb", + "type": "string" + }, + "line_score": { + "items": { + "$ref": "#/definitions/yahoosports.LinePeriod" + }, + "type": "array" + }, + "play_by_play": { + "items": { + "type": "object" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "start_time": { + "type": "string" + }, + "status": { + "example": "FINAL", + "type": "string" + }, + "status_display": { + "example": "Final", + "type": "string" + }, + "team_stats": { + "items": { + "$ref": "#/definitions/yahoosports.TeamStatLine" + }, + "type": "array" + }, + "venue": { + "$ref": "#/definitions/yahoosports.Venue" + }, + "week": { + "type": "integer" + }, + "win_probability_timeline": { + "items": { + "type": "object" + }, + "type": "array" + }, + "winning_team_id": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.GolfDirectoryPlayer": { + "properties": { + "active": { + "type": "boolean" + }, + "first_name": { + "type": "string" + }, + "headshot_url": { + "type": "string" + }, + "id": { + "example": "golf.p.22880", + "type": "string" + }, + "last_name": { + "type": "string" + }, + "name": { + "example": "Ludvig Aberg", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.GolfLeaderboardEntry": { + "properties": { + "player": { + "$ref": "#/definitions/yahoosports.GolfPlayerRef" + }, + "rank": { + "example": "T1", + "type": "string" + }, + "rounds": { + "items": { + "$ref": "#/definitions/yahoosports.GolfRoundResult" + }, + "type": "array" + }, + "score": { + "example": -5, + "type": "integer" + }, + "score_display": { + "example": "-5", + "type": "string" + }, + "stats": { + "$ref": "#/definitions/yahoosports.GolfPlayerStats" + }, + "status": { + "example": "IN_PROGRESS", + "type": "string" + }, + "thru": { + "example": 18, + "type": "integer" + } + }, + "type": "object" + }, + "yahoosports.GolfLeaderboardResponse": { + "properties": { + "count": { + "example": 156, + "type": "integer" + }, + "entries": { + "items": { + "$ref": "#/definitions/yahoosports.GolfLeaderboardEntry" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "season": { + "example": 2026, + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "tour": { + "example": "pga-tour", + "type": "string" + }, + "tournament": { + "$ref": "#/definitions/yahoosports.GolfTournamentRef" + } + }, + "type": "object" + }, + "yahoosports.GolfPlayerGroup": { + "properties": { + "count": { + "example": 14, + "type": "integer" + }, + "initial": { + "example": "A", + "type": "string" + }, + "players": { + "items": { + "$ref": "#/definitions/yahoosports.GolfDirectoryPlayer" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoosports.GolfPlayerProfile": { + "properties": { + "active": { + "type": "boolean" + }, + "awards": { + "items": { + "type": "object" + }, + "type": "array" + }, + "birth_city": { + "type": "string" + }, + "birth_country": { + "type": "object" + }, + "birth_date": { + "type": "string" + }, + "birth_state": { + "type": "string" + }, + "college": { + "type": "string" + }, + "display_height": { + "type": "string" + }, + "earnings": { + "type": "string" + }, + "first_name": { + "type": "string" + }, + "first_year": { + "type": "integer" + }, + "game_log_preview": { + "items": { + "type": "object" + }, + "type": "array" + }, + "headshot_url": { + "type": "string" + }, + "height": { + "type": "integer" + }, + "id": { + "example": "golf.p.22880", + "type": "string" + }, + "injury": { + "type": "object" + }, + "last_name": { + "type": "string" + }, + "last_year": { + "type": "integer" + }, + "name": { + "example": "Ludvig Aberg", + "type": "string" + }, + "season_stats": { + "items": { + "type": "object" + }, + "type": "array" + }, + "sport": { + "example": "Golf", + "type": "string" + }, + "subpages": { + "items": { + "$ref": "#/definitions/yahoosports.GolfPlayerSubpage" + }, + "type": "array" + }, + "tournament_stats": { + "items": { + "type": "object" + }, + "type": "array" + }, + "url": { + "type": "string" + }, + "weight": { + "type": "integer" + } + }, + "type": "object" + }, + "yahoosports.GolfPlayerRef": { + "properties": { + "country": { + "example": "United States", + "type": "string" + }, + "id": { + "example": "golf.p.23296", + "type": "string" + }, + "name": { + "example": "Michael Thorbjornsen", + "type": "string" + }, + "short_name": { + "example": "M. Thorbjornsen", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.GolfPlayerResponse": { + "properties": { + "fetched_at": { + "type": "string" + }, + "player": { + "$ref": "#/definitions/yahoosports.GolfPlayerProfile" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.GolfPlayerStats": { + "properties": { + "birdies": { + "example": 12, + "type": "integer" + }, + "bogeys": { + "example": 3, + "type": "integer" + }, + "double_bogeys": { + "example": 0, + "type": "integer" + }, + "eagles": { + "example": 1, + "type": "integer" + }, + "earnings": { + "example": "$0.00", + "type": "string" + }, + "pars": { + "example": 48, + "type": "integer" + } + }, + "type": "object" + }, + "yahoosports.GolfPlayerSubpage": { + "properties": { + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.GolfPlayersResponse": { + "properties": { + "count": { + "example": 750, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "groups": { + "items": { + "$ref": "#/definitions/yahoosports.GolfPlayerGroup" + }, + "type": "array" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.GolfRoundResult": { + "properties": { + "round": { + "example": 1, + "type": "integer" + }, + "score": { + "example": -5, + "type": "integer" + }, + "score_display": { + "example": "-5", + "type": "string" + }, + "strokes": { + "example": 65, + "type": "integer" + } + }, + "type": "object" + }, + "yahoosports.GolfScheduleResponse": { + "properties": { + "count": { + "example": 41, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "season": { + "example": 2026, + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "tour": { + "example": "pga-tour", + "type": "string" + }, + "tournaments": { + "items": { + "$ref": "#/definitions/yahoosports.GolfTournament" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoosports.GolfTournament": { + "properties": { + "champion": { + "type": "string" + }, + "display_name": { + "type": "string" + }, + "end_date": { + "example": "2026-08-16", + "type": "string" + }, + "id": { + "example": "golf.e.23", + "type": "string" + }, + "name": { + "example": "FedEx St. Jude Championship", + "type": "string" + }, + "par": { + "type": "integer" + }, + "purse": { + "example": "20000000.00", + "type": "string" + }, + "season": { + "example": 2026, + "type": "integer" + }, + "start_date": { + "example": "2026-08-13", + "type": "string" + }, + "start_time": { + "type": "string" + }, + "status": { + "example": "IN_PROGRESS", + "type": "string" + }, + "status_display": { + "type": "string" + }, + "url": { + "type": "string" + }, + "venue": { + "$ref": "#/definitions/yahoosports.Venue" + }, + "yardage": { + "type": "integer" + } + }, + "type": "object" + }, + "yahoosports.GolfTournamentRef": { + "properties": { + "current_round": { + "example": 1, + "type": "integer" + }, + "end_date": { + "example": "2026-08-16", + "type": "string" + }, + "id": { + "example": "golf.e.23", + "type": "string" + }, + "name": { + "example": "FedEx St. Jude Championship", + "type": "string" + }, + "purse": { + "example": "20000000.00", + "type": "string" + }, + "rounds": { + "example": 4, + "type": "integer" + }, + "start_date": { + "example": "2026-08-13", + "type": "string" + }, + "status": { + "example": "IN_PROGRESS", + "type": "string" + }, + "url": { + "type": "string" + }, + "venue": { + "$ref": "#/definitions/yahoosports.Venue" + } + }, + "type": "object" + }, + "yahoosports.HomeResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/yahoosports.NewsArticle" + }, + "type": "array" + }, + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "navigation": { + "items": { + "$ref": "#/definitions/yahoosports.YahooSportsNavigationItem" + }, + "type": "array" + }, + "navigation_count": { + "type": "integer" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.InjuryReportPlayer": { + "properties": { + "description": { + "example": "Shoulder", + "type": "string" + }, + "headshot_url": { + "type": "string" + }, + "id": { + "example": "nba.p.6705", + "type": "string" + }, + "name": { + "example": "Mark Williams", + "type": "string" + }, + "positions": { + "example": [ + "C" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "start_date": { + "example": "2026-09-11-05:00", + "type": "string" + }, + "status": { + "example": "Out", + "type": "string" + }, + "type_abbr": { + "example": "O", + "type": "string" + }, + "type_id": { + "example": "O", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.InjuryReportResponse": { + "properties": { + "count": { + "example": 1, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "league": { + "example": "nba", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "team_id": { + "example": "nba.t.21", + "type": "string" + }, + "teams": { + "items": { + "$ref": "#/definitions/yahoosports.InjuryReportTeam" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoosports.InjuryReportTeam": { + "properties": { + "count": { + "example": 1, + "type": "integer" + }, + "id": { + "example": "nba.t.21", + "type": "string" + }, + "logo_url": { + "type": "string" + }, + "name": { + "example": "Phoenix Suns", + "type": "string" + }, + "players": { + "items": { + "$ref": "#/definitions/yahoosports.InjuryReportPlayer" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoosports.LeagueCatalogResponse": { + "properties": { + "count": { + "example": 28, + "type": "integer" + }, + "golf_tours": { + "example": [ + "pga-tour", + "pga-european-tours", + "lpga-tour", + "champions-tour", + "european-tour", + "korn-ferry-tour" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "injury_report_leagues": { + "example": [ + "nfl", + "nba", + "mlb", + "nhl" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "leagues": { + "items": { + "$ref": "#/definitions/yahoosports.YahooSportsLeague" + }, + "type": "array" + }, + "motorsports_series": { + "example": [ + "f1", + "nascar" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "observed_at": { + "example": "2026-11-01", + "type": "string" + }, + "player_search_leagues": { + "example": [ + "nfl", + "nba", + "mlb", + "golf" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "tennis_ranking_types": { + "example": [ + "mens-singles", + "womens-singles", + "mens-doubles", + "womens-doubles" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoosports.LeagueScheduleCatalogResponse": { + "properties": { + "current_season": { + "example": 2026, + "type": "integer" + }, + "date_filter_supported": { + "type": "boolean" + }, + "fetched_at": { + "type": "string" + }, + "league": { + "example": "nfl", + "type": "string" + }, + "league_filter_options": { + "items": { + "$ref": "#/definitions/yahoosports.ScheduleFilterOption" + }, + "type": "array" + }, + "season_options": { + "items": { + "$ref": "#/definitions/yahoosports.ScheduleSeasonOption" + }, + "type": "array" + }, + "season_phases": { + "example": [ + "REGULAR_SEASON" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "week_filter_supported": { + "type": "boolean" + }, + "week_options": { + "items": { + "$ref": "#/definitions/yahoosports.ScheduleWeekOption" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoosports.LeagueScheduleResponse": { + "properties": { + "count": { + "example": 16, + "type": "integer" + }, + "date": { + "example": "2026-10-04", + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "games": { + "items": { + "$ref": "#/definitions/yahoosports.Game" + }, + "type": "array" + }, + "league": { + "example": "nfl", + "type": "string" + }, + "league_filter": { + "example": "conferenceIds_1", + "type": "string" + }, + "season": { + "example": 2026, + "type": "integer" + }, + "season_phase": { + "example": "REGULAR_SEASON", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "week": { + "example": 9, + "type": "integer" + } + }, + "type": "object" + }, + "yahoosports.LinePeriod": { + "properties": { + "away": { + "type": "integer" + }, + "home": { + "type": "integer" + }, + "label": { + "example": "Bottom 5th", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.MMAEvent": { + "properties": { + "id": { + "example": "combat.e.2144", + "type": "string" + }, + "name": { + "example": "UFC 324: Gaethje vs. Pimblett", + "type": "string" + }, + "start_time": { + "example": "2026-01-25T07:12:00+08:00", + "type": "string" + }, + "status": { + "example": "FINAL", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.MMAFight": { + "properties": { + "card_position": { + "example": "Main", + "type": "string" + }, + "current_round": { + "type": "integer" + }, + "fighter_one": { + "$ref": "#/definitions/yahoosports.MMAFighterRef" + }, + "fighter_two": { + "$ref": "#/definitions/yahoosports.MMAFighterRef" + }, + "id": { + "example": "combat.g.13595836", + "type": "string" + }, + "start_time": { + "example": "2026-08-16T10:00:00+08:00", + "type": "string" + }, + "status": { + "example": "PREGAME", + "type": "string" + }, + "weight_class": { + "example": "Womens Strawweight", + "type": "string" + }, + "winner_id": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.MMAFightCardResponse": { + "properties": { + "count": { + "example": 12, + "type": "integer" + }, + "event": { + "$ref": "#/definitions/yahoosports.MMAEvent" + }, + "fetched_at": { + "type": "string" + }, + "fights": { + "items": { + "$ref": "#/definitions/yahoosports.MMAFight" + }, + "type": "array" + }, + "promotion": { + "example": "UFC", + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.MMAFighterRef": { + "properties": { + "country": { + "example": "United States", + "type": "string" + }, + "fighting_out_of": { + "example": "United States", + "type": "string" + }, + "headshot_url": { + "type": "string" + }, + "id": { + "example": "combat.p.2087412", + "type": "string" + }, + "name": { + "example": "Mackenzie Dern", + "type": "string" + }, + "rank": { + "example": 5, + "type": "integer" + }, + "record": { + "example": "16-5-0", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.MMAScheduleResponse": { + "properties": { + "count": { + "example": 51, + "type": "integer" + }, + "events": { + "items": { + "$ref": "#/definitions/yahoosports.MMAEvent" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "promotion": { + "example": "UFC", + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.MoreNewsPageInfo": { + "properties": { + "end_cursor": { + "type": "string" + }, + "has_next_page": { + "type": "boolean" + } + }, + "type": "object" + }, + "yahoosports.MoreNewsPagination": { + "properties": { + "effective_page": { + "example": 1, + "type": "integer" + }, + "page_size": { + "example": 50, + "type": "integer" + }, + "total_pages": { + "example": 10, + "type": "integer" + } + }, + "type": "object" + }, + "yahoosports.MoreNewsResponse": { + "properties": { + "count": { + "example": 50, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "items": { + "items": { + "type": "object" + }, + "type": "array" + }, + "league": { + "example": "top", + "type": "string" + }, + "list_id": { + "type": "string" + }, + "max_count": { + "example": 4000, + "type": "integer" + }, + "page": { + "example": 1, + "type": "integer" + }, + "page_info": { + "$ref": "#/definitions/yahoosports.MoreNewsPageInfo" + }, + "page_path": { + "example": "/page/", + "type": "string" + }, + "page_type": { + "example": "news", + "type": "string" + }, + "pagination": { + "$ref": "#/definitions/yahoosports.MoreNewsPagination" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.MotorsportsCar": { + "properties": { + "engine": { + "example": "Mercedes M08 EQ Power+", + "type": "string" + }, + "model": { + "example": "Mercedes F1 W08 EQ Power+", + "type": "string" + }, + "number": { + "example": 63, + "type": "integer" + }, + "owner": { + "example": "Mercedes AMG Motorsport", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.MotorsportsDriverRef": { + "properties": { + "id": { + "example": "motorsports.p.1490", + "type": "string" + }, + "name": { + "example": "George Russell", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.MotorsportsRace": { + "properties": { + "distance_mi": { + "example": "306.12", + "type": "string" + }, + "id": { + "example": "motorsports.g.2961", + "type": "string" + }, + "laps": { + "example": 58, + "type": "integer" + }, + "laps_completed": { + "example": 58, + "type": "integer" + }, + "name": { + "example": "Australian Grand Prix", + "type": "string" + }, + "pole_winner": { + "$ref": "#/definitions/yahoosports.MotorsportsDriverRef" + }, + "race_winner": { + "$ref": "#/definitions/yahoosports.MotorsportsDriverRef" + }, + "start_time": { + "example": "2026-03-07T20:00:00-08:00", + "type": "string" + }, + "status": { + "example": "FINAL", + "type": "string" + }, + "url": { + "type": "string" + }, + "venue": { + "$ref": "#/definitions/yahoosports.Venue" + } + }, + "type": "object" + }, + "yahoosports.MotorsportsRaceResponse": { + "properties": { + "count": { + "example": 20, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "race": { + "$ref": "#/definitions/yahoosports.MotorsportsRace" + }, + "results": { + "items": { + "$ref": "#/definitions/yahoosports.MotorsportsResult" + }, + "type": "array" + }, + "season": { + "example": 2026, + "type": "integer" + }, + "series": { + "example": "f1", + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.MotorsportsResult": { + "properties": { + "bonus_points": { + "type": "integer" + }, + "car": { + "$ref": "#/definitions/yahoosports.MotorsportsCar" + }, + "driver": { + "$ref": "#/definitions/yahoosports.MotorsportsDriverRef" + }, + "fastest_lap_time": { + "example": "1:22.670", + "type": "string" + }, + "laps": { + "example": 58, + "type": "integer" + }, + "laps_led": { + "example": 32, + "type": "integer" + }, + "place": { + "example": 1, + "type": "integer" + }, + "points": { + "example": 25, + "type": "integer" + }, + "starting_pos": { + "example": 1, + "type": "integer" + }, + "status": { + "example": "RUNNING", + "type": "string" + }, + "time": { + "example": "1:23:06.801", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.MotorsportsScheduleResponse": { + "properties": { + "count": { + "example": 24, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "races": { + "items": { + "$ref": "#/definitions/yahoosports.MotorsportsRace" + }, + "type": "array" + }, + "season": { + "example": 2026, + "type": "integer" + }, + "series": { + "example": "f1", + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.NFLDraftFilter": { + "properties": { + "name": { + "example": "round", + "type": "string" + }, + "options": { + "items": { + "$ref": "#/definitions/yahoosports.NFLDraftFilterOption" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoosports.NFLDraftFilterOption": { + "properties": { + "label": { + "example": "Round 1", + "type": "string" + }, + "selected": { + "type": "boolean" + }, + "value": { + "example": "round:1", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.NFLDraftResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/yahoosports.NewsArticle" + }, + "type": "array" + }, + "boards": { + "items": { + "type": "object" + }, + "type": "array" + }, + "count": { + "example": 257, + "type": "integer" + }, + "current_season": { + "example": 2026, + "type": "integer" + }, + "draft": { + "type": "object" + }, + "fetched_at": { + "type": "string" + }, + "filters": { + "items": { + "$ref": "#/definitions/yahoosports.NFLDraftFilter" + }, + "type": "array" + }, + "league": { + "example": "nfl", + "type": "string" + }, + "prospects": { + "items": { + "type": "object" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "tabs": { + "items": { + "$ref": "#/definitions/yahoosports.NFLDraftTab" + }, + "type": "array" + }, + "view": { + "example": "results", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.NFLDraftTab": { + "properties": { + "display_id": { + "example": "draftedPlayers", + "type": "string" + }, + "id": { + "example": "draftResults", + "type": "string" + }, + "label": { + "example": "Drafted Players", + "type": "string" + }, + "show_live_indicator": { + "type": "boolean" + }, + "status_label": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "url": { + "example": "https://sports.yahoo.com/nfl/draft/", + "type": "string" + }, + "view": { + "example": "results", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.NavigationResponse": { + "properties": { + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "links": { + "items": { + "$ref": "#/definitions/yahoosports.YahooSportsNavigationItem" + }, + "type": "array" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.NetworkCatalogResponse": { + "properties": { + "fetched_at": { + "type": "string" + }, + "partner_count": { + "example": 16, + "type": "integer" + }, + "partners": { + "items": { + "$ref": "#/definitions/yahoosports.NetworkPartner" + }, + "type": "array" + }, + "show_count": { + "example": 14, + "type": "integer" + }, + "shows": { + "items": { + "$ref": "#/definitions/yahoosports.NetworkShow" + }, + "type": "array" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.NetworkImage": { + "properties": { + "height": { + "type": "integer" + }, + "url": { + "type": "string" + }, + "width": { + "type": "integer" + } + }, + "type": "object" + }, + "yahoosports.NetworkNavigationLink": { + "properties": { + "title": { + "example": "MMA", + "type": "string" + }, + "url": { + "example": "https://sports.yahoo.com/mma/", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.NetworkPartner": { + "properties": { + "attribution_image": { + "$ref": "#/definitions/yahoosports.NetworkImage" + }, + "attribution_image_dark": { + "$ref": "#/definitions/yahoosports.NetworkImage" + }, + "attribution_text": { + "type": "string" + }, + "background_color": { + "example": "#000000", + "type": "string" + }, + "enabled": { + "enum": [ + "enabled", + "disabled" + ], + "example": "enabled", + "type": "string" + }, + "navigation_image": { + "$ref": "#/definitions/yahoosports.NetworkImage" + }, + "navigation_image_dark": { + "$ref": "#/definitions/yahoosports.NetworkImage" + }, + "navigation_items": { + "items": { + "$ref": "#/definitions/yahoosports.NetworkNavigationLink" + }, + "type": "array" + }, + "product_switcher_image": { + "$ref": "#/definitions/yahoosports.NetworkImage" + }, + "product_switcher_label": { + "example": "Uncrowned", + "type": "string" + }, + "title": { + "example": "Combat", + "type": "string" + }, + "url": { + "example": "https://sports.yahoo.com/combat/", + "type": "string" + }, + "video_hub_image": { + "$ref": "#/definitions/yahoosports.NetworkImage" + } + }, + "type": "object" + }, + "yahoosports.NetworkShow": { + "properties": { + "enabled": { + "enum": [ + "enabled", + "disabled" + ], + "example": "enabled", + "type": "string" + }, + "image": { + "$ref": "#/definitions/yahoosports.NetworkImage" + }, + "list_id": { + "example": "dcb9fa54-438f-4388-ab6c-4ac34fea3df9", + "type": "string" + }, + "subtitle": { + "type": "string" + }, + "title": { + "example": "Yahoo Fantasy Football", + "type": "string" + }, + "url": { + "example": "https://sports.yahoo.com/videos/shows/fantasy-football-with-josh-and-hayden/", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.NewsArticle": { + "properties": { + "author": { + "example": "Yahoo Sports Staff", + "type": "string" + }, + "category": { + "example": "Sports", + "type": "string" + }, + "content_type": { + "type": "string" + }, + "id": { + "type": "string" + }, + "published": { + "example": "2026-08-13T15:25:12Z", + "type": "string" + }, + "summary": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "example": "NFL news, live updates: ...", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.NewsResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/yahoosports.NewsArticle" + }, + "type": "array" + }, + "count": { + "example": 50, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "league": { + "example": "nfl", + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.NewsletterArchiveResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/yahoosports.NewsArticle" + }, + "type": "array" + }, + "count": { + "example": 50, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "has_next_page": { + "type": "boolean" + }, + "newsletter": { + "example": "yahoo-sports-am", + "type": "string" + }, + "page": { + "example": 1, + "type": "integer" + }, + "page_links": { + "items": { + "$ref": "#/definitions/yahoosports.NewsletterPageLink" + }, + "type": "array" + }, + "page_size": { + "example": 50, + "type": "integer" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.NewsletterCatalogEntry": { + "properties": { + "details": { + "example": [ + "Daily", + "All the sports", + " all in one place." + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "image_url": { + "type": "string" + }, + "name": { + "example": "Yahoo Sports AM", + "type": "string" + }, + "slug": { + "example": "yahoo-sports-am", + "type": "string" + }, + "url": { + "example": "https://sports.yahoo.com/newsletters/yahoo-sports-am/", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.NewsletterCatalogResponse": { + "properties": { + "count": { + "example": 3, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "newsletters": { + "items": { + "$ref": "#/definitions/yahoosports.NewsletterCatalogEntry" + }, + "type": "array" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.NewsletterPageLink": { + "properties": { + "label": { + "example": "2", + "type": "string" + }, + "page": { + "example": 2, + "type": "integer" + }, + "url": { + "example": "https://sports.yahoo.com/newsletters/yahoo-sports-am/page/2/#news", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.OddsLeagueOption": { + "properties": { + "label": { + "example": "NFL", + "type": "string" + }, + "supported": { + "type": "boolean" + }, + "value": { + "example": "nfl", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.OlympicsCountryMedals": { + "properties": { + "bronze": { + "example": 11, + "type": "integer" + }, + "country": { + "example": "Norway", + "type": "string" + }, + "gold": { + "example": 18, + "type": "integer" + }, + "ioc_code": { + "example": "NOR", + "type": "string" + }, + "iso_code": { + "example": "NOR", + "type": "string" + }, + "rank": { + "example": 1, + "type": "integer" + }, + "silver": { + "example": 12, + "type": "integer" + }, + "total": { + "example": 41, + "type": "integer" + } + }, + "type": "object" + }, + "yahoosports.OlympicsGames": { + "properties": { + "end_date": { + "example": "2026-02-22T08:00:00+08:00", + "type": "string" + }, + "name": { + "example": "Milan 2026 Winter Olympics", + "type": "string" + }, + "season": { + "example": 2026, + "type": "integer" + }, + "short_name": { + "example": "Milan", + "type": "string" + }, + "start_date": { + "example": "2026-02-06T08:00:00+08:00", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.OlympicsMedalsResponse": { + "properties": { + "count": { + "example": 93, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "games": { + "$ref": "#/definitions/yahoosports.OlympicsGames" + }, + "medals": { + "items": { + "$ref": "#/definitions/yahoosports.OlympicsCountryMedals" + }, + "type": "array" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.PlayerDetail": { + "properties": { + "age": { + "type": "integer" + }, + "college": { + "type": "string" + }, + "draft_pick": { + "example": 34, + "type": "integer" + }, + "draft_round": { + "example": 7, + "type": "integer" + }, + "draft_year": { + "example": 2025, + "type": "integer" + }, + "experience_years": { + "type": "integer" + }, + "height": { + "example": "6'4\"", + "type": "string" + }, + "id": { + "example": "nfl.p.42019", + "type": "string" + }, + "injury": { + "example": "Questionable", + "type": "string" + }, + "name": { + "example": "John Williams", + "type": "string" + }, + "number": { + "example": "73", + "type": "string" + }, + "position": { + "example": "G", + "type": "string" + }, + "season_stats": { + "items": { + "$ref": "#/definitions/yahoosports.SeasonStatCategory" + }, + "type": "array" + }, + "status": { + "example": "ACT", + "type": "string" + }, + "team": { + "$ref": "#/definitions/yahoosports.TeamRef" + }, + "url": { + "type": "string" + }, + "weight": { + "type": "integer" + } + }, + "type": "object" + }, + "yahoosports.PlayerResponse": { + "properties": { + "fetched_at": { + "type": "string" + }, + "league": { + "example": "nfl", + "type": "string" + }, + "player": { + "$ref": "#/definitions/yahoosports.PlayerDetail" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.PlayerSearchEntry": { + "properties": { + "active": { + "type": "boolean" + }, + "first_name": { + "type": "string" + }, + "headshot_url": { + "type": "string" + }, + "id": { + "example": "nba.p.3704", + "type": "string" + }, + "last_name": { + "type": "string" + }, + "name": { + "example": "LeBron James", + "type": "string" + }, + "team": { + "$ref": "#/definitions/yahoosports.PlayerSearchTeam" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.PlayerSearchResponse": { + "properties": { + "count": { + "example": 15, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "league": { + "example": "nba", + "type": "string" + }, + "players": { + "items": { + "$ref": "#/definitions/yahoosports.PlayerSearchEntry" + }, + "type": "array" + }, + "query": { + "example": "LeBron", + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.PlayerSearchTeam": { + "properties": { + "abbreviation": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.PlayoffBracketCatalogResponse": { + "properties": { + "current_season": { + "example": 2026, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "graphite_league": { + "example": "nba", + "type": "string" + }, + "league": { + "example": "nba", + "type": "string" + }, + "seasons": { + "items": { + "$ref": "#/definitions/yahoosports.BracketSeasonOption" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "tournaments": { + "example": [ + "PLAY_IN_TOURNAMENT" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoosports.PlayoffBracketResponse": { + "properties": { + "bracket": { + "type": "object" + }, + "fetched_at": { + "type": "string" + }, + "graphite_league": { + "example": "nba", + "type": "string" + }, + "league": { + "example": "nba", + "type": "string" + }, + "play_in_bracket": { + "type": "object" + }, + "play_in_source_url": { + "type": "string" + }, + "season": { + "example": 2025, + "type": "integer" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.RSSCatalogResponse": { + "properties": { + "count": { + "example": 27, + "type": "integer" + }, + "feeds": { + "items": { + "$ref": "#/definitions/yahoosports.RSSFeedDescriptor" + }, + "type": "array" + }, + "observed_at": { + "example": "2026-10-31", + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.RSSFeedDescriptor": { + "properties": { + "category": { + "example": "All News", + "type": "string" + }, + "group": { + "example": "all-news", + "type": "string" + }, + "key": { + "example": "general-news", + "type": "string" + }, + "status": { + "example": "available", + "type": "string" + }, + "url": { + "example": "https://sports.yahoo.com/general/news/rss/", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.RSSFeedItem": { + "properties": { + "categories": { + "items": { + "type": "string" + }, + "type": "array" + }, + "content_html": { + "type": "string" + }, + "creator": { + "type": "string" + }, + "description": { + "type": "string" + }, + "guid": { + "type": "string" + }, + "guid_is_permalink": { + "type": "boolean" + }, + "link": { + "type": "string" + }, + "published": { + "type": "string" + }, + "publisher": { + "type": "string" + }, + "source": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.RSSFeedResponse": { + "properties": { + "category": { + "example": "All News", + "type": "string" + }, + "count": { + "example": 50, + "type": "integer" + }, + "description": { + "type": "string" + }, + "feed": { + "example": "general-news", + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "group": { + "example": "all-news", + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/yahoosports.RSSFeedItem" + }, + "type": "array" + }, + "language": { + "type": "string" + }, + "last_build_date": { + "type": "string" + }, + "link": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.RosterPlayer": { + "properties": { + "age": { + "type": "integer" + }, + "college": { + "type": "string" + }, + "experience_years": { + "type": "integer" + }, + "height": { + "example": "6'4\"", + "type": "string" + }, + "id": { + "example": "nfl.p.42019", + "type": "string" + }, + "injury": { + "example": "Questionable", + "type": "string" + }, + "name": { + "example": "John Williams", + "type": "string" + }, + "number": { + "example": "73", + "type": "string" + }, + "position": { + "example": "G", + "type": "string" + }, + "status": { + "example": "ACT", + "type": "string" + }, + "url": { + "type": "string" + }, + "weight": { + "type": "integer" + } + }, + "type": "object" + }, + "yahoosports.RosterResponse": { + "properties": { + "count": { + "example": 53, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "league": { + "example": "nfl", + "type": "string" + }, + "players": { + "items": { + "$ref": "#/definitions/yahoosports.RosterPlayer" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "team": { + "$ref": "#/definitions/yahoosports.TeamRef" + } + }, + "type": "object" + }, + "yahoosports.ScheduleFilterOption": { + "properties": { + "label": { + "example": "ACC", + "type": "string" + }, + "selected": { + "type": "boolean" + }, + "value": { + "example": "conferenceIds_1", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.ScheduleSeasonOption": { + "properties": { + "label": { + "example": "2026-27", + "type": "string" + }, + "selected": { + "type": "boolean" + }, + "value": { + "example": 2026, + "type": "integer" + } + }, + "type": "object" + }, + "yahoosports.ScheduleWeekOption": { + "properties": { + "display_name": { + "example": "Week 9", + "type": "string" + }, + "end_date": { + "type": "string" + }, + "season": { + "example": 2026, + "type": "integer" + }, + "season_phase": { + "example": "REGULAR_SEASON", + "type": "string" + }, + "start_date": { + "type": "string" + }, + "week": { + "example": 9, + "type": "integer" + } + }, + "type": "object" + }, + "yahoosports.ScoreboardResponse": { + "properties": { + "competition_id": { + "example": "soccer.l.fbgb", + "type": "string" + }, + "count": { + "example": 8, + "type": "integer" + }, + "date": { + "example": "2026-08-13", + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "games": { + "items": { + "$ref": "#/definitions/yahoosports.Game" + }, + "type": "array" + }, + "league": { + "example": "nfl", + "type": "string" + }, + "month": { + "example": 11, + "type": "integer" + }, + "season": { + "example": 2025, + "type": "integer" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.SeasonStatCategory": { + "properties": { + "category": { + "example": "passing", + "type": "string" + }, + "stats": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + }, + "type": "object" + }, + "yahoosports.SectionStreamPageInfo": { + "properties": { + "count": { + "type": "integer" + }, + "has_next_page": { + "type": "boolean" + }, + "has_previous_page": { + "type": "boolean" + }, + "start": { + "type": "integer" + }, + "total_count": { + "type": "integer" + } + }, + "type": "object" + }, + "yahoosports.SectionStreamResponse": { + "properties": { + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "items": { + "items": { + "type": "object" + }, + "type": "array" + }, + "list_id": { + "type": "string" + }, + "page_info": { + "$ref": "#/definitions/yahoosports.SectionStreamPageInfo" + }, + "page_offset": { + "type": "integer" + }, + "section_url": { + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.SoccerCompetitionRef": { + "properties": { + "id": { + "example": "soccer.l.fbgb", + "type": "string" + }, + "logo_url": { + "type": "string" + }, + "name": { + "example": "Premier League", + "type": "string" + }, + "short_name": { + "example": "EPL", + "type": "string" + }, + "url": { + "example": "https://sports.yahoo.com/soccer/premier-league/", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.SoccerScoreboardCompetition": { + "properties": { + "current_season": { + "example": 2026, + "type": "integer" + }, + "display_name": { + "example": "Premier League", + "type": "string" + }, + "id": { + "example": "soccer.l.fbgb", + "type": "string" + }, + "name": { + "example": "Premier League", + "type": "string" + }, + "page_types": { + "example": [ + "schedule", + "scoreboard", + "standings", + "statsLeaders", + "teams", + "transactions" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "scoreboard_url": { + "type": "string" + }, + "seasons": { + "items": { + "$ref": "#/definitions/yahoosports.SoccerScoreboardSeason" + }, + "type": "array" + }, + "selector_value": { + "example": "/soccer/premier-league/scoreboard/", + "type": "string" + }, + "short_name": { + "example": "EPL", + "type": "string" + }, + "yahoo_id": { + "example": 20, + "type": "integer" + } + }, + "type": "object" + }, + "yahoosports.SoccerScoreboardResponse": { + "properties": { + "competition_id": { + "example": "soccer.l.fbgb", + "type": "string" + }, + "competitions": { + "items": { + "$ref": "#/definitions/yahoosports.SoccerScoreboardCompetition" + }, + "type": "array" + }, + "count": { + "example": 8, + "type": "integer" + }, + "date": { + "example": "2026-11-01", + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "games": { + "items": { + "$ref": "#/definitions/yahoosports.Game" + }, + "type": "array" + }, + "month": { + "example": 10, + "type": "integer" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.SoccerScoreboardSeason": { + "properties": { + "name": { + "example": "2026-27", + "type": "string" + }, + "value": { + "example": 2026, + "type": "integer" + } + }, + "type": "object" + }, + "yahoosports.SportsbookCatalogResponse": { + "properties": { + "fetched_at": { + "type": "string" + }, + "filter_count": { + "example": 17, + "type": "integer" + }, + "filters": { + "items": { + "$ref": "#/definitions/yahoosports.SportsbookFilterOption" + }, + "type": "array" + }, + "graphite_league_count": { + "example": 15, + "type": "integer" + }, + "graphite_leagues": { + "items": { + "$ref": "#/definitions/yahoosports.OddsLeagueOption" + }, + "type": "array" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.SportsbookFilterOption": { + "properties": { + "children": { + "items": { + "type": "string" + }, + "type": "array" + }, + "client_side_filter": { + "type": "boolean" + }, + "graphite_league": { + "example": "nfl", + "type": "string" + }, + "graphite_operation": { + "example": "trendingGameIds", + "type": "string" + }, + "kind": { + "enum": [ + "feed", + "league", + "group", + "unmapped" + ], + "example": "feed", + "type": "string" + }, + "label": { + "example": "Trending", + "type": "string" + }, + "value": { + "example": "trending", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.SportsbookOddsResponse": { + "properties": { + "data": { + "type": "object" + }, + "fetched_at": { + "type": "string" + }, + "game_id": { + "example": "nfl.g.20261101002", + "type": "string" + }, + "league": { + "example": "nfl", + "type": "string" + }, + "source": { + "example": "leagueGameIds", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "tz": { + "example": "UTC", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.StandingsEntry": { + "properties": { + "away_record": { + "example": "35-25", + "type": "string" + }, + "clinched_division": { + "type": "boolean" + }, + "clinched_playoff": { + "type": "boolean" + }, + "games_back": { + "type": "number" + }, + "home_record": { + "example": "29-31", + "type": "string" + }, + "last10": { + "example": "5-5", + "type": "string" + }, + "position": { + "example": 3, + "type": "integer" + }, + "record": { + "$ref": "#/definitions/yahoosports.TeamRecord" + }, + "streak": { + "example": "L-5", + "type": "string" + }, + "team": { + "$ref": "#/definitions/yahoosports.TeamRef" + } + }, + "type": "object" + }, + "yahoosports.StandingsGroup": { + "properties": { + "conference": { + "example": "American League", + "type": "string" + }, + "division": { + "example": "East", + "type": "string" + }, + "entries": { + "items": { + "$ref": "#/definitions/yahoosports.StandingsEntry" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoosports.StandingsResponse": { + "properties": { + "count": { + "example": 30, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "groups": { + "items": { + "$ref": "#/definitions/yahoosports.StandingsGroup" + }, + "type": "array" + }, + "league": { + "example": "mlb", + "type": "string" + }, + "season": { + "example": 2026, + "type": "integer" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.Stat": { + "properties": { + "id": { + "example": "RUNS", + "type": "string" + }, + "label": { + "example": "Runs", + "type": "string" + }, + "value": { + "example": "6", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.StatsCatalogEntry": { + "properties": { + "league": { + "example": "nba", + "type": "string" + }, + "page_types": { + "example": [ + "individual", + "weekly", + "team" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "path": { + "example": "/nba/stats/{pageType}/", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.StatsCatalogResponse": { + "properties": { + "count": { + "example": 17, + "type": "integer" + }, + "leagues": { + "items": { + "$ref": "#/definitions/yahoosports.StatsCatalogEntry" + }, + "type": "array" + }, + "observed_at": { + "example": "2026-10-31", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.StatsDiscoveryResponse": { + "properties": { + "available_page_types": { + "items": { + "type": "string" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "filter_config": { + "items": { + "$ref": "#/definitions/yahoosports.StatsFilterConfig" + }, + "type": "array" + }, + "league": { + "example": "nba", + "type": "string" + }, + "page_type": { + "example": "individual", + "type": "string" + }, + "season": { + "example": 2026, + "type": "integer" + }, + "sort_stat": { + "type": "string" + }, + "sort_stat_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "tabs": { + "items": { + "$ref": "#/definitions/yahoosports.StatsTab" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoosports.StatsFilterConfig": { + "properties": { + "default_value": { + "type": "string" + }, + "options": { + "items": { + "$ref": "#/definitions/yahoosports.StatsFilterOption" + }, + "type": "array" + }, + "page_types": { + "items": { + "type": "string" + }, + "type": "array" + }, + "param": { + "example": "positionIds", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.StatsFilterOption": { + "properties": { + "text": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.StatsTab": { + "properties": { + "id": { + "example": "0", + "type": "string" + }, + "title": { + "example": "Averages", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.TeamDetail": { + "properties": { + "abbreviation": { + "example": "GB", + "type": "string" + }, + "conference": { + "example": "NFC", + "type": "string" + }, + "division": { + "example": "NFC North", + "type": "string" + }, + "id": { + "example": "nfl.t.9", + "type": "string" + }, + "location": { + "example": "Green Bay", + "type": "string" + }, + "logo": { + "type": "string" + }, + "name": { + "example": "Green Bay Packers", + "type": "string" + }, + "nickname": { + "example": "Packers", + "type": "string" + }, + "primary_color": { + "example": "203731", + "type": "string" + }, + "record": { + "$ref": "#/definitions/yahoosports.TeamRecord" + }, + "secondary_color": { + "example": "FFB612", + "type": "string" + }, + "short_name": { + "example": "Green Bay", + "type": "string" + }, + "standing_summary": { + "example": "4th NFC North", + "type": "string" + }, + "url": { + "example": "https://sports.yahoo.com/nfl/teams/green-bay/", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.TeamRecord": { + "properties": { + "display": { + "example": "64-56", + "type": "string" + }, + "losses": { + "type": "integer" + }, + "points": { + "description": "Points is soccer's own standings metric (3 per win, 1 per draw);\nomitted for every other league.", + "example": 85, + "type": "integer" + }, + "ties": { + "type": "integer" + }, + "win_pct": { + "example": ".533", + "type": "string" + }, + "wins": { + "type": "integer" + } + }, + "type": "object" + }, + "yahoosports.TeamRef": { + "properties": { + "abbreviation": { + "example": "GB", + "type": "string" + }, + "id": { + "example": "nfl.t.9", + "type": "string" + }, + "location": { + "example": "Green Bay", + "type": "string" + }, + "logo": { + "type": "string" + }, + "name": { + "example": "Green Bay Packers", + "type": "string" + }, + "nickname": { + "example": "Packers", + "type": "string" + }, + "primary_color": { + "example": "203731", + "type": "string" + }, + "secondary_color": { + "example": "FFB612", + "type": "string" + }, + "short_name": { + "example": "Green Bay", + "type": "string" + }, + "url": { + "example": "https://sports.yahoo.com/nfl/teams/green-bay/", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.TeamResponse": { + "properties": { + "fetched_at": { + "type": "string" + }, + "league": { + "example": "nfl", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "team": { + "$ref": "#/definitions/yahoosports.TeamDetail" + } + }, + "type": "object" + }, + "yahoosports.TeamScheduleResponse": { + "properties": { + "count": { + "example": 25, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "games": { + "items": { + "$ref": "#/definitions/yahoosports.Game" + }, + "type": "array" + }, + "league": { + "example": "nfl", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "team": { + "$ref": "#/definitions/yahoosports.TeamRef" + } + }, + "type": "object" + }, + "yahoosports.TeamStatLine": { + "properties": { + "stats": { + "items": { + "$ref": "#/definitions/yahoosports.Stat" + }, + "type": "array" + }, + "team": { + "$ref": "#/definitions/yahoosports.TeamRef" + } + }, + "type": "object" + }, + "yahoosports.TennisChampion": { + "properties": { + "name": { + "example": "Daniil Medvedev", + "type": "string" + }, + "player_id": { + "example": "ten.p.19603", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.TennisMatch": { + "properties": { + "event": { + "example": "Men's Singles", + "type": "string" + }, + "id": { + "example": "ten.g.15754498", + "type": "string" + }, + "league": { + "example": "ATP", + "type": "string" + }, + "round": { + "example": "Round of 128", + "type": "string" + }, + "sets": { + "items": { + "$ref": "#/definitions/yahoosports.TennisSetScore" + }, + "type": "array" + }, + "side1": { + "items": { + "$ref": "#/definitions/yahoosports.TennisPlayerRef" + }, + "type": "array" + }, + "side1_seed": { + "type": "integer" + }, + "side2": { + "items": { + "$ref": "#/definitions/yahoosports.TennisPlayerRef" + }, + "type": "array" + }, + "side2_seed": { + "type": "integer" + }, + "start_time": { + "example": "2026-08-13T19:35:00-07:00", + "type": "string" + }, + "status": { + "example": "IN_PROGRESS", + "type": "string" + }, + "status_display": { + "example": "Set 2", + "type": "string" + }, + "surface": { + "example": "Hard", + "type": "string" + }, + "tournament": { + "example": "Western & Southern Open", + "type": "string" + }, + "url": { + "type": "string" + }, + "venue": { + "$ref": "#/definitions/yahoosports.Venue" + }, + "winner_ids": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoosports.TennisPlayerRef": { + "properties": { + "country": { + "example": "Spain", + "type": "string" + }, + "id": { + "example": "ten.p.34440", + "type": "string" + }, + "name": { + "example": "Martin Landaluce", + "type": "string" + }, + "rank": { + "example": 64, + "type": "integer" + }, + "short_name": { + "example": "M. Landaluce", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.TennisRankingEntry": { + "properties": { + "age": { + "example": 24, + "type": "integer" + }, + "country": { + "example": "Italy", + "type": "string" + }, + "name": { + "example": "Jannik Sinner", + "type": "string" + }, + "points": { + "example": 13450, + "type": "integer" + }, + "rank": { + "example": 1, + "type": "integer" + } + }, + "type": "object" + }, + "yahoosports.TennisRankingsResponse": { + "properties": { + "count": { + "example": 100, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "rankings": { + "items": { + "$ref": "#/definitions/yahoosports.TennisRankingEntry" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "type": { + "example": "mens-singles", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.TennisScheduleResponse": { + "properties": { + "count": { + "example": 86, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "tournaments": { + "items": { + "$ref": "#/definitions/yahoosports.TennisTournament" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoosports.TennisScoreboardResponse": { + "properties": { + "count": { + "example": 20, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "matches": { + "items": { + "$ref": "#/definitions/yahoosports.TennisMatch" + }, + "type": "array" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.TennisSetScore": { + "properties": { + "set": { + "example": 1, + "type": "integer" + }, + "side1_score": { + "example": 6, + "type": "integer" + }, + "side1_tiebreak": { + "type": "integer" + }, + "side2_score": { + "example": 3, + "type": "integer" + }, + "side2_tiebreak": { + "type": "integer" + } + }, + "type": "object" + }, + "yahoosports.TennisTournament": { + "properties": { + "champion": { + "$ref": "#/definitions/yahoosports.TennisChampion" + }, + "end_time": { + "example": "2026-01-11T04:00:00-08:00", + "type": "string" + }, + "gender": { + "example": "MEN", + "type": "string" + }, + "id": { + "example": "ten.e.2042", + "type": "string" + }, + "match_type": { + "example": "SINGLES", + "type": "string" + }, + "name": { + "example": "Brisbane International presented by Evie", + "type": "string" + }, + "start_time": { + "example": "2026-01-03T16:00:00-08:00", + "type": "string" + }, + "status": { + "example": "FINAL", + "type": "string" + }, + "surface": { + "example": "Hard", + "type": "string" + }, + "url": { + "type": "string" + }, + "venue": { + "$ref": "#/definitions/yahoosports.Venue" + } + }, + "type": "object" + }, + "yahoosports.TopicNewsResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/yahoosports.NewsArticle" + }, + "type": "array" + }, + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "topic": { + "example": "how-to-watch", + "type": "string" + }, + "topic_url": { + "example": "https://sports.yahoo.com/topic/how-to-watch/", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.Venue": { + "properties": { + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "name": { + "example": "Acrisure Stadium", + "type": "string" + }, + "state": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.VideoListCatalogResponse": { + "properties": { + "count": { + "example": 31, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "lists": { + "items": { + "$ref": "#/definitions/yahoosports.VideoListDescriptor" + }, + "type": "array" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.VideoListDescriptor": { + "properties": { + "list_id": { + "example": "dcb9fa54-438f-4388-ab6c-4ac34fea3df9", + "type": "string" + }, + "source_fields": { + "example": [ + "videoListId", + "VideoListId" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "example": "Yahoo Fantasy Football", + "type": "string" + }, + "url": { + "example": "https://sports.yahoo.com/videos/shows/fantasy-football-with-josh-and-hayden/", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.WatchScheduleImage": { + "properties": { + "height": { + "type": "object" + }, + "type": { + "type": "string" + }, + "uri": { + "type": "string" + }, + "width": { + "type": "object" + } + }, + "type": "object" + }, + "yahoosports.WatchScheduleItem": { + "properties": { + "contentId": { + "type": "string" + }, + "descriptionLang": { + "type": "string" + }, + "duration": { + "type": "integer" + }, + "endTime": { + "type": "string" + }, + "episodeNumber": { + "type": "integer" + }, + "episodeTitle": { + "type": "string" + }, + "genres": { + "items": { + "type": "string" + }, + "type": "array" + }, + "isLive": { + "type": "boolean" + }, + "longDescription": { + "type": "string" + }, + "origAirDate": { + "type": "string" + }, + "programImages": { + "items": { + "$ref": "#/definitions/yahoosports.WatchScheduleImage" + }, + "type": "array" + }, + "programType": { + "type": "string" + }, + "ratings": { + "items": { + "$ref": "#/definitions/yahoosports.WatchScheduleRating" + }, + "type": "array" + }, + "releaseDate": { + "type": "string" + }, + "releaseYear": { + "type": "integer" + }, + "seasonNumber": { + "type": "integer" + }, + "seriesDescription": { + "type": "string" + }, + "seriesId": { + "type": "string" + }, + "seriesImages": { + "items": { + "$ref": "#/definitions/yahoosports.WatchScheduleImage" + }, + "type": "array" + }, + "shortDescription": { + "type": "string" + }, + "sport_event_type": { + "type": "string" + }, + "sport_teams_name": { + "type": "string" + }, + "sport_type": { + "type": "string" + }, + "startTime": { + "type": "string" + }, + "title": { + "type": "string" + }, + "titleLang": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.WatchScheduleRating": { + "properties": { + "body": { + "type": "string" + }, + "code": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.WatchScheduleResponse": { + "properties": { + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "schedules": { + "items": { + "$ref": "#/definitions/yahoosports.WatchScheduleItem" + }, + "type": "array" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.YahooSportsLeague": { + "properties": { + "draft": { + "type": "boolean" + }, + "game_path": { + "example": "/nba/{game}/", + "type": "string" + }, + "game_url_from_scoreboard": { + "type": "boolean" + }, + "injury_report": { + "type": "boolean" + }, + "key": { + "example": "nba", + "type": "string" + }, + "league_schedule": { + "type": "boolean" + }, + "news_path": { + "example": "/nba/news/", + "type": "string" + }, + "player_path": { + "example": "/nba/players/{player}/", + "type": "string" + }, + "player_search": { + "type": "boolean" + }, + "playoff_bracket": { + "type": "boolean" + }, + "rankings": { + "type": "boolean" + }, + "roster_path": { + "example": "/nba/teams/{team}/roster/", + "type": "string" + }, + "schedule_path": { + "example": "/nba/teams/{team}/schedule/", + "type": "string" + }, + "scoreboard_competition_filter": { + "type": "boolean" + }, + "scoreboard_mode": { + "example": "competition_page", + "type": "string" + }, + "scoreboard_path": { + "example": "/nba/scoreboard/", + "type": "string" + }, + "standings": { + "type": "boolean" + }, + "standings_path": { + "example": "/nba/standings/", + "type": "string" + }, + "stats_page_types": { + "items": { + "type": "string" + }, + "type": "array" + }, + "team_path": { + "example": "/nba/teams/{team}/", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.YahooSportsNavigationItem": { + "properties": { + "group": { + "example": "subnav", + "type": "string" + }, + "label": { + "example": "Golf", + "type": "string" + }, + "section": { + "example": "home", + "type": "string" + }, + "url": { + "example": "https://sports.yahoo.com/golf/", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.collegeRankingsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.CollegeRankingsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.dropdownCatalogResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.DropdownCatalogResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.gameResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.GameResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.golfLeaderboardResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.GolfLeaderboardResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.golfPlayerResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.GolfPlayerResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.golfPlayersResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.GolfPlayersResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.golfScheduleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.GolfScheduleResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.homeResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.HomeResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.injuryReportResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.InjuryReportResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.leagueCatalogResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.LeagueCatalogResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.leagueScheduleCatalogResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.LeagueScheduleCatalogResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.leagueScheduleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.LeagueScheduleResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.mmaFightCardResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.MMAFightCardResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.mmaScheduleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.MMAScheduleResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.moreNewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.MoreNewsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.motorsportsRaceResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.MotorsportsRaceResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.motorsportsScheduleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.MotorsportsScheduleResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.navigationResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.NavigationResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.networkCatalogResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.NetworkCatalogResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.newsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.NewsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.newsletterArchiveResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.NewsletterArchiveResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.newsletterCatalogResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.NewsletterCatalogResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.nflDraftResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.NFLDraftResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.olympicsMedalsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.OlympicsMedalsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.playerNewsResponseDataDoc": { + "properties": { + "count": { + "example": 20, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "has_next_page": { + "type": "boolean" + }, + "items": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + "mode": { + "example": "latest", + "type": "string" + }, + "next_cursor": { + "type": "string" + }, + "player_url": { + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.playerNewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.playerNewsResponseDataDoc" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.playerResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.PlayerResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.playerSearchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.PlayerSearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.playoffBracketCatalogResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.PlayoffBracketCatalogResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.playoffBracketResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.PlayoffBracketResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.rosterResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.RosterResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.rssCatalogResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.RSSCatalogResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.rssFeedResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.RSSFeedResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.scoreboardResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.ScoreboardResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.sectionStreamResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.SectionStreamResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.soccerScoreboardResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.SoccerScoreboardResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.sportsbookCatalogResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.SportsbookCatalogResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.sportsbookOddsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.SportsbookOddsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.standingsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.StandingsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.statsCatalogResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.StatsCatalogResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.statsDiscoveryResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.StatsDiscoveryResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.statsResponseDataDoc": { + "properties": { + "available_page_types": { + "items": { + "type": "string" + }, + "type": "array" + }, + "count": { + "example": 200, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "filter_config": { + "items": { + "$ref": "#/definitions/yahoosports.StatsFilterConfig" + }, + "type": "array" + }, + "league": { + "example": "nba", + "type": "string" + }, + "page_type": { + "example": "individual", + "type": "string" + }, + "rows": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + "season": { + "example": 2026, + "type": "integer" + }, + "selected_table": { + "example": 0, + "type": "integer" + }, + "sort_stat": { + "type": "string" + }, + "sort_stat_ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "tabs": { + "items": { + "$ref": "#/definitions/yahoosports.StatsTab" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahoosports.statsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.statsResponseDataDoc" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.teamResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.TeamResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.teamScheduleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.TeamScheduleResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.tennisRankingsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.TennisRankingsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.tennisScheduleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.TennisScheduleResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.tennisScoreboardResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.TennisScoreboardResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.topicNewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.TopicNewsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.videoHeadlinesResponseDataDoc": { + "properties": { + "count": { + "example": 1, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "items": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + "list_id": { + "example": "dcb9fa54-438f-4388-ab6c-4ac34fea3df9", + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.videoHeadlinesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.videoHeadlinesResponseDataDoc" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.videoListCatalogResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.VideoListCatalogResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahoosports.watchScheduleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahoosports.WatchScheduleResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahootech.ArticleResponse": { + "properties": { + "author": { + "type": "string" + }, + "description": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "keywords": { + "items": { + "type": "string" + }, + "type": "array" + }, + "paragraphs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "provider": { + "type": "string" + }, + "published_at": { + "type": "string" + }, + "section": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahootech.CategoryPaginate": { + "properties": { + "next_page": { + "example": 2, + "type": "integer" + }, + "page": { + "example": 1, + "type": "integer" + } + }, + "type": "object" + }, + "yahootech.CategoryResponse": { + "properties": { + "category": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/yahootech.StreamItem" + }, + "type": "array" + }, + "pagination": { + "$ref": "#/definitions/yahootech.CategoryPaginate" + } + }, + "type": "object" + }, + "yahootech.HomeResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/yahootech.StreamItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "yahootech.StreamItem": { + "properties": { + "category": { + "type": "string" + }, + "id": { + "type": "string" + }, + "thumbnail_url": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yahootech.articleResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahootech.ArticleResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahootech.categoryResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahootech.CategoryResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yahootech.homeResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yahootech.HomeResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yandex.SearchPagination": { + "properties": { + "next_page": { + "example": 2, + "type": "integer" + }, + "page": { + "example": 1, + "type": "integer" + } + }, + "type": "object" + }, + "yandex.SearchResponse": { + "properties": { + "pagination": { + "$ref": "#/definitions/yandex.SearchPagination" + }, + "query": { + "example": "openai", + "type": "string" + }, + "results": { + "items": { + "$ref": "#/definitions/yandex.SearchResult" + }, + "type": "array" + } + }, + "type": "object" + }, + "yandex.SearchResult": { + "properties": { + "description": { + "example": "OpenAI is an AI research and deployment company.", + "type": "string" + }, + "display_url": { + "example": "openai.com", + "type": "string" + }, + "position": { + "example": 1, + "type": "integer" + }, + "title": { + "example": "OpenAI | Research & Deployment", + "type": "string" + }, + "url": { + "example": "https://openai.com/", + "type": "string" + } + }, + "type": "object" + }, + "yandex.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yandex.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yandex.suggestResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/suggest.Response" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yardbarker.AuthorResponse": { + "properties": { + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" + }, + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yelp.AddressDetails": { + "properties": { + "address_line_1": { + "type": "string" + }, + "address_line_2": { + "type": "string" + }, + "address_line_3": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "formatted_address": { + "items": { + "type": "string" + }, + "type": "array" + }, + "postal_code": { + "type": "string" + }, + "state": { + "type": "string" + } + }, + "type": "object" + }, + "yelp.BusinessAttribute": { + "properties": { + "alias": { + "type": "string" + }, + "title": { + "type": "string" + }, + "value": { + "type": "string" + }, + "values": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "yelp.BusinessItem": { + "properties": { + "address": { + "type": "string" + }, + "address_details": { + "$ref": "#/definitions/yelp.AddressDetails" + }, + "alias": { + "type": "string" + }, + "categories": { + "items": { + "type": "string" + }, + "type": "array" + }, + "claimed": { + "type": "boolean" + }, + "closed": { + "type": "boolean" + }, + "coordinates": { + "$ref": "#/definitions/yelp.Coordinates" + }, + "encoded_id": { + "type": "string" + }, + "id": { + "example": "tonys-pizza-napoletana-san-francisco", + "type": "string" + }, + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "neighborhoods": { + "items": { + "type": "string" + }, + "type": "array" + }, + "phone": { + "type": "string" + }, + "phone_number": { + "type": "string" + }, + "photos": { + "items": { + "type": "string" + }, + "type": "array" + }, + "price": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "review_count": { + "type": "integer" + }, + "url": { + "type": "string" + }, + "website": { + "type": "string" + } + }, + "type": "object" + }, + "yelp.Coordinates": { + "properties": { + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + } + }, + "type": "object" + }, + "yelp.MobileBusinessMenuResponse": { + "properties": { + "id": { + "example": "pequods-pizza-chicago-3", + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/yelp.MobileMenuItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "yelp.MobileBusinessPhotosResponse": { + "properties": { + "id": { + "example": "pequods-pizza-chicago-3", + "type": "string" + }, + "limit": { + "example": 20, + "type": "integer" + }, + "offset": { + "example": 0, + "type": "integer" + }, + "photos": { + "items": { + "$ref": "#/definitions/yelp.MobilePhotoItem" + }, + "type": "array" + }, + "total": { + "example": 6052, + "type": "integer" + } + }, + "type": "object" + }, + "yelp.MobileBusinessResponse": { + "properties": { + "address": { + "type": "string" + }, + "address_details": { + "$ref": "#/definitions/yelp.AddressDetails" + }, + "alias": { + "type": "string" + }, + "attributes": { + "items": { + "$ref": "#/definitions/yelp.BusinessAttribute" + }, + "type": "array" + }, + "categories": { + "items": { + "type": "string" + }, + "type": "array" + }, + "claimed": { + "type": "boolean" + }, + "closed": { + "type": "boolean" + }, + "coordinates": { + "$ref": "#/definitions/yelp.Coordinates" + }, + "description": { + "type": "string" + }, + "encoded_id": { + "type": "string" + }, + "health_score": { + "type": "string" + }, + "hours": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "example": "tonys-pizza-napoletana-san-francisco", + "type": "string" + }, + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "neighborhoods": { + "items": { + "type": "string" + }, + "type": "array" + }, + "phone": { + "type": "string" + }, + "phone_number": { + "type": "string" + }, + "photo_count": { + "type": "integer" + }, + "photos": { + "items": { + "type": "string" + }, + "type": "array" + }, + "price": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "review_count": { + "type": "integer" + }, + "url": { + "type": "string" + }, + "website": { + "type": "string" + }, + "year_established": { + "type": "integer" + } + }, + "type": "object" + }, + "yelp.MobileBusinessReviewHighlightsResponse": { + "properties": { + "highlights": { + "items": { + "$ref": "#/definitions/yelp.MobileReviewHighlight" + }, + "type": "array" + }, + "id": { + "example": "pequods-pizza-chicago-3", + "type": "string" + }, + "total": { + "example": 5, + "type": "integer" + } + }, + "type": "object" + }, + "yelp.MobileBusinessReviewsResponse": { + "properties": { + "id": { + "example": "pequods-pizza-chicago-3", + "type": "string" + }, + "limit": { + "example": 20, + "type": "integer" + }, + "offset": { + "example": 0, + "type": "integer" + }, + "reviews": { + "items": { + "$ref": "#/definitions/yelp.MobileReviewItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "yelp.MobileBusinessReviewsSearchResponse": { + "properties": { + "id": { + "example": "pequods-pizza-chicago-3", + "type": "string" + }, + "reviews": { + "items": { + "$ref": "#/definitions/yelp.MobileReviewSearchItem" + }, + "type": "array" + }, + "term": { + "example": "crust", + "type": "string" + }, + "total": { + "example": 20, + "type": "integer" + } + }, + "type": "object" + }, + "yelp.MobileGeocodeResponse": { + "properties": { + "address": { + "example": "1600 Amphitheatre Parkway, Mountain View, CA", + "type": "string" + }, + "address_line_1": { + "type": "string" + }, + "city": { + "type": "string" + }, + "coordinates": { + "$ref": "#/definitions/yelp.Coordinates" + }, + "country": { + "type": "string" + }, + "county": { + "type": "string" + }, + "display_name": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "state": { + "type": "string" + }, + "yelp_available": { + "type": "boolean" + } + }, + "type": "object" + }, + "yelp.MobileMenuItem": { + "properties": { + "alias": { + "type": "string" + }, + "description": { + "type": "string" + }, + "name": { + "type": "string" + }, + "photo": { + "type": "string" + }, + "photo_count": { + "type": "integer" + }, + "price": { + "type": "string" + }, + "review_count": { + "type": "integer" + } + }, + "type": "object" + }, + "yelp.MobilePhotoItem": { + "properties": { + "caption": { + "type": "string" + }, + "height": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "share_url": { + "type": "string" + }, + "time_created": { + "type": "integer" + }, + "url": { + "type": "string" + }, + "width": { + "type": "integer" + } + }, + "type": "object" + }, + "yelp.MobileReviewHighlight": { + "properties": { + "identifier": { + "type": "string" + }, + "photo_url": { + "type": "string" + }, + "review_count": { + "type": "integer" + }, + "review_id": { + "type": "string" + }, + "sentence_html": { + "type": "string" + } + }, + "type": "object" + }, + "yelp.MobileReviewItem": { + "properties": { + "author": { + "type": "string" + }, + "author_location": { + "type": "string" + }, + "author_review_count": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "language": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "share_url": { + "type": "string" + }, + "text": { + "type": "string" + }, + "time_modified": { + "type": "integer" + } + }, + "type": "object" + }, + "yelp.MobileReviewSearchItem": { + "properties": { + "author": { + "type": "string" + }, + "author_location": { + "type": "string" + }, + "author_review_count": { + "type": "integer" + }, + "excerpt_html": { + "type": "string" + }, + "id": { + "type": "string" + }, + "language": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "share_url": { + "type": "string" + }, + "time_modified": { + "type": "integer" + } + }, + "type": "object" + }, + "yelp.MobileSearchResponse": { + "properties": { + "limit": { + "example": 20, + "type": "integer" + }, + "location": { + "example": "San Francisco, CA", + "type": "string" + }, + "offset": { + "example": 0, + "type": "integer" + }, + "results": { + "items": { + "$ref": "#/definitions/yelp.BusinessItem" + }, + "type": "array" + }, + "term": { + "example": "pizza", + "type": "string" + }, + "total": { + "example": 240, + "type": "integer" + } + }, + "type": "object" + }, + "yelp.mobileBusinessMenuResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yelp.MobileBusinessMenuResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yelp.mobileBusinessPhotosResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yelp.MobileBusinessPhotosResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yelp.mobileBusinessResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yelp.MobileBusinessResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yelp.mobileBusinessReviewHighlightsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yelp.MobileBusinessReviewHighlightsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yelp.mobileBusinessReviewsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yelp.MobileBusinessReviewsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yelp.mobileBusinessReviewsSearchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yelp.MobileBusinessReviewsSearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yelp.mobileGeocodeResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yelp.MobileGeocodeResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yelp.mobileSearchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yelp.MobileSearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yoox.CategoriesResponse": { + "properties": { + "departments": { + "items": { + "$ref": "#/definitions/yoox.DepartmentCategories" + }, + "type": "array" + } + }, + "type": "object" + }, + "yoox.Category": { + "properties": { + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yoox.DepartmentCategories": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/yoox.Category" + }, + "type": "array" + }, + "department": { + "type": "string" + } + }, + "type": "object" + }, + "yoox.Designer": { + "properties": { + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yoox.DesignersResponse": { + "properties": { + "count": { + "type": "integer" + }, + "department": { + "type": "string" + }, + "designers": { + "items": { + "$ref": "#/definitions/yoox.Designer" + }, + "type": "array" + } + }, + "type": "object" + }, + "yoox.Detail": { + "properties": { + "brand": { + "type": "string" + }, + "category": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "in_stock": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "price": { + "type": "number" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yoox.Facets": { + "properties": { + "colors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sizes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sorts": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "yoox.Product": { + "properties": { + "brand": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "in_stock": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "price": { + "type": "number" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "yoox.SearchResponse": { + "properties": { + "count": { + "type": "integer" + }, + "department": { + "type": "string" + }, + "facets": { + "$ref": "#/definitions/yoox.Facets" + }, + "limit": { + "type": "integer" + }, + "page": { + "type": "integer" + }, + "products": { + "items": { + "$ref": "#/definitions/yoox.Product" + }, + "type": "array" + }, + "query": { + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "yoox.categoriesDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yoox.CategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yoox.designersDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yoox.DesignersResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yoox.productDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yoox.Detail" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "yoox.searchDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/yoox.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "youtube.Caption": { + "properties": { + "duration": { + "description": "Length of the caption cue, in seconds.", + "type": "number" + }, + "start": { + "description": "Time the caption cue starts, in seconds from the start of the video.", + "type": "number" + }, + "text": { + "description": "Caption text shown for this cue.", + "type": "string" + } + }, + "type": "object" + }, + "youtube.ChannelFeedResponse": { + "properties": { + "channel_id": { + "description": "YouTube channel ID, starting with `UC`.", + "example": "UCXZCJLdBC09xxGZ6gcdrc6A", + "type": "string" + }, + "channel_title": { + "description": "Channel name as shown on YouTube.", + "example": "OpenAI", + "type": "string" + }, + "channel_url": { + "description": "Link to the channel on YouTube.", + "example": "https://www.youtube.com/@OpenAI", + "type": "string" + }, + "continuation_token": { + "description": "Token to pass in the next request to get the following page. Omitted on the last page.", + "example": "NEXT_TOKEN", + "type": "string" + }, + "handle": { + "description": "Channel handle, starting with `@`.", + "example": "@OpenAI", + "type": "string" + }, + "items": { + "description": "Videos or other items from the channel, in the order YouTube lists them.", + "items": { + "$ref": "#/definitions/youtube.SearchItem" + }, + "type": "array" + }, + "query": { + "description": "Search text used to look inside the channel. Omitted when no search was run.", + "example": "gpt", + "type": "string" + }, + "thumbnail": { + "description": "URL of the channel's avatar image.", + "example": "https://yt3.googleusercontent.com/example=s176-c-k-c0x00ffffff-no-rj", + "type": "string" + } + }, + "type": "object" + }, + "youtube.ChannelShort": { + "properties": { + "position": { + "description": "Position of the Short in the channel's Shorts list, starting at 1.", + "example": 1, + "type": "integer" + }, + "thumbnail": { + "description": "URL of the Short's thumbnail image.", + "example": "https://i.ytimg.com/vi/abc123xyz89/oar2.jpg", + "type": "string" + }, + "title": { + "description": "Title of the Short.", + "example": "OpenAI demo clip", + "type": "string" + }, + "url": { + "description": "Link to the Short on YouTube.", + "example": "https://www.youtube.com/shorts/abc123xyz89", + "type": "string" + }, + "video_id": { + "description": "YouTube video ID of the Short.", + "example": "abc123xyz89", + "type": "string" + }, + "view_count": { + "description": "View count as YouTube displays it, such as `1.2M views`.", + "example": "1.2M views", + "type": "string" + } + }, + "type": "object" + }, + "youtube.ChannelShortsResponse": { + "properties": { + "channel_id": { + "description": "YouTube channel ID, starting with `UC`.", + "example": "UCXZCJLdBC09xxGZ6gcdrc6A", + "type": "string" + }, + "channel_title": { + "description": "Channel name as shown on YouTube.", + "example": "OpenAI", + "type": "string" + }, + "channel_url": { + "description": "Link to the channel on YouTube.", + "example": "https://www.youtube.com/@OpenAI", + "type": "string" + }, + "continuation_token": { + "description": "Token to pass in the next request to get the following page. Omitted on the last page.", + "example": "NEXT_TOKEN", + "type": "string" + }, + "handle": { + "description": "Channel handle, starting with `@`.", + "example": "@OpenAI", + "type": "string" + }, + "shorts": { + "description": "YouTube Shorts published by the channel.", + "items": { + "$ref": "#/definitions/youtube.ChannelShort" + }, + "type": "array" + }, + "thumbnail": { + "description": "URL of the channel's avatar image.", + "example": "https://yt3.googleusercontent.com/example=s176-c-k-c0x00ffffff-no-rj", + "type": "string" + } + }, + "type": "object" + }, + "youtube.Comment": { + "properties": { + "channel_id": { + "description": "YouTube channel ID of the commenter.", + "type": "string" + }, + "comment_id": { + "description": "YouTube ID of the comment.", + "type": "string" + }, + "content": { + "description": "Text of the comment.", + "type": "string" + }, + "continuation_token": { + "description": "Token for loading the replies to this comment. Omitted when none is available.", + "type": "string" + }, + "likes_count": { + "description": "Number of likes on the comment.", + "type": "integer" + }, + "published_time": { + "description": "Approximate time the comment was posted, in UTC (RFC 3339).", + "type": "string" + }, + "reply_count": { + "description": "Number of replies to the comment.", + "type": "integer" + }, + "user_name": { + "description": "Display name of the commenter, such as `@handle`.", + "type": "string" + } + }, + "type": "object" + }, + "youtube.CommentResponse": { + "properties": { + "comments": { + "description": "Comments on this page of the video.", + "items": { + "$ref": "#/definitions/youtube.Comment" + }, + "type": "array" + }, + "continuation_token": { + "description": "Token to pass in the next request to get the following page.", + "type": "string" + } + }, + "type": "object" + }, + "youtube.PlaylistResponse": { + "properties": { + "channel_id": { + "description": "YouTube channel ID of the playlist owner.", + "example": "UCXZCJLdBC09xxGZ6gcdrc6A", + "type": "string" + }, + "channel_title": { + "description": "Name of the channel that owns the playlist.", + "example": "OpenAI", + "type": "string" + }, + "continuation_token": { + "description": "Token to pass in the next request to get the following page. Omitted on the last page.", + "example": "NEXT_TOKEN", + "type": "string" + }, + "items": { + "description": "Videos in the playlist, in playlist order.", + "items": { + "$ref": "#/definitions/youtube.SearchItem" + }, + "type": "array" + }, + "playlist_id": { + "description": "YouTube playlist ID.", + "example": "PL1234567890abcdef", + "type": "string" + }, + "thumbnail": { + "description": "URL of the playlist's thumbnail image.", + "example": "https://i.ytimg.com/vi/abc123xyz89/hqdefault.jpg", + "type": "string" + }, + "title": { + "description": "Playlist title as shown on YouTube.", + "example": "OpenAI Podcast", + "type": "string" + }, + "url": { + "description": "Link to the playlist on YouTube.", + "example": "https://www.youtube.com/playlist?list=PL1234567890abcdef", + "type": "string" + }, + "video_count": { + "description": "Number of videos in the playlist as YouTube displays it, such as `12 videos`.", + "example": "12 videos", + "type": "string" + } + }, + "type": "object" + }, + "youtube.Profile": { + "properties": { + "bio": { + "example": "OpenAI’s mission is to ensure that artificial general intelligence benefits all of humanity.", + "type": "string" + }, + "channel_id": { + "example": "UCXZCJLdBC09xxGZ6gcdrc6A", + "type": "string" + }, + "channel_name": { + "example": "OpenAI", + "type": "string" + }, + "channel_url": { + "example": "http://www.youtube.com/@OpenAI", + "type": "string" + }, + "created_at": { + "example": "2025-07-12T08:46:11.740932549Z", + "type": "string" + }, + "id": { + "example": "fe03dcedad8ab90c5f81eb4a405a464b", + "type": "string" + }, + "joined_date": { + "example": "2017-03-10T00:00:00Z", + "type": "string" + }, + "links": { + "example": [ + "twitter.com/openai", + "linkedin.com/company/openai", + "openai.com" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "profile_pic": { + "example": "https://yt3.googleusercontent.com/MopgmVAFV9BqlzOJ-UINtmutvEPcNe5IbKMmP_4vZZo3vnJXcZGtybUBsXaEVxkmxKyGqX9R=s900-c-k-c0x00ffffff-no-rj", + "type": "string" + }, + "region": { + "example": "United States", + "type": "string" + }, + "stats": { + "$ref": "#/definitions/youtube.ProfileStats" + }, + "updated_at": { + "example": "2025-07-12T08:46:11.740932749Z", + "type": "string" + } + }, + "type": "object" + }, + "youtube.ProfileStats": { + "properties": { + "followers_count": { + "example": 1580000, + "type": "integer" + }, + "videos_count": { + "example": 305, + "type": "integer" + }, + "views_count": { + "example": 75159285, + "type": "integer" + } + }, + "type": "object" + }, + "youtube.SearchItem": { + "properties": { + "badges": { + "description": "Badge labels shown on the video, such as `HD` or `CC`.", + "example": [ + "HD", + "CC" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "channel_id": { + "description": "YouTube channel ID, starting with `UC`.", + "example": "UCXZCJLdBC09xxGZ6gcdrc6A", + "type": "string" + }, + "channel_thumbnail": { + "description": "URL of the publishing channel's avatar image.", + "example": "https://yt3.ggpht.com/example=s68-c-k-c0x00ffffff-no-rj", + "type": "string" + }, + "channel_title": { + "description": "Name of the channel that published the video or playlist.", + "example": "OpenAI", + "type": "string" + }, + "description_snippet": { + "description": "Short excerpt of the video or channel description shown in the results.", + "example": "A concise walkthrough of GPT features.", + "type": "string" + }, + "duration": { + "description": "Video length as YouTube displays it, such as `12:34`.", + "example": "12:34", + "type": "string" + }, + "duration_seconds": { + "description": "Video length in seconds.", + "example": 754, + "type": "integer" + }, + "handle": { + "description": "Channel handle, starting with `@`. Set for channel results.", + "example": "@OpenAI", + "type": "string" + }, + "is_live": { + "description": "Whether the video is a live stream.", + "type": "boolean" + }, + "is_short": { + "description": "Whether the video is a YouTube Short.", + "type": "boolean" + }, + "is_verified": { + "description": "Whether the channel carries a verified badge.", + "type": "boolean" + }, + "playlist_id": { + "description": "YouTube playlist ID. Set for playlist results.", + "example": "PL1234567890abcdef", + "type": "string" + }, + "position": { + "description": "Position of the item on this page of results, starting at 1.", + "example": 1, + "type": "integer" + }, + "published_text": { + "description": "Upload time as YouTube displays it, such as `2 days ago`.", + "example": "2 days ago", + "type": "string" + }, + "short_view_count": { + "description": "Abbreviated view count as YouTube displays it, such as `123K views`.", + "example": "123K views", + "type": "string" + }, + "subscriber_count": { + "description": "Subscriber count as YouTube displays it, such as `1.93M subscribers`.", + "example": "1.93M subscribers", + "type": "string" + }, + "thumbnail": { + "description": "URL of the item's thumbnail image.", + "example": "https://i.ytimg.com/vi/abc123/hq720.jpg", + "type": "string" + }, + "title": { + "description": "Video or playlist title, or channel name.", + "example": "ChatGPT Explained", + "type": "string" + }, + "type": { + "description": "Kind of result: `video`, `channel` or `playlist`.", + "example": "video", + "type": "string" + }, + "url": { + "description": "Link to the video, channel or playlist on YouTube.", + "example": "https://www.youtube.com/watch?v=abc123", + "type": "string" + }, + "video_count": { + "description": "Number of videos as YouTube displays it, such as `12 videos`. Set for channel and playlist results.", + "example": "9 lessons", + "type": "string" + }, + "video_id": { + "description": "YouTube video ID. Set for video results.", + "example": "abc123xyz89", + "type": "string" + }, + "view_count": { + "description": "View count as YouTube displays it, such as `123,456 views`.", + "example": "123,456 views", + "type": "string" + } + }, + "type": "object" + }, + "youtube.SearchResponse": { + "properties": { + "continuation_token": { + "description": "Token to pass in the next request to get the following page. Omitted on the last page.", + "example": "NEXT_TOKEN", + "type": "string" + }, + "estimated_results": { + "description": "Approximate number of results YouTube reports for the search.", + "example": 9895225, + "type": "integer" + }, + "items": { + "description": "Videos, channels and playlists on this page of results.", + "items": { + "$ref": "#/definitions/youtube.SearchItem" + }, + "type": "array" + }, + "query": { + "description": "Search text that was run.", + "example": "gpt", + "type": "string" + } + }, + "type": "object" + }, + "youtube.TagResp": { + "properties": { + "continuation_token": { + "description": "Token to pass in the next request to get the following page.", + "type": "string" + }, + "meta": { + "allOf": [ + { + "$ref": "#/definitions/youtube.tagMeta" + } + ], + "description": "Totals shown on the hashtag page. Present on the first page only." + }, + "videos": { + "description": "Videos posted under the hashtag.", + "items": { + "$ref": "#/definitions/youtube.VideoDetail" + }, + "type": "array" + } + }, + "type": "object" + }, + "youtube.TranscriptLanguage": { + "properties": { + "is_generated": { + "description": "Whether the transcript is auto-generated rather than written by a person.", + "type": "boolean" + }, + "is_translatable": { + "description": "Whether YouTube offers translations of this transcript.", + "type": "boolean" + }, + "language": { + "description": "Language name, such as `English`.", + "example": "English", + "type": "string" + }, + "language_code": { + "description": "Language code of the transcript, such as `en`.", + "example": "en", + "type": "string" + } + }, + "type": "object" + }, + "youtube.TranscriptResponse": { + "properties": { + "is_generated": { + "description": "Whether the transcript is auto-generated rather than written by a person.", + "type": "boolean" + }, + "language": { + "description": "Language name of the transcript, such as `English`.", + "example": "English", + "type": "string" + }, + "language_code": { + "description": "Language code of the transcript, such as `en`.", + "example": "en", + "type": "string" + }, + "segments": { + "description": "Transcript split into timed segments.", + "items": { + "$ref": "#/definitions/youtube.TranscriptSegment" + }, + "type": "array" + }, + "text": { + "description": "Full transcript as one block of text.", + "example": "Never gonna give you up", + "type": "string" + }, + "translation_language": { + "description": "Language code the transcript was translated into. Omitted when no translation was requested.", + "example": "es", + "type": "string" + }, + "video_id": { + "description": "YouTube video ID the transcript belongs to.", + "example": "dQw4w9WgXcQ", + "type": "string" + } + }, + "type": "object" + }, + "youtube.TranscriptSegment": { + "properties": { + "duration": { + "description": "Length of the segment, in seconds.", + "type": "number" + }, + "start": { + "description": "Time the segment starts, in seconds from the start of the video.", + "type": "number" + }, + "text": { + "description": "Transcript text spoken in this segment.", + "type": "string" + } + }, + "type": "object" + }, + "youtube.VideoDetail": { + "properties": { + "channel_id": { + "description": "YouTube channel ID of the uploader.", + "example": "UCXZCJLdBC09xxGZ6gcdrc6A", + "type": "string" + }, + "channel_title": { + "description": "Name of the channel that uploaded the video.", + "example": "OpenAI", + "type": "string" + }, + "comments_count": { + "description": "Number of comments on the video; may be rounded when YouTube shows an abbreviated count. Omitted when unavailable.", + "example": 1400, + "type": "integer" + }, + "description": { + "description": "Full video description.", + "example": "On the first episode of the OpenAI Podcast...", + "type": "string" + }, + "dislikes_count": { + "description": "may be hidden", + "example": 0, + "type": "integer" + }, + "duration_seconds": { + "description": "length in seconds", + "example": 2423, + "type": "number" + }, + "id": { + "description": "YouTube video ID.", + "example": "YbJOTdZBX1g", + "type": "string" + }, + "likes_count": { + "description": "Number of likes on the video; may be rounded when YouTube shows an abbreviated count. Omitted when unavailable.", + "example": 11000, + "type": "integer" + }, + "published_at": { + "description": "Time the video was published, in RFC 3339.", + "example": "2025-06-18T07:59:20-07:00", + "type": "string" + }, + "title": { + "description": "Video title as shown on YouTube.", + "example": "Sam Altman on AGI, GPT-5, and what’s next — the OpenAI Podcast Ep. 1", + "type": "string" + }, + "views_count": { + "description": "Number of views of the video. Omitted when unavailable.", + "example": 460176, + "type": "integer" + } + }, + "type": "object" + }, + "youtube.captionsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "items": { + "$ref": "#/definitions/youtube.Caption" + }, + "type": "array" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "youtube.channelFeedResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/youtube.ChannelFeedResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "youtube.channelSearchResponseDataDoc": { + "properties": { + "channel_id": { + "description": "YouTube channel ID, starting with `UC`.", + "example": "UCXZCJLdBC09xxGZ6gcdrc6A", + "type": "string" + }, + "channel_title": { + "description": "Channel name as shown on YouTube.", + "example": "OpenAI", + "type": "string" + }, + "channel_url": { + "description": "Link to the channel on YouTube.", + "example": "https://www.youtube.com/@OpenAI", + "type": "string" + }, + "continuation_token": { + "description": "Token to pass in the next request to get the following page. Omitted on the last page.", + "example": "NEXT_TOKEN", + "type": "string" + }, + "handle": { + "description": "Channel handle, starting with `@`.", + "example": "@OpenAI", + "type": "string" + }, + "items": { + "description": "Videos from the channel that match the search text.", + "items": { + "$ref": "#/definitions/youtube.SearchItem" + }, + "type": "array" + }, + "query": { + "description": "Search text that was run inside the channel.", + "example": "gpt", + "type": "string" + }, + "thumbnail": { + "description": "URL of the channel's avatar image.", + "example": "https://yt3.googleusercontent.com/example=s176-c-k-c0x00ffffff-no-rj", + "type": "string" + } + }, + "type": "object" + }, + "youtube.channelSearchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/youtube.channelSearchResponseDataDoc" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "youtube.channelShortsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/youtube.ChannelShortsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "youtube.commentsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/youtube.CommentResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "youtube.playlistResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/youtube.PlaylistResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "youtube.profileResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/youtube.Profile" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "youtube.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/youtube.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "youtube.suggestResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/suggest.Response" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "youtube.tagMeta": { + "properties": { + "channelsCount": { + "description": "Number of channels using the hashtag, as shown on the hashtag page.", + "format": "int64", + "type": "integer" + }, + "videosCount": { + "description": "Number of videos using the hashtag, as shown on the hashtag page.", + "format": "int64", + "type": "integer" + } + }, + "type": "object" + }, + "youtube.tagResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/youtube.TagResp" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "youtube.transcriptLanguagesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "items": { + "$ref": "#/definitions/youtube.TranscriptLanguage" + }, + "type": "array" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "youtube.transcriptResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/youtube.TranscriptResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "youtube.videoResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/youtube.VideoDetail" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "zalando.CategoriesResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/zalando.CategoryTaxonomyEntry" + }, + "type": "array" + }, + "count": { + "example": 11, + "type": "integer" + }, + "department": { + "example": "women", + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "market": { + "example": "de", + "type": "string" + }, + "source_urls": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "zalando.CategoryResponse": { + "properties": { + "category": { + "example": "shoes", + "type": "string" + }, + "count": { + "example": 24, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "market": { + "example": "de", + "type": "string" + }, + "products": { + "items": { + "$ref": "#/definitions/zalando.ProductSummary" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "total_count": { + "example": 145032, + "type": "integer" + } + }, + "type": "object" + }, + "zalando.CategoryTaxonomyEntry": { + "properties": { + "category": { + "example": "womens-clothing", + "type": "string" + }, + "department": { + "example": "women", + "type": "string" + }, + "name": { + "example": "Clothing", + "type": "string" + }, + "url": { + "example": "https://en.zalando.de/womens-clothing/", + "type": "string" + } + }, + "type": "object" + }, + "zalando.Market": { + "properties": { + "code": { + "example": "de", + "type": "string" + }, + "domain": { + "example": "en.zalando.de", + "type": "string" + } + }, + "type": "object" + }, + "zalando.MarketsResponse": { + "properties": { + "count": { + "example": 8, + "type": "integer" + }, + "markets": { + "items": { + "$ref": "#/definitions/zalando.Market" + }, + "type": "array" + } + }, + "type": "object" + }, + "zalando.Product": { + "properties": { + "brand": { + "example": "On", + "type": "string" + }, + "color": { + "example": "white white/white", + "type": "string" + }, + "currency": { + "example": "EUR", + "type": "string" + }, + "description": { + "type": "string" + }, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "example": "CLOUD 6 - Trainers - white white", + "type": "string" + }, + "price": { + "example": 160, + "type": "number" + }, + "sku": { + "example": "ONM11A03W-A12", + "type": "string" + }, + "url": { + "example": "https://en.zalando.de/on-cloud-trainers-white-white-onm11a03w-a12.html", + "type": "string" + }, + "variants": { + "items": { + "$ref": "#/definitions/zalando.ProductVariant" + }, + "type": "array" + } + }, + "type": "object" + }, + "zalando.ProductResponse": { + "properties": { + "fetched_at": { + "type": "string" + }, + "market": { + "example": "de", + "type": "string" + }, + "product": { + "$ref": "#/definitions/zalando.Product" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "zalando.ProductSummary": { + "properties": { + "brand": { + "example": "On", + "type": "string" + }, + "condition": { + "example": "NEW", + "type": "string" + }, + "currency": { + "example": "EUR", + "type": "string" + }, + "discount_percent": { + "example": 20, + "type": "integer" + }, + "image": { + "type": "string" + }, + "name": { + "example": "CLOUD 6 - Trainers - white white", + "type": "string" + }, + "original_price": { + "example": 199.95, + "type": "number" + }, + "price": { + "example": 160, + "type": "number" + }, + "silhouette": { + "example": "LOW_SHOE", + "type": "string" + }, + "sku": { + "example": "ONM11A03W-A12", + "type": "string" + }, + "url": { + "example": "https://en.zalando.de/on-cloud-trainers-white-white-onm11a03w-a12.html", + "type": "string" + } + }, + "type": "object" + }, + "zalando.ProductVariant": { + "properties": { + "availability": { + "example": "InStock", + "type": "string" + }, + "currency": { + "example": "EUR", + "type": "string" + }, + "gtin": { + "example": "7615537206202", + "type": "string" + }, + "price": { + "example": 160, + "type": "number" + }, + "size": { + "example": "42", + "type": "string" + }, + "sku": { + "example": "ONM11A03W-A120010000", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "zalando.SearchResponse": { + "properties": { + "count": { + "example": 24, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "market": { + "example": "de", + "type": "string" + }, + "products": { + "items": { + "$ref": "#/definitions/zalando.ProductSummary" + }, + "type": "array" + }, + "query": { + "example": "running shoes", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "total_count": { + "example": 4911, + "type": "integer" + } + }, + "type": "object" + }, + "zalando.SuggestResponse": { + "properties": { + "fetched_at": { + "type": "string" + }, + "market": { + "example": "de", + "type": "string" + }, + "query": { + "example": "running sho", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "suggestions": { + "example": [ + "running shoes", + "running shoes nike", + "running shoes adidas" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "zalando.categoriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zalando.CategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "zalando.categoryResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zalando.CategoryResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "zalando.marketsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zalando.MarketsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "zalando.productResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zalando.ProductResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "zalando.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zalando.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "zalando.suggestResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zalando.SuggestResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "zappos.BrandRef": { + "properties": { + "id": { + "example": "WgLNGeICAQs", + "type": "string" + }, + "name": { + "example": "Adidas Outdoor", + "type": "string" + }, + "slug": { + "example": "adidas-outdoor", + "type": "string" + }, + "url": { + "example": "https://www.zappos.com/adidas-outdoor/WgLNGeICAQs.zso", + "type": "string" + } + }, + "type": "object" + }, + "zappos.BrandResponse": { + "properties": { + "brand": { + "type": "string" + }, + "brand_id": { + "type": "string" + }, + "count": { + "type": "integer" + }, + "facets": { + "items": { + "$ref": "#/definitions/zappos.Facet" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "has_more": { + "type": "boolean" + }, + "page": { + "type": "integer" + }, + "page_count": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "products": { + "items": { + "$ref": "#/definitions/zappos.ProductSummary" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "total_count": { + "type": "integer" + } + }, + "type": "object" + }, + "zappos.BrandsResponse": { + "properties": { + "brands": { + "items": { + "$ref": "#/definitions/zappos.BrandRef" + }, + "type": "array" + }, + "has_next": { + "example": true, + "type": "boolean" + }, + "page": { + "example": 1, + "type": "integer" + }, + "page_size": { + "example": 100, + "type": "integer" + }, + "total": { + "example": 440, + "type": "integer" + } + }, + "type": "object" + }, + "zappos.ColorVariant": { + "properties": { + "color_id": { + "type": "string" + }, + "color_name": { + "type": "string" + }, + "original_price": { + "type": "string" + }, + "percent_off": { + "type": "string" + }, + "price": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "zappos.Facet": { + "properties": { + "field": { + "example": "txAttrFacet_Gender", + "type": "string" + }, + "multi_select": { + "type": "boolean" + }, + "name": { + "example": "Gender", + "type": "string" + }, + "values": { + "items": { + "$ref": "#/definitions/zappos.FacetValue" + }, + "type": "array" + } + }, + "type": "object" + }, + "zappos.FacetValue": { + "properties": { + "count": { + "example": 69, + "type": "integer" + }, + "selected": { + "type": "boolean" + }, + "url": { + "type": "string" + }, + "value": { + "example": "Women", + "type": "string" + } + }, + "type": "object" + }, + "zappos.FeaturedReview": { + "properties": { + "author": { + "type": "string" + }, + "body": { + "type": "string" + }, + "comfort_rating": { + "type": "number" + }, + "date": { + "type": "string" + }, + "id": { + "type": "string" + }, + "look_rating": { + "type": "integer" + }, + "overall_rating": { + "type": "integer" + }, + "up_votes": { + "type": "integer" + }, + "verified_purchase": { + "type": "boolean" + } + }, + "type": "object" + }, + "zappos.FitFeedback": { + "properties": { + "most_common_answer": { + "description": "MostCommonAnswer and MostCommonPercentage are Zappos's own \"most\ncommon answer\" summary for this dimension, e.g. \"Felt true to size\"\nat 80%.", + "type": "string" + }, + "most_common_percentage": { + "type": "number" + }, + "percentages": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "description": "Percentages maps each response option's own text (e.g. \"Felt true to\nsize\") to the percentage of reviewers who chose it.", + "type": "object" + } + }, + "type": "object" + }, + "zappos.ProductDetailResponse": { + "properties": { + "arch_fit": { + "$ref": "#/definitions/zappos.FitFeedback" + }, + "brand_name": { + "type": "string" + }, + "breadcrumbs": { + "description": "Breadcrumbs is the site's own navigation path to this product (e.g.\n[\"shoes\", \"sneakers & athletic shoes\", \"adidas Outdoor\"]).", + "items": { + "type": "string" + }, + "type": "array" + }, + "category": { + "type": "string" + }, + "color": { + "type": "string" + }, + "color_id": { + "type": "string" + }, + "color_variants": { + "description": "ColorVariants lists every sibling color variant of this product\n(including this one), each with its own price. See service.go's doc\ncomment on where this is sourced from.", + "items": { + "$ref": "#/definitions/zappos.ColorVariant" + }, + "type": "array" + }, + "currency_code": { + "type": "string" + }, + "description": { + "type": "string" + }, + "featured_reviews": { + "description": "FeaturedReviews holds Zappos's own site-selected featured reviews --\nat most two (the page's own \"most helpful\" and \"most voted\" picks,\ndeduplicated if they are the same single review) -- each with real\nauthor/date/body/rating, not the whole review corpus. See service.go's\ndoc comment for why this differs from the JSON-LD block's own\ncontent-free review stub.", + "items": { + "$ref": "#/definitions/zappos.FeaturedReview" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "in_stock": { + "type": "boolean" + }, + "original_price": { + "type": "string" + }, + "price": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "product_name": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "rating_breakdown": { + "additionalProperties": { + "format": "float64", + "type": "number" + }, + "description": "RatingBreakdown maps each star value (\"1\" through \"5\") to the\npercentage of reviewers who gave that rating.", + "type": "object" + }, + "rating_count": { + "description": "RatingCount is the product's total review count, sourced from the\npage's own aggregate rating summary (not the number of entries in\nFeaturedReviews, which is at most 2 -- see FeaturedReviews' doc\ncomment).", + "type": "integer" + }, + "size_fit": { + "allOf": [ + { + "$ref": "#/definitions/zappos.FitFeedback" + } + ], + "description": "SizeFit, WidthFit, and ArchFit summarize reviewer-submitted fit\nfeedback for this product -- nil when the product has no fit-feedback\ndata. Sourced from the same RSC \"reviews\" object as RatingBreakdown/\nFeaturedReviews, at no extra upstream cost. See FitFeedback's doc\ncomment." + }, + "source_url": { + "type": "string" + }, + "url": { + "type": "string" + }, + "width_fit": { + "$ref": "#/definitions/zappos.FitFeedback" + } + }, + "type": "object" + }, + "zappos.ProductSummary": { + "properties": { + "brand_name": { + "type": "string" + }, + "color": { + "type": "string" + }, + "color_id": { + "type": "string" + }, + "gender": { + "items": { + "type": "string" + }, + "type": "array" + }, + "image_url": { + "type": "string" + }, + "is_new": { + "type": "boolean" + }, + "on_hand": { + "type": "integer" + }, + "on_sale": { + "type": "boolean" + }, + "original_price": { + "type": "string" + }, + "percent_off": { + "type": "string" + }, + "price": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "product_name": { + "type": "string" + }, + "product_type": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "review_count": { + "type": "integer" + }, + "style_color": { + "type": "string" + }, + "style_id": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "zappos.SearchResponse": { + "properties": { + "count": { + "type": "integer" + }, + "facets": { + "description": "Facets lists this page's own filterable fields (gender, department,\nshoe size, etc.), each with live result counts and drill-down URLs --\nsourced from the same response this package already fetches, not a\nseparate upstream call. See buildFacets's doc comment.", + "items": { + "$ref": "#/definitions/zappos.Facet" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "has_more": { + "type": "boolean" + }, + "page": { + "type": "integer" + }, + "page_count": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "products": { + "items": { + "$ref": "#/definitions/zappos.ProductSummary" + }, + "type": "array" + }, + "source_url": { + "type": "string" + }, + "term": { + "type": "string" + }, + "total_count": { + "type": "integer" + } + }, + "type": "object" + }, + "zappos.SuggestResponse": { + "properties": { + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "query": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "suggestions": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "zappos.brandResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zappos.BrandResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "zappos.brandsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zappos.BrandsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "zappos.productDetailResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zappos.ProductDetailResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "zappos.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zappos.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "zappos.suggestResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zappos.SuggestResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "zara.CategoriesResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/zara.CategoryNode" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "zara.CategoryNode": { + "properties": { + "has_subcategories": { + "type": "boolean" + }, + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "section_name": { + "type": "string" + }, + "subcategories": { + "items": { + "$ref": "#/definitions/zara.CategoryNode" + }, + "type": "array" + } + }, + "type": "object" + }, + "zara.CategoryProductsResponse": { + "properties": { + "category_id": { + "type": "string" + }, + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "products": { + "items": { + "$ref": "#/definitions/zara.ProductSummary" + }, + "type": "array" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "zara.ColorSummary": { + "properties": { + "availability": { + "type": "string" + }, + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "price": { + "type": "number" + }, + "product_id": { + "type": "integer" + } + }, + "type": "object" + }, + "zara.CompositionComponent": { + "properties": { + "material": { + "type": "string" + }, + "percentage": { + "type": "string" + } + }, + "type": "object" + }, + "zara.CompositionPart": { + "properties": { + "components": { + "items": { + "$ref": "#/definitions/zara.CompositionComponent" + }, + "type": "array" + }, + "description": { + "type": "string" + } + }, + "type": "object" + }, + "zara.Facet": { + "properties": { + "key": { + "type": "string" + }, + "values": { + "items": { + "$ref": "#/definitions/zara.FacetValue" + }, + "type": "array" + } + }, + "type": "object" + }, + "zara.FacetValue": { + "properties": { + "count": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + } + }, + "type": "object" + }, + "zara.ProductDetailColor": { + "properties": { + "availability": { + "type": "string" + }, + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "images": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "price": { + "type": "number" + }, + "sizes": { + "items": { + "$ref": "#/definitions/zara.ProductDetailSize" + }, + "type": "array" + } + }, + "type": "object" + }, + "zara.ProductDetailResponse": { + "properties": { + "colors": { + "items": { + "$ref": "#/definitions/zara.ProductDetailColor" + }, + "type": "array" + }, + "composition": { + "items": { + "$ref": "#/definitions/zara.CompositionPart" + }, + "type": "array" + }, + "family_name": { + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "name": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "reference": { + "type": "string" + }, + "section_name": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "subfamily_name": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "zara.ProductDetailSize": { + "properties": { + "availability": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "price": { + "type": "number" + }, + "sku": { + "type": "integer" + } + }, + "type": "object" + }, + "zara.ProductSummary": { + "properties": { + "availability": { + "type": "string" + }, + "colors": { + "items": { + "$ref": "#/definitions/zara.ColorSummary" + }, + "type": "array" + }, + "family_name": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "price": { + "type": "number" + }, + "reference": { + "type": "string" + }, + "section_name": { + "type": "string" + }, + "subfamily_name": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "zara.SearchResponse": { + "properties": { + "count": { + "type": "integer" + }, + "facets": { + "items": { + "$ref": "#/definitions/zara.Facet" + }, + "type": "array" + }, + "fetched_at": { + "type": "string" + }, + "is_last_page": { + "type": "boolean" + }, + "limit": { + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "products": { + "items": { + "$ref": "#/definitions/zara.ProductSummary" + }, + "type": "array" + }, + "query": { + "type": "string" + }, + "section": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "total_count": { + "type": "integer" + } + }, + "type": "object" + }, + "zara.Store": { + "properties": { + "address": { + "type": "string" + }, + "city": { + "type": "string" + }, + "commercial_name": { + "type": "string" + }, + "country": { + "type": "string" + }, + "donation_allowed": { + "type": "boolean" + }, + "id": { + "type": "integer" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "name": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "pickup_allowed": { + "type": "boolean" + }, + "postal_code": { + "type": "string" + }, + "sections": { + "items": { + "type": "string" + }, + "type": "array" + }, + "state": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "zara.StoreResponse": { + "properties": { + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "lat": { + "type": "number" + }, + "lng": { + "type": "number" + }, + "radius": { + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "stores": { + "items": { + "$ref": "#/definitions/zara.Store" + }, + "type": "array" + } + }, + "type": "object" + }, + "zara.SuggestResponse": { + "properties": { + "count": { + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "query": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "suggestions": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "zara.categoriesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zara.CategoriesResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "zara.categoryProductsResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zara.CategoryProductsResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "zara.productDetailResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zara.ProductDetailResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "zara.searchResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zara.SearchResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "zara.storesResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zara.StoreResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "zara.suggestResponseDoc": { + "properties": { + "code": { + "example": 200, + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zara.SuggestResponse" + }, + "msg": { + "example": "OK", + "type": "string" + } + }, + "type": "object" + }, + "zaxbys.MenuCategory": { + "properties": { + "catering": { + "description": "Catering marks a catering-only section (larger platters/boxed\nlunches), separate from the everyday menu.", + "type": "boolean" + }, + "id": { + "type": "integer" + }, + "image": { + "type": "string" + }, + "name": { + "example": "Fingerz™ & Wings Meals", + "type": "string" + }, + "products": { + "items": { + "$ref": "#/definitions/zaxbys.MenuProduct" + }, + "type": "array" + }, + "slug": { + "type": "string" + }, + "spotlight": { + "type": "boolean" + } + }, + "type": "object" + }, + "zaxbys.MenuModifierGroup": { + "properties": { + "id": { + "type": "integer" + }, + "name": { + "example": "Boneless or traditional?", + "type": "string" + }, + "options": { + "items": { + "$ref": "#/definitions/zaxbys.MenuModifierOption" + }, + "type": "array" + } + }, + "type": "object" + }, + "zaxbys.MenuModifierOption": { + "properties": { + "cost": { + "example": 17, + "type": "number" + }, + "default": { + "type": "boolean" + }, + "groups": { + "items": { + "$ref": "#/definitions/zaxbys.MenuModifierGroup" + }, + "type": "array" + }, + "id": { + "type": "integer" + }, + "name": { + "example": "Sauced Fingerz", + "type": "string" + } + }, + "type": "object" + }, + "zaxbys.MenuProduct": { + "properties": { + "available_now": { + "description": "AvailableNow reflects the upstream's own current-availability flag\n(e.g. a limited-time item outside its active window is excluded here,\nnot filtered out of the response -- callers can decide what to do\nwith a not-currently-available item).", + "type": "boolean" + }, + "badges": { + "items": { + "type": "string" + }, + "type": "array" + }, + "calories": { + "example": "1440 - 1770", + "type": "string" + }, + "cost": { + "example": 0, + "type": "number" + }, + "customization_available": { + "type": "boolean" + }, + "description": { + "type": "string" + }, + "groups": { + "items": { + "$ref": "#/definitions/zaxbys.MenuModifierGroup" + }, + "type": "array" + }, + "image": { + "type": "string" + }, + "product_id": { + "example": 113251777, + "type": "integer" + }, + "short_description": { + "type": "string" + }, + "size": { + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "example": "Lemon Pepper Wings & Things Meal", + "type": "string" + } + }, + "type": "object" + }, + "zaxbys.MenuResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/zaxbys.MenuCategory" + }, + "type": "array" + }, + "category_count": { + "example": 15, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "product_count": { + "example": 106, + "type": "integer" + }, + "source_url": { + "type": "string" + } + }, + "type": "object" + }, + "zaxbys.NearbyResponse": { + "properties": { + "count": { + "example": 10, + "type": "integer" + }, + "fetched_at": { + "type": "string" + }, + "radius_miles": { + "example": 25, + "type": "integer" + }, + "source_url": { + "type": "string" + }, + "stores": { + "items": { + "$ref": "#/definitions/zaxbys.NearbyStore" + }, + "type": "array" + } + }, + "type": "object" + }, + "zaxbys.NearbyStore": { + "properties": { + "address": { + "$ref": "#/definitions/zaxbys.StoreAddress" + }, + "available": { + "description": "Available is Zaxby's own overall availability flag for this store\n(distinct from CurrentlyOpen, which reflects today's hours).", + "type": "boolean" + }, + "currently_open": { + "type": "boolean" + }, + "distance_miles": { + "description": "DistanceMiles is measured from the requested coordinate.", + "example": 1.78, + "type": "number" + }, + "eta": { + "description": "ETA is Zaxby's own published estimate for this store, e.g. \"24MIN\".\nNot a fixed unit-tagged duration upstream, so it is passed through as-is.", + "example": "24MIN", + "type": "string" + }, + "hours": { + "items": { + "$ref": "#/definitions/zaxbys.StoreHours" + }, + "type": "array" + }, + "latitude": { + "example": 40.872505, + "type": "number" + }, + "longitude": { + "example": -73.854276, + "type": "number" + }, + "name": { + "example": "Bronx - 3260 Boston Road", + "type": "string" + }, + "order_url": { + "description": "OrderURL is Zaxby's own Olo-hosted ordering page for this store.", + "type": "string" + }, + "phone": { + "example": "(929) 992-4390", + "type": "string" + }, + "services": { + "$ref": "#/definitions/zaxbys.StoreServices" + }, + "slug": { + "example": "bronx-3260-boston-road", + "type": "string" + }, + "store_id": { + "example": 299987, + "type": "integer" + }, + "store_number": { + "example": "75030", + "type": "string" + } + }, + "type": "object" + }, + "zaxbys.StoreAddress": { + "properties": { + "city": { + "example": "Bronx", + "type": "string" + }, + "postal_code": { + "description": "PostalCode is a US ZIP code. The upstream source is US-only.", + "example": "10469", + "type": "string" + }, + "region": { + "example": "NY", + "type": "string" + }, + "street": { + "example": "3260 Boston Road", + "type": "string" + } + }, + "type": "object" + }, + "zaxbys.StoreHours": { + "properties": { + "label": { + "example": "Delivery", + "type": "string" + }, + "ranges": { + "items": { + "$ref": "#/definitions/zaxbys.StoreHoursRange" + }, + "type": "array" + }, + "type": { + "example": "drivethru", + "type": "string" + } + }, + "type": "object" + }, + "zaxbys.StoreHoursRange": { + "properties": { + "closes_at": { + "example": "2026-09-06 03:00", + "type": "string" + }, + "day": { + "example": "Sat", + "type": "string" + }, + "opens_at": { + "example": "2026-09-05 10:30", + "type": "string" + } + }, + "type": "object" + }, + "zaxbys.StoreResponse": { + "properties": { + "address": { + "$ref": "#/definitions/zaxbys.StoreAddress" + }, + "available": { + "description": "Available is Zaxby's own overall availability flag for this store\n(distinct from CurrentlyOpen, which reflects today's hours).", + "type": "boolean" + }, + "currently_open": { + "type": "boolean" + }, + "eta": { + "description": "ETA is Zaxby's own published estimate for this store, e.g. \"24MIN\".\nNot a fixed unit-tagged duration upstream, so it is passed through as-is.", + "example": "24MIN", + "type": "string" + }, + "fetched_at": { + "type": "string" + }, + "hours": { + "items": { + "$ref": "#/definitions/zaxbys.StoreHours" + }, + "type": "array" + }, + "latitude": { + "example": 40.872505, + "type": "number" + }, + "longitude": { + "example": -73.854276, + "type": "number" + }, + "name": { + "example": "Bronx - 3260 Boston Road", + "type": "string" + }, + "order_url": { + "description": "OrderURL is Zaxby's own Olo-hosted ordering page for this store.", + "type": "string" + }, + "phone": { + "example": "(929) 992-4390", + "type": "string" + }, + "services": { + "$ref": "#/definitions/zaxbys.StoreServices" + }, + "slug": { + "example": "bronx-3260-boston-road", + "type": "string" + }, + "source_url": { + "type": "string" + }, + "store_id": { + "example": 299987, + "type": "integer" + }, + "store_number": { + "example": "75030", + "type": "string" + } + }, + "type": "object" + }, + "zaxbys.StoreServices": { + "properties": { + "catering": { + "type": "boolean" + }, + "curbside": { + "type": "boolean" + }, + "delivery": { + "type": "boolean" + }, + "dine_in": { + "type": "boolean" + }, + "dispatch": { + "type": "boolean" + }, + "drive_thru": { + "type": "boolean" + }, + "free_wifi": { + "type": "boolean" + }, + "milkshakes": { + "type": "boolean" + }, + "online_ordering": { + "type": "boolean" + }, + "open_late": { + "type": "boolean" + }, + "pickup": { + "type": "boolean" + } + }, + "type": "object" + }, + "zaxbys.menuResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zaxbys.MenuResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "zaxbys.nearbyResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zaxbys.NearbyResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "zaxbys.storeResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zaxbys.StoreResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "zdnet.AuthorResponse": { + "properties": { + "article_count": { + "type": "integer" + }, + "articles": { + "items": { + "$ref": "#/definitions/newsplatform.HeadlineItem" + }, + "type": "array" + }, + "biography": { + "items": { + "type": "string" + }, + "type": "array" + }, + "credentials": { + "type": "string" + }, + "expertise": { + "items": { + "$ref": "#/definitions/zdnet.AuthorTopic" + }, + "type": "array" + }, + "has_next_page": { + "type": "boolean" + }, + "image_url": { + "type": "string" + }, + "joined_at": { + "type": "string" + }, + "name": { + "type": "string" + }, + "page": { + "type": "integer" + }, + "role": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "social_links": { + "items": { + "$ref": "#/definitions/zdnet.AuthorSocialLink" + }, + "type": "array" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "zdnet.AuthorSocialLink": { + "properties": { + "platform": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "zdnet.AuthorTopic": { + "properties": { + "name": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "zillow.AutocompleteItem": { + "properties": { + "city": { + "description": "City name of the suggested place.", + "example": "Los Angeles", + "type": "string" + }, + "county": { + "description": "County name of the suggested place.", + "example": "Los Angeles County", + "type": "string" + }, + "id": { + "description": "Identifier of the suggestion, as Zillow returns it.", + "type": "string" + }, + "latitude": { + "description": "Latitude of the suggested location, in decimal degrees.", + "type": "number" + }, + "longitude": { + "description": "Longitude of the suggested location, in decimal degrees.", + "type": "number" + }, + "near_me": { + "description": "Whether the suggestion is Zillow's near-me search option.", + "type": "boolean" + }, + "plid": { + "description": "Place identifier of the suggestion, as Zillow returns it.", + "type": "string" + }, + "region_display_ids": { + "description": "Display ids of the regions listed in `region_ids`, as Zillow returns them.", + "items": { + "type": "string" + }, + "type": "array" + }, + "region_id": { + "description": "Zillow region id of the suggestion. Pass it as `region_id` to the search endpoint.", + "example": 12447, + "type": "integer" + }, + "region_ids": { + "description": "Zillow region ids covered by a suggestion that spans several regions.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "region_type": { + "description": "Zillow region type code that goes with `region_id`. Pass it as `region_type` to the search endpoint.", + "example": 6, + "type": "integer" + }, + "region_types": { + "description": "Zillow region type codes that match the region ids in `region_ids`.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "school_district_ids": { + "description": "Zillow ids of the school districts the suggestion refers to.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "school_ids": { + "description": "Zillow ids of the schools the suggestion refers to.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "state": { + "description": "State abbreviation of the suggested place, such as `CA`.", + "example": "CA", + "type": "string" + }, + "sub_type": { + "description": "Kind of place the suggestion is, such as `city`.", + "type": "string" + }, + "view_latitude_delta": { + "description": "Latitude span of the map view Zillow suggests for this result.", + "type": "number" + } + }, + "type": "object" + }, + "zillow.AutocompleteResponse": { + "properties": { + "query": { + "description": "Query that was run.", + "example": "Los Angeles, CA", + "type": "string" + }, + "request_id": { + "description": "Identifier Zillow gave to this autocomplete request.", + "type": "string" + }, + "results": { + "description": "Location suggestions, in the order Zillow returned them.", + "items": { + "$ref": "#/definitions/zillow.AutocompleteItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "zillow.PropertyAddressParts": { + "properties": { + "city": { + "description": "City of the property.", + "type": "string" + }, + "county": { + "description": "County of the property.", + "type": "string" + }, + "neighborhood": { + "description": "Neighborhood of the property.", + "type": "string" + }, + "state": { + "description": "State of the property.", + "type": "string" + }, + "street": { + "description": "Street address of the property.", + "type": "string" + }, + "subdivision": { + "description": "Subdivision the property belongs to.", + "type": "string" + }, + "zipcode": { + "description": "ZIP code of the property.", + "type": "string" + } + }, + "type": "object" + }, + "zillow.PropertyAgent": { + "properties": { + "email": { + "description": "Email address of the agent, as shown on the listing.", + "type": "string" + }, + "name": { + "description": "Full name of the agent.", + "type": "string" + }, + "phone": { + "description": "Phone number of the agent, as shown on the listing.", + "type": "string" + }, + "type": { + "description": "Role of the agent on the listing, as Zillow labels it.", + "type": "string" + } + }, + "type": "object" + }, + "zillow.PropertyArea": { + "properties": { + "text": { + "description": "Area together with its unit, as text.", + "type": "string" + }, + "unit": { + "description": "Unit of `value`, such as `sqft` or `acres`.", + "type": "string" + }, + "value": { + "description": "Area as a number, in the unit given by `unit`.", + "type": "number" + } + }, + "type": "object" + }, + "zillow.PropertyFact": { + "properties": { + "key": { + "description": "Name of the fact in snake case, such as `year_built`.", + "type": "string" + }, + "label": { + "description": "Readable label of the fact.", + "type": "string" + }, + "value": { + "description": "Value of the fact, as text.", + "type": "string" + } + }, + "type": "object" + }, + "zillow.PropertyFacts": { + "properties": { + "accessibility_features": { + "description": "Accessibility features of the home.", + "items": { + "type": "string" + }, + "type": "array" + }, + "additional": { + "description": "Further facts Zillow lists that have no dedicated field here, one entry per fact.", + "items": { + "$ref": "#/definitions/zillow.PropertyFact" + }, + "type": "array" + }, + "appliances": { + "description": "Appliances included with the home.", + "items": { + "type": "string" + }, + "type": "array" + }, + "architectural_style": { + "description": "Architectural style of the home.", + "type": "string" + }, + "basement": { + "description": "Description of the home's basement.", + "type": "string" + }, + "bathrooms": { + "description": "Total number of bathrooms.", + "type": "number" + }, + "bathrooms_full": { + "description": "Number of full bathrooms.", + "type": "integer" + }, + "bathrooms_half": { + "description": "Number of half bathrooms.", + "type": "integer" + }, + "bathrooms_one_quarter": { + "description": "Number of one-quarter bathrooms.", + "type": "integer" + }, + "bathrooms_three_quarter": { + "description": "Number of three-quarter bathrooms.", + "type": "integer" + }, + "bedrooms": { + "description": "Number of bedrooms.", + "type": "number" + }, + "builder_model": { + "description": "Builder's model name of the home.", + "type": "string" + }, + "builder_name": { + "description": "Name of the home's builder.", + "type": "string" + }, + "community_features": { + "description": "Features of the community the home is in.", + "items": { + "type": "string" + }, + "type": "array" + }, + "construction_materials": { + "description": "Materials the home is built from.", + "items": { + "type": "string" + }, + "type": "array" + }, + "cooling": { + "description": "Cooling systems of the home.", + "items": { + "type": "string" + }, + "type": "array" + }, + "exterior_features": { + "description": "Exterior features of the home.", + "items": { + "type": "string" + }, + "type": "array" + }, + "fireplace_features": { + "description": "Fireplace features of the home.", + "items": { + "type": "string" + }, + "type": "array" + }, + "flooring": { + "description": "Flooring types in the home.", + "items": { + "type": "string" + }, + "type": "array" + }, + "foundation_details": { + "description": "Foundation details of the home.", + "items": { + "type": "string" + }, + "type": "array" + }, + "garage_spaces": { + "description": "Number of garage parking spaces.", + "type": "number" + }, + "has_fireplace": { + "description": "Whether the home has a fireplace.", + "type": "boolean" + }, + "heating": { + "description": "Heating systems of the home.", + "items": { + "type": "string" + }, + "type": "array" + }, + "hoa_fee": { + "description": "Homeowners association fee, as text shown by Zillow.", + "type": "string" + }, + "home_type": { + "description": "Property type of the home, as Zillow labels it.", + "type": "string" + }, + "laundry_features": { + "description": "Laundry features of the home.", + "items": { + "type": "string" + }, + "type": "array" + }, + "levels": { + "description": "Floor levels of the home.", + "items": { + "type": "string" + }, + "type": "array" + }, + "living_area": { + "allOf": [ + { + "$ref": "#/definitions/zillow.PropertyArea" + } + ], + "description": "Interior living area of the home." + }, + "lot_size": { + "allOf": [ + { + "$ref": "#/definitions/zillow.PropertyArea" + } + ], + "description": "Lot size of the property." + }, + "lot_size_dimensions": { + "description": "Lot dimensions, as text.", + "type": "string" + }, + "parcel_number": { + "description": "Assessor parcel number of the property.", + "type": "string" + }, + "parking_capacity": { + "description": "Total number of parking spaces.", + "type": "integer" + }, + "parking_features": { + "description": "Parking features of the home.", + "items": { + "type": "string" + }, + "type": "array" + }, + "patio_and_porch_features": { + "description": "Patio and porch features of the home.", + "items": { + "type": "string" + }, + "type": "array" + }, + "pool_features": { + "description": "Pool features of the property.", + "items": { + "type": "string" + }, + "type": "array" + }, + "property_sub_type": { + "description": "Property subtypes of the home, as Zillow labels them.", + "items": { + "type": "string" + }, + "type": "array" + }, + "roof": { + "description": "Roof type or material.", + "type": "string" + }, + "rooms": { + "description": "Room types listed for the home.", + "items": { + "type": "string" + }, + "type": "array" + }, + "security_features": { + "description": "Security features of the home.", + "items": { + "type": "string" + }, + "type": "array" + }, + "sewer": { + "description": "Sewer arrangements of the property.", + "items": { + "type": "string" + }, + "type": "array" + }, + "spa_features": { + "description": "Spa features of the property.", + "items": { + "type": "string" + }, + "type": "array" + }, + "stories": { + "description": "Number of stories in the building.", + "type": "number" + }, + "structure_type": { + "description": "Structure type of the home.", + "type": "string" + }, + "tax_annual_amount": { + "description": "Annual property tax amount.", + "type": "number" + }, + "tax_assessed_value": { + "description": "Assessed value of the property for tax purposes.", + "type": "number" + }, + "utilities": { + "description": "Utilities available to or included with the home.", + "items": { + "type": "string" + }, + "type": "array" + }, + "view": { + "description": "Views the property has.", + "items": { + "type": "string" + }, + "type": "array" + }, + "water_source": { + "description": "Water source of the property.", + "items": { + "type": "string" + }, + "type": "array" + }, + "waterfront_features": { + "description": "Waterfront features of the property.", + "items": { + "type": "string" + }, + "type": "array" + }, + "year_built": { + "description": "Year the home was built.", + "type": "integer" + }, + "zoning": { + "description": "Zoning designation of the property.", + "type": "string" + } + }, + "type": "object" + }, + "zillow.PropertyHistory": { + "properties": { + "price": { + "description": "Price history of the property, one entry per event.", + "items": { + "$ref": "#/definitions/zillow.PropertyPriceHistoryEntry" + }, + "type": "array" + }, + "tax": { + "description": "Property tax history, one entry per tax year.", + "items": { + "$ref": "#/definitions/zillow.PropertyTaxHistoryEntry" + }, + "type": "array" + } + }, + "type": "object" + }, + "zillow.PropertyListing": { + "properties": { + "agent_name": { + "description": "Name of the listing agent.", + "type": "string" + }, + "agents": { + "description": "Agents named on the listing.", + "items": { + "$ref": "#/definitions/zillow.PropertyAgent" + }, + "type": "array" + }, + "attribution_text": { + "description": "Attribution or disclaimer text Zillow shows for the listing source.", + "type": "string" + }, + "broker_name": { + "description": "Name of the brokerage that holds the listing.", + "type": "string" + }, + "broker_phone": { + "description": "Phone number of the brokerage, as shown on the listing.", + "type": "string" + }, + "date_posted": { + "description": "Date the listing was posted.", + "type": "string" + }, + "date_updated": { + "description": "Date the listing was last updated.", + "type": "string" + }, + "days_on_zillow": { + "description": "Number of days the listing has been on Zillow.", + "type": "integer" + }, + "listing_id": { + "description": "Identifier of the listing, as Zillow returns it.", + "type": "string" + }, + "mls_id": { + "description": "MLS number of the listing.", + "type": "string" + }, + "open_houses": { + "description": "Scheduled open houses for the listing.", + "items": { + "$ref": "#/definitions/zillow.PropertyOpenHouse" + }, + "type": "array" + }, + "provider": { + "description": "Name of the provider that supplied the listing, as Zillow gives it.", + "type": "string" + }, + "provider_listing_id": { + "description": "Listing id assigned by the listing provider.", + "type": "string" + }, + "source": { + "description": "Source of the listing, such as the MLS name, as Zillow gives it.", + "type": "string" + }, + "status": { + "description": "Listing status, as Zillow labels it, such as `FOR_SALE`.", + "type": "string" + }, + "sub_types": { + "description": "Listing subtypes that apply to the listing, such as `is_FSBA`.", + "items": { + "type": "string" + }, + "type": "array" + }, + "time_on_zillow": { + "description": "How long the listing has been on Zillow, as text such as `9 days`.", + "type": "string" + }, + "type": { + "description": "Listing type, as Zillow labels it.", + "type": "string" + } + }, + "type": "object" + }, + "zillow.PropertyMedia": { + "properties": { + "has_3d_model": { + "description": "Whether the listing has a 3D tour model.", + "type": "boolean" + }, + "has_video": { + "description": "Whether the listing has a video.", + "type": "boolean" + }, + "photo_count": { + "description": "Number of photos on the listing.", + "type": "integer" + }, + "photos": { + "description": "Photos of the listing with their sizes.", + "items": { + "$ref": "#/definitions/zillow.PropertyPhoto" + }, + "type": "array" + }, + "primary_image": { + "description": "URL of the main listing photo.", + "type": "string" + }, + "video_url": { + "description": "URL of the listing video.", + "type": "string" + }, + "virtual_tour_url": { + "description": "URL of the virtual tour of the property.", + "type": "string" + } + }, + "type": "object" + }, + "zillow.PropertyNearby": { + "properties": { + "address": { + "description": "Address of the nearby home.", + "type": "string" + }, + "baths": { + "description": "Number of bathrooms in the nearby home.", + "type": "number" + }, + "beds": { + "description": "Number of bedrooms in the nearby home.", + "type": "number" + }, + "home_status": { + "description": "Listing status of the nearby home, as Zillow labels it.", + "type": "string" + }, + "living_area": { + "description": "Interior living area of the nearby home.", + "type": "number" + }, + "price": { + "description": "Price of the nearby home, as a number.", + "type": "number" + }, + "price_text": { + "description": "Price of the nearby home, as text shown by Zillow.", + "type": "string" + }, + "url": { + "description": "Zillow page URL of the nearby home.", + "type": "string" + }, + "zpid": { + "description": "Zillow property id of the nearby home. Use it with the property endpoint.", + "type": "string" + } + }, + "type": "object" + }, + "zillow.PropertyOpenHouse": { + "properties": { + "end_time": { + "description": "End time of the open house.", + "type": "string" + }, + "start_time": { + "description": "Start time of the open house.", + "type": "string" + }, + "text": { + "description": "Open house time as Zillow shows it, for example `Sun 1-4 PM`.", + "type": "string" + } + }, + "type": "object" + }, + "zillow.PropertyPhoto": { + "properties": { + "height": { + "description": "Photo height in pixels.", + "type": "integer" + }, + "source": { + "description": "Source or caption of the photo, as Zillow gives it.", + "type": "string" + }, + "url": { + "description": "URL of the photo.", + "type": "string" + }, + "width": { + "description": "Photo width in pixels.", + "type": "integer" + } + }, + "type": "object" + }, + "zillow.PropertyPriceHistoryEntry": { + "properties": { + "buyer_agent": { + "description": "Name of the buyer's agent for the event.", + "type": "string" + }, + "change": { + "description": "Price change at this event, as Zillow reports it.", + "type": "number" + }, + "date": { + "description": "Date of the price event.", + "type": "string" + }, + "event": { + "description": "Kind of price event, such as `Listed for sale`.", + "type": "string" + }, + "price": { + "description": "Price at this event, as a number.", + "type": "number" + }, + "price_text": { + "description": "Price at this event, as text shown by Zillow.", + "type": "string" + }, + "seller_agent": { + "description": "Name of the seller's agent for the event.", + "type": "string" + }, + "source": { + "description": "Data source that reported the event, such as an MLS name.", + "type": "string" + }, + "time": { + "description": "Time of the price event, as the numeric timestamp Zillow gives.", + "type": "integer" + } + }, + "type": "object" + }, + "zillow.PropertyPricing": { + "properties": { + "currency": { + "description": "Currency of the price, as Zillow shows it.", + "type": "string" + }, + "estimated_monthly_payment": { + "description": "Estimated monthly mortgage payment for the property.", + "type": "number" + }, + "monthly_hoa_fee": { + "description": "Monthly homeowners association fee.", + "type": "number" + }, + "price": { + "description": "Listing price, as a number.", + "type": "number" + }, + "price_per_square_foot": { + "description": "Listing price per square foot.", + "type": "number" + }, + "price_text": { + "description": "Listing price as text shown by Zillow.", + "type": "string" + }, + "property_tax_rate": { + "description": "Property tax rate, as Zillow reports it.", + "type": "number" + }, + "rent_zestimate": { + "description": "Zillow's estimated monthly rent for the property (Rent Zestimate).", + "type": "number" + }, + "zestimate": { + "description": "Zillow's estimated market value of the property (Zestimate).", + "type": "number" + } + }, + "type": "object" + }, + "zillow.PropertyResponse": { + "properties": { + "address": { + "description": "Full address of the property.", + "type": "string" + }, + "address_parts": { + "allOf": [ + { + "$ref": "#/definitions/zillow.PropertyAddressParts" + } + ], + "description": "Address of the property split into street, city, state, ZIP code and similar parts." + }, + "baths": { + "description": "Number of bathrooms.", + "type": "number" + }, + "beds": { + "description": "Number of bedrooms.", + "type": "number" + }, + "broker_name": { + "description": "Name of the brokerage that holds the listing.", + "type": "string" + }, + "currency": { + "description": "Currency of the price, as Zillow shows it.", + "type": "string" + }, + "days_on_zillow": { + "description": "Number of days the listing has been on Zillow.", + "type": "integer" + }, + "description": { + "description": "Listing description text.", + "type": "string" + }, + "detail_text": { + "description": "Short detail text Zillow shows with the listing.", + "type": "string" + }, + "facts": { + "allOf": [ + { + "$ref": "#/definitions/zillow.PropertyFacts" + } + ], + "description": "Structured facts about the home, such as size, rooms, parking, heating and tax." + }, + "has_3d_model": { + "description": "Whether the listing has a 3D tour model.", + "type": "boolean" + }, + "has_video": { + "description": "Whether the listing has a video.", + "type": "boolean" + }, + "history": { + "allOf": [ + { + "$ref": "#/definitions/zillow.PropertyHistory" + } + ], + "description": "Price and tax history of the property." + }, + "home_status": { + "description": "Listing status in Zillow's terms, such as `FOR_SALE` or `FOR_RENT`.", + "type": "string" + }, + "home_type": { + "description": "Property type, as Zillow labels it, such as `SINGLE_FAMILY`.", + "type": "string" + }, + "image": { + "description": "URL of the main listing photo.", + "type": "string" + }, + "is_showcase": { + "description": "Whether Zillow shows the listing as a showcase listing.", + "type": "boolean" + }, + "latitude": { + "description": "Latitude of the property, in decimal degrees.", + "type": "number" + }, + "listing": { + "allOf": [ + { + "$ref": "#/definitions/zillow.PropertyListing" + } + ], + "description": "Listing details: identifiers, source, broker, agents, dates and open houses." + }, + "listing_sub_type": { + "description": "Listing subtypes that apply to the listing, such as `is_FSBA`.", + "items": { + "type": "string" + }, + "type": "array" + }, + "living_area": { + "description": "Interior living area in square feet.", + "type": "number" + }, + "longitude": { + "description": "Longitude of the property, in decimal degrees.", + "type": "number" + }, + "lot_area": { + "description": "Lot size, in the unit given by `lot_area_unit`.", + "type": "number" + }, + "lot_area_unit": { + "description": "Unit of `lot_area`, as Zillow gives it.", + "type": "string" + }, + "media": { + "allOf": [ + { + "$ref": "#/definitions/zillow.PropertyMedia" + } + ], + "description": "Photos, video and tour links of the listing." + }, + "nearby": { + "description": "Compact summaries of nearby homes.", + "items": { + "$ref": "#/definitions/zillow.PropertyNearby" + }, + "type": "array" + }, + "photos": { + "description": "URLs of the listing photos.", + "items": { + "type": "string" + }, + "type": "array" + }, + "price": { + "description": "Listing price, as a number. The text Zillow shows is in `price_text`.", + "type": "number" + }, + "price_text": { + "description": "Listing price as text shown by Zillow, such as `$1,000,000` or `Contact Landlord`.", + "type": "string" + }, + "pricing": { + "allOf": [ + { + "$ref": "#/definitions/zillow.PropertyPricing" + } + ], + "description": "Price, estimates, fees and monthly payment of the property." + }, + "rent_zestimate": { + "description": "Zillow's estimated monthly rent for the home (Rent Zestimate).", + "type": "number" + }, + "schools": { + "description": "Schools assigned to or near the property.", + "items": { + "$ref": "#/definitions/zillow.PropertySchool" + }, + "type": "array" + }, + "status_text": { + "description": "Status label shown on the listing, such as `House for sale`.", + "type": "string" + }, + "url": { + "description": "Zillow page URL of the listing.", + "type": "string" + }, + "zestimate": { + "description": "Zillow's estimated market value of the home (Zestimate).", + "type": "number" + }, + "zpid": { + "description": "Zillow property id. Use it with the property endpoint. Rental building rows carry a `latitude--longitude` identifier instead.", + "example": "12345678", + "type": "string" + } + }, + "type": "object" + }, + "zillow.PropertySchool": { + "properties": { + "assigned": { + "description": "Whether the school is assigned to the property's address.", + "type": "boolean" + }, + "distance": { + "description": "Distance from the property to the school, as Zillow reports it.", + "type": "number" + }, + "district": { + "description": "Name of the school district.", + "type": "string" + }, + "grades": { + "description": "Grades the school serves, such as `K-5`.", + "type": "string" + }, + "id": { + "description": "Identifier of the school, as Zillow returns it.", + "type": "string" + }, + "level": { + "description": "School level, such as `Elementary`.", + "type": "string" + }, + "link": { + "description": "Zillow page URL of the school.", + "type": "string" + }, + "name": { + "description": "Name of the school.", + "type": "string" + }, + "rating": { + "description": "School rating, as Zillow shows it.", + "type": "number" + }, + "type": { + "description": "School type, such as `Public`.", + "type": "string" + } + }, + "type": "object" + }, + "zillow.PropertyTaxHistoryEntry": { + "properties": { + "tax_increase": { + "description": "Rate of increase in tax paid, as Zillow reports it.", + "type": "number" + }, + "tax_paid": { + "description": "Property tax paid for the year.", + "type": "number" + }, + "time": { + "description": "Time of the tax record, as the numeric timestamp Zillow gives.", + "type": "integer" + }, + "value": { + "description": "Assessed value of the property for the year.", + "type": "number" + }, + "value_increase": { + "description": "Rate of increase in assessed value, as Zillow reports it.", + "type": "number" + }, + "year": { + "description": "Tax year of the record.", + "type": "integer" + } + }, + "type": "object" + }, + "zillow.RentalUnit": { + "properties": { + "beds": { + "description": "Number of bedrooms of this unit tier. `0` means a studio.", + "example": 1, + "type": "number" + }, + "price": { + "description": "Starting monthly rent of this unit tier.", + "example": 2657, + "type": "number" + }, + "price_text": { + "description": "Starting rent of this unit tier as shown by Zillow, such as `$2,657+`.", + "example": "$2,657+", + "type": "string" + } + }, + "type": "object" + }, + "zillow.SearchItem": { + "properties": { + "address": { + "description": "Full address of the property.", + "type": "string" + }, + "availability_count": { + "description": "Number of units currently available in the rental building.", + "example": 6, + "type": "integer" + }, + "baths": { + "description": "Number of bathrooms.", + "type": "number" + }, + "beds": { + "description": "Number of bedrooms.", + "type": "number" + }, + "broker_name": { + "description": "Name of the brokerage that holds the listing.", + "type": "string" + }, + "building_name": { + "description": "Name of the rental building, such as an apartment community.", + "example": "The Pointe at Warner Center", + "type": "string" + }, + "currency": { + "description": "Currency of the price, as Zillow shows it.", + "type": "string" + }, + "days_on_zillow": { + "description": "Number of days the listing has been on Zillow.", + "type": "integer" + }, + "detail_text": { + "description": "Short detail text Zillow shows with the listing.", + "type": "string" + }, + "has_3d_model": { + "description": "Whether the listing has a 3D tour model.", + "type": "boolean" + }, + "has_video": { + "description": "Whether the listing has a video.", + "type": "boolean" + }, + "home_status": { + "description": "Listing status in Zillow's terms, such as `FOR_SALE` or `FOR_RENT`.", + "type": "string" + }, + "home_type": { + "description": "Property type, as Zillow labels it, such as `SINGLE_FAMILY`.", + "type": "string" + }, + "image": { + "description": "URL of the main listing photo.", + "type": "string" + }, + "is_building": { + "description": "Whether the row is a rental building rather than a single listing.", + "example": true, + "type": "boolean" + }, + "is_showcase": { + "description": "Whether Zillow shows the listing as a showcase listing.", + "type": "boolean" + }, + "latitude": { + "description": "Latitude of the property, in decimal degrees.", + "type": "number" + }, + "listing_sub_type": { + "description": "Listing subtypes that apply to the listing, such as `is_FSBA`.", + "items": { + "type": "string" + }, + "type": "array" + }, + "living_area": { + "description": "Interior living area in square feet.", + "type": "number" + }, + "longitude": { + "description": "Longitude of the property, in decimal degrees.", + "type": "number" + }, + "lot_area": { + "description": "Lot size, in the unit given by `lot_area_unit`.", + "type": "number" + }, + "lot_area_unit": { + "description": "Unit of `lot_area`, as Zillow gives it.", + "type": "string" + }, + "photos": { + "description": "URLs of the listing photos.", + "items": { + "type": "string" + }, + "type": "array" + }, + "price": { + "description": "Listing price, as a number. The text Zillow shows is in `price_text`.", + "type": "number" + }, + "price_max": { + "description": "Highest monthly rent in the rental building.", + "example": 3157, + "type": "number" + }, + "price_text": { + "description": "Listing price as text shown by Zillow, such as `$1,000,000` or `Contact Landlord`.", + "type": "string" + }, + "rent_zestimate": { + "description": "Zillow's estimated monthly rent for the home (Rent Zestimate).", + "type": "number" + }, + "status_text": { + "description": "Status label shown on the listing, such as `House for sale`.", + "type": "string" + }, + "units": { + "description": "Unit tiers of the rental building, one per bedroom count, with starting rent.", + "items": { + "$ref": "#/definitions/zillow.RentalUnit" + }, + "type": "array" + }, + "url": { + "description": "Zillow page URL of the listing.", + "type": "string" + }, + "zestimate": { + "description": "Zillow's estimated market value of the home (Zestimate).", + "type": "number" + }, + "zpid": { + "description": "Zillow property id. Use it with the property endpoint. Rental building rows carry a `latitude--longitude` identifier instead.", + "example": "12345678", + "type": "string" + } + }, + "type": "object" + }, + "zillow.SearchResponse": { + "properties": { + "location": { + "description": "Location that was searched.", + "example": "San Francisco, CA", + "type": "string" + }, + "page": { + "description": "Page number returned.", + "example": 1, + "type": "integer" + }, + "results": { + "description": "Listings and rental buildings matching the search.", + "items": { + "$ref": "#/definitions/zillow.SearchItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "zomato.CitiesResponse": { + "properties": { + "cities": { + "items": { + "$ref": "#/definitions/zomato.City" + }, + "type": "array" + }, + "total": { + "type": "integer" + } + }, + "type": "object" + }, + "zomato.City": { + "properties": { + "name": { + "description": "Name is Zomato's own display name for the city (e.g. \"Bengaluru\",\n\"Delhi NCR\") -- not always the same word as Slug.", + "example": "Mumbai", + "type": "string" + }, + "slug": { + "description": "Slug is the public Zomato city slug -- the value the `city` param on\nzomato-search/zomato-collections and the first path segment of every\nrestaurant/collection URL this family returns use. Not always a\nlower-cased version of Name -- e.g. \"Delhi NCR\" is slug \"ncr\".", + "example": "mumbai", + "type": "string" + }, + "url": { + "description": "URL is the city's canonical public Zomato page.", + "example": "https://www.zomato.com/mumbai", + "type": "string" + } + }, + "type": "object" + }, + "zomato.CollectionResponse": { + "properties": { + "description": { + "type": "string" + }, + "name": { + "type": "string" + }, + "num_places": { + "type": "string" + }, + "restaurants": { + "items": { + "$ref": "#/definitions/zomato.CollectionRestaurant" + }, + "type": "array" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "zomato.CollectionRestaurant": { + "properties": { + "cuisines": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "locality": { + "type": "string" + }, + "name": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "rating_count": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "zomato.CollectionSummary": { + "properties": { + "image_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "num_places": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "zomato.CollectionsResponse": { + "properties": { + "city": { + "type": "string" + }, + "collections": { + "items": { + "$ref": "#/definitions/zomato.CollectionSummary" + }, + "type": "array" + } + }, + "type": "object" + }, + "zomato.MenuCategory": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/zomato.MenuItem" + }, + "type": "array" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "zomato.MenuItem": { + "properties": { + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "is_veg": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "price": { + "type": "number" + } + }, + "type": "object" + }, + "zomato.MenuResponse": { + "properties": { + "categories": { + "items": { + "$ref": "#/definitions/zomato.MenuCategory" + }, + "type": "array" + }, + "restaurant": { + "$ref": "#/definitions/zomato.RestaurantResponse" + } + }, + "type": "object" + }, + "zomato.OpeningHours": { + "properties": { + "days": { + "type": "string" + }, + "timing": { + "type": "string" + } + }, + "type": "object" + }, + "zomato.RestaurantCard": { + "properties": { + "address": { + "type": "string" + }, + "cost_for_two": { + "type": "string" + }, + "cuisines": { + "items": { + "type": "string" + }, + "type": "array" + }, + "delivery_time": { + "description": "DeliveryTime is Zomato's own delivery ETA (e.g. \"38 min\"), present\non results that carry its delivery-order metadata. Both search\nsources carry it but in different display shapes -- the city-wide\nlisting serves a bare \"38 min\", keyword search a prefixed\n\"Delivery in 38 min\" -- so it is normalized to the bare form (see\nnormalizeDeliveryTime). Absent for a restaurant Zomato is not\ncurrently delivering from.", + "type": "string" + }, + "distance": { + "description": "Distance is Zomato's own display distance from the resolved city\nlocation to the restaurant (e.g. \"1.2 km\"). Present on both search\npaths.", + "type": "string" + }, + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "is_promoted": { + "description": "IsPromoted reports whether Zomato itself labels this a promoted\n(sponsored) placement rather than an organic result.", + "type": "boolean" + }, + "is_serviceable": { + "description": "IsServiceable reports whether Zomato will currently deliver here\nfrom the resolved location. A pointer so a source that does not\ncarry the flag omits it rather than reporting a false \"not\nserviceable\".", + "type": "boolean" + }, + "locality": { + "type": "string" + }, + "name": { + "type": "string" + }, + "offers": { + "description": "Offers carries Zomato's own headline offer badges for this\nrestaurant (e.g. \"50% OFF\", \"₹100 OFF\"). Only the city-wide listing\ncarries them -- keyword search results do not.", + "items": { + "type": "string" + }, + "type": "array" + }, + "rating": { + "type": "number" + }, + "rating_count": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "zomato.RestaurantDelivery": { + "properties": { + "has_online_ordering": { + "type": "boolean" + }, + "is_serviceable": { + "type": "boolean" + }, + "min_order_amount": { + "type": "number" + }, + "pickup_available": { + "type": "boolean" + }, + "time": { + "type": "string" + } + }, + "type": "object" + }, + "zomato.RestaurantRatings": { + "properties": { + "delivery": { + "$ref": "#/definitions/zomato.SplitRating" + }, + "dining": { + "$ref": "#/definitions/zomato.SplitRating" + } + }, + "type": "object" + }, + "zomato.RestaurantResponse": { + "properties": { + "address": { + "type": "string" + }, + "city": { + "description": "City/Zipcode/Country/Latitude/Longitude come from the same contact\nsection Address and Locality already do -- Zipcode is frequently\nblank or \"0\" upstream and is omitted when it is.", + "type": "string" + }, + "country": { + "type": "string" + }, + "cuisines": { + "items": { + "type": "string" + }, + "type": "array" + }, + "delivery": { + "allOf": [ + { + "$ref": "#/definitions/zomato.RestaurantDelivery" + } + ], + "description": "Delivery is present only when Zomato carries delivery metadata for\nthis restaurant." + }, + "id": { + "type": "string" + }, + "image_url": { + "type": "string" + }, + "is_dark_kitchen": { + "type": "boolean" + }, + "is_delivery_only": { + "description": "IsDeliveryOnly marks a kitchen Zomato lists for delivery only (no\ndining), IsDarkKitchen a delivery-only kitchen with no storefront at\nall, and the two closed flags Zomato's own temporary/permanent\nclosure states.", + "type": "boolean" + }, + "is_permanently_closed": { + "type": "boolean" + }, + "is_temporarily_closed": { + "type": "boolean" + }, + "latitude": { + "type": "number" + }, + "locality": { + "type": "string" + }, + "longitude": { + "type": "number" + }, + "name": { + "type": "string" + }, + "opening_hours": { + "description": "OpeningHours is the full weekly table behind the single-line Timing\nstring above.", + "items": { + "$ref": "#/definitions/zomato.OpeningHours" + }, + "type": "array" + }, + "phone": { + "type": "string" + }, + "rating": { + "type": "number" + }, + "rating_count": { + "type": "string" + }, + "ratings": { + "allOf": [ + { + "$ref": "#/definitions/zomato.RestaurantRatings" + } + ], + "description": "Ratings splits the single headline Rating above into Zomato's own\nseparately-aggregated dining and delivery figures." + }, + "status_text": { + "type": "string" + }, + "timing": { + "type": "string" + }, + "url": { + "type": "string" + }, + "zipcode": { + "type": "string" + } + }, + "type": "object" + }, + "zomato.SearchResponse": { + "properties": { + "city": { + "type": "string" + }, + "has_more": { + "type": "boolean" + }, + "next_cursor": { + "type": "string" + }, + "query": { + "type": "string" + }, + "restaurants": { + "items": { + "$ref": "#/definitions/zomato.RestaurantCard" + }, + "type": "array" + }, + "total_results": { + "type": "integer" + } + }, + "type": "object" + }, + "zomato.SplitRating": { + "properties": { + "rating": { + "type": "number" + }, + "review_count": { + "type": "string" + } + }, + "type": "object" + }, + "zomato.citiesResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zomato.CitiesResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "zomato.collectionResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zomato.CollectionResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "zomato.collectionsResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zomato.CollectionsResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "zomato.menuResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zomato.MenuResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "zomato.restaurantResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zomato.RestaurantResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + }, + "zomato.searchResponseDoc": { + "properties": { + "code": { + "description": "Code is the HTTP status code or a custom code used to indicate the result of the request\n@example 200", + "type": "integer" + }, + "data": { + "$ref": "#/definitions/zomato.SearchResponse" + }, + "msg": { + "description": "Msg is the message that describes the result of the request\n@example \"Request successful\"" + } + }, + "type": "object" + } + }, + "host": "api.crawlora.net", + "info": { + "contact": { + "email": "support@crawlora.net", + "name": "API Support", + "url": "https://crawlora.net" + }, + "description": "Crawlora is a hosted web-data and SERP API: call documented REST endpoints and get normalized JSON instead of HTML to parse — across search/SERP, maps and local, e-commerce, app stores, social, media and finance. One API key; Crawlora runs the proxy rotation, headless browsers and parsing behind the scenes. Billed pay-on-success: charged only on a successful 2xx response, 1-10 credits per call, with a free tier of 2,000 credits per month and no card. A hosted MCP server (mcp.crawlora.net/mcp) exposes the same catalog as agent tools. Search endpoints accept `q` as a universal alias for whichever search-term parameter they document (`query`, `term`, `keyword`, or Amazon's `k`), so one parameter name works across the whole catalog; an explicitly supplied documented name always wins.", + "license": { "name": "Crawlora Terms of Service", "url": "https://crawlora.net/terms" }, - "termsOfService": "https://crawlora.net/terms", - "title": "Crawlora API", - "version": "1.2", - "x-logo": { - "altText": "Crawlora", - "backgroundColor": "#FFFFFF", - "url": "https://raw.githubusercontent.com/Crawlora-org/crawlora-mcp/main/assets/logo-400x400.png" - } - }, - "paths": { - "/1stdibs/categories": { + "termsOfService": "https://crawlora.net/terms", + "title": "Crawlora API", + "version": "1.2", + "x-logo": { + "altText": "Crawlora", + "backgroundColor": "#FFFFFF", + "url": "https://raw.githubusercontent.com/Crawlora-org/crawlora-mcp/main/assets/logo-400x400.png" + } + }, + "paths": { + "/1stdibs/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the live handbags category directory, sort keys, price presets, and filter values discovered from 1stDibs. Returned category slugs are valid for firstdibs-search.", + "operationId": "firstdibs-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/firstdibs.categoriesDoc" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List 1stDibs categories and filters", + "tags": [ + "1stDibs" + ] + } + }, + "/1stdibs/designers": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Lists the designer filter values found on a 1stDibs category page, with a `count` and, for each designer, its `name`, `slug` and `url`. `category` is optional and comes from `firstdibs-categories`. Each `slug` can be used as the designer filter in `firstdibs-search`.", + "operationId": "firstdibs-designers", + "parameters": [ + { + "description": "Category slug from firstdibs-categories", + "in": "query", + "name": "category", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/firstdibs.designersDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List 1stDibs designers", + "tags": [ + "1stDibs" + ] + } + }, + "/1stdibs/product": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the details of one 1stDibs product, identified by its product `url`: `name`, `brand`, `category`, `description`, `images`, `price` with `currency`, and the `in_stock` flag. The price is in USD and is present only when 1stDibs shows one.", + "operationId": "firstdibs-product", + "parameters": [ + { + "description": "1stDibs product URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.1stdibs.com/jewelry/necklaces/chain-necklaces/vintage-gucci-necklace-double-g-gucci-logo-sterling-silver-pendant/id-j_29181182/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/firstdibs.productDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a 1stDibs product", + "tags": [ + "1stDibs" + ] + } + }, + "/1stdibs/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches or browses 1stDibs handbags and purses with category, designer, price, sale, color, period, location, gender, origin, seller, and sort filters.", + "operationId": "firstdibs-search", + "parameters": [ + { + "description": "Free-text search", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Category slug from firstdibs-categories", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Designer slug from firstdibs-designers", + "in": "query", + "name": "designer", + "type": "string" + }, + { + "description": "Color value", + "in": "query", + "name": "color", + "type": "string" + }, + { + "description": "Period value", + "in": "query", + "name": "period", + "type": "string" + }, + { + "description": "Item location", + "in": "query", + "name": "location", + "type": "string" + }, + { + "description": "Gender value", + "in": "query", + "name": "gender", + "type": "string" + }, + { + "description": "Place-of-origin value", + "in": "query", + "name": "origin", + "type": "string" + }, + { + "description": "Price preset", + "enum": [ + "all price", + "[* TO 999]", + "[* TO 1999]", + "[* TO 4999]", + "[5000 TO *]" + ], + "in": "query", + "name": "price", + "type": "string" + }, + { + "description": "Minimum price", + "in": "query", + "name": "price_min", + "type": "number" + }, + { + "description": "Maximum price", + "in": "query", + "name": "price_max", + "type": "number" + }, + { + "description": "On-sale listings only", + "in": "query", + "name": "on_sale", + "type": "boolean" + }, + { + "description": "Listings with measurements", + "in": "query", + "name": "measurements", + "type": "boolean" + }, + { + "description": "Listings added this week", + "in": "query", + "name": "this_week", + "type": "boolean" + }, + { + "description": "Returnable items only", + "in": "query", + "name": "returnable", + "type": "boolean" + }, + { + "description": "Recognized seller listings only", + "in": "query", + "name": "recognized_seller", + "type": "boolean" + }, + { + "description": "Top seller listings only", + "in": "query", + "name": "top_seller", + "type": "boolean" + }, + { + "description": "Sort", + "enum": [ + "recommended", + "newest", + "price-high", + "price-low", + "popular" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": 1, + "description": "1-based page", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "default": 60, + "description": "Results per page", + "enum": [ + 60, + 120 + ], + "in": "query", + "name": "per_page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/firstdibs.searchDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search 1stDibs listings", + "tags": [ + "1stDibs" + ] + } + }, + "/7now/catalog": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one 7NOW store's browsable category list, a paginated item listing per catalog section (each with real per-item pricing, active promotions, calories, UPC and image), and a live active/out-of-stock inventory count for that store. store_id comes from GET /7now/stores; lat and lon are accepted but inert (store_id alone selects the store). The catalog is genuinely store-scoped, not a national price list. skip/limit page every item section uniformly (limit is capped at 50, defaults to 20).", + "operationId": "7now-catalog", + "parameters": [ + { + "description": "7NOW store id, from GET /7now/stores.", + "in": "query", + "name": "store_id", + "required": true, + "type": "string", + "x-example": "39226" + }, + { + "description": "Accepted but inert -- store_id alone selects the store; responses are byte-identical with any value or none. Forwarded upstream for fidelity with 7now.com's own client.", + "in": "query", + "name": "lat", + "type": "number", + "x-example": 40.747508 + }, + { + "description": "Accepted but inert -- see lat.", + "in": "query", + "name": "lon", + "type": "number", + "x-example": -73.989099 + }, + { + "description": "Pagination offset, applied uniformly to every catalog section. Defaults to 0.", + "in": "query", + "name": "skip", + "type": "integer", + "x-example": 0 + }, + { + "description": "Max items returned per catalog section, 1-50. Defaults to 20.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/sevennow.catalogResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get one 7NOW store's live product catalog", + "tags": [ + "7NOW" + ] + } + }, + "/7now/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Enumerates every value GET /7now/category accepts for a store, so callers do not have to pull the full catalog to discover them. 7NOW has two disjoint id spaces behind that one parameter: `departments` are the store's 10 permanent browsable departments (Fresh Food, Drinks, Snacks, Candy, Ice Cream, Beer & Seltzer, Tobacco, Grocery, Household, Personal Care), and `shelves` are the merchandising rows the homepage currently features (\"$2 Deals\", \"What's New\", \"Only At 7-Eleven\", seasonal ones). Both work as category_id. Shelves rotate with promotions and seasons, so re-read them rather than caching ids long-term. store_id comes from GET /7now/stores; lat and lon are accepted but inert (store_id alone selects the store).", + "operationId": "7now-categories", + "parameters": [ + { + "description": "7NOW store id, from GET /7now/stores.", + "in": "query", + "name": "store_id", + "required": true, + "type": "string", + "x-example": "39640" + }, + { + "description": "Accepted but inert -- store_id alone selects the store; responses are byte-identical with any value or none. Forwarded upstream for fidelity with 7now.com's own client.", + "in": "query", + "name": "lat", + "type": "number", + "x-example": 40.712775 + }, + { + "description": "Accepted but inert -- see lat.", + "in": "query", + "name": "lon", + "type": "number", + "x-example": -74.005973 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/sevennow.categoriesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List every category id one 7NOW store accepts", + "tags": [ + "7NOW" + ] + } + }, + "/7now/category": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one 7NOW store's top-level category broken into its real subcategory groups (e.g. Fresh Food -> Pizza, Wings & Chicken Bites, Subs & Sandwiches, ...), each with its own paginated, priced item list and live availability, plus a category-wide availability summary. Complements GET /7now/catalog, whose per-category section is a single flat list -- this is the same data organized the way 7now.com's own category page groups it. store_id comes from GET /7now/stores and category_id from GET /7now/categories -- which accepts both the store's permanent departments and the merchandising shelves its homepage features, since 7NOW uses one parameter for two id spaces. An invalid or empty category_id returns a normal 200 with an empty subcategories array, not an error.", + "operationId": "7now-category", + "parameters": [ + { + "description": "7NOW store id, from GET /7now/stores.", + "in": "query", + "name": "store_id", + "required": true, + "type": "string", + "x-example": "39226" + }, + { + "description": "Category id, from GET /7now/categories -- either a department or a merchandising shelf.", + "in": "query", + "name": "category_id", + "required": true, + "type": "string", + "x-example": "48423" + }, + { + "description": "Restrict to one subcategory group by exact name (from a prior call's subcategories[].name).", + "in": "query", + "name": "subcategory", + "type": "string", + "x-example": "Pizza" + }, + { + "description": "Pagination offset, applied uniformly to every subcategory group. Defaults to 0.", + "in": "query", + "name": "skip", + "type": "integer", + "x-example": 0 + }, + { + "description": "Max items returned per subcategory group, 1-50. Defaults to 20.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/sevennow.categoryResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Browse one 7NOW store's category by subcategory", + "tags": [ + "7NOW" + ] + } + }, + "/7now/combo": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Expands one bundle deal into its structure: each pick-from group's name, how many items the shopper picks from it, and every eligible item with live pricing and availability -- e.g. the \"$6.99 Pizza\" bundle returns one group, \"Eligible Whole Pizzas\", holding six priced pizzas. Also returns the bundle's shopper-facing headline and full legal terms. promo_id comes from GET /7now/combos' combos[].promo_id, and store_id from GET /7now/stores. The upstream also accepts a plain item-discount promotion id but answers one with unnamed groups -- for those, GET /7now/promotion's flat item list is the right endpoint. An unknown promo_id returns 404.", + "operationId": "7now-combo", + "parameters": [ + { + "description": "Promotion id, from GET /7now/combos' combos[].promo_id.", + "in": "query", + "name": "promo_id", + "required": true, + "type": "string", + "x-example": "6a849a8fa1df2409010c719f" + }, + { + "description": "7NOW store id, from GET /7now/stores.", + "in": "query", + "name": "store_id", + "required": true, + "type": "string", + "x-example": "39640" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/sevennow.comboResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get one 7NOW bundle deal's pick-from groups", + "tags": [ + "7NOW" + ] + } + }, + "/7now/combos": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Lists every bundle deal a store offers -- 7NOW's combo-builder products, where a fixed price buys one item from each of several groups (e.g. \"$6.99 Pizza\", \"Bone In Wing Combo\"). GET /7now/search surfaces a combo only when a query happens to match one, so this is the only way to enumerate a store's bundles. Each entry carries the promotion id behind it: pass it to GET /7now/combo for the actual pick-from groups, or to GET /7now/promotion for a flat list of every eligible item. store_id comes from GET /7now/stores; lat and lon are accepted but inert (store_id alone selects the store).", + "operationId": "7now-combos", + "parameters": [ + { + "description": "7NOW store id, from GET /7now/stores.", + "in": "query", + "name": "store_id", + "required": true, + "type": "string", + "x-example": "39640" + }, + { + "description": "Accepted but inert -- store_id alone selects the store; responses are byte-identical with any value or none. Forwarded upstream for fidelity with 7now.com's own client.", + "in": "query", + "name": "lat", + "type": "number", + "x-example": 40.712775 + }, + { + "description": "Accepted but inert -- see lat.", + "in": "query", + "name": "lon", + "type": "number", + "x-example": -74.005973 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/sevennow.combosResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List a 7NOW store's bundle deals", + "tags": [ + "7NOW" + ] + } + }, + "/7now/deals": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns every currently discounted item in a store, paginated, each with the promotion driving the discount -- its id, shopper-facing description (\"2 for $4\", \"On Sale $7\"), promotional price where the offer has a single-unit one, and run dates. A busy store carries several hundred; the response also reports a store-wide availability summary across all of them before paging. This is the store-wide offers listing: the per-category browse endpoints surface promotions only for the items they happen to return, and pulling them all otherwise means walking the entire catalog. Pass a promos[].id to GET /7now/promotion to see every item that same promotion covers. store_id comes from GET /7now/stores; lat and lon are accepted but inert (store_id alone selects the store).", + "operationId": "7now-deals", + "parameters": [ + { + "description": "7NOW store id, from GET /7now/stores.", + "in": "query", + "name": "store_id", + "required": true, + "type": "string", + "x-example": "39640" + }, + { + "description": "Accepted but inert -- store_id alone selects the store; responses are byte-identical with any value or none. Forwarded upstream for fidelity with 7now.com's own client.", + "in": "query", + "name": "lat", + "type": "number", + "x-example": 40.712775 + }, + { + "description": "Accepted but inert -- see lat.", + "in": "query", + "name": "lon", + "type": "number", + "x-example": -74.005973 + }, + { + "description": "Pagination offset. Defaults to 0.", + "in": "query", + "name": "skip", + "type": "integer", + "x-example": 0 + }, + { + "description": "Max items returned, 1-100. Defaults to 20.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/sevennow.dealsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List every discounted item in one 7NOW store", + "tags": [ + "7NOW" + ] + } + }, + "/7now/offers": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns every promotional campaign a store currently advertises -- the headline, body copy, legal terms and artwork behind offers like \"$6.99 Pizza\" or \"2/$5 Gatorade 28oz\". This is campaign-level and complements the item-level views: GET /7now/deals answers \"which items are discounted and why\", while this answers \"what is this store advertising, and on what terms\". The full legal terms are available nowhere else. Each campaign points somewhere: promo_ids[] feed GET /7now/promotion (or GET /7now/combo when the campaign advertises a bundle), while a category campaign instead carries target_id, a category_id GET /7now/category accepts. store_id comes from GET /7now/stores; lat and lon are accepted but inert (store_id alone selects the store).", + "operationId": "7now-offers", + "parameters": [ + { + "description": "7NOW store id, from GET /7now/stores.", + "in": "query", + "name": "store_id", + "required": true, + "type": "string", + "x-example": "39640" + }, + { + "description": "Accepted but inert -- store_id alone selects the store; responses are byte-identical with any value or none. Forwarded upstream for fidelity with 7now.com's own client.", + "in": "query", + "name": "lat", + "type": "number", + "x-example": 40.712775 + }, + { + "description": "Accepted but inert -- see lat.", + "in": "query", + "name": "lon", + "type": "number", + "x-example": -74.005973 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/sevennow.offersResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List a 7NOW store's advertised promotional campaigns", + "tags": [ + "7NOW" + ] + } + }, + "/7now/popular": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the trending search terms 7NOW shows in its own search box. Two axes select the index and both matter. vertical picks the catalogue: `convenience` and `restaurant` return different terms for the same store, and `global` is the genuinely national cross-vertical list. store_id (from GET /7now/stores) then narrows to that store's region within the vertical -- a New York store returns index NY_NE, a Florida store SE, and omitting it returns the vertical-wide list. The restaurant vertical is the exception: it ignores store_id entirely, returning identical terms for every store. The response echoes back both the vertical and the regional index the terms came from.", + "operationId": "7now-popular", + "parameters": [ + { + "description": "7NOW store id, from GET /7now/stores. Selects that store's regional index within the chosen vertical; omit for the vertical-wide list. Ignored by the restaurant vertical.", + "in": "query", + "name": "store_id", + "type": "string", + "x-example": "39226" + }, + { + "description": "Which trending index to read. One of: convenience, restaurant, global. Defaults to convenience.", + "enum": [ + "convenience", + "restaurant", + "global" + ], + "in": "query", + "name": "vertical", + "type": "string", + "x-example": "convenience" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/sevennow.popularResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get 7NOW trending search terms", + "tags": [ + "7NOW" + ] + } + }, + "/7now/product": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one product's complete reference record: description, the full nutrition panel (serving size, calories, fat, cholesterol, sodium, carbohydrates, protein, vitamins and allergen \"contains\" list), the declared ingredient list, the allergen statement, size and flavor variants, related products, and any attached promotions. product_id comes from GET /7now/search, /7now/catalog or /7now/category. This record is store-independent and deliberately carries no price, availability or stock -- use those three endpoints for per-store pricing and availability. An unknown product_id returns a 404.", + "operationId": "7now-product", + "parameters": [ + { + "description": "7NOW product id, from GET /7now/search, /7now/catalog or /7now/category.", + "in": "query", + "name": "product_id", + "required": true, + "type": "string", + "x-example": "178322-2-6-2" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/sevennow.productResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get one 7NOW product's full reference record", + "tags": [ + "7NOW" + ] + } + }, + "/7now/promotion": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Expands one promotion into every item it applies to in a store, plus the promotion's own offer type, terms, and run dates. GET /7now/deals reads discount-to-item (here is a discounted product, here is why); this reads it the other way round (here is an offer, here is everything it covers) -- e.g. a \"2 for $4\" tea promotion expands to all five flavours in it. promo_id comes from GET /7now/deals' items[].promos[].id, and store_id from GET /7now/stores. An unknown promo_id returns 404.", + "operationId": "7now-promotion", + "parameters": [ + { + "description": "Promotion id, from GET /7now/deals' items[].promos[].id.", + "in": "query", + "name": "promo_id", + "required": true, + "type": "string", + "x-example": "6a9746d488cc35e1bbff1584" + }, + { + "description": "7NOW store id, from GET /7now/stores.", + "in": "query", + "name": "store_id", + "required": true, + "type": "string", + "x-example": "39640" + }, + { + "description": "Pagination offset. Defaults to 0.", + "in": "query", + "name": "skip", + "type": "integer", + "x-example": 0 + }, + { + "description": "Max items returned, 1-100. Defaults to 20.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/sevennow.promotionResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List every item one 7NOW promotion covers", + "tags": [ + "7NOW" + ] + } + }, + "/7now/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one 7NOW store's keyword search results: matching products and combo deals with current pricing (list price, everyday sale price, and any further active promotion), live availability, and a sponsored-brand facet list relevant to the query. store_id comes from GET /7now/stores. A query matching nothing returns a normal 200 with an empty items array, not an error.", + "operationId": "7now-search", + "parameters": [ + { + "description": "7NOW store id, from GET /7now/stores.", + "in": "query", + "name": "store_id", + "required": true, + "type": "string", + "x-example": "39226" + }, + { + "description": "Keyword search term.", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "pizza" + }, + { + "description": "Pagination offset. Defaults to 0.", + "in": "query", + "name": "skip", + "type": "integer", + "x-example": 0 + }, + { + "description": "Max results returned, 1-50. Defaults to 20.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/sevennow.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search one 7NOW store's products", + "tags": [ + "7NOW" + ] + } + }, + "/7now/stores": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Resolves a free-text delivery address, street, city and state, or postal code to the nearest 7NOW-enabled 7-Eleven stores, nearest first. Each store carries its store_id, address, coordinates, straight-line distance in miles from the resolved address, the banner it trades under, its Nielsen DMA, and its per-day alcohol sale windows -- upstream's own encoding of the local law, which is why a day can hold more than one window (a New York store's Sunday runs 0000-0200 and 0800-2359). An empty alcohol_sale_hours means upstream publishes no windows for that store, which is not the same as it selling no alcohol. The response also carries the Uber H3 cell for the resolved address. Use store_id with GET /7now/catalog, /7now/categories, /7now/deals, /7now/offers or /7now/combos to browse that store. An address that cannot be geocoded, or one with no nearby 7NOW coverage, returns a 404.", + "operationId": "7now-stores", + "parameters": [ + { + "description": "Free-text delivery address, street, city and state, or postal code.", + "in": "query", + "name": "address", + "required": true, + "type": "string", + "x-example": "350 5th Ave, New York, NY" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/sevennow.storesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Find 7NOW delivery stores near an address", + "tags": [ + "7NOW" + ] + } + }, + "/7now/suggest": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns search-term completions for a partial query, e.g. \"chi\" -> \"chips ahoy\", \"chips\", \"chicken\". No store is required. q must be at least 3 characters -- shorter values return a typed invalid-param error, matching upstream's own enforced minimum. vertical selects which search index to complete against, and the indexes are materially different rather than variations on one list: for \"chi\", `convenience` answers \"chips ahoy, chips, chicken wings\" while `restaurant` answers \"chipotle, chinese food, chili\". `global` is a sparse cross-vertical index -- many prefixes legitimately return no suggestions there.", + "operationId": "7now-suggest", + "parameters": [ + { + "description": "Partial search term, at least 3 characters.", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "chi" + }, + { + "description": "Which search index to complete against. One of: convenience, restaurant, global. Defaults to convenience.", + "enum": [ + "convenience", + "restaurant", + "global" + ], + "in": "query", + "name": "vertical", + "type": "string", + "x-example": "convenience" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/sevennow.suggestResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get 7NOW search-term suggestions", + "tags": [ + "7NOW" + ] + } + }, + "/abcau/article": { + "get": { + "description": "Returns an ABC News Australia article by `url`, a canonical `abc.net.au` address in the form `/news///`: title, description, publication time, section, authors, image and the body `paragraphs`. Rolling live-blog posts, whose slug ends `-live-blog`, return an error instead of partial content.", + "operationId": "abcau-article", + "parameters": [ + { + "description": "Canonical ABC News Australia article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.abc.net.au/news/2026-09-24/example-article-slug/107189792" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get ABC News Australia article content", + "tags": [ + "ABC News Australia" + ] + } + }, + "/abcau/author": { + "get": { + "description": "Returns an ABC News Australia author profile from `url`, a canonical `https://www.abc.net.au/news//` address: name, `biography`, `image_url` and recent articles. Not every author has a headshot or biography, and wire or staff bylines often have neither.", + "operationId": "abcau-author", + "parameters": [ + { + "description": "Canonical ABC News Australia author URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.abc.net.au/news/jane-doe/12345" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.abcauAuthorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get an ABC News Australia author profile", + "tags": [ + "ABC News Australia" + ] + } + }, + "/abcau/headlines": { + "get": { + "description": "Returns current headlines for one ABC News Australia section. `section` is required and takes one of 15 slugs, including `justin`, `politics`, `rural`, `analysis-and-opinion` and `australia`. Each item has a title and URL, and may also carry a summary, author, publication time and image.", + "operationId": "abcau-headlines", + "parameters": [ + { + "description": "ABC News Australia section slug", + "enum": [ + "justin", + "world", + "politics", + "business", + "sport", + "health", + "entertainment", + "science", + "rural", + "analysis-and-opinion", + "indigenous", + "environment", + "backstory", + "lifestyle", + "australia" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "justin" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get ABC News Australia section headlines", + "tags": [ + "ABC News Australia" + ] + } + }, + "/abcau/news": { + "get": { + "description": "Returns the current ABC News Australia top stories, with no input needed. Each item has a title and canonical URL, and may also carry a summary, author, publication time and image.", + "operationId": "abcau-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get ABC News Australia top stories", + "tags": [ + "ABC News Australia" + ] + } + }, + "/abcau/sections": { + "get": { + "description": "Lists the 15 ABC News Australia section slugs accepted by `abcau-headlines`, from `justin` and `world` to `backstory` and `australia`. Each entry has a `slug`, a display `name` (for example `Just In`) and the section's page `url`.", + "operationId": "abcau-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get ABC News Australia sections", + "tags": [ + "ABC News Australia" + ] + } + }, + "/abcnews/article": { + "get": { + "description": "Returns public ABC News article metadata and body paragraphs from a canonical article URL. Accepts both the \"story?id=...\" and \"wireStory/...\" canonical URL shapes.", + "operationId": "abcnews-article", + "parameters": [ + { + "description": "Canonical ABC News article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://abcnews.com/Politics/example-story/story?id=123456789" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get ABC News article content", + "tags": [ + "ABC News" + ] + } + }, + "/abcnews/author": { + "get": { + "description": "Returns an ABC News author's profile: name, job title/biography when the page carries one, and social links, from a canonical author URL. Does not include a list of the author's recent articles.", + "operationId": "abcnews-author", + "parameters": [ + { + "description": "Canonical ABC News author URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://abcnews.com/author/benjamin_siegel" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.abcNewsAuthorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get an ABC News author profile", + "tags": [ + "ABC News" + ] + } + }, + "/abcnews/headlines": { + "get": { + "description": "Returns the current headlines for one ABC News section. `section` is required and must be `us`, `world`, `politics`, `business`, `technology`, `entertainment`, `health` or `sports`. Each item has a title and URL, and may also carry a summary, author, publication time and image.", + "operationId": "abcnews-headlines", + "parameters": [ + { + "description": "ABC News section slug", + "enum": [ + "us", + "world", + "politics", + "business", + "technology", + "entertainment", + "health", + "sports" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get ABC News section headlines", + "tags": [ + "ABC News" + ] + } + }, + "/abcnews/news": { + "get": { + "description": "Returns the current ABC News top stories, with no input needed. Each item has a title and canonical URL, and may also carry a summary, author, publication time and image.", + "operationId": "abcnews-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get ABC News top stories", + "tags": [ + "ABC News" + ] + } + }, + "/abcnews/sections": { + "get": { + "description": "Lists the 8 core ABC News sections that `abcnews-headlines` accepts: `us`, `world`, `politics`, `business`, `technology`, `entertainment`, `health` and `sports`. Each entry has a `slug`, a display `name` and the section's page `url`.", + "operationId": "abcnews-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get ABC News sections", + "tags": [ + "ABC News" + ] + } + }, + "/accor/amenities": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the anonymous public Accor amenity catalog with stable amenity codes, labels, categories, and display ordering. It is reference data for interpreting hotel search facets; booking, rates, rooms, reviews, and account data are excluded.", + "operationId": "accor-amenities", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/accor.amenitiesResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Accor amenity reference catalog", + "tags": [ + "Accor" + ] + } + }, + "/accor/brands": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the Accor brand directory published on the public brands page, with each brand's name, slug, and source URL. Booking, rates, rooms, reviews, contacts, and location are excluded.", + "operationId": "accor-brands", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/accor.brandsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Accor brand directory", + "tags": [ + "Accor" + ] + } + }, + "/accor/catalog/hotels": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches Accor's anonymous public hotel catalog by text, hotel code, or latitude/longitude radius. Results contain static property identity and broad location metadata plus catalog relevance/distance; contact details, precise hotel coordinates, payment, loyalty, media, rates, rooms, reviews, and booking data are excluded.", + "operationId": "accor-catalog-hotels", + "parameters": [ + { + "description": "Destination or hotel text (at least two characters)", + "in": "query", + "name": "query", + "type": "string", + "x-example": "London" + }, + { + "description": "Four-character Accor hotel code", + "in": "query", + "name": "hotel_id", + "type": "string", + "x-example": "A7L5" + }, + { + "description": "Search-center latitude (-90 to 90)", + "in": "query", + "name": "latitude", + "type": "number", + "x-example": 51.5072 + }, + { + "description": "Search-center longitude (-180 to 180)", + "in": "query", + "name": "longitude", + "type": "number", + "x-example": -0.1276 + }, + { + "default": 10, + "description": "Search radius in kilometers (0.1 to 100; defaults to 10 for coordinate searches)", + "in": "query", + "name": "radius_km", + "type": "number", + "x-example": 10 + }, + { + "default": 0, + "description": "Zero-based result offset (0 to 300)", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + }, + { + "default": 20, + "description": "Results per request (1 to 50)", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/accor.catalogResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search the Accor hotel catalog", + "tags": [ + "Accor" + ] + } + }, + "/accor/destination/hotels": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the static list of hotels published on one Accor destination directory page (world, continent, country, region, department, city, district, or place), optionally narrowed by a theme facet. Each hotel carries its code, name, source URL, and broad city/country. Booking, rates, rooms, reviews, contacts, and precise location are excluded.", + "operationId": "accor-destination-hotels", + "parameters": [ + { + "description": "Destination level: world, continent, country, region, department, city, district, or place", + "enum": [ + "world", + "continent", + "country", + "region", + "department", + "city", + "district", + "place" + ], + "in": "query", + "name": "destination_type", + "required": true, + "type": "string", + "x-example": "world" + }, + { + "description": "Destination page slug, e.g. hotels-dusseldorf-v1158. Required for every type except world.", + "in": "query", + "name": "slug", + "type": "string" + }, + { + "description": "Optional theme facet: 4-stars, 5-stars, apart-hotel, breakfast, budget-friendly, business, eco-certified, family-friendly, fitness, luxury, meetings-and-events, parking, pet-friendly, pool, resorts, or spa", + "enum": [ + "4-stars", + "5-stars", + "apart-hotel", + "breakfast", + "budget-friendly", + "business", + "eco-certified", + "family-friendly", + "fitness", + "luxury", + "meetings-and-events", + "parking", + "pet-friendly", + "pool", + "resorts", + "spa" + ], + "in": "query", + "name": "theme", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/accor.destinationResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Accor hotels in a destination", + "tags": [ + "Accor" + ] + } + }, + "/accor/property": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns static public metadata for one Accor hotel code, including name, brand, city/country, explicitly listed amenities, and published check-in/check-out times. Booking, rates, rooms, reviews, contacts, and precise location are excluded.", + "operationId": "accor-property", + "parameters": [ + { + "description": "Four-character Accor hotel code", + "in": "query", + "name": "hotel_code", + "required": true, + "type": "string", + "x-example": "A7L5" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/accor.propertyResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Accor hotel metadata", + "tags": [ + "Accor" + ] + } + }, + "/accor/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches the public Accor hotel index by destination or hotel name, with optional country, city, brand, star, page, and page-size filters. Results contain static hotel identity, location labels, ratings, and source URLs; booking, rates, rooms, reviews, loyalty, and payment flows are excluded.", + "operationId": "accor-search", + "parameters": [ + { + "description": "Destination or hotel query (at least two characters)", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "London" + }, + { + "description": "Index locale", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" + }, + { + "default": 0, + "description": "Zero-based result page", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 0 + }, + { + "default": 20, + "description": "Results per page, 1-100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + }, + { + "description": "Country facet", + "in": "query", + "name": "country", + "type": "string", + "x-example": "United Kingdom" + }, + { + "description": "City facet", + "in": "query", + "name": "city", + "type": "string", + "x-example": "London" + }, + { + "description": "Accor brand code facet", + "in": "query", + "name": "brand", + "type": "string", + "x-example": "NOVOTEL" + }, + { + "description": "Exact star facet", + "enum": [ + 1, + 2, + 3, + 4, + 5 + ], + "in": "query", + "name": "stars", + "type": "integer", + "x-example": 4 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/accor.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Accor hotels", + "tags": [ + "Accor" + ] + } + }, + "/accor/search/details": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Resolves an anonymous Accor search suggestion identifier to its description, coordinates, viewport, radius, and address components. It uses the same public place-details source as the Accor search box; booking, rates, rooms, reviews, and account data are excluded.", + "operationId": "accor-search-details", + "parameters": [ + { + "description": "Suggestion source", + "enum": [ + "google_places", + "hod_hotels" + ], + "in": "query", + "name": "source", + "required": true, + "type": "string", + "x-example": "google_places" + }, + { + "description": "Identifier returned by Accor search suggestions", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "ChIJdd4hrwug2EcRmSrV3Vo6llI" + }, + { + "description": "Optional locale", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/accor.detailsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Accor place coordinates and viewport", + "tags": [ + "Accor" + ] + } + }, + "/accor/search/suggest": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns anonymous Accor typeahead suggestions for a partial destination or hotel query, including destination/place and hotel identifiers, types, labels, and match metadata. It uses the public search-box suggestion source only; booking, rates, rooms, reviews, and result-list requests are excluded.", + "operationId": "accor-search-suggest", + "parameters": [ + { + "description": "Partial destination or hotel query (at least two characters)", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "London" + }, + { + "description": "Optional locale used by the suggestion source", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/accor.suggestResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Accor destination and hotel search suggestions", + "tags": [ + "Accor" + ] + } + }, + "/adidas/product": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns product-detail data for one Adidas SKU: name, brand, category, description, pricing (current/standard/sale), images, and every purchasable size variant. product_id is the Adidas SKU (e.g. JI0397), taken from a search result's products[].id field or the trailing segment of an Adidas product page URL. An unknown product_id returns a not-found error.", + "operationId": "adidas-product", + "parameters": [ + { + "description": "Adidas SKU/product id, from a search result's products[].id field", + "in": "query", + "name": "product_id", + "required": true, + "type": "string", + "x-example": "JI0397" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/adidas.productResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get an Adidas product", + "tags": [ + "Adidas" + ] + } + }, + "/adidas/product/review-topics": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the topics an Adidas product model's customer reviews can be filtered by -- the \"filter by topic\" chips the product page shows, commonly satisfaction, comfort, color, purchase, fit, appearance, quality and style. Feed a topics[].topic value back to /adidas/product/reviews as its topic parameter to return only reviews about that aspect. The topic vocabulary is per model, not a fixed list: a shoe exposes fit and comfort topics that an accessory does not, so read it per model rather than hard-coding it. model_number is the Adidas model number (e.g. SAMBAU2312) -- NOT the SKU: take it from an adidas_search result's products[].model_number field. A model with no reviews, including a well-formed but unrecognized model_number, returns an empty topics list rather than an error. Note the label field is a display form of topic, not translated text: Adidas returns the same English values for every locale on this route.", + "operationId": "adidas-product-review-topics", + "parameters": [ + { + "description": "Adidas model number, from an adidas_search result's products[].model_number field", + "in": "query", + "name": "model_number", + "required": true, + "type": "string", + "x-example": "SAMBAU2312" + }, + { + "description": "Locale accepted for consistency with the reviews endpoint. Allowed values: cs_CZ, da_DK, de_AT, de_CH, de_DE, el_GR, en_AE, en_AU, en_CA, en_GB, en_IE, en_IL, en_IN, en_NZ, en_PH, en_SG, en_US, en_ZA, es_AR, es_CL, es_CO, es_ES, es_MX, es_PE, fr_BE, fr_CA, fr_CH, fr_FR, id_ID, it_CH, it_IT, ja_JP, ko_KR, nl_BE, nl_NL, pl_PL, pt_BR, pt_PT, ru_RU, sk_SK, sv_SE, th_TH, tr_TR, zh_HK, zh_TW. Defaults to en_US. Note Adidas returns the same English topic labels regardless of this value.", + "in": "query", + "name": "locale", + "type": "string", + "x-example": "en_US" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/adidas.reviewTopicsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Adidas review topics for a product", + "tags": [ + "Adidas" + ] + } + }, + "/adidas/product/reviews": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of customer reviews for an Adidas product model, plus the model's rating summary: overall rating, star histogram, percentage of reviewers who recommend it, per-attribute averages (Size, Width, Comfort, Quality with their own scale labels), and Adidas's AI-generated review digest when one exists. Each review carries the rating, headline, body, author nickname, purchased colorway, helpful/not-helpful vote counts, badges, customer photos, and submission time. model_number is the Adidas model number (e.g. SAMBAU2312) -- NOT the SKU: take it from an adidas_search result's products[].model_number field, which is a different value from products[].id. Reviews are returned 10 per page. Reviews are scoped to review text written in the requested locale's language, and most of the US catalog's reviews are English, so a non-English locale commonly returns rating statistics and a localized summary with an empty reviews list. A model with no reviews -- including a well-formed but unrecognized model_number -- returns an empty reviews list rather than an error, because Adidas answers 200 with a zero count rather than 404.", + "operationId": "adidas-product-reviews", + "parameters": [ + { + "description": "Adidas model number, from an adidas_search result's products[].model_number field", + "in": "query", + "name": "model_number", + "required": true, + "type": "string", + "x-example": "SAMBAU2312" + }, + { + "description": "Locale for the review-summary language, the secondary-rating scale labels, and the language of the reviews returned. Allowed values: cs_CZ, da_DK, de_AT, de_CH, de_DE, el_GR, en_AE, en_AU, en_CA, en_GB, en_IE, en_IL, en_IN, en_NZ, en_PH, en_SG, en_US, en_ZA, es_AR, es_CL, es_CO, es_ES, es_MX, es_PE, fr_BE, fr_CA, fr_CH, fr_FR, id_ID, it_CH, it_IT, ja_JP, ko_KR, nl_BE, nl_NL, pl_PL, pt_BR, pt_PT, ru_RU, sk_SK, sv_SE, th_TH, tr_TR, zh_HK, zh_TW. Defaults to en_US.", + "in": "query", + "name": "locale", + "type": "string", + "x-example": "en_US" + }, + { + "description": "Return only reviews with this star rating. Allowed values: 1, 2, 3, 4, 5. Omitted returns every rating.", + "in": "query", + "name": "rating", + "type": "integer", + "x-example": 5 + }, + { + "description": "Return only reviews about one topic. Valid values are per-model -- read them from /adidas/product/review-topics for the same model_number (commonly satisfaction, comfort, color, purchase, fit, appearance, quality, style). An unrecognized topic returns a 400 listing the model's own topics.", + "in": "query", + "name": "topic", + "type": "string", + "x-example": "comfort" + }, + { + "description": "One-based page number, 10 reviews per page, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/adidas.productReviewsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Adidas product reviews", + "tags": [ + "Adidas" + ] + } + }, + "/adidas/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches Adidas.com product listings by keyword, or browses a category listing by taxonomy slug, with real pagination and sort options. Exactly one of query or category is required. Returns product summaries (title, price, rating, images, color variants) plus facet filter groups, sort options, and (for category browse) a breadcrumb trail. Keyword search is best-effort relevance, not a guaranteed match: an obscure keyword returns whatever Adidas's own search index surfaces. A genuinely empty keyword search returns an empty product list, and requesting a page beyond the available result pages (or an unknown category) returns a not-found error. Category values are the path segment after /us/ in an Adidas category URL (e.g. women-athletic_sneakers); they can also be read from the url fields of a search/category response's own filters and breadcrumbs. Facets are applied by composing them into the category slug rather than by a separate parameter: each filters[].values[].slug is a token you splice into the category value (e.g. category=women-black-athletic_sneakers applies the Color=Black facet, and category=women-athletic_sneakers-prime applies Shipping=PRIME). Use filters[].key (the facet's stable name, e.g. searchcolor) rather than filters[].id, which is an opaque per-deployment UUID that cannot be used to build a request. Note the token's position within the slug varies by facet, so compose from a slug you have seen rather than assuming a fixed order.", + "operationId": "adidas-search", + "parameters": [ + { + "description": "Search keyword. Exactly one of query or category is required.", + "in": "query", + "name": "query", + "type": "string", + "x-example": "running shoes" + }, + { + "description": "Category/taxonomy slug, the path segment after /us/ in an Adidas category URL. Exactly one of query or category is required.", + "in": "query", + "name": "category", + "type": "string", + "x-example": "women-athletic_sneakers" + }, + { + "description": "Sort order. Allowed values: price-low-to-high, newest-to-oldest, top-sellers, price-high-to-low. Omitted means relevance.", + "in": "query", + "name": "sort", + "type": "string", + "x-example": "price-low-to-high" + }, + { + "description": "One-based page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/adidas.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search or browse Adidas products", + "tags": [ + "Adidas" + ] + } + }, + "/adidas/store": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns detail for one Adidas retail store: name, status, phone, description, full address, coordinates, opening hours, and in-store services (e.g. Click and Collect, Free Wi-Fi). store_id is the numeric Adidas store id, taken from an adidas-stores response's stores[].id field. An unknown store_id returns a not-found error.", + "operationId": "adidas-store", + "parameters": [ + { + "description": "Adidas store id, from a stores response's stores[].id field", + "in": "query", + "name": "store_id", + "required": true, + "type": "string", + "x-example": "9990021686" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/adidas.storeDetailResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get an Adidas store", + "tags": [ + "Adidas" + ] + } + }, + "/adidas/stores": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Adidas physical retail stores nearest to a coordinate, sourced from Adidas's own store-finder API: name, address, phone, coordinates, distance in miles, opening hours, and in-store feature flags. lat and lng are both required. Adidas's upstream ignores a caller-supplied radius and returns the nearest ~20 stores ordered by distance. A location with no stores returns an empty list rather than an error.", + "operationId": "adidas-stores", + "parameters": [ + { + "description": "Latitude, -90 to 90", + "in": "query", + "name": "lat", + "required": true, + "type": "number", + "x-example": 40.75 + }, + { + "description": "Longitude, -180 to 180", + "in": "query", + "name": "lng", + "required": true, + "type": "number", + "x-example": -73.99 + }, + { + "description": "Accepted only as 0. Adidas's store finder returns every nearby store (up to 20) in a single page, so any higher value is always empty and is rejected as an invalid parameter.", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 0 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/adidas.storesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Find nearby Adidas stores", + "tags": [ + "Adidas" + ] + } + }, + "/adidas/suggest": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the top matching products for a partial query, the same search-as-you-type preview Adidas's own search box shows. Adidas has no separate term-autocomplete index, so each suggestion is a matching product (id, title, url, image, price) rather than a completed search phrase. Best-effort relevance: an obscure query returns whatever Adidas's own search surfaces.", + "operationId": "adidas-suggest", + "parameters": [ + { + "description": "Partial search query", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "samba" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/adidas.suggestResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Adidas search suggestions", + "tags": [ + "Adidas" + ] + } + }, + "/agoda/activities/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Agoda activities (tours, attractions, experiences) matching a free-text keyword and/or a city. When keyword is omitted, the resolved city's name is used instead to return a general listing of activities in that city. Callers may supply a known Agoda city id or a free-text city name for the city filter; when both are supplied city_id takes precedence.", + "operationId": "agoda-activities-search", + "parameters": [ + { + "description": "Free-text activity search keyword. When omitted, the resolved city's name is used instead.", + "in": "query", + "name": "keyword", + "type": "string", + "x-example": "cooking class" + }, + { + "description": "Numeric Agoda city id to filter results to. Optional if keyword is supplied; city_id takes precedence over city when both are supplied.", + "in": "query", + "name": "city_id", + "type": "integer", + "x-example": 9395 + }, + { + "description": "Free-text city name, used directly as the search text when keyword is omitted, and to resolve a city id filter.", + "in": "query", + "name": "city", + "type": "string", + "x-example": "Bangkok" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/agoda.activitiesSearchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Agoda activities", + "tags": [ + "Agoda" + ] + } + }, + "/agoda/activities/{activity_id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns full activity detail from Agoda: title, description, stated duration, categories, and content images.", + "operationId": "agoda-activity-detail", + "parameters": [ + { + "description": "Numeric Agoda activity id, from a prior activities search call's activity_id field", + "in": "path", + "name": "activity_id", + "required": true, + "type": "string", + "x-example": "1633875" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/agoda.ActivityDetailResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Agoda activity detail", + "tags": [ + "Agoda" + ] + } + }, + "/agoda/flights/itinerary-amenities": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Returns real-content amenities (aircraft type, seat layout, meals, entertainment, wifi) for one or more flight segments. Copy the segments straight from a flight search response's own segment fields.", + "operationId": "agoda-flights-itinerary-amenities", + "parameters": [ + { + "description": "One or more flight segments to fetch amenities for", + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/agoda.FlightItineraryAmenitiesOption" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/agoda.flightItineraryAmenitiesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Agoda flight segment amenities", + "tags": [ + "Agoda" + ] + } + }, + "/agoda/flights/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns bookable one-way flight itineraries between two IATA airport codes for a departure date, including per-segment flight number, airline, times, layovers, aircraft type, and price. Resolve free-text city/airport names to codes first via the flight destination search endpoint.", + "operationId": "agoda-flights-search", + "parameters": [ + { + "description": "Origin IATA airport code", + "in": "query", + "name": "origin", + "required": true, + "type": "string", + "x-example": "BKK" + }, + { + "description": "Destination IATA airport code", + "in": "query", + "name": "destination", + "required": true, + "type": "string", + "x-example": "HKT" + }, + { + "description": "Departure date, YYYY-MM-DD", + "in": "query", + "name": "departure_date", + "required": true, + "type": "string", + "x-example": "2026-09-15" + }, + { + "description": "Adult passengers (age 12+), defaults to 1", + "in": "query", + "name": "adults", + "type": "integer", + "x-example": 1 + }, + { + "description": "Child passengers (age 2-11), defaults to 0", + "in": "query", + "name": "children", + "type": "integer", + "x-example": 0 + }, + { + "description": "Infant passengers (under age 2), defaults to 0", + "in": "query", + "name": "infants", + "type": "integer", + "x-example": 0 + }, + { + "description": "Cabin class, defaults to Economy", + "enum": [ + "Economy", + "PremiumEconomy", + "Business", + "First" + ], + "in": "query", + "name": "cabin_class", + "type": "string" + }, + { + "description": "1-indexed result page, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/agoda.flightSearchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Agoda one-way flights", + "tags": [ + "Agoda" + ] + } + }, + "/agoda/flights/search-locations": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Resolves a free-text city or airport name into IATA airport codes for flight search, with each city's direct and nearby airports.", + "operationId": "agoda-flights-search-locations", + "parameters": [ + { + "description": "Free-text city or airport name", + "in": "query", + "name": "keyword", + "required": true, + "type": "string", + "x-example": "Bangkok" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/agoda.flightLocationSearchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Agoda flight destinations/airports", + "tags": [ + "Agoda" + ] + } + }, + "/agoda/homes/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Homes & Apartments results for an Agoda city: full listing detail for every matching property whose accommodation type is Apartment. Callers may supply a known Agoda city id or a free-text city name; when both are supplied city_id takes precedence.", + "operationId": "agoda-homes-search", + "parameters": [ + { + "description": "Numeric Agoda city id, e.g. 9395 for Bangkok. Either city_id or city is required; city_id takes precedence when both are supplied.", + "in": "query", + "name": "city_id", + "type": "integer", + "x-example": 9395 + }, + { + "description": "Free-text city name, resolved to a numeric city id via Agoda's own destination search. Ignored when city_id is also supplied.", + "in": "query", + "name": "city", + "type": "string", + "x-example": "Bangkok" + }, + { + "description": "1-indexed result page over the underlying city search, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Candidate listings fetched per page before filtering to homes/apartments, defaults to 10, maximum 50", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/agoda.homesSearchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Agoda Homes & Apartments by city", + "tags": [ + "Agoda" + ] + } + }, + "/agoda/hotels/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns hotel search results for an Agoda city: the matching property ids for that city plus a direct link to each property's listing page. Callers may supply a known Agoda city id or a free-text city name; when both are supplied city_id takes precedence.", + "operationId": "agoda-hotels-search", + "parameters": [ + { + "description": "Numeric Agoda city id, e.g. 9395 for Bangkok. Either city_id or city is required; city_id takes precedence when both are supplied.", + "in": "query", + "name": "city_id", + "type": "integer", + "x-example": 9395 + }, + { + "description": "Free-text city name, resolved to a numeric city id via Agoda's own destination search. Ignored when city_id is also supplied.", + "in": "query", + "name": "city", + "type": "string", + "x-example": "Bangkok" + }, + { + "description": "1-indexed result page, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Results per page, defaults to 10, maximum 50", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/agoda.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Agoda hotels by city", + "tags": [ + "Agoda" + ] + } + }, + "/agoda/hotels/{property_id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns full hotel detail from Agoda: identity (name, any former name), an accommodation type code, address (street address, postal code, city, country), guest rating, a main photo, room count, hotel chain id, a long and short description, and short-form policy statements (minimum age, adult/child definitions, extra-bed and additional-room booking policy).", + "operationId": "agoda-hotel-detail", + "parameters": [ + { + "description": "Numeric Agoda property id, from a prior search call's property_id field or the id embedded in an Agoda hotel URL", + "in": "path", + "name": "property_id", + "required": true, + "type": "string", + "x-example": "10637" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/agoda.DetailResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Agoda hotel detail", + "tags": [ + "Agoda" + ] + } + }, + "/airbnb/host/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns an Airbnb public host profile — display name, Superhost and identity-verification status, location, bio, hosting tenure, total guest-review count, and total listing count.", + "operationId": "airbnb-host", + "parameters": [ + { + "description": "Host id (numeric)", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "65056940" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/airbnb.HostResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Airbnb host profile", + "tags": [ + "Airbnb" + ] + } + }, + "/airbnb/host/{id}/listings": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the listings an Airbnb host manages, paginated. Page 1 comes from the host profile; deeper pages page through the host's full portfolio.", + "operationId": "airbnb-host-listings", + "parameters": [ + { + "description": "Host id (numeric)", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "65056940" + }, + { + "description": "1-based page", + "in": "query", + "name": "page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/airbnb.HostListingsResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Airbnb host listings", + "tags": [ + "Airbnb" + ] + } + }, + "/airbnb/host/{id}/reviews": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the reviews guests left for an Airbnb host, identified by the numeric host `id`. `page` is 1-based (default 1). Each review has its `id`, `rating`, `comments`, `created_at`, `reviewer` name and `reviewer_location`, and `has_more` says whether another page follows.", + "operationId": "airbnb-host-reviews", + "parameters": [ + { + "description": "Host id (numeric)", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "65056940" + }, + { + "description": "1-based page", + "in": "query", + "name": "page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/airbnb.HostReviewsResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Airbnb host reviews", + "tags": [ + "Airbnb" + ] + } + }, + "/airbnb/room/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the public details of one Airbnb listing by room id: title, description, property type, location and coordinates, guest capacity, amenities, price and price per night, rating, review count, host, and the Superhost and Guest Favorite flags. Some fields are present only when Airbnb exposes them for the listing.", + "operationId": "airbnb-room", + "parameters": [ + { + "description": "Room id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "1384733959726184048" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/airbnb.RoomResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Airbnb room", + "tags": [ + "Airbnb" + ] + } + }, + "/airbnb/room/{id}/calendar": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the public availability calendar for one Airbnb room, grouped by month. Each day carries its date, whether it is available and bookable, whether it can be a check-in or check-out day, and the minimum and maximum nights. Months are returned only when Airbnb exposes them for the listing.", + "operationId": "airbnb-room-calendar", + "parameters": [ + { + "description": "Room id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "1384733959726184048" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/airbnb.CalendarResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Airbnb room calendar", + "tags": [ + "Airbnb" + ] + } + }, + "/airbnb/room/{id}/reviews": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns public guest reviews for one Airbnb room by room id, one page at a time (`page` is 1-based). Each review has the author, date, rating and text. Reviews are returned only when Airbnb exposes them for the listing.", + "operationId": "airbnb-room-reviews", + "parameters": [ + { + "description": "Room id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "1384733959726184048" + }, + { + "description": "1-based page", + "in": "query", + "name": "page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/airbnb.ReviewsResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Airbnb room reviews", + "tags": [ + "Airbnb" + ] + } + }, + "/airbnb/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches public Airbnb stays for a location, with optional check-in and check-out dates, adult count, currency and page. Pass `ne_lat`, `ne_lng`, `sw_lat` and `sw_lng` to bound the search to a map area. Each result has the listing id, title, URL, location and coordinates, price and price per night, rating, review count, host, and the Superhost and Guest Favorite flags.", + "operationId": "airbnb-search", + "parameters": [ + { + "description": "Location", + "in": "query", + "name": "location", + "required": true, + "type": "string", + "x-example": "New York, NY" + }, + { + "description": "Check-in date", + "in": "query", + "name": "check_in", + "type": "string" + }, + { + "description": "Check-out date", + "in": "query", + "name": "check_out", + "type": "string" + }, + { + "description": "Adult guests", + "in": "query", + "name": "adults", + "type": "integer" + }, + { + "description": "1-based page", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Currency for bounded map search", + "in": "query", + "name": "currency", + "type": "string" + }, + { + "description": "Northeast latitude for bounded map search", + "in": "query", + "name": "ne_lat", + "type": "number" + }, + { + "description": "Northeast longitude for bounded map search", + "in": "query", + "name": "ne_lng", + "type": "number" + }, + { + "description": "Southwest latitude for bounded map search", + "in": "query", + "name": "sw_lat", + "type": "number" + }, + { + "description": "Southwest longitude for bounded map search", + "in": "query", + "name": "sw_lng", + "type": "number" + }, + { + "description": "Map zoom for bounded map search", + "in": "query", + "name": "zoom", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/airbnb.SearchResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Airbnb stays", + "tags": [ + "Airbnb" + ] + } + }, + "/alcom/headlines": { + "get": { + "description": "Returns current headlines from one of AL.com's section feeds. Summaries are brief publisher teasers, not full article text.", + "operationId": "alcom-headlines", + "parameters": [ + { + "description": "AL.com editorial section", + "enum": [ + "news", + "sports", + "life" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "news" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get AL.com section headlines", + "tags": [ + "AL.com" + ] + } + }, + "/alcom/news": { + "get": { + "description": "Returns current AL.com News stories. Summaries are brief publisher teasers, not full article text.", + "operationId": "alcom-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get AL.com top stories", + "tags": [ + "AL.com" + ] + } + }, + "/alcom/sections": { + "get": { + "description": "Lists the three top-level editorial sections in AL.com's navigation: `news`, `sports` and `life`. Each has a `slug`, a display `name` and the section's page `url`, and the slugs are the values `alcom-headlines` accepts for `section`.", + "operationId": "alcom-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get AL.com editorial sections", + "tags": [ + "AL.com" + ] + } + }, + "/aliexpress/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns AliExpress's category navigation taxonomy. With no parameters it lists the top-level category tabs (about 24), each with its navigation id, name, numeric platform category id and icon. Pass one tab's id as category_tab to expand that tab into its second- and third-level categories; third-level categories carry the search keyword and a ready-to-use search URL, so they can be passed to the search endpoint as q. Category ids are exposed only where AliExpress's payload actually carries them: second-level categories have no numeric platform id, so none is invented for them. This is a taxonomy surface, not a product listing.", + "operationId": "aliexpress-categories", + "parameters": [ + { + "description": "Top-level tab id from an unfiltered response, e.g. electronics; omit to list top-level tabs only", + "in": "query", + "name": "category_tab", + "type": "string", + "x-example": "electronics" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/aliexpress.categoriesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List AliExpress category navigation", + "tags": [ + "AliExpress" + ] + } + }, + "/aliexpress/category-ids": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the AliExpress web category ids that its own product cards carry on one listing page, with each id's parent, depth and full category path. Pass q to discover the categories of products matching a keyword, or category_id to inspect one category listing. Pass exactly one of them. The ids are the same web category ids used in /category//.html URLs and by the search endpoint's cat_id parameter; they are NOT the platform/taxonomy ids returned by the categories endpoint. A parent category listing contains products from its descendants, so inspecting a category reveals its child ids, and every returned path names that id's ancestors: the value space is discoverable by walking from a keyword or a category id rather than guessing.", + "operationId": "aliexpress-category-ids", + "parameters": [ + { + "description": "Free-text keywords whose result cards' web category ids are returned; pass exactly one of q or category_id", + "in": "query", + "name": "q", + "type": "string", + "x-example": "wireless earbuds" + }, + { + "description": "AliExpress web category id whose listing is inspected; a parent category reveals its descendants' ids. Pass exactly one of q or category_id", + "in": "query", + "name": "category_id", + "type": "integer", + "x-example": 44 + }, + { + "description": "1-indexed listing page to inspect (1-60), defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/aliexpress.categoryIDsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Discover AliExpress web category ids", + "tags": [ + "AliExpress" + ] + } + }, + "/aliexpress/category-products": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page (up to 60 products) of a public AliExpress category listing with the same product fields as the search endpoint: product id, title, link, image, price, currency, original price, rating, sold text, discount, SKU id, ship-from country and store name when AliExpress lists them. category_id is the AliExpress web category id from a /category//.html URL (for example 5090301 for Cellphones); the slug segment is cosmetic (the listing is selected by id) and defaults to products. The listing uses the anonymous US English/USD locale. Product-detail pages are currently unavailable through the supported HTTP profiles.", + "operationId": "aliexpress-category-products", + "parameters": [ + { + "description": "AliExpress web category id: the number in a /category//.html URL (for example 5090301 for Cellphones); taxonomy ids from the categories endpoint are a different namespace and are not interchangeable", + "in": "query", + "name": "category_id", + "required": true, + "type": "integer", + "x-example": 5090301 + }, + { + "description": "Category path segment used by AliExpress's own URL (lower-case letters, digits, hyphens); cosmetic, defaults to products", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "cellphones" + }, + { + "description": "1-indexed result page (1-60), defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/aliexpress.categoryProductsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List products in an AliExpress category", + "tags": [ + "AliExpress" + ] + } + }, + "/aliexpress/reviews": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of public reviews and rating statistics for a numeric AliExpress product id. AliExpress currently returns up to 20 review records per page.", + "operationId": "aliexpress-reviews", + "parameters": [ + { + "description": "Numeric AliExpress product id", + "in": "query", + "name": "product_id", + "required": true, + "type": "string", + "x-example": "3256812072210872" + }, + { + "description": "1-indexed review page (1-50), defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/aliexpress.reviewsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get AliExpress product reviews", + "tags": [ + "AliExpress" + ] + } + }, + "/aliexpress/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page (up to 60 products) of public keyword search results with product ids, titles, links, images, prices, ratings, sold text, discount, SKU id, ship-from country, and store name when AliExpress lists them. Results can be sorted and filtered by price, free shipping, the Choice program, and product attributes; list the attribute values for a keyword with the search-filters endpoint. The search uses the anonymous US English/USD locale. Product-detail pages are currently unavailable through the supported HTTP profiles.", + "operationId": "aliexpress-search", + "parameters": [ + { + "description": "Free-text search keywords", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "wireless earbuds" + }, + { + "description": "1-indexed result page (1-60), defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Sort order. Allowed values: best_match (default), orders, price_asc, price_desc", + "enum": [ + "best_match", + "orders", + "price_asc", + "price_desc" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "price_asc" + }, + { + "description": "Minimum price in USD (0-1000000)", + "in": "query", + "name": "min_price", + "type": "number", + "x-example": 20 + }, + { + "description": "Maximum price in USD (0-1000000), not below min_price", + "in": "query", + "name": "max_price", + "type": "number", + "x-example": 30 + }, + { + "description": "Only free-shipping products", + "in": "query", + "name": "free_shipping", + "type": "boolean" + }, + { + "description": "Only products in AliExpress's Choice program", + "in": "query", + "name": "choice", + "type": "boolean" + }, + { + "description": "Attribute filter -, from the search-filters endpoint for the same q; comma-separate up to 5 values, one per attribute group", + "in": "query", + "name": "attr", + "type": "string", + "x-example": "3079-4148335" + }, + { + "description": "Search within one AliExpress web category id (the number in a /category//.html URL); taxonomy ids from the categories endpoint are a different namespace and are not interchangeable", + "in": "query", + "name": "cat_id", + "type": "integer", + "x-example": 5090301 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/aliexpress.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search AliExpress products", + "tags": [ + "AliExpress" + ] + } + }, + "/aliexpress/search-filters": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns every sort value and boolean filter the search endpoint accepts, plus the product-attribute filters (brand, color, style, and so on) AliExpress offers for the keyword, as ready-to-use attr values. Attribute filters differ per keyword, so call this with the same q as the search.", + "operationId": "aliexpress-search-filters", + "parameters": [ + { + "description": "Free-text search keywords", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "wireless earbuds" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/aliexpress.filtersResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List AliExpress search filters", + "tags": [ + "AliExpress" + ] + } + }, + "/aliexpress/suggest": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns AliExpress's own search-box keyword completions for a query, with a ready-to-use search URL for each suggestion. This is a suggestion/autocomplete surface, not a product feed: the upstream payload contains keyword strings only, so no product id, title, price or seller is returned. AliExpress usually offers 10-12 suggestions; each suggestion's url is the matching AliExpress search page and can be passed to the search endpoint as q.", + "operationId": "aliexpress-suggest", + "parameters": [ + { + "description": "Partial or full search keywords to complete", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "wireless earbuds" + }, + { + "description": "Maximum suggestions to return (1-20), defaults to 10", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/aliexpress.suggestResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Suggest AliExpress search keywords", + "tags": [ + "AliExpress" + ] + } + }, + "/aliexpress/trending-searches": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns AliExpress's own discovery/trending keyword feed from its anonymous search box: the hot-search keywords it groups by category, plus its discovery and shading keyword modules. Each item carries the keyword, its display casing when different, the kind (hot, shading, discovery, history), the module's UI label, the hot-list category, and a ready-to-use search URL; keyword thumbnails are included where AliExpress supplies them. This is a keyword-discovery feed, not a product list and not a personalized recommendation: no product id, title, price or seller is returned, and AliExpress does not promise a stable order between calls. The anonymous feed carries roughly 40 hot keywords plus a few discovery/shading keywords per call; search history is empty for anonymous callers.", + "operationId": "aliexpress-trending-searches", + "parameters": [ + { + "description": "Maximum trending keywords to return (1-20), defaults to 10", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/aliexpress.trendingSearchesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List AliExpress trending searches", + "tags": [ + "AliExpress" + ] + } + }, + "/aljazeera/article": { + "get": { + "description": "Returns an Al Jazeera article by `url`, a canonical dated `www.aljazeera.com` address such as `/news/2026/9/20/example-slug`: title, description, publication and update times, section, credited authors, lead image and body `paragraphs`. Live-blog URLs return their opening summary bullets as the body; a video page with no article text returns `503` and a malformed URL `400`.", + "operationId": "aljazeera-article", + "parameters": [ + { + "description": "Canonical www.aljazeera.com article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.aljazeera.com/news/2026/9/20/example-slug" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/aljazeera.articleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Al Jazeera article content", + "tags": [ + "Al Jazeera" + ] + } + }, + "/aljazeera/author": { + "get": { + "description": "Returns one Al Jazeera author's public profile (name, job title, bio when available) and one page of their recent articles, identified by an author slug or a canonical author URL.", + "operationId": "aljazeera-author", + "parameters": [ + { + "description": "Al Jazeera author slug", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "hakeem-najimdeen" + }, + { + "description": "Canonical https://www.aljazeera.com/author/ URL, as an alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.aljazeera.com/author/hakeem-najimdeen" + }, + { + "description": "1-based page number of the author's article list; overrides any page embedded in url", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/aljazeera.authorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get an Al Jazeera author's profile and recent articles", + "tags": [ + "Al Jazeera" + ] + } + }, + "/aljazeera/categories": { + "get": { + "description": "Lists Al Jazeera's current section navigation, each entry with a `name`, `slug` and `url`. A slug has one segment (`news`, `middle-east`) or two (`tag/human-rights`), and any returned `slug` can be passed as the `topic` parameter of `aljazeera-topic`.", + "operationId": "aljazeera-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/aljazeera.categoriesResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Al Jazeera section navigation", + "tags": [ + "Al Jazeera" + ] + } + }, + "/aljazeera/headlines": { + "get": { + "description": "Returns recent Al Jazeera text-news headlines from across the site, with no input needed. Each item has a title, canonical URL, summary, publication time and the section when present. Video items are excluded because the article endpoint supports text stories only.", + "operationId": "aljazeera-headlines", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/aljazeera.headlinesResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Al Jazeera site-wide headlines", + "tags": [ + "Al Jazeera" + ] + } + }, + "/aljazeera/topic": { + "get": { + "description": "Returns the newest public Al Jazeera stories from one section archive page. topic is a section slug; use aljazeera-categories for the current value space.", + "operationId": "aljazeera-topic", + "parameters": [ + { + "description": "Al Jazeera section slug", + "in": "query", + "name": "topic", + "required": true, + "type": "string", + "x-example": "news" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/aljazeera.topicResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Al Jazeera section headlines", + "tags": [ + "Al Jazeera" + ] + } + }, + "/allbirds/collections": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns collections from Allbirds (https://www.allbirds.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", + "operationId": "allbirds-collections", + "parameters": [ + { + "description": "1-based page, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Maximum collections, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Allbirds collections", + "tags": [ + "Allbirds" + ] + } + }, + "/allbirds/collections/{handle}/products": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns products from one Allbirds (https://www.allbirds.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", + "operationId": "allbirds-collection-products", + "parameters": [ + { + "description": "Collection handle", + "in": "path", + "name": "handle", + "required": true, + "type": "string", + "x-example": "collection-handle" + }, + { + "description": "1-based page, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Maximum products, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Allbirds collection products", + "tags": [ + "Allbirds" + ] + } + }, + "/allbirds/pages": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Lists static pages from the Allbirds store, paged with `page` (default 1) and `limit` (default 50, max 250). Each item has `handle`, `title`, `url`, `id`, publish and update times and plain-text `content`. In some responses items carry only `handle`, `url` and `updated_at`.", + "operationId": "allbirds-pages", + "parameters": [ + { + "description": "1-based page, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Maximum static pages, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/shopifybrands.pagesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Allbirds static pages", + "tags": [ + "Allbirds" + ] + } + }, + "/allbirds/pages/{handle}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one static page from the Allbirds store by its `handle`: title, URL, publish and update times, and `content` as plain text rather than HTML. `id` is omitted on some pages. A handle that does not exist returns 404.", + "operationId": "allbirds-page", + "parameters": [ + { + "description": "Page handle", + "in": "path", + "name": "handle", + "required": true, + "type": "string", + "x-example": "page-handle" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/shopifybrands.pageResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Allbirds static page", + "tags": [ + "Allbirds" + ] + } + }, + "/allbirds/products": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns products from Allbirds's (https://www.allbirds.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", + "operationId": "allbirds-products", + "parameters": [ + { + "description": "1-based page, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Maximum products, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/shopifybrands.productsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Allbirds products", + "tags": [ + "Allbirds" + ] + } + }, + "/allbirds/products/{handle}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns product detail for one Allbirds (https://www.allbirds.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", + "operationId": "allbirds-product", + "parameters": [ + { + "description": "Product handle", + "in": "path", + "name": "handle", + "required": true, + "type": "string", + "x-example": "product-handle" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/shopifybrands.productResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Allbirds product", + "tags": [ + "Allbirds" + ] + } + }, + "/allbirds/products/{handle}/recommendations": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns recommended products for one Allbirds (https://www.allbirds.com) product handle. The storefront URL is fixed server-side.", + "operationId": "allbirds-product-recommendations", + "parameters": [ + { + "description": "Product handle", + "in": "path", + "name": "handle", + "required": true, + "type": "string", + "x-example": "product-handle" + }, + { + "description": "Maximum products, defaults to 10 and supports up to 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + }, + { + "description": "Recommendation intent. Allowed values: related, complementary", + "enum": [ + "related", + "complementary" + ], + "in": "query", + "name": "intent", + "type": "string", + "x-example": "related" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Allbirds product recommendations", + "tags": [ + "Allbirds" + ] + } + }, + "/allbirds/search/suggest": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns products, collections, and query suggestions from Allbirds's (https://www.allbirds.com) predictive search. The storefront URL is fixed server-side.", + "operationId": "allbirds-search-suggest", + "parameters": [ + { + "description": "Search query", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "wool" + }, + { + "description": "Comma-separated suggestion types. Allowed values: product, collection, query", + "in": "query", + "name": "types", + "type": "string", + "x-example": "product,collection,query" + }, + { + "description": "Maximum results per type, defaults to 10 and supports up to 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Allbirds search suggestions", + "tags": [ + "Allbirds" + ] + } + }, + "/allbirds/sitemap/urls": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Lists URL entries from the Allbirds store sitemaps, filtered by `type` (`all`, `products`, `collections`, `pages`, `blogs`, `agentic_discovery` or `other`; default `all`). `limit` defaults to 50 and is capped at 250. Each entry has `loc`, `type`, `handle`, `lastmod`, `changefreq` and optional `images`.", + "operationId": "allbirds-sitemap-urls", + "parameters": [ + { + "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", + "enum": [ + "all", + "products", + "collections", + "pages", + "blogs", + "agentic_discovery", + "other" + ], + "in": "query", + "name": "type", + "type": "string", + "x-example": "products" + }, + { + "description": "Maximum URL entries, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Allbirds sitemap URLs", + "tags": [ + "Allbirds" + ] + } + }, + "/allbirds/sitemaps": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Lists the child sitemaps in the Allbirds store's sitemap index, each with its `loc` and a `type` of `products`, `collections`, `pages`, `blogs`, `agentic_discovery` or `other`. Takes no parameters. The types match the `type` filter of `allbirds-sitemap-urls`.", + "operationId": "allbirds-sitemaps", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Allbirds sitemaps", + "tags": [ + "Allbirds" + ] + } + }, + "/allbirds/store": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns storefront metadata for Allbirds (https://www.allbirds.com). The storefront URL is fixed server-side, so no `url` parameter is accepted.", + "operationId": "allbirds-store", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/shopifybrands.storeResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Allbirds store metadata", + "tags": [ + "Allbirds" + ] + } + }, + "/alt/asset": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one card design's identity, full population report (across every grading company and grade Alt tracks), and a recent raw sales feed -- the \"is this card actually rare, and what does it sell for\" data for a specific card design, independent of any single listing. asset_id comes from a prior alt-search/alt-sold-listings/alt-card-search result's asset_id field. recent_sales has no per-transaction grade breakdown -- Alt does not expose one; see alt-sold-listings for per-grade sold prices on specific listings.", + "operationId": "alt-asset", + "parameters": [ + { + "description": "The card design's asset id, from a Search/SoldListings/CardSearch result's asset_id field", + "in": "query", + "name": "asset_id", + "required": true, + "type": "string", + "x-example": "c3156728-e7eb-11ea-a6f0-02d4568f26ba" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/alt.assetResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get one card design's population report and recent sales", + "tags": [ + "Alt" + ] + } + }, + "/alt/auctions": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches Alt's own currently live auctions -- the same pool shown on alt.xyz/browse's \"Auctions\" tab filtered to the Alt source. Unlike alt-search, this never returns another source auction house's listings or Alt's own fixed-price items. See alt-categories for the accepted category/grading_company/sort values.", + "operationId": "alt-auctions", + "parameters": [ + { + "description": "Free-text search across item name, subject, brand, and variety. Omit or pass * to browse every current Alt auction.", + "in": "query", + "name": "q", + "type": "string", + "x-example": "michael jordan" + }, + { + "description": "Comma-separated card category filter", + "enum": [ + "BASEBALL_CARDS", + "POKEMON_CARDS", + "FOOTBALL_CARDS", + "BASKETBALL_CARDS", + "POP-CULTURE_CARDS", + "HOCKEY_CARDS", + "SOCCER_CARDS", + "ONE_PIECE_CARDS", + "OTHER_CARDS", + "TCG_CARDS", + "COMBAT_SPORTS_CARDS", + "RACING_CARDS", + "MAGIC_CARDS", + "YUGIOH_CARDS", + "GOLF_CARDS", + "TENNIS_CARDS" + ], + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Comma-separated grading company filter", + "enum": [ + "PSA", + "CGC", + "BGS", + "CSG", + "SGC", + "PSA/DNA", + "BVG", + "BCCG", + "Factory Sealed", + "BAS", + "AUTHENTIC", + "TAG", + "RELABEL", + "RECASE", + "JSA/BVG", + "REVIEW", + "INTERNAL", + "NEW/", + "BULK", + "OTHERS", + "UNGRADED" + ], + "in": "query", + "name": "grading_company", + "type": "string" + }, + { + "description": "Result order. Default recommended.", + "enum": [ + "recommended", + "alt_value_desc", + "alt_value_asc", + "price_desc", + "price_asc", + "watched_desc", + "ending_soonest_asc", + "timestamp_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "1-based page number, default 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Results per page, default 24, max 100", + "in": "query", + "name": "per_page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/alt.auctionsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Alt's own live 24/7 auctions", + "tags": [ + "Alt" + ] + } + }, + "/alt/card-search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches Alt's reference card-design catalog -- a canonical catalog of card designs (one entry per year/brand/subject/card-number/variety combination), separate from live listings or sales. Useful for finding a card design's asset_id (to feed into alt-asset for a population report and recent sales) without already having a live listing or sale that references it.", + "operationId": "alt-card-search", + "parameters": [ + { + "description": "Free-text search across card name, subject, brand, and variety", + "in": "query", + "name": "q", + "type": "string", + "x-example": "michael jordan" + }, + { + "description": "1-based page number, default 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Results per page, default 24, max 100", + "in": "query", + "name": "per_page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/alt.cardSearchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Alt's reference card-design catalog", + "tags": [ + "Alt" + ] + } + }, + "/alt/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns every accepted value for alt-search/alt-auctions/alt-sold-listings' category, auction_house, grading_company, and listing_type params, plus the sort enum. category/auction_house/grading_company/listing_type are read live from Alt's own current search index on every call, not a fixed taxonomy -- so this endpoint self-corrects if Alt's aggregator adds a new source auction house, grading company, or category.", + "operationId": "alt-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/alt.categoriesResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Alt search filter values", + "tags": [ + "Alt" + ] + } + }, + "/alt/listing": { + "get": { + "consumes": [ + "application/json" + ], + "description": "One listing's full public detail -- title, description, price/bid state, grading info, and images -- across Alt's own native listings and its aggregated external listings. id and listing_type come from a prior alt-search/alt-auctions result, or from an alt-sold-listings result's listing_id and listing_type for a completed sale on Alt itself. Not every response field applies to every listing_type -- see the field-level notes in this endpoint's markdown doc.", + "operationId": "alt-listing", + "parameters": [ + { + "description": "The listing's id, from a Search/Auctions result's id field, or a sold-listings result's listing_id for a completed sale on Alt itself", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "58e5a6a5-a7ad-417f-8cda-ceffb226928c" + }, + { + "description": "The listing's listing_type from the same Search/Auctions result", + "enum": [ + "AUCTION", + "FIXED_PRICE", + "EXTERNAL_AUCTION", + "EXTERNAL_FIXED_PRICE" + ], + "in": "query", + "name": "listing_type", + "required": true, + "type": "string", + "x-example": "AUCTION" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/alt.listingResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get one Alt listing's full public detail", + "tags": [ + "Alt" + ] + } + }, + "/alt/market-trends": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Alt's own category-level price-trend index -- the same data alt.xyz's \"Market Trends\" page shows: a weekly/monthly/90-day change and a current index value per card category, built from Alt's own sold/valuation data.", + "operationId": "alt-market-trends", + "parameters": [ + { + "description": "Optional exact category filter -- must match one of the categories present in the live response (a subset of alt-categories' category list; Alt only publishes a trend index for its own tracked sports categories). Omit to get every tracked category.", + "in": "query", + "name": "category", + "type": "string", + "x-example": "BASKETBALL_CARDS" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/alt.marketTrendsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Alt's card-market price-trend index", + "tags": [ + "Alt" + ] + } + }, + "/alt/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches Alt's universal aggregator index -- live auction and fixed-price listings from Alt itself and every other source auction house its search carries (eBay, Fanatics Collect, Pristine Auction, Goldin, CardHobby, Memory Lane) -- by free-text query, category, source auction house, grading company, and listing type, in a caller-selected sort order. Only currently-live listings are returned; see alt-sold-listings for completed sales. See alt-categories for the accepted category/auction_house/grading_company/listing_type/sort values.", + "operationId": "alt-search", + "parameters": [ + { + "description": "Free-text search across item name, subject, brand, and variety. Omit or pass * to browse everything.", + "in": "query", + "name": "q", + "type": "string", + "x-example": "michael jordan" + }, + { + "description": "Comma-separated card category filter", + "enum": [ + "BASEBALL_CARDS", + "POKEMON_CARDS", + "FOOTBALL_CARDS", + "BASKETBALL_CARDS", + "POP-CULTURE_CARDS", + "HOCKEY_CARDS", + "SOCCER_CARDS", + "ONE_PIECE_CARDS", + "OTHER_CARDS", + "TCG_CARDS", + "COMBAT_SPORTS_CARDS", + "RACING_CARDS", + "MAGIC_CARDS", + "YUGIOH_CARDS", + "GOLF_CARDS", + "TENNIS_CARDS" + ], + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Comma-separated source auction house filter", + "enum": [ + "eBay", + "Fanatics Collect", + "Alt", + "Pristine Auction", + "Goldin", + "CardHobby", + "Memory Lane" + ], + "in": "query", + "name": "auction_house", + "type": "string" + }, + { + "description": "Comma-separated grading company filter", + "enum": [ + "PSA", + "CGC", + "BGS", + "CSG", + "SGC", + "PSA/DNA", + "BVG", + "BCCG", + "Factory Sealed", + "BAS", + "AUTHENTIC", + "TAG", + "RELABEL", + "RECASE", + "JSA/BVG", + "REVIEW", + "INTERNAL", + "NEW/", + "BULK", + "OTHERS", + "UNGRADED" + ], + "in": "query", + "name": "grading_company", + "type": "string" + }, + { + "description": "Comma-separated listing type filter. Omit to search auctions and fixed-price listings from every source together.", + "enum": [ + "AUCTION", + "FIXED_PRICE", + "EXTERNAL_AUCTION", + "EXTERNAL_FIXED_PRICE" + ], + "in": "query", + "name": "listing_type", + "type": "string" + }, + { + "description": "Result order. Default recommended.", + "enum": [ + "recommended", + "alt_value_desc", + "alt_value_asc", + "price_desc", + "price_asc", + "watched_desc", + "ending_soonest_asc", + "timestamp_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "1-based page number, default 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Results per page, default 24, max 100", + "in": "query", + "name": "per_page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/alt.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Alt's aggregated card marketplace", + "tags": [ + "Alt" + ] + } + }, + "/alt/sold-listings": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches Alt's global archive of completed card sales, aggregated across every source auction house its search carries -- the \"market data\" side of Alt's card-investment-marketplace positioning. This is a separate index from alt-search/alt-auctions, scoped to a rolling 90-day window, not a filtered view of live listings. Filter by sold date (sold_from, sold_to), by when Alt added the sale to its index (added_from, added_to), by listing type, grade, subject, brand, card number, year, price, population and the serial, print-run and rookie flags; order with sort (sold date, added time, price, population or year, either direction); up to 250 rows per page. To read only new sales, pass the largest added_at you already hold as added_from with sort=added_asc and de-duplicate on id. Pass auction_house=Alt to see only Alt's own completed sales. Each of Alt's own sales carries listing_id and listing_type -- pass both to alt-listing to get that item's certificate number -- and its url is the alt.xyz item page; a sale aggregated from another auction house carries that source site's own url instead. See alt-categories for the accepted category/auction_house/grading_company values.", + "operationId": "alt-sold-listings", + "parameters": [ + { + "description": "Free-text search across item name, subject, brand, and variety. Omit or pass * to browse the most recent sales.", + "in": "query", + "name": "q", + "type": "string", + "x-example": "michael jordan" + }, + { + "description": "Comma-separated card category filter", + "enum": [ + "BASEBALL_CARDS", + "POKEMON_CARDS", + "FOOTBALL_CARDS", + "BASKETBALL_CARDS", + "POP-CULTURE_CARDS", + "HOCKEY_CARDS", + "SOCCER_CARDS", + "ONE_PIECE_CARDS", + "OTHER_CARDS", + "TCG_CARDS", + "COMBAT_SPORTS_CARDS", + "RACING_CARDS", + "MAGIC_CARDS", + "YUGIOH_CARDS", + "GOLF_CARDS", + "TENNIS_CARDS" + ], + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Comma-separated source auction house filter. Pass Alt to see only Alt's own completed auctions.", + "enum": [ + "eBay", + "Fanatics Collect", + "Alt", + "Pristine Auction", + "Goldin", + "CardHobby", + "Memory Lane" + ], + "in": "query", + "name": "auction_house", + "type": "string" + }, + { + "description": "Comma-separated grading company filter", + "enum": [ + "PSA", + "CGC", + "BGS", + "CSG", + "SGC", + "PSA/DNA", + "BVG", + "BCCG", + "Factory Sealed", + "BAS", + "AUTHENTIC", + "TAG", + "RELABEL", + "RECASE", + "JSA/BVG", + "REVIEW", + "INTERNAL", + "NEW/", + "BULK", + "OTHERS", + "UNGRADED" + ], + "in": "query", + "name": "grading_company", + "type": "string" + }, + { + "description": "Comma-separated listing type filter. AUCTION and FIXED_PRICE are Alt's own sales; EXTERNAL_AUCTION and EXTERNAL_FIXED_PRICE are aggregated from other houses.", + "enum": [ + "AUCTION", + "FIXED_PRICE", + "EXTERNAL_AUCTION", + "EXTERNAL_FIXED_PRICE" + ], + "in": "query", + "name": "listing_type", + "type": "string" + }, + { + "description": "Comma-separated grade filter. Combine with grading_company to pin a grade such as PSA 10.", + "enum": [ + "1", + "1.5", + "2", + "2.5", + "3", + "3.5", + "4", + "4.5", + "5", + "5.5", + "6", + "6.5", + "7", + "7.5", + "8", + "8.5", + "9", + "9.5", + "10", + "Auth", + "PRI", + "BL" + ], + "in": "query", + "name": "grade", + "type": "string" + }, + { + "description": "Exact match on the card's subject (player or character name), case-insensitive", + "in": "query", + "name": "subject", + "type": "string", + "x-example": "Michael Jordan" + }, + { + "description": "Exact match on the card's brand (set name), case-insensitive", + "in": "query", + "name": "brand", + "type": "string", + "x-example": "Pokemon Base Set" + }, + { + "description": "Exact match on the card number within its set, case-insensitive", + "in": "query", + "name": "card_number", + "type": "string", + "x-example": "GG35" + }, + { + "description": "Only sales on or after this UTC date, YYYY-MM-DD. The index is a rolling 90-day window, so earlier dates return nothing.", + "in": "query", + "name": "sold_from", + "type": "string", + "x-example": "2026-11-01" + }, + { + "description": "Only sales on or before this UTC date, YYYY-MM-DD", + "in": "query", + "name": "sold_to", + "type": "string", + "x-example": "2026-11-03" + }, + { + "description": "Only sales Alt added to its index at or after this time, RFC 3339 or Unix seconds. Pass the largest added_at you already hold and de-duplicate on id to read only what is new.", + "in": "query", + "name": "added_from", + "type": "string", + "x-example": "2026-11-04T00:00:00Z" + }, + { + "description": "Only sales Alt added to its index at or before this time, RFC 3339 or Unix seconds", + "in": "query", + "name": "added_to", + "type": "string", + "x-example": "2026-11-04T12:00:00Z" + }, + { + "description": "Minimum card year, inclusive. Cards with an unknown year are never matched by a year filter.", + "in": "query", + "name": "year_min", + "type": "integer", + "x-example": 2020 + }, + { + "description": "Maximum card year, inclusive. Cards with an unknown year are never matched by a year filter.", + "in": "query", + "name": "year_max", + "type": "integer", + "x-example": 2023 + }, + { + "description": "Minimum sale price in US dollars, inclusive", + "in": "query", + "name": "price_min", + "type": "number", + "x-example": 100 + }, + { + "description": "Maximum sale price in US dollars, inclusive", + "in": "query", + "name": "price_max", + "type": "number", + "x-example": 5000 + }, + { + "description": "Minimum grading population, inclusive. Cards with an unknown population are never matched by a pop filter.", + "in": "query", + "name": "pop_min", + "type": "integer", + "x-example": 1 + }, + { + "description": "Maximum grading population, inclusive, for example 10 for low-pop cards. Cards with an unknown population are never matched. 0 or omitted means no maximum.", + "in": "query", + "name": "pop_max", + "type": "integer", + "x-example": 10 + }, + { + "description": "Serial-numbered cards (true) or cards without a serial number (false)", + "in": "query", + "name": "has_serial", + "type": "boolean" + }, + { + "description": "Cards with a stated print run (true) or without one (false)", + "in": "query", + "name": "has_print_run", + "type": "boolean" + }, + { + "description": "Rookie-year cards (true) or other cards (false)", + "in": "query", + "name": "rookie_year_card", + "type": "boolean" + }, + { + "description": "Result order. Default recommended is Alt's relevance order. An explicit sort replaces text relevance. year_asc and pop_asc list unknown values (0) first.", + "enum": [ + "recommended", + "sold_date_desc", + "sold_date_asc", + "added_desc", + "added_asc", + "price_desc", + "price_asc", + "pop_desc", + "pop_asc", + "year_desc", + "year_asc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "1-based page number, default 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Results per page, default 24, max 250", + "in": "query", + "name": "per_page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/alt.soldListingsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Alt's completed sales archive", + "tags": [ + "Alt" + ] + } + }, + "/alt/top-movers": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Alt's biggest price-index movers -- either a cross-subject leaderboard (optionally scoped to one category) or, when subject is set, that one player/character's own trend broken out per category it appears in. category is not strictly validated against alt-categories' list -- this trend index's own category set is broader (e.g. it includes MULTI-SPORT_CARDS).", + "operationId": "alt-top-movers", + "parameters": [ + { + "description": "Optional category filter for the leaderboard. Ignored when subject is set. Omit to rank movers across every category.", + "in": "query", + "name": "category", + "type": "string", + "x-example": "BASKETBALL_CARDS" + }, + { + "description": "Optional exact player/subject name. Returns that subject's own trend per category instead of a leaderboard, and category is ignored.", + "in": "query", + "name": "subject", + "type": "string", + "x-example": "Michael Jordan" + }, + { + "description": "Max results, default 10, max 50", + "in": "query", + "name": "limit", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/alt.topMoversResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Alt's biggest card-market price movers", + "tags": [ + "Alt" + ] + } + }, + "/amazon-jobs/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Lists every value amazon-jobs/search's `category` parameter accepts, each with its current live job count. Live-queries amazon.jobs's own search category facet rather than a static list, so counts and coverage stay current.", + "operationId": "amazon-jobs-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/amazonjobs.categoriesResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Amazon Jobs category discovery", + "tags": [ + "Amazon Jobs" + ] + } + }, + "/amazon-jobs/job": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one Amazon.jobs posting by its numeric job id (the `id` field returned by search).", + "operationId": "amazon-jobs-job", + "parameters": [ + { + "description": "Numeric Amazon job id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "10386857" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/amazonjobs.jobResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Amazon Jobs single posting", + "tags": [ + "Amazon Jobs" + ] + } + }, + "/amazon-jobs/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches Amazon's public careers site (amazon.jobs). Each result includes the full description and qualifications inline. `sort` accepts `relevant` (default, relevance ranking) or `recent` (newest posted first). Either `q` or `category` (or both) must be given -- `category` filters by Amazon's own job-category taxonomy and works with no text query at all. See `amazon-jobs-categories` for the full, live-verified list of accepted `category` values.", + "operationId": "amazon-jobs-search", + "parameters": [ + { + "description": "Search query. Either q or category is required", + "in": "query", + "name": "q", + "type": "string", + "x-example": "software engineer" + }, + { + "description": "Amazon's own job-category taxonomy slug, case-insensitive. Either q or category is required", + "enum": [ + "administrative-support", + "applied-science", + "audio-video-photography-production", + "business-intelligence", + "business-merchant-development", + "buying-planning-instock-management", + "corporate-operations", + "customer-service", + "data-science", + "database-administration", + "design", + "economics", + "editorial-writing-content-management", + "facilities-maintenance-real-estate", + "finance-accounting", + "fulfillment-associate", + "fulfillment-operations-management", + "fulfillment-warehouse-associate", + "hardware-development", + "human-resources", + "investigation-loss-prevention", + "leadership-development-training", + "legal", + "machine-learning-science", + "marketing-pr", + "medical-health-safety", + "operations-it-support-engineering", + "procurement", + "project-program-product-management-non-tech", + "project-program-product-management-technical", + "public-policy", + "public-relations", + "research-science", + "sales-advertising-account-management", + "software-development", + "solutions-architect", + "supply-chain-transportation-management", + "systems-quality-security-engineering" + ], + "in": "query", + "name": "category", + "type": "string", + "x-example": "software-development" + }, + { + "description": "ISO 3166-1 alpha-3 country code filter", + "in": "query", + "name": "country", + "type": "string", + "x-example": "USA" + }, + { + "description": "Page number, 1-based", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Results per page, max 100 (default 20)", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + }, + { + "description": "Sort order", + "enum": [ + "relevant", + "recent" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "relevant" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/amazonjobs.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Amazon Jobs search", + "tags": [ + "Amazon Jobs" + ] + } + }, + "/amazon/charts": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of a ranked Amazon chart (Best Sellers, New Releases, or Most Wished For) for a department or department subcategory on `amazon.com`. Discover valid department/node values with amazon-charts-categories.", + "operationId": "amazon-charts", + "parameters": [ + { + "description": "Chart type", + "enum": [ + "best_sellers", + "new_releases", + "most_wished_for" + ], + "in": "query", + "name": "chart", + "required": true, + "type": "string", + "x-example": "best_sellers" + }, + { + "description": "Amazon department slug", + "in": "query", + "name": "department", + "required": true, + "type": "string", + "x-example": "electronics" + }, + { + "description": "Numeric browse node id", + "in": "query", + "name": "node", + "type": "string", + "x-example": "172541" + }, + { + "description": "1-based page number", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/amazon.chartsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Amazon product charts", + "tags": [ + "Amazon" + ] + } + }, + "/amazon/charts/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the department and subcategory values amazon-charts accepts for a given chart. Omit department to list a chart's top-level departments; pass a department (and optionally a node) to get that category's own name plus its immediate child categories.", + "operationId": "amazon-charts-categories", + "parameters": [ + { + "description": "Chart type", + "enum": [ + "best_sellers", + "new_releases", + "most_wished_for" + ], + "in": "query", + "name": "chart", + "required": true, + "type": "string", + "x-example": "best_sellers" + }, + { + "description": "Amazon department slug", + "in": "query", + "name": "department", + "type": "string", + "x-example": "electronics" + }, + { + "description": "Numeric browse node id (requires department)", + "in": "query", + "name": "node", + "type": "string", + "x-example": "172541" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/amazon.chartCategoriesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Amazon chart categories", + "tags": [ + "Amazon" + ] + } + }, + "/amazon/product/{asin}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns product details for an Amazon ASIN on `amazon.com`, including pricing, availability, overview data, inline review samples, and descriptive content.", + "operationId": "amazon-product", + "parameters": [ + { + "description": "Amazon ASIN", + "in": "path", + "name": "asin", + "required": true, + "type": "string", + "x-example": "B0DGJ736JM" + }, + { + "default": "en_US", + "description": "Amazon language", + "enum": [ + "en_US" + ], + "in": "query", + "name": "language", + "type": "string" + }, + { + "default": "USD", + "description": "Amazon currency", + "enum": [ + "USD" + ], + "in": "query", + "name": "currency", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/amazon.productResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve Amazon product details", + "tags": [ + "Amazon" + ] + } + }, + "/amazon/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches `amazon.com` by keyword, with optional sort order and page. Each result card has the ASIN, title, link, image, price and list price, rating and review count, the bought-in-last-month figure, and flags for sponsored placement and free delivery.", + "operationId": "amazon-search", + "parameters": [ + { + "description": "Search keyword", + "in": "query", + "name": "k", + "required": true, + "type": "string", + "x-example": "apple watch" + }, + { + "description": "Sort order", + "in": "query", + "name": "s", + "type": "string", + "x-example": "review-rank" + }, + { + "description": "1-based page number", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/amazon.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Amazon products", + "tags": [ + "Amazon" + ] + } + }, + "/amazon/suggest/{keyword}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Amazon's search-box autocomplete suggestions for a keyword prefix on `amazon.com`, as a plain list of suggested search phrases such as `apple watch bands`.", + "operationId": "amazon-suggest", + "parameters": [ + { + "description": "Suggestion prefix", + "in": "path", + "name": "keyword", + "required": true, + "type": "string", + "x-example": "apple" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/amazon.suggestResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve Amazon search suggestions", + "tags": [ + "Amazon" + ] + } + }, + "/androidauthority/article": { + "get": { + "description": "Returns an Android Authority article by `url`, a canonical `androidauthority.com` address whose path is one slug ending in the numeric post id: title, description, publication and update times, section, authors, image and body `paragraphs`, with TL;DR and pros/cons bullets as separate entries. Section, tag and author pages are rejected, and an unknown post id returns not-found.", + "operationId": "androidauthority-article", + "parameters": [ + { + "description": "Canonical Android Authority article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.androidauthority.com/gemini-live-avatar-3715280/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Android Authority article content", + "tags": [ + "Android Authority" + ] + } + }, + "/androidauthority/headlines": { + "get": { + "description": "Returns the newest 10 to 20 stories from one Android Authority section hub. `section` is required and takes a slug such as `reviews`, `how-to`, `smartwatches` or `android-phones`. Each item has a title, URL, author and image; `summary` appears on the lead story of a hub, and `published_at` only on stories more than a day old.", + "operationId": "androidauthority-headlines", + "parameters": [ + { + "description": "Android Authority section slug", + "enum": [ + "news", + "reviews", + "best", + "how-to", + "features", + "deals", + "authority-insights", + "audio", + "computers-pc", + "gaming", + "technology", + "mobile", + "smart-home", + "streaming-entertainment", + "wearables", + "earbuds-headphones", + "chromebook", + "mac", + "pc-windows", + "emulation", + "handhelds", + "mobile-games", + "nintendo", + "playstation", + "xbox", + "smart-devices", + "smart-speakers", + "virtual-assistants", + "streaming-hardware", + "ai", + "mobility", + "privacy-security", + "vr-ar", + "fitness-trackers", + "smartwatches", + "android-apps", + "android-os", + "android-phones", + "android-tablets", + "carriers-plans", + "ios-apps", + "iphone-ipad", + "accessories", + "mobile-technology" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "news" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Android Authority section headlines", + "tags": [ + "Android Authority" + ] + } + }, + "/androidauthority/news": { + "get": { + "description": "Returns about 80 of the latest Android Authority stories from across the site, newest first, with no input needed. Each has a title, canonical URL, standfirst `summary`, exact publication time, byline `author` and lead image. The headlines endpoint covers a single section.", + "operationId": "androidauthority-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Android Authority top stories", + "tags": [ + "Android Authority" + ] + } + }, + "/androidauthority/sections": { + "get": { + "description": "Lists the 44 Android Authority sections that `androidauthority-headlines` accepts: the content-type hubs (`news`, `reviews`, `best`, `how-to`, `features`, `deals`, `authority-insights`), the top-level topic hubs and their sub-hubs. Each has a `slug`, display `name` and page `url`. Tag archives are not sections.", + "operationId": "androidauthority-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Android Authority sections", + "tags": [ + "Android Authority" + ] + } + }, + "/androidpolice/article": { + "get": { + "description": "Returns an Android Police article by `url`, a canonical address with a flat, single-slug path. The response has the title, authors, section, description, publication and update times, image and the readable body `paragraphs`.", + "operationId": "androidpolice-article", + "parameters": [ + { + "description": "Canonical Android Police article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.androidpolice.com/i-thought-my-galaxy-phone-was-slowing-down-until-disabled-this-setting/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Android Police article content", + "tags": [ + "Android Police" + ] + } + }, + "/androidpolice/author": { + "get": { + "description": "Returns a public author's byline metadata, biography, social links, and recent articles from a canonical author URL. Only the first page is covered.", + "operationId": "androidpolice-author", + "parameters": [ + { + "description": "Canonical Android Police author URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.androidpolice.com/author/jade-bryan-jardinico/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.androidpoliceAuthorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get an Android Police author profile", + "tags": [ + "Android Police" + ] + } + }, + "/androidpolice/headlines": { + "get": { + "description": "Returns recent Android Police headlines for one of 18 sections. `section` is required and takes a slug such as `news`, `phones`, `smart-home`, `ai-machine-learning` or `deals`. Each item has a title and URL, and may also carry a summary, author, publication time and image.", + "operationId": "androidpolice-headlines", + "parameters": [ + { + "description": "Android Police section slug", + "enum": [ + "news", + "phones", + "tablets", + "gadgets", + "accessories", + "apps", + "entertainment", + "productivity", + "utilities", + "ai-machine-learning", + "operating-systems", + "wearables", + "smart-home", + "smart-tv", + "carriers", + "deals", + "videos", + "awards" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "news" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Android Police section headlines", + "tags": [ + "Android Police" + ] + } + }, + "/androidpolice/news": { + "get": { + "description": "Returns the current Android Police top stories across the site, with no input needed. Each item has a title and URL, and may also carry the author, publication time, summary and image.", + "operationId": "androidpolice-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Android Police top stories", + "tags": [ + "Android Police" + ] + } + }, + "/androidpolice/sections": { + "get": { + "description": "Lists the 18 feed-backed sections in Android Police's primary navigation, from `news`, `phones` and `tablets` to `deals`, `videos` and `awards`. Each entry has a `slug`, a display `name` and the feed `url`, and the slugs are accepted by `androidpolice-headlines`.", + "operationId": "androidpolice-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Android Police sections", + "tags": [ + "Android Police" + ] + } + }, + "/anime/airing-schedule": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns upcoming anime episode broadcasts (episode number, air time, countdown, and the title), soonest first, paginated.", + "operationId": "anime-airing-schedule", + "parameters": [ + { + "description": "1-based page number, default 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Results per page, default 20, max 50", + "in": "query", + "name": "per_page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/anime.airingScheduleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Upcoming anime airing schedule", + "tags": [ + "Anime" + ] + } + }, + "/anime/character/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches anime and manga characters by name. Returns character summaries (name, native name, image, favourites), paginated.", + "operationId": "anime-character-search", + "parameters": [ + { + "description": "Search text", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "Frieren" + }, + { + "description": "1-based page number, default 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Results per page, default 10, max 50", + "in": "query", + "name": "per_page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/anime.characterSearchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search anime & manga characters", + "tags": [ + "Anime" + ] + } + }, + "/anime/character/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a character profile by AniList id: names, image, description, gender, age, blood type, birthday, favourites, and the titles the character appears in with their billed role.", + "operationId": "anime-character", + "parameters": [ + { + "description": "AniList character id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "176754" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/anime.characterResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get an anime/manga character", + "tags": [ + "Anime" + ] + } + }, + "/anime/rankings": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Ranks anime by `sort` (default `TRENDING_DESC`, or `POPULARITY_DESC`, `SCORE_DESC`, `FAVOURITES_DESC`, `START_DATE_DESC`, `UPDATED_AT_DESC`). Filter by `season`, `season_year` (1940 to 2100), `format`, `genre` and `status`. Paged with `page` and `per_page` (default 20, max 50); results carry titles, scores, popularity, episodes, studios and tags.", + "operationId": "anime-rankings", + "parameters": [ + { + "description": "Order: TRENDING_DESC, POPULARITY_DESC, SCORE_DESC, FAVOURITES_DESC, START_DATE_DESC, UPDATED_AT_DESC. Default TRENDING_DESC.", + "enum": [ + "TRENDING_DESC", + "POPULARITY_DESC", + "SCORE_DESC", + "FAVOURITES_DESC", + "START_DATE_DESC", + "UPDATED_AT_DESC" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Airing season filter: WINTER, SPRING, SUMMER, FALL.", + "enum": [ + "WINTER", + "SPRING", + "SUMMER", + "FALL" + ], + "in": "query", + "name": "season", + "type": "string" + }, + { + "description": "Airing year filter, 1940-2100.", + "in": "query", + "name": "season_year", + "type": "integer" + }, + { + "description": "Format filter: TV, TV_SHORT, MOVIE, SPECIAL, OVA, ONA, MUSIC.", + "enum": [ + "TV", + "TV_SHORT", + "MOVIE", + "SPECIAL", + "OVA", + "ONA", + "MUSIC" + ], + "in": "query", + "name": "format", + "type": "string" + }, + { + "description": "Genre filter, e.g. Fantasy.", + "in": "query", + "name": "genre", + "type": "string" + }, + { + "description": "Status filter: FINISHED, RELEASING, NOT_YET_RELEASED, CANCELLED, HIATUS.", + "enum": [ + "FINISHED", + "RELEASING", + "NOT_YET_RELEASED", + "CANCELLED", + "HIATUS" + ], + "in": "query", + "name": "status", + "type": "string" + }, + { + "description": "1-based page number, default 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Results per page, default 20, max 50", + "in": "query", + "name": "per_page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/anime.rankingsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Rank anime", + "tags": [ + "Anime" + ] + } + }, + "/anime/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches anime by free-text query. Returns entries: titles, scores, popularity, format, status, season, genres, tags, and studios.", + "operationId": "anime-search", + "parameters": [ + { + "description": "Search text", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "Frieren" + }, + { + "description": "Ordering: SEARCH_MATCH, POPULARITY_DESC, SCORE_DESC, TRENDING_DESC, FAVOURITES_DESC, START_DATE_DESC. Default SEARCH_MATCH.", + "enum": [ + "SEARCH_MATCH", + "POPULARITY_DESC", + "SCORE_DESC", + "TRENDING_DESC", + "FAVOURITES_DESC", + "START_DATE_DESC" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "1-based page number, default 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Results per page, default 10, max 50", + "in": "query", + "name": "per_page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/anime.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search anime", + "tags": [ + "Anime" + ] + } + }, + "/anime/title/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns an anime by AniList id: titles (romaji/english/native), MyAnimeList id, scores, popularity, favourites, format, status, season, episodes, duration, genres, ranked tags, studios, dates, description, images, and next-airing countdown. Pass mal=true to additionally enrich the response with the MyAnimeList community score (mal block: score on a 0-10 scale, plus scored-by count).", + "operationId": "anime-title", + "parameters": [ + { + "description": "AniList anime id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "154587" + }, + { + "description": "Enrich with the MyAnimeList community score (adds one fetch; omitted when the title has no MAL id)", + "in": "query", + "name": "mal", + "type": "boolean" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/anime.mediaResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get an anime", + "tags": [ + "Anime" + ] + } + }, + "/anime/title/{id}/characters": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Lists the cast of an anime by its AniList anime `id`, sorted by billed role. Each character has `name`, `native_name`, `role` (such as `MAIN` or `SUPPORTING`), `image`, `favourites` and `site_url`. Paged with `page` (default 1) and `per_page` (default 10, max 50), with `total` and `has_next_page`.", + "operationId": "anime-title-characters", + "parameters": [ + { + "description": "AniList anime id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "154587" + }, + { + "description": "1-based page number, default 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Results per page, default 10, max 50", + "in": "query", + "name": "per_page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/anime.charactersResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List an anime's characters", + "tags": [ + "Anime" + ] + } + }, + "/anime/title/{id}/recommendations": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns community-recommended titles for an anime, each with a recommendation rating and the full media entry, paginated.", + "operationId": "anime-title-recommendations", + "parameters": [ + { + "description": "AniList anime id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "154587" + }, + { + "description": "1-based page number, default 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Results per page, default 10, max 50", + "in": "query", + "name": "per_page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/anime.recommendationsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List an anime's recommendations", + "tags": [ + "Anime" + ] + } + }, + "/anime/title/{id}/staff": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Lists the people credited on an anime by its AniList anime `id`. Each person has `name`, `native_name`, `role` (their production role), `occupations`, `image` and `site_url`. Paged with `page` (default 1) and `per_page` (default 10, max 50), with `total` and `has_next_page`.", + "operationId": "anime-title-staff", + "parameters": [ + { + "description": "AniList anime id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "154587" + }, + { + "description": "1-based page number, default 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Results per page, default 10, max 50", + "in": "query", + "name": "per_page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/anime.staffResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List an anime's staff", + "tags": [ + "Anime" + ] + } + }, + "/apk-teardown/compare-ownership": { + "get": { + "description": "Compares two DIFFERENT completed jobs (not versions of the same app) for signals of common ownership -- shared signing certificate, SDK/analytics identifiers, and more.", + "operationId": "apkTeardownCompareOwnership", + "parameters": [ + { + "description": "First completed job ID; copy data.job_id returned by POST /apk-teardown/jobs", + "in": "query", + "name": "job_id_a", + "required": true, + "type": "string" + }, + { + "description": "Second completed job ID; copy data.job_id returned by another POST /apk-teardown/jobs", + "in": "query", + "name": "job_id_b", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/apkteardown.CompareOwnershipResponseDoc" + } + }, + "400": { + "description": "Missing job ids, or one/both jobs not found or not done", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Compare two apk-teardown jobs for evidence of common ownership", + "tags": [ + "AppInsights" + ] + } + }, + "/apk-teardown/diff": { + "get": { + "description": "Compares two already-completed jobs -- typically two versions of the same app -- and returns what changed (permissions, signing, SDKs, size, and more).", + "operationId": "apkTeardownDiff", + "parameters": [ + { + "description": "First completed job ID; copy data.job_id returned by POST /apk-teardown/jobs", + "in": "query", + "name": "job_id_a", + "required": true, + "type": "string" + }, + { + "description": "Second completed job ID; copy data.job_id returned by another POST /apk-teardown/jobs", + "in": "query", + "name": "job_id_b", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/apkteardown.DiffResponseDoc" + } + }, + "400": { + "description": "Missing job ids, or one/both jobs not found or not done", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Diff two completed apk-teardown jobs", + "tags": [ + "AppInsights" + ] + } + }, + "/apk-teardown/jobs": { + "post": { + "consumes": [ + "multipart/form-data" + ], + "description": "Uploads a single .apk/.xapk file (up to 400MB), or set file_url to have the server fetch it from an https:// URL instead -- exactly one of \"file\" or \"file_url\" must be given, not both. Enqueues a Tier 1 static-analysis job -- manifest, permissions, signing, SDK detection, tech stack, locales, and more. Poll the returned poll_path for the result, or set webhook_url for push delivery. Identical uploads (by sha256) within 48h return the existing job instead of re-running analysis. file_url is validated (https only, must resolve to a public address -- no loopback/private/link-local targets) and every redirect hop is re-validated the same way before being followed.", + "operationId": "apkTeardownSubmit", + "parameters": [ + { + "description": "APK or XAPK/APKS/APKM bundle file -- mutually exclusive with file_url", + "in": "formData", + "name": "file", + "type": "file" + }, + { + "description": "https:// URL to fetch the APK/bundle from server-side -- mutually exclusive with file", + "in": "formData", + "name": "file_url", + "type": "string" + }, + { + "description": "Declared filename for a file_url submission (must end .apk/.xapk/.apks/.apkm). Defaults to the URL path's basename when omitted.", + "in": "formData", + "name": "file_name", + "type": "string" + }, + { + "description": "Optional URL to receive a webhook POST when the job reaches a terminal state", + "in": "formData", + "name": "webhook_url", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/apkteardown.JobSubmitResponseDoc" + } + }, + "400": { + "description": "Missing/invalid file or file_url, oversized upload, or not a valid APK/ZIP", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too many apk-teardown jobs already in flight for this caller", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal error submitting the job", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "502": { + "description": "file_url could not be fetched", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Submit an APK for static teardown analysis", + "tags": [ + "AppInsights" + ] + } + }, + "/apk-teardown/jobs/{job_id}": { + "delete": { + "description": "Purges a job's metadata/result before its normal retention window expires. The uploaded binary is already gone by the time any job reaches a terminal state, so this only ever deletes job metadata, never a binary.", + "operationId": "apkTeardownDeleteJob", + "parameters": [ + { + "description": "Caller-owned job ID from data.job_id returned by POST /apk-teardown/jobs", + "in": "path", + "name": "job_id", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "400": { + "description": "job_id is required", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal error deleting the job", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Delete an apk-teardown job", + "tags": [ + "AppInsights" + ] + }, + "get": { + "description": "Returns the current status (queued, processing, done, failed, or lost) of a submitted job, and its full result once done.", + "operationId": "apkTeardownJobStatus", + "parameters": [ + { + "description": "Job ID from data.job_id returned by POST /apk-teardown/jobs; the response also supplies poll_path", + "in": "path", + "name": "job_id", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/apkteardown.JobStatusResponseDoc" + } + }, + "400": { + "description": "job_id is required", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Job not found or expired", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal error reading the job", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Poll an apk-teardown job's status/result", + "tags": [ + "AppInsights" + ] + } + }, + "/apk-teardown/timeline": { + "get": { + "description": "Compares 2+ completed jobs the caller asserts are versions of the same app and returns the consecutive pairwise diff for each version transition, sorted by version code.", + "operationId": "apkTeardownTimeline", + "parameters": [ + { + "description": "Comma-separated list of 2+ completed job IDs copied from data.job_id values returned by POST /apk-teardown/jobs", + "in": "query", + "name": "job_ids", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/apkteardown.TimelineResponseDoc" + } + }, + "400": { + "description": "Fewer than 2 job ids, or a job not found or not done", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Build a version timeline across 2+ apk-teardown jobs", + "tags": [ + "AppInsights" + ] + } + }, + "/apnews/article": { + "get": { + "description": "Returns public AP News article metadata and body paragraphs. The service does not bypass authentication or access controls. Billing is 2 credits, or 10 credits when browser rendering is required.", + "operationId": "apnews-article", + "parameters": [ + { + "description": "Canonical AP News article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://apnews.com/article/example-article-id" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get AP News article content", + "tags": [ + "AP News" + ] + } + }, + "/apnews/author": { + "get": { + "description": "Returns an AP News author's byline metadata, biography, and recent articles from a canonical author URL. The service does not bypass authentication or access controls. Billing is 1 credit, or 5 credits when browser rendering is required.", + "operationId": "apnews-author", + "parameters": [ + { + "description": "Canonical AP News author URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://apnews.com/author/lauran-neergaard" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.apNewsAuthorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get an AP News author profile", + "tags": [ + "AP News" + ] + } + }, + "/apnews/fact-check": { + "get": { + "description": "Returns current headlines from AP News' public Fact Check page. The service does not bypass authentication or access controls. Billing is 1 credit, or 5 credits when browser rendering is required.", + "operationId": "apnews-fact-check", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get AP News fact checks", + "tags": [ + "AP News" + ] + } + }, + "/apnews/headlines": { + "get": { + "description": "Returns AP News headlines from a public editorial hub. The service does not bypass authentication or access controls. Billing is 1 credit, or 5 credits when browser rendering is required.", + "operationId": "apnews-headlines", + "parameters": [ + { + "description": "AP News section slug", + "enum": [ + "ap-top-news", + "us-news", + "world-news", + "politics", + "business", + "technology", + "science", + "health", + "sports", + "entertainment", + "lifestyle" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "ap-top-news" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get AP News section headlines", + "tags": [ + "AP News" + ] + } + }, + "/apnews/news": { + "get": { + "description": "Returns AP News top stories from the public AP News Top News hub. The service does not bypass authentication or access controls. Billing is 1 credit, or 5 credits when browser rendering is required.", + "operationId": "apnews-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get AP News top stories", + "tags": [ + "AP News" + ] + } + }, + "/apnews/sections": { + "get": { + "description": "Lists the 11 AP News hubs accepted by `apnews-headlines`: `ap-top-news`, `us-news`, `world-news`, `politics`, `business`, `technology`, `science`, `health`, `sports`, `entertainment` and `lifestyle`. Each has a `slug`, display `name` and hub `url`. The Fact Check page is served by `apnews-fact-check` instead.", + "operationId": "apnews-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get AP News sections", + "tags": [ + "AP News" + ] + } + }, + "/apple-books/audiobook-series/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns series metadata and the full ordered list of audiobooks in the series from Apple Books' public catalog page. An audio-book-series is a catalog resource distinct from a book-series, even for the same conceptual series.", + "operationId": "apple-books-audiobook-series", + "parameters": [ + { + "description": "Apple Books numeric audiobook series ID", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "6442645726" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applebooks.audiobookSeriesResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Series not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve an Apple Books audiobook series and its full audiobook list", + "tags": [ + "AppleBooks" + ] + } + }, + "/apple-books/audiobook/charts": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the 40 audiobook rows Apple currently serves in its paid top chart for one storefront. `genre_id` narrows the page using an ID from `GET /apple-books/genres?media=audiobook`. The upstream page has no free/paid selector or pagination.", + "operationId": "apple-books-audiobook-charts", + "parameters": [ + { + "description": "Two-letter storefront code, default us", + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Audiobook genre ID. Allowed values: 50000042, 50000043, 50000040, 50000049, 50000044, 50000051, 50000052, 50000053, 50000069, 50000055, 50000054, 50000056", + "enum": [ + "50000042", + "50000043", + "50000040", + "50000049", + "50000044", + "50000051", + "50000052", + "50000053", + "50000069", + "50000055", + "50000054", + "50000056" + ], + "in": "query", + "name": "genre_id", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applebooks.audiobookChartsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve Apple Books audiobook chart rankings", + "tags": [ + "AppleBooks" + ] + } + }, + "/apple-books/audiobook/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches Apple Books audiobooks by `term`, which is required. `country` is the two-letter storefront code (default `us`), `lang` a language tag such as `en-us`, `limit` the result count (default 50, max 200) and `page` starts at 1. Results include `narrator`, `duration_seconds`, price, rating, genres and `preview_url`.", + "operationId": "apple-books-audiobook-search", + "parameters": [ + { + "description": "Search term", + "in": "query", + "name": "term", + "required": true, + "type": "string", + "x-example": "harry potter" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + }, + { + "description": "Number of audiobooks per page", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 + }, + { + "description": "Search page number (1-based)", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applebooks.audiobookSearchResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Apple Books audiobooks", + "tags": [ + "AppleBooks" + ] + } + }, + "/apple-books/audiobook/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns audiobook metadata from Apple Books, including narrator, duration, audio preview, and a cross-link to the ebook edition (when one exists).", + "operationId": "apple-books-audiobook", + "parameters": [ + { + "description": "Apple Books numeric audiobook ID", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "1442174040" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applebooks.audiobookResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Audiobook not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve Apple Books audiobook details", + "tags": [ + "AppleBooks" + ] + } + }, + "/apple-books/audiobook/{id}/reviews": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a page of an audiobook's customer reviews. The default first page is served from the audiobook's own catalog page; deeper pages (page>1 or a larger limit) page through Apple's review API directly, up to 20 per page.", + "operationId": "apple-books-audiobook-reviews", + "parameters": [ + { + "description": "Apple Books numeric audiobook ID", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "1442174040" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + }, + { + "description": "Review page number, default 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Reviews per page, default 10, max 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applebooks.audiobookReviewsResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Audiobook not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve Apple Books audiobook customer reviews", + "tags": [ + "AppleBooks" + ] + } + }, + "/apple-books/audiobook/{id}/similar": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the 'Customers Also Bought' audiobooks shown on the Apple Books page of one audiobook, identified by its numeric `id`. `country` (default `us`) and `lang` (such as `en-us`) choose the storefront and language. Each item has name, author, `narrator`, `duration_seconds`, price, rating and `series_name`.", + "operationId": "apple-books-audiobook-similar", + "parameters": [ + { + "description": "Apple Books numeric audiobook ID", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "1442174040" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applebooks.audiobookSimilarResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Audiobook not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve \"Customers Also Bought\" audiobooks", + "tags": [ + "AppleBooks" + ] + } + }, + "/apple-books/author/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns an Apple Books author by numeric author `id`: name, URL, genres, their ebooks and, where available, audiobooks. Books carry details such as ISBN, page count, publisher, price, rating and series; audiobooks add narrator, duration and preview. `country` is a two-letter storefront code (default `us`) and `lang` a language tag such as `en-us`.", + "operationId": "apple-books-author", + "parameters": [ + { + "description": "Apple Books numeric author ID", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "79595314" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applebooks.authorResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Author not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve an Apple Books author's bibliography", + "tags": [ + "AppleBooks" + ] + } + }, + "/apple-books/book/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns book metadata from Apple Books, including ISBN, page count, publisher, audience, rating histogram, and series linkage.", + "operationId": "apple-books-book", + "parameters": [ + { + "description": "Apple Books numeric book ID", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "1037193578" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applebooks.bookResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Book not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve Apple Books book details", + "tags": [ + "AppleBooks" + ] + } + }, + "/apple-books/book/{id}/reviews": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a page of a book's customer reviews. The default first page is served from the book's own catalog page; deeper pages (page>1 or a larger limit) page through Apple's review API directly, up to 20 per page.", + "operationId": "apple-books-book-reviews", + "parameters": [ + { + "description": "Apple Books numeric book ID", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "1037193578" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + }, + { + "description": "Review page number, default 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Reviews per page, default 10, max 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applebooks.reviewsResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Book not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve Apple Books customer reviews", + "tags": [ + "AppleBooks" + ] + } + }, + "/apple-books/book/{id}/similar": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the 'Customers Also Bought' books shown on the Apple Books page of one book, identified by its numeric `id`. `country` (default `us`) and `lang` (such as `en-us`) choose the storefront and language. Each item has name, author, `publisher`, `isbn`, `page_count`, price, rating and `series_sequence`.", + "operationId": "apple-books-book-similar", + "parameters": [ + { + "description": "Apple Books numeric book ID", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "1037193578" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applebooks.similarResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Book not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve \"Customers Also Bought\" books", + "tags": [ + "AppleBooks" + ] + } + }, + "/apple-books/charts": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Apple Books ebook chart rankings for `collection`, `top-free` (default) or `top-paid`. Omit `genre` for all genres, or use one of the discovered ebook category IDs. `country` defaults to `us`; `limit` defaults to 50 and maxes at 200. Each entry has `name`, author, `genres`, `release_date`, `artwork_url` and `url`.", + "operationId": "apple-books-charts", + "parameters": [ + { + "description": "Chart collection. Allowed values: top-free, top-paid", + "enum": [ + "top-free", + "top-paid" + ], + "in": "query", + "name": "collection", + "type": "string", + "x-example": "top-free" + }, + { + "description": "Optional ebook genre ID. Allowed values: 9008, 9009, 9026, 9027, 9028, 9031, 9025, 9015, 11086, 9032, 9002, 9034, 9018, 9003, 9020, 9035, 11165. Use apple_books_genres with media=book to discover names.", + "enum": [ + 9008, + 9009, + 9026, + 9027, + 9028, + 9031, + 9025, + 9015, + 11086, + 9032, + 9002, + 9034, + 9018, + 9003, + 9020, + 9035, + 11165 + ], + "in": "query", + "name": "genre", + "type": "integer", + "x-example": 9031 + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Number of chart items to return", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applebooks.chartsResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve Apple Books chart rankings", + "tags": [ + "AppleBooks" + ] + } + }, + "/apple-books/genres": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Reads every category link from Apple's current chart page. The ebook and audiobook genre ID spaces differ; pass `media=book` before filtering ebook charts or `media=audiobook` before filtering audiobook charts.", + "operationId": "apple-books-genres", + "parameters": [ + { + "description": "Media taxonomy: book or audiobook", + "enum": [ + "book", + "audiobook" + ], + "in": "query", + "name": "media", + "required": true, + "type": "string", + "x-example": "audiobook" + }, + { + "description": "Two-letter storefront code, default us", + "in": "query", + "name": "country", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applebooks.genresResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Apple Books chart genres", + "tags": [ + "AppleBooks" + ] + } + }, + "/apple-books/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches Apple Books ebooks by `term`, which is required. `country` is the two-letter storefront code (default `us`), `lang` a language tag such as `en-us`, `limit` the result count (default 50, max 200) and `page` starts at 1. Results include `isbn`, `publisher`, `page_count`, price, rating, genres and series details.", + "operationId": "apple-books-search", + "parameters": [ + { + "description": "Search term", + "in": "query", + "name": "term", + "required": true, + "type": "string", + "x-example": "harry potter" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + }, + { + "description": "Number of books per page", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 + }, + { + "description": "Search page number (1-based)", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applebooks.searchResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Apple Books titles", + "tags": [ + "AppleBooks" + ] + } + }, + "/apple-books/series/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns an Apple Books series by its numeric `id`: the series `name` and `url`, and its books in series order. Each book has `series_sequence`, author, `publisher`, `isbn`, `page_count`, price and rating. `country` (default `us`) and `lang` choose the storefront and language.", + "operationId": "apple-books-series", + "parameters": [ + { + "description": "Apple Books numeric series ID", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "1044374793" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applebooks.seriesResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Series not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve an Apple Books series and its full book list", + "tags": [ + "AppleBooks" + ] + } + }, + "/apple-jobs/job": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one Apple Careers posting by its job id (the `id` field returned by search, e.g. `200674676-0836` for a specific requisition or `PIPE-200314122` for an evergreen/pipeline retail role).", + "operationId": "apple-jobs-job", + "parameters": [ + { + "description": "Apple job id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "200674676-0836" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applejobs.jobResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Apple Jobs single posting", + "tags": [ + "Apple Jobs" + ] + } + }, + "/apple-jobs/locations": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Discovery endpoint for apple-jobs-search's `location` parameter, whose accepted values are a closed set Apple itself defines (its own `-` location ids -- free-text location names are rejected). Apple exposes no bulk \"list everything\" option for this; the only lookup is a fuzzy search capped at 10 results per call covering four granularities (country, state/province, metro area, city) with no empty-input listing mode. With no `q`, this returns the full country-level value space (206 values, live-verified) as a static list -- the granularity apple-jobs-search's own examples use and nearly every caller needs. With `q` supplied, this instead looks up Apple's own location filter live so callers can discover state/metro/city-level values for finer filtering; results at those deeper levels may include more than one candidate and are ranked by Apple's own relevance, not alphabetically.", + "operationId": "apple-jobs-locations", + "parameters": [ + { + "description": "Optional free-text location search. Omit to get the full country-level list; supply to live-search state/metro/city-level values too (e.g. a city name).", + "in": "query", + "name": "q", + "type": "string", + "x-example": "singapore" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applejobs.locationsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Apple Jobs location discovery", + "tags": [ + "Apple Jobs" + ] + } + }, + "/apple-jobs/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches Apple's public careers site (jobs.apple.com) via its server-rendered search page's embedded job data. Page size is fixed by Apple at 20 results. Search results carry identity/location/team metadata only — call the job endpoint for the full description and qualifications.", + "operationId": "apple-jobs-search", + "parameters": [ + { + "description": "Search query", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "software engineer" + }, + { + "description": "Location filter in Apple's own slug format, e.g. united-states-USA or singapore-SGP. Free-text location names are not accepted -- call apple-jobs-locations to discover valid values.", + "in": "query", + "name": "location", + "type": "string", + "x-example": "united-states-USA" + }, + { + "description": "Page number, 1-based", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applejobs.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Apple Jobs search", + "tags": [ + "Apple Jobs" + ] + } + }, + "/apple-maps/autocomplete": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Apple Maps typeahead suggestions for a partial query near a coordinate: query completions, matching businesses (resolved to the same place summary the search endpoint returns, with the place ID the place endpoint takes), and addresses.", + "operationId": "apple-maps-autocomplete", + "parameters": [ + { + "description": "Partial search text to complete", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "blue bot" + }, + { + "description": "Center latitude the suggestions are biased to", + "in": "query", + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7749 + }, + { + "description": "Center longitude the suggestions are biased to", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.4194 + }, + { + "description": "Viewport size in degrees around the center. Defaults to 0.05; minimum 0.001, maximum 5.", + "in": "query", + "name": "span", + "type": "number", + "x-example": 0.05 + }, + { + "description": "Display language as a BCP 47 tag. Defaults to en-US.", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-US" + }, + { + "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applemaps.autocompleteResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Apple Maps search suggestions for a partial query", + "tags": [ + "Apple Maps" + ] + } + }, + "/apple-maps/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the \"Find Nearby\" browse categories Apple Maps offers for an area (for example Restaurants, Coffee Shops, Gas Stations, Hotels, Parking, Grocery Stores), each with the key and name the category-search endpoint takes. The set is location-aware.", + "operationId": "apple-maps-categories", + "parameters": [ + { + "description": "Center latitude", + "in": "query", + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7749 + }, + { + "description": "Center longitude", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.4194 + }, + { + "description": "Viewport size in degrees around the center. Defaults to 0.05; minimum 0.001, maximum 5.", + "in": "query", + "name": "span", + "type": "number", + "x-example": 0.05 + }, + { + "description": "Display language as a BCP 47 tag. Defaults to en-US.", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-US" + }, + { + "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applemaps.categoriesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Apple Maps browse categories for an area", + "tags": [ + "Apple Maps" + ] + } + }, + "/apple-maps/category-search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns places in one browse category near a coordinate without a keyword, in the same shape as the search endpoint (place summaries, region, relocation flag, and the refinement filters block). The category is a name from the categories endpoint for the same area (case-insensitive) or its key; an unknown name returns 400 listing the categories available there. Filters and sort work exactly as on the search endpoint.", + "operationId": "apple-maps-category-search", + "parameters": [ + { + "description": "Category name (e.g. Coffee Shops, Restaurants) or key from /apple-maps/categories for the same area", + "in": "query", + "name": "category", + "required": true, + "type": "string", + "x-example": "Coffee Shops" + }, + { + "description": "Search center latitude", + "in": "query", + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7749 + }, + { + "description": "Search center longitude", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.4194 + }, + { + "description": "Search viewport size in degrees around the center. Defaults to 0.05; minimum 0.001, maximum 5.", + "in": "query", + "name": "span", + "type": "number", + "x-example": 0.05 + }, + { + "description": "Max places returned. Defaults to 25, maximum 100.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 25 + }, + { + "description": "Display language as a BCP 47 tag. Defaults to en-US.", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-US" + }, + { + "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + }, + { + "description": "Comma-separated filter keys from the filters block of an unfiltered category search for the same category and area. Unknown keys return 400 listing the available keys. Costs a second upstream call.", + "in": "query", + "name": "filters", + "type": "string", + "x-example": "OPEN_NOW" + }, + { + "description": "Result order. Costs a second upstream call.", + "enum": [ + "best_match", + "distance", + "ratings" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "ratings" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applemaps.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Browse one Apple Maps category near a coordinate", + "tags": [ + "Apple Maps" + ] + } + }, + "/apple-maps/directions": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Apple Maps routes between an origin and a destination, with optional intermediate stops, for driving, walking, or cycling. Each route carries its name, whether it is Apple's main or an alternate route, distance, live/historic/free-flow durations, toll and highway flags, Apple's route description and traffic note, and per-leg turn-by-turn steps (maneuver, road, shield, instruction text, distance, duration); detail=full adds each leg's path as coordinates. Departure time and avoid-tolls/highways/stairs preferences are supported. Transit routing is not available.", + "operationId": "apple-maps-directions", + "parameters": [ + { + "description": "Origin latitude", + "in": "query", + "name": "origin_latitude", + "required": true, + "type": "number", + "x-example": 37.7749 + }, + { + "description": "Origin longitude", + "in": "query", + "name": "origin_longitude", + "required": true, + "type": "number", + "x-example": -122.4194 + }, + { + "description": "Destination latitude", + "in": "query", + "name": "destination_latitude", + "required": true, + "type": "number", + "x-example": 37.8199 + }, + { + "description": "Destination longitude", + "in": "query", + "name": "destination_longitude", + "required": true, + "type": "number", + "x-example": -122.4783 + }, + { + "description": "Intermediate stops as lat,lng pairs separated by |, at most 8", + "in": "query", + "name": "via", + "type": "string", + "x-example": "37.7955,-122.3937" + }, + { + "description": "Travel mode. Defaults to driving.", + "enum": [ + "driving", + "walking", + "cycling" + ], + "in": "query", + "name": "mode", + "type": "string", + "x-example": "driving" + }, + { + "description": "Driving only: prefer routes without tolls", + "in": "query", + "name": "avoid_tolls", + "type": "boolean", + "x-example": false + }, + { + "description": "Driving only: prefer routes without highways", + "in": "query", + "name": "avoid_highways", + "type": "boolean", + "x-example": false + }, + { + "description": "Walking only: prefer routes without stairs", + "in": "query", + "name": "avoid_stairs", + "type": "boolean", + "x-example": false + }, + { + "description": "Departure time as RFC 3339 for traffic-aware estimates. Defaults to now.", + "in": "query", + "name": "depart_at", + "type": "string", + "x-example": "2026-09-07T08:30:00Z" + }, + { + "description": "How much of each route to return. Defaults to steps.", + "enum": [ + "summary", + "steps", + "full" + ], + "in": "query", + "name": "detail", + "type": "string", + "x-example": "steps" + }, + { + "description": "Language for road names and instructions as a BCP 47 tag. Defaults to en-US.", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-US" + }, + { + "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applemaps.directionsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Apple Maps driving, walking, or cycling directions", + "tags": [ + "Apple Maps" + ] + } + }, + "/apple-maps/eta": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Apple Maps travel-time estimates between an origin and a destination: for each transport type Apple reports (driving always; walking when requested), the live best estimate, the historic and free-flow durations, and the route distance. Cheaper than the directions endpoint when only the time and distance are needed. Apple has no cycling ETA; use the directions endpoint for cycling.", + "operationId": "apple-maps-eta", + "parameters": [ + { + "description": "Origin latitude", + "in": "query", + "name": "origin_latitude", + "required": true, + "type": "number", + "x-example": 37.7749 + }, + { + "description": "Origin longitude", + "in": "query", + "name": "origin_longitude", + "required": true, + "type": "number", + "x-example": -122.4194 + }, + { + "description": "Destination latitude", + "in": "query", + "name": "destination_latitude", + "required": true, + "type": "number", + "x-example": 37.8199 + }, + { + "description": "Destination longitude", + "in": "query", + "name": "destination_longitude", + "required": true, + "type": "number", + "x-example": -122.4783 + }, + { + "description": "Travel mode. Defaults to driving.", + "enum": [ + "driving", + "walking" + ], + "in": "query", + "name": "mode", + "type": "string", + "x-example": "driving" + }, + { + "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applemaps.etaResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Apple Maps travel-time estimates between two points", + "tags": [ + "Apple Maps" + ] + } + }, + "/apple-maps/guides": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the Apple Guides home page for the Worldwide scope or one city: the featured guide, the guide carousels (expert recommendations, latest, and similar rows), the city shortcut list, and the browse-by-publisher list. Each guide carries its id (the value the guide endpoint takes), title, description, last-modified time, place count, cover photo, source link, and publisher; each publisher carries its id, name, subtitle, website, and guide count.", + "operationId": "apple-maps-guides", + "parameters": [ + { + "description": "City id from /apple-maps/guides/cities. Omit for the Worldwide guides home.", + "in": "query", + "name": "city_id", + "type": "string", + "x-example": "8077516530309122779" + }, + { + "description": "Display language as a BCP 47 tag, e.g. en-US, fr-FR. Defaults to en-US.", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-US" + }, + { + "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applemaps.guidesHomeResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Browse the Apple Guides home page worldwide or for one city", + "tags": [ + "Apple Maps" + ] + } + }, + "/apple-maps/guides/cities": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the Apple Guides city picker: every region (North America, Europe, Australia, and any Apple adds) with the cities it publishes guides for, each with its id, country, coordinates, and cover photo. Pass a city id to the guides home, publishers, or publisher endpoints to scope them to that city; omit it for the Worldwide scope.", + "operationId": "apple-maps-guides-cities", + "parameters": [ + { + "description": "Display language as a BCP 47 tag, e.g. en-US, fr-FR. Region and city names follow it. Defaults to en-US.", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-US" + }, + { + "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applemaps.guidesCitiesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List the regions and cities Apple Guides cover", + "tags": [ + "Apple Maps" + ] + } + }, + "/apple-maps/guides/guide": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one Apple Guide (curated collection) by id: title, description, last-modified time, cover photos, source link, publisher, and every place in the guide with the publisher's blurb for it plus the place's Apple place ID, name, category, coordinates, address, phone, website, rating, price level, hours, and photo.", + "operationId": "apple-maps-guide", + "parameters": [ + { + "description": "Guide id: from the guides home, a publisher page, a place's guide_ids, or the curated= value in a maps.apple.com/guides URL", + "in": "query", + "name": "guide_id", + "required": true, + "type": "string", + "x-example": "13100041759208417726" + }, + { + "description": "Display language as a BCP 47 tag, e.g. en-US, fr-FR. Defaults to en-US.", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-US" + }, + { + "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applemaps.guideResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get one Apple Guide with its places", + "tags": [ + "Apple Maps" + ] + } + }, + "/apple-maps/guides/lookup": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns guide summaries (id, title, description, last-modified time, place count, cover photo, source link) for up to 20 guide ids in one call, for example the guide_ids a place carries. Ids Apple does not return are listed in not_found. Publisher details are not part of this lookup; use the guide endpoint for a single guide's publisher and places.", + "operationId": "apple-maps-guides-lookup", + "parameters": [ + { + "description": "Comma-separated Apple guide ids, 1 to 20", + "in": "query", + "name": "guide_ids", + "required": true, + "type": "string", + "x-example": "13100041759208417726,17954826775154719886" + }, + { + "description": "Display language as a BCP 47 tag. Defaults to en-US.", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-US" + }, + { + "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applemaps.guidesLookupResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Resolve up to 20 Apple Guide ids to guide summaries", + "tags": [ + "Apple Maps" + ] + } + }, + "/apple-maps/guides/nearby": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the guides Apple suggests for the area around a coordinate (\"Guides We Love\" for that location) as guide summaries, plus the Apple Guides city the area belongs to (with the city id the guides home endpoint takes). A coordinate outside any guides city returns an empty list.", + "operationId": "apple-maps-guides-nearby", + "parameters": [ + { + "description": "Latitude of the area", + "in": "query", + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7749 + }, + { + "description": "Longitude of the area", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.4194 + }, + { + "description": "Viewport size in degrees around the center. Defaults to 0.05; minimum 0.001, maximum 5.", + "in": "query", + "name": "span", + "type": "number", + "x-example": 0.05 + }, + { + "description": "Display language as a BCP 47 tag. Defaults to en-US.", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-US" + }, + { + "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applemaps.guidesNearbyResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get the Apple Guides curated for the area around a coordinate", + "tags": [ + "Apple Maps" + ] + } + }, + "/apple-maps/guides/publisher": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one Apple Guides publisher by id: name, subtitle, website, guide count, the cities the publisher offers as filters, and its guides (each with id, title, description, last-modified time, place count, cover photo, and source link). Pass one of the publisher's own city ids as city_id to return only the guides for that city.", + "operationId": "apple-maps-guides-publisher", + "parameters": [ + { + "description": "Publisher id: from the guides home or publishers list, a guide's publisher.id, or the publisher= value in a maps.apple.com/guides URL", + "in": "query", + "name": "publisher_id", + "required": true, + "type": "string", + "x-example": "1706564968711360917" + }, + { + "description": "Restrict to one city: an id from this publisher's own cities list", + "in": "query", + "name": "city_id", + "type": "string", + "x-example": "18366846785603624515" + }, + { + "description": "Display language as a BCP 47 tag, e.g. en-US, fr-FR. Defaults to en-US.", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-US" + }, + { + "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applemaps.publisherResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get one Apple Guides publisher and its guides", + "tags": [ + "Apple Maps" + ] + } + }, + "/apple-maps/guides/publishers": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the Apple Guides \"Browse by Publisher\" list for the Worldwide scope or one city, sorted by name: each publisher's id (the value the publisher endpoint takes), name, subtitle, website, and number of guides. With no city_id this is the complete enumeration of every publisher Apple lists, usable as the id lookup table for the publisher endpoint.", + "operationId": "apple-maps-guides-publishers", + "parameters": [ + { + "description": "City id from /apple-maps/guides/cities. Omit for the Worldwide publisher list.", + "in": "query", + "name": "city_id", + "type": "string", + "x-example": "8077516530309122779" + }, + { + "description": "Display language as a BCP 47 tag, e.g. en-US, fr-FR. Defaults to en-US.", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-US" + }, + { + "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applemaps.guidesPublishersResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Apple Guides publishers worldwide or for one city", + "tags": [ + "Apple Maps" + ] + } + }, + "/apple-maps/place": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one Apple Maps place by its place ID: name, type, category taxonomy, coordinates, formatted and structured address, phone numbers, website, rating and review count, price level, weekly opening hours, amenities (payment, accessibility, parking, and similar yes/no attributes), photos, review snippets (text, rating, time, and source link, without reviewer identity), the business-claim link, and the IDs of Apple Guides that include the place. Accepts either the external place ID (starts with I, the place-id= value in a maps.apple.com/place URL) or the numeric ID from a search result.", + "operationId": "apple-maps-place", + "parameters": [ + { + "description": "Apple place ID: external form (I594FECA0B369D14A) or numeric id from a search result", + "in": "query", + "name": "place_id", + "required": true, + "type": "string", + "x-example": "I594FECA0B369D14A" + }, + { + "description": "Display language as a BCP 47 tag, e.g. en-US, ja-JP, de-DE. Defaults to en-US.", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-US" + }, + { + "description": "Two-letter ISO 3166-1 country code selecting Apple's regional catalog. Defaults to US.", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applemaps.placeResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get one Apple Maps place's full detail", + "tags": [ + "Apple Maps" + ] + } + }, + "/apple-maps/place/photos": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns all of a place's photos (the place endpoint caps at 20): the business cover photo first when present, then the hero photo, then every categorized photo with its category (Food & Drink, Interior, Exterior, ...), width and height.", + "operationId": "apple-maps-place-photos", + "parameters": [ + { + "description": "Apple place ID (external I... form or numeric id)", + "in": "query", + "name": "place_id", + "required": true, + "type": "string", + "x-example": "I594FECA0B369D14A" + }, + { + "description": "Display language as a BCP 47 tag, e.g. en-US. Defaults to en-US.", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-US" + }, + { + "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applemaps.placePhotosResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List every photo Apple Maps carries for a place", + "tags": [ + "Apple Maps" + ] + } + }, + "/apple-maps/places": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the same full detail as the place endpoint for up to 20 place IDs in a single upstream call, plus the list of requested IDs Apple did not return. Accepts the external I... form and the numeric id interchangeably.", + "operationId": "apple-maps-places", + "parameters": [ + { + "description": "Comma-separated Apple place ids, 1 to 20", + "in": "query", + "name": "place_ids", + "required": true, + "type": "string", + "x-example": "I594FECA0B369D14A,243355970509228267" + }, + { + "description": "Display language as a BCP 47 tag. Defaults to en-US.", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-US" + }, + { + "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applemaps.placesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get full detail for up to 20 Apple Maps places in one call", + "tags": [ + "Apple Maps" + ] + } + }, + "/apple-maps/reverse-geocode": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Apple Maps' address record for a coordinate: the matched place name and type (an address, street, or area of interest such as a neighborhood), the formatted and structured address, the matched center, the IANA timezone, and the display region.", + "operationId": "apple-maps-reverse-geocode", + "parameters": [ + { + "description": "Latitude to reverse-geocode", + "in": "query", + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7749 + }, + { + "description": "Longitude to reverse-geocode", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.4194 + }, + { + "description": "Display language as a BCP 47 tag. Defaults to en-US.", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-US" + }, + { + "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applemaps.reverseGeocodeResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Reverse-geocode a coordinate with Apple Maps", + "tags": [ + "Apple Maps" + ] + } + }, + "/apple-maps/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Apple Maps places matching a keyword, business name, category, or street address near a coordinate. Each place carries its Apple place ID (the value the place endpoint takes), name, category, coordinates, formatted and structured address, phone, website, rating and review count, price level, weekly opening hours, and a hero photo. Apple returns a bounded set per viewport (around 25 places for the default span) with no pagination; widen the span or move the center to cover more area. When nothing matches near the center Apple may relocate the search to a default region, reported by relocated=true and the region bounds. The response's filters block lists the refinement chips Apple offers for this query and area (open now, top rated, in guides, cuisines, price bands, amenities, accolades, sort); pass their keys back as filters and sort to refine the same search.", + "operationId": "apple-maps-search", + "parameters": [ + { + "description": "Keyword, business name, category, or street address to search for", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "coffee" + }, + { + "description": "Search center latitude", + "in": "query", + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7749 + }, + { + "description": "Search center longitude", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.4194 + }, + { + "description": "Search viewport size in degrees of latitude/longitude around the center. Defaults to 0.05 (roughly a 5km box); minimum 0.001, maximum 5.", + "in": "query", + "name": "span", + "type": "number", + "x-example": 0.05 + }, + { + "description": "Max places returned. Defaults to 25, maximum 100.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 25 + }, + { + "description": "Display language as a BCP 47 tag, e.g. en-US, ja-JP, de-DE. Defaults to en-US.", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-US" + }, + { + "description": "Two-letter ISO 3166-1 country code selecting Apple's regional catalog. Defaults to US.", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + }, + { + "description": "Comma-separated filter keys from the filters block of an unfiltered search for the same query and area, e.g. OPEN_NOW, TOP_RATED, FEATURED_IN_GUIDES, PRICE_RANGE_MODERATE, modern_pizza_restaurant, ACCEPTS_CREDIT_CARDS. Unknown keys return 400 listing the available keys. Costs a second upstream search.", + "in": "query", + "name": "filters", + "type": "string", + "x-example": "OPEN_NOW,modern_pizza_restaurant" + }, + { + "description": "Result order. Costs a second upstream search.", + "enum": [ + "best_match", + "distance", + "ratings" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "ratings" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applemaps.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Apple Maps places near a coordinate", + "tags": [ + "Apple Maps" + ] + } + }, + "/apple-maps/transit-departures": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a transit stop or station's systems (e.g. BART, Muni Metro), lines (name, shield, color), and the upcoming departures Apple Maps shows, each with the line, headsign, direction, scheduled and live times, and real-time status. Takes the stop's Apple place ID (find stops with the search endpoint, e.g. a station name). A place that is not a transit stop returns 404.", + "operationId": "apple-maps-transit-departures", + "parameters": [ + { + "description": "Apple place ID of a transit stop or station (external I... form or numeric id)", + "in": "query", + "name": "place_id", + "required": true, + "type": "string", + "x-example": "5261664738367631956" + }, + { + "description": "Display language as a BCP 47 tag, e.g. en-US. Defaults to en-US.", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-US" + }, + { + "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applemaps.transitDeparturesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a transit stop's lines and live departures from Apple Maps", + "tags": [ + "Apple Maps" + ] + } + }, + "/apple-maps/venue/browse": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns an indoor venue's directory (mall, airport, stadium: categories such as Clothes, Shoes, Food, All Shops with their subcategories and levels) and, when a category is given, the places inside the venue for that category with the same summary shape as search. Find venues with the search endpoint; a place without a directory returns 404, an unknown category returns 400 listing the available ones.", + "operationId": "apple-maps-venue-browse", + "parameters": [ + { + "description": "Apple place ID of the venue (external I... form or numeric id)", + "in": "query", + "name": "place_id", + "required": true, + "type": "string", + "x-example": "14643260860569849804" + }, + { + "description": "Directory category or subcategory to browse, by name (case-insensitive) or key from the venue's directory. Omit to list the directory only.", + "in": "query", + "name": "category", + "type": "string", + "x-example": "Clothes" + }, + { + "description": "Max places returned. Defaults to 25, maximum 100.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 25 + }, + { + "description": "Display language as a BCP 47 tag, e.g. en-US. Defaults to en-US.", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-US" + }, + { + "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applemaps.venueBrowseResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Browse the stores and places inside a venue on Apple Maps", + "tags": [ + "Apple Maps" + ] + } + }, + "/apple-podcasts/charts": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Apple Podcasts show chart rankings for a `collection`, either `toppodcasts` or `topaudiopodcasts`. Narrow with `category` (a numeric Apple podcast genre ID), `country` and `limit`. Each entry has `name`, `artist_name`, `genre`, `genre_id`, `description`, `release_date`, `artwork_url` and `url`.", + "operationId": "apple-podcasts-charts", + "parameters": [ + { + "description": "Chart collection", + "in": "query", + "name": "collection", + "type": "string", + "x-example": "toppodcasts" + }, + { + "description": "Numeric Apple podcast genre ID", + "in": "query", + "name": "category", + "type": "integer", + "x-example": 1303 + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Number of chart items to return", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applepodcasts.chartsResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve Apple Podcasts chart rankings", + "tags": [ + "ApplePodcasts" + ] + } + }, + "/apple-podcasts/charts/rankings": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Apple Podcasts chart rankings from the modern podcasts.apple.com charts page, covering chart algorithms (`top`, `top-subscriber`, `top-series`) crossed with entity types (`podcasts`, `podcast-episodes`, `podcast-channels`) and an optional genre filter. A richer, differently-sourced capability than the legacy RSS-based `/apple-podcasts/charts` endpoint.", + "operationId": "apple-podcasts-charts-rankings", + "parameters": [ + { + "description": "Chart algorithm. Allowed values: `top`, `top-subscriber`, `top-series`. Default `top`.", + "in": "query", + "name": "chart", + "type": "string", + "x-example": "top" + }, + { + "description": "Entity type. Allowed values: `podcasts`, `podcast-episodes`, `podcast-channels`. Default `podcasts`.", + "in": "query", + "name": "type", + "type": "string", + "x-example": "podcasts" + }, + { + "description": "Optional Apple Podcasts genre ID to filter the chart, e.g. 1303 for Comedy", + "in": "query", + "name": "genre", + "type": "integer", + "x-example": 1303 + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Number of chart entries to return, default 24, max 200", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 24 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applepodcasts.chartRankingsResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve Apple Podcasts chart rankings by algorithm, type, and genre", + "tags": [ + "ApplePodcasts" + ] + } + }, + "/apple-podcasts/episodes/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches Apple Podcasts episodes by `term`, which is required. `country`, `lang`, `limit` and `page` (1-based) refine the search. Each episode has its `title`, `show_name`, `show_id`, `description`, `duration_millis`, `release_date`, `episode_url`, `preview_url`, `feed_url`, genres and artwork.", + "operationId": "apple-podcasts-episodes-search", + "parameters": [ + { + "description": "Search term", + "in": "query", + "name": "term", + "required": true, + "type": "string", + "x-example": "hardcore history" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + }, + { + "description": "Number of episodes per page", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 + }, + { + "description": "Search page number (1-based)", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applepodcasts.episodeSearchResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Apple Podcasts episodes", + "tags": [ + "ApplePodcasts" + ] + } + }, + "/apple-podcasts/new": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the curated editorial shelves from podcasts.apple.com/{country}/new (New Shows, New Seasons, New Trailers, Essentials, and other seasonal spotlights). Shelves that merely mirror a Charts Rankings query are omitted here since `/apple-podcasts/charts/rankings` already covers that data.", + "operationId": "apple-podcasts-new", + "parameters": [ + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applepodcasts.newShelvesResponseDoc" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve Apple Podcasts curated \"New\" editorial shelves", + "tags": [ + "ApplePodcasts" + ] + } + }, + "/apple-podcasts/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches Apple Podcasts shows by `term`, which is required. `country`, `lang`, `limit` and `page` (1-based) refine the search. Each show has `collection_name`, `artist_name`, `feed_url`, `primary_genre_name`, `genres`, `track_count`, `release_date`, content advisory rating and several artwork sizes.", + "operationId": "apple-podcasts-search", + "parameters": [ + { + "description": "Search term", + "in": "query", + "name": "term", + "required": true, + "type": "string", + "x-example": "hardcore history" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + }, + { + "description": "Number of shows per page", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 + }, + { + "description": "Search page number (1-based)", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applepodcasts.searchResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Apple Podcasts shows", + "tags": [ + "ApplePodcasts" + ] + } + }, + "/apple-podcasts/show/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the details of one Apple Podcasts show by its Apple show `id`: `collection_name`, `artist_name`, `feed_url`, `primary_genre_name`, `genres`, `track_count`, `release_date`, content advisory rating and artwork. `country` and `lang` choose the storefront and language.", + "operationId": "apple-podcasts-show", + "parameters": [ + { + "description": "Apple Podcasts show ID", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "173001861" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applepodcasts.showResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Show not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve Apple Podcasts show details", + "tags": [ + "ApplePodcasts" + ] + } + }, + "/apple-podcasts/show/{id}/episodes": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one Apple Podcasts show by its Apple show `id`, together with a list of its episodes. `limit` sets how many episodes to return; `country` and `lang` choose the storefront and language. Episodes have `title`, `description`, `duration_millis`, `release_date`, `episode_url` and `episode_guid`.", + "operationId": "apple-podcasts-show-episodes", + "parameters": [ + { + "description": "Apple Podcasts show ID", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "173001861" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + }, + { + "description": "Number of episodes to return", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applepodcasts.showEpisodesResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Show not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve Apple Podcasts show episodes", + "tags": [ + "ApplePodcasts" + ] + } + }, + "/apple-podcasts/show/{id}/related": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the \"You Might Also Like\" rail for a single show, sourced from the modern podcasts.apple.com show page's listener-cohort recommendation data.", + "operationId": "apple-podcasts-show-related", + "parameters": [ + { + "description": "Apple Podcasts show ID", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "173001861" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Number of related shows to return, default 20, max 50", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/applepodcasts.relatedShowsResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Show not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve Apple Podcasts \"You Might Also Like\" related shows", + "tags": [ + "ApplePodcasts" + ] + } + }, + "/appstore/app": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns app metadata from the App Store. Provide either `id` (numeric track ID) or `app_id` (bundle ID). `id`/`app_id` can identify an iPhone, iPad, or Mac App Store listing.", + "operationId": "appstore-app", + "parameters": [ + { + "description": "App Store numeric track ID (digits only)", + "in": "query", + "name": "id", + "type": "string", + "x-example": "553834731" + }, + { + "description": "App Store bundle ID", + "in": "query", + "name": "app_id", + "type": "string", + "x-example": "com.midasplayer.apps.candycrushsaga" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + }, + { + "default": false, + "description": "Include ratings histogram", + "in": "query", + "name": "ratings", + "type": "boolean" + }, + { + "default": false, + "description": "Include the full device-platform compatibility list (adds one extra upstream fetch)", + "in": "query", + "name": "platforms", + "type": "boolean" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/appstore.appDetailsResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "App not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve full App Store app details", + "tags": [ + "AppStore" + ] + } + }, + "/appstore/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns every category ID and chart collection accepted by `/appstore/list`, including Games and Magazines & Newspapers subgenres with their parent ID. Collections carry their device platform (`phone`, `pad`, `mac`), chart type (`top_free`, `top_paid`, `top_grossing`, `top`, `new`), and whether the feed currently returns entries.", + "operationId": "appstore-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/appstore.categoriesResponseDoc" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve App Store chart categories and collections", + "tags": [ + "AppStore" + ] + } + }, + "/appstore/collection": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns app items embedded in an Apple room or EDS collection page. Discover IDs with `appstore_collections`. `platform` enum: `iphone`, `ipad`, `mac`, `vision`, `watch`, `tv`. `collection_id` must be a numeric room ID or `eds.UUID` ID returned by the discovery endpoint.", + "operationId": "appstore-collection", + "parameters": [ + { + "description": "Apple device catalog", + "enum": [ + "iphone", + "ipad", + "mac", + "vision", + "watch", + "tv" + ], + "in": "query", + "name": "platform", + "required": true, + "type": "string", + "x-example": "iphone" + }, + { + "description": "Room ID or EDS UUID collection ID from appstore_collections", + "in": "query", + "name": "collection_id", + "required": true, + "type": "string", + "x-example": "6757461219" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/appstore.collectionResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Collection not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve apps in one App Store collection", + "tags": [ + "AppStore" + ] + } + }, + "/appstore/collections": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the room and EDS collection links embedded in Apple's browse page for one device. `platform` enum: `iphone`, `ipad`, `mac`, `vision`, `watch`, `tv`. Pass a returned `id` and the same platform to `appstore_collection` to retrieve the collection's apps.", + "operationId": "appstore-collections", + "parameters": [ + { + "description": "Apple device catalog", + "enum": [ + "iphone", + "ipad", + "mac", + "vision", + "watch", + "tv" + ], + "in": "query", + "name": "platform", + "required": true, + "type": "string", + "x-example": "iphone" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/appstore.collectionsResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Page not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Discover App Store editorial collections", + "tags": [ + "AppStore" + ] + } + }, + "/appstore/developer/{dev_id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Lists the App Store apps published by one developer, by Apple developer (artist) id, for an optional storefront country and language. Each app carries its id, title, description, icon and screenshots, price and currency, genres, version and release notes, rating score and counts, size, supported devices and languages.", + "operationId": "appstore-developer", + "parameters": [ + { + "description": "Developer artist ID", + "in": "path", + "name": "dev_id", + "required": true, + "type": "string", + "x-example": "284882218" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/appstore.developerResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Developer not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve apps by developer ID", + "tags": [ + "AppStore" + ] + } + }, + "/appstore/editorial": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the curated editorial shelves from one of Apple's per-device App Store landing pages (the same content shown by apps.apple.com's device switcher). `device` enum: `iphone`, `ipad`, `mac`, `vision`, `watch`, `tv`. `section` enum: `main` (the device's Today/Discover/Apps & Games landing page), `arcade` (the device's Apple Arcade landing page). Watch has no Arcade page — `device=watch` with `section=arcade` returns `400`.", + "operationId": "appstore-editorial", + "parameters": [ + { + "description": "Apple device catalog", + "enum": [ + "iphone", + "ipad", + "mac", + "vision", + "watch", + "tv" + ], + "in": "query", + "name": "device", + "required": true, + "type": "string", + "x-example": "iphone" + }, + { + "default": "main", + "description": "Editorial section within the device", + "enum": [ + "main", + "arcade" + ], + "in": "query", + "name": "section", + "type": "string" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/appstore.editorialResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Page not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve an App Store device or Arcade editorial landing page", + "tags": [ + "AppStore" + ] + } + }, + "/appstore/editorial/category": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the curated editorial shelves for one device category page (e.g. \"Entertainment Apps for Vision\"). `category_id` is a numeric, device-specific editorial page ID — not a static enum — discovered from an `appstore_editorial` response for the SAME `device`, in its \"Browse by Category\" shelf items' `destination_id` field. `device` enum: `iphone`, `ipad`, `mac`, `vision`, `watch`, `tv`.", + "operationId": "appstore-editorial-category", + "parameters": [ + { + "description": "Apple device catalog", + "enum": [ + "iphone", + "ipad", + "mac", + "vision", + "watch", + "tv" + ], + "in": "query", + "name": "device", + "required": true, + "type": "string", + "x-example": "iphone" + }, + { + "description": "Numeric App Store editorial page ID, discovered from appstore_editorial (same device)", + "in": "query", + "name": "category_id", + "required": true, + "type": "string", + "x-example": "6503709728" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/appstore.editorialResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Category page not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve an App Store category-scoped editorial page", + "tags": [ + "AppStore" + ] + } + }, + "/appstore/list": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns ranked App Store apps from an iTunes RSS collection, optionally expanded to full lookup details. `collection` enum: `topfreeapplications`, `toppaidapplications`, `topgrossingapplications`, `topfreeipadapplications`, `toppaidipadapplications`, `topgrossingipadapplications`, `topmacapps`, `topfreemacapps`, `topgrossingmacapps`, `toppaidmacapps`, `newapplications`, `newfreeapplications`, `newpaidapplications`. Of the Mac collections, only `topfreemacapps` currently returns ranked apps — `topmacapps`, `topgrossingmacapps`, and `toppaidmacapps` are accepted but Apple's feed for them is currently empty. There is no separate Games `collection` — combine any collection with `category=6014` (or a Games subgenre ID, e.g. `7012` for Puzzle) to get its Games-only equivalent, e.g. Top Free Games. See the endpoint markdown for the full category ID table.", + "operationId": "appstore-list", + "parameters": [ + { + "description": "Chart collection slug, see description for the full enum", + "in": "query", + "name": "collection", + "type": "string", + "x-example": "topfreeapplications" + }, + { + "description": "Numeric App Store category ID, see description for the full enum; e.g. 6014 = Games, 7012 = Games/Puzzle", + "in": "query", + "name": "category", + "type": "integer", + "x-example": 6014 + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + }, + { + "description": "Number of apps to return", + "in": "query", + "name": "num", + "type": "integer", + "x-example": 50 + }, + { + "default": false, + "description": "Expand each app via lookup API", + "in": "query", + "name": "full_detail", + "type": "boolean" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/appstore.listResultsResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve App Store collection rankings", + "tags": [ + "AppStore" + ] + } + }, + "/appstore/privacy/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the privacy disclosures shown on an App Store page for one app, identified by its numeric track `id` (digits only; anything else returns 400). The response has `privacy_policy_url`, `manage_privacy_choices_url` and `privacy_types`, each with its data categories and purposes. `country` and `lang` are optional.", + "operationId": "appstore-privacy", + "parameters": [ + { + "description": "App Store numeric track ID (digits only)", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "324684580" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/appstore.privacyResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "App not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve App Store privacy disclosures", + "tags": [ + "AppStore" + ] + } + }, + "/appstore/ratings": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the total `ratings` count and the 1 to 5 star `histogram` for an App Store app. Identify it with either the numeric track `id` or the bundle ID `app_id`; a bundle ID is resolved to the track ID first, and a non-numeric `id` returns 400. `country` and `lang` are optional.", + "operationId": "appstore-ratings", + "parameters": [ + { + "description": "App Store numeric track ID (digits only)", + "in": "query", + "name": "id", + "type": "string", + "x-example": "553834731" + }, + { + "description": "App Store bundle ID", + "in": "query", + "name": "app_id", + "type": "string", + "x-example": "com.midasplayer.apps.candycrushsaga" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/appstore.ratingsResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "App not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve App Store ratings histogram", + "tags": [ + "AppStore" + ] + } + }, + "/appstore/reviews": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of customer reviews for an App Store app, identified by `id` (numeric track ID) or `app_id` (bundle ID). `page` runs 1 to 10 and `sort` is `mostRecent` (default) or `mostHelpful`. Reviews carry `score`, `title`, `text`, `version`, `user_name` and `updated`. Returns 503 when reviews cannot be retrieved, and 404 when the app is not in that `country` storefront.", + "operationId": "appstore-reviews", + "parameters": [ + { + "description": "App Store numeric track ID (digits only)", + "in": "query", + "name": "id", + "type": "string", + "x-example": "553834731" + }, + { + "description": "App Store bundle ID", + "in": "query", + "name": "app_id", + "type": "string", + "x-example": "com.midasplayer.apps.candycrushsaga" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Review page number (1-10)", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "default": "mostRecent", + "description": "Sort order", + "enum": [ + "mostRecent", + "mostHelpful" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/appstore.reviewsResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "App not found, or not published in the requested storefront", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve App Store reviews", + "tags": [ + "AppStore" + ] + } + }, + "/appstore/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns App Store search results for a term. Set `ids_only=true` to return only app IDs. `platform` enum: `phone`, `pad`, `mac`.", + "operationId": "appstore-search", + "parameters": [ + { + "description": "Search term", + "in": "query", + "name": "term", + "required": true, + "type": "string", + "x-example": "panda" + }, + { + "description": "Number of apps per page", + "in": "query", + "name": "num", + "type": "integer", + "x-example": 50 + }, + { + "description": "Search page number (1-based)", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + }, + { + "default": false, + "description": "Return only app IDs", + "in": "query", + "name": "ids_only", + "type": "boolean" + }, + { + "default": "phone", + "description": "App Store catalog to search: phone, pad, mac", + "enum": [ + "phone", + "pad", + "mac" + ], + "in": "query", + "name": "platform", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/appstore.searchResultsResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search the App Store", + "tags": [ + "AppStore" + ] + } + }, + "/appstore/similar": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the related apps shown on the App Store product page. Provide either `id` (numeric track ID) or `app_id` (bundle ID).", + "operationId": "appstore-similar", + "parameters": [ + { + "description": "App Store numeric track ID (digits only)", + "in": "query", + "name": "id", + "type": "string", + "x-example": "553834731" + }, + { + "description": "App Store bundle ID", + "in": "query", + "name": "app_id", + "type": "string", + "x-example": "com.midasplayer.apps.candycrushsaga" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/appstore.similarResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "App not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve \"You Might Also Like\" apps", + "tags": [ + "AppStore" + ] + } + }, + "/appstore/suggest/{term}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns App Store search suggestions for a partial search term given in the path, as a list of suggested `term` values. `country` is an optional two-letter storefront code.", + "operationId": "appstore-suggest", + "parameters": [ + { + "description": "Partial search term", + "in": "path", + "name": "term", + "required": true, + "type": "string", + "x-example": "panda" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/appstore.suggestResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve App Store search suggestions", + "tags": [ + "AppStore" + ] + } + }, + "/appstore/version-history/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns an App Store app's version history, as shown under \"What's New\", by numeric track id, for an optional storefront country and language. Each entry has the version number, release date and timestamp, and release notes. A non-numeric id returns `400`.", + "operationId": "appstore-version-history", + "parameters": [ + { + "description": "App Store numeric track ID (digits only)", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "553834731" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Result language tag", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/appstore.versionHistoryResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "App not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve App Store version history", + "tags": [ + "AppStore" + ] + } + }, + "/arbys/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Arby's US menu's top-level categories -- Slow Roasted Beef, Crispy Juicy Chicken, Meals, Sides & Snacks, Beverages, Desserts, Kids Menu and others. Each entry's slug is the value GET /arbys/menu takes. store_id (optional, default 0) selects which pricing snapshot categories' item counts are read from; the default 0 is Arby's own reference catalog and carries no prices at all -- pass a store_id you already know (for example one you have seen on arbys.com after picking a location) to price GET /arbys/menu's items against a specific store. There is no location-lookup endpoint in this family.", + "operationId": "arbys-categories", + "parameters": [ + { + "description": "Optional. Store id to read the catalog from, default 0 (Arby's priceless national reference catalog).", + "in": "query", + "name": "store_id", + "type": "integer", + "x-example": 0 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/arbys.categoriesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Arby's menu categories", + "tags": [ + "Arbys" + ] + } + }, + "/arbys/directory": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one level of Arby's US store directory: every state Arby's serves with its store count (no params), one state's cities (state given), or one city's stores (state and city given) -- id, address, and phone only, pair with GET /arbys/location for hours/amenities/status. Unlike GET /arbys/locations, this needs no coordinate; it is a plain browse of the whole ~3,200-store US chain.", + "operationId": "arbys-directory", + "parameters": [ + { + "description": "Optional. Two-letter US state abbreviation. Omit to list every state.", + "in": "query", + "name": "state", + "type": "string", + "x-example": "OH" + }, + { + "description": "Optional. City name, requires state. Omit to list every city in the state.", + "in": "query", + "name": "city", + "type": "string", + "x-example": "Youngstown" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/arbys.directoryResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Browse Arby's US store directory by state and city", + "tags": [ + "Arbys" + ] + } + }, + "/arbys/location": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one Arby's restaurant directly by its store id (e.g. one found via GET /arbys/locations), with the same address, hours, amenities, and capability fields as that endpoint's results, minus distance (there is no search center for a direct lookup).", + "operationId": "arbys-location", + "parameters": [ + { + "description": "A real Arby's store id, e.g. one returned by GET /arbys/locations", + "in": "query", + "name": "store_id", + "required": true, + "type": "integer", + "x-example": 8725 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/arbys.locationResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Look up one Arby's restaurant by store id", + "tags": [ + "Arbys" + ] + } + }, + "/arbys/locations": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Arby's restaurants within a radius of a coordinate, nearest first, with address, phone, coordinates, distance, open/closed status, hours, amenities, and pickup/delivery capability flags. Each result's store_id also prices GET /arbys/menu and GET /arbys/categories. To search from a free-text address instead of coordinates, resolve it first with GET /geocoding/search.", + "operationId": "arbys-locations", + "parameters": [ + { + "description": "Search center latitude", + "in": "query", + "name": "latitude", + "required": true, + "type": "number", + "x-example": 32.787706 + }, + { + "description": "Search center longitude", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -96.79985 + }, + { + "description": "Optional. Search radius in miles, 1-50, default 50. Upstream hard-blocks any radius over 50.", + "in": "query", + "name": "radius", + "type": "integer", + "x-example": 50 + }, + { + "description": "Optional. Maximum stores per page, 1-50, default 10.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + }, + { + "description": "Optional. Zero-based page index, default 0.", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 0 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/arbys.nearbyResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Find Arby's restaurants near a coordinate", + "tags": [ + "Arbys" + ] + } + }, + "/arbys/menu": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the items in one Arby's menu category, each with its stable product code, name, description, image, tags, availability, a full per-serving nutrition panel (calories, total and saturated fat, trans fat, cholesterol, sodium, carbohydrate, fiber, sugar, protein and serving weight), and a price when store_id resolves to a priced catalog. Category slugs come from GET /arbys/categories. store_id (optional, default 0) is Arby's own priceless national reference catalog; pass a store_id you already know to get that store's pricing instead -- there is no location-lookup endpoint in this family, so store_id is a passthrough value, not something this API can look up for you. A price of exactly 0 on an item is a genuine free add-on, distinct from the default catalog's complete absence of pricing.", + "operationId": "arbys-menu", + "parameters": [ + { + "description": "Category slug from /arbys/categories", + "in": "query", + "name": "category", + "required": true, + "type": "string", + "x-example": "slow-roasted-beef" + }, + { + "description": "Optional. Same store id semantics as /arbys/categories.", + "in": "query", + "name": "store_id", + "type": "integer", + "x-example": 0 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/arbys.menuResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List one Arby's menu category's items with full nutrition and price", + "tags": [ + "Arbys" + ] + } + }, + "/arstechnica/article": { + "get": { + "description": "Returns public Ars Technica article metadata and body paragraphs from a canonical article URL. The service does not bypass authentication or access controls.", + "operationId": "arstechnica-article", + "parameters": [ + { + "description": "Canonical Ars Technica article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://arstechnica.com/gadgets/2026/09/example-story/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Ars Technica article content", + "tags": [ + "Ars Technica" + ] + } + }, + "/arstechnica/author": { + "get": { + "description": "Returns an Ars Technica contributor's byline metadata (name, job title, headshot, contact email), biography, and recent articles from a canonical author URL. The service does not bypass authentication or access controls.", + "operationId": "arstechnica-author", + "parameters": [ + { + "description": "Canonical Ars Technica contributor URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://arstechnica.com/author/example-writer/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.arstechnicaAuthorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get an Ars Technica contributor profile", + "tags": [ + "Ars Technica" + ] + } + }, + "/arstechnica/headlines": { + "get": { + "description": "Returns recent Ars Technica headlines for one section. `section` is required and takes `ai`, `apple`, `cars`, `culture`, `features`, `gadgets`, `gaming`, `health`, `information-technology`, `reviews`, `science`, `security`, `space`, `staff` or `tech-policy`. Each item has a title and URL, and may also carry a summary, author, publication time and image.", + "operationId": "arstechnica-headlines", + "parameters": [ + { + "description": "Ars Technica section slug", + "enum": [ + "ai", + "apple", + "cars", + "culture", + "features", + "gadgets", + "gaming", + "health", + "information-technology", + "reviews", + "science", + "security", + "space", + "staff", + "tech-policy" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "ai" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Ars Technica section headlines", + "tags": [ + "Ars Technica" + ] + } + }, + "/arstechnica/news": { + "get": { + "description": "Returns the latest Ars Technica stories, with no input needed. Each item has a title and canonical URL, and may also carry a summary, author, publication time and lead image.", + "operationId": "arstechnica-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Ars Technica top stories", + "tags": [ + "Ars Technica" + ] + } + }, + "/arstechnica/sections": { + "get": { + "description": "Returns the Ars Technica section inventory: the site's own current navigation and RSS-feed-directory sections (AI, Gadgets, Science, Security, Space, and others), each linking to its public RSS feed.", + "operationId": "arstechnica-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Ars Technica sections", + "tags": [ + "Ars Technica" + ] + } + }, + "/audible/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Audible's full genre/category tree (root genres with their subgenres), including the category ids accepted by GET /audible/search's category_id filter.", + "operationId": "audible-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/audible.categoriesResponseDoc" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Audible's genre/category tree", + "tags": [ + "Audible" + ] + } + }, + "/audible/category/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one Audible category node and its immediate children by id — cheaper than fetching the full tree from GET /audible/categories when only one node is needed.", + "operationId": "audible-category", + "parameters": [ + { + "description": "Audible category id from GET /audible/categories", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "18580606011" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/audible.categoryResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get one Audible category node", + "tags": [ + "Audible" + ] + } + }, + "/audible/charts": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of an Audible chart — a ranked list with real chart position, price, and rating. This endpoint is less stable than the rest of this family. Its own filters (category, access level, language, duration, Audible-Originals-only) were individually verified to actually change results. category_id, access_level, and content_type=podcasts are mutually exclusive.", + "operationId": "audible-charts", + "parameters": [ + { + "description": "Chart type, default most_listened", + "enum": [ + "most_listened", + "bestselling" + ], + "in": "query", + "name": "chart", + "type": "string" + }, + { + "description": "Content type, default audiobooks", + "enum": [ + "audiobooks", + "podcasts" + ], + "in": "query", + "name": "content_type", + "type": "string" + }, + { + "description": "Restrict to a category id from GET /audible/categories", + "in": "query", + "name": "category_id", + "type": "string" + }, + { + "description": "Membership access level, default all", + "enum": [ + "all", + "free", + "plus", + "premium" + ], + "in": "query", + "name": "access_level", + "type": "string" + }, + { + "description": "Language filter, default all", + "enum": [ + "all", + "danish", + "english", + "french", + "german", + "italian", + "japanese", + "polish", + "portuguese", + "russian", + "spanish", + "swedish" + ], + "in": "query", + "name": "language", + "type": "string" + }, + { + "description": "Runtime-length filter, default all", + "enum": [ + "all", + "oneHourLess", + "oneToThreeHour", + "threeToSixHour", + "sixToTenHour", + "tenToTwentyHour", + "twentyHourMore" + ], + "in": "query", + "name": "duration", + "type": "string" + }, + { + "description": "Restrict to Audible Originals only", + "in": "query", + "name": "originals_only", + "type": "boolean" + }, + { + "description": "1-based result page, default 1, 20 results per page", + "in": "query", + "name": "page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/audible.chartsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get an Audible chart (audible.com/charts)", + "tags": [ + "Audible" + ] + } + }, + "/audible/charts/authors": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of Audible's ranked author chart. It exposes only rank, author identity, image metadata when available, and a canonical author URI; author detail is not included.", + "operationId": "audible-author-charts", + "parameters": [ + { + "description": "1-based result page, default 1", + "in": "query", + "name": "page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/audible.authorChartsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Audible's top-author chart", + "tags": [ + "Audible" + ] + } + }, + "/audible/list/{list}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one of Audible's hand-curated \"Popular Lists\" pages, as its themed shelves (heading + ordered ASINs). Pair an ASIN from any shelf with GET /audible/products (batch) or GET /audible/product/{asin} for full title/author/price/rating detail. \"Best of the Year\" is not covered.", + "operationId": "audible-editorial-list", + "parameters": [ + { + "description": "Editorial list slug", + "enum": [ + "audiobooks", + "booktok", + "podcasts" + ], + "in": "path", + "name": "list", + "required": true, + "type": "string", + "x-example": "audiobooks" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/audible.editorialListResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get an Audible curated editorial list", + "tags": [ + "Audible" + ] + } + }, + "/audible/product/{asin}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns an Audible audiobook: description, authors, narrators, series, category ladders, publisher, release date, runtime, language, sample audio URL, rating (overall/performance/story), and public list price.", + "operationId": "audible-product", + "parameters": [ + { + "description": "Audible ASIN", + "in": "path", + "name": "asin", + "required": true, + "type": "string", + "x-example": "B08G9PRS1K" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/audible.productResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get an Audible audiobook", + "tags": [ + "Audible" + ] + } + }, + "/audible/product/{asin}/related": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Audible titles related to a given ASIN by a required relation type: same series, same narrator, same author, next in series, or raw similarity.", + "operationId": "audible-product-related", + "parameters": [ + { + "description": "Audible ASIN", + "in": "path", + "name": "asin", + "required": true, + "type": "string", + "x-example": "B08G9PRS1K" + }, + { + "description": "How to relate titles to the given ASIN", + "enum": [ + "InTheSameSeries", + "ByTheSameNarrator", + "RawSimilarities", + "ByTheSameAuthor", + "NextInSameSeries" + ], + "in": "query", + "name": "similarity_type", + "required": true, + "type": "string", + "x-example": "InTheSameSeries" + }, + { + "description": "Max results, default 10, max 50", + "in": "query", + "name": "limit", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/audible.relatedResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Audible titles related to an audiobook", + "tags": [ + "Audible" + ] + } + }, + "/audible/product/{asin}/reviews": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a page of an Audible audiobook's customer reviews (author, title, body, overall/performance/story ratings, helpful votes, submission date).", + "operationId": "audible-product-reviews", + "parameters": [ + { + "description": "Audible ASIN", + "in": "path", + "name": "asin", + "required": true, + "type": "string", + "x-example": "B08G9PRS1K" + }, + { + "description": "Zero-based result page, default 0", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Max reviews, default 10, max 50", + "in": "query", + "name": "limit", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/audible.reviewsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get an Audible audiobook's customer reviews", + "tags": [ + "Audible" + ] + } + }, + "/audible/products": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Audible audiobooks for up to 50 ASINs in a single request — the same fields as GET /audible/product/{asin}. Unrecognized ASINs are silently omitted rather than failing the whole batch.", + "operationId": "audible-products", + "parameters": [ + { + "description": "Comma-separated Audible ASINs, up to 50", + "in": "query", + "name": "asins", + "required": true, + "type": "string", + "x-example": "B08G9PRS1K,B002V1OF70" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/audible.productsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get multiple Audible audiobooks in one call", + "tags": [ + "Audible" + ] + } + }, + "/audible/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches Audible's audiobook catalog by keyword, title, author, narrator, or category id. At least one filter is required.", + "operationId": "audible-search", + "parameters": [ + { + "description": "Free-text query matched across title, subtitle, and author", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Match by title", + "in": "query", + "name": "title", + "type": "string" + }, + { + "description": "Match by author name", + "in": "query", + "name": "author", + "type": "string" + }, + { + "description": "Match by narrator name", + "in": "query", + "name": "narrator", + "type": "string" + }, + { + "description": "Restrict to a category id from GET /audible/categories", + "in": "query", + "name": "category_id", + "type": "string" + }, + { + "description": "Zero-based result page, default 0", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Max results, default 10, max 50", + "in": "query", + "name": "limit", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/audible.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Audible's catalog", + "tags": [ + "Audible" + ] + } + }, + "/audible/series/{asin}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns an Audible series and every book in it, in series order. A series has its own ASIN distinct from any book in it — find one via a book's series[].asin field from GET /audible/product/{asin}.", + "operationId": "audible-series", + "parameters": [ + { + "description": "Audible series ASIN, from a product's series[].asin field", + "in": "path", + "name": "asin", + "required": true, + "type": "string", + "x-example": "B006W3V2B0" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/audible.seriesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get an Audible series' ordered book list", + "tags": [ + "Audible" + ] + } + }, + "/autotrader/dealer/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns an Autotrader dealer profile (name, phone, address, rating, website) plus a first page of the dealer's own current inventory as vehicle summaries and the dealer's total listing count.", + "operationId": "autotrader-dealer", + "parameters": [ + { + "description": "Autotrader dealer/owner id, the numeric path segment of a /car-dealers/{id} URL", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "64141623" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/autotrader.DealerResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Autotrader dealer profile", + "tags": [ + "Autotrader" + ] + } + }, + "/autotrader/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches Autotrader for new and used car listings, returning vehicle summaries (make, model, trim, year, mileage, pricing, images) plus the total matching count.", + "operationId": "autotrader-search", + "parameters": [ + { + "description": "Free-text keyword search", + "in": "query", + "name": "query", + "type": "string", + "x-example": "leather seats" + }, + { + "description": "5-digit US ZIP code to search around", + "in": "query", + "name": "zip", + "type": "string", + "x-example": "90210" + }, + { + "description": "Search radius in miles around zip", + "in": "query", + "name": "radius", + "type": "integer", + "x-example": 50 + }, + { + "description": "Autotrader make code, e.g. TOYOTA, HONDA, BMW", + "in": "query", + "name": "make", + "type": "string", + "x-example": "TOYOTA" + }, + { + "description": "Autotrader model code, e.g. CAMRY. Requires make", + "in": "query", + "name": "model", + "type": "string", + "x-example": "CAMRY" + }, + { + "description": "Autotrader trim code. Requires make and model", + "in": "query", + "name": "trim", + "type": "string", + "x-example": "LE" + }, + { + "description": "Listing condition. Allowed values: new, used, certified, 3p_cert", + "enum": [ + "new", + "used", + "certified", + "3p_cert" + ], + "in": "query", + "name": "condition", + "type": "string", + "x-example": "used" + }, + { + "description": "Body style. Allowed values: convertible, coupe, hatchback, sedan, suv, truck, van, wagon", + "enum": [ + "convertible", + "coupe", + "hatchback", + "sedan", + "suv", + "truck", + "van", + "wagon" + ], + "in": "query", + "name": "body_style", + "type": "string", + "x-example": "suv" + }, + { + "description": "Seller type. Allowed values: dealer, private", + "enum": [ + "dealer", + "private" + ], + "in": "query", + "name": "seller_type", + "type": "string", + "x-example": "dealer" + }, + { + "description": "Minimum model year", + "in": "query", + "name": "min_year", + "type": "integer", + "x-example": 2020 + }, + { + "description": "Maximum model year", + "in": "query", + "name": "max_year", + "type": "integer", + "x-example": 2026 + }, + { + "description": "Minimum price in US dollars", + "in": "query", + "name": "min_price", + "type": "integer", + "x-example": 10000 + }, + { + "description": "Maximum price in US dollars", + "in": "query", + "name": "max_price", + "type": "integer", + "x-example": 40000 + }, + { + "description": "Maximum odometer mileage", + "in": "query", + "name": "max_mileage", + "type": "integer", + "x-example": 60000 + }, + { + "description": "1-indexed result page, defaults to 1. Autotrader returns 24 results per page", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/autotrader.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Autotrader vehicle listings", + "tags": [ + "Autotrader" + ] + } + }, + "/autotrader/vehicle/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns an Autotrader vehicle listing: full vehicle spec (make, model, trim, mileage, colors, transmission, fuel type, engine, images, pricing), the full listing description, and seller detail (dealership or private seller).", + "operationId": "autotrader-vehicle", + "parameters": [ + { + "description": "Autotrader listing id, the numeric path segment of a /cars-for-sale/vehicle/{id} URL", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "754822172" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/autotrader.VehicleResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Autotrader vehicle listing detail", + "tags": [ + "Autotrader" + ] + } + }, + "/axios/article": { + "get": { + "description": "Returns a public Axios article's metadata and full body paragraphs from a canonical article URL. Subscriber-only stories with no free preview return a 403 permission error instead of an empty body.", + "operationId": "axios-article", + "parameters": [ + { + "description": "Canonical www.axios.com article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.axios.com/2026/09/19/google-safety-incidents-testing-hacks" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/axios.articleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Axios article content", + "tags": [ + "Axios" + ] + } + }, + "/axios/categories": { + "get": { + "description": "Returns Axios's full public topic and subtopic navigation tree. Use a subtopic's topic value directly as the topic parameter on axios-headlines.", + "operationId": "axios-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/axios.categoriesResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Axios topic navigation", + "tags": [ + "Axios" + ] + } + }, + "/axios/headlines": { + "get": { + "description": "Returns the newest public Axios stories on one topic or subtopic page. topic is a topic slug (e.g. technology) or a topic/subtopic path (e.g. technology/automation-and-ai) -- see axios-categories for the full known value space.", + "operationId": "axios-headlines", + "parameters": [ + { + "description": "Axios topic slug or topic/subtopic path", + "in": "query", + "name": "topic", + "required": true, + "type": "string", + "x-example": "technology" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/axios.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Axios topic headlines", + "tags": [ + "Axios" + ] + } + }, + "/baidu/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Baidu result cards for a query: title, destination URL, snippet, publisher, and date, with page-based pagination. Each result's `type` is `web` (standard pages), `video` (video cards), or `baike` (Baidu Baike encyclopedia entries); answer widgets such as weather, entity panels, and recommendation lists are not returned. Baidu challenges a portion of requests with a security verification page; the service retries and returns 503 if every attempt is challenged, so callers should retry on 503.", + "operationId": "baidu-search", + "parameters": [ + { + "description": "Search query", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "openai" + }, + { + "description": "1-based result page; defaults to 1, maximum 10", + "in": "query", + "maximum": 10, + "minimum": 1, + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/baidu.searchResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Baidu upstream request failed or was challenged with a security verification", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Baidu web results", + "tags": [ + "Baidu" + ] + } + }, + "/baidu/suggest": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Baidu search-box autocomplete completions for a query prefix, in Baidu's own ranking order. Baidu never returns more than 10 suggestions per prefix; Chinese prefixes are supported.", + "operationId": "baidu-suggest", + "parameters": [ + { + "description": "Search query prefix", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "openai" + }, + { + "description": "Suggestions to return; defaults to 10, clamped to 1..10", + "in": "query", + "maximum": 10, + "minimum": 1, + "name": "count", + "type": "integer", + "x-example": 10 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/baidu.suggestResponseDoc" + } + }, + "400": { + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Baidu upstream request failed", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Suggest Baidu search queries", + "tags": [ + "Baidu" + ] + } + }, + "/balenciaga/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Lists Balenciaga's storefront categories with `count`, and for each its `id`, `name`, `department`, `path` and `url`. Each `path` is the value `balenciaga-category` accepts. The response reports `country` (`ZW`) and `language` (`en`).", + "operationId": "balenciaga-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/balenciaga.categoriesResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Balenciaga categories", + "tags": [ + "Balenciaga" + ] + } + }, + "/balenciaga/category": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one Balenciaga category listing from the site's own Search-ShowAjax fragment. path comes from balenciaga-categories. sort accepts latest, price_ascending, or price_descending. filters is a comma-separated list of exact field:value pairs from the response's live facets; repeat a field to OR multiple values within that facet; omit it for an unfiltered listing.", + "operationId": "balenciaga-category", + "parameters": [ + { + "description": "Category path from balenciaga-categories", + "in": "query", + "name": "path", + "required": true, + "type": "string", + "x-example": "/en-en/women/bags-for-women/handbags" + }, + { + "description": "Sort order", + "enum": [ + "latest", + "price_ascending", + "price_descending" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "latest" + }, + { + "description": "One-based page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Products per page, defaults to 16, maximum 48", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 16 + }, + { + "description": "Comma-separated exact facet filters; repeat a field for OR values, for example akeneo_macroColor:BLACK,akeneo_macroColor:WHITE", + "in": "query", + "name": "filters", + "type": "string", + "x-example": "akeneo_macroColor:BLACK" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/balenciaga.listingResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Browse a Balenciaga category", + "tags": [ + "Balenciaga" + ] + } + }, + "/balenciaga/product": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns structured product detail from Balenciaga's product page, including schema.org name/SKU/price/availability, images, color variants, and visible product details. url must be a product URL returned by balenciaga-category or balenciaga-search.", + "operationId": "balenciaga-product", + "parameters": [ + { + "description": "Product URL from a Balenciaga listing", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "/en-en/hourglass-avenue-top-handle-bag-small-black-A007IH2ACT21000.html" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/balenciaga.productResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Balenciaga product", + "tags": [ + "Balenciaga" + ] + } + }, + "/balenciaga/product/variants": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Balenciaga's live color/size variation matrix for a product, including variation ids, selection/sellability flags, care text, availability, and related product ids. url may be a product URL or a Product-Variation URL from balenciaga-product's colors[].url.", + "operationId": "balenciaga-product-variants", + "parameters": [ + { + "description": "Balenciaga product URL or Product-Variation URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.balenciaga.com/on/demandware.store/Sites-BAL-R-INTL-Site/en_ZW/Product-Variation?dwvar_A007IH2ACT21000_color=1000&dwvar_A007IH2ACT21000_size=U&pid=A007IH2ACT21000&quantity=1" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/balenciaga.productVariantsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Balenciaga product variations", + "tags": [ + "Balenciaga" + ] + } + }, + "/balenciaga/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches Balenciaga's storefront by keyword using the site's own product-grid fragment. q is required; sort accepts latest, price_ascending, or price_descending; page is one-based with 12 products per page; and filters accepts comma-separated exact field:value pairs from live facets. Repeat a field to OR multiple values within that facet. A genuine no-result query returns an empty products list.", + "operationId": "balenciaga-search", + "parameters": [ + { + "description": "Free-text search query", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "hourglass" + }, + { + "description": "Sort order", + "enum": [ + "latest", + "price_ascending", + "price_descending" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "latest" + }, + { + "description": "One-based page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Comma-separated exact facet filters; repeat a field for OR values, for example akeneo_macroColor:BLACK,akeneo_macroColor:WHITE", + "in": "query", + "name": "filters", + "type": "string", + "x-example": "akeneo_macroColor:BLACK" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/balenciaga.listingResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Balenciaga products", + "tags": [ + "Balenciaga" + ] + } + }, + "/balenciaga/store-countries": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Lists the countries Balenciaga's store locator offers, each with a country `code` and `name`, plus a `count`. Each code is accepted by `balenciaga-stores`. The response also reports the storefront `country` and `language`.", + "operationId": "balenciaga-store-countries", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/balenciaga.storeCountriesResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Balenciaga store-locator countries", + "tags": [ + "Balenciaga" + ] + } + }, + "/balenciaga/stores": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Balenciaga's public physical-store directory for one country, including addresses, coordinates, phone numbers, opening hours, and store-service flags. Use balenciaga-store-countries to discover the complete accepted country enum.", + "operationId": "balenciaga-stores", + "parameters": [ + { + "description": "Two-letter country code", + "enum": [ + "AE", + "AT", + "AU", + "BE", + "BR", + "CA", + "CN", + "CZ", + "DE", + "DK", + "ES", + "FR", + "GB", + "HK", + "IE", + "IT", + "JP", + "KR", + "KW", + "MC", + "MO", + "MX", + "MY", + "NL", + "NZ", + "QA", + "SA", + "SG", + "CH", + "TH", + "TW", + "US" + ], + "in": "query", + "name": "country", + "required": true, + "type": "string", + "x-example": "US" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/balenciaga.storesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Balenciaga stores", + "tags": [ + "Balenciaga" + ] + } + }, + "/bandcamp/artist": { + "get": { + "description": "Returns a Bandcamp artist or label page: name, location, bio, image and the discography grid of albums and tracks with their URLs. Pass an entry's url to bandcamp_release for full detail.", + "operationId": "bandcamp-artist", + "parameters": [ + { + "description": "Artist subdomain or https://{subdomain}.bandcamp.com URL", + "in": "query", + "name": "artist", + "required": true, + "type": "string", + "x-example": "theforeverwinter" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bandcamp.artistResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Bandcamp artist or label page", + "tags": [ + "Bandcamp" + ] + } + }, + "/bandcamp/discover": { + "get": { + "description": "Pages through Bandcamp Discover albums. Filter by one to five tags (genres from bandcamp_filters, subgenres from bandcamp_related_tags), physical format (vinyl, CD, cassette), sort (best-selling, new arrivals, random), a time window, and a GeoNames place id. Each album carries artist, location, price, release date, track count, duration, cover art and any physical formats. Page with the returned next_cursor.", + "operationId": "bandcamp-discover", + "parameters": [ + { + "description": "Comma-separated tag slugs, up to 5, all of which an album must carry", + "in": "query", + "name": "tags", + "type": "string", + "x-example": "ambient,drone" + }, + { + "default": "all", + "description": "Physical format", + "enum": [ + "all", + "vinyl", + "cd", + "cassette" + ], + "in": "query", + "name": "format", + "type": "string" + }, + { + "default": "best_selling", + "description": "Sort order", + "enum": [ + "best_selling", + "new", + "random" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Time-window id from bandcamp_filters", + "in": "query", + "maximum": 7, + "minimum": 0, + "name": "time_facet", + "type": "integer" + }, + { + "description": "GeoNames place id", + "in": "query", + "name": "geoname_id", + "type": "integer", + "x-example": 5368361 + }, + { + "description": "next_cursor from the previous page", + "in": "query", + "name": "cursor", + "type": "string" + }, + { + "default": 24, + "description": "Albums per page", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "size", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bandcamp.discoverResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Browse Bandcamp Discover", + "tags": [ + "Bandcamp" + ] + } + }, + "/bandcamp/filters": { + "get": { + "description": "Returns the complete value space of the bandcamp_discover filters: the 27 top-level genre tags, physical formats, sort orders, time-window ids and the size range.", + "operationId": "bandcamp-filters", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bandcamp.filtersResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Bandcamp Discover filter values", + "tags": [ + "Bandcamp" + ] + } + }, + "/bandcamp/related-tags": { + "get": { + "description": "Returns the tags Bandcamp relates to a tag, strongest first, including location tags. Use it to walk from a genre in bandcamp_filters to its subgenres, then pass them to bandcamp_discover.", + "operationId": "bandcamp-related-tags", + "parameters": [ + { + "description": "Tag slug", + "in": "query", + "name": "tag", + "required": true, + "type": "string", + "x-example": "ambient" + }, + { + "default": 20, + "description": "Related tags to return", + "in": "query", + "maximum": 50, + "minimum": 1, + "name": "size", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bandcamp.relatedTagsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List tags related to a Bandcamp tag", + "tags": [ + "Bandcamp" + ] + } + }, + "/bandcamp/release": { + "get": { + "description": "Returns one Bandcamp album or track page: title, artist, label, release date, tags, about text, credits, digital price, tracklist with durations, physical packages with prices and, for a track, its parent album and ISRC. Audio stream and download URLs are never returned.", + "operationId": "bandcamp-release", + "parameters": [ + { + "description": "Album or track URL on an artist subdomain", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://theforeverwinter.bandcamp.com/album/the-forever-winter-original-soundtrack" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bandcamp.releaseResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get one Bandcamp album or track", + "tags": [ + "Bandcamp" + ] + } + }, + "/bandcamp/search": { + "get": { + "description": "Runs Bandcamp's site search and returns artists and labels, albums and tracks in Bandcamp's relevance order, each with its id, name, url and artwork (albums and tracks also carry the artist, tracks the album), plus any tags and genre that match the text. Bandcamp returns at most 50 hits (25 for artists) and does not page, so may_have_more reports when the cap was reached; narrow the text or pick a type to see more. Fan accounts are never returned. Pass a result's url to bandcamp_release or bandcamp_artist, and a tag's slug to bandcamp_discover.", + "operationId": "bandcamp-search", + "parameters": [ + { + "description": "Text to search, 1 to 100 characters", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "radiohead" + }, + { + "description": "Kind of hit to return: all (default), artists (artists and labels), albums or tracks", + "enum": [ + "all", + "artists", + "albums", + "tracks" + ], + "in": "query", + "name": "type", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bandcamp.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Bandcamp", + "tags": [ + "Bandcamp" + ] + } + }, + "/barrons/article": { + "get": { + "description": "Returns one Barron's article's title, byline, section, publication time, word count, and body paragraphs, recovered from a public web-archive snapshot of the article. Barron's serves only the first paragraphs of an article at the origin, so an article is returned only when a full-text archive snapshot exists; an article without one returns 404.", + "operationId": "barrons-article", + "parameters": [ + { + "description": "Canonical Barron's article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.barrons.com/articles/nvidia-stock-price-meta-ai-chips-rally-11911927" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/barrons.articleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Barron's article's content", + "tags": [ + "Barrons" + ] + } + }, + "/barrons/headlines": { + "get": { + "description": "Returns one page of a Barron's topic's headlines: each story's title, canonical URL, summary, publication time, authors, and lead image. Section must be a slug returned by /barrons/topics.", + "operationId": "barrons-headlines", + "parameters": [ + { + "description": "Barron's topic slug from /barrons/topics", + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "technology" + }, + { + "description": "Results page", + "in": "query", + "maximum": 200, + "minimum": 1, + "name": "page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/barrons.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get the latest stories in a Barron's topic", + "tags": [ + "Barrons" + ] + } + }, + "/barrons/news": { + "get": { + "description": "Returns Barron's current cross-section news feed: the newest stories across every section, each with its title, canonical URL, and publication time.", + "operationId": "barrons-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/barrons.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get the latest Barron's stories", + "tags": [ + "Barrons" + ] + } + }, + "/barrons/topics": { + "get": { + "description": "Lists Barron's editorial topics, each with its `slug`, display `name` and landing-page `url`. The list is long and changes over time. Every `slug` is a valid `section` value for `/barrons/headlines`. Takes no parameters.", + "operationId": "barrons-topics", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/barrons.topicsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Barron's topics", + "tags": [ + "Barrons" + ] + } + }, + "/bbb/article": { + "get": { + "description": "Returns published BBB article metadata, author names, body text, and useful links from a canonical public article URL on www.bbb.org or bbb.org. If BBB merges a story into another BBB article, the response contains the target article's id and source_url plus the original requested_url. Returns a permanent 404 when BBB moves the URL to an evergreen /all/ page or outside bbb.org, when BBB redirects the URL back to itself so it cannot be loaded, or when the URL resolves to a published non-article type such as an event; safe HTTPS destinations are named in the error and are never fetched.", + "operationId": "bbb-article", + "parameters": [ + { + "description": "Canonical BBB article URL on www.bbb.org or bbb.org", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.bbb.org/article/news-releases/34935-bbb-scam-alert-dont-be-fooled-by-free-gas-and-grocery-card-postcards" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bbbnews.ArticleResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a BBB article", + "tags": [ + "BBB" + ] + } + }, + "/bbb/business": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a bbb.org business profile: BBB rating letter grade and reasons, accreditation status and since-date, years in business, BBB file/incorporation dates, entity type, contact info, business categories, social media, and a short latest-reviews preview.", + "operationId": "bbb-business", + "parameters": [ + { + "description": "BBB business profile URL, from a bbb-search result's url or hq_profile_url", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bbb.businessResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Better Business Bureau business profile", + "tags": [ + "BBB" + ] + } + }, + "/bbb/business/complaints": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a business's BBB complaint history: total complaint count, complaints closed or filed in the last 12 months, and one page of per-complaint detail (date, type, status, narrative text, and any business response / customer answer thread). Complaints are listed newest first, 10 per page; use page with the returned page, total_pages and has_more to walk the full list. A business with no filed complaints returns total_complaints 0 and an empty complaints list -- this is a normal result, not an error.", + "operationId": "bbb-business-complaints", + "parameters": [ + { + "description": "BBB business profile URL, from a bbb-search result's url or hq_profile_url. A location URL ending in /addressId/ is accepted and read from the business profile", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803" + }, + { + "default": 1, + "description": "Complaint list page, 1 or greater (10 complaints per page, newest first). Defaults to 1", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bbb.complaintsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Better Business Bureau business's complaint history", + "tags": [ + "BBB" + ] + } + }, + "/bbb/business/more-info": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a business's full per-factor \"Reasons for Rating\" list and full service-area list. The bbb-business endpoint's own rating_reasons field typically holds only one generic boilerplate bullet regardless of actual rating; this endpoint returns the richer, business-specific list instead. Service area is business-conditional -- some businesses render no service-area section at all, in which case service_areas is empty.", + "operationId": "bbb-business-more-info", + "parameters": [ + { + "description": "BBB business profile URL, from a bbb-search result's url or hq_profile_url. A location URL ending in /addressId/ is accepted and read from the business profile", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bbb.moreInfoResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Better Business Bureau business's full rating reasons and service area", + "tags": [ + "BBB" + ] + } + }, + "/bbb/business/reviews": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a business's full customer-review list (author, star rating, date, text, and any business response thread), paginated 10 per page, plus the average star rating and total review count.", + "operationId": "bbb-business-reviews", + "parameters": [ + { + "description": "BBB business profile URL, from a bbb-search result's url or hq_profile_url. A location URL ending in /addressId/ is accepted and read from the business profile", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803" + }, + { + "description": "Result page (10 per page), default 1", + "in": "query", + "name": "page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bbb.reviewsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Better Business Bureau business's customer reviews", + "tags": [ + "BBB" + ] + } + }, + "/bbb/category": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Browses bbb.org businesses by category and location directly, without a free-text search query. Returns the same business-result shape as bbb-search. A verified empty first page returns results: [] and total_results: 0; an unavailable or unrecognized page returns an error. A page beyond the exact last page returns 404, and a page beyond BBB's 15-page accessible limit returns 404 naming that limit. Optional sort and filter parameters use the same values as bbb-search; query-scoped category and state/province values come from bbb-search-filters.", + "operationId": "bbb-category", + "parameters": [ + { + "description": "BBB category browse URL, from a bbb-search result's related_categories", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.bbb.org/us/tx/austin/category/plumber" + }, + { + "description": "Result page, default 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Sort order", + "enum": [ + "Relevance", + "Distance", + "Rating", + "AToZ", + "ZToA" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Maximum distance in miles; omit for all distances", + "enum": [ + "5", + "10", + "25", + "50", + "100" + ], + "in": "query", + "name": "distance", + "type": "string" + }, + { + "collectionFormat": "multi", + "description": "One or more BBB rating buckets", + "in": "query", + "items": { + "enum": [ + "A", + "B", + "C", + "D", + "F" + ], + "type": "string" + }, + "name": "rating", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Query-scoped category ID from bbb-search-filters", + "in": "query", + "items": { + "type": "string" + }, + "name": "category_id", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Query-scoped state or province code from bbb-search-filters", + "in": "query", + "items": { + "type": "string" + }, + "name": "state", + "type": "array" + }, + { + "description": "Only BBB-accredited businesses", + "in": "query", + "name": "accredited", + "type": "boolean" + }, + { + "description": "Only businesses offering quote requests", + "in": "query", + "name": "get_quote", + "type": "boolean" + }, + { + "description": "Only businesses serving the searched area", + "in": "query", + "name": "service_area", + "type": "boolean" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bbb.categoryResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Browse a Better Business Bureau category", + "tags": [ + "BBB" + ] + } + }, + "/bbb/local-bbb": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns public chapter profile details including office locations and hours, service territory, supported languages, and upcoming public events. news_url is the chapter's constructed newsroom route. When BBB publishes a program tile linking to a recognized newsroom path, published_news_url and its descriptive published_news_title are also returned. Use a canonical chapter URL from bbb-local-bbbs or a business record's local_bbb_url.", + "operationId": "bbb-local-bbb", + "parameters": [ + { + "description": "Canonical BBB chapter URL from bbb-local-bbbs or a business record's local_bbb_url", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.bbb.org/local-bbb/bbb-serving-the-heart-of-texas" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bbbdirectory.localBBBResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a local BBB chapter profile", + "tags": [ + "BBB" + ] + } + }, + "/bbb/local-bbbs": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Lists every chapter and public office shown on BBB's directory page for a region discovered by bbb-regions. Office addresses can be outside the selected service region.", + "operationId": "bbb-local-bbbs", + "parameters": [ + { + "description": "Country code from bbb-regions", + "enum": [ + "us", + "ca" + ], + "in": "query", + "name": "country", + "required": true, + "type": "string", + "x-example": "us" + }, + { + "description": "Two-letter region code from bbb-regions", + "in": "query", + "name": "region", + "required": true, + "type": "string", + "x-example": "tx" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bbbdirectory.localBBBsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List local BBB chapters serving a region", + "tags": [ + "BBB" + ] + } + }, + "/bbb/news": { + "get": { + "description": "Returns one page of BBB newsroom cards from a canonical BBB newsroom URL. Three scopes are accepted, each with an optional topic: the US or Canada newsroom (/us/news), a state, province or city newsroom (/us/ca/news, /us/ca/san-francisco/news), and one local BBB chapter's own newsroom (/local-bbb//news, the news_url returned by bbb-local-bbbs and bbb-local-bbb). The list is whatever BBB shows on that page: a city or chapter whose local BBB publishes its own stories returns those, and other cities, other chapters and the state pages checked so far return the same list as the country newsroom, so compare total and the first items with the country newsroom before treating a list as local. A chapter URL also returns local_bbb_id and local_bbb_name. Items preserve BBB's type and include Article stories, events, and Near Me related-service cards when present. Near Me URLs are restricted to BBB's /near-me/ paths. Every page carries total_pages and has_more: request page + 1 while has_more is true and stop when it is false; a page past the end returns 404. Event dates and links are preserved when present.", + "operationId": "bbb-news", + "parameters": [ + { + "description": "Canonical https://www.bbb.org newsroom URL: /us/news or /ca/news; ///news or ////news with country us or ca, the two-letter region code from bbb-regions and the city slug from a business profile URL; or a chapter's news_url from bbb-local-bbbs. Append a topic segment from bbb-news-topics to narrow it and ?page=N (1 to 1000) to page; no other query key is accepted", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.bbb.org/us/news/scams?page=2" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bbbnews.NewsResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get BBB newsroom stories", + "tags": [ + "BBB" + ] + } + }, + "/bbb/news/topics": { + "get": { + "description": "Returns the complete topic navigation shown by a BBB newsroom page, including its active topic. The page can be the US or Canada newsroom, a state, province or city newsroom, or one local BBB chapter's newsroom; the returned topic URLs stay in that scope, and a chapter has its own topic set.", + "operationId": "bbb-news-topics", + "parameters": [ + { + "description": "Canonical https://www.bbb.org newsroom URL, optionally with a topic segment: /us/news or /ca/news; ///news or ////news with country us or ca, the two-letter region code from bbb-regions and the city slug from a business profile URL; or a chapter's news_url from bbb-local-bbbs", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.bbb.org/us/news" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bbbnews.TopicsResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List BBB newsroom topics", + "tags": [ + "BBB" + ] + } + }, + "/bbb/page": { + "get": { + "description": "Returns one page from the evergreen library BBB keeps under https://www.bbb.org/all/ (tips, topic hubs such as tax or holiday advice, scam studies): its title, introduction, body text, links, main image and last-modified time. BBB folds older newsroom stories into these pages and redirects the old article URL, so the url can be either the evergreen page itself or an article URL that bbb-article reports as moved; requested_url, final_url and every redirect between them are returned. published_at is always present and is null, because BBB publishes no date for these pages: modified_at is when BBB last edited the page, not when a story it replaced was published, and the page may cover a wider topic than that story did. The original article ID is not on the page; article_id repeats the one in the requested article URL. Returns 404 when the page does not exist, when an article URL has not been moved (read it with bbb-article), and when BBB redirects the URL somewhere outside /all/; the error names the destination and the answer is permanent. Content BBB loads in the browser for the visitor's local BBB is not included.", + "operationId": "bbb-page", + "parameters": [ + { + "description": "Canonical https://www.bbb.org URL of an evergreen page (/all/, no query string) or of an article (/article//-) that BBB has moved to one", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.bbb.org/all/consumer/tip/what-to-know-before-purchasing-a-gift-card" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bbbnews.PageResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a BBB evergreen page", + "tags": [ + "BBB" + ] + } + }, + "/bbb/regions": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the complete current country and region list from BBB's public local directory. Use the returned region code with bbb-local-bbbs.", + "operationId": "bbb-regions", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bbbdirectory.regionsResponseDoc" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Better Business Bureau directory regions", + "tags": [ + "BBB" + ] + } + }, + "/bbb/scamtracker/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches bbb.org Scam Tracker's consumer-reported-scam database by free-text query, scam category, targeted-victim state/province, reported-scammer state/province, report-date range, and/or dollar-loss range, paginated 10 results/page. A verified search with no matches returns results: [] and total_results: 0; an unavailable or unrecognized page returns 503 rather than an empty list. When result cards are present but BBB's total count is unavailable, total_results is omitted. Every page returns has_more and, when BBB's result count is exact, total_pages: request the next page only while has_more is true, because a page past the end returns 404. Omit every filter to browse the most-recent-first feed. This is a separate BBB dataset from the bbb-search/bbb-business/bbb-business-complaints business-rating family -- consumer-reported scam incidents, not business ratings.", + "operationId": "bbb-scamtracker-search", + "parameters": [ + { + "description": "Free-text search (phone number, website, email, business name, scam ID, description). Omit to browse the most-recent feed", + "in": "query", + "name": "query", + "type": "string", + "x-example": "amazon" + }, + { + "description": "Scam category filter", + "enum": [ + "Advance Fee Loan", + "Bank/Credit Card Company Imposter", + "Business Email Compromise", + "Charity", + "Counterfeit Product", + "COVID-19", + "Credit Cards", + "Credit Repair/Debt Relief", + "CryptoCurrency", + "Debt Collections", + "Employment", + "Fake Check/Money Order", + "Fake Invoice/Supplier Bill", + "Family/Friend Emergency", + "Foreign Money Exchange", + "Government Agency Imposter", + "Government Grant", + "Healthcare/Medicaid/Medicare", + "Home Improvement", + "Identity Theft", + "Investment", + "Moving", + "Online Purchase", + "Other", + "Phishing", + "Rental", + "Retail Business", + "Romance", + "Scholarship", + "Sweepstakes/Lottery/Prizes", + "Tax Collection", + "Tech Support", + "Travel/Vacation/Timeshare", + "Utility", + "Vanity Award", + "Worthless Problem-solving Service", + "Yellow Pages/Directories" + ], + "in": "query", + "name": "scam_type", + "type": "string" + }, + { + "description": "Optional 2-letter targeted-victim state/province code (US state or Canadian province)", + "in": "query", + "name": "state", + "type": "string", + "x-example": "TX" + }, + { + "description": "Optional 2-letter reported-scammer state/province code (US state or Canadian province) -- where the scammer is reported to be, not the victim", + "in": "query", + "name": "scammer_state", + "type": "string", + "x-example": "NY" + }, + { + "description": "Optional report-date range start (YYYY-MM-DD), inclusive. Must be set together with date_to", + "in": "query", + "name": "date_from", + "type": "string", + "x-example": "2026-01-01" + }, + { + "description": "Optional report-date range end (YYYY-MM-DD), inclusive. Must be set together with date_from", + "in": "query", + "name": "date_to", + "type": "string", + "x-example": "2026-01-31" + }, + { + "description": "Optional minimum reported dollar loss. Must be set together with max_dollars_lost", + "in": "query", + "name": "min_dollars_lost", + "type": "integer", + "x-example": 500000 + }, + { + "description": "Optional maximum reported dollar loss. Must be set together with min_dollars_lost", + "in": "query", + "name": "max_dollars_lost", + "type": "integer", + "x-example": 1000000 + }, + { + "description": "Result page (10 per page), default 1", + "in": "query", + "name": "page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bbbscamtracker.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Better Business Bureau Scam Tracker reports", + "tags": [ + "BBB" + ] + } + }, + "/bbb/scamtracker/state-stats": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns aggregate scam-report stats per US state and Canadian province for a given time window: report counts, dollar losses, per-capita rates, year-over-year change, and top scam-type breakdown.", + "operationId": "bbb-scamtracker-state-stats", + "parameters": [ + { + "description": "Aggregation window, default 90", + "enum": [ + "30", + "90", + "365", + "all" + ], + "in": "query", + "name": "period", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bbbscamtracker.stateStatsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Better Business Bureau Scam Tracker state/province aggregate stats", + "tags": [ + "BBB" + ] + } + }, + "/bbb/scamtracker/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one BBB Scam Tracker consumer scam report: description, dollars lost, targeted person's location, scammer location/email/phone/URL (when known), scam type, business name used, and date reported. If BBB no longer shows the report and serves its search page at that address, the endpoint returns a permanent 404; do not retry it.", + "operationId": "bbb-scamtracker-detail", + "parameters": [ + { + "description": "BBB Scam Tracker report id, from a bbb-scamtracker-search result's id or url", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "1397968" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bbbscamtracker.detailResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Better Business Bureau Scam Tracker report", + "tags": [ + "BBB" + ] + } + }, + "/bbb/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches bbb.org for businesses by name or category near a location. Returns each business's BBB rating letter grade, accreditation status, categories, service areas, contact info, and profile URL. A verified empty first page returns results: [] and total_results: 0; an unavailable or unrecognized page returns an error. A page beyond the exact last page returns 404, and a page beyond BBB's 15-page accessible limit returns 404 naming that limit. Category IDs and state/province codes are query-scoped; call bbb-search-filters to discover values for this query and location.", + "operationId": "bbb-search", + "parameters": [ + { + "description": "Business name or category/service keyword", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "plumber" + }, + { + "description": "City and state (e.g. 'Austin, TX') or a ZIP code", + "in": "query", + "name": "location", + "required": true, + "type": "string", + "x-example": "Austin, TX" + }, + { + "description": "Result page, default 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "default": "USA", + "description": "BBB country code", + "enum": [ + "USA", + "CAN" + ], + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Sort order", + "enum": [ + "Relevance", + "Distance", + "Rating", + "AToZ", + "ZToA" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Maximum distance in miles; omit for all distances", + "enum": [ + "5", + "10", + "25", + "50", + "100" + ], + "in": "query", + "name": "distance", + "type": "string" + }, + { + "collectionFormat": "multi", + "description": "One or more BBB rating buckets", + "in": "query", + "items": { + "enum": [ + "A", + "B", + "C", + "D", + "F" + ], + "type": "string" + }, + "name": "rating", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Query-scoped category ID from bbb-search-filters", + "in": "query", + "items": { + "type": "string" + }, + "name": "category_id", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Query-scoped state or province code from bbb-search-filters", + "in": "query", + "items": { + "type": "string" + }, + "name": "state", + "type": "array" + }, + { + "description": "Only BBB-accredited businesses", + "in": "query", + "name": "accredited", + "type": "boolean" + }, + { + "description": "Only businesses offering quote requests", + "in": "query", + "name": "get_quote", + "type": "boolean" + }, + { + "description": "Only businesses serving the searched area", + "in": "query", + "name": "service_area", + "type": "boolean" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bbb.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Better Business Bureau businesses", + "tags": [ + "BBB" + ] + } + }, + "/bbb/search/filters": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the live sort, category, and state/province values BBB currently advertises for one context. Supply query and location for text search, or category_url for the exact category-browse context; do not combine these modes. Category IDs and state/province codes are query-scoped; call this endpoint again when the search context changes. Static accepted values are country USA or CAN; sort Relevance, Distance, Rating, AToZ, or ZToA; distance 5, 10, 25, 50, or 100 miles; rating A, B, C, D, or F.", + "operationId": "bbb-search-filters", + "parameters": [ + { + "description": "Business name or category/service keyword; use with location when category_url is omitted", + "in": "query", + "name": "query", + "type": "string", + "x-example": "plumber" + }, + { + "description": "City and state/province or ZIP code; use with query when category_url is omitted", + "in": "query", + "name": "location", + "type": "string", + "x-example": "Austin, TX" + }, + { + "description": "BBB category browse URL; use instead of query and location", + "in": "query", + "name": "category_url", + "type": "string", + "x-example": "https://www.bbb.org/us/tx/austin/category/plumber" + }, + { + "default": "USA", + "description": "BBB country code", + "enum": [ + "USA", + "CAN" + ], + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Result page, default 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Sort order", + "enum": [ + "Relevance", + "Distance", + "Rating", + "AToZ", + "ZToA" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Maximum distance in miles; omit for all distances", + "enum": [ + "5", + "10", + "25", + "50", + "100" + ], + "in": "query", + "name": "distance", + "type": "string" + }, + { + "collectionFormat": "multi", + "description": "Selected rating values", + "in": "query", + "items": { + "enum": [ + "A", + "B", + "C", + "D", + "F" + ], + "type": "string" + }, + "name": "rating", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Selected category IDs previously returned for this search context", + "in": "query", + "items": { + "type": "string" + }, + "name": "category_id", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Selected state/province codes previously returned for this search context", + "in": "query", + "items": { + "type": "string" + }, + "name": "state", + "type": "array" + }, + { + "description": "Only BBB-accredited businesses", + "in": "query", + "name": "accredited", + "type": "boolean" + }, + { + "description": "Only businesses offering quote requests", + "in": "query", + "name": "get_quote", + "type": "boolean" + }, + { + "description": "Only businesses serving the searched area", + "in": "query", + "name": "service_area", + "type": "boolean" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bbb.searchFiltersResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Discover Better Business Bureau search filters", + "tags": [ + "BBB" + ] + } + }, + "/bbc/article": { + "get": { + "description": "Returns a BBC News article's public metadata and body paragraphs from a canonical article URL. Live pages are not supported.", + "operationId": "bbc-article", + "parameters": [ + { + "description": "Canonical BBC News article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.bbc.co.uk/news/articles/cd68q3wynnqo" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bbc.articleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get BBC News article content", + "tags": [ + "BBC" + ] + } + }, + "/bbc/author": { + "get": { + "description": "Returns a BBC News correspondent's profile from `url`, a canonical `bbc.co.uk/news/correspondents/` address: name, short `bio` and recent articles with title, URL, section and publication date when the page shows one. `published_at` is `YYYY-MM-DD` when the page gives a full date; items labelled only with a relative time, such as `2 days ago`, come back as written.", + "operationId": "bbc-author", + "parameters": [ + { + "description": "Canonical BBC News correspondent URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.bbc.co.uk/news/correspondents/jonnydymond" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bbc.authorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a BBC News correspondent's profile", + "tags": [ + "BBC" + ] + } + }, + "/bbc/headlines": { + "get": { + "description": "Returns fresh BBC News headlines for one section, `world` by default. `section` can be `all`, `world`, `uk`, `politics`, `business`, `health`, `science_and_environment`, `technology` or `entertainment_and_arts`; `all` can mix stories from several sections. Each item has a title, URL, summary and publication time when available.", + "operationId": "bbc-headlines", + "parameters": [ + { + "description": "BBC News RSS section, defaults to world", + "enum": [ + "all", + "world", + "uk", + "politics", + "business", + "health", + "science_and_environment", + "technology", + "entertainment_and_arts" + ], + "in": "query", + "name": "section", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bbc.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get BBC News section headlines", + "tags": [ + "BBC" + ] + } + }, + "/bbc/live": { + "get": { + "description": "Returns the current server-rendered text updates from one canonical BBC News live URL. It does not subscribe to updates or return broadcast, player, or stream data.", + "operationId": "bbc-live", + "parameters": [ + { + "description": "Canonical BBC News live URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.bbc.co.uk/news/live/c6y8mjmnpxv0t" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bbc.liveResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a BBC News live-page text snapshot", + "tags": [ + "BBC" + ] + } + }, + "/bbc/search": { + "get": { + "description": "Returns a bounded page of public BBC search-result metadata: title, URL, standfirst summary, display date, and a type of article, video, audio, live, topic, or page. Topic items are BBC topic hub pages rather than articles and carry no published_at. Media entries link only to their BBC landing pages; streams, downloads, and transcripts are not returned.", + "operationId": "bbc-search", + "parameters": [ + { + "description": "Search query, up to 120 characters", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "climate" + }, + { + "description": "Results page, defaults to 1", + "in": "query", + "maximum": 10, + "minimum": 1, + "name": "page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bbc.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search public BBC pages", + "tags": [ + "BBC" + ] + } + }, + "/benzinga/article": { + "get": { + "description": "Returns a Benzinga article by `url`, a canonical dated editorial article URL: title, description, publication and update times, section, authors, image and the body `paragraphs`. Paid products, profiles, press releases, SEC pages and partner content are not accepted.", + "operationId": "benzinga-article", + "parameters": [ + { + "description": "Canonical dated Benzinga editorial article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.benzinga.com/trading-ideas/movers/26/09/62057574/spacex-stock-rises-tuesday" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Benzinga article", + "tags": [ + "Benzinga" + ] + } + }, + "/benzinga/headlines": { + "get": { + "description": "Returns current Benzinga story cards for one section. `section` is required and is `latest`, `technology-stocks`, `politics` or `health-care`. Each item has a title and URL, and may also carry a summary, author, publication time and image.", + "operationId": "benzinga-headlines", + "parameters": [ + { + "description": "Benzinga editorial section slug", + "enum": [ + "latest", + "technology-stocks", + "politics", + "health-care" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "latest" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Benzinga section headlines", + "tags": [ + "Benzinga" + ] + } + }, + "/benzinga/news": { + "get": { + "description": "Returns the current Benzinga stories, with no input needed. Each item has a title, URL and a `summary` that is the publisher's short teaser rather than article text, and may also carry the author, publication time and image.", + "operationId": "benzinga-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Benzinga top stories", + "tags": [ + "Benzinga" + ] + } + }, + "/benzinga/search": { + "get": { + "description": "Returns up to five public news-article suggestions from Benzinga's anonymous search typeahead. Ticker-only suggestions are omitted; this is not a paginated archive search.", + "operationId": "benzinga-search", + "parameters": [ + { + "description": "Search text (2 to 100 characters)", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "Tesla" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.benzingaSearchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Benzinga article suggestions", + "tags": [ + "Benzinga" + ] + } + }, + "/benzinga/sections": { + "get": { + "description": "Lists the four Benzinga editorial sections accepted by `benzinga-headlines`: `latest` (named Breaking News), `technology-stocks`, `politics` and `health-care`. Each has a `slug`, a display `name` and the section's page `url`.", + "operationId": "benzinga-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Benzinga news sections", + "tags": [ + "Benzinga" + ] + } + }, + "/bestbuy/brands": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Best Buy's full brand directory (name, category id, url), sourced from the site's own \"Name Brands\" page. Each id is directly usable as bestbuy_category's category_id input.", + "operationId": "bestbuy-brands", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bestbuy.brandsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Best Buy's full brand directory", + "tags": [ + "Best Buy" + ] + } + }, + "/bestbuy/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Best Buy's current top-level Shop departments (name, category id, url). Each id is directly usable as bestbuy_category's category_id input; this is not the full category tree.", + "operationId": "bestbuy-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bestbuy.categoriesResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Best Buy's top-level shopping departments", + "tags": [ + "Best Buy" + ] + } + }, + "/bestbuy/categories/trending": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Best Buy's fine-grained, often deeply-nested product-type categories (e.g. \"Windows Laptops\", \"55-Inch TVs (55 - 64 in)\", \"PS5 Consoles\") sourced from the homepage's own \"Best Selling\" section -- much more specific than bestbuy_categories' 21 current top-level departments. Each id is directly usable as bestbuy_category's category_id input.", + "operationId": "bestbuy-categories-trending", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bestbuy.trendingCategoriesResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Best Buy's fine-grained trending product-type categories", + "tags": [ + "Best Buy" + ] + } + }, + "/bestbuy/category": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page (up to 24) of one Best Buy category's product listing (sku, title, url, image, price, rating, review count). category_id is a Best Buy category id, e.g. pcmcat138500050001, found in a category page URL's trailing .c?id= segment. page is the optional 1-indexed page number (defaults to 1); requesting a page past the last one returns an empty products list, not an error.", + "operationId": "bestbuy-category", + "parameters": [ + { + "description": "Best Buy category id", + "in": "query", + "name": "category_id", + "required": true, + "type": "string", + "x-example": "pcmcat138500050001" + }, + { + "description": "1-indexed page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bestbuy.categoryResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Best Buy category's product listing", + "tags": [ + "Best Buy" + ] + } + }, + "/bestbuy/category/subcategories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a Best Buy category's own sibling/child category set (name, category id, url), sourced from that category page's own \"Category\" filter facet. Each id is directly usable as bestbuy_category's category_id input. category_id is a Best Buy category id, e.g. pcmcat138500050001, found in a category page URL's trailing .c?id= segment. A leaf category with no siblings returns an empty list, not an error.", + "operationId": "bestbuy-category-subcategories", + "parameters": [ + { + "description": "Best Buy category id", + "in": "query", + "name": "category_id", + "required": true, + "type": "string", + "x-example": "pcmcat138500050001" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bestbuy.subcategoriesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Best Buy category's own sibling/child categories", + "tags": [ + "Best Buy" + ] + } + }, + "/bestbuy/product": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one Best Buy product's detail (name, brand, model, color, price, availability, rating, images, breadcrumbs). sku is the numeric Best Buy SKU shown on bestbuy.com product pages and URLs.", + "operationId": "bestbuy-product", + "parameters": [ + { + "description": "Numeric Best Buy SKU", + "in": "query", + "name": "sku", + "required": true, + "type": "string", + "x-example": "6673590" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bestbuy.productResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Best Buy product's detail", + "tags": [ + "Best Buy" + ] + } + }, + "/bestbuy/product/questions": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the customer questions (with answers, when present) Best Buy embeds directly on a product's page: question text, answer text, who answered, and when. sku is the numeric Best Buy SKU shown on bestbuy.com product pages and URLs. A product with no questions asked yet returns an empty list, not an error.", + "operationId": "bestbuy-product-questions", + "parameters": [ + { + "description": "Numeric Best Buy SKU", + "in": "query", + "name": "sku", + "required": true, + "type": "string", + "x-example": "6673590" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bestbuy.productQuestionsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Best Buy product's customer questions and answers", + "tags": [ + "Best Buy" + ] + } + }, + "/bestbuy/product/related": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the organic (non-sponsored) related products Best Buy embeds in a product page's own comparison table (sku, name, url, image, price). sku is the numeric Best Buy SKU shown on bestbuy.com product pages and URLs. A product page with no comparison table returns an empty list, not an error.", + "operationId": "bestbuy-product-related", + "parameters": [ + { + "description": "Numeric Best Buy SKU", + "in": "query", + "name": "sku", + "required": true, + "type": "string", + "x-example": "6673590" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bestbuy.productRelatedResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Best Buy product's related products", + "tags": [ + "Best Buy" + ] + } + }, + "/bestbuy/product/reviews": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns page 1 (up to 20) of one Best Buy product's customer reviews (rating, title, text, author, posted date, tags such as Verified Purchaser, recommended flag, helpful/unhelpful counts). sku is the numeric Best Buy SKU shown on bestbuy.com product pages and URLs.", + "operationId": "bestbuy-product-reviews", + "parameters": [ + { + "description": "Numeric Best Buy SKU", + "in": "query", + "name": "sku", + "required": true, + "type": "string", + "x-example": "6673590" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bestbuy.productReviewsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Best Buy product's customer reviews", + "tags": [ + "Best Buy" + ] + } + }, + "/bestbuy/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page (up to 24) of one Best Buy keyword search's product listing (sku, title, url, image, price, rating, review count). q is free-text search keywords, e.g. \"laptop\". page is the optional 1-indexed page number (defaults to 1); requesting a page past the last one returns an empty products list, not an error.", + "operationId": "bestbuy-search", + "parameters": [ + { + "description": "Search keywords", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "laptop" + }, + { + "description": "1-indexed page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bestbuy.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Best Buy's product catalog", + "tags": [ + "Best Buy" + ] + } + }, + "/bestbuy/stores": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Best Buy's physical store locations in one city (name, address, phone, coordinates, rating, hours), sourced from Best Buy's own SEO store directory. state is one of the 50 US state codes plus dc and pr: `al`, `ak`, `az`, `ar`, `ca`, `co`, `ct`, `de`, `dc`, `fl`, `ga`, `hi`, `id`, `il`, `in`, `ia`, `ks`, `ky`, `la`, `me`, `md`, `ma`, `mi`, `mn`, `ms`, `mo`, `mt`, `ne`, `nv`, `nh`, `nj`, `nm`, `ny`, `nc`, `nd`, `oh`, `ok`, `or`, `pa`, `pr`, `ri`, `sc`, `sd`, `tn`, `tx`, `ut`, `vt`, `va`, `wa`, `wv`, `wi`, `wy`. city is free text matched case-insensitively against that state's own directory (e.g. \"Chicago\").", + "operationId": "bestbuy-stores", + "parameters": [ + { + "description": "Two-letter state/territory code", + "in": "query", + "name": "state", + "required": true, + "type": "string", + "x-example": "il" + }, + { + "description": "City name", + "in": "query", + "name": "city", + "required": true, + "type": "string", + "x-example": "Chicago" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bestbuy.storesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Best Buy's physical stores in one city", + "tags": [ + "Best Buy" + ] + } + }, + "/bigcommerce/category": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one product-listing page from a public BigCommerce storefront category page. url must be the full public category-page URL. page is 1-indexed and defaults to 1.", + "operationId": "bigcommerce-category", + "parameters": [ + { + "description": "Full public BigCommerce category page URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.bulkapothecary.com/melt-and-pour-soap-bases/" + }, + { + "description": "1-indexed category page, defaults to 1", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bigcommerce.categoryResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Browse a BigCommerce storefront category", + "tags": [ + "BigCommerce" + ] + } + }, + "/bigcommerce/product": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns product detail from a public BigCommerce storefront product page. url must be the full public product-page URL for a BigCommerce Stencil storefront.", + "operationId": "bigcommerce-product", + "parameters": [ + { + "description": "Full public BigCommerce product page URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.bulkapothecary.com/goat-milk-sfic-all-natural-glycerin-melt-and-pour-soap-base/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bigcommerce.productResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a BigCommerce storefront product", + "tags": [ + "BigCommerce" + ] + } + }, + "/bigcommerce/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one product-search page from a public BigCommerce storefront. url must be the public storefront origin; an optional caller path or query is ignored. q is required search text. page is 1-indexed and defaults to 1.", + "operationId": "bigcommerce-search", + "parameters": [ + { + "description": "Public BigCommerce storefront origin", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.bulkapothecary.com" + }, + { + "description": "Search text", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "lavender" + }, + { + "description": "1-indexed search page, defaults to 1", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bigcommerce.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search a BigCommerce storefront", + "tags": [ + "BigCommerce" + ] + } + }, + "/bilibili/anime-home": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the anonymous anime homepage's featured titles, latest updates, schedule, popular ranking, and new recommendations. Personalized rotating feed items are excluded.", + "operationId": "bilibili-anime-home", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bilibili.animeHomeResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Bilibili anime home sections", + "tags": [ + "Bilibili" + ] + } + }, + "/bilibili/autocomplete": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Bilibili search-box suggestions for the partial text in `q`, which is required (up to 100 characters). The response has the `query`, a `count` and deduplicated `suggestions` in Bilibili's order. A query with no matches returns an empty `suggestions` array; invalid input returns 400.", + "operationId": "bilibili-autocomplete", + "parameters": [ + { + "description": "Partial search text", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "原神" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bilibili.autocompleteResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Bilibili search suggestions", + "tags": [ + "Bilibili" + ] + } + }, + "/bilibili/guochuang-home": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the anonymous Chinese-animation homepage's featured titles, latest updates, schedule, popular ranking, and new recommendations. Personalized rotating feed items are excluded.", + "operationId": "bilibili-guochuang-home", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bilibili.guochuangHomeResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Bilibili Chinese-animation home sections", + "tags": [ + "Bilibili" + ] + } + }, + "/bilibili/must-watch": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Bilibili's curated must-watch collection, split into `classic_videos` and `latest_videos` with their counts, plus the collection `title`, `subtitle` and `explanation`. Each video has `bvid`, `aid`, `title`, `url`, `cover`, `uploader`, `published`, `stats` and `achievement`. Takes no parameters.", + "operationId": "bilibili-must-watch", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bilibili.mustWatchResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Bilibili's curated must-watch videos", + "tags": [ + "Bilibili" + ] + } + }, + "/bilibili/popular": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Bilibili's current popular videos in Bilibili's own order. Start with `cursor` 0 (the default; max 10000000) and pass back `next_cursor` for the next batch. Each video has `bvid`, `aid`, `title`, `url`, `cover`, `duration`, `uploader`, `views_and_age` and an optional `reason`. At the end of the feed `no_more` is `true` and `videos` is empty.", + "operationId": "bilibili-popular", + "parameters": [ + { + "description": "Upstream cursor from the previous response; defaults to 0", + "in": "query", + "maximum": 10000000, + "minimum": 0, + "name": "cursor", + "type": "integer", + "x-example": 0 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bilibili.popularResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get current popular Bilibili videos", + "tags": [ + "Bilibili" + ] + } + }, + "/bilibili/ranking": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the current Bilibili all-site video ranking in rank order. Each video has its `rank`, `aid`, `title`, `url`, `cover`, `views`, `danmaku`, `replies`, `favorites`, `likes`, `duration_seconds`, `published_at`, `category` and `creator` (name, `mid`, `followers`). Takes no parameters.", + "operationId": "bilibili-ranking", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bilibili.rankingResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get the current Bilibili all-site ranking", + "tags": [ + "Bilibili" + ] + } + }, + "/bilibili/vertical-home": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns stable server-rendered editorial sections for one Bilibili vertical. Allowed category values: documentary, movie, tv, variety. Rotating feeds, pagination, account state, and streaming URLs are excluded.", + "operationId": "bilibili-vertical-home", + "parameters": [ + { + "description": "Vertical: documentary, movie, tv, variety", + "enum": [ + "documentary", + "movie", + "tv", + "variety" + ], + "in": "query", + "name": "category", + "required": true, + "type": "string", + "x-example": "documentary" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bilibili.verticalHomeResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Bilibili documentary, movie, TV, or variety home sections", + "tags": [ + "Bilibili" + ] + } + }, + "/bilibili/weekly": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one issue of Bilibili's weekly selected-video series: `number` (1 to 1000000) picks the issue, and omitting it returns the latest. The issue has `subject`, `label`, `description` and `reminder`, and each video has `bvid`, `title`, `uploader`, `duration_seconds`, `recommendation` and `stats_text`. An unknown issue number returns 404.", + "operationId": "bilibili-weekly", + "parameters": [ + { + "description": "Positive issue number; omit for the latest issue", + "in": "query", + "maximum": 1000000, + "minimum": 1, + "name": "number", + "type": "integer", + "x-example": 387 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bilibili.weeklyResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Bilibili weekly selected-video issue", + "tags": [ + "Bilibili" + ] + } + }, + "/billboard/article": { + "get": { + "description": "Returns public Billboard article metadata and body paragraphs from a canonical article URL. Billboard Pro articles are returned in full when the public page serves the full body; a teaser-only page is flagged paywalled.", + "operationId": "billboard-article", + "parameters": [ + { + "description": "Canonical Billboard article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.billboard.com/music/latin/stray-kids-like-bts-younger-mexican-president-confirm-visit-1236346530/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Billboard article content", + "tags": [ + "Billboard" + ] + } + }, + "/billboard/author": { + "get": { + "description": "Returns a Billboard author's byline metadata, biography, and recent articles (sourced from the author's own public RSS feed) from a canonical author URL.", + "operationId": "billboard-author", + "parameters": [ + { + "description": "Canonical Billboard author URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.billboard.com/author/gil-kaufman/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.billboardAuthorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Billboard author profile", + "tags": [ + "Billboard" + ] + } + }, + "/billboard/headlines": { + "get": { + "description": "Returns the 10 most recent items from one Billboard section. `section` is required and takes a slug such as `chart-beat`, `country`, `rb-hip-hop`, `streaming` or `touring`. Parent sections such as `music` and `business` overlap with their subsections, so one item can appear under several. Items carry title, URL, summary, author and time.", + "operationId": "billboard-headlines", + "parameters": [ + { + "description": "Billboard section slug", + "enum": [ + "music", + "music-news", + "chart-beat", + "awards", + "concerts", + "country", + "features", + "latin", + "lyrics", + "pop", + "rb-hip-hop", + "reviews", + "rock", + "business", + "business-news", + "legal", + "management", + "publishing", + "radio", + "record-labels", + "streaming", + "tech", + "touring", + "culture", + "events", + "lifestyle", + "politics", + "pride", + "product-recommendations", + "tv-film", + "media", + "lists", + "photos-media", + "podcasts", + "videos", + "espanol", + "cultura-entretenimiento", + "musica", + "negocios", + "noticias", + "pro" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "music" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Billboard section headlines", + "tags": [ + "Billboard" + ] + } + }, + "/billboard/news": { + "get": { + "description": "Returns the latest Billboard stories, with no input needed. Each item has a title and canonical URL, plus a publication time, summary and image when Billboard provides them.", + "operationId": "billboard-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Billboard top stories", + "tags": [ + "Billboard" + ] + } + }, + "/billboard/sections": { + "get": { + "description": "Returns the public Billboard section inventory: every music, business, culture, media and Spanish-language category plus Billboard Pro, each linking to its public RSS feed.", + "operationId": "billboard-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Billboard sections", + "tags": [ + "Billboard" + ] + } + }, + "/billing/me": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the authenticated user's current billing plan, period, included credits, used credits, remaining credits, overage status, and any downgrade scheduled for the next renewal.", + "operationId": "billing-me", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Current billing state", + "schema": { + "$ref": "#/definitions/billing.billingStateResponseDoc" + } + }, + "401": { + "description": "Authentication required", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get current billing state", + "tags": [ + "Billing" + ] + } + }, + "/billing/me/checkout": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Creates a Stripe Checkout session for the authenticated user's selected paid billing plan. The created subscription is tagged with the local user id and plan so Stripe webhooks can link the customer and activate the plan after payment.", + "operationId": "billing-me-checkout", + "parameters": [ + { + "description": "Checkout request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/billing.stripeCheckoutRequestDoc" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Stripe checkout session", + "schema": { + "$ref": "#/definitions/billing.stripeSessionResponseDoc" + } + }, + "400": { + "description": "Invalid request or plan", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "401": { + "description": "Authentication required", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Create Stripe checkout session", + "tags": [ + "Billing" + ] + } + }, + "/billing/me/events": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns recent billing audit events for the authenticated user, with optional filters for time range, endpoint, request id, event status, and billable flag. Invalid event_status values and reversed time ranges return invalid params.", + "operationId": "billing-me-events", + "parameters": [ + { + "description": "Maximum records to return. Defaults to 50 and clamps to 100.", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "description": "Created-at lower bound in RFC3339 format", + "in": "query", + "name": "from", + "type": "string", + "x-example": "2026-04-01T00:00:00Z" + }, + { + "description": "Created-at upper bound in RFC3339 format", + "in": "query", + "name": "to", + "type": "string", + "x-example": "2026-04-16T00:00:00Z" + }, + { + "description": "Normalized endpoint or API path", + "in": "query", + "name": "endpoint", + "type": "string", + "x-example": "google/search" + }, + { + "description": "Request id to inspect", + "in": "query", + "name": "request_id", + "type": "string", + "x-example": "req-1" + }, + { + "description": "Billing event status", + "enum": [ + "reserved", + "charged", + "non_billable", + "failed" + ], + "in": "query", + "name": "event_status", + "type": "string" + }, + { + "description": "Filter billable or non-billable events", + "in": "query", + "name": "billable", + "type": "boolean" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Billing events", + "schema": { + "$ref": "#/definitions/billing.billingEventsResponseDoc" + } + }, + "400": { + "description": "Invalid query parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "401": { + "description": "Authentication required", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List current user's billing events", + "tags": [ + "Billing" + ] + } + }, + "/billing/me/periods": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns recent local billing period ledgers for the authenticated user. Period ledgers are local reconciliation records built from billing events and are not charged credits.", + "operationId": "billing-me-periods", + "parameters": [ + { + "description": "Maximum periods to return. Defaults to 12 and clamps to 24.", + "in": "query", + "maximum": 24, + "minimum": 1, + "name": "limit", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Billing period ledgers", + "schema": { + "$ref": "#/definitions/billing.billingPeriodLedgersResponseDoc" + } + }, + "401": { + "description": "Authentication required", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List current user's billing period ledgers", + "tags": [ + "Billing" + ] + } + }, + "/billing/me/periods/{period_key}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one billing period ledger for the authenticated user. If the ledger has not been materialized yet, it is rebuilt from billing events and stored locally. The period key must use YYYY-MM format.", + "operationId": "billing-me-period", + "parameters": [ + { + "description": "Billing period key in YYYY-MM format", + "in": "path", + "name": "period_key", + "required": true, + "type": "string", + "x-example": "2026-04" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Billing period ledger", + "schema": { + "$ref": "#/definitions/billing.billingPeriodLedgerResponseDoc" + } + }, + "400": { + "description": "Invalid period key", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "401": { + "description": "Authentication required", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get current user's billing period ledger", + "tags": [ + "Billing" + ] + } + }, + "/billing/me/periods/{period_key}/statement": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a customer-safe JSON statement for one billing period, combining the ledger, endpoint breakdown, optional billing events, and Stripe invoice evidence. Closed periods normally return a pre-frozen snapshot created during period close; historical closed periods without a snapshot are lazily frozen on read. Repair errors and raw webhook audit details are not exposed.", + "operationId": "billing-me-period-statement", + "parameters": [ + { + "description": "Billing period key in YYYY-MM format", + "in": "path", + "name": "period_key", + "required": true, + "type": "string", + "x-example": "2026-04" + }, + { + "description": "Include recent billing events. Defaults to true.", + "in": "query", + "name": "include_events", + "type": "boolean" + }, + { + "description": "Maximum billing events to include. Defaults to 100 and clamps to 500.", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "event_limit", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Billing period statement", + "schema": { + "$ref": "#/definitions/billing.billingPeriodStatementResponseDoc" + } + }, + "400": { + "description": "Invalid period key or query parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "401": { + "description": "Authentication required", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get current user's billing period statement", + "tags": [ + "Billing" + ] + } + }, + "/billing/me/periods/{period_key}/statement/download": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the exact customer-safe canonical JSON for a closed billing period statement snapshot. Closed periods are normally frozen during period close; if a historical closed period is missing a snapshot, the snapshot is lazily created before download. The raw response body is JSON, not the standard app envelope.", + "operationId": "billing-me-period-statement-download", + "parameters": [ + { + "description": "Billing period key in YYYY-MM format", + "in": "path", + "name": "period_key", + "required": true, + "type": "string", + "x-example": "2026-04" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Raw frozen customer statement JSON", + "schema": { + "type": "string" + } + }, + "400": { + "description": "Invalid period key or open billing period", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "401": { + "description": "Authentication required", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Download current user's frozen billing period statement", + "tags": [ + "Billing" + ] + } + }, + "/billing/me/portal": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Creates a Stripe customer portal session for the authenticated user's linked Stripe customer so they can manage payment method, invoices, and subscription state.", + "operationId": "billing-me-portal", + "parameters": [ + { + "description": "Portal request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/billing.stripePortalRequestDoc" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Stripe portal session", + "schema": { + "$ref": "#/definitions/billing.stripeSessionResponseDoc" + } + }, + "400": { + "description": "Invalid request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "401": { + "description": "Authentication required", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Create Stripe billing portal session", + "tags": [ + "Billing" + ] + } + }, + "/billing/me/rejections": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the authenticated user's own tally of pre-handler billing rejections (HTTP 402 quota / 429 rate-limit), summed over the last two UTC days (today and yesterday — the full retention window). These blocks never reach the request-usage index or the billing-events log, so this is the only way for a caller to see their own throttling.", + "operationId": "billing-me-rejections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Caller's own rejection tally", + "schema": { + "$ref": "#/definitions/billing.myRejectionsResponseDoc" + } + }, + "401": { + "description": "Authentication required", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Caller's own blocked-request tally", + "tags": [ + "Billing" + ] + } + }, + "/billing/me/subscription/change": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Applies an immediate, prorated upgrade after Stripe payment succeeds, or schedules a downgrade for the next renewal. The unused legacy metered item is removed as part of an immediate upgrade.", + "operationId": "billing-me-subscription-change", + "parameters": [ + { + "description": "Subscription change request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/billing.stripeSubscriptionChangeRequestDoc" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Subscription change result", + "schema": { + "$ref": "#/definitions/billing.stripeSubscriptionChangeResultResponseDoc" + } + }, + "400": { + "description": "Invalid plan, stale preview, or idempotency key", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "401": { + "description": "Authentication required", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Apply a subscription plan change", + "tags": [ + "Billing" + ] + } + }, + "/billing/me/subscription/change/cancel": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Cancels the signed-in user's scheduled subscription downgrade and keeps the current plan active. There is no immediate charge or refund, and the call changes nothing when no downgrade is scheduled. Takes no body. The response reports `action`, `current_plan`, `target_plan` and `payment_status`.", + "operationId": "billing-me-subscription-change-cancel", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Subscription change cancellation result", + "schema": { + "$ref": "#/definitions/billing.stripeSubscriptionChangeResultResponseDoc" + } + }, + "400": { + "description": "Invalid subscription state", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "401": { + "description": "Authentication required", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Cancel a scheduled subscription downgrade", + "tags": [ + "Billing" + ] + } + }, + "/billing/me/subscription/preview": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Previews an authenticated user's immediate upgrade or next-renewal downgrade. Stripe calculates the upgrade proration; downgrades keep the current plan and credits active until the current period ends.", + "operationId": "billing-me-subscription-preview", + "parameters": [ + { + "description": "Subscription change preview request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/billing.stripeSubscriptionChangeRequestDoc" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Subscription change preview", + "schema": { + "$ref": "#/definitions/billing.stripeSubscriptionChangePreviewResponseDoc" + } + }, + "400": { + "description": "Invalid plan or subscription change", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "401": { + "description": "Authentication required", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Preview a subscription plan change", + "tags": [ + "Billing" + ] + } + }, + "/bing/images": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Bing image search results for a query string. Locale defaults to country=us and lang=en-us. Returns 503 when Bing serves a challenge page or unusable results.", + "operationId": "bing-images", + "parameters": [ + { + "description": "Search query", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "openai" + }, + { + "description": "1-based page number; defaults to 1", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Results per page; defaults to 10, clamped to 1..50", + "in": "query", + "maximum": 50, + "minimum": 1, + "name": "count", + "type": "integer", + "x-example": 10 + }, + { + "description": "Two-letter country code; defaults to us", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Bing UI language; defaults to en-us", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bing.imagesResponseDoc" + } + }, + "400": { + "description": "Missing or invalid query parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "No results found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Bing upstream request failed", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Bing image results", + "tags": [ + "Bing" + ] + } + }, + "/bing/news": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Bing news search results for a query string. Locale defaults to country=us and lang=en-us. Returns 503 when Bing serves a challenge page or unusable results.", + "operationId": "bing-news", + "parameters": [ + { + "description": "Search query", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "openai" + }, + { + "description": "1-based page number; defaults to 1", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Results per page; defaults to 10, clamped to 1..50", + "in": "query", + "maximum": 50, + "minimum": 1, + "name": "count", + "type": "integer", + "x-example": 10 + }, + { + "description": "Two-letter country code; defaults to us", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Bing UI language; defaults to en-us", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bing.newsResponseDoc" + } + }, + "400": { + "description": "Missing or invalid query parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "No results found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Bing upstream request failed", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Bing news results", + "tags": [ + "Bing" + ] + } + }, + "/bing/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Bing web search results for a query string, including organic results, optional context panel data, related queries, people-also-ask questions, news modules, video modules, and page-based pagination. Empty optional blocks are omitted from the JSON response. Locale defaults to country=us and lang=en-us. Returns 503 on a genuine transport failure or challenge page. Bing occasionally serves a well-formed page whose results share no significant term with the query; when every attempt hits this, the response is still returned as 200 with data.low_confidence set to true (and the X-Low-Confidence header) instead of being withheld, so callers get Bing's real answer plus an honest signal to double-check it rather than nothing. Queries that use the site: operator (for example site:gov.hu) are not supported: Bing serves a bot-verification challenge for them, so they are rejected with 400 before any request is made. Use the DuckDuckGo (/api/v1/duckduckgo/search), Brave (/api/v1/brave/search), or Yahoo (/api/v1/yahoo-search/search) search endpoints for domain-restricted searches instead.", + "operationId": "bing-search", + "parameters": [ + { + "description": "Search query", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "openai" + }, + { + "description": "1-based page number; defaults to 1", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Results per page; defaults to 10, clamped to 1..50", + "in": "query", + "maximum": 50, + "minimum": 1, + "name": "count", + "type": "integer", + "x-example": 10 + }, + { + "description": "Two-letter country code; defaults to us", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Bing UI language; defaults to en-us", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "data.low_confidence is true when Bing's results shared no significant term with the query (see the field's description); the data is still exactly what Bing returned", + "schema": { + "$ref": "#/definitions/bing.searchResponseDoc" + } + }, + "400": { + "description": "Missing or invalid query parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "No results found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Bing upstream request failed (transport failure, challenge page, or every hedge attempt rejected -- see data.low_confidence for the case where Bing did answer but every attempt looked unrelated to the query)", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Bing web results", + "tags": [ + "Bing" + ] + } + }, + "/bing/suggest": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Bing autosuggest query completions for a query prefix. Locale defaults to country=us and lang=en-us. Suggestions are fetched from public Bing suggest endpoints and trimmed to the requested count. `rich=true` adds entity cards (name, description, image) where Bing shows them.", + "operationId": "bing-suggest", + "parameters": [ + { + "description": "Search query prefix", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "openai" + }, + { + "description": "Suggestions to return; defaults to 10, clamped to 1..12", + "in": "query", + "maximum": 12, + "minimum": 1, + "name": "count", + "type": "integer", + "x-example": 10 + }, + { + "description": "Two-letter country code; defaults to us", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Bing UI language; defaults to en-us", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + }, + { + "description": "Add entity name, description, and image to suggestions Bing resolves to a known entity; defaults to false", + "in": "query", + "name": "rich", + "type": "boolean", + "x-example": false + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bing.suggestResponseDoc" + } + }, + "400": { + "description": "Missing or invalid query parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Bing upstream request failed", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Suggest Bing search queries", + "tags": [ + "Bing" + ] + } + }, + "/bing/videos": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Bing video search results for a query string. Locale defaults to country=us and lang=en-us. Returns 503 when Bing serves a challenge page or unusable results.", + "operationId": "bing-videos", + "parameters": [ + { + "description": "Search query", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "openai" + }, + { + "description": "1-based page number; defaults to 1", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Results per page; defaults to 10, clamped to 1..50", + "in": "query", + "maximum": 50, + "minimum": 1, + "name": "count", + "type": "integer", + "x-example": 10 + }, + { + "description": "Two-letter country code; defaults to us", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Bing UI language; defaults to en-us", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bing.videosResponseDoc" + } + }, + "400": { + "description": "Missing or invalid query parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "No results found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Bing upstream request failed", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Bing video results", + "tags": [ + "Bing" + ] + } + }, + "/birminghammail/article": { + "get": { + "description": "Returns public Birmingham Mail article metadata (including the section) and body paragraphs from a canonical article URL. Photo-gallery URLs are rejected.", + "operationId": "birminghammail-article", + "parameters": [ + { + "description": "Canonical Birmingham Mail article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.birminghammail.co.uk/news/midlands-news/birmingham-road-six-cars-towed-34668610" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Birmingham Mail article content", + "tags": [ + "Birmingham Mail" + ] + } + }, + "/birminghammail/author": { + "get": { + "description": "Returns one Birmingham Mail author's public profile: name, job title, bio, email, X/Twitter handle, and one page of their recent articles.", + "operationId": "birminghammail-author", + "parameters": [ + { + "description": "Author slug, e.g. stephanie-balloo", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "stephanie-balloo" + }, + { + "description": "Canonical birminghammail.co.uk/authors// URL; alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.birminghammail.co.uk/authors/stephanie-balloo/" + }, + { + "default": 1, + "description": "1-based page number of the author's article list (1 to 100); overrides any pageNumber in url", + "in": "query", + "name": "page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.reachAuthorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Birmingham Mail author profile", + "tags": [ + "Birmingham Mail" + ] + } + }, + "/birminghammail/headlines": { + "get": { + "description": "Returns fresh headlines from one public Birmingham Mail section. Photo galleries are omitted because they have no readable article body.", + "operationId": "birminghammail-headlines", + "parameters": [ + { + "description": "Birmingham Mail section slug", + "enum": [ + "news", + "news/midlands-news", + "news/uk-news", + "news/world-news", + "news/showbiz-tv", + "news/cost-of-living", + "news/money", + "news/health", + "black-country", + "motoring", + "motoring/motoring-news", + "sport", + "sport/football", + "sport/football/football-news", + "sport/football/transfer-news", + "whats-on", + "whats-on/whats-on-news", + "whats-on/family-kids-news", + "whats-on/food-drink-news", + "whats-on/music-nightlife-news", + "whats-on/shopping", + "travel", + "special-features" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "news" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Birmingham Mail section headlines", + "tags": [ + "Birmingham Mail" + ] + } + }, + "/birminghammail/news": { + "get": { + "description": "Returns fresh Birmingham Mail top stories from the public home RSS feed. Photo galleries are omitted because they have no readable article body.", + "operationId": "birminghammail-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Birmingham Mail top stories", + "tags": [ + "Birmingham Mail" + ] + } + }, + "/birminghammail/sections": { + "get": { + "description": "Lists the 23 Birmingham Mail sections that `birminghammail-headlines` accepts, such as `news/midlands-news`, `black-country`, `sport/football/transfer-news` and `whats-on`. Each has a `slug`, a display `name` and the feed `url`. Only sections with a recently updated feed are included (last verified 2026-09-25), and each returns up to about 25 entries.", + "operationId": "birminghammail-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Birmingham Mail sections", + "tags": [ + "Birmingham Mail" + ] + } + }, + "/bleacherreport/article": { + "get": { + "description": "Returns public Bleacher Report article metadata and body paragraphs from a canonical article URL. Bleacher Report serves full articles to anonymous readers, so no article is paywalled.", + "operationId": "bleacherreport-article", + "parameters": [ + { + "description": "Canonical Bleacher Report article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://bleacherreport.com/articles/25502441-vladimir-guerrero-jr-drops-viral-quote-2026-slump-after-signing-500m-blue-jays-contract" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Bleacher Report article content", + "tags": [ + "Bleacher Report" + ] + } + }, + "/bleacherreport/author": { + "get": { + "description": "Returns a Bleacher Report writer's profile, identified by `slug` (such as `scott-polacek`) or a canonical `bleacherreport.com/writers/` `url`; exactly one is required. The response has name, role, biography, photo and about 20 latest stories with title, URL and thumbnail. Publication times are not shown on the profile, so `published_at` is omitted; an unknown slug returns 404.", + "operationId": "bleacherreport-author", + "parameters": [ + { + "description": "Writer slug, e.g. scott-polacek", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "scott-polacek" + }, + { + "description": "Canonical bleacherreport.com/writers/ URL; alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://bleacherreport.com/writers/scott-polacek" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.bleacherreportAuthorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Bleacher Report writer profile", + "tags": [ + "Bleacher Report" + ] + } + }, + "/bleacherreport/headlines": { + "get": { + "description": "Returns the stories on one Bleacher Report league or sub-hub page, newest first. `section` is required and takes a slug such as `nfl`, `nba-draft`, `formula-1` or `recruiting`. Each has a headline, article URL and publication time, plus thumbnail and blurb when present. Busy leagues return 100 or more stories, quiet ones only a few.", + "operationId": "bleacherreport-headlines", + "parameters": [ + { + "description": "Bleacher Report section slug", + "enum": [ + "nba", + "nfl", + "mlb", + "nhl", + "wnba", + "college-football", + "college-basketball", + "womens-college-basketball", + "world-football", + "tennis", + "golf", + "nascar", + "formula-1", + "mma", + "boxing", + "wwe", + "all-elite-wrestling", + "olympics", + "nba-rumors", + "nba-draft", + "nfl-rumors", + "nfl-draft", + "fantasy-football", + "mlb-rumors", + "mlb-prospects", + "nhl-rumors", + "nhl-draft", + "recruiting", + "college-basketball-recruiting", + "bracketology" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "nba" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Bleacher Report section headlines", + "tags": [ + "Bleacher Report" + ] + } + }, + "/bleacherreport/news": { + "get": { + "description": "Returns around 180 Bleacher Report sports stories from roughly the last day or two, newest first, with no input needed. Each has a title, canonical article URL and publication time. Live blogs are excluded because they are not article pages.", + "operationId": "bleacherreport-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Bleacher Report top stories", + "tags": [ + "Bleacher Report" + ] + } + }, + "/bleacherreport/sections": { + "get": { + "description": "Lists the 30 Bleacher Report sections that `bleacherreport-headlines` accepts: 18 league and sport hubs such as `nfl`, `tennis` and `olympics`, plus 12 sub-hubs such as `nba-draft` and `bracketology`. Each has a `slug`, display `name` and landing-page `url`. Team pages, scores, standings and MotoGP are not included.", + "operationId": "bleacherreport-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Bleacher Report sections", + "tags": [ + "Bleacher Report" + ] + } + }, + "/bloomberg/article": { + "get": { + "description": "Returns a public Bloomberg article by `url`: title, description, publication and update times, section, categories, authors, image, `is_premium` and the body `paragraphs` in order. Subscriber-only articles that Bloomberg shows as a truncated preview return `403`, an article with no body returns `503`, and non-article or non-Bloomberg URLs return `400`.", + "operationId": "bloomberg-article", + "parameters": [ + { + "description": "Canonical Bloomberg article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.bloomberg.com/news/articles/2026-09-20/example-slug" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bloomberg.articleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Bloomberg article's content", + "tags": [ + "Bloomberg" + ] + } + }, + "/bloomberg/author": { + "get": { + "description": "Returns a Bloomberg author's profile from `url`, a canonical `https://www.bloomberg.com/authors//` address, where `` is an opaque token Bloomberg assigns and cannot be guessed. The response has `name`, `title`, `bio` and recent content with title, URL, `type`, `section`, full `byline` and publication and update times.", + "operationId": "bloomberg-author", + "parameters": [ + { + "description": "Canonical Bloomberg author URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.bloomberg.com/authors/AXSztklFffk/bernard-goyder" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bloomberg.authorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Bloomberg author's profile", + "tags": [ + "Bloomberg" + ] + } + }, + "/bloomberg/categories": { + "get": { + "description": "Lists Bloomberg's public editorial navigation categories discovered from its embedded navigation state. Each returned section slug is accepted by /bloomberg/headlines; product, account, newsletter, and sponsored-content links are excluded.", + "operationId": "bloomberg-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bloomberg.categoriesResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Bloomberg editorial categories", + "tags": [ + "Bloomberg" + ] + } + }, + "/bloomberg/headlines": { + "get": { + "description": "Returns current Bloomberg story cards for one editorial section. `section` is required and takes a slug from the Bloomberg categories list, such as `markets`, `economics` or `politics`. Each item has a title and canonical URL, and may also carry a description, image and publication time.", + "operationId": "bloomberg-headlines", + "parameters": [ + { + "description": "Section slug from /bloomberg/categories", + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "markets" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bloomberg.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get the latest stories in a Bloomberg section", + "tags": [ + "Bloomberg" + ] + } + }, + "/bloomberg/news": { + "get": { + "description": "Returns Bloomberg's current news feed: the newest stories across all sections, each with its title, canonical URL, and publication time.", + "operationId": "bloomberg-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bloomberg.newsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get the latest Bloomberg stories", + "tags": [ + "Bloomberg" + ] + } + }, + "/bloomberg/news-sitemaps": { + "get": { + "description": "Lists Bloomberg's monthly news sitemaps, each with its `url` and `last_modified` date. Use them to find historical news beyond the rolling latest feed at `/bloomberg/news`. Takes no parameters.", + "operationId": "bloomberg-news-sitemaps", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bloomberg.newsSitemapsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Bloomberg monthly news sitemaps", + "tags": [ + "Bloomberg" + ] + } + }, + "/bluesky/author-feed": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a page of a Bluesky account's posts, newest first, including text, engagement counts, and any attached images/link card/quoted post.", + "operationId": "bluesky-author-feed", + "parameters": [ + { + "description": "A handle (e.g. bsky.app) or DID", + "in": "query", + "name": "actor", + "required": true, + "type": "string", + "x-example": "bsky.app" + }, + { + "description": "Page size, 1-100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 25 + }, + { + "description": "Pagination cursor from a previous response's cursor field", + "in": "query", + "name": "cursor", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bluesky.authorFeedResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "A Bluesky account's posts", + "tags": [ + "Bluesky" + ] + } + }, + "/bluesky/followers": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a page of a Bluesky account's followers. `actor` is required and is a handle such as `bsky.app` or a DID. `limit` is 1 to 100 (default 25); pass the returned `cursor` back to continue. Each follower has `did`, `handle`, `display_name`, `description`, `avatar_url` and `created_at`, and `subject` describes the account itself.", + "operationId": "bluesky-followers", + "parameters": [ + { + "description": "A handle (e.g. bsky.app) or DID", + "in": "query", + "name": "actor", + "required": true, + "type": "string", + "x-example": "bsky.app" + }, + { + "description": "Page size, 1-100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 25 + }, + { + "description": "Pagination cursor from a previous response's cursor field", + "in": "query", + "name": "cursor", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bluesky.followersResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "A Bluesky account's followers", + "tags": [ + "Bluesky" + ] + } + }, + "/bluesky/follows": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a page of the accounts a Bluesky account follows.", + "operationId": "bluesky-follows", + "parameters": [ + { + "description": "A handle (e.g. bsky.app) or DID", + "in": "query", + "name": "actor", + "required": true, + "type": "string", + "x-example": "bsky.app" + }, + { + "description": "Page size, 1-100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 25 + }, + { + "description": "Pagination cursor from a previous response's cursor field", + "in": "query", + "name": "cursor", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bluesky.followsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Accounts a Bluesky account follows", + "tags": [ + "Bluesky" + ] + } + }, + "/bluesky/post-likes": { + "get": { + "description": "Lists the accounts that liked a Bluesky post, identified by its `at://` post `uri`, which is required. `limit` defaults to 25 and is capped at 100; pass the returned `cursor` back for the next page. Each actor has `did`, `handle`, `display_name`, `description`, `avatar_url` and `created_at`.", + "operationId": "bluesky-post-likes", + "parameters": [ + { + "description": "The post's at:// URI", + "in": "query", + "name": "uri", + "required": true, + "type": "string", + "x-example": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l" + }, + { + "default": 25, + "description": "Page size, 1-100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Pagination cursor", + "in": "query", + "name": "cursor", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bluesky.postActorsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List actors who liked a Bluesky post", + "tags": [ + "Bluesky" + ] + } + }, + "/bluesky/post-quotes": { + "get": { + "description": "Lists the Bluesky posts that quote a given post, identified by its `at://` post `uri`, which is required. `limit` defaults to 25 and is capped at 100; pass the returned `cursor` back for the next page. Each post has its `text`, `author`, `created_at`, `langs`, like, quote, reply and repost counts, `images` and `external` link card.", + "operationId": "bluesky-post-quotes", + "parameters": [ + { + "description": "The quoted post's at:// URI", + "in": "query", + "name": "uri", + "required": true, + "type": "string", + "x-example": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l" + }, + { + "default": 25, + "description": "Page size, 1-100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Pagination cursor", + "in": "query", + "name": "cursor", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bluesky.postQuotesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List quotes of a Bluesky post", + "tags": [ + "Bluesky" + ] + } + }, + "/bluesky/post-reposted-by": { + "get": { + "description": "Lists the accounts that reposted a Bluesky post, identified by its `at://` post `uri`, which is required. `limit` defaults to 25 and is capped at 100; pass the returned `cursor` back for the next page. Each actor has `did`, `handle`, `display_name`, `description`, `avatar_url` and `created_at`.", + "operationId": "bluesky-post-reposted-by", + "parameters": [ + { + "description": "The post's at:// URI", + "in": "query", + "name": "uri", + "required": true, + "type": "string", + "x-example": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l" + }, + { + "default": 25, + "description": "Page size, 1-100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Pagination cursor", + "in": "query", + "name": "cursor", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bluesky.postActorsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List actors who reposted a Bluesky post", + "tags": [ + "Bluesky" + ] + } + }, + "/bluesky/post-thread": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a Bluesky post along with its nested replies (and, when the post is itself a reply, its parent chain), up to `depth` levels deep.", + "operationId": "bluesky-post-thread", + "parameters": [ + { + "description": "The post's at:// URI, e.g. from an author-feed or search-actors result's post uri field", + "in": "query", + "name": "uri", + "required": true, + "type": "string", + "x-example": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l" + }, + { + "description": "Reply-tree depth, 1-10", + "in": "query", + "name": "depth", + "type": "integer", + "x-example": 6 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bluesky.postThreadResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "A Bluesky post and its reply tree", + "tags": [ + "Bluesky" + ] + } + }, + "/bluesky/posts": { + "get": { + "description": "Returns public Bluesky posts for 1-25 at:// post URIs. Missing, deleted, or blocked posts are omitted when the public AppView omits them.", + "operationId": "bluesky-posts", + "parameters": [ + { + "collectionFormat": "csv", + "description": "One or more at:// post URIs (1-25); repeat the parameter for multiple URIs", + "in": "query", + "items": { + "type": "string" + }, + "name": "uris", + "required": true, + "type": "array", + "x-example": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bluesky.postsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Look up Bluesky posts in a batch", + "tags": [ + "Bluesky" + ] + } + }, + "/bluesky/profile": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a Bluesky account's public profile: display name, description, avatar/banner images, and follower/follows/posts counts.", + "operationId": "bluesky-profile", + "parameters": [ + { + "description": "A handle (e.g. bsky.app) or DID (e.g. did:plc:z72i7hdynmk6r22z27h6tvur)", + "in": "query", + "name": "actor", + "required": true, + "type": "string", + "x-example": "bsky.app" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bluesky.profileResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "A Bluesky account's full public profile", + "tags": [ + "Bluesky" + ] + } + }, + "/bluesky/search-actors": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Bluesky accounts matching a query against display name, handle, and profile description.", + "operationId": "bluesky-search-actors", + "parameters": [ + { + "description": "Search text", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "news" + }, + { + "description": "Page size, 1-100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 25 + }, + { + "description": "Pagination cursor from a previous response's cursor field", + "in": "query", + "name": "cursor", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bluesky.searchActorsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Bluesky accounts", + "tags": [ + "Bluesky" + ] + } + }, + "/bluesky/trending-topics": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Bluesky's current trending topics and suggested feeds, each with a link to its feed. This surface is less stable than the rest of this family -- Bluesky may change its shape without notice.", + "operationId": "bluesky-trending-topics", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bluesky.trendingTopicsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Bluesky's current trending topics", + "tags": [ + "Bluesky" + ] + } + }, + "/bo3/economy-baseline": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the site-wide CS2 round win rate for every pairing of buy levels (rounds, wins, win rate), the baseline to compare a team's `economy` view of bo3-team-stats with. Levels: -1 full eco, 0 semi-eco, 1 half buy, 2 full buy; the opposing level is null when it is unknown.", + "operationId": "bo3-economy-baseline", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.EconomyBaselineResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg CS2 economy baseline", + "tags": [ + "BO3" + ] + } + }, + "/bo3/forum": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns BO3.gg forum threads for one game with paging: a `category` id from bo3-forum-categories and `sort` (`activity` with pinned threads first, `newest`, `comments`, `rating`), up to 100 per page. Each thread has slug, title, category, comment count, rating, pinned flag, created and last-activity times and the author's nickname; post bodies, reactions and replies are not returned.", + "operationId": "bo3-forum", + "parameters": [ + { + "description": "Game; one of cs2, valorant, lol, dota2, r6siege, mlbb; defaults to cs2", + "enum": [ + "cs2", + "valorant", + "lol", + "dota2", + "r6siege", + "mlbb" + ], + "in": "query", + "name": "game", + "type": "string" + }, + { + "description": "Forum category id from bo3-forum-categories, for example 4", + "in": "query", + "minimum": 1, + "name": "category", + "type": "integer" + }, + { + "description": "Order; one of activity, newest, comments, rating; defaults to activity", + "enum": [ + "activity", + "newest", + "comments", + "rating" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Zero-based offset; defaults to 0", + "in": "query", + "minimum": 0, + "name": "offset", + "type": "integer" + }, + { + "description": "Page size, 1 to 100; defaults to 20", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.ForumFeedResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg forum threads with category and sort filters", + "tags": [ + "BO3" + ] + } + }, + "/bo3/forum-categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the BO3.gg forum categories of one game (id, slug and title, ordered by id; CS2 has CS2, IDEAS AND BUGS and OFF TOP) that the `category` filter of bo3-forum accepts.", + "operationId": "bo3-forum-categories", + "parameters": [ + { + "description": "Game; one of cs2, valorant, lol, dota2, r6siege, mlbb; defaults to cs2", + "enum": [ + "cs2", + "valorant", + "lol", + "dota2", + "r6siege", + "mlbb" + ], + "in": "query", + "name": "game", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.ForumCategoriesResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg forum categories", + "tags": [ + "BO3" + ] + } + }, + "/bo3/match": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one BO3.gg match by slug: teams with scores and winner, status, best-of, tier, start and end time, tournament, stage and round, the maps played with scores, the site's AI prediction, live and recorded streams and the key-fact insights for each team. The slug comes from bo3-match-history.", + "operationId": "bo3-match", + "parameters": [ + { + "description": "Match slug from bo3-match-history, for example vitality-vs-natus-vincere-27-10-2026", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "vitality-vs-natus-vincere-27-10-2026" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.MatchInfo" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg match detail", + "tags": [ + "BO3" + ] + } + }, + "/bo3/match-games": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the maps of one BO3.gg match with round-by-round results: for each map the number, map name, state, start, duration in seconds, final score, per-half side results (CT or T score, overtime) and every round with its number, duration, end reason, winning side and running score. A match with no maps yet returns an empty list.", + "operationId": "bo3-match-games", + "parameters": [ + { + "description": "Numeric BO3 match id (the id of a bo3-match-history row)", + "in": "query", + "minimum": 1, + "name": "match_id", + "required": true, + "type": "integer", + "x-example": 132243 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.MatchGamesResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg esports match maps with round-by-round results", + "tags": [ + "BO3" + ] + } + }, + "/bo3/match-history": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns BO3.gg's esports match history for one game, newest first by default, with paging and filters: `status` (`finished`, `defwin`, `upcoming`, `current`, `canceled`, `postponed`; the default is finished and default-win matches together), `tier` (`s` to `d`), an inclusive `from`/`to` day range (UTC), `sort` and `offset`/`limit` (up to 100 per page). Each match has teams, scores, winner, best-of, tournament, maps and the site's AI prediction; `total` and `has_more` page through the full history.", + "operationId": "bo3-match-history", + "parameters": [ + { + "description": "Game; one of cs2, valorant, lol, dota2, r6siege, mlbb; defaults to cs2", + "enum": [ + "cs2", + "valorant", + "lol", + "dota2", + "r6siege", + "mlbb" + ], + "in": "query", + "name": "game", + "type": "string" + }, + { + "description": "Match status; one of finished, defwin, upcoming, current, canceled, postponed; defaults to finished and defwin together", + "enum": [ + "finished", + "defwin", + "upcoming", + "current", + "canceled", + "postponed" + ], + "in": "query", + "name": "status", + "type": "string" + }, + { + "description": "Tournament tier; one of s, a, b, c, d", + "enum": [ + "s", + "a", + "b", + "c", + "d" + ], + "in": "query", + "name": "tier", + "type": "string" + }, + { + "description": "First start day, YYYY-MM-DD (UTC, inclusive)", + "in": "query", + "name": "from", + "type": "string", + "x-example": "2026-10-01" + }, + { + "description": "Last start day, YYYY-MM-DD (UTC, inclusive)", + "in": "query", + "name": "to", + "type": "string", + "x-example": "2026-10-27" + }, + { + "description": "Order by start time; one of newest, oldest; defaults to newest", + "enum": [ + "newest", + "oldest" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Zero-based offset; defaults to 0", + "in": "query", + "minimum": 0, + "name": "offset", + "type": "integer" + }, + { + "description": "Page size, 1 to 100; defaults to 20", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.MatchHistoryResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg esports match history", + "tags": [ + "BO3" + ] + } + }, + "/bo3/match-players": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns every player's statistics for one BO3.gg match, ordered by team then nickname: kills, deaths, assists, headshots, first kills and deaths, trades, KAST, rating, ADR, damage, utility and money figures as a numeric `stats` map, plus the multikill counts (2K to 5K), team and opponent. The match slug comes from bo3-match-history.", + "operationId": "bo3-match-players", + "parameters": [ + { + "description": "Match slug from bo3-match-history, for example vitality-vs-natus-vincere-27-10-2026", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "vitality-vs-natus-vincere-27-10-2026" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.MatchPlayersResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg per-player match statistics", + "tags": [ + "BO3" + ] + } + }, + "/bo3/news-categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the BO3.gg editorial categories (id and title, sorted by title: Analytics, Article, Blog, Events, Gaming, Guides, Highlights, Interviews, News, Predictions, Results, Streams, Tips, Transfers, Wiki) accepted by the `category` filter of bo3-news-feed.", + "operationId": "bo3-news-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.NewsCategoriesResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg news categories", + "tags": [ + "BO3" + ] + } + }, + "/bo3/news-feed": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns BO3.gg's editorial feed for one game with paging and filters: `section` (`news`, `article`, `wiki`, `predictions`, `reviews`), a `locale` (16 languages, `en` by default), a `category` id from bo3-news-categories and `sort` (`newest`, `oldest`), up to 100 per page. Each item has slug, title, description, category, publish time, author, tags, image and canonical URL; `total` and `has_more` page through the archive (over 100,000 items across games).", + "operationId": "bo3-news-feed", + "parameters": [ + { + "description": "Game; one of cs2, valorant, lol, dota2, r6siege, mlbb, games (general gaming news); defaults to cs2", + "enum": [ + "cs2", + "valorant", + "lol", + "dota2", + "r6siege", + "mlbb", + "games" + ], + "in": "query", + "name": "game", + "type": "string" + }, + { + "description": "Editorial section; one of news, article, wiki, predictions, reviews (game reviews, game=games only); defaults to news", + "enum": [ + "news", + "article", + "wiki", + "predictions", + "reviews" + ], + "in": "query", + "name": "section", + "type": "string" + }, + { + "description": "Tag slug such as team-liquid or pgl-masters-bucharest-2026 (team, player, tournament or topic tag); an unknown tag returns an empty list", + "in": "query", + "name": "tag", + "type": "string", + "x-example": "team-liquid" + }, + { + "description": "Language of the items; one of en, ru, pt, es, de, fr, tr, pl, id, vi, ja, ko, ua, ms, tl, da; defaults to en", + "enum": [ + "en", + "ru", + "pt", + "es", + "de", + "fr", + "tr", + "pl", + "id", + "vi", + "ja", + "ko", + "ua", + "ms", + "tl", + "da" + ], + "in": "query", + "name": "locale", + "type": "string" + }, + { + "description": "Category id from bo3-news-categories, for example 38 (Predictions)", + "in": "query", + "minimum": 1, + "name": "category", + "type": "integer" + }, + { + "description": "Order by publish time; one of newest, oldest; defaults to newest", + "enum": [ + "newest", + "oldest" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Zero-based offset; defaults to 0", + "in": "query", + "minimum": 0, + "name": "offset", + "type": "integer" + }, + { + "description": "Page size, 1 to 100; defaults to 20", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.NewsFeedResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg news, articles, wiki and predictions feed", + "tags": [ + "BO3" + ] + } + }, + "/bo3/player": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a BO3.gg player profile by slug: nickname, name, game, birthday, role, coach flag, country, current team and join date, six-month average rating, career prize money, social links, former names and tournament achievements newest first. Use `game` to insist on one game; a player of another game is not found.", + "operationId": "bo3-player", + "parameters": [ + { + "description": "Player slug, for example donk", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "donk" + }, + { + "description": "Game the player must belong to; one of cs2, valorant, lol, dota2, r6siege, mlbb", + "enum": [ + "cs2", + "valorant", + "lol", + "dota2", + "r6siege", + "mlbb" + ], + "in": "query", + "name": "game", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.PlayerInfo" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg player profile", + "tags": [ + "BO3" + ] + } + }, + "/bo3/player-leaderboard": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns BO3.gg's CS2 player leaderboard over a day range (default: the last six months): players ranked by `sort` (`rating`, `kd`, `kills`, `damage`, `assists`, `headshots`, `games`, `rounds`) in `order` (`desc`, `asc`), optionally limited to games at one tournament `tier` (`s` to `d`), with paging. Each player has team, games, rounds and every per-game average as a `stats` map; players below the API's minimum-games threshold for the window are excluded (`min_games_count`). CS2 only.", + "operationId": "bo3-player-leaderboard", + "parameters": [ + { + "description": "First day, YYYY-MM-DD (UTC); defaults to six months before to", + "in": "query", + "name": "from", + "type": "string", + "x-example": "2026-04-28" + }, + { + "description": "Last day, YYYY-MM-DD (UTC); defaults to today", + "in": "query", + "name": "to", + "type": "string", + "x-example": "2026-10-28" + }, + { + "description": "Tournament tier of the games counted; one of s, a, b, c, d", + "enum": [ + "s", + "a", + "b", + "c", + "d" + ], + "in": "query", + "name": "tier", + "type": "string" + }, + { + "description": "Stat to rank by; one of rating, kd, kills, damage, assists, headshots, games, rounds; defaults to rating", + "enum": [ + "rating", + "kd", + "kills", + "damage", + "assists", + "headshots", + "games", + "rounds" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Direction; one of desc, asc; defaults to desc", + "enum": [ + "desc", + "asc" + ], + "in": "query", + "name": "order", + "type": "string" + }, + { + "description": "Zero-based offset; defaults to 0", + "in": "query", + "minimum": 0, + "name": "offset", + "type": "integer" + }, + { + "description": "Page size, 1 to 100; defaults to 20", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.LeaderboardResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg CS2 player leaderboard", + "tags": [ + "BO3" + ] + } + }, + "/bo3/player-recent-matches": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a CS2 player's newest matches (up to 30) with the opponent, the tournament, the rounds played, each map in order with whether the player's team won it, and the player's own line for the match (rating, kills, deaths, assists, damage, first kills and deaths, trade kills and deaths, headshots, hits, shots, accuracy, money saved and equipment value). Filter by `opponent` or `tournament`. Date windows are not supported upstream; the list does not page past 30.", + "operationId": "bo3-player-recent-matches", + "parameters": [ + { + "description": "Player slug, for example donk", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "donk" + }, + { + "description": "Opposing team slug, for example mouz-cs2", + "in": "query", + "name": "opponent", + "type": "string" + }, + { + "description": "Tournament slug from bo3-tournaments", + "in": "query", + "name": "tournament", + "type": "string" + }, + { + "default": 10, + "description": "Newest matches to return, 1 to 30, default 10", + "in": "query", + "maximum": 30, + "minimum": 1, + "name": "limit", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.RecentMatchesResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg player recent matches", + "tags": [ + "BO3" + ] + } + }, + "/bo3/player-stats": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one statistics view of a BO3.gg player over a day range (default: the last six months): `general` (match, game, round, kill, death, assist and damage totals), `maps` (rating, kills and damage per map) or `accuracy` (hits, damage and kills by hit group). General views fill `stats`; the other views fill `rows`.", + "operationId": "bo3-player-stats", + "parameters": [ + { + "description": "Player slug, for example donk", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "donk" + }, + { + "description": "Statistics view; one of general, maps, accuracy; defaults to general", + "enum": [ + "general", + "maps", + "accuracy" + ], + "in": "query", + "name": "kind", + "type": "string" + }, + { + "description": "First day, YYYY-MM-DD; defaults to six months before to", + "in": "query", + "name": "from", + "type": "string", + "x-example": "2026-04-28" + }, + { + "description": "Last day, YYYY-MM-DD; defaults to today (UTC)", + "in": "query", + "name": "to", + "type": "string", + "x-example": "2026-10-28" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.StatsResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg player statistics", + "tags": [ + "BO3" + ] + } + }, + "/bo3/records": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns BO3.gg's CS2 records (standout single-game and single-round performances such as best shots accuracy, clutches, multikills, damage, win streaks) with paging. Scope them to one `match`, `tournament`, `team` or `player` slug, filter by `record_type` (for example `game_player_headshots`), restrict the game day range with `from`/`to`, and order `newest` or `oldest`. Unscoped requests cover the last six months; each record has its value, unit, side, map, round, player, team and opponents.", + "operationId": "bo3-records", + "parameters": [ + { + "description": "First day, YYYY-MM-DD (UTC); unscoped default is six months before to", + "in": "query", + "name": "from", + "type": "string", + "x-example": "2026-04-28" + }, + { + "description": "Last day, YYYY-MM-DD (UTC); unscoped default is today", + "in": "query", + "name": "to", + "type": "string", + "x-example": "2026-10-28" + }, + { + "description": "Record type such as game_player_headshots or game_round_player_clutch; the types present are listed in the response", + "in": "query", + "name": "record_type", + "type": "string" + }, + { + "description": "Match slug to scope the records to one match", + "in": "query", + "name": "match", + "type": "string", + "x-example": "vitality-vs-natus-vincere-27-10-2026" + }, + { + "description": "Tournament slug to scope the records to one tournament", + "in": "query", + "name": "tournament", + "type": "string", + "x-example": "pgl-masters-bucharest-2026" + }, + { + "description": "Team slug to scope the records to one team", + "in": "query", + "name": "team", + "type": "string", + "x-example": "vitality" + }, + { + "description": "Player slug to scope the records to one player", + "in": "query", + "name": "player", + "type": "string", + "x-example": "donk" + }, + { + "description": "Order by game time; one of newest, oldest; defaults to newest", + "enum": [ + "newest", + "oldest" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Zero-based offset; defaults to 0", + "in": "query", + "minimum": 0, + "name": "offset", + "type": "integer" + }, + { + "description": "Page size, 1 to 100; defaults to 20", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.RecordsFeedResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg CS2 records with scope and type filters", + "tags": [ + "BO3" + ] + } + }, + "/bo3/team": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a BO3.gg team profile by slug: name, acronym, game, world rank and rank change, country and region, founding date, six-month earnings, logo, social links, former names, the current roster (nickname, name, birthday, six-month rating) and the team's tournament achievements, newest first. Use `game` to insist on one game; a team of another game is not found.", + "operationId": "bo3-team", + "parameters": [ + { + "description": "Team slug, for example vitality", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "vitality" + }, + { + "description": "Game the team must belong to; one of cs2, valorant, lol, dota2, r6siege, mlbb", + "enum": [ + "cs2", + "valorant", + "lol", + "dota2", + "r6siege", + "mlbb" + ], + "in": "query", + "name": "game", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.TeamInfo" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg team profile", + "tags": [ + "BO3" + ] + } + }, + "/bo3/team-prize-money": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns BO3.gg's teams ranked by the prize money they won in tournaments that ended inside a day range (default: the last six months), for one game with paging up to 100 per page. Each team has its prize money in USD, tournament wins, country and region and its current roster with each player's career prize money and six-month rating. `total` and `has_more` page through all teams that earned money in the window.", + "operationId": "bo3-team-prize-money", + "parameters": [ + { + "description": "Game; one of cs2, valorant, lol, dota2, r6siege, mlbb; defaults to cs2", + "enum": [ + "cs2", + "valorant", + "lol", + "dota2", + "r6siege", + "mlbb" + ], + "in": "query", + "name": "game", + "type": "string" + }, + { + "description": "First day, YYYY-MM-DD (UTC); defaults to six months before to", + "in": "query", + "name": "from", + "type": "string", + "x-example": "2026-04-28" + }, + { + "description": "Last day, YYYY-MM-DD (UTC); defaults to today", + "in": "query", + "name": "to", + "type": "string", + "x-example": "2026-10-28" + }, + { + "description": "Zero-based offset; defaults to 0", + "in": "query", + "minimum": 0, + "name": "offset", + "type": "integer" + }, + { + "description": "Page size, 1 to 100; defaults to 20", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.TeamPrizeMoneyResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg team prize money by period", + "tags": [ + "BO3" + ] + } + }, + "/bo3/team-ranking-dates": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the days for which Valve published an official ranking for a game (newest first) and the region labels BO3.gg accepts for that game's team rankings. Use it to choose `date` and `region` for bo3-team-rankings.", + "operationId": "bo3-team-ranking-dates", + "parameters": [ + { + "description": "Game; one of cs2, valorant, lol, dota2, r6siege, mlbb; defaults to cs2", + "enum": [ + "cs2", + "valorant", + "lol", + "dota2", + "r6siege", + "mlbb" + ], + "in": "query", + "name": "game", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.TeamRankingDatesResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg official ranking dates and regions", + "tags": [ + "BO3" + ] + } + }, + "/bo3/team-rankings": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns BO3.gg's team ranking for a game, worldwide or for one region, for the latest day or any past `date`, paged up to 100 per page. A date that Valve published (listed by bo3-team-ranking-dates) returns the official Valve ranking (`source` `valve_official`, `official` true); other dates return BO3.gg's own daily ranking (`internal`). Rows carry rank, rank change, points, region, country and the five-player roster with ratings.", + "operationId": "bo3-team-rankings", + "parameters": [ + { + "description": "Game; one of cs2, valorant, lol, dota2, r6siege, mlbb; defaults to cs2", + "enum": [ + "cs2", + "valorant", + "lol", + "dota2", + "r6siege", + "mlbb" + ], + "in": "query", + "name": "game", + "type": "string" + }, + { + "description": "Region label for the game as listed by bo3-team-ranking-dates, for example Europe; omit for worldwide", + "in": "query", + "name": "region", + "type": "string" + }, + { + "description": "Ranking day, YYYY-MM-DD; defaults to the latest", + "in": "query", + "name": "date", + "type": "string", + "x-example": "2026-10-05" + }, + { + "description": "1-based page; defaults to 1", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "description": "Page size, 1 to 100; defaults to 30", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "per_page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.TeamRankingsResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg team rankings, current and historical", + "tags": [ + "BO3" + ] + } + }, + "/bo3/team-recent-matches": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a CS2 team's newest matches (up to 30) with, for every match, the opponent, the tournament, the rounds played, each map played in order and every player's line (rating, kills, deaths, assists, damage, first kills and deaths, trade kills and deaths, headshots, hits, shots, accuracy, money saved and equipment value). Filter by `opponent` for head-to-head history or by `tournament` for one event. Date windows are not supported upstream; the newest matches come first and the list does not page past 30.", + "operationId": "bo3-team-recent-matches", + "parameters": [ + { + "description": "Team slug, for example vitality", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "vitality" + }, + { + "description": "Opposing team slug for head-to-head matches, for example natus-vincere", + "in": "query", + "name": "opponent", + "type": "string" + }, + { + "description": "Tournament slug from bo3-tournaments", + "in": "query", + "name": "tournament", + "type": "string" + }, + { + "default": 10, + "description": "Newest matches to return, 1 to 30, default 10", + "in": "query", + "maximum": 30, + "minimum": 1, + "name": "limit", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.RecentMatchesResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg team recent matches", + "tags": [ + "BO3" + ] + } + }, + "/bo3/team-stats": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one statistics view of a BO3.gg team over a day range (default: the last six months): `general` (match, game, round and kill totals), `advanced` (CT/T, pistol, eco, force and full-buy round records), `accuracy` (hits and damage by hit group), `economy` (win rate by own and enemy economy level) or `map-pool` (maps picked and banned). General views fill `stats`; the other views fill `rows`.", + "operationId": "bo3-team-stats", + "parameters": [ + { + "description": "Team slug, for example vitality", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "vitality" + }, + { + "description": "Statistics view; one of general, advanced, accuracy, economy, map-pool; defaults to general", + "enum": [ + "general", + "advanced", + "accuracy", + "economy", + "map-pool" + ], + "in": "query", + "name": "kind", + "type": "string" + }, + { + "description": "First day, YYYY-MM-DD; defaults to six months before to", + "in": "query", + "name": "from", + "type": "string", + "x-example": "2026-04-28" + }, + { + "description": "Last day, YYYY-MM-DD; defaults to today (UTC)", + "in": "query", + "name": "to", + "type": "string", + "x-example": "2026-10-28" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.StatsResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg team statistics", + "tags": [ + "BO3" + ] + } + }, + "/bo3/tournament": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one BO3.gg tournament by slug: name, status, tier, event type, prize pool, dates, description, series, host city, country and region, its stages (format, status, dates), the prize distribution by place and the participating teams with their placement and prize money. The slug comes from bo3-tournaments.", + "operationId": "bo3-tournament", + "parameters": [ + { + "description": "Tournament slug from bo3-tournaments, for example pgl-masters-bucharest-2026", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "pgl-masters-bucharest-2026" + }, + { + "description": "Game; one of cs2, valorant, lol, dota2, r6siege, mlbb; defaults to cs2", + "enum": [ + "cs2", + "valorant", + "lol", + "dota2", + "r6siege", + "mlbb" + ], + "in": "query", + "name": "game", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.TournamentInfo" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg tournament detail", + "tags": [ + "BO3" + ] + } + }, + "/bo3/tournament-map-pool": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the maps played at a CS2 tournament: games and rounds per map, CT-side and T-side round wins with the CT win percentage, and picked and banned counts. The upstream returns the whole event and ignores stage filters.", + "operationId": "bo3-tournament-map-pool", + "parameters": [ + { + "description": "CS2 tournament slug from bo3-tournaments, for example pgl-masters-bucharest-2026", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "pgl-masters-bucharest-2026" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.TournamentMapPoolResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg CS2 tournament map pool", + "tags": [ + "BO3" + ] + } + }, + "/bo3/tournament-mvps": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the tournament most-valuable-player awards BO3.gg publishes, newest first, optionally for one game: the award type, tournament, player, team and the BO3 article about it. Every row seen has the type `mvp`.", + "operationId": "bo3-tournament-mvps", + "parameters": [ + { + "description": "Game; one of cs2, valorant, lol, dota2, r6siege, mlbb; defaults to every game", + "enum": [ + "cs2", + "valorant", + "lol", + "dota2", + "r6siege", + "mlbb" + ], + "in": "query", + "name": "game", + "type": "string" + }, + { + "description": "Zero-based offset; defaults to 0", + "in": "query", + "minimum": 0, + "name": "offset", + "type": "integer" + }, + { + "description": "Page size, 1 to 100; defaults to 20", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.TournamentMVPsResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg esports tournament MVPs", + "tags": [ + "BO3" + ] + } + }, + "/bo3/tournament-squads": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns every team's squad at a CS2 tournament as it played there: team, and each player with nickname, name, photo, coach flag and stand-in flag. Use it to see who actually played, including substitutes.", + "operationId": "bo3-tournament-squads", + "parameters": [ + { + "description": "CS2 tournament slug from bo3-tournaments, for example pgl-masters-bucharest-2026", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "pgl-masters-bucharest-2026" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.TournamentSquadsResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg CS2 tournament squads", + "tags": [ + "BO3" + ] + } + }, + "/bo3/tournament-stages": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the stages of one BO3.gg tournament in order: title, format type (for example `group` or `playoff`), whether it is on hold, promotion team count and dates. An unknown tournament slug returns 404.", + "operationId": "bo3-tournament-stages", + "parameters": [ + { + "description": "Game; one of cs2, valorant, lol, dota2, r6siege, mlbb; defaults to cs2", + "enum": [ + "cs2", + "valorant", + "lol", + "dota2", + "r6siege", + "mlbb" + ], + "in": "query", + "name": "game", + "type": "string" + }, + { + "description": "Tournament slug from bo3-tournaments, for example pgl-masters-bucharest-2026", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "pgl-masters-bucharest-2026" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.TournamentStagesResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg esports tournament stages", + "tags": [ + "BO3" + ] + } + }, + "/bo3/tournaments": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns BO3.gg esports tournaments for one game with paging and filters: `status` (`current`, `upcoming`, `finished`, `canceled`, `postponed`), `tier` (`s` to `d`), `event_type` (`lan`, `online`) and `sort` (`newest`, `oldest`, `prize` for the largest prize pool first), up to 100 per page. Each tournament has its slug, name, status, tier, event type, prize pool in USD, dates and image; `total` and `has_more` page through the full list (over 3,000 CS2 events).", + "operationId": "bo3-tournaments", + "parameters": [ + { + "description": "Game; one of cs2, valorant, lol, dota2, r6siege, mlbb; defaults to cs2", + "enum": [ + "cs2", + "valorant", + "lol", + "dota2", + "r6siege", + "mlbb" + ], + "in": "query", + "name": "game", + "type": "string" + }, + { + "description": "Tournament status; one of current, upcoming, finished, canceled, postponed", + "enum": [ + "current", + "upcoming", + "finished", + "canceled", + "postponed" + ], + "in": "query", + "name": "status", + "type": "string" + }, + { + "description": "Tournament tier; one of s, a, b, c, d", + "enum": [ + "s", + "a", + "b", + "c", + "d" + ], + "in": "query", + "name": "tier", + "type": "string" + }, + { + "description": "Event type; one of lan, online", + "enum": [ + "lan", + "online" + ], + "in": "query", + "name": "event_type", + "type": "string" + }, + { + "description": "Order; one of newest, oldest, prize; defaults to newest", + "enum": [ + "newest", + "oldest", + "prize" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Zero-based offset; defaults to 0", + "in": "query", + "minimum": 0, + "name": "offset", + "type": "integer" + }, + { + "description": "Page size, 1 to 100; defaults to 20", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.TournamentListResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg tournament list with filters", + "tags": [ + "BO3" + ] + } + }, + "/bo3/transfers": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns BO3.gg's esports player and coach transfer feed, newest first by default, with paging and filters: `team_id` (moves into or out of one team), `player_id`, `action` (`join`, `change`, `leave`) and `role` (`player`, `coach`). The feed cannot be filtered by game upstream, so every row carries its `game` instead; narrow it with a team or player id.", + "operationId": "bo3-transfers", + "parameters": [ + { + "description": "BO3 team id; transfers into or out of this team", + "in": "query", + "minimum": 1, + "name": "team_id", + "type": "integer" + }, + { + "description": "BO3 player id; this person's transfers", + "in": "query", + "minimum": 1, + "name": "player_id", + "type": "integer" + }, + { + "description": "Transfer action; one of join, change, leave", + "enum": [ + "join", + "change", + "leave" + ], + "in": "query", + "name": "action", + "type": "string" + }, + { + "description": "Role; one of player, coach", + "enum": [ + "player", + "coach" + ], + "in": "query", + "name": "role", + "type": "string" + }, + { + "description": "Order by date; one of newest, oldest; defaults to newest", + "enum": [ + "newest", + "oldest" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Zero-based offset; defaults to 0", + "in": "query", + "minimum": 0, + "name": "offset", + "type": "integer" + }, + { + "description": "Page size, 1 to 100; defaults to 20", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.TransfersResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg esports transfer feed", + "tags": [ + "BO3" + ] + } + }, + "/bo3/valorant-leaderboard": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns BO3.gg's Valorant player leaderboard over a day range (default: the last six months): players ranked by `sort` (`acs`, `kills`, `deaths`, `damage`, `assists`, `first_kills`, `clutches`, `first_duels`, `games`, `rounds`) in `order` (`desc`, `asc`) with paging. Each player has nickname, slug, games, rounds and every per-round average as a `stats` map; players below the API's minimum-games threshold for the window are excluded (`min_games_count`).", + "operationId": "bo3-valorant-leaderboard", + "parameters": [ + { + "description": "First day, YYYY-MM-DD (UTC); defaults to six months before to", + "in": "query", + "name": "from", + "type": "string", + "x-example": "2026-04-28" + }, + { + "description": "Last day, YYYY-MM-DD (UTC); defaults to today", + "in": "query", + "name": "to", + "type": "string", + "x-example": "2026-10-28" + }, + { + "description": "Stat to rank by; one of acs, kills, deaths, damage, assists, first_kills, clutches, first_duels, games, rounds; defaults to acs", + "enum": [ + "acs", + "kills", + "deaths", + "damage", + "assists", + "first_kills", + "clutches", + "first_duels", + "games", + "rounds" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Direction; one of desc, asc; defaults to desc", + "enum": [ + "desc", + "asc" + ], + "in": "query", + "name": "order", + "type": "string" + }, + { + "description": "Zero-based offset; defaults to 0", + "in": "query", + "minimum": 0, + "name": "offset", + "type": "integer" + }, + { + "description": "Page size, 1 to 100; defaults to 20", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/bo3.ValorantLeaderboardResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "BO3.gg Valorant player leaderboard", + "tags": [ + "BO3" + ] + } + }, + "/boardgamegeek/cardsets/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the card sets recorded for a game, including the base or expansion flag, notes, prior card-set family links, and each set's card types with physical width/height, quantity and quantity notes. Useful for card-size or sleeving questions. A game with no card sets returns a valid empty list.", + "operationId": "boardgamegeek-cardsets", + "parameters": [ + { + "description": "BoardGameGeek game id, positive integer; Catan is 13", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "13" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/boardgamegeek.CardsetsResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "The game id is not a positive integer", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "No game exists with that id", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List a BoardGameGeek game's card sets", + "tags": [ + "BoardGameGeek" + ] + } + }, + "/boardgamegeek/entity/{type}/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one non-game entity by canonical object type and numeric id: name, alternate names, description and wiki text, website, images, and the typed link map for that entity (for example a designer's credits, a publisher's games, a family's members, a category's games, or a version's parent game and publishers). Community counters and the item's field schema are merged in. Slug aliases are not accepted because they return item records without description content.", + "operationId": "boardgamegeek-entity", + "parameters": [ + { + "description": "Entity object type", + "enum": [ + "family", + "person", + "company", + "property", + "version" + ], + "in": "path", + "name": "type", + "required": true, + "type": "string" + }, + { + "description": "BoardGameGeek entity id, positive integer; the Catan family is 3", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "3" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/boardgamegeek.EntityResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "The type is not allowed or the id is not a positive integer", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "No entity of that type exists with that id", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a BoardGameGeek family, person, company, property or version", + "tags": [ + "BoardGameGeek" + ] + } + }, + "/boardgamegeek/game/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one BoardGameGeek game by its numeric item id: primary and alternate names, player counts, play time, minimum age, description and wiki text, official website, images, and the typed link map (designers, artists, publishers, categories, mechanics, families, expansions, versions, honors). Community ratings, rank lines, poll answers, and ownership/play counters are merged in, and the item's field schema is included. Uses BoardGameGeek's anonymous website JSON API; no token or login is involved.", + "operationId": "boardgamegeek-game", + "parameters": [ + { + "description": "BoardGameGeek game (thing) id, positive integer; Catan is 13", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "13" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/boardgamegeek.GameResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "The id is not a positive integer", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "No game exists with that id", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a BoardGameGeek game's detail, ratings and links", + "tags": [ + "BoardGameGeek" + ] + } + }, + "/boardgamegeek/geeklist/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one community geeklist's metadata and body: title, creator id, post/edit dates, plain-text body, rendered bodyXml, privacy/comment/trade flags, sort direction and domain, and the source's discoverability links (items, comments, thumbs, tips). Use boardgamegeek_geeklist_items to page its entries.", + "operationId": "boardgamegeek-geeklist", + "parameters": [ + { + "description": "BoardGameGeek geeklist id, positive integer", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "387123" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/boardgamegeek.GeeklistResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "The geeklist id is not a positive integer", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "No geeklist exists with that id", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a BoardGameGeek geeklist's detail", + "tags": [ + "BoardGameGeek" + ] + } + }, + "/boardgamegeek/geeklist/{id}/items": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of a geeklist's entries: each entry's id, linked item summary (id, name, href, descriptors, images), author id, post/edit dates, commentary body, optional custom image, rating snapshot and links. The source pages entries 25 at a time; a page past the end is a valid empty page.", + "operationId": "boardgamegeek-geeklist-items", + "parameters": [ + { + "description": "BoardGameGeek geeklist id, positive integer", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "387123" + }, + { + "description": "Entry page number, 1-1000; the source pages entries 25 at a time", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/boardgamegeek.GeeklistItemsResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "The geeklist id or page is invalid", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "No geeklist exists with that id", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List a BoardGameGeek geeklist's entries", + "tags": [ + "BoardGameGeek" + ] + } + }, + "/boardgamegeek/geeklists": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of the community geeklists that link an object, filtered by category (all, trade, general) and sorted by hot or recent. Each row carries the list title, author, item count, recommendation count and dates. The response includes the category filters the source offers and the list totals. Use boardgamegeek_geeklist and boardgamegeek_geeklist_items to read a list's content.", + "operationId": "boardgamegeek-geeklists", + "parameters": [ + { + "description": "Object type: thing, family, person, company, property or version. Defaults to thing.", + "enum": [ + "thing", + "family", + "person", + "company", + "property", + "version" + ], + "in": "query", + "name": "objecttype", + "type": "string", + "x-example": "thing" + }, + { + "description": "Object identifier, positive integer; Catan is 13", + "in": "query", + "name": "objectid", + "required": true, + "type": "integer", + "x-example": 13 + }, + { + "description": "Category filter: all, trade or general. Defaults to general.", + "enum": [ + "all", + "trade", + "general" + ], + "in": "query", + "name": "category", + "type": "string", + "x-example": "general" + }, + { + "description": "Sort: hot or recent. Defaults to hot.", + "enum": [ + "hot", + "recent" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "hot" + }, + { + "description": "Page size, 1-50", + "in": "query", + "name": "showcount", + "type": "integer", + "x-example": 25 + }, + { + "description": "Page number, 1-1000", + "in": "query", + "name": "pageid", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/boardgamegeek.GeeklistsResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "An enum value or pagination parameter is invalid", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List geeklists that link a BoardGameGeek object", + "tags": [ + "BoardGameGeek" + ] + } + }, + "/boardgamegeek/hotness": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the site's ranked hotness list for one object type: games (thing), people or companies, with the object identifier, name, rank position, rank delta since the previous day, year published (games only), short description (games only) and images. The list length is requested with showcount; the source caps it at 50.", + "operationId": "boardgamegeek-hotness", + "parameters": [ + { + "description": "Object type; one of thing (games), person or company", + "enum": [ + "thing", + "person", + "company" + ], + "in": "query", + "name": "objecttype", + "type": "string", + "x-example": "thing" + }, + { + "description": "Requested list length, 1-50; the source caps the list at 50", + "in": "query", + "name": "showcount", + "type": "integer", + "x-example": 50 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/boardgamegeek.HotnessResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "An enum value or showcount is out of range", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get BoardGameGeek's current hotness list", + "tags": [ + "BoardGameGeek" + ] + } + }, + "/boardgamegeek/links": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of a typed link list for an object: for a game, its mechanics, categories, designers, publishers, expansions or versions; for a family, its games; for a person, their credits; for a company, its games; for a property, its games; for a version, its parent game and publishers. Each row carries the linked object's identity, name, post date, subtype and image. The link type must be valid for the requested object type; see boardgamegeek-taxonomy for the complete per-type value space.", + "operationId": "boardgamegeek-links", + "parameters": [ + { + "description": "Canonical object type that owns the links", + "enum": [ + "thing", + "family", + "person", + "company", + "property", + "version" + ], + "in": "query", + "name": "objecttype", + "required": true, + "type": "string", + "x-example": "thing" + }, + { + "description": "Object identifier, positive integer; Catan is 13", + "in": "query", + "name": "objectid", + "required": true, + "type": "integer", + "x-example": 13 + }, + { + "description": "Link type; must be one of the values verified for the object type (see boardgamegeek-taxonomy)", + "enum": [ + "boardgame", + "boardgameaccessory", + "boardgameaccessoryartist", + "boardgameaccessorydesigner", + "boardgameartist", + "boardgamecategory", + "boardgamedesigner", + "boardgamedeveloper", + "boardgameeditor", + "boardgameexpansion", + "boardgamefamily", + "boardgamegraphicdesigner", + "boardgamehonor", + "boardgameinsertdesigner", + "boardgameintegration", + "boardgameissue", + "boardgameissueartist", + "boardgameissueauthor", + "boardgamemechanic", + "boardgamepublisher", + "boardgamesculptor", + "boardgamesolodesigner", + "boardgamesubdomain", + "boardgameversion", + "boardgameversionartist", + "boardgamewriter", + "cardset", + "containedin", + "contains", + "expandsboardgame", + "expandsvideogame", + "languages", + "reimplementation", + "reimplements", + "rpgartist", + "rpgdesigner", + "rpghonor", + "rpgissuearticleauthor", + "rpgissueartist", + "rpgissuedesigner", + "rpgissueproducer", + "rpgproducer", + "videogamebg", + "videogamedeveloper", + "videogameexpansion", + "videogamefranchise", + "videogamegenre", + "videogamemode", + "videogameplatform", + "videogamepublisher", + "videogameseries", + "videogametheme" + ], + "in": "query", + "name": "linktype", + "required": true, + "type": "string", + "x-example": "boardgamemechanic" + }, + { + "description": "Page size, 1-50", + "in": "query", + "name": "showcount", + "type": "integer", + "x-example": 25 + }, + { + "description": "Page number, 1-1000", + "in": "query", + "name": "pageid", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/boardgamegeek.LinksResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "An enum value, id or page parameter is invalid, or the link type is not valid for the object type", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "The object does not exist", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List a BoardGameGeek object's typed links", + "tags": [ + "BoardGameGeek" + ] + } + }, + "/boardgamegeek/media/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of media for one item: gallery images with captions and vote counts, videos with host, title, duration and thumbnail, or file pages with filename, size and language. Exactly one of images, videos or files is populated. Filters follow the source's own per-kind filter models: images accept sort, interval, gallery, tag and license; videos accept sort, gallery and languageid; files accept sort and languageid. A filter used with the wrong kind is rejected locally with HTTP 400.", + "operationId": "boardgamegeek-media", + "parameters": [ + { + "description": "BoardGameGeek item (thing) id, positive integer; Catan is 13", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "13" + }, + { + "description": "Media kind; defaults to image", + "enum": [ + "image", + "video", + "file" + ], + "in": "query", + "name": "type", + "type": "string", + "x-example": "image" + }, + { + "description": "Page size, 1-50", + "in": "query", + "name": "showcount", + "type": "integer", + "x-example": 25 + }, + { + "description": "Page number, 1-1000", + "in": "query", + "name": "pageid", + "type": "integer", + "x-example": 1 + }, + { + "description": "Sort order; applies to images, videos and files", + "enum": [ + "hot", + "recent" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "hot" + }, + { + "description": "Image date interval; image only", + "enum": [ + "alltime", + "today", + "twodays", + "last7", + "last30", + "year" + ], + "in": "query", + "name": "interval", + "type": "string", + "x-example": "alltime" + }, + { + "description": "Gallery filter. Images: all, game, person, creative. Videos: all, review, session, instructional, interview, unboxing, humor, other. Not valid for files.", + "enum": [ + "all", + "game", + "person", + "creative", + "review", + "session", + "instructional", + "interview", + "unboxing", + "humor", + "other" + ], + "in": "query", + "name": "gallery", + "type": "string", + "x-example": "all" + }, + { + "description": "Image category; image only", + "enum": [ + "BoxFront", + "BoxBack", + "Components", + "Customized", + "Play", + "Miscellaneous", + "uncat" + ], + "in": "query", + "name": "tag", + "type": "string" + }, + { + "description": "Image license filter; image only", + "enum": [ + "reuse", + "commercial", + "modify" + ], + "in": "query", + "name": "license", + "type": "string", + "x-example": "commercial" + }, + { + "description": "Media language id from boardgamegeek_taxonomy media_video_languages/media_file_languages; video and file only", + "in": "query", + "name": "languageid", + "type": "string", + "x-example": "2184" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/boardgamegeek.MediaResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "A filter is not valid for the requested media kind, or a parameter is out of range", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "No item exists with that id", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List a BoardGameGeek item's images, videos or files", + "tags": [ + "BoardGameGeek" + ] + } + }, + "/boardgamegeek/recommendations/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns BoardGameGeek's \"fans also like\" recommendations for one game: each suggested item's identity, name and image, plus the source's similarity rating, rank, voter count, year published and fan count. An unknown game id yields a valid empty list with count 0 rather than an error.", + "operationId": "boardgamegeek-recommendations", + "parameters": [ + { + "description": "BoardGameGeek game id, positive integer; Catan is 13", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "13" + }, + { + "description": "Maximum number of recommendations, 1-50", + "in": "query", + "name": "showcount", + "type": "integer", + "x-example": 25 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/boardgamegeek.RecommendationsResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get BoardGameGeek recommendations for a game", + "tags": [ + "BoardGameGeek" + ] + } + }, + "/boardgamegeek/reviews/{type}/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns an object's hot and recent reviews as the source publishes them: text review threads (thread id, subject, forum, author, dates, post count) and video reviews (video id, host, external id, title, language, thumbnail), with the source's review totals and the paths to the full review lists. An object with no reviews is a valid empty result, not an error.", + "operationId": "boardgamegeek-reviews", + "parameters": [ + { + "description": "Object type", + "enum": [ + "thing", + "family", + "person", + "company", + "property", + "version" + ], + "in": "path", + "name": "type", + "required": true, + "type": "string" + }, + { + "description": "Object identifier, positive integer; Catan is 13", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "13" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/boardgamegeek.ReviewsResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "The type or id is invalid", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List a BoardGameGeek object's reviews", + "tags": [ + "BoardGameGeek" + ] + } + }, + "/boardgamegeek/taxonomy": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the complete pinned taxonomy this family accepts: the canonical object types and entity types, the live-verified subtypes for each object type (with separately listed unverified subtypes), the verified link types for each object type, and the hotness, media, media-filter and entity enums. Values were verified with anonymous live requests on the date in verified_at and are constants, not live reads. Use it to validate objecttype/linktype combinations before calling the other BoardGameGeek routes.", + "operationId": "boardgamegeek-taxonomy", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/boardgamegeek.TaxonomyResponse" + } + }, + "type": "object" + } + ] + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List BoardGameGeek's object-type, subtype and link-type enums", + "tags": [ + "BoardGameGeek" + ] + } + }, + "/boardgamegeek/thread/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a forum thread's metadata (subject, forum id, creator, post/page counts, pin/lock flags, breadcrumbs) plus one page of its articles: article id, author id, post and edit dates, plain-text body, rendered bodyXml, first-post flag and links. The source pages articles 25 at a time; a page past the end is a valid empty page. Use boardgamegeek_threads to discover thread ids.", + "operationId": "boardgamegeek-thread", + "parameters": [ + { + "description": "BoardGameGeek thread id, positive integer", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "3782789" + }, + { + "description": "Article page number, 1-1000; the source pages articles 25 at a time", + "in": "query", + "name": "pageid", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/boardgamegeek.ThreadResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "The id or page is invalid", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "No thread exists with that id", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a BoardGameGeek thread and one page of its articles", + "tags": [ + "BoardGameGeek" + ] + } + }, + "/boardgamegeek/threads": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of forum threads for a BoardGameGeek object (game, family, person, company, property or version), sorted by hot, recent or active. Each row carries the thread id, subject, forum, author, post/last-post dates, post count, pin/lock flags and hrefs, and the response includes the forums that object exposes with their thread/post counts so callers can discover the forumid filter. Use boardgamegeek_thread to read a thread's articles.", + "operationId": "boardgamegeek-threads", + "parameters": [ + { + "description": "Object type: thing, family, person, company, property or version. Defaults to thing.", + "enum": [ + "thing", + "family", + "person", + "company", + "property", + "version" + ], + "in": "query", + "name": "objecttype", + "type": "string", + "x-example": "thing" + }, + { + "description": "Object identifier, positive integer; Catan is 13", + "in": "query", + "name": "objectid", + "required": true, + "type": "integer", + "x-example": 13 + }, + { + "description": "Forum id from this route's forums list; unknown ids are ignored upstream, so use a listed id", + "in": "query", + "name": "forumid", + "type": "integer", + "x-example": 65 + }, + { + "description": "Thread sort: hot, recent or active. Defaults to recent.", + "enum": [ + "hot", + "recent", + "active" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "recent" + }, + { + "description": "Page size, 1-100; the source caps it at 100", + "in": "query", + "name": "showcount", + "type": "integer", + "x-example": 25 + }, + { + "description": "Page number, 1-1000", + "in": "query", + "name": "pageid", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/boardgamegeek.ThreadsResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "An enum value or pagination parameter is invalid", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List a BoardGameGeek object's forum threads", + "tags": [ + "BoardGameGeek" + ] + } + }, + "/bonhams/auctions/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches and filters Bonhams' auctions. Default status \"upcoming\" excludes ended auctions, matching bonhams.com's own default; \"past\" browses Bonhams' full historical auction archive instead.", + "operationId": "bonhams-auction-search", + "parameters": [ + { + "description": "Free-text search across auction title and department names", + "in": "query", + "name": "q", + "type": "string", + "x-example": "Home & Interiors" + }, + { + "description": "Comma-separated country names (not a fixed enum -- live facet)", + "in": "query", + "name": "country", + "type": "string", + "x-example": "United Kingdom" + }, + { + "description": "Comma-separated categories. Allowed values: 20th & 21st Century Art, Asian Art, Books, History & Science, Classic Art, Decorative Arts & Furniture, Handbags, Jewels & Watches, Motoring, Popular Culture, Wine & Whisky.", + "in": "query", + "name": "category", + "type": "string", + "x-example": "Asian Art" + }, + { + "description": "Comma-separated month-and-year values, e.g. \\", + "in": "query", + "name": "month", + "type": "string", + "x-example": "September 2026" + }, + { + "description": "Comma-separated auction types", + "enum": [ + "ONLINE", + "PUBLIC", + "EXHIBITION", + "OTHER" + ], + "in": "query", + "name": "auction_type", + "type": "string", + "x-example": "ONLINE" + }, + { + "description": "Filters by bidding/completion status, default upcoming", + "enum": [ + "upcoming", + "past", + "all" + ], + "in": "query", + "name": "status", + "type": "string", + "x-example": "upcoming" + }, + { + "description": "1-based page number, default 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Results per page, default 24, max 100", + "in": "query", + "name": "per_page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bonhams.auctionSearchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Bonhams auctions", + "tags": [ + "Bonhams" + ] + } + }, + "/bonhams/auctions/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one Bonhams auction's facts by id: title, category, department, country, currency, sale dates, and lot count. Unlike the search endpoint, this is not restricted to upcoming/live auctions -- a historical/ended auction id resolves too.", + "operationId": "bonhams-auction-detail", + "parameters": [ + { + "description": "Bonhams auction id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "32001" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bonhams.auctionDetailResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Bonhams auction's normalized facts", + "tags": [ + "Bonhams" + ] + } + }, + "/bonhams/auctions/{id}/lots": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the lot listing for one Bonhams auction, optionally filtered by department and/or a free-text query.", + "operationId": "bonhams-auction-lots", + "parameters": [ + { + "description": "Bonhams auction id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "32001" + }, + { + "description": "Free-text search across lot title, catalog description, and footnotes", + "in": "query", + "name": "q", + "type": "string", + "x-example": "candelabra" + }, + { + "description": "Comma-separated department names (not a fixed enum -- varies per auction)", + "in": "query", + "name": "department", + "type": "string", + "x-example": "Silver" + }, + { + "description": "1-based page number, default 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Results per page, default 48, max 100", + "in": "query", + "name": "per_page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bonhams.auctionLotsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List the lots in a Bonhams auction", + "tags": [ + "Bonhams" + ] + } + }, + "/bonhams/lots/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches Bonhams lots across every auction, current and historical -- including sold/prices-realized lots -- optionally filtered by department, country, a GBP-normalized estimate price range, and/or a free-text query, in a caller-selected sort order. Without a query and without an explicit sort, results are ordered by most recently active sale date first.", + "operationId": "bonhams-lot-search", + "parameters": [ + { + "description": "Free-text search across lot title, catalog description, and footnotes", + "in": "query", + "name": "q", + "type": "string", + "x-example": "Rolex Submariner" + }, + { + "description": "Comma-separated department names (not a fixed enum -- large, changes over time)", + "in": "query", + "name": "department", + "type": "string", + "x-example": "Watches" + }, + { + "description": "Comma-separated country names (not a fixed enum -- live facet)", + "in": "query", + "name": "country", + "type": "string", + "x-example": "United States" + }, + { + "description": "Minimum estimate, in GBP (converted from each lot's own sale currency), inclusive. Omit or 0 for no minimum.", + "in": "query", + "name": "min_price_gbp", + "type": "number" + }, + { + "description": "Maximum estimate, in GBP (converted from each lot's own sale currency), inclusive. Omit or 0 for no maximum.", + "in": "query", + "name": "max_price_gbp", + "type": "number" + }, + { + "description": "Result order. Default: Typesense relevance ranking when q is set, otherwise recency (most recently active sale date first).", + "enum": [ + "relevance", + "recency", + "price_high", + "price_low", + "lot_number" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "1-based page number, default 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Results per page, default 48, max 100", + "in": "query", + "name": "per_page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bonhams.lotSearchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Bonhams lots across every auction", + "tags": [ + "Bonhams" + ] + } + }, + "/bonhams/lots/{auctionId}/{lotNumber}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one Bonhams lot's facts: title, estimate range, hammer/realized price (once sold), sale date, category, department, and lot number. Full lot description prose, condition-report text, and additional images are not reproduced -- see the response fields.", + "operationId": "bonhams-lot-detail", + "parameters": [ + { + "description": "Bonhams auction id", + "in": "path", + "name": "auctionId", + "required": true, + "type": "string", + "x-example": "32001" + }, + { + "description": "Bonhams lot number", + "in": "path", + "name": "lotNumber", + "required": true, + "type": "string", + "x-example": "2" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bonhams.lotDetailResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Bonhams lot's normalized facts", + "tags": [ + "Bonhams" + ] + } + }, + "/booking-attractions/detail": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the details of one Booking.com attraction by `slug`, taken from `products[].slug` in a `booking-attractions-search` result: `name`, `short_description`, `description`, `duration`, `price` with `currency`, `review_score`, `review_count` and `city`. The returned `id` is the `product_id` for `booking-attractions-reviews`.", + "operationId": "booking-attractions-detail", + "parameters": [ + { + "description": "Attraction slug, from a prior attraction search result", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "pre4ksvwxdrd-seine-river-sightseeing-cruise" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/booking.bookingAttractionDetailResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Booking.com attraction detail", + "tags": [ + "Booking" + ] + } + }, + "/booking-attractions/reviews": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns guest reviews for a Booking.com attraction. `product_id` is required and comes from `products[].id` in a `booking-attractions-search` result. `page` is 1-based (default 1) and `limit` is 1 to 50 (default 10). Each review has `score`, `content`, `reviewer_name`, `reviewer_country`, `language` and `reviewed_date`, and `total` gives the count.", + "operationId": "booking-attractions-reviews", + "parameters": [ + { + "description": "Attraction product id, from a prior attraction search result", + "in": "query", + "name": "product_id", + "required": true, + "type": "string", + "x-example": "PRe4kSVWXdrD" + }, + { + "description": "1-based result page, default 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Reviews per page, 1-50, default 10", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/booking.bookingAttractionReviewsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Booking.com attraction reviews", + "tags": [ + "Booking" + ] + } + }, + "/booking-attractions/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Booking.com attractions/things-to-do search results for a destination and date range, with an optional category/subcategory filter and a discoverable category taxonomy.", + "operationId": "booking-attractions-search", + "parameters": [ + { + "description": "Destination name or city", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "Paris" + }, + { + "description": "Availability start date, YYYY-MM-DD", + "in": "query", + "name": "start_date", + "required": true, + "type": "string", + "x-example": "2026-09-15" + }, + { + "description": "Availability end date, YYYY-MM-DD, defaults to start_date", + "in": "query", + "name": "end_date", + "type": "string", + "x-example": "2026-09-15" + }, + { + "description": "1-based result page, default 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Results per page, 1-30, default 15", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 15 + }, + { + "description": "Optional top-level category tagname filter, from a prior response's categories", + "in": "query", + "name": "category", + "type": "string", + "x-example": "PTCMCcodv3rh" + }, + { + "description": "Optional subcategory tagname filter, from a prior response's categories", + "in": "query", + "name": "subcategory", + "type": "string", + "x-example": "PTCMCfzh93xC" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/booking.bookingAttractionSearchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Booking.com attractions", + "tags": [ + "Booking" + ] + } + }, + "/booking-flights/autocomplete": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Booking.com flight-search location suggestions (airports and cities) for `query`, which is required. `type` is `to` (default) or `from`; `origin` and `origin_type` bias results by proximity. Each result has `name`, `code`, `type`, `country`, `country_name` and `region_name`. Combine `code` and `type` as `{code}.{TYPE}` for `booking-flights-search`.", + "operationId": "booking-flights-autocomplete", + "parameters": [ + { + "description": "City or airport name/code to search", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "Chengdu" + }, + { + "description": "Location role, default to", + "enum": [ + "to", + "from" + ], + "in": "query", + "name": "type", + "type": "string" + }, + { + "description": "Optional origin location code, biases results by proximity", + "in": "query", + "name": "origin", + "type": "string", + "x-example": "SGN" + }, + { + "description": "Origin location type", + "in": "query", + "name": "origin_type", + "type": "string", + "x-example": "AIRPORT" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/booking.bookingFlightAutocompleteResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Booking.com flight autocomplete", + "tags": [ + "Booking" + ] + } + }, + "/booking-flights/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Booking.com flight offers between two locations given as `from` and `to` (such as `SGN.AIRPORT`), for a `depart` date. `type` is `ROUNDTRIP` (default, needs `return`) or `ONEWAY`. Also takes `adults` (1 to 9), `children`, `cabin_class` and `sort`. Offers carry `price`, `currency` and segments with legs; the response adds `total_count` and `min_price`.", + "operationId": "booking-flights-search", + "parameters": [ + { + "description": "Trip type, default ROUNDTRIP", + "enum": [ + "ROUNDTRIP", + "ONEWAY" + ], + "in": "query", + "name": "type", + "type": "string" + }, + { + "description": "Origin location id, e.g. SGN.AIRPORT, from a prior autocomplete result", + "in": "query", + "name": "from", + "required": true, + "type": "string", + "x-example": "SGN.AIRPORT" + }, + { + "description": "Destination location id, same composite format as from", + "in": "query", + "name": "to", + "required": true, + "type": "string", + "x-example": "CTU.CITY" + }, + { + "description": "Origin country code", + "in": "query", + "name": "from_country", + "type": "string", + "x-example": "VN" + }, + { + "description": "Destination country code", + "in": "query", + "name": "to_country", + "type": "string", + "x-example": "CN" + }, + { + "description": "Departure date, YYYY-MM-DD", + "in": "query", + "name": "depart", + "required": true, + "type": "string", + "x-example": "2026-09-05" + }, + { + "description": "Return date, YYYY-MM-DD, required when type is ROUNDTRIP", + "in": "query", + "name": "return", + "type": "string", + "x-example": "2026-09-12" + }, + { + "description": "Number of adults, 1-9, default 1", + "in": "query", + "name": "adults", + "type": "integer", + "x-example": 1 + }, + { + "description": "Number of children, 0-9", + "in": "query", + "name": "children", + "type": "integer", + "x-example": 0 + }, + { + "description": "Cabin class, default ECONOMY", + "in": "query", + "name": "cabin_class", + "type": "string", + "x-example": "ECONOMY" + }, + { + "description": "Result sort order, default BEST", + "in": "query", + "name": "sort", + "type": "string", + "x-example": "BEST" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/booking.bookingFlightSearchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Booking.com flights", + "tags": [ + "Booking" + ] + } + }, + "/booking/hotel-detail": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a Booking.com hotel's core detail page: rating, facilities, highlights, house rules, cover photos, and rooms with their own photos.", + "operationId": "booking-hotel-detail", + "parameters": [ + { + "description": "Booking.com hotel id, from a prior search's property id", + "in": "query", + "name": "hotel_id", + "required": true, + "type": "integer", + "x-example": 2845972 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/booking.bookingHotelDetailResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Booking.com hotel detail", + "tags": [ + "Booking" + ] + } + }, + "/booking/reviews": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns guest reviews for a Booking.com hotel. `hotel_id` and `hotel_country_code` are required, both from a `booking-search` result. `search_text` filters review content, `page` is 1-based and `limit` is 1 to 25 (default 10). Reviews have `score`, `title`, `positive_text`, `negative_text`, `room_type` and stay dates; `rating_scores` and `reviews_count` summarise the hotel.", + "operationId": "booking-reviews", + "parameters": [ + { + "description": "Booking.com hotel id, from a prior search's property id", + "in": "query", + "name": "hotel_id", + "required": true, + "type": "integer", + "x-example": 2845972 + }, + { + "description": "Destination id (ufi), from a prior search response", + "in": "query", + "name": "destination_id", + "type": "integer", + "x-example": -1456928 + }, + { + "description": "Hotel's country code, from a prior search response", + "in": "query", + "name": "hotel_country_code", + "required": true, + "type": "string", + "x-example": "fr" + }, + { + "description": "Hotel's overall review score", + "in": "query", + "name": "hotel_score", + "type": "number", + "x-example": 8.2 + }, + { + "description": "Optional free-text search over review content", + "in": "query", + "name": "search_text", + "type": "string", + "x-example": "elevator" + }, + { + "description": "1-based result page, default 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Reviews per page, 1-25, default 10", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/booking.bookingReviewsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Booking.com hotel reviews", + "tags": [ + "Booking" + ] + } + }, + "/booking/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches Booking.com hotels for a destination `query` between `checkin` and `checkout` (`YYYY-MM-DD`, both required). `adults` is 1 to 9 (default 2), `rooms` 1 to 8 (default 1), `children` 0 to 9, and `page` is 1-based. Each property has `name`, `price`, `currency`, `review_score`, `star_rating` and `distance`; `results_count` gives the total.", + "operationId": "booking-search", + "parameters": [ + { + "description": "Destination name or city", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "Paris" + }, + { + "description": "Check-in date, YYYY-MM-DD", + "in": "query", + "name": "checkin", + "required": true, + "type": "string", + "x-example": "2026-09-15" + }, + { + "description": "Check-out date, YYYY-MM-DD", + "in": "query", + "name": "checkout", + "required": true, + "type": "string", + "x-example": "2026-09-17" + }, + { + "description": "Number of adults, 1-9, default 2", + "in": "query", + "name": "adults", + "type": "integer", + "x-example": 2 + }, + { + "description": "Number of rooms, 1-8, default 1", + "in": "query", + "name": "rooms", + "type": "integer", + "x-example": 1 + }, + { + "description": "Number of children, 0-9", + "in": "query", + "name": "children", + "type": "integer", + "x-example": 0 + }, + { + "description": "1-based result page, default 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/booking.bookingSearchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Booking.com hotels", + "tags": [ + "Booking" + ] + } + }, + "/booksy/business": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one Booksy (booksy.com) business: name, slug, description, the website's own listing path token (`____`, served by the app and usable to join the two surfaces), every category with its web slug, the geographic chain from country down to zip with numeric ids, address and coordinates, cover and logo images, the complete partner-defined service menu with prices and durations, opening hours, amenities, booking policy text, public contact links and aggregate review scores. This is the Android app's JSON detail route (`/core/v2/customer_api/businesses/{id}/`), so one business costs a few tens of kilobytes instead of a rendered page. An unknown id is a 404. Review text, reviewer identities, staff identities, client records and any availability, booking or payment data are never returned.", + "operationId": "booksy-business", + "parameters": [ + { + "description": "Numeric Booksy business id", + "in": "query", + "name": "id", + "required": true, + "type": "integer", + "x-example": 481342 + }, + { + "description": "Market host", + "enum": [ + "ar", + "au", + "br", + "ca", + "cl", + "co", + "de", + "es", + "fr", + "gb", + "ie", + "it", + "mx", + "nl", + "pl", + "pt", + "us", + "za" + ], + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/booksy.businessResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get one Booksy business's detail record", + "tags": [ + "Booksy" + ] + } + }, + "/booksy/businesses": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of Booksy's (booksy.com) salon and barber marketplace for a country, filtered by a top-level category, a treatment id or a free-text query, and optionally scoped to a location. This reads the Android customer app's own JSON API (`https://{country}.booksy.com/core/v2/customer_api/businesses/`), which is offset-paginated: page_size is honoured up to 100 (larger values are silently clamped, so they are rejected here) and total is the marketplace's own match count. total saturates at 10000, and total_capped reports when the number is a ceiling rather than an exact count. category and treatment are INTEGER ids — a slug is rejected upstream — taken from booksy-categories and booksy-treatment-hints respectively; they may be combined. The listing filters the app's own client sends are supported as well: sort_order (distance, score, top_rated, by_ids — by_ids requires business_ids and returns the businesses in the order supplied; score is the default ranking and returns the same order as no sort_order), gender (M, F, R — it reorders the page for a stated client gender but does not filter it, so total is unchanged, and an unrecognised value is rejected here because Booksy silently ignores it), open_now and has_special_offers (booleans that restrict the page to businesses open now or running an offer; open_now is sent upstream as 1/0 because Booksy rejects true/false on it), and business_ids (a comma-separated bulk lookup of at most 100 ids, which also satisfies the requirement for one of category, treatment or query). location_id and location_name are alternatives, and an unknown location_name is not an error: the server silently falls back to the whole country, so read the response's location node instead of assuming the name was applied. A page past the end is an honest empty businesses array with total intact; page 0 is rejected. Records carry catalogue metadata, geo, promotion flags and aggregate review scores only — never reviews, reviewer identities, staff or availability.", + "operationId": "booksy-businesses", + "parameters": [ + { + "description": "Market host", + "enum": [ + "ar", + "au", + "br", + "ca", + "cl", + "co", + "de", + "es", + "fr", + "gb", + "ie", + "it", + "mx", + "nl", + "pl", + "pt", + "us", + "za" + ], + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "1-based page number, default 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Records per page, default 20, maximum 100", + "in": "query", + "name": "page_size", + "type": "integer", + "x-example": 20 + }, + { + "description": "Top-level category id from booksy-categories (integer, not a slug)", + "in": "query", + "name": "category", + "type": "integer", + "x-example": 6 + }, + { + "description": "Treatment id from booksy-treatment-hints (integer, not a slug)", + "in": "query", + "name": "treatment", + "type": "integer", + "x-example": 363 + }, + { + "description": "Free-text search term; at least one of category, treatment or query is required", + "in": "query", + "name": "query", + "type": "string", + "x-example": "braids" + }, + { + "description": "Booksy location id, e.g. 30067 for New York City", + "in": "query", + "name": "location_id", + "type": "integer", + "x-example": 30067 + }, + { + "description": "Location name for the server to resolve, e.g. New York City", + "in": "query", + "name": "location_name", + "type": "string", + "x-example": "New York City" + }, + { + "description": "Listing order; distance needs a location, score is the default ranking, by_ids requires business_ids", + "enum": [ + "distance", + "score", + "top_rated", + "by_ids" + ], + "in": "query", + "name": "sort_order", + "type": "string", + "x-example": "distance" + }, + { + "description": "Ranking personalisation for a stated client gender; reorders but does not filter", + "enum": [ + "M", + "F", + "R" + ], + "in": "query", + "name": "gender", + "type": "string", + "x-example": "F" + }, + { + "description": "Only businesses open now", + "in": "query", + "name": "open_now", + "type": "boolean", + "x-example": true + }, + { + "description": "Only businesses running a special offer", + "in": "query", + "name": "has_special_offers", + "type": "boolean", + "x-example": true + }, + { + "description": "Comma-separated business ids for a bulk lookup, at most 100; required with sort_order=by_ids", + "in": "query", + "name": "business_ids", + "type": "string", + "x-example": "421547,646877" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/booksy.businessesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List and filter Booksy businesses in one market", + "tags": [ + "Booksy" + ] + } + }, + "/booksy/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Booksy's (booksy.com) complete top-level marketplace category enum for one market, in the upstream's own order, with each category's integer id, name and icon URL. This is the discovery endpoint for the category parameter of booksy-businesses: the 18 values are every top-level search category the marketplace publishes (Hair 1, Nails 3, Massage 4, Wellness and spa 5, Barber 6, Skin care 7, Makeup 9, Pet services 11, Home services 17, Brows and lashes 177, Tattoos 179, Medical aesthetics 183, Dental and orthodontics 184, Hair removal 187, Piercing 190, Braids and locs 657, Health and fitness 658, Professional services 659), verified live for both the US and GB hosts. The list is returned as the host publishes it rather than from a pinned constant, so a taxonomy change is visible. Takes no parameters beyond the market.", + "operationId": "booksy-categories", + "parameters": [ + { + "description": "Market host", + "enum": [ + "ar", + "au", + "br", + "ca", + "cl", + "co", + "de", + "es", + "fr", + "gb", + "ie", + "it", + "mx", + "nl", + "pl", + "pt", + "us", + "za" + ], + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/booksy.categoriesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Booksy's complete top-level category enum", + "tags": [ + "Booksy" + ] + } + }, + "/booksy/treatment-hints": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the treatments and businesses Booksy's (booksy.com) app API suggests for one search text, with each treatment's integer id, name, slug and type, and each suggested business's id, name, slug, web path token and address. This is the discovery step for the treatment parameter of booksy-businesses, and it is the only treatment-id surface the app API exposes. It is query-driven, not a complete value space: the response says query_driven=true because the upstream returns only what the query matches, and no route found returns the full treatment taxonomy, so a treatment id outside these answers can exist. Prefer seeding it with the service name you want (haircut, braids, nails, massage). A query that matches nothing answers an empty suggestions array rather than an error; a blank query is rejected.", + "operationId": "booksy-treatment-hints", + "parameters": [ + { + "description": "Search text that seeds the hint lookup", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "haircut" + }, + { + "description": "Market host", + "enum": [ + "ar", + "au", + "br", + "ca", + "cl", + "co", + "de", + "es", + "fr", + "gb", + "ie", + "it", + "mx", + "nl", + "pl", + "pt", + "us", + "za" + ], + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/booksy.treatmentHintsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Discover Booksy treatment ids for a query", + "tags": [ + "Booksy" + ] + } + }, + "/boots/search": { + "get": { + "description": "Returns one page of Boots UK's public product catalog, including product cards and live facets. Supply `q`, one or more hierarchical `category` keys, or both. Use repeatable `filter=facet_key:option_key` values from that response's dynamic facets, plus the dedicated price and stock controls. `sort` accepts `relevance`, `price_low_to_high`, `price_high_to_low`, `top_rated`, `best_seller`, or `newest`.", + "operationId": "boots-search", + "parameters": [ + { + "description": "Free-text product query; required unless category is supplied", + "in": "query", + "name": "q", + "type": "string", + "x-example": "vitamin c" + }, + { + "collectionFormat": "multi", + "description": "Repeat the exact category hierarchy keys from root through the desired leaf; required unless q is supplied", + "in": "query", + "items": { + "type": "string" + }, + "name": "category", + "type": "array", + "x-example": "health & pharmacy" + }, + { + "collectionFormat": "multi", + "description": "Repeat a dynamic facet filter as facet_key:option_key, using key/option values returned in facets; category, currentPrice, and inStock use their dedicated parameters", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array", + "x-example": "brand:No7" + }, + { + "description": "Inclusive minimum GBP price; may be combined with price_max", + "in": "query", + "name": "price_min", + "type": "number", + "x-example": 45 + }, + { + "description": "Inclusive maximum GBP price; may be combined with price_min", + "in": "query", + "name": "price_max", + "type": "number", + "x-example": 100 + }, + { + "description": "true hides out-of-stock items; false leaves stock unfiltered", + "in": "query", + "name": "in_stock", + "type": "boolean", + "x-example": true + }, + { + "default": 1, + "description": "Page from 1 through 1000", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "default": 48, + "description": "Results per page from 1 through 48", + "in": "query", + "name": "page_size", + "type": "integer" + }, + { + "default": "relevance", + "description": "Sort: relevance, price_low_to_high, price_high_to_low, top_rated, best_seller, or newest", + "enum": [ + "relevance", + "price_low_to_high", + "price_high_to_low", + "top_rated", + "best_seller", + "newest" + ], + "in": "query", + "name": "sort", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/boots.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Boots UK products and categories", + "tags": [ + "Boots" + ] + } + }, + "/boots/suggest": { + "get": { + "description": "Returns Boots UK's own public typeahead phrases for a partial product query. The suggestions are search terms only; pass one to boots-search's q parameter for product cards and live facets.", + "operationId": "boots-suggest", + "parameters": [ + { + "description": "Partial product query", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "vitamin c" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/boots.suggestResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Boots UK search-box suggestions", + "tags": [ + "Boots" + ] + } + }, + "/bostonglobe/news": { + "get": { + "description": "Returns recent Boston Globe story metadata and summaries. Article bodies, sections, headlines-by-section, and author profiles are not exposed, and some stories require a subscription.", + "operationId": "bostonglobe-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Boston Globe top stories", + "tags": [ + "Boston Globe" + ] + } + }, + "/boxofficemojo/brand": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns release rows from a Box Office Mojo brand page. Pass exactly one of `id`, `path`, or `url`.", + "operationId": "boxofficemojo-brand", + "parameters": [ + { + "description": "Box Office Mojo brand id", + "in": "query", + "name": "id", + "type": "string", + "x-example": "bn3732077058" + }, + { + "description": "Box Office Mojo brand path", + "in": "query", + "name": "path", + "type": "string", + "x-example": "/brand/bn3732077058/" + }, + { + "description": "Absolute https://www.boxofficemojo.com brand URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.boxofficemojo.com/brand/bn3732077058/" + }, + { + "description": "Sort field", + "enum": [ + "grossToDate", + "maxNumTheaters", + "openingWeekendGross", + "openingNumTheaters", + "releaseDate" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sortDir", + "type": "string" + }, + { + "description": "Row offset for pagination (page size 100)", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/boxofficemojo.taxonomyDetailResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Box Office Mojo brand detail", + "tags": [ + "Box Office Mojo" + ] + } + }, + "/boxofficemojo/brands": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Box Office Mojo's brand chart, ranked, with each brand's `name`, `id`, `path`, `url`, release count and lifetime gross (an integer in `lifetime_gross`, the displayed text in `lifetime_gross_raw`). Reorder with `sort` (`totalGross`, `numReleases` or `grossToDate`) and `sortDir` (`asc` or `desc`); they are echoed back only when applied.", + "operationId": "boxofficemojo-brands", + "parameters": [ + { + "description": "Sort field", + "enum": [ + "totalGross", + "numReleases", + "grossToDate" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sortDir", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/boxofficemojo.taxonomyListResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Box Office Mojo brand chart", + "tags": [ + "Box Office Mojo" + ] + } + }, + "/boxofficemojo/calendar": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Box Office Mojo's domestic release schedule for one month, grouped by date. `year` (1921 to 2100) and `month` (1 to 12) are both required. Each release has its title, `release_url`, `distributor`, `scale`, `genres`, `cast` and poster image URLs when present.", + "operationId": "boxofficemojo-calendar", + "parameters": [ + { + "description": "Calendar year, from 1921 through 2100", + "in": "query", + "name": "year", + "required": true, + "type": "integer", + "x-example": 2026 + }, + { + "description": "Calendar month, 1 through 12", + "in": "query", + "name": "month", + "required": true, + "type": "integer", + "x-example": 9 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/boxofficemojo.calendarResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Box Office Mojo domestic release schedule", + "tags": [ + "Box Office Mojo" + ] + } + }, + "/boxofficemojo/calendar/changes": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Box Office Mojo's list of changes to the domestic release schedule, grouped by change date. `offset` pages through the list in steps of 30, from 0 to 780. Each change has the release, `distributor`, `scale`, `old_date` and `new_date`, and `range` shows the position in the list.", + "operationId": "boxofficemojo-calendar-changes", + "parameters": [ + { + "description": "Changes page offset. Allowed values: 0, 30, 60, ... 780", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/boxofficemojo.calendarChangesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Box Office Mojo domestic release schedule changes", + "tags": [ + "Box Office Mojo" + ] + } + }, + "/boxofficemojo/calendar/date": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the releases scheduled on one date in Box Office Mojo's domestic release schedule. `date` is required, in `YYYY-MM-DD` form. Each release has its title, `release_url`, `distributor`, `scale`, `genres`, `cast` and poster image URLs when present. A date with no scheduled releases returns a not-found error.", + "operationId": "boxofficemojo-calendar-date", + "parameters": [ + { + "description": "Calendar date in YYYY-MM-DD format", + "in": "query", + "name": "date", + "required": true, + "type": "string", + "x-example": "2026-09-04" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/boxofficemojo.calendarDateResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Box Office Mojo domestic release schedule date", + "tags": [ + "Box Office Mojo" + ] + } + }, + "/boxofficemojo/date/domestic": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns rows from Box Office Mojo's domestic daily chart. Empty upstream daily pages return a typed not-found error rather than an empty success.", + "operationId": "boxofficemojo-date-domestic", + "parameters": [ + { + "description": "Domestic box office date in YYYY-MM-DD format", + "in": "query", + "name": "date", + "required": true, + "type": "string", + "x-example": "2025-12-25" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/boxofficemojo.domesticDateResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Box Office Mojo domestic daily box office", + "tags": [ + "Box Office Mojo" + ] + } + }, + "/boxofficemojo/franchise": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns release rows from a Box Office Mojo franchise page. Pass exactly one of `id`, `path`, or `url`.", + "operationId": "boxofficemojo-franchise", + "parameters": [ + { + "description": "Box Office Mojo franchise id", + "in": "query", + "name": "id", + "type": "string", + "x-example": "fr541495045" + }, + { + "description": "Box Office Mojo franchise path", + "in": "query", + "name": "path", + "type": "string", + "x-example": "/franchise/fr541495045/" + }, + { + "description": "Absolute https://www.boxofficemojo.com franchise URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.boxofficemojo.com/franchise/fr541495045/" + }, + { + "description": "Sort field", + "enum": [ + "grossToDate", + "maxNumTheaters", + "openingWeekendGross", + "openingNumTheaters", + "releaseDate" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sortDir", + "type": "string" + }, + { + "description": "Row offset for pagination (page size 100)", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/boxofficemojo.taxonomyDetailResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Box Office Mojo franchise detail", + "tags": [ + "Box Office Mojo" + ] + } + }, + "/boxofficemojo/franchises": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Box Office Mojo's franchise chart, ranked, with each franchise's `name`, `id`, `path`, `url`, release count and lifetime gross (an integer in `lifetime_gross`, the displayed text in `lifetime_gross_raw`). Reorder with `sort` (`totalGross`, `numReleases` or `grossToDate`) and `sortDir` (`asc` or `desc`); they are echoed back only when applied.", + "operationId": "boxofficemojo-franchises", + "parameters": [ + { + "description": "Sort field", + "enum": [ + "totalGross", + "numReleases", + "grossToDate" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sortDir", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/boxofficemojo.taxonomyListResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Box Office Mojo franchise chart", + "tags": [ + "Box Office Mojo" + ] + } + }, + "/boxofficemojo/genre": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns release rows from a Box Office Mojo genre page. Pass exactly one of `id`, `path`, or `url`.", + "operationId": "boxofficemojo-genre", + "parameters": [ + { + "description": "Box Office Mojo genre id", + "in": "query", + "name": "id", + "type": "string", + "x-example": "sg3621777665" + }, + { + "description": "Box Office Mojo genre path", + "in": "query", + "name": "path", + "type": "string", + "x-example": "/genre/sg3621777665/" + }, + { + "description": "Absolute https://www.boxofficemojo.com genre URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.boxofficemojo.com/genre/sg3621777665/" + }, + { + "description": "Sort field", + "enum": [ + "grossToDate", + "maxNumTheaters", + "openingWeekendGross", + "openingNumTheaters", + "releaseDate" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sortDir", + "type": "string" + }, + { + "description": "Row offset for pagination (page size 100)", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/boxofficemojo.taxonomyDetailResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Box Office Mojo genre detail", + "tags": [ + "Box Office Mojo" + ] + } + }, + "/boxofficemojo/genres": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Box Office Mojo's genre chart, ranked, with each genre's `name`, `id`, `path`, `url`, release count and lifetime gross (an integer in `lifetime_gross`, the displayed text in `lifetime_gross_raw`). Reorder with `sort` (`totalGross`, `numTitles` or `grossToDate`) and `sortDir` (`asc` or `desc`); they are echoed back only when applied.", + "operationId": "boxofficemojo-genres", + "parameters": [ + { + "description": "Sort field", + "enum": [ + "totalGross", + "numTitles", + "grossToDate" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sortDir", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/boxofficemojo.taxonomyListResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Box Office Mojo genre chart", + "tags": [ + "Box Office Mojo" + ] + } + }, + "/boxofficemojo/lifetime-grosses": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of Box Office Mojo's lifetime gross chart of movies. `area` is `worldwide` (default) or `domestic`, and `offset` pages in steps of 200 from 0 to 800. Each row has `rank`, `title`, `title_id`, `year` and `lifetime_gross` as an integer, with the displayed text in `lifetime_gross_raw`.", + "operationId": "boxofficemojo-lifetime-grosses", + "parameters": [ + { + "description": "Chart area. Allowed values: worldwide, domestic", + "enum": [ + "worldwide", + "domestic" + ], + "in": "query", + "name": "area", + "type": "string", + "x-example": "worldwide" + }, + { + "description": "Chart page offset. Allowed values: 0, 200, 400, 600, 800", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/boxofficemojo.lifetimeGrossesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Box Office Mojo lifetime gross chart", + "tags": [ + "Box Office Mojo" + ] + } + }, + "/boxofficemojo/release": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Box Office Mojo release summary fields and domestic daily rows from a release page. Pass exactly one of `id`, `path`, or `url`.", + "operationId": "boxofficemojo-release", + "parameters": [ + { + "description": "Box Office Mojo release id", + "in": "query", + "name": "id", + "type": "string", + "x-example": "rl3389031937" + }, + { + "description": "Box Office Mojo release path", + "in": "query", + "name": "path", + "type": "string", + "x-example": "/release/rl3389031937/" + }, + { + "description": "Absolute https://www.boxofficemojo.com release URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.boxofficemojo.com/release/rl3389031937/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/boxofficemojo.releaseResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Box Office Mojo release detail", + "tags": [ + "Box Office Mojo" + ] + } + }, + "/boxofficemojo/release-group": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns market release rows grouped by region from a Box Office Mojo release-group page. Pass exactly one of `id`, `path`, or `url`.", + "operationId": "boxofficemojo-release-group", + "parameters": [ + { + "description": "Box Office Mojo release-group id", + "in": "query", + "name": "id", + "type": "string", + "x-example": "gr3486798341" + }, + { + "description": "Box Office Mojo release-group path", + "in": "query", + "name": "path", + "type": "string", + "x-example": "/releasegroup/gr3486798341/" + }, + { + "description": "Absolute https://www.boxofficemojo.com release-group URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.boxofficemojo.com/releasegroup/gr3486798341/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/boxofficemojo.releaseGroupResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Box Office Mojo release group detail", + "tags": [ + "Box Office Mojo" + ] + } + }, + "/boxofficemojo/showdown": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns release comparison metrics from a Box Office Mojo showdown page. Pass exactly one of `id`, `path`, or `url`.", + "operationId": "boxofficemojo-showdown", + "parameters": [ + { + "description": "Box Office Mojo showdown id", + "in": "query", + "name": "id", + "type": "string", + "x-example": "sd943519236" + }, + { + "description": "Box Office Mojo showdown path", + "in": "query", + "name": "path", + "type": "string", + "x-example": "/showdown/sd943519236/" + }, + { + "description": "Absolute https://www.boxofficemojo.com showdown URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.boxofficemojo.com/showdown/sd943519236/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/boxofficemojo.showdownResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Box Office Mojo showdown detail", + "tags": [ + "Box Office Mojo" + ] + } + }, + "/boxofficemojo/showdowns": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Box Office Mojo's showdowns, which compare groups of movies. Each row has the showdown `name`, `showdown_id`, `path`, `url`, `num_releases`, `total_gross` and the `top_release` with its gross, when Box Office Mojo shows them. Takes no parameters.", + "operationId": "boxofficemojo-showdowns", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/boxofficemojo.showdownsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Box Office Mojo showdowns", + "tags": [ + "Box Office Mojo" + ] + } + }, + "/boxofficemojo/title": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Box Office Mojo title release-group and market-gross tables from a title page. Pass exactly one of `id`, `path`, or `url`.", + "operationId": "boxofficemojo-title", + "parameters": [ + { + "description": "Box Office Mojo title id", + "in": "query", + "name": "id", + "type": "string", + "x-example": "tt0499549" + }, + { + "description": "Box Office Mojo title path", + "in": "query", + "name": "path", + "type": "string", + "x-example": "/title/tt0499549/" + }, + { + "description": "Absolute https://www.boxofficemojo.com title URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.boxofficemojo.com/title/tt0499549/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/boxofficemojo.titleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Box Office Mojo title detail", + "tags": [ + "Box Office Mojo" + ] + } + }, + "/boxofficemojo/weekend/domestic": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns rows from Box Office Mojo's domestic weekend chart. Empty upstream weekend pages return a typed not-found error rather than an empty success.", + "operationId": "boxofficemojo-weekend-domestic", + "parameters": [ + { + "description": "Domestic weekend year, from 1982 through 2100", + "in": "query", + "name": "year", + "required": true, + "type": "integer", + "x-example": 2025 + }, + { + "description": "Weekend number, 1 through 53", + "in": "query", + "name": "week", + "required": true, + "type": "integer", + "x-example": 52 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/boxofficemojo.domesticWeekendResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Box Office Mojo domestic weekend box office", + "tags": [ + "Box Office Mojo" + ] + } + }, + "/boxofficemojo/weekend/domestic/by-distributor": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns distributor rows from Box Office Mojo's domestic weekend by-distributor chart. Empty upstream weekend pages return a typed not-found error rather than an empty success.", + "operationId": "boxofficemojo-weekend-domestic-by-distributor", + "parameters": [ + { + "description": "Domestic weekend year, from 1982 through 2100", + "in": "query", + "name": "year", + "required": true, + "type": "integer", + "x-example": 2025 + }, + { + "description": "Weekend number, 1 through 53", + "in": "query", + "name": "week", + "required": true, + "type": "integer", + "x-example": 52 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/boxofficemojo.weekendDistributorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Box Office Mojo domestic weekend by distributor", + "tags": [ + "Box Office Mojo" + ] + } + }, + "/boxofficemojo/weekend/domestic/estimates": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns estimate-vs-actual rows from Box Office Mojo's domestic weekend estimates chart. Empty upstream weekend pages return a typed not-found error rather than an empty success.", + "operationId": "boxofficemojo-weekend-domestic-estimates", + "parameters": [ + { + "description": "Domestic weekend year, from 1982 through 2100", + "in": "query", + "name": "year", + "required": true, + "type": "integer", + "x-example": 2025 + }, + { + "description": "Weekend number, 1 through 53", + "in": "query", + "name": "week", + "required": true, + "type": "integer", + "x-example": 52 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/boxofficemojo.weekendEstimatesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Box Office Mojo domestic weekend estimates", + "tags": [ + "Box Office Mojo" + ] + } + }, + "/boxofficemojo/year/domestic": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the Box Office Mojo domestic box office chart for one year. `year` is required and runs from 1977 to 2100. Each row has `rank`, `release`, `release_date`, `distributor`, `theaters`, `gross`, `total_gross` and `new_this_year`, each gross also with its displayed text in a `_raw` field.", + "operationId": "boxofficemojo-year-domestic", + "parameters": [ + { + "description": "Domestic box office year, from 1977 through 2100", + "in": "query", + "name": "year", + "required": true, + "type": "integer", + "x-example": 2025 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/boxofficemojo.domesticYearResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Box Office Mojo domestic yearly box office", + "tags": [ + "Box Office Mojo" + ] + } + }, + "/boxofficemojo/year/worldwide": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the Box Office Mojo worldwide box office chart for one year. `year` is required and runs from 1977 to 2100. Each row is a release group with its `rank`, `worldwide`, `domestic` and `foreign` grosses, the domestic and foreign shares, and `title_id`; each gross also has its displayed text in a `_raw` field.", + "operationId": "boxofficemojo-year-worldwide", + "parameters": [ + { + "description": "Box office year, from 1977 through 2100", + "in": "query", + "name": "year", + "required": true, + "type": "integer", + "x-example": 2025 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/boxofficemojo.worldwideYearResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Box Office Mojo worldwide yearly box office", + "tags": [ + "Box Office Mojo" + ] + } + }, + "/brand/retrieve": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a brand profile for a domain (title, description, brand colors as hex, logos and icons ranked best-first, backdrops, socials, links, and any schema.org organization data). Enrichment-only fields that are not present in the page markup are returned as null.", + "operationId": "brand-retrieve", + "parameters": [ + { + "description": "Domain to retrieve brand data for, e.g. context.dev", + "in": "query", + "name": "domain", + "required": true, + "type": "string", + "x-example": "context.dev" + }, + { + "description": "Accepted for compatibility; not applied in HTML-only mode", + "in": "query", + "name": "force_language", + "type": "string" + }, + { + "description": "Optimize for speed by skipping schema.org and footer-link extraction", + "in": "query", + "name": "maxSpeed", + "type": "boolean" + }, + { + "description": "Cache freshness window in milliseconds, clamps to 1 day..1 year", + "in": "query", + "name": "maxAgeMs", + "type": "integer" + }, + { + "description": "Upstream fetch timeout in milliseconds, clamps to 1000..300000", + "in": "query", + "name": "timeoutMS", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/brand.retrieveResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "408": { + "description": "Request Timeout", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve brand data by domain", + "tags": [ + "Brand" + ] + } + }, + "/brave/images": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Brave image search results for a query string. Locale defaults to country=us and lang=en-us. Returns 503 when Brave serves a challenge page or unusable results.", + "operationId": "brave-images", + "parameters": [ + { + "description": "Search query", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "openai" + }, + { + "description": "Zero-based Brave result page; defaults to 0", + "in": "query", + "minimum": 0, + "name": "offset", + "type": "integer", + "x-example": 0 + }, + { + "description": "Results to return; defaults to 10, clamped to 1..50", + "in": "query", + "maximum": 50, + "minimum": 1, + "name": "count", + "type": "integer", + "x-example": 10 + }, + { + "description": "Brave result country; defaults to us", + "enum": [ + "all", + "ar", + "at", + "au", + "be", + "br", + "ca", + "ch", + "cl", + "cn", + "de", + "dk", + "es", + "fi", + "fr", + "gb", + "gr", + "hk", + "id", + "in", + "it", + "jp", + "kr", + "mx", + "my", + "nl", + "no", + "nz", + "ph", + "pl", + "pt", + "ru", + "sa", + "se", + "sg", + "tr", + "tw", + "us", + "za" + ], + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Brave UI language; defaults to en-us", + "enum": [ + "de-de", + "en-ca", + "en-gb", + "en-in", + "en-us", + "fi-fi", + "fr-ca", + "fr-fr", + "ja-jp", + "pt-br", + "sq-al", + "sw-ke", + "zh-tw" + ], + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/brave.imagesResponseDoc" + } + }, + "400": { + "description": "Missing or invalid query", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "No results found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Brave upstream request failed", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Brave image results", + "tags": [ + "Brave" + ] + } + }, + "/brave/news": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Brave news search results for a query string. Locale defaults to country=us and lang=en-us. Returns 503 when Brave serves a challenge page or unusable results.", + "operationId": "brave-news", + "parameters": [ + { + "description": "Search query", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "openai" + }, + { + "description": "Zero-based Brave result page; defaults to 0", + "in": "query", + "minimum": 0, + "name": "offset", + "type": "integer", + "x-example": 0 + }, + { + "description": "Results to return; defaults to 10, clamped to 1..50", + "in": "query", + "maximum": 50, + "minimum": 1, + "name": "count", + "type": "integer", + "x-example": 10 + }, + { + "description": "Brave result country; defaults to us", + "enum": [ + "all", + "ar", + "at", + "au", + "be", + "br", + "ca", + "ch", + "cl", + "cn", + "de", + "dk", + "es", + "fi", + "fr", + "gb", + "gr", + "hk", + "id", + "in", + "it", + "jp", + "kr", + "mx", + "my", + "nl", + "no", + "nz", + "ph", + "pl", + "pt", + "ru", + "sa", + "se", + "sg", + "tr", + "tw", + "us", + "za" + ], + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Brave UI language; defaults to en-us", + "enum": [ + "de-de", + "en-ca", + "en-gb", + "en-in", + "en-us", + "fi-fi", + "fr-ca", + "fr-fr", + "ja-jp", + "pt-br", + "sq-al", + "sw-ke", + "zh-tw" + ], + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + }, + { + "description": "Preset time filter: any, day, week, month, year, or custom", + "enum": [ + "any", + "day", + "week", + "month", + "year", + "custom" + ], + "in": "query", + "name": "time_range", + "type": "string" + }, + { + "description": "Custom start date in YYYY-MM-DD; requires date_to", + "in": "query", + "name": "date_from", + "type": "string", + "x-example": "2026-03-01" + }, + { + "description": "Custom end date in YYYY-MM-DD; requires date_from", + "in": "query", + "name": "date_to", + "type": "string", + "x-example": "2026-03-30" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/brave.newsResponseDoc" + } + }, + "400": { + "description": "Missing or invalid query", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "No results found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Brave upstream request failed", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Brave news results", + "tags": [ + "Brave" + ] + } + }, + "/brave/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns web search results from Brave Search for a query string, along with offset-based pagination, related queries, discussions, videos, and the right-side knowledge card when Brave includes one. Use time_range for preset ranges or date_from/date_to for a custom YYYY-MM-DD range. Locale defaults to country=us and lang=en-us.", + "operationId": "brave-search", + "parameters": [ + { + "description": "Search query", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "openai" + }, + { + "description": "Zero-based Brave result page", + "in": "query", + "minimum": 0, + "name": "offset", + "type": "integer", + "x-example": 1 + }, + { + "description": "Brave result country; defaults to us", + "enum": [ + "all", + "ar", + "at", + "au", + "be", + "br", + "ca", + "ch", + "cl", + "cn", + "de", + "dk", + "es", + "fi", + "fr", + "gb", + "gr", + "hk", + "id", + "in", + "it", + "jp", + "kr", + "mx", + "my", + "nl", + "no", + "nz", + "ph", + "pl", + "pt", + "ru", + "sa", + "se", + "sg", + "tr", + "tw", + "us", + "za" + ], + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Brave UI language; defaults to en-us", + "enum": [ + "de-de", + "en-ca", + "en-gb", + "en-in", + "en-us", + "fi-fi", + "fr-ca", + "fr-fr", + "ja-jp", + "pt-br", + "sq-al", + "sw-ke", + "zh-tw" + ], + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + }, + { + "description": "Preset time filter: any, day, week, month, year, or custom", + "enum": [ + "any", + "day", + "week", + "month", + "year", + "custom" + ], + "in": "query", + "name": "time_range", + "type": "string" + }, + { + "description": "Custom start date in YYYY-MM-DD; requires date_to", + "in": "query", + "name": "date_from", + "type": "string", + "x-example": "2026-03-01" + }, + { + "description": "Custom end date in YYYY-MM-DD; requires date_from", + "in": "query", + "name": "date_to", + "type": "string", + "x-example": "2026-03-30" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/brave.searchResponseDoc" + } + }, + "400": { + "description": "Missing or invalid query", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "No results found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Brave", + "tags": [ + "Brave" + ] + } + }, + "/brave/suggest": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Brave autosuggest query completions for a query prefix. Locale defaults to country=us and lang=en-us. Suggestions are fetched from public Brave Search suggest JSON and trimmed to the requested count. `rich=true` adds entity metadata (name, description, category, image) where Brave resolves a suggestion to a known entity.", + "operationId": "brave-suggest", + "parameters": [ + { + "description": "Search query prefix", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "openai" + }, + { + "description": "Suggestions to return; defaults to 10, clamped to 1..12", + "in": "query", + "maximum": 12, + "minimum": 1, + "name": "count", + "type": "integer", + "x-example": 10 + }, + { + "description": "Brave result country; defaults to us", + "enum": [ + "all", + "ar", + "at", + "au", + "be", + "br", + "ca", + "ch", + "cl", + "cn", + "de", + "dk", + "es", + "fi", + "fr", + "gb", + "gr", + "hk", + "id", + "in", + "it", + "jp", + "kr", + "mx", + "my", + "nl", + "no", + "nz", + "ph", + "pl", + "pt", + "ru", + "sa", + "se", + "sg", + "tr", + "tw", + "us", + "za" + ], + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Brave UI language; defaults to en-us", + "enum": [ + "de-de", + "en-ca", + "en-gb", + "en-in", + "en-us", + "fi-fi", + "fr-ca", + "fr-fr", + "ja-jp", + "pt-br", + "sq-al", + "sw-ke", + "zh-tw" + ], + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + }, + { + "description": "Add entity name, description, category, and image to suggestions Brave resolves to a known entity; defaults to false", + "in": "query", + "name": "rich", + "type": "boolean", + "x-example": false + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/brave.suggestResponseDoc" + } + }, + "400": { + "description": "Missing or invalid query", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Brave upstream request failed", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Suggest Brave search queries", + "tags": [ + "Brave" + ] + } + }, + "/brave/videos": { "get": { "consumes": [ "application/json" ], - "description": "Returns the live handbags category directory, sort keys, price presets, and filter values discovered from 1stDibs. Returned category slugs are valid for firstdibs-search.", - "operationId": "firstdibs-categories", + "description": "Returns Brave video search results for a query string. Locale defaults to country=us and lang=en-us. Returns 503 when Brave serves a challenge page or unusable results.", + "operationId": "brave-videos", + "parameters": [ + { + "description": "Search query", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "openai" + }, + { + "description": "Zero-based Brave result page; defaults to 0", + "in": "query", + "minimum": 0, + "name": "offset", + "type": "integer", + "x-example": 0 + }, + { + "description": "Results to return; defaults to 10, clamped to 1..50", + "in": "query", + "maximum": 50, + "minimum": 1, + "name": "count", + "type": "integer", + "x-example": 10 + }, + { + "description": "Brave result country; defaults to us", + "enum": [ + "all", + "ar", + "at", + "au", + "be", + "br", + "ca", + "ch", + "cl", + "cn", + "de", + "dk", + "es", + "fi", + "fr", + "gb", + "gr", + "hk", + "id", + "in", + "it", + "jp", + "kr", + "mx", + "my", + "nl", + "no", + "nz", + "ph", + "pl", + "pt", + "ru", + "sa", + "se", + "sg", + "tr", + "tw", + "us", + "za" + ], + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Brave UI language; defaults to en-us", + "enum": [ + "de-de", + "en-ca", + "en-gb", + "en-in", + "en-us", + "fi-fi", + "fr-ca", + "fr-fr", + "ja-jp", + "pt-br", + "sq-al", + "sw-ke", + "zh-tw" + ], + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en-us" + }, + { + "description": "Preset time filter: any, day, week, month, year, or custom", + "enum": [ + "any", + "day", + "week", + "month", + "year", + "custom" + ], + "in": "query", + "name": "time_range", + "type": "string" + }, + { + "description": "Custom start date in YYYY-MM-DD; requires date_to", + "in": "query", + "name": "date_from", + "type": "string", + "x-example": "2026-03-01" + }, + { + "description": "Custom end date in YYYY-MM-DD; requires date_from", + "in": "query", + "name": "date_to", + "type": "string", + "x-example": "2026-03-30" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/brave.videosResponseDoc" + } + }, + "400": { + "description": "Missing or invalid query", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "No results found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Brave upstream request failed", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Brave video results", + "tags": [ + "Brave" + ] + } + }, + "/breitbart/article": { + "get": { + "description": "Returns a Breitbart article by `url`, a canonical `https://www.breitbart.com/
///
//` address. The response has the title, description, publication and update times, section, image, `authors` and the body `paragraphs`.", + "operationId": "breitbart-article", + "parameters": [ + { + "description": "Canonical Breitbart article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.breitbart.com/politics/2026/09/22/example-story/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Breitbart article content", + "tags": [ + "Breitbart" + ] + } + }, + "/breitbart/author": { + "get": { + "description": "Returns one Breitbart author/contributor's public profile: name, a short bio/role line when the page carries one, and their recent articles.", + "operationId": "breitbart-author", + "parameters": [ + { + "description": "Author slug, e.g. joshua-klein", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "joshua-klein" + }, + { + "description": "Canonical breitbart.com/author// URL, optionally with a /page// segment; alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.breitbart.com/author/joshua-klein/" + }, + { + "description": "1-based page of articles to return; defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.breitbartAuthorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Breitbart author profile", + "tags": [ + "Breitbart" + ] + } + }, + "/breitbart/headlines": { + "get": { + "description": "Returns current headlines from one Breitbart section hub. `section` is required and takes one of 21 slugs, such as `politics`, `border`, `the-media` or `europe`. The `world-news`, `news` and `on-the-hill-exclusive-video` hubs aggregate stories, so their links point to articles under whichever section owns each story.", + "operationId": "breitbart-headlines", + "parameters": [ + { + "description": "Breitbart section slug", + "enum": [ + "politics", + "economy", + "border", + "immigration", + "national-security", + "entertainment", + "sports", + "tech", + "the-media", + "radio", + "clips", + "faith", + "world-news", + "europe", + "middle-east", + "africa", + "asia", + "latin-america", + "america250", + "on-the-hill-exclusive-video", + "news" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "politics" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Breitbart section headlines", + "tags": [ + "Breitbart" + ] + } + }, + "/breitbart/news": { + "get": { + "description": "Returns the latest Breitbart top stories from across the site, with no input needed. Each item has a title and canonical URL, and may also carry a summary, publication time, author and image.", + "operationId": "breitbart-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Breitbart top stories", + "tags": [ + "Breitbart" + ] + } + }, + "/breitbart/sections": { + "get": { + "description": "Lists the 21 Breitbart sections accepted by `breitbart-headlines`, including `politics`, `economy`, `border`, `national-security`, `the-media`, `world-news` and `america250`. Each has a `slug`, a display `name` and the section's page `url`. The list was verified on 2026-09-23.", + "operationId": "breitbart-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Breitbart sections", + "tags": [ + "Breitbart" + ] + } + }, + "/bringatrailer/filters": { + "get": { + "description": "Returns the complete value space of every bringatrailer_results filter: vehicle categories, decades, origins, regions with their countries, sort orders, results, auction types, recency windows, maximum-bid presets and the per_page range.", + "operationId": "bringatrailer-filters", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bringatrailer.filtersResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Bring a Trailer filter values", + "tags": [ + "Bring a Trailer" + ] + } + }, + "/bringatrailer/listing": { + "get": { + "description": "Returns one auction's detail: status, sold or high bid, end time, bid count, comments, views, watchers, seller, location, chassis, listing details, description and lead image. Pass the slug from /listing/{slug}/ or the full listing URL returned by the other endpoints. bid_history=true adds every bid (amount, currency, time, and any soft-close end-time extension) oldest first, without bidder names; it needs no extra request.", + "operationId": "bringatrailer-listing", + "parameters": [ + { + "description": "Listing slug or bringatrailer.com listing URL", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "1978-ford-f-150-122" + }, + { + "description": "Add the bid-by-bid history, without bidder names", + "in": "query", + "name": "bid_history", + "type": "boolean" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/bringatrailer.listingResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get one Bring a Trailer auction", + "tags": [ + "Bring a Trailer" + ] + } + }, + "/bringatrailer/live": { + "get": { + "description": "Returns the auctions currently open on Bring a Trailer (about 1,300) with current bid, end time and attributes. Filter by title text, category, decade, country, ending window, maximum current bid and the premium and no-reserve flags; sort by ending soon, highest bid or lowest bid.", + "operationId": "bringatrailer-live", + "parameters": [ + { + "description": "Case-insensitive text that must appear in the title", + "in": "query", + "name": "q", + "type": "string", + "x-example": "porsche" + }, + { + "description": "Comma-separated category ids from bringatrailer_filters", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Comma-separated decade ids from bringatrailer_filters", + "in": "query", + "name": "era", + "type": "string" + }, + { + "description": "Comma-separated ISO 3166-1 alpha-2 country codes", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + }, + { + "description": "Only auctions ending within this many hours", + "enum": [ + 1, + 4, + 24, + 120, + 168 + ], + "in": "query", + "name": "ending_within", + "type": "integer" + }, + { + "description": "Only auctions whose current bid is at most this many USD", + "in": "query", + "minimum": 0, + "name": "max_bid", + "type": "integer" + }, + { + "description": "Only no-reserve auctions", + "in": "query", + "name": "no_reserve", + "type": "boolean" + }, + { + "description": "Only premium auctions", + "in": "query", + "name": "premium", + "type": "boolean" + }, + { + "default": "ending_soon", + "description": "Sort order", + "enum": [ + "ending_soon", + "highest_bid", + "lowest_bid" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": 1, + "description": "1-based page", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "default": 36, + "description": "Results per page", + "in": "query", + "maximum": 50, + "minimum": 10, + "name": "per_page", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -271926,7 +341887,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/firstdibs.categoriesDoc" + "$ref": "#/definitions/bringatrailer.liveResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -271941,25 +341914,30 @@ "ApiKeyAuth": [] } ], - "summary": "List 1stDibs categories and filters", + "summary": "List live Bring a Trailer auctions", "tags": [ - "1stDibs" + "Bring a Trailer" ] } }, - "/1stdibs/designers": { + "/bringatrailer/makes": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the designer filter values found on a 1stDibs category page, with a `count` and, for each designer, its `name`, `slug` and `url`. `category` is optional and comes from `firstdibs-categories`. Each `slug` can be used as the designer filter in `firstdibs-search`.", - "operationId": "firstdibs-designers", + "description": "Returns Bring a Trailer's Makes and Models Directory: every make with its model pages and the numeric model_id that bringatrailer_results accepts. Narrow with q (matches make or model names) or make (exact slug).", + "operationId": "bringatrailer-makes", "parameters": [ { - "description": "Category slug from firstdibs-categories", + "description": "Case-insensitive text matched against make and model names", "in": "query", - "name": "category", - "type": "string" + "name": "q", + "type": "string", + "x-example": "911" + }, + { + "description": "Exact make slug", + "in": "query", + "name": "make", + "type": "string", + "x-example": "porsche" } ], "produces": [ @@ -271969,7 +341947,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/firstdibs.designersDoc" + "$ref": "#/definitions/bringatrailer.makesResponseDoc" } }, "400": { @@ -271978,6 +341956,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -271990,27 +341974,121 @@ "ApiKeyAuth": [] } ], - "summary": "List 1stDibs designers", + "summary": "Bring a Trailer makes and models", "tags": [ - "1stDibs" + "Bring a Trailer" ] } }, - "/1stdibs/product": { + "/bringatrailer/price-history": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the details of one 1stDibs product, identified by its product `url`: `name`, `brand`, `category`, `description`, `images`, `price` with `currency`, and the `in_stock` flag. The price is in USD and is present only when 1stDibs shows one.", - "operationId": "firstdibs-product", + "description": "Returns the price chart Bring a Trailer draws for a make or a model: summaries (count, min, median, mean, max) of sold and reserve-not-met final bids, sold prices by closing year, and the most recent auctions as dated points. Exactly one of make and model_id is required; the same filters as bringatrailer_results narrow the chart. Bring a Trailer returns at most the most recent 10,000 auctions, reported as truncated. Large makes can take up to about 50 seconds.", + "operationId": "bringatrailer-price-history", "parameters": [ { - "description": "1stDibs product URL", + "description": "Make name from bringatrailer_makes; exactly one of make and model_id is required", "in": "query", - "name": "url", - "required": true, + "name": "make", "type": "string", - "x-example": "https://www.1stdibs.com/jewelry/necklaces/chain-necklaces/vintage-gucci-necklace-double-g-gucci-logo-sterling-silver-pendant/id-j_29181182/" + "x-example": "Porsche" + }, + { + "description": "Numeric model id from bringatrailer_makes; exactly one of make and model_id is required", + "in": "query", + "name": "model_id", + "type": "integer", + "x-example": 65064925 + }, + { + "description": "Keyword that must appear in the listing", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Keyword that must not appear in the listing", + "in": "query", + "name": "exclude", + "type": "string" + }, + { + "description": "Comma-separated category ids from bringatrailer_filters", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Comma-separated decade ids from bringatrailer_filters", + "in": "query", + "name": "era", + "type": "string" + }, + { + "description": "Comma-separated origin ids from bringatrailer_filters", + "in": "query", + "name": "origin", + "type": "string" + }, + { + "description": "Comma-separated ISO 3166-1 alpha-2 country codes", + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Auction type", + "enum": [ + "premium", + "noreserve" + ], + "in": "query", + "name": "type", + "type": "string" + }, + { + "description": "Closed within", + "enum": [ + "7D", + "30D", + "1Y", + "2Y", + "5Y" + ], + "in": "query", + "name": "recency", + "type": "string" + }, + { + "description": "Minimum model year", + "in": "query", + "maximum": 2100, + "minimum": 1885, + "name": "min_year", + "type": "integer" + }, + { + "description": "Maximum model year", + "in": "query", + "maximum": 2100, + "minimum": 1885, + "name": "max_year", + "type": "integer" + }, + { + "description": "Maximum final bid in USD", + "in": "query", + "minimum": 0, + "name": "max_bid", + "type": "integer" + }, + { + "default": 100, + "description": "Most recent auctions to list in points; 0 returns only the summaries", + "in": "query", + "maximum": 1000, + "minimum": 0, + "name": "points_limit", + "type": "integer" } ], "produces": [ @@ -272020,7 +342098,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/firstdibs.productDoc" + "$ref": "#/definitions/bringatrailer.priceHistoryResponseDoc" } }, "400": { @@ -272029,8 +342107,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -272047,137 +342125,136 @@ "ApiKeyAuth": [] } ], - "summary": "Get a 1stDibs product", + "summary": "Bring a Trailer auction price history", "tags": [ - "1stDibs" + "Bring a Trailer" ] } }, - "/1stdibs/search": { + "/bringatrailer/results": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches or browses 1stDibs handbags and purses with category, designer, price, sale, color, period, location, gender, origin, seller, and sort filters.", - "operationId": "firstdibs-search", + "description": "Pages through Bring a Trailer's archive of completed collector-vehicle auctions with final bids and sold or reserve-not-met results. Filter by make or model (ids from bringatrailer_makes), keyword, category, decade, origin, country, result, premium or no-reserve type, recency, model-year range, maximum bid and sort order. Every filter value is listed by bringatrailer_filters.", + "operationId": "bringatrailer-results", "parameters": [ { - "description": "Free-text search", + "description": "Make name from bringatrailer_makes; mutually exclusive with model_id", "in": "query", - "name": "q", - "type": "string" + "name": "make", + "type": "string", + "x-example": "Porsche" }, { - "description": "Category slug from firstdibs-categories", + "description": "Numeric model id from bringatrailer_makes; mutually exclusive with make", "in": "query", - "name": "category", - "type": "string" + "name": "model_id", + "type": "integer", + "x-example": 65064925 }, { - "description": "Designer slug from firstdibs-designers", + "description": "Keyword that must appear in the listing", "in": "query", - "name": "designer", - "type": "string" + "name": "q", + "type": "string", + "x-example": "turbo" }, { - "description": "Color value", + "description": "Keyword that must not appear in the listing", "in": "query", - "name": "color", + "name": "exclude", "type": "string" }, { - "description": "Period value", + "description": "Comma-separated category ids from bringatrailer_filters", "in": "query", - "name": "period", - "type": "string" + "name": "category", + "type": "string", + "x-example": "434" }, { - "description": "Item location", + "description": "Comma-separated decade ids from bringatrailer_filters", "in": "query", - "name": "location", - "type": "string" + "name": "era", + "type": "string", + "x-example": "1990" }, { - "description": "Gender value", + "description": "Comma-separated origin ids from bringatrailer_filters", "in": "query", - "name": "gender", - "type": "string" + "name": "origin", + "type": "string", + "x-example": "7" }, { - "description": "Place-of-origin value", + "description": "Comma-separated ISO 3166-1 alpha-2 country codes", "in": "query", - "name": "origin", - "type": "string" + "name": "country", + "type": "string", + "x-example": "US,CA" }, { - "description": "Price preset", + "description": "Auction result", "enum": [ - "all price", - "[* TO 999]", - "[* TO 1999]", - "[* TO 4999]", - "[5000 TO *]" + "sold", + "unsold" ], "in": "query", - "name": "price", + "name": "result", "type": "string" }, { - "description": "Minimum price", - "in": "query", - "name": "price_min", - "type": "number" - }, - { - "description": "Maximum price", - "in": "query", - "name": "price_max", - "type": "number" - }, - { - "description": "On-sale listings only", - "in": "query", - "name": "on_sale", - "type": "boolean" - }, - { - "description": "Listings with measurements", + "description": "Auction type", + "enum": [ + "premium", + "noreserve" + ], "in": "query", - "name": "measurements", - "type": "boolean" + "name": "type", + "type": "string" }, { - "description": "Listings added this week", + "description": "Closed within", + "enum": [ + "7D", + "30D", + "1Y", + "2Y", + "5Y" + ], "in": "query", - "name": "this_week", - "type": "boolean" + "name": "recency", + "type": "string" }, { - "description": "Returnable items only", + "description": "Minimum model year", "in": "query", - "name": "returnable", - "type": "boolean" + "maximum": 2100, + "minimum": 1885, + "name": "min_year", + "type": "integer" }, { - "description": "Recognized seller listings only", + "description": "Maximum model year", "in": "query", - "name": "recognized_seller", - "type": "boolean" + "maximum": 2100, + "minimum": 1885, + "name": "max_year", + "type": "integer" }, { - "description": "Top seller listings only", + "description": "Maximum final bid in USD", "in": "query", - "name": "top_seller", - "type": "boolean" + "minimum": 0, + "name": "max_bid", + "type": "integer" }, { - "description": "Sort", + "default": "recent", + "description": "Sort order", "enum": [ - "recommended", - "newest", - "price-high", - "price-low", - "popular" + "recent", + "oldest", + "popular", + "highest_bid" ], "in": "query", "name": "sort", @@ -272192,13 +342269,11 @@ "type": "integer" }, { - "default": 60, + "default": 36, "description": "Results per page", - "enum": [ - 60, - 120 - ], "in": "query", + "maximum": 50, + "minimum": 10, "name": "per_page", "type": "integer" } @@ -272210,7 +342285,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/firstdibs.searchDoc" + "$ref": "#/definitions/bringatrailer.resultsResponseDoc" } }, "400": { @@ -272219,6 +342294,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -272231,55 +342312,53 @@ "ApiKeyAuth": [] } ], - "summary": "Search 1stDibs listings", + "summary": "Bring a Trailer completed auctions", "tags": [ - "1stDibs" + "Bring a Trailer" ] } }, - "/7now/catalog": { + "/bringatrailer/search": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one 7NOW store's browsable category list, a paginated item listing per catalog section (each with real per-item pricing, active promotions, calories, UPC and image), and a live active/out-of-stock inventory count for that store. store_id comes from GET /7now/stores; lat and lon are accepted but inert (store_id alone selects the store). The catalog is genuinely store-scoped, not a national price list. skip/limit page every item section uniformly (limit is capped at 50, defaults to 20).", - "operationId": "7now-catalog", + "description": "Runs Bring a Trailer's site search and returns the matching live listings, make and model pages, previous auctions (sold, reserve not met and withdrawn, with final prices), past events and editorial stories, each with its own total. section narrows the response to one list and pages through it; every list pages 12 rows at a time except previous auctions at 24, and live listings (up to 100, repeated on every site page) come back only on page 1. A term that is exactly a make, model or category name (Ferrari, BMW 2002, boat) makes the site redirect to that page: the response then carries redirect and empty lists, and phrase=true runs the search instead. Member profiles are never returned.", + "operationId": "bringatrailer-search", "parameters": [ { - "description": "7NOW store id, from GET /7now/stores.", + "description": "Text to search, 2 to 100 characters without double quotes", "in": "query", - "name": "store_id", + "name": "q", "required": true, "type": "string", - "x-example": "39226" - }, - { - "description": "Accepted but inert -- store_id alone selects the store; responses are byte-identical with any value or none. Forwarded upstream for fidelity with 7now.com's own client.", - "in": "query", - "name": "lat", - "type": "number", - "x-example": 40.747508 + "x-example": "sunroof delete" }, { - "description": "Accepted but inert -- see lat.", + "description": "Match q as an exact phrase; needed when q is exactly a make, model or category name", "in": "query", - "name": "lon", - "type": "number", - "x-example": -73.989099 + "name": "phrase", + "type": "boolean" }, { - "description": "Pagination offset, applied uniformly to every catalog section. Defaults to 0.", + "description": "List to return: all (default), live_listings, models, previous_auctions, events or stories", + "enum": [ + "all", + "live_listings", + "models", + "previous_auctions", + "events", + "stories" + ], "in": "query", - "name": "skip", - "type": "integer", - "x-example": 0 + "name": "section", + "type": "string" }, { - "description": "Max items returned per catalog section, 1-50. Defaults to 20.", + "default": 1, + "description": "Page number from 1", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "maximum": 10000, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -272289,7 +342368,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.catalogResponseDoc" + "$ref": "#/definitions/bringatrailer.searchResponseDoc" } }, "400": { @@ -272316,41 +342395,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get one 7NOW store's live product catalog", + "summary": "Search Bring a Trailer", "tags": [ - "7NOW" + "Bring a Trailer" ] } }, - "/7now/categories": { + "/bringatrailer/suggest": { "get": { - "consumes": [ - "application/json" - ], - "description": "Enumerates every value GET /7now/category accepts for a store, so callers do not have to pull the full catalog to discover them. 7NOW has two disjoint id spaces behind that one parameter: `departments` are the store's 10 permanent browsable departments (Fresh Food, Drinks, Snacks, Candy, Ice Cream, Beer & Seltzer, Tobacco, Grocery, Household, Personal Care), and `shelves` are the merchandising rows the homepage currently features (\"$2 Deals\", \"What's New\", \"Only At 7-Eleven\", seasonal ones). Both work as category_id. Shelves rotate with promotions and seasons, so re-read them rather than caching ids long-term. store_id comes from GET /7now/stores; lat and lon are accepted but inert (store_id alone selects the store).", - "operationId": "7now-categories", + "description": "Returns Bring a Trailer's search-box completions for a term: make pages, model and generation pages, decades and categories. Era rows carry the decade id and category rows the category id that bringatrailer_results accepts as era and category; make rows can be passed by title as make. Use bringatrailer_makes for a model's numeric model_id.", + "operationId": "bringatrailer-suggest", "parameters": [ { - "description": "7NOW store id, from GET /7now/stores.", + "description": "Text to complete", "in": "query", - "name": "store_id", + "name": "term", "required": true, "type": "string", - "x-example": "39640" - }, - { - "description": "Accepted but inert -- store_id alone selects the store; responses are byte-identical with any value or none. Forwarded upstream for fidelity with 7now.com's own client.", - "in": "query", - "name": "lat", - "type": "number", - "x-example": 40.712775 - }, - { - "description": "Accepted but inert -- see lat.", - "in": "query", - "name": "lon", - "type": "number", - "x-example": -74.005973 + "x-example": "porsche 911" } ], "produces": [ @@ -272360,7 +342422,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.categoriesResponseDoc" + "$ref": "#/definitions/bringatrailer.suggestResponseDoc" } }, "400": { @@ -272387,56 +342449,24 @@ "ApiKeyAuth": [] } ], - "summary": "List every category id one 7NOW store accepts", + "summary": "Bring a Trailer search suggestions", "tags": [ - "7NOW" + "Bring a Trailer" ] } }, - "/7now/category": { + "/brisbanetimes/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one 7NOW store's top-level category broken into its real subcategory groups (e.g. Fresh Food -> Pizza, Wings & Chicken Bites, Subs & Sandwiches, ...), each with its own paginated, priced item list and live availability, plus a category-wide availability summary. Complements GET /7now/catalog, whose per-category section is a single flat list -- this is the same data organized the way 7now.com's own category page groups it. store_id comes from GET /7now/stores and category_id from GET /7now/categories -- which accepts both the store's permanent departments and the merchandising shelves its homepage features, since 7NOW uses one parameter for two id spaces. An invalid or empty category_id returns a normal 200 with an empty subcategories array, not an error.", - "operationId": "7now-category", + "description": "Returns one Brisbane Times article's metadata and the exact body paragraphs served by one anonymous page request, with the publisher's is_accessible_for_free, paywalled, and is_truncated flags. No paywall is bypassed or hidden content fetched.", + "operationId": "brisbanetimes-article", "parameters": [ { - "description": "7NOW store id, from GET /7now/stores.", - "in": "query", - "name": "store_id", - "required": true, - "type": "string", - "x-example": "39226" - }, - { - "description": "Category id, from GET /7now/categories -- either a department or a merchandising shelf.", + "description": "Canonical Brisbane Times article URL", "in": "query", - "name": "category_id", + "name": "url", "required": true, "type": "string", - "x-example": "48423" - }, - { - "description": "Restrict to one subcategory group by exact name (from a prior call's subcategories[].name).", - "in": "query", - "name": "subcategory", - "type": "string", - "x-example": "Pizza" - }, - { - "description": "Pagination offset, applied uniformly to every subcategory group. Defaults to 0.", - "in": "query", - "name": "skip", - "type": "integer", - "x-example": 0 - }, - { - "description": "Max items returned per subcategory group, 1-50. Defaults to 20.", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "x-example": "https://www.brisbanetimes.com.au/national/queensland/hospital-denies-gas-leak-forced-evacuation-surgery-delays-20260930-p611l9.html" } ], "produces": [ @@ -272446,7 +342476,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.categoryResponseDoc" + "$ref": "#/definitions/publicnews.brisbanetimesArticleResponseDoc" } }, "400": { @@ -272455,8 +342485,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -272473,35 +342503,24 @@ "ApiKeyAuth": [] } ], - "summary": "Browse one 7NOW store's category by subcategory", + "summary": "Get Brisbane Times article content", "tags": [ - "7NOW" + "Brisbane Times" ] } }, - "/7now/combo": { + "/brisbanetimes/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Expands one bundle deal into its structure: each pick-from group's name, how many items the shopper picks from it, and every eligible item with live pricing and availability -- e.g. the \"$6.99 Pizza\" bundle returns one group, \"Eligible Whole Pizzas\", holding six priced pizzas. Also returns the bundle's shopper-facing headline and full legal terms. promo_id comes from GET /7now/combos' combos[].promo_id, and store_id from GET /7now/stores. The upstream also accepts a plain item-discount promotion id but answers one with unnamed groups -- for those, GET /7now/promotion's flat item list is the right endpoint. An unknown promo_id returns 404.", - "operationId": "7now-combo", + "description": "Returns a Brisbane Times journalist profile from `url`, a canonical `https://www.brisbanetimes.com.au/by/-` address: name, biography, headshot, email, social links and recent story cards with title, URL, summary and image. Fields appear only when the profile shows them; the sampled profile returned 10 stories.", + "operationId": "brisbanetimes-author", "parameters": [ { - "description": "Promotion id, from GET /7now/combos' combos[].promo_id.", - "in": "query", - "name": "promo_id", - "required": true, - "type": "string", - "x-example": "6a849a8fa1df2409010c719f" - }, - { - "description": "7NOW store id, from GET /7now/stores.", + "description": "Canonical Brisbane Times journalist URL", "in": "query", - "name": "store_id", + "name": "url", "required": true, "type": "string", - "x-example": "39640" + "x-example": "https://www.brisbanetimes.com.au/by/william-davis-p537k8" } ], "produces": [ @@ -272511,7 +342530,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.comboResponseDoc" + "$ref": "#/definitions/publicnews.brisbanetimesAuthorResponseDoc" } }, "400": { @@ -272526,12 +342545,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -272544,41 +342557,130 @@ "ApiKeyAuth": [] } ], - "summary": "Get one 7NOW bundle deal's pick-from groups", + "summary": "Get a Brisbane Times journalist profile", "tags": [ - "7NOW" + "Brisbane Times" ] } }, - "/7now/combos": { + "/brisbanetimes/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists every bundle deal a store offers -- 7NOW's combo-builder products, where a fixed price buys one item from each of several groups (e.g. \"$6.99 Pizza\", \"Bone In Wing Combo\"). GET /7now/search surfaces a combo only when a query happens to match one, so this is the only way to enumerate a store's bundles. Each entry carries the promotion id behind it: pass it to GET /7now/combo for the actual pick-from groups, or to GET /7now/promotion for a flat list of every eligible item. store_id comes from GET /7now/stores; lat and lon are accepted but inert (store_id alone selects the store).", - "operationId": "7now-combos", + "description": "Returns current story cards from one observed Brisbane Times server-rendered section or populated topic page. `section` must be one of the exact slugs from `/brisbanetimes/sections`; unsupported and unresolved linkless paths are rejected before an upstream request. Off-brand story links on Traveller are omitted.", + "operationId": "brisbanetimes-headlines", "parameters": [ { - "description": "7NOW store id, from GET /7now/stores.", + "description": "Section or topic slug from /brisbanetimes/sections", + "enum": [ + "national/queensland", + "politics", + "business", + "world", + "goodfood", + "lifestyle", + "traveller", + "sport", + "brisbane-news", + "politics/federal", + "politics/queensland", + "politics/nsw", + "politics/victoria", + "politics/western-australia", + "business/companies", + "business/markets", + "business/bullsnbears", + "business/the-economy", + "business/banking-and-finance", + "business/small-business", + "business/workplace", + "world/north-america", + "world/europe", + "world/asia", + "world/middle-east", + "world/south-america", + "world/africa", + "national", + "national/nsw", + "national/victoria", + "national/western-australia", + "opinion", + "property", + "property/news", + "property/living", + "sport/nrl", + "sport/rugby-union", + "sport/afl", + "sport/cricket", + "sport/soccer", + "sport/racing", + "sport/tennis", + "sport/netball", + "sport/basketball", + "sport/motorsport", + "sport/golf", + "sport/nfl", + "sport/athletics", + "sport/swimming", + "sport/boxing", + "goodfood/recipes", + "goodfood/tips-and-advice", + "goodfood/brisbane-eating-out", + "goodfood/drinks", + "culture", + "culture/movies", + "culture/tv-and-radio", + "culture/music", + "culture/celebrity", + "culture/books", + "culture/comedy", + "culture/dance", + "culture/musicals", + "culture/opera", + "culture/theatre", + "culture/art-and-design", + "culture/live-reviews", + "lifestyle/health-and-wellness", + "lifestyle/fashion", + "lifestyle/life-and-relationships", + "lifestyle/beauty", + "traveller/inspiration/destination-guides", + "traveller/inspiration", + "traveller/reviews-and-advice", + "traveller/travel-news", + "good-weekend", + "sunday-life", + "money", + "money/super-and-retirement", + "money/investing", + "money/banking", + "money/borrowing", + "money/saving", + "money/tax", + "money/planning-and-budgeting", + "education", + "healthcare", + "environment", + "environment/conservation", + "environment/climate-change", + "environment/sustainability", + "environment/weather", + "technology", + "technology/video-games", + "australia-higher-education", + "topic/media-and-marketing-5z7", + "topic/auctions-1nq1", + "topic/financing-1nq2", + "topic/style-luxury-1nij", + "topic/horoscopes-5yc", + "topic/home-technology-hqq", + "topic/phones-5zt", + "topic/gadgets-hqp", + "topic/explainers-1lz9" + ], "in": "query", - "name": "store_id", + "name": "section", "required": true, "type": "string", - "x-example": "39640" - }, - { - "description": "Accepted but inert -- store_id alone selects the store; responses are byte-identical with any value or none. Forwarded upstream for fidelity with 7now.com's own client.", - "in": "query", - "name": "lat", - "type": "number", - "x-example": 40.712775 - }, - { - "description": "Accepted but inert -- see lat.", - "in": "query", - "name": "lon", - "type": "number", - "x-example": -74.005973 + "x-example": "brisbane-news" } ], "produces": [ @@ -272588,7 +342690,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.combosResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -272597,6 +342699,38 @@ "$ref": "#/definitions/app.Response" } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Brisbane Times section or topic headlines", + "tags": [ + "Brisbane Times" + ] + } + }, + "/brisbanetimes/news": { + "get": { + "description": "Returns Brisbane Times's current public Latest News RSS feed: story title, canonical URL, summary, author, publication time, and lead image.", + "operationId": "brisbanetimes-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -272615,55 +342749,59 @@ "ApiKeyAuth": [] } ], - "summary": "List a 7NOW store's bundle deals", + "summary": "Get Brisbane Times top stories", "tags": [ - "7NOW" + "Brisbane Times" ] } }, - "/7now/deals": { + "/brisbanetimes/sections": { + "get": { + "description": "Lists the 104 accepted Brisbane Times editorial surfaces (95 article-bearing section pages and nine populated topic hubs), each with its exact path slug, menu label, and requested Brisbane Times URL. Three linkless surfaces with no explicit empty-state marker are excluded.", + "operationId": "brisbanetimes-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Brisbane Times editorial sections", + "tags": [ + "Brisbane Times" + ] + } + }, + "/brooklinen/collections": { "get": { "consumes": [ "application/json" ], - "description": "Returns every currently discounted item in a store, paginated, each with the promotion driving the discount -- its id, shopper-facing description (\"2 for $4\", \"On Sale $7\"), promotional price where the offer has a single-unit one, and run dates. A busy store carries several hundred; the response also reports a store-wide availability summary across all of them before paging. This is the store-wide offers listing: the per-category browse endpoints surface promotions only for the items they happen to return, and pulling them all otherwise means walking the entire catalog. Pass a promos[].id to GET /7now/promotion to see every item that same promotion covers. store_id comes from GET /7now/stores; lat and lon are accepted but inert (store_id alone selects the store).", - "operationId": "7now-deals", + "description": "Returns collections from Brooklinen (https://www.brooklinen.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", + "operationId": "brooklinen-collections", "parameters": [ { - "description": "7NOW store id, from GET /7now/stores.", - "in": "query", - "name": "store_id", - "required": true, - "type": "string", - "x-example": "39640" - }, - { - "description": "Accepted but inert -- store_id alone selects the store; responses are byte-identical with any value or none. Forwarded upstream for fidelity with 7now.com's own client.", - "in": "query", - "name": "lat", - "type": "number", - "x-example": 40.712775 - }, - { - "description": "Accepted but inert -- see lat.", - "in": "query", - "name": "lon", - "type": "number", - "x-example": -74.005973 - }, - { - "description": "Pagination offset. Defaults to 0.", + "description": "1-based page, defaults to 1", "in": "query", - "name": "skip", + "name": "page", "type": "integer", - "x-example": 0 + "x-example": 1 }, { - "description": "Max items returned, 1-100. Defaults to 20.", + "description": "Maximum collections, defaults to 50 and supports up to 250", "in": "query", "name": "limit", "type": "integer", - "x-example": 20 + "x-example": 50 } ], "produces": [ @@ -272673,7 +342811,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.dealsResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" } }, "400": { @@ -272700,41 +342838,41 @@ "ApiKeyAuth": [] } ], - "summary": "List every discounted item in one 7NOW store", + "summary": "List Brooklinen collections", "tags": [ - "7NOW" + "Brooklinen" ] } }, - "/7now/offers": { + "/brooklinen/collections/{handle}/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns every promotional campaign a store currently advertises -- the headline, body copy, legal terms and artwork behind offers like \"$6.99 Pizza\" or \"2/$5 Gatorade 28oz\". This is campaign-level and complements the item-level views: GET /7now/deals answers \"which items are discounted and why\", while this answers \"what is this store advertising, and on what terms\". The full legal terms are available nowhere else. Each campaign points somewhere: promo_ids[] feed GET /7now/promotion (or GET /7now/combo when the campaign advertises a bundle), while a category campaign instead carries target_id, a category_id GET /7now/category accepts. store_id comes from GET /7now/stores; lat and lon are accepted but inert (store_id alone selects the store).", - "operationId": "7now-offers", + "description": "Returns products from one Brooklinen (https://www.brooklinen.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", + "operationId": "brooklinen-collection-products", "parameters": [ { - "description": "7NOW store id, from GET /7now/stores.", - "in": "query", - "name": "store_id", + "description": "Collection handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "39640" + "x-example": "collection-handle" }, { - "description": "Accepted but inert -- store_id alone selects the store; responses are byte-identical with any value or none. Forwarded upstream for fidelity with 7now.com's own client.", + "description": "1-based page, defaults to 1", "in": "query", - "name": "lat", - "type": "number", - "x-example": 40.712775 + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Accepted but inert -- see lat.", + "description": "Maximum products, defaults to 50 and supports up to 250", "in": "query", - "name": "lon", - "type": "number", - "x-example": -74.005973 + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -272744,7 +342882,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.offersResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" } }, "400": { @@ -272753,6 +342891,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -272771,38 +342915,33 @@ "ApiKeyAuth": [] } ], - "summary": "List a 7NOW store's advertised promotional campaigns", + "summary": "List Brooklinen collection products", "tags": [ - "7NOW" + "Brooklinen" ] } }, - "/7now/popular": { + "/brooklinen/pages": { "get": { "consumes": [ "application/json" ], - "description": "Returns the trending search terms 7NOW shows in its own search box. Two axes select the index and both matter. vertical picks the catalogue: `convenience` and `restaurant` return different terms for the same store, and `global` is the genuinely national cross-vertical list. store_id (from GET /7now/stores) then narrows to that store's region within the vertical -- a New York store returns index NY_NE, a Florida store SE, and omitting it returns the vertical-wide list. The restaurant vertical is the exception: it ignores store_id entirely, returning identical terms for every store. The response echoes back both the vertical and the regional index the terms came from.", - "operationId": "7now-popular", + "description": "Lists Brooklinen static pages, `limit` per page (default 50, max 250) and `page` starting at 1. Each page has its handle, title, URL, plain-text content and timestamps. When `transport_mode` is `ssr_embedded`, items carry only `handle`, `url` and `updated_at`; request each handle singly for content.", + "operationId": "brooklinen-pages", "parameters": [ { - "description": "7NOW store id, from GET /7now/stores. Selects that store's regional index within the chosen vertical; omit for the vertical-wide list. Ignored by the restaurant vertical.", + "description": "1-based page, defaults to 1", "in": "query", - "name": "store_id", - "type": "string", - "x-example": "39226" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Which trending index to read. One of: convenience, restaurant, global. Defaults to convenience.", - "enum": [ - "convenience", - "restaurant", - "global" - ], + "description": "Maximum static pages, defaults to 50 and supports up to 250", "in": "query", - "name": "vertical", - "type": "string", - "x-example": "convenience" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -272812,7 +342951,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.popularResponseDoc" + "$ref": "#/definitions/shopifybrands.pagesResponseDoc" } }, "400": { @@ -272839,27 +342978,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get 7NOW trending search terms", + "summary": "List Brooklinen static pages", "tags": [ - "7NOW" + "Brooklinen" ] } }, - "/7now/product": { + "/brooklinen/pages/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one product's complete reference record: description, the full nutrition panel (serving size, calories, fat, cholesterol, sodium, carbohydrates, protein, vitamins and allergen \"contains\" list), the declared ingredient list, the allergen statement, size and flavor variants, related products, and any attached promotions. product_id comes from GET /7now/search, /7now/catalog or /7now/category. This record is store-independent and deliberately carries no price, availability or stock -- use those three endpoints for per-store pricing and availability. An unknown product_id returns a 404.", - "operationId": "7now-product", + "description": "Returns one Brooklinen static page by its `handle`: id, title, URL, plain-text content, and created, published and updated times. A missing handle returns 404. When `transport_mode` is `ssr_embedded`, the content is plain text from the page's rich-text blocks and `id` is omitted.", + "operationId": "brooklinen-page", "parameters": [ { - "description": "7NOW product id, from GET /7now/search, /7now/catalog or /7now/category.", - "in": "query", - "name": "product_id", + "description": "Page handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "178322-2-6-2" + "x-example": "page-handle" } ], "produces": [ @@ -272869,7 +343008,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.productResponseDoc" + "$ref": "#/definitions/shopifybrands.pageResponseDoc" } }, "400": { @@ -272902,49 +343041,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get one 7NOW product's full reference record", + "summary": "Get a Brooklinen static page", "tags": [ - "7NOW" + "Brooklinen" ] } }, - "/7now/promotion": { + "/brooklinen/products": { "get": { "consumes": [ "application/json" ], - "description": "Expands one promotion into every item it applies to in a store, plus the promotion's own offer type, terms, and run dates. GET /7now/deals reads discount-to-item (here is a discounted product, here is why); this reads it the other way round (here is an offer, here is everything it covers) -- e.g. a \"2 for $4\" tea promotion expands to all five flavours in it. promo_id comes from GET /7now/deals' items[].promos[].id, and store_id from GET /7now/stores. An unknown promo_id returns 404.", - "operationId": "7now-promotion", + "description": "Returns products from Brooklinen's (https://www.brooklinen.com) product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", + "operationId": "brooklinen-products", "parameters": [ { - "description": "Promotion id, from GET /7now/deals' items[].promos[].id.", - "in": "query", - "name": "promo_id", - "required": true, - "type": "string", - "x-example": "6a9746d488cc35e1bbff1584" - }, - { - "description": "7NOW store id, from GET /7now/stores.", - "in": "query", - "name": "store_id", - "required": true, - "type": "string", - "x-example": "39640" - }, - { - "description": "Pagination offset. Defaults to 0.", + "description": "1-based page, defaults to 1", "in": "query", - "name": "skip", + "name": "page", "type": "integer", - "x-example": 0 + "x-example": 1 }, { - "description": "Max items returned, 1-100. Defaults to 20.", + "description": "Maximum products, defaults to 50 and supports up to 250", "in": "query", "name": "limit", "type": "integer", - "x-example": 20 + "x-example": 50 } ], "produces": [ @@ -272954,7 +343077,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.promotionResponseDoc" + "$ref": "#/definitions/shopifybrands.productsResponseDoc" } }, "400": { @@ -272963,12 +343086,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -272987,49 +343104,27 @@ "ApiKeyAuth": [] } ], - "summary": "List every item one 7NOW promotion covers", + "summary": "List Brooklinen products", "tags": [ - "7NOW" + "Brooklinen" ] } }, - "/7now/search": { + "/brooklinen/products/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one 7NOW store's keyword search results: matching products and combo deals with current pricing (list price, everyday sale price, and any further active promotion), live availability, and a sponsored-brand facet list relevant to the query. store_id comes from GET /7now/stores. A query matching nothing returns a normal 200 with an empty items array, not an error.", - "operationId": "7now-search", + "description": "Returns product detail for one Brooklinen (https://www.brooklinen.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", + "operationId": "brooklinen-product", "parameters": [ { - "description": "7NOW store id, from GET /7now/stores.", - "in": "query", - "name": "store_id", - "required": true, - "type": "string", - "x-example": "39226" - }, - { - "description": "Keyword search term.", - "in": "query", - "name": "q", + "description": "Product handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "pizza" - }, - { - "description": "Pagination offset. Defaults to 0.", - "in": "query", - "name": "skip", - "type": "integer", - "x-example": 0 - }, - { - "description": "Max results returned, 1-50. Defaults to 20.", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "x-example": "product-handle" } ], "produces": [ @@ -273039,7 +343134,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.searchResponseDoc" + "$ref": "#/definitions/shopifybrands.productResponseDoc" } }, "400": { @@ -273048,6 +343143,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -273066,27 +343167,45 @@ "ApiKeyAuth": [] } ], - "summary": "Search one 7NOW store's products", + "summary": "Get a Brooklinen product", "tags": [ - "7NOW" + "Brooklinen" ] } }, - "/7now/stores": { + "/brooklinen/products/{handle}/recommendations": { "get": { "consumes": [ "application/json" ], - "description": "Resolves a free-text delivery address, street, city and state, or postal code to the nearest 7NOW-enabled 7-Eleven stores, nearest first. Each store carries its store_id, address, coordinates, straight-line distance in miles from the resolved address, the banner it trades under, its Nielsen DMA, and its per-day alcohol sale windows -- upstream's own encoding of the local law, which is why a day can hold more than one window (a New York store's Sunday runs 0000-0200 and 0800-2359). An empty alcohol_sale_hours means upstream publishes no windows for that store, which is not the same as it selling no alcohol. The response also carries the Uber H3 cell for the resolved address. Use store_id with GET /7now/catalog, /7now/categories, /7now/deals, /7now/offers or /7now/combos to browse that store. An address that cannot be geocoded, or one with no nearby 7NOW coverage, returns a 404.", - "operationId": "7now-stores", + "description": "Returns recommended products for one Brooklinen (https://www.brooklinen.com) product handle. The storefront URL is fixed server-side.", + "operationId": "brooklinen-product-recommendations", "parameters": [ { - "description": "Free-text delivery address, street, city and state, or postal code.", - "in": "query", - "name": "address", + "description": "Product handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "350 5th Ave, New York, NY" + "x-example": "product-handle" + }, + { + "description": "Maximum products, defaults to 10 and supports up to 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + }, + { + "description": "Recommendation intent. Allowed values: related, complementary", + "enum": [ + "related", + "complementary" + ], + "in": "query", + "name": "intent", + "type": "string", + "x-example": "related" } ], "produces": [ @@ -273096,7 +343215,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.storesResponseDoc" + "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" } }, "400": { @@ -273129,39 +343248,41 @@ "ApiKeyAuth": [] } ], - "summary": "Find 7NOW delivery stores near an address", + "summary": "List Brooklinen product recommendations", "tags": [ - "7NOW" + "Brooklinen" ] } }, - "/7now/suggest": { + "/brooklinen/search/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns search-term completions for a partial query, e.g. \"chi\" -> \"chips ahoy\", \"chips\", \"chicken\". No store is required. q must be at least 3 characters -- shorter values return a typed invalid-param error, matching upstream's own enforced minimum. vertical selects which search index to complete against, and the indexes are materially different rather than variations on one list: for \"chi\", `convenience` answers \"chips ahoy, chips, chicken wings\" while `restaurant` answers \"chipotle, chinese food, chili\". `global` is a sparse cross-vertical index -- many prefixes legitimately return no suggestions there.", - "operationId": "7now-suggest", + "description": "Returns products, collections, and query suggestions from Brooklinen's (https://www.brooklinen.com) predictive search. The storefront URL is fixed server-side.", + "operationId": "brooklinen-search-suggest", "parameters": [ { - "description": "Partial search term, at least 3 characters.", + "description": "Search query", "in": "query", "name": "q", "required": true, "type": "string", - "x-example": "chi" + "x-example": "wool" }, { - "description": "Which search index to complete against. One of: convenience, restaurant, global. Defaults to convenience.", - "enum": [ - "convenience", - "restaurant", - "global" - ], + "description": "Comma-separated suggestion types. Allowed values: product, collection, query", "in": "query", - "name": "vertical", + "name": "types", "type": "string", - "x-example": "convenience" + "x-example": "product,collection,query" + }, + { + "description": "Maximum results per type, defaults to 10 and supports up to 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -273171,7 +343292,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sevennow.suggestResponseDoc" + "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" } }, "400": { @@ -273198,24 +343319,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get 7NOW search-term suggestions", + "summary": "Get Brooklinen search suggestions", "tags": [ - "7NOW" + "Brooklinen" ] } }, - "/abcau/article": { + "/brooklinen/sitemap/urls": { "get": { - "description": "Returns an ABC News Australia article by `url`, a canonical `abc.net.au` address in the form `/news///`: title, description, publication time, section, authors, image and the body `paragraphs`. Rolling live-blog posts, whose slug ends `-live-blog`, return an error instead of partial content.", - "operationId": "abcau-article", + "consumes": [ + "application/json" + ], + "description": "Lists URL entries from Brooklinen's sitemaps, filtered by `type` (`all` by default, or `products`, `collections`, `pages`, `blogs`, `agentic_discovery`, `other`) and capped by `limit` (default 50, max 250). Each entry has its `loc`, type, handle, `lastmod`, `changefreq` and, where present, images with caption and title.", + "operationId": "brooklinen-sitemap-urls", "parameters": [ { - "description": "Canonical ABC News Australia article URL", + "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", + "enum": [ + "all", + "products", + "collections", + "pages", + "blogs", + "agentic_discovery", + "other" + ], "in": "query", - "name": "url", - "required": true, + "name": "type", "type": "string", - "x-example": "https://www.abc.net.au/news/2026-09-24/example-article-slug/107189792" + "x-example": "products" + }, + { + "description": "Maximum URL entries, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -273225,7 +343364,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" } }, "400": { @@ -273234,8 +343373,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -273252,26 +343391,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get ABC News Australia article content", + "summary": "List Brooklinen sitemap URLs", "tags": [ - "ABC News Australia" + "Brooklinen" ] } }, - "/abcau/author": { + "/brooklinen/sitemaps": { "get": { - "description": "Returns an ABC News Australia author profile from `url`, a canonical `https://www.abc.net.au/news//` address: name, `biography`, `image_url` and recent articles. Not every author has a headshot or biography, and wire or staff bylines often have neither.", - "operationId": "abcau-author", - "parameters": [ - { - "description": "Canonical ABC News Australia author URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.abc.net.au/news/jane-doe/12345" - } + "consumes": [ + "application/json" ], + "description": "Lists the child sitemaps that Brooklinen publishes, with no parameters. Each entry has its `loc` URL and a `type` of `products`, `collections`, `pages`, `blogs`, `agentic_discovery` or `other`, which tells you which sitemap to pass to the sitemap URL endpoint.", + "operationId": "brooklinen-sitemaps", "produces": [ "application/json" ], @@ -273279,7 +343411,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.abcauAuthorResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" } }, "400": { @@ -273288,8 +343420,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -273306,43 +343438,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get an ABC News Australia author profile", + "summary": "List Brooklinen sitemaps", "tags": [ - "ABC News Australia" + "Brooklinen" ] } }, - "/abcau/headlines": { + "/brooklinen/store": { "get": { - "description": "Returns current headlines for one ABC News Australia section. `section` is required and takes one of 15 slugs, including `justin`, `politics`, `rural`, `analysis-and-opinion` and `australia`. Each item has a title and URL, and may also carry a summary, author, publication time and image.", - "operationId": "abcau-headlines", - "parameters": [ - { - "description": "ABC News Australia section slug", - "enum": [ - "justin", - "world", - "politics", - "business", - "sport", - "health", - "entertainment", - "science", - "rural", - "analysis-and-opinion", - "indigenous", - "environment", - "backstory", - "lifestyle", - "australia" - ], - "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "justin" - } + "consumes": [ + "application/json" ], + "description": "Returns storefront metadata for Brooklinen (https://www.brooklinen.com). The storefront URL is fixed server-side, so no `url` parameter is accepted.", + "operationId": "brooklinen-store", "produces": [ "application/json" ], @@ -273350,7 +343458,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/shopifybrands.storeResponseDoc" } }, "400": { @@ -273359,6 +343467,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -273371,16 +343485,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get ABC News Australia section headlines", + "summary": "Get Brooklinen store metadata", "tags": [ - "ABC News Australia" + "Brooklinen" ] } }, - "/abcau/news": { + "/burberry/categories": { "get": { - "description": "Returns the current ABC News Australia top stories, with no input needed. Each item has a title and canonical URL, and may also carry a summary, author, publication time and image.", - "operationId": "abcau-news", + "consumes": [ + "application/json" + ], + "description": "Lists every department, section, and leaf category from Burberry's own site navigation, flattened with a breadcrumb-style path. Each entry's url is exactly what burberry-category's own category parameter accepts. Filter to one top-level department with department (e.g. Women, Men, Children, Gifts, Trench, Scarves, Bags, Beauty & Fragrances, Sale); omit for every department. See the response's own departments field for the live list.", + "operationId": "burberry-categories", + "parameters": [ + { + "description": "Top-level department to filter to, e.g. Women, Men, Children -- omit for every department", + "in": "query", + "name": "department", + "type": "string", + "x-example": "Women" + } + ], "produces": [ "application/json" ], @@ -273388,7 +343514,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/burberry.categoriesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -273409,16 +343541,58 @@ "ApiKeyAuth": [] } ], - "summary": "Get ABC News Australia top stories", + "summary": "List Burberry categories", "tags": [ - "ABC News Australia" + "Burberry" ] } }, - "/abcau/sections": { + "/burberry/category": { "get": { - "description": "Lists the 15 ABC News Australia section slugs accepted by `abcau-headlines`, from `justin` and `world` to `backstory` and `australia`. Each entry has a `slug`, a display `name` (for example `Just In`) and the section's page `url`.", - "operationId": "abcau-sections", + "consumes": [ + "application/json" + ], + "description": "Returns one page (20 products) of a Burberry category/browse listing. category is the site-relative category path, e.g. /l/womens-clothing/new-arrivals/ -- use burberry-categories to discover every valid value instead of guessing from site URLs. offset paginates in increments of 20 (the upstream's own fixed page size). sort selects the result order. The response includes the upstream's own available filters (facets) with live per-option result counts; feed a selection back in via facets, a comma-separated list of property:value pairs taken from this same response's facets field (e.g. benefit:bags,dotcomreportingcolour:black -- see a live response for the values valid for that category). At most one value per facet property; an unmatched or invalid combination returns a well-formed empty result, not an error.", + "operationId": "burberry-category", + "parameters": [ + { + "description": "Site-relative category path -- see burberry-categories", + "in": "query", + "name": "category", + "required": true, + "type": "string", + "x-example": "/l/womens-clothing/new-arrivals/" + }, + { + "default": 0, + "description": "Zero-based result offset, in increments of 20", + "in": "query", + "maximum": 100000, + "minimum": 0, + "name": "offset", + "type": "integer" + }, + { + "default": "default", + "description": "Sort order", + "enum": [ + "default", + "price_asc", + "price_desc", + "newest" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Comma-separated property:value facet filters, taken from this same response's own facets field, e.g. benefit:bags,dotcomreportingcolour:black -- at most one value per property", + "in": "query", + "name": "facets", + "type": "string", + "x-example": "benefit:bags" + } + ], "produces": [ "application/json" ], @@ -273426,7 +343600,31 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/burberry.categoryResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -273435,24 +343633,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get ABC News Australia sections", + "summary": "Browse a Burberry category", "tags": [ - "ABC News Australia" + "Burberry" ] } }, - "/abcnews/article": { + "/burberry/product": { "get": { - "description": "Returns public ABC News article metadata and body paragraphs from a canonical article URL. Accepts both the \"story?id=...\" and \"wireStory/...\" canonical URL shapes.", - "operationId": "abcnews-article", + "consumes": [ + "application/json" + ], + "description": "Returns product detail for one Burberry product page: name, sku, colour, material, description, price, stock status, every product image, and every other purchasable colourway of the same style. url is the site-relative product path, e.g. /check-cashmere-cardigan-p81336111, as returned by burberry-search's or burberry-category's own products[].url field.", + "operationId": "burberry-product", "parameters": [ { - "description": "Canonical ABC News article URL", + "description": "Site-relative product path, from a search or category result's url field", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://abcnews.com/Politics/example-story/story?id=123456789" + "x-example": "/check-cashmere-cardigan-p81336111" } ], "produces": [ @@ -273462,7 +343663,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/burberry.productResponseDoc" } }, "400": { @@ -273477,6 +343678,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -273489,24 +343696,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get ABC News article content", + "summary": "Get a Burberry product", "tags": [ - "ABC News" + "Burberry" ] } }, - "/abcnews/author": { + "/burberry/related": { "get": { - "description": "Returns an ABC News author's profile: name, job title/biography when the page carries one, and social links, from a canonical author URL. Does not include a list of the author's recent articles.", - "operationId": "abcnews-author", + "consumes": [ + "application/json" + ], + "description": "Returns the cross-sell surfaces a real Burberry product page itself loads for that product: similar_products (algorithmically similar items) and shop_the_look (other pieces in the same styled outfit, when the upstream has curated one -- most products have none, returned as a well-formed empty list, not an error). url is the site-relative product path, e.g. /check-cashmere-cardigan-p81336111, as returned by burberry-search's, burberry-category's, or burberry-product's own url field.", + "operationId": "burberry-related", "parameters": [ { - "description": "Canonical ABC News author URL", + "description": "Site-relative product path, from a search, category, or product result's url field", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://abcnews.com/author/benjamin_siegel" + "x-example": "/check-cashmere-cardigan-p81336111" } ], "produces": [ @@ -273516,7 +343726,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.abcNewsAuthorResponseDoc" + "$ref": "#/definitions/burberry.relatedResponseDoc" } }, "400": { @@ -273525,8 +343735,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -273543,34 +343753,56 @@ "ApiKeyAuth": [] } ], - "summary": "Get an ABC News author profile", + "summary": "Get related Burberry products", "tags": [ - "ABC News" + "Burberry" ] } }, - "/abcnews/headlines": { + "/burberry/search": { "get": { - "description": "Returns the current headlines for one ABC News section. `section` is required and must be `us`, `world`, `politics`, `business`, `technology`, `entertainment`, `health` or `sports`. Each item has a title and URL, and may also carry a summary, author, publication time and image.", - "operationId": "abcnews-headlines", + "consumes": [ + "application/json" + ], + "description": "Searches Burberry's product catalog by keyword. Returns product summaries plus the upstream's own available filters (facets) with live per-option result counts. offset paginates in increments of 20 (the upstream's own fixed page size). sort selects the result order. facets applies a facet selection back, a comma-separated list of property:value pairs taken from this same response's facets field (e.g. benefit:bags,dotcomreportingcolour:black). A query with no matches, or a facet combination with no matches, returns a well-formed empty result, not an error. Unlike burberry-category, this response has no true grand-total result count -- only the current page's own count.", + "operationId": "burberry-search", "parameters": [ { - "description": "ABC News section slug", + "description": "Search keyword", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "trench" + }, + { + "default": 0, + "description": "Zero-based result offset, in increments of 20", + "in": "query", + "maximum": 100000, + "minimum": 0, + "name": "offset", + "type": "integer" + }, + { + "default": "default", + "description": "Sort order", "enum": [ - "us", - "world", - "politics", - "business", - "technology", - "entertainment", - "health", - "sports" + "default", + "price_asc", + "price_desc", + "newest" ], "in": "query", - "name": "section", - "required": true, + "name": "sort", + "type": "string" + }, + { + "description": "Comma-separated property:value facet filters, taken from this same response's own facets field, e.g. benefit:bags,dotcomreportingcolour:black -- at most one value per property", + "in": "query", + "name": "facets", "type": "string", - "x-example": "us" + "x-example": "benefit:bags" } ], "produces": [ @@ -273580,7 +343812,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/burberry.searchResponseDoc" } }, "400": { @@ -273589,6 +343821,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -273601,16 +343839,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get ABC News section headlines", + "summary": "Search Burberry products", "tags": [ - "ABC News" + "Burberry" ] } }, - "/abcnews/news": { + "/burberry/suggest": { "get": { - "description": "Returns the current ABC News top stories, with no input needed. Each item has a title and canonical URL, and may also carry a summary, author, publication time and image.", - "operationId": "abcnews-news", + "consumes": [ + "application/json" + ], + "description": "Returns Burberry's own search-box suggestions (typeahead) for a partial query: a flat list of suggested search phrases, each with its own live result count on the search index. Not product data.", + "operationId": "burberry-suggest", + "parameters": [ + { + "description": "Partial search query", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "trench" + } + ], "produces": [ "application/json" ], @@ -273618,7 +343869,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/burberry.suggestResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -273639,16 +343896,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get ABC News top stories", + "summary": "Get Burberry search-box suggestions", "tags": [ - "ABC News" + "Burberry" ] } }, - "/abcnews/sections": { + "/burgerking/availability": { "get": { - "description": "Lists the 8 core ABC News sections that `abcnews-headlines` accepts: `us`, `world`, `politics`, `business`, `technology`, `entertainment`, `health` and `sports`. Each entry has a `slug`, a display `name` and the section's page `url`.", - "operationId": "abcnews-sections", + "consumes": [ + "application/json" + ], + "description": "Returns one restaurant's live open/closed status per order channel (curbside, delivery, drive-thru, eat-in, mobile-order drive-thru, takeout), distinct from /burgerking/locations' published weekly schedule. Each channel carries whether it is taking orders right now, its current open window when open, and the following window's start/end -- a channel with no current or next window at all means this restaurant does not offer it, not merely that it is closed. Also returns the restaurant's own local time, timezone and an overall available flag. Setting forecast=true additionally returns a multi-day forward schedule per channel, including two catering-only channels not present in the current-status list.", + "operationId": "burgerking-availability", + "parameters": [ + { + "description": "Burger King's numeric store id, from /burgerking/locations", + "in": "query", + "name": "store_id", + "required": true, + "type": "string", + "x-example": "17871" + }, + { + "description": "RBI market the store belongs to, one of `US`, `CA` (default `US`)", + "in": "query", + "name": "market", + "type": "string", + "x-example": "US" + }, + { + "description": "Include a multi-day forward schedule per channel (default false)", + "in": "query", + "name": "forecast", + "type": "boolean", + "x-example": false + } + ], "produces": [ "application/json" ], @@ -273656,7 +343940,31 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/burgerking.availabilityResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -273665,19 +343973,72 @@ "ApiKeyAuth": [] } ], - "summary": "Get ABC News sections", + "summary": "Get one Burger King restaurant's real-time fulfillment status", "tags": [ - "ABC News" + "Burger King" ] } }, - "/accor/amenities": { + "/burgerking/locations": { "get": { "consumes": [ "application/json" ], - "description": "Returns the anonymous public Accor amenity catalog with stable amenity codes, labels, categories, and display ordering. It is reference data for interpreting hotel search facets; booking, rates, rooms, reviews, and account data are excluded.", - "operationId": "accor-amenities", + "description": "Returns Burger King restaurants near a latitude/longitude. Each restaurant carries its internal id and numeric store id (the value /burgerking/menu and /burgerking/availability take), full address with coordinates, phone, the operating franchise group, amenity flags (breakfast, delivery, drive-thru, playground, takeout, wifi, halal, dark kitchen) and the full published week of hours for dining room, drive-thru, delivery and curbside separately. A coordinate with no nearby Burger King returns an empty list rather than an error. Setting include_availability=true additionally returns each restaurant's live per-channel open/closed status in one call, the same shape /burgerking/availability returns -- note that path is capped at a fixed page (up to 20 restaurants) rather than honoring max_results beyond that. Setting delivery_only=true instead restricts results to restaurants that Burger King's own delivery service actually considers deliverable to this coordinate -- a genuine delivery-zone match, not the same set as filtering has_delivery=true. include_availability and delivery_only cannot be combined.", + "operationId": "burgerking-locations", + "parameters": [ + { + "description": "Search center latitude", + "in": "query", + "name": "latitude", + "required": true, + "type": "number", + "x-example": 40.7128 + }, + { + "description": "Search center longitude", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -74.006 + }, + { + "description": "Search radius in meters, 1-50000 (default 8000)", + "in": "query", + "name": "radius", + "type": "integer", + "x-example": 8000 + }, + { + "description": "Maximum restaurants to return, 1-50 (default 20)", + "in": "query", + "name": "max_results", + "type": "integer", + "x-example": 20 + }, + { + "description": "RBI market to search, one of `US`, `CA` (default `US`)", + "in": "query", + "name": "market", + "type": "string", + "x-example": "US" + }, + { + "description": "Include each restaurant's live per-channel open/closed status (default false)", + "in": "query", + "name": "include_availability", + "type": "boolean", + "x-example": false + }, + { + "description": "Restrict to restaurants that actually deliver to this coordinate, a genuine delivery-zone match distinct from the has_delivery flag (default false)", + "in": "query", + "name": "delivery_only", + "type": "boolean", + "x-example": false + } + ], "produces": [ "application/json" ], @@ -273685,17 +344046,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/accor.amenitiesResponseDoc" + "$ref": "#/definitions/burgerking.locationsResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -273712,19 +344079,36 @@ "ApiKeyAuth": [] } ], - "summary": "Accor amenity reference catalog", + "summary": "Find Burger King restaurants near a location", "tags": [ - "Accor" + "Burger King" ] } }, - "/accor/brands": { + "/burgerking/menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns the Accor brand directory published on the public brands page, with each brand's name, slug, and source URL. Booking, rates, rooms, reviews, contacts, and location are excluded.", - "operationId": "accor-brands", + "description": "Returns one restaurant's full menu grouped into categories (e.g. \"Breakfast Sandwiches\", \"Flame Grilled Burgers\"). Every entry is an item, a combo, or a picker (a variant-choice product such as \"choose your drink size\") and carries a delivery and pickup price -- these genuinely differ -- plus calories, detailed nutrition facts and flagged allergens when Burger King publishes them, and an image. Prices and availability reflect this specific restaurant, not a national default.", + "operationId": "burgerking-menu", + "parameters": [ + { + "description": "Burger King's numeric store id, from /burgerking/locations", + "in": "query", + "name": "store_id", + "required": true, + "type": "string", + "x-example": "17871" + }, + { + "description": "RBI market the store belongs to, one of `US`, `CA` (default `US`)", + "in": "query", + "name": "market", + "type": "string", + "x-example": "US" + } + ], "produces": [ "application/json" ], @@ -273732,17 +344116,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/accor.brandsResponseDoc" + "$ref": "#/definitions/burgerking.menuResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -273759,71 +344149,42 @@ "ApiKeyAuth": [] } ], - "summary": "Accor brand directory", + "summary": "Get one Burger King restaurant's full priced menu", "tags": [ - "Accor" + "Burger King" ] } }, - "/accor/catalog/hotels": { + "/burgerking/product": { "get": { "consumes": [ "application/json" ], - "description": "Searches Accor's anonymous public hotel catalog by text, hotel code, or latitude/longitude radius. Results contain static property identity and broad location metadata plus catalog relevance/distance; contact details, precise hotel coordinates, payment, loyalty, media, rates, rooms, reviews, and booking data are excluded.", - "operationId": "accor-catalog-hotels", + "description": "Returns one menu entry's full detail (name, description, price, image, nutrition, allergens) plus its customization tree, when it has one -- a combo's courses and their swappable entree/side/drink choices, a picker's size/variant choices, or a customizable item's ingredient toggle groups (e.g. \"Bacon\": no/regular/extra) and their price deltas. Options recurses through the full upstream structure, so a combo's entree choice carries its own ingredient toggles too, not just the combo's own top-level courses. A plain, non-customizable item returns an empty options list.", + "operationId": "burgerking-product", "parameters": [ { - "description": "Destination or hotel text (at least two characters)", + "description": "Burger King's numeric store id, from /burgerking/locations", "in": "query", - "name": "query", + "name": "store_id", + "required": true, "type": "string", - "x-example": "London" + "x-example": "17871" }, { - "description": "Four-character Accor hotel code", + "description": "The item, combo, or picker id, from /burgerking/menu", "in": "query", - "name": "hotel_id", + "name": "item_id", + "required": true, "type": "string", - "x-example": "A7L5" - }, - { - "description": "Search-center latitude (-90 to 90)", - "in": "query", - "name": "latitude", - "type": "number", - "x-example": 51.5072 - }, - { - "description": "Search-center longitude (-180 to 180)", - "in": "query", - "name": "longitude", - "type": "number", - "x-example": -0.1276 - }, - { - "default": 10, - "description": "Search radius in kilometers (0.1 to 100; defaults to 10 for coordinate searches)", - "in": "query", - "name": "radius_km", - "type": "number", - "x-example": 10 - }, - { - "default": 0, - "description": "Zero-based result offset (0 to 300)", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "x-example": "item_26" }, { - "default": 20, - "description": "Results per request (1 to 50)", + "description": "RBI market the store belongs to, one of `US`, `CA` (default `US`)", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "name": "market", + "type": "string", + "x-example": "US" } ], "produces": [ @@ -273833,7 +344194,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/accor.catalogResponseDoc" + "$ref": "#/definitions/burgerking.productResponseDoc" } }, "400": { @@ -273842,14 +344203,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -273866,67 +344227,149 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Accor hotel catalog", + "summary": "Get one Burger King item, combo, or picker's full detail and customization tree", "tags": [ - "Accor" + "Burger King" ] } }, - "/accor/destination/hotels": { + "/businessinsider/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the static list of hotels published on one Accor destination directory page (world, continent, country, region, department, city, district, or place), optionally narrowed by a theme facet. Each hotel carries its code, name, source URL, and broad city/country. Booking, rates, rooms, reviews, contacts, and precise location are excluded.", - "operationId": "accor-destination-hotels", + "description": "Returns a Business Insider article by canonical `url`: title, description, publication and update times, section, authors, image and the body `paragraphs`. Subscriber-only or blocked content returns an error instead of partial text.", + "operationId": "businessinsider-article", "parameters": [ { - "description": "Destination level: world, continent, country, region, department, city, district, or place", - "enum": [ - "world", - "continent", - "country", - "region", - "department", - "city", - "district", - "place" - ], + "description": "Canonical Business Insider article URL", "in": "query", - "name": "destination_type", + "name": "url", "required": true, "type": "string", - "x-example": "world" + "x-example": "https://www.businessinsider.com/markets/example-2026-09-21" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Destination page slug, e.g. hotels-dusseldorf-v1158. Required for every type except world.", + "ApiKeyAuth": [] + } + ], + "summary": "Get Business Insider article content", + "tags": [ + "Business Insider" + ] + } + }, + "/businessinsider/author": { + "get": { + "description": "Returns a Business Insider author's profile, identified by `slug` (the last segment of the author's page address) or a canonical `https://www.businessinsider.com/author/` `url`; exactly one is required. The response has name, job title, bio, image, `social_accounts` and one page of recent articles with title, URL and summary. Accounts the author does not list are simply absent.", + "operationId": "businessinsider-author", + "parameters": [ + { + "description": "Author slug", "in": "query", "name": "slug", - "type": "string" + "type": "string", + "x-example": "peter-kafka" }, { - "description": "Optional theme facet: 4-stars, 5-stars, apart-hotel, breakfast, budget-friendly, business, eco-certified, family-friendly, fitness, luxury, meetings-and-events, parking, pet-friendly, pool, resorts, or spa", + "description": "Canonical businessinsider.com/author/ URL; alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.businessinsider.com/author/peter-kafka" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.businessInsiderAuthorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Business Insider author profile", + "tags": [ + "Business Insider" + ] + } + }, + "/businessinsider/headlines": { + "get": { + "description": "Returns fresh headlines for one Business Insider section. `section` is required and is one of `business`, `markets`, `technology`, `politics`, `strategy`, `finance`, `science`, `lifestyle` or `reviews`. Each item has a title and URL, and may also carry a summary, author, publication time and image.", + "operationId": "businessinsider-headlines", + "parameters": [ + { + "description": "Business Insider section slug", "enum": [ - "4-stars", - "5-stars", - "apart-hotel", - "breakfast", - "budget-friendly", "business", - "eco-certified", - "family-friendly", - "fitness", - "luxury", - "meetings-and-events", - "parking", - "pet-friendly", - "pool", - "resorts", - "spa" + "markets", + "technology", + "politics", + "strategy", + "finance", + "science", + "lifestyle", + "reviews" ], "in": "query", - "name": "theme", - "type": "string" + "name": "section", + "required": true, + "type": "string", + "x-example": "business" } ], "produces": [ @@ -273936,7 +344379,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/accor.destinationResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -273945,16 +344388,36 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } - }, - "500": { - "description": "Internal Server Error", + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Business Insider section headlines", + "tags": [ + "Business Insider" + ] + } + }, + "/businessinsider/news": { + "get": { + "description": "Returns the latest Business Insider top stories, with no input needed. Each item has a title and canonical URL, and may also carry a summary, author, publication time and image.", + "operationId": "businessinsider-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -273969,27 +344432,50 @@ "ApiKeyAuth": [] } ], - "summary": "Accor hotels in a destination", + "summary": "Get Business Insider top stories", "tags": [ - "Accor" + "Business Insider" ] } }, - "/accor/property": { + "/businessinsider/sections": { "get": { - "consumes": [ + "description": "Lists the Business Insider editorial sections accepted by `businessinsider-headlines`, such as `business`, `markets` and `technology`. Each entry has a stable `slug`, a display `name` and the section's page `url`.", + "operationId": "businessinsider-sections", + "produces": [ "application/json" ], - "description": "Returns static public metadata for one Accor hotel code, including name, brand, city/country, explicitly listed amenities, and published check-in/check-out times. Booking, rates, rooms, reviews, contacts, and precise location are excluded.", - "operationId": "accor-property", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Business Insider sections", + "tags": [ + "Business Insider" + ] + } + }, + "/businessstandard/article": { + "get": { + "description": "Returns public Business Standard article metadata and body paragraphs from a canonical article URL. A story Business Standard marks premium (subscriber-only) returns a permission error instead of a body.", + "operationId": "businessstandard-article", "parameters": [ { - "description": "Four-character Accor hotel code", + "description": "Canonical Business Standard article URL", "in": "query", - "name": "hotel_code", + "name": "url", "required": true, "type": "string", - "x-example": "A7L5" + "x-example": "https://www.business-standard.com/companies/news/example-article-slug-126092401169_1.html" } ], "produces": [ @@ -273999,7 +344485,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/accor.propertyResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -274008,14 +344494,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "403": { + "description": "Forbidden", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -274032,85 +344518,105 @@ "ApiKeyAuth": [] } ], - "summary": "Accor hotel metadata", + "summary": "Get Business Standard article content", "tags": [ - "Accor" + "Business Standard" ] } }, - "/accor/search": { + "/businessstandard/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches the public Accor hotel index by destination or hotel name, with optional country, city, brand, star, page, and page-size filters. Results contain static hotel identity, location labels, ratings, and source URLs; booking, rates, rooms, reviews, loyalty, and payment flows are excluded.", - "operationId": "accor-search", + "description": "Returns a Business Standard author's profile from `url`, a canonical `https://www.business-standard.com/author/` address: name, designation, biography, image, and Twitter, Facebook, LinkedIn and YouTube links where listed, plus about 20 recent stories. Stories carry a title, URL and optionally summary, date and a `premium` flag for subscriber-only text. An unknown author returns `404`.", + "operationId": "businessstandard-author", "parameters": [ { - "description": "Destination or hotel query (at least two characters)", + "description": "Canonical Business Standard author URL", "in": "query", - "name": "query", + "name": "url", "required": true, "type": "string", - "x-example": "London" - }, - { - "description": "Index locale", - "in": "query", - "name": "language", - "type": "string", - "x-example": "en" - }, - { - "default": 0, - "description": "Zero-based result page", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 0 - }, - { - "default": 20, - "description": "Results per page, 1-100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "x-example": "https://www.business-standard.com/author/sharleen-dsouza" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.businessstandardAuthorResponseDoc" + } }, - { - "description": "Country facet", - "in": "query", - "name": "country", - "type": "string", - "x-example": "United Kingdom" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "City facet", - "in": "query", - "name": "city", - "type": "string", - "x-example": "London" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Accor brand code facet", - "in": "query", - "name": "brand", - "type": "string", - "x-example": "NOVOTEL" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get a Business Standard author profile", + "tags": [ + "Business Standard" + ] + } + }, + "/businessstandard/headlines": { + "get": { + "description": "Returns recent headlines for one Business Standard section: up to 35 stories, or 100 for `latest-news`. `section` is required and takes one of 25 slugs such as `companies`, `markets`, `cricket` or `todays-paper`. Some stories are premium (subscriber-only), and requesting one from the article endpoint returns `403`.", + "operationId": "businessstandard-headlines", + "parameters": [ { - "description": "Exact star facet", + "description": "Business Standard section slug", "enum": [ - 1, - 2, - 3, - 4, - 5 + "latest-news", + "companies", + "economy", + "finance", + "opinion", + "markets", + "technology", + "specials", + "budget", + "elections", + "politics", + "education", + "health", + "sports", + "entertainment", + "lifestyle", + "india-news", + "industry", + "cricket", + "book", + "world-news", + "external-affairs-defence-security", + "immigration", + "blueprint-defence-magazine", + "todays-paper" ], "in": "query", - "name": "stars", - "type": "integer", - "x-example": 4 + "name": "section", + "required": true, + "type": "string", + "x-example": "latest-news" } ], "produces": [ @@ -274120,7 +344626,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/accor.searchResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -274129,14 +344635,40 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Business Standard section headlines", + "tags": [ + "Business Standard" + ] + } + }, + "/businessstandard/news": { + "get": { + "description": "Returns Business Standard top stories from its home page, with no input needed: title, canonical URL and, where present, publication time, summary, author and image. Some listed stories are premium (subscriber-only), and requesting one from the article endpoint returns `403`.", + "operationId": "businessstandard-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -274153,46 +344685,53 @@ "ApiKeyAuth": [] } ], - "summary": "Search Accor hotels", + "summary": "Get Business Standard top stories", "tags": [ - "Accor" + "Business Standard" ] } }, - "/accor/search/details": { + "/businessstandard/sections": { + "get": { + "description": "Lists the 25 Business Standard section slugs accepted by `businessstandard-headlines`, from `latest-news`, `companies` and `markets` to `cricket`, `immigration` and `todays-paper`. Each entry has a `slug`, a display `name` and the section's page `url`.", + "operationId": "businessstandard-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Business Standard sections", + "tags": [ + "Business Standard" + ] + } + }, + "/capterra/product": { "get": { "consumes": [ "application/json" ], - "description": "Resolves an anonymous Accor search suggestion identifier to its description, coordinates, viewport, radius, and address components. It uses the same public place-details source as the Accor search box; booking, rates, rooms, reviews, and account data are excluded.", - "operationId": "accor-search-details", + "description": "Returns a Capterra product profile: name, description, category, and aggregate rating.", + "operationId": "capterra-product", "parameters": [ { - "description": "Suggestion source", - "enum": [ - "google_places", - "hod_hotels" - ], - "in": "query", - "name": "source", - "required": true, - "type": "string", - "x-example": "google_places" - }, - { - "description": "Identifier returned by Accor search suggestions", + "description": "Capterra product id (the numeric id in a /p/{id}/{slug}/ URL)", "in": "query", - "name": "id", + "name": "product_id", "required": true, "type": "string", - "x-example": "ChIJdd4hrwug2EcRmSrV3Vo6llI" - }, - { - "description": "Optional locale", - "in": "query", - "name": "language", - "type": "string", - "x-example": "en" + "x-example": "135003" } ], "produces": [ @@ -274202,7 +344741,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/accor.detailsResponseDoc" + "$ref": "#/definitions/capterra.productResponseDoc" } }, "400": { @@ -274211,8 +344750,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -274235,34 +344774,34 @@ "ApiKeyAuth": [] } ], - "summary": "Accor place coordinates and viewport", + "summary": "Get a Capterra product", "tags": [ - "Accor" + "Capterra" ] } }, - "/accor/search/suggest": { + "/capterra/product/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns anonymous Accor typeahead suggestions for a partial destination or hotel query, including destination/place and hotel identifiers, types, labels, and match metadata. It uses the public search-box suggestion source only; booking, rates, rooms, reviews, and result-list requests are excluded.", - "operationId": "accor-search-suggest", + "description": "Returns a page of Capterra reviews (author, headline, rating) plus the product's aggregate rating.", + "operationId": "capterra-reviews", "parameters": [ { - "description": "Partial destination or hotel query (at least two characters)", + "description": "Capterra product id (the numeric id in a /p/{id}/{slug}/ URL)", "in": "query", - "name": "query", + "name": "product_id", "required": true, "type": "string", - "x-example": "London" + "x-example": "135003" }, { - "description": "Optional locale used by the suggestion source", + "description": "Page number (default 1)", "in": "query", - "name": "language", - "type": "string", - "x-example": "en" + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -274272,7 +344811,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/accor.suggestResponseDoc" + "$ref": "#/definitions/capterra.reviewsResponseDoc" } }, "400": { @@ -274281,8 +344820,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -274305,27 +344844,27 @@ "ApiKeyAuth": [] } ], - "summary": "Accor destination and hotel search suggestions", + "summary": "Get Capterra product reviews", "tags": [ - "Accor" + "Capterra" ] } }, - "/adidas/product": { + "/capterra/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns product-detail data for one Adidas SKU: name, brand, category, description, pricing (current/standard/sale), images, and every purchasable size variant. product_id is the Adidas SKU (e.g. JI0397), taken from a search result's products[].id field or the trailing segment of an Adidas product page URL. An unknown product_id returns a not-found error.", - "operationId": "adidas-product", + "description": "Returns Capterra search-result products (id, name, url, description, rating). Note: Capterra renders a fallback product list even for queries with no genuine match, rather than a distinct empty-results page, so callers should treat low-relevance results as an upstream characteristic, not a bug.", + "operationId": "capterra-search", "parameters": [ { - "description": "Adidas SKU/product id, from a search result's products[].id field", + "description": "Search query", "in": "query", - "name": "product_id", + "name": "q", "required": true, "type": "string", - "x-example": "JI0397" + "x-example": "slack" } ], "produces": [ @@ -274335,7 +344874,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/adidas.productResponseDoc" + "$ref": "#/definitions/capterra.searchResponseDoc" } }, "400": { @@ -274344,14 +344883,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -274368,34 +344901,95 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Adidas product", + "summary": "Search Capterra products", "tags": [ - "Adidas" + "Capterra" ] } }, - "/adidas/product/review-topics": { + "/cardmarket/catalog": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the topics an Adidas product model's customer reviews can be filtered by -- the \"filter by topic\" chips the product page shows, commonly satisfaction, comfort, color, purchase, fit, appearance, quality and style. Feed a topics[].topic value back to /adidas/product/reviews as its topic parameter to return only reviews about that aspect. The topic vocabulary is per model, not a fixed list: a shoe exposes fit and comfort topics that an accessory does not, so read it per model rather than hard-coding it. model_number is the Adidas model number (e.g. SAMBAU2312) -- NOT the SKU: take it from an adidas_search result's products[].model_number field. A model with no reviews, including a well-formed but unrecognized model_number, returns an empty topics list rather than an error. Note the label field is a display form of topic, not translated text: Adidas returns the same English values for every locale on this route.", - "operationId": "adidas-product-review-topics", + "description": "Reads the public singles, non-singles, or global accessories export and applies local name/category/expansion filters. Category and expansion IDs and labels are discovered from the complete selected file. Game IDs 26-33 have price guides but no verified catalogue files. The response is a catalogue snapshot, not current seller offers.", + "operationId": "cardmarket-catalog", "parameters": [ { - "description": "Adidas model number, from an adidas_search result's products[].model_number field", + "description": "Catalogue file type; defaults to singles", + "enum": [ + "singles", + "nonsingles", + "accessories" + ], "in": "query", - "name": "model_number", - "required": true, + "name": "kind", "type": "string", - "x-example": "SAMBAU2312" + "x-example": "singles" }, { - "description": "Locale accepted for consistency with the reviews endpoint. Allowed values: cs_CZ, da_DK, de_AT, de_CH, de_DE, el_GR, en_AE, en_AU, en_CA, en_GB, en_IE, en_IL, en_IN, en_NZ, en_PH, en_SG, en_US, en_ZA, es_AR, es_CL, es_CO, es_ES, es_MX, es_PE, fr_BE, fr_CA, fr_CH, fr_FR, id_ID, it_CH, it_IT, ja_JP, ko_KR, nl_BE, nl_NL, pl_PL, pt_BR, pt_PT, ru_RU, sk_SK, sv_SE, th_TH, tr_TR, zh_HK, zh_TW. Defaults to en_US. Note Adidas returns the same English topic labels regardless of this value.", + "description": "Required for singles/nonsingles; omit for global accessories", + "enum": [ + 1, + 2, + 3, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25 + ], "in": "query", - "name": "locale", + "name": "game_id", + "type": "integer", + "x-example": 6 + }, + { + "description": "Optional current category ID; discover the full set with /cardmarket/catalog/categories", + "in": "query", + "name": "category_id", + "type": "integer", + "x-example": 51 + }, + { + "description": "Optional current expansion ID; discover the full set with /cardmarket/catalog/categories", + "in": "query", + "name": "expansion_id", + "type": "integer", + "x-example": 1585 + }, + { + "description": "Optional case-insensitive local product-name substring, up to 200 characters", + "in": "query", + "name": "q", "type": "string", - "x-example": "en_US" + "x-example": "pikachu" + }, + { + "description": "Rows per page, 1-500; defaults to 100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 100 + }, + { + "description": "Zero-based offset; defaults to 0", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -274405,7 +344999,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/adidas.reviewTopicsResponseDoc" + "$ref": "#/definitions/cardmarket.catalogResponseDoc" } }, "400": { @@ -274438,55 +345032,60 @@ "ApiKeyAuth": [] } ], - "summary": "Get Adidas review topics for a product", + "summary": "Search Cardmarket product catalogues", "tags": [ - "Adidas" + "Cardmarket" ] } }, - "/adidas/product/reviews": { + "/cardmarket/catalog/categories": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of customer reviews for an Adidas product model, plus the model's rating summary: overall rating, star histogram, percentage of reviewers who recommend it, per-attribute averages (Size, Width, Comfort, Quality with their own scale labels), and Adidas's AI-generated review digest when one exists. Each review carries the rating, headline, body, author nickname, purchased colorway, helpful/not-helpful vote counts, badges, customer photos, and submission time. model_number is the Adidas model number (e.g. SAMBAU2312) -- NOT the SKU: take it from an adidas_search result's products[].model_number field, which is a different value from products[].id. Reviews are returned 10 per page. Reviews are scoped to review text written in the requested locale's language, and most of the US catalog's reviews are English, so a non-English locale commonly returns rating statistics and a localized summary with an empty reviews list. A model with no reviews -- including a well-formed but unrecognized model_number -- returns an empty reviews list rather than an error, because Adidas answers 200 with a zero count rather than 404.", - "operationId": "adidas-product-reviews", + "description": "Returns only the category and expansion values from the selected public product catalogue. Use this lightweight discovery route before filtering catalogues by category_id or expansion_id; it does not return product rows.", + "operationId": "cardmarket-catalog-categories", "parameters": [ { - "description": "Adidas model number, from an adidas_search result's products[].model_number field", - "in": "query", - "name": "model_number", - "required": true, - "type": "string", - "x-example": "SAMBAU2312" - }, - { - "description": "Locale for the review-summary language, the secondary-rating scale labels, and the language of the reviews returned. Allowed values: cs_CZ, da_DK, de_AT, de_CH, de_DE, el_GR, en_AE, en_AU, en_CA, en_GB, en_IE, en_IL, en_IN, en_NZ, en_PH, en_SG, en_US, en_ZA, es_AR, es_CL, es_CO, es_ES, es_MX, es_PE, fr_BE, fr_CA, fr_CH, fr_FR, id_ID, it_CH, it_IT, ja_JP, ko_KR, nl_BE, nl_NL, pl_PL, pt_BR, pt_PT, ru_RU, sk_SK, sv_SE, th_TH, tr_TR, zh_HK, zh_TW. Defaults to en_US.", - "in": "query", - "name": "locale", - "type": "string", - "x-example": "en_US" - }, - { - "description": "Return only reviews with this star rating. Allowed values: 1, 2, 3, 4, 5. Omitted returns every rating.", - "in": "query", - "name": "rating", - "type": "integer", - "x-example": 5 - }, - { - "description": "Return only reviews about one topic. Valid values are per-model -- read them from /adidas/product/review-topics for the same model_number (commonly satisfaction, comfort, color, purchase, fit, appearance, quality, style). An unrecognized topic returns a 400 listing the model's own topics.", + "description": "Catalogue file type; defaults to singles", + "enum": [ + "singles", + "nonsingles", + "accessories" + ], "in": "query", - "name": "topic", + "name": "kind", "type": "string", - "x-example": "comfort" + "x-example": "singles" }, { - "description": "One-based page number, 10 reviews per page, defaults to 1", + "description": "Required for singles/nonsingles; omit for global accessories", + "enum": [ + 1, + 2, + 3, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25 + ], "in": "query", - "name": "page", + "name": "game_id", "type": "integer", - "x-example": 1 + "x-example": 6 } ], "produces": [ @@ -274496,7 +345095,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/adidas.productReviewsResponseDoc" + "$ref": "#/definitions/cardmarket.catalogCategoriesResponseDoc" } }, "400": { @@ -274529,47 +345128,121 @@ "ApiKeyAuth": [] } ], - "summary": "Get Adidas product reviews", + "summary": "Discover Cardmarket catalogue categories and expansions", "tags": [ - "Adidas" + "Cardmarket" ] } }, - "/adidas/search": { + "/cardmarket/games": { "get": { - "consumes": [ + "description": "Returns the exact observed public S3 price-guide IDs and whether singles/non-singles catalogue files are present. Product display names are not inferred from numeric IDs when the download index cannot provide a confirmed mapping.", + "operationId": "cardmarket-games", + "produces": [ "application/json" ], - "description": "Searches Adidas.com product listings by keyword, or browses a category listing by taxonomy slug, with real pagination and sort options. Exactly one of query or category is required. Returns product summaries (title, price, rating, images, color variants) plus facet filter groups, sort options, and (for category browse) a breadcrumb trail. Keyword search is best-effort relevance, not a guaranteed match: an obscure keyword returns whatever Adidas's own search index surfaces. A genuinely empty keyword search returns an empty product list, and requesting a page beyond the available result pages (or an unknown category) returns a not-found error. Category values are the path segment after /us/ in an Adidas category URL (e.g. women-athletic_sneakers); they can also be read from the url fields of a search/category response's own filters and breadcrumbs. Facets are applied by composing them into the category slug rather than by a separate parameter: each filters[].values[].slug is a token you splice into the category value (e.g. category=women-black-athletic_sneakers applies the Color=Black facet, and category=women-athletic_sneakers-prime applies Shipping=PRIME). Use filters[].key (the facet's stable name, e.g. searchcolor) rather than filters[].id, which is an opaque per-deployment UUID that cannot be used to build a request. Note the token's position within the slug varies by facet, so compose from a slug you have seen rather than assuming a fixed order.", - "operationId": "adidas-search", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/cardmarket.gamesResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Discover Cardmarket download game IDs", + "tags": [ + "Cardmarket" + ] + } + }, + "/cardmarket/price-guide": { + "get": { + "description": "Returns a paginated snapshot of Cardmarket's public daily price-guide export. The response discovers category IDs but the source file has no category labels. Cardmarket's posted English terms include a prior-written-agreement clause for external price display in a future-dated revision whose effective status is unconfirmed here; the response marks permission as unconfirmed.", + "operationId": "cardmarket-price-guide", "parameters": [ { - "description": "Search keyword. Exactly one of query or category is required.", + "description": "Price-guide dataset; defaults to game", + "enum": [ + "game", + "accessories" + ], "in": "query", - "name": "query", + "name": "kind", "type": "string", - "x-example": "running shoes" + "x-example": "game" }, { - "description": "Category/taxonomy slug, the path segment after /us/ in an Adidas category URL. Exactly one of query or category is required.", + "description": "Required when kind=game; omit for global accessories", + "enum": [ + 1, + 2, + 3, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33 + ], "in": "query", - "name": "category", - "type": "string", - "x-example": "women-athletic_sneakers" + "name": "game_id", + "type": "integer", + "x-example": 6 }, { - "description": "Sort order. Allowed values: price-low-to-high, newest-to-oldest, top-sellers, price-high-to-low. Omitted means relevance.", + "description": "Optional category ID; discover the full set with /cardmarket/price-guide/categories", "in": "query", - "name": "sort", - "type": "string", - "x-example": "price-low-to-high" + "name": "category_id", + "type": "integer", + "x-example": 52 }, { - "description": "One-based page number, defaults to 1", + "description": "Optional exact product ID filter", "in": "query", - "name": "page", + "name": "product_id", "type": "integer", - "x-example": 1 + "x-example": 271439 + }, + { + "description": "Rows per page, 1-500; defaults to 100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 100 + }, + { + "description": "Zero-based offset; defaults to 0", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -274579,7 +345252,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/adidas.searchResponseDoc" + "$ref": "#/definitions/cardmarket.priceGuideResponseDoc" } }, "400": { @@ -274612,27 +345285,67 @@ "ApiKeyAuth": [] } ], - "summary": "Search or browse Adidas products", + "summary": "Get Cardmarket daily price-guide data", "tags": [ - "Adidas" + "Cardmarket" ] } }, - "/adidas/store": { + "/cardmarket/price-guide/categories": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns detail for one Adidas retail store: name, status, phone, description, full address, coordinates, opening hours, and in-store services (e.g. Click and Collect, Free Wi-Fi). store_id is the numeric Adidas store id, taken from an adidas-stores response's stores[].id field. An unknown store_id returns a not-found error.", - "operationId": "adidas-store", + "description": "Returns only the numeric category IDs and counts in a game or global accessories price guide. Use this discovery route before filtering price guides by category_id; it does not return price rows.", + "operationId": "cardmarket-price-guide-categories", "parameters": [ { - "description": "Adidas store id, from a stores response's stores[].id field", + "description": "Price-guide dataset; defaults to game", + "enum": [ + "game", + "accessories" + ], "in": "query", - "name": "store_id", - "required": true, + "name": "kind", "type": "string", - "x-example": "9990021686" + "x-example": "game" + }, + { + "description": "Required when kind=game; omit for global accessories", + "enum": [ + 1, + 2, + 3, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33 + ], + "in": "query", + "name": "game_id", + "type": "integer", + "x-example": 6 } ], "produces": [ @@ -274642,7 +345355,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/adidas.storeDetailResponseDoc" + "$ref": "#/definitions/cardmarket.priceGuideCategoriesResponseDoc" } }, "400": { @@ -274675,42 +345388,89 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Adidas store", + "summary": "Discover Cardmarket price-guide categories", "tags": [ - "Adidas" + "Cardmarket" ] } }, - "/adidas/stores": { + "/carmax/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns Adidas physical retail stores nearest to a coordinate, sourced from Adidas's own store-finder API: name, address, phone, coordinates, distance in miles, opening hours, and in-store feature flags. lat and lng are both required. Adidas's upstream ignores a caller-supplied radius and returns the nearest ~20 stores ordered by distance. A location with no stores returns an empty list rather than an error.", - "operationId": "adidas-stores", + "description": "Searches CarMax for used car listings, returning vehicle summaries (make, model, trim, year, mileage, colors, engine, fuel economy, pricing, store, images), available search facets with live counts, and the total matching count.", + "operationId": "carmax-search", "parameters": [ { - "description": "Latitude, -90 to 90", + "description": "CarMax make, e.g. honda, Toyota, BMW (case-insensitive)", "in": "query", - "name": "lat", - "required": true, - "type": "number", - "x-example": 40.75 + "name": "make", + "type": "string", + "x-example": "honda" }, { - "description": "Longitude, -180 to 180", + "description": "CarMax model, e.g. civic (case-insensitive). Does not require make", "in": "query", - "name": "lng", - "required": true, - "type": "number", - "x-example": -73.99 + "name": "model", + "type": "string", + "x-example": "civic" }, { - "description": "Accepted only as 0. Adidas's store finder returns every nearby store (up to 20) in a single page, so any higher value is always empty and is rejected as an invalid parameter.", + "description": "5-digit US ZIP code to bias results toward CarMax's nearest store", + "in": "query", + "name": "zip", + "type": "string", + "x-example": "90210" + }, + { + "description": "Sort order: bestmatch, distance-asc, price-asc, price-desc, mileage-asc, mileage-desc, year-desc, year-asc, newarrival. Defaults to bestmatch", + "in": "query", + "name": "sort", + "type": "string", + "x-example": "price-asc" + }, + { + "description": "Minimum model year", + "in": "query", + "name": "min_year", + "type": "integer", + "x-example": 2020 + }, + { + "description": "Maximum model year", + "in": "query", + "name": "max_year", + "type": "integer", + "x-example": 2024 + }, + { + "description": "Minimum price in US dollars", + "in": "query", + "name": "min_price", + "type": "integer", + "x-example": 15000 + }, + { + "description": "Maximum price in US dollars", + "in": "query", + "name": "max_price", + "type": "integer", + "x-example": 30000 + }, + { + "description": "Maximum odometer mileage", + "in": "query", + "name": "max_mileage", + "type": "integer", + "x-example": 60000 + }, + { + "description": "1-indexed result page, defaults to 1. CarMax returns 48 results per page", "in": "query", "name": "page", "type": "integer", - "x-example": 0 + "x-example": 1 } ], "produces": [ @@ -274720,7 +345480,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/adidas.storesResponseDoc" + "$ref": "#/definitions/carmax.searchResponseDoc" } }, "400": { @@ -274729,8 +345489,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -274747,27 +345507,34 @@ "ApiKeyAuth": [] } ], - "summary": "Find nearby Adidas stores", + "summary": "Search CarMax vehicle listings", "tags": [ - "Adidas" + "CarMax" ] } }, - "/adidas/suggest": { + "/carmax/search/suggestions": { "get": { "consumes": [ "application/json" ], - "description": "Returns the top matching products for a partial query, the same search-as-you-type preview Adidas's own search box shows. Adidas has no separate term-autocomplete index, so each suggestion is a matching product (id, title, url, image, price) rather than a completed search phrase. Best-effort relevance: an obscure query returns whatever Adidas's own search surfaces.", - "operationId": "adidas-suggest", + "description": "Returns autocomplete suggestions for a partial search term (make/model/trim), typo-tolerant by default.", + "operationId": "carmax-search-suggestions", "parameters": [ { - "description": "Partial search query", + "description": "Free-text partial search term to get autocomplete suggestions for", "in": "query", - "name": "query", + "name": "search", "required": true, "type": "string", - "x-example": "samba" + "x-example": "civ" + }, + { + "description": "Disable fuzzy/typo-tolerant matching -- require an exact prefix match. Defaults to false", + "in": "query", + "name": "exact_match", + "type": "boolean", + "x-example": false } ], "produces": [ @@ -274777,7 +345544,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/adidas.suggestResponseDoc" + "$ref": "#/definitions/carmax.searchSuggestionsResponseDoc" } }, "400": { @@ -274786,8 +345553,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -274804,42 +345571,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Adidas search suggestions", + "summary": "Get CarMax search autocomplete suggestions", "tags": [ - "Adidas" + "CarMax" ] } }, - "/agoda/activities/search": { + "/carmax/shop-by-brand": { "get": { "consumes": [ "application/json" ], - "description": "Returns Agoda activities (tours, attractions, experiences) matching a free-text keyword and/or a city. When keyword is omitted, the resolved city's name is used instead to return a general listing of activities in that city. Callers may supply a known Agoda city id or a free-text city name for the city filter; when both are supplied city_id takes precedence.", - "operationId": "agoda-activities-search", - "parameters": [ - { - "description": "Free-text activity search keyword. When omitted, the resolved city's name is used instead.", - "in": "query", - "name": "keyword", - "type": "string", - "x-example": "cooking class" - }, - { - "description": "Numeric Agoda city id to filter results to. Optional if keyword is supplied; city_id takes precedence over city when both are supplied.", - "in": "query", - "name": "city_id", - "type": "integer", - "x-example": 9395 - }, - { - "description": "Free-text city name, used directly as the search text when keyword is omitted, and to resolve a city id filter.", - "in": "query", - "name": "city", - "type": "string", - "x-example": "Bangkok" - } - ], + "description": "Returns CarMax's full make taxonomy for browsing by brand: every make, a display image, and CarMax's own display order.", + "operationId": "carmax-shop-by-brand", "produces": [ "application/json" ], @@ -274847,19 +345591,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/agoda.activitiesSearchResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/carmax.shopByBrandResponseDoc" } }, "500": { @@ -274880,27 +345612,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Agoda activities", + "summary": "Get CarMax's \"shop by brand\" make taxonomy", "tags": [ - "Agoda" + "CarMax" ] } }, - "/agoda/activities/{activity_id}": { + "/carmax/store/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns full activity detail from Agoda: title, description, stated duration, categories, and content images.", - "operationId": "agoda-activity-detail", + "description": "Returns a CarMax store: name, full address, phone numbers, coordinates, opening hours, and store-type flags (car buying center, microstore).", + "operationId": "carmax-store", "parameters": [ { - "description": "Numeric Agoda activity id, from a prior activities search call's activity_id field", + "description": "CarMax store id, the numeric path segment of a /stores/{id} URL", "in": "path", - "name": "activity_id", + "name": "id", "required": true, "type": "string", - "x-example": "1633875" + "x-example": "7124" } ], "produces": [ @@ -274910,7 +345642,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/agoda.ActivityDetailResponse" + "$ref": "#/definitions/carmax.StoreResponse" } }, "400": { @@ -274943,28 +345675,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get Agoda activity detail", + "summary": "Get CarMax store (physical location) detail", "tags": [ - "Agoda" + "CarMax" ] } }, - "/agoda/flights/itinerary-amenities": { - "post": { + "/carmax/stores": { + "get": { "consumes": [ "application/json" ], - "description": "Returns real-content amenities (aircraft type, seat layout, meals, entertainment, wifi) for one or more flight segments. Copy the segments straight from a flight search response's own segment fields.", - "operationId": "agoda-flights-itinerary-amenities", + "description": "Searches CarMax's physical store locations by ZIP code or free-text keyword, returning stores with full address, every published phone number, opening hours, and (for a ZIP-based search) live driving distance in miles.", + "operationId": "carmax-stores", "parameters": [ { - "description": "One or more flight segments to fetch amenities for", - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/agoda.FlightItineraryAmenitiesOption" - } + "description": "5-digit US ZIP code to search near. Triggers a live geo-distance sort. Provide this or keyword; zip takes precedence if both are given", + "in": "query", + "name": "zip", + "type": "string", + "x-example": "90210" + }, + { + "description": "Free-text match against store name or city", + "in": "query", + "name": "keyword", + "type": "string", + "x-example": "Richmond" + }, + { + "description": "Maximum number of stores to return, defaults to 10, capped at 300", + "in": "query", + "name": "take", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -274974,7 +345718,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/agoda.flightItineraryAmenitiesResponseDoc" + "$ref": "#/definitions/carmax.storeSearchResponseDoc" } }, "400": { @@ -275001,83 +345745,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get Agoda flight segment amenities", + "summary": "Search CarMax store (physical location) locations", "tags": [ - "Agoda" + "CarMax" ] } }, - "/agoda/flights/search": { + "/carmax/vehicle/{stock_number}": { "get": { "consumes": [ "application/json" ], - "description": "Returns bookable one-way flight itineraries between two IATA airport codes for a departure date, including per-segment flight number, airline, times, layovers, aircraft type, and price. Resolve free-text city/airport names to codes first via the flight destination search endpoint.", - "operationId": "agoda-flights-search", + "description": "Returns a CarMax vehicle listing: full vehicle spec (make, model, trim, mileage, colors, engine, transmission, fuel economy, pricing), equipment features, labeled specifications, warranty coverage, accident/owner history, and CarMax's return guarantee terms.", + "operationId": "carmax-vehicle", "parameters": [ { - "description": "Origin IATA airport code", - "in": "query", - "name": "origin", - "required": true, - "type": "string", - "x-example": "BKK" - }, - { - "description": "Destination IATA airport code", - "in": "query", - "name": "destination", + "description": "CarMax stock number, the numeric path segment of a /car/{stock_number} URL", + "in": "path", + "name": "stock_number", "required": true, "type": "string", - "x-example": "HKT" + "x-example": "28187774" }, { - "description": "Departure date, YYYY-MM-DD", + "description": "Optional CarMax store id for pricing/transfer-fee display context. Defaults to a fixed CarMax store when omitted", "in": "query", - "name": "departure_date", - "required": true, + "name": "store_id", "type": "string", - "x-example": "2026-09-15" - }, - { - "description": "Adult passengers (age 12+), defaults to 1", - "in": "query", - "name": "adults", - "type": "integer", - "x-example": 1 - }, - { - "description": "Child passengers (age 2-11), defaults to 0", - "in": "query", - "name": "children", - "type": "integer", - "x-example": 0 - }, - { - "description": "Infant passengers (under age 2), defaults to 0", - "in": "query", - "name": "infants", - "type": "integer", - "x-example": 0 - }, - { - "description": "Cabin class, defaults to Economy", - "enum": [ - "Economy", - "PremiumEconomy", - "Business", - "First" - ], - "in": "query", - "name": "cabin_class", - "type": "string" - }, - { - "description": "1-indexed result page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "7124" } ], "produces": [ @@ -275087,7 +345782,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/agoda.flightSearchResponseDoc" + "$ref": "#/definitions/carmax.VehicleResponse" } }, "400": { @@ -275096,6 +345791,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -275114,27 +345815,35 @@ "ApiKeyAuth": [] } ], - "summary": "Search Agoda one-way flights", + "summary": "Get CarMax vehicle listing detail", "tags": [ - "Agoda" + "CarMax" ] } }, - "/agoda/flights/search-locations": { + "/carmax/vehicle/{stock_number}/recommendations": { "get": { "consumes": [ "application/json" ], - "description": "Resolves a free-text city or airport name into IATA airport codes for flight search, with each city's direct and nearby airports.", - "operationId": "agoda-flights-search-locations", + "description": "Returns CarMax's own similar-vehicle recommendations for a listing: stock number, description, display mileage/price, store location, and image, for vehicles CarMax considers comparable. An empty list is a normal result, not an error.", + "operationId": "carmax-vehicle-recommendations", "parameters": [ { - "description": "Free-text city or airport name", + "description": "CarMax stock number to find similar vehicles for, the numeric path segment of a /car/{stock_number} URL", + "in": "path", + "name": "stock_number", + "required": true, + "type": "string", + "x-example": "28187774" + }, + { + "description": "CarMax store id used as the recommendation's location context. See any search/vehicle/store response's store id field", "in": "query", - "name": "keyword", + "name": "store_id", "required": true, "type": "string", - "x-example": "Bangkok" + "x-example": "7124" } ], "produces": [ @@ -275144,7 +345853,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/agoda.flightLocationSearchResponseDoc" + "$ref": "#/definitions/carmax.vehicleRecommendationsResponseDoc" } }, "400": { @@ -275171,47 +345880,53 @@ "ApiKeyAuth": [] } ], - "summary": "Search Agoda flight destinations/airports", + "summary": "Get CarMax \"similar vehicles\" recommendations for a listing", "tags": [ - "Agoda" + "CarMax" ] } }, - "/agoda/homes/search": { + "/carsdotcom/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns Homes & Apartments results for an Agoda city: full listing detail for every matching property whose accommodation type is Apartment. Callers may supply a known Agoda city id or a free-text city name; when both are supplied city_id takes precedence.", - "operationId": "agoda-homes-search", + "description": "Searches Cars.com for new and used car listings, returning vehicle summaries (make, model, trim, year, mileage, exterior color, drivetrain, fuel type, pricing, seller, images) plus the total matching count.", + "operationId": "carsdotcom-search", "parameters": [ { - "description": "Numeric Agoda city id, e.g. 9395 for Bangkok. Either city_id or city is required; city_id takes precedence when both are supplied.", + "description": "5-digit US ZIP code to search around", "in": "query", - "name": "city_id", + "name": "zip", + "type": "string", + "x-example": "90210" + }, + { + "description": "Search radius in miles around zip", + "in": "query", + "name": "radius", "type": "integer", - "x-example": 9395 + "x-example": 50 }, { - "description": "Free-text city name, resolved to a numeric city id via Agoda's own destination search. Ignored when city_id is also supplied.", + "description": "Listing condition. Allowed values: new, used, cpo, all", + "enum": [ + "new", + "used", + "cpo", + "all" + ], "in": "query", - "name": "city", + "name": "stock_type", "type": "string", - "x-example": "Bangkok" + "x-example": "used" }, { - "description": "1-indexed result page over the underlying city search, defaults to 1", + "description": "1-indexed result page, defaults to 1. Cars.com returns 24 results per page", "in": "query", "name": "page", "type": "integer", "x-example": 1 - }, - { - "description": "Candidate listings fetched per page before filtering to homes/apartments, defaults to 10, maximum 50", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 } ], "produces": [ @@ -275221,7 +345936,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/agoda.homesSearchResponseDoc" + "$ref": "#/definitions/carsdotcom.searchResponseDoc" } }, "400": { @@ -275230,12 +345945,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -275254,47 +345963,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Agoda Homes & Apartments by city", + "summary": "Search Cars.com vehicle listings", "tags": [ - "Agoda" + "Cars.com" ] } }, - "/agoda/hotels/search": { + "/carsdotcom/vehicle/{listing_id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns hotel search results for an Agoda city: the matching property ids for that city plus a direct link to each property's listing page. Callers may supply a known Agoda city id or a free-text city name; when both are supplied city_id takes precedence.", - "operationId": "agoda-hotels-search", + "description": "Returns a Cars.com vehicle listing: full vehicle spec (make, model, trim, mileage, colors, engine, transmission, fuel economy, a key-specs table), Cars.com's own deal-fairness rating and predicted fair price, categorized equipment features, an AutoCheck-derived vehicle history report, Cars.com's own price-change history, the seller's notes, dealer detail (name, rating, address, website, phones, hours) or private-seller detail for a for-sale-by-owner listing, and certified-pre-owned/manufacturer-program detail when applicable.", + "operationId": "carsdotcom-vehicle", "parameters": [ { - "description": "Numeric Agoda city id, e.g. 9395 for Bangkok. Either city_id or city is required; city_id takes precedence when both are supplied.", - "in": "query", - "name": "city_id", - "type": "integer", - "x-example": 9395 - }, - { - "description": "Free-text city name, resolved to a numeric city id via Agoda's own destination search. Ignored when city_id is also supplied.", - "in": "query", - "name": "city", + "description": "Cars.com listing id (a UUID), the path segment of a /vehicledetail/{listing_id}/ URL", + "in": "path", + "name": "listing_id", + "required": true, "type": "string", - "x-example": "Bangkok" - }, - { - "description": "1-indexed result page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Results per page, defaults to 10, maximum 50", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "x-example": "a6ea5d6f-0395-4f9d-94d5-724c4d7414de" } ], "produces": [ @@ -275304,7 +345993,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/agoda.searchResponseDoc" + "$ref": "#/definitions/carsdotcom.VehicleResponse" } }, "400": { @@ -275337,27 +346026,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search Agoda hotels by city", + "summary": "Get Cars.com vehicle listing detail", "tags": [ - "Agoda" + "Cars.com" ] } }, - "/agoda/hotels/{property_id}": { + "/cbc/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns full hotel detail from Agoda: identity (name, any former name), an accommodation type code, address (street address, postal code, city, country), guest rating, a main photo, room count, hotel chain id, a long and short description, and short-form policy statements (minimum age, adult/child definitions, extra-bed and additional-room booking policy).", - "operationId": "agoda-hotel-detail", + "description": "Returns public CBC News or CBC Sports story metadata and body paragraphs from a canonical story URL. Live-updates pages are not supported.", + "operationId": "cbc-article", "parameters": [ { - "description": "Numeric Agoda property id, from a prior search call's property_id field or the id embedded in an Agoda hotel URL", - "in": "path", - "name": "property_id", + "description": "Canonical CBC News or CBC Sports story URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "10637" + "x-example": "https://www.cbc.ca/news/politics/does-calling-an-early-election-work-9.7355667" } ], "produces": [ @@ -275367,7 +346053,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/agoda.DetailResponse" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -275382,12 +346068,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -275400,27 +346080,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get Agoda hotel detail", + "summary": "Get CBC News article content", "tags": [ - "Agoda" + "CBC News" ] } }, - "/airbnb/host/{id}": { + "/cbc/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns an Airbnb public host profile — display name, Superhost and identity-verification status, location, bio, hosting tenure, total guest-review count, and total listing count.", - "operationId": "airbnb-host", + "description": "Returns a CBC journalist's profile, identified by `slug` (ending in CBC's author id, such as `darren-major-1.4462710`) or a `https://www.cbc.ca/author/` `url`; exactly one is required and an unknown author returns 404. The response has name, title, biography, photo, profile links and usually 10 latest articles, with `has_more_articles` showing whether older ones exist.", + "operationId": "cbc-author", "parameters": [ { - "description": "Host id (numeric)", - "in": "path", - "name": "id", - "required": true, + "description": "Author slug, e.g. darren-major-1.4462710", + "in": "query", + "name": "slug", "type": "string", - "x-example": "65056940" + "x-example": "darren-major-1.4462710" + }, + { + "description": "Canonical https://www.cbc.ca/author/ URL; alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.cbc.ca/author/darren-major-1.4462710" } ], "produces": [ @@ -275430,7 +346113,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/airbnb.HostResponse" + "$ref": "#/definitions/publicnews.cbcAuthorResponseDoc" } }, "400": { @@ -275445,12 +346128,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -275463,33 +346140,61 @@ "ApiKeyAuth": [] } ], - "summary": "Get Airbnb host profile", + "summary": "Get a CBC journalist profile", "tags": [ - "Airbnb" + "CBC News" ] } }, - "/airbnb/host/{id}/listings": { + "/cbc/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the listings an Airbnb host manages, paginated. Page 1 comes from the host profile; deeper pages page through the host's full portfolio.", - "operationId": "airbnb-host-listings", + "description": "Returns fresh CBC News or CBC Sports headlines from one public section RSS feed. Video, radio, and live-updates links are omitted.", + "operationId": "cbc-headlines", "parameters": [ { - "description": "Host id (numeric)", - "in": "path", - "name": "id", + "description": "CBC section slug", + "enum": [ + "world", + "canada", + "politics", + "business", + "health", + "arts", + "technology", + "indigenous", + "british-columbia", + "calgary", + "edmonton", + "hamilton", + "kamloops", + "kitchener-waterloo", + "london", + "manitoba", + "montreal", + "new-brunswick", + "newfoundland-labrador", + "north", + "nova-scotia", + "ottawa", + "prince-edward-island", + "saskatchewan", + "saskatoon", + "sudbury", + "thunder-bay", + "toronto", + "windsor", + "sports", + "sports-golf", + "sports-nhl", + "sports-olympics", + "sports-soccer", + "sports-tennis" + ], + "in": "query", + "name": "section", "required": true, "type": "string", - "x-example": "65056940" - }, - { - "description": "1-based page", - "in": "query", - "name": "page", - "type": "integer" + "x-example": "world" } ], "produces": [ @@ -275499,7 +346204,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/airbnb.HostListingsResponse" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -275508,11 +346213,37 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get CBC News section headlines", + "tags": [ + "CBC News" + ] + } + }, + "/cbc/news": { + "get": { + "description": "Returns fresh CBC News top stories with no input needed: title, canonical story URL, publication time, byline when given and lead image. Only stories the article endpoint accepts are returned, so video player pages, CBC Radio, Music and Books links and live-updates pages are omitted.", + "operationId": "cbc-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -275532,33 +346263,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get Airbnb host listings", + "summary": "Get CBC News top stories", "tags": [ - "Airbnb" + "CBC News" ] } }, - "/airbnb/host/{id}/reviews": { + "/cbc/sections": { "get": { - "consumes": [ + "description": "Lists the 35 CBC News sections that `cbc-headlines` accepts: 8 national desks such as `politics` and `world`, 21 regional newsrooms such as `toronto` and `nova-scotia`, and 6 CBC Sports feeds such as `sports-nhl`. Each has a `slug`, a display `name` and the feed `url`. Top stories come from `cbc-news`, not a section.", + "operationId": "cbc-sections", + "produces": [ "application/json" ], - "description": "Returns the reviews guests left for an Airbnb host, identified by the numeric host `id`. `page` is 1-based (default 1). Each review has its `id`, `rating`, `comments`, `created_at`, `reviewer` name and `reviewer_location`, and `has_more` says whether another page follows.", - "operationId": "airbnb-host-reviews", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get CBC News sections", + "tags": [ + "CBC News" + ] + } + }, + "/cbr/article": { + "get": { + "description": "Returns a CBR article by `url`, a canonical `cbr.com` address of the form `//`: title, description, publication and update times, section, authors, image and the body `paragraphs`. Section, video, author and category pages are rejected as invalid. `paywalled` is `true` only if the page declares the article not free, and then `paragraphs` may be a teaser.", + "operationId": "cbr-article", "parameters": [ { - "description": "Host id (numeric)", - "in": "path", - "name": "id", + "description": "Canonical CBR article URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "65056940" - }, - { - "description": "1-based page", - "in": "query", - "name": "page", - "type": "integer" + "x-example": "https://www.cbr.com/star-trek-2-release-date-confirmed-cover-reveal/" } ], "produces": [ @@ -275568,7 +346316,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/airbnb.HostReviewsResponse" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -275601,27 +346349,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Airbnb host reviews", + "summary": "Get CBR article content", "tags": [ - "Airbnb" + "CBR" ] } }, - "/airbnb/room/{id}": { + "/cbr/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the public details of one Airbnb listing by room id: title, description, property type, location and coordinates, guest capacity, amenities, price and price per night, rating, review count, host, and the Superhost and Guest Favorite flags. Some fields are present only when Airbnb exposes them for the listing.", - "operationId": "airbnb-room", + "description": "Returns a CBR author profile from `url`, a canonical `https://www.cbr.com/author//` address; paginated `/page/N/` URLs are rejected. The response has name, `title`, biography, image, `social_links` and about 20 items from the profile's Latest module, with no older pages available.", + "operationId": "cbr-author", "parameters": [ { - "description": "Room id", - "in": "path", - "name": "id", + "description": "Canonical CBR author URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "1384733959726184048" + "x-example": "https://www.cbr.com/author/john-dodge/" } ], "produces": [ @@ -275631,7 +346376,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/airbnb.RoomResponse" + "$ref": "#/definitions/publicnews.cbrAuthorResponseDoc" } }, "400": { @@ -275646,12 +346391,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -275664,27 +346403,54 @@ "ApiKeyAuth": [] } ], - "summary": "Get Airbnb room", + "summary": "Get a CBR author profile", "tags": [ - "Airbnb" + "CBR" ] } }, - "/airbnb/room/{id}/calendar": { + "/cbr/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the public availability calendar for one Airbnb room, grouped by month. Each day carries its date, whether it is available and bookable, whether it can be a check-in or check-out day, and the minimum and maximum nights. Months are returned only when Airbnb exposes them for the listing.", - "operationId": "airbnb-room-calendar", + "description": "Returns fresh headlines from one public CBR RSS section. Video pages, if a section ever returns them, have type video and are not readable through the article endpoint.", + "operationId": "cbr-headlines", "parameters": [ { - "description": "Room id", - "in": "path", - "name": "id", + "description": "CBR RSS section slug", + "enum": [ + "movies", + "movie-features", + "news-movies", + "reviews-movies", + "movie-lists", + "tv", + "tv-features", + "news-tv", + "reviews-tv", + "tv-lists", + "comics", + "comics-features", + "comics/news", + "comics/reviews", + "comics-lists", + "anime", + "anime-features", + "anime-news", + "anime/reviews-anime", + "anime-lists", + "games", + "game-features", + "game-news", + "games/reviews-games", + "game-guides", + "game-lists", + "lists", + "cbr-exclusives" + ], + "in": "query", + "name": "section", "required": true, "type": "string", - "x-example": "1384733959726184048" + "x-example": "movies" } ], "produces": [ @@ -275694,7 +346460,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/airbnb.CalendarResponse" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -275703,11 +346469,43 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get CBR section headlines", + "tags": [ + "CBR" + ] + } + }, + "/cbr/news": { + "get": { + "description": "Returns about 10 of the latest CBR stories from the site's main feed, with no input needed. Each has a title, canonical URL, summary, publication time, author names (co-authors joined with a comma) and lead image.", + "operationId": "cbr-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -275727,33 +346525,56 @@ "ApiKeyAuth": [] } ], - "summary": "Get Airbnb room calendar", + "summary": "Get CBR top stories", "tags": [ - "Airbnb" + "CBR" ] } }, - "/airbnb/room/{id}/reviews": { + "/cbr/sections": { "get": { - "consumes": [ + "description": "Lists the 28 CBR section slugs accepted by `cbr-headlines`, grouped by movies, TV, comics, anime and games with news, reviews, features and lists variants, plus `lists` and `cbr-exclusives`. Each entry has a `slug` (for example `news-movies` or `comics/reviews`), a display `name` and the feed `url`.", + "operationId": "cbr-sections", + "produces": [ "application/json" ], - "description": "Returns public guest reviews for one Airbnb room by room id, one page at a time (`page` is 1-based). Each review has the author, date, rating and text. Reviews are returned only when Airbnb exposes them for the listing.", - "operationId": "airbnb-room-reviews", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get CBR RSS sections", + "tags": [ + "CBR" + ] + } + }, + "/cbsnews/article": { + "get": { + "description": "Returns a CBS News article by `url`, a canonical HTTPS `cbsnews.com/news/` address. The response has the title, description, publication and update times, authors, section, lead image and the body `paragraphs`.", + "operationId": "cbsnews-article", "parameters": [ { - "description": "Room id", - "in": "path", - "name": "id", + "description": "Canonical CBS News article URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "1384733959726184048" - }, - { - "description": "1-based page", - "in": "query", - "name": "page", - "type": "integer" + "x-example": "https://www.cbsnews.com/news/example-article-slug/" } ], "produces": [ @@ -275763,7 +346584,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/airbnb.ReviewsResponse" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -275778,12 +346599,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -275796,87 +346611,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Airbnb room reviews", + "summary": "Get CBS News article content", "tags": [ - "Airbnb" + "CBS News" ] } }, - "/airbnb/search": { + "/cbsnews/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches public Airbnb stays for a location, with optional check-in and check-out dates, adult count, currency and page. Pass `ne_lat`, `ne_lng`, `sw_lat` and `sw_lng` to bound the search to a map area. Each result has the listing id, title, URL, location and coordinates, price and price per night, rating, review count, host, and the Superhost and Guest Favorite flags.", - "operationId": "airbnb-search", + "description": "Returns one CBS News author's public team-page profile: name, biography, coverage topics, headshot (when the page has one), social links, and their recent articles.", + "operationId": "cbsnews-author", "parameters": [ { - "description": "Location", + "description": "Canonical cbsnews.com/team/ author URL", "in": "query", - "name": "location", + "name": "url", "required": true, "type": "string", - "x-example": "New York, NY" - }, - { - "description": "Check-in date", - "in": "query", - "name": "check_in", - "type": "string" - }, - { - "description": "Check-out date", - "in": "query", - "name": "check_out", - "type": "string" - }, - { - "description": "Adult guests", - "in": "query", - "name": "adults", - "type": "integer" - }, - { - "description": "1-based page", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Currency for bounded map search", - "in": "query", - "name": "currency", - "type": "string" - }, - { - "description": "Northeast latitude for bounded map search", - "in": "query", - "name": "ne_lat", - "type": "number" - }, - { - "description": "Northeast longitude for bounded map search", - "in": "query", - "name": "ne_lng", - "type": "number" - }, - { - "description": "Southwest latitude for bounded map search", - "in": "query", - "name": "sw_lat", - "type": "number" - }, - { - "description": "Southwest longitude for bounded map search", - "in": "query", - "name": "sw_lng", - "type": "number" - }, - { - "description": "Map zoom for bounded map search", - "in": "query", - "name": "zoom", - "type": "integer" + "x-example": "https://www.cbsnews.com/team/margaret-brennan/" } ], "produces": [ @@ -275886,7 +346638,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/airbnb.SearchResponse" + "$ref": "#/definitions/publicnews.cbsNewsAuthorResponseDoc" } }, "400": { @@ -275895,8 +346647,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -275913,29 +346665,36 @@ "ApiKeyAuth": [] } ], - "summary": "Search Airbnb stays", + "summary": "Get a CBS News author profile", "tags": [ - "Airbnb" + "CBS News" ] } }, - "/alcom/headlines": { + "/cbsnews/headlines": { "get": { - "description": "Returns current headlines from one of AL.com's section feeds. Summaries are brief publisher teasers, not full article text.", - "operationId": "alcom-headlines", + "description": "Returns fresh headlines for one CBS News section. `section` is required and is one of `main`, `us`, `world`, `politics`, `moneywatch`, `health`, `entertainment`, `science`, `technology` or `space`. Each item has a title and URL, and may also carry a summary, author, publication time and image.", + "operationId": "cbsnews-headlines", "parameters": [ { - "description": "AL.com editorial section", + "description": "CBS News RSS section slug", "enum": [ - "news", - "sports", - "life" + "main", + "us", + "world", + "politics", + "moneywatch", + "health", + "entertainment", + "science", + "technology", + "space" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "news" + "x-example": "main" } ], "produces": [ @@ -275966,16 +346725,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get AL.com section headlines", + "summary": "Get CBS News section headlines", "tags": [ - "AL.com" + "CBS News" ] } }, - "/alcom/news": { + "/cbsnews/news": { "get": { - "description": "Returns current AL.com News stories. Summaries are brief publisher teasers, not full article text.", - "operationId": "alcom-news", + "description": "Returns the latest CBS News top stories, with no input needed. Each item has a title and canonical URL, and may also carry a summary, author, publication time and image.", + "operationId": "cbsnews-news", "produces": [ "application/json" ], @@ -276004,16 +346763,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get AL.com top stories", + "summary": "Get CBS News top stories", "tags": [ - "AL.com" + "CBS News" ] } }, - "/alcom/sections": { + "/cbsnews/sections": { "get": { - "description": "Lists the three top-level editorial sections in AL.com's navigation: `news`, `sports` and `life`. Each has a `slug`, a display `name` and the section's page `url`, and the slugs are the values `alcom-headlines` accepts for `section`.", - "operationId": "alcom-sections", + "description": "Lists the ten CBS News sections accepted by `cbsnews-headlines`: `main`, `us`, `world`, `politics`, `moneywatch`, `health`, `entertainment`, `science`, `technology` and `space`. Each has a `slug`, a display `name` and the feed `url`.", + "operationId": "cbsnews-sections", "produces": [ "application/json" ], @@ -276023,12 +346782,6 @@ "schema": { "$ref": "#/definitions/publicnews.sectionsResponseDoc" } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -276036,26 +346789,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get AL.com editorial sections", + "summary": "Get CBS News sections", "tags": [ - "AL.com" + "CBS News" ] } }, - "/aliexpress/categories": { + "/cbssports/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns AliExpress's category navigation taxonomy. With no parameters it lists the top-level category tabs (about 24), each with its navigation id, name, numeric platform category id and icon. Pass one tab's id as category_tab to expand that tab into its second- and third-level categories; third-level categories carry the search keyword and a ready-to-use search URL, so they can be passed to the search endpoint as q. Category ids are exposed only where AliExpress's payload actually carries them: second-level categories have no numeric platform id, so none is invented for them. This is a taxonomy surface, not a product listing.", - "operationId": "aliexpress-categories", + "description": "Returns a CBS Sports article by `url`, a canonical `https://www.cbssports.com//news//` address, including `nfl/draft/news/` and fantasy football news: title, description, publication and update times, authors, lead image and body `paragraphs`. Video, scores, schedule and player pages are rejected. `paywalled` is omitted because the articles are free.", + "operationId": "cbssports-article", "parameters": [ { - "description": "Top-level tab id from an unfiltered response, e.g. electronics; omit to list top-level tabs only", + "description": "Canonical CBS Sports article URL", "in": "query", - "name": "category_tab", + "name": "url", + "required": true, "type": "string", - "x-example": "electronics" + "x-example": "https://www.cbssports.com/college-football/news/president-trump-attending-texas-tennessee/" } ], "produces": [ @@ -276065,7 +346816,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/aliexpress.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -276074,6 +346825,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -276092,40 +346849,30 @@ "ApiKeyAuth": [] } ], - "summary": "List AliExpress category navigation", + "summary": "Get CBS Sports article content", "tags": [ - "AliExpress" + "CBS Sports" ] } }, - "/aliexpress/category-ids": { + "/cbssports/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the AliExpress web category ids that its own product cards carry on one listing page, with each id's parent, depth and full category path. Pass q to discover the categories of products matching a keyword, or category_id to inspect one category listing. Pass exactly one of them. The ids are the same web category ids used in /category//.html URLs and by the search endpoint's cat_id parameter; they are NOT the platform/taxonomy ids returned by the categories endpoint. A parent category listing contains products from its descendants, so inspecting a category reveals its child ids, and every returned path names that id's ancestors: the value space is discoverable by walking from a keyword or a category id rather than guessing.", - "operationId": "aliexpress-category-ids", + "description": "Returns a CBS Sports writer's profile, identified by `slug` (such as `david-cobb`) or a `cbssports.com/writers//` `url`; exactly one is required and an unknown slug returns not-found. The response has name, title, headshot, bio, X/Twitter link and about 15 recent articles with title, URL and summary. Profile fields the page lacks are omitted.", + "operationId": "cbssports-author", "parameters": [ { - "description": "Free-text keywords whose result cards' web category ids are returned; pass exactly one of q or category_id", + "description": "Writer slug, e.g. david-cobb", "in": "query", - "name": "q", + "name": "slug", "type": "string", - "x-example": "wireless earbuds" - }, - { - "description": "AliExpress web category id whose listing is inspected; a parent category reveals its descendants' ids. Pass exactly one of q or category_id", - "in": "query", - "name": "category_id", - "type": "integer", - "x-example": 44 + "x-example": "david-cobb" }, { - "description": "1-indexed listing page to inspect (1-60), defaults to 1", + "description": "Canonical cbssports.com/writers// URL; alternative to slug", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "url", + "type": "string", + "x-example": "https://www.cbssports.com/writers/david-cobb/" } ], "produces": [ @@ -276135,7 +346882,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/aliexpress.categoryIDsResponseDoc" + "$ref": "#/definitions/publicnews.cbsSportsAuthorResponseDoc" } }, "400": { @@ -276144,6 +346891,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -276162,41 +346915,47 @@ "ApiKeyAuth": [] } ], - "summary": "Discover AliExpress web category ids", + "summary": "Get a CBS Sports writer profile", "tags": [ - "AliExpress" + "CBS Sports" ] } }, - "/aliexpress/category-products": { + "/cbssports/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page (up to 60 products) of a public AliExpress category listing with the same product fields as the search endpoint: product id, title, link, image, price, currency, original price, rating, sold text, discount, SKU id, ship-from country and store name when AliExpress lists them. category_id is the AliExpress web category id from a /category//.html URL (for example 5090301 for Cellphones); the slug segment is cosmetic (the listing is selected by id) and defaults to products. The listing uses the anonymous US English/USD locale. Product-detail pages are currently unavailable through the supported HTTP profiles.", - "operationId": "aliexpress-category-products", + "description": "Returns fresh headlines from one CBS Sports per-sport feed. `section` is required and takes one of 21 slugs, such as `nfl`, `college-basketball`, `soccer`, `ufc`, `betting` or `general`. Each item has a title and URL, and may carry a summary, author, publication time and image.", + "operationId": "cbssports-headlines", "parameters": [ { - "description": "AliExpress web category id: the number in a /category//.html URL (for example 5090301 for Cellphones); taxonomy ids from the categories endpoint are a different namespace and are not interchangeable", + "description": "CBS Sports section slug", + "enum": [ + "nfl", + "college-football", + "nba", + "college-basketball", + "womens-college-basketball", + "wnba", + "mlb", + "nhl", + "soccer", + "golf", + "tennis", + "ufc", + "mma", + "boxing", + "wwe", + "nascar", + "motor-sports", + "olympics", + "betting", + "prediction", + "general" + ], "in": "query", - "name": "category_id", + "name": "section", "required": true, - "type": "integer", - "x-example": 5090301 - }, - { - "description": "Category path segment used by AliExpress's own URL (lower-case letters, digits, hyphens); cosmetic, defaults to products", - "in": "query", - "name": "slug", "type": "string", - "x-example": "cellphones" - }, - { - "description": "1-indexed result page (1-60), defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "nfl" } ], "produces": [ @@ -276206,7 +346965,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/aliexpress.categoryProductsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -276233,36 +346992,16 @@ "ApiKeyAuth": [] } ], - "summary": "List products in an AliExpress category", + "summary": "Get CBS Sports section headlines", "tags": [ - "AliExpress" + "CBS Sports" ] } }, - "/aliexpress/reviews": { + "/cbssports/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of public reviews and rating statistics for a numeric AliExpress product id. AliExpress currently returns up to 20 review records per page.", - "operationId": "aliexpress-reviews", - "parameters": [ - { - "description": "Numeric AliExpress product id", - "in": "query", - "name": "product_id", - "required": true, - "type": "string", - "x-example": "3256812072210872" - }, - { - "description": "1-indexed review page (1-50), defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - } - ], + "description": "Returns the current CBS Sports headlines across every sport, with no input needed: news stories, analysis columns and picks or predictions articles. Only article links are returned; video, scores, schedule and player pages are filtered out. Items have `title` and `url`, plus `summary`, `published_at` and `author` when provided.", + "operationId": "cbssports-news", "produces": [ "application/json" ], @@ -276270,13 +347009,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/aliexpress.reviewsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -276297,87 +347030,66 @@ "ApiKeyAuth": [] } ], - "summary": "Get AliExpress product reviews", + "summary": "Get CBS Sports top stories", "tags": [ - "AliExpress" + "CBS Sports" ] } }, - "/aliexpress/search": { + "/cbssports/sections": { + "get": { + "description": "Lists the 21 CBS Sports per-sport sections accepted by `cbssports-headlines`, from `nfl`, `nba` and `soccer` to `betting`, `prediction` and `general`. Each has a `slug`, a display `name` and the feed `url`. A feed can include a story from a neighbouring sport, and off-season ones such as `olympics` can be weeks or months old.", + "operationId": "cbssports-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get CBS Sports sections", + "tags": [ + "CBS Sports" + ] + } + }, + "/chewy/brands": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page (up to 60 products) of public keyword search results with product ids, titles, links, images, prices, ratings, sold text, discount, SKU id, ship-from country, and store name when AliExpress lists them. Results can be sorted and filtered by price, free shipping, the Choice program, and product attributes; list the attribute values for a keyword with the search-filters endpoint. The search uses the anonymous US English/USD locale. Product-detail pages are currently unavailable through the supported HTTP profiles.", - "operationId": "aliexpress-search", + "description": "Returns one page of Chewy's full brand directory -- roughly 7,600 brands -- with each brand's id, name, Chewy's own written description, image, parent-catalog group, and its child brands where a brand umbrellas others (Purina lists 27). This is the whole catalog of brands, unlike chewy_facets, which only reports the brands present in one category's listing. Pass name to look up a single brand by exact name, case-insensitive; it is an exact match upstream, not a search, so \"Purina\" matches while \"purina pro\" does not. To filter products by a brand, pass the brand's NAME to chewy_category or chewy_search as filter=brand_facet: -- facet_id is the join key onto chewy_facets' own option ids and is not accepted by the filter parameter.", + "operationId": "chewy-brands", "parameters": [ { - "description": "Free-text search keywords", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "wireless earbuds" - }, - { - "description": "1-indexed result page (1-60), defaults to 1", + "description": "Page number, 1-based (default 1).", "in": "query", "name": "page", "type": "integer", "x-example": 1 }, { - "description": "Sort order. Allowed values: best_match (default), orders, price_asc, price_desc", - "enum": [ - "best_match", - "orders", - "price_asc", - "price_desc" - ], - "in": "query", - "name": "sort", - "type": "string", - "x-example": "price_asc" - }, - { - "description": "Minimum price in USD (0-1000000)", - "in": "query", - "name": "min_price", - "type": "number", - "x-example": 20 - }, - { - "description": "Maximum price in USD (0-1000000), not below min_price", - "in": "query", - "name": "max_price", - "type": "number", - "x-example": 30 - }, - { - "description": "Only free-shipping products", - "in": "query", - "name": "free_shipping", - "type": "boolean" - }, - { - "description": "Only products in AliExpress's Choice program", + "description": "Brands per page, 1 to 500 (default 100).", "in": "query", - "name": "choice", - "type": "boolean" + "name": "limit", + "type": "integer", + "x-example": 100 }, { - "description": "Attribute filter -, from the search-filters endpoint for the same q; comma-separate up to 5 values, one per attribute group", + "description": "Return only the brand with this exact name, case-insensitive. Exact match, not a search.", "in": "query", - "name": "attr", + "name": "name", "type": "string", - "x-example": "3079-4148335" - }, - { - "description": "Search within one AliExpress web category id (the number in a /category//.html URL); taxonomy ids from the categories endpoint are a different namespace and are not interchangeable", - "in": "query", - "name": "cat_id", - "type": "integer", - "x-example": 5090301 + "x-example": "ACANA" } ], "produces": [ @@ -276387,7 +347099,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/aliexpress.searchResponseDoc" + "$ref": "#/definitions/chewy.brandsResponseDoc" } }, "400": { @@ -276414,27 +347126,33 @@ "ApiKeyAuth": [] } ], - "summary": "Search AliExpress products", + "summary": "List Chewy's brand directory", "tags": [ - "AliExpress" + "Chewy" ] } }, - "/aliexpress/search-filters": { + "/chewy/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns every sort value and boolean filter the search endpoint accepts, plus the product-attribute filters (brand, color, style, and so on) AliExpress offers for the keyword, as ready-to-use attr values. Attribute filters differ per keyword, so call this with the same q as the search.", - "operationId": "aliexpress-search-filters", + "description": "Returns Chewy's category taxonomy tree: how to discover group_id values for chewy_category, not the products within a category. Omitting group_id returns all top-level departments (Dog, Cat, Horse, Bird, Fish, Reptile, Small Pet, Farm and Livestock Supplies, Wild Bird and Wildlife Supplies, Pharmacy, Pet Parents); a group_id expands that specific group's own subtree instead. depth controls how many levels of subcategories are expanded in one call.", + "operationId": "chewy-categories", "parameters": [ { - "description": "Free-text search keywords", + "description": "Chewy category group id to expand, e.g. 332 for Dog Food. Omit for the full top-level department tree.", "in": "query", - "name": "q", - "required": true, + "name": "group_id", "type": "string", - "x-example": "wireless earbuds" + "x-example": "332" + }, + { + "description": "How many levels of subcategories to expand, 1 to 3 (default 2)", + "in": "query", + "name": "depth", + "type": "integer", + "x-example": 2 } ], "produces": [ @@ -276444,7 +347162,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/aliexpress.filtersResponseDoc" + "$ref": "#/definitions/chewy.categoriesResponseDoc" } }, "400": { @@ -276471,34 +347189,68 @@ "ApiKeyAuth": [] } ], - "summary": "List AliExpress search filters", + "summary": "Browse Chewy's category taxonomy tree", "tags": [ - "AliExpress" + "Chewy" ] } }, - "/aliexpress/suggest": { + "/chewy/category": { "get": { "consumes": [ "application/json" ], - "description": "Returns AliExpress's own search-box keyword completions for a query, with a ready-to-use search URL for each suggestion. This is a suggestion/autocomplete surface, not a product feed: the upstream payload contains keyword strings only, so no product id, title, price or seller is returned. AliExpress usually offers 10-12 suggestions; each suggestion's url is the matching AliExpress search page and can be passed to the search endpoint as q.", - "operationId": "aliexpress-suggest", + "description": "Returns one page (36 products) of a Chewy category/browse listing's product grid (price, autoship price/discount, stock, rating, images), plus embedded facets and breadcrumbs. group_id is Chewy's own numeric category id -- the trailing id segment of a chewy.com/b/- browse URL, e.g. 294 for /b/dry-food-294. Every breadcrumbs[].group_id and facets[].options[].value in a response is a ready-to-use group_id for a follow-up call, so a caller can discover the full category taxonomy starting from a known category. A group_id Chewy does not recognize returns a 404 rather than an unfiltered listing. sort and filter narrow/reorder the listing; every facets[].value paired with one of that facet's options[].value from any prior response is a valid filter key:value pair (e.g. brand, breed size, flavor, price range, customer rating -- whichever facets that category exposes). Set include_content to also return the category's curated editorial content -- Chewy's own FAQ question/answer pairs, the rich category description, and the SEO page title and meta description; it costs no extra upstream call and is omitted entirely when not requested. A keyword search carries none of this content, so it is a category-only addition.", + "operationId": "chewy-category", "parameters": [ { - "description": "Partial or full search keywords to complete", + "description": "Chewy's numeric category id, e.g. \\", "in": "query", - "name": "q", + "name": "group_id", "required": true, "type": "string", - "x-example": "wireless earbuds" + "x-example": "294" }, { - "description": "Maximum suggestions to return (1-20), defaults to 10", + "description": "Page number, 36 products per page (default 1)", "in": "query", - "name": "limit", + "name": "page", "type": "integer", - "x-example": 10 + "x-example": 1 + }, + { + "description": "Sort order. One of byRelevance, byNewest, byPopularity, byLowestPrice, byHighestPrice, byRating, byRatingCount. Defaults to Chewy's own relevance ordering when omitted.", + "enum": [ + "byRelevance", + "byNewest", + "byPopularity", + "byLowestPrice", + "byHighestPrice", + "byRating", + "byRatingCount" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "byRating" + }, + { + "collectionFormat": "csv", + "description": "Repeatable, up to 10. Each value is \\", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array", + "x-example": "brand_facet:ACANA" + }, + { + "description": "Also return the category's curated editorial content -- Chewy's own FAQ question/answer pairs, the rich category description, and the SEO page title/meta description. Costs no extra upstream call. Omitted entirely when false (the default).", + "in": "query", + "name": "include_content", + "type": "boolean", + "x-example": true } ], "produces": [ @@ -276508,7 +347260,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/aliexpress.suggestResponseDoc" + "$ref": "#/definitions/chewy.categoryResponseDoc" } }, "400": { @@ -276517,6 +347269,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -276535,26 +347293,44 @@ "ApiKeyAuth": [] } ], - "summary": "Suggest AliExpress search keywords", + "summary": "Browse a Chewy category listing", "tags": [ - "AliExpress" + "Chewy" ] } }, - "/aliexpress/trending-searches": { + "/chewy/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns AliExpress's own discovery/trending keyword feed from its anonymous search box: the hot-search keywords it groups by category, plus its discovery and shading keyword modules. Each item carries the keyword, its display casing when different, the kind (hot, shading, discovery, history), the module's UI label, the hot-list category, and a ready-to-use search URL; keyword thumbnails are included where AliExpress supplies them. This is a keyword-discovery feed, not a product list and not a personalized recommendation: no product id, title, price or seller is returned, and AliExpress does not promise a stable order between calls. The anonymous feed carries roughly 40 hot keywords plus a few discovery/shading keywords per call; search history is empty for anonymous callers.", - "operationId": "aliexpress-trending-searches", + "description": "Returns the full set of refinement options (facets) a Chewy category or keyword search can be narrowed by -- brand, sub-category, lifestage, food form, breed size, special diet, health feature, flavor, ingredient, packaging type, price band, customer rating, and whichever other dimensions that listing exposes -- with each option's product count. No products are returned, so this is a much smaller call than chewy_category/chewy_search when only the option set is wanted. The Brand dimension is effectively Chewy's brand directory for the requested listing: each brand option carries its product count and, where Chewy publishes one, its own chewy.com/brands/- landing-page slug in seo_hvf_slug. Exactly one of group_id or q is required. Every facets[].value paired with one of that facet's options[].value is a ready-to-use filter key:value pair for this endpoint, chewy_category, and chewy_search alike; passing filter here narrows the listing first, so the returned counts describe the already-narrowed result set. A group_id Chewy does not recognize returns a 404 rather than an empty option set.", + "operationId": "chewy-facets", "parameters": [ { - "description": "Maximum trending keywords to return (1-20), defaults to 10", + "description": "Chewy's numeric category id, e.g. \\", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "group_id", + "type": "string", + "x-example": "294" + }, + { + "description": "Free-text search keywords to return refinement options for, e.g. \\", + "in": "query", + "name": "q", + "type": "string", + "x-example": "salmon dog food" + }, + { + "collectionFormat": "csv", + "description": "Repeatable, up to 10. Each value is \\", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array", + "x-example": "brand_facet:ACANA" } ], "produces": [ @@ -276564,7 +347340,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/aliexpress.trendingSearchesResponseDoc" + "$ref": "#/definitions/chewy.facetsResponseDoc" } }, "400": { @@ -276573,6 +347349,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -276591,24 +347373,27 @@ "ApiKeyAuth": [] } ], - "summary": "List AliExpress trending searches", + "summary": "List a Chewy category or search's refinement options", "tags": [ - "AliExpress" + "Chewy" ] } }, - "/aljazeera/article": { + "/chewy/gtin-lookup": { "get": { - "description": "Returns an Al Jazeera article by `url`, a canonical dated `www.aljazeera.com` address such as `/news/2026/9/20/example-slug`: title, description, publication and update times, section, credited authors, lead image and body `paragraphs`. Live-blog URLs return their opening summary bullets as the body; a video page with no article text returns `503` and a malformed URL `400`.", - "operationId": "aljazeera-article", + "consumes": [ + "application/json" + ], + "description": "Resolves a batch of up to 20 GTIN/UPC barcodes to their Chewy part numbers in one call. gtins is a comma-separated list of barcodes, e.g. \"192268541316\". A barcode Chewy does not recognize is omitted from part_numbers and listed in not_found rather than causing the whole call to fail. The resolved part_numbers values feed directly into chewy_product/chewy_products.", + "operationId": "chewy-gtin-lookup", "parameters": [ { - "description": "Canonical www.aljazeera.com article URL", + "description": "Comma-separated GTIN/UPC barcodes, up to 20", "in": "query", - "name": "url", + "name": "gtins", "required": true, "type": "string", - "x-example": "https://www.aljazeera.com/news/2026/9/20/example-slug" + "x-example": "192268541316" } ], "produces": [ @@ -276618,7 +347403,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/aljazeera.articleResponseDoc" + "$ref": "#/definitions/chewy.gtinLookupResponseDoc" } }, "400": { @@ -276627,12 +347412,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -276651,37 +347430,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Al Jazeera article content", + "summary": "Resolve Chewy GTIN/UPC barcodes to part numbers", "tags": [ - "Al Jazeera" + "Chewy" ] } }, - "/aljazeera/author": { + "/chewy/inventory": { "get": { - "description": "Returns one Al Jazeera author's public profile (name, job title, bio when available) and one page of their recent articles, identified by an author slug or a canonical author URL.", - "operationId": "aljazeera-author", + "consumes": [ + "application/json" + ], + "description": "Returns Chewy's live warehouse inventory position for up to 20 products in one call, keyed by part number: the availability status, total units on hand, units inbound/in progress, units already reserved against unshipped orders, and the quantity actually available to the storefront. This is the only Chewy surface that carries real quantities -- every other endpoint in this family reports stock as a single boolean, so \"36 units left\" and \"84,386 units left\" are indistinguishable there. Quantities are live and move between calls. Part numbers Chewy does not return inventory for are reported in not_found; if none resolve the response is a 404.", + "operationId": "chewy-inventory", "parameters": [ { - "description": "Al Jazeera author slug", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "hakeem-najimdeen" - }, - { - "description": "Canonical https://www.aljazeera.com/author/ URL, as an alternative to slug", + "description": "Comma-separated Chewy part numbers, up to 20 per request, e.g. \\", "in": "query", - "name": "url", + "name": "part_numbers", + "required": true, "type": "string", - "x-example": "https://www.aljazeera.com/author/hakeem-najimdeen" - }, - { - "description": "1-based page number of the author's article list; overrides any page embedded in url", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "101143,52448" } ], "produces": [ @@ -276691,7 +347460,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/aljazeera.authorResponseDoc" + "$ref": "#/definitions/chewy.inventoryResponseDoc" } }, "400": { @@ -276724,16 +347493,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Al Jazeera author's profile and recent articles", + "summary": "Look up live warehouse inventory for a batch of Chewy products", "tags": [ - "Al Jazeera" + "Chewy" ] } }, - "/aljazeera/categories": { + "/chewy/item-attributes": { "get": { - "description": "Lists Al Jazeera's current section navigation, each entry with a `name`, `slug` and `url`. A slug has one segment (`news`, `middle-east`) or two (`tag/human-rights`), and any returned `slug` can be passed as the `topic` parameter of `aljazeera-topic`.", - "operationId": "aljazeera-categories", + "consumes": [ + "application/json" + ], + "description": "Returns Chewy's own specification table for up to 20 products in one call, keyed by part number -- the structured attribute list (lifestage, pet type, product type, material, made-in country, packaging type, flavor, defining size, plus long-form key-benefits and cautions copy), together with the handling and compliance flags that govern how an item ships (pharmaceutical, prescription vet-diet, frozen, refrigerated, single-tablet, gift card), its bundle structure and component SKUs, its autoship eligibility/discount and preset reorder cadence, its merchandising classification path, and the numeric category group ids it belongs to (each usable directly as chewy_category's group_id). This complements rather than repeats chewy_products and chewy_product: price, rating, images, reviews, and descriptions stay on those endpoints, and the attribute table is not available from either. Use the group parameter to return a single attribute group. Part numbers Chewy does not recognize are reported in not_found; if none of them resolve the response is a 404.", + "operationId": "chewy-item-attributes", + "parameters": [ + { + "description": "Comma-separated Chewy part numbers, up to 20 per request, e.g. \\", + "in": "query", + "name": "part_numbers", + "required": true, + "type": "string", + "x-example": "52448,101143" + }, + { + "description": "Return only attributes in one group. One of DEFINING, STANDARD, EXTENDED, HIDDEN. Omit for every group.", + "enum": [ + "DEFINING", + "STANDARD", + "EXTENDED", + "HIDDEN" + ], + "in": "query", + "name": "group", + "type": "string", + "x-example": "STANDARD" + } + ], "produces": [ "application/json" ], @@ -276741,46 +347536,20 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/aljazeera.categoriesResponseDoc" + "$ref": "#/definitions/chewy.itemAttributesResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Al Jazeera section navigation", - "tags": [ - "Al Jazeera" - ] - } - }, - "/aljazeera/headlines": { - "get": { - "description": "Returns recent Al Jazeera text-news headlines from across the site, with no input needed. Each item has a title, canonical URL, summary, publication time and the section when present. Video items are excluded because the article endpoint supports text stories only.", - "operationId": "aljazeera-headlines", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/aljazeera.headlinesResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -276800,24 +347569,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Al Jazeera site-wide headlines", + "summary": "Look up a batch of Chewy products' structured attributes and handling flags", "tags": [ - "Al Jazeera" + "Chewy" ] } }, - "/aljazeera/topic": { + "/chewy/product": { "get": { - "description": "Returns the newest public Al Jazeera stories from one section archive page. topic is a section slug; use aljazeera-categories for the current value space.", - "operationId": "aljazeera-topic", + "consumes": [ + "application/json" + ], + "description": "Returns one Chewy product's full detail: name, brand, description, images, price, stock, rating and its star-count breakdown, category breadcrumbs, customer questions and answers, and customer reviews. id is the numeric id from a chewy.com PDP URL, e.g. 185468 from https://www.chewy.com/frisco-lion-mane-dog-cat-costume/dp/185468 -- also the same value a chewy_category response's products[].part_number field carries for that product's own default variant. The response also carries the item's shipping weight and package dimensions as Chewy states them, its per-order purchase limit, and any promotions currently attached to it (each with a type such as \"Spend $X\" or \"BOGO\", plus short and long descriptions).", + "operationId": "chewy-product", "parameters": [ { - "description": "Al Jazeera section slug", + "description": "Numeric id from a chewy.com PDP URL", "in": "query", - "name": "topic", + "name": "id", "required": true, "type": "string", - "x-example": "news" + "x-example": "185468" } ], "produces": [ @@ -276827,7 +347599,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/aljazeera.topicResponseDoc" + "$ref": "#/definitions/chewy.productResponseDoc" } }, "400": { @@ -276860,33 +347632,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get Al Jazeera section headlines", + "summary": "Get a Chewy product's detail", "tags": [ - "Al Jazeera" + "Chewy" ] } }, - "/allbirds/collections": { + "/chewy/product-questions": { "get": { "consumes": [ "application/json" ], - "description": "Returns collections from Allbirds (https://www.allbirds.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", - "operationId": "allbirds-collections", + "description": "Returns one page of a Chewy product's customer questions, each with its answers (text, author, date, staff flag, helpful count). chewy_product embeds only the first 20 questions with no way to page past them; this endpoint reaches the whole set. id is the numeric id from any chewy.com PDP URL, and questions are shared across a product's variants, so any variant's id returns the same set. Each question reports answers_total alongside its answers array, so a caller can tell when answers were truncated by answer_limit. Chewy offers no sort or filter on questions, so this endpoint deliberately exposes paging only.", + "operationId": "chewy-product-questions", "parameters": [ { - "description": "1-based page, defaults to 1", + "description": "The numeric id from a chewy.com PDP URL, e.g. \\", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "767806" + }, + { + "description": "Page number, 1-based (default 1).", "in": "query", "name": "page", "type": "integer", "x-example": 1 }, { - "description": "Maximum collections, defaults to 50 and supports up to 250", + "description": "Questions per page, 1 to 50 (default 20).", "in": "query", "name": "limit", "type": "integer", - "x-example": 50 + "x-example": 20 + }, + { + "description": "Answers to return per question, 1 to 20 (default 10). Each question also reports answers_total.", + "in": "query", + "name": "answer_limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -276896,7 +347683,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" + "$ref": "#/definitions/chewy.questionsResponseDoc" } }, "400": { @@ -276905,6 +347692,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -276923,41 +347716,67 @@ "ApiKeyAuth": [] } ], - "summary": "List Allbirds collections", + "summary": "List a Chewy product's customer questions and answers, paginated", "tags": [ - "Allbirds" + "Chewy" ] } }, - "/allbirds/collections/{handle}/products": { + "/chewy/product-reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns products from one Allbirds (https://www.allbirds.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", - "operationId": "allbirds-collection-products", + "description": "Returns one page of a Chewy product's customer reviews -- rating, title, body, author, submission date, helpful count, incentivized flag, and contributor badge -- with sorting and positive/negative filtering. chewy_product embeds only the first 20 reviews with no way to page past them; this endpoint reaches the whole set (products routinely carry thousands). id is the numeric id from any chewy.com PDP URL, and reviews are shared across a product's variants, so any variant's id returns the same set. total is the count for the current filter, so it drops when filter is applied, while rating_count stays the product's overall rating tally.", + "operationId": "chewy-product-reviews", "parameters": [ { - "description": "Collection handle", - "in": "path", - "name": "handle", + "description": "The numeric id from a chewy.com PDP URL, e.g. \\", + "in": "query", + "name": "id", "required": true, "type": "string", - "x-example": "collection-handle" + "x-example": "767806" }, { - "description": "1-based page, defaults to 1", + "description": "Page number, 1-based (default 1).", "in": "query", "name": "page", "type": "integer", "x-example": 1 }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "description": "Reviews per page, 1 to 50 (default 20).", "in": "query", "name": "limit", "type": "integer", - "x-example": 50 + "x-example": 20 + }, + { + "description": "Sort order. One of MOST_RELEVANT, NEWEST, OLDEST, HIGHEST_RATING, LOWEST_RATING, PHOTOS. Defaults to Chewy's own ordering when omitted.", + "enum": [ + "MOST_RELEVANT", + "NEWEST", + "OLDEST", + "HIGHEST_RATING", + "LOWEST_RATING", + "PHOTOS" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "NEWEST" + }, + { + "description": "Restrict to POSITIVE (4-5 star) or NEGATIVE (1-3 star) reviews. Omit for all.", + "enum": [ + "POSITIVE", + "NEGATIVE" + ], + "in": "query", + "name": "filter", + "type": "string", + "x-example": "POSITIVE" } ], "produces": [ @@ -276967,7 +347786,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" + "$ref": "#/definitions/chewy.reviewsResponseDoc" } }, "400": { @@ -277000,33 +347819,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Allbirds collection products", + "summary": "List a Chewy product's customer reviews, paginated", "tags": [ - "Allbirds" + "Chewy" ] } }, - "/allbirds/pages": { + "/chewy/products": { "get": { "consumes": [ "application/json" ], - "description": "Lists static pages from the Allbirds store, paged with `page` (default 1) and `limit` (default 50, max 250). Each item has `handle`, `title`, `url`, `id`, publish and update times and plain-text `content`. In some responses items carry only `handle`, `url` and `updated_at`.", - "operationId": "allbirds-pages", + "description": "Returns a batch of up to 20 Chewy products' lightweight summaries (price, rating, stock, images) in one call. part_numbers is a comma-separated list of Chewy part numbers, e.g. \"52448,767758\" -- the same value chewy_product returns as part_number/parent_part_number, and chewy_category/chewy_search return as products[].part_number. A part number Chewy does not recognize is omitted from products and listed in not_found rather than causing the whole call to fail.", + "operationId": "chewy-products", "parameters": [ { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Maximum static pages, defaults to 50 and supports up to 250", + "description": "Comma-separated Chewy part numbers, up to 20", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "part_numbers", + "required": true, + "type": "string", + "x-example": "52448,767758" } ], "produces": [ @@ -277036,7 +347849,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pagesResponseDoc" + "$ref": "#/definitions/chewy.productsResponseDoc" } }, "400": { @@ -277063,27 +347876,61 @@ "ApiKeyAuth": [] } ], - "summary": "List Allbirds static pages", + "summary": "Get a batch of Chewy products' lightweight summaries", "tags": [ - "Allbirds" + "Chewy" ] } }, - "/allbirds/pages/{handle}": { + "/chewy/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns one static page from the Allbirds store by its `handle`: title, URL, publish and update times, and `content` as plain text rather than HTML. `id` is omitted on some pages. A handle that does not exist returns 404.", - "operationId": "allbirds-page", + "description": "Returns one page of a Chewy keyword search's product listing (price, autoship price/discount, stock, rating, images), plus embedded facets. q is free-text search keywords, e.g. \"salmon dog food\". A generic query that strongly matches one of Chewy's own categories (e.g. \"dog food\", \"cat litter\", \"leash\") is transparently redirected to that category's listing, the same real results a chewy.com visitor would see -- source_url reflects the actual listing fetched. sort and filter narrow/reorder the listing; every facets[].value paired with one of that facet's options[].value from any prior response is a valid filter key:value pair.", + "operationId": "chewy-search", "parameters": [ { - "description": "Page handle", - "in": "path", - "name": "handle", + "description": "Free-text search keywords", + "in": "query", + "name": "q", "required": true, "type": "string", - "x-example": "page-handle" + "x-example": "salmon dog food" + }, + { + "description": "Page number, 36 products per page (default 1)", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Sort order. One of byRelevance, byNewest, byPopularity, byLowestPrice, byHighestPrice, byRating, byRatingCount. Defaults to Chewy's own relevance ordering when omitted.", + "enum": [ + "byRelevance", + "byNewest", + "byPopularity", + "byLowestPrice", + "byHighestPrice", + "byRating", + "byRatingCount" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "byRating" + }, + { + "collectionFormat": "csv", + "description": "Repeatable, up to 10. Each value is \\", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array", + "x-example": "brand_facet:ACANA" } ], "produces": [ @@ -277093,7 +347940,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pageResponseDoc" + "$ref": "#/definitions/chewy.searchResponseDoc" } }, "400": { @@ -277102,12 +347949,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -277126,33 +347967,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Allbirds static page", + "summary": "Search Chewy by keyword", "tags": [ - "Allbirds" + "Chewy" ] } }, - "/allbirds/products": { + "/chewy/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns products from Allbirds's (https://www.allbirds.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", - "operationId": "allbirds-products", + "description": "Returns Chewy's own search-box typeahead result for a partial query term: search-term suggestions (some resolving directly to a category/brand browse URL via their own url field) plus a handful of educational-content article suggestions. term is a partial query, e.g. \"salmon dog\" or \"blue buff\". Omit term entirely to get what Chewy shows on an empty search box instead: its current Popular Searches (each resolving to a category or brand listing) and Popular Articles.", + "operationId": "chewy-suggest", "parameters": [ { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Maximum products, defaults to 50 and supports up to 250", + "description": "Partial search text, e.g. \\", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "term", + "type": "string", + "x-example": "salmon dog" } ], "produces": [ @@ -277162,7 +347996,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productsResponseDoc" + "$ref": "#/definitions/chewy.suggestResponseDoc" } }, "400": { @@ -277189,27 +348023,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Allbirds products", + "summary": "Chewy search-box typeahead suggestions", "tags": [ - "Allbirds" + "Chewy" ] } }, - "/allbirds/products/{handle}": { + "/chewy/variants": { "get": { "consumes": [ "application/json" ], - "description": "Returns product detail for one Allbirds (https://www.allbirds.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", - "operationId": "allbirds-product", + "description": "Returns the full roster of purchasable variants for the product a given item belongs to -- every size, flavor, or color Chewy sells it in -- with each variant's own part number, price, Autoship price, stock, images, and the defining option that distinguishes it (e.g. Size = Medium). id is the numeric id from any chewy.com PDP URL; passing any one variant's id returns that variant's whole family, and the variant you asked for is flagged with is_requested. This answers a question chewy_product cannot: chewy_product describes only the single variant it was given and names its parent, but never lists the siblings or their prices. Only the defining option is returned, not the full attribute table -- use chewy_item_attributes for that.", + "operationId": "chewy-variants", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", + "description": "The numeric id from a chewy.com PDP URL, e.g. \\", + "in": "query", + "name": "id", "required": true, "type": "string", - "x-example": "product-handle" + "x-example": "185468" } ], "produces": [ @@ -277219,7 +348053,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productResponseDoc" + "$ref": "#/definitions/chewy.variantsResponseDoc" } }, "400": { @@ -277252,45 +348086,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Allbirds product", + "summary": "List every size/flavor variant of a Chewy product", "tags": [ - "Allbirds" + "Chewy" ] } }, - "/allbirds/products/{handle}/recommendations": { + "/chicagotribune/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns recommended products for one Allbirds (https://www.allbirds.com) product handle. The storefront URL is fixed server-side.", - "operationId": "allbirds-product-recommendations", + "description": "Returns public Chicago Tribune article metadata and body paragraphs from a canonical article URL. For subscriber-only articles the response carries the free lead-in with paywalled set to true.", + "operationId": "chicagotribune-article", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", - "required": true, - "type": "string", - "x-example": "product-handle" - }, - { - "description": "Maximum products, defaults to 10 and supports up to 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 - }, - { - "description": "Recommendation intent. Allowed values: related, complementary", - "enum": [ - "related", - "complementary" - ], + "description": "Canonical Chicago Tribune article URL", "in": "query", - "name": "intent", + "name": "url", + "required": true, "type": "string", - "x-example": "related" + "x-example": "https://www.chicagotribune.com/2026/09/24/gov-jb-pritzker-illinois-lawmakers-data-centers/" } ], "produces": [ @@ -277300,7 +348113,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -277315,12 +348128,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -277333,41 +348140,30 @@ "ApiKeyAuth": [] } ], - "summary": "List Allbirds product recommendations", + "summary": "Get Chicago Tribune article content", "tags": [ - "Allbirds" + "Chicago Tribune" ] } }, - "/allbirds/search/suggest": { + "/chicagotribune/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns products, collections, and query suggestions from Allbirds's (https://www.allbirds.com) predictive search. The storefront URL is fixed server-side.", - "operationId": "allbirds-search-suggest", + "description": "Returns one Chicago Tribune author's public profile: name, job title when listed, bio, public email and X/Twitter handle, and their recent articles.", + "operationId": "chicagotribune-author", "parameters": [ { - "description": "Search query", + "description": "Author slug, e.g. olivia-olander", "in": "query", - "name": "q", - "required": true, + "name": "slug", "type": "string", - "x-example": "wool" + "x-example": "olivia-olander" }, { - "description": "Comma-separated suggestion types. Allowed values: product, collection, query", + "description": "Canonical chicagotribune.com/author// URL; alternative to slug", "in": "query", - "name": "types", + "name": "url", "type": "string", - "x-example": "product,collection,query" - }, - { - "description": "Maximum results per type, defaults to 10 and supports up to 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "x-example": "https://www.chicagotribune.com/author/olivia-olander/" } ], "produces": [ @@ -277377,7 +348173,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" + "$ref": "#/definitions/publicnews.chicagoTribuneAuthorResponseDoc" } }, "400": { @@ -277386,8 +348182,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -277404,42 +348200,86 @@ "ApiKeyAuth": [] } ], - "summary": "Get Allbirds search suggestions", + "summary": "Get a Chicago Tribune author profile", "tags": [ - "Allbirds" + "Chicago Tribune" ] } }, - "/allbirds/sitemap/urls": { + "/chicagotribune/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists URL entries from the Allbirds store sitemaps, filtered by `type` (`all`, `products`, `collections`, `pages`, `blogs`, `agentic_discovery` or `other`; default `all`). `limit` defaults to 50 and is capped at 250. Each entry has `loc`, `type`, `handle`, `lastmod`, `changefreq` and optional `images`.", - "operationId": "allbirds-sitemap-urls", + "description": "Returns headlines from one Chicago Tribune section page. `section` is required and takes one of 60 slugs, such as `local-news`, `crime-public-safety`, `chicago-bears`, `restaurants-food-drink` or `naperville-sun`. Each story has a title, article URL, publication time, byline, excerpt and image where the card shows them. Most sections give about 10 stories.", + "operationId": "chicagotribune-headlines", "parameters": [ { - "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", + "description": "Chicago Tribune section slug", "enum": [ - "all", - "products", - "collections", - "pages", - "blogs", - "agentic_discovery", - "other" + "news", + "local-news", + "crime-public-safety", + "politics", + "elections", + "immigration", + "investigations", + "education", + "environment", + "health", + "history", + "marijuana", + "national", + "news-obituaries", + "science", + "weather", + "world", + "business", + "real-estate", + "transportation", + "technology", + "aurora-beacon-news", + "daily-southtown", + "elgin-courier-news", + "lake-county-news-sun", + "naperville-sun", + "post-tribune", + "opinion", + "columnists", + "commentary", + "editorials", + "letters-to-the-editor", + "sports", + "college-sports", + "mlb", + "chicago-cubs", + "chicago-white-sox", + "nfl", + "chicago-bears", + "nba", + "chicago-bulls", + "nhl", + "chicago-blackhawks", + "soccer", + "wnba", + "chicago-sky", + "things-to-do", + "arts", + "books", + "entertainment", + "home-garden", + "movies", + "music-concerts", + "restaurants-food-drink", + "theater", + "travel", + "tv-streaming", + "fitness", + "advice", + "best-reviews" ], "in": "query", - "name": "type", + "name": "section", + "required": true, "type": "string", - "x-example": "products" - }, - { - "description": "Maximum URL entries, defaults to 50 and supports up to 250", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "x-example": "news" } ], "produces": [ @@ -277449,7 +348289,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -277458,12 +348298,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -277476,19 +348310,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Allbirds sitemap URLs", + "summary": "Get Chicago Tribune section headlines", "tags": [ - "Allbirds" + "Chicago Tribune" ] } }, - "/allbirds/sitemaps": { + "/chicagotribune/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the child sitemaps in the Allbirds store's sitemap index, each with its `loc` and a `type` of `products`, `collections`, `pages`, `blogs`, `agentic_discovery` or `other`. Takes no parameters. The types match the `type` filter of `allbirds-sitemap-urls`.", - "operationId": "allbirds-sitemaps", + "description": "Returns the current Chicago Tribune top stories from its homepage, with no input needed. Each has a title and canonical article URL, plus publication time, byline, excerpt and lead image where the story card shows them.", + "operationId": "chicagotribune-news", "produces": [ "application/json" ], @@ -277496,19 +348327,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -277523,19 +348342,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Allbirds sitemaps", + "summary": "Get Chicago Tribune top stories", "tags": [ - "Allbirds" + "Chicago Tribune" ] } }, - "/allbirds/store": { + "/chicagotribune/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns storefront metadata for Allbirds (https://www.allbirds.com). The storefront URL is fixed server-side, so no `url` parameter is accepted.", - "operationId": "allbirds-store", + "description": "Lists the 60 Chicago Tribune sections accepted by `chicagotribune-headlines`, spanning news, suburban papers, opinion, sports teams and arts, such as `crime-public-safety`, `daily-southtown`, `chicago-cubs` and `theater`. Each has a `slug`, display `name` and page `url`. Tag pages and hubs that repeat the homepage are not included.", + "operationId": "chicagotribune-sections", "produces": [ "application/json" ], @@ -277543,25 +348359,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.storeResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -277570,27 +348368,62 @@ "ApiKeyAuth": [] } ], - "summary": "Get Allbirds store metadata", + "summary": "Get Chicago Tribune sections", "tags": [ - "Allbirds" + "Chicago Tribune" ] } }, - "/alt/asset": { + "/chick-fil-a/content": { "get": { "consumes": [ "application/json" ], - "description": "Returns one card design's identity, full population report (across every grading company and grade Alt tracks), and a recent raw sales feed -- the \"is this card actually rare, and what does it sell for\" data for a specific card design, independent of any single listing. asset_id comes from a prior alt-search/alt-sold-listings/alt-card-search result's asset_id field. recent_sales has no per-transaction grade breakdown -- Alt does not expose one; see alt-sold-listings for per-grade sold prices on specific listings.", - "operationId": "alt-asset", + "description": "Returns one page of a Chick-fil-A editorial corpus. `type` selects which: `press-room` (289 press releases), `story` (189 blog articles), `page` (147 standalone corporate pages such as hunger relief and community programmes), `legal` (28 terms, policies and promotion rules) or `downloadable-asset` (45 press-kit media entries, which carry a title and link only and never a body). Between them these are every content-bearing corpus Chick-fil-A publishes outside the menu and restaurant catalogs. Article bodies are opt-in via include_body because a single press release runs to roughly 22KB, so a default-on page of 20 would be several hundred KB; without it the endpoint returns titles, links, publish dates and excerpts.", + "operationId": "chick-fil-a-content", "parameters": [ { - "description": "The card design's asset id, from a Search/SoldListings/CardSearch result's asset_id field", + "description": "Which corpus. One of press-room, story, page, legal, downloadable-asset.", + "enum": [ + "press-room", + "story", + "page", + "legal", + "downloadable-asset" + ], "in": "query", - "name": "asset_id", + "name": "type", "required": true, "type": "string", - "x-example": "c3156728-e7eb-11ea-a6f0-02d4568f26ba" + "x-example": "press-room" + }, + { + "description": "Free-text filter. Results are relevance-ranked when present; otherwise newest first.", + "in": "query", + "name": "search", + "type": "string", + "x-example": "community" + }, + { + "description": "1-based page number (default 1)", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Entries per page, 1-100 (default 20)", + "in": "query", + "name": "per_page", + "type": "integer", + "x-example": 20 + }, + { + "description": "Include the full article body (default false -- bodies are large)", + "in": "query", + "name": "include_body", + "type": "boolean", + "x-example": false } ], "produces": [ @@ -277600,7 +348433,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/alt.assetResponseDoc" + "$ref": "#/definitions/chickfila.contentResponseDoc" } }, "400": { @@ -277615,8 +348448,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -277633,107 +348466,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get one card design's population report and recent sales", + "summary": "Browse Chick-fil-A press releases, legal documents and press-kit assets", "tags": [ - "Alt" + "Chick-fil-A" ] } }, - "/alt/auctions": { + "/chick-fil-a/content-taxonomy": { "get": { "consumes": [ "application/json" ], - "description": "Searches Alt's own currently live auctions -- the same pool shown on alt.xyz/browse's \"Auctions\" tab filtered to the Alt source. Unlike alt-search, this never returns another source auction house's listings or Alt's own fixed-price items. See alt-categories for the accepted category/grading_company/sort values.", - "operationId": "alt-auctions", + "description": "Returns one page of a content taxonomy's terms, each with its id, name, slug, parent and the number of entries carrying it. Every id is a ready-to-use `category` or `tag` filter value on GET /chick-fil-a/content, which is what makes the editorial corpora navigable rather than only pageable. `taxonomy` selects the vocabulary: `press_category` (16 terms) and `press_tag` (96) classify press releases, `story_category` (9) and `story_tag` (74) classify blog stories, `legal_category` (8) and `downloadable_asset_category` (7) classify those corpora, and `campaign` (9) is applied across several at once. Terms are ordered by name.", + "operationId": "chick-fil-a-content-taxonomy", "parameters": [ { - "description": "Free-text search across item name, subject, brand, and variety. Omit or pass * to browse every current Alt auction.", - "in": "query", - "name": "q", - "type": "string", - "x-example": "michael jordan" - }, - { - "description": "Comma-separated card category filter", - "enum": [ - "BASEBALL_CARDS", - "POKEMON_CARDS", - "FOOTBALL_CARDS", - "BASKETBALL_CARDS", - "POP-CULTURE_CARDS", - "HOCKEY_CARDS", - "SOCCER_CARDS", - "ONE_PIECE_CARDS", - "OTHER_CARDS", - "TCG_CARDS", - "COMBAT_SPORTS_CARDS", - "RACING_CARDS", - "MAGIC_CARDS", - "YUGIOH_CARDS", - "GOLF_CARDS", - "TENNIS_CARDS" - ], - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Comma-separated grading company filter", - "enum": [ - "PSA", - "CGC", - "BGS", - "CSG", - "SGC", - "PSA/DNA", - "BVG", - "BCCG", - "Factory Sealed", - "BAS", - "AUTHENTIC", - "TAG", - "RELABEL", - "RECASE", - "JSA/BVG", - "REVIEW", - "INTERNAL", - "NEW/", - "BULK", - "OTHERS", - "UNGRADED" - ], - "in": "query", - "name": "grading_company", - "type": "string" - }, - { - "description": "Result order. Default recommended.", + "description": "Which vocabulary. One of press_category, press_tag, story_category, story_tag, legal_category, downloadable_asset_category, campaign.", "enum": [ - "recommended", - "alt_value_desc", - "alt_value_asc", - "price_desc", - "price_asc", - "watched_desc", - "ending_soonest_asc", - "timestamp_desc" + "press_category", + "press_tag", + "story_category", + "story_tag", + "legal_category", + "downloadable_asset_category", + "campaign" ], "in": "query", - "name": "sort", - "type": "string" + "name": "taxonomy", + "required": true, + "type": "string", + "x-example": "press_category" }, { - "description": "1-based page number, default 1", + "description": "1-based page number (default 1)", "in": "query", "name": "page", - "type": "integer" + "type": "integer", + "x-example": 1 }, { - "description": "Results per page, default 24, max 100", + "description": "Terms per page, 1-100 (default 20)", "in": "query", "name": "per_page", - "type": "integer" + "type": "integer", + "x-example": 100 } ], "produces": [ @@ -277743,7 +348519,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/alt.auctionsResponseDoc" + "$ref": "#/definitions/chickfila.contentTaxonomyResponseDoc" } }, "400": { @@ -277752,14 +348528,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -277776,38 +348552,47 @@ "ApiKeyAuth": [] } ], - "summary": "Search Alt's own live 24/7 auctions", + "summary": "List the category and tag vocabularies Chick-fil-A classifies its content under", "tags": [ - "Alt" + "Chick-fil-A" ] } }, - "/alt/card-search": { + "/chick-fil-a/faq": { "get": { "consumes": [ "application/json" ], - "description": "Searches Alt's reference card-design catalog -- a canonical catalog of card designs (one entry per year/brand/subject/card-number/variety combination), separate from live listings or sales. Useful for finding a card design's asset_id (to feed into alt-asset for a population report and recent sales) without already having a live listing or sale that references it.", - "operationId": "alt-card-search", + "description": "Returns one page of Chick-fil-A's published customer FAQ corpus (522 entries at time of writing) across 30 categories -- Chick-fil-A One membership, points and rewards, digital ordering and payment, delivery support, sweepstakes terms, and more. Each entry carries the question, the answer as plain text, the answer's original HTML (a fair number of answers use links, lists and tables that plain text loses), and its resolved categories. Every categories[].id is a ready-to-use value for the category filter. search matches over question and answer text and is relevance-ranked; without it entries come back alphabetically so a caller can page through the whole corpus deterministically.", + "operationId": "chick-fil-a-faq", "parameters": [ { - "description": "Free-text search across card name, subject, brand, and variety", + "description": "Free-text filter over question and answer text. Results are relevance-ranked when present.", "in": "query", - "name": "q", + "name": "search", "type": "string", - "x-example": "michael jordan" + "x-example": "delivery" }, { - "description": "1-based page number, default 1", + "description": "Comma-separated faq_category term ids, up to 20, from any prior response's categories[].id", + "in": "query", + "name": "category", + "type": "string", + "x-example": "58" + }, + { + "description": "1-based page number (default 1)", "in": "query", "name": "page", - "type": "integer" + "type": "integer", + "x-example": 1 }, { - "description": "Results per page, default 24, max 100", + "description": "Entries per page, 1-100 (default 20)", "in": "query", "name": "per_page", - "type": "integer" + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -277817,7 +348602,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/alt.cardSearchResponseDoc" + "$ref": "#/definitions/chickfila.faqResponseDoc" } }, "400": { @@ -277826,14 +348611,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -277850,19 +348635,35 @@ "ApiKeyAuth": [] } ], - "summary": "Search Alt's reference card-design catalog", + "summary": "Browse Chick-fil-A customer FAQs", "tags": [ - "Alt" + "Chick-fil-A" ] } }, - "/alt/categories": { + "/chick-fil-a/location": { "get": { "consumes": [ "application/json" ], - "description": "Returns every accepted value for alt-search/alt-auctions/alt-sold-listings' category, auction_house, grading_company, and listing_type params, plus the sort enum. category/auction_house/grading_company/listing_type are read live from Alt's own current search index on every call, not a fixed taxonomy -- so this endpoint self-corrects if Alt's aggregator adds a new source auction house, grading company, or category.", - "operationId": "alt-categories", + "description": "Returns one Chick-fil-A restaurant's street address, opening hours, cuisine description and photo, selected by either its numeric id or its slug (supply exactly one of the two -- passing both is rejected). opening_hours carries one entry per day; a day Chick-fil-A publishes as closed (notably every Sunday, and every day for a seasonal or food-truck location that is not currently operating) comes back with closed=true and empty opens/closes rather than a placeholder time. This response carries a postal address but no latitude/longitude -- Chick-fil-A does not publish coordinates for its restaurants, and this endpoint does not synthesize them.", + "operationId": "chick-fil-a-location", + "parameters": [ + { + "description": "Numeric WordPress post id. Supply either id or slug, not both.", + "in": "query", + "name": "id", + "type": "integer", + "x-example": 53696 + }, + { + "description": "Restaurant slug, e.g. from a directory response. Supply either id or slug, not both.", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "branson-food-truck" + } + ], "produces": [ "application/json" ], @@ -277870,7 +348671,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/alt.categoriesResponseDoc" + "$ref": "#/definitions/chickfila.locationResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -277891,41 +348704,40 @@ "ApiKeyAuth": [] } ], - "summary": "List Alt search filter values", + "summary": "Get one Chick-fil-A restaurant's address and hours", "tags": [ - "Alt" + "Chick-fil-A" ] } }, - "/alt/listing": { + "/chick-fil-a/locations": { "get": { "consumes": [ "application/json" ], - "description": "One listing's full public detail -- title, description, price/bid state, grading info, and images -- across Alt's own native listings and its aggregated external listings. id and listing_type come from a prior alt-search/alt-auctions result, or from an alt-sold-listings result's listing_id and listing_type for a completed sale on Alt itself. Not every response field applies to every listing_type -- see the field-level notes in this endpoint's markdown doc.", - "operationId": "alt-listing", + "description": "Returns one page of Chick-fil-A's restaurant directory (3,467 restaurants at time of writing): each restaurant's id, slug, name, US state and its page URL. search filters by free text over restaurant names and is relevance-ranked; without it restaurants come back alphabetically so a caller can page through the whole directory deterministically. This index deliberately carries no address or hours -- Chick-fil-A does not expose them on the directory listing. Pass a slug from here to GET /chick-fil-a/location to get street address and opening hours for one restaurant.", + "operationId": "chick-fil-a-locations", "parameters": [ { - "description": "The listing's id, from a Search/Auctions result's id field, or a sold-listings result's listing_id for a completed sale on Alt itself", + "description": "Free-text filter over restaurant names. Results are relevance-ranked when present.", "in": "query", - "name": "id", - "required": true, + "name": "search", "type": "string", - "x-example": "58e5a6a5-a7ad-417f-8cda-ceffb226928c" + "x-example": "branson" }, { - "description": "The listing's listing_type from the same Search/Auctions result", - "enum": [ - "AUCTION", - "FIXED_PRICE", - "EXTERNAL_AUCTION", - "EXTERNAL_FIXED_PRICE" - ], + "description": "1-based page number (default 1)", "in": "query", - "name": "listing_type", - "required": true, - "type": "string", - "x-example": "AUCTION" + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Restaurants per page, 1-100 (default 20)", + "in": "query", + "name": "per_page", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -277935,7 +348747,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/alt.listingResponseDoc" + "$ref": "#/definitions/chickfila.locationsResponseDoc" } }, "400": { @@ -277950,8 +348762,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -277968,26 +348780,68 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Alt listing's full public detail", + "summary": "Browse Chick-fil-A restaurant locations", "tags": [ - "Alt" + "Chick-fil-A" ] } }, - "/alt/market-trends": { + "/chick-fil-a/menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns Alt's own category-level price-trend index -- the same data alt.xyz's \"Market Trends\" page shows: a weekly/monthly/90-day change and a current index value per card category, built from Alt's own sold/valuation data.", - "operationId": "alt-market-trends", + "description": "Returns one page of Chick-fil-A's published menu catalog (567 items at time of writing): item name, slug, Chick-fil-A's own item tag, an ordering deep link, and the taxonomy term ids the item belongs to. Every id in a response's menu_taxonomy_ids, menu_item_type_ids, menu_item_group_ids and nutrition_table_menu_ids is a ready-to-use filter value for a follow-up call, and GET /chick-fil-a/menu-taxonomy lists each taxonomy's terms with their names. search filters by free text and is ranked by relevance; without it items come back alphabetically so a caller can page through the whole catalog deterministically. Note this catalog carries no prices or nutrition values -- Chick-fil-A does not publish either through this source.", + "operationId": "chick-fil-a-menu", "parameters": [ { - "description": "Optional exact category filter -- must match one of the categories present in the live response (a subset of alt-categories' category list; Alt only publishes a trend index for its own tracked sports categories). Omit to get every tracked category.", + "description": "Free-text filter over item names. Results are relevance-ranked when present.", "in": "query", - "name": "category", + "name": "search", "type": "string", - "x-example": "BASKETBALL_CARDS" + "x-example": "nuggets" + }, + { + "description": "Comma-separated menu_taxonomy term ids (menu section, e.g. Breakfast, Beverages), up to 20", + "in": "query", + "name": "menu_taxonomy", + "type": "string", + "x-example": "265" + }, + { + "description": "Comma-separated menu_item_type term ids (ITEM, ITEM_GROUPING, MODIFIER), up to 20", + "in": "query", + "name": "menu_item_type", + "type": "string", + "x-example": "431" + }, + { + "description": "Comma-separated menu_item_group term ids (the grouping a variant belongs to), up to 20", + "in": "query", + "name": "menu_item_group", + "type": "string", + "x-example": "899" + }, + { + "description": "Comma-separated nutrition_table_menu term ids (published nutrition-table grouping), up to 20", + "in": "query", + "name": "nutrition_table_menu", + "type": "string", + "x-example": "368" + }, + { + "description": "1-based page number (default 1)", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Items per page, 1-100 (default 20)", + "in": "query", + "name": "per_page", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -277997,7 +348851,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/alt.marketTrendsResponseDoc" + "$ref": "#/definitions/chickfila.menuResponseDoc" } }, "400": { @@ -278006,8 +348860,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -278024,134 +348884,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Alt's card-market price-trend index", + "summary": "Browse the Chick-fil-A menu", "tags": [ - "Alt" + "Chick-fil-A" ] } }, - "/alt/search": { + "/chick-fil-a/menu-item": { "get": { "consumes": [ "application/json" ], - "description": "Searches Alt's universal aggregator index -- live auction and fixed-price listings from Alt itself and every other source auction house its search carries (eBay, Fanatics Collect, Pristine Auction, Goldin, CardHobby, Memory Lane) -- by free-text query, category, source auction house, grading company, and listing type, in a caller-selected sort order. Only currently-live listings are returned; see alt-sold-listings for completed sales. See alt-categories for the accepted category/auction_house/grading_company/listing_type/sort values.", - "operationId": "alt-search", + "description": "Returns one Chick-fil-A menu item, selected by either its numeric id or its slug (supply exactly one of the two -- passing both is rejected). Unlike the listing endpoint, this resolves the item's taxonomy term ids to names, so menu_sections, item_types, item_groups and nutrition_tables each come back as {id, name, slug} triples rather than bare ids. Term resolution is best-effort: if the taxonomy lookups fail the item is still returned with ids and empty names rather than failing the whole call. This item detail carries no price and no nutrition values -- Chick-fil-A does not publish either through this source.", + "operationId": "chick-fil-a-menu-item", "parameters": [ { - "description": "Free-text search across item name, subject, brand, and variety. Omit or pass * to browse everything.", - "in": "query", - "name": "q", - "type": "string", - "x-example": "michael jordan" - }, - { - "description": "Comma-separated card category filter", - "enum": [ - "BASEBALL_CARDS", - "POKEMON_CARDS", - "FOOTBALL_CARDS", - "BASKETBALL_CARDS", - "POP-CULTURE_CARDS", - "HOCKEY_CARDS", - "SOCCER_CARDS", - "ONE_PIECE_CARDS", - "OTHER_CARDS", - "TCG_CARDS", - "COMBAT_SPORTS_CARDS", - "RACING_CARDS", - "MAGIC_CARDS", - "YUGIOH_CARDS", - "GOLF_CARDS", - "TENNIS_CARDS" - ], - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Comma-separated source auction house filter", - "enum": [ - "eBay", - "Fanatics Collect", - "Alt", - "Pristine Auction", - "Goldin", - "CardHobby", - "Memory Lane" - ], - "in": "query", - "name": "auction_house", - "type": "string" - }, - { - "description": "Comma-separated grading company filter", - "enum": [ - "PSA", - "CGC", - "BGS", - "CSG", - "SGC", - "PSA/DNA", - "BVG", - "BCCG", - "Factory Sealed", - "BAS", - "AUTHENTIC", - "TAG", - "RELABEL", - "RECASE", - "JSA/BVG", - "REVIEW", - "INTERNAL", - "NEW/", - "BULK", - "OTHERS", - "UNGRADED" - ], - "in": "query", - "name": "grading_company", - "type": "string" - }, - { - "description": "Comma-separated listing type filter. Omit to search auctions and fixed-price listings from every source together.", - "enum": [ - "AUCTION", - "FIXED_PRICE", - "EXTERNAL_AUCTION", - "EXTERNAL_FIXED_PRICE" - ], - "in": "query", - "name": "listing_type", - "type": "string" - }, - { - "description": "Result order. Default recommended.", - "enum": [ - "recommended", - "alt_value_desc", - "alt_value_asc", - "price_desc", - "price_asc", - "watched_desc", - "ending_soonest_asc", - "timestamp_desc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "1-based page number, default 1", + "description": "Numeric WordPress post id. Supply either id or slug, not both.", "in": "query", - "name": "page", - "type": "integer" + "name": "id", + "type": "integer", + "x-example": 10613 }, { - "description": "Results per page, default 24, max 100", + "description": "Item slug, e.g. from a listing response. Supply either id or slug, not both.", "in": "query", - "name": "per_page", - "type": "integer" + "name": "slug", + "type": "string", + "x-example": "chick-fil-a-filet" } ], "produces": [ @@ -278161,7 +348920,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/alt.searchResponseDoc" + "$ref": "#/definitions/chickfila.menuItemResponseDoc" } }, "400": { @@ -278170,14 +348929,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -278194,106 +348953,47 @@ "ApiKeyAuth": [] } ], - "summary": "Search Alt's aggregated card marketplace", + "summary": "Get one Chick-fil-A menu item", "tags": [ - "Alt" + "Chick-fil-A" ] } }, - "/alt/sold-listings": { + "/chick-fil-a/menu-taxonomy": { "get": { "consumes": [ "application/json" ], - "description": "Searches Alt's global archive of completed card sales, aggregated across every source auction house its search carries -- the \"market data\" side of Alt's card-investment-marketplace positioning. This is a separate index from alt-search/alt-auctions, scoped to a rolling recent time window, not a filtered view of live listings. Pass auction_house=Alt to see only Alt's own completed sales. Each of Alt's own sales carries listing_id and listing_type -- pass both to alt-listing to get that item's certificate number -- and its url is the alt.xyz item page; a sale aggregated from another auction house carries that source site's own url instead. See alt-categories for the accepted category/auction_house/grading_company values.", - "operationId": "alt-sold-listings", + "description": "Returns one page of terms for a single Chick-fil-A menu taxonomy, with each term's id, name, slug, parent and how many menu items carry it. This is how to discover the filter ids GET /chick-fil-a/menu accepts. taxonomy must be one of `menu_taxonomy` (customer-facing menu section -- Breakfast, Beverages, Catering Entrées, ... 36 terms), `menu_item_type` (`ITEM`, `ITEM_GROUPING`, `MODIFIER` -- 3 terms), `menu_item_group` (the grouping a variant belongs to, e.g. \"Bacon, Egg & Cheese Biscuit\" -- 100+ terms), or `nutrition_table_menu` (the grouping used by Chick-fil-A's published nutrition tables -- 18 terms). Terms come back alphabetically.", + "operationId": "chick-fil-a-menu-taxonomy", "parameters": [ { - "description": "Free-text search across item name, subject, brand, and variety. Omit or pass * to browse the most recent sales.", - "in": "query", - "name": "q", - "type": "string", - "x-example": "michael jordan" - }, - { - "description": "Comma-separated card category filter", - "enum": [ - "BASEBALL_CARDS", - "POKEMON_CARDS", - "FOOTBALL_CARDS", - "BASKETBALL_CARDS", - "POP-CULTURE_CARDS", - "HOCKEY_CARDS", - "SOCCER_CARDS", - "ONE_PIECE_CARDS", - "OTHER_CARDS", - "TCG_CARDS", - "COMBAT_SPORTS_CARDS", - "RACING_CARDS", - "MAGIC_CARDS", - "YUGIOH_CARDS", - "GOLF_CARDS", - "TENNIS_CARDS" - ], - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Comma-separated source auction house filter. Pass Alt to see only Alt's own completed auctions.", - "enum": [ - "eBay", - "Fanatics Collect", - "Alt", - "Pristine Auction", - "Goldin", - "CardHobby", - "Memory Lane" - ], - "in": "query", - "name": "auction_house", - "type": "string" - }, - { - "description": "Comma-separated grading company filter", + "description": "Which taxonomy to list. One of menu_taxonomy, menu_item_type, menu_item_group, nutrition_table_menu.", "enum": [ - "PSA", - "CGC", - "BGS", - "CSG", - "SGC", - "PSA/DNA", - "BVG", - "BCCG", - "Factory Sealed", - "BAS", - "AUTHENTIC", - "TAG", - "RELABEL", - "RECASE", - "JSA/BVG", - "REVIEW", - "INTERNAL", - "NEW/", - "BULK", - "OTHERS", - "UNGRADED" + "menu_taxonomy", + "menu_item_type", + "menu_item_group", + "nutrition_table_menu" ], "in": "query", - "name": "grading_company", - "type": "string" + "name": "taxonomy", + "required": true, + "type": "string", + "x-example": "menu_taxonomy" }, { - "description": "1-based page number, default 1", + "description": "1-based page number (default 1)", "in": "query", "name": "page", - "type": "integer" + "type": "integer", + "x-example": 1 }, { - "description": "Results per page, default 24, max 100", + "description": "Terms per page, 1-100 (default 20)", "in": "query", "name": "per_page", - "type": "integer" + "type": "integer", + "x-example": 100 } ], "produces": [ @@ -278303,7 +349003,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/alt.soldListingsResponseDoc" + "$ref": "#/definitions/chickfila.menuTaxonomyResponseDoc" } }, "400": { @@ -278312,14 +349012,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -278336,39 +349036,41 @@ "ApiKeyAuth": [] } ], - "summary": "Search Alt's completed sales archive", + "summary": "List one Chick-fil-A menu taxonomy's terms", "tags": [ - "Alt" + "Chick-fil-A" ] } }, - "/alt/top-movers": { + "/chipotle/ingredients": { "get": { "consumes": [ "application/json" ], - "description": "Returns Alt's biggest price-index movers -- either a cross-subject leaderboard (optionally scoped to one category) or, when subject is set, that one player/character's own trend broken out per category it appears in. category is not strictly validated against alt-categories' list -- this trend index's own category set is broader (e.g. it includes MULTI-SPORT_CARDS).", - "operationId": "alt-top-movers", + "description": "Returns Chipotle's raw-ingredient content pages -- sourcing story, marketing copy, imagery -- and the per-item recipe breakdown. ingredients[] has one entry per raw ingredient (Avocado, Yellow Onion, ...), each with its facts/sourcing copy and the menu_item_ids it appears in. ingredient_groups[] is the reverse view: one entry per recipe category (proteins, rice and beans, ...) listing each item's exact ingredient_keys, joinable against ingredients[].key for the human-readable name. Nothing else in this family exposes either ingredient content or recipe-level composition.", + "operationId": "chipotle-ingredients", "parameters": [ { - "description": "Optional category filter for the leaderboard. Ignored when subject is set. Omit to rank movers across every category.", + "description": "Ordering surface. One of web, web-mobile. Default web-mobile.", + "enum": [ + "web", + "web-mobile" + ], "in": "query", - "name": "category", + "name": "channel", "type": "string", - "x-example": "BASKETBALL_CARDS" + "x-example": "web-mobile" }, { - "description": "Optional exact player/subject name. Returns that subject's own trend per category instead of a leaderboard, and category is ignored.", + "description": "Country catalog. One of US, CA. Default US.", + "enum": [ + "US", + "CA" + ], "in": "query", - "name": "subject", + "name": "region", "type": "string", - "x-example": "Michael Jordan" - }, - { - "description": "Max results, default 10, max 50", - "in": "query", - "name": "limit", - "type": "integer" + "x-example": "US" } ], "produces": [ @@ -278378,7 +349080,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/alt.topMoversResponseDoc" + "$ref": "#/definitions/chipotle.ingredientsResponseDoc" } }, "400": { @@ -278387,8 +349089,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -278405,19 +349107,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Alt's biggest card-market price movers", + "summary": "Get Chipotle's ingredient content catalog", "tags": [ - "Alt" + "Chipotle" ] } }, - "/amazon-jobs/categories": { + "/chipotle/meals": { "get": { "consumes": [ "application/json" ], - "description": "Lists every value amazon-jobs/search's `category` parameter accepts, each with its current live job count. Live-queries amazon.jobs's own search category facet rather than a static list, so counts and coverage stay current.", - "operationId": "amazon-jobs-categories", + "description": "Returns Chipotle's preset meal definitions -- the named combinations its ordering flow offers (Build-Your-Own Chicken and similar), each with an id, name, type and a description listing what the meal contains. Takes no parameters.", + "operationId": "chipotle-meals", "produces": [ "application/json" ], @@ -278425,7 +349127,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/amazonjobs.categoriesResponseDoc" + "$ref": "#/definitions/chipotle.mealsResponseDoc" } }, "429": { @@ -278446,29 +349148,19 @@ "ApiKeyAuth": [] } ], - "summary": "Amazon Jobs category discovery", + "summary": "Get Chipotle's preset meal definitions", "tags": [ - "Amazon Jobs" + "Chipotle" ] } }, - "/amazon-jobs/job": { + "/chipotle/menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Amazon.jobs posting by its numeric job id (the `id` field returned by search).", - "operationId": "amazon-jobs-job", - "parameters": [ - { - "description": "Numeric Amazon job id", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "10386857" - } - ], + "description": "Returns Chipotle's restaurant-independent menu catalog -- every item it sells nationally, split into entrees, sides and drinks, with each item's category, type, primary filling and full customization tree. Takes no parameters. Prices are deliberately omitted from this response: Chipotle prices per restaurant, so the upstream returns every price as zero here, and surfacing a field of zeros would read as \"free\" rather than \"unpriced\". Use GET /chipotle/restaurant/menu for real prices.", + "operationId": "chipotle-menu", "produces": [ "application/json" ], @@ -278476,19 +349168,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/amazonjobs.jobResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/chipotle.nationalMenuResponseDoc" } }, "429": { @@ -278509,105 +349189,41 @@ "ApiKeyAuth": [] } ], - "summary": "Amazon Jobs single posting", + "summary": "Get Chipotle's national menu catalog", "tags": [ - "Amazon Jobs" + "Chipotle" ] } }, - "/amazon-jobs/search": { + "/chipotle/menu/metadata": { "get": { "consumes": [ "application/json" ], - "description": "Searches Amazon's public careers site (amazon.jobs). Each result includes the full description and qualifications inline. `sort` accepts `relevant` (default, relevance ranking) or `recent` (newest posted first). Either `q` or `category` (or both) must be given -- `category` filters by Amazon's own job-category taxonomy and works with no text query at all. See `amazon-jobs-categories` for the full, live-verified list of accepted `category` values.", - "operationId": "amazon-jobs-search", + "description": "Returns Chipotle's menu presentation metadata -- the data no other Chipotle endpoint carries. Categories are the menu nav sections (Burrito, Bowl, Salad, ...) with their own description, imagery and the customization sections each offers. Items carry per-item nutrition (calories and portion) and dietary tag codes. Item sections and item groups describe the customization pick-groups and shared item aliases (e.g. cauliflower rice offered as both an entree side and a taco filling). Dietary tag groups are the full tag taxonomy (Plant Based, Lifestyle, I'm Avoiding, ...) that item dietary tag codes join against for a human-readable name and badge. Join on item_id against /chipotle/menu or /chipotle/restaurant/menu for prices; this endpoint has none.", + "operationId": "chipotle-menu-metadata", "parameters": [ { - "description": "Search query. Either q or category is required", - "in": "query", - "name": "q", - "type": "string", - "x-example": "software engineer" - }, - { - "description": "Amazon's own job-category taxonomy slug, case-insensitive. Either q or category is required", + "description": "Ordering surface. One of web, web-mobile. Default web-mobile.", "enum": [ - "administrative-support", - "applied-science", - "audio-video-photography-production", - "business-intelligence", - "business-merchant-development", - "buying-planning-instock-management", - "corporate-operations", - "customer-service", - "data-science", - "database-administration", - "design", - "economics", - "editorial-writing-content-management", - "facilities-maintenance-real-estate", - "finance-accounting", - "fulfillment-associate", - "fulfillment-operations-management", - "fulfillment-warehouse-associate", - "hardware-development", - "human-resources", - "investigation-loss-prevention", - "leadership-development-training", - "legal", - "machine-learning-science", - "marketing-pr", - "medical-health-safety", - "operations-it-support-engineering", - "procurement", - "project-program-product-management-non-tech", - "project-program-product-management-technical", - "public-policy", - "public-relations", - "research-science", - "sales-advertising-account-management", - "software-development", - "solutions-architect", - "supply-chain-transportation-management", - "systems-quality-security-engineering" + "web", + "web-mobile" ], "in": "query", - "name": "category", - "type": "string", - "x-example": "software-development" - }, - { - "description": "ISO 3166-1 alpha-3 country code filter", - "in": "query", - "name": "country", + "name": "channel", "type": "string", - "x-example": "USA" - }, - { - "description": "Page number, 1-based", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Results per page, max 100 (default 20)", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "x-example": "web-mobile" }, { - "description": "Sort order", + "description": "Country catalog. One of US, CA. Default US.", "enum": [ - "relevant", - "recent" + "US", + "CA" ], "in": "query", - "name": "sort", + "name": "region", "type": "string", - "x-example": "relevant" + "x-example": "US" } ], "produces": [ @@ -278617,7 +349233,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/amazonjobs.searchResponseDoc" + "$ref": "#/definitions/chipotle.menuMetadataResponseDoc" } }, "400": { @@ -278644,54 +349260,27 @@ "ApiKeyAuth": [] } ], - "summary": "Amazon Jobs search", + "summary": "Get Chipotle's menu presentation metadata", "tags": [ - "Amazon Jobs" + "Chipotle" ] } }, - "/amazon/charts": { + "/chipotle/restaurant": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a ranked Amazon chart (Best Sellers, New Releases, or Most Wished For) for a department or department subcategory on `amazon.com`. Discover valid department/node values with amazon-charts-categories.", - "operationId": "amazon-charts", + "description": "Returns one Chipotle restaurant by its numeric restaurant number. Note this single-restaurant route returns a leaner record than GET /chipotle/restaurants: the proximity search accepts an embeds parameter that pulls in hours and capability flags, and no such parameter exists here, so those fields may be absent. If you need the full record for a known restaurant, call /chipotle/restaurants with a tight radius around it instead.", + "operationId": "chipotle-restaurant", "parameters": [ { - "description": "Chart type", - "enum": [ - "best_sellers", - "new_releases", - "most_wished_for" - ], - "in": "query", - "name": "chart", - "required": true, - "type": "string", - "x-example": "best_sellers" - }, - { - "description": "Amazon department slug", + "description": "Chipotle's numeric restaurant id", "in": "query", - "name": "department", + "name": "restaurant_number", "required": true, "type": "string", - "x-example": "electronics" - }, - { - "description": "Numeric browse node id", - "in": "query", - "name": "node", - "type": "string", - "x-example": "172541" - }, - { - "description": "1-based page number", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "3982" } ], "produces": [ @@ -278701,7 +349290,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/amazon.chartsResponseDoc" + "$ref": "#/definitions/chipotle.restaurantResponseDoc" } }, "400": { @@ -278722,12 +349311,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -278740,46 +349323,39 @@ "ApiKeyAuth": [] } ], - "summary": "Amazon product charts", + "summary": "Get one Chipotle restaurant", "tags": [ - "Amazon" + "Chipotle" ] } }, - "/amazon/charts/categories": { + "/chipotle/restaurant/meals": { "get": { "consumes": [ "application/json" ], - "description": "Returns the department and subcategory values amazon-charts accepts for a given chart. Omit department to list a chart's top-level departments; pass a department (and optionally a node) to get that category's own name plus its immediate child categories.", - "operationId": "amazon-charts-categories", + "description": "Returns the preset meals one Chipotle restaurant sells -- group Build-Your-Own packs, the High Protein line and limited-time Influencer meals -- each with its dine-in and delivery price at that restaurant, calorie label, dietary and macro tags, the components that make it up, merchandising tags and images. Prices are genuinely restaurant-specific: the same Build-Your-Own Chicken pack is priced differently from one location to another, so this is the endpoint to use for real pricing rather than /chipotle/meals, which lists the national meal definitions with no prices at all. Calorie labels are a range for build-your-own meals and a single figure for fixed ones, so they are returned as strings. Restaurant numbers come from GET /chipotle/restaurants.", + "operationId": "chipotle-restaurant-meals", "parameters": [ { - "description": "Chart type", - "enum": [ - "best_sellers", - "new_releases", - "most_wished_for" - ], + "description": "Chipotle's numeric restaurant id, from /chipotle/restaurants", "in": "query", - "name": "chart", + "name": "restaurant_number", "required": true, "type": "string", - "x-example": "best_sellers" - }, - { - "description": "Amazon department slug", - "in": "query", - "name": "department", - "type": "string", - "x-example": "electronics" + "x-example": "3982" }, { - "description": "Numeric browse node id (requires department)", + "description": "Filter to one meal family. One of BuildYourOwn, HighProtein, Influencer.", + "enum": [ + "BuildYourOwn", + "HighProtein", + "Influencer" + ], "in": "query", - "name": "node", + "name": "meal_type", "type": "string", - "x-example": "172541" + "x-example": "HighProtein" } ], "produces": [ @@ -278789,7 +349365,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/amazon.chartCategoriesResponseDoc" + "$ref": "#/definitions/chipotle.restaurantMealsResponseDoc" } }, "400": { @@ -278810,12 +349386,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -278828,47 +349398,34 @@ "ApiKeyAuth": [] } ], - "summary": "Amazon chart categories", + "summary": "List one Chipotle restaurant's preset meals with prices", "tags": [ - "Amazon" + "Chipotle" ] } }, - "/amazon/product/{asin}": { + "/chipotle/restaurant/menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns product details for an Amazon ASIN on `amazon.com`, including pricing, availability, overview data, inline review samples, and descriptive content.", - "operationId": "amazon-product", + "description": "Returns one restaurant's live online menu split into entrees, sides, drinks and non-food items. This is the only Chipotle endpoint that carries prices: every item has both a dine-in price and a delivery price, which genuinely differ. Each item also carries its full customization tree -- contents (the individual fillings, salsas and sides that make it up, each with their own price pair) and content_groups (how many picks each group allows). Prices are per-restaurant, so two restaurants will legitimately return different numbers for the same item.", + "operationId": "chipotle-restaurant-menu", "parameters": [ { - "description": "Amazon ASIN", - "in": "path", - "name": "asin", + "description": "Chipotle's numeric restaurant id", + "in": "query", + "name": "restaurant_number", "required": true, "type": "string", - "x-example": "B0DGJ736JM" - }, - { - "default": "en_US", - "description": "Amazon language", - "enum": [ - "en_US" - ], - "in": "query", - "name": "language", - "type": "string" + "x-example": "3982" }, { - "default": "USD", - "description": "Amazon currency", - "enum": [ - "USD" - ], + "description": "Include items the restaurant currently has unavailable (default false)", "in": "query", - "name": "currency", - "type": "string" + "name": "include_unavailable", + "type": "boolean", + "x-example": true } ], "produces": [ @@ -278878,7 +349435,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/amazon.productResponseDoc" + "$ref": "#/definitions/chipotle.restaurantMenuResponseDoc" } }, "400": { @@ -278899,12 +349456,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -278917,41 +349468,56 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Amazon product details", + "summary": "Get one Chipotle restaurant's menu with prices", "tags": [ - "Amazon" + "Chipotle" ] } }, - "/amazon/search": { + "/chipotle/restaurants": { "get": { "consumes": [ "application/json" ], - "description": "Searches `amazon.com` by keyword, with optional sort order and page. Each result card has the ASIN, title, link, image, price and list price, rating and review count, the bought-in-last-month figure, and flags for sponsored placement and free delivery.", - "operationId": "amazon-search", + "description": "Returns Chipotle restaurants near a latitude/longitude, ordered by distance. Each restaurant carries its number (the id every other Chipotle endpoint takes), name, status, full postal address with coordinates, published open/close hours per day, nearest cross streets, timezone, and capability flags (Chipotlane pickup, online ordering, catering, curbside pickup, dining room open, walk-up window). A coordinate with no Chipotle nearby returns an empty list rather than an error.", + "operationId": "chipotle-restaurants", "parameters": [ { - "description": "Search keyword", + "description": "Search center latitude", "in": "query", - "name": "k", + "name": "latitude", "required": true, - "type": "string", - "x-example": "apple watch" + "type": "number", + "x-example": 34.0522 }, { - "description": "Sort order", + "description": "Search center longitude", "in": "query", - "name": "s", - "type": "string", - "x-example": "review-rank" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -118.2437 }, { - "description": "1-based page number", + "description": "Search radius in meters, 1-80000 (default 8000)", + "in": "query", + "name": "radius", + "type": "integer", + "x-example": 8000 + }, + { + "description": "Restaurants per page, 1-50 (default 10)", + "in": "query", + "name": "page_size", + "type": "integer", + "x-example": 10 + }, + { + "description": "0-based page index (default 0)", "in": "query", "name": "page", "type": "integer", - "x-example": 1 + "x-example": 0 } ], "produces": [ @@ -278961,7 +349527,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/amazon.searchResponseDoc" + "$ref": "#/definitions/chipotle.restaurantsResponseDoc" } }, "400": { @@ -278982,12 +349548,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -279000,29 +349560,19 @@ "ApiKeyAuth": [] } ], - "summary": "Search Amazon products", + "summary": "Find Chipotle restaurants near a location", "tags": [ - "Amazon" + "Chipotle" ] } }, - "/amazon/suggest/{keyword}": { + "/chromewebstore/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns Amazon's search-box autocomplete suggestions for a keyword prefix on `amazon.com`, as a plain list of suggested search phrases such as `apple watch bands`.", - "operationId": "amazon-suggest", - "parameters": [ - { - "description": "Suggestion prefix", - "in": "path", - "name": "keyword", - "required": true, - "type": "string", - "x-example": "apple" - } - ], + "description": "Returns the reference taxonomy for the list endpoints: extension category groups and their subcategory slugs, the top-chart identifiers, and known curated collection slugs.", + "operationId": "chromewebstore-categories", "produces": [ "application/json" ], @@ -279030,25 +349580,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/amazon.suggestResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/chromewebstore.categoriesResponseDoc" } }, "500": { @@ -279056,12 +349588,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -279069,24 +349595,48 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Amazon search suggestions", + "summary": "List Chrome Web Store categories and collections", "tags": [ - "Amazon" + "ChromeWebStore" ] } }, - "/androidauthority/article": { + "/chromewebstore/category": { "get": { - "description": "Returns an Android Authority article by `url`, a canonical `androidauthority.com` address whose path is one slug ending in the numeric post id: title, description, publication and update times, section, authors, image and body `paragraphs`, with TL;DR and pros/cons bullets as separate entries. Section, tag and author pages are rejected, and an unknown post id returns not-found.", - "operationId": "androidauthority-article", + "consumes": [ + "application/json" + ], + "description": "Returns the item cards listed under an extensions category slug (e.g. `productivity/tools`, `lifestyle/shopping`, `make_chrome_yours/privacy`). Use /chromewebstore/categories for the reference taxonomy. Defaults: `num=50`, `country=us`, `lang=en`.", + "operationId": "chromewebstore-category", "parameters": [ { - "description": "Canonical Android Authority article URL", + "description": "Category slug under extensions", "in": "query", - "name": "url", + "name": "category", "required": true, "type": "string", - "x-example": "https://www.androidauthority.com/gemini-live-avatar-3715280/" + "x-example": "productivity/tools" + }, + { + "description": "Maximum number of items", + "in": "query", + "name": "num", + "type": "integer", + "x-example": 50 + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Two-letter language code", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -279096,7 +349646,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/chromewebstore.listResponseDoc" } }, "400": { @@ -279105,14 +349655,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -279123,70 +349673,52 @@ "ApiKeyAuth": [] } ], - "summary": "Get Android Authority article content", + "summary": "List items in a Chrome Web Store category", "tags": [ - "Android Authority" + "ChromeWebStore" ] } }, - "/androidauthority/headlines": { + "/chromewebstore/charts": { "get": { - "description": "Returns the newest 10 to 20 stories from one Android Authority section hub. `section` is required and takes a slug such as `reviews`, `how-to`, `smartwatches` or `android-phones`. Each item has a title, URL, author and image; `summary` appears on the lead story of a hub, and `published_at` only on stories more than a day old.", - "operationId": "androidauthority-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns the item cards in a store top chart. `chart` accepts `trending`, `popular`, or `notable`. Defaults: `chart=popular`, `num=50`, `country=us`, `lang=en`.", + "operationId": "chromewebstore-charts", "parameters": [ { - "description": "Android Authority section slug", + "default": "popular", + "description": "Top chart to list", "enum": [ - "news", - "reviews", - "best", - "how-to", - "features", - "deals", - "authority-insights", - "audio", - "computers-pc", - "gaming", - "technology", - "mobile", - "smart-home", - "streaming-entertainment", - "wearables", - "earbuds-headphones", - "chromebook", - "mac", - "pc-windows", - "emulation", - "handhelds", - "mobile-games", - "nintendo", - "playstation", - "xbox", - "smart-devices", - "smart-speakers", - "virtual-assistants", - "streaming-hardware", - "ai", - "mobility", - "privacy-security", - "vr-ar", - "fitness-trackers", - "smartwatches", - "android-apps", - "android-os", - "android-phones", - "android-tablets", - "carriers-plans", - "ios-apps", - "iphone-ipad", - "accessories", - "mobile-technology" + "trending", + "popular", + "notable" ], "in": "query", - "name": "section", - "required": true, + "name": "chart", + "type": "string" + }, + { + "description": "Maximum number of items", + "in": "query", + "name": "num", + "type": "integer", + "x-example": 50 + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", "type": "string", - "x-example": "news" + "x-example": "us" + }, + { + "description": "Two-letter language code", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -279196,7 +349728,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/chromewebstore.listResponseDoc" } }, "400": { @@ -279205,46 +349737,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Android Authority section headlines", - "tags": [ - "Android Authority" - ] - } - }, - "/androidauthority/news": { - "get": { - "description": "Returns about 80 of the latest Android Authority stories from across the site, newest first, with no input needed. Each has a title, canonical URL, standfirst `summary`, exact publication time, byline `author` and lead image. The headlines endpoint covers a single section.", - "operationId": "androidauthority-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -279255,56 +349755,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get Android Authority top stories", + "summary": "List a Chrome Web Store top chart", "tags": [ - "Android Authority" + "ChromeWebStore" ] } }, - "/androidauthority/sections": { + "/chromewebstore/collection": { "get": { - "description": "Lists the 44 Android Authority sections that `androidauthority-headlines` accepts: the content-type hubs (`news`, `reviews`, `best`, `how-to`, `features`, `deals`, `authority-insights`), the top-level topic hubs and their sub-hubs. Each has a `slug`, display `name` and page `url`. Tag archives are not sections.", - "operationId": "androidauthority-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Android Authority sections", - "tags": [ - "Android Authority" - ] - } - }, - "/androidpolice/article": { - "get": { - "description": "Returns an Android Police article by `url`, a canonical address with a flat, single-slug path. The response has the title, authors, section, description, publication and update times, image and the readable body `paragraphs`.", - "operationId": "androidpolice-article", + "description": "Returns the item cards in a curated store collection slug (e.g. `editors_picks_extensions`, `dark_mode`, `ai_productivity`). Use /chromewebstore/categories for known collection slugs. Defaults: `num=50`, `country=us`, `lang=en`.", + "operationId": "chromewebstore-collection", "parameters": [ { - "description": "Canonical Android Police article URL", + "description": "Curated collection slug", "in": "query", - "name": "url", + "name": "collection", "required": true, "type": "string", - "x-example": "https://www.androidpolice.com/i-thought-my-galaxy-phone-was-slowing-down-until-disabled-this-setting/" + "x-example": "editors_picks_extensions" + }, + { + "description": "Maximum number of items", + "in": "query", + "name": "num", + "type": "integer", + "x-example": 50 + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Two-letter language code", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -279314,7 +349806,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/chromewebstore.listResponseDoc" } }, "400": { @@ -279323,14 +349815,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -279341,24 +349833,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get Android Police article content", + "summary": "List items in a curated Chrome Web Store collection", "tags": [ - "Android Police" + "ChromeWebStore" ] } }, - "/androidpolice/author": { + "/chromewebstore/developer": { "get": { - "description": "Returns a public author's byline metadata, biography, social links, and recent articles from a canonical author URL. Only the first page is covered.", - "operationId": "androidpolice-author", + "consumes": [ + "application/json" + ], + "description": "Returns a Chrome Web Store publisher (developer) by publisher id, including the disclosed trader details — legal name, email, phone, address, website, and D-U-N-S number — plus the publisher's listed items (\"More from ...\"). Trader fields are only present for publishers that identify as EU traders. Defaults: `num=50`, `country=us`, `lang=en`.", + "operationId": "chromewebstore-developer", "parameters": [ { - "description": "Canonical Android Police author URL", + "description": "Chrome Web Store publisher id (u + 32 hex chars)", "in": "query", - "name": "url", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.androidpolice.com/author/jade-bryan-jardinico/" + "x-example": "u63f06aecfdc45d32c13ccc24f56c3d2d" + }, + { + "description": "Maximum number of items", + "in": "query", + "name": "num", + "type": "integer", + "x-example": 50 + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Two-letter language code", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -279368,7 +349884,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.androidpoliceAuthorResponseDoc" + "$ref": "#/definitions/chromewebstore.developerResponseDoc" } }, "400": { @@ -279383,8 +349899,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -279395,44 +349917,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Android Police author profile", + "summary": "Retrieve a Chrome Web Store publisher and their items", "tags": [ - "Android Police" + "ChromeWebStore" ] } }, - "/androidpolice/headlines": { + "/chromewebstore/item": { "get": { - "description": "Returns recent Android Police headlines for one of 18 sections. `section` is required and takes a slug such as `news`, `phones`, `smart-home`, `ai-machine-learning` or `deals`. Each item has a title and URL, and may also carry a summary, author, publication time and image.", - "operationId": "androidpolice-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns detail for a Chrome Web Store extension or theme, including name, rating, rating count, user count, version, last-updated date, size, supported languages, developer, category, screenshots, and privacy links. Defaults: `country=us`, `lang=en`.", + "operationId": "chromewebstore-item", "parameters": [ { - "description": "Android Police section slug", - "enum": [ - "news", - "phones", - "tablets", - "gadgets", - "accessories", - "apps", - "entertainment", - "productivity", - "utilities", - "ai-machine-learning", - "operating-systems", - "wearables", - "smart-home", - "smart-tv", - "carriers", - "deals", - "videos", - "awards" - ], + "description": "Chrome Web Store item id (32-character extension/theme id)", "in": "query", - "name": "section", + "name": "id", "required": true, "type": "string", - "x-example": "news" + "x-example": "cjpalhdlnbpafiamejdnhcphjbkeiagm" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Two-letter language code", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -279442,7 +349961,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/chromewebstore.itemResponseDoc" } }, "400": { @@ -279451,14 +349970,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -279469,16 +349994,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get Android Police section headlines", + "summary": "Retrieve Chrome Web Store item details", "tags": [ - "Android Police" + "ChromeWebStore" ] } }, - "/androidpolice/news": { + "/chromewebstore/permissions": { "get": { - "description": "Returns the current Android Police top stories across the site, with no input needed. Each item has a title and URL, and may also carry the author, publication time, summary and image.", - "operationId": "androidpolice-news", + "consumes": [ + "application/json" + ], + "description": "Returns the permissions a Chrome Web Store extension declares in its manifest: `permissions`, `optional_permissions`, `host_permissions`, `optional_host_permissions`, plus `manifest_version` and `min_browser_version`. Useful for security and supply-chain review. Defaults: `country=us`, `lang=en`.", + "operationId": "chromewebstore-permissions", + "parameters": [ + { + "description": "Chrome Web Store item id (32-character extension id)", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "cjpalhdlnbpafiamejdnhcphjbkeiagm" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Two-letter language code", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en" + } + ], "produces": [ "application/json" ], @@ -279486,52 +350038,32 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/chromewebstore.permissionsResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Android Police top stories", - "tags": [ - "Android Police" - ] - } - }, - "/androidpolice/sections": { - "get": { - "description": "Lists the 18 feed-backed sections in Android Police's primary navigation, from `news`, `phones` and `tablets` to `deals`, `videos` and `awards`. Each entry has a `slug`, a display `name` and the feed `url`, and the slugs are accepted by `androidpolice-headlines`.", - "operationId": "androidpolice-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -279539,31 +350071,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get Android Police sections", + "summary": "Retrieve a Chrome Web Store item's declared permissions", "tags": [ - "Android Police" + "ChromeWebStore" ] } }, - "/anime/airing-schedule": { + "/chromewebstore/privacy": { "get": { "consumes": [ "application/json" ], - "description": "Returns upcoming anime episode broadcasts (episode number, air time, countdown, and the title), soonest first, paginated.", - "operationId": "anime-airing-schedule", + "description": "Returns an extension's privacy disclosures as the store renders them: the developer's data-use statement, whether it collects data, the standard data-handling declarations, and the privacy-policy link. Defaults: `country=us`, `lang=en`.", + "operationId": "chromewebstore-privacy", "parameters": [ { - "description": "1-based page number, default 1", + "description": "Chrome Web Store item id (32-character extension/theme id)", "in": "query", - "name": "page", - "type": "integer" + "name": "id", + "required": true, + "type": "string", + "x-example": "cjpalhdlnbpafiamejdnhcphjbkeiagm" }, { - "description": "Results per page, default 20, max 50", + "description": "Two-letter storefront country code", "in": "query", - "name": "per_page", - "type": "integer" + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Two-letter language code", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -279573,7 +350115,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.airingScheduleResponseDoc" + "$ref": "#/definitions/chromewebstore.privacyResponseDoc" } }, "400": { @@ -279582,14 +350124,20 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -279600,39 +350148,59 @@ "ApiKeyAuth": [] } ], - "summary": "Upcoming anime airing schedule", + "summary": "Retrieve a Chrome Web Store item's privacy disclosures", "tags": [ - "Anime" + "ChromeWebStore" ] } }, - "/anime/character/search": { + "/chromewebstore/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Searches anime and manga characters by name. Returns character summaries (name, native name, image, favourites), paginated.", - "operationId": "anime-character-search", + "description": "Returns the reviews the store renders on an item's reviews page, each with author, star rating, text, posted/edited dates and reviewed version. Defaults: `num=20`, `country=us`, `lang=en`.", + "operationId": "chromewebstore-reviews", "parameters": [ { - "description": "Search text", + "description": "Chrome Web Store item id (32-character extension/theme id)", "in": "query", - "name": "query", + "name": "id", "required": true, "type": "string", - "x-example": "Frieren" + "x-example": "cjpalhdlnbpafiamejdnhcphjbkeiagm" }, { - "description": "1-based page number, default 1", + "description": "Maximum number of reviews", "in": "query", - "name": "page", - "type": "integer" + "name": "num", + "type": "integer", + "x-example": 100 }, { - "description": "Results per page, default 10, max 50", + "default": "recent", + "description": "Review sort order", + "enum": [ + "recent", + "helpful" + ], "in": "query", - "name": "per_page", - "type": "integer" + "name": "sort", + "type": "string" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Two-letter language code", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -279642,7 +350210,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.characterSearchResponseDoc" + "$ref": "#/definitions/chromewebstore.reviewsResponseDoc" } }, "400": { @@ -279651,14 +350219,20 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -279669,27 +350243,48 @@ "ApiKeyAuth": [] } ], - "summary": "Search anime & manga characters", + "summary": "Retrieve Chrome Web Store item reviews", "tags": [ - "Anime" + "ChromeWebStore" ] } }, - "/anime/character/{id}": { + "/chromewebstore/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a character profile by AniList id: names, image, description, gender, age, blood type, birthday, favourites, and the titles the character appears in with their billed role.", - "operationId": "anime-character", + "description": "Returns Chrome Web Store search result cards for a keyword, each with id, name, rating, user count, publisher and detail URL. Defaults: `num=30`, `country=us`, `lang=en`.", + "operationId": "chromewebstore-search", "parameters": [ { - "description": "AniList character id", - "in": "path", - "name": "id", + "description": "Search keyword", + "in": "query", + "name": "term", "required": true, "type": "string", - "x-example": "176754" + "x-example": "vpn" + }, + { + "description": "Maximum number of results", + "in": "query", + "name": "num", + "type": "integer", + "x-example": 30 + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Two-letter language code", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -279699,7 +350294,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.characterResponseDoc" + "$ref": "#/definitions/chromewebstore.searchResponseDoc" } }, "400": { @@ -279708,8 +350303,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -279719,12 +350314,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -279732,97 +350321,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get an anime/manga character", + "summary": "Search Chrome Web Store items", "tags": [ - "Anime" + "ChromeWebStore" ] } }, - "/anime/rankings": { + "/chromewebstore/similar": { "get": { "consumes": [ "application/json" ], - "description": "Ranks anime by `sort` (default `TRENDING_DESC`, or `POPULARITY_DESC`, `SCORE_DESC`, `FAVOURITES_DESC`, `START_DATE_DESC`, `UPDATED_AT_DESC`). Filter by `season`, `season_year` (1940 to 2100), `format`, `genre` and `status`. Paged with `page` and `per_page` (default 20, max 50); results carry titles, scores, popularity, episodes, studios and tags.", - "operationId": "anime-rankings", + "description": "Returns the related-items shelf shown on a Chrome Web Store item's page. `id` is the required 32-character item id; `country` and `lang` default to `us` and `en`. Each card has name, publisher, category, rating, rating count, users, summary, icon and URL. An unknown or removed id returns 404.", + "operationId": "chromewebstore-similar", "parameters": [ { - "description": "Order: TRENDING_DESC, POPULARITY_DESC, SCORE_DESC, FAVOURITES_DESC, START_DATE_DESC, UPDATED_AT_DESC. Default TRENDING_DESC.", - "enum": [ - "TRENDING_DESC", - "POPULARITY_DESC", - "SCORE_DESC", - "FAVOURITES_DESC", - "START_DATE_DESC", - "UPDATED_AT_DESC" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Airing season filter: WINTER, SPRING, SUMMER, FALL.", - "enum": [ - "WINTER", - "SPRING", - "SUMMER", - "FALL" - ], - "in": "query", - "name": "season", - "type": "string" - }, - { - "description": "Airing year filter, 1940-2100.", - "in": "query", - "name": "season_year", - "type": "integer" - }, - { - "description": "Format filter: TV, TV_SHORT, MOVIE, SPECIAL, OVA, ONA, MUSIC.", - "enum": [ - "TV", - "TV_SHORT", - "MOVIE", - "SPECIAL", - "OVA", - "ONA", - "MUSIC" - ], - "in": "query", - "name": "format", - "type": "string" - }, - { - "description": "Genre filter, e.g. Fantasy.", - "in": "query", - "name": "genre", - "type": "string" - }, - { - "description": "Status filter: FINISHED, RELEASING, NOT_YET_RELEASED, CANCELLED, HIATUS.", - "enum": [ - "FINISHED", - "RELEASING", - "NOT_YET_RELEASED", - "CANCELLED", - "HIATUS" - ], + "description": "Chrome Web Store item id (32-character extension/theme id)", "in": "query", - "name": "status", - "type": "string" + "name": "id", + "required": true, + "type": "string", + "x-example": "cjpalhdlnbpafiamejdnhcphjbkeiagm" }, { - "description": "1-based page number, default 1", + "description": "Two-letter storefront country code", "in": "query", - "name": "page", - "type": "integer" + "name": "country", + "type": "string", + "x-example": "us" }, { - "description": "Results per page, default 20, max 50", + "description": "Two-letter language code", "in": "query", - "name": "per_page", - "type": "integer" + "name": "lang", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -279832,7 +350365,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.rankingsResponseDoc" + "$ref": "#/definitions/chromewebstore.similarResponseDoc" } }, "400": { @@ -279841,14 +350374,20 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -279859,53 +350398,48 @@ "ApiKeyAuth": [] } ], - "summary": "Rank anime", + "summary": "Retrieve related Chrome Web Store items", "tags": [ - "Anime" + "ChromeWebStore" ] } }, - "/anime/search": { + "/chromewebstore/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Searches anime by free-text query. Returns entries: titles, scores, popularity, format, status, season, genres, tags, and studios.", - "operationId": "anime-search", + "description": "Returns search-term suggestions for a Chrome Web Store prefix given in `term`, up to `num` (default 8), with `country` and `lang` defaulting to `us` and `en`. Suggestions are the distinct item names of the top store-search results for that prefix, each returned as a `term`.", + "operationId": "chromewebstore-suggest", "parameters": [ { - "description": "Search text", + "description": "Search prefix to autocomplete", "in": "query", - "name": "query", + "name": "term", "required": true, "type": "string", - "x-example": "Frieren" + "x-example": "ad blo" }, { - "description": "Ordering: SEARCH_MATCH, POPULARITY_DESC, SCORE_DESC, TRENDING_DESC, FAVOURITES_DESC, START_DATE_DESC. Default SEARCH_MATCH.", - "enum": [ - "SEARCH_MATCH", - "POPULARITY_DESC", - "SCORE_DESC", - "TRENDING_DESC", - "FAVOURITES_DESC", - "START_DATE_DESC" - ], + "description": "Maximum number of suggestions", "in": "query", - "name": "sort", - "type": "string" + "name": "num", + "type": "integer", + "x-example": 8 }, { - "description": "1-based page number, default 1", + "description": "Two-letter storefront country code", "in": "query", - "name": "page", - "type": "integer" + "name": "country", + "type": "string", + "x-example": "us" }, { - "description": "Results per page, default 10, max 50", + "description": "Two-letter language code", "in": "query", - "name": "per_page", - "type": "integer" + "name": "lang", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -279915,7 +350449,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.searchResponseDoc" + "$ref": "#/definitions/chromewebstore.suggestResponseDoc" } }, "400": { @@ -279924,14 +350458,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -279942,33 +350476,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search anime", + "summary": "Suggest Chrome Web Store search terms", "tags": [ - "Anime" + "ChromeWebStore" ] } }, - "/anime/title/{id}": { + "/chrono24/autocomplete": { "get": { "consumes": [ "application/json" ], - "description": "Returns an anime by AniList id: titles (romaji/english/native), MyAnimeList id, scores, popularity, favourites, format, status, season, episodes, duration, genres, ranked tags, studios, dates, description, images, and next-airing countdown. Pass mal=true to additionally enrich the response with the MyAnimeList community score (mal block: score on a 0-10 scale, plus scored-by count).", - "operationId": "anime-title", + "description": "Fetches Chrono24's own search-box typeahead suggestions for a partial query: each suggested phrase with its own live result count, plus the Chrono24 search URL it resolves to. Useful for building a search box against chrono24-search without guessing a full query.", + "operationId": "chrono24-autocomplete", "parameters": [ { - "description": "AniList anime id", - "in": "path", - "name": "id", + "description": "Partial search text, e.g. \\", + "in": "query", + "name": "query", "required": true, "type": "string", - "x-example": "154587" - }, - { - "description": "Enrich with the MyAnimeList community score (adds one fetch; omitted when the title has no MAL id)", - "in": "query", - "name": "mal", - "type": "boolean" + "x-example": "submar" } ], "produces": [ @@ -279978,7 +350506,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.mediaResponseDoc" + "$ref": "#/definitions/chrono24.autocompleteResponseDoc" } }, "400": { @@ -279987,12 +350515,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -280011,41 +350533,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get an anime", + "summary": "Get Chrono24 search-box suggestions", "tags": [ - "Anime" + "Chrono24" ] } }, - "/anime/title/{id}/characters": { + "/chrono24/brands": { "get": { "consumes": [ "application/json" ], - "description": "Lists the cast of an anime by its AniList anime `id`, sorted by billed role. Each character has `name`, `native_name`, `role` (such as `MAIN` or `SUPPORTING`), `image`, `favourites` and `site_url`. Paged with `page` (default 1) and `per_page` (default 10, max 50), with `total` and `has_next_page`.", - "operationId": "anime-title-characters", - "parameters": [ - { - "description": "AniList anime id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "154587" - }, - { - "description": "1-based page number, default 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Results per page, default 10, max 50", - "in": "query", - "name": "per_page", - "type": "integer" - } - ], + "description": "Returns Chrono24's full watch-brand index: every brand name and the slug identifying it, usable as the brand parameter on chrono24-models and chrono24-search. This is the discovery endpoint for that parameter, so every accepted value is obtainable from this API rather than by reading the website.", + "operationId": "chrono24-brands", "produces": [ "application/json" ], @@ -280053,19 +350553,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.charactersResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/chrono24.brandsResponseDoc" } }, "500": { @@ -280086,39 +350574,27 @@ "ApiKeyAuth": [] } ], - "summary": "List an anime's characters", + "summary": "List Chrono24 watch brands", "tags": [ - "Anime" + "Chrono24" ] } }, - "/anime/title/{id}/recommendations": { + "/chrono24/dealer": { "get": { "consumes": [ "application/json" ], - "description": "Returns community-recommended titles for an anime, each with a recommendation rating and the full media entry, paginated.", - "operationId": "anime-title-recommendations", + "description": "Fetches one Chrono24 dealer/seller's public storefront page: business description, trust badge, average buyer rating and review count, lifetime watches-sold count, and their current listed inventory in the same shape chrono24-search returns. slug is found in a chrono24-search or chrono24-listing result's seller link; there is no separate dealer-discovery endpoint since dealer slugs are not a closed set Chrono24 publishes an index of.", + "operationId": "chrono24-dealer", "parameters": [ { - "description": "AniList anime id", - "in": "path", - "name": "id", + "description": "Dealer slug from a listing's seller link", + "in": "query", + "name": "slug", "required": true, "type": "string", - "x-example": "154587" - }, - { - "description": "1-based page number, default 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Results per page, default 10, max 50", - "in": "query", - "name": "per_page", - "type": "integer" + "x-example": "thetimelords" } ], "produces": [ @@ -280128,7 +350604,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.recommendationsResponseDoc" + "$ref": "#/definitions/chrono24.dealerResponseDoc" } }, "400": { @@ -280161,39 +350637,66 @@ "ApiKeyAuth": [] } ], - "summary": "List an anime's recommendations", + "summary": "Get a Chrono24 dealer's storefront", "tags": [ - "Anime" + "Chrono24" ] } }, - "/anime/title/{id}/staff": { + "/chrono24/dealer/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Lists the people credited on an anime by its AniList anime `id`. Each person has `name`, `native_name`, `role` (their production role), `occupations`, `image` and `site_url`. Paged with `page` (default 1) and `per_page` (default 10, max 50), with `total` and `has_next_page`.", - "operationId": "anime-title-staff", + "description": "Fetches one page of a Chrono24 dealer/seller's buyer reviews: reviewer name and country, review date, star-rating breakdown (shipping/description/communication), whether the buyer recommends the seller, their free-text comment, and the dealer's own reply when present. slug is the same dealer slug chrono24-dealer takes.", + "operationId": "chrono24-dealer-reviews", "parameters": [ { - "description": "AniList anime id", - "in": "path", - "name": "id", + "description": "Dealer slug from a listing's seller link", + "in": "query", + "name": "slug", "required": true, "type": "string", - "x-example": "154587" + "x-example": "thetimelords" }, { - "description": "1-based page number, default 1", + "default": 1, + "description": "One-based result page", "in": "query", + "minimum": 1, "name": "page", "type": "integer" }, { - "description": "Results per page, default 10, max 50", + "default": 10, + "description": "Reviews per page, 1-50", "in": "query", - "name": "per_page", + "maximum": 50, + "minimum": 1, + "name": "page_size", "type": "integer" + }, + { + "default": 0, + "description": "Keep only reviews rating the dealer at least this many stars, 0-5. 0 returns every review", + "in": "query", + "maximum": 5, + "minimum": 0, + "name": "min_stars", + "type": "integer" + }, + { + "default": "relevance", + "description": "Result order. One of: relevance, newest, with_recommendation, without_recommendation", + "enum": [ + "relevance", + "newest", + "with_recommendation", + "without_recommendation" + ], + "in": "query", + "name": "sort", + "type": "string" } ], "produces": [ @@ -280203,7 +350706,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.staffResponseDoc" + "$ref": "#/definitions/chrono24.dealerReviewsResponseDoc" } }, "400": { @@ -280236,30 +350739,38 @@ "ApiKeyAuth": [] } ], - "summary": "List an anime's staff", + "summary": "Get a Chrono24 dealer's buyer reviews", "tags": [ - "Anime" + "Chrono24" ] } }, - "/apk-teardown/compare-ownership": { + "/chrono24/facets": { "get": { - "description": "Compares two DIFFERENT completed jobs (not versions of the same app) for signals of common ownership -- shared signing certificate, SDK/analytics identifiers, and more.", - "operationId": "apkTeardownCompareOwnership", + "consumes": [ + "application/json" + ], + "description": "Fetches every value Chrono24 accepts for one of chrono24-search's advanced-search filter params, each with its own live listing count: the discovery endpoint for condition, used_or_new, case_material, dial_color, bracelet_material, movement_type, gender, watch_type and stock_info.", + "operationId": "chrono24-facets", "parameters": [ { - "description": "First completed job ID; copy data.job_id returned by POST /apk-teardown/jobs", - "in": "query", - "name": "job_id_a", - "required": true, - "type": "string" - }, - { - "description": "Second completed job ID; copy data.job_id returned by another POST /apk-teardown/jobs", + "description": "Filter to list values for", + "enum": [ + "condition", + "usedOrNew", + "caseMaterial", + "dialColor", + "braceletMaterial", + "movementType", + "gender", + "watchType", + "stockInfo" + ], "in": "query", - "name": "job_id_b", + "name": "group", "required": true, - "type": "string" + "type": "string", + "x-example": "condition" } ], "produces": [ @@ -280269,59 +350780,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/apkteardown.CompareOwnershipResponseDoc" + "$ref": "#/definitions/chrono24.facetsResponseDoc" } }, "400": { - "description": "Missing job ids, or one/both jobs not found or not done", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Compare two apk-teardown jobs for evidence of common ownership", - "tags": [ - "AppInsights" - ] - } - }, - "/apk-teardown/diff": { - "get": { - "description": "Compares two already-completed jobs -- typically two versions of the same app -- and returns what changed (permissions, signing, SDKs, size, and more).", - "operationId": "apkTeardownDiff", - "parameters": [ - { - "description": "First completed job ID; copy data.job_id returned by POST /apk-teardown/jobs", - "in": "query", - "name": "job_id_a", - "required": true, - "type": "string" }, - { - "description": "Second completed job ID; copy data.job_id returned by another POST /apk-teardown/jobs", - "in": "query", - "name": "job_id_b", - "required": true, - "type": "string" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + "500": { + "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/apkteardown.DiffResponseDoc" + "$ref": "#/definitions/app.Response" } }, - "400": { - "description": "Missing job ids, or one/both jobs not found or not done", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -280332,43 +350807,27 @@ "ApiKeyAuth": [] } ], - "summary": "Diff two completed apk-teardown jobs", + "summary": "Get a Chrono24 search filter's accepted values", "tags": [ - "AppInsights" + "Chrono24" ] } }, - "/apk-teardown/jobs": { - "post": { + "/chrono24/listing": { + "get": { "consumes": [ - "multipart/form-data" + "application/json" ], - "description": "Uploads a single .apk/.xapk file (up to 400MB), or set file_url to have the server fetch it from an https:// URL instead -- exactly one of \"file\" or \"file_url\" must be given, not both. Enqueues a Tier 1 static-analysis job -- manifest, permissions, signing, SDK detection, tech stack, locales, and more. Poll the returned poll_path for the result, or set webhook_url for push delivery. Identical uploads (by sha256) within 48h return the existing job instead of re-running analysis. file_url is validated (https only, must resolve to a public address -- no loopback/private/link-local targets) and every redirect hop is re-validated the same way before being followed.", - "operationId": "apkTeardownSubmit", + "description": "Fetches one Chrono24 listing's full detail page: brand, model, reference number, price with currency and negotiability, condition, year of production, movement, case material and diameter, bracelet material, location, availability, seller type, photos, and the complete raw spec table Chrono24 itself shows (grouped by section: Basic Info, Caliber, Case, Bracelet/strap, Functions). path is the listing URL from a chrono24-search result's url field; Chrono24 has no lookup by numeric id alone.", + "operationId": "chrono24-listing", "parameters": [ { - "description": "APK or XAPK/APKS/APKM bundle file -- mutually exclusive with file_url", - "in": "formData", - "name": "file", - "type": "file" - }, - { - "description": "https:// URL to fetch the APK/bundle from server-side -- mutually exclusive with file", - "in": "formData", - "name": "file_url", - "type": "string" - }, - { - "description": "Declared filename for a file_url submission (must end .apk/.xapk/.apks/.apkm). Defaults to the URL path's basename when omitted.", - "in": "formData", - "name": "file_name", - "type": "string" - }, - { - "description": "Optional URL to receive a webhook POST when the job reaches a terminal state", - "in": "formData", - "name": "webhook_url", - "type": "string" + "description": "Listing URL or path from a chrono24-search result's url field", + "in": "query", + "name": "path", + "required": true, + "type": "string", + "x-example": "https://www.chrono24.com/rolex/datejust-36--id40700313.htm" } ], "produces": [ @@ -280378,29 +350837,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/apkteardown.JobSubmitResponseDoc" + "$ref": "#/definitions/chrono24.listingResponseDoc" } }, "400": { - "description": "Missing/invalid file or file_url, oversized upload, or not a valid APK/ZIP", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too many apk-teardown jobs already in flight for this caller", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal error submitting the job", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "502": { - "description": "file_url could not be fetched", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -280411,23 +350870,27 @@ "ApiKeyAuth": [] } ], - "summary": "Submit an APK for static teardown analysis", + "summary": "Get a Chrono24 watch listing's detail", "tags": [ - "AppInsights" + "Chrono24" ] } }, - "/apk-teardown/jobs/{job_id}": { - "delete": { - "description": "Purges a job's metadata/result before its normal retention window expires. The uploaded binary is already gone by the time any job reaches a terminal state, so this only ever deletes job metadata, never a binary.", - "operationId": "apkTeardownDeleteJob", + "/chrono24/models": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns every model/collection Chrono24 lists for one watch brand (e.g. Rolex Submariner, Rolex Datejust), each with the slug identifying it, usable as the model parameter on chrono24-search. This is the discovery endpoint for that parameter, so every accepted value for a brand is obtainable from this API rather than by reading the website.", + "operationId": "chrono24-models", "parameters": [ { - "description": "Caller-owned job ID from data.job_id returned by POST /apk-teardown/jobs", - "in": "path", - "name": "job_id", + "description": "Brand slug from chrono24-brands", + "in": "query", + "name": "brand", "required": true, - "type": "string" + "type": "string", + "x-example": "rolex" } ], "produces": [ @@ -280437,17 +350900,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/chrono24.modelsResponseDoc" } }, "400": { - "description": "job_id is required", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal error deleting the job", + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -280458,20 +350927,231 @@ "ApiKeyAuth": [] } ], - "summary": "Delete an apk-teardown job", + "summary": "List Chrono24 models for a brand", "tags": [ - "AppInsights" + "Chrono24" ] - }, + } + }, + "/chrono24/search": { "get": { - "description": "Returns the current status (queued, processing, done, failed, or lost) of a submitted job, and its full result once done.", - "operationId": "apkTeardownJobStatus", + "consumes": [ + "application/json" + ], + "description": "Searches Chrono24's luxury-watch marketplace by free-text keyword, or browses one brand's (optionally narrowed to one model's) current listings, returning result cards: title, price with currency, seller type, seller country, promotional badge, image, and the listing URL to pass to chrono24-listing. At least one of query or brand is required. Optional advanced-search filters (condition, used_or_new, case_material, dial_color, bracelet_material, movement_type, gender, watch_type, stock_info) narrow results further; each filter's accepted values are discoverable from chrono24-facets and echoed back in the response's filters field.", + "operationId": "chrono24-search", "parameters": [ { - "description": "Job ID from data.job_id returned by POST /apk-teardown/jobs; the response also supplies poll_path", - "in": "path", - "name": "job_id", - "required": true, + "description": "Free-text keyword search, e.g. \\", + "in": "query", + "name": "query", + "type": "string", + "x-example": "rolex submariner" + }, + { + "description": "Brand slug from chrono24-brands. At least one of query or brand is required", + "in": "query", + "name": "brand", + "type": "string", + "x-example": "rolex" + }, + { + "description": "Model slug from chrono24-models (requires brand)", + "in": "query", + "name": "model", + "type": "string", + "x-example": "submariner--mod1" + }, + { + "default": "relevance", + "description": "Result order. One of: relevance, price_asc, price_desc, newest, popularity", + "enum": [ + "relevance", + "price_asc", + "price_desc", + "newest", + "popularity" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": 1, + "description": "One-based result page", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "description": "Results per page. Chrono24's own UI offers 30, 60 or 120; defaults to Chrono24's own default", + "in": "query", + "name": "page_size", + "type": "integer", + "x-example": 60 + }, + { + "description": "Advanced-search filter, values from chrono24-facets group=condition", + "enum": [ + "new", + "like_new_unworn", + "very_good", + "good", + "fair", + "incomplete", + "no_details" + ], + "in": "query", + "name": "condition", + "type": "string" + }, + { + "description": "Advanced-search filter, values from chrono24-facets group=usedOrNew", + "enum": [ + "new", + "used", + "no_details" + ], + "in": "query", + "name": "used_or_new", + "type": "string" + }, + { + "description": "Advanced-search filter, values from chrono24-facets group=caseMaterial", + "enum": [ + "aluminum", + "brass", + "bronze", + "carbon", + "ceramic", + "gold_steel", + "gold_plated", + "palladium", + "plastic", + "platinum", + "rose_gold", + "sapphire_crystal", + "silver", + "steel", + "tantalum", + "titanium", + "tungsten", + "white_gold", + "yellow_gold", + "no_details" + ], + "in": "query", + "name": "case_material", + "type": "string" + }, + { + "description": "Advanced-search filter, values from chrono24-facets group=dialColor", + "enum": [ + "black", + "blue", + "bordeaux", + "bronze", + "brown", + "champagne", + "gold", + "green", + "grey", + "meteorite", + "mother_of_pearl", + "orange", + "pink", + "purple", + "red", + "silver", + "skeletonized", + "turquoise", + "white", + "yellow", + "no_details" + ], + "in": "query", + "name": "dial_color", + "type": "string" + }, + { + "description": "Advanced-search filter, values from chrono24-facets group=braceletMaterial", + "enum": [ + "alligator_skin", + "aluminium", + "brass", + "calf_skin", + "ceramic", + "crocodile_skin", + "gold_steel", + "gold_plated", + "leather", + "lizard_skin", + "ostrich_skin", + "plastic", + "platinum", + "red_gold", + "rose_gold", + "rubber", + "satin", + "shark_skin", + "silicon", + "silver", + "snake_skin", + "steel", + "textile", + "titanium", + "white_gold", + "yellow_gold", + "no_details" + ], + "in": "query", + "name": "bracelet_material", + "type": "string" + }, + { + "description": "Advanced-search filter, values from chrono24-facets group=movementType", + "enum": [ + "automatic", + "manual_winding", + "quartz", + "solar", + "smartwatch", + "no_details" + ], + "in": "query", + "name": "movement_type", + "type": "string" + }, + { + "description": "Advanced-search filter, values from chrono24-facets group=gender", + "enum": [ + "mens_unisex", + "womens" + ], + "in": "query", + "name": "gender", + "type": "string" + }, + { + "description": "Advanced-search filter, values from chrono24-facets group=watchType", + "enum": [ + "watches", + "parts_accessories" + ], + "in": "query", + "name": "watch_type", + "type": "string" + }, + { + "description": "Advanced-search filter, values from chrono24-facets group=stockInfo", + "enum": [ + "in_stock", + "on_order", + "on_request" + ], + "in": "query", + "name": "stock_info", "type": "string" } ], @@ -280482,23 +351162,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/apkteardown.JobStatusResponseDoc" + "$ref": "#/definitions/chrono24.searchResponseDoc" } }, "400": { - "description": "job_id is required", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Job not found or expired", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal error reading the job", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -280509,25 +351189,16 @@ "ApiKeyAuth": [] } ], - "summary": "Poll an apk-teardown job's status/result", + "summary": "Search Chrono24 watch listings", "tags": [ - "AppInsights" + "Chrono24" ] } }, - "/apk-teardown/timeline": { + "/clevelandcom/news": { "get": { - "description": "Compares 2+ completed jobs the caller asserts are versions of the same app and returns the consecutive pairwise diff for each version transition, sorted by version code.", - "operationId": "apkTeardownTimeline", - "parameters": [ - { - "description": "Comma-separated list of 2+ completed job IDs copied from data.job_id values returned by POST /apk-teardown/jobs", - "in": "query", - "name": "job_ids", - "required": true, - "type": "string" - } - ], + "description": "Returns Cleveland.com's 50-item public top-stories RSS feed. Summaries and encoded content are publisher teasers; this endpoint does not claim to return full article text. Editorial section inventory and article pages could not be reliably verified due to upstream DataDome blocking.", + "operationId": "clevelandcom-news", "produces": [ "application/json" ], @@ -280535,11 +351206,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/apkteardown.TimelineResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "400": { - "description": "Fewer than 2 job ids, or a job not found or not done", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -280550,24 +351227,24 @@ "ApiKeyAuth": [] } ], - "summary": "Build a version timeline across 2+ apk-teardown jobs", + "summary": "Get Cleveland.com top stories", "tags": [ - "AppInsights" + "Cleveland.com" ] } }, - "/apnews/article": { + "/cna/article": { "get": { - "description": "Returns public AP News article metadata and body paragraphs. The service does not bypass authentication or access controls. Billing is 2 credits, or 10 credits when browser rendering is required.", - "operationId": "apnews-article", + "description": "Returns a CNA (Channel NewsAsia) article by `url`, a canonical `channelnewsasia.com` address such as `/singapore/-` or `/commentary/-`: title, description, publication and update times, section, authors, image and the body `paragraphs`. No paywalled or gated content was found during validation.", + "operationId": "cna-article", "parameters": [ { - "description": "Canonical AP News article URL", + "description": "Canonical CNA article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://apnews.com/article/example-article-id" + "x-example": "https://www.channelnewsasia.com/singapore/national-arts-council-nac-seeks-operator-new-1000-seat-tanglin-theatre-6408051" } ], "produces": [ @@ -280604,24 +351281,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get AP News article content", + "summary": "Get CNA article content", "tags": [ - "AP News" + "CNA" ] } }, - "/apnews/author": { + "/cna/author": { "get": { - "description": "Returns an AP News author's byline metadata, biography, and recent articles from a canonical author URL. The service does not bypass authentication or access controls. Billing is 1 credit, or 5 credits when browser rendering is required.", - "operationId": "apnews-author", + "description": "Returns a CNA correspondent's or contributor's profile, identified by `slug` (such as `aqil-haziq-mahmud`) or a `channelnewsasia.com/author/` `url`; exactly one is required. The response has name, job title, bio, email, image and the latest page of bylined articles, each with title, URL and label. External Commentary contributors usually have only a name and articles.", + "operationId": "cna-author", "parameters": [ { - "description": "Canonical AP News author URL", + "description": "Author slug, e.g. aqil-haziq-mahmud", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "aqil-haziq-mahmud" + }, + { + "description": "Canonical channelnewsasia.com/author/ URL; alternative to slug", "in": "query", "name": "url", - "required": true, "type": "string", - "x-example": "https://apnews.com/author/lauran-neergaard" + "x-example": "https://www.channelnewsasia.com/author/aqil-haziq-mahmud" } ], "produces": [ @@ -280631,7 +351314,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.apNewsAuthorResponseDoc" + "$ref": "#/definitions/publicnews.cnaAuthorResponseDoc" } }, "400": { @@ -280658,75 +351341,31 @@ "ApiKeyAuth": [] } ], - "summary": "Get an AP News author profile", - "tags": [ - "AP News" - ] - } - }, - "/apnews/fact-check": { - "get": { - "description": "Returns current headlines from AP News' public Fact Check page. The service does not bypass authentication or access controls. Billing is 1 credit, or 5 credits when browser rendering is required.", - "operationId": "apnews-fact-check", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get AP News fact checks", + "summary": "Get a CNA author profile", "tags": [ - "AP News" + "CNA" ] } }, - "/apnews/headlines": { + "/cna/headlines": { "get": { - "description": "Returns AP News headlines from a public editorial hub. The service does not bypass authentication or access controls. Billing is 1 credit, or 5 credits when browser rendering is required.", - "operationId": "apnews-headlines", + "description": "Returns fresh CNA headlines for one section. `section` is required and is `asia`, `business`, `singapore`, `sport` or `world`. Each item has a title and URL, and may also carry a summary, author, publication time and image.", + "operationId": "cna-headlines", "parameters": [ { - "description": "AP News section slug", + "description": "CNA section slug", "enum": [ - "ap-top-news", - "us-news", - "world-news", - "politics", + "asia", "business", - "technology", - "science", - "health", - "sports", - "entertainment", - "lifestyle" + "singapore", + "sport", + "world" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "ap-top-news" + "x-example": "asia" } ], "produces": [ @@ -280745,12 +351384,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -280763,16 +351396,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get AP News section headlines", + "summary": "Get CNA section headlines", "tags": [ - "AP News" + "CNA" ] } }, - "/apnews/news": { + "/cna/news": { "get": { - "description": "Returns AP News top stories from the public AP News Top News hub. The service does not bypass authentication or access controls. Billing is 1 credit, or 5 credits when browser rendering is required.", - "operationId": "apnews-news", + "description": "Returns the latest CNA (Channel NewsAsia) top stories, with no input needed. Each item has a title and canonical URL, and may also carry a summary, author, publication time and image.", + "operationId": "cna-news", "produces": [ "application/json" ], @@ -280783,12 +351416,6 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -280801,16 +351428,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get AP News top stories", + "summary": "Get CNA top stories", "tags": [ - "AP News" + "CNA" ] } }, - "/apnews/sections": { + "/cna/sections": { "get": { - "description": "Lists the 11 AP News hubs accepted by `apnews-headlines`: `ap-top-news`, `us-news`, `world-news`, `politics`, `business`, `technology`, `science`, `health`, `sports`, `entertainment` and `lifestyle`. Each has a `slug`, display `name` and hub `url`. The Fact Check page is served by `apnews-fact-check` instead.", - "operationId": "apnews-sections", + "description": "Lists the five CNA sections accepted by `cna-headlines`: `asia`, `business`, `singapore`, `sport` and `world`. Each has a `slug`, a display `name` and the feed `url`.", + "operationId": "cna-sections", "produces": [ "application/json" ], @@ -280827,41 +351454,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get AP News sections", + "summary": "Get CNA sections", "tags": [ - "AP News" + "CNA" ] } }, - "/apple-books/audiobook-series/{id}": { + "/cnbc/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns series metadata and the full ordered list of audiobooks in the series from Apple Books' public catalog page. An audio-book-series is a catalog resource distinct from a book-series, even for the same conceptual series.", - "operationId": "apple-books-audiobook-series", + "description": "Returns public CNBC article metadata and server-rendered body paragraphs. Provide a canonical dated cnbc.com article URL; account-gated content is not bypassed.", + "operationId": "cnbc-article", "parameters": [ { - "description": "Apple Books numeric audiobook series ID", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "6442645726" - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Result language tag", + "description": "Canonical cnbc.com article URL", "in": "query", - "name": "lang", + "name": "url", + "required": true, "type": "string", - "x-example": "en-us" + "x-example": "https://www.cnbc.com/2026/09/21/iran-us-oil-prices-crude-saudi-arabia-.html" } ], "produces": [ @@ -280871,29 +351481,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applebooks.audiobookSeriesResponseDoc" + "$ref": "#/definitions/cnbc.articleResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Series not found", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -280904,55 +351520,30 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve an Apple Books audiobook series and its full audiobook list", + "summary": "CNBC article content", "tags": [ - "AppleBooks" + "CNBC" ] } }, - "/apple-books/audiobook/search": { + "/cnbc/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Apple Books audiobooks by `term`, which is required. `country` is the two-letter storefront code (default `us`), `lang` a language tag such as `en-us`, `limit` the result count (default 50, max 200) and `page` starts at 1. Results include `narrator`, `duration_seconds`, price, rating, genres and `preview_url`.", - "operationId": "apple-books-audiobook-search", + "description": "Returns one CNBC author's public bio page: name, job title, biography, social links, and their most recent articles. Provide either the author's slug (the last path segment of their cnbc.com bio page) or the full bio page URL.", + "operationId": "cnbc-author", "parameters": [ { - "description": "Search term", - "in": "query", - "name": "term", - "required": true, - "type": "string", - "x-example": "harry potter" - }, - { - "description": "Two-letter storefront country code", + "description": "CNBC author slug, e.g. jeff-cox", "in": "query", - "name": "country", + "name": "slug", "type": "string", - "x-example": "us" + "x-example": "jeff-cox" }, { - "description": "Result language tag", + "description": "Canonical https://www.cnbc.com// author page URL, as an alternative to slug", "in": "query", - "name": "lang", + "name": "url", "type": "string", - "x-example": "en-us" - }, - { - "description": "Number of audiobooks per page", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 - }, - { - "description": "Search page number (1-based)", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "https://www.cnbc.com/jeff-cox/" } ], "produces": [ @@ -280962,23 +351553,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applebooks.audiobookSearchResponseDoc" + "$ref": "#/definitions/cnbc.authorResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -280989,43 +351592,16 @@ "ApiKeyAuth": [] } ], - "summary": "Search Apple Books audiobooks", + "summary": "CNBC author profile", "tags": [ - "AppleBooks" + "CNBC" ] } }, - "/apple-books/audiobook/{id}": { + "/cnbc/categories": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns audiobook metadata from Apple Books, including narrator, duration, audio preview, and a cross-link to the ebook edition (when one exists).", - "operationId": "apple-books-audiobook", - "parameters": [ - { - "description": "Apple Books numeric audiobook ID", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "1442174040" - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Result language tag", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" - } - ], + "description": "Lists the public CNBC editorial sections accepted by /cnbc/headlines, including market, investing, business, technology, and policy subsections, with each section's slug, display name, and landing-page URL.", + "operationId": "cnbc-categories", "produces": [ "application/json" ], @@ -281033,29 +351609,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applebooks.audiobookResponseDoc" - } - }, - "400": { - "description": "Missing or invalid parameters", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/cnbc.categoriesResponseDoc" } }, - "404": { - "description": "Audiobook not found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -281066,55 +351636,24 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Apple Books audiobook details", + "summary": "CNBC editorial sections", "tags": [ - "AppleBooks" + "CNBC" ] } }, - "/apple-books/audiobook/{id}/reviews": { + "/cnbc/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a page of an audiobook's customer reviews. The default first page is served from the audiobook's own catalog page; deeper pages (page>1 or a larger limit) page through Apple's review API directly, up to 20 per page.", - "operationId": "apple-books-audiobook-reviews", + "description": "Returns current server-rendered CNBC headlines for one public editorial section, including title, article URL, and card metadata when available. Use /cnbc/categories to discover the supported section slugs.", + "operationId": "cnbc-headlines", "parameters": [ { - "description": "Apple Books numeric audiobook ID", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "1442174040" - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Result language tag", + "description": "Public CNBC editorial section slug from /cnbc/categories", "in": "query", - "name": "lang", + "name": "section", + "required": true, "type": "string", - "x-example": "en-us" - }, - { - "description": "Review page number, default 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Reviews per page, default 10, max 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "x-example": "markets" } ], "produces": [ @@ -281124,29 +351663,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applebooks.audiobookReviewsResponseDoc" + "$ref": "#/definitions/cnbc.headlinesResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Audiobook not found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -281157,41 +351696,24 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Apple Books audiobook customer reviews", + "summary": "CNBC section headlines", "tags": [ - "AppleBooks" + "CNBC" ] } }, - "/apple-books/audiobook/{id}/similar": { + "/cnet/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the 'Customers Also Bought' audiobooks shown on the Apple Books page of one audiobook, identified by its numeric `id`. `country` (default `us`) and `lang` (such as `en-us`) choose the storefront and language. Each item has name, author, `narrator`, `duration_seconds`, price, rating and `series_name`.", - "operationId": "apple-books-audiobook-similar", + "description": "Returns public CNET article metadata and body paragraphs from a canonical article URL. CNET articles are freely readable; video-only pages and pages without an article body are reported as upstream errors rather than returned empty.", + "operationId": "cnet-article", "parameters": [ { - "description": "Apple Books numeric audiobook ID", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "1442174040" - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Result language tag", + "description": "Canonical CNET article URL", "in": "query", - "name": "lang", + "name": "url", + "required": true, "type": "string", - "x-example": "en-us" + "x-example": "https://www.cnet.com/tech/mobile/meta-connect-new-glasses-muse-ai-hearing-assistance-ray-bans-more/" } ], "produces": [ @@ -281201,29 +351723,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applebooks.audiobookSimilarResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Audiobook not found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Rate limit exceeded", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -281234,41 +351750,37 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve \"Customers Also Bought\" audiobooks", + "summary": "Get CNET article content", "tags": [ - "AppleBooks" + "CNET" ] } }, - "/apple-books/author/{id}": { + "/cnet/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns an Apple Books author by numeric author `id`: name, URL, genres, their ebooks and, where available, audiobooks. Books carry details such as ISBN, page count, publisher, price, rating and series; audiobooks add narrator, duration and preview. `country` is a two-letter storefront code (default `us`) and `lang` a language tag such as `en-us`.", - "operationId": "apple-books-author", + "description": "Returns one CNET author's public profile: name, role, biography, areas of expertise, social links, and one page of their recent articles.", + "operationId": "cnet-author", "parameters": [ { - "description": "Apple Books numeric author ID", - "in": "path", - "name": "id", - "required": true, + "description": "Author slug, e.g. scottstein8", + "in": "query", + "name": "slug", "type": "string", - "x-example": "79595314" + "x-example": "scottstein8" }, { - "description": "Two-letter storefront country code", + "description": "Canonical cnet.com/profiles/ URL, optionally with a /page// segment; alternative to slug", "in": "query", - "name": "country", + "name": "url", "type": "string", - "x-example": "us" + "x-example": "https://www.cnet.com/profiles/scottstein8/" }, { - "description": "Result language tag", + "default": 1, + "description": "1-based page number; overrides any page number in url", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "name": "page", + "type": "integer" } ], "produces": [ @@ -281278,29 +351790,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applebooks.authorResponseDoc" + "$ref": "#/definitions/publicnews.cnetAuthorResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Author not found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Rate limit exceeded", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -281311,41 +351817,77 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve an Apple Books author's bibliography", + "summary": "Get a CNET author profile", "tags": [ - "AppleBooks" + "CNET" ] } }, - "/apple-books/book/{id}": { + "/cnet/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns book metadata from Apple Books, including ISBN, page count, publisher, audience, rating histogram, and series linkage.", - "operationId": "apple-books-book", + "description": "Returns fresh CNET headlines for one topic. `section` is required and takes a topic slug such as `ai`, `deals`, `smart-home`, `electric-vehicles` or `tv-and-movies`; an invalid value returns a 400 error. Each item has a title and URL, and may also carry a summary, author, publication time and image.", + "operationId": "cnet-headlines", "parameters": [ { - "description": "Apple Books numeric book ID", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "1037193578" - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Result language tag", + "description": "CNET topic slug", + "enum": [ + "ai", + "aircraft", + "auto-tech", + "automobiles", + "biology", + "car-accessories", + "car-apps", + "car-industry", + "car-news", + "climate", + "computing", + "culture", + "deals", + "electric-vehicles", + "energy-and-utilities", + "entertainment", + "fashion", + "fitness", + "gaming", + "health", + "home", + "home-entertainment", + "internet", + "kitchen-and-household", + "live-blog", + "medical", + "mental", + "mobile", + "motorcycles", + "news", + "nutrition", + "parenting", + "personal-care", + "personal-finance", + "personal-mobility", + "privacy", + "rideshare", + "roadshow", + "science", + "security", + "services-and-software", + "sleep", + "smart-home", + "social-media", + "space", + "sports", + "tech", + "tech-industry", + "tv-and-movies", + "watercraft", + "yard-and-outdoors" + ], "in": "query", - "name": "lang", + "name": "section", + "required": true, "type": "string", - "x-example": "en-us" + "x-example": "ai" } ], "produces": [ @@ -281355,29 +351897,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applebooks.bookResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Book not found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Rate limit exceeded", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -281388,57 +351918,16 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Apple Books book details", + "summary": "Get CNET section headlines", "tags": [ - "AppleBooks" + "CNET" ] } }, - "/apple-books/book/{id}/reviews": { + "/cnet/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a page of a book's customer reviews. The default first page is served from the book's own catalog page; deeper pages (page>1 or a larger limit) page through Apple's review API directly, up to 20 per page.", - "operationId": "apple-books-book-reviews", - "parameters": [ - { - "description": "Apple Books numeric book ID", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "1037193578" - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Result language tag", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" - }, - { - "description": "Review page number, default 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Reviews per page, default 10, max 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 - } - ], + "description": "Returns the latest CNET top stories, with no input needed. Each item has a title, canonical URL, summary, publication time and author name when CNET provides them.", + "operationId": "cnet-news", "produces": [ "application/json" ], @@ -281446,31 +351935,45 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applebooks.reviewsResponseDoc" - } - }, - "400": { - "description": "Missing or invalid parameters", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "404": { - "description": "Book not found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } - }, - "500": { - "description": "Internal server error", + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get CNET top stories", + "tags": [ + "CNET" + ] + } + }, + "/cnet/sections": { + "get": { + "description": "Lists the 51 CNET topics accepted by `cnet-headlines`: top-level and second-level topics with a recently updated feed, plus `ai`, `deals` and `tv-and-movies`. Each has a `slug`, a display `name` and the feed `url`. Deeper sub-topics are not separate sections; `internet` means Home Internet and `security` means Home Security.", + "operationId": "cnet-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -281479,41 +351982,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Apple Books customer reviews", + "summary": "Get CNET sections", "tags": [ - "AppleBooks" + "CNET" ] } }, - "/apple-books/book/{id}/similar": { + "/cnn/article": { "get": { "consumes": [ "application/json" ], - "description": "Returns the 'Customers Also Bought' books shown on the Apple Books page of one book, identified by its numeric `id`. `country` (default `us`) and `lang` (such as `en-us`) choose the storefront and language. Each item has name, author, `publisher`, `isbn`, `page_count`, price, rating and `series_sequence`.", - "operationId": "apple-books-book-similar", + "description": "Returns a CNN article's headline, description, author, publication and update times, section, image, and body paragraphs. Provide a canonical cnn.com article URL.", + "operationId": "cnn-article", "parameters": [ { - "description": "Apple Books numeric book ID", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "1037193578" - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Result language tag", + "description": "Canonical cnn.com article URL", "in": "query", - "name": "lang", + "name": "url", + "required": true, "type": "string", - "x-example": "en-us" + "x-example": "https://www.cnn.com/2026/08/19/africa/kenya-helicopter-crash-latam-intl" } ], "produces": [ @@ -281523,29 +352012,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applebooks.similarResponseDoc" + "$ref": "#/definitions/cnn.articleResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Book not found", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -281556,51 +352051,33 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve \"Customers Also Bought\" books", + "summary": "CNN article content", "tags": [ - "AppleBooks" + "CNN" ] } }, - "/apple-books/charts": { + "/cnn/author": { "get": { "consumes": [ "application/json" ], - "description": "Returns Apple Books chart rankings for a `collection`, `top-free` (default) or `top-paid`. Narrow with `genre` (an Apple Books genre ID, `0` for all genres), `country` (default `us`) and `limit` (default 50, max 200). Each entry has `name`, author, `genres`, `release_date`, `artwork_url` and `url`.", - "operationId": "apple-books-charts", + "description": "Returns one CNN profile's byline metadata (name and title), bio paragraphs, social accounts, and recent articles/videos. Provide either a profile slug or a canonical cnn.com/profiles/ URL.", + "operationId": "cnn-author", "parameters": [ { - "description": "Chart collection. Allowed values: top-free, top-paid", - "enum": [ - "top-free", - "top-paid" - ], + "description": "CNN profile slug, e.g. jake-tapper-profile (a slug without the -profile suffix is tried with it first, then as-is)", "in": "query", - "name": "collection", + "name": "slug", "type": "string", - "x-example": "top-free" - }, - { - "description": "Optional Apple Books genre ID to filter the chart", - "in": "query", - "name": "genre", - "type": "integer", - "x-example": 9031 + "x-example": "jake-tapper-profile" }, { - "description": "Two-letter storefront country code", + "description": "Canonical cnn.com/profiles/ URL, as an alternative to slug", "in": "query", - "name": "country", + "name": "url", "type": "string", - "x-example": "us" - }, - { - "description": "Number of chart items to return", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "x-example": "https://www.cnn.com/profiles/jake-tapper-profile" } ], "produces": [ @@ -281610,23 +352087,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applebooks.chartsResponseDoc" + "$ref": "#/definitions/cnn.authorResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -281637,55 +352126,41 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Apple Books chart rankings", + "summary": "CNN profile page", "tags": [ - "AppleBooks" + "CNN" ] } }, - "/apple-books/search": { + "/cnn/headlines": { "get": { "consumes": [ "application/json" ], - "description": "Searches Apple Books ebooks by `term`, which is required. `country` is the two-letter storefront code (default `us`), `lang` a language tag such as `en-us`, `limit` the result count (default 50, max 200) and `page` starts at 1. Results include `isbn`, `publisher`, `page_count`, price, rating, genres and series details.", - "operationId": "apple-books-search", + "description": "Returns the current CNN headline stream for one section, including title, article URL, description, publication time, and image when available.", + "operationId": "cnn-headlines", "parameters": [ { - "description": "Search term", - "in": "query", - "name": "term", - "required": true, - "type": "string", - "x-example": "harry potter" - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Result language tag", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" - }, - { - "description": "Number of books per page", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 - }, - { - "description": "Search page number (1-based)", + "default": "world", + "description": "CNN section. Allowed values: world, us, politics, business, health, entertainment, style, travel, sports, science, climate, weather, opinion. Default world.", + "enum": [ + "world", + "us", + "politics", + "business", + "health", + "entertainment", + "style", + "travel", + "sports", + "science", + "climate", + "weather", + "opinion" + ], "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "section", + "type": "string" } ], "produces": [ @@ -281695,23 +352170,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applebooks.searchResponseDoc" + "$ref": "#/definitions/cnn.headlinesResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -281722,41 +352203,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Apple Books titles", + "summary": "CNN section headlines", "tags": [ - "AppleBooks" + "CNN" ] } }, - "/apple-books/series/{id}": { + "/cnn/live-story": { "get": { "consumes": [ "application/json" ], - "description": "Returns an Apple Books series by its numeric `id`: the series `name` and `url`, and its books in series order. Each book has `series_sequence`, author, `publisher`, `isbn`, `page_count`, price and rating. `country` (default `us`) and `lang` choose the storefront and language.", - "operationId": "apple-books-series", + "description": "Returns a CNN live story from its canonical cnn.com live-news `url`: title, description, last update time and the posts in chronological order. Each post has an id, title, paragraphs of text, and published and updated times.", + "operationId": "cnn-live-story", "parameters": [ { - "description": "Apple Books numeric series ID", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "1044374793" - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Result language tag", + "description": "Canonical cnn.com live-news URL", "in": "query", - "name": "lang", + "name": "url", + "required": true, "type": "string", - "x-example": "en-us" + "x-example": "https://www.cnn.com/2026/08/26/world/live-news/iran-war-trump" } ], "produces": [ @@ -281766,29 +352233,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applebooks.seriesResponseDoc" + "$ref": "#/definitions/cnn.liveStoryResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Series not found", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -281799,27 +352272,96 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve an Apple Books series and its full book list", + "summary": "CNN live story updates", "tags": [ - "AppleBooks" + "CNN" ] } }, - "/apple-jobs/job": { + "/coingecko/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Apple Careers posting by its job id (the `id` field returned by search, e.g. `200674676-0836` for a specific requisition or `PIPE-200314122` for an evergreen/pipeline retail role).", - "operationId": "apple-jobs-job", + "description": "Lists CoinGecko coin categories, up to `limit` rows (default and max 100), priced in the `vs_currency` you choose. Each row has its rank, id, slug, name, URL, 1h, 24h and 7d percentage changes, market cap, 24h volume and coin count, where CoinGecko shows them.", + "operationId": "coingecko-categories", "parameters": [ { - "description": "Apple job id", + "description": "Rows to return, default 100, max 100", "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "200674676-0836" + "name": "limit", + "type": "integer" + }, + { + "description": "Quote currency", + "enum": [ + "btc", + "eth", + "ltc", + "bch", + "bnb", + "eos", + "xrp", + "xlm", + "link", + "dot", + "yfi", + "sol", + "usd", + "aed", + "ars", + "aud", + "bdt", + "bhd", + "bmd", + "brl", + "cad", + "chf", + "clp", + "cny", + "czk", + "dkk", + "eur", + "gbp", + "gel", + "hkd", + "huf", + "idr", + "ils", + "inr", + "jpy", + "krw", + "kwd", + "lkr", + "mmk", + "mxn", + "myr", + "ngn", + "nok", + "nzd", + "php", + "pkr", + "pln", + "rub", + "sar", + "sek", + "sgd", + "thb", + "try", + "twd", + "uah", + "vef", + "vnd", + "zar", + "xdr", + "xag", + "xau", + "bits", + "sats" + ], + "in": "query", + "name": "vs_currency", + "type": "string" } ], "produces": [ @@ -281829,7 +352371,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applejobs.jobResponseDoc" + "$ref": "#/definitions/coingecko.categoriesResponseDoc" } }, "400": { @@ -281838,14 +352380,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -281862,26 +352398,110 @@ "ApiKeyAuth": [] } ], - "summary": "Apple Jobs single posting", + "summary": "CoinGecko categories", "tags": [ - "Apple Jobs" + "CoinGecko" ] } }, - "/apple-jobs/locations": { + "/coingecko/category/{slug}/coins": { "get": { "consumes": [ "application/json" ], - "description": "Discovery endpoint for apple-jobs-search's `location` parameter, whose accepted values are a closed set Apple itself defines (its own `-` location ids -- free-text location names are rejected). Apple exposes no bulk \"list everything\" option for this; the only lookup is a fuzzy search capped at 10 results per call covering four granularities (country, state/province, metro area, city) with no empty-input listing mode. With no `q`, this returns the full country-level value space (206 values, live-verified) as a static list -- the granularity apple-jobs-search's own examples use and nearly every caller needs. With `q` supplied, this instead looks up Apple's own location filter live so callers can discover state/metro/city-level values for finer filtering; results at those deeper levels may include more than one candidate and are ranked by Apple's own relevance, not alphabetically.", - "operationId": "apple-jobs-locations", + "description": "Lists the coins in one CoinGecko category, identified by the required `slug` such as `stablecoins`. Paged with `page` (default 1) and `limit` (default and max 100), priced in `vs_currency`. Each coin has rank, symbol, price, 1h to 30d changes, 24h volume, market cap and fully diluted valuation.", + "operationId": "coingecko-category-coins", "parameters": [ { - "description": "Optional free-text location search. Omit to get the full country-level list; supply to live-search state/metro/city-level values too (e.g. a city name).", - "in": "query", - "name": "q", + "description": "CoinGecko category slug such as stablecoins", + "in": "path", + "name": "slug", + "required": true, "type": "string", - "x-example": "singapore" + "x-example": "stablecoins" + }, + { + "description": "Page number, default 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Rows to return, default 100, max 100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Quote currency", + "enum": [ + "btc", + "eth", + "ltc", + "bch", + "bnb", + "eos", + "xrp", + "xlm", + "link", + "dot", + "yfi", + "sol", + "usd", + "aed", + "ars", + "aud", + "bdt", + "bhd", + "bmd", + "brl", + "cad", + "chf", + "clp", + "cny", + "czk", + "dkk", + "eur", + "gbp", + "gel", + "hkd", + "huf", + "idr", + "ils", + "inr", + "jpy", + "krw", + "kwd", + "lkr", + "mmk", + "mxn", + "myr", + "ngn", + "nok", + "nzd", + "php", + "pkr", + "pln", + "rub", + "sar", + "sek", + "sgd", + "thb", + "try", + "twd", + "uah", + "vef", + "vnd", + "zar", + "xdr", + "xag", + "xau", + "bits", + "sats" + ], + "in": "query", + "name": "vs_currency", + "type": "string" } ], "produces": [ @@ -281891,7 +352511,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applejobs.locationsResponseDoc" + "$ref": "#/definitions/coingecko.categoryCoinsResponseDoc" } }, "400": { @@ -281900,8 +352520,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -281918,41 +352544,96 @@ "ApiKeyAuth": [] } ], - "summary": "Apple Jobs location discovery", + "summary": "CoinGecko category coins", "tags": [ - "Apple Jobs" + "CoinGecko" ] } }, - "/apple-jobs/search": { + "/coingecko/chains": { "get": { "consumes": [ "application/json" ], - "description": "Searches Apple's public careers site (jobs.apple.com) via its server-rendered search page's embedded job data. Page size is fixed by Apple at 20 results. Search results carry identity/location/team metadata only — call the job endpoint for the full description and qualifications.", - "operationId": "apple-jobs-search", + "description": "Lists blockchains from CoinGecko's chains table, up to `limit` rows (default and max 100), in the `vs_currency` you pick. Each chain has its rank, id, name, URL, logo, top gainers, 24h, 7d and 30d changes, 24h volume, TVL, dominance percent and coin count, where shown.", + "operationId": "coingecko-chains", "parameters": [ { - "description": "Search query", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "software engineer" - }, - { - "description": "Location filter in Apple's own slug format, e.g. united-states-USA or singapore-SGP. Free-text location names are not accepted -- call apple-jobs-locations to discover valid values.", + "description": "Rows to return, default 100, max 100", "in": "query", - "name": "location", - "type": "string", - "x-example": "united-states-USA" + "name": "limit", + "type": "integer" }, { - "description": "Page number, 1-based", + "description": "Quote currency", + "enum": [ + "btc", + "eth", + "ltc", + "bch", + "bnb", + "eos", + "xrp", + "xlm", + "link", + "dot", + "yfi", + "sol", + "usd", + "aed", + "ars", + "aud", + "bdt", + "bhd", + "bmd", + "brl", + "cad", + "chf", + "clp", + "cny", + "czk", + "dkk", + "eur", + "gbp", + "gel", + "hkd", + "huf", + "idr", + "ils", + "inr", + "jpy", + "krw", + "kwd", + "lkr", + "mmk", + "mxn", + "myr", + "ngn", + "nok", + "nzd", + "php", + "pkr", + "pln", + "rub", + "sar", + "sek", + "sgd", + "thb", + "try", + "twd", + "uah", + "vef", + "vnd", + "zar", + "xdr", + "xag", + "xau", + "bits", + "sats" + ], "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "vs_currency", + "type": "string" } ], "produces": [ @@ -281962,7 +352643,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applejobs.searchResponseDoc" + "$ref": "#/definitions/coingecko.chainsResponseDoc" } }, "400": { @@ -281971,8 +352652,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -281989,64 +352670,104 @@ "ApiKeyAuth": [] } ], - "summary": "Apple Jobs search", + "summary": "CoinGecko chains", "tags": [ - "Apple Jobs" + "CoinGecko" ] } }, - "/apple-maps/autocomplete": { + "/coingecko/chains/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns Apple Maps typeahead suggestions for a partial query near a coordinate: query completions, matching businesses (resolved to the same place summary the search endpoint returns, with the place ID the place endpoint takes), and addresses.", - "operationId": "apple-maps-autocomplete", + "description": "Returns sections from a CoinGecko chain detail page. Sections are omitted when not present. This endpoint supports the documented `vs_currency` enum.", + "operationId": "coingecko-chain", "parameters": [ { - "description": "Partial search text to complete", - "in": "query", - "name": "query", + "description": "CoinGecko chain id such as ethereum", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "blue bot" - }, - { - "description": "Center latitude the suggestions are biased to", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 37.7749 - }, - { - "description": "Center longitude the suggestions are biased to", - "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -122.4194 - }, - { - "description": "Viewport size in degrees around the center. Defaults to 0.05; minimum 0.001, maximum 5.", - "in": "query", - "name": "span", - "type": "number", - "x-example": 0.05 + "x-example": "ethereum" }, { - "description": "Display language as a BCP 47 tag. Defaults to en-US.", + "description": "Rows per section to return, default 20, max 100", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-US" + "name": "limit", + "type": "integer" }, { - "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "description": "Quote currency", + "enum": [ + "btc", + "eth", + "ltc", + "bch", + "bnb", + "eos", + "xrp", + "xlm", + "link", + "dot", + "yfi", + "sol", + "usd", + "aed", + "ars", + "aud", + "bdt", + "bhd", + "bmd", + "brl", + "cad", + "chf", + "clp", + "cny", + "czk", + "dkk", + "eur", + "gbp", + "gel", + "hkd", + "huf", + "idr", + "ils", + "inr", + "jpy", + "krw", + "kwd", + "lkr", + "mmk", + "mxn", + "myr", + "ngn", + "nok", + "nzd", + "php", + "pkr", + "pln", + "rub", + "sar", + "sek", + "sgd", + "thb", + "try", + "twd", + "uah", + "vef", + "vnd", + "zar", + "xdr", + "xag", + "xau", + "bits", + "sats" + ], "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "name": "vs_currency", + "type": "string" } ], "produces": [ @@ -282056,7 +352777,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.autocompleteResponseDoc" + "$ref": "#/definitions/coingecko.chainDetailResponseDoc" } }, "400": { @@ -282065,6 +352786,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -282077,56 +352810,98 @@ "ApiKeyAuth": [] } ], - "summary": "Get Apple Maps search suggestions for a partial query", + "summary": "CoinGecko chain detail", "tags": [ - "Apple Maps" + "CoinGecko" ] } }, - "/apple-maps/categories": { + "/coingecko/coin/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns the \"Find Nearby\" browse categories Apple Maps offers for an area (for example Restaurants, Coffee Shops, Gas Stations, Hotels, Parking, Grocery Stores), each with the key and name the category-search endpoint takes. The set is location-aware.", - "operationId": "apple-maps-categories", + "description": "Returns CoinGecko profile, market stats, links, and categories for one coin id. This endpoint supports the documented `vs_currency` enum and is not intended for real-time trading.", + "operationId": "coingecko-coin", "parameters": [ { - "description": "Center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 37.7749 - }, - { - "description": "Center longitude", - "in": "query", - "name": "longitude", + "description": "CoinGecko coin id such as bitcoin", + "in": "path", + "name": "id", "required": true, - "type": "number", - "x-example": -122.4194 - }, - { - "description": "Viewport size in degrees around the center. Defaults to 0.05; minimum 0.001, maximum 5.", - "in": "query", - "name": "span", - "type": "number", - "x-example": 0.05 - }, - { - "description": "Display language as a BCP 47 tag. Defaults to en-US.", - "in": "query", - "name": "lang", "type": "string", - "x-example": "en-US" + "x-example": "bitcoin" }, { - "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "description": "Quote currency", + "enum": [ + "btc", + "eth", + "ltc", + "bch", + "bnb", + "eos", + "xrp", + "xlm", + "link", + "dot", + "yfi", + "sol", + "usd", + "aed", + "ars", + "aud", + "bdt", + "bhd", + "bmd", + "brl", + "cad", + "chf", + "clp", + "cny", + "czk", + "dkk", + "eur", + "gbp", + "gel", + "hkd", + "huf", + "idr", + "ils", + "inr", + "jpy", + "krw", + "kwd", + "lkr", + "mmk", + "mxn", + "myr", + "ngn", + "nok", + "nzd", + "php", + "pkr", + "pln", + "rub", + "sar", + "sek", + "sgd", + "thb", + "try", + "twd", + "uah", + "vef", + "vnd", + "zar", + "xdr", + "xag", + "xau", + "bits", + "sats" + ], "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "name": "vs_currency", + "type": "string" } ], "produces": [ @@ -282136,7 +352911,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.categoriesResponseDoc" + "$ref": "#/definitions/coingecko.coinResponseDoc" } }, "400": { @@ -282145,6 +352920,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -282157,90 +352944,114 @@ "ApiKeyAuth": [] } ], - "summary": "List Apple Maps browse categories for an area", + "summary": "CoinGecko coin profile", "tags": [ - "Apple Maps" + "CoinGecko" ] } }, - "/apple-maps/category-search": { + "/coingecko/coin/{id}/analysis": { "get": { "consumes": [ "application/json" ], - "description": "Returns places in one browse category near a coordinate without a keyword, in the same shape as the search endpoint (place summaries, region, relocation flag, and the refinement filters block). The category is a name from the categories endpoint for the same area (case-insensitive) or its key; an unknown name returns 400 listing the categories available there. Filters and sort work exactly as on the search endpoint.", - "operationId": "apple-maps-category-search", + "description": "Returns derived price-chart metrics from CoinGecko public chart JSON. This endpoint supports the documented `vs_currency` enum and is not investment advice or real-time trading data.", + "operationId": "coingecko-coin-analysis", "parameters": [ { - "description": "Category name (e.g. Coffee Shops, Restaurants) or key from /apple-maps/categories for the same area", - "in": "query", - "name": "category", - "required": true, - "type": "string", - "x-example": "Coffee Shops" - }, - { - "description": "Search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 37.7749 - }, - { - "description": "Search center longitude", - "in": "query", - "name": "longitude", + "description": "CoinGecko coin id such as bitcoin", + "in": "path", + "name": "id", "required": true, - "type": "number", - "x-example": -122.4194 - }, - { - "description": "Search viewport size in degrees around the center. Defaults to 0.05; minimum 0.001, maximum 5.", - "in": "query", - "name": "span", - "type": "number", - "x-example": 0.05 - }, - { - "description": "Max places returned. Defaults to 25, maximum 100.", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 25 - }, - { - "description": "Display language as a BCP 47 tag. Defaults to en-US.", - "in": "query", - "name": "lang", "type": "string", - "x-example": "en-US" + "x-example": "bitcoin" }, { - "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "description": "Quote currency", + "enum": [ + "btc", + "eth", + "ltc", + "bch", + "bnb", + "eos", + "xrp", + "xlm", + "link", + "dot", + "yfi", + "sol", + "usd", + "aed", + "ars", + "aud", + "bdt", + "bhd", + "bmd", + "brl", + "cad", + "chf", + "clp", + "cny", + "czk", + "dkk", + "eur", + "gbp", + "gel", + "hkd", + "huf", + "idr", + "ils", + "inr", + "jpy", + "krw", + "kwd", + "lkr", + "mmk", + "mxn", + "myr", + "ngn", + "nok", + "nzd", + "php", + "pkr", + "pln", + "rub", + "sar", + "sek", + "sgd", + "thb", + "try", + "twd", + "uah", + "vef", + "vnd", + "zar", + "xdr", + "xag", + "xau", + "bits", + "sats" + ], "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "name": "vs_currency", + "type": "string" }, { - "description": "Comma-separated filter keys from the filters block of an unfiltered category search for the same category and area. Unknown keys return 400 listing the available keys. Costs a second upstream call.", + "description": "Chart range", + "enum": [ + "24h", + "max" + ], "in": "query", - "name": "filters", - "type": "string", - "x-example": "OPEN_NOW" + "name": "range", + "type": "string" }, { - "description": "Result order. Costs a second upstream call.", - "enum": [ - "best_match", - "distance", - "ratings" - ], + "description": "Fetch optional CoinGecko chart annotations", "in": "query", - "name": "sort", - "type": "string", - "x-example": "ratings" + "name": "include_annotations", + "type": "boolean" } ], "produces": [ @@ -282250,7 +353061,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.searchResponseDoc" + "$ref": "#/definitions/coingecko.analysisResponseDoc" } }, "400": { @@ -282259,6 +353070,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -282271,124 +353094,104 @@ "ApiKeyAuth": [] } ], - "summary": "Browse one Apple Maps category near a coordinate", + "summary": "CoinGecko coin chart analysis", "tags": [ - "Apple Maps" + "CoinGecko" ] } }, - "/apple-maps/directions": { + "/coingecko/exchange/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns Apple Maps routes between an origin and a destination, with optional intermediate stops, for driving, walking, or cycling. Each route carries its name, whether it is Apple's main or an alternate route, distance, live/historic/free-flow durations, toll and highway flags, Apple's route description and traffic note, and per-leg turn-by-turn steps (maneuver, road, shield, instruction text, distance, duration); detail=full adds each leg's path as coordinates. Departure time and avoid-tolls/highways/stairs preferences are supported. Transit routing is not available.", - "operationId": "apple-maps-directions", + "description": "Returns profile stats and market rows from a CoinGecko exchange page. This endpoint supports the documented `vs_currency` enum.", + "operationId": "coingecko-exchange", "parameters": [ { - "description": "Origin latitude", - "in": "query", - "name": "origin_latitude", - "required": true, - "type": "number", - "x-example": 37.7749 - }, - { - "description": "Origin longitude", - "in": "query", - "name": "origin_longitude", - "required": true, - "type": "number", - "x-example": -122.4194 - }, - { - "description": "Destination latitude", - "in": "query", - "name": "destination_latitude", - "required": true, - "type": "number", - "x-example": 37.8199 - }, - { - "description": "Destination longitude", - "in": "query", - "name": "destination_longitude", + "description": "CoinGecko exchange id such as binance", + "in": "path", + "name": "id", "required": true, - "type": "number", - "x-example": -122.4783 - }, - { - "description": "Intermediate stops as lat,lng pairs separated by |, at most 8", - "in": "query", - "name": "via", - "type": "string", - "x-example": "37.7955,-122.3937" - }, - { - "description": "Travel mode. Defaults to driving.", - "enum": [ - "driving", - "walking", - "cycling" - ], - "in": "query", - "name": "mode", "type": "string", - "x-example": "driving" - }, - { - "description": "Driving only: prefer routes without tolls", - "in": "query", - "name": "avoid_tolls", - "type": "boolean", - "x-example": false - }, - { - "description": "Driving only: prefer routes without highways", - "in": "query", - "name": "avoid_highways", - "type": "boolean", - "x-example": false - }, - { - "description": "Walking only: prefer routes without stairs", - "in": "query", - "name": "avoid_stairs", - "type": "boolean", - "x-example": false + "x-example": "binance" }, { - "description": "Departure time as RFC 3339 for traffic-aware estimates. Defaults to now.", + "description": "Rows to return, default 100, max 100", "in": "query", - "name": "depart_at", - "type": "string", - "x-example": "2026-09-07T08:30:00Z" + "name": "limit", + "type": "integer" }, { - "description": "How much of each route to return. Defaults to steps.", + "description": "Quote currency", "enum": [ - "summary", - "steps", - "full" + "btc", + "eth", + "ltc", + "bch", + "bnb", + "eos", + "xrp", + "xlm", + "link", + "dot", + "yfi", + "sol", + "usd", + "aed", + "ars", + "aud", + "bdt", + "bhd", + "bmd", + "brl", + "cad", + "chf", + "clp", + "cny", + "czk", + "dkk", + "eur", + "gbp", + "gel", + "hkd", + "huf", + "idr", + "ils", + "inr", + "jpy", + "krw", + "kwd", + "lkr", + "mmk", + "mxn", + "myr", + "ngn", + "nok", + "nzd", + "php", + "pkr", + "pln", + "rub", + "sar", + "sek", + "sgd", + "thb", + "try", + "twd", + "uah", + "vef", + "vnd", + "zar", + "xdr", + "xag", + "xau", + "bits", + "sats" ], "in": "query", - "name": "detail", - "type": "string", - "x-example": "steps" - }, - { - "description": "Language for road names and instructions as a BCP 47 tag. Defaults to en-US.", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-US" - }, - { - "description": "Two-letter ISO 3166-1 country code. Defaults to US.", - "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "name": "vs_currency", + "type": "string" } ], "produces": [ @@ -282398,7 +353201,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.directionsResponseDoc" + "$ref": "#/definitions/coingecko.exchangeDetailResponseDoc" } }, "400": { @@ -282413,6 +353216,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -282425,69 +353234,114 @@ "ApiKeyAuth": [] } ], - "summary": "Get Apple Maps driving, walking, or cycling directions", + "summary": "CoinGecko exchange detail", "tags": [ - "Apple Maps" + "CoinGecko" ] } }, - "/apple-maps/eta": { + "/coingecko/exchanges": { "get": { "consumes": [ "application/json" ], - "description": "Returns Apple Maps travel-time estimates between an origin and a destination: for each transport type Apple reports (driving always; walking when requested), the live best estimate, the historic and free-flow durations, and the route distance. Cheaper than the directions endpoint when only the time and distance are needed. Apple has no cycling ETA; use the directions endpoint for cycling.", - "operationId": "apple-maps-eta", + "description": "Lists CoinGecko exchanges from one table chosen by `kind`: `spot` (default), `dex`, `derivatives` or `perp_dex`. Paged with `page` and `limit` (default and max 100). Each exchange has rank, id, name, URL, logo, and, where shown, a trust score and 24h volume in `vs_currency`.", + "operationId": "coingecko-exchanges", "parameters": [ { - "description": "Origin latitude", - "in": "query", - "name": "origin_latitude", - "required": true, - "type": "number", - "x-example": 37.7749 - }, - { - "description": "Origin longitude", + "description": "Exchange table kind, default spot", + "enum": [ + "spot", + "dex", + "derivatives", + "perp_dex" + ], "in": "query", - "name": "origin_longitude", - "required": true, - "type": "number", - "x-example": -122.4194 + "name": "kind", + "type": "string" }, { - "description": "Destination latitude", + "description": "Page number, default 1", "in": "query", - "name": "destination_latitude", - "required": true, - "type": "number", - "x-example": 37.8199 + "name": "page", + "type": "integer" }, { - "description": "Destination longitude", + "description": "Rows to return, default 100, max 100", "in": "query", - "name": "destination_longitude", - "required": true, - "type": "number", - "x-example": -122.4783 + "name": "limit", + "type": "integer" }, { - "description": "Travel mode. Defaults to driving.", + "description": "Quote currency", "enum": [ - "driving", - "walking" + "btc", + "eth", + "ltc", + "bch", + "bnb", + "eos", + "xrp", + "xlm", + "link", + "dot", + "yfi", + "sol", + "usd", + "aed", + "ars", + "aud", + "bdt", + "bhd", + "bmd", + "brl", + "cad", + "chf", + "clp", + "cny", + "czk", + "dkk", + "eur", + "gbp", + "gel", + "hkd", + "huf", + "idr", + "ils", + "inr", + "jpy", + "krw", + "kwd", + "lkr", + "mmk", + "mxn", + "myr", + "ngn", + "nok", + "nzd", + "php", + "pkr", + "pln", + "rub", + "sar", + "sek", + "sgd", + "thb", + "try", + "twd", + "uah", + "vef", + "vnd", + "zar", + "xdr", + "xag", + "xau", + "bits", + "sats" ], "in": "query", - "name": "mode", - "type": "string", - "x-example": "driving" - }, - { - "description": "Two-letter ISO 3166-1 country code. Defaults to US.", - "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "name": "vs_currency", + "type": "string" } ], "produces": [ @@ -282497,7 +353351,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.etaResponseDoc" + "$ref": "#/definitions/coingecko.exchangesResponseDoc" } }, "400": { @@ -282506,8 +353360,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -282524,40 +353378,96 @@ "ApiKeyAuth": [] } ], - "summary": "Get Apple Maps travel-time estimates between two points", + "summary": "CoinGecko exchanges", "tags": [ - "Apple Maps" + "CoinGecko" ] } }, - "/apple-maps/guides": { + "/coingecko/gainers-losers": { "get": { "consumes": [ "application/json" ], - "description": "Returns the Apple Guides home page for the Worldwide scope or one city: the featured guide, the guide carousels (expert recommendations, latest, and similar rows), the city shortcut list, and the browse-by-publisher list. Each guide carries its id (the value the guide endpoint takes), title, description, last-modified time, place count, cover photo, source link, and publisher; each publisher carries its id, name, subtitle, website, and guide count.", - "operationId": "apple-maps-guides", + "description": "Returns CoinGecko's top crypto gainers and top losers as two separate arrays, `gainers` and `losers`, each up to `limit` rows (default 20, max 100). Each coin has its rank, symbol, name, price in `vs_currency`, 24h percentage change and 24h volume.", + "operationId": "coingecko-gainers-losers", "parameters": [ { - "description": "City id from /apple-maps/guides/cities. Omit for the Worldwide guides home.", - "in": "query", - "name": "city_id", - "type": "string", - "x-example": "8077516530309122779" - }, - { - "description": "Display language as a BCP 47 tag, e.g. en-US, fr-FR. Defaults to en-US.", + "description": "Rows per section to return, default 20, max 100", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-US" + "name": "limit", + "type": "integer" }, { - "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "description": "Quote currency", + "enum": [ + "btc", + "eth", + "ltc", + "bch", + "bnb", + "eos", + "xrp", + "xlm", + "link", + "dot", + "yfi", + "sol", + "usd", + "aed", + "ars", + "aud", + "bdt", + "bhd", + "bmd", + "brl", + "cad", + "chf", + "clp", + "cny", + "czk", + "dkk", + "eur", + "gbp", + "gel", + "hkd", + "huf", + "idr", + "ils", + "inr", + "jpy", + "krw", + "kwd", + "lkr", + "mmk", + "mxn", + "myr", + "ngn", + "nok", + "nzd", + "php", + "pkr", + "pln", + "rub", + "sar", + "sek", + "sgd", + "thb", + "try", + "twd", + "uah", + "vef", + "vnd", + "zar", + "xdr", + "xag", + "xau", + "bits", + "sats" + ], "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "name": "vs_currency", + "type": "string" } ], "produces": [ @@ -282567,7 +353477,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.guidesHomeResponseDoc" + "$ref": "#/definitions/coingecko.gainersLosersResponseDoc" } }, "400": { @@ -282576,8 +353486,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -282594,35 +353504,19 @@ "ApiKeyAuth": [] } ], - "summary": "Browse the Apple Guides home page worldwide or for one city", + "summary": "CoinGecko crypto gainers and losers", "tags": [ - "Apple Maps" + "CoinGecko" ] } }, - "/apple-maps/guides/cities": { + "/coingecko/global": { "get": { "consumes": [ "application/json" ], - "description": "Returns the Apple Guides city picker: every region (North America, Europe, Australia, and any Apple adds) with the cities it publishes guides for, each with its id, country, coordinates, and cover photo. Pass a city id to the guides home, publishers, or publisher endpoints to scope them to that city; omit it for the Worldwide scope.", - "operationId": "apple-maps-guides-cities", - "parameters": [ - { - "description": "Display language as a BCP 47 tag, e.g. en-US, fr-FR. Region and city names follow it. Defaults to en-US.", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-US" - }, - { - "description": "Two-letter ISO 3166-1 country code. Defaults to US.", - "in": "query", - "name": "country", - "type": "string", - "x-example": "US" - } - ], + "description": "Returns CoinGecko's global crypto market snapshot: total market cap in USD with its 24-hour and 1-year change, Bitcoin market cap, Bitcoin and Ethereum dominance, stablecoin market cap and share, and the number of coins, exchanges and categories tracked. Takes no parameters.", + "operationId": "coingecko-global", "produces": [ "application/json" ], @@ -282630,7 +353524,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.guidesCitiesResponseDoc" + "$ref": "#/definitions/coingecko.globalResponseDoc" } }, "400": { @@ -282639,6 +353533,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -282651,41 +353551,52 @@ "ApiKeyAuth": [] } ], - "summary": "List the regions and cities Apple Guides cover", + "summary": "CoinGecko global market snapshot", "tags": [ - "Apple Maps" + "CoinGecko" ] } }, - "/apple-maps/guides/guide": { + "/coingecko/global/charts": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Apple Guide (curated collection) by id: title, description, last-modified time, cover photos, source link, publisher, and every place in the guide with the publisher's blurb for it plus the place's Apple place ID, name, category, coordinates, address, phone, website, rating, price level, hours, and photo.", - "operationId": "apple-maps-guide", + "description": "Returns a time series for one global crypto metric from CoinGecko: total market cap (default), Bitcoin dominance, altcoin market cap or DeFi market cap. Choose a `range` from `24h` to `max` (default `90d`) and cap points per series with `limit` (default 120, max 500). Each point has a timestamp, datetime and value.", + "operationId": "coingecko-global-charts", "parameters": [ { - "description": "Guide id: from the guides home, a publisher page, a place's guide_ids, or the curated= value in a maps.apple.com/guides URL", + "description": "Chart kind, default total_market_cap", + "enum": [ + "total_market_cap", + "bitcoin_dominance", + "altcoin_market_cap", + "defi_market_cap" + ], "in": "query", - "name": "guide_id", - "required": true, - "type": "string", - "x-example": "13100041759208417726" + "name": "kind", + "type": "string" }, { - "description": "Display language as a BCP 47 tag, e.g. en-US, fr-FR. Defaults to en-US.", + "description": "Chart range, default 90d", + "enum": [ + "24h", + "7d", + "14d", + "30d", + "90d", + "1y", + "max" + ], "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-US" + "name": "range", + "type": "string" }, { - "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "description": "Rows per series to return, default 120, max 500", "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "name": "limit", + "type": "integer" } ], "produces": [ @@ -282695,7 +353606,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.guideResponseDoc" + "$ref": "#/definitions/coingecko.globalChartsResponseDoc" } }, "400": { @@ -282704,8 +353615,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -282722,41 +353633,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Apple Guide with its places", + "summary": "CoinGecko global chart series", "tags": [ - "Apple Maps" + "CoinGecko" ] } }, - "/apple-maps/guides/lookup": { + "/coingecko/learn/articles": { "get": { "consumes": [ "application/json" ], - "description": "Returns guide summaries (id, title, description, last-modified time, place count, cover photo, source link) for up to 20 guide ids in one call, for example the guide_ids a place carries. Ids Apple does not return are listed in not_found. Publisher details are not part of this lookup; use the guide endpoint for a single guide's publisher and places.", - "operationId": "apple-maps-guides-lookup", + "description": "Lists article cards from CoinGecko Learn, optionally narrowed by `category` (`all` by default, `latest`, `guides`, `reviews`, `api` and others), up to `limit` (default 20, max 50). Each card has title, URL, image, category, excerpt, author, published date and, where present, rating score, text and votes.", + "operationId": "coingecko-learn-articles", "parameters": [ { - "description": "Comma-separated Apple guide ids, 1 to 20", - "in": "query", - "name": "guide_ids", - "required": true, - "type": "string", - "x-example": "13100041759208417726,17954826775154719886" - }, - { - "description": "Display language as a BCP 47 tag. Defaults to en-US.", + "description": "Learn category, default all", + "enum": [ + "all", + "latest", + "airdrop-guides", + "coins-and-tokens", + "guides", + "wallets-and-bridges", + "api", + "reviews" + ], "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-US" + "name": "category", + "type": "string" }, { - "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "description": "Rows to return, default 20, max 50", "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "name": "limit", + "type": "integer" } ], "produces": [ @@ -282766,7 +353677,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.guidesLookupResponseDoc" + "$ref": "#/definitions/coingecko.learnArticlesResponseDoc" } }, "400": { @@ -282775,6 +353686,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -282787,56 +353704,102 @@ "ApiKeyAuth": [] } ], - "summary": "Resolve up to 20 Apple Guide ids to guide summaries", + "summary": "CoinGecko Learn articles", "tags": [ - "Apple Maps" + "CoinGecko" ] } }, - "/apple-maps/guides/nearby": { + "/coingecko/markets": { "get": { "consumes": [ "application/json" ], - "description": "Returns the guides Apple suggests for the area around a coordinate (\"Guides We Love\" for that location) as guide summaries, plus the Apple Guides city the area belongs to (with the city id the guides home endpoint takes). A coordinate outside any guides city returns an empty list.", - "operationId": "apple-maps-guides-nearby", + "description": "Returns cryptocurrency market rows from CoinGecko. This endpoint supports the documented `vs_currency` enum and is not intended for real-time trading.", + "operationId": "coingecko-markets", "parameters": [ { - "description": "Latitude of the area", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 37.7749 - }, - { - "description": "Longitude of the area", - "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -122.4194 - }, - { - "description": "Viewport size in degrees around the center. Defaults to 0.05; minimum 0.001, maximum 5.", + "description": "Page number, default 1", "in": "query", - "name": "span", - "type": "number", - "x-example": 0.05 + "name": "page", + "type": "integer" }, { - "description": "Display language as a BCP 47 tag. Defaults to en-US.", + "description": "Rows to return, default 100, max 100", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-US" + "name": "limit", + "type": "integer" }, { - "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "description": "Quote currency", + "enum": [ + "btc", + "eth", + "ltc", + "bch", + "bnb", + "eos", + "xrp", + "xlm", + "link", + "dot", + "yfi", + "sol", + "usd", + "aed", + "ars", + "aud", + "bdt", + "bhd", + "bmd", + "brl", + "cad", + "chf", + "clp", + "cny", + "czk", + "dkk", + "eur", + "gbp", + "gel", + "hkd", + "huf", + "idr", + "ils", + "inr", + "jpy", + "krw", + "kwd", + "lkr", + "mmk", + "mxn", + "myr", + "ngn", + "nok", + "nzd", + "php", + "pkr", + "pln", + "rub", + "sar", + "sek", + "sgd", + "thb", + "try", + "twd", + "uah", + "vef", + "vnd", + "zar", + "xdr", + "xag", + "xau", + "bits", + "sats" + ], "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "name": "vs_currency", + "type": "string" } ], "produces": [ @@ -282846,7 +353809,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.guidesNearbyResponseDoc" + "$ref": "#/definitions/coingecko.marketsResponseDoc" } }, "400": { @@ -282855,6 +353818,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -282867,48 +353842,102 @@ "ApiKeyAuth": [] } ], - "summary": "Get the Apple Guides curated for the area around a coordinate", + "summary": "CoinGecko markets", "tags": [ - "Apple Maps" + "CoinGecko" ] } }, - "/apple-maps/guides/publisher": { + "/coingecko/new-coins": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Apple Guides publisher by id: name, subtitle, website, guide count, the cities the publisher offers as filters, and its guides (each with id, title, description, last-modified time, place count, cover photo, and source link). Pass one of the publisher's own city ids as city_id to return only the guides for that city.", - "operationId": "apple-maps-guides-publisher", + "description": "Lists newly listed cryptocurrencies from CoinGecko, paged with `page` (default 1) and `limit` (default and max 100), priced in `vs_currency`. Each coin has its rank, symbol, name, chain, price, 1h and 24h changes, 24h volume, fully diluted valuation and when it was last added.", + "operationId": "coingecko-new-coins", "parameters": [ { - "description": "Publisher id: from the guides home or publishers list, a guide's publisher.id, or the publisher= value in a maps.apple.com/guides URL", - "in": "query", - "name": "publisher_id", - "required": true, - "type": "string", - "x-example": "1706564968711360917" - }, - { - "description": "Restrict to one city: an id from this publisher's own cities list", + "description": "Page number, default 1", "in": "query", - "name": "city_id", - "type": "string", - "x-example": "18366846785603624515" + "name": "page", + "type": "integer" }, { - "description": "Display language as a BCP 47 tag, e.g. en-US, fr-FR. Defaults to en-US.", + "description": "Rows to return, default 100, max 100", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-US" + "name": "limit", + "type": "integer" }, { - "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "description": "Quote currency", + "enum": [ + "btc", + "eth", + "ltc", + "bch", + "bnb", + "eos", + "xrp", + "xlm", + "link", + "dot", + "yfi", + "sol", + "usd", + "aed", + "ars", + "aud", + "bdt", + "bhd", + "bmd", + "brl", + "cad", + "chf", + "clp", + "cny", + "czk", + "dkk", + "eur", + "gbp", + "gel", + "hkd", + "huf", + "idr", + "ils", + "inr", + "jpy", + "krw", + "kwd", + "lkr", + "mmk", + "mxn", + "myr", + "ngn", + "nok", + "nzd", + "php", + "pkr", + "pln", + "rub", + "sar", + "sek", + "sgd", + "thb", + "try", + "twd", + "uah", + "vef", + "vnd", + "zar", + "xdr", + "xag", + "xau", + "bits", + "sats" + ], "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "name": "vs_currency", + "type": "string" } ], "produces": [ @@ -282918,7 +353947,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.publisherResponseDoc" + "$ref": "#/definitions/coingecko.newCoinsResponseDoc" } }, "400": { @@ -282927,8 +353956,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -282945,40 +353974,25 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Apple Guides publisher and its guides", + "summary": "CoinGecko new cryptocurrencies", "tags": [ - "Apple Maps" + "CoinGecko" ] } }, - "/apple-maps/guides/publishers": { + "/coingecko/news": { "get": { "consumes": [ "application/json" ], - "description": "Returns the Apple Guides \"Browse by Publisher\" list for the Worldwide scope or one city, sorted by name: each publisher's id (the value the publisher endpoint takes), name, subtitle, website, and number of guides. With no city_id this is the complete enumeration of every publisher Apple lists, usable as the id lookup table for the publisher endpoint.", - "operationId": "apple-maps-guides-publishers", + "description": "Returns recent crypto news cards from CoinGecko, up to `limit` articles (default 20, max 50). Each article has its title, URL, image URL, summary, publisher and `published_text`, plus the coins it mentions with their id, name, symbol, URL and `change_percent` when present.", + "operationId": "coingecko-news", "parameters": [ { - "description": "City id from /apple-maps/guides/cities. Omit for the Worldwide publisher list.", - "in": "query", - "name": "city_id", - "type": "string", - "x-example": "8077516530309122779" - }, - { - "description": "Display language as a BCP 47 tag, e.g. en-US, fr-FR. Defaults to en-US.", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-US" - }, - { - "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "description": "Rows to return, default 20, max 50", "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "name": "limit", + "type": "integer" } ], "produces": [ @@ -282988,7 +354002,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.guidesPublishersResponseDoc" + "$ref": "#/definitions/coingecko.newsResponseDoc" } }, "400": { @@ -282997,8 +354011,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -283015,41 +354029,110 @@ "ApiKeyAuth": [] } ], - "summary": "List Apple Guides publishers worldwide or for one city", + "summary": "CoinGecko news cards", "tags": [ - "Apple Maps" + "CoinGecko" ] } }, - "/apple-maps/place": { + "/coingecko/nft/category/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Apple Maps place by its place ID: name, type, category taxonomy, coordinates, formatted and structured address, phone numbers, website, rating and review count, price level, weekly opening hours, amenities (payment, accessibility, parking, and similar yes/no attributes), photos, review snippets (text, rating, time, and source link, without reviewer identity), the business-claim link, and the IDs of Apple Guides that include the place. Accepts either the external place ID (starts with I, the place-id= value in a maps.apple.com/place URL) or the numeric ID from a search result.", - "operationId": "apple-maps-place", + "description": "Lists NFT collections in one CoinGecko NFT category, identified by the required `slug` such as `metaverse`. Paged with `page` and `limit` (default and max 100). Each collection has chain, floor price and market cap in native and USD terms, 24h volume, 24h sales, and 24h, 7d and 30d changes.", + "operationId": "coingecko-nft-category", "parameters": [ { - "description": "Apple place ID: external form (I594FECA0B369D14A) or numeric id from a search result", - "in": "query", - "name": "place_id", + "description": "CoinGecko NFT category slug such as metaverse", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "I594FECA0B369D14A" + "x-example": "metaverse" }, { - "description": "Display language as a BCP 47 tag, e.g. en-US, ja-JP, de-DE. Defaults to en-US.", + "description": "Page number, default 1", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-US" + "name": "page", + "type": "integer" }, { - "description": "Two-letter ISO 3166-1 country code selecting Apple's regional catalog. Defaults to US.", + "description": "Rows to return, default 100, max 100", "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "name": "limit", + "type": "integer" + }, + { + "description": "Quote currency", + "enum": [ + "btc", + "eth", + "ltc", + "bch", + "bnb", + "eos", + "xrp", + "xlm", + "link", + "dot", + "yfi", + "sol", + "usd", + "aed", + "ars", + "aud", + "bdt", + "bhd", + "bmd", + "brl", + "cad", + "chf", + "clp", + "cny", + "czk", + "dkk", + "eur", + "gbp", + "gel", + "hkd", + "huf", + "idr", + "ils", + "inr", + "jpy", + "krw", + "kwd", + "lkr", + "mmk", + "mxn", + "myr", + "ngn", + "nok", + "nzd", + "php", + "pkr", + "pln", + "rub", + "sar", + "sek", + "sgd", + "thb", + "try", + "twd", + "uah", + "vef", + "vnd", + "zar", + "xdr", + "xag", + "xau", + "bits", + "sats" + ], + "in": "query", + "name": "vs_currency", + "type": "string" } ], "produces": [ @@ -283059,7 +354142,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.placeResponseDoc" + "$ref": "#/definitions/coingecko.nftCategoryResponseDoc" } }, "400": { @@ -283074,6 +354157,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -283086,41 +354175,102 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Apple Maps place's full detail", + "summary": "CoinGecko NFT category", "tags": [ - "Apple Maps" + "CoinGecko" ] } }, - "/apple-maps/place/photos": { + "/coingecko/nfts": { "get": { "consumes": [ "application/json" ], - "description": "Returns all of a place's photos (the place endpoint caps at 20): the business cover photo first when present, then the hero photo, then every categorized photo with its category (Food & Drink, Interior, Exterior, ...), width and height.", - "operationId": "apple-maps-place-photos", + "description": "Lists NFT collections from CoinGecko's main NFT table, paged with `page` (default 1) and `limit` (default and max 100). Each collection has rank, name, chain, floor price, market cap and 24h volume in native and USD terms, 24h sales, and 24h, 7d and 30d percentage changes.", + "operationId": "coingecko-nfts", "parameters": [ { - "description": "Apple place ID (external I... form or numeric id)", + "description": "Page number, default 1", "in": "query", - "name": "place_id", - "required": true, - "type": "string", - "x-example": "I594FECA0B369D14A" + "name": "page", + "type": "integer" }, { - "description": "Display language as a BCP 47 tag, e.g. en-US. Defaults to en-US.", + "description": "Rows to return, default 100, max 100", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-US" + "name": "limit", + "type": "integer" }, { - "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "description": "Quote currency", + "enum": [ + "btc", + "eth", + "ltc", + "bch", + "bnb", + "eos", + "xrp", + "xlm", + "link", + "dot", + "yfi", + "sol", + "usd", + "aed", + "ars", + "aud", + "bdt", + "bhd", + "bmd", + "brl", + "cad", + "chf", + "clp", + "cny", + "czk", + "dkk", + "eur", + "gbp", + "gel", + "hkd", + "huf", + "idr", + "ils", + "inr", + "jpy", + "krw", + "kwd", + "lkr", + "mmk", + "mxn", + "myr", + "ngn", + "nok", + "nzd", + "php", + "pkr", + "pln", + "rub", + "sar", + "sek", + "sgd", + "thb", + "try", + "twd", + "uah", + "vef", + "vnd", + "zar", + "xdr", + "xag", + "xau", + "bits", + "sats" + ], "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "name": "vs_currency", + "type": "string" } ], "produces": [ @@ -283130,7 +354280,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.placePhotosResponseDoc" + "$ref": "#/definitions/coingecko.nftsResponseDoc" } }, "400": { @@ -283139,8 +354289,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -283157,41 +354307,33 @@ "ApiKeyAuth": [] } ], - "summary": "List every photo Apple Maps carries for a place", + "summary": "CoinGecko NFT collections", "tags": [ - "Apple Maps" + "CoinGecko" ] } }, - "/apple-maps/places": { + "/coingecko/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns the same full detail as the place endpoint for up to 20 place IDs in a single upstream call, plus the list of requested IDs Apple did not return. Accepts the external I... form and the numeric id interchangeably.", - "operationId": "apple-maps-places", + "description": "Searches CoinGecko for the required query `q` and returns matches in separate sections: `coins`, `categories`, `markets`, `nft_contracts`, `asset_platforms` and `posts`, each up to `limit` rows (default 10, max 50). Every section is always an array, and a search with no matches returns empty arrays.", + "operationId": "coingecko-search", "parameters": [ { - "description": "Comma-separated Apple place ids, 1 to 20", + "description": "Search query", "in": "query", - "name": "place_ids", + "name": "q", "required": true, "type": "string", - "x-example": "I594FECA0B369D14A,243355970509228267" - }, - { - "description": "Display language as a BCP 47 tag. Defaults to en-US.", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-US" + "x-example": "bitcoin" }, { - "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "description": "Rows per section to return, default 10, max 50", "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "name": "limit", + "type": "integer" } ], "produces": [ @@ -283201,7 +354343,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.placesResponseDoc" + "$ref": "#/definitions/coingecko.searchResponseDoc" } }, "400": { @@ -283210,6 +354352,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -283222,49 +354370,25 @@ "ApiKeyAuth": [] } ], - "summary": "Get full detail for up to 20 Apple Maps places in one call", + "summary": "CoinGecko discovery search", "tags": [ - "Apple Maps" + "CoinGecko" ] } }, - "/apple-maps/reverse-geocode": { + "/coingecko/token-unlocks": { "get": { "consumes": [ "application/json" ], - "description": "Returns Apple Maps' address record for a coordinate: the matched place name and type (an address, street, or area of interest such as a neighborhood), the formatted and structured address, the matched center, the IANA timezone, and the display region.", - "operationId": "apple-maps-reverse-geocode", + "description": "Returns CoinGecko's list of upcoming token unlocks, up to 100 rows. Each row has the coin's name, symbol, rank, price, 1-hour, 24-hour and 7-day change and market cap, the share of supply already released, and the next unlock's amount, percentage, USD value and time remaining.", + "operationId": "coingecko-token-unlocks", "parameters": [ { - "description": "Latitude to reverse-geocode", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 37.7749 - }, - { - "description": "Longitude to reverse-geocode", - "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -122.4194 - }, - { - "description": "Display language as a BCP 47 tag. Defaults to en-US.", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-US" - }, - { - "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "description": "Rows to return, default 100, max 100", "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "name": "limit", + "type": "integer" } ], "produces": [ @@ -283274,7 +354398,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.reverseGeocodeResponseDoc" + "$ref": "#/definitions/coingecko.tokenUnlocksResponseDoc" } }, "400": { @@ -283283,8 +354407,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -283301,90 +354425,122 @@ "ApiKeyAuth": [] } ], - "summary": "Reverse-geocode a coordinate with Apple Maps", + "summary": "CoinGecko incoming token unlocks", "tags": [ - "Apple Maps" + "CoinGecko" ] } }, - "/apple-maps/search": { + "/coingecko/treasuries": { "get": { "consumes": [ "application/json" ], - "description": "Returns Apple Maps places matching a keyword, business name, category, or street address near a coordinate. Each place carries its Apple place ID (the value the place endpoint takes), name, category, coordinates, formatted and structured address, phone, website, rating and review count, price level, weekly opening hours, and a hero photo. Apple returns a bounded set per viewport (around 25 places for the default span) with no pagination; widen the span or move the center to cover more area. When nothing matches near the center Apple may relocate the search to a default region, reported by relocated=true and the region bounds. The response's filters block lists the refinement chips Apple offers for this query and area (open now, top rated, in guides, cuisines, price bands, amenities, accolades, sort); pass their keys back as filters and sort to refine the same search.", - "operationId": "apple-maps-search", + "description": "Lists entities that hold crypto treasuries, filtered by `asset` (`all`, `bitcoin`, `ethereum`, `solana`, `bnb`, `xrp`, `tron`) and `holder_type` (`all`, `companies`, `governments`), up to `limit` (default and max 100). Setting both filters to non-`all` values is rejected. Rows show holdings, cost, current value, mNAV and 30-day activity.", + "operationId": "coingecko-treasuries", "parameters": [ { - "description": "Keyword, business name, category, or street address to search for", - "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "coffee" - }, - { - "description": "Search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 37.7749 - }, - { - "description": "Search center longitude", + "description": "Treasury asset filter, default all", + "enum": [ + "all", + "bitcoin", + "ethereum", + "solana", + "bnb", + "xrp", + "tron" + ], "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -122.4194 + "name": "asset", + "type": "string" }, { - "description": "Search viewport size in degrees of latitude/longitude around the center. Defaults to 0.05 (roughly a 5km box); minimum 0.001, maximum 5.", + "description": "Treasury holder type filter, default all", + "enum": [ + "all", + "companies", + "governments" + ], "in": "query", - "name": "span", - "type": "number", - "x-example": 0.05 + "name": "holder_type", + "type": "string" }, { - "description": "Max places returned. Defaults to 25, maximum 100.", + "description": "Rows to return, default 100, max 100", "in": "query", "name": "limit", - "type": "integer", - "x-example": 25 - }, - { - "description": "Display language as a BCP 47 tag, e.g. en-US, ja-JP, de-DE. Defaults to en-US.", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-US" - }, - { - "description": "Two-letter ISO 3166-1 country code selecting Apple's regional catalog. Defaults to US.", - "in": "query", - "name": "country", - "type": "string", - "x-example": "US" - }, - { - "description": "Comma-separated filter keys from the filters block of an unfiltered search for the same query and area, e.g. OPEN_NOW, TOP_RATED, FEATURED_IN_GUIDES, PRICE_RANGE_MODERATE, modern_pizza_restaurant, ACCEPTS_CREDIT_CARDS. Unknown keys return 400 listing the available keys. Costs a second upstream search.", - "in": "query", - "name": "filters", - "type": "string", - "x-example": "OPEN_NOW,modern_pizza_restaurant" + "type": "integer" }, { - "description": "Result order. Costs a second upstream search.", + "description": "Quote currency", "enum": [ - "best_match", - "distance", - "ratings" + "btc", + "eth", + "ltc", + "bch", + "bnb", + "eos", + "xrp", + "xlm", + "link", + "dot", + "yfi", + "sol", + "usd", + "aed", + "ars", + "aud", + "bdt", + "bhd", + "bmd", + "brl", + "cad", + "chf", + "clp", + "cny", + "czk", + "dkk", + "eur", + "gbp", + "gel", + "hkd", + "huf", + "idr", + "ils", + "inr", + "jpy", + "krw", + "kwd", + "lkr", + "mmk", + "mxn", + "myr", + "ngn", + "nok", + "nzd", + "php", + "pkr", + "pln", + "rub", + "sar", + "sek", + "sgd", + "thb", + "try", + "twd", + "uah", + "vef", + "vnd", + "zar", + "xdr", + "xag", + "xau", + "bits", + "sats" ], "in": "query", - "name": "sort", - "type": "string", - "x-example": "ratings" + "name": "vs_currency", + "type": "string" } ], "produces": [ @@ -283394,7 +354550,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.searchResponseDoc" + "$ref": "#/definitions/coingecko.treasuriesResponseDoc" } }, "400": { @@ -283403,6 +354559,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -283415,41 +354577,96 @@ "ApiKeyAuth": [] } ], - "summary": "Search Apple Maps places near a coordinate", + "summary": "CoinGecko crypto treasuries", "tags": [ - "Apple Maps" + "CoinGecko" ] } }, - "/apple-maps/transit-departures": { + "/coingecko/trending": { "get": { "consumes": [ "application/json" ], - "description": "Returns a transit stop or station's systems (e.g. BART, Muni Metro), lines (name, shield, color), and the upcoming departures Apple Maps shows, each with the line, headsign, direction, scheduled and live times, and real-time status. Takes the stop's Apple place ID (find stops with the search endpoint, e.g. a station name). A place that is not a transit stop returns 404.", - "operationId": "apple-maps-transit-departures", + "description": "Returns trending coins and trending categories from CoinGecko's highlights, deduplicated by slug, each section up to `limit` rows (default 20, max 50). Items carry name, URL and, where CoinGecko shows them, price in `vs_currency` and 1h, 24h and 7d percentage changes.", + "operationId": "coingecko-trending", "parameters": [ { - "description": "Apple place ID of a transit stop or station (external I... form or numeric id)", - "in": "query", - "name": "place_id", - "required": true, - "type": "string", - "x-example": "5261664738367631956" - }, - { - "description": "Display language as a BCP 47 tag, e.g. en-US. Defaults to en-US.", + "description": "Rows per section to return, default 20, max 50", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-US" + "name": "limit", + "type": "integer" }, { - "description": "Two-letter ISO 3166-1 country code. Defaults to US.", + "description": "Quote currency", + "enum": [ + "btc", + "eth", + "ltc", + "bch", + "bnb", + "eos", + "xrp", + "xlm", + "link", + "dot", + "yfi", + "sol", + "usd", + "aed", + "ars", + "aud", + "bdt", + "bhd", + "bmd", + "brl", + "cad", + "chf", + "clp", + "cny", + "czk", + "dkk", + "eur", + "gbp", + "gel", + "hkd", + "huf", + "idr", + "ils", + "inr", + "jpy", + "krw", + "kwd", + "lkr", + "mmk", + "mxn", + "myr", + "ngn", + "nok", + "nzd", + "php", + "pkr", + "pln", + "rub", + "sar", + "sek", + "sgd", + "thb", + "try", + "twd", + "uah", + "vef", + "vnd", + "zar", + "xdr", + "xag", + "xau", + "bits", + "sats" + ], "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "name": "vs_currency", + "type": "string" } ], "produces": [ @@ -283459,7 +354676,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.transitDeparturesResponseDoc" + "$ref": "#/definitions/coingecko.trendingResponseDoc" } }, "400": { @@ -283468,8 +354685,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -283486,55 +354703,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get a transit stop's lines and live departures from Apple Maps", + "summary": "CoinGecko trending highlights", "tags": [ - "Apple Maps" + "CoinGecko" ] } }, - "/apple-maps/venue/browse": { + "/colehaan/collections": { "get": { "consumes": [ "application/json" ], - "description": "Returns an indoor venue's directory (mall, airport, stadium: categories such as Clothes, Shoes, Food, All Shops with their subcategories and levels) and, when a category is given, the places inside the venue for that category with the same summary shape as search. Find venues with the search endpoint; a place without a directory returns 404, an unknown category returns 400 listing the available ones.", - "operationId": "apple-maps-venue-browse", + "description": "Returns collections from Cole Haan (https://www.colehaan.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", + "operationId": "colehaan-collections", "parameters": [ { - "description": "Apple place ID of the venue (external I... form or numeric id)", - "in": "query", - "name": "place_id", - "required": true, - "type": "string", - "x-example": "14643260860569849804" - }, - { - "description": "Directory category or subcategory to browse, by name (case-insensitive) or key from the venue's directory. Omit to list the directory only.", + "description": "1-based page, defaults to 1", "in": "query", - "name": "category", - "type": "string", - "x-example": "Clothes" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Max places returned. Defaults to 25, maximum 100.", + "description": "Maximum collections, defaults to 50 and supports up to 250", "in": "query", "name": "limit", "type": "integer", - "x-example": 25 - }, - { - "description": "Display language as a BCP 47 tag, e.g. en-US. Defaults to en-US.", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-US" - }, - { - "description": "Two-letter ISO 3166-1 country code. Defaults to US.", - "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "x-example": 50 } ], "produces": [ @@ -283544,7 +354739,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applemaps.venueBrowseResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" } }, "400": { @@ -283553,8 +354748,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -283571,43 +354766,37 @@ "ApiKeyAuth": [] } ], - "summary": "Browse the stores and places inside a venue on Apple Maps", + "summary": "List Cole Haan collections", "tags": [ - "Apple Maps" + "Cole Haan" ] } }, - "/apple-podcasts/charts": { + "/colehaan/collections/{handle}/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns Apple Podcasts show chart rankings for a `collection`, either `toppodcasts` or `topaudiopodcasts`. Narrow with `category` (a numeric Apple podcast genre ID), `country` and `limit`. Each entry has `name`, `artist_name`, `genre`, `genre_id`, `description`, `release_date`, `artwork_url` and `url`.", - "operationId": "apple-podcasts-charts", + "description": "Returns products from one Cole Haan (https://www.colehaan.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", + "operationId": "colehaan-collection-products", "parameters": [ { - "description": "Chart collection", - "in": "query", - "name": "collection", + "description": "Collection handle", + "in": "path", + "name": "handle", + "required": true, "type": "string", - "x-example": "toppodcasts" + "x-example": "collection-handle" }, { - "description": "Numeric Apple podcast genre ID", + "description": "1-based page, defaults to 1", "in": "query", - "name": "category", + "name": "page", "type": "integer", - "x-example": 1303 - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "x-example": 1 }, { - "description": "Number of chart items to return", + "description": "Maximum products, defaults to 50 and supports up to 250", "in": "query", "name": "limit", "type": "integer", @@ -283621,23 +354810,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applepodcasts.chartsResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -283648,54 +354843,33 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Apple Podcasts chart rankings", + "summary": "List Cole Haan collection products", "tags": [ - "ApplePodcasts" + "Cole Haan" ] } }, - "/apple-podcasts/charts/rankings": { + "/colehaan/pages": { "get": { "consumes": [ "application/json" ], - "description": "Returns Apple Podcasts chart rankings from the modern podcasts.apple.com charts page, covering chart algorithms (`top`, `top-subscriber`, `top-series`) crossed with entity types (`podcasts`, `podcast-episodes`, `podcast-channels`) and an optional genre filter. A richer, differently-sourced capability than the legacy RSS-based `/apple-podcasts/charts` endpoint.", - "operationId": "apple-podcasts-charts-rankings", + "description": "Lists Cole Haan static pages, with `page` (from 1) and `limit` (default 50, max 250). Each page has handle, title, URL, plain-text content and timestamps. If `transport_mode` is `ssr_embedded`, items carry only `handle`, `url` and `updated_at`, so fetch a single page for its content.", + "operationId": "colehaan-pages", "parameters": [ { - "description": "Chart algorithm. Allowed values: `top`, `top-subscriber`, `top-series`. Default `top`.", - "in": "query", - "name": "chart", - "type": "string", - "x-example": "top" - }, - { - "description": "Entity type. Allowed values: `podcasts`, `podcast-episodes`, `podcast-channels`. Default `podcasts`.", - "in": "query", - "name": "type", - "type": "string", - "x-example": "podcasts" - }, - { - "description": "Optional Apple Podcasts genre ID to filter the chart, e.g. 1303 for Comedy", + "description": "1-based page, defaults to 1", "in": "query", - "name": "genre", + "name": "page", "type": "integer", - "x-example": 1303 - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "x-example": 1 }, { - "description": "Number of chart entries to return, default 24, max 200", + "description": "Maximum static pages, defaults to 50 and supports up to 250", "in": "query", "name": "limit", "type": "integer", - "x-example": 24 + "x-example": 50 } ], "produces": [ @@ -283705,23 +354879,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applepodcasts.chartRankingsResponseDoc" + "$ref": "#/definitions/shopifybrands.pagesResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -283732,55 +354906,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Apple Podcasts chart rankings by algorithm, type, and genre", + "summary": "List Cole Haan static pages", "tags": [ - "ApplePodcasts" + "Cole Haan" ] } }, - "/apple-podcasts/episodes/search": { + "/colehaan/pages/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "Searches Apple Podcasts episodes by `term`, which is required. `country`, `lang`, `limit` and `page` (1-based) refine the search. Each episode has its `title`, `show_name`, `show_id`, `description`, `duration_millis`, `release_date`, `episode_url`, `preview_url`, `feed_url`, genres and artwork.", - "operationId": "apple-podcasts-episodes-search", + "description": "Returns one Cole Haan static page by its `handle`: id, title, URL, plain-text content, and created, published and updated times. A missing handle returns 404. When `transport_mode` is `ssr_embedded`, `id` is omitted and the content is plain text taken from the page's rich-text blocks.", + "operationId": "colehaan-page", "parameters": [ { - "description": "Search term", - "in": "query", - "name": "term", + "description": "Page handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "hardcore history" - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Result language tag", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" - }, - { - "description": "Number of episodes per page", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 - }, - { - "description": "Search page number (1-based)", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "page-handle" } ], "produces": [ @@ -283790,23 +354936,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applepodcasts.episodeSearchResponseDoc" + "$ref": "#/definitions/shopifybrands.pageResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -283817,26 +354969,33 @@ "ApiKeyAuth": [] } ], - "summary": "Search Apple Podcasts episodes", + "summary": "Get a Cole Haan static page", "tags": [ - "ApplePodcasts" + "Cole Haan" ] } }, - "/apple-podcasts/new": { + "/colehaan/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns the curated editorial shelves from podcasts.apple.com/{country}/new (New Shows, New Seasons, New Trailers, Essentials, and other seasonal spotlights). Shelves that merely mirror a Charts Rankings query are omitted here since `/apple-podcasts/charts/rankings` already covers that data.", - "operationId": "apple-podcasts-new", + "description": "Returns products from Cole Haan's (https://www.colehaan.com) product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", + "operationId": "colehaan-products", "parameters": [ { - "description": "Two-letter storefront country code", + "description": "1-based page, defaults to 1", "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Maximum products, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -283846,17 +355005,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applepodcasts.newShelvesResponseDoc" + "$ref": "#/definitions/shopifybrands.productsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -283867,55 +355032,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Apple Podcasts curated \"New\" editorial shelves", + "summary": "List Cole Haan products", "tags": [ - "ApplePodcasts" + "Cole Haan" ] } }, - "/apple-podcasts/search": { + "/colehaan/products/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "Searches Apple Podcasts shows by `term`, which is required. `country`, `lang`, `limit` and `page` (1-based) refine the search. Each show has `collection_name`, `artist_name`, `feed_url`, `primary_genre_name`, `genres`, `track_count`, `release_date`, content advisory rating and several artwork sizes.", - "operationId": "apple-podcasts-search", + "description": "Returns product detail for one Cole Haan (https://www.colehaan.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", + "operationId": "colehaan-product", "parameters": [ { - "description": "Search term", - "in": "query", - "name": "term", + "description": "Product handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "hardcore history" - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Result language tag", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" - }, - { - "description": "Number of shows per page", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 - }, - { - "description": "Search page number (1-based)", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "product-handle" } ], "produces": [ @@ -283925,23 +355062,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applepodcasts.searchResponseDoc" + "$ref": "#/definitions/shopifybrands.productResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -283952,41 +355095,45 @@ "ApiKeyAuth": [] } ], - "summary": "Search Apple Podcasts shows", + "summary": "Get a Cole Haan product", "tags": [ - "ApplePodcasts" + "Cole Haan" ] } }, - "/apple-podcasts/show/{id}": { + "/colehaan/products/{handle}/recommendations": { "get": { "consumes": [ "application/json" ], - "description": "Returns the details of one Apple Podcasts show by its Apple show `id`: `collection_name`, `artist_name`, `feed_url`, `primary_genre_name`, `genres`, `track_count`, `release_date`, content advisory rating and artwork. `country` and `lang` choose the storefront and language.", - "operationId": "apple-podcasts-show", + "description": "Returns recommended products for one Cole Haan (https://www.colehaan.com) product handle. The storefront URL is fixed server-side.", + "operationId": "colehaan-product-recommendations", "parameters": [ { - "description": "Apple Podcasts show ID", + "description": "Product handle", "in": "path", - "name": "id", + "name": "handle", "required": true, "type": "string", - "x-example": "173001861" + "x-example": "product-handle" }, { - "description": "Two-letter storefront country code", + "description": "Maximum products, defaults to 10 and supports up to 20", "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "limit", + "type": "integer", + "x-example": 10 }, { - "description": "Result language tag", + "description": "Recommendation intent. Allowed values: related, complementary", + "enum": [ + "related", + "complementary" + ], "in": "query", - "name": "lang", + "name": "intent", "type": "string", - "x-example": "en-us" + "x-example": "related" } ], "produces": [ @@ -283996,29 +355143,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applepodcasts.showResponseDoc" + "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Show not found", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -284029,48 +355176,41 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Apple Podcasts show details", + "summary": "List Cole Haan product recommendations", "tags": [ - "ApplePodcasts" + "Cole Haan" ] } }, - "/apple-podcasts/show/{id}/episodes": { + "/colehaan/search/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Apple Podcasts show by its Apple show `id`, together with a list of its episodes. `limit` sets how many episodes to return; `country` and `lang` choose the storefront and language. Episodes have `title`, `description`, `duration_millis`, `release_date`, `episode_url` and `episode_guid`.", - "operationId": "apple-podcasts-show-episodes", + "description": "Returns products, collections, and query suggestions from Cole Haan's (https://www.colehaan.com) predictive search. The storefront URL is fixed server-side.", + "operationId": "colehaan-search-suggest", "parameters": [ { - "description": "Apple Podcasts show ID", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "173001861" - }, - { - "description": "Two-letter storefront country code", + "description": "Search query", "in": "query", - "name": "country", + "name": "q", + "required": true, "type": "string", - "x-example": "us" + "x-example": "wool" }, { - "description": "Result language tag", + "description": "Comma-separated suggestion types. Allowed values: product, collection, query", "in": "query", - "name": "lang", + "name": "types", "type": "string", - "x-example": "en-us" + "x-example": "product,collection,query" }, { - "description": "Number of episodes to return", + "description": "Maximum results per type, defaults to 10 and supports up to 20", "in": "query", "name": "limit", "type": "integer", - "x-example": 50 + "x-example": 10 } ], "produces": [ @@ -284080,29 +355220,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applepodcasts.showEpisodesResponseDoc" + "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Show not found", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -284113,41 +355247,42 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Apple Podcasts show episodes", + "summary": "Get Cole Haan search suggestions", "tags": [ - "ApplePodcasts" + "Cole Haan" ] } }, - "/apple-podcasts/show/{id}/related": { + "/colehaan/sitemap/urls": { "get": { "consumes": [ "application/json" ], - "description": "Returns the \"You Might Also Like\" rail for a single show, sourced from the modern podcasts.apple.com show page's listener-cohort recommendation data.", - "operationId": "apple-podcasts-show-related", + "description": "Returns capped URL entries from Cole Haan's (https://www.colehaan.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", + "operationId": "colehaan-sitemap-urls", "parameters": [ { - "description": "Apple Podcasts show ID", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "173001861" - }, - { - "description": "Two-letter storefront country code", + "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", + "enum": [ + "all", + "products", + "collections", + "pages", + "blogs", + "agentic_discovery", + "other" + ], "in": "query", - "name": "country", + "name": "type", "type": "string", - "x-example": "us" + "x-example": "products" }, { - "description": "Number of related shows to return, default 20, max 50", + "description": "Maximum URL entries, defaults to 50 and supports up to 250", "in": "query", "name": "limit", "type": "integer", - "x-example": 20 + "x-example": 50 } ], "produces": [ @@ -284157,29 +355292,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/applepodcasts.relatedShowsResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Show not found", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -284190,63 +355319,19 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Apple Podcasts \"You Might Also Like\" related shows", + "summary": "List Cole Haan sitemap URLs", "tags": [ - "ApplePodcasts" + "Cole Haan" ] } }, - "/appstore/app": { + "/colehaan/sitemaps": { "get": { "consumes": [ "application/json" ], - "description": "Returns app metadata from the App Store. Provide either `id` (numeric track ID) or `app_id` (bundle ID). `id`/`app_id` can identify an iPhone, iPad, or Mac App Store listing.", - "operationId": "appstore-app", - "parameters": [ - { - "description": "App Store numeric track ID (digits only)", - "in": "query", - "name": "id", - "type": "string", - "x-example": "553834731" - }, - { - "description": "App Store bundle ID", - "in": "query", - "name": "app_id", - "type": "string", - "x-example": "com.midasplayer.apps.candycrushsaga" - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Result language tag", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" - }, - { - "default": false, - "description": "Include ratings histogram", - "in": "query", - "name": "ratings", - "type": "boolean" - }, - { - "default": false, - "description": "Include the full device-platform compatibility list (adds one extra upstream fetch)", - "in": "query", - "name": "platforms", - "type": "boolean" - } - ], + "description": "Returns child sitemap URLs from Cole Haan's (https://www.colehaan.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", + "operationId": "colehaan-sitemaps", "produces": [ "application/json" ], @@ -284254,29 +355339,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.appDetailsResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "App not found", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -284287,19 +355366,19 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve full App Store app details", + "summary": "List Cole Haan sitemaps", "tags": [ - "AppStore" + "Cole Haan" ] } }, - "/appstore/categories": { + "/colehaan/store": { "get": { "consumes": [ "application/json" ], - "description": "Returns every category ID and chart collection accepted by `/appstore/list`, including Games and Magazines & Newspapers subgenres with their parent ID. Collections carry their device platform (`phone`, `pad`, `mac`), chart type (`top_free`, `top_paid`, `top_grossing`, `top`, `new`), and whether the feed currently returns entries.", - "operationId": "appstore-categories", + "description": "Returns storefront metadata for Cole Haan (https://www.colehaan.com). The storefront URL is fixed server-side, so no `url` parameter is accepted.", + "operationId": "colehaan-store", "produces": [ "application/json" ], @@ -284307,17 +355386,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.categoriesResponseDoc" + "$ref": "#/definitions/shopifybrands.storeResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -284328,57 +355413,24 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve App Store chart categories and collections", + "summary": "Get Cole Haan store metadata", "tags": [ - "AppStore" + "Cole Haan" ] } }, - "/appstore/collection": { + "/collider/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns app items embedded in an Apple room or EDS collection page. Discover IDs with `appstore_collections`. `platform` enum: `iphone`, `ipad`, `mac`, `vision`, `watch`, `tv`. `collection_id` must be a numeric room ID or `eds.UUID` ID returned by the discovery endpoint.", - "operationId": "appstore-collection", + "description": "Returns one Collider article by its `url`, which must be a single-segment `https://collider.com//` address. The response has the title, description, publish and update times, section, authors, lead image and body `paragraphs`. Section hubs and video or author pages are rejected as invalid parameters.", + "operationId": "collider-article", "parameters": [ { - "description": "Apple device catalog", - "enum": [ - "iphone", - "ipad", - "mac", - "vision", - "watch", - "tv" - ], - "in": "query", - "name": "platform", - "required": true, - "type": "string", - "x-example": "iphone" - }, - { - "description": "Room ID or EDS UUID collection ID from appstore_collections", + "description": "Canonical Collider article URL", "in": "query", - "name": "collection_id", + "name": "url", "required": true, "type": "string", - "x-example": "6757461219" - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Result language tag", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "x-example": "https://collider.com/saw-new-movie-mike-p-nelson-director/" } ], "produces": [ @@ -284388,29 +355440,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.collectionResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Collection not found", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -284421,49 +355473,24 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve apps in one App Store collection", + "summary": "Get Collider article content", "tags": [ - "AppStore" + "Collider" ] } }, - "/appstore/collections": { + "/collider/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the room and EDS collection links embedded in Apple's browse page for one device. `platform` enum: `iphone`, `ipad`, `mac`, `vision`, `watch`, `tv`. Pass a returned `id` and the same platform to `appstore_collection` to retrieve the collection's apps.", - "operationId": "appstore-collections", + "description": "Returns a Collider author profile for a `url` of the form `https://collider.com/author//`. The response has the name, title, image, biography, `social_links` (type and URL) and the roughly 20 latest articles on the profile. Paginated author URLs are rejected, so older articles are not available.", + "operationId": "collider-author", "parameters": [ { - "description": "Apple device catalog", - "enum": [ - "iphone", - "ipad", - "mac", - "vision", - "watch", - "tv" - ], + "description": "Canonical Collider author URL", "in": "query", - "name": "platform", + "name": "url", "required": true, "type": "string", - "x-example": "iphone" - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Result language tag", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "x-example": "https://collider.com/author/hannah-hunt/" } ], "produces": [ @@ -284473,29 +355500,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.collectionsResponseDoc" + "$ref": "#/definitions/publicnews.colliderAuthorResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Page not found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Rate limit exceeded", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -284506,41 +355527,74 @@ "ApiKeyAuth": [] } ], - "summary": "Discover App Store editorial collections", + "summary": "Get a Collider author profile", "tags": [ - "AppStore" + "Collider" ] } }, - "/appstore/developer/{dev_id}": { + "/collider/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the App Store apps published by one developer, by Apple developer (artist) id, for an optional storefront country and language. Each app carries its id, title, description, icon and screenshots, price and currency, genres, version and release notes, rating score and counts, size, supported devices and languages.", - "operationId": "appstore-developer", + "description": "Returns fresh headlines from one public Collider RSS section. Items from video categories have type video and are not readable through the article endpoint.", + "operationId": "collider-headlines", "parameters": [ { - "description": "Developer artist ID", - "in": "path", - "name": "dev_id", - "required": true, - "type": "string", - "x-example": "284882218" - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Result language tag", + "description": "Collider RSS section slug", + "enum": [ + "movie-tv-news", + "tv-movie-news", + "movies", + "movie-news", + "movie-features", + "movie-reviews", + "movie-trailers", + "tv", + "tv-news", + "tv-features", + "tv-reviews", + "tv-trailers", + "all-reviews", + "trailers", + "features", + "exclusives", + "interviews", + "fyc", + "what-to-watch", + "streaming-guides", + "other-streaming-guides", + "netflix", + "amazon", + "disney", + "max", + "hulu", + "apple-tv-plus", + "reality-tv", + "music", + "horror", + "animation", + "video-games", + "gaming-news", + "collectibles", + "screening", + "collider-signature", + "authority", + "collider-rewind", + "collider-quiz", + "podcasts", + "cl-originals", + "videos", + "latest-videos", + "video-originals", + "video-interviews", + "interview-videos", + "exclusive-videos", + "list-videos" + ], "in": "query", - "name": "lang", + "name": "section", + "required": true, "type": "string", - "x-example": "en-us" + "x-example": "movie-tv-news" } ], "produces": [ @@ -284550,29 +355604,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.developerResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Developer not found", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -284583,62 +355631,54 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve apps by developer ID", + "summary": "Get Collider section headlines", "tags": [ - "AppStore" + "Collider" ] } }, - "/appstore/editorial": { + "/collider/news": { "get": { - "consumes": [ + "description": "Lists the latest Collider stories, about 10 items. Each item has its title, canonical URL, summary, publish time, author names (co-authors are joined with a comma) and lead image. Takes no parameters.", + "operationId": "collider-news", + "produces": [ "application/json" ], - "description": "Returns the curated editorial shelves from one of Apple's per-device App Store landing pages (the same content shown by apps.apple.com's device switcher). `device` enum: `iphone`, `ipad`, `mac`, `vision`, `watch`, `tv`. `section` enum: `main` (the device's Today/Discover/Apps & Games landing page), `arcade` (the device's Apple Arcade landing page). Watch has no Arcade page — `device=watch` with `section=arcade` returns `400`.", - "operationId": "appstore-editorial", - "parameters": [ - { - "description": "Apple device catalog", - "enum": [ - "iphone", - "ipad", - "mac", - "vision", - "watch", - "tv" - ], - "in": "query", - "name": "device", - "required": true, - "type": "string", - "x-example": "iphone" - }, - { - "default": "main", - "description": "Editorial section within the device", - "enum": [ - "main", - "arcade" - ], - "in": "query", - "name": "section", - "type": "string" + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Result language tag", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "ApiKeyAuth": [] } ], + "summary": "Get Collider top stories", + "tags": [ + "Collider" + ] + } + }, + "/collider/sections": { + "get": { + "description": "Lists the Collider section slugs that `collider-headlines` accepts, such as `movie-news`, `tv-reviews`, `trailers`, `interviews`, `horror` and `video-games`. Each entry has the `slug`, display `name` and feed `url`. Takes no parameters.", + "operationId": "collider-sections", "produces": [ "application/json" ], @@ -284646,29 +355686,52 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.editorialResponseDoc" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } }, - "400": { - "description": "Missing or invalid parameters", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } - }, - "404": { - "description": "Page not found", + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Collider RSS sections", + "tags": [ + "Collider" + ] + } + }, + "/comc/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns COMC's (comc.com) closed, top-level category/sport taxonomy -- the discovery endpoint for the search endpoint's `category` param. Every slug is the exact path segment comc.com's own site uses.", + "operationId": "comc-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/comc.categoriesResponseDoc" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -284679,57 +355742,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve an App Store device or Arcade editorial landing page", + "summary": "List COMC categories", "tags": [ - "AppStore" + "COMC" ] } }, - "/appstore/editorial/category": { + "/comc/listing": { "get": { "consumes": [ "application/json" ], - "description": "Returns the curated editorial shelves for one device category page (e.g. \"Entertainment Apps for Vision\"). `category_id` is a numeric, device-specific editorial page ID — not a static enum — discovered from an `appstore_editorial` response for the SAME `device`, in its \"Browse by Category\" shelf items' `destination_id` field. `device` enum: `iphone`, `ipad`, `mac`, `vision`, `watch`, `tv`.", - "operationId": "appstore-editorial-category", + "description": "Returns one card+grade combination's full detail from COMC (comc.com): card identity and every seller's individual for-sale copy (owner, item id, price). handle is the value returned by comc_search's CardSummary.handle field (or the equivalent comc.com card URL path).", + "operationId": "comc-listing", "parameters": [ { - "description": "Apple device catalog", - "enum": [ - "iphone", - "ipad", - "mac", - "vision", - "watch", - "tv" - ], - "in": "query", - "name": "device", - "required": true, - "type": "string", - "x-example": "iphone" - }, - { - "description": "Numeric App Store editorial page ID, discovered from appstore_editorial (same device)", + "description": "Required. The handle from a comc_search result (or the equivalent comc.com card URL path).", "in": "query", - "name": "category_id", + "name": "handle", "required": true, "type": "string", - "x-example": "6503709728" - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Result language tag", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "x-example": "Cards/Football/2021/Panini_Absolute_-_Base_-_Red/36/Josh_Allen/17779360" } ], "produces": [ @@ -284739,29 +355772,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.editorialResponseDoc" + "$ref": "#/definitions/comc.listingResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Category page not found", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -284772,61 +355799,106 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve an App Store category-scoped editorial page", + "summary": "Get COMC card listing detail", "tags": [ - "AppStore" + "COMC" ] } }, - "/appstore/list": { + "/comc/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns ranked App Store apps from an iTunes RSS collection, optionally expanded to full lookup details. `collection` enum: `topfreeapplications`, `toppaidapplications`, `topgrossingapplications`, `topfreeipadapplications`, `toppaidipadapplications`, `topgrossingipadapplications`, `topmacapps`, `topfreemacapps`, `topgrossingmacapps`, `toppaidmacapps`, `newapplications`, `newfreeapplications`, `newpaidapplications`. Of the Mac collections, only `topfreemacapps` currently returns ranked apps — `topmacapps`, `topgrossingmacapps`, and `toppaidmacapps` are accepted but Apple's feed for them is currently empty. There is no separate Games `collection` — combine any collection with `category=6014` (or a Games subgenre ID, e.g. `7012` for Puzzle) to get its Games-only equivalent, e.g. Top Free Games. See the endpoint markdown for the full category ID table.", - "operationId": "appstore-list", + "description": "Searches or browses COMC's (comc.com) live consignment marketplace for graded and ungraded trading cards. Each result row is a distinct card+grade combination (COMC's own category/search grid aggregates every seller's copy under one row); chain a row's handle into the listing endpoint for the per-seller breakdown. At least one of category or query is typically useful, but both are optional -- omitting both searches all categories.", + "operationId": "comc-search", "parameters": [ { - "description": "Chart collection slug, see description for the full enum", + "description": "Optional. One of comc_categories' slug values. Omit to search all categories.", "in": "query", - "name": "collection", + "name": "category", "type": "string", - "x-example": "topfreeapplications" + "x-example": "Baseball" }, { - "description": "Numeric App Store category ID, see description for the full enum; e.g. 6014 = Games, 7012 = Games/Puzzle", + "description": "Optional free-text search query.", "in": "query", - "name": "category", - "type": "integer", - "x-example": 6014 + "name": "query", + "type": "string", + "x-example": "mike trout" }, { - "description": "Two-letter storefront country code", + "description": "Optional. Allowed values: r (Recently Added, default), c (Card #), o (Oldest), n (Newest), b (Highest SRP), h (Highest Price), l (Lowest Price), d (Biggest Discount), p (Highest Percent Off), q (Print Run), s (Least in Stock), m (Most in Stock), e (Ending Soonest).", + "enum": [ + "r", + "c", + "o", + "n", + "b", + "h", + "l", + "d", + "p", + "q", + "s", + "m", + "e" + ], "in": "query", - "name": "country", + "name": "sort", "type": "string", - "x-example": "us" + "x-example": "r" }, { - "description": "Result language tag", + "description": "Optional, comma-separated. Allowed values: AUTO (Autographed), HOF (Hall of Fame), MEM (Memorabilia), PRC (Pre-Rookie Card), RC (Rookie Card), RR (Rookie Related), RY (Rookie Year), SN (Serial Numbered).", "in": "query", - "name": "lang", + "name": "attributes", "type": "string", - "x-example": "en-us" + "x-example": "RC,AUTO" }, { - "description": "Number of apps to return", + "description": "Optional. Allowed values: aUngraded (Ungraded), aGraded (Graded), aAftermarketAuto (Aftermarket Auto), aAfterAutoGraded (Aftermarket Auto Graded).", + "enum": [ + "aUngraded", + "aGraded", + "aAftermarketAuto", + "aAfterAutoGraded" + ], "in": "query", - "name": "num", + "name": "condition", + "type": "string", + "x-example": "aGraded" + }, + { + "description": "1-based page, default 1.", + "in": "query", + "name": "page", "type": "integer", - "x-example": 50 + "x-example": 1 }, { - "default": false, - "description": "Expand each app via lookup API", + "description": "Optional. Allowed values: 6, 8, 10, 12, 14, 15, 16, 18, 20, 24, 30, 40, 50, 64, 100. Omit to use COMC's own default.", + "enum": [ + 6, + 8, + 10, + 12, + 14, + 15, + 16, + 18, + 20, + 24, + 30, + 40, + 50, + 64, + 100 + ], "in": "query", - "name": "full_detail", - "type": "boolean" + "name": "page_size", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -284836,23 +355908,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.listResultsResponseDoc" + "$ref": "#/definitions/comc.searchResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -284863,41 +355935,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve App Store collection rankings", + "summary": "Search COMC card listings", "tags": [ - "AppStore" + "COMC" ] } }, - "/appstore/privacy/{id}": { + "/congress/report": { "get": { "consumes": [ "application/json" ], - "description": "Returns the privacy disclosures shown on an App Store page for one app, identified by its numeric track `id` (digits only; anything else returns 400). The response has `privacy_policy_url`, `manage_privacy_choices_url` and `privacy_types`, each with its data categories and purposes. `country` and `lang` are optional.", - "operationId": "appstore-privacy", + "description": "Returns one US Senate disclosure report from the `filing_url` found by the stock-disclosures search, passed as `url`. Supports annual reports, periodic transaction reports and due date extension notices. Output has filer, filing date, `parts` with their rows, and a `transactions` list. House PDFs and paper filings return a validation error.", + "operationId": "congress-report", "parameters": [ { - "description": "App Store numeric track ID (digits only)", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "324684580" - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Result language tag", + "description": "Filing URL, as returned by congress-stock-disclosures' filing_url field. Must be an efdsearch.senate.gov /search/view/annual/..., /search/view/ptr/..., or /search/view/extension-notice/regular/... URL.", "in": "query", - "name": "lang", + "name": "url", + "required": true, "type": "string", - "x-example": "en-us" + "x-example": "https://efdsearch.senate.gov/search/view/annual/cc198326-0f50-4f47-8b03-a5c6440f400f/" } ], "produces": [ @@ -284907,29 +355965,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.privacyResponseDoc" + "$ref": "#/definitions/congress.reportResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "App not found", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -284940,148 +355998,346 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve App Store privacy disclosures", + "summary": "Fetch and parse a congressional disclosure report", "tags": [ - "AppStore" + "Congress" ] } }, - "/appstore/ratings": { + "/congress/stock-disclosures": { "get": { "consumes": [ "application/json" ], - "description": "Returns the total `ratings` count and the 1 to 5 star `histogram` for an App Store app. Identify it with either the numeric track `id` or the bundle ID `app_id`; a bundle ID is resolved to the track ID first, and a non-numeric `id` returns 400. `country` and `lang` are optional.", - "operationId": "appstore-ratings", + "description": "Searches congressional stock-disclosure filings for the House (default) or the Senate via `chamber`. House needs `member`; Senate takes `first_name`, `last_name`, `filer_type`, state and `report_type` filters, and `from`/`to` dates. Each result has member, office, filing year, filing type and `filing_url`. Paged by `page` and `limit` (default 50, max 500).", + "operationId": "congress-stock-disclosures", "parameters": [ { - "description": "App Store numeric track ID (digits only)", + "description": "Chamber filter. Allowed values: house, senate.", + "enum": [ + "house", + "senate" + ], "in": "query", - "name": "id", + "name": "chamber", "type": "string", - "x-example": "553834731" + "x-example": "house" }, { - "description": "App Store bundle ID", + "description": "Member name. Required for House. For Senate, this backward-compatible shorthand maps one word to last_name and maps the first word plus the complete remaining surname to first_name/last_name; it cannot be combined with either exact name field.", "in": "query", - "name": "app_id", + "name": "member", + "type": "string" + }, + { + "description": "Senate filer first-name prefix (Senate only; cannot be combined with member).", + "in": "query", + "name": "first_name", "type": "string", - "x-example": "com.midasplayer.apps.candycrushsaga" + "x-example": "Elizabeth" }, { - "description": "Two-letter storefront country code", + "description": "Senate filer last-name prefix (Senate only; cannot be combined with member).", "in": "query", - "name": "country", + "name": "last_name", "type": "string", - "x-example": "us" + "x-example": "Warren" }, { - "description": "Result language tag", + "description": "Deprecated unsupported parameter; any non-empty value returns a validation error and the parameter is planned for removal.", "in": "query", - "name": "lang", + "name": "ticker", + "type": "string" + }, + { + "description": "State or territory filter (2-letter code). For Senate this backward-compatible shorthand applies to both Senator and Candidate states and cannot be combined with senator_state or candidate_state.", + "enum": [ + "AK", + "AL", + "AR", + "AS", + "AZ", + "CA", + "CO", + "CT", + "DC", + "DE", + "FL", + "FM", + "GA", + "GU", + "HI", + "IA", + "ID", + "IL", + "IN", + "KS", + "KY", + "LA", + "MA", + "MD", + "ME", + "MH", + "MI", + "MN", + "MO", + "MP", + "MS", + "MT", + "NC", + "ND", + "NE", + "NH", + "NJ", + "NM", + "NV", + "NY", + "OH", + "OK", + "OR", + "PA", + "PR", + "PW", + "RI", + "SC", + "SD", + "TN", + "TX", + "UT", + "VA", + "VI", + "VT", + "WA", + "WI", + "WV", + "WY" + ], + "in": "query", + "name": "state", "type": "string", - "x-example": "en-us" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/appstore.ratingsResponseDoc" - } + "x-example": "CA" }, - "400": { - "description": "Missing or invalid parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Senator state filter (Senate only, 2-letter code).", + "enum": [ + "AK", + "AL", + "AR", + "AS", + "AZ", + "CA", + "CO", + "CT", + "DC", + "DE", + "FL", + "FM", + "GA", + "GU", + "HI", + "IA", + "ID", + "IL", + "IN", + "KS", + "KY", + "LA", + "MA", + "MD", + "ME", + "MH", + "MI", + "MN", + "MO", + "MP", + "MS", + "MT", + "NC", + "ND", + "NE", + "NH", + "NJ", + "NM", + "NV", + "NY", + "OH", + "OK", + "OR", + "PA", + "PR", + "PW", + "RI", + "SC", + "SD", + "TN", + "TX", + "UT", + "VA", + "VI", + "VT", + "WA", + "WI", + "WV", + "WY" + ], + "in": "query", + "name": "senator_state", + "type": "string", + "x-example": "MA" }, - "404": { - "description": "App not found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Candidate state filter (Senate only, 2-letter code).", + "enum": [ + "AK", + "AL", + "AR", + "AS", + "AZ", + "CA", + "CO", + "CT", + "DC", + "DE", + "FL", + "FM", + "GA", + "GU", + "HI", + "IA", + "ID", + "IL", + "IN", + "KS", + "KY", + "LA", + "MA", + "MD", + "ME", + "MH", + "MI", + "MN", + "MO", + "MP", + "MS", + "MT", + "NC", + "ND", + "NE", + "NH", + "NJ", + "NM", + "NV", + "NY", + "OH", + "OK", + "OR", + "PA", + "PR", + "PW", + "RI", + "SC", + "SD", + "TN", + "TX", + "UT", + "VA", + "VI", + "VT", + "WA", + "WI", + "WV", + "WY" + ], + "in": "query", + "name": "candidate_state", + "type": "string", + "x-example": "TX" }, - "429": { - "description": "Rate limit exceeded", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "House district filter (House only).", + "in": "query", + "name": "district", + "type": "string" }, - "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Retrieve App Store ratings histogram", - "tags": [ - "AppStore" - ] - } - }, - "/appstore/reviews": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of customer reviews for an App Store app, identified by `id` (numeric track ID) or `app_id` (bundle ID). `page` runs 1 to 10 and `sort` is `mostRecent` (default) or `mostHelpful`. Reviews carry `score`, `title`, `text`, `version`, `user_name` and `updated`. Returns 503 when reviews cannot be retrieved, and 404 when the app is not in that `country` storefront.", - "operationId": "appstore-reviews", - "parameters": [ + "description": "Filer-type filter, meaning differs by chamber. House: member (default) or candidate. Senate: comma-separated senator, candidate, former_senator, or the standalone all value. Defaults to senator when omitted.", + "enum": [ + "member", + "candidate", + "all", + "senator", + "former_senator" + ], + "in": "query", + "name": "filer_type", + "type": "string", + "x-example": "candidate" + }, { - "description": "App Store numeric track ID (digits only)", + "description": "House candidate-search election year filter (requires filer_type=candidate).", "in": "query", - "name": "id", + "name": "election_year", "type": "string", - "x-example": "553834731" + "x-example": "2024" }, { - "description": "App Store bundle ID", + "description": "Comma-separated Senate report-type filter (Senate only). Allowed values: annual, periodic_transaction, due_date_extension, blind_trust, other. Defaults to all types when omitted.", + "enum": [ + "annual", + "periodic_transaction", + "due_date_extension", + "blind_trust", + "other" + ], "in": "query", - "name": "app_id", + "name": "report_type", "type": "string", - "x-example": "com.midasplayer.apps.candycrushsaga" + "x-example": "annual,periodic_transaction" }, { - "description": "Two-letter storefront country code", + "description": "Minimum filing date. House accepts YYYY. Senate accepts YYYY or MM/DD/YYYY and defaults to 2012 when omitted.", "in": "query", - "name": "country", + "name": "from", "type": "string", - "x-example": "us" + "x-example": "01/01/2024" }, { - "description": "Review page number (1-10)", + "description": "Maximum filing date. House accepts YYYY. Senate accepts YYYY or MM/DD/YYYY.", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "to", + "type": "string", + "x-example": "12/31/2024" }, { - "default": "mostRecent", - "description": "Sort order", + "description": "Sort key. Allowed values: name_asc, name_desc, office_asc, office_desc, filing_year_asc, filing_year_desc.", "enum": [ - "mostRecent", - "mostHelpful" + "name_asc", + "name_desc", + "office_asc", + "office_desc", + "filing_year_asc", + "filing_year_desc" ], "in": "query", "name": "sort", - "type": "string" + "type": "string", + "x-example": "filing_year_desc" }, { - "description": "Result language tag", + "default": 1, + "description": "1-based result page (1-1000).", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "maximum": 1000, + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "description": "Max results (1-500).", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -285091,29 +356347,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.reviewsResponseDoc" + "$ref": "#/definitions/congress.stockDisclosuresResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "App not found, or not published in the requested storefront", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -285124,74 +356374,28 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve App Store reviews", + "summary": "Search congressional stock-disclosure filings", "tags": [ - "AppStore" + "Congress" ] } }, - "/appstore/search": { - "get": { + "/contact": { + "post": { "consumes": [ "application/json" ], - "description": "Returns App Store search results for a term. Set `ids_only=true` to return only app IDs. `platform` enum: `phone`, `pad`, `mac`.", - "operationId": "appstore-search", + "description": "Crawls a public website URL (homepage plus contact/about/team/imprint pages) and returns its public business contact details: emails — each tagged with a verification `status` (`verified`, `risky`, `unverified`, `invalid`) and a `type` (`generic`, `role`, `personal`) — plus social-media profiles and phone numbers. Intended for authorized public-business data only.", + "operationId": "contact", "parameters": [ { - "description": "Search term", - "in": "query", - "name": "term", + "description": "Website URL payload", + "in": "body", + "name": "option", "required": true, - "type": "string", - "x-example": "panda" - }, - { - "description": "Number of apps per page", - "in": "query", - "name": "num", - "type": "integer", - "x-example": 50 - }, - { - "description": "Search page number (1-based)", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Result language tag", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" - }, - { - "default": false, - "description": "Return only app IDs", - "in": "query", - "name": "ids_only", - "type": "boolean" - }, - { - "default": "phone", - "description": "App Store catalog to search: phone, pad, mac", - "enum": [ - "phone", - "pad", - "mac" - ], - "in": "query", - "name": "platform", - "type": "string" + "schema": { + "$ref": "#/definitions/contact.ContactRequest" + } } ], "produces": [ @@ -285201,11 +356405,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.searchResultsResponseDoc" + "$ref": "#/definitions/contact.contactResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Invalid input or missing URL", "schema": { "$ref": "#/definitions/app.Response" } @@ -285217,7 +356421,7 @@ } }, "500": { - "description": "Internal server error", + "description": "Internal server error during contact extraction", "schema": { "$ref": "#/definitions/app.Response" } @@ -285228,47 +356432,26 @@ "ApiKeyAuth": [] } ], - "summary": "Search the App Store", + "summary": "Contact API — emails, socials and phones for a website", "tags": [ - "AppStore" + "Web" ] } }, - "/appstore/similar": { + "/costco/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns the related apps shown on the App Store product page. Provide either `id` (numeric track ID) or `app_id` (bundle ID).", - "operationId": "appstore-similar", + "description": "Returns Costco category slugs and product counts relevant to an optional search term, each slug usable directly with GET /costco/search's category filter. Public data sourced from Costco's own search backend.", + "operationId": "costco-categories", "parameters": [ { - "description": "App Store numeric track ID (digits only)", - "in": "query", - "name": "id", - "type": "string", - "x-example": "553834731" - }, - { - "description": "App Store bundle ID", - "in": "query", - "name": "app_id", - "type": "string", - "x-example": "com.midasplayer.apps.candycrushsaga" - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Result language tag", + "description": "Search text to scope the returned categories to, e.g. \\", "in": "query", - "name": "lang", + "name": "query", "type": "string", - "x-example": "en-us" + "x-example": "refrigerator" } ], "produces": [ @@ -285278,29 +356461,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.similarResponseDoc" - } - }, - "400": { - "description": "Missing or invalid parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "App not found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/costco.categoriesResponseDoc" } }, - "429": { - "description": "Rate limit exceeded", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -285311,34 +356482,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve \"You Might Also Like\" apps", + "summary": "Get Costco category facets", "tags": [ - "AppStore" + "Costco" ] } }, - "/appstore/suggest/{term}": { + "/costco/product/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns App Store search suggestions for a partial search term given in the path, as a list of suggested `term` values. `country` is an optional two-letter storefront code.", - "operationId": "appstore-suggest", + "description": "Returns a Costco product's detail: title, description, manufacturer, image, price, stock status, and rating. Public data sourced from Costco's own product backend.", + "operationId": "costco-product", "parameters": [ { - "description": "Partial search term", + "description": "Costco product id, e.g. from a search result's id field or a product page URL's \\", "in": "path", - "name": "term", + "name": "id", "required": true, "type": "string", - "x-example": "panda" - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "x-example": "4000103922" } ], "produces": [ @@ -285348,23 +356512,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.suggestResponseDoc" + "$ref": "#/definitions/costco.productResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -285375,41 +356545,43 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve App Store search suggestions", + "summary": "Get a Costco product's detail", "tags": [ - "AppStore" + "Costco" ] } }, - "/appstore/version-history/{id}": { + "/costco/product/{id}/availability": { "get": { "consumes": [ "application/json" ], - "description": "Returns an App Store app's version history, as shown under \"What's New\", by numeric track id, for an optional storefront country and language. Each entry has the version number, release date and timestamp, and release notes. A non-numeric id returns `400`.", - "operationId": "appstore-version-history", + "description": "Returns a Costco product's stock and estimated-delivery status for a delivery destination. Public data sourced from Costco's own fulfillment backend.", + "operationId": "costco-product-availability", "parameters": [ { - "description": "App Store numeric track ID (digits only)", + "description": "Costco product id", "in": "path", "name": "id", "required": true, "type": "string", - "x-example": "553834731" + "x-example": "1942114" }, { - "description": "Two-letter storefront country code", + "description": "US destination ZIP code", "in": "query", - "name": "country", + "name": "postal_code", + "required": true, "type": "string", - "x-example": "us" + "x-example": "98101" }, { - "description": "Result language tag", + "description": "US destination two-letter state code", "in": "query", - "name": "lang", + "name": "state", + "required": true, "type": "string", - "x-example": "en-us" + "x-example": "WA" } ], "produces": [ @@ -285419,29 +356591,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/appstore.versionHistoryResponseDoc" + "$ref": "#/definitions/costco.productAvailabilityResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "App not found", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -285452,26 +356618,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve App Store version history", + "summary": "Get a Costco product's delivery estimate", "tags": [ - "AppStore" + "Costco" ] } }, - "/arbys/categories": { + "/costco/product/{id}/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns Arby's US menu's top-level categories -- Slow Roasted Beef, Crispy Juicy Chicken, Meals, Sides & Snacks, Beverages, Desserts, Kids Menu and others. Each entry's slug is the value GET /arbys/menu takes. store_id (optional, default 0) selects which pricing snapshot categories' item counts are read from; the default 0 is Arby's own reference catalog and carries no prices at all -- pass a store_id you already know (for example one you have seen on arbys.com after picking a location) to price GET /arbys/menu's items against a specific store. There is no location-lookup endpoint in this family.", - "operationId": "arbys-categories", + "description": "Returns a page of a Costco product's reviews: title, text, rating, author, and recommendation for each. Public data sourced from Costco's own review platform.", + "operationId": "costco-product-reviews", "parameters": [ { - "description": "Optional. Store id to read the catalog from, default 0 (Arby's priceless national reference catalog).", - "in": "query", - "name": "store_id", - "type": "integer", - "x-example": 0 + "description": "Costco product id, e.g. from a search result's id field", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "4000354684" } ], "produces": [ @@ -285481,7 +356648,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/arbys.categoriesResponseDoc" + "$ref": "#/definitions/costco.productReviewsResponseDoc" } }, "400": { @@ -285490,8 +356657,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -285508,33 +356675,33 @@ "ApiKeyAuth": [] } ], - "summary": "List Arby's menu categories", + "summary": "Get a Costco product's reviews", "tags": [ - "Arbys" + "Costco" ] } }, - "/arbys/directory": { + "/costco/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns one level of Arby's US store directory: every state Arby's serves with its store count (no params), one state's cities (state given), or one city's stores (state and city given) -- id, address, and phone only, pair with GET /arbys/location for hours/amenities/status. Unlike GET /arbys/locations, this needs no coordinate; it is a plain browse of the whole ~3,200-store US chain.", - "operationId": "arbys-directory", + "description": "Returns public Costco products matching a text query and/or a category slug: title, brand, model, image, and rating for each result. GDX is primary; if GDX is blocked, query-only searches may return explicitly partial product-sitemap results.", + "operationId": "costco-search", "parameters": [ { - "description": "Optional. Two-letter US state abbreviation. Omit to list every state.", + "description": "Search text", "in": "query", - "name": "state", + "name": "query", "type": "string", - "x-example": "OH" + "x-example": "refrigerator" }, { - "description": "Optional. City name, requires state. Omit to list every city in the state.", + "description": "Costco category slug, e.g. the last path segment of a category page URL", "in": "query", - "name": "city", + "name": "category", "type": "string", - "x-example": "Youngstown" + "x-example": "refrigerators" } ], "produces": [ @@ -285544,7 +356711,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/arbys.directoryResponseDoc" + "$ref": "#/definitions/costco.searchResponseDoc" } }, "400": { @@ -285553,8 +356720,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -285571,27 +356738,35 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Arby's US store directory by state and city", + "summary": "Search Costco products", "tags": [ - "Arbys" + "Costco" ] } }, - "/arbys/location": { + "/costco/warehouses": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Arby's restaurant directly by its store id (e.g. one found via GET /arbys/locations), with the same address, hours, amenities, and capability fields as that endpoint's results, minus distance (there is no search center for a direct lookup).", - "operationId": "arbys-location", + "description": "Returns Costco warehouses near a latitude/longitude, sorted by distance: name, address, and distance for each. Public data sourced from Costco's own warehouse locator backend.", + "operationId": "costco-warehouses", "parameters": [ { - "description": "A real Arby's store id, e.g. one returned by GET /arbys/locations", + "description": "Latitude", "in": "query", - "name": "store_id", + "name": "latitude", "required": true, - "type": "integer", - "x-example": 8725 + "type": "number", + "x-example": 47.565 + }, + { + "description": "Longitude", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.329 } ], "produces": [ @@ -285601,7 +356776,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/arbys.locationResponseDoc" + "$ref": "#/definitions/costco.warehousesResponseDoc" } }, "400": { @@ -285610,14 +356785,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -285634,56 +356803,35 @@ "ApiKeyAuth": [] } ], - "summary": "Look up one Arby's restaurant by store id", + "summary": "Find nearby Costco warehouses", "tags": [ - "Arbys" + "Costco" ] } }, - "/arbys/locations": { + "/courtlistener/courts": { "get": { "consumes": [ "application/json" ], - "description": "Returns Arby's restaurants within a radius of a coordinate, nearest first, with address, phone, coordinates, distance, open/closed status, hours, amenities, and pickup/delivery capability flags. Each result's store_id also prices GET /arbys/menu and GET /arbys/categories. To search from a free-text address instead of coordinates, resolve it first with GET /geocoding/search.", - "operationId": "arbys-locations", + "description": "Lists CourtListener's anonymous public court directory. Provide court_id to retrieve one court. page is used only for directory browsing and is 1-indexed. The endpoint does not retrieve dockets, opinions, judges, or account data.", + "operationId": "courtlistener-courts", "parameters": [ { - "description": "Search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 32.787706 - }, - { - "description": "Search center longitude", - "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -96.79985 - }, - { - "description": "Optional. Search radius in miles, 1-50, default 50. Upstream hard-blocks any radius over 50.", - "in": "query", - "name": "radius", - "type": "integer", - "x-example": 50 - }, - { - "description": "Optional. Maximum stores per page, 1-50, default 10.", + "description": "CourtListener court identifier", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "court_id", + "type": "string", + "x-example": "scotus" }, { - "description": "Optional. Zero-based page index, default 0.", + "default": 1, + "description": "Directory page, 1-indexed", "in": "query", + "minimum": 1, "name": "page", "type": "integer", - "x-example": 0 + "x-example": 1 } ], "produces": [ @@ -285693,7 +356841,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/arbys.nearbyResponseDoc" + "$ref": "#/definitions/courtlistener.courtsResponseDoc" } }, "400": { @@ -285708,6 +356856,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -285720,34 +356874,34 @@ "ApiKeyAuth": [] } ], - "summary": "Find Arby's restaurants near a coordinate", + "summary": "Browse CourtListener courts", "tags": [ - "Arbys" + "CourtListener" ] } }, - "/arbys/menu": { + "/courtlistener/people": { "get": { "consumes": [ "application/json" ], - "description": "Returns the items in one Arby's menu category, each with its stable product code, name, description, image, tags, availability, a full per-serving nutrition panel (calories, total and saturated fat, trans fat, cholesterol, sodium, carbohydrate, fiber, sugar, protein and serving weight), and a price when store_id resolves to a priced catalog. Category slugs come from GET /arbys/categories. store_id (optional, default 0) is Arby's own priceless national reference catalog; pass a store_id you already know to get that store's pricing instead -- there is no location-lookup endpoint in this family, so store_id is a passthrough value, not something this API can look up for you. A price of exactly 0 on an item is a genuine free add-on, distinct from the default catalog's complete absence of pricing.", - "operationId": "arbys-menu", + "description": "Lists CourtListener's anonymous public judicial-person directory. Provide person_id to retrieve one public person record. The response contains only public directory and position-summary metadata; sensitive biographical fields are excluded.", + "operationId": "courtlistener-people", "parameters": [ { - "description": "Category slug from /arbys/categories", + "description": "CourtListener person identifier", "in": "query", - "name": "category", - "required": true, - "type": "string", - "x-example": "slow-roasted-beef" + "minimum": 1, + "name": "person_id", + "type": "integer", + "x-example": 123 }, { - "description": "Optional. Same store id semantics as /arbys/categories.", + "description": "Cursor from a prior response's next_cursor field", "in": "query", - "name": "store_id", - "type": "integer", - "x-example": 0 + "name": "cursor", + "type": "string", + "x-example": "cD0yMDI2LTA4LTI3KzAwJTNBMDAlM0EwMC4wMDAwMDAlMkIwMCUzQTAw" } ], "produces": [ @@ -285757,7 +356911,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/arbys.menuResponseDoc" + "$ref": "#/definitions/courtlistener.peopleResponseDoc" } }, "400": { @@ -285778,6 +356932,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -285790,24 +356950,34 @@ "ApiKeyAuth": [] } ], - "summary": "List one Arby's menu category's items with full nutrition and price", + "summary": "Browse CourtListener judicial people", "tags": [ - "Arbys" + "CourtListener" ] } }, - "/arstechnica/article": { + "/courtlistener/search": { "get": { - "description": "Returns public Ars Technica article metadata and body paragraphs from a canonical article URL. The service does not bypass authentication or access controls.", - "operationId": "arstechnica-article", + "consumes": [ + "application/json" + ], + "description": "Searches CourtListener's opinion-search index by text and returns opinion-result metadata with a cursor for the next page. The endpoint does not return opinion detail, dockets, judges, alerts, or account data.", + "operationId": "courtlistener-search", "parameters": [ { - "description": "Canonical Ars Technica article URL", + "description": "Opinion search text", "in": "query", - "name": "url", + "name": "q", "required": true, "type": "string", - "x-example": "https://arstechnica.com/gadgets/2026/09/example-story/" + "x-example": "\"qualified immunity\"" + }, + { + "description": "Cursor from a prior response's next_cursor field", + "in": "query", + "name": "cursor", + "type": "string", + "x-example": "cD0yMDI2LTA4LTI3KzAwJTNBMDAlM0EwMC4wMDAwMDAlMkIwMCUzQTAw" } ], "produces": [ @@ -285817,7 +356987,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/courtlistener.searchResponseDoc" } }, "400": { @@ -285826,8 +356996,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -285844,24 +357020,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get Ars Technica article content", + "summary": "Search CourtListener opinions", "tags": [ - "Ars Technica" + "CourtListener" ] } }, - "/arstechnica/author": { + "/cricbuzz/archives": { "get": { - "description": "Returns an Ars Technica contributor's byline metadata (name, job title, headshot, contact email), biography, and recent articles from a canonical author URL. The service does not bypass authentication or access controls.", - "operationId": "arstechnica-author", + "description": "Returns all year links advertised by the Cricket Archives page and the complete series list for the selected year, grouped by the four visible archive categories. Supply year from the returned years array to fetch that year's page. category and q filter the full parsed series list locally.", + "operationId": "cricbuzz-archives", "parameters": [ { - "description": "Canonical Ars Technica contributor URL", + "description": "Archive year from the years array in the response", "in": "query", - "name": "url", - "required": true, + "name": "year", + "type": "integer", + "x-example": 2026 + }, + { + "description": "Archive series category; omit for all categories", + "enum": [ + "international", + "league", + "domestic", + "women" + ], + "in": "query", + "name": "category", "type": "string", - "x-example": "https://arstechnica.com/author/example-writer/" + "x-example": "international" + }, + { + "description": "Optional local case-insensitive substring search over selected-year series, up to 100 characters", + "in": "query", + "name": "q", + "type": "string", + "x-example": "india" } ], "produces": [ @@ -285871,7 +357066,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.arstechnicaAuthorResponseDoc" + "$ref": "#/definitions/cricbuzz.archivesResponseDoc" } }, "400": { @@ -285880,8 +357075,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -285898,41 +357093,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Ars Technica contributor profile", + "summary": "Discover Cricbuzz archive years and series", "tags": [ - "Ars Technica" + "Cricbuzz" ] } }, - "/arstechnica/headlines": { + "/cricbuzz/auction/info": { "get": { - "description": "Returns recent Ars Technica headlines for one section. `section` is required and takes `ai`, `apple`, `cars`, `culture`, `features`, `gadgets`, `gaming`, `health`, `information-technology`, `reviews`, `science`, `security`, `space`, `staff` or `tech-policy`. Each item has a title and URL, and may also carry a summary, author, publication time and image.", - "operationId": "arstechnica-headlines", + "description": "Returns all labelled text and list blocks shown in the selected edition's Auction Guide. The guide's fields vary by competition and season; date, venue, auctioneer, purse/roster rules, FAQs and currency-rate blocks are preserved as source text.", + "operationId": "cricbuzz-auction-info", "parameters": [ { - "description": "Ars Technica section slug", - "enum": [ - "ai", - "apple", - "cars", - "culture", - "features", - "gadgets", - "gaming", - "health", - "information-technology", - "reviews", - "science", - "security", - "space", - "staff", - "tech-policy" - ], + "description": "Tournament identifier from cricbuzz/auction/seasons: ipl, wpl, sa20, hunm, hunw; defaults to ipl when both tournament/year are omitted", "in": "query", - "name": "section", - "required": true, + "name": "tournament", "type": "string", - "x-example": "ai" + "x-example": "sa20" + }, + { + "description": "Edition from cricbuzz/auction/seasons: IPL 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026; WPL 2023, 2024, 2025, 2026, 2027; SA20 2027; HUNM 2026; HUNW 2026; defaults to 2026 when both tournament/year are omitted", + "in": "query", + "name": "year", + "type": "string", + "x-example": "2027" } ], "produces": [ @@ -285942,7 +357126,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/cricbuzz.auctionInfoResponseDoc" } }, "400": { @@ -285951,6 +357135,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -285963,16 +357159,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get Ars Technica section headlines", + "summary": "Get the Cricbuzz auction guide", "tags": [ - "Ars Technica" + "Cricbuzz" ] } }, - "/arstechnica/news": { + "/cricbuzz/auction/live": { "get": { - "description": "Returns the latest Ars Technica stories, with no input needed. Each item has a title and canonical URL, and may also carry a summary, author, publication time and lead image.", - "operationId": "arstechnica-news", + "description": "Returns current_status, state and featured/editor-pick players from the edition's Live tab. This is not a bid-event feed; a completed edition may return featured players without live bidding.", + "operationId": "cricbuzz-auction-live", + "parameters": [ + { + "description": "Tournament identifier from cricbuzz/auction/seasons: ipl, wpl, sa20, hunm, hunw", + "in": "query", + "name": "tournament", + "required": true, + "type": "string", + "x-example": "sa20" + }, + { + "description": "Edition from cricbuzz/auction/seasons: IPL 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026; WPL 2023, 2024, 2025, 2026, 2027; SA20 2027; HUNM 2026; HUNW 2026", + "in": "query", + "name": "year", + "required": true, + "type": "string", + "x-example": "2027" + }, + { + "description": "Currency accepted by the selected edition: INR, USD, EUR, GBP, AUD, CAD, NZD, AED, ZAR, PKR, LKR, BDT, NPR", + "in": "query", + "name": "currency", + "required": true, + "type": "string", + "x-example": "ZAR" + } + ], "produces": [ "application/json" ], @@ -285980,7 +357202,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/cricbuzz.auctionLiveResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -286001,16 +357235,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get Ars Technica top stories", + "summary": "Get the current Cricbuzz auction Live-tab payload", "tags": [ - "Ars Technica" + "Cricbuzz" ] } }, - "/arstechnica/sections": { + "/cricbuzz/auction/live-blog": { "get": { - "description": "Returns the Ars Technica section inventory: the site's own current navigation and RSS-feed-directory sections (AI, Gadgets, Science, Security, Space, and others), each linking to its public RSS feed.", - "operationId": "arstechnica-sections", + "description": "Returns the public NewsArticle JSON-LD content and dynamic tags linked from the selected edition's Auction Live Blog tab. Not all editions expose this tab; Cricbuzz may return not found or a page without a NewsArticle. Discover tournament/year from cricbuzz/auction/seasons.", + "operationId": "cricbuzz-auction-live-blog", + "parameters": [ + { + "description": "Tournament identifier from cricbuzz/auction/seasons: ipl, wpl, sa20, hunm, hunw", + "in": "query", + "name": "tournament", + "required": true, + "type": "string", + "x-example": "ipl" + }, + { + "description": "Edition from cricbuzz/auction/seasons: IPL 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026; WPL 2023, 2024, 2025, 2026, 2027; SA20 2027; HUNM 2026; HUNW 2026", + "in": "query", + "name": "year", + "required": true, + "type": "string", + "x-example": "2026" + } + ], "produces": [ "application/json" ], @@ -286018,7 +357270,31 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/cricbuzz.auctionLiveBlogResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -286027,19 +357303,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get Ars Technica sections", + "summary": "Get an edition's auction Live Blog article", "tags": [ - "Ars Technica" + "Cricbuzz" ] } }, - "/audible/categories": { + "/cricbuzz/auction/news": { "get": { - "consumes": [ - "application/json" + "description": "Returns only the selected auction edition's Auction News cards, with story IDs, canonical URLs, titles, thumbnail metadata and relative age. Global Latest News and Featured Videos sidebar items are excluded. When Cricbuzz explicitly displays No News Available, items is empty and empty_state is no_results. Discover tournament and year from cricbuzz/auction/seasons. The edition page has no sort, filter or pagination control.", + "operationId": "cricbuzz-auction-news", + "parameters": [ + { + "description": "Tournament identifier from cricbuzz/auction/seasons: ipl, wpl, sa20, hunm, hunw", + "in": "query", + "name": "tournament", + "required": true, + "type": "string", + "x-example": "sa20" + }, + { + "description": "Edition from cricbuzz/auction/seasons: IPL 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026; WPL 2023, 2024, 2025, 2026, 2027; SA20 2027; HUNM 2026; HUNW 2026", + "in": "query", + "name": "year", + "required": true, + "type": "string", + "x-example": "2027" + } ], - "description": "Returns Audible's full genre/category tree (root genres with their subgenres), including the category ids accepted by GET /audible/search's category_id filter.", - "operationId": "audible-categories", "produces": [ "application/json" ], @@ -286047,11 +357338,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/audible.categoriesResponseDoc" + "$ref": "#/definitions/cricbuzz.auctionNewsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -286068,27 +357371,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get Audible's genre/category tree", + "summary": "Get an edition's Cricbuzz Auction News cards", "tags": [ - "Audible" + "Cricbuzz" ] } }, - "/audible/category/{id}": { + "/cricbuzz/auction/options": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Audible category node and its immediate children by id — cheaper than fetching the full tree from GET /audible/categories when only one node is needed.", - "operationId": "audible-category", + "description": "Returns all filter dropdown values and sort choices embedded in the selected public completed-auction page. Use auction/seasons to discover current tournament and year values; when omitted, tournament and year default to ipl and 2026. Filter and sort values vary by edition and are returned dynamically.", + "operationId": "cricbuzz-auction-options", "parameters": [ { - "description": "Audible category id from GET /audible/categories", - "in": "path", - "name": "id", - "required": true, + "description": "Tournament identifier from cricbuzz/auction/seasons; current values: ipl, wpl, sa20, hunm, hunw", + "in": "query", + "name": "tournament", "type": "string", - "x-example": "18580606011" + "x-example": "ipl" + }, + { + "description": "Edition from cricbuzz/auction/seasons: ipl 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026; wpl 2023, 2024, 2025, 2026, 2027; sa20 2027; hunm 2026; hunw 2026", + "in": "query", + "name": "year", + "type": "string", + "x-example": "2026" } ], "produces": [ @@ -286098,7 +357404,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/audible.categoryResponseDoc" + "$ref": "#/definitions/cricbuzz.auctionOptionsResponseDoc" } }, "400": { @@ -286113,8 +357419,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -286131,104 +357437,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Audible category node", + "summary": "Discover Cricbuzz auction filters and sort values", "tags": [ - "Audible" + "Cricbuzz" ] } }, - "/audible/charts": { + "/cricbuzz/auction/player": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of an Audible chart — a ranked list with real chart position, price, and rating. This endpoint is less stable than the rest of this family. Its own filters (category, access level, language, duration, Audible-Originals-only) were individually verified to actually change results. category_id, access_level, and content_type=podcasts are mutually exclusive.", - "operationId": "audible-charts", + "description": "Returns one player's current edition profile and every auction-earnings row in the public payload. Discover player_id through auction/player-search, auction/upcoming, auction/results or auction/team; discover currency through auction/seasons.", + "operationId": "cricbuzz-auction-player-detail", "parameters": [ { - "description": "Chart type, default most_listened", - "enum": [ - "most_listened", - "bestselling" - ], - "in": "query", - "name": "chart", - "type": "string" - }, - { - "description": "Content type, default audiobooks", - "enum": [ - "audiobooks", - "podcasts" - ], - "in": "query", - "name": "content_type", - "type": "string" - }, - { - "description": "Restrict to a category id from GET /audible/categories", - "in": "query", - "name": "category_id", - "type": "string" - }, - { - "description": "Membership access level, default all", - "enum": [ - "all", - "free", - "plus", - "premium" - ], - "in": "query", - "name": "access_level", - "type": "string" - }, - { - "description": "Language filter, default all", - "enum": [ - "all", - "danish", - "english", - "french", - "german", - "italian", - "japanese", - "polish", - "portuguese", - "russian", - "spanish", - "swedish" - ], + "description": "Tournament identifier from cricbuzz/auction/seasons: ipl, wpl, sa20, hunm, hunw", "in": "query", - "name": "language", - "type": "string" + "name": "tournament", + "required": true, + "type": "string", + "x-example": "sa20" }, { - "description": "Runtime-length filter, default all", - "enum": [ - "all", - "oneHourLess", - "oneToThreeHour", - "threeToSixHour", - "sixToTenHour", - "tenToTwentyHour", - "twentyHourMore" - ], + "description": "Edition from cricbuzz/auction/seasons: IPL 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026; WPL 2023, 2024, 2025, 2026, 2027; SA20 2027; HUNM 2026; HUNW 2026", "in": "query", - "name": "duration", - "type": "string" + "name": "year", + "required": true, + "type": "string", + "x-example": "2027" }, { - "description": "Restrict to Audible Originals only", + "description": "Currency accepted by the selected edition: INR, USD, EUR, GBP, AUD, CAD, NZD, AED, ZAR, PKR, LKR, BDT, NPR", "in": "query", - "name": "originals_only", - "type": "boolean" + "name": "currency", + "required": true, + "type": "string", + "x-example": "ZAR" }, { - "description": "1-based result page, default 1, 20 results per page", + "description": "Positive Cricbuzz player ID from an auction player result or team roster", "in": "query", - "name": "page", - "type": "integer" + "name": "player_id", + "required": true, + "type": "integer", + "x-example": 8512 } ], "produces": [ @@ -286238,7 +357488,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/audible.chartsResponseDoc" + "$ref": "#/definitions/cricbuzz.auctionPlayerDetailResponseDoc" } }, "400": { @@ -286247,8 +357497,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -286265,25 +357521,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Audible chart (audible.com/charts)", + "summary": "Get a Cricbuzz auction player profile and earnings", "tags": [ - "Audible" + "Cricbuzz" ] } }, - "/audible/charts/authors": { + "/cricbuzz/auction/player-search": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of Audible's ranked author chart. It exposes only rank, author identity, image metadata when available, and a canonical author URI; author detail is not included.", - "operationId": "audible-author-charts", + "description": "Searches the current edition's public player index. q must contain 3-100 ASCII English letters or spaces, matching the source UI. A valid query with no matching players returns an empty items list.", + "operationId": "cricbuzz-auction-player-search", "parameters": [ { - "description": "1-based result page, default 1", + "description": "Tournament identifier from cricbuzz/auction/seasons: ipl, wpl, sa20, hunm, hunw", "in": "query", - "name": "page", - "type": "integer" + "name": "tournament", + "required": true, + "type": "string", + "x-example": "sa20" + }, + { + "description": "Edition from cricbuzz/auction/seasons: IPL 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026; WPL 2023, 2024, 2025, 2026, 2027; SA20 2027; HUNM 2026; HUNW 2026", + "in": "query", + "name": "year", + "required": true, + "type": "string", + "x-example": "2027" + }, + { + "description": "3-100 ASCII English letters or spaces", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "Jamie" } ], "produces": [ @@ -286293,7 +357564,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/audible.authorChartsResponseDoc" + "$ref": "#/definitions/cricbuzz.auctionPlayerSearchResponseDoc" } }, "400": { @@ -286302,6 +357573,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -286314,32 +357597,89 @@ "ApiKeyAuth": [] } ], - "summary": "Get Audible's top-author chart", + "summary": "Search Cricbuzz auction players", "tags": [ - "Audible" + "Cricbuzz" ] } }, - "/audible/list/{list}": { + "/cricbuzz/auction/results": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one of Audible's hand-curated \"Popular Lists\" pages, as its themed shelves (heading + ordered ASINs). Pair an ASIN from any shelf with GET /audible/products (batch) or GET /audible/product/{asin} for full title/author/price/rating detail. \"Best of the Year\" is not covered.", - "operationId": "audible-editorial-list", + "description": "Returns one 1-based page from the selected completed auction. Discover tournament/year/currency with cricbuzz/auction/seasons and the selected edition's Country, Status, Team, Role, Cap and Sort values with cricbuzz/auction/options. country_ids and statuses accept comma-separated values from those menus; the other filters accept one value. Pages return up to 20 rows; the source does not provide a total count or has-more flag.", + "operationId": "cricbuzz-auction-results", "parameters": [ { - "description": "Editorial list slug", - "enum": [ - "audiobooks", - "booktok", - "podcasts" - ], - "in": "path", - "name": "list", + "description": "Tournament identifier from cricbuzz/auction/seasons; current values: ipl, wpl, sa20, hunm, hunw", + "in": "query", + "name": "tournament", "required": true, "type": "string", - "x-example": "audiobooks" + "x-example": "ipl" + }, + { + "description": "Edition from cricbuzz/auction/seasons: ipl 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026; wpl 2023, 2024, 2025, 2026, 2027; sa20 2027; hunm 2026; hunw 2026", + "in": "query", + "name": "year", + "required": true, + "type": "string", + "x-example": "2026" + }, + { + "description": "Currency code from the selected edition: INR, USD, EUR, GBP, AUD, CAD, NZD, AED, ZAR, PKR, LKR, BDT, NPR", + "in": "query", + "name": "currency", + "required": true, + "type": "string", + "x-example": "INR" + }, + { + "description": "One-based page number; defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Comma-separated Country IDs from cricbuzz/auction/options; current IPL 2026 values: 96, 4, 6, 26, 9, 8, 2, 27, 527, 303, 14, 161, 72, 24, 13, 3, 23, 190, 11, 5, 384, 7, 15, 10, 12", + "in": "query", + "name": "country_ids", + "type": "string", + "x-example": "2,4" + }, + { + "description": "Comma-separated Status values from cricbuzz/auction/options; current IPL 2026 values: Sold, Unsold, Retained, RTM, Drafted, Replacement, Traded, Wild Card", + "in": "query", + "name": "statuses", + "type": "string", + "x-example": "Sold,Unsold" + }, + { + "description": "One Team ID from cricbuzz/auction/options; current IPL 2026 values: 58, 59, 61, 62, 63, 64, 65, 255, 966, 971", + "in": "query", + "name": "team_id", + "type": "string", + "x-example": "59" + }, + { + "description": "One Role from cricbuzz/auction/options; current values: Batter, Bowler, Allrounder, WK-Batter", + "in": "query", + "name": "role", + "type": "string", + "x-example": "Allrounder" + }, + { + "description": "One Cap value from cricbuzz/auction/options; current values: Capped, Uncapped", + "in": "query", + "name": "cap", + "type": "string", + "x-example": "Uncapped" + }, + { + "description": "Displayed Sort label from cricbuzz/auction/options; current values: Recent, Featured, Base Price: High to Low, Base Price: Low to High, Final Price: High to Low, Final Price: Low to High", + "in": "query", + "name": "sort", + "type": "string", + "x-example": "Recent" } ], "produces": [ @@ -286349,7 +357689,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/audible.editorialListResponseDoc" + "$ref": "#/definitions/cricbuzz.auctionResultsResponseDoc" } }, "400": { @@ -286358,8 +357698,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -286376,29 +357722,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Audible curated editorial list", + "summary": "Get filtered and sorted Cricbuzz completed-auction players", "tags": [ - "Audible" + "Cricbuzz" ] } }, - "/audible/product/{asin}": { + "/cricbuzz/auction/seasons": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns an Audible audiobook: description, authors, narrators, series, category ladders, publisher, release date, runtime, language, sample audio URL, rating (overall/performance/story), and public list price.", - "operationId": "audible-product", - "parameters": [ - { - "description": "Audible ASIN", - "in": "path", - "name": "asin", - "required": true, - "type": "string", - "x-example": "B08G9PRS1K" - } - ], + "description": "Returns every current League & Edition menu value, its canonical season slug and its accepted currencies from Cricbuzz's public season-details JSON.", + "operationId": "cricbuzz-auction-seasons", "produces": [ "application/json" ], @@ -286406,13 +357739,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/audible.productResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/cricbuzz.auctionSeasonsResponseDoc" } }, "404": { @@ -286421,8 +357748,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -286439,48 +357766,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Audible audiobook", + "summary": "Discover Cricbuzz auction leagues, editions and currencies", "tags": [ - "Audible" + "Cricbuzz" ] } }, - "/audible/product/{asin}/related": { + "/cricbuzz/auction/team": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Audible titles related to a given ASIN by a required relation type: same series, same narrator, same author, next in series, or raw similarity.", - "operationId": "audible-product-related", + "description": "Returns team purse metadata and role-grouped Batters, Wicket Keepers, All Rounders and Bowlers. Discover team_id through auction/teams/options or auction/teams; discover currency through auction/seasons.", + "operationId": "cricbuzz-auction-team-detail", "parameters": [ { - "description": "Audible ASIN", - "in": "path", - "name": "asin", + "description": "Tournament identifier from cricbuzz/auction/seasons: ipl, wpl, sa20, hunm, hunw", + "in": "query", + "name": "tournament", "required": true, "type": "string", - "x-example": "B08G9PRS1K" + "x-example": "sa20" }, { - "description": "How to relate titles to the given ASIN", - "enum": [ - "InTheSameSeries", - "ByTheSameNarrator", - "RawSimilarities", - "ByTheSameAuthor", - "NextInSameSeries" - ], + "description": "Edition from cricbuzz/auction/seasons: IPL 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026; WPL 2023, 2024, 2025, 2026, 2027; SA20 2027; HUNM 2026; HUNW 2026", "in": "query", - "name": "similarity_type", + "name": "year", "required": true, "type": "string", - "x-example": "InTheSameSeries" + "x-example": "2027" }, { - "description": "Max results, default 10, max 50", + "description": "Currency accepted by the selected edition: INR, USD, EUR, GBP, AUD, CAD, NZD, AED, ZAR, PKR, LKR, BDT, NPR", "in": "query", - "name": "limit", - "type": "integer" + "name": "currency", + "required": true, + "type": "string", + "x-example": "ZAR" + }, + { + "description": "Team ID returned by auction/teams/options for the selected edition", + "in": "query", + "name": "team_id", + "required": true, + "type": "integer", + "x-example": 1242 } ], "produces": [ @@ -286490,7 +357817,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/audible.relatedResponseDoc" + "$ref": "#/definitions/cricbuzz.auctionTeamDetailResponseDoc" } }, "400": { @@ -286499,8 +357826,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -286517,39 +357850,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get Audible titles related to an audiobook", + "summary": "Get a Cricbuzz auction team's roster", "tags": [ - "Audible" + "Cricbuzz" ] } }, - "/audible/product/{asin}/reviews": { + "/cricbuzz/auction/teams": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a page of an Audible audiobook's customer reviews (author, title, body, overall/performance/story ratings, helpful votes, submission date).", - "operationId": "audible-product-reviews", + "description": "Returns every team row for one selected edition and currency. Discover exact currency choices through auction/seasons and sort labels through auction/teams/options. Valid sort labels are Alphabetical, Spent: High to Low, Spent: Low to High, Remaining: High to Low, Remaining: Low to High, Players: High to Low and Players: Low to High.", + "operationId": "cricbuzz-auction-teams", "parameters": [ { - "description": "Audible ASIN", - "in": "path", - "name": "asin", + "description": "Tournament identifier from cricbuzz/auction/seasons: ipl, wpl, sa20, hunm, hunw", + "in": "query", + "name": "tournament", "required": true, "type": "string", - "x-example": "B08G9PRS1K" + "x-example": "sa20" }, { - "description": "Zero-based result page, default 0", + "description": "Edition from cricbuzz/auction/seasons: IPL 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026; WPL 2023, 2024, 2025, 2026, 2027; SA20 2027; HUNM 2026; HUNW 2026", "in": "query", - "name": "page", - "type": "integer" + "name": "year", + "required": true, + "type": "string", + "x-example": "2027" }, { - "description": "Max reviews, default 10, max 50", + "description": "Currency accepted by the selected edition: INR, USD, EUR, GBP, AUD, CAD, NZD, AED, ZAR, PKR, LKR, BDT, NPR", "in": "query", - "name": "limit", - "type": "integer" + "name": "currency", + "required": true, + "type": "string", + "x-example": "ZAR" + }, + { + "description": "Sort label from auction/teams/options: Alphabetical, Spent: High to Low, Spent: Low to High, Remaining: High to Low, Remaining: Low to High, Players: High to Low, Players: Low to High; defaults to the upstream default", + "in": "query", + "name": "sort", + "type": "string", + "x-example": "Spent: High to Low" } ], "produces": [ @@ -286559,7 +357900,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/audible.reviewsResponseDoc" + "$ref": "#/definitions/cricbuzz.auctionTeamsResponseDoc" } }, "400": { @@ -286568,8 +357909,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -286586,27 +357933,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Audible audiobook's customer reviews", + "summary": "Get Cricbuzz auction team purse and roster summaries", "tags": [ - "Audible" + "Cricbuzz" ] } }, - "/audible/products": { + "/cricbuzz/auction/teams/options": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Audible audiobooks for up to 50 ASINs in a single request — the same fields as GET /audible/product/{asin}. Unrecognized ASINs are silently omitted rather than failing the whole batch.", - "operationId": "audible-products", + "description": "Returns all current team IDs and names plus the seven Teams-tab sorts: Alphabetical, Spent: High to Low, Spent: Low to High, Remaining: High to Low, Remaining: Low to High, Players: High to Low, Players: Low to High. Use the returned team_id values with auction/team and the sort labels with auction/teams.", + "operationId": "cricbuzz-auction-teams-options", "parameters": [ { - "description": "Comma-separated Audible ASINs, up to 50", + "description": "Tournament identifier from cricbuzz/auction/seasons: ipl, wpl, sa20, hunm, hunw; defaults to ipl when both tournament/year are omitted", "in": "query", - "name": "asins", - "required": true, + "name": "tournament", "type": "string", - "x-example": "B08G9PRS1K,B002V1OF70" + "x-example": "sa20" + }, + { + "description": "Edition from cricbuzz/auction/seasons: IPL 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026; WPL 2023, 2024, 2025, 2026, 2027; SA20 2027; HUNM 2026; HUNW 2026; defaults to 2026 when both tournament/year are omitted", + "in": "query", + "name": "year", + "type": "string", + "x-example": "2027" } ], "produces": [ @@ -286616,7 +357966,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/audible.productsResponseDoc" + "$ref": "#/definitions/cricbuzz.auctionTeamsOptionsResponseDoc" } }, "400": { @@ -286625,8 +357975,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -286643,61 +357999,75 @@ "ApiKeyAuth": [] } ], - "summary": "Get multiple Audible audiobooks in one call", + "summary": "Discover Cricbuzz auction teams and sort values", "tags": [ - "Audible" + "Cricbuzz" ] } }, - "/audible/search": { + "/cricbuzz/auction/upcoming": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Audible's audiobook catalog by keyword, title, author, narrator, or category id. At least one filter is required.", - "operationId": "audible-search", + "description": "Returns one 1-based page of unauctioned players. Discover tournament/year/currency via auction/seasons and exact Country/Role/Cap/Sort values via auction/upcoming/options. Country IDs are comma-separated and can be selected together; sort values are Base Price: High to Low and Base Price: Low to High. The source returns up to 20 rows and no total or has-more flag.", + "operationId": "cricbuzz-auction-upcoming", "parameters": [ { - "description": "Free-text query matched across title, subtitle, and author", + "description": "Tournament identifier from cricbuzz/auction/seasons: ipl, wpl, sa20, hunm, hunw", "in": "query", - "name": "q", - "type": "string" + "name": "tournament", + "required": true, + "type": "string", + "x-example": "sa20" }, { - "description": "Match by title", + "description": "Edition from cricbuzz/auction/seasons: IPL 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026; WPL 2023, 2024, 2025, 2026, 2027; SA20 2027; HUNM 2026; HUNW 2026", "in": "query", - "name": "title", - "type": "string" + "name": "year", + "required": true, + "type": "string", + "x-example": "2027" }, { - "description": "Match by author name", + "description": "Currency accepted by the selected edition: INR, USD, EUR, GBP, AUD, CAD, NZD, AED, ZAR, PKR, LKR, BDT, NPR", "in": "query", - "name": "author", - "type": "string" + "name": "currency", + "required": true, + "type": "string", + "x-example": "ZAR" }, { - "description": "Match by narrator name", + "description": "One-based page number; defaults to 1", "in": "query", - "name": "narrator", - "type": "string" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Restrict to a category id from GET /audible/categories", + "description": "Comma-separated exact Country option values from auction/upcoming/options; SA20 2027 labels: Afghanistan, Australia, Bangladesh, Canada, England, Hong Kong China, India, Ireland, Italy, Jersey, Kenya, Namibia, Nepal, Netherlands, New Zealand, Pakistan, Scotland, Singapore, South Africa, Sri Lanka, Thailand, United Arab Emirates, United States of America, West Indies, Zimbabwe", "in": "query", - "name": "category_id", - "type": "string" + "name": "country_ids", + "type": "string", + "x-example": "9" }, { - "description": "Zero-based result page, default 0", + "description": "Exact Role option value from auction/upcoming/options; SA20 2027 labels: All, Batter, Bowler, All Rounder, WK Batter", "in": "query", - "name": "page", - "type": "integer" + "name": "role", + "type": "string", + "x-example": "Allrounder" }, { - "description": "Max results, default 10, max 50", + "description": "Exact Cap option value from auction/upcoming/options; values: Capped, Uncapped", "in": "query", - "name": "limit", - "type": "integer" + "name": "cap", + "type": "string", + "x-example": "Uncapped" + }, + { + "description": "Sort label from auction/upcoming/options: Base Price: High to Low, Base Price: Low to High", + "in": "query", + "name": "sort", + "type": "string", + "x-example": "Base Price: High to Low" } ], "produces": [ @@ -286707,7 +358077,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/audible.searchResponseDoc" + "$ref": "#/definitions/cricbuzz.auctionUpcomingResponseDoc" } }, "400": { @@ -286716,8 +358086,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -286734,27 +358110,30 @@ "ApiKeyAuth": [] } ], - "summary": "Search Audible's catalog", + "summary": "Get filtered Cricbuzz unauctioned players", "tags": [ - "Audible" + "Cricbuzz" ] } }, - "/audible/series/{asin}": { + "/cricbuzz/auction/upcoming/options": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns an Audible series and every book in it, in series order. A series has its own ASIN distinct from any book in it — find one via a book's series[].asin field from GET /audible/product/{asin}.", - "operationId": "audible-series", + "description": "Returns the edition-specific Country, Role, Cap and Sort menus from the public Unauctioned auction page. Omitted tournament/year default to ipl/2026. Current SA20 2027 Country labels are Afghanistan, Australia, Bangladesh, Canada, England, Hong Kong China, India, Ireland, Italy, Jersey, Kenya, Namibia, Nepal, Netherlands, New Zealand, Pakistan, Scotland, Singapore, South Africa, Sri Lanka, Thailand, United Arab Emirates, United States of America, West Indies and Zimbabwe. Role labels are All, Batter, Bowler, All Rounder and WK Batter; Cap values are Capped and Uncapped; Sort values are Base Price: High to Low and Base Price: Low to High. Use each option's exact `value` with auction/upcoming.", + "operationId": "cricbuzz-auction-upcoming-options", "parameters": [ { - "description": "Audible series ASIN, from a product's series[].asin field", - "in": "path", - "name": "asin", - "required": true, + "description": "Tournament identifier from cricbuzz/auction/seasons: ipl, wpl, sa20, hunm, hunw; defaults to ipl when both tournament/year are omitted", + "in": "query", + "name": "tournament", "type": "string", - "x-example": "B006W3V2B0" + "x-example": "sa20" + }, + { + "description": "Edition from cricbuzz/auction/seasons: IPL 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026; WPL 2023, 2024, 2025, 2026, 2027; SA20 2027; HUNM 2026; HUNW 2026; defaults to 2026 when both tournament/year are omitted", + "in": "query", + "name": "year", + "type": "string", + "x-example": "2027" } ], "produces": [ @@ -286764,7 +358143,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/audible.seriesResponseDoc" + "$ref": "#/definitions/cricbuzz.auctionOptionsResponseDoc" } }, "400": { @@ -286779,8 +358158,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -286797,27 +358176,32 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Audible series' ordered book list", + "summary": "Discover Cricbuzz unauctioned-player filters", "tags": [ - "Audible" + "Cricbuzz" ] } }, - "/autotrader/dealer/{id}": { + "/cricbuzz/auction/videos": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns an Autotrader dealer profile (name, phone, address, rating, website) plus a first page of the dealer's own current inventory as vehicle summaries and the dealer's total listing count.", - "operationId": "autotrader-dealer", + "description": "Returns only the selected edition's Auction Videos cards with video IDs, page URLs, titles, durations and thumbnail metadata. The global Featured Videos sidebar is excluded. If Cricbuzz displays No Videos Available, items is an explicit empty array with empty_state=no_videos. Discover tournament/year from cricbuzz/auction/seasons.", + "operationId": "cricbuzz-auction-videos", "parameters": [ { - "description": "Autotrader dealer/owner id, the numeric path segment of a /car-dealers/{id} URL", - "in": "path", - "name": "id", + "description": "Tournament identifier from cricbuzz/auction/seasons: ipl, wpl, sa20, hunm, hunw", + "in": "query", + "name": "tournament", "required": true, "type": "string", - "x-example": "64141623" + "x-example": "ipl" + }, + { + "description": "Edition from cricbuzz/auction/seasons: IPL 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026; WPL 2023, 2024, 2025, 2026, 2027; SA20 2027; HUNM 2026; HUNW 2026", + "in": "query", + "name": "year", + "required": true, + "type": "string", + "x-example": "2026" } ], "produces": [ @@ -286827,7 +358211,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/autotrader.DealerResponse" + "$ref": "#/definitions/cricbuzz.auctionVideosResponseDoc" } }, "400": { @@ -286842,8 +358226,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -286860,144 +358244,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Autotrader dealer profile", + "summary": "Get an edition's Cricbuzz Auction Videos cards", "tags": [ - "Autotrader" + "Cricbuzz" ] } }, - "/autotrader/search": { + "/cricbuzz/match-facts": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Autotrader for new and used car listings, returning vehicle summaries (make, model, trim, year, mileage, pricing, images) plus the total matching count.", - "operationId": "autotrader-search", + "description": "Returns the public Info-tab match title, toss, venue guide, umpires, third umpire, referee, both team squads, bench players, and support staff. Use the canonical match URL returned by /cricbuzz/matches. Squad member links are preserved where Cricbuzz publishes them.", + "operationId": "cricbuzz-match-facts", "parameters": [ { - "description": "Free-text keyword search", - "in": "query", - "name": "query", - "type": "string", - "x-example": "leather seats" - }, - { - "description": "5-digit US ZIP code to search around", - "in": "query", - "name": "zip", - "type": "string", - "x-example": "90210" - }, - { - "description": "Search radius in miles around zip", - "in": "query", - "name": "radius", - "type": "integer", - "x-example": 50 - }, - { - "description": "Autotrader make code, e.g. TOYOTA, HONDA, BMW", - "in": "query", - "name": "make", - "type": "string", - "x-example": "TOYOTA" - }, - { - "description": "Autotrader model code, e.g. CAMRY. Requires make", - "in": "query", - "name": "model", - "type": "string", - "x-example": "CAMRY" - }, - { - "description": "Autotrader trim code. Requires make and model", - "in": "query", - "name": "trim", - "type": "string", - "x-example": "LE" - }, - { - "description": "Listing condition. Allowed values: new, used, certified, 3p_cert", - "enum": [ - "new", - "used", - "certified", - "3p_cert" - ], - "in": "query", - "name": "condition", - "type": "string", - "x-example": "used" - }, - { - "description": "Body style. Allowed values: convertible, coupe, hatchback, sedan, suv, truck, van, wagon", - "enum": [ - "convertible", - "coupe", - "hatchback", - "sedan", - "suv", - "truck", - "van", - "wagon" - ], - "in": "query", - "name": "body_style", - "type": "string", - "x-example": "suv" - }, - { - "description": "Seller type. Allowed values: dealer, private", - "enum": [ - "dealer", - "private" - ], + "description": "Canonical Cricbuzz live-cricket-scores URL returned by /cricbuzz/matches", "in": "query", - "name": "seller_type", + "name": "match_url", + "required": true, "type": "string", - "x-example": "dealer" - }, - { - "description": "Minimum model year", - "in": "query", - "name": "min_year", - "type": "integer", - "x-example": 2020 - }, - { - "description": "Maximum model year", - "in": "query", - "name": "max_year", - "type": "integer", - "x-example": 2026 - }, - { - "description": "Minimum price in US dollars", - "in": "query", - "name": "min_price", - "type": "integer", - "x-example": 10000 - }, - { - "description": "Maximum price in US dollars", - "in": "query", - "name": "max_price", - "type": "integer", - "x-example": 40000 - }, - { - "description": "Maximum odometer mileage", - "in": "query", - "name": "max_mileage", - "type": "integer", - "x-example": 60000 - }, - { - "description": "1-indexed result page, defaults to 1. Autotrader returns 24 results per page", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "https://www.cricbuzz.com/live-cricket-scores/172701/afg-vs-zim-1st-t20i-afghanistan-vs-zimbabwe-in-uae-2026" } ], "produces": [ @@ -287007,7 +358271,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/autotrader.searchResponseDoc" + "$ref": "#/definitions/cricbuzz.matchFactsResponseDoc" } }, "400": { @@ -287016,8 +358280,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -287034,27 +358304,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search Autotrader vehicle listings", + "summary": "Get Cricbuzz match information and squads", "tags": [ - "Autotrader" + "Cricbuzz" ] } }, - "/autotrader/vehicle/{id}": { + "/cricbuzz/match-graphs": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns an Autotrader vehicle listing: full vehicle spec (make, model, trim, mileage, colors, transmission, fuel type, engine, images, pricing), the full listing description, and seller detail (dealership or private seller).", - "operationId": "autotrader-vehicle", + "description": "Returns the first-party Graphs page's runs, run-rate, runs-per-over, win-probability, innings, and wicket-over values. Commentary prose and media are omitted. Pass the canonical match URL returned by /cricbuzz/matches.", + "operationId": "cricbuzz-match-graphs", "parameters": [ { - "description": "Autotrader listing id, the numeric path segment of a /cars-for-sale/vehicle/{id} URL", - "in": "path", - "name": "id", + "description": "Canonical Cricbuzz live-cricket-scores URL returned by /cricbuzz/matches", + "in": "query", + "name": "match_url", "required": true, "type": "string", - "x-example": "754822172" + "x-example": "https://www.cricbuzz.com/live-cricket-scores/172701/afg-vs-zim-1st-t20i-afghanistan-vs-zimbabwe-in-uae-2026" } ], "produces": [ @@ -287064,7 +358331,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/autotrader.VehicleResponse" + "$ref": "#/definitions/cricbuzz.graphsResponseDoc" } }, "400": { @@ -287079,8 +358346,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -287097,24 +358364,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Autotrader vehicle listing detail", + "summary": "Get numeric Cricbuzz match graphs", "tags": [ - "Autotrader" + "Cricbuzz" ] } }, - "/axios/article": { + "/cricbuzz/match-overs": { "get": { - "description": "Returns a public Axios article's metadata and full body paragraphs from a canonical article URL. Subscriber-only stories with no free preview return a 403 permission error instead of an empty body.", - "operationId": "axios-article", + "description": "Returns every over-summary row present in the first-party Over-by-Over page payload and the live innings filter values. Some upstream snapshots include only a recent window; the response sets is_complete=false in that case. Full ball-by-ball commentary text is not included.", + "operationId": "cricbuzz-match-overs", "parameters": [ { - "description": "Canonical www.axios.com article URL", + "description": "Canonical Cricbuzz live-cricket-scores URL returned by /cricbuzz/matches", "in": "query", - "name": "url", + "name": "match_url", "required": true, "type": "string", - "x-example": "https://www.axios.com/2026/09/19/google-safety-incidents-testing-hacks" + "x-example": "https://www.cricbuzz.com/live-cricket-scores/172701/afg-vs-zim-1st-t20i-afghanistan-vs-zimbabwe-in-uae-2026" } ], "produces": [ @@ -287124,7 +358391,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/axios.articleResponseDoc" + "$ref": "#/definitions/cricbuzz.oversResponseDoc" } }, "400": { @@ -287133,12 +358400,6 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "404": { "description": "Not Found", "schema": { @@ -287163,16 +358424,44 @@ "ApiKeyAuth": [] } ], - "summary": "Get Axios article content", + "summary": "Get Cricbuzz over summaries", "tags": [ - "Axios" + "Cricbuzz" ] } }, - "/axios/categories": { + "/cricbuzz/matches": { "get": { - "description": "Returns Axios's full public topic and subtopic navigation tree. Use a subtopic's topic value directly as the topic parameter on axios-headlines.", - "operationId": "axios-categories", + "description": "Returns Cricbuzz match cards grouped by source category and series, including teams, scores when available, venue, time, status, and the canonical live-score URL for detail endpoints. The homepage-only Live Now and Today controls are not included because their effects were not verified. Category filtering is local over the route-backed match groups.", + "operationId": "cricbuzz-matches", + "parameters": [ + { + "description": "Match-list status; defaults to live", + "enum": [ + "live", + "recent", + "upcoming" + ], + "in": "query", + "name": "status", + "type": "string", + "x-example": "live" + }, + { + "description": "Match category; defaults to all", + "enum": [ + "all", + "international", + "league", + "domestic", + "women" + ], + "in": "query", + "name": "category", + "type": "string", + "x-example": "international" + } + ], "produces": [ "application/json" ], @@ -287180,7 +358469,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/axios.categoriesResponseDoc" + "$ref": "#/definitions/cricbuzz.matchesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -287201,26 +358496,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Axios topic navigation", + "summary": "List Cricbuzz live, recent, or upcoming matches", "tags": [ - "Axios" + "Cricbuzz" ] } }, - "/axios/headlines": { + "/cricbuzz/navigation": { "get": { - "description": "Returns the newest public Axios stories on one topic or subtopic page. topic is a topic slug (e.g. technology) or a topic/subtopic path (e.g. technology/automation-and-ai) -- see axios-categories for the full known value space.", - "operationId": "axios-headlines", - "parameters": [ - { - "description": "Axios topic slug or topic/subtopic path", - "in": "query", - "name": "topic", - "required": true, - "type": "string", - "x-example": "technology" - } - ], + "description": "Returns the current first-party JSON-LD navigation tree from the Live Scores page, including the News, Videos, Rankings, and More dropdown items and utility links. The short featured Team and Series dropdown entries are not complete directories; use the teams and series endpoints for their full dynamic lists.", + "operationId": "cricbuzz-navigation", "produces": [ "application/json" ], @@ -287228,25 +358513,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/axios.headlinesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/cricbuzz.navigationResponseDoc" } }, "503": { @@ -287261,36 +358528,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Axios topic headlines", + "summary": "Discover Cricbuzz top-level menus and dropdown links", "tags": [ - "Axios" + "Cricbuzz" ] } }, - "/baidu/search": { + "/cricbuzz/news/story": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Baidu result cards for a query: title, destination URL, snippet, publisher, and date, with page-based pagination. Each result's `type` is `web` (standard pages), `video` (video cards), or `baike` (Baidu Baike encyclopedia entries); answer widgets such as weather, entity panels, and recommendation lists are not returned. Baidu challenges a portion of requests with a security verification page; the service retries and returns 503 if every attempt is challenged, so callers should retry on 503.", - "operationId": "baidu-search", + "description": "Fetches one public canonical Cricbuzz story URL and returns its JSON-LD headline, author, dates, body, inline links and typed series/team/topic tags. Pass a URL returned by cricbuzz_auction_news or another public Cricbuzz news page. Only https://www.cricbuzz.com/cricket-news/{numeric_id}/{slug} is accepted; premium or login-gated content is not unlocked.", + "operationId": "cricbuzz-news-story", "parameters": [ { - "description": "Search query", + "description": "Canonical public Cricbuzz story URL: https://www.cricbuzz.com/cricket-news/{numeric_id}/{slug}", "in": "query", - "name": "q", + "name": "url", "required": true, "type": "string", - "x-example": "openai" - }, - { - "description": "1-based result page; defaults to 1, maximum 10", - "in": "query", - "maximum": 10, - "minimum": 1, - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "https://www.cricbuzz.com/cricket-news/136912/live-blog-ipl-2026-player-auction" } ], "produces": [ @@ -287300,29 +358555,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/baidu.searchResponseDoc" + "$ref": "#/definitions/cricbuzz.newsStoryResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Baidu upstream request failed or was challenged with a security verification", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -287333,36 +358588,23 @@ "ApiKeyAuth": [] } ], - "summary": "Search Baidu web results", + "summary": "Get a public Cricbuzz NewsArticle and its tags", "tags": [ - "Baidu" + "Cricbuzz" ] } }, - "/baidu/suggest": { + "/cricbuzz/news/topics": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Baidu search-box autocomplete completions for a query prefix, in Baidu's own ranking order. Baidu never returns more than 10 suggestions per prefix; Chinese prefixes are supported.", - "operationId": "baidu-suggest", + "description": "Returns the current public News navigation sections and all topic cards linked from the Topics page, including IDs, slugs, titles, descriptions, and canonical URLs. Topic coverage is dynamic and is discovered from Cricbuzz at request time. The response contains topic metadata only, not story bodies; the Premium Editorials navigation entry is marked premium.", + "operationId": "cricbuzz-news-topics", "parameters": [ { - "description": "Search query prefix", + "description": "Optional case-insensitive substring search over topic title, description, and slug, up to 100 characters", "in": "query", "name": "q", - "required": true, "type": "string", - "x-example": "openai" - }, - { - "description": "Suggestions to return; defaults to 10, clamped to 1..10", - "in": "query", - "maximum": 10, - "minimum": 1, - "name": "count", - "type": "integer", - "x-example": 10 + "x-example": "auction" } ], "produces": [ @@ -287372,29 +358614,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/baidu.suggestResponseDoc" + "$ref": "#/definitions/cricbuzz.newsTopicsResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal server error", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Baidu upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -287405,19 +358641,54 @@ "ApiKeyAuth": [] } ], - "summary": "Suggest Baidu search queries", + "summary": "Discover Cricbuzz News sections and topics", "tags": [ - "Baidu" + "Cricbuzz" ] } }, - "/balenciaga/categories": { + "/cricbuzz/rankings": { "get": { - "consumes": [ - "application/json" + "description": "Returns Men or Women rankings for Batting, Bowling, All rounder, or Teams. The format list is discovered from the selected category page; Men currently expose Test, ODI, and T20, while Women expose ODI and T20. Ranking rows are parsed from the page's embedded data, and empty ranking tables are reported explicitly.", + "operationId": "cricbuzz-rankings", + "parameters": [ + { + "description": "Ranking gender; defaults to men", + "enum": [ + "men", + "women" + ], + "in": "query", + "name": "gender", + "type": "string", + "x-example": "men" + }, + { + "description": "Ranking table type; defaults to batting", + "enum": [ + "batting", + "bowling", + "all-rounder", + "teams" + ], + "in": "query", + "name": "type", + "type": "string", + "x-example": "batting" + }, + { + "description": "Ranking format; defaults to the page's selected format. The valid set depends on gender.", + "enum": [ + "test", + "odi", + "t20" + ], + "in": "query", + "name": "format", + "type": "string", + "x-example": "odi" + } ], - "description": "Lists Balenciaga's storefront categories with `count`, and for each its `id`, `name`, `department`, `path` and `url`. Each `path` is the value `balenciaga-category` accepts. The response reports `country` (`ZW`) and `language` (`en`).", - "operationId": "balenciaga-categories", "produces": [ "application/json" ], @@ -287425,7 +358696,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/balenciaga.categoriesResponseDoc" + "$ref": "#/definitions/cricbuzz.rankingsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -287446,60 +358723,73 @@ "ApiKeyAuth": [] } ], - "summary": "List Balenciaga categories", + "summary": "Get an ICC ranking table from Cricbuzz", "tags": [ - "Balenciaga" + "Cricbuzz" ] } }, - "/balenciaga/category": { + "/cricbuzz/records": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Balenciaga category listing from the site's own Search-ShowAjax fragment. path comes from balenciaga-categories. sort accepts latest, price_ascending, or price_descending. filters is a comma-separated list of exact field:value pairs from the response's live facets; repeat a field to OR multiple values within that facet; omit it for an unfiltered listing.", - "operationId": "balenciaga-category", + "description": "Returns all record-topic/filter values and the selected Cricbuzz record table. The first-party request path was cold-replayed; supplied filters are validated against the page's current discovery values before fetching data.", + "operationId": "cricbuzz-records", "parameters": [ { - "description": "Category path from balenciaga-categories", + "description": "Record topic; defaults to mostRuns", + "enum": [ + "mostRuns", + "highestScore", + "highestAvg", + "highestSr", + "mostHundreds", + "mostFifties", + "mostFours", + "mostSixes", + "mostNineties", + "mostWickets", + "lowestAvg", + "bestBowlingInnings", + "mostFiveWickets", + "lowestEcon", + "lowestSr" + ], "in": "query", - "name": "path", - "required": true, + "name": "stat", "type": "string", - "x-example": "/en-en/women/bags-for-women/handbags" + "x-example": "mostRuns" }, { - "description": "Sort order", + "description": "Match format label; defaults to the current table format", "enum": [ - "latest", - "price_ascending", - "price_descending" + "test", + "odi", + "t20" ], "in": "query", - "name": "sort", + "name": "format", "type": "string", - "x-example": "latest" + "x-example": "test" }, { - "description": "One-based page number, defaults to 1", + "description": "Year value from the page's dynamically discovered Year options", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "year", + "type": "string", + "x-example": "2026" }, { - "description": "Products per page, defaults to 16, maximum 48", + "description": "Team ID from the page's dynamically discovered Team options", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 16 + "name": "team", + "type": "string", + "x-example": "2" }, { - "description": "Comma-separated exact facet filters; repeat a field for OR values, for example akeneo_macroColor:BLACK,akeneo_macroColor:WHITE", + "description": "Opponent ID from the page's dynamically discovered Oppn options", "in": "query", - "name": "filters", + "name": "opponent", "type": "string", - "x-example": "akeneo_macroColor:BLACK" + "x-example": "4" } ], "produces": [ @@ -287509,19 +358799,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/balenciaga.listingResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/cricbuzz.recordsResponseDoc" } }, "429": { @@ -287542,27 +358820,37 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Balenciaga category", + "summary": "Discover Cricbuzz record topics and filter values", "tags": [ - "Balenciaga" + "Cricbuzz" ] } }, - "/balenciaga/product": { + "/cricbuzz/schedule": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns structured product detail from Balenciaga's product page, including schema.org name/SKU/price/availability, images, color variants, and visible product details. url must be a product URL returned by balenciaga-category or balenciaga-search.", - "operationId": "balenciaga-product", + "description": "Returns every match in the current date window shown by Cricbuzz's Matches By Day page, grouped by date and series. Category and q filters run locally over that complete page payload. The date window is dynamic and can change with the upstream page.", + "operationId": "cricbuzz-schedule", "parameters": [ { - "description": "Product URL from a Balenciaga listing", + "description": "Schedule category; defaults to all", + "enum": [ + "all", + "international", + "league", + "domestic", + "women" + ], "in": "query", - "name": "url", - "required": true, + "name": "category", "type": "string", - "x-example": "/en-en/hourglass-avenue-top-handle-bag-small-black-A007IH2ACT21000.html" + "x-example": "all" + }, + { + "description": "Optional case-insensitive substring search over series, match descriptions, and team names, up to 100 characters", + "in": "query", + "name": "q", + "type": "string", + "x-example": "wellington" } ], "produces": [ @@ -287572,7 +358860,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/balenciaga.productResponseDoc" + "$ref": "#/definitions/cricbuzz.scheduleResponseDoc" } }, "400": { @@ -287581,12 +358869,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -287605,27 +358887,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Balenciaga product", + "summary": "List Cricbuzz matches by day", "tags": [ - "Balenciaga" + "Cricbuzz" ] } }, - "/balenciaga/product/variants": { + "/cricbuzz/scorecard": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Balenciaga's live color/size variation matrix for a product, including variation ids, selection/sellability flags, care text, availability, and related product ids. url may be a product URL or a Product-Variation URL from balenciaga-product's colors[].url.", - "operationId": "balenciaga-product-variants", + "description": "Returns match header, toss/result, teams/venue, and every innings' batting, bowling, totals, extras, powerplays, wickets, and partnerships. Pass the canonical match URL returned by /cricbuzz/matches. Future matches can return an explicit no_scorecard state. Media assets are not returned.", + "operationId": "cricbuzz-scorecard", "parameters": [ { - "description": "Balenciaga product URL or Product-Variation URL", + "description": "Canonical Cricbuzz live-cricket-scores URL returned by /cricbuzz/matches", "in": "query", - "name": "url", + "name": "match_url", "required": true, "type": "string", - "x-example": "https://www.balenciaga.com/on/demandware.store/Sites-BAL-R-INTL-Site/en_ZW/Product-Variation?dwvar_A007IH2ACT21000_color=1000&dwvar_A007IH2ACT21000_size=U&pid=A007IH2ACT21000&quantity=1" + "x-example": "https://www.cricbuzz.com/live-cricket-scores/172701/afg-vs-zim-1st-t20i-afghanistan-vs-zimbabwe-in-uae-2026" } ], "produces": [ @@ -287635,7 +358914,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/balenciaga.productVariantsResponseDoc" + "$ref": "#/definitions/cricbuzz.scorecardResponseDoc" } }, "400": { @@ -287668,53 +358947,44 @@ "ApiKeyAuth": [] } ], - "summary": "Get Balenciaga product variations", + "summary": "Get a Cricbuzz match scorecard", "tags": [ - "Balenciaga" + "Cricbuzz" ] } }, - "/balenciaga/search": { + "/cricbuzz/series": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Balenciaga's storefront by keyword using the site's own product-grid fragment. q is required; sort accepts latest, price_ascending, or price_descending; page is one-based with 12 products per page; and filters accepts comma-separated exact field:value pairs from live facets. Repeat a field to OR multiple values within that facet. A genuine no-result query returns an empty products list.", - "operationId": "balenciaga-search", + "description": "Returns current and future series grouped by month, with series IDs, dates, and canonical URLs. Filter by the live route-backed category, the Live Streaming flag, or a local case-insensitive series-name substring. Live Streaming may validly return an empty result set when Cricbuzz has no matching entries at the time of the request.", + "operationId": "cricbuzz-series", "parameters": [ { - "description": "Free-text search query", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "hourglass" - }, - { - "description": "Sort order", + "description": "Series category; defaults to all", "enum": [ - "latest", - "price_ascending", - "price_descending" + "all", + "international", + "domestic", + "league", + "women" ], "in": "query", - "name": "sort", + "name": "category", "type": "string", - "x-example": "latest" + "x-example": "all" }, { - "description": "One-based page number, defaults to 1", + "description": "Restrict to Cricbuzz's Live Streaming page filter", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "live_stream", + "type": "boolean", + "x-example": false }, { - "description": "Comma-separated exact facet filters; repeat a field for OR values, for example akeneo_macroColor:BLACK,akeneo_macroColor:WHITE", + "description": "Optional local substring search over series names, up to 100 characters", "in": "query", - "name": "filters", + "name": "q", "type": "string", - "x-example": "akeneo_macroColor:BLACK" + "x-example": "ashes" } ], "produces": [ @@ -287724,7 +358994,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/balenciaga.listingResponseDoc" + "$ref": "#/definitions/cricbuzz.seriesResponseDoc" } }, "400": { @@ -287733,12 +359003,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -287757,19 +359021,57 @@ "ApiKeyAuth": [] } ], - "summary": "Search Balenciaga products", + "summary": "Discover Cricbuzz current and future series", "tags": [ - "Balenciaga" + "Cricbuzz" ] } }, - "/balenciaga/store-countries": { + "/cricbuzz/series/stats": { "get": { - "consumes": [ - "application/json" + "description": "Returns all Batting/Bowling statistic topics and format values for a series, its selected filter state, and selected stats table. `stat` and `format` are validated against the page's dynamic option lists and fetched via the first-party series-stats route. Team/Season filter values are not accepted because their complete option sets have not been confirmed.", + "operationId": "cricbuzz-series-stats", + "parameters": [ + { + "description": "Canonical series URL returned by /cricbuzz/series", + "in": "query", + "name": "series_url", + "required": true, + "type": "string", + "x-example": "https://www.cricbuzz.com/cricket-series/11595/australia-tour-of-south-africa-2026/matches" + }, + { + "description": "Stat topic; defaults to the currently selected topic", + "enum": [ + "mostRuns", + "highestScore", + "highestAvg", + "highestSr", + "mostHundreds", + "mostFifties", + "mostFours", + "mostSixes", + "mostNineties", + "mostWickets", + "lowestAvg", + "bestBowlingInnings", + "mostFiveWickets", + "lowestEcon", + "lowestSr" + ], + "in": "query", + "name": "stat", + "type": "string", + "x-example": "mostRuns" + }, + { + "description": "Format ID from the response's dynamic formats list; defaults to the current page selection", + "in": "query", + "name": "format", + "type": "string", + "x-example": "1" + } ], - "description": "Lists the countries Balenciaga's store locator offers, each with a country `code` and `name`, plus a `count`. Each code is accepted by `balenciaga-stores`. The response also reports the storefront `country` and `language`.", - "operationId": "balenciaga-store-countries", "produces": [ "application/json" ], @@ -287777,7 +359079,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/balenciaga.storeCountriesResponseDoc" + "$ref": "#/definitions/cricbuzz.seriesStatsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -287798,61 +359112,70 @@ "ApiKeyAuth": [] } ], - "summary": "List Balenciaga store-locator countries", + "summary": "Discover Cricbuzz series statistics", "tags": [ - "Balenciaga" + "Cricbuzz" ] } }, - "/balenciaga/stores": { + "/cricbuzz/team/stats": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Balenciaga's public physical-store directory for one country, including addresses, coordinates, phone numbers, opening hours, and store-service flags. Use balenciaga-store-countries to discover the complete accepted country enum.", - "operationId": "balenciaga-stores", + "description": "Returns the selected team's Batting or Bowling table. First call /cricbuzz/team/stats/options with the same category and team_id. stat values currently exposed by India are mostRuns, highestScore, highestAvg, highestSr, mostHundreds, mostFifties, mostFours, mostSixes, mostNineties, mostWickets, lowestAvg, bestBowlingInnings, mostFiveWickets, lowestEcon and lowestSr; each team may expose a subset. format_id, year and opponent_id must be exact values from the options response. The source page exposes no sort control; an explicitly empty upstream table returns empty_state=no_results.", + "operationId": "cricbuzz-team-stats", "parameters": [ { - "description": "Two-letter country code", + "description": "Team-directory category from /cricbuzz/teams", "enum": [ - "AE", - "AT", - "AU", - "BE", - "BR", - "CA", - "CN", - "CZ", - "DE", - "DK", - "ES", - "FR", - "GB", - "HK", - "IE", - "IT", - "JP", - "KR", - "KW", - "MC", - "MO", - "MX", - "MY", - "NL", - "NZ", - "QA", - "SA", - "SG", - "CH", - "TH", - "TW", - "US" + "international", + "domestic", + "league", + "women" ], "in": "query", - "name": "country", + "name": "category", "required": true, "type": "string", - "x-example": "US" + "x-example": "international" + }, + { + "description": "Team ID returned by /cricbuzz/teams for the selected category", + "in": "query", + "name": "team_id", + "required": true, + "type": "integer", + "x-example": 2 + }, + { + "description": "A value returned for the selected team by /cricbuzz/team/stats/options; current India values are mostRuns, highestScore, highestAvg, highestSr, mostHundreds, mostFifties, mostFours, mostSixes, mostNineties, mostWickets, lowestAvg, bestBowlingInnings, mostFiveWickets, lowestEcon, lowestSr", + "in": "query", + "name": "stat", + "required": true, + "type": "string", + "x-example": "mostRuns" + }, + { + "description": "Format ID returned by /cricbuzz/team/stats/options", + "in": "query", + "name": "format_id", + "required": true, + "type": "string", + "x-example": "2" + }, + { + "description": "Year value returned by /cricbuzz/team/stats/options, including all when offered", + "in": "query", + "name": "year", + "required": true, + "type": "string", + "x-example": "2025" + }, + { + "description": "Opponent ID returned by /cricbuzz/team/stats/options, including all when offered", + "in": "query", + "name": "opponent_id", + "required": true, + "type": "string", + "x-example": "4" } ], "produces": [ @@ -287862,7 +359185,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/balenciaga.storesResponseDoc" + "$ref": "#/definitions/cricbuzz.teamStatsResponseDoc" } }, "400": { @@ -287871,6 +359194,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -287889,24 +359218,38 @@ "ApiKeyAuth": [] } ], - "summary": "List Balenciaga stores", + "summary": "Fetch one team statistics table", "tags": [ - "Balenciaga" + "Cricbuzz" ] } }, - "/barrons/article": { + "/cricbuzz/team/stats/options": { "get": { - "description": "Returns one Barron's article's title, byline, section, publication time, word count, and body paragraphs, recovered from a public web-archive snapshot of the article. Barron's serves only the first paragraphs of an article at the origin, so an article is returned only when a full-text archive snapshot exists; an article without one returns 404.", - "operationId": "barrons-article", + "description": "Returns the selected team's complete Batting and Bowling topic menus, supported format IDs, every year value and every opponent ID from Cricbuzz's team Stats page. Discover team_id and category from /cricbuzz/teams; use the exact dynamic values returned here with /cricbuzz/team/stats. The source page exposes no sort control.", + "operationId": "cricbuzz-team-stats-options", "parameters": [ { - "description": "Canonical Barron's article URL", + "description": "Team-directory category from /cricbuzz/teams", + "enum": [ + "international", + "domestic", + "league", + "women" + ], "in": "query", - "name": "url", + "name": "category", "required": true, "type": "string", - "x-example": "https://www.barrons.com/articles/nvidia-stock-price-meta-ai-chips-rally-11911927" + "x-example": "international" + }, + { + "description": "Team ID returned by /cricbuzz/teams for the selected category", + "in": "query", + "name": "team_id", + "required": true, + "type": "integer", + "x-example": 2 } ], "produces": [ @@ -287916,7 +359259,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/barrons.articleResponseDoc" + "$ref": "#/definitions/cricbuzz.teamStatsOptionsResponseDoc" } }, "400": { @@ -287925,12 +359268,6 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "404": { "description": "Not Found", "schema": { @@ -287955,32 +359292,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Barron's article's content", + "summary": "Discover team statistics topics and filters", "tags": [ - "Barrons" + "Cricbuzz" ] } }, - "/barrons/headlines": { + "/cricbuzz/teams": { "get": { - "description": "Returns one page of a Barron's topic's headlines: each story's title, canonical URL, summary, publication time, authors, and lead image. Section must be a slug returned by /barrons/topics.", - "operationId": "barrons-headlines", + "description": "Returns the complete team directory for one Cricbuzz category, with group labels, team IDs, short names, country labels, image IDs, and canonical team profile URLs. The optional q value performs a case-insensitive substring match on team names within the returned category.", + "operationId": "cricbuzz-teams", "parameters": [ { - "description": "Barron's topic slug from /barrons/topics", + "description": "Team directory category; defaults to international", + "enum": [ + "international", + "domestic", + "league", + "women" + ], "in": "query", - "name": "section", - "required": true, + "name": "category", "type": "string", - "x-example": "technology" + "x-example": "international" }, { - "description": "Results page", + "description": "Optional local substring search over team names, up to 100 characters", "in": "query", - "maximum": 200, - "minimum": 1, - "name": "page", - "type": "integer" + "name": "q", + "type": "string", + "x-example": "india" } ], "produces": [ @@ -287990,7 +359331,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/barrons.headlinesResponseDoc" + "$ref": "#/definitions/cricbuzz.teamsResponseDoc" } }, "400": { @@ -287999,12 +359340,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -288023,16 +359358,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get the latest stories in a Barron's topic", + "summary": "Discover Cricbuzz teams", "tags": [ - "Barrons" + "Cricbuzz" ] } }, - "/barrons/news": { + "/cricbuzz/videos/categories": { "get": { - "description": "Returns Barron's current cross-section news feed: the newest stories across every section, each with its title, canonical URL, and publication time.", - "operationId": "barrons-news", + "description": "Returns the current Videos menu and every category card visible on Cricbuzz's category directory, including its dynamic ID, slug, title, current count, and canonical URL. The response contains navigation and category metadata only; it does not include video media.", + "operationId": "cricbuzz-video-categories", "produces": [ "application/json" ], @@ -288040,7 +359375,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/barrons.newsResponseDoc" + "$ref": "#/definitions/cricbuzz.videoCategoriesResponseDoc" } }, "429": { @@ -288061,16 +359396,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get the latest Barron's stories", + "summary": "Discover Cricbuzz video categories", "tags": [ - "Barrons" + "Cricbuzz" ] } }, - "/barrons/topics": { + "/cricbuzz/videos/playlists": { "get": { - "description": "Lists Barron's editorial topics, each with its `slug`, display `name` and landing-page `url`. The list is long and changes over time. Every `slug` is a valid `section` value for `/barrons/headlines`. Takes no parameters.", - "operationId": "barrons-topics", + "description": "Returns every playlist card currently linked from the public Playlists page, including its dynamic playlist ID, title, count, preview video link, and canonical URL. The endpoint returns playlist metadata only and does not proxy video assets.", + "operationId": "cricbuzz-video-playlists", "produces": [ "application/json" ], @@ -288078,7 +359413,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/barrons.topicsResponseDoc" + "$ref": "#/definitions/cricbuzz.videoPlaylistsResponseDoc" } }, "429": { @@ -288099,26 +359434,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Barron's topics", + "summary": "Discover Cricbuzz video playlists", "tags": [ - "Barrons" + "Cricbuzz" ] } }, - "/bbb/article": { + "/cricbuzz/wtc": { "get": { - "description": "Returns published BBB article metadata, author names, body text, and useful links from a canonical public article URL on www.bbb.org or bbb.org. If BBB merges a story into another BBB article, the response contains the target article's id and source_url plus the original requested_url. Returns a permanent 404 when BBB moves the URL to an evergreen /all/ page or outside bbb.org, when BBB redirects the URL back to itself so it cannot be loaded, or when the URL resolves to a published non-article type such as an event; safe HTTPS destinations are named in the error and are never fetched.", - "operationId": "bbb-article", - "parameters": [ - { - "description": "Canonical BBB article URL on www.bbb.org or bbb.org", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.bbb.org/article/news-releases/34935-bbb-scam-alert-dont-be-fooled-by-free-gas-and-grocery-card-postcards" - } - ], + "description": "Returns the current public WTC points table and every season value in the page's dropdown. The dropdown selection effect has not been verified, so the endpoint exposes options but does not accept a season_id parameter.", + "operationId": "cricbuzz-wtc", "produces": [ "application/json" ], @@ -288126,29 +359451,11 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bbbnews.ArticleResponse" - } - }, - "type": "object" - } - ] - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/cricbuzz.wtcResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -288165,29 +359472,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a BBB article", + "summary": "Get Cricbuzz World Test Championship standings", "tags": [ - "BBB" + "Cricbuzz" ] } }, - "/bbb/business": { + "/cricinfo/calendar": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a bbb.org business profile: BBB rating letter grade and reasons, accreditation status and since-date, years in business, BBB file/incorporation dates, entity type, contact info, business categories, social media, and a short latest-reviews preview.", - "operationId": "bbb-business", - "parameters": [ - { - "description": "BBB business profile URL, from a bbb-search result's url or hq_profile_url", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803" - } - ], + "description": "Returns the dated international cricket calendar that Cricinfo currently publishes, with no parameters. Each event has its ISO date, the match name such as a fixture and venue, and any series labels for that day. The response also gives the event count.", + "operationId": "cricinfo-calendar", "produces": [ "application/json" ], @@ -288195,23 +359489,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbb.businessResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/cricinfo.calendarResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -288228,36 +359510,31 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Better Business Bureau business profile", + "summary": "Get the Cricinfo international calendar", "tags": [ - "BBB" + "Cricinfo" ] } }, - "/bbb/business/complaints": { + "/cricinfo/commentary": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a business's BBB complaint history: total complaint count, complaints closed or filed in the last 12 months, and one page of per-complaint detail (date, type, status, narrative text, and any business response / customer answer thread). Complaints are listed newest first, 10 per page; use page with the returned page, total_pages and has_more to walk the full list. A business with no filed complaints returns total_complaints 0 and an empty complaints list -- this is a normal result, not an error.", - "operationId": "bbb-business-complaints", + "description": "Returns the latest ball-by-ball and editorial commentary embedded in a public Cricinfo match page. `url` may be a canonical full-scorecard or live-score URL.", + "operationId": "cricinfo-commentary", "parameters": [ { - "description": "BBB business profile URL, from a bbb-search result's url or hq_profile_url. A location URL ending in /addressId/ is accepted and read from the business profile", + "description": "Canonical Cricinfo full-scorecard or live-score URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803" + "x-example": "https://www.cricinfo.com/series/ahmad-shah-abdali-4-day-tournament-2026-1551329/maiwand-champions-vs-mah-e-par-stars-1st-match-1551332/live-cricket-score" }, { - "default": 1, - "description": "Complaint list page, 1 or greater (10 complaints per page, newest first). Defaults to 1", + "description": "Maximum commentary entries returned, from 1 to 100", "in": "query", - "minimum": 1, - "name": "page", + "name": "limit", "type": "integer", - "x-example": 1 + "x-example": 50 } ], "produces": [ @@ -288267,7 +359544,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbb.complaintsResponseDoc" + "$ref": "#/definitions/cricinfo.commentaryResponseDoc" } }, "400": { @@ -288282,8 +359559,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -288300,27 +359577,23 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Better Business Bureau business's complaint history", + "summary": "Get Cricinfo match commentary", "tags": [ - "BBB" + "Cricinfo" ] } }, - "/bbb/business/more-info": { + "/cricinfo/grounds": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a business's full per-factor \"Reasons for Rating\" list and full service-area list. The bbb-business endpoint's own rating_reasons field typically holds only one generic boilerplate bullet regardless of actual rating; this endpoint returns the richer, business-specific list instead. Service area is business-conditional -- some businesses render no service-area section at all, in which case service_areas is empty.", - "operationId": "bbb-business-more-info", + "description": "Returns the featured public ground directory snapshot and the country index used to discover Cricinfo venue pages. Use the existing venue endpoint for detailed ground profiles.", + "operationId": "cricinfo-grounds", "parameters": [ { - "description": "BBB business profile URL, from a bbb-search result's url or hq_profile_url. A location URL ending in /addressId/ is accepted and read from the business profile", + "description": "Maximum featured grounds returned, from 1 to 100", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803" + "name": "limit", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -288330,7 +359603,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbb.moreInfoResponseDoc" + "$ref": "#/definitions/cricinfo.groundsResponseDoc" } }, "400": { @@ -288339,14 +359612,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -288363,35 +359630,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Better Business Bureau business's full rating reasons and service area", + "summary": "List Cricinfo grounds", "tags": [ - "BBB" + "Cricinfo" ] } }, - "/bbb/business/reviews": { + "/cricinfo/live": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a business's full customer-review list (author, star rating, date, text, and any business response thread), paginated 10 per page, plus the average star rating and total review count.", - "operationId": "bbb-business-reviews", - "parameters": [ - { - "description": "BBB business profile URL, from a bbb-search result's url or hq_profile_url. A location URL ending in /addressId/ is accepted and read from the business profile", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803" - }, - { - "description": "Result page (10 per page), default 1", - "in": "query", - "name": "page", - "type": "integer" - } - ], + "description": "Returns Cricinfo's current live-score list with no parameters, covering live, upcoming and recently completed matches. Each match has its title, format, state, status text, start date, series, both teams with scores, and a scorecard `url` you can pass to the match endpoint.", + "operationId": "cricinfo-live-matches", "produces": [ "application/json" ], @@ -288399,17 +359647,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbb.reviewsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/cricinfo.liveMatchesResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -288426,114 +359668,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Better Business Bureau business's customer reviews", + "summary": "Get Cricinfo live matches", "tags": [ - "BBB" + "Cricinfo" ] } }, - "/bbb/category": { + "/cricinfo/match": { "get": { - "consumes": [ - "application/json" - ], - "description": "Browses bbb.org businesses by category and location directly, without a free-text search query. Returns the same business-result shape as bbb-search. A verified empty first page returns results: [] and total_results: 0; an unavailable or unrecognized page returns an error. A page beyond the exact last page returns 404, and a page beyond BBB's 15-page accessible limit returns 404 naming that limit. Optional sort and filter parameters use the same values as bbb-search; query-scoped category and state/province values come from bbb-search-filters.", - "operationId": "bbb-category", + "description": "Returns a public Cricinfo match scorecard with match state, team scores, and available innings totals and batter/bowler lines. Upcoming matches return an empty innings list. `url` must be a canonical `https://www.cricinfo.com/series/.../(full-scorecard|live-cricket-score)` URL; live-score URLs are normalized to the paired scorecard.", + "operationId": "cricinfo-match", "parameters": [ { - "description": "BBB category browse URL, from a bbb-search result's related_categories", + "description": "Canonical Cricinfo full-scorecard or live-cricket-score URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.bbb.org/us/tx/austin/category/plumber" - }, - { - "description": "Result page, default 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Sort order", - "enum": [ - "Relevance", - "Distance", - "Rating", - "AToZ", - "ZToA" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Maximum distance in miles; omit for all distances", - "enum": [ - "5", - "10", - "25", - "50", - "100" - ], - "in": "query", - "name": "distance", - "type": "string" - }, - { - "collectionFormat": "multi", - "description": "One or more BBB rating buckets", - "in": "query", - "items": { - "enum": [ - "A", - "B", - "C", - "D", - "F" - ], - "type": "string" - }, - "name": "rating", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Query-scoped category ID from bbb-search-filters", - "in": "query", - "items": { - "type": "string" - }, - "name": "category_id", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Query-scoped state or province code from bbb-search-filters", - "in": "query", - "items": { - "type": "string" - }, - "name": "state", - "type": "array" - }, - { - "description": "Only BBB-accredited businesses", - "in": "query", - "name": "accredited", - "type": "boolean" - }, - { - "description": "Only businesses offering quote requests", - "in": "query", - "name": "get_quote", - "type": "boolean" - }, - { - "description": "Only businesses serving the searched area", - "in": "query", - "name": "service_area", - "type": "boolean" + "x-example": "https://www.cricinfo.com/series/caribbean-premier-league-2026-1534175/trinbago-knight-riders-vs-barbados-tridents-19th-match-1534197/full-scorecard" } ], "produces": [ @@ -288543,7 +359695,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbb.categoryResponseDoc" + "$ref": "#/definitions/cricinfo.matchResponseDoc" } }, "400": { @@ -288558,8 +359710,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -288576,27 +359728,23 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Better Business Bureau category", + "summary": "Get a Cricinfo match scorecard", "tags": [ - "BBB" + "Cricinfo" ] } }, - "/bbb/local-bbb": { + "/cricinfo/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns public chapter profile details including office locations and hours, service territory, supported languages, and upcoming public events. news_url is the chapter's constructed newsroom route. When BBB publishes a program tile linking to a recognized newsroom path, published_news_url and its descriptive published_news_title are also returned. Use a canonical chapter URL from bbb-local-bbbs or a business record's local_bbb_url.", - "operationId": "bbb-local-bbb", + "description": "Returns a bounded snapshot of Cricinfo's latest public stories, including titles, summaries, authors, genres, publication times, images, and associated match or series identifiers.", + "operationId": "cricinfo-news", "parameters": [ { - "description": "Canonical BBB chapter URL from bbb-local-bbbs or a business record's local_bbb_url", + "description": "Maximum stories returned, from 1 to 100", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.bbb.org/local-bbb/bbb-serving-the-heart-of-texas" + "name": "limit", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -288606,7 +359754,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbbdirectory.localBBBResponseDoc" + "$ref": "#/definitions/cricinfo.newsResponseDoc" } }, "400": { @@ -288615,14 +359763,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -288639,39 +359781,23 @@ "ApiKeyAuth": [] } ], - "summary": "Get a local BBB chapter profile", + "summary": "Get latest Cricinfo news", "tags": [ - "BBB" + "Cricinfo" ] } }, - "/bbb/local-bbbs": { + "/cricinfo/photos": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists every chapter and public office shown on BBB's directory page for a region discovered by bbb-regions. Office addresses can be outside the selected service region.", - "operationId": "bbb-local-bbbs", + "description": "Returns bounded metadata for the latest public Cricinfo photos, including captions, credits, dimensions, dates, and image variants. Media files are not downloaded by the endpoint.", + "operationId": "cricinfo-photos", "parameters": [ { - "description": "Country code from bbb-regions", - "enum": [ - "us", - "ca" - ], - "in": "query", - "name": "country", - "required": true, - "type": "string", - "x-example": "us" - }, - { - "description": "Two-letter region code from bbb-regions", + "description": "Maximum photos returned, from 1 to 100", "in": "query", - "name": "region", - "required": true, - "type": "string", - "x-example": "tx" + "name": "limit", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -288681,7 +359807,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbbdirectory.localBBBsResponseDoc" + "$ref": "#/definitions/cricinfo.photosResponseDoc" } }, "400": { @@ -288690,8 +359816,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -288708,24 +359834,24 @@ "ApiKeyAuth": [] } ], - "summary": "List local BBB chapters serving a region", + "summary": "Get latest Cricinfo photos", "tags": [ - "BBB" + "Cricinfo" ] } }, - "/bbb/news": { + "/cricinfo/rankings": { "get": { - "description": "Returns one page of BBB newsroom cards from a canonical BBB newsroom URL. Three scopes are accepted, each with an optional topic: the US or Canada newsroom (/us/news), a state, province or city newsroom (/us/ca/news, /us/ca/san-francisco/news), and one local BBB chapter's own newsroom (/local-bbb//news, the news_url returned by bbb-local-bbbs and bbb-local-bbb). The list is whatever BBB shows on that page: a city or chapter whose local BBB publishes its own stories returns those, and other cities, other chapters and the state pages checked so far return the same list as the country newsroom, so compare total and the first items with the country newsroom before treating a list as local. A chapter URL also returns local_bbb_id and local_bbb_name. Items preserve BBB's type and include Article stories, events, and Near Me related-service cards when present. Near Me URLs are restricted to BBB's /near-me/ paths. Every page carries total_pages and has_more: request page + 1 while has_more is true and stop when it is false; a page past the end returns 404. Event dates and links are preserved when present.", - "operationId": "bbb-news", + "description": "Returns ICC rankings (team or player) from a Cricinfo rankings page, given as the required `url`, which must be a canonical `https://www.cricinfo.com/rankings/...` address. Each entry has its rank, name, country, rating, points, matches and format, plus a team or player id.", + "operationId": "cricinfo-rankings", "parameters": [ { - "description": "Canonical https://www.bbb.org newsroom URL: /us/news or /ca/news; ///news or ////news with country us or ca, the two-letter region code from bbb-regions and the city slug from a business profile URL; or a chapter's news_url from bbb-local-bbbs. Append a topic segment from bbb-news-topics to narrow it and ?page=N (1 to 1000) to page; no other query key is accepted", + "description": "Canonical Cricinfo rankings URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.bbb.org/us/news/scams?page=2" + "x-example": "https://www.cricinfo.com/rankings/content/page/211271.html" } ], "produces": [ @@ -288735,19 +359861,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bbbnews.NewsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/cricinfo.rankingsResponseDoc" } }, "400": { @@ -288762,6 +359876,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -288774,24 +359894,70 @@ "ApiKeyAuth": [] } ], - "summary": "Get BBB newsroom stories", + "summary": "Get ICC rankings from Cricinfo", "tags": [ - "BBB" + "Cricinfo" ] } }, - "/bbb/news/topics": { + "/cricinfo/records": { "get": { - "description": "Returns the complete topic navigation shown by a BBB newsroom page, including its active topic. The page can be the US or Canada newsroom, a state, province or city newsroom, or one local BBB chapter's newsroom; the returned topic URLs stay in that scope, and a chapter has its own topic set.", - "operationId": "bbb-news-topics", + "description": "Returns a bounded table from a Cricinfo records page. `record` is a relative Statsguru record path such as `batting/most_runs_career.html`. `class` must be one of `1`, `2`, `3`, `4`, `5`, `6`, `8`, `9`, `10`, `11`, `12`, `20`, `21`, `22`, or `23`.", + "operationId": "cricinfo-records", "parameters": [ { - "description": "Canonical https://www.bbb.org newsroom URL, optionally with a topic segment: /us/news or /ca/news; ///news or ////news with country us or ca, the two-letter region code from bbb-regions and the city slug from a business profile URL; or a chapter's news_url from bbb-local-bbbs", + "description": "Relative Statsguru record path", "in": "query", - "name": "url", + "name": "record", "required": true, "type": "string", - "x-example": "https://www.bbb.org/us/news" + "x-example": "batting/most_runs_career.html" + }, + { + "description": "Record match-class. Allowed values: 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 20, 21, 22, 23", + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 8, + 9, + 10, + 11, + 12, + 20, + 21, + 22, + 23 + ], + "in": "query", + "name": "class", + "required": true, + "type": "integer", + "x-example": 1 + }, + { + "description": "Numeric record subject identifier", + "in": "query", + "name": "id", + "type": "string", + "x-example": "6" + }, + { + "description": "Record subject type", + "in": "query", + "name": "type", + "type": "string", + "x-example": "team" + }, + { + "description": "Record currentness selector", + "in": "query", + "name": "current", + "type": "string", + "x-example": "2" } ], "produces": [ @@ -288801,19 +359967,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bbbnews.TopicsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/cricinfo.recordsResponseDoc" } }, "400": { @@ -288828,6 +359982,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -288840,26 +360000,16 @@ "ApiKeyAuth": [] } ], - "summary": "List BBB newsroom topics", + "summary": "Get a Cricinfo record table", "tags": [ - "BBB" + "Cricinfo" ] } }, - "/bbb/page": { + "/cricinfo/records/index": { "get": { - "description": "Returns one page from the evergreen library BBB keeps under https://www.bbb.org/all/ (tips, topic hubs such as tax or holiday advice, scam studies): its title, introduction, body text, links, main image and last-modified time. BBB folds older newsroom stories into these pages and redirects the old article URL, so the url can be either the evergreen page itself or an article URL that bbb-article reports as moved; requested_url, final_url and every redirect between them are returned. published_at is always present and is null, because BBB publishes no date for these pages: modified_at is when BBB last edited the page, not when a story it replaced was published, and the page may cover a wider topic than that story did. The original article ID is not on the page; article_id repeats the one in the requested article URL. Returns 404 when the page does not exist, when an article URL has not been moved (read it with bbb-article), and when BBB redirects the URL somewhere outside /all/; the error names the destination and the answer is permanent. Content BBB loads in the browser for the visitor's local BBB is not included.", - "operationId": "bbb-page", - "parameters": [ - { - "description": "Canonical https://www.bbb.org URL of an evergreen page (/all/, no query string) or of an article (/article//-) that BBB has moved to one", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.bbb.org/all/consumer/tip/what-to-know-before-purchasing-a-gift-card" - } - ], + "description": "Returns the public Cricinfo records catalog, including match classes, record categories, selectable teams or entities, and example suggestions. Use the existing records endpoint to retrieve a specific table.", + "operationId": "cricinfo-records-index", "produces": [ "application/json" ], @@ -288867,29 +360017,11 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bbbnews.PageResponse" - } - }, - "type": "object" - } - ] - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/cricinfo.recordsIndexResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -288906,19 +360038,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get a BBB evergreen page", + "summary": "List Cricinfo records catalog", "tags": [ - "BBB" + "Cricinfo" ] } }, - "/bbb/regions": { + "/cricinfo/rss": { "get": { - "consumes": [ - "application/json" + "description": "Returns a Cricinfo RSS feed. `url` must be one of Cricinfo's official news, live-score, country-story, or player-story RSS URLs.", + "operationId": "cricinfo-rss", + "parameters": [ + { + "description": "Official Cricinfo RSS feed URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.cricinfo.com/rss/content/feeds/news/0.xml" + } ], - "description": "Returns the complete current country and region list from BBB's public local directory. Use the returned region code with bbb-local-bbbs.", - "operationId": "bbb-regions", "produces": [ "application/json" ], @@ -288926,11 +360065,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbbdirectory.regionsResponseDoc" + "$ref": "#/definitions/cricinfo.rssResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -288947,121 +360092,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Better Business Bureau directory regions", + "summary": "Read a Cricinfo RSS feed", "tags": [ - "BBB" + "Cricinfo" ] } }, - "/bbb/scamtracker/search": { + "/cricinfo/scores": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches bbb.org Scam Tracker's consumer-reported-scam database by free-text query, scam category, targeted-victim state/province, reported-scammer state/province, report-date range, and/or dollar-loss range, paginated 10 results/page. A verified search with no matches returns results: [] and total_results: 0; an unavailable or unrecognized page returns 503 rather than an empty list. When result cards are present but BBB's total count is unavailable, total_results is omitted. Every page returns has_more and, when BBB's result count is exact, total_pages: request the next page only while has_more is true, because a page past the end returns 404. Omit every filter to browse the most-recent-first feed. This is a separate BBB dataset from the bbb-search/bbb-business/bbb-business-complaints business-rating family -- consumer-reported scam incidents, not business ratings.", - "operationId": "bbb-scamtracker-search", - "parameters": [ - { - "description": "Free-text search (phone number, website, email, business name, scam ID, description). Omit to browse the most-recent feed", - "in": "query", - "name": "query", - "type": "string", - "x-example": "amazon" - }, - { - "description": "Scam category filter", - "enum": [ - "Advance Fee Loan", - "Bank/Credit Card Company Imposter", - "Business Email Compromise", - "Charity", - "Counterfeit Product", - "COVID-19", - "Credit Cards", - "Credit Repair/Debt Relief", - "CryptoCurrency", - "Debt Collections", - "Employment", - "Fake Check/Money Order", - "Fake Invoice/Supplier Bill", - "Family/Friend Emergency", - "Foreign Money Exchange", - "Government Agency Imposter", - "Government Grant", - "Healthcare/Medicaid/Medicare", - "Home Improvement", - "Identity Theft", - "Investment", - "Moving", - "Online Purchase", - "Other", - "Phishing", - "Rental", - "Retail Business", - "Romance", - "Scholarship", - "Sweepstakes/Lottery/Prizes", - "Tax Collection", - "Tech Support", - "Travel/Vacation/Timeshare", - "Utility", - "Vanity Award", - "Worthless Problem-solving Service", - "Yellow Pages/Directories" - ], - "in": "query", - "name": "scam_type", - "type": "string" - }, - { - "description": "Optional 2-letter targeted-victim state/province code (US state or Canadian province)", - "in": "query", - "name": "state", - "type": "string", - "x-example": "TX" - }, - { - "description": "Optional 2-letter reported-scammer state/province code (US state or Canadian province) -- where the scammer is reported to be, not the victim", - "in": "query", - "name": "scammer_state", - "type": "string", - "x-example": "NY" - }, - { - "description": "Optional report-date range start (YYYY-MM-DD), inclusive. Must be set together with date_to", - "in": "query", - "name": "date_from", - "type": "string", - "x-example": "2026-01-01" - }, - { - "description": "Optional report-date range end (YYYY-MM-DD), inclusive. Must be set together with date_from", - "in": "query", - "name": "date_to", - "type": "string", - "x-example": "2026-01-31" - }, - { - "description": "Optional minimum reported dollar loss. Must be set together with max_dollars_lost", - "in": "query", - "name": "min_dollars_lost", - "type": "integer", - "x-example": 500000 - }, - { - "description": "Optional maximum reported dollar loss. Must be set together with min_dollars_lost", - "in": "query", - "name": "max_dollars_lost", - "type": "integer", - "x-example": 1000000 - }, - { - "description": "Result page (10 per page), default 1", - "in": "query", - "name": "page", - "type": "integer" - } - ], + "description": "Returns the current match cards in Cricinfo's public homepage snapshot, including match state, scores, and canonical scorecard URLs. This is a point-in-time feed, not a fixture archive or streaming subscription.", + "operationId": "cricinfo-scores", "produces": [ "application/json" ], @@ -289069,23 +360109,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbbscamtracker.searchResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/cricinfo.scoresResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -289102,31 +360130,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search Better Business Bureau Scam Tracker reports", + "summary": "Get current Cricinfo match scores", "tags": [ - "BBB" + "Cricinfo" ] } }, - "/bbb/scamtracker/state-stats": { + "/cricinfo/series": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns aggregate scam-report stats per US state and Canadian province for a given time window: report counts, dollar losses, per-capita rates, year-over-year change, and top scam-type breakdown.", - "operationId": "bbb-scamtracker-state-stats", + "description": "Returns a series's match schedule and standings from its dedicated page. `series_id` must be the slug-and-ID portion of a canonical Cricinfo series URL, such as `indian-premier-league-2024-1410320`.", + "operationId": "cricinfo-series", "parameters": [ { - "description": "Aggregation window, default 90", - "enum": [ - "30", - "90", - "365", - "all" - ], + "description": "Slug-and-ID portion of a canonical series URL", "in": "query", - "name": "period", - "type": "string" + "name": "series_id", + "required": true, + "type": "string", + "x-example": "indian-premier-league-2024-1410320" } ], "produces": [ @@ -289136,7 +360157,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbbscamtracker.stateStatsResponseDoc" + "$ref": "#/definitions/cricinfo.seriesResponseDoc" } }, "400": { @@ -289145,8 +360166,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -289163,27 +360190,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Better Business Bureau Scam Tracker state/province aggregate stats", + "summary": "Get a Cricinfo series schedule and standings", "tags": [ - "BBB" + "Cricinfo" ] } }, - "/bbb/scamtracker/{id}": { + "/cricinfo/squads": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one BBB Scam Tracker consumer scam report: description, dollars lost, targeted person's location, scammer location/email/phone/URL (when known), scam type, business name used, and date reported. If BBB no longer shows the report and serves its search page at that address, the endpoint returns a permanent 404; do not retry it.", - "operationId": "bbb-scamtracker-detail", + "description": "Returns recent public squad announcements and player rosters from a Cricinfo team profile, including player roles and withdrawal or overseas markers when published.", + "operationId": "cricinfo-squads", "parameters": [ { - "description": "BBB Scam Tracker report id, from a bbb-scamtracker-search result's id or url", - "in": "path", - "name": "id", + "description": "Canonical Cricinfo team profile URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "1397968" + "x-example": "https://www.cricinfo.com/team/india-6" } ], "produces": [ @@ -289193,7 +360217,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbbscamtracker.detailResponseDoc" + "$ref": "#/definitions/cricinfo.squadsResponseDoc" } }, "400": { @@ -289208,8 +360232,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -289226,133 +360250,153 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Better Business Bureau Scam Tracker report", + "summary": "Get a Cricinfo team squad", "tags": [ - "BBB" + "Cricinfo" ] } }, - "/bbb/search": { + "/cricinfo/stats": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches bbb.org for businesses by name or category near a location. Returns each business's BBB rating letter grade, accreditation status, categories, service areas, contact info, and profile URL. A verified empty first page returns results: [] and total_results: 0; an unavailable or unrecognized page returns an error. A page beyond the exact last page returns 404, and a page beyond BBB's 15-page accessible limit returns 404 naming that limit. Category IDs and state/province codes are query-scoped; call bbb-search-filters to discover values for this query and location.", - "operationId": "bbb-search", + "description": "Returns a bounded Statsguru table. `class` must be one of `1`, `2`, `3`, `4`, `5`, `6`, `8`, `9`, `10`, `11`, `12`, `20`, `21`, `22`, or `23`; `type` must be one of `batting`, `bowling`, `fielding`, `allround`, `fow`, `team`, `official`, or `aggregate`; `view` may be `innings`, `match`, `series`, `ground`, `host`, `opposition`, `year`, or `season`.", + "operationId": "cricinfo-stats", "parameters": [ { - "description": "Business name or category/service keyword", + "description": "Statsguru match-class. Allowed values: 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 20, 21, 22, 23", + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 8, + 9, + 10, + 11, + 12, + 20, + 21, + 22, + 23 + ], "in": "query", - "name": "query", + "name": "class", "required": true, - "type": "string", - "x-example": "plumber" + "type": "integer", + "x-example": 1 }, { - "description": "City and state (e.g. 'Austin, TX') or a ZIP code", + "description": "Statsguru statistic family", + "enum": [ + "batting", + "bowling", + "fielding", + "allround", + "fow", + "team", + "official", + "aggregate" + ], "in": "query", - "name": "location", + "name": "type", "required": true, "type": "string", - "x-example": "Austin, TX" + "x-example": "batting" }, { - "description": "Result page, default 1", + "description": "Numeric Cricinfo player identifier", "in": "query", - "name": "page", - "type": "integer" + "name": "player", + "type": "string", + "x-example": "45789" }, { - "default": "USA", - "description": "BBB country code", - "enum": [ - "USA", - "CAN" - ], + "description": "Numeric Cricinfo team identifier", "in": "query", - "name": "country", - "type": "string" + "name": "team", + "type": "string", + "x-example": "6" }, { - "description": "Sort order", - "enum": [ - "Relevance", - "Distance", - "Rating", - "AToZ", - "ZToA" - ], + "description": "Numeric opposition team identifier", "in": "query", - "name": "sort", - "type": "string" + "name": "opposition", + "type": "string", + "x-example": "2" }, { - "description": "Maximum distance in miles; omit for all distances", - "enum": [ - "5", - "10", - "25", - "50", - "100" - ], + "description": "Numeric host-country identifier", "in": "query", - "name": "distance", - "type": "string" + "name": "host", + "type": "string", + "x-example": "6" }, { - "collectionFormat": "multi", - "description": "One or more BBB rating buckets", + "description": "Numeric ground identifier", "in": "query", - "items": { - "enum": [ - "A", - "B", - "C", - "D", - "F" - ], - "type": "string" - }, - "name": "rating", - "type": "array" + "name": "ground", + "type": "string", + "x-example": "713" }, { - "collectionFormat": "multi", - "description": "Query-scoped category ID from bbb-search-filters", + "description": "Season formatted as YYYY or YYYY/YY", "in": "query", - "items": { - "type": "string" - }, - "name": "category_id", - "type": "array" + "name": "season", + "type": "string", + "x-example": "2025" }, { - "collectionFormat": "multi", - "description": "Query-scoped state or province code from bbb-search-filters", + "description": "Statsguru starting date", "in": "query", - "items": { - "type": "string" - }, - "name": "state", - "type": "array" + "name": "span_min", + "type": "string", + "x-example": "01 Jan 2020" }, { - "description": "Only BBB-accredited businesses", + "description": "Statsguru ending date", "in": "query", - "name": "accredited", - "type": "boolean" + "name": "span_max", + "type": "string", + "x-example": "31 Dec 2025" }, { - "description": "Only businesses offering quote requests", + "description": "Statsguru table view", + "enum": [ + "innings", + "match", + "series", + "ground", + "host", + "opposition", + "year", + "season" + ], "in": "query", - "name": "get_quote", - "type": "boolean" + "name": "view", + "type": "string", + "x-example": "innings" }, { - "description": "Only businesses serving the searched area", + "description": "Statsguru sort column", "in": "query", - "name": "service_area", - "type": "boolean" + "name": "orderby", + "type": "string", + "x-example": "runs" + }, + { + "description": "Sort descending when true", + "in": "query", + "name": "orderby_desc", + "type": "boolean", + "x-example": true + }, + { + "description": "Maximum rows returned, from 1 to 100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -289362,7 +360406,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbb.searchResponseDoc" + "$ref": "#/definitions/cricinfo.statsResponseDoc" } }, "400": { @@ -289371,14 +360415,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -289395,138 +360433,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search Better Business Bureau businesses", + "summary": "Query Cricinfo Statsguru", "tags": [ - "BBB" + "Cricinfo" ] } }, - "/bbb/search/filters": { + "/cricinfo/story": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the live sort, category, and state/province values BBB currently advertises for one context. Supply query and location for text search, or category_url for the exact category-browse context; do not combine these modes. Category IDs and state/province codes are query-scoped; call this endpoint again when the search context changes. Static accepted values are country USA or CAN; sort Relevance, Distance, Rating, AToZ, or ZToA; distance 5, 10, 25, 50, or 100 miles; rating A, B, C, D, or F.", - "operationId": "bbb-search-filters", + "description": "Returns a public Cricinfo news article, match report, preview, or live blog. The response includes stable story metadata, typed content blocks, live-blog entries when present, and related links.", + "operationId": "cricinfo-story", "parameters": [ { - "description": "Business name or category/service keyword; use with location when category_url is omitted", - "in": "query", - "name": "query", - "type": "string", - "x-example": "plumber" - }, - { - "description": "City and state/province or ZIP code; use with query when category_url is omitted", - "in": "query", - "name": "location", - "type": "string", - "x-example": "Austin, TX" - }, - { - "description": "BBB category browse URL; use instead of query and location", + "description": "Canonical Cricinfo story, report, preview, or live-blog URL", "in": "query", - "name": "category_url", + "name": "url", + "required": true, "type": "string", - "x-example": "https://www.bbb.org/us/tx/austin/category/plumber" - }, - { - "default": "USA", - "description": "BBB country code", - "enum": [ - "USA", - "CAN" - ], - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Result page, default 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Sort order", - "enum": [ - "Relevance", - "Distance", - "Rating", - "AToZ", - "ZToA" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Maximum distance in miles; omit for all distances", - "enum": [ - "5", - "10", - "25", - "50", - "100" - ], - "in": "query", - "name": "distance", - "type": "string" - }, - { - "collectionFormat": "multi", - "description": "Selected rating values", - "in": "query", - "items": { - "enum": [ - "A", - "B", - "C", - "D", - "F" - ], - "type": "string" - }, - "name": "rating", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Selected category IDs previously returned for this search context", - "in": "query", - "items": { - "type": "string" - }, - "name": "category_id", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Selected state/province codes previously returned for this search context", - "in": "query", - "items": { - "type": "string" - }, - "name": "state", - "type": "array" - }, - { - "description": "Only BBB-accredited businesses", - "in": "query", - "name": "accredited", - "type": "boolean" - }, - { - "description": "Only businesses offering quote requests", - "in": "query", - "name": "get_quote", - "type": "boolean" - }, - { - "description": "Only businesses serving the searched area", - "in": "query", - "name": "service_area", - "type": "boolean" + "x-example": "https://www.cricinfo.com/story/lutho-sipamla-ruled-out-of-namibia-tri-series-with-hamstring-injury-1552225" } ], "produces": [ @@ -289536,7 +360460,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbb.searchFiltersResponseDoc" + "$ref": "#/definitions/cricinfo.storyResponseDoc" } }, "400": { @@ -289545,8 +360469,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -289563,24 +360493,24 @@ "ApiKeyAuth": [] } ], - "summary": "Discover Better Business Bureau search filters", + "summary": "Get a Cricinfo story", "tags": [ - "BBB" + "Cricinfo" ] } }, - "/bbc/article": { + "/cricinfo/team": { "get": { - "description": "Returns a BBC News article's public metadata and body paragraphs from a canonical article URL. Live pages are not supported.", - "operationId": "bbc-article", + "description": "Returns public team identity, profile text, recent fixtures and results, and the rolling batting and bowling leaders shown on a Cricinfo team page.", + "operationId": "cricinfo-team", "parameters": [ { - "description": "Canonical BBC News article URL", + "description": "Canonical Cricinfo team profile URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.bbc.co.uk/news/articles/cd68q3wynnqo" + "x-example": "https://www.cricinfo.com/team/india-6" } ], "produces": [ @@ -289590,7 +360520,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbc.articleResponseDoc" + "$ref": "#/definitions/cricinfo.teamProfileResponseDoc" } }, "400": { @@ -289623,24 +360553,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get BBC News article content", + "summary": "Get a Cricinfo team profile", "tags": [ - "BBC" + "Cricinfo" ] } }, - "/bbc/author": { + "/cricinfo/team/schedule": { "get": { - "description": "Returns a BBC News correspondent's profile from `url`, a canonical `bbc.co.uk/news/correspondents/` address: name, short `bio` and recent articles with title, URL, section and publication date when the page shows one. `published_at` is `YYYY-MM-DD` when the page gives a full date; items labelled only with a relative time, such as `2 days ago`, come back as written.", - "operationId": "bbc-author", + "description": "Returns a cricket team's recent fixtures and results from its Cricinfo team page, given as the required `url`, which must be a canonical `https://www.cricinfo.com/team/...` address. The response has the team's id, name and slug, and matches with series, format, state, status text, team scores and scorecard URL.", + "operationId": "cricinfo-team-schedule", "parameters": [ { - "description": "Canonical BBC News correspondent URL", + "description": "Canonical Cricinfo team URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.bbc.co.uk/news/correspondents/jonnydymond" + "x-example": "https://www.cricinfo.com/team/india-6" } ], "produces": [ @@ -289650,7 +360580,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbc.authorResponseDoc" + "$ref": "#/definitions/cricinfo.teamScheduleResponseDoc" } }, "400": { @@ -289683,33 +360613,62 @@ "ApiKeyAuth": [] } ], - "summary": "Get a BBC News correspondent's profile", + "summary": "Get a Cricinfo team match schedule", "tags": [ - "BBC" + "Cricinfo" ] } }, - "/bbc/headlines": { + "/cricinfo/teams": { "get": { - "description": "Returns fresh BBC News headlines for one section, `world` by default. `section` can be `all`, `world`, `uk`, `politics`, `business`, `health`, `science_and_environment`, `technology` or `entertainment_and_arts`; `all` can mix stories from several sections. Each item has a title, URL, summary and publication time when available.", - "operationId": "bbc-headlines", + "description": "Returns Cricinfo's team directory with no parameters, organised into titled groups such as popular international teams. Each team has its id, name, slug, abbreviation, country, logo URL and primary colour where Cricinfo gives them, and whether it is a national side.", + "operationId": "cricinfo-teams", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/cricinfo.teamsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Cricinfo teams", + "tags": [ + "Cricinfo" + ] + } + }, + "/cricinfo/venue": { + "get": { + "description": "Returns structured metadata, associated home teams, and the editorial profile for a public Cricinfo cricket-ground page. `url` must be a canonical `https://www.cricinfo.com/cricket-grounds/...` or legacy `/ci/content/ground/...html` URL.", + "operationId": "cricinfo-venue", "parameters": [ { - "description": "BBC News RSS section, defaults to world", - "enum": [ - "all", - "world", - "uk", - "politics", - "business", - "health", - "science_and_environment", - "technology", - "entertainment_and_arts" - ], + "description": "Canonical Cricinfo cricket-ground URL", "in": "query", - "name": "section", - "type": "string" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.cricinfo.com/cricket-grounds/wankhede-stadium-mumbai-58324" } ], "produces": [ @@ -289719,7 +360678,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbc.headlinesResponseDoc" + "$ref": "#/definitions/cricinfo.venueResponseDoc" } }, "400": { @@ -289752,24 +360711,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get BBC News section headlines", + "summary": "Get a Cricinfo cricket-ground profile", "tags": [ - "BBC" + "Cricinfo" ] } }, - "/bbc/live": { + "/cricinfo/venue/matches": { "get": { - "description": "Returns the current server-rendered text updates from one canonical BBC News live URL. It does not subscribe to updates or return broadcast, player, or stream data.", - "operationId": "bbc-live", + "description": "Returns upcoming fixtures and recent results listed on a public Cricinfo ground page. `url` must be a canonical `https://www.cricinfo.com/cricket-grounds/...` URL.", + "operationId": "cricinfo-venue-matches", "parameters": [ { - "description": "Canonical BBC News live URL", + "description": "Canonical Cricinfo cricket-ground URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.bbc.co.uk/news/live/c6y8mjmnpxv0t" + "x-example": "https://www.cricinfo.com/cricket-grounds/wankhede-stadium-mumbai-58324" } ], "produces": [ @@ -289779,7 +360738,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbc.liveResponseDoc" + "$ref": "#/definitions/cricinfo.venueMatchesResponseDoc" } }, "400": { @@ -289812,32 +360771,23 @@ "ApiKeyAuth": [] } ], - "summary": "Get a BBC News live-page text snapshot", + "summary": "Get matches at a Cricinfo venue", "tags": [ - "BBC" + "Cricinfo" ] } }, - "/bbc/search": { + "/cricinfo/videos": { "get": { - "description": "Returns a bounded page of public BBC search-result metadata: title, URL, standfirst summary, display date, and a type of article, video, audio, live, topic, or page. Topic items are BBC topic hub pages rather than articles and carry no published_at. Media entries link only to their BBC landing pages; streams, downloads, and transcripts are not returned.", - "operationId": "bbc-search", + "description": "Returns a bounded snapshot of Cricinfo's public video hub, including curated, trending, and genre-associated video metadata. Media files are not downloaded by the endpoint.", + "operationId": "cricinfo-videos", "parameters": [ { - "description": "Search query, up to 120 characters", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "climate" - }, - { - "description": "Results page, defaults to 1", + "description": "Maximum videos returned, from 1 to 100", "in": "query", - "maximum": 10, - "minimum": 1, - "name": "page", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -289847,7 +360797,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bbc.searchResponseDoc" + "$ref": "#/definitions/cricinfo.videosResponseDoc" } }, "400": { @@ -289856,12 +360806,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -289880,24 +360824,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search public BBC pages", + "summary": "Get Cricinfo videos", "tags": [ - "BBC" + "Cricinfo" ] } }, - "/benzinga/article": { + "/ctvnews/article": { "get": { - "description": "Returns a Benzinga article by `url`, a canonical dated editorial article URL: title, description, publication and update times, section, authors, image and the body `paragraphs`. Paid products, profiles, press releases, SEC pages and partner content are not accepted.", - "operationId": "benzinga-article", + "description": "Returns public CTV News article metadata and body paragraphs from a canonical story URL (https://www.ctvnews.ca/
/article//). Video, photo-gallery and live-stream pages are not article pages.", + "operationId": "ctvnews-article", "parameters": [ { - "description": "Canonical dated Benzinga editorial article URL", + "description": "Canonical CTV News article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.benzinga.com/trading-ideas/movers/26/09/62057574/spacex-stock-rises-tuesday" + "x-example": "https://www.ctvnews.ca/toronto/article/example-article-slug/" } ], "produces": [ @@ -289934,30 +360878,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Benzinga article", + "summary": "Get CTV News article content", "tags": [ - "Benzinga" + "CTV News" ] } }, - "/benzinga/headlines": { + "/ctvnews/author": { "get": { - "description": "Returns current Benzinga story cards for one section. `section` is required and is `latest`, `technology-stocks`, `politics` or `health-care`. Each item has a title and URL, and may also carry a summary, author, publication time and image.", - "operationId": "benzinga-headlines", + "description": "Returns a CTV News byline profile from a canonical author URL: name, role, biography, photo, public contact address, and recent stories.", + "operationId": "ctvnews-author", "parameters": [ { - "description": "Benzinga editorial section slug", - "enum": [ - "latest", - "technology-stocks", - "politics", - "health-care" - ], + "description": "Canonical CTV News author URL", "in": "query", - "name": "section", + "name": "url", "required": true, "type": "string", - "x-example": "latest" + "x-example": "https://www.ctvnews.ca/about-us/team/the-associated-press/" } ], "produces": [ @@ -289967,7 +360905,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/publicnews.ctvnewsAuthorResponseDoc" } }, "400": { @@ -289976,6 +360914,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -289988,16 +360932,55 @@ "ApiKeyAuth": [] } ], - "summary": "Get Benzinga section headlines", + "summary": "Get a CTV News author profile", "tags": [ - "Benzinga" + "CTV News" ] } }, - "/benzinga/news": { + "/ctvnews/headlines": { "get": { - "description": "Returns the current Benzinga stories, with no input needed. Each item has a title, URL and a `summary` that is the publisher's short teaser rather than article text, and may also carry the author, publication time and image.", - "operationId": "benzinga-news", + "description": "Returns the current stories listed on one public CTV News section page, newest first, with headline, summary, byline, publication time and image.", + "operationId": "ctvnews-headlines", + "parameters": [ + { + "description": "CTV News section slug", + "enum": [ + "canada", + "politics", + "world", + "business", + "health", + "entertainment", + "lifestyle", + "climate-and-environment", + "sci-tech", + "sports", + "opinion", + "highly-engaged", + "atlantic", + "barrie", + "calgary", + "edmonton", + "kitchener", + "london", + "montreal", + "northern-ontario", + "ottawa", + "regina", + "saskatoon", + "toronto", + "vancouver", + "windsor", + "winnipeg" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "canada" + } + ], "produces": [ "application/json" ], @@ -290005,7 +360988,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -290020,26 +361009,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Benzinga top stories", + "summary": "Get CTV News section headlines", "tags": [ - "Benzinga" + "CTV News" ] } }, - "/benzinga/search": { + "/ctvnews/news": { "get": { - "description": "Returns up to five public news-article suggestions from Benzinga's anonymous search typeahead. Ticker-only suggestions are omitted; this is not a paginated archive search.", - "operationId": "benzinga-search", - "parameters": [ - { - "description": "Search text (2 to 100 characters)", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "Tesla" - } - ], + "description": "Returns the newest CTV News stories (about the last 24 hours, newest first) from its public news sitemap, each with headline, publication time and lead image.", + "operationId": "ctvnews-news", "produces": [ "application/json" ], @@ -290047,11 +361026,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.benzingaSearchResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -290068,16 +361047,16 @@ "ApiKeyAuth": [] } ], - "summary": "Search Benzinga article suggestions", + "summary": "Get CTV News top stories", "tags": [ - "Benzinga" + "CTV News" ] } }, - "/benzinga/sections": { + "/ctvnews/sections": { "get": { - "description": "Lists the four Benzinga editorial sections accepted by `benzinga-headlines`: `latest` (named Breaking News), `technology-stocks`, `politics` and `health-care`. Each has a `slug`, a display `name` and the section's page `url`.", - "operationId": "benzinga-sections", + "description": "Lists the 27 CTV News sections accepted by `ctvnews-headlines`: 12 national topic sections such as `canada`, `politics` and `sci-tech`, and 15 local newsrooms such as `toronto`, `calgary` and `atlantic`. Video, photo, weather, podcast, sponsored and shopping hubs are not included.", + "operationId": "ctvnews-sections", "produces": [ "application/json" ], @@ -290094,19 +361073,29 @@ "ApiKeyAuth": [] } ], - "summary": "List Benzinga news sections", + "summary": "Get CTV News sections", "tags": [ - "Benzinga" + "CTV News" ] } }, - "/bestbuy/brands": { + "/culvers/calendar": { "get": { "consumes": [ "application/json" ], - "description": "Returns Best Buy's full brand directory (name, category id, url), sourced from the site's own \"Name Brands\" page. Each id is directly usable as bestbuy_category's category_id input.", - "operationId": "bestbuy-brands", + "description": "Returns the full published schedule for one Culver's restaurant: the flavor of the day for every upcoming calendar date, plus the soups served on each date. Culver's publishes roughly a two-month forward window, and the schedule is genuinely per-restaurant -- two restaurants on the same date routinely feature different soups. slug comes from GET /culvers/directory. GET /culvers/store returns only today's and tomorrow's flavor; use this endpoint for the whole calendar.", + "operationId": "culvers-calendar", + "parameters": [ + { + "description": "Restaurant slug from /culvers/directory", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "waunakee" + } + ], "produces": [ "application/json" ], @@ -290114,7 +361103,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bestbuy.brandsResponseDoc" + "$ref": "#/definitions/culvers.calendarResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -290135,19 +361136,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Best Buy's full brand directory", + "summary": "Get one Culver's restaurant's flavor-of-the-day and daily soup schedule", "tags": [ - "Best Buy" + "Culvers" ] } }, - "/bestbuy/categories": { + "/culvers/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns Best Buy's current top-level Shop departments (name, category id, url). Each id is directly usable as bestbuy_category's category_id input; this is not the full category tree.", - "operationId": "bestbuy-categories", + "description": "Returns Culver's national menu's category list -- ButterBurgers, Chicken, Fish & Seafood, Combos & Baskets, Sides, Frozen Custard, Beverages and others -- each with its slug (the value GET /culvers/menu takes), a featured flag, and sort order.", + "operationId": "culvers-categories", "produces": [ "application/json" ], @@ -290155,7 +361156,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bestbuy.categoriesResponseDoc" + "$ref": "#/definitions/culvers.categoriesResponseDoc" } }, "429": { @@ -290176,19 +361177,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get Best Buy's top-level shopping departments", + "summary": "List Culver's national menu categories", "tags": [ - "Best Buy" + "Culvers" ] } }, - "/bestbuy/categories/trending": { + "/culvers/directory": { "get": { "consumes": [ "application/json" ], - "description": "Returns Best Buy's fine-grained, often deeply-nested product-type categories (e.g. \"Windows Laptops\", \"55-Inch TVs (55 - 64 in)\", \"PS5 Consoles\") sourced from the homepage's own \"Best Selling\" section -- much more specific than bestbuy_categories' 21 current top-level departments. Each id is directly usable as bestbuy_category's category_id input.", - "operationId": "bestbuy-categories-trending", + "description": "Returns one page of Culver's restaurant index, which covers about 1,121 restaurants. `page` starts at 1 and `page_size` runs 1 to 500 (default 100). Each entry has a `slug`, the value the `/culvers/store` endpoint takes, and the restaurant's URL. The total and page counts are included.", + "operationId": "culvers-directory", + "parameters": [ + { + "description": "Optional. 1-based page, default 1.", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Optional. Entries per page, 1-500, default 100.", + "in": "query", + "name": "page_size", + "type": "integer", + "x-example": 100 + } + ], "produces": [ "application/json" ], @@ -290196,7 +361213,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bestbuy.trendingCategoriesResponseDoc" + "$ref": "#/definitions/culvers.directoryResponseDoc" } }, "429": { @@ -290217,34 +361234,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Best Buy's fine-grained trending product-type categories", + "summary": "Browse Culver's restaurant-URL index", "tags": [ - "Best Buy" + "Culvers" ] } }, - "/bestbuy/category": { + "/culvers/flavor": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page (up to 24) of one Best Buy category's product listing (sku, title, url, image, price, rating, review count). category_id is a Best Buy category id, e.g. pcmcat138500050001, found in a category page URL's trailing .c?id= segment. page is the optional 1-indexed page number (defaults to 1); requesting a page past the last one returns an empty products list, not an error.", - "operationId": "bestbuy-category", + "description": "Returns one Fresh Frozen Custard flavor's full detail, including its declared allergens, a component-by-component ingredient breakdown, and Culver's own flavor-category labels. slug comes from GET /culvers/calendar (flavors[].slug) or GET /culvers/store (flavors_of_the_day[].slug).", + "operationId": "culvers-flavor", "parameters": [ { - "description": "Best Buy category id", + "description": "Flavor slug from /culvers/calendar or /culvers/store", "in": "query", - "name": "category_id", + "name": "slug", "required": true, "type": "string", - "x-example": "pcmcat138500050001" - }, - { - "description": "1-indexed page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "chocolate-covered-strawberry" } ], "produces": [ @@ -290254,7 +361264,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bestbuy.categoryResponseDoc" + "$ref": "#/definitions/culvers.flavorResponseDoc" } }, "400": { @@ -290287,27 +361297,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Best Buy category's product listing", + "summary": "Get one Culver's Fresh Frozen Custard flavor's detail", "tags": [ - "Best Buy" + "Culvers" ] } }, - "/bestbuy/category/subcategories": { + "/culvers/item": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Best Buy category's own sibling/child category set (name, category id, url), sourced from that category page's own \"Category\" filter facet. Each id is directly usable as bestbuy_category's category_id input. category_id is a Best Buy category id, e.g. pcmcat138500050001, found in a category page URL's trailing .c?id= segment. A leaf category with no siblings returns an empty list, not an error.", - "operationId": "bestbuy-category-subcategories", + "description": "Returns one Culver's menu item's full detail, including its size/topping modifier tree with each option's own calories and nutrition link. category and item slugs come from GET /culvers/categories and GET /culvers/menu.", + "operationId": "culvers-item", "parameters": [ { - "description": "Best Buy category id", + "description": "Category slug from /culvers/categories", "in": "query", - "name": "category_id", + "name": "category", "required": true, "type": "string", - "x-example": "pcmcat138500050001" + "x-example": "butterburgers" + }, + { + "description": "Item slug from /culvers/menu", + "in": "query", + "name": "item", + "required": true, + "type": "string", + "x-example": "butterburger-cheese" } ], "produces": [ @@ -290317,7 +361335,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bestbuy.subcategoriesResponseDoc" + "$ref": "#/definitions/culvers.itemResponseDoc" } }, "400": { @@ -290326,6 +361344,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -290344,27 +361368,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Best Buy category's own sibling/child categories", + "summary": "Look up one Culver's menu item's full detail", "tags": [ - "Best Buy" + "Culvers" ] } }, - "/bestbuy/product": { + "/culvers/menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Best Buy product's detail (name, brand, model, color, price, availability, rating, images, breadcrumbs). sku is the numeric Best Buy SKU shown on bestbuy.com product pages and URLs.", - "operationId": "bestbuy-product", + "description": "Returns the items in one Culver's menu category, each with name, description, image, and a link to Culver's nutrition guide. Category slugs come from GET /culvers/categories. Prices are not published on the national catalog -- Culver's only prices items once a specific restaurant is selected; see GET /culvers/item for full modifier/topping detail.", + "operationId": "culvers-menu", "parameters": [ { - "description": "Numeric Best Buy SKU", + "description": "Category slug from /culvers/categories", "in": "query", - "name": "sku", + "name": "category", "required": true, "type": "string", - "x-example": "6673590" + "x-example": "butterburgers" } ], "produces": [ @@ -290374,7 +361398,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bestbuy.productResponseDoc" + "$ref": "#/definitions/culvers.menuResponseDoc" } }, "400": { @@ -290383,6 +361407,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -290401,27 +361431,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Best Buy product's detail", + "summary": "List one Culver's menu category's items", "tags": [ - "Best Buy" + "Culvers" ] } }, - "/bestbuy/product/questions": { + "/culvers/store": { "get": { "consumes": [ "application/json" ], - "description": "Returns the customer questions (with answers, when present) Best Buy embeds directly on a product's page: question text, answer text, who answered, and when. sku is the numeric Best Buy SKU shown on bestbuy.com product pages and URLs. A product with no questions asked yet returns an empty list, not an error.", - "operationId": "bestbuy-product-questions", + "description": "Returns one Culver's restaurant's address, phone, coordinates, open/closed status, fulfillment hours, handoff options, online-order link, and today's flavor(s) of the day. slug comes from GET /culvers/directory.", + "operationId": "culvers-store", "parameters": [ { - "description": "Numeric Best Buy SKU", + "description": "Restaurant slug from /culvers/directory", "in": "query", - "name": "sku", + "name": "slug", "required": true, "type": "string", - "x-example": "6673590" + "x-example": "ann-arbor-mi-lohr-rd" } ], "produces": [ @@ -290431,7 +361461,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bestbuy.productQuestionsResponseDoc" + "$ref": "#/definitions/culvers.storeResponseDoc" } }, "400": { @@ -290440,6 +361470,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -290458,29 +361494,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Best Buy product's customer questions and answers", + "summary": "Look up one Culver's restaurant by its directory slug", "tags": [ - "Best Buy" + "Culvers" ] } }, - "/bestbuy/product/related": { + "/cvs/brands": { "get": { "consumes": [ "application/json" ], - "description": "Returns the organic (non-sponsored) related products Best Buy embeds in a product page's own comparison table (sku, name, url, image, price). sku is the numeric Best Buy SKU shown on bestbuy.com product pages and URLs. A product page with no comparison table returns an empty list, not an error.", - "operationId": "bestbuy-product-related", - "parameters": [ - { - "description": "Numeric Best Buy SKU", - "in": "query", - "name": "sku", - "required": true, - "type": "string", - "x-example": "6673590" - } - ], + "description": "Returns CVS.com's full brand directory (name and path). Each brand's path is directly usable as GET /cvs/category's path parameter to browse that brand's products.", + "operationId": "cvs-brands", "produces": [ "application/json" ], @@ -290488,14 +361514,49 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bestbuy.productRelatedResponseDoc" + "$ref": "#/definitions/cvs.brandsResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "CVS brand directory", + "tags": [ + "CVS" + ] + } + }, + "/cvs/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns CVS.com's full category/subcategory navigation taxonomy (name and path, nested to whatever depth the upstream carries). Each node's path is directly usable as GET /cvs/category's path parameter.", + "operationId": "cvs-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/cvs.categoriesResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -290515,27 +361576,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Best Buy product's related products", + "summary": "CVS category taxonomy", "tags": [ - "Best Buy" + "CVS" ] } }, - "/bestbuy/product/reviews": { + "/cvs/category": { "get": { "consumes": [ "application/json" ], - "description": "Returns page 1 (up to 20) of one Best Buy product's customer reviews (rating, title, text, author, posted date, tags such as Verified Purchaser, recommended flag, helpful/unhelpful counts). sku is the numeric Best Buy SKU shown on bestbuy.com product pages and URLs.", - "operationId": "bestbuy-product-reviews", + "description": "Returns one page of a CVS.com OTC (over-the-counter) retail category, subcategory, or brand page's product grid: products with title, brand, image, current/original price, and sponsored/featured/new-product flags; the total result count; and the facets (brand, color, size, price range, and other category-specific attributes, each with its selectable values and result counts) available to filter the page further. Covers the non-prescription retail catalog only. path is the segment of a page URL after \"/shop/\", e.g. \"beauty\" (top-level category), \"health-medicine/allergy-sinus\" (subcategory), or \"brand-shop/s/safe-home\" (brand page); a full https://www.cvs.com/shop/... URL or a \"/shop/...\" path is also accepted. Any of these can also carry an optional facet-filter suffix in the site's own URL shape, e.g. \"beauty/makeup/eyes/q/CoverGirl/Black/brpc\" to filter to brand CoverGirl and color Black -- see the response's facets field for which values/type codes a given category supports; filter values are case-sensitive exactly as the site renders them. page is a 1-indexed page number (default 1). sort is an optional result order matching the site's own Sort By control. CVS.com is only available from US and US-territory locations; a request served from an unsupported region returns an upstream error rather than an empty result.", + "operationId": "cvs-category", "parameters": [ { - "description": "Numeric Best Buy SKU", + "description": "CVS category, subcategory, or brand-page URL path, optionally with a /q/{value}/{typeCode} facet-filter suffix, e.g. \\", "in": "query", - "name": "sku", + "name": "path", "required": true, "type": "string", - "x-example": "6673590" + "x-example": "beauty" + }, + { + "description": "1-indexed page number, default 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Result sort order, default the site's own relevance order. One of pa (Price Low to High), pd (Price High to Low), tr (Top Rated), rc (Most Reviewed), az (Name A-Z), za (Name Z-A)", + "enum": [ + "pa", + "pd", + "tr", + "rc", + "az", + "za" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "pa" } ], "produces": [ @@ -290545,7 +361628,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bestbuy.productReviewsResponseDoc" + "$ref": "#/definitions/cvs.categoryResponseDoc" } }, "400": { @@ -290572,34 +361655,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Best Buy product's customer reviews", + "summary": "Browse a CVS OTC category page", "tags": [ - "Best Buy" + "CVS" ] } }, - "/bestbuy/search": { + "/cvs/product-ingredients/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page (up to 24) of one Best Buy keyword search's product listing (sku, title, url, image, price, rating, review count). q is free-text search keywords, e.g. \"laptop\". page is the optional 1-indexed page number (defaults to 1); requesting a page past the last one returns an empty products list, not an error.", - "operationId": "bestbuy-search", + "description": "Returns one CVS.com OTC (over-the-counter) retail product's ingredient/label statement: active ingredients, inactive ingredients, and the vendor's full free-text ingredient paragraph (which, for OTC drug products, frequently also carries a Drug Facts-style purpose note). This is sourced from the product's own dedicated ingredients page, a separate page from the main product detail endpoint. Covers the non-prescription retail catalog only -- this does not cover prescription items, pharmacy ordering, or any patient-specific data. slug is the segment of a product page URL after \"/shop/\", e.g. \"e-l-f-16hr-camo-concealer-prodid-2370023\"; a full https://www.cvs.com/shop/... URL is also accepted. Some products (particularly non-consumable goods) may return empty ingredient fields -- this reflects upstream having no label data for that product, not an error. CVS.com is only available from US/US-territory egress; a request from an unsupported region returns an upstream error rather than an empty result.", + "operationId": "cvs-product-ingredients", "parameters": [ { - "description": "Search keywords", - "in": "query", - "name": "q", + "description": "CVS product page URL slug, e.g. \\", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "laptop" - }, - { - "description": "1-indexed page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "e-l-f-16hr-camo-concealer-prodid-2370023" } ], "produces": [ @@ -290609,7 +361685,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bestbuy.searchResponseDoc" + "$ref": "#/definitions/cvs.productIngredientsResponseDoc" } }, "400": { @@ -290642,35 +361718,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Best Buy's product catalog", + "summary": "CVS OTC product ingredients", "tags": [ - "Best Buy" + "CVS" ] } }, - "/bestbuy/stores": { + "/cvs/product/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns Best Buy's physical store locations in one city (name, address, phone, coordinates, rating, hours), sourced from Best Buy's own SEO store directory. state is one of the 50 US state codes plus dc and pr: `al`, `ak`, `az`, `ar`, `ca`, `co`, `ct`, `de`, `dc`, `fl`, `ga`, `hi`, `id`, `il`, `in`, `ia`, `ks`, `ky`, `la`, `me`, `md`, `ma`, `mi`, `mn`, `ms`, `mo`, `mt`, `ne`, `nv`, `nh`, `nj`, `nm`, `ny`, `nc`, `nd`, `oh`, `ok`, `or`, `pa`, `pr`, `ri`, `sc`, `sd`, `tn`, `tx`, `ut`, `vt`, `va`, `wa`, `wv`, `wi`, `wy`. city is free text matched case-insensitively against that state's own directory (e.g. \"Chicago\").", - "operationId": "bestbuy-stores", + "description": "Returns one CVS.com OTC (over-the-counter) retail product's detail: name, description, brand, category, price, currency, online availability, image gallery, and aggregate rating. Covers the non-prescription retail catalog only -- this does not cover prescription items, pharmacy ordering, or any patient-specific data. slug is the segment of a product page URL after \"/shop/\", e.g. \"safe-home-premium-radon-test-kit-prodid-945948\"; a full https://www.cvs.com/shop/... URL is also accepted. CVS.com is only available from US/US-territory egress; a request from an unsupported region returns an upstream error rather than an empty result.", + "operationId": "cvs-product", "parameters": [ { - "description": "Two-letter state/territory code", - "in": "query", - "name": "state", - "required": true, - "type": "string", - "x-example": "il" - }, - { - "description": "City name", - "in": "query", - "name": "city", + "description": "CVS product page URL slug, e.g. \\", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "Chicago" + "x-example": "safe-home-premium-radon-test-kit-prodid-945948" } ], "produces": [ @@ -290680,7 +361748,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bestbuy.storesResponseDoc" + "$ref": "#/definitions/cvs.productResponseDoc" } }, "400": { @@ -290713,35 +361781,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get Best Buy's physical stores in one city", + "summary": "CVS OTC product detail", "tags": [ - "Best Buy" + "CVS" ] } }, - "/bigcommerce/category": { + "/cvs/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns one product-listing page from a public BigCommerce storefront category page. url must be the full public category-page URL. page is 1-indexed and defaults to 1.", - "operationId": "bigcommerce-category", + "description": "Performs a keyword search across CVS.com's non-prescription retail/OTC catalog and returns one page of results: products with title, brand, image, current/original price, and sponsored/featured/new-product flags; the total result count; and the facets (brand, color, size, price range, and other attributes, each with its selectable values and result counts) available to filter the results further. Covers the non-prescription retail catalog only. q is the search keyword or phrase, required. page is a 1-indexed page number (default 1). sort is an optional result order matching cvs-category's own Sort By values. CVS.com is only available from US and US-territory locations; a request served from an unsupported region returns an upstream error rather than an empty result.", + "operationId": "cvs-search", "parameters": [ { - "description": "Full public BigCommerce category page URL", + "description": "Search keyword or phrase", "in": "query", - "name": "url", + "name": "q", "required": true, "type": "string", - "x-example": "https://www.bulkapothecary.com/melt-and-pour-soap-bases/" + "x-example": "ibuprofen" }, { - "description": "1-indexed category page, defaults to 1", + "description": "1-indexed page number, default 1", "in": "query", - "minimum": 1, "name": "page", "type": "integer", "x-example": 1 + }, + { + "description": "Result sort order, default relevance. One of pa (Price Low to High), pd (Price High to Low), tr (Top Rated), rc (Most Reviewed), az (Name A-Z), za (Name Z-A)", + "enum": [ + "pa", + "pd", + "tr", + "rc", + "az", + "za" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "pa" } ], "produces": [ @@ -290751,7 +361833,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bigcommerce.categoryResponseDoc" + "$ref": "#/definitions/cvs.categoryResponseDoc" } }, "400": { @@ -290760,12 +361842,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -290784,27 +361860,75 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a BigCommerce storefront category", + "summary": "Search CVS OTC products by keyword", "tags": [ - "BigCommerce" + "CVS" ] } }, - "/bigcommerce/product": { + "/cvs/store-locator": { "get": { "consumes": [ "application/json" ], - "description": "Returns product detail from a public BigCommerce storefront product page. url must be the full public product-page URL for a BigCommerce Stencil storefront.", - "operationId": "bigcommerce-product", + "description": "Returns nearby CVS store locations for a ZIP code, a free-text address/city/state, or a latitude/longitude pair: address, phone, fax, distance, and retail store hours, plus a has_pharmacy existence flag and a list of general service indicators (e.g. photo, ATM, same-day delivery). Covers general store info only -- this does not return pharmacy hours, pharmacy phone, prescription data, or any patient-specific information. zip is a 5-digit US ZIP code; alternatively supply address (a free-text location such as a city, state, or street address) or latitude and longitude together. When more than one is supplied, zip wins, then address, then latitude/longitude. Optionally narrow results to stores carrying one specific service via the service param (the same code vocabulary the response's services field uses); only one service value is accepted per request. CVS.com is only available from US/US-territory egress; a request from an unsupported region returns an upstream error rather than an empty result.", + "operationId": "cvs-store-locator", "parameters": [ { - "description": "Full public BigCommerce product page URL", + "description": "5-digit US ZIP code, e.g. \\", "in": "query", - "name": "url", - "required": true, + "name": "zip", "type": "string", - "x-example": "https://www.bulkapothecary.com/goat-milk-sfic-all-natural-glycerin-melt-and-pour-soap-base/" + "x-example": "90210" + }, + { + "description": "Free-text location -- a city, state, or street address, e.g. \\", + "in": "query", + "name": "address", + "type": "string", + "x-example": "Beverly Hills, CA" + }, + { + "description": "Latitude, used together with longitude when zip and address are not supplied", + "in": "query", + "name": "latitude", + "type": "number", + "x-example": 34.0901 + }, + { + "description": "Longitude, used together with latitude when zip and address are not supplied", + "in": "query", + "name": "longitude", + "type": "number", + "x-example": -118.4065 + }, + { + "description": "Narrow results to stores carrying one specific service", + "enum": [ + "HH_HealthHub_Ind", + "MC_MinuteClinic_Ind", + "HS_OakStreetHealth_Ind", + "IM_Immunization_Ind", + "RX_OTCH_Ind", + "IM_Covax_Ind", + "CL_CovidTest_Ind", + "RX_24Hours_Ind", + "RX_DriveThru_Ind", + "RX_Pharmacy_Ind", + "RX_DrugDisposal_Ind", + "RS_24Hours_Ind", + "PH_Photo_Ind", + "RS_AcceptsWic_Ind", + "RS_AcceptsSnap_Ind", + "GN_UPSAccessPoint_Ind", + "RS_BOPIS_Ind", + "GN_YMas_Ind", + "BT_BeautyIRL_Ind", + "GN_SmileDirectClub_Ind" + ], + "in": "query", + "name": "service", + "type": "string" } ], "produces": [ @@ -290814,7 +361938,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bigcommerce.productResponseDoc" + "$ref": "#/definitions/cvs.storesResponseDoc" } }, "400": { @@ -290847,43 +361971,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a BigCommerce storefront product", + "summary": "CVS store locator", "tags": [ - "BigCommerce" + "CVS" ] } }, - "/bigcommerce/search": { + "/dailycaller/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one product-search page from a public BigCommerce storefront. url must be the public storefront origin; an optional caller path or query is ignored. q is required search text. page is 1-indexed and defaults to 1.", - "operationId": "bigcommerce-search", + "description": "Returns public The Daily Caller article metadata and body paragraphs from a canonical article URL. Patriots-only (premium) articles expose only a public teaser and are flagged paywalled.", + "operationId": "dailycaller-article", "parameters": [ { - "description": "Public BigCommerce storefront origin", + "description": "Canonical The Daily Caller article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.bulkapothecary.com" - }, - { - "description": "Search text", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "lavender" - }, - { - "description": "1-indexed search page, defaults to 1", - "in": "query", - "minimum": 1, - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "https://dailycaller.com/2026/09/23/example-article-slug" } ], "produces": [ @@ -290893,7 +361998,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bigcommerce.searchResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -290908,12 +362013,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -290926,19 +362025,26 @@ "ApiKeyAuth": [] } ], - "summary": "Search a BigCommerce storefront", + "summary": "Get The Daily Caller article content", "tags": [ - "BigCommerce" + "The Daily Caller" ] } }, - "/bilibili/anime-home": { + "/dailycaller/author": { "get": { - "consumes": [ - "application/json" + "description": "Returns a The Daily Caller author's byline metadata, job title, optional biography, contact links, and newest articles from a canonical author URL.", + "operationId": "dailycaller-author", + "parameters": [ + { + "description": "Canonical The Daily Caller author URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://dailycaller.com/author/EmilyKopp/" + } ], - "description": "Returns the anonymous anime homepage's featured titles, latest updates, schedule, popular ranking, and new recommendations. Personalized rotating feed items are excluded.", - "operationId": "bilibili-anime-home", "produces": [ "application/json" ], @@ -290946,17 +362052,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bilibili.animeHomeResponseDoc" + "$ref": "#/definitions/publicnews.dailycallerAuthorResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -290973,27 +362079,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get Bilibili anime home sections", + "summary": "Get a The Daily Caller author profile", "tags": [ - "Bilibili" + "The Daily Caller" ] } }, - "/bilibili/autocomplete": { + "/dailycaller/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Bilibili search-box suggestions for the partial text in `q`, which is required (up to 100 characters). The response has the `query`, a `count` and deduplicated `suggestions` in Bilibili's order. A query with no matches returns an empty `suggestions` array; invalid input returns 400.", - "operationId": "bilibili-autocomplete", + "description": "Returns the newest headlines, about 40, from one Daily Caller section page. `section` is required (`politics`, `world`, `energy`, `opinion`, `patriots` and others); any other value returns a 400. Items have a title, URL, lead image and sometimes a `type` such as `opinion`. Section pages carry no publish time or byline.", + "operationId": "dailycaller-headlines", "parameters": [ { - "description": "Partial search text", + "description": "The Daily Caller section slug", + "enum": [ + "politics", + "us", + "world", + "national-security", + "elections", + "business", + "energy", + "education", + "health", + "tech", + "media", + "entertainment", + "sports", + "guns-and-gear", + "investigative-group", + "opinion", + "analysis", + "two-sides", + "big-tent-ideas", + "patriots", + "satire", + "video" + ], "in": "query", - "name": "q", + "name": "section", "required": true, "type": "string", - "x-example": "原神" + "x-example": "politics" } ], "produces": [ @@ -291003,7 +362130,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bilibili.autocompleteResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -291012,14 +362139,40 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The Daily Caller section headlines", + "tags": [ + "The Daily Caller" + ] + } + }, + "/dailycaller/news": { + "get": { + "description": "Returns about 25 of the newest Daily Caller top stories, mixed across sections. Each item has its title, URL, author, publication time (RFC 3339, UTC) and lead image. It takes no parameters; use the headlines endpoint when you want a single section.", + "operationId": "dailycaller-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -291036,19 +362189,52 @@ "ApiKeyAuth": [] } ], - "summary": "Get Bilibili search suggestions", + "summary": "Get The Daily Caller top stories", "tags": [ - "Bilibili" + "The Daily Caller" ] } }, - "/bilibili/guochuang-home": { + "/dailycaller/sections": { "get": { - "consumes": [ + "description": "Lists the 22 Daily Caller section slugs that the headlines endpoint accepts, from `politics` and `world` to `opinion` and `video`, each with its `name` and section page `url`. Sponsored content is not offered. A few sections such as `satire`, `two-sides` and `video` publish rarely, so their newest items can be months old.", + "operationId": "dailycaller-sections", + "produces": [ "application/json" ], - "description": "Returns the anonymous Chinese-animation homepage's featured titles, latest updates, schedule, popular ranking, and new recommendations. Personalized rotating feed items are excluded.", - "operationId": "bilibili-guochuang-home", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The Daily Caller sections", + "tags": [ + "The Daily Caller" + ] + } + }, + "/dailyexpress/article": { + "get": { + "description": "Returns one Daily Express article by its canonical article `url`. The response has the title, description, publish and update times, section, authors, lead image, body `paragraphs` and a `paywalled` flag. Subscriber-only or blocked articles return an upstream error instead of partial text.", + "operationId": "dailyexpress-article", + "parameters": [ + { + "description": "Canonical Daily Express article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.express.co.uk/news/123456/example" + } + ], "produces": [ "application/json" ], @@ -291056,17 +362242,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bilibili.guochuangHomeResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -291083,19 +362269,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get Bilibili Chinese-animation home sections", + "summary": "Get Daily Express article content", "tags": [ - "Bilibili" + "Daily Express" ] } }, - "/bilibili/must-watch": { + "/dailyexpress/author": { "get": { - "consumes": [ - "application/json" + "description": "Returns one Daily Express journalist's public profile: name, job title, bio, and their recent articles, from a canonical journalist URL.", + "operationId": "dailyexpress-author", + "parameters": [ + { + "description": "Canonical Daily Express journalist URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.express.co.uk/journalist/123944/Rebecca-Russell" + } ], - "description": "Returns Bilibili's curated must-watch collection, split into `classic_videos` and `latest_videos` with their counts, plus the collection `title`, `subtitle` and `explanation`. Each video has `bvid`, `aid`, `title`, `url`, `cover`, `uploader`, `published`, `stats` and `achievement`. Takes no parameters.", - "operationId": "bilibili-must-watch", "produces": [ "application/json" ], @@ -291103,17 +362296,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bilibili.mustWatchResponseDoc" + "$ref": "#/definitions/publicnews.dailyExpressAuthorResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -291130,28 +362323,55 @@ "ApiKeyAuth": [] } ], - "summary": "Get Bilibili's curated must-watch videos", + "summary": "Get a Daily Express journalist profile", "tags": [ - "Bilibili" + "Daily Express" ] } }, - "/bilibili/popular": { + "/dailyexpress/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Bilibili's current popular videos in Bilibili's own order. Start with `cursor` 0 (the default; max 10000000) and pass back `next_cursor` for the next batch. Each video has `bvid`, `aid`, `title`, `url`, `cover`, `duration`, `uploader`, `views_and_age` and an optional `reason`. At the end of the feed `no_more` is `true` and `videos` is empty.", - "operationId": "bilibili-popular", + "description": "Returns the latest Daily Express headlines for one section. `section` is required and takes a slug such as `news`, `royal`, `showbiz-tv`, `formula-1` or `city-business`. Each item has its title, URL, summary, publication time and image.", + "operationId": "dailyexpress-headlines", "parameters": [ { - "description": "Upstream cursor from the previous response; defaults to 0", + "description": "Daily Express section slug", + "enum": [ + "news", + "uk", + "world", + "politics", + "royal", + "us", + "weather", + "science", + "history", + "weird", + "nature", + "obituaries", + "showbiz-tv", + "sport", + "football", + "tennis", + "formula-1", + "finance", + "city-business", + "personal-finance", + "retirement", + "travel", + "entertainment", + "gaming", + "lifestyle", + "health", + "property", + "cars", + "technology" + ], "in": "query", - "maximum": 10000000, - "minimum": 0, - "name": "cursor", - "type": "integer", - "x-example": 0 + "name": "section", + "required": true, + "type": "string", + "x-example": "news" } ], "produces": [ @@ -291161,7 +362381,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bilibili.popularResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -291170,16 +362390,36 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } - }, - "500": { - "description": "Internal Server Error", + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Daily Express section headlines", + "tags": [ + "Daily Express" + ] + } + }, + "/dailyexpress/news": { + "get": { + "description": "Returns the current Daily Express top stories. Each item has its title, URL, summary, publication time and image. Takes no parameters; use `dailyexpress-headlines` to read a single section instead.", + "operationId": "dailyexpress-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -291194,19 +362434,52 @@ "ApiKeyAuth": [] } ], - "summary": "Get current popular Bilibili videos", + "summary": "Get Daily Express top stories", "tags": [ - "Bilibili" + "Daily Express" ] } }, - "/bilibili/ranking": { + "/dailyexpress/sections": { "get": { - "consumes": [ + "description": "Lists the Daily Express sections that `dailyexpress-headlines` accepts, such as `news`, `uk`, `royal`, `sport` and `personal-finance`. Each entry has a stable `slug`, a display `name` and the section `url`. Takes no parameters.", + "operationId": "dailyexpress-sections", + "produces": [ "application/json" ], - "description": "Returns the current Bilibili all-site video ranking in rank order. Each video has its `rank`, `aid`, `title`, `url`, `cover`, `views`, `danmaku`, `replies`, `favorites`, `likes`, `duration_seconds`, `published_at`, `category` and `creator` (name, `mid`, `followers`). Takes no parameters.", - "operationId": "bilibili-ranking", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Daily Express sections", + "tags": [ + "Daily Express" + ] + } + }, + "/dailykos/article": { + "get": { + "description": "Returns metadata and text paragraphs from a canonical staff-authored Daily Kos /news/ story. Community stories and photographer-owned images are not included.", + "operationId": "dailykos-article", + "parameters": [ + { + "description": "Canonical Daily Kos staff /news/ article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.dailykos.com/stories/2026/9/28/800104871/news/yet-another-fbi-co-babysitter-bids-the-bureau-bye-bye/" + } + ], "produces": [ "application/json" ], @@ -291214,17 +362487,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bilibili.rankingResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -291241,33 +362514,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get the current Bilibili all-site ranking", + "summary": "Get a Daily Kos staff article", "tags": [ - "Bilibili" + "Daily Kos" ] } }, - "/bilibili/vertical-home": { + "/dailykos/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns stable server-rendered editorial sections for one Bilibili vertical. Allowed category values: documentary, movie, tv, variety. Rotating feeds, pagination, account state, and streaming URLs are excluded.", - "operationId": "bilibili-vertical-home", + "description": "Returns the current stories for one Daily Kos category. `section` is required and takes one of 24 slugs such as `news/elections`, `news/courts`, `cartoon` or `announcements`; any other value returns a 400. Some categories can be empty, which comes back as an empty `items` list.", + "operationId": "dailykos-headlines", "parameters": [ { - "description": "Vertical: documentary, movie, tv, variety", + "description": "Daily Kos category slug", "enum": [ - "documentary", - "movie", - "tv", - "variety" + "announcements", + "cartoon", + "daily-kos", + "partnerhub", + "news", + "news/business-and-economy", + "news/congress", + "news/courts", + "news/culture", + "news/elections", + "news/environment", + "news/health", + "news/immigration", + "news/justice", + "news/media", + "news/media-and-culture", + "news/national", + "news/science", + "news/series", + "news/stateandlocal", + "news/tech", + "news/videos", + "news/whitehouse", + "news/world" ], "in": "query", - "name": "category", + "name": "section", "required": true, "type": "string", - "x-example": "documentary" + "x-example": "announcements" } ], "produces": [ @@ -291277,7 +362567,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bilibili.verticalHomeResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -291286,16 +362576,36 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } - }, - "500": { - "description": "Internal Server Error", + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Daily Kos category headlines", + "tags": [ + "Daily Kos" + ] + } + }, + "/dailykos/news": { + "get": { + "description": "Returns the current staff-written Daily Kos stories, about 10 items, each with title, URL, summary, publication time and author. Community stories and image URLs are left out because the site licenses them separately. Takes no parameters.", + "operationId": "dailykos-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -291310,28 +362620,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get Bilibili documentary, movie, TV, or variety home sections", + "summary": "Get Daily Kos top stories", "tags": [ - "Bilibili" + "Daily Kos" ] } }, - "/bilibili/weekly": { + "/dailykos/sections": { "get": { - "consumes": [ + "description": "Lists the 24 Daily Kos categories accepted by `dailykos-headlines`, including nested slugs such as `news/elections` and `news/whitehouse`. Each entry has the `slug`, display `name` and category `url`. Dynamic tag archives are not part of this set.", + "operationId": "dailykos-sections", + "produces": [ "application/json" ], - "description": "Returns one issue of Bilibili's weekly selected-video series: `number` (1 to 1000000) picks the issue, and omitting it returns the latest. The issue has `subject`, `label`, `description` and `reminder`, and each video has `bvid`, `title`, `uploader`, `duration_seconds`, `recommendation` and `stats_text`. An unknown issue number returns 404.", - "operationId": "bilibili-weekly", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Daily Kos categories", + "tags": [ + "Daily Kos" + ] + } + }, + "/dailymail/article": { + "get": { + "description": "Returns one Daily Mail article by its canonical `url`, which must contain an `article-` path segment. The response has the title, description, publish and update times, section, authors, lead image, body `paragraphs` and a `paywalled` flag.", + "operationId": "dailymail-article", "parameters": [ { - "description": "Positive issue number; omit for the latest issue", + "description": "Canonical Daily Mail article URL", "in": "query", - "maximum": 1000000, - "minimum": 1, - "name": "number", - "type": "integer", - "x-example": 387 + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.dailymail.co.uk/news/article-1234567/example.html" } ], "produces": [ @@ -291341,7 +362673,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bilibili.weeklyResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -291356,14 +362688,63 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Daily Mail article content", + "tags": [ + "Daily Mail" + ] + } + }, + "/dailymail/author": { + "get": { + "description": "Returns one Daily Mail author's public profile: name, job title, bio, social accounts, and one page of their recent articles.", + "operationId": "dailymail-author", + "parameters": [ + { + "description": "Canonical dailymail.com/profile-/.html URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.dailymail.com/profile-1021/charliespiering.html" }, - "500": { - "description": "Internal Server Error", + { + "description": "1-based page of articles to return; defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.dailyMailAuthorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -291380,24 +362761,38 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Bilibili weekly selected-video issue", + "summary": "Get a Daily Mail author profile", "tags": [ - "Bilibili" + "Daily Mail" ] } }, - "/billboard/article": { + "/dailymail/headlines": { "get": { - "description": "Returns public Billboard article metadata and body paragraphs from a canonical article URL. Billboard Pro articles are returned in full when the public page serves the full body; a teaser-only page is flagged paywalled.", - "operationId": "billboard-article", + "description": "Returns the latest Daily Mail headlines for one section. `section` is required and must be one of `home`, `news`, `sport`, `tvshowbiz`, `health`, `femail`, `travel`, `sciencetech`, `money`, `debate`, `us` or `australia`. Each item has its title, URL, summary, publication time and image.", + "operationId": "dailymail-headlines", "parameters": [ { - "description": "Canonical Billboard article URL", + "description": "Daily Mail RSS section slug", + "enum": [ + "home", + "news", + "sport", + "tvshowbiz", + "health", + "femail", + "travel", + "sciencetech", + "money", + "debate", + "us", + "australia" + ], "in": "query", - "name": "url", + "name": "section", "required": true, "type": "string", - "x-example": "https://www.billboard.com/music/latin/stray-kids-like-bts-younger-mexican-president-confirm-visit-1236346530/" + "x-example": "home" } ], "produces": [ @@ -291407,7 +362802,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -291416,8 +362811,40 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Daily Mail section headlines", + "tags": [ + "Daily Mail" + ] + } + }, + "/dailymail/news": { + "get": { + "description": "Returns the current Daily Mail top stories. Each item has its title, URL, summary, publication time and image. Takes no parameters; use `dailymail-headlines` for a single section.", + "operationId": "dailymail-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -291434,24 +362861,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get Billboard article content", + "summary": "Get Daily Mail top stories", "tags": [ - "Billboard" + "Daily Mail" ] } }, - "/billboard/author": { + "/dailymail/sections": { "get": { - "description": "Returns a Billboard author's byline metadata, biography, and recent articles (sourced from the author's own public RSS feed) from a canonical author URL.", - "operationId": "billboard-author", + "description": "Lists the 12 Daily Mail sections accepted by `dailymail-headlines`: `home`, `news`, `sport`, `tvshowbiz`, `health`, `femail`, `travel`, `sciencetech`, `money`, `debate`, `us` and `australia`. Each entry has the `slug`, display `name` and feed `url`.", + "operationId": "dailymail-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Daily Mail RSS sections", + "tags": [ + "Daily Mail" + ] + } + }, + "/dailymaverick/article": { + "get": { + "description": "Extracts the public article metadata and body paragraphs Daily Maverick serves to an anonymous visitor. The paywalled flag is set only when the page exposes the publisher's access-control marker.", + "operationId": "dailymaverick-article", "parameters": [ { - "description": "Canonical Billboard author URL", + "description": "Canonical Daily Maverick article or opinionista URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.billboard.com/author/gil-kaufman/" + "x-example": "https://www.dailymaverick.co.za/article/2026-09-29-nmb-flying-squad-get-two-cars-and-a-promise-of-more/" } ], "produces": [ @@ -291461,7 +362914,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.billboardAuthorResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -291476,6 +362929,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -291488,67 +362947,77 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Billboard author profile", + "summary": "Get a Daily Maverick article", "tags": [ - "Billboard" + "Daily Maverick" ] } }, - "/billboard/headlines": { + "/dailymaverick/headlines": { "get": { - "description": "Returns the 10 most recent items from one Billboard section. `section` is required and takes a slug such as `chart-beat`, `country`, `rb-hip-hop`, `streaming` or `touring`. Parent sections such as `music` and `business` overlap with their subsections, so one item can appear under several. Items carry title, URL, summary, author and time.", - "operationId": "billboard-headlines", + "description": "Returns up to 21 current story cards for one Daily Maverick category. `section` is required and takes one of 51 slugs such as `maverick-news`, `business-maverick`, `opinionistas`, `politics` or `sport`. Each item has its title, URL and type, plus summary, publication time, author and image when the outlet provides them.", + "operationId": "dailymaverick-headlines", "parameters": [ { - "description": "Billboard section slug", + "description": "Daily Maverick category slug", "enum": [ - "music", - "music-news", - "chart-beat", - "awards", - "concerts", - "country", - "features", - "latin", - "lyrics", - "pop", - "rb-hip-hop", - "reviews", - "rock", - "business", - "business-news", - "legal", - "management", - "publishing", - "radio", - "record-labels", - "streaming", - "tech", - "touring", + "2019-elections", + "2019-rugby-world-cup", + "africa", + "analysis", + "articles", + "blog", + "books", + "business-maverick", + "cartoons", + "companies", + "covid-19", + "crypto", "culture", - "events", - "lifestyle", - "politics", - "pride", - "product-recommendations", - "tv-film", + "declassified-uk", + "dm168", + "economy", + "editorial", + "elections", + "fifa-world-cup-2026", + "international-finance", + "johannesburg", + "magazine", + "maverick-citizen", + "maverick-earth", + "maverick-insider", + "maverick-life", + "maverick-news", "media", - "lists", - "photos-media", + "mining", + "motoring", + "multimedia", + "nelson-mandela-bay", + "op-eds", + "open-secrets", + "opinionistas", + "partner-content", + "people-of-the-year", + "personal-finance", "podcasts", - "videos", - "espanol", - "cultura-entretenimiento", - "musica", - "negocios", - "noticias", - "pro" + "politics", + "sci-tech", + "scorpio", + "south-africa", + "sponsored-content", + "sport", + "tgifood", + "ukraine-crisis", + "webinars", + "weekend-wrap", + "world", + "world-cup-2018" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "music" + "x-example": "2019-elections" } ], "produces": [ @@ -291567,6 +363036,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -291579,16 +363054,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Billboard section headlines", + "summary": "Get headlines from one Daily Maverick section", "tags": [ - "Billboard" + "Daily Maverick" ] } }, - "/billboard/news": { + "/dailymaverick/news": { "get": { - "description": "Returns the latest Billboard stories, with no input needed. Each item has a title and canonical URL, plus a publication time, summary and image when Billboard provides them.", - "operationId": "billboard-news", + "description": "Lists recent Daily Maverick articles and opinionista pieces from a rolling set of the newest entries. Each item has its title, URL, `type`, publication time and, when available, summary, author and image. Videos, cartoons and other non-article pages are excluded.", + "operationId": "dailymaverick-news", "produces": [ "application/json" ], @@ -291617,16 +363092,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Billboard top stories", + "summary": "Get current Daily Maverick stories", "tags": [ - "Billboard" + "Daily Maverick" ] } }, - "/billboard/sections": { + "/dailymaverick/sections": { "get": { - "description": "Returns the public Billboard section inventory: every music, business, culture, media and Spanish-language category plus Billboard Pro, each linking to its public RSS feed.", - "operationId": "billboard-sections", + "description": "Lists the 51 article-bearing Daily Maverick categories accepted by `dailymaverick-headlines`, such as `africa`, `maverick-citizen`, `op-eds` and `sci-tech`. Each entry has the `slug`, `name` and category `url`. Empty, media-only and other non-story categories are omitted; checked 2026-09-28.", + "operationId": "dailymaverick-sections", "produces": [ "application/json" ], @@ -291636,6 +363111,18 @@ "schema": { "$ref": "#/definitions/publicnews.sectionsResponseDoc" } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -291643,37 +363130,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get Billboard sections", + "summary": "List Daily Maverick sections", "tags": [ - "Billboard" + "Daily Maverick" ] } }, - "/billing/me": { + "/dailyrecord/article": { "get": { - "consumes": [ - "application/json" + "description": "Returns one Daily Record article by its canonical article `url`. The response has the title, description, publish and update times, section, authors, lead image, body `paragraphs` and a `paywalled` flag. Subscriber-only or blocked articles return an upstream error.", + "operationId": "dailyrecord-article", + "parameters": [ + { + "description": "Canonical Daily Record article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.dailyrecord.co.uk/news/scottish-news/example-37685844" + } ], - "description": "Returns the authenticated user's current billing plan, period, included credits, used credits, remaining credits, overage status, and any downgrade scheduled for the next renewal.", - "operationId": "billing-me", "produces": [ "application/json" ], "responses": { "200": { - "description": "Current billing state", + "description": "OK", "schema": { - "$ref": "#/definitions/billing.billingStateResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, - "401": { - "description": "Authentication required", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -291684,28 +363184,96 @@ "ApiKeyAuth": [] } ], - "summary": "Get current billing state", + "summary": "Get Daily Record article content", "tags": [ - "Billing" + "Daily Record" ] } }, - "/billing/me/checkout": { - "post": { - "consumes": [ + "/dailyrecord/author": { + "get": { + "description": "Returns a Daily Record author profile, found by `slug` (for example `paul-hutcheon`) or by a canonical `url`; send exactly one of the two. The response has the name, job title, bio, email, X/Twitter link and recent articles with their label. Contact details the page does not list are simply absent.", + "operationId": "dailyrecord-author", + "parameters": [ + { + "description": "Author slug, e.g. paul-hutcheon", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "paul-hutcheon" + }, + { + "description": "Canonical dailyrecord.co.uk/authors// URL; alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.dailyrecord.co.uk/authors/paul-hutcheon/" + } + ], + "produces": [ "application/json" ], - "description": "Creates a Stripe Checkout session for the authenticated user's selected paid billing plan. The created subscription is tagged with the local user id and plan so Stripe webhooks can link the customer and activate the plan after payment.", - "operationId": "billing-me-checkout", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.dailyRecordAuthorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Daily Record author profile", + "tags": [ + "Daily Record" + ] + } + }, + "/dailyrecord/headlines": { + "get": { + "description": "Returns the latest Daily Record headlines for one section. `section` is required and must be one of `news`, `scotland`, `uk-world-news`, `sport`, `football`, `showbiz`, `lifestyle`, `money`, `travel` or `in-your-area`. Every item has its title and URL; the `news` section also carries summary, publication time and image.", + "operationId": "dailyrecord-headlines", "parameters": [ { - "description": "Checkout request", - "in": "body", - "name": "request", + "description": "Daily Record section slug", + "enum": [ + "news", + "scotland", + "uk-world-news", + "sport", + "football", + "showbiz", + "lifestyle", + "money", + "travel", + "in-your-area" + ], + "in": "query", + "name": "section", "required": true, - "schema": { - "$ref": "#/definitions/billing.stripeCheckoutRequestDoc" - } + "type": "string", + "x-example": "news" } ], "produces": [ @@ -291713,25 +363281,51 @@ ], "responses": { "200": { - "description": "Stripe checkout session", + "description": "OK", "schema": { - "$ref": "#/definitions/billing.stripeSessionResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { - "description": "Invalid request or plan", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "401": { - "description": "Authentication required", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Daily Record section headlines", + "tags": [ + "Daily Record" + ] + } + }, + "/dailyrecord/news": { + "get": { + "description": "Returns the current Daily Record top stories. Each item has its title, URL, summary, publication time and image. Takes no parameters; use `dailyrecord-headlines` for a single section.", + "operationId": "dailyrecord-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -291742,73 +363336,123 @@ "ApiKeyAuth": [] } ], - "summary": "Create Stripe checkout session", + "summary": "Get Daily Record top stories", "tags": [ - "Billing" + "Daily Record" ] } }, - "/billing/me/events": { + "/dailyrecord/sections": { "get": { - "consumes": [ + "description": "Lists the Daily Record sections accepted by `dailyrecord-headlines`, such as `news`, `scotland`, `uk-world-news`, `football` and `in-your-area`. Each entry has a stable `slug`, a display `name` and the section `url`. Takes no parameters.", + "operationId": "dailyrecord-sections", + "produces": [ "application/json" ], - "description": "Returns recent billing audit events for the authenticated user, with optional filters for time range, endpoint, request id, event status, and billable flag. Invalid event_status values and reversed time ranges return invalid params.", - "operationId": "billing-me-events", - "parameters": [ + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Maximum records to return. Defaults to 50 and clamps to 100.", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", - "type": "integer" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get Daily Record sections", + "tags": [ + "Daily Record" + ] + } + }, + "/dailystaruk/article": { + "get": { + "description": "Returns public Daily Star (UK) article metadata (including the section) and body paragraphs from a canonical article URL. Photo-gallery and sponsored partner-story URLs are rejected.", + "operationId": "dailystaruk-article", + "parameters": [ { - "description": "Created-at lower bound in RFC3339 format", + "description": "Canonical Daily Star (UK) article URL", "in": "query", - "name": "from", + "name": "url", + "required": true, "type": "string", - "x-example": "2026-04-01T00:00:00Z" + "x-example": "https://www.dailystar.co.uk/tv/wayne-rooney-opens-up-weight-37700309" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } }, - { - "description": "Created-at upper bound in RFC3339 format", - "in": "query", - "name": "to", - "type": "string", - "x-example": "2026-04-16T00:00:00Z" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Normalized endpoint or API path", - "in": "query", - "name": "endpoint", - "type": "string", - "x-example": "google/search" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Request id to inspect", + "ApiKeyAuth": [] + } + ], + "summary": "Get Daily Star (UK) article content", + "tags": [ + "Daily Star UK" + ] + } + }, + "/dailystaruk/author": { + "get": { + "description": "Returns one Daily Star (UK) author's public profile (name and, when published, job title, bio, email and X/Twitter handle) and one page of their recent articles.", + "operationId": "dailystaruk-author", + "parameters": [ + { + "description": "Author slug, e.g. edward-easton", "in": "query", - "name": "request_id", + "name": "slug", "type": "string", - "x-example": "req-1" + "x-example": "edward-easton" }, { - "description": "Billing event status", - "enum": [ - "reserved", - "charged", - "non_billable", - "failed" - ], + "description": "Canonical dailystar.co.uk/authors// URL; alternative to slug", "in": "query", - "name": "event_status", - "type": "string" + "name": "url", + "type": "string", + "x-example": "https://www.dailystar.co.uk/authors/edward-easton/" }, { - "description": "Filter billable or non-billable events", + "default": 1, + "description": "1-based page number of the author's article list (1 to 100); overrides any pageNumber in url", "in": "query", - "name": "billable", - "type": "boolean" + "name": "page", + "type": "integer" } ], "produces": [ @@ -291816,25 +363460,31 @@ ], "responses": { "200": { - "description": "Billing events", + "description": "OK", "schema": { - "$ref": "#/definitions/billing.billingEventsResponseDoc" + "$ref": "#/definitions/publicnews.reachAuthorResponseDoc" } }, "400": { - "description": "Invalid query parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "401": { - "description": "Authentication required", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -291845,27 +363495,64 @@ "ApiKeyAuth": [] } ], - "summary": "List current user's billing events", + "summary": "Get a Daily Star (UK) author profile", "tags": [ - "Billing" + "Daily Star UK" ] } }, - "/billing/me/periods": { + "/dailystaruk/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns recent local billing period ledgers for the authenticated user. Period ledgers are local reconciliation records built from billing events and are not charged credits.", - "operationId": "billing-me-periods", + "description": "Returns fresh headlines from one public Daily Star (UK) section. Photo galleries are omitted because they have no readable article body.", + "operationId": "dailystaruk-headlines", "parameters": [ { - "description": "Maximum periods to return. Defaults to 12 and clamps to 24.", + "description": "Daily Star (UK) section slug", + "enum": [ + "news", + "news/latest-news", + "news/uk-news", + "news/world-news", + "news/us-news", + "news/weird-news", + "news/exclusive", + "news/politics", + "showbiz", + "showbiz/us-showbiz", + "tv", + "music", + "sport", + "sport/football", + "sport/transfer-news", + "sport/boxing", + "sport/ufc", + "sport/f1", + "sport/darts", + "sport/snooker", + "sport/other-sports", + "sport/us-sport", + "sport/motorsport", + "tech", + "tech/news", + "tech/gaming", + "tech/reviews", + "life-style", + "life-style/money", + "life-style/competitions", + "real-life", + "love-sex", + "health", + "fashion-beauty", + "diet-fitness", + "travel", + "travel/travel-news", + "just-jane" + ], "in": "query", - "maximum": 24, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "section", + "required": true, + "type": "string", + "x-example": "news" } ], "produces": [ @@ -291873,19 +363560,25 @@ ], "responses": { "200": { - "description": "Billing period ledgers", + "description": "OK", "schema": { - "$ref": "#/definitions/billing.billingPeriodLedgersResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, - "401": { - "description": "Authentication required", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -291896,27 +363589,88 @@ "ApiKeyAuth": [] } ], - "summary": "List current user's billing period ledgers", + "summary": "Get Daily Star (UK) section headlines", "tags": [ - "Billing" + "Daily Star UK" ] } }, - "/billing/me/periods/{period_key}": { + "/dailystaruk/news": { "get": { - "consumes": [ + "description": "Returns fresh Daily Star (UK) top stories from the public home RSS feed. Photo galleries are omitted because they have no readable article body.", + "operationId": "dailystaruk-news", + "produces": [ "application/json" ], - "description": "Returns one billing period ledger for the authenticated user. If the ledger has not been materialized yet, it is rebuilt from billing events and stored locally. The period key must use YYYY-MM format.", - "operationId": "billing-me-period", - "parameters": [ + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Billing period key in YYYY-MM format", - "in": "path", - "name": "period_key", + "ApiKeyAuth": [] + } + ], + "summary": "Get Daily Star (UK) top stories", + "tags": [ + "Daily Star UK" + ] + } + }, + "/dailystaruk/sections": { + "get": { + "description": "Lists the Daily Star (UK) sections accepted by `dailystaruk-headlines`, including nested slugs such as `sport/football`, `news/weird-news` and `tech/gaming`. Each entry has the `slug`, `name` and feed `url`. Feeds were checked on 2026-09-25 and return up to about 25 entries.", + "operationId": "dailystaruk-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Daily Star (UK) sections", + "tags": [ + "Daily Star UK" + ] + } + }, + "/dailywire/article": { + "get": { + "description": "Returns public Daily Wire article metadata and body paragraphs from an article URL under any of the site's content-vertical prefixes.", + "operationId": "dailywire-article", + "parameters": [ + { + "description": "Daily Wire article URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "2026-04" + "x-example": "https://www.dailywire.com/news/example-article-slug" } ], "produces": [ @@ -291924,25 +363678,25 @@ ], "responses": { "200": { - "description": "Billing period ledger", + "description": "OK", "schema": { - "$ref": "#/definitions/billing.billingPeriodLedgerResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { - "description": "Invalid period key", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "401": { - "description": "Authentication required", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -291953,41 +363707,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get current user's billing period ledger", + "summary": "Get Daily Wire article content", "tags": [ - "Billing" + "DailyWire" ] } }, - "/billing/me/periods/{period_key}/statement": { + "/dailywire/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a customer-safe JSON statement for one billing period, combining the ledger, endpoint breakdown, optional billing events, and Stripe invoice evidence. Closed periods normally return a pre-frozen snapshot created during period close; historical closed periods without a snapshot are lazily frozen on read. Repair errors and raw webhook audit details are not exposed.", - "operationId": "billing-me-period-statement", + "description": "Returns one Daily Wire staff writer or contributor's public profile: name, headshot, social handles when present, biography, and their recent articles.", + "operationId": "dailywire-author", "parameters": [ { - "description": "Billing period key in YYYY-MM format", - "in": "path", - "name": "period_key", - "required": true, - "type": "string", - "x-example": "2026-04" - }, - { - "description": "Include recent billing events. Defaults to true.", + "description": "Author slug, e.g. brent-scher", "in": "query", - "name": "include_events", - "type": "boolean" + "name": "slug", + "type": "string", + "x-example": "brent-scher" }, { - "description": "Maximum billing events to include. Defaults to 100 and clamps to 500.", + "description": "Canonical dailywire.com/author/ URL; alternative to slug", "in": "query", - "maximum": 500, - "minimum": 1, - "name": "event_limit", - "type": "integer" + "name": "url", + "type": "string", + "x-example": "https://www.dailywire.com/author/brent-scher" } ], "produces": [ @@ -291995,25 +363738,25 @@ ], "responses": { "200": { - "description": "Billing period statement", + "description": "OK", "schema": { - "$ref": "#/definitions/billing.billingPeriodStatementResponseDoc" + "$ref": "#/definitions/publicnews.dailyWireAuthorResponseDoc" } }, "400": { - "description": "Invalid period key or query parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "401": { - "description": "Authentication required", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -292024,27 +363767,38 @@ "ApiKeyAuth": [] } ], - "summary": "Get current user's billing period statement", + "summary": "Get a Daily Wire author profile", "tags": [ - "Billing" + "DailyWire" ] } }, - "/billing/me/periods/{period_key}/statement/download": { + "/dailywire/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the exact customer-safe canonical JSON for a closed billing period statement snapshot. Closed periods are normally frozen during period close; if a historical closed period is missing a snapshot, the snapshot is lazily created before download. The raw response body is JSON, not the standard app envelope.", - "operationId": "billing-me-period-statement-download", + "description": "Returns current Daily Wire headlines for one content vertical. `section` is required and takes `news`, `opinion`, `dw-opinion`, `analysis`, `news-and-commentary`, `news-and-analysis`, `exclusive`, `entertainment`, `original`, `upstream`, `sports` or `mi-x-dw`. An empty result means the front page does not currently feature that vertical.", + "operationId": "dailywire-headlines", "parameters": [ { - "description": "Billing period key in YYYY-MM format", - "in": "path", - "name": "period_key", + "description": "Daily Wire section slug", + "enum": [ + "news", + "opinion", + "dw-opinion", + "analysis", + "news-and-commentary", + "news-and-analysis", + "exclusive", + "entertainment", + "original", + "upstream", + "sports", + "mi-x-dw" + ], + "in": "query", + "name": "section", "required": true, "type": "string", - "x-example": "2026-04" + "x-example": "news" } ], "produces": [ @@ -292052,25 +363806,19 @@ ], "responses": { "200": { - "description": "Raw frozen customer statement JSON", + "description": "OK", "schema": { - "type": "string" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { - "description": "Invalid period key or open billing period", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "401": { - "description": "Authentication required", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -292081,56 +363829,62 @@ "ApiKeyAuth": [] } ], - "summary": "Download current user's frozen billing period statement", + "summary": "Get Daily Wire section headlines", "tags": [ - "Billing" + "DailyWire" ] } }, - "/billing/me/portal": { - "post": { - "consumes": [ - "application/json" - ], - "description": "Creates a Stripe customer portal session for the authenticated user's linked Stripe customer so they can manage payment method, invoices, and subscription state.", - "operationId": "billing-me-portal", - "parameters": [ - { - "description": "Portal request", - "in": "body", - "name": "request", - "required": true, - "schema": { - "$ref": "#/definitions/billing.stripePortalRequestDoc" - } - } - ], + "/dailywire/news": { + "get": { + "description": "Returns the current Daily Wire top stories. Each item has its title, URL, summary, publication time, author and image. Takes no parameters; use `dailywire-headlines` to filter by content vertical.", + "operationId": "dailywire-news", "produces": [ "application/json" ], "responses": { "200": { - "description": "Stripe portal session", + "description": "OK", "schema": { - "$ref": "#/definitions/billing.stripeSessionResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "400": { - "description": "Invalid request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "401": { - "description": "Authentication required", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } - }, - "500": { - "description": "Internal server error", + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Daily Wire top stories", + "tags": [ + "DailyWire" + ] + } + }, + "/dailywire/sections": { + "get": { + "description": "Lists the Daily Wire content verticals that `dailywire-headlines` accepts, such as `news`, `opinion`, `analysis`, `entertainment`, `upstream` and `sports`. Each entry has a `slug`, `name` and `url`. Sampled on 2026-09-24, so the list may not be exhaustive.", + "operationId": "dailywire-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -292139,37 +363893,37 @@ "ApiKeyAuth": [] } ], - "summary": "Create Stripe billing portal session", + "summary": "Get Daily Wire content-vertical sections", "tags": [ - "Billing" + "DailyWire" ] } }, - "/billing/me/rejections": { + "/datasets": { "get": { "consumes": [ "application/json" ], - "description": "Returns the authenticated user's own tally of pre-handler billing rejections (HTTP 402 quota / 429 rate-limit), summed over the last two UTC days (today and yesterday — the full retention window). These blocks never reach the request-usage index or the billing-events log, so this is the only way for a caller to see their own throttling.", - "operationId": "billing-me-rejections", + "description": "Lists the read-only scraped datasets available, with no parameters. Each item has its `id`, name, description and the capabilities it supports: `search`, `detail`, `facets`, `nearby`, `history`, `trending` or `changes`. It reads stored data and does not start a live scrape.", + "operationId": "datasets-list", "produces": [ "application/json" ], "responses": { "200": { - "description": "Caller's own rejection tally", + "description": "OK", "schema": { - "$ref": "#/definitions/billing.myRejectionsResponseDoc" + "$ref": "#/definitions/datasets.listResponseDoc" } }, - "401": { - "description": "Authentication required", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -292180,28 +363934,102 @@ "ApiKeyAuth": [] } ], - "summary": "Caller's own blocked-request tally", + "summary": "List stored scraped datasets", "tags": [ - "Billing" + "Datasets" ] } }, - "/billing/me/subscription/change": { - "post": { + "/datasets/airbnb-hosts/facets": { + "get": { "consumes": [ "application/json" ], - "description": "Applies an immediate, prorated upgrade after Stripe payment succeeds, or schedules a downgrade for the next renewal. The unused legacy metered item is removed as part of an immediate upgrade.", - "operationId": "billing-me-subscription-change", + "description": "Returns distribution counts over the Airbnb hosts dataset (dataset id enum value `airbnb-hosts`), honoring the same filters as search. Facet enum: `superhost`, `identity_verified`, `listing_count_band`, `hosting_years_band`, `interest`, `verification`, `location`.", + "operationId": "datasets-airbnb-hosts-facets", "parameters": [ { - "description": "Subscription change request", - "in": "body", - "name": "request", + "description": "Facet enum: superhost, identity_verified, listing_count_band, hosting_years_band, interest, verification, location", + "enum": [ + "superhost", + "identity_verified", + "listing_count_band", + "hosting_years_band", + "interest", + "verification", + "location" + ], + "in": "query", + "name": "facet", "required": true, - "schema": { - "$ref": "#/definitions/billing.stripeSubscriptionChangeRequestDoc" - } + "type": "string", + "x-example": "superhost" + }, + { + "description": "Full-text query over host name and bio, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Free-text match over the profile location, max 128 characters", + "in": "query", + "name": "location", + "type": "string" + }, + { + "description": "Exact interest as returned by the interest facet, max 128 characters", + "in": "query", + "name": "interest", + "type": "string" + }, + { + "description": "Exact verification as returned by the verification facet, max 128 characters", + "in": "query", + "name": "verification", + "type": "string" + }, + { + "description": "true keeps only Superhosts, false keeps only hosts without the badge", + "in": "query", + "name": "is_superhost", + "type": "boolean" + }, + { + "description": "Filter on the home-host flag", + "in": "query", + "name": "is_home_host", + "type": "boolean" + }, + { + "description": "true keeps only hosts whose identity is verified", + "in": "query", + "name": "identity_verified", + "type": "boolean" + }, + { + "description": "Minimum number of listings the host manages, 0 or greater", + "in": "query", + "name": "min_listings", + "type": "integer" + }, + { + "description": "Maximum number of listings the host manages, 0 or greater", + "in": "query", + "name": "max_listings", + "type": "integer" + }, + { + "description": "Minimum total guest reviews received, 0 or greater", + "in": "query", + "name": "min_reviews", + "type": "integer" + }, + { + "description": "Minimum years of hosting, 0 or greater", + "in": "query", + "name": "min_hosting_years", + "type": "integer" } ], "produces": [ @@ -292209,25 +364037,25 @@ ], "responses": { "200": { - "description": "Subscription change result", + "description": "OK", "schema": { - "$ref": "#/definitions/billing.stripeSubscriptionChangeResultResponseDoc" + "$ref": "#/definitions/datasets.airbnbHostsFacetResponseDoc" } }, "400": { - "description": "Invalid plan, stale preview, or idempotency key", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "401": { - "description": "Authentication required", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -292238,43 +364066,59 @@ "ApiKeyAuth": [] } ], - "summary": "Apply a subscription plan change", + "summary": "Facet the Airbnb hosts dataset", "tags": [ - "Billing" + "Datasets" ] } }, - "/billing/me/subscription/change/cancel": { - "post": { + "/datasets/airbnb-hosts/items/{id}": { + "get": { "consumes": [ "application/json" ], - "description": "Cancels the signed-in user's scheduled subscription downgrade and keeps the current plan active. There is no immediate charge or refund, and the call changes nothing when no downgrade is scheduled. Takes no body. The response reports `action`, `current_plan`, `target_plan` and `payment_status`.", - "operationId": "billing-me-subscription-change-cancel", + "description": "Returns one host by numeric Airbnb host id from dataset id enum value `airbnb-hosts`, with the full public profile: name, profile link, location, bio, Superhost, home-host and identity-verification flags, verifications, hosting and membership years, total guest reviews, number of listings and interests. Returns 404 when the host is not in the dataset yet.", + "operationId": "datasets-airbnb-hosts-item", + "parameters": [ + { + "description": "Numeric Airbnb host id, e.g. 65056940", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "65056940" + } + ], "produces": [ "application/json" ], "responses": { "200": { - "description": "Subscription change cancellation result", + "description": "OK", "schema": { - "$ref": "#/definitions/billing.stripeSubscriptionChangeResultResponseDoc" + "$ref": "#/definitions/datasets.airbnbHostResponseDoc" } }, "400": { - "description": "Invalid subscription state", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "401": { - "description": "Authentication required", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -292285,28 +364129,109 @@ "ApiKeyAuth": [] } ], - "summary": "Cancel a scheduled subscription downgrade", + "summary": "Get an Airbnb host from the dataset", "tags": [ - "Billing" + "Datasets" ] } }, - "/billing/me/subscription/preview": { - "post": { + "/datasets/airbnb-hosts/search": { + "get": { "consumes": [ "application/json" ], - "description": "Previews an authenticated user's immediate upgrade or next-renewal downgrade. Stripe calculates the upgrade proration; downgrades keep the current plan and credits active until the current period ends.", - "operationId": "billing-me-subscription-preview", + "description": "Searches Airbnb hosts from the dataset id enum value `airbnb-hosts` — public host profiles with display name, location, bio, Superhost and identity-verification status, hosting tenure, total guest reviews, number of listings and interests. Each record is one host, not one listing. Sort enum: `review_count_desc`, `listing_count_desc`, `hosting_years_desc`, `relevance`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-airbnb-hosts-search", "parameters": [ { - "description": "Subscription change preview request", - "in": "body", - "name": "request", - "required": true, - "schema": { - "$ref": "#/definitions/billing.stripeSubscriptionChangeRequestDoc" - } + "description": "Full-text query over host name and bio, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Free-text match over the profile location, e.g. Portugal; every word must match, max 128 characters", + "in": "query", + "name": "location", + "type": "string" + }, + { + "description": "Exact interest as returned by the interest facet, e.g. Architecture, max 128 characters", + "in": "query", + "name": "interest", + "type": "string" + }, + { + "description": "Exact verification as returned by the verification facet, e.g. Identity, max 128 characters", + "in": "query", + "name": "verification", + "type": "string" + }, + { + "description": "true keeps only Superhosts, false keeps only hosts without the badge", + "in": "query", + "name": "is_superhost", + "type": "boolean" + }, + { + "description": "Filter on the home-host flag", + "in": "query", + "name": "is_home_host", + "type": "boolean" + }, + { + "description": "true keeps only hosts whose identity is verified", + "in": "query", + "name": "identity_verified", + "type": "boolean" + }, + { + "description": "Minimum number of listings the host manages, 0 or greater", + "in": "query", + "name": "min_listings", + "type": "integer" + }, + { + "description": "Maximum number of listings the host manages, 0 or greater", + "in": "query", + "name": "max_listings", + "type": "integer" + }, + { + "description": "Minimum total guest reviews received, 0 or greater", + "in": "query", + "name": "min_reviews", + "type": "integer" + }, + { + "description": "Minimum years of hosting, 0 or greater", + "in": "query", + "name": "min_hosting_years", + "type": "integer" + }, + { + "description": "Sort enum: review_count_desc, listing_count_desc, hosting_years_desc, relevance", + "enum": [ + "review_count_desc", + "listing_count_desc", + "hosting_years_desc", + "relevance" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -292314,25 +364239,25 @@ ], "responses": { "200": { - "description": "Subscription change preview", + "description": "OK", "schema": { - "$ref": "#/definitions/billing.stripeSubscriptionChangePreviewResponseDoc" + "$ref": "#/definitions/datasets.airbnbHostsSearchResponseDoc" } }, "400": { - "description": "Invalid plan or subscription change", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "401": { - "description": "Authentication required", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -292343,58 +364268,103 @@ "ApiKeyAuth": [] } ], - "summary": "Preview a subscription plan change", + "summary": "Search the Airbnb hosts dataset", "tags": [ - "Billing" + "Datasets" ] } }, - "/bing/images": { + "/datasets/airbnb-markets/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns Bing image search results for a query string. Locale defaults to country=us and lang=en-us. Returns 503 when Bing serves a challenge page or unusable results.", - "operationId": "bing-images", + "description": "Returns suppressed distribution counts over the Airbnb markets dataset, honoring the same filters as search. Facet enum: `country`, `market`, `currency`, `superhost`, `guest_favorite`, `rating_band`, `review_band`, `admin1` (top subdivision), `locality` (settlement), `room_type` (`entire_place`/`private_room`/`hotel`/`shared_room`), `property_type` (Airbnb's canonical listing type from the detail page), `amenities` (each amenity with the count of listings offering it). Enrichment-derived facets include a `coverage` object with the number and share of filtered listings carrying that dimension; buckets stay empty below the 20% minimum visibility gate. Coverage above the gate may still be partial. group_by enum: `country`, `market`, `admin1`, `locality`, `room_type`, `property_type`.", + "operationId": "datasets-airbnb-markets-facets", "parameters": [ { - "description": "Search query", + "description": "Facet enum: country, market, currency, superhost, guest_favorite, rating_band, review_band, admin1, locality, room_type, property_type, amenities", + "enum": [ + "country", + "market", + "currency", + "superhost", + "guest_favorite", + "rating_band", + "review_band", + "admin1", + "locality", + "room_type", + "property_type", + "amenities" + ], "in": "query", - "name": "q", + "name": "facet", "required": true, "type": "string", - "x-example": "openai" + "x-example": "country" }, { - "description": "1-based page number; defaults to 1", + "description": "Aggregate cell dimension enum: country, market, admin1, locality, room_type, property_type. Defaults to country", + "enum": [ + "country", + "market", + "admin1", + "locality", + "room_type", + "property_type" + ], "in": "query", - "minimum": 1, - "name": "page", - "type": "integer", - "x-example": 1 + "name": "group_by", + "type": "string" }, { - "description": "Results per page; defaults to 10, clamped to 1..50", + "description": "Exact ISO-3166-1 alpha-2 country filter, e.g. FR", "in": "query", - "maximum": 50, - "minimum": 1, - "name": "count", - "type": "integer", - "x-example": 10 + "name": "country", + "type": "string" }, { - "description": "Two-letter country code; defaults to us", + "description": "Exact metro-market filter, max 128 characters", "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "market", + "type": "string" }, { - "description": "Bing UI language; defaults to en-us", + "description": "Count only Superhost listings", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "name": "superhost", + "type": "boolean" + }, + { + "description": "Count only Guest Favorite listings (an observed lower bound; the badge under-counts)", + "in": "query", + "name": "guest_favorite", + "type": "boolean" + }, + { + "description": "Minimum listing rating, from 0 through 5", + "in": "query", + "name": "min_rating", + "type": "number" + }, + { + "description": "Minimum listing review count, 0 or greater", + "in": "query", + "name": "min_review_count", + "type": "integer" + }, + { + "description": "Freshness filter, an ISO-8601 date (YYYY-MM-DD)", + "in": "query", + "name": "active_since", + "type": "string" + }, + { + "description": "Minimum listings per bucket; raises the small-cell suppression floor", + "in": "query", + "name": "min_listings", + "type": "integer" } ], "produces": [ @@ -292404,35 +364374,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bing.imagesResponseDoc" + "$ref": "#/definitions/datasets.airbnbMarketsFacetResponseDoc" } }, "400": { - "description": "Missing or invalid query parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "No results found", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Bing upstream request failed", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -292443,58 +364401,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Bing image results", + "summary": "Facet the Airbnb markets dataset", "tags": [ - "Bing" + "Datasets" ] } }, - "/bing/news": { + "/datasets/airbnb-markets/items/{country}": { "get": { "consumes": [ "application/json" ], - "description": "Returns Bing news search results for a query string. Locale defaults to country=us and lang=en-us. Returns 503 when Bing serves a challenge page or unusable results.", - "operationId": "bing-news", + "description": "Returns one country's full aggregate Airbnb market profile from dataset id enum value `airbnb-markets` — headline supply, Superhost share, Guest Favorite share (`guest_favorite_pct`, an observed lower bound), `avg_person_capacity` (average guests a listing sleeps over the detail-page-enriched sample), ratings, its top metros, bounding box, per-currency nightly-price percentiles, and a USD-normalized `price_usd` percentile block (converted via an approximate dated FX snapshot) for cross-country comparison. Aggregate-only. Returns 404 for a country below the suppression floor.", + "operationId": "datasets-airbnb-markets-item", "parameters": [ { - "description": "Search query", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "openai" - }, - { - "description": "1-based page number; defaults to 1", - "in": "query", - "minimum": 1, - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Results per page; defaults to 10, clamped to 1..50", - "in": "query", - "maximum": 50, - "minimum": 1, - "name": "count", - "type": "integer", - "x-example": 10 - }, - { - "description": "Two-letter country code; defaults to us", - "in": "query", + "description": "ISO-3166-1 alpha-2 country code, e.g. FR", + "in": "path", "name": "country", + "required": true, "type": "string", - "x-example": "us" - }, - { - "description": "Bing UI language; defaults to en-us", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "x-example": "FR" } ], "produces": [ @@ -292504,35 +364431,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bing.newsResponseDoc" + "$ref": "#/definitions/datasets.airbnbMarketResponseDoc" } }, "400": { - "description": "Missing or invalid query parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "No results found", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Bing upstream request failed", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -292543,58 +364464,79 @@ "ApiKeyAuth": [] } ], - "summary": "Search Bing news results", + "summary": "Get an Airbnb market from the dataset", "tags": [ - "Bing" + "Datasets" ] } }, - "/bing/search": { + "/datasets/airbnb-markets/nearby": { "get": { "consumes": [ "application/json" ], - "description": "Returns Bing web search results for a query string, including organic results, optional context panel data, related queries, people-also-ask questions, news modules, video modules, and page-based pagination. Empty optional blocks are omitted from the JSON response. Locale defaults to country=us and lang=en-us. Returns 503 on a genuine transport failure or challenge page. Bing occasionally serves a well-formed page whose results share no significant term with the query; when every attempt hits this, the response is still returned as 200 with data.low_confidence set to true (and the X-Low-Confidence header) instead of being withheld, so callers get Bing's real answer plus an honest signal to double-check it rather than nothing. Queries that use the site: operator (for example site:gov.hu) are not supported: Bing serves a bot-verification challenge for them, so they are rejected with 400 before any request is made. Use the DuckDuckGo (/api/v1/duckduckgo/search), Brave (/api/v1/brave/search), or Yahoo (/api/v1/yahoo-search/search) search endpoints for domain-restricted searches instead.", - "operationId": "bing-search", + "description": "Returns an aggregate geohash-grid density map of Airbnb listings within a radius of a coordinate, from dataset id enum value `airbnb-markets`. Each cell reports a centroid, listing count and Superhost share; thin cells are suppressed. Aggregate-only.", + "operationId": "datasets-airbnb-markets-nearby", "parameters": [ { - "description": "Search query", + "description": "Center latitude, from -90 through 90", "in": "query", - "name": "q", + "name": "lat", "required": true, - "type": "string", - "x-example": "openai" + "type": "number", + "x-example": 40.7484257 }, { - "description": "1-based page number; defaults to 1", + "description": "Center longitude, from -180 through 180", "in": "query", - "minimum": 1, - "name": "page", - "type": "integer", - "x-example": 1 + "name": "lon", + "required": true, + "type": "number", + "x-example": -73.98567 }, { - "description": "Results per page; defaults to 10, clamped to 1..50", + "description": "Search radius in meters, from 1 through 50000", "in": "query", - "maximum": 50, - "minimum": 1, - "name": "count", + "name": "radius_m", + "required": true, "type": "integer", - "x-example": 10 + "x-example": 5000 }, { - "description": "Two-letter country code; defaults to us", + "description": "Geohash precision, from 1 through 12; defaults to a value derived from the radius", + "in": "query", + "name": "precision", + "type": "integer" + }, + { + "description": "Minimum listings per cell; raises the small-cell suppression floor", + "in": "query", + "name": "min_listings", + "type": "integer" + }, + { + "description": "Exact ISO-3166-1 alpha-2 country filter, e.g. US", "in": "query", "name": "country", - "type": "string", - "x-example": "us" + "type": "string" }, { - "description": "Bing UI language; defaults to en-us", + "description": "Count only Superhost listings", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "name": "superhost", + "type": "boolean" + }, + { + "description": "Minimum listing rating, from 0 through 5", + "in": "query", + "name": "min_rating", + "type": "number" + }, + { + "description": "Freshness filter, an ISO-8601 date (YYYY-MM-DD)", + "in": "query", + "name": "active_since", + "type": "string" } ], "produces": [ @@ -292602,37 +364544,25 @@ ], "responses": { "200": { - "description": "data.low_confidence is true when Bing's results shared no significant term with the query (see the field's description); the data is still exactly what Bing returned", + "description": "OK", "schema": { - "$ref": "#/definitions/bing.searchResponseDoc" + "$ref": "#/definitions/datasets.airbnbMarketsNearbyResponseDoc" } }, "400": { - "description": "Missing or invalid query parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "No results found", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Bing upstream request failed (transport failure, challenge page, or every hedge attempt rejected -- see data.low_confidence for the case where Bing did answer but every attempt looked unrelated to the query)", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -292643,57 +364573,105 @@ "ApiKeyAuth": [] } ], - "summary": "Search Bing web results", + "summary": "Airbnb market density near a coordinate", "tags": [ - "Bing" + "Datasets" ] } }, - "/bing/suggest": { + "/datasets/airbnb-markets/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns Bing autosuggest query completions for a query prefix. Locale defaults to country=us and lang=en-us. Suggestions are fetched from public Bing suggest endpoints and trimmed to the requested count. `rich=true` adds entity cards (name, description, image) where Bing shows them.", - "operationId": "bing-suggest", + "description": "Returns aggregate Airbnb short-term-rental market rollups from the dataset id enum value `airbnb-markets`. Aggregate-only: each row is a market cell, never an individual listing. Thin cells are suppressed. group_by enum: `country`, `market`, `admin1` (top subdivision), `locality` (settlement), `room_type` (`entire_place`/`private_room`/`hotel`/`shared_room`), `property_type` (Airbnb's canonical listing type from the detail page). Enrichment-derived groupings include a `coverage` object with the number and share of filtered listings carrying that dimension; the 20% minimum gate is not a completeness guarantee, and counts still describe classified rows only. Each cell also carries `median_price_usd`, the median nightly price converted to USD via an approximate dated FX snapshot, for cross-country comparison (combine with `group_by=room_type` for median price by room type); `guest_favorite_pct`, the share of listings carrying the Guest Favorite badge (an observed lower bound, like `superhost_pct`); and `avg_person_capacity`, the average guests a listing sleeps over the detail-page-enriched sample. Sort enum: `listings_desc`, `superhost_pct_desc`, `rating_desc`, `key_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-airbnb-markets-search", "parameters": [ { - "description": "Search query prefix", + "description": "Aggregate cell dimension enum: country, market, admin1, locality, room_type, property_type. Defaults to country", + "enum": [ + "country", + "market", + "admin1", + "locality", + "room_type", + "property_type" + ], "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "openai" + "name": "group_by", + "type": "string" }, { - "description": "Suggestions to return; defaults to 10, clamped to 1..12", + "description": "Exact ISO-3166-1 alpha-2 country filter, e.g. FR", "in": "query", - "maximum": 12, - "minimum": 1, - "name": "count", - "type": "integer", - "x-example": 10 + "name": "country", + "type": "string" }, { - "description": "Two-letter country code; defaults to us", + "description": "Exact metro-market filter, e.g. Paris, max 128 characters", "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "market", + "type": "string" }, { - "description": "Bing UI language; defaults to en-us", + "description": "Count only Superhost listings", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "name": "superhost", + "type": "boolean" }, { - "description": "Add entity name, description, and image to suggestions Bing resolves to a known entity; defaults to false", + "description": "Count only Guest Favorite listings (an observed lower bound; the badge under-counts)", "in": "query", - "name": "rich", - "type": "boolean", - "x-example": false + "name": "guest_favorite", + "type": "boolean" + }, + { + "description": "Minimum listing rating, from 0 through 5", + "in": "query", + "name": "min_rating", + "type": "number" + }, + { + "description": "Minimum listing review count, 0 or greater", + "in": "query", + "name": "min_review_count", + "type": "integer" + }, + { + "description": "Freshness filter, an ISO-8601 date (YYYY-MM-DD); only listings last seen on or after it are counted", + "in": "query", + "name": "active_since", + "type": "string" + }, + { + "description": "Minimum listings per cell; raises the small-cell suppression floor (never lowered below the built-in minimum)", + "in": "query", + "name": "min_listings", + "type": "integer" + }, + { + "description": "Sort enum: listings_desc, superhost_pct_desc, rating_desc, key_asc", + "enum": [ + "listings_desc", + "superhost_pct_desc", + "rating_desc", + "key_asc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -292703,29 +364681,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bing.suggestResponseDoc" + "$ref": "#/definitions/datasets.airbnbMarketsSearchResponseDoc" } }, "400": { - "description": "Missing or invalid query parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Bing upstream request failed", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -292736,58 +364708,137 @@ "ApiKeyAuth": [] } ], - "summary": "Suggest Bing search queries", + "summary": "Search the Airbnb markets dataset", "tags": [ - "Bing" + "Datasets" ] } }, - "/bing/videos": { + "/datasets/apple-books/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns Bing video search results for a query string. Locale defaults to country=us and lang=en-us. Returns 503 when Bing serves a challenge page or unusable results.", - "operationId": "bing-videos", + "description": "Returns term counts over the same filters as search. Facet values: `kind`, `genres`, `artist_name`, `publisher`, `series_name`, `narrator`, `provider`, `currency`, `discovery_country`, `discovery_source`, `free`.", + "operationId": "datasets-apple-books-facets", "parameters": [ { - "description": "Search query", + "description": "Facet: kind, genres, artist_name, publisher, series_name, narrator, provider, currency, discovery_country, discovery_source, free", + "enum": [ + "kind", + "genres", + "artist_name", + "publisher", + "series_name", + "narrator", + "provider", + "currency", + "discovery_country", + "discovery_source", + "free" + ], "in": "query", - "name": "q", + "name": "facet", "required": true, "type": "string", - "x-example": "openai" + "x-example": "kind" }, { - "description": "1-based page number; defaults to 1", + "description": "Full-text query over name, artist, series, narrator and description; max 256 characters", "in": "query", - "minimum": 1, - "name": "page", - "type": "integer", - "x-example": 1 + "name": "q", + "type": "string" }, { - "description": "Results per page; defaults to 10, clamped to 1..50", + "description": "Record kind: book, audiobook, author, series, audiobook_series", + "enum": [ + "book", + "audiobook", + "author", + "series", + "audiobook_series" + ], "in": "query", - "maximum": 50, - "minimum": 1, - "name": "count", - "type": "integer", - "x-example": 10 + "name": "kind", + "type": "string" }, { - "description": "Two-letter country code; defaults to us", + "description": "Exact Apple Books genre label, max 128 characters", + "in": "query", + "name": "genre", + "type": "string" + }, + { + "description": "Exact author or artist name, max 128 characters", + "in": "query", + "name": "artist", + "type": "string" + }, + { + "description": "Exact numeric Apple Books artist ID, max 128 characters", + "in": "query", + "name": "artist_id", + "type": "string" + }, + { + "description": "Exact ebook publisher, max 128 characters", + "in": "query", + "name": "publisher", + "type": "string" + }, + { + "description": "Exact series name, max 128 characters", + "in": "query", + "name": "series", + "type": "string" + }, + { + "description": "Exact audiobook narrator, max 128 characters", + "in": "query", + "name": "narrator", + "type": "string" + }, + { + "description": "Exact audiobook provider, max 128 characters", + "in": "query", + "name": "provider", + "type": "string" + }, + { + "description": "Exact currency code, max 128 characters", + "in": "query", + "name": "currency", + "type": "string" + }, + { + "description": "Exact discovery storefront country, max 128 characters", "in": "query", "name": "country", - "type": "string", - "x-example": "us" + "type": "string" }, { - "description": "Bing UI language; defaults to en-us", + "description": "Exact crawl source, max 128 characters", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "name": "discovery_source", + "type": "string" + }, + { + "description": "Filter for free titles", + "in": "query", + "name": "free", + "type": "boolean" + }, + { + "description": "Minimum average rating from 0 through 5", + "in": "query", + "name": "min_rating", + "type": "number" + }, + { + "description": "Minimum rating count, 0 or greater", + "in": "query", + "name": "min_rating_count", + "type": "integer" } ], "produces": [ @@ -292797,35 +364848,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bing.videosResponseDoc" + "$ref": "#/definitions/datasets.appleBooksFacetResponseDoc" } }, "400": { - "description": "Missing or invalid query parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "No results found", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Bing upstream request failed", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -292836,24 +364875,42 @@ "ApiKeyAuth": [] } ], - "summary": "Search Bing video results", + "summary": "Discover Apple Books dataset values", "tags": [ - "Bing" + "Datasets" ] } }, - "/birminghammail/article": { + "/datasets/apple-books/items/{kind}/{id}": { "get": { - "description": "Returns public Birmingham Mail article metadata (including the section) and body paragraphs from a canonical article URL. Photo-gallery URLs are rejected.", - "operationId": "birminghammail-article", + "consumes": [ + "application/json" + ], + "description": "Returns one named, publicly usable ebook, audiobook, author, or series record by its resource kind and numeric ID. Kind values: `book`, `audiobook`, `author`, `series`, `audiobook_series`. Internal crawl errors and unavailable placeholders are not returned.", + "operationId": "datasets-apple-books-item", "parameters": [ { - "description": "Canonical Birmingham Mail article URL", - "in": "query", - "name": "url", + "description": "Resource kind: book, audiobook, author, series, audiobook_series", + "enum": [ + "book", + "audiobook", + "author", + "series", + "audiobook_series" + ], + "in": "path", + "name": "kind", "required": true, "type": "string", - "x-example": "https://www.birminghammail.co.uk/news/midlands-news/birmingham-road-six-cars-towed-34668610" + "x-example": "book" + }, + { + "description": "Numeric Apple Books resource ID", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "1037193578" } ], "produces": [ @@ -292863,7 +364920,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/datasets.appleBooksItemResponseDoc" } }, "400": { @@ -292884,8 +364941,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -292896,37 +364953,142 @@ "ApiKeyAuth": [] } ], - "summary": "Get Birmingham Mail article content", + "summary": "Get an Apple Books record", "tags": [ - "Birmingham Mail" + "Datasets" ] } }, - "/birminghammail/author": { + "/datasets/apple-books/search": { "get": { - "description": "Returns one Birmingham Mail author's public profile: name, job title, bio, email, X/Twitter handle, and one page of their recent articles.", - "operationId": "birminghammail-author", + "consumes": [ + "application/json" + ], + "description": "Searches named public ebook, audiobook, author, and series records stored from Apple's public catalog. `kind` values: `book`, `audiobook`, `author`, `series`, `audiobook_series`. Unavailable records are excluded. Sort: `relevance` (requires q), `rating_count_desc`, `rating_desc`, `release_date_desc`, `name_asc`, `crawled_at_desc`. Billing: 1 credit per returned record, minimum 2.", + "operationId": "datasets-apple-books-search", "parameters": [ { - "description": "Author slug, e.g. stephanie-balloo", + "description": "Full-text query over name, artist, series, narrator and description; max 256 characters", "in": "query", - "name": "slug", - "type": "string", - "x-example": "stephanie-balloo" + "name": "q", + "type": "string" }, { - "description": "Canonical birminghammail.co.uk/authors// URL; alternative to slug", + "description": "Record kind: book, audiobook, author, series, audiobook_series", + "enum": [ + "book", + "audiobook", + "author", + "series", + "audiobook_series" + ], "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.birminghammail.co.uk/authors/stephanie-balloo/" + "name": "kind", + "type": "string" }, { - "default": 1, - "description": "1-based page number of the author's article list (1 to 100); overrides any pageNumber in url", + "description": "Exact Apple Books genre label; use facet=genres to discover values, max 128 characters", + "in": "query", + "name": "genre", + "type": "string" + }, + { + "description": "Exact author or artist name, max 128 characters", + "in": "query", + "name": "artist", + "type": "string" + }, + { + "description": "Exact numeric Apple Books artist ID, max 128 characters", + "in": "query", + "name": "artist_id", + "type": "string" + }, + { + "description": "Exact ebook publisher, max 128 characters", + "in": "query", + "name": "publisher", + "type": "string" + }, + { + "description": "Exact series name, max 128 characters", + "in": "query", + "name": "series", + "type": "string" + }, + { + "description": "Exact audiobook narrator, max 128 characters", + "in": "query", + "name": "narrator", + "type": "string" + }, + { + "description": "Exact audiobook provider, max 128 characters", + "in": "query", + "name": "provider", + "type": "string" + }, + { + "description": "Exact currency code, max 128 characters", + "in": "query", + "name": "currency", + "type": "string" + }, + { + "description": "Exact discovery storefront country, max 128 characters", + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Exact crawl source, max 128 characters", + "in": "query", + "name": "discovery_source", + "type": "string" + }, + { + "description": "Filter for free titles", + "in": "query", + "name": "free", + "type": "boolean" + }, + { + "description": "Minimum average rating from 0 through 5", + "in": "query", + "name": "min_rating", + "type": "number" + }, + { + "description": "Minimum rating count, 0 or greater", + "in": "query", + "name": "min_rating_count", + "type": "integer" + }, + { + "description": "Sort: relevance, rating_count_desc, rating_desc, release_date_desc, name_asc, crawled_at_desc", + "enum": [ + "relevance", + "rating_count_desc", + "rating_desc", + "release_date_desc", + "name_asc", + "crawled_at_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "1-based page, default 1; page * page_size must be <= 10000", "in": "query", "name": "page", "type": "integer" + }, + { + "description": "Page size, default 20, max 100", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -292936,7 +365098,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.reachAuthorResponseDoc" + "$ref": "#/definitions/datasets.appleBooksSearchResponseDoc" } }, "400": { @@ -292945,20 +365107,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -292969,49 +365125,113 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Birmingham Mail author profile", + "summary": "Search Apple Books records", "tags": [ - "Birmingham Mail" + "Datasets" ] } }, - "/birminghammail/headlines": { + "/datasets/apple-maps-places/facets": { "get": { - "description": "Returns fresh headlines from one public Birmingham Mail section. Photo galleries are omitted because they have no readable article body.", - "operationId": "birminghammail-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns terms aggregation counts for the stored Apple Maps place directory. Facet enum: `category`, `country_code`, `state`, `city`, `price_symbol`, `catalog_country`. Accepts the same filter parameters as search to scope the aggregation. Use `facet=category` to discover the exact category names the `category` filter accepts.", + "operationId": "datasets-apple-maps-places-facets", "parameters": [ { - "description": "Birmingham Mail section slug", + "description": "Facet enum: category, country_code, state, city, price_symbol, catalog_country", "enum": [ - "news", - "news/midlands-news", - "news/uk-news", - "news/world-news", - "news/showbiz-tv", - "news/cost-of-living", - "news/money", - "news/health", - "black-country", - "motoring", - "motoring/motoring-news", - "sport", - "sport/football", - "sport/football/football-news", - "sport/football/transfer-news", - "whats-on", - "whats-on/whats-on-news", - "whats-on/family-kids-news", - "whats-on/food-drink-news", - "whats-on/music-nightlife-news", - "whats-on/shopping", - "travel", - "special-features" + "category", + "country_code", + "state", + "city", + "price_symbol", + "catalog_country" ], "in": "query", - "name": "section", + "name": "facet", "required": true, "type": "string", - "x-example": "news" + "x-example": "category" + }, + { + "description": "Full-text search over place name, category, city and address", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Exact Apple category name", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Exact city filter", + "in": "query", + "name": "city", + "type": "string" + }, + { + "description": "Exact state/region filter", + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "ISO 3166-1 alpha-2 country filter", + "in": "query", + "name": "country_code", + "type": "string" + }, + { + "description": "Exact postal code filter", + "in": "query", + "name": "postal_code", + "type": "string" + }, + { + "description": "Minimum rating, from 0 through 5", + "in": "query", + "name": "min_rating", + "type": "number" + }, + { + "description": "Minimum number of ratings behind the rating", + "in": "query", + "name": "min_rating_count", + "type": "integer" + }, + { + "description": "Website presence filter", + "in": "query", + "name": "has_website", + "type": "boolean" + }, + { + "description": "Phone presence filter", + "in": "query", + "name": "has_phone", + "type": "boolean" + }, + { + "description": "Latitude for radius filtering, requires lon", + "in": "query", + "name": "lat", + "type": "number" + }, + { + "description": "Longitude for radius filtering, requires lat", + "in": "query", + "name": "lon", + "type": "number" + }, + { + "description": "Radius in meters, 1 through 50000; requires lat and lon", + "in": "query", + "name": "radius_m", + "type": "integer" } ], "produces": [ @@ -293021,7 +365241,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/datasets.applePlacesFacetResponseDoc" } }, "400": { @@ -293036,8 +365256,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -293048,16 +365268,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Birmingham Mail section headlines", + "summary": "Facet stored Apple Maps places", "tags": [ - "Birmingham Mail" + "Datasets" ] } }, - "/birminghammail/news": { + "/datasets/apple-maps-places/items/{place_id}": { "get": { - "description": "Returns fresh Birmingham Mail top stories from the public home RSS feed. Photo galleries are omitted because they have no readable article body.", - "operationId": "birminghammail-news", + "consumes": [ + "application/json" + ], + "description": "Returns one stored Apple Maps place by Apple place id from dataset id `apple-maps-places`. Accepts either the numeric place id (the `id` field) or the external place id that appears in maps.apple.com URLs (the `place_id` field, starting with `I`). A `rating` of `null` means Apple shows no rating for the place. `catalog_country` is the Apple storefront the place was found under, not its country; `country_code` is the place's own country. `first_seen_at` is when the directory first observed the place and `last_seen_at` the latest observation. Does not trigger live scraping; for a live Apple Maps lookup use the apple-maps-place endpoint.", + "operationId": "datasets-apple-maps-places-item", + "parameters": [ + { + "description": "Apple place id: the numeric id or the external id starting with I", + "in": "path", + "name": "place_id", + "required": true, + "type": "string", + "x-example": "6435622567484707146" + } + ], "produces": [ "application/json" ], @@ -293065,7 +365298,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/datasets.applePlaceResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -293074,8 +365319,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -293086,16 +365331,75 @@ "ApiKeyAuth": [] } ], - "summary": "Get Birmingham Mail top stories", + "summary": "Get a stored Apple Maps place", "tags": [ - "Birmingham Mail" + "Datasets" ] } }, - "/birminghammail/sections": { + "/datasets/apple-maps-places/nearby": { "get": { - "description": "Lists the 23 Birmingham Mail sections that `birminghammail-headlines` accepts, such as `news/midlands-news`, `black-country`, `sport/football/transfer-news` and `whats-on`. Each has a `slug`, a display `name` and the feed `url`. Only sections with a recently updated feed are included (last verified 2026-09-25), and each returns up to about 25 entries.", - "operationId": "birminghammail-sections", + "consumes": [ + "application/json" + ], + "description": "Returns stored Apple Maps places within a radius of a point, nearest first, from dataset id `apple-maps-places`. lat, lon and radius_m are required. Unlike the live apple-maps-search endpoint (which returns at most 25 places per call), this pages through the stored directory with `distance_m` on every item. Coverage is observed, not complete. Does not trigger live scraping. Billing: this endpoint costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-apple-maps-places-nearby", + "parameters": [ + { + "description": "Center latitude, from -90 through 90", + "in": "query", + "name": "lat", + "required": true, + "type": "number", + "x-example": 37.7749 + }, + { + "description": "Center longitude, from -180 through 180", + "in": "query", + "name": "lon", + "required": true, + "type": "number", + "x-example": -122.4194 + }, + { + "description": "Search radius in meters, 1 through 50000", + "in": "query", + "name": "radius_m", + "required": true, + "type": "integer", + "x-example": 5000 + }, + { + "description": "Exact Apple category name", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Minimum rating, from 0 through 5", + "in": "query", + "name": "min_rating", + "type": "number" + }, + { + "description": "Minimum number of ratings behind the rating", + "in": "query", + "name": "min_rating_count", + "type": "integer" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100", + "in": "query", + "name": "page_size", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -293103,7 +365407,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/datasets.applePlacesSearchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -293112,24 +365434,122 @@ "ApiKeyAuth": [] } ], - "summary": "Get Birmingham Mail sections", + "summary": "Find nearby stored Apple Maps places", "tags": [ - "Birmingham Mail" + "Datasets" ] } }, - "/bleacherreport/article": { + "/datasets/apple-maps-places/search": { "get": { - "description": "Returns public Bleacher Report article metadata and body paragraphs from a canonical article URL. Bleacher Report serves full articles to anonymous readers, so no article is paywalled.", - "operationId": "bleacherreport-article", + "consumes": [ + "application/json" + ], + "description": "Searches the stored Apple Maps place directory (dataset id `apple-maps-places`), built by tiling populated areas and running category searches over each tile. Each place has its Apple place id, name, category path, address, coordinates, phone, website, opening hours, rating and price level where Apple shows them. Coverage is observed, not complete: Apple answers each search with at most 25 places, so very dense areas can hold places the directory has not reached, and a place missing from the results is not evidence that it does not exist or has closed. A `rating` of `null` means Apple shows no rating for the place (never a zero-star score); ratings and rating counts come from third-party review partners that Apple shows (for example Yelp and Foursquare), so they are not comparable across places and a few places carry a rating with no count. Supports full-text `q`, `category`/`city`/`state`/`country_code`/`postal_code` filters, `min_rating`, `min_rating_count`, `has_website`, `has_phone`, `lat`/`lon`/`radius_m` radius filtering, and `sort` (relevance, rating_desc, review_count_desc, updated_at_desc, distance_asc). Does not trigger live scraping. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-apple-maps-places-search", "parameters": [ { - "description": "Canonical Bleacher Report article URL", + "description": "Full-text search over place name, category, city and address; every term must match. Max 256 characters", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://bleacherreport.com/articles/25502441-vladimir-guerrero-jr-drops-viral-quote-2026-slump-after-signing-500m-blue-jays-contract" + "name": "q", + "type": "string" + }, + { + "description": "Exact Apple category name, max 128 characters, e.g. Coffee Shop; use facet=category to discover values", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Exact city filter, max 128 characters", + "in": "query", + "name": "city", + "type": "string" + }, + { + "description": "Exact state/region filter, max 128 characters", + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "ISO 3166-1 alpha-2 country filter, e.g. US, GB, JP", + "in": "query", + "name": "country_code", + "type": "string" + }, + { + "description": "Exact postal code filter, max 128 characters", + "in": "query", + "name": "postal_code", + "type": "string" + }, + { + "description": "Minimum rating, from 0 through 5; any value above 0 excludes unrated places", + "in": "query", + "name": "min_rating", + "type": "number" + }, + { + "description": "Minimum number of ratings behind the rating, 0 or greater", + "in": "query", + "name": "min_rating_count", + "type": "integer" + }, + { + "description": "true keeps only places with a website; false keeps only places without one", + "in": "query", + "name": "has_website", + "type": "boolean" + }, + { + "description": "true keeps only places with a phone number; false keeps only places without one", + "in": "query", + "name": "has_phone", + "type": "boolean" + }, + { + "description": "Latitude for radius filtering or distance sort, requires lon", + "in": "query", + "name": "lat", + "type": "number" + }, + { + "description": "Longitude for radius filtering or distance sort, requires lat", + "in": "query", + "name": "lon", + "type": "number" + }, + { + "description": "Radius in meters, 1 through 50000; requires lat and lon", + "in": "query", + "name": "radius_m", + "type": "integer" + }, + { + "description": "Sort enum: relevance, rating_desc, review_count_desc, updated_at_desc, distance_asc. Defaults to relevance with q, otherwise updated_at_desc", + "enum": [ + "relevance", + "rating_desc", + "review_count_desc", + "updated_at_desc", + "distance_asc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -293139,7 +365559,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/datasets.applePlacesSearchResponseDoc" } }, "400": { @@ -293148,14 +365568,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -293166,30 +365586,76 @@ "ApiKeyAuth": [] } ], - "summary": "Get Bleacher Report article content", + "summary": "Search stored Apple Maps places", "tags": [ - "Bleacher Report" + "Datasets" ] } }, - "/bleacherreport/author": { + "/datasets/apple-podcasts-shows/facets": { "get": { - "description": "Returns a Bleacher Report writer's profile, identified by `slug` (such as `scott-polacek`) or a canonical `bleacherreport.com/writers/` `url`; exactly one is required. The response has name, role, biography, photo and about 20 latest stories with title, URL and thumbnail. Publication times are not shown on the profile, so `published_at` is omitted; an unknown slug returns 404.", - "operationId": "bleacherreport-author", + "consumes": [ + "application/json" + ], + "description": "Returns value counts for one field of the Apple Podcasts shows dataset, chosen by the required `facet`: `genre`, `genre_id`, `country`, `content_advisory_rating` or `run_id`. The counts honour the search filters (`q`, `genre`, `country`, `min_track_count` and others) and cover the top 50 values.", + "operationId": "datasets-apple-podcasts-shows-facets", "parameters": [ { - "description": "Writer slug, e.g. scott-polacek", + "description": "Facet enum: genre, genre_id, country, content_advisory_rating, run_id", + "enum": [ + "genre", + "genre_id", + "country", + "content_advisory_rating", + "run_id" + ], "in": "query", - "name": "slug", + "name": "facet", + "required": true, "type": "string", - "x-example": "scott-polacek" + "x-example": "genre" }, { - "description": "Canonical bleacherreport.com/writers/ URL; alternative to slug", + "description": "Full-text query over show title and artist name, max 256 characters", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://bleacherreport.com/writers/scott-polacek" + "name": "q", + "type": "string" + }, + { + "description": "Exact primary-genre filter, max 128 characters", + "in": "query", + "name": "genre", + "type": "string" + }, + { + "description": "Exact Apple Podcasts genre id filter, max 128 characters", + "in": "query", + "name": "genre_id", + "type": "string" + }, + { + "description": "Exact storefront country filter, max 128 characters", + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Exact explicitness filter, max 128 characters", + "in": "query", + "name": "explicitness", + "type": "string" + }, + { + "description": "Exact crawl run-id filter, max 128 characters", + "in": "query", + "name": "run_id", + "type": "string" + }, + { + "description": "Minimum episode count (track_count), 0 or greater", + "in": "query", + "name": "min_track_count", + "type": "integer" } ], "produces": [ @@ -293199,7 +365665,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.bleacherreportAuthorResponseDoc" + "$ref": "#/definitions/datasets.applePodcastsShowsFacetResponseDoc" } }, "400": { @@ -293208,14 +365674,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -293226,56 +365692,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Bleacher Report writer profile", + "summary": "Facet Apple Podcasts shows dataset", "tags": [ - "Bleacher Report" + "Datasets" ] } }, - "/bleacherreport/headlines": { + "/datasets/apple-podcasts-shows/items/{id}": { "get": { - "description": "Returns the stories on one Bleacher Report league or sub-hub page, newest first. `section` is required and takes a slug such as `nfl`, `nba-draft`, `formula-1` or `recruiting`. Each has a headline, article URL and publication time, plus thumbnail and blurb when present. Busy leagues return 100 or more stories, quiet ones only a few.", - "operationId": "bleacherreport-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns one Apple Podcasts show from the dataset by its numeric show `id`. The record has show and artist names, genres, country, episode count (`track_count`), release date, feed URL, artwork and Apple URL. An id not in the dataset returns 404.", + "operationId": "datasets-apple-podcasts-shows-item", "parameters": [ { - "description": "Bleacher Report section slug", - "enum": [ - "nba", - "nfl", - "mlb", - "nhl", - "wnba", - "college-football", - "college-basketball", - "womens-college-basketball", - "world-football", - "tennis", - "golf", - "nascar", - "formula-1", - "mma", - "boxing", - "wwe", - "all-elite-wrestling", - "olympics", - "nba-rumors", - "nba-draft", - "nfl-rumors", - "nfl-draft", - "fantasy-football", - "mlb-rumors", - "mlb-prospects", - "nhl-rumors", - "nhl-draft", - "recruiting", - "college-basketball-recruiting", - "bracketology" - ], - "in": "query", - "name": "section", + "description": "Apple Podcasts numeric show id (e.g. 173001861)", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "nba" + "x-example": "173001861" } ], "produces": [ @@ -293285,7 +365722,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/datasets.applePodcastsShowResponseDoc" } }, "400": { @@ -293294,8 +365731,20 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -293306,16 +365755,88 @@ "ApiKeyAuth": [] } ], - "summary": "Get Bleacher Report section headlines", + "summary": "Get an Apple Podcasts show from dataset", "tags": [ - "Bleacher Report" + "Datasets" ] } }, - "/bleacherreport/news": { + "/datasets/apple-podcasts-shows/search": { "get": { - "description": "Returns around 180 Bleacher Report sports stories from roughly the last day or two, newest first, with no input needed. Each has a title, canonical article URL and publication time. Live blogs are excluded because they are not article pages.", - "operationId": "bleacherreport-news", + "consumes": [ + "application/json" + ], + "description": "Searches the crawled public Apple Podcasts show catalog stored in a search index. One row per show. Discovered from a country x genre x collection chart grid and a search-term sweep — not a full catalog of every Apple Podcasts show. Sort enum: `relevance`, `popularity`, `track_count_desc`, `release_desc`, `title_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-apple-podcasts-shows-search", + "parameters": [ + { + "description": "Full-text query over show title and artist name, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Exact primary-genre filter (e.g. Comedy, True Crime), max 128 characters", + "in": "query", + "name": "genre", + "type": "string" + }, + { + "description": "Exact Apple Podcasts genre id filter (e.g. 1303 for Comedy), max 128 characters", + "in": "query", + "name": "genre_id", + "type": "string" + }, + { + "description": "Exact storefront country filter (the crawl's discovery storefront, e.g. us, gb), max 128 characters", + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Exact explicitness filter as reported by Apple (e.g. explicit, cleaned), max 128 characters", + "in": "query", + "name": "explicitness", + "type": "string" + }, + { + "description": "Exact crawl run-id filter, max 128 characters", + "in": "query", + "name": "run_id", + "type": "string" + }, + { + "description": "Minimum episode count (track_count), 0 or greater", + "in": "query", + "name": "min_track_count", + "type": "integer" + }, + { + "description": "Sort enum: relevance, popularity, track_count_desc, release_desc, title_asc", + "enum": [ + "relevance", + "popularity", + "track_count_desc", + "release_desc", + "title_asc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -293323,7 +365844,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/datasets.applePodcastsShowsSearchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -293332,8 +365859,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -293344,16 +365871,138 @@ "ApiKeyAuth": [] } ], - "summary": "Get Bleacher Report top stories", + "summary": "Search Apple Podcasts shows dataset", "tags": [ - "Bleacher Report" + "Datasets" ] } }, - "/bleacherreport/sections": { + "/datasets/apps-charts/facets": { "get": { - "description": "Lists the 30 Bleacher Report sections that `bleacherreport-headlines` accepts: 18 league and sport hubs such as `nfl`, `tennis` and `olympics`, plus 12 sub-hubs such as `nba-draft` and `bracketology`. Each has a `slug`, display `name` and landing-page `url`. Team pages, scores, standings and MotoGP are not included.", - "operationId": "bleacherreport-sections", + "consumes": [ + "application/json" + ], + "description": "Returns up to 50 chart-rank facet buckets ordered by count, using the same filters as `datasets_apps_charts_search`. Page and page_size do not change the aggregation. A snapshot_date facet without date spans all history; other facets use the search date scope, including the latest-snapshot default when applicable and full history for a single app or date_desc sort. Facet enum: `store`, `collection`, `chart_type`, `platform`, `category`, `country`, `app_id`, `snapshot_date`, `free`. Store enum: `ios`, `android`. Chart type enum: `top_free`, `top_paid`, `top_grossing`, `new`. Platform enum: `phone`, `pad`, `mac`.", + "operationId": "datasets-apps-charts-facets", + "parameters": [ + { + "description": "Facet field", + "enum": [ + "store", + "collection", + "chart_type", + "platform", + "category", + "country", + "app_id", + "snapshot_date", + "free" + ], + "in": "query", + "name": "facet", + "required": true, + "type": "string", + "x-example": "collection" + }, + { + "description": "Full-text query", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Store enum: ios, android", + "enum": [ + "ios", + "android" + ], + "in": "query", + "name": "store", + "type": "string" + }, + { + "description": "Raw store collection id filter (e.g. topgrossingapplications, GROSSING), max 128 characters", + "in": "query", + "name": "collection", + "type": "string" + }, + { + "description": "Chart type enum: top_free, top_paid, top_grossing, new", + "enum": [ + "top_free", + "top_paid", + "top_grossing", + "new" + ], + "in": "query", + "name": "chart_type", + "type": "string" + }, + { + "description": "Apple device platform enum (iOS charts only): phone, pad, mac", + "enum": [ + "phone", + "pad", + "mac" + ], + "in": "query", + "name": "platform", + "type": "string" + }, + { + "description": "Exact store category", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Storefront country", + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Exact store app id", + "in": "query", + "name": "app_id", + "type": "string" + }, + { + "description": "Chart snapshot date, yyyy-MM-dd", + "in": "query", + "name": "date", + "type": "string" + }, + { + "description": "Filter by free/paid status", + "in": "query", + "name": "free", + "type": "boolean" + }, + { + "description": "Validated search sort; bucket order stays count-desc, and time-series date_desc keeps its search history scope", + "enum": [ + "rank", + "rank_desc", + "date_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Result page, 1-based", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, default 20 and max 100", + "in": "query", + "name": "page_size", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -293361,7 +366010,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/datasets.datasetFacetResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -293370,8 +366025,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -293382,24 +366037,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get Bleacher Report sections", + "summary": "Discover values in the app-charts dataset", "tags": [ - "Bleacher Report" + "Datasets" ] } }, - "/bloomberg/article": { + "/datasets/apps-charts/items/{chart_uid}": { "get": { - "description": "Returns a public Bloomberg article by `url`: title, description, publication and update times, section, categories, authors, image, `is_premium` and the body `paragraphs` in order. Subscriber-only articles that Bloomberg shows as a truncated preview return `403`, an article with no body returns `503`, and non-article or non-Bloomberg URLs return `400`.", - "operationId": "bloomberg-article", + "consumes": [ + "application/json" + ], + "description": "Retrieves one daily App Store or Google Play chart row by `chart_uid` from `datasets_apps_charts_search`.", + "operationId": "datasets-apps-charts-item", "parameters": [ { - "description": "Canonical Bloomberg article URL", - "in": "query", - "name": "url", + "description": "Exact chart_uid from a search result", + "in": "path", + "name": "chart_uid", "required": true, - "type": "string", - "x-example": "https://www.bloomberg.com/news/articles/2026-09-20/example-slug" + "type": "string" } ], "produces": [ @@ -293409,7 +366066,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bloomberg.articleResponseDoc" + "$ref": "#/definitions/datasets.appChartDatasetItemResponseDoc" } }, "400": { @@ -293418,12 +366075,6 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "404": { "description": "Not Found", "schema": { @@ -293436,8 +366087,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -293448,24 +366099,106 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Bloomberg article's content", + "summary": "Get one stored app-chart ranking", "tags": [ - "Bloomberg" + "Datasets" ] } }, - "/bloomberg/author": { + "/datasets/apps-charts/search": { "get": { - "description": "Returns a Bloomberg author's profile from `url`, a canonical `https://www.bloomberg.com/authors//` address, where `` is an opaque token Bloomberg assigns and cannot be guessed. The response has `name`, `title`, `bio` and recent content with title, URL, `type`, `section`, full `byline` and publication and update times.", - "operationId": "bloomberg-author", + "consumes": [ + "application/json" + ], + "description": "Searches daily top-chart snapshots from the iOS App Store and Google Play (one document per chart × snapshot × rank). With no `date` the latest snapshot is returned (today's chart); pair `app_id` with `sort=date_desc` for an app's rank over time. Store enum: `ios`, `android`. Chart type enum: `top_free`, `top_paid`, `top_grossing`, `new`. Platform enum (Apple device platforms, ios charts only): `phone`, `pad`, `mac`. Sort enum: `rank`, `rank_desc`, `date_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-apps-charts-search", "parameters": [ { - "description": "Canonical Bloomberg author URL", + "description": "Full-text query over chart-entry title and developer, max 256 characters", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.bloomberg.com/authors/AXSztklFffk/bernard-goyder" + "name": "q", + "type": "string" + }, + { + "description": "Store enum: ios, android", + "enum": [ + "ios", + "android" + ], + "in": "query", + "name": "store", + "type": "string" + }, + { + "description": "Chart enum: top_free, top_paid, top_grossing, new", + "enum": [ + "top_free", + "top_paid", + "top_grossing", + "new" + ], + "in": "query", + "name": "chart_type", + "type": "string" + }, + { + "description": "Apple device-platform filter, iOS charts only; see platform enum above", + "in": "query", + "name": "platform", + "type": "string" + }, + { + "description": "Raw store collection id filter (e.g. topgrossingapplications, GROSSING), max 128 characters", + "in": "query", + "name": "collection", + "type": "string" + }, + { + "description": "Store category/genre filter, max 128 characters; empty for the overall charts", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Exact storefront country filter, max 128 characters", + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Exact app filter — iOS numeric track id or Android package; pair with sort=date_desc for rank history", + "in": "query", + "name": "app_id", + "type": "string" + }, + { + "description": "Snapshot date filter yyyy-MM-dd; defaults to the latest snapshot", + "in": "query", + "name": "date", + "type": "string" + }, + { + "description": "Sort enum: rank, rank_desc, date_desc", + "enum": [ + "rank", + "rank_desc", + "date_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -293475,7 +366208,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bloomberg.authorResponseDoc" + "$ref": "#/definitions/datasets.chartsSearchResponseDoc" } }, "400": { @@ -293484,20 +366217,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -293508,16 +366235,93 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Bloomberg author's profile", + "summary": "Search the app-charts dataset", "tags": [ - "Bloomberg" + "Datasets" ] } }, - "/bloomberg/categories": { + "/datasets/apps-reviews/facets": { "get": { - "description": "Lists Bloomberg's public editorial navigation categories discovered from its embedded navigation state. Each returned section slug is accepted by /bloomberg/headlines; product, account, newsletter, and sponsored-content links are excluded.", - "operationId": "bloomberg-categories", + "consumes": [ + "application/json" + ], + "description": "Returns up to 50 app-review facet buckets ordered by count, using the same filters as `datasets_apps_reviews_search`. Page and page_size do not change the aggregation. Facet enum: `store`, `app_id`, `country`, `score`.", + "operationId": "datasets-apps-reviews-facets", + "parameters": [ + { + "description": "Facet field", + "enum": [ + "store", + "app_id", + "country", + "score" + ], + "in": "query", + "name": "facet", + "required": true, + "type": "string", + "x-example": "store" + }, + { + "description": "Full-text review query", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Store filter: ios or android", + "enum": [ + "ios", + "android" + ], + "in": "query", + "name": "store", + "type": "string" + }, + { + "description": "Exact store app id", + "in": "query", + "name": "app_id", + "type": "string" + }, + { + "description": "Storefront country", + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Minimum star rating, 1 through 5", + "in": "query", + "name": "min_score", + "type": "integer" + }, + { + "description": "Validated search sort; bucket order stays count-desc, and time-series date_desc keeps its search history scope", + "enum": [ + "recent", + "score_desc", + "score_asc", + "helpful_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Result page, 1-based", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, default 20 and max 100", + "in": "query", + "name": "page_size", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -293525,7 +366329,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bloomberg.categoriesResponseDoc" + "$ref": "#/definitions/datasets.datasetFacetResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -293534,8 +366344,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -293546,24 +366356,26 @@ "ApiKeyAuth": [] } ], - "summary": "List Bloomberg editorial categories", + "summary": "Discover values in the app-reviews dataset", "tags": [ - "Bloomberg" + "Datasets" ] } }, - "/bloomberg/headlines": { + "/datasets/apps-reviews/items/{review_uid}": { "get": { - "description": "Returns current Bloomberg story cards for one editorial section. `section` is required and takes a slug from the Bloomberg categories list, such as `markets`, `economics` or `politics`. Each item has a title and canonical URL, and may also carry a description, image and publication time.", - "operationId": "bloomberg-headlines", + "consumes": [ + "application/json" + ], + "description": "Retrieves one public App Store or Google Play review by `review_uid` from `datasets_apps_reviews_search`.", + "operationId": "datasets-apps-reviews-item", "parameters": [ { - "description": "Section slug from /bloomberg/categories", - "in": "query", - "name": "section", + "description": "Exact review_uid from a search result", + "in": "path", + "name": "review_uid", "required": true, - "type": "string", - "x-example": "markets" + "type": "string" } ], "produces": [ @@ -293573,7 +366385,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bloomberg.headlinesResponseDoc" + "$ref": "#/definitions/datasets.appReviewDatasetItemResponseDoc" } }, "400": { @@ -293582,14 +366394,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -293600,16 +366418,79 @@ "ApiKeyAuth": [] } ], - "summary": "Get the latest stories in a Bloomberg section", + "summary": "Get one stored app review", "tags": [ - "Bloomberg" + "Datasets" ] } }, - "/bloomberg/news": { + "/datasets/apps-reviews/search": { "get": { - "description": "Returns Bloomberg's current news feed: the newest stories across all sections, each with its title, canonical URL, and publication time.", - "operationId": "bloomberg-news", + "consumes": [ + "application/json" + ], + "description": "Searches user reviews from the iOS App Store and Google Play (one document per review). Store enum: `ios`, `android`. Sort enum: `recent`, `score_desc`, `score_asc`, `helpful_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-apps-reviews-search", + "parameters": [ + { + "description": "Full-text query over review text, title and author, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Store enum: ios, android", + "enum": [ + "ios", + "android" + ], + "in": "query", + "name": "store", + "type": "string" + }, + { + "description": "Exact app filter — iOS numeric track id or Android package, max 128 characters", + "in": "query", + "name": "app_id", + "type": "string" + }, + { + "description": "Exact storefront country filter, max 128 characters", + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Minimum star rating, 1 through 5", + "in": "query", + "name": "min_score", + "type": "integer" + }, + { + "description": "Sort enum: recent, score_desc, score_asc, helpful_desc", + "enum": [ + "recent", + "score_desc", + "score_asc", + "helpful_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -293617,7 +366498,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bloomberg.newsResponseDoc" + "$ref": "#/definitions/datasets.reviewsSearchResponseDoc" } }, "400": { @@ -293632,8 +366513,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -293644,16 +366525,139 @@ "ApiKeyAuth": [] } ], - "summary": "Get the latest Bloomberg stories", + "summary": "Search the app-reviews dataset", "tags": [ - "Bloomberg" + "Datasets" ] } }, - "/bloomberg/news-sitemaps": { + "/datasets/apps/facets": { "get": { - "description": "Lists Bloomberg's monthly news sitemaps, each with its `url` and `last_modified` date. Use them to find historical news beyond the rolling latest feed at `/bloomberg/news`. Takes no parameters.", - "operationId": "bloomberg-news-sitemaps", + "consumes": [ + "application/json" + ], + "description": "Returns up to 50 allowlisted app-facet buckets ordered by count, using the same filters as `datasets_apps_search`. Page and page_size do not change the aggregation. Facet enum: `store`, `platforms`, `category`, `country`, `developer`, `free`. Store enum: `ios`, `android`, `both`. Platform enum: `phone`, `pad`, `tablet`, `mac`, `tv`, `chromebook`, `watch`, `vision`, `xr`, `car`, `windows`.", + "operationId": "datasets-apps-facets", + "parameters": [ + { + "description": "Facet field", + "enum": [ + "store", + "platforms", + "category", + "country", + "developer", + "free" + ], + "in": "query", + "name": "facet", + "required": true, + "type": "string", + "x-example": "category" + }, + { + "description": "Full-text query over app title, developer and category, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Store filter: ios, android, both", + "enum": [ + "ios", + "android", + "both" + ], + "in": "query", + "name": "store", + "type": "string" + }, + { + "collectionFormat": "csv", + "description": "Repeatable device-platform filter", + "in": "query", + "items": { + "enum": [ + "phone", + "pad", + "tablet", + "mac", + "tv", + "chromebook", + "watch", + "vision", + "xr", + "car", + "windows" + ], + "type": "string" + }, + "name": "platforms", + "type": "array" + }, + { + "description": "Exact app-store category filter, max 128 characters", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Exact storefront country filter, max 128 characters", + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Exact developer/publisher name filter, max 128 characters", + "in": "query", + "name": "developer", + "type": "string" + }, + { + "description": "Filter by free/paid status", + "in": "query", + "name": "free", + "type": "boolean" + }, + { + "description": "Minimum store rating, 0 through 5", + "in": "query", + "name": "min_rating", + "type": "number" + }, + { + "description": "Minimum ratings/review count, 0 or greater", + "in": "query", + "name": "min_reviews", + "type": "integer" + }, + { + "description": "Validated search sort; bucket order stays count-desc, and time-series date_desc keeps its search history scope", + "enum": [ + "relevance", + "rating_desc", + "reviews_desc", + "installs_desc", + "updated_at_desc", + "popularity_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Result page, 1-based", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, default 20 and max 100", + "in": "query", + "name": "page_size", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -293661,7 +366665,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bloomberg.newsSitemapsResponseDoc" + "$ref": "#/definitions/datasets.datasetFacetResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -293670,8 +366680,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -293682,39 +366692,25 @@ "ApiKeyAuth": [] } ], - "summary": "List Bloomberg monthly news sitemaps", + "summary": "Discover values in the apps dataset", "tags": [ - "Bloomberg" + "Datasets" ] } }, - "/bluesky/author-feed": { + "/datasets/apps/items/{app_uid}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of a Bluesky account's posts, newest first, including text, engagement counts, and any attached images/link card/quoted post.", - "operationId": "bluesky-author-feed", + "description": "Retrieves one iOS App Store or Google Play app by its exact `app_uid`, as returned by `datasets_apps_search`.", + "operationId": "datasets-apps-item", "parameters": [ { - "description": "A handle (e.g. bsky.app) or DID", - "in": "query", - "name": "actor", + "description": "Exact app_uid from a search result, e.g. ios:123456789", + "in": "path", + "name": "app_uid", "required": true, - "type": "string", - "x-example": "bsky.app" - }, - { - "description": "Page size, 1-100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 25 - }, - { - "description": "Pagination cursor from a previous response's cursor field", - "in": "query", - "name": "cursor", "type": "string" } ], @@ -293725,7 +366721,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bluesky.authorFeedResponseDoc" + "$ref": "#/definitions/datasets.appsDatasetItemResponseDoc" } }, "400": { @@ -293751,12 +366747,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -293764,40 +366754,121 @@ "ApiKeyAuth": [] } ], - "summary": "A Bluesky account's posts", + "summary": "Get one stored app record", "tags": [ - "Bluesky" + "Datasets" ] } }, - "/bluesky/followers": { + "/datasets/apps/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of a Bluesky account's followers. `actor` is required and is a handle such as `bsky.app` or a DID. `limit` is 1 to 100 (default 25); pass the returned `cursor` back to continue. Each follower has `did`, `handle`, `display_name`, `description`, `avatar_url` and `created_at`, and `subject` describes the account itself.", - "operationId": "bluesky-followers", + "description": "Searches resolved iOS App Store and Google Play apps stored in a search index. Store enum: `ios`, `android`, `both`. Platform enum: `phone`, `pad`, `tablet`, `mac`, `tv`, `chromebook`, `watch`, `vision`, `xr`, `car`, `windows` (iOS device values: phone, pad, mac, tv, watch, vision; Android values: phone, tablet, tv, chromebook, watch, xr, car, windows). Sort enum: `relevance`, `rating_desc`, `reviews_desc`, `installs_desc`, `updated_at_desc`, `popularity_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-apps-search", "parameters": [ { - "description": "A handle (e.g. bsky.app) or DID", + "description": "Full-text query over title, developer and category, max 256 characters", "in": "query", - "name": "actor", - "required": true, - "type": "string", - "x-example": "bsky.app" + "name": "q", + "type": "string" }, { - "description": "Page size, 1-100", + "description": "Store enum: ios, android, both", + "enum": [ + "ios", + "android", + "both" + ], "in": "query", - "name": "limit", - "type": "integer", - "x-example": 25 + "name": "store", + "type": "string" }, { - "description": "Pagination cursor from a previous response's cursor field", + "collectionFormat": "csv", + "description": "Repeatable device-platform filter (OR); iOS and Android use the values described above", "in": "query", - "name": "cursor", + "items": { + "enum": [ + "phone", + "pad", + "tablet", + "mac", + "tv", + "chromebook", + "watch", + "vision", + "xr", + "car", + "windows" + ], + "type": "string" + }, + "name": "platforms", + "type": "array" + }, + { + "description": "Exact app-store category filter, max 128 characters", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Exact storefront country filter, max 128 characters", + "in": "query", + "name": "country", "type": "string" + }, + { + "description": "Exact developer/publisher name filter, max 128 characters", + "in": "query", + "name": "developer", + "type": "string" + }, + { + "description": "Filter by price; true keeps only free apps, false only paid", + "in": "query", + "name": "free", + "type": "boolean" + }, + { + "description": "Minimum store rating, 0 through 5", + "in": "query", + "name": "min_rating", + "type": "number" + }, + { + "description": "Minimum ratings/review count", + "in": "query", + "name": "min_reviews", + "type": "integer" + }, + { + "description": "Sort enum: relevance, rating_desc, reviews_desc, installs_desc, updated_at_desc, popularity_desc", + "enum": [ + "relevance", + "rating_desc", + "reviews_desc", + "installs_desc", + "updated_at_desc", + "popularity_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -293807,7 +366878,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bluesky.followersResponseDoc" + "$ref": "#/definitions/datasets.appsSearchResponseDoc" } }, "400": { @@ -293816,12 +366887,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -293833,12 +366898,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -293846,39 +366905,158 @@ "ApiKeyAuth": [] } ], - "summary": "A Bluesky account's followers", + "summary": "Search the apps-intelligence dataset", "tags": [ - "Bluesky" + "Datasets" ] } }, - "/bluesky/follows": { + "/datasets/bbb-businesses/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of the accounts a Bluesky account follows.", - "operationId": "bluesky-follows", + "description": "Returns the values of one field of the BBB businesses index (dataset id enum value `bbb-businesses`) with the number of records for each, honoring the same filters as search. Facet enum: `country`, `address_country`, `category`, `state`, `city`, `rating`, `accredited`, `entity_type`, `run_id`, `alert_title`, `has_alerts`. The `country` facet is parsed from profile URLs; `address_country` is derived from business addresses. Both enums are `us`, `ca`. Values come most frequent first, 50 per page by default; page through all of them with `limit` (up to 1000) and `offset` while `has_more` is true. The response also returns `total` (records matching the filters), `total_values` (distinct values) and `missing` (records with no value for the facet), so the counts can be checked against the total. Values of the `accredited` and `has_alerts` facets are `1` (true) and `0` (false). Use it to split a search that would exceed 10,000 records: `facet=state` lists every state and province, and `facet=city` with a `state` filter lists every city in it.", + "operationId": "datasets-bbb-businesses-facets", "parameters": [ { - "description": "A handle (e.g. bsky.app) or DID", + "description": "Facet enum: country, address_country, category, state, city, rating, accredited, entity_type, run_id, alert_title, has_alerts", + "enum": [ + "country", + "address_country", + "category", + "state", + "city", + "rating", + "accredited", + "entity_type", + "run_id", + "alert_title", + "has_alerts" + ], "in": "query", - "name": "actor", + "name": "facet", "required": true, "type": "string", - "x-example": "bsky.app" + "x-example": "category" }, { - "description": "Page size, 1-100", + "description": "Values per page, 1 to 1000, defaults to 50", "in": "query", "name": "limit", - "type": "integer", - "x-example": 25 + "type": "integer" }, { - "description": "Pagination cursor from a previous response's cursor field", + "description": "Values to skip, 0 or greater, defaults to 0; offset + limit must be <= 10000. Request offset + limit next while has_more is true", "in": "query", - "name": "cursor", + "name": "offset", + "type": "integer" + }, + { + "description": "Full-text match on the business name/category, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Exact category filter, e.g. Plumber (case-sensitive). Use the values returned by facet=category", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Country filter, parsed from the profile URL (case-insensitive). Enum: us, ca", + "enum": [ + "us", + "ca" + ], + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Country filter derived from the business address, separate from the profile-URL country (case-insensitive). Enum: us, ca", + "enum": [ + "us", + "ca" + ], + "in": "query", + "name": "address_country", + "type": "string" + }, + { + "description": "Exact 2-letter state or province code as in the profile URL, e.g. tx (case-insensitive). Use the values returned by facet=state", + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "Exact city slug as in the profile URL, e.g. san-diego (case-insensitive). Use the values returned by facet=city with a state filter", + "in": "query", + "name": "city", + "type": "string" + }, + { + "description": "Exact letter-grade rating filter. Enum: A+, A, A-, B+, B, B-, C+, C, C-, D+, D, D-, F", + "enum": [ + "A+", + "A", + "A-", + "B+", + "B", + "B-", + "C+", + "C", + "C-", + "D+", + "D", + "D-", + "F" + ], + "in": "query", + "name": "rating", + "type": "string" + }, + { + "description": "Numeric floor against the denormalized rating rank (A+=12 down to F=0), e.g. 10 for 'A- and above'", + "in": "query", + "name": "min_rating_rank", + "type": "integer" + }, + { + "description": "Accreditation filter; true keeps only accredited businesses, false only the others", + "in": "query", + "name": "accredited", + "type": "boolean" + }, + { + "description": "BBB-alert filter; true keeps businesses whose profile carries at least one BBB alert, false keeps refreshed records with none", + "in": "query", + "name": "has_alerts", + "type": "boolean" + }, + { + "description": "Exact BBB alert title filter, e.g. Pattern of Complaint (case-sensitive). Use the values returned by facet=alert_title", + "in": "query", + "name": "alert_title", + "type": "string" + }, + { + "description": "Floor against total_complaints (BBB's three-year complaint count), 0 or greater", + "in": "query", + "name": "min_complaints", + "type": "integer" + }, + { + "description": "Exact entity-type filter, e.g. Limited Liability Company (LLC) (case-sensitive). Use the values returned by facet=entity_type", + "in": "query", + "name": "entity_type", + "type": "string" + }, + { + "description": "Exact crawl run id filter, e.g. bbb-20260906. Use the values returned by facet=run_id", + "in": "query", + "name": "run_id", "type": "string" } ], @@ -293889,7 +367067,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bluesky.followsResponseDoc" + "$ref": "#/definitions/datasets.bbbBusinessesFacetResponseDoc" } }, "400": { @@ -293898,12 +367076,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -293915,12 +367087,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -293928,37 +367094,27 @@ "ApiKeyAuth": [] } ], - "summary": "Accounts a Bluesky account follows", + "summary": "Facet the BBB businesses dataset", "tags": [ - "Bluesky" + "Datasets" ] } }, - "/bluesky/post-likes": { + "/datasets/bbb-businesses/items/{id}": { "get": { - "description": "Lists the accounts that liked a Bluesky post, identified by its `at://` post `uri`, which is required. `limit` defaults to 25 and is capped at 100; pass the returned `cursor` back for the next page. Each actor has `did`, `handle`, `display_name`, `description`, `avatar_url` and `created_at`.", - "operationId": "bluesky-post-likes", + "consumes": [ + "application/json" + ], + "description": "Returns one business by id from dataset id enum value `bbb-businesses`. Returns 404 when the business is not in the index.", + "operationId": "datasets-bbb-businesses-item", "parameters": [ { - "description": "The post's at:// URI", - "in": "query", - "name": "uri", + "description": "Business id (the - slug from the profile URL), e.g. 0825-1000223803", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l" - }, - { - "default": 25, - "description": "Page size, 1-100", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Pagination cursor", - "in": "query", - "name": "cursor", - "type": "string" + "x-example": "0825-1000223803" } ], "produces": [ @@ -293968,7 +367124,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bluesky.postActorsResponseDoc" + "$ref": "#/definitions/datasets.bbbBusinessResponseDoc" } }, "400": { @@ -293994,12 +367150,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -294007,37 +367157,153 @@ "ApiKeyAuth": [] } ], - "summary": "List actors who liked a Bluesky post", + "summary": "Get a business from the BBB businesses dataset", "tags": [ - "Bluesky" + "Datasets" ] } }, - "/bluesky/post-quotes": { + "/datasets/bbb-businesses/search": { "get": { - "description": "Lists the Bluesky posts that quote a given post, identified by its `at://` post `uri`, which is required. `limit` defaults to 25 and is capped at 100; pass the returned `cursor` back for the next page. Each post has its `text`, `author`, `created_at`, `langs`, like, quote, reply and repost counts, `images` and `external` link card.", - "operationId": "bluesky-post-quotes", + "consumes": [ + "application/json" + ], + "description": "Searches the BBB (Better Business Bureau) businesses index (dataset id enum value `bbb-businesses`) — business profiles crawled from bbb.org's own search/category-browse pages: computed A+-F letter-grade rating, paid-accreditation status, category, contact info, business details, operating hours, and products/services. Complaints, full reviews, and the full \"reasons for rating\"/service-area detail are NOT embedded here; each record instead carries complaints_url/reviews_url/more_info_url pointing at the live bbb-business-complaints/bbb-business-reviews/bbb-business-more-info endpoints for on-demand lookup. rating enum: `A+`, `A`, `A-`, `B+`, `B`, `B-`, `C+`, `C`, `C-`, `D+`, `D`, `D-`, `F`. Each record also stores BBB's complaint and review counts (total_complaints and related fields) and the BBB alerts on the profile (has_alerts, alert_titles, alerts[] with full text), so businesses with complaints or with a given alert can be listed without calling the live endpoints; these fields are filled as records are re-crawled and are absent on a record not refreshed since they were added. `country` is parsed from the profile URL; `address_country` is derived separately from the business address. Both enums are `us`, `ca`. sort enum: `relevance`, `rating_desc`, `rating_asc`, `accredited_first`, `name_asc`, `years_in_business_desc`, `complaints_desc`. A query returns at most 10,000 records; to read more, split it with the values and counts from the facets endpoint (for example one request per state, then per city) so each part stays under that limit. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100); the item and facets endpoints cost 1.", + "operationId": "datasets-bbb-businesses-search", "parameters": [ { - "description": "The quoted post's at:// URI", + "description": "Full-text match on the business name/category, max 256 characters", "in": "query", - "name": "uri", - "required": true, - "type": "string", - "x-example": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l" + "name": "q", + "type": "string" }, { - "default": 25, - "description": "Page size, 1-100", + "description": "Exact category filter, e.g. Plumber (case-sensitive). Use the values returned by facets?facet=category", "in": "query", - "name": "limit", + "name": "category", + "type": "string" + }, + { + "description": "Country filter, parsed from the profile URL (case-insensitive). Enum: us, ca", + "enum": [ + "us", + "ca" + ], + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Country filter derived from the business address, separate from the profile-URL country (case-insensitive). Enum: us, ca", + "enum": [ + "us", + "ca" + ], + "in": "query", + "name": "address_country", + "type": "string" + }, + { + "description": "Exact 2-letter state or province code as in the profile URL, e.g. tx (case-insensitive). Use the values returned by facets?facet=state", + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "Exact city slug as in the profile URL, e.g. san-diego (case-insensitive). Use the values returned by facets?facet=city with a state filter; the same slug exists in several states, so send state with it", + "in": "query", + "name": "city", + "type": "string" + }, + { + "description": "Exact letter-grade rating filter. Enum: A+, A, A-, B+, B, B-, C+, C, C-, D+, D, D-, F", + "enum": [ + "A+", + "A", + "A-", + "B+", + "B", + "B-", + "C+", + "C", + "C-", + "D+", + "D", + "D-", + "F" + ], + "in": "query", + "name": "rating", + "type": "string" + }, + { + "description": "Numeric floor against the denormalized rating rank (A+=12 down to F=0), e.g. 10 for 'A- and above'", + "in": "query", + "name": "min_rating_rank", "type": "integer" }, { - "description": "Pagination cursor", + "description": "Accreditation filter; true keeps only accredited businesses, false only the others", "in": "query", - "name": "cursor", + "name": "accredited", + "type": "boolean" + }, + { + "description": "BBB-alert filter; true keeps businesses whose profile carries at least one BBB alert, false keeps refreshed records with none", + "in": "query", + "name": "has_alerts", + "type": "boolean" + }, + { + "description": "Exact BBB alert title filter, e.g. Pattern of Complaint. Use the values returned by facets?facet=alert_title", + "in": "query", + "name": "alert_title", + "type": "string" + }, + { + "description": "Floor against total_complaints (BBB's three-year complaint count), 0 or greater", + "in": "query", + "name": "min_complaints", + "type": "integer" + }, + { + "description": "Exact entity-type filter, e.g. Limited Liability Company (LLC) (case-sensitive). Use the values returned by facets?facet=entity_type", + "in": "query", + "name": "entity_type", + "type": "string" + }, + { + "description": "Exact crawl run id filter, e.g. bbb-20260906. Use the values returned by facets?facet=run_id", + "in": "query", + "name": "run_id", "type": "string" + }, + { + "description": "Sort enum: relevance, rating_desc, rating_asc, accredited_first, name_asc, years_in_business_desc, complaints_desc", + "enum": [ + "relevance", + "rating_desc", + "rating_asc", + "accredited_first", + "name_asc", + "years_in_business_desc", + "complaints_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -294047,7 +367313,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bluesky.postQuotesResponseDoc" + "$ref": "#/definitions/datasets.bbbBusinessesSearchResponseDoc" } }, "400": { @@ -294056,12 +367322,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -294073,12 +367333,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -294086,37 +367340,84 @@ "ApiKeyAuth": [] } ], - "summary": "List quotes of a Bluesky post", + "summary": "Search the BBB businesses dataset", "tags": [ - "Bluesky" + "Datasets" ] } }, - "/bluesky/post-reposted-by": { + "/datasets/bbb-scamtracker-reports/facets": { "get": { - "description": "Lists the accounts that reposted a Bluesky post, identified by its `at://` post `uri`, which is required. `limit` defaults to 25 and is capped at 100; pass the returned `cursor` back for the next page. Each actor has `did`, `handle`, `display_name`, `description`, `avatar_url` and `created_at`.", - "operationId": "bluesky-post-reposted-by", + "consumes": [ + "application/json" + ], + "description": "Returns distribution counts over the stored BBB Scam Tracker reports (dataset id enum value `bbb-scamtracker-reports`), honoring the same filters as search. Counts are of stored reports. Facet enum: `scam_type`, `state`, `country`. country enum: `USA`, `CAN`.", + "operationId": "datasets-bbb-scamtracker-reports-facets", "parameters": [ { - "description": "The post's at:// URI", + "description": "Facet enum: scam_type, state, country", + "enum": [ + "scam_type", + "state", + "country" + ], "in": "query", - "name": "uri", + "name": "facet", "required": true, "type": "string", - "x-example": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l" + "x-example": "scam_type" }, { - "default": 25, - "description": "Page size, 1-100", + "description": "Full-text match on the report narrative and the business name used, max 256 characters", "in": "query", - "name": "limit", - "type": "integer" + "name": "q", + "type": "string" }, { - "description": "Pagination cursor", + "description": "Exact scam type filter", "in": "query", - "name": "cursor", + "name": "scam_type", + "type": "string" + }, + { + "description": "2-letter state or province code of the targeted person", + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "Country of the targeted person. Enum: USA, CAN", + "enum": [ + "USA", + "CAN" + ], + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Inclusive report-date floor, YYYY-MM-DD", + "in": "query", + "name": "date_from", + "type": "string" + }, + { + "description": "Inclusive report-date ceiling, YYYY-MM-DD", + "in": "query", + "name": "date_to", "type": "string" + }, + { + "description": "Floor against the reported dollar loss, 0 or greater", + "in": "query", + "name": "min_loss", + "type": "number" + }, + { + "description": "Ceiling against the reported dollar loss, 0 or greater", + "in": "query", + "name": "max_loss", + "type": "number" } ], "produces": [ @@ -294126,7 +367427,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bluesky.postActorsResponseDoc" + "$ref": "#/definitions/datasets.scamTrackerReportsFacetResponseDoc" } }, "400": { @@ -294135,12 +367436,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -294152,12 +367447,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -294165,34 +367454,27 @@ "ApiKeyAuth": [] } ], - "summary": "List actors who reposted a Bluesky post", + "summary": "Facet the BBB Scam Tracker reports dataset", "tags": [ - "Bluesky" + "Datasets" ] } }, - "/bluesky/post-thread": { + "/datasets/bbb-scamtracker-reports/items/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Bluesky post along with its nested replies (and, when the post is itself a reply, its parent chain), up to `depth` levels deep.", - "operationId": "bluesky-post-thread", + "description": "Returns one stored report by id from dataset id enum value `bbb-scamtracker-reports`. Returns 404 when the report is not in the archive; the live bbb-scamtracker-detail endpoint can still fetch it from BBB.", + "operationId": "datasets-bbb-scamtracker-reports-item", "parameters": [ { - "description": "The post's at:// URI, e.g. from an author-feed or search-actors result's post uri field", - "in": "query", - "name": "uri", + "description": "BBB Scam Tracker report id (numeric), e.g. 1397968", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l" - }, - { - "description": "Reply-tree depth, 1-10", - "in": "query", - "name": "depth", - "type": "integer", - "x-example": 6 + "x-example": "1397968" } ], "produces": [ @@ -294202,7 +367484,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bluesky.postThreadResponseDoc" + "$ref": "#/definitions/datasets.scamTrackerReportResponseDoc" } }, "400": { @@ -294228,12 +367510,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -294241,28 +367517,97 @@ "ApiKeyAuth": [] } ], - "summary": "A Bluesky post and its reply tree", + "summary": "Get a report from the BBB Scam Tracker reports dataset", "tags": [ - "Bluesky" + "Datasets" ] } }, - "/bluesky/posts": { + "/datasets/bbb-scamtracker-reports/search": { "get": { - "description": "Returns public Bluesky posts for 1-25 at:// post URIs. Missing, deleted, or blocked posts are omitted when the public AppView omits them.", - "operationId": "bluesky-posts", + "consumes": [ + "application/json" + ], + "description": "Searches the stored archive of public consumer scam reports from bbb.org/scamtracker (dataset id enum value `bbb-scamtracker-reports`), one record per report: narrative, scam type, reported dollar loss, targeted and scammer locations, the business name used, and the report date. Unlike the live bbb-scamtracker-search endpoint, results are not cut off at BBB's 10,000-result limit and any date range can be read page by page. Reports are unreviewed consumer allegations; names and contact details in them are as reported, not verified. The archive is still being filled, so `total` is the number of stored reports matching the filters, not BBB's own count. country enum: `USA`, `CAN`. sort enum: `relevance`, `reported_desc`, `reported_asc`, `loss_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100); the item and facets endpoints cost 1.", + "operationId": "datasets-bbb-scamtracker-reports-search", "parameters": [ { - "collectionFormat": "csv", - "description": "One or more at:// post URIs (1-25); repeat the parameter for multiple URIs", + "description": "Full-text match on the report narrative and the business name used, max 256 characters", "in": "query", - "items": { - "type": "string" - }, - "name": "uris", - "required": true, - "type": "array", - "x-example": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l" + "name": "q", + "type": "string" + }, + { + "description": "Exact scam type filter, e.g. Online Purchase. Use the values returned by facets?facet=scam_type", + "in": "query", + "name": "scam_type", + "type": "string" + }, + { + "description": "2-letter state or province code of the targeted person, e.g. TX or QC", + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "Country of the targeted person. Enum: USA, CAN", + "enum": [ + "USA", + "CAN" + ], + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Inclusive report-date floor, YYYY-MM-DD", + "in": "query", + "name": "date_from", + "type": "string", + "x-example": "2023-01-01" + }, + { + "description": "Inclusive report-date ceiling, YYYY-MM-DD", + "in": "query", + "name": "date_to", + "type": "string", + "x-example": "2023-01-31" + }, + { + "description": "Floor against the reported dollar loss, 0 or greater; reports with an unknown loss are excluded", + "in": "query", + "name": "min_loss", + "type": "number" + }, + { + "description": "Ceiling against the reported dollar loss, 0 or greater; reports with an unknown loss are excluded", + "in": "query", + "name": "max_loss", + "type": "number" + }, + { + "description": "Sort enum: relevance, reported_desc, reported_asc, loss_desc", + "enum": [ + "relevance", + "reported_desc", + "reported_asc", + "loss_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -294272,7 +367617,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bluesky.postsResponseDoc" + "$ref": "#/definitions/datasets.scamTrackerReportsSearchResponseDoc" } }, "400": { @@ -294292,12 +367637,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -294305,27 +367644,134 @@ "ApiKeyAuth": [] } ], - "summary": "Look up Bluesky posts in a batch", + "summary": "Search the BBB Scam Tracker reports dataset", "tags": [ - "Bluesky" + "Datasets" ] } }, - "/bluesky/profile": { + "/datasets/boxofficemojo/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Bluesky account's public profile: display name, description, avatar/banner images, and follower/follows/posts counts.", - "operationId": "bluesky-profile", + "description": "Returns terms-aggregation counts for one facet of the Box Office Mojo dataset, scoped to the same filters as search. Facet enum: `gross_band`, `years_active`, `lifetime_year`, `franchise_names`, `brand_names`, `genre_names`, `hydrated`, `is_billion_dollar`, `in_lifetime_top_1000_ww`. gross_band enum: `under_50m`, `50_100m`, `100_250m`, `250_500m`, `500m_1b`, `over_1b`.", + "operationId": "datasets-boxofficemojo-facets", "parameters": [ { - "description": "A handle (e.g. bsky.app) or DID (e.g. did:plc:z72i7hdynmk6r22z27h6tvur)", + "description": "Facet enum: gross_band, years_active, lifetime_year, franchise_names, brand_names, genre_names, hydrated, is_billion_dollar, in_lifetime_top_1000_ww", + "enum": [ + "gross_band", + "years_active", + "lifetime_year", + "franchise_names", + "brand_names", + "genre_names", + "hydrated", + "is_billion_dollar", + "in_lifetime_top_1000_ww" + ], "in": "query", - "name": "actor", + "name": "facet", "required": true, "type": "string", - "x-example": "bsky.app" + "x-example": "gross_band" + }, + { + "description": "Full-text query, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Exact title id (IMDb tt… id used by Box Office Mojo), max 32 characters", + "in": "query", + "name": "title_id", + "type": "string" + }, + { + "description": "Year in years_active", + "in": "query", + "name": "year", + "type": "integer" + }, + { + "description": "Primary lifetime chart year", + "in": "query", + "name": "lifetime_year", + "type": "integer" + }, + { + "description": "Gross band filter", + "in": "query", + "name": "gross_band", + "type": "string" + }, + { + "description": "Franchise name filter, max 128 characters", + "in": "query", + "name": "franchise", + "type": "string" + }, + { + "description": "Brand name filter, max 128 characters", + "in": "query", + "name": "brand", + "type": "string" + }, + { + "description": "Genre name filter, max 128 characters", + "in": "query", + "name": "genre", + "type": "string" + }, + { + "description": "Only titles in the lifetime worldwide top 1000 chart", + "in": "query", + "name": "in_lifetime_top_1000", + "type": "boolean" + }, + { + "description": "Minimum lifetime worldwide gross", + "in": "query", + "name": "min_worldwide", + "type": "integer" + }, + { + "description": "Maximum lifetime worldwide gross", + "in": "query", + "name": "max_worldwide", + "type": "integer" + }, + { + "description": "Minimum lifetime domestic gross", + "in": "query", + "name": "min_domestic", + "type": "integer" + }, + { + "description": "Minimum foreign share of worldwide gross, 0 through 1", + "in": "query", + "name": "min_foreign_share", + "type": "number" + }, + { + "description": "Maximum domestic share of worldwide gross, 0 through 1", + "in": "query", + "name": "max_domestic_share", + "type": "number" + }, + { + "description": "Hydrated filter", + "in": "query", + "name": "hydrated", + "type": "boolean" + }, + { + "description": "Only titles with worldwide gross of at least $1B", + "in": "query", + "name": "is_billion_dollar", + "type": "boolean" } ], "produces": [ @@ -294335,7 +367781,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bluesky.profileResponseDoc" + "$ref": "#/definitions/datasets.boxOfficeMojoFacetResponseDoc" } }, "400": { @@ -294344,12 +367790,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -294361,12 +367801,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -294374,40 +367808,27 @@ "ApiKeyAuth": [] } ], - "summary": "A Bluesky account's full public profile", + "summary": "Facet the Box Office Mojo dataset", "tags": [ - "Bluesky" + "Datasets" ] } }, - "/bluesky/search-actors": { + "/datasets/boxofficemojo/items/{title_id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns Bluesky accounts matching a query against display name, handle, and profile description.", - "operationId": "bluesky-search-actors", + "description": "Returns one Box Office Mojo dataset record by title id (IMDb `tt…` id used on Box Office Mojo title pages), including lifetime grosses, year history, release groups and market grosses when hydrated.", + "operationId": "datasets-boxofficemojo-item", "parameters": [ { - "description": "Search text", - "in": "query", - "name": "q", + "description": "Title id (IMDb tt… id), e.g. tt0499549", + "in": "path", + "name": "title_id", "required": true, "type": "string", - "x-example": "news" - }, - { - "description": "Page size, 1-100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 25 - }, - { - "description": "Pagination cursor from a previous response's cursor field", - "in": "query", - "name": "cursor", - "type": "string" + "x-example": "tt0499549" } ], "produces": [ @@ -294417,7 +367838,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bluesky.searchActorsResponseDoc" + "$ref": "#/definitions/datasets.boxOfficeMojoItemResponseDoc" } }, "400": { @@ -294426,20 +367847,20 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -294450,19 +367871,152 @@ "ApiKeyAuth": [] } ], - "summary": "Search Bluesky accounts", + "summary": "Get a Box Office Mojo title from the dataset", "tags": [ - "Bluesky" + "Datasets" ] } }, - "/bluesky/trending-topics": { + "/datasets/boxofficemojo/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns Bluesky's current trending topics and suggested feeds, each with a link to its feed. This surface is less stable than the rest of this family -- Bluesky may change its shape without notice.", - "operationId": "bluesky-trending-topics", + "description": "Searches theatrical box-office records from Box Office Mojo charts and title pages. Filter by title id, year, franchise/brand/genre, gross band, lifetime top-1000 membership, hydration status, and worldwide/domestic gross ranges. Sort enum: `relevance`, `worldwide_desc`, `domestic_desc`, `peak_worldwide_desc`, `lifetime_rank_asc`, `year_desc`, `year_asc`. gross_band enum: `under_50m`, `50_100m`, `100_250m`, `250_500m`, `500m_1b`, `over_1b`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-boxofficemojo-search", + "parameters": [ + { + "description": "Full-text query over title and taxonomy names, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Exact title id (IMDb tt… id used by Box Office Mojo), max 32 characters", + "in": "query", + "name": "title_id", + "type": "string" + }, + { + "description": "Year that must appear in years_active", + "in": "query", + "name": "year", + "type": "integer" + }, + { + "description": "Primary lifetime chart year", + "in": "query", + "name": "lifetime_year", + "type": "integer" + }, + { + "description": "Gross band enum: under_50m, 50_100m, 100_250m, 250_500m, 500m_1b, over_1b", + "enum": [ + "under_50m", + "50_100m", + "100_250m", + "250_500m", + "500m_1b", + "over_1b" + ], + "in": "query", + "name": "gross_band", + "type": "string" + }, + { + "description": "Franchise name filter, max 128 characters", + "in": "query", + "name": "franchise", + "type": "string" + }, + { + "description": "Brand name filter, max 128 characters", + "in": "query", + "name": "brand", + "type": "string" + }, + { + "description": "Genre name filter, max 128 characters", + "in": "query", + "name": "genre", + "type": "string" + }, + { + "description": "Only titles in the lifetime worldwide top 1000 chart", + "in": "query", + "name": "in_lifetime_top_1000", + "type": "boolean" + }, + { + "description": "Only titles with hydrated release groups and market grosses", + "in": "query", + "name": "hydrated", + "type": "boolean" + }, + { + "description": "Only titles with worldwide gross of at least $1B", + "in": "query", + "name": "is_billion_dollar", + "type": "boolean" + }, + { + "description": "Minimum lifetime worldwide gross in whole USD dollars", + "in": "query", + "name": "min_worldwide", + "type": "integer" + }, + { + "description": "Maximum lifetime worldwide gross in whole USD dollars", + "in": "query", + "name": "max_worldwide", + "type": "integer" + }, + { + "description": "Minimum lifetime domestic gross in whole USD dollars", + "in": "query", + "name": "min_domestic", + "type": "integer" + }, + { + "description": "Minimum foreign share of worldwide gross, 0 through 1", + "in": "query", + "name": "min_foreign_share", + "type": "number" + }, + { + "description": "Maximum domestic share of worldwide gross, 0 through 1", + "in": "query", + "name": "max_domestic_share", + "type": "number" + }, + { + "description": "Sort enum: relevance, worldwide_desc, domestic_desc, peak_worldwide_desc, lifetime_rank_asc, year_desc, year_asc", + "enum": [ + "relevance", + "worldwide_desc", + "domestic_desc", + "peak_worldwide_desc", + "lifetime_rank_asc", + "year_desc", + "year_asc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -294470,23 +368024,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bluesky.trendingTopicsResponseDoc" + "$ref": "#/definitions/datasets.boxOfficeMojoSearchResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -294497,19 +368051,40 @@ "ApiKeyAuth": [] } ], - "summary": "Bluesky's current trending topics", + "summary": "Search the Box Office Mojo dataset", "tags": [ - "Bluesky" + "Datasets" ] } }, - "/bo3/economy-baseline": { + "/datasets/chrome-extensions/changes": { "get": { - "consumes": [ - "application/json" + "description": "Lists recent change observations across Chrome Web Store items in the dataset, optionally for one `change_type`: `users`, `rating`, `rating_count`, `version`, `developer`, `permissions`, `privacy` or `status`. Returns up to `limit` (default 100, max 500), each with the item's name, category, developer, observed time and the figures that changed.", + "operationId": "datasets-chrome-extensions-changes", + "parameters": [ + { + "description": "Change type enum: users, rating, rating_count, version, developer, permissions, privacy, status", + "enum": [ + "users", + "rating", + "rating_count", + "version", + "developer", + "permissions", + "privacy", + "status" + ], + "in": "query", + "name": "change_type", + "type": "string" + }, + { + "description": "Maximum observations, default 100, max 500", + "in": "query", + "name": "limit", + "type": "integer" + } ], - "description": "Returns the site-wide CS2 round win rate for every pairing of buy levels (rounds, wins, win rate), the baseline to compare a team's `economy` view of bo3-team-stats with. Levels: -1 full eco, 0 semi-eco, 1 half buy, 2 full buy; the opposing level is null when it is unknown.", - "operationId": "bo3-economy-baseline", "produces": [ "application/json" ], @@ -294517,19 +368092,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.EconomyBaselineResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.chromeExtensionChangesResponseDoc" } }, "400": { @@ -294538,20 +368101,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -294562,67 +368119,141 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg CS2 economy baseline", + "summary": "Get recent Chrome Web Store item changes", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/forum": { + "/datasets/chrome-extensions/facets": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns BO3.gg forum threads for one game with paging: a `category` id from bo3-forum-categories and `sort` (`activity` with pinned threads first, `newest`, `comments`, `rating`), up to 100 per page. Each thread has slug, title, category, comment count, rating, pinned flag, created and last-activity times and the author's nickname; post bodies, reactions and replies are not returned.", - "operationId": "bo3-forum", + "description": "Returns aggregation buckets. Facet enum: `item_type`, `category`, `developer`, `developer_email`, `manifest_version`, `permission`, `status`, `collects_data`, `has_broad_host_access`. Item type enum: `extension`, `theme`, `app`, `unknown`. Search sort, status and manifest-version enums match the search endpoint.", + "operationId": "datasets-chrome-extensions-facets", "parameters": [ { - "description": "Game; one of cs2, valorant, lol, dota2, r6siege, mlbb; defaults to cs2", + "description": "Facet enum: item_type, category, developer, developer_email, manifest_version, permission, status, collects_data, has_broad_host_access", "enum": [ - "cs2", - "valorant", - "lol", - "dota2", - "r6siege", - "mlbb" + "item_type", + "category", + "developer", + "developer_email", + "manifest_version", + "permission", + "status", + "collects_data", + "has_broad_host_access" ], "in": "query", - "name": "game", + "name": "facet", + "required": true, + "type": "string", + "x-example": "item_type" + }, + { + "description": "Full-text query", + "in": "query", + "name": "q", "type": "string" }, { - "description": "Forum category id from bo3-forum-categories, for example 4", + "description": "Item type enum: extension, theme, app, unknown", + "enum": [ + "extension", + "theme", + "app", + "unknown" + ], + "in": "query", + "name": "item_type", + "type": "string" + }, + { + "description": "Exact category", "in": "query", - "minimum": 1, "name": "category", - "type": "integer" + "type": "string" }, { - "description": "Order; one of activity, newest, comments, rating; defaults to activity", + "description": "Exact developer", + "in": "query", + "name": "developer", + "type": "string" + }, + { + "description": "Exact developer email", + "in": "query", + "name": "developer_email", + "type": "string" + }, + { + "description": "Exact permission", + "in": "query", + "name": "permission", + "type": "string" + }, + { + "description": "Status enum: active, removed", "enum": [ - "activity", - "newest", - "comments", - "rating" + "active", + "removed" ], "in": "query", - "name": "sort", + "name": "status", "type": "string" }, { - "description": "Zero-based offset; defaults to 0", + "description": "Manifest version enum: 2, 3", + "enum": [ + 2, + 3 + ], "in": "query", - "minimum": 0, - "name": "offset", + "name": "manifest_version", "type": "integer" }, { - "description": "Page size, 1 to 100; defaults to 20", + "description": "Data-collection filter", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", + "name": "collects_data", + "type": "boolean" + }, + { + "description": "Broad-host-access filter", + "in": "query", + "name": "has_broad_host_access", + "type": "boolean" + }, + { + "description": "Minimum users", + "in": "query", + "name": "min_users", + "type": "integer" + }, + { + "description": "Minimum rating", + "in": "query", + "name": "min_rating", + "type": "number" + }, + { + "description": "Minimum rating count", + "in": "query", + "name": "min_rating_count", "type": "integer" + }, + { + "description": "Sort enum: relevance, users_desc, rating_desc, reviews_desc, updated_desc, trending_desc", + "enum": [ + "relevance", + "users_desc", + "rating_desc", + "reviews_desc", + "updated_desc", + "trending_desc" + ], + "in": "query", + "name": "sort", + "type": "string" } ], "produces": [ @@ -294632,19 +368263,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.ForumFeedResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.chromeExtensionFacetResponseDoc" } }, "400": { @@ -294659,8 +368278,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -294671,33 +368290,42 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg forum threads with category and sort filters", + "summary": "Facet the Chrome Web Store dataset", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/forum-categories": { + "/datasets/chrome-extensions/history/{id}": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the BO3.gg forum categories of one game (id, slug and title, ordered by id; CS2 has CS2, IDEAS AND BUGS and OFF TOP) that the `category` filter of bo3-forum accepts.", - "operationId": "bo3-forum-categories", + "description": "Returns the change history of one Chrome Web Store item by `id`. A point is recorded only when a tracked field changed, with users, rating, version, permissions and the list of `change_types`. Narrow with `from` and `to` (YYYY-MM-DD); `limit` defaults to 365, max 1000.", + "operationId": "datasets-chrome-extensions-history", "parameters": [ { - "description": "Game; one of cs2, valorant, lol, dota2, r6siege, mlbb; defaults to cs2", - "enum": [ - "cs2", - "valorant", - "lol", - "dota2", - "r6siege", - "mlbb" - ], + "description": "Chrome Web Store item id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "cjpalhdlnbpafiamejdnhcphjbkeiagm" + }, + { + "description": "Inclusive start date, YYYY-MM-DD", "in": "query", - "name": "game", + "name": "from", + "type": "string" + }, + { + "description": "Inclusive end date, YYYY-MM-DD", + "in": "query", + "name": "to", "type": "string" + }, + { + "description": "Maximum points, default 365, max 1000", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -294707,19 +368335,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.ForumCategoriesResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.chromeExtensionHistoryResponseDoc" } }, "400": { @@ -294734,8 +368350,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -294746,27 +368362,24 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg forum categories", + "summary": "Get Chrome Web Store item history", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/match": { + "/datasets/chrome-extensions/items/{id}": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one BO3.gg match by slug: teams with scores and winner, status, best-of, tier, start and end time, tournament, stage and round, the maps played with scores, the site's AI prediction, live and recorded streams and the key-fact insights for each team. The slug comes from bo3-match-history.", - "operationId": "bo3-match", + "description": "Returns the stored record of one Chrome Web Store extension, theme or app by its 32-character `id`. It has name, `item_type`, category, users, rating, version, developer and disclosed email, declared permissions, host access flags, privacy disclosures and screenshots, taken from the latest observation.", + "operationId": "datasets-chrome-extensions-item", "parameters": [ { - "description": "Match slug from bo3-match-history, for example vitality-vs-natus-vincere-27-10-2026", - "in": "query", - "name": "slug", + "description": "Chrome Web Store item id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "vitality-vs-natus-vincere-27-10-2026" + "x-example": "cjpalhdlnbpafiamejdnhcphjbkeiagm" } ], "produces": [ @@ -294776,19 +368389,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.MatchInfo" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.chromeExtensionItemResponseDoc" } }, "400": { @@ -294809,8 +368410,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -294821,28 +368422,33 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg match detail", + "summary": "Get a Chrome Web Store dataset item", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/match-games": { + "/datasets/chrome-extensions/metrics": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the maps of one BO3.gg match with round-by-round results: for each map the number, map name, state, start, duration in seconds, final score, per-half side results (CT or T score, overtime) and every round with its number, duration, end reason, winning side and running score. A match with no maps yet returns an empty list.", - "operationId": "bo3-match-games", + "description": "Returns chart-ready coverage, adoption, rating, permission, privacy and recent-change aggregates for the stored Chrome Web Store dataset. Days enum: `7`, `30`, `90`.", + "operationId": "datasets-chrome-extensions-metrics", "parameters": [ { - "description": "Numeric BO3 match id (the id of a bo3-match-history row)", + "description": "Recent-change window enum: 7, 30, 90; default 30", + "enum": [ + 7, + 30, + 90 + ], "in": "query", - "minimum": 1, - "name": "match_id", - "required": true, - "type": "integer", - "x-example": 132243 + "name": "days", + "type": "integer" + }, + { + "description": "Top category and permission buckets, default 10, min 5, max 25", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -294852,19 +368458,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.MatchGamesResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.chromeExtensionMetricsResponseDoc" } }, "400": { @@ -294873,20 +368467,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -294897,96 +368485,133 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg esports match maps with round-by-round results", + "summary": "Get Chrome Web Store dataset metrics", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/match-history": { + "/datasets/chrome-extensions/search": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns BO3.gg's esports match history for one game, newest first by default, with paging and filters: `status` (`finished`, `defwin`, `upcoming`, `current`; the default is finished and default-win matches together), `tier` (`s` to `d`), an inclusive `from`/`to` day range (UTC), `sort` and `offset`/`limit` (up to 100 per page). Each match has teams, scores, winner, best-of, tournament, maps and the site's AI prediction; `total` and `has_more` page through the full history.", - "operationId": "bo3-match-history", + "description": "Searches stored Chrome Web Store item snapshots. Item type enum: `extension`, `theme`, `app`, `unknown`. Sort enum: `relevance`, `users_desc`, `rating_desc`, `reviews_desc`, `updated_desc`, `trending_desc`. Status enum: `active`, `removed`. Manifest version enum: `2`, `3`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-chrome-extensions-search", "parameters": [ { - "description": "Game; one of cs2, valorant, lol, dota2, r6siege, mlbb; defaults to cs2", + "description": "Full-text query, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Item type enum: extension, theme, app, unknown", "enum": [ - "cs2", - "valorant", - "lol", - "dota2", - "r6siege", - "mlbb" + "extension", + "theme", + "app", + "unknown" ], "in": "query", - "name": "game", + "name": "item_type", + "type": "string" + }, + { + "description": "Exact Chrome Web Store category", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Exact displayed developer name", + "in": "query", + "name": "developer", + "type": "string" + }, + { + "description": "Exact disclosed developer email", + "in": "query", + "name": "developer_email", + "type": "string" + }, + { + "description": "Exact declared permission", + "in": "query", + "name": "permission", "type": "string" }, { - "description": "Match status; one of finished, defwin, upcoming, current; defaults to finished and defwin together", + "description": "Status enum: active, removed", "enum": [ - "finished", - "defwin", - "upcoming", - "current" + "active", + "removed" ], "in": "query", "name": "status", "type": "string" }, { - "description": "Tournament tier; one of s, a, b, c, d", + "description": "Manifest version enum: 2, 3", "enum": [ - "s", - "a", - "b", - "c", - "d" + 2, + 3 ], "in": "query", - "name": "tier", - "type": "string" + "name": "manifest_version", + "type": "integer" }, { - "description": "First start day, YYYY-MM-DD (UTC, inclusive)", + "description": "Filter by public data-collection disclosure", "in": "query", - "name": "from", - "type": "string", - "x-example": "2026-10-01" + "name": "collects_data", + "type": "boolean" }, { - "description": "Last start day, YYYY-MM-DD (UTC, inclusive)", + "description": "Filter by broad host access", "in": "query", - "name": "to", - "type": "string", - "x-example": "2026-10-27" + "name": "has_broad_host_access", + "type": "boolean" }, { - "description": "Order by start time; one of newest, oldest; defaults to newest", + "description": "Minimum displayed user count", + "in": "query", + "name": "min_users", + "type": "integer" + }, + { + "description": "Minimum rating, 0 through 5", + "in": "query", + "name": "min_rating", + "type": "number" + }, + { + "description": "Minimum rating count", + "in": "query", + "name": "min_rating_count", + "type": "integer" + }, + { + "description": "Sort enum: relevance, users_desc, rating_desc, reviews_desc, updated_desc, trending_desc", "enum": [ - "newest", - "oldest" + "relevance", + "users_desc", + "rating_desc", + "reviews_desc", + "updated_desc", + "trending_desc" ], "in": "query", "name": "sort", "type": "string" }, { - "description": "Zero-based offset; defaults to 0", + "description": "Page number, default 1", "in": "query", - "minimum": 0, - "name": "offset", + "name": "page", "type": "integer" }, { - "description": "Page size, 1 to 100; defaults to 20", + "description": "Page size, default 20, max 100", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", + "name": "page_size", "type": "integer" } ], @@ -294997,19 +368622,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.MatchHistoryResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.chromeExtensionsSearchResponseDoc" } }, "400": { @@ -295018,20 +368631,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -295042,94 +368649,122 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg esports match history", + "summary": "Search the Chrome Web Store dataset", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/match-players": { + "/datasets/chrome-extensions/trending": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns every player's statistics for one BO3.gg match, ordered by team then nickname: kills, deaths, assists, headshots, first kills and deaths, trades, KAST, rating, ADR, damage, utility and money figures as a numeric `stats` map, plus the multikill counts (2K to 5K), team and opponent. The match slug comes from bo3-match-history.", - "operationId": "bo3-match-players", + "description": "Returns stored Chrome Web Store items ranked by the latest observed user and rating-count movement. Filters match the search endpoint; sort is fixed to `trending_desc`. Billing: this endpoint costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-chrome-extensions-trending", "parameters": [ { - "description": "Match slug from bo3-match-history, for example vitality-vs-natus-vincere-27-10-2026", + "description": "Full-text query", "in": "query", - "name": "slug", - "required": true, - "type": "string", - "x-example": "vitality-vs-natus-vincere-27-10-2026" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.MatchPlayersResponse" - } - }, - "type": "object" - } - ] - } + "name": "q", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Item type enum: extension, theme, app, unknown", + "enum": [ + "extension", + "theme", + "app", + "unknown" + ], + "in": "query", + "name": "item_type", + "type": "string" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Exact category", + "in": "query", + "name": "category", + "type": "string" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Exact developer", + "in": "query", + "name": "developer", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] + "description": "Exact developer email", + "in": "query", + "name": "developer_email", + "type": "string" + }, + { + "description": "Exact permission", + "in": "query", + "name": "permission", + "type": "string" + }, + { + "description": "Status enum: active, removed", + "enum": [ + "active", + "removed" + ], + "in": "query", + "name": "status", + "type": "string" + }, + { + "description": "Manifest version enum: 2, 3", + "enum": [ + 2, + 3 + ], + "in": "query", + "name": "manifest_version", + "type": "integer" + }, + { + "description": "Data-collection filter", + "in": "query", + "name": "collects_data", + "type": "boolean" + }, + { + "description": "Broad-host-access filter", + "in": "query", + "name": "has_broad_host_access", + "type": "boolean" + }, + { + "description": "Minimum users", + "in": "query", + "name": "min_users", + "type": "integer" + }, + { + "description": "Minimum rating", + "in": "query", + "name": "min_rating", + "type": "number" + }, + { + "description": "Minimum rating count", + "in": "query", + "name": "min_rating_count", + "type": "integer" + }, + { + "description": "Page number", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, max 100", + "in": "query", + "name": "page_size", + "type": "integer" } ], - "summary": "BO3.gg per-player match statistics", - "tags": [ - "BO3" - ] - } - }, - "/bo3/news-categories": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the BO3.gg editorial categories (id and title, sorted by title: Analytics, Article, Blog, Events, Gaming, Guides, Highlights, Interviews, News, Predictions, Results, Streams, Tips, Transfers, Wiki) accepted by the `category` filter of bo3-news-feed.", - "operationId": "bo3-news-categories", "produces": [ "application/json" ], @@ -295137,19 +368772,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.NewsCategoriesResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.chromeExtensionsSearchResponseDoc" } }, "400": { @@ -295164,8 +368787,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -295176,76 +368799,104 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg news categories", + "summary": "Get trending Chrome Web Store items", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/news-feed": { + "/datasets/creators/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns BO3.gg's editorial feed for one game with paging and filters: `section` (`news`, `article`, `wiki`, `predictions`), a `category` id from bo3-news-categories and `sort` (`newest`, `oldest`), up to 100 per page. Each item has slug, title, description, category, publish time, author, tags, image and canonical URL; `total` and `has_more` page through the archive (over 100,000 items across games).", - "operationId": "bo3-news-feed", + "description": "Returns up to 50 creator-facet buckets ordered by count, using the same filters as `datasets_creators_search`. Page and page_size do not change the aggregation. Deleted/private accounts remain excluded unless include_inactive=true. Contact-email values are never returned. Facet enum: `niche`, `country`, `verified`.", + "operationId": "datasets-creators-facets", "parameters": [ { - "description": "Game; one of cs2, valorant, lol, dota2, r6siege, mlbb; defaults to cs2", - "enum": [ - "cs2", - "valorant", - "lol", - "dota2", - "r6siege", - "mlbb" - ], + "description": "Facet field", + "enum": [ + "niche", + "country", + "verified" + ], + "in": "query", + "name": "facet", + "required": true, + "type": "string", + "x-example": "niche" + }, + { + "description": "Full-text query over handle, nickname and bio", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Exact creator handle", "in": "query", - "name": "game", + "name": "handle", "type": "string" }, { - "description": "Editorial section; one of news, article, wiki, predictions; defaults to news", - "enum": [ - "news", - "article", - "wiki", - "predictions" - ], + "description": "Exact content niche", "in": "query", - "name": "section", + "name": "niche", "type": "string" }, { - "description": "Category id from bo3-news-categories, for example 38 (Predictions)", + "description": "Exact creator country/region", "in": "query", - "minimum": 1, - "name": "category", + "name": "country", + "type": "string" + }, + { + "description": "Verified badge filter", + "in": "query", + "name": "verified", + "type": "boolean" + }, + { + "description": "Minimum follower count", + "in": "query", + "name": "min_followers", "type": "integer" }, { - "description": "Order by publish time; one of newest, oldest; defaults to newest", + "description": "Contact-email presence filter", + "in": "query", + "name": "has_email", + "type": "boolean" + }, + { + "description": "Include deleted/private accounts", + "in": "query", + "name": "include_inactive", + "type": "boolean" + }, + { + "description": "Validated search sort; bucket order stays count-desc, and time-series date_desc keeps its search history scope", "enum": [ - "newest", - "oldest" + "followers_desc", + "engagement_desc", + "engagement_qualified_desc", + "likes_desc", + "relevance" ], "in": "query", "name": "sort", "type": "string" }, { - "description": "Zero-based offset; defaults to 0", + "description": "Result page, 1-based", "in": "query", - "minimum": 0, - "name": "offset", + "name": "page", "type": "integer" }, { - "description": "Page size, 1 to 100; defaults to 20", + "description": "Page size, default 20 and max 100", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", + "name": "page_size", "type": "integer" } ], @@ -295256,19 +368907,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.NewsFeedResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.datasetFacetResponseDoc" } }, "400": { @@ -295283,8 +368922,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -295295,41 +368934,38 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg news, articles, wiki and predictions feed", + "summary": "Discover values in the creators dataset", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/player": { + "/datasets/creators/items/{creator_uid}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a BO3.gg player profile by slug: nickname, name, game, birthday, role, coach flag, country, current team and join date, six-month average rating, career prize money, social links, former names and tournament achievements newest first. Use `game` to insist on one game; a player of another game is not found.", - "operationId": "bo3-player", + "description": "Retrieves one public TikTok creator profile by `creator_uid`. Deleted/private accounts remain hidden unless `include_inactive=true`. Contact email stays redacted by default and `include_email=true` is honored only for entitled non-Free API keys.", + "operationId": "datasets-creators-item", "parameters": [ { - "description": "Player slug, for example donk", - "in": "query", - "name": "slug", + "description": "Exact creator_uid from a search result, e.g. tiktok:@handle", + "in": "path", + "name": "creator_uid", "required": true, - "type": "string", - "x-example": "donk" + "type": "string" }, { - "description": "Game the player must belong to; one of cs2, valorant, lol, dota2, r6siege, mlbb", - "enum": [ - "cs2", - "valorant", - "lol", - "dota2", - "r6siege", - "mlbb" - ], + "description": "Include deleted/private accounts for historical lookup", "in": "query", - "name": "game", - "type": "string" + "name": "include_inactive", + "type": "boolean" + }, + { + "description": "Return stored contact email only for entitled non-Free API keys", + "in": "query", + "name": "include_email", + "type": "boolean" } ], "produces": [ @@ -295339,19 +368975,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.PlayerInfo" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.creatorDatasetItemResponseDoc" } }, "400": { @@ -295372,8 +368996,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -295384,86 +369008,97 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg player profile", + "summary": "Get one stored TikTok creator", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/player-leaderboard": { + "/datasets/creators/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns BO3.gg's CS2 player leaderboard over a day range (default: the last six months): players ranked by `sort` (`rating`, `kd`, `kills`, `damage`, `assists`, `headshots`, `games`, `rounds`) in `order` (`desc`, `asc`), optionally limited to games at one tournament `tier` (`s` to `d`), with paging. Each player has team, games, rounds and every per-game average as a `stats` map; players below the API's minimum-games threshold for the window are excluded (`min_games_count`). CS2 only.", - "operationId": "bo3-player-leaderboard", + "description": "Searches TikTok creators stored in a search index (one document per creator), with follower counts, verified status, niche, and engagement. Deleted and private accounts are excluded by default; set `include_inactive=true` to include them for historical lookups. Sort enum: `followers_desc`, `engagement_desc`, `engagement_qualified_desc`, `likes_desc`, `relevance`. Coverage note: `followers_desc`, `likes_desc`, and `relevance` are backed by profile fields present across the full dataset; the post-level engagement metrics (`engagement_rate`, `avg_views`, and the nested `post_stats` object) and the `engagement_desc`/`engagement_qualified_desc` sorts are currently populated for a growing subset of creators, prioritizing the highest-reach accounts. Creators without these metrics are still returned but sort last under `engagement_desc` and omit those fields; `engagement_qualified_desc` excludes them outright (they cannot clear its floors). `engagement_desc` ranks by raw `engagement_rate` with no eligibility floor — it surfaces a real stale-record + ratio-by-design trap: an account whose last real post was years ago can still carry an unrealistic rate computed from a handful of old posts. `engagement_qualified_desc` is the same metric restricted to creators with a recent post (`last_post_at` within 90 days), a minimum reach (`avg_views >= 10000`) and sample size (`post_stats.sampled_posts >= 10`), and a sanity ceiling (`engagement_rate <= 50%`) — use this, not the raw sort, for a \"best engagement\" leaderboard. Sound fields: `post_stats.top_sounds` holds only a creator's FIVE most-used sounds from the sampled posts, ranked by use count with ties broken by lowest `music_id`, so it is a top-5 view and not the creator's full sound list; `post_stats.distinct_sounds` gives the true number of different sounds the sample used. Use each sound's `original` boolean to tell TikTok-generated original audio from catalogue tracks - do NOT infer it from the title, because TikTok localizes the original-audio label (`sonido original`, `som original`, `оригинальный звук`, and at least fifteen more), so a title match silently reclassifies original audio as named tracks. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-creators-search", "parameters": [ { - "description": "First day, YYYY-MM-DD (UTC); defaults to six months before to", + "description": "Full-text query over handle, nickname and bio, max 256 characters", "in": "query", - "name": "from", - "type": "string", - "x-example": "2026-04-28" + "name": "q", + "type": "string" }, { - "description": "Last day, YYYY-MM-DD (UTC); defaults to today", + "description": "Exact handle lookup (case-insensitive), e.g. khaby.lame; returns the single creator with that exact @handle", "in": "query", - "name": "to", - "type": "string", - "x-example": "2026-10-28" + "name": "handle", + "type": "string" }, { - "description": "Tournament tier of the games counted; one of s, a, b, c, d", - "enum": [ - "s", - "a", - "b", - "c", - "d" - ], + "description": "Exact content-niche filter, max 128 characters", "in": "query", - "name": "tier", + "name": "niche", "type": "string" }, { - "description": "Stat to rank by; one of rating, kd, kills, damage, assists, headshots, games, rounds; defaults to rating", - "enum": [ - "rating", - "kd", - "kills", - "damage", - "assists", - "headshots", - "games", - "rounds" - ], + "description": "Exact creator country/region filter, max 128 characters", "in": "query", - "name": "sort", + "name": "country", "type": "string" }, { - "description": "Direction; one of desc, asc; defaults to desc", + "description": "Filter by verified badge; true keeps only verified creators", + "in": "query", + "name": "verified", + "type": "boolean" + }, + { + "description": "Minimum follower count", + "in": "query", + "name": "min_followers", + "type": "integer" + }, + { + "description": "Filter by contact-email presence; true keeps only creators with an email", + "in": "query", + "name": "has_email", + "type": "boolean" + }, + { + "description": "Return the stored contact email instead of a blanked value. Off by default for everyone, and honoured only for entitled (non-Free) API keys", + "in": "query", + "name": "include_email", + "type": "boolean" + }, + { + "description": "Include deleted/private accounts; defaults to false (only live accounts returned)", + "in": "query", + "name": "include_inactive", + "type": "boolean" + }, + { + "description": "Sort enum: followers_desc, engagement_desc, engagement_qualified_desc, likes_desc, relevance. engagement_desc ranks by raw post-level engagement rate, currently populated for a subset of creators (highest-reach first); creators without it sort last. engagement_qualified_desc is the same metric restricted to creators with a recent post (<=90d), a minimum reach (avg_views>=10000) and sample size (>=10 posts), and a sanity ceiling (<=50%) -- use this, not the raw sort, for a 'best engagement' leaderboard", "enum": [ - "desc", - "asc" + "followers_desc", + "engagement_desc", + "engagement_qualified_desc", + "likes_desc", + "relevance" ], "in": "query", - "name": "order", + "name": "sort", "type": "string" }, { - "description": "Zero-based offset; defaults to 0", + "description": "Page number, defaults to 1", "in": "query", - "minimum": 0, - "name": "offset", + "name": "page", "type": "integer" }, { - "description": "Page size, 1 to 100; defaults to 20", + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", + "name": "page_size", "type": "integer" } ], @@ -295474,19 +369109,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.LeaderboardResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.creatorsSearchResponseDoc" } }, "400": { @@ -295501,8 +369124,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -295513,48 +369136,72 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg CS2 player leaderboard", + "summary": "Search the TikTok creators dataset", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/player-recent-matches": { + "/datasets/doordash-stores/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns a CS2 player's newest matches (up to 30) with the opponent, the tournament, the rounds played, each map in order with whether the player's team won it, and the player's own line for the match (rating, kills, deaths, assists, damage, first kills and deaths, trade kills and deaths, headshots, hits, shots, accuracy, money saved and equipment value). Filter by `opponent` or `tournament`. Date windows are not supported upstream; the list does not page past 30.", - "operationId": "bo3-player-recent-matches", + "description": "Returns terms aggregation counts for the DoorDash store directory. Facet enum: `country`, `state`, `city`, `tags`, `display_status`, `price_range`, `dash_pass_eligible`. Accepts the same filter parameters as search to scope the aggregation. Use `facet=tags` to discover the marketplace tag values accepted by the `tag` filter.", + "operationId": "datasets-doordash-stores-facets", "parameters": [ { - "description": "Player slug, for example donk", + "description": "Facet enum: country, state, city, tags, display_status, price_range, dash_pass_eligible", + "enum": [ + "country", + "state", + "city", + "tags", + "display_status", + "price_range", + "dash_pass_eligible" + ], "in": "query", - "name": "slug", + "name": "facet", "required": true, "type": "string", - "x-example": "donk" + "x-example": "country" }, { - "description": "Opposing team slug, for example mouz-cs2", + "description": "Full-text search over store name, address, city, and marketplace tags", "in": "query", - "name": "opponent", + "name": "q", "type": "string" }, { - "description": "Tournament slug from bo3-tournaments", + "description": "ISO-3166-1 alpha-2 country filter", "in": "query", - "name": "tournament", + "name": "country", "type": "string" }, { - "default": 10, - "description": "Newest matches to return, 1 to 30, default 10", + "description": "State/region code filter", "in": "query", - "maximum": 30, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "state", + "type": "string" + }, + { + "description": "Exact city filter", + "in": "query", + "name": "city", + "type": "string" + }, + { + "description": "Single marketplace tag filter", + "in": "query", + "name": "tag", + "type": "string" + }, + { + "description": "Keep only DashPass-eligible stores", + "in": "query", + "name": "dash_pass_only", + "type": "boolean" } ], "produces": [ @@ -295564,19 +369211,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.RecentMatchesResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.doorDashStoresFacetResponseDoc" } }, "400": { @@ -295585,20 +369220,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -295609,52 +369238,27 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg player recent matches", + "summary": "Facet stored DoorDash stores", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/player-stats": { + "/datasets/doordash-stores/items/{store_id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one statistics view of a BO3.gg player over a day range (default: the last six months): `general` (match, game, round, kill, death, assist and damage totals), `maps` (rating, kills and damage per map) or `accuracy` (hits, damage and kills by hit group). General views fill `stats`; the other views fill `rows`.", - "operationId": "bo3-player-stats", + "description": "Returns one stored DoorDash store by its DoorDash store id (digits only, e.g. `297068`) from dataset id `doordash-stores`. A store discovered but not yet hydrated may have an empty `address`/`phone` and no `location`. `display_status`, `asap_available`, and `pickup_available` are a point-in-time pickup observation at crawl time, not a durable capability.", + "operationId": "datasets-doordash-stores-item", "parameters": [ { - "description": "Player slug, for example donk", - "in": "query", - "name": "slug", + "description": "DoorDash store id (digits only), e.g. 297068", + "in": "path", + "name": "store_id", "required": true, "type": "string", - "x-example": "donk" - }, - { - "description": "Statistics view; one of general, maps, accuracy; defaults to general", - "enum": [ - "general", - "maps", - "accuracy" - ], - "in": "query", - "name": "kind", - "type": "string" - }, - { - "description": "First day, YYYY-MM-DD; defaults to six months before to", - "in": "query", - "name": "from", - "type": "string", - "x-example": "2026-04-28" - }, - { - "description": "Last day, YYYY-MM-DD; defaults to today (UTC)", - "in": "query", - "name": "to", - "type": "string", - "x-example": "2026-10-28" + "x-example": "297068" } ], "produces": [ @@ -295664,19 +369268,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.StatsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.doorDashStoreResponseDoc" } }, "400": { @@ -295697,8 +369289,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -295709,91 +369301,88 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg player statistics", + "summary": "Get a stored DoorDash store", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/records": { + "/datasets/doordash-stores/nearby": { "get": { "consumes": [ "application/json" ], - "description": "Returns BO3.gg's CS2 records (standout single-game and single-round performances such as best shots accuracy, clutches, multikills, damage, win streaks) with paging. Scope them to one `match`, `tournament`, `team` or `player` slug, filter by `record_type` (for example `game_player_headshots`), restrict the game day range with `from`/`to`, and order `newest` or `oldest`. Unscoped requests cover the last six months; each record has its value, unit, side, map, round, player, team and opponents.", - "operationId": "bo3-records", + "description": "Returns stored DoorDash stores within a radius of a point, nearest first, from dataset id `doordash-stores`. lat, lon, and radius_m are required. Unlike the live /doordash/search endpoint (which is a proximity search capped at roughly five stores), this queries the stored directory, so it can return every discovered store in the radius. Coverage is best-effort rather than provably exhaustive: a store DoorDash never surfaced, or one not yet hydrated with coordinates, will not appear. Billing: this endpoint costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-doordash-stores-nearby", "parameters": [ { - "description": "First day, YYYY-MM-DD (UTC); unscoped default is six months before to", + "description": "Center latitude, from -90 through 90", "in": "query", - "name": "from", - "type": "string", - "x-example": "2026-04-28" + "name": "lat", + "required": true, + "type": "number", + "x-example": 40.7484257 }, { - "description": "Last day, YYYY-MM-DD (UTC); unscoped default is today", + "description": "Center longitude, from -180 through 180", "in": "query", - "name": "to", - "type": "string", - "x-example": "2026-10-28" + "name": "lon", + "required": true, + "type": "number", + "x-example": -73.98567 }, { - "description": "Record type such as game_player_headshots or game_round_player_clutch; the types present are listed in the response", + "description": "Search radius in meters, 1 through 50000", "in": "query", - "name": "record_type", - "type": "string" + "name": "radius_m", + "required": true, + "type": "integer", + "x-example": 5000 }, { - "description": "Match slug to scope the records to one match", + "description": "ISO-3166-1 alpha-2 country filter", "in": "query", - "name": "match", - "type": "string", - "x-example": "vitality-vs-natus-vincere-27-10-2026" + "name": "country", + "type": "string" }, { - "description": "Tournament slug to scope the records to one tournament", + "description": "Single marketplace tag filter", "in": "query", - "name": "tournament", - "type": "string", - "x-example": "pgl-masters-bucharest-2026" + "name": "tag", + "type": "string" }, { - "description": "Team slug to scope the records to one team", + "description": "Keep only DashPass-eligible stores", "in": "query", - "name": "team", - "type": "string", - "x-example": "vitality" + "name": "dash_pass_only", + "type": "boolean" }, { - "description": "Player slug to scope the records to one player", + "description": "Pagination mode: offset or cursor. Cursor mode supports full enumeration beyond the offset result window.", + "enum": [ + "offset", + "cursor" + ], "in": "query", - "name": "player", - "type": "string", - "x-example": "donk" + "name": "pagination", + "type": "string" }, { - "description": "Order by game time; one of newest, oldest; defaults to newest", - "enum": [ - "newest", - "oldest" - ], + "description": "Opaque continuation token returned in next_cursor; use with pagination=cursor and the same location and filters", "in": "query", - "name": "sort", + "name": "cursor", "type": "string" }, { - "description": "Zero-based offset; defaults to 0", + "description": "Offset page number, defaults to 1; ignored by cursor pagination except page=1 to start", "in": "query", - "minimum": 0, - "name": "offset", + "name": "page", "type": "integer" }, { - "description": "Page size, 1 to 100; defaults to 20", + "description": "Page size, defaults to 20 and maxes at 100; the 10,000-result cap applies only to offset pagination", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", + "name": "page_size", "type": "integer" } ], @@ -295804,19 +369393,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.RecordsFeedResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.doorDashStoresSearchResponseDoc" } }, "400": { @@ -295831,8 +369408,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -295843,41 +369420,131 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg CS2 records with scope and type filters", + "summary": "Find nearby stored DoorDash stores", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/team": { + "/datasets/doordash-stores/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a BO3.gg team profile by slug: name, acronym, game, world rank and rank change, country and region, founding date, six-month earnings, logo, social links, former names, the current roster (nickname, name, birthday, six-month rating) and the team's tournament achievements, newest first. Use `game` to insist on one game; a team of another game is not found.", - "operationId": "bo3-team", + "description": "Searches the DoorDash merchant-location directory (dataset id `doordash-stores`). Identity and marketplace fields (name, marketplace tags, price range, ratings, DashPass eligibility) are available for each store; contact, address, and coordinates can be missing for a store that has not been fully processed yet. `display_status`, `display_asap_time`, `asap_available`, and `pickup_available` are a point-in-time observation of the PICKUP surface at crawl time, not a durable capability. Geographic coverage is best-effort. Supports full-text `q`, `country`/`state`/`city`/`tag` filters, `dash_pass_only`, `min_price`/`max_price`/`min_rating`, `lat`/`lon`/`radius_m` radius filtering, and `sort` (relevance, rating, distance, distance_asc). `sort=relevance` ranks by text-match score when `q` is supplied; without `q` it sorts by store name. Use `pagination=cursor` and the returned `next_cursor` to enumerate beyond the 10,000-result offset window against a point-in-time snapshot. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-doordash-stores-search", "parameters": [ { - "description": "Team slug, for example vitality", + "description": "Full-text search over store name, address, city, and marketplace tags, max 256 characters", "in": "query", - "name": "slug", - "required": true, - "type": "string", - "x-example": "vitality" + "name": "q", + "type": "string" }, { - "description": "Game the team must belong to; one of cs2, valorant, lol, dota2, r6siege, mlbb", + "description": "ISO-3166-1 alpha-2 country filter, e.g. US, CA", + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "State/region code filter, e.g. CA", + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "Exact city filter", + "in": "query", + "name": "city", + "type": "string" + }, + { + "description": "Single marketplace tag filter, e.g. Pizza", + "in": "query", + "name": "tag", + "type": "string" + }, + { + "description": "Keep only DashPass-eligible stores", + "in": "query", + "name": "dash_pass_only", + "type": "boolean" + }, + { + "description": "Minimum price range tier, inclusive", + "in": "query", + "name": "min_price", + "type": "integer" + }, + { + "description": "Maximum price range tier, inclusive", + "in": "query", + "name": "max_price", + "type": "integer" + }, + { + "description": "Minimum aggregate rating, 0 through 5; excludes unrated stores", + "in": "query", + "name": "min_rating", + "type": "number" + }, + { + "description": "Latitude for radius filtering or distance sort, requires lon", + "in": "query", + "name": "lat", + "type": "number" + }, + { + "description": "Longitude for radius filtering or distance sort, requires lat", + "in": "query", + "name": "lon", + "type": "number" + }, + { + "description": "Radius in meters, 1 through 50000; requires lat and lon", + "in": "query", + "name": "radius_m", + "type": "integer" + }, + { + "description": "Sort enum: relevance, rating, distance, distance_asc", "enum": [ - "cs2", - "valorant", - "lol", - "dota2", - "r6siege", - "mlbb" + "relevance", + "rating", + "distance", + "distance_asc" ], "in": "query", - "name": "game", + "name": "sort", + "type": "string" + }, + { + "description": "Pagination mode: offset or cursor. Cursor mode supports full enumeration beyond the offset result window.", + "enum": [ + "offset", + "cursor" + ], + "in": "query", + "name": "pagination", + "type": "string" + }, + { + "description": "Opaque continuation token returned in next_cursor; use with pagination=cursor and the same filters and sort", + "in": "query", + "name": "cursor", "type": "string" + }, + { + "description": "Offset page number, defaults to 1; ignored by cursor pagination except page=1 to start", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; the 10,000-result cap applies only to offset pagination", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -295887,19 +369554,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.TeamInfo" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.doorDashStoresSearchResponseDoc" } }, "400": { @@ -295908,20 +369563,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -295932,62 +369581,144 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg team profile", + "summary": "Search the DoorDash store directory", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/team-prize-money": { + "/datasets/facebook-pages/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns BO3.gg's teams ranked by the prize money they won in tournaments that ended inside a day range (default: the last six months), for one game with paging up to 100 per page. Each team has its prize money in USD, tournament wins, country and region and its current roster with each player's career prize money and six-month rating. `total` and `has_more` page through all teams that earned money in the window.", - "operationId": "bo3-team-prize-money", + "description": "Returns value counts for the Facebook Pages dataset, by the required `facet`: `category` or `discovery_source`. Search filters such as `q`, `min_likes` and `has_email` narrow the counts. Default order is most common first; `order=value_asc` pages alphabetically using `after` and `next_after`, with `limit` up to 200.", + "operationId": "datasets-facebook-pages-facets", "parameters": [ { - "description": "Game; one of cs2, valorant, lol, dota2, r6siege, mlbb; defaults to cs2", + "description": "Facet values per response, default 50, maximum 200", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "count_desc returns most common values; value_asc pages through all values", "enum": [ - "cs2", - "valorant", - "lol", - "dota2", - "r6siege", - "mlbb" + "count_desc", + "value_asc" ], "in": "query", - "name": "game", + "name": "order", "type": "string" }, { - "description": "First day, YYYY-MM-DD (UTC); defaults to six months before to", + "description": "Continuation from next_after; requires order=value_asc and unchanged filters", "in": "query", - "name": "from", - "type": "string", - "x-example": "2026-04-28" + "name": "after", + "type": "string" }, { - "description": "Last day, YYYY-MM-DD (UTC); defaults to today", + "description": "Facet enum: category, discovery_source", + "enum": [ + "category", + "discovery_source" + ], "in": "query", - "name": "to", + "name": "facet", + "required": true, "type": "string", - "x-example": "2026-10-28" + "x-example": "category" }, { - "description": "Zero-based offset; defaults to 0", + "description": "Full-text query over title and address, max 256 characters", "in": "query", - "minimum": 0, - "name": "offset", + "name": "q", + "type": "string" + }, + { + "description": "Exact Facebook Page id filter, max 128 characters", + "in": "query", + "name": "page_id", + "type": "string" + }, + { + "description": "Exact Page username/identifier filter (case-insensitive), max 128 characters", + "in": "query", + "name": "identifier", + "type": "string" + }, + { + "description": "Exact Page category filter (case-insensitive), max 128 characters", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Exact filter for how the Page was discovered (e.g. business_search, warc_domain_scan, wikidata), max 128 characters", + "in": "query", + "name": "discovery_source", + "type": "string" + }, + { + "description": "Filter by a linked website", + "in": "query", + "name": "has_website", + "type": "boolean" + }, + { + "description": "Filter by a public contact email", + "in": "query", + "name": "has_email", + "type": "boolean" + }, + { + "description": "Filter by at least one public phone number", + "in": "query", + "name": "has_phone", + "type": "boolean" + }, + { + "description": "Filter by a public WhatsApp contact", + "in": "query", + "name": "has_whatsapp", + "type": "boolean" + }, + { + "description": "Minimum Page like count", + "in": "query", + "name": "min_likes", "type": "integer" }, { - "description": "Page size, 1 to 100; defaults to 20", + "description": "Maximum Page like count", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", + "name": "max_likes", "type": "integer" + }, + { + "description": "Records last refreshed on or after this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "hydrated_after", + "type": "string" + }, + { + "description": "Records last refreshed on or before this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "hydrated_before", + "type": "string" + }, + { + "description": "Sort enum: relevance, likes_desc, likes_asc, hydrated_at_desc, hydrated_at_asc", + "enum": [ + "relevance", + "likes_desc", + "likes_asc", + "hydrated_at_desc", + "hydrated_at_asc" + ], + "in": "query", + "name": "sort", + "type": "string" } ], "produces": [ @@ -295997,19 +369728,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.TeamPrizeMoneyResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.facebookPagesFacetResponseDoc" } }, "400": { @@ -296024,8 +369743,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -296036,33 +369755,27 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg team prize money by period", + "summary": "Facet the Facebook Pages dataset", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/team-ranking-dates": { + "/datasets/facebook-pages/items/{page_id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns the days for which Valve published an official ranking for a game (newest first) and the region labels BO3.gg accepts for that game's team rankings. Use it to choose `date` and `region` for bo3-team-rankings.", - "operationId": "bo3-team-ranking-dates", + "description": "Returns one public Facebook Page contact record from the dataset by `page_id`: title, username, category, address, website, email, phones, WhatsApp, like count and source URL. `contact_observed_at` marks when contact fields were last seen complete. A Page not in the dataset returns 404.", + "operationId": "datasets-facebook-pages-item", "parameters": [ { - "description": "Game; one of cs2, valorant, lol, dota2, r6siege, mlbb; defaults to cs2", - "enum": [ - "cs2", - "valorant", - "lol", - "dota2", - "r6siege", - "mlbb" - ], - "in": "query", - "name": "game", - "type": "string" + "description": "Facebook Page id, max 128 characters", + "in": "path", + "name": "page_id", + "required": true, + "type": "string", + "x-example": "100067013529598" } ], "produces": [ @@ -296072,19 +369785,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.TeamRankingDatesResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.facebookPageResponseDoc" } }, "400": { @@ -296105,8 +369806,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -296117,156 +369818,121 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg official ranking dates and regions", + "summary": "Get a Facebook Page from the dataset", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/team-rankings": { + "/datasets/facebook-pages/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns BO3.gg's team ranking for a game, worldwide or for one region, for the latest day or any past `date`, paged up to 100 per page. A date that Valve published (listed by bo3-team-ranking-dates) returns the official Valve ranking (`source` `valve_official`, `official` true); other dates return BO3.gg's own daily ranking (`internal`). Rows carry rank, rank change, points, region, country and the five-player roster with ratings.", - "operationId": "bo3-team-rankings", + "description": "Searches public Facebook Page contact records stored in a search index — website, email, phone, WhatsApp, category and like count, discovered through business-search enumeration, domain-scoped scans, and Wikidata seeding, then hydrated from each Page's public About tab. Sort enum: `relevance`, `likes_desc`, `likes_asc`, `hydrated_at_desc`, `hydrated_at_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-facebook-pages-search", "parameters": [ { - "description": "Game; one of cs2, valorant, lol, dota2, r6siege, mlbb; defaults to cs2", - "enum": [ - "cs2", - "valorant", - "lol", - "dota2", - "r6siege", - "mlbb" - ], + "description": "Full-text query over title and address, max 256 characters", "in": "query", - "name": "game", + "name": "q", "type": "string" }, { - "description": "Region label for the game as listed by bo3-team-ranking-dates, for example Europe; omit for worldwide", + "description": "Exact Facebook Page id filter, max 128 characters", "in": "query", - "name": "region", + "name": "page_id", "type": "string" }, { - "description": "Ranking day, YYYY-MM-DD; defaults to the latest", + "description": "Exact Page username/identifier filter (case-insensitive), max 128 characters", "in": "query", - "name": "date", - "type": "string", - "x-example": "2026-10-05" + "name": "identifier", + "type": "string" }, { - "description": "1-based page; defaults to 1", + "description": "Exact Page category filter (case-insensitive), max 128 characters", "in": "query", - "minimum": 1, - "name": "page", - "type": "integer" + "name": "category", + "type": "string" }, { - "description": "Page size, 1 to 100; defaults to 30", + "description": "Exact filter for how the Page was discovered (e.g. business_search, warc_domain_scan, wikidata), max 128 characters", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "per_page", - "type": "integer" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.TeamRankingsResponse" - } - }, - "type": "object" - } - ] - } + "name": "discovery_source", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Filter by a linked website", + "in": "query", + "name": "has_website", + "type": "boolean" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Filter by a public contact email", + "in": "query", + "name": "has_email", + "type": "boolean" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Filter by at least one public phone number", + "in": "query", + "name": "has_phone", + "type": "boolean" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "BO3.gg team rankings, current and historical", - "tags": [ - "BO3" - ] - } - }, - "/bo3/team-recent-matches": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a CS2 team's newest matches (up to 30) with, for every match, the opponent, the tournament, the rounds played, each map played in order and every player's line (rating, kills, deaths, assists, damage, first kills and deaths, trade kills and deaths, headshots, hits, shots, accuracy, money saved and equipment value). Filter by `opponent` for head-to-head history or by `tournament` for one event. Date windows are not supported upstream; the newest matches come first and the list does not page past 30.", - "operationId": "bo3-team-recent-matches", - "parameters": [ + "description": "Filter by a public WhatsApp contact", + "in": "query", + "name": "has_whatsapp", + "type": "boolean" + }, { - "description": "Team slug, for example vitality", + "description": "Minimum Page like count", "in": "query", - "name": "slug", - "required": true, - "type": "string", - "x-example": "vitality" + "name": "min_likes", + "type": "integer" }, { - "description": "Opposing team slug for head-to-head matches, for example natus-vincere", + "description": "Maximum Page like count", "in": "query", - "name": "opponent", + "name": "max_likes", + "type": "integer" + }, + { + "description": "Records last refreshed on or after this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "hydrated_after", "type": "string" }, { - "description": "Tournament slug from bo3-tournaments", + "description": "Records last refreshed on or before this date (RFC3339 or YYYY-MM-DD)", "in": "query", - "name": "tournament", + "name": "hydrated_before", "type": "string" }, { - "default": 10, - "description": "Newest matches to return, 1 to 30, default 10", + "description": "Sort enum: relevance, likes_desc, likes_asc, hydrated_at_desc, hydrated_at_asc", + "enum": [ + "relevance", + "likes_desc", + "likes_asc", + "hydrated_at_desc", + "hydrated_at_asc" + ], "in": "query", - "maximum": 30, - "minimum": 1, - "name": "limit", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", "type": "integer" } ], @@ -296277,19 +369943,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.RecentMatchesResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.facebookPagesSearchResponseDoc" } }, "400": { @@ -296298,20 +369952,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -296322,54 +369970,229 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg team recent matches", + "summary": "Search the Facebook Pages dataset", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/team-stats": { + "/datasets/github-users/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns one statistics view of a BO3.gg team over a day range (default: the last six months): `general` (match, game, round and kill totals), `advanced` (CT/T, pistol, eco, force and full-buy round records), `accuracy` (hits and damage by hit group), `economy` (win rate by own and enemy economy level) or `map-pool` (maps picked and banned). General views fill `stats`; the other views fill `rows`.", - "operationId": "bo3-team-stats", + "description": "Returns terms aggregation counts for the GitHub users dataset. Facet enum: `influence_tier`, `type`, `country`, `country_code`, `state`, `city`, `domains`, `company`, `reachable`, `has_email`, `has_twitter`, `has_blog`, `active_90d`, `hireable`, `is_org`, `is_bot`, `is_suspected_automation`. influence_tier enum: `nano`, `micro`, `mid`, `macro`, `mega`. Suspected-automation records are excluded by default unless is_suspected_automation is set.", + "operationId": "datasets-github-users-facets", "parameters": [ { - "description": "Team slug, for example vitality", + "description": "Facet enum: influence_tier, type, country, country_code, state, city, domains, company, reachable, has_email, has_twitter, has_blog, active_90d, hireable, is_org, is_bot, is_suspected_automation", + "enum": [ + "influence_tier", + "type", + "country", + "country_code", + "state", + "city", + "domains", + "company", + "reachable", + "has_email", + "has_twitter", + "has_blog", + "active_90d", + "hireable", + "is_org", + "is_bot", + "is_suspected_automation" + ], "in": "query", - "name": "slug", + "name": "facet", "required": true, "type": "string", - "x-example": "vitality" + "x-example": "influence_tier" }, { - "description": "Statistics view; one of general, advanced, accuracy, economy, map-pool; defaults to general", + "description": "Full-text query over login, name, company, bio and location, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Exact login filter, max 128 characters", + "in": "query", + "name": "login", + "type": "string" + }, + { + "description": "Exact normalized-company filter, max 128 characters", + "in": "query", + "name": "company", + "type": "string" + }, + { + "description": "Follower-tier enum: nano, micro, mid, macro, mega", "enum": [ - "general", - "advanced", - "accuracy", - "economy", - "map-pool" + "nano", + "micro", + "mid", + "macro", + "mega" ], "in": "query", - "name": "kind", + "name": "influence_tier", "type": "string" }, { - "description": "First day, YYYY-MM-DD; defaults to six months before to", + "description": "Exact geocoded country filter, max 128 characters", "in": "query", - "name": "from", - "type": "string", - "x-example": "2026-04-28" + "name": "country", + "type": "string" }, { - "description": "Last day, YYYY-MM-DD; defaults to today (UTC)", + "description": "Exact ISO country-code filter, max 128 characters", "in": "query", - "name": "to", - "type": "string", - "x-example": "2026-10-28" + "name": "country_code", + "type": "string" + }, + { + "description": "Exact geocoded state filter, max 128 characters", + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "Exact geocoded city filter, max 128 characters", + "in": "query", + "name": "city", + "type": "string" + }, + { + "description": "Interest-domain tag filter, max 128 characters", + "in": "query", + "name": "domain", + "type": "string" + }, + { + "description": "Filter by public email presence", + "in": "query", + "name": "has_email", + "type": "boolean" + }, + { + "description": "Filter by public Twitter/X handle presence", + "in": "query", + "name": "has_twitter", + "type": "boolean" + }, + { + "description": "Filter by public blog/website presence", + "in": "query", + "name": "has_blog", + "type": "boolean" + }, + { + "description": "Filter by any public contact channel", + "in": "query", + "name": "reachable", + "type": "boolean" + }, + { + "description": "Filter by activity within the last 90 days", + "in": "query", + "name": "active_90d", + "type": "boolean" + }, + { + "description": "Filter by the GitHub available-for-hire flag", + "in": "query", + "name": "hireable", + "type": "boolean" + }, + { + "description": "Organization filter", + "in": "query", + "name": "is_org", + "type": "boolean" + }, + { + "description": "Bot filter", + "in": "query", + "name": "is_bot", + "type": "boolean" + }, + { + "description": "Suspected automation filter; omitted these are hidden by default", + "in": "query", + "name": "is_suspected_automation", + "type": "boolean" + }, + { + "description": "Minimum follower count", + "in": "query", + "name": "min_followers", + "type": "integer" + }, + { + "description": "Maximum follower count", + "in": "query", + "name": "max_followers", + "type": "integer" + }, + { + "description": "Minimum public repository count", + "in": "query", + "name": "min_repos", + "type": "integer" + }, + { + "description": "Minimum composite rank score", + "in": "query", + "name": "min_rank_score", + "type": "integer" + }, + { + "description": "Minimum account age in years", + "in": "query", + "name": "min_account_age_years", + "type": "number" + }, + { + "description": "Maximum account age in years", + "in": "query", + "name": "max_account_age_years", + "type": "number" + }, + { + "description": "Latitude for radius filtering", + "in": "query", + "name": "lat", + "type": "number" + }, + { + "description": "Longitude for radius filtering", + "in": "query", + "name": "lon", + "type": "number" + }, + { + "description": "Radius in meters, 1 through 50000; requires lat and lon when supplied", + "in": "query", + "name": "radius_m", + "type": "integer" + }, + { + "description": "Sort enum: relevance, rank_score_desc, followers_desc, account_age_desc, account_age_asc, distance_asc", + "enum": [ + "relevance", + "rank_score_desc", + "followers_desc", + "account_age_desc", + "account_age_asc", + "distance_asc" + ], + "in": "query", + "name": "sort", + "type": "string" } ], "produces": [ @@ -296379,19 +370202,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.StatsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.githubUsersFacetResponseDoc" } }, "400": { @@ -296400,20 +370211,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -296424,41 +370229,27 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg team statistics", + "summary": "Facet the GitHub users dataset", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/tournament": { + "/datasets/github-users/items/{login}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one BO3.gg tournament by slug: name, status, tier, event type, prize pool, dates, description, series, host city, country and region, its stages (format, status, dates), the prize distribution by place and the participating teams with their placement and prize money. The slug comes from bo3-tournaments.", - "operationId": "bo3-tournament", + "description": "Returns one GitHub user from the dataset by `login`, with profile fields (name, bio, company, blog, location, email), follower, repo and 30-day activity counts, `influence_tier`, `rank_score`, geo, linked social accounts and bot or organisation flags. An unknown login returns 404.", + "operationId": "datasets-github-users-item", "parameters": [ { - "description": "Tournament slug from bo3-tournaments, for example pgl-masters-bucharest-2026", - "in": "query", - "name": "slug", + "description": "GitHub login, max 128 characters", + "in": "path", + "name": "login", "required": true, "type": "string", - "x-example": "pgl-masters-bucharest-2026" - }, - { - "description": "Game; one of cs2, valorant, lol, dota2, r6siege, mlbb; defaults to cs2", - "enum": [ - "cs2", - "valorant", - "lol", - "dota2", - "r6siege", - "mlbb" - ], - "in": "query", - "name": "game", - "type": "string" + "x-example": "claude" } ], "produces": [ @@ -296468,19 +370259,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.TournamentInfo" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.githubUserResponseDoc" } }, "400": { @@ -296501,8 +370280,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -296513,27 +370292,80 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg tournament detail", + "summary": "Get a GitHub user from the dataset", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/tournament-map-pool": { + "/datasets/github-users/nearby": { "get": { "consumes": [ "application/json" ], - "description": "Returns the maps played at a CS2 tournament: games and rounds per map, CT-side and T-side round wins with the CT win percentage, and picked and banned counts. The upstream returns the whole event and ignores stage filters.", - "operationId": "bo3-tournament-map-pool", + "description": "Searches enriched GitHub users near a coordinate, sorted by distance, in dataset id enum value `github-users`. influence_tier enum: `nano`, `micro`, `mid`, `macro`, `mega`. Billing: this endpoint costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-github-users-nearby", "parameters": [ { - "description": "CS2 tournament slug from bo3-tournaments, for example pgl-masters-bucharest-2026", + "description": "Latitude", "in": "query", - "name": "slug", + "name": "lat", "required": true, - "type": "string", - "x-example": "pgl-masters-bucharest-2026" + "type": "number", + "x-example": 40.7484257 + }, + { + "description": "Longitude", + "in": "query", + "name": "lon", + "required": true, + "type": "number", + "x-example": -73.98567 + }, + { + "description": "Radius in meters, max 50000", + "in": "query", + "name": "radius_m", + "required": true, + "type": "integer", + "x-example": 5000 + }, + { + "description": "Follower-tier enum: nano, micro, mid, macro, mega", + "enum": [ + "nano", + "micro", + "mid", + "macro", + "mega" + ], + "in": "query", + "name": "influence_tier", + "type": "string" + }, + { + "description": "Filter by any public contact channel", + "in": "query", + "name": "reachable", + "type": "boolean" + }, + { + "description": "Minimum follower count", + "in": "query", + "name": "min_followers", + "type": "integer" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -296543,19 +370375,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.TournamentMapPoolResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.githubUsersSearchResponseDoc" } }, "400": { @@ -296564,20 +370384,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -296588,47 +370402,213 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg CS2 tournament map pool", + "summary": "Search nearby GitHub users", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/tournament-mvps": { + "/datasets/github-users/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns the tournament most-valuable-player awards BO3.gg publishes, newest first, optionally for one game: the award type, tournament, player, team and the BO3 article about it. Every row seen has the type `mvp`.", - "operationId": "bo3-tournament-mvps", + "description": "Searches enriched public GitHub user profiles stored in a search index. influence_tier enum: `nano`, `micro`, `mid`, `macro`, `mega`. Sort enum: `relevance`, `rank_score_desc`, `followers_desc`, `account_age_desc`, `account_age_asc`, `distance_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-github-users-search", "parameters": [ { - "description": "Game; one of cs2, valorant, lol, dota2, r6siege, mlbb; defaults to every game", + "description": "Full-text query over login, name, company, bio and location, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Exact login filter, max 128 characters", + "in": "query", + "name": "login", + "type": "string" + }, + { + "description": "Exact normalized-company filter, max 128 characters", + "in": "query", + "name": "company", + "type": "string" + }, + { + "description": "Follower-tier enum: nano, micro, mid, macro, mega", "enum": [ - "cs2", - "valorant", - "lol", - "dota2", - "r6siege", - "mlbb" + "nano", + "micro", + "mid", + "macro", + "mega" ], "in": "query", - "name": "game", + "name": "influence_tier", "type": "string" }, { - "description": "Zero-based offset; defaults to 0", + "description": "Exact geocoded country filter, max 128 characters", "in": "query", - "minimum": 0, - "name": "offset", + "name": "country", + "type": "string" + }, + { + "description": "Exact ISO country-code filter, max 128 characters", + "in": "query", + "name": "country_code", + "type": "string" + }, + { + "description": "Exact geocoded state filter, max 128 characters", + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "Exact geocoded city filter, max 128 characters", + "in": "query", + "name": "city", + "type": "string" + }, + { + "description": "Interest-domain tag filter (e.g. ml-ai, web, devops), max 128 characters", + "in": "query", + "name": "domain", + "type": "string" + }, + { + "description": "Filter by public email presence", + "in": "query", + "name": "has_email", + "type": "boolean" + }, + { + "description": "Filter by public Twitter/X handle presence", + "in": "query", + "name": "has_twitter", + "type": "boolean" + }, + { + "description": "Filter by public blog/website presence", + "in": "query", + "name": "has_blog", + "type": "boolean" + }, + { + "description": "Filter by any public contact channel", + "in": "query", + "name": "reachable", + "type": "boolean" + }, + { + "description": "Filter by activity within the last 90 days", + "in": "query", + "name": "active_90d", + "type": "boolean" + }, + { + "description": "Filter by the GitHub available-for-hire flag", + "in": "query", + "name": "hireable", + "type": "boolean" + }, + { + "description": "Organization filter (normally false; the crawl indexes individuals)", + "in": "query", + "name": "is_org", + "type": "boolean" + }, + { + "description": "Bot filter (normally false; the crawl skips bots)", + "in": "query", + "name": "is_bot", + "type": "boolean" + }, + { + "description": "Suspected automation (commit-farm/mass-repo bots); omitted these are hidden by default, pass true to isolate them", + "in": "query", + "name": "is_suspected_automation", + "type": "boolean" + }, + { + "description": "Minimum follower count", + "in": "query", + "name": "min_followers", "type": "integer" }, { - "description": "Page size, 1 to 100; defaults to 20", + "description": "Maximum follower count", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", + "name": "max_followers", + "type": "integer" + }, + { + "description": "Minimum public repository count", + "in": "query", + "name": "min_repos", + "type": "integer" + }, + { + "description": "Minimum composite rank score", + "in": "query", + "name": "min_rank_score", + "type": "integer" + }, + { + "description": "Minimum account age in years", + "in": "query", + "name": "min_account_age_years", + "type": "number" + }, + { + "description": "Maximum account age in years", + "in": "query", + "name": "max_account_age_years", + "type": "number" + }, + { + "description": "Latitude for radius filtering or distance sort", + "in": "query", + "name": "lat", + "type": "number" + }, + { + "description": "Longitude for radius filtering or distance sort", + "in": "query", + "name": "lon", + "type": "number" + }, + { + "description": "Radius in meters, 1 through 50000; requires lat and lon when supplied", + "in": "query", + "name": "radius_m", + "type": "integer" + }, + { + "description": "Sort enum: relevance, rank_score_desc, followers_desc, account_age_desc, account_age_asc, distance_asc", + "enum": [ + "relevance", + "rank_score_desc", + "followers_desc", + "account_age_desc", + "account_age_asc", + "distance_asc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", "type": "integer" } ], @@ -296639,19 +370619,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.TournamentMVPsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.githubUsersSearchResponseDoc" } }, "400": { @@ -296660,20 +370628,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -296684,27 +370646,67 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg esports tournament MVPs", + "summary": "Search the GitHub users dataset", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/tournament-squads": { + "/datasets/goodreads-authors/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns every team's squad at a CS2 tournament as it played there: team, and each player with nickname, name, photo, coach flag and stand-in flag. Use it to see who actually played, including substitutes.", - "operationId": "bo3-tournament-squads", + "description": "Returns value counts over the Goodreads authors dataset for the required `facet`, either `genres` or `run_id`. Filters `q`, `name`, `genre`, `run_id`, `min_rating` (0 to 5) and `min_ratings_count` narrow the result, which lists the top 50 values with their counts.", + "operationId": "datasets-goodreads-authors-facets", "parameters": [ { - "description": "CS2 tournament slug from bo3-tournaments, for example pgl-masters-bucharest-2026", + "description": "Facet enum: genres, run_id", + "enum": [ + "genres", + "run_id" + ], "in": "query", - "name": "slug", + "name": "facet", "required": true, "type": "string", - "x-example": "pgl-masters-bucharest-2026" + "x-example": "genres" + }, + { + "description": "Full-text query over name, about and genres, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Exact author name filter, max 128 characters", + "in": "query", + "name": "name", + "type": "string" + }, + { + "description": "Exact genre filter, max 128 characters", + "in": "query", + "name": "genre", + "type": "string" + }, + { + "description": "Exact crawl run-id filter, max 128 characters", + "in": "query", + "name": "run_id", + "type": "string" + }, + { + "description": "Minimum average rating, 0 through 5", + "in": "query", + "name": "min_rating", + "type": "number" + }, + { + "description": "Minimum number of ratings", + "in": "query", + "name": "min_ratings_count", + "type": "integer" } ], "produces": [ @@ -296714,19 +370716,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.TournamentSquadsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.goodreadsAuthorsFacetResponseDoc" } }, "400": { @@ -296735,20 +370725,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -296759,41 +370743,27 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg CS2 tournament squads", + "summary": "Facet Goodreads authors dataset", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/tournament-stages": { + "/datasets/goodreads-authors/items/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns the stages of one BO3.gg tournament in order: title, format type (for example `group` or `playoff`), whether it is on hold, promotion team count and dates. An unknown tournament slug returns 404.", - "operationId": "bo3-tournament-stages", + "description": "Returns one Goodreads author from the dataset by numeric author `id`. The record has name, about text, genres, birth and death dates, website, average rating, ratings and reviews counts, image and Goodreads URL. An id not in the dataset returns 404.", + "operationId": "datasets-goodreads-authors-item", "parameters": [ { - "description": "Game; one of cs2, valorant, lol, dota2, r6siege, mlbb; defaults to cs2", - "enum": [ - "cs2", - "valorant", - "lol", - "dota2", - "r6siege", - "mlbb" - ], - "in": "query", - "name": "game", - "type": "string" - }, - { - "description": "Tournament slug from bo3-tournaments, for example pgl-masters-bucharest-2026", - "in": "query", - "name": "slug", + "description": "Goodreads author id, e.g. 153394", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "pgl-masters-bucharest-2026" + "x-example": "153394" } ], "produces": [ @@ -296803,19 +370773,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.TournamentStagesResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.goodreadsAuthorResponseDoc" } }, "400": { @@ -296836,8 +370794,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -296848,92 +370806,78 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg esports tournament stages", + "summary": "Get a Goodreads author from dataset", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/tournaments": { + "/datasets/goodreads-authors/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns BO3.gg esports tournaments for one game with paging and filters: `status` (`current`, `upcoming`, `finished`), `tier` (`s` to `d`), `event_type` (`lan`, `online`) and `sort` (`newest`, `oldest`, `prize` for the largest prize pool first), up to 100 per page. Each tournament has its slug, name, status, tier, event type, prize pool in USD, dates and image; `total` and `has_more` page through the full list (over 3,000 CS2 events).", - "operationId": "bo3-tournaments", + "description": "Searches the crawled public Goodreads author profile index. Authors are discovered as a byproduct of the books crawl (every credited book contributor, plus the genre/search/list seed sources) — not a full catalog. Sort enum: `relevance`, `rating_desc`, `reviews_desc`, `name_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-goodreads-authors-search", "parameters": [ { - "description": "Game; one of cs2, valorant, lol, dota2, r6siege, mlbb; defaults to cs2", - "enum": [ - "cs2", - "valorant", - "lol", - "dota2", - "r6siege", - "mlbb" - ], + "description": "Full-text query over name, about and genres, max 256 characters", "in": "query", - "name": "game", + "name": "q", "type": "string" }, { - "description": "Tournament status; one of current, upcoming, finished", - "enum": [ - "current", - "upcoming", - "finished" - ], + "description": "Exact author name filter, max 128 characters", "in": "query", - "name": "status", + "name": "name", "type": "string" }, { - "description": "Tournament tier; one of s, a, b, c, d", - "enum": [ - "s", - "a", - "b", - "c", - "d" - ], + "description": "Exact genre filter (e.g. Fantasy, Romance, Nonfiction), max 128 characters", "in": "query", - "name": "tier", + "name": "genre", "type": "string" }, { - "description": "Event type; one of lan, online", - "enum": [ - "lan", - "online" - ], + "description": "Exact crawl run-id filter, max 128 characters", "in": "query", - "name": "event_type", + "name": "run_id", "type": "string" }, { - "description": "Order; one of newest, oldest, prize; defaults to newest", + "description": "Minimum average rating, 0 through 5", + "in": "query", + "name": "min_rating", + "type": "number" + }, + { + "description": "Minimum number of ratings", + "in": "query", + "name": "min_ratings_count", + "type": "integer" + }, + { + "description": "Sort enum: relevance, rating_desc, reviews_desc, name_asc", "enum": [ - "newest", - "oldest", - "prize" + "relevance", + "rating_desc", + "reviews_desc", + "name_asc" ], "in": "query", "name": "sort", "type": "string" }, { - "description": "Zero-based offset; defaults to 0", + "description": "Page number, defaults to 1", "in": "query", - "minimum": 0, - "name": "offset", + "name": "page", "type": "integer" }, { - "description": "Page size, 1 to 100; defaults to 20", + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", + "name": "page_size", "type": "integer" } ], @@ -296944,19 +370888,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.TournamentListResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.goodreadsAuthorsSearchResponseDoc" } }, "400": { @@ -296971,8 +370903,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -296983,79 +370915,197 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg tournament list with filters", + "summary": "Search Goodreads authors dataset", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/transfers": { + "/datasets/goodreads-books/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns BO3.gg's esports player and coach transfer feed, newest first by default, with paging and filters: `team_id` (moves into or out of one team), `player_id`, `action` (`join`, `change`, `leave`) and `role` (`player`, `coach`). The feed cannot be filtered by game upstream, so every row carries its `game` instead; narrow it with a team or player id.", - "operationId": "bo3-transfers", + "description": "Returns terms aggregation counts for the Goodreads books dataset. Facet enum: `genres`, `format`, `language`, `publisher`, `primary_author`, `primary_author_id`, `series_name`, `publication_year`, `run_id`.", + "operationId": "datasets-goodreads-books-facets", "parameters": [ { - "description": "BO3 team id; transfers into or out of this team", + "description": "Facet enum: genres, format, language, publisher, primary_author, primary_author_id, series_name, publication_year, run_id", + "enum": [ + "genres", + "format", + "language", + "publisher", + "primary_author", + "primary_author_id", + "series_name", + "publication_year", + "run_id" + ], "in": "query", - "minimum": 1, - "name": "team_id", - "type": "integer" + "name": "facet", + "required": true, + "type": "string", + "x-example": "genres" }, { - "description": "BO3 player id; this person's transfers", + "description": "Full-text query over title, author and description, max 256 characters", "in": "query", - "minimum": 1, - "name": "player_id", - "type": "integer" + "name": "q", + "type": "string" }, { - "description": "Transfer action; one of join, change, leave", - "enum": [ - "join", - "change", - "leave" - ], + "description": "Exact genre filter, max 128 characters", "in": "query", - "name": "action", + "name": "genre", "type": "string" }, { - "description": "Role; one of player, coach", - "enum": [ - "player", - "coach" - ], + "description": "Exact format filter, max 128 characters", "in": "query", - "name": "role", + "name": "format", "type": "string" }, { - "description": "Order by date; one of newest, oldest; defaults to newest", - "enum": [ - "newest", - "oldest" - ], + "description": "Exact language filter, max 128 characters", "in": "query", - "name": "sort", + "name": "language", + "type": "string" + }, + { + "description": "Exact publisher filter, max 128 characters", + "in": "query", + "name": "publisher", + "type": "string" + }, + { + "description": "Exact author name filter, max 128 characters", + "in": "query", + "name": "author", + "type": "string" + }, + { + "description": "Exact Goodreads author id filter, max 128 characters", + "in": "query", + "name": "author_id", + "type": "string" + }, + { + "description": "Exact series name filter, max 128 characters", + "in": "query", + "name": "series", + "type": "string" + }, + { + "description": "Exact ISBN-10 filter, max 128 characters", + "in": "query", + "name": "isbn", + "type": "string" + }, + { + "description": "Exact ISBN-13 filter, max 128 characters", + "in": "query", + "name": "isbn13", "type": "string" }, - { - "description": "Zero-based offset; defaults to 0", - "in": "query", - "minimum": 0, - "name": "offset", - "type": "integer" + { + "description": "Exact crawl run-id filter, max 128 characters", + "in": "query", + "name": "run_id", + "type": "string" + }, + { + "description": "Minimum average rating, 0 through 5", + "in": "query", + "name": "min_rating", + "type": "number" + }, + { + "description": "Minimum number of ratings", + "in": "query", + "name": "min_ratings_count", + "type": "integer" + }, + { + "description": "Minimum page count", + "in": "query", + "name": "min_pages", + "type": "integer" + }, + { + "description": "Maximum page count", + "in": "query", + "name": "max_pages", + "type": "integer" + }, + { + "description": "Minimum publication year", + "in": "query", + "name": "min_publication_year", + "type": "integer" + }, + { + "description": "Maximum publication year", + "in": "query", + "name": "max_publication_year", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/datasets.goodreadsBooksFacetResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Page size, 1 to 100; defaults to 20", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", - "type": "integer" + "ApiKeyAuth": [] + } + ], + "summary": "Facet Goodreads books dataset", + "tags": [ + "Datasets" + ] + } + }, + "/datasets/goodreads-books/items/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one Goodreads book from the dataset by `id`. The record has title, authors, series, genres, format, page count, publisher, publication date, ISBN and ISBN-13, language, description, average rating with a one-to-five-star breakdown, and review counts. An unknown id returns 404.", + "operationId": "datasets-goodreads-books-item", + "parameters": [ + { + "description": "Goodreads book id, e.g. 2767052", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "2767052" } ], "produces": [ @@ -297065,19 +371115,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.TransfersResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.goodreadsBookResponseDoc" } }, "400": { @@ -297098,8 +371136,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -297110,75 +371148,148 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg esports transfer feed", + "summary": "Get a Goodreads book from dataset", "tags": [ - "BO3" + "Datasets" ] } }, - "/bo3/valorant-leaderboard": { + "/datasets/goodreads-books/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns BO3.gg's Valorant player leaderboard over a day range (default: the last six months): players ranked by `sort` (`acs`, `kills`, `deaths`, `damage`, `assists`, `first_kills`, `clutches`, `first_duels`, `games`, `rounds`) in `order` (`desc`, `asc`) with paging. Each player has nickname, slug, games, rounds and every per-round average as a `stats` map; players below the API's minimum-games threshold for the window are excluded (`min_games_count`).", - "operationId": "bo3-valorant-leaderboard", + "description": "Searches the crawled public Goodreads book catalog stored in a search index. Discovered from curated Listopia \"best of\" lists, a search-term sweep, and author bibliography expansion — not a full catalog. Sort enum: `relevance`, `rating_desc`, `reviews_desc`, `publication_desc`, `publication_asc`, `pages_desc`, `pages_asc`, `title_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-goodreads-books-search", "parameters": [ { - "description": "First day, YYYY-MM-DD (UTC); defaults to six months before to", + "description": "Full-text query over title, author and description, max 256 characters", "in": "query", - "name": "from", - "type": "string", - "x-example": "2026-04-28" + "name": "q", + "type": "string" }, { - "description": "Last day, YYYY-MM-DD (UTC); defaults to today", + "description": "Exact genre filter (e.g. Fantasy, Romance, Nonfiction), max 128 characters", "in": "query", - "name": "to", - "type": "string", - "x-example": "2026-10-28" + "name": "genre", + "type": "string" }, { - "description": "Stat to rank by; one of acs, kills, deaths, damage, assists, first_kills, clutches, first_duels, games, rounds; defaults to acs", - "enum": [ - "acs", - "kills", - "deaths", - "damage", - "assists", - "first_kills", - "clutches", - "first_duels", - "games", - "rounds" - ], + "description": "Exact format filter (e.g. Hardcover, Paperback, Kindle Edition), max 128 characters", "in": "query", - "name": "sort", + "name": "format", "type": "string" }, { - "description": "Direction; one of desc, asc; defaults to desc", + "description": "Exact language filter (e.g. English, Spanish), max 128 characters", + "in": "query", + "name": "language", + "type": "string" + }, + { + "description": "Exact publisher filter, max 128 characters", + "in": "query", + "name": "publisher", + "type": "string" + }, + { + "description": "Exact author name filter (matches any credited contributor), max 128 characters", + "in": "query", + "name": "author", + "type": "string" + }, + { + "description": "Exact Goodreads author id filter, max 128 characters", + "in": "query", + "name": "author_id", + "type": "string" + }, + { + "description": "Exact series name filter, max 128 characters", + "in": "query", + "name": "series", + "type": "string" + }, + { + "description": "Exact ISBN-10 filter, max 128 characters", + "in": "query", + "name": "isbn", + "type": "string" + }, + { + "description": "Exact ISBN-13 filter, max 128 characters", + "in": "query", + "name": "isbn13", + "type": "string" + }, + { + "description": "Exact crawl run-id filter, max 128 characters", + "in": "query", + "name": "run_id", + "type": "string" + }, + { + "description": "Minimum average rating, 0 through 5", + "in": "query", + "name": "min_rating", + "type": "number" + }, + { + "description": "Minimum number of ratings", + "in": "query", + "name": "min_ratings_count", + "type": "integer" + }, + { + "description": "Minimum page count", + "in": "query", + "name": "min_pages", + "type": "integer" + }, + { + "description": "Maximum page count", + "in": "query", + "name": "max_pages", + "type": "integer" + }, + { + "description": "Minimum publication year", + "in": "query", + "name": "min_publication_year", + "type": "integer" + }, + { + "description": "Maximum publication year", + "in": "query", + "name": "max_publication_year", + "type": "integer" + }, + { + "description": "Sort enum: relevance, rating_desc, reviews_desc, publication_desc, publication_asc, pages_desc, pages_asc, title_asc", "enum": [ - "desc", - "asc" + "relevance", + "rating_desc", + "reviews_desc", + "publication_desc", + "publication_asc", + "pages_desc", + "pages_asc", + "title_asc" ], "in": "query", - "name": "order", + "name": "sort", "type": "string" }, { - "description": "Zero-based offset; defaults to 0", + "description": "Page number, defaults to 1", "in": "query", - "minimum": 0, - "name": "offset", + "name": "page", "type": "integer" }, { - "description": "Page size, 1 to 100; defaults to 20", + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", + "name": "page_size", "type": "integer" } ], @@ -297189,19 +371300,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/bo3.ValorantLeaderboardResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/datasets.goodreadsBooksSearchResponseDoc" } }, "400": { @@ -297216,8 +371315,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -297228,84 +371327,159 @@ "ApiKeyAuth": [] } ], - "summary": "BO3.gg Valorant player leaderboard", + "summary": "Search Goodreads books dataset", "tags": [ - "BO3" + "Datasets" ] } }, - "/bonhams/auctions/search": { + "/datasets/google-map-businesses/facets": { "get": { "consumes": [ "application/json" ], - "description": "Searches and filters Bonhams' auctions. Default status \"upcoming\" excludes ended auctions, matching bonhams.com's own default; \"past\" browses Bonhams' full historical auction archive instead.", - "operationId": "bonhams-auction-search", + "description": "Returns terms aggregation counts for Google Maps businesses. Facet enum: `category`, `country`, `state`, `state_code`, `county`, `county_code`, `city`, `town`, `website_status`. Category facet values are exact locale-specific Google Maps labels and can be localized, non-ASCII, or contain punctuation; pass a returned value unchanged to the category filter. `state` and `county` keep each country's own administrative vocabulary (e.g. `Provincia de Madrid`, `Département du Nord`); `state_code` and `county_code` are ISO 3166-2 codes populated today only for Canadian provinces and territories (e.g. `CA-ON`) and Irish counties (e.g. `IE-D`); every other record, including all US rows, carries no code and is absent from the code facets.", + "operationId": "datasets-google-map-businesses-facets", "parameters": [ { - "description": "Free-text search across auction title and department names", + "description": "Facet enum: category, country, state, state_code, county, county_code, city, town, website_status", + "enum": [ + "category", + "country", + "state", + "state_code", + "county", + "county_code", + "city", + "town", + "website_status" + ], "in": "query", - "name": "q", + "name": "facet", + "required": true, "type": "string", - "x-example": "Home & Interiors" + "x-example": "category" }, { - "description": "Comma-separated country names (not a fixed enum -- live facet)", + "description": "Full-text business search query, max 256 characters; every term must match the name, address, headline or category (filler words such as in, near and the are ignored)", "in": "query", - "name": "country", - "type": "string", - "x-example": "United Kingdom" + "name": "q", + "type": "string" }, { - "description": "Comma-separated categories. Allowed values: 20th & 21st Century Art, Asian Art, Books, History & Science, Classic Art, Decorative Arts & Furniture, Handbags, Jewels & Watches, Motoring, Popular Culture, Wine & Whisky.", + "description": "Exact locale-specific Google Maps category label; use the category facet to discover values, max 128 characters", "in": "query", "name": "category", - "type": "string", - "x-example": "Asian Art" + "type": "string" }, { - "description": "Comma-separated month-and-year values, e.g. \\", + "description": "Country filter. Accepts the full English name (\\", "in": "query", - "name": "month", - "type": "string", - "x-example": "September 2026" + "name": "country", + "type": "string" }, { - "description": "Comma-separated auction types", - "enum": [ - "ONLINE", - "PUBLIC", - "EXHIBITION", - "OTHER" - ], + "description": "Exact state filter, max 128 characters", "in": "query", - "name": "auction_type", - "type": "string", - "x-example": "ONLINE" + "name": "state", + "type": "string" }, { - "description": "Filters by bidding/completion status, default upcoming", - "enum": [ - "upcoming", - "past", - "all" - ], + "description": "Exact county filter, max 128 characters", "in": "query", - "name": "status", - "type": "string", - "x-example": "upcoming" + "name": "county", + "type": "string" }, { - "description": "1-based page number, default 1", + "description": "Exact ISO 3166-2 state/region code filter, e.g. CA-ON, max 128 characters. Only Canadian provinces and territories carry a code today, so US codes such as US-NV return no rows; filter other countries by state, county or city. Use facet=state_code to list values", "in": "query", - "name": "page", + "name": "state_code", + "type": "string" + }, + { + "description": "Exact ISO 3166-2 county/district code filter, e.g. IE-D, max 128 characters. Only Irish counties carry a code today; filter other countries by county or city. Use facet=county_code to list values", + "in": "query", + "name": "county_code", + "type": "string" + }, + { + "description": "Exact city filter, max 128 characters", + "in": "query", + "name": "city", + "type": "string" + }, + { + "description": "Exact town filter, max 128 characters", + "in": "query", + "name": "town", + "type": "string" + }, + { + "description": "Minimum rating, 0 through 5. Businesses with no aggregate Google rating are returned with rating null, so any min_rating above 0 excludes them.", + "in": "query", + "name": "min_rating", + "type": "number" + }, + { + "description": "Minimum review count", + "in": "query", + "name": "min_review_count", "type": "integer" }, { - "description": "Results per page, default 24, max 100", + "description": "Filter by website presence", "in": "query", - "name": "per_page", + "name": "has_website", + "type": "boolean" + }, + { + "description": "Filter by phone presence", + "in": "query", + "name": "has_phone", + "type": "boolean" + }, + { + "description": "Filter by location presence: true keeps only mappable businesses with coordinates; false isolates locationless service-area businesses that have no map location", + "in": "query", + "name": "has_geo", + "type": "boolean" + }, + { + "description": "Closure filter. true keeps only businesses Google marks Permanently closed; false excludes them, keeping every business not known to be closed. Most rows have never been status-checked and are returned with permanently_closed null, which means unknown, not open.", + "in": "query", + "name": "permanently_closed", + "type": "boolean" + }, + { + "description": "Latitude for radius filtering", + "in": "query", + "name": "lat", + "type": "number" + }, + { + "description": "Longitude for radius filtering", + "in": "query", + "name": "lon", + "type": "number" + }, + { + "description": "Radius in meters, 1 through 50000; requires lat and lon when supplied", + "in": "query", + "name": "radius_m", "type": "integer" + }, + { + "description": "Sort enum: relevance, updated_at_desc, rating_desc, review_count_desc, distance_asc", + "enum": [ + "relevance", + "updated_at_desc", + "rating_desc", + "review_count_desc", + "distance_asc" + ], + "in": "query", + "name": "sort", + "type": "string" } ], "produces": [ @@ -297315,7 +371489,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bonhams.auctionSearchResponseDoc" + "$ref": "#/definitions/datasets.googleMapBusinessesFacetResponseDoc" } }, "400": { @@ -297324,14 +371498,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -297342,27 +371516,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Bonhams auctions", + "summary": "Facet stored Google Maps businesses", "tags": [ - "Bonhams" + "Datasets" ] } }, - "/bonhams/auctions/{id}": { + "/datasets/google-map-businesses/items/{place_id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Bonhams auction's facts by id: title, category, department, country, currency, sale dates, and lot count. Unlike the search endpoint, this is not restricted to upcoming/live auctions -- a historical/ended auction id resolves too.", - "operationId": "bonhams-auction-detail", + "description": "Returns one stored Google Maps business by Google place_id from dataset id enum value `google-map-businesses`. The `category` field contains the exact Google Maps category label returned for the business locale and can be localized, non-ASCII, or contain punctuation. A `rating` of `null` means no aggregate rating is available. A `review_count` of `null` means Google did not return a count; numeric `0` means Google confirmed zero reviews. Locationless service-area businesses (online/mobile/home-based) have a `null` `geo`. A `permanently_closed` of `true` means Google marks the business permanently closed; `false` means a crawl confirmed it does not; `null` means the business has not been status-checked since capture shipped on 2026-08-31 and is UNKNOWN, not open — so any total computed from this dataset includes an unknown number of closed businesses.", + "operationId": "datasets-google-map-businesses-item", "parameters": [ { - "description": "Bonhams auction id", + "description": "Google Place ID, max 256 characters", "in": "path", - "name": "id", + "name": "place_id", "required": true, "type": "string", - "x-example": "32001" + "x-example": "ChIJ99URUeOAhYAR0J5ZUxTesDQ" } ], "produces": [ @@ -297372,7 +371546,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bonhams.auctionDetailResponseDoc" + "$ref": "#/definitions/datasets.googleMapBusinessResponseDoc" } }, "400": { @@ -297387,14 +371561,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -297405,52 +371579,72 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Bonhams auction's normalized facts", + "summary": "Get a stored Google Maps business", "tags": [ - "Bonhams" + "Datasets" ] } }, - "/bonhams/auctions/{id}/lots": { + "/datasets/google-map-businesses/nearby": { "get": { "consumes": [ "application/json" ], - "description": "Returns the lot listing for one Bonhams auction, optionally filtered by department and/or a free-text query.", - "operationId": "bonhams-auction-lots", + "description": "Searches stored Google Maps businesses near a coordinate in dataset id enum value `google-map-businesses`. `category` is the exact Google Maps category label returned for the business locale; it can be localized, non-ASCII, or contain punctuation, so use the category facet to discover exact filter values. A `rating` of `null` means no aggregate rating is available. A `review_count` of `null` means Google did not return a count; numeric `0` means Google confirmed zero reviews. `min_rating` above 0 excludes unrated businesses. Billing: this endpoint costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-google-map-businesses-nearby", "parameters": [ { - "description": "Bonhams auction id", - "in": "path", - "name": "id", + "description": "Latitude", + "in": "query", + "name": "lat", "required": true, - "type": "string", - "x-example": "32001" + "type": "number", + "x-example": 40.7484257 }, { - "description": "Free-text search across lot title, catalog description, and footnotes", + "description": "Longitude", "in": "query", - "name": "q", - "type": "string", - "x-example": "candelabra" + "name": "lon", + "required": true, + "type": "number", + "x-example": -73.98567 }, { - "description": "Comma-separated department names (not a fixed enum -- varies per auction)", + "description": "Radius in meters, max 50000", "in": "query", - "name": "department", - "type": "string", - "x-example": "Silver" + "name": "radius_m", + "required": true, + "type": "integer", + "x-example": 5000 }, { - "description": "1-based page number, default 1", + "description": "Exact locale-specific Google Maps category label; use the category facet to discover values, max 128 characters", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Minimum rating, 0 through 5. Businesses with no aggregate Google rating are returned with rating null, so any min_rating above 0 excludes them.", + "in": "query", + "name": "min_rating", + "type": "number" + }, + { + "description": "Minimum review count", + "in": "query", + "name": "min_review_count", + "type": "integer" + }, + { + "description": "Page number, defaults to 1", "in": "query", "name": "page", "type": "integer" }, { - "description": "Results per page, default 48, max 100", + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", "in": "query", - "name": "per_page", + "name": "page_size", "type": "integer" } ], @@ -297461,7 +371655,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bonhams.auctionLotsResponseDoc" + "$ref": "#/definitions/datasets.googleMapBusinessesSearchResponseDoc" } }, "400": { @@ -297470,14 +371664,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -297488,76 +371682,151 @@ "ApiKeyAuth": [] } ], - "summary": "List the lots in a Bonhams auction", + "summary": "Search nearby stored Google Maps businesses", "tags": [ - "Bonhams" + "Datasets" ] } }, - "/bonhams/lots/search": { + "/datasets/google-map-businesses/search": { "get": { "consumes": [ "application/json" ], - "description": "Searches Bonhams lots across every auction, current and historical -- including sold/prices-realized lots -- optionally filtered by department, country, a GBP-normalized estimate price range, and/or a free-text query, in a caller-selected sort order. Without a query and without an explicit sort, results are ordered by most recently active sale date first.", - "operationId": "bonhams-lot-search", + "description": "Searches Google Maps business records stored in a search index. Sort enum: `relevance`, `updated_at_desc`, `rating_desc`, `review_count_desc`, `distance_asc`. `category` is the exact Google Maps category label returned for the business locale; it can be localized, non-ASCII, or contain punctuation, so use the category facet to discover exact filter values. A `rating` of `null` means no aggregate rating is available. A `review_count` of `null` means Google did not return a count; numeric `0` means Google confirmed zero reviews. `rating_desc` sorts unrated businesses last, and `min_rating` above 0 excludes them. Use `has_geo=false` to isolate locationless service-area businesses (which have a `null` `geo`). A `permanently_closed` of `true` means Google marks the business permanently closed; `false` means a crawl confirmed it does not; `null` means the business has not been status-checked since capture shipped on 2026-08-31 and is UNKNOWN, not open — so any total computed from this dataset includes an unknown number of closed businesses. Use `permanently_closed=false` to exclude the confirmed-closed ones. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-google-map-businesses-search", "parameters": [ { - "description": "Free-text search across lot title, catalog description, and footnotes", + "description": "Full-text business search query, max 256 characters; every term must match the name, address, headline or category (filler words such as in, near and the are ignored)", "in": "query", "name": "q", - "type": "string", - "x-example": "Rolex Submariner" + "type": "string" }, { - "description": "Comma-separated department names (not a fixed enum -- large, changes over time)", + "description": "Exact locale-specific Google Maps category label; use the category facet to discover values, max 128 characters", "in": "query", - "name": "department", - "type": "string", - "x-example": "Watches" + "name": "category", + "type": "string" }, { - "description": "Comma-separated country names (not a fixed enum -- live facet)", + "description": "Country filter. Accepts the full English name (\\", "in": "query", "name": "country", - "type": "string", - "x-example": "United States" + "type": "string" }, { - "description": "Minimum estimate, in GBP (converted from each lot's own sale currency), inclusive. Omit or 0 for no minimum.", + "description": "Exact state filter, max 128 characters", "in": "query", - "name": "min_price_gbp", + "name": "state", + "type": "string" + }, + { + "description": "Exact county filter, max 128 characters", + "in": "query", + "name": "county", + "type": "string" + }, + { + "description": "Exact ISO 3166-2 state/region code filter, e.g. CA-ON, max 128 characters. Only Canadian provinces and territories carry a code today, so US codes such as US-NV return no rows; filter other countries by state, county or city. Use facet=state_code to list values", + "in": "query", + "name": "state_code", + "type": "string" + }, + { + "description": "Exact ISO 3166-2 county/district code filter, e.g. IE-D, max 128 characters. Only Irish counties carry a code today; filter other countries by county or city. Use facet=county_code to list values", + "in": "query", + "name": "county_code", + "type": "string" + }, + { + "description": "Exact city filter, max 128 characters", + "in": "query", + "name": "city", + "type": "string" + }, + { + "description": "Exact town filter, max 128 characters", + "in": "query", + "name": "town", + "type": "string" + }, + { + "description": "Minimum rating, 0 through 5. Businesses with no aggregate Google rating are returned with rating null, so any min_rating above 0 excludes them.", + "in": "query", + "name": "min_rating", "type": "number" }, { - "description": "Maximum estimate, in GBP (converted from each lot's own sale currency), inclusive. Omit or 0 for no maximum.", + "description": "Minimum review count", "in": "query", - "name": "max_price_gbp", + "name": "min_review_count", + "type": "integer" + }, + { + "description": "Filter by website presence", + "in": "query", + "name": "has_website", + "type": "boolean" + }, + { + "description": "Filter by phone presence", + "in": "query", + "name": "has_phone", + "type": "boolean" + }, + { + "description": "Filter by location presence: true keeps only mappable businesses with coordinates; false isolates locationless service-area businesses that have no map location", + "in": "query", + "name": "has_geo", + "type": "boolean" + }, + { + "description": "Closure filter. true keeps only businesses Google marks Permanently closed; false excludes them, keeping every business not known to be closed. Most rows have never been status-checked and are returned with permanently_closed null, which means unknown, not open.", + "in": "query", + "name": "permanently_closed", + "type": "boolean" + }, + { + "description": "Latitude for radius filtering or distance sort", + "in": "query", + "name": "lat", "type": "number" }, { - "description": "Result order. Default: Typesense relevance ranking when q is set, otherwise recency (most recently active sale date first).", + "description": "Longitude for radius filtering or distance sort", + "in": "query", + "name": "lon", + "type": "number" + }, + { + "description": "Radius in meters, 1 through 50000; requires lat and lon when supplied", + "in": "query", + "name": "radius_m", + "type": "integer" + }, + { + "description": "Sort enum: relevance, updated_at_desc, rating_desc, review_count_desc, distance_asc", "enum": [ "relevance", - "recency", - "price_high", - "price_low", - "lot_number" + "updated_at_desc", + "rating_desc", + "review_count_desc", + "distance_asc" ], "in": "query", "name": "sort", "type": "string" }, { - "description": "1-based page number, default 1", + "description": "Page number, defaults to 1", "in": "query", "name": "page", "type": "integer" }, { - "description": "Results per page, default 48, max 100", + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", "in": "query", - "name": "per_page", + "name": "page_size", "type": "integer" } ], @@ -297568,7 +371837,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/bonhams.lotSearchResponseDoc" + "$ref": "#/definitions/datasets.googleMapBusinessesSearchResponseDoc" } }, "400": { @@ -297577,14 +371846,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -297595,98 +371864,170 @@ "ApiKeyAuth": [] } ], - "summary": "Search Bonhams lots across every auction", + "summary": "Search stored Google Maps businesses", "tags": [ - "Bonhams" + "Datasets" ] } }, - "/bonhams/lots/{auctionId}/{lotNumber}": { + "/datasets/housing-markets/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Bonhams lot's facts: title, estimate range, hammer/realized price (once sold), sale date, category, department, and lot number. Full lot description prose, condition-report text, and additional images are not reproduced -- see the response fields.", - "operationId": "bonhams-lot-detail", + "description": "Returns terms aggregation counts for the housing markets dataset. Facet enum: `region_type`, `state_code`, `property_type`, `parent_metro`, `parent_metro_code`, `income_vintage`, `is_latest`, `period_begin`. region_type enum: `national`, `metro`, `county`, `city`, `zip`. property_type enum: `All Residential`, `Single Family Residential`, `Condo/Co-op`, `Townhouse`, `Multi-Family (2-4 Unit)`, `Single Units Only`.", + "operationId": "datasets-housing-markets-facets", "parameters": [ { - "description": "Bonhams auction id", - "in": "path", - "name": "auctionId", + "description": "Facet enum: region_type, state_code, property_type, parent_metro, parent_metro_code, income_vintage, is_latest, period_begin", + "enum": [ + "region_type", + "state_code", + "property_type", + "parent_metro", + "parent_metro_code", + "income_vintage", + "is_latest", + "period_begin" + ], + "in": "query", + "name": "facet", "required": true, "type": "string", - "x-example": "32001" + "x-example": "region_type" }, { - "description": "Bonhams lot number", - "in": "path", - "name": "lotNumber", - "required": true, - "type": "string", - "x-example": "2" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/bonhams.lotDetailResponseDoc" - } + "description": "Full-text query over region name and city, max 256 characters", + "in": "query", + "name": "q", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Region level enum: national, metro, county, city, zip", + "enum": [ + "national", + "metro", + "county", + "city", + "zip" + ], + "in": "query", + "name": "region_type", + "type": "string" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Exact two-letter state code filter, e.g. CA", + "in": "query", + "name": "state_code", + "type": "string" }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Property type enum: All Residential, Single Family Residential, Condo/Co-op, Townhouse, Multi-Family (2-4 Unit), Single Units Only", + "in": "query", + "name": "property_type", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get a Bonhams lot's normalized facts", - "tags": [ - "Bonhams" - ] - } - }, - "/booking-attractions/detail": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the details of one Booking.com attraction by `slug`, taken from `products[].slug` in a `booking-attractions-search` result: `name`, `short_description`, `description`, `duration`, `price` with `currency`, `review_score`, `review_count` and `city`. The returned `id` is the `product_id` for `booking-attractions-reviews`.", - "operationId": "booking-attractions-detail", - "parameters": [ + "description": "Exact parent metro (CBSA) code filter, e.g. 16980", + "in": "query", + "name": "parent_metro_code", + "type": "string" + }, { - "description": "Attraction slug, from a prior attraction search result", + "description": "Exact zip code filter (zip-level rows only), e.g. 60616", "in": "query", - "name": "slug", - "required": true, - "type": "string", - "x-example": "pre4ksvwxdrd-seine-river-sightseeing-cruise" + "name": "zip_code", + "type": "string" + }, + { + "description": "Exact period start date filter, YYYY-MM-DD", + "in": "query", + "name": "period", + "type": "string" + }, + { + "description": "Filter for the most recent period per region and property type", + "in": "query", + "name": "latest", + "type": "boolean" + }, + { + "description": "Minimum median sale price in USD", + "in": "query", + "name": "min_median_sale_price", + "type": "number" + }, + { + "description": "Maximum median sale price in USD", + "in": "query", + "name": "max_median_sale_price", + "type": "number" + }, + { + "description": "Minimum median list price in USD", + "in": "query", + "name": "min_median_list_price", + "type": "number" + }, + { + "description": "Maximum median list price in USD", + "in": "query", + "name": "max_median_list_price", + "type": "number" + }, + { + "description": "Minimum price-to-income ratio", + "in": "query", + "name": "min_price_to_income", + "type": "number" + }, + { + "description": "Maximum price-to-income ratio", + "in": "query", + "name": "max_price_to_income", + "type": "number" + }, + { + "description": "Minimum salary needed to buy in USD per year", + "in": "query", + "name": "min_salary_to_buy", + "type": "integer" + }, + { + "description": "Maximum salary needed to buy in USD per year", + "in": "query", + "name": "max_salary_to_buy", + "type": "integer" + }, + { + "description": "Minimum median days on market", + "in": "query", + "name": "min_median_dom", + "type": "number" + }, + { + "description": "Maximum median days on market", + "in": "query", + "name": "max_median_dom", + "type": "number" + }, + { + "description": "Minimum active inventory", + "in": "query", + "name": "min_inventory", + "type": "integer" + }, + { + "description": "Maximum active inventory", + "in": "query", + "name": "max_inventory", + "type": "integer" + }, + { + "description": "Minimum homes sold in the period", + "in": "query", + "name": "min_homes_sold", + "type": "integer" } ], "produces": [ @@ -297696,7 +372037,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/booking.bookingAttractionDetailResponseDoc" + "$ref": "#/definitions/datasets.housingMarketsFacetResponseDoc" } }, "400": { @@ -297705,20 +372046,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -297729,41 +372064,60 @@ "ApiKeyAuth": [] } ], - "summary": "Booking.com attraction detail", + "summary": "Facet the US housing markets dataset", "tags": [ - "Booking" + "Datasets" ] } }, - "/booking-attractions/reviews": { + "/datasets/housing-markets/items/{region_type}/{table_id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns guest reviews for a Booking.com attraction. `product_id` is required and comes from `products[].id` in a `booking-attractions-search` result. `page` is 1-based (default 1) and `limit` is 1 to 50 (default 10). Each review has `score`, `content`, `reviewer_name`, `reviewer_country`, `language` and `reviewed_date`, and `total` gives the count.", - "operationId": "booking-attractions-reviews", + "description": "Returns one housing-market record by region_type and Redfin table_id from dataset id enum value `housing-markets`. region_type enum: `national`, `metro`, `county`, `city`, `zip`. property_type enum: `All Residential`, `Single Family Residential`, `Condo/Co-op`, `Townhouse`, `Multi-Family (2-4 Unit)`, `Single Units Only` (defaults to `All Residential`). `period` defaults to the most recent period on record. Pass `history=true` to get the full monthly series (a `{dataset, region_type, table_id, property_type, items}` envelope, sorted by period ascending) instead of a single record.", + "operationId": "datasets-housing-markets-item", "parameters": [ { - "description": "Attraction product id, from a prior attraction search result", - "in": "query", - "name": "product_id", + "description": "Region level enum: national, metro, county, city, zip", + "enum": [ + "national", + "metro", + "county", + "city", + "zip" + ], + "in": "path", + "name": "region_type", "required": true, "type": "string", - "x-example": "PRe4kSVWXdrD" + "x-example": "national" }, { - "description": "1-based result page, default 1", - "in": "query", - "name": "page", + "description": "Redfin table id (the region's stable numeric id)", + "in": "path", + "name": "table_id", + "required": true, "type": "integer", - "x-example": 1 + "x-example": 26097 }, { - "description": "Reviews per page, 1-50, default 10", + "description": "Exact period start date, YYYY-MM-DD; defaults to the latest period", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "period", + "type": "string" + }, + { + "description": "Property type enum: All Residential, Single Family Residential, Condo/Co-op, Townhouse, Multi-Family (2-4 Unit), Single Units Only; defaults to All Residential", + "in": "query", + "name": "property_type", + "type": "string" + }, + { + "description": "Return the full monthly series instead of a single period", + "in": "query", + "name": "history", + "type": "boolean" } ], "produces": [ @@ -297773,7 +372127,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/booking.bookingAttractionReviewsResponseDoc" + "$ref": "#/definitions/datasets.housingMarketItemResponseDoc" } }, "400": { @@ -297794,8 +372148,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -297806,157 +372160,186 @@ "ApiKeyAuth": [] } ], - "summary": "Booking.com attraction reviews", + "summary": "Get a US housing market record from the dataset", "tags": [ - "Booking" + "Datasets" ] } }, - "/booking-attractions/search": { + "/datasets/housing-markets/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns Booking.com attractions/things-to-do search results for a destination and date range, with an optional category/subcategory filter and a discoverable category taxonomy.", - "operationId": "booking-attractions-search", + "description": "Searches monthly Redfin housing-market statistics per region and property type since 2012, joined to Census ACS income for affordability metrics. region_type enum: `national`, `metro`, `county`, `city`, `zip`. property_type enum: `All Residential`, `Single Family Residential`, `Condo/Co-op`, `Townhouse`, `Multi-Family (2-4 Unit)`, `Single Units Only`. Sort enum: `relevance`, `price_desc`, `price_asc`, `list_price_desc`, `list_price_asc`, `price_to_income_desc`, `price_to_income_asc`, `salary_to_buy_desc`, `salary_to_buy_asc`, `dom_asc`, `dom_desc`, `inventory_desc`, `homes_sold_desc`, `period_desc`. Use `latest=true` for the most recent period per region series. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-housing-markets-search", "parameters": [ { - "description": "Destination name or city", + "description": "Full-text query over region name and city, max 256 characters", "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "Paris" + "name": "q", + "type": "string" }, { - "description": "Availability start date, YYYY-MM-DD", + "description": "Region level enum: national, metro, county, city, zip", + "enum": [ + "national", + "metro", + "county", + "city", + "zip" + ], "in": "query", - "name": "start_date", - "required": true, - "type": "string", - "x-example": "2026-09-15" + "name": "region_type", + "type": "string" }, { - "description": "Availability end date, YYYY-MM-DD, defaults to start_date", + "description": "Exact two-letter state code filter, e.g. CA", "in": "query", - "name": "end_date", - "type": "string", - "x-example": "2026-09-15" + "name": "state_code", + "type": "string" }, { - "description": "1-based result page, default 1", + "description": "Property type enum: All Residential, Single Family Residential, Condo/Co-op, Townhouse, Multi-Family (2-4 Unit), Single Units Only", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "property_type", + "type": "string" }, { - "description": "Results per page, 1-30, default 15", + "description": "Exact parent metro (CBSA) code filter, e.g. 16980", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 15 + "name": "parent_metro_code", + "type": "string" }, { - "description": "Optional top-level category tagname filter, from a prior response's categories", + "description": "Exact zip code filter (zip-level rows only), e.g. 60616", "in": "query", - "name": "category", - "type": "string", - "x-example": "PTCMCcodv3rh" + "name": "zip_code", + "type": "string" }, { - "description": "Optional subcategory tagname filter, from a prior response's categories", + "description": "Exact period start date filter, YYYY-MM-DD", "in": "query", - "name": "subcategory", - "type": "string", - "x-example": "PTCMCfzh93xC" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/booking.bookingAttractionSearchResponseDoc" - } + "name": "period", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Filter for the most recent period per region and property type", + "in": "query", + "name": "latest", + "type": "boolean" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Minimum median sale price in USD", + "in": "query", + "name": "min_median_sale_price", + "type": "number" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Maximum median sale price in USD", + "in": "query", + "name": "max_median_sale_price", + "type": "number" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Search Booking.com attractions", - "tags": [ - "Booking" - ] - } - }, - "/booking-flights/autocomplete": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Booking.com flight-search location suggestions (airports and cities) for `query`, which is required. `type` is `to` (default) or `from`; `origin` and `origin_type` bias results by proximity. Each result has `name`, `code`, `type`, `country`, `country_name` and `region_name`. Combine `code` and `type` as `{code}.{TYPE}` for `booking-flights-search`.", - "operationId": "booking-flights-autocomplete", - "parameters": [ + "description": "Minimum median list price in USD", + "in": "query", + "name": "min_median_list_price", + "type": "number" + }, { - "description": "City or airport name/code to search", + "description": "Maximum median list price in USD", "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "Chengdu" + "name": "max_median_list_price", + "type": "number" }, { - "description": "Location role, default to", + "description": "Minimum price-to-income ratio", + "in": "query", + "name": "min_price_to_income", + "type": "number" + }, + { + "description": "Maximum price-to-income ratio", + "in": "query", + "name": "max_price_to_income", + "type": "number" + }, + { + "description": "Minimum salary needed to buy in USD per year", + "in": "query", + "name": "min_salary_to_buy", + "type": "integer" + }, + { + "description": "Maximum salary needed to buy in USD per year", + "in": "query", + "name": "max_salary_to_buy", + "type": "integer" + }, + { + "description": "Minimum median days on market", + "in": "query", + "name": "min_median_dom", + "type": "number" + }, + { + "description": "Maximum median days on market", + "in": "query", + "name": "max_median_dom", + "type": "number" + }, + { + "description": "Minimum active inventory", + "in": "query", + "name": "min_inventory", + "type": "integer" + }, + { + "description": "Maximum active inventory", + "in": "query", + "name": "max_inventory", + "type": "integer" + }, + { + "description": "Minimum homes sold in the period", + "in": "query", + "name": "min_homes_sold", + "type": "integer" + }, + { + "description": "Sort enum: relevance, price_desc, price_asc, list_price_desc, list_price_asc, price_to_income_desc, price_to_income_asc, salary_to_buy_desc, salary_to_buy_asc, dom_asc, dom_desc, inventory_desc, homes_sold_desc, period_desc", "enum": [ - "to", - "from" + "relevance", + "price_desc", + "price_asc", + "list_price_desc", + "list_price_asc", + "price_to_income_desc", + "price_to_income_asc", + "salary_to_buy_desc", + "salary_to_buy_asc", + "dom_asc", + "dom_desc", + "inventory_desc", + "homes_sold_desc", + "period_desc" ], "in": "query", - "name": "type", + "name": "sort", "type": "string" }, { - "description": "Optional origin location code, biases results by proximity", + "description": "Page number, defaults to 1", "in": "query", - "name": "origin", - "type": "string", - "x-example": "SGN" + "name": "page", + "type": "integer" }, { - "description": "Origin location type", + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", "in": "query", - "name": "origin_type", - "type": "string", - "x-example": "AIRPORT" + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -297966,7 +372349,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/booking.bookingFlightAutocompleteResponseDoc" + "$ref": "#/definitions/datasets.housingMarketsSearchResponseDoc" } }, "400": { @@ -297975,20 +372358,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -297999,102 +372376,158 @@ "ApiKeyAuth": [] } ], - "summary": "Booking.com flight autocomplete", + "summary": "Search the US housing markets dataset", "tags": [ - "Booking" + "Datasets" ] } }, - "/booking-flights/search": { + "/datasets/instagram-users/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns Booking.com flight offers between two locations given as `from` and `to` (such as `SGN.AIRPORT`), for a `depart` date. `type` is `ROUNDTRIP` (default, needs `return`) or `ONEWAY`. Also takes `adults` (1 to 9), `children`, `cabin_class` and `sort`. Offers carry `price`, `currency` and segments with legs; the response adds `total_count` and `min_price`.", - "operationId": "booking-flights-search", + "description": "Returns value counts for the Instagram users dataset by the required `facet`: `is_verified`, `is_business_account`, `has_bio`, `has_external_url`, `category_name` or `source_tier`. The counts follow the search filters, including follower ranges and creation dates, and cover up to 50 values.", + "operationId": "datasets-instagram-users-facets", "parameters": [ { - "description": "Trip type, default ROUNDTRIP", + "description": "Facet enum: is_verified, is_business_account, has_bio, has_external_url, category_name, source_tier", "enum": [ - "ROUNDTRIP", - "ONEWAY" + "is_verified", + "is_business_account", + "has_bio", + "has_external_url", + "category_name", + "source_tier" ], "in": "query", - "name": "type", + "name": "facet", + "required": true, + "type": "string", + "x-example": "is_verified" + }, + { + "description": "Full-text query over username, full_name and biography, max 256 characters", + "in": "query", + "name": "q", "type": "string" }, { - "description": "Origin location id, e.g. SGN.AIRPORT, from a prior autocomplete result", + "description": "Exact username filter (case-insensitive), max 128 characters", "in": "query", - "name": "from", - "required": true, - "type": "string", - "x-example": "SGN.AIRPORT" + "name": "username", + "type": "string" }, { - "description": "Destination location id, same composite format as from", + "description": "Exact category filter (case-insensitive, e.g. Digital Creator), max 128 characters", "in": "query", - "name": "to", - "required": true, - "type": "string", - "x-example": "CTU.CITY" + "name": "category_name", + "type": "string" }, { - "description": "Origin country code", + "description": "Exact filter for seed tier (e.g. crossref, vertical-hashtags, mention-graph, head-directory)", "in": "query", - "name": "from_country", - "type": "string", - "x-example": "VN" + "name": "source_tier", + "type": "string" }, { - "description": "Destination country code", + "description": "Filter by the Instagram verification checkmark", "in": "query", - "name": "to_country", - "type": "string", - "x-example": "CN" + "name": "is_verified", + "type": "boolean" }, { - "description": "Departure date, YYYY-MM-DD", + "description": "Filter by business or creator accounts", "in": "query", - "name": "depart", - "required": true, - "type": "string", - "x-example": "2026-09-05" + "name": "is_business_account", + "type": "boolean" }, { - "description": "Return date, YYYY-MM-DD, required when type is ROUNDTRIP", + "description": "Filter by a non-empty profile biography", "in": "query", - "name": "return", - "type": "string", - "x-example": "2026-09-12" + "name": "has_bio", + "type": "boolean" }, { - "description": "Number of adults, 1-9, default 1", + "description": "Filter by a linked external URL", "in": "query", - "name": "adults", - "type": "integer", - "x-example": 1 + "name": "has_external_url", + "type": "boolean" }, { - "description": "Number of children, 0-9", + "description": "Minimum follower count", "in": "query", - "name": "children", - "type": "integer", - "x-example": 0 + "name": "min_followers", + "type": "integer" }, { - "description": "Cabin class, default ECONOMY", + "description": "Maximum follower count", "in": "query", - "name": "cabin_class", - "type": "string", - "x-example": "ECONOMY" + "name": "max_followers", + "type": "integer" }, { - "description": "Result sort order, default BEST", + "description": "Minimum follower-to-following ratio", + "in": "query", + "name": "min_ratio", + "type": "number" + }, + { + "description": "Maximum follower-to-following ratio", + "in": "query", + "name": "max_ratio", + "type": "number" + }, + { + "description": "Accounts created on or after this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "created_after", + "type": "string" + }, + { + "description": "Accounts created on or before this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "created_before", + "type": "string" + }, + { + "description": "Records last refreshed on or after this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "crawled_after", + "type": "string" + }, + { + "description": "Records last refreshed on or before this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "crawled_before", + "type": "string" + }, + { + "description": "Sort enum: relevance, followers_desc, followers_asc, crawled_at_desc, crawled_at_asc, created_at_desc, created_at_asc", + "enum": [ + "relevance", + "followers_desc", + "followers_asc", + "crawled_at_desc", + "crawled_at_asc", + "created_at_desc", + "created_at_asc" + ], "in": "query", "name": "sort", - "type": "string", - "x-example": "BEST" + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -298104,7 +372537,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/booking.bookingFlightSearchResponseDoc" + "$ref": "#/definitions/datasets.instagramUsersFacetResponseDoc" } }, "400": { @@ -298113,20 +372546,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -298137,27 +372564,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Booking.com flights", + "summary": "Facet the Instagram users dataset", "tags": [ - "Booking" + "Datasets" ] } }, - "/booking/hotel-detail": { + "/datasets/instagram-users/items/{username}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Booking.com hotel's core detail page: rating, facilities, highlights, house rules, cover photos, and rooms with their own photos.", - "operationId": "booking-hotel-detail", + "description": "Returns one Instagram user from the dataset by `username`, with or without a leading @, matched case-insensitively. The record has full name, biography, external URL, avatar, verified and business flags, category, followers, following, posts and follower-to-following ratio. An unknown user returns 404.", + "operationId": "datasets-instagram-users-item", "parameters": [ { - "description": "Booking.com hotel id, from a prior search's property id", - "in": "query", - "name": "hotel_id", + "description": "Instagram username, with or without a leading @, max 128 characters", + "in": "path", + "name": "username", "required": true, - "type": "integer", - "x-example": 2845972 + "type": "string", + "x-example": "instagram" } ], "produces": [ @@ -298167,7 +372594,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/booking.bookingHotelDetailResponseDoc" + "$ref": "#/definitions/datasets.instagramUserResponseDoc" } }, "400": { @@ -298188,8 +372615,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -298200,70 +372627,142 @@ "ApiKeyAuth": [] } ], - "summary": "Booking.com hotel detail", + "summary": "Get an Instagram user from the dataset", "tags": [ - "Booking" + "Datasets" ] } }, - "/booking/reviews": { + "/datasets/instagram-users/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns guest reviews for a Booking.com hotel. `hotel_id` and `hotel_country_code` are required, both from a `booking-search` result. `search_text` filters review content, `page` is 1-based and `limit` is 1 to 25 (default 10). Reviews have `score`, `title`, `positive_text`, `negative_text`, `room_type` and stay dates; `rating_scores` and `reviews_count` summarise the hotel.", - "operationId": "booking-reviews", + "description": "Searches public Instagram user profiles stored in a search index. Sort enum: `relevance`, `followers_desc`, `followers_asc`, `crawled_at_desc`, `crawled_at_asc`, `created_at_desc`, `created_at_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-instagram-users-search", "parameters": [ { - "description": "Booking.com hotel id, from a prior search's property id", + "description": "Full-text query over username, full_name and biography, max 256 characters", "in": "query", - "name": "hotel_id", - "required": true, - "type": "integer", - "x-example": 2845972 + "name": "q", + "type": "string" }, { - "description": "Destination id (ufi), from a prior search response", + "description": "Exact username filter (case-insensitive), max 128 characters", "in": "query", - "name": "destination_id", - "type": "integer", - "x-example": -1456928 + "name": "username", + "type": "string" }, { - "description": "Hotel's country code, from a prior search response", + "description": "Exact category filter (case-insensitive, e.g. Digital Creator), max 128 characters", "in": "query", - "name": "hotel_country_code", - "required": true, - "type": "string", - "x-example": "fr" + "name": "category_name", + "type": "string" }, { - "description": "Hotel's overall review score", + "description": "Exact filter for seed tier (e.g. crossref, vertical-hashtags, mention-graph, head-directory), max 128 characters", "in": "query", - "name": "hotel_score", - "type": "number", - "x-example": 8.2 + "name": "source_tier", + "type": "string" }, { - "description": "Optional free-text search over review content", + "description": "Filter by the Instagram verification checkmark", "in": "query", - "name": "search_text", - "type": "string", - "x-example": "elevator" + "name": "is_verified", + "type": "boolean" }, { - "description": "1-based result page, default 1", + "description": "Filter by business or creator accounts", + "in": "query", + "name": "is_business_account", + "type": "boolean" + }, + { + "description": "Filter by a non-empty profile biography", + "in": "query", + "name": "has_bio", + "type": "boolean" + }, + { + "description": "Filter by a linked external URL", + "in": "query", + "name": "has_external_url", + "type": "boolean" + }, + { + "description": "Minimum follower count", + "in": "query", + "name": "min_followers", + "type": "integer" + }, + { + "description": "Maximum follower count", + "in": "query", + "name": "max_followers", + "type": "integer" + }, + { + "description": "Minimum follower-to-following ratio", + "in": "query", + "name": "min_ratio", + "type": "number" + }, + { + "description": "Maximum follower-to-following ratio", + "in": "query", + "name": "max_ratio", + "type": "number" + }, + { + "description": "Accounts created on or after this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "created_after", + "type": "string" + }, + { + "description": "Accounts created on or before this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "created_before", + "type": "string" + }, + { + "description": "Records last refreshed on or after this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "crawled_after", + "type": "string" + }, + { + "description": "Records last refreshed on or before this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "crawled_before", + "type": "string" + }, + { + "description": "Sort enum: relevance, followers_desc, followers_asc, crawled_at_desc, crawled_at_asc, created_at_desc, created_at_asc", + "enum": [ + "relevance", + "followers_desc", + "followers_asc", + "crawled_at_desc", + "crawled_at_asc", + "created_at_desc", + "created_at_asc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", "in": "query", "name": "page", - "type": "integer", - "x-example": 1 + "type": "integer" }, { - "description": "Reviews per page, 1-25, default 10", + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -298273,7 +372772,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/booking.bookingReviewsResponseDoc" + "$ref": "#/definitions/datasets.instagramUsersSearchResponseDoc" } }, "400": { @@ -298282,20 +372781,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -298306,71 +372799,103 @@ "ApiKeyAuth": [] } ], - "summary": "Booking.com hotel reviews", + "summary": "Search the Instagram users dataset", "tags": [ - "Booking" + "Datasets" ] } }, - "/booking/search": { + "/datasets/jobs/companies": { "get": { "consumes": [ "application/json" ], - "description": "Searches Booking.com hotels for a destination `query` between `checkin` and `checkout` (`YYYY-MM-DD`, both required). `adults` is 1 to 9 (default 2), `rooms` 1 to 8 (default 1), `children` 0 to 9, and `page` is 1-based. Each property has `name`, `price`, `currency`, `review_score`, `star_rating` and `distance`; `results_count` gives the total.", - "operationId": "booking-search", + "description": "Searches the discovered company board registry — which companies are hiring, on which ATS (or, for the 5 single-company big-tech providers, which platform), with how many open roles. Set sponsors_visa=true to keep companies with certified employer filings in recent public U.S. Department of Labor LCA disclosure data. This is company-level historical evidence, not a guarantee for a specific role or candidate. provider enum: `greenhouse`, `lever`, `ashby`, `workday`, `smartrecruiters`, `workable`, `recruitee`, `rippling`, `personio`, `teamtailor`, `oracle`, `ukg`, `icims`, `eightfold`, `gem`, `pinpoint`, `amazon-jobs`, `apple-jobs`, `google-jobs`, `meta-jobs`, `tesla-jobs`. status enum: `active`, `empty`, `gone`, `blocked`, `pending`, `invalid`. sort enum: `open_desc`, `company_asc`, `crawled_desc`. Billing: this endpoint costs 1 credit per 10 records returned, rounded up, with a minimum of 1 (up to 10 records cost 1, a full page of 100 costs 10).", + "operationId": "datasets-jobs-companies", "parameters": [ { - "description": "Destination name or city", + "description": "Match on company name / domain", "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "Paris" + "name": "q", + "type": "string" }, { - "description": "Check-in date, YYYY-MM-DD", + "description": "Provider filter", + "enum": [ + "greenhouse", + "lever", + "ashby", + "workday", + "smartrecruiters", + "workable", + "recruitee", + "rippling", + "personio", + "teamtailor", + "oracle", + "ukg", + "icims", + "eightfold", + "gem", + "pinpoint", + "amazon-jobs", + "apple-jobs", + "google-jobs", + "meta-jobs", + "tesla-jobs" + ], "in": "query", - "name": "checkin", - "required": true, - "type": "string", - "x-example": "2026-09-15" + "name": "provider", + "type": "string" }, { - "description": "Check-out date, YYYY-MM-DD", + "description": "Board status. Enum: active, empty, gone, blocked, pending, invalid", + "enum": [ + "active", + "empty", + "gone", + "blocked", + "pending", + "invalid" + ], "in": "query", - "name": "checkout", - "required": true, - "type": "string", - "x-example": "2026-09-17" + "name": "status", + "type": "string" }, { - "description": "Number of adults, 1-9, default 2", + "description": "Minimum open roles", "in": "query", - "name": "adults", - "type": "integer", - "x-example": 2 + "name": "min_open_roles", + "type": "integer" }, { - "description": "Number of rooms, 1-8, default 1", + "description": "Keep companies with recent certified DOL LCA filings (default false)", "in": "query", - "name": "rooms", - "type": "integer", - "x-example": 1 + "name": "sponsors_visa", + "type": "boolean" }, { - "description": "Number of children, 0-9", + "description": "Sort enum: open_desc, company_asc, crawled_desc", + "enum": [ + "open_desc", + "company_asc", + "crawled_desc" + ], "in": "query", - "name": "children", - "type": "integer", - "x-example": 0 + "name": "sort", + "type": "string" }, { - "description": "1-based result page, default 1", + "description": "Page number, default 1", "in": "query", "name": "page", - "type": "integer", - "x-example": 1 + "type": "integer" + }, + { + "description": "Page size, default 20, max 100", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -298380,7 +372905,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/booking.bookingSearchResponseDoc" + "$ref": "#/definitions/datasets.jobsCompaniesResponseDoc" } }, "400": { @@ -298389,20 +372914,65 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Find which companies are hiring", + "tags": [ + "Datasets" + ] + } + }, + "/datasets/jobs/companies/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one discovered company board by its dataset board id. When the company name matches recent public U.S. Department of Labor LCA disclosure data, the response includes `lca_sponsorship` with filing counts and observed fiscal-quarter range; this is company-level historical evidence, not a guarantee for a specific role or candidate. When the board carries a known domain, the response also includes a `tech_stack` firmographic hint. Returns 404 when the board id is not in the registry.", + "operationId": "datasets-jobs-company-item", + "parameters": [ + { + "description": "Dataset board id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "icims:062ad50e489784f8d225" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/datasets.jobsItemResponseDoc" + } + }, + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -298413,95 +372983,25 @@ "ApiKeyAuth": [] } ], - "summary": "Search Booking.com hotels", + "summary": "Get a single company by board id", "tags": [ - "Booking" + "Datasets" ] } }, - "/boots/search": { + "/datasets/jobs/facets": { "get": { - "description": "Returns one page of Boots UK's public product catalog, including product cards and live facets. Supply `q`, one or more hierarchical `category` keys, or both. Use repeatable `filter=facet_key:option_key` values from that response's dynamic facets, plus the dedicated price and stock controls. `sort` accepts `relevance`, `price_low_to_high`, `price_high_to_low`, `top_rated`, `best_seller`, or `newest`.", - "operationId": "boots-search", + "consumes": [ + "application/json" + ], + "description": "Aggregations over all open postings: top companies hiring, breakdown by provider (every provider filterable via /datasets/jobs/search's `provider` param), department, location, employment type, skill, benefit, education, security clearance, seniority, and ESCO/ISCO job family, plus the remote share — a live hiring-market snapshot. Seniority uses one mutually exclusive value: `entry`, `mid`, or `senior`; ambiguous occupations are omitted from job-family buckets.", + "operationId": "datasets-jobs-facets", "parameters": [ { - "description": "Free-text product query; required unless category is supplied", - "in": "query", - "name": "q", - "type": "string", - "x-example": "vitamin c" - }, - { - "collectionFormat": "multi", - "description": "Repeat the exact category hierarchy keys from root through the desired leaf; required unless q is supplied", - "in": "query", - "items": { - "type": "string" - }, - "name": "category", - "type": "array", - "x-example": "health & pharmacy" - }, - { - "collectionFormat": "multi", - "description": "Repeat a dynamic facet filter as facet_key:option_key, using key/option values returned in facets; category, currentPrice, and inStock use their dedicated parameters", - "in": "query", - "items": { - "type": "string" - }, - "name": "filter", - "type": "array", - "x-example": "brand:No7" - }, - { - "description": "Inclusive minimum GBP price; may be combined with price_max", - "in": "query", - "name": "price_min", - "type": "number", - "x-example": 45 - }, - { - "description": "Inclusive maximum GBP price; may be combined with price_min", - "in": "query", - "name": "price_max", - "type": "number", - "x-example": 100 - }, - { - "description": "true hides out-of-stock items; false leaves stock unfiltered", - "in": "query", - "name": "in_stock", - "type": "boolean", - "x-example": true - }, - { - "default": 1, - "description": "Page from 1 through 1000", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "default": 48, - "description": "Results per page from 1 through 48", + "description": "Buckets per facet, default 20, max 100", "in": "query", - "name": "page_size", + "name": "size", "type": "integer" - }, - { - "default": "relevance", - "description": "Sort: relevance, price_low_to_high, price_high_to_low, top_rated, best_seller, or newest", - "enum": [ - "relevance", - "price_low_to_high", - "price_high_to_low", - "top_rated", - "best_seller", - "newest" - ], - "in": "query", - "name": "sort", - "type": "string" } ], "produces": [ @@ -298511,7 +373011,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boots.searchResponseDoc" + "$ref": "#/definitions/datasets.jobsFacetResponseDoc" } }, "400": { @@ -298520,14 +373020,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -298538,24 +373032,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Boots UK products and categories", + "summary": "Facet the jobs dataset (hiring market aggregates)", "tags": [ - "Boots" + "Datasets" ] } }, - "/boots/suggest": { + "/datasets/jobs/items/{id}": { "get": { - "description": "Returns Boots UK's own public typeahead phrases for a partial product query. The suggestions are search terms only; pass one to boots-search's q parameter for product cards and live facets.", - "operationId": "boots-suggest", + "consumes": [ + "application/json" + ], + "description": "Returns one crawled job posting by its dataset posting id, the `posting_id` of a search result. Alongside the posting itself, `seniority_level` is `entry`, `mid` or `senior`, and occupation fields appear only when title and skills support a reliable match. An id not in the index returns 404.", + "operationId": "datasets-jobs-item", "parameters": [ { - "description": "Partial product query", - "in": "query", - "name": "q", + "description": "Dataset posting id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "vitamin c" + "x-example": "personio:8e850ee0967201fc1bf3:364429bb4364f43b" } ], "produces": [ @@ -298565,7 +373062,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boots.suggestResponseDoc" + "$ref": "#/definitions/datasets.jobsItemResponseDoc" } }, "400": { @@ -298574,14 +373071,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -298592,16 +373089,90 @@ "ApiKeyAuth": [] } ], - "summary": "Get Boots UK search-box suggestions", + "summary": "Get a single posting from the jobs dataset", "tags": [ - "Boots" + "Datasets" ] } }, - "/bostonglobe/news": { + "/datasets/jobs/nearby": { "get": { - "description": "Returns recent Boston Globe story metadata and summaries. Article bodies, sections, headlines-by-section, and author profiles are not exposed, and some stories require a subscription.", - "operationId": "bostonglobe-news", + "consumes": [ + "application/json" + ], + "description": "Finds crawled job postings within `radius_km` of a `lat`/`lon`, nearest first. Only geocoded postings participate (the geo-enrich worker back-fills coordinates from each posting's location). Open roles only by default. provider enum: `greenhouse`, `lever`, `ashby`, `workday`, `smartrecruiters`, `workable`, `recruitee`, `rippling`, `personio`, `teamtailor`, `oracle`, `ukg`, `icims`, `eightfold`, `gem`, `pinpoint`, `amazon-jobs`, `apple-jobs`, `google-jobs`, `meta-jobs`, `tesla-jobs`. Billing: this endpoint costs 1 credit per 10 records returned, rounded up, with a minimum of 1 (up to 10 records cost 1, a full page of 100 costs 10).", + "operationId": "datasets-jobs-nearby", + "parameters": [ + { + "description": "Latitude, -90..90", + "in": "query", + "name": "lat", + "required": true, + "type": "number", + "x-example": 40.7484257 + }, + { + "description": "Longitude, -180..180", + "in": "query", + "name": "lon", + "required": true, + "type": "number", + "x-example": -73.98567 + }, + { + "description": "Search radius in km, default 50, max 500", + "in": "query", + "name": "radius_km", + "type": "number" + }, + { + "description": "Provider filter", + "enum": [ + "greenhouse", + "lever", + "ashby", + "workday", + "smartrecruiters", + "workable", + "recruitee", + "rippling", + "personio", + "teamtailor", + "oracle", + "ukg", + "icims", + "eightfold", + "gem", + "pinpoint", + "amazon-jobs", + "apple-jobs", + "google-jobs", + "meta-jobs", + "tesla-jobs" + ], + "in": "query", + "name": "provider", + "type": "string" + }, + { + "description": "Include closed/filled roles (default false)", + "in": "query", + "name": "include_closed", + "type": "boolean" + }, + { + "description": "Page number, default 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, default 20, max 100", + "in": "query", + "name": "page_size", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -298609,17 +373180,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/datasets.jobsSearchResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -298630,70 +373201,166 @@ "ApiKeyAuth": [] } ], - "summary": "Get Boston Globe top stories", + "summary": "Find postings near a coordinate", "tags": [ - "Boston Globe" + "Datasets" ] } }, - "/boxofficemojo/brand": { + "/datasets/jobs/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns release rows from a Box Office Mojo brand page. Pass exactly one of `id`, `path`, or `url`.", - "operationId": "boxofficemojo-brand", + "description": "Full-text + faceted search over every job posting crawled from every discovered company ATS board (Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable, Recruitee, Rippling, Personio, Teamtailor, Oracle, UKG, iCIMS, Eightfold, Gem, Pinpoint) plus 5 single-company big-tech careers platforms (Amazon, Apple, Google, Meta, Tesla). Open roles only by default (set include_closed=true for historical/filled roles). Salary is parsed from a structured field when the provider has one, or from an explicit pay figure stated in the description otherwise, so coverage varies by posting rather than by provider; min_salary/max_salary filter on it and require salary_currency, since comparing raw compensation numbers across currencies is meaningless. Location is also exposed as structured city/state/country fields alongside the free-text location string, so city/state/country filter on an exact match of those parsed components rather than substring-matching the display string. job_family is an exact level-2 ISCO family label assigned from ESCO occupation evidence; ambiguous postings remain unclassified and do not match that filter. employment_type is never populated for google-jobs/meta-jobs, and posted_at (so sort=posted_desc) is never populated for meta-jobs/tesla-jobs -- their upstream APIs expose no such field. provider enum: `greenhouse`, `lever`, `ashby`, `workday`, `smartrecruiters`, `workable`, `recruitee`, `rippling`, `personio`, `teamtailor`, `oracle`, `ukg`, `icims`, `eightfold`, `gem`, `pinpoint`, `amazon-jobs`, `apple-jobs`, `google-jobs`, `meta-jobs`, `tesla-jobs`. workplace_type enum: `onsite`, `hybrid`, `remote`. sort enum: `relevance`, `posted_desc`, `company_asc`. Billing: this search costs 1 credit per 10 records returned, rounded up, with a minimum of 1 (up to 10 records cost 1, a full page of 100 costs 10).", + "operationId": "datasets-jobs-search", "parameters": [ { - "description": "Box Office Mojo brand id", + "description": "Full-text over title, company, description", "in": "query", - "name": "id", - "type": "string", - "x-example": "bn3732077058" + "name": "q", + "type": "string" }, { - "description": "Box Office Mojo brand path", + "description": "Company name match", "in": "query", - "name": "path", - "type": "string", - "x-example": "/brand/bn3732077058/" + "name": "company", + "type": "string" }, { - "description": "Absolute https://www.boxofficemojo.com brand URL", + "description": "Provider filter", + "enum": [ + "greenhouse", + "lever", + "ashby", + "workday", + "smartrecruiters", + "workable", + "recruitee", + "rippling", + "personio", + "teamtailor", + "oracle", + "ukg", + "icims", + "eightfold", + "gem", + "pinpoint", + "amazon-jobs", + "apple-jobs", + "google-jobs", + "meta-jobs", + "tesla-jobs" + ], "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.boxofficemojo.com/brand/bn3732077058/" + "name": "provider", + "type": "string" }, { - "description": "Sort field", + "description": "Exact department filter", + "in": "query", + "name": "department", + "type": "string" + }, + { + "description": "Location match", + "in": "query", + "name": "location", + "type": "string" + }, + { + "description": "Exact city filter (parsed location component)", + "in": "query", + "name": "city", + "type": "string" + }, + { + "description": "Exact state/region filter (parsed location component)", + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "Exact country filter (parsed location component); ISO country code or name, matched case-insensitively", + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Exact employment-type filter", + "in": "query", + "name": "employment_type", + "type": "string" + }, + { + "description": "Exact ESCO/ISCO job-family label filter", + "in": "query", + "name": "job_family", + "type": "string" + }, + { + "description": "Filter by remote (true or false)", + "in": "query", + "name": "remote", + "type": "boolean" + }, + { + "description": "Workplace type filter", "enum": [ - "grossToDate", - "maxNumTheaters", - "openingWeekendGross", - "openingNumTheaters", - "releaseDate" + "onsite", + "hybrid", + "remote" ], "in": "query", - "name": "sort", + "name": "workplace_type", + "type": "string" + }, + { + "description": "Include closed/filled roles (default false = open only)", + "in": "query", + "name": "include_closed", + "type": "boolean" + }, + { + "description": "Minimum salary (matches postings whose range reaches at least this); requires salary_currency", + "in": "query", + "name": "min_salary", + "type": "number" + }, + { + "description": "Maximum salary (matches postings whose range starts at or below this); requires salary_currency", + "in": "query", + "name": "max_salary", + "type": "number" + }, + { + "description": "3-letter ISO currency code (e.g. USD) the min_salary/max_salary bounds are in; required when either bound is set", + "in": "query", + "name": "salary_currency", "type": "string" }, { - "description": "Sort direction", + "description": "Sort enum: relevance, posted_desc, company_asc", "enum": [ - "asc", - "desc" + "relevance", + "posted_desc", + "company_asc" ], "in": "query", - "name": "sortDir", + "name": "sort", "type": "string" }, { - "description": "Row offset for pagination (page size 100)", + "description": "Page number, default 1", "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "name": "page", + "type": "integer" + }, + { + "description": "Page size, default 20, max 100; page*page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -298703,7 +373370,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.taxonomyDetailResponseDoc" + "$ref": "#/definitions/datasets.jobsSearchResponseDoc" } }, "400": { @@ -298712,29 +373379,11 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -298742,40 +373391,159 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo brand detail", + "summary": "Search the jobs dataset (all companies' live postings)", "tags": [ - "Box Office Mojo" + "Datasets" ] } }, - "/boxofficemojo/brands": { + "/datasets/journalists/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns Box Office Mojo's brand chart, ranked, with each brand's `name`, `id`, `path`, `url`, release count and lifetime gross (an integer in `lifetime_gross`, the displayed text in `lifetime_gross_raw`). Reorder with `sort` (`totalGross`, `numReleases` or `grossToDate`) and `sortDir` (`asc` or `desc`); they are echoed back only when applied.", - "operationId": "boxofficemojo-brands", + "description": "Returns distribution counts over the journalists index (dataset id enum value `journalists`), honoring the same filters as search. Facet enum: `outlet`, `vertical`, `topic`, `contact_type`, `record_type`, `role_type`, `email_kind`, `outreach_readiness_band`. `facet=outlet` returns every outlet (up to 1000) in one response; other facets return their top 50 values. Facets are not paginated: `page` and `page_size` are ignored.", + "operationId": "datasets-journalists-facets", "parameters": [ { - "description": "Sort field", + "description": "Facet enum: outlet, vertical, topic, contact_type, record_type, role_type, email_kind, outreach_readiness_band", "enum": [ - "totalGross", - "numReleases", - "grossToDate" + "outlet", + "vertical", + "topic", + "contact_type", + "record_type", + "role_type", + "email_kind", + "outreach_readiness_band" ], "in": "query", - "name": "sort", + "name": "facet", + "required": true, + "type": "string", + "x-example": "outlet" + }, + { + "description": "Full-text match on the journalist's name, title, and bio, max 256 characters", + "in": "query", + "name": "q", "type": "string" }, { - "description": "Sort direction", + "description": "Exact outlet id filter", + "in": "query", + "name": "outlet", + "type": "string" + }, + { + "description": "Exact beat-vertical filter. Enum: tech, crypto, marketing, consumer_tech, consumer_policy, cybersecurity, health, gaming, climate, business, entertainment, sports, legal, science, politics, real_estate, automotive, travel, food, education, design, film_tv, fashion, music, personal_finance, tech_independent, culture_independent, local_news, construction, banking, retail, aerospace_defense, energy, agriculture, local_business, general_news", "enum": [ - "asc", - "desc" + "tech", + "crypto", + "marketing", + "consumer_tech", + "consumer_policy", + "cybersecurity", + "health", + "gaming", + "climate", + "business", + "entertainment", + "sports", + "legal", + "science", + "politics", + "real_estate", + "automotive", + "travel", + "food", + "education", + "design", + "film_tv", + "fashion", + "music", + "personal_finance", + "tech_independent", + "culture_independent", + "local_news", + "construction", + "banking", + "retail", + "aerospace_defense", + "energy", + "agriculture", + "local_business", + "general_news" ], "in": "query", - "name": "sortDir", + "name": "vertical", + "type": "string" + }, + { + "description": "Exact topic filter", + "in": "query", + "name": "topic", + "type": "string" + }, + { + "description": "Contact-availability filter. Enum: email, social, none", + "enum": [ + "email", + "social", + "none" + ], + "in": "query", + "name": "contact_type", + "type": "string" + }, + { + "description": "Record classification filter. Enum: person, desk, organization, syndicated_byline, unknown", + "enum": [ + "person", + "desk", + "organization", + "syndicated_byline", + "unknown" + ], + "in": "query", + "name": "record_type", + "type": "string" + }, + { + "description": "Role classification filter. Enum: staff, editor, reporter, contributor, freelancer, columnist, non_editorial, unknown", + "enum": [ + "staff", + "editor", + "reporter", + "contributor", + "freelancer", + "columnist", + "non_editorial", + "unknown" + ], + "in": "query", + "name": "role_type", + "type": "string" + }, + { + "description": "Email semantics filter. Enum: individual_work, individual_personal_public, shared_desk, tips_or_submissions, outlet_generic, unknown", + "enum": [ + "individual_work", + "individual_personal_public", + "shared_desk", + "tips_or_submissions", + "outlet_generic", + "unknown" + ], + "in": "query", + "name": "email_kind", "type": "string" + }, + { + "description": "Minimum outreach-readiness score, from 0 to 100", + "in": "query", + "name": "min_outreach_readiness", + "type": "integer" } ], "produces": [ @@ -298785,7 +373553,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.taxonomyListResponseDoc" + "$ref": "#/definitions/datasets.journalistsFacetResponseDoc" } }, "400": { @@ -298805,12 +373573,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -298818,35 +373580,35 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo brand chart", + "summary": "Facet the journalists dataset", "tags": [ - "Box Office Mojo" + "Datasets" ] } }, - "/boxofficemojo/calendar": { + "/datasets/journalists/items/{outlet}/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns Box Office Mojo's domestic release schedule for one month, grouped by date. `year` (1921 to 2100) and `month` (1 to 12) are both required. Each release has its title, `release_url`, `distributor`, `scale`, `genres`, `cast` and poster image URLs when present.", - "operationId": "boxofficemojo-calendar", + "description": "Returns one journalist by outlet id and slug from dataset id enum value `journalists`. Returns 404 when the outlet is not supported or the journalist is not in the index.", + "operationId": "datasets-journalists-item", "parameters": [ { - "description": "Calendar year, from 1921 through 2100", - "in": "query", - "name": "year", + "description": "Outlet id, e.g. techcrunch. Use the ids returned by facets?facet=outlet", + "in": "path", + "name": "outlet", "required": true, - "type": "integer", - "x-example": 2026 + "type": "string", + "x-example": "techcrunch" }, { - "description": "Calendar month, 1 through 12", - "in": "query", - "name": "month", + "description": "Journalist slug within the outlet, e.g. zack-whittaker", + "in": "path", + "name": "slug", "required": true, - "type": "integer", - "x-example": 9 + "type": "string", + "x-example": "zack-whittaker" } ], "produces": [ @@ -298856,7 +373618,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.calendarResponseDoc" + "$ref": "#/definitions/datasets.journalistsItemResponseDoc" } }, "400": { @@ -298865,20 +373627,20 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -298889,26 +373651,166 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo domestic release schedule", + "summary": "Get a journalist from the journalists dataset", "tags": [ - "Box Office Mojo" + "Datasets" ] } }, - "/boxofficemojo/calendar/changes": { + "/datasets/journalists/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns Box Office Mojo's list of changes to the domestic release schedule, grouped by change date. `offset` pages through the list in steps of 30, from 0 to 780. Each change has the release, `distributor`, `scale`, `old_date` and `new_date`, and `range` shows the position in the list.", - "operationId": "boxofficemojo-calendar-changes", + "description": "Searches the journalists index (dataset id enum value `journalists`) — public journalist and reporter records crawled from news outlets' own staff/author pages, for PR outreach. Each record carries the outlet, title, best-effort beat topics, and any public contact info found on that outlet's own page, plus deterministic record_type, role_type, email_kind, and outreach-readiness quality signals. There is no cross-outlet upstream search; this dataset is built by crawling a curated roster of outlets ourselves. vertical enum: `tech`, `crypto`, `marketing`, `consumer_tech`, `consumer_policy`, `cybersecurity`, `health`, `gaming`, `climate`, `business`, `entertainment`, `sports`, `legal`, `science`, `politics`, `real_estate`, `automotive`, `travel`, `food`, `education`, `design`, `film_tv`, `fashion`, `music`, `personal_finance`, `tech_independent`, `culture_independent`, `local_news`, `construction`, `banking`, `retail`, `aerospace_defense`, `energy`, `agriculture`, `local_business`. contact_type enum: `email`, `social`, `none`. record_type enum: `person`, `desk`, `organization`, `syndicated_byline`, `unknown`. role_type enum: `staff`, `editor`, `reporter`, `contributor`, `freelancer`, `columnist`, `non_editorial`, `unknown`. email_kind enum: `individual_work`, `individual_personal_public`, `shared_desk`, `tips_or_submissions`, `outlet_generic`, `unknown`. sort enum: `relevance`, `name_asc`, `outlet_asc`, `crawled_desc`, `readiness_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-journalists-search", "parameters": [ { - "description": "Changes page offset. Allowed values: 0, 30, 60, ... 780", + "description": "Full-text match on the journalist's name, title, and bio, max 256 characters", "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "name": "q", + "type": "string" + }, + { + "description": "Exact outlet id filter, e.g. techcrunch, coindesk. Use the ids returned by facets?facet=outlet", + "in": "query", + "name": "outlet", + "type": "string" + }, + { + "description": "Exact beat-vertical filter. Enum: tech, crypto, marketing, consumer_tech, consumer_policy, cybersecurity, health, gaming, climate, business, entertainment, sports, legal, science, politics, real_estate, automotive, travel, food, education, design, film_tv, fashion, music, personal_finance, tech_independent, culture_independent, local_news, construction, banking, retail, aerospace_defense, energy, agriculture, local_business, general_news", + "enum": [ + "tech", + "crypto", + "marketing", + "consumer_tech", + "consumer_policy", + "cybersecurity", + "health", + "gaming", + "climate", + "business", + "entertainment", + "sports", + "legal", + "science", + "politics", + "real_estate", + "automotive", + "travel", + "food", + "education", + "design", + "film_tv", + "fashion", + "music", + "personal_finance", + "tech_independent", + "culture_independent", + "local_news", + "construction", + "banking", + "retail", + "aerospace_defense", + "energy", + "agriculture", + "local_business", + "general_news" + ], + "in": "query", + "name": "vertical", + "type": "string" + }, + { + "description": "Exact topic filter, e.g. security, stablecoins. Use the values returned by facets?facet=topic", + "in": "query", + "name": "topic", + "type": "string" + }, + { + "description": "Contact-availability filter. Enum: email, social, none", + "enum": [ + "email", + "social", + "none" + ], + "in": "query", + "name": "contact_type", + "type": "string" + }, + { + "description": "Record classification filter. Enum: person, desk, organization, syndicated_byline, unknown", + "enum": [ + "person", + "desk", + "organization", + "syndicated_byline", + "unknown" + ], + "in": "query", + "name": "record_type", + "type": "string" + }, + { + "description": "Role classification filter. Enum: staff, editor, reporter, contributor, freelancer, columnist, non_editorial, unknown", + "enum": [ + "staff", + "editor", + "reporter", + "contributor", + "freelancer", + "columnist", + "non_editorial", + "unknown" + ], + "in": "query", + "name": "role_type", + "type": "string" + }, + { + "description": "Email semantics filter. Enum: individual_work, individual_personal_public, shared_desk, tips_or_submissions, outlet_generic, unknown", + "enum": [ + "individual_work", + "individual_personal_public", + "shared_desk", + "tips_or_submissions", + "outlet_generic", + "unknown" + ], + "in": "query", + "name": "email_kind", + "type": "string" + }, + { + "description": "Minimum outreach-readiness score, from 0 to 100", + "in": "query", + "name": "min_outreach_readiness", + "type": "integer" + }, + { + "description": "Sort enum: relevance, name_asc, outlet_asc, crawled_desc, readiness_desc", + "enum": [ + "relevance", + "name_asc", + "outlet_asc", + "crawled_desc", + "readiness_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -298918,7 +373820,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.calendarChangesResponseDoc" + "$ref": "#/definitions/datasets.journalistsSearchResponseDoc" } }, "400": { @@ -298938,12 +373840,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -298951,27 +373847,312 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo domestic release schedule changes", + "summary": "Search the journalists dataset", "tags": [ - "Box Office Mojo" + "Datasets" ] } }, - "/boxofficemojo/calendar/date": { + "/datasets/llms/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns the releases scheduled on one date in Box Office Mojo's domestic release schedule. `date` is required, in `YYYY-MM-DD` form. Each release has its title, `release_url`, `distributor`, `scale`, `genres`, `cast` and poster image URLs when present. A date with no scheduled releases returns a not-found error.", - "operationId": "boxofficemojo-calendar-date", + "description": "Returns distribution counts over the AI-readiness census (dataset id enum value `llms`), honoring the same filters as search — adoption by producer, generator, TLD or category, and which AI crawlers robots.txt blocks. Facet enum: `state`, `source_kind`, `generator`, `bot`, `policy`, `tld`, `category`, `robots_state`, `robots_default`, `blocked_crawler`, `partial_crawler`, `content_signal_train`, `full_state`, `home_status`. The filter enums are the same as search. Counts include `blocked` and `error` probes, which are unknown rather than absent; filter `state=present` or `state=absent` to count only sites that were established either way.", + "operationId": "datasets-llms-facets", "parameters": [ { - "description": "Calendar date in YYYY-MM-DD format", + "description": "Facet enum: state, source_kind, generator, bot, policy, tld, category, robots_state, robots_default, blocked_crawler, partial_crawler, content_signal_train, full_state, home_status", + "enum": [ + "state", + "source_kind", + "generator", + "bot", + "policy", + "tld", + "category", + "robots_state", + "robots_default", + "blocked_crawler", + "partial_crawler", + "content_signal_train", + "full_state", + "home_status" + ], "in": "query", - "name": "date", + "name": "facet", "required": true, "type": "string", - "x-example": "2026-09-04" + "x-example": "source_kind" + }, + { + "description": "Substring match on the site domain, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Full-text match on the /llms.txt title and summary, max 256 characters", + "in": "query", + "name": "text", + "type": "string" + }, + { + "description": "/llms.txt state. Enum: present, absent, blocked, error, skipped. blocked and error mean unknown, not absent", + "enum": [ + "present", + "absent", + "blocked", + "error", + "skipped" + ], + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "true keeps only sites serving a valid /llms.txt, false keeps the rest", + "in": "query", + "name": "valid", + "type": "boolean" + }, + { + "description": "Producer of a valid /llms.txt. Enum: shopify_agent_template, seo_plugin, platform_default, parked, custom", + "enum": [ + "shopify_agent_template", + "seo_plugin", + "platform_default", + "parked", + "custom" + ], + "in": "query", + "name": "source_kind", + "type": "string" + }, + { + "description": "Generator detected in a valid /llms.txt. Enum: yoast, aioseo, rankmath, wix, shopify, parked", + "enum": [ + "yoast", + "aioseo", + "rankmath", + "wix", + "shopify", + "parked" + ], + "in": "query", + "name": "generator", + "type": "string" + }, + { + "description": "AI crawler named inside a valid /llms.txt, e.g. GPTBot (see facet=bot for the values)", + "in": "query", + "name": "bot", + "type": "string" + }, + { + "description": "Minimum number of links in a valid /llms.txt, 0 or greater", + "in": "query", + "name": "min_links", + "type": "integer" + }, + { + "description": "true keeps only valid /llms.txt files that mention the Model Context Protocol", + "in": "query", + "name": "mentions_mcp", + "type": "boolean" + }, + { + "description": "true keeps only valid /llms.txt files that mention OpenAPI or Swagger", + "in": "query", + "name": "mentions_openapi", + "type": "boolean" + }, + { + "description": "true keeps only valid /llms.txt files that still hold template placeholder text", + "in": "query", + "name": "placeholder", + "type": "boolean" + }, + { + "description": "true keeps only valid /llms.txt files containing instruction-override text aimed at AI readers", + "in": "query", + "name": "injection", + "type": "boolean" + }, + { + "description": "true keeps only sites serving a valid /llms-full.txt", + "in": "query", + "name": "full_valid", + "type": "boolean" + }, + { + "description": "/robots.txt state. Enum: present, absent, blocked, error, skipped", + "enum": [ + "present", + "absent", + "blocked", + "error", + "skipped" + ], + "in": "query", + "name": "robots_state", + "type": "string" + }, + { + "description": "Default stance of robots.txt toward AI crawlers. Enum: allowed, partial, blocked", + "enum": [ + "allowed", + "partial", + "blocked" + ], + "in": "query", + "name": "robots_default", + "type": "string" + }, + { + "collectionFormat": "csv", + "description": "Repeatable AI crawler that robots.txt must block (AND). Enum: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, anthropic-ai, Google-Extended, PerplexityBot, Perplexity-User, CCBot, Bytespider, Applebot-Extended, Amazonbot, meta-externalagent, cohere-ai, Diffbot", + "in": "query", + "items": { + "enum": [ + "GPTBot", + "OAI-SearchBot", + "ChatGPT-User", + "ClaudeBot", + "Claude-SearchBot", + "Claude-User", + "anthropic-ai", + "Google-Extended", + "PerplexityBot", + "Perplexity-User", + "CCBot", + "Bytespider", + "Applebot-Extended", + "Amazonbot", + "meta-externalagent", + "cohere-ai", + "Diffbot" + ], + "type": "string" + }, + "name": "blocks_all", + "type": "array" + }, + { + "collectionFormat": "csv", + "description": "Repeatable AI crawler; robots.txt must block at least one (OR). Enum: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, anthropic-ai, Google-Extended, PerplexityBot, Perplexity-User, CCBot, Bytespider, Applebot-Extended, Amazonbot, meta-externalagent, cohere-ai, Diffbot", + "in": "query", + "items": { + "enum": [ + "GPTBot", + "OAI-SearchBot", + "ChatGPT-User", + "ClaudeBot", + "Claude-SearchBot", + "Claude-User", + "anthropic-ai", + "Google-Extended", + "PerplexityBot", + "Perplexity-User", + "CCBot", + "Bytespider", + "Applebot-Extended", + "Amazonbot", + "meta-externalagent", + "cohere-ai", + "Diffbot" + ], + "type": "string" + }, + "name": "blocks_any", + "type": "array" + }, + { + "collectionFormat": "csv", + "description": "Repeatable AI crawler that robots.txt must NOT block. Enum: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, anthropic-ai, Google-Extended, PerplexityBot, Perplexity-User, CCBot, Bytespider, Applebot-Extended, Amazonbot, meta-externalagent, cohere-ai, Diffbot", + "in": "query", + "items": { + "enum": [ + "GPTBot", + "OAI-SearchBot", + "ChatGPT-User", + "ClaudeBot", + "Claude-SearchBot", + "Claude-User", + "anthropic-ai", + "Google-Extended", + "PerplexityBot", + "Perplexity-User", + "CCBot", + "Bytespider", + "Applebot-Extended", + "Amazonbot", + "meta-externalagent", + "cohere-ai", + "Diffbot" + ], + "type": "string" + }, + "name": "not_blocked", + "type": "array" + }, + { + "description": "true keeps only sites whose robots.txt blocks all 17 tracked AI crawlers", + "in": "query", + "name": "all_ai_blocked", + "type": "boolean" + }, + { + "description": "Minimum number of AI training crawlers (of 11 tracked) that robots.txt blocks, 0 or greater", + "in": "query", + "name": "min_train_blocked", + "type": "integer" + }, + { + "description": "Content-Signal ai-train value declared in robots.txt. Enum: yes, no", + "enum": [ + "yes", + "no" + ], + "in": "query", + "name": "content_signal_train", + "type": "string" + }, + { + "description": "Exact top-level-domain filter, e.g. com, org, io", + "in": "query", + "name": "tld", + "type": "string" + }, + { + "description": "Exact category label carried by the source list; the top-1M run has none, so this is empty for it", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "true keeps only sites whose homepage control request answered, false only sites that did not", + "in": "query", + "name": "reachable", + "type": "boolean" + }, + { + "description": "true keeps only sites whose homepage was walled off from the scan (a block or challenge)", + "in": "query", + "name": "home_blocked", + "type": "boolean" + }, + { + "description": "false (the common case) excludes backend CDN/DNS/cloud-vendor hostnames that rank highly but serve no public homepage; true keeps only those", + "in": "query", + "name": "is_infrastructure", + "type": "boolean" + }, + { + "description": "Scan run id; defaults to the latest run", + "in": "query", + "name": "run_id", + "type": "string" } ], "produces": [ @@ -298981,7 +374162,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.calendarDateResponseDoc" + "$ref": "#/definitions/datasets.llmsFacetResponseDoc" } }, "400": { @@ -298990,12 +374171,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -299007,12 +374182,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -299020,27 +374189,27 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo domestic release schedule date", + "summary": "Facet the AI-readiness (llms.txt) dataset", "tags": [ - "Box Office Mojo" + "Datasets" ] } }, - "/boxofficemojo/date/domestic": { + "/datasets/llms/items/{domain}": { "get": { "consumes": [ "application/json" ], - "description": "Returns rows from Box Office Mojo's domestic daily chart. Empty upstream daily pages return a typed not-found error rather than an empty success.", - "operationId": "boxofficemojo-date-domestic", + "description": "Returns one site by its domain from dataset id enum value `llms`, including the stored `/llms.txt` and `/llms-full.txt` bodies (`llms.body`, `full.body`; `body_truncated` marks a cut file, and a file flagged as an instruction override has its title, summary, and body withheld with `body_withheld` set to `injection`), their structure and classification, and the `/robots.txt` stance toward each tracked AI crawler. Returns 404 when the domain is not in the dataset or its owner asked for removal (privacy@crawlora.net).", + "operationId": "datasets-llms-item", "parameters": [ { - "description": "Domestic box office date in YYYY-MM-DD format", - "in": "query", - "name": "date", + "description": "Site domain, e.g. shopify.com (a scheme and www. are stripped)", + "in": "path", + "name": "domain", "required": true, "type": "string", - "x-example": "2025-12-25" + "x-example": "shopify.com" } ], "produces": [ @@ -299050,7 +374219,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.domesticDateResponseDoc" + "$ref": "#/definitions/datasets.llmsItemResponseDoc" } }, "400": { @@ -299076,12 +374245,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -299089,258 +374252,314 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo domestic daily box office", + "summary": "Get a site from the AI-readiness (llms.txt) dataset", "tags": [ - "Box Office Mojo" + "Datasets" ] } }, - "/boxofficemojo/franchise": { + "/datasets/llms/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns release rows from a Box Office Mojo franchise page. Pass exactly one of `id`, `path`, or `url`.", - "operationId": "boxofficemojo-franchise", + "description": "Searches the AI-readiness census of the top 1M sites (dataset id enum value `llms`) — one record per site describing whether it serves a real `/llms.txt` or `/llms-full.txt` (who produced it, what it links to and mentions) and what its `/robots.txt` says to 17 AI crawlers, next to a homepage control request. Search results omit the file bodies; read one site with the item endpoint. `blocked` and `error` states mean unknown, never absent. Sort enum: `relevance`, `rank_asc`, `links_desc`, `bytes_desc`, `domain_asc`, `crawled_desc`. state and robots_state enum: `present`, `absent`, `blocked`, `error`, `skipped`. source_kind enum: `shopify_agent_template`, `seo_plugin`, `platform_default`, `parked`, `custom`. generator enum: `yoast`, `aioseo`, `rankmath`, `wix`, `shopify`, `parked`. robots_default enum: `allowed`, `partial`, `blocked`. content_signal_train enum: `yes`, `no`. Crawler enum for blocks_all, blocks_any and not_blocked: `GPTBot`, `OAI-SearchBot`, `ChatGPT-User`, `ClaudeBot`, `Claude-SearchBot`, `Claude-User`, `anthropic-ai`, `Google-Extended`, `PerplexityBot`, `Perplexity-User`, `CCBot`, `Bytespider`, `Applebot-Extended`, `Amazonbot`, `meta-externalagent`, `cohere-ai`, `Diffbot`. Site owners can ask for removal at privacy@crawlora.net. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-llms-search", "parameters": [ { - "description": "Box Office Mojo franchise id", + "description": "Substring match on the site domain, max 256 characters", "in": "query", - "name": "id", - "type": "string", - "x-example": "fr541495045" + "name": "q", + "type": "string" }, { - "description": "Box Office Mojo franchise path", + "description": "Full-text match on the /llms.txt title and summary, max 256 characters", "in": "query", - "name": "path", - "type": "string", - "x-example": "/franchise/fr541495045/" + "name": "text", + "type": "string" }, { - "description": "Absolute https://www.boxofficemojo.com franchise URL", + "description": "/llms.txt state. Enum: present, absent, blocked, error, skipped. blocked and error mean unknown, not absent", + "enum": [ + "present", + "absent", + "blocked", + "error", + "skipped" + ], "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.boxofficemojo.com/franchise/fr541495045/" + "name": "state", + "type": "string" }, { - "description": "Sort field", + "description": "true keeps only sites serving a valid /llms.txt, false keeps the rest", + "in": "query", + "name": "valid", + "type": "boolean" + }, + { + "description": "Producer of a valid /llms.txt. Enum: shopify_agent_template, seo_plugin, platform_default, parked, custom", "enum": [ - "grossToDate", - "maxNumTheaters", - "openingWeekendGross", - "openingNumTheaters", - "releaseDate" + "shopify_agent_template", + "seo_plugin", + "platform_default", + "parked", + "custom" ], "in": "query", - "name": "sort", + "name": "source_kind", "type": "string" }, { - "description": "Sort direction", + "description": "Generator detected in a valid /llms.txt. Enum: yoast, aioseo, rankmath, wix, shopify, parked", "enum": [ - "asc", - "desc" + "yoast", + "aioseo", + "rankmath", + "wix", + "shopify", + "parked" ], "in": "query", - "name": "sortDir", + "name": "generator", "type": "string" }, { - "description": "Row offset for pagination (page size 100)", + "description": "AI crawler named inside a valid /llms.txt, e.g. GPTBot (see facet=bot for the values)", "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/boxofficemojo.taxonomyDetailResponseDoc" - } + "name": "bot", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Minimum number of links in a valid /llms.txt, 0 or greater", + "in": "query", + "name": "min_links", + "type": "integer" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "true keeps only valid /llms.txt files that mention the Model Context Protocol", + "in": "query", + "name": "mentions_mcp", + "type": "boolean" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "true keeps only valid /llms.txt files that mention OpenAPI or Swagger", + "in": "query", + "name": "mentions_openapi", + "type": "boolean" }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "true keeps only valid /llms.txt files that still hold template placeholder text", + "in": "query", + "name": "placeholder", + "type": "boolean" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Box Office Mojo franchise detail", - "tags": [ - "Box Office Mojo" - ] - } - }, - "/boxofficemojo/franchises": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Box Office Mojo's franchise chart, ranked, with each franchise's `name`, `id`, `path`, `url`, release count and lifetime gross (an integer in `lifetime_gross`, the displayed text in `lifetime_gross_raw`). Reorder with `sort` (`totalGross`, `numReleases` or `grossToDate`) and `sortDir` (`asc` or `desc`); they are echoed back only when applied.", - "operationId": "boxofficemojo-franchises", - "parameters": [ + "description": "true keeps only valid /llms.txt files containing instruction-override text aimed at AI readers", + "in": "query", + "name": "injection", + "type": "boolean" + }, { - "description": "Sort field", + "description": "true keeps only sites serving a valid /llms-full.txt", + "in": "query", + "name": "full_valid", + "type": "boolean" + }, + { + "description": "/robots.txt state. Enum: present, absent, blocked, error, skipped", "enum": [ - "totalGross", - "numReleases", - "grossToDate" + "present", + "absent", + "blocked", + "error", + "skipped" ], "in": "query", - "name": "sort", + "name": "robots_state", "type": "string" }, { - "description": "Sort direction", + "description": "Default stance of robots.txt toward AI crawlers. Enum: allowed, partial, blocked", "enum": [ - "asc", - "desc" + "allowed", + "partial", + "blocked" ], "in": "query", - "name": "sortDir", + "name": "robots_default", "type": "string" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/boxofficemojo.taxonomyListResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "collectionFormat": "csv", + "description": "Repeatable AI crawler that robots.txt must block (AND). Enum: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, anthropic-ai, Google-Extended, PerplexityBot, Perplexity-User, CCBot, Bytespider, Applebot-Extended, Amazonbot, meta-externalagent, cohere-ai, Diffbot", + "in": "query", + "items": { + "enum": [ + "GPTBot", + "OAI-SearchBot", + "ChatGPT-User", + "ClaudeBot", + "Claude-SearchBot", + "Claude-User", + "anthropic-ai", + "Google-Extended", + "PerplexityBot", + "Perplexity-User", + "CCBot", + "Bytespider", + "Applebot-Extended", + "Amazonbot", + "meta-externalagent", + "cohere-ai", + "Diffbot" + ], + "type": "string" + }, + "name": "blocks_all", + "type": "array" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Box Office Mojo franchise chart", - "tags": [ - "Box Office Mojo" - ] - } - }, - "/boxofficemojo/genre": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns release rows from a Box Office Mojo genre page. Pass exactly one of `id`, `path`, or `url`.", - "operationId": "boxofficemojo-genre", - "parameters": [ + "collectionFormat": "csv", + "description": "Repeatable AI crawler; robots.txt must block at least one (OR). Enum: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, anthropic-ai, Google-Extended, PerplexityBot, Perplexity-User, CCBot, Bytespider, Applebot-Extended, Amazonbot, meta-externalagent, cohere-ai, Diffbot", + "in": "query", + "items": { + "enum": [ + "GPTBot", + "OAI-SearchBot", + "ChatGPT-User", + "ClaudeBot", + "Claude-SearchBot", + "Claude-User", + "anthropic-ai", + "Google-Extended", + "PerplexityBot", + "Perplexity-User", + "CCBot", + "Bytespider", + "Applebot-Extended", + "Amazonbot", + "meta-externalagent", + "cohere-ai", + "Diffbot" + ], + "type": "string" + }, + "name": "blocks_any", + "type": "array" + }, { - "description": "Box Office Mojo genre id", + "collectionFormat": "csv", + "description": "Repeatable AI crawler that robots.txt must NOT block. Enum: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, anthropic-ai, Google-Extended, PerplexityBot, Perplexity-User, CCBot, Bytespider, Applebot-Extended, Amazonbot, meta-externalagent, cohere-ai, Diffbot", "in": "query", - "name": "id", - "type": "string", - "x-example": "sg3621777665" + "items": { + "enum": [ + "GPTBot", + "OAI-SearchBot", + "ChatGPT-User", + "ClaudeBot", + "Claude-SearchBot", + "Claude-User", + "anthropic-ai", + "Google-Extended", + "PerplexityBot", + "Perplexity-User", + "CCBot", + "Bytespider", + "Applebot-Extended", + "Amazonbot", + "meta-externalagent", + "cohere-ai", + "Diffbot" + ], + "type": "string" + }, + "name": "not_blocked", + "type": "array" }, { - "description": "Box Office Mojo genre path", + "description": "true keeps only sites whose robots.txt blocks all 17 tracked AI crawlers", "in": "query", - "name": "path", - "type": "string", - "x-example": "/genre/sg3621777665/" + "name": "all_ai_blocked", + "type": "boolean" }, { - "description": "Absolute https://www.boxofficemojo.com genre URL", + "description": "Minimum number of AI training crawlers (of 11 tracked) that robots.txt blocks, 0 or greater", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.boxofficemojo.com/genre/sg3621777665/" + "name": "min_train_blocked", + "type": "integer" }, { - "description": "Sort field", + "description": "Content-Signal ai-train value declared in robots.txt. Enum: yes, no", "enum": [ - "grossToDate", - "maxNumTheaters", - "openingWeekendGross", - "openingNumTheaters", - "releaseDate" + "yes", + "no" ], "in": "query", - "name": "sort", + "name": "content_signal_train", "type": "string" }, { - "description": "Sort direction", + "description": "Exact top-level-domain filter, e.g. com, org, io", + "in": "query", + "name": "tld", + "type": "string" + }, + { + "description": "Exact category label carried by the source list; the top-1M run has none, so this is empty for it", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "true keeps only sites whose homepage control request answered, false only sites that did not", + "in": "query", + "name": "reachable", + "type": "boolean" + }, + { + "description": "true keeps only sites whose homepage was walled off from the scan (a block or challenge)", + "in": "query", + "name": "home_blocked", + "type": "boolean" + }, + { + "description": "false (the common case) excludes backend CDN/DNS/cloud-vendor hostnames that rank highly but serve no public homepage; true keeps only those", + "in": "query", + "name": "is_infrastructure", + "type": "boolean" + }, + { + "description": "Scan run id; defaults to the latest run", + "in": "query", + "name": "run_id", + "type": "string" + }, + { + "description": "Sort enum: relevance, rank_asc, links_desc, bytes_desc, domain_asc, crawled_desc", "enum": [ - "asc", - "desc" + "relevance", + "rank_asc", + "links_desc", + "bytes_desc", + "domain_asc", + "crawled_desc" ], "in": "query", - "name": "sortDir", + "name": "sort", "type": "string" }, { - "description": "Row offset for pagination (page size 100)", + "description": "Page number, defaults to 1", "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -299350,7 +374569,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.taxonomyDetailResponseDoc" + "$ref": "#/definitions/datasets.llmsSearchResponseDoc" } }, "400": { @@ -299359,12 +374578,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -299376,12 +374589,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -299389,40 +374596,96 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo genre detail", + "summary": "Search the AI-readiness (llms.txt) dataset", "tags": [ - "Box Office Mojo" + "Datasets" ] } }, - "/boxofficemojo/genres": { + "/datasets/numbeo-cities/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns Box Office Mojo's genre chart, ranked, with each genre's `name`, `id`, `path`, `url`, release count and lifetime gross (an integer in `lifetime_gross`, the displayed text in `lifetime_gross_raw`). Reorder with `sort` (`totalGross`, `numTitles` or `grossToDate`) and `sortDir` (`asc` or `desc`); they are echoed back only when applied.", - "operationId": "boxofficemojo-genres", + "description": "Returns city counts per country for the Numbeo cities dataset; `facet` is required and accepts only `country`. Narrow the counts with `q`, `country` and index thresholds such as `min_cost_of_living_index`, `min_safety_index` or `max_pollution_index`. Items are value and count pairs.", + "operationId": "datasets-numbeo-cities-facets", "parameters": [ { - "description": "Sort field", + "description": "Facet enum: country", "enum": [ - "totalGross", - "numTitles", - "grossToDate" + "country" ], "in": "query", - "name": "sort", + "name": "facet", + "required": true, + "type": "string", + "x-example": "country" + }, + { + "description": "Full-text query over the city name, max 256 characters", + "in": "query", + "name": "q", "type": "string" }, { - "description": "Sort direction", - "enum": [ - "asc", - "desc" - ], + "description": "Exact country filter, max 128 characters", "in": "query", - "name": "sortDir", + "name": "country", "type": "string" + }, + { + "description": "Minimum Cost of Living Index (New York = 100)", + "in": "query", + "name": "min_cost_of_living_index", + "type": "number" + }, + { + "description": "Maximum Cost of Living Index (New York = 100)", + "in": "query", + "name": "max_cost_of_living_index", + "type": "number" + }, + { + "description": "Minimum Quality of Life Index", + "in": "query", + "name": "min_quality_of_life_index", + "type": "number" + }, + { + "description": "Minimum Crime Index", + "in": "query", + "name": "min_crime_index", + "type": "number" + }, + { + "description": "Maximum Crime Index", + "in": "query", + "name": "max_crime_index", + "type": "number" + }, + { + "description": "Minimum Safety Index", + "in": "query", + "name": "min_safety_index", + "type": "number" + }, + { + "description": "Minimum Health Care Index", + "in": "query", + "name": "min_health_care_index", + "type": "number" + }, + { + "description": "Maximum Pollution Index", + "in": "query", + "name": "max_pollution_index", + "type": "number" + }, + { + "description": "Maximum Traffic Index", + "in": "query", + "name": "max_traffic_index", + "type": "number" } ], "produces": [ @@ -299432,7 +374695,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.taxonomyListResponseDoc" + "$ref": "#/definitions/datasets.numbeoCitiesFacetResponseDoc" } }, "400": { @@ -299452,12 +374715,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -299465,37 +374722,27 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo genre chart", + "summary": "Facet the Numbeo cities dataset", "tags": [ - "Box Office Mojo" + "Datasets" ] } }, - "/boxofficemojo/lifetime-grosses": { + "/datasets/numbeo-cities/items/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of Box Office Mojo's lifetime gross chart of movies. `area` is `worldwide` (default) or `domestic`, and `offset` pages in steps of 200 from 0 to 800. Each row has `rank`, `title`, `title_id`, `year` and `lifetime_gross` as an integer, with the displayed text in `lifetime_gross_raw`.", - "operationId": "boxofficemojo-lifetime-grosses", + "description": "Returns one Numbeo city from the dataset by `slug` such as `Los-Angeles`. The record has the city, country, `coverage` list and the cost of living, rent, quality of life, crime, safety, health care, pollution, traffic and property indices. Indices appear only where the city was ranked.", + "operationId": "datasets-numbeo-cities-item", "parameters": [ { - "description": "Chart area. Allowed values: worldwide, domestic", - "enum": [ - "worldwide", - "domestic" - ], - "in": "query", - "name": "area", + "description": "Numbeo city slug", + "in": "path", + "name": "slug", + "required": true, "type": "string", - "x-example": "worldwide" - }, - { - "description": "Chart page offset. Allowed values: 0, 200, 400, 600, 800", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "x-example": "Los-Angeles" } ], "produces": [ @@ -299505,7 +374752,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.lifetimeGrossesResponseDoc" + "$ref": "#/definitions/datasets.numbeoCityResponseDoc" } }, "400": { @@ -299514,20 +374761,20 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -299538,40 +374785,114 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo lifetime gross chart", + "summary": "Get a Numbeo city from the dataset", "tags": [ - "Box Office Mojo" + "Datasets" ] } }, - "/boxofficemojo/release": { + "/datasets/numbeo-cities/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns Box Office Mojo release summary fields and domestic daily rows from a release page. Pass exactly one of `id`, `path`, or `url`.", - "operationId": "boxofficemojo-release", + "description": "Searches the composite Numbeo cities dataset, merged from the current global rankings of all seven index families (cost of living, quality of life, crime, health care, pollution, traffic, property investment). A city appears once it is ranked by at least one family; coverage varies per city. Sort enum: `name_asc`, `cost_of_living_asc`, `cost_of_living_desc`, `quality_of_life_desc`, `safety_desc`, `crime_asc`, `health_care_desc`, `pollution_asc`, `traffic_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-numbeo-cities-search", "parameters": [ { - "description": "Box Office Mojo release id", + "description": "Full-text query over the city name, max 256 characters", "in": "query", - "name": "id", - "type": "string", - "x-example": "rl3389031937" + "name": "q", + "type": "string" }, { - "description": "Box Office Mojo release path", + "description": "Exact country filter, max 128 characters", "in": "query", - "name": "path", - "type": "string", - "x-example": "/release/rl3389031937/" + "name": "country", + "type": "string" }, { - "description": "Absolute https://www.boxofficemojo.com release URL", + "description": "Minimum Cost of Living Index (New York = 100)", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.boxofficemojo.com/release/rl3389031937/" + "name": "min_cost_of_living_index", + "type": "number" + }, + { + "description": "Maximum Cost of Living Index (New York = 100)", + "in": "query", + "name": "max_cost_of_living_index", + "type": "number" + }, + { + "description": "Minimum Quality of Life Index", + "in": "query", + "name": "min_quality_of_life_index", + "type": "number" + }, + { + "description": "Minimum Crime Index", + "in": "query", + "name": "min_crime_index", + "type": "number" + }, + { + "description": "Maximum Crime Index", + "in": "query", + "name": "max_crime_index", + "type": "number" + }, + { + "description": "Minimum Safety Index", + "in": "query", + "name": "min_safety_index", + "type": "number" + }, + { + "description": "Minimum Health Care Index", + "in": "query", + "name": "min_health_care_index", + "type": "number" + }, + { + "description": "Maximum Pollution Index", + "in": "query", + "name": "max_pollution_index", + "type": "number" + }, + { + "description": "Maximum Traffic Index", + "in": "query", + "name": "max_traffic_index", + "type": "number" + }, + { + "description": "Sort enum: name_asc, cost_of_living_asc, cost_of_living_desc, quality_of_life_desc, safety_desc, crime_asc, health_care_desc, pollution_asc, traffic_asc", + "enum": [ + "name_asc", + "cost_of_living_asc", + "cost_of_living_desc", + "quality_of_life_desc", + "safety_desc", + "crime_asc", + "health_care_desc", + "pollution_asc", + "traffic_asc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -299581,7 +374902,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.releaseResponseDoc" + "$ref": "#/definitions/datasets.numbeoCitiesSearchResponseDoc" } }, "400": { @@ -299590,12 +374911,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -299607,12 +374922,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -299620,40 +374929,27 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo release detail", + "summary": "Search the Numbeo cities dataset", "tags": [ - "Box Office Mojo" + "Datasets" ] } }, - "/boxofficemojo/release-group": { + "/datasets/numbeo-countries/items/{country}": { "get": { "consumes": [ "application/json" ], - "description": "Returns market release rows grouped by region from a Box Office Mojo release-group page. Pass exactly one of `id`, `path`, or `url`.", - "operationId": "boxofficemojo-release-group", + "description": "Returns one Numbeo country from the dataset by `country`, spelled as Numbeo does, such as `Vietnam`. The record has a `coverage` list and country-level indices for cost of living, rent, quality of life, crime, safety, health care, pollution, traffic and property, present only where ranked.", + "operationId": "datasets-numbeo-countries-item", "parameters": [ { - "description": "Box Office Mojo release-group id", - "in": "query", - "name": "id", - "type": "string", - "x-example": "gr3486798341" - }, - { - "description": "Box Office Mojo release-group path", - "in": "query", - "name": "path", - "type": "string", - "x-example": "/releasegroup/gr3486798341/" - }, - { - "description": "Absolute https://www.boxofficemojo.com release-group URL", - "in": "query", - "name": "url", + "description": "Country name as Numbeo spells it", + "in": "path", + "name": "country", + "required": true, "type": "string", - "x-example": "https://www.boxofficemojo.com/releasegroup/gr3486798341/" + "x-example": "Vietnam" } ], "produces": [ @@ -299663,7 +374959,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.releaseGroupResponseDoc" + "$ref": "#/definitions/datasets.numbeoCountryResponseDoc" } }, "400": { @@ -299689,12 +374985,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -299702,40 +374992,108 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo release group detail", + "summary": "Get a Numbeo country from the dataset", "tags": [ - "Box Office Mojo" + "Datasets" ] } }, - "/boxofficemojo/showdown": { + "/datasets/numbeo-countries/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns release comparison metrics from a Box Office Mojo showdown page. Pass exactly one of `id`, `path`, or `url`.", - "operationId": "boxofficemojo-showdown", + "description": "Searches the composite Numbeo countries dataset, merged from the current global by-country rankings of all seven index families. Sort enum: `name_asc`, `cost_of_living_asc`, `cost_of_living_desc`, `quality_of_life_desc`, `safety_desc`, `crime_asc`, `health_care_desc`, `pollution_asc`, `traffic_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-numbeo-countries-search", "parameters": [ { - "description": "Box Office Mojo showdown id", + "description": "Full-text query over the country name, max 256 characters", "in": "query", - "name": "id", - "type": "string", - "x-example": "sd943519236" + "name": "q", + "type": "string" }, { - "description": "Box Office Mojo showdown path", + "description": "Minimum Cost of Living Index (New York = 100)", "in": "query", - "name": "path", - "type": "string", - "x-example": "/showdown/sd943519236/" + "name": "min_cost_of_living_index", + "type": "number" }, { - "description": "Absolute https://www.boxofficemojo.com showdown URL", + "description": "Maximum Cost of Living Index (New York = 100)", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.boxofficemojo.com/showdown/sd943519236/" + "name": "max_cost_of_living_index", + "type": "number" + }, + { + "description": "Minimum Quality of Life Index", + "in": "query", + "name": "min_quality_of_life_index", + "type": "number" + }, + { + "description": "Minimum Crime Index", + "in": "query", + "name": "min_crime_index", + "type": "number" + }, + { + "description": "Maximum Crime Index", + "in": "query", + "name": "max_crime_index", + "type": "number" + }, + { + "description": "Minimum Safety Index", + "in": "query", + "name": "min_safety_index", + "type": "number" + }, + { + "description": "Minimum Health Care Index", + "in": "query", + "name": "min_health_care_index", + "type": "number" + }, + { + "description": "Maximum Pollution Index", + "in": "query", + "name": "max_pollution_index", + "type": "number" + }, + { + "description": "Maximum Traffic Index", + "in": "query", + "name": "max_traffic_index", + "type": "number" + }, + { + "description": "Sort enum: name_asc, cost_of_living_asc, cost_of_living_desc, quality_of_life_desc, safety_desc, crime_asc, health_care_desc, pollution_asc, traffic_asc", + "enum": [ + "name_asc", + "cost_of_living_asc", + "cost_of_living_desc", + "quality_of_life_desc", + "safety_desc", + "crime_asc", + "health_care_desc", + "pollution_asc", + "traffic_asc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -299745,7 +375103,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.showdownResponseDoc" + "$ref": "#/definitions/datasets.numbeoCountriesSearchResponseDoc" } }, "400": { @@ -299754,12 +375112,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -299771,12 +375123,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -299784,19 +375130,77 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo showdown detail", + "summary": "Search the Numbeo countries dataset", "tags": [ - "Box Office Mojo" + "Datasets" ] } }, - "/boxofficemojo/showdowns": { + "/datasets/pitchbook-advisors/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns Box Office Mojo's showdowns, which compare groups of movies. Each row has the showdown `name`, `showdown_id`, `path`, `url`, `num_releases`, `total_gross` and the `top_release` with its gross, when Box Office Mojo shows them. Takes no parameters.", - "operationId": "boxofficemojo-showdowns", + "description": "Returns value counts for the PitchBook advisors dataset by the required `facet`: `service_type`, `hq_country`, `hq_state` or `run_id`. The counts honour the search filters, including `q`, `min_year_founded` and `max_year_founded`, and list the top 50 values.", + "operationId": "datasets-pitchbook-advisors-facets", + "parameters": [ + { + "description": "Facet enum: service_type, hq_country, hq_state, run_id", + "enum": [ + "service_type", + "hq_country", + "hq_state", + "run_id" + ], + "in": "query", + "name": "facet", + "required": true, + "type": "string", + "x-example": "service_type" + }, + { + "description": "Full-text query over name and description, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Exact service provider type filter, max 128 characters", + "in": "query", + "name": "service_type", + "type": "string" + }, + { + "description": "Exact headquarters country filter, max 128 characters", + "in": "query", + "name": "hq_country", + "type": "string" + }, + { + "description": "Exact headquarters state/region filter, max 128 characters", + "in": "query", + "name": "hq_state", + "type": "string" + }, + { + "description": "Exact crawl run-id filter, max 128 characters", + "in": "query", + "name": "run_id", + "type": "string" + }, + { + "description": "Minimum founding year", + "in": "query", + "name": "min_year_founded", + "type": "integer" + }, + { + "description": "Maximum founding year", + "in": "query", + "name": "max_year_founded", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -299804,23 +375208,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.showdownsResponseDoc" + "$ref": "#/definitions/datasets.pitchbookAdvisorsFacetResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -299831,40 +375235,27 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo showdowns", + "summary": "Facet PitchBook advisors dataset", "tags": [ - "Box Office Mojo" + "Datasets" ] } }, - "/boxofficemojo/title": { + "/datasets/pitchbook-advisors/items/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns Box Office Mojo title release-group and market-gross tables from a title page. Pass exactly one of `id`, `path`, or `url`.", - "operationId": "boxofficemojo-title", + "description": "Returns one PitchBook advisor from the dataset by `id`, such as `676215-64`. The record has name, description, service type, headquarters, founding year, website, contact, overview fields, serviced companies and deals, FAQs and data tables. An id not in the dataset returns 404.", + "operationId": "datasets-pitchbook-advisors-item", "parameters": [ { - "description": "Box Office Mojo title id", - "in": "query", + "description": "PitchBook advisor id, e.g. 676215-64", + "in": "path", "name": "id", + "required": true, "type": "string", - "x-example": "tt0499549" - }, - { - "description": "Box Office Mojo title path", - "in": "query", - "name": "path", - "type": "string", - "x-example": "/title/tt0499549/" - }, - { - "description": "Absolute https://www.boxofficemojo.com title URL", - "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.boxofficemojo.com/title/tt0499549/" + "x-example": "676215-64" } ], "produces": [ @@ -299874,7 +375265,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.titleResponseDoc" + "$ref": "#/definitions/datasets.pitchbookAdvisorResponseDoc" } }, "400": { @@ -299900,12 +375291,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -299913,35 +375298,85 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo title detail", + "summary": "Get a PitchBook advisor from dataset", "tags": [ - "Box Office Mojo" + "Datasets" ] } }, - "/boxofficemojo/weekend/domestic": { + "/datasets/pitchbook-advisors/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns rows from Box Office Mojo's domestic weekend chart. Empty upstream weekend pages return a typed not-found error rather than an empty success.", - "operationId": "boxofficemojo-weekend-domestic", + "description": "Searches the crawled public PitchBook advisor (service provider — e.g. investment bank, lender, financing advisory firm) profile catalog stored in a search index. Discovered from PitchBook's public sitemap. Sort enum: `relevance`, `name_asc`, `year_founded_desc`, `recently_crawled_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-pitchbook-advisors-search", "parameters": [ { - "description": "Domestic weekend year, from 1982 through 2100", + "description": "Full-text query over name and description, max 256 characters", "in": "query", - "name": "year", - "required": true, - "type": "integer", - "x-example": 2025 + "name": "q", + "type": "string" }, { - "description": "Weekend number, 1 through 53", + "description": "Exact service provider type filter (e.g. Commercial Bank, Investment Bank, Financing Advisory), max 128 characters", "in": "query", - "name": "week", - "required": true, - "type": "integer", - "x-example": 52 + "name": "service_type", + "type": "string" + }, + { + "description": "Exact headquarters country filter, max 128 characters", + "in": "query", + "name": "hq_country", + "type": "string" + }, + { + "description": "Exact headquarters state/region filter, max 128 characters", + "in": "query", + "name": "hq_state", + "type": "string" + }, + { + "description": "Exact crawl run-id filter, max 128 characters", + "in": "query", + "name": "run_id", + "type": "string" + }, + { + "description": "Minimum founding year", + "in": "query", + "name": "min_year_founded", + "type": "integer" + }, + { + "description": "Maximum founding year", + "in": "query", + "name": "max_year_founded", + "type": "integer" + }, + { + "description": "Sort enum: relevance, name_asc, year_founded_desc, recently_crawled_desc", + "enum": [ + "relevance", + "name_asc", + "year_founded_desc", + "recently_crawled_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -299951,7 +375386,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.domesticWeekendResponseDoc" + "$ref": "#/definitions/datasets.pitchbookAdvisorsSearchResponseDoc" } }, "400": { @@ -299960,12 +375395,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -299977,12 +375406,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -299990,35 +375413,102 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo domestic weekend box office", + "summary": "Search PitchBook advisors dataset", "tags": [ - "Box Office Mojo" + "Datasets" ] } }, - "/boxofficemojo/weekend/domestic/by-distributor": { + "/datasets/pitchbook-companies/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns distributor rows from Box Office Mojo's domestic weekend by-distributor chart. Empty upstream weekend pages return a typed not-found error rather than an empty success.", - "operationId": "boxofficemojo-weekend-domestic-by-distributor", + "description": "Returns value counts for the PitchBook companies dataset by the required `facet`: `status`, `primary_industry`, `financing_status`, `ownership_status`, `hq_country`, `hq_state` or `run_id`. Filters such as `q`, `min_year_founded` and `min_investor_count` apply, and the top 50 values come back.", + "operationId": "datasets-pitchbook-companies-facets", "parameters": [ { - "description": "Domestic weekend year, from 1982 through 2100", + "description": "Facet enum: status, primary_industry, financing_status, ownership_status, hq_country, hq_state, run_id", + "enum": [ + "status", + "primary_industry", + "financing_status", + "ownership_status", + "hq_country", + "hq_state", + "run_id" + ], "in": "query", - "name": "year", + "name": "facet", "required": true, - "type": "integer", - "x-example": 2025 + "type": "string", + "x-example": "status" }, { - "description": "Weekend number, 1 through 53", + "description": "Full-text query over name and description, max 256 characters", "in": "query", - "name": "week", - "required": true, - "type": "integer", - "x-example": 52 + "name": "q", + "type": "string" + }, + { + "description": "Exact status filter, max 128 characters", + "in": "query", + "name": "status", + "type": "string" + }, + { + "description": "Exact primary industry filter, max 128 characters", + "in": "query", + "name": "primary_industry", + "type": "string" + }, + { + "description": "Exact financing status filter, max 128 characters", + "in": "query", + "name": "financing_status", + "type": "string" + }, + { + "description": "Exact ownership status filter, max 128 characters", + "in": "query", + "name": "ownership_status", + "type": "string" + }, + { + "description": "Exact headquarters country filter, max 128 characters", + "in": "query", + "name": "hq_country", + "type": "string" + }, + { + "description": "Exact headquarters state/region filter, max 128 characters", + "in": "query", + "name": "hq_state", + "type": "string" + }, + { + "description": "Exact crawl run-id filter, max 128 characters", + "in": "query", + "name": "run_id", + "type": "string" + }, + { + "description": "Minimum founding year", + "in": "query", + "name": "min_year_founded", + "type": "integer" + }, + { + "description": "Maximum founding year", + "in": "query", + "name": "max_year_founded", + "type": "integer" + }, + { + "description": "Minimum number of investors", + "in": "query", + "name": "min_investor_count", + "type": "integer" } ], "produces": [ @@ -300028,7 +375518,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.weekendDistributorResponseDoc" + "$ref": "#/definitions/datasets.pitchbookCompaniesFacetResponseDoc" } }, "400": { @@ -300037,12 +375527,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -300054,12 +375538,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -300067,35 +375545,27 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo domestic weekend by distributor", + "summary": "Facet PitchBook companies dataset", "tags": [ - "Box Office Mojo" + "Datasets" ] } }, - "/boxofficemojo/weekend/domestic/estimates": { + "/datasets/pitchbook-companies/items/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns estimate-vs-actual rows from Box Office Mojo's domestic weekend estimates chart. Empty upstream weekend pages return a typed not-found error rather than an empty success.", - "operationId": "boxofficemojo-weekend-domestic-estimates", + "description": "Returns one PitchBook company from the dataset by `id`, such as `752821-12`. The record has name, description, status, primary industry, financing and ownership status, headquarters, founding year, employees, investor count, latest deal type, website, FAQs and data tables. An unknown id returns 404.", + "operationId": "datasets-pitchbook-companies-item", "parameters": [ { - "description": "Domestic weekend year, from 1982 through 2100", - "in": "query", - "name": "year", - "required": true, - "type": "integer", - "x-example": 2025 - }, - { - "description": "Weekend number, 1 through 53", - "in": "query", - "name": "week", + "description": "PitchBook company id, e.g. 752821-12", + "in": "path", + "name": "id", "required": true, - "type": "integer", - "x-example": 52 + "type": "string", + "x-example": "752821-12" } ], "produces": [ @@ -300105,7 +375575,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.weekendEstimatesResponseDoc" + "$ref": "#/definitions/datasets.pitchbookCompanyResponseDoc" } }, "400": { @@ -300131,12 +375601,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -300144,27 +375608,110 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo domestic weekend estimates", + "summary": "Get a PitchBook company from dataset", "tags": [ - "Box Office Mojo" + "Datasets" ] } }, - "/boxofficemojo/year/domestic": { + "/datasets/pitchbook-companies/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns the Box Office Mojo domestic box office chart for one year. `year` is required and runs from 1977 to 2100. Each row has `rank`, `release`, `release_date`, `distributor`, `theaters`, `gross`, `total_gross` and `new_this_year`, each gross also with its displayed text in a `_raw` field.", - "operationId": "boxofficemojo-year-domestic", + "description": "Searches the crawled public PitchBook company profile catalog stored in a search index. Discovered from PitchBook's public sitemap. Sort enum: `relevance`, `name_asc`, `year_founded_desc`, `investor_count_desc`, `recently_crawled_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-pitchbook-companies-search", "parameters": [ { - "description": "Domestic box office year, from 1977 through 2100", + "description": "Full-text query over name and description, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Exact status filter (e.g. Private, Public, Acquired, Out of Business), max 128 characters", + "in": "query", + "name": "status", + "type": "string" + }, + { + "description": "Exact primary industry filter, max 128 characters", + "in": "query", + "name": "primary_industry", + "type": "string" + }, + { + "description": "Exact financing status filter, max 128 characters", + "in": "query", + "name": "financing_status", + "type": "string" + }, + { + "description": "Exact ownership status filter, max 128 characters", + "in": "query", + "name": "ownership_status", + "type": "string" + }, + { + "description": "Exact headquarters country filter, max 128 characters", + "in": "query", + "name": "hq_country", + "type": "string" + }, + { + "description": "Exact headquarters state/region filter, max 128 characters", + "in": "query", + "name": "hq_state", + "type": "string" + }, + { + "description": "Exact crawl run-id filter, max 128 characters", + "in": "query", + "name": "run_id", + "type": "string" + }, + { + "description": "Minimum founding year", + "in": "query", + "name": "min_year_founded", + "type": "integer" + }, + { + "description": "Maximum founding year", + "in": "query", + "name": "max_year_founded", + "type": "integer" + }, + { + "description": "Minimum number of investors", + "in": "query", + "name": "min_investor_count", + "type": "integer" + }, + { + "description": "Sort enum: relevance, name_asc, year_founded_desc, investor_count_desc, recently_crawled_desc", + "enum": [ + "relevance", + "name_asc", + "year_founded_desc", + "investor_count_desc", + "recently_crawled_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", "in": "query", - "name": "year", - "required": true, - "type": "integer", - "x-example": 2025 + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -300174,7 +375721,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.domesticYearResponseDoc" + "$ref": "#/definitions/datasets.pitchbookCompaniesSearchResponseDoc" } }, "400": { @@ -300194,12 +375741,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -300207,27 +375748,68 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo domestic yearly box office", + "summary": "Search PitchBook companies dataset", "tags": [ - "Box Office Mojo" + "Datasets" ] } }, - "/boxofficemojo/year/worldwide": { + "/datasets/pitchbook-funds/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns the Box Office Mojo worldwide box office chart for one year. `year` is required and runs from 1977 to 2100. Each row is a release group with its `rank`, `worldwide`, `domestic` and `foreign` grosses, the domestic and foreign shares, and `title_id`; each gross also has its displayed text in a `_raw` field.", - "operationId": "boxofficemojo-year-worldwide", + "description": "Returns value counts for the PitchBook funds dataset by the required `facet`: `fund_strategy`, `fund_status` or `run_id`. The search filters `q`, `fund_strategy`, `fund_status`, `min_vintage_year` and `max_vintage_year` apply to the counts, which list the top 50 values.", + "operationId": "datasets-pitchbook-funds-facets", "parameters": [ { - "description": "Box office year, from 1977 through 2100", + "description": "Facet enum: fund_strategy, fund_status, run_id", + "enum": [ + "fund_strategy", + "fund_status", + "run_id" + ], "in": "query", - "name": "year", + "name": "facet", "required": true, - "type": "integer", - "x-example": 2025 + "type": "string", + "x-example": "fund_strategy" + }, + { + "description": "Full-text query over name and description, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Exact fund strategy filter, max 128 characters", + "in": "query", + "name": "fund_strategy", + "type": "string" + }, + { + "description": "Exact fund status filter, max 128 characters", + "in": "query", + "name": "fund_status", + "type": "string" + }, + { + "description": "Exact crawl run-id filter, max 128 characters", + "in": "query", + "name": "run_id", + "type": "string" + }, + { + "description": "Minimum vintage year", + "in": "query", + "name": "min_vintage_year", + "type": "integer" + }, + { + "description": "Maximum vintage year", + "in": "query", + "name": "max_vintage_year", + "type": "integer" } ], "produces": [ @@ -300237,7 +375819,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/boxofficemojo.worldwideYearResponseDoc" + "$ref": "#/definitions/datasets.pitchbookFundsFacetResponseDoc" } }, "400": { @@ -300257,12 +375839,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -300270,51 +375846,27 @@ "ApiKeyAuth": [] } ], - "summary": "Box Office Mojo worldwide yearly box office", + "summary": "Facet PitchBook funds dataset", "tags": [ - "Box Office Mojo" + "Datasets" ] } }, - "/brand/retrieve": { + "/datasets/pitchbook-funds/items/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a brand profile for a domain (title, description, brand colors as hex, logos and icons ranked best-first, backdrops, socials, links, and any schema.org organization data). Enrichment-only fields that are not present in the page markup are returned as null.", - "operationId": "brand-retrieve", + "description": "Returns one PitchBook fund from the dataset by `id`, such as `19719-91F`. The record has name, strategy, status, fund size, vintage year, managing firm, contact details and data tables such as limited partners and benchmarks. An id not in the dataset returns 404.", + "operationId": "datasets-pitchbook-funds-item", "parameters": [ { - "description": "Domain to retrieve brand data for, e.g. context.dev", - "in": "query", - "name": "domain", + "description": "PitchBook fund id, e.g. 19719-91F", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "context.dev" - }, - { - "description": "Accepted for compatibility; not applied in HTML-only mode", - "in": "query", - "name": "force_language", - "type": "string" - }, - { - "description": "Optimize for speed by skipping schema.org and footer-link extraction", - "in": "query", - "name": "maxSpeed", - "type": "boolean" - }, - { - "description": "Cache freshness window in milliseconds, clamps to 1 day..1 year", - "in": "query", - "name": "maxAgeMs", - "type": "integer" - }, - { - "description": "Upstream fetch timeout in milliseconds, clamps to 1000..300000", - "in": "query", - "name": "timeoutMS", - "type": "integer" + "x-example": "19719-91F" } ], "produces": [ @@ -300324,7 +375876,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/brand.retrieveResponseDoc" + "$ref": "#/definitions/datasets.pitchbookFundResponseDoc" } }, "400": { @@ -300339,20 +375891,14 @@ "$ref": "#/definitions/app.Response" } }, - "408": { - "description": "Request Timeout", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -300363,114 +375909,79 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve brand data by domain", + "summary": "Get a PitchBook fund from dataset", "tags": [ - "Brand" + "Datasets" ] } }, - "/brave/images": { + "/datasets/pitchbook-funds/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns Brave image search results for a query string. Locale defaults to country=us and lang=en-us. Returns 503 when Brave serves a challenge page or unusable results.", - "operationId": "brave-images", + "description": "Searches the crawled public PitchBook fund profile catalog stored in a search index. Discovered from PitchBook's public sitemap. Sort enum: `relevance`, `name_asc`, `vintage_desc`, `recently_crawled_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-pitchbook-funds-search", "parameters": [ { - "description": "Search query", + "description": "Full-text query over name and description, max 256 characters", "in": "query", "name": "q", - "required": true, - "type": "string", - "x-example": "openai" + "type": "string" }, { - "description": "Zero-based Brave result page; defaults to 0", + "description": "Exact fund strategy filter (e.g. Early Stage VC, Buyout), max 128 characters", "in": "query", - "minimum": 0, - "name": "offset", - "type": "integer", - "x-example": 0 + "name": "fund_strategy", + "type": "string" }, { - "description": "Results to return; defaults to 10, clamped to 1..50", + "description": "Exact fund status filter (e.g. Closed, Raising), max 128 characters", "in": "query", - "maximum": 50, - "minimum": 1, - "name": "count", - "type": "integer", - "x-example": 10 + "name": "fund_status", + "type": "string" }, { - "description": "Brave result country; defaults to us", - "enum": [ - "all", - "ar", - "at", - "au", - "be", - "br", - "ca", - "ch", - "cl", - "cn", - "de", - "dk", - "es", - "fi", - "fr", - "gb", - "gr", - "hk", - "id", - "in", - "it", - "jp", - "kr", - "mx", - "my", - "nl", - "no", - "nz", - "ph", - "pl", - "pt", - "ru", - "sa", - "se", - "sg", - "tr", - "tw", - "us", - "za" - ], + "description": "Exact crawl run-id filter, max 128 characters", "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "run_id", + "type": "string" }, { - "description": "Brave UI language; defaults to en-us", + "description": "Minimum vintage year", + "in": "query", + "name": "min_vintage_year", + "type": "integer" + }, + { + "description": "Maximum vintage year", + "in": "query", + "name": "max_vintage_year", + "type": "integer" + }, + { + "description": "Sort enum: relevance, name_asc, vintage_desc, recently_crawled_desc", "enum": [ - "de-de", - "en-ca", - "en-gb", - "en-in", - "en-us", - "fi-fi", - "fr-ca", - "fr-fr", - "ja-jp", - "pt-br", - "sq-al", - "sw-ke", - "zh-tw" + "relevance", + "name_asc", + "vintage_desc", + "recently_crawled_desc" ], "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -300480,35 +375991,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/brave.imagesResponseDoc" + "$ref": "#/definitions/datasets.pitchbookFundsSearchResponseDoc" } }, "400": { - "description": "Missing or invalid query", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "No results found", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Brave upstream request failed", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -300519,142 +376018,82 @@ "ApiKeyAuth": [] } ], - "summary": "Search Brave image results", + "summary": "Search PitchBook funds dataset", "tags": [ - "Brave" + "Datasets" ] } }, - "/brave/news": { + "/datasets/pitchbook-investors/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns Brave news search results for a query string. Locale defaults to country=us and lang=en-us. Returns 503 when Brave serves a challenge page or unusable results.", - "operationId": "brave-news", + "description": "Returns value counts for the PitchBook investors dataset by the required `facet`: `status`, `investor_type`, `hq_country`, `hq_state` or `run_id`. The counts follow search filters including `q`, `min_portfolio_count` and `min_exits_count`, and show the top 50 values.", + "operationId": "datasets-pitchbook-investors-facets", "parameters": [ { - "description": "Search query", + "description": "Facet enum: status, investor_type, hq_country, hq_state, run_id", + "enum": [ + "status", + "investor_type", + "hq_country", + "hq_state", + "run_id" + ], "in": "query", - "name": "q", + "name": "facet", "required": true, "type": "string", - "x-example": "openai" + "x-example": "status" }, { - "description": "Zero-based Brave result page; defaults to 0", + "description": "Full-text query over name and description, max 256 characters", "in": "query", - "minimum": 0, - "name": "offset", - "type": "integer", - "x-example": 0 + "name": "q", + "type": "string" }, { - "description": "Results to return; defaults to 10, clamped to 1..50", + "description": "Exact status filter, max 128 characters", "in": "query", - "maximum": 50, - "minimum": 1, - "name": "count", - "type": "integer", - "x-example": 10 + "name": "status", + "type": "string" }, { - "description": "Brave result country; defaults to us", - "enum": [ - "all", - "ar", - "at", - "au", - "be", - "br", - "ca", - "ch", - "cl", - "cn", - "de", - "dk", - "es", - "fi", - "fr", - "gb", - "gr", - "hk", - "id", - "in", - "it", - "jp", - "kr", - "mx", - "my", - "nl", - "no", - "nz", - "ph", - "pl", - "pt", - "ru", - "sa", - "se", - "sg", - "tr", - "tw", - "us", - "za" - ], + "description": "Exact investor type filter, max 128 characters", "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "investor_type", + "type": "string" }, { - "description": "Brave UI language; defaults to en-us", - "enum": [ - "de-de", - "en-ca", - "en-gb", - "en-in", - "en-us", - "fi-fi", - "fr-ca", - "fr-fr", - "ja-jp", - "pt-br", - "sq-al", - "sw-ke", - "zh-tw" - ], + "description": "Exact headquarters country filter, max 128 characters", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "name": "hq_country", + "type": "string" }, { - "description": "Preset time filter: any, day, week, month, year, or custom", - "enum": [ - "any", - "day", - "week", - "month", - "year", - "custom" - ], + "description": "Exact headquarters state/region filter, max 128 characters", "in": "query", - "name": "time_range", + "name": "hq_state", "type": "string" }, { - "description": "Custom start date in YYYY-MM-DD; requires date_to", + "description": "Exact crawl run-id filter, max 128 characters", "in": "query", - "name": "date_from", - "type": "string", - "x-example": "2026-03-01" + "name": "run_id", + "type": "string" }, { - "description": "Custom end date in YYYY-MM-DD; requires date_from", + "description": "Minimum current portfolio size", "in": "query", - "name": "date_to", - "type": "string", - "x-example": "2026-03-30" + "name": "min_portfolio_count", + "type": "integer" + }, + { + "description": "Minimum number of exits", + "in": "query", + "name": "min_exits_count", + "type": "integer" } ], "produces": [ @@ -300664,35 +376103,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/brave.newsResponseDoc" + "$ref": "#/definitions/datasets.pitchbookInvestorsFacetResponseDoc" } }, "400": { - "description": "Missing or invalid query", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "No results found", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Brave upstream request failed", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -300703,133 +376130,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Brave news results", + "summary": "Facet PitchBook investors dataset", "tags": [ - "Brave" + "Datasets" ] } }, - "/brave/search": { + "/datasets/pitchbook-investors/items/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns web search results from Brave Search for a query string, along with offset-based pagination, related queries, discussions, videos, and the right-side knowledge card when Brave includes one. Use time_range for preset ranges or date_from/date_to for a custom YYYY-MM-DD range. Locale defaults to country=us and lang=en-us.", - "operationId": "brave-search", + "description": "Returns one PitchBook investor from the dataset by `id`, such as `294471-37`. The record has name, description, investor type, status, headquarters, investment, portfolio and exit counts, contact and website, FAQs and data tables. An unknown id returns 404.", + "operationId": "datasets-pitchbook-investors-item", "parameters": [ { - "description": "Search query", - "in": "query", - "name": "q", + "description": "PitchBook investor id, e.g. 294471-37", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "openai" - }, - { - "description": "Zero-based Brave result page", - "in": "query", - "minimum": 0, - "name": "offset", - "type": "integer", - "x-example": 1 - }, - { - "description": "Brave result country; defaults to us", - "enum": [ - "all", - "ar", - "at", - "au", - "be", - "br", - "ca", - "ch", - "cl", - "cn", - "de", - "dk", - "es", - "fi", - "fr", - "gb", - "gr", - "hk", - "id", - "in", - "it", - "jp", - "kr", - "mx", - "my", - "nl", - "no", - "nz", - "ph", - "pl", - "pt", - "ru", - "sa", - "se", - "sg", - "tr", - "tw", - "us", - "za" - ], - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Brave UI language; defaults to en-us", - "enum": [ - "de-de", - "en-ca", - "en-gb", - "en-in", - "en-us", - "fi-fi", - "fr-ca", - "fr-fr", - "ja-jp", - "pt-br", - "sq-al", - "sw-ke", - "zh-tw" - ], - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" - }, - { - "description": "Preset time filter: any, day, week, month, year, or custom", - "enum": [ - "any", - "day", - "week", - "month", - "year", - "custom" - ], - "in": "query", - "name": "time_range", - "type": "string" - }, - { - "description": "Custom start date in YYYY-MM-DD; requires date_to", - "in": "query", - "name": "date_from", - "type": "string", - "x-example": "2026-03-01" - }, - { - "description": "Custom end date in YYYY-MM-DD; requires date_from", - "in": "query", - "name": "date_to", - "type": "string", - "x-example": "2026-03-30" + "x-example": "294471-37" } ], "produces": [ @@ -300839,29 +376160,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/brave.searchResponseDoc" + "$ref": "#/definitions/datasets.pitchbookInvestorResponseDoc" } }, "400": { - "description": "Missing or invalid query", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "No results found", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -300872,113 +376193,91 @@ "ApiKeyAuth": [] } ], - "summary": "Search Brave", + "summary": "Get a PitchBook investor from dataset", "tags": [ - "Brave" + "Datasets" ] } }, - "/brave/suggest": { + "/datasets/pitchbook-investors/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns Brave autosuggest query completions for a query prefix. Locale defaults to country=us and lang=en-us. Suggestions are fetched from public Brave Search suggest JSON and trimmed to the requested count. `rich=true` adds entity metadata (name, description, category, image) where Brave resolves a suggestion to a known entity.", - "operationId": "brave-suggest", + "description": "Searches the crawled public PitchBook investor (fund manager/firm) profile catalog stored in a search index. Discovered from PitchBook's public sitemap. Sort enum: `relevance`, `name_asc`, `portfolio_count_desc`, `recently_crawled_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-pitchbook-investors-search", "parameters": [ { - "description": "Search query prefix", + "description": "Full-text query over name and description, max 256 characters", "in": "query", "name": "q", - "required": true, - "type": "string", - "x-example": "openai" + "type": "string" }, { - "description": "Suggestions to return; defaults to 10, clamped to 1..12", + "description": "Exact status filter (e.g. Active, Inactive), max 128 characters", "in": "query", - "maximum": 12, - "minimum": 1, - "name": "count", - "type": "integer", - "x-example": 10 + "name": "status", + "type": "string" }, { - "description": "Brave result country; defaults to us", - "enum": [ - "all", - "ar", - "at", - "au", - "be", - "br", - "ca", - "ch", - "cl", - "cn", - "de", - "dk", - "es", - "fi", - "fr", - "gb", - "gr", - "hk", - "id", - "in", - "it", - "jp", - "kr", - "mx", - "my", - "nl", - "no", - "nz", - "ph", - "pl", - "pt", - "ru", - "sa", - "se", - "sg", - "tr", - "tw", - "us", - "za" - ], + "description": "Exact investor type filter (e.g. Venture Capital, Private Equity, Angel), max 128 characters", "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "investor_type", + "type": "string" }, { - "description": "Brave UI language; defaults to en-us", + "description": "Exact headquarters country filter, max 128 characters", + "in": "query", + "name": "hq_country", + "type": "string" + }, + { + "description": "Exact headquarters state/region filter, max 128 characters", + "in": "query", + "name": "hq_state", + "type": "string" + }, + { + "description": "Exact crawl run-id filter, max 128 characters", + "in": "query", + "name": "run_id", + "type": "string" + }, + { + "description": "Minimum current portfolio size", + "in": "query", + "name": "min_portfolio_count", + "type": "integer" + }, + { + "description": "Minimum number of exits", + "in": "query", + "name": "min_exits_count", + "type": "integer" + }, + { + "description": "Sort enum: relevance, name_asc, portfolio_count_desc, recently_crawled_desc", "enum": [ - "de-de", - "en-ca", - "en-gb", - "en-in", - "en-us", - "fi-fi", - "fr-ca", - "fr-fr", - "ja-jp", - "pt-br", - "sq-al", - "sw-ke", - "zh-tw" + "relevance", + "name_asc", + "portfolio_count_desc", + "recently_crawled_desc" ], "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "name": "sort", + "type": "string" }, { - "description": "Add entity name, description, category, and image to suggestions Brave resolves to a known entity; defaults to false", + "description": "Page number, defaults to 1", "in": "query", - "name": "rich", - "type": "boolean", - "x-example": false + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -300988,29 +376287,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/brave.suggestResponseDoc" + "$ref": "#/definitions/datasets.pitchbookInvestorsSearchResponseDoc" } }, "400": { - "description": "Missing or invalid query", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Brave upstream request failed", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -301021,142 +376314,75 @@ "ApiKeyAuth": [] } ], - "summary": "Suggest Brave search queries", + "summary": "Search PitchBook investors dataset", "tags": [ - "Brave" + "Datasets" ] } }, - "/brave/videos": { + "/datasets/pitchbook-limited-partners/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns Brave video search results for a query string. Locale defaults to country=us and lang=en-us. Returns 503 when Brave serves a challenge page or unusable results.", - "operationId": "brave-videos", + "description": "Returns value counts for the PitchBook limited partners dataset by the required `facet`: `institution_type`, `hq_country`, `hq_state` or `run_id`. Filters `q`, `min_year_founded` and `max_year_founded` also apply, and the top 50 values are returned.", + "operationId": "datasets-pitchbook-limited-partners-facets", "parameters": [ { - "description": "Search query", + "description": "Facet enum: institution_type, hq_country, hq_state, run_id", + "enum": [ + "institution_type", + "hq_country", + "hq_state", + "run_id" + ], "in": "query", - "name": "q", + "name": "facet", "required": true, "type": "string", - "x-example": "openai" + "x-example": "institution_type" }, { - "description": "Zero-based Brave result page; defaults to 0", + "description": "Full-text query over name and description, max 256 characters", "in": "query", - "minimum": 0, - "name": "offset", - "type": "integer", - "x-example": 0 + "name": "q", + "type": "string" }, { - "description": "Results to return; defaults to 10, clamped to 1..50", + "description": "Exact institution type filter, max 128 characters", "in": "query", - "maximum": 50, - "minimum": 1, - "name": "count", - "type": "integer", - "x-example": 10 + "name": "institution_type", + "type": "string" }, { - "description": "Brave result country; defaults to us", - "enum": [ - "all", - "ar", - "at", - "au", - "be", - "br", - "ca", - "ch", - "cl", - "cn", - "de", - "dk", - "es", - "fi", - "fr", - "gb", - "gr", - "hk", - "id", - "in", - "it", - "jp", - "kr", - "mx", - "my", - "nl", - "no", - "nz", - "ph", - "pl", - "pt", - "ru", - "sa", - "se", - "sg", - "tr", - "tw", - "us", - "za" - ], + "description": "Exact headquarters country filter, max 128 characters", "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "hq_country", + "type": "string" }, { - "description": "Brave UI language; defaults to en-us", - "enum": [ - "de-de", - "en-ca", - "en-gb", - "en-in", - "en-us", - "fi-fi", - "fr-ca", - "fr-fr", - "ja-jp", - "pt-br", - "sq-al", - "sw-ke", - "zh-tw" - ], + "description": "Exact headquarters state/region filter, max 128 characters", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "name": "hq_state", + "type": "string" }, { - "description": "Preset time filter: any, day, week, month, year, or custom", - "enum": [ - "any", - "day", - "week", - "month", - "year", - "custom" - ], + "description": "Exact crawl run-id filter, max 128 characters", "in": "query", - "name": "time_range", + "name": "run_id", "type": "string" }, { - "description": "Custom start date in YYYY-MM-DD; requires date_to", + "description": "Minimum founding year", "in": "query", - "name": "date_from", - "type": "string", - "x-example": "2026-03-01" + "name": "min_year_founded", + "type": "integer" }, { - "description": "Custom end date in YYYY-MM-DD; requires date_from", + "description": "Maximum founding year", "in": "query", - "name": "date_to", - "type": "string", - "x-example": "2026-03-30" + "name": "max_year_founded", + "type": "integer" } ], "produces": [ @@ -301166,35 +376392,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/brave.videosResponseDoc" + "$ref": "#/definitions/datasets.pitchbookLimitedPartnersFacetResponseDoc" } }, "400": { - "description": "Missing or invalid query", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "No results found", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Brave upstream request failed", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -301205,24 +376419,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Brave video results", + "summary": "Facet PitchBook limited partners dataset", "tags": [ - "Brave" + "Datasets" ] } }, - "/breitbart/article": { + "/datasets/pitchbook-limited-partners/items/{id}": { "get": { - "description": "Returns a Breitbart article by `url`, a canonical `https://www.breitbart.com/
///
//` address. The response has the title, description, publication and update times, section, image, `authors` and the body `paragraphs`.", - "operationId": "breitbart-article", + "consumes": [ + "application/json" + ], + "description": "Returns one PitchBook limited partner from the dataset by `id`, such as `864326-44`. The record has name, description, institution type, headquarters, founding year, commitments, contact and data tables. `faqs` can be empty, since PitchBook writes FAQs only for richer profiles. An unknown id returns 404.", + "operationId": "datasets-pitchbook-limited-partners-item", "parameters": [ { - "description": "Canonical Breitbart article URL", - "in": "query", - "name": "url", + "description": "PitchBook limited partner id, e.g. 864326-44", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.breitbart.com/politics/2026/09/22/example-story/" + "x-example": "864326-44" } ], "produces": [ @@ -301232,7 +376449,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/datasets.pitchbookLimitedPartnerResponseDoc" } }, "400": { @@ -301247,8 +376464,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -301259,37 +376482,85 @@ "ApiKeyAuth": [] } ], - "summary": "Get Breitbart article content", + "summary": "Get a PitchBook limited partner from dataset", "tags": [ - "Breitbart" + "Datasets" ] } }, - "/breitbart/author": { + "/datasets/pitchbook-limited-partners/search": { "get": { - "description": "Returns one Breitbart author/contributor's public profile: name, a short bio/role line when the page carries one, and their recent articles.", - "operationId": "breitbart-author", + "consumes": [ + "application/json" + ], + "description": "Searches the crawled public PitchBook limited partner (institutional investor — e.g. pension fund, endowment, insurance company) profile catalog stored in a search index. Discovered from PitchBook's public sitemap. Some limited partner profiles have no FAQ section -- this is normal, not a sign of missing data. Sort enum: `relevance`, `name_asc`, `year_founded_desc`, `recently_crawled_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-pitchbook-limited-partners-search", "parameters": [ { - "description": "Author slug, e.g. joshua-klein", + "description": "Full-text query over name and description, max 256 characters", "in": "query", - "name": "slug", - "type": "string", - "x-example": "joshua-klein" + "name": "q", + "type": "string" }, { - "description": "Canonical breitbart.com/author// URL, optionally with a /page// segment; alternative to slug", + "description": "Exact institution type filter (e.g. Corporate Pension, Private Investment Fund, Endowment), max 128 characters", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.breitbart.com/author/joshua-klein/" + "name": "institution_type", + "type": "string" }, { - "description": "1-based page of articles to return; defaults to 1", + "description": "Exact headquarters country filter, max 128 characters", + "in": "query", + "name": "hq_country", + "type": "string" + }, + { + "description": "Exact headquarters state/region filter, max 128 characters", + "in": "query", + "name": "hq_state", + "type": "string" + }, + { + "description": "Exact crawl run-id filter, max 128 characters", + "in": "query", + "name": "run_id", + "type": "string" + }, + { + "description": "Minimum founding year", + "in": "query", + "name": "min_year_founded", + "type": "integer" + }, + { + "description": "Maximum founding year", + "in": "query", + "name": "max_year_founded", + "type": "integer" + }, + { + "description": "Sort enum: relevance, name_asc, year_founded_desc, recently_crawled_desc", + "enum": [ + "relevance", + "name_asc", + "year_founded_desc", + "recently_crawled_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", "in": "query", "name": "page", - "type": "integer", - "x-example": 1 + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -301299,7 +376570,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.breitbartAuthorResponseDoc" + "$ref": "#/definitions/datasets.pitchbookLimitedPartnersSearchResponseDoc" } }, "400": { @@ -301308,14 +376579,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -301326,47 +376597,203 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Breitbart author profile", + "summary": "Search PitchBook limited partners dataset", "tags": [ - "Breitbart" + "Datasets" ] } }, - "/breitbart/headlines": { + "/datasets/playstation-games/facets": { "get": { - "description": "Returns current headlines from one Breitbart section hub. `section` is required and takes one of 21 slugs, such as `politics`, `border`, `the-media` or `europe`. The `world-news`, `news` and `on-the-hill-exclusive-video` hubs aggregate stories, so their links point to articles under whichever section owns each story.", - "operationId": "breitbart-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns terms aggregation counts for the PlayStation games dataset. Facet enum: `publisher`, `classification`, `genres`, `platforms`, `content_rating_authority`, `content_descriptors`, `price_tier`, `service_branding`, `region`, `release_year`, `run_id`, `is_free`, `is_addon`, `is_tied_to_subscription`, `coming_soon`. price_tier enum: `free`, `under_5`, `5_to_10`, `10_to_20`, `20_to_40`, `40_to_60`, `60_plus`.", + "operationId": "datasets-playstation-games-facets", "parameters": [ { - "description": "Breitbart section slug", + "description": "Facet enum: publisher, classification, genres, platforms, content_rating_authority, content_descriptors, price_tier, service_branding, region, release_year, run_id, is_free, is_addon, is_tied_to_subscription, coming_soon", "enum": [ - "politics", - "economy", - "border", - "immigration", - "national-security", - "entertainment", - "sports", - "tech", - "the-media", - "radio", - "clips", - "faith", - "world-news", - "europe", - "middle-east", - "africa", - "asia", - "latin-america", - "america250", - "on-the-hill-exclusive-video", - "news" + "publisher", + "classification", + "genres", + "platforms", + "content_rating_authority", + "content_descriptors", + "price_tier", + "service_branding", + "region", + "release_year", + "run_id", + "is_free", + "is_addon", + "is_tied_to_subscription", + "coming_soon" ], "in": "query", - "name": "section", + "name": "facet", "required": true, "type": "string", - "x-example": "politics" + "x-example": "publisher" + }, + { + "description": "Full-text query over name and publisher, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Exact publisher filter, max 128 characters", + "in": "query", + "name": "publisher", + "type": "string" + }, + { + "description": "Exact classification filter, max 128 characters", + "in": "query", + "name": "classification", + "type": "string" + }, + { + "description": "Exact genre filter, max 128 characters", + "in": "query", + "name": "genre", + "type": "string" + }, + { + "description": "Exact platform filter: PS4 or PS5", + "in": "query", + "name": "platform", + "type": "string" + }, + { + "description": "Exact content-rating authority filter, max 128 characters", + "in": "query", + "name": "content_rating", + "type": "string" + }, + { + "description": "Exact content-descriptor filter, max 128 characters", + "in": "query", + "name": "content_descriptor", + "type": "string" + }, + { + "description": "Price-tier enum: free, under_5, 5_to_10, 10_to_20, 20_to_40, 40_to_60, 60_plus", + "enum": [ + "free", + "under_5", + "5_to_10", + "10_to_20", + "20_to_40", + "40_to_60", + "60_plus" + ], + "in": "query", + "name": "price_tier", + "type": "string" + }, + { + "description": "Exact subscription/service-branding filter, max 128 characters", + "in": "query", + "name": "branding", + "type": "string" + }, + { + "description": "Exact store region (country code) filter, max 128 characters", + "in": "query", + "name": "region", + "type": "string" + }, + { + "description": "Exact concept id filter, max 128 characters", + "in": "query", + "name": "concept_id", + "type": "string" + }, + { + "description": "Exact np_title_id filter, max 128 characters", + "in": "query", + "name": "np_title_id", + "type": "string" + }, + { + "description": "Exact crawl run-id filter, max 128 characters", + "in": "query", + "name": "run_id", + "type": "string" + }, + { + "description": "Filter by free flag", + "in": "query", + "name": "is_free", + "type": "boolean" + }, + { + "description": "Filter add-ons vs games", + "in": "query", + "name": "is_addon", + "type": "boolean" + }, + { + "description": "Filter subscription-included titles", + "in": "query", + "name": "is_tied_to_subscription", + "type": "boolean" + }, + { + "description": "Filter for pre-release titles", + "in": "query", + "name": "coming_soon", + "type": "boolean" + }, + { + "description": "Filter by titles currently discounted (discount_pct > 0)", + "in": "query", + "name": "on_sale", + "type": "boolean" + }, + { + "description": "Minimum current price in minor units", + "in": "query", + "name": "min_price_value", + "type": "integer" + }, + { + "description": "Maximum current price in minor units", + "in": "query", + "name": "max_price_value", + "type": "integer" + }, + { + "description": "Minimum average star rating, 0 through 5", + "in": "query", + "name": "min_star_rating", + "type": "number" + }, + { + "description": "Minimum number of star ratings", + "in": "query", + "name": "min_star_count", + "type": "integer" + }, + { + "description": "Minimum discount percent, 0 through 100", + "in": "query", + "name": "min_discount_pct", + "type": "integer" + }, + { + "description": "Minimum release year", + "in": "query", + "name": "min_release_year", + "type": "integer" + }, + { + "description": "Maximum release year", + "in": "query", + "name": "max_release_year", + "type": "integer" } ], "produces": [ @@ -301376,7 +376803,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/datasets.playstationGamesFacetResponseDoc" } }, "400": { @@ -301385,46 +376812,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Breitbart section headlines", - "tags": [ - "Breitbart" - ] - } - }, - "/breitbart/news": { - "get": { - "description": "Returns the latest Breitbart top stories from across the site, with no input needed. Each item has a title and canonical URL, and may also carry a summary, publication time, author and image.", - "operationId": "breitbart-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -301435,50 +376830,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Breitbart top stories", + "summary": "Facet PlayStation games dataset", "tags": [ - "Breitbart" + "Datasets" ] } }, - "/breitbart/sections": { + "/datasets/playstation-games/items/{product_id}": { "get": { - "description": "Lists the 21 Breitbart sections accepted by `breitbart-headlines`, including `politics`, `economy`, `border`, `national-security`, `the-media`, `world-news` and `america250`. Each has a `slug`, a display `name` and the section's page `url`. The list was verified on 2026-09-23.", - "operationId": "breitbart-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Breitbart sections", - "tags": [ - "Breitbart" - ] - } - }, - "/brisbanetimes/article": { - "get": { - "description": "Returns one Brisbane Times article's metadata and the exact body paragraphs served by one anonymous page request, with the publisher's is_accessible_for_free, paywalled, and is_truncated flags. No paywall is bypassed or hidden content fetched.", - "operationId": "brisbanetimes-article", + "description": "Returns one PlayStation Store game from the `playstation-games` dataset by product id such as `UP0001-PPSA01491_00-GAME000000000000`: name, publisher, genres, platforms, region, release date, base and discounted price with currency and discount end time, star rating and rating count, content rating, and edition and add-on counts. An id that is not in the dataset returns `404`.", + "operationId": "datasets-playstation-games-item", "parameters": [ { - "description": "Canonical Brisbane Times article URL", - "in": "query", - "name": "url", + "description": "PlayStation product id (e.g. UP0001-PPSA01491_00-GAME000000000000)", + "in": "path", + "name": "product_id", "required": true, "type": "string", - "x-example": "https://www.brisbanetimes.com.au/national/queensland/hospital-denies-gas-leak-forced-evacuation-surgery-delays-20260930-p611l9.html" + "x-example": "UP0001-PPSA01491_00-GAME000000000000" } ], "produces": [ @@ -301488,7 +376860,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.brisbanetimesArticleResponseDoc" + "$ref": "#/definitions/datasets.playstationGameResponseDoc" } }, "400": { @@ -301503,8 +376875,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -301515,24 +376893,206 @@ "ApiKeyAuth": [] } ], - "summary": "Get Brisbane Times article content", + "summary": "Get a PlayStation game from dataset", "tags": [ - "Brisbane Times" + "Datasets" ] } }, - "/brisbanetimes/author": { + "/datasets/playstation-games/search": { "get": { - "description": "Returns a Brisbane Times journalist profile from `url`, a canonical `https://www.brisbanetimes.com.au/by/-` address: name, biography, headshot, email, social links and recent story cards with title, URL, summary and image. Fields appear only when the profile shows them; the sampled profile returned 10 stories.", - "operationId": "brisbanetimes-author", + "consumes": [ + "application/json" + ], + "description": "Searches the crawled public PlayStation Store catalog stored in a search index. One row per product SKU (game, edition or add-on); concept_id / np_title_id group a title's SKUs. price_tier enum: `free`, `under_5`, `5_to_10`, `10_to_20`, `20_to_40`, `40_to_60`, `60_plus`. Sort enum: `relevance`, `rating_desc`, `reviews_desc`, `price_asc`, `price_desc`, `discount_desc`, `release_desc`, `release_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-playstation-games-search", "parameters": [ { - "description": "Canonical Brisbane Times journalist URL", + "description": "Full-text query over name and publisher, max 256 characters", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.brisbanetimes.com.au/by/william-davis-p537k8" + "name": "q", + "type": "string" + }, + { + "description": "Exact publisher filter, max 128 characters", + "in": "query", + "name": "publisher", + "type": "string" + }, + { + "description": "Exact classification filter: FULL_GAME, PREMIUM_EDITION, GAME_BUNDLE, ADD_ON_PACK, VIRTUAL_CURRENCY, LEVEL, OTHER", + "in": "query", + "name": "classification", + "type": "string" + }, + { + "description": "Exact genre filter (e.g. Action, Role Playing Games), max 128 characters", + "in": "query", + "name": "genre", + "type": "string" + }, + { + "description": "Exact platform filter: PS4 or PS5", + "in": "query", + "name": "platform", + "type": "string" + }, + { + "description": "Exact content-rating authority filter (e.g. ESRB, PEGI), max 128 characters", + "in": "query", + "name": "content_rating", + "type": "string" + }, + { + "description": "Exact content-descriptor filter (e.g. Blood, Violence, In-Game Purchases, Users Interact), max 128 characters", + "in": "query", + "name": "content_descriptor", + "type": "string" + }, + { + "description": "Price-tier enum: free, under_5, 5_to_10, 10_to_20, 20_to_40, 40_to_60, 60_plus", + "enum": [ + "free", + "under_5", + "5_to_10", + "10_to_20", + "20_to_40", + "40_to_60", + "60_plus" + ], + "in": "query", + "name": "price_tier", + "type": "string" + }, + { + "description": "Exact subscription/service-branding filter (e.g. PS_PLUS, EA_PLAY, UBISOFT_PLUS), max 128 characters", + "in": "query", + "name": "branding", + "type": "string" + }, + { + "description": "Exact store region (country code) filter, max 128 characters", + "in": "query", + "name": "region", + "type": "string" + }, + { + "description": "Exact concept id filter (groups all SKUs of a title), max 128 characters", + "in": "query", + "name": "concept_id", + "type": "string" + }, + { + "description": "Exact np_title_id filter, max 128 characters", + "in": "query", + "name": "np_title_id", + "type": "string" + }, + { + "description": "Exact crawl run-id filter, max 128 characters", + "in": "query", + "name": "run_id", + "type": "string" + }, + { + "description": "Filter by free flag", + "in": "query", + "name": "is_free", + "type": "boolean" + }, + { + "description": "Filter: true returns add-ons/DLC/currency, false returns games and editions", + "in": "query", + "name": "is_addon", + "type": "boolean" + }, + { + "description": "Filter for titles included with a subscription (e.g. free with PS Plus)", + "in": "query", + "name": "is_tied_to_subscription", + "type": "boolean" + }, + { + "description": "Filter for pre-release / not-yet-purchasable titles", + "in": "query", + "name": "coming_soon", + "type": "boolean" + }, + { + "description": "Filter by titles currently discounted (discount_pct > 0)", + "in": "query", + "name": "on_sale", + "type": "boolean" + }, + { + "description": "Minimum current price in minor units (e.g. cents)", + "in": "query", + "name": "min_price_value", + "type": "integer" + }, + { + "description": "Maximum current price in minor units (e.g. cents)", + "in": "query", + "name": "max_price_value", + "type": "integer" + }, + { + "description": "Minimum average star rating, 0 through 5", + "in": "query", + "name": "min_star_rating", + "type": "number" + }, + { + "description": "Minimum number of star ratings", + "in": "query", + "name": "min_star_count", + "type": "integer" + }, + { + "description": "Minimum discount percent, 0 through 100", + "in": "query", + "name": "min_discount_pct", + "type": "integer" + }, + { + "description": "Minimum release year", + "in": "query", + "name": "min_release_year", + "type": "integer" + }, + { + "description": "Maximum release year", + "in": "query", + "name": "max_release_year", + "type": "integer" + }, + { + "description": "Sort enum: relevance, rating_desc, reviews_desc, price_asc, price_desc, discount_desc, release_desc, release_asc", + "enum": [ + "relevance", + "rating_desc", + "reviews_desc", + "price_asc", + "price_desc", + "discount_desc", + "release_desc", + "release_asc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -301542,7 +377102,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.brisbanetimesAuthorResponseDoc" + "$ref": "#/definitions/datasets.playstationGamesSearchResponseDoc" } }, "400": { @@ -301551,14 +377111,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -301569,130 +377129,55 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Brisbane Times journalist profile", + "summary": "Search PlayStation games dataset", "tags": [ - "Brisbane Times" + "Datasets" ] } }, - "/brisbanetimes/headlines": { + "/datasets/producthunt-makers/facets": { "get": { - "description": "Returns current story cards from one observed Brisbane Times server-rendered section or populated topic page. `section` must be one of the exact slugs from `/brisbanetimes/sections`; unsupported and unresolved linkless paths are rejected before an upstream request. Off-brand story links on Traveller are omitted.", - "operationId": "brisbanetimes-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns distribution counts over the Product Hunt makers dataset (dataset id enum value `producthunt-makers`), honoring the same filters as search. Facet enum: `topic`, `product_count_band`.", + "operationId": "datasets-producthunt-makers-facets", "parameters": [ { - "description": "Section or topic slug from /brisbanetimes/sections", + "description": "Facet enum: topic, product_count_band", "enum": [ - "national/queensland", - "politics", - "business", - "world", - "goodfood", - "lifestyle", - "traveller", - "sport", - "brisbane-news", - "politics/federal", - "politics/queensland", - "politics/nsw", - "politics/victoria", - "politics/western-australia", - "business/companies", - "business/markets", - "business/bullsnbears", - "business/the-economy", - "business/banking-and-finance", - "business/small-business", - "business/workplace", - "world/north-america", - "world/europe", - "world/asia", - "world/middle-east", - "world/south-america", - "world/africa", - "national", - "national/nsw", - "national/victoria", - "national/western-australia", - "opinion", - "property", - "property/news", - "property/living", - "sport/nrl", - "sport/rugby-union", - "sport/afl", - "sport/cricket", - "sport/soccer", - "sport/racing", - "sport/tennis", - "sport/netball", - "sport/basketball", - "sport/motorsport", - "sport/golf", - "sport/nfl", - "sport/athletics", - "sport/swimming", - "sport/boxing", - "goodfood/recipes", - "goodfood/tips-and-advice", - "goodfood/brisbane-eating-out", - "goodfood/drinks", - "culture", - "culture/movies", - "culture/tv-and-radio", - "culture/music", - "culture/celebrity", - "culture/books", - "culture/comedy", - "culture/dance", - "culture/musicals", - "culture/opera", - "culture/theatre", - "culture/art-and-design", - "culture/live-reviews", - "lifestyle/health-and-wellness", - "lifestyle/fashion", - "lifestyle/life-and-relationships", - "lifestyle/beauty", - "traveller/inspiration/destination-guides", - "traveller/inspiration", - "traveller/reviews-and-advice", - "traveller/travel-news", - "good-weekend", - "sunday-life", - "money", - "money/super-and-retirement", - "money/investing", - "money/banking", - "money/borrowing", - "money/saving", - "money/tax", - "money/planning-and-budgeting", - "education", - "healthcare", - "environment", - "environment/conservation", - "environment/climate-change", - "environment/sustainability", - "environment/weather", - "technology", - "technology/video-games", - "australia-higher-education", - "topic/media-and-marketing-5z7", - "topic/auctions-1nq1", - "topic/financing-1nq2", - "topic/style-luxury-1nij", - "topic/horoscopes-5yc", - "topic/home-technology-hqq", - "topic/phones-5zt", - "topic/gadgets-hqp", - "topic/explainers-1lz9" + "topic", + "product_count_band" ], "in": "query", - "name": "section", + "name": "facet", "required": true, "type": "string", - "x-example": "brisbane-news" + "x-example": "topic" + }, + { + "description": "Full-text query over maker name and headline, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Exact topic-slug the maker builds in, max 128 characters", + "in": "query", + "name": "topic", + "type": "string" + }, + { + "description": "Minimum number of products made, 0 or greater", + "in": "query", + "name": "min_products", + "type": "integer" + }, + { + "description": "Minimum total upvotes across the maker's products, 0 or greater", + "in": "query", + "name": "min_total_votes", + "type": "integer" } ], "produces": [ @@ -301702,7 +377187,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/datasets.producthuntMakersFacetResponseDoc" } }, "400": { @@ -301711,46 +377196,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Brisbane Times section or topic headlines", - "tags": [ - "Brisbane Times" - ] - } - }, - "/brisbanetimes/news": { - "get": { - "description": "Returns Brisbane Times's current public Latest News RSS feed: story title, canonical URL, summary, author, publication time, and lead image.", - "operationId": "brisbanetimes-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -301761,59 +377214,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Brisbane Times top stories", - "tags": [ - "Brisbane Times" - ] - } - }, - "/brisbanetimes/sections": { - "get": { - "description": "Lists the 104 accepted Brisbane Times editorial surfaces (95 article-bearing section pages and nine populated topic hubs), each with its exact path slug, menu label, and requested Brisbane Times URL. Three linkless surfaces with no explicit empty-state marker are excluded.", - "operationId": "brisbanetimes-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Brisbane Times editorial sections", + "summary": "Facet the Product Hunt makers dataset", "tags": [ - "Brisbane Times" + "Datasets" ] } }, - "/brooklinen/collections": { + "/datasets/producthunt-makers/items/{username}": { "get": { "consumes": [ "application/json" ], - "description": "Returns collections from Brooklinen (https://www.brooklinen.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", - "operationId": "brooklinen-collections", + "description": "Returns one maker by Product Hunt username from dataset id enum value `producthunt-makers`, including the products they made and their aggregate footprint. Returns 404 when the username is not in the dataset.", + "operationId": "datasets-producthunt-makers-item", "parameters": [ { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Maximum collections, defaults to 50 and supports up to 250", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "description": "Product Hunt maker username, e.g. rrhoover", + "in": "path", + "name": "username", + "required": true, + "type": "string", + "x-example": "rrhoover" } ], "produces": [ @@ -301823,7 +377244,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" + "$ref": "#/definitions/datasets.producthuntMakerResponseDoc" } }, "400": { @@ -301832,14 +377253,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -301850,41 +377277,67 @@ "ApiKeyAuth": [] } ], - "summary": "List Brooklinen collections", + "summary": "Get a Product Hunt maker from the dataset", "tags": [ - "Brooklinen" + "Datasets" ] } }, - "/brooklinen/collections/{handle}/products": { + "/datasets/producthunt-makers/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns products from one Brooklinen (https://www.brooklinen.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", - "operationId": "brooklinen-collection-products", + "description": "Searches Product Hunt makers from the dataset id enum value `producthunt-makers` — public-profile records of the people who made products, with their footprint (products made, total upvotes, topics) for maker leaderboards. Public fields only. Sort enum: `total_votes_desc`, `product_count_desc`, `followers_desc`, `relevance`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-producthunt-makers-search", "parameters": [ { - "description": "Collection handle", - "in": "path", - "name": "handle", - "required": true, - "type": "string", - "x-example": "collection-handle" + "description": "Full-text query over maker name and headline, max 256 characters", + "in": "query", + "name": "q", + "type": "string" }, { - "description": "1-based page, defaults to 1", + "description": "Exact topic-slug the maker builds in, e.g. artificial-intelligence, max 128 characters", + "in": "query", + "name": "topic", + "type": "string" + }, + { + "description": "Minimum number of products made, 0 or greater", + "in": "query", + "name": "min_products", + "type": "integer" + }, + { + "description": "Minimum total upvotes across the maker's products, 0 or greater", + "in": "query", + "name": "min_total_votes", + "type": "integer" + }, + { + "description": "Sort enum: total_votes_desc, product_count_desc, followers_desc, relevance", + "enum": [ + "total_votes_desc", + "product_count_desc", + "followers_desc", + "relevance" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", "in": "query", "name": "page", - "type": "integer", - "x-example": 1 + "type": "integer" }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -301894,7 +377347,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" + "$ref": "#/definitions/datasets.producthuntMakersSearchResponseDoc" } }, "400": { @@ -301903,20 +377356,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -301927,33 +377374,93 @@ "ApiKeyAuth": [] } ], - "summary": "List Brooklinen collection products", + "summary": "Search the Product Hunt makers dataset", "tags": [ - "Brooklinen" + "Datasets" ] } }, - "/brooklinen/pages": { + "/datasets/producthunt-products/facets": { "get": { "consumes": [ "application/json" ], - "description": "Lists Brooklinen static pages, `limit` per page (default 50, max 250) and `page` starting at 1. Each page has its handle, title, URL, plain-text content and timestamps. When `transport_mode` is `ssr_embedded`, items carry only `handle`, `url` and `updated_at`; request each handle singly for content.", - "operationId": "brooklinen-pages", + "description": "Returns distribution counts over the Product Hunt products dataset (dataset id enum value `producthunt-products`), honoring the same filters as search. Facet enum: `topic`, `launch_year`, `pricing_type`, `product_state`.", + "operationId": "datasets-producthunt-products-facets", "parameters": [ { - "description": "1-based page, defaults to 1", + "description": "Facet enum: topic, launch_year, pricing_type, product_state", + "enum": [ + "topic", + "launch_year", + "pricing_type", + "product_state" + ], "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "facet", + "required": true, + "type": "string", + "x-example": "topic" }, { - "description": "Maximum static pages, defaults to 50 and supports up to 250", + "description": "Full-text query over product name and tagline, max 256 characters", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "q", + "type": "string" + }, + { + "description": "Exact topic-slug filter, e.g. artificial-intelligence, max 128 characters", + "in": "query", + "name": "topic", + "type": "string" + }, + { + "description": "Exact maker-username filter (populated by hydration), max 128 characters", + "in": "query", + "name": "maker", + "type": "string" + }, + { + "description": "Lower bound on first-launch date, an ISO-8601 date (YYYY-MM-DD)", + "in": "query", + "name": "launched_after", + "type": "string" + }, + { + "description": "Upper bound on first-launch date, an ISO-8601 date (YYYY-MM-DD)", + "in": "query", + "name": "launched_before", + "type": "string" + }, + { + "description": "Minimum upvotes, 0 or greater", + "in": "query", + "name": "min_votes", + "type": "integer" + }, + { + "description": "Minimum review rating, from 0 through 5", + "in": "query", + "name": "min_rating", + "type": "number" + }, + { + "description": "Exact pricing-type filter, e.g. free, paid, freemium", + "in": "query", + "name": "pricing_type", + "type": "string" + }, + { + "description": "Website presence filter", + "in": "query", + "name": "has_website", + "type": "boolean" + }, + { + "description": "true keeps only products still online, false only retired products", + "in": "query", + "name": "is_online", + "type": "boolean" } ], "produces": [ @@ -301963,7 +377470,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pagesResponseDoc" + "$ref": "#/definitions/datasets.producthuntProductsFacetResponseDoc" } }, "400": { @@ -301978,8 +377485,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -301990,27 +377497,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Brooklinen static pages", + "summary": "Facet the Product Hunt products dataset", "tags": [ - "Brooklinen" + "Datasets" ] } }, - "/brooklinen/pages/{handle}": { + "/datasets/producthunt-products/items/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Brooklinen static page by its `handle`: id, title, URL, plain-text content, and created, published and updated times. A missing handle returns 404. When `transport_mode` is `ssr_embedded`, the content is plain text from the page's rich-text blocks and `id` is omitted.", - "operationId": "brooklinen-page", + "description": "Returns one product by its Product Hunt slug from dataset id enum value `producthunt-products`, including its full launch history and (once hydrated) description, website, twitter_url, pricing and makers. Returns 404 when the slug is not in the archive.", + "operationId": "datasets-producthunt-products-item", "parameters": [ { - "description": "Page handle", + "description": "Product Hunt product slug, e.g. chatgpt", "in": "path", - "name": "handle", + "name": "slug", "required": true, "type": "string", - "x-example": "page-handle" + "x-example": "chatgpt" } ], "produces": [ @@ -302020,7 +377527,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pageResponseDoc" + "$ref": "#/definitions/datasets.producthuntProductResponseDoc" } }, "400": { @@ -302041,8 +377548,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -302053,33 +377560,105 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Brooklinen static page", + "summary": "Get a Product Hunt product from the dataset", "tags": [ - "Brooklinen" + "Datasets" ] } }, - "/brooklinen/products": { + "/datasets/producthunt-products/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns products from Brooklinen's (https://www.brooklinen.com) product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", - "operationId": "brooklinen-products", + "description": "Searches individual Product Hunt launches from the dataset id enum value `producthunt-products` — the searchable launch archive. Each result is one product with its topics, upvotes, ranks and launch history; description/website/twitter_url/pricing/makers are filled in over time. Sort enum: `relevance`, `votes_desc`, `launched_desc`, `launched_asc`, `rating_desc`, `best_rank_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-producthunt-products-search", "parameters": [ { - "description": "1-based page, defaults to 1", + "description": "Full-text query over product name and tagline, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Exact topic-slug filter, e.g. artificial-intelligence, max 128 characters", + "in": "query", + "name": "topic", + "type": "string" + }, + { + "description": "Exact maker-username filter (populated by hydration), max 128 characters", + "in": "query", + "name": "maker", + "type": "string" + }, + { + "description": "Lower bound on first-launch date, an ISO-8601 date (YYYY-MM-DD)", + "in": "query", + "name": "launched_after", + "type": "string" + }, + { + "description": "Upper bound on first-launch date, an ISO-8601 date (YYYY-MM-DD)", + "in": "query", + "name": "launched_before", + "type": "string" + }, + { + "description": "Minimum upvotes, 0 or greater", + "in": "query", + "name": "min_votes", + "type": "integer" + }, + { + "description": "Minimum review rating, from 0 through 5 (populated by hydration)", + "in": "query", + "name": "min_rating", + "type": "number" + }, + { + "description": "Exact pricing-type filter (populated by hydration), e.g. free, paid, freemium", + "in": "query", + "name": "pricing_type", + "type": "string" + }, + { + "description": "Website presence filter (populated by hydration)", + "in": "query", + "name": "has_website", + "type": "boolean" + }, + { + "description": "true keeps only products still online, false only retired products", + "in": "query", + "name": "is_online", + "type": "boolean" + }, + { + "description": "Sort enum: relevance, votes_desc, launched_desc, launched_asc, rating_desc, best_rank_asc", + "enum": [ + "relevance", + "votes_desc", + "launched_desc", + "launched_asc", + "rating_desc", + "best_rank_asc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", "in": "query", "name": "page", - "type": "integer", - "x-example": 1 + "type": "integer" }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -302089,7 +377668,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productsResponseDoc" + "$ref": "#/definitions/datasets.producthuntProductsSearchResponseDoc" } }, "400": { @@ -302104,8 +377683,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -302116,27 +377695,72 @@ "ApiKeyAuth": [] } ], - "summary": "List Brooklinen products", + "summary": "Search the Product Hunt products dataset", "tags": [ - "Brooklinen" + "Datasets" ] } }, - "/brooklinen/products/{handle}": { + "/datasets/producthunt-trends/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns product detail for one Brooklinen (https://www.brooklinen.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", - "operationId": "brooklinen-product", + "description": "Returns suppressed distribution counts over the Product Hunt trends dataset (dataset id enum value `producthunt-trends`), honoring the same filters as search. Facet enum: `topic`, `launch_year`.", + "operationId": "datasets-producthunt-trends-facets", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", + "description": "Facet enum: topic, launch_year", + "enum": [ + "topic", + "launch_year" + ], + "in": "query", + "name": "facet", "required": true, "type": "string", - "x-example": "product-handle" + "x-example": "topic" + }, + { + "description": "Aggregate cell dimension enum: topic_month, topic_year, topic. Defaults to topic_month", + "enum": [ + "topic_month", + "topic_year", + "topic" + ], + "in": "query", + "name": "group_by", + "type": "string" + }, + { + "description": "Exact topic-slug filter, e.g. artificial-intelligence, max 128 characters", + "in": "query", + "name": "topic", + "type": "string" + }, + { + "description": "Lower bound on first-launch date, an ISO-8601 date (YYYY-MM-DD)", + "in": "query", + "name": "launched_after", + "type": "string" + }, + { + "description": "Upper bound on first-launch date, an ISO-8601 date (YYYY-MM-DD)", + "in": "query", + "name": "launched_before", + "type": "string" + }, + { + "description": "Minimum product upvotes, 0 or greater", + "in": "query", + "name": "min_votes", + "type": "integer" + }, + { + "description": "Minimum launches per bucket; raises the small-cell suppression floor", + "in": "query", + "name": "min_launches", + "type": "integer" } ], "produces": [ @@ -302146,7 +377770,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productResponseDoc" + "$ref": "#/definitions/datasets.producthuntTrendsFacetResponseDoc" } }, "400": { @@ -302155,20 +377779,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -302179,45 +377797,84 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Brooklinen product", + "summary": "Facet the Product Hunt trends dataset", "tags": [ - "Brooklinen" + "Datasets" ] } }, - "/brooklinen/products/{handle}/recommendations": { + "/datasets/producthunt-trends/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns recommended products for one Brooklinen (https://www.brooklinen.com) product handle. The storefront URL is fixed server-side.", - "operationId": "brooklinen-product-recommendations", + "description": "Returns aggregate Product Hunt launch trends from the dataset id enum value `producthunt-trends`. Aggregate-only: each row is a category-over-time cell (a topic, optionally within a calendar period), reporting launch count, total and average upvotes, average rating and the top product — never an individual product record. Thin cells are suppressed. group_by enum: `topic_month`, `topic_year`, `topic`. Sort enum: `period_desc`, `period_asc`, `launch_count_desc`, `sum_votes_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-producthunt-trends-search", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", - "required": true, - "type": "string", - "x-example": "product-handle" + "description": "Aggregate cell dimension enum: topic_month, topic_year, topic. Defaults to topic_month", + "enum": [ + "topic_month", + "topic_year", + "topic" + ], + "in": "query", + "name": "group_by", + "type": "string" }, { - "description": "Maximum products, defaults to 10 and supports up to 20", + "description": "Exact topic-slug filter, e.g. artificial-intelligence, max 128 characters", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "topic", + "type": "string" }, { - "description": "Recommendation intent. Allowed values: related, complementary", + "description": "Lower bound on first-launch date, an ISO-8601 date (YYYY-MM-DD)", + "in": "query", + "name": "launched_after", + "type": "string" + }, + { + "description": "Upper bound on first-launch date, an ISO-8601 date (YYYY-MM-DD)", + "in": "query", + "name": "launched_before", + "type": "string" + }, + { + "description": "Minimum product upvotes, 0 or greater", + "in": "query", + "name": "min_votes", + "type": "integer" + }, + { + "description": "Minimum launches per cell; raises the small-cell suppression floor (never lowered below the built-in minimum)", + "in": "query", + "name": "min_launches", + "type": "integer" + }, + { + "description": "Sort enum: period_desc, period_asc, launch_count_desc, sum_votes_desc", "enum": [ - "related", - "complementary" + "period_desc", + "period_asc", + "launch_count_desc", + "sum_votes_desc" ], "in": "query", - "name": "intent", - "type": "string", - "x-example": "related" + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -302227,7 +377884,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" + "$ref": "#/definitions/datasets.producthuntTrendsSearchResponseDoc" } }, "400": { @@ -302236,20 +377893,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -302260,41 +377911,72 @@ "ApiKeyAuth": [] } ], - "summary": "List Brooklinen product recommendations", + "summary": "Search the Product Hunt trends dataset", "tags": [ - "Brooklinen" + "Datasets" ] } }, - "/brooklinen/search/suggest": { + "/datasets/reddit-trending/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns products, collections, and query suggestions from Brooklinen's (https://www.brooklinen.com) predictive search. The storefront URL is fixed server-side.", - "operationId": "brooklinen-search-suggest", + "description": "Returns up to 50 Reddit trending-facet buckets ordered by count, using the same filters as `datasets_reddit_trending_search`. Page and page_size do not change the aggregation. A snapshot_date facet without date spans all history; other facets use the search date scope, including the latest-snapshot default and full history for date_desc sort.", + "operationId": "datasets-reddit-trending-facets", "parameters": [ { - "description": "Search query", + "description": "Facet field", + "enum": [ + "subreddit", + "domain", + "snapshot_date" + ], "in": "query", - "name": "q", + "name": "facet", "required": true, "type": "string", - "x-example": "wool" + "x-example": "subreddit" }, { - "description": "Comma-separated suggestion types. Allowed values: product, collection, query", + "description": "Full-text post-title query", "in": "query", - "name": "types", - "type": "string", - "x-example": "product,collection,query" + "name": "q", + "type": "string" }, { - "description": "Maximum results per type, defaults to 10 and supports up to 20", + "description": "Exact subreddit name", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "subreddit", + "type": "string" + }, + { + "description": "Snapshot date, yyyy-MM-dd", + "in": "query", + "name": "date", + "type": "string" + }, + { + "description": "Validated search sort; bucket order stays count-desc, and time-series date_desc keeps its search history scope", + "enum": [ + "rank", + "date_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Result page, 1-based", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, default 20 and max 100", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -302304,7 +377986,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" + "$ref": "#/definitions/datasets.datasetFacetResponseDoc" } }, "400": { @@ -302319,8 +378001,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -302331,42 +378013,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get Brooklinen search suggestions", + "summary": "Discover values in the Reddit trending dataset", "tags": [ - "Brooklinen" + "Datasets" ] } }, - "/brooklinen/sitemap/urls": { + "/datasets/reddit-trending/items/{post_uid}": { "get": { "consumes": [ "application/json" ], - "description": "Lists URL entries from Brooklinen's sitemaps, filtered by `type` (`all` by default, or `products`, `collections`, `pages`, `blogs`, `agentic_discovery`, `other`) and capped by `limit` (default 50, max 250). Each entry has its `loc`, type, handle, `lastmod`, `changefreq` and, where present, images with caption and title.", - "operationId": "brooklinen-sitemap-urls", + "description": "Retrieves one stored subreddit-post ranking row by `post_uid`, the `subreddit:date:rank` key returned by `datasets_reddit_trending_search`.", + "operationId": "datasets-reddit-trending-item", "parameters": [ { - "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", - "enum": [ - "all", - "products", - "collections", - "pages", - "blogs", - "agentic_discovery", - "other" - ], - "in": "query", - "name": "type", - "type": "string", - "x-example": "products" - }, - { - "description": "Maximum URL entries, defaults to 50 and supports up to 250", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "description": "Exact post_uid from a search result", + "in": "path", + "name": "post_uid", + "required": true, + "type": "string" } ], "produces": [ @@ -302376,7 +378042,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" + "$ref": "#/definitions/datasets.redditTrendingDatasetItemResponseDoc" } }, "400": { @@ -302385,14 +378051,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -302403,66 +378075,61 @@ "ApiKeyAuth": [] } ], - "summary": "List Brooklinen sitemap URLs", + "summary": "Get one Reddit trending-post record", "tags": [ - "Brooklinen" + "Datasets" ] } }, - "/brooklinen/sitemaps": { + "/datasets/reddit-trending/search": { "get": { "consumes": [ "application/json" ], - "description": "Lists the child sitemaps that Brooklinen publishes, with no parameters. Each entry has its `loc` URL and a `type` of `products`, `collections`, `pages`, `blogs`, `agentic_discovery` or `other`, which tells you which sitemap to pass to the sitemap URL endpoint.", - "operationId": "brooklinen-sitemaps", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" - } + "description": "Searches daily snapshots of each tracked subreddit's hot-feed post order (one document per subreddit × snapshot × rank) so history accumulates. With no `date` the latest snapshot is returned (today's trending); pair `subreddit` with `sort=date_desc` for a subreddit's trending history over time. There is no score or comment-count field, so `rank` reflects Reddit's own hot-feed order rather than a locally computed score. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-reddit-trending-search", + "parameters": [ + { + "description": "Full-text query over the post title, max 256 characters", + "in": "query", + "name": "q", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Exact subreddit-name filter, max 128 characters", + "in": "query", + "name": "subreddit", + "type": "string" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Snapshot date filter yyyy-MM-dd; defaults to the latest snapshot", + "in": "query", + "name": "date", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] + "description": "Sort enum: rank, date_desc", + "enum": [ + "rank", + "date_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], - "summary": "List Brooklinen sitemaps", - "tags": [ - "Brooklinen" - ] - } - }, - "/brooklinen/store": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns storefront metadata for Brooklinen (https://www.brooklinen.com). The storefront URL is fixed server-side, so no `url` parameter is accepted.", - "operationId": "brooklinen-store", "produces": [ "application/json" ], @@ -302470,7 +378137,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.storeResponseDoc" + "$ref": "#/definitions/datasets.redditTrendingSearchResponseDoc" } }, "400": { @@ -302485,8 +378152,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -302497,26 +378164,97 @@ "ApiKeyAuth": [] } ], - "summary": "Get Brooklinen store metadata", + "summary": "Search the reddit-trending dataset", "tags": [ - "Brooklinen" + "Datasets" ] } }, - "/burberry/categories": { + "/datasets/sec-companies/facets": { "get": { "consumes": [ "application/json" ], - "description": "Lists every department, section, and leaf category from Burberry's own site navigation, flattened with a breadcrumb-style path. Each entry's url is exactly what burberry-category's own category parameter accepts. Filter to one top-level department with department (e.g. Women, Men, Children, Gifts, Trench, Scarves, Bags, Beauty & Fragrances, Sale); omit for every department. See the response's own departments field for the live list.", - "operationId": "burberry-categories", + "description": "Returns terms-aggregation counts for one facet of the SEC companies dataset, scoped to the same filters as search. Facet enum: `sic`, `sic_description`, `exchange`, `state_of_incorporation`, `entity_type`, `reporting_currency`, `revenue_band`, `forms_filed`. `revenue_band` buckets latest-annual revenue into: `unknown`, `under_1m`, `1m_10m`, `10m_100m`, `100m_1b`, `1b_10b`, `over_10b`.", + "operationId": "datasets-sec-companies-facets", "parameters": [ { - "description": "Top-level department to filter to, e.g. Women, Men, Children -- omit for every department", + "description": "Facet enum: sic, sic_description, exchange, state_of_incorporation, entity_type, reporting_currency, revenue_band, forms_filed", + "enum": [ + "sic", + "sic_description", + "exchange", + "state_of_incorporation", + "entity_type", + "reporting_currency", + "revenue_band", + "forms_filed" + ], "in": "query", - "name": "department", + "name": "facet", + "required": true, "type": "string", - "x-example": "Women" + "x-example": "sic" + }, + { + "description": "Full-text query over the company name, or an exact ticker match, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Exact ticker filter (case-insensitive), max 32 characters", + "in": "query", + "name": "ticker", + "type": "string" + }, + { + "description": "Exact SIC industry-code filter, max 32 characters", + "in": "query", + "name": "sic", + "type": "string" + }, + { + "description": "Exact exchange filter as reported by EDGAR, max 64 characters", + "in": "query", + "name": "exchange", + "type": "string" + }, + { + "description": "Exact state/country-of-incorporation filter, max 32 characters", + "in": "query", + "name": "state_of_incorporation", + "type": "string" + }, + { + "description": "Exact entity-type filter, max 64 characters", + "in": "query", + "name": "entity_type", + "type": "string" + }, + { + "description": "Exact reporting-currency filter, ISO-4217 code, e.g. USD, JPY, EUR", + "in": "query", + "name": "reporting_currency", + "type": "string" + }, + { + "description": "When true, keep only companies that have XBRL financial statements", + "in": "query", + "name": "has_financials", + "type": "boolean" + }, + { + "description": "Minimum latest-annual revenue in USD (normalized at reference rates), 0 or greater", + "in": "query", + "name": "min_revenue", + "type": "number" + }, + { + "description": "Exact form-type filter, e.g. 10-K, 8-K", + "in": "query", + "name": "form_filed", + "type": "string" } ], "produces": [ @@ -302526,7 +378264,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/burberry.categoriesResponseDoc" + "$ref": "#/definitions/datasets.secCompaniesFacetResponseDoc" } }, "400": { @@ -302541,8 +378279,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -302553,56 +378291,66 @@ "ApiKeyAuth": [] } ], - "summary": "List Burberry categories", + "summary": "Facet the SEC companies dataset", "tags": [ - "Burberry" + "Datasets" ] } }, - "/burberry/category": { + "/datasets/sec-companies/financials/{cik}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page (20 products) of a Burberry category/browse listing. category is the site-relative category path, e.g. /l/womens-clothing/new-arrivals/ -- use burberry-categories to discover every valid value instead of guessing from site URLs. offset paginates in increments of 20 (the upstream's own fixed page size). sort selects the result order. The response includes the upstream's own available filters (facets) with live per-option result counts; feed a selection back in via facets, a comma-separated list of property:value pairs taken from this same response's facets field (e.g. benefit:bags,dotcomreportingcolour:black -- see a live response for the values valid for that category). At most one value per facet property; an unmatched or invalid combination returns a well-formed empty result, not an error.", - "operationId": "burberry-category", + "description": "Returns a company's financial-statement history (income statement, balance sheet, cash flow) from the SEC companies dataset, newest fiscal year first. An unknown CIK or a company with no XBRL data returns an empty series rather than a 404 — most filers without a current ticker have no financial-statement history at all. `lines` keys are the same concept names the live `/sec/financials` endpoint uses (e.g. `revenue`, `net_income`, `total_assets`); `ratios` keys include `gross_margin`, `operating_margin`, `net_margin`, `revenue_growth_yoy`, `current_ratio`, `debt_to_equity`, `free_cash_flow` where derivable. statement enum: `income`, `balance`, `cash_flow`. period enum: `annual`, `quarterly`.", + "operationId": "datasets-sec-companies-financials", "parameters": [ { - "description": "Site-relative category path -- see burberry-categories", - "in": "query", - "name": "category", + "description": "SEC CIK, numeric or zero-padded", + "in": "path", + "name": "cik", "required": true, "type": "string", - "x-example": "/l/womens-clothing/new-arrivals/" + "x-example": "320193" }, { - "default": 0, - "description": "Zero-based result offset, in increments of 20", + "description": "Statement enum: income, balance, cash_flow. Omit to return all three.", + "enum": [ + "income", + "balance", + "cash_flow" + ], "in": "query", - "maximum": 100000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "statement", + "type": "string" }, { - "default": "default", - "description": "Sort order", + "description": "Period-type enum: annual, quarterly. Omit to return both.", "enum": [ - "default", - "price_asc", - "price_desc", - "newest" + "annual", + "quarterly" ], "in": "query", - "name": "sort", + "name": "period", "type": "string" }, { - "description": "Comma-separated property:value facet filters, taken from this same response's own facets field, e.g. benefit:bags,dotcomreportingcolour:black -- at most one value per property", + "description": "Inclusive lower bound on fiscal_year", "in": "query", - "name": "facets", - "type": "string", - "x-example": "benefit:bags" + "name": "from", + "type": "integer" + }, + { + "description": "Inclusive upper bound on fiscal_year", + "in": "query", + "name": "to", + "type": "integer" + }, + { + "description": "Maximum points returned (most recent fiscal years first), default 100, max 400", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -302612,7 +378360,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/burberry.categoryResponseDoc" + "$ref": "#/definitions/datasets.secCompaniesFinancialsResponseDoc" } }, "400": { @@ -302621,20 +378369,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -302645,27 +378387,51 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Burberry category", + "summary": "Get a SEC company's financial-statement history", "tags": [ - "Burberry" + "Datasets" ] } }, - "/burberry/product": { + "/datasets/sec-companies/insider/{cik}": { "get": { "consumes": [ "application/json" ], - "description": "Returns product detail for one Burberry product page: name, sku, colour, material, description, price, stock status, every product image, and every other purchasable colourway of the same style. url is the site-relative product path, e.g. /check-cashmere-cardigan-p81336111, as returned by burberry-search's or burberry-category's own products[].url field.", - "operationId": "burberry-product", + "description": "Returns a company's insider (Form 3/4/5) transaction history from the SEC companies dataset, most recent transaction first. An unknown CIK or a company with no reported transactions returns an empty series rather than a 404.", + "operationId": "datasets-sec-companies-insider", "parameters": [ { - "description": "Site-relative product path, from a search or category result's url field", - "in": "query", - "name": "url", + "description": "SEC CIK, numeric or zero-padded", + "in": "path", + "name": "cik", "required": true, "type": "string", - "x-example": "/check-cashmere-cardigan-p81336111" + "x-example": "320193" + }, + { + "description": "Inclusive start date (YYYY-MM-DD, UTC) filtering transaction date", + "in": "query", + "name": "from", + "type": "string" + }, + { + "description": "Inclusive end date (YYYY-MM-DD, UTC) filtering transaction date", + "in": "query", + "name": "to", + "type": "string" + }, + { + "description": "Exact transaction code filter, e.g. P (open-market purchase), S (sale)", + "in": "query", + "name": "code", + "type": "string" + }, + { + "description": "Maximum transactions returned (most recent first), default 50, max 200", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -302675,7 +378441,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/burberry.productResponseDoc" + "$ref": "#/definitions/datasets.secCompaniesInsiderResponseDoc" } }, "400": { @@ -302684,20 +378450,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -302708,27 +378468,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Burberry product", + "summary": "Get a SEC company's insider-transaction history", "tags": [ - "Burberry" + "Datasets" ] } }, - "/burberry/related": { + "/datasets/sec-companies/items/{cik}": { "get": { "consumes": [ "application/json" ], - "description": "Returns the cross-sell surfaces a real Burberry product page itself loads for that product: similar_products (algorithmically similar items) and shop_the_look (other pieces in the same styled outfit, when the upstream has curated one -- most products have none, returned as a well-formed empty list, not an error). url is the site-relative product path, e.g. /check-cashmere-cardigan-p81336111, as returned by burberry-search's, burberry-category's, or burberry-product's own url field.", - "operationId": "burberry-related", + "description": "Returns one SEC-reporting company by CIK from dataset id `sec-companies`, including its filing-history summary, financial-statement rollups, and trailing-90-day insider-activity summary. Returns 404 when the CIK is not in the dataset.", + "operationId": "datasets-sec-companies-item", "parameters": [ { - "description": "Site-relative product path, from a search, category, or product result's url field", - "in": "query", - "name": "url", + "description": "SEC CIK, numeric or zero-padded, e.g. 320193 or 0000320193", + "in": "path", + "name": "cik", "required": true, "type": "string", - "x-example": "/check-cashmere-cardigan-p81336111" + "x-example": "320193" } ], "produces": [ @@ -302738,7 +378498,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/burberry.relatedResponseDoc" + "$ref": "#/definitions/datasets.secCompaniesItemResponseDoc" } }, "400": { @@ -302747,14 +378507,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -302765,56 +378531,141 @@ "ApiKeyAuth": [] } ], - "summary": "Get related Burberry products", + "summary": "Get a company from the SEC companies dataset", "tags": [ - "Burberry" + "Datasets" ] } }, - "/burberry/search": { + "/datasets/sec-companies/search": { "get": { "consumes": [ "application/json" ], - "description": "Searches Burberry's product catalog by keyword. Returns product summaries plus the upstream's own available filters (facets) with live per-option result counts. offset paginates in increments of 20 (the upstream's own fixed page size). sort selects the result order. facets applies a facet selection back, a comma-separated list of property:value pairs taken from this same response's facets field (e.g. benefit:bags,dotcomreportingcolour:black). A query with no matches, or a facet combination with no matches, returns a well-formed empty result, not an error. Unlike burberry-category, this response has no true grand-total result count -- only the current page's own count.", - "operationId": "burberry-search", + "description": "Searches SEC-reporting companies — filing history, financial-statement rollups (latest annual/quarterly revenue, net income, total assets) and trailing-90-day insider (Form 3/4/5) activity. Sort enum: `relevance`, `name_asc`, `revenue_desc`, `net_income_desc`, `filing_recent_desc`, `insider_activity_desc`. `entity_type`, `sic`, `sic_description`, `exchange`, and `state_of_incorporation` are open filters over the exact values EDGAR reports for each filer (not a fixed enum) — discover real values via the matching facet. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-sec-companies-search", "parameters": [ { - "description": "Search keyword", + "description": "Full-text query over the company name, or an exact ticker match, max 256 characters", "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "trench" + "name": "q", + "type": "string" }, { - "default": 0, - "description": "Zero-based result offset, in increments of 20", + "description": "Exact ticker filter (case-insensitive), e.g. AAPL, max 32 characters", "in": "query", - "maximum": 100000, - "minimum": 0, - "name": "offset", + "name": "ticker", + "type": "string" + }, + { + "description": "Exact CIK filter, numeric or zero-padded, e.g. 320193 or 0000320193", + "in": "query", + "name": "cik", + "type": "string" + }, + { + "description": "Exact SIC industry-code filter, e.g. 3571, max 32 characters", + "in": "query", + "name": "sic", + "type": "string" + }, + { + "description": "Exact SIC description filter, e.g. Electronic Computers, max 128 characters", + "in": "query", + "name": "sic_description", + "type": "string" + }, + { + "description": "Exact exchange filter as reported by EDGAR, e.g. Nasdaq, NYSE, max 64 characters", + "in": "query", + "name": "exchange", + "type": "string" + }, + { + "description": "Exact state/country-of-incorporation filter as reported by EDGAR, e.g. DE, CA, max 32 characters", + "in": "query", + "name": "state_of_incorporation", + "type": "string" + }, + { + "description": "Exact entity-type filter as reported by EDGAR (e.g. operating), max 64 characters", + "in": "query", + "name": "entity_type", + "type": "string" + }, + { + "description": "Exact reporting-currency filter, ISO-4217 code, e.g. USD, JPY, EUR", + "in": "query", + "name": "reporting_currency", + "type": "string" + }, + { + "description": "When true, keep only companies that have XBRL financial statements", + "in": "query", + "name": "has_financials", + "type": "boolean" + }, + { + "description": "Minimum latest-annual revenue in USD (normalized from the filer's reporting currency at reference rates), 0 or greater", + "in": "query", + "name": "min_revenue", + "type": "number" + }, + { + "description": "Maximum latest-annual revenue in USD (normalized), 0 or greater", + "in": "query", + "name": "max_revenue", + "type": "number" + }, + { + "description": "Minimum latest-annual net income in USD (normalized; negative allowed)", + "in": "query", + "name": "min_net_income", + "type": "number" + }, + { + "description": "Minimum latest-annual total assets in USD (normalized), 0 or greater", + "in": "query", + "name": "min_total_assets", + "type": "number" + }, + { + "description": "Exact form-type filter; keeps only companies that have ever filed this form, e.g. 10-K, 8-K", + "in": "query", + "name": "form_filed", + "type": "string" + }, + { + "description": "Minimum insider (Form 3/4/5) transaction count in the trailing 90 days, 0 or greater", + "in": "query", + "name": "min_insider_txn_count_90d", "type": "integer" }, { - "default": "default", - "description": "Sort order", + "description": "Sort enum: relevance, name_asc, revenue_desc, net_income_desc, filing_recent_desc, insider_activity_desc", "enum": [ - "default", - "price_asc", - "price_desc", - "newest" + "relevance", + "name_asc", + "revenue_desc", + "net_income_desc", + "filing_recent_desc", + "insider_activity_desc" ], "in": "query", "name": "sort", "type": "string" }, { - "description": "Comma-separated property:value facet filters, taken from this same response's own facets field, e.g. benefit:bags,dotcomreportingcolour:black -- at most one value per property", + "description": "Page number, defaults to 1", "in": "query", - "name": "facets", - "type": "string", - "x-example": "benefit:bags" + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -302824,7 +378675,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/burberry.searchResponseDoc" + "$ref": "#/definitions/datasets.secCompaniesSearchResponseDoc" } }, "400": { @@ -302839,8 +378690,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -302851,27 +378702,49 @@ "ApiKeyAuth": [] } ], - "summary": "Search Burberry products", + "summary": "Search the SEC companies dataset", "tags": [ - "Burberry" + "Datasets" ] } }, - "/burberry/suggest": { + "/datasets/sec-institutional-positions/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns Burberry's own search-box suggestions (typeahead) for a partial query: a flat list of suggested search phrases, each with its own live result count on the search index. Not product data.", - "operationId": "burberry-suggest", + "description": "Returns terms-aggregation counts for one facet of the SEC institutional positions dataset, scoped to the same filters as search. Facet enum: `manager`, `issuer`.", + "operationId": "datasets-sec-institutional-positions-facets", "parameters": [ { - "description": "Partial search query", + "description": "Facet enum: manager, issuer", + "enum": [ + "manager", + "issuer" + ], "in": "query", - "name": "query", + "name": "facet", "required": true, "type": "string", - "x-example": "trench" + "x-example": "manager" + }, + { + "description": "Exact institutional-manager CIK filter, numeric or zero-padded", + "in": "query", + "name": "manager_cik", + "type": "string" + }, + { + "description": "Issuer-name text filter (best-effort match), max 256 characters", + "in": "query", + "name": "issuer_name", + "type": "string" + }, + { + "description": "Exact CUSIP filter, max 16 characters", + "in": "query", + "name": "cusip", + "type": "string" } ], "produces": [ @@ -302881,7 +378754,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/burberry.suggestResponseDoc" + "$ref": "#/definitions/datasets.secInstitutionalPositionsFacetResponseDoc" } }, "400": { @@ -302896,8 +378769,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -302908,41 +378781,60 @@ "ApiKeyAuth": [] } ], - "summary": "Get Burberry search-box suggestions", + "summary": "Facet the SEC institutional positions dataset", "tags": [ - "Burberry" + "Datasets" ] } }, - "/burgerking/availability": { + "/datasets/sec-institutional-positions/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns one restaurant's live open/closed status per order channel (curbside, delivery, drive-thru, eat-in, mobile-order drive-thru, takeout), distinct from /burgerking/locations' published weekly schedule. Each channel carries whether it is taking orders right now, its current open window when open, and the following window's start/end -- a channel with no current or next window at all means this restaurant does not offer it, not merely that it is closed. Also returns the restaurant's own local time, timezone and an overall available flag. Setting forecast=true additionally returns a multi-day forward schedule per channel, including two catering-only channels not present in the current-status list.", - "operationId": "burgerking-availability", + "description": "Searches institutional investment managers' quarterly 13F portfolio holdings stored in a search index. Filter by manager_cik for a manager's full reported portfolio (an exact, reliable filter), or by issuer_name/cusip for a best-effort view of which managers reported a position in an issuer — SEC publishes no authoritative CUSIP-to-CIK mapping, so the issuer side is never a guaranteed-resolved join. Sort enum: `value_desc`, `value_asc`, `shares_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-sec-institutional-positions-search", "parameters": [ { - "description": "Burger King's numeric store id, from /burgerking/locations", + "description": "Exact institutional-manager CIK filter, numeric or zero-padded", "in": "query", - "name": "store_id", - "required": true, - "type": "string", - "x-example": "17871" + "name": "manager_cik", + "type": "string" }, { - "description": "RBI market the store belongs to, one of `US`, `CA` (default `US`)", + "description": "Issuer-name text filter (best-effort match, not a resolved CIK join), max 256 characters", "in": "query", - "name": "market", - "type": "string", - "x-example": "US" + "name": "issuer_name", + "type": "string" }, { - "description": "Include a multi-day forward schedule per channel (default false)", + "description": "Exact CUSIP filter, max 16 characters", "in": "query", - "name": "forecast", - "type": "boolean", - "x-example": false + "name": "cusip", + "type": "string" + }, + { + "description": "Sort enum: value_desc, value_asc, shares_desc", + "enum": [ + "value_desc", + "value_asc", + "shares_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -302952,7 +378844,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/burgerking.availabilityResponseDoc" + "$ref": "#/definitions/datasets.secInstitutionalPositionsSearchResponseDoc" } }, "400": { @@ -302961,20 +378853,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -302985,70 +378871,74 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Burger King restaurant's real-time fulfillment status", + "summary": "Search the SEC institutional positions dataset", "tags": [ - "Burger King" + "Datasets" ] } }, - "/burgerking/locations": { + "/datasets/starbucks-stores/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns Burger King restaurants near a latitude/longitude. Each restaurant carries its internal id and numeric store id (the value /burgerking/menu and /burgerking/availability take), full address with coordinates, phone, the operating franchise group, amenity flags (breakfast, delivery, drive-thru, playground, takeout, wifi, halal, dark kitchen) and the full published week of hours for dining room, drive-thru, delivery and curbside separately. A coordinate with no nearby Burger King returns an empty list rather than an error. Setting include_availability=true additionally returns each restaurant's live per-channel open/closed status in one call, the same shape /burgerking/availability returns -- note that path is capped at a fixed page (up to 20 restaurants) rather than honoring max_results beyond that. Setting delivery_only=true instead restricts results to restaurants that Burger King's own delivery service actually considers deliverable to this coordinate -- a genuine delivery-zone match, not the same set as filtering has_delivery=true. include_availability and delivery_only cannot be combined.", - "operationId": "burgerking-locations", + "description": "Returns terms aggregation counts for the Starbucks store directory. Facet enum: `country`, `state`, `market`, `amenities`, `ownership_type_code`. Accepts the same filter parameters as search to scope the aggregation.", + "operationId": "datasets-starbucks-stores-facets", "parameters": [ { - "description": "Search center latitude", + "description": "Facet enum: country, state, market, amenities, ownership_type_code", + "enum": [ + "country", + "state", + "market", + "amenities", + "ownership_type_code" + ], "in": "query", - "name": "latitude", + "name": "facet", "required": true, - "type": "number", - "x-example": 40.7128 + "type": "string", + "x-example": "country" }, { - "description": "Search center longitude", + "description": "Full-text search over store name, city, and address", "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -74.006 + "name": "q", + "type": "string" }, { - "description": "Search radius in meters, 1-50000 (default 8000)", + "description": "ISO-3166-1 alpha-2 country filter", "in": "query", - "name": "radius", - "type": "integer", - "x-example": 8000 + "name": "country", + "type": "string" }, { - "description": "Maximum restaurants to return, 1-50 (default 20)", + "description": "State/region code filter", "in": "query", - "name": "max_results", - "type": "integer", - "x-example": 20 + "name": "state", + "type": "string" }, { - "description": "RBI market to search, one of `US`, `CA` (default `US`)", + "description": "Exact city filter", "in": "query", - "name": "market", - "type": "string", - "x-example": "US" + "name": "city", + "type": "string" }, { - "description": "Include each restaurant's live per-channel open/closed status (default false)", + "description": "Crawl-provenance market filter. One of: us, ca", + "enum": [ + "us", + "ca" + ], "in": "query", - "name": "include_availability", - "type": "boolean", - "x-example": false + "name": "market", + "type": "string" }, { - "description": "Restrict to restaurants that actually deliver to this coordinate, a genuine delivery-zone match distinct from the has_delivery flag (default false)", + "description": "Amenity code filter, e.g. DT", "in": "query", - "name": "delivery_only", - "type": "boolean", - "x-example": false + "name": "amenity", + "type": "string" } ], "produces": [ @@ -303058,7 +378948,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/burgerking.locationsResponseDoc" + "$ref": "#/definitions/datasets.starbucksStoresFacetResponseDoc" } }, "400": { @@ -303067,20 +378957,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -303091,34 +378975,27 @@ "ApiKeyAuth": [] } ], - "summary": "Find Burger King restaurants near a location", + "summary": "Facet stored Starbucks stores", "tags": [ - "Burger King" + "Datasets" ] } }, - "/burgerking/menu": { + "/datasets/starbucks-stores/items/{store_number}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one restaurant's full menu grouped into categories (e.g. \"Breakfast Sandwiches\", \"Flame Grilled Burgers\"). Every entry is an item, a combo, or a picker (a variant-choice product such as \"choose your drink size\") and carries a delivery and pickup price -- these genuinely differ -- plus calories, detailed nutrition facts and flagged allergens when Burger King publishes them, and an image. Prices and availability reflect this specific restaurant, not a national default.", - "operationId": "burgerking-menu", + "description": "Returns one stored Starbucks store by its store number (e.g. `101-54`) from dataset id `starbucks-stores`. `country` is the store's true country while `market` is crawl provenance. Hours (`schedule`) and `amenities` may be empty for stores outside the US, Canada, Europe, and the Gulf; an empty schedule means \"not published for this market\", not \"closed\".", + "operationId": "datasets-starbucks-stores-item", "parameters": [ { - "description": "Burger King's numeric store id, from /burgerking/locations", - "in": "query", - "name": "store_id", + "description": "Starbucks store number, e.g. 101-54", + "in": "path", + "name": "store_number", "required": true, "type": "string", - "x-example": "17871" - }, - { - "description": "RBI market the store belongs to, one of `US`, `CA` (default `US`)", - "in": "query", - "name": "market", - "type": "string", - "x-example": "US" + "x-example": "101-54" } ], "produces": [ @@ -303128,7 +379005,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/burgerking.menuResponseDoc" + "$ref": "#/definitions/datasets.starbucksStoreResponseDoc" } }, "400": { @@ -303149,8 +379026,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -303161,42 +379038,67 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Burger King restaurant's full priced menu", + "summary": "Get a stored Starbucks store", "tags": [ - "Burger King" + "Datasets" ] } }, - "/burgerking/product": { + "/datasets/starbucks-stores/nearby": { "get": { "consumes": [ "application/json" ], - "description": "Returns one menu entry's full detail (name, description, price, image, nutrition, allergens) plus its customization tree, when it has one -- a combo's courses and their swappable entree/side/drink choices, a picker's size/variant choices, or a customizable item's ingredient toggle groups (e.g. \"Bacon\": no/regular/extra) and their price deltas. Options recurses through the full upstream structure, so a combo's entree choice carries its own ingredient toggles too, not just the combo's own top-level courses. A plain, non-customizable item returns an empty options list.", - "operationId": "burgerking-product", + "description": "Returns stored Starbucks stores within a radius of a point, nearest first, from dataset id `starbucks-stores`. lat, lon, and radius_m are required. Unlike the live /starbucks/stores endpoint (which caps at 50 near a point), this queries the full grid-tiled directory, so it can return every store in the radius. Billing: this endpoint costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-starbucks-stores-nearby", "parameters": [ { - "description": "Burger King's numeric store id, from /burgerking/locations", + "description": "Center latitude, from -90 through 90", "in": "query", - "name": "store_id", + "name": "lat", "required": true, - "type": "string", - "x-example": "17871" + "type": "number", + "x-example": 40.7484257 }, { - "description": "The item, combo, or picker id, from /burgerking/menu", + "description": "Center longitude, from -180 through 180", "in": "query", - "name": "item_id", + "name": "lon", "required": true, - "type": "string", - "x-example": "item_26" + "type": "number", + "x-example": -73.98567 }, { - "description": "RBI market the store belongs to, one of `US`, `CA` (default `US`)", + "description": "Search radius in meters, 1 through 50000", "in": "query", - "name": "market", - "type": "string", - "x-example": "US" + "name": "radius_m", + "required": true, + "type": "integer", + "x-example": 5000 + }, + { + "description": "ISO-3166-1 alpha-2 country filter", + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Amenity code filter, e.g. DT", + "in": "query", + "name": "amenity", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -303206,7 +379108,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/burgerking.productResponseDoc" + "$ref": "#/definitions/datasets.starbucksStoresSearchResponseDoc" } }, "400": { @@ -303215,20 +379117,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -303239,24 +379135,99 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Burger King item, combo, or picker's full detail and customization tree", + "summary": "Find nearby stored Starbucks stores", "tags": [ - "Burger King" + "Datasets" ] } }, - "/businessinsider/article": { + "/datasets/starbucks-stores/search": { "get": { - "description": "Returns a Business Insider article by canonical `url`: title, description, publication and update times, section, authors, image and the body `paragraphs`. Subscriber-only or blocked content returns an error instead of partial text.", - "operationId": "businessinsider-article", + "consumes": [ + "application/json" + ], + "description": "Searches the worldwide Starbucks store directory (dataset id `starbucks-stores`), built by grid-tiling the store locator around its 50-result cap. Each store has its store number, name, phone, full address, coordinates, weekly hours, amenity codes, and pick-up options. Store discovery is global, but hours, amenities, and phone numbers are populated per market and are largely absent outside the US, Canada, Europe, and the Gulf; an empty schedule means \"not published for this market\", not \"closed\". `country` is the store's true country while `market` is crawl provenance (the US host geocodes worldwide). Supports full-text `q`, `country`/`state`/`city`/`market`/`amenity` filters, `lat`/`lon`/`radius_m` radius filtering, and `sort` (relevance, distance_asc). Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-starbucks-stores-search", "parameters": [ { - "description": "Canonical Business Insider article URL", + "description": "Full-text search over store name, city, and address, max 256 characters", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.businessinsider.com/markets/example-2026-09-21" + "name": "q", + "type": "string" + }, + { + "description": "ISO-3166-1 alpha-2 country filter, e.g. US, GB, JP", + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "State/region code filter, e.g. WA", + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "Exact city filter", + "in": "query", + "name": "city", + "type": "string" + }, + { + "description": "Crawl-provenance market filter. One of: us, ca", + "enum": [ + "us", + "ca" + ], + "in": "query", + "name": "market", + "type": "string" + }, + { + "description": "Amenity code filter, e.g. DT (Drive-Thru), XO (Mobile Order and Pay)", + "in": "query", + "name": "amenity", + "type": "string" + }, + { + "description": "Latitude for radius filtering or distance sort, requires lon", + "in": "query", + "name": "lat", + "type": "number" + }, + { + "description": "Longitude for radius filtering or distance sort, requires lat", + "in": "query", + "name": "lon", + "type": "number" + }, + { + "description": "Radius in meters, 1 through 50000; requires lat and lon", + "in": "query", + "name": "radius_m", + "type": "integer" + }, + { + "description": "Sort enum: relevance, distance_asc", + "enum": [ + "relevance", + "distance_asc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -303266,7 +379237,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/datasets.starbucksStoresSearchResponseDoc" } }, "400": { @@ -303275,14 +379246,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -303293,30 +379264,59 @@ "ApiKeyAuth": [] } ], - "summary": "Get Business Insider article content", + "summary": "Search the Starbucks store directory", "tags": [ - "Business Insider" + "Datasets" ] } }, - "/businessinsider/author": { + "/datasets/steam-achievements/facets": { "get": { - "description": "Returns a Business Insider author's profile, identified by `slug` (the last segment of the author's page address) or a canonical `https://www.businessinsider.com/author/` `url`; exactly one is required. The response has name, job title, bio, image, `social_accounts` and one page of recent articles with title, URL and summary. Accounts the author does not list are simply absent.", - "operationId": "businessinsider-author", + "consumes": [ + "application/json" + ], + "description": "Returns up to 50 Steam achievement app-id buckets ordered by count, using the same app_id filter as `datasets_steam_achievements_search`. Page and page_size do not change the aggregation.", + "operationId": "datasets-steam-achievements-facets", "parameters": [ { - "description": "Author slug", + "description": "Facet field", + "enum": [ + "app_id" + ], "in": "query", - "name": "slug", + "name": "facet", + "required": true, "type": "string", - "x-example": "peter-kafka" + "x-example": "app_id" }, { - "description": "Canonical businessinsider.com/author/ URL; alternative to slug", + "description": "Exact Steam app id", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.businessinsider.com/author/peter-kafka" + "name": "app_id", + "type": "string" + }, + { + "description": "Validated search sort; bucket order stays count-desc, and time-series date_desc keeps its search history scope", + "enum": [ + "percent_desc", + "percent_asc", + "rank_asc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Result page, 1-based", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, default 20 and max 100", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -303326,7 +379326,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.businessInsiderAuthorResponseDoc" + "$ref": "#/definitions/datasets.datasetFacetResponseDoc" } }, "400": { @@ -303335,14 +379335,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -303353,35 +379353,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Business Insider author profile", + "summary": "Discover Steam achievement app ids", "tags": [ - "Business Insider" + "Datasets" ] } }, - "/businessinsider/headlines": { + "/datasets/steam-achievements/items/{app_id}/{name}": { "get": { - "description": "Returns fresh headlines for one Business Insider section. `section` is required and is one of `business`, `markets`, `technology`, `politics`, `strategy`, `finance`, `science`, `lifestyle` or `reviews`. Each item has a title and URL, and may also carry a summary, author, publication time and image.", - "operationId": "businessinsider-headlines", + "consumes": [ + "application/json" + ], + "description": "Retrieves one global achievement record by `appid` and `name` from `datasets_steam_achievements_search`.", + "operationId": "datasets-steam-achievements-item", "parameters": [ { - "description": "Business Insider section slug", - "enum": [ - "business", - "markets", - "technology", - "politics", - "strategy", - "finance", - "science", - "lifestyle", - "reviews" - ], - "in": "query", - "name": "section", + "description": "Steam app id", + "in": "path", + "name": "app_id", "required": true, - "type": "string", - "x-example": "business" + "type": "string" + }, + { + "description": "Achievement API name", + "in": "path", + "name": "name", + "required": true, + "type": "string" } ], "produces": [ @@ -303391,7 +379389,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/datasets.steamAchievementDatasetItemResponseDoc" } }, "400": { @@ -303400,40 +379398,20 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Business Insider section headlines", - "tags": [ - "Business Insider" - ] - } - }, - "/businessinsider/news": { - "get": { - "description": "Returns the latest Business Insider top stories, with no input needed. Each item has a title and canonical URL, and may also carry a summary, author, publication time and image.", - "operationId": "businessinsider-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "429": { + "description": "Too Many Requests", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -303444,50 +379422,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get Business Insider top stories", + "summary": "Get one stored Steam achievement", "tags": [ - "Business Insider" + "Datasets" ] } }, - "/businessinsider/sections": { + "/datasets/steam-achievements/search": { "get": { - "description": "Lists the Business Insider editorial sections accepted by `businessinsider-headlines`, such as `business`, `markets` and `technology`. Each entry has a stable `slug`, a display `name` and the section's page `url`.", - "operationId": "businessinsider-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Business Insider sections", - "tags": [ - "Business Insider" - ] - } - }, - "/businessstandard/article": { - "get": { - "description": "Returns public Business Standard article metadata and body paragraphs from a canonical article URL. A story Business Standard marks premium (subscriber-only) returns a permission error instead of a body.", - "operationId": "businessstandard-article", + "description": "Searches per-game global achievement unlock percentages (one document per appid × achievement). Pass `app_id` to list a game's achievements. Sort enum: `percent_desc` (most-unlocked first, default), `percent_asc` (rarest first), `rank_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-steam-achievements-search", "parameters": [ { - "description": "Canonical Business Standard article URL", + "description": "Exact Steam app id filter", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.business-standard.com/companies/news/example-article-slug-126092401169_1.html" + "name": "app_id", + "type": "string" + }, + { + "description": "Sort enum: percent_desc, percent_asc, rank_asc", + "enum": [ + "percent_desc", + "percent_asc", + "rank_asc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -303497,7 +379473,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/datasets.steamAchievementsSearchResponseDoc" } }, "400": { @@ -303506,20 +379482,14 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -303530,24 +379500,91 @@ "ApiKeyAuth": [] } ], - "summary": "Get Business Standard article content", + "summary": "Search steam-achievements dataset", "tags": [ - "Business Standard" + "Datasets" ] } }, - "/businessstandard/author": { + "/datasets/steam-charts/facets": { "get": { - "description": "Returns a Business Standard author's profile from `url`, a canonical `https://www.business-standard.com/author/` address: name, designation, biography, image, and Twitter, Facebook, LinkedIn and YouTube links where listed, plus about 20 recent stories. Stories carry a title, URL and optionally summary, date and a `premium` flag for subscriber-only text. An unknown author returns `404`.", - "operationId": "businessstandard-author", + "consumes": [ + "application/json" + ], + "description": "Returns up to 50 Steam chart-facet buckets ordered by count, using the same filters as `datasets_steam_charts_search`. Page and page_size do not change the aggregation. A snapshot_date facet without date spans all history; other facets use the search date scope, including the latest-snapshot default when applicable and full history for app_id or date_desc sort.", + "operationId": "datasets-steam-charts-facets", "parameters": [ { - "description": "Canonical Business Standard author URL", + "description": "Facet field", + "enum": [ + "chart", + "country", + "app_id", + "snapshot_date" + ], "in": "query", - "name": "url", + "name": "facet", "required": true, "type": "string", - "x-example": "https://www.business-standard.com/author/sharleen-dsouza" + "x-example": "chart" + }, + { + "description": "Full-text app name query", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Chart enum: most_played, concurrent, top_sellers", + "enum": [ + "most_played", + "concurrent", + "top_sellers" + ], + "in": "query", + "name": "chart", + "type": "string" + }, + { + "description": "Storefront country for top sellers", + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Exact Steam app id", + "in": "query", + "name": "app_id", + "type": "string" + }, + { + "description": "Snapshot date, yyyy-MM-dd", + "in": "query", + "name": "date", + "type": "string" + }, + { + "description": "Validated search sort; bucket order stays count-desc, and time-series date_desc keeps its search history scope", + "enum": [ + "rank", + "rank_desc", + "date_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Result page, 1-based", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, default 20 and max 100", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -303557,7 +379594,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.businessstandardAuthorResponseDoc" + "$ref": "#/definitions/datasets.datasetFacetResponseDoc" } }, "400": { @@ -303566,14 +379603,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -303584,51 +379621,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Business Standard author profile", + "summary": "Discover values in the Steam charts dataset", "tags": [ - "Business Standard" + "Datasets" ] } }, - "/businessstandard/headlines": { + "/datasets/steam-charts/items/{chart_uid}": { "get": { - "description": "Returns recent headlines for one Business Standard section: up to 35 stories, or 100 for `latest-news`. `section` is required and takes one of 25 slugs such as `companies`, `markets`, `cricket` or `todays-paper`. Some stories are premium (subscriber-only), and requesting one from the article endpoint returns `403`.", - "operationId": "businessstandard-headlines", + "consumes": [ + "application/json" + ], + "description": "Retrieves one Steam chart snapshot row by `chart_uid` from `datasets_steam_charts_search`.", + "operationId": "datasets-steam-charts-item", "parameters": [ { - "description": "Business Standard section slug", - "enum": [ - "latest-news", - "companies", - "economy", - "finance", - "opinion", - "markets", - "technology", - "specials", - "budget", - "elections", - "politics", - "education", - "health", - "sports", - "entertainment", - "lifestyle", - "india-news", - "industry", - "cricket", - "book", - "world-news", - "external-affairs-defence-security", - "immigration", - "blueprint-defence-magazine", - "todays-paper" - ], - "in": "query", - "name": "section", + "description": "Exact chart_uid from a search result", + "in": "path", + "name": "chart_uid", "required": true, - "type": "string", - "x-example": "latest-news" + "type": "string" } ], "produces": [ @@ -303638,7 +379650,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/datasets.steamChartDatasetItemResponseDoc" } }, "400": { @@ -303647,37 +379659,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Business Standard section headlines", - "tags": [ - "Business Standard" - ] - } - }, - "/businessstandard/news": { - "get": { - "description": "Returns Business Standard top stories from its home page, with no input needed: title, canonical URL and, where present, publication time, summary, author and image. Some listed stories are premium (subscriber-only), and requesting one from the article endpoint returns `403`.", - "operationId": "businessstandard-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -303685,8 +379671,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -303697,53 +379683,77 @@ "ApiKeyAuth": [] } ], - "summary": "Get Business Standard top stories", - "tags": [ - "Business Standard" - ] - } - }, - "/businessstandard/sections": { - "get": { - "description": "Lists the 25 Business Standard section slugs accepted by `businessstandard-headlines`, from `latest-news`, `companies` and `markets` to `cricket`, `immigration` and `todays-paper`. Each entry has a `slug`, a display `name` and the section's page `url`.", - "operationId": "businessstandard-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Business Standard sections", + "summary": "Get one stored Steam chart row", "tags": [ - "Business Standard" + "Datasets" ] } }, - "/capterra/product": { + "/datasets/steam-charts/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Capterra product profile: name, description, category, and aggregate rating.", - "operationId": "capterra-product", + "description": "Searches daily snapshots of Steam's player-count and sales charts, stored in a search index (one document per chart × country × snapshot × rank) so history accumulates. Charts: `most_played` (weekly peak concurrent), `concurrent` (live concurrent players), `top_sellers` (weekly sales; country-specific). With no `date` the latest snapshot is returned (today's chart); pair `app_id` with `sort=date_desc` for an app's rank/players over time. Country is `global` for the player-count charts or an ISO code (e.g. `us`) for `top_sellers`. Sort enum: `rank`, `rank_desc`, `date_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-steam-charts-search", "parameters": [ { - "description": "Capterra product id (the numeric id in a /p/{id}/{slug}/ URL)", + "description": "Full-text query over the game name, max 256 characters", "in": "query", - "name": "product_id", - "required": true, - "type": "string", - "x-example": "135003" + "name": "q", + "type": "string" + }, + { + "description": "Chart enum: most_played, concurrent, top_sellers", + "enum": [ + "most_played", + "concurrent", + "top_sellers" + ], + "in": "query", + "name": "chart", + "type": "string" + }, + { + "description": "Market filter: global (player-count charts) or an ISO country code (top_sellers), max 128 characters", + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Exact Steam app id filter; pair with sort=date_desc for rank/players history", + "in": "query", + "name": "app_id", + "type": "string" + }, + { + "description": "Snapshot date filter yyyy-MM-dd; defaults to the latest snapshot", + "in": "query", + "name": "date", + "type": "string" + }, + { + "description": "Sort enum: rank, rank_desc, date_desc", + "enum": [ + "rank", + "rank_desc", + "date_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -303753,7 +379763,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/capterra.productResponseDoc" + "$ref": "#/definitions/datasets.steamChartsSearchResponseDoc" } }, "400": { @@ -303762,8 +379772,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -303773,12 +379783,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -303786,34 +379790,222 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Capterra product", + "summary": "Search the steam-charts dataset", "tags": [ - "Capterra" + "Datasets" ] } }, - "/capterra/product/reviews": { + "/datasets/steam-games/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of Capterra reviews (author, headline, rating) plus the product's aggregate rating.", - "operationId": "capterra-reviews", + "description": "Returns terms aggregation counts for the Steam games dataset. Facet enum: `type`, `developer`, `publisher`, `genres`, `categories`, `tags`, `primary_tag`, `price_tier`, `review_tier`, `owners_bucket`, `release_year`, `run_id`, `is_free`, `coming_soon`, `platform_windows`, `platform_mac`, `platform_linux`. price_tier enum: `free`, `under5`, `5to15`, `15to30`, `30to60`, `over60`. review_tier enum: `overwhelmingly_positive`, `very_positive`, `positive`, `mostly_positive`, `mixed`, `mostly_negative`, `negative`, `very_negative`, `overwhelmingly_negative`, `insufficient`.", + "operationId": "datasets-steam-games-facets", "parameters": [ { - "description": "Capterra product id (the numeric id in a /p/{id}/{slug}/ URL)", + "description": "Facet enum: type, developer, publisher, genres, categories, tags, primary_tag, price_tier, review_tier, owners_bucket, release_year, run_id, is_free, coming_soon, platform_windows, platform_mac, platform_linux", + "enum": [ + "type", + "developer", + "publisher", + "genres", + "categories", + "tags", + "primary_tag", + "price_tier", + "review_tier", + "owners_bucket", + "release_year", + "run_id", + "is_free", + "coming_soon", + "platform_windows", + "platform_mac", + "platform_linux" + ], "in": "query", - "name": "product_id", + "name": "facet", "required": true, "type": "string", - "x-example": "135003" + "x-example": "type" }, { - "description": "Page number (default 1)", + "description": "Full-text query over name, developer and publisher, max 256 characters", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "q", + "type": "string" + }, + { + "description": "Exact storefront type filter, max 128 characters", + "in": "query", + "name": "type", + "type": "string" + }, + { + "description": "Exact developer filter, max 128 characters", + "in": "query", + "name": "developer", + "type": "string" + }, + { + "description": "Exact publisher filter, max 128 characters", + "in": "query", + "name": "publisher", + "type": "string" + }, + { + "description": "Exact genre filter, max 128 characters", + "in": "query", + "name": "genre", + "type": "string" + }, + { + "description": "Exact store category filter, max 128 characters", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Exact community-tag filter (e.g. Roguelike, Cozy), max 128 characters", + "in": "query", + "name": "tag", + "type": "string" + }, + { + "description": "Price-tier enum: free, under5, 5to15, 15to30, 30to60, over60", + "enum": [ + "free", + "under5", + "5to15", + "15to30", + "30to60", + "over60" + ], + "in": "query", + "name": "price_tier", + "type": "string" + }, + { + "description": "Review-tier enum: overwhelmingly_positive, very_positive, positive, mostly_positive, mixed, mostly_negative, negative, very_negative, overwhelmingly_negative, insufficient", + "enum": [ + "overwhelmingly_positive", + "very_positive", + "positive", + "mostly_positive", + "mixed", + "mostly_negative", + "negative", + "very_negative", + "overwhelmingly_negative", + "insufficient" + ], + "in": "query", + "name": "review_tier", + "type": "string" + }, + { + "description": "Exact SteamSpy owners-range bucket filter, max 128 characters", + "in": "query", + "name": "owners_bucket", + "type": "string" + }, + { + "description": "Exact crawl run-id filter, max 128 characters", + "in": "query", + "name": "run_id", + "type": "string" + }, + { + "description": "Filter by free-to-play flag", + "in": "query", + "name": "is_free", + "type": "boolean" + }, + { + "description": "Filter by Windows support", + "in": "query", + "name": "windows", + "type": "boolean" + }, + { + "description": "Filter by macOS support", + "in": "query", + "name": "mac", + "type": "boolean" + }, + { + "description": "Filter by Linux support", + "in": "query", + "name": "linux", + "type": "boolean" + }, + { + "description": "Filter by titles currently discounted (discount_pct > 0)", + "in": "query", + "name": "on_sale", + "type": "boolean" + }, + { + "description": "Minimum current price in cents", + "in": "query", + "name": "min_price_cents", + "type": "integer" + }, + { + "description": "Maximum current price in cents", + "in": "query", + "name": "max_price_cents", + "type": "integer" + }, + { + "description": "Minimum estimated owners (SteamSpy owners midpoint)", + "in": "query", + "name": "min_owners", + "type": "integer" + }, + { + "description": "Minimum positive review count", + "in": "query", + "name": "min_positive", + "type": "integer" + }, + { + "description": "Minimum total review count", + "in": "query", + "name": "min_total_reviews", + "type": "integer" + }, + { + "description": "Minimum positive-review ratio, 0 through 1", + "in": "query", + "name": "min_review_score", + "type": "number" + }, + { + "description": "Minimum Metacritic score, 0 through 100", + "in": "query", + "name": "min_metacritic", + "type": "integer" + }, + { + "description": "Minimum peak concurrent users yesterday", + "in": "query", + "name": "min_ccu", + "type": "integer" + }, + { + "description": "Minimum release year", + "in": "query", + "name": "min_release_year", + "type": "integer" + }, + { + "description": "Maximum release year", + "in": "query", + "name": "max_release_year", + "type": "integer" } ], "produces": [ @@ -303823,7 +380015,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/capterra.reviewsResponseDoc" + "$ref": "#/definitions/datasets.steamGamesFacetResponseDoc" } }, "400": { @@ -303832,8 +380024,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -303843,12 +380035,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -303856,27 +380042,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Capterra product reviews", + "summary": "Facet the Steam games dataset", "tags": [ - "Capterra" + "Datasets" ] } }, - "/capterra/search": { + "/datasets/steam-games/items/{appid}": { "get": { "consumes": [ "application/json" ], - "description": "Returns Capterra search-result products (id, name, url, description, rating). Note: Capterra renders a fallback product list even for queries with no genuine match, rather than a distinct empty-results page, so callers should treat low-relevance results as an upstream characteristic, not a bug.", - "operationId": "capterra-search", + "description": "Returns one Steam game from the `steam-games` dataset by numeric appid: name, developers and publishers, genres and categories, price and discount, supported platforms, positive and negative review counts, owner estimates, average and median playtime, concurrent players, Metacritic score and language count. It reads the stored dataset and does not trigger a live scrape; an appid that is not in the dataset returns `404`.", + "operationId": "datasets-steam-games-item", "parameters": [ { - "description": "Search query", - "in": "query", - "name": "q", + "description": "Steam app id", + "in": "path", + "name": "appid", "required": true, - "type": "string", - "x-example": "slack" + "type": "integer", + "x-example": 620 } ], "produces": [ @@ -303886,7 +380072,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/capterra.searchResponseDoc" + "$ref": "#/definitions/datasets.steamGameResponseDoc" } }, "400": { @@ -303895,14 +380081,20 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -303913,89 +380105,225 @@ "ApiKeyAuth": [] } ], - "summary": "Search Capterra products", + "summary": "Get a Steam game from the dataset", "tags": [ - "Capterra" + "Datasets" ] } }, - "/carmax/search": { + "/datasets/steam-games/search": { "get": { "consumes": [ "application/json" ], - "description": "Searches CarMax for used car listings, returning vehicle summaries (make, model, trim, year, mileage, colors, engine, fuel economy, pricing, store, images), available search facets with live counts, and the total matching count.", - "operationId": "carmax-search", + "description": "Searches enriched public Steam catalog records stored in a search index. price_tier enum: `free`, `under5`, `5to15`, `15to30`, `30to60`, `over60`. review_tier enum: `overwhelmingly_positive`, `very_positive`, `positive`, `mostly_positive`, `mixed`, `mostly_negative`, `negative`, `very_negative`, `overwhelmingly_negative`, `insufficient`. Sort enum: `relevance`, `owners_desc`, `reviews_desc`, `review_score_desc`, `ccu_desc`, `metacritic_desc`, `price_asc`, `price_desc`, `release_desc`, `release_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-steam-games-search", "parameters": [ { - "description": "CarMax make, e.g. honda, Toyota, BMW (case-insensitive)", + "description": "Full-text query over name, developer and publisher, max 256 characters", "in": "query", - "name": "make", - "type": "string", - "x-example": "honda" + "name": "q", + "type": "string" + }, + { + "description": "Exact storefront type filter (e.g. game, dlc, demo), max 128 characters", + "in": "query", + "name": "type", + "type": "string" + }, + { + "description": "Exact developer filter, max 128 characters", + "in": "query", + "name": "developer", + "type": "string" + }, + { + "description": "Exact publisher filter, max 128 characters", + "in": "query", + "name": "publisher", + "type": "string" + }, + { + "description": "Exact genre filter (e.g. Action, Indie), max 128 characters", + "in": "query", + "name": "genre", + "type": "string" + }, + { + "description": "Exact store category filter (e.g. Single-player), max 128 characters", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Exact community-tag filter (e.g. Roguelike, Metroidvania, Cozy), max 128 characters", + "in": "query", + "name": "tag", + "type": "string" + }, + { + "description": "Price-tier enum: free, under5, 5to15, 15to30, 30to60, over60", + "enum": [ + "free", + "under5", + "5to15", + "15to30", + "30to60", + "over60" + ], + "in": "query", + "name": "price_tier", + "type": "string" + }, + { + "description": "Review-tier enum: overwhelmingly_positive, very_positive, positive, mostly_positive, mixed, mostly_negative, negative, very_negative, overwhelmingly_negative, insufficient", + "enum": [ + "overwhelmingly_positive", + "very_positive", + "positive", + "mostly_positive", + "mixed", + "mostly_negative", + "negative", + "very_negative", + "overwhelmingly_negative", + "insufficient" + ], + "in": "query", + "name": "review_tier", + "type": "string" + }, + { + "description": "Exact SteamSpy owners-range bucket filter, max 128 characters", + "in": "query", + "name": "owners_bucket", + "type": "string" + }, + { + "description": "Exact crawl run-id filter, max 128 characters", + "in": "query", + "name": "run_id", + "type": "string" + }, + { + "description": "Filter by free-to-play flag", + "in": "query", + "name": "is_free", + "type": "boolean" + }, + { + "description": "Filter by Windows support", + "in": "query", + "name": "windows", + "type": "boolean" + }, + { + "description": "Filter by macOS support", + "in": "query", + "name": "mac", + "type": "boolean" + }, + { + "description": "Filter by Linux support", + "in": "query", + "name": "linux", + "type": "boolean" + }, + { + "description": "Filter by titles currently discounted (discount_pct > 0)", + "in": "query", + "name": "on_sale", + "type": "boolean" + }, + { + "description": "Minimum current price in cents", + "in": "query", + "name": "min_price_cents", + "type": "integer" + }, + { + "description": "Maximum current price in cents", + "in": "query", + "name": "max_price_cents", + "type": "integer" + }, + { + "description": "Minimum estimated owners (SteamSpy owners midpoint)", + "in": "query", + "name": "min_owners", + "type": "integer" }, { - "description": "CarMax model, e.g. civic (case-insensitive). Does not require make", + "description": "Minimum positive review count", "in": "query", - "name": "model", - "type": "string", - "x-example": "civic" + "name": "min_positive", + "type": "integer" }, { - "description": "5-digit US ZIP code to bias results toward CarMax's nearest store", + "description": "Minimum total review count", "in": "query", - "name": "zip", - "type": "string", - "x-example": "90210" + "name": "min_total_reviews", + "type": "integer" }, { - "description": "Sort order: bestmatch, distance-asc, price-asc, price-desc, mileage-asc, mileage-desc, year-desc, year-asc, newarrival. Defaults to bestmatch", + "description": "Minimum positive-review ratio, 0 through 1", "in": "query", - "name": "sort", - "type": "string", - "x-example": "price-asc" + "name": "min_review_score", + "type": "number" }, { - "description": "Minimum model year", + "description": "Minimum Metacritic score, 0 through 100", "in": "query", - "name": "min_year", - "type": "integer", - "x-example": 2020 + "name": "min_metacritic", + "type": "integer" }, { - "description": "Maximum model year", + "description": "Minimum peak concurrent users yesterday", "in": "query", - "name": "max_year", - "type": "integer", - "x-example": 2024 + "name": "min_ccu", + "type": "integer" }, { - "description": "Minimum price in US dollars", + "description": "Minimum release year", "in": "query", - "name": "min_price", - "type": "integer", - "x-example": 15000 + "name": "min_release_year", + "type": "integer" }, { - "description": "Maximum price in US dollars", + "description": "Maximum release year", "in": "query", - "name": "max_price", - "type": "integer", - "x-example": 30000 + "name": "max_release_year", + "type": "integer" }, { - "description": "Maximum odometer mileage", + "description": "Sort enum: relevance, owners_desc, reviews_desc, review_score_desc, ccu_desc, metacritic_desc, price_asc, price_desc, release_desc, release_asc", + "enum": [ + "relevance", + "owners_desc", + "reviews_desc", + "review_score_desc", + "ccu_desc", + "metacritic_desc", + "price_asc", + "price_desc", + "release_desc", + "release_asc" + ], "in": "query", - "name": "max_mileage", - "type": "integer", - "x-example": 60000 + "name": "sort", + "type": "string" }, { - "description": "1-indexed result page, defaults to 1. CarMax returns 48 results per page", + "description": "Page number, defaults to 1", "in": "query", "name": "page", - "type": "integer", - "x-example": 1 + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -304005,7 +380333,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/carmax.searchResponseDoc" + "$ref": "#/definitions/datasets.steamGamesSearchResponseDoc" } }, "400": { @@ -304014,14 +380342,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -304032,34 +380360,64 @@ "ApiKeyAuth": [] } ], - "summary": "Search CarMax vehicle listings", + "summary": "Search the Steam games dataset", "tags": [ - "CarMax" + "Datasets" ] } }, - "/carmax/search/suggestions": { + "/datasets/steam-news/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns autocomplete suggestions for a partial search term (make/model/trim), typo-tolerant by default.", - "operationId": "carmax-search-suggestions", + "description": "Returns up to 50 Steam news app-id buckets ordered by count, using the same full-text query and app_id filter as `datasets_steam_news_search`. Page and page_size do not change the aggregation.", + "operationId": "datasets-steam-news-facets", "parameters": [ { - "description": "Free-text partial search term to get autocomplete suggestions for", + "description": "Facet field", + "enum": [ + "app_id" + ], "in": "query", - "name": "search", + "name": "facet", "required": true, "type": "string", - "x-example": "civ" + "x-example": "app_id" }, { - "description": "Disable fuzzy/typo-tolerant matching -- require an exact prefix match. Defaults to false", + "description": "Full-text news-title/body query", "in": "query", - "name": "exact_match", - "type": "boolean", - "x-example": false + "name": "q", + "type": "string" + }, + { + "description": "Exact Steam app id", + "in": "query", + "name": "app_id", + "type": "string" + }, + { + "description": "Validated search sort; bucket order stays count-desc, and time-series date_desc keeps its search history scope", + "enum": [ + "date_desc", + "date_asc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Result page, 1-based", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, default 20 and max 100", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -304069,7 +380427,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/carmax.searchSuggestionsResponseDoc" + "$ref": "#/definitions/datasets.datasetFacetResponseDoc" } }, "400": { @@ -304078,58 +380436,17 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get CarMax search autocomplete suggestions", - "tags": [ - "CarMax" - ] - } - }, - "/carmax/shop-by-brand": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns CarMax's full make taxonomy for browsing by brand: every make, a display image, and CarMax's own display order.", - "operationId": "carmax-shop-by-brand", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/carmax.shopByBrandResponseDoc" - } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -304137,27 +380454,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get CarMax's \"shop by brand\" make taxonomy", + "summary": "Discover Steam news app ids", "tags": [ - "CarMax" + "Datasets" ] } }, - "/carmax/store/{id}": { + "/datasets/steam-news/items/{app_id}/{gid}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a CarMax store: name, full address, phone numbers, coordinates, opening hours, and store-type flags (car buying center, microstore).", - "operationId": "carmax-store", + "description": "Retrieves one Steam announcement by the `appid` and `gid` fields returned by `datasets_steam_news_search`.", + "operationId": "datasets-steam-news-item", "parameters": [ { - "description": "CarMax store id, the numeric path segment of a /stores/{id} URL", + "description": "Steam app id", "in": "path", - "name": "id", + "name": "app_id", "required": true, - "type": "string", - "x-example": "7124" + "type": "string" + }, + { + "description": "Steam news gid", + "in": "path", + "name": "gid", + "required": true, + "type": "string" } ], "produces": [ @@ -304167,7 +380490,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/carmax.StoreResponse" + "$ref": "#/definitions/datasets.steamNewsDatasetItemResponseDoc" } }, "400": { @@ -304182,14 +380505,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -304200,40 +380523,53 @@ "ApiKeyAuth": [] } ], - "summary": "Get CarMax store (physical location) detail", + "summary": "Get one stored Steam news item", "tags": [ - "CarMax" + "Datasets" ] } }, - "/carmax/stores": { + "/datasets/steam-news/search": { "get": { "consumes": [ "application/json" ], - "description": "Searches CarMax's physical store locations by ZIP code or free-text keyword, returning stores with full address, every published phone number, opening hours, and (for a ZIP-based search) live driving distance in miles.", - "operationId": "carmax-stores", + "description": "Searches Steam news + announcements for tracked apps (one document per appid × gid; the latest items per app are kept). Filter by `app_id` for a single game's news, or full-text `q` over the title + contents. Sort enum: `date_desc` (newest first, default), `date_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-steam-news-search", "parameters": [ { - "description": "5-digit US ZIP code to search near. Triggers a live geo-distance sort. Provide this or keyword; zip takes precedence if both are given", + "description": "Full-text query over the news title + contents, max 256 characters", "in": "query", - "name": "zip", - "type": "string", - "x-example": "90210" + "name": "q", + "type": "string" }, { - "description": "Free-text match against store name or city", + "description": "Exact Steam app id filter", "in": "query", - "name": "keyword", - "type": "string", - "x-example": "Richmond" + "name": "app_id", + "type": "string" }, { - "description": "Maximum number of stores to return, defaults to 10, capped at 300", + "description": "Sort enum: date_desc, date_asc", + "enum": [ + "date_desc", + "date_asc" + ], "in": "query", - "name": "take", - "type": "integer", - "x-example": 10 + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -304243,7 +380579,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/carmax.storeSearchResponseDoc" + "$ref": "#/definitions/datasets.steamNewsSearchResponseDoc" } }, "400": { @@ -304252,14 +380588,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -304270,34 +380606,66 @@ "ApiKeyAuth": [] } ], - "summary": "Search CarMax store (physical location) locations", + "summary": "Search the steam-news dataset", "tags": [ - "CarMax" + "Datasets" ] } }, - "/carmax/vehicle/{stock_number}": { + "/datasets/steam-playercounts/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns a CarMax vehicle listing: full vehicle spec (make, model, trim, mileage, colors, engine, transmission, fuel economy, pricing), equipment features, labeled specifications, warranty coverage, accident/owner history, and CarMax's return guarantee terms.", - "operationId": "carmax-vehicle", + "description": "Returns up to 50 Steam player-count facet buckets ordered by count, using the same filters as `datasets_steam_playercounts_search`. The search and snapshot_date facet cover stored history by default; supplying date scopes counts to that day. Page and page_size do not change the aggregation.", + "operationId": "datasets-steam-playercounts-facets", "parameters": [ { - "description": "CarMax stock number, the numeric path segment of a /car/{stock_number} URL", - "in": "path", - "name": "stock_number", + "description": "Facet field", + "enum": [ + "app_id", + "snapshot_date" + ], + "in": "query", + "name": "facet", "required": true, "type": "string", - "x-example": "28187774" + "x-example": "snapshot_date" }, { - "description": "Optional CarMax store id for pricing/transfer-fee display context. Defaults to a fixed CarMax store when omitted", + "description": "Exact Steam app id", "in": "query", - "name": "store_id", - "type": "string", - "x-example": "7124" + "name": "app_id", + "type": "string" + }, + { + "description": "Snapshot date, yyyy-MM-dd", + "in": "query", + "name": "date", + "type": "string" + }, + { + "description": "Validated search sort; bucket order stays count-desc, and time-series date_desc keeps its search history scope", + "enum": [ + "date_desc", + "date_asc", + "players_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Result page, 1-based", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, default 20 and max 100", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -304307,7 +380675,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/carmax.VehicleResponse" + "$ref": "#/definitions/datasets.datasetFacetResponseDoc" } }, "400": { @@ -304316,8 +380684,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -304327,12 +380695,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -304340,35 +380702,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get CarMax vehicle listing detail", + "summary": "Discover Steam player-count app and date values", "tags": [ - "CarMax" + "Datasets" ] } }, - "/carmax/vehicle/{stock_number}/recommendations": { + "/datasets/steam-playercounts/items/{app_id}/{snapshot_date}": { "get": { "consumes": [ "application/json" ], - "description": "Returns CarMax's own similar-vehicle recommendations for a listing: stock number, description, display mileage/price, store location, and image, for vehicles CarMax considers comparable. An empty list is a normal result, not an error.", - "operationId": "carmax-vehicle-recommendations", + "description": "Retrieves one daily concurrent-player record using `appid` and `snapshot_date` from `datasets_steam_playercounts_search`.", + "operationId": "datasets-steam-playercounts-item", "parameters": [ { - "description": "CarMax stock number to find similar vehicles for, the numeric path segment of a /car/{stock_number} URL", + "description": "Steam app id", "in": "path", - "name": "stock_number", + "name": "app_id", "required": true, - "type": "string", - "x-example": "28187774" + "type": "string" }, { - "description": "CarMax store id used as the recommendation's location context. See any search/vehicle/store response's store id field", - "in": "query", - "name": "store_id", + "description": "Snapshot date, yyyy-MM-dd", + "in": "path", + "name": "snapshot_date", "required": true, - "type": "string", - "x-example": "7124" + "type": "string" } ], "produces": [ @@ -304378,7 +380738,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/carmax.vehicleRecommendationsResponseDoc" + "$ref": "#/definitions/datasets.steamPlayerCountDatasetItemResponseDoc" } }, "400": { @@ -304387,14 +380747,20 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -304405,53 +380771,54 @@ "ApiKeyAuth": [] } ], - "summary": "Get CarMax \"similar vehicles\" recommendations for a listing", + "summary": "Get one stored Steam player-count point", "tags": [ - "CarMax" + "Datasets" ] } }, - "/carsdotcom/search": { + "/datasets/steam-playercounts/search": { "get": { "consumes": [ "application/json" ], - "description": "Searches Cars.com for new and used car listings, returning vehicle summaries (make, model, trim, year, mileage, exterior color, drivetrain, fuel type, pricing, seller, images) plus the total matching count.", - "operationId": "carsdotcom-search", + "description": "Searches the daily concurrent-player time series for tracked games (one document per appid × day). Pair `app_id` with `sort=date_desc` for a game's player-count history, or pass `date` for one day's snapshot. Sort enum: `date_desc` (default), `date_asc`, `players_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-steam-playercounts-search", "parameters": [ { - "description": "5-digit US ZIP code to search around", + "description": "Exact Steam app id filter", "in": "query", - "name": "zip", - "type": "string", - "x-example": "90210" + "name": "app_id", + "type": "string" }, { - "description": "Search radius in miles around zip", + "description": "Snapshot date filter yyyy-MM-dd", "in": "query", - "name": "radius", - "type": "integer", - "x-example": 50 + "name": "date", + "type": "string" }, { - "description": "Listing condition. Allowed values: new, used, cpo, all", + "description": "Sort enum: date_desc, date_asc, players_desc", "enum": [ - "new", - "used", - "cpo", - "all" + "date_desc", + "date_asc", + "players_desc" ], "in": "query", - "name": "stock_type", - "type": "string", - "x-example": "used" + "name": "sort", + "type": "string" }, { - "description": "1-indexed result page, defaults to 1. Cars.com returns 24 results per page", + "description": "Page number, defaults to 1", "in": "query", "name": "page", - "type": "integer", - "x-example": 1 + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -304461,7 +380828,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/carsdotcom.searchResponseDoc" + "$ref": "#/definitions/datasets.steamPlayerCountsSearchResponseDoc" } }, "400": { @@ -304470,14 +380837,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -304488,27 +380855,68 @@ "ApiKeyAuth": [] } ], - "summary": "Search Cars.com vehicle listings", + "summary": "Search steam-playercounts dataset", "tags": [ - "Cars.com" + "Datasets" ] } }, - "/carsdotcom/vehicle/{listing_id}": { + "/datasets/steam-prices/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Cars.com vehicle listing: full vehicle spec (make, model, trim, mileage, colors, engine, transmission, fuel economy, a key-specs table), Cars.com's own deal-fairness rating and predicted fair price, categorized equipment features, an AutoCheck-derived vehicle history report, Cars.com's own price-change history, the seller's notes, dealer detail (name, rating, address, website, phones, hours) or private-seller detail for a for-sale-by-owner listing, and certified-pre-owned/manufacturer-program detail when applicable.", - "operationId": "carsdotcom-vehicle", + "description": "Returns up to 50 Steam price-history facet buckets ordered by count, using the same filters as `datasets_steam_prices_search`. The search and snapshot_date facet cover stored history by default; supplying date scopes counts to that day. Page and page_size do not change the aggregation.", + "operationId": "datasets-steam-prices-facets", "parameters": [ { - "description": "Cars.com listing id (a UUID), the path segment of a /vehicledetail/{listing_id}/ URL", - "in": "path", - "name": "listing_id", + "description": "Facet field", + "enum": [ + "app_id", + "snapshot_date" + ], + "in": "query", + "name": "facet", "required": true, "type": "string", - "x-example": "a6ea5d6f-0395-4f9d-94d5-724c4d7414de" + "x-example": "snapshot_date" + }, + { + "description": "Exact Steam app id", + "in": "query", + "name": "app_id", + "type": "string" + }, + { + "description": "Snapshot date, yyyy-MM-dd", + "in": "query", + "name": "date", + "type": "string" + }, + { + "description": "Validated search sort; bucket order stays count-desc, and time-series date_desc keeps its search history scope", + "enum": [ + "date_desc", + "date_asc", + "price_asc", + "price_desc", + "discount_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Result page, 1-based", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, default 20 and max 100", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -304518,7 +380926,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/carsdotcom.VehicleResponse" + "$ref": "#/definitions/datasets.datasetFacetResponseDoc" } }, "400": { @@ -304527,8 +380935,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -304538,12 +380946,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -304551,24 +380953,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Cars.com vehicle listing detail", + "summary": "Discover Steam price snapshot values", "tags": [ - "Cars.com" + "Datasets" ] } }, - "/cbc/article": { + "/datasets/steam-prices/items/{app_id}/{snapshot_date}": { "get": { - "description": "Returns public CBC News or CBC Sports story metadata and body paragraphs from a canonical story URL. Live-updates pages are not supported.", - "operationId": "cbc-article", + "consumes": [ + "application/json" + ], + "description": "Retrieves one daily price row using `appid` and `snapshot_date` from `datasets_steam_prices_search`.", + "operationId": "datasets-steam-prices-item", "parameters": [ { - "description": "Canonical CBC News or CBC Sports story URL", - "in": "query", - "name": "url", + "description": "Steam app id", + "in": "path", + "name": "app_id", "required": true, - "type": "string", - "x-example": "https://www.cbc.ca/news/politics/does-calling-an-early-election-work-9.7355667" + "type": "string" + }, + { + "description": "Snapshot date, yyyy-MM-dd", + "in": "path", + "name": "snapshot_date", + "required": true, + "type": "string" } ], "produces": [ @@ -304578,7 +380989,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/datasets.steamPriceDatasetItemResponseDoc" } }, "400": { @@ -304593,8 +381004,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -304605,30 +381022,56 @@ "ApiKeyAuth": [] } ], - "summary": "Get CBC News article content", + "summary": "Get one stored Steam price record", "tags": [ - "CBC News" + "Datasets" ] } }, - "/cbc/author": { + "/datasets/steam-prices/search": { "get": { - "description": "Returns a CBC journalist's profile, identified by `slug` (ending in CBC's author id, such as `darren-major-1.4462710`) or a `https://www.cbc.ca/author/` `url`; exactly one is required and an unknown author returns 404. The response has name, title, biography, photo, profile links and usually 10 latest articles, with `has_more_articles` showing whether older ones exist.", - "operationId": "cbc-author", + "consumes": [ + "application/json" + ], + "description": "Searches the daily price time series for priced games (one document per appid × day; integer cents). Pair `app_id` with `sort=date_desc` for a game's price history, or pass `date` for one day's snapshot. Sort enum: `date_desc` (default), `date_asc`, `price_asc`, `price_desc`, `discount_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-steam-prices-search", "parameters": [ { - "description": "Author slug, e.g. darren-major-1.4462710", + "description": "Exact Steam app id filter", "in": "query", - "name": "slug", - "type": "string", - "x-example": "darren-major-1.4462710" + "name": "app_id", + "type": "string" }, { - "description": "Canonical https://www.cbc.ca/author/ URL; alternative to slug", + "description": "Snapshot date filter yyyy-MM-dd", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.cbc.ca/author/darren-major-1.4462710" + "name": "date", + "type": "string" + }, + { + "description": "Sort enum: date_desc, date_asc, price_asc, price_desc, discount_desc", + "enum": [ + "date_desc", + "date_asc", + "price_asc", + "price_desc", + "discount_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -304638,7 +381081,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.cbcAuthorResponseDoc" + "$ref": "#/definitions/datasets.steamPricesSearchResponseDoc" } }, "400": { @@ -304647,14 +381090,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -304665,61 +381108,79 @@ "ApiKeyAuth": [] } ], - "summary": "Get a CBC journalist profile", + "summary": "Search the steam-prices dataset", "tags": [ - "CBC News" + "Datasets" ] } }, - "/cbc/headlines": { + "/datasets/steam-reviews/facets": { "get": { - "description": "Returns fresh CBC News or CBC Sports headlines from one public section RSS feed. Video, radio, and live-updates links are omitted.", - "operationId": "cbc-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns up to 50 Steam review facet buckets ordered by count, using the same filters as `datasets_steam_reviews_search`. Page and page_size do not change the aggregation.", + "operationId": "datasets-steam-reviews-facets", "parameters": [ { - "description": "CBC section slug", + "description": "Facet field", "enum": [ - "world", - "canada", - "politics", - "business", - "health", - "arts", - "technology", - "indigenous", - "british-columbia", - "calgary", - "edmonton", - "hamilton", - "kamloops", - "kitchener-waterloo", - "london", - "manitoba", - "montreal", - "new-brunswick", - "newfoundland-labrador", - "north", - "nova-scotia", - "ottawa", - "prince-edward-island", - "saskatchewan", - "saskatoon", - "sudbury", - "thunder-bay", - "toronto", - "windsor", - "sports", - "sports-golf", - "sports-nhl", - "sports-olympics", - "sports-soccer", - "sports-tennis" + "app_id", + "language", + "voted_up" ], "in": "query", - "name": "section", + "name": "facet", "required": true, "type": "string", - "x-example": "world" + "x-example": "language" + }, + { + "description": "Full-text review query", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Exact Steam app id", + "in": "query", + "name": "app_id", + "type": "string" + }, + { + "description": "Review language", + "in": "query", + "name": "language", + "type": "string" + }, + { + "description": "Recommendation filter", + "in": "query", + "name": "voted_up", + "type": "boolean" + }, + { + "description": "Validated search sort; bucket order stays count-desc, and time-series date_desc keeps its search history scope", + "enum": [ + "votes_desc", + "weighted_desc", + "date_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Result page, 1-based", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, default 20 and max 100", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -304729,7 +381190,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/datasets.datasetFacetResponseDoc" } }, "400": { @@ -304738,46 +381199,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get CBC News section headlines", - "tags": [ - "CBC News" - ] - } - }, - "/cbc/news": { - "get": { - "description": "Returns fresh CBC News top stories with no input needed: title, canonical story URL, publication time, byline when given and lead image. Only stories the article endpoint accepts are returned, so video player pages, CBC Radio, Music and Books links and live-updates pages are omitted.", - "operationId": "cbc-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -304788,50 +381217,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get CBC News top stories", + "summary": "Discover Steam review values", "tags": [ - "CBC News" + "Datasets" ] } }, - "/cbc/sections": { + "/datasets/steam-reviews/items/{app_id}/{recommendation_id}": { "get": { - "description": "Lists the 35 CBC News sections that `cbc-headlines` accepts: 8 national desks such as `politics` and `world`, 21 regional newsrooms such as `toronto` and `nova-scotia`, and 6 CBC Sports feeds such as `sports-nhl`. Each has a `slug`, a display `name` and the feed `url`. Top stories come from `cbc-news`, not a section.", - "operationId": "cbc-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get CBC News sections", - "tags": [ - "CBC News" - ] - } - }, - "/cbr/article": { - "get": { - "description": "Returns a CBR article by `url`, a canonical `cbr.com` address of the form `//`: title, description, publication and update times, section, authors, image and the body `paragraphs`. Section, video, author and category pages are rejected as invalid. `paywalled` is `true` only if the page declares the article not free, and then `paragraphs` may be a teaser.", - "operationId": "cbr-article", + "description": "Retrieves one stored recommendation review using `appid` and `recommendation_id` from `datasets_steam_reviews_search`.", + "operationId": "datasets-steam-reviews-item", "parameters": [ { - "description": "Canonical CBR article URL", - "in": "query", - "name": "url", + "description": "Steam app id", + "in": "path", + "name": "app_id", "required": true, - "type": "string", - "x-example": "https://www.cbr.com/star-trek-2-release-date-confirmed-cover-reveal/" + "type": "string" + }, + { + "description": "Steam recommendation id", + "in": "path", + "name": "recommendation_id", + "required": true, + "type": "string" } ], "produces": [ @@ -304841,7 +381253,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/datasets.steamReviewDatasetItemResponseDoc" } }, "400": { @@ -304862,8 +381274,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -304874,24 +381286,66 @@ "ApiKeyAuth": [] } ], - "summary": "Get CBR article content", + "summary": "Get one stored Steam review", "tags": [ - "CBR" + "Datasets" ] } }, - "/cbr/author": { + "/datasets/steam-reviews/search": { "get": { - "description": "Returns a CBR author profile from `url`, a canonical `https://www.cbr.com/author//` address; paginated `/page/N/` URLs are rejected. The response has name, `title`, biography, image, `social_links` and about 20 items from the profile's Latest module, with no older pages available.", - "operationId": "cbr-author", + "consumes": [ + "application/json" + ], + "description": "Searches the stored Steam review corpus (the most-helpful reviews per game; one document per appid × recommendation). Full-text `q` over the review body, filter by `app_id`, `language`, or `voted_up` (positive/negative). Sort enum: `votes_desc` (most-helpful first, default), `weighted_desc`, `date_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-steam-reviews-search", "parameters": [ { - "description": "Canonical CBR author URL", + "description": "Full-text query over the review body, max 256 characters", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.cbr.com/author/john-dodge/" + "name": "q", + "type": "string" + }, + { + "description": "Exact Steam app id filter", + "in": "query", + "name": "app_id", + "type": "string" + }, + { + "description": "Review language filter (e.g. english, schinese)", + "in": "query", + "name": "language", + "type": "string" + }, + { + "description": "Recommendation filter: true (positive) or false (negative)", + "in": "query", + "name": "voted_up", + "type": "string" + }, + { + "description": "Sort enum: votes_desc, weighted_desc, date_desc", + "enum": [ + "votes_desc", + "weighted_desc", + "date_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -304901,7 +381355,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.cbrAuthorResponseDoc" + "$ref": "#/definitions/datasets.steamReviewsSearchResponseDoc" } }, "400": { @@ -304910,14 +381364,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -304928,54 +381382,83 @@ "ApiKeyAuth": [] } ], - "summary": "Get a CBR author profile", + "summary": "Search the steam-reviews dataset", "tags": [ - "CBR" + "Datasets" ] } }, - "/cbr/headlines": { + "/datasets/substack/facets": { "get": { - "description": "Returns fresh headlines from one public CBR RSS section. Video pages, if a section ever returns them, have type video and are not readable through the article endpoint.", - "operationId": "cbr-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns up to 50 count-sorted buckets for a stored-field facet over the Substack dataset, honoring the same filters as `datasets_substack_search`. Facets cover the indexed discovery corpus, which is not a complete directory.", + "operationId": "datasets-substack-facets", "parameters": [ { - "description": "CBR RSS section slug", + "description": "Facet field", "enum": [ - "movies", - "movie-features", - "news-movies", - "reviews-movies", - "movie-lists", - "tv", - "tv-features", - "news-tv", - "reviews-tv", - "tv-lists", - "comics", - "comics-features", - "comics/news", - "comics/reviews", - "comics-lists", - "anime", - "anime-features", - "anime-news", - "anime/reviews-anime", - "anime-lists", - "games", - "game-features", - "game-news", - "games/reviews-games", - "game-guides", - "game-lists", - "lists", - "cbr-exclusives" + "kind", + "language" ], "in": "query", - "name": "section", + "name": "facet", "required": true, "type": "string", - "x-example": "movies" + "x-example": "kind" + }, + { + "description": "Full-text query over profile/publication fields, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Record kind", + "enum": [ + "user", + "publication" + ], + "in": "query", + "name": "kind", + "type": "string" + }, + { + "description": "Exact public profile handle or publication host, max 253 characters", + "in": "query", + "name": "identifier", + "type": "string" + }, + { + "description": "Exact publication language", + "in": "query", + "name": "language", + "type": "string" + }, + { + "description": "Accepted for parity with search: relevance, name_asc, hydrated_at_desc, hydrated_at_asc", + "enum": [ + "relevance", + "name_asc", + "hydrated_at_desc", + "hydrated_at_asc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Accepted for contract parity; facets aggregate all matching records", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Accepted for contract parity; facets aggregate all matching records", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -304985,7 +381468,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/datasets.substackDatasetFacetResponseDoc" } }, "400": { @@ -305000,46 +381483,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get CBR section headlines", - "tags": [ - "CBR" - ] - } - }, - "/cbr/news": { - "get": { - "description": "Returns about 10 of the latest CBR stories from the site's main feed, with no input needed. Each has a title, canonical URL, summary, publication time, author names (co-authors joined with a comma) and lead image.", - "operationId": "cbr-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -305050,56 +381495,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get CBR top stories", + "summary": "Discover Substack dataset values", "tags": [ - "CBR" + "Datasets" ] } }, - "/cbr/sections": { + "/datasets/substack/items/{uid}": { "get": { - "description": "Lists the 28 CBR section slugs accepted by `cbr-headlines`, grouped by movies, TV, comics, anime and games with news, reviews, features and lists variants, plus `lists` and `cbr-exclusives`. Each entry has a `slug` (for example `news-movies` or `comics/reviews`), a display `name` and the feed `url`.", - "operationId": "cbr-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get CBR RSS sections", - "tags": [ - "CBR" - ] - } - }, - "/cbsnews/article": { - "get": { - "description": "Returns a CBS News article by `url`, a canonical HTTPS `cbsnews.com/news/` address. The response has the title, description, publication and update times, authors, section, lead image and the body `paragraphs`.", - "operationId": "cbsnews-article", + "description": "Retrieves one profile or publication snapshot that passed public identity validation when hydrated. Use the exact `uid` returned by `datasets_substack_search`. Missing, partial, and unvalidated rows return 404. Snapshots can become stale; inspect `hydrated_at`.", + "operationId": "datasets-substack-item", "parameters": [ { - "description": "Canonical CBS News article URL", - "in": "query", - "name": "url", + "description": "Dataset row UID: user: or publication:, max 320 characters", + "in": "path", + "name": "uid", "required": true, "type": "string", - "x-example": "https://www.cbsnews.com/news/example-article-slug/" + "x-example": "publication:example.substack.com" } ], "produces": [ @@ -305109,7 +381525,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/datasets.substackDatasetItemResponseDoc" } }, "400": { @@ -305124,8 +381540,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -305136,24 +381558,71 @@ "ApiKeyAuth": [] } ], - "summary": "Get CBS News article content", + "summary": "Get one stored Substack profile or publication", "tags": [ - "CBS News" + "Datasets" ] } }, - "/cbsnews/author": { + "/datasets/substack/search": { "get": { - "description": "Returns one CBS News author's public team-page profile: name, biography, coverage topics, headshot (when the page has one), social links, and their recent articles.", - "operationId": "cbsnews-author", + "consumes": [ + "application/json" + ], + "description": "Searches Substack writer profiles and publications that passed public identity validation when captured. Coverage is a growing discovery corpus, not a complete directory; snapshots are not periodically revalidated and do not trigger live lookups. Inspect hydrated_at for the last successful capture.", + "operationId": "datasets-substack-search", "parameters": [ { - "description": "Canonical cbsnews.com/team/ author URL", + "description": "Full-text query over profile/publication name, handle, bio, host, or hero text, max 256 characters", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.cbsnews.com/team/margaret-brennan/" + "name": "q", + "type": "string" + }, + { + "description": "Record kind", + "enum": [ + "user", + "publication" + ], + "in": "query", + "name": "kind", + "type": "string" + }, + { + "description": "Exact public profile handle or publication host, max 253 characters", + "in": "query", + "name": "identifier", + "type": "string" + }, + { + "description": "Exact publication language; discover values with facet=language", + "in": "query", + "name": "language", + "type": "string" + }, + { + "description": "Sort order: relevance, name_asc, hydrated_at_desc, hydrated_at_asc", + "enum": [ + "relevance", + "name_asc", + "hydrated_at_desc", + "hydrated_at_asc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Result page, 1-based", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, default 20 and max 100", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -305163,7 +381632,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.cbsNewsAuthorResponseDoc" + "$ref": "#/definitions/datasets.substackDatasetSearchResponseDoc" } }, "400": { @@ -305172,14 +381641,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -305190,36 +381659,164 @@ "ApiKeyAuth": [] } ], - "summary": "Get a CBS News author profile", + "summary": "Search the stored Substack dataset", "tags": [ - "CBS News" + "Datasets" ] } }, - "/cbsnews/headlines": { + "/datasets/techstack/facets": { "get": { - "description": "Returns fresh headlines for one CBS News section. `section` is required and is one of `main`, `us`, `world`, `politics`, `moneywatch`, `health`, `entertainment`, `science`, `technology` or `space`. Each item has a title and URL, and may also carry a summary, author, publication time and image.", - "operationId": "cbsnews-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns distribution counts over the website tech-stack index (dataset id enum value `techstack`), honoring the same filters as search — the technology / category market-share view. Facet enum: `technology`, `category`, `cms`, `ecommerce`, `cdn`, `web_server`, `server_language`, `analytics`, `tld`, `render_tier`, `seed_source`.", + "operationId": "datasets-techstack-facets", "parameters": [ { - "description": "CBS News RSS section slug", + "description": "Facet enum: technology, category, cms, ecommerce, cdn, web_server, server_language, analytics, tld, render_tier, seed_source", "enum": [ - "main", - "us", - "world", - "politics", - "moneywatch", - "health", - "entertainment", - "science", "technology", - "space" + "category", + "cms", + "ecommerce", + "cdn", + "web_server", + "server_language", + "analytics", + "tld", + "render_tier", + "seed_source" ], "in": "query", - "name": "section", + "name": "facet", "required": true, "type": "string", - "x-example": "main" + "x-example": "technology" + }, + { + "description": "Substring match on the site domain, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "collectionFormat": "csv", + "description": "Repeatable exact technology name the site MUST use (AND)", + "in": "query", + "items": { + "type": "string" + }, + "name": "technology", + "type": "array" + }, + { + "collectionFormat": "csv", + "description": "Repeatable exact technology name; the site must use at least one (OR)", + "in": "query", + "items": { + "type": "string" + }, + "name": "any_of", + "type": "array" + }, + { + "collectionFormat": "csv", + "description": "Repeatable exact technology name the site must NOT use (excludes)", + "in": "query", + "items": { + "type": "string" + }, + "name": "not", + "type": "array" + }, + { + "description": "Exact category filter, e.g. Ecommerce, CMS, Analytics", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Exact CMS filter, e.g. WordPress, Shopify, Webflow", + "in": "query", + "name": "cms", + "type": "string" + }, + { + "description": "Exact e-commerce platform filter, e.g. Shopify, WooCommerce, Magento", + "in": "query", + "name": "ecommerce", + "type": "string" + }, + { + "description": "Exact CDN / hosting filter, e.g. Cloudflare, Fastly, Vercel", + "in": "query", + "name": "cdn", + "type": "string" + }, + { + "description": "Exact web-server filter, e.g. nginx, Apache, IIS", + "in": "query", + "name": "web_server", + "type": "string" + }, + { + "description": "Exact server language / framework filter, e.g. PHP, ASP.NET, Ruby on Rails", + "in": "query", + "name": "server_language", + "type": "string" + }, + { + "description": "Exact top-level-domain filter, e.g. com, org, io", + "in": "query", + "name": "tld", + "type": "string" + }, + { + "description": "Fetch-tier filter. Enum: http, browser", + "enum": [ + "http", + "browser" + ], + "in": "query", + "name": "render_tier", + "type": "string" + }, + { + "description": "Source filter for where the domain was discovered, e.g. tranco", + "in": "query", + "name": "seed_source", + "type": "string" + }, + { + "description": "true keeps only sites with a detected CAPTCHA", + "in": "query", + "name": "has_captcha", + "type": "boolean" + }, + { + "description": "false (the common case) excludes backend CDN/DNS/cloud-vendor hostnames that rank highly but were never meant to serve a public homepage, keeping only real, human-navigable sites; true keeps only those backend hostnames", + "in": "query", + "name": "is_infrastructure", + "type": "boolean" + }, + { + "description": "true keeps only sites whose homepage was fetched", + "in": "query", + "name": "reachable", + "type": "boolean" + }, + { + "description": "Minimum number of detected technologies, 0 or greater", + "in": "query", + "name": "min_tech_count", + "type": "integer" + }, + { + "description": "Scan run id; defaults to the latest run", + "in": "query", + "name": "run_id", + "type": "string" } ], "produces": [ @@ -305229,7 +381826,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/datasets.techstackFacetResponseDoc" } }, "400": { @@ -305238,46 +381835,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get CBS News section headlines", - "tags": [ - "CBS News" - ] - } - }, - "/cbsnews/news": { - "get": { - "description": "Returns the latest CBS News top stories, with no input needed. Each item has a title and canonical URL, and may also carry a summary, author, publication time and image.", - "operationId": "cbsnews-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -305288,50 +381853,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get CBS News top stories", + "summary": "Facet the website tech-stack dataset", "tags": [ - "CBS News" + "Datasets" ] } }, - "/cbsnews/sections": { + "/datasets/techstack/items/{domain}": { "get": { - "description": "Lists the ten CBS News sections accepted by `cbsnews-headlines`: `main`, `us`, `world`, `politics`, `moneywatch`, `health`, `entertainment`, `science`, `technology` and `space`. Each has a `slug`, a display `name` and the feed `url`.", - "operationId": "cbsnews-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get CBS News sections", - "tags": [ - "CBS News" - ] - } - }, - "/cbssports/article": { - "get": { - "description": "Returns a CBS Sports article by `url`, a canonical `https://www.cbssports.com//news//` address, including `nfl/draft/news/` and fantasy football news: title, description, publication and update times, authors, lead image and body `paragraphs`. Video, scores, schedule and player pages are rejected. `paywalled` is omitted because the articles are free.", - "operationId": "cbssports-article", + "description": "Returns one site by its domain from dataset id enum value `techstack`, including every detected technology (name, categories, confidence, version, evidence) plus the CMS / e-commerce / CDN / web-server / server-language rollups. Also flags whether the domain looks like backend CDN/DNS/cloud-vendor infrastructure rather than a real, human-navigable site (see `is_infrastructure`). Returns 404 when the domain is not in the index.", + "operationId": "datasets-techstack-item", "parameters": [ { - "description": "Canonical CBS Sports article URL", - "in": "query", - "name": "url", + "description": "Site domain, e.g. shopify.com (a scheme and www. are stripped)", + "in": "path", + "name": "domain", "required": true, "type": "string", - "x-example": "https://www.cbssports.com/college-football/news/president-trump-attending-texas-tennessee/" + "x-example": "shopify.com" } ], "produces": [ @@ -305341,7 +381883,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/datasets.techstackItemResponseDoc" } }, "400": { @@ -305362,8 +381904,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -305374,30 +381916,168 @@ "ApiKeyAuth": [] } ], - "summary": "Get CBS Sports article content", + "summary": "Get a site from the website tech-stack dataset", "tags": [ - "CBS Sports" + "Datasets" ] } }, - "/cbssports/author": { + "/datasets/techstack/search": { "get": { - "description": "Returns a CBS Sports writer's profile, identified by `slug` (such as `david-cobb`) or a `cbssports.com/writers//` `url`; exactly one is required and an unknown slug returns not-found. The response has name, title, headshot, bio, X/Twitter link and about 15 recent articles with title, URL and summary. Profile fields the page lacks are omitted.", - "operationId": "cbssports-author", + "consumes": [ + "application/json" + ], + "description": "Searches the website tech-stack index (dataset id enum value `techstack`) — one record per site listing the web technologies it is built with (frameworks, CMS, e-commerce, analytics, CDNs, servers, and more), BuiltWith / Wappalyzer-style. The reverse-index filters are the point: repeat `technology` to require several at once (AND), `any_of` to match at least one (OR), and `not` to exclude — e.g. sites on `Shopify` and `Klaviyo` but not `Recharge`. Sort enum: `relevance`, `rank_asc`, `tech_count_desc`, `domain_asc`, `crawled_desc`. render_tier enum: `http`, `browser`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-techstack-search", "parameters": [ { - "description": "Writer slug, e.g. david-cobb", + "description": "Substring match on the site domain, max 256 characters", "in": "query", - "name": "slug", - "type": "string", - "x-example": "david-cobb" + "name": "q", + "type": "string" }, { - "description": "Canonical cbssports.com/writers// URL; alternative to slug", + "collectionFormat": "csv", + "description": "Repeatable exact technology name the site MUST use (AND), e.g. technology=Shopify&technology=Klaviyo", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.cbssports.com/writers/david-cobb/" + "items": { + "type": "string" + }, + "name": "technology", + "type": "array" + }, + { + "collectionFormat": "csv", + "description": "Repeatable exact technology name; the site must use at least one (OR)", + "in": "query", + "items": { + "type": "string" + }, + "name": "any_of", + "type": "array" + }, + { + "collectionFormat": "csv", + "description": "Repeatable exact technology name the site must NOT use (excludes)", + "in": "query", + "items": { + "type": "string" + }, + "name": "not", + "type": "array" + }, + { + "description": "Exact category filter, e.g. Ecommerce, CMS, Analytics, Payment, CDN", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Exact CMS filter, e.g. WordPress, Shopify, Webflow", + "in": "query", + "name": "cms", + "type": "string" + }, + { + "description": "Exact e-commerce platform filter, e.g. Shopify, WooCommerce, Magento", + "in": "query", + "name": "ecommerce", + "type": "string" + }, + { + "description": "Exact CDN / hosting filter, e.g. Cloudflare, Fastly, Vercel", + "in": "query", + "name": "cdn", + "type": "string" + }, + { + "description": "Exact web-server filter, e.g. nginx, Apache, IIS", + "in": "query", + "name": "web_server", + "type": "string" + }, + { + "description": "Exact server language / framework filter, e.g. PHP, ASP.NET, Ruby on Rails", + "in": "query", + "name": "server_language", + "type": "string" + }, + { + "description": "Exact top-level-domain filter, e.g. com, org, io", + "in": "query", + "name": "tld", + "type": "string" + }, + { + "description": "Fetch-tier filter. Enum: http, browser", + "enum": [ + "http", + "browser" + ], + "in": "query", + "name": "render_tier", + "type": "string" + }, + { + "description": "Source filter for where the domain was discovered, e.g. tranco", + "in": "query", + "name": "seed_source", + "type": "string" + }, + { + "description": "true keeps only sites with a detected CAPTCHA", + "in": "query", + "name": "has_captcha", + "type": "boolean" + }, + { + "description": "false (the common case) excludes backend CDN/DNS/cloud-vendor hostnames that rank highly but were never meant to serve a public homepage, keeping only real, human-navigable sites; true keeps only those backend hostnames", + "in": "query", + "name": "is_infrastructure", + "type": "boolean" + }, + { + "description": "true keeps only sites whose homepage was fetched, false only sites that could not be fetched", + "in": "query", + "name": "reachable", + "type": "boolean" + }, + { + "description": "Minimum number of detected technologies, 0 or greater", + "in": "query", + "name": "min_tech_count", + "type": "integer" + }, + { + "description": "Scan run id; defaults to the latest run", + "in": "query", + "name": "run_id", + "type": "string" + }, + { + "description": "Sort enum: relevance, rank_asc, tech_count_desc, domain_asc, crawled_desc", + "enum": [ + "relevance", + "rank_asc", + "tech_count_desc", + "domain_asc", + "crawled_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -305407,7 +382087,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.cbsSportsAuthorResponseDoc" + "$ref": "#/definitions/datasets.techstackSearchResponseDoc" } }, "400": { @@ -305416,20 +382096,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -305440,47 +382114,77 @@ "ApiKeyAuth": [] } ], - "summary": "Get a CBS Sports writer profile", + "summary": "Search the website tech-stack dataset", "tags": [ - "CBS Sports" + "Datasets" ] } }, - "/cbssports/headlines": { + "/datasets/trustmrr/facets": { "get": { - "description": "Returns fresh headlines from one CBS Sports per-sport feed. `section` is required and takes one of 21 slugs, such as `nfl`, `college-basketball`, `soccer`, `ufc`, `betting` or `general`. Each item has a title and URL, and may carry a summary, author, publication time and image.", - "operationId": "cbssports-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns terms-aggregation counts for one facet of the TrustMRR dataset, scoped to the same filters as search. Facet enum: `category`, `country`, `payment_provider`, `target_audience`, `business_type`, `tech`, `channels`, `listing_tier`, `status`, `on_sale`, `is_sponsored`, `tags`.", + "operationId": "datasets-trustmrr-facets", "parameters": [ { - "description": "CBS Sports section slug", + "description": "Facet enum: category, country, payment_provider, target_audience, business_type, tech, channels, listing_tier, status, on_sale, is_sponsored, tags", "enum": [ - "nfl", - "college-football", - "nba", - "college-basketball", - "womens-college-basketball", - "wnba", - "mlb", - "nhl", - "soccer", - "golf", - "tennis", - "ufc", - "mma", - "boxing", - "wwe", - "nascar", - "motor-sports", - "olympics", - "betting", - "prediction", - "general" + "category", + "country", + "payment_provider", + "target_audience", + "business_type", + "tech", + "channels", + "listing_tier", + "status", + "on_sale", + "is_sponsored", + "tags" ], "in": "query", - "name": "section", + "name": "facet", "required": true, "type": "string", - "x-example": "nfl" + "x-example": "category" + }, + { + "description": "Full-text query, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Exact category filter, max 128 characters", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Exact ISO country-code filter, max 128 characters", + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Payment-provider filter, max 128 characters", + "in": "query", + "name": "payment_provider", + "type": "string" + }, + { + "description": "Filter for startups currently listed for sale", + "in": "query", + "name": "on_sale", + "type": "boolean" + }, + { + "description": "Minimum verified MRR in USD", + "in": "query", + "name": "min_mrr", + "type": "number" } ], "produces": [ @@ -305490,7 +382194,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/datasets.trustmrrFacetResponseDoc" } }, "400": { @@ -305505,8 +382209,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -305517,16 +382221,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get CBS Sports section headlines", + "summary": "Facet the TrustMRR dataset", "tags": [ - "CBS Sports" + "Datasets" ] } }, - "/cbssports/news": { + "/datasets/trustmrr/history/{slug}": { "get": { - "description": "Returns the current CBS Sports headlines across every sport, with no input needed: news stories, analysis columns and picks or predictions articles. Only article links are returned; video, scores, schedule and player pages are filtered out. Items have `title` and `url`, plus `summary`, `published_at` and `author` when provided.", - "operationId": "cbssports-news", + "consumes": [ + "application/json" + ], + "description": "Returns a startup's daily time-series of payment-provider-verified metrics — MRR, all-time revenue, last-30-days revenue, 30-day and 12-month traffic, 30-day growth, for-sale flag, asking price, valuation multiple, deal score and offer count — one point per day in chronological order (oldest first). The series accrues one point per calendar day, so a recently discovered startup returns a short or empty series rather than a 404.", + "operationId": "datasets-trustmrr-history", + "parameters": [ + { + "description": "Startup slug, max 128 characters", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "gumroad" + }, + { + "description": "Inclusive start date, YYYY-MM-DD (UTC)", + "in": "query", + "name": "from", + "type": "string" + }, + { + "description": "Inclusive end date, YYYY-MM-DD (UTC)", + "in": "query", + "name": "to", + "type": "string" + }, + { + "description": "Maximum points returned (the most recent within the range), default 365, max 1000", + "in": "query", + "name": "limit", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -305534,45 +382269,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/datasets.trustmrrHistoryResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get CBS Sports top stories", - "tags": [ - "CBS Sports" - ] - } - }, - "/cbssports/sections": { - "get": { - "description": "Lists the 21 CBS Sports per-sport sections accepted by `cbssports-headlines`, from `nfl`, `nba` and `soccer` to `betting`, `prediction` and `general`. Each has a `slug`, a display `name` and the feed `url`. A feed can include a story from a neighbouring sport, and off-season ones such as `olympics` can be weeks or months old.", - "operationId": "cbssports-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "500": { + "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/app.Response" } } }, @@ -305581,40 +382296,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get CBS Sports sections", + "summary": "Get a TrustMRR startup's daily history", "tags": [ - "CBS Sports" + "Datasets" ] } }, - "/chewy/brands": { + "/datasets/trustmrr/items/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of Chewy's full brand directory -- roughly 7,600 brands -- with each brand's id, name, Chewy's own written description, image, parent-catalog group, and its child brands where a brand umbrellas others (Purina lists 27). This is the whole catalog of brands, unlike chewy_facets, which only reports the brands present in one category's listing. Pass name to look up a single brand by exact name, case-insensitive; it is an exact match upstream, not a search, so \"Purina\" matches while \"purina pro\" does not. To filter products by a brand, pass the brand's NAME to chewy_category or chewy_search as filter=brand_facet: -- facet_id is the join key onto chewy_facets' own option ids and is not accepted by the filter parameter.", - "operationId": "chewy-brands", + "description": "Returns one startup record by slug from the TrustMRR dataset (dataset id `trustmrr`), including verified revenue/MRR, traffic, growth, category, tech stack, marketing channels and acquisition-marketplace fields.", + "operationId": "datasets-trustmrr-item", "parameters": [ { - "description": "Page number, 1-based (default 1).", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Brands per page, 1 to 500 (default 100).", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 100 - }, - { - "description": "Return only the brand with this exact name, case-insensitive. Exact match, not a search.", - "in": "query", - "name": "name", + "description": "Startup slug, max 128 characters", + "in": "path", + "name": "slug", + "required": true, "type": "string", - "x-example": "ACANA" + "x-example": "gumroad" } ], "produces": [ @@ -305624,7 +382326,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.brandsResponseDoc" + "$ref": "#/definitions/datasets.trustmrrItemResponseDoc" } }, "400": { @@ -305633,14 +382335,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -305651,33 +382359,192 @@ "ApiKeyAuth": [] } ], - "summary": "List Chewy's brand directory", + "summary": "Get a TrustMRR startup from the dataset", "tags": [ - "Chewy" + "Datasets" ] } }, - "/chewy/categories": { + "/datasets/trustmrr/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns Chewy's category taxonomy tree: how to discover group_id values for chewy_category, not the products within a category. Omitting group_id returns all top-level departments (Dog, Cat, Horse, Bird, Fish, Reptile, Small Pet, Farm and Livestock Supplies, Wild Bird and Wildlife Supplies, Pharmacy, Pet Parents); a group_id expands that specific group's own subtree instead. depth controls how many levels of subcategories are expanded in one call.", - "operationId": "chewy-categories", + "description": "Searches public startups with payment-provider-verified revenue and MRR, stored in a search index. Filter by category, country, payment provider, target audience, tech, marketing channel, listing tier and for-sale status, and by revenue/MRR/traffic/growth/multiple/asking-price ranges. Sort enum: `relevance`, `mrr_desc`, `revenue_desc`, `revenue_30d_desc`, `traffic_desc`, `growth_desc`, `deal_score_desc`, `price_asc`, `price_desc`, `multiple_asc`, `founded_desc`. status enum: `active`, `removed`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-trustmrr-search", "parameters": [ { - "description": "Chewy category group id to expand, e.g. 332 for Dog Food. Omit for the full top-level department tree.", + "description": "Full-text query over name, description, seller message and business summary, max 256 characters", "in": "query", - "name": "group_id", - "type": "string", - "x-example": "332" + "name": "q", + "type": "string" }, { - "description": "How many levels of subcategories to expand, 1 to 3 (default 2)", + "description": "Exact startup slug filter, max 128 characters", "in": "query", - "name": "depth", - "type": "integer", - "x-example": 2 + "name": "slug", + "type": "string" + }, + { + "description": "Exact category filter (e.g. SaaS, Artificial Intelligence, Mobile Apps), max 128 characters", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Exact ISO country-code filter (e.g. US), max 128 characters", + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Payment-provider filter (e.g. stripe, revenuecat, superwall, creem), max 128 characters", + "in": "query", + "name": "payment_provider", + "type": "string" + }, + { + "description": "Target-audience filter (e.g. B2B, B2C), max 128 characters", + "in": "query", + "name": "target_audience", + "type": "string" + }, + { + "description": "Business-type filter (e.g. B2B, B2C), max 128 characters", + "in": "query", + "name": "business_type", + "type": "string" + }, + { + "description": "Detected tech-stack slug filter (e.g. nextjs, reactnative), max 128 characters", + "in": "query", + "name": "tech", + "type": "string" + }, + { + "description": "Detected marketing-channel slug filter (e.g. meta-ads, seo), max 128 characters", + "in": "query", + "name": "channel", + "type": "string" + }, + { + "description": "For-sale listing-tier filter (e.g. pro), max 128 characters", + "in": "query", + "name": "listing_tier", + "type": "string" + }, + { + "description": "Lifecycle enum: active, removed", + "enum": [ + "active", + "removed" + ], + "in": "query", + "name": "status", + "type": "string" + }, + { + "description": "Filter for startups currently listed for sale", + "in": "query", + "name": "on_sale", + "type": "boolean" + }, + { + "description": "Filter for sponsored (paid-placement) listings", + "in": "query", + "name": "is_sponsored", + "type": "boolean" + }, + { + "description": "Minimum verified MRR in USD", + "in": "query", + "name": "min_mrr", + "type": "number" + }, + { + "description": "Maximum verified MRR in USD", + "in": "query", + "name": "max_mrr", + "type": "number" + }, + { + "description": "Minimum verified all-time revenue in USD", + "in": "query", + "name": "min_revenue", + "type": "number" + }, + { + "description": "Minimum verified last-30-days revenue in USD", + "in": "query", + "name": "min_revenue_30d", + "type": "number" + }, + { + "description": "Minimum last-30-days traffic (visits)", + "in": "query", + "name": "min_traffic", + "type": "number" + }, + { + "description": "Minimum 30-day revenue growth percentage", + "in": "query", + "name": "min_growth", + "type": "number" + }, + { + "description": "Maximum asking-price-to-revenue multiple", + "in": "query", + "name": "max_multiple", + "type": "number" + }, + { + "description": "Minimum asking price in USD", + "in": "query", + "name": "min_asking_price", + "type": "number" + }, + { + "description": "Maximum asking price in USD", + "in": "query", + "name": "max_asking_price", + "type": "number" + }, + { + "description": "Minimum Ahrefs Domain Rating", + "in": "query", + "name": "min_ahrefs_dr", + "type": "integer" + }, + { + "description": "Sort enum: relevance, mrr_desc, revenue_desc, revenue_30d_desc, traffic_desc, growth_desc, deal_score_desc, price_asc, price_desc, multiple_asc, founded_desc", + "enum": [ + "relevance", + "mrr_desc", + "revenue_desc", + "revenue_30d_desc", + "traffic_desc", + "growth_desc", + "deal_score_desc", + "price_asc", + "price_desc", + "multiple_asc", + "founded_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -305687,7 +382554,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.categoriesResponseDoc" + "$ref": "#/definitions/datasets.trustmrrSearchResponseDoc" } }, "400": { @@ -305702,8 +382569,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -305714,68 +382581,164 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Chewy's category taxonomy tree", + "summary": "Search the TrustMRR dataset", "tags": [ - "Chewy" + "Datasets" ] } }, - "/chewy/category": { + "/datasets/vehicle-listings/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page (36 products) of a Chewy category/browse listing's product grid (price, autoship price/discount, stock, rating, images), plus embedded facets and breadcrumbs. group_id is Chewy's own numeric category id -- the trailing id segment of a chewy.com/b/- browse URL, e.g. 294 for /b/dry-food-294. Every breadcrumbs[].group_id and facets[].options[].value in a response is a ready-to-use group_id for a follow-up call, so a caller can discover the full category taxonomy starting from a known category. A group_id Chewy does not recognize returns a 404 rather than an unfiltered listing. sort and filter narrow/reorder the listing; every facets[].value paired with one of that facet's options[].value from any prior response is a valid filter key:value pair (e.g. brand, breed size, flavor, price range, customer rating -- whichever facets that category exposes). Set include_content to also return the category's curated editorial content -- Chewy's own FAQ question/answer pairs, the rich category description, and the SEO page title and meta description; it costs no extra upstream call and is omitted entirely when not requested. A keyword search carries none of this content, so it is a category-only addition.", - "operationId": "chewy-category", + "description": "Returns terms aggregation counts for the vehicle listings dataset. Facet enum: `source`, `make`, `model`, `trim`, `body_style`, `transmission`, `drive_type`, `fuel_type`, `seller_type`, `state`, `run_id`.", + "operationId": "datasets-vehicle-listings-facets", "parameters": [ { - "description": "Chewy's numeric category id, e.g. \\", + "description": "Facet enum: source, make, model, trim, body_style, transmission, drive_type, fuel_type, seller_type, state, run_id", + "enum": [ + "source", + "make", + "model", + "trim", + "body_style", + "transmission", + "drive_type", + "fuel_type", + "seller_type", + "state", + "run_id" + ], "in": "query", - "name": "group_id", + "name": "facet", "required": true, "type": "string", - "x-example": "294" + "x-example": "source" }, { - "description": "Page number, 36 products per page (default 1)", + "description": "Full-text query over make, model and trim, max 256 characters", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "q", + "type": "string" }, { - "description": "Sort order. One of byRelevance, byNewest, byPopularity, byLowestPrice, byHighestPrice, byRating, byRatingCount. Defaults to Chewy's own relevance ordering when omitted.", + "description": "Exact source marketplace filter: carmax, autotrader, carsdotcom", "enum": [ - "byRelevance", - "byNewest", - "byPopularity", - "byLowestPrice", - "byHighestPrice", - "byRating", - "byRatingCount" + "carmax", + "autotrader", + "carsdotcom" ], "in": "query", - "name": "sort", - "type": "string", - "x-example": "byRating" + "name": "source", + "type": "string" }, { - "collectionFormat": "csv", - "description": "Repeatable, up to 10. Each value is \\", + "description": "Exact make filter, max 128 characters", "in": "query", - "items": { - "type": "string" - }, - "name": "filter", - "type": "array", - "x-example": "brand_facet:ACANA" + "name": "make", + "type": "string" + }, + { + "description": "Exact model filter, max 128 characters", + "in": "query", + "name": "model", + "type": "string" + }, + { + "description": "Exact trim filter, max 128 characters", + "in": "query", + "name": "trim", + "type": "string" + }, + { + "description": "Exact body style filter, max 128 characters", + "in": "query", + "name": "body_style", + "type": "string" + }, + { + "description": "Exact transmission filter, max 128 characters", + "in": "query", + "name": "transmission", + "type": "string" + }, + { + "description": "Exact drivetrain filter, max 128 characters", + "in": "query", + "name": "drive_type", + "type": "string" + }, + { + "description": "Exact fuel type filter, max 128 characters", + "in": "query", + "name": "fuel_type", + "type": "string" + }, + { + "description": "Exact seller type filter: retailer, dealer, private", + "enum": [ + "retailer", + "dealer", + "private" + ], + "in": "query", + "name": "seller_type", + "type": "string" + }, + { + "description": "Exact US state abbreviation filter, max 8 characters", + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "Exact VIN filter", + "in": "query", + "name": "vin", + "type": "string" + }, + { + "description": "Exact crawl run-id filter, max 128 characters", + "in": "query", + "name": "run_id", + "type": "string" + }, + { + "description": "Filter for listings currently marked down from a previous price", + "in": "query", + "name": "is_price_reduced", + "type": "boolean" + }, + { + "description": "Minimum model year", + "in": "query", + "name": "min_year", + "type": "integer" + }, + { + "description": "Maximum model year", + "in": "query", + "name": "max_year", + "type": "integer" + }, + { + "description": "Minimum price in US dollars", + "in": "query", + "name": "min_price", + "type": "number" + }, + { + "description": "Maximum price in US dollars", + "in": "query", + "name": "max_price", + "type": "number" }, { - "description": "Also return the category's curated editorial content -- Chewy's own FAQ question/answer pairs, the rich category description, and the SEO page title/meta description. Costs no extra upstream call. Omitted entirely when false (the default).", + "description": "Maximum odometer mileage", "in": "query", - "name": "include_content", - "type": "boolean", - "x-example": true + "name": "max_mileage", + "type": "integer" } ], "produces": [ @@ -305785,7 +382748,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.categoryResponseDoc" + "$ref": "#/definitions/datasets.vehicleListingsFacetResponseDoc" } }, "400": { @@ -305794,20 +382757,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -305818,44 +382775,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Chewy category listing", + "summary": "Facet vehicle listings dataset", "tags": [ - "Chewy" + "Datasets" ] } }, - "/chewy/facets": { + "/datasets/vehicle-listings/items/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns the full set of refinement options (facets) a Chewy category or keyword search can be narrowed by -- brand, sub-category, lifestage, food form, breed size, special diet, health feature, flavor, ingredient, packaging type, price band, customer rating, and whichever other dimensions that listing exposes -- with each option's product count. No products are returned, so this is a much smaller call than chewy_category/chewy_search when only the option set is wanted. The Brand dimension is effectively Chewy's brand directory for the requested listing: each brand option carries its product count and, where Chewy publishes one, its own chewy.com/brands/- landing-page slug in seo_hvf_slug. Exactly one of group_id or q is required. Every facets[].value paired with one of that facet's options[].value is a ready-to-use filter key:value pair for this endpoint, chewy_category, and chewy_search alike; passing filter here narrows the listing first, so the returned counts describe the already-narrowed result set. A group_id Chewy does not recognize returns a 404 rather than an empty option set.", - "operationId": "chewy-facets", + "description": "Returns one vehicle listing from the dataset by `id`, formatted `:`, such as `carmax:28187774`. The record has VIN, year, make, model, trim, mileage, price and previous price, colours, drivetrain, seller, location and first and last seen times. An unknown id returns 404.", + "operationId": "datasets-vehicle-listings-item", "parameters": [ { - "description": "Chewy's numeric category id, e.g. \\", - "in": "query", - "name": "group_id", - "type": "string", - "x-example": "294" - }, - { - "description": "Free-text search keywords to return refinement options for, e.g. \\", - "in": "query", - "name": "q", + "description": "Vehicle listing id, formatted : (e.g. carmax:28187774)", + "in": "path", + "name": "id", + "required": true, "type": "string", - "x-example": "salmon dog food" - }, - { - "collectionFormat": "csv", - "description": "Repeatable, up to 10. Each value is \\", - "in": "query", - "items": { - "type": "string" - }, - "name": "filter", - "type": "array", - "x-example": "brand_facet:ACANA" + "x-example": "carmax:28187774" } ], "produces": [ @@ -305865,7 +382805,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.facetsResponseDoc" + "$ref": "#/definitions/datasets.vehicleListingResponseDoc" } }, "400": { @@ -305886,8 +382826,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -305898,27 +382838,27 @@ "ApiKeyAuth": [] } ], - "summary": "List a Chewy category or search's refinement options", + "summary": "Get a vehicle listing from dataset", "tags": [ - "Chewy" + "Datasets" ] } }, - "/chewy/gtin-lookup": { + "/datasets/vehicle-listings/price-history/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Resolves a batch of up to 20 GTIN/UPC barcodes to their Chewy part numbers in one call. gtins is a comma-separated list of barcodes, e.g. \"192268541316\". A barcode Chewy does not recognize is omitted from part_numbers and listed in not_found rather than causing the whole call to fail. The resolved part_numbers values feed directly into chewy_product/chewy_products.", - "operationId": "chewy-gtin-lookup", + "description": "Returns the recorded price-change events for one listing, oldest first. An event is recorded only when a crawl first observes the listing or observes a changed price -- not one entry per crawl pass -- so a listing whose price has never changed since it was first crawled returns a single entry.", + "operationId": "datasets-vehicle-listings-price-history", "parameters": [ { - "description": "Comma-separated GTIN/UPC barcodes, up to 20", - "in": "query", - "name": "gtins", + "description": "Vehicle listing id, formatted : (e.g. carmax:28187774)", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "192268541316" + "x-example": "carmax:28187774" } ], "produces": [ @@ -305928,7 +382868,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.gtinLookupResponseDoc" + "$ref": "#/definitions/datasets.vehicleListingPriceHistoryResponseDoc" } }, "400": { @@ -305943,8 +382883,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -305955,27 +382895,172 @@ "ApiKeyAuth": [] } ], - "summary": "Resolve Chewy GTIN/UPC barcodes to part numbers", + "summary": "Get a vehicle listing's price history", "tags": [ - "Chewy" + "Datasets" ] } }, - "/chewy/inventory": { + "/datasets/vehicle-listings/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns Chewy's live warehouse inventory position for up to 20 products in one call, keyed by part number: the availability status, total units on hand, units inbound/in progress, units already reserved against unshipped orders, and the quantity actually available to the storefront. This is the only Chewy surface that carries real quantities -- every other endpoint in this family reports stock as a single boolean, so \"36 units left\" and \"84,386 units left\" are indistinguishable there. Quantities are live and move between calls. Part numbers Chewy does not return inventory for are reported in not_found; if none resolve the response is a 404.", - "operationId": "chewy-inventory", + "description": "Searches the crawled used-vehicle listings index. source enum: `carmax`, `autotrader`, `carsdotcom`. CarMax's own national inventory is fully enumerable (re-crawled on a standing schedule); Autotrader/Cars.com coverage is a best-effort zip-code sweep, not exhaustive, and their rows approximate city/state from the searched area rather than the seller's exact location. seller_type enum: `retailer`, `dealer`, `private` (not populated for every row -- see the dataset markdown). Sort enum: `relevance`, `recently_updated`, `newly_listed`, `price_asc`, `price_desc`, `mileage_asc`, `mileage_desc`, `year_desc`, `year_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-vehicle-listings-search", "parameters": [ { - "description": "Comma-separated Chewy part numbers, up to 20 per request, e.g. \\", + "description": "Full-text query over make, model and trim, max 256 characters", "in": "query", - "name": "part_numbers", - "required": true, - "type": "string", - "x-example": "101143,52448" + "name": "q", + "type": "string" + }, + { + "description": "Exact source marketplace filter: carmax, autotrader, carsdotcom", + "enum": [ + "carmax", + "autotrader", + "carsdotcom" + ], + "in": "query", + "name": "source", + "type": "string" + }, + { + "description": "Exact make filter (e.g. Honda, Toyota), max 128 characters", + "in": "query", + "name": "make", + "type": "string" + }, + { + "description": "Exact model filter (e.g. Civic), max 128 characters", + "in": "query", + "name": "model", + "type": "string" + }, + { + "description": "Exact trim filter, max 128 characters", + "in": "query", + "name": "trim", + "type": "string" + }, + { + "description": "Exact body style filter (e.g. Sedan, SUV), max 128 characters", + "in": "query", + "name": "body_style", + "type": "string" + }, + { + "description": "Exact transmission filter, max 128 characters", + "in": "query", + "name": "transmission", + "type": "string" + }, + { + "description": "Exact drivetrain filter, max 128 characters", + "in": "query", + "name": "drive_type", + "type": "string" + }, + { + "description": "Exact fuel type filter (e.g. Gas, Hybrid, Electric), max 128 characters", + "in": "query", + "name": "fuel_type", + "type": "string" + }, + { + "description": "Exact seller type filter: retailer, dealer, private", + "enum": [ + "retailer", + "dealer", + "private" + ], + "in": "query", + "name": "seller_type", + "type": "string" + }, + { + "description": "Exact US state abbreviation filter (e.g. CA), max 8 characters", + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "Exact VIN filter. Best-effort: not guaranteed on every listing", + "in": "query", + "name": "vin", + "type": "string" + }, + { + "description": "Exact crawl run-id filter, max 128 characters", + "in": "query", + "name": "run_id", + "type": "string" + }, + { + "description": "Filter for listings currently marked down from a previous price", + "in": "query", + "name": "is_price_reduced", + "type": "boolean" + }, + { + "description": "Minimum model year", + "in": "query", + "name": "min_year", + "type": "integer" + }, + { + "description": "Maximum model year", + "in": "query", + "name": "max_year", + "type": "integer" + }, + { + "description": "Minimum price in US dollars", + "in": "query", + "name": "min_price", + "type": "number" + }, + { + "description": "Maximum price in US dollars", + "in": "query", + "name": "max_price", + "type": "number" + }, + { + "description": "Maximum odometer mileage", + "in": "query", + "name": "max_mileage", + "type": "integer" + }, + { + "description": "Sort enum: relevance, recently_updated, newly_listed, price_asc, price_desc, mileage_asc, mileage_desc, year_desc, year_asc", + "enum": [ + "relevance", + "recently_updated", + "newly_listed", + "price_asc", + "price_desc", + "mileage_asc", + "mileage_desc", + "year_desc", + "year_asc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -305985,7 +383070,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.inventoryResponseDoc" + "$ref": "#/definitions/datasets.vehicleListingsSearchResponseDoc" } }, "400": { @@ -305994,20 +383079,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -306018,40 +383097,132 @@ "ApiKeyAuth": [] } ], - "summary": "Look up live warehouse inventory for a batch of Chewy products", + "summary": "Search vehicle listings dataset", "tags": [ - "Chewy" + "Datasets" ] } }, - "/chewy/item-attributes": { + "/datasets/x-users/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns Chewy's own specification table for up to 20 products in one call, keyed by part number -- the structured attribute list (lifestage, pet type, product type, material, made-in country, packaging type, flavor, defining size, plus long-form key-benefits and cautions copy), together with the handling and compliance flags that govern how an item ships (pharmaceutical, prescription vet-diet, frozen, refrigerated, single-tablet, gift card), its bundle structure and component SKUs, its autoship eligibility/discount and preset reorder cadence, its merchandising classification path, and the numeric category group ids it belongs to (each usable directly as chewy_category's group_id). This complements rather than repeats chewy_products and chewy_product: price, rating, images, reviews, and descriptions stay on those endpoints, and the attribute table is not available from either. Use the group parameter to return a single attribute group. Part numbers Chewy does not recognize are reported in not_found; if none of them resolve the response is a 404.", - "operationId": "chewy-item-attributes", + "description": "Returns value counts for the X users dataset by the required `facet`: `is_blue_verified`, `has_bio`, `has_external_url` or `source_tier`. The counts follow the search filters, including `q`, follower and ratio ranges, and creation or crawl dates. At most 50 values come back, largest count first.", + "operationId": "datasets-x-users-facets", "parameters": [ { - "description": "Comma-separated Chewy part numbers, up to 20 per request, e.g. \\", + "description": "Facet enum: is_blue_verified, has_bio, has_external_url, source_tier", + "enum": [ + "is_blue_verified", + "has_bio", + "has_external_url", + "source_tier" + ], "in": "query", - "name": "part_numbers", + "name": "facet", "required": true, "type": "string", - "x-example": "52448,101143" + "x-example": "is_blue_verified" }, { - "description": "Return only attributes in one group. One of DEFINING, STANDARD, EXTENDED, HIDDEN. Omit for every group.", + "description": "Full-text query over username, name, bio and location, max 256 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Exact username filter (case-insensitive), max 128 characters", + "in": "query", + "name": "username", + "type": "string" + }, + { + "description": "Exact filter for which seed tier discovered this account", + "in": "query", + "name": "source_tier", + "type": "string" + }, + { + "description": "Filter by the X blue-check verification flag", + "in": "query", + "name": "is_blue_verified", + "type": "boolean" + }, + { + "description": "Filter by a non-empty profile bio", + "in": "query", + "name": "has_bio", + "type": "boolean" + }, + { + "description": "Filter by a linked external URL", + "in": "query", + "name": "has_external_url", + "type": "boolean" + }, + { + "description": "Minimum follower count", + "in": "query", + "name": "min_followers", + "type": "integer" + }, + { + "description": "Maximum follower count", + "in": "query", + "name": "max_followers", + "type": "integer" + }, + { + "description": "Minimum follower-to-following ratio", + "in": "query", + "name": "min_ratio", + "type": "number" + }, + { + "description": "Maximum follower-to-following ratio", + "in": "query", + "name": "max_ratio", + "type": "number" + }, + { + "description": "Accounts created on or after this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "created_after", + "type": "string" + }, + { + "description": "Accounts created on or before this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "created_before", + "type": "string" + }, + { + "description": "Records last refreshed on or after this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "crawled_after", + "type": "string" + }, + { + "description": "Records last refreshed on or before this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "crawled_before", + "type": "string" + }, + { + "description": "Sort enum: relevance, followers_desc, followers_asc, crawled_at_desc, crawled_at_asc, created_at_desc, created_at_asc", "enum": [ - "DEFINING", - "STANDARD", - "EXTENDED", - "HIDDEN" + "relevance", + "followers_desc", + "followers_asc", + "crawled_at_desc", + "crawled_at_asc", + "created_at_desc", + "created_at_asc" ], "in": "query", - "name": "group", - "type": "string", - "x-example": "STANDARD" + "name": "sort", + "type": "string" } ], "produces": [ @@ -306061,7 +383232,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.itemAttributesResponseDoc" + "$ref": "#/definitions/datasets.xUsersFacetResponseDoc" } }, "400": { @@ -306070,20 +383241,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -306094,27 +383259,27 @@ "ApiKeyAuth": [] } ], - "summary": "Look up a batch of Chewy products' structured attributes and handling flags", + "summary": "Facet the X users dataset", "tags": [ - "Chewy" + "Datasets" ] } }, - "/chewy/product": { + "/datasets/x-users/items/{username}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Chewy product's full detail: name, brand, description, images, price, stock, rating and its star-count breakdown, category breadcrumbs, customer questions and answers, and customer reviews. id is the numeric id from a chewy.com PDP URL, e.g. 185468 from https://www.chewy.com/frisco-lion-mane-dog-cat-costume/dp/185468 -- also the same value a chewy_category response's products[].part_number field carries for that product's own default variant. The response also carries the item's shipping weight and package dimensions as Chewy states them, its per-order purchase limit, and any promotions currently attached to it (each with a type such as \"Spend $X\" or \"BOGO\", plus short and long descriptions).", - "operationId": "chewy-product", + "description": "Returns one X user from the dataset by `username`, with or without a leading @. The record has name, bio, location, external URL, avatar and banner, followers, following, posts, likes, listed count, blue-verified flag and verified type. An unknown username returns 404; no live scrape runs.", + "operationId": "datasets-x-users-item", "parameters": [ { - "description": "Numeric id from a chewy.com PDP URL", - "in": "query", - "name": "id", + "description": "X username, with or without a leading @, max 128 characters", + "in": "path", + "name": "username", "required": true, "type": "string", - "x-example": "185468" + "x-example": "elonmusk" } ], "produces": [ @@ -306124,7 +383289,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.productResponseDoc" + "$ref": "#/definitions/datasets.xUserResponseDoc" } }, "400": { @@ -306145,8 +383310,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -306157,48 +383322,130 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Chewy product's detail", + "summary": "Get an X user from the dataset", "tags": [ - "Chewy" + "Datasets" ] } }, - "/chewy/product-questions": { + "/datasets/x-users/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a Chewy product's customer questions, each with its answers (text, author, date, staff flag, helpful count). chewy_product embeds only the first 20 questions with no way to page past them; this endpoint reaches the whole set. id is the numeric id from any chewy.com PDP URL, and questions are shared across a product's variants, so any variant's id returns the same set. Each question reports answers_total alongside its answers array, so a caller can tell when answers were truncated by answer_limit. Chewy offers no sort or filter on questions, so this endpoint deliberately exposes paging only.", - "operationId": "chewy-product-questions", + "description": "Searches public X (Twitter) user profiles stored in a search index. Sort enum: `relevance`, `followers_desc`, `followers_asc`, `crawled_at_desc`, `crawled_at_asc`, `created_at_desc`, `created_at_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-x-users-search", "parameters": [ { - "description": "The numeric id from a chewy.com PDP URL, e.g. \\", + "description": "Full-text query over username, name, bio and location, max 256 characters", "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "767806" + "name": "q", + "type": "string" }, { - "description": "Page number, 1-based (default 1).", + "description": "Exact username filter (case-insensitive), max 128 characters", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "username", + "type": "string" }, { - "description": "Questions per page, 1 to 50 (default 20).", + "description": "Exact filter for which seed tier discovered this account, e.g. github-users, wikidata, tiktok-creators, journalists", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "name": "source_tier", + "type": "string" }, { - "description": "Answers to return per question, 1 to 20 (default 10). Each question also reports answers_total.", + "description": "Filter by the X blue-check verification flag", "in": "query", - "name": "answer_limit", - "type": "integer", - "x-example": 10 + "name": "is_blue_verified", + "type": "boolean" + }, + { + "description": "Filter by a non-empty profile bio", + "in": "query", + "name": "has_bio", + "type": "boolean" + }, + { + "description": "Filter by a linked external URL", + "in": "query", + "name": "has_external_url", + "type": "boolean" + }, + { + "description": "Minimum follower count", + "in": "query", + "name": "min_followers", + "type": "integer" + }, + { + "description": "Maximum follower count", + "in": "query", + "name": "max_followers", + "type": "integer" + }, + { + "description": "Minimum follower-to-following ratio (low values surface follow-spam / bot-like accounts)", + "in": "query", + "name": "min_ratio", + "type": "number" + }, + { + "description": "Maximum follower-to-following ratio", + "in": "query", + "name": "max_ratio", + "type": "number" + }, + { + "description": "Accounts created on or after this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "created_after", + "type": "string" + }, + { + "description": "Accounts created on or before this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "created_before", + "type": "string" + }, + { + "description": "Records last refreshed on or after this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "crawled_after", + "type": "string" + }, + { + "description": "Records last refreshed on or before this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "crawled_before", + "type": "string" + }, + { + "description": "Sort enum: relevance, followers_desc, followers_asc, crawled_at_desc, crawled_at_asc, created_at_desc, created_at_asc", + "enum": [ + "relevance", + "followers_desc", + "followers_asc", + "crawled_at_desc", + "crawled_at_asc", + "created_at_desc", + "created_at_asc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -306208,7 +383455,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.questionsResponseDoc" + "$ref": "#/definitions/datasets.xUsersSearchResponseDoc" } }, "400": { @@ -306217,20 +383464,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -306241,67 +383482,160 @@ "ApiKeyAuth": [] } ], - "summary": "List a Chewy product's customer questions and answers, paginated", + "summary": "Search the X users dataset", "tags": [ - "Chewy" + "Datasets" ] } }, - "/chewy/product-reviews": { + "/datasets/youtube-creators/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a Chewy product's customer reviews -- rating, title, body, author, submission date, helpful count, incentivized flag, and contributor badge -- with sorting and positive/negative filtering. chewy_product embeds only the first 20 reviews with no way to page past them; this endpoint reaches the whole set (products routinely carry thousands). id is the numeric id from any chewy.com PDP URL, and reviews are shared across a product's variants, so any variant's id returns the same set. total is the count for the current filter, so it drops when filter is applied, while rating_count stays the product's overall rating tally.", - "operationId": "chewy-product-reviews", + "description": "Returns value counts for the YouTube creators dataset by the required `facet`: `region` or `discovery_source`. The counts honour the search filters, such as subscriber, video and view ranges and join or refresh dates, and cover the top 50 values.", + "operationId": "datasets-youtube-creators-facets", "parameters": [ { - "description": "The numeric id from a chewy.com PDP URL, e.g. \\", + "description": "Facet enum: region, discovery_source", + "enum": [ + "region", + "discovery_source" + ], "in": "query", - "name": "id", + "name": "facet", "required": true, "type": "string", - "x-example": "767806" + "x-example": "region" }, { - "description": "Page number, 1-based (default 1).", + "description": "Full-text query over channel_name and bio, max 256 characters", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "q", + "type": "string" }, { - "description": "Reviews per page, 1 to 50 (default 20).", + "description": "Exact channel id filter, max 128 characters", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "name": "channel_id", + "type": "string" }, { - "description": "Sort order. One of MOST_RELEVANT, NEWEST, OLDEST, HIGHEST_RATING, LOWEST_RATING, PHOTOS. Defaults to Chewy's own ordering when omitted.", - "enum": [ - "MOST_RELEVANT", - "NEWEST", - "OLDEST", - "HIGHEST_RATING", - "LOWEST_RATING", - "PHOTOS" - ], + "description": "Exact channel region/country filter (case-insensitive), max 128 characters", "in": "query", - "name": "sort", - "type": "string", - "x-example": "NEWEST" + "name": "region", + "type": "string" }, { - "description": "Restrict to POSITIVE (4-5 star) or NEGATIVE (1-3 star) reviews. Omit for all.", + "description": "Exact filter for how the channel was discovered, max 128 characters", + "in": "query", + "name": "discovery_source", + "type": "string" + }, + { + "description": "Filter by a non-empty About bio", + "in": "query", + "name": "has_bio", + "type": "boolean" + }, + { + "description": "Filter by at least one linked external URL", + "in": "query", + "name": "has_links", + "type": "boolean" + }, + { + "description": "Filter by whether the channel exposes a public subscriber count", + "in": "query", + "name": "followers_count_available", + "type": "boolean" + }, + { + "description": "Filter by whether the channel has a known uploaded-video count", + "in": "query", + "name": "videos_count_available", + "type": "boolean" + }, + { + "description": "Filter by whether the channel has a known total view count", + "in": "query", + "name": "views_count_available", + "type": "boolean" + }, + { + "description": "Minimum subscriber count", + "in": "query", + "name": "min_followers", + "type": "integer" + }, + { + "description": "Maximum subscriber count", + "in": "query", + "name": "max_followers", + "type": "integer" + }, + { + "description": "Minimum uploaded-video count", + "in": "query", + "name": "min_videos", + "type": "integer" + }, + { + "description": "Maximum uploaded-video count", + "in": "query", + "name": "max_videos", + "type": "integer" + }, + { + "description": "Minimum total view count", + "in": "query", + "name": "min_views", + "type": "integer" + }, + { + "description": "Maximum total view count", + "in": "query", + "name": "max_views", + "type": "integer" + }, + { + "description": "Channels created on or after this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "joined_after", + "type": "string" + }, + { + "description": "Channels created on or before this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "joined_before", + "type": "string" + }, + { + "description": "Records last refreshed on or after this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "hydrated_after", + "type": "string" + }, + { + "description": "Records last refreshed on or before this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "hydrated_before", + "type": "string" + }, + { + "description": "Sort enum: relevance, followers_desc, followers_asc, views_desc, videos_desc, hydrated_at_desc, hydrated_at_asc", "enum": [ - "POSITIVE", - "NEGATIVE" + "relevance", + "followers_desc", + "followers_asc", + "views_desc", + "videos_desc", + "hydrated_at_desc", + "hydrated_at_asc" ], "in": "query", - "name": "filter", - "type": "string", - "x-example": "POSITIVE" + "name": "sort", + "type": "string" } ], "produces": [ @@ -306311,7 +383645,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.reviewsResponseDoc" + "$ref": "#/definitions/datasets.youtubeCreatorsFacetResponseDoc" } }, "400": { @@ -306320,20 +383654,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -306344,27 +383672,27 @@ "ApiKeyAuth": [] } ], - "summary": "List a Chewy product's customer reviews, paginated", + "summary": "Facet the YouTube creators dataset", "tags": [ - "Chewy" + "Datasets" ] } }, - "/chewy/products": { + "/datasets/youtube-creators/items/{channel_id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a batch of up to 20 Chewy products' lightweight summaries (price, rating, stock, images) in one call. part_numbers is a comma-separated list of Chewy part numbers, e.g. \"52448,767758\" -- the same value chewy_product returns as part_number/parent_part_number, and chewy_category/chewy_search return as products[].part_number. A part number Chewy does not recognize is omitted from products and listed in not_found rather than causing the whole call to fail.", - "operationId": "chewy-products", + "description": "Returns one YouTube channel from the dataset by `channel_id`. The record has channel name and URL, bio, region, join date, links, profile picture, and subscriber, video and view counts, each with an availability flag. A channel not in the dataset returns 404.", + "operationId": "datasets-youtube-creators-item", "parameters": [ { - "description": "Comma-separated Chewy part numbers, up to 20", - "in": "query", - "name": "part_numbers", + "description": "YouTube channel id, e.g. UCxxxxxxxxxxxxxxxxxxxxxxxx", + "in": "path", + "name": "channel_id", "required": true, "type": "string", - "x-example": "52448,767758" + "x-example": "UCX6OQ3DkcsbYNE6H8uQQuVA" } ], "produces": [ @@ -306374,7 +383702,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.productsResponseDoc" + "$ref": "#/definitions/datasets.youtubeCreatorResponseDoc" } }, "400": { @@ -306383,14 +383711,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -306401,61 +383735,160 @@ "ApiKeyAuth": [] } ], - "summary": "Get a batch of Chewy products' lightweight summaries", + "summary": "Get a YouTube creator from the dataset", "tags": [ - "Chewy" + "Datasets" ] } }, - "/chewy/search": { + "/datasets/youtube-creators/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a Chewy keyword search's product listing (price, autoship price/discount, stock, rating, images), plus embedded facets. q is free-text search keywords, e.g. \"salmon dog food\". A generic query that strongly matches one of Chewy's own categories (e.g. \"dog food\", \"cat litter\", \"leash\") is transparently redirected to that category's listing, the same real results a chewy.com visitor would see -- source_url reflects the actual listing fetched. sort and filter narrow/reorder the listing; every facets[].value paired with one of that facet's options[].value from any prior response is a valid filter key:value pair.", - "operationId": "chewy-search", + "description": "Searches public YouTube channel profiles stored in a search index — subscriber, video and view counts, region, bio and links, discovered via Common Crawl and Wikidata and hydrated from each channel's public About page. Sort enum: `relevance`, `followers_desc`, `followers_asc`, `views_desc`, `videos_desc`, `hydrated_at_desc`, `hydrated_at_asc`. Some channels hide their subscriber, video, or view count; the `_available` flags on each item distinguish a hidden count (stored as `0`, `*_available: false`) from a genuine `0`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", + "operationId": "datasets-youtube-creators-search", "parameters": [ { - "description": "Free-text search keywords", + "description": "Full-text query over channel_name and bio, max 256 characters", "in": "query", "name": "q", - "required": true, - "type": "string", - "x-example": "salmon dog food" + "type": "string" }, { - "description": "Page number, 36 products per page (default 1)", + "description": "Exact channel id filter (e.g. UCxxxxxxxxxxxxxxxxxxxxxxxx), max 128 characters", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "channel_id", + "type": "string" }, { - "description": "Sort order. One of byRelevance, byNewest, byPopularity, byLowestPrice, byHighestPrice, byRating, byRatingCount. Defaults to Chewy's own relevance ordering when omitted.", + "description": "Exact channel region/country filter (case-insensitive), max 128 characters", + "in": "query", + "name": "region", + "type": "string" + }, + { + "description": "Exact filter for how the channel was discovered (e.g. commoncrawl, wikidata), max 128 characters", + "in": "query", + "name": "discovery_source", + "type": "string" + }, + { + "description": "Filter by a non-empty About bio", + "in": "query", + "name": "has_bio", + "type": "boolean" + }, + { + "description": "Filter by at least one linked external URL", + "in": "query", + "name": "has_links", + "type": "boolean" + }, + { + "description": "Filter by whether the channel exposes a public subscriber count", + "in": "query", + "name": "followers_count_available", + "type": "boolean" + }, + { + "description": "Filter by whether the channel has a known uploaded-video count", + "in": "query", + "name": "videos_count_available", + "type": "boolean" + }, + { + "description": "Filter by whether the channel has a known total view count", + "in": "query", + "name": "views_count_available", + "type": "boolean" + }, + { + "description": "Minimum subscriber count", + "in": "query", + "name": "min_followers", + "type": "integer" + }, + { + "description": "Maximum subscriber count", + "in": "query", + "name": "max_followers", + "type": "integer" + }, + { + "description": "Minimum uploaded-video count", + "in": "query", + "name": "min_videos", + "type": "integer" + }, + { + "description": "Maximum uploaded-video count", + "in": "query", + "name": "max_videos", + "type": "integer" + }, + { + "description": "Minimum total view count", + "in": "query", + "name": "min_views", + "type": "integer" + }, + { + "description": "Maximum total view count", + "in": "query", + "name": "max_views", + "type": "integer" + }, + { + "description": "Channels created on or after this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "joined_after", + "type": "string" + }, + { + "description": "Channels created on or before this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "joined_before", + "type": "string" + }, + { + "description": "Records last refreshed on or after this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "hydrated_after", + "type": "string" + }, + { + "description": "Records last refreshed on or before this date (RFC3339 or YYYY-MM-DD)", + "in": "query", + "name": "hydrated_before", + "type": "string" + }, + { + "description": "Sort enum: relevance, followers_desc, followers_asc, views_desc, videos_desc, hydrated_at_desc, hydrated_at_asc", "enum": [ - "byRelevance", - "byNewest", - "byPopularity", - "byLowestPrice", - "byHighestPrice", - "byRating", - "byRatingCount" + "relevance", + "followers_desc", + "followers_asc", + "views_desc", + "videos_desc", + "hydrated_at_desc", + "hydrated_at_asc" ], "in": "query", "name": "sort", - "type": "string", - "x-example": "byRating" + "type": "string" }, { - "collectionFormat": "csv", - "description": "Repeatable, up to 10. Each value is \\", + "description": "Page number, defaults to 1", "in": "query", - "items": { - "type": "string" - }, - "name": "filter", - "type": "array", - "x-example": "brand_facet:ACANA" + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -306465,7 +383898,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.searchResponseDoc" + "$ref": "#/definitions/datasets.youtubeCreatorsSearchResponseDoc" } }, "400": { @@ -306480,8 +383913,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -306492,26 +383925,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search Chewy by keyword", + "summary": "Search the YouTube creators dataset", "tags": [ - "Chewy" + "Datasets" ] } }, - "/chewy/suggest": { + "/dawn/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Chewy's own search-box typeahead result for a partial query term: search-term suggestions (some resolving directly to a category/brand browse URL via their own url field) plus a handful of educational-content article suggestions. term is a partial query, e.g. \"salmon dog\" or \"blue buff\". Omit term entirely to get what Chewy shows on an empty search box instead: its current Popular Searches (each resolving to a category or brand listing) and Popular Articles.", - "operationId": "chewy-suggest", + "description": "Returns one Dawn article by its canonical `url` in the form `https://www.dawn.com/news//`. The response has the title, description, publish and update times, section, authors, lead image and body `paragraphs`. Blocked or malformed pages return an upstream error.", + "operationId": "dawn-article", "parameters": [ { - "description": "Partial search text, e.g. \\", + "description": "Canonical Dawn article URL", "in": "query", - "name": "term", + "name": "url", + "required": true, "type": "string", - "x-example": "salmon dog" + "x-example": "https://www.dawn.com/news/2032361/pm-shehbaz-stresses-islamabad-mou-implementation-in-meeting-with-pezeshkian" } ], "produces": [ @@ -306521,7 +383952,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.suggestResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -306530,8 +383961,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -306548,27 +383979,24 @@ "ApiKeyAuth": [] } ], - "summary": "Chewy search-box typeahead suggestions", + "summary": "Get Dawn article content", "tags": [ - "Chewy" + "Dawn" ] } }, - "/chewy/variants": { + "/dawn/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the full roster of purchasable variants for the product a given item belongs to -- every size, flavor, or color Chewy sells it in -- with each variant's own part number, price, Autoship price, stock, images, and the defining option that distinguishes it (e.g. Size = Medium). id is the numeric id from any chewy.com PDP URL; passing any one variant's id returns that variant's whole family, and the variant you asked for is flagged with is_requested. This answers a question chewy_product cannot: chewy_product describes only the single variant it was given and names its parent, but never lists the siblings or their prices. Only the defining option is returned, not the full attribute table -- use chewy_item_attributes for that.", - "operationId": "chewy-variants", + "description": "Returns one Dawn byline's public profile (name and biography, when Dawn publishes one) and their recent articles from a canonical author URL.", + "operationId": "dawn-author", "parameters": [ { - "description": "The numeric id from a chewy.com PDP URL, e.g. \\", + "description": "Canonical www.dawn.com/authors// URL", "in": "query", - "name": "id", + "name": "url", "required": true, "type": "string", - "x-example": "185468" + "x-example": "https://www.dawn.com/authors/675/khurram-husain" } ], "produces": [ @@ -306578,7 +384006,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chewy.variantsResponseDoc" + "$ref": "#/definitions/publicnews.dawnAuthorResponseDoc" } }, "400": { @@ -306593,8 +384021,69 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Dawn author profile", + "tags": [ + "Dawn" + ] + } + }, + "/dawn/headlines": { + "get": { + "description": "Returns the latest Dawn headlines for one section. `section` is required and takes a slug such as `pakistan`, `pakistan-sindh`, `world-south-asia`, `business-finance`, `sport-cricket`, `opinion` or `prism`. Each item has its title, URL, summary, publication time and, when the outlet provides one, image.", + "operationId": "dawn-headlines", + "parameters": [ + { + "description": "Dawn section slug", + "enum": [ + "pakistan", + "pakistan-balochistan", + "pakistan-ict", + "pakistan-kp-fata", + "pakistan-punjab", + "pakistan-sindh", + "world", + "world-south-asia", + "business", + "business-finance", + "sport", + "sport-cricket", + "opinion", + "tech", + "newspaper", + "magazines", + "prism" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "pakistan" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -306611,24 +384100,82 @@ "ApiKeyAuth": [] } ], - "summary": "List every size/flavor variant of a Chewy product", + "summary": "Get Dawn section headlines", "tags": [ - "Chewy" + "Dawn" ] } }, - "/chicagotribune/article": { + "/dawn/news": { "get": { - "description": "Returns public Chicago Tribune article metadata and body paragraphs from a canonical article URL. For subscriber-only articles the response carries the free lead-in with paywalled set to true.", - "operationId": "chicagotribune-article", + "description": "Returns the current top stories from Dawn, the Pakistani newspaper. Each item has its title, URL, summary, publication time and, when the outlet provides one, image. Takes no parameters; use `dawn-headlines` for a single section.", + "operationId": "dawn-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Dawn top stories", + "tags": [ + "Dawn" + ] + } + }, + "/dawn/sections": { + "get": { + "description": "Returns the complete public Dawn section inventory (Pakistan provinces, World, Business, Sport, Opinion, Technology, Newspaper, Magazines, and Prism) accepted by /dawn/headlines.", + "operationId": "dawn-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Dawn sections", + "tags": [ + "Dawn" + ] + } + }, + "/deadline/article": { + "get": { + "description": "Returns public Deadline article metadata (title, author(s), published/updated dates, section, lead image) and body paragraphs from a canonical article URL.", + "operationId": "deadline-article", "parameters": [ { - "description": "Canonical Chicago Tribune article URL", + "description": "Canonical Deadline article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.chicagotribune.com/2026/09/24/gov-jb-pritzker-illinois-lawmakers-data-centers/" + "x-example": "https://deadline.com/2026/09/example-story-1237111140/" } ], "produces": [ @@ -306665,30 +384212,31 @@ "ApiKeyAuth": [] } ], - "summary": "Get Chicago Tribune article content", + "summary": "Get Deadline article content", "tags": [ - "Chicago Tribune" + "Deadline" ] } }, - "/chicagotribune/author": { + "/deadline/author": { "get": { - "description": "Returns one Chicago Tribune author's public profile: name, job title when listed, bio, public email and X/Twitter handle, and their recent articles.", - "operationId": "chicagotribune-author", + "description": "Returns one Deadline staff writer or contributor's public profile: name, job title, headshot, biography, social/contact links, and one page of their recent articles.", + "operationId": "deadline-author", "parameters": [ { - "description": "Author slug, e.g. olivia-olander", + "description": "Canonical deadline.com/author/ URL", "in": "query", - "name": "slug", + "name": "url", + "required": true, "type": "string", - "x-example": "olivia-olander" + "x-example": "https://deadline.com/author/andreas-wiseman/" }, { - "description": "Canonical chicagotribune.com/author// URL; alternative to slug", + "description": "1-based page of recent articles to return; defaults to 1", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.chicagotribune.com/author/olivia-olander/" + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -306698,7 +384246,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.chicagoTribuneAuthorResponseDoc" + "$ref": "#/definitions/publicnews.deadlineAuthorResponseDoc" } }, "400": { @@ -306725,86 +384273,74 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Chicago Tribune author profile", + "summary": "Get a Deadline author profile", "tags": [ - "Chicago Tribune" + "Deadline" ] } }, - "/chicagotribune/headlines": { + "/deadline/headlines": { "get": { - "description": "Returns headlines from one Chicago Tribune section page. `section` is required and takes one of 60 slugs, such as `local-news`, `crime-public-safety`, `chicago-bears`, `restaurants-food-drink` or `naperville-sun`. Each story has a title, article URL, publication time, byline, excerpt and image where the card shows them. Most sections give about 10 stories.", - "operationId": "chicagotribune-headlines", + "description": "Returns the latest Deadline headlines for one section or vertical. `section` is required and takes one of 48 slugs, for example `film`, `tv`, `box-office`, `awards`, `casting`, `reviews` or `obituaries`. Each item has its title, URL, summary, publication time, author and image.", + "operationId": "deadline-headlines", "parameters": [ { - "description": "Chicago Tribune section slug", + "description": "Deadline section slug", "enum": [ + "acquisitions", + "agencies", + "album", + "below-the-line", + "books", + "cancellations-renewals", + "casting", + "commentary", + "culture", + "documentary", + "executives", + "festivals", + "late-night-tv", + "legal", "news", - "local-news", - "crime-public-safety", + "obituaries", + "podcast", "politics", - "elections", - "immigration", - "investigations", - "education", - "environment", - "health", - "history", - "marijuana", - "national", - "news-obituaries", - "science", - "weather", - "world", - "business", - "real-estate", - "transportation", - "technology", - "aurora-beacon-news", - "daily-southtown", - "elgin-courier-news", - "lake-county-news-sun", - "naperville-sun", - "post-tribune", - "opinion", - "columnists", - "commentary", - "editorials", - "letters-to-the-editor", + "predictions", + "primetime-pilot-panic", + "ratings", + "recaps", + "red-carpet-premieres", + "reviews", "sports", - "college-sports", - "mlb", - "chicago-cubs", - "chicago-white-sox", - "nfl", - "chicago-bears", - "nba", - "chicago-bulls", - "nhl", - "chicago-blackhawks", - "soccer", - "wnba", - "chicago-sky", - "things-to-do", - "arts", - "books", - "entertainment", - "home-garden", - "movies", - "music-concerts", - "restaurants-food-drink", + "touring", + "trailers", + "video-games", + "awards", + "awards-news", + "box-office", + "business", + "cover-stories", + "crew-call", + "dialogue", + "feature", + "film", + "flash-mob", + "hammond", + "hero-nation", + "international", + "look-back-look-ahead", + "music", + "resident-advisor", + "rough-cuts", "theater", - "travel", - "tv-streaming", - "fitness", - "advice", - "best-reviews" + "tv", + "video" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "news" + "x-example": "acquisitions" } ], "produces": [ @@ -306835,16 +384371,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Chicago Tribune section headlines", + "summary": "Get Deadline section headlines", "tags": [ - "Chicago Tribune" + "Deadline" ] } }, - "/chicagotribune/news": { + "/deadline/news": { "get": { - "description": "Returns the current Chicago Tribune top stories from its homepage, with no input needed. Each has a title and canonical article URL, plus publication time, byline, excerpt and lead image where the story card shows them.", - "operationId": "chicagotribune-news", + "description": "Returns the current Deadline Hollywood top stories from its main feed. Each item has its title, URL, summary, publication time, author and image. Takes no parameters; use `deadline-headlines` for a single section or vertical.", + "operationId": "deadline-news", "produces": [ "application/json" ], @@ -306855,6 +384391,12 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -306867,16 +384409,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Chicago Tribune top stories", + "summary": "Get Deadline top stories", "tags": [ - "Chicago Tribune" + "Deadline" ] } }, - "/chicagotribune/sections": { + "/deadline/sections": { "get": { - "description": "Lists the 60 Chicago Tribune sections accepted by `chicagotribune-headlines`, spanning news, suburban papers, opinion, sports teams and arts, such as `crime-public-safety`, `daily-southtown`, `chicago-cubs` and `theater`. Each has a `slug`, display `name` and page `url`. Tag pages and hubs that repeat the homepage are not included.", - "operationId": "chicagotribune-sections", + "description": "Lists the 48 Deadline sections accepted by `deadline-headlines`: 28 editorial categories such as `news`, `reviews` and `festivals`, and 20 verticals such as `film`, `tv`, `business` and `awards`. Each entry has the `slug`, `name` and feed `url`.", + "operationId": "deadline-sections", "produces": [ "application/json" ], @@ -306893,62 +384435,118 @@ "ApiKeyAuth": [] } ], - "summary": "Get Chicago Tribune sections", + "summary": "Get Deadline sections", "tags": [ - "Chicago Tribune" + "Deadline" ] } }, - "/chick-fil-a/content": { + "/deliveroo/fulfillment-times": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a Chick-fil-A editorial corpus. `type` selects which: `press-room` (289 press releases), `story` (189 blog articles), `page` (147 standalone corporate pages such as hunger relief and community programmes), `legal` (28 terms, policies and promotion rules) or `downloadable-asset` (45 press-kit media entries, which carry a title and link only and never a body). Between them these are every content-bearing corpus Chick-fil-A publishes outside the menu and restaurant catalogs. Article bodies are opt-in via include_body because a single press release runs to roughly 22KB, so a default-on page of 20 would be several hundred KB; without it the endpoint returns titles, links, publish dates and excerpts.", - "operationId": "chick-fil-a-content", + "description": "Returns the exact same \"Choose a day\" / \"Choose a time\" scheduled-ordering data the real site's own order-ahead picker shows for a location, for both delivery and pickup: an ASAP option plus every day currently open for a scheduled order, each with its real time slots and UNIX timestamps.", + "operationId": "deliveroo-fulfillment-times", "parameters": [ { - "description": "Which corpus. One of press-room, story, page, legal, downloadable-asset.", - "enum": [ - "press-room", - "story", - "page", - "legal", - "downloadable-asset" - ], + "description": "Search center latitude", "in": "query", - "name": "type", + "name": "latitude", "required": true, - "type": "string", - "x-example": "press-room" + "type": "number", + "x-example": 51.4975 }, { - "description": "Free-text filter. Results are relevance-ranked when present; otherwise newest first.", + "description": "Search center longitude", "in": "query", - "name": "search", - "type": "string", - "x-example": "community" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -0.1357 }, { - "description": "1-based page number (default 1)", + "description": "Deliveroo national market to search (default uk)", + "enum": [ + "uk", + "ie", + "fr", + "it", + "be", + "ae", + "kw" + ], "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "market", + "type": "string", + "x-example": "uk" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/deliveroo.fulfillmentTimesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Entries per page, 1-100 (default 20)", + "ApiKeyAuth": [] + } + ], + "summary": "Get Deliveroo's live delivery and pickup scheduling windows for a location", + "tags": [ + "Deliveroo" + ] + } + }, + "/deliveroo/restaurant": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one Deliveroo partner's detail by uname -- restaurant, grocery, or shopping store alike, distinguished by branch_type: name, address, currency, branch/fulfillment type, rating, review count, a hero image, and whether it currently accepts orders.", + "operationId": "deliveroo-restaurant", + "parameters": [ + { + "description": "Restaurant slug, from a search response's uname field", "in": "query", - "name": "per_page", - "type": "integer", - "x-example": 20 + "name": "uname", + "required": true, + "type": "string", + "x-example": "nandos-wilton-road" }, { - "description": "Include the full article body (default false -- bodies are large)", + "description": "Deliveroo national market the uname was found in (default uk)", + "enum": [ + "uk", + "ie", + "fr", + "it", + "be", + "ae", + "kw" + ], "in": "query", - "name": "include_body", - "type": "boolean", - "x-example": false + "name": "market", + "type": "string", + "x-example": "uk" } ], "produces": [ @@ -306958,7 +384556,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chickfila.contentResponseDoc" + "$ref": "#/definitions/deliveroo.restaurantResponseDoc" } }, "400": { @@ -306973,12 +384571,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -306991,50 +384583,43 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Chick-fil-A press releases, legal documents and press-kit assets", + "summary": "Get one Deliveroo restaurant, grocery, or shopping partner's detail", "tags": [ - "Chick-fil-A" + "Deliveroo" ] } }, - "/chick-fil-a/content-taxonomy": { + "/deliveroo/restaurant/menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a content taxonomy's terms, each with its id, name, slug, parent and the number of entries carrying it. Every id is a ready-to-use `category` or `tag` filter value on GET /chick-fil-a/content, which is what makes the editorial corpora navigable rather than only pageable. `taxonomy` selects the vocabulary: `press_category` (16 terms) and `press_tag` (96) classify press releases, `story_category` (9) and `story_tag` (74) classify blog stories, `legal_category` (8) and `downloadable_asset_category` (7) classify those corpora, and `campaign` (9) is applied across several at once. Terms are ordered by name.", - "operationId": "chick-fil-a-content-taxonomy", + "description": "Returns one partner's full menu or catalog grouped into categories -- restaurant menus, grocery aisles, and shopping-store catalogs all use this same endpoint (see /deliveroo/search's collection parameter). Every item carries a name, description, product-meta text when the upstream provides it (calorie counts on restaurant items, per-unit pricing like \"380g · £15.79/kg\" on grocery/shopping items), price, availability, and its resolved customization options (e.g. \"Choose your meal\", \"Add ingredients?\") with each option's own price and required/multi-select bounds.", + "operationId": "deliveroo-restaurant-menu", "parameters": [ { - "description": "Which vocabulary. One of press_category, press_tag, story_category, story_tag, legal_category, downloadable_asset_category, campaign.", - "enum": [ - "press_category", - "press_tag", - "story_category", - "story_tag", - "legal_category", - "downloadable_asset_category", - "campaign" - ], + "description": "Restaurant slug, from a search response's uname field", "in": "query", - "name": "taxonomy", + "name": "uname", "required": true, "type": "string", - "x-example": "press_category" - }, - { - "description": "1-based page number (default 1)", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "nandos-wilton-road" }, { - "description": "Terms per page, 1-100 (default 20)", + "description": "Deliveroo national market the uname was found in (default uk)", + "enum": [ + "uk", + "ie", + "fr", + "it", + "be", + "ae", + "kw" + ], "in": "query", - "name": "per_page", - "type": "integer", - "x-example": 100 + "name": "market", + "type": "string", + "x-example": "uk" } ], "produces": [ @@ -307044,7 +384629,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chickfila.contentTaxonomyResponseDoc" + "$ref": "#/definitions/deliveroo.menuResponseDoc" } }, "400": { @@ -307059,12 +384644,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -307077,47 +384656,168 @@ "ApiKeyAuth": [] } ], - "summary": "List the category and tag vocabularies Chick-fil-A classifies its content under", + "summary": "Get one Deliveroo restaurant, grocery, or shopping partner's priced catalog", "tags": [ - "Chick-fil-A" + "Deliveroo" ] } }, - "/chick-fil-a/faq": { + "/deliveroo/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of Chick-fil-A's published customer FAQ corpus (522 entries at time of writing) across 30 categories -- Chick-fil-A One membership, points and rewards, digital ordering and payment, delivery support, sweepstakes terms, and more. Each entry carries the question, the answer as plain text, the answer's original HTML (a fair number of answers use links, lists and tables that plain text loses), and its resolved categories. Every categories[].id is a ready-to-use value for the category filter. search matches over question and answer text and is relevance-ranked; without it entries come back alphabetically so a caller can page through the whole corpus deterministically.", - "operationId": "chick-fil-a-faq", + "description": "Returns the restaurants (or, with collection set, grocery/shopping stores) Deliveroo's own catalog serves for a latitude/longitude in the given market -- the location's entire feed, not a curated subset (confirmed live: up to 2,700+ results for a single coordinate). Each result carries its uname (the value the restaurant and menu endpoints take), name, image, branch_type, and, when available, rating, delivery time, and distance. Optional collection, cuisine, dietary, dish, min_rating, max_delivery_minutes, max_delivery_fee_pounds, has_offer, deliveroos_choice, and sort parameters narrow and order the same feed -- call /deliveroo/search/filters for the current, complete, location-scoped list of every valid cuisine/dietary/dish value with live result counts. A location with no coverage returns an empty list rather than an error.", + "operationId": "deliveroo-search", "parameters": [ { - "description": "Free-text filter over question and answer text. Results are relevance-ranked when present.", + "description": "Search center latitude", "in": "query", - "name": "search", + "name": "latitude", + "required": true, + "type": "number", + "x-example": 51.4975 + }, + { + "description": "Search center longitude", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -0.1357 + }, + { + "description": "Deliveroo national market to search (default uk)", + "enum": [ + "uk", + "ie", + "fr", + "it", + "be", + "ae", + "kw" + ], + "in": "query", + "name": "market", "type": "string", - "x-example": "delivery" + "x-example": "uk" }, { - "description": "Comma-separated faq_category term ids, up to 20, from any prior response's categories[].id", + "description": "Restaurants to return, clamped to 100 (default 20)", "in": "query", - "name": "category", + "name": "limit", + "type": "integer", + "x-example": 20 + }, + { + "description": "Optional, passed straight through to the upstream. Selects the Deliveroo partner vertical: omit for restaurants/takeaways (default), grocery for supermarkets and convenience stores, shopping for non-food retail -- both confirmed live; other values may exist and are not rejected. Every result uses the same uname contract for /deliveroo/restaurant and /deliveroo/restaurant/menu.", + "in": "query", + "name": "collection", "type": "string", - "x-example": "58" + "x-example": "grocery" }, { - "description": "1-based page number (default 1)", + "collectionFormat": "multi", + "description": "Optional, repeatable Deliveroo cuisine filter, e.g. cuisine=american&cuisine=asian. Passed straight through to the upstream; call /deliveroo/search/filters for the current, complete, location-scoped list of valid values. An unrecognized value is silently ignored by the upstream, not rejected.", "in": "query", - "name": "page", + "items": { + "type": "string" + }, + "name": "cuisine", + "type": "array", + "x-example": "american" + }, + { + "collectionFormat": "multi", + "description": "Optional, repeatable Deliveroo dietary filter passed straight through to the upstream, e.g. dietary=vegan. Call /deliveroo/search/filters for the current, complete list of valid values. An unrecognized value is silently ignored by the upstream, not rejected.", + "in": "query", + "items": { + "type": "string" + }, + "name": "dietary", + "type": "array", + "x-example": "vegan" + }, + { + "collectionFormat": "multi", + "description": "Optional, repeatable Deliveroo dish-level filter passed straight through to the upstream, e.g. dish=pizza&dish=sushi. Call /deliveroo/search/filters for the current, complete, location-scoped list of valid values. An unrecognized value is silently ignored by the upstream, not rejected.", + "in": "query", + "items": { + "type": "string" + }, + "name": "dish", + "type": "array", + "x-example": "pizza" + }, + { + "description": "When true, only returns results Deliveroo itself marks top-rated (its own 4.5+ threshold). Equivalent to min_rating=4.5; ignored if min_rating is also set.", + "in": "query", + "name": "top_rated", + "type": "boolean", + "x-example": true + }, + { + "description": "Minimum star rating filter", + "enum": [ + 3.5, + 4, + 4.5 + ], + "in": "query", + "name": "min_rating", + "type": "number", + "x-example": 4 + }, + { + "description": "Maximum estimated delivery time in minutes", + "enum": [ + 20, + 30, + 45 + ], + "in": "query", + "name": "max_delivery_minutes", "type": "integer", - "x-example": 1 + "x-example": 30 }, { - "description": "Entries per page, 1-100 (default 20)", + "description": "Maximum delivery fee in GBP", + "enum": [ + 1, + 2, + 3 + ], "in": "query", - "name": "per_page", + "name": "max_delivery_fee_pounds", "type": "integer", - "x-example": 20 + "x-example": 2 + }, + { + "description": "When true, only returns results currently running an offer/promotion", + "in": "query", + "name": "has_offer", + "type": "boolean", + "x-example": true + }, + { + "description": "Result ordering", + "enum": [ + "recommended", + "distance", + "time", + "rating" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "distance" + }, + { + "description": "When true, only returns results in Deliveroo's own Deliveroo's Choice curated collection. Combines with collection (e.g. collection=grocery&deliveroos_choice=true narrows to Deliveroo's Choice within the grocery vertical) rather than conflicting with it.", + "in": "query", + "name": "deliveroos_choice", + "type": "boolean", + "x-example": true } ], "produces": [ @@ -307127,7 +384827,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chickfila.faqResponseDoc" + "$ref": "#/definitions/deliveroo.searchResponseDoc" } }, "400": { @@ -307136,18 +384836,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -307160,33 +384848,51 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Chick-fil-A customer FAQs", + "summary": "Search Deliveroo restaurants, groceries, or shopping stores near a location", "tags": [ - "Chick-fil-A" + "Deliveroo" ] } }, - "/chick-fil-a/location": { + "/deliveroo/search/filters": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Chick-fil-A restaurant's street address, opening hours, cuisine description and photo, selected by either its numeric id or its slug (supply exactly one of the two -- passing both is rejected). opening_hours carries one entry per day; a day Chick-fil-A publishes as closed (notably every Sunday, and every day for a seasonal or food-truck location that is not currently operating) comes back with closed=true and empty opens/closes rather than a placeholder time. This response carries a postal address but no latitude/longitude -- Chick-fil-A does not publish coordinates for its restaurants, and this endpoint does not synthesize them.", - "operationId": "chick-fil-a-location", + "description": "Returns the exact same sort and filter catalog -- every cuisine, dietary tag, dish, delivery-time tier, delivery-fee tier, star-rating tier, and offer flag, each with a live result count for this location -- that the real search page's own filter dropdowns are populated from. Every option's query_param/query_value pair is the literal query string /deliveroo/search accepts for that filter.", + "operationId": "deliveroo-search-filters", "parameters": [ { - "description": "Numeric WordPress post id. Supply either id or slug, not both.", + "description": "Search center latitude", "in": "query", - "name": "id", - "type": "integer", - "x-example": 53696 + "name": "latitude", + "required": true, + "type": "number", + "x-example": 51.4975 }, { - "description": "Restaurant slug, e.g. from a directory response. Supply either id or slug, not both.", + "description": "Search center longitude", "in": "query", - "name": "slug", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -0.1357 + }, + { + "description": "Deliveroo national market to search (default uk)", + "enum": [ + "uk", + "ie", + "fr", + "it", + "be", + "ae", + "kw" + ], + "in": "query", + "name": "market", "type": "string", - "x-example": "branson-food-truck" + "x-example": "uk" } ], "produces": [ @@ -307196,7 +384902,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chickfila.locationResponseDoc" + "$ref": "#/definitions/deliveroo.filtersResponseDoc" } }, "400": { @@ -307205,14 +384911,56 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Deliveroo's live search filter and sort catalog for a location", + "tags": [ + "Deliveroo" + ] + } + }, + "/denverpost/article": { + "get": { + "description": "Returns article metadata and paragraphs present on the public page. Subscriber-only pages may expose only an anonymous preview; this service does not bypass access controls.", + "operationId": "denverpost-article", + "parameters": [ + { + "description": "Canonical Denver Post article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.denverpost.com/2026/09/29/colorado-oportunity-zones-investment/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -307229,40 +384977,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Chick-fil-A restaurant's address and hours", + "summary": "Get a Denver Post article", "tags": [ - "Chick-fil-A" + "The Denver Post" ] } }, - "/chick-fil-a/locations": { + "/denverpost/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of Chick-fil-A's restaurant directory (3,467 restaurants at time of writing): each restaurant's id, slug, name, US state and its page URL. search filters by free text over restaurant names and is relevance-ranked; without it restaurants come back alphabetically so a caller can page through the whole directory deterministically. This index deliberately carries no address or hours -- Chick-fil-A does not expose them on the directory listing. Pass a slug from here to GET /chick-fil-a/location to get street address and opening hours for one restaurant.", - "operationId": "chick-fil-a-locations", + "description": "Returns a Denver Post author's profile and the articles on the first page of their archive. Give exactly one of `slug` (for example `aldo-svaldi`) or `url` (a denverpost.com/author// link). The profile has name, job title, bio, email and Twitter handle where the page shows them; each article has a title, URL, summary and publication time.", + "operationId": "denverpost-author", "parameters": [ { - "description": "Free-text filter over restaurant names. Results are relevance-ranked when present.", + "description": "Author slug, e.g. aldo-svaldi", "in": "query", - "name": "search", + "name": "slug", "type": "string", - "x-example": "branson" - }, - { - "description": "1-based page number (default 1)", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "aldo-svaldi" }, { - "description": "Restaurants per page, 1-100 (default 20)", + "description": "Canonical denverpost.com/author// URL; alternative to slug", "in": "query", - "name": "per_page", - "type": "integer", - "x-example": 20 + "name": "url", + "type": "string", + "x-example": "https://www.denverpost.com/author/aldo-svaldi/" } ], "produces": [ @@ -307272,7 +385010,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chickfila.locationsResponseDoc" + "$ref": "#/definitions/publicnews.denverPostAuthorResponseDoc" } }, "400": { @@ -307287,12 +385025,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -307305,68 +385037,101 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Chick-fil-A restaurant locations", + "summary": "Get a Denver Post author archive", "tags": [ - "Chick-fil-A" + "The Denver Post" ] } }, - "/chick-fil-a/menu": { + "/denverpost/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of Chick-fil-A's published menu catalog (567 items at time of writing): item name, slug, Chick-fil-A's own item tag, an ordering deep link, and the taxonomy term ids the item belongs to. Every id in a response's menu_taxonomy_ids, menu_item_type_ids, menu_item_group_ids and nutrition_table_menu_ids is a ready-to-use filter value for a follow-up call, and GET /chick-fil-a/menu-taxonomy lists each taxonomy's terms with their names. search filters by free text and is ranked by relevance; without it items come back alphabetically so a caller can page through the whole catalog deterministically. Note this catalog carries no prices or nutrition values -- Chick-fil-A does not publish either through this source.", - "operationId": "chick-fil-a-menu", + "description": "Returns current headlines for one Denver Post section or topic archive. `section` is required and must be a slug from the sections endpoint, such as `business`, `denver-broncos`, `colorado` or `weather`; an invalid value returns an invalid-params error. Items carry title and URL, plus summary, author, publication time and image when the card shows them. Cards without a dated Denver Post article URL are skipped.", + "operationId": "denverpost-headlines", "parameters": [ { - "description": "Free-text filter over item names. Results are relevance-ranked when present.", - "in": "query", - "name": "search", - "type": "string", - "x-example": "nuggets" - }, - { - "description": "Comma-separated menu_taxonomy term ids (menu section, e.g. Breakfast, Beverages), up to 20", - "in": "query", - "name": "menu_taxonomy", - "type": "string", - "x-example": "265" - }, - { - "description": "Comma-separated menu_item_type term ids (ITEM, ITEM_GROUPING, MODIFIER), up to 20", - "in": "query", - "name": "menu_item_type", - "type": "string", - "x-example": "431" - }, - { - "description": "Comma-separated menu_item_group term ids (the grouping a variant belongs to), up to 20", - "in": "query", - "name": "menu_item_group", - "type": "string", - "x-example": "899" - }, - { - "description": "Comma-separated nutrition_table_menu term ids (published nutrition-table grouping), up to 20", + "description": "Section or topic slug returned by denverpost-sections", + "enum": [ + "news", + "latest-headlines", + "colorado", + "politics", + "crime-public-safety", + "courts", + "national", + "world", + "education", + "health", + "environment", + "transportation", + "housing", + "news-obituaries", + "photos-and-videos", + "weather", + "sports", + "sports-columnists", + "denver-broncos", + "colorado-rockies", + "denver-nuggets", + "colorado-avalanche", + "colorado-rapids", + "denver-summit-fc", + "college", + "colorado-preps", + "betting", + "golf", + "boxing-mma", + "sports-podcasts", + "business", + "colorado-real-estate", + "airlines", + "economy", + "energy", + "retail", + "colorado-technology", + "best-reviews", + "theknow", + "restaurants-food-drink", + "arts", + "culture", + "movies", + "television", + "music", + "theater", + "travel", + "parenting-family", + "bars", + "beer", + "outdoors", + "hiking", + "fall-colors", + "cycling", + "fitness", + "running", + "camping", + "fishing", + "hunting", + "water-sports", + "skiing", + "snowboarding", + "winter-sports", + "opinion", + "editorials", + "opinion-columnists", + "letters", + "endorsements", + "things-to-do", + "horoscopes", + "advice", + "home-garden", + "free-and-cheap", + "cannabis", + "recipes" + ], "in": "query", - "name": "nutrition_table_menu", + "name": "section", + "required": true, "type": "string", - "x-example": "368" - }, - { - "description": "1-based page number (default 1)", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Items per page, 1-100 (default 20)", - "in": "query", - "name": "per_page", - "type": "integer", - "x-example": 20 + "x-example": "news" } ], "produces": [ @@ -307376,7 +385141,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chickfila.menuResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -307385,14 +385150,101 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Denver Post section headlines", + "tags": [ + "The Denver Post" + ] + } + }, + "/denverpost/news": { + "get": { + "description": "Returns the article cards on the Denver Post homepage, about 91 when last checked, though the count varies as the site updates. Each item has a title and URL and can carry a summary, author, publication time, image and `type`. It takes no parameters.", + "operationId": "denverpost-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Denver Post top stories", + "tags": [ + "The Denver Post" + ] + } + }, + "/denverpost/sections": { + "get": { + "description": "Lists the Denver Post slugs that the headlines endpoint accepts: 56 editorial sections and 19 topic archives, checked on 2026-09-30. Examples are `colorado`, `denver-broncos`, `economy` and `hiking`. Each entry has a `slug`, `name` and `url`. Branded content and cartoons are left out.", + "operationId": "denverpost-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Denver Post section and topic inventory", + "tags": [ + "The Denver Post" + ] + } + }, + "/depop/brands": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Depop's full brand directory (id, name, slug), not just brands with active listings for a given search -- resolves the search endpoint's otherwise-opaque brand_ids filter to human-readable names. Public data sourced from Depop's own brand-directory API.", + "operationId": "depop-brands", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/depop.brandsResponseDoc" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -307409,33 +385261,62 @@ "ApiKeyAuth": [] } ], - "summary": "Browse the Chick-fil-A menu", + "summary": "Depop's full brand directory", + "tags": [ + "Depop" + ] + } + }, + "/depop/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Depop's full department, category, and subcategory taxonomy -- every value usable with /depop/search's and /depop/shop/{username}'s category/subcategory filters. Tries a live refresh from Depop's own category-filter API first and falls back to a static snapshot on any failure, so this never errors.", + "operationId": "depop-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/depop.categoriesResponseDoc" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Depop's category taxonomy", "tags": [ - "Chick-fil-A" + "Depop" ] } }, - "/chick-fil-a/menu-item": { + "/depop/item/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Chick-fil-A menu item, selected by either its numeric id or its slug (supply exactly one of the two -- passing both is rejected). Unlike the listing endpoint, this resolves the item's taxonomy term ids to names, so menu_sections, item_types, item_groups and nutrition_tables each come back as {id, name, slug} triples rather than bare ids. Term resolution is best-effort: if the taxonomy lookups fail the item is still returned with ids and empty names rather than failing the whole call. This item detail carries no price and no nutrition values -- Chick-fil-A does not publish either through this source.", - "operationId": "chick-fil-a-menu-item", + "description": "Returns a Depop item-detail page: description, all photos, price, condition, brand, size, seller info, and a \"similar items\" carousel when the page has one.", + "operationId": "depop-item", "parameters": [ { - "description": "Numeric WordPress post id. Supply either id or slug, not both.", - "in": "query", - "name": "id", - "type": "integer", - "x-example": 10613 - }, - { - "description": "Item slug, e.g. from a listing response. Supply either id or slug, not both.", - "in": "query", + "description": "Depop item URL slug, e.g. from a search result's id field", + "in": "path", "name": "slug", + "required": true, "type": "string", - "x-example": "chick-fil-a-filet" + "x-example": "ag_boutique-vintage-mid-rise-bootcut-levi-2476" } ], "produces": [ @@ -307445,7 +385326,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chickfila.menuItemResponseDoc" + "$ref": "#/definitions/depop.ItemDetailResponse" } }, "400": { @@ -307460,8 +385341,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -307478,47 +385359,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Chick-fil-A menu item", + "summary": "Get Depop item detail", "tags": [ - "Chick-fil-A" + "Depop" ] } }, - "/chick-fil-a/menu-taxonomy": { + "/depop/item/{slug}/similar": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of terms for a single Chick-fil-A menu taxonomy, with each term's id, name, slug, parent and how many menu items carry it. This is how to discover the filter ids GET /chick-fil-a/menu accepts. taxonomy must be one of `menu_taxonomy` (customer-facing menu section -- Breakfast, Beverages, Catering Entrées, ... 36 terms), `menu_item_type` (`ITEM`, `ITEM_GROUPING`, `MODIFIER` -- 3 terms), `menu_item_group` (the grouping a variant belongs to, e.g. \"Bacon, Egg & Cheese Biscuit\" -- 100+ terms), or `nutrition_table_menu` (the grouping used by Chick-fil-A's published nutrition tables -- 18 terms). Terms come back alphabetically.", - "operationId": "chick-fil-a-menu-taxonomy", + "description": "Returns items similar to a given Depop listing, via Depop's dedicated similar-items API -- richer and paginated (up to 150 per page) compared to the small, non-paginated \"similar items\" carousel already included in item detail. Public data sourced from Depop's own similar-items API.", + "operationId": "depop-item-similar", "parameters": [ { - "description": "Which taxonomy to list. One of menu_taxonomy, menu_item_type, menu_item_group, nutrition_table_menu.", - "enum": [ - "menu_taxonomy", - "menu_item_type", - "menu_item_group", - "nutrition_table_menu" - ], - "in": "query", - "name": "taxonomy", + "description": "Depop item URL slug, e.g. from a search result's id field", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "menu_taxonomy" + "x-example": "ag_boutique-vintage-mid-rise-bootcut-levi-2476" }, { - "description": "1-based page number (default 1)", + "description": "Max results per page, 1-150", "in": "query", - "name": "page", + "name": "limit", "type": "integer", - "x-example": 1 + "x-example": 24 }, { - "description": "Terms per page, 1-100 (default 20)", + "description": "Opaque pagination cursor from a previous response's next_cursor field. Omit for the first page.", "in": "query", - "name": "per_page", - "type": "integer", - "x-example": 100 + "name": "after", + "type": "string" } ], "produces": [ @@ -307528,7 +385402,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chickfila.menuTaxonomyResponseDoc" + "$ref": "#/definitions/depop.similarItemsResponseDoc" } }, "400": { @@ -307543,8 +385417,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -307561,41 +385435,115 @@ "ApiKeyAuth": [] } ], - "summary": "List one Chick-fil-A menu taxonomy's terms", + "summary": "Get Depop items similar to a listing", "tags": [ - "Chick-fil-A" + "Depop" ] } }, - "/chipotle/ingredients": { + "/depop/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns Chipotle's raw-ingredient content pages -- sourcing story, marketing copy, imagery -- and the per-item recipe breakdown. ingredients[] has one entry per raw ingredient (Avocado, Yellow Onion, ...), each with its facts/sourcing copy and the menu_item_ids it appears in. ingredient_groups[] is the reverse view: one entry per recipe category (proteins, rice and beans, ...) listing each item's exact ingredient_keys, joinable against ingredients[].key for the human-readable name. Nothing else in this family exposes either ingredient content or recipe-level composition.", - "operationId": "chipotle-ingredients", + "description": "Searches Depop's resale-fashion marketplace by free-text keyword, with optional price, condition, colour, category, subcategory, gender, kids-department, brand, discount, and sort filters, returning listing summaries (title, price, brand, condition, like count, photos, sizes), a pagination cursor, and the total matching count.", + "operationId": "depop-search", "parameters": [ { - "description": "Ordering surface. One of web, web-mobile. Default web-mobile.", - "enum": [ - "web", - "web-mobile" - ], + "description": "Free-text keyword search", "in": "query", - "name": "channel", + "name": "query", + "required": true, "type": "string", - "x-example": "web-mobile" + "x-example": "nike jacket" }, { - "description": "Country catalog. One of US, CA. Default US.", - "enum": [ - "US", - "CA" - ], + "description": "Minimum listing price in USD", "in": "query", - "name": "region", + "name": "price_min", + "type": "number", + "x-example": 15 + }, + { + "description": "Maximum listing price in USD", + "in": "query", + "name": "price_max", + "type": "number", + "x-example": 50 + }, + { + "description": "Comma-separated condition filter: brand_new, used_like_new, used_excellent, used_good, used_fair", + "in": "query", + "name": "condition", "type": "string", - "x-example": "US" + "x-example": "used_excellent,used_good" + }, + { + "description": "Comma-separated colour filter: black, grey, white, brown, tan, cream, yellow, red, burgundy, orange, pink, purple, blue, navy, green, khaki, multi", + "in": "query", + "name": "colours", + "type": "string", + "x-example": "black,white" + }, + { + "description": "Restrict results to discounted listings", + "in": "query", + "name": "on_sale", + "type": "boolean" + }, + { + "description": "Sort order: relevance, price_low_to_high, price_high_to_low", + "in": "query", + "name": "sort", + "type": "string", + "x-example": "price_low_to_high" + }, + { + "description": "Depop category slug: tops, bottoms, dresses, coats-jackets, jumpsuit-and-playsuit, suits, footwear, accessories, nightwear, underwear, swim-beach-wear, fancy-dress, sleepsuits-and-bodysuits, bundles, beauty, face-masks, home, tech-accessories, film, art, books-and-magazine, music, party-supplies, sports-equipment-accesories, toys, umbrella. See GET /depop/categories for a machine-readable enumeration with names and subcategories.", + "in": "query", + "name": "category", + "type": "string", + "x-example": "tops" + }, + { + "description": "Comma-separated Depop subcategory slug(s), scoped within category. See GET /depop/categories for the full list per category.", + "in": "query", + "name": "subcategory", + "type": "string", + "x-example": "tshirts,hoodies" + }, + { + "description": "Department filter: female, male", + "in": "query", + "name": "gender", + "type": "string", + "x-example": "female" + }, + { + "description": "Kids-department filter: true restricts results to kids items only, false excludes them, omitted returns both.", + "in": "query", + "name": "is_kids", + "type": "boolean" + }, + { + "description": "Comma-separated Depop internal numeric brand ids. Not documented by Depop -- find a brand's id by browsing its depop.com/brands// page.", + "in": "query", + "name": "brand_ids", + "type": "string", + "x-example": "219" + }, + { + "description": "Comma-separated Depop size composite ids (format {size_set_id}.{id}, e.g. \\", + "in": "query", + "name": "sizes", + "type": "string", + "x-example": "4.17" + }, + { + "description": "Opaque pagination cursor from a previous response's next_cursor field. Omit for the first page.", + "in": "query", + "name": "after", + "type": "string" } ], "produces": [ @@ -307605,7 +385553,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chipotle.ingredientsResponseDoc" + "$ref": "#/definitions/depop.searchResponseDoc" } }, "400": { @@ -307614,8 +385562,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -307632,19 +385580,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Chipotle's ingredient content catalog", + "summary": "Search Depop listings", "tags": [ - "Chipotle" + "Depop" ] } }, - "/chipotle/meals": { + "/depop/search-sellers": { "get": { "consumes": [ "application/json" ], - "description": "Returns Chipotle's preset meal definitions -- the named combinations its ordering flow offers (Build-Your-Own Chicken and similar), each with an id, name, type and a description listing what the meal contains. Takes no parameters.", - "operationId": "chipotle-meals", + "description": "Finds Depop users/sellers by name or username. A matched result's username can be passed directly to GET /depop/shop/{username} for that seller's full shop. Public data sourced from Depop's own user-search API.", + "operationId": "depop-search-sellers", + "parameters": [ + { + "description": "Seller name or username to search for", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "vintage nike" + } + ], "produces": [ "application/json" ], @@ -307652,52 +385610,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chipotle.mealsResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/depop.searchSellersResponseDoc" } }, - "503": { - "description": "Service Unavailable", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Chipotle's preset meal definitions", - "tags": [ - "Chipotle" - ] - } - }, - "/chipotle/menu": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Chipotle's restaurant-independent menu catalog -- every item it sells nationally, split into entrees, sides and drinks, with each item's category, type, primary filling and full customization tree. Takes no parameters. Prices are deliberately omitted from this response: Chipotle prices per restaurant, so the upstream returns every price as zero here, and surfacing a field of zeros would read as \"free\" rather than \"unpriced\". Use GET /chipotle/restaurant/menu for real prices.", - "operationId": "chipotle-menu", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/chipotle.nationalMenuResponseDoc" - } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -307714,41 +385637,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Chipotle's national menu catalog", + "summary": "Search Depop sellers by name", "tags": [ - "Chipotle" + "Depop" ] } }, - "/chipotle/menu/metadata": { + "/depop/search/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns Chipotle's menu presentation metadata -- the data no other Chipotle endpoint carries. Categories are the menu nav sections (Burrito, Bowl, Salad, ...) with their own description, imagery and the customization sections each offers. Items carry per-item nutrition (calories and portion) and dietary tag codes. Item sections and item groups describe the customization pick-groups and shared item aliases (e.g. cauliflower rice offered as both an entree side and a taco filling). Dietary tag groups are the full tag taxonomy (Plant Based, Lifestyle, I'm Avoiding, ...) that item dietary tag codes join against for a human-readable name and badge. Join on item_id against /chipotle/menu or /chipotle/restaurant/menu for prices; this endpoint has none.", - "operationId": "chipotle-menu-metadata", + "description": "Returns result-count breakdowns per department/category/subcategory for a search query, via Depop's dedicated aggregates API -- a distinct upstream call from search itself, not embedded in its response. Public data sourced from Depop's own search-aggregates API.", + "operationId": "depop-search-facets", "parameters": [ { - "description": "Ordering surface. One of web, web-mobile. Default web-mobile.", - "enum": [ - "web", - "web-mobile" - ], - "in": "query", - "name": "channel", - "type": "string", - "x-example": "web-mobile" - }, - { - "description": "Country catalog. One of US, CA. Default US.", - "enum": [ - "US", - "CA" - ], + "description": "Free-text keyword search", "in": "query", - "name": "region", + "name": "query", + "required": true, "type": "string", - "x-example": "US" + "x-example": "bandage dress" } ], "produces": [ @@ -307758,7 +385667,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chipotle.menuMetadataResponseDoc" + "$ref": "#/definitions/depop.searchFacetsResponseDoc" } }, "400": { @@ -307767,8 +385676,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -307785,27 +385694,96 @@ "ApiKeyAuth": [] } ], - "summary": "Get Chipotle's menu presentation metadata", + "summary": "Depop search result-count breakdowns", "tags": [ - "Chipotle" + "Depop" ] } }, - "/chipotle/restaurant": { + "/depop/shop/{username}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Chipotle restaurant by its numeric restaurant number. Note this single-restaurant route returns a leaner record than GET /chipotle/restaurants: the proximity search accepts an embeds parameter that pulls in hours and capability flags, and no such parameter exists here, so those fields may be absent. If you need the full record for a known restaurant, call /chipotle/restaurants with a tight radius around it instead.", - "operationId": "chipotle-restaurant", + "description": "Returns a Depop seller's public shop: profile (rating, sold count, followers, bio) plus current listings, with optional price, condition, colour, category, subcategory, gender, discount, and sort filters. Public data sourced from Depop's own shop pages.", + "operationId": "depop-shop", "parameters": [ { - "description": "Chipotle's numeric restaurant id", - "in": "query", - "name": "restaurant_number", + "description": "Depop seller username, e.g. from a shop page URL segment", + "in": "path", + "name": "username", "required": true, "type": "string", - "x-example": "3982" + "x-example": "villafanashop" + }, + { + "description": "Minimum listing price in USD", + "in": "query", + "name": "price_min", + "type": "number", + "x-example": 15 + }, + { + "description": "Maximum listing price in USD", + "in": "query", + "name": "price_max", + "type": "number", + "x-example": 50 + }, + { + "description": "Comma-separated condition filter: brand_new, used_like_new, used_excellent, used_good, used_fair", + "in": "query", + "name": "condition", + "type": "string", + "x-example": "used_excellent,used_good" + }, + { + "description": "Comma-separated colour filter: black, grey, white, brown, tan, cream, yellow, red, burgundy, orange, pink, purple, blue, navy, green, khaki, multi", + "in": "query", + "name": "colours", + "type": "string", + "x-example": "black,white" + }, + { + "description": "Restrict results to discounted listings", + "in": "query", + "name": "on_sale", + "type": "boolean" + }, + { + "description": "Sort order: relevance, price_low_to_high, price_high_to_low, recently_listed", + "in": "query", + "name": "sort", + "type": "string", + "x-example": "price_low_to_high" + }, + { + "description": "Depop category slug: tops, bottoms, dresses, coats-jackets, jumpsuit-and-playsuit, suits, footwear, accessories, nightwear, underwear, swim-beach-wear, fancy-dress, sleepsuits-and-bodysuits, bundles, beauty, face-masks, home, tech-accessories, film, art, books-and-magazine, music, party-supplies, sports-equipment-accesories, toys, umbrella. See GET /depop/categories for a machine-readable enumeration with names and subcategories.", + "in": "query", + "name": "category", + "type": "string", + "x-example": "tops" + }, + { + "description": "Comma-separated Depop subcategory slug(s), scoped within category. See GET /depop/categories for the full list per category.", + "in": "query", + "name": "subcategory", + "type": "string", + "x-example": "tshirts" + }, + { + "description": "Department filter: female, male", + "in": "query", + "name": "gender", + "type": "string", + "x-example": "male" + }, + { + "description": "Comma-separated Depop size composite ids (format {size_set_id}.{id}, e.g. \\", + "in": "query", + "name": "sizes", + "type": "string", + "x-example": "54.4" } ], "produces": [ @@ -307815,7 +385793,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chipotle.restaurantResponseDoc" + "$ref": "#/definitions/depop.shopResponseDoc" } }, "400": { @@ -307830,8 +385808,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -307848,41 +385826,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Chipotle restaurant", + "summary": "Get a Depop seller's shop", "tags": [ - "Chipotle" + "Depop" ] } }, - "/chipotle/restaurant/meals": { + "/depop/sizes": { "get": { "consumes": [ "application/json" ], - "description": "Returns the preset meals one Chipotle restaurant sells -- group Build-Your-Own packs, the High Protein line and limited-time Influencer meals -- each with its dine-in and delivery price at that restaurant, calorie label, dietary and macro tags, the components that make it up, merchandising tags and images. Prices are genuinely restaurant-specific: the same Build-Your-Own Chicken pack is priced differently from one location to another, so this is the endpoint to use for real pricing rather than /chipotle/meals, which lists the national meal definitions with no prices at all. Calorie labels are a range for build-your-own meals and a single figure for fixed ones, so they are returned as strings. Restaurant numbers come from GET /chipotle/restaurants.", - "operationId": "chipotle-restaurant-meals", - "parameters": [ - { - "description": "Chipotle's numeric restaurant id, from /chipotle/restaurants", - "in": "query", - "name": "restaurant_number", - "required": true, - "type": "string", - "x-example": "3982" - }, - { - "description": "Filter to one meal family. One of BuildYourOwn, HighProtein, Influencer.", - "enum": [ - "BuildYourOwn", - "HighProtein", - "Influencer" - ], - "in": "query", - "name": "meal_type", - "type": "string", - "x-example": "HighProtein" - } - ], + "description": "Returns Depop's full, multi-region size taxonomy -- every composite id usable with /depop/search's and /depop/shop/{username}'s sizes filter. Public data sourced from Depop's own size-filter API.", + "operationId": "depop-sizes", "produces": [ "application/json" ], @@ -307890,23 +385846,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chipotle.restaurantMealsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/depop.sizesResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -307923,34 +385867,27 @@ "ApiKeyAuth": [] } ], - "summary": "List one Chipotle restaurant's preset meals with prices", + "summary": "Get Depop's size taxonomy", "tags": [ - "Chipotle" + "Depop" ] } }, - "/chipotle/restaurant/menu": { + "/depop/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns one restaurant's live online menu split into entrees, sides, drinks and non-food items. This is the only Chipotle endpoint that carries prices: every item has both a dine-in price and a delivery price, which genuinely differ. Each item also carries its full customization tree -- contents (the individual fillings, salsas and sides that make it up, each with their own price pair) and content_groups (how many picks each group allows). Prices are per-restaurant, so two restaurants will legitimately return different numbers for the same item.", - "operationId": "chipotle-restaurant-menu", + "description": "Returns Depop's own search-box autocomplete suggestions for a partial query, including the category a suggestion maps to when relevant. Public data sourced from Depop's own search-suggestions API.", + "operationId": "depop-suggest", "parameters": [ { - "description": "Chipotle's numeric restaurant id", + "description": "Partial search query to autocomplete", "in": "query", - "name": "restaurant_number", + "name": "query", "required": true, "type": "string", - "x-example": "3982" - }, - { - "description": "Include items the restaurant currently has unavailable (default false)", - "in": "query", - "name": "include_unavailable", - "type": "boolean", - "x-example": true + "x-example": "red corte" } ], "produces": [ @@ -307960,7 +385897,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chipotle.restaurantMenuResponseDoc" + "$ref": "#/definitions/depop.suggestResponseDoc" } }, "400": { @@ -307969,14 +385906,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -307993,56 +385924,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Chipotle restaurant's menu with prices", + "summary": "Depop search-box autocomplete", "tags": [ - "Chipotle" + "Depop" ] } }, - "/chipotle/restaurants": { - "get": { + "/developer/search": { + "post": { "consumes": [ "application/json" ], - "description": "Returns Chipotle restaurants near a latitude/longitude, ordered by distance. Each restaurant carries its number (the id every other Chipotle endpoint takes), name, status, full postal address with coordinates, published open/close hours per day, nearest cross streets, timezone, and capability flags (Chipotlane pickup, online ordering, catering, curbside pickup, dining room open, walk-up window). A coordinate with no Chipotle nearby returns an empty list rather than an error.", - "operationId": "chipotle-restaurants", + "description": "Searches indexed sources only; this operation never starts ingestion or contacts upstream sources. The current ready source is `go:docs` and it covers only the 18 selected verified pages documented by `developer-sources`. Search matches Unicode-aware lexical terms and punctuation-bearing identifiers such as `context.Context`; passages retain byte/line locators into the indexed document. `types` accepts `doc`, `readme`, `issue`, and `pull_request`, but the current source supports only `doc`; unsupported values return 400. The `version` filter is not supported by the current unversioned source and returns 400. Continuation bodies contain only `cursor` and optional `limit`; their pages come from the frozen snapshot and do not repeat the search.", + "operationId": "developer-search", "parameters": [ { - "description": "Search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 34.0522 - }, - { - "description": "Search center longitude", - "in": "query", - "name": "longitude", + "description": "Search query or cursor-only continuation", + "in": "body", + "name": "request", "required": true, - "type": "number", - "x-example": -118.2437 - }, - { - "description": "Search radius in meters, 1-80000 (default 8000)", - "in": "query", - "name": "radius", - "type": "integer", - "x-example": 8000 - }, - { - "description": "Restaurants per page, 1-50 (default 10)", - "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 10 - }, - { - "description": "0-based page index (default 0)", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 0 + "schema": { + "$ref": "#/definitions/developerretrieval.DeveloperSearchRequest" + } } ], "produces": [ @@ -308050,66 +385953,37 @@ ], "responses": { "200": { - "description": "OK", + "description": "Ranked developer results and source coverage", "schema": { - "$ref": "#/definitions/chipotle.restaurantsResponseDoc" + "$ref": "#/definitions/developerretrieval.developerSearchResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid query, unsupported source/filter, or cursor", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "401": { + "description": "Authentication required", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "410": { + "description": "Frozen result cursor expired", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Snapshot or response configuration error", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Find Chipotle restaurants near a location", - "tags": [ - "Chipotle" - ] - } - }, - "/chromewebstore/categories": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the reference taxonomy for the list endpoints: extension category groups and their subcategory slugs, the top-chart identifiers, and known curated collection slugs.", - "operationId": "chromewebstore-categories", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/chromewebstore.categoriesResponseDoc" - } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Source registry or search index unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -308120,48 +385994,25 @@ "ApiKeyAuth": [] } ], - "summary": "List Chrome Web Store categories and collections", + "summary": "Search indexed developer documentation", "tags": [ - "ChromeWebStore" + "Retrieval" ] } }, - "/chromewebstore/category": { + "/developer/sources": { "get": { "consumes": [ "application/json" ], - "description": "Returns the item cards listed under an extensions category slug (e.g. `productivity/tools`, `lifestyle/shopping`, `make_chrome_yours/privacy`). Use /chromewebstore/categories for the reference taxonomy. Defaults: `num=50`, `country=us`, `lang=en`.", - "operationId": "chromewebstore-category", + "description": "Returns the registered developer source catalog and each source's exact supported operations, filters, artifact types, and index state. The current catalog contains only `go:docs`, a selected set of 18 parser-verified Go documentation/specification pages. A source is `not_indexed` until a complete generation is promoted. The catalog does not accept a cursor; `limit` may be 1–100.", + "operationId": "developer-sources", "parameters": [ { - "description": "Category slug under extensions", - "in": "query", - "name": "category", - "required": true, - "type": "string", - "x-example": "productivity/tools" - }, - { - "description": "Maximum number of items", - "in": "query", - "name": "num", - "type": "integer", - "x-example": 50 - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Two-letter language code", + "description": "Maximum sources to return (1–100; defaults to 100)", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "name": "limit", + "type": "integer" } ], "produces": [ @@ -308169,25 +386020,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Developer source catalog", "schema": { - "$ref": "#/definitions/chromewebstore.listResponseDoc" + "$ref": "#/definitions/developerretrieval.developerSourcesResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid catalog query", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "401": { + "description": "Authentication required", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Source catalog or index unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -308198,52 +386049,28 @@ "ApiKeyAuth": [] } ], - "summary": "List items in a Chrome Web Store category", + "summary": "Discover indexed developer sources", "tags": [ - "ChromeWebStore" + "Retrieval" ] } }, - "/chromewebstore/charts": { - "get": { + "/diagnostics/antibot-check": { + "post": { "consumes": [ "application/json" ], - "description": "Returns the item cards in a store top chart. `chart` accepts `trending`, `popular`, or `notable`. Defaults: `chart=popular`, `num=50`, `country=us`, `lang=en`.", - "operationId": "chromewebstore-charts", + "description": "Probes a URL across escalating transports (direct HTTP → browser-impersonation → headless/stealth browsers) and returns an empirical scraping-difficulty assessment for that exact URL: a 0–10 `difficulty_score` and `difficulty_band` (`easy`, `medium`, `hard`, `very_hard`, `blocked`, `unknown`), whether it is `scrapeable`, the detected anti-bot `protections` (Cloudflare, DataDome, Akamai, PerimeterX, Kasada, Imperva, AWS WAF and more — each with a `kind` and `confidence`), the lightest transport that worked, and a `recommended_profile`. Difficulty is per-URL, not per-site — a homepage may be open while deep pages are bot-managed. Intended for authorized public-data scraping planning.", + "operationId": "antibot-check", "parameters": [ { - "default": "popular", - "description": "Top chart to list", - "enum": [ - "trending", - "popular", - "notable" - ], - "in": "query", - "name": "chart", - "type": "string" - }, - { - "description": "Maximum number of items", - "in": "query", - "name": "num", - "type": "integer", - "x-example": 50 - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Two-letter language code", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "description": "Target URL (and optional fast flag)", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/diagnostics.AntibotCheckRequest" + } } ], "produces": [ @@ -308253,23 +386080,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chromewebstore.listResponseDoc" + "$ref": "#/definitions/diagnostics.antibotCheckResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid or missing URL", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Probe failed (transport/browser error or blocked target)", "schema": { "$ref": "#/definitions/app.Response" } @@ -308280,48 +386107,27 @@ "ApiKeyAuth": [] } ], - "summary": "List a Chrome Web Store top chart", + "summary": "Anti-bot check — website scraping difficulty", "tags": [ - "ChromeWebStore" + "Web" ] } }, - "/chromewebstore/collection": { + "/discogs/artist/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns the item cards in a curated store collection slug (e.g. `editors_picks_extensions`, `dark_mode`, `ai_productivity`). Use /chromewebstore/categories for known collection slugs. Defaults: `num=50`, `country=us`, `lang=en`.", - "operationId": "chromewebstore-collection", + "description": "Returns a Discogs artist profile: real name, bio, links, name variations, aliases, and group memberships.", + "operationId": "discogs-artist", "parameters": [ { - "description": "Curated collection slug", - "in": "query", - "name": "collection", + "description": "Discogs artist id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "editors_picks_extensions" - }, - { - "description": "Maximum number of items", - "in": "query", - "name": "num", - "type": "integer", - "x-example": 50 - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Two-letter language code", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "x-example": "1289" } ], "produces": [ @@ -308331,7 +386137,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chromewebstore.listResponseDoc" + "$ref": "#/definitions/discogs.artistResponseDoc" } }, "400": { @@ -308340,8 +386146,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -308351,6 +386157,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -308358,48 +386170,39 @@ "ApiKeyAuth": [] } ], - "summary": "List items in a curated Chrome Web Store collection", + "summary": "Get a Discogs artist profile", "tags": [ - "ChromeWebStore" + "Discogs" ] } }, - "/chromewebstore/developer": { + "/discogs/artist/{id}/releases": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Chrome Web Store publisher (developer) by publisher id, including the disclosed trader details — legal name, email, phone, address, website, and D-U-N-S number — plus the publisher's listed items (\"More from ...\"). Trader fields are only present for publishers that identify as EU traders. Defaults: `num=50`, `country=us`, `lang=en`.", - "operationId": "chromewebstore-developer", + "description": "Returns the releases and masters credited to a Discogs artist, identified by the required `id`. Paged with `page` (default 1) and `per_page` (default 50, max 100). Each entry has its `id`, `type` (`release` or `master`), title, artist, role, format, label, year, thumbnail, and want and collection counts, alongside the total item count and page count.", + "operationId": "discogs-artist-releases", "parameters": [ { - "description": "Chrome Web Store publisher id (u + 32 hex chars)", - "in": "query", + "description": "Discogs artist id", + "in": "path", "name": "id", "required": true, "type": "string", - "x-example": "u63f06aecfdc45d32c13ccc24f56c3d2d" - }, - { - "description": "Maximum number of items", - "in": "query", - "name": "num", - "type": "integer", - "x-example": 50 + "x-example": "1289" }, { - "description": "Two-letter storefront country code", + "description": "1-based page number, default 1", "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "page", + "type": "integer" }, { - "description": "Two-letter language code", + "description": "Results per page, default 50, max 100", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -308409,7 +386212,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chromewebstore.developerResponseDoc" + "$ref": "#/definitions/discogs.artistReleasesResponseDoc" } }, "400": { @@ -308424,14 +386227,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -308442,41 +386245,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve a Chrome Web Store publisher and their items", + "summary": "List a Discogs artist's releases", "tags": [ - "ChromeWebStore" + "Discogs" ] } }, - "/chromewebstore/item": { + "/discogs/label/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns detail for a Chrome Web Store extension or theme, including name, rating, rating count, user count, version, last-updated date, size, supported languages, developer, category, screenshots, and privacy links. Defaults: `country=us`, `lang=en`.", - "operationId": "chromewebstore-item", + "description": "Returns the profile of a Discogs label by its required label `id`: name, profile text, contact info, website URLs, images, data quality rating, and Discogs page URI. The parent label and the list of sub-labels are included, and the parent label appears only when the label has one.", + "operationId": "discogs-label", "parameters": [ { - "description": "Chrome Web Store item id (32-character extension/theme id)", - "in": "query", + "description": "Discogs label id", + "in": "path", "name": "id", "required": true, "type": "string", - "x-example": "cjpalhdlnbpafiamejdnhcphjbkeiagm" - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Two-letter language code", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "x-example": "895" } ], "produces": [ @@ -308486,7 +386275,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chromewebstore.itemResponseDoc" + "$ref": "#/definitions/discogs.labelResponseDoc" } }, "400": { @@ -308501,14 +386290,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -308519,41 +386308,39 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Chrome Web Store item details", + "summary": "Get a Discogs label profile", "tags": [ - "ChromeWebStore" + "Discogs" ] } }, - "/chromewebstore/permissions": { + "/discogs/label/{id}/releases": { "get": { "consumes": [ "application/json" ], - "description": "Returns the permissions a Chrome Web Store extension declares in its manifest: `permissions`, `optional_permissions`, `host_permissions`, `optional_host_permissions`, plus `manifest_version` and `min_browser_version`. Useful for security and supply-chain review. Defaults: `country=us`, `lang=en`.", - "operationId": "chromewebstore-permissions", + "description": "Lists the releases on a Discogs label, identified by the required label `id`. Paged with `page` (default 1) and `per_page` (default 50, max 100). Each entry has its release `id`, title, artist, format, catalogue number (`catno`), status, year and thumbnail, and the response reports the total item count across all pages.", + "operationId": "discogs-label-releases", "parameters": [ { - "description": "Chrome Web Store item id (32-character extension id)", - "in": "query", + "description": "Discogs label id", + "in": "path", "name": "id", "required": true, "type": "string", - "x-example": "cjpalhdlnbpafiamejdnhcphjbkeiagm" + "x-example": "895" }, { - "description": "Two-letter storefront country code", + "description": "1-based page number, default 1", "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "page", + "type": "integer" }, { - "description": "Two-letter language code", + "description": "Results per page, default 50, max 100", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -308563,7 +386350,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chromewebstore.permissionsResponseDoc" + "$ref": "#/definitions/discogs.labelReleasesResponseDoc" } }, "400": { @@ -308578,14 +386365,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -308596,41 +386383,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve a Chrome Web Store item's declared permissions", + "summary": "List a Discogs label's releases", "tags": [ - "ChromeWebStore" + "Discogs" ] } }, - "/chromewebstore/privacy": { + "/discogs/master/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns an extension's privacy disclosures as the store renders them: the developer's data-use statement, whether it collects data, the standard data-handling declarations, and the privacy-policy link. Defaults: `country=us`, `lang=en`.", - "operationId": "chromewebstore-privacy", + "description": "Returns a Discogs master release: the version-agnostic grouping of a release across pressings/reissues (artists, tracklist, genres/styles, videos, images, marketplace stats).", + "operationId": "discogs-master", "parameters": [ { - "description": "Chrome Web Store item id (32-character extension/theme id)", - "in": "query", + "description": "Discogs master release id", + "in": "path", "name": "id", "required": true, "type": "string", - "x-example": "cjpalhdlnbpafiamejdnhcphjbkeiagm" - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Two-letter language code", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "x-example": "26647" } ], "produces": [ @@ -308640,7 +386413,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chromewebstore.privacyResponseDoc" + "$ref": "#/definitions/discogs.masterResponseDoc" } }, "400": { @@ -308655,14 +386428,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -308673,59 +386446,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve a Chrome Web Store item's privacy disclosures", + "summary": "Get a Discogs master release", "tags": [ - "ChromeWebStore" + "Discogs" ] } }, - "/chromewebstore/reviews": { + "/discogs/release/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns the reviews the store renders on an item's reviews page, each with author, star rating, text, posted/edited dates and reviewed version. Defaults: `num=20`, `country=us`, `lang=en`.", - "operationId": "chromewebstore-reviews", + "description": "Returns a Discogs release: artists, labels, formats, tracklist, credits, identifiers, videos, images, and community want/have/rating.", + "operationId": "discogs-release", "parameters": [ { - "description": "Chrome Web Store item id (32-character extension/theme id)", - "in": "query", + "description": "Discogs release id", + "in": "path", "name": "id", "required": true, "type": "string", - "x-example": "cjpalhdlnbpafiamejdnhcphjbkeiagm" - }, - { - "description": "Maximum number of reviews", - "in": "query", - "name": "num", - "type": "integer", - "x-example": 100 - }, - { - "default": "recent", - "description": "Review sort order", - "enum": [ - "recent", - "helpful" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Two-letter language code", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "x-example": "249504" } ], "produces": [ @@ -308735,7 +386476,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chromewebstore.reviewsResponseDoc" + "$ref": "#/definitions/discogs.releaseResponseDoc" } }, "400": { @@ -308750,14 +386491,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -308768,48 +386509,51 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Chrome Web Store item reviews", + "summary": "Get a Discogs release", "tags": [ - "ChromeWebStore" + "Discogs" ] } }, - "/chromewebstore/search": { + "/discogs/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns Chrome Web Store search result cards for a keyword, each with id, name, rating, user count, publisher and detail URL. Defaults: `num=30`, `country=us`, `lang=en`.", - "operationId": "chromewebstore-search", + "description": "Searches the Discogs database for releases, masters, artists and labels, optionally filtered to one `type`, with `page` and `per_page` (max 100). Release and master results carry country, year, formats, labels, genres, styles, catalog number and barcodes; artist and label results carry id, title and thumbnail.", + "operationId": "discogs-search", "parameters": [ { - "description": "Search keyword", + "description": "Search query", "in": "query", - "name": "term", + "name": "q", "required": true, "type": "string", - "x-example": "vpn" + "x-example": "Daft Punk Discovery" }, { - "description": "Maximum number of results", + "description": "Result type filter", + "enum": [ + "release", + "master", + "artist", + "label" + ], "in": "query", - "name": "num", - "type": "integer", - "x-example": 30 + "name": "type", + "type": "string" }, { - "description": "Two-letter storefront country code", + "description": "1-based page number, default 1", "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "page", + "type": "integer" }, { - "description": "Two-letter language code", + "description": "Results per page, default 50, max 100", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -308819,7 +386563,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chromewebstore.searchResponseDoc" + "$ref": "#/definitions/discogs.searchResponseDoc" } }, "400": { @@ -308828,14 +386572,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -308846,41 +386590,32 @@ "ApiKeyAuth": [] } ], - "summary": "Search Chrome Web Store items", + "summary": "Search the Discogs database", "tags": [ - "ChromeWebStore" + "Discogs" ] } }, - "/chromewebstore/similar": { + "/dollartree/blog/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the related-items shelf shown on a Chrome Web Store item's page. `id` is the required 32-character item id; `country` and `lang` default to `us` and `en`. Each card has name, publisher, category, rating, rating count, users, summary, icon and URL. An unknown or removed id returns 404.", - "operationId": "chromewebstore-similar", + "description": "Returns the public DTBlogPost record for one article URL, including the HTML body and parent category metadata.", + "operationId": "dollartree-blog-article", "parameters": [ { - "description": "Chrome Web Store item id (32-character extension/theme id)", + "description": "Article slug from the public Value Seekers Blog URL", "in": "query", - "name": "id", + "name": "slug", "required": true, "type": "string", - "x-example": "cjpalhdlnbpafiamejdnhcphjbkeiagm" - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "x-example": "diy-farmhouse-salt-pepper-shaker-decor" }, { - "description": "Two-letter language code", + "description": "Article id from the public Value Seekers Blog URL", "in": "query", - "name": "lang", + "name": "article_id", + "required": true, "type": "string", - "x-example": "en" + "x-example": "idea-20240201-4" } ], "produces": [ @@ -308890,7 +386625,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chromewebstore.similarResponseDoc" + "$ref": "#/definitions/dollartree.blogArticleResponseDoc" } }, "400": { @@ -308911,8 +386646,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -308923,50 +386658,16 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve related Chrome Web Store items", + "summary": "Get a Dollar Tree Value Seekers Blog article", "tags": [ - "ChromeWebStore" + "Dollar Tree" ] } }, - "/chromewebstore/suggest": { + "/dollartree/categories": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns search-term suggestions for a Chrome Web Store prefix given in `term`, up to `num` (default 8), with `country` and `lang` defaulting to `us` and `en`. Suggestions are the distinct item names of the top store-search results for that prefix, each returned as a `term`.", - "operationId": "chromewebstore-suggest", - "parameters": [ - { - "description": "Search prefix to autocomplete", - "in": "query", - "name": "term", - "required": true, - "type": "string", - "x-example": "ad blo" - }, - { - "description": "Maximum number of suggestions", - "in": "query", - "name": "num", - "type": "integer", - "x-example": 8 - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Two-letter language code", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" - } - ], + "description": "Returns Dollar Tree's complete public storefront taxonomy, including product departments, nested product categories, and Value Seekers Blog topics. Each node preserves its repository id and search dimension id.", + "operationId": "dollartree-categories", "produces": [ "application/json" ], @@ -308974,13 +386675,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chromewebstore.suggestResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/dollartree.categoriesResponseDoc" } }, "429": { @@ -308989,8 +386684,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -309001,27 +386696,24 @@ "ApiKeyAuth": [] } ], - "summary": "Suggest Chrome Web Store search terms", + "summary": "List Dollar Tree product and blog categories", "tags": [ - "ChromeWebStore" + "Dollar Tree" ] } }, - "/chrono24/autocomplete": { + "/dollartree/price": { "get": { - "consumes": [ - "application/json" - ], - "description": "Fetches Chrono24's own search-box typeahead suggestions for a partial query: each suggested phrase with its own live result count, plus the Chrono24 search URL it resolves to. Useful for building a search box against chrono24-search without guessing a full query.", - "operationId": "chrono24-autocomplete", + "description": "Returns the current list price and per-SKU prices from Dollar Tree's public pricing resource for one product repository id, including the upstream price-range flag.", + "operationId": "dollartree-price", "parameters": [ { - "description": "Partial search text, e.g. \\", + "description": "Dollar Tree product id", "in": "query", - "name": "query", + "name": "product_id", "required": true, "type": "string", - "x-example": "submar" + "x-example": "331518" } ], "produces": [ @@ -309031,7 +386723,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chrono24.autocompleteResponseDoc" + "$ref": "#/definitions/dollartree.priceResponseDoc" } }, "400": { @@ -309040,8 +386732,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -309058,19 +386756,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get Chrono24 search-box suggestions", + "summary": "Get Dollar Tree product prices", "tags": [ - "Chrono24" + "Dollar Tree" ] } }, - "/chrono24/brands": { + "/dollartree/product": { "get": { - "consumes": [ - "application/json" + "description": "Returns the complete public product record for one Dollar Tree repository id, including the fields and SKU information supplied by the storefront.", + "operationId": "dollartree-product", + "parameters": [ + { + "description": "Dollar Tree product id", + "in": "query", + "name": "product_id", + "required": true, + "type": "string", + "x-example": "331518" + } ], - "description": "Returns Chrono24's full watch-brand index: every brand name and the slug identifying it, usable as the brand parameter on chrono24-models and chrono24-search. This is the discovery endpoint for that parameter, so every accepted value is obtainable from this API rather than by reading the website.", - "operationId": "chrono24-brands", "produces": [ "application/json" ], @@ -309078,11 +386783,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chrono24.brandsResponseDoc" + "$ref": "#/definitions/dollartree.productResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -309099,27 +386816,23 @@ "ApiKeyAuth": [] } ], - "summary": "List Chrono24 watch brands", + "summary": "Get one Dollar Tree product record", "tags": [ - "Chrono24" + "Dollar Tree" ] } }, - "/chrono24/dealer": { + "/dollartree/products": { "get": { - "consumes": [ - "application/json" - ], - "description": "Fetches one Chrono24 dealer/seller's public storefront page: business description, trust badge, average buyer rating and review count, lifetime watches-sold count, and their current listed inventory in the same shape chrono24-search returns. slug is found in a chrono24-search or chrono24-listing result's seller link; there is no separate dealer-discovery endpoint since dealer slugs are not a closed set Chrono24 publishes an index of.", - "operationId": "chrono24-dealer", + "description": "Returns the complete public product records for a comma-separated list of Dollar Tree repository ids, matching the storefront's list-valued productIds resource.", + "operationId": "dollartree-products", "parameters": [ { - "description": "Dealer slug from a listing's seller link", + "description": "Comma-separated Dollar Tree product ids", "in": "query", - "name": "slug", + "name": "product_ids", "required": true, - "type": "string", - "x-example": "thetimelords" + "type": "string" } ], "produces": [ @@ -309129,7 +386842,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chrono24.dealerResponseDoc" + "$ref": "#/definitions/dollartree.productsResponseDoc" } }, "400": { @@ -309144,8 +386857,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -309162,62 +386875,68 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Chrono24 dealer's storefront", + "summary": "Get multiple Dollar Tree product records", "tags": [ - "Chrono24" + "Dollar Tree" ] } }, - "/chrono24/dealer/reviews": { + "/dollartree/search": { "get": { - "consumes": [ - "application/json" - ], - "description": "Fetches one page of a Chrono24 dealer/seller's buyer reviews: reviewer name and country, review date, star-rating breakdown (shipping/description/communication), whether the buyer recommends the seller, their free-text comment, and the dealer's own reply when present. slug is the same dealer slug chrono24-dealer takes.", - "operationId": "chrono24-dealer-reviews", + "description": "Searches the public Dollar Tree catalog or browses a category using its search dimension id. Returns products, pagination metadata, every context-specific filter group and option, and each option's upstream navigation state for follow-up filter requests. Sort values are the exact values used by Dollar Tree's storefront.", + "operationId": "dollartree-search", "parameters": [ { - "description": "Dealer slug from a listing's seller link", + "description": "Product search query; omit to browse the selected category or navigation state", "in": "query", - "name": "slug", - "required": true, + "name": "q", "type": "string", - "x-example": "thetimelords" + "x-example": "popcorn" }, { - "default": 1, - "description": "One-based result page", + "description": "Search navigation id from dollartree_categories or a filter option", "in": "query", - "minimum": 1, - "name": "page", - "type": "integer" + "name": "navigation_id", + "type": "string", + "x-example": "204341833" }, { - "default": 10, - "description": "Reviews per page, 1-50", + "description": "Exact navigation_state returned by a filter option; mutually exclusive with navigation_id", "in": "query", - "maximum": 50, - "minimum": 1, - "name": "page_size", - "type": "integer" + "name": "navigation_state", + "type": "string" }, { "default": 0, - "description": "Keep only reviews rating the dealer at least this many stars, 0-5. 0 returns every review", + "description": "Zero-based upstream result offset", "in": "query", - "maximum": 5, "minimum": 0, - "name": "min_stars", + "name": "offset", "type": "integer" }, { - "default": "relevance", - "description": "Result order. One of: relevance, newest, with_recommendation, without_recommendation", + "default": 48, + "description": "Results per page", "enum": [ - "relevance", - "newest", - "with_recommendation", - "without_recommendation" + 48, + 72, + 96 + ], + "in": "query", + "name": "page_size", + "type": "integer" + }, + { + "description": "Exact storefront sort value (omit for relevance)", + "enum": [ + "product.x_unitPriceNumeric|0", + "product.x_unitPriceNumeric|1", + "DollarProductType.new|1", + "DollarProductType.averageRating|1", + "product.displayName|0", + "product.displayName|1", + "product.casePrice|1", + "DollarProductType.numberOfReviews|1" ], "in": "query", "name": "sort", @@ -309231,7 +386950,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chrono24.dealerReviewsResponseDoc" + "$ref": "#/definitions/dollartree.searchResponseDoc" } }, "400": { @@ -309240,14 +386959,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -309264,38 +386977,32 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Chrono24 dealer's buyer reviews", + "summary": "Search Dollar Tree products and facets", "tags": [ - "Chrono24" + "Dollar Tree" ] } }, - "/chrono24/facets": { + "/dollartree/stock-status": { "get": { - "consumes": [ - "application/json" - ], - "description": "Fetches every value Chrono24 accepts for one of chrono24-search's advanced-search filter params, each with its own live listing count: the discovery endpoint for condition, used_or_new, case_material, dial_color, bracelet_material, movement_type, gender, watch_type and stock_info.", - "operationId": "chrono24-facets", + "description": "Returns the current stock status and orderable, in-stock, backorderable, and preorderable quantities for one product SKU. Use the product id and child SKU repository id returned by the Dollar Tree product endpoints.", + "operationId": "dollartree-stock-status", "parameters": [ { - "description": "Filter to list values for", - "enum": [ - "condition", - "usedOrNew", - "caseMaterial", - "dialColor", - "braceletMaterial", - "movementType", - "gender", - "watchType", - "stockInfo" - ], + "description": "Dollar Tree product id", "in": "query", - "name": "group", + "name": "product_id", "required": true, "type": "string", - "x-example": "condition" + "x-example": "331518" + }, + { + "description": "SKU repository id from the product's childSKUs", + "in": "query", + "name": "sku_id", + "required": true, + "type": "string", + "x-example": "331518" } ], "produces": [ @@ -309305,7 +387012,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chrono24.facetsResponseDoc" + "$ref": "#/definitions/dollartree.stockStatusResponseDoc" } }, "400": { @@ -309314,8 +387021,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -309332,27 +387045,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Chrono24 search filter's accepted values", + "summary": "Get Dollar Tree stock status for one SKU", "tags": [ - "Chrono24" + "Dollar Tree" ] } }, - "/chrono24/listing": { + "/dollartree/typeahead/keywords": { "get": { - "consumes": [ - "application/json" - ], - "description": "Fetches one Chrono24 listing's full detail page: brand, model, reference number, price with currency and negotiability, condition, year of production, movement, case material and diameter, bracelet material, location, availability, seller type, photos, and the complete raw spec table Chrono24 itself shows (grouped by section: Basic Info, Caliber, Case, Bracelet/strap, Functions). path is the listing URL from a chrono24-search result's url field; Chrono24 has no lookup by numeric id alone.", - "operationId": "chrono24-listing", + "description": "Returns the keyword-suggestion results from Dollar Tree's search box for a prefix. An empty suggestion list is a valid upstream response.", + "operationId": "dollartree-keyword-typeahead", "parameters": [ { - "description": "Listing URL or path from a chrono24-search result's url field", + "description": "Search prefix of at least two characters", "in": "query", - "name": "path", + "name": "q", "required": true, "type": "string", - "x-example": "https://www.chrono24.com/rolex/datejust-36--id40700313.htm" + "x-example": "popc" + }, + { + "default": "lg", + "description": "Storefront viewport context", + "enum": [ + "xs", + "sm", + "md", + "lg" + ], + "in": "query", + "name": "viewport", + "type": "string" } ], "produces": [ @@ -309362,7 +387085,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chrono24.listingResponseDoc" + "$ref": "#/definitions/dollartree.keywordTypeaheadResponseDoc" } }, "400": { @@ -309371,14 +387094,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -309395,27 +387112,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Chrono24 watch listing's detail", + "summary": "Get Dollar Tree keyword suggestions", "tags": [ - "Chrono24" + "Dollar Tree" ] } }, - "/chrono24/models": { + "/dollartree/typeahead/products": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns every model/collection Chrono24 lists for one watch brand (e.g. Rolex Submariner, Rolex Datejust), each with the slug identifying it, usable as the model parameter on chrono24-search. This is the discovery endpoint for that parameter, so every accepted value for a brand is obtainable from this API rather than by reading the website.", - "operationId": "chrono24-models", + "description": "Returns up to six product suggestions from Dollar Tree's search box for a prefix, with product identifiers, routes, images, prices, and source attributes.", + "operationId": "dollartree-product-typeahead", "parameters": [ { - "description": "Brand slug from chrono24-brands", + "description": "Search prefix of at least two characters", "in": "query", - "name": "brand", + "name": "q", "required": true, "type": "string", - "x-example": "rolex" + "x-example": "popc" + }, + { + "default": "lg", + "description": "Storefront viewport context", + "enum": [ + "xs", + "sm", + "md", + "lg" + ], + "in": "query", + "name": "viewport", + "type": "string" } ], "produces": [ @@ -309425,7 +387152,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chrono24.modelsResponseDoc" + "$ref": "#/definitions/dollartree.productTypeaheadResponseDoc" } }, "400": { @@ -309434,8 +387161,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -309452,231 +387179,74 @@ "ApiKeyAuth": [] } ], - "summary": "List Chrono24 models for a brand", + "summary": "Get Dollar Tree product suggestions", "tags": [ - "Chrono24" + "Dollar Tree" ] } }, - "/chrono24/search": { + "/domain/dns/record-types": { "get": { "consumes": [ "application/json" ], - "description": "Searches Chrono24's luxury-watch marketplace by free-text keyword, or browses one brand's (optionally narrowed to one model's) current listings, returning result cards: title, price with currency, seller type, seller country, promotional badge, image, and the listing URL to pass to chrono24-listing. At least one of query or brand is required. Optional advanced-search filters (condition, used_or_new, case_material, dial_color, bracelet_material, movement_type, gender, watch_type, stock_info) narrow results further; each filter's accepted values are discoverable from chrono24-facets and echoed back in the response's filters field.", - "operationId": "chrono24-search", - "parameters": [ - { - "description": "Free-text keyword search, e.g. \\", - "in": "query", - "name": "query", - "type": "string", - "x-example": "rolex submariner" - }, + "description": "Returns the complete record-type vocabulary accepted by domain_dns_resolve.", + "operationId": "domain-dns-record-types", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/domainintel.dnsRecordTypesResponseDoc" + } + } + }, + "security": [ { - "description": "Brand slug from chrono24-brands. At least one of query or brand is required", - "in": "query", - "name": "brand", - "type": "string", - "x-example": "rolex" - }, + "ApiKeyAuth": [] + } + ], + "summary": "List supported DNS record types", + "tags": [ + "Domain" + ] + } + }, + "/domain/dns/resolve": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Performs one Google Public DNS JSON query. Use domain_dns_record_types to discover supported types.", + "operationId": "domain-dns-resolve", + "parameters": [ { - "description": "Model slug from chrono24-models (requires brand)", + "description": "Bare public DNS name, including service labels such as _dmarc", "in": "query", - "name": "model", + "name": "name", + "required": true, "type": "string", - "x-example": "submariner--mod1" - }, - { - "default": "relevance", - "description": "Result order. One of: relevance, price_asc, price_desc, newest, popularity", - "enum": [ - "relevance", - "price_asc", - "price_desc", - "newest", - "popularity" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "default": 1, - "description": "One-based result page", - "in": "query", - "minimum": 1, - "name": "page", - "type": "integer" - }, - { - "description": "Results per page. Chrono24's own UI offers 30, 60 or 120; defaults to Chrono24's own default", - "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 60 - }, - { - "description": "Advanced-search filter, values from chrono24-facets group=condition", - "enum": [ - "new", - "like_new_unworn", - "very_good", - "good", - "fair", - "incomplete", - "no_details" - ], - "in": "query", - "name": "condition", - "type": "string" - }, - { - "description": "Advanced-search filter, values from chrono24-facets group=usedOrNew", - "enum": [ - "new", - "used", - "no_details" - ], - "in": "query", - "name": "used_or_new", - "type": "string" - }, - { - "description": "Advanced-search filter, values from chrono24-facets group=caseMaterial", - "enum": [ - "aluminum", - "brass", - "bronze", - "carbon", - "ceramic", - "gold_steel", - "gold_plated", - "palladium", - "plastic", - "platinum", - "rose_gold", - "sapphire_crystal", - "silver", - "steel", - "tantalum", - "titanium", - "tungsten", - "white_gold", - "yellow_gold", - "no_details" - ], - "in": "query", - "name": "case_material", - "type": "string" - }, - { - "description": "Advanced-search filter, values from chrono24-facets group=dialColor", - "enum": [ - "black", - "blue", - "bordeaux", - "bronze", - "brown", - "champagne", - "gold", - "green", - "grey", - "meteorite", - "mother_of_pearl", - "orange", - "pink", - "purple", - "red", - "silver", - "skeletonized", - "turquoise", - "white", - "yellow", - "no_details" - ], - "in": "query", - "name": "dial_color", - "type": "string" - }, - { - "description": "Advanced-search filter, values from chrono24-facets group=braceletMaterial", - "enum": [ - "alligator_skin", - "aluminium", - "brass", - "calf_skin", - "ceramic", - "crocodile_skin", - "gold_steel", - "gold_plated", - "leather", - "lizard_skin", - "ostrich_skin", - "plastic", - "platinum", - "red_gold", - "rose_gold", - "rubber", - "satin", - "shark_skin", - "silicon", - "silver", - "snake_skin", - "steel", - "textile", - "titanium", - "white_gold", - "yellow_gold", - "no_details" - ], - "in": "query", - "name": "bracelet_material", - "type": "string" - }, - { - "description": "Advanced-search filter, values from chrono24-facets group=movementType", - "enum": [ - "automatic", - "manual_winding", - "quartz", - "solar", - "smartwatch", - "no_details" - ], - "in": "query", - "name": "movement_type", - "type": "string" - }, - { - "description": "Advanced-search filter, values from chrono24-facets group=gender", - "enum": [ - "mens_unisex", - "womens" - ], - "in": "query", - "name": "gender", - "type": "string" - }, - { - "description": "Advanced-search filter, values from chrono24-facets group=watchType", - "enum": [ - "watches", - "parts_accessories" - ], - "in": "query", - "name": "watch_type", - "type": "string" + "x-example": "_dmarc.github.com" }, { - "description": "Advanced-search filter, values from chrono24-facets group=stockInfo", + "description": "DNS record type", "enum": [ - "in_stock", - "on_order", - "on_request" + "A", + "AAAA", + "CAA", + "CNAME", + "DS", + "HTTPS", + "MX", + "NS", + "SOA", + "TXT" ], "in": "query", - "name": "stock_info", + "name": "type", + "required": true, "type": "string" } ], @@ -309687,23 +387257,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/chrono24.searchResponseDoc" + "$ref": "#/definitions/domainintel.dnsLookupResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid DNS name or record type", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Public DNS resolver unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -309714,16 +387284,29 @@ "ApiKeyAuth": [] } ], - "summary": "Search Chrono24 watch listings", + "summary": "Resolve one public DNS record query", "tags": [ - "Chrono24" + "Domain" ] } }, - "/clevelandcom/news": { + "/domain/rdap/domain/{domain}": { "get": { - "description": "Returns Cleveland.com's 50-item public top-stories RSS feed. Summaries and encoded content are publisher teasers; this endpoint does not claim to return full article text. Editorial section inventory and article pages could not be reliably verified due to upstream DataDome blocking.", - "operationId": "clevelandcom-news", + "consumes": [ + "application/json" + ], + "description": "Uses the IANA RDAP DNS bootstrap and the selected registry's domain lookup.", + "operationId": "domain-rdap-domain", + "parameters": [ + { + "description": "Bare DNS hostname", + "in": "path", + "name": "domain", + "required": true, + "type": "string", + "x-example": "github.com" + } + ], "produces": [ "application/json" ], @@ -309731,17 +387314,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/domainintel.rdapDomainResponseDoc" + } + }, + "400": { + "description": "Invalid domain", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "RDAP service unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -309752,24 +387341,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Cleveland.com top stories", + "summary": "Get domain registration data", "tags": [ - "Cleveland.com" + "Domain" ] } }, - "/cna/article": { + "/domain/rdap/ip": { "get": { - "description": "Returns a CNA (Channel NewsAsia) article by `url`, a canonical `channelnewsasia.com` address such as `/singapore/-` or `/commentary/-`: title, description, publication and update times, section, authors, image and the body `paragraphs`. No paywalled or gated content was found during validation.", - "operationId": "cna-article", + "consumes": [ + "application/json" + ], + "description": "Performs one RIR RDAP lookup for a public IPv4 or IPv6 address.", + "operationId": "domain-rdap-ip", "parameters": [ { - "description": "Canonical CNA article URL", + "description": "Public IPv4 or IPv6 address", "in": "query", - "name": "url", + "name": "ip", "required": true, "type": "string", - "x-example": "https://www.channelnewsasia.com/singapore/national-arts-council-nac-seeks-operator-new-1000-seat-tanglin-theatre-6408051" + "x-example": "140.82.112.3" } ], "produces": [ @@ -309779,23 +387371,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/domainintel.rdapIPResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid or non-public IP address", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "RIR RDAP service unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -309806,30 +387398,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get CNA article content", + "summary": "Get IP allocation data", "tags": [ - "CNA" + "Domain" ] } }, - "/cna/author": { + "/domain/robots/{domain}": { "get": { - "description": "Returns a CNA correspondent's or contributor's profile, identified by `slug` (such as `aqil-haziq-mahmud`) or a `channelnewsasia.com/author/` `url`; exactly one is required. The response has name, job title, bio, email, image and the latest page of bylined articles, each with title, URL and label. External Commentary contributors usually have only a name and articles.", - "operationId": "cna-author", + "consumes": [ + "application/json" + ], + "description": "Resolves the hostname through public DoH, pins the HTTPS request to a validated public IP, and returns robots.txt up to 256 KiB.", + "operationId": "domain-robots", "parameters": [ { - "description": "Author slug, e.g. aqil-haziq-mahmud", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "aqil-haziq-mahmud" - }, - { - "description": "Canonical channelnewsasia.com/author/ URL; alternative to slug", - "in": "query", - "name": "url", + "description": "Bare DNS hostname", + "in": "path", + "name": "domain", + "required": true, "type": "string", - "x-example": "https://www.channelnewsasia.com/author/aqil-haziq-mahmud" + "x-example": "github.com" } ], "produces": [ @@ -309839,23 +387428,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.cnaAuthorResponseDoc" + "$ref": "#/definitions/domainintel.robotsResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid domain", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "robots.txt unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -309866,31 +387455,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a CNA author profile", + "summary": "Fetch robots.txt", "tags": [ - "CNA" + "Domain" ] } }, - "/cna/headlines": { + "/domain/site/{domain}": { "get": { - "description": "Returns fresh CNA headlines for one section. `section` is required and is `asia`, `business`, `singapore`, `sport` or `world`. Each item has a title and URL, and may also carry a summary, author, publication time and image.", - "operationId": "cna-headlines", + "consumes": [ + "application/json" + ], + "description": "Resolves the hostname through public DoH, rejects unsafe addresses, pins the connection while preserving Host and TLS SNI, then derives TLS, public headers, and technology from one bounded homepage response.", + "operationId": "domain-site", "parameters": [ { - "description": "CNA section slug", - "enum": [ - "asia", - "business", - "singapore", - "sport", - "world" - ], - "in": "query", - "name": "section", + "description": "Bare DNS hostname", + "in": "path", + "name": "domain", "required": true, "type": "string", - "x-example": "asia" + "x-example": "github.com" } ], "produces": [ @@ -309900,49 +387485,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/domainintel.siteInspectionResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid domain", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get CNA section headlines", - "tags": [ - "CNA" - ] - } - }, - "/cna/news": { - "get": { - "description": "Returns the latest CNA (Channel NewsAsia) top stories, with no input needed. Each item has a title and canonical URL, and may also carry a summary, author, publication time and image.", - "operationId": "cna-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "503": { - "description": "Service Unavailable", + "description": "Public HTTPS page unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -309953,50 +387512,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get CNA top stories", + "summary": "Inspect one public HTTPS homepage", "tags": [ - "CNA" + "Domain" ] } }, - "/cna/sections": { + "/domain/subdomains/{domain}": { "get": { - "description": "Lists the five CNA sections accepted by `cna-headlines`: `asia`, `business`, `singapore`, `sport` and `world`. Each has a `slug`, a display `name` and the feed `url`.", - "operationId": "cna-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get CNA sections", - "tags": [ - "CNA" - ] - } - }, - "/cnbc/article": { - "get": { - "description": "Returns public CNBC article metadata and server-rendered body paragraphs. Provide a canonical dated cnbc.com article URL; account-gated content is not bypassed.", - "operationId": "cnbc-article", + "description": "Returns crt.name index entries. Names may be historical, are not checked against live DNS, and the source limits unauthenticated queries to 100 per source IP per day.", + "operationId": "domain-subdomains", "parameters": [ { - "description": "Canonical cnbc.com article URL", - "in": "query", - "name": "url", + "description": "Bare DNS hostname", + "in": "path", + "name": "domain", "required": true, "type": "string", - "x-example": "https://www.cnbc.com/2026/09/21/iran-us-oil-prices-crude-saudi-arabia-.html" + "x-example": "github.com" } ], "produces": [ @@ -310006,35 +387542,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cnbc.articleResponseDoc" + "$ref": "#/definitions/domainintel.subdomainsResponseDoc" } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Invalid domain", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Subdomain index unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -310045,30 +387569,27 @@ "ApiKeyAuth": [] } ], - "summary": "CNBC article content", + "summary": "List public indexed subdomains", "tags": [ - "CNBC" + "Domain" ] } }, - "/cnbc/author": { + "/domain/wayback/availability/{domain}": { "get": { - "description": "Returns one CNBC author's public bio page: name, job title, biography, social links, and their most recent articles. Provide either the author's slug (the last path segment of their cnbc.com bio page) or the full bio page URL.", - "operationId": "cnbc-author", + "consumes": [ + "application/json" + ], + "description": "Performs one Internet Archive Availability API request.", + "operationId": "domain-wayback-availability", "parameters": [ { - "description": "CNBC author slug, e.g. jeff-cox", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "jeff-cox" - }, - { - "description": "Canonical https://www.cnbc.com// author page URL, as an alternative to slug", - "in": "query", - "name": "url", + "description": "Bare DNS hostname", + "in": "path", + "name": "domain", + "required": true, "type": "string", - "x-example": "https://www.cnbc.com/jeff-cox/" + "x-example": "github.com" } ], "produces": [ @@ -310078,35 +387599,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cnbc.authorResponseDoc" + "$ref": "#/definitions/domainintel.waybackAvailabilityResponseDoc" } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Invalid domain", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Wayback Availability API unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -310117,16 +387626,29 @@ "ApiKeyAuth": [] } ], - "summary": "CNBC author profile", + "summary": "Get the closest Wayback snapshot", "tags": [ - "CNBC" + "Domain" ] } }, - "/cnbc/categories": { + "/domain/wayback/cdx/{domain}": { "get": { - "description": "Lists the public CNBC editorial sections accepted by /cnbc/headlines, including market, investing, business, technology, and policy subsections, with each section's slug, display name, and landing-page URL.", - "operationId": "cnbc-categories", + "consumes": [ + "application/json" + ], + "description": "Performs one bounded Internet Archive CDX request and returns the earliest sample per year.", + "operationId": "domain-wayback-cdx", + "parameters": [ + { + "description": "Bare DNS hostname", + "in": "path", + "name": "domain", + "required": true, + "type": "string", + "x-example": "github.com" + } + ], "produces": [ "application/json" ], @@ -310134,23 +387656,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cnbc.categoriesResponseDoc" + "$ref": "#/definitions/domainintel.waybackCDXResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Invalid domain", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Wayback CDX unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -310161,24 +387683,27 @@ "ApiKeyAuth": [] } ], - "summary": "CNBC editorial sections", + "summary": "Get Wayback CDX year samples", "tags": [ - "CNBC" + "Domain" ] } }, - "/cnbc/headlines": { + "/dominos/coupons": { "get": { - "description": "Returns current server-rendered CNBC headlines for one public editorial section, including title, article URL, and card metadata when available. Use /cnbc/categories to discover the supported section slugs.", - "operationId": "cnbc-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns one Domino's US store's available coupons and deals: standalone coupons (code, name, description, price, valid service methods, and any alternate promo/marketing codes that resolve to the same coupon), plus tiered volume-discount coupon groups (e.g. \"order 7+ pizzas, get 15% off\"). Reads the same structured menu response as GET /dominos/menu, so it costs no additional upstream request. A store can genuinely have zero active coupons -- an empty list is not an error. Store ids come from GET /dominos/store-locator. An unknown store id returns 404.", + "operationId": "dominos-coupons", "parameters": [ { - "description": "Public CNBC editorial section slug from /cnbc/categories", + "description": "Domino's store id, from /dominos/store-locator", "in": "query", - "name": "section", + "name": "store_id", "required": true, "type": "string", - "x-example": "markets" + "x-example": "4336" } ], "produces": [ @@ -310188,7 +387713,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cnbc.headlinesResponseDoc" + "$ref": "#/definitions/dominos.couponsResponseDoc" } }, "400": { @@ -310197,14 +387722,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -310221,24 +387746,27 @@ "ApiKeyAuth": [] } ], - "summary": "CNBC section headlines", + "summary": "Get one Domino's store's available coupons and deals", "tags": [ - "CNBC" + "Dominos" ] } }, - "/cnet/article": { + "/dominos/customization": { "get": { - "description": "Returns public CNET article metadata and body paragraphs from a canonical article URL. CNET articles are freely readable; video-only pages and pages without an article body are reported as upstream errors rather than returned empty.", - "operationId": "cnet-article", + "consumes": [ + "application/json" + ], + "description": "Returns one Domino's US store's full build-your-own customization catalog, grouped by product category (Domino's own names, e.g. \"BuildYourOwnDomino\" for pizza, \"GSalad\" for garden salads): every selectable size, crust/flavor style, topping, and side, each with its own code, name, description, dietary/placement flags (e.g. Meat, Vege, Sauce, WholeOnly), and any other attributes Domino's attaches (e.g. ExclusiveGroup for mutually-exclusive options). Also returns cooking instructions (bake level, cut style, seasoning), grouped. Store ids come from GET /dominos/store-locator. An unknown store id returns 404.", + "operationId": "dominos-customization", "parameters": [ { - "description": "Canonical CNET article URL", + "description": "Domino's store id, from /dominos/store-locator", "in": "query", - "name": "url", + "name": "store_id", "required": true, "type": "string", - "x-example": "https://www.cnet.com/tech/mobile/meta-connect-new-glasses-muse-ai-hearing-assistance-ray-bans-more/" + "x-example": "4336" } ], "produces": [ @@ -310248,7 +387776,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/dominos.customizationResponseDoc" } }, "400": { @@ -310263,6 +387791,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -310275,37 +387809,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get CNET article content", + "summary": "Get one Domino's store's full build-your-own customization catalog", "tags": [ - "CNET" + "Dominos" ] } }, - "/cnet/author": { + "/dominos/menu": { "get": { - "description": "Returns one CNET author's public profile: name, role, biography, areas of expertise, social links, and one page of their recent articles.", - "operationId": "cnet-author", + "consumes": [ + "application/json" + ], + "description": "Returns one Domino's US store's full menu, as a flat list of categories (each with a stable code/name path, e.g. \"Pizza > Specialty Pizzas\") and their items. Each item carries its code, name, description, and product type, plus every purchasable variant (size/style) with its own code, name, and price. Store ids come from GET /dominos/store-locator. An unknown store id returns 404.", + "operationId": "dominos-menu", "parameters": [ { - "description": "Author slug, e.g. scottstein8", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "scottstein8" - }, - { - "description": "Canonical cnet.com/profiles/ URL, optionally with a /page// segment; alternative to slug", + "description": "Domino's store id, from /dominos/store-locator", "in": "query", - "name": "url", + "name": "store_id", + "required": true, "type": "string", - "x-example": "https://www.cnet.com/profiles/scottstein8/" - }, - { - "default": 1, - "description": "1-based page number; overrides any page number in url", - "in": "query", - "name": "page", - "type": "integer" + "x-example": "4336" } ], "produces": [ @@ -310315,7 +387839,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.cnetAuthorResponseDoc" + "$ref": "#/definitions/dominos.menuResponseDoc" } }, "400": { @@ -310330,6 +387854,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -310342,77 +387872,60 @@ "ApiKeyAuth": [] } ], - "summary": "Get a CNET author profile", + "summary": "Get one Domino's store's full structured menu", "tags": [ - "CNET" + "Dominos" ] } }, - "/cnet/headlines": { + "/dominos/nutrition": { "get": { - "description": "Returns fresh CNET headlines for one topic. `section` is required and takes a topic slug such as `ai`, `deals`, `smart-home`, `electric-vehicles` or `tv-and-movies`; an invalid value returns a 400 error. Each item has a title and URL, and may also carry a summary, author, publication time and image.", - "operationId": "cnet-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns calorie information (Domino's own \"Cal-O-Meter\" data) for one product at one store. For a named/fixed menu item (a specialty pizza, bread, wing, pasta, sandwich, salad, drink, or dessert -- any item code from GET /dominos/menu), give only store_id and product_code; the item's default configuration is used. For a build-your-own pizza, also give size, base, and any topping codes -- calories are computed for that exact configuration, matching Domino's own live calculator. size and base must be given together; toppings requires both. Reads live, not from a cache -- each call creates and discards one anonymous cart server-side, so it is slower than this family's other endpoints. An unknown product code, or an invalid size/base/topping combination, returns an error.", + "operationId": "dominos-nutrition", "parameters": [ { - "description": "CNET topic slug", - "enum": [ - "ai", - "aircraft", - "auto-tech", - "automobiles", - "biology", - "car-accessories", - "car-apps", - "car-industry", - "car-news", - "climate", - "computing", - "culture", - "deals", - "electric-vehicles", - "energy-and-utilities", - "entertainment", - "fashion", - "fitness", - "gaming", - "health", - "home", - "home-entertainment", - "internet", - "kitchen-and-household", - "live-blog", - "medical", - "mental", - "mobile", - "motorcycles", - "news", - "nutrition", - "parenting", - "personal-care", - "personal-finance", - "personal-mobility", - "privacy", - "rideshare", - "roadshow", - "science", - "security", - "services-and-software", - "sleep", - "smart-home", - "social-media", - "space", - "sports", - "tech", - "tech-industry", - "tv-and-movies", - "watercraft", - "yard-and-outdoors" - ], + "description": "Domino's store id, from /dominos/store-locator", "in": "query", - "name": "section", + "name": "store_id", "required": true, "type": "string", - "x-example": "ai" + "x-example": "4336" + }, + { + "description": "A product code from /dominos/menu's items[].code -- a named/fixed item, or a build-your-own base (e.g. S_PIZZA)", + "in": "query", + "name": "product_code", + "required": true, + "type": "string", + "x-example": "S_PIZZA" + }, + { + "description": "Build-your-own size code, from /dominos/menu's variants. Required together with base.", + "in": "query", + "name": "size", + "type": "string", + "x-example": "14" + }, + { + "description": "Build-your-own crust code. Required together with size.", + "in": "query", + "name": "base", + "type": "string", + "x-example": "HANDTOSS" + }, + { + "collectionFormat": "csv", + "description": "Repeatable. Topping codes to add to a build-your-own pizza. Only used together with size+base.", + "in": "query", + "items": { + "type": "string" + }, + "name": "toppings", + "type": "array", + "x-example": "P" } ], "produces": [ @@ -310422,7 +387935,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/dominos.nutritionResponseDoc" } }, "400": { @@ -310431,6 +387944,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -310443,16 +387968,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get CNET section headlines", + "summary": "Get calorie information for one Domino's product configuration", "tags": [ - "CNET" + "Dominos" ] } }, - "/cnet/news": { + "/dominos/store": { "get": { - "description": "Returns the latest CNET top stories, with no input needed. Each item has a title, canonical URL, summary, publication time and author name when CNET provides them.", - "operationId": "cnet-news", + "consumes": [ + "application/json" + ], + "description": "Returns one Domino's US store's full profile -- richer than /dominos/store-locator's per-store summary. Includes the store's complete weekly hours (general hours and each service method's own hours, Monday-first, with every open/close window per day), Domino's own free-text hours summary per service method, per-service-method estimated wait windows, open/online status, per-service-method order availability (delivery, carryout, drive-up carryout, dine-in), contactless option status, and delivery/carryout order minimums. Store ids come from GET /dominos/store-locator. An unknown store id returns 404.", + "operationId": "dominos-store", + "parameters": [ + { + "description": "Domino's store id, from /dominos/store-locator", + "in": "query", + "name": "store_id", + "required": true, + "type": "string", + "x-example": "4336" + } + ], "produces": [ "application/json" ], @@ -310460,7 +387998,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/dominos.storeDetailResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -310481,16 +388031,56 @@ "ApiKeyAuth": [] } ], - "summary": "Get CNET top stories", + "summary": "Get one Domino's store's full profile record", "tags": [ - "CNET" + "Dominos" ] } }, - "/cnet/sections": { + "/dominos/store-locator": { "get": { - "description": "Lists the 51 CNET topics accepted by `cnet-headlines`: top-level and second-level topics with a recently updated feed, plus `ai`, `deals` and `tv-and-movies`. Each has a `slug`, a display `name` and the feed `url`. Deeper sub-topics are not separate sections; `internet` means Home Internet and `security` means Home Security.", - "operationId": "cnet-sections", + "consumes": [ + "application/json" + ], + "description": "Returns Domino's US stores that can serve a location: store id, address with coordinates, phone, open/online status, per-service-method availability (delivery, carryout, drive-up carryout), contactless option status, Domino's own hours summary per service method, and estimated wait windows. At least one of postal_code, or both city and state, is required; address is an optional street line that improves precision when combined with city/state. The response's query field echoes how Domino's own address resolver actually interpreted the input, including its granularity (e.g. resolved to a specific street range vs. only a city/region).", + "operationId": "dominos-store-locator", + "parameters": [ + { + "description": "Optional street address line", + "in": "query", + "name": "address", + "type": "string", + "x-example": "1600 Pennsylvania Ave NW" + }, + { + "description": "City name (required together with state if postal_code is not given)", + "in": "query", + "name": "city", + "type": "string", + "x-example": "Washington" + }, + { + "description": "Two-letter US state code (required together with city if postal_code is not given)", + "in": "query", + "name": "state", + "type": "string", + "x-example": "DC" + }, + { + "description": "US ZIP code (can be used alone instead of city/state)", + "in": "query", + "name": "postal_code", + "type": "string", + "x-example": "20500" + }, + { + "description": "One of: Delivery, Carryout. Default Delivery", + "in": "query", + "name": "service_method", + "type": "string", + "x-example": "Delivery" + } + ], "produces": [ "application/json" ], @@ -310498,7 +388088,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/dominos.storeLocatorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -310507,27 +388115,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get CNET sections", + "summary": "Find Domino's stores near an address, city/state, or ZIP code", "tags": [ - "CNET" + "Dominos" ] } }, - "/cnn/article": { + "/doordash/explore": { "get": { "consumes": [ "application/json" ], - "description": "Returns a CNN article's headline, description, author, publication and update times, section, image, and body paragraphs. Provide a canonical cnn.com article URL.", - "operationId": "cnn-article", + "description": "Returns DoorDash's location-based \"nearby stores\" browse feed from the Android mobile guest experience. Unlike search or autocomplete, no search query is required. No DoorDash account or caller-supplied token is required.", + "operationId": "doordash-explore", "parameters": [ { - "description": "Canonical cnn.com article URL", + "description": "Consumer latitude", "in": "query", - "name": "url", + "name": "latitude", "required": true, - "type": "string", - "x-example": "https://www.cnn.com/2026/08/19/africa/kenya-helicopter-crash-latam-intl" + "type": "number", + "x-example": 37.7825 + }, + { + "description": "Consumer longitude", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.461 } ], "produces": [ @@ -310537,7 +388153,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cnn.articleResponseDoc" + "$ref": "#/definitions/doordash.exploreResponseDoc" } }, "400": { @@ -310546,18 +388162,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -310576,33 +388180,49 @@ "ApiKeyAuth": [] } ], - "summary": "CNN article content", + "summary": "Get DoorDash nearby stores explore feed", "tags": [ - "CNN" + "DoorDash" ] } }, - "/cnn/author": { + "/doordash/feed": { "get": { "consumes": [ "application/json" ], - "description": "Returns one CNN profile's byline metadata (name and title), bio paragraphs, social accounts, and recent articles/videos. Provide either a profile slug or a canonical cnn.com/profiles/ URL.", - "operationId": "cnn-author", + "description": "Returns nearby stores for a location from the Android mobile guest experience: store ID, name, cover image and tags, plus rating, price range, delivery fee and ETA when the upstream feed surface reports them. Those metric fields are omitted rather than estimated when it does not, so treat their absence as \"not reported\". No DoorDash account or caller-supplied token is required.", + "operationId": "doordash-feed", "parameters": [ { - "description": "CNN profile slug, e.g. jake-tapper-profile (a slug without the -profile suffix is tried with it first, then as-is)", + "description": "Consumer latitude", "in": "query", - "name": "slug", - "type": "string", - "x-example": "jake-tapper-profile" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7825 }, { - "description": "Canonical cnn.com/profiles/ URL, as an alternative to slug", + "description": "Consumer longitude", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.cnn.com/profiles/jake-tapper-profile" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.461 + }, + { + "description": "Number of stores to skip", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + }, + { + "description": "Max stores to return", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -310612,7 +388232,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cnn.authorResponseDoc" + "$ref": "#/definitions/doordash.feedResponseDoc" } }, "400": { @@ -310621,18 +388241,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -310651,41 +388259,75 @@ "ApiKeyAuth": [] } ], - "summary": "CNN profile page", + "summary": "Get DoorDash store discovery feed", "tags": [ - "CNN" + "DoorDash" ] } }, - "/cnn/headlines": { + "/doordash/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns the current CNN headline stream for one section, including title, article URL, description, publication time, and image when available.", - "operationId": "cnn-headlines", + "description": "Searches the Android mobile guest catalog for pickup restaurants near a location and supports optional result filters. No DoorDash account or caller-supplied token is required.", + "operationId": "doordash-search", "parameters": [ { - "default": "world", - "description": "CNN section. Allowed values: world, us, politics, business, health, entertainment, style, travel, sports, science, climate, weather, opinion. Default world.", - "enum": [ - "world", - "us", - "politics", - "business", - "health", - "entertainment", - "style", - "travel", - "sports", - "science", - "climate", - "weather", - "opinion" - ], + "description": "Restaurant, cuisine, or dish query", "in": "query", - "name": "section", - "type": "string" + "name": "query", + "required": true, + "type": "string", + "x-example": "pizza" + }, + { + "description": "Consumer latitude", + "in": "query", + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7825 + }, + { + "description": "Consumer longitude", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.461 + }, + { + "description": "Exact cuisine or store tag, case-insensitive", + "in": "query", + "name": "tag", + "type": "string", + "x-example": "Pizza" + }, + { + "description": "Keep only DashPass-eligible stores", + "in": "query", + "name": "dashPassOnly", + "type": "boolean" + }, + { + "description": "Keep only stores currently available ASAP", + "in": "query", + "name": "asapOnly", + "type": "boolean" + }, + { + "description": "Keep only pickup-enabled stores", + "in": "query", + "name": "pickupOnly", + "type": "boolean" + }, + { + "description": "Maximum displayed distance in miles, from 0 to 100", + "in": "query", + "name": "maxDistanceMiles", + "type": "number", + "x-example": 5 } ], "produces": [ @@ -310695,7 +388337,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cnn.headlinesResponseDoc" + "$ref": "#/definitions/doordash.searchResponseDoc" } }, "400": { @@ -310704,12 +388346,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -310728,27 +388364,43 @@ "ApiKeyAuth": [] } ], - "summary": "CNN section headlines", + "summary": "Search DoorDash pickup restaurants", "tags": [ - "CNN" + "DoorDash" ] } }, - "/cnn/live-story": { + "/doordash/search/autocomplete": { "get": { "consumes": [ "application/json" ], - "description": "Returns a CNN live story from its canonical cnn.com live-news `url`: title, description, last update time and the posts in chronological order. Each post has an id, title, paragraphs of text, and published and updated times.", - "operationId": "cnn-live-story", + "description": "Returns pickup restaurant matches from the Android mobile guest search experience near a location. No DoorDash account or caller-supplied token is required.", + "operationId": "doordash-search-autocomplete", "parameters": [ { - "description": "Canonical cnn.com live-news URL", + "description": "Partial restaurant, cuisine, or dish query", "in": "query", - "name": "url", + "name": "query", "required": true, "type": "string", - "x-example": "https://www.cnn.com/2026/08/26/world/live-news/iran-war-trump" + "x-example": "piz" + }, + { + "description": "Consumer latitude", + "in": "query", + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7825 + }, + { + "description": "Consumer longitude", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.461 } ], "produces": [ @@ -310758,7 +388410,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cnn.liveStoryResponseDoc" + "$ref": "#/definitions/doordash.searchResponseDoc" } }, "400": { @@ -310767,18 +388419,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -310797,96 +388437,35 @@ "ApiKeyAuth": [] } ], - "summary": "CNN live story updates", + "summary": "Get DoorDash pickup search suggestions", "tags": [ - "CNN" + "DoorDash" ] } }, - "/coingecko/categories": { + "/doordash/search/filters": { "get": { "consumes": [ "application/json" ], - "description": "Lists CoinGecko coin categories, up to `limit` rows (default and max 100), priced in the `vs_currency` you choose. Each row has its rank, id, slug, name, URL, 1h, 24h and 7d percentage changes, market cap, 24h volume and coin count, where CoinGecko shows them.", - "operationId": "coingecko-categories", + "description": "Returns the cuisines and filter values supported by the Android mobile guest search experience for a location. No DoorDash account or caller-supplied token is required.", + "operationId": "doordash-search-filters", "parameters": [ { - "description": "Rows to return, default 100, max 100", + "description": "Consumer latitude", "in": "query", - "name": "limit", - "type": "integer" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7825 }, { - "description": "Quote currency", - "enum": [ - "btc", - "eth", - "ltc", - "bch", - "bnb", - "eos", - "xrp", - "xlm", - "link", - "dot", - "yfi", - "sol", - "usd", - "aed", - "ars", - "aud", - "bdt", - "bhd", - "bmd", - "brl", - "cad", - "chf", - "clp", - "cny", - "czk", - "dkk", - "eur", - "gbp", - "gel", - "hkd", - "huf", - "idr", - "ils", - "inr", - "jpy", - "krw", - "kwd", - "lkr", - "mmk", - "mxn", - "myr", - "ngn", - "nok", - "nzd", - "php", - "pkr", - "pln", - "rub", - "sar", - "sek", - "sgd", - "thb", - "try", - "twd", - "uah", - "vef", - "vnd", - "zar", - "xdr", - "xag", - "xau", - "bits", - "sats" - ], + "description": "Consumer longitude", "in": "query", - "name": "vs_currency", - "type": "string" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.461 } ], "produces": [ @@ -310896,7 +388475,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.categoriesResponseDoc" + "$ref": "#/definitions/doordash.searchFiltersResponseDoc" } }, "400": { @@ -310923,110 +388502,78 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko categories", + "summary": "Get DoorDash search filter options", "tags": [ - "CoinGecko" + "DoorDash" ] } }, - "/coingecko/category/{slug}/coins": { + "/doordash/search/items": { "get": { "consumes": [ "application/json" ], - "description": "Lists the coins in one CoinGecko category, identified by the required `slug` such as `stablecoins`. Paged with `page` (default 1) and `limit` (default and max 100), priced in `vs_currency`. Each coin has rank, symbol, price, 1h to 30d changes, 24h volume, market cap and fully diluted valuation.", - "operationId": "coingecko-category-coins", + "description": "Searches menu items across nearby merchants from the Android mobile guest experience. Nearby candidate stores are selected first, then their menus are read and every item whose name or description matches the query is returned with its parent store. At most five proximity-ranked stores are inspected per request, and a store whose menu cannot be read is skipped, so results are best-effort across that candidate set. An empty result array means no candidate store menu matched, not that no nearby merchant sells the item. No DoorDash account or caller-supplied token is required.", + "operationId": "doordash-search-items", "parameters": [ { - "description": "CoinGecko category slug such as stablecoins", - "in": "path", - "name": "slug", + "description": "Dish or item search text", + "in": "query", + "name": "query", "required": true, "type": "string", - "x-example": "stablecoins" + "x-example": "pizza" }, { - "description": "Page number, default 1", + "description": "Cuisine or store tag used to narrow candidate stores", "in": "query", - "name": "page", - "type": "integer" + "name": "tag", + "type": "string", + "x-example": "Pizza" }, { - "description": "Rows to return, default 100, max 100", + "description": "Keep only DashPass-eligible stores", "in": "query", - "name": "limit", - "type": "integer" + "name": "dashPassOnly", + "type": "boolean", + "x-example": false }, { - "description": "Quote currency", - "enum": [ - "btc", - "eth", - "ltc", - "bch", - "bnb", - "eos", - "xrp", - "xlm", - "link", - "dot", - "yfi", - "sol", - "usd", - "aed", - "ars", - "aud", - "bdt", - "bhd", - "bmd", - "brl", - "cad", - "chf", - "clp", - "cny", - "czk", - "dkk", - "eur", - "gbp", - "gel", - "hkd", - "huf", - "idr", - "ils", - "inr", - "jpy", - "krw", - "kwd", - "lkr", - "mmk", - "mxn", - "myr", - "ngn", - "nok", - "nzd", - "php", - "pkr", - "pln", - "rub", - "sar", - "sek", - "sgd", - "thb", - "try", - "twd", - "uah", - "vef", - "vnd", - "zar", - "xdr", - "xag", - "xau", - "bits", - "sats" - ], + "description": "Keep only stores currently available ASAP", "in": "query", - "name": "vs_currency", - "type": "string" + "name": "asapOnly", + "type": "boolean", + "x-example": false + }, + { + "description": "Keep only pickup-enabled stores", + "in": "query", + "name": "pickupOnly", + "type": "boolean", + "x-example": false + }, + { + "description": "Maximum displayed distance in miles", + "in": "query", + "name": "maxDistanceMiles", + "type": "number", + "x-example": 5 + }, + { + "description": "Consumer latitude", + "in": "query", + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7825 + }, + { + "description": "Consumer longitude", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.461 } ], "produces": [ @@ -311036,7 +388583,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.categoryCoinsResponseDoc" + "$ref": "#/definitions/doordash.searchItemsResponseDoc" } }, "400": { @@ -311045,12 +388592,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -311069,96 +388610,43 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko category coins", + "summary": "Search DoorDash dishes and items", "tags": [ - "CoinGecko" + "DoorDash" ] } }, - "/coingecko/chains": { + "/doordash/store/{store_id}": { "get": { "consumes": [ "application/json" ], - "description": "Lists blockchains from CoinGecko's chains table, up to `limit` rows (default and max 100), in the `vs_currency` you pick. Each chain has its rank, id, name, URL, logo, top gainers, 24h, 7d and 30d changes, 24h volume, TVL, dominance percent and coin count, where shown.", - "operationId": "coingecko-chains", + "description": "Returns public metadata for a DoorDash store by its numeric `store_id`, as seen from the delivery location given by the required `latitude` and `longitude`. The response has the name, URL, images, average rating, rating count, and menu section and item counts. Address, coordinates and price range appear only when DoorDash supplies them. Missing or out-of-range coordinates return `400`.", + "operationId": "doordash-store", "parameters": [ { - "description": "Rows to return, default 100, max 100", + "description": "Numeric DoorDash store ID", + "in": "path", + "name": "store_id", + "required": true, + "type": "string", + "x-example": "26282644" + }, + { + "description": "Delivery latitude", "in": "query", - "name": "limit", - "type": "integer" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7825 }, { - "description": "Quote currency", - "enum": [ - "btc", - "eth", - "ltc", - "bch", - "bnb", - "eos", - "xrp", - "xlm", - "link", - "dot", - "yfi", - "sol", - "usd", - "aed", - "ars", - "aud", - "bdt", - "bhd", - "bmd", - "brl", - "cad", - "chf", - "clp", - "cny", - "czk", - "dkk", - "eur", - "gbp", - "gel", - "hkd", - "huf", - "idr", - "ils", - "inr", - "jpy", - "krw", - "kwd", - "lkr", - "mmk", - "mxn", - "myr", - "ngn", - "nok", - "nzd", - "php", - "pkr", - "pln", - "rub", - "sar", - "sek", - "sgd", - "thb", - "try", - "twd", - "uah", - "vef", - "vnd", - "zar", - "xdr", - "xag", - "xau", - "bits", - "sats" - ], + "description": "Delivery longitude", "in": "query", - "name": "vs_currency", - "type": "string" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.461 } ], "produces": [ @@ -311168,7 +388656,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.chainsResponseDoc" + "$ref": "#/definitions/doordash.storeResponseDoc" } }, "400": { @@ -311177,6 +388665,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -311195,104 +388689,43 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko chains", + "summary": "Get a DoorDash store", "tags": [ - "CoinGecko" + "DoorDash" ] } }, - "/coingecko/chains/{id}": { + "/doordash/store/{store_id}/fulfillment": { "get": { "consumes": [ "application/json" ], - "description": "Returns sections from a CoinGecko chain detail page. Sections are omitted when not present. This endpoint supports the documented `vs_currency` enum.", - "operationId": "coingecko-chain", + "description": "Returns store fulfillment methods, delivery fee info, and scheduling details from the Android mobile guest experience. No DoorDash account or caller-supplied token is required.", + "operationId": "doordash-store-fulfillment", "parameters": [ { - "description": "CoinGecko chain id such as ethereum", + "description": "Numeric DoorDash store ID", "in": "path", - "name": "id", + "name": "store_id", "required": true, "type": "string", - "x-example": "ethereum" + "x-example": "26282644" }, { - "description": "Rows per section to return, default 20, max 100", + "description": "Delivery latitude", "in": "query", - "name": "limit", - "type": "integer" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7825 }, { - "description": "Quote currency", - "enum": [ - "btc", - "eth", - "ltc", - "bch", - "bnb", - "eos", - "xrp", - "xlm", - "link", - "dot", - "yfi", - "sol", - "usd", - "aed", - "ars", - "aud", - "bdt", - "bhd", - "bmd", - "brl", - "cad", - "chf", - "clp", - "cny", - "czk", - "dkk", - "eur", - "gbp", - "gel", - "hkd", - "huf", - "idr", - "ils", - "inr", - "jpy", - "krw", - "kwd", - "lkr", - "mmk", - "mxn", - "myr", - "ngn", - "nok", - "nzd", - "php", - "pkr", - "pln", - "rub", - "sar", - "sek", - "sgd", - "thb", - "try", - "twd", - "uah", - "vef", - "vnd", - "zar", - "xdr", - "xag", - "xau", - "bits", - "sats" - ], + "description": "Delivery longitude", "in": "query", - "name": "vs_currency", - "type": "string" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.461 } ], "produces": [ @@ -311302,7 +388735,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.chainDetailResponseDoc" + "$ref": "#/definitions/doordash.storeFulfillmentResponseDoc" } }, "400": { @@ -311335,98 +388768,43 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko chain detail", + "summary": "Get DoorDash store fulfillment details", "tags": [ - "CoinGecko" + "DoorDash" ] } }, - "/coingecko/coin/{id}": { + "/doordash/store/{store_id}/info": { "get": { "consumes": [ "application/json" ], - "description": "Returns CoinGecko profile, market stats, links, and categories for one coin id. This endpoint supports the documented `vs_currency` enum and is not intended for real-time trading.", - "operationId": "coingecko-coin", + "description": "Returns a lightweight store info card (map coordinates, address, phone number) from the Android mobile guest experience. This is a distinct upstream contract from the full store endpoint and reliably includes address and coordinates. No DoorDash account or caller-supplied token is required.", + "operationId": "doordash-store-info", "parameters": [ { - "description": "CoinGecko coin id such as bitcoin", + "description": "Numeric DoorDash store ID", "in": "path", - "name": "id", + "name": "store_id", "required": true, "type": "string", - "x-example": "bitcoin" + "x-example": "26282644" }, { - "description": "Quote currency", - "enum": [ - "btc", - "eth", - "ltc", - "bch", - "bnb", - "eos", - "xrp", - "xlm", - "link", - "dot", - "yfi", - "sol", - "usd", - "aed", - "ars", - "aud", - "bdt", - "bhd", - "bmd", - "brl", - "cad", - "chf", - "clp", - "cny", - "czk", - "dkk", - "eur", - "gbp", - "gel", - "hkd", - "huf", - "idr", - "ils", - "inr", - "jpy", - "krw", - "kwd", - "lkr", - "mmk", - "mxn", - "myr", - "ngn", - "nok", - "nzd", - "php", - "pkr", - "pln", - "rub", - "sar", - "sek", - "sgd", - "thb", - "try", - "twd", - "uah", - "vef", - "vnd", - "zar", - "xdr", - "xag", - "xau", - "bits", - "sats" - ], + "description": "Delivery latitude", "in": "query", - "name": "vs_currency", - "type": "string" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7825 + }, + { + "description": "Delivery longitude", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.461 } ], "produces": [ @@ -311436,7 +388814,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.coinResponseDoc" + "$ref": "#/definitions/doordash.storeInfoResponseDoc" } }, "400": { @@ -311469,114 +388847,51 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko coin profile", + "summary": "Get DoorDash store contact info", "tags": [ - "CoinGecko" + "DoorDash" ] } }, - "/coingecko/coin/{id}/analysis": { + "/doordash/store/{store_id}/item/{item_id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns derived price-chart metrics from CoinGecko public chart JSON. This endpoint supports the documented `vs_currency` enum and is not investment advice or real-time trading data.", - "operationId": "coingecko-coin-analysis", + "description": "Returns details for a specific menu item from the Android mobile guest experience. The item is matched by name, case-insensitively, against the store menu: DoorDash's anonymous menu surface exposes no stable per-item identifier, so use a name returned by the store menu or item search. A name that is not on the menu returns 404; no substitute item is returned. No DoorDash account or caller-supplied token is required.", + "operationId": "doordash-store-item", "parameters": [ { - "description": "CoinGecko coin id such as bitcoin", + "description": "Numeric DoorDash store ID", "in": "path", - "name": "id", + "name": "store_id", "required": true, "type": "string", - "x-example": "bitcoin" + "x-example": "26282644" }, { - "description": "Quote currency", - "enum": [ - "btc", - "eth", - "ltc", - "bch", - "bnb", - "eos", - "xrp", - "xlm", - "link", - "dot", - "yfi", - "sol", - "usd", - "aed", - "ars", - "aud", - "bdt", - "bhd", - "bmd", - "brl", - "cad", - "chf", - "clp", - "cny", - "czk", - "dkk", - "eur", - "gbp", - "gel", - "hkd", - "huf", - "idr", - "ils", - "inr", - "jpy", - "krw", - "kwd", - "lkr", - "mmk", - "mxn", - "myr", - "ngn", - "nok", - "nzd", - "php", - "pkr", - "pln", - "rub", - "sar", - "sek", - "sgd", - "thb", - "try", - "twd", - "uah", - "vef", - "vnd", - "zar", - "xdr", - "xag", - "xau", - "bits", - "sats" - ], - "in": "query", - "name": "vs_currency", - "type": "string" + "description": "Menu item name, matched case-insensitively", + "in": "path", + "name": "item_id", + "required": true, + "type": "string", + "x-example": "Fluffy Pancakes" }, { - "description": "Chart range", - "enum": [ - "24h", - "max" - ], + "description": "Delivery latitude", "in": "query", - "name": "range", - "type": "string" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7825 }, { - "description": "Fetch optional CoinGecko chart annotations", + "description": "Delivery longitude", "in": "query", - "name": "include_annotations", - "type": "boolean" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.461 } ], "produces": [ @@ -311586,7 +388901,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.analysisResponseDoc" + "$ref": "#/definitions/doordash.storeItemResponseDoc" } }, "400": { @@ -311619,104 +388934,43 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko coin chart analysis", + "summary": "Get DoorDash menu item details", "tags": [ - "CoinGecko" + "DoorDash" ] } }, - "/coingecko/exchange/{id}": { + "/doordash/store/{store_id}/menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns profile stats and market rows from a CoinGecko exchange page. This endpoint supports the documented `vs_currency` enum.", - "operationId": "coingecko-exchange", + "description": "Returns the location-aware DoorDash mobile menu, grouped into sections with item names, descriptions, and displayed prices. No DoorDash account or caller-supplied token is required.", + "operationId": "doordash-store-menu", "parameters": [ { - "description": "CoinGecko exchange id such as binance", + "description": "Numeric DoorDash store ID", "in": "path", - "name": "id", + "name": "store_id", "required": true, "type": "string", - "x-example": "binance" + "x-example": "26282644" }, { - "description": "Rows to return, default 100, max 100", + "description": "Delivery latitude", "in": "query", - "name": "limit", - "type": "integer" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7825 }, { - "description": "Quote currency", - "enum": [ - "btc", - "eth", - "ltc", - "bch", - "bnb", - "eos", - "xrp", - "xlm", - "link", - "dot", - "yfi", - "sol", - "usd", - "aed", - "ars", - "aud", - "bdt", - "bhd", - "bmd", - "brl", - "cad", - "chf", - "clp", - "cny", - "czk", - "dkk", - "eur", - "gbp", - "gel", - "hkd", - "huf", - "idr", - "ils", - "inr", - "jpy", - "krw", - "kwd", - "lkr", - "mmk", - "mxn", - "myr", - "ngn", - "nok", - "nzd", - "php", - "pkr", - "pln", - "rub", - "sar", - "sek", - "sgd", - "thb", - "try", - "twd", - "uah", - "vef", - "vnd", - "zar", - "xdr", - "xag", - "xau", - "bits", - "sats" - ], + "description": "Delivery longitude", "in": "query", - "name": "vs_currency", - "type": "string" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.461 } ], "produces": [ @@ -311726,7 +388980,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.exchangeDetailResponseDoc" + "$ref": "#/definitions/doordash.menuResponseDoc" } }, "400": { @@ -311759,114 +389013,43 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko exchange detail", + "summary": "Get a DoorDash store menu", "tags": [ - "CoinGecko" + "DoorDash" ] } }, - "/coingecko/exchanges": { + "/doordash/store/{store_id}/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Lists CoinGecko exchanges from one table chosen by `kind`: `spot` (default), `dex`, `derivatives` or `perp_dex`. Paged with `page` and `limit` (default and max 100). Each exchange has rank, id, name, URL, logo, and, where shown, a trust score and 24h volume in `vs_currency`.", - "operationId": "coingecko-exchanges", + "description": "Returns store ratings and customer reviews from the Android mobile guest experience for a location. No DoorDash account or caller-supplied token is required.", + "operationId": "doordash-store-reviews", "parameters": [ { - "description": "Exchange table kind, default spot", - "enum": [ - "spot", - "dex", - "derivatives", - "perp_dex" - ], - "in": "query", - "name": "kind", - "type": "string" - }, - { - "description": "Page number, default 1", - "in": "query", - "name": "page", - "type": "integer" + "description": "Numeric DoorDash store ID", + "in": "path", + "name": "store_id", + "required": true, + "type": "string", + "x-example": "26282644" }, { - "description": "Rows to return, default 100, max 100", + "description": "Delivery latitude", "in": "query", - "name": "limit", - "type": "integer" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7825 }, { - "description": "Quote currency", - "enum": [ - "btc", - "eth", - "ltc", - "bch", - "bnb", - "eos", - "xrp", - "xlm", - "link", - "dot", - "yfi", - "sol", - "usd", - "aed", - "ars", - "aud", - "bdt", - "bhd", - "bmd", - "brl", - "cad", - "chf", - "clp", - "cny", - "czk", - "dkk", - "eur", - "gbp", - "gel", - "hkd", - "huf", - "idr", - "ils", - "inr", - "jpy", - "krw", - "kwd", - "lkr", - "mmk", - "mxn", - "myr", - "ngn", - "nok", - "nzd", - "php", - "pkr", - "pln", - "rub", - "sar", - "sek", - "sgd", - "thb", - "try", - "twd", - "uah", - "vef", - "vnd", - "zar", - "xdr", - "xag", - "xau", - "bits", - "sats" - ], + "description": "Delivery longitude", "in": "query", - "name": "vs_currency", - "type": "string" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.461 } ], "produces": [ @@ -311876,7 +389059,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.exchangesResponseDoc" + "$ref": "#/definitions/doordash.storeReviewsResponseDoc" } }, "400": { @@ -311885,6 +389068,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -311903,98 +389092,19 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko exchanges", + "summary": "Get DoorDash store reviews", "tags": [ - "CoinGecko" + "DoorDash" ] } }, - "/coingecko/gainers-losers": { + "/draftkings/casino/directory": { "get": { "consumes": [ "application/json" ], - "description": "Returns CoinGecko's top crypto gainers and top losers as two separate arrays, `gainers` and `losers`, each up to `limit` rows (default 20, max 100). Each coin has its rank, symbol, name, price in `vs_currency`, 24h percentage change and 24h volume.", - "operationId": "coingecko-gainers-losers", - "parameters": [ - { - "description": "Rows per section to return, default 20, max 100", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Quote currency", - "enum": [ - "btc", - "eth", - "ltc", - "bch", - "bnb", - "eos", - "xrp", - "xlm", - "link", - "dot", - "yfi", - "sol", - "usd", - "aed", - "ars", - "aud", - "bdt", - "bhd", - "bmd", - "brl", - "cad", - "chf", - "clp", - "cny", - "czk", - "dkk", - "eur", - "gbp", - "gel", - "hkd", - "huf", - "idr", - "ils", - "inr", - "jpy", - "krw", - "kwd", - "lkr", - "mmk", - "mxn", - "myr", - "ngn", - "nok", - "nzd", - "php", - "pkr", - "pln", - "rub", - "sar", - "sek", - "sgd", - "thb", - "try", - "twd", - "uah", - "vef", - "vnd", - "zar", - "xdr", - "xag", - "xau", - "bits", - "sats" - ], - "in": "query", - "name": "vs_currency", - "type": "string" - } - ], + "description": "Returns the public Online Slots and How to Play Slots links from the DraftKings Casino homepage. Fetch the guide sections with draftkings_casino_slots_guide. It does not fetch game catalogs, promotions, winners, jackpots, or account data.", + "operationId": "draftkings-casino-directory", "produces": [ "application/json" ], @@ -312002,17 +389112,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.gainersLosersResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/casino.casinoDirectoryResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -312029,19 +389133,19 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko crypto gainers and losers", + "summary": "DraftKings Casino slots directory", "tags": [ - "CoinGecko" + "DraftKings Casino" ] } }, - "/coingecko/global": { + "/draftkings/casino/slots-guide": { "get": { "consumes": [ "application/json" ], - "description": "Returns CoinGecko's global crypto market snapshot: total market cap in USD with its 24-hour and 1-year change, Bitcoin market cap, Bitcoin and Ethereum dominance, stablecoin market cap and share, and the number of coins, exchanges and categories tracked. Takes no parameters.", - "operationId": "coingecko-global", + "description": "Returns the public slots guide's basic rules and responsible-play sections. Account setup, payments, promotions, and strategy sections are omitted. This is informational page content, not gambling advice.", + "operationId": "draftkings-casino-slots-guide", "produces": [ "application/json" ], @@ -312049,17 +389153,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.globalResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/casino.casinoSlotsGuideResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -312076,54 +389174,60 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko global market snapshot", + "summary": "DraftKings Casino slots guide", "tags": [ - "CoinGecko" + "DraftKings Casino" ] } }, - "/coingecko/global/charts": { + "/draftkings/casino/slots/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns a time series for one global crypto metric from CoinGecko: total market cap (default), Bitcoin dominance, altcoin market cap or DeFi market cap. Choose a `range` from `24h` to `max` (default `90d`) and cap points per series with `limit` (default 120, max 500). Each point has a timestamp, datetime and value.", - "operationId": "coingecko-global-charts", - "parameters": [ - { - "description": "Chart kind, default total_market_cap", - "enum": [ - "total_market_cap", - "bitcoin_dominance", - "altcoin_market_cap", - "defi_market_cap" - ], - "in": "query", - "name": "kind", - "type": "string" + "description": "Lists public slot-category sections from the logged-out Casino configuration. It returns category labels and upstream IDs only; it does not return game listings, winners, jackpots, promotions, personal data, or jurisdiction eligibility.", + "operationId": "draftkings-casino-slots-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/casino.casinoSlotsCategoriesResponseDoc" + } }, - { - "description": "Chart range, default 90d", - "enum": [ - "24h", - "7d", - "14d", - "30d", - "90d", - "1y", - "max" - ], - "in": "query", - "name": "range", - "type": "string" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Rows per series to return, default 120, max 500", - "in": "query", - "name": "limit", - "type": "integer" + "ApiKeyAuth": [] } ], + "summary": "DraftKings Casino slot categories", + "tags": [ + "DraftKings Casino" + ] + } + }, + "/draftkings/casino/slots/cleopatra-guide": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns written gameplay sections from DraftKings Casino's public Cleopatra tutorial. The image-only payout table and promotional recommendation/CTA sections are omitted. This is informational page content, not wagering advice.", + "operationId": "draftkings-casino-cleopatra-guide", "produces": [ "application/json" ], @@ -312131,17 +389235,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.globalChartsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/casino.casinoCleopatraGuideResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -312158,43 +389256,19 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko global chart series", + "summary": "DraftKings Cleopatra slot guide", "tags": [ - "CoinGecko" + "DraftKings Casino" ] } }, - "/coingecko/learn/articles": { + "/draftkings/casino/slots/wheel-of-fortune-guide": { "get": { "consumes": [ "application/json" ], - "description": "Lists article cards from CoinGecko Learn, optionally narrowed by `category` (`all` by default, `latest`, `guides`, `reviews`, `api` and others), up to `limit` (default 20, max 50). Each card has title, URL, image, category, excerpt, author, published date and, where present, rating score, text and votes.", - "operationId": "coingecko-learn-articles", - "parameters": [ - { - "description": "Learn category, default all", - "enum": [ - "all", - "latest", - "airdrop-guides", - "coins-and-tokens", - "guides", - "wallets-and-bridges", - "api", - "reviews" - ], - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Rows to return, default 20, max 50", - "in": "query", - "name": "limit", - "type": "integer" - } - ], + "description": "Returns written gameplay instructions from DraftKings Casino's public Wheel of Fortune: Triple Extreme Spin tutorial. The video embed, demo-mode call to action, and jurisdiction-specific footer are omitted. This is informational content, not wagering advice.", + "operationId": "draftkings-casino-wheel-of-fortune-guide", "produces": [ "application/json" ], @@ -312202,17 +389276,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.learnArticlesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/casino.casinoWheelOfFortuneGuideResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -312229,104 +389297,60 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko Learn articles", + "summary": "DraftKings Wheel of Fortune slot guide", "tags": [ - "CoinGecko" + "DraftKings Casino" ] } }, - "/coingecko/markets": { + "/draftkings/dfs/glossary": { "get": { "consumes": [ "application/json" ], - "description": "Returns cryptocurrency market rows from CoinGecko. This endpoint supports the documented `vs_currency` enum and is not intended for real-time trading.", - "operationId": "coingecko-markets", - "parameters": [ - { - "description": "Page number, default 1", - "in": "query", - "name": "page", - "type": "integer" + "description": "Returns the public Daily Fantasy glossary terms and definitions from DraftKings' How to Play page. It does not access the contest lobby, player pool, or account data.", + "operationId": "draftkings-dfs-glossary", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dfs.dfsGlossaryResponseDoc" + } }, - { - "description": "Rows to return, default 100, max 100", - "in": "query", - "name": "limit", - "type": "integer" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Quote currency", - "enum": [ - "btc", - "eth", - "ltc", - "bch", - "bnb", - "eos", - "xrp", - "xlm", - "link", - "dot", - "yfi", - "sol", - "usd", - "aed", - "ars", - "aud", - "bdt", - "bhd", - "bmd", - "brl", - "cad", - "chf", - "clp", - "cny", - "czk", - "dkk", - "eur", - "gbp", - "gel", - "hkd", - "huf", - "idr", - "ils", - "inr", - "jpy", - "krw", - "kwd", - "lkr", - "mmk", - "mxn", - "myr", - "ngn", - "nok", - "nzd", - "php", - "pkr", - "pln", - "rub", - "sar", - "sek", - "sgd", - "thb", - "try", - "twd", - "uah", - "vef", - "vnd", - "zar", - "xdr", - "xag", - "xau", - "bits", - "sats" - ], - "in": "query", - "name": "vs_currency", - "type": "string" + "ApiKeyAuth": [] } ], + "summary": "DraftKings Daily Fantasy glossary", + "tags": [ + "DraftKings Daily Fantasy Sports" + ] + } + }, + "/draftkings/dfs/guide": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns public contest-type summaries and sport landing-page links from DraftKings' Daily Fantasy Sports guide. Use draftkings_dfs_glossary for the page's public terminology definitions. This is a read-only guide directory; it does not access contests, lineups, player pools, or accounts. Availability and age limits vary by location.", + "operationId": "draftkings-dfs-guide", "produces": [ "application/json" ], @@ -312334,23 +389358,52 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.marketsResponseDoc" + "$ref": "#/definitions/dfs.dfsGuideResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "DraftKings Daily Fantasy guide", + "tags": [ + "DraftKings Daily Fantasy Sports" + ] + } + }, + "/draftkings/dfs/nfl-best-ball/featured-contests": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Lists the contest cards currently shown in DraftKings' public NFL Best Ball Featured Contests section, including displayed entry-fee and top-prize amounts and maximum entries. This is the landing-page selection, not the full contest lobby or a guarantee that a contest remains open. It does not follow tournament-detail links or return promotions, entries, lineups, or account data.", + "operationId": "draftkings-dfs-nfl-best-ball-featured-contests", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dfs.dfsNFLBestBallFeaturedContestsResponseDoc" + } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -312367,104 +389420,60 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko markets", + "summary": "DraftKings NFL Best Ball featured contests", "tags": [ - "CoinGecko" + "DraftKings Daily Fantasy Sports" ] } }, - "/coingecko/new-coins": { + "/draftkings/dfs/rules-and-scoring": { "get": { "consumes": [ "application/json" ], - "description": "Lists newly listed cryptocurrencies from CoinGecko, paged with `page` (default 1) and `limit` (default and max 100), priced in `vs_currency`. Each coin has its rank, symbol, name, chain, price, 1h and 24h changes, 24h volume, fully diluted valuation and when it was last added.", - "operationId": "coingecko-new-coins", - "parameters": [ - { - "description": "Page number, default 1", - "in": "query", - "name": "page", - "type": "integer" + "description": "Returns the public Daily Fantasy rules and scoring overview plus visible sports and contest-style rules. Each rule includes upstream game-type IDs and sanitized scoring content. Hidden records, including XFL rules, are omitted; contests, players, prizes, lineups, and account data are not returned.", + "operationId": "draftkings-dfs-rules-and-scoring", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dfs.dfsRulesAndScoringResponseDoc" + } }, - { - "description": "Rows to return, default 100, max 100", - "in": "query", - "name": "limit", - "type": "integer" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Quote currency", - "enum": [ - "btc", - "eth", - "ltc", - "bch", - "bnb", - "eos", - "xrp", - "xlm", - "link", - "dot", - "yfi", - "sol", - "usd", - "aed", - "ars", - "aud", - "bdt", - "bhd", - "bmd", - "brl", - "cad", - "chf", - "clp", - "cny", - "czk", - "dkk", - "eur", - "gbp", - "gel", - "hkd", - "huf", - "idr", - "ils", - "inr", - "jpy", - "krw", - "kwd", - "lkr", - "mmk", - "mxn", - "myr", - "ngn", - "nok", - "nzd", - "php", - "pkr", - "pln", - "rub", - "sar", - "sek", - "sgd", - "thb", - "try", - "twd", - "uah", - "vef", - "vnd", - "zar", - "xdr", - "xag", - "xau", - "bits", - "sats" - ], - "in": "query", - "name": "vs_currency", - "type": "string" + "ApiKeyAuth": [] } ], + "summary": "DraftKings DFS Rules & Scoring", + "tags": [ + "DraftKings Daily Fantasy Sports" + ] + } + }, + "/draftkings/dfs/sports": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the public US-DK sport catalog with exact sport codes and DraftKings' enabled/public-contests flags. The flags describe the source catalog, not caller-specific location eligibility. This endpoint does not access contests, lineups, prizes, or account data.", + "operationId": "draftkings-dfs-sports", "produces": [ "application/json" ], @@ -312472,17 +389481,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.newCoinsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/dfs.dfsSportsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -312499,27 +389502,19 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko new cryptocurrencies", + "summary": "DraftKings Daily Fantasy sports catalog", "tags": [ - "CoinGecko" + "DraftKings Daily Fantasy Sports" ] } }, - "/coingecko/news": { + "/draftkings/pick6/rules": { "get": { "consumes": [ "application/json" ], - "description": "Returns recent crypto news cards from CoinGecko, up to `limit` articles (default 20, max 50). Each article has its title, URL, image URL, summary, publisher and `published_text`, plus the coins it mentions with their id, name, symbol, URL and `change_percent` when present.", - "operationId": "coingecko-news", - "parameters": [ - { - "description": "Rows to return, default 20, max 50", - "in": "query", - "name": "limit", - "type": "integer" - } - ], + "description": "Returns public rule sections from the DraftKings Pick6 Rules and Scoring page plus child pages with verified detail routes. Unverified upstream links are omitted from the slug directory. It does not return player picks, projections, user entries, or location tokens.", + "operationId": "draftkings-pick6-rules", "produces": [ "application/json" ], @@ -312527,17 +389522,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.newsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/pick6.pick6RulesResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -312554,110 +389543,47 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko news cards", + "summary": "DraftKings Pick6 rules", "tags": [ - "CoinGecko" + "DraftKings Pick6" ] } }, - "/coingecko/nft/category/{slug}": { + "/draftkings/pick6/rules/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Lists NFT collections in one CoinGecko NFT category, identified by the required `slug` such as `metaverse`. Paged with `page` and `limit` (default and max 100). Each collection has chain, floor price and market cap in native and USD terms, 24h volume, 24h sales, and 24h, 7d and 30d changes.", - "operationId": "coingecko-nft-category", + "description": "Returns public scoring and rule sections for one supported Pick6 sport/format page. Discover supported slugs with draftkings_pick6_rules. This endpoint does not return player picks, projections, user entries, or location tokens.", + "operationId": "draftkings-pick6-rule-page", "parameters": [ { - "description": "CoinGecko NFT category slug such as metaverse", + "description": "Sport/format slug listed by draftkings_pick6_rules", + "enum": [ + "nfl", + "nba", + "nhl", + "pga-full-tournament", + "pga-single-round", + "mlb", + "wnba", + "nascar", + "cfb", + "cbb", + "soccer", + "valorant", + "miscellaneous", + "league-of-legends", + "counter-strike", + "call-of-duty", + "nfl-season-long", + "nba-season-long" + ], "in": "path", "name": "slug", "required": true, "type": "string", - "x-example": "metaverse" - }, - { - "description": "Page number, default 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Rows to return, default 100, max 100", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Quote currency", - "enum": [ - "btc", - "eth", - "ltc", - "bch", - "bnb", - "eos", - "xrp", - "xlm", - "link", - "dot", - "yfi", - "sol", - "usd", - "aed", - "ars", - "aud", - "bdt", - "bhd", - "bmd", - "brl", - "cad", - "chf", - "clp", - "cny", - "czk", - "dkk", - "eur", - "gbp", - "gel", - "hkd", - "huf", - "idr", - "ils", - "inr", - "jpy", - "krw", - "kwd", - "lkr", - "mmk", - "mxn", - "myr", - "ngn", - "nok", - "nzd", - "php", - "pkr", - "pln", - "rub", - "sar", - "sek", - "sgd", - "thb", - "try", - "twd", - "uah", - "vef", - "vnd", - "zar", - "xdr", - "xag", - "xau", - "bits", - "sats" - ], - "in": "query", - "name": "vs_currency", - "type": "string" + "x-example": "pga-single-round" } ], "produces": [ @@ -312667,7 +389593,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.nftCategoryResponseDoc" + "$ref": "#/definitions/pick6.pick6RuleDetailResponseDoc" } }, "400": { @@ -312676,14 +389602,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -312700,104 +389620,19 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko NFT category", + "summary": "DraftKings Pick6 sport-specific rules", "tags": [ - "CoinGecko" + "DraftKings Pick6" ] } }, - "/coingecko/nfts": { + "/draftkings/pick6/sports": { "get": { "consumes": [ "application/json" ], - "description": "Lists NFT collections from CoinGecko's main NFT table, paged with `page` (default 1) and `limit` (default and max 100). Each collection has rank, name, chain, floor price, market cap and 24h volume in native and USD terms, 24h sales, and 24h, 7d and 30d percentage changes.", - "operationId": "coingecko-nfts", - "parameters": [ - { - "description": "Page number, default 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Rows to return, default 100, max 100", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Quote currency", - "enum": [ - "btc", - "eth", - "ltc", - "bch", - "bnb", - "eos", - "xrp", - "xlm", - "link", - "dot", - "yfi", - "sol", - "usd", - "aed", - "ars", - "aud", - "bdt", - "bhd", - "bmd", - "brl", - "cad", - "chf", - "clp", - "cny", - "czk", - "dkk", - "eur", - "gbp", - "gel", - "hkd", - "huf", - "idr", - "ils", - "inr", - "jpy", - "krw", - "kwd", - "lkr", - "mmk", - "mxn", - "myr", - "ngn", - "nok", - "nzd", - "php", - "pkr", - "pln", - "rub", - "sar", - "sek", - "sgd", - "thb", - "try", - "twd", - "uah", - "vef", - "vnd", - "zar", - "xdr", - "xag", - "xau", - "bits", - "sats" - ], - "in": "query", - "name": "vs_currency", - "type": "string" - } - ], + "description": "Returns the dated public Help Center snapshot of Pick6 sports and contest formats, with exact sport codes and links published by the Help Center, plus the CFB/CBB jurisdiction restriction. Product-page reachability is not verified. This directory does not return picks or projections and does not imply availability in the caller's location.", + "operationId": "draftkings-pick6-sports", "produces": [ "application/json" ], @@ -312805,17 +389640,52 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.nftsResponseDoc" + "$ref": "#/definitions/pick6.pick6SportsResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "DraftKings Pick6 sport directory", + "tags": [ + "DraftKings Pick6" + ] + } + }, + "/draftkings/predictions/availability": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the 52 region/status mappings shown on DraftKings Predictions' public availability map. Allowed `status` values: `all_markets_available`, `financial_markets_only`, `sports_markets_unavailable`, `no_markets_available`. This source map is not a complete legal eligibility matrix and does not separately classify all territories or tribal land. It does not read caller location or trading/account state.", + "operationId": "draftkings-predictions-availability", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/predictions.predictionsAvailabilityResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -312832,35 +389702,19 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko NFT collections", + "summary": "DraftKings Predictions availability map", "tags": [ - "CoinGecko" + "DraftKings Predictions" ] } }, - "/coingecko/search": { + "/draftkings/predictions/categories": { "get": { "consumes": [ "application/json" ], - "description": "Searches CoinGecko for the required query `q` and returns matches in separate sections: `coins`, `categories`, `markets`, `nft_contracts`, `asset_platforms` and `posts`, each up to `limit` rows (default 10, max 50). Every section is always an array, and a search with no matches returns empty arrays.", - "operationId": "coingecko-search", - "parameters": [ - { - "description": "Search query", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "bitcoin" - }, - { - "description": "Rows per section to return, default 10, max 50", - "in": "query", - "name": "limit", - "type": "integer" - } - ], + "description": "Returns the public category and league navigation from the DraftKings Predictions homepage. It excludes market quotes, trade-slip selections, accounts, balances, promotions, and location data. Market availability varies by location and time; this endpoint is a navigation directory, not trading advice.", + "operationId": "draftkings-predictions-categories", "produces": [ "application/json" ], @@ -312868,17 +389722,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.searchResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/predictions.predictionsCategoriesResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -312895,27 +389743,19 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko discovery search", + "summary": "DraftKings Predictions categories", "tags": [ - "CoinGecko" + "DraftKings Predictions" ] } }, - "/coingecko/token-unlocks": { + "/draftkings/predictions/rules": { "get": { "consumes": [ "application/json" ], - "description": "Returns CoinGecko's list of upcoming token unlocks, up to 100 rows. Each row has the coin's name, symbol, rank, price, 1-hour, 24-hour and 7-day change and market cap, the share of supply already released, and the next unlock's amount, percentage, USD value and time remaining.", - "operationId": "coingecko-token-unlocks", - "parameters": [ - { - "description": "Rows to return, default 100, max 100", - "in": "query", - "name": "limit", - "type": "integer" - } - ], + "description": "Lists public rulebook and settlement-source links from the DraftKings Predictions Rules and Settlements page. It does not fetch market data, quotes, trades, user state, or location context.", + "operationId": "draftkings-predictions-rules", "produces": [ "application/json" ], @@ -312923,17 +389763,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.tokenUnlocksResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/predictions.predictionsRulesResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -312950,122 +389784,27 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko incoming token unlocks", + "summary": "DraftKings Predictions rules and settlement sources", "tags": [ - "CoinGecko" + "DraftKings Predictions" ] } }, - "/coingecko/treasuries": { + "/draftkings/racing/race/{race_id}": { "get": { "consumes": [ "application/json" ], - "description": "Lists entities that hold crypto treasuries, filtered by `asset` (`all`, `bitcoin`, `ethereum`, `solana`, `bnb`, `xrp`, `tron`) and `holder_type` (`all`, `companies`, `governments`), up to `limit` (default and max 100). Setting both filters to non-`all` values is rejected. Rows show holdings, cost, current value, mNAV and 30-day activity.", - "operationId": "coingecko-treasuries", + "description": "Returns public race-card details for one race ID from DraftKings Racing, including entries, horse identifiers, morning-line and live odds, and finish positions when posted. It excludes pools, probable payouts, bet-form IDs, real-time WebSocket requests, favorites, and participant personal names.", + "operationId": "draftkings-racing-race-info", "parameters": [ { - "description": "Treasury asset filter, default all", - "enum": [ - "all", - "bitcoin", - "ethereum", - "solana", - "bnb", - "xrp", - "tron" - ], - "in": "query", - "name": "asset", - "type": "string" - }, - { - "description": "Treasury holder type filter, default all", - "enum": [ - "all", - "companies", - "governments" - ], - "in": "query", - "name": "holder_type", - "type": "string" - }, - { - "description": "Rows to return, default 100, max 100", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Quote currency", - "enum": [ - "btc", - "eth", - "ltc", - "bch", - "bnb", - "eos", - "xrp", - "xlm", - "link", - "dot", - "yfi", - "sol", - "usd", - "aed", - "ars", - "aud", - "bdt", - "bhd", - "bmd", - "brl", - "cad", - "chf", - "clp", - "cny", - "czk", - "dkk", - "eur", - "gbp", - "gel", - "hkd", - "huf", - "idr", - "ils", - "inr", - "jpy", - "krw", - "kwd", - "lkr", - "mmk", - "mxn", - "myr", - "ngn", - "nok", - "nzd", - "php", - "pkr", - "pln", - "rub", - "sar", - "sek", - "sgd", - "thb", - "try", - "twd", - "uah", - "vef", - "vnd", - "zar", - "xdr", - "xag", - "xau", - "bits", - "sats" - ], - "in": "query", - "name": "vs_currency", - "type": "string" + "description": "Race ID from the public Racing schedule", + "in": "path", + "name": "race_id", + "required": true, + "type": "integer", + "x-example": 381519098 } ], "produces": [ @@ -313075,7 +389814,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.treasuriesResponseDoc" + "$ref": "#/definitions/racing.racingRaceInfoResponseDoc" } }, "400": { @@ -313084,8 +389823,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -313102,98 +389841,19 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko crypto treasuries", + "summary": "DraftKings Racing race card and results", "tags": [ - "CoinGecko" + "DraftKings Racing" ] } }, - "/coingecko/trending": { + "/draftkings/racing/schedule": { "get": { "consumes": [ "application/json" ], - "description": "Returns trending coins and trending categories from CoinGecko's highlights, deduplicated by slug, each section up to `limit` rows (default 20, max 50). Items carry name, URL and, where CoinGecko shows them, price in `vs_currency` and 1h, 24h and 7d percentage changes.", - "operationId": "coingecko-trending", - "parameters": [ - { - "description": "Rows per section to return, default 20, max 50", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Quote currency", - "enum": [ - "btc", - "eth", - "ltc", - "bch", - "bnb", - "eos", - "xrp", - "xlm", - "link", - "dot", - "yfi", - "sol", - "usd", - "aed", - "ars", - "aud", - "bdt", - "bhd", - "bmd", - "brl", - "cad", - "chf", - "clp", - "cny", - "czk", - "dkk", - "eur", - "gbp", - "gel", - "hkd", - "huf", - "idr", - "ils", - "inr", - "jpy", - "krw", - "kwd", - "lkr", - "mmk", - "mxn", - "myr", - "ngn", - "nok", - "nzd", - "php", - "pkr", - "pln", - "rub", - "sar", - "sek", - "sgd", - "thb", - "try", - "twd", - "uah", - "vef", - "vnd", - "zar", - "xdr", - "xag", - "xau", - "bits", - "sats" - ], - "in": "query", - "name": "vs_currency", - "type": "string" - } - ], + "description": "Returns public race-card metadata from the DraftKings Racing homepage, including track, race number, scheduled post time, and status. Favorite-track and wager data are excluded.", + "operationId": "draftkings-racing-schedule", "produces": [ "application/json" ], @@ -313201,17 +389861,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/coingecko.trendingResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/racing.racingScheduleResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -313228,35 +389882,19 @@ "ApiKeyAuth": [] } ], - "summary": "CoinGecko trending highlights", + "summary": "DraftKings Racing schedule", "tags": [ - "CoinGecko" + "DraftKings Racing" ] } }, - "/colehaan/collections": { + "/draftkings/racing/tracks": { "get": { "consumes": [ "application/json" ], - "description": "Returns collections from Cole Haan (https://www.colehaan.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", - "operationId": "colehaan-collections", - "parameters": [ - { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Maximum collections, defaults to 50 and supports up to 250", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 - } - ], + "description": "Returns the public All Tracks directory with track type, status, schedule count, and country metadata. Favorite IDs, runner details, and wagering controls are excluded.", + "operationId": "draftkings-racing-tracks", "produces": [ "application/json" ], @@ -313264,13 +389902,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/racing.racingTracksResponseDoc" } }, "429": { @@ -313291,41 +389923,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Cole Haan collections", + "summary": "DraftKings Racing tracks", "tags": [ - "Cole Haan" + "DraftKings Racing" ] } }, - "/colehaan/collections/{handle}/products": { + "/draftkings/sportsbook/event": { "get": { "consumes": [ "application/json" ], - "description": "Returns products from one Cole Haan (https://www.colehaan.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", - "operationId": "colehaan-collection-products", + "description": "Returns one event's metadata (league id, sport id, teams, status, start time). `event_id` is a numeric DraftKings event identifier (find it from an event's DraftKings Sportsbook page, or from the `id` field of an event returned by /draftkings/sportsbook/odds). The returned `league_id` is accepted by /draftkings/sportsbook/odds and /draftkings/sportsbook/futures. This endpoint does not include betting markets/odds.", + "operationId": "draftkings-event", "parameters": [ { - "description": "Collection handle", - "in": "path", - "name": "handle", + "description": "Numeric DraftKings event id", + "in": "query", + "name": "event_id", "required": true, "type": "string", - "x-example": "collection-handle" - }, - { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Maximum products, defaults to 50 and supports up to 250", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "x-example": "34240140" } ], "produces": [ @@ -313335,7 +389953,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" + "$ref": "#/definitions/sportsbook.eventResponseDoc" } }, "400": { @@ -313368,33 +389986,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Cole Haan collection products", + "summary": "DraftKings Sportsbook event", "tags": [ - "Cole Haan" + "DraftKings Sportsbook" ] } }, - "/colehaan/pages": { + "/draftkings/sportsbook/event-context": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists Cole Haan static pages, with `page` (from 1) and `limit` (default 50, max 250). Each page has handle, title, URL, plain-text content and timestamps. If `transport_mode` is `ssr_embedded`, items carry only `handle`, `url` and `updated_at`, so fetch a single page for its content.", - "operationId": "colehaan-pages", + "description": "Returns public sport, league, and event navigation identifiers for a numeric DraftKings event id. Use it to associate an event with DraftKings Sportsbook's public sport and league navigation.", + "operationId": "draftkings-event-context", "parameters": [ { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Maximum static pages, defaults to 50 and supports up to 250", + "description": "Numeric DraftKings event id", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "event_id", + "required": true, + "type": "string", + "x-example": "34522271" } ], "produces": [ @@ -313404,7 +390013,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pagesResponseDoc" + "$ref": "#/definitions/sportsbook.eventContextResponseDoc" } }, "400": { @@ -313413,6 +390022,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -313431,27 +390046,35 @@ "ApiKeyAuth": [] } ], - "summary": "List Cole Haan static pages", + "summary": "DraftKings Sportsbook event context", "tags": [ - "Cole Haan" + "DraftKings Sportsbook" ] } }, - "/colehaan/pages/{handle}": { + "/draftkings/sportsbook/event-markets": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Cole Haan static page by its `handle`: id, title, URL, plain-text content, and created, published and updated times. A missing handle returns 404. When `transport_mode` is `ssr_embedded`, `id` is omitted and the content is plain text taken from the page's rich-text blocks.", - "operationId": "colehaan-page", + "description": "Returns one event's betting markets and selections for a specific market category. `event_id` is a numeric DraftKings event identifier (find it from the `id` field of an event returned by /draftkings/sportsbook/odds). `subcategory_id` selects the market category (e.g. game lines, a player-prop category, an alternate-line category) -- find one from the `subcategory_id` field on a market returned by /draftkings/sportsbook/odds. An empty `markets` list is a valid response when the category has no markets currently posted for this event.", + "operationId": "draftkings-event-markets", "parameters": [ { - "description": "Page handle", - "in": "path", - "name": "handle", + "description": "Numeric DraftKings event id", + "in": "query", + "name": "event_id", "required": true, "type": "string", - "x-example": "page-handle" + "x-example": "34497667" + }, + { + "description": "Numeric DraftKings market subcategory id", + "in": "query", + "name": "subcategory_id", + "required": true, + "type": "string", + "x-example": "6354" } ], "produces": [ @@ -313461,7 +390084,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pageResponseDoc" + "$ref": "#/definitions/sportsbook.eventMarketsResponseDoc" } }, "400": { @@ -313494,35 +390117,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Cole Haan static page", + "summary": "DraftKings Sportsbook event markets", "tags": [ - "Cole Haan" + "DraftKings Sportsbook" ] } }, - "/colehaan/products": { + "/draftkings/sportsbook/featured-leagues": { "get": { "consumes": [ "application/json" ], - "description": "Returns products from Cole Haan's (https://www.colehaan.com) product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", - "operationId": "colehaan-products", - "parameters": [ - { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Maximum products, defaults to 50 and supports up to 250", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 - } - ], + "description": "Returns public DraftKings Sportsbook leagues currently marked as featured in its sport navigation. Each item includes its numeric `id`, capability `tags`, live-offer status, and upstream featured ordering. Use the `id` as `league_id` with /draftkings/sportsbook/odds and /draftkings/sportsbook/futures.", + "operationId": "draftkings-featured-leagues", "produces": [ "application/json" ], @@ -313530,13 +390137,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/sportsbook.featuredLeaguesResponseDoc" } }, "429": { @@ -313557,27 +390158,35 @@ "ApiKeyAuth": [] } ], - "summary": "List Cole Haan products", + "summary": "DraftKings Sportsbook featured leagues", "tags": [ - "Cole Haan" + "DraftKings Sportsbook" ] } }, - "/colehaan/products/{handle}": { + "/draftkings/sportsbook/futures": { "get": { "consumes": [ "application/json" ], - "description": "Returns product detail for one Cole Haan (https://www.colehaan.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", - "operationId": "colehaan-product", + "description": "Returns league-level futures markets and selections for a specific DraftKings market category. `league_id` is a numeric DraftKings league identifier and `subcategory_id` is a numeric futures category identifier. An empty `events` list is a valid response when the category has no markets currently posted for that league.", + "operationId": "draftkings-futures", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", + "description": "Numeric DraftKings league id", + "in": "query", + "name": "league_id", "required": true, "type": "string", - "x-example": "product-handle" + "x-example": "84240" + }, + { + "description": "Numeric DraftKings futures market subcategory id", + "in": "query", + "name": "subcategory_id", + "required": true, + "type": "string", + "x-example": "17279" } ], "produces": [ @@ -313587,7 +390196,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productResponseDoc" + "$ref": "#/definitions/sportsbook.futuresResponseDoc" } }, "400": { @@ -313620,45 +390229,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Cole Haan product", + "summary": "DraftKings Sportsbook futures", "tags": [ - "Cole Haan" + "DraftKings Sportsbook" ] } }, - "/colehaan/products/{handle}/recommendations": { + "/draftkings/sportsbook/league-events": { "get": { "consumes": [ "application/json" ], - "description": "Returns recommended products for one Cole Haan (https://www.colehaan.com) product handle. The storefront URL is fixed server-side.", - "operationId": "colehaan-product-recommendations", + "description": "Returns a DraftKings Sportsbook league's current public event directory, including event IDs, teams or other participants, start times, status, and public availability tags. Supply a numeric `league_id` from /draftkings/sportsbook/leagues, /draftkings/sportsbook/quick-links, /draftkings/sportsbook/featured-leagues, or /draftkings/sportsbook/event. This endpoint does not include betting markets or odds.", + "operationId": "draftkings-league-events", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", - "required": true, - "type": "string", - "x-example": "product-handle" - }, - { - "description": "Maximum products, defaults to 10 and supports up to 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 - }, - { - "description": "Recommendation intent. Allowed values: related, complementary", - "enum": [ - "related", - "complementary" - ], + "description": "Numeric DraftKings league id", "in": "query", - "name": "intent", + "name": "league_id", + "required": true, "type": "string", - "x-example": "related" + "x-example": "84240" } ], "produces": [ @@ -313668,7 +390259,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" + "$ref": "#/definitions/sportsbook.leagueEventsResponseDoc" } }, "400": { @@ -313701,43 +390292,19 @@ "ApiKeyAuth": [] } ], - "summary": "List Cole Haan product recommendations", + "summary": "DraftKings Sportsbook league event directory", "tags": [ - "Cole Haan" + "DraftKings Sportsbook" ] } }, - "/colehaan/search/suggest": { + "/draftkings/sportsbook/leagues": { "get": { "consumes": [ "application/json" ], - "description": "Returns products, collections, and query suggestions from Cole Haan's (https://www.colehaan.com) predictive search. The storefront URL is fixed server-side.", - "operationId": "colehaan-search-suggest", - "parameters": [ - { - "description": "Search query", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "wool" - }, - { - "description": "Comma-separated suggestion types. Allowed values: product, collection, query", - "in": "query", - "name": "types", - "type": "string", - "x-example": "product,collection,query" - }, - { - "description": "Maximum results per type, defaults to 10 and supports up to 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 - } - ], + "description": "Returns DraftKings Sportsbook's current public sport and league directory. Each league `id` is accepted as `league_id` by /draftkings/sportsbook/odds and /draftkings/sportsbook/futures.", + "operationId": "draftkings-leagues", "produces": [ "application/json" ], @@ -313745,13 +390312,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/sportsbook.leaguesResponseDoc" } }, "429": { @@ -313772,44 +390333,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Cole Haan search suggestions", + "summary": "DraftKings Sportsbook sports and leagues", "tags": [ - "Cole Haan" + "DraftKings Sportsbook" ] } }, - "/colehaan/sitemap/urls": { + "/draftkings/sportsbook/live": { "get": { "consumes": [ "application/json" ], - "description": "Returns capped URL entries from Cole Haan's (https://www.colehaan.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", - "operationId": "colehaan-sitemap-urls", - "parameters": [ - { - "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", - "enum": [ - "all", - "products", - "collections", - "pages", - "blogs", - "agentic_discovery", - "other" - ], - "in": "query", - "name": "type", - "type": "string", - "x-example": "products" - }, - { - "description": "Maximum URL entries, defaults to 50 and supports up to 250", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 - } - ], + "description": "Returns the live events currently shown by DraftKings Sportsbook, including score state, period, primary markets, and market categories that can be used with /draftkings/sportsbook/event-markets. An empty `events` list is valid when DraftKings has no live events at request time.", + "operationId": "draftkings-live", "produces": [ "application/json" ], @@ -313817,13 +390353,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/sportsbook.liveResponseDoc" } }, "429": { @@ -313844,19 +390374,29 @@ "ApiKeyAuth": [] } ], - "summary": "List Cole Haan sitemap URLs", + "summary": "DraftKings Sportsbook live events", "tags": [ - "Cole Haan" + "DraftKings Sportsbook" ] } }, - "/colehaan/sitemaps": { + "/draftkings/sportsbook/odds": { "get": { "consumes": [ "application/json" ], - "description": "Returns child sitemap URLs from Cole Haan's (https://www.colehaan.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", - "operationId": "colehaan-sitemaps", + "description": "Returns the primary betting markets (moneyline, spread, total) for every upcoming event in a DraftKings Sportsbook league. `league_id` is a numeric DraftKings league identifier (find it from a league's DraftKings Sportsbook page). An empty `events` list is a valid response when nothing is currently scheduled.", + "operationId": "draftkings-odds", + "parameters": [ + { + "description": "Numeric DraftKings league id", + "in": "query", + "name": "league_id", + "required": true, + "type": "string", + "x-example": "84240" + } + ], "produces": [ "application/json" ], @@ -313864,7 +390404,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" + "$ref": "#/definitions/sportsbook.oddsResponseDoc" } }, "400": { @@ -313873,6 +390413,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -313891,19 +390437,19 @@ "ApiKeyAuth": [] } ], - "summary": "List Cole Haan sitemaps", + "summary": "DraftKings Sportsbook odds", "tags": [ - "Cole Haan" + "DraftKings Sportsbook" ] } }, - "/colehaan/store": { + "/draftkings/sportsbook/quick-links": { "get": { "consumes": [ "application/json" ], - "description": "Returns storefront metadata for Cole Haan (https://www.colehaan.com). The storefront URL is fixed server-side, so no `url` parameter is accepted.", - "operationId": "colehaan-store", + "description": "Returns the ordered league shortcuts currently prioritized on DraftKings Sportsbook's public home page. Each item includes a numeric `league_id` accepted by /draftkings/sportsbook/odds and /draftkings/sportsbook/futures.", + "operationId": "draftkings-quick-links", "produces": [ "application/json" ], @@ -313911,13 +390457,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.storeResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/sportsbook.quickLinksResponseDoc" } }, "429": { @@ -313938,24 +390478,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get Cole Haan store metadata", + "summary": "DraftKings Sportsbook quick links", "tags": [ - "Cole Haan" + "DraftKings Sportsbook" ] } }, - "/collider/article": { + "/draftkings/sportsbook/team": { "get": { - "description": "Returns one Collider article by its `url`, which must be a single-segment `https://collider.com//` address. The response has the title, description, publish and update times, section, authors, lead image and body `paragraphs`. Section hubs and video or author pages are rejected as invalid parameters.", - "operationId": "collider-article", + "consumes": [ + "application/json" + ], + "description": "Returns stable team metadata embedded in a public DraftKings Sportsbook team page. Supply `team_id`, `sport`, and `slug` from an item returned by /draftkings/sportsbook/teams. Allowed `sport` values: `football`, `hockey`, `basketball`, `baseball`.", + "operationId": "draftkings-team", "parameters": [ { - "description": "Canonical Collider article URL", + "description": "Numeric DraftKings team id", "in": "query", - "name": "url", + "name": "team_id", "required": true, "type": "string", - "x-example": "https://collider.com/saw-new-movie-mike-p-nelson-director/" + "x-example": "18454" + }, + { + "description": "Sport: football, hockey, basketball, baseball", + "enum": [ + "football", + "hockey", + "basketball", + "baseball" + ], + "in": "query", + "name": "sport", + "required": true, + "type": "string", + "x-example": "football" + }, + { + "description": "Lowercase DraftKings team slug", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "arizona-cardinals" } ], "produces": [ @@ -313965,7 +390530,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/sportsbook.teamResponseDoc" } }, "400": { @@ -313998,24 +390563,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get Collider article content", + "summary": "DraftKings Sportsbook team", "tags": [ - "Collider" + "DraftKings Sportsbook" ] } }, - "/collider/author": { + "/draftkings/sportsbook/teams": { "get": { - "description": "Returns a Collider author profile for a `url` of the form `https://collider.com/author//`. The response has the name, title, image, biography, `social_links` (type and URL) and the roughly 20 latest articles on the profile. Paginated author URLs are rejected, so older articles are not available.", - "operationId": "collider-author", + "consumes": [ + "application/json" + ], + "description": "Returns the teams listed on DraftKings Sportsbook's public Teams page for one league. Allowed `league` values: `nfl`, `nhl`, `nba`, `cbb`, `mlb`, `cfb`.", + "operationId": "draftkings-teams", "parameters": [ { - "description": "Canonical Collider author URL", + "description": "League: nfl, nhl, nba, cbb, mlb, cfb", + "enum": [ + "nfl", + "nhl", + "nba", + "cbb", + "mlb", + "cfb" + ], "in": "query", - "name": "url", + "name": "league", "required": true, "type": "string", - "x-example": "https://collider.com/author/hannah-hunt/" + "x-example": "nfl" } ], "produces": [ @@ -314025,7 +390601,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.colliderAuthorResponseDoc" + "$ref": "#/definitions/sportsbook.teamsResponseDoc" } }, "400": { @@ -314034,8 +390610,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -314052,74 +390628,56 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Collider author profile", + "summary": "DraftKings Sportsbook league teams", "tags": [ - "Collider" + "DraftKings Sportsbook" ] } }, - "/collider/headlines": { + "/dramabox/browse": { "get": { - "description": "Returns fresh headlines from one public Collider RSS section. Items from video categories have type video and are not readable through the article endpoint.", - "operationId": "collider-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns one page of 12 DramaBox short dramas, optionally within one genre: id, title, description, cover, link, episode count, tags, genres, rating, update status and displayed views, with the page and total page count. Genre ids come from dramabox-genres. Only public catalog metadata is read; no playable video is returned.", + "operationId": "dramabox-browse", "parameters": [ { - "description": "Collider RSS section slug", + "description": "Genre id from dramabox-genres; 0 or omitted browses all titles", + "in": "query", + "name": "genre_id", + "type": "integer", + "x-example": 161 + }, + { + "description": "Page number, 1 to 1000; defaults to 1. Each page holds 12 titles", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 2 + }, + { + "description": "Site locale, one of: en, ko, zhHans, zh, es, ja, de, in, th, tl, pt, fr, ar, it (in is Indonesian); defaults to en. Each locale has its own title library", "enum": [ - "movie-tv-news", - "tv-movie-news", - "movies", - "movie-news", - "movie-features", - "movie-reviews", - "movie-trailers", - "tv", - "tv-news", - "tv-features", - "tv-reviews", - "tv-trailers", - "all-reviews", - "trailers", - "features", - "exclusives", - "interviews", - "fyc", - "what-to-watch", - "streaming-guides", - "other-streaming-guides", - "netflix", - "amazon", - "disney", - "max", - "hulu", - "apple-tv-plus", - "reality-tv", - "music", - "horror", - "animation", - "video-games", - "gaming-news", - "collectibles", - "screening", - "collider-signature", - "authority", - "collider-rewind", - "collider-quiz", - "podcasts", - "cl-originals", - "videos", - "latest-videos", - "video-originals", - "video-interviews", - "interview-videos", - "exclusive-videos", - "list-videos" + "en", + "ko", + "zhHans", + "zh", + "es", + "ja", + "de", + "in", + "th", + "tl", + "pt", + "fr", + "ar", + "it" ], "in": "query", - "name": "section", - "required": true, + "name": "language", "type": "string", - "x-example": "movie-tv-news" + "x-example": "ja" } ], "produces": [ @@ -314129,7 +390687,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/dramabox.browseResponseDoc" } }, "400": { @@ -314156,16 +390714,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Collider section headlines", + "summary": "Browse DramaBox short dramas by genre", "tags": [ - "Collider" + "DramaBox" ] } }, - "/collider/news": { + "/dramabox/categories": { "get": { - "description": "Lists the latest Collider stories, about 10 items. Each item has its title, canonical URL, summary, publish time, author names (co-authors are joined with a comma) and lead image. Takes no parameters.", - "operationId": "collider-news", + "consumes": [ + "application/json" + ], + "description": "Returns the DramaBox app's category navigation as six groups: language, production type, dub mode, two genre rows (genre_1 and genre_2) and sort order. Each group lists the selectable options as display names and the values to pass to dramabox-category-books. The \"All\" pseudo-option is dropped because omitting a filter means all. Only public catalog metadata is read; no playable video is returned.", + "operationId": "dramabox-categories", "produces": [ "application/json" ], @@ -314173,7 +390734,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/dramabox.categoriesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -314194,16 +390761,91 @@ "ApiKeyAuth": [] } ], - "summary": "Get Collider top stories", + "summary": "List DramaBox category filters", "tags": [ - "Collider" + "DramaBox" ] } }, - "/collider/sections": { + "/dramabox/category-books": { "get": { - "description": "Lists the Collider section slugs that `collider-headlines` accepts, such as `movie-news`, `tv-reviews`, `trailers`, `interviews`, `horror` and `video-games`. Each entry has the `slug`, display `name` and feed `url`. Takes no parameters.", - "operationId": "collider-sections", + "consumes": [ + "application/json" + ], + "description": "Returns one page of 20 DramaBox short dramas from the app's category feed, optionally filtered by values from dramabox-categories: language, production type, dub mode, either genre row and sort order. Filters are ANDed; an omitted filter means all. Each title carries its id, title, description, cover, website link, episode count, tags with tag ids, protagonist, play count, library flag and listing times. Only public catalog metadata is read; no playable video is returned.", + "operationId": "dramabox-category-books", + "parameters": [ + { + "description": "Language/origin value from dramabox-categories' language group, e.g. 美国 (Local) or 中国 (Chinese)", + "in": "query", + "name": "language", + "type": "string", + "x-example": "美国" + }, + { + "description": "Production-type value from dramabox-categories' production group: 3 (AI Drama), 1 (Live-Action), 2 (Anime)", + "enum": [ + "3", + "1", + "2" + ], + "in": "query", + "name": "production", + "type": "string", + "x-example": "1" + }, + { + "description": "Dub-mode value from dramabox-categories' dub group: 1 (Dubbed), 0 (Subtitles Only)", + "enum": [ + "1", + "0" + ], + "in": "query", + "name": "dub", + "type": "string", + "x-example": "1" + }, + { + "description": "Genre value from dramabox-categories' genre_1 group, e.g. 1357 (Romance) or 1361 (Strong Heroine)", + "in": "query", + "name": "genre", + "type": "string", + "x-example": "1357" + }, + { + "description": "Genre value from dramabox-categories' genre_2 group, e.g. 1392 (Second Chance) or 1359 (BL); multi-tag values such as 1324,1362 are one value", + "in": "query", + "name": "genre_2", + "type": "string", + "x-example": "1392" + }, + { + "description": "Sort value from dramabox-categories' sort group: 1 (Trending), 2 (Latest), 3 (Unwatched)", + "enum": [ + "1", + "2", + "3" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "1" + }, + { + "description": "Page number, 1 to 1000; defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Titles per page, 1 to 50; defaults to 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + } + ], "produces": [ "application/json" ], @@ -314211,7 +390853,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/dramabox.categoryBooksResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -314219,6 +390867,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -314226,19 +390880,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Collider RSS sections", + "summary": "Browse DramaBox titles by category", "tags": [ - "Collider" + "DramaBox" ] } }, - "/comc/categories": { + "/dramabox/channels": { "get": { "consumes": [ "application/json" ], - "description": "Returns COMC's (comc.com) closed, top-level category/sport taxonomy -- the discovery endpoint for the search endpoint's `category` param. Every slug is the exact path segment comc.com's own site uses.", - "operationId": "comc-categories", + "description": "Returns the 8 DramaBox app theater channels as ids and names: Popular, New, Rankings, Categories, Anime, Live-Action, VIP and Original+. The channel value for dramabox-theater is the lowercase name (popular, new, rankings, categories, anime, live-action, vip, original). Only public catalog metadata is read; no playable video is returned.", + "operationId": "dramabox-channels", "produces": [ "application/json" ], @@ -314246,7 +390900,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/comc.categoriesResponseDoc" + "$ref": "#/definitions/dramabox.channelsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -314267,27 +390927,27 @@ "ApiKeyAuth": [] } ], - "summary": "List COMC categories", + "summary": "List DramaBox theater channels", "tags": [ - "COMC" + "DramaBox" ] } }, - "/comc/listing": { + "/dramabox/drama": { "get": { "consumes": [ "application/json" ], - "description": "Returns one card+grade combination's full detail from COMC (comc.com): card identity and every seller's individual for-sale copy (owner, item id, price). handle is the value returned by comc_search's CardSummary.handle field (or the equivalent comc.com card URL path).", - "operationId": "comc-listing", + "description": "Returns one DramaBox short drama: title, description, cover, link, language, episode count, lifetime views, follows, tags, genres, listing times, the languages it is available in, the episode list with each episode's number, id, duration, free flag and thumbnail, and related titles. Only public catalog metadata is read; no playable video is returned.", + "operationId": "dramabox-drama", "parameters": [ { - "description": "Required. The handle from a comc_search result (or the equivalent comc.com card URL path).", + "description": "Title id (digits) from any DramaBox list, or a dramabox.com drama URL", "in": "query", - "name": "handle", + "name": "id", "required": true, "type": "string", - "x-example": "Cards/Football/2021/Panini_Absolute_-_Base_-_Red/36/Josh_Allen/17779360" + "x-example": "42000028173" } ], "produces": [ @@ -314297,7 +390957,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/comc.listingResponseDoc" + "$ref": "#/definitions/dramabox.dramaResponseDoc" } }, "400": { @@ -314306,6 +390966,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -314324,106 +390990,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get COMC card listing detail", + "summary": "Get a DramaBox short drama and its episodes", "tags": [ - "COMC" + "DramaBox" ] } }, - "/comc/search": { + "/dramabox/genres": { "get": { "consumes": [ "application/json" ], - "description": "Searches or browses COMC's (comc.com) live consignment marketplace for graded and ungraded trading cards. Each result row is a distinct card+grade combination (COMC's own category/search grid aggregates every seller's copy under one row); chain a row's handle into the listing endpoint for the per-seller breakdown. At least one of category or query is typically useful, but both are optional -- omitting both searches all categories.", - "operationId": "comc-search", + "description": "Returns the genres DramaBox's browse accepts (Romance, Werewolves, Revenge, Billionaire, ...) as ids and names, read live from DramaBox. Pass a genre id to dramabox-browse. Only public catalog metadata is read; no playable video is returned.", + "operationId": "dramabox-genres", "parameters": [ { - "description": "Optional. One of comc_categories' slug values. Omit to search all categories.", - "in": "query", - "name": "category", - "type": "string", - "x-example": "Baseball" - }, - { - "description": "Optional free-text search query.", - "in": "query", - "name": "query", - "type": "string", - "x-example": "mike trout" - }, - { - "description": "Optional. Allowed values: r (Recently Added, default), c (Card #), o (Oldest), n (Newest), b (Highest SRP), h (Highest Price), l (Lowest Price), d (Biggest Discount), p (Highest Percent Off), q (Print Run), s (Least in Stock), m (Most in Stock), e (Ending Soonest).", - "enum": [ - "r", - "c", - "o", - "n", - "b", - "h", - "l", - "d", - "p", - "q", - "s", - "m", - "e" - ], - "in": "query", - "name": "sort", - "type": "string", - "x-example": "r" - }, - { - "description": "Optional, comma-separated. Allowed values: AUTO (Autographed), HOF (Hall of Fame), MEM (Memorabilia), PRC (Pre-Rookie Card), RC (Rookie Card), RR (Rookie Related), RY (Rookie Year), SN (Serial Numbered).", - "in": "query", - "name": "attributes", - "type": "string", - "x-example": "RC,AUTO" - }, - { - "description": "Optional. Allowed values: aUngraded (Ungraded), aGraded (Graded), aAftermarketAuto (Aftermarket Auto), aAfterAutoGraded (Aftermarket Auto Graded).", + "description": "Site locale, one of: en, ko, zhHans, zh, es, ja, de, in, th, tl, pt, fr, ar, it (in is Indonesian); defaults to en. Each locale has its own title library", "enum": [ - "aUngraded", - "aGraded", - "aAftermarketAuto", - "aAfterAutoGraded" + "en", + "ko", + "zhHans", + "zh", + "es", + "ja", + "de", + "in", + "th", + "tl", + "pt", + "fr", + "ar", + "it" ], "in": "query", - "name": "condition", + "name": "language", "type": "string", - "x-example": "aGraded" - }, - { - "description": "1-based page, default 1.", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Optional. Allowed values: 6, 8, 10, 12, 14, 15, 16, 18, 20, 24, 30, 40, 50, 64, 100. Omit to use COMC's own default.", - "enum": [ - 6, - 8, - 10, - 12, - 14, - 15, - 16, - 18, - 20, - 24, - 30, - 40, - 50, - 64, - 100 - ], - "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 20 + "x-example": "ja" } ], "produces": [ @@ -314433,7 +391035,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/comc.searchResponseDoc" + "$ref": "#/definitions/dramabox.genresResponseDoc" } }, "400": { @@ -314460,27 +391062,42 @@ "ApiKeyAuth": [] } ], - "summary": "Search COMC card listings", + "summary": "List DramaBox genres", "tags": [ - "COMC" + "DramaBox" ] } }, - "/congress/report": { + "/dramabox/home": { "get": { "consumes": [ "application/json" ], - "description": "Returns one US Senate disclosure report from the `filing_url` found by the stock-disclosures search, passed as `url`. Supports annual reports, periodic transaction reports and due date extension notices. Output has filer, filing date, `parts` with their rows, and a `transactions` list. House PDFs and paper filings return a validation error.", - "operationId": "congress-report", + "description": "Returns DramaBox's (dramabox.com) home page: the featured short dramas and the three curated shelves (Trending, Must-sees, Hidden gems), each title with its id, title, description, cover, DramaBox link, episode count, tags, genres and the view count as the site prints it. Use dramabox-more for a whole shelf. Only public catalog metadata is read; no playable video is returned.", + "operationId": "dramabox-home", "parameters": [ { - "description": "Filing URL, as returned by congress-stock-disclosures' filing_url field. Must be an efdsearch.senate.gov /search/view/annual/..., /search/view/ptr/..., or /search/view/extension-notice/regular/... URL.", + "description": "Site locale, one of: en, ko, zhHans, zh, es, ja, de, in, th, tl, pt, fr, ar, it (in is Indonesian); defaults to en. Each locale has its own title library", + "enum": [ + "en", + "ko", + "zhHans", + "zh", + "es", + "ja", + "de", + "in", + "th", + "tl", + "pt", + "fr", + "ar", + "it" + ], "in": "query", - "name": "url", - "required": true, + "name": "language", "type": "string", - "x-example": "https://efdsearch.senate.gov/search/view/annual/cc198326-0f50-4f47-8b03-a5c6440f400f/" + "x-example": "ja" } ], "produces": [ @@ -314490,7 +391107,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/congress.reportResponseDoc" + "$ref": "#/definitions/dramabox.homeResponseDoc" } }, "400": { @@ -314499,14 +391116,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -314523,346 +391134,194 @@ "ApiKeyAuth": [] } ], - "summary": "Fetch and parse a congressional disclosure report", + "summary": "List DramaBox's featured titles and shelves", "tags": [ - "Congress" + "DramaBox" ] } }, - "/congress/stock-disclosures": { + "/dramabox/more": { "get": { "consumes": [ "application/json" ], - "description": "Searches congressional stock-disclosure filings for the House (default) or the Senate via `chamber`. House needs `member`; Senate takes `first_name`, `last_name`, `filer_type`, state and `report_type` filters, and `from`/`to` dates. Each result has member, office, filing year, filing type and `filing_url`. Paged by `page` and `limit` (default 50, max 500).", - "operationId": "congress-stock-disclosures", + "description": "Returns one page of 18 titles from a DramaBox curated shelf (trending, must-sees or hidden-gems): id, title, description, cover, link, episode count, tags, genres and displayed views, with the page and total page count. Only public catalog metadata is read; no playable video is returned.", + "operationId": "dramabox-more", "parameters": [ { - "description": "Chamber filter. Allowed values: house, senate.", + "description": "Curated shelf: trending, must-sees or hidden-gems", "enum": [ - "house", - "senate" + "trending", + "must-sees", + "hidden-gems" ], "in": "query", - "name": "chamber", - "type": "string", - "x-example": "house" - }, - { - "description": "Member name. Required for House. For Senate, this backward-compatible shorthand maps one word to last_name and maps the first word plus the complete remaining surname to first_name/last_name; it cannot be combined with either exact name field.", - "in": "query", - "name": "member", - "type": "string" - }, - { - "description": "Senate filer first-name prefix (Senate only; cannot be combined with member).", - "in": "query", - "name": "first_name", - "type": "string", - "x-example": "Elizabeth" - }, - { - "description": "Senate filer last-name prefix (Senate only; cannot be combined with member).", - "in": "query", - "name": "last_name", + "name": "position", + "required": true, "type": "string", - "x-example": "Warren" + "x-example": "trending" }, { - "description": "Deprecated unsupported parameter; any non-empty value returns a validation error and the parameter is planned for removal.", + "description": "Page number, 1 to 1000; defaults to 1. Each page holds 18 titles", "in": "query", - "name": "ticker", - "type": "string" + "name": "page", + "type": "integer", + "x-example": 2 }, { - "description": "State or territory filter (2-letter code). For Senate this backward-compatible shorthand applies to both Senator and Candidate states and cannot be combined with senator_state or candidate_state.", + "description": "Site locale, one of: en, ko, zhHans, zh, es, ja, de, in, th, tl, pt, fr, ar, it (in is Indonesian); defaults to en. Each locale has its own title library", "enum": [ - "AK", - "AL", - "AR", - "AS", - "AZ", - "CA", - "CO", - "CT", - "DC", - "DE", - "FL", - "FM", - "GA", - "GU", - "HI", - "IA", - "ID", - "IL", - "IN", - "KS", - "KY", - "LA", - "MA", - "MD", - "ME", - "MH", - "MI", - "MN", - "MO", - "MP", - "MS", - "MT", - "NC", - "ND", - "NE", - "NH", - "NJ", - "NM", - "NV", - "NY", - "OH", - "OK", - "OR", - "PA", - "PR", - "PW", - "RI", - "SC", - "SD", - "TN", - "TX", - "UT", - "VA", - "VI", - "VT", - "WA", - "WI", - "WV", - "WY" + "en", + "ko", + "zhHans", + "zh", + "es", + "ja", + "de", + "in", + "th", + "tl", + "pt", + "fr", + "ar", + "it" ], "in": "query", - "name": "state", + "name": "language", "type": "string", - "x-example": "CA" + "x-example": "ja" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dramabox.moreResponseDoc" + } }, - { - "description": "Senator state filter (Senate only, 2-letter code).", - "enum": [ - "AK", - "AL", - "AR", - "AS", - "AZ", - "CA", - "CO", - "CT", - "DC", - "DE", - "FL", - "FM", - "GA", - "GU", - "HI", - "IA", - "ID", - "IL", - "IN", - "KS", - "KY", - "LA", - "MA", - "MD", - "ME", - "MH", - "MI", - "MN", - "MO", - "MP", - "MS", - "MT", - "NC", - "ND", - "NE", - "NH", - "NJ", - "NM", - "NV", - "NY", - "OH", - "OK", - "OR", - "PA", - "PR", - "PW", - "RI", - "SC", - "SD", - "TN", - "TX", - "UT", - "VA", - "VI", - "VT", - "WA", - "WI", - "WV", - "WY" - ], - "in": "query", - "name": "senator_state", - "type": "string", - "x-example": "MA" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Candidate state filter (Senate only, 2-letter code).", - "enum": [ - "AK", - "AL", - "AR", - "AS", - "AZ", - "CA", - "CO", - "CT", - "DC", - "DE", - "FL", - "FM", - "GA", - "GU", - "HI", - "IA", - "ID", - "IL", - "IN", - "KS", - "KY", - "LA", - "MA", - "MD", - "ME", - "MH", - "MI", - "MN", - "MO", - "MP", - "MS", - "MT", - "NC", - "ND", - "NE", - "NH", - "NJ", - "NM", - "NV", - "NY", - "OH", - "OK", - "OR", - "PA", - "PR", - "PW", - "RI", - "SC", - "SD", - "TN", - "TX", - "UT", - "VA", - "VI", - "VT", - "WA", - "WI", - "WV", - "WY" - ], - "in": "query", - "name": "candidate_state", - "type": "string", - "x-example": "TX" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "House district filter (House only).", - "in": "query", - "name": "district", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get a whole DramaBox curated shelf", + "tags": [ + "DramaBox" + ] + } + }, + "/dramabox/performer": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one DramaBox performer from the Android app API: name, gender, avatar, video count, follow flag, and one page of the titles they appear in (each with id, title, description, cover, website link, episode count, tags with their tag ids, protagonist, library flag and listing times). Get performer ids from dramabox-search or dramabox-suggest's people results. Only public catalog metadata is read; no playable video is returned.", + "operationId": "dramabox-performer", + "parameters": [ { - "description": "Filer-type filter, meaning differs by chamber. House: member (default) or candidate. Senate: comma-separated senator, candidate, former_senator, or the standalone all value. Defaults to senator when omitted.", - "enum": [ - "member", - "candidate", - "all", - "senator", - "former_senator" - ], + "description": "Performer id from dramabox-search or dramabox-suggest's people results", "in": "query", - "name": "filer_type", - "type": "string", - "x-example": "candidate" + "name": "performer_id", + "required": true, + "type": "integer", + "x-example": 29450 }, { - "description": "House candidate-search election year filter (requires filer_type=candidate).", + "description": "Page number, 1 to 1000; defaults to 1", "in": "query", - "name": "election_year", - "type": "string", - "x-example": "2024" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Comma-separated Senate report-type filter (Senate only). Allowed values: annual, periodic_transaction, due_date_extension, blind_trust, other. Defaults to all types when omitted.", - "enum": [ - "annual", - "periodic_transaction", - "due_date_extension", - "blind_trust", - "other" - ], + "description": "Page size, 1 to 20; defaults to 10", "in": "query", - "name": "report_type", - "type": "string", - "x-example": "annual,periodic_transaction" + "name": "limit", + "type": "integer", + "x-example": 10 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dramabox.performerResponseDoc" + } }, - { - "description": "Minimum filing date. House accepts YYYY. Senate accepts YYYY or MM/DD/YYYY and defaults to 2012 when omitted.", - "in": "query", - "name": "from", - "type": "string", - "x-example": "01/01/2024" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Maximum filing date. House accepts YYYY. Senate accepts YYYY or MM/DD/YYYY.", - "in": "query", - "name": "to", - "type": "string", - "x-example": "12/31/2024" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Sort key. Allowed values: name_asc, name_desc, office_asc, office_desc, filing_year_asc, filing_year_desc.", + "ApiKeyAuth": [] + } + ], + "summary": "Get a DramaBox performer and their titles", + "tags": [ + "DramaBox" + ] + } + }, + "/dramabox/rank": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one DramaBox ranking list from the DramaBox Android app API: the available tabs (Most Trending, Top Searched, New Releases) and 20 ranked titles, each with its id, title, description, cover, website link, episode count, tags, protagonist, rank position, hot metric, library flag and listing times. Pass a tab's type as rank_type to read that tab. Only public catalog metadata is read; no playable video is returned.", + "operationId": "dramabox-rank", + "parameters": [ + { + "description": "Ranking tab: 1 (Most Trending), 2 (Top Searched), 3 (New Releases); omit for the default tab", "enum": [ - "name_asc", - "name_desc", - "office_asc", - "office_desc", - "filing_year_asc", - "filing_year_desc" + 1, + 2, + 3 ], "in": "query", - "name": "sort", - "type": "string", - "x-example": "filing_year_desc" - }, - { - "default": 1, - "description": "1-based result page (1-1000).", - "in": "query", - "maximum": 1000, - "minimum": 1, - "name": "page", - "type": "integer" - }, - { - "description": "Max results (1-500).", - "in": "query", - "name": "limit", + "name": "rank_type", "type": "integer", - "x-example": 50 + "x-example": 2 } ], "produces": [ @@ -314872,7 +391331,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/congress.stockDisclosuresResponseDoc" + "$ref": "#/definitions/dramabox.rankResponseDoc" } }, "400": { @@ -314881,8 +391340,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -314899,28 +391358,26 @@ "ApiKeyAuth": [] } ], - "summary": "Search congressional stock-disclosure filings", + "summary": "Get a DramaBox ranking list", "tags": [ - "Congress" + "DramaBox" ] } }, - "/contact": { - "post": { + "/dramabox/recommend": { + "get": { "consumes": [ "application/json" ], - "description": "Crawls a public website URL (homepage plus contact/about/team/imprint pages) and returns its public business contact details: emails — each tagged with a verification `status` (`verified`, `risky`, `unverified`, `invalid`) and a `type` (`generic`, `role`, `personal`) — plus social-media profiles and phone numbers. Intended for authorized public-business data only.", - "operationId": "contact", + "description": "Returns one page of DramaBox's own \"You Might Like\" recommendation feed from the Android app API: the feed title and its titles, each with id, title, description, cover, website link, episode count, tags with their tag ids, protagonist, library flag and listing times. The upstream page size is fixed, so page is the only paging control. Only public catalog metadata is read; no playable video is returned.", + "operationId": "dramabox-recommend", "parameters": [ { - "description": "Website URL payload", - "in": "body", - "name": "option", - "required": true, - "schema": { - "$ref": "#/definitions/contact.ContactRequest" - } + "description": "Page number, 1 to 1000; defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -314930,23 +391387,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/contact.contactResponseDoc" + "$ref": "#/definitions/dramabox.recommendResponseDoc" } }, "400": { - "description": "Invalid input or missing URL", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error during contact extraction", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -314957,26 +391414,57 @@ "ApiKeyAuth": [] } ], - "summary": "Contact API — emails, socials and phones for a website", + "summary": "Get a page of DramaBox's recommendation feed", "tags": [ - "Web" + "DramaBox" ] } }, - "/costco/categories": { + "/dramabox/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns Costco category slugs and product counts relevant to an optional search term, each slug usable directly with GET /costco/search's category filter. Public data sourced from Costco's own search backend.", - "operationId": "costco-categories", + "description": "Searches the DramaBox Android app API and returns one page of mixed results: book rows (id, title, description, cover, website link, tags, protagonist) and performer rows (id, name, avatar, series count), plus an is_more flag for the next page. The keyword is trimmed and truncated to 80 characters like the app; sort selects one of the app's result orderings. Performer ids can be passed to dramabox-performer. Only public catalog metadata is read; no playable video is returned.", + "operationId": "dramabox-search", "parameters": [ { - "description": "Search text to scope the returned categories to, e.g. \\", + "description": "Search text, trimmed and truncated to 80 characters", "in": "query", - "name": "query", + "name": "keyword", + "required": true, "type": "string", - "x-example": "refrigerator" + "x-example": "love" + }, + { + "default": 1, + "description": "One-based result page", + "in": "query", + "maximum": 1000, + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "default": 20, + "description": "Results per page", + "in": "query", + "maximum": 50, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "description": "Upstream result ordering mode; omit for the app default", + "enum": [ + 1, + 2, + 3 + ], + "in": "query", + "name": "sort", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -314986,11 +391474,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/costco.categoriesResponseDoc" + "$ref": "#/definitions/dramabox.searchResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -315007,27 +391501,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Costco category facets", + "summary": "Search DramaBox titles and performers", "tags": [ - "Costco" + "DramaBox" ] } }, - "/costco/product/{id}": { + "/dramabox/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Costco product's detail: title, description, manufacturer, image, price, stock status, and rating. Public data sourced from Costco's own product backend.", - "operationId": "costco-product", + "description": "Returns the DramaBox Android app API's autocomplete suggestions for a partial query: book rows (kind \"book\", cover_url) and performer rows (kind \"actor\", avatar, series count). The keyword is trimmed and truncated to 80 characters like the app; a query with no match returns an empty items list. Only public catalog metadata is read; no playable video is returned.", + "operationId": "dramabox-suggest", "parameters": [ { - "description": "Costco product id, e.g. from a search result's id field or a product page URL's \\", - "in": "path", - "name": "id", + "description": "Partial search text, trimmed and truncated to 80 characters", + "in": "query", + "name": "keyword", "required": true, "type": "string", - "x-example": "4000103922" + "x-example": "lov" } ], "produces": [ @@ -315037,7 +391531,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/costco.productResponseDoc" + "$ref": "#/definitions/dramabox.suggestResponseDoc" } }, "400": { @@ -315046,14 +391540,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -315070,43 +391558,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Costco product's detail", + "summary": "Get DramaBox search-box suggestions", "tags": [ - "Costco" + "DramaBox" ] } }, - "/costco/product/{id}/availability": { + "/dramabox/tag": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Costco product's stock and estimated-delivery status for a delivery destination. Public data sourced from Costco's own fulfillment backend.", - "operationId": "costco-product-availability", + "description": "Returns one page of DramaBox titles carrying a tag, as the Android app shows them: each title's id, title, description, cover, website link, episode count, tags with their tag ids, protagonist, library flag and listing times, plus the tag's own name. Get tag ids from any title result's tag_refs (dramabox-rank, dramabox-search, dramabox-category-books and the other list endpoints all expose them). An unknown tag id returns an empty list rather than an error. Only public catalog metadata is read; no playable video is returned.", + "operationId": "dramabox-tag", "parameters": [ { - "description": "Costco product id", - "in": "path", - "name": "id", + "description": "Tag id from any title result's tag_refs", + "in": "query", + "name": "tag_id", "required": true, - "type": "string", - "x-example": "1942114" + "type": "integer", + "x-example": 1379 }, { - "description": "US destination ZIP code", + "description": "Page number, 1 to 1000; defaults to 1", "in": "query", - "name": "postal_code", - "required": true, - "type": "string", - "x-example": "98101" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "US destination two-letter state code", + "description": "Page size, 1 to 50; defaults to 20", "in": "query", - "name": "state", - "required": true, - "type": "string", - "x-example": "WA" + "name": "limit", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -315116,7 +391602,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/costco.productAvailabilityResponseDoc" + "$ref": "#/definitions/dramabox.tagResponseDoc" } }, "400": { @@ -315125,8 +391611,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -315143,27 +391629,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Costco product's delivery estimate", + "summary": "List the DramaBox titles carrying a tag", "tags": [ - "Costco" + "DramaBox" ] } }, - "/costco/product/{id}/reviews": { + "/dramabox/theater": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of a Costco product's reviews: title, text, rating, author, and recommendation for each. Public data sourced from Costco's own review platform.", - "operationId": "costco-product-reviews", + "description": "Returns one page of a DramaBox app theater channel: the channel, its titled shelves (each with styles and 10 to 20 titles), poster banners and search hot words. Each title carries its id, title, description, cover, website link, episode count, tags with tag ids, protagonist, play count, library flag and listing times. Channel values are the lowercase names from dramabox-channels. An empty feed is a valid answer. Only public catalog metadata and poster images are read; no playable video is returned.", + "operationId": "dramabox-theater", "parameters": [ { - "description": "Costco product id, e.g. from a search result's id field", - "in": "path", - "name": "id", + "description": "Theater channel: popular, new, rankings, categories, anime, live-action, vip or original", + "enum": [ + "popular", + "new", + "rankings", + "categories", + "anime", + "live-action", + "vip", + "original" + ], + "in": "query", + "name": "channel", "required": true, "type": "string", - "x-example": "4000354684" + "x-example": "popular" + }, + { + "description": "Page number, 1 to 1000; defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Titles per paged block, 1 to 20; defaults to 10", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -315173,7 +391683,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/costco.productReviewsResponseDoc" + "$ref": "#/definitions/dramabox.theaterResponseDoc" } }, "400": { @@ -315182,8 +391692,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -315200,35 +391710,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Costco product's reviews", + "summary": "Get a DramaBox theater channel feed", "tags": [ - "Costco" + "DramaBox" ] } }, - "/costco/search": { + "/dramabox/trending": { "get": { "consumes": [ "application/json" ], - "description": "Returns public Costco products matching a text query and/or a category slug: title, brand, model, image, and rating for each result. GDX is primary; if GDX is blocked, query-only searches may return explicitly partial product-sitemap results.", - "operationId": "costco-search", - "parameters": [ - { - "description": "Search text", - "in": "query", - "name": "query", - "type": "string", - "x-example": "refrigerator" - }, - { - "description": "Costco category slug, e.g. the last path segment of a category page URL", - "in": "query", - "name": "category", - "type": "string", - "x-example": "refrigerators" - } - ], + "description": "Returns the DramaBox Android app API's search landing page: the hot, trending and new-release title lists, the ranking tabs (pass a tab's type to dramabox-rank as rank_type) and the app's preset search keyword. Takes no parameters. Only public catalog metadata is read; no playable video is returned.", + "operationId": "dramabox-trending", "produces": [ "application/json" ], @@ -315236,7 +391730,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/costco.searchResponseDoc" + "$ref": "#/definitions/dramabox.trendingResponseDoc" } }, "400": { @@ -315245,8 +391739,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -315263,35 +391757,41 @@ "ApiKeyAuth": [] } ], - "summary": "Search Costco products", + "summary": "Get DramaBox's search landing feeds", "tags": [ - "Costco" + "DramaBox" ] } }, - "/costco/warehouses": { + "/duckduckgo/image": { "get": { "consumes": [ "application/json" ], - "description": "Returns Costco warehouses near a latitude/longitude, sorted by distance: name, address, and distance for each. Public data sourced from Costco's own warehouse locator backend.", - "operationId": "costco-warehouses", + "description": "Returns DuckDuckGo image results for a query string: title, source page URL, image URL, thumbnail, dimensions, and hostname, plus page-based pagination.", + "operationId": "duckduckgo-image", "parameters": [ { - "description": "Latitude", + "description": "Search query", "in": "query", - "name": "latitude", + "name": "q", "required": true, - "type": "number", - "x-example": 47.565 + "type": "string", + "x-example": "openai" }, { - "description": "Longitude", + "description": "1-based page number, defaults to 1", "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -122.329 + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "DuckDuckGo region/locale code, e.g. us-en, uk-en, wt-wt (worldwide, the default)", + "in": "query", + "name": "region", + "type": "string", + "x-example": "us-en" } ], "produces": [ @@ -315301,7 +391801,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/costco.warehousesResponseDoc" + "$ref": "#/definitions/duckduckgo.imageResponseDoc" } }, "400": { @@ -315310,6 +391810,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -315328,35 +391840,41 @@ "ApiKeyAuth": [] } ], - "summary": "Find nearby Costco warehouses", + "summary": "Search DuckDuckGo image results", "tags": [ - "Costco" + "DuckDuckGo Search" ] } }, - "/courtlistener/courts": { + "/duckduckgo/news": { "get": { "consumes": [ "application/json" ], - "description": "Lists CourtListener's anonymous public court directory. Provide court_id to retrieve one court. page is used only for directory browsing and is 1-indexed. The endpoint does not retrieve dockets, opinions, judges, or account data.", - "operationId": "courtlistener-courts", + "description": "Returns DuckDuckGo news results for a query string: title, destination URL, source, excerpt, thumbnail, and relative/published time, plus page-based pagination.", + "operationId": "duckduckgo-news", "parameters": [ { - "description": "CourtListener court identifier", + "description": "Search query", "in": "query", - "name": "court_id", + "name": "q", + "required": true, "type": "string", - "x-example": "scotus" + "x-example": "openai" }, { - "default": 1, - "description": "Directory page, 1-indexed", + "description": "1-based page number, defaults to 1", "in": "query", - "minimum": 1, "name": "page", "type": "integer", "x-example": 1 + }, + { + "description": "DuckDuckGo region/locale code, e.g. us-en, uk-en, wt-wt (worldwide, the default)", + "in": "query", + "name": "region", + "type": "string", + "x-example": "us-en" } ], "produces": [ @@ -315366,7 +391884,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/courtlistener.courtsResponseDoc" + "$ref": "#/definitions/duckduckgo.newsResponseDoc" } }, "400": { @@ -315375,6 +391893,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -315399,34 +391923,64 @@ "ApiKeyAuth": [] } ], - "summary": "Browse CourtListener courts", + "summary": "Search DuckDuckGo news results", "tags": [ - "CourtListener" + "DuckDuckGo Search" ] } }, - "/courtlistener/people": { + "/duckduckgo/search": { "get": { "consumes": [ "application/json" ], - "description": "Lists CourtListener's anonymous public judicial-person directory. Provide person_id to retrieve one public person record. The response contains only public directory and position-summary metadata; sensitive biographical fields are excluded.", - "operationId": "courtlistener-people", + "description": "Returns DuckDuckGo web search results for a query string: title, destination URL, description, and hostname, plus page-based pagination. DuckDuckGo wraps every result link in its own click-tracking redirect; this endpoint always returns the decoded destination URL, never the raw redirect link.", + "operationId": "duckduckgo-search", "parameters": [ { - "description": "CourtListener person identifier", + "description": "Search query", "in": "query", - "minimum": 1, - "name": "person_id", + "name": "q", + "required": true, + "type": "string", + "x-example": "openai" + }, + { + "description": "1-based page number, defaults to 1", + "in": "query", + "name": "page", "type": "integer", - "x-example": 123 + "x-example": 1 }, { - "description": "Cursor from a prior response's next_cursor field", + "description": "DuckDuckGo region/locale code, e.g. us-en, uk-en, wt-wt (worldwide, the default)", "in": "query", - "name": "cursor", + "name": "region", "type": "string", - "x-example": "cD0yMDI2LTA4LTI3KzAwJTNBMDAlM0EwMC4wMDAwMDAlMkIwMCUzQTAw" + "x-example": "us-en" + }, + { + "description": "Restrict results to a recency window", + "enum": [ + "d", + "w", + "m", + "y" + ], + "in": "query", + "name": "time_range", + "type": "string" + }, + { + "description": "Safe search level, defaults to DuckDuckGo's own moderate setting when omitted", + "enum": [ + "strict", + "moderate", + "off" + ], + "in": "query", + "name": "safe_search", + "type": "string" } ], "produces": [ @@ -315436,7 +391990,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/courtlistener.peopleResponseDoc" + "$ref": "#/definitions/duckduckgo.searchResponseDoc" } }, "400": { @@ -315475,34 +392029,34 @@ "ApiKeyAuth": [] } ], - "summary": "Browse CourtListener judicial people", + "summary": "Search DuckDuckGo web results", "tags": [ - "CourtListener" + "DuckDuckGo Search" ] } }, - "/courtlistener/search": { + "/duckduckgo/shopping": { "get": { "consumes": [ "application/json" ], - "description": "Searches CourtListener's opinion-search index by text and returns opinion-result metadata with a cursor for the next page. The endpoint does not return opinion detail, dockets, judges, alerts, or account data.", - "operationId": "courtlistener-search", + "description": "Returns DuckDuckGo shopping results for a query string: title, brand, merchant, description, price, rating, and review count, plus total page count. DuckDuckGo's shopping vertical is ad-funded, syndicated product listings, not organic content; every product link is wrapped in an ad-click-tracking redirect with no clean destination to unwrap, so no destination URL is returned. DuckDuckGo's own pagination token for this vertical is an opaque per-response blob rather than a plain page offset, so only the first page is supported.", + "operationId": "duckduckgo-shopping", "parameters": [ { - "description": "Opinion search text", + "description": "Search query", "in": "query", "name": "q", "required": true, "type": "string", - "x-example": "\"qualified immunity\"" + "x-example": "running shoes" }, { - "description": "Cursor from a prior response's next_cursor field", + "description": "DuckDuckGo market code, e.g. us-en, uk-en", "in": "query", - "name": "cursor", + "name": "region", "type": "string", - "x-example": "cD0yMDI2LTA4LTI3KzAwJTNBMDAlM0EwMC4wMDAwMDAlMkIwMCUzQTAw" + "x-example": "us-en" } ], "produces": [ @@ -315512,7 +392066,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/courtlistener.searchResponseDoc" + "$ref": "#/definitions/duckduckgo.shoppingResponseDoc" } }, "400": { @@ -315521,6 +392075,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -315545,16 +392105,45 @@ "ApiKeyAuth": [] } ], - "summary": "Search CourtListener opinions", + "summary": "Search DuckDuckGo shopping results", "tags": [ - "CourtListener" + "DuckDuckGo Search" ] } }, - "/cricinfo/calendar": { + "/duckduckgo/suggest": { "get": { - "description": "Returns the dated international cricket calendar that Cricinfo currently publishes, with no parameters. Each event has its ISO date, the match name such as a fixture and venue, and any series labels for that day. The response also gives the event count.", - "operationId": "cricinfo-calendar", + "consumes": [ + "application/json" + ], + "description": "Returns DuckDuckGo search-box autocomplete completions for a query prefix, in DuckDuckGo's own ranking order. DuckDuckGo never returns more than 8 suggestions per prefix.", + "operationId": "duckduckgo-suggest", + "parameters": [ + { + "description": "Search query prefix", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "openai" + }, + { + "description": "Suggestions to return; defaults to 8, clamped to 1..8", + "in": "query", + "maximum": 8, + "minimum": 1, + "name": "count", + "type": "integer", + "x-example": 8 + }, + { + "description": "DuckDuckGo region code such as us-en, uk-en, de-de, or wt-wt (worldwide, the default)", + "in": "query", + "name": "region", + "type": "string", + "x-example": "us-en" + } + ], "produces": [ "application/json" ], @@ -315562,7 +392151,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.calendarResponseDoc" + "$ref": "#/definitions/duckduckgo.suggestResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -315571,6 +392166,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -315583,31 +392184,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get the Cricinfo international calendar", + "summary": "Suggest DuckDuckGo search queries", "tags": [ - "Cricinfo" + "DuckDuckGo Search" ] } }, - "/cricinfo/commentary": { + "/duckduckgo/video": { "get": { - "description": "Returns the latest ball-by-ball and editorial commentary embedded in a public Cricinfo match page. `url` may be a canonical full-scorecard or live-score URL.", - "operationId": "cricinfo-commentary", + "consumes": [ + "application/json" + ], + "description": "Returns DuckDuckGo video results for a query string: title, destination URL, description, duration, thumbnail, publisher/uploader, published time, and view count, plus page-based pagination.", + "operationId": "duckduckgo-video", "parameters": [ { - "description": "Canonical Cricinfo full-scorecard or live-score URL", + "description": "Search query", "in": "query", - "name": "url", + "name": "q", "required": true, "type": "string", - "x-example": "https://www.cricinfo.com/series/ahmad-shah-abdali-4-day-tournament-2026-1551329/maiwand-champions-vs-mah-e-par-stars-1st-match-1551332/live-cricket-score" + "x-example": "openai" }, { - "description": "Maximum commentary entries returned, from 1 to 100", + "description": "1-based page number, defaults to 1", "in": "query", - "name": "limit", + "name": "page", "type": "integer", - "x-example": 50 + "x-example": 1 + }, + { + "description": "DuckDuckGo region/locale code, e.g. us-en, uk-en, wt-wt (worldwide, the default)", + "in": "query", + "name": "region", + "type": "string", + "x-example": "us-en" } ], "produces": [ @@ -315617,7 +392228,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.commentaryResponseDoc" + "$ref": "#/definitions/duckduckgo.videoResponseDoc" } }, "400": { @@ -315638,6 +392249,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -315650,23 +392267,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get Cricinfo match commentary", + "summary": "Search DuckDuckGo video results", "tags": [ - "Cricinfo" + "DuckDuckGo Search" ] } }, - "/cricinfo/grounds": { + "/dunkin/directory": { "get": { - "description": "Returns the featured public ground directory snapshot and the country index used to discover Cricinfo venue pages. Use the existing venue endpoint for detailed ground profiles.", - "operationId": "cricinfo-grounds", + "consumes": [ + "application/json" + ], + "description": "Returns one level of Dunkin's store directory tree. Omit path for the root, which lists every US state Dunkin operates in; pass a state's path (e.g. \"ny\") to list its cities, or a state/city path (e.g. \"ny/new-york\") to list its stores. Each child carries its name, path, URL and how many stores sit under that branch. A child with is_store true is a store rather than another directory level -- pass its path (a store id) to GET /dunkin/store. This is a directory browse, not a proximity search: use GET /dunkin/nearby for a radius lookup.", + "operationId": "dunkin-directory", "parameters": [ { - "description": "Maximum featured grounds returned, from 1 to 100", + "description": "Directory path from a previous response's children[].path: a state code (e.g. \\", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "name": "path", + "type": "string", + "x-example": "ny" } ], "produces": [ @@ -315676,7 +392296,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.groundsResponseDoc" + "$ref": "#/definitions/dunkin.directoryResponseDoc" } }, "400": { @@ -315685,6 +392305,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -315703,16 +392329,19 @@ "ApiKeyAuth": [] } ], - "summary": "List Cricinfo grounds", + "summary": "Browse the Dunkin store directory", "tags": [ - "Cricinfo" + "Dunkin" ] } }, - "/cricinfo/live": { + "/dunkin/menu": { "get": { - "description": "Returns Cricinfo's current live-score list with no parameters, covering live, upcoming and recently completed matches. Each match has its title, format, state, status text, start date, series, both teams with scores, and a scorecard `url` you can pass to the match endpoint.", - "operationId": "cricinfo-live-matches", + "consumes": [ + "application/json" + ], + "description": "Returns Dunkin's national menu: item names, descriptions and photos grouped into categories (Iced Drinks, Hot Drinks, Frozen Drinks, Sandwiches & Wraps, Savory Bites, Donuts & Bakery, Snacks and Sides). Dunkin publishes one shared menu across every US store, so this takes no store parameter. Does not carry prices or nutrition -- pricing varies by market/franchisee and isn't part of this content.", + "operationId": "dunkin-menu", "produces": [ "application/json" ], @@ -315720,7 +392349,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.liveMatchesResponseDoc" + "$ref": "#/definitions/dunkin.menuResponseDoc" } }, "429": { @@ -315741,24 +392370,56 @@ "ApiKeyAuth": [] } ], - "summary": "Get Cricinfo live matches", + "summary": "Get Dunkin's national menu", "tags": [ - "Cricinfo" + "Dunkin" ] } }, - "/cricinfo/match": { + "/dunkin/nearby": { "get": { - "description": "Returns a public Cricinfo match scorecard with match state, team scores, and available innings totals and batter/bowler lines. Upcoming matches return an empty innings list. `url` must be a canonical `https://www.cricinfo.com/series/.../(full-scorecard|live-cricket-score)` URL; live-score URLs are normalized to the paired scorecard.", - "operationId": "cricinfo-match", + "consumes": [ + "application/json" + ], + "description": "Returns Dunkin restaurants within a radius of a latitude/longitude, ordered nearest first, each with its distance in miles and kilometres, full address, phone, coordinates, the published week of hours, whether it's permanently closed, amenities, payment methods, pickup/delivery service types, which third-party delivery platforms are active, its Google Place id, timezone, and website/menu/order URLs. This is the proximity search the directory browse cannot do -- GET /dunkin/directory walks a state to city to store tree, which requires knowing the administrative path in advance. Each result carries the store id as `path`, which GET /dunkin/store also takes, so the two chain directly. `total_in_radius` reports how many stores fall inside the radius overall, which is usually far more than one page; use `offset` to walk it. A coordinate with no Dunkin nearby returns an empty list rather than an error.", + "operationId": "dunkin-nearby", "parameters": [ { - "description": "Canonical Cricinfo full-scorecard or live-cricket-score URL", + "description": "Search center latitude", "in": "query", - "name": "url", + "name": "latitude", "required": true, - "type": "string", - "x-example": "https://www.cricinfo.com/series/caribbean-premier-league-2026-1534175/trinbago-knight-riders-vs-barbados-tridents-19th-match-1534197/full-scorecard" + "type": "number", + "x-example": 40.7128 + }, + { + "description": "Search center longitude", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -74.006 + }, + { + "description": "Search radius in miles, 1-100 (default 25)", + "in": "query", + "name": "radius", + "type": "integer", + "x-example": 25 + }, + { + "description": "Maximum stores to return, 1-50 (default 10)", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + }, + { + "description": "Result offset for paging through total_in_radius (default 0)", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -315768,7 +392429,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.matchResponseDoc" + "$ref": "#/definitions/dunkin.nearbyResponseDoc" } }, "400": { @@ -315801,23 +392462,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Cricinfo match scorecard", + "summary": "Find Dunkin stores near a coordinate, nearest first", "tags": [ - "Cricinfo" + "Dunkin" ] } }, - "/cricinfo/news": { + "/dunkin/store": { "get": { - "description": "Returns a bounded snapshot of Cricinfo's latest public stories, including titles, summaries, authors, genres, publication times, images, and associated match or series identifiers.", - "operationId": "cricinfo-news", + "consumes": [ + "application/json" + ], + "description": "Returns one Dunkin store: name, full postal address, phone, coordinates, opening hours for every day of the week, whether it's permanently closed, amenities (curbside pickup, drive-thru, wifi, kosher, turbo oven, K-Cup pods), Dunkin's own free-text feature labels, accepted payment methods, pickup/delivery service types, which third-party delivery platforms are active, the Google Place id, and the store's website/menu/order URLs. path is a store id -- from a /dunkin/directory child with is_store true, a /dunkin/nearby result's path, or the trailing digits of a dunkindonuts.com store URL. An unknown id returns a 404.", + "operationId": "dunkin-store", "parameters": [ { - "description": "Maximum stories returned, from 1 to 100", + "description": "A Dunkin store id, from a /dunkin/directory child with is_store true, a /dunkin/nearby result's path, or the trailing digits of a dunkindonuts.com store URL", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "name": "path", + "required": true, + "type": "string", + "x-example": "307107" } ], "produces": [ @@ -315827,7 +392492,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.newsResponseDoc" + "$ref": "#/definitions/dunkin.storeResponseDoc" } }, "400": { @@ -315836,6 +392501,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -315854,23 +392525,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get latest Cricinfo news", + "summary": "Get one Dunkin store's detail", "tags": [ - "Cricinfo" + "Dunkin" ] } }, - "/cricinfo/photos": { + "/dw/article": { "get": { - "description": "Returns bounded metadata for the latest public Cricinfo photos, including captions, credits, dimensions, dates, and image variants. Media files are not downloaded by the endpoint.", - "operationId": "cricinfo-photos", + "description": "Returns one Deutsche Welle article by its canonical `url`, either a standard `/en//a-` article or a `/en//live-` live-blog page. The response has the title, description, publish time, section, authors, lead image and body `paragraphs`. Blocked or malformed pages return an upstream error.", + "operationId": "dw-article", "parameters": [ { - "description": "Maximum photos returned, from 1 to 100", + "description": "Canonical DW article URL", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.dw.com/en/south-africa-11-killed-in-attack-on-house-party/a-79382743" } ], "produces": [ @@ -315880,7 +392552,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.photosResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -315889,8 +392561,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -315907,24 +392579,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get latest Cricinfo photos", + "summary": "Get DW article content", "tags": [ - "Cricinfo" + "DW" ] } }, - "/cricinfo/rankings": { + "/dw/author": { "get": { - "description": "Returns ICC rankings (team or player) from a Cricinfo rankings page, given as the required `url`, which must be a canonical `https://www.cricinfo.com/rankings/...` address. Each entry has its rank, name, country, rating, points, matches and format, plus a team or player id.", - "operationId": "cricinfo-rankings", + "description": "Returns one Deutsche Welle correspondent's public profile (name, expertise, biography) and their recent articles from a canonical person-profile URL. Many DW breaking-news items are bylined to the \"Deutsche Welle\" editorial organization rather than a named person; those articles have no person-profile URL to look up.", + "operationId": "dw-author", "parameters": [ { - "description": "Canonical Cricinfo rankings URL", + "description": "Canonical www.dw.com/en//person- URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.cricinfo.com/rankings/content/page/211271.html" + "x-example": "https://www.dw.com/en/cathrin-schaer/person-55594156" } ], "produces": [ @@ -315934,7 +392606,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.rankingsResponseDoc" + "$ref": "#/definitions/publicnews.dwAuthorResponseDoc" } }, "400": { @@ -315949,12 +392621,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -315967,70 +392633,44 @@ "ApiKeyAuth": [] } ], - "summary": "Get ICC rankings from Cricinfo", + "summary": "Get a DW author profile", "tags": [ - "Cricinfo" + "DW" ] } }, - "/cricinfo/records": { + "/dw/headlines": { "get": { - "description": "Returns a bounded table from a Cricinfo records page. `record` is a relative Statsguru record path such as `batting/most_runs_career.html`. `class` must be one of `1`, `2`, `3`, `4`, `5`, `6`, `8`, `9`, `10`, `11`, `12`, `20`, `21`, `22`, or `23`.", - "operationId": "cricinfo-records", + "description": "Returns the latest Deutsche Welle headlines for one section. `section` is required and takes one of 18 slugs, such as `africa`, `middle-east`, `germany`, `climate`, `migration`, `human-rights`, `business` or `sports`. Each item has its title and URL, plus an image when the card shows one.", + "operationId": "dw-headlines", "parameters": [ { - "description": "Relative Statsguru record path", - "in": "query", - "name": "record", - "required": true, - "type": "string", - "x-example": "batting/most_runs_career.html" - }, - { - "description": "Record match-class. Allowed values: 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 20, 21, 22, 23", + "description": "DW section slug", "enum": [ - 1, - 2, - 3, - 4, - 5, - 6, - 8, - 9, - 10, - 11, - 12, - 20, - 21, - 22, - 23 + "africa", + "asia", + "europe", + "latin-america", + "middle-east", + "north-america", + "germany", + "climate", + "equality", + "health", + "human-rights", + "migration", + "technology", + "business", + "science", + "environment", + "culture", + "sports" ], "in": "query", - "name": "class", + "name": "section", "required": true, - "type": "integer", - "x-example": 1 - }, - { - "description": "Numeric record subject identifier", - "in": "query", - "name": "id", - "type": "string", - "x-example": "6" - }, - { - "description": "Record subject type", - "in": "query", - "name": "type", - "type": "string", - "x-example": "team" - }, - { - "description": "Record currentness selector", - "in": "query", - "name": "current", "type": "string", - "x-example": "2" + "x-example": "africa" } ], "produces": [ @@ -316040,7 +392680,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.recordsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -316049,18 +392689,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -316073,16 +392701,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Cricinfo record table", + "summary": "Get DW section headlines", "tags": [ - "Cricinfo" + "DW" ] } }, - "/cricinfo/records/index": { + "/dw/news": { "get": { - "description": "Returns the public Cricinfo records catalog, including match classes, record categories, selectable teams or entities, and example suggestions. Use the existing records endpoint to retrieve a specific table.", - "operationId": "cricinfo-records-index", + "description": "Returns the current Deutsche Welle top stories. Each item has its title, URL, summary and publication time. Takes no parameters; use `dw-headlines` for a single region, topic or category.", + "operationId": "dw-news", "produces": [ "application/json" ], @@ -316090,13 +392718,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.recordsIndexResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -316111,26 +392733,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Cricinfo records catalog", + "summary": "Get DW top stories", "tags": [ - "Cricinfo" + "DW" ] } }, - "/cricinfo/rss": { + "/dw/sections": { "get": { - "description": "Returns a Cricinfo RSS feed. `url` must be one of Cricinfo's official news, live-score, country-story, or player-story RSS URLs.", - "operationId": "cricinfo-rss", - "parameters": [ - { - "description": "Official Cricinfo RSS feed URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.cricinfo.com/rss/content/feeds/news/0.xml" - } - ], + "description": "Lists the DW English-edition sections accepted by `dw-headlines`, grouped under the site's three navigation groups: regions, topics and categories. Each entry has a stable `slug`, display `name` and the section `url`. Takes no parameters.", + "operationId": "dw-sections", "produces": [ "application/json" ], @@ -316138,25 +392750,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.rssResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -316165,62 +392759,27 @@ "ApiKeyAuth": [] } ], - "summary": "Read a Cricinfo RSS feed", + "summary": "Get DW sections", "tags": [ - "Cricinfo" + "DW" ] } }, - "/cricinfo/scores": { + "/ebay/item/{item_id}": { "get": { - "description": "Returns the current match cards in Cricinfo's public homepage snapshot, including match state, scores, and canonical scorecard URLs. This is a point-in-time feed, not a fixture archive or streaming subscription.", - "operationId": "cricinfo-scores", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/cricinfo.scoresResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get current Cricinfo match scores", - "tags": [ - "Cricinfo" - ] - } - }, - "/cricinfo/series": { - "get": { - "description": "Returns a series's match schedule and standings from its dedicated page. `series_id` must be the slug-and-ID portion of a canonical Cricinfo series URL, such as `indian-premier-league-2024-1410320`.", - "operationId": "cricinfo-series", + "description": "Returns the details of one eBay listing by `item_id`: title, link, images, price and price text, condition, availability, item specifics, description, location and shipping. It also carries the seller's name, store, feedback score, followers and items sold, along with the listing's rating and rating count.", + "operationId": "ebay-item", "parameters": [ { - "description": "Slug-and-ID portion of a canonical series URL", - "in": "query", - "name": "series_id", + "description": "eBay item ID", + "in": "path", + "name": "item_id", "required": true, "type": "string", - "x-example": "indian-premier-league-2024-1410320" + "x-example": "196435705622" } ], "produces": [ @@ -316230,7 +392789,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.seriesResponseDoc" + "$ref": "#/definitions/ebay.itemResponseDoc" } }, "400": { @@ -316251,6 +392810,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -316263,24 +392828,56 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Cricinfo series schedule and standings", + "summary": "Get eBay item details", "tags": [ - "Cricinfo" + "eBay" ] } }, - "/cricinfo/squads": { + "/ebay/live/streams": { "get": { - "description": "Returns recent public squad announcements and player rosters from a Cricinfo team profile, including player roles and withdrawal or overseas markers when published.", - "operationId": "cricinfo-squads", + "consumes": [ + "application/json" + ], + "description": "Lists live and upcoming eBay Live streams for one category channel, set with `category` (default `explore`; other values are channel ids such as `IPqZx79LNuwFcSVt` for Sports Singles). Each stream has its title, state, start time, watch count, hosts, tags and preview media. Host feedback is not included. Page on with `next_request_number` and `session_id`, passed back as `request_number` and `session_id`.", + "operationId": "ebay-live-streams", "parameters": [ { - "description": "Canonical Cricinfo team profile URL", + "description": "eBay Live category channel, defaults to explore", + "enum": [ + "explore", + "IPqZx79LNuwFcSVt", + "oHjQFTlZ5cYgWkjB", + "l68DJtBAVZge4x4n", + "2Nk3OYiOJHfXqpWG", + "5quuEnjO3axyz46U", + "nGpMTpm13Q86Eaoo", + "sYRxeaskGmNC6xaB", + "iYaYo88zN2vtQorh", + "GYAbsFw6onSNloAb", + "WJ9zLwYjK8njaBtN", + "rALkRyk8gXHzIBR6", + "DNta0sJ8Y6NXZsC9", + "GU4UfBzZSF4jiteS", + "IO7Oih07PtNJSWhU", + "cF4xtF8z9riubmLh", + "bywKDIdtxhi4hUSO" + ], "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.cricinfo.com/team/india-6" + "name": "category", + "type": "string" + }, + { + "description": "Pagination cursor from a previous response's next_request_number, defaults to 0", + "in": "query", + "name": "request_number", + "type": "integer" + }, + { + "description": "Pagination session id from a previous response's session_id", + "in": "query", + "name": "session_id", + "type": "string" } ], "produces": [ @@ -316290,7 +392887,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.squadsResponseDoc" + "$ref": "#/definitions/ebay.liveStreamsResponseDoc" } }, "400": { @@ -316299,14 +392896,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -316323,153 +392920,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Cricinfo team squad", + "summary": "List eBay Live streams", "tags": [ - "Cricinfo" + "eBay" ] } }, - "/cricinfo/stats": { + "/ebay/live/streams/batch": { "get": { - "description": "Returns a bounded Statsguru table. `class` must be one of `1`, `2`, `3`, `4`, `5`, `6`, `8`, `9`, `10`, `11`, `12`, `20`, `21`, `22`, or `23`; `type` must be one of `batting`, `bowling`, `fielding`, `allround`, `fow`, `team`, `official`, or `aggregate`; `view` may be `innings`, `match`, `series`, `ground`, `host`, `opposition`, `year`, or `season`.", - "operationId": "cricinfo-stats", + "consumes": [ + "application/json" + ], + "description": "Returns summaries for several eBay Live streams in one call. `ids` is required and takes up to 9 stream ids, comma-separated or repeated. Each stream has its title, state, watch count, hosts, tags and preview media, without the per-host feedback summary. Ids that do not resolve are silently omitted, and the order may differ from the request.", + "operationId": "ebay-live-streams-batch", "parameters": [ { - "description": "Statsguru match-class. Allowed values: 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 20, 21, 22, 23", - "enum": [ - 1, - 2, - 3, - 4, - 5, - 6, - 8, - 9, - 10, - 11, - 12, - 20, - 21, - 22, - 23 - ], - "in": "query", - "name": "class", - "required": true, - "type": "integer", - "x-example": 1 - }, - { - "description": "Statsguru statistic family", - "enum": [ - "batting", - "bowling", - "fielding", - "allround", - "fow", - "team", - "official", - "aggregate" - ], + "description": "One or more eBay Live stream/event ids, up to 9. Comma-separated or repeated query values are both accepted.", "in": "query", - "name": "type", + "name": "ids", "required": true, "type": "string", - "x-example": "batting" - }, - { - "description": "Numeric Cricinfo player identifier", - "in": "query", - "name": "player", - "type": "string", - "x-example": "45789" - }, - { - "description": "Numeric Cricinfo team identifier", - "in": "query", - "name": "team", - "type": "string", - "x-example": "6" - }, - { - "description": "Numeric opposition team identifier", - "in": "query", - "name": "opposition", - "type": "string", - "x-example": "2" - }, - { - "description": "Numeric host-country identifier", - "in": "query", - "name": "host", - "type": "string", - "x-example": "6" - }, - { - "description": "Numeric ground identifier", - "in": "query", - "name": "ground", - "type": "string", - "x-example": "713" - }, - { - "description": "Season formatted as YYYY or YYYY/YY", - "in": "query", - "name": "season", - "type": "string", - "x-example": "2025" - }, - { - "description": "Statsguru starting date", - "in": "query", - "name": "span_min", - "type": "string", - "x-example": "01 Jan 2020" - }, - { - "description": "Statsguru ending date", - "in": "query", - "name": "span_max", - "type": "string", - "x-example": "31 Dec 2025" - }, - { - "description": "Statsguru table view", - "enum": [ - "innings", - "match", - "series", - "ground", - "host", - "opposition", - "year", - "season" - ], - "in": "query", - "name": "view", - "type": "string", - "x-example": "innings" - }, - { - "description": "Statsguru sort column", - "in": "query", - "name": "orderby", - "type": "string", - "x-example": "runs" - }, - { - "description": "Sort descending when true", - "in": "query", - "name": "orderby_desc", - "type": "boolean", - "x-example": true - }, - { - "description": "Maximum rows returned, from 1 to 100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "x-example": "FncRQ8VJGxKzLase" } ], "produces": [ @@ -316479,7 +392950,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.statsResponseDoc" + "$ref": "#/definitions/ebay.liveStreamsBatchResponseDoc" } }, "400": { @@ -316494,6 +392965,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -316506,24 +392983,27 @@ "ApiKeyAuth": [] } ], - "summary": "Query Cricinfo Statsguru", + "summary": "Get multiple eBay Live streams", "tags": [ - "Cricinfo" + "eBay" ] } }, - "/cricinfo/story": { + "/ebay/live/streams/{id}": { "get": { - "description": "Returns a public Cricinfo news article, match report, preview, or live blog. The response includes stable story metadata, typed content blocks, live-blog entries when present, and related links.", - "operationId": "cricinfo-story", + "consumes": [ + "application/json" + ], + "description": "Returns one eBay Live stream or event by `id`, taken from the `streams[].id` of the stream list. The response has title, description, state, start and end times, viewer, watch and like counts, tags, channels and the live, preview and replay URLs. Each host carries a 365-day feedback summary and four average ratings. An unknown id returns `404`.", + "operationId": "ebay-live-stream", "parameters": [ { - "description": "Canonical Cricinfo story, report, preview, or live-blog URL", - "in": "query", - "name": "url", + "description": "eBay Live stream/event id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.cricinfo.com/story/lutho-sipamla-ruled-out-of-namibia-tri-series-with-hamstring-injury-1552225" + "x-example": "qrJnMkM8X2hJuIf3" } ], "produces": [ @@ -316533,7 +393013,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.storyResponseDoc" + "$ref": "#/definitions/ebay.liveStreamResponseDoc" } }, "400": { @@ -316554,6 +393034,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -316566,24 +393052,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Cricinfo story", + "summary": "Get an eBay Live stream", "tags": [ - "Cricinfo" + "eBay" ] } }, - "/cricinfo/team": { + "/ebay/live/streams/{id}/items": { "get": { - "description": "Returns public team identity, profile text, recent fixtures and results, and the rolling batting and bowling leaders shown on a Cricinfo team page.", - "operationId": "cricinfo-team", + "consumes": [ + "application/json" + ], + "description": "Lists the items currently featured in an eBay Live stream, identified by the required event `id`. Each item has its listing id, title, price and currency, bid count, sale type, leader and winner usernames, and `auction_status` (`READY`, `LIVE` or `ENDED`). A stream with no featured items, or an unknown id, returns an empty `items` array.", + "operationId": "ebay-live-stream-items", "parameters": [ { - "description": "Canonical Cricinfo team profile URL", - "in": "query", - "name": "url", + "description": "eBay Live stream/event id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.cricinfo.com/team/india-6" + "x-example": "qrJnMkM8X2hJuIf3" } ], "produces": [ @@ -316593,7 +393082,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.teamProfileResponseDoc" + "$ref": "#/definitions/ebay.liveStreamItemsResponseDoc" } }, "400": { @@ -316602,14 +393091,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -316626,24 +393115,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Cricinfo team profile", + "summary": "List an eBay Live stream's featured items", "tags": [ - "Cricinfo" + "eBay" ] } }, - "/cricinfo/team/schedule": { - "get": { - "description": "Returns a cricket team's recent fixtures and results from its Cricinfo team page, given as the required `url`, which must be a canonical `https://www.cricinfo.com/team/...` address. The response has the team's id, name and slug, and matches with series, format, state, status text, team scores and scorecard URL.", - "operationId": "cricinfo-team-schedule", + "/ebay/search": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Searches eBay listings by keyword from a JSON body, with page, page size (60, 120 or 240) and a listing-status filter (`active`, `sold`, `completed` or `sold_completed`). Each result has the item id, title, link, image, price or price range, bid count, seller and rating, location, shipping information, and sold and watcher counts.", + "operationId": "ebay-search", "parameters": [ { - "description": "Canonical Cricinfo team URL", - "in": "query", - "name": "url", + "description": "eBay search payload", + "in": "body", + "name": "option", "required": true, - "type": "string", - "x-example": "https://www.cricinfo.com/team/india-6" + "schema": { + "$ref": "#/definitions/ebay.SearchOption" + } } ], "produces": [ @@ -316653,7 +393146,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.teamScheduleResponseDoc" + "$ref": "#/definitions/ebay.searchResponseDoc" } }, "400": { @@ -316662,14 +393155,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -316686,16 +393179,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Cricinfo team match schedule", + "summary": "Search eBay listings", "tags": [ - "Cricinfo" + "eBay" ] } }, - "/cricinfo/teams": { + "/ebay/seller/{seller}": { "get": { - "description": "Returns Cricinfo's team directory with no parameters, organised into titled groups such as popular international teams. Each team has its id, name, slug, abbreviation, country, logo URL and primary colour where Cricinfo gives them, and whether it is a national side.", - "operationId": "cricinfo-teams", + "consumes": [ + "application/json" + ], + "description": "Returns the public profile of an eBay seller by the required `seller` username: display name, store name and URL, profile URL, description, location, member-since date, positive feedback percentage, feedback count, items sold, followers, and detailed seller ratings. Feedback details are included when eBay provides them.", + "operationId": "ebay-seller", + "parameters": [ + { + "description": "eBay seller username", + "in": "path", + "name": "seller", + "required": true, + "type": "string", + "x-example": "poloblade" + } + ], "produces": [ "application/json" ], @@ -316703,7 +393209,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.teamsResponseDoc" + "$ref": "#/definitions/ebay.sellerResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -316712,6 +393230,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -316724,24 +393248,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Cricinfo teams", + "summary": "Get eBay seller profile", "tags": [ - "Cricinfo" + "eBay" ] } }, - "/cricinfo/venue": { + "/ebay/seller/{seller}/about": { "get": { - "description": "Returns structured metadata, associated home teams, and the editorial profile for a public Cricinfo cricket-ground page. `url` must be a canonical `https://www.cricinfo.com/cricket-grounds/...` or legacy `/ci/content/ground/...html` URL.", - "operationId": "cricinfo-venue", + "consumes": [ + "application/json" + ], + "description": "Returns seller about information from the eBay store about tab, including seller stats, top-rated status, optional location/member-since fields, and cleaned store categories.", + "operationId": "ebay-seller-about", "parameters": [ { - "description": "Canonical Cricinfo cricket-ground URL", - "in": "query", - "name": "url", + "description": "eBay seller username", + "in": "path", + "name": "seller", "required": true, "type": "string", - "x-example": "https://www.cricinfo.com/cricket-grounds/wankhede-stadium-mumbai-58324" + "x-example": "poloblade" } ], "produces": [ @@ -316751,7 +393278,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.venueResponseDoc" + "$ref": "#/definitions/ebay.sellerAboutResponseDoc" } }, "400": { @@ -316772,6 +393299,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -316784,24 +393317,46 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Cricinfo cricket-ground profile", + "summary": "Get eBay seller about details", "tags": [ - "Cricinfo" + "eBay" ] } }, - "/cricinfo/venue/matches": { + "/ebay/seller/{seller}/feedback": { "get": { - "description": "Returns upcoming fixtures and recent results listed on a public Cricinfo ground page. `url` must be a canonical `https://www.cricinfo.com/cricket-grounds/...` URL.", - "operationId": "cricinfo-venue-matches", + "consumes": [ + "application/json" + ], + "description": "Returns the feedback eBay shows for a seller, identified by the required `seller` username. The response has the total feedback count, positive feedback percentage, overall rating summary, detailed seller ratings, and review cards with buyer, comment, rating, period and verified-purchase flag. Page with `page` (default 1) and `per_page` (24, 48 or 72; default 48), using `has_more` and `next_page`.", + "operationId": "ebay-seller-feedback", "parameters": [ { - "description": "Canonical Cricinfo cricket-ground URL", - "in": "query", - "name": "url", + "description": "eBay seller username", + "in": "path", + "name": "seller", "required": true, "type": "string", - "x-example": "https://www.cricinfo.com/cricket-grounds/wankhede-stadium-mumbai-58324" + "x-example": "poloblade" + }, + { + "default": 1, + "description": "Feedback page number", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "default": 48, + "description": "Reviews per page", + "enum": [ + 24, + 48, + 72 + ], + "in": "query", + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -316811,7 +393366,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.venueMatchesResponseDoc" + "$ref": "#/definitions/ebay.sellerFeedbackResponseDoc" } }, "400": { @@ -316832,6 +393387,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -316844,23 +393405,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get matches at a Cricinfo venue", + "summary": "Get eBay seller feedback", "tags": [ - "Cricinfo" + "eBay" ] } }, - "/cricinfo/videos": { + "/ebay/seller/{seller}/shop": { "get": { - "description": "Returns a bounded snapshot of Cricinfo's public video hub, including curated, trending, and genre-associated video metadata. Media files are not downloaded by the endpoint.", - "operationId": "cricinfo-videos", + "consumes": [ + "application/json" + ], + "description": "Lists the items in an eBay seller's shop, identified by the required `seller` username, one page at a time with `page` (default 1). Each result has its item id, title, link, image, price or price range, shipping note, location, bid count and watcher count. The response gives the `total` and a `has_more` flag.", + "operationId": "ebay-seller-shop", "parameters": [ { - "description": "Maximum videos returned, from 1 to 100", + "description": "eBay seller username", + "in": "path", + "name": "seller", + "required": true, + "type": "string", + "x-example": "poloblade" + }, + { + "default": 1, + "description": "Shop page number", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "name": "page", + "type": "integer" } ], "produces": [ @@ -316870,7 +393442,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cricinfo.videosResponseDoc" + "$ref": "#/definitions/ebay.sellerShopResponseDoc" } }, "400": { @@ -316879,12 +393451,24 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -316897,24 +393481,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Cricinfo videos", + "summary": "Get eBay seller shop listings", "tags": [ - "Cricinfo" + "eBay" ] } }, - "/ctvnews/article": { + "/economictimes/article": { "get": { - "description": "Returns public CTV News article metadata and body paragraphs from a canonical story URL (https://www.ctvnews.ca/
/article//). Video, photo-gallery and live-stream pages are not article pages.", - "operationId": "ctvnews-article", + "description": "Returns public Economic Times article metadata (title, author(s), published/updated dates, section, lead image) and body paragraphs from a canonical article URL. An ETPrime subscription-gated story returns a permission error instead of a truncated or fabricated body.", + "operationId": "economictimes-article", "parameters": [ { - "description": "Canonical CTV News article URL", + "description": "Canonical Economic Times article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.ctvnews.ca/toronto/article/example-article-slug/" + "x-example": "https://economictimes.indiatimes.com/markets/aif-pms/example-story/articleshow/134466306.cms" } ], "produces": [ @@ -316933,6 +393517,12 @@ "$ref": "#/definitions/app.Response" } }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "404": { "description": "Not Found", "schema": { @@ -316951,24 +393541,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get CTV News article content", + "summary": "Get Economic Times article content", "tags": [ - "CTV News" + "Economic Times" ] } }, - "/ctvnews/author": { + "/economictimes/author": { "get": { - "description": "Returns a CTV News byline profile from a canonical author URL: name, role, biography, photo, public contact address, and recent stories.", - "operationId": "ctvnews-author", + "description": "Returns an Economic Times reporter profile for a `url` like `https://economictimes.indiatimes.com/etreporter/author--.cms`. The response has the name, job title (role and desk in one string), biography, headshot and recent articles with title and URL. Job title, biography and image may be empty; no email field exists.", + "operationId": "economictimes-author", "parameters": [ { - "description": "Canonical CTV News author URL", + "description": "Canonical Economic Times author URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.ctvnews.ca/about-us/team/the-associated-press/" + "x-example": "https://economictimes.indiatimes.com/etreporter/author-kshitij-anand-479257392.cms" } ], "produces": [ @@ -316978,7 +393568,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ctvnewsAuthorResponseDoc" + "$ref": "#/definitions/publicnews.economicTimesAuthorResponseDoc" } }, "400": { @@ -317005,53 +393595,184 @@ "ApiKeyAuth": [] } ], - "summary": "Get a CTV News author profile", + "summary": "Get an Economic Times author profile", "tags": [ - "CTV News" + "Economic Times" ] } }, - "/ctvnews/headlines": { + "/economictimes/headlines": { "get": { - "description": "Returns the current stories listed on one public CTV News section page, newest first, with headline, summary, byline, publication time and image.", - "operationId": "ctvnews-headlines", + "description": "Returns the latest Economic Times headlines for one section. `section` is required and takes a slug such as `top-stories`, `markets-stocks`, `mf-mf-news`, `industry-banking-finance`, `jobs-fresher` or `news-india`. Each item has its title, URL, summary, publication time and image.", + "operationId": "economictimes-headlines", "parameters": [ { - "description": "CTV News section slug", + "description": "Economic Times section slug", "enum": [ - "canada", - "politics", - "world", - "business", - "health", - "entertainment", - "lifestyle", - "climate-and-environment", - "sci-tech", - "sports", + "top-stories", + "ai", + "ai-ai-insights", + "astrology-chalisa-bhajan", + "astrology-horoscope", + "astrology-love-horoscope", + "astrology-numerology-predictions", + "astrology-others", + "astrology-panchang", + "astrology-planets-transits", + "astrology-tarot-readings", + "astrology-us", + "industry", + "industry-auto", + "industry-banking-finance", + "industry-cons-products", + "industry-csr", + "industry-energy", + "industry-healthcare-biotech", + "industry-indl-goods-svs", + "industry-media-entertainment", + "industry-miscellaneous", + "industry-renewables", + "industry-services", + "industry-telecom", + "industry-transportation", + "jobs", + "jobs-c-suite", + "jobs-exams-results", + "jobs-fresher", + "jobs-government-jobs", + "jobs-hr-policies-trends", + "jobs-mid-career", + "magazines", + "magazines-et-magazine", + "magazines-luxury", + "magazines-panache", + "market-data", + "market-data-etlearn", + "markets", + "markets-aif-pms", + "markets-bonds", + "markets-commodities", + "markets-cryptocurrency", + "markets-digital-real-estate", + "markets-expert-view", + "markets-forex", + "markets-investment-ideas", + "markets-ipos-fpos", + "markets-market-moguls", + "markets-mind-over-money", + "markets-options", + "markets-stocks", + "markets-stocks-podcast", + "markets-us-stocks", + "markets-web-stories", + "mf", + "mf-analysis", + "mf-elss", + "mf-learn", + "mf-mf-news", + "mf-web-stories", + "news", + "news-top-trending-products", + "news-bengaluru-news", + "news-company", + "news-defence", + "news-economy", + "news-elections", + "news-environment", + "news-et-evoke", + "news-et-explains", + "news-india", + "news-international", + "news-latest-news", + "news-morning-brief-podcast", + "news-mumbai-news", + "news-new-updates", + "news-newsblogs", + "news-politics-and-nation", + "news-pune-news", + "news-science", + "news-sports", + "news-videos", + "nri", + "nri-country-pages", + "nri-invest", + "nri-latest-updates", + "nri-migrate", + "nri-study", + "nri-test-guide", + "nri-visit", + "nri-web-stories", + "nri-work", "opinion", - "highly-engaged", - "atlantic", - "barrie", - "calgary", - "edmonton", - "kitchener", - "london", - "montreal", - "northern-ontario", - "ottawa", - "regina", - "saskatoon", - "toronto", - "vancouver", - "windsor", - "winnipeg" + "opinion-bliss-of-everyday-life", + "opinion-et-commentary", + "opinion-et-editorial", + "opinion-et-view", + "opinion-just-in-jest", + "opinion-speaking-tree", + "podcasts", + "prime", + "prime-collections", + "prime-consumer", + "prime-corporate-governance", + "prime-economy-and-policy", + "prime-energy", + "prime-environment", + "prime-fintech-and-bfsi", + "prime-infrastructure", + "prime-media-and-communications", + "prime-money-and-markets", + "prime-pharma-and-healthcare", + "prime-prime-decoder", + "prime-prime-vantage", + "prime-primeshots", + "prime-technology-and-startups", + "prime-transportation", + "small-biz", + "small-biz-entrepreneurship", + "small-biz-gst", + "small-biz-hr-leadership", + "small-biz-legal", + "small-biz-marketing-branding", + "small-biz-money", + "small-biz-policy-trends", + "small-biz-resources", + "small-biz-security-tech", + "small-biz-sme-sector", + "small-biz-sme-summits", + "small-biz-sustainability", + "small-biz-trade", + "tech", + "tech-artificial-intelligence", + "tech-catalysts", + "tech-funding", + "tech-information-tech", + "tech-newsletters", + "tech-startups", + "tech-tech-and-gadgets", + "tech-tech-bytes", + "tech-technology", + "wealth", + "wealth-borrow", + "wealth-earn", + "wealth-et-wealth", + "wealth-insure", + "wealth-invest", + "wealth-legal-will", + "wealth-mutual-funds", + "wealth-p2p", + "wealth-personal-finance-news", + "wealth-plan", + "wealth-real-estate", + "wealth-save", + "wealth-spend", + "wealth-tax" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "canada" + "x-example": "top-stories" } ], "produces": [ @@ -317082,16 +393803,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get CTV News section headlines", + "summary": "Get The Economic Times section headlines", "tags": [ - "CTV News" + "Economic Times" ] } }, - "/ctvnews/news": { + "/economictimes/news": { "get": { - "description": "Returns the newest CTV News stories (about the last 24 hours, newest first) from its public news sitemap, each with headline, publication time and lead image.", - "operationId": "ctvnews-news", + "description": "Returns the current Economic Times top stories. Each item has its title, URL and publication time, plus a summary for some stories. Takes no parameters; use `economictimes-headlines` for a single section.", + "operationId": "economictimes-news", "produces": [ "application/json" ], @@ -317120,16 +393841,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get CTV News top stories", + "summary": "Get The Economic Times top stories", "tags": [ - "CTV News" + "Economic Times" ] } }, - "/ctvnews/sections": { + "/economictimes/sections": { "get": { - "description": "Lists the 27 CTV News sections accepted by `ctvnews-headlines`: 12 national topic sections such as `canada`, `politics` and `sci-tech`, and 15 local newsrooms such as `toronto`, `calgary` and `atlantic`. Video, photo, weather, podcast, sponsored and shopping hubs are not included.", - "operationId": "ctvnews-sections", + "description": "Returns the complete public section inventory accepted by /api/v1/economictimes/headlines: business/markets verticals, industry, tech, wealth, mutual funds, small business, NRI, careers, opinion, astrology, and ETPrime (subscription-gated) sections.", + "operationId": "economictimes-sections", "produces": [ "application/json" ], @@ -317146,27 +393867,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get CTV News sections", + "summary": "Get The Economic Times sections", "tags": [ - "CTV News" + "Economic Times" ] } }, - "/culvers/calendar": { - "get": { + "/email/verify": { + "post": { "consumes": [ "application/json" ], - "description": "Returns the full published schedule for one Culver's restaurant: the flavor of the day for every upcoming calendar date, plus the soups served on each date. Culver's publishes roughly a two-month forward window, and the schedule is genuinely per-restaurant -- two restaurants on the same date routinely feature different soups. slug comes from GET /culvers/directory. GET /culvers/store returns only today's and tomorrow's flavor; use this endpoint for the whole calendar.", - "operationId": "culvers-calendar", + "description": "Classifies up to 50 caller-supplied email addresses and returns each one's `status` (`verified` — the mailbox accepts mail; `risky` — catch-all, role or disposable; `invalid` — bad syntax or no MX; `unverified` — could not be determined) and `type` (`generic`, `role`, `personal`). Crawls nothing: pass the addresses you already hold. This is the same classifier the Contact API applies to addresses it discovers, so statuses are directly comparable. When `smtp_enabled` is false, mailbox probing was unavailable for the call and nothing can be reported `verified` — an honest `unverified` rather than a guess.", + "operationId": "email-verify", "parameters": [ { - "description": "Restaurant slug from /culvers/directory", - "in": "query", - "name": "slug", + "description": "Addresses to verify", + "in": "body", + "name": "option", "required": true, - "type": "string", - "x-example": "waunakee" + "schema": { + "$ref": "#/definitions/contact.VerifyRequest" + } } ], "produces": [ @@ -317176,29 +393898,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/culvers.calendarResponseDoc" + "$ref": "#/definitions/contact.verifyResponseDoc" } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Invalid input, or no usable address in the batch", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error during verification", "schema": { "$ref": "#/definitions/app.Response" } @@ -317209,19 +393925,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Culver's restaurant's flavor-of-the-day and daily soup schedule", + "summary": "Email verification — deliverability status for a batch of addresses", "tags": [ - "Culvers" + "Web" ] } }, - "/culvers/categories": { + "/engadget/article": { "get": { - "consumes": [ - "application/json" + "description": "Returns public Engadget article metadata and body paragraphs from a canonical article URL. Engadget articles are free to read, so the full body is returned.", + "operationId": "engadget-article", + "parameters": [ + { + "description": "Canonical Engadget article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.engadget.com/2267229/meta-put-muse-in-a-tamagotchi-like-charm-device/" + } ], - "description": "Returns Culver's national menu's category list -- ButterBurgers, Chicken, Fish & Seafood, Combos & Baskets, Sides, Frozen Custard, Beverages and others -- each with its slug (the value GET /culvers/menu takes), a featured flag, and sort order.", - "operationId": "culvers-categories", "produces": [ "application/json" ], @@ -317229,11 +393952,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/culvers.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -317250,33 +393979,30 @@ "ApiKeyAuth": [] } ], - "summary": "List Culver's national menu categories", + "summary": "Get Engadget article content", "tags": [ - "Culvers" + "Engadget" ] } }, - "/culvers/directory": { + "/engadget/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of Culver's restaurant index, which covers about 1,121 restaurants. `page` starts at 1 and `page_size` runs 1 to 500 (default 100). Each entry has a `slug`, the value the `/culvers/store` endpoint takes, and the restaurant's URL. The total and page counts are included.", - "operationId": "culvers-directory", + "description": "Returns one Engadget author's public profile: name, biography, expertise, social links, and the latest stories listed on their page (a single fixed batch; the page has no further pagination).", + "operationId": "engadget-author", "parameters": [ { - "description": "Optional. 1-based page, default 1.", + "description": "Author slug, e.g. mariella-moon", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "slug", + "type": "string", + "x-example": "mariella-moon" }, { - "description": "Optional. Entries per page, 1-500, default 100.", + "description": "Canonical engadget.com/author/ URL; alternative to slug", "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 100 + "name": "url", + "type": "string", + "x-example": "https://www.engadget.com/author/mariella-moon/" } ], "produces": [ @@ -317286,11 +394012,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/culvers.directoryResponseDoc" + "$ref": "#/definitions/publicnews.engadgetAuthorResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -317307,27 +394039,74 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Culver's restaurant-URL index", + "summary": "Get an Engadget author profile", "tags": [ - "Culvers" + "Engadget" ] } }, - "/culvers/flavor": { + "/engadget/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Fresh Frozen Custard flavor's full detail, including its declared allergens, a component-by-component ingredient breakdown, and Culver's own flavor-category labels. slug comes from GET /culvers/calendar (flavors[].slug) or GET /culvers/store (flavors_of_the_day[].slug).", - "operationId": "culvers-flavor", + "description": "Returns the latest Engadget headlines for one category. `section` is required and takes one of 48 slugs such as `ai`, `gaming`, `apple`, `laptop-pc-reviews` or `transportation-evs`; other values return an invalid-parameter error. Small categories, such as buying guides, may hold only a few items.", + "operationId": "engadget-headlines", "parameters": [ { - "description": "Flavor slug from /culvers/calendar or /culvers/store", + "description": "Engadget category slug", + "enum": [ + "ai", + "amazon", + "apple", + "apps", + "best-tech", + "big-tech", + "computer-accessories", + "computing", + "cybersecurity", + "entertainment", + "features", + "gaming", + "gaming-reviews", + "google", + "headphones-buying-guides", + "headphones-reviews", + "home-product-reviews", + "laptop-buying-guides", + "laptop-pc-reviews", + "laptops", + "meta", + "microsoft", + "mobile", + "news", + "nintendo", + "pc", + "photography-reviews", + "playstation", + "reviews", + "robotics", + "samsung", + "science", + "smart-home-buying-guides", + "smart-home-reviews", + "smartphone-reviews", + "smartphones", + "social-media", + "space", + "streaming", + "tablet-reviews", + "tablets", + "tomorrow", + "transportation-evs", + "tv-movies", + "vpn", + "wearable-reviews", + "wearables", + "xbox" + ], "in": "query", - "name": "slug", + "name": "section", "required": true, "type": "string", - "x-example": "chocolate-covered-strawberry" + "x-example": "ai" } ], "produces": [ @@ -317337,7 +394116,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/culvers.flavorResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -317346,18 +394125,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -317370,37 +394137,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Culver's Fresh Frozen Custard flavor's detail", + "summary": "Get Engadget section headlines", "tags": [ - "Culvers" + "Engadget" ] } }, - "/culvers/item": { + "/engadget/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Culver's menu item's full detail, including its size/topping modifier tree with each option's own calories and nutrition link. category and item slugs come from GET /culvers/categories and GET /culvers/menu.", - "operationId": "culvers-item", - "parameters": [ - { - "description": "Category slug from /culvers/categories", - "in": "query", - "name": "category", - "required": true, - "type": "string", - "x-example": "butterburgers" - }, - { - "description": "Item slug from /culvers/menu", - "in": "query", - "name": "item", - "required": true, - "type": "string", - "x-example": "butterburger-cheese" - } - ], + "description": "Returns the current Engadget technology news. Each item has a title, URL, summary, publish time, author and image when available. Engadget articles are free to read. Takes no parameters; use `engadget-headlines` for a single category.", + "operationId": "engadget-news", "produces": [ "application/json" ], @@ -317408,19 +394154,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/culvers.itemResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -317441,27 +394175,50 @@ "ApiKeyAuth": [] } ], - "summary": "Look up one Culver's menu item's full detail", + "summary": "Get Engadget top stories", "tags": [ - "Culvers" + "Engadget" ] } }, - "/culvers/menu": { + "/engadget/sections": { "get": { - "consumes": [ + "description": "Lists the 48 Engadget categories accepted by `engadget-headlines`, such as `ai`, `cybersecurity`, `smartphone-reviews`, `space` and `xbox`. Each entry has the `slug`, display `name` and category feed `url`. Categories with an empty feed are not listed.", + "operationId": "engadget-sections", + "produces": [ "application/json" ], - "description": "Returns the items in one Culver's menu category, each with name, description, image, and a link to Culver's nutrition guide. Category slugs come from GET /culvers/categories. Prices are not published on the national catalog -- Culver's only prices items once a specific restaurant is selected; see GET /culvers/item for full modifier/topping detail.", - "operationId": "culvers-menu", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Engadget sections", + "tags": [ + "Engadget" + ] + } + }, + "/eonline/article": { + "get": { + "description": "Returns one E! News article by its `url`, in the form `https://www.eonline.com/news//`. The response has the title, description, publish time, byline, lead image, body `paragraphs` and `section`, which is the article's first tag. Photo galleries, videos and show pages are rejected; an unknown id returns not-found.", + "operationId": "eonline-article", "parameters": [ { - "description": "Category slug from /culvers/categories", + "description": "Canonical E! News article URL", "in": "query", - "name": "category", + "name": "url", "required": true, "type": "string", - "x-example": "butterburgers" + "x-example": "https://www.eonline.com/news/1436400/inside-taylor-swift-dakota-johnsons-friendship" } ], "produces": [ @@ -317471,7 +394228,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/culvers.menuResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -317486,12 +394243,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -317504,27 +394255,24 @@ "ApiKeyAuth": [] } ], - "summary": "List one Culver's menu category's items", + "summary": "Get E! News article content", "tags": [ - "Culvers" + "E! News" ] } }, - "/culvers/store": { + "/eonline/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Culver's restaurant's address, phone, coordinates, open/closed status, fulfillment hours, handoff options, online-order link, and today's flavor(s) of the day. slug comes from GET /culvers/directory.", - "operationId": "culvers-store", + "description": "Returns an E! News writer's `name` and the articles on their author page, about 45 per page, for a `url` like `https://www.eonline.com/authors/natalie-finn` (add `/page/` for older ones). There is no biography or photo. `published_at` is the page's own text, such as `18 minutes ago`, not a timestamp.", + "operationId": "eonline-author", "parameters": [ { - "description": "Restaurant slug from /culvers/directory", + "description": "Canonical E! News author URL", "in": "query", - "name": "slug", + "name": "url", "required": true, "type": "string", - "x-example": "ann-arbor-mi-lohr-rd" + "x-example": "https://www.eonline.com/authors/natalie-finn" } ], "produces": [ @@ -317534,7 +394282,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/culvers.storeResponseDoc" + "$ref": "#/definitions/publicnews.eonlineAuthorResponseDoc" } }, "400": { @@ -317549,12 +394297,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -317567,19 +394309,40 @@ "ApiKeyAuth": [] } ], - "summary": "Look up one Culver's restaurant by its directory slug", + "summary": "Get an E! News author page", "tags": [ - "Culvers" + "E! News" ] } }, - "/cvs/brands": { + "/eonline/headlines": { "get": { - "consumes": [ - "application/json" + "description": "Returns up to 30 E! News headlines for one section. `section` is required and must be one of `top_stories`, `tv`, `movies`, `music`, `celebrities`, `couples`, `royals`, `red_carpet`, `influencer`, `style`, `fashion` or `shop`. Each item has its title, URL, summary, publication time, author and image.", + "operationId": "eonline-headlines", + "parameters": [ + { + "description": "E! News section slug", + "enum": [ + "top_stories", + "tv", + "movies", + "music", + "celebrities", + "couples", + "royals", + "red_carpet", + "influencer", + "style", + "fashion", + "shop" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "top_stories" + } ], - "description": "Returns CVS.com's full brand directory (name and path). Each brand's path is directly usable as GET /cvs/category's path parameter to browse that brand's products.", - "operationId": "cvs-brands", "produces": [ "application/json" ], @@ -317587,11 +394350,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cvs.brandsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -317608,19 +394371,16 @@ "ApiKeyAuth": [] } ], - "summary": "CVS brand directory", + "summary": "Get E! News section headlines", "tags": [ - "CVS" + "E! News" ] } }, - "/cvs/categories": { + "/eonline/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns CVS.com's full category/subcategory navigation taxonomy (name and path, nested to whatever depth the upstream carries). Each node's path is directly usable as GET /cvs/category's path parameter.", - "operationId": "cvs-categories", + "description": "Returns up to 30 top stories from the US edition of E! News. Each item has its title, canonical article URL, summary, publication time, byline and thumbnail. Takes no parameters; use `eonline-headlines` for a single section.", + "operationId": "eonline-news", "produces": [ "application/json" ], @@ -317628,7 +394388,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cvs.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -317649,51 +394409,16 @@ "ApiKeyAuth": [] } ], - "summary": "CVS category taxonomy", + "summary": "Get E! News top stories", "tags": [ - "CVS" + "E! News" ] } }, - "/cvs/category": { + "/eonline/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of a CVS.com OTC (over-the-counter) retail category, subcategory, or brand page's product grid: products with title, brand, image, current/original price, and sponsored/featured/new-product flags; the total result count; and the facets (brand, color, size, price range, and other category-specific attributes, each with its selectable values and result counts) available to filter the page further. Covers the non-prescription retail catalog only. path is the segment of a page URL after \"/shop/\", e.g. \"beauty\" (top-level category), \"health-medicine/allergy-sinus\" (subcategory), or \"brand-shop/s/safe-home\" (brand page); a full https://www.cvs.com/shop/... URL or a \"/shop/...\" path is also accepted. Any of these can also carry an optional facet-filter suffix in the site's own URL shape, e.g. \"beauty/makeup/eyes/q/CoverGirl/Black/brpc\" to filter to brand CoverGirl and color Black -- see the response's facets field for which values/type codes a given category supports; filter values are case-sensitive exactly as the site renders them. page is a 1-indexed page number (default 1). sort is an optional result order matching the site's own Sort By control. CVS.com is only available from US and US-territory locations; a request served from an unsupported region returns an upstream error rather than an empty result.", - "operationId": "cvs-category", - "parameters": [ - { - "description": "CVS category, subcategory, or brand-page URL path, optionally with a /q/{value}/{typeCode} facet-filter suffix, e.g. \\", - "in": "query", - "name": "path", - "required": true, - "type": "string", - "x-example": "beauty" - }, - { - "description": "1-indexed page number, default 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Result sort order, default the site's own relevance order. One of pa (Price Low to High), pd (Price High to Low), tr (Top Rated), rc (Most Reviewed), az (Name A-Z), za (Name Z-A)", - "enum": [ - "pa", - "pd", - "tr", - "rc", - "az", - "za" - ], - "in": "query", - "name": "sort", - "type": "string", - "x-example": "pa" - } - ], + "description": "Lists the 12 E! News sections accepted by `eonline-headlines`, from `top_stories`, `tv` and `movies` to `royals`, `fashion` and `shop`. Each entry has the `slug`, `name` and feed `url`. The list is curated from the main navigation hubs and major tag feeds, not every tag.", + "operationId": "eonline-sections", "produces": [ "application/json" ], @@ -317701,25 +394426,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cvs.categoryResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -317728,27 +394435,67 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a CVS OTC category page", + "summary": "Get E! News sections", "tags": [ - "CVS" + "E! News" ] } }, - "/cvs/product-ingredients/{slug}": { + "/espn/athlete": { "get": { "consumes": [ "application/json" ], - "description": "Returns one CVS.com OTC (over-the-counter) retail product's ingredient/label statement: active ingredients, inactive ingredients, and the vendor's full free-text ingredient paragraph (which, for OTC drug products, frequently also carries a Drug Facts-style purpose note). This is sourced from the product's own dedicated ingredients page, a separate page from the main product detail endpoint. Covers the non-prescription retail catalog only -- this does not cover prescription items, pharmacy ordering, or any patient-specific data. slug is the segment of a product page URL after \"/shop/\", e.g. \"e-l-f-16hr-camo-concealer-prodid-2370023\"; a full https://www.cvs.com/shop/... URL is also accepted. Some products (particularly non-consumable goods) may return empty ingredient fields -- this reflects upstream having no label data for that product, not an error. CVS.com is only available from US/US-territory egress; a request from an unsupported region returns an upstream error rather than an empty result.", - "operationId": "cvs-product-ingredients", + "description": "Returns one athlete's bio/overview (name, position, jersey, physicals, current team). The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.", + "operationId": "espn-athlete", "parameters": [ { - "description": "CVS product page URL slug, e.g. \\", - "in": "path", - "name": "slug", + "description": "Sport key", + "enum": [ + "football", + "basketball", + "baseball", + "hockey", + "soccer" + ], + "in": "query", + "name": "sport", "required": true, "type": "string", - "x-example": "e-l-f-16hr-camo-concealer-prodid-2370023" + "x-example": "football" + }, + { + "description": "League key (must be valid for the sport)", + "enum": [ + "nfl", + "college-football", + "nba", + "wnba", + "mens-college-basketball", + "womens-college-basketball", + "mlb", + "nhl", + "eng.1", + "esp.1", + "ita.1", + "ger.1", + "fra.1", + "usa.1", + "uefa.champions" + ], + "in": "query", + "name": "league", + "required": true, + "type": "string", + "x-example": "nfl" + }, + { + "description": "Numeric ESPN athlete (player) id", + "in": "query", + "name": "athlete", + "required": true, + "type": "string", + "x-example": "3139477" } ], "produces": [ @@ -317758,7 +394505,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cvs.productIngredientsResponseDoc" + "$ref": "#/definitions/espn.athleteResponseDoc" } }, "400": { @@ -317791,27 +394538,67 @@ "ApiKeyAuth": [] } ], - "summary": "CVS OTC product ingredients", + "summary": "ESPN athlete", "tags": [ - "CVS" + "ESPN" ] } }, - "/cvs/product/{slug}": { + "/espn/game-summary": { "get": { "consumes": [ "application/json" ], - "description": "Returns one CVS.com OTC (over-the-counter) retail product's detail: name, description, brand, category, price, currency, online availability, image gallery, and aggregate rating. Covers the non-prescription retail catalog only -- this does not cover prescription items, pharmacy ordering, or any patient-specific data. slug is the segment of a product page URL after \"/shop/\", e.g. \"safe-home-premium-radon-test-kit-prodid-945948\"; a full https://www.cvs.com/shop/... URL is also accepted. CVS.com is only available from US/US-territory egress; a request from an unsupported region returns an upstream error rather than an empty result.", - "operationId": "cvs-product", + "description": "Returns one game's matchup, betting odds, and boxscore stat totals. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport. Get an `event` id from the scoreboard endpoint.", + "operationId": "espn-game-summary", "parameters": [ { - "description": "CVS product page URL slug, e.g. \\", - "in": "path", - "name": "slug", + "description": "Sport key", + "enum": [ + "football", + "basketball", + "baseball", + "hockey", + "soccer" + ], + "in": "query", + "name": "sport", "required": true, "type": "string", - "x-example": "safe-home-premium-radon-test-kit-prodid-945948" + "x-example": "baseball" + }, + { + "description": "League key (must be valid for the sport)", + "enum": [ + "nfl", + "college-football", + "nba", + "wnba", + "mens-college-basketball", + "womens-college-basketball", + "mlb", + "nhl", + "eng.1", + "esp.1", + "ita.1", + "ger.1", + "fra.1", + "usa.1", + "uefa.champions" + ], + "in": "query", + "name": "league", + "required": true, + "type": "string", + "x-example": "mlb" + }, + { + "description": "Numeric ESPN event (game) id", + "in": "query", + "name": "event", + "required": true, + "type": "string", + "x-example": "401816033" } ], "produces": [ @@ -317821,7 +394608,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cvs.productResponseDoc" + "$ref": "#/definitions/espn.gameSummaryResponseDoc" } }, "400": { @@ -317854,49 +394641,59 @@ "ApiKeyAuth": [] } ], - "summary": "CVS OTC product detail", + "summary": "ESPN game summary", "tags": [ - "CVS" + "ESPN" ] } }, - "/cvs/search": { + "/espn/news": { "get": { "consumes": [ "application/json" ], - "description": "Performs a keyword search across CVS.com's non-prescription retail/OTC catalog and returns one page of results: products with title, brand, image, current/original price, and sponsored/featured/new-product flags; the total result count; and the facets (brand, color, size, price range, and other attributes, each with its selectable values and result counts) available to filter the results further. Covers the non-prescription retail catalog only. q is the search keyword or phrase, required. page is a 1-indexed page number (default 1). sort is an optional result order matching cvs-category's own Sort By values. CVS.com is only available from US and US-territory locations; a request served from an unsupported region returns an upstream error rather than an empty result.", - "operationId": "cvs-search", + "description": "Returns recent news articles (headline, description, link) for a league. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.", + "operationId": "espn-news", "parameters": [ { - "description": "Search keyword or phrase", + "description": "Sport key", + "enum": [ + "football", + "basketball", + "baseball", + "hockey", + "soccer" + ], "in": "query", - "name": "q", + "name": "sport", "required": true, "type": "string", - "x-example": "ibuprofen" - }, - { - "description": "1-indexed page number, default 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "basketball" }, { - "description": "Result sort order, default relevance. One of pa (Price Low to High), pd (Price High to Low), tr (Top Rated), rc (Most Reviewed), az (Name A-Z), za (Name Z-A)", + "description": "League key (must be valid for the sport)", "enum": [ - "pa", - "pd", - "tr", - "rc", - "az", - "za" + "nfl", + "college-football", + "nba", + "wnba", + "mens-college-basketball", + "womens-college-basketball", + "mlb", + "nhl", + "eng.1", + "esp.1", + "ita.1", + "ger.1", + "fra.1", + "usa.1", + "uefa.champions" ], "in": "query", - "name": "sort", + "name": "league", + "required": true, "type": "string", - "x-example": "pa" + "x-example": "nba" } ], "produces": [ @@ -317906,7 +394703,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cvs.categoryResponseDoc" + "$ref": "#/definitions/espn.newsResponseDoc" } }, "400": { @@ -317915,6 +394712,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -317933,75 +394736,44 @@ "ApiKeyAuth": [] } ], - "summary": "Search CVS OTC products by keyword", + "summary": "ESPN league news", "tags": [ - "CVS" + "ESPN" ] } }, - "/cvs/store-locator": { + "/espn/rankings": { "get": { "consumes": [ "application/json" ], - "description": "Returns nearby CVS store locations for a ZIP code, a free-text address/city/state, or a latitude/longitude pair: address, phone, fax, distance, and retail store hours, plus a has_pharmacy existence flag and a list of general service indicators (e.g. photo, ATM, same-day delivery). Covers general store info only -- this does not return pharmacy hours, pharmacy phone, prescription data, or any patient-specific information. zip is a 5-digit US ZIP code; alternatively supply address (a free-text location such as a city, state, or street address) or latitude and longitude together. When more than one is supplied, zip wins, then address, then latitude/longitude. Optionally narrow results to stores carrying one specific service via the service param (the same code vocabulary the response's services field uses); only one service value is accepted per request. CVS.com is only available from US/US-territory egress; a request from an unsupported region returns an upstream error rather than an empty result.", - "operationId": "cvs-store-locator", + "description": "Returns poll rankings (e.g. AP Top 25) for a college league. Rankings are only published for college leagues: the `sport` enum accepts `football` and `basketball`, and the `league` enum accepts `college-football`, `mens-college-basketball`, and `womens-college-basketball`.", + "operationId": "espn-rankings", "parameters": [ { - "description": "5-digit US ZIP code, e.g. \\", - "in": "query", - "name": "zip", - "type": "string", - "x-example": "90210" - }, - { - "description": "Free-text location -- a city, state, or street address, e.g. \\", + "description": "Sport key", + "enum": [ + "football", + "basketball" + ], "in": "query", - "name": "address", + "name": "sport", + "required": true, "type": "string", - "x-example": "Beverly Hills, CA" - }, - { - "description": "Latitude, used together with longitude when zip and address are not supplied", - "in": "query", - "name": "latitude", - "type": "number", - "x-example": 34.0901 - }, - { - "description": "Longitude, used together with latitude when zip and address are not supplied", - "in": "query", - "name": "longitude", - "type": "number", - "x-example": -118.4065 + "x-example": "football" }, { - "description": "Narrow results to stores carrying one specific service", + "description": "College league key", "enum": [ - "HH_HealthHub_Ind", - "MC_MinuteClinic_Ind", - "HS_OakStreetHealth_Ind", - "IM_Immunization_Ind", - "RX_OTCH_Ind", - "IM_Covax_Ind", - "CL_CovidTest_Ind", - "RX_24Hours_Ind", - "RX_DriveThru_Ind", - "RX_Pharmacy_Ind", - "RX_DrugDisposal_Ind", - "RS_24Hours_Ind", - "PH_Photo_Ind", - "RS_AcceptsWic_Ind", - "RS_AcceptsSnap_Ind", - "GN_UPSAccessPoint_Ind", - "RS_BOPIS_Ind", - "GN_YMas_Ind", - "BT_BeautyIRL_Ind", - "GN_SmileDirectClub_Ind" + "college-football", + "mens-college-basketball", + "womens-college-basketball" ], "in": "query", - "name": "service", - "type": "string" + "name": "league", + "required": true, + "type": "string", + "x-example": "college-football" } ], "produces": [ @@ -318011,7 +394783,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/cvs.storesResponseDoc" + "$ref": "#/definitions/espn.rankingsResponseDoc" } }, "400": { @@ -318044,156 +394816,86 @@ "ApiKeyAuth": [] } ], - "summary": "CVS store locator", + "summary": "ESPN poll rankings", "tags": [ - "CVS" + "ESPN" ] } }, - "/dailycaller/article": { + "/espn/scoreboard": { "get": { - "description": "Returns public The Daily Caller article metadata and body paragraphs from a canonical article URL. Patriots-only (premium) articles expose only a public teaser and are flagged paywalled.", - "operationId": "dailycaller-article", + "consumes": [ + "application/json" + ], + "description": "Returns games (scores, schedule, status, and odds when available) for a sport and league. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport. The `seasontype` enum accepts `1` (preseason), `2` (regular season), `3` (postseason), and `4` (offseason).", + "operationId": "espn-scoreboard", "parameters": [ { - "description": "Canonical The Daily Caller article URL", + "description": "Sport key", + "enum": [ + "football", + "basketball", + "baseball", + "hockey", + "soccer" + ], "in": "query", - "name": "url", + "name": "sport", "required": true, "type": "string", - "x-example": "https://dailycaller.com/2026/09/23/example-article-slug" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + "x-example": "football" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get The Daily Caller article content", - "tags": [ - "The Daily Caller" - ] - } - }, - "/dailycaller/author": { - "get": { - "description": "Returns a The Daily Caller author's byline metadata, job title, optional biography, contact links, and newest articles from a canonical author URL.", - "operationId": "dailycaller-author", - "parameters": [ { - "description": "Canonical The Daily Caller author URL", + "description": "League key (must be valid for the sport)", + "enum": [ + "nfl", + "college-football", + "nba", + "wnba", + "mens-college-basketball", + "womens-college-basketball", + "mlb", + "nhl", + "eng.1", + "esp.1", + "ita.1", + "ger.1", + "fra.1", + "usa.1", + "uefa.champions" + ], "in": "query", - "name": "url", + "name": "league", "required": true, "type": "string", - "x-example": "https://dailycaller.com/author/EmilyKopp/" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.dailycallerAuthorResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + "x-example": "nfl" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Date or range as YYYYMMDD, YYYYMMDD-YYYYMMDD, or YYYY; defaults to the current scoreboard", + "in": "query", + "name": "dates", + "type": "string", + "x-example": "20260910" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get a The Daily Caller author profile", - "tags": [ - "The Daily Caller" - ] - } - }, - "/dailycaller/headlines": { - "get": { - "description": "Returns the newest headlines, about 40, from one Daily Caller section page. `section` is required (`politics`, `world`, `energy`, `opinion`, `patriots` and others); any other value returns a 400. Items have a title, URL, lead image and sometimes a `type` such as `opinion`. Section pages carry no publish time or byline.", - "operationId": "dailycaller-headlines", - "parameters": [ + "description": "Week number (football leagues)", + "in": "query", + "name": "week", + "type": "integer", + "x-example": 1 + }, { - "description": "The Daily Caller section slug", - "enum": [ - "politics", - "us", - "world", - "national-security", - "elections", - "business", - "energy", - "education", - "health", - "tech", - "media", - "entertainment", - "sports", - "guns-and-gear", - "investigative-group", - "opinion", - "analysis", - "two-sides", - "big-tent-ideas", - "patriots", - "satire", - "video" + "description": "Season type", + "enum": [ + 1, + 2, + 3, + 4 ], "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "politics" + "name": "seasontype", + "type": "integer", + "x-example": 2 } ], "produces": [ @@ -318203,7 +394905,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/espn.scoreboardResponseDoc" } }, "400": { @@ -318212,37 +394914,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get The Daily Caller section headlines", - "tags": [ - "The Daily Caller" - ] - } - }, - "/dailycaller/news": { - "get": { - "description": "Returns about 25 of the newest Daily Caller top stories, mixed across sections. Each item has its title, URL, author, publication time (RFC 3339, UTC) and lead image. It takes no parameters; use the headlines endpoint when you want a single section.", - "operationId": "dailycaller-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -318262,50 +394938,78 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Daily Caller top stories", + "summary": "ESPN scoreboard", "tags": [ - "The Daily Caller" + "ESPN" ] } }, - "/dailycaller/sections": { + "/espn/standings": { "get": { - "description": "Lists the 22 Daily Caller section slugs that the headlines endpoint accepts, from `politics` and `world` to `opinion` and `video`, each with its `name` and section page `url`. Sponsored content is not offered. A few sections such as `satire`, `two-sides` and `video` publish rarely, so their newest items can be months old.", - "operationId": "dailycaller-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get The Daily Caller sections", - "tags": [ - "The Daily Caller" - ] - } - }, - "/dailyexpress/article": { - "get": { - "description": "Returns one Daily Express article by its canonical article `url`. The response has the title, description, publish and update times, section, authors, lead image, body `paragraphs` and a `paywalled` flag. Subscriber-only or blocked articles return an upstream error instead of partial text.", - "operationId": "dailyexpress-article", + "description": "Returns league standings grouped by conference/division. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport. The `seasontype` enum accepts `1` (preseason), `2` (regular season), and `3` (postseason).", + "operationId": "espn-standings", "parameters": [ { - "description": "Canonical Daily Express article URL", + "description": "Sport key", + "enum": [ + "football", + "basketball", + "baseball", + "hockey", + "soccer" + ], "in": "query", - "name": "url", + "name": "sport", "required": true, "type": "string", - "x-example": "https://www.express.co.uk/news/123456/example" + "x-example": "football" + }, + { + "description": "League key (must be valid for the sport)", + "enum": [ + "nfl", + "college-football", + "nba", + "wnba", + "mens-college-basketball", + "womens-college-basketball", + "mlb", + "nhl", + "eng.1", + "esp.1", + "ita.1", + "ger.1", + "fra.1", + "usa.1", + "uefa.champions" + ], + "in": "query", + "name": "league", + "required": true, + "type": "string", + "x-example": "nfl" + }, + { + "description": "Four-digit season year; defaults to the current season", + "in": "query", + "name": "season", + "type": "integer", + "x-example": 2024 + }, + { + "description": "Season type", + "enum": [ + 1, + 2, + 3 + ], + "in": "query", + "name": "seasontype", + "type": "integer", + "x-example": 2 } ], "produces": [ @@ -318315,7 +395019,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/espn.standingsResponseDoc" } }, "400": { @@ -318330,6 +395034,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -318342,24 +395052,67 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Express article content", + "summary": "ESPN standings", "tags": [ - "Daily Express" + "ESPN" ] } }, - "/dailyexpress/author": { + "/espn/team": { "get": { - "description": "Returns one Daily Express journalist's public profile: name, job title, bio, and their recent articles, from a canonical journalist URL.", - "operationId": "dailyexpress-author", + "consumes": [ + "application/json" + ], + "description": "Returns one team's detail (identity, colors, record, standing summary). The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.", + "operationId": "espn-team", "parameters": [ { - "description": "Canonical Daily Express journalist URL", + "description": "Sport key", + "enum": [ + "football", + "basketball", + "baseball", + "hockey", + "soccer" + ], "in": "query", - "name": "url", + "name": "sport", "required": true, "type": "string", - "x-example": "https://www.express.co.uk/journalist/123944/Rebecca-Russell" + "x-example": "football" + }, + { + "description": "League key (must be valid for the sport)", + "enum": [ + "nfl", + "college-football", + "nba", + "wnba", + "mens-college-basketball", + "womens-college-basketball", + "mlb", + "nhl", + "eng.1", + "esp.1", + "ita.1", + "ger.1", + "fra.1", + "usa.1", + "uefa.champions" + ], + "in": "query", + "name": "league", + "required": true, + "type": "string", + "x-example": "nfl" + }, + { + "description": "Team id (numeric) or abbreviation", + "in": "query", + "name": "team", + "required": true, + "type": "string", + "x-example": "KC" } ], "produces": [ @@ -318369,7 +395122,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.dailyExpressAuthorResponseDoc" + "$ref": "#/definitions/espn.teamResponseDoc" } }, "400": { @@ -318384,6 +395137,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -318396,55 +395155,67 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Daily Express journalist profile", + "summary": "ESPN team detail", "tags": [ - "Daily Express" + "ESPN" ] } }, - "/dailyexpress/headlines": { + "/espn/team-roster": { "get": { - "description": "Returns the latest Daily Express headlines for one section. `section` is required and takes a slug such as `news`, `royal`, `showbiz-tv`, `formula-1` or `city-business`. Each item has its title, URL, summary, publication time and image.", - "operationId": "dailyexpress-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns a team's roster (players with position, jersey, age, and experience) plus head coach. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.", + "operationId": "espn-team-roster", "parameters": [ { - "description": "Daily Express section slug", + "description": "Sport key", "enum": [ - "news", - "uk", - "world", - "politics", - "royal", - "us", - "weather", - "science", - "history", - "weird", - "nature", - "obituaries", - "showbiz-tv", - "sport", "football", - "tennis", - "formula-1", - "finance", - "city-business", - "personal-finance", - "retirement", - "travel", - "entertainment", - "gaming", - "lifestyle", - "health", - "property", - "cars", - "technology" + "basketball", + "baseball", + "hockey", + "soccer" ], "in": "query", - "name": "section", + "name": "sport", "required": true, "type": "string", - "x-example": "news" + "x-example": "football" + }, + { + "description": "League key (must be valid for the sport)", + "enum": [ + "nfl", + "college-football", + "nba", + "wnba", + "mens-college-basketball", + "womens-college-basketball", + "mlb", + "nhl", + "eng.1", + "esp.1", + "ita.1", + "ger.1", + "fra.1", + "usa.1", + "uefa.champions" + ], + "in": "query", + "name": "league", + "required": true, + "type": "string", + "x-example": "nfl" + }, + { + "description": "Team id (numeric) or abbreviation", + "in": "query", + "name": "team", + "required": true, + "type": "string", + "x-example": "KC" } ], "produces": [ @@ -318454,7 +395225,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/espn.rosterResponseDoc" } }, "400": { @@ -318463,36 +395234,16 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Daily Express section headlines", - "tags": [ - "Daily Express" - ] - } - }, - "/dailyexpress/news": { - "get": { - "description": "Returns the current Daily Express top stories. Each item has its title, URL, summary, publication time and image. Takes no parameters; use `dailyexpress-headlines` to read a single section instead.", - "operationId": "dailyexpress-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "429": { + "description": "Too Many Requests", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/app.Response" } }, "503": { @@ -318507,50 +395258,59 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Express top stories", + "summary": "ESPN team roster", "tags": [ - "Daily Express" + "ESPN" ] } }, - "/dailyexpress/sections": { + "/espn/teams": { "get": { - "description": "Lists the Daily Express sections that `dailyexpress-headlines` accepts, such as `news`, `uk`, `royal`, `sport` and `personal-finance`. Each entry has a stable `slug`, a display `name` and the section `url`. Takes no parameters.", - "operationId": "dailyexpress-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Daily Express sections", - "tags": [ - "Daily Express" - ] - } - }, - "/dailykos/article": { - "get": { - "description": "Returns metadata and text paragraphs from a canonical staff-authored Daily Kos /news/ story. Community stories and photographer-owned images are not included.", - "operationId": "dailykos-article", + "description": "Returns the full team list for a sport and league. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.", + "operationId": "espn-teams", "parameters": [ { - "description": "Canonical Daily Kos staff /news/ article URL", + "description": "Sport key", + "enum": [ + "football", + "basketball", + "baseball", + "hockey", + "soccer" + ], "in": "query", - "name": "url", + "name": "sport", "required": true, "type": "string", - "x-example": "https://www.dailykos.com/stories/2026/9/28/800104871/news/yet-another-fbi-co-babysitter-bids-the-bureau-bye-bye/" + "x-example": "basketball" + }, + { + "description": "League key (must be valid for the sport)", + "enum": [ + "nfl", + "college-football", + "nba", + "wnba", + "mens-college-basketball", + "womens-college-basketball", + "mlb", + "nhl", + "eng.1", + "esp.1", + "ita.1", + "ger.1", + "fra.1", + "usa.1", + "uefa.champions" + ], + "in": "query", + "name": "league", + "required": true, + "type": "string", + "x-example": "nba" } ], "produces": [ @@ -318560,7 +395320,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/espn.teamsResponseDoc" } }, "400": { @@ -318575,6 +395335,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -318587,50 +395353,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Daily Kos staff article", + "summary": "ESPN team list", "tags": [ - "Daily Kos" + "ESPN" ] } }, - "/dailykos/headlines": { + "/etsy/listing/{id}": { "get": { - "description": "Returns the current stories for one Daily Kos category. `section` is required and takes one of 24 slugs such as `news/elections`, `news/courts`, `cartoon` or `announcements`; any other value returns a 400. Some categories can be empty, which comes back as an empty `items` list.", - "operationId": "dailykos-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns the details of one Etsy listing by its numeric `id`: title, description, URL, price and currency, quantity, favorites, views, materials, tags, images and category. It also has the shop id and name, listing state, sold-out, customizable and digital flags, when it was made, shipping origin country, and create and update dates.", + "operationId": "etsy-listing", "parameters": [ { - "description": "Daily Kos category slug", - "enum": [ - "announcements", - "cartoon", - "daily-kos", - "partnerhub", - "news", - "news/business-and-economy", - "news/congress", - "news/courts", - "news/culture", - "news/elections", - "news/environment", - "news/health", - "news/immigration", - "news/justice", - "news/media", - "news/media-and-culture", - "news/national", - "news/science", - "news/series", - "news/stateandlocal", - "news/tech", - "news/videos", - "news/whitehouse", - "news/world" - ], - "in": "query", - "name": "section", + "description": "Numeric Etsy listing id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "announcements" + "x-example": "1044347578" } ], "produces": [ @@ -318640,7 +395383,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/etsy.listingResponseDoc" } }, "400": { @@ -318649,36 +395392,22 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Daily Kos category headlines", - "tags": [ - "Daily Kos" - ] - } - }, - "/dailykos/news": { - "get": { - "description": "Returns the current staff-written Daily Kos stories, about 10 items, each with title, URL, summary, publication time and author. Community stories and image URLs are left out because the site licenses them separately. Takes no parameters.", - "operationId": "dailykos-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "429": { + "description": "Too Many Requests", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -318693,50 +395422,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Kos top stories", + "summary": "Get Etsy listing detail", "tags": [ - "Daily Kos" + "Etsy" ] } }, - "/dailykos/sections": { + "/etsy/listing/{id}/reviews": { "get": { - "description": "Lists the 24 Daily Kos categories accepted by `dailykos-headlines`, including nested slugs such as `news/elections` and `news/whitehouse`. Each entry has the `slug`, display `name` and category `url`. Dynamic tag archives are not part of this set.", - "operationId": "dailykos-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "List Daily Kos categories", - "tags": [ - "Daily Kos" - ] - } - }, - "/dailymail/article": { - "get": { - "description": "Returns one Daily Mail article by its canonical `url`, which must contain an `article-` path segment. The response has the title, description, publish and update times, section, authors, lead image, body `paragraphs` and a `paywalled` flag.", - "operationId": "dailymail-article", + "description": "Returns buyer reviews for an Etsy listing, identified by the numeric `id`. Start from `offset` (0-based, default 0) and order with `sort` (`newest`, `oldest`, `highest_rating`, `lowest_rating` or `most_relevant`). The response has the average rating and total rating count; each review has buyer, date, rating, text, language and whether the seller replied.", + "operationId": "etsy-listing-reviews", "parameters": [ { - "description": "Canonical Daily Mail article URL", - "in": "query", - "name": "url", + "description": "Numeric Etsy listing id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.dailymail.co.uk/news/article-1234567/example.html" + "x-example": "1044347578" + }, + { + "description": "0-based review offset", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + }, + { + "description": "Review sort order", + "enum": [ + "newest", + "oldest", + "highest_rating", + "lowest_rating", + "most_relevant" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "newest" } ], "produces": [ @@ -318746,7 +395473,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/etsy.listingReviewsResponseDoc" } }, "400": { @@ -318761,6 +395488,18 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -318773,31 +395512,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Mail article content", + "summary": "Get Etsy listing reviews", "tags": [ - "Daily Mail" + "Etsy" ] } }, - "/dailymail/author": { + "/etsy/search": { "get": { - "description": "Returns one Daily Mail author's public profile: name, job title, bio, social accounts, and one page of their recent articles.", - "operationId": "dailymail-author", + "consumes": [ + "application/json" + ], + "description": "Searches Etsy listings across shops for the required keywords `q`, in Etsy's default relevance order. Page with `offset` (default 0) and `limit` (default 36, max 100). The response gives the total match `count`, and each result has listing id, title, URL, image, price, shop name and rating, quantity and sold-out flag. Read `currency`, since it is not fixed to USD.", + "operationId": "etsy-search", "parameters": [ { - "description": "Canonical dailymail.com/profile-/.html URL", + "description": "Search keywords", "in": "query", - "name": "url", + "name": "q", "required": true, "type": "string", - "x-example": "https://www.dailymail.com/profile-1021/charliespiering.html" + "x-example": "handmade mug" }, { - "description": "1-based page of articles to return; defaults to 1", + "description": "0-based result offset", "in": "query", - "name": "page", + "name": "offset", "type": "integer", - "x-example": 1 + "x-example": 0 + }, + { + "description": "Page size (default 36, max 100)", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 36 } ], "produces": [ @@ -318807,7 +395556,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.dailyMailAuthorResponseDoc" + "$ref": "#/definitions/etsy.searchResponseDoc" } }, "400": { @@ -318816,8 +395565,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -318834,38 +395589,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Daily Mail author profile", + "summary": "Search Etsy listings", "tags": [ - "Daily Mail" + "Etsy" ] } }, - "/dailymail/headlines": { + "/etsy/shop/search": { "get": { - "description": "Returns the latest Daily Mail headlines for one section. `section` is required and must be one of `home`, `news`, `sport`, `tvshowbiz`, `health`, `femail`, `travel`, `sciencetech`, `money`, `debate`, `us` or `australia`. Each item has its title, URL, summary, publication time and image.", - "operationId": "dailymail-headlines", + "consumes": [ + "application/json" + ], + "description": "Searches Etsy shops by the required keyword `q`, returning up to `limit` shops (default 10). Each shop has its id, name, avatar, location, active listing count, open date and a vacation-mode flag.", + "operationId": "etsy-shop-search", "parameters": [ { - "description": "Daily Mail RSS section slug", - "enum": [ - "home", - "news", - "sport", - "tvshowbiz", - "health", - "femail", - "travel", - "sciencetech", - "money", - "debate", - "us", - "australia" - ], + "description": "Shop search keyword", "in": "query", - "name": "section", + "name": "q", "required": true, "type": "string", - "x-example": "home" + "x-example": "ceramic" + }, + { + "description": "Max shops to return (default 10)", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -318875,7 +395626,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/etsy.shopSearchResponseDoc" } }, "400": { @@ -318884,40 +395635,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Daily Mail section headlines", - "tags": [ - "Daily Mail" - ] - } - }, - "/dailymail/news": { - "get": { - "description": "Returns the current Daily Mail top stories. Each item has its title, URL, summary, publication time and image. Takes no parameters; use `dailymail-headlines` for a single section.", - "operationId": "dailymail-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -318934,50 +395659,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Mail top stories", + "summary": "Search Etsy shops", "tags": [ - "Daily Mail" + "Etsy" ] } }, - "/dailymail/sections": { + "/etsy/shop/{id}": { "get": { - "description": "Lists the 12 Daily Mail sections accepted by `dailymail-headlines`: `home`, `news`, `sport`, `tvshowbiz`, `health`, `femail`, `travel`, `sciencetech`, `money`, `debate`, `us` and `australia`. Each entry has the `slug`, display `name` and feed `url`.", - "operationId": "dailymail-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Daily Mail RSS sections", - "tags": [ - "Daily Mail" - ] - } - }, - "/dailymaverick/article": { - "get": { - "description": "Extracts the public article metadata and body paragraphs Daily Maverick serves to an anonymous visitor. The paywalled flag is set only when the page exposes the publisher's access-control marker.", - "operationId": "dailymaverick-article", + "description": "Returns an Etsy shop profile: seller, headline, rating, and sold count. Accepts a numeric shop id or a shop name.", + "operationId": "etsy-shop", "parameters": [ { - "description": "Canonical Daily Maverick article or opinionista URL", - "in": "query", - "name": "url", + "description": "Numeric Etsy shop id or shop name", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.dailymaverick.co.za/article/2026-09-29-nmb-flying-squad-get-two-cars-and-a-promise-of-more/" + "x-example": "gaguatelier" } ], "produces": [ @@ -318987,7 +395689,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/etsy.shopResponseDoc" } }, "400": { @@ -319008,6 +395710,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -319020,77 +395728,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Daily Maverick article", + "summary": "Get Etsy shop profile", "tags": [ - "Daily Maverick" + "Etsy" ] } }, - "/dailymaverick/headlines": { + "/etsy/shop/{id}/listings": { "get": { - "description": "Returns up to 21 current story cards for one Daily Maverick category. `section` is required and takes one of 51 slugs such as `maverick-news`, `business-maverick`, `opinionistas`, `politics` or `sport`. Each item has its title, URL and type, plus summary, publication time, author and image when the outlet provides them.", - "operationId": "dailymaverick-headlines", + "consumes": [ + "application/json" + ], + "description": "Lists the listings in an Etsy shop, identified by the required `id` (a numeric shop id or a shop name). Narrow with `q` to filter within the shop's own catalogue, and page with `offset` (default 0) and `limit` (default 24). Each listing has its id, title, URL, image, price, currency, quantity, shop rating and sold-out flag.", + "operationId": "etsy-shop-listings", "parameters": [ { - "description": "Daily Maverick category slug", - "enum": [ - "2019-elections", - "2019-rugby-world-cup", - "africa", - "analysis", - "articles", - "blog", - "books", - "business-maverick", - "cartoons", - "companies", - "covid-19", - "crypto", - "culture", - "declassified-uk", - "dm168", - "economy", - "editorial", - "elections", - "fifa-world-cup-2026", - "international-finance", - "johannesburg", - "magazine", - "maverick-citizen", - "maverick-earth", - "maverick-insider", - "maverick-life", - "maverick-news", - "media", - "mining", - "motoring", - "multimedia", - "nelson-mandela-bay", - "op-eds", - "open-secrets", - "opinionistas", - "partner-content", - "people-of-the-year", - "personal-finance", - "podcasts", - "politics", - "sci-tech", - "scorpio", - "south-africa", - "sponsored-content", - "sport", - "tgifood", - "ukraine-crisis", - "webinars", - "weekend-wrap", - "world", - "world-cup-2018" - ], - "in": "query", - "name": "section", + "description": "Numeric Etsy shop id or shop name", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "2019-elections" + "x-example": "gaguatelier" + }, + { + "description": "Keyword filter within the shop's own catalog", + "in": "query", + "name": "q", + "type": "string", + "x-example": "mug" + }, + { + "description": "0-based listing offset", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + }, + { + "description": "Page size (default 24)", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 24 } ], "produces": [ @@ -319100,7 +395779,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/etsy.shopListingsResponseDoc" } }, "400": { @@ -319109,12 +395788,24 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -319127,16 +395818,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get headlines from one Daily Maverick section", + "summary": "Get an Etsy shop's listings", "tags": [ - "Daily Maverick" + "Etsy" ] } }, - "/dailymaverick/news": { + "/etsy/shop/{id}/reviews": { "get": { - "description": "Lists recent Daily Maverick articles and opinionista pieces from a rolling set of the newest entries. Each item has its title, URL, `type`, publication time and, when available, summary, author and image. Videos, cartoons and other non-article pages are excluded.", - "operationId": "dailymaverick-news", + "consumes": [ + "application/json" + ], + "description": "Returns buyer reviews for an Etsy shop, identified by the required `id` (a numeric shop id or a shop name). Page with `offset` (default 0) and `limit` (default 14). The response has the average rating and total rating count. Each review has buyer, date, rating, text, language, the reviewed listing, and whether the seller replied.", + "operationId": "etsy-shop-reviews", + "parameters": [ + { + "description": "Numeric Etsy shop id or shop name", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "gaguatelier" + }, + { + "description": "0-based review offset", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + }, + { + "description": "Page size (default 14)", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 14 + } + ], "produces": [ "application/json" ], @@ -319144,46 +395862,20 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/etsy.shopReviewsResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get current Daily Maverick stories", - "tags": [ - "Daily Maverick" - ] - } - }, - "/dailymaverick/sections": { - "get": { - "description": "Lists the 51 article-bearing Daily Maverick categories accepted by `dailymaverick-headlines`, such as `africa`, `maverick-citizen`, `op-eds` and `sci-tech`. Each entry has the `slug`, `name` and category `url`. Empty, media-only and other non-story categories are omitted; checked 2026-09-28.", - "operationId": "dailymaverick-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -319191,6 +395883,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -319203,24 +395901,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Daily Maverick sections", + "summary": "Get Etsy shop reviews", "tags": [ - "Daily Maverick" + "Etsy" ] } }, - "/dailyrecord/article": { + "/euronews/article": { "get": { - "description": "Returns one Daily Record article by its canonical article `url`. The response has the title, description, publish and update times, section, authors, lead image, body `paragraphs` and a `paywalled` flag. Subscriber-only or blocked articles return an upstream error.", - "operationId": "dailyrecord-article", + "description": "Returns one Euronews English-edition article by its `url`, in the form `https://www.euronews.com/YYYY/MM/DD/`. The response has the title, description, publish and update times, section, authors, lead image and body `paragraphs`.", + "operationId": "euronews-article", "parameters": [ { - "description": "Canonical Daily Record article URL", + "description": "Canonical Euronews article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.dailyrecord.co.uk/news/scottish-news/example-37685844" + "x-example": "https://www.euronews.com/2026/09/24/example-article-slug" } ], "produces": [ @@ -319257,30 +395955,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Record article content", + "summary": "Get Euronews article content", "tags": [ - "Daily Record" + "Euronews" ] } }, - "/dailyrecord/author": { + "/euronews/author": { "get": { - "description": "Returns a Daily Record author profile, found by `slug` (for example `paul-hutcheon`) or by a canonical `url`; send exactly one of the two. The response has the name, job title, bio, email, X/Twitter link and recent articles with their label. Contact details the page does not list are simply absent.", - "operationId": "dailyrecord-author", + "description": "Returns a Euronews author profile for a `url` like `https://www.euronews.com/profiles/`. The response has the name, job title, editorial team, `social_links` (usually one X/Twitter link, empty if none) and recent articles. There is no headshot or biography, and `job_title` is repeated as Euronews gives it.", + "operationId": "euronews-author", "parameters": [ { - "description": "Author slug, e.g. paul-hutcheon", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "paul-hutcheon" - }, - { - "description": "Canonical dailyrecord.co.uk/authors// URL; alternative to slug", + "description": "Canonical Euronews author profile URL", "in": "query", "name": "url", + "required": true, "type": "string", - "x-example": "https://www.dailyrecord.co.uk/authors/paul-hutcheon/" + "x-example": "https://www.euronews.com/profiles/2748" } ], "produces": [ @@ -319290,7 +395982,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.dailyRecordAuthorResponseDoc" + "$ref": "#/definitions/publicnews.euronewsAuthorResponseDoc" } }, "400": { @@ -319317,30 +396009,62 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Daily Record author profile", + "summary": "Get a Euronews author profile", "tags": [ - "Daily Record" + "Euronews" ] } }, - "/dailyrecord/headlines": { + "/euronews/headlines": { "get": { - "description": "Returns the latest Daily Record headlines for one section. `section` is required and must be one of `news`, `scotland`, `uk-world-news`, `sport`, `football`, `showbiz`, `lifestyle`, `money`, `travel` or `in-your-area`. Every item has its title and URL; the `news` section also carries summary, publication time and image.", - "operationId": "dailyrecord-headlines", + "description": "Returns the latest Euronews English-edition headlines for one section. `section` is required and takes one of 42 slugs, including themes (`business`, `culture`, `earth`, `health`, `next`, `travel`) and their sub-sections such as `business-markets` or `next-space`. Each item has its title and URL; the `news` and `business` sections also carry summary and publication time.", + "operationId": "euronews-headlines", "parameters": [ { - "description": "Daily Record section slug", + "description": "Euronews section slug", "enum": [ "news", - "scotland", - "uk-world-news", - "sport", - "football", - "showbiz", - "lifestyle", - "money", + "news-africa", + "news-americas", + "news-asia", + "news-international", + "news-middle-east", + "news-oceania", + "business", + "business-business", + "business-economy", + "business-markets", + "culture", + "culture-art", + "culture-lifestyle", + "culture-news", + "culture-design", + "culture-food-and-drink", + "earth", + "earth-climate", + "earth-news", + "earth-ecotech", + "earth-nature", + "earth-water", + "health", + "health-news", + "health-healthcare", + "health-nutrition", + "health-wellbeing", + "my-europe", + "my-europe-eu-xl", + "my-europe-news", + "next", + "next-mobility", + "next-money", + "next-space", + "next-tech-news", + "next-work", "travel", - "in-your-area" + "travel-destinations", + "travel-moments", + "travel-residences", + "travel-news" ], "in": "query", "name": "section", @@ -319377,16 +396101,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Record section headlines", + "summary": "Get Euronews section headlines", "tags": [ - "Daily Record" + "Euronews" ] } }, - "/dailyrecord/news": { + "/euronews/news": { "get": { - "description": "Returns the current Daily Record top stories. Each item has its title, URL, summary, publication time and image. Takes no parameters; use `dailyrecord-headlines` for a single section.", - "operationId": "dailyrecord-news", + "description": "Returns the current Euronews English-edition top stories. Each item has its title, URL, summary and publication time. Takes no parameters; use `euronews-headlines` for a single theme or sub-section.", + "operationId": "euronews-news", "produces": [ "application/json" ], @@ -319397,6 +396121,12 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -319409,16 +396139,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Record top stories", + "summary": "Get Euronews top stories", "tags": [ - "Daily Record" + "Euronews" ] } }, - "/dailyrecord/sections": { + "/euronews/sections": { "get": { - "description": "Lists the Daily Record sections accepted by `dailyrecord-headlines`, such as `news`, `scotland`, `uk-world-news`, `football` and `in-your-area`. Each entry has a stable `slug`, a display `name` and the section `url`. Takes no parameters.", - "operationId": "dailyrecord-sections", + "description": "Lists the 42 Euronews English-edition sections accepted by `euronews-headlines`. Top-level themes include `news`, `business`, `culture`, `earth`, `health`, `my-europe`, `next` and `travel`, each with sub-sections such as `news-africa` or `earth-climate`. Each entry has the `slug`, `name` and `url`.", + "operationId": "euronews-sections", "produces": [ "application/json" ], @@ -319435,24 +396165,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Record sections", + "summary": "Get Euronews sections", "tags": [ - "Daily Record" + "Euronews" ] } }, - "/dailystaruk/article": { + "/everlane/collections": { "get": { - "description": "Returns public Daily Star (UK) article metadata (including the section) and body paragraphs from a canonical article URL. Photo-gallery and sponsored partner-story URLs are rejected.", - "operationId": "dailystaruk-article", + "consumes": [ + "application/json" + ], + "description": "Returns collections from Everlane (https://www.everlane.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", + "operationId": "everlane-collections", "parameters": [ { - "description": "Canonical Daily Star (UK) article URL", + "description": "1-based page, defaults to 1", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.dailystar.co.uk/tv/wayne-rooney-opens-up-weight-37700309" + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Maximum collections, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -319462,7 +396201,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" } }, "400": { @@ -319471,12 +396210,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -319495,37 +396228,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Star (UK) article content", + "summary": "List Everlane collections", "tags": [ - "Daily Star UK" + "Everlane" ] } }, - "/dailystaruk/author": { + "/everlane/collections/{handle}/products": { "get": { - "description": "Returns one Daily Star (UK) author's public profile (name and, when published, job title, bio, email and X/Twitter handle) and one page of their recent articles.", - "operationId": "dailystaruk-author", + "consumes": [ + "application/json" + ], + "description": "Returns products from one Everlane (https://www.everlane.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", + "operationId": "everlane-collection-products", "parameters": [ { - "description": "Author slug, e.g. edward-easton", - "in": "query", - "name": "slug", + "description": "Collection handle", + "in": "path", + "name": "handle", + "required": true, "type": "string", - "x-example": "edward-easton" + "x-example": "collection-handle" }, { - "description": "Canonical dailystar.co.uk/authors// URL; alternative to slug", + "description": "1-based page, defaults to 1", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.dailystar.co.uk/authors/edward-easton/" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "default": 1, - "description": "1-based page number of the author's article list (1 to 100); overrides any pageNumber in url", + "description": "Maximum products, defaults to 50 and supports up to 250", "in": "query", - "name": "page", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -319535,7 +396272,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.reachAuthorResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" } }, "400": { @@ -319568,64 +396305,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Daily Star (UK) author profile", + "summary": "List Everlane collection products", "tags": [ - "Daily Star UK" + "Everlane" ] } }, - "/dailystaruk/headlines": { + "/everlane/pages": { "get": { - "description": "Returns fresh headlines from one public Daily Star (UK) section. Photo galleries are omitted because they have no readable article body.", - "operationId": "dailystaruk-headlines", + "consumes": [ + "application/json" + ], + "description": "Lists Everlane static pages, 50 per page by default (`limit`, max 250), with `page` starting at 1. Each page has its handle, title, URL, plain-text content, and created, updated and published dates. In a fallback mode flagged by `transport_mode: \"ssr_embedded\"`, items carry only `handle`, `url` and `updated_at`.", + "operationId": "everlane-pages", "parameters": [ { - "description": "Daily Star (UK) section slug", - "enum": [ - "news", - "news/latest-news", - "news/uk-news", - "news/world-news", - "news/us-news", - "news/weird-news", - "news/exclusive", - "news/politics", - "showbiz", - "showbiz/us-showbiz", - "tv", - "music", - "sport", - "sport/football", - "sport/transfer-news", - "sport/boxing", - "sport/ufc", - "sport/f1", - "sport/darts", - "sport/snooker", - "sport/other-sports", - "sport/us-sport", - "sport/motorsport", - "tech", - "tech/news", - "tech/gaming", - "tech/reviews", - "life-style", - "life-style/money", - "life-style/competitions", - "real-life", - "love-sex", - "health", - "fashion-beauty", - "diet-fitness", - "travel", - "travel/travel-news", - "just-jane" - ], + "description": "1-based page, defaults to 1", "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "news" + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Maximum static pages, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -319635,7 +396341,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/shopifybrands.pagesResponseDoc" } }, "400": { @@ -319662,16 +396368,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Star (UK) section headlines", + "summary": "List Everlane static pages", "tags": [ - "Daily Star UK" + "Everlane" ] } }, - "/dailystaruk/news": { + "/everlane/pages/{handle}": { "get": { - "description": "Returns fresh Daily Star (UK) top stories from the public home RSS feed. Photo galleries are omitted because they have no readable article body.", - "operationId": "dailystaruk-news", + "consumes": [ + "application/json" + ], + "description": "Returns one Everlane static page by its required `handle`: title, URL, plain-text content, and created, updated and published dates. An unknown handle returns `404`. In a fallback mode flagged by `transport_mode: \"ssr_embedded\"`, the response omits `id`.", + "operationId": "everlane-page", + "parameters": [ + { + "description": "Page handle", + "in": "path", + "name": "handle", + "required": true, + "type": "string", + "x-example": "page-handle" + } + ], "produces": [ "application/json" ], @@ -319679,7 +396398,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/shopifybrands.pageResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -319700,50 +396431,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Star (UK) top stories", + "summary": "Get a Everlane static page", "tags": [ - "Daily Star UK" + "Everlane" ] } }, - "/dailystaruk/sections": { + "/everlane/products": { "get": { - "description": "Lists the Daily Star (UK) sections accepted by `dailystaruk-headlines`, including nested slugs such as `sport/football`, `news/weird-news` and `tech/gaming`. Each entry has the `slug`, `name` and feed `url`. Feeds were checked on 2026-09-25 and return up to about 25 entries.", - "operationId": "dailystaruk-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Daily Star (UK) sections", - "tags": [ - "Daily Star UK" - ] - } - }, - "/dailywire/article": { - "get": { - "description": "Returns public Daily Wire article metadata and body paragraphs from an article URL under any of the site's content-vertical prefixes.", - "operationId": "dailywire-article", + "description": "Returns products from Everlane's (https://www.everlane.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", + "operationId": "everlane-products", "parameters": [ { - "description": "Daily Wire article URL", + "description": "1-based page, defaults to 1", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.dailywire.com/news/example-article-slug" + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Maximum products, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -319753,7 +396467,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/shopifybrands.productsResponseDoc" } }, "400": { @@ -319762,8 +396476,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -319780,30 +396494,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Wire article content", + "summary": "List Everlane products", "tags": [ - "DailyWire" + "Everlane" ] } }, - "/dailywire/author": { + "/everlane/products/{handle}": { "get": { - "description": "Returns one Daily Wire staff writer or contributor's public profile: name, headshot, social handles when present, biography, and their recent articles.", - "operationId": "dailywire-author", + "consumes": [ + "application/json" + ], + "description": "Returns product detail for one Everlane (https://www.everlane.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", + "operationId": "everlane-product", "parameters": [ { - "description": "Author slug, e.g. brent-scher", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "brent-scher" - }, - { - "description": "Canonical dailywire.com/author/ URL; alternative to slug", - "in": "query", - "name": "url", + "description": "Product handle", + "in": "path", + "name": "handle", + "required": true, "type": "string", - "x-example": "https://www.dailywire.com/author/brent-scher" + "x-example": "product-handle" } ], "produces": [ @@ -319813,7 +396524,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.dailyWireAuthorResponseDoc" + "$ref": "#/definitions/shopifybrands.productResponseDoc" } }, "400": { @@ -319828,6 +396539,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -319840,38 +396557,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Daily Wire author profile", + "summary": "Get a Everlane product", "tags": [ - "DailyWire" + "Everlane" ] } }, - "/dailywire/headlines": { + "/everlane/products/{handle}/recommendations": { "get": { - "description": "Returns current Daily Wire headlines for one content vertical. `section` is required and takes `news`, `opinion`, `dw-opinion`, `analysis`, `news-and-commentary`, `news-and-analysis`, `exclusive`, `entertainment`, `original`, `upstream`, `sports` or `mi-x-dw`. An empty result means the front page does not currently feature that vertical.", - "operationId": "dailywire-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns recommended products for one Everlane (https://www.everlane.com) product handle. The storefront URL is fixed server-side.", + "operationId": "everlane-product-recommendations", "parameters": [ { - "description": "Daily Wire section slug", + "description": "Product handle", + "in": "path", + "name": "handle", + "required": true, + "type": "string", + "x-example": "product-handle" + }, + { + "description": "Maximum products, defaults to 10 and supports up to 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + }, + { + "description": "Recommendation intent. Allowed values: related, complementary", "enum": [ - "news", - "opinion", - "dw-opinion", - "analysis", - "news-and-commentary", - "news-and-analysis", - "exclusive", - "entertainment", - "original", - "upstream", - "sports", - "mi-x-dw" + "related", + "complementary" ], "in": "query", - "name": "section", - "required": true, + "name": "intent", "type": "string", - "x-example": "news" + "x-example": "related" } ], "produces": [ @@ -319881,7 +396605,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" } }, "400": { @@ -319890,37 +396614,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Daily Wire section headlines", - "tags": [ - "DailyWire" - ] - } - }, - "/dailywire/news": { - "get": { - "description": "Returns the current Daily Wire top stories. Each item has its title, URL, summary, publication time, author and image. Takes no parameters; use `dailywire-headlines` to filter by content vertical.", - "operationId": "dailywire-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -319940,45 +396638,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get Daily Wire top stories", + "summary": "List Everlane product recommendations", "tags": [ - "DailyWire" + "Everlane" ] } }, - "/dailywire/sections": { + "/everlane/search/suggest": { "get": { - "description": "Lists the Daily Wire content verticals that `dailywire-headlines` accepts, such as `news`, `opinion`, `analysis`, `entertainment`, `upstream` and `sports`. Each entry has a `slug`, `name` and `url`. Sampled on 2026-09-24, so the list may not be exhaustive.", - "operationId": "dailywire-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ + "description": "Returns products, collections, and query suggestions from Everlane's (https://www.everlane.com) predictive search. The storefront URL is fixed server-side.", + "operationId": "everlane-search-suggest", + "parameters": [ { - "ApiKeyAuth": [] + "description": "Search query", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "wool" + }, + { + "description": "Comma-separated suggestion types. Allowed values: product, collection, query", + "in": "query", + "name": "types", + "type": "string", + "x-example": "product,collection,query" + }, + { + "description": "Maximum results per type, defaults to 10 and supports up to 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 } ], - "summary": "Get Daily Wire content-vertical sections", - "tags": [ - "DailyWire" - ] - } - }, - "/datasets": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the read-only scraped datasets available, with no parameters. Each item has its `id`, name, description and the capabilities it supports: `search`, `detail`, `facets`, `nearby`, `history`, `trending` or `changes`. It reads stored data and does not start a live scrape.", - "operationId": "datasets-list", "produces": [ "application/json" ], @@ -319986,7 +396682,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.listResponseDoc" + "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -319995,8 +396697,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -320007,103 +396709,42 @@ "ApiKeyAuth": [] } ], - "summary": "List stored scraped datasets", + "summary": "Get Everlane search suggestions", "tags": [ - "Datasets" + "Everlane" ] } }, - "/datasets/airbnb-markets/facets": { + "/everlane/sitemap/urls": { "get": { "consumes": [ "application/json" ], - "description": "Returns suppressed distribution counts over the Airbnb markets dataset, honoring the same filters as search. Facet enum: `country`, `market`, `currency`, `superhost`, `guest_favorite`, `rating_band`, `review_band`, `admin1` (top subdivision), `locality` (settlement), `room_type` (`entire_place`/`private_room`/`hotel`/`shared_room`), `property_type` (Airbnb's canonical listing type from the detail page), `amenities` (each amenity with the count of listings offering it). Enrichment-derived facets include a `coverage` object with the number and share of filtered listings carrying that dimension; buckets stay empty below the 20% minimum visibility gate. Coverage above the gate may still be partial. group_by enum: `country`, `market`, `admin1`, `locality`, `room_type`, `property_type`.", - "operationId": "datasets-airbnb-markets-facets", + "description": "Lists URL entries from Everlane's sitemaps, filtered by `type` (`all` by default, or `products`, `collections`, `pages`, `blogs`, `agentic_discovery`, `other`) and capped by `limit` (default 50, max 250). Each entry has its `loc`, inferred type, handle, last modified date, change frequency, and images with caption and title when present.", + "operationId": "everlane-sitemap-urls", "parameters": [ { - "description": "Facet enum: country, market, currency, superhost, guest_favorite, rating_band, review_band, admin1, locality, room_type, property_type, amenities", + "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", "enum": [ - "country", - "market", - "currency", - "superhost", - "guest_favorite", - "rating_band", - "review_band", - "admin1", - "locality", - "room_type", - "property_type", - "amenities" + "all", + "products", + "collections", + "pages", + "blogs", + "agentic_discovery", + "other" ], "in": "query", - "name": "facet", - "required": true, + "name": "type", "type": "string", - "x-example": "country" - }, - { - "description": "Aggregate cell dimension enum: country, market, admin1, locality, room_type, property_type. Defaults to country", - "enum": [ - "country", - "market", - "admin1", - "locality", - "room_type", - "property_type" - ], - "in": "query", - "name": "group_by", - "type": "string" - }, - { - "description": "Exact ISO-3166-1 alpha-2 country filter, e.g. FR", - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Exact metro-market filter, max 128 characters", - "in": "query", - "name": "market", - "type": "string" - }, - { - "description": "Count only Superhost listings", - "in": "query", - "name": "superhost", - "type": "boolean" - }, - { - "description": "Count only Guest Favorite listings (an observed lower bound; the badge under-counts)", - "in": "query", - "name": "guest_favorite", - "type": "boolean" - }, - { - "description": "Minimum listing rating, from 0 through 5", - "in": "query", - "name": "min_rating", - "type": "number" - }, - { - "description": "Minimum listing review count, 0 or greater", - "in": "query", - "name": "min_review_count", - "type": "integer" - }, - { - "description": "Freshness filter, an ISO-8601 date (YYYY-MM-DD)", - "in": "query", - "name": "active_since", - "type": "string" + "x-example": "products" }, { - "description": "Minimum listings per bucket; raises the small-cell suppression floor", + "description": "Maximum URL entries, defaults to 50 and supports up to 250", "in": "query", - "name": "min_listings", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -320113,7 +396754,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.airbnbMarketsFacetResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" } }, "400": { @@ -320128,8 +396769,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -320140,29 +396781,19 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the Airbnb markets dataset", + "summary": "List Everlane sitemap URLs", "tags": [ - "Datasets" + "Everlane" ] } }, - "/datasets/airbnb-markets/items/{country}": { + "/everlane/sitemaps": { "get": { "consumes": [ "application/json" ], - "description": "Returns one country's full aggregate Airbnb market profile from dataset id enum value `airbnb-markets` — headline supply, Superhost share, Guest Favorite share (`guest_favorite_pct`, an observed lower bound), `avg_person_capacity` (average guests a listing sleeps over the detail-page-enriched sample), ratings, its top metros, bounding box, per-currency nightly-price percentiles, and a USD-normalized `price_usd` percentile block (converted via an approximate dated FX snapshot) for cross-country comparison. Aggregate-only. Returns 404 for a country below the suppression floor.", - "operationId": "datasets-airbnb-markets-item", - "parameters": [ - { - "description": "ISO-3166-1 alpha-2 country code, e.g. FR", - "in": "path", - "name": "country", - "required": true, - "type": "string", - "x-example": "FR" - } - ], + "description": "Lists the child sitemaps in Everlane's sitemap index. Each entry has its `loc` URL and an inferred `type`: `products`, `collections`, `pages`, `blogs`, `agentic_discovery` or `other`. It takes no parameters.", + "operationId": "everlane-sitemaps", "produces": [ "application/json" ], @@ -320170,7 +396801,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.airbnbMarketResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" } }, "400": { @@ -320179,20 +396810,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -320203,81 +396828,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Airbnb market from the dataset", + "summary": "List Everlane sitemaps", "tags": [ - "Datasets" + "Everlane" ] } }, - "/datasets/airbnb-markets/nearby": { + "/everlane/store": { "get": { "consumes": [ "application/json" ], - "description": "Returns an aggregate geohash-grid density map of Airbnb listings within a radius of a coordinate, from dataset id enum value `airbnb-markets`. Each cell reports a centroid, listing count and Superhost share; thin cells are suppressed. Aggregate-only.", - "operationId": "datasets-airbnb-markets-nearby", - "parameters": [ - { - "description": "Center latitude, from -90 through 90", - "in": "query", - "name": "lat", - "required": true, - "type": "number", - "x-example": 40.7484257 - }, - { - "description": "Center longitude, from -180 through 180", - "in": "query", - "name": "lon", - "required": true, - "type": "number", - "x-example": -73.98567 - }, - { - "description": "Search radius in meters, from 1 through 50000", - "in": "query", - "name": "radius_m", - "required": true, - "type": "integer", - "x-example": 5000 - }, - { - "description": "Geohash precision, from 1 through 12; defaults to a value derived from the radius", - "in": "query", - "name": "precision", - "type": "integer" - }, - { - "description": "Minimum listings per cell; raises the small-cell suppression floor", - "in": "query", - "name": "min_listings", - "type": "integer" - }, - { - "description": "Exact ISO-3166-1 alpha-2 country filter, e.g. US", - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Count only Superhost listings", - "in": "query", - "name": "superhost", - "type": "boolean" - }, - { - "description": "Minimum listing rating, from 0 through 5", - "in": "query", - "name": "min_rating", - "type": "number" - }, - { - "description": "Freshness filter, an ISO-8601 date (YYYY-MM-DD)", - "in": "query", - "name": "active_since", - "type": "string" - } - ], + "description": "Returns storefront metadata for Everlane (https://www.everlane.com). The storefront URL is fixed server-side, so no `url` parameter is accepted.", + "operationId": "everlane-store", "produces": [ "application/json" ], @@ -320285,7 +396848,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.airbnbMarketsNearbyResponseDoc" + "$ref": "#/definitions/shopifybrands.storeResponseDoc" } }, "400": { @@ -320300,8 +396863,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -320312,105 +396875,24 @@ "ApiKeyAuth": [] } ], - "summary": "Airbnb market density near a coordinate", + "summary": "Get Everlane store metadata", "tags": [ - "Datasets" + "Everlane" ] } }, - "/datasets/airbnb-markets/search": { + "/ew/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns aggregate Airbnb short-term-rental market rollups from the dataset id enum value `airbnb-markets`. Aggregate-only: each row is a market cell, never an individual listing. Thin cells are suppressed. group_by enum: `country`, `market`, `admin1` (top subdivision), `locality` (settlement), `room_type` (`entire_place`/`private_room`/`hotel`/`shared_room`), `property_type` (Airbnb's canonical listing type from the detail page). Enrichment-derived groupings include a `coverage` object with the number and share of filtered listings carrying that dimension; the 20% minimum gate is not a completeness guarantee, and counts still describe classified rows only. Each cell also carries `median_price_usd`, the median nightly price converted to USD via an approximate dated FX snapshot, for cross-country comparison (combine with `group_by=room_type` for median price by room type); `guest_favorite_pct`, the share of listings carrying the Guest Favorite badge (an observed lower bound, like `superhost_pct`); and `avg_person_capacity`, the average guests a listing sleeps over the detail-page-enriched sample. Sort enum: `listings_desc`, `superhost_pct_desc`, `rating_desc`, `key_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-airbnb-markets-search", + "description": "Returns one Entertainment Weekly article by its canonical `url` in the form `ew.com/-`. The response has the title, description, publish and update times, section, authors, lead image, body `paragraphs` and a `paywalled` flag. Blocked or malformed pages return an upstream error.", + "operationId": "ew-article", "parameters": [ { - "description": "Aggregate cell dimension enum: country, market, admin1, locality, room_type, property_type. Defaults to country", - "enum": [ - "country", - "market", - "admin1", - "locality", - "room_type", - "property_type" - ], - "in": "query", - "name": "group_by", - "type": "string" - }, - { - "description": "Exact ISO-3166-1 alpha-2 country filter, e.g. FR", - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Exact metro-market filter, e.g. Paris, max 128 characters", - "in": "query", - "name": "market", - "type": "string" - }, - { - "description": "Count only Superhost listings", - "in": "query", - "name": "superhost", - "type": "boolean" - }, - { - "description": "Count only Guest Favorite listings (an observed lower bound; the badge under-counts)", - "in": "query", - "name": "guest_favorite", - "type": "boolean" - }, - { - "description": "Minimum listing rating, from 0 through 5", - "in": "query", - "name": "min_rating", - "type": "number" - }, - { - "description": "Minimum listing review count, 0 or greater", - "in": "query", - "name": "min_review_count", - "type": "integer" - }, - { - "description": "Freshness filter, an ISO-8601 date (YYYY-MM-DD); only listings last seen on or after it are counted", - "in": "query", - "name": "active_since", - "type": "string" - }, - { - "description": "Minimum listings per cell; raises the small-cell suppression floor (never lowered below the built-in minimum)", - "in": "query", - "name": "min_listings", - "type": "integer" - }, - { - "description": "Sort enum: listings_desc, superhost_pct_desc, rating_desc, key_asc", - "enum": [ - "listings_desc", - "superhost_pct_desc", - "rating_desc", - "key_asc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Canonical Entertainment Weekly article URL", "in": "query", - "name": "page_size", - "type": "integer" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://ew.com/jean-smart-succeeds-diane-keaton-as-craig-t-nelson-love-interest-in-family-stone-sequel-12137476" } ], "produces": [ @@ -320420,7 +396902,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.airbnbMarketsSearchResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -320429,14 +396911,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -320447,113 +396929,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Airbnb markets dataset", + "summary": "Get Entertainment Weekly article content", "tags": [ - "Datasets" + "Entertainment Weekly" ] } }, - "/datasets/apple-maps-places/facets": { + "/ew/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns terms aggregation counts for the stored Apple Maps place directory. Facet enum: `category`, `country_code`, `state`, `city`, `price_symbol`, `catalog_country`. Accepts the same filter parameters as search to scope the aggregation. Use `facet=category` to discover the exact category names the `category` filter accepts.", - "operationId": "datasets-apple-maps-places-facets", + "description": "Returns one Entertainment Weekly contributor's public profile (name, job title, biography) and their recent articles from a canonical author URL.", + "operationId": "ew-author", "parameters": [ { - "description": "Facet enum: category, country_code, state, city, price_symbol, catalog_country", - "enum": [ - "category", - "country_code", - "state", - "city", - "price_symbol", - "catalog_country" - ], + "description": "Canonical ew.com/author/ or ew.com/- profile URL", "in": "query", - "name": "facet", + "name": "url", "required": true, "type": "string", - "x-example": "category" - }, - { - "description": "Full-text search over place name, category, city and address", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact Apple category name", - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Exact city filter", - "in": "query", - "name": "city", - "type": "string" - }, - { - "description": "Exact state/region filter", - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "ISO 3166-1 alpha-2 country filter", - "in": "query", - "name": "country_code", - "type": "string" - }, - { - "description": "Exact postal code filter", - "in": "query", - "name": "postal_code", - "type": "string" - }, - { - "description": "Minimum rating, from 0 through 5", - "in": "query", - "name": "min_rating", - "type": "number" - }, - { - "description": "Minimum number of ratings behind the rating", - "in": "query", - "name": "min_rating_count", - "type": "integer" - }, - { - "description": "Website presence filter", - "in": "query", - "name": "has_website", - "type": "boolean" - }, - { - "description": "Phone presence filter", - "in": "query", - "name": "has_phone", - "type": "boolean" - }, - { - "description": "Latitude for radius filtering, requires lon", - "in": "query", - "name": "lat", - "type": "number" - }, - { - "description": "Longitude for radius filtering, requires lat", - "in": "query", - "name": "lon", - "type": "number" - }, - { - "description": "Radius in meters, 1 through 50000; requires lat and lon", - "in": "query", - "name": "radius_m", - "type": "integer" + "x-example": "https://ew.com/author/dalton-ross/" } ], "produces": [ @@ -320563,7 +396956,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.applePlacesFacetResponseDoc" + "$ref": "#/definitions/publicnews.ewAuthorResponseDoc" } }, "400": { @@ -320572,14 +396965,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -320590,27 +396983,35 @@ "ApiKeyAuth": [] } ], - "summary": "Facet stored Apple Maps places", + "summary": "Get an Entertainment Weekly author profile", "tags": [ - "Datasets" + "Entertainment Weekly" ] } }, - "/datasets/apple-maps-places/items/{place_id}": { + "/ew/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one stored Apple Maps place by Apple place id from dataset id `apple-maps-places`. Accepts either the numeric place id (the `id` field) or the external place id that appears in maps.apple.com URLs (the `place_id` field, starting with `I`). A `rating` of `null` means Apple shows no rating for the place. `catalog_country` is the Apple storefront the place was found under, not its country; `country_code` is the place's own country. `first_seen_at` is when the directory first observed the place and `last_seen_at` the latest observation. Does not trigger live scraping; for a live Apple Maps lookup use the apple-maps-place endpoint.", - "operationId": "datasets-apple-maps-places-item", + "description": "Returns the latest Entertainment Weekly headlines for one section. `section` is required and must be one of `tv`, `movies`, `music`, `what-to-watch`, `binge`, `celebrity`, `awardist`, `books` or `theater`. Each item has its title and URL, plus an image when the card shows one.", + "operationId": "ew-headlines", "parameters": [ { - "description": "Apple place id: the numeric id or the external id starting with I", - "in": "path", - "name": "place_id", + "description": "Entertainment Weekly section slug", + "enum": [ + "tv", + "movies", + "music", + "what-to-watch", + "binge", + "celebrity", + "awardist", + "books", + "theater" + ], + "in": "query", + "name": "section", "required": true, "type": "string", - "x-example": "6435622567484707146" + "x-example": "tv" } ], "produces": [ @@ -320620,7 +397021,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.applePlaceResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -320629,20 +397030,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -320653,73 +397042,86 @@ "ApiKeyAuth": [] } ], - "summary": "Get a stored Apple Maps place", + "summary": "Get Entertainment Weekly section headlines", "tags": [ - "Datasets" + "Entertainment Weekly" ] } }, - "/datasets/apple-maps-places/nearby": { + "/ew/news": { "get": { - "consumes": [ + "description": "Returns the current Entertainment Weekly top stories. Each item has its title and URL, plus an image when the card shows one. Takes no parameters; use `ew-headlines` for a single section.", + "operationId": "ew-news", + "produces": [ "application/json" ], - "description": "Returns stored Apple Maps places within a radius of a point, nearest first, from dataset id `apple-maps-places`. lat, lon and radius_m are required. Unlike the live apple-maps-search endpoint (which returns at most 25 places per call), this pages through the stored directory with `distance_m` on every item. Coverage is observed, not complete. Does not trigger live scraping. Billing: this endpoint costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-apple-maps-places-nearby", - "parameters": [ - { - "description": "Center latitude, from -90 through 90", - "in": "query", - "name": "lat", - "required": true, - "type": "number", - "x-example": 37.7749 - }, - { - "description": "Center longitude, from -180 through 180", - "in": "query", - "name": "lon", - "required": true, - "type": "number", - "x-example": -122.4194 - }, - { - "description": "Search radius in meters, 1 through 50000", - "in": "query", - "name": "radius_m", - "required": true, - "type": "integer", - "x-example": 5000 - }, - { - "description": "Exact Apple category name", - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Minimum rating, from 0 through 5", - "in": "query", - "name": "min_rating", - "type": "number" + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Minimum number of ratings behind the rating", - "in": "query", - "name": "min_rating_count", - "type": "integer" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get Entertainment Weekly top stories", + "tags": [ + "Entertainment Weekly" + ] + } + }, + "/ew/sections": { + "get": { + "description": "Lists the nine Entertainment Weekly primary-navigation sections accepted by `ew-headlines`: `tv`, `movies`, `music`, `what-to-watch`, `binge`, `celebrity`, `awardist`, `books` and `theater`. Each entry has the `slug`, display `name` and section `url`.", + "operationId": "ew-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get Entertainment Weekly sections", + "tags": [ + "Entertainment Weekly" + ] + } + }, + "/expedia/activities/search": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Searches Expedia things to do (activities and tours) for a free-text `destination` between `start_date` and `end_date` (`YYYY-MM-DD`), all required in the JSON body. Optional `page`, `page_size` (1-50, default 20), `currency` (default `USD`) and `locale` (default `en_US`). Each activity has its id, name, duration, price, review score and label, review count, free-cancellation flag and thumbnail.", + "operationId": "expedia-activities-search", + "parameters": [ { - "description": "Page size, defaults to 20 and maxes at 100", - "in": "query", - "name": "page_size", - "type": "integer" + "description": "Activity search payload", + "in": "body", + "name": "option", + "required": true, + "schema": { + "$ref": "#/definitions/expedia.ActivitySearchOption" + } } ], "produces": [ @@ -320729,7 +397131,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.applePlacesSearchResponseDoc" + "$ref": "#/definitions/expedia.expediaActivitySearchResponseDoc" } }, "400": { @@ -320749,6 +397151,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -320756,122 +397164,28 @@ "ApiKeyAuth": [] } ], - "summary": "Find nearby stored Apple Maps places", + "summary": "Search Expedia activities", "tags": [ - "Datasets" + "Expedia" ] } }, - "/datasets/apple-maps-places/search": { - "get": { + "/expedia/flights/search": { + "post": { "consumes": [ "application/json" ], - "description": "Searches the stored Apple Maps place directory (dataset id `apple-maps-places`), built by tiling populated areas and running category searches over each tile. Each place has its Apple place id, name, category path, address, coordinates, phone, website, opening hours, rating and price level where Apple shows them. Coverage is observed, not complete: Apple answers each search with at most 25 places, so very dense areas can hold places the directory has not reached, and a place missing from the results is not evidence that it does not exist or has closed. A `rating` of `null` means Apple shows no rating for the place (never a zero-star score); ratings and rating counts come from third-party review partners that Apple shows (for example Yelp and Foursquare), so they are not comparable across places and a few places carry a rating with no count. Supports full-text `q`, `category`/`city`/`state`/`country_code`/`postal_code` filters, `min_rating`, `min_rating_count`, `has_website`, `has_phone`, `lat`/`lon`/`radius_m` radius filtering, and `sort` (relevance, rating_desc, review_count_desc, updated_at_desc, distance_asc). Does not trigger live scraping. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-apple-maps-places-search", + "description": "Searches Expedia flights between two IATA airport codes, `origin` and `destination`, on `departure_date` (`YYYY-MM-DD`). `return_date` is required for the default `round_trip`; `one_way` is the alternative `trip_type`. Optional `adults` (1-9, default 1), `cabin_class` (default `COACH`), `currency` and `locale`. Returns departing-leg offers only, with airline, times, duration, stops, route and price.", + "operationId": "expedia-flights-search", "parameters": [ { - "description": "Full-text search over place name, category, city and address; every term must match. Max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact Apple category name, max 128 characters, e.g. Coffee Shop; use facet=category to discover values", - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Exact city filter, max 128 characters", - "in": "query", - "name": "city", - "type": "string" - }, - { - "description": "Exact state/region filter, max 128 characters", - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "ISO 3166-1 alpha-2 country filter, e.g. US, GB, JP", - "in": "query", - "name": "country_code", - "type": "string" - }, - { - "description": "Exact postal code filter, max 128 characters", - "in": "query", - "name": "postal_code", - "type": "string" - }, - { - "description": "Minimum rating, from 0 through 5; any value above 0 excludes unrated places", - "in": "query", - "name": "min_rating", - "type": "number" - }, - { - "description": "Minimum number of ratings behind the rating, 0 or greater", - "in": "query", - "name": "min_rating_count", - "type": "integer" - }, - { - "description": "true keeps only places with a website; false keeps only places without one", - "in": "query", - "name": "has_website", - "type": "boolean" - }, - { - "description": "true keeps only places with a phone number; false keeps only places without one", - "in": "query", - "name": "has_phone", - "type": "boolean" - }, - { - "description": "Latitude for radius filtering or distance sort, requires lon", - "in": "query", - "name": "lat", - "type": "number" - }, - { - "description": "Longitude for radius filtering or distance sort, requires lat", - "in": "query", - "name": "lon", - "type": "number" - }, - { - "description": "Radius in meters, 1 through 50000; requires lat and lon", - "in": "query", - "name": "radius_m", - "type": "integer" - }, - { - "description": "Sort enum: relevance, rating_desc, review_count_desc, updated_at_desc, distance_asc. Defaults to relevance with q, otherwise updated_at_desc", - "enum": [ - "relevance", - "rating_desc", - "review_count_desc", - "updated_at_desc", - "distance_asc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", - "in": "query", - "name": "page_size", - "type": "integer" + "description": "Flights search payload", + "in": "body", + "name": "option", + "required": true, + "schema": { + "$ref": "#/definitions/expedia.FlightsSearchOption" + } } ], "produces": [ @@ -320881,7 +397195,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.applePlacesSearchResponseDoc" + "$ref": "#/definitions/expedia.expediaFlightsSearchResponseDoc" } }, "400": { @@ -320901,6 +397215,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -320908,76 +397228,28 @@ "ApiKeyAuth": [] } ], - "summary": "Search stored Apple Maps places", + "summary": "Search Expedia flights", "tags": [ - "Datasets" + "Expedia" ] } }, - "/datasets/apple-podcasts-shows/facets": { - "get": { + "/expedia/locations/search": { + "post": { "consumes": [ "application/json" ], - "description": "Returns value counts for one field of the Apple Podcasts shows dataset, chosen by the required `facet`: `genre`, `genre_id`, `country`, `content_advisory_rating` or `run_id`. The counts honour the search filters (`q`, `genre`, `country`, `min_track_count` and others) and cover the top 50 values.", - "operationId": "datasets-apple-podcasts-shows-facets", + "description": "Returns Expedia destination and property suggestions for a free-text `term` (required, 100 characters or fewer), with optional `currency` and `locale`. Each item has its type, geo type, primary and secondary text, full location name, coordinates, and `region_id`, `property_id` or `airport_code` where they exist.", + "operationId": "expedia-locations-search", "parameters": [ { - "description": "Facet enum: genre, genre_id, country, content_advisory_rating, run_id", - "enum": [ - "genre", - "genre_id", - "country", - "content_advisory_rating", - "run_id" - ], - "in": "query", - "name": "facet", + "description": "Location search payload", + "in": "body", + "name": "option", "required": true, - "type": "string", - "x-example": "genre" - }, - { - "description": "Full-text query over show title and artist name, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact primary-genre filter, max 128 characters", - "in": "query", - "name": "genre", - "type": "string" - }, - { - "description": "Exact Apple Podcasts genre id filter, max 128 characters", - "in": "query", - "name": "genre_id", - "type": "string" - }, - { - "description": "Exact storefront country filter, max 128 characters", - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Exact explicitness filter, max 128 characters", - "in": "query", - "name": "explicitness", - "type": "string" - }, - { - "description": "Exact crawl run-id filter, max 128 characters", - "in": "query", - "name": "run_id", - "type": "string" - }, - { - "description": "Minimum episode count (track_count), 0 or greater", - "in": "query", - "name": "min_track_count", - "type": "integer" + "schema": { + "$ref": "#/definitions/expedia.LocationSearchOption" + } } ], "produces": [ @@ -320987,7 +397259,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.applePodcastsShowsFacetResponseDoc" + "$ref": "#/definitions/expedia.expediaLocationSearchResponseDoc" } }, "400": { @@ -321007,6 +397279,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -321014,27 +397292,28 @@ "ApiKeyAuth": [] } ], - "summary": "Facet Apple Podcasts shows dataset", + "summary": "Search Expedia destinations", "tags": [ - "Datasets" + "Expedia" ] } }, - "/datasets/apple-podcasts-shows/items/{id}": { - "get": { + "/expedia/properties/detail": { + "post": { "consumes": [ "application/json" ], - "description": "Returns one Apple Podcasts show from the dataset by its numeric show `id`. The record has show and artist names, genres, country, episode count (`track_count`), release date, feed URL, artwork and Apple URL. An id not in the dataset returns 404.", - "operationId": "datasets-apple-podcasts-shows-item", + "description": "Returns a summary for one Expedia hotel by `property_id`, for the stay given by `check_in` and `check_out` (`YYYY-MM-DD`), all required in the JSON body. Optional `adults` (1-9, default 2), `currency` and `locale`. The response has the name, star rating, address, city, province, country code, coordinates, top amenities and VIP message.", + "operationId": "expedia-properties-detail", "parameters": [ { - "description": "Apple Podcasts numeric show id (e.g. 173001861)", - "in": "path", - "name": "id", + "description": "Property detail payload", + "in": "body", + "name": "option", "required": true, - "type": "string", - "x-example": "173001861" + "schema": { + "$ref": "#/definitions/expedia.PropertyDetailOption" + } } ], "produces": [ @@ -321044,7 +397323,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.applePodcastsShowResponseDoc" + "$ref": "#/definitions/expedia.expediaPropertyDetailResponseDoc" } }, "400": { @@ -321070,6 +397349,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -321077,86 +397362,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Apple Podcasts show from dataset", + "summary": "Expedia Stays property detail", "tags": [ - "Datasets" + "Expedia" ] } }, - "/datasets/apple-podcasts-shows/search": { - "get": { + "/expedia/properties/filters": { + "post": { "consumes": [ "application/json" ], - "description": "Searches the crawled public Apple Podcasts show catalog stored in a search index. One row per show. Discovered from a country x genre x collection chart grid and a search-term sweep — not a full catalog of every Apple Podcasts show. Sort enum: `relevance`, `popularity`, `track_count_desc`, `release_desc`, `title_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-apple-podcasts-shows-search", + "description": "Returns the sort and filter facets (amenities, star rating, neighborhood, nightly price range, sort options) available for a Stays search.", + "operationId": "expedia-properties-filters", "parameters": [ { - "description": "Full-text query over show title and artist name, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact primary-genre filter (e.g. Comedy, True Crime), max 128 characters", - "in": "query", - "name": "genre", - "type": "string" - }, - { - "description": "Exact Apple Podcasts genre id filter (e.g. 1303 for Comedy), max 128 characters", - "in": "query", - "name": "genre_id", - "type": "string" - }, - { - "description": "Exact storefront country filter (the crawl's discovery storefront, e.g. us, gb), max 128 characters", - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Exact explicitness filter as reported by Apple (e.g. explicit, cleaned), max 128 characters", - "in": "query", - "name": "explicitness", - "type": "string" - }, - { - "description": "Exact crawl run-id filter, max 128 characters", - "in": "query", - "name": "run_id", - "type": "string" - }, - { - "description": "Minimum episode count (track_count), 0 or greater", - "in": "query", - "name": "min_track_count", - "type": "integer" - }, - { - "description": "Sort enum: relevance, popularity, track_count_desc, release_desc, title_asc", - "enum": [ - "relevance", - "popularity", - "track_count_desc", - "release_desc", - "title_asc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", - "in": "query", - "name": "page_size", - "type": "integer" + "description": "Property filters payload", + "in": "body", + "name": "option", + "required": true, + "schema": { + "$ref": "#/definitions/expedia.PropertyFiltersOption" + } } ], "produces": [ @@ -321166,7 +397393,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.applePodcastsShowsSearchResponseDoc" + "$ref": "#/definitions/expedia.expediaPropertyFiltersResponseDoc" } }, "400": { @@ -321175,6 +397402,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -321186,6 +397419,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -321193,106 +397432,28 @@ "ApiKeyAuth": [] } ], - "summary": "Search Apple Podcasts shows dataset", + "summary": "Expedia search filters", "tags": [ - "Datasets" + "Expedia" ] } }, - "/datasets/apps-charts/search": { - "get": { + "/expedia/properties/reviews": { + "post": { "consumes": [ "application/json" ], - "description": "Searches daily top-chart snapshots from the iOS App Store and Google Play (one document per chart × snapshot × rank). With no `date` the latest snapshot is returned (today's chart); pair `app_id` with `sort=date_desc` for an app's rank over time. Store enum: `ios`, `android`. Chart type enum: `top_free`, `top_paid`, `top_grossing`, `new`. Platform enum (Apple device platforms, ios charts only): `phone`, `pad`, `mac`. Sort enum: `rank`, `rank_desc`, `date_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-apps-charts-search", + "description": "Returns the overall rating and a short set of guest reviews, typically around six, for one Expedia hotel. `property_id`, `check_in` and `check_out` (`YYYY-MM-DD`) are required in the JSON body; `adults` (1-9, default 2), `currency` and `locale` are optional. Each review has the reviewer name, date, rating label, message and verified flag. It is not the full review archive.", + "operationId": "expedia-properties-reviews", "parameters": [ { - "description": "Full-text query over chart-entry title and developer, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Store enum: ios, android", - "enum": [ - "ios", - "android" - ], - "in": "query", - "name": "store", - "type": "string" - }, - { - "description": "Chart enum: top_free, top_paid, top_grossing, new", - "enum": [ - "top_free", - "top_paid", - "top_grossing", - "new" - ], - "in": "query", - "name": "chart_type", - "type": "string" - }, - { - "description": "Apple device-platform filter, iOS charts only; see platform enum above", - "in": "query", - "name": "platform", - "type": "string" - }, - { - "description": "Raw store collection id filter (e.g. topgrossingapplications, GROSSING), max 128 characters", - "in": "query", - "name": "collection", - "type": "string" - }, - { - "description": "Store category/genre filter, max 128 characters; empty for the overall charts", - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Exact storefront country filter, max 128 characters", - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Exact app filter — iOS numeric track id or Android package; pair with sort=date_desc for rank history", - "in": "query", - "name": "app_id", - "type": "string" - }, - { - "description": "Snapshot date filter yyyy-MM-dd; defaults to the latest snapshot", - "in": "query", - "name": "date", - "type": "string" - }, - { - "description": "Sort enum: rank, rank_desc, date_desc", - "enum": [ - "rank", - "rank_desc", - "date_desc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", - "in": "query", - "name": "page_size", - "type": "integer" + "description": "Property reviews payload", + "in": "body", + "name": "option", + "required": true, + "schema": { + "$ref": "#/definitions/expedia.PropertyReviewsOption" + } } ], "produces": [ @@ -321302,7 +397463,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.chartsSearchResponseDoc" + "$ref": "#/definitions/expedia.expediaPropertyReviewsResponseDoc" } }, "400": { @@ -321311,6 +397472,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -321322,6 +397489,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -321329,77 +397502,28 @@ "ApiKeyAuth": [] } ], - "summary": "Search the app-charts dataset", + "summary": "Expedia Stays property guest reviews", "tags": [ - "Datasets" + "Expedia" ] } }, - "/datasets/apps-reviews/search": { - "get": { + "/expedia/properties/search": { + "post": { "consumes": [ "application/json" ], - "description": "Searches user reviews from the iOS App Store and Google Play (one document per review). Store enum: `ios`, `android`. Sort enum: `recent`, `score_desc`, `score_asc`, `helpful_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-apps-reviews-search", + "description": "Returns Expedia Stays (hotel) search results for a free-text destination and date range. Promotional banners and sponsored ad slots are dropped, so every returned property has an id and name.", + "operationId": "expedia-properties-search", "parameters": [ { - "description": "Full-text query over review text, title and author, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Store enum: ios, android", - "enum": [ - "ios", - "android" - ], - "in": "query", - "name": "store", - "type": "string" - }, - { - "description": "Exact app filter — iOS numeric track id or Android package, max 128 characters", - "in": "query", - "name": "app_id", - "type": "string" - }, - { - "description": "Exact storefront country filter, max 128 characters", - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Minimum star rating, 1 through 5", - "in": "query", - "name": "min_score", - "type": "integer" - }, - { - "description": "Sort enum: recent, score_desc, score_asc, helpful_desc", - "enum": [ - "recent", - "score_desc", - "score_asc", - "helpful_desc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", - "in": "query", - "name": "page_size", - "type": "integer" + "description": "Property search payload", + "in": "body", + "name": "option", + "required": true, + "schema": { + "$ref": "#/definitions/expedia.PropertySearchOption" + } } ], "produces": [ @@ -321409,7 +397533,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.reviewsSearchResponseDoc" + "$ref": "#/definitions/expedia.expediaPropertySearchResponseDoc" } }, "400": { @@ -321418,6 +397542,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -321429,6 +397559,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -321436,108 +397572,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search the app-reviews dataset", + "summary": "Search Expedia Stays properties", "tags": [ - "Datasets" + "Expedia" ] } }, - "/datasets/apps/search": { + "/expresstribune/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches resolved iOS App Store and Google Play apps stored in a search index. Store enum: `ios`, `android`, `both`. Platform enum (Apple device platforms, ios records only): `phone`, `pad`, `mac`, `tv`, `watch`, `vision`. Sort enum: `relevance`, `rating_desc`, `reviews_desc`, `installs_desc`, `updated_at_desc`, `popularity_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-apps-search", + "description": "Returns one Express Tribune story by `url`, which must be a canonical `tribune.com.pk/story//` link. The response has the title, description, section, authors, publication and update times, lead image URL, body `paragraphs` and a `paywalled` flag.", + "operationId": "expresstribune-article", "parameters": [ { - "description": "Full-text query over title, developer and category, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Store enum: ios, android, both", - "enum": [ - "ios", - "android", - "both" - ], - "in": "query", - "name": "store", - "type": "string" - }, - { - "collectionFormat": "csv", - "description": "Repeatable Apple device-platform filter (OR); see platform enum above", - "in": "query", - "items": { - "type": "string" - }, - "name": "platforms", - "type": "array" - }, - { - "description": "Exact app-store category filter, max 128 characters", - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Exact storefront country filter, max 128 characters", - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Exact developer/publisher name filter, max 128 characters", - "in": "query", - "name": "developer", - "type": "string" - }, - { - "description": "Filter by price; true keeps only free apps, false only paid", - "in": "query", - "name": "free", - "type": "boolean" - }, - { - "description": "Minimum store rating, 0 through 5", - "in": "query", - "name": "min_rating", - "type": "number" - }, - { - "description": "Minimum ratings/review count", - "in": "query", - "name": "min_reviews", - "type": "integer" - }, - { - "description": "Sort enum: relevance, rating_desc, reviews_desc, installs_desc, updated_at_desc, popularity_desc", - "enum": [ - "relevance", - "rating_desc", - "reviews_desc", - "installs_desc", - "updated_at_desc", - "popularity_desc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Canonical Express Tribune story URL", "in": "query", - "name": "page_size", - "type": "integer" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://tribune.com.pk/story/2632091/somali-pirates-kill-three-pakistanis-during-rescue-operation" } ], "produces": [ @@ -321547,7 +397599,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.appsSearchResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -321556,14 +397608,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -321574,159 +397626,32 @@ "ApiKeyAuth": [] } ], - "summary": "Search the apps-intelligence dataset", + "summary": "Get The Express Tribune article content", "tags": [ - "Datasets" + "The Express Tribune" ] } }, - "/datasets/bbb-businesses/facets": { + "/expresstribune/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the values of one field of the BBB businesses index (dataset id enum value `bbb-businesses`) with the number of records for each, honoring the same filters as search. Facet enum: `country`, `address_country`, `category`, `state`, `city`, `rating`, `accredited`, `entity_type`, `run_id`, `alert_title`, `has_alerts`. The `country` facet is parsed from profile URLs; `address_country` is derived from business addresses. Both enums are `us`, `ca`. Values come most frequent first, 50 per page by default; page through all of them with `limit` (up to 1000) and `offset` while `has_more` is true. The response also returns `total` (records matching the filters), `total_values` (distinct values) and `missing` (records with no value for the facet), so the counts can be checked against the total. Values of the `accredited` and `has_alerts` facets are `1` (true) and `0` (false). Use it to split a search that would exceed 10,000 records: `facet=state` lists every state and province, and `facet=city` with a `state` filter lists every city in it.", - "operationId": "datasets-bbb-businesses-facets", + "description": "Returns one page of story cards from a canonical public author archive. Page is 1-based; the publisher's Next link indicates another page.", + "operationId": "expresstribune-author", "parameters": [ { - "description": "Facet enum: country, address_country, category, state, city, rating, accredited, entity_type, run_id, alert_title, has_alerts", - "enum": [ - "country", - "address_country", - "category", - "state", - "city", - "rating", - "accredited", - "entity_type", - "run_id", - "alert_title", - "has_alerts" - ], + "description": "Canonical author archive URL", "in": "query", - "name": "facet", + "name": "url", "required": true, "type": "string", - "x-example": "category" - }, - { - "description": "Values per page, 1 to 1000, defaults to 50", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Values to skip, 0 or greater, defaults to 0; offset + limit must be <= 10000. Request offset + limit next while has_more is true", - "in": "query", - "name": "offset", - "type": "integer" - }, - { - "description": "Full-text match on the business name/category, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact category filter, e.g. Plumber (case-sensitive). Use the values returned by facet=category", - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Country filter, parsed from the profile URL (case-insensitive). Enum: us, ca", - "enum": [ - "us", - "ca" - ], - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Country filter derived from the business address, separate from the profile-URL country (case-insensitive). Enum: us, ca", - "enum": [ - "us", - "ca" - ], - "in": "query", - "name": "address_country", - "type": "string" - }, - { - "description": "Exact 2-letter state or province code as in the profile URL, e.g. tx (case-insensitive). Use the values returned by facet=state", - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "Exact city slug as in the profile URL, e.g. san-diego (case-insensitive). Use the values returned by facet=city with a state filter", - "in": "query", - "name": "city", - "type": "string" - }, - { - "description": "Exact letter-grade rating filter. Enum: A+, A, A-, B+, B, B-, C+, C, C-, D+, D, D-, F", - "enum": [ - "A+", - "A", - "A-", - "B+", - "B", - "B-", - "C+", - "C", - "C-", - "D+", - "D", - "D-", - "F" - ], - "in": "query", - "name": "rating", - "type": "string" - }, - { - "description": "Numeric floor against the denormalized rating rank (A+=12 down to F=0), e.g. 10 for 'A- and above'", - "in": "query", - "name": "min_rating_rank", - "type": "integer" - }, - { - "description": "Accreditation filter; true keeps only accredited businesses, false only the others", - "in": "query", - "name": "accredited", - "type": "boolean" - }, - { - "description": "BBB-alert filter; true keeps businesses whose profile carries at least one BBB alert, false keeps refreshed records with none", - "in": "query", - "name": "has_alerts", - "type": "boolean" - }, - { - "description": "Exact BBB alert title filter, e.g. Pattern of Complaint (case-sensitive). Use the values returned by facet=alert_title", - "in": "query", - "name": "alert_title", - "type": "string" + "x-example": "https://tribune.com.pk/author/7803/web-desk-2" }, { - "description": "Floor against total_complaints (BBB's three-year complaint count), 0 or greater", + "description": "1-based page number", "in": "query", - "name": "min_complaints", + "maximum": 1000, + "minimum": 1, + "name": "page", "type": "integer" - }, - { - "description": "Exact entity-type filter, e.g. Limited Liability Company (LLC) (case-sensitive). Use the values returned by facet=entity_type", - "in": "query", - "name": "entity_type", - "type": "string" - }, - { - "description": "Exact crawl run id filter, e.g. bbb-20260906. Use the values returned by facet=run_id", - "in": "query", - "name": "run_id", - "type": "string" } ], "produces": [ @@ -321736,7 +397661,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.bbbBusinessesFacetResponseDoc" + "$ref": "#/definitions/publicnews.expresstribuneAuthorResponseDoc" } }, "400": { @@ -321745,14 +397670,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -321763,27 +397688,59 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the BBB businesses dataset", + "summary": "Get an Express Tribune author's public archive", "tags": [ - "Datasets" + "The Express Tribune" ] } }, - "/datasets/bbb-businesses/items/{id}": { + "/expresstribune/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one business by id from dataset id enum value `bbb-businesses`. Returns 404 when the business is not in the index.", - "operationId": "datasets-bbb-businesses-item", + "description": "Returns headlines from one public RSS section. Some directory feeds are historical or infrequently updated; their publisher timestamps are preserved.", + "operationId": "expresstribune-headlines", "parameters": [ { - "description": "Business id (the - slug from the profile URL), e.g. 0825-1000223803", - "in": "path", - "name": "id", + "description": "The Express Tribune section slug", + "enum": [ + "home", + "latest", + "analysis", + "politics", + "cricket", + "movies", + "health", + "style", + "pakistan", + "sindh", + "punjab", + "balochistan", + "khyber-pakhtunkhwa", + "jammu-kashmir", + "gilgit-baltistan", + "business", + "world", + "sports", + "technology", + "games", + "gadget", + "life-style", + "art-books", + "music", + "film", + "fashion", + "gossip", + "tv", + "theatre", + "entertainment", + "opinion", + "editorial", + "blogs" + ], + "in": "query", + "name": "section", "required": true, "type": "string", - "x-example": "0825-1000223803" + "x-example": "home" } ], "produces": [ @@ -321793,7 +397750,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.bbbBusinessResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -321802,20 +397759,40 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } - }, - "429": { - "description": "Too Many Requests", + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The Express Tribune section headlines", + "tags": [ + "The Express Tribune" + ] + } + }, + "/expresstribune/news": { + "get": { + "description": "Returns current top stories from The Express Tribune's public RSS feed. Feed dates and publisher teasers are returned as published.", + "operationId": "expresstribune-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -321826,153 +397803,54 @@ "ApiKeyAuth": [] } ], - "summary": "Get a business from the BBB businesses dataset", + "summary": "Get The Express Tribune top stories", "tags": [ - "Datasets" + "The Express Tribune" ] } }, - "/datasets/bbb-businesses/search": { + "/expresstribune/sections": { "get": { + "description": "Returns every usable feed section listed in the publisher's RSS directory. talko is omitted because its official endpoint currently returns an empty response.", + "operationId": "expresstribune-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The Express Tribune sections", + "tags": [ + "The Express Tribune" + ] + } + }, + "/extract": { + "post": { "consumes": [ "application/json" ], - "description": "Searches the BBB (Better Business Bureau) businesses index (dataset id enum value `bbb-businesses`) — business profiles crawled from bbb.org's own search/category-browse pages: computed A+-F letter-grade rating, paid-accreditation status, category, contact info, business details, operating hours, and products/services. Complaints, full reviews, and the full \"reasons for rating\"/service-area detail are NOT embedded here; each record instead carries complaints_url/reviews_url/more_info_url pointing at the live bbb-business-complaints/bbb-business-reviews/bbb-business-more-info endpoints for on-demand lookup. rating enum: `A+`, `A`, `A-`, `B+`, `B`, `B-`, `C+`, `C`, `C-`, `D+`, `D`, `D-`, `F`. Each record also stores BBB's complaint and review counts (total_complaints and related fields) and the BBB alerts on the profile (has_alerts, alert_titles, alerts[] with full text), so businesses with complaints or with a given alert can be listed without calling the live endpoints; these fields are filled as records are re-crawled and are absent on a record not refreshed since they were added. `country` is parsed from the profile URL; `address_country` is derived separately from the business address. Both enums are `us`, `ca`. sort enum: `relevance`, `rating_desc`, `rating_asc`, `accredited_first`, `name_asc`, `years_in_business_desc`, `complaints_desc`. A query returns at most 10,000 records; to read more, split it with the values and counts from the facets endpoint (for example one request per state, then per city) so each part stays under that limit. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100); the item and facets endpoints cost 1.", - "operationId": "datasets-bbb-businesses-search", + "description": "Reads a public URL as clean Markdown, then returns data that strictly conforms to the supplied bounded JSON Schema. The response includes `truncated`, which is true when the page was too long and only its first part was used.", + "operationId": "extract", "parameters": [ { - "description": "Full-text match on the business name/category, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact category filter, e.g. Plumber (case-sensitive). Use the values returned by facets?facet=category", - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Country filter, parsed from the profile URL (case-insensitive). Enum: us, ca", - "enum": [ - "us", - "ca" - ], - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Country filter derived from the business address, separate from the profile-URL country (case-insensitive). Enum: us, ca", - "enum": [ - "us", - "ca" - ], - "in": "query", - "name": "address_country", - "type": "string" - }, - { - "description": "Exact 2-letter state or province code as in the profile URL, e.g. tx (case-insensitive). Use the values returned by facets?facet=state", - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "Exact city slug as in the profile URL, e.g. san-diego (case-insensitive). Use the values returned by facets?facet=city with a state filter; the same slug exists in several states, so send state with it", - "in": "query", - "name": "city", - "type": "string" - }, - { - "description": "Exact letter-grade rating filter. Enum: A+, A, A-, B+, B, B-, C+, C, C-, D+, D, D-, F", - "enum": [ - "A+", - "A", - "A-", - "B+", - "B", - "B-", - "C+", - "C", - "C-", - "D+", - "D", - "D-", - "F" - ], - "in": "query", - "name": "rating", - "type": "string" - }, - { - "description": "Numeric floor against the denormalized rating rank (A+=12 down to F=0), e.g. 10 for 'A- and above'", - "in": "query", - "name": "min_rating_rank", - "type": "integer" - }, - { - "description": "Accreditation filter; true keeps only accredited businesses, false only the others", - "in": "query", - "name": "accredited", - "type": "boolean" - }, - { - "description": "BBB-alert filter; true keeps businesses whose profile carries at least one BBB alert, false keeps refreshed records with none", - "in": "query", - "name": "has_alerts", - "type": "boolean" - }, - { - "description": "Exact BBB alert title filter, e.g. Pattern of Complaint. Use the values returned by facets?facet=alert_title", - "in": "query", - "name": "alert_title", - "type": "string" - }, - { - "description": "Floor against total_complaints (BBB's three-year complaint count), 0 or greater", - "in": "query", - "name": "min_complaints", - "type": "integer" - }, - { - "description": "Exact entity-type filter, e.g. Limited Liability Company (LLC) (case-sensitive). Use the values returned by facets?facet=entity_type", - "in": "query", - "name": "entity_type", - "type": "string" - }, - { - "description": "Exact crawl run id filter, e.g. bbb-20260906. Use the values returned by facets?facet=run_id", - "in": "query", - "name": "run_id", - "type": "string" - }, - { - "description": "Sort enum: relevance, rating_desc, rating_asc, accredited_first, name_asc, years_in_business_desc, complaints_desc", - "enum": [ - "relevance", - "rating_desc", - "rating_asc", - "accredited_first", - "name_asc", - "years_in_business_desc", - "complaints_desc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", - "in": "query", - "name": "page_size", - "type": "integer" + "description": "Extraction options", + "in": "body", + "name": "extractOption", + "required": true, + "schema": { + "$ref": "#/definitions/extract.Option" + } } ], "produces": [ @@ -321982,23 +397860,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.bbbBusinessesSearchResponseDoc" + "$ref": "#/definitions/extract.responseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid URL or schema", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Extraction is not configured", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "502": { + "description": "Fetch or model provider failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -322009,84 +397887,114 @@ "ApiKeyAuth": [] } ], - "summary": "Search the BBB businesses dataset", + "summary": "Extract schema-conforming JSON from a URL", "tags": [ - "Datasets" + "Web" ] } }, - "/datasets/bbb-scamtracker-reports/facets": { + "/facebook/marketplace/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns distribution counts over the stored BBB Scam Tracker reports (dataset id enum value `bbb-scamtracker-reports`), honoring the same filters as search. Counts are of stored reports. Facet enum: `scam_type`, `state`, `country`. country enum: `USA`, `CAN`.", - "operationId": "datasets-bbb-scamtracker-reports-facets", + "description": "Fetches Facebook Marketplace search or browse results for a location: listing id, title, price, city/state, and a thumbnail image per result. Only the first page Facebook's own server-rendered results page returns is available — Facebook's own further pagination requires a logged-in session and is out of scope. Omit both query and category to get the location's browse feed instead of running a search. minPrice, maxPrice, sortBy, daysSinceListed, and condition only take effect alongside a query or category (Facebook itself ignores them on the plain browse feed), except for the property_rentals category, which has its own always-filtered listing page. This endpoint can take noticeably longer than other search endpoints (up to roughly a minute in the slowest case) as it retries to get past an intermittent upstream condition; priced accordingly.", + "operationId": "facebook-marketplace-search", "parameters": [ { - "description": "Facet enum: scam_type, state, country", - "enum": [ - "scam_type", - "state", - "country" - ], + "description": "Facebook Marketplace location vanity slug", "in": "query", - "name": "facet", + "name": "location", "required": true, "type": "string", - "x-example": "scam_type" - }, - { - "description": "Full-text match on the report narrative and the business name used, max 256 characters", - "in": "query", - "name": "q", - "type": "string" + "x-example": "austin" }, { - "description": "Exact scam type filter", + "description": "Free-text search terms; omit (with category) for the location's browse feed", "in": "query", - "name": "scam_type", - "type": "string" + "name": "query", + "type": "string", + "x-example": "bike" }, { - "description": "2-letter state or province code of the targeted person", + "description": "Marketplace category", + "enum": [ + "vehicles", + "property_rentals", + "classifieds", + "apparel", + "electronics", + "entertainment", + "family", + "free", + "garden_outdoors", + "hobbies", + "home_goods", + "home_improvement", + "musical_instruments", + "office_supplies", + "pet_supplies", + "property_sale", + "sporting_goods", + "toys_games" + ], "in": "query", - "name": "state", - "type": "string" + "name": "category", + "type": "string", + "x-example": "vehicles" }, { - "description": "Country of the targeted person. Enum: USA, CAN", - "enum": [ - "USA", - "CAN" - ], + "description": "Minimum price in whole currency units; requires query or category", "in": "query", - "name": "country", - "type": "string" + "name": "min_price", + "type": "integer", + "x-example": 20 }, { - "description": "Inclusive report-date floor, YYYY-MM-DD", + "description": "Maximum price in whole currency units; requires query or category", "in": "query", - "name": "date_from", - "type": "string" + "name": "max_price", + "type": "integer", + "x-example": 500 }, { - "description": "Inclusive report-date ceiling, YYYY-MM-DD", + "description": "Result order; requires query or category", + "enum": [ + "best_match", + "distance_ascend", + "creation_time_descend", + "price_ascend", + "price_descend" + ], "in": "query", - "name": "date_to", - "type": "string" + "name": "sort_by", + "type": "string", + "x-example": "price_ascend" }, { - "description": "Floor against the reported dollar loss, 0 or greater", + "description": "Restrict to listings posted within this many days; requires query or category", + "enum": [ + 1, + 7, + 30 + ], "in": "query", - "name": "min_loss", - "type": "number" + "name": "days_since_listed", + "type": "integer", + "x-example": 7 }, { - "description": "Ceiling against the reported dollar loss, 0 or greater", + "description": "Comma-separated listing conditions; requires query or category", + "enum": [ + "new", + "used_like_new", + "used_good", + "used_fair" + ], "in": "query", - "name": "max_loss", - "type": "number" + "name": "condition", + "type": "string", + "x-example": "new,used_like_new" } ], "produces": [ @@ -322096,23 +398004,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.scamTrackerReportsFacetResponseDoc" + "$ref": "#/definitions/facebook.marketplaceSearchResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Bad request — missing location, an unrecognized enum value, an invalid price range, or a filter given without query/category", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Location not recognized by Facebook Marketplace", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error while fetching search results", "schema": { "$ref": "#/definitions/app.Response" } @@ -322123,27 +398031,27 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the BBB Scam Tracker reports dataset", + "summary": "Search Facebook Marketplace", "tags": [ - "Datasets" + "Facebook" ] } }, - "/datasets/bbb-scamtracker-reports/items/{id}": { + "/facebook/{page}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one stored report by id from dataset id enum value `bbb-scamtracker-reports`. Returns 404 when the report is not in the archive; the live bbb-scamtracker-detail endpoint can still fetch it from BBB.", - "operationId": "datasets-bbb-scamtracker-reports-item", + "description": "Fetches public data about a Facebook Page given its page ID, vanity name, or full page URL: name, follower/like counts, intro, category, business hours/price range, review count, and any public contact details (email, phone, address, website, WhatsApp number) exposed on the Page's About tab.", + "operationId": "facebook-page", "parameters": [ { - "description": "BBB Scam Tracker report id (numeric), e.g. 1397968", + "description": "Facebook Page reference: vanity name, handle, profile.php id, or full Facebook URL", "in": "path", - "name": "id", + "name": "page", "required": true, "type": "string", - "x-example": "1397968" + "x-example": "nike" } ], "produces": [ @@ -322153,29 +398061,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.scamTrackerReportResponseDoc" + "$ref": "#/definitions/facebook.pageResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Bad request — missing or invalid page reference", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", + "description": "Page not found or unavailable", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error while fetching page data", "schema": { "$ref": "#/definitions/app.Response" } @@ -322186,99 +398088,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a report from the BBB Scam Tracker reports dataset", + "summary": "Get Facebook page details", "tags": [ - "Datasets" + "Facebook" ] } }, - "/datasets/bbb-scamtracker-reports/search": { + "/faceit/ban-reasons": { "get": { "consumes": [ "application/json" ], - "description": "Searches the stored archive of public consumer scam reports from bbb.org/scamtracker (dataset id enum value `bbb-scamtracker-reports`), one record per report: narrative, scam type, reported dollar loss, targeted and scammer locations, the business name used, and the report date. Unlike the live bbb-scamtracker-search endpoint, results are not cut off at BBB's 10,000-result limit and any date range can be read page by page. Reports are unreviewed consumer allegations; names and contact details in them are as reported, not verified. The archive is still being filled, so `total` is the number of stored reports matching the filters, not BBB's own count. country enum: `USA`, `CAN`. sort enum: `relevance`, `reported_desc`, `reported_asc`, `loss_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100); the item and facets endpoints cost 1.", - "operationId": "datasets-bbb-scamtracker-reports-search", - "parameters": [ - { - "description": "Full-text match on the report narrative and the business name used, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact scam type filter, e.g. Online Purchase. Use the values returned by facets?facet=scam_type", - "in": "query", - "name": "scam_type", - "type": "string" - }, - { - "description": "2-letter state or province code of the targeted person, e.g. TX or QC", - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "Country of the targeted person. Enum: USA, CAN", - "enum": [ - "USA", - "CAN" - ], - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Inclusive report-date floor, YYYY-MM-DD", - "in": "query", - "name": "date_from", - "type": "string", - "x-example": "2023-01-01" - }, - { - "description": "Inclusive report-date ceiling, YYYY-MM-DD", - "in": "query", - "name": "date_to", - "type": "string", - "x-example": "2023-01-31" - }, - { - "description": "Floor against the reported dollar loss, 0 or greater; reports with an unknown loss are excluded", - "in": "query", - "name": "min_loss", - "type": "number" - }, - { - "description": "Ceiling against the reported dollar loss, 0 or greater; reports with an unknown loss are excluded", - "in": "query", - "name": "max_loss", - "type": "number" - }, - { - "description": "Sort enum: relevance, reported_desc, reported_asc, loss_desc", - "enum": [ - "relevance", - "reported_desc", - "reported_asc", - "loss_desc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", - "in": "query", - "name": "page_size", - "type": "integer" - } - ], + "description": "Returns the closed ban-reason enum the ban-list filter accepts. The upstream names these values in its own validation error, so they are server-validated. Pass one as the reason parameter of faceit-banlist to filter the ban list.", + "operationId": "faceit-ban-reasons", "produces": [ "application/json" ], @@ -322286,7 +398108,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.scamTrackerReportsSearchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.BanReasonsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -322295,14 +398129,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -322313,134 +398153,39 @@ "ApiKeyAuth": [] } ], - "summary": "Search the BBB Scam Tracker reports dataset", + "summary": "FACEIT ban reason enum", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/boxofficemojo/facets": { + "/faceit/banlist": { "get": { "consumes": [ "application/json" ], - "description": "Returns terms-aggregation counts for one facet of the Box Office Mojo dataset, scoped to the same filters as search. Facet enum: `gross_band`, `years_active`, `lifetime_year`, `franchise_names`, `brand_names`, `genre_names`, `hydrated`, `is_billion_dollar`, `in_lifetime_top_1000_ww`. gross_band enum: `under_50m`, `50_100m`, `100_250m`, `250_500m`, `500m_1b`, `over_1b`.", - "operationId": "datasets-boxofficemojo-facets", + "description": "Returns one page of the public FACEIT ban list: ban id, banned user id and nickname, avatar, country, reason, start and end timestamps and duration. Paging uses the upstream's size parameter (5-100, default 25) and the opaque cursor returned with the previous page; pass it back to advance. A cursor from the upstream is echoed in the response.", + "operationId": "faceit-banlist", "parameters": [ { - "description": "Facet enum: gross_band, years_active, lifetime_year, franchise_names, brand_names, genre_names, hydrated, is_billion_dollar, in_lifetime_top_1000_ww", - "enum": [ - "gross_band", - "years_active", - "lifetime_year", - "franchise_names", - "brand_names", - "genre_names", - "hydrated", - "is_billion_dollar", - "in_lifetime_top_1000_ww" - ], - "in": "query", - "name": "facet", - "required": true, - "type": "string", - "x-example": "gross_band" - }, - { - "description": "Full-text query, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact title id (IMDb tt… id used by Box Office Mojo), max 32 characters", - "in": "query", - "name": "title_id", - "type": "string" - }, - { - "description": "Year in years_active", - "in": "query", - "name": "year", - "type": "integer" - }, - { - "description": "Primary lifetime chart year", - "in": "query", - "name": "lifetime_year", - "type": "integer" - }, - { - "description": "Gross band filter", - "in": "query", - "name": "gross_band", - "type": "string" - }, - { - "description": "Franchise name filter, max 128 characters", - "in": "query", - "name": "franchise", - "type": "string" - }, - { - "description": "Brand name filter, max 128 characters", + "description": "Optional page size, 5-100; default 25.", "in": "query", - "name": "brand", - "type": "string" + "name": "size", + "type": "integer", + "x-example": 25 }, { - "description": "Genre name filter, max 128 characters", + "description": "Optional opaque cursor copied from the previous response; omit for the first page.", "in": "query", - "name": "genre", + "name": "cursor", "type": "string" }, { - "description": "Only titles in the lifetime worldwide top 1000 chart", - "in": "query", - "name": "in_lifetime_top_1000", - "type": "boolean" - }, - { - "description": "Minimum lifetime worldwide gross", - "in": "query", - "name": "min_worldwide", - "type": "integer" - }, - { - "description": "Maximum lifetime worldwide gross", - "in": "query", - "name": "max_worldwide", - "type": "integer" - }, - { - "description": "Minimum lifetime domestic gross", - "in": "query", - "name": "min_domestic", - "type": "integer" - }, - { - "description": "Minimum foreign share of worldwide gross, 0 through 1", - "in": "query", - "name": "min_foreign_share", - "type": "number" - }, - { - "description": "Maximum domestic share of worldwide gross, 0 through 1", - "in": "query", - "name": "max_domestic_share", - "type": "number" - }, - { - "description": "Hydrated filter", - "in": "query", - "name": "hydrated", - "type": "boolean" - }, - { - "description": "Only titles with worldwide gross of at least $1B", + "description": "Optional ban reason, one of: ban evasion, cheating, multiple accounts, platform abuse, smurfing, toxicity, playing on a smurf (see faceit-ban-reasons).", "in": "query", - "name": "is_billion_dollar", - "type": "boolean" + "name": "reason", + "type": "string", + "x-example": "toxicity" } ], "produces": [ @@ -322450,7 +398195,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.boxOfficeMojoFacetResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.BanlistResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -322459,14 +398216,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -322477,29 +398240,19 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the Box Office Mojo dataset", + "summary": "FACEIT public ban list page", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/boxofficemojo/items/{title_id}": { + "/faceit/banlist-stats": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Box Office Mojo dataset record by title id (IMDb `tt…` id used on Box Office Mojo title pages), including lifetime grosses, year history, release groups and market grosses when hydrated.", - "operationId": "datasets-boxofficemojo-item", - "parameters": [ - { - "description": "Title id (IMDb tt… id), e.g. tt0499549", - "in": "path", - "name": "title_id", - "required": true, - "type": "string", - "x-example": "tt0499549" - } - ], + "description": "Returns the aggregate FACEIT ban counters: bans in the last 12 months and bans in the last 30 days. The upstream publishes no per-reason or per-game breakdown on this anonymous surface.", + "operationId": "faceit-banlist-stats", "produces": [ "application/json" ], @@ -322507,7 +398260,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.boxOfficeMojoItemResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.BanlistStatsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -322528,8 +398293,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -322540,150 +398305,61 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Box Office Mojo title from the dataset", + "summary": "FACEIT ban list aggregate counters", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/boxofficemojo/search": { + "/faceit/best-clips": { "get": { "consumes": [ "application/json" ], - "description": "Searches theatrical box-office records from Box Office Mojo charts and title pages. Filter by title id, year, franchise/brand/genre, gross band, lifetime top-1000 membership, hydration status, and worldwide/domestic gross ranges. Sort enum: `relevance`, `worldwide_desc`, `domestic_desc`, `peak_worldwide_desc`, `lifetime_rank_asc`, `year_desc`, `year_asc`. gross_band enum: `under_50m`, `50_100m`, `100_250m`, `250_500m`, `500m_1b`, `over_1b`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-boxofficemojo-search", + "description": "Returns a player's best Allstar clips inside an inclusive time window: the same clip row shape as faceit-clips, ordered by the upstream best-clip ranking. Both from and to are required RFC3339 timestamps. Only cs2 has Allstar clips; a window with no clips is a valid empty list. The upstream ignores offset on this route, so no offset parameter is exposed.", + "operationId": "faceit-best-clips", "parameters": [ { - "description": "Full-text query over title and taxonomy names, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact title id (IMDb tt… id used by Box Office Mojo), max 32 characters", - "in": "query", - "name": "title_id", - "type": "string" - }, - { - "description": "Year that must appear in years_active", - "in": "query", - "name": "year", - "type": "integer" - }, - { - "description": "Primary lifetime chart year", - "in": "query", - "name": "lifetime_year", - "type": "integer" - }, - { - "description": "Gross band enum: under_50m, 50_100m, 100_250m, 250_500m, 500m_1b, over_1b", + "description": "Game slug; only cs2 has Allstar clips.", "enum": [ - "under_50m", - "50_100m", - "100_250m", - "250_500m", - "500m_1b", - "over_1b" + "cs2" ], "in": "query", - "name": "gross_band", - "type": "string" - }, - { - "description": "Franchise name filter, max 128 characters", - "in": "query", - "name": "franchise", - "type": "string" - }, - { - "description": "Brand name filter, max 128 characters", - "in": "query", - "name": "brand", - "type": "string" - }, - { - "description": "Genre name filter, max 128 characters", - "in": "query", - "name": "genre", - "type": "string" - }, - { - "description": "Only titles in the lifetime worldwide top 1000 chart", - "in": "query", - "name": "in_lifetime_top_1000", - "type": "boolean" - }, - { - "description": "Only titles with hydrated release groups and market grosses", - "in": "query", - "name": "hydrated", - "type": "boolean" - }, - { - "description": "Only titles with worldwide gross of at least $1B", - "in": "query", - "name": "is_billion_dollar", - "type": "boolean" - }, - { - "description": "Minimum lifetime worldwide gross in whole USD dollars", - "in": "query", - "name": "min_worldwide", - "type": "integer" - }, - { - "description": "Maximum lifetime worldwide gross in whole USD dollars", - "in": "query", - "name": "max_worldwide", - "type": "integer" - }, - { - "description": "Minimum lifetime domestic gross in whole USD dollars", - "in": "query", - "name": "min_domestic", - "type": "integer" - }, - { - "description": "Minimum foreign share of worldwide gross, 0 through 1", - "in": "query", - "name": "min_foreign_share", - "type": "number" + "name": "game", + "required": true, + "type": "string", + "x-example": "cs2" }, { - "description": "Maximum domestic share of worldwide gross, 0 through 1", + "description": "FACEIT user UUID.", "in": "query", - "name": "max_domestic_share", - "type": "number" + "name": "user_id", + "required": true, + "type": "string", + "x-example": "74df0e6b-5b41-42d7-93b4-05dc78b9a699" }, { - "description": "Sort enum: relevance, worldwide_desc, domestic_desc, peak_worldwide_desc, lifetime_rank_asc, year_desc, year_asc", - "enum": [ - "relevance", - "worldwide_desc", - "domestic_desc", - "peak_worldwide_desc", - "lifetime_rank_asc", - "year_desc", - "year_asc" - ], + "description": "Inclusive lower bound as an RFC3339 timestamp.", "in": "query", - "name": "sort", - "type": "string" + "name": "from", + "required": true, + "type": "string", + "x-example": "2026-01-01T00:00:00Z" }, { - "description": "Page number, defaults to 1", + "description": "Inclusive upper bound as an RFC3339 timestamp.", "in": "query", - "name": "page", - "type": "integer" + "name": "to", + "required": true, + "type": "string", + "x-example": "2026-11-10T00:00:00Z" }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Optional page size, 1-100; default 10.", "in": "query", - "name": "page_size", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -322693,7 +398369,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.boxOfficeMojoSearchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.BestClipsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -322702,14 +398390,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -322720,38 +398414,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Box Office Mojo dataset", + "summary": "FACEIT player best clips in a time window", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/chrome-extensions/changes": { + "/faceit/championship": { "get": { - "description": "Lists recent change observations across Chrome Web Store items in the dataset, optionally for one `change_type`: `users`, `rating`, `rating_count`, `version`, `developer`, `permissions`, `privacy` or `status`. Returns up to `limit` (default 100, max 500), each with the item's name, category, developer, observed time and the figures that changed.", - "operationId": "datasets-chrome-extensions-changes", + "consumes": [ + "application/json" + ], + "description": "Returns one FACEIT championship: identity and organizer, status and type, region, slots and participant counts, subscription/check-in/start timestamps (epoch milliseconds), entry checks, substitution policy, normalized match settings, schedule and groups, the organizer's FFA leaderboard points and role names. Championship ids are discovered through faceit-championship-search. An unknown id answers 404.", + "operationId": "faceit-championship", "parameters": [ { - "description": "Change type enum: users, rating, rating_count, version, developer, permissions, privacy, status", - "enum": [ - "users", - "rating", - "rating_count", - "version", - "developer", - "permissions", - "privacy", - "status" - ], - "in": "query", - "name": "change_type", - "type": "string" - }, - { - "description": "Maximum observations, default 100, max 500", + "description": "Championship UUID from faceit-championship-search.", "in": "query", - "name": "limit", - "type": "integer" + "name": "id", + "required": true, + "type": "string", + "x-example": "9888a3f4-e292-4c3a-a511-15d5d2fb112b" } ], "produces": [ @@ -322761,7 +398444,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.chromeExtensionChangesResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.ChampionshipResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -322770,14 +398465,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -322788,141 +398489,57 @@ "ApiKeyAuth": [] } ], - "summary": "Get recent Chrome Web Store item changes", + "summary": "FACEIT championship detail by id", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/chrome-extensions/facets": { + "/faceit/championship-bracket": { "get": { - "description": "Returns aggregation buckets. Facet enum: `item_type`, `category`, `developer`, `developer_email`, `manifest_version`, `permission`, `status`, `collects_data`, `has_broad_host_access`. Item type enum: `extension`, `theme`, `app`, `unknown`. Search sort, status and manifest-version enums match the search endpoint.", - "operationId": "datasets-chrome-extensions-facets", + "consumes": [ + "application/json" + ], + "description": "Returns one group and round of a championship bracket: group number, delimiter, status, total and the bracket match pairings with each side's player id and faction number. The group and round parameters are required by the upstream; start and end bound the returned match range. An unknown championship answers 404.", + "operationId": "faceit-championship-bracket", "parameters": [ { - "description": "Facet enum: item_type, category, developer, developer_email, manifest_version, permission, status, collects_data, has_broad_host_access", - "enum": [ - "item_type", - "category", - "developer", - "developer_email", - "manifest_version", - "permission", - "status", - "collects_data", - "has_broad_host_access" - ], + "description": "Championship UUID from faceit-championship-search.", "in": "query", - "name": "facet", + "name": "id", "required": true, "type": "string", - "x-example": "item_type" - }, - { - "description": "Full-text query", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Item type enum: extension, theme, app, unknown", - "enum": [ - "extension", - "theme", - "app", - "unknown" - ], - "in": "query", - "name": "item_type", - "type": "string" - }, - { - "description": "Exact category", - "in": "query", - "name": "category", - "type": "string" + "x-example": "9888a3f4-e292-4c3a-a511-15d5d2fb112b" }, { - "description": "Exact developer", - "in": "query", - "name": "developer", - "type": "string" - }, - { - "description": "Exact developer email", - "in": "query", - "name": "developer_email", - "type": "string" - }, - { - "description": "Exact permission", - "in": "query", - "name": "permission", - "type": "string" - }, - { - "description": "Status enum: active, removed", - "enum": [ - "active", - "removed" - ], - "in": "query", - "name": "status", - "type": "string" - }, - { - "description": "Manifest version enum: 2, 3", - "enum": [ - 2, - 3 - ], - "in": "query", - "name": "manifest_version", - "type": "integer" - }, - { - "description": "Data-collection filter", - "in": "query", - "name": "collects_data", - "type": "boolean" - }, - { - "description": "Broad-host-access filter", - "in": "query", - "name": "has_broad_host_access", - "type": "boolean" - }, - { - "description": "Minimum users", + "description": "Group number.", "in": "query", - "name": "min_users", - "type": "integer" + "name": "group", + "required": true, + "type": "integer", + "x-example": 1 }, { - "description": "Minimum rating", + "description": "Round number.", "in": "query", - "name": "min_rating", - "type": "number" + "name": "round", + "required": true, + "type": "integer", + "x-example": 1 }, { - "description": "Minimum rating count", + "description": "Optional non-negative start offset.", "in": "query", - "name": "min_rating_count", - "type": "integer" + "name": "start", + "type": "integer", + "x-example": 0 }, { - "description": "Sort enum: relevance, users_desc, rating_desc, reviews_desc, updated_desc, trending_desc", - "enum": [ - "relevance", - "users_desc", - "rating_desc", - "reviews_desc", - "updated_desc", - "trending_desc" - ], + "description": "Optional end offset.", "in": "query", - "name": "sort", - "type": "string" + "name": "end", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -322932,7 +398549,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.chromeExtensionFacetResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.ChampionshipBracketResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -322941,14 +398570,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -322959,42 +398594,41 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the Chrome Web Store dataset", + "summary": "FACEIT championship group bracket by group and round", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/chrome-extensions/history/{id}": { + "/faceit/championship-participants": { "get": { - "description": "Returns the change history of one Chrome Web Store item by `id`. A point is recorded only when a tracked field changed, with users, rating, version, permissions and the list of `change_types`. Narrow with `from` and `to` (YYYY-MM-DD); `limit` defaults to 365, max 1000.", - "operationId": "datasets-chrome-extensions-history", + "consumes": [ + "application/json" + ], + "description": "Returns one page of a championship's participants: membership id, player identity (id, nickname, avatar, country and game list), the championship reference, role names and the participant's championship status. The upstream caps the page size at 50. Paging uses limit and offset, and the response echoes the upstream start and end markers.", + "operationId": "faceit-championship-participants", "parameters": [ { - "description": "Chrome Web Store item id", - "in": "path", + "description": "Championship UUID from faceit-championship-search.", + "in": "query", "name": "id", "required": true, "type": "string", - "x-example": "cjpalhdlnbpafiamejdnhcphjbkeiagm" - }, - { - "description": "Inclusive start date, YYYY-MM-DD", - "in": "query", - "name": "from", - "type": "string" + "x-example": "9888a3f4-e292-4c3a-a511-15d5d2fb112b" }, { - "description": "Inclusive end date, YYYY-MM-DD", + "description": "Optional page size, 1-50; default 20.", "in": "query", - "name": "to", - "type": "string" + "name": "limit", + "type": "integer", + "x-example": 20 }, { - "description": "Maximum points, default 365, max 1000", + "description": "Optional non-negative row offset.", "in": "query", - "name": "limit", - "type": "integer" + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -323004,7 +398638,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.chromeExtensionHistoryResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.ChampionshipParticipantsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -323013,14 +398659,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -323031,24 +398683,115 @@ "ApiKeyAuth": [] } ], - "summary": "Get Chrome Web Store item history", + "summary": "FACEIT championship participants page", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/chrome-extensions/items/{id}": { + "/faceit/championship-search": { "get": { - "description": "Returns the stored record of one Chrome Web Store extension, theme or app by its 32-character `id`. It has name, `item_type`, category, users, rating, version, developer and disclosed email, declared permissions, host access flags, privacy disclosures and screenshots, taken from the latest observation.", - "operationId": "datasets-chrome-extensions-item", + "consumes": [ + "application/json" + ], + "description": "Returns leaderboard discovery rows, which are the anonymous way to discover championship ids: leaderboard identity, entity id/type, game and region, season, group/round/bracket placement, ranking type, scoring fields, dates, status and prize metadata. Defaults to ongoing championships. status is a closed enum (see faceit-leaderboard-statuses); entity_type and type are forwarded as filters and are not server-validated. The upstream caps a page at 100 rows.", + "operationId": "faceit-championship-search", "parameters": [ { - "description": "Chrome Web Store item id", - "in": "path", - "name": "id", - "required": true, + "description": "Optional entity type; defaults to championship. Documented values: championship, hub, tournament, league, club, matchmaking.", + "in": "query", + "name": "entity_type", + "type": "string", + "x-example": "championship" + }, + { + "description": "Optional leaderboard type; defaults to championship and normally equals entity_type.", + "in": "query", + "name": "type", + "type": "string", + "x-example": "championship" + }, + { + "description": "Optional status, one of ONGOING, UPCOMING or FINISHED; defaults to ONGOING.", + "enum": [ + "ONGOING", + "UPCOMING", + "FINISHED" + ], + "in": "query", + "name": "status", + "type": "string", + "x-example": "ONGOING" + }, + { + "description": "Optional leaderboard subtype filter.", + "in": "query", + "name": "subtype", + "type": "string" + }, + { + "description": "Optional two-letter ISO country code such as DE.", + "in": "query", + "name": "country", + "type": "string", + "x-example": "DE" + }, + { + "description": "Optional game slug, one of the values returned by faceit-games.", + "enum": [ + "cs2", + "csgo", + "ow2", + "valorant", + "pubg", + "tf2", + "krunker", + "pubgmobile", + "apex", + "fortnite", + "wow", + "brawl_stars", + "insidia", + "dota2", + "hearthstone", + "wildrift", + "clash_royale", + "smite", + "lol_NA", + "lol_EUW", + "lol_EUN", + "overwatch_EU", + "wot_EU", + "wot_RU", + "rainbow_6", + "csdz", + "battalion" + ], + "in": "query", + "name": "game", "type": "string", - "x-example": "cjpalhdlnbpafiamejdnhcphjbkeiagm" + "x-example": "cs2,csgo,ow2,valorant,pubg,tf2,krunker,pubgmobile,apex,fortnite,wow,brawl_stars,insidia,dota2,hearthstone,wildrift,clash_royale,smite,lol_NA,lol_EUW,lol_EUN,overwatch_EU,wot_EU,wot_RU,rainbow_6,csdz,battalion" + }, + { + "description": "Optional drops filter.", + "in": "query", + "name": "has_drops", + "type": "boolean", + "x-example": true + }, + { + "description": "Optional page size, 1-100; default 25.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + }, + { + "description": "Optional non-negative row offset.", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -323058,7 +398801,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.chromeExtensionItemResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.ChampionshipSearchResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -323079,8 +398834,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -323091,33 +398846,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Chrome Web Store dataset item", + "summary": "Discover FACEIT championships and leaderboards", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/chrome-extensions/metrics": { + "/faceit/clip": { "get": { - "description": "Returns chart-ready coverage, adoption, rating, permission, privacy and recent-change aggregates for the stored Chrome Web Store dataset. Days enum: `7`, `30`, `90`.", - "operationId": "datasets-chrome-extensions-metrics", + "consumes": [ + "application/json" + ], + "description": "Returns one Allstar clip by id: title, view count, embed URL, thumbnail, linked FACEIT match id and match instance, processing status, demo filename, clip reason, map and round. Clip ids come from faceit-clips. An unknown id answers 404.", + "operationId": "faceit-clip", "parameters": [ { - "description": "Recent-change window enum: 7, 30, 90; default 30", - "enum": [ - 7, - 30, - 90 - ], - "in": "query", - "name": "days", - "type": "integer" - }, - { - "description": "Top category and permission buckets, default 10, min 5, max 25", + "description": "24-character clip id from faceit-clips.", "in": "query", - "name": "limit", - "type": "integer" + "name": "id", + "required": true, + "type": "string", + "x-example": "6a57e63f8d9a5a0549f503c8" } ], "produces": [ @@ -323127,7 +398876,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.chromeExtensionMetricsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.ClipResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -323136,14 +398897,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -323154,134 +398921,52 @@ "ApiKeyAuth": [] } ], - "summary": "Get Chrome Web Store dataset metrics", + "summary": "FACEIT Allstar clip detail", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/chrome-extensions/search": { + "/faceit/clips": { "get": { - "description": "Searches stored Chrome Web Store item snapshots. Item type enum: `extension`, `theme`, `app`, `unknown`. Sort enum: `relevance`, `users_desc`, `rating_desc`, `reviews_desc`, `updated_desc`, `trending_desc`. Status enum: `active`, `removed`. Manifest version enum: `2`, `3`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-chrome-extensions-search", + "consumes": [ + "application/json" + ], + "description": "Returns one page of a player's Allstar clips: clip id, title, view count, embed URL, thumbnail, linked FACEIT match id and match instance, processing status, map, round and creation/update timestamps. Only the cs2 game has Allstar clips; every other game is rejected by the upstream as unknown. Paging uses limit and offset and the response reports has_more. An unknown player is a valid empty page.", + "operationId": "faceit-clips", "parameters": [ { - "description": "Full-text query, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Item type enum: extension, theme, app, unknown", - "enum": [ - "extension", - "theme", - "app", - "unknown" - ], - "in": "query", - "name": "item_type", - "type": "string" - }, - { - "description": "Exact Chrome Web Store category", - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Exact displayed developer name", - "in": "query", - "name": "developer", - "type": "string" - }, - { - "description": "Exact disclosed developer email", - "in": "query", - "name": "developer_email", - "type": "string" - }, - { - "description": "Exact declared permission", - "in": "query", - "name": "permission", - "type": "string" - }, - { - "description": "Status enum: active, removed", - "enum": [ - "active", - "removed" - ], - "in": "query", - "name": "status", - "type": "string" - }, - { - "description": "Manifest version enum: 2, 3", + "description": "Game slug; only cs2 has Allstar clips.", "enum": [ - 2, - 3 + "cs2" ], "in": "query", - "name": "manifest_version", - "type": "integer" - }, - { - "description": "Filter by public data-collection disclosure", - "in": "query", - "name": "collects_data", - "type": "boolean" - }, - { - "description": "Filter by broad host access", - "in": "query", - "name": "has_broad_host_access", - "type": "boolean" - }, - { - "description": "Minimum displayed user count", - "in": "query", - "name": "min_users", - "type": "integer" - }, - { - "description": "Minimum rating, 0 through 5", - "in": "query", - "name": "min_rating", - "type": "number" - }, - { - "description": "Minimum rating count", - "in": "query", - "name": "min_rating_count", - "type": "integer" + "name": "game", + "required": true, + "type": "string", + "x-example": "cs2,csgo,ow2,valorant,pubg,tf2,krunker,pubgmobile,apex,fortnite,wow,brawl_stars,insidia,dota2,hearthstone,wildrift,clash_royale,smite,lol_NA,lol_EUW,lol_EUN,overwatch_EU,wot_EU,wot_RU,rainbow_6,csdz,battalion" }, { - "description": "Sort enum: relevance, users_desc, rating_desc, reviews_desc, updated_desc, trending_desc", - "enum": [ - "relevance", - "users_desc", - "rating_desc", - "reviews_desc", - "updated_desc", - "trending_desc" - ], + "description": "FACEIT user UUID.", "in": "query", - "name": "sort", - "type": "string" + "name": "user_id", + "required": true, + "type": "string", + "x-example": "74df0e6b-5b41-42d7-93b4-05dc78b9a699" }, { - "description": "Page number, default 1", + "description": "Optional page size, 1-100; default 10.", "in": "query", - "name": "page", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 10 }, { - "description": "Page size, default 20, max 100", + "description": "Optional non-negative row offset.", "in": "query", - "name": "page_size", - "type": "integer" + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -323291,7 +398976,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.chromeExtensionsSearchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.ClipsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -323300,14 +398997,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -323318,120 +399021,56 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Chrome Web Store dataset", + "summary": "FACEIT player Allstar clips", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/chrome-extensions/trending": { + "/faceit/competition-matches": { "get": { - "description": "Returns stored Chrome Web Store items ranked by the latest observed user and rating-count movement. Filters match the search endpoint; sort is fixed to `trending_desc`. Billing: this endpoint costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-chrome-extensions-trending", + "consumes": [ + "application/json" + ], + "description": "Returns one page of a competition's match list for a competition id and type. The upstream requires both id and type and rejects a missing type; an unknown id is an empty list. The sampled anonymous response was empty and its non-empty item shape is unverified, so each match is passed through as raw upstream JSON rather than a guessed DTO.", + "operationId": "faceit-competition-matches", "parameters": [ { - "description": "Full-text query", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Item type enum: extension, theme, app, unknown", - "enum": [ - "extension", - "theme", - "app", - "unknown" - ], - "in": "query", - "name": "item_type", - "type": "string" - }, - { - "description": "Exact category", - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Exact developer", - "in": "query", - "name": "developer", - "type": "string" - }, - { - "description": "Exact developer email", - "in": "query", - "name": "developer_email", - "type": "string" - }, - { - "description": "Exact permission", - "in": "query", - "name": "permission", - "type": "string" - }, - { - "description": "Status enum: active, removed", - "enum": [ - "active", - "removed" - ], - "in": "query", - "name": "status", - "type": "string" - }, - { - "description": "Manifest version enum: 2, 3", - "enum": [ - 2, - 3 - ], - "in": "query", - "name": "manifest_version", - "type": "integer" - }, - { - "description": "Data-collection filter", - "in": "query", - "name": "collects_data", - "type": "boolean" - }, - { - "description": "Broad-host-access filter", - "in": "query", - "name": "has_broad_host_access", - "type": "boolean" - }, - { - "description": "Minimum users", + "description": "Competition id from faceit-championship-search.", "in": "query", - "name": "min_users", - "type": "integer" + "name": "id", + "required": true, + "type": "string", + "x-example": "9888a3f4-e292-4c3a-a511-15d5d2fb112b" }, { - "description": "Minimum rating", + "description": "Competition type such as championship; the upstream rejects a missing type.", "in": "query", - "name": "min_rating", - "type": "number" + "name": "type", + "required": true, + "type": "string", + "x-example": "championship" }, { - "description": "Minimum rating count", + "description": "Optional player UUID filter.", "in": "query", - "name": "min_rating_count", - "type": "integer" + "name": "player_id", + "type": "string", + "x-example": "74df0e6b-5b41-42d7-93b4-05dc78b9a699" }, { - "description": "Page number", + "description": "Optional non-negative page number; default 0.", "in": "query", "name": "page", - "type": "integer" + "type": "integer", + "x-example": 0 }, { - "description": "Page size, max 100", + "description": "Optional page size, 1-100; default 20.", "in": "query", - "name": "page_size", - "type": "integer" + "name": "size", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -323441,7 +399080,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.chromeExtensionsSearchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.CompetitionMatchesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -323450,14 +399101,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -323468,98 +399125,69 @@ "ApiKeyAuth": [] } ], - "summary": "Get trending Chrome Web Store items", + "summary": "FACEIT competition match list", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/creators/search": { + "/faceit/fpl": { "get": { "consumes": [ "application/json" ], - "description": "Searches TikTok creators stored in a search index (one document per creator), with follower counts, verified status, niche, and engagement. Deleted and private accounts are excluded by default; set `include_inactive=true` to include them for historical lookups. Sort enum: `followers_desc`, `engagement_desc`, `engagement_qualified_desc`, `likes_desc`, `relevance`. Coverage note: `followers_desc`, `likes_desc`, and `relevance` are backed by profile fields present across the full dataset; the post-level engagement metrics (`engagement_rate`, `avg_views`, and the nested `post_stats` object) and the `engagement_desc`/`engagement_qualified_desc` sorts are currently populated for a growing subset of creators, prioritizing the highest-reach accounts. Creators without these metrics are still returned but sort last under `engagement_desc` and omit those fields; `engagement_qualified_desc` excludes them outright (they cannot clear its floors). `engagement_desc` ranks by raw `engagement_rate` with no eligibility floor — it surfaces a real stale-record + ratio-by-design trap: an account whose last real post was years ago can still carry an unrealistic rate computed from a handful of old posts. `engagement_qualified_desc` is the same metric restricted to creators with a recent post (`last_post_at` within 90 days), a minimum reach (`avg_views >= 10000`) and sample size (`post_stats.sampled_posts >= 10`), and a sanity ceiling (`engagement_rate <= 50%`) — use this, not the raw sort, for a \"best engagement\" leaderboard. Sound fields: `post_stats.top_sounds` holds only a creator's FIVE most-used sounds from the sampled posts, ranked by use count with ties broken by lowest `music_id`, so it is a top-5 view and not the creator's full sound list; `post_stats.distinct_sounds` gives the true number of different sounds the sample used. Use each sound's `original` boolean to tell TikTok-generated original audio from catalogue tracks - do NOT infer it from the title, because TikTok localizes the original-audio label (`sonido original`, `som original`, `оригинальный звук`, and at least fifteen more), so a title match silently reclassifies original audio as named tracks. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-creators-search", + "description": "Returns FPL (FACEIT Pro League) circuits, optionally filtered to one game: circuit id, game and region, display name, default flag, season windows with start and end timestamps, and the configured ranking source. An unknown game is a valid empty list. Paging uses limit and offset and the response reports has_more.", + "operationId": "faceit-fpl", "parameters": [ { - "description": "Full-text query over handle, nickname and bio, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact handle lookup (case-insensitive), e.g. khaby.lame; returns the single creator with that exact @handle", - "in": "query", - "name": "handle", - "type": "string" - }, - { - "description": "Exact content-niche filter, max 128 characters", - "in": "query", - "name": "niche", - "type": "string" - }, - { - "description": "Exact creator country/region filter, max 128 characters", - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Filter by verified badge; true keeps only verified creators", - "in": "query", - "name": "verified", - "type": "boolean" - }, - { - "description": "Minimum follower count", - "in": "query", - "name": "min_followers", - "type": "integer" - }, - { - "description": "Filter by contact-email presence; true keeps only creators with an email", - "in": "query", - "name": "has_email", - "type": "boolean" - }, - { - "description": "Return the stored contact email instead of a blanked value. Off by default for everyone, and honoured only for entitled (non-Free) API keys", - "in": "query", - "name": "include_email", - "type": "boolean" - }, - { - "description": "Include deleted/private accounts; defaults to false (only live accounts returned)", - "in": "query", - "name": "include_inactive", - "type": "boolean" - }, - { - "description": "Sort enum: followers_desc, engagement_desc, engagement_qualified_desc, likes_desc, relevance. engagement_desc ranks by raw post-level engagement rate, currently populated for a subset of creators (highest-reach first); creators without it sort last. engagement_qualified_desc is the same metric restricted to creators with a recent post (<=90d), a minimum reach (avg_views>=10000) and sample size (>=10 posts), and a sanity ceiling (<=50%) -- use this, not the raw sort, for a 'best engagement' leaderboard", + "description": "Optional game slug, one of the values returned by faceit-games.", "enum": [ - "followers_desc", - "engagement_desc", - "engagement_qualified_desc", - "likes_desc", - "relevance" + "cs2", + "csgo", + "ow2", + "valorant", + "pubg", + "tf2", + "krunker", + "pubgmobile", + "apex", + "fortnite", + "wow", + "brawl_stars", + "insidia", + "dota2", + "hearthstone", + "wildrift", + "clash_royale", + "smite", + "lol_NA", + "lol_EUW", + "lol_EUN", + "overwatch_EU", + "wot_EU", + "wot_RU", + "rainbow_6", + "csdz", + "battalion" ], "in": "query", - "name": "sort", - "type": "string" + "name": "game", + "type": "string", + "x-example": "cs2,csgo,ow2,valorant,pubg,tf2,krunker,pubgmobile,apex,fortnite,wow,brawl_stars,insidia,dota2,hearthstone,wildrift,clash_royale,smite,lol_NA,lol_EUW,lol_EUN,overwatch_EU,wot_EU,wot_RU,rainbow_6,csdz,battalion" }, { - "description": "Page number, defaults to 1", + "description": "Optional page size, 1-100; default 20.", "in": "query", - "name": "page", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 20 }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Optional non-negative row offset.", "in": "query", - "name": "page_size", - "type": "integer" + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -323569,7 +399197,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.creatorsSearchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.FPLResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -323578,14 +399218,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -323596,72 +399242,64 @@ "ApiKeyAuth": [] } ], - "summary": "Search the TikTok creators dataset", + "summary": "FACEIT Pro League circuits", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/doordash-stores/facets": { + "/faceit/game-modes": { "get": { "consumes": [ "application/json" ], - "description": "Returns terms aggregation counts for the DoorDash store directory. Facet enum: `country`, `state`, `city`, `tags`, `display_status`, `price_range`, `dash_pass_eligible`. Accepts the same filter parameters as search to scope the aggregation. Use `facet=tags` to discover the marketplace tag values accepted by the `tag` filter.", - "operationId": "datasets-doordash-stores-facets", + "description": "Returns the public matchmaking queues for a game and region: queue id, queue group id, localized label, spectator flag and team size. Both game and region are required by the upstream. A pair with no queues is a valid empty list, not an error.", + "operationId": "faceit-game-modes", "parameters": [ { - "description": "Facet enum: country, state, city, tags, display_status, price_range, dash_pass_eligible", + "description": "Game slug, one of the values returned by faceit-games.", "enum": [ - "country", - "state", - "city", - "tags", - "display_status", - "price_range", - "dash_pass_eligible" + "cs2", + "csgo", + "ow2", + "valorant", + "pubg", + "tf2", + "krunker", + "pubgmobile", + "apex", + "fortnite", + "wow", + "brawl_stars", + "insidia", + "dota2", + "hearthstone", + "wildrift", + "clash_royale", + "smite", + "lol_NA", + "lol_EUW", + "lol_EUN", + "overwatch_EU", + "wot_EU", + "wot_RU", + "rainbow_6", + "csdz", + "battalion" ], "in": "query", - "name": "facet", + "name": "game", "required": true, "type": "string", - "x-example": "country" - }, - { - "description": "Full-text search over store name, address, city, and marketplace tags", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "ISO-3166-1 alpha-2 country filter", - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "State/region code filter", - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "Exact city filter", - "in": "query", - "name": "city", - "type": "string" - }, - { - "description": "Single marketplace tag filter", - "in": "query", - "name": "tag", - "type": "string" + "x-example": "cs2,csgo,ow2,valorant,pubg,tf2,krunker,pubgmobile,apex,fortnite,wow,brawl_stars,insidia,dota2,hearthstone,wildrift,clash_royale,smite,lol_NA,lol_EUW,lol_EUN,overwatch_EU,wot_EU,wot_RU,rainbow_6,csdz,battalion" }, { - "description": "Keep only DashPass-eligible stores", + "description": "Region code such as EU; see faceit-regions.", "in": "query", - "name": "dash_pass_only", - "type": "boolean" + "name": "region", + "required": true, + "type": "string", + "x-example": "EU" } ], "produces": [ @@ -323671,7 +399309,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.doorDashStoresFacetResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.GameModesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -323680,14 +399330,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -323698,29 +399354,19 @@ "ApiKeyAuth": [] } ], - "summary": "Facet stored DoorDash stores", + "summary": "FACEIT public queues for a game and region", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/doordash-stores/items/{store_id}": { + "/faceit/games": { "get": { "consumes": [ "application/json" ], - "description": "Returns one stored DoorDash store by its DoorDash store id (digits only, e.g. `297068`) from dataset id `doordash-stores`. A store discovered but not yet hydrated may have an empty `address`/`phone` and no `location`. `display_status`, `asap_available`, and `pickup_available` are a point-in-time pickup observation at crawl time, not a durable capability.", - "operationId": "datasets-doordash-stores-item", - "parameters": [ - { - "description": "DoorDash store id (digits only), e.g. 297068", - "in": "path", - "name": "store_id", - "required": true, - "type": "string", - "x-example": "297068" - } - ], + "description": "Returns the pinned game taxonomy: the slugs whose map configuration answered with real maps on the verification date. The upstream exposes no anonymous games catalogue, so this list is pinned and marked not complete rather than being a claimed complete catalogue. Every other FACEIT route validates its game parameter against this set.", + "operationId": "faceit-games", "produces": [ "application/json" ], @@ -323728,7 +399374,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.doorDashStoreResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.GamesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -323749,8 +399407,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -323761,89 +399419,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a stored DoorDash store", + "summary": "FACEIT game slugs confirmed by the live map oracle", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/doordash-stores/nearby": { + "/faceit/hub": { "get": { "consumes": [ "application/json" ], - "description": "Returns stored DoorDash stores within a radius of a point, nearest first, from dataset id `doordash-stores`. lat, lon, and radius_m are required. Unlike the live /doordash/search endpoint (which is a proximity search capped at roughly five stores), this queries the stored directory, so it can return every discovered store in the radius. Coverage is best-effort rather than provably exhaustive: a store DoorDash never surfaced, or one not yet hydrated with coordinates, will not appear. Billing: this endpoint costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-doordash-stores-nearby", + "description": "Returns one FACEIT hub: identity, description, game/region/category, organizer, publication and featured flags, slot and player counts, skill band, join permissions, rules id, images, geo/region/game checks, nested child hubs, role identities, FACEIT points, prize counts and queue/application/chat settings. An unknown id answers 404.", + "operationId": "faceit-hub", "parameters": [ { - "description": "Center latitude, from -90 through 90", - "in": "query", - "name": "lat", - "required": true, - "type": "number", - "x-example": 40.7484257 - }, - { - "description": "Center longitude, from -180 through 180", - "in": "query", - "name": "lon", - "required": true, - "type": "number", - "x-example": -73.98567 - }, - { - "description": "Search radius in meters, 1 through 50000", + "description": "Hub UUID from faceit-hub-memberships.", "in": "query", - "name": "radius_m", + "name": "id", "required": true, - "type": "integer", - "x-example": 5000 - }, - { - "description": "ISO-3166-1 alpha-2 country filter", - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Single marketplace tag filter", - "in": "query", - "name": "tag", - "type": "string" - }, - { - "description": "Keep only DashPass-eligible stores", - "in": "query", - "name": "dash_pass_only", - "type": "boolean" - }, - { - "description": "Pagination mode: offset or cursor. Cursor mode supports full enumeration beyond the offset result window.", - "enum": [ - "offset", - "cursor" - ], - "in": "query", - "name": "pagination", - "type": "string" - }, - { - "description": "Opaque continuation token returned in next_cursor; use with pagination=cursor and the same location and filters", - "in": "query", - "name": "cursor", - "type": "string" - }, - { - "description": "Offset page number, defaults to 1; ignored by cursor pagination except page=1 to start", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; the 10,000-result cap applies only to offset pagination", - "in": "query", - "name": "page_size", - "type": "integer" + "type": "string", + "x-example": "27ccb2d1-2715-4f65-be3f-c5de635fcd31" } ], "produces": [ @@ -323853,7 +399449,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.doorDashStoresSearchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.HubResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -323862,14 +399470,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -323880,133 +399494,19 @@ "ApiKeyAuth": [] } ], - "summary": "Find nearby stored DoorDash stores", + "summary": "FACEIT hub detail by id", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/doordash-stores/search": { + "/faceit/hub-categories": { "get": { "consumes": [ "application/json" ], - "description": "Searches the DoorDash merchant-location directory (dataset id `doordash-stores`). Identity and marketplace fields (name, marketplace tags, price range, ratings, DashPass eligibility) are available for each store; contact, address, and coordinates can be missing for a store that has not been fully processed yet. `display_status`, `display_asap_time`, `asap_available`, and `pickup_available` are a point-in-time observation of the PICKUP surface at crawl time, not a durable capability. Geographic coverage is best-effort. Supports full-text `q`, `country`/`state`/`city`/`tag` filters, `dash_pass_only`, `min_price`/`max_price`/`min_rating`, `lat`/`lon`/`radius_m` radius filtering, and `sort` (relevance, rating, distance, distance_asc). `sort=relevance` ranks by text-match score when `q` is supplied; without `q` it sorts by store name. Use `pagination=cursor` and the returned `next_cursor` to enumerate beyond the 10,000-result offset window against a point-in-time snapshot. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-doordash-stores-search", - "parameters": [ - { - "description": "Full-text search over store name, address, city, and marketplace tags, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "ISO-3166-1 alpha-2 country filter, e.g. US, CA", - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "State/region code filter, e.g. CA", - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "Exact city filter", - "in": "query", - "name": "city", - "type": "string" - }, - { - "description": "Single marketplace tag filter, e.g. Pizza", - "in": "query", - "name": "tag", - "type": "string" - }, - { - "description": "Keep only DashPass-eligible stores", - "in": "query", - "name": "dash_pass_only", - "type": "boolean" - }, - { - "description": "Minimum price range tier, inclusive", - "in": "query", - "name": "min_price", - "type": "integer" - }, - { - "description": "Maximum price range tier, inclusive", - "in": "query", - "name": "max_price", - "type": "integer" - }, - { - "description": "Minimum aggregate rating, 0 through 5; excludes unrated stores", - "in": "query", - "name": "min_rating", - "type": "number" - }, - { - "description": "Latitude for radius filtering or distance sort, requires lon", - "in": "query", - "name": "lat", - "type": "number" - }, - { - "description": "Longitude for radius filtering or distance sort, requires lat", - "in": "query", - "name": "lon", - "type": "number" - }, - { - "description": "Radius in meters, 1 through 50000; requires lat and lon", - "in": "query", - "name": "radius_m", - "type": "integer" - }, - { - "description": "Sort enum: relevance, rating, distance, distance_asc", - "enum": [ - "relevance", - "rating", - "distance", - "distance_asc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Pagination mode: offset or cursor. Cursor mode supports full enumeration beyond the offset result window.", - "enum": [ - "offset", - "cursor" - ], - "in": "query", - "name": "pagination", - "type": "string" - }, - { - "description": "Opaque continuation token returned in next_cursor; use with pagination=cursor and the same filters and sort", - "in": "query", - "name": "cursor", - "type": "string" - }, - { - "description": "Offset page number, defaults to 1; ignored by cursor pagination except page=1 to start", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; the 10,000-result cap applies only to offset pagination", - "in": "query", - "name": "page_size", - "type": "integer" - } - ], + "description": "Returns the closed hub category enum the hub membership endpoint accepts. The upstream names these values in its own validation error, so they are server-validated.", + "operationId": "faceit-hub-categories", "produces": [ "application/json" ], @@ -324014,7 +399514,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.doorDashStoresSearchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.HubCategoriesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -324023,14 +399535,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -324041,144 +399559,53 @@ "ApiKeyAuth": [] } ], - "summary": "Search the DoorDash store directory", + "summary": "FACEIT hub category enum", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/facebook-pages/facets": { + "/faceit/hub-memberships": { "get": { "consumes": [ "application/json" ], - "description": "Returns value counts for the Facebook Pages dataset, by the required `facet`: `category` or `discovery_source`. Search filters such as `q`, `min_likes` and `has_email` narrow the counts. Default order is most common first; `order=value_asc` pages alphabetically using `after` and `next_after`, with `limit` up to 200.", - "operationId": "datasets-facebook-pages-facets", + "description": "Returns one page of a user's hub and competition memberships: membership id, user identity, the competition/hub reference (game, category, skill band, join permissions, player count, child ids), role names, highest role ranking and join date. This is the only anonymous hub-discovery path the FACEIT website exposes, so hub ids for faceit-hub come from here. category is a closed enum.", + "operationId": "faceit-hub-memberships", "parameters": [ { - "description": "Facet values per response, default 50, maximum 200", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "count_desc returns most common values; value_asc pages through all values", - "enum": [ - "count_desc", - "value_asc" - ], - "in": "query", - "name": "order", - "type": "string" - }, - { - "description": "Continuation from next_after; requires order=value_asc and unchanged filters", - "in": "query", - "name": "after", - "type": "string" - }, - { - "description": "Facet enum: category, discovery_source", - "enum": [ - "category", - "discovery_source" - ], + "description": "FACEIT user UUID.", "in": "query", - "name": "facet", + "name": "user_id", "required": true, "type": "string", - "x-example": "category" - }, - { - "description": "Full-text query over title and address, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact Facebook Page id filter, max 128 characters", - "in": "query", - "name": "page_id", - "type": "string" - }, - { - "description": "Exact Page username/identifier filter (case-insensitive), max 128 characters", - "in": "query", - "name": "identifier", - "type": "string" + "x-example": "74df0e6b-5b41-42d7-93b4-05dc78b9a699" }, { - "description": "Exact Page category filter (case-insensitive), max 128 characters", + "description": "Optional hub category; one of community, chat or ihl.", + "enum": [ + "community", + "chat", + "ihl" + ], "in": "query", "name": "category", - "type": "string" - }, - { - "description": "Exact filter for how the Page was discovered (e.g. business_search, warc_domain_scan, wikidata), max 128 characters", - "in": "query", - "name": "discovery_source", - "type": "string" - }, - { - "description": "Filter by a linked website", - "in": "query", - "name": "has_website", - "type": "boolean" - }, - { - "description": "Filter by a public contact email", - "in": "query", - "name": "has_email", - "type": "boolean" - }, - { - "description": "Filter by at least one public phone number", - "in": "query", - "name": "has_phone", - "type": "boolean" - }, - { - "description": "Filter by a public WhatsApp contact", - "in": "query", - "name": "has_whatsapp", - "type": "boolean" - }, - { - "description": "Minimum Page like count", - "in": "query", - "name": "min_likes", - "type": "integer" - }, - { - "description": "Maximum Page like count", - "in": "query", - "name": "max_likes", - "type": "integer" - }, - { - "description": "Records last refreshed on or after this date (RFC3339 or YYYY-MM-DD)", - "in": "query", - "name": "hydrated_after", - "type": "string" + "type": "string", + "x-example": "community" }, { - "description": "Records last refreshed on or before this date (RFC3339 or YYYY-MM-DD)", + "description": "Optional page size, 1-50; default 20.", "in": "query", - "name": "hydrated_before", - "type": "string" + "name": "limit", + "type": "integer", + "x-example": 20 }, { - "description": "Sort enum: relevance, likes_desc, likes_asc, hydrated_at_desc, hydrated_at_asc", - "enum": [ - "relevance", - "likes_desc", - "likes_asc", - "hydrated_at_desc", - "hydrated_at_asc" - ], + "description": "Optional non-negative row offset.", "in": "query", - "name": "sort", - "type": "string" + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -324188,7 +399615,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.facebookPagesFacetResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.HubMembershipsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -324197,14 +399636,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -324215,27 +399660,31 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the Facebook Pages dataset", + "summary": "FACEIT user hub memberships", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/facebook-pages/items/{page_id}": { + "/faceit/hubs": { "get": { "consumes": [ "application/json" ], - "description": "Returns one public Facebook Page contact record from the dataset by `page_id`: title, username, category, address, website, email, phones, WhatsApp, like count and source URL. `contact_observed_at` marks when contact fields were last seen complete. A Page not in the dataset returns 404.", - "operationId": "datasets-facebook-pages-item", + "description": "Returns summary rows for up to 20 hub ids supplied as a repeated ids parameter: hub id, game and region, name, organizer, avatar, player count, category, publication state, relationship type, child ids and organizer tier. An unknown id is simply omitted from the item list. Hub ids come from faceit-hub-memberships.", + "operationId": "faceit-hubs", "parameters": [ { - "description": "Facebook Page id, max 128 characters", - "in": "path", - "name": "page_id", + "collectionFormat": "multi", + "description": "Hub UUIDs; repeat the parameter for up to 20 hubs.", + "in": "query", + "items": { + "type": "string" + }, + "name": "ids", "required": true, - "type": "string", - "x-example": "100067013529598" + "type": "array", + "x-example": "27ccb2d1-2715-4f65-be3f-c5de635fcd31" } ], "produces": [ @@ -324245,7 +399694,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.facebookPageResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.HubsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -324266,8 +399727,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -324278,122 +399739,31 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Facebook Page from the dataset", + "summary": "FACEIT hubs by id", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/facebook-pages/search": { + "/faceit/hubs-detailed": { "get": { "consumes": [ "application/json" ], - "description": "Searches public Facebook Page contact records stored in a search index — website, email, phone, WhatsApp, category and like count, discovered through business-search enumeration, domain-scoped scans, and Wikidata seeding, then hydrated from each Page's public About tab. Sort enum: `relevance`, `likes_desc`, `likes_asc`, `hydrated_at_desc`, `hydrated_at_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-facebook-pages-search", + "description": "Returns full hub objects for up to 20 hub ids through the v2 bulk read: identity, description, game/region/category, organizer and owner, publication flags, slot and player counts, skill band, join permissions, rules id, images, checks, child ids, role identities, points and queue/application/chat settings. Unlike faceit-hubs (summaries) and faceit-hub (one id), this resolves several full hubs in one call. An unknown id is omitted from the item list.", + "operationId": "faceit-hubs-detailed", "parameters": [ { - "description": "Full-text query over title and address, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact Facebook Page id filter, max 128 characters", - "in": "query", - "name": "page_id", - "type": "string" - }, - { - "description": "Exact Page username/identifier filter (case-insensitive), max 128 characters", - "in": "query", - "name": "identifier", - "type": "string" - }, - { - "description": "Exact Page category filter (case-insensitive), max 128 characters", - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Exact filter for how the Page was discovered (e.g. business_search, warc_domain_scan, wikidata), max 128 characters", - "in": "query", - "name": "discovery_source", - "type": "string" - }, - { - "description": "Filter by a linked website", - "in": "query", - "name": "has_website", - "type": "boolean" - }, - { - "description": "Filter by a public contact email", - "in": "query", - "name": "has_email", - "type": "boolean" - }, - { - "description": "Filter by at least one public phone number", - "in": "query", - "name": "has_phone", - "type": "boolean" - }, - { - "description": "Filter by a public WhatsApp contact", - "in": "query", - "name": "has_whatsapp", - "type": "boolean" - }, - { - "description": "Minimum Page like count", - "in": "query", - "name": "min_likes", - "type": "integer" - }, - { - "description": "Maximum Page like count", - "in": "query", - "name": "max_likes", - "type": "integer" - }, - { - "description": "Records last refreshed on or after this date (RFC3339 or YYYY-MM-DD)", - "in": "query", - "name": "hydrated_after", - "type": "string" - }, - { - "description": "Records last refreshed on or before this date (RFC3339 or YYYY-MM-DD)", - "in": "query", - "name": "hydrated_before", - "type": "string" - }, - { - "description": "Sort enum: relevance, likes_desc, likes_asc, hydrated_at_desc, hydrated_at_asc", - "enum": [ - "relevance", - "likes_desc", - "likes_asc", - "hydrated_at_desc", - "hydrated_at_asc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "collectionFormat": "multi", + "description": "Hub UUIDs; repeat the parameter for up to 20 hubs.", "in": "query", - "name": "page_size", - "type": "integer" + "items": { + "type": "string" + }, + "name": "ids", + "required": true, + "type": "array", + "x-example": "27ccb2d1-2715-4f65-be3f-c5de635fcd31" } ], "produces": [ @@ -324403,7 +399773,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.facebookPagesSearchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.HubsDetailedResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -324412,14 +399794,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -324430,229 +399818,85 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Facebook Pages dataset", + "summary": "FACEIT full hub objects for up to 20 ids", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/github-users/facets": { + "/faceit/leaderboard": { "get": { "consumes": [ "application/json" ], - "description": "Returns terms aggregation counts for the GitHub users dataset. Facet enum: `influence_tier`, `type`, `country`, `country_code`, `state`, `city`, `domains`, `company`, `reachable`, `has_email`, `has_twitter`, `has_blog`, `active_90d`, `hireable`, `is_org`, `is_bot`, `is_suspected_automation`. influence_tier enum: `nano`, `micro`, `mid`, `macro`, `mega`. Suspected-automation records are excluded by default unless is_suspected_automation is set.", - "operationId": "datasets-github-users-facets", + "description": "Returns one page of a game region's ranked leaderboard: position, player identity and country, Elo, skill level, verification level and global position. With season set it reads the season-aware ranking and also returns the requested season and the available season history; without season it reads the all-time ranking. The upstream caps a page at 100 rows. An unknown game or region code is a valid empty page, not an error.", + "operationId": "faceit-leaderboard", "parameters": [ { - "description": "Facet enum: influence_tier, type, country, country_code, state, city, domains, company, reachable, has_email, has_twitter, has_blog, active_90d, hireable, is_org, is_bot, is_suspected_automation", + "description": "Game slug, one of the values returned by faceit-games.", "enum": [ - "influence_tier", - "type", - "country", - "country_code", - "state", - "city", - "domains", - "company", - "reachable", - "has_email", - "has_twitter", - "has_blog", - "active_90d", - "hireable", - "is_org", - "is_bot", - "is_suspected_automation" + "cs2", + "csgo", + "ow2", + "valorant", + "pubg", + "tf2", + "krunker", + "pubgmobile", + "apex", + "fortnite", + "wow", + "brawl_stars", + "insidia", + "dota2", + "hearthstone", + "wildrift", + "clash_royale", + "smite", + "lol_NA", + "lol_EUW", + "lol_EUN", + "overwatch_EU", + "wot_EU", + "wot_RU", + "rainbow_6", + "csdz", + "battalion" ], "in": "query", - "name": "facet", + "name": "game", "required": true, "type": "string", - "x-example": "influence_tier" - }, - { - "description": "Full-text query over login, name, company, bio and location, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact login filter, max 128 characters", - "in": "query", - "name": "login", - "type": "string" - }, - { - "description": "Exact normalized-company filter, max 128 characters", - "in": "query", - "name": "company", - "type": "string" - }, - { - "description": "Follower-tier enum: nano, micro, mid, macro, mega", - "enum": [ - "nano", - "micro", - "mid", - "macro", - "mega" - ], - "in": "query", - "name": "influence_tier", - "type": "string" - }, - { - "description": "Exact geocoded country filter, max 128 characters", - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Exact ISO country-code filter, max 128 characters", - "in": "query", - "name": "country_code", - "type": "string" - }, - { - "description": "Exact geocoded state filter, max 128 characters", - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "Exact geocoded city filter, max 128 characters", - "in": "query", - "name": "city", - "type": "string" - }, - { - "description": "Interest-domain tag filter, max 128 characters", - "in": "query", - "name": "domain", - "type": "string" - }, - { - "description": "Filter by public email presence", - "in": "query", - "name": "has_email", - "type": "boolean" - }, - { - "description": "Filter by public Twitter/X handle presence", - "in": "query", - "name": "has_twitter", - "type": "boolean" - }, - { - "description": "Filter by public blog/website presence", - "in": "query", - "name": "has_blog", - "type": "boolean" - }, - { - "description": "Filter by any public contact channel", - "in": "query", - "name": "reachable", - "type": "boolean" - }, - { - "description": "Filter by activity within the last 90 days", - "in": "query", - "name": "active_90d", - "type": "boolean" - }, - { - "description": "Filter by the GitHub available-for-hire flag", - "in": "query", - "name": "hireable", - "type": "boolean" - }, - { - "description": "Organization filter", - "in": "query", - "name": "is_org", - "type": "boolean" - }, - { - "description": "Bot filter", - "in": "query", - "name": "is_bot", - "type": "boolean" - }, - { - "description": "Suspected automation filter; omitted these are hidden by default", - "in": "query", - "name": "is_suspected_automation", - "type": "boolean" - }, - { - "description": "Minimum follower count", - "in": "query", - "name": "min_followers", - "type": "integer" - }, - { - "description": "Maximum follower count", - "in": "query", - "name": "max_followers", - "type": "integer" - }, - { - "description": "Minimum public repository count", - "in": "query", - "name": "min_repos", - "type": "integer" + "x-example": "cs2,csgo,ow2,valorant,pubg,tf2,krunker,pubgmobile,apex,fortnite,wow,brawl_stars,insidia,dota2,hearthstone,wildrift,clash_royale,smite,lol_NA,lol_EUW,lol_EUN,overwatch_EU,wot_EU,wot_RU,rainbow_6,csdz,battalion" }, { - "description": "Minimum composite rank score", - "in": "query", - "name": "min_rank_score", - "type": "integer" - }, - { - "description": "Minimum account age in years", - "in": "query", - "name": "min_account_age_years", - "type": "number" - }, - { - "description": "Maximum account age in years", - "in": "query", - "name": "max_account_age_years", - "type": "number" - }, - { - "description": "Latitude for radius filtering", + "description": "Region code such as EU or NA; see faceit-regions.", "in": "query", - "name": "lat", - "type": "number" + "name": "region", + "required": true, + "type": "string", + "x-example": "EU" }, { - "description": "Longitude for radius filtering", + "description": "Optional season number; when set the season-aware ranking is read.", "in": "query", - "name": "lon", - "type": "number" + "name": "season", + "type": "integer", + "x-example": 10 }, { - "description": "Radius in meters, 1 through 50000; requires lat and lon when supplied", + "description": "Optional page size, 1-100; default 20 and the gateway caps a page at 100 rows.", "in": "query", - "name": "radius_m", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 20 }, { - "description": "Sort enum: relevance, rank_score_desc, followers_desc, account_age_desc, account_age_asc, distance_asc", - "enum": [ - "relevance", - "rank_score_desc", - "followers_desc", - "account_age_desc", - "account_age_asc", - "distance_asc" - ], + "description": "Optional non-negative row offset.", "in": "query", - "name": "sort", - "type": "string" + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -324662,7 +399906,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.githubUsersFacetResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.LeaderboardResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -324671,14 +399927,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -324689,27 +399951,27 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the GitHub users dataset", + "summary": "FACEIT ranked leaderboard for one game and region", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/github-users/items/{login}": { + "/faceit/leaderboard-detail": { "get": { "consumes": [ "application/json" ], - "description": "Returns one GitHub user from the dataset by `login`, with profile fields (name, bio, company, blog, location, email), follower, repo and 30-day activity counts, `influence_tier`, `rank_score`, geo, linked social accounts and bot or organisation flags. An unknown login returns 404.", - "operationId": "datasets-github-users-item", + "description": "Returns one leaderboard's full configuration: entity references, game and region, group/round/bracket placement, ranking and points configuration, scoring fields, prizes, requirements, status and ranking-field visibility rules. Leaderboard ids come from faceit-championship-search or faceit-standings. An unknown id answers 404.", + "operationId": "faceit-leaderboard-detail", "parameters": [ { - "description": "GitHub login, max 128 characters", - "in": "path", - "name": "login", + "description": "24-character leaderboard id from faceit-championship-search or faceit-standings.", + "in": "query", + "name": "id", "required": true, "type": "string", - "x-example": "claude" + "x-example": "5b0d895ef2e59b000687c9ed" } ], "produces": [ @@ -324719,7 +399981,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.githubUserResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.LeaderboardDetailResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -324740,8 +400014,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -324752,82 +400026,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a GitHub user from the dataset", + "summary": "FACEIT leaderboard detail by id", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/github-users/nearby": { + "/faceit/leaderboard-statuses": { "get": { "consumes": [ "application/json" ], - "description": "Searches enriched GitHub users near a coordinate, sorted by distance, in dataset id enum value `github-users`. influence_tier enum: `nano`, `micro`, `mid`, `macro`, `mega`. Billing: this endpoint costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-github-users-nearby", - "parameters": [ - { - "description": "Latitude", - "in": "query", - "name": "lat", - "required": true, - "type": "number", - "x-example": 40.7484257 - }, - { - "description": "Longitude", - "in": "query", - "name": "lon", - "required": true, - "type": "number", - "x-example": -73.98567 - }, - { - "description": "Radius in meters, max 50000", - "in": "query", - "name": "radius_m", - "required": true, - "type": "integer", - "x-example": 5000 - }, - { - "description": "Follower-tier enum: nano, micro, mid, macro, mega", - "enum": [ - "nano", - "micro", - "mid", - "macro", - "mega" - ], - "in": "query", - "name": "influence_tier", - "type": "string" - }, - { - "description": "Filter by any public contact channel", - "in": "query", - "name": "reachable", - "type": "boolean" - }, - { - "description": "Minimum follower count", - "in": "query", - "name": "min_followers", - "type": "integer" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", - "in": "query", - "name": "page_size", - "type": "integer" - } - ], + "description": "Returns the closed leaderboard status enum: ONGOING, UPCOMING and FINISHED. The upstream rejects lowercase and any other value, so callers must use these exact uppercase values. Also returns the observed entity type and leaderboard type values, which the gateway does not validate.", + "operationId": "faceit-leaderboard-statuses", "produces": [ "application/json" ], @@ -324835,7 +400046,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.githubUsersSearchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.LeaderboardStatusesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -324844,14 +400067,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -324862,214 +400091,56 @@ "ApiKeyAuth": [] } ], - "summary": "Search nearby GitHub users", + "summary": "FACEIT leaderboard status enum", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/github-users/search": { + "/faceit/maps": { "get": { "consumes": [ "application/json" ], - "description": "Searches enriched public GitHub user profiles stored in a search index. influence_tier enum: `nano`, `micro`, `mid`, `macro`, `mega`. Sort enum: `relevance`, `rank_score_desc`, `followers_desc`, `account_age_desc`, `account_age_asc`, `distance_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-github-users-search", + "description": "Returns a game's votable map taxonomy: map id, display name, game map id, class name and two image sizes. A game without map configuration is answered with 404 by the upstream and surfaces as NotFound; discover valid game slugs from faceit-games.", + "operationId": "faceit-maps", "parameters": [ { - "description": "Full-text query over login, name, company, bio and location, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact login filter, max 128 characters", - "in": "query", - "name": "login", - "type": "string" - }, - { - "description": "Exact normalized-company filter, max 128 characters", - "in": "query", - "name": "company", - "type": "string" - }, - { - "description": "Follower-tier enum: nano, micro, mid, macro, mega", - "enum": [ - "nano", - "micro", - "mid", - "macro", - "mega" - ], - "in": "query", - "name": "influence_tier", - "type": "string" - }, - { - "description": "Exact geocoded country filter, max 128 characters", - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Exact ISO country-code filter, max 128 characters", - "in": "query", - "name": "country_code", - "type": "string" - }, - { - "description": "Exact geocoded state filter, max 128 characters", - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "Exact geocoded city filter, max 128 characters", - "in": "query", - "name": "city", - "type": "string" - }, - { - "description": "Interest-domain tag filter (e.g. ml-ai, web, devops), max 128 characters", - "in": "query", - "name": "domain", - "type": "string" - }, - { - "description": "Filter by public email presence", - "in": "query", - "name": "has_email", - "type": "boolean" - }, - { - "description": "Filter by public Twitter/X handle presence", - "in": "query", - "name": "has_twitter", - "type": "boolean" - }, - { - "description": "Filter by public blog/website presence", - "in": "query", - "name": "has_blog", - "type": "boolean" - }, - { - "description": "Filter by any public contact channel", - "in": "query", - "name": "reachable", - "type": "boolean" - }, - { - "description": "Filter by activity within the last 90 days", - "in": "query", - "name": "active_90d", - "type": "boolean" - }, - { - "description": "Filter by the GitHub available-for-hire flag", - "in": "query", - "name": "hireable", - "type": "boolean" - }, - { - "description": "Organization filter (normally false; the crawl indexes individuals)", - "in": "query", - "name": "is_org", - "type": "boolean" - }, - { - "description": "Bot filter (normally false; the crawl skips bots)", - "in": "query", - "name": "is_bot", - "type": "boolean" - }, - { - "description": "Suspected automation (commit-farm/mass-repo bots); omitted these are hidden by default, pass true to isolate them", - "in": "query", - "name": "is_suspected_automation", - "type": "boolean" - }, - { - "description": "Minimum follower count", - "in": "query", - "name": "min_followers", - "type": "integer" - }, - { - "description": "Maximum follower count", - "in": "query", - "name": "max_followers", - "type": "integer" - }, - { - "description": "Minimum public repository count", - "in": "query", - "name": "min_repos", - "type": "integer" - }, - { - "description": "Minimum composite rank score", - "in": "query", - "name": "min_rank_score", - "type": "integer" - }, - { - "description": "Minimum account age in years", - "in": "query", - "name": "min_account_age_years", - "type": "number" - }, - { - "description": "Maximum account age in years", - "in": "query", - "name": "max_account_age_years", - "type": "number" - }, - { - "description": "Latitude for radius filtering or distance sort", - "in": "query", - "name": "lat", - "type": "number" - }, - { - "description": "Longitude for radius filtering or distance sort", - "in": "query", - "name": "lon", - "type": "number" - }, - { - "description": "Radius in meters, 1 through 50000; requires lat and lon when supplied", - "in": "query", - "name": "radius_m", - "type": "integer" - }, - { - "description": "Sort enum: relevance, rank_score_desc, followers_desc, account_age_desc, account_age_asc, distance_asc", + "description": "Game slug, one of the values returned by faceit-games.", "enum": [ - "relevance", - "rank_score_desc", - "followers_desc", - "account_age_desc", - "account_age_asc", - "distance_asc" + "cs2", + "csgo", + "ow2", + "valorant", + "pubg", + "tf2", + "krunker", + "pubgmobile", + "apex", + "fortnite", + "wow", + "brawl_stars", + "insidia", + "dota2", + "hearthstone", + "wildrift", + "clash_royale", + "smite", + "lol_NA", + "lol_EUW", + "lol_EUN", + "overwatch_EU", + "wot_EU", + "wot_RU", + "rainbow_6", + "csdz", + "battalion" ], "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", - "in": "query", - "name": "page_size", - "type": "integer" + "name": "game", + "required": true, + "type": "string", + "x-example": "cs2,csgo,ow2,valorant,pubg,tf2,krunker,pubgmobile,apex,fortnite,wow,brawl_stars,insidia,dota2,hearthstone,wildrift,clash_royale,smite,lol_NA,lol_EUW,lol_EUN,overwatch_EU,wot_EU,wot_RU,rainbow_6,csdz,battalion" } ], "produces": [ @@ -325079,7 +400150,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.githubUsersSearchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.MapsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -325088,14 +400171,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -325106,67 +400195,52 @@ "ApiKeyAuth": [] } ], - "summary": "Search the GitHub users dataset", + "summary": "FACEIT votable maps for a game", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/goodreads-authors/facets": { + "/faceit/match-clips": { "get": { "consumes": [ "application/json" ], - "description": "Returns value counts over the Goodreads authors dataset for the required `facet`, either `genres` or `run_id`. Filters `q`, `name`, `genre`, `run_id`, `min_rating` (0 to 5) and `min_ratings_count` narrow the result, which lists the top 50 values with their counts.", - "operationId": "datasets-goodreads-authors-facets", + "description": "Returns one page of the Allstar clips attached to one FACEIT match: clip id, title, view count, embed URL, thumbnail, linked user and match ids, processing status, map and round. Match ids come from any clip row returned by faceit-clips or faceit-best-clips. Only cs2 has Allstar clips; an unknown match is a valid empty page.", + "operationId": "faceit-match-clips", "parameters": [ { - "description": "Facet enum: genres, run_id", + "description": "Game slug; only cs2 has Allstar clips.", "enum": [ - "genres", - "run_id" + "cs2" ], "in": "query", - "name": "facet", + "name": "game", "required": true, "type": "string", - "x-example": "genres" - }, - { - "description": "Full-text query over name, about and genres, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact author name filter, max 128 characters", - "in": "query", - "name": "name", - "type": "string" - }, - { - "description": "Exact genre filter, max 128 characters", - "in": "query", - "name": "genre", - "type": "string" + "x-example": "cs2" }, { - "description": "Exact crawl run-id filter, max 128 characters", + "description": "Upstream match id from a clip row, for example 1-bef84e57-4ce3-41aa-b5e5-2918228c1c28.", "in": "query", - "name": "run_id", - "type": "string" + "name": "match_id", + "required": true, + "type": "string", + "x-example": "1-bef84e57-4ce3-41aa-b5e5-2918228c1c28" }, { - "description": "Minimum average rating, 0 through 5", + "description": "Optional page size, 1-100; default 10.", "in": "query", - "name": "min_rating", - "type": "number" + "name": "limit", + "type": "integer", + "x-example": 10 }, { - "description": "Minimum number of ratings", + "description": "Optional non-negative row offset.", "in": "query", - "name": "min_ratings_count", - "type": "integer" + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -325176,7 +400250,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.goodreadsAuthorsFacetResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.MatchClipsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -325185,14 +400271,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -325203,27 +400295,27 @@ "ApiKeyAuth": [] } ], - "summary": "Facet Goodreads authors dataset", + "summary": "FACEIT Allstar clips for one match", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/goodreads-authors/items/{id}": { + "/faceit/organizer": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Goodreads author from the dataset by numeric author `id`. The record has name, about text, genres, birth and death dates, website, average rating, ratings and reviews counts, image and Goodreads URL. An id not in the dataset returns 404.", - "operationId": "datasets-goodreads-authors-item", + "description": "Returns one organizer's public profile: name and type, plan-tier limits, publication state, avatar and cover, sponsors, public staff roles, social links, supported games, description, featuring countries, countries, geo regions and features. Organizer ids appear as organizer_id on championship and leaderboard rows. The staff account ids are deliberately not mirrored. An unknown id answers 404.", + "operationId": "faceit-organizer", "parameters": [ { - "description": "Goodreads author id, e.g. 153394", - "in": "path", + "description": "Organizer UUID.", + "in": "query", "name": "id", "required": true, "type": "string", - "x-example": "153394" + "x-example": "73d4185d-559f-4dbc-8398-9eae47adfe27" } ], "produces": [ @@ -325233,7 +400325,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.goodreadsAuthorResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.OrganizerResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -325254,8 +400358,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -325266,79 +400370,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Goodreads author from dataset", + "summary": "FACEIT organizer profile by id", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/goodreads-authors/search": { + "/faceit/player": { "get": { "consumes": [ "application/json" ], - "description": "Searches the crawled public Goodreads author profile index. Authors are discovered as a byproduct of the books crawl (every credited book contributor, plus the genre/search/list seed sources) — not a full catalog. Sort enum: `relevance`, `rating_desc`, `reviews_desc`, `name_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-goodreads-authors-search", + "description": "Returns one FACEIT profile: nickname, avatar and cover image, country, verified/registration status, memberships and per-game competitive state (Elo, region, skill level and level label). Exactly one of nickname and user_id is required. The ranking routes accept the user id returned here. A nickname that does not exist is an unknown entity and answers 404; profile friends, streaming ids and linked platform accounts are deliberately not mirrored.", + "operationId": "faceit-player", "parameters": [ { - "description": "Full-text query over name, about and genres, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact author name filter, max 128 characters", - "in": "query", - "name": "name", - "type": "string" - }, - { - "description": "Exact genre filter (e.g. Fantasy, Romance, Nonfiction), max 128 characters", - "in": "query", - "name": "genre", - "type": "string" - }, - { - "description": "Exact crawl run-id filter, max 128 characters", - "in": "query", - "name": "run_id", - "type": "string" - }, - { - "description": "Minimum average rating, 0 through 5", - "in": "query", - "name": "min_rating", - "type": "number" - }, - { - "description": "Minimum number of ratings", - "in": "query", - "name": "min_ratings_count", - "type": "integer" - }, - { - "description": "Sort enum: relevance, rating_desc, reviews_desc, name_asc", - "enum": [ - "relevance", - "rating_desc", - "reviews_desc", - "name_asc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", + "description": "Optional FACEIT nickname; exactly one of nickname and user_id is required.", "in": "query", - "name": "page", - "type": "integer" + "name": "nickname", + "type": "string", + "x-example": "dem0nnnnnnnn" }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Optional FACEIT user UUID; exactly one of nickname and user_id is required.", "in": "query", - "name": "page_size", - "type": "integer" + "name": "user_id", + "type": "string", + "x-example": "74df0e6b-5b41-42d7-93b4-05dc78b9a699" } ], "produces": [ @@ -325348,7 +400406,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.goodreadsAuthorsSearchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.PlayerResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -325357,14 +400427,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -325375,140 +400451,85 @@ "ApiKeyAuth": [] } ], - "summary": "Search Goodreads authors dataset", + "summary": "FACEIT player profile by nickname or user id", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/goodreads-books/facets": { + "/faceit/player-rank": { "get": { "consumes": [ "application/json" ], - "description": "Returns terms aggregation counts for the Goodreads books dataset. Facet enum: `genres`, `format`, `language`, `publisher`, `primary_author`, `primary_author_id`, `series_name`, `publication_year`, `run_id`.", - "operationId": "datasets-goodreads-books-facets", + "description": "Returns one player's position in a game and region ranking, either the all-time ranking or a season-aware ranking when season is set. A nickname is resolved to its user id first, so a nickname request costs one extra upstream lookup. Position is null when the player has no rank there. Exactly one of nickname and user_id is required.", + "operationId": "faceit-player-rank", "parameters": [ { - "description": "Facet enum: genres, format, language, publisher, primary_author, primary_author_id, series_name, publication_year, run_id", + "description": "Game slug, one of the values returned by faceit-games.", "enum": [ - "genres", - "format", - "language", - "publisher", - "primary_author", - "primary_author_id", - "series_name", - "publication_year", - "run_id" + "cs2", + "csgo", + "ow2", + "valorant", + "pubg", + "tf2", + "krunker", + "pubgmobile", + "apex", + "fortnite", + "wow", + "brawl_stars", + "insidia", + "dota2", + "hearthstone", + "wildrift", + "clash_royale", + "smite", + "lol_NA", + "lol_EUW", + "lol_EUN", + "overwatch_EU", + "wot_EU", + "wot_RU", + "rainbow_6", + "csdz", + "battalion" ], "in": "query", - "name": "facet", + "name": "game", "required": true, "type": "string", - "x-example": "genres" - }, - { - "description": "Full-text query over title, author and description, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact genre filter, max 128 characters", - "in": "query", - "name": "genre", - "type": "string" - }, - { - "description": "Exact format filter, max 128 characters", - "in": "query", - "name": "format", - "type": "string" - }, - { - "description": "Exact language filter, max 128 characters", - "in": "query", - "name": "language", - "type": "string" - }, - { - "description": "Exact publisher filter, max 128 characters", - "in": "query", - "name": "publisher", - "type": "string" - }, - { - "description": "Exact author name filter, max 128 characters", - "in": "query", - "name": "author", - "type": "string" - }, - { - "description": "Exact Goodreads author id filter, max 128 characters", - "in": "query", - "name": "author_id", - "type": "string" - }, - { - "description": "Exact series name filter, max 128 characters", - "in": "query", - "name": "series", - "type": "string" - }, - { - "description": "Exact ISBN-10 filter, max 128 characters", - "in": "query", - "name": "isbn", - "type": "string" + "x-example": "cs2,csgo,ow2,valorant,pubg,tf2,krunker,pubgmobile,apex,fortnite,wow,brawl_stars,insidia,dota2,hearthstone,wildrift,clash_royale,smite,lol_NA,lol_EUW,lol_EUN,overwatch_EU,wot_EU,wot_RU,rainbow_6,csdz,battalion" }, { - "description": "Exact ISBN-13 filter, max 128 characters", - "in": "query", - "name": "isbn13", - "type": "string" - }, - { - "description": "Exact crawl run-id filter, max 128 characters", - "in": "query", - "name": "run_id", - "type": "string" - }, - { - "description": "Minimum average rating, 0 through 5", - "in": "query", - "name": "min_rating", - "type": "number" - }, - { - "description": "Minimum number of ratings", - "in": "query", - "name": "min_ratings_count", - "type": "integer" - }, - { - "description": "Minimum page count", + "description": "Region code such as EU or NA; see faceit-regions for the documented values.", "in": "query", - "name": "min_pages", - "type": "integer" + "name": "region", + "required": true, + "type": "string", + "x-example": "EU" }, { - "description": "Maximum page count", + "description": "Optional FACEIT nickname; exactly one of nickname and user_id is required.", "in": "query", - "name": "max_pages", - "type": "integer" + "name": "nickname", + "type": "string", + "x-example": "dem0nnnnnnnn" }, { - "description": "Minimum publication year", + "description": "Optional FACEIT user UUID; exactly one of nickname and user_id is required.", "in": "query", - "name": "min_publication_year", - "type": "integer" + "name": "user_id", + "type": "string", + "x-example": "74df0e6b-5b41-42d7-93b4-05dc78b9a699" }, { - "description": "Maximum publication year", + "description": "Optional season number; when set the season-aware ranking is read.", "in": "query", - "name": "max_publication_year", - "type": "integer" + "name": "season", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -325518,7 +400539,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.goodreadsBooksFacetResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.PlayerRankResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -325527,14 +400560,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -325545,29 +400584,19 @@ "ApiKeyAuth": [] } ], - "summary": "Facet Goodreads books dataset", + "summary": "FACEIT player ranked position in one game and region", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/goodreads-books/items/{id}": { + "/faceit/regions": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Goodreads book from the dataset by `id`. The record has title, authors, series, genres, format, page count, publisher, publication date, ISBN and ISBN-13, language, description, average rating with a one-to-five-star breakdown, and review counts. An unknown id returns 404.", - "operationId": "datasets-goodreads-books-item", - "parameters": [ - { - "description": "Goodreads book id, e.g. 2767052", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "2767052" - } - ], + "description": "Returns the documented region values: the website client's GEO-REGION list, region codes observed serving live ranking data, and free-form region values seen on live championship leaderboard rows. Region is not a server-validated closed set, so this list is advisory and any well-formed 2-8 character code is forwarded to the upstream.", + "operationId": "faceit-regions", "produces": [ "application/json" ], @@ -325575,7 +400604,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.goodreadsBookResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.RegionsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -325596,8 +400637,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -325608,149 +400649,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Goodreads book from dataset", + "summary": "FACEIT region codes known to the website", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/goodreads-books/search": { + "/faceit/rule": { "get": { "consumes": [ "application/json" ], - "description": "Searches the crawled public Goodreads book catalog stored in a search index. Discovered from curated Listopia \"best of\" lists, a search-term sweep, and author bibliography expansion — not a full catalog. Sort enum: `relevance`, `rating_desc`, `reviews_desc`, `publication_desc`, `publication_asc`, `pages_desc`, `pages_asc`, `title_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-goodreads-books-search", + "description": "Returns one published rule set: rule id, name, game, organizer id, creation and update timestamps and the full rule body in markdown. Rule ids come from faceit-rules. An unknown id answers 404.", + "operationId": "faceit-rule", "parameters": [ { - "description": "Full-text query over title, author and description, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact genre filter (e.g. Fantasy, Romance, Nonfiction), max 128 characters", - "in": "query", - "name": "genre", - "type": "string" - }, - { - "description": "Exact format filter (e.g. Hardcover, Paperback, Kindle Edition), max 128 characters", - "in": "query", - "name": "format", - "type": "string" - }, - { - "description": "Exact language filter (e.g. English, Spanish), max 128 characters", - "in": "query", - "name": "language", - "type": "string" - }, - { - "description": "Exact publisher filter, max 128 characters", - "in": "query", - "name": "publisher", - "type": "string" - }, - { - "description": "Exact author name filter (matches any credited contributor), max 128 characters", - "in": "query", - "name": "author", - "type": "string" - }, - { - "description": "Exact Goodreads author id filter, max 128 characters", - "in": "query", - "name": "author_id", - "type": "string" - }, - { - "description": "Exact series name filter, max 128 characters", - "in": "query", - "name": "series", - "type": "string" - }, - { - "description": "Exact ISBN-10 filter, max 128 characters", - "in": "query", - "name": "isbn", - "type": "string" - }, - { - "description": "Exact ISBN-13 filter, max 128 characters", - "in": "query", - "name": "isbn13", - "type": "string" - }, - { - "description": "Exact crawl run-id filter, max 128 characters", - "in": "query", - "name": "run_id", - "type": "string" - }, - { - "description": "Minimum average rating, 0 through 5", - "in": "query", - "name": "min_rating", - "type": "number" - }, - { - "description": "Minimum number of ratings", - "in": "query", - "name": "min_ratings_count", - "type": "integer" - }, - { - "description": "Minimum page count", - "in": "query", - "name": "min_pages", - "type": "integer" - }, - { - "description": "Maximum page count", - "in": "query", - "name": "max_pages", - "type": "integer" - }, - { - "description": "Minimum publication year", - "in": "query", - "name": "min_publication_year", - "type": "integer" - }, - { - "description": "Maximum publication year", - "in": "query", - "name": "max_publication_year", - "type": "integer" - }, - { - "description": "Sort enum: relevance, rating_desc, reviews_desc, publication_desc, publication_asc, pages_desc, pages_asc, title_asc", - "enum": [ - "relevance", - "rating_desc", - "reviews_desc", - "publication_desc", - "publication_asc", - "pages_desc", - "pages_asc", - "title_asc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Rule UUID from faceit-rules.", "in": "query", - "name": "page_size", - "type": "integer" + "name": "id", + "required": true, + "type": "string", + "x-example": "43e07c2c-c0b2-4872-9826-6812eba70463" } ], "produces": [ @@ -325760,7 +400679,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.goodreadsBooksSearchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.RuleResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -325769,14 +400700,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -325787,159 +400724,33 @@ "ApiKeyAuth": [] } ], - "summary": "Search Goodreads books dataset", + "summary": "FACEIT competition rule detail", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/google-map-businesses/facets": { + "/faceit/rules": { "get": { "consumes": [ "application/json" ], - "description": "Returns terms aggregation counts for Google Maps businesses. Facet enum: `category`, `country`, `state`, `state_code`, `county`, `county_code`, `city`, `town`, `website_status`. Category facet values are exact locale-specific Google Maps labels and can be localized, non-ASCII, or contain punctuation; pass a returned value unchanged to the category filter. `state` and `county` keep each country's own administrative vocabulary (e.g. `Provincia de Madrid`, `Département du Nord`); `state_code` and `county_code` are ISO 3166-2 codes populated today only for Canadian provinces and territories (e.g. `CA-ON`) and Irish counties (e.g. `IE-D`); every other record, including all US rows, carries no code and is absent from the code facets.", - "operationId": "datasets-google-map-businesses-facets", + "description": "Returns one page of the published FACEIT competition rule sets: rule id, name, game, organizer id, creation and update timestamps and the full rule body in markdown. The upstream accepts entity filters but ignores them, so this route exposes only paging. Paging uses limit and offset.", + "operationId": "faceit-rules", "parameters": [ { - "description": "Facet enum: category, country, state, state_code, county, county_code, city, town, website_status", - "enum": [ - "category", - "country", - "state", - "state_code", - "county", - "county_code", - "city", - "town", - "website_status" - ], - "in": "query", - "name": "facet", - "required": true, - "type": "string", - "x-example": "category" - }, - { - "description": "Full-text business search query, max 256 characters; every term must match the name, address, headline or category (filler words such as in, near and the are ignored)", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact locale-specific Google Maps category label; use the category facet to discover values, max 128 characters", - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Country filter. Accepts the full English name (\\", - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Exact state filter, max 128 characters", - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "Exact county filter, max 128 characters", - "in": "query", - "name": "county", - "type": "string" - }, - { - "description": "Exact ISO 3166-2 state/region code filter, e.g. CA-ON, max 128 characters. Only Canadian provinces and territories carry a code today, so US codes such as US-NV return no rows; filter other countries by state, county or city. Use facet=state_code to list values", - "in": "query", - "name": "state_code", - "type": "string" - }, - { - "description": "Exact ISO 3166-2 county/district code filter, e.g. IE-D, max 128 characters. Only Irish counties carry a code today; filter other countries by county or city. Use facet=county_code to list values", - "in": "query", - "name": "county_code", - "type": "string" - }, - { - "description": "Exact city filter, max 128 characters", - "in": "query", - "name": "city", - "type": "string" - }, - { - "description": "Exact town filter, max 128 characters", - "in": "query", - "name": "town", - "type": "string" - }, - { - "description": "Minimum rating, 0 through 5. Businesses with no aggregate Google rating are returned with rating null, so any min_rating above 0 excludes them.", - "in": "query", - "name": "min_rating", - "type": "number" - }, - { - "description": "Minimum review count", - "in": "query", - "name": "min_review_count", - "type": "integer" - }, - { - "description": "Filter by website presence", - "in": "query", - "name": "has_website", - "type": "boolean" - }, - { - "description": "Filter by phone presence", - "in": "query", - "name": "has_phone", - "type": "boolean" - }, - { - "description": "Filter by location presence: true keeps only mappable businesses with coordinates; false isolates locationless service-area businesses that have no map location", - "in": "query", - "name": "has_geo", - "type": "boolean" - }, - { - "description": "Closure filter. true keeps only businesses Google marks Permanently closed; false excludes them, keeping every business not known to be closed. Most rows have never been status-checked and are returned with permanently_closed null, which means unknown, not open.", - "in": "query", - "name": "permanently_closed", - "type": "boolean" - }, - { - "description": "Latitude for radius filtering", - "in": "query", - "name": "lat", - "type": "number" - }, - { - "description": "Longitude for radius filtering", - "in": "query", - "name": "lon", - "type": "number" - }, - { - "description": "Radius in meters, 1 through 50000; requires lat and lon when supplied", + "description": "Optional page size, 1-100; default 20.", "in": "query", - "name": "radius_m", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 20 }, { - "description": "Sort enum: relevance, updated_at_desc, rating_desc, review_count_desc, distance_asc", - "enum": [ - "relevance", - "updated_at_desc", - "rating_desc", - "review_count_desc", - "distance_asc" - ], + "description": "Optional non-negative row offset.", "in": "query", - "name": "sort", - "type": "string" + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -325949,7 +400760,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.googleMapBusinessesFacetResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.RulesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -325958,14 +400781,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -325976,27 +400805,56 @@ "ApiKeyAuth": [] } ], - "summary": "Facet stored Google Maps businesses", + "summary": "FACEIT published competition rules", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/google-map-businesses/items/{place_id}": { + "/faceit/skill-levels": { "get": { "consumes": [ "application/json" ], - "description": "Returns one stored Google Maps business by Google place_id from dataset id enum value `google-map-businesses`. The `category` field contains the exact Google Maps category label returned for the business locale and can be localized, non-ASCII, or contain punctuation. A `rating` of `null` means no aggregate rating is available. A `review_count` of `null` means Google did not return a count; numeric `0` means Google confirmed zero reviews. Locationless service-area businesses (online/mobile/home-based) have a `null` `geo`. A `permanently_closed` of `true` means Google marks the business permanently closed; `false` means a crawl confirmed it does not; `null` means the business has not been status-checked since capture shipped on 2026-08-31 and is UNKNOWN, not open — so any total computed from this dataset includes an unknown number of closed businesses.", - "operationId": "datasets-google-map-businesses-item", + "description": "Returns a game's skill-level configuration: the level number (1-10) and its inclusive Elo band. This is the discovery surface for the skill levels that ranking rows report. The upstream returns a default mapping for any slug, so this route does not prove a game exists and is not an error for an unknown-but-valid slug.", + "operationId": "faceit-skill-levels", "parameters": [ { - "description": "Google Place ID, max 256 characters", - "in": "path", - "name": "place_id", + "description": "Game slug, one of the values returned by faceit-games.", + "enum": [ + "cs2", + "csgo", + "ow2", + "valorant", + "pubg", + "tf2", + "krunker", + "pubgmobile", + "apex", + "fortnite", + "wow", + "brawl_stars", + "insidia", + "dota2", + "hearthstone", + "wildrift", + "clash_royale", + "smite", + "lol_NA", + "lol_EUW", + "lol_EUN", + "overwatch_EU", + "wot_EU", + "wot_RU", + "rainbow_6", + "csdz", + "battalion" + ], + "in": "query", + "name": "game", "required": true, "type": "string", - "x-example": "ChIJ99URUeOAhYAR0J5ZUxTesDQ" + "x-example": "cs2,csgo,ow2,valorant,pubg,tf2,krunker,pubgmobile,apex,fortnite,wow,brawl_stars,insidia,dota2,hearthstone,wildrift,clash_royale,smite,lol_NA,lol_EUW,lol_EUN,overwatch_EU,wot_EU,wot_RU,rainbow_6,csdz,battalion" } ], "produces": [ @@ -326006,7 +400864,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.googleMapBusinessResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.SkillLevelsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -326027,8 +400897,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -326039,73 +400909,57 @@ "ApiKeyAuth": [] } ], - "summary": "Get a stored Google Maps business", + "summary": "FACEIT skill levels and Elo bands for a game", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/google-map-businesses/nearby": { + "/faceit/standings": { "get": { "consumes": [ "application/json" ], - "description": "Searches stored Google Maps businesses near a coordinate in dataset id enum value `google-map-businesses`. `category` is the exact Google Maps category label returned for the business locale; it can be localized, non-ASCII, or contain punctuation, so use the category facet to discover exact filter values. A `rating` of `null` means no aggregate rating is available. A `review_count` of `null` means Google did not return a count; numeric `0` means Google confirmed zero reviews. `min_rating` above 0 excludes unrated businesses. Billing: this endpoint costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-google-map-businesses-nearby", + "description": "Returns a championship's standings for one group and round: the leaderboard identity and each ranked participant's entity id, name, avatar, skill level, country, played count, position and points. The upstream requires group and round plus a segment or match number. An entity or round without standings is a valid empty list, not an error.", + "operationId": "faceit-standings", "parameters": [ { - "description": "Latitude", - "in": "query", - "name": "lat", - "required": true, - "type": "number", - "x-example": 40.7484257 - }, - { - "description": "Longitude", + "description": "Championship UUID from faceit-championship-search.", "in": "query", - "name": "lon", + "name": "entity_id", "required": true, - "type": "number", - "x-example": -73.98567 + "type": "string", + "x-example": "9888a3f4-e292-4c3a-a511-15d5d2fb112b" }, { - "description": "Radius in meters, max 50000", + "description": "Group number.", "in": "query", - "name": "radius_m", + "name": "group", "required": true, "type": "integer", - "x-example": 5000 - }, - { - "description": "Exact locale-specific Google Maps category label; use the category facet to discover values, max 128 characters", - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Minimum rating, 0 through 5. Businesses with no aggregate Google rating are returned with rating null, so any min_rating above 0 excludes them.", - "in": "query", - "name": "min_rating", - "type": "number" + "x-example": 1 }, { - "description": "Minimum review count", + "description": "Round number, or a comma-separated list such as 1,2.", "in": "query", - "name": "min_review_count", - "type": "integer" + "name": "round", + "required": true, + "type": "string", + "x-example": "1" }, { - "description": "Page number, defaults to 1", + "description": "Optional segment number; provide segment or match.", "in": "query", - "name": "page", - "type": "integer" + "name": "segment", + "type": "integer", + "x-example": 1 }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Optional match number; provide segment or match.", "in": "query", - "name": "page_size", - "type": "integer" + "name": "match", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -326115,7 +400969,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.googleMapBusinessesSearchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.StandingsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -326124,14 +400990,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -326142,152 +401014,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search nearby stored Google Maps businesses", + "summary": "FACEIT championship standings by group and round", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/google-map-businesses/search": { + "/faceit/team": { "get": { "consumes": [ "application/json" ], - "description": "Searches Google Maps business records stored in a search index. Sort enum: `relevance`, `updated_at_desc`, `rating_desc`, `review_count_desc`, `distance_asc`. `category` is the exact Google Maps category label returned for the business locale; it can be localized, non-ASCII, or contain punctuation, so use the category facet to discover exact filter values. A `rating` of `null` means no aggregate rating is available. A `review_count` of `null` means Google did not return a count; numeric `0` means Google confirmed zero reviews. `rating_desc` sorts unrated businesses last, and `min_rating` above 0 excludes them. Use `has_geo=false` to isolate locationless service-area businesses (which have a `null` `geo`). A `permanently_closed` of `true` means Google marks the business permanently closed; `false` means a crawl confirmed it does not; `null` means the business has not been status-checked since capture shipped on 2026-08-31 and is UNKNOWN, not open — so any total computed from this dataset includes an unknown number of closed businesses. Use `permanently_closed=false` to exclude the confirmed-closed ones. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-google-map-businesses-search", + "description": "Returns one public FACEIT team profile: name and nickname, game, leader, team type and status, description, country, avatar and cover, creation/update timestamps, social links, member and pending-member ids, and public member rows (guid, nickname, avatar, country and game list). Team ids are discovered from premade championship bracket faction ids in faceit-championship-bracket. An unknown id answers 404 and is returned as NotFound.", + "operationId": "faceit-team", "parameters": [ { - "description": "Full-text business search query, max 256 characters; every term must match the name, address, headline or category (filler words such as in, near and the are ignored)", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact locale-specific Google Maps category label; use the category facet to discover values, max 128 characters", - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Country filter. Accepts the full English name (\\", - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Exact state filter, max 128 characters", - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "Exact county filter, max 128 characters", - "in": "query", - "name": "county", - "type": "string" - }, - { - "description": "Exact ISO 3166-2 state/region code filter, e.g. CA-ON, max 128 characters. Only Canadian provinces and territories carry a code today, so US codes such as US-NV return no rows; filter other countries by state, county or city. Use facet=state_code to list values", - "in": "query", - "name": "state_code", - "type": "string" - }, - { - "description": "Exact ISO 3166-2 county/district code filter, e.g. IE-D, max 128 characters. Only Irish counties carry a code today; filter other countries by county or city. Use facet=county_code to list values", - "in": "query", - "name": "county_code", - "type": "string" - }, - { - "description": "Exact city filter, max 128 characters", - "in": "query", - "name": "city", - "type": "string" - }, - { - "description": "Exact town filter, max 128 characters", - "in": "query", - "name": "town", - "type": "string" - }, - { - "description": "Minimum rating, 0 through 5. Businesses with no aggregate Google rating are returned with rating null, so any min_rating above 0 excludes them.", - "in": "query", - "name": "min_rating", - "type": "number" - }, - { - "description": "Minimum review count", - "in": "query", - "name": "min_review_count", - "type": "integer" - }, - { - "description": "Filter by website presence", - "in": "query", - "name": "has_website", - "type": "boolean" - }, - { - "description": "Filter by phone presence", - "in": "query", - "name": "has_phone", - "type": "boolean" - }, - { - "description": "Filter by location presence: true keeps only mappable businesses with coordinates; false isolates locationless service-area businesses that have no map location", - "in": "query", - "name": "has_geo", - "type": "boolean" - }, - { - "description": "Closure filter. true keeps only businesses Google marks Permanently closed; false excludes them, keeping every business not known to be closed. Most rows have never been status-checked and are returned with permanently_closed null, which means unknown, not open.", - "in": "query", - "name": "permanently_closed", - "type": "boolean" - }, - { - "description": "Latitude for radius filtering or distance sort", - "in": "query", - "name": "lat", - "type": "number" - }, - { - "description": "Longitude for radius filtering or distance sort", - "in": "query", - "name": "lon", - "type": "number" - }, - { - "description": "Radius in meters, 1 through 50000; requires lat and lon when supplied", - "in": "query", - "name": "radius_m", - "type": "integer" - }, - { - "description": "Sort enum: relevance, updated_at_desc, rating_desc, review_count_desc, distance_asc", - "enum": [ - "relevance", - "updated_at_desc", - "rating_desc", - "review_count_desc", - "distance_asc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Team UUID from a premade bracket faction id.", "in": "query", - "name": "page_size", - "type": "integer" + "name": "id", + "required": true, + "type": "string", + "x-example": "3279bf46-2cd3-43d1-b4d7-2dfd24d1d843" } ], "produces": [ @@ -326297,7 +401044,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.googleMapBusinessesSearchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.TeamResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -326306,14 +401065,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -326324,170 +401089,41 @@ "ApiKeyAuth": [] } ], - "summary": "Search stored Google Maps businesses", + "summary": "FACEIT team profile by id", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/housing-markets/facets": { + "/faceit/tournaments-past": { "get": { "consumes": [ "application/json" ], - "description": "Returns terms aggregation counts for the housing markets dataset. Facet enum: `region_type`, `state_code`, `property_type`, `parent_metro`, `parent_metro_code`, `income_vintage`, `is_latest`, `period_begin`. region_type enum: `national`, `metro`, `county`, `city`, `zip`. property_type enum: `All Residential`, `Single Family Residential`, `Condo/Co-op`, `Townhouse`, `Multi-Family (2-4 Unit)`, `Single Units Only`.", - "operationId": "datasets-housing-markets-facets", + "description": "Returns one page of a player's past tournament history. The upstream answered the sampled anonymous requests with an empty list and its non-empty item shape is unverified, so each item is passed through as raw upstream JSON rather than a guessed DTO. A nickname with no history is a valid empty result.", + "operationId": "faceit-tournaments-past", "parameters": [ { - "description": "Facet enum: region_type, state_code, property_type, parent_metro, parent_metro_code, income_vintage, is_latest, period_begin", - "enum": [ - "region_type", - "state_code", - "property_type", - "parent_metro", - "parent_metro_code", - "income_vintage", - "is_latest", - "period_begin" - ], + "description": "FACEIT nickname.", "in": "query", - "name": "facet", + "name": "nickname", "required": true, "type": "string", - "x-example": "region_type" - }, - { - "description": "Full-text query over region name and city, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Region level enum: national, metro, county, city, zip", - "enum": [ - "national", - "metro", - "county", - "city", - "zip" - ], - "in": "query", - "name": "region_type", - "type": "string" - }, - { - "description": "Exact two-letter state code filter, e.g. CA", - "in": "query", - "name": "state_code", - "type": "string" - }, - { - "description": "Property type enum: All Residential, Single Family Residential, Condo/Co-op, Townhouse, Multi-Family (2-4 Unit), Single Units Only", - "in": "query", - "name": "property_type", - "type": "string" - }, - { - "description": "Exact parent metro (CBSA) code filter, e.g. 16980", - "in": "query", - "name": "parent_metro_code", - "type": "string" - }, - { - "description": "Exact zip code filter (zip-level rows only), e.g. 60616", - "in": "query", - "name": "zip_code", - "type": "string" - }, - { - "description": "Exact period start date filter, YYYY-MM-DD", - "in": "query", - "name": "period", - "type": "string" - }, - { - "description": "Filter for the most recent period per region and property type", - "in": "query", - "name": "latest", - "type": "boolean" - }, - { - "description": "Minimum median sale price in USD", - "in": "query", - "name": "min_median_sale_price", - "type": "number" - }, - { - "description": "Maximum median sale price in USD", - "in": "query", - "name": "max_median_sale_price", - "type": "number" - }, - { - "description": "Minimum median list price in USD", - "in": "query", - "name": "min_median_list_price", - "type": "number" - }, - { - "description": "Maximum median list price in USD", - "in": "query", - "name": "max_median_list_price", - "type": "number" - }, - { - "description": "Minimum price-to-income ratio", - "in": "query", - "name": "min_price_to_income", - "type": "number" - }, - { - "description": "Maximum price-to-income ratio", - "in": "query", - "name": "max_price_to_income", - "type": "number" - }, - { - "description": "Minimum salary needed to buy in USD per year", - "in": "query", - "name": "min_salary_to_buy", - "type": "integer" - }, - { - "description": "Maximum salary needed to buy in USD per year", - "in": "query", - "name": "max_salary_to_buy", - "type": "integer" - }, - { - "description": "Minimum median days on market", - "in": "query", - "name": "min_median_dom", - "type": "number" - }, - { - "description": "Maximum median days on market", - "in": "query", - "name": "max_median_dom", - "type": "number" - }, - { - "description": "Minimum active inventory", - "in": "query", - "name": "min_inventory", - "type": "integer" + "x-example": "dem0nnnnnnnn" }, { - "description": "Maximum active inventory", + "description": "Optional page size, 1-100; default 20.", "in": "query", - "name": "max_inventory", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 20 }, { - "description": "Minimum homes sold in the period", + "description": "Optional non-negative row offset.", "in": "query", - "name": "min_homes_sold", - "type": "integer" + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -326497,7 +401133,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.housingMarketsFacetResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.TournamentsPastResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -326506,14 +401154,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -326524,60 +401178,39 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the US housing markets dataset", + "summary": "FACEIT player past tournament history", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/housing-markets/items/{region_type}/{table_id}": { + "/faceit/user-skills": { "get": { "consumes": [ "application/json" ], - "description": "Returns one housing-market record by region_type and Redfin table_id from dataset id enum value `housing-markets`. region_type enum: `national`, `metro`, `county`, `city`, `zip`. property_type enum: `All Residential`, `Single Family Residential`, `Condo/Co-op`, `Townhouse`, `Multi-Family (2-4 Unit)`, `Single Units Only` (defaults to `All Residential`). `period` defaults to the most recent period on record. Pass `history=true` to get the full monthly series (a `{dataset, region_type, table_id, property_type, items}` envelope, sorted by period ascending) instead of a single record.", - "operationId": "datasets-housing-markets-item", + "description": "Returns competitive skill entries for a bounded batch of up to 10 players in one game: Elo value, skill level, ranked match count, latest Elo delta, current win streak and the professional-player flag, plus the upstream skill expiration timestamp. Duplicate ids are collapsed and unknown users are omitted, so the entries list can be shorter than the request and is a valid empty result when no player has skill data. The upstream requires exactly one game per request and returns entries in its own order.", + "operationId": "faceit-user-skills", "parameters": [ { - "description": "Region level enum: national, metro, county, city, zip", - "enum": [ - "national", - "metro", - "county", - "city", - "zip" - ], - "in": "path", - "name": "region_type", - "required": true, - "type": "string", - "x-example": "national" - }, - { - "description": "Redfin table id (the region's stable numeric id)", - "in": "path", - "name": "table_id", - "required": true, - "type": "integer", - "x-example": 26097 - }, - { - "description": "Exact period start date, YYYY-MM-DD; defaults to the latest period", - "in": "query", - "name": "period", - "type": "string" - }, - { - "description": "Property type enum: All Residential, Single Family Residential, Condo/Co-op, Townhouse, Multi-Family (2-4 Unit), Single Units Only; defaults to All Residential", + "collectionFormat": "multi", + "description": "Required FACEIT user UUIDs; repeat the parameter for up to 10 users.", "in": "query", - "name": "property_type", - "type": "string" + "items": { + "type": "string" + }, + "name": "user_ids", + "required": true, + "type": "array", + "x-example": "74df0e6b-5b41-42d7-93b4-05dc78b9a699" }, { - "description": "Return the full monthly series instead of a single period", + "description": "Game slug, one of the values returned by faceit-games.", "in": "query", - "name": "history", - "type": "boolean" + "name": "game", + "required": true, + "type": "string", + "x-example": "cs2,csgo,ow2,valorant,pubg,tf2,krunker,pubgmobile,apex,fortnite,wow,brawl_stars,insidia,dota2,hearthstone,wildrift,clash_royale,smite,lol_NA,lol_EUW,lol_EUN,overwatch_EU,wot_EU,wot_RU,rainbow_6,csdz,battalion" } ], "produces": [ @@ -326587,7 +401220,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.housingMarketItemResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/faceit.UserSkillsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -326608,8 +401253,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -326620,188 +401265,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a US housing market record from the dataset", + "summary": "FACEIT player skills for up to 10 users in one game", "tags": [ - "Datasets" + "FACEIT" ] } }, - "/datasets/housing-markets/search": { + "/fanatics/categories": { "get": { "consumes": [ "application/json" ], - "description": "Searches monthly Redfin housing-market statistics per region and property type since 2012, joined to Census ACS income for affordability metrics. region_type enum: `national`, `metro`, `county`, `city`, `zip`. property_type enum: `All Residential`, `Single Family Residential`, `Condo/Co-op`, `Townhouse`, `Multi-Family (2-4 Unit)`, `Single Units Only`. Sort enum: `relevance`, `price_desc`, `price_asc`, `list_price_desc`, `list_price_asc`, `price_to_income_desc`, `price_to_income_asc`, `salary_to_buy_desc`, `salary_to_buy_asc`, `dom_asc`, `dom_desc`, `inventory_desc`, `homes_sold_desc`, `period_desc`. Use `latest=true` for the most recent period per region series. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-housing-markets-search", - "parameters": [ - { - "description": "Full-text query over region name and city, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Region level enum: national, metro, county, city, zip", - "enum": [ - "national", - "metro", - "county", - "city", - "zip" - ], - "in": "query", - "name": "region_type", - "type": "string" - }, - { - "description": "Exact two-letter state code filter, e.g. CA", - "in": "query", - "name": "state_code", - "type": "string" - }, - { - "description": "Property type enum: All Residential, Single Family Residential, Condo/Co-op, Townhouse, Multi-Family (2-4 Unit), Single Units Only", - "in": "query", - "name": "property_type", - "type": "string" - }, - { - "description": "Exact parent metro (CBSA) code filter, e.g. 16980", - "in": "query", - "name": "parent_metro_code", - "type": "string" - }, - { - "description": "Exact zip code filter (zip-level rows only), e.g. 60616", - "in": "query", - "name": "zip_code", - "type": "string" - }, - { - "description": "Exact period start date filter, YYYY-MM-DD", - "in": "query", - "name": "period", - "type": "string" - }, - { - "description": "Filter for the most recent period per region and property type", - "in": "query", - "name": "latest", - "type": "boolean" - }, - { - "description": "Minimum median sale price in USD", - "in": "query", - "name": "min_median_sale_price", - "type": "number" - }, - { - "description": "Maximum median sale price in USD", - "in": "query", - "name": "max_median_sale_price", - "type": "number" - }, - { - "description": "Minimum median list price in USD", - "in": "query", - "name": "min_median_list_price", - "type": "number" - }, - { - "description": "Maximum median list price in USD", - "in": "query", - "name": "max_median_list_price", - "type": "number" - }, - { - "description": "Minimum price-to-income ratio", - "in": "query", - "name": "min_price_to_income", - "type": "number" - }, - { - "description": "Maximum price-to-income ratio", - "in": "query", - "name": "max_price_to_income", - "type": "number" - }, - { - "description": "Minimum salary needed to buy in USD per year", - "in": "query", - "name": "min_salary_to_buy", - "type": "integer" - }, - { - "description": "Maximum salary needed to buy in USD per year", - "in": "query", - "name": "max_salary_to_buy", - "type": "integer" - }, - { - "description": "Minimum median days on market", - "in": "query", - "name": "min_median_dom", - "type": "number" - }, - { - "description": "Maximum median days on market", - "in": "query", - "name": "max_median_dom", - "type": "number" - }, - { - "description": "Minimum active inventory", - "in": "query", - "name": "min_inventory", - "type": "integer" - }, - { - "description": "Maximum active inventory", - "in": "query", - "name": "max_inventory", - "type": "integer" - }, - { - "description": "Minimum homes sold in the period", - "in": "query", - "name": "min_homes_sold", - "type": "integer" - }, - { - "description": "Sort enum: relevance, price_desc, price_asc, list_price_desc, list_price_asc, price_to_income_desc, price_to_income_asc, salary_to_buy_desc, salary_to_buy_asc, dom_asc, dom_desc, inventory_desc, homes_sold_desc, period_desc", - "enum": [ - "relevance", - "price_desc", - "price_asc", - "list_price_desc", - "list_price_asc", - "price_to_income_desc", - "price_to_income_asc", - "salary_to_buy_desc", - "salary_to_buy_asc", - "dom_asc", - "dom_desc", - "inventory_desc", - "homes_sold_desc", - "period_desc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", - "in": "query", - "name": "page_size", - "type": "integer" - } - ], + "description": "Returns Fanatics' full top-level navigation tree: leagues (NFL, MLB, NBA, NHL, Soccer, WWE, College, ...) and, where Fanatics exposes a team-level breakdown, each league's teams (College's several hundred schools included). Each league's or team's url is directly usable as fanatics_category's url input. Public data sourced from fanatics.com's own navigation data.", + "operationId": "fanatics-categories", "produces": [ "application/json" ], @@ -326809,23 +401285,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.housingMarketsSearchResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/fanatics.categoriesResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -326836,158 +401306,48 @@ "ApiKeyAuth": [] } ], - "summary": "Search the US housing markets dataset", + "summary": "Get Fanatics' league and team navigation tree", "tags": [ - "Datasets" + "Fanatics" ] } }, - "/datasets/instagram-users/facets": { + "/fanatics/category": { "get": { "consumes": [ "application/json" ], - "description": "Returns value counts for the Instagram users dataset by the required `facet`: `is_verified`, `is_business_account`, `has_bio`, `has_external_url`, `category_name` or `source_tier`. The counts follow the search filters, including follower ranges and creation dates, and cover up to 50 values.", - "operationId": "datasets-instagram-users-facets", + "description": "Returns one page of a Fanatics league or team category's product listing (name, brand, price, availability, image, url). Use GET /fanatics/categories to discover valid category urls.", + "operationId": "fanatics-category", "parameters": [ { - "description": "Facet enum: is_verified, is_business_account, has_bio, has_external_url, category_name, source_tier", - "enum": [ - "is_verified", - "is_business_account", - "has_bio", - "has_external_url", - "category_name", - "source_tier" - ], + "description": "A fanatics.com league or team category URL, exactly as returned by a fanatics_categories result's url field.", "in": "query", - "name": "facet", + "name": "url", "required": true, "type": "string", - "x-example": "is_verified" - }, - { - "description": "Full-text query over username, full_name and biography, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact username filter (case-insensitive), max 128 characters", - "in": "query", - "name": "username", - "type": "string" - }, - { - "description": "Exact category filter (case-insensitive, e.g. Digital Creator), max 128 characters", - "in": "query", - "name": "category_name", - "type": "string" - }, - { - "description": "Exact filter for seed tier (e.g. crossref, vertical-hashtags, mention-graph, head-directory)", - "in": "query", - "name": "source_tier", - "type": "string" - }, - { - "description": "Filter by the Instagram verification checkmark", - "in": "query", - "name": "is_verified", - "type": "boolean" - }, - { - "description": "Filter by business or creator accounts", - "in": "query", - "name": "is_business_account", - "type": "boolean" - }, - { - "description": "Filter by a non-empty profile biography", - "in": "query", - "name": "has_bio", - "type": "boolean" - }, - { - "description": "Filter by a linked external URL", - "in": "query", - "name": "has_external_url", - "type": "boolean" - }, - { - "description": "Minimum follower count", - "in": "query", - "name": "min_followers", - "type": "integer" - }, - { - "description": "Maximum follower count", - "in": "query", - "name": "max_followers", - "type": "integer" - }, - { - "description": "Minimum follower-to-following ratio", - "in": "query", - "name": "min_ratio", - "type": "number" - }, - { - "description": "Maximum follower-to-following ratio", - "in": "query", - "name": "max_ratio", - "type": "number" - }, - { - "description": "Accounts created on or after this date (RFC3339 or YYYY-MM-DD)", - "in": "query", - "name": "created_after", - "type": "string" - }, - { - "description": "Accounts created on or before this date (RFC3339 or YYYY-MM-DD)", - "in": "query", - "name": "created_before", - "type": "string" + "x-example": "/nfl/indianapolis-colts/o-2483+t-03378189+z-90650-4056854214" }, { - "description": "Records last refreshed on or after this date (RFC3339 or YYYY-MM-DD)", + "description": "1-based result page. Defaults to 1.", "in": "query", - "name": "crawled_after", - "type": "string" + "name": "page_number", + "type": "integer", + "x-example": 1 }, { - "description": "Records last refreshed on or before this date (RFC3339 or YYYY-MM-DD)", + "description": "Results per page. One of 24, 48, 72. Defaults to 24.", "in": "query", - "name": "crawled_before", - "type": "string" + "name": "page_size", + "type": "integer", + "x-example": 24 }, { - "description": "Sort enum: relevance, followers_desc, followers_asc, crawled_at_desc, crawled_at_asc, created_at_desc, created_at_asc", - "enum": [ - "relevance", - "followers_desc", - "followers_asc", - "crawled_at_desc", - "crawled_at_asc", - "created_at_desc", - "created_at_asc" - ], + "description": "One of TopSellers, LowestPrice, HighestPrice, NewestArrivals. Defaults to TopSellers.", "in": "query", "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", - "in": "query", - "name": "page_size", - "type": "integer" + "type": "string", + "x-example": "TopSellers" } ], "produces": [ @@ -326997,7 +401357,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.instagramUsersFacetResponseDoc" + "$ref": "#/definitions/fanatics.categoryResponseDoc" } }, "400": { @@ -327006,14 +401366,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -327024,27 +401384,27 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the Instagram users dataset", + "summary": "Browse a Fanatics league or team category", "tags": [ - "Datasets" + "Fanatics" ] } }, - "/datasets/instagram-users/items/{username}": { + "/fanatics/product": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Instagram user from the dataset by `username`, with or without a leading @, matched case-insensitively. The record has full name, biography, external URL, avatar, verified and business flags, category, followers, following, posts and follower-to-following ratio. An unknown user returns 404.", - "operationId": "datasets-instagram-users-item", + "description": "Returns one Fanatics product's detail (name, brand, category, price, availability, condition, images), plus per-size availability/price, a fit/value/quality review-rating breakdown, a richer media gallery, and comparable-product alternates (e.g. a jersey's Game/Limited/Elite stitch tiers) where Fanatics exposes them. Use GET /fanatics/search or GET /fanatics/category to discover product urls.", + "operationId": "fanatics-product", "parameters": [ { - "description": "Instagram username, with or without a leading @, max 128 characters", - "in": "path", - "name": "username", + "description": "A fanatics.com product-detail URL, exactly as returned by a fanatics_search or fanatics_category result's url field.", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "instagram" + "x-example": "https://www.fanatics.com/nfl/indianapolis-colts/indianapolis-colts-fanatics-slice-shorts-royal/o-2472+t-03937001+p-94133518138+z-9-2488621558" } ], "produces": [ @@ -327054,7 +401414,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.instagramUserResponseDoc" + "$ref": "#/definitions/fanatics.productResponseDoc" } }, "400": { @@ -327069,14 +401429,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -327087,142 +401447,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Instagram user from the dataset", + "summary": "Get a Fanatics product's detail", "tags": [ - "Datasets" + "Fanatics" ] } }, - "/datasets/instagram-users/search": { + "/fanatics/search": { "get": { "consumes": [ "application/json" ], - "description": "Searches public Instagram user profiles stored in a search index. Sort enum: `relevance`, `followers_desc`, `followers_asc`, `crawled_at_desc`, `crawled_at_asc`, `created_at_desc`, `created_at_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-instagram-users-search", + "description": "Searches Fanatics products by the required `query`. Choose `page_size` (24, 48 or 72; default 24), `page_number` (default 1) and `sort` (`TopSellers`, `LowestPrice`, `HighestPrice` or `NewestArrivals`; default `TopSellers`). Each item has product id, name, brand, category, price, currency, availability, image and URL. Also returns `total_items` and `has_next_page`. An invalid `page_size` or `sort` returns `400`.", + "operationId": "fanatics-search", "parameters": [ { - "description": "Full-text query over username, full_name and biography, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact username filter (case-insensitive), max 128 characters", - "in": "query", - "name": "username", - "type": "string" - }, - { - "description": "Exact category filter (case-insensitive, e.g. Digital Creator), max 128 characters", - "in": "query", - "name": "category_name", - "type": "string" - }, - { - "description": "Exact filter for seed tier (e.g. crossref, vertical-hashtags, mention-graph, head-directory), max 128 characters", - "in": "query", - "name": "source_tier", - "type": "string" - }, - { - "description": "Filter by the Instagram verification checkmark", - "in": "query", - "name": "is_verified", - "type": "boolean" - }, - { - "description": "Filter by business or creator accounts", - "in": "query", - "name": "is_business_account", - "type": "boolean" - }, - { - "description": "Filter by a non-empty profile biography", - "in": "query", - "name": "has_bio", - "type": "boolean" - }, - { - "description": "Filter by a linked external URL", - "in": "query", - "name": "has_external_url", - "type": "boolean" - }, - { - "description": "Minimum follower count", - "in": "query", - "name": "min_followers", - "type": "integer" - }, - { - "description": "Maximum follower count", - "in": "query", - "name": "max_followers", - "type": "integer" - }, - { - "description": "Minimum follower-to-following ratio", - "in": "query", - "name": "min_ratio", - "type": "number" - }, - { - "description": "Maximum follower-to-following ratio", - "in": "query", - "name": "max_ratio", - "type": "number" - }, - { - "description": "Accounts created on or after this date (RFC3339 or YYYY-MM-DD)", - "in": "query", - "name": "created_after", - "type": "string" - }, - { - "description": "Accounts created on or before this date (RFC3339 or YYYY-MM-DD)", + "description": "Free-text search keywords.", "in": "query", - "name": "created_before", - "type": "string" + "name": "query", + "required": true, + "type": "string", + "x-example": "colts jersey" }, { - "description": "Records last refreshed on or after this date (RFC3339 or YYYY-MM-DD)", + "description": "1-based result page. Defaults to 1.", "in": "query", - "name": "crawled_after", - "type": "string" + "name": "page_number", + "type": "integer", + "x-example": 1 }, { - "description": "Records last refreshed on or before this date (RFC3339 or YYYY-MM-DD)", + "description": "Results per page. One of 24, 48, 72. Defaults to 24.", "in": "query", - "name": "crawled_before", - "type": "string" + "name": "page_size", + "type": "integer", + "x-example": 24 }, { - "description": "Sort enum: relevance, followers_desc, followers_asc, crawled_at_desc, crawled_at_asc, created_at_desc, created_at_asc", - "enum": [ - "relevance", - "followers_desc", - "followers_asc", - "crawled_at_desc", - "crawled_at_asc", - "created_at_desc", - "created_at_asc" - ], + "description": "One of TopSellers, LowestPrice, HighestPrice, NewestArrivals. Defaults to TopSellers.", "in": "query", "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", - "in": "query", - "name": "page_size", - "type": "integer" + "type": "string", + "x-example": "TopSellers" } ], "produces": [ @@ -327232,7 +401498,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.instagramUsersSearchResponseDoc" + "$ref": "#/definitions/fanatics.searchResponseDoc" } }, "400": { @@ -327241,14 +401507,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -327259,105 +401525,66 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Instagram users dataset", + "summary": "Search Fanatics' product catalog", "tags": [ - "Datasets" + "Fanatics" ] } }, - "/datasets/jobs/companies": { + "/fanaticscollect/auctions": { "get": { "consumes": [ "application/json" ], - "description": "Searches the discovered company board registry — which companies are hiring, on which ATS (or, for the 5 single-company big-tech providers, which platform), with how many open roles. Set sponsors_visa=true to keep companies with certified employer filings in recent public U.S. Department of Labor LCA disclosure data. This is company-level historical evidence, not a guarantee for a specific role or candidate. provider enum: `greenhouse`, `lever`, `ashby`, `workday`, `smartrecruiters`, `workable`, `recruitee`, `rippling`, `personio`, `teamtailor`, `oracle`, `ukg`, `icims`, `eightfold`, `gem`, `pinpoint`, `amazon-jobs`, `apple-jobs`, `google-jobs`, `meta-jobs`, `tesla-jobs`. status enum: `active`, `empty`, `gone`, `blocked`, `pending`, `invalid`. sort enum: `open_desc`, `company_asc`, `crawled_desc`. Billing: this endpoint costs 1 credit per 10 records returned, rounded up, with a minimum of 1 (up to 10 records cost 1, a full page of 100 costs 10).", - "operationId": "datasets-jobs-companies", - "parameters": [ - { - "description": "Match on company name / domain", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Provider filter", - "enum": [ - "greenhouse", - "lever", - "ashby", - "workday", - "smartrecruiters", - "workable", - "recruitee", - "rippling", - "personio", - "teamtailor", - "oracle", - "ukg", - "icims", - "eightfold", - "gem", - "pinpoint", - "amazon-jobs", - "apple-jobs", - "google-jobs", - "meta-jobs", - "tesla-jobs" - ], - "in": "query", - "name": "provider", - "type": "string" - }, - { - "description": "Board status. Enum: active, empty, gone, blocked, pending, invalid", - "enum": [ - "active", - "empty", - "gone", - "blocked", - "pending", - "invalid" - ], - "in": "query", - "name": "status", - "type": "string" - }, - { - "description": "Minimum open roles", - "in": "query", - "name": "min_open_roles", - "type": "integer" - }, - { - "description": "Keep companies with recent certified DOL LCA filings (default false)", - "in": "query", - "name": "sponsors_visa", - "type": "boolean" + "description": "Returns Fanatics Collect's current and recent weekly and premier auction events -- the same short list the site's own header auction switcher and countdown banner show. This is the discovery endpoint for Search's auction_urn param: copy an event's urn value to browse every lot in that auction. A small, current/recent set (observed live: around 6 events), not a full historical archive -- older auctions' urn values found on a Search result or a GetListing response remain valid for Search even once they no longer appear here.", + "operationId": "fanaticscollect-auctions", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanaticscollect.auctionsResponseDoc" + } }, - { - "description": "Sort enum: open_desc, company_asc, crawled_desc", - "enum": [ - "open_desc", - "company_asc", - "crawled_desc" - ], - "in": "query", - "name": "sort", - "type": "string" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Page number, default 1", - "in": "query", - "name": "page", - "type": "integer" + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Page size, default 20, max 100", - "in": "query", - "name": "page_size", - "type": "integer" + "ApiKeyAuth": [] } ], + "summary": "List Fanatics Collect auction events", + "tags": [ + "Fanatics Collect" + ] + } + }, + "/fanaticscollect/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns every accepted value for GetListing's marketplace param -- WEEKLY, PREMIER, FIXED -- and for Search's marketplace, category_parent, sub_category, grading_service, status, and sort params. Discovery endpoint for those closed enums.", + "operationId": "fanaticscollect-categories", "produces": [ "application/json" ], @@ -327365,17 +401592,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.jobsCompaniesResponseDoc" + "$ref": "#/definitions/fanaticscollect.categoriesResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -327386,27 +401613,27 @@ "ApiKeyAuth": [] } ], - "summary": "Find which companies are hiring", + "summary": "List Fanatics Collect search filter values", "tags": [ - "Datasets" + "Fanatics Collect" ] } }, - "/datasets/jobs/companies/{id}": { + "/fanaticscollect/instant-packs/release": { "get": { "consumes": [ "application/json" ], - "description": "Returns one discovered company board by its dataset board id. When the company name matches recent public U.S. Department of Labor LCA disclosure data, the response includes `lca_sponsorship` with filing counts and observed fiscal-quarter range; this is company-level historical evidence, not a guarantee for a specific role or candidate. When the board carries a known domain, the response also includes a `tech_stack` firmographic hint. Returns 404 when the board id is not in the registry.", - "operationId": "datasets-jobs-company-item", + "description": "Returns a release's title, launch time, current status, checklist link and published odds by checklist ID. The price in cents appears when a price is published. Unknown checklists return 404. Discover the checklist ID with fanaticscollect-instant-pack-releases.", + "operationId": "fanaticscollect-instant-pack-release", "parameters": [ { - "description": "Dataset board id", - "in": "path", - "name": "id", + "description": "Checklist UUID from Instant Pack releases", + "in": "query", + "name": "checklist_id", "required": true, "type": "string", - "x-example": "icims:062ad50e489784f8d225" + "x-example": "abab8822-3131-4fb9-a535-49b9a1e7673a" } ], "produces": [ @@ -327416,7 +401643,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.jobsItemResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/fanaticscollect.InstantPackRelease" + } + }, + "type": "object" + } + ] } }, "400": { @@ -327431,8 +401670,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -327443,27 +401682,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single company by board id", + "summary": "Fanatics Collect Topps Instant Pack release details", "tags": [ - "Datasets" + "Fanatics Collect" ] } }, - "/datasets/jobs/facets": { + "/fanaticscollect/instant-packs/releases": { "get": { "consumes": [ "application/json" ], - "description": "Aggregations over all open postings: top companies hiring, breakdown by provider (every provider filterable via /datasets/jobs/search's `provider` param), department, location, employment type, skill, benefit, education, security clearance, seniority, and ESCO/ISCO job family, plus the remote share — a live hiring-market snapshot. Seniority uses one mutually exclusive value: `entry`, `mid`, or `senior`; ambiguous occupations are omitted from job-family buckets.", - "operationId": "datasets-jobs-facets", - "parameters": [ - { - "description": "Buckets per facet, default 20, max 100", - "in": "query", - "name": "size", - "type": "integer" - } - ], + "description": "Lists the Instant Packs releases currently published by Fanatics Collect with the release ID, checklist ID, launch time and listing ID when available. Pass a checklist ID to fanaticscollect-instant-pack-release for the product details, published checklist and pull odds.", + "operationId": "fanaticscollect-instant-pack-releases", "produces": [ "application/json" ], @@ -327471,17 +401702,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.jobsFacetResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/fanaticscollect.InstantPackReleasesResponse" + } + }, + "type": "object" + } + ] } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -327492,29 +401729,19 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the jobs dataset (hiring market aggregates)", + "summary": "Fanatics Collect Topps Instant Packs releases", "tags": [ - "Datasets" + "Fanatics Collect" ] } }, - "/datasets/jobs/items/{id}": { + "/fanaticscollect/instant-rips/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns one crawled job posting by its dataset posting id, the `posting_id` of a search result. Alongside the posting itself, `seniority_level` is `entry`, `mid` or `senior`, and occupation fields appear only when title and skills support a reliable match. An id not in the index returns 404.", - "operationId": "datasets-jobs-item", - "parameters": [ - { - "description": "Dataset posting id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "personio:8e850ee0967201fc1bf3:364429bb4364f43b" - } - ], + "description": "Returns every category Fanatics Collect's \"Instant Rips\" mystery-pack product (fanaticscollect.com/instant-rips) currently advertises on its homepage: id, name, and price range. Instant Rips is a \"buy a randomized pack, a real graded card is revealed\" product; each category's id is a real listing id, fetchable through GetListing with type=FIXED for that entry point's own full detail. This does not cover the individual pack-tier tiles within a category or the homepage's \"Recently ripped\" live feed.", + "operationId": "fanaticscollect-instant-rips-categories", "produces": [ "application/json" ], @@ -327522,23 +401749,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.jobsItemResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/fanaticscollect.instantRipsCategoriesResponseDoc" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -327549,90 +401770,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single posting from the jobs dataset", + "summary": "Get Fanatics Collect Instant Rips categories", "tags": [ - "Datasets" + "Fanatics Collect" ] } }, - "/datasets/jobs/nearby": { + "/fanaticscollect/instant-rips/pack-categories": { "get": { "consumes": [ "application/json" ], - "description": "Finds crawled job postings within `radius_km` of a `lat`/`lon`, nearest first. Only geocoded postings participate (the geo-enrich worker back-fills coordinates from each posting's location). Open roles only by default. provider enum: `greenhouse`, `lever`, `ashby`, `workday`, `smartrecruiters`, `workable`, `recruitee`, `rippling`, `personio`, `teamtailor`, `oracle`, `ukg`, `icims`, `eightfold`, `gem`, `pinpoint`, `amazon-jobs`, `apple-jobs`, `google-jobs`, `meta-jobs`, `tesla-jobs`. Billing: this endpoint costs 1 credit per 10 records returned, rounded up, with a minimum of 1 (up to 10 records cost 1, a full page of 100 costs 10).", - "operationId": "datasets-jobs-nearby", - "parameters": [ - { - "description": "Latitude, -90..90", - "in": "query", - "name": "lat", - "required": true, - "type": "number", - "x-example": 40.7484257 - }, - { - "description": "Longitude, -180..180", - "in": "query", - "name": "lon", - "required": true, - "type": "number", - "x-example": -73.98567 - }, - { - "description": "Search radius in km, default 50, max 500", - "in": "query", - "name": "radius_km", - "type": "number" - }, - { - "description": "Provider filter", - "enum": [ - "greenhouse", - "lever", - "ashby", - "workday", - "smartrecruiters", - "workable", - "recruitee", - "rippling", - "personio", - "teamtailor", - "oracle", - "ukg", - "icims", - "eightfold", - "gem", - "pinpoint", - "amazon-jobs", - "apple-jobs", - "google-jobs", - "meta-jobs", - "tesla-jobs" - ], - "in": "query", - "name": "provider", - "type": "string" - }, - { - "description": "Include closed/filled roles (default false)", - "in": "query", - "name": "include_closed", - "type": "boolean" - }, - { - "description": "Page number, default 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, default 20, max 100", - "in": "query", - "name": "page_size", - "type": "integer" - } - ], + "description": "List the categories from both Instant Rips catalog rails, including Limited Release when available. The category ID selects a pack catalog. The separate default listing ID identifies the marketplace listing linked from the category tile.", + "operationId": "fanaticscollect-instant-rips-pack-categories", "produces": [ "application/json" ], @@ -327640,7 +401790,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.jobsSearchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/fanaticscollect.InstantRipsPackCategoriesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -327649,8 +401811,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -327661,166 +401829,45 @@ "ApiKeyAuth": [] } ], - "summary": "Find postings near a coordinate", + "summary": "Fanatics Collect Instant Rips pack categories", "tags": [ - "Datasets" + "Fanatics Collect" ] } }, - "/datasets/jobs/search": { + "/fanaticscollect/instant-rips/pack-checklist": { "get": { "consumes": [ "application/json" ], - "description": "Full-text + faceted search over every job posting crawled from every discovered company ATS board (Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable, Recruitee, Rippling, Personio, Teamtailor, Oracle, UKG, iCIMS, Eightfold, Gem, Pinpoint) plus 5 single-company big-tech careers platforms (Amazon, Apple, Google, Meta, Tesla). Open roles only by default (set include_closed=true for historical/filled roles). Salary is parsed from a structured field when the provider has one, or from an explicit pay figure stated in the description otherwise, so coverage varies by posting rather than by provider; min_salary/max_salary filter on it and require salary_currency, since comparing raw compensation numbers across currencies is meaningless. Location is also exposed as structured city/state/country fields alongside the free-text location string, so city/state/country filter on an exact match of those parsed components rather than substring-matching the display string. job_family is an exact level-2 ISCO family label assigned from ESCO occupation evidence; ambiguous postings remain unclassified and do not match that filter. employment_type is never populated for google-jobs/meta-jobs, and posted_at (so sort=posted_desc) is never populated for meta-jobs/tesla-jobs -- their upstream APIs expose no such field. provider enum: `greenhouse`, `lever`, `ashby`, `workday`, `smartrecruiters`, `workable`, `recruitee`, `rippling`, `personio`, `teamtailor`, `oracle`, `ukg`, `icims`, `eightfold`, `gem`, `pinpoint`, `amazon-jobs`, `apple-jobs`, `google-jobs`, `meta-jobs`, `tesla-jobs`. workplace_type enum: `onsite`, `hybrid`, `remote`. sort enum: `relevance`, `posted_desc`, `company_asc`. Billing: this search costs 1 credit per 10 records returned, rounded up, with a minimum of 1 (up to 10 records cost 1, a full page of 100 costs 10).", - "operationId": "datasets-jobs-search", + "description": "Fetch up to 15 public card checklist rows for a Fanatics Collect pack checklist ID from fanaticscollect_instant_rips_packs. Each row can include card title, tier, year, brand, set, grade and population. Pass next_cursor with the same checklist_id and optional tier for the next page. An uncovered checklist can return an empty page.", + "operationId": "fanaticscollect-instant-rips-pack-checklist", "parameters": [ { - "description": "Full-text over title, company, description", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Company name match", - "in": "query", - "name": "company", - "type": "string" - }, - { - "description": "Provider filter", - "enum": [ - "greenhouse", - "lever", - "ashby", - "workday", - "smartrecruiters", - "workable", - "recruitee", - "rippling", - "personio", - "teamtailor", - "oracle", - "ukg", - "icims", - "eightfold", - "gem", - "pinpoint", - "amazon-jobs", - "apple-jobs", - "google-jobs", - "meta-jobs", - "tesla-jobs" - ], - "in": "query", - "name": "provider", - "type": "string" - }, - { - "description": "Exact department filter", - "in": "query", - "name": "department", - "type": "string" - }, - { - "description": "Location match", - "in": "query", - "name": "location", - "type": "string" - }, - { - "description": "Exact city filter (parsed location component)", - "in": "query", - "name": "city", - "type": "string" - }, - { - "description": "Exact state/region filter (parsed location component)", - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "Exact country filter (parsed location component); ISO country code or name, matched case-insensitively", - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Exact employment-type filter", - "in": "query", - "name": "employment_type", - "type": "string" - }, - { - "description": "Exact ESCO/ISCO job-family label filter", - "in": "query", - "name": "job_family", - "type": "string" - }, - { - "description": "Filter by remote (true or false)", + "description": "Checklist UUID from the Instant Rips pack catalog", "in": "query", - "name": "remote", - "type": "boolean" + "name": "checklist_id", + "required": true, + "type": "string", + "x-example": "24863312-ea79-42d5-ae75-830b3adf75ee" }, { - "description": "Workplace type filter", + "description": "Optional checklist tier", "enum": [ - "onsite", - "hybrid", - "remote" + "BASE", + "CHASE", + "GRAIL" ], "in": "query", - "name": "workplace_type", - "type": "string" - }, - { - "description": "Include closed/filled roles (default false = open only)", - "in": "query", - "name": "include_closed", - "type": "boolean" - }, - { - "description": "Minimum salary (matches postings whose range reaches at least this); requires salary_currency", - "in": "query", - "name": "min_salary", - "type": "number" - }, - { - "description": "Maximum salary (matches postings whose range starts at or below this); requires salary_currency", - "in": "query", - "name": "max_salary", - "type": "number" - }, - { - "description": "3-letter ISO currency code (e.g. USD) the min_salary/max_salary bounds are in; required when either bound is set", - "in": "query", - "name": "salary_currency", - "type": "string" + "name": "tier", + "type": "string", + "x-example": "GRAIL" }, { - "description": "Sort enum: relevance, posted_desc, company_asc", - "enum": [ - "relevance", - "posted_desc", - "company_asc" - ], + "description": "Opaque next_cursor from the previous page", "in": "query", - "name": "sort", + "name": "cursor", "type": "string" - }, - { - "description": "Page number, default 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, default 20, max 100; page*page_size must be <= 10000", - "in": "query", - "name": "page_size", - "type": "integer" } ], "produces": [ @@ -327830,7 +401877,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.jobsSearchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/fanaticscollect.PackChecklistResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -327839,8 +401898,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -327851,159 +401910,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search the jobs dataset (all companies' live postings)", + "summary": "Fanatics Collect Instant Rips card checklist", "tags": [ - "Datasets" + "Fanatics Collect" ] } }, - "/datasets/journalists/facets": { + "/fanaticscollect/instant-rips/packs": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns distribution counts over the journalists index (dataset id enum value `journalists`), honoring the same filters as search. Facet enum: `outlet`, `vertical`, `topic`, `contact_type`, `record_type`, `role_type`, `email_kind`, `outreach_readiness_band`. `facet=outlet` returns every outlet (up to 1000) in one response; other facets return their top 50 values. Facets are not paginated: `page` and `page_size` are ignored.", - "operationId": "datasets-journalists-facets", - "parameters": [ - { - "description": "Facet enum: outlet, vertical, topic, contact_type, record_type, role_type, email_kind, outreach_readiness_band", - "enum": [ - "outlet", - "vertical", - "topic", - "contact_type", - "record_type", - "role_type", - "email_kind", - "outreach_readiness_band" - ], - "in": "query", - "name": "facet", - "required": true, - "type": "string", - "x-example": "outlet" - }, - { - "description": "Full-text match on the journalist's name, title, and bio, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact outlet id filter", - "in": "query", - "name": "outlet", - "type": "string" - }, - { - "description": "Exact beat-vertical filter. Enum: tech, crypto, marketing, consumer_tech, consumer_policy, cybersecurity, health, gaming, climate, business, entertainment, sports, legal, science, politics, real_estate, automotive, travel, food, education, design, film_tv, fashion, music, personal_finance, tech_independent, culture_independent, local_news, construction, banking, retail, aerospace_defense, energy, agriculture, local_business, general_news", - "enum": [ - "tech", - "crypto", - "marketing", - "consumer_tech", - "consumer_policy", - "cybersecurity", - "health", - "gaming", - "climate", - "business", - "entertainment", - "sports", - "legal", - "science", - "politics", - "real_estate", - "automotive", - "travel", - "food", - "education", - "design", - "film_tv", - "fashion", - "music", - "personal_finance", - "tech_independent", - "culture_independent", - "local_news", - "construction", - "banking", - "retail", - "aerospace_defense", - "energy", - "agriculture", - "local_business", - "general_news" - ], - "in": "query", - "name": "vertical", - "type": "string" - }, - { - "description": "Exact topic filter", - "in": "query", - "name": "topic", - "type": "string" - }, - { - "description": "Contact-availability filter. Enum: email, social, none", - "enum": [ - "email", - "social", - "none" - ], - "in": "query", - "name": "contact_type", - "type": "string" - }, - { - "description": "Record classification filter. Enum: person, desk, organization, syndicated_byline, unknown", - "enum": [ - "person", - "desk", - "organization", - "syndicated_byline", - "unknown" - ], - "in": "query", - "name": "record_type", - "type": "string" - }, - { - "description": "Role classification filter. Enum: staff, editor, reporter, contributor, freelancer, columnist, non_editorial, unknown", - "enum": [ - "staff", - "editor", - "reporter", - "contributor", - "freelancer", - "columnist", - "non_editorial", - "unknown" - ], - "in": "query", - "name": "role_type", - "type": "string" - }, - { - "description": "Email semantics filter. Enum: individual_work, individual_personal_public, shared_desk, tips_or_submissions, outlet_generic, unknown", - "enum": [ - "individual_work", - "individual_personal_public", - "shared_desk", - "tips_or_submissions", - "outlet_generic", - "unknown" - ], - "in": "query", - "name": "email_kind", - "type": "string" - }, + "consumes": [ + "application/json" + ], + "description": "Fetch up to 15 public Instant Rips packs for a category UUID from fanaticscollect_instant_rips_pack_categories. Each row can include the pack checklist ID, listing ID, price, status, and published hit-rate tiers. Pass a checklist_id to fanaticscollect_recently_ripped to narrow reveal history. An empty list is valid.", + "operationId": "fanaticscollect-instant-rips-packs", + "parameters": [ { - "description": "Minimum outreach-readiness score, from 0 to 100", + "description": "Pack category UUID from pack category discovery", "in": "query", - "name": "min_outreach_readiness", - "type": "integer" + "name": "category_id", + "required": true, + "type": "string", + "x-example": "7474adad-381b-442b-b82a-45425f666ce7" } ], "produces": [ @@ -328013,7 +401940,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.journalistsFacetResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/fanaticscollect.InstantRipsPacksResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -328022,14 +401961,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -328040,35 +401979,26 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the journalists dataset", + "summary": "Fanatics Collect Instant Rips packs by category", "tags": [ - "Datasets" + "Fanatics Collect" ] } }, - "/datasets/journalists/items/{outlet}/{slug}": { + "/fanaticscollect/instant-rips/recently-ripped": { "get": { "consumes": [ "application/json" ], - "description": "Returns one journalist by outlet id and slug from dataset id enum value `journalists`. Returns 404 when the outlet is not supported or the journalist is not in the index.", - "operationId": "datasets-journalists-item", + "description": "Fetch up to 15 recent public Instant Rips card reveals with card and pack titles, item type, time and images. Omit checklist_id for the general feed or pass a pack checklist UUID from fanaticscollect_instant_rips_packs to narrow the feed. An uncovered pack can return an empty list.", + "operationId": "fanaticscollect-recently-ripped", "parameters": [ { - "description": "Outlet id, e.g. techcrunch. Use the ids returned by facets?facet=outlet", - "in": "path", - "name": "outlet", - "required": true, - "type": "string", - "x-example": "techcrunch" - }, - { - "description": "Journalist slug within the outlet, e.g. zack-whittaker", - "in": "path", - "name": "slug", - "required": true, + "description": "Pack checklist UUID from the pack catalog", + "in": "query", + "name": "checklist_id", "type": "string", - "x-example": "zack-whittaker" + "x-example": "24863312-ea79-42d5-ae75-830b3adf75ee" } ], "produces": [ @@ -328078,7 +402008,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.journalistsItemResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/fanaticscollect.RecentlyRippedResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -328093,14 +402035,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -328111,166 +402047,38 @@ "ApiKeyAuth": [] } ], - "summary": "Get a journalist from the journalists dataset", + "summary": "Fanatics Collect Recently Ripped cards", "tags": [ - "Datasets" + "Fanatics Collect" ] } }, - "/datasets/journalists/search": { + "/fanaticscollect/listing/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Searches the journalists index (dataset id enum value `journalists`) — public journalist and reporter records crawled from news outlets' own staff/author pages, for PR outreach. Each record carries the outlet, title, best-effort beat topics, and any public contact info found on that outlet's own page, plus deterministic record_type, role_type, email_kind, and outreach-readiness quality signals. There is no cross-outlet upstream search; this dataset is built by crawling a curated roster of outlets ourselves. vertical enum: `tech`, `crypto`, `marketing`, `consumer_tech`, `consumer_policy`, `cybersecurity`, `health`, `gaming`, `climate`, `business`, `entertainment`, `sports`, `legal`, `science`, `politics`, `real_estate`, `automotive`, `travel`, `food`, `education`, `design`, `film_tv`, `fashion`, `music`, `personal_finance`, `tech_independent`, `culture_independent`, `local_news`, `construction`, `banking`, `retail`, `aerospace_defense`, `energy`, `agriculture`, `local_business`. contact_type enum: `email`, `social`, `none`. record_type enum: `person`, `desk`, `organization`, `syndicated_byline`, `unknown`. role_type enum: `staff`, `editor`, `reporter`, `contributor`, `freelancer`, `columnist`, `non_editorial`, `unknown`. email_kind enum: `individual_work`, `individual_personal_public`, `shared_desk`, `tips_or_submissions`, `outlet_generic`, `unknown`. sort enum: `relevance`, `name_asc`, `outlet_asc`, `crawled_desc`, `readiness_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-journalists-search", + "description": "Returns full detail for a single Fanatics Collect listing: a weekly-auction lot, a premier-auction lot, or a fixed-price \"buy now\" item (including an Instant Rips pack). Fields include title, current bid/starting/asking price, bid count, auction window and status, images, description, completed sale history, and -- when the card is stored in Fanatics' vault -- grading/authentication metadata including a direct PSA cert-verification link. Costs 1 credit per successful call.", + "operationId": "fanaticscollect-listing", "parameters": [ { - "description": "Full-text match on the journalist's name, title, and bio, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact outlet id filter, e.g. techcrunch, coindesk. Use the ids returned by facets?facet=outlet", - "in": "query", - "name": "outlet", - "type": "string" - }, - { - "description": "Exact beat-vertical filter. Enum: tech, crypto, marketing, consumer_tech, consumer_policy, cybersecurity, health, gaming, climate, business, entertainment, sports, legal, science, politics, real_estate, automotive, travel, food, education, design, film_tv, fashion, music, personal_finance, tech_independent, culture_independent, local_news, construction, banking, retail, aerospace_defense, energy, agriculture, local_business, general_news", - "enum": [ - "tech", - "crypto", - "marketing", - "consumer_tech", - "consumer_policy", - "cybersecurity", - "health", - "gaming", - "climate", - "business", - "entertainment", - "sports", - "legal", - "science", - "politics", - "real_estate", - "automotive", - "travel", - "food", - "education", - "design", - "film_tv", - "fashion", - "music", - "personal_finance", - "tech_independent", - "culture_independent", - "local_news", - "construction", - "banking", - "retail", - "aerospace_defense", - "energy", - "agriculture", - "local_business", - "general_news" - ], - "in": "query", - "name": "vertical", - "type": "string" - }, - { - "description": "Exact topic filter, e.g. security, stablecoins. Use the values returned by facets?facet=topic", - "in": "query", - "name": "topic", - "type": "string" - }, - { - "description": "Contact-availability filter. Enum: email, social, none", - "enum": [ - "email", - "social", - "none" - ], - "in": "query", - "name": "contact_type", - "type": "string" - }, - { - "description": "Record classification filter. Enum: person, desk, organization, syndicated_byline, unknown", - "enum": [ - "person", - "desk", - "organization", - "syndicated_byline", - "unknown" - ], - "in": "query", - "name": "record_type", - "type": "string" - }, - { - "description": "Role classification filter. Enum: staff, editor, reporter, contributor, freelancer, columnist, non_editorial, unknown", - "enum": [ - "staff", - "editor", - "reporter", - "contributor", - "freelancer", - "columnist", - "non_editorial", - "unknown" - ], - "in": "query", - "name": "role_type", - "type": "string" - }, - { - "description": "Email semantics filter. Enum: individual_work, individual_personal_public, shared_desk, tips_or_submissions, outlet_generic, unknown", - "enum": [ - "individual_work", - "individual_personal_public", - "shared_desk", - "tips_or_submissions", - "outlet_generic", - "unknown" - ], - "in": "query", - "name": "email_kind", - "type": "string" - }, - { - "description": "Minimum outreach-readiness score, from 0 to 100", - "in": "query", - "name": "min_outreach_readiness", - "type": "integer" + "description": "Listing UUID", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "1e389d12-6f23-11ed-9d8b-0a58a9feac02" }, { - "description": "Sort enum: relevance, name_asc, outlet_asc, crawled_desc, readiness_desc", + "description": "Listing type. Default: WEEKLY", "enum": [ - "relevance", - "name_asc", - "outlet_asc", - "crawled_desc", - "readiness_desc" + "WEEKLY", + "PREMIER", + "FIXED" ], "in": "query", - "name": "sort", + "name": "type", "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", - "in": "query", - "name": "page_size", - "type": "integer" } ], "produces": [ @@ -328280,23 +402088,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.journalistsSearchResponseDoc" + "$ref": "#/definitions/fanaticscollect.listingResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid path/query parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Listing not found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Fanatics Collect upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -328307,312 +402127,51 @@ "ApiKeyAuth": [] } ], - "summary": "Search the journalists dataset", + "summary": "Get Fanatics Collect listing detail", "tags": [ - "Datasets" + "Fanatics Collect" ] } }, - "/datasets/llms/facets": { + "/fanaticscollect/newsroom": { "get": { "consumes": [ "application/json" ], - "description": "Returns distribution counts over the AI-readiness census (dataset id enum value `llms`), honoring the same filters as search — adoption by producer, generator, TLD or category, and which AI crawlers robots.txt blocks. Facet enum: `state`, `source_kind`, `generator`, `bot`, `policy`, `tld`, `category`, `robots_state`, `robots_default`, `blocked_crawler`, `partial_crawler`, `content_signal_train`, `full_state`, `home_status`. The filter enums are the same as search. Counts include `blocked` and `error` probes, which are unknown rather than absent; filter `state=present` or `state=absent` to count only sites that were established either way.", - "operationId": "datasets-llms-facets", + "description": "List public Fanatics Collect newsroom posts with title, publication time, category, link and images when available. Page starts at 1. Use fanaticscollect_newsroom_filters to discover category and tag IDs and pass multiple IDs separated by hyphens. Sort newest first by default or choose oldest. An empty page is valid.", + "operationId": "fanaticscollect-newsroom", "parameters": [ { - "description": "Facet enum: state, source_kind, generator, bot, policy, tld, category, robots_state, robots_default, blocked_crawler, partial_crawler, content_signal_train, full_state, home_status", - "enum": [ - "state", - "source_kind", - "generator", - "bot", - "policy", - "tld", - "category", - "robots_state", - "robots_default", - "blocked_crawler", - "partial_crawler", - "content_signal_train", - "full_state", - "home_status" - ], - "in": "query", - "name": "facet", - "required": true, - "type": "string", - "x-example": "source_kind" - }, - { - "description": "Substring match on the site domain, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Full-text match on the /llms.txt title and summary, max 256 characters", - "in": "query", - "name": "text", - "type": "string" - }, - { - "description": "/llms.txt state. Enum: present, absent, blocked, error, skipped. blocked and error mean unknown, not absent", - "enum": [ - "present", - "absent", - "blocked", - "error", - "skipped" - ], - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "true keeps only sites serving a valid /llms.txt, false keeps the rest", - "in": "query", - "name": "valid", - "type": "boolean" - }, - { - "description": "Producer of a valid /llms.txt. Enum: shopify_agent_template, seo_plugin, platform_default, parked, custom", - "enum": [ - "shopify_agent_template", - "seo_plugin", - "platform_default", - "parked", - "custom" - ], - "in": "query", - "name": "source_kind", - "type": "string" - }, - { - "description": "Generator detected in a valid /llms.txt. Enum: yoast, aioseo, rankmath, wix, shopify, parked", - "enum": [ - "yoast", - "aioseo", - "rankmath", - "wix", - "shopify", - "parked" - ], - "in": "query", - "name": "generator", - "type": "string" - }, - { - "description": "AI crawler named inside a valid /llms.txt, e.g. GPTBot (see facet=bot for the values)", - "in": "query", - "name": "bot", - "type": "string" - }, - { - "description": "Minimum number of links in a valid /llms.txt, 0 or greater", - "in": "query", - "name": "min_links", - "type": "integer" - }, - { - "description": "true keeps only valid /llms.txt files that mention the Model Context Protocol", - "in": "query", - "name": "mentions_mcp", - "type": "boolean" - }, - { - "description": "true keeps only valid /llms.txt files that mention OpenAPI or Swagger", - "in": "query", - "name": "mentions_openapi", - "type": "boolean" - }, - { - "description": "true keeps only valid /llms.txt files that still hold template placeholder text", - "in": "query", - "name": "placeholder", - "type": "boolean" - }, - { - "description": "true keeps only valid /llms.txt files containing instruction-override text aimed at AI readers", - "in": "query", - "name": "injection", - "type": "boolean" - }, - { - "description": "true keeps only sites serving a valid /llms-full.txt", - "in": "query", - "name": "full_valid", - "type": "boolean" - }, - { - "description": "/robots.txt state. Enum: present, absent, blocked, error, skipped", - "enum": [ - "present", - "absent", - "blocked", - "error", - "skipped" - ], - "in": "query", - "name": "robots_state", - "type": "string" - }, - { - "description": "Default stance of robots.txt toward AI crawlers. Enum: allowed, partial, blocked", - "enum": [ - "allowed", - "partial", - "blocked" - ], - "in": "query", - "name": "robots_default", - "type": "string" - }, - { - "collectionFormat": "csv", - "description": "Repeatable AI crawler that robots.txt must block (AND). Enum: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, anthropic-ai, Google-Extended, PerplexityBot, Perplexity-User, CCBot, Bytespider, Applebot-Extended, Amazonbot, meta-externalagent, cohere-ai, Diffbot", - "in": "query", - "items": { - "enum": [ - "GPTBot", - "OAI-SearchBot", - "ChatGPT-User", - "ClaudeBot", - "Claude-SearchBot", - "Claude-User", - "anthropic-ai", - "Google-Extended", - "PerplexityBot", - "Perplexity-User", - "CCBot", - "Bytespider", - "Applebot-Extended", - "Amazonbot", - "meta-externalagent", - "cohere-ai", - "Diffbot" - ], - "type": "string" - }, - "name": "blocks_all", - "type": "array" - }, - { - "collectionFormat": "csv", - "description": "Repeatable AI crawler; robots.txt must block at least one (OR). Enum: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, anthropic-ai, Google-Extended, PerplexityBot, Perplexity-User, CCBot, Bytespider, Applebot-Extended, Amazonbot, meta-externalagent, cohere-ai, Diffbot", - "in": "query", - "items": { - "enum": [ - "GPTBot", - "OAI-SearchBot", - "ChatGPT-User", - "ClaudeBot", - "Claude-SearchBot", - "Claude-User", - "anthropic-ai", - "Google-Extended", - "PerplexityBot", - "Perplexity-User", - "CCBot", - "Bytespider", - "Applebot-Extended", - "Amazonbot", - "meta-externalagent", - "cohere-ai", - "Diffbot" - ], - "type": "string" - }, - "name": "blocks_any", - "type": "array" - }, - { - "collectionFormat": "csv", - "description": "Repeatable AI crawler that robots.txt must NOT block. Enum: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, anthropic-ai, Google-Extended, PerplexityBot, Perplexity-User, CCBot, Bytespider, Applebot-Extended, Amazonbot, meta-externalagent, cohere-ai, Diffbot", + "description": "1-based page number", "in": "query", - "items": { - "enum": [ - "GPTBot", - "OAI-SearchBot", - "ChatGPT-User", - "ClaudeBot", - "Claude-SearchBot", - "Claude-User", - "anthropic-ai", - "Google-Extended", - "PerplexityBot", - "Perplexity-User", - "CCBot", - "Bytespider", - "Applebot-Extended", - "Amazonbot", - "meta-externalagent", - "cohere-ai", - "Diffbot" - ], - "type": "string" - }, - "name": "not_blocked", - "type": "array" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "true keeps only sites whose robots.txt blocks all 17 tracked AI crawlers", + "description": "Category ID or hyphen-separated IDs", "in": "query", - "name": "all_ai_blocked", - "type": "boolean" + "name": "category", + "type": "string", + "x-example": "14-12" }, { - "description": "Minimum number of AI training crawlers (of 11 tracked) that robots.txt blocks, 0 or greater", + "description": "Tag ID or hyphen-separated IDs", "in": "query", - "name": "min_train_blocked", - "type": "integer" + "name": "tags", + "type": "string", + "x-example": "57" }, { - "description": "Content-Signal ai-train value declared in robots.txt. Enum: yes, no", + "description": "Publication sort order", "enum": [ - "yes", - "no" + "newest", + "oldest" ], "in": "query", - "name": "content_signal_train", - "type": "string" - }, - { - "description": "Exact top-level-domain filter, e.g. com, org, io", - "in": "query", - "name": "tld", - "type": "string" - }, - { - "description": "Exact category label carried by the source list; the top-1M run has none, so this is empty for it", - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "true keeps only sites whose homepage control request answered, false only sites that did not", - "in": "query", - "name": "reachable", - "type": "boolean" - }, - { - "description": "true keeps only sites whose homepage was walled off from the scan (a block or challenge)", - "in": "query", - "name": "home_blocked", - "type": "boolean" - }, - { - "description": "false (the common case) excludes backend CDN/DNS/cloud-vendor hostnames that rank highly but serve no public homepage; true keeps only those", - "in": "query", - "name": "is_infrastructure", - "type": "boolean" - }, - { - "description": "Scan run id; defaults to the latest run", - "in": "query", - "name": "run_id", - "type": "string" + "name": "sort_by", + "type": "string", + "x-example": "newest" } ], "produces": [ @@ -328622,7 +402181,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.llmsFacetResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/fanaticscollect.NewsroomResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -328631,14 +402202,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -328649,29 +402220,19 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the AI-readiness (llms.txt) dataset", + "summary": "Fanatics Collect newsroom article metadata", "tags": [ - "Datasets" + "Fanatics Collect" ] } }, - "/datasets/llms/items/{domain}": { + "/fanaticscollect/newsroom/filters": { "get": { "consumes": [ "application/json" ], - "description": "Returns one site by its domain from dataset id enum value `llms`, including the stored `/llms.txt` and `/llms-full.txt` bodies (`llms.body`, `full.body`; `body_truncated` marks a cut file, and a file flagged as an instruction override has its title, summary, and body withheld with `body_withheld` set to `injection`), their structure and classification, and the `/robots.txt` stance toward each tracked AI crawler. Returns 404 when the domain is not in the dataset or its owner asked for removal (privacy@crawlora.net).", - "operationId": "datasets-llms-item", - "parameters": [ - { - "description": "Site domain, e.g. shopify.com (a scheme and www. are stripped)", - "in": "path", - "name": "domain", - "required": true, - "type": "string", - "x-example": "shopify.com" - } - ], + "description": "Discover the newsroom category and tag IDs, labels and supported publication sort orders. Pass these IDs to fanaticscollect_newsroom to filter its paginated article metadata. This operation takes no parameters and reads the current archive filter catalog.", + "operationId": "fanaticscollect-newsroom-filters", "produces": [ "application/json" ], @@ -328679,7 +402240,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.llmsItemResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/fanaticscollect.NewsroomFiltersResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -328694,14 +402267,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -328712,313 +402279,208 @@ "ApiKeyAuth": [] } ], - "summary": "Get a site from the AI-readiness (llms.txt) dataset", + "summary": "Fanatics Collect newsroom filter discovery", "tags": [ - "Datasets" + "Fanatics Collect" ] } }, - "/datasets/llms/search": { + "/fanaticscollect/search": { "get": { "consumes": [ "application/json" ], - "description": "Searches the AI-readiness census of the top 1M sites (dataset id enum value `llms`) — one record per site describing whether it serves a real `/llms.txt` or `/llms-full.txt` (who produced it, what it links to and mentions) and what its `/robots.txt` says to 17 AI crawlers, next to a homepage control request. Search results omit the file bodies; read one site with the item endpoint. `blocked` and `error` states mean unknown, never absent. Sort enum: `relevance`, `rank_asc`, `links_desc`, `bytes_desc`, `domain_asc`, `crawled_desc`. state and robots_state enum: `present`, `absent`, `blocked`, `error`, `skipped`. source_kind enum: `shopify_agent_template`, `seo_plugin`, `platform_default`, `parked`, `custom`. generator enum: `yoast`, `aioseo`, `rankmath`, `wix`, `shopify`, `parked`. robots_default enum: `allowed`, `partial`, `blocked`. content_signal_train enum: `yes`, `no`. Crawler enum for blocks_all, blocks_any and not_blocked: `GPTBot`, `OAI-SearchBot`, `ChatGPT-User`, `ClaudeBot`, `Claude-SearchBot`, `Claude-User`, `anthropic-ai`, `Google-Extended`, `PerplexityBot`, `Perplexity-User`, `CCBot`, `Bytespider`, `Applebot-Extended`, `Amazonbot`, `meta-externalagent`, `cohere-ai`, `Diffbot`. Site owners can ask for removal at privacy@crawlora.net. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-llms-search", + "description": "Searches Fanatics Collect's full marketplace -- weekly auctions, premier auctions, and the fixed-price \"Buy Now\" marketplace -- by free-text query, category, grading service, price/year/grade range, and listing status, in a caller-selected sort order. Only the first 2,400 or so results of a query can be paged through; later pages come back empty and are not charged, so narrow the query with filters. Costs 1 credit per successful call. See GetCategories for the accepted category, grading-service, status, and sort values.", + "operationId": "fanaticscollect-search", "parameters": [ { - "description": "Substring match on the site domain, max 256 characters", + "description": "Free-text search across title, brand, subject, and set", "in": "query", "name": "q", - "type": "string" - }, - { - "description": "Full-text match on the /llms.txt title and summary, max 256 characters", - "in": "query", - "name": "text", - "type": "string" + "type": "string", + "x-example": "aaron judge" }, { - "description": "/llms.txt state. Enum: present, absent, blocked, error, skipped. blocked and error mean unknown, not absent", + "description": "Listing type. Omit to search all three.", "enum": [ - "present", - "absent", - "blocked", - "error", - "skipped" + "WEEKLY", + "PREMIER", + "FIXED" ], "in": "query", - "name": "state", + "name": "marketplace", "type": "string" }, { - "description": "true keeps only sites serving a valid /llms.txt, false keeps the rest", - "in": "query", - "name": "valid", - "type": "boolean" - }, - { - "description": "Producer of a valid /llms.txt. Enum: shopify_agent_template, seo_plugin, platform_default, parked, custom", + "description": "Top-level category", "enum": [ - "shopify_agent_template", - "seo_plugin", - "platform_default", - "parked", - "custom" + "Sports Cards", + "Trading Card Games", + "Other", + "Video Games", + "Comics" ], "in": "query", - "name": "source_kind", + "name": "category_parent", "type": "string" }, { - "description": "Generator detected in a valid /llms.txt. Enum: yoast, aioseo, rankmath, wix, shopify, parked", - "enum": [ - "yoast", - "aioseo", - "rankmath", - "wix", - "shopify", - "parked" - ], + "description": "A parent > child category path (or just the child name), e.g. \\", "in": "query", - "name": "generator", + "name": "sub_category", "type": "string" }, { - "description": "AI crawler named inside a valid /llms.txt, e.g. GPTBot (see facet=bot for the values)", + "description": "Grading/authentication service", + "enum": [ + "Ungraded", + "CGC", + "PSA", + "BGS", + "SGC", + "Other Approved", + "PSA/DNA", + "CSG", + "MBA", + "PSA_DNA", + "BVG", + "OTHER_APPROVED", + "BCCG", + "WATA", + "GAI", + "VGA", + "CBCS", + "UDA", + "CAC", + "KSA", + "PCGS" + ], "in": "query", - "name": "bot", + "name": "grading_service", "type": "string" }, { - "description": "Minimum number of links in a valid /llms.txt, 0 or greater", - "in": "query", - "name": "min_links", - "type": "integer" - }, - { - "description": "true keeps only valid /llms.txt files that mention the Model Context Protocol", - "in": "query", - "name": "mentions_mcp", - "type": "boolean" - }, - { - "description": "true keeps only valid /llms.txt files that mention OpenAPI or Swagger", - "in": "query", - "name": "mentions_openapi", - "type": "boolean" - }, - { - "description": "true keeps only valid /llms.txt files that still hold template placeholder text", + "description": "Exact seller/shop name (case-insensitive). Not a fixed enum -- match a name from a prior Search result's certified_seller field.", "in": "query", - "name": "placeholder", - "type": "boolean" + "name": "certified_seller", + "type": "string", + "x-example": "Fanatics Collect" }, { - "description": "true keeps only valid /llms.txt files containing instruction-override text aimed at AI readers", + "description": "Exact seller id (UUID) -- browse everything one seller has listed. Not a fixed enum; match a prior Search result's seller_id field.", "in": "query", - "name": "injection", - "type": "boolean" + "name": "seller_id", + "type": "string", + "x-example": "4216b44a-9696-4263-96c3-5f58eeb9a316" }, { - "description": "true keeps only sites serving a valid /llms-full.txt", + "description": "Exact brand/subject facet value (case-insensitive), e.g. a player, character, or set name. Not a fixed enum; match a prior Search result's brand field.", "in": "query", - "name": "full_valid", - "type": "boolean" + "name": "brand", + "type": "string", + "x-example": "Michael Jordan" }, { - "description": "/robots.txt state. Enum: present, absent, blocked, error, skipped", - "enum": [ - "present", - "absent", - "blocked", - "error", - "skipped" - ], + "description": "Browse every lot in one specific weekly or premier auction event. Not a fixed enum; copy the exact value from a prior Search result's auction_urn field. Only WEEKLY/PREMIER listings carry one.", "in": "query", - "name": "robots_state", - "type": "string" + "name": "auction_urn", + "type": "string", + "x-example": "WEEKLY:fb70389e-1c67-11f1-90df-0ab83224f98f" }, { - "description": "Default stance of robots.txt toward AI crawlers. Enum: allowed, partial, blocked", + "description": "Listing status. Default LIVE.", "enum": [ - "allowed", - "partial", - "blocked" + "LIVE", + "SOLD", + "ALL" ], "in": "query", - "name": "robots_default", + "name": "status", "type": "string" }, { - "collectionFormat": "csv", - "description": "Repeatable AI crawler that robots.txt must block (AND). Enum: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, anthropic-ai, Google-Extended, PerplexityBot, Perplexity-User, CCBot, Bytespider, Applebot-Extended, Amazonbot, meta-externalagent, cohere-ai, Diffbot", - "in": "query", - "items": { - "enum": [ - "GPTBot", - "OAI-SearchBot", - "ChatGPT-User", - "ClaudeBot", - "Claude-SearchBot", - "Claude-User", - "anthropic-ai", - "Google-Extended", - "PerplexityBot", - "Perplexity-User", - "CCBot", - "Bytespider", - "Applebot-Extended", - "Amazonbot", - "meta-externalagent", - "cohere-ai", - "Diffbot" - ], - "type": "string" - }, - "name": "blocks_all", - "type": "array" - }, - { - "collectionFormat": "csv", - "description": "Repeatable AI crawler; robots.txt must block at least one (OR). Enum: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, anthropic-ai, Google-Extended, PerplexityBot, Perplexity-User, CCBot, Bytespider, Applebot-Extended, Amazonbot, meta-externalagent, cohere-ai, Diffbot", - "in": "query", - "items": { - "enum": [ - "GPTBot", - "OAI-SearchBot", - "ChatGPT-User", - "ClaudeBot", - "Claude-SearchBot", - "Claude-User", - "anthropic-ai", - "Google-Extended", - "PerplexityBot", - "Perplexity-User", - "CCBot", - "Bytespider", - "Applebot-Extended", - "Amazonbot", - "meta-externalagent", - "cohere-ai", - "Diffbot" - ], - "type": "string" - }, - "name": "blocks_any", - "type": "array" - }, - { - "collectionFormat": "csv", - "description": "Repeatable AI crawler that robots.txt must NOT block. Enum: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, Claude-User, anthropic-ai, Google-Extended, PerplexityBot, Perplexity-User, CCBot, Bytespider, Applebot-Extended, Amazonbot, meta-externalagent, cohere-ai, Diffbot", - "in": "query", - "items": { - "enum": [ - "GPTBot", - "OAI-SearchBot", - "ChatGPT-User", - "ClaudeBot", - "Claude-SearchBot", - "Claude-User", - "anthropic-ai", - "Google-Extended", - "PerplexityBot", - "Perplexity-User", - "CCBot", - "Bytespider", - "Applebot-Extended", - "Amazonbot", - "meta-externalagent", - "cohere-ai", - "Diffbot" - ], - "type": "string" - }, - "name": "not_blocked", - "type": "array" - }, - { - "description": "true keeps only sites whose robots.txt blocks all 17 tracked AI crawlers", + "description": "Filter for listings the seller accepts offers on", "in": "query", - "name": "all_ai_blocked", + "name": "allow_offers", "type": "boolean" }, { - "description": "Minimum number of AI training crawlers (of 11 tracked) that robots.txt blocks, 0 or greater", + "description": "Filter for listings with at least one active offer pending", "in": "query", - "name": "min_train_blocked", - "type": "integer" + "name": "has_offers", + "type": "boolean" }, { - "description": "Content-Signal ai-train value declared in robots.txt. Enum: yes, no", - "enum": [ - "yes", - "no" - ], + "description": "Filter for listings Fanatics Collect itself flags as a great price vs. guide value", "in": "query", - "name": "content_signal_train", - "type": "string" + "name": "great_price", + "type": "boolean" }, { - "description": "Exact top-level-domain filter, e.g. com, org, io", + "description": "Minimum current price/bid, inclusive", "in": "query", - "name": "tld", - "type": "string" + "name": "min_price", + "type": "number" }, { - "description": "Exact category label carried by the source list; the top-1M run has none, so this is empty for it", + "description": "Maximum current price/bid, inclusive", "in": "query", - "name": "category", - "type": "string" + "name": "max_price", + "type": "number" }, { - "description": "true keeps only sites whose homepage control request answered, false only sites that did not", + "description": "Minimum card/item year, inclusive", "in": "query", - "name": "reachable", - "type": "boolean" + "name": "min_year", + "type": "integer" }, { - "description": "true keeps only sites whose homepage was walled off from the scan (a block or challenge)", + "description": "Maximum card/item year, inclusive", "in": "query", - "name": "home_blocked", - "type": "boolean" + "name": "max_year", + "type": "integer" }, { - "description": "false (the common case) excludes backend CDN/DNS/cloud-vendor hostnames that rank highly but serve no public homepage; true keeps only those", + "description": "Minimum numeric grade, inclusive", "in": "query", - "name": "is_infrastructure", - "type": "boolean" + "name": "min_grade", + "type": "number" }, { - "description": "Scan run id; defaults to the latest run", + "description": "Maximum numeric grade, inclusive", "in": "query", - "name": "run_id", - "type": "string" + "name": "max_grade", + "type": "number" }, { - "description": "Sort enum: relevance, rank_asc, links_desc, bytes_desc, domain_asc, crawled_desc", + "description": "Result order. Default best_value.", "enum": [ - "relevance", - "rank_asc", - "links_desc", - "bytes_desc", - "domain_asc", - "crawled_desc" + "recommended", + "recently_added", + "best_deals", + "lot_number", + "lowest_price", + "highest_price", + "best_value", + "earliest_year", + "latest_year", + "earliest_sale_date", + "latest_sale_date" ], "in": "query", "name": "sort", "type": "string" }, { - "description": "Page number, defaults to 1", + "description": "1-based page number, default 1", "in": "query", "name": "page", "type": "integer" }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Results per page, default 24, max 100", "in": "query", - "name": "page_size", + "name": "per_page", "type": "integer" } ], @@ -329029,7 +402491,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.llmsSearchResponseDoc" + "$ref": "#/definitions/fanaticscollect.searchResponseDoc" } }, "400": { @@ -329038,14 +402500,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -329056,96 +402518,131 @@ "ApiKeyAuth": [] } ], - "summary": "Search the AI-readiness (llms.txt) dataset", + "summary": "Search Fanatics Collect listings", "tags": [ - "Datasets" + "Fanatics Collect" ] } }, - "/datasets/numbeo-cities/facets": { + "/fanaticscollect/sold-items": { "get": { "consumes": [ "application/json" ], - "description": "Returns city counts per country for the Numbeo cities dataset; `facet` is required and accepts only `country`. Narrow the counts with `q`, `country` and index thresholds such as `min_cost_of_living_index`, `min_safety_index` or `max_pollution_index`. Items are value and count pairs.", - "operationId": "datasets-numbeo-cities-facets", + "description": "Searches Fanatics Collect's sales-history archive -- every completed sale across every marketplace, not just what the live search index currently surfaces. A separate product from Search, reached from the \"View all sold items\" link on every marketplace search page. purchase_price is what the buyer paid in US dollars: for WEEKLY and PREMIER auction sales it includes the buyer's premium, so it is higher than the listing's final bid; for FIXED sales it equals the asking price. Only the first 1,000 results of a query can be paged through; later pages come back empty and are not charged, so narrow the query with filters to reach older sales. Costs 3 credits per successful call. See GetCategories for the accepted category, grading-service, eye-appeal-grade, and sort values.", + "operationId": "fanaticscollect-sold-items", "parameters": [ { - "description": "Facet enum: country", - "enum": [ - "country" - ], + "description": "Free-text search across item title", "in": "query", - "name": "facet", - "required": true, + "name": "title", "type": "string", - "x-example": "country" + "x-example": "aaron judge" }, { - "description": "Full-text query over the city name, max 256 characters", + "description": "Item category", + "enum": [ + "Trading Cards", + "Baseball", + "Basketball", + "Football", + "Hockey", + "Golf", + "Boxing & MMA", + "Soccer", + "Tennis", + "Racing", + "Misc Sports", + "Non-Sport", + "Yu-Gi-Oh!", + "Magic The Gathering", + "Pokémon", + "Collectible Card Games", + "Miscellaneous", + "Memorabilia", + "Photos", + "Comics", + "Tickets", + "Coins", + "Video Games" + ], "in": "query", - "name": "q", + "name": "category", "type": "string" }, { - "description": "Exact country filter, max 128 characters", + "description": "Grading/authentication service, including ungraded for raw items", + "enum": [ + "PSA", + "SGC", + "BGS", + "BVG", + "BCCG", + "CGC", + "CSG", + "ungraded" + ], "in": "query", - "name": "country", + "name": "grading_service", "type": "string" }, { - "description": "Minimum Cost of Living Index (New York = 100)", - "in": "query", - "name": "min_cost_of_living_index", - "type": "number" - }, - { - "description": "Maximum Cost of Living Index (New York = 100)", + "description": "Eye-appeal grade", + "enum": [ + "Eye Appeal - A", + "Eye Appeal - E", + "Eye Appeal - S" + ], "in": "query", - "name": "max_cost_of_living_index", - "type": "number" + "name": "eye_appeal_grade", + "type": "string" }, { - "description": "Minimum Quality of Life Index", + "description": "Minimum card/item year, inclusive", "in": "query", - "name": "min_quality_of_life_index", - "type": "number" + "name": "min_year", + "type": "integer" }, { - "description": "Minimum Crime Index", + "description": "Maximum card/item year, inclusive", "in": "query", - "name": "min_crime_index", - "type": "number" + "name": "max_year", + "type": "integer" }, { - "description": "Maximum Crime Index", + "description": "Minimum sold price, inclusive", "in": "query", - "name": "max_crime_index", + "name": "min_price", "type": "number" }, { - "description": "Minimum Safety Index", + "description": "Maximum sold price, inclusive", "in": "query", - "name": "min_safety_index", + "name": "max_price", "type": "number" }, { - "description": "Minimum Health Care Index", + "description": "Result order. Default sold_date_desc.", + "enum": [ + "sold_date_desc", + "highest_price", + "lowest_price" + ], "in": "query", - "name": "min_health_care_index", - "type": "number" + "name": "sort", + "type": "string" }, { - "description": "Maximum Pollution Index", + "description": "1-based page number, default 1", "in": "query", - "name": "max_pollution_index", - "type": "number" + "name": "page", + "type": "integer" }, { - "description": "Maximum Traffic Index", + "description": "Results per page, default 20, max 50; larger values are lowered to 50", "in": "query", - "name": "max_traffic_index", - "type": "number" + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -329155,7 +402652,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.numbeoCitiesFacetResponseDoc" + "$ref": "#/definitions/fanaticscollect.soldItemsResponseDoc" } }, "400": { @@ -329164,14 +402661,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -329182,27 +402679,26 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the Numbeo cities dataset", + "summary": "Search Fanatics Collect sold items", "tags": [ - "Datasets" + "Fanatics Collect" ] } }, - "/datasets/numbeo-cities/items/{slug}": { + "/fanaticscollect/trending-searches": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Numbeo city from the dataset by `slug` such as `Los-Angeles`. The record has the city, country, `coverage` list and the cost of living, rent, quality of life, crime, safety, health care, pollution, traffic and property indices. Indices appear only where the city was ranked.", - "operationId": "datasets-numbeo-cities-item", + "description": "Returns Fanatics Collect's own currently trending search terms -- the same list shown in the site's own header search box before the visitor types anything.", + "operationId": "fanaticscollect-trending-searches", "parameters": [ { - "description": "Numbeo city slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "Los-Angeles" + "description": "Number of terms to return, 1-50, default 8", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 8 } ], "produces": [ @@ -329212,7 +402708,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.numbeoCityResponseDoc" + "$ref": "#/definitions/fanaticscollect.trendingSearchesResponseDoc" } }, "400": { @@ -329221,20 +402717,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -329245,114 +402735,52 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Numbeo city from the dataset", + "summary": "Get Fanatics Collect trending search terms", "tags": [ - "Datasets" + "Fanatics Collect" ] } }, - "/datasets/numbeo-cities/search": { + "/fanaticslive/browse": { "get": { "consumes": [ "application/json" ], - "description": "Searches the composite Numbeo cities dataset, merged from the current global rankings of all seven index families (cost of living, quality of life, crime, health care, pollution, traffic, property investment). A city appears once it is ranked by at least one family; coverage varies per city. Sort enum: `name_asc`, `cost_of_living_asc`, `cost_of_living_desc`, `quality_of_life_desc`, `safety_desc`, `crime_asc`, `health_care_desc`, `pollution_asc`, `traffic_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-numbeo-cities-search", + "description": "Returns the live and upcoming shows currently listed under a Fanatics Live league: name, status, cover image, viewers, and the hosting channel/shop.", + "operationId": "fanaticslive-browse", "parameters": [ { - "description": "Full-text query over the city name, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact country filter, max 128 characters", - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Minimum Cost of Living Index (New York = 100)", - "in": "query", - "name": "min_cost_of_living_index", - "type": "number" - }, - { - "description": "Maximum Cost of Living Index (New York = 100)", - "in": "query", - "name": "max_cost_of_living_index", - "type": "number" - }, - { - "description": "Minimum Quality of Life Index", - "in": "query", - "name": "min_quality_of_life_index", - "type": "number" - }, - { - "description": "Minimum Crime Index", - "in": "query", - "name": "min_crime_index", - "type": "number" - }, - { - "description": "Maximum Crime Index", - "in": "query", - "name": "max_crime_index", - "type": "number" - }, - { - "description": "Minimum Safety Index", - "in": "query", - "name": "min_safety_index", - "type": "number" - }, - { - "description": "Minimum Health Care Index", - "in": "query", - "name": "min_health_care_index", - "type": "number" - }, - { - "description": "Maximum Pollution Index", - "in": "query", - "name": "max_pollution_index", - "type": "number" - }, - { - "description": "Maximum Traffic Index", - "in": "query", - "name": "max_traffic_index", - "type": "number" - }, - { - "description": "Sort enum: name_asc, cost_of_living_asc, cost_of_living_desc, quality_of_life_desc, safety_desc, crime_asc, health_care_desc, pollution_asc, traffic_asc", + "description": "Fanatics Live league type code. See GET /fanaticslive/leagues for the full list.", "enum": [ - "name_asc", - "cost_of_living_asc", - "cost_of_living_desc", - "quality_of_life_desc", - "safety_desc", - "crime_asc", - "health_care_desc", - "pollution_asc", - "traffic_asc" + "NFL", + "NCAA_FB", + "NBA", + "MLB", + "SOCCER", + "NHL", + "POKEMON", + "STAR_WARS", + "MLS", + "UFC", + "WWE", + "F1", + "NASCAR", + "DISNEY", + "GARBAGE_PAIL_KIDS", + "MAGIC_THE_GATHERING", + "WNBA", + "NCAA_BK", + "GOLF", + "VEE_FRIENDS", + "DUDE_PERFECT", + "OTHER", + "ORIGINALS" ], "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", - "in": "query", - "name": "page_size", - "type": "integer" + "name": "league", + "required": true, + "type": "string", + "x-example": "POKEMON" } ], "produces": [ @@ -329362,7 +402790,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.numbeoCitiesSearchResponseDoc" + "$ref": "#/definitions/fanaticslive.browseResponseDoc" } }, "400": { @@ -329371,14 +402799,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -329389,27 +402817,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Numbeo cities dataset", + "summary": "Browse Fanatics Live shows by league", "tags": [ - "Datasets" + "Fanatics Live" ] } }, - "/datasets/numbeo-countries/items/{country}": { + "/fanaticslive/channel/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Numbeo country from the dataset by `country`, spelled as Numbeo does, such as `Vietnam`. The record has a `coverage` list and country-level indices for cost of living, rent, quality of life, crime, safety, health care, pollution, traffic and property, present only where ranked.", - "operationId": "datasets-numbeo-countries-item", + "description": "Returns a Fanatics Live channel's own detail page: its parent shop, and a first page of its live/upcoming and past/replay shows. A shop can run several channels (e.g. a league-specific sub-feed) -- see /fanaticslive/shop/{slug} for a shop's full channel list and /fanaticslive/shop/{slug}/shows for cursor-paginated access to a full show history.", + "operationId": "fanaticslive-channel", "parameters": [ { - "description": "Country name as Numbeo spells it", + "description": "Fanatics Live channel id (a UUID), e.g. from a shop or show result's channel.id field", "in": "path", - "name": "country", + "name": "id", "required": true, "type": "string", - "x-example": "Vietnam" + "x-example": "adc4b55f-5e10-4ed0-8680-11875cfe1c94" } ], "produces": [ @@ -329419,7 +402847,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.numbeoCountryResponseDoc" + "$ref": "#/definitions/fanaticslive.channelResponseDoc" } }, "400": { @@ -329434,14 +402862,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -329452,108 +402880,68 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Numbeo country from the dataset", + "summary": "Get a Fanatics Live channel's detail page", "tags": [ - "Datasets" + "Fanatics Live" ] } }, - "/datasets/numbeo-countries/search": { + "/fanaticslive/leagues": { "get": { "consumes": [ "application/json" ], - "description": "Searches the composite Numbeo countries dataset, merged from the current global by-country rankings of all seven index families. Sort enum: `name_asc`, `cost_of_living_asc`, `cost_of_living_desc`, `quality_of_life_desc`, `safety_desc`, `crime_asc`, `health_care_desc`, `pollution_asc`, `traffic_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-numbeo-countries-search", - "parameters": [ - { - "description": "Full-text query over the country name, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Minimum Cost of Living Index (New York = 100)", - "in": "query", - "name": "min_cost_of_living_index", - "type": "number" - }, - { - "description": "Maximum Cost of Living Index (New York = 100)", - "in": "query", - "name": "max_cost_of_living_index", - "type": "number" - }, - { - "description": "Minimum Quality of Life Index", - "in": "query", - "name": "min_quality_of_life_index", - "type": "number" - }, - { - "description": "Minimum Crime Index", - "in": "query", - "name": "min_crime_index", - "type": "number" - }, - { - "description": "Maximum Crime Index", - "in": "query", - "name": "max_crime_index", - "type": "number" - }, - { - "description": "Minimum Safety Index", - "in": "query", - "name": "min_safety_index", - "type": "number" - }, - { - "description": "Minimum Health Care Index", - "in": "query", - "name": "min_health_care_index", - "type": "number" - }, - { - "description": "Maximum Pollution Index", - "in": "query", - "name": "max_pollution_index", - "type": "number" - }, - { - "description": "Maximum Traffic Index", - "in": "query", - "name": "max_traffic_index", - "type": "number" + "description": "Returns Fanatics Live's full league/category list (e.g. \"Pokemon\", \"NFL\", \"MTG\"). Each entry's type is usable directly with /fanaticslive/browse's league filter.", + "operationId": "fanaticslive-leagues", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanaticslive.leaguesResponseDoc" + } }, - { - "description": "Sort enum: name_asc, cost_of_living_asc, cost_of_living_desc, quality_of_life_desc, safety_desc, crime_asc, health_care_desc, pollution_asc, traffic_asc", - "enum": [ - "name_asc", - "cost_of_living_asc", - "cost_of_living_desc", - "quality_of_life_desc", - "safety_desc", - "crime_asc", - "health_care_desc", - "pollution_asc", - "traffic_asc" - ], - "in": "query", - "name": "sort", - "type": "string" + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get Fanatics Live's league taxonomy", + "tags": [ + "Fanatics Live" + ] + } + }, + "/fanaticslive/shop/{slug}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a Fanatics Live shop's public profile page: description, social links, follower count, and its channels and staffers.", + "operationId": "fanaticslive-shop", + "parameters": [ { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", - "in": "query", - "name": "page_size", - "type": "integer" + "description": "Fanatics Live shop slug, e.g. from a shops-list result's slug field", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "we-the-hobby" } ], "produces": [ @@ -329563,7 +402951,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.numbeoCountriesSearchResponseDoc" + "$ref": "#/definitions/fanaticslive.shopResponseDoc" } }, "400": { @@ -329572,8 +402960,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -329583,6 +402971,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -329590,75 +402984,156 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Numbeo countries dataset", + "summary": "Get a Fanatics Live shop's public profile", "tags": [ - "Datasets" + "Fanatics Live" ] } }, - "/datasets/pitchbook-advisors/facets": { + "/fanaticslive/shop/{slug}/shows": { "get": { "consumes": [ "application/json" ], - "description": "Returns value counts for the PitchBook advisors dataset by the required `facet`: `service_type`, `hq_country`, `hq_state` or `run_id`. The counts honour the search filters, including `q`, `min_year_founded` and `max_year_founded`, and list the top 50 values.", - "operationId": "datasets-pitchbook-advisors-facets", + "description": "Returns a Fanatics Live shop's own live/upcoming or past/replay show list -- distinct from /fanaticslive/browse, which lists shows across all shops filtered by league. status=replay is the only way to observe a COMPLETE-status show.", + "operationId": "fanaticslive-shop-shows", "parameters": [ { - "description": "Facet enum: service_type, hq_country, hq_state, run_id", + "description": "Fanatics Live shop slug, e.g. from a shops-list result's slug field", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "going-twice" + }, + { + "description": "Which show list to return", "enum": [ - "service_type", - "hq_country", - "hq_state", - "run_id" + "live", + "replay" ], "in": "query", - "name": "facet", + "name": "status", "required": true, "type": "string", - "x-example": "service_type" + "x-example": "live" }, { - "description": "Full-text query over name and description, max 256 characters", + "description": "Pagination cursor from a previous response's next_cursor", "in": "query", - "name": "q", + "name": "after", "type": "string" }, { - "description": "Exact service provider type filter, max 128 characters", + "description": "Max shows to return (default 24)", "in": "query", - "name": "service_type", - "type": "string" + "name": "limit", + "type": "integer", + "x-example": 24 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanaticslive.shopShowsResponseDoc" + } }, - { - "description": "Exact headquarters country filter, max 128 characters", - "in": "query", - "name": "hq_country", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Exact headquarters state/region filter, max 128 characters", - "in": "query", - "name": "hq_state", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Exact crawl run-id filter, max 128 characters", - "in": "query", - "name": "run_id", - "type": "string" + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Minimum founding year", - "in": "query", - "name": "min_year_founded", - "type": "integer" + "ApiKeyAuth": [] + } + ], + "summary": "Get a Fanatics Live shop's own live or replay show list", + "tags": [ + "Fanatics Live" + ] + } + }, + "/fanaticslive/shops": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Fanatics Live's full public shop directory: every shop's id, name, slug, logo, and follower count. Each entry's slug is usable directly with /fanaticslive/shop/{slug}.", + "operationId": "fanaticslive-shops", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanaticslive.shopsResponseDoc" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Maximum founding year", - "in": "query", - "name": "max_year_founded", - "type": "integer" + "ApiKeyAuth": [] + } + ], + "summary": "Get Fanatics Live's shop directory", + "tags": [ + "Fanatics Live" + ] + } + }, + "/fanaticslive/show/{id}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a Fanatics Live live show's detail page: status, viewers, hosting channel/shop, its currently active break/lot, and its full break/lot list.", + "operationId": "fanaticslive-show", + "parameters": [ + { + "description": "Fanatics Live show id, e.g. from a browse result's id field", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "1b1aeec0-346b-4c8f-941a-bcb8af558a5a" } ], "produces": [ @@ -329668,7 +403143,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookAdvisorsFacetResponseDoc" + "$ref": "#/definitions/fanaticslive.showResponseDoc" } }, "400": { @@ -329677,8 +403152,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -329688,6 +403163,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -329695,27 +403176,27 @@ "ApiKeyAuth": [] } ], - "summary": "Facet PitchBook advisors dataset", + "summary": "Get a Fanatics Live show's detail page", "tags": [ - "Datasets" + "Fanatics Live" ] } }, - "/datasets/pitchbook-advisors/items/{id}": { + "/fanaticslive/show/{id}/instant-rips": { "get": { "consumes": [ "application/json" ], - "description": "Returns one PitchBook advisor from the dataset by `id`, such as `676215-64`. The record has name, description, service type, headquarters, founding year, website, contact, overview fields, serviced companies and deals, FAQs and data tables. An id not in the dataset returns 404.", - "operationId": "datasets-pitchbook-advisors-item", + "description": "Returns a Fanatics Live show's current break's digital-instant-rip state: spot claim/rip progress and the currently revealing item, when a rip is actively in progress. current_break is omitted when the show has no active break at request time.", + "operationId": "fanaticslive-instant-rips", "parameters": [ { - "description": "PitchBook advisor id, e.g. 676215-64", + "description": "Fanatics Live show id, the same id GET /fanaticslive/show/{id} takes", "in": "path", "name": "id", "required": true, "type": "string", - "x-example": "676215-64" + "x-example": "186f8cac-d031-436a-b46d-9d9f0b839df2" } ], "produces": [ @@ -329725,7 +403206,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookAdvisorResponseDoc" + "$ref": "#/definitions/fanaticslive.instantRipsResponseDoc" } }, "400": { @@ -329740,14 +403221,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -329758,85 +403239,216 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PitchBook advisor from dataset", + "summary": "Get a Fanatics Live show's current instant-rip state", "tags": [ - "Datasets" + "Fanatics Live" ] } }, - "/datasets/pitchbook-advisors/search": { + "/fanduel/casino/categories": { "get": { "consumes": [ "application/json" ], - "description": "Searches the crawled public PitchBook advisor (service provider — e.g. investment bank, lender, financing advisory firm) profile catalog stored in a search index. Discovered from PitchBook's public sitemap. Sort enum: `relevance`, `name_asc`, `year_founded_desc`, `recently_crawled_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-pitchbook-advisors-search", + "description": "Lists the FanDuel Casino lobby's public categories (slots, jackpots, blackjack, roulette, live dealer, exclusives and more) with the slug the `category` route takes. `region` picks the lobby: `mi` (default) is the Michigan lobby at casino.fanduel.com, which includes the Michigan-only MotorCity Favorites collection, and `on` is the Ontario lobby at casino.fanduel.ca, which has three Ontario-only collections and lacks Hot Slots, Classic Reels and Bonus Buy. The casino site serves one state's lobby to every address tried, so no other state is offered. The signed-in player's own favorites list is not a public category and is not included.", + "operationId": "fanduel-casino-categories", "parameters": [ { - "description": "Full-text query over name and description, max 256 characters", + "default": "mi", + "description": "Lobby: `mi` Michigan (default) or `on` Ontario", + "enum": [ + "mi", + "on" + ], "in": "query", - "name": "q", + "name": "region", "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanduel.casinoCategoriesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Exact service provider type filter (e.g. Commercial Bank, Investment Bank, Financing Advisory), max 128 characters", + "ApiKeyAuth": [] + } + ], + "summary": "FanDuel Casino categories", + "tags": [ + "FanDuel" + ] + } + }, + "/fanduel/casino/category": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a page of a casino category's games in the lobby's own order, with each game's slug, name, studio, badge (`Exclusive`, `Jackpot`), whether it is flagged as a site-wide jackpot game, and a link to its page. `providers` and `badges` count the whole category so the values the `provider` and `badge` filters accept are always visible; `q` matches every word against the game name. `all-games`, `slots` and `double-your-bet-category` hold the whole catalog (about 3,800 games) in one 30MB page, so their first call is slow and the parsed list is then cached for 15 minutes.", + "operationId": "fanduel-casino-category", + "parameters": [ + { + "default": "mi", + "description": "Lobby: `mi` Michigan (default) or `on` Ontario", + "enum": [ + "mi", + "on" + ], "in": "query", - "name": "service_type", + "name": "region", "type": "string" }, { - "description": "Exact headquarters country filter, max 128 characters", + "description": "Category slug from the `categories` route for the same `region`. Michigan has `all-games`, `new`, `slots`, `double-your-bet-category`, `jackpots`, `daily-jackpots`, `hot-slots`, `classic-reels-category`, `bonus-buy-category`, `high-limit-category`, `spooky-slots-category`, `exclusives`, `pick-play`, `arcade`, `blackjack`, `baccarat`, `roulette`, `table`, `livecasino`, `online-casino-favorites`, `explore-videos`, `motorcity-favorites`; Ontario has the same list without `hot-slots`, `classic-reels-category`, `bonus-buy-category`, `online-casino-favorites` and `motorcity-favorites`, and adds `fallsview-favourites-category`, `the-wolf-den-category`, `sports-central`. A slug the lobby lacks returns `400`", + "enum": [ + "all-games", + "new", + "slots", + "double-your-bet-category", + "jackpots", + "daily-jackpots", + "hot-slots", + "classic-reels-category", + "bonus-buy-category", + "high-limit-category", + "spooky-slots-category", + "exclusives", + "pick-play", + "arcade", + "blackjack", + "baccarat", + "roulette", + "table", + "livecasino", + "online-casino-favorites", + "explore-videos", + "motorcity-favorites", + "fallsview-favourites-category", + "the-wolf-den-category", + "sports-central" + ], "in": "query", - "name": "hq_country", + "name": "category", + "required": true, + "type": "string", + "x-example": "blackjack" + }, + { + "description": "Words to find in the game name, such as `huff puff`; every word must match", + "in": "query", + "name": "q", "type": "string" }, { - "description": "Exact headquarters state/region filter, max 128 characters", + "description": "Keep only games from this studio, exactly as listed in the response `providers` (for example `NYX`, `Evolution`, `IGT`); a value the category does not have returns `400`", "in": "query", - "name": "hq_state", + "name": "provider", "type": "string" }, { - "description": "Exact crawl run-id filter, max 128 characters", + "description": "Keep only games with this badge, exactly as listed in the response `badges` (for example `Exclusive`, `Jackpot`)", "in": "query", - "name": "run_id", + "name": "badge", "type": "string" }, { - "description": "Minimum founding year", + "default": 50, + "description": "Games per page, 1 to 200; default 50", "in": "query", - "name": "min_year_founded", + "maximum": 200, + "minimum": 1, + "name": "limit", "type": "integer" }, { - "description": "Maximum founding year", + "default": 0, + "description": "Games to skip; default 0", "in": "query", - "name": "max_year_founded", + "minimum": 0, + "name": "offset", "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanduel.casinoCategoryResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Sort enum: relevance, name_asc, year_founded_desc, recently_crawled_desc", + "ApiKeyAuth": [] + } + ], + "summary": "FanDuel Casino category games", + "tags": [ + "FanDuel" + ] + } + }, + "/fanduel/casino/game": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a casino game's detail page: category, minimum and maximum bet, studio, volatility, themes, features, how many players are in it right now, its badge and description, and the identifiers its play link carries (provider, provider reference, game id and the lobby region). Slugs come from the `category` route; an unknown game returns 404.", + "operationId": "fanduel-casino-game", + "parameters": [ + { + "default": "mi", + "description": "Lobby of the game: `mi` Michigan (default) or `on` Ontario", "enum": [ - "relevance", - "name_asc", - "year_founded_desc", - "recently_crawled_desc" + "mi", + "on" ], "in": "query", - "name": "sort", + "name": "region", "type": "string" }, { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Game slug from the `category` route (`games[].slug`), lower-case, such as `huff-n-even-more-puff-hard-hat-edition`", "in": "query", - "name": "page_size", - "type": "integer" + "name": "game", + "required": true, + "type": "string", + "x-example": "huff-n-even-more-puff-hard-hat-edition" } ], "produces": [ @@ -329846,7 +403458,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookAdvisorsSearchResponseDoc" + "$ref": "#/definitions/fanduel.casinoGameResponseDoc" } }, "400": { @@ -329855,14 +403467,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -329873,101 +403485,176 @@ "ApiKeyAuth": [] } ], - "summary": "Search PitchBook advisors dataset", + "summary": "FanDuel Casino game detail", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/pitchbook-companies/facets": { + "/fanduel/racing/carryover-pools": { "get": { "consumes": [ "application/json" ], - "description": "Returns value counts for the PitchBook companies dataset by the required `facet`: `status`, `primary_industry`, `financing_status`, `ownership_status`, `hq_country`, `hq_state` or `run_id`. Filters such as `q`, `min_year_founded` and `min_investor_count` apply, and the top 50 values come back.", - "operationId": "datasets-pitchbook-companies-facets", + "description": "Lists the multi-race pools that carried over (Pick 3 to Pick 6, Super High Five, Superfecta, Daily Double) with the amount, the track, the race the pool pays on and that race's minutes to post and status. Largest pool first. `status` filters by the status of the race the pool pays on.", + "operationId": "fanduel-racing-carryover-pools", "parameters": [ { - "description": "Facet enum: status, primary_industry, financing_status, ownership_status, hq_country, hq_state, run_id", + "description": "Keep only pools whose race has these statuses (repeat the parameter or comma-separate): `O` Open, `IC` Up Next, `SK` Race Off, `RO` Race Official", "enum": [ - "status", - "primary_industry", - "financing_status", - "ownership_status", - "hq_country", - "hq_state", - "run_id" + "O", + "IC", + "SK", + "RO" ], "in": "query", - "name": "facet", - "required": true, - "type": "string", - "x-example": "status" - }, - { - "description": "Full-text query over name and description, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact status filter, max 128 characters", - "in": "query", "name": "status", "type": "string" }, { - "description": "Exact primary industry filter, max 128 characters", + "description": "Keep only these track codes (repeat the parameter or comma-separate), such as `LRL`; list codes with the `tracks` route", "in": "query", - "name": "primary_industry", + "name": "track", "type": "string" }, { - "description": "Exact financing status filter, max 128 characters", + "default": 1, + "description": "Page number, from 1; default 1, at most 10000", "in": "query", - "name": "financing_status", - "type": "string" + "maximum": 10000, + "minimum": 1, + "name": "page", + "type": "integer" }, { - "description": "Exact ownership status filter, max 128 characters", + "default": 50, + "description": "Items per page, 1 to 200; default 50", "in": "query", - "name": "ownership_status", - "type": "string" + "maximum": 200, + "minimum": 1, + "name": "limit", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanduel.racingCarryoverResponseDoc" + } }, - { - "description": "Exact headquarters country filter, max 128 characters", - "in": "query", - "name": "hq_country", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Exact headquarters state/region filter, max 128 characters", - "in": "query", - "name": "hq_state", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Exact crawl run-id filter, max 128 characters", - "in": "query", - "name": "run_id", - "type": "string" + "ApiKeyAuth": [] + } + ], + "summary": "FanDuel Racing carry-over pools", + "tags": [ + "FanDuel" + ] + } + }, + "/fanduel/racing/filters": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Counts today's races by country, race type, status, surface and class, and lists the sort names, so every value the other racing routes accept is discoverable. Statuses, race types, surfaces, classes and countries are data-driven sets, so the counts are today's live inventory; a country appears here only while it is racing.", + "operationId": "fanduel-racing-filters", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanduel.racingFiltersResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Minimum founding year", + "ApiKeyAuth": [] + } + ], + "summary": "FanDuel Racing filter values", + "tags": [ + "FanDuel" + ] + } + }, + "/fanduel/racing/horse": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a horse's career record (starts, wins, top-three finishes, win percentage) and its past races newest first, each with the race conditions and the horse's own result line: finish position, post-race report, beaten lengths and starting price when the track reports them. Needs the horse's `id` from the `search` route; an unknown id returns 404.", + "operationId": "fanduel-racing-horse", + "parameters": [ + { + "description": "Horse id (`id` of a `runner` result of the `search` route), such as `1002257`", "in": "query", - "name": "min_year_founded", - "type": "integer" + "name": "id", + "required": true, + "type": "string", + "x-example": "1002257" }, { - "description": "Maximum founding year", + "default": 1, + "description": "Page of races, from 1; default 1, at most 10000", "in": "query", - "name": "max_year_founded", + "maximum": 10000, + "minimum": 1, + "name": "page", "type": "integer" }, { - "description": "Minimum number of investors", + "default": 50, + "description": "Races per page, 1 to 200; default 50", "in": "query", - "name": "min_investor_count", + "maximum": 200, + "minimum": 1, + "name": "limit", "type": "integer" } ], @@ -329978,7 +403665,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookCompaniesFacetResponseDoc" + "$ref": "#/definitions/fanduel.racingHorseResponseDoc" } }, "400": { @@ -329987,14 +403674,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -330005,27 +403692,43 @@ "ApiKeyAuth": [] } ], - "summary": "Facet PitchBook companies dataset", + "summary": "FanDuel Racing horse career", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/pitchbook-companies/items/{id}": { + "/fanduel/racing/past-race": { "get": { "consumes": [ "application/json" ], - "description": "Returns one PitchBook company from the dataset by `id`, such as `752821-12`. The record has name, description, status, primary industry, financing and ownership status, headquarters, founding year, employees, investor count, latest deal type, website, FAQs and data tables. An unknown id returns 404.", - "operationId": "datasets-pitchbook-companies-item", + "description": "Returns one past race in full: conditions, the finish order with win, place and show payoffs, beaten lengths, starting price and the post-race report of each runner, the payoff of every wager type, and every entry with its morning-line and final odds and its horse, jockey, trainer, owner and pedigree. Needs a date, a track code and a race number from the `past-races` route; a race that did not run returns 404. A race whose results the service no longer holds returns no `results`.", + "operationId": "fanduel-racing-past-race", "parameters": [ { - "description": "PitchBook company id, e.g. 752821-12", - "in": "path", - "name": "id", + "description": "Day as `YYYY-MM-DD`, from `2008-01-01`", + "in": "query", + "name": "date", + "required": true, + "type": "string", + "x-example": "2026-10-02" + }, + { + "description": "Track code such as `BEL`", + "in": "query", + "name": "track", + "required": true, + "type": "string", + "x-example": "BEL" + }, + { + "description": "Race number, 1 to 99", + "in": "query", + "name": "number", "required": true, "type": "string", - "x-example": "752821-12" + "x-example": "9" } ], "produces": [ @@ -330035,7 +403738,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookCompanyResponseDoc" + "$ref": "#/definitions/fanduel.racingPastRaceResponseDoc" } }, "400": { @@ -330050,14 +403753,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -330068,109 +403765,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PitchBook company from dataset", + "summary": "FanDuel Racing past race result", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/pitchbook-companies/search": { + "/fanduel/racing/past-races": { "get": { "consumes": [ "application/json" ], - "description": "Searches the crawled public PitchBook company profile catalog stored in a search index. Discovered from PitchBook's public sitemap. Sort enum: `relevance`, `name_asc`, `year_founded_desc`, `investor_count_desc`, `recently_crawled_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-pitchbook-companies-search", + "description": "Lists the races that ran on a date, at one track or at every track (558 races on 2026-10-02), with number, post time, conditions, distance, purse, surface and runner count; it has no results, so read a race with the `past-race` route. Results go back to 2008. A date with no races returns an empty list; today's date is empty until a race is official.", + "operationId": "fanduel-racing-past-races", "parameters": [ { - "description": "Full-text query over name and description, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact status filter (e.g. Private, Public, Acquired, Out of Business), max 128 characters", - "in": "query", - "name": "status", - "type": "string" - }, - { - "description": "Exact primary industry filter, max 128 characters", - "in": "query", - "name": "primary_industry", - "type": "string" - }, - { - "description": "Exact financing status filter, max 128 characters", - "in": "query", - "name": "financing_status", - "type": "string" - }, - { - "description": "Exact ownership status filter, max 128 characters", - "in": "query", - "name": "ownership_status", - "type": "string" - }, - { - "description": "Exact headquarters country filter, max 128 characters", - "in": "query", - "name": "hq_country", - "type": "string" - }, - { - "description": "Exact headquarters state/region filter, max 128 characters", - "in": "query", - "name": "hq_state", - "type": "string" - }, - { - "description": "Exact crawl run-id filter, max 128 characters", - "in": "query", - "name": "run_id", - "type": "string" - }, - { - "description": "Minimum founding year", - "in": "query", - "name": "min_year_founded", - "type": "integer" - }, - { - "description": "Maximum founding year", - "in": "query", - "name": "max_year_founded", - "type": "integer" - }, - { - "description": "Minimum number of investors", + "description": "Day as `YYYY-MM-DD`, from `2008-01-01`", "in": "query", - "name": "min_investor_count", - "type": "integer" + "name": "date", + "required": true, + "type": "string", + "x-example": "2026-10-02" }, { - "description": "Sort enum: relevance, name_asc, year_founded_desc, investor_count_desc, recently_crawled_desc", - "enum": [ - "relevance", - "name_asc", - "year_founded_desc", - "investor_count_desc", - "recently_crawled_desc" - ], + "description": "Track code such as `BEL`; omit for every track", "in": "query", - "name": "sort", + "name": "track", "type": "string" }, { - "description": "Page number, defaults to 1", + "default": 1, + "description": "Page number, from 1; default 1, at most 10000", "in": "query", + "maximum": 10000, + "minimum": 1, "name": "page", "type": "integer" }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "default": 50, + "description": "Races per page, 1 to 200; default 50", "in": "query", - "name": "page_size", + "maximum": 200, + "minimum": 1, + "name": "limit", "type": "integer" } ], @@ -330181,7 +403819,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookCompaniesSearchResponseDoc" + "$ref": "#/definitions/fanduel.racingPastRacesResponseDoc" } }, "400": { @@ -330190,14 +403828,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -330208,67 +403840,48 @@ "ApiKeyAuth": [] } ], - "summary": "Search PitchBook companies dataset", + "summary": "FanDuel Racing past races of a day", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/pitchbook-funds/facets": { + "/fanduel/racing/past-tracks": { "get": { "consumes": [ "application/json" ], - "description": "Returns value counts for the PitchBook funds dataset by the required `facet`: `fund_strategy`, `fund_status` or `run_id`. The search filters `q`, `fund_strategy`, `fund_status`, `min_vintage_year` and `max_vintage_year` apply to the counts, which list the top 50 values.", - "operationId": "datasets-pitchbook-funds-facets", + "description": "Lists the tracks that have past results. With `date` it returns the tracks that ran that day with their race count and race types; with `track` it returns that track and the dates it ran (newest first, paged by `page` and `limit`, back to 2008); with neither it returns every track (786 on 2026-10-24). An unknown track returns 404.", + "operationId": "fanduel-racing-past-tracks", "parameters": [ { - "description": "Facet enum: fund_strategy, fund_status, run_id", - "enum": [ - "fund_strategy", - "fund_status", - "run_id" - ], - "in": "query", - "name": "facet", - "required": true, - "type": "string", - "x-example": "fund_strategy" - }, - { - "description": "Full-text query over name and description, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact fund strategy filter, max 128 characters", - "in": "query", - "name": "fund_strategy", - "type": "string" - }, - { - "description": "Exact fund status filter, max 128 characters", + "description": "Day as `YYYY-MM-DD`, from `2008-01-01`", "in": "query", - "name": "fund_status", + "name": "date", "type": "string" }, { - "description": "Exact crawl run-id filter, max 128 characters", + "description": "Track code such as `BEL`; adds the dates the track ran", "in": "query", - "name": "run_id", + "name": "track", "type": "string" }, { - "description": "Minimum vintage year", + "default": 1, + "description": "Page number, from 1; default 1, at most 10000", "in": "query", - "name": "min_vintage_year", + "maximum": 10000, + "minimum": 1, + "name": "page", "type": "integer" }, { - "description": "Maximum vintage year", + "default": 50, + "description": "Items per page, 1 to 200; default 50", "in": "query", - "name": "max_vintage_year", + "maximum": 200, + "minimum": 1, + "name": "limit", "type": "integer" } ], @@ -330279,7 +403892,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookFundsFacetResponseDoc" + "$ref": "#/definitions/fanduel.racingPastTracksResponseDoc" } }, "400": { @@ -330288,14 +403901,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -330306,27 +403919,46 @@ "ApiKeyAuth": [] } ], - "summary": "Facet PitchBook funds dataset", + "summary": "FanDuel Racing tracks with past results", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/pitchbook-funds/items/{id}": { + "/fanduel/racing/race": { "get": { "consumes": [ "application/json" ], - "description": "Returns one PitchBook fund from the dataset by `id`, such as `19719-91F`. The record has name, strategy, status, fund size, vintage year, managing firm, contact details and data tables such as limited partners and benchmarks. An id not in the dataset returns 404.", - "operationId": "datasets-pitchbook-funds-item", + "description": "Returns one race in full: its conditions, every entry with morning-line and current odds (fractional and decimal), recent price history, runners (jockey, trainer, owner, pedigree, weight, age, scratch and jockey-change flags, win probability), pool totals, probable payouts, will-pays for multi-race bets, the wagers it accepts with their limits, and, once it is official, the finish order and payoffs. Pools, probables and will-pays appear only when the track reports them (mostly official and Up Next races). Pass `include` to add optional groups: `handicapping` (speed, class, pace, jockey-trainer record, power rating, career record and the favorite rank of every runner), `timeform` (Timeform analyst and production comments, tissue price, flags and, once official, how each finisher was beaten, its starting price and a post-race report) and `pool_grids` (the money bet on each entry's pairings in every pool, mostly once the race is official). A race that is not on today's card returns 404.", + "operationId": "fanduel-racing-race", "parameters": [ { - "description": "PitchBook fund id, e.g. 19719-91F", - "in": "path", - "name": "id", + "description": "Track code from the `tracks` route, such as `LRL`", + "in": "query", + "name": "track", "required": true, "type": "string", - "x-example": "19719-91F" + "x-example": "BOL" + }, + { + "description": "Race number, 1 to 99, such as `2`", + "in": "query", + "name": "number", + "required": true, + "type": "string", + "x-example": "2" + }, + { + "description": "Optional groups to add (repeat the parameter or comma-separate): `handicapping` per-runner handicapping figures and favorite rank, `timeform` Timeform comments, tissue price, flags and finisher timing, `pool_grids` per-entry pool pairings. Other values return `400`", + "enum": [ + "handicapping", + "timeform", + "pool_grids" + ], + "in": "query", + "name": "include", + "type": "string" } ], "produces": [ @@ -330336,7 +403968,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookFundResponseDoc" + "$ref": "#/definitions/fanduel.racingRaceResponseDoc" } }, "400": { @@ -330351,14 +403983,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -330369,78 +403995,113 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PitchBook fund from dataset", + "summary": "FanDuel Racing race detail", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/pitchbook-funds/search": { + "/fanduel/racing/races": { "get": { "consumes": [ "application/json" ], - "description": "Searches the crawled public PitchBook fund profile catalog stored in a search index. Discovered from PitchBook's public sitemap. Sort enum: `relevance`, `name_asc`, `vintage_desc`, `recently_crawled_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-pitchbook-funds-search", + "description": "Lists today's races (about 500 across all tracks) with track, number, post time, minutes to post, status, race type, surface, class, distance, purse and runner count. Filter by track, country, race type, status, open or closed, or the next N minutes; sort by minutes to post, post time or race number. `total` counts every match so `page` and `limit` page through them.", + "operationId": "fanduel-racing-races", "parameters": [ { - "description": "Full-text query over name and description, max 256 characters", + "description": "Keep only these track codes (repeat the parameter or comma-separate), such as `LRL`; list codes with the `tracks` route", "in": "query", - "name": "q", + "name": "track", "type": "string" }, { - "description": "Exact fund strategy filter (e.g. Early Stage VC, Buyout), max 128 characters", + "description": "Keep only races or tracks in these countries (repeat the parameter or comma-separate): upper-case three-letter codes such as `USA`, `GBR`, `AUS`. Today's codes are listed in the `filters` route's `countries`; lower-case or two-letter values return `400`", "in": "query", - "name": "fund_strategy", + "name": "country", "type": "string" }, { - "description": "Exact fund status filter (e.g. Closed, Raising), max 128 characters", + "description": "Drop these countries (repeat the parameter or comma-separate), same codes as `country`", "in": "query", - "name": "fund_status", + "name": "exclude_country", "type": "string" }, { - "description": "Exact crawl run-id filter, max 128 characters", + "description": "Keep only these race types (repeat the parameter or comma-separate): `T` Thoroughbred, `H` Harness, `Q` QuarterHorse, `L` Thoroughbred LARC", + "enum": [ + "T", + "H", + "Q", + "L" + ], "in": "query", - "name": "run_id", + "name": "race_type", "type": "string" }, { - "description": "Minimum vintage year", + "description": "Keep only these race statuses (repeat the parameter or comma-separate): `O` Open, `IC` Up Next, `SK` Race Off, `RO` Race Official", + "enum": [ + "O", + "IC", + "SK", + "RO" + ], "in": "query", - "name": "min_vintage_year", - "type": "integer" + "name": "status", + "type": "string" }, { - "description": "Maximum vintage year", + "description": "`true` for races still open for betting (`O` and `IC`), `false` for off or official races; omit for both", "in": "query", - "name": "max_vintage_year", + "name": "open", + "type": "boolean" + }, + { + "description": "Keep races that post within this many minutes, 1 to 1440", + "in": "query", + "maximum": 1440, + "minimum": 1, + "name": "within_minutes", "type": "integer" }, { - "description": "Sort enum: relevance, name_asc, vintage_desc, recently_crawled_desc", + "description": "Sort: `mtp` (minutes to post), `post_time`, `race_number`; default is the service's own order", "enum": [ - "relevance", - "name_asc", - "vintage_desc", - "recently_crawled_desc" + "mtp", + "post_time", + "race_number" ], "in": "query", "name": "sort", "type": "string" }, { - "description": "Page number, defaults to 1", + "description": "`asc` or `desc`; default `asc`. Only valid together with `sort`", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "order", + "type": "string" + }, + { + "default": 1, + "description": "Page number, from 1; default 1, at most 10000", "in": "query", + "maximum": 10000, + "minimum": 1, "name": "page", "type": "integer" }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "default": 50, + "description": "Items per page, 1 to 200; default 50", "in": "query", - "name": "page_size", + "maximum": 200, + "minimum": 1, + "name": "limit", "type": "integer" } ], @@ -330451,7 +404112,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookFundsSearchResponseDoc" + "$ref": "#/definitions/fanduel.racingRacesResponseDoc" } }, "400": { @@ -330460,14 +404121,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -330478,81 +404139,175 @@ "ApiKeyAuth": [] } ], - "summary": "Search PitchBook funds dataset", + "summary": "FanDuel Racing races", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/pitchbook-investors/facets": { + "/fanduel/racing/results": { "get": { "consumes": [ "application/json" ], - "description": "Returns value counts for the PitchBook investors dataset by the required `facet`: `status`, `investor_type`, `hq_country`, `hq_state` or `run_id`. The counts follow search filters including `q`, `min_portfolio_count` and `min_exits_count`, and show the top 50 values.", - "operationId": "datasets-pitchbook-investors-facets", + "description": "Returns today's official races with their results: winning time, finish order with win, place and show payoffs, and the payoff of every wager type. A race the service reports as refunded has no finishers and one payoff whose selection is `Refund`. Filter by track, country and race type.", + "operationId": "fanduel-racing-results", "parameters": [ { - "description": "Facet enum: status, investor_type, hq_country, hq_state, run_id", - "enum": [ - "status", - "investor_type", - "hq_country", - "hq_state", - "run_id" - ], + "description": "Keep only these track codes (repeat the parameter or comma-separate), such as `LRL`; list codes with the `tracks` route", "in": "query", - "name": "facet", - "required": true, - "type": "string", - "x-example": "status" + "name": "track", + "type": "string" }, { - "description": "Full-text query over name and description, max 256 characters", + "description": "Keep only races or tracks in these countries (repeat the parameter or comma-separate): upper-case three-letter codes such as `USA`, `GBR`, `AUS`. Today's codes are listed in the `filters` route's `countries`; lower-case or two-letter values return `400`", "in": "query", - "name": "q", + "name": "country", "type": "string" }, { - "description": "Exact status filter, max 128 characters", + "description": "Drop these countries (repeat the parameter or comma-separate), same codes as `country`", "in": "query", - "name": "status", + "name": "exclude_country", "type": "string" }, { - "description": "Exact investor type filter, max 128 characters", + "description": "Keep only these race types (repeat the parameter or comma-separate): `T` Thoroughbred, `H` Harness, `Q` QuarterHorse, `L` Thoroughbred LARC", + "enum": [ + "T", + "H", + "Q", + "L" + ], "in": "query", - "name": "investor_type", + "name": "race_type", "type": "string" }, { - "description": "Exact headquarters country filter, max 128 characters", + "default": 1, + "description": "Page number, from 1; default 1, at most 10000", "in": "query", - "name": "hq_country", + "maximum": 10000, + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "default": 50, + "description": "Items per page, 1 to 200; default 50", + "in": "query", + "maximum": 200, + "minimum": 1, + "name": "limit", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanduel.racingResultsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "FanDuel Racing results", + "tags": [ + "FanDuel" + ] + } + }, + "/fanduel/racing/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Finds horses, jockeys, trainers and owners whose name contains the text (3 to 64 characters), with a horse's `id` and birth year and the date, race and track of each one's last start. Use a horse's `id` with the `horse` route. The service returns every match (several hundred owners for a common surname), so the list is paged here: horses first, then jockeys, trainers and owners, each group sorted by `sort` and `order`. Jockeys, trainers and owners have no id.", + "operationId": "fanduel-racing-search", + "parameters": [ + { + "description": "Name text, 3 to 64 characters; matching is case-insensitive", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "Baf" + }, + { + "description": "Keep one kind (any other value silently finds nothing upstream, so it returns `400`)", + "enum": [ + "runner", + "jockey", + "trainer", + "owner" + ], + "in": "query", + "name": "type", "type": "string" }, { - "description": "Exact headquarters state/region filter, max 128 characters", + "default": "name", + "description": "Sort within each kind; default `name`", + "enum": [ + "name", + "last_event" + ], "in": "query", - "name": "hq_state", + "name": "sort", "type": "string" }, { - "description": "Exact crawl run-id filter, max 128 characters", + "default": "asc", + "description": "`asc` or `desc`; default `asc`", + "enum": [ + "asc", + "desc" + ], "in": "query", - "name": "run_id", + "name": "order", "type": "string" }, { - "description": "Minimum current portfolio size", + "default": 1, + "description": "Page number, from 1; default 1, at most 10000", "in": "query", - "name": "min_portfolio_count", + "maximum": 10000, + "minimum": 1, + "name": "page", "type": "integer" }, { - "description": "Minimum number of exits", + "default": 50, + "description": "Items per page, 1 to 200; default 50", "in": "query", - "name": "min_exits_count", + "maximum": 200, + "minimum": 1, + "name": "limit", "type": "integer" } ], @@ -330563,7 +404318,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookInvestorsFacetResponseDoc" + "$ref": "#/definitions/fanduel.racingSearchResponseDoc" } }, "400": { @@ -330572,14 +404327,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -330590,27 +404339,27 @@ "ApiKeyAuth": [] } ], - "summary": "Facet PitchBook investors dataset", + "summary": "FanDuel Racing search by name", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/pitchbook-investors/items/{id}": { + "/fanduel/racing/track": { "get": { "consumes": [ "application/json" ], - "description": "Returns one PitchBook investor from the dataset by `id`, such as `294471-37`. The record has name, description, investor type, status, headquarters, investment, portfolio and exit counts, contact and website, FAQs and data tables. An unknown id returns 404.", - "operationId": "datasets-pitchbook-investors-item", + "description": "Returns one track on today's card with every race it runs: number, post time, minutes to post, status, race type, surface, class, distance, purse and runner count. A code that is not racing today returns 404.", + "operationId": "fanduel-racing-track", "parameters": [ { - "description": "PitchBook investor id, e.g. 294471-37", - "in": "path", - "name": "id", + "description": "Track code from the `tracks` route (`tracks[].code`), such as `LRL`", + "in": "query", + "name": "code", "required": true, "type": "string", - "x-example": "294471-37" + "x-example": "LRL" } ], "produces": [ @@ -330620,7 +404369,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookInvestorResponseDoc" + "$ref": "#/definitions/fanduel.racingTrackResponseDoc" } }, "400": { @@ -330635,14 +404384,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -330653,90 +404396,100 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PitchBook investor from dataset", + "summary": "FanDuel Racing track and its races", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/pitchbook-investors/search": { + "/fanduel/racing/tracks": { "get": { "consumes": [ "application/json" ], - "description": "Searches the crawled public PitchBook investor (fund manager/firm) profile catalog stored in a search index. Discovered from PitchBook's public sitemap. Sort enum: `relevance`, `name_asc`, `portfolio_count_desc`, `recently_crawled_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-pitchbook-investors-search", + "description": "Returns the tracks racing today (Australia, Canada, France, Great Britain, Ireland, Sweden, the U.S. and more) with country, state, race count, race types, whether the card is finished, and the race each track is on (number, minutes to post, post time, status). Filter by country, race type, track code, finished and featured; sort by name, minutes to post, minutes to post of the next wagerable race, or IVR code.", + "operationId": "fanduel-racing-tracks", "parameters": [ { - "description": "Full-text query over name and description, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact status filter (e.g. Active, Inactive), max 128 characters", + "description": "Keep only races or tracks in these countries (repeat the parameter or comma-separate): upper-case three-letter codes such as `USA`, `GBR`, `AUS`. Today's codes are listed in the `filters` route's `countries`; lower-case or two-letter values return `400`", "in": "query", - "name": "status", + "name": "country", "type": "string" }, { - "description": "Exact investor type filter (e.g. Venture Capital, Private Equity, Angel), max 128 characters", + "description": "Drop these countries (repeat the parameter or comma-separate), same codes as `country`", "in": "query", - "name": "investor_type", + "name": "exclude_country", "type": "string" }, { - "description": "Exact headquarters country filter, max 128 characters", + "description": "Keep only these race types (repeat the parameter or comma-separate): `T` Thoroughbred, `H` Harness, `Q` QuarterHorse, `L` Thoroughbred LARC", + "enum": [ + "T", + "H", + "Q", + "L" + ], "in": "query", - "name": "hq_country", + "name": "race_type", "type": "string" }, { - "description": "Exact headquarters state/region filter, max 128 characters", + "description": "Keep only these track codes (repeat the parameter or comma-separate), such as `LRL`", "in": "query", - "name": "hq_state", + "name": "code", "type": "string" }, { - "description": "Exact crawl run-id filter, max 128 characters", + "description": "`true` for tracks whose card is over, `false` for tracks still racing; omit for both", "in": "query", - "name": "run_id", - "type": "string" + "name": "finished", + "type": "boolean" }, { - "description": "Minimum current portfolio size", + "description": "`true` for the Sportsbook's featured tracks only, `false` for the others; omit for both", "in": "query", - "name": "min_portfolio_count", - "type": "integer" + "name": "featured", + "type": "boolean" }, { - "description": "Minimum number of exits", + "description": "Sort: `name`, `mtp` (minutes to post of the current race), `wagerable_mtp`, `ivr`; default is the service's own order", + "enum": [ + "name", + "mtp", + "wagerable_mtp", + "ivr" + ], "in": "query", - "name": "min_exits_count", - "type": "integer" + "name": "sort", + "type": "string" }, { - "description": "Sort enum: relevance, name_asc, portfolio_count_desc, recently_crawled_desc", + "description": "`asc` or `desc`; default `asc`. Only valid together with `sort`", "enum": [ - "relevance", - "name_asc", - "portfolio_count_desc", - "recently_crawled_desc" + "asc", + "desc" ], "in": "query", - "name": "sort", + "name": "order", "type": "string" }, { - "description": "Page number, defaults to 1", + "default": 1, + "description": "Page number, from 1; default 1, at most 10000", "in": "query", + "maximum": 10000, + "minimum": 1, "name": "page", "type": "integer" }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "default": 50, + "description": "Items per page, 1 to 200; default 50", "in": "query", - "name": "page_size", + "maximum": 200, + "minimum": 1, + "name": "limit", "type": "integer" } ], @@ -330747,7 +404500,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookInvestorsSearchResponseDoc" + "$ref": "#/definitions/fanduel.racingTracksResponseDoc" } }, "400": { @@ -330756,14 +404509,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -330774,77 +404527,19 @@ "ApiKeyAuth": [] } ], - "summary": "Search PitchBook investors dataset", + "summary": "FanDuel Racing tracks today", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/pitchbook-limited-partners/facets": { + "/fanduel/racing/wager-types": { "get": { "consumes": [ "application/json" ], - "description": "Returns value counts for the PitchBook limited partners dataset by the required `facet`: `institution_type`, `hq_country`, `hq_state` or `run_id`. Filters `q`, `min_year_founded` and `max_year_founded` also apply, and the top 50 values are returned.", - "operationId": "datasets-pitchbook-limited-partners-facets", - "parameters": [ - { - "description": "Facet enum: institution_type, hq_country, hq_state, run_id", - "enum": [ - "institution_type", - "hq_country", - "hq_state", - "run_id" - ], - "in": "query", - "name": "facet", - "required": true, - "type": "string", - "x-example": "institution_type" - }, - { - "description": "Full-text query over name and description, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact institution type filter, max 128 characters", - "in": "query", - "name": "institution_type", - "type": "string" - }, - { - "description": "Exact headquarters country filter, max 128 characters", - "in": "query", - "name": "hq_country", - "type": "string" - }, - { - "description": "Exact headquarters state/region filter, max 128 characters", - "in": "query", - "name": "hq_state", - "type": "string" - }, - { - "description": "Exact crawl run-id filter, max 128 characters", - "in": "query", - "name": "run_id", - "type": "string" - }, - { - "description": "Minimum founding year", - "in": "query", - "name": "min_year_founded", - "type": "integer" - }, - { - "description": "Maximum founding year", - "in": "query", - "name": "max_year_founded", - "type": "integer" - } - ], + "description": "Lists every wager type the racing service offers (71 on 2026-10-24: Win, Place, Show, Exacta, Trifecta, Superfecta, Daily Double, the Pick bets, Quinella and the international Tote bets) with its code, name, description, group, and structure: legs, columns, positions, and whether it is a box, key or wheel.", + "operationId": "fanduel-racing-wager-types", "produces": [ "application/json" ], @@ -330852,7 +404547,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookLimitedPartnersFacetResponseDoc" + "$ref": "#/definitions/fanduel.racingWagerTypesResponseDoc" } }, "400": { @@ -330861,14 +404556,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -330879,29 +404574,19 @@ "ApiKeyAuth": [] } ], - "summary": "Facet PitchBook limited partners dataset", + "summary": "FanDuel Racing wager types", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/pitchbook-limited-partners/items/{id}": { + "/fanduel/research": { "get": { "consumes": [ "application/json" ], - "description": "Returns one PitchBook limited partner from the dataset by `id`, such as `864326-44`. The record has name, description, institution type, headquarters, founding year, commitments, contact and data tables. `faqs` can be empty, since PitchBook writes FAQs only for richer profiles. An unknown id returns 404.", - "operationId": "datasets-pitchbook-limited-partners-item", - "parameters": [ - { - "description": "PitchBook limited partner id, e.g. 864326-44", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "864326-44" - } - ], + "description": "Returns channel metadata and the recent item summaries from FanDuel Research's official RSS feed. `summary` is the feed description, not a full article body; this endpoint does not fetch linked article pages.", + "operationId": "fanduel-research", "produces": [ "application/json" ], @@ -330909,19 +404594,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookLimitedPartnerResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/fanduel.researchResponseDoc" } }, "429": { @@ -330930,8 +404603,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -330942,85 +404615,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PitchBook limited partner from dataset", + "summary": "FanDuel Research recent RSS items", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/pitchbook-limited-partners/search": { + "/fanduel/research/article": { "get": { "consumes": [ "application/json" ], - "description": "Searches the crawled public PitchBook limited partner (institutional investor — e.g. pension fund, endowment, insurance company) profile catalog stored in a search index. Discovered from PitchBook's public sitemap. Some limited partner profiles have no FAQ section -- this is normal, not a sign of missing data. Sort enum: `relevance`, `name_asc`, `year_founded_desc`, `recently_crawled_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-pitchbook-limited-partners-search", + "description": "Returns one FanDuel Research article in full: its details plus the body rendered as `blocks` (paragraphs, headings, list items, tables, and embedded Sportsbook markets with their event, market and selection ids) and as plain `text`. Content the renderer cannot show, such as embedded HTML, is counted in `omitted_blocks` instead of being dropped silently. An unknown slug returns 404.", + "operationId": "fanduel-research-article", "parameters": [ { - "description": "Full-text query over name and description, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact institution type filter (e.g. Corporate Pension, Private Investment Fund, Endowment), max 128 characters", - "in": "query", - "name": "institution_type", - "type": "string" - }, - { - "description": "Exact headquarters country filter, max 128 characters", - "in": "query", - "name": "hq_country", - "type": "string" - }, - { - "description": "Exact headquarters state/region filter, max 128 characters", - "in": "query", - "name": "hq_state", - "type": "string" - }, - { - "description": "Exact crawl run-id filter, max 128 characters", - "in": "query", - "name": "run_id", - "type": "string" - }, - { - "description": "Minimum founding year", - "in": "query", - "name": "min_year_founded", - "type": "integer" - }, - { - "description": "Maximum founding year", - "in": "query", - "name": "max_year_founded", - "type": "integer" - }, - { - "description": "Sort enum: relevance, name_asc, year_founded_desc, recently_crawled_desc", - "enum": [ - "relevance", - "name_asc", - "year_founded_desc", - "recently_crawled_desc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Article slug from the `articles` route (`articles[].slug`)", "in": "query", - "name": "page_size", - "type": "integer" + "name": "article", + "required": true, + "type": "string", + "x-example": "avalanche-vs-lightning-prediction-nhl-odds-10-23-2026" } ], "produces": [ @@ -331030,7 +404645,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.pitchbookLimitedPartnersSearchResponseDoc" + "$ref": "#/definitions/fanduel.researchArticleResponseDoc" } }, "400": { @@ -331039,14 +404654,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -331057,203 +404672,124 @@ "ApiKeyAuth": [] } ], - "summary": "Search PitchBook limited partners dataset", + "summary": "FanDuel Research article", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/playstation-games/facets": { + "/fanduel/research/articles": { "get": { "consumes": [ "application/json" ], - "description": "Returns terms aggregation counts for the PlayStation games dataset. Facet enum: `publisher`, `classification`, `genres`, `platforms`, `content_rating_authority`, `content_descriptors`, `price_tier`, `service_branding`, `region`, `release_year`, `run_id`, `is_free`, `is_addon`, `is_tied_to_subscription`, `coming_soon`. price_tier enum: `free`, `under_5`, `5_to_10`, `10_to_20`, `20_to_40`, `40_to_60`, `60_plus`.", - "operationId": "datasets-playstation-games-facets", + "description": "Returns a page of FanDuel Research articles (predictions, picks, prop bets, guides), newest first, without their bodies: title, description, sport, author, publish time, link, thumbnail and tags. Filter by sport, sub-category (needs a sport; cannot be combined with a date window), team (needs a sport), author, hero type and publish window. Page with `cursor` while `has_more` is true; the service reports no total.", + "operationId": "fanduel-research-articles", "parameters": [ { - "description": "Facet enum: publisher, classification, genres, platforms, content_rating_authority, content_descriptors, price_tier, service_branding, region, release_year, run_id, is_free, is_addon, is_tied_to_subscription, coming_soon", + "description": "Sport or topic slug from the `sports` route; default all sports", "enum": [ - "publisher", - "classification", - "genres", - "platforms", - "content_rating_authority", - "content_descriptors", - "price_tier", - "service_branding", - "region", - "release_year", - "run_id", - "is_free", - "is_addon", - "is_tied_to_subscription", - "coming_soon" + "casino", + "nascar", + "ncaab", + "f1", + "ufc", + "boxing", + "ncaaf", + "womenssoccer", + "tv-and-podcast", + "nba", + "pga", + "tennis", + "nhl", + "mma", + "soccer", + "fanduel-sportsbook-promo-codes", + "sports-betting-101", + "horse-racing", + "wnba", + "predicts", + "mlb", + "canada", + "nfl" ], "in": "query", - "name": "facet", - "required": true, - "type": "string", - "x-example": "publisher" - }, - { - "description": "Full-text query over name and publisher, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact publisher filter, max 128 characters", - "in": "query", - "name": "publisher", + "name": "sport", "type": "string" }, { - "description": "Exact classification filter, max 128 characters", + "description": "Drop these sports (repeat the parameter or comma-separate), same slugs as `sport`", "in": "query", - "name": "classification", + "name": "exclude_sport", "type": "string" }, { - "description": "Exact genre filter, max 128 characters", + "description": "Topic slug from the `sub-categories` route; needs `sport` and must belong to it", "in": "query", - "name": "genre", + "name": "sub_category", "type": "string" }, { - "description": "Exact platform filter: PS4 or PS5", + "description": "A team's `number_fire_id` from the `sports` route (`sport` selects the list); needs `sport`. An id of another sport returns `400`", "in": "query", - "name": "platform", - "type": "string" + "name": "team", + "type": "integer" }, { - "description": "Exact content-rating authority filter, max 128 characters", + "description": "A player's `number_fire_id` (`subject.number_fire_id` of the `player-news` route); keeps articles about that player. An unknown id, or one of a different `sport`, returns `400`", "in": "query", - "name": "content_rating", - "type": "string" + "minimum": 1, + "name": "player", + "type": "integer" }, { - "description": "Exact content-descriptor filter, max 128 characters", + "description": "Author id (a UUID) from the `authors` route", "in": "query", - "name": "content_descriptor", + "name": "author", "type": "string" }, { - "description": "Price-tier enum: free, under_5, 5_to_10, 10_to_20, 20_to_40, 40_to_60, 60_plus", + "description": "Hero media: `IMAGE` or `JWPLAYER` (video)", "enum": [ - "free", - "under_5", - "5_to_10", - "10_to_20", - "20_to_40", - "40_to_60", - "60_plus" + "IMAGE", + "JWPLAYER" ], "in": "query", - "name": "price_tier", - "type": "string" - }, - { - "description": "Exact subscription/service-branding filter, max 128 characters", - "in": "query", - "name": "branding", - "type": "string" - }, - { - "description": "Exact store region (country code) filter, max 128 characters", - "in": "query", - "name": "region", - "type": "string" - }, - { - "description": "Exact concept id filter, max 128 characters", - "in": "query", - "name": "concept_id", + "name": "hero_type", "type": "string" }, { - "description": "Exact np_title_id filter, max 128 characters", + "description": "Earliest publish time, RFC 3339 or `YYYY-MM-DD`", "in": "query", - "name": "np_title_id", + "name": "published_after", "type": "string" }, { - "description": "Exact crawl run-id filter, max 128 characters", + "description": "Latest publish time, RFC 3339 or `YYYY-MM-DD`; not earlier than `published_after`", "in": "query", - "name": "run_id", + "name": "published_before", "type": "string" }, { - "description": "Filter by free flag", - "in": "query", - "name": "is_free", - "type": "boolean" - }, - { - "description": "Filter add-ons vs games", - "in": "query", - "name": "is_addon", - "type": "boolean" - }, - { - "description": "Filter subscription-included titles", - "in": "query", - "name": "is_tied_to_subscription", - "type": "boolean" - }, - { - "description": "Filter for pre-release titles", - "in": "query", - "name": "coming_soon", - "type": "boolean" - }, - { - "description": "Filter by titles currently discounted (discount_pct > 0)", + "description": "`true` to hide content the site ranks down; it also reorders the list", "in": "query", - "name": "on_sale", + "name": "hide_deprioritized", "type": "boolean" }, { - "description": "Minimum current price in minor units", - "in": "query", - "name": "min_price_value", - "type": "integer" - }, - { - "description": "Maximum current price in minor units", - "in": "query", - "name": "max_price_value", - "type": "integer" - }, - { - "description": "Minimum average star rating, 0 through 5", - "in": "query", - "name": "min_star_rating", - "type": "number" - }, - { - "description": "Minimum number of star ratings", - "in": "query", - "name": "min_star_count", - "type": "integer" - }, - { - "description": "Minimum discount percent, 0 through 100", - "in": "query", - "name": "min_discount_pct", - "type": "integer" - }, - { - "description": "Minimum release year", + "default": 20, + "description": "Articles per page, 1 to 50; default 20", "in": "query", - "name": "min_release_year", + "maximum": 50, + "minimum": 1, + "name": "limit", "type": "integer" }, { - "description": "Maximum release year", + "description": "Continue from the previous response's `next_cursor`", "in": "query", - "name": "max_release_year", - "type": "integer" + "name": "cursor", + "type": "string" } ], "produces": [ @@ -331263,7 +404799,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.playstationGamesFacetResponseDoc" + "$ref": "#/definitions/fanduel.researchArticlesResponseDoc" } }, "400": { @@ -331272,14 +404808,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -331290,27 +404826,27 @@ "ApiKeyAuth": [] } ], - "summary": "Facet PlayStation games dataset", + "summary": "FanDuel Research articles", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/playstation-games/items/{product_id}": { + "/fanduel/research/author": { "get": { "consumes": [ "application/json" ], - "description": "Returns one PlayStation Store game from the `playstation-games` dataset by product id such as `UP0001-PPSA01491_00-GAME000000000000`: name, publisher, genres, platforms, region, release date, base and discounted price with currency and discount end time, star rating and rating count, content rating, and edition and add-on counts. An id that is not in the dataset returns `404`.", - "operationId": "datasets-playstation-games-item", + "description": "Returns one FanDuel Research author: id, slug, bio, images, social accounts, and the sports and topics they write for. An unknown slug returns 404.", + "operationId": "fanduel-research-author", "parameters": [ { - "description": "PlayStation product id (e.g. UP0001-PPSA01491_00-GAME000000000000)", - "in": "path", - "name": "product_id", + "description": "Author slug from the `authors` route, such as `fanduel-staff`", + "in": "query", + "name": "author", "required": true, "type": "string", - "x-example": "UP0001-PPSA01491_00-GAME000000000000" + "x-example": "fanduel-staff" } ], "produces": [ @@ -331320,7 +404856,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.playstationGameResponseDoc" + "$ref": "#/definitions/fanduel.researchAuthorResponseDoc" } }, "400": { @@ -331335,14 +404871,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -331353,206 +404883,261 @@ "ApiKeyAuth": [] } ], - "summary": "Get a PlayStation game from dataset", + "summary": "FanDuel Research author", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/playstation-games/search": { + "/fanduel/research/authors": { "get": { "consumes": [ "application/json" ], - "description": "Searches the crawled public PlayStation Store catalog stored in a search index. One row per product SKU (game, edition or add-on); concept_id / np_title_id group a title's SKUs. price_tier enum: `free`, `under_5`, `5_to_10`, `10_to_20`, `20_to_40`, `40_to_60`, `60_plus`. Sort enum: `relevance`, `rating_desc`, `reviews_desc`, `price_asc`, `price_desc`, `discount_desc`, `release_desc`, `release_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-playstation-games-search", + "description": "Returns a page of FanDuel Research authors with their id, slug, bio, social accounts and the sports and topics they write for. Filter by sport; page with `cursor` while `has_more` is true. The author `id` filters the `articles` route.", + "operationId": "fanduel-research-authors", "parameters": [ { - "description": "Full-text query over name and publisher, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact publisher filter, max 128 characters", - "in": "query", - "name": "publisher", - "type": "string" - }, - { - "description": "Exact classification filter: FULL_GAME, PREMIUM_EDITION, GAME_BUNDLE, ADD_ON_PACK, VIRTUAL_CURRENCY, LEVEL, OTHER", + "description": "Sport or topic slug from the `sports` route", + "enum": [ + "casino", + "nascar", + "ncaab", + "f1", + "ufc", + "boxing", + "ncaaf", + "womenssoccer", + "tv-and-podcast", + "nba", + "pga", + "tennis", + "nhl", + "mma", + "soccer", + "fanduel-sportsbook-promo-codes", + "sports-betting-101", + "horse-racing", + "wnba", + "predicts", + "mlb", + "canada", + "nfl" + ], "in": "query", - "name": "classification", + "name": "sport", "type": "string" }, { - "description": "Exact genre filter (e.g. Action, Role Playing Games), max 128 characters", + "default": 20, + "description": "Authors per page, 1 to 50; default 20", "in": "query", - "name": "genre", - "type": "string" + "maximum": 50, + "minimum": 1, + "name": "limit", + "type": "integer" }, { - "description": "Exact platform filter: PS4 or PS5", + "description": "Continue from the previous response's `next_cursor`", "in": "query", - "name": "platform", + "name": "cursor", "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanduel.researchAuthorsResponseDoc" + } }, - { - "description": "Exact content-rating authority filter (e.g. ESRB, PEGI), max 128 characters", - "in": "query", - "name": "content_rating", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Exact content-descriptor filter (e.g. Blood, Violence, In-Game Purchases, Users Interact), max 128 characters", - "in": "query", - "name": "content_descriptor", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "FanDuel Research authors", + "tags": [ + "FanDuel" + ] + } + }, + "/fanduel/research/featured-articles": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the articles the FanDuel Research editors feature on a sport's page (about ten per sport, such as the week's best bets for the NFL), each with title, description, author, publish time, link and tags. It is a curated list, not the newest-first feed of the `articles` route: for most sports it differs from the latest articles. A sport with nothing featured (Women's Soccer and Sports Betting 101 on 2026-10-24) returns an empty list. The service has no homepage variant, so `sport` is required.", + "operationId": "fanduel-research-featured-articles", + "parameters": [ { - "description": "Price-tier enum: free, under_5, 5_to_10, 10_to_20, 20_to_40, 40_to_60, 60_plus", + "description": "Sport or topic slug from the `sports` route", "enum": [ - "free", - "under_5", - "5_to_10", - "10_to_20", - "20_to_40", - "40_to_60", - "60_plus" + "casino", + "nascar", + "ncaab", + "f1", + "ufc", + "boxing", + "ncaaf", + "womenssoccer", + "tv-and-podcast", + "nba", + "pga", + "tennis", + "nhl", + "mma", + "soccer", + "fanduel-sportsbook-promo-codes", + "sports-betting-101", + "horse-racing", + "wnba", + "predicts", + "mlb", + "canada", + "nfl" ], "in": "query", - "name": "price_tier", - "type": "string" - }, - { - "description": "Exact subscription/service-branding filter (e.g. PS_PLUS, EA_PLAY, UBISOFT_PLUS), max 128 characters", - "in": "query", - "name": "branding", - "type": "string" - }, - { - "description": "Exact store region (country code) filter, max 128 characters", - "in": "query", - "name": "region", - "type": "string" + "name": "sport", + "required": true, + "type": "string", + "x-example": "nfl" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanduel.researchFeaturedArticlesResponseDoc" + } }, - { - "description": "Exact concept id filter (groups all SKUs of a title), max 128 characters", - "in": "query", - "name": "concept_id", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Exact np_title_id filter, max 128 characters", - "in": "query", - "name": "np_title_id", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "FanDuel Research featured articles", + "tags": [ + "FanDuel" + ] + } + }, + "/fanduel/research/fixtures": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the games on today's slate and in progress for the NBA, NFL, NHL and MLB with status (`SCHEDULED`, `IN_PROGRESS`, `FINAL`), the game clock, each team's score and win probability, the TV network, the Sportsbook event link and the money line, spread and total prices with their market and selection ids. A team's `side` is `home` or `away` when it can be read from the event link. Pass `sport` to keep one league; a league with no games returns an empty list.", + "operationId": "fanduel-research-fixtures", + "parameters": [ { - "description": "Exact crawl run-id filter, max 128 characters", + "description": "Keep one league", + "enum": [ + "nba", + "nfl", + "nhl", + "mlb" + ], "in": "query", - "name": "run_id", + "name": "sport", "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanduel.researchFixturesResponseDoc" + } }, - { - "description": "Filter by free flag", - "in": "query", - "name": "is_free", - "type": "boolean" - }, - { - "description": "Filter: true returns add-ons/DLC/currency, false returns games and editions", - "in": "query", - "name": "is_addon", - "type": "boolean" - }, - { - "description": "Filter for titles included with a subscription (e.g. free with PS Plus)", - "in": "query", - "name": "is_tied_to_subscription", - "type": "boolean" - }, - { - "description": "Filter for pre-release / not-yet-purchasable titles", - "in": "query", - "name": "coming_soon", - "type": "boolean" - }, - { - "description": "Filter by titles currently discounted (discount_pct > 0)", - "in": "query", - "name": "on_sale", - "type": "boolean" - }, - { - "description": "Minimum current price in minor units (e.g. cents)", - "in": "query", - "name": "min_price_value", - "type": "integer" - }, - { - "description": "Maximum current price in minor units (e.g. cents)", - "in": "query", - "name": "max_price_value", - "type": "integer" - }, - { - "description": "Minimum average star rating, 0 through 5", - "in": "query", - "name": "min_star_rating", - "type": "number" - }, - { - "description": "Minimum number of star ratings", - "in": "query", - "name": "min_star_count", - "type": "integer" - }, - { - "description": "Minimum discount percent, 0 through 100", - "in": "query", - "name": "min_discount_pct", - "type": "integer" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Minimum release year", - "in": "query", - "name": "min_release_year", - "type": "integer" - }, + "ApiKeyAuth": [] + } + ], + "summary": "FanDuel Research live fixtures", + "tags": [ + "FanDuel" + ] + } + }, + "/fanduel/research/nfl-schedule": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one week of NFL games with kickoff time, stadium and roof type, weather, TV network, closing spread and total, status and game clock, and for each team its record, win probability, rankings, average yards, the game's box totals and its passing, rushing and receiving leaders. Games that have not finished also carry the Sportsbook event id, link and the money line, spread and total with the market and selection ids. `season_type` is `PRE`, `REGULAR` or `POST`; `week` is `0` to `4` for `PRE`, `1` to `18` for `REGULAR` and `1` to `5` for `POST`. A week with no games returns an empty list.", + "operationId": "fanduel-research-nfl-schedule", + "parameters": [ { - "description": "Maximum release year", + "description": "Week number; `0` to `4` for PRE (`0` is the Hall of Fame game), `1` to `18` for REGULAR, `1` to `5` for POST", "in": "query", - "name": "max_release_year", - "type": "integer" + "maximum": 18, + "minimum": 0, + "name": "week", + "required": true, + "type": "integer", + "x-example": 1 }, { - "description": "Sort enum: relevance, rating_desc, reviews_desc, price_asc, price_desc, discount_desc, release_desc, release_asc", + "default": "REGULAR", + "description": "Season phase; default `REGULAR`", "enum": [ - "relevance", - "rating_desc", - "reviews_desc", - "price_asc", - "price_desc", - "discount_desc", - "release_desc", - "release_asc" + "PRE", + "REGULAR", + "POST" ], "in": "query", - "name": "sort", + "name": "season_type", "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", - "in": "query", - "name": "page_size", - "type": "integer" } ], "produces": [ @@ -331562,7 +405147,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.playstationGamesSearchResponseDoc" + "$ref": "#/definitions/fanduel.researchNflScheduleResponseDoc" } }, "400": { @@ -331571,14 +405156,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -331589,55 +405168,106 @@ "ApiKeyAuth": [] } ], - "summary": "Search PlayStation games dataset", + "summary": "FanDuel Research NFL schedule", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/producthunt-makers/facets": { + "/fanduel/research/player-news": { "get": { "consumes": [ "application/json" ], - "description": "Returns distribution counts over the Product Hunt makers dataset (dataset id enum value `producthunt-makers`), honoring the same filters as search. Facet enum: `topic`, `product_count_band`.", - "operationId": "datasets-producthunt-makers-facets", + "description": "Returns short player and team updates, newest first: the fact, the analysis, the news type and the player (name, position, team, `number_fire_id`, and the Sportsbook roster page, whose slug ends in the same id). With `news_type=INJURY` it is a league-wide injury feed. Available for the NFL, NBA, MLB and NHL; the news types each sport has are listed by the `sports` route (the NFL has no `LINEUP`, MLB no `OUTLOOK`, the NHL only `INJURY`, `TRANSACTION` and `GAME_UPDATE`). Filter by team, or by player (id and position together).", + "operationId": "fanduel-research-player-news", "parameters": [ { - "description": "Facet enum: topic, product_count_band", + "description": "Sport slug", "enum": [ - "topic", - "product_count_band" + "nfl", + "nba", + "mlb", + "nhl" ], "in": "query", - "name": "facet", + "name": "sport", "required": true, "type": "string", - "x-example": "topic" + "x-example": "nfl" }, { - "description": "Full-text query over maker name and headline, max 256 characters", + "description": "Update type: `INJURY`, `RECAP`, `TRANSACTION`, `LINEUP`, `GAME_UPDATE`, `OUTLOOK`; a type the sport lacks returns `400` and lists the ones it has", + "enum": [ + "INJURY", + "RECAP", + "TRANSACTION", + "LINEUP", + "GAME_UPDATE", + "OUTLOOK" + ], "in": "query", - "name": "q", + "name": "news_type", "type": "string" }, { - "description": "Exact topic-slug the maker builds in, max 128 characters", + "description": "A team's `number_fire_id` from the `sports` route", "in": "query", - "name": "topic", - "type": "string" + "name": "team", + "type": "integer" }, { - "description": "Minimum number of products made, 0 or greater", + "description": "A player's `number_fire_id`; needs `position`", "in": "query", - "name": "min_products", + "name": "player", "type": "integer" }, { - "description": "Minimum total upvotes across the maker's products, 0 or greater", + "description": "The player's position code; needs `player`", + "enum": [ + "G", + "F", + "C", + "W", + "D", + "QB", + "DB", + "DL", + "K", + "LB", + "OL", + "P", + "RB", + "TE", + "WR", + "IF", + "OF", + "DH" + ], "in": "query", - "name": "min_total_votes", + "name": "position", + "type": "string" + }, + { + "description": "`true` to include updates where the subject is not the main player", + "in": "query", + "name": "include_non_primary", + "type": "boolean" + }, + { + "default": 25, + "description": "Updates per page, 1 to 100; default 25", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "limit", "type": "integer" + }, + { + "description": "Continue from the previous response's `next_cursor`", + "in": "query", + "name": "cursor", + "type": "string" } ], "produces": [ @@ -331647,7 +405277,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.producthuntMakersFacetResponseDoc" + "$ref": "#/definitions/fanduel.researchPlayerNewsResponseDoc" } }, "400": { @@ -331656,14 +405286,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -331674,27 +405298,25 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the Product Hunt makers dataset", + "summary": "FanDuel Research player news and injuries", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/producthunt-makers/items/{username}": { + "/fanduel/research/podcasts/quick-picks-daily": { "get": { "consumes": [ "application/json" ], - "description": "Returns one maker by Product Hunt username from dataset id enum value `producthunt-makers`, including the products they made and their aggregate footprint. Returns 404 when the username is not in the dataset.", - "operationId": "datasets-producthunt-makers-item", + "description": "Returns one page of public Quick Picks Daily program clip metadata from Omny Studio's read-only Consumer API. Follow `next_cursor` to continue; use `in_rss_playlist` to distinguish clips in the default podcast feed and `published_at` to judge freshness. The endpoint returns listening-page links and metadata, not audio files.", + "operationId": "fanduel-research-quick-picks-daily", "parameters": [ { - "description": "Product Hunt maker username, e.g. rrhoover", - "in": "path", - "name": "username", - "required": true, - "type": "string", - "x-example": "rrhoover" + "description": "Cursor from a previous response's `data.next_cursor`; omit for the first page", + "in": "query", + "name": "cursor", + "type": "string" } ], "produces": [ @@ -331704,7 +405326,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.producthuntMakerResponseDoc" + "$ref": "#/definitions/fanduel.quickPicksDailyResponseDoc" } }, "400": { @@ -331713,20 +405335,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -331737,67 +405353,112 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Product Hunt maker from the dataset", + "summary": "FanDuel Research Quick Picks Daily episode archive", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/producthunt-makers/search": { + "/fanduel/research/projection-slates": { "get": { "consumes": [ "application/json" ], - "description": "Searches Product Hunt makers from the dataset id enum value `producthunt-makers` — public-profile records of the people who made products, with their footprint (products made, total upvotes, topics) for maker leaderboards. Public fields only. Sort enum: `total_votes_desc`, `product_count_desc`, `followers_desc`, `relevance`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-producthunt-makers-search", + "description": "Lists the daily-fantasy slates (the contest pools such as `Main`, `All Day` or a single game) of a sport, which the DAILY projections need as `slate_id`. Defaults to today; pass `date` for MLB, NBA and NHL, or `week` and `season` for the NFL, to read another day (past days list their slates too; a day with no games returns an empty list). Golf also returns the current events whose `id` is the projections' `event_id`.", + "operationId": "fanduel-research-projection-slates", "parameters": [ { - "description": "Full-text query over maker name and headline, max 256 characters", + "description": "Sport", + "enum": [ + "mlb", + "nba", + "nfl", + "nhl", + "golf" + ], "in": "query", - "name": "q", - "type": "string" + "name": "sport", + "required": true, + "type": "string", + "x-example": "nba" }, { - "description": "Exact topic-slug the maker builds in, e.g. artificial-intelligence, max 128 characters", + "description": "Day as `YYYY-MM-DD`; MLB, NBA and NHL only; cannot be combined with `week` or `season`", "in": "query", - "name": "topic", + "name": "date", "type": "string" }, { - "description": "Minimum number of products made, 0 or greater", + "description": "NFL week, 1 to 30; NFL only, usually with `season`", "in": "query", - "name": "min_products", + "maximum": 30, + "minimum": 1, + "name": "week", "type": "integer" }, { - "description": "Minimum total upvotes across the maker's products, 0 or greater", + "description": "NFL season year such as `2026`; NFL only", "in": "query", - "name": "min_total_votes", + "maximum": 2100, + "minimum": 2000, + "name": "season", "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanduel.researchProjectionSlatesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Sort enum: total_votes_desc, product_count_desc, followers_desc, relevance", + "ApiKeyAuth": [] + } + ], + "summary": "FanDuel Research projection slates", + "tags": [ + "FanDuel" + ] + } + }, + "/fanduel/research/projection-tables": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Lists the 17 fantasy projection tables of FanDuel Research (numberFire) for MLB, NBA, NFL, NHL and golf: each table's sport, projection type, the position tabs it offers (with the player positions each tab keeps), whether it takes a scope, a slate or a golf event. Use it to find the valid `type`, `position` and `scope` values for the projections route.", + "operationId": "fanduel-research-projection-tables", + "parameters": [ + { + "description": "Keep only this sport's tables", "enum": [ - "total_votes_desc", - "product_count_desc", - "followers_desc", - "relevance" + "mlb", + "nba", + "nfl", + "nhl", + "golf" ], "in": "query", - "name": "sort", + "name": "sport", "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", - "in": "query", - "name": "page_size", - "type": "integer" } ], "produces": [ @@ -331807,7 +405468,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.producthuntMakersSearchResponseDoc" + "$ref": "#/definitions/fanduel.researchProjectionTablesResponseDoc" } }, "400": { @@ -331816,14 +405477,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -331834,93 +405489,150 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Product Hunt makers dataset", + "summary": "FanDuel Research projection tables", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/producthunt-products/facets": { + "/fanduel/research/projections": { "get": { "consumes": [ "application/json" ], - "description": "Returns distribution counts over the Product Hunt products dataset (dataset id enum value `producthunt-products`), honoring the same filters as search. Facet enum: `topic`, `launch_year`, `pricing_type`, `product_state`.", - "operationId": "datasets-producthunt-products-facets", + "description": "Returns numberFire's fantasy projections for MLB, NBA, NFL, NHL and golf in the service's rank order: each row has the player, team, game, FanDuel DFS salary and value (daily projections), and the stat columns of the player kind (points, rebounds and assists for the NBA; passing, rushing and receiving for NFL skill players; kicker, defense and individual defensive player columns; skater, goalie, batter and pitcher columns; golf finish odds). `type` picks the table: `DAILY` (needs `slate_id`), `WEEKLY`, `YEARLY`, `REMAINING`, `PPR` or `SEASON_STATS`; not every sport has every type, and `position` and `scope` depend on the table, so read them from the projection-tables route. An unknown slate is refused instead of silently returning other projections. Weekly NBA and MLB tables are empty outside their weeks. A player id can appear more than once in a yearly table.", + "operationId": "fanduel-research-projections", "parameters": [ { - "description": "Facet enum: topic, launch_year, pricing_type, product_state", + "description": "Sport", "enum": [ - "topic", - "launch_year", - "pricing_type", - "product_state" + "mlb", + "nba", + "nfl", + "nhl", + "golf" ], "in": "query", - "name": "facet", + "name": "sport", "required": true, "type": "string", - "x-example": "topic" + "x-example": "nba" }, { - "description": "Full-text query over product name and tagline, max 256 characters", + "description": "Projection type", + "enum": [ + "DAILY", + "WEEKLY", + "YEARLY", + "REMAINING", + "PPR", + "SEASON_STATS" + ], "in": "query", - "name": "q", - "type": "string" + "name": "type", + "required": true, + "type": "string", + "x-example": "SEASON_STATS" }, { - "description": "Exact topic-slug filter, e.g. artificial-intelligence, max 128 characters", + "description": "Position tab of the table; default is the table's default tab. Allowed values: `batters`, `pitchers`, `c`, `1b`, `2b`, `3b`, `ss`, `of`, `sp`, `rp` (MLB); `qb`, `rb`, `wr`, `te`, `flex`, `k`, `defense`, `idp` (NFL); `all`, `pg`, `sg`, `guards`, `sf`, `pf`, `forwards`, `centers` (NBA); `skaters`, `goalies`, `forwards`, `wingers`, `centers`, `d` (NHL); `all` (golf). Which of them a table offers is listed by projection-tables", + "enum": [ + "batters", + "pitchers", + "c", + "1b", + "2b", + "3b", + "ss", + "of", + "sp", + "rp", + "qb", + "rb", + "wr", + "te", + "flex", + "k", + "defense", + "all", + "pg", + "sg", + "guards", + "sf", + "pf", + "forwards", + "centers", + "skaters", + "goalies", + "wingers", + "d", + "idp" + ], "in": "query", - "name": "topic", + "name": "position", "type": "string" }, { - "description": "Exact maker-username filter (populated by hydration), max 128 characters", + "description": "`TOTAL` or `PER_GAME`; only NBA WEEKLY, YEARLY, REMAINING and SEASON_STATS take it, default `TOTAL`; other tables return `400`", + "enum": [ + "TOTAL", + "PER_GAME" + ], "in": "query", - "name": "maker", + "name": "scope", "type": "string" }, { - "description": "Lower bound on first-launch date, an ISO-8601 date (YYYY-MM-DD)", + "description": "Slate id from the projection-slates route; required for DAILY (golf defaults to its only slate); other types return `400`", "in": "query", - "name": "launched_after", + "name": "slate_id", "type": "string" }, { - "description": "Upper bound on first-launch date, an ISO-8601 date (YYYY-MM-DD)", + "description": "Golf event id from the projection-slates route; golf only, defaults to the only current event", "in": "query", - "name": "launched_before", + "name": "event_id", "type": "string" }, { - "description": "Minimum upvotes, 0 or greater", + "description": "Day of the slate as `YYYY-MM-DD` when `slate_id` is not from today; MLB, NBA and NHL DAILY only", "in": "query", - "name": "min_votes", - "type": "integer" + "name": "date", + "type": "string" }, { - "description": "Minimum review rating, from 0 through 5", + "description": "NFL week of the slate when `slate_id` is not from this week; NFL DAILY only", "in": "query", - "name": "min_rating", - "type": "number" + "maximum": 30, + "minimum": 1, + "name": "week", + "type": "integer" }, { - "description": "Exact pricing-type filter, e.g. free, paid, freemium", + "description": "NFL season of the slate; NFL DAILY only", "in": "query", - "name": "pricing_type", - "type": "string" + "maximum": 2100, + "minimum": 2000, + "name": "season", + "type": "integer" }, { - "description": "Website presence filter", + "default": 1, + "description": "Page number, from 1; default 1, at most 10000", "in": "query", - "name": "has_website", - "type": "boolean" + "maximum": 10000, + "minimum": 1, + "name": "page", + "type": "integer" }, { - "description": "true keeps only products still online, false only retired products", + "default": 50, + "description": "Rows per page, 1 to 200; default 50", "in": "query", - "name": "is_online", - "type": "boolean" + "maximum": 200, + "minimum": 1, + "name": "limit", + "type": "integer" } ], "produces": [ @@ -331930,7 +405642,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.producthuntProductsFacetResponseDoc" + "$ref": "#/definitions/fanduel.researchProjectionsResponseDoc" } }, "400": { @@ -331939,14 +405651,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -331957,27 +405663,50 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the Product Hunt products dataset", + "summary": "FanDuel Research fantasy projections", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/producthunt-products/items/{slug}": { + "/fanduel/research/sports": { "get": { "consumes": [ "application/json" ], - "description": "Returns one product by its Product Hunt slug from dataset id enum value `producthunt-products`, including its full launch history and (once hydrated) description, website, twitter_url, pricing and makers. Returns 404 when the slug is not in the archive.", - "operationId": "datasets-producthunt-products-item", + "description": "Lists the 23 sports and topics of the FanDuel Research site (NFL, NBA, MLB, NHL, college football and basketball, golf, tennis, soccer, MMA, horse racing, casino, FanDuel Predicts and more) with the slug the other research routes take, the position codes, the team count and the player-news types each has. Pass `sport` to also get that sport's teams with the `number_fire_id` values the team filters take.", + "operationId": "fanduel-research-sports", "parameters": [ { - "description": "Product Hunt product slug, e.g. chatgpt", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "chatgpt" + "description": "Sport or topic slug; adds the sport's teams", + "enum": [ + "casino", + "nascar", + "ncaab", + "f1", + "ufc", + "boxing", + "ncaaf", + "womenssoccer", + "tv-and-podcast", + "nba", + "pga", + "tennis", + "nhl", + "mma", + "soccer", + "fanduel-sportsbook-promo-codes", + "sports-betting-101", + "horse-racing", + "wnba", + "predicts", + "mlb", + "canada", + "nfl" + ], + "in": "query", + "name": "sport", + "type": "string" } ], "produces": [ @@ -331987,7 +405716,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.producthuntProductResponseDoc" + "$ref": "#/definitions/fanduel.researchSportsResponseDoc" } }, "400": { @@ -331996,20 +405725,49 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "FanDuel Research sports and topics", + "tags": [ + "FanDuel" + ] + } + }, + "/fanduel/research/sub-categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Lists the topics articles can be filtered by (predictions, best prop bets today, FanDuel picks, fantasy football, NFL draft, Kentucky Derby, Breeders' Cup, World Cup and more), each with the sport it belongs to. A topic only filters articles of its own sport.", + "operationId": "fanduel-research-sub-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanduel.researchSubCategoriesResponseDoc" + } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -332020,104 +405778,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Product Hunt product from the dataset", + "summary": "FanDuel Research topics", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/producthunt-products/search": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Searches individual Product Hunt launches from the dataset id enum value `producthunt-products` — the searchable launch archive. Each result is one product with its topics, upvotes, ranks and launch history; description/website/twitter_url/pricing/makers are filled in over time. Sort enum: `relevance`, `votes_desc`, `launched_desc`, `launched_asc`, `rating_desc`, `best_rank_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-producthunt-products-search", - "parameters": [ - { - "description": "Full-text query over product name and tagline, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact topic-slug filter, e.g. artificial-intelligence, max 128 characters", - "in": "query", - "name": "topic", - "type": "string" - }, - { - "description": "Exact maker-username filter (populated by hydration), max 128 characters", - "in": "query", - "name": "maker", - "type": "string" - }, - { - "description": "Lower bound on first-launch date, an ISO-8601 date (YYYY-MM-DD)", - "in": "query", - "name": "launched_after", - "type": "string" - }, - { - "description": "Upper bound on first-launch date, an ISO-8601 date (YYYY-MM-DD)", - "in": "query", - "name": "launched_before", - "type": "string" - }, - { - "description": "Minimum upvotes, 0 or greater", - "in": "query", - "name": "min_votes", - "type": "integer" - }, - { - "description": "Minimum review rating, from 0 through 5 (populated by hydration)", - "in": "query", - "name": "min_rating", - "type": "number" - }, - { - "description": "Exact pricing-type filter (populated by hydration), e.g. free, paid, freemium", - "in": "query", - "name": "pricing_type", - "type": "string" - }, - { - "description": "Website presence filter (populated by hydration)", - "in": "query", - "name": "has_website", - "type": "boolean" - }, - { - "description": "true keeps only products still online, false only retired products", - "in": "query", - "name": "is_online", - "type": "boolean" - }, - { - "description": "Sort enum: relevance, votes_desc, launched_desc, launched_asc, rating_desc, best_rank_asc", - "enum": [ - "relevance", - "votes_desc", - "launched_desc", - "launched_asc", - "rating_desc", - "best_rank_asc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, + "/fanduel/sportsbook/autocomplete": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the suggestions the Sportsbook's search box offers while a user types: players, teams and competitions that match the prefix. Each suggestion has its plain `text` and a `highlighted` form that wraps the matched characters in `` tags. Use `search/tabs` for the full results of a chosen suggestion.", + "operationId": "fanduel-sportsbook-autocomplete", + "parameters": [ { - "description": "Page number, defaults to 1", + "description": "Prefix to complete, 2 to 100 characters, without `<` or `>`", "in": "query", - "name": "page", - "type": "integer" + "name": "q", + "required": true, + "type": "string", + "x-example": "lak" }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Suggestions to return, 1 to 50; default 5", "in": "query", - "name": "page_size", + "maximum": 50, + "minimum": 1, + "name": "limit", "type": "integer" } ], @@ -332128,7 +405816,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.producthuntProductsSearchResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookAutocompleteResponseDoc" } }, "400": { @@ -332137,14 +405825,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -332155,72 +405843,48 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Product Hunt products dataset", + "summary": "FanDuel Sportsbook search suggestions", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/producthunt-trends/facets": { + "/fanduel/sportsbook/builder": { "get": { "consumes": [ "application/json" ], - "description": "Returns suppressed distribution counts over the Product Hunt trends dataset (dataset id enum value `producthunt-trends`), honoring the same filters as search. Facet enum: `topic`, `launch_year`.", - "operationId": "datasets-producthunt-trends-facets", + "description": "Returns the Sportsbook's bet-builder content for one event: the `groups` and `cards` (bet templates such as who will win, player lines, bullseye ranges, player podium, either-player and head-to-head groups) with their selectable options, the `players` and `teams` on offer, the `periods` and every priceable `choice` with its `choice_id` and description. Choices carry no odds here; price them with `builder/quotes` using this response's `ramp_event_id`. `head-to-head` and `player-combos` return `404` when the event has no cards for that experience.", + "operationId": "fanduel-sportsbook-builder", "parameters": [ { - "description": "Facet enum: topic, launch_year", - "enum": [ - "topic", - "launch_year" - ], + "description": "Event id from the `builder/events` route (`events[].event_id`)", "in": "query", - "name": "facet", + "name": "event_id", "required": true, - "type": "string", - "x-example": "topic" + "type": "integer", + "x-example": 36188995 }, { - "description": "Aggregate cell dimension enum: topic_month, topic_year, topic. Defaults to topic_month", + "default": "yourway", + "description": "Builder experience: `yourway` (default), `head-to-head`, `player-combos`, `bullseye`, `player-podium`, `or-bets`", "enum": [ - "topic_month", - "topic_year", - "topic" + "yourway", + "head-to-head", + "player-combos", + "bullseye", + "player-podium", + "or-bets" ], "in": "query", - "name": "group_by", - "type": "string" - }, - { - "description": "Exact topic-slug filter, e.g. artificial-intelligence, max 128 characters", - "in": "query", - "name": "topic", - "type": "string" - }, - { - "description": "Lower bound on first-launch date, an ISO-8601 date (YYYY-MM-DD)", - "in": "query", - "name": "launched_after", + "name": "experience", "type": "string" }, { - "description": "Upper bound on first-launch date, an ISO-8601 date (YYYY-MM-DD)", + "description": "Market code, including `on` for Ontario; default `nj`", "in": "query", - "name": "launched_before", + "name": "state", "type": "string" - }, - { - "description": "Minimum product upvotes, 0 or greater", - "in": "query", - "name": "min_votes", - "type": "integer" - }, - { - "description": "Minimum launches per bucket; raises the small-cell suppression floor", - "in": "query", - "name": "min_launches", - "type": "integer" } ], "produces": [ @@ -332230,7 +405894,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.producthuntTrendsFacetResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookBuilderResponseDoc" } }, "400": { @@ -332239,14 +405903,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -332257,84 +405921,40 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the Product Hunt trends dataset", + "summary": "FanDuel Sportsbook bet builder", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/producthunt-trends/search": { + "/fanduel/sportsbook/builder/events": { "get": { "consumes": [ "application/json" ], - "description": "Returns aggregate Product Hunt launch trends from the dataset id enum value `producthunt-trends`. Aggregate-only: each row is a category-over-time cell (a topic, optionally within a calendar period), reporting launch count, total and average upvotes, average rating and the top product — never an individual product record. Thin cells are suppressed. group_by enum: `topic_month`, `topic_year`, `topic`. Sort enum: `period_desc`, `period_asc`, `launch_count_desc`, `sum_votes_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-producthunt-trends-search", + "description": "Lists the events a bet-builder experience covers (currently NFL and NBA games), grouped by competition, with start times and team logos. Use an `event_id` from here with the `builder` route.", + "operationId": "fanduel-sportsbook-builder-events", "parameters": [ { - "description": "Aggregate cell dimension enum: topic_month, topic_year, topic. Defaults to topic_month", + "default": "yourway", + "description": "Builder experience: `yourway` (default), `head-to-head`, `player-combos`, `bullseye`, `player-podium`, `or-bets`", "enum": [ - "topic_month", - "topic_year", - "topic" + "yourway", + "head-to-head", + "player-combos", + "bullseye", + "player-podium", + "or-bets" ], "in": "query", - "name": "group_by", - "type": "string" - }, - { - "description": "Exact topic-slug filter, e.g. artificial-intelligence, max 128 characters", - "in": "query", - "name": "topic", - "type": "string" - }, - { - "description": "Lower bound on first-launch date, an ISO-8601 date (YYYY-MM-DD)", - "in": "query", - "name": "launched_after", - "type": "string" - }, - { - "description": "Upper bound on first-launch date, an ISO-8601 date (YYYY-MM-DD)", - "in": "query", - "name": "launched_before", + "name": "experience", "type": "string" }, { - "description": "Minimum product upvotes, 0 or greater", - "in": "query", - "name": "min_votes", - "type": "integer" - }, - { - "description": "Minimum launches per cell; raises the small-cell suppression floor (never lowered below the built-in minimum)", - "in": "query", - "name": "min_launches", - "type": "integer" - }, - { - "description": "Sort enum: period_desc, period_asc, launch_count_desc, sum_votes_desc", - "enum": [ - "period_desc", - "period_asc", - "launch_count_desc", - "sum_votes_desc" - ], + "description": "Market code, including `on` for Ontario; default `nj`", "in": "query", - "name": "sort", + "name": "state", "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", - "in": "query", - "name": "page_size", - "type": "integer" } ], "produces": [ @@ -332344,7 +405964,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.producthuntTrendsSearchResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookBuilderEventsResponseDoc" } }, "400": { @@ -332353,14 +405973,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -332371,59 +405991,45 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Product Hunt trends dataset", + "summary": "FanDuel Sportsbook bet builder events", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/reddit-trending/search": { + "/fanduel/sportsbook/builder/quotes": { "get": { "consumes": [ "application/json" ], - "description": "Searches daily snapshots of each tracked subreddit's hot-feed post order (one document per subreddit × snapshot × rank) so history accumulates. With no `date` the latest snapshot is returned (today's trending); pair `subreddit` with `sort=date_desc` for a subreddit's trending history over time. There is no score or comment-count field, so `rank` reflects Reddit's own hot-feed order rather than a locally computed score. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-reddit-trending-search", + "description": "Prices bet-builder choices as single bets and returns, for each, the live decimal, American and fractional odds. A choice the pricing service does not know is returned in `failures` (for example `CHOICE_NOT_FOUND`) instead of failing the request. This is the price of each choice on its own: the combined price of several choices is a separate call that requires an account and is not available.", + "operationId": "fanduel-sportsbook-builder-quotes", "parameters": [ { - "description": "Full-text query over the post title, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact subreddit-name filter, max 128 characters", + "description": "The builder response's `ramp_event_id` (not its `event_id`)", "in": "query", - "name": "subreddit", - "type": "string" + "name": "ramp_event_id", + "required": true, + "type": "integer", + "x-example": 16712244 }, { - "description": "Snapshot date filter yyyy-MM-dd; defaults to the latest snapshot", + "collectionFormat": "csv", + "description": "Choice ids from the builder response (`choices[].choice_id`); 1 to 25, repeated or comma-separated", "in": "query", - "name": "date", - "type": "string" + "items": { + "type": "string" + }, + "name": "choice_id", + "required": true, + "type": "array", + "x-example": "2763248ae1c5094d3aff3f30eb484612655c4cea3c3d386788b3b75628961795" }, { - "description": "Sort enum: rank, date_desc", - "enum": [ - "rank", - "date_desc" - ], + "description": "Market code, including `on` for Ontario; default `nj`", "in": "query", - "name": "sort", + "name": "state", "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", - "in": "query", - "name": "page_size", - "type": "integer" } ], "produces": [ @@ -332433,7 +406039,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.redditTrendingSearchResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookChoiceQuotesResponseDoc" } }, "400": { @@ -332442,14 +406048,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -332460,97 +406066,115 @@ "ApiKeyAuth": [] } ], - "summary": "Search the reddit-trending dataset", + "summary": "FanDuel Sportsbook bet builder quotes", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/sec-companies/facets": { + "/fanduel/sportsbook/competition": { "get": { "consumes": [ "application/json" ], - "description": "Returns terms-aggregation counts for one facet of the SEC companies dataset, scoped to the same filters as search. Facet enum: `sic`, `sic_description`, `exchange`, `state_of_incorporation`, `entity_type`, `reporting_currency`, `revenue_band`, `forms_filed`. `revenue_band` buckets latest-annual revenue into: `unknown`, `under_1m`, `1m_10m`, `10m_100m`, `100m_1b`, `1b_10b`, `over_10b`.", - "operationId": "datasets-sec-companies-facets", + "description": "Returns one competition's schedule and futures (tabs `schedule` and `futures`) with markets and odds. Get `competition_id` from the `competitions` of a league or sport response.", + "operationId": "fanduel-sportsbook-competition", "parameters": [ { - "description": "Facet enum: sic, sic_description, exchange, state_of_incorporation, entity_type, reporting_currency, revenue_band, forms_filed", + "description": "Sport id: 6423 American Football; 1 Soccer; 7522 Basketball; 3 Golf; 7511 Baseball; 7524 Ice Hockey; 2 Tennis; 26420387 Mixed Martial Arts; 2593174 Table Tennis; 3503 Darts; 6 Boxing; 5 Rugby Union; 4 Cricket; 8 Motor Sport; 1477 Rugby League; 6422 Snooker; 468328 Handball; 28608997 Lacrosse; 998917 Volleyball, 4726642 Surfing, 10 Special Bets and 2378961 Politics; availability differs by market (Volleyball is also offered in NJ, PA, CO and AZ), and a sport a market does not offer returns 404", "enum": [ - "sic", - "sic_description", - "exchange", - "state_of_incorporation", - "entity_type", - "reporting_currency", - "revenue_band", - "forms_filed" + "6423", + "1", + "7522", + "3", + "7511", + "7524", + "2", + "26420387", + "2593174", + "3503", + "6", + "5", + "4", + "8", + "1477", + "6422", + "468328", + "28608997", + "998917", + "4726642", + "10", + "2378961" ], "in": "query", - "name": "facet", + "name": "event_type_id", "required": true, "type": "string", - "x-example": "sic" - }, - { - "description": "Full-text query over the company name, or an exact ticker match, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact ticker filter (case-insensitive), max 32 characters", - "in": "query", - "name": "ticker", - "type": "string" - }, - { - "description": "Exact SIC industry-code filter, max 32 characters", - "in": "query", - "name": "sic", - "type": "string" + "x-example": "6423" }, { - "description": "Exact exchange filter as reported by EDGAR, max 64 characters", + "description": "Competition id from a league, sport or home response `competitions`", "in": "query", - "name": "exchange", - "type": "string" + "name": "competition_id", + "required": true, + "type": "integer", + "x-example": 12282733 }, { - "description": "Exact state/country-of-incorporation filter, max 32 characters", + "default": "nj", + "description": "U.S. market to query (prices and offered markets differ by state); default nj", + "enum": [ + "ar", + "az", + "co", + "ct", + "dc", + "ia", + "il", + "in", + "ks", + "ky", + "la", + "ma", + "md", + "mi", + "mo", + "mr", + "nc", + "nj", + "ny", + "oh", + "on", + "pa", + "pr", + "tn", + "va", + "vt", + "wv", + "wy" + ], "in": "query", - "name": "state_of_incorporation", + "name": "state", "type": "string" }, { - "description": "Exact entity-type filter, max 64 characters", + "description": "Show only one tab of this page: a tab slug from the response `tabs[].slug` (the lowercase-hyphenated tab title, such as `games` or `player-props`). An unknown slug returns 400 listing the page's tabs", "in": "query", - "name": "entity_type", + "name": "tab", "type": "string" }, { - "description": "Exact reporting-currency filter, ISO-4217 code, e.g. USD, JPY, EUR", + "description": "Keep only these market types (repeat the parameter or comma-separate), for example `MONEY_LINE`. Valid values are listed in the response `market_types`; unmatched types return no markets", "in": "query", - "name": "reporting_currency", + "name": "market_type", "type": "string" }, { - "description": "When true, keep only companies that have XBRL financial statements", + "default": false, + "description": "Return events without their markets (a cheap event listing); `market_types` is still returned", "in": "query", - "name": "has_financials", + "name": "exclude_markets", "type": "boolean" - }, - { - "description": "Minimum latest-annual revenue in USD (normalized at reference rates), 0 or greater", - "in": "query", - "name": "min_revenue", - "type": "number" - }, - { - "description": "Exact form-type filter, e.g. 10-K, 8-K", - "in": "query", - "name": "form_filed", - "type": "string" } ], "produces": [ @@ -332560,7 +406184,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.secCompaniesFacetResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookPageResponseDoc" } }, "400": { @@ -332569,14 +406193,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -332587,66 +406217,76 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the SEC companies dataset", + "summary": "FanDuel Sportsbook competition schedule and futures", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/sec-companies/financials/{cik}": { + "/fanduel/sportsbook/event": { "get": { "consumes": [ "application/json" ], - "description": "Returns a company's financial-statement history (income statement, balance sheet, cash flow) from the SEC companies dataset, newest fiscal year first. An unknown CIK or a company with no XBRL data returns an empty series rather than a 404 — most filers without a current ticker have no financial-statement history at all. `lines` keys are the same concept names the live `/sec/financials` endpoint uses (e.g. `revenue`, `net_income`, `total_assets`); `ratios` keys include `gross_margin`, `operating_margin`, `net_margin`, `revenue_growth_yoy`, `current_ratio`, `debt_to_equity`, `free_cash_flow` where derivable. statement enum: `income`, `balance`, `cash_flow`. period enum: `annual`, `quarterly`.", - "operationId": "datasets-sec-companies-financials", + "description": "Returns one event with the markets and odds of one tab (game lines, player props, quarters, same-game-parlay markets and more). `tabs` lists every tab the event offers, each with the `slug` accepted by `tab`; the default is `popular`, which holds the most markets. An unknown tab returns 400 listing the valid slugs; an ended event returns 404.", + "operationId": "fanduel-sportsbook-event", "parameters": [ { - "description": "SEC CIK, numeric or zero-padded", - "in": "path", - "name": "cik", + "description": "Event id from any Sportsbook events listing", + "in": "query", + "name": "event_id", "required": true, - "type": "string", - "x-example": "320193" + "type": "integer", + "x-example": 35605985 }, { - "description": "Statement enum: income, balance, cash_flow. Omit to return all three.", + "default": "nj", + "description": "U.S. market to query (prices and offered markets differ by state); default nj", "enum": [ - "income", - "balance", - "cash_flow" + "ar", + "az", + "co", + "ct", + "dc", + "ia", + "il", + "in", + "ks", + "ky", + "la", + "ma", + "md", + "mi", + "mo", + "mr", + "nc", + "nj", + "ny", + "oh", + "on", + "pa", + "pr", + "tn", + "va", + "vt", + "wv", + "wy" ], "in": "query", - "name": "statement", + "name": "state", "type": "string" }, { - "description": "Period-type enum: annual, quarterly. Omit to return both.", - "enum": [ - "annual", - "quarterly" - ], + "description": "Tab slug from the response `tabs[].slug` (for example `popular`, `passing-props`, `1st-half`, `td-scorer-props`); default `popular`. Tabs differ by sport", "in": "query", - "name": "period", + "name": "tab", "type": "string" }, { - "description": "Inclusive lower bound on fiscal_year", - "in": "query", - "name": "from", - "type": "integer" - }, - { - "description": "Inclusive upper bound on fiscal_year", - "in": "query", - "name": "to", - "type": "integer" - }, - { - "description": "Maximum points returned (most recent fiscal years first), default 100, max 400", + "description": "Keep only these market types (repeat the parameter or comma-separate), for example `MONEY_LINE`. Valid values are listed in the response `market_types`; unmatched types return no markets", "in": "query", - "name": "limit", - "type": "integer" + "name": "market_type", + "type": "string" } ], "produces": [ @@ -332656,7 +406296,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.secCompaniesFinancialsResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookEventResponseDoc" } }, "400": { @@ -332665,14 +406305,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -332683,51 +406329,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a SEC company's financial-statement history", + "summary": "FanDuel Sportsbook event markets", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/sec-companies/insider/{cik}": { + "/fanduel/sportsbook/event/box-score": { "get": { "consumes": [ "application/json" ], - "description": "Returns a company's insider (Form 3/4/5) transaction history from the SEC companies dataset, most recent transaction first. An unknown CIK or a company with no reported transactions returns an empty series rather than a 404.", - "operationId": "datasets-sec-companies-insider", + "description": "Returns an event's box score grouped by stat category (for football passing, rushing, receiving, kicking, defense) with column labels and player names joined in. `available` is false until the provider has a box score.", + "operationId": "fanduel-sportsbook-event-box-score", "parameters": [ { - "description": "SEC CIK, numeric or zero-padded", - "in": "path", - "name": "cik", - "required": true, - "type": "string", - "x-example": "320193" - }, - { - "description": "Inclusive start date (YYYY-MM-DD, UTC) filtering transaction date", - "in": "query", - "name": "from", - "type": "string" - }, - { - "description": "Inclusive end date (YYYY-MM-DD, UTC) filtering transaction date", - "in": "query", - "name": "to", - "type": "string" - }, - { - "description": "Exact transaction code filter, e.g. P (open-market purchase), S (sale)", - "in": "query", - "name": "code", - "type": "string" - }, - { - "description": "Maximum transactions returned (most recent first), default 50, max 200", + "description": "Event id from any Sportsbook events listing", "in": "query", - "name": "limit", - "type": "integer" + "name": "event_id", + "required": true, + "type": "integer", + "x-example": 35605985 } ], "produces": [ @@ -332737,7 +406359,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.secCompaniesInsiderResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookBoxScoreResponseDoc" } }, "400": { @@ -332746,14 +406368,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -332764,27 +406392,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get a SEC company's insider-transaction history", + "summary": "FanDuel Sportsbook live box score", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/sec-companies/items/{cik}": { + "/fanduel/sportsbook/event/play-by-play": { "get": { "consumes": [ "application/json" ], - "description": "Returns one SEC-reporting company by CIK from dataset id `sec-companies`, including its filing-history summary, financial-statement rollups, and trailing-90-day insider-activity summary. Returns 404 when the CIK is not in the dataset.", - "operationId": "datasets-sec-companies-item", + "description": "Returns an event's play-by-play feed. The `feed` object keeps the provider's sport-specific structure (drives and plays for football). `available` is false until play-by-play exists for the event.", + "operationId": "fanduel-sportsbook-event-play-by-play", "parameters": [ { - "description": "SEC CIK, numeric or zero-padded, e.g. 320193 or 0000320193", - "in": "path", - "name": "cik", + "description": "Event id from any Sportsbook events listing", + "in": "query", + "name": "event_id", "required": true, - "type": "string", - "x-example": "320193" + "type": "integer", + "x-example": 35605985 + }, + { + "default": false, + "description": "Return only the play in progress (a much smaller payload for polling a live game); default false", + "in": "query", + "name": "current", + "type": "boolean" } ], "produces": [ @@ -332794,7 +406429,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.secCompaniesItemResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookPlayByPlayResponseDoc" } }, "400": { @@ -332815,8 +406450,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -332827,141 +406462,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a company from the SEC companies dataset", + "summary": "FanDuel Sportsbook live play-by-play", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/sec-companies/search": { + "/fanduel/sportsbook/event/players": { "get": { "consumes": [ "application/json" ], - "description": "Searches SEC-reporting companies — filing history, financial-statement rollups (latest annual/quarterly revenue, net income, total assets) and trailing-90-day insider (Form 3/4/5) activity. Sort enum: `relevance`, `name_asc`, `revenue_desc`, `net_income_desc`, `filing_recent_desc`, `insider_activity_desc`. `entity_type`, `sic`, `sic_description`, `exchange`, and `state_of_incorporation` are open filters over the exact values EDGAR reports for each filer (not a fixed enum) — discover real values via the matching facet. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-sec-companies-search", + "description": "Returns the teams (names, abbreviations, colors, logos) and player roster (name, team, jersey number, position) the live-data provider holds for an event.", + "operationId": "fanduel-sportsbook-event-players", "parameters": [ { - "description": "Full-text query over the company name, or an exact ticker match, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact ticker filter (case-insensitive), e.g. AAPL, max 32 characters", - "in": "query", - "name": "ticker", - "type": "string" - }, - { - "description": "Exact CIK filter, numeric or zero-padded, e.g. 320193 or 0000320193", - "in": "query", - "name": "cik", - "type": "string" - }, - { - "description": "Exact SIC industry-code filter, e.g. 3571, max 32 characters", - "in": "query", - "name": "sic", - "type": "string" - }, - { - "description": "Exact SIC description filter, e.g. Electronic Computers, max 128 characters", - "in": "query", - "name": "sic_description", - "type": "string" - }, - { - "description": "Exact exchange filter as reported by EDGAR, e.g. Nasdaq, NYSE, max 64 characters", - "in": "query", - "name": "exchange", - "type": "string" - }, - { - "description": "Exact state/country-of-incorporation filter as reported by EDGAR, e.g. DE, CA, max 32 characters", - "in": "query", - "name": "state_of_incorporation", - "type": "string" - }, - { - "description": "Exact entity-type filter as reported by EDGAR (e.g. operating), max 64 characters", - "in": "query", - "name": "entity_type", - "type": "string" - }, - { - "description": "Exact reporting-currency filter, ISO-4217 code, e.g. USD, JPY, EUR", - "in": "query", - "name": "reporting_currency", - "type": "string" - }, - { - "description": "When true, keep only companies that have XBRL financial statements", - "in": "query", - "name": "has_financials", - "type": "boolean" - }, - { - "description": "Minimum latest-annual revenue in USD (normalized from the filer's reporting currency at reference rates), 0 or greater", - "in": "query", - "name": "min_revenue", - "type": "number" - }, - { - "description": "Maximum latest-annual revenue in USD (normalized), 0 or greater", - "in": "query", - "name": "max_revenue", - "type": "number" - }, - { - "description": "Minimum latest-annual net income in USD (normalized; negative allowed)", - "in": "query", - "name": "min_net_income", - "type": "number" - }, - { - "description": "Minimum latest-annual total assets in USD (normalized), 0 or greater", - "in": "query", - "name": "min_total_assets", - "type": "number" - }, - { - "description": "Exact form-type filter; keeps only companies that have ever filed this form, e.g. 10-K, 8-K", - "in": "query", - "name": "form_filed", - "type": "string" - }, - { - "description": "Minimum insider (Form 3/4/5) transaction count in the trailing 90 days, 0 or greater", - "in": "query", - "name": "min_insider_txn_count_90d", - "type": "integer" - }, - { - "description": "Sort enum: relevance, name_asc, revenue_desc, net_income_desc, filing_recent_desc, insider_activity_desc", - "enum": [ - "relevance", - "name_asc", - "revenue_desc", - "net_income_desc", - "filing_recent_desc", - "insider_activity_desc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Event id from any Sportsbook events listing", "in": "query", - "name": "page_size", - "type": "integer" + "name": "event_id", + "required": true, + "type": "integer", + "x-example": 35605985 } ], "produces": [ @@ -332971,7 +406492,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.secCompaniesSearchResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookEventPlayersResponseDoc" } }, "400": { @@ -332980,14 +406501,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -332998,49 +406525,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search the SEC companies dataset", + "summary": "FanDuel Sportsbook event teams and player roster", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/sec-institutional-positions/facets": { + "/fanduel/sportsbook/event/score": { "get": { "consumes": [ "application/json" ], - "description": "Returns terms-aggregation counts for one facet of the SEC institutional positions dataset, scoped to the same filters as search. Facet enum: `manager`, `issuer`.", - "operationId": "datasets-sec-institutional-positions-facets", + "description": "Returns an event's live status (`scheduled`, `inprogress`, ...), the data-availability flags for box score, play-by-play and quick bets, and the live score with the period breakdown and game clock once play has started.", + "operationId": "fanduel-sportsbook-event-score", "parameters": [ { - "description": "Facet enum: manager, issuer", - "enum": [ - "manager", - "issuer" - ], + "description": "Event id from any Sportsbook events listing", "in": "query", - "name": "facet", + "name": "event_id", "required": true, - "type": "string", - "x-example": "manager" - }, - { - "description": "Exact institutional-manager CIK filter, numeric or zero-padded", - "in": "query", - "name": "manager_cik", - "type": "string" - }, - { - "description": "Issuer-name text filter (best-effort match), max 256 characters", - "in": "query", - "name": "issuer_name", - "type": "string" - }, - { - "description": "Exact CUSIP filter, max 16 characters", - "in": "query", - "name": "cusip", - "type": "string" + "type": "integer", + "x-example": 35605985 } ], "produces": [ @@ -333050,7 +406555,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.secInstitutionalPositionsFacetResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookEventScoreResponseDoc" } }, "400": { @@ -333059,14 +406564,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -333077,60 +406588,27 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the SEC institutional positions dataset", + "summary": "FanDuel Sportsbook live score and status", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/sec-institutional-positions/search": { + "/fanduel/sportsbook/event/stats": { "get": { "consumes": [ "application/json" ], - "description": "Searches institutional investment managers' quarterly 13F portfolio holdings stored in a search index. Filter by manager_cik for a manager's full reported portfolio (an exact, reliable filter), or by issuer_name/cusip for a best-effort view of which managers reported a position in an issuer — SEC publishes no authoritative CUSIP-to-CIK mapping, so the issuer side is never a guaranteed-resolved join. Sort enum: `value_desc`, `value_asc`, `shares_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-sec-institutional-positions-search", + "description": "Returns one event's public betting split (share of bets and of money on each side of the spread) and each team's last five results, with team colors. Events without published stats return 404.", + "operationId": "fanduel-sportsbook-event-stats", "parameters": [ { - "description": "Exact institutional-manager CIK filter, numeric or zero-padded", - "in": "query", - "name": "manager_cik", - "type": "string" - }, - { - "description": "Issuer-name text filter (best-effort match, not a resolved CIK join), max 256 characters", - "in": "query", - "name": "issuer_name", - "type": "string" - }, - { - "description": "Exact CUSIP filter, max 16 characters", - "in": "query", - "name": "cusip", - "type": "string" - }, - { - "description": "Sort enum: value_desc, value_asc, shares_desc", - "enum": [ - "value_desc", - "value_asc", - "shares_desc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Event id from any Sportsbook events listing", "in": "query", - "name": "page_size", - "type": "integer" + "name": "event_id", + "required": true, + "type": "integer", + "x-example": 35605985 } ], "produces": [ @@ -333140,7 +406618,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.secInstitutionalPositionsSearchResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookEventStatsResponseDoc" } }, "400": { @@ -333149,14 +406627,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -333167,74 +406651,37 @@ "ApiKeyAuth": [] } ], - "summary": "Search the SEC institutional positions dataset", + "summary": "FanDuel Sportsbook event betting splits and form", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/starbucks-stores/facets": { + "/fanduel/sportsbook/events/status": { "get": { "consumes": [ "application/json" ], - "description": "Returns terms aggregation counts for the Starbucks store directory. Facet enum: `country`, `state`, `market`, `amenities`, `ownership_type_code`. Accepts the same filter parameters as search to scope the aggregation.", - "operationId": "datasets-starbucks-stores-facets", + "description": "Returns the live state of up to 30 events in one call: `status` (for example `ACTIVE`), `game_phase` (for example `PRE_PLAY`) and the three logical clocks that change when prices, status or structure change, which makes it a cheap way to poll many events. Ids the Sportsbook does not know are listed in `not_found` instead of failing the call.", + "operationId": "fanduel-sportsbook-events-status", "parameters": [ { - "description": "Facet enum: country, state, market, amenities, ownership_type_code", - "enum": [ - "country", - "state", - "market", - "amenities", - "ownership_type_code" - ], + "collectionFormat": "csv", + "description": "Event ids, 1 to 30, repeated or comma-separated", "in": "query", - "name": "facet", + "items": { + "type": "string" + }, + "name": "event_id", "required": true, - "type": "string", - "x-example": "country" - }, - { - "description": "Full-text search over store name, city, and address", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "ISO-3166-1 alpha-2 country filter", - "in": "query", - "name": "country", - "type": "string" + "type": "array", + "x-example": "36188995" }, { - "description": "State/region code filter", + "description": "Market code, including `on` for Ontario; default `nj`", "in": "query", "name": "state", "type": "string" - }, - { - "description": "Exact city filter", - "in": "query", - "name": "city", - "type": "string" - }, - { - "description": "Crawl-provenance market filter. One of: us, ca", - "enum": [ - "us", - "ca" - ], - "in": "query", - "name": "market", - "type": "string" - }, - { - "description": "Amenity code filter, e.g. DT", - "in": "query", - "name": "amenity", - "type": "string" } ], "produces": [ @@ -333244,7 +406691,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.starbucksStoresFacetResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookEventsStatusResponseDoc" } }, "400": { @@ -333253,14 +406700,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -333271,27 +406718,81 @@ "ApiKeyAuth": [] } ], - "summary": "Facet stored Starbucks stores", + "summary": "FanDuel Sportsbook events status", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/starbucks-stores/items/{store_number}": { + "/fanduel/sportsbook/home": { "get": { "consumes": [ "application/json" ], - "description": "Returns one stored Starbucks store by its store number (e.g. `101-54`) from dataset id `starbucks-stores`. `country` is the store's true country while `market` is crawl provenance. Hours (`schedule`) and `amenities` may be empty for stores outside the US, Canada, Europe, and the Gulf; an empty schedule means \"not published for this market\", not \"closed\".", - "operationId": "datasets-starbucks-stores-item", + "description": "Returns the Sportsbook homepage's featured events with their markets and current American, decimal and fractional odds, grouped by the homepage's tabs. Filter with `tab`, `competition_id` and `market_type`.", + "operationId": "fanduel-sportsbook-home", "parameters": [ { - "description": "Starbucks store number, e.g. 101-54", - "in": "path", - "name": "store_number", - "required": true, - "type": "string", - "x-example": "101-54" + "default": "nj", + "description": "U.S. market to query (prices and offered markets differ by state); default nj", + "enum": [ + "ar", + "az", + "co", + "ct", + "dc", + "ia", + "il", + "in", + "ks", + "ky", + "la", + "ma", + "md", + "mi", + "mo", + "mr", + "nc", + "nj", + "ny", + "oh", + "on", + "pa", + "pr", + "tn", + "va", + "vt", + "wv", + "wy" + ], + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "Show only one tab of this page: a tab slug from the response `tabs[].slug` (the lowercase-hyphenated tab title, such as `games` or `player-props`). An unknown slug returns 400 listing the page's tabs", + "in": "query", + "name": "tab", + "type": "string" + }, + { + "description": "Keep only events of this competition id (from the response `competitions`)", + "in": "query", + "name": "competition_id", + "type": "integer" + }, + { + "description": "Keep only these market types (repeat the parameter or comma-separate), for example `MONEY_LINE`. Valid values are listed in the response `market_types`; unmatched types return no markets", + "in": "query", + "name": "market_type", + "type": "string" + }, + { + "default": false, + "description": "Return events without their markets (a cheap event listing); `market_types` is still returned", + "in": "query", + "name": "exclude_markets", + "type": "boolean" } ], "produces": [ @@ -333301,7 +406802,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.starbucksStoreResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookPageResponseDoc" } }, "400": { @@ -333322,8 +406823,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -333334,67 +406835,89 @@ "ApiKeyAuth": [] } ], - "summary": "Get a stored Starbucks store", + "summary": "FanDuel Sportsbook homepage odds", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/starbucks-stores/nearby": { + "/fanduel/sportsbook/league": { "get": { "consumes": [ "application/json" ], - "description": "Returns stored Starbucks stores within a radius of a point, nearest first, from dataset id `starbucks-stores`. lat, lon, and radius_m are required. Unlike the live /starbucks/stores endpoint (which caps at 50 near a point), this queries the full grid-tiled directory, so it can return every store in the radius. Billing: this endpoint costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-starbucks-stores-nearby", + "description": "Returns a featured league page (for example nfl, nba, mlb) with its events, markets and odds, grouped by the page's tabs such as Games, Player Props, Win Totals or Super Bowl. `custom_page_id` values come from the sports route's `popular_links`; an unknown id returns 404.", + "operationId": "fanduel-sportsbook-league", "parameters": [ { - "description": "Center latitude, from -90 through 90", - "in": "query", - "name": "lat", - "required": true, - "type": "number", - "x-example": 40.7484257 - }, - { - "description": "Center longitude, from -180 through 180", + "description": "League page id such as `nfl`, `nba`, `mlb`, `ncaaf`, `ncaab`, `nhl`, `wnba`, `pga`, `ncaaw`. Tournament and event pages appear and disappear during the year, and a retired page returns 404; list the current ones with the sports route", "in": "query", - "name": "lon", + "name": "custom_page_id", "required": true, - "type": "number", - "x-example": -73.98567 + "type": "string", + "x-example": "nfl" }, { - "description": "Search radius in meters, 1 through 50000", + "default": "nj", + "description": "U.S. market to query (prices and offered markets differ by state); default nj", + "enum": [ + "ar", + "az", + "co", + "ct", + "dc", + "ia", + "il", + "in", + "ks", + "ky", + "la", + "ma", + "md", + "mi", + "mo", + "mr", + "nc", + "nj", + "ny", + "oh", + "on", + "pa", + "pr", + "tn", + "va", + "vt", + "wv", + "wy" + ], "in": "query", - "name": "radius_m", - "required": true, - "type": "integer", - "x-example": 5000 + "name": "state", + "type": "string" }, { - "description": "ISO-3166-1 alpha-2 country filter", + "description": "Show only one tab of this page: a tab slug from the response `tabs[].slug` (the lowercase-hyphenated tab title, such as `games` or `player-props`). An unknown slug returns 400 listing the page's tabs", "in": "query", - "name": "country", + "name": "tab", "type": "string" }, { - "description": "Amenity code filter, e.g. DT", + "description": "Keep only events of this competition id (from the response `competitions`)", "in": "query", - "name": "amenity", - "type": "string" + "name": "competition_id", + "type": "integer" }, { - "description": "Page number, defaults to 1", + "description": "Keep only these market types (repeat the parameter or comma-separate), for example `MONEY_LINE`. Valid values are listed in the response `market_types`; unmatched types return no markets", "in": "query", - "name": "page", - "type": "integer" + "name": "market_type", + "type": "string" }, { - "description": "Page size, defaults to 20 and maxes at 100", + "default": false, + "description": "Return events without their markets (a cheap event listing); `market_types` is still returned", "in": "query", - "name": "page_size", - "type": "integer" + "name": "exclude_markets", + "type": "boolean" } ], "produces": [ @@ -333404,7 +406927,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.starbucksStoresSearchResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookPageResponseDoc" } }, "400": { @@ -333413,14 +406936,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -333431,99 +406960,99 @@ "ApiKeyAuth": [] } ], - "summary": "Find nearby stored Starbucks stores", + "summary": "FanDuel Sportsbook league page odds", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/starbucks-stores/search": { + "/fanduel/sportsbook/live": { "get": { "consumes": [ "application/json" ], - "description": "Searches the worldwide Starbucks store directory (dataset id `starbucks-stores`), built by grid-tiling the store locator around its 50-result cap. Each store has its store number, name, phone, full address, coordinates, weekly hours, amenity codes, and pick-up options. Store discovery is global, but hours, amenities, and phone numbers are populated per market and are largely absent outside the US, Canada, Europe, and the Gulf; an empty schedule means \"not published for this market\", not \"closed\". `country` is the store's true country while `market` is crawl provenance (the US host geocodes worldwide). Supports full-text `q`, `country`/`state`/`city`/`market`/`amenity` filters, `lat`/`lon`/`radius_m` radius filtering, and `sort` (relevance, distance_asc). Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-starbucks-stores-search", + "description": "Returns events that are in play now for one sport, with their live markets and odds. `tabs` lists every sport with its live-event count (`live_count`); pass `event_type_id` to load another sport. Without it the Sportsbook's default sport is returned and reported in `event_type_id`.", + "operationId": "fanduel-sportsbook-live", "parameters": [ { - "description": "Full-text search over store name, city, and address, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "ISO-3166-1 alpha-2 country filter, e.g. US, GB, JP", - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "State/region code filter, e.g. WA", - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "Exact city filter", - "in": "query", - "name": "city", - "type": "string" - }, - { - "description": "Crawl-provenance market filter. One of: us, ca", + "description": "Sport id: 6423 American Football; 1 Soccer; 7522 Basketball; 3 Golf; 7511 Baseball; 7524 Ice Hockey; 2 Tennis; 26420387 Mixed Martial Arts; 2593174 Table Tennis; 3503 Darts; 6 Boxing; 5 Rugby Union; 4 Cricket; 8 Motor Sport; 1477 Rugby League; 6422 Snooker; 468328 Handball; 28608997 Lacrosse; 998917 Volleyball, 4726642 Surfing, 10 Special Bets and 2378961 Politics; availability differs by market (Volleyball is also offered in NJ, PA, CO and AZ), and a sport a market does not offer returns 404", "enum": [ - "us", - "ca" + "6423", + "1", + "7522", + "3", + "7511", + "7524", + "2", + "26420387", + "2593174", + "3503", + "6", + "5", + "4", + "8", + "1477", + "6422", + "468328", + "28608997", + "998917", + "4726642", + "10", + "2378961" ], "in": "query", - "name": "market", - "type": "string" - }, - { - "description": "Amenity code filter, e.g. DT (Drive-Thru), XO (Mobile Order and Pay)", - "in": "query", - "name": "amenity", + "name": "event_type_id", "type": "string" }, { - "description": "Latitude for radius filtering or distance sort, requires lon", - "in": "query", - "name": "lat", - "type": "number" - }, - { - "description": "Longitude for radius filtering or distance sort, requires lat", - "in": "query", - "name": "lon", - "type": "number" - }, - { - "description": "Radius in meters, 1 through 50000; requires lat and lon", - "in": "query", - "name": "radius_m", - "type": "integer" - }, - { - "description": "Sort enum: relevance, distance_asc", + "default": "nj", + "description": "U.S. market to query (prices and offered markets differ by state); default nj", "enum": [ - "relevance", - "distance_asc" + "ar", + "az", + "co", + "ct", + "dc", + "ia", + "il", + "in", + "ks", + "ky", + "la", + "ma", + "md", + "mi", + "mo", + "mr", + "nc", + "nj", + "ny", + "oh", + "on", + "pa", + "pr", + "tn", + "va", + "vt", + "wv", + "wy" ], "in": "query", - "name": "sort", + "name": "state", "type": "string" }, { - "description": "Page number, defaults to 1", + "description": "Keep only these market types (repeat the parameter or comma-separate), for example `MONEY_LINE`. Valid values are listed in the response `market_types`; unmatched types return no markets", "in": "query", - "name": "page", - "type": "integer" + "name": "market_type", + "type": "string" }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "default": false, + "description": "Return events without their markets (a cheap event listing); `market_types` is still returned", "in": "query", - "name": "page_size", - "type": "integer" + "name": "exclude_markets", + "type": "boolean" } ], "produces": [ @@ -333533,7 +407062,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.starbucksStoresSearchResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookPageResponseDoc" } }, "400": { @@ -333548,8 +407077,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -333560,48 +407089,76 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Starbucks store directory", + "summary": "FanDuel Sportsbook live betting events", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/steam-achievements/search": { + "/fanduel/sportsbook/live-count": { "get": { "consumes": [ "application/json" ], - "description": "Searches per-game global achievement unlock percentages (one document per appid × achievement). Pass `app_id` to list a game's achievements. Sort enum: `percent_desc` (most-unlocked first, default), `percent_asc` (rarest first), `rank_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-steam-achievements-search", + "description": "Returns the number of events in play in a market, the figure the Sportsbook's homepage shows beside its Live link. It differs by market (for example about 130 in NJ, 107 in PA, 36 in NY and 185 in Ontario on one afternoon) and moves as games start and end, which makes it a cheap way to watch activity. Use the `live` route to list the events.", + "operationId": "fanduel-sportsbook-live-count", "parameters": [ { - "description": "Exact Steam app id filter", + "description": "Market code, including `on` for Ontario; default `nj`", "in": "query", - "name": "app_id", + "name": "state", "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanduel.sportsbookLiveCountResponseDoc" + } }, - { - "description": "Sort enum: percent_desc, percent_asc, rank_asc", - "enum": [ - "percent_desc", - "percent_asc", - "rank_asc" - ], - "in": "query", - "name": "sort", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, + "ApiKeyAuth": [] + } + ], + "summary": "FanDuel Sportsbook live event count", + "tags": [ + "FanDuel" + ] + } + }, + "/fanduel/sportsbook/live-data": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns live state for up to 20 events from the Sportsbook's in-play service, which covers every sport: tennis sets, games, points and server; soccer score, cards and corners; basketball and hockey period scores and remaining time, with live progress of player-prop markets where the sport has them. `details` keeps the provider's sport-specific structure; `home_score` and `away_score` are filled when the sport reports a single score. Scheduled events return `live: false`; ids with no entry are listed in `missing`.", + "operationId": "fanduel-sportsbook-live-data", + "parameters": [ { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Event id from any Sportsbook events listing; repeat the parameter or comma-separate, 1 to 20 ids", "in": "query", - "name": "page_size", - "type": "integer" + "name": "event_id", + "required": true, + "type": "string", + "x-example": "35605985" } ], "produces": [ @@ -333611,7 +407168,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.steamAchievementsSearchResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookLiveDataResponseDoc" } }, "400": { @@ -333626,8 +407183,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -333638,77 +407195,125 @@ "ApiKeyAuth": [] } ], - "summary": "Search steam-achievements dataset", + "summary": "FanDuel Sportsbook live state for any sport", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/steam-charts/search": { + "/fanduel/sportsbook/live-scores": { "get": { "consumes": [ "application/json" ], - "description": "Searches daily snapshots of Steam's player-count and sales charts, stored in a search index (one document per chart × country × snapshot × rank) so history accumulates. Charts: `most_played` (weekly peak concurrent), `concurrent` (live concurrent players), `top_sellers` (weekly sales; country-specific). With no `date` the latest snapshot is returned (today's chart); pair `app_id` with `sort=date_desc` for an app's rank/players over time. Country is `global` for the player-count charts or an ISO code (e.g. `us`) for `top_sellers`. Sort enum: `rank`, `rank_desc`, `date_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-steam-charts-search", + "description": "Returns the live score and stats of up to 100 events in one call, from the Sportsbook's game-state service. Each event has `home_score` and `away_score`, the `period` and `current_period`, the time left in the period (`period_remaining_milliseconds`, basketball), the available `media_types` (for example `LIVE_VIDEO`, `MATCH_STATS`) and a sport-specific `details` block with per-period points, cards, corners or a timeline. `sport` is the Sportsbook's own name for the details block, in which `football` is soccer and `americanFootball` is the NFL and college football. An event the service has no live state for is listed in `not_found` instead of failing the call; use `event/score`, `event/box-score` and `event/play-by-play` for one event in depth.", + "operationId": "fanduel-sportsbook-live-scores", "parameters": [ { - "description": "Full-text query over the game name, max 256 characters", + "collectionFormat": "csv", + "description": "Event ids, 1 to 100, repeated or comma-separated", "in": "query", - "name": "q", - "type": "string" + "items": { + "type": "string" + }, + "name": "event_id", + "required": true, + "type": "array", + "x-example": "36218656" }, { - "description": "Chart enum: most_played, concurrent, top_sellers", - "enum": [ - "most_played", - "concurrent", - "top_sellers" - ], + "description": "Market code, including `on` for Ontario; default `nj`", "in": "query", - "name": "chart", + "name": "state", "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanduel.sportsbookLiveScoresResponseDoc" + } }, - { - "description": "Market filter: global (player-count charts) or an ISO country code (top_sellers), max 128 characters", - "in": "query", - "name": "country", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Exact Steam app id filter; pair with sort=date_desc for rank/players history", - "in": "query", - "name": "app_id", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "FanDuel Sportsbook live scores and stats for many events", + "tags": [ + "FanDuel" + ] + } + }, + "/fanduel/sportsbook/market-prices": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Refreshes the current prices of up to 70 markets by market id, using the price feed the Sportsbook itself polls. Returns each market's status and every selection's American, decimal and fractional odds in the order requested; market ids the Sportsbook returns nothing for are listed in `missing`. Get market ids from the event and page routes (`markets[].market_id`).", + "operationId": "fanduel-sportsbook-market-prices", + "parameters": [ { - "description": "Snapshot date filter yyyy-MM-dd; defaults to the latest snapshot", + "description": "Market id such as `734.191539418`; repeat the parameter or comma-separate, 1 to 70 ids", "in": "query", - "name": "date", - "type": "string" + "name": "market_id", + "required": true, + "type": "string", + "x-example": "734.168824006" }, { - "description": "Sort enum: rank, rank_desc, date_desc", + "default": "nj", + "description": "U.S. market to query (prices and offered markets differ by state); default nj", "enum": [ - "rank", - "rank_desc", - "date_desc" + "ar", + "az", + "co", + "ct", + "dc", + "ia", + "il", + "in", + "ks", + "ky", + "la", + "ma", + "md", + "mi", + "mo", + "mr", + "nc", + "nj", + "ny", + "oh", + "on", + "pa", + "pr", + "tn", + "va", + "vt", + "wv", + "wy" ], "in": "query", - "name": "sort", + "name": "state", "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", - "in": "query", - "name": "page_size", - "type": "integer" } ], "produces": [ @@ -333718,7 +407323,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.steamChartsSearchResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookMarketPricesResponseDoc" } }, "400": { @@ -333733,8 +407338,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -333745,222 +407350,134 @@ "ApiKeyAuth": [] } ], - "summary": "Search the steam-charts dataset", + "summary": "FanDuel Sportsbook current market prices", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/steam-games/facets": { + "/fanduel/sportsbook/parlays": { "get": { "consumes": [ "application/json" ], - "description": "Returns terms aggregation counts for the Steam games dataset. Facet enum: `type`, `developer`, `publisher`, `genres`, `categories`, `tags`, `primary_tag`, `price_tier`, `review_tier`, `owners_bucket`, `release_year`, `run_id`, `is_free`, `coming_soon`, `platform_windows`, `platform_mac`, `platform_linux`. price_tier enum: `free`, `under5`, `5to15`, `15to30`, `30to60`, `over60`. review_tier enum: `overwhelmingly_positive`, `very_positive`, `positive`, `mostly_positive`, `mixed`, `mostly_negative`, `negative`, `very_negative`, `overwhelmingly_negative`, `insufficient`.", - "operationId": "datasets-steam-games-facets", + "description": "Returns the Sportsbook's Parlay Hub: popular parlays, same-game parlays (SGP) and SGP+ combinations, each with the number of tickets placed on it (`total_bets`), combined odds, the legs and an editor's narrative when there is one. `view` picks the list: `popular` (the homepage list), `all` (every card, filterable by `type`), `next-to-start` (grouped by the events starting soonest) or `event` (popular cards for one event). The Sportsbook returns at most 50 cards per request. `filters` lists the competition groups its own filter bar offers. A request returns at most 50 cards (`card_cap`); `truncated` is true when it filled that cap, and narrower `type`, sport, competition or decimal-odds filters reveal the cards beyond it.", + "operationId": "fanduel-sportsbook-parlays", "parameters": [ { - "description": "Facet enum: type, developer, publisher, genres, categories, tags, primary_tag, price_tier, review_tier, owners_bucket, release_year, run_id, is_free, coming_soon, platform_windows, platform_mac, platform_linux", + "default": "popular", + "description": "Which list: `popular` (default), `all`, `next-to-start` or `event`", "enum": [ - "type", - "developer", - "publisher", - "genres", - "categories", - "tags", - "primary_tag", - "price_tier", - "review_tier", - "owners_bucket", - "release_year", - "run_id", - "is_free", - "coming_soon", - "platform_windows", - "platform_mac", - "platform_linux" + "popular", + "all", + "next-to-start", + "event" ], "in": "query", - "name": "facet", - "required": true, - "type": "string", - "x-example": "type" - }, - { - "description": "Full-text query over name, developer and publisher, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact storefront type filter, max 128 characters", - "in": "query", - "name": "type", - "type": "string" - }, - { - "description": "Exact developer filter, max 128 characters", - "in": "query", - "name": "developer", - "type": "string" - }, - { - "description": "Exact publisher filter, max 128 characters", - "in": "query", - "name": "publisher", - "type": "string" - }, - { - "description": "Exact genre filter, max 128 characters", - "in": "query", - "name": "genre", - "type": "string" - }, - { - "description": "Exact store category filter, max 128 characters", - "in": "query", - "name": "category", + "name": "view", "type": "string" }, { - "description": "Exact community-tag filter (e.g. Roguelike, Cozy), max 128 characters", + "description": "Event id, required for `view=event` and rejected otherwise", "in": "query", - "name": "tag", - "type": "string" + "name": "event_id", + "type": "integer" }, { - "description": "Price-tier enum: free, under5, 5to15, 15to30, 30to60, over60", + "description": "Card type filter for `view=all` (repeat or comma-separate): `PARLAY` (multi-event parlay), `SGP` (same-game parlay), `SGP_PLUS` (SGP combined across games)", "enum": [ - "free", - "under5", - "5to15", - "15to30", - "30to60", - "over60" + "PARLAY", + "SGP", + "SGP_PLUS" ], "in": "query", - "name": "price_tier", + "name": "type", "type": "string" }, { - "description": "Review-tier enum: overwhelmingly_positive, very_positive, positive, mostly_positive, mixed, mostly_negative, negative, very_negative, overwhelmingly_negative, insufficient", + "description": "Sport filter for `view=all` and `view=next-to-start`: 6423 American Football; 1 Soccer; 7522 Basketball; 3 Golf; 7511 Baseball; 7524 Ice Hockey; 2 Tennis; 26420387 Mixed Martial Arts; 2593174 Table Tennis; 3503 Darts; 6 Boxing; 5 Rugby Union; 4 Cricket; 8 Motor Sport; 1477 Rugby League; 6422 Snooker; 468328 Handball; 28608997 Lacrosse; 998917 Volleyball, 4726642 Surfing, 10 Special Bets and 2378961 Politics; availability differs by market (Volleyball is also offered in NJ, PA, CO and AZ), and a sport a market does not offer returns 404", "enum": [ - "overwhelmingly_positive", - "very_positive", - "positive", - "mostly_positive", - "mixed", - "mostly_negative", - "negative", - "very_negative", - "overwhelmingly_negative", - "insufficient" + "6423", + "1", + "7522", + "3", + "7511", + "7524", + "2", + "26420387", + "2593174", + "3503", + "6", + "5", + "4", + "8", + "1477", + "6422", + "468328", + "28608997", + "998917", + "4726642", + "10", + "2378961" ], "in": "query", - "name": "review_tier", - "type": "string" - }, - { - "description": "Exact SteamSpy owners-range bucket filter, max 128 characters", - "in": "query", - "name": "owners_bucket", + "name": "event_type_id", "type": "string" }, { - "description": "Exact crawl run-id filter, max 128 characters", + "description": "Competition filter for `view=all` and `view=next-to-start` (repeat or comma-separate, up to 20 ids); the groups in the response `filters` list valid ids", "in": "query", - "name": "run_id", + "name": "competition_id", "type": "string" }, { - "description": "Filter by free-to-play flag", - "in": "query", - "name": "is_free", - "type": "boolean" - }, - { - "description": "Filter by Windows support", - "in": "query", - "name": "windows", - "type": "boolean" - }, - { - "description": "Filter by macOS support", - "in": "query", - "name": "mac", - "type": "boolean" - }, - { - "description": "Filter by Linux support", - "in": "query", - "name": "linux", - "type": "boolean" - }, - { - "description": "Filter by titles currently discounted (discount_pct > 0)", - "in": "query", - "name": "on_sale", - "type": "boolean" - }, - { - "description": "Minimum current price in cents", - "in": "query", - "name": "min_price_cents", - "type": "integer" - }, - { - "description": "Maximum current price in cents", - "in": "query", - "name": "max_price_cents", - "type": "integer" - }, - { - "description": "Minimum estimated owners (SteamSpy owners midpoint)", - "in": "query", - "name": "min_owners", - "type": "integer" - }, - { - "description": "Minimum positive review count", - "in": "query", - "name": "min_positive", - "type": "integer" - }, - { - "description": "Minimum total review count", - "in": "query", - "name": "min_total_reviews", - "type": "integer" - }, - { - "description": "Minimum positive-review ratio, 0 through 1", + "description": "Minimum combined decimal odds (1.01 to 10000) for `view=all` and `view=next-to-start`", "in": "query", - "name": "min_review_score", + "name": "min_odds", "type": "number" }, { - "description": "Minimum Metacritic score, 0 through 100", - "in": "query", - "name": "min_metacritic", - "type": "integer" - }, - { - "description": "Minimum peak concurrent users yesterday", - "in": "query", - "name": "min_ccu", - "type": "integer" - }, - { - "description": "Minimum release year", + "description": "Maximum combined decimal odds (1.01 to 10000) for `view=all` and `view=next-to-start`", "in": "query", - "name": "min_release_year", - "type": "integer" + "name": "max_odds", + "type": "number" }, { - "description": "Maximum release year", + "default": "nj", + "description": "Market to query; default nj", + "enum": [ + "ar", + "az", + "co", + "ct", + "dc", + "ia", + "il", + "in", + "ks", + "ky", + "la", + "ma", + "md", + "mi", + "mo", + "mr", + "nc", + "nj", + "ny", + "oh", + "on", + "pa", + "pr", + "tn", + "va", + "vt", + "wv", + "wy" + ], "in": "query", - "name": "max_release_year", - "type": "integer" + "name": "state", + "type": "string" } ], "produces": [ @@ -333970,7 +407487,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.steamGamesFacetResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookParlaysResponseDoc" } }, "400": { @@ -333985,8 +407502,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -333997,27 +407514,39 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the Steam games dataset", + "summary": "FanDuel Sportsbook Parlay Hub", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/steam-games/items/{appid}": { + "/fanduel/sportsbook/player": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Steam game from the `steam-games` dataset by numeric appid: name, developers and publishers, genres and categories, price and discount, supported platforms, positive and negative review counts, owner estimates, average and median playtime, concurrent players, Metacritic score and language count. It reads the stored dataset and does not trigger a live scrape; an appid that is not in the dataset returns `404`.", - "operationId": "datasets-steam-games-item", + "description": "Returns a player's overview page: name, position, team, the season, and recent news with the player's updates. NFL players also carry `season_totals` and a `game_log`; NBA players carry `stats` (career and per-season lines) and `projections`. Available for NFL and NBA players; an unknown player id, or a player newly added to a roster whose page is still empty, returns 404.", + "operationId": "fanduel-sportsbook-player", "parameters": [ { - "description": "Steam app id", - "in": "path", - "name": "appid", + "description": "League: `nfl`, `nba`", + "enum": [ + "nfl", + "nba" + ], + "in": "query", + "name": "league", "required": true, - "type": "integer", - "x-example": 620 + "type": "string", + "x-example": "nfl" + }, + { + "description": "Player slug ending in its id, such as `josh-allen-53775`; take it from the `players` route (`players[].slug`) or `team/roster` (`players[].slug`)", + "in": "query", + "name": "player", + "required": true, + "type": "string", + "x-example": "josh-allen-53775" } ], "produces": [ @@ -334027,7 +407556,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.steamGameResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookPlayerResponseDoc" } }, "400": { @@ -334042,14 +407571,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -334060,225 +407583,191 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Steam game from the dataset", + "summary": "FanDuel Sportsbook player overview", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/steam-games/search": { + "/fanduel/sportsbook/player/news": { "get": { "consumes": [ "application/json" ], - "description": "Searches enriched public Steam catalog records stored in a search index. price_tier enum: `free`, `under5`, `5to15`, `15to30`, `30to60`, `over60`. review_tier enum: `overwhelmingly_positive`, `very_positive`, `positive`, `mostly_positive`, `mixed`, `mostly_negative`, `negative`, `very_negative`, `overwhelmingly_negative`, `insufficient`. Sort enum: `relevance`, `owners_desc`, `reviews_desc`, `review_score_desc`, `ccu_desc`, `metacritic_desc`, `price_asc`, `price_desc`, `release_desc`, `release_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-steam-games-search", + "description": "Returns a page of a player's news (title, summary, author, time, link). Without `cursor` it is the player page's own first 15 articles; while `has_more` is true, pass `next_cursor` as `cursor` to continue, 1 to 50 articles at a time (default 25). Available for NFL and NBA players; a player with no coverage returns an empty list.", + "operationId": "fanduel-sportsbook-player-news", "parameters": [ { - "description": "Full-text query over name, developer and publisher, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact storefront type filter (e.g. game, dlc, demo), max 128 characters", - "in": "query", - "name": "type", - "type": "string" - }, - { - "description": "Exact developer filter, max 128 characters", - "in": "query", - "name": "developer", - "type": "string" - }, - { - "description": "Exact publisher filter, max 128 characters", - "in": "query", - "name": "publisher", - "type": "string" - }, - { - "description": "Exact genre filter (e.g. Action, Indie), max 128 characters", - "in": "query", - "name": "genre", - "type": "string" - }, - { - "description": "Exact store category filter (e.g. Single-player), max 128 characters", - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Exact community-tag filter (e.g. Roguelike, Metroidvania, Cozy), max 128 characters", - "in": "query", - "name": "tag", - "type": "string" - }, - { - "description": "Price-tier enum: free, under5, 5to15, 15to30, 30to60, over60", - "enum": [ - "free", - "under5", - "5to15", - "15to30", - "30to60", - "over60" - ], - "in": "query", - "name": "price_tier", - "type": "string" - }, - { - "description": "Review-tier enum: overwhelmingly_positive, very_positive, positive, mostly_positive, mixed, mostly_negative, negative, very_negative, overwhelmingly_negative, insufficient", + "description": "League: `nfl`, `nba`", "enum": [ - "overwhelmingly_positive", - "very_positive", - "positive", - "mostly_positive", - "mixed", - "mostly_negative", - "negative", - "very_negative", - "overwhelmingly_negative", - "insufficient" + "nfl", + "nba" ], "in": "query", - "name": "review_tier", - "type": "string" + "name": "league", + "required": true, + "type": "string", + "x-example": "nfl" }, { - "description": "Exact SteamSpy owners-range bucket filter, max 128 characters", + "description": "Player slug ending in its id, such as `josh-allen-53775`; take it from the `players` route (`players[].slug`) or `team/roster` (`players[].slug`)", "in": "query", - "name": "owners_bucket", - "type": "string" + "name": "player", + "required": true, + "type": "string", + "x-example": "josh-allen-53775" }, { - "description": "Exact crawl run-id filter, max 128 characters", + "description": "Continue from the previous response's `next_cursor`; omit for the first page", "in": "query", - "name": "run_id", + "name": "cursor", "type": "string" }, { - "description": "Filter by free-to-play flag", - "in": "query", - "name": "is_free", - "type": "boolean" - }, - { - "description": "Filter by Windows support", - "in": "query", - "name": "windows", - "type": "boolean" - }, - { - "description": "Filter by macOS support", - "in": "query", - "name": "mac", - "type": "boolean" - }, - { - "description": "Filter by Linux support", - "in": "query", - "name": "linux", - "type": "boolean" - }, - { - "description": "Filter by titles currently discounted (discount_pct > 0)", - "in": "query", - "name": "on_sale", - "type": "boolean" - }, - { - "description": "Minimum current price in cents", - "in": "query", - "name": "min_price_cents", - "type": "integer" - }, - { - "description": "Maximum current price in cents", + "description": "Articles per page after the first, 1 to 50; default 25. Only valid together with `cursor`", "in": "query", - "name": "max_price_cents", + "maximum": 50, + "minimum": 1, + "name": "limit", "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanduel.sportsbookPlayerNewsResponseDoc" + } }, - { - "description": "Minimum estimated owners (SteamSpy owners midpoint)", - "in": "query", - "name": "min_owners", - "type": "integer" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Minimum positive review count", - "in": "query", - "name": "min_positive", - "type": "integer" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Minimum total review count", - "in": "query", - "name": "min_total_reviews", - "type": "integer" - }, + "ApiKeyAuth": [] + } + ], + "summary": "FanDuel Sportsbook player news", + "tags": [ + "FanDuel" + ] + } + }, + "/fanduel/sportsbook/player/props": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a player's prop markets for upcoming games, with event, market and selection ids and the current odds of each selection. A player with no listed props returns an empty `events` list. Available for NFL and NBA players.", + "operationId": "fanduel-sportsbook-player-props", + "parameters": [ { - "description": "Minimum positive-review ratio, 0 through 1", + "description": "League: `nfl`, `nba`", + "enum": [ + "nfl", + "nba" + ], "in": "query", - "name": "min_review_score", - "type": "number" + "name": "league", + "required": true, + "type": "string", + "x-example": "nfl" }, { - "description": "Minimum Metacritic score, 0 through 100", + "description": "Player slug ending in its id, such as `josh-allen-53775`; take it from the `players` route (`players[].slug`) or `team/roster` (`players[].slug`)", "in": "query", - "name": "min_metacritic", - "type": "integer" + "name": "player", + "required": true, + "type": "string", + "x-example": "josh-allen-53775" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanduel.sportsbookPlayerPropsResponseDoc" + } }, - { - "description": "Minimum peak concurrent users yesterday", - "in": "query", - "name": "min_ccu", - "type": "integer" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Minimum release year", - "in": "query", - "name": "min_release_year", - "type": "integer" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Maximum release year", - "in": "query", - "name": "max_release_year", - "type": "integer" - }, + "ApiKeyAuth": [] + } + ], + "summary": "FanDuel Sportsbook player props", + "tags": [ + "FanDuel" + ] + } + }, + "/fanduel/sportsbook/player/stats": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a player's career and per-season statistics. The groups differ by sport (NFL: career rows plus regular-season and post-season weeks; NBA: regular-season and playoff careers plus preseason, regular-season and play-in seasons) and are passed through with snake_case keys. Available for NFL and NBA players.", + "operationId": "fanduel-sportsbook-player-stats", + "parameters": [ { - "description": "Sort enum: relevance, owners_desc, reviews_desc, review_score_desc, ccu_desc, metacritic_desc, price_asc, price_desc, release_desc, release_asc", + "description": "League: `nfl`, `nba`", "enum": [ - "relevance", - "owners_desc", - "reviews_desc", - "review_score_desc", - "ccu_desc", - "metacritic_desc", - "price_asc", - "price_desc", - "release_desc", - "release_asc" + "nfl", + "nba" ], "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" + "name": "league", + "required": true, + "type": "string", + "x-example": "nfl" }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Player slug ending in its id, such as `josh-allen-53775`; take it from the `players` route (`players[].slug`) or `team/roster` (`players[].slug`)", "in": "query", - "name": "page_size", - "type": "integer" + "name": "player", + "required": true, + "type": "string", + "x-example": "josh-allen-53775" } ], "produces": [ @@ -334288,7 +407777,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.steamGamesSearchResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookPlayerStatsResponseDoc" } }, "400": { @@ -334297,14 +407786,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -334315,52 +407804,51 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Steam games dataset", + "summary": "FanDuel Sportsbook player statistics", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/steam-news/search": { + "/fanduel/sportsbook/players": { "get": { "consumes": [ "application/json" ], - "description": "Searches Steam news + announcements for tracked apps (one document per appid × gid; the latest items per app are kept). Filter by `app_id` for a single game's news, or full-text `q` over the title + contents. Sort enum: `date_desc` (newest first, default), `date_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-steam-news-search", + "description": "Searches the players that have Sportsbook player pages: about 2,400 in the NFL and 480 in the NBA. Each entry has the `slug` that the player routes take, the numeric `player_id` and a `name` spelled from the slug (without punctuation or accents; `team/roster` has the exact spelling). `q` matches every word against the slug, results are in slug order, and `total` counts all matches so `limit` and `offset` can page through them.", + "operationId": "fanduel-sportsbook-players", "parameters": [ { - "description": "Full-text query over the news title + contents, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact Steam app id filter", + "description": "League: `nfl`, `nba`", + "enum": [ + "nfl", + "nba" + ], "in": "query", - "name": "app_id", - "type": "string" + "name": "league", + "required": true, + "type": "string", + "x-example": "nfl" }, { - "description": "Sort enum: date_desc, date_asc", - "enum": [ - "date_desc", - "date_asc" - ], + "description": "Words to find in the player name, such as `josh allen`; omit to list everyone", "in": "query", - "name": "sort", + "name": "q", "type": "string" }, { - "description": "Page number, defaults to 1", + "description": "Players per page, 1 to 200; default 50", "in": "query", - "name": "page", + "maximum": 200, + "minimum": 1, + "name": "limit", "type": "integer" }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Players to skip; default 0", "in": "query", - "name": "page_size", + "minimum": 0, + "name": "offset", "type": "integer" } ], @@ -334371,7 +407859,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.steamNewsSearchResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookPlayersResponseDoc" } }, "400": { @@ -334380,14 +407868,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -334398,54 +407886,110 @@ "ApiKeyAuth": [] } ], - "summary": "Search the steam-news dataset", + "summary": "FanDuel Sportsbook player directory", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/steam-playercounts/search": { + "/fanduel/sportsbook/promotions": { "get": { "consumes": [ "application/json" ], - "description": "Searches the daily concurrent-player time series for tracked games (one document per appid × day). Pair `app_id` with `sort=date_desc` for a game's player-count history, or pass `date` for one day's snapshot. Sort enum: `date_desc` (default), `date_asc`, `players_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-steam-playercounts-search", + "description": "Lists the public promotions the Sportsbook shows to an anonymous visitor on its homepage, a league page or a sport page, with each promotion's tags, offer link, end time and artwork, and the carousel placement that orders them. Offers differ by `state` and by page. `tags` is the census of promotion tags on the page and is always unfiltered, so valid `tag` values are discoverable.", + "operationId": "fanduel-sportsbook-promotions", "parameters": [ { - "description": "Exact Steam app id filter", + "default": "home", + "description": "Which page's promotions: `home` (default), `league` or `sport`", + "enum": [ + "home", + "league", + "sport" + ], "in": "query", - "name": "app_id", + "name": "context", "type": "string" }, { - "description": "Snapshot date filter yyyy-MM-dd", + "description": "League page id, required for `context=league` (for example `nfl`)", "in": "query", - "name": "date", + "name": "custom_page_id", "type": "string" }, { - "description": "Sort enum: date_desc, date_asc, players_desc", + "description": "Sport id, required for `context=sport`: 6423 American Football; 1 Soccer; 7522 Basketball; 3 Golf; 7511 Baseball; 7524 Ice Hockey; 2 Tennis; 26420387 Mixed Martial Arts; 2593174 Table Tennis; 3503 Darts; 6 Boxing; 5 Rugby Union; 4 Cricket; 8 Motor Sport; 1477 Rugby League; 6422 Snooker; 468328 Handball; 28608997 Lacrosse; 998917 Volleyball, 4726642 Surfing, 10 Special Bets and 2378961 Politics; availability differs by market (Volleyball is also offered in NJ, PA, CO and AZ), and a sport a market does not offer returns 404", "enum": [ - "date_desc", - "date_asc", - "players_desc" + "6423", + "1", + "7522", + "3", + "7511", + "7524", + "2", + "26420387", + "2593174", + "3503", + "6", + "5", + "4", + "8", + "1477", + "6422", + "468328", + "28608997", + "998917", + "4726642", + "10", + "2378961" ], "in": "query", - "name": "sort", + "name": "event_type_id", "type": "string" }, { - "description": "Page number, defaults to 1", + "description": "Keep only promotions with one of these tags (repeat the parameter or comma-separate), for example `nfl` or `basketball`; valid tags are listed in the response `tags`", "in": "query", - "name": "page", - "type": "integer" + "name": "tag", + "type": "string" }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "default": "nj", + "description": "Market to query (offers differ by state); default nj", + "enum": [ + "ar", + "az", + "co", + "ct", + "dc", + "ia", + "il", + "in", + "ks", + "ky", + "la", + "ma", + "md", + "mi", + "mo", + "mr", + "nc", + "nj", + "ny", + "oh", + "on", + "pa", + "pr", + "tn", + "va", + "vt", + "wv", + "wy" + ], "in": "query", - "name": "page_size", - "type": "integer" + "name": "state", + "type": "string" } ], "produces": [ @@ -334455,7 +407999,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.steamPlayerCountsSearchResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookPromotionsResponseDoc" } }, "400": { @@ -334470,8 +408014,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -334482,56 +408026,51 @@ "ApiKeyAuth": [] } ], - "summary": "Search steam-playercounts dataset", + "summary": "FanDuel Sportsbook promotions", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/steam-prices/search": { + "/fanduel/sportsbook/schedule": { "get": { "consumes": [ "application/json" ], - "description": "Searches the daily price time series for priced games (one document per appid × day; integer cents). Pair `app_id` with `sort=date_desc` for a game's price history, or pass `date` for one day's snapshot. Sort enum: `date_desc` (default), `date_asc`, `price_asc`, `price_desc`, `discount_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-steam-prices-search", + "description": "Returns a league's games with teams, start time, status, venue, broadcast network and scores. The NFL is selected by `week` (default: the current week; the response lists every week id in `weeks`) or by `date` and `end_date`; college football by `date` and `end_date` (default: today, UTC); the NBA and MLB by `date` (default: today, UTC). Available for the NFL, NBA, MLB and college football.", + "operationId": "fanduel-sportsbook-schedule", "parameters": [ { - "description": "Exact Steam app id filter", + "description": "League: `nfl`, `nba`, `mlb`, `college-football`", + "enum": [ + "nfl", + "nba", + "mlb", + "college-football" + ], "in": "query", - "name": "app_id", - "type": "string" + "name": "league", + "required": true, + "type": "string", + "x-example": "nfl" }, { - "description": "Snapshot date filter yyyy-MM-dd", + "description": "NFL only: week id from the response `weeks` list, such as `7`; default is the current week. Cannot be combined with `date`", "in": "query", - "name": "date", + "name": "week", "type": "string" }, { - "description": "Sort enum: date_desc, date_asc, price_asc, price_desc, discount_desc", - "enum": [ - "date_desc", - "date_asc", - "price_asc", - "price_desc", - "discount_desc" - ], + "description": "First day as `YYYY-MM-DD`. Required form for the NBA and MLB (default today, UTC); optional for the NFL and college football", "in": "query", - "name": "sort", + "name": "date", "type": "string" }, { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "NFL and college football only: last day as `YYYY-MM-DD`, at most 31 days after `date`; default is `date` alone", "in": "query", - "name": "page_size", - "type": "integer" + "name": "end_date", + "type": "string" } ], "produces": [ @@ -334541,7 +408080,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.steamPricesSearchResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookLeagueScheduleResponseDoc" } }, "400": { @@ -334550,14 +408089,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -334568,66 +408107,115 @@ "ApiKeyAuth": [] } ], - "summary": "Search the steam-prices dataset", + "summary": "FanDuel Sportsbook league schedule", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/steam-reviews/search": { + "/fanduel/sportsbook/search": { "get": { "consumes": [ "application/json" ], - "description": "Searches the stored Steam review corpus (the most-helpful reviews per game; one document per appid × recommendation). Full-text `q` over the review body, filter by `app_id`, `language`, or `voted_up` (positive/negative). Sort enum: `votes_desc` (most-helpful first, default), `weighted_desc`, `date_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-steam-reviews-search", + "description": "Searches the Sportsbook's events and competitions by text (team, player-event or league names such as `lakers` or `nfl`). Events come back in the search index's relevance order with the sport, competition and start time; competitions come back with a match count. Use the returned `event_id` and `competition_id` with the event and competition routes.", + "operationId": "fanduel-sportsbook-search", "parameters": [ { - "description": "Full-text query over the review body, max 256 characters", + "description": "Search text, 2 to 100 characters", "in": "query", "name": "q", - "type": "string" - }, - { - "description": "Exact Steam app id filter", - "in": "query", - "name": "app_id", - "type": "string" - }, - { - "description": "Review language filter (e.g. english, schinese)", - "in": "query", - "name": "language", - "type": "string" + "required": true, + "type": "string", + "x-example": "nfl" }, { - "description": "Recommendation filter: true (positive) or false (negative)", + "default": "all", + "description": "What to search: `all` (events and competitions), `event` or `competition`; default all", + "enum": [ + "all", + "event", + "competition" + ], "in": "query", - "name": "voted_up", + "name": "type", "type": "string" }, { - "description": "Sort enum: votes_desc, weighted_desc, date_desc", + "description": "Limit results to one sport: 6423 American Football; 1 Soccer; 7522 Basketball; 3 Golf; 7511 Baseball; 7524 Ice Hockey; 2 Tennis; 26420387 Mixed Martial Arts; 2593174 Table Tennis; 3503 Darts; 6 Boxing; 5 Rugby Union; 4 Cricket; 8 Motor Sport; 1477 Rugby League; 6422 Snooker; 468328 Handball; 28608997 Lacrosse; 998917 Volleyball, 4726642 Surfing, 10 Special Bets and 2378961 Politics; availability differs by market (Volleyball is also offered in NJ, PA, CO and AZ), and a sport a market does not offer returns 404", "enum": [ - "votes_desc", - "weighted_desc", - "date_desc" + "6423", + "1", + "7522", + "3", + "7511", + "7524", + "2", + "26420387", + "2593174", + "3503", + "6", + "5", + "4", + "8", + "1477", + "6422", + "468328", + "28608997", + "998917", + "4726642", + "10", + "2378961" ], "in": "query", - "name": "sort", + "name": "event_type_id", "type": "string" }, { - "description": "Page number, defaults to 1", + "default": 20, + "description": "Maximum events returned, 1 to 50; default 20", "in": "query", - "name": "page", + "maximum": 50, + "minimum": 1, + "name": "limit", "type": "integer" }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "default": "nj", + "description": "U.S. market to query (prices and offered markets differ by state); default nj", + "enum": [ + "ar", + "az", + "co", + "ct", + "dc", + "ia", + "il", + "in", + "ks", + "ky", + "la", + "ma", + "md", + "mi", + "mo", + "mr", + "nc", + "nj", + "ny", + "oh", + "on", + "pa", + "pr", + "tn", + "va", + "vt", + "wv", + "wy" + ], "in": "query", - "name": "page_size", - "type": "integer" + "name": "state", + "type": "string" } ], "produces": [ @@ -334637,7 +408225,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.steamReviewsSearchResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookSearchResponseDoc" } }, "400": { @@ -334652,8 +408240,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -334664,164 +408252,203 @@ "ApiKeyAuth": [] } ], - "summary": "Search the steam-reviews dataset", + "summary": "FanDuel Sportsbook search", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/techstack/facets": { + "/fanduel/sportsbook/search/tabs": { "get": { "consumes": [ "application/json" ], - "description": "Returns distribution counts over the website tech-stack index (dataset id enum value `techstack`), honoring the same filters as search — the technology / category market-share view. Facet enum: `technology`, `category`, `cms`, `ecommerce`, `cdn`, `web_server`, `server_language`, `analytics`, `tld`, `render_tier`, `seed_source`.", - "operationId": "datasets-techstack-facets", + "description": "Returns the Sportsbook's own search results, grouped into sport tabs (for example `Basketball`, `Ice Hockey`, `American Football`) and 20 per page. `tabs` lists the sports that have matches and the selected one is returned in `tab`; pass a tab title as `tab` to read another sport. A query without `tab` also lists competition `pills` for the selected sport, and passing `pill` with `tab` keeps only that competition. `found` counts the matches in the selected tab (and pill), `total_results` the matches across the whole query, and `next_start_index` is the `start_index` of the next page while more remain. Events and competitions are returned without markets; use the `search` route for markets.", + "operationId": "fanduel-sportsbook-search-tabs", "parameters": [ { - "description": "Facet enum: technology, category, cms, ecommerce, cdn, web_server, server_language, analytics, tld, render_tier, seed_source", - "enum": [ - "technology", - "category", - "cms", - "ecommerce", - "cdn", - "web_server", - "server_language", - "analytics", - "tld", - "render_tier", - "seed_source" - ], + "description": "Search text, 3 to 100 characters, without `<` or `>`", "in": "query", - "name": "facet", + "name": "q", "required": true, "type": "string", - "x-example": "technology" + "x-example": "nba" }, { - "description": "Substring match on the site domain, max 256 characters", + "description": "Sport tab title from a previous response's `tabs[].title`, such as `Basketball`; default is the tab with the most relevant matches", "in": "query", - "name": "q", + "name": "tab", "type": "string" }, { - "collectionFormat": "csv", - "description": "Repeatable exact technology name the site MUST use (AND)", - "in": "query", - "items": { - "type": "string" - }, - "name": "technology", - "type": "array" - }, - { - "collectionFormat": "csv", - "description": "Repeatable exact technology name; the site must use at least one (OR)", - "in": "query", - "items": { - "type": "string" - }, - "name": "any_of", - "type": "array" - }, - { - "collectionFormat": "csv", - "description": "Repeatable exact technology name the site must NOT use (excludes)", - "in": "query", - "items": { - "type": "string" - }, - "name": "not", - "type": "array" - }, - { - "description": "Exact category filter, e.g. Ecommerce, CMS, Analytics", + "description": "Competition title from the response `pills[].title`, such as `NBA`; needs `tab`", "in": "query", - "name": "category", + "name": "pill", "type": "string" }, { - "description": "Exact CMS filter, e.g. WordPress, Shopify, Webflow", + "default": 0, + "description": "Index of the first result, 0 to 9999, in steps of 20; default 0", "in": "query", - "name": "cms", - "type": "string" + "maximum": 9999, + "minimum": 0, + "name": "start_index", + "type": "integer" }, { - "description": "Exact e-commerce platform filter, e.g. Shopify, WooCommerce, Magento", + "description": "IANA time zone for result times, such as `America/New_York`; default `UTC`", "in": "query", - "name": "ecommerce", + "name": "timezone", "type": "string" }, { - "description": "Exact CDN / hosting filter, e.g. Cloudflare, Fastly, Vercel", + "description": "Market code, including `on` for Ontario; default `nj`", "in": "query", - "name": "cdn", + "name": "state", "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanduel.sportsbookSearchTabsResponseDoc" + } }, - { - "description": "Exact web-server filter, e.g. nginx, Apache, IIS", - "in": "query", - "name": "web_server", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Exact server language / framework filter, e.g. PHP, ASP.NET, Ruby on Rails", - "in": "query", - "name": "server_language", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Exact top-level-domain filter, e.g. com, org, io", + "ApiKeyAuth": [] + } + ], + "summary": "FanDuel Sportsbook grouped search", + "tags": [ + "FanDuel" + ] + } + }, + "/fanduel/sportsbook/sport": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns every league, event and market the Sportsbook shows for one sport, with current odds, grouped by the sport page's tabs. Get `event_type_id` from the sports route.", + "operationId": "fanduel-sportsbook-sport", + "parameters": [ + { + "description": "Sport id: 6423 American Football; 1 Soccer; 7522 Basketball; 3 Golf; 7511 Baseball; 7524 Ice Hockey; 2 Tennis; 26420387 Mixed Martial Arts; 2593174 Table Tennis; 3503 Darts; 6 Boxing; 5 Rugby Union; 4 Cricket; 8 Motor Sport; 1477 Rugby League; 6422 Snooker; 468328 Handball; 28608997 Lacrosse; 998917 Volleyball, 4726642 Surfing, 10 Special Bets and 2378961 Politics; availability differs by market (Volleyball is also offered in NJ, PA, CO and AZ), and a sport a market does not offer returns 404", + "enum": [ + "6423", + "1", + "7522", + "3", + "7511", + "7524", + "2", + "26420387", + "2593174", + "3503", + "6", + "5", + "4", + "8", + "1477", + "6422", + "468328", + "28608997", + "998917", + "4726642", + "10", + "2378961" + ], "in": "query", - "name": "tld", - "type": "string" + "name": "event_type_id", + "required": true, + "type": "string", + "x-example": "7522" }, { - "description": "Fetch-tier filter. Enum: http, browser", + "default": "nj", + "description": "U.S. market to query (prices and offered markets differ by state); default nj", "enum": [ - "http", - "browser" + "ar", + "az", + "co", + "ct", + "dc", + "ia", + "il", + "in", + "ks", + "ky", + "la", + "ma", + "md", + "mi", + "mo", + "mr", + "nc", + "nj", + "ny", + "oh", + "on", + "pa", + "pr", + "tn", + "va", + "vt", + "wv", + "wy" ], "in": "query", - "name": "render_tier", + "name": "state", "type": "string" }, { - "description": "Source filter for where the domain was discovered, e.g. tranco", + "description": "Show only one tab of this page: a tab slug from the response `tabs[].slug` (the lowercase-hyphenated tab title, such as `games` or `player-props`). An unknown slug returns 400 listing the page's tabs", "in": "query", - "name": "seed_source", + "name": "tab", "type": "string" }, { - "description": "true keeps only sites with a detected CAPTCHA", + "description": "Keep only events of this competition id (from the response `competitions`)", "in": "query", - "name": "has_captcha", - "type": "boolean" + "name": "competition_id", + "type": "integer" }, { - "description": "false (the common case) excludes backend CDN/DNS/cloud-vendor hostnames that rank highly but were never meant to serve a public homepage, keeping only real, human-navigable sites; true keeps only those backend hostnames", + "description": "Keep only these market types (repeat the parameter or comma-separate), for example `MONEY_LINE`. Valid values are listed in the response `market_types`; unmatched types return no markets", "in": "query", - "name": "is_infrastructure", - "type": "boolean" + "name": "market_type", + "type": "string" }, { - "description": "true keeps only sites whose homepage was fetched", + "default": false, + "description": "Return events without their markets (a cheap event listing); `market_types` is still returned", "in": "query", - "name": "reachable", + "name": "exclude_markets", "type": "boolean" - }, - { - "description": "Minimum number of detected technologies, 0 or greater", - "in": "query", - "name": "min_tech_count", - "type": "integer" - }, - { - "description": "Scan run id; defaults to the latest run", - "in": "query", - "name": "run_id", - "type": "string" } ], "produces": [ @@ -334831,7 +408458,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.techstackFacetResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookPageResponseDoc" } }, "400": { @@ -334840,14 +408467,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -334858,27 +408491,56 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the website tech-stack dataset", + "summary": "FanDuel Sportsbook sport page odds", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/techstack/items/{domain}": { + "/fanduel/sportsbook/sports": { "get": { "consumes": [ "application/json" ], - "description": "Returns one site by its domain from dataset id enum value `techstack`, including every detected technology (name, categories, confidence, version, evidence) plus the CMS / e-commerce / CDN / web-server / server-language rollups. Also flags whether the domain looks like backend CDN/DNS/cloud-vendor infrastructure rather than a real, human-navigable site (see `is_infrastructure`). Returns 404 when the domain is not in the index.", - "operationId": "datasets-techstack-item", + "description": "Returns the Sportsbook's navigation: the sports with their `event_type_id` (the set a market offers changes: on 2026-10-24 NJ and CO listed 19, PA and AZ 18, NY only 12, and Ontario 22 on 2026-10-23), the featured league pages (each with the `custom_page_id` accepted by the league route), quick links, teaser-bet competitions, and the 28 supported markets (27 U.S. states and Ontario, `state`) the other routes can query. Use it to discover valid `event_type_id` and `custom_page_id` values.", + "operationId": "fanduel-sportsbook-sports", "parameters": [ { - "description": "Site domain, e.g. shopify.com (a scheme and www. are stripped)", - "in": "path", - "name": "domain", - "required": true, - "type": "string", - "x-example": "shopify.com" + "default": "nj", + "description": "U.S. market to query (prices and offered markets differ by state); default nj", + "enum": [ + "ar", + "az", + "co", + "ct", + "dc", + "ia", + "il", + "in", + "ks", + "ky", + "la", + "ma", + "md", + "mi", + "mo", + "mr", + "nc", + "nj", + "ny", + "oh", + "on", + "pa", + "pr", + "tn", + "va", + "vt", + "wv", + "wy" + ], + "in": "query", + "name": "state", + "type": "string" } ], "produces": [ @@ -334888,19 +408550,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.techstackItemResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/fanduel.sportsbookSportsResponseDoc" } }, "429": { @@ -334909,8 +408559,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -334921,167 +408571,87 @@ "ApiKeyAuth": [] } ], - "summary": "Get a site from the website tech-stack dataset", + "summary": "FanDuel Sportsbook sports and league pages", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/techstack/search": { + "/fanduel/sportsbook/standings": { "get": { "consumes": [ "application/json" ], - "description": "Searches the website tech-stack index (dataset id enum value `techstack`) — one record per site listing the web technologies it is built with (frameworks, CMS, e-commerce, analytics, CDNs, servers, and more), BuiltWith / Wappalyzer-style. The reverse-index filters are the point: repeat `technology` to require several at once (AND), `any_of` to match at least one (OR), and `not` to exclude — e.g. sites on `Shopify` and `Klaviyo` but not `Recharge`. Sort enum: `relevance`, `rank_asc`, `tech_count_desc`, `domain_asc`, `crawled_desc`. render_tier enum: `http`, `browser`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-techstack-search", + "description": "Returns a league's standings, one row per team with the team's identity and the record groups the Sportsbook shows for that league: conference, division and league rankings with home, road and streak records (NFL and NBA), games back, last ten and home and away records (MLB), or conference record, points and AP ranking (college football). Available for the NFL, NBA, MLB and college football.", + "operationId": "fanduel-sportsbook-standings", "parameters": [ { - "description": "Substring match on the site domain, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "collectionFormat": "csv", - "description": "Repeatable exact technology name the site MUST use (AND), e.g. technology=Shopify&technology=Klaviyo", - "in": "query", - "items": { - "type": "string" - }, - "name": "technology", - "type": "array" - }, - { - "collectionFormat": "csv", - "description": "Repeatable exact technology name; the site must use at least one (OR)", - "in": "query", - "items": { - "type": "string" - }, - "name": "any_of", - "type": "array" - }, - { - "collectionFormat": "csv", - "description": "Repeatable exact technology name the site must NOT use (excludes)", - "in": "query", - "items": { - "type": "string" - }, - "name": "not", - "type": "array" - }, - { - "description": "Exact category filter, e.g. Ecommerce, CMS, Analytics, Payment, CDN", - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Exact CMS filter, e.g. WordPress, Shopify, Webflow", - "in": "query", - "name": "cms", - "type": "string" - }, - { - "description": "Exact e-commerce platform filter, e.g. Shopify, WooCommerce, Magento", - "in": "query", - "name": "ecommerce", - "type": "string" - }, - { - "description": "Exact CDN / hosting filter, e.g. Cloudflare, Fastly, Vercel", - "in": "query", - "name": "cdn", - "type": "string" - }, - { - "description": "Exact web-server filter, e.g. nginx, Apache, IIS", - "in": "query", - "name": "web_server", - "type": "string" - }, - { - "description": "Exact server language / framework filter, e.g. PHP, ASP.NET, Ruby on Rails", - "in": "query", - "name": "server_language", - "type": "string" - }, - { - "description": "Exact top-level-domain filter, e.g. com, org, io", - "in": "query", - "name": "tld", - "type": "string" - }, - { - "description": "Fetch-tier filter. Enum: http, browser", + "description": "League: `nfl`, `nba`, `mlb`, `college-football`", "enum": [ - "http", - "browser" + "nfl", + "nba", + "mlb", + "college-football" ], "in": "query", - "name": "render_tier", - "type": "string" - }, - { - "description": "Source filter for where the domain was discovered, e.g. tranco", - "in": "query", - "name": "seed_source", - "type": "string" - }, - { - "description": "true keeps only sites with a detected CAPTCHA", - "in": "query", - "name": "has_captcha", - "type": "boolean" - }, - { - "description": "false (the common case) excludes backend CDN/DNS/cloud-vendor hostnames that rank highly but were never meant to serve a public homepage, keeping only real, human-navigable sites; true keeps only those backend hostnames", - "in": "query", - "name": "is_infrastructure", - "type": "boolean" - }, - { - "description": "true keeps only sites whose homepage was fetched, false only sites that could not be fetched", - "in": "query", - "name": "reachable", - "type": "boolean" - }, - { - "description": "Minimum number of detected technologies, 0 or greater", - "in": "query", - "name": "min_tech_count", - "type": "integer" + "name": "league", + "required": true, + "type": "string", + "x-example": "nfl" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanduel.sportsbookStandingsResponseDoc" + } }, - { - "description": "Scan run id; defaults to the latest run", - "in": "query", - "name": "run_id", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Sort enum: relevance, rank_asc, tech_count_desc, domain_asc, crawled_desc", - "enum": [ - "relevance", - "rank_asc", - "tech_count_desc", - "domain_asc", - "crawled_desc" - ], - "in": "query", - "name": "sort", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, + "ApiKeyAuth": [] + } + ], + "summary": "FanDuel Sportsbook league standings", + "tags": [ + "FanDuel" + ] + } + }, + "/fanduel/sportsbook/stats": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Lists every event the Sportsbook currently publishes stats for: the share of bets and of money wagered on each side of the spread, and each team's last five results. Filter to one competition with `competition_id`.", + "operationId": "fanduel-sportsbook-stats", + "parameters": [ { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Keep only this competition id (for example 12282733 for the NFL)", "in": "query", - "name": "page_size", + "name": "competition_id", "type": "integer" } ], @@ -335092,7 +408662,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.techstackSearchResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookStatsListResponseDoc" } }, "400": { @@ -335107,8 +408677,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -335119,77 +408689,42 @@ "ApiKeyAuth": [] } ], - "summary": "Search the website tech-stack dataset", + "summary": "FanDuel Sportsbook betting splits and form for upcoming events", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/trustmrr/facets": { + "/fanduel/sportsbook/team/depth-chart": { "get": { "consumes": [ "application/json" ], - "description": "Returns terms-aggregation counts for one facet of the TrustMRR dataset, scoped to the same filters as search. Facet enum: `category`, `country`, `payment_provider`, `target_audience`, `business_type`, `tech`, `channels`, `listing_tier`, `status`, `on_sale`, `is_sponsored`, `tags`.", - "operationId": "datasets-trustmrr-facets", + "description": "Returns a team's depth chart (rank, position, college, age and draft details) and its statistical leaders. Available for the NFL only; other leagues return 400 listing their pages.", + "operationId": "fanduel-sportsbook-team-depth-chart", "parameters": [ { - "description": "Facet enum: category, country, payment_provider, target_audience, business_type, tech, channels, listing_tier, status, on_sale, is_sponsored, tags", + "description": "League: `nfl`, `nba`, `mlb`, `college-football`, `college-basketball`", "enum": [ - "category", - "country", - "payment_provider", - "target_audience", - "business_type", - "tech", - "channels", - "listing_tier", - "status", - "on_sale", - "is_sponsored", - "tags" + "nfl", + "nba", + "mlb", + "college-football", + "college-basketball" ], "in": "query", - "name": "facet", + "name": "league", "required": true, "type": "string", - "x-example": "category" - }, - { - "description": "Full-text query, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact category filter, max 128 characters", - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Exact ISO country-code filter, max 128 characters", - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Payment-provider filter, max 128 characters", - "in": "query", - "name": "payment_provider", - "type": "string" - }, - { - "description": "Filter for startups currently listed for sale", - "in": "query", - "name": "on_sale", - "type": "boolean" + "x-example": "nfl" }, { - "description": "Minimum verified MRR in USD", + "description": "Team slug from the `teams` route (`groups[].teams[].slug`), such as `arizona-cardinals`", "in": "query", - "name": "min_mrr", - "type": "number" + "name": "team", + "required": true, + "type": "string", + "x-example": "arizona-cardinals" } ], "produces": [ @@ -335199,7 +408734,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.trustmrrFacetResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookDepthChartResponseDoc" } }, "400": { @@ -335208,14 +408743,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -335226,43 +408761,54 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the TrustMRR dataset", + "summary": "FanDuel Sportsbook team depth chart", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/trustmrr/history/{slug}": { + "/fanduel/sportsbook/team/news": { "get": { "consumes": [ "application/json" ], - "description": "Returns a startup's daily time-series of payment-provider-verified metrics — MRR, all-time revenue, last-30-days revenue, 30-day and 12-month traffic, 30-day growth, for-sale flag, asking price, valuation multiple, deal score and offer count — one point per day in chronological order (oldest first). The series accrues one point per calendar day, so a recently discovered startup returns a short or empty series rather than a 404.", - "operationId": "datasets-trustmrr-history", + "description": "Returns a page of a team's news (title, summary, author, time, link) and player updates. Without `cursor` it is the team page's own first 15 articles. While `has_more` is true, pass the response's `next_cursor` as `cursor` to continue through the archive, 1 to 50 articles at a time (default 25); an NFL team has more than 1,000. Teams in MLB and the college leagues currently have no news, which returns an empty list.", + "operationId": "fanduel-sportsbook-team-news", "parameters": [ { - "description": "Startup slug, max 128 characters", - "in": "path", - "name": "slug", + "description": "League: `nfl`, `nba`, `mlb`, `college-football`, `college-basketball`", + "enum": [ + "nfl", + "nba", + "mlb", + "college-football", + "college-basketball" + ], + "in": "query", + "name": "league", "required": true, "type": "string", - "x-example": "gumroad" + "x-example": "nfl" }, { - "description": "Inclusive start date, YYYY-MM-DD (UTC)", + "description": "Team slug from the `teams` route (`groups[].teams[].slug`), such as `arizona-cardinals`", "in": "query", - "name": "from", - "type": "string" + "name": "team", + "required": true, + "type": "string", + "x-example": "arizona-cardinals" }, { - "description": "Inclusive end date, YYYY-MM-DD (UTC)", + "description": "Continue from the previous response's `next_cursor`; omit for the first page", "in": "query", - "name": "to", + "name": "cursor", "type": "string" }, { - "description": "Maximum points returned (the most recent within the range), default 365, max 1000", + "description": "Articles per page after the first, 1 to 50; default 25. Only valid together with `cursor`", "in": "query", + "maximum": 50, + "minimum": 1, "name": "limit", "type": "integer" } @@ -335274,7 +408820,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.trustmrrHistoryResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookTeamNewsResponseDoc" } }, "400": { @@ -335283,14 +408829,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -335301,27 +408847,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get a TrustMRR startup's daily history", + "summary": "FanDuel Sportsbook team news", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/trustmrr/items/{slug}": { + "/fanduel/sportsbook/team/odds": { "get": { "consumes": [ "application/json" ], - "description": "Returns one startup record by slug from the TrustMRR dataset (dataset id `trustmrr`), including verified revenue/MRR, traffic, growth, category, tech stack, marketing channels and acquisition-marketplace fields.", - "operationId": "datasets-trustmrr-item", + "description": "Returns a team's odds page: futures prices for its league's championship (Super Bowl, NBA Finals, World Series, national championship), its upcoming games with money line, spread and total for both sides, and player props with selection ids and odds. Available for every league; props appear for the NFL and NBA only.", + "operationId": "fanduel-sportsbook-team-odds", "parameters": [ { - "description": "Startup slug, max 128 characters", - "in": "path", - "name": "slug", + "description": "League: `nfl`, `nba`, `mlb`, `college-football`, `college-basketball`", + "enum": [ + "nfl", + "nba", + "mlb", + "college-football", + "college-basketball" + ], + "in": "query", + "name": "league", "required": true, "type": "string", - "x-example": "gumroad" + "x-example": "nfl" + }, + { + "description": "Team slug from the `teams` route (`groups[].teams[].slug`), such as `arizona-cardinals`", + "in": "query", + "name": "team", + "required": true, + "type": "string", + "x-example": "arizona-cardinals" } ], "produces": [ @@ -335331,7 +408892,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.trustmrrItemResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookTeamOddsResponseDoc" } }, "400": { @@ -335346,14 +408907,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -335364,192 +408919,133 @@ "ApiKeyAuth": [] } ], - "summary": "Get a TrustMRR startup from the dataset", + "summary": "FanDuel Sportsbook team odds page", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/trustmrr/search": { + "/fanduel/sportsbook/team/roster": { "get": { "consumes": [ "application/json" ], - "description": "Searches public startups with payment-provider-verified revenue and MRR, stored in a search index. Filter by category, country, payment provider, target audience, tech, marketing channel, listing tier and for-sale status, and by revenue/MRR/traffic/growth/multiple/asking-price ranges. Sort enum: `relevance`, `mrr_desc`, `revenue_desc`, `revenue_30d_desc`, `traffic_desc`, `growth_desc`, `deal_score_desc`, `price_asc`, `price_desc`, `multiple_asc`, `founded_desc`. status enum: `active`, `removed`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-trustmrr-search", + "description": "Returns a team's roster with each player's roster `status` (for example `ACT`, `PRA`, `IR`, `IRD`, `UFA`, `TWO-WAY`) and `injury_status` (observed `Q` and `O`; empty when healthy). `statuses`, `injury_statuses` and `positions` count the whole roster so valid filter values are discoverable. Available for the NFL and NBA only.", + "operationId": "fanduel-sportsbook-team-roster", "parameters": [ { - "description": "Full-text query over name, description, seller message and business summary, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact startup slug filter, max 128 characters", - "in": "query", - "name": "slug", - "type": "string" - }, - { - "description": "Exact category filter (e.g. SaaS, Artificial Intelligence, Mobile Apps), max 128 characters", - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Exact ISO country-code filter (e.g. US), max 128 characters", - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Payment-provider filter (e.g. stripe, revenuecat, superwall, creem), max 128 characters", - "in": "query", - "name": "payment_provider", - "type": "string" - }, - { - "description": "Target-audience filter (e.g. B2B, B2C), max 128 characters", - "in": "query", - "name": "target_audience", - "type": "string" - }, - { - "description": "Business-type filter (e.g. B2B, B2C), max 128 characters", - "in": "query", - "name": "business_type", - "type": "string" - }, - { - "description": "Detected tech-stack slug filter (e.g. nextjs, reactnative), max 128 characters", - "in": "query", - "name": "tech", - "type": "string" - }, - { - "description": "Detected marketing-channel slug filter (e.g. meta-ads, seo), max 128 characters", - "in": "query", - "name": "channel", - "type": "string" - }, - { - "description": "For-sale listing-tier filter (e.g. pro), max 128 characters", - "in": "query", - "name": "listing_tier", - "type": "string" - }, - { - "description": "Lifecycle enum: active, removed", + "description": "League: `nfl`, `nba`, `mlb`, `college-football`, `college-basketball`", "enum": [ - "active", - "removed" + "nfl", + "nba", + "mlb", + "college-football", + "college-basketball" ], "in": "query", - "name": "status", - "type": "string" + "name": "league", + "required": true, + "type": "string", + "x-example": "nfl" }, { - "description": "Filter for startups currently listed for sale", + "description": "Team slug from the `teams` route (`groups[].teams[].slug`), such as `arizona-cardinals`", "in": "query", - "name": "on_sale", - "type": "boolean" + "name": "team", + "required": true, + "type": "string", + "x-example": "arizona-cardinals" }, { - "description": "Filter for sponsored (paid-placement) listings", + "default": false, + "description": "Return only players with an injury designation; default false", "in": "query", - "name": "is_sponsored", + "name": "injured_only", "type": "boolean" }, { - "description": "Minimum verified MRR in USD", - "in": "query", - "name": "min_mrr", - "type": "number" - }, - { - "description": "Maximum verified MRR in USD", - "in": "query", - "name": "max_mrr", - "type": "number" - }, - { - "description": "Minimum verified all-time revenue in USD", - "in": "query", - "name": "min_revenue", - "type": "number" - }, - { - "description": "Minimum verified last-30-days revenue in USD", - "in": "query", - "name": "min_revenue_30d", - "type": "number" - }, - { - "description": "Minimum last-30-days traffic (visits)", - "in": "query", - "name": "min_traffic", - "type": "number" - }, - { - "description": "Minimum 30-day revenue growth percentage", + "description": "Keep only this roster status code, such as `IR`; valid codes are listed in the response `statuses`", "in": "query", - "name": "min_growth", - "type": "number" + "name": "status", + "type": "string" }, { - "description": "Maximum asking-price-to-revenue multiple", + "description": "Keep only this position code, such as `QB`; valid codes are listed in the response `positions`", "in": "query", - "name": "max_multiple", - "type": "number" + "name": "position", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanduel.sportsbookRosterResponseDoc" + } }, - { - "description": "Minimum asking price in USD", - "in": "query", - "name": "min_asking_price", - "type": "number" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Maximum asking price in USD", - "in": "query", - "name": "max_asking_price", - "type": "number" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Minimum Ahrefs Domain Rating", - "in": "query", - "name": "min_ahrefs_dr", - "type": "integer" - }, + "ApiKeyAuth": [] + } + ], + "summary": "FanDuel Sportsbook team roster and injuries", + "tags": [ + "FanDuel" + ] + } + }, + "/fanduel/sportsbook/team/schedule": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a team's schedule by season block (preseason, regular season) with opponent, venue, home/away, result and opponent record, plus its previous and next game. Available for the NFL and NBA only.", + "operationId": "fanduel-sportsbook-team-schedule", + "parameters": [ { - "description": "Sort enum: relevance, mrr_desc, revenue_desc, revenue_30d_desc, traffic_desc, growth_desc, deal_score_desc, price_asc, price_desc, multiple_asc, founded_desc", + "description": "League: `nfl`, `nba`, `mlb`, `college-football`, `college-basketball`", "enum": [ - "relevance", - "mrr_desc", - "revenue_desc", - "revenue_30d_desc", - "traffic_desc", - "growth_desc", - "deal_score_desc", - "price_asc", - "price_desc", - "multiple_asc", - "founded_desc" + "nfl", + "nba", + "mlb", + "college-football", + "college-basketball" ], "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" + "name": "league", + "required": true, + "type": "string", + "x-example": "nba" }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Team slug from the `teams` route (`groups[].teams[].slug`), such as `arizona-cardinals`", "in": "query", - "name": "page_size", - "type": "integer" + "name": "team", + "required": true, + "type": "string", + "x-example": "atlanta-hawks" } ], "produces": [ @@ -335559,7 +409055,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.trustmrrSearchResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookScheduleResponseDoc" } }, "400": { @@ -335568,14 +409064,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -335586,164 +409082,105 @@ "ApiKeyAuth": [] } ], - "summary": "Search the TrustMRR dataset", + "summary": "FanDuel Sportsbook team schedule and results", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/vehicle-listings/facets": { + "/fanduel/sportsbook/team/stats": { "get": { "consumes": [ "application/json" ], - "description": "Returns terms aggregation counts for the vehicle listings dataset. Facet enum: `source`, `make`, `model`, `trim`, `body_style`, `transmission`, `drive_type`, `fuel_type`, `seller_type`, `state`, `run_id`.", - "operationId": "datasets-vehicle-listings-facets", + "description": "Returns a team's season statistics. The groups differ by sport (scoring, offense, defense and special teams for the NFL; totals and averages for the NBA), so `stats` is an object with snake_case keys. Available for the NFL and NBA only.", + "operationId": "fanduel-sportsbook-team-stats", "parameters": [ { - "description": "Facet enum: source, make, model, trim, body_style, transmission, drive_type, fuel_type, seller_type, state, run_id", + "description": "League: `nfl`, `nba`, `mlb`, `college-football`, `college-basketball`", "enum": [ - "source", - "make", - "model", - "trim", - "body_style", - "transmission", - "drive_type", - "fuel_type", - "seller_type", - "state", - "run_id" + "nfl", + "nba", + "mlb", + "college-football", + "college-basketball" ], "in": "query", - "name": "facet", + "name": "league", "required": true, "type": "string", - "x-example": "source" - }, - { - "description": "Full-text query over make, model and trim, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact source marketplace filter: carmax, autotrader, carsdotcom", - "enum": [ - "carmax", - "autotrader", - "carsdotcom" - ], - "in": "query", - "name": "source", - "type": "string" - }, - { - "description": "Exact make filter, max 128 characters", - "in": "query", - "name": "make", - "type": "string" - }, - { - "description": "Exact model filter, max 128 characters", - "in": "query", - "name": "model", - "type": "string" - }, - { - "description": "Exact trim filter, max 128 characters", - "in": "query", - "name": "trim", - "type": "string" + "x-example": "nfl" }, { - "description": "Exact body style filter, max 128 characters", + "description": "Team slug from the `teams` route (`groups[].teams[].slug`), such as `arizona-cardinals`", "in": "query", - "name": "body_style", - "type": "string" + "name": "team", + "required": true, + "type": "string", + "x-example": "arizona-cardinals" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fanduel.sportsbookTeamStatsResponseDoc" + } }, - { - "description": "Exact transmission filter, max 128 characters", - "in": "query", - "name": "transmission", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Exact drivetrain filter, max 128 characters", - "in": "query", - "name": "drive_type", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Exact fuel type filter, max 128 characters", - "in": "query", - "name": "fuel_type", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "FanDuel Sportsbook team statistics", + "tags": [ + "FanDuel" + ] + } + }, + "/fanduel/sportsbook/teams": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Lists a league's teams grouped by conference or division, each with its season record against the spread, on the money line and on the over/under, its colors, head coach where published, and its next game. `sections` lists the team pages the league has (all six for the NFL; odds and news only for MLB and the college leagues). Team `slug` values feed the other team routes.", + "operationId": "fanduel-sportsbook-teams", + "parameters": [ { - "description": "Exact seller type filter: retailer, dealer, private", + "default": "nfl", + "description": "League: `nfl` (default), `nba`, `mlb`, `college-football`, `college-basketball`", "enum": [ - "retailer", - "dealer", - "private" + "nfl", + "nba", + "mlb", + "college-football", + "college-basketball" ], "in": "query", - "name": "seller_type", - "type": "string" - }, - { - "description": "Exact US state abbreviation filter, max 8 characters", - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "Exact VIN filter", - "in": "query", - "name": "vin", - "type": "string" - }, - { - "description": "Exact crawl run-id filter, max 128 characters", - "in": "query", - "name": "run_id", + "name": "league", "type": "string" - }, - { - "description": "Filter for listings currently marked down from a previous price", - "in": "query", - "name": "is_price_reduced", - "type": "boolean" - }, - { - "description": "Minimum model year", - "in": "query", - "name": "min_year", - "type": "integer" - }, - { - "description": "Maximum model year", - "in": "query", - "name": "max_year", - "type": "integer" - }, - { - "description": "Minimum price in US dollars", - "in": "query", - "name": "min_price", - "type": "number" - }, - { - "description": "Maximum price in US dollars", - "in": "query", - "name": "max_price", - "type": "number" - }, - { - "description": "Maximum odometer mileage", - "in": "query", - "name": "max_mileage", - "type": "integer" } ], "produces": [ @@ -335753,7 +409190,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.vehicleListingsFacetResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookTeamsResponseDoc" } }, "400": { @@ -335762,14 +409199,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -335780,27 +409211,26 @@ "ApiKeyAuth": [] } ], - "summary": "Facet vehicle listings dataset", + "summary": "FanDuel Sportsbook team index", "tags": [ - "Datasets" + "FanDuel" ] } }, - "/datasets/vehicle-listings/items/{id}": { + "/fanduel/sportsbook/trending": { "get": { "consumes": [ "application/json" ], - "description": "Returns one vehicle listing from the dataset by `id`, formatted `:`, such as `carmax:28187774`. The record has VIN, year, make, model, trim, mileage, price and previous price, colours, drivetrain, seller, location and first and last seen times. An unknown id returns 404.", - "operationId": "datasets-vehicle-listings-item", + "description": "Returns the terms the Sportsbook's search box shows as trending (about ten players, teams and clubs). With `enriched=true` each term is resolved to the event it points at, with the competition, event name and id, entity type (for example `PLAYER`), image and the time the entry expires. The list was identical in every market tested, so the route takes no state.", + "operationId": "fanduel-sportsbook-trending", "parameters": [ { - "description": "Vehicle listing id, formatted : (e.g. carmax:28187774)", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "carmax:28187774" + "default": false, + "description": "Resolve each term to its event, competition and entity; default false", + "in": "query", + "name": "enriched", + "type": "boolean" } ], "produces": [ @@ -335810,7 +409240,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.vehicleListingResponseDoc" + "$ref": "#/definitions/fanduel.sportsbookTrendingResponseDoc" } }, "400": { @@ -335825,17 +409255,52 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "FanDuel Sportsbook trending searches", + "tags": [ + "FanDuel" + ] + } + }, + "/farfetch/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns every department's top-level category directory (name, slug, URL). Each slug is usable directly as the category filter on GET /farfetch/search. Public data sourced live from Farfetch's own listing pages.", + "operationId": "farfetch-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/farfetch.categoriesResponseDoc" + } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -335843,27 +409308,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a vehicle listing from dataset", + "summary": "Farfetch category directory", "tags": [ - "Datasets" + "Farfetch" ] } }, - "/datasets/vehicle-listings/price-history/{id}": { + "/farfetch/designers": { "get": { "consumes": [ "application/json" ], - "description": "Returns the recorded price-change events for one listing, oldest first. An event is recorded only when a crawl first observes the listing or observes a changed price -- not one entry per crawl pass -- so a listing whose price has never changed since it was first crawled returns a single entry.", - "operationId": "datasets-vehicle-listings-price-history", + "description": "Returns a department's full designer directory (name, slug, URL). Each slug is usable directly as the designer filter on GET /farfetch/search. Public data sourced from Farfetch's own designer-directory pages.", + "operationId": "farfetch-designers", "parameters": [ { - "description": "Vehicle listing id, formatted : (e.g. carmax:28187774)", - "in": "path", - "name": "id", + "description": "Department: women, men, kids", + "in": "query", + "name": "gender", "required": true, "type": "string", - "x-example": "carmax:28187774" + "x-example": "women" } ], "produces": [ @@ -335873,7 +409338,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.vehicleListingPriceHistoryResponseDoc" + "$ref": "#/definitions/farfetch.designersResponseDoc" } }, "400": { @@ -335882,14 +409347,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -335900,172 +409365,182 @@ "ApiKeyAuth": [] } ], - "summary": "Get a vehicle listing's price history", + "summary": "Farfetch designer directory", "tags": [ - "Datasets" + "Farfetch" ] } }, - "/datasets/vehicle-listings/search": { + "/farfetch/product": { "get": { "consumes": [ "application/json" ], - "description": "Searches the crawled used-vehicle listings index. source enum: `carmax`, `autotrader`, `carsdotcom`. CarMax's own national inventory is fully enumerable (re-crawled on a standing schedule); Autotrader/Cars.com coverage is a best-effort zip-code sweep, not exhaustive, and their rows approximate city/state from the searched area rather than the seller's exact location. seller_type enum: `retailer`, `dealer`, `private` (not populated for every row -- see the dataset markdown). Sort enum: `relevance`, `recently_updated`, `newly_listed`, `price_asc`, `price_desc`, `mileage_asc`, `mileage_desc`, `year_desc`, `year_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-vehicle-listings-search", + "description": "Returns a Farfetch product's full detail: name, brand, color, description, images, category breadcrumb, and every size variant with its own price and availability. Public data sourced from Farfetch's own product pages.", + "operationId": "farfetch-product", "parameters": [ { - "description": "Full-text query over make, model and trim, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact source marketplace filter: carmax, autotrader, carsdotcom", - "enum": [ - "carmax", - "autotrader", - "carsdotcom" - ], - "in": "query", - "name": "source", - "type": "string" - }, - { - "description": "Exact make filter (e.g. Honda, Toyota), max 128 characters", - "in": "query", - "name": "make", - "type": "string" - }, - { - "description": "Exact model filter (e.g. Civic), max 128 characters", - "in": "query", - "name": "model", - "type": "string" - }, - { - "description": "Exact trim filter, max 128 characters", - "in": "query", - "name": "trim", - "type": "string" - }, - { - "description": "Exact body style filter (e.g. Sedan, SUV), max 128 characters", - "in": "query", - "name": "body_style", - "type": "string" - }, - { - "description": "Exact transmission filter, max 128 characters", - "in": "query", - "name": "transmission", - "type": "string" - }, - { - "description": "Exact drivetrain filter, max 128 characters", + "description": "Department: women, men, kids", "in": "query", - "name": "drive_type", - "type": "string" + "name": "gender", + "required": true, + "type": "string", + "x-example": "women" }, { - "description": "Exact fuel type filter (e.g. Gas, Hybrid, Electric), max 128 characters", + "description": "Product URL slug from a search result's id field", "in": "query", - "name": "fuel_type", - "type": "string" + "name": "slug", + "required": true, + "type": "string", + "x-example": "gucci-slide-sandals-with-double-g-item-37690086" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/farfetch.productResponseDoc" + } }, - { - "description": "Exact seller type filter: retailer, dealer, private", - "enum": [ - "retailer", - "dealer", - "private" - ], - "in": "query", - "name": "seller_type", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Exact US state abbreviation filter (e.g. CA), max 8 characters", - "in": "query", - "name": "state", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Exact VIN filter. Best-effort: not guaranteed on every listing", - "in": "query", - "name": "vin", - "type": "string" + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Exact crawl run-id filter, max 128 characters", - "in": "query", - "name": "run_id", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Farfetch product detail", + "tags": [ + "Farfetch" + ] + } + }, + "/farfetch/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Browses Farfetch's luxury multi-brand marketplace by department plus a designer and/or category filter (at least one is required), returning listing summaries (name, brand, price, image, availability) and the upstream page count.", + "operationId": "farfetch-search", + "parameters": [ { - "description": "Filter for listings currently marked down from a previous price", + "description": "Department: women, men, kids", "in": "query", - "name": "is_price_reduced", - "type": "boolean" + "name": "gender", + "required": true, + "type": "string", + "x-example": "women" }, { - "description": "Minimum model year", + "description": "Designer slug from GET /farfetch/designers; designer or category is required", "in": "query", - "name": "min_year", - "type": "integer" + "name": "designer", + "type": "string", + "x-example": "gucci" }, { - "description": "Maximum model year", + "description": "Category slug from GET /farfetch/categories; designer or category is required", "in": "query", - "name": "max_year", - "type": "integer" + "name": "category", + "type": "string", + "x-example": "shoes-1" }, { - "description": "Minimum price in US dollars", + "description": "1-based page number; defaults to 1", "in": "query", - "name": "min_price", - "type": "number" + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/farfetch.searchResponseDoc" + } }, - { - "description": "Maximum price in US dollars", - "in": "query", - "name": "max_price", - "type": "number" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Maximum odometer mileage", - "in": "query", - "name": "max_mileage", - "type": "integer" + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Sort enum: relevance, recently_updated, newly_listed, price_asc, price_desc, mileage_asc, mileage_desc, year_desc, year_asc", - "enum": [ - "relevance", - "recently_updated", - "newly_listed", - "price_asc", - "price_desc", - "mileage_asc", - "mileage_desc", - "year_desc", - "year_asc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Search Farfetch listings", + "tags": [ + "Farfetch" + ] + } + }, + "/fashionnova/collections": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns collections from Fashion Nova (https://www.fashionnova.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", + "operationId": "fashionnova-collections", + "parameters": [ { - "description": "Page number, defaults to 1", + "description": "1-based page, defaults to 1", "in": "query", "name": "page", - "type": "integer" + "type": "integer", + "x-example": 1 }, { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", + "description": "Maximum collections, defaults to 50 and supports up to 250", "in": "query", - "name": "page_size", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -336075,7 +409550,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.vehicleListingsSearchResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" } }, "400": { @@ -336090,8 +409565,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -336102,132 +409577,41 @@ "ApiKeyAuth": [] } ], - "summary": "Search vehicle listings dataset", + "summary": "List Fashion Nova collections", "tags": [ - "Datasets" + "Fashion Nova" ] } }, - "/datasets/x-users/facets": { + "/fashionnova/collections/{handle}/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns value counts for the X users dataset by the required `facet`: `is_blue_verified`, `has_bio`, `has_external_url` or `source_tier`. The counts follow the search filters, including `q`, follower and ratio ranges, and creation or crawl dates. At most 50 values come back, largest count first.", - "operationId": "datasets-x-users-facets", + "description": "Returns products from one Fashion Nova (https://www.fashionnova.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", + "operationId": "fashionnova-collection-products", "parameters": [ { - "description": "Facet enum: is_blue_verified, has_bio, has_external_url, source_tier", - "enum": [ - "is_blue_verified", - "has_bio", - "has_external_url", - "source_tier" - ], - "in": "query", - "name": "facet", + "description": "Collection handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "is_blue_verified" - }, - { - "description": "Full-text query over username, name, bio and location, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact username filter (case-insensitive), max 128 characters", - "in": "query", - "name": "username", - "type": "string" - }, - { - "description": "Exact filter for which seed tier discovered this account", - "in": "query", - "name": "source_tier", - "type": "string" - }, - { - "description": "Filter by the X blue-check verification flag", - "in": "query", - "name": "is_blue_verified", - "type": "boolean" - }, - { - "description": "Filter by a non-empty profile bio", - "in": "query", - "name": "has_bio", - "type": "boolean" - }, - { - "description": "Filter by a linked external URL", - "in": "query", - "name": "has_external_url", - "type": "boolean" - }, - { - "description": "Minimum follower count", - "in": "query", - "name": "min_followers", - "type": "integer" - }, - { - "description": "Maximum follower count", - "in": "query", - "name": "max_followers", - "type": "integer" - }, - { - "description": "Minimum follower-to-following ratio", - "in": "query", - "name": "min_ratio", - "type": "number" - }, - { - "description": "Maximum follower-to-following ratio", - "in": "query", - "name": "max_ratio", - "type": "number" - }, - { - "description": "Accounts created on or after this date (RFC3339 or YYYY-MM-DD)", - "in": "query", - "name": "created_after", - "type": "string" - }, - { - "description": "Accounts created on or before this date (RFC3339 or YYYY-MM-DD)", - "in": "query", - "name": "created_before", - "type": "string" - }, - { - "description": "Records last refreshed on or after this date (RFC3339 or YYYY-MM-DD)", - "in": "query", - "name": "crawled_after", - "type": "string" + "x-example": "collection-handle" }, { - "description": "Records last refreshed on or before this date (RFC3339 or YYYY-MM-DD)", + "description": "1-based page, defaults to 1", "in": "query", - "name": "crawled_before", - "type": "string" - }, - { - "description": "Sort enum: relevance, followers_desc, followers_asc, crawled_at_desc, crawled_at_asc, created_at_desc, created_at_asc", - "enum": [ - "relevance", - "followers_desc", - "followers_asc", - "crawled_at_desc", - "crawled_at_asc", - "created_at_desc", - "created_at_asc" - ], + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Maximum products, defaults to 50 and supports up to 250", "in": "query", - "name": "sort", - "type": "string" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -336237,7 +409621,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.xUsersFacetResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" } }, "400": { @@ -336246,14 +409630,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -336264,27 +409654,33 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the X users dataset", + "summary": "List Fashion Nova collection products", "tags": [ - "Datasets" + "Fashion Nova" ] } }, - "/datasets/x-users/items/{username}": { + "/fashionnova/pages": { "get": { "consumes": [ "application/json" ], - "description": "Returns one X user from the dataset by `username`, with or without a leading @. The record has name, bio, location, external URL, avatar and banner, followers, following, posts, likes, listed count, blue-verified flag and verified type. An unknown username returns 404; no live scrape runs.", - "operationId": "datasets-x-users-item", + "description": "Lists Fashion Nova static pages, 50 per page by default (`limit`, max 250), with `page` starting at 1. Each page has its handle, title, URL, plain-text content, and created, updated and published dates. When `transport_mode` is `ssr_embedded`, items carry only `handle`, `url` and `updated_at`. An empty result returns an empty `pages` array.", + "operationId": "fashionnova-pages", "parameters": [ { - "description": "X username, with or without a leading @, max 128 characters", - "in": "path", - "name": "username", - "required": true, - "type": "string", - "x-example": "elonmusk" + "description": "1-based page, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Maximum static pages, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -336294,7 +409690,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.xUserResponseDoc" + "$ref": "#/definitions/shopifybrands.pagesResponseDoc" } }, "400": { @@ -336303,20 +409699,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -336327,130 +409717,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get an X user from the dataset", + "summary": "List Fashion Nova static pages", "tags": [ - "Datasets" + "Fashion Nova" ] } }, - "/datasets/x-users/search": { + "/fashionnova/pages/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "Searches public X (Twitter) user profiles stored in a search index. Sort enum: `relevance`, `followers_desc`, `followers_asc`, `crawled_at_desc`, `crawled_at_asc`, `created_at_desc`, `created_at_asc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-x-users-search", + "description": "Returns one Fashion Nova static page by its required `handle`: title, URL, plain-text content, and created, updated and published dates. An unknown handle returns `404`. In a fallback mode flagged by `transport_mode: \"ssr_embedded\"`, the response omits `id`.", + "operationId": "fashionnova-page", "parameters": [ { - "description": "Full-text query over username, name, bio and location, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact username filter (case-insensitive), max 128 characters", - "in": "query", - "name": "username", - "type": "string" - }, - { - "description": "Exact filter for which seed tier discovered this account, e.g. github-users, wikidata, tiktok-creators, journalists", - "in": "query", - "name": "source_tier", - "type": "string" - }, - { - "description": "Filter by the X blue-check verification flag", - "in": "query", - "name": "is_blue_verified", - "type": "boolean" - }, - { - "description": "Filter by a non-empty profile bio", - "in": "query", - "name": "has_bio", - "type": "boolean" - }, - { - "description": "Filter by a linked external URL", - "in": "query", - "name": "has_external_url", - "type": "boolean" - }, - { - "description": "Minimum follower count", - "in": "query", - "name": "min_followers", - "type": "integer" - }, - { - "description": "Maximum follower count", - "in": "query", - "name": "max_followers", - "type": "integer" - }, - { - "description": "Minimum follower-to-following ratio (low values surface follow-spam / bot-like accounts)", - "in": "query", - "name": "min_ratio", - "type": "number" - }, - { - "description": "Maximum follower-to-following ratio", - "in": "query", - "name": "max_ratio", - "type": "number" - }, - { - "description": "Accounts created on or after this date (RFC3339 or YYYY-MM-DD)", - "in": "query", - "name": "created_after", - "type": "string" - }, - { - "description": "Accounts created on or before this date (RFC3339 or YYYY-MM-DD)", - "in": "query", - "name": "created_before", - "type": "string" - }, - { - "description": "Records last refreshed on or after this date (RFC3339 or YYYY-MM-DD)", - "in": "query", - "name": "crawled_after", - "type": "string" - }, - { - "description": "Records last refreshed on or before this date (RFC3339 or YYYY-MM-DD)", - "in": "query", - "name": "crawled_before", - "type": "string" - }, - { - "description": "Sort enum: relevance, followers_desc, followers_asc, crawled_at_desc, crawled_at_asc, created_at_desc, created_at_asc", - "enum": [ - "relevance", - "followers_desc", - "followers_asc", - "crawled_at_desc", - "crawled_at_asc", - "created_at_desc", - "created_at_asc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", - "in": "query", - "name": "page_size", - "type": "integer" + "description": "Page handle", + "in": "path", + "name": "handle", + "required": true, + "type": "string", + "x-example": "page-handle" } ], "produces": [ @@ -336460,7 +409747,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.xUsersSearchResponseDoc" + "$ref": "#/definitions/shopifybrands.pageResponseDoc" } }, "400": { @@ -336469,14 +409756,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -336487,160 +409780,33 @@ "ApiKeyAuth": [] } ], - "summary": "Search the X users dataset", + "summary": "Get a Fashion Nova static page", "tags": [ - "Datasets" + "Fashion Nova" ] } }, - "/datasets/youtube-creators/facets": { + "/fashionnova/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns value counts for the YouTube creators dataset by the required `facet`: `region` or `discovery_source`. The counts honour the search filters, such as subscriber, video and view ranges and join or refresh dates, and cover the top 50 values.", - "operationId": "datasets-youtube-creators-facets", + "description": "Returns products from Fashion Nova's (https://www.fashionnova.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", + "operationId": "fashionnova-products", "parameters": [ { - "description": "Facet enum: region, discovery_source", - "enum": [ - "region", - "discovery_source" - ], - "in": "query", - "name": "facet", - "required": true, - "type": "string", - "x-example": "region" - }, - { - "description": "Full-text query over channel_name and bio, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact channel id filter, max 128 characters", - "in": "query", - "name": "channel_id", - "type": "string" - }, - { - "description": "Exact channel region/country filter (case-insensitive), max 128 characters", - "in": "query", - "name": "region", - "type": "string" - }, - { - "description": "Exact filter for how the channel was discovered, max 128 characters", - "in": "query", - "name": "discovery_source", - "type": "string" - }, - { - "description": "Filter by a non-empty About bio", - "in": "query", - "name": "has_bio", - "type": "boolean" - }, - { - "description": "Filter by at least one linked external URL", - "in": "query", - "name": "has_links", - "type": "boolean" - }, - { - "description": "Filter by whether the channel exposes a public subscriber count", - "in": "query", - "name": "followers_count_available", - "type": "boolean" - }, - { - "description": "Filter by whether the channel has a known uploaded-video count", - "in": "query", - "name": "videos_count_available", - "type": "boolean" - }, - { - "description": "Filter by whether the channel has a known total view count", - "in": "query", - "name": "views_count_available", - "type": "boolean" - }, - { - "description": "Minimum subscriber count", - "in": "query", - "name": "min_followers", - "type": "integer" - }, - { - "description": "Maximum subscriber count", - "in": "query", - "name": "max_followers", - "type": "integer" - }, - { - "description": "Minimum uploaded-video count", - "in": "query", - "name": "min_videos", - "type": "integer" - }, - { - "description": "Maximum uploaded-video count", - "in": "query", - "name": "max_videos", - "type": "integer" - }, - { - "description": "Minimum total view count", - "in": "query", - "name": "min_views", - "type": "integer" - }, - { - "description": "Maximum total view count", - "in": "query", - "name": "max_views", - "type": "integer" - }, - { - "description": "Channels created on or after this date (RFC3339 or YYYY-MM-DD)", - "in": "query", - "name": "joined_after", - "type": "string" - }, - { - "description": "Channels created on or before this date (RFC3339 or YYYY-MM-DD)", - "in": "query", - "name": "joined_before", - "type": "string" - }, - { - "description": "Records last refreshed on or after this date (RFC3339 or YYYY-MM-DD)", - "in": "query", - "name": "hydrated_after", - "type": "string" - }, - { - "description": "Records last refreshed on or before this date (RFC3339 or YYYY-MM-DD)", + "description": "1-based page, defaults to 1", "in": "query", - "name": "hydrated_before", - "type": "string" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Sort enum: relevance, followers_desc, followers_asc, views_desc, videos_desc, hydrated_at_desc, hydrated_at_asc", - "enum": [ - "relevance", - "followers_desc", - "followers_asc", - "views_desc", - "videos_desc", - "hydrated_at_desc", - "hydrated_at_asc" - ], + "description": "Maximum products, defaults to 50 and supports up to 250", "in": "query", - "name": "sort", - "type": "string" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -336650,7 +409816,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.youtubeCreatorsFacetResponseDoc" + "$ref": "#/definitions/shopifybrands.productsResponseDoc" } }, "400": { @@ -336665,8 +409831,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -336677,27 +409843,27 @@ "ApiKeyAuth": [] } ], - "summary": "Facet the YouTube creators dataset", + "summary": "List Fashion Nova products", "tags": [ - "Datasets" + "Fashion Nova" ] } }, - "/datasets/youtube-creators/items/{channel_id}": { + "/fashionnova/products/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one YouTube channel from the dataset by `channel_id`. The record has channel name and URL, bio, region, join date, links, profile picture, and subscriber, video and view counts, each with an availability flag. A channel not in the dataset returns 404.", - "operationId": "datasets-youtube-creators-item", + "description": "Returns product detail for one Fashion Nova (https://www.fashionnova.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", + "operationId": "fashionnova-product", "parameters": [ { - "description": "YouTube channel id, e.g. UCxxxxxxxxxxxxxxxxxxxxxxxx", + "description": "Product handle", "in": "path", - "name": "channel_id", + "name": "handle", "required": true, "type": "string", - "x-example": "UCX6OQ3DkcsbYNE6H8uQQuVA" + "x-example": "product-handle" } ], "produces": [ @@ -336707,7 +409873,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.youtubeCreatorResponseDoc" + "$ref": "#/definitions/shopifybrands.productResponseDoc" } }, "400": { @@ -336728,8 +409894,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -336740,160 +409906,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get a YouTube creator from the dataset", + "summary": "Get a Fashion Nova product", "tags": [ - "Datasets" + "Fashion Nova" ] } }, - "/datasets/youtube-creators/search": { + "/fashionnova/products/{handle}/recommendations": { "get": { "consumes": [ "application/json" ], - "description": "Searches public YouTube channel profiles stored in a search index — subscriber, video and view counts, region, bio and links, discovered via Common Crawl and Wikidata and hydrated from each channel's public About page. Sort enum: `relevance`, `followers_desc`, `followers_asc`, `views_desc`, `videos_desc`, `hydrated_at_desc`, `hydrated_at_asc`. Some channels hide their subscriber, video, or view count; the `_available` flags on each item distinguish a hidden count (stored as `0`, `*_available: false`) from a genuine `0`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).", - "operationId": "datasets-youtube-creators-search", + "description": "Returns recommended products for one Fashion Nova (https://www.fashionnova.com) product handle. The storefront URL is fixed server-side.", + "operationId": "fashionnova-product-recommendations", "parameters": [ { - "description": "Full-text query over channel_name and bio, max 256 characters", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Exact channel id filter (e.g. UCxxxxxxxxxxxxxxxxxxxxxxxx), max 128 characters", - "in": "query", - "name": "channel_id", - "type": "string" - }, - { - "description": "Exact channel region/country filter (case-insensitive), max 128 characters", - "in": "query", - "name": "region", - "type": "string" - }, - { - "description": "Exact filter for how the channel was discovered (e.g. commoncrawl, wikidata), max 128 characters", - "in": "query", - "name": "discovery_source", - "type": "string" - }, - { - "description": "Filter by a non-empty About bio", - "in": "query", - "name": "has_bio", - "type": "boolean" - }, - { - "description": "Filter by at least one linked external URL", - "in": "query", - "name": "has_links", - "type": "boolean" - }, - { - "description": "Filter by whether the channel exposes a public subscriber count", - "in": "query", - "name": "followers_count_available", - "type": "boolean" - }, - { - "description": "Filter by whether the channel has a known uploaded-video count", - "in": "query", - "name": "videos_count_available", - "type": "boolean" - }, - { - "description": "Filter by whether the channel has a known total view count", - "in": "query", - "name": "views_count_available", - "type": "boolean" - }, - { - "description": "Minimum subscriber count", - "in": "query", - "name": "min_followers", - "type": "integer" - }, - { - "description": "Maximum subscriber count", - "in": "query", - "name": "max_followers", - "type": "integer" - }, - { - "description": "Minimum uploaded-video count", - "in": "query", - "name": "min_videos", - "type": "integer" - }, - { - "description": "Maximum uploaded-video count", - "in": "query", - "name": "max_videos", - "type": "integer" - }, - { - "description": "Minimum total view count", - "in": "query", - "name": "min_views", - "type": "integer" - }, - { - "description": "Maximum total view count", - "in": "query", - "name": "max_views", - "type": "integer" - }, - { - "description": "Channels created on or after this date (RFC3339 or YYYY-MM-DD)", - "in": "query", - "name": "joined_after", - "type": "string" - }, - { - "description": "Channels created on or before this date (RFC3339 or YYYY-MM-DD)", - "in": "query", - "name": "joined_before", - "type": "string" - }, - { - "description": "Records last refreshed on or after this date (RFC3339 or YYYY-MM-DD)", - "in": "query", - "name": "hydrated_after", - "type": "string" + "description": "Product handle", + "in": "path", + "name": "handle", + "required": true, + "type": "string", + "x-example": "product-handle" }, { - "description": "Records last refreshed on or before this date (RFC3339 or YYYY-MM-DD)", + "description": "Maximum products, defaults to 10 and supports up to 20", "in": "query", - "name": "hydrated_before", - "type": "string" + "name": "limit", + "type": "integer", + "x-example": 10 }, { - "description": "Sort enum: relevance, followers_desc, followers_asc, views_desc, videos_desc, hydrated_at_desc, hydrated_at_asc", + "description": "Recommendation intent. Allowed values: related, complementary", "enum": [ - "relevance", - "followers_desc", - "followers_asc", - "views_desc", - "videos_desc", - "hydrated_at_desc", - "hydrated_at_asc" + "related", + "complementary" ], "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000", - "in": "query", - "name": "page_size", - "type": "integer" + "name": "intent", + "type": "string", + "x-example": "related" } ], "produces": [ @@ -336903,7 +409954,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/datasets.youtubeCreatorsSearchResponseDoc" + "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" } }, "400": { @@ -336912,14 +409963,20 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -336930,24 +409987,41 @@ "ApiKeyAuth": [] } ], - "summary": "Search the YouTube creators dataset", + "summary": "List Fashion Nova product recommendations", "tags": [ - "Datasets" + "Fashion Nova" ] } }, - "/dawn/article": { + "/fashionnova/search/suggest": { "get": { - "description": "Returns one Dawn article by its canonical `url` in the form `https://www.dawn.com/news//`. The response has the title, description, publish and update times, section, authors, lead image and body `paragraphs`. Blocked or malformed pages return an upstream error.", - "operationId": "dawn-article", + "consumes": [ + "application/json" + ], + "description": "Returns products, collections, and query suggestions from Fashion Nova's (https://www.fashionnova.com) predictive search. The storefront URL is fixed server-side.", + "operationId": "fashionnova-search-suggest", "parameters": [ { - "description": "Canonical Dawn article URL", + "description": "Search query", "in": "query", - "name": "url", + "name": "q", "required": true, "type": "string", - "x-example": "https://www.dawn.com/news/2032361/pm-shehbaz-stresses-islamabad-mou-implementation-in-meeting-with-pezeshkian" + "x-example": "wool" + }, + { + "description": "Comma-separated suggestion types. Allowed values: product, collection, query", + "in": "query", + "name": "types", + "type": "string", + "x-example": "product,collection,query" + }, + { + "description": "Maximum results per type, defaults to 10 and supports up to 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -336957,7 +410031,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" } }, "400": { @@ -336966,8 +410040,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -336984,24 +410058,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get Dawn article content", + "summary": "Get Fashion Nova search suggestions", "tags": [ - "Dawn" + "Fashion Nova" ] } }, - "/dawn/author": { + "/fashionnova/sitemap/urls": { "get": { - "description": "Returns one Dawn byline's public profile (name and biography, when Dawn publishes one) and their recent articles from a canonical author URL.", - "operationId": "dawn-author", + "consumes": [ + "application/json" + ], + "description": "Returns capped URL entries from Fashion Nova's (https://www.fashionnova.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", + "operationId": "fashionnova-sitemap-urls", "parameters": [ { - "description": "Canonical www.dawn.com/authors// URL", + "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", + "enum": [ + "all", + "products", + "collections", + "pages", + "blogs", + "agentic_discovery", + "other" + ], "in": "query", - "name": "url", - "required": true, + "name": "type", "type": "string", - "x-example": "https://www.dawn.com/authors/675/khurram-husain" + "x-example": "products" + }, + { + "description": "Maximum URL entries, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -337011,7 +410103,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.dawnAuthorResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" } }, "400": { @@ -337020,8 +410112,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -337038,45 +410130,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Dawn author profile", + "summary": "List Fashion Nova sitemap URLs", "tags": [ - "Dawn" + "Fashion Nova" ] } }, - "/dawn/headlines": { + "/fashionnova/sitemaps": { "get": { - "description": "Returns the latest Dawn headlines for one section. `section` is required and takes a slug such as `pakistan`, `pakistan-sindh`, `world-south-asia`, `business-finance`, `sport-cricket`, `opinion` or `prism`. Each item has its title, URL, summary, publication time and, when the outlet provides one, image.", - "operationId": "dawn-headlines", - "parameters": [ - { - "description": "Dawn section slug", - "enum": [ - "pakistan", - "pakistan-balochistan", - "pakistan-ict", - "pakistan-kp-fata", - "pakistan-punjab", - "pakistan-sindh", - "world", - "world-south-asia", - "business", - "business-finance", - "sport", - "sport-cricket", - "opinion", - "tech", - "newspaper", - "magazines", - "prism" - ], - "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "pakistan" - } + "consumes": [ + "application/json" ], + "description": "Returns child sitemap URLs from Fashion Nova's (https://www.fashionnova.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", + "operationId": "fashionnova-sitemaps", "produces": [ "application/json" ], @@ -337084,7 +410150,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" } }, "400": { @@ -337093,6 +410159,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -337105,16 +410177,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Dawn section headlines", + "summary": "List Fashion Nova sitemaps", "tags": [ - "Dawn" + "Fashion Nova" ] } }, - "/dawn/news": { + "/fashionnova/store": { "get": { - "description": "Returns the current top stories from Dawn, the Pakistani newspaper. Each item has its title, URL, summary, publication time and, when the outlet provides one, image. Takes no parameters; use `dawn-headlines` for a single section.", - "operationId": "dawn-news", + "consumes": [ + "application/json" + ], + "description": "Returns storefront metadata for Fashion Nova (https://www.fashionnova.com). The storefront URL is fixed server-side, so no `url` parameter is accepted.", + "operationId": "fashionnova-store", "produces": [ "application/json" ], @@ -337122,7 +410197,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/shopifybrands.storeResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -337137,50 +410224,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Dawn top stories", + "summary": "Get Fashion Nova store metadata", "tags": [ - "Dawn" + "Fashion Nova" ] } }, - "/dawn/sections": { + "/fashionphile/collections": { "get": { - "description": "Returns the complete public Dawn section inventory (Pakistan provinces, World, Business, Sport, Opinion, Technology, Newspaper, Magazines, and Prism) accepted by /dawn/headlines.", - "operationId": "dawn-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Dawn sections", - "tags": [ - "Dawn" - ] - } - }, - "/deadline/article": { - "get": { - "description": "Returns public Deadline article metadata (title, author(s), published/updated dates, section, lead image) and body paragraphs from a canonical article URL.", - "operationId": "deadline-article", + "description": "Returns collections from Fashionphile (https://www.fashionphile.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", + "operationId": "fashionphile-collections", "parameters": [ { - "description": "Canonical Deadline article URL", + "description": "1-based page, defaults to 1", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://deadline.com/2026/09/example-story-1237111140/" + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Maximum collections, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -337190,7 +410260,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" } }, "400": { @@ -337199,8 +410269,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -337217,31 +410287,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get Deadline article content", + "summary": "List Fashionphile collections", "tags": [ - "Deadline" + "Fashionphile" ] } }, - "/deadline/author": { + "/fashionphile/collections/{handle}/products": { "get": { - "description": "Returns one Deadline staff writer or contributor's public profile: name, job title, headshot, biography, social/contact links, and one page of their recent articles.", - "operationId": "deadline-author", + "consumes": [ + "application/json" + ], + "description": "Returns products from one Fashionphile (https://www.fashionphile.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", + "operationId": "fashionphile-collection-products", "parameters": [ { - "description": "Canonical deadline.com/author/ URL", - "in": "query", - "name": "url", + "description": "Collection handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "https://deadline.com/author/andreas-wiseman/" + "x-example": "collection-handle" }, { - "description": "1-based page of recent articles to return; defaults to 1", + "description": "1-based page, defaults to 1", "in": "query", "name": "page", "type": "integer", "x-example": 1 + }, + { + "description": "Maximum products, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -337251,7 +410331,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.deadlineAuthorResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" } }, "400": { @@ -337266,6 +410346,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -337278,74 +410364,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Deadline author profile", + "summary": "List Fashionphile collection products", "tags": [ - "Deadline" + "Fashionphile" ] } }, - "/deadline/headlines": { + "/fashionphile/pages": { "get": { - "description": "Returns the latest Deadline headlines for one section or vertical. `section` is required and takes one of 48 slugs, for example `film`, `tv`, `box-office`, `awards`, `casting`, `reviews` or `obituaries`. Each item has its title, URL, summary, publication time, author and image.", - "operationId": "deadline-headlines", + "consumes": [ + "application/json" + ], + "description": "Lists Fashionphile static pages, 50 per page by default (`limit`, max 250), with `page` starting at 1. Each page has its handle, title, URL, plain-text content, and created, updated and published dates. When `transport_mode` is `ssr_embedded`, items carry only `handle`, `url` and `updated_at`. Fetch a single page for its full content.", + "operationId": "fashionphile-pages", "parameters": [ { - "description": "Deadline section slug", - "enum": [ - "acquisitions", - "agencies", - "album", - "below-the-line", - "books", - "cancellations-renewals", - "casting", - "commentary", - "culture", - "documentary", - "executives", - "festivals", - "late-night-tv", - "legal", - "news", - "obituaries", - "podcast", - "politics", - "predictions", - "primetime-pilot-panic", - "ratings", - "recaps", - "red-carpet-premieres", - "reviews", - "sports", - "touring", - "trailers", - "video-games", - "awards", - "awards-news", - "box-office", - "business", - "cover-stories", - "crew-call", - "dialogue", - "feature", - "film", - "flash-mob", - "hammond", - "hero-nation", - "international", - "look-back-look-ahead", - "music", - "resident-advisor", - "rough-cuts", - "theater", - "tv", - "video" - ], + "description": "1-based page, defaults to 1", "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "acquisitions" + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Maximum static pages, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -337355,7 +410400,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/shopifybrands.pagesResponseDoc" } }, "400": { @@ -337364,6 +410409,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -337376,16 +410427,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Deadline section headlines", + "summary": "List Fashionphile static pages", "tags": [ - "Deadline" + "Fashionphile" ] } }, - "/deadline/news": { + "/fashionphile/pages/{handle}": { "get": { - "description": "Returns the current Deadline Hollywood top stories from its main feed. Each item has its title, URL, summary, publication time, author and image. Takes no parameters; use `deadline-headlines` for a single section or vertical.", - "operationId": "deadline-news", + "consumes": [ + "application/json" + ], + "description": "Returns one Fashionphile static page by its required `handle`, such as `about`: title, URL, plain-text content, and created, updated and published dates. An unknown handle returns `404`. In a fallback mode flagged by `transport_mode: \"ssr_embedded\"`, the response omits `id`.", + "operationId": "fashionphile-page", + "parameters": [ + { + "description": "Page handle", + "in": "path", + "name": "handle", + "required": true, + "type": "string", + "x-example": "page-handle" + } + ], "produces": [ "application/json" ], @@ -337393,7 +410457,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/shopifybrands.pageResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -337414,77 +410490,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Deadline top stories", - "tags": [ - "Deadline" - ] - } - }, - "/deadline/sections": { - "get": { - "description": "Lists the 48 Deadline sections accepted by `deadline-headlines`: 28 editorial categories such as `news`, `reviews` and `festivals`, and 20 verticals such as `film`, `tv`, `business` and `awards`. Each entry has the `slug`, `name` and feed `url`.", - "operationId": "deadline-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Deadline sections", + "summary": "Get a Fashionphile static page", "tags": [ - "Deadline" + "Fashionphile" ] } }, - "/deliveroo/fulfillment-times": { + "/fashionphile/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns the exact same \"Choose a day\" / \"Choose a time\" scheduled-ordering data the real site's own order-ahead picker shows for a location, for both delivery and pickup: an ASAP option plus every day currently open for a scheduled order, each with its real time slots and UNIX timestamps.", - "operationId": "deliveroo-fulfillment-times", + "description": "Returns products from Fashionphile's (https://www.fashionphile.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", + "operationId": "fashionphile-products", "parameters": [ { - "description": "Search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 51.4975 - }, - { - "description": "Search center longitude", + "description": "1-based page, defaults to 1", "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -0.1357 + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Deliveroo national market to search (default uk)", - "enum": [ - "uk", - "ie", - "fr", - "it", - "be", - "ae", - "kw" - ], + "description": "Maximum products, defaults to 50 and supports up to 250", "in": "query", - "name": "market", - "type": "string", - "x-example": "uk" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -337494,7 +410526,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/deliveroo.fulfillmentTimesResponseDoc" + "$ref": "#/definitions/shopifybrands.productsResponseDoc" } }, "400": { @@ -337503,6 +410535,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -337515,43 +410553,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Deliveroo's live delivery and pickup scheduling windows for a location", + "summary": "List Fashionphile products", "tags": [ - "Deliveroo" + "Fashionphile" ] } }, - "/deliveroo/restaurant": { + "/fashionphile/products/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Deliveroo partner's detail by uname -- restaurant, grocery, or shopping store alike, distinguished by branch_type: name, address, currency, branch/fulfillment type, rating, review count, a hero image, and whether it currently accepts orders.", - "operationId": "deliveroo-restaurant", + "description": "Returns product detail for one Fashionphile (https://www.fashionphile.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", + "operationId": "fashionphile-product", "parameters": [ { - "description": "Restaurant slug, from a search response's uname field", - "in": "query", - "name": "uname", + "description": "Product handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "nandos-wilton-road" - }, - { - "description": "Deliveroo national market the uname was found in (default uk)", - "enum": [ - "uk", - "ie", - "fr", - "it", - "be", - "ae", - "kw" - ], - "in": "query", - "name": "market", - "type": "string", - "x-example": "uk" + "x-example": "product-handle" } ], "produces": [ @@ -337561,7 +410583,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/deliveroo.restaurantResponseDoc" + "$ref": "#/definitions/shopifybrands.productResponseDoc" } }, "400": { @@ -337576,6 +410598,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -337588,43 +410616,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Deliveroo restaurant, grocery, or shopping partner's detail", + "summary": "Get a Fashionphile product", "tags": [ - "Deliveroo" + "Fashionphile" ] } }, - "/deliveroo/restaurant/menu": { + "/fashionphile/products/{handle}/recommendations": { "get": { "consumes": [ "application/json" ], - "description": "Returns one partner's full menu or catalog grouped into categories -- restaurant menus, grocery aisles, and shopping-store catalogs all use this same endpoint (see /deliveroo/search's collection parameter). Every item carries a name, description, product-meta text when the upstream provides it (calorie counts on restaurant items, per-unit pricing like \"380g · £15.79/kg\" on grocery/shopping items), price, availability, and its resolved customization options (e.g. \"Choose your meal\", \"Add ingredients?\") with each option's own price and required/multi-select bounds.", - "operationId": "deliveroo-restaurant-menu", + "description": "Returns recommended products for one Fashionphile (https://www.fashionphile.com) product handle. The storefront URL is fixed server-side.", + "operationId": "fashionphile-product-recommendations", "parameters": [ { - "description": "Restaurant slug, from a search response's uname field", - "in": "query", - "name": "uname", + "description": "Product handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "nandos-wilton-road" + "x-example": "product-handle" }, { - "description": "Deliveroo national market the uname was found in (default uk)", + "description": "Maximum products, defaults to 10 and supports up to 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + }, + { + "description": "Recommendation intent. Allowed values: related, complementary", "enum": [ - "uk", - "ie", - "fr", - "it", - "be", - "ae", - "kw" + "related", + "complementary" ], "in": "query", - "name": "market", + "name": "intent", "type": "string", - "x-example": "uk" + "x-example": "related" } ], "produces": [ @@ -337634,7 +410664,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/deliveroo.menuResponseDoc" + "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" } }, "400": { @@ -337649,6 +410679,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -337661,168 +410697,88 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Deliveroo restaurant, grocery, or shopping partner's priced catalog", + "summary": "List Fashionphile product recommendations", "tags": [ - "Deliveroo" + "Fashionphile" ] } }, - "/deliveroo/search": { + "/fashionphile/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns the restaurants (or, with collection set, grocery/shopping stores) Deliveroo's own catalog serves for a latitude/longitude in the given market -- the location's entire feed, not a curated subset (confirmed live: up to 2,700+ results for a single coordinate). Each result carries its uname (the value the restaurant and menu endpoints take), name, image, branch_type, and, when available, rating, delivery time, and distance. Optional collection, cuisine, dietary, dish, min_rating, max_delivery_minutes, max_delivery_fee_pounds, has_offer, deliveroos_choice, and sort parameters narrow and order the same feed -- call /deliveroo/search/filters for the current, complete, location-scoped list of every valid cuisine/dietary/dish value with live result counts. A location with no coverage returns an empty list rather than an error.", - "operationId": "deliveroo-search", + "description": "Returns ranked products from Fashionphile's (https://www.fashionphile.com) own full-text and faceted product search, including condition grade, discount percentage, and other filter attributes not available from the classic catalog endpoints in this family. The storefront URL is fixed server-side. Omitting `q` browses the full catalog subject to any condition/vendor/availability filters and the chosen sort. By default only in-stock listings are searched, matching the storefront; `availability=sold` searches the sold archive instead. `total_items` is the exact number of products matching the query and all filters.", + "operationId": "fashionphile-search", "parameters": [ { - "description": "Search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 51.4975 - }, - { - "description": "Search center longitude", + "description": "Search query text", "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -0.1357 + "name": "q", + "type": "string", + "x-example": "chanel" }, { - "description": "Deliveroo national market to search (default uk)", + "description": "Filter by condition grade. Allowed values: New, Excellent, Giftable, Shows Wear, Worn, Flawed, Fair", "enum": [ - "uk", - "ie", - "fr", - "it", - "be", - "ae", - "kw" + "New", + "Excellent", + "Giftable", + "Shows Wear", + "Worn", + "Flawed", + "Fair" ], "in": "query", - "name": "market", + "name": "condition", "type": "string", - "x-example": "uk" - }, - { - "description": "Restaurants to return, clamped to 100 (default 20)", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "x-example": "Excellent" }, { - "description": "Optional, passed straight through to the upstream. Selects the Deliveroo partner vertical: omit for restaurants/takeaways (default), grocery for supermarkets and convenience stores, shopping for non-food retail -- both confirmed live; other values may exist and are not rejected. Every result uses the same uname contract for /deliveroo/restaurant and /deliveroo/restaurant/menu.", + "description": "Which listings to search. Allowed values: available (in-stock only, default), sold (sold archive only), all", + "enum": [ + "available", + "sold", + "all" + ], "in": "query", - "name": "collection", + "name": "availability", "type": "string", - "x-example": "grocery" - }, - { - "collectionFormat": "multi", - "description": "Optional, repeatable Deliveroo cuisine filter, e.g. cuisine=american&cuisine=asian. Passed straight through to the upstream; call /deliveroo/search/filters for the current, complete, location-scoped list of valid values. An unrecognized value is silently ignored by the upstream, not rejected.", - "in": "query", - "items": { - "type": "string" - }, - "name": "cuisine", - "type": "array", - "x-example": "american" - }, - { - "collectionFormat": "multi", - "description": "Optional, repeatable Deliveroo dietary filter passed straight through to the upstream, e.g. dietary=vegan. Call /deliveroo/search/filters for the current, complete list of valid values. An unrecognized value is silently ignored by the upstream, not rejected.", - "in": "query", - "items": { - "type": "string" - }, - "name": "dietary", - "type": "array", - "x-example": "vegan" - }, - { - "collectionFormat": "multi", - "description": "Optional, repeatable Deliveroo dish-level filter passed straight through to the upstream, e.g. dish=pizza&dish=sushi. Call /deliveroo/search/filters for the current, complete, location-scoped list of valid values. An unrecognized value is silently ignored by the upstream, not rejected.", - "in": "query", - "items": { - "type": "string" - }, - "name": "dish", - "type": "array", - "x-example": "pizza" + "x-example": "available" }, { - "description": "When true, only returns results Deliveroo itself marks top-rated (its own 4.5+ threshold). Equivalent to min_rating=4.5; ignored if min_rating is also set.", + "description": "Filter by exact designer/vendor name, e.g. Chanel", "in": "query", - "name": "top_rated", - "type": "boolean", - "x-example": true + "name": "vendor", + "type": "string", + "x-example": "Chanel" }, { - "description": "Minimum star rating filter", + "description": "Sort order. Allowed values: relevance, newest, price_asc, price_desc", "enum": [ - 3.5, - 4, - 4.5 + "relevance", + "newest", + "price_asc", + "price_desc" ], "in": "query", - "name": "min_rating", - "type": "number", - "x-example": 4 + "name": "sort", + "type": "string", + "x-example": "relevance" }, { - "description": "Maximum estimated delivery time in minutes", - "enum": [ - 20, - 30, - 45 - ], + "description": "1-based page, defaults to 1", "in": "query", - "name": "max_delivery_minutes", + "name": "page", "type": "integer", - "x-example": 30 + "x-example": 1 }, { - "description": "Maximum delivery fee in GBP", - "enum": [ - 1, - 2, - 3 - ], + "description": "Maximum products, defaults to 20 and supports up to 50", "in": "query", - "name": "max_delivery_fee_pounds", + "name": "limit", "type": "integer", - "x-example": 2 - }, - { - "description": "When true, only returns results currently running an offer/promotion", - "in": "query", - "name": "has_offer", - "type": "boolean", - "x-example": true - }, - { - "description": "Result ordering", - "enum": [ - "recommended", - "distance", - "time", - "rating" - ], - "in": "query", - "name": "sort", - "type": "string", - "x-example": "distance" - }, - { - "description": "When true, only returns results in Deliveroo's own Deliveroo's Choice curated collection. Combines with collection (e.g. collection=grocery&deliveroos_choice=true narrows to Deliveroo's Choice within the grocery vertical) rather than conflicting with it.", - "in": "query", - "name": "deliveroos_choice", - "type": "boolean", - "x-example": true + "x-example": 20 } ], "produces": [ @@ -337832,7 +410788,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/deliveroo.searchResponseDoc" + "$ref": "#/definitions/shopifybrands.searchResponseDoc" } }, "400": { @@ -337841,6 +410797,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -337853,51 +410815,41 @@ "ApiKeyAuth": [] } ], - "summary": "Search Deliveroo restaurants, groceries, or shopping stores near a location", + "summary": "Search Fashionphile products", "tags": [ - "Deliveroo" + "Fashionphile" ] } }, - "/deliveroo/search/filters": { + "/fashionphile/search/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns the exact same sort and filter catalog -- every cuisine, dietary tag, dish, delivery-time tier, delivery-fee tier, star-rating tier, and offer flag, each with a live result count for this location -- that the real search page's own filter dropdowns are populated from. Every option's query_param/query_value pair is the literal query string /deliveroo/search accepts for that filter.", - "operationId": "deliveroo-search-filters", + "description": "Returns products, collections, and query suggestions from Fashionphile's (https://www.fashionphile.com) predictive search. The storefront URL is fixed server-side.", + "operationId": "fashionphile-search-suggest", "parameters": [ { - "description": "Search center latitude", + "description": "Search query", "in": "query", - "name": "latitude", + "name": "q", "required": true, - "type": "number", - "x-example": 51.4975 + "type": "string", + "x-example": "wool" }, { - "description": "Search center longitude", + "description": "Comma-separated suggestion types. Allowed values: product, collection, query", "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -0.1357 + "name": "types", + "type": "string", + "x-example": "product,collection,query" }, { - "description": "Deliveroo national market to search (default uk)", - "enum": [ - "uk", - "ie", - "fr", - "it", - "be", - "ae", - "kw" - ], + "description": "Maximum results per type, defaults to 10 and supports up to 20", "in": "query", - "name": "market", - "type": "string", - "x-example": "uk" + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -337907,7 +410859,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/deliveroo.filtersResponseDoc" + "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" } }, "400": { @@ -337916,6 +410868,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -337928,24 +410886,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get Deliveroo's live search filter and sort catalog for a location", + "summary": "Get Fashionphile search suggestions", "tags": [ - "Deliveroo" + "Fashionphile" ] } }, - "/denverpost/article": { + "/fashionphile/sitemap/urls": { "get": { - "description": "Returns article metadata and paragraphs present on the public page. Subscriber-only pages may expose only an anonymous preview; this service does not bypass access controls.", - "operationId": "denverpost-article", + "consumes": [ + "application/json" + ], + "description": "Lists URL entries from Fashionphile's sitemaps, filtered by `type` (`all` by default, or `products`, `collections`, `pages`, `blogs`, `agentic_discovery`, `other`) and capped by `limit` (default 50, max 250). Each entry has its `loc`, inferred type, handle, last modified date, change frequency, and optional images.", + "operationId": "fashionphile-sitemap-urls", "parameters": [ { - "description": "Canonical Denver Post article URL", + "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", + "enum": [ + "all", + "products", + "collections", + "pages", + "blogs", + "agentic_discovery", + "other" + ], "in": "query", - "name": "url", - "required": true, + "name": "type", "type": "string", - "x-example": "https://www.denverpost.com/2026/09/29/colorado-oportunity-zones-investment/" + "x-example": "products" + }, + { + "description": "Maximum URL entries, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -337955,7 +410931,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" } }, "400": { @@ -337964,8 +410940,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -337982,32 +410958,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Denver Post article", + "summary": "List Fashionphile sitemap URLs", "tags": [ - "The Denver Post" + "Fashionphile" ] } }, - "/denverpost/author": { + "/fashionphile/sitemaps": { "get": { - "description": "Returns a Denver Post author's profile and the articles on the first page of their archive. Give exactly one of `slug` (for example `aldo-svaldi`) or `url` (a denverpost.com/author// link). The profile has name, job title, bio, email and Twitter handle where the page shows them; each article has a title, URL, summary and publication time.", - "operationId": "denverpost-author", - "parameters": [ - { - "description": "Author slug, e.g. aldo-svaldi", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "aldo-svaldi" - }, - { - "description": "Canonical denverpost.com/author// URL; alternative to slug", - "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.denverpost.com/author/aldo-svaldi/" - } + "consumes": [ + "application/json" ], + "description": "Lists the child sitemaps in Fashionphile's sitemap index, with no parameters. Each entry has its `loc` URL and an inferred `type`: `products`, `collections`, `pages`, `blogs`, `agentic_discovery` or `other`. Product sitemap URLs may carry `from` and `to` query values.", + "operationId": "fashionphile-sitemaps", "produces": [ "application/json" ], @@ -338015,7 +410978,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.denverPostAuthorResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" } }, "400": { @@ -338024,8 +410987,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -338042,103 +411005,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Denver Post author archive", + "summary": "List Fashionphile sitemaps", "tags": [ - "The Denver Post" + "Fashionphile" ] } }, - "/denverpost/headlines": { + "/fashionphile/store": { "get": { - "description": "Returns current headlines for one Denver Post section or topic archive. `section` is required and must be a slug from the sections endpoint, such as `business`, `denver-broncos`, `colorado` or `weather`; an invalid value returns an invalid-params error. Items carry title and URL, plus summary, author, publication time and image when the card shows them. Cards without a dated Denver Post article URL are skipped.", - "operationId": "denverpost-headlines", - "parameters": [ - { - "description": "Section or topic slug returned by denverpost-sections", - "enum": [ - "news", - "latest-headlines", - "colorado", - "politics", - "crime-public-safety", - "courts", - "national", - "world", - "education", - "health", - "environment", - "transportation", - "housing", - "news-obituaries", - "photos-and-videos", - "weather", - "sports", - "sports-columnists", - "denver-broncos", - "colorado-rockies", - "denver-nuggets", - "colorado-avalanche", - "colorado-rapids", - "denver-summit-fc", - "college", - "colorado-preps", - "betting", - "golf", - "boxing-mma", - "sports-podcasts", - "business", - "colorado-real-estate", - "airlines", - "economy", - "energy", - "retail", - "colorado-technology", - "best-reviews", - "theknow", - "restaurants-food-drink", - "arts", - "culture", - "movies", - "television", - "music", - "theater", - "travel", - "parenting-family", - "bars", - "beer", - "outdoors", - "hiking", - "fall-colors", - "cycling", - "fitness", - "running", - "camping", - "fishing", - "hunting", - "water-sports", - "skiing", - "snowboarding", - "winter-sports", - "opinion", - "editorials", - "opinion-columnists", - "letters", - "endorsements", - "things-to-do", - "horoscopes", - "advice", - "home-garden", - "free-and-cheap", - "cannabis", - "recipes" - ], - "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "news" - } + "consumes": [ + "application/json" ], + "description": "Returns storefront metadata for Fashionphile (https://www.fashionphile.com). The storefront URL is fixed server-side, so no `url` parameter is accepted.", + "operationId": "fashionphile-store", "produces": [ "application/json" ], @@ -338146,7 +411025,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/shopifybrands.storeResponseDoc" } }, "400": { @@ -338155,6 +411034,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -338167,16 +411052,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get Denver Post section headlines", + "summary": "Get Fashionphile store metadata", "tags": [ - "The Denver Post" + "Fashionphile" ] } }, - "/denverpost/news": { + "/fastcompany/article": { "get": { - "description": "Returns the article cards on the Denver Post homepage, about 91 when last checked, though the count varies as the site updates. Each item has a title and URL and can carry a summary, author, publication time, image and `type`. It takes no parameters.", - "operationId": "denverpost-news", + "description": "Returns public Fast Company article metadata and body paragraphs from a canonical article URL. It does not bypass authentication or access controls.", + "operationId": "fastcompany-article", + "parameters": [ + { + "description": "Canonical Fast Company article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.fastcompany.com/91611506/example-headline" + } + ], "produces": [ "application/json" ], @@ -338184,7 +411079,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -338199,16 +411106,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get Denver Post top stories", + "summary": "Get Fast Company article content", "tags": [ - "The Denver Post" + "Fast Company" ] } }, - "/denverpost/sections": { + "/fastcompany/author": { "get": { - "description": "Lists the Denver Post slugs that the headlines endpoint accepts: 56 editorial sections and 19 topic archives, checked on 2026-09-30. Examples are `colorado`, `denver-broncos`, `economy` and `hiking`. Each entry has a `slug`, `name` and `url`. Branded content and cartoons are left out.", - "operationId": "denverpost-sections", + "description": "Returns a Fast Company contributor's name, biography, and recent articles from a canonical contributor URL. The biography is omitted if the contributor's profile page cannot be loaded. It does not bypass authentication or access controls.", + "operationId": "fastcompany-author", + "parameters": [ + { + "description": "Canonical Fast Company contributor URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.fastcompany.com/user/example-writer" + } + ], "produces": [ "application/json" ], @@ -338216,7 +411133,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/publicnews.fastCompanyAuthorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -338225,19 +411160,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get Denver Post section and topic inventory", + "summary": "Get a Fast Company contributor profile", "tags": [ - "The Denver Post" + "Fast Company" ] } }, - "/depop/brands": { + "/fastcompany/headlines": { "get": { - "consumes": [ - "application/json" + "description": "Returns fresh headlines from one Fast Company section or topic's public RSS feed. section accepts any slug returned by GET /fastcompany/sections (78 values, e.g. \"technology\" or \"artificial-intelligence\").", + "operationId": "fastcompany-headlines", + "parameters": [ + { + "description": "Fast Company section slug, from GET /fastcompany/sections", + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "technology" + } ], - "description": "Returns Depop's full brand directory (id, name, slug), not just brands with active listings for a given search -- resolves the search endpoint's otherwise-opaque brand_ids filter to human-readable names. Public data sourced from Depop's own brand-directory API.", - "operationId": "depop-brands", "produces": [ "application/json" ], @@ -338245,11 +411187,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/depop.brandsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -338266,19 +411208,16 @@ "ApiKeyAuth": [] } ], - "summary": "Depop's full brand directory", + "summary": "Get Fast Company section headlines", "tags": [ - "Depop" + "Fast Company" ] } }, - "/depop/categories": { + "/fastcompany/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Depop's full department, category, and subcategory taxonomy -- every value usable with /depop/search's and /depop/shop/{username}'s category/subcategory filters. Tries a live refresh from Depop's own category-filter API first and falls back to a static snapshot on any failure, so this never errors.", - "operationId": "depop-categories", + "description": "Returns the current Fast Company top stories. Each item has its title, canonical URL, summary, publication time, author and image. Takes no parameters, so there is no section or paging control.", + "operationId": "fastcompany-news", "produces": [ "application/json" ], @@ -338286,11 +411225,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/depop.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -338301,29 +411246,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Depop's category taxonomy", + "summary": "Get Fast Company top stories", "tags": [ - "Depop" + "Fast Company" ] } }, - "/depop/item/{slug}": { + "/fastcompany/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a Depop item-detail page: description, all photos, price, condition, brand, size, seller info, and a \"similar items\" carousel when the page has one.", - "operationId": "depop-item", - "parameters": [ - { - "description": "Depop item URL slug, e.g. from a search result's id field", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "ag_boutique-vintage-mid-rise-bootcut-levi-2476" - } - ], + "description": "Returns the Fast Company section/topic inventory: the site's six primary verticals (Tech, Work Life, News, Design, Leadership, Impact) plus every topic tag accepted by GET /fastcompany/headlines (78 values total, too many to enumerate inline -- see that endpoint for the full, current, live-verified list), each linking to its public RSS feed.", + "operationId": "fastcompany-sections", "produces": [ "application/json" ], @@ -338331,31 +411263,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/depop.ItemDetailResponse" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -338364,40 +411272,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get Depop item detail", + "summary": "Get Fast Company sections", "tags": [ - "Depop" + "Fast Company" ] } }, - "/depop/item/{slug}/similar": { + "/fever/cities": { "get": { "consumes": [ "application/json" ], - "description": "Returns items similar to a given Depop listing, via Depop's dedicated similar-items API -- richer and paginated (up to 150 per page) compared to the small, non-paginated \"similar items\" carousel already included in item detail. Public data sourced from Depop's own similar-items API.", - "operationId": "depop-item-similar", + "description": "Searches Fever's (feverup.com) city index and returns the matching city records grouped by the upstream's own suggestion type: city id, city code (pass it to fever-plans and fever-filters), name, country, region, slug, language, centre coordinates and thumbnail. Matching is Fever's own fuzzy name match, so search by name (new york, london) rather than by a bare city code: a three-letter code query that matches nothing falls back to the whole top-city list instead of reporting no results. No public route enumerates every Fever city; fever-top-cities is a fixed 25-city seed and this search is the way to reach the rest.", + "operationId": "fever-cities", "parameters": [ { - "description": "Depop item URL slug, e.g. from a search result's id field", - "in": "path", - "name": "slug", + "description": "City search text, e.g. new york", + "in": "query", + "name": "query", "required": true, "type": "string", - "x-example": "ag_boutique-vintage-mid-rise-bootcut-levi-2476" - }, - { - "description": "Max results per page, 1-150", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 24 + "x-example": "new york" }, { - "description": "Opaque pagination cursor from a previous response's next_cursor field. Omit for the first page.", + "description": "Locale for results, defaults to en-US", "in": "query", - "name": "after", - "type": "string" + "name": "locale", + "type": "string", + "x-example": "en-US" } ], "produces": [ @@ -338407,7 +411309,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/depop.similarItemsResponseDoc" + "$ref": "#/definitions/fever.citiesResponseDoc" } }, "400": { @@ -338416,14 +411318,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -338440,115 +411336,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get Depop items similar to a listing", + "summary": "Search Fever cities by name", "tags": [ - "Depop" + "Fever" ] } }, - "/depop/search": { + "/fever/feed": { "get": { "consumes": [ "application/json" ], - "description": "Searches Depop's resale-fashion marketplace by free-text keyword, with optional price, condition, colour, category, subcategory, gender, kids-department, brand, discount, and sort filters, returning listing summaries (title, price, brand, condition, like count, photos, sizes), a pagination cursor, and the total matching count.", - "operationId": "depop-search", + "description": "Returns one city's curated Fever (feverup.com) feed: every row with its title, subtype, layout and Fever category id, plus the feed's complete pill enum (creative, culture, wellness, tourist, social, luxe, romantic, detective, nightlife, foodie, adventurer, family). This is a discovery surface, not coverage: the rows are editorial carousels, and each row's items are reached through fever-plans with the row's whatplanfilter_id. It exists because fever-filters is incomplete: Fever runs two disjoint category id spaces, and today's NYC feed exposes nine category ids the filter list never lists (558, 566, 655, 851, 865, 871, 1033, 1070, 1109 on 2026-11-08, drifting by city and day), most of which fever-plans accepts as whatplanfilter_id. pill_id filters the rows and is validated against the pills array in the same response, because the enum is only learnable from the response itself; an unknown pill is a typed invalid-params error listing the accepted ids. A served city is identified by a non-empty pills array, so an unserved city_code is a typed invalid-params error naming the code rather than an empty success. Carousel items are deliberately not exposed: the whatplanfilter item route answers 404 upstream for every variant.", + "operationId": "fever-feed", "parameters": [ { - "description": "Free-text keyword search", + "description": "Fever city code, e.g. NYC", "in": "query", - "name": "query", + "name": "city_code", "required": true, "type": "string", - "x-example": "nike jacket" - }, - { - "description": "Minimum listing price in USD", - "in": "query", - "name": "price_min", - "type": "number", - "x-example": 15 - }, - { - "description": "Maximum listing price in USD", - "in": "query", - "name": "price_max", - "type": "number", - "x-example": 50 - }, - { - "description": "Comma-separated condition filter: brand_new, used_like_new, used_excellent, used_good, used_fair", - "in": "query", - "name": "condition", - "type": "string", - "x-example": "used_excellent,used_good" - }, - { - "description": "Comma-separated colour filter: black, grey, white, brown, tan, cream, yellow, red, burgundy, orange, pink, purple, blue, navy, green, khaki, multi", - "in": "query", - "name": "colours", - "type": "string", - "x-example": "black,white" - }, - { - "description": "Restrict results to discounted listings", - "in": "query", - "name": "on_sale", - "type": "boolean" - }, - { - "description": "Sort order: relevance, price_low_to_high, price_high_to_low", - "in": "query", - "name": "sort", - "type": "string", - "x-example": "price_low_to_high" - }, - { - "description": "Depop category slug: tops, bottoms, dresses, coats-jackets, jumpsuit-and-playsuit, suits, footwear, accessories, nightwear, underwear, swim-beach-wear, fancy-dress, sleepsuits-and-bodysuits, bundles, beauty, face-masks, home, tech-accessories, film, art, books-and-magazine, music, party-supplies, sports-equipment-accesories, toys, umbrella. See GET /depop/categories for a machine-readable enumeration with names and subcategories.", - "in": "query", - "name": "category", - "type": "string", - "x-example": "tops" - }, - { - "description": "Comma-separated Depop subcategory slug(s), scoped within category. See GET /depop/categories for the full list per category.", - "in": "query", - "name": "subcategory", - "type": "string", - "x-example": "tshirts,hoodies" - }, - { - "description": "Department filter: female, male", - "in": "query", - "name": "gender", - "type": "string", - "x-example": "female" - }, - { - "description": "Kids-department filter: true restricts results to kids items only, false excludes them, omitted returns both.", - "in": "query", - "name": "is_kids", - "type": "boolean" - }, - { - "description": "Comma-separated Depop internal numeric brand ids. Not documented by Depop -- find a brand's id by browsing its depop.com/brands// page.", - "in": "query", - "name": "brand_ids", - "type": "string", - "x-example": "219" + "x-example": "NYC" }, { - "description": "Comma-separated Depop size composite ids (format {size_set_id}.{id}, e.g. \\", + "description": "Feed pill id to filter the rows, e.g. foodie; the accepted set is the pills array this endpoint returns", "in": "query", - "name": "sizes", + "name": "pill_id", "type": "string", - "x-example": "4.17" - }, - { - "description": "Opaque pagination cursor from a previous response's next_cursor field. Omit for the first page.", - "in": "query", - "name": "after", - "type": "string" + "x-example": "foodie" } ], "produces": [ @@ -338558,7 +411373,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/depop.searchResponseDoc" + "$ref": "#/definitions/fever.feedResponseDoc" } }, "400": { @@ -338567,8 +411382,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -338585,27 +411400,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Depop listings", + "summary": "List one city's curated Fever feed rows and the feed's pill filter enum", "tags": [ - "Depop" + "Fever" ] } }, - "/depop/search-sellers": { + "/fever/filters": { "get": { "consumes": [ "application/json" ], - "description": "Finds Depop users/sellers by name or username. A matched result's username can be passed directly to GET /depop/shop/{username} for that seller's full shop. Public data sourced from Depop's own user-search API.", - "operationId": "depop-search-sellers", + "description": "Returns the complete filter value space Fever publishes for one city: the date windows (Today, Tomorrow, This weekend, Next week, Later) and every category id with its label and page URL. This is the discovery endpoint for fever-plans' whatplanfilter_id parameter, so a caller never has to hard-code a category set, and the set is per city (19 categories for NYC, 17 for LAX). The date window ids are Fever's own shortcuts for display; fever-plans takes epoch-second bounds rather than these ids.", + "operationId": "fever-filters", "parameters": [ { - "description": "Seller name or username to search for", + "description": "Fever city code, e.g. NYC", "in": "query", - "name": "query", + "name": "city_code", "required": true, "type": "string", - "x-example": "vintage nike" + "x-example": "NYC" } ], "produces": [ @@ -338615,7 +411430,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/depop.searchSellersResponseDoc" + "$ref": "#/definitions/fever.filtersResponseDoc" } }, "400": { @@ -338624,8 +411439,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -338642,27 +411463,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Depop sellers by name", + "summary": "List one city's complete Fever category and date filter value space", "tags": [ - "Depop" + "Fever" ] } }, - "/depop/search/facets": { + "/fever/plan": { "get": { "consumes": [ "application/json" ], - "description": "Returns result-count breakdowns per department/category/subcategory for a search query, via Depop's dedicated aggregates API -- a distinct upstream call from search itself, not embedded in its response. Public data sourced from Depop's own search-aggregates API.", - "operationId": "depop-search-facets", + "description": "Returns one Fever (feverup.com) plan: name, description, canonical page, city, category labels, advertised from-price, every place it happens at with coordinates, gallery images, the first and last session dates, translation languages and the plan's own session flags. This reads Fever's JSON plan route rather than the Angular page that carries the same record, so one plan costs a few kilobytes instead of a few hundred. An unknown plan id is a 404. The price is the advertised starting price and is volatile; it is never a final or purchasable price, and no ticket, session-availability or checkout data is returned.", + "operationId": "fever-plan", "parameters": [ { - "description": "Free-text keyword search", + "description": "Numeric Fever plan id from fever-plans", "in": "query", - "name": "query", + "name": "plan_id", "required": true, - "type": "string", - "x-example": "bandage dress" + "type": "integer", + "x-example": 431445 } ], "produces": [ @@ -338672,7 +411493,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/depop.searchFacetsResponseDoc" + "$ref": "#/definitions/fever.planResponseDoc" } }, "400": { @@ -338681,8 +411502,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -338699,96 +411526,106 @@ "ApiKeyAuth": [] } ], - "summary": "Depop search result-count breakdowns", + "summary": "Get one Fever plan's detail record", "tags": [ - "Depop" + "Fever" ] } }, - "/depop/shop/{username}": { + "/fever/plans": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Depop seller's public shop: profile (rating, sold count, followers, bio) plus current listings, with optional price, condition, colour, category, subcategory, gender, discount, and sort filters. Public data sourced from Depop's own shop pages.", - "operationId": "depop-shop", + "description": "Returns one page of Fever's (feverup.com) plan catalogue for a city, optionally filtered by category and session-date window and ordered by one of Fever's own sort values. This is the category and date browse Fever's own website refuses (its listing API is a 403), served from the public search endpoint the site and its app already use. page_size is capped at 100: the upstream silently truncates larger values to 100 rows, so anything above 100 is rejected. date_start and date_end are epoch SECONDS; date_start is required whenever a window is given, and a millisecond value is rejected because the upstream silently answers an empty window for one. Category ids come from fever-filters. Latitudes/longitudes default to the city's own centre from fever-top-cities; a city outside that list needs an explicit pair. count is the search index's own match count and is not the website's total_plans, so the two can differ materially.", + "operationId": "fever-plans", "parameters": [ { - "description": "Depop seller username, e.g. from a shop page URL segment", - "in": "path", - "name": "username", + "description": "Fever city code, e.g. NYC", + "in": "query", + "name": "city_code", "required": true, "type": "string", - "x-example": "villafanashop" + "x-example": "NYC" }, { - "description": "Minimum listing price in USD", + "description": "Free-text query; empty means no keyword filter", "in": "query", - "name": "price_min", - "type": "number", - "x-example": 15 + "name": "query", + "type": "string", + "x-example": "jazz" }, { - "description": "Maximum listing price in USD", + "description": "Response language for the search index, defaults to en", "in": "query", - "name": "price_max", - "type": "number", - "x-example": 50 + "name": "locale", + "type": "string", + "x-example": "en" }, { - "description": "Comma-separated condition filter: brand_new, used_like_new, used_excellent, used_good, used_fair", + "description": "Latitude of the search centre; supply with longitude. Defaults to the city's own centre", "in": "query", - "name": "condition", - "type": "string", - "x-example": "used_excellent,used_good" + "name": "latitude", + "type": "number", + "x-example": 40.736009 }, { - "description": "Comma-separated colour filter: black, grey, white, brown, tan, cream, yellow, red, burgundy, orange, pink, purple, blue, navy, green, khaki, multi", + "description": "Longitude of the search centre; supply with latitude", "in": "query", - "name": "colours", - "type": "string", - "x-example": "black,white" + "name": "longitude", + "type": "number", + "x-example": -73.984188 }, { - "description": "Restrict results to discounted listings", + "description": "1-based page number, defaults to 1", "in": "query", - "name": "on_sale", - "type": "boolean" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Sort order: relevance, price_low_to_high, price_high_to_low, recently_listed", + "description": "Plans per page, defaults to 20, maximum 100", "in": "query", - "name": "sort", - "type": "string", - "x-example": "price_low_to_high" + "name": "page_size", + "type": "integer", + "x-example": 20 }, { - "description": "Depop category slug: tops, bottoms, dresses, coats-jackets, jumpsuit-and-playsuit, suits, footwear, accessories, nightwear, underwear, swim-beach-wear, fancy-dress, sleepsuits-and-bodysuits, bundles, beauty, face-masks, home, tech-accessories, film, art, books-and-magazine, music, party-supplies, sports-equipment-accesories, toys, umbrella. See GET /depop/categories for a machine-readable enumeration with names and subcategories.", + "description": "Fever category id from fever-filters, e.g. 1040", "in": "query", - "name": "category", + "name": "whatplanfilter_id", "type": "string", - "x-example": "tops" + "x-example": "1040" }, { - "description": "Comma-separated Depop subcategory slug(s), scoped within category. See GET /depop/categories for the full list per category.", + "description": "Earliest session date in epoch SECONDS; required when date_end is set", "in": "query", - "name": "subcategory", - "type": "string", - "x-example": "tshirts" + "name": "date_start", + "type": "integer", + "x-example": 1794096000 }, { - "description": "Department filter: female, male", + "description": "Latest session date in epoch SECONDS; only with date_start", "in": "query", - "name": "gender", - "type": "string", - "x-example": "male" + "name": "date_end", + "type": "integer", + "x-example": 1796688000 }, { - "description": "Comma-separated Depop size composite ids (format {size_set_id}.{id}, e.g. \\", + "description": "Result ordering", + "enum": [ + "popularity", + "price", + "rating", + "closest_session", + "distance", + "random", + "id" + ], "in": "query", - "name": "sizes", + "name": "sort_type", "type": "string", - "x-example": "54.4" + "x-example": "popularity" } ], "produces": [ @@ -338798,7 +411635,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/depop.shopResponseDoc" + "$ref": "#/definitions/fever.plansResponseDoc" } }, "400": { @@ -338807,14 +411644,49 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List and filter Fever plans for a city", + "tags": [ + "Fever" + ] + } + }, + "/fever/top-cities": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Fever's (feverup.com) fixed list of 25 top cities, in the upstream's own order, with each city's id, code, name, country, region, slug, language, centre coordinates and thumbnail. This is the only enumerable city surface on the platform: it is a top list and not the complete city set, so use fever-cities to find a city outside it. It takes no parameters and has no paging.", + "operationId": "fever-top-cities", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/fever.topCitiesResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -338831,19 +411703,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Depop seller's shop", + "summary": "List Fever's fixed top-city seed", "tags": [ - "Depop" + "Fever" ] } }, - "/depop/sizes": { + "/fiveguys/directory": { "get": { "consumes": [ "application/json" ], - "description": "Returns Depop's full, multi-region size taxonomy -- every composite id usable with /depop/search's and /depop/shop/{username}'s sizes filter. Public data sourced from Depop's own size-filter API.", - "operationId": "depop-sizes", + "description": "Returns one level of Five Guys' US restaurant directory: the 50 states at the root, one state's cities when path is a state (e.g. `il`), and that city's restaurants when path is a city (e.g. `il/chicago`). Each child carries the path to pass back as this endpoint's `path`, and a `location_count` of how many restaurants sit under it. At the deepest level children are restaurants themselves (`is_location` true) -- pass their path to GET /fiveguys/store for the full profile. Use this to enumerate or browse locations; use GET /fiveguys/search or /fiveguys/nearby to find them by query or coordinate instead.", + "operationId": "fiveguys-directory", + "parameters": [ + { + "description": "Optional. Directory path from a previous response's children[].path, e.g. \\", + "in": "query", + "name": "path", + "type": "string", + "x-example": "il" + } + ], "produces": [ "application/json" ], @@ -338851,11 +411732,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/depop.sizesResponseDoc" + "$ref": "#/definitions/fiveguys.directoryResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -338872,27 +411765,57 @@ "ApiKeyAuth": [] } ], - "summary": "Get Depop's size taxonomy", + "summary": "Browse the Five Guys restaurant directory by state and city", "tags": [ - "Depop" + "FiveGuys" ] } }, - "/depop/suggest": { + "/fiveguys/faq": { "get": { "consumes": [ "application/json" ], - "description": "Returns Depop's own search-box autocomplete suggestions for a partial query, including the category a suggestion maps to when relevant. Public data sourced from Depop's own search-suggestions API.", - "operationId": "depop-suggest", + "description": "Returns one page of Five Guys' published customer FAQ corpus -- 142 entries across 17 categories (Menu, Nutritional and Allergens, Ordering, Gift Card, Careers, Franchise, App, Company, The Crew, and others), filterable by category id and free text, in English (default) or Spanish via `lang`. Get valid category values from GET /fiveguys/faq-categories using the same `lang` -- category ids are language-specific.", + "operationId": "fiveguys-faq", "parameters": [ { - "description": "Partial search query to autocomplete", + "description": "Optional. Free-text filter over question and answer text.", "in": "query", - "name": "query", - "required": true, + "name": "search", "type": "string", - "x-example": "red corte" + "x-example": "gluten" + }, + { + "description": "Optional. Comma-separated faq_category term ids, from GET /fiveguys/faq-categories.", + "in": "query", + "name": "category", + "type": "string", + "x-example": "21" + }, + { + "description": "Optional. 1-based page number, default 1.", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Optional. Entries per page, 1-100, default 20.", + "in": "query", + "name": "per_page", + "type": "integer", + "x-example": 20 + }, + { + "description": "Optional. Content language: en (default) or es.", + "enum": [ + "en", + "es" + ], + "in": "query", + "name": "lang", + "type": "string" } ], "produces": [ @@ -338902,7 +411825,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/depop.suggestResponseDoc" + "$ref": "#/definitions/fiveguys.faqResponseDoc" } }, "400": { @@ -338911,8 +411834,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -338929,28 +411852,29 @@ "ApiKeyAuth": [] } ], - "summary": "Depop search-box autocomplete", + "summary": "List Five Guys' published customer FAQ", "tags": [ - "Depop" + "FiveGuys" ] } }, - "/developer/search": { - "post": { + "/fiveguys/faq-categories": { + "get": { "consumes": [ "application/json" ], - "description": "Searches indexed sources only; this operation never starts ingestion or contacts upstream sources. The current ready source is `go:docs` and it covers only the 18 selected verified pages documented by `developer-sources`. Search matches Unicode-aware lexical terms and punctuation-bearing identifiers such as `context.Context`; passages retain byte/line locators into the indexed document. `types` accepts `doc`, `readme`, `issue`, and `pull_request`, but the current source supports only `doc`; unsupported values return 400. The `version` filter is not supported by the current unversioned source and returns 400. Continuation bodies contain only `cursor` and optional `limit`; their pages come from the frozen snapshot and do not repeat the search.", - "operationId": "developer-search", + "description": "Returns every published Five Guys FAQ category with its id, name, slug, and entry count -- use an id here as GET /fiveguys/faq's category filter. Available in English (default) and Spanish via `lang`; ids differ between languages, so pass the same `lang` to both endpoints.", + "operationId": "fiveguys-faq-categories", "parameters": [ { - "description": "Search query or cursor-only continuation", - "in": "body", - "name": "request", - "required": true, - "schema": { - "$ref": "#/definitions/developerretrieval.DeveloperSearchRequest" - } + "description": "Optional. Content language: en (default) or es. Category ids differ per language -- feed ids from a given language back into GET /fiveguys/faq with the same lang.", + "enum": [ + "en", + "es" + ], + "in": "query", + "name": "lang", + "type": "string" } ], "produces": [ @@ -338958,37 +411882,19 @@ ], "responses": { "200": { - "description": "Ranked developer results and source coverage", - "schema": { - "$ref": "#/definitions/developerretrieval.developerSearchResponseDoc" - } - }, - "400": { - "description": "Invalid query, unsupported source/filter, or cursor", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "401": { - "description": "Authentication required", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "410": { - "description": "Frozen result cursor expired", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/fiveguys.faqCategoriesResponseDoc" } }, - "500": { - "description": "Snapshot or response configuration error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Source registry or search index unavailable", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -338999,25 +411905,35 @@ "ApiKeyAuth": [] } ], - "summary": "Search indexed developer documentation", + "summary": "List Five Guys FAQ categories", "tags": [ - "Retrieval" + "FiveGuys" ] } }, - "/developer/sources": { + "/fiveguys/menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns the registered developer source catalog and each source's exact supported operations, filters, artifact types, and index state. The current catalog contains only `go:docs`, a selected set of 18 parser-verified Go documentation/specification pages. A source is `not_indexed` until a complete generation is promoted. The catalog does not accept a cursor; `limit` may be 1–100.", - "operationId": "developer-sources", + "description": "Returns Five Guys' public menu content: every category (Burgers, Fries, Shakes, Hot Dogs, Sandwiches, Drinks, Toppings) -- each with its own short description and cover image, plus its items' name, description, calories, and image -- or one category's items when category is given. Five Guys publishes no per-item price on this surface -- pricing is store-scoped and lives only behind its ordering flow, which this endpoint does not cover. Available in English (default) and Spanish via `lang`. Calories are shown exactly as published: a single value for most items, or a range (e.g. fries' \"530-1100\") for build-your-own items whose calories vary by size and toppings. Some items (drink categories, a few build-your-own items) publish no calorie figure at all; their calories field is omitted rather than estimated.", + "operationId": "fiveguys-menu", "parameters": [ { - "description": "Maximum sources to return (1–100; defaults to 100)", + "description": "Optional. One category slug to return only that category's items. Omit to return the full menu across every category. With lang=en (the default) one of: burgers, fries, shakes, dogs, sandwiches, drinks, toppings. With lang=es the slugs differ -- read them from a lang=es response's categories[].slug.", "in": "query", - "name": "limit", - "type": "integer" + "name": "category", + "type": "string" + }, + { + "description": "Optional. Content language: en (default) or es.", + "enum": [ + "en", + "es" + ], + "in": "query", + "name": "lang", + "type": "string" } ], "produces": [ @@ -339025,25 +411941,31 @@ ], "responses": { "200": { - "description": "Developer source catalog", + "description": "OK", "schema": { - "$ref": "#/definitions/developerretrieval.developerSourcesResponseDoc" + "$ref": "#/definitions/fiveguys.menuResponseDoc" } }, "400": { - "description": "Invalid catalog query", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "401": { - "description": "Authentication required", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Source catalog or index unavailable", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -339054,28 +411976,56 @@ "ApiKeyAuth": [] } ], - "summary": "Discover indexed developer sources", + "summary": "List Five Guys menu categories and items", "tags": [ - "Retrieval" + "FiveGuys" ] } }, - "/diagnostics/antibot-check": { - "post": { + "/fiveguys/nearby": { + "get": { "consumes": [ "application/json" ], - "description": "Probes a URL across escalating transports (direct HTTP → browser-impersonation → headless/stealth browsers) and returns an empirical scraping-difficulty assessment for that exact URL: a 0–10 `difficulty_score` and `difficulty_band` (`easy`, `medium`, `hard`, `very_hard`, `blocked`, `unknown`), whether it is `scrapeable`, the detected anti-bot `protections` (Cloudflare, DataDome, Akamai, PerimeterX, Kasada, Imperva, AWS WAF and more — each with a `kind` and `confidence`), the lightest transport that worked, and a `recommended_profile`. Difficulty is per-URL, not per-site — a homepage may be open while deep pages are bot-managed. Intended for authorized public-data scraping planning.", - "operationId": "antibot-check", + "description": "Returns Five Guys restaurants within a radius of a latitude/longitude. Each result carries a full profile: a short area/plaza label distinguishing it from other locations, address, phone, weekly in-store hours plus a separate delivery-hours schedule when published, price tier, restaurant-amenity labels (e.g. Takeout, Dine In, Curbside), pickup/delivery service labels, order/delivery/menu URLs, a Google Place id, and distance in miles/kilometers from the given coordinate. `total_results` reports how many restaurants fall inside the radius overall, usually more than one page; use `offset` to page. A coordinate with no Five Guys nearby returns an empty list rather than an error.", + "operationId": "fiveguys-nearby", "parameters": [ { - "description": "Target URL (and optional fast flag)", - "in": "body", - "name": "request", + "description": "Search center latitude", + "in": "query", + "name": "latitude", "required": true, - "schema": { - "$ref": "#/definitions/diagnostics.AntibotCheckRequest" - } + "type": "number", + "x-example": 41.881953 + }, + { + "description": "Search center longitude", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -87.632362 + }, + { + "description": "Search radius in miles, 1-100 (default 25)", + "in": "query", + "name": "radius", + "type": "integer", + "x-example": 25 + }, + { + "description": "Maximum restaurants to return, 1-50 (default 10)", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + }, + { + "description": "Result offset for paging through total_results (default 0)", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -339085,23 +412035,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/diagnostics.antibotCheckResponseDoc" + "$ref": "#/definitions/fiveguys.nearbyResponseDoc" } }, "400": { - "description": "Invalid or missing URL", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Probe failed (transport/browser error or blocked target)", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -339112,29 +412062,19 @@ "ApiKeyAuth": [] } ], - "summary": "Anti-bot check — website scraping difficulty", + "summary": "Find Five Guys restaurants near a coordinate", "tags": [ - "Web" + "FiveGuys" ] } }, - "/discogs/artist/{id}": { + "/fiveguys/nutrition": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Discogs artist profile: real name, bio, links, name variations, aliases, and group memberships.", - "operationId": "discogs-artist", - "parameters": [ - { - "description": "Discogs artist id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "1289" - } - ], + "description": "Resolves the live location of Five Guys' current dated nutrition & allergen guide PDF (calories, full macro nutrition and allergen data per item) directly from fiveguys.com -- the guide's own file path changes when Five Guys republishes it (observed monthly), so this endpoint always discovers the current link rather than returning a fixed one. Returns the PDF's direct download URL plus best-effort size and last-modified metadata read from the PDF's own response headers. This endpoint returns metadata and a link to the guide, not its table parsed into structured fields -- pair it with GET /fiveguys/menu for structured per-item calories.", + "operationId": "fiveguys-nutrition", "produces": [ "application/json" ], @@ -339142,23 +412082,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/discogs.artistResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/fiveguys.nutritionResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -339175,39 +412103,63 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Discogs artist profile", + "summary": "Get the current Five Guys nutrition & allergen PDF guide's location", "tags": [ - "Discogs" + "FiveGuys" ] } }, - "/discogs/artist/{id}/releases": { + "/fiveguys/ordering-locations": { "get": { "consumes": [ "application/json" ], - "description": "Returns the releases and masters credited to a Discogs artist, identified by the required `id`. Paged with `page` (default 1) and `per_page` (default 50, max 100). Each entry has its `id`, `type` (`release` or `master`), title, artist, role, format, label, year, thumbnail, and want and collection counts, alongside the total item count and page count.", - "operationId": "discogs-artist-releases", + "description": "Returns Five Guys restaurants near a latitude/longitude as Five Guys' own ordering platform publishes them, with commerce detail no other endpoint in this family carries: per-store delivery fee, delivery and pickup order minimums, whether the store is currently accepting orders at all, the handoff modes an order placed now could actually use (delivery, pickup, curbside, dine-in, drive-thru, dispatch), group-order/coupon/loyalty support, how many days ahead an order may be scheduled, and the store's own order URL. Set `include_hours` to also return each store's dated business and delivery calendars -- concrete dated windows rather than the recurring weekly schedule the locator endpoints publish, so they reflect holiday and special hours a weekly schedule cannot express. This is a different upstream from GET /fiveguys/nearby, which returns the marketing/locator record: the two describe the same restaurants but do not share ids, and this one carries a per-store name (\"Five Guys Austin Arbor\") where the locator publishes the generic brand name. Use each result's `id` with GET /fiveguys/ordering-menu for that store's priced menu. A coordinate with no Five Guys nearby returns an empty list rather than an error.", + "operationId": "fiveguys-ordering-locations", "parameters": [ { - "description": "Discogs artist id", - "in": "path", - "name": "id", + "description": "Search center latitude", + "in": "query", + "name": "latitude", "required": true, - "type": "string", - "x-example": "1289" + "type": "number", + "x-example": 30.267153 }, { - "description": "1-based page number, default 1", + "description": "Search center longitude", "in": "query", - "name": "page", - "type": "integer" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -97.743061 }, { - "description": "Results per page, default 50, max 100", + "description": "Search radius in miles, 1-50 (default 20)", "in": "query", - "name": "per_page", - "type": "integer" + "name": "radius", + "type": "integer", + "x-example": 20 + }, + { + "description": "Maximum restaurants to return, 1-50 (default 10)", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + }, + { + "description": "Include each store's dated business and delivery calendars", + "in": "query", + "name": "include_hours", + "type": "boolean", + "x-example": true + }, + { + "description": "Days of calendar to return from today, 1-30 (default 7). Only meaningful with include_hours.", + "in": "query", + "name": "days", + "type": "integer", + "x-example": 7 } ], "produces": [ @@ -339217,7 +412169,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/discogs.artistReleasesResponseDoc" + "$ref": "#/definitions/fiveguys.orderingLocationsResponseDoc" } }, "400": { @@ -339226,14 +412178,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -339250,27 +412196,27 @@ "ApiKeyAuth": [] } ], - "summary": "List a Discogs artist's releases", + "summary": "Find Five Guys restaurants near a coordinate with ordering details", "tags": [ - "Discogs" + "FiveGuys" ] } }, - "/discogs/label/{id}": { + "/fiveguys/ordering-menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns the profile of a Discogs label by its required label `id`: name, profile text, contact info, website URLs, images, data quality rating, and Discogs page URI. The parent label and the list of sub-labels are included, and the parent label appears only when the label has one.", - "operationId": "discogs-label", + "description": "Returns one restaurant's full menu exactly as Five Guys' own ordering platform sells it, including real per-item prices -- the one field no other endpoint in this family can surface (GET /fiveguys/menu is fiveguys.com's own marketing content and carries no price at all). Categories and items are returned with name, description, price, calories (a single value or a real range, e.g. a fountain drink sized at checkout), an image, and whether the platform currently has the item available. id is the ordering platform's own restaurant id from GET /fiveguys/ordering-locations' locations[].id -- it is not a Yext entity id and does not correspond to any id from GET /fiveguys/search, /fiveguys/nearby, /fiveguys/directory, or /fiveguys/store.", + "operationId": "fiveguys-ordering-menu", "parameters": [ { - "description": "Discogs label id", - "in": "path", + "description": "The ordering platform's restaurant id, from GET /fiveguys/ordering-locations' locations[].id", + "in": "query", "name": "id", "required": true, "type": "string", - "x-example": "895" + "x-example": "23841" } ], "produces": [ @@ -339280,7 +412226,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/discogs.labelResponseDoc" + "$ref": "#/definitions/fiveguys.orderingMenuResponseDoc" } }, "400": { @@ -339295,8 +412241,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -339313,39 +412259,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Discogs label profile", + "summary": "Get one Five Guys store's priced menu from the ordering platform", "tags": [ - "Discogs" + "FiveGuys" ] } }, - "/discogs/label/{id}/releases": { + "/fiveguys/search": { "get": { "consumes": [ "application/json" ], - "description": "Lists the releases on a Discogs label, identified by the required label `id`. Paged with `page` (default 1) and `per_page` (default 50, max 100). Each entry has its release `id`, title, artist, format, catalogue number (`catno`), status, year and thumbnail, and the response reports the total item count across all pages.", - "operationId": "discogs-label-releases", + "description": "Returns Five Guys restaurants matching a free-text location query -- a city, a zip/postal code, a street address, or a landmark -- the same way restaurants.fiveguys.com's own locator search box works. Yext's own query understanding geocodes the text server-side, so no separate geocoding call is needed. Each result carries a full profile: a short area/plaza label distinguishing it from other locations, address, phone, weekly in-store hours plus a separate delivery-hours schedule when published, price tier, restaurant-amenity labels (e.g. Takeout, Dine In, Curbside), pickup/delivery service labels, order/delivery/menu URLs, a Google Place id, and distance in miles/kilometers from the resolved query location. `total_results` reports how many restaurants matched overall, usually more than one page; use `offset` to page. A query that resolves to nowhere Five Guys operates returns an empty list rather than an error.", + "operationId": "fiveguys-search", "parameters": [ { - "description": "Discogs label id", - "in": "path", - "name": "id", + "description": "Free-text location: a city, a zip/postal code, a street address, or a landmark", + "in": "query", + "name": "query", "required": true, "type": "string", - "x-example": "895" + "x-example": "Chicago, IL" }, { - "description": "1-based page number, default 1", + "description": "Maximum restaurants to return, 1-50 (default 10)", "in": "query", - "name": "page", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 10 }, { - "description": "Results per page, default 50, max 100", + "description": "Result offset for paging through total_results (default 0)", "in": "query", - "name": "per_page", - "type": "integer" + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -339355,7 +412303,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/discogs.labelReleasesResponseDoc" + "$ref": "#/definitions/fiveguys.searchResponseDoc" } }, "400": { @@ -339364,14 +412312,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -339388,27 +412330,33 @@ "ApiKeyAuth": [] } ], - "summary": "List a Discogs label's releases", + "summary": "Search Five Guys restaurants by free-text location", "tags": [ - "Discogs" + "FiveGuys" ] } }, - "/discogs/master/{id}": { + "/fiveguys/store": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Discogs master release: the version-agnostic grouping of a release across pressings/reissues (artists, tracklist, genres/styles, videos, images, marketplace stats).", - "operationId": "discogs-master", + "description": "Returns one Five Guys restaurant's full published profile by its locator slug -- address, phone, weekly in-store hours, separate delivery hours, coordinate, Google Place id, restaurant-amenity labels, and order/delivery/menu URLs. Get a path from GET /fiveguys/search or /fiveguys/nearby's `locations[].path`, or from GET /fiveguys/directory's `children[].path` where `is_location` is true. It also returns three detail-only extras that search and nearby results do not carry: `description` (this restaurant's own blurb, templated but genuinely per-location), `photos` (its published gallery images, omitted for the many locations that publish none), and `breadcrumbs` (the directory trail above it, each entry's `path` feeding straight back into GET /fiveguys/directory). Two fields available on search and nearby results are not published on this surface and are omitted here: `price_range` and `pickup_and_delivery_services`. A `profile` block, populated best-effort from a second Yext key, adds further per-restaurant detail no other field in this family carries: `google_attributes` (structured amenity flags, richer than `services`), `review_page_url`/`review_invite_url`, `featured_message`/`featured_message_url`, `google_cid`/`facebook_store_id`, `routable_latitude`/`routable_longitude` (a driving destination, distinct from the display coordinate), `payment_options`, `meals_served`, `services`, `permanently_closed`, `directory_listing_url`, `franchisee_group` (the operator of this specific restaurant -- a corporate code or a franchisee's own company name), `facebook_vanity_url` (this location's own Facebook handle), and `faq` (this restaurant's own generated question set, distinct from the national corpus GET /fiveguys/faq serves). Passing a state or city path returns 404 -- use GET /fiveguys/directory for those.", + "operationId": "fiveguys-store", "parameters": [ { - "description": "Discogs master release id", - "in": "path", + "description": "The restaurant's locator slug, e.g. \\", + "in": "query", + "name": "path", + "type": "string", + "x-example": "703-s-seely-ave" + }, + { + "description": "The restaurant's entity id, e.g. \\", + "in": "query", "name": "id", - "required": true, "type": "string", - "x-example": "26647" + "x-example": "4060" } ], "produces": [ @@ -339418,7 +412366,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/discogs.masterResponseDoc" + "$ref": "#/definitions/fiveguys.storeResponseDoc" } }, "400": { @@ -339433,8 +412381,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -339451,27 +412399,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Discogs master release", + "summary": "Get one Five Guys restaurant by its locator path", "tags": [ - "Discogs" + "FiveGuys" ] } }, - "/discogs/release/{id}": { + "/fiverr/gig/{username}/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Discogs release: artists, labels, formats, tracklist, credits, identifiers, videos, images, and community want/have/rating.", - "operationId": "discogs-release", + "description": "Returns a Fiverr gig detail page: title, description, category, pricing packages (basic/standard/premium tiers with price and delivery time), rating, review count, orders in queue, tags, gallery images, and a seller summary (level, rating, response time, languages). Seller level uses the same values on the search, seller and gig endpoints: level_one_seller, level_two_seller, top_rated_seller, or new_seller.", + "operationId": "fiverr-gig", "parameters": [ { - "description": "Discogs release id", + "description": "Fiverr seller username, e.g. from a search result's seller_username field", "in": "path", - "name": "id", + "name": "username", "required": true, "type": "string", - "x-example": "249504" + "x-example": "inshape_studio" + }, + { + "description": "Fiverr gig URL slug, the trailing path segment after the username in a gig URL", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "do-modern-minimalist-logo-design-for-your-business" } ], "produces": [ @@ -339481,7 +412437,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/discogs.releaseResponseDoc" + "$ref": "#/definitions/fiverr.gigResponseDoc" } }, "400": { @@ -339514,51 +412470,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Discogs release", + "summary": "Get Fiverr gig detail", "tags": [ - "Discogs" + "Fiverr" ] } }, - "/discogs/search": { + "/fiverr/search": { "get": { "consumes": [ "application/json" ], - "description": "Searches the Discogs database for releases, masters, artists and labels, optionally filtered to one `type`, with `page` and `per_page` (max 100). Release and master results carry country, year, formats, labels, genres, styles, catalog number and barcodes; artist and label results carry id, title and thumbnail.", - "operationId": "discogs-search", + "description": "Searches Fiverr's public gig listings by free-text keyword, returning gig summaries (title, seller username, seller level, rating, review count, starting price, category, thumbnail image). Seller level uses the same values on the search, seller and gig endpoints: level_one_seller, level_two_seller, top_rated_seller, or new_seller.", + "operationId": "fiverr-search", "parameters": [ { - "description": "Search query", + "description": "Free-text gig search keyword", "in": "query", "name": "q", "required": true, "type": "string", - "x-example": "Daft Punk Discovery" - }, - { - "description": "Result type filter", - "enum": [ - "release", - "master", - "artist", - "label" - ], - "in": "query", - "name": "type", - "type": "string" + "x-example": "logo design" }, { - "description": "1-based page number, default 1", + "description": "1-based result page. Defaults to 1.", "in": "query", "name": "page", - "type": "integer" - }, - { - "description": "Results per page, default 50, max 100", - "in": "query", - "name": "per_page", - "type": "integer" + "type": "integer", + "x-example": 2 } ], "produces": [ @@ -339568,7 +412507,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/discogs.searchResponseDoc" + "$ref": "#/definitions/fiverr.searchResponseDoc" } }, "400": { @@ -339595,27 +412534,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Discogs database", + "summary": "Search Fiverr gigs", "tags": [ - "Discogs" + "Fiverr" ] } }, - "/dominos/coupons": { + "/fiverr/seller/{username}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Domino's US store's available coupons and deals: standalone coupons (code, name, description, price, valid service methods, and any alternate promo/marketing codes that resolve to the same coupon), plus tiered volume-discount coupon groups (e.g. \"order 7+ pizzas, get 15% off\"). Reads the same structured menu response as GET /dominos/menu, so it costs no additional upstream request. A store can genuinely have zero active coupons -- an empty list is not an error. Store ids come from GET /dominos/store-locator. An unknown store id returns 404.", - "operationId": "dominos-coupons", + "description": "Returns a Fiverr seller profile: display name, one-liner title, description, country, seller level, verification status, hourly rate, spoken languages, join date, and the seller's gig ids. Seller level uses the same values on the search, seller and gig endpoints: level_one_seller, level_two_seller, top_rated_seller, or new_seller.", + "operationId": "fiverr-seller", "parameters": [ { - "description": "Domino's store id, from /dominos/store-locator", - "in": "query", - "name": "store_id", + "description": "Fiverr seller username, e.g. from a search result's seller_username field", + "in": "path", + "name": "username", "required": true, "type": "string", - "x-example": "4336" + "x-example": "inshape_studio" } ], "produces": [ @@ -339625,7 +412564,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dominos.couponsResponseDoc" + "$ref": "#/definitions/fiverr.sellerResponseDoc" } }, "400": { @@ -339640,8 +412579,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -339658,27 +412597,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Domino's store's available coupons and deals", + "summary": "Get Fiverr seller profile", "tags": [ - "Dominos" + "Fiverr" ] } }, - "/dominos/customization": { + "/flashscore/calendar": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Domino's US store's full build-your-own customization catalog, grouped by product category (Domino's own names, e.g. \"BuildYourOwnDomino\" for pizza, \"GSalad\" for garden salads): every selectable size, crust/flavor style, topping, and side, each with its own code, name, description, dietary/placement flags (e.g. Meat, Vege, Sauce, WholeOnly), and any other attributes Domino's attaches (e.g. ExclusiveGroup for mutually-exclusive options). Also returns cooking instructions (bake level, cut style, seasoning), grouped. Store ids come from GET /dominos/store-locator. An unknown store id returns 404.", - "operationId": "dominos-customization", + "description": "Returns public tournament calendar entries for the current season, sorted by start date, with date ranges, UTC start and end times, host country, winners and winner paths when decided, and competition paths.", + "operationId": "flashscore-calendar", "parameters": [ { - "description": "Domino's store id, from /dominos/store-locator", + "description": "Calendar category from flashscore-calendar-categories", + "enum": [ + "tennis-atp", + "tennis-wta", + "golf-pga", + "golf-dp-world", + "badminton-bwf", + "motorsport-f1" + ], "in": "query", - "name": "store_id", + "name": "category", "required": true, "type": "string", - "x-example": "4336" + "x-example": "tennis-atp" } ], "produces": [ @@ -339688,7 +412635,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dominos.customizationResponseDoc" + "$ref": "#/definitions/flashscore.calendarResponseDoc" } }, "400": { @@ -339703,12 +412650,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -339721,29 +412662,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Domino's store's full build-your-own customization catalog", + "summary": "Flashscore season calendar", "tags": [ - "Dominos" + "Flashscore" ] } }, - "/dominos/menu": { + "/flashscore/calendar-categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Domino's US store's full menu, as a flat list of categories (each with a stable code/name path, e.g. \"Pizza > Specialty Pizzas\") and their items. Each item carries its code, name, description, and product type, plus every purchasable variant (size/style) with its own code, name, and price. Store ids come from GET /dominos/store-locator. An unknown store id returns 404.", - "operationId": "dominos-menu", - "parameters": [ - { - "description": "Domino's store id, from /dominos/store-locator", - "in": "query", - "name": "store_id", - "required": true, - "type": "string", - "x-example": "4336" - } - ], + "description": "Lists the Flashscore season calendar sections currently available, covering ATP, WTA, golf, badminton and Formula 1. Each category has its `key`, name, sport and canonical path. Use a `key` with the Flashscore calendar endpoint. It takes no parameters.", + "operationId": "flashscore-calendar-categories", "produces": [ "application/json" ], @@ -339751,25 +412682,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dominos.menuResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/flashscore.calendarCategoriesResponseDoc" } }, "503": { @@ -339784,60 +412697,78 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Domino's store's full structured menu", + "summary": "Flashscore season calendar categories", "tags": [ - "Dominos" + "Flashscore" ] } }, - "/dominos/nutrition": { + "/flashscore/competitions": { "get": { "consumes": [ "application/json" ], - "description": "Returns calorie information (Domino's own \"Cal-O-Meter\" data) for one product at one store. For a named/fixed menu item (a specialty pizza, bread, wing, pasta, sandwich, salad, drink, or dessert -- any item code from GET /dominos/menu), give only store_id and product_code; the item's default configuration is used. For a build-your-own pizza, also give size, base, and any topping codes -- calories are computed for that exact configuration, matching Domino's own live calculator. size and base must be given together; toppings requires both. Reads live, not from a cache -- each call creates and discards one anonymous cart server-side, so it is slower than this family's other endpoints. An unknown product code, or an invalid size/base/topping combination, returns an error.", - "operationId": "dominos-nutrition", + "description": "Discovers competitions present in a selected sport's score feed, including the provider competition id, label, region, canonical path, and event count. This is the active feed-date inventory, not an archive of inactive or historical seasons.", + "operationId": "flashscore-competitions", "parameters": [ { - "description": "Domino's store id, from /dominos/store-locator", - "in": "query", - "name": "store_id", - "required": true, - "type": "string", - "x-example": "4336" - }, - { - "description": "A product code from /dominos/menu's items[].code -- a named/fixed item, or a build-your-own base (e.g. S_PIZZA)", + "description": "Sport key", + "enum": [ + "football", + "tennis", + "basketball", + "hockey", + "golf", + "formula-1", + "baseball", + "snooker", + "american-football", + "aussie-rules", + "badminton", + "bandy", + "beach-soccer", + "beach-volleyball", + "boxing", + "cricket", + "cycling", + "darts", + "esports", + "field-hockey", + "floorball", + "futsal", + "handball", + "horse-racing", + "kabaddi", + "mma", + "motorsport", + "netball", + "pesapallo", + "rugby-league", + "rugby-union", + "table-tennis", + "volleyball", + "water-polo", + "winter-sports", + "moto-racing", + "ski-jumping", + "alpine-skiing", + "cross-country-skiing", + "biathlon" + ], "in": "query", - "name": "product_code", + "name": "sport", "required": true, "type": "string", - "x-example": "S_PIZZA" - }, - { - "description": "Build-your-own size code, from /dominos/menu's variants. Required together with base.", - "in": "query", - "name": "size", - "type": "string", - "x-example": "14" - }, - { - "description": "Build-your-own crust code. Required together with size.", - "in": "query", - "name": "base", - "type": "string", - "x-example": "HANDTOSS" + "x-example": "football" }, { - "collectionFormat": "csv", - "description": "Repeatable. Topping codes to add to a build-your-own pizza. Only used together with size+base.", + "description": "Days from today; -7 to 7; defaults to 0", "in": "query", - "items": { - "type": "string" - }, - "name": "toppings", - "type": "array", - "x-example": "P" + "maximum": 7, + "minimum": -7, + "name": "day_offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -339847,7 +412778,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dominos.nutritionResponseDoc" + "$ref": "#/definitions/flashscore.competitionsResponseDoc" } }, "400": { @@ -339856,18 +412787,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -339880,27 +412799,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get calorie information for one Domino's product configuration", + "summary": "Flashscore competitions by sport and date", "tags": [ - "Dominos" + "Flashscore" ] } }, - "/dominos/store": { + "/flashscore/entity-news": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Domino's US store's full profile -- richer than /dominos/store-locator's per-store summary. Includes the store's complete weekly hours (general hours and each service method's own hours, Monday-first, with every open/close window per day), Domino's own free-text hours summary per service method, per-service-method estimated wait windows, open/online status, per-service-method order availability (delivery, carryout, drive-up carryout, dine-in), contactless option status, and delivery/carryout order minimums. Store ids come from GET /dominos/store-locator. An unknown store id returns 404.", - "operationId": "dominos-store", + "description": "Returns the article ids of Flashscore's own news layout for one entity: the featured article plus the 25 most recent ones, grouped in the sections Flashscore shows. The layout has no pagination. Resolve the ids with flashscore-news-article (metadata) or flashscore-news-article-body (full text). Teams and players share one layout type. A tournament is a tournament template id (the competition id in event lists); a sport is one of the SPORT entity ids listed by flashscore-news-categories. An id with no news layout returns not found.", + "operationId": "flashscore-entity-news", "parameters": [ { - "description": "Domino's store id, from /dominos/store-locator", + "description": "Entity type", + "enum": [ + "team", + "player", + "tournament", + "sport" + ], "in": "query", - "name": "store_id", + "name": "type", "required": true, "type": "string", - "x-example": "4336" + "x-example": "player" + }, + { + "description": "Eight-character entity id: team or player id, tournament template id, or a SPORT entity id from flashscore-news-categories", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "UmV9iQmE" } ], "produces": [ @@ -339910,7 +412843,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dominos.storeDetailResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/flashscore.EntityNewsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -339925,12 +412870,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -339943,54 +412882,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Domino's store's full profile record", + "summary": "Flashscore news for a team, player, tournament or sport", "tags": [ - "Dominos" + "Flashscore" ] } }, - "/dominos/store-locator": { + "/flashscore/match-box-score": { "get": { "consumes": [ "application/json" ], - "description": "Returns Domino's US stores that can serve a location: store id, address with coordinates, phone, open/online status, per-service-method availability (delivery, carryout, drive-up carryout), contactless option status, Domino's own hours summary per service method, and estimated wait windows. At least one of postal_code, or both city and state, is required; address is an optional street line that improves precision when combined with city/state. The response's query field echoes how Domino's own address resolver actually interpreted the input, including its granularity (e.g. resolved to a specific street range vs. only a city/region).", - "operationId": "dominos-store-locator", + "description": "Returns the per-player box score of a basketball, hockey or baseball match: one table per team (hockey adds a goalkeeper table and baseball a pitcher table) with the statistic columns the provider defines for that sport, and each player's value per column, or null where Flashscore shows a dash. Other sports and matches without box-score coverage return not found.", + "operationId": "flashscore-match-box-score", "parameters": [ { - "description": "Optional street address line", - "in": "query", - "name": "address", - "type": "string", - "x-example": "1600 Pennsylvania Ave NW" - }, - { - "description": "City name (required together with state if postal_code is not given)", - "in": "query", - "name": "city", - "type": "string", - "x-example": "Washington" - }, - { - "description": "Two-letter US state code (required together with city if postal_code is not given)", - "in": "query", - "name": "state", - "type": "string", - "x-example": "DC" - }, - { - "description": "US ZIP code (can be used alone instead of city/state)", - "in": "query", - "name": "postal_code", - "type": "string", - "x-example": "20500" - }, - { - "description": "One of: Delivery, Carryout. Default Delivery", + "description": "Eight-character Flashscore match id", "in": "query", - "name": "service_method", + "name": "id", + "required": true, "type": "string", - "x-example": "Delivery" + "x-example": "KzoOQu6j" } ], "produces": [ @@ -340000,7 +412912,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dominos.storeLocatorResponseDoc" + "$ref": "#/definitions/flashscore.matchBoxScoreResponseDoc" } }, "400": { @@ -340009,8 +412921,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -340027,35 +412939,27 @@ "ApiKeyAuth": [] } ], - "summary": "Find Domino's stores near an address, city/state, or ZIP code", + "summary": "Flashscore basketball, hockey and baseball box score", "tags": [ - "Dominos" + "Flashscore" ] } }, - "/doordash/explore": { + "/flashscore/match-commentary": { "get": { "consumes": [ "application/json" ], - "description": "Returns DoorDash's location-based \"nearby stores\" browse feed from the Android mobile guest experience. Unlike search or autocomplete, no search query is required. No DoorDash account or caller-supplied token is required.", - "operationId": "doordash-explore", + "description": "Returns the play-by-play text Flashscore publishes for a match, newest first. Each entry can include the displayed minute, a detailed clock and an event type. Pre-match comments may have no time. Matches without text coverage return not found.", + "operationId": "flashscore-match-commentary", "parameters": [ { - "description": "Consumer latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 37.7825 - }, - { - "description": "Consumer longitude", + "description": "Eight-character Flashscore match id", "in": "query", - "name": "longitude", + "name": "id", "required": true, - "type": "number", - "x-example": -122.461 + "type": "string", + "x-example": "Qq7RGRDF" } ], "produces": [ @@ -340065,7 +412969,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/doordash.exploreResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/flashscore.MatchCommentaryResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -340074,8 +412990,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -340092,49 +413008,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get DoorDash nearby stores explore feed", + "summary": "Flashscore match text commentary", "tags": [ - "DoorDash" + "Flashscore" ] } }, - "/doordash/feed": { + "/flashscore/match-darts": { "get": { "consumes": [ "application/json" ], - "description": "Returns nearby stores for a location from the Android mobile guest experience: store ID, name, cover image and tags, plus rating, price range, delivery fee and ETA when the upstream feed surface reports them. Those metric fields are omitted rather than estimated when it does not, so treat their absence as \"not reported\". No DoorDash account or caller-supplied token is required.", - "operationId": "doordash-feed", + "description": "Returns a darts match leg by leg: who started and won each leg, the leg score, every visit with the points scored, the score remaining and 180 or 140-plus highlights, and the score the winner finished from, plus the statistics comparison (three-dart average, 180s, 140+ and 100+ visits, checkout percentage, highest checkout). Set-play matches add the set of each leg, the leg score within the set and the statistics of every set; a live match includes the leg being played. Streamed events whose scoring is not tracked and non-darts matches return not found.", + "operationId": "flashscore-match-darts", "parameters": [ { - "description": "Consumer latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 37.7825 - }, - { - "description": "Consumer longitude", + "description": "Eight-character Flashscore match id", "in": "query", - "name": "longitude", + "name": "id", "required": true, - "type": "number", - "x-example": -122.461 - }, - { - "description": "Number of stores to skip", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 - }, - { - "description": "Max stores to return", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "type": "string", + "x-example": "KMrRR6R1" } ], "produces": [ @@ -340144,7 +413038,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/doordash.feedResponseDoc" + "$ref": "#/definitions/flashscore.matchDartsResponseDoc" } }, "400": { @@ -340153,8 +413047,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -340171,75 +413065,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get DoorDash store discovery feed", + "summary": "Flashscore darts throw-by-throw and statistics", "tags": [ - "DoorDash" + "Flashscore" ] } }, - "/doordash/search": { + "/flashscore/match-h2h": { "get": { "consumes": [ "application/json" ], - "description": "Searches the Android mobile guest catalog for pickup restaurants near a location and supports optional result filters. No DoorDash account or caller-supplied token is required.", - "operationId": "doordash-search", + "description": "Returns Flashscore's public head-to-head and recent-results feed for a match id copied from a Flashscore match URL. The raw upstream feed is preserved as text because its format is not JSON.", + "operationId": "flashscore-match-h2h", "parameters": [ { - "description": "Restaurant, cuisine, or dish query", - "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "pizza" - }, - { - "description": "Consumer latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 37.7825 - }, - { - "description": "Consumer longitude", + "description": "Eight-character Flashscore match id", "in": "query", - "name": "longitude", + "name": "id", "required": true, - "type": "number", - "x-example": -122.461 - }, - { - "description": "Exact cuisine or store tag, case-insensitive", - "in": "query", - "name": "tag", "type": "string", - "x-example": "Pizza" - }, - { - "description": "Keep only DashPass-eligible stores", - "in": "query", - "name": "dashPassOnly", - "type": "boolean" - }, - { - "description": "Keep only stores currently available ASAP", - "in": "query", - "name": "asapOnly", - "type": "boolean" - }, - { - "description": "Keep only pickup-enabled stores", - "in": "query", - "name": "pickupOnly", - "type": "boolean" - }, - { - "description": "Maximum displayed distance in miles, from 0 to 100", - "in": "query", - "name": "maxDistanceMiles", - "type": "number", - "x-example": 5 + "x-example": "xtmHKGT0" } ], "produces": [ @@ -340249,7 +413095,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/doordash.searchResponseDoc" + "$ref": "#/definitions/flashscore.responseDoc" } }, "400": { @@ -340258,8 +413104,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -340276,43 +413122,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search DoorDash pickup restaurants", + "summary": "Flashscore match head-to-head and recent results", "tags": [ - "DoorDash" + "Flashscore" ] } }, - "/doordash/search/autocomplete": { + "/flashscore/match-highlights": { "get": { "consumes": [ "application/json" ], - "description": "Returns pickup restaurant matches from the Android mobile guest search experience near a location. No DoorDash account or caller-supplied token is required.", - "operationId": "doordash-search-autocomplete", + "description": "Returns public highlight identifiers, metadata, and video links as the provider's raw delimited text. Video content is not fetched or included. Matches without available highlights return not found.", + "operationId": "flashscore-match-highlights", "parameters": [ { - "description": "Partial restaurant, cuisine, or dish query", + "description": "Eight-character Flashscore match id", "in": "query", - "name": "query", + "name": "id", "required": true, "type": "string", - "x-example": "piz" - }, - { - "description": "Consumer latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 37.7825 - }, - { - "description": "Consumer longitude", - "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -122.461 + "x-example": "j52jHsN8" } ], "produces": [ @@ -340322,7 +413152,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/doordash.searchResponseDoc" + "$ref": "#/definitions/flashscore.responseDoc" } }, "400": { @@ -340331,8 +413161,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -340349,35 +413179,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get DoorDash pickup search suggestions", + "summary": "Flashscore match highlights", "tags": [ - "DoorDash" + "Flashscore" ] } }, - "/doordash/search/filters": { + "/flashscore/match-incidents": { "get": { "consumes": [ "application/json" ], - "description": "Returns the cuisines and filter values supported by the Android mobile guest search experience for a location. No DoorDash account or caller-supplied token is required.", - "operationId": "doordash-search-filters", + "description": "Fetch the structured Flashscore incident timeline by match ID with period, displayed clock, team side and ordered actions. An incident can group a goal and assist or both players in a substitution. Valid summaries without incidents return an empty list. Use flashscore_match_commentary for editorial text.", + "operationId": "flashscore-match-incidents", "parameters": [ { - "description": "Consumer latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 37.7825 - }, - { - "description": "Consumer longitude", + "description": "Eight-character Flashscore match ID", "in": "query", - "name": "longitude", + "name": "id", "required": true, - "type": "number", - "x-example": -122.461 + "type": "string", + "x-example": "MF2Xj8on" } ], "produces": [ @@ -340387,7 +413209,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/doordash.searchFiltersResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/flashscore.MatchIncidentsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -340396,8 +413230,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -340414,78 +413248,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get DoorDash search filter options", + "summary": "Flashscore structured match incidents", "tags": [ - "DoorDash" + "Flashscore" ] } }, - "/doordash/search/items": { + "/flashscore/match-info": { "get": { "consumes": [ "application/json" ], - "description": "Searches menu items across nearby merchants from the Android mobile guest experience. Nearby candidate stores are selected first, then their menus are read and every item whose name or description matches the query is returned with its parent store. At most five proximity-ranked stores are inspected per request, and a store whose menu cannot be read is skipped, so results are best-effort across that candidate set. An empty result array means no candidate store menu matched, not that no nearby merchant sells the item. No DoorDash account or caller-supplied token is required.", - "operationId": "doordash-search-items", + "description": "Returns the public match information feed, including available venue, city, capacity, and broadcast listings, as the provider's raw delimited text.", + "operationId": "flashscore-match-info", "parameters": [ { - "description": "Dish or item search text", + "description": "Eight-character Flashscore match id", "in": "query", - "name": "query", + "name": "id", "required": true, "type": "string", - "x-example": "pizza" - }, - { - "description": "Cuisine or store tag used to narrow candidate stores", - "in": "query", - "name": "tag", - "type": "string", - "x-example": "Pizza" - }, - { - "description": "Keep only DashPass-eligible stores", - "in": "query", - "name": "dashPassOnly", - "type": "boolean", - "x-example": false - }, - { - "description": "Keep only stores currently available ASAP", - "in": "query", - "name": "asapOnly", - "type": "boolean", - "x-example": false - }, - { - "description": "Keep only pickup-enabled stores", - "in": "query", - "name": "pickupOnly", - "type": "boolean", - "x-example": false - }, - { - "description": "Maximum displayed distance in miles", - "in": "query", - "name": "maxDistanceMiles", - "type": "number", - "x-example": 5 - }, - { - "description": "Consumer latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 37.7825 - }, - { - "description": "Consumer longitude", - "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -122.461 + "x-example": "xtmHKGT0" } ], "produces": [ @@ -340495,7 +413278,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/doordash.searchItemsResponseDoc" + "$ref": "#/definitions/flashscore.responseDoc" } }, "400": { @@ -340504,8 +413287,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -340522,43 +413305,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search DoorDash dishes and items", + "summary": "Flashscore match venue and broadcast information", "tags": [ - "DoorDash" + "Flashscore" ] } }, - "/doordash/store/{store_id}": { + "/flashscore/match-lineups": { "get": { "consumes": [ "application/json" ], - "description": "Returns public metadata for a DoorDash store by its numeric `store_id`, as seen from the delivery location given by the required `latitude` and `longitude`. The response has the name, URL, images, average rating, rating count, and menu section and item counts. Address, coordinates and price range appear only when DoorDash supplies them. Missing or out-of-range coordinates return `400`.", - "operationId": "doordash-store", + "description": "Returns each side's confirmed formation, starters and substitutes with positions, in-match ratings and incidents such as cards and substitutions, plus coaches and the substitutions made. Lineups usually appear shortly before kickoff for covered matches; a match with no lineup players on either side returns not found. Use flashscore-match-predicted-lineups for expected lineups before they are confirmed.", + "operationId": "flashscore-match-lineups", "parameters": [ { - "description": "Numeric DoorDash store ID", - "in": "path", - "name": "store_id", - "required": true, - "type": "string", - "x-example": "26282644" - }, - { - "description": "Delivery latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 37.7825 - }, - { - "description": "Delivery longitude", + "description": "Eight-character Flashscore match id", "in": "query", - "name": "longitude", + "name": "id", "required": true, - "type": "number", - "x-example": -122.461 + "type": "string", + "x-example": "j52jHsN8" } ], "produces": [ @@ -340568,7 +413335,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/doordash.storeResponseDoc" + "$ref": "#/definitions/flashscore.matchLineupsResponseDoc" } }, "400": { @@ -340583,12 +413350,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -340601,43 +413362,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a DoorDash store", + "summary": "Flashscore match lineups and formations", "tags": [ - "DoorDash" + "Flashscore" ] } }, - "/doordash/store/{store_id}/fulfillment": { + "/flashscore/match-missing-players": { "get": { "consumes": [ "application/json" ], - "description": "Returns store fulfillment methods, delivery fee info, and scheduling details from the Android mobile guest experience. No DoorDash account or caller-supplied token is required.", - "operationId": "doordash-store-fulfillment", + "description": "Returns the players listed as missing and as doubtful for each side of a match, with the stated reason. Empty lists are a valid answer: nobody is reported missing, or the match has no coverage. Expected return dates are not provided by the source.", + "operationId": "flashscore-match-missing-players", "parameters": [ { - "description": "Numeric DoorDash store ID", - "in": "path", - "name": "store_id", - "required": true, - "type": "string", - "x-example": "26282644" - }, - { - "description": "Delivery latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 37.7825 - }, - { - "description": "Delivery longitude", + "description": "Eight-character Flashscore match id", "in": "query", - "name": "longitude", + "name": "id", "required": true, - "type": "number", - "x-example": -122.461 + "type": "string", + "x-example": "f75igXFG" } ], "produces": [ @@ -340647,7 +413392,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/doordash.storeFulfillmentResponseDoc" + "$ref": "#/definitions/flashscore.matchMissingPlayersResponseDoc" } }, "400": { @@ -340662,12 +413407,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -340680,43 +413419,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get DoorDash store fulfillment details", + "summary": "Flashscore missing and doubtful players", "tags": [ - "DoorDash" + "Flashscore" ] } }, - "/doordash/store/{store_id}/info": { + "/flashscore/match-momentum": { "get": { "consumes": [ "application/json" ], - "description": "Returns a lightweight store info card (map coordinates, address, phone number) from the Android mobile guest experience. This is a distinct upstream contract from the full store endpoint and reliably includes address and coordinates. No DoorDash account or caller-supplied token is required.", - "operationId": "doordash-store-info", + "description": "Returns the per-minute momentum series of a football match (values from -1 to 1, positive favouring the home side) with the half and stoppage-time marker of each minute, and the key events plotted on it (goals, own goals, penalties, red cards) with their team and player. Matches without momentum coverage and non-football matches return not found.", + "operationId": "flashscore-match-momentum", "parameters": [ { - "description": "Numeric DoorDash store ID", - "in": "path", - "name": "store_id", - "required": true, - "type": "string", - "x-example": "26282644" - }, - { - "description": "Delivery latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 37.7825 - }, - { - "description": "Delivery longitude", + "description": "Eight-character Flashscore football match id", "in": "query", - "name": "longitude", + "name": "id", "required": true, - "type": "number", - "x-example": -122.461 + "type": "string", + "x-example": "j52jHsN8" } ], "produces": [ @@ -340726,7 +413449,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/doordash.storeInfoResponseDoc" + "$ref": "#/definitions/flashscore.matchMomentumResponseDoc" } }, "400": { @@ -340741,12 +413464,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -340759,51 +413476,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get DoorDash store contact info", + "summary": "Flashscore football match momentum", "tags": [ - "DoorDash" + "Flashscore" ] } }, - "/doordash/store/{store_id}/item/{item_id}": { + "/flashscore/match-news": { "get": { "consumes": [ "application/json" ], - "description": "Returns details for a specific menu item from the Android mobile guest experience. The item is matched by name, case-insensitively, against the store menu: DoorDash's anonymous menu surface exposes no stable per-item identifier, so use a name returned by the store menu or item search. A name that is not on the menu returns 404; no substitute item is returned. No DoorDash account or caller-supplied token is required.", - "operationId": "doordash-store-item", + "description": "Returns article references from the public news layout associated with a match. Article content is not included; use the article id with flashscore-news-article for public metadata.", + "operationId": "flashscore-match-news", "parameters": [ { - "description": "Numeric DoorDash store ID", - "in": "path", - "name": "store_id", - "required": true, - "type": "string", - "x-example": "26282644" - }, - { - "description": "Menu item name, matched case-insensitively", - "in": "path", - "name": "item_id", - "required": true, - "type": "string", - "x-example": "Fluffy Pancakes" - }, - { - "description": "Delivery latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 37.7825 - }, - { - "description": "Delivery longitude", + "description": "Eight-character Flashscore match id", "in": "query", - "name": "longitude", + "name": "id", "required": true, - "type": "number", - "x-example": -122.461 + "type": "string", + "x-example": "xtmHKGT0" } ], "produces": [ @@ -340813,7 +413506,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/doordash.storeItemResponseDoc" + "$ref": "#/definitions/flashscore.matchNewsResponseDoc" } }, "400": { @@ -340822,18 +413515,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -340846,43 +413527,269 @@ "ApiKeyAuth": [] } ], - "summary": "Get DoorDash menu item details", + "summary": "Flashscore match news references", "tags": [ - "DoorDash" + "Flashscore" ] } }, - "/doordash/store/{store_id}/menu": { + "/flashscore/match-odds": { "get": { "consumes": [ "application/json" ], - "description": "Returns the location-aware DoorDash mobile menu, grouped into sections with item names, descriptions, and displayed prices. No DoorDash account or caller-supplied token is required.", - "operationId": "doordash-store-menu", + "description": "Returns bookmaker odds for a match in one viewer market, grouped by betting type and scope with every bookmaker's priced outcomes, opening odds, handicap or total lines, and a selection label. Bookmakers and prices depend on the market, so pick geo (and subdivision for US or CA) from flashscore-odds-geos. A market with no licensed bookmakers returns empty lists. Promotional bonus text is not included.", + "operationId": "flashscore-match-odds", "parameters": [ { - "description": "Numeric DoorDash store ID", - "in": "path", - "name": "store_id", + "description": "Eight-character Flashscore match id", + "in": "query", + "name": "id", "required": true, "type": "string", - "x-example": "26282644" + "x-example": "p0aFxkkn" }, { - "description": "Delivery latitude", + "description": "Viewer market country code from flashscore-odds-geos; defaults to GB", + "enum": [ + "AE", + "AL", + "AM", + "AO", + "AR", + "AT", + "AU", + "AZ", + "BA", + "BD", + "BE", + "BG", + "BO", + "BR", + "BY", + "CA", + "CH", + "CI", + "CL", + "CM", + "CN", + "CO", + "CR", + "CY", + "CZ", + "DE", + "DK", + "DO", + "DZ", + "EC", + "EE", + "EG", + "ES", + "ET", + "FI", + "FR", + "GB", + "GE", + "GH", + "GR", + "GT", + "HK", + "HN", + "HR", + "HU", + "ID", + "IE", + "IL", + "IN", + "IQ", + "IR", + "IS", + "IT", + "JO", + "JP", + "KE", + "KG", + "KH", + "KR", + "KW", + "KZ", + "LA", + "LB", + "LK", + "LT", + "LU", + "LV", + "LY", + "MA", + "MD", + "ME", + "MK", + "MM", + "MN", + "MT", + "MX", + "MY", + "NG", + "NI", + "NL", + "NO", + "NP", + "NZ", + "PA", + "PE", + "PH", + "PK", + "PL", + "PT", + "PY", + "QA", + "RO", + "RS", + "RU", + "SA", + "SD", + "SE", + "SG", + "SI", + "SK", + "SN", + "SV", + "TH", + "TN", + "TR", + "TW", + "TZ", + "UA", + "UG", + "US", + "UY", + "UZ", + "VE", + "VN", + "XK", + "ZA", + "ZM", + "ZW" + ], "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 37.7825 + "name": "geo", + "type": "string", + "x-example": "GB" }, { - "description": "Delivery longitude", + "description": "US state (with geo US) or Canadian province (with geo CA) code from flashscore-odds-geos; rejected with any other geo", + "enum": [ + "AB", + "AK", + "AL", + "AR", + "AZ", + "BC", + "CA", + "CO", + "CT", + "DC", + "DE", + "FL", + "GA", + "HI", + "IA", + "ID", + "IL", + "IN", + "KS", + "KY", + "LA", + "MA", + "MB", + "MD", + "ME", + "MI", + "MN", + "MO", + "MS", + "MT", + "NB", + "NC", + "ND", + "NE", + "NH", + "NJ", + "NL", + "NM", + "NS", + "NT", + "NU", + "NV", + "NY", + "OH", + "OK", + "ON", + "OR", + "PA", + "PE", + "QC", + "RI", + "SC", + "SD", + "SK", + "TN", + "TX", + "UT", + "VA", + "VT", + "WA", + "WI", + "WV", + "WY", + "YT" + ], "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -122.461 + "name": "subdivision", + "type": "string", + "x-example": "NJ" + }, + { + "description": "Optional filter to one betting type", + "enum": [ + "HOME_DRAW_AWAY", + "HOME_AWAY", + "DRAW_NO_BET", + "DOUBLE_CHANCE", + "ASIAN_HANDICAP", + "EUROPEAN_HANDICAP", + "OVER_UNDER", + "BOTH_TEAMS_TO_SCORE", + "CORRECT_SCORE", + "HALF_FULL_TIME", + "ODD_OR_EVEN", + "TO_QUALIFY", + "NEXT_GOAL", + "TOP_POSITION_MERGED", + "TO_WIN_AND_TOP_POSITION", + "WIN_EACH_WAY" + ], + "in": "query", + "name": "betting_type", + "type": "string", + "x-example": "HOME_DRAW_AWAY" + }, + { + "description": "Optional filter to one scope", + "enum": [ + "FULL_TIME", + "FULL_TIME_OVER_TIME", + "FIRST_HALF", + "SECOND_HALF", + "FIRST_PERIOD", + "FIRST_QUARTER", + "FIRST_SET", + "SECOND_SET" + ], + "in": "query", + "name": "scope", + "type": "string", + "x-example": "FULL_TIME" } ], "produces": [ @@ -340892,7 +413799,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/doordash.menuResponseDoc" + "$ref": "#/definitions/flashscore.matchOddsResponseDoc" } }, "400": { @@ -340907,12 +413814,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -340925,43 +413826,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get a DoorDash store menu", + "summary": "Flashscore match bookmaker odds comparison", "tags": [ - "DoorDash" + "Flashscore" ] } }, - "/doordash/store/{store_id}/reviews": { + "/flashscore/match-player-stats": { "get": { "consumes": [ "application/json" ], - "description": "Returns store ratings and customer reviews from the Android mobile guest experience for a location. No DoorDash account or caller-supplied token is required.", - "operationId": "doordash-store-reviews", + "description": "Returns per-player statistics for a football match with player-statistics coverage: the Flashscore rating, highlight badges and every statistic of the player-statistics tabs (shots, expected goals, passes, duels, goalkeeping and more) with display text, unrounded value and rank, plus the statistic and group definitions. The full response is large; narrow it with group, or with player_id for a single player. Other sports and matches without coverage return not found.", + "operationId": "flashscore-match-player-stats", "parameters": [ { - "description": "Numeric DoorDash store ID", - "in": "path", - "name": "store_id", + "description": "Eight-character Flashscore football match id", + "in": "query", + "name": "id", "required": true, "type": "string", - "x-example": "26282644" + "x-example": "j52jHsN8" }, { - "description": "Delivery latitude", + "description": "Eight-character Flashscore player id from this match; returns only that player", "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 37.7825 + "name": "player_id", + "type": "string", + "x-example": "trpxfbO3" }, { - "description": "Delivery longitude", + "description": "Optional statistic group", + "enum": [ + "top_stats", + "shots", + "attack", + "passes", + "defense", + "goalkeeping", + "general" + ], "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -122.461 + "name": "group", + "type": "string", + "x-example": "shots" } ], "produces": [ @@ -340971,7 +413879,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/doordash.storeReviewsResponseDoc" + "$ref": "#/definitions/flashscore.matchPlayerStatsResponseDoc" } }, "400": { @@ -340986,12 +413894,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -341004,19 +413906,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get DoorDash store reviews", + "summary": "Flashscore football player match statistics and ratings", "tags": [ - "DoorDash" + "Flashscore" ] } }, - "/draftkings/casino/directory": { + "/flashscore/match-point-by-point": { "get": { "consumes": [ "application/json" ], - "description": "Returns the public Online Slots and How to Play Slots links from the DraftKings Casino homepage. Fetch the guide sections with draftkings_casino_slots_guide. It does not fetch game catalogs, promotions, winners, jackpots, or account data.", - "operationId": "draftkings-casino-directory", + "description": "Returns the scoring history of a tennis, volleyball, badminton, handball or basketball match, grouped by set, quarter or half. Tennis lists each game with its server, winner, the running score inside the game and break, set and match point flags, plus tiebreak points; the other sports list every rally or basket with the leading side's margin. When a tennis match is live, current_game holds the game or tiebreak in progress. Other sports and matches without coverage return not found.", + "operationId": "flashscore-match-point-by-point", + "parameters": [ + { + "description": "Eight-character Flashscore match id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "8v653Rz9" + } + ], "produces": [ "application/json" ], @@ -341024,52 +413936,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/casino.casinoDirectoryResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/flashscore.matchPointByPointResponseDoc" } }, - "503": { - "description": "Service Unavailable", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "DraftKings Casino slots directory", - "tags": [ - "DraftKings Casino" - ] - } - }, - "/draftkings/casino/slots-guide": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the public slots guide's basic rules and responsible-play sections. Account setup, payments, promotions, and strategy sections are omitted. This is informational page content, not gambling advice.", - "operationId": "draftkings-casino-slots-guide", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/casino.casinoSlotsGuideResponseDoc" - } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -341086,19 +413963,29 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Casino slots guide", + "summary": "Flashscore point-by-point scoring history", "tags": [ - "DraftKings Casino" + "Flashscore" ] } }, - "/draftkings/casino/slots/categories": { + "/flashscore/match-predicted-lineups": { "get": { "consumes": [ "application/json" ], - "description": "Lists public slot-category sections from the logged-out Casino configuration. It returns category labels and upstream IDs only; it does not return game listings, winners, jackpots, promotions, personal data, or jurisdiction eligibility.", - "operationId": "draftkings-casino-slots-categories", + "description": "Returns each side's predicted formation, predicted starters with position tags and player details, lineup groups, and coaches. Predictions usually appear shortly before kickoff for covered matches; a match with no predicted players on either side returns not found.", + "operationId": "flashscore-match-predicted-lineups", + "parameters": [ + { + "description": "Eight-character Flashscore match id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "f75igXFG" + } + ], "produces": [ "application/json" ], @@ -341106,11 +413993,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/casino.casinoSlotsCategoriesResponseDoc" + "$ref": "#/definitions/flashscore.matchPredictedLineupsResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -341127,19 +414020,29 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Casino slot categories", + "summary": "Flashscore predicted lineups", "tags": [ - "DraftKings Casino" + "Flashscore" ] } }, - "/draftkings/casino/slots/cleopatra-guide": { + "/flashscore/match-prematch-scorers": { "get": { "consumes": [ "application/json" ], - "description": "Returns written gameplay sections from DraftKings Casino's public Cleopatra tutorial. The image-only payout table and promotional recommendation/CTA sections are omitted. This is informational page content, not wagering advice.", - "operationId": "draftkings-casino-cleopatra-guide", + "description": "Fetch the pre-match scorer panel for a Flashscore match by match ID, with each side’s leading scorers, competition and recent goal averages, and player goal counts from recent fixtures. A match without a scorer panel returns not found. Use flashscore_match_player_stats for individual performance during the selected match.", + "operationId": "flashscore-match-prematch-scorers", + "parameters": [ + { + "description": "Eight-character Flashscore match ID", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "j52jHsN8" + } + ], "produces": [ "application/json" ], @@ -341147,11 +414050,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/casino.casinoCleopatraGuideResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/flashscore.PrematchScorersResponse" + } + }, + "type": "object" + } + ] } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -341168,19 +414089,29 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Cleopatra slot guide", + "summary": "Flashscore pre-match top scorers", "tags": [ - "DraftKings Casino" + "Flashscore" ] } }, - "/draftkings/casino/slots/wheel-of-fortune-guide": { + "/flashscore/match-report": { "get": { "consumes": [ "application/json" ], - "description": "Returns written gameplay instructions from DraftKings Casino's public Wheel of Fortune: Triple Extreme Spin tutorial. The video embed, demo-mode call to action, and jurisdiction-specific footer are omitted. This is informational content, not wagering advice.", - "operationId": "draftkings-casino-wheel-of-fortune-guide", + "description": "Returns Flashscore's written match report: title, author, publication time, the full text as ordered paragraphs and inline images (with links to teams, players and competitions kept as structured data), and the credited photos. Only matches with editorial coverage have a report; every other match returns not found.", + "operationId": "flashscore-match-report", + "parameters": [ + { + "description": "Eight-character Flashscore match id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "j52jHsN8" + } + ], "produces": [ "application/json" ], @@ -341188,11 +414119,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/casino.casinoWheelOfFortuneGuideResponseDoc" + "$ref": "#/definitions/flashscore.matchReportResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -341209,19 +414146,52 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Wheel of Fortune slot guide", + "summary": "Flashscore editorial match report", "tags": [ - "DraftKings Casino" + "Flashscore" ] } }, - "/draftkings/dfs/glossary": { + "/flashscore/match-standings": { "get": { "consumes": [ "application/json" ], - "description": "Returns the public Daily Fantasy glossary terms and definitions from DraftKings' How to Play page. It does not access the contest lobby, player pool, or account data.", - "operationId": "draftkings-dfs-glossary", + "description": "Returns the match-linked table feed. Select overall, home/away, form, over/under, half-time/full-time, live table, or top scorers; the raw provider format is preserved. Defaults to overall.", + "operationId": "flashscore-match-standings", + "parameters": [ + { + "description": "Eight-character Flashscore match id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "xtmHKGT0" + }, + { + "description": "Standings/table view; defaults to overall", + "enum": [ + "overall", + "home", + "away", + "form_overall", + "overunder_overall", + "form_home", + "form_away", + "top_scorers", + "htft_overall", + "htft_home", + "htft_away", + "live_overall", + "overunder_home", + "overunder_away" + ], + "in": "query", + "name": "view", + "type": "string", + "x-example": "overall" + } + ], "produces": [ "application/json" ], @@ -341229,11 +414199,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dfs.dfsGlossaryResponseDoc" + "$ref": "#/definitions/flashscore.responseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -341250,19 +414226,29 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Daily Fantasy glossary", + "summary": "Flashscore match league standings", "tags": [ - "DraftKings Daily Fantasy Sports" + "Flashscore" ] } }, - "/draftkings/dfs/guide": { + "/flashscore/match-stats": { "get": { "consumes": [ "application/json" ], - "description": "Returns public contest-type summaries and sport landing-page links from DraftKings' Daily Fantasy Sports guide. Use draftkings_dfs_glossary for the page's public terminology definitions. This is a read-only guide directory; it does not access contests, lineups, player pools, or accounts. Availability and age limits vary by location.", - "operationId": "draftkings-dfs-guide", + "description": "Returns Flashscore's public delimited statistics feed for a match id copied from a Flashscore match URL. The raw upstream feed is preserved as text because its format is not JSON.", + "operationId": "flashscore-match-stats", + "parameters": [ + { + "description": "Eight-character Flashscore match id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "xtmHKGT0" + } + ], "produces": [ "application/json" ], @@ -341270,11 +414256,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dfs.dfsGuideResponseDoc" + "$ref": "#/definitions/flashscore.responseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -341291,19 +414283,156 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Daily Fantasy guide", + "summary": "Flashscore match statistics", "tags": [ - "DraftKings Daily Fantasy Sports" + "Flashscore" ] } }, - "/draftkings/dfs/nfl-best-ball/featured-contests": { + "/flashscore/match-tv": { "get": { "consumes": [ "application/json" ], - "description": "Lists the contest cards currently shown in DraftKings' public NFL Best Ball Featured Contests section, including displayed entry-fee and top-prize amounts and maximum entries. This is the landing-page selection, not the full contest lobby or a guarantee that a contest remains open. It does not follow tournament-detail links or return promotions, entries, lineups, or account data.", - "operationId": "draftkings-dfs-nfl-best-ball-featured-contests", + "description": "Returns the TV channels and streaming services listed for a match in one viewer market, with provider ids, names and website links. Listings are country specific, so pick geo from flashscore-odds-geos; an empty list means no broadcaster is listed for that market. Bookmaker promotions are not included.", + "operationId": "flashscore-match-tv", + "parameters": [ + { + "description": "Eight-character Flashscore match id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "p0aFxkkn" + }, + { + "description": "Viewer market country code from flashscore-odds-geos; defaults to GB", + "enum": [ + "AE", + "AL", + "AM", + "AO", + "AR", + "AT", + "AU", + "AZ", + "BA", + "BD", + "BE", + "BG", + "BO", + "BR", + "BY", + "CA", + "CH", + "CI", + "CL", + "CM", + "CN", + "CO", + "CR", + "CY", + "CZ", + "DE", + "DK", + "DO", + "DZ", + "EC", + "EE", + "EG", + "ES", + "ET", + "FI", + "FR", + "GB", + "GE", + "GH", + "GR", + "GT", + "HK", + "HN", + "HR", + "HU", + "ID", + "IE", + "IL", + "IN", + "IQ", + "IR", + "IS", + "IT", + "JO", + "JP", + "KE", + "KG", + "KH", + "KR", + "KW", + "KZ", + "LA", + "LB", + "LK", + "LT", + "LU", + "LV", + "LY", + "MA", + "MD", + "ME", + "MK", + "MM", + "MN", + "MT", + "MX", + "MY", + "NG", + "NI", + "NL", + "NO", + "NP", + "NZ", + "PA", + "PE", + "PH", + "PK", + "PL", + "PT", + "PY", + "QA", + "RO", + "RS", + "RU", + "SA", + "SD", + "SE", + "SG", + "SI", + "SK", + "SN", + "SV", + "TH", + "TN", + "TR", + "TW", + "TZ", + "UA", + "UG", + "US", + "UY", + "UZ", + "VE", + "VN", + "XK", + "ZA", + "ZM", + "ZW" + ], + "in": "query", + "name": "geo", + "type": "string", + "x-example": "GB" + } + ], "produces": [ "application/json" ], @@ -341311,11 +414440,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dfs.dfsNFLBestBallFeaturedContestsResponseDoc" + "$ref": "#/definitions/flashscore.matchTVResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -341332,19 +414467,28 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings NFL Best Ball featured contests", + "summary": "Flashscore match TV and streaming broadcasters", "tags": [ - "DraftKings Daily Fantasy Sports" + "Flashscore" ] } }, - "/draftkings/dfs/rules-and-scoring": { + "/flashscore/navigation": { "get": { "consumes": [ "application/json" ], - "description": "Returns the public Daily Fantasy rules and scoring overview plus visible sports and contest-style rules. Each rule includes upstream game-type IDs and sanitized scoring content. Hidden records, including XFL rules, are omitted; contests, players, prizes, lineups, and account data are not returned.", - "operationId": "draftkings-dfs-rules-and-scoring", + "description": "Returns the first-party category hierarchy and competition links for a public Flashscore sport or category page. Start with / or a sport path from flashscore-sports, then follow returned paths to enumerate region, country, category, and competition pages. Country/category lists reflect the current upstream navigation.", + "operationId": "flashscore-navigation", + "parameters": [ + { + "description": "Relative Flashscore navigation path; defaults to /. Use a path returned by flashscore-sports or flashscore-navigation.", + "in": "query", + "name": "path", + "type": "string", + "x-example": "/basketball/usa/" + } + ], "produces": [ "application/json" ], @@ -341352,11 +414496,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dfs.dfsRulesAndScoringResponseDoc" + "$ref": "#/definitions/flashscore.navigationResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -341373,19 +414523,79 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings DFS Rules & Scoring", + "summary": "Flashscore sport, category, country, and competition navigation", "tags": [ - "DraftKings Daily Fantasy Sports" + "Flashscore" ] } }, - "/draftkings/dfs/sports": { + "/flashscore/news": { "get": { "consumes": [ "application/json" ], - "description": "Returns the public US-DK sport catalog with exact sport codes and DraftKings' enabled/public-contests flags. The flags describe the source catalog, not caller-specific location eligibility. This endpoint does not access contests, lineups, prizes, or account data.", - "operationId": "draftkings-dfs-sports", + "description": "Returns article previews from a public Flashscore News section. Use flashscore-news-categories to discover valid category keys. Page numbers follow the site's Show more pagination; article body text is not included.", + "operationId": "flashscore-news", + "parameters": [ + { + "description": "News section key; defaults to all", + "enum": [ + "all", + "football", + "uefa-nations-league", + "tennis", + "features", + "premier-league", + "nfl", + "mlb", + "nba", + "nhl", + "formula-1", + "champions-league", + "europa-league", + "conference-league", + "darts", + "snooker", + "golf", + "road-cycling", + "laliga", + "bundesliga", + "serie-a", + "ligue-1", + "badminton", + "handball", + "hockey", + "basketball", + "cricket", + "rugby-union", + "athletics", + "baseball", + "fifa", + "rugby-league", + "motorsport", + "aussie-rules", + "flashscore-ratings", + "american-sports", + "african-football", + "combat-sports", + "winter-sports", + "transfer-news" + ], + "in": "query", + "name": "category", + "type": "string", + "x-example": "football" + }, + { + "description": "1-based page, 1 to 100; defaults to 1", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "page", + "type": "integer", + "x-example": 1 + } + ], "produces": [ "application/json" ], @@ -341393,11 +414603,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dfs.dfsSportsResponseDoc" + "$ref": "#/definitions/flashscore.newsListResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -341414,19 +414630,29 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Daily Fantasy sports catalog", + "summary": "Flashscore News listings by section", "tags": [ - "DraftKings Daily Fantasy Sports" + "Flashscore" ] } }, - "/draftkings/pick6/rules": { + "/flashscore/news-article": { "get": { "consumes": [ "application/json" ], - "description": "Returns public rule sections from the DraftKings Pick6 Rules and Scoring page plus child pages with verified detail routes. Unverified upstream links are omitted from the slug directory. It does not return player picks, projections, user entries, or location tokens.", - "operationId": "draftkings-pick6-rules", + "description": "Returns public article metadata and image credits for an article id from a Flashscore match news listing. Article body text is not included.", + "operationId": "flashscore-news-article", + "parameters": [ + { + "description": "Eight-character Flashscore article id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "GYDHQ2yR" + } + ], "produces": [ "application/json" ], @@ -341434,11 +414660,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pick6.pick6RulesResponseDoc" + "$ref": "#/definitions/flashscore.newsArticleResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -341455,47 +414687,27 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Pick6 rules", + "summary": "Flashscore news article metadata", "tags": [ - "DraftKings Pick6" + "Flashscore" ] } }, - "/draftkings/pick6/rules/{slug}": { + "/flashscore/news-article-body": { "get": { "consumes": [ "application/json" ], - "description": "Returns public scoring and rule sections for one supported Pick6 sport/format page. Discover supported slugs with draftkings_pick6_rules. This endpoint does not return player picks, projections, user entries, or location tokens.", - "operationId": "draftkings-pick6-rule-page", + "description": "Returns a Flashscore article with its headline, standfirst, author, source credit, tags, publication and edit times, cover image and the full body converted to plain-text paragraphs and headings with structured links to players, teams, matches and other articles. Embedded posts, images and info boxes are kept as placeholder blocks, not in the text. Live blogs work too. An unknown article id returns not found. For metadata and image variants only, use flashscore-news-article.", + "operationId": "flashscore-news-article-body", "parameters": [ { - "description": "Sport/format slug listed by draftkings_pick6_rules", - "enum": [ - "nfl", - "nba", - "nhl", - "pga-full-tournament", - "pga-single-round", - "mlb", - "wnba", - "nascar", - "cfb", - "cbb", - "soccer", - "valorant", - "miscellaneous", - "league-of-legends", - "counter-strike", - "call-of-duty", - "nfl-season-long", - "nba-season-long" - ], - "in": "path", - "name": "slug", + "description": "Eight-character Flashscore news article id from a news listing, flashscore-entity-news or flashscore-news-most-read", + "in": "query", + "name": "id", "required": true, "type": "string", - "x-example": "pga-single-round" + "x-example": "xlKVMkEO" } ], "produces": [ @@ -341505,7 +414717,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pick6.pick6RuleDetailResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/flashscore.NewsArticleBodyResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -341514,8 +414738,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -341532,19 +414756,19 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Pick6 sport-specific rules", + "summary": "Flashscore news article with full text", "tags": [ - "DraftKings Pick6" + "Flashscore" ] } }, - "/draftkings/pick6/sports": { + "/flashscore/news-categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns the dated public Help Center snapshot of Pick6 sports and contest formats, with exact sport codes and links published by the Help Center, plus the CFB/CBB jurisdiction restriction. Product-page reachability is not verified. This directory does not return picks or projections and does not imply availability in the caller's location.", - "operationId": "draftkings-pick6-sports", + "description": "Returns the exact currently usable public News section keys, names, and source paths from the live navigation inventory. Olympic Games is excluded because its linked page currently returns 404.", + "operationId": "flashscore-news-categories", "produces": [ "application/json" ], @@ -341552,19 +414776,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/pick6.pick6SportsResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/flashscore.newsCategoriesResponseDoc" } } }, @@ -341573,19 +414785,19 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Pick6 sport directory", + "summary": "Flashscore News categories", "tags": [ - "DraftKings Pick6" + "Flashscore" ] } }, - "/draftkings/predictions/availability": { + "/flashscore/news-most-read": { "get": { "consumes": [ "application/json" ], - "description": "Returns the 52 region/status mappings shown on DraftKings Predictions' public availability map. Allowed `status` values: `all_markets_available`, `financial_markets_only`, `sports_markets_unavailable`, `no_markets_available`. This source map is not a complete legal eligibility matrix and does not separately classify all territories or tribal land. It does not read caller location or trading/account state.", - "operationId": "draftkings-predictions-availability", + "description": "Returns Flashscore's site-wide list of the most-read news articles right now (about 20) in the provider's order, with title, slug, path, publication time and cover image. Use flashscore-news-article-body for an article's full text.", + "operationId": "flashscore-news-most-read", "produces": [ "application/json" ], @@ -341593,13 +414805,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/predictions.predictionsAvailabilityResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/flashscore.NewsMostReadResponse" + } + }, + "type": "object" + } + ] } }, "503": { @@ -341614,19 +414832,19 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Predictions availability map", + "summary": "Flashscore most-read news", "tags": [ - "DraftKings Predictions" + "Flashscore" ] } }, - "/draftkings/predictions/categories": { + "/flashscore/odds-geos": { "get": { "consumes": [ "application/json" ], - "description": "Returns the public category and league navigation from the DraftKings Predictions homepage. It excludes market quotes, trade-slip selections, accounts, balances, promotions, and location data. Market availability varies by location and time; this endpoint is a navigation directory, not trading advice.", - "operationId": "draftkings-predictions-categories", + "description": "Lists every country code accepted by flashscore-match-odds and flashscore-match-tv (with whether bookmakers were found for it when verified), the US states and Canadian provinces that change the bookmaker list, and every betting type, scope and handicap type that can appear in odds responses.", + "operationId": "flashscore-odds-geos", "produces": [ "application/json" ], @@ -341634,19 +414852,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/predictions.predictionsCategoriesResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/flashscore.oddsGeosResponseDoc" } } }, @@ -341655,19 +414861,36 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Predictions categories", + "summary": "Flashscore odds markets, subdivisions and odds enums", "tags": [ - "DraftKings Predictions" + "Flashscore" ] } }, - "/draftkings/predictions/rules": { + "/flashscore/player": { "get": { "consumes": [ "application/json" ], - "description": "Lists public rulebook and settlement-source links from the DraftKings Predictions Rules and Settlements page. It does not fetch market data, quotes, trades, user state, or location context.", - "operationId": "draftkings-predictions-rules", + "description": "Returns a player's public profile: name, country, birth date, sport, photo and current team, plus (for team-sport players) position, age, market value, contract expiry, extra details such as height, and career statistics by season, team and competition grouped into league, domestic cups, international cups and national team. Players of individual sports such as tennis return the profile (and ranking text) without a career table.", + "operationId": "flashscore-player", + "parameters": [ + { + "description": "Eight-character Flashscore player id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "UmV9iQmE" + }, + { + "description": "Optional player slug; must match the id when supplied", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "haaland-erling" + } + ], "produces": [ "application/json" ], @@ -341675,11 +414898,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/predictions.predictionsRulesResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/flashscore.PlayerResponse" + } + }, + "type": "object" + } + ] } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -341696,27 +414937,36 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Predictions rules and settlement sources", + "summary": "Flashscore player profile and career", "tags": [ - "DraftKings Predictions" + "Flashscore" ] } }, - "/draftkings/racing/race/{race_id}": { + "/flashscore/player-fixtures": { "get": { "consumes": [ "application/json" ], - "description": "Returns public race-card details for one race ID from DraftKings Racing, including entries, horse identifiers, morning-line and live odds, and finish positions when posted. It excludes pools, probable payouts, bet-form IDs, real-time WebSocket requests, favorites, and participant personal names.", - "operationId": "draftkings-racing-race-info", + "description": "Returns one page of an individual-sport player's upcoming matches (tennis, darts, golf, snooker and similar), soonest first, as structured events. Football, basketball and hockey players have no event list and return an empty list; use flashscore-team-fixtures for their team. Request successive pages until event_count is 0.", + "operationId": "flashscore-player-fixtures", "parameters": [ { - "description": "Race ID from the public Racing schedule", - "in": "path", - "name": "race_id", + "description": "Eight-character Flashscore player id", + "in": "query", + "name": "id", "required": true, + "type": "string", + "x-example": "0K04jl1m" + }, + { + "description": "1-based page from 1 to 300; defaults to 1", + "in": "query", + "maximum": 300, + "minimum": 1, + "name": "page", "type": "integer", - "x-example": 381519098 + "x-example": 1 } ], "produces": [ @@ -341726,7 +414976,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/racing.racingRaceInfoResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/flashscore.PlayerEventsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -341735,8 +414997,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -341753,19 +415015,36 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Racing race card and results", + "summary": "Flashscore player fixtures", "tags": [ - "DraftKings Racing" + "Flashscore" ] } }, - "/draftkings/racing/schedule": { + "/flashscore/player-injuries": { "get": { "consumes": [ "application/json" ], - "description": "Returns public race-card metadata from the DraftKings Racing homepage, including track, race number, scheduled post time, and status. Favorite-track and wager data are excluded.", - "operationId": "draftkings-racing-schedule", + "description": "Returns a team-sport player's injury history, newest first, with start date, end date (absent while unresolved) and injury type. A player with no recorded injuries returns an empty list. Players of individual sports have no injury page and return not found.", + "operationId": "flashscore-player-injuries", + "parameters": [ + { + "description": "Eight-character Flashscore player id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "UmV9iQmE" + }, + { + "description": "Optional player slug; must match the id when supplied", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "haaland-erling" + } + ], "produces": [ "application/json" ], @@ -341773,11 +415052,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/racing.racingScheduleResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/flashscore.PlayerInjuriesResponse" + } + }, + "type": "object" + } + ] } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -341794,19 +415091,38 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Racing schedule", + "summary": "Flashscore player injury history", "tags": [ - "DraftKings Racing" + "Flashscore" ] } }, - "/draftkings/racing/tracks": { + "/flashscore/player-match-log": { "get": { "consumes": [ "application/json" ], - "description": "Returns the public All Tracks directory with track type, status, schedule count, and country metadata. Favorite IDs, runner details, and wagering controls are excluded.", - "operationId": "draftkings-racing-tracks", + "description": "Returns one page of a football, basketball or hockey player's match log, newest first: each match with date, both sides and scores, competition, the player's rating and labelled statistics (minutes, goals, assists, cards, goalkeeper saves, points, rebounds, time on ice and more depending on the sport). Matches without statistics say why (on the bench, injured, suspended). Page 1 holds the 10 newest matches and every later page 25 older ones; request pages until has_more is false. Players of individual sports return an empty list, use flashscore-player-results for those.", + "operationId": "flashscore-player-match-log", + "parameters": [ + { + "description": "Eight-character Flashscore player id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "UmV9iQmE" + }, + { + "description": "1-based page from 1 to 300; defaults to 1", + "in": "query", + "maximum": 300, + "minimum": 1, + "name": "page", + "type": "integer", + "x-example": 1 + } + ], "produces": [ "application/json" ], @@ -341814,11 +415130,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/racing.racingTracksResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/flashscore.PlayerMatchLogResponse" + } + }, + "type": "object" + } + ] } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -341835,27 +415169,27 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Racing tracks", + "summary": "Flashscore player match log", "tags": [ - "DraftKings Racing" + "Flashscore" ] } }, - "/draftkings/sportsbook/event": { + "/flashscore/player-news": { "get": { "consumes": [ "application/json" ], - "description": "Returns one event's metadata (league id, sport id, teams, status, start time). `event_id` is a numeric DraftKings event identifier (find it from an event's DraftKings Sportsbook page, or from the `id` field of an event returned by /draftkings/sportsbook/odds). The returned `league_id` is accepted by /draftkings/sportsbook/odds and /draftkings/sportsbook/futures. This endpoint does not include betting markets/odds.", - "operationId": "draftkings-event", + "description": "Returns up to 100 recent headlines about a player, aggregated from news publishers, with publisher, publication time and image. Links point to Flashscore's redirect to the publisher. A player without news returns an empty list. A team id returns not found, use flashscore-team-news for teams.", + "operationId": "flashscore-player-news", "parameters": [ { - "description": "Numeric DraftKings event id", + "description": "Eight-character Flashscore player id", "in": "query", - "name": "event_id", + "name": "id", "required": true, "type": "string", - "x-example": "34240140" + "x-example": "UmV9iQmE" } ], "produces": [ @@ -341865,7 +415199,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sportsbook.eventResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/flashscore.PlayerNewsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -341880,12 +415226,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -341898,24 +415238,36 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Sportsbook event", + "summary": "Flashscore player news", "tags": [ - "DraftKings Sportsbook" + "Flashscore" ] } }, - "/draftkings/sportsbook/event-context": { + "/flashscore/player-results": { "get": { - "description": "Returns public sport, league, and event navigation identifiers for a numeric DraftKings event id. Use it to associate an event with DraftKings Sportsbook's public sport and league navigation.", - "operationId": "draftkings-event-context", + "consumes": [ + "application/json" + ], + "description": "Returns one page of an individual-sport player's finished and in-progress matches (tennis, darts, golf, snooker and similar), newest first, as structured events with start time, stage, both sides, score and competition. Competition blocks carry tournament_id and tournament_stage_id for the tournament endpoints. Football, basketball and hockey players have no event list and return an empty list, use flashscore-player-match-log for those. Request successive pages until event_count is 0.", + "operationId": "flashscore-player-results", "parameters": [ { - "description": "Numeric DraftKings event id", + "description": "Eight-character Flashscore player id", "in": "query", - "name": "event_id", + "name": "id", "required": true, "type": "string", - "x-example": "34522271" + "x-example": "M5Nr6FTR" + }, + { + "description": "1-based page from 1 to 300; defaults to 1", + "in": "query", + "maximum": 300, + "minimum": 1, + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -341925,7 +415277,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sportsbook.eventContextResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/flashscore.PlayerEventsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -341940,12 +415304,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -341958,35 +415316,34 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Sportsbook event context", + "summary": "Flashscore player results", "tags": [ - "DraftKings Sportsbook" + "Flashscore" ] } }, - "/draftkings/sportsbook/event-markets": { + "/flashscore/player-transfers": { "get": { "consumes": [ "application/json" ], - "description": "Returns one event's betting markets and selections for a specific market category. `event_id` is a numeric DraftKings event identifier (find it from the `id` field of an event returned by /draftkings/sportsbook/odds). `subcategory_id` selects the market category (e.g. game lines, a player-prop category, an alternate-line category) -- find one from the `subcategory_id` field on a market returned by /draftkings/sportsbook/odds. An empty `markets` list is a valid response when the category has no markets currently posted for this event.", - "operationId": "draftkings-event-markets", + "description": "Returns a team-sport player's club history, newest first, with date, type such as Loan or Free agent, fee text and the clubs on each side. A player with no recorded transfers returns an empty list. Players of individual sports have no transfers page and return not found.", + "operationId": "flashscore-player-transfers", "parameters": [ { - "description": "Numeric DraftKings event id", + "description": "Eight-character Flashscore player id", "in": "query", - "name": "event_id", + "name": "id", "required": true, "type": "string", - "x-example": "34497667" + "x-example": "UmV9iQmE" }, { - "description": "Numeric DraftKings market subcategory id", + "description": "Optional player slug; must match the id when supplied", "in": "query", - "name": "subcategory_id", - "required": true, + "name": "slug", "type": "string", - "x-example": "6354" + "x-example": "haaland-erling" } ], "produces": [ @@ -341996,7 +415353,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sportsbook.eventMarketsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/flashscore.PlayerTransfersResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -342011,12 +415380,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -342029,19 +415392,19 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Sportsbook event markets", + "summary": "Flashscore player transfer history", "tags": [ - "DraftKings Sportsbook" + "Flashscore" ] } }, - "/draftkings/sportsbook/featured-leagues": { + "/flashscore/ranking-categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns public DraftKings Sportsbook leagues currently marked as featured in its sport navigation. Each item includes its numeric `id`, capability `tags`, live-offer status, and upstream featured ordering. Use the `id` as `league_id` with /draftkings/sportsbook/odds and /draftkings/sportsbook/futures.", - "operationId": "draftkings-featured-leagues", + "description": "Lists the Flashscore ranking categories currently available, including the tennis live-rankings pages. Each category has its `key`, name, sport, page path and a `live` flag. Use a `key` with the Flashscore rankings endpoint. It takes no parameters.", + "operationId": "flashscore-ranking-categories", "produces": [ "application/json" ], @@ -342049,13 +415412,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sportsbook.featuredLeaguesResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/flashscore.rankingCategoriesResponseDoc" } }, "503": { @@ -342070,35 +415427,64 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Sportsbook featured leagues", + "summary": "Flashscore ranking categories", "tags": [ - "DraftKings Sportsbook" + "Flashscore" ] } }, - "/draftkings/sportsbook/futures": { + "/flashscore/rankings": { "get": { "consumes": [ "application/json" ], - "description": "Returns league-level futures markets and selections for a specific DraftKings market category. `league_id` is a numeric DraftKings league identifier and `subcategory_id` is a numeric futures category identifier. An empty `events` list is a valid response when the category has no markets currently posted for that league.", - "operationId": "draftkings-futures", + "description": "Returns the first-party ranking feed pages for a supported ranking category. When page one is full, page two is included to cover the remaining rows.", + "operationId": "flashscore-rankings", "parameters": [ { - "description": "Numeric DraftKings league id", - "in": "query", - "name": "league_id", - "required": true, - "type": "string", - "x-example": "84240" - }, - { - "description": "Numeric DraftKings futures market subcategory id", + "description": "Ranking category from flashscore-ranking-categories", + "enum": [ + "fifa", + "tennis-atp", + "tennis-wta", + "tennis-atp-race", + "tennis-wta-race", + "tennis-atp-doubles", + "tennis-wta-doubles", + "tennis-atp-doubles-race", + "tennis-wta-doubles-race", + "badminton-bwf-singles-men", + "badminton-bwf-singles-women", + "badminton-bwf-doubles-men", + "badminton-bwf-doubles-women", + "badminton-bwf-mixed-doubles", + "golf-owgr", + "golf-wwgr", + "golf-pga-fedexcup", + "golf-pga-money", + "golf-dp-world-tour", + "golf-lpga", + "golf-asian-tour", + "golf-japan-tour", + "golf-sunshine-tour", + "golf-korn-ferry", + "golf-champions-tour", + "darts-world-ranking", + "snooker-world-ranking", + "tennis-atp-live", + "tennis-wta-live", + "tennis-atp-race-live", + "tennis-wta-race-live", + "tennis-atp-doubles-live", + "tennis-wta-doubles-live", + "tennis-atp-doubles-race-live", + "tennis-wta-doubles-race-live" + ], "in": "query", - "name": "subcategory_id", + "name": "category", "required": true, "type": "string", - "x-example": "17279" + "x-example": "tennis-atp" } ], "produces": [ @@ -342108,7 +415494,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sportsbook.futuresResponseDoc" + "$ref": "#/definitions/flashscore.rankingResponseDoc" } }, "400": { @@ -342123,12 +415509,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -342141,27 +415521,78 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Sportsbook futures", + "summary": "Flashscore rankings", "tags": [ - "DraftKings Sportsbook" + "Flashscore" ] } }, - "/draftkings/sportsbook/league-events": { + "/flashscore/scores": { "get": { "consumes": [ "application/json" ], - "description": "Returns a DraftKings Sportsbook league's current public event directory, including event IDs, teams or other participants, start times, status, and public availability tags. Supply a numeric `league_id` from /draftkings/sportsbook/leagues, /draftkings/sportsbook/quick-links, /draftkings/sportsbook/featured-leagues, or /draftkings/sportsbook/event. This endpoint does not include betting markets or odds.", - "operationId": "draftkings-league-events", + "description": "Returns the public score feed for one sport and date-picker day offset. The upstream field-delimited text is preserved because field semantics vary by sport. Use flashscore-sports to discover sport keys, flashscore-navigation for the current category/country/competition directory, and flashscore-competitions for competitions on the selected date.", + "operationId": "flashscore-scores", "parameters": [ { - "description": "Numeric DraftKings league id", + "description": "Sport key", + "enum": [ + "football", + "tennis", + "basketball", + "hockey", + "golf", + "formula-1", + "baseball", + "snooker", + "american-football", + "aussie-rules", + "badminton", + "bandy", + "beach-soccer", + "beach-volleyball", + "boxing", + "cricket", + "cycling", + "darts", + "esports", + "field-hockey", + "floorball", + "futsal", + "handball", + "horse-racing", + "kabaddi", + "mma", + "motorsport", + "netball", + "pesapallo", + "rugby-league", + "rugby-union", + "table-tennis", + "volleyball", + "water-polo", + "winter-sports", + "moto-racing", + "ski-jumping", + "alpine-skiing", + "cross-country-skiing", + "biathlon" + ], "in": "query", - "name": "league_id", + "name": "sport", "required": true, "type": "string", - "x-example": "84240" + "x-example": "football" + }, + { + "description": "Days from today; -7 to 7; defaults to 0", + "in": "query", + "maximum": 7, + "minimum": -7, + "name": "day_offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -342171,7 +415602,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sportsbook.leagueEventsResponseDoc" + "$ref": "#/definitions/flashscore.responseDoc" } }, "400": { @@ -342180,18 +415611,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -342204,19 +415623,31 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Sportsbook league event directory", + "summary": "Flashscore scores and fixtures by sport", "tags": [ - "DraftKings Sportsbook" + "Flashscore" ] } }, - "/draftkings/sportsbook/leagues": { + "/flashscore/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns DraftKings Sportsbook's current public sport and league directory. Each league `id` is accepted as `league_id` by /draftkings/sportsbook/odds and /draftkings/sportsbook/futures.", - "operationId": "draftkings-leagues", + "description": "Searches the same public entity index used by Flashscore's search box. Results can include teams, players, and tournament templates across supported sports.", + "operationId": "flashscore-search", + "parameters": [ + { + "description": "Search phrase (2 to 80 characters)", + "in": "query", + "maxLength": 80, + "minLength": 2, + "name": "q", + "required": true, + "type": "string", + "x-example": "Champions League" + } + ], "produces": [ "application/json" ], @@ -342224,11 +415655,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sportsbook.leaguesResponseDoc" + "$ref": "#/definitions/flashscore.searchResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -342245,19 +415676,19 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Sportsbook sports and leagues", + "summary": "Flashscore search", "tags": [ - "DraftKings Sportsbook" + "Flashscore" ] } }, - "/draftkings/sportsbook/live": { + "/flashscore/sports": { "get": { "consumes": [ "application/json" ], - "description": "Returns the live events currently shown by DraftKings Sportsbook, including score state, period, primary markets, and market categories that can be used with /draftkings/sportsbook/event-markets. An empty `events` list is valid when DraftKings has no live events at request time.", - "operationId": "draftkings-live", + "description": "Returns every sport category visible in Flashscore's score navigation, with sport id, caller key, page path, and current event/competition counts. Counts are a live snapshot and may be zero when the sport has no fixtures in the current feed window.", + "operationId": "flashscore-sports", "produces": [ "application/json" ], @@ -342265,13 +415696,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sportsbook.liveResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/flashscore.sportsResponseDoc" } }, "503": { @@ -342286,27 +415711,27 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Sportsbook live events", + "summary": "Flashscore sports and live category counts", "tags": [ - "DraftKings Sportsbook" + "Flashscore" ] } }, - "/draftkings/sportsbook/odds": { + "/flashscore/team": { "get": { "consumes": [ "application/json" ], - "description": "Returns the primary betting markets (moneyline, spread, total) for every upcoming event in a DraftKings Sportsbook league. `league_id` is a numeric DraftKings league identifier (find it from a league's DraftKings Sportsbook page). An empty `events` list is a valid response when nothing is currently scheduled.", - "operationId": "draftkings-odds", + "description": "Returns a team's public profile: name, country, sport, logo, the stadium and capacity shown on its summary page, and the competitions of its recent and upcoming fixtures. Use a team id from flashscore-search, a Flashscore team URL, a match endpoint's team ids, or flashscore-team-squad and flashscore-player. A player id returns not found.", + "operationId": "flashscore-team", "parameters": [ { - "description": "Numeric DraftKings league id", + "description": "Eight-character Flashscore team id", "in": "query", - "name": "league_id", + "name": "id", "required": true, "type": "string", - "x-example": "84240" + "x-example": "Wtn9Stg0" } ], "produces": [ @@ -342316,7 +415741,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sportsbook.oddsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/flashscore.TeamResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -342331,12 +415768,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -342349,19 +415780,38 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Sportsbook odds", + "summary": "Flashscore team profile", "tags": [ - "DraftKings Sportsbook" + "Flashscore" ] } }, - "/draftkings/sportsbook/quick-links": { + "/flashscore/team-fixtures": { "get": { "consumes": [ "application/json" ], - "description": "Returns the ordered league shortcuts currently prioritized on DraftKings Sportsbook's public home page. Each item includes a numeric `league_id` accepted by /draftkings/sportsbook/odds and /draftkings/sportsbook/futures.", - "operationId": "draftkings-quick-links", + "description": "Returns one page of a team's upcoming matches, soonest first, as structured events with start time, both sides and competition. Event ids work with the flashscore match endpoints. Request successive pages until event_count is 0; a page past the end returns an empty list.", + "operationId": "flashscore-team-fixtures", + "parameters": [ + { + "description": "Eight-character Flashscore team id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "Wtn9Stg0" + }, + { + "description": "1-based page from 1 to 300; defaults to 1", + "in": "query", + "maximum": 300, + "minimum": 1, + "name": "page", + "type": "integer", + "x-example": 1 + } + ], "produces": [ "application/json" ], @@ -342369,11 +415819,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sportsbook.quickLinksResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/flashscore.TeamEventsResponse" + } + }, + "type": "object" + } + ] } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -342390,49 +415858,27 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Sportsbook quick links", + "summary": "Flashscore team fixtures", "tags": [ - "DraftKings Sportsbook" + "Flashscore" ] } }, - "/draftkings/sportsbook/team": { + "/flashscore/team-news": { "get": { "consumes": [ "application/json" ], - "description": "Returns stable team metadata embedded in a public DraftKings Sportsbook team page. Supply `team_id`, `sport`, and `slug` from an item returned by /draftkings/sportsbook/teams. Allowed `sport` values: `football`, `hockey`, `basketball`, `baseball`.", - "operationId": "draftkings-team", + "description": "Returns up to 100 recent headlines that Flashscore aggregates from news publishers for a team: title, publisher, publication time, image and a Flashscore link that redirects to the publisher's article. These are third-party headlines, separate from Flashscore's own articles in flashscore-news. Article text is not included.", + "operationId": "flashscore-team-news", "parameters": [ { - "description": "Numeric DraftKings team id", - "in": "query", - "name": "team_id", - "required": true, - "type": "string", - "x-example": "18454" - }, - { - "description": "Sport: football, hockey, basketball, baseball", - "enum": [ - "football", - "hockey", - "basketball", - "baseball" - ], - "in": "query", - "name": "sport", - "required": true, - "type": "string", - "x-example": "football" - }, - { - "description": "Lowercase DraftKings team slug", + "description": "Eight-character Flashscore team id", "in": "query", - "name": "slug", + "name": "id", "required": true, "type": "string", - "x-example": "arizona-cardinals" + "x-example": "Wtn9Stg0" } ], "produces": [ @@ -342442,7 +415888,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sportsbook.teamResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/flashscore.TeamNewsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -342457,12 +415915,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -342475,35 +415927,227 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Sportsbook team", + "summary": "Flashscore team news headlines", "tags": [ - "DraftKings Sportsbook" + "Flashscore" ] } }, - "/draftkings/sportsbook/teams": { + "/flashscore/team-outright-odds": { "get": { "consumes": [ "application/json" ], - "description": "Returns the teams listed on DraftKings Sportsbook's public Teams page for one league. Allowed `league` values: `nfl`, `nhl`, `nba`, `cbb`, `mlb`, `cfb`.", - "operationId": "draftkings-teams", + "description": "Returns the title odds bookmakers list for a team in one viewer market, grouped by the competitions it is priced in (league, cup, European competition) with every bookmaker's price and last movement. Pick geo (and subdivision for US or CA) from flashscore-odds-geos. A team with no listed title odds returns empty lists; a player id returns not found.", + "operationId": "flashscore-team-outright-odds", "parameters": [ { - "description": "League: nfl, nhl, nba, cbb, mlb, cfb", + "description": "Eight-character Flashscore team id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "Wtn9Stg0" + }, + { + "description": "Viewer market country code from flashscore-odds-geos; defaults to GB", "enum": [ - "nfl", - "nhl", - "nba", - "cbb", - "mlb", - "cfb" + "AE", + "AL", + "AM", + "AO", + "AR", + "AT", + "AU", + "AZ", + "BA", + "BD", + "BE", + "BG", + "BO", + "BR", + "BY", + "CA", + "CH", + "CI", + "CL", + "CM", + "CN", + "CO", + "CR", + "CY", + "CZ", + "DE", + "DK", + "DO", + "DZ", + "EC", + "EE", + "EG", + "ES", + "ET", + "FI", + "FR", + "GB", + "GE", + "GH", + "GR", + "GT", + "HK", + "HN", + "HR", + "HU", + "ID", + "IE", + "IL", + "IN", + "IQ", + "IR", + "IS", + "IT", + "JO", + "JP", + "KE", + "KG", + "KH", + "KR", + "KW", + "KZ", + "LA", + "LB", + "LK", + "LT", + "LU", + "LV", + "LY", + "MA", + "MD", + "ME", + "MK", + "MM", + "MN", + "MT", + "MX", + "MY", + "NG", + "NI", + "NL", + "NO", + "NP", + "NZ", + "PA", + "PE", + "PH", + "PK", + "PL", + "PT", + "PY", + "QA", + "RO", + "RS", + "RU", + "SA", + "SD", + "SE", + "SG", + "SI", + "SK", + "SN", + "SV", + "TH", + "TN", + "TR", + "TW", + "TZ", + "UA", + "UG", + "US", + "UY", + "UZ", + "VE", + "VN", + "XK", + "ZA", + "ZM", + "ZW" ], "in": "query", - "name": "league", - "required": true, + "name": "geo", "type": "string", - "x-example": "nfl" + "x-example": "GB" + }, + { + "description": "US state (with geo US) or Canadian province (with geo CA) code from flashscore-odds-geos; rejected with any other geo", + "enum": [ + "AB", + "AK", + "AL", + "AR", + "AZ", + "BC", + "CA", + "CO", + "CT", + "DC", + "DE", + "FL", + "GA", + "HI", + "IA", + "ID", + "IL", + "IN", + "KS", + "KY", + "LA", + "MA", + "MB", + "MD", + "ME", + "MI", + "MN", + "MO", + "MS", + "MT", + "NB", + "NC", + "ND", + "NE", + "NH", + "NJ", + "NL", + "NM", + "NS", + "NT", + "NU", + "NV", + "NY", + "OH", + "OK", + "ON", + "OR", + "PA", + "PE", + "QC", + "RI", + "SC", + "SD", + "SK", + "TN", + "TX", + "UT", + "VA", + "VT", + "WA", + "WI", + "WV", + "WY", + "YT" + ], + "in": "query", + "name": "subdivision", + "type": "string", + "x-example": "NJ" } ], "produces": [ @@ -342513,7 +416157,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/sportsbook.teamsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/flashscore.TeamOutrightOddsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -342522,8 +416178,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -342540,56 +416196,36 @@ "ApiKeyAuth": [] } ], - "summary": "DraftKings Sportsbook league teams", + "summary": "Flashscore team title odds", "tags": [ - "DraftKings Sportsbook" + "Flashscore" ] } }, - "/dramabox/browse": { + "/flashscore/team-results": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of 12 DramaBox short dramas, optionally within one genre: id, title, description, cover, link, episode count, tags, genres, rating, update status and displayed views, with the page and total page count. Genre ids come from dramabox-genres. Only public catalog metadata is read; no playable video is returned.", - "operationId": "dramabox-browse", + "description": "Returns one page of a team's finished and in-progress matches, newest first, as structured events with start time, stage, both sides, score and competition. Event ids work with the flashscore match endpoints. Request successive pages until event_count is 0; a page past the end returns an empty list.", + "operationId": "flashscore-team-results", "parameters": [ { - "description": "Genre id from dramabox-genres; 0 or omitted browses all titles", + "description": "Eight-character Flashscore team id", "in": "query", - "name": "genre_id", - "type": "integer", - "x-example": 161 + "name": "id", + "required": true, + "type": "string", + "x-example": "Wtn9Stg0" }, { - "description": "Page number, 1 to 1000; defaults to 1. Each page holds 12 titles", + "description": "1-based page from 1 to 300; defaults to 1", "in": "query", + "maximum": 300, + "minimum": 1, "name": "page", "type": "integer", - "x-example": 2 - }, - { - "description": "Site locale, one of: en, ko, zhHans, zh, es, ja, de, in, th, tl, pt, fr, ar, it (in is Indonesian); defaults to en. Each locale has its own title library", - "enum": [ - "en", - "ko", - "zhHans", - "zh", - "es", - "ja", - "de", - "in", - "th", - "tl", - "pt", - "fr", - "ar", - "it" - ], - "in": "query", - "name": "language", - "type": "string", - "x-example": "ja" + "x-example": 1 } ], "produces": [ @@ -342599,7 +416235,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dramabox.browseResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/flashscore.TeamEventsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -342608,8 +416256,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -342626,19 +416274,43 @@ "ApiKeyAuth": [] } ], - "summary": "Browse DramaBox short dramas by genre", + "summary": "Flashscore team results", "tags": [ - "DramaBox" + "Flashscore" ] } }, - "/dramabox/categories": { + "/flashscore/team-squad": { "get": { "consumes": [ "application/json" ], - "description": "Returns the DramaBox app's category navigation as six groups: language, production type, dub mode, two genre rows (genre_1 and genre_2) and sort order. Each group lists the selectable options as display names and the values to pass to dramabox-category-books. The \"All\" pseudo-option is dropped because omitting a filter means all. Only public catalog metadata is read; no playable video is returned.", - "operationId": "dramabox-categories", + "description": "Returns a team's squad grouped by position (goalkeepers, defenders, and so on, plus the coach) with each person's jersey number, age, country (or club, for national teams), injury or absence note and season statistics. The default scope totals all competitions; the scopes list in every response names the per-competition scopes accepted by the scope parameter. Sports without a squad page return not found.", + "operationId": "flashscore-team-squad", + "parameters": [ + { + "description": "Eight-character Flashscore team id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "Wtn9Stg0" + }, + { + "description": "Optional team slug; must match the id when supplied", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "manchester-city" + }, + { + "description": "Squad statistics scope key from the scopes list of a previous response (for example overall-all or league-SY30SsKF); defaults to overall-all", + "in": "query", + "name": "scope", + "type": "string", + "x-example": "overall-all" + } + ], "produces": [ "application/json" ], @@ -342646,7 +416318,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dramabox.categoriesResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/flashscore.TeamSquadResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -342655,8 +416339,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -342673,89 +416357,48 @@ "ApiKeyAuth": [] } ], - "summary": "List DramaBox category filters", + "summary": "Flashscore team squad", "tags": [ - "DramaBox" + "Flashscore" ] } }, - "/dramabox/category-books": { + "/flashscore/team-transfers": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of 20 DramaBox short dramas from the app's category feed, optionally filtered by values from dramabox-categories: language, production type, dub mode, either genre row and sort order. Filters are ANDed; an omitted filter means all. Each title carries its id, title, description, cover, website link, episode count, tags with tag ids, protagonist, play count, library flag and listing times. Only public catalog metadata is read; no playable video is returned.", - "operationId": "dramabox-category-books", + "description": "Returns one page (30 rows) of a team's transfer history, newest first: date, direction (in or out), type such as Loan or Transfer, fee text, the player and the clubs on each side. Filter by type to see arrivals or departures only. Request successive pages until transfer_count is 0.", + "operationId": "flashscore-team-transfers", "parameters": [ { - "description": "Language/origin value from dramabox-categories' language group, e.g. 美国 (Local) or 中国 (Chinese)", - "in": "query", - "name": "language", - "type": "string", - "x-example": "美国" - }, - { - "description": "Production-type value from dramabox-categories' production group: 3 (AI Drama), 1 (Live-Action), 2 (Anime)", - "enum": [ - "3", - "1", - "2" - ], - "in": "query", - "name": "production", - "type": "string", - "x-example": "1" - }, - { - "description": "Dub-mode value from dramabox-categories' dub group: 1 (Dubbed), 0 (Subtitles Only)", - "enum": [ - "1", - "0" - ], - "in": "query", - "name": "dub", - "type": "string", - "x-example": "1" - }, - { - "description": "Genre value from dramabox-categories' genre_1 group, e.g. 1357 (Romance) or 1361 (Strong Heroine)", - "in": "query", - "name": "genre", - "type": "string", - "x-example": "1357" - }, - { - "description": "Genre value from dramabox-categories' genre_2 group, e.g. 1392 (Second Chance) or 1359 (BL); multi-tag values such as 1324,1362 are one value", + "description": "Eight-character Flashscore team id", "in": "query", - "name": "genre_2", + "name": "id", + "required": true, "type": "string", - "x-example": "1392" + "x-example": "Wtn9Stg0" }, { - "description": "Sort value from dramabox-categories' sort group: 1 (Trending), 2 (Latest), 3 (Unwatched)", + "description": "Transfer direction filter; defaults to all", "enum": [ - "1", - "2", - "3" + "all", + "arrivals", + "departures" ], "in": "query", - "name": "sort", + "name": "type", "type": "string", - "x-example": "1" + "x-example": "all" }, { - "description": "Page number, 1 to 1000; defaults to 1", + "description": "1-based page from 1 to 300; defaults to 1", "in": "query", + "maximum": 300, + "minimum": 1, "name": "page", "type": "integer", "x-example": 1 - }, - { - "description": "Titles per page, 1 to 50; defaults to 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 } ], "produces": [ @@ -342765,7 +416408,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dramabox.categoryBooksResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/flashscore.TeamTransfersResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -342774,8 +416429,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -342792,19 +416447,19 @@ "ApiKeyAuth": [] } ], - "summary": "Browse DramaBox titles by category", + "summary": "Flashscore team transfers", "tags": [ - "DramaBox" + "Flashscore" ] } }, - "/dramabox/channels": { + "/flashscore/top-search": { "get": { "consumes": [ "application/json" ], - "description": "Returns the 8 DramaBox app theater channels as ids and names: Popular, New, Rankings, Categories, Anime, Live-Action, VIP and Original+. The channel value for dramabox-theater is the lowercase name (popular, new, rankings, categories, anime, live-action, vip, original). Only public catalog metadata is read; no playable video is returned.", - "operationId": "dramabox-channels", + "description": "Returns the ten-or-fewer public team, player, and tournament results shown in Flashscore's search overlay. This is a changing curated list, not a complete entity directory.", + "operationId": "flashscore-top-search", "produces": [ "application/json" ], @@ -342812,19 +416467,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dramabox.channelsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/flashscore.topSearchResponseDoc" } }, "503": { @@ -342839,27 +416482,27 @@ "ApiKeyAuth": [] } ], - "summary": "List DramaBox theater channels", + "summary": "Flashscore top search entities", "tags": [ - "DramaBox" + "Flashscore" ] } }, - "/dramabox/drama": { + "/flashscore/tournament-archive-seasons": { "get": { "consumes": [ "application/json" ], - "description": "Returns one DramaBox short drama: title, description, cover, link, language, episode count, lifetime views, follows, tags, genres, listing times, the languages it is available in, the episode list with each episode's number, id, duration, free flag and thumbnail, and related titles. Only public catalog metadata is read; no playable video is returned.", - "operationId": "dramabox-drama", + "description": "Returns every season of the competition that owns a tournament stage: season label, season tournament id, whether it is current, the winning participants and the stage ids of each season, plus the requested stage's names and page tabs (summary, odds, standings, results, fixtures, draw, news). Get a stage id from tournament_stage_id in the competition block of team, player and match event lists, then reuse the stage ids returned here for older seasons. Pass a stage id, not a season tournament id or a competition id: other ids can return an unrelated competition, so check the returned tournament name. An unknown stage id returns not found.", + "operationId": "flashscore-tournament-archive-seasons", "parameters": [ { - "description": "Title id (digits) from any DramaBox list, or a dramabox.com drama URL", + "description": "Eight-character tournament stage id (tournament_stage_id of an event competition block)", "in": "query", - "name": "id", + "name": "stage_id", "required": true, "type": "string", - "x-example": "42000028173" + "x-example": "CfoA8Dmm" } ], "produces": [ @@ -342869,7 +416512,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dramabox.dramaResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/flashscore.TournamentArchiveSeasonsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -342884,12 +416539,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -342902,42 +416551,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get a DramaBox short drama and its episodes", + "summary": "Flashscore competition seasons by stage id", "tags": [ - "DramaBox" + "Flashscore" ] } }, - "/dramabox/genres": { + "/flashscore/tournament-draw": { "get": { "consumes": [ "application/json" ], - "description": "Returns the genres DramaBox's browse accepts (Romance, Werewolves, Revenge, Billionaire, ...) as ids and names, read live from DramaBox. Pass a genre id to dramabox-browse. Only public catalog metadata is read; no playable video is returned.", - "operationId": "dramabox-genres", + "description": "Returns one knockout stage with its entrants and ordered bracket rounds, slots, linked match IDs, scores and winners. A slot can contain replays or have no linked match yet. Use the season tournament_id and its stage_id from flashscore-tournament-archive-seasons or the competition block of an event. A stage without a published draw returns not found.", + "operationId": "flashscore-tournament-draw", "parameters": [ { - "description": "Site locale, one of: en, ko, zhHans, zh, es, ja, de, in, th, tl, pt, fr, ar, it (in is Indonesian); defaults to en. Each locale has its own title library", - "enum": [ - "en", - "ko", - "zhHans", - "zh", - "es", - "ja", - "de", - "in", - "th", - "tl", - "pt", - "fr", - "ar", - "it" - ], + "description": "Eight-character Flashscore season tournament id", "in": "query", - "name": "language", + "name": "tournament_id", + "required": true, "type": "string", - "x-example": "ja" + "x-example": "YaSyJqEs" + }, + { + "description": "Eight-character Flashscore draw stage id", + "in": "query", + "name": "stage_id", + "required": true, + "type": "string", + "x-example": "xY6rfy4l" } ], "produces": [ @@ -342947,7 +416589,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dramabox.genresResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/flashscore.TournamentDrawResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -342956,8 +416610,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -342974,42 +416628,36 @@ "ApiKeyAuth": [] } ], - "summary": "List DramaBox genres", + "summary": "Flashscore tournament draw by season and stage", "tags": [ - "DramaBox" + "Flashscore" ] } }, - "/dramabox/home": { + "/flashscore/tournament-events": { "get": { "consumes": [ "application/json" ], - "description": "Returns DramaBox's (dramabox.com) home page: the featured short dramas and the three curated shelves (Trending, Must-sees, Hidden gems), each title with its id, title, description, cover, DramaBox link, episode count, tags, genres and the view count as the site prints it. Use dramabox-more for a whole shelf. Only public catalog metadata is read; no playable video is returned.", - "operationId": "dramabox-home", + "description": "Returns a page of the public results or fixtures feed for any supported sport and competition path. Page 1 is embedded in the public tournament page; later pages follow its Show more feed sequence. Sum event_count from successive pages until total_events is reached.", + "operationId": "flashscore-tournament-events", "parameters": [ { - "description": "Site locale, one of: en, ko, zhHans, zh, es, ja, de, in, th, tl, pt, fr, ar, it (in is Indonesian); defaults to en. Each locale has its own title library", - "enum": [ - "en", - "ko", - "zhHans", - "zh", - "es", - "ja", - "de", - "in", - "th", - "tl", - "pt", - "fr", - "ar", - "it" - ], + "description": "Relative Flashscore competition season results or fixtures path", "in": "query", - "name": "language", + "name": "path", + "required": true, "type": "string", - "x-example": "ja" + "x-example": "/football/england/premier-league-2026-2027/fixtures/" + }, + { + "description": "1-based page; defaults to 1", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -343019,7 +416667,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dramabox.homeResponseDoc" + "$ref": "#/definitions/flashscore.tournamentEventsResponseDoc" } }, "400": { @@ -343028,8 +416676,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -343046,62 +416694,227 @@ "ApiKeyAuth": [] } ], - "summary": "List DramaBox's featured titles and shelves", + "summary": "Flashscore tournament season results or fixtures", "tags": [ - "DramaBox" + "Flashscore" ] } }, - "/dramabox/more": { + "/flashscore/tournament-outright-odds": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of 18 titles from a DramaBox curated shelf (trending, must-sees or hidden-gems): id, title, description, cover, link, episode count, tags, genres and displayed views, with the page and total page count. Only public catalog metadata is read; no playable video is returned.", - "operationId": "dramabox-more", + "description": "Returns the title odds bookmakers list for one competition season in one viewer market, grouped by participant with every bookmaker's price and last movement. The provider lists only the top favourites (three in every competition checked), so this is a favourites market, not the full field. Bookmakers depend on the market: pick geo (and subdivision for US or CA) from flashscore-odds-geos. A market with no listed odds returns empty lists. Use the season-level tournament_id from event competition blocks or flashscore-tournament-archive-seasons.", + "operationId": "flashscore-tournament-outright-odds", "parameters": [ { - "description": "Curated shelf: trending, must-sees or hidden-gems", - "enum": [ - "trending", - "must-sees", - "hidden-gems" - ], + "description": "Eight-character season-level tournament id (tournament_id of an event competition block or of a season)", "in": "query", - "name": "position", + "name": "tournament_id", "required": true, "type": "string", - "x-example": "trending" + "x-example": "SY30SsKF" }, { - "description": "Page number, 1 to 1000; defaults to 1. Each page holds 18 titles", + "description": "Viewer market country code from flashscore-odds-geos; defaults to GB", + "enum": [ + "AE", + "AL", + "AM", + "AO", + "AR", + "AT", + "AU", + "AZ", + "BA", + "BD", + "BE", + "BG", + "BO", + "BR", + "BY", + "CA", + "CH", + "CI", + "CL", + "CM", + "CN", + "CO", + "CR", + "CY", + "CZ", + "DE", + "DK", + "DO", + "DZ", + "EC", + "EE", + "EG", + "ES", + "ET", + "FI", + "FR", + "GB", + "GE", + "GH", + "GR", + "GT", + "HK", + "HN", + "HR", + "HU", + "ID", + "IE", + "IL", + "IN", + "IQ", + "IR", + "IS", + "IT", + "JO", + "JP", + "KE", + "KG", + "KH", + "KR", + "KW", + "KZ", + "LA", + "LB", + "LK", + "LT", + "LU", + "LV", + "LY", + "MA", + "MD", + "ME", + "MK", + "MM", + "MN", + "MT", + "MX", + "MY", + "NG", + "NI", + "NL", + "NO", + "NP", + "NZ", + "PA", + "PE", + "PH", + "PK", + "PL", + "PT", + "PY", + "QA", + "RO", + "RS", + "RU", + "SA", + "SD", + "SE", + "SG", + "SI", + "SK", + "SN", + "SV", + "TH", + "TN", + "TR", + "TW", + "TZ", + "UA", + "UG", + "US", + "UY", + "UZ", + "VE", + "VN", + "XK", + "ZA", + "ZM", + "ZW" + ], "in": "query", - "name": "page", - "type": "integer", - "x-example": 2 + "name": "geo", + "type": "string", + "x-example": "GB" }, { - "description": "Site locale, one of: en, ko, zhHans, zh, es, ja, de, in, th, tl, pt, fr, ar, it (in is Indonesian); defaults to en. Each locale has its own title library", + "description": "US state (with geo US) or Canadian province (with geo CA) code from flashscore-odds-geos; rejected with any other geo", "enum": [ - "en", - "ko", - "zhHans", - "zh", - "es", - "ja", - "de", - "in", - "th", - "tl", - "pt", - "fr", - "ar", - "it" + "AB", + "AK", + "AL", + "AR", + "AZ", + "BC", + "CA", + "CO", + "CT", + "DC", + "DE", + "FL", + "GA", + "HI", + "IA", + "ID", + "IL", + "IN", + "KS", + "KY", + "LA", + "MA", + "MB", + "MD", + "ME", + "MI", + "MN", + "MO", + "MS", + "MT", + "NB", + "NC", + "ND", + "NE", + "NH", + "NJ", + "NL", + "NM", + "NS", + "NT", + "NU", + "NV", + "NY", + "OH", + "OK", + "ON", + "OR", + "PA", + "PE", + "QC", + "RI", + "SC", + "SD", + "SK", + "TN", + "TX", + "UT", + "VA", + "VT", + "WA", + "WI", + "WV", + "WY", + "YT" ], "in": "query", - "name": "language", + "name": "subdivision", "type": "string", - "x-example": "ja" + "x-example": "NJ" } ], "produces": [ @@ -343111,7 +416924,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dramabox.moreResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/flashscore.TournamentOutrightOddsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -343120,8 +416945,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -343138,41 +416963,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a whole DramaBox curated shelf", + "summary": "Flashscore competition winner odds", "tags": [ - "DramaBox" + "Flashscore" ] } }, - "/dramabox/performer": { + "/flashscore/tournament-seasons": { "get": { "consumes": [ "application/json" ], - "description": "Returns one DramaBox performer from the Android app API: name, gender, avatar, video count, follow flag, and one page of the titles they appear in (each with id, title, description, cover, website link, episode count, tags with their tag ids, protagonist, library flag and listing times). Get performer ids from dramabox-search or dramabox-suggest's people results. Only public catalog metadata is read; no playable video is returned.", - "operationId": "dramabox-performer", + "description": "Lists the seasons and winners (both players for doubles) from a public competition archive page. Discover archive paths through flashscore-navigation or flashscore-competitions. Each returned results_path and fixtures_path can be passed to flashscore-tournament-events to retrieve season event feeds.", + "operationId": "flashscore-tournament-seasons", "parameters": [ { - "description": "Performer id from dramabox-search or dramabox-suggest's people results", + "description": "Relative Flashscore competition archive path ending in /archive/", "in": "query", - "name": "performer_id", + "name": "path", "required": true, - "type": "integer", - "x-example": 29450 - }, - { - "description": "Page number, 1 to 1000; defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Page size, 1 to 20; defaults to 10", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "type": "string", + "x-example": "/football/europe/champions-league/archive/" } ], "produces": [ @@ -343182,7 +416993,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dramabox.performerResponseDoc" + "$ref": "#/definitions/flashscore.tournamentSeasonsResponseDoc" } }, "400": { @@ -343191,8 +417002,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -343209,31 +417020,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get a DramaBox performer and their titles", + "summary": "Flashscore tournament archive seasons", "tags": [ - "DramaBox" + "Flashscore" ] } }, - "/dramabox/rank": { + "/flashscore/tournament-standings": { "get": { "consumes": [ "application/json" ], - "description": "Returns one DramaBox ranking list from the DramaBox Android app API: the available tabs (Most Trending, Top Searched, New Releases) and 20 ranked titles, each with its id, title, description, cover, website link, episode count, tags, protagonist, rank position, hot metric, library flag and listing times. Pass a tab's type as rank_type to read that tab. Only public catalog metadata is read; no playable video is returned.", - "operationId": "dramabox-rank", + "description": "Returns a competition-level table feed independent of a match id. Discover the stage-specific view values with flashscore-tournament-standings-views. Data remains in Flashscore's raw delimited format.", + "operationId": "flashscore-tournament-standings", "parameters": [ { - "description": "Ranking tab: 1 (Most Trending), 2 (Top Searched), 3 (New Releases); omit for the default tab", + "description": "Relative Flashscore competition path from flashscore-navigation or flashscore-competitions; omit /standings/", + "in": "query", + "name": "path", + "required": true, + "type": "string", + "x-example": "/football/england/premier-league/" + }, + { + "description": "View returned by flashscore-tournament-standings-views; defaults to overall", "enum": [ - 1, - 2, - 3 + "overall", + "home", + "away", + "form_overall", + "form_home", + "form_away", + "overunder_overall", + "overunder_home", + "overunder_away", + "htft_overall", + "htft_home", + "htft_away", + "top_scorers" ], "in": "query", - "name": "rank_type", - "type": "integer", - "x-example": 2 + "name": "view", + "type": "string", + "x-example": "overall" } ], "produces": [ @@ -343243,7 +417072,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dramabox.rankResponseDoc" + "$ref": "#/definitions/flashscore.tournamentStandingsResponseDoc" } }, "400": { @@ -343252,8 +417081,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -343270,26 +417099,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a DramaBox ranking list", + "summary": "Flashscore competition standings table", "tags": [ - "DramaBox" + "Flashscore" ] } }, - "/dramabox/recommend": { + "/flashscore/tournament-standings-views": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of DramaBox's own \"You Might Like\" recommendation feed from the Android app API: the feed title and its titles, each with id, title, description, cover, website link, episode count, tags with their tag ids, protagonist, library flag and listing times. The upstream page size is fixed, so page is the only paging control. Only public catalog metadata is read; no playable video is returned.", - "operationId": "dramabox-recommend", + "description": "Returns the table views currently exposed on a public Flashscore competition standings page. The view set varies by competition and stage; use a returned value with flashscore-tournament-standings.", + "operationId": "flashscore-tournament-standings-views", "parameters": [ { - "description": "Page number, 1 to 1000; defaults to 1", + "description": "Relative Flashscore competition path from flashscore-navigation or flashscore-competitions; omit /standings/", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "path", + "required": true, + "type": "string", + "x-example": "/football/england/premier-league/" } ], "produces": [ @@ -343299,7 +417129,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dramabox.recommendResponseDoc" + "$ref": "#/definitions/flashscore.tournamentStandingsViewsResponseDoc" } }, "400": { @@ -343308,8 +417138,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -343326,57 +417156,135 @@ "ApiKeyAuth": [] } ], - "summary": "Get a page of DramaBox's recommendation feed", + "summary": "Flashscore competition standings view discovery", "tags": [ - "DramaBox" + "Flashscore" ] } }, - "/dramabox/search": { + "/flickreels/classify": { "get": { "consumes": [ "application/json" ], - "description": "Searches the DramaBox Android app API and returns one page of mixed results: book rows (id, title, description, cover, website link, tags, protagonist) and performer rows (id, name, avatar, series count), plus an is_more flag for the next page. The keyword is trimmed and truncated to 80 characters like the app; sort selects one of the app's result orderings. Performer ids can be passed to dramabox-performer. Only public catalog metadata is read; no playable video is returned.", - "operationId": "dramabox-search", + "description": "Returns one page of a FlickReels (flickreels.net) category listing: twelve titles with each one's playlet id, the slug flickreels-movie requires, title, cover, episode count, tags and canonical URL, plus the site's own total for that category. Take tag_id and slug from flickreels-genres for the same locale: the route is slug+id keyed, so an id-only request, a wrong slug and an unknown id are all a 404. Page 0 is treated as page 1 locally because the upstream canonicalises it, and a page past the end is a valid empty page with empty=true and the site's total intact, never an error.", + "operationId": "flickreels-classify", "parameters": [ { - "description": "Search text, trimmed and truncated to 80 characters", + "description": "Category tag id from flickreels-genres; 0 means All", "in": "query", - "name": "keyword", + "name": "tag_id", + "required": true, + "type": "integer", + "x-example": 2269 + }, + { + "description": "Category slug from flickreels-genres for the same language", + "in": "query", + "name": "slug", "required": true, "type": "string", - "x-example": "love" + "x-example": "takedown" }, { - "default": 1, - "description": "One-based result page", + "description": "1-based page of 12 titles, defaults to 1", "in": "query", - "maximum": 1000, - "minimum": 1, "name": "page", - "type": "integer" + "type": "integer", + "x-example": 1 }, { - "default": 20, - "description": "Results per page", + "description": "Locale code, defaults to en", + "enum": [ + "en", + "ja", + "ko", + "tc", + "es", + "id", + "th", + "de", + "pt", + "fr" + ], "in": "query", - "maximum": 50, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "language", + "type": "string", + "x-example": "en" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/flickreels.classifyResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Upstream result ordering mode; omit for the app default", + "ApiKeyAuth": [] + } + ], + "summary": "List one page of a FlickReels category", + "tags": [ + "FlickReels" + ] + } + }, + "/flickreels/genres": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the complete FlickReels (flickreels.net) category taxonomy for one locale: every category the site lists, each with the tag_id and slug that flickreels-classify requires, plus the site's own 10-entry language list, which is the value space of the language parameter. This is the discovery endpoint for both the tag_id and language parameters, so no caller has to hard-code them. Category tag ids and slugs are locale-scoped: read both from the same locale you pass to the listing endpoint. The All category is tag_id 0 and its slug is all.", + "operationId": "flickreels-genres", + "parameters": [ + { + "description": "Locale code, defaults to en", "enum": [ - 1, - 2, - 3 + "en", + "ja", + "ko", + "tc", + "es", + "id", + "th", + "de", + "pt", + "fr" ], "in": "query", - "name": "sort", - "type": "integer", - "x-example": 1 + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -343386,7 +417294,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dramabox.searchResponseDoc" + "$ref": "#/definitions/flickreels.genresResponseDoc" } }, "400": { @@ -343413,27 +417321,38 @@ "ApiKeyAuth": [] } ], - "summary": "Search DramaBox titles and performers", + "summary": "List FlickReels' complete category and language taxonomy", "tags": [ - "DramaBox" + "FlickReels" ] } }, - "/dramabox/suggest": { + "/flickreels/home": { "get": { "consumes": [ "application/json" ], - "description": "Returns the DramaBox Android app API's autocomplete suggestions for a partial query: book rows (kind \"book\", cover_url) and performer rows (kind \"actor\", avatar, series count). The keyword is trimmed and truncated to 80 characters like the app; a query with no match returns an empty items list. Only public catalog metadata is read; no playable video is returned.", - "operationId": "dramabox-suggest", + "description": "Returns every shelf the FlickReels (flickreels.net) home page renders, in the site's own order: each shelf's column id, the slug flickreels-shelf needs when the row links a see-more page, its title, the site's own count and the titles it rendered. Five shelves are observed for the default locale. The site publishes the true count while rendering only a window of rows, so the count and the returned list length legitimately differ; use flickreels-shelf with the shelf id to page a shelf that carries more.", + "operationId": "flickreels-home", "parameters": [ { - "description": "Partial search text, trimmed and truncated to 80 characters", + "description": "Locale code, defaults to en", + "enum": [ + "en", + "ja", + "ko", + "tc", + "es", + "id", + "th", + "de", + "pt", + "fr" + ], "in": "query", - "name": "keyword", - "required": true, + "name": "language", "type": "string", - "x-example": "lov" + "x-example": "en" } ], "produces": [ @@ -343443,7 +417362,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dramabox.suggestResponseDoc" + "$ref": "#/definitions/flickreels.homeResponseDoc" } }, "400": { @@ -343470,41 +417389,54 @@ "ApiKeyAuth": [] } ], - "summary": "Get DramaBox search-box suggestions", + "summary": "List the FlickReels home page's shelves", "tags": [ - "DramaBox" + "FlickReels" ] } }, - "/dramabox/tag": { + "/flickreels/movie": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of DramaBox titles carrying a tag, as the Android app shows them: each title's id, title, description, cover, website link, episode count, tags with their tag ids, protagonist, library flag and listing times, plus the tag's own name. Get tag ids from any title result's tag_refs (dramabox-rank, dramabox-search, dramabox-category-books and the other list endpoints all expose them). An unknown tag id returns an empty list rather than an error. Only public catalog metadata is read; no playable video is returned.", - "operationId": "dramabox-tag", + "description": "Returns one FlickReels (flickreels.net) title: the site's own title, cover, synopsis, episode count, release date and tag labels, the complete episode list (number, chapter id, title, duration in seconds and locked flag), and the detail page's own related shelf. The route is slug+id keyed, so pass both values from the same card; an id-only request or a wrong slug is a 404. Episode cover images are signed with an expiring token and are deliberately not returned, and no playable media is ever exposed.", + "operationId": "flickreels-movie", "parameters": [ { - "description": "Tag id from any title result's tag_refs", + "description": "Playlet id from any listing card", "in": "query", - "name": "tag_id", + "name": "title_id", "required": true, "type": "integer", - "x-example": 1379 + "x-example": 9321 }, { - "description": "Page number, 1 to 1000; defaults to 1", + "description": "Title slug from the same card", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "slug", + "required": true, + "type": "string", + "x-example": "they-dont-know-im-the-dons-pregnant-queen" }, { - "description": "Page size, 1 to 50; defaults to 20", + "description": "Locale code, defaults to en", + "enum": [ + "en", + "ja", + "ko", + "tc", + "es", + "id", + "th", + "de", + "pt", + "fr" + ], "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -343514,7 +417446,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dramabox.tagResponseDoc" + "$ref": "#/definitions/flickreels.movieResponseDoc" } }, "400": { @@ -343523,6 +417455,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -343541,51 +417479,60 @@ "ApiKeyAuth": [] } ], - "summary": "List the DramaBox titles carrying a tag", + "summary": "Get a FlickReels title with its full episode list", "tags": [ - "DramaBox" + "FlickReels" ] } }, - "/dramabox/theater": { + "/flickreels/shelf": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a DramaBox app theater channel: the channel, its titled shelves (each with styles and 10 to 20 titles), poster banners and search hot words. Each title carries its id, title, description, cover, website link, episode count, tags with tag ids, protagonist, play count, library flag and listing times. Channel values are the lowercase names from dramabox-channels. An empty feed is a valid answer. Only public catalog metadata and poster images are read; no playable video is returned.", - "operationId": "dramabox-theater", + "description": "Returns one page of a curated FlickReels (flickreels.net) shelf: the shelf's title and the site's own total, plus twelve titles with each one's playlet id, movie slug, title, cover, episode count, tags and canonical URL. Take shelf_id from a flickreels-home shelf; the slug is optional because the upstream ignores that path segment. A shelf can hold far more rows than the home page renders, so page through with the page parameter and stop when a page returns an empty list, which the upstream answers as a valid 200 rather than a 404.", + "operationId": "flickreels-shelf", "parameters": [ { - "description": "Theater channel: popular, new, rankings, categories, anime, live-action, vip or original", - "enum": [ - "popular", - "new", - "rankings", - "categories", - "anime", - "live-action", - "vip", - "original" - ], + "description": "Shelf id from a flickreels-home shelf", "in": "query", - "name": "channel", + "name": "shelf_id", "required": true, + "type": "integer", + "x-example": 11860 + }, + { + "description": "Shelf slug from the same shelf; the upstream ignores its value", + "in": "query", + "name": "slug", "type": "string", - "x-example": "popular" + "x-example": "all-episodes-one-go" }, { - "description": "Page number, 1 to 1000; defaults to 1", + "description": "1-based page, twelve rows per page, defaults to 1", "in": "query", "name": "page", "type": "integer", "x-example": 1 }, { - "description": "Titles per paged block, 1 to 20; defaults to 10", + "description": "Locale code, defaults to en", + "enum": [ + "en", + "ja", + "ko", + "tc", + "es", + "id", + "th", + "de", + "pt", + "fr" + ], "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -343595,7 +417542,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dramabox.theaterResponseDoc" + "$ref": "#/definitions/flickreels.shelfResponseDoc" } }, "400": { @@ -343622,19 +417569,62 @@ "ApiKeyAuth": [] } ], - "summary": "Get a DramaBox theater channel feed", + "summary": "List one page of a FlickReels curated shelf", "tags": [ - "DramaBox" + "FlickReels" ] } }, - "/dramabox/trending": { + "/foodpanda/restaurant": { "get": { "consumes": [ "application/json" ], - "description": "Returns the DramaBox Android app API's search landing page: the hot, trending and new-release title lists, the ranking tabs (pass a tab's type to dramabox-rank as rank_type) and the app's preset search keyword. Takes no parameters. Only public catalog metadata is read; no playable video is returned.", - "operationId": "dramabox-trending", + "description": "Returns one foodpanda restaurant's detail by code: name, address, coordinates, budget tier, rating and review count, cuisines, minimum order amount, minimum delivery fee, delivery/pickup availability, timezone, and a hero image. Supplying latitude and longitude only affects the (optional) computed fields the upstream itself returns for that coordinate; it does not filter or reject the lookup.", + "operationId": "foodpanda-restaurant", + "parameters": [ + { + "description": "Delivery Hero market the restaurant belongs to. Defaults to sg.", + "enum": [ + "sg", + "pk", + "bd", + "hk", + "my", + "ph", + "la", + "kh", + "tw", + "mm" + ], + "in": "query", + "name": "market", + "type": "string", + "x-example": "sg" + }, + { + "description": "Restaurant code, from /foodpanda/search's code field", + "in": "query", + "name": "code", + "required": true, + "type": "string", + "x-example": "dxpr" + }, + { + "description": "Caller latitude, optional", + "in": "query", + "name": "latitude", + "type": "number", + "x-example": 1.3521 + }, + { + "description": "Caller longitude, optional", + "in": "query", + "name": "longitude", + "type": "number", + "x-example": 103.8198 + } + ], "produces": [ "application/json" ], @@ -343642,7 +417632,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dramabox.trendingResponseDoc" + "$ref": "#/definitions/foodpanda.restaurantResponseDoc" } }, "400": { @@ -343651,8 +417641,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -343669,41 +417659,46 @@ "ApiKeyAuth": [] } ], - "summary": "Get DramaBox's search landing feeds", + "summary": "Get one foodpanda restaurant's detail", "tags": [ - "DramaBox" + "Foodpanda" ] } }, - "/duckduckgo/image": { + "/foodpanda/restaurant/menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns DuckDuckGo image results for a query string: title, source page URL, image URL, thumbnail, dimensions, and hostname, plus page-based pagination.", - "operationId": "duckduckgo-image", + "description": "Returns one restaurant's full menu grouped into categories, plus opening hours, price range, cuisines served, and aggregate rating. Every item carries a title, description, image, sold-out flag, and price -- original_price plus discounted_price when the item is currently discounted.", + "operationId": "foodpanda-restaurant-menu", "parameters": [ { - "description": "Search query", + "description": "Delivery Hero market the restaurant belongs to. Defaults to sg.", + "enum": [ + "sg", + "pk", + "bd", + "hk", + "my", + "ph", + "la", + "kh", + "tw", + "mm" + ], "in": "query", - "name": "q", - "required": true, + "name": "market", "type": "string", - "x-example": "openai" - }, - { - "description": "1-based page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "sg" }, { - "description": "DuckDuckGo region/locale code, e.g. us-en, uk-en, wt-wt (worldwide, the default)", + "description": "Restaurant code, from /foodpanda/search's code field", "in": "query", - "name": "region", + "name": "code", + "required": true, "type": "string", - "x-example": "us-en" + "x-example": "dxpr" } ], "produces": [ @@ -343713,7 +417708,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/duckduckgo.imageResponseDoc" + "$ref": "#/definitions/foodpanda.menuResponseDoc" } }, "400": { @@ -343728,18 +417723,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -343752,41 +417735,46 @@ "ApiKeyAuth": [] } ], - "summary": "Search DuckDuckGo image results", + "summary": "Get one foodpanda restaurant's menu with prices", "tags": [ - "DuckDuckGo Search" + "Foodpanda" ] } }, - "/duckduckgo/news": { + "/foodpanda/restaurant/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns DuckDuckGo news results for a query string: title, destination URL, source, excerpt, thumbnail, and relative/published time, plus page-based pagination.", - "operationId": "duckduckgo-news", + "description": "Returns a sample of real customer reviews for one restaurant -- author name, publish date, review text, and a 1-5 rating. This is the curated sample the restaurant's own storefront page embeds for search-engine rich results, not the full review corpus a logged-in customer would see in the app; the number returned scales with the restaurant's popularity rather than being a fixed cap, and can be empty for a restaurant with few or no reviews.", + "operationId": "foodpanda-restaurant-reviews", "parameters": [ { - "description": "Search query", + "description": "Delivery Hero market the restaurant belongs to. Defaults to sg.", + "enum": [ + "sg", + "pk", + "bd", + "hk", + "my", + "ph", + "la", + "kh", + "tw", + "mm" + ], "in": "query", - "name": "q", - "required": true, + "name": "market", "type": "string", - "x-example": "openai" - }, - { - "description": "1-based page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "sg" }, { - "description": "DuckDuckGo region/locale code, e.g. us-en, uk-en, wt-wt (worldwide, the default)", + "description": "Restaurant code, from /foodpanda/search's code field", "in": "query", - "name": "region", + "name": "code", + "required": true, "type": "string", - "x-example": "us-en" + "x-example": "dxpr" } ], "produces": [ @@ -343796,7 +417784,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/duckduckgo.newsResponseDoc" + "$ref": "#/definitions/foodpanda.reviewsResponseDoc" } }, "400": { @@ -343811,18 +417799,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -343835,64 +417811,75 @@ "ApiKeyAuth": [] } ], - "summary": "Search DuckDuckGo news results", + "summary": "Get a sample of one foodpanda restaurant's customer reviews", "tags": [ - "DuckDuckGo Search" + "Foodpanda" ] } }, - "/duckduckgo/search": { + "/foodpanda/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns DuckDuckGo web search results for a query string: title, destination URL, description, and hostname, plus page-based pagination. DuckDuckGo wraps every result link in its own click-tracking redirect; this endpoint always returns the decoded destination URL, never the raw redirect link.", - "operationId": "duckduckgo-search", + "description": "Returns restaurants delivering to a latitude/longitude in a foodpanda market, optionally filtered by a numeric cuisine id (call foodpanda_search_cuisines for the live, location-scoped set of valid ids). Each restaurant carries its code (the value the restaurant and menu endpoints take), name, address, coordinates, budget tier, rating, cuisines, minimum order amount and delivery fee, delivery/pickup availability, and a hero image. A location with no coverage returns an empty list rather than an error.", + "operationId": "foodpanda-search", "parameters": [ { - "description": "Search query", + "description": "Delivery Hero market. Defaults to sg.", + "enum": [ + "sg", + "pk", + "bd", + "hk", + "my", + "ph", + "la", + "kh", + "tw", + "mm" + ], "in": "query", - "name": "q", - "required": true, + "name": "market", "type": "string", - "x-example": "openai" + "x-example": "sg" }, { - "description": "1-based page number, defaults to 1", + "description": "Search center latitude", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "latitude", + "required": true, + "type": "number", + "x-example": 1.3521 }, { - "description": "DuckDuckGo region/locale code, e.g. us-en, uk-en, wt-wt (worldwide, the default)", + "description": "Search center longitude", "in": "query", - "name": "region", - "type": "string", - "x-example": "us-en" + "name": "longitude", + "required": true, + "type": "number", + "x-example": 103.8198 }, { - "description": "Restrict results to a recency window", - "enum": [ - "d", - "w", - "m", - "y" - ], + "description": "Numeric cuisine id to filter by. Cuisine ids are location- and market-scoped, not a fixed global enum -- call foodpanda_search_cuisines with the same market/latitude/longitude to get the valid id set for this location", "in": "query", - "name": "time_range", - "type": "string" + "name": "cuisine_id", + "type": "integer", + "x-example": 44 }, { - "description": "Safe search level, defaults to DuckDuckGo's own moderate setting when omitted", - "enum": [ - "strict", - "moderate", - "off" - ], + "description": "Restaurants to return, clamped to 50 (default 20)", "in": "query", - "name": "safe_search", - "type": "string" + "name": "limit", + "type": "integer", + "x-example": 20 + }, + { + "description": "Result offset for pagination (default 0)", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -343902,7 +417889,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/duckduckgo.searchResponseDoc" + "$ref": "#/definitions/foodpanda.searchResponseDoc" } }, "400": { @@ -343911,24 +417898,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -343941,34 +417910,54 @@ "ApiKeyAuth": [] } ], - "summary": "Search DuckDuckGo web results", + "summary": "Search foodpanda restaurants near a location", "tags": [ - "DuckDuckGo Search" + "Foodpanda" ] } }, - "/duckduckgo/shopping": { + "/foodpanda/search/cuisines": { "get": { "consumes": [ "application/json" ], - "description": "Returns DuckDuckGo shopping results for a query string: title, brand, merchant, description, price, rating, and review count, plus total page count. DuckDuckGo's shopping vertical is ad-funded, syndicated product listings, not organic content; every product link is wrapped in an ad-click-tracking redirect with no clean destination to unwrap, so no destination URL is returned. DuckDuckGo's own pagination token for this vertical is an opaque per-response blob rather than a plain page offset, so only the first page is supported.", - "operationId": "duckduckgo-shopping", + "description": "Returns foodpanda's own live cuisine catalog for a latitude/longitude in a foodpanda market -- the exact facet list (with real, live restaurant counts) the site's own search page cuisine filter sidebar is populated from. Every entry's id is a valid value for /foodpanda/search's cuisine_id parameter. Cuisine ids are location- and market-scoped, not a fixed global enum: the same coordinate in a different neighborhood, or a different market, can return a different id/count set entirely, so call this endpoint with the same market/latitude/longitude you intend to search rather than reusing ids captured elsewhere.", + "operationId": "foodpanda-search-cuisines", "parameters": [ { - "description": "Search query", + "description": "Delivery Hero market. Defaults to sg.", + "enum": [ + "sg", + "pk", + "bd", + "hk", + "my", + "ph", + "la", + "kh", + "tw", + "mm" + ], "in": "query", - "name": "q", - "required": true, + "name": "market", "type": "string", - "x-example": "running shoes" + "x-example": "sg" }, { - "description": "DuckDuckGo market code, e.g. us-en, uk-en", + "description": "Search center latitude", "in": "query", - "name": "region", - "type": "string", - "x-example": "us-en" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 1.3521 + }, + { + "description": "Search center longitude", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": 103.8198 } ], "produces": [ @@ -343978,7 +417967,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/duckduckgo.shoppingResponseDoc" + "$ref": "#/definitions/foodpanda.cuisinesResponseDoc" } }, "400": { @@ -343987,24 +417976,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -344017,43 +417988,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search DuckDuckGo shopping results", + "summary": "Get foodpanda's live cuisine filter catalog for a location", "tags": [ - "DuckDuckGo Search" + "Foodpanda" ] } }, - "/duckduckgo/suggest": { + "/forbes/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns DuckDuckGo search-box autocomplete completions for a query prefix, in DuckDuckGo's own ranking order. DuckDuckGo never returns more than 8 suggestions per prefix.", - "operationId": "duckduckgo-suggest", + "description": "Returns public Forbes article metadata and body content. The response preserves rich body HTML, paragraphs, headings, and public embed metadata. Accepts dated /sites//... and /councils//... URLs; it does not bypass login, subscription, or bot challenges.", + "operationId": "forbes-article", "parameters": [ { - "description": "Search query prefix", + "description": "Canonical HTTPS Forbes article URL", "in": "query", - "name": "q", + "name": "url", "required": true, "type": "string", - "x-example": "openai" - }, - { - "description": "Suggestions to return; defaults to 8, clamped to 1..8", - "in": "query", - "maximum": 8, - "minimum": 1, - "name": "count", - "type": "integer", - "x-example": 8 - }, - { - "description": "DuckDuckGo region code such as us-en, uk-en, de-de, or wt-wt (worldwide, the default)", - "in": "query", - "name": "region", - "type": "string", - "x-example": "us-en" + "x-example": "https://www.forbes.com/sites/example/2026/09/21/example-story/" } ], "produces": [ @@ -344063,7 +418015,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/duckduckgo.suggestResponseDoc" + "$ref": "#/definitions/forbes.articleResponseDoc" } }, "400": { @@ -344072,6 +418024,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -344096,41 +418054,30 @@ "ApiKeyAuth": [] } ], - "summary": "Suggest DuckDuckGo search queries", + "summary": "Forbes article content", "tags": [ - "DuckDuckGo Search" + "Forbes" ] } }, - "/duckduckgo/video": { + "/forbes/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns DuckDuckGo video results for a query string: title, destination URL, description, duration, thumbnail, publisher/uploader, published time, and view count, plus page-based pagination.", - "operationId": "duckduckgo-video", + "description": "Returns one Forbes contributor or staff author's public byline page: name, display type, bio, headshot, and their most recent bylined articles. This is the journalist byline page at forbes.com/sites//, distinct from forbes-person, which is a billionaire net-worth profile from Forbes's rich-list data.", + "operationId": "forbes-author", "parameters": [ { - "description": "Search query", + "description": "Forbes contributor slug, e.g. alisondurkee", "in": "query", - "name": "q", - "required": true, + "name": "slug", "type": "string", - "x-example": "openai" - }, - { - "description": "1-based page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "alisondurkee" }, { - "description": "DuckDuckGo region/locale code, e.g. us-en, uk-en, wt-wt (worldwide, the default)", + "description": "Canonical forbes.com/sites// URL, as an alternative to slug", "in": "query", - "name": "region", + "name": "url", "type": "string", - "x-example": "us-en" + "x-example": "https://www.forbes.com/sites/alisondurkee/" } ], "produces": [ @@ -344140,7 +418087,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/duckduckgo.videoResponseDoc" + "$ref": "#/definitions/forbes.authorResponseDoc" } }, "400": { @@ -344179,26 +418126,37 @@ "ApiKeyAuth": [] } ], - "summary": "Search DuckDuckGo video results", + "summary": "Forbes contributor/staff author profile", "tags": [ - "DuckDuckGo Search" + "Forbes" ] } }, - "/dunkin/directory": { + "/forbes/billionaires": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one level of Dunkin's store directory tree. Omit path for the root, which lists every US state Dunkin operates in; pass a state's path (e.g. \"ny\") to list its cities, or a state/city path (e.g. \"ny/new-york\") to list its stores. Each child carries its name, path, URL and how many stores sit under that branch. A child with is_store true is a store rather than another directory level -- pass its path (a store id) to GET /dunkin/store. This is a directory browse, not a proximity search: use GET /dunkin/nearby for a radius lookup.", - "operationId": "dunkin-directory", + "description": "Returns a paginated Forbes billionaires list from the public Forbes JSON feed. The default field set includes ranking, worth, person identity, citizenship, category, industry, organization, image, and biography fields.", + "operationId": "forbes-billionaires", "parameters": [ { - "description": "Directory path from a previous response's children[].path: a state code (e.g. \\", + "default": 2026, + "description": "Forbes list year", "in": "query", - "name": "path", - "type": "string", - "x-example": "ny" + "name": "year", + "type": "integer" + }, + { + "default": 50, + "description": "Page size (1-100)", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "default": 0, + "description": "Zero-based offset", + "in": "query", + "name": "start", + "type": "integer" } ], "produces": [ @@ -344208,7 +418166,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dunkin.directoryResponseDoc" + "$ref": "#/definitions/forbes.billionairesResponseDoc" } }, "400": { @@ -344229,6 +418187,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -344241,19 +418205,16 @@ "ApiKeyAuth": [] } ], - "summary": "Browse the Dunkin store directory", + "summary": "Forbes billionaires list", "tags": [ - "Dunkin" + "Forbes" ] } }, - "/dunkin/menu": { + "/forbes/categories": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Dunkin's national menu: item names, descriptions and photos grouped into categories (Iced Drinks, Hot Drinks, Frozen Drinks, Sandwiches & Wraps, Savory Bites, Donuts & Bakery, Snacks and Sides). Dunkin publishes one shared menu across every US store, so this takes no store parameter. Does not carry prices or nutrition -- pricing varies by market/franchisee and isn't part of this content.", - "operationId": "dunkin-menu", + "description": "Lists the current public Forbes navigation taxonomy, including business, money, innovation, leadership, lifestyle, Forbes Vetted, Advisor, Health, and their public subsections. Article promos, account surfaces, games, video-only links, and external hosts are excluded.", + "operationId": "forbes-categories", "produces": [ "application/json" ], @@ -344261,7 +418222,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dunkin.menuResponseDoc" + "$ref": "#/definitions/forbes.categoriesResponseDoc" } }, "429": { @@ -344270,6 +418231,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -344282,56 +418249,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Dunkin's national menu", + "summary": "Forbes public editorial sections", "tags": [ - "Dunkin" + "Forbes" ] } }, - "/dunkin/nearby": { + "/forbes/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Dunkin restaurants within a radius of a latitude/longitude, ordered nearest first, each with its distance in miles and kilometres, full address, phone, coordinates, the published week of hours, whether it's permanently closed, amenities, payment methods, pickup/delivery service types, which third-party delivery platforms are active, its Google Place id, timezone, and website/menu/order URLs. This is the proximity search the directory browse cannot do -- GET /dunkin/directory walks a state to city to store tree, which requires knowing the administrative path in advance. Each result carries the store id as `path`, which GET /dunkin/store also takes, so the two chain directly. `total_in_radius` reports how many stores fall inside the radius overall, which is usually far more than one page; use `offset` to walk it. A coordinate with no Dunkin nearby returns an empty list rather than an error.", - "operationId": "dunkin-nearby", + "description": "Returns up to 50 unique Forbes article cards for one navigation path. `section` is required and takes a `path` value from the Forbes categories endpoint, such as `/business/`. Each card has the title, article URL, description, author, and publication time and image URL when present. A blocked section returns an error, not an empty list.", + "operationId": "forbes-headlines", "parameters": [ { - "description": "Search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 40.7128 - }, - { - "description": "Search center longitude", + "description": "Forbes navigation path from /forbes/categories", "in": "query", - "name": "longitude", + "name": "section", "required": true, - "type": "number", - "x-example": -74.006 - }, - { - "description": "Search radius in miles, 1-100 (default 25)", - "in": "query", - "name": "radius", - "type": "integer", - "x-example": 25 - }, - { - "description": "Maximum stores to return, 1-50 (default 10)", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 - }, - { - "description": "Result offset for paging through total_in_radius (default 0)", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "type": "string", + "x-example": "/business/" } ], "produces": [ @@ -344341,7 +418276,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dunkin.nearbyResponseDoc" + "$ref": "#/definitions/forbes.headlinesResponseDoc" } }, "400": { @@ -344362,6 +418297,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -344374,27 +418315,24 @@ "ApiKeyAuth": [] } ], - "summary": "Find Dunkin stores near a coordinate, nearest first", + "summary": "Forbes section headlines", "tags": [ - "Dunkin" + "Forbes" ] } }, - "/dunkin/store": { + "/forbes/person": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Dunkin store: name, full postal address, phone, coordinates, opening hours for every day of the week, whether it's permanently closed, amenities (curbside pickup, drive-thru, wifi, kosher, turbo oven, K-Cup pods), Dunkin's own free-text feature labels, accepted payment methods, pickup/delivery service types, which third-party delivery platforms are active, the Google Place id, and the store's website/menu/order URLs. path is a store id -- from a /dunkin/directory child with is_store true, a /dunkin/nearby result's path, or the trailing digits of a dunkindonuts.com store URL. An unknown id returns a 404.", - "operationId": "dunkin-store", + "description": "Returns public Forbes JSON profile data plus the profile page's biography, real-time net-worth display, wealth history, personal facts, editor update, and list-appearance metadata.", + "operationId": "forbes-person", "parameters": [ { - "description": "A Dunkin store id, from a /dunkin/directory child with is_store true, a /dunkin/nearby result's path, or the trailing digits of a dunkindonuts.com store URL", + "description": "Forbes person URI", "in": "query", - "name": "path", + "name": "uri", "required": true, "type": "string", - "x-example": "307107" + "x-example": "vladimir-lisin" } ], "produces": [ @@ -344404,7 +418342,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/dunkin.storeResponseDoc" + "$ref": "#/definitions/forbes.personResponseDoc" } }, "400": { @@ -344425,6 +418363,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -344437,24 +418381,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Dunkin store's detail", + "summary": "Forbes person profile", "tags": [ - "Dunkin" + "Forbes" ] } }, - "/dw/article": { + "/foreignaffairs/article": { "get": { - "description": "Returns one Deutsche Welle article by its canonical `url`, either a standard `/en//a-` article or a `/en//live-` live-blog page. The response has the title, description, publish time, section, authors, lead image and body `paragraphs`. Blocked or malformed pages return an upstream error.", - "operationId": "dw-article", + "description": "Returns public article metadata and ordered body paragraphs from a canonical Foreign Affairs article URL. Incomplete, truncated, challenge, or contaminated upstream HTML is rejected as an upstream error.", + "operationId": "foreignaffairs-article", "parameters": [ { - "description": "Canonical DW article URL", + "description": "Canonical Foreign Affairs article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.dw.com/en/south-africa-11-killed-in-attack-on-house-party/a-79382743" + "x-example": "https://www.foreignaffairs.com/united-states/americas-attrition-trap" } ], "produces": [ @@ -344464,7 +418408,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/foreignaffairs.articleResponseDoc" } }, "400": { @@ -344479,6 +418423,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -344491,24 +418441,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get DW article content", + "summary": "Extract a Foreign Affairs article", "tags": [ - "DW" + "ForeignAffairs" ] } }, - "/dw/author": { + "/foreignaffairs/author": { "get": { - "description": "Returns one Deutsche Welle correspondent's public profile (name, expertise, biography) and their recent articles from a canonical person-profile URL. Many DW breaking-news items are bylined to the \"Deutsche Welle\" editorial organization rather than a named person; those articles have no person-profile URL to look up.", - "operationId": "dw-author", + "description": "Returns one Foreign Affairs contributor's public profile: name, bio, and the recent articles listed on their contributor page. Foreign Affairs does not paginate this page; it shows a fixed recent-article list.", + "operationId": "foreignaffairs-author", "parameters": [ { - "description": "Canonical www.dw.com/en//person- URL", + "description": "Author slug, e.g. robert-kagan", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "robert-kagan" + }, + { + "description": "Canonical foreignaffairs.com/authors/ URL; alternative to slug", "in": "query", "name": "url", - "required": true, "type": "string", - "x-example": "https://www.dw.com/en/cathrin-schaer/person-55594156" + "x-example": "https://www.foreignaffairs.com/authors/robert-kagan" } ], "produces": [ @@ -344518,7 +418474,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.dwAuthorResponseDoc" + "$ref": "#/definitions/foreignaffairs.authorResponseDoc" } }, "400": { @@ -344533,6 +418489,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -344545,46 +418507,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a DW author profile", + "summary": "Get a Foreign Affairs author profile", "tags": [ - "DW" + "ForeignAffairs" ] } }, - "/dw/headlines": { + "/foreignaffairs/headlines": { "get": { - "description": "Returns the latest Deutsche Welle headlines for one section. `section` is required and takes one of 18 slugs, such as `africa`, `middle-east`, `germany`, `climate`, `migration`, `human-rights`, `business` or `sports`. Each item has its title and URL, plus an image when the card shows one.", - "operationId": "dw-headlines", - "parameters": [ - { - "description": "DW section slug", - "enum": [ - "africa", - "asia", - "europe", - "latin-america", - "middle-east", - "north-america", - "germany", - "climate", - "equality", - "health", - "human-rights", - "migration", - "technology", - "business", - "science", - "environment", - "culture", - "sports" - ], - "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "africa" - } - ], + "description": "Returns fresh Foreign Affairs headlines from the site's public, site-wide RSS feed. Article pages and account state are not required.", + "operationId": "foreignaffairs-headlines", "produces": [ "application/json" ], @@ -344592,11 +418524,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/foreignaffairs.headlinesResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -344613,16 +418545,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get DW section headlines", + "summary": "Get Foreign Affairs site-wide headlines", "tags": [ - "DW" + "ForeignAffairs" ] } }, - "/dw/news": { + "/foreignaffairs/topic": { "get": { - "description": "Returns the current Deutsche Welle top stories. Each item has its title, URL, summary and publication time. Takes no parameters; use `dw-headlines` for a single region, topic or category.", - "operationId": "dw-news", + "description": "Returns the newest items from one Foreign Affairs topic RSS feed. Discover accepted values with foreignaffairs-topics; unknown topic values are rejected before upstream I/O.", + "operationId": "foreignaffairs-topic", + "parameters": [ + { + "description": "Foreign Affairs topic slug from foreignaffairs-topics", + "in": "query", + "name": "topic", + "required": true, + "type": "string", + "x-example": "economics" + } + ], "produces": [ "application/json" ], @@ -344630,7 +418572,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/foreignaffairs.topicResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -344645,16 +418599,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get DW top stories", + "summary": "Get a Foreign Affairs topic feed", "tags": [ - "DW" + "ForeignAffairs" ] } }, - "/dw/sections": { + "/foreignaffairs/topics": { "get": { - "description": "Lists the DW English-edition sections accepted by `dw-headlines`, grouped under the site's three navigation groups: regions, topics and categories. Each entry has a stable `slug`, display `name` and the section `url`. Takes no parameters.", - "operationId": "dw-sections", + "description": "Lists the 19 Foreign Affairs topics accepted by the topic endpoint, such as `economics`, `nato`, `sanctions` and `us-foreign-policy`. Each topic has its `slug`, display name and RSS `feed_url`. It takes no parameters.", + "operationId": "foreignaffairs-topics", "produces": [ "application/json" ], @@ -344662,7 +418616,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/foreignaffairs.topicsResponseDoc" } } }, @@ -344671,27 +418625,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get DW sections", + "summary": "List Foreign Affairs topic feeds", "tags": [ - "DW" + "ForeignAffairs" ] } }, - "/ebay/item/{item_id}": { + "/foreignpolicy/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the details of one eBay listing by `item_id`: title, link, images, price and price text, condition, availability, item specifics, description, location and shipping. It also carries the seller's name, store, feedback score, followers and items sold, along with the listing's rating and rating count.", - "operationId": "ebay-item", + "description": "Returns a public Foreign Policy article's metadata and full body paragraphs from a canonical article URL. is_gated reports the site's own content-tier marker; the full body is always returned regardless, since Foreign Policy serves it in full to anonymous requests either way.", + "operationId": "foreignpolicy-article", "parameters": [ { - "description": "eBay item ID", - "in": "path", - "name": "item_id", + "description": "Canonical foreignpolicy.com article URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "196435705622" + "x-example": "https://foreignpolicy.com/2026/04/15/china-ports-maritime-power/" } ], "produces": [ @@ -344701,7 +418652,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ebay.itemResponseDoc" + "$ref": "#/definitions/foreignpolicy.articleResponseDoc" } }, "400": { @@ -344722,12 +418673,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -344740,56 +418685,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get eBay item details", + "summary": "Get Foreign Policy article content", "tags": [ - "eBay" + "ForeignPolicy" ] } }, - "/ebay/live/streams": { + "/foreignpolicy/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists live and upcoming eBay Live streams for one category channel, set with `category` (default `explore`; other values are channel ids such as `IPqZx79LNuwFcSVt` for Sports Singles). Each stream has its title, state, start time, watch count, hosts, tags and preview media. Host feedback is not included. Page on with `next_request_number` and `session_id`, passed back as `request_number` and `session_id`.", - "operationId": "ebay-live-streams", + "description": "Returns one Foreign Policy contributor's public profile: name, bio, and their recent articles. Further articles load behind a client-side control this endpoint does not follow, so this is the author page's initial recent-article list, not the contributor's full history.", + "operationId": "foreignpolicy-author", "parameters": [ { - "description": "eBay Live category channel, defaults to explore", - "enum": [ - "explore", - "IPqZx79LNuwFcSVt", - "oHjQFTlZ5cYgWkjB", - "l68DJtBAVZge4x4n", - "2Nk3OYiOJHfXqpWG", - "5quuEnjO3axyz46U", - "nGpMTpm13Q86Eaoo", - "sYRxeaskGmNC6xaB", - "iYaYo88zN2vtQorh", - "GYAbsFw6onSNloAb", - "WJ9zLwYjK8njaBtN", - "rALkRyk8gXHzIBR6", - "DNta0sJ8Y6NXZsC9", - "GU4UfBzZSF4jiteS", - "IO7Oih07PtNJSWhU", - "cF4xtF8z9riubmLh", - "bywKDIdtxhi4hUSO" - ], - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Pagination cursor from a previous response's next_request_number, defaults to 0", + "description": "Author slug, e.g. anne-applebaum", "in": "query", - "name": "request_number", - "type": "integer" + "name": "slug", + "type": "string", + "x-example": "anne-applebaum" }, { - "description": "Pagination session id from a previous response's session_id", + "description": "Canonical foreignpolicy.com/author// URL; alternative to slug", "in": "query", - "name": "session_id", - "type": "string" + "name": "url", + "type": "string", + "x-example": "https://foreignpolicy.com/author/anne-applebaum/" } ], "produces": [ @@ -344799,7 +418718,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ebay.liveStreamsResponseDoc" + "$ref": "#/definitions/foreignpolicy.authorResponseDoc" } }, "400": { @@ -344808,14 +418727,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -344832,29 +418751,16 @@ "ApiKeyAuth": [] } ], - "summary": "List eBay Live streams", + "summary": "Get a Foreign Policy author profile", "tags": [ - "eBay" + "ForeignPolicy" ] } }, - "/ebay/live/streams/batch": { + "/foreignpolicy/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns summaries for several eBay Live streams in one call. `ids` is required and takes up to 9 stream ids, comma-separated or repeated. Each stream has its title, state, watch count, hosts, tags and preview media, without the per-host feedback summary. Ids that do not resolve are silently omitted, and the order may differ from the request.", - "operationId": "ebay-live-streams-batch", - "parameters": [ - { - "description": "One or more eBay Live stream/event ids, up to 9. Comma-separated or repeated query values are both accepted.", - "in": "query", - "name": "ids", - "required": true, - "type": "string", - "x-example": "FncRQ8VJGxKzLase" - } - ], + "description": "Returns fresh headlines from Foreign Policy's public, site-wide RSS feed. There is no section parameter: use foreignpolicy-topic to scope to one category or tag.", + "operationId": "foreignpolicy-headlines", "produces": [ "application/json" ], @@ -344862,13 +418768,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ebay.liveStreamsBatchResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/foreignpolicy.headlinesResponseDoc" } }, "429": { @@ -344877,12 +418777,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -344895,29 +418789,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get multiple eBay Live streams", + "summary": "Get Foreign Policy site-wide headlines", "tags": [ - "eBay" + "ForeignPolicy" ] } }, - "/ebay/live/streams/{id}": { + "/foreignpolicy/live": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one eBay Live stream or event by `id`, taken from the `streams[].id` of the stream list. The response has title, description, state, start and end times, viewer, watch and like counts, tags, channels and the live, preview and replay URLs. Each host carries a 365-day feedback summary and four average ratings. An unknown id returns `404`.", - "operationId": "ebay-live-stream", - "parameters": [ - { - "description": "eBay Live stream/event id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "qrJnMkM8X2hJuIf3" - } - ], + "description": "Returns Foreign Policy's public FP Live conversation directory. The upstream renders the complete all-conversations list and applies year filtering in the browser.", + "operationId": "foreignpolicy-live", "produces": [ "application/json" ], @@ -344925,19 +418806,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ebay.liveStreamResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/foreignpolicy.liveResponseDoc" } }, "429": { @@ -344946,12 +418815,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -344964,27 +418827,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get an eBay Live stream", + "summary": "List Foreign Policy Live conversations", "tags": [ - "eBay" + "ForeignPolicy" ] } }, - "/ebay/live/streams/{id}/items": { + "/foreignpolicy/live-detail": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the items currently featured in an eBay Live stream, identified by the required event `id`. Each item has its listing id, title, price and currency, bid count, sale type, leader and winner usernames, and `auction_status` (`READY`, `LIVE` or `ENDED`). A stream with no featured items, or an unknown id, returns an empty `items` array.", - "operationId": "ebay-live-stream-items", + "description": "Returns one public FP Live conversation by the slug returned by foreignpolicy-live, including its description and any embedded video highlight metadata.", + "operationId": "foreignpolicy-live-detail", "parameters": [ { - "description": "eBay Live stream/event id", - "in": "path", - "name": "id", + "description": "Foreign Policy FP Live conversation slug", + "in": "query", + "name": "live", "required": true, "type": "string", - "x-example": "qrJnMkM8X2hJuIf3" + "x-example": "ama-ask-me-anything-ukraine" } ], "produces": [ @@ -344994,7 +418854,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ebay.liveStreamItemsResponseDoc" + "$ref": "#/definitions/foreignpolicy.liveDetailResponseDoc" } }, "400": { @@ -345003,14 +418863,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -345027,28 +418887,24 @@ "ApiKeyAuth": [] } ], - "summary": "List an eBay Live stream's featured items", + "summary": "Get a Foreign Policy Live conversation", "tags": [ - "eBay" + "ForeignPolicy" ] } }, - "/ebay/search": { - "post": { - "consumes": [ - "application/json" - ], - "description": "Searches eBay listings by keyword from a JSON body, with page, page size (60, 120 or 240) and a listing-status filter (`active`, `sold`, `completed` or `sold_completed`). Each result has the item id, title, link, image, price or price range, bid count, seller and rating, location, shipping information, and sold and watcher counts.", - "operationId": "ebay-search", + "/foreignpolicy/project": { + "get": { + "description": "Returns a public Foreign Policy curated project hub and its current article cards. Use foreignpolicy-projects to discover live project slugs.", + "operationId": "foreignpolicy-project", "parameters": [ { - "description": "eBay search payload", - "in": "body", - "name": "option", + "description": "Foreign Policy project slug", + "in": "query", + "name": "project", "required": true, - "schema": { - "$ref": "#/definitions/ebay.SearchOption" - } + "type": "string", + "x-example": "asia" } ], "produces": [ @@ -345058,7 +418914,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ebay.searchResponseDoc" + "$ref": "#/definitions/foreignpolicy.projectResponseDoc" } }, "400": { @@ -345067,14 +418923,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -345091,27 +418947,25 @@ "ApiKeyAuth": [] } ], - "summary": "Search eBay listings", + "summary": "Get a Foreign Policy project hub", "tags": [ - "eBay" + "ForeignPolicy" ] } }, - "/ebay/seller/{seller}": { + "/foreignpolicy/projects": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the public profile of an eBay seller by the required `seller` username: display name, store name and URL, profile URL, description, location, member-since date, positive feedback percentage, feedback count, items sold, followers, and detailed seller ratings. Feedback details are included when eBay provides them.", - "operationId": "ebay-seller", + "description": "Returns one page of Foreign Policy's live public project directory. Follow next_page until it is zero to enumerate the current project slug space, then pass a slug to foreignpolicy-project.", + "operationId": "foreignpolicy-projects", "parameters": [ { - "description": "eBay seller username", - "in": "path", - "name": "seller", - "required": true, - "type": "string", - "x-example": "poloblade" + "default": 1, + "description": "1-based project-directory page, defaults to 1", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -345121,7 +418975,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ebay.sellerResponseDoc" + "$ref": "#/definitions/foreignpolicy.projectsResponseDoc" } }, "400": { @@ -345130,24 +418984,12 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -345160,27 +419002,44 @@ "ApiKeyAuth": [] } ], - "summary": "Get eBay seller profile", + "summary": "List Foreign Policy project hubs", "tags": [ - "eBay" + "ForeignPolicy" ] } }, - "/ebay/seller/{seller}/about": { + "/foreignpolicy/topic": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns seller about information from the eBay store about tab, including seller stats, top-rated status, optional location/member-since fields, and cleaned store categories.", - "operationId": "ebay-seller-about", + "description": "Returns one page of a public Foreign Policy category or tag archive (newest first). type selects the archive namespace and defaults to category; topic is the slug within it; page is 1-based.", + "operationId": "foreignpolicy-topic", "parameters": [ { - "description": "eBay seller username", - "in": "path", - "name": "seller", + "default": "category", + "description": "Archive namespace, defaults to category", + "enum": [ + "category", + "tag" + ], + "in": "query", + "name": "type", + "type": "string" + }, + { + "description": "Foreign Policy category or tag slug", + "in": "query", + "name": "topic", "required": true, "type": "string", - "x-example": "poloblade" + "x-example": "world-brief" + }, + { + "default": 1, + "description": "1-based archive page, defaults to 1", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -345190,7 +419049,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ebay.sellerAboutResponseDoc" + "$ref": "#/definitions/foreignpolicy.topicResponseDoc" } }, "400": { @@ -345211,12 +419070,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -345229,46 +419082,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get eBay seller about details", + "summary": "Get Foreign Policy category or tag archive", "tags": [ - "eBay" + "ForeignPolicy" ] } }, - "/ebay/seller/{seller}/feedback": { + "/formula1/driver": { "get": { "consumes": [ "application/json" ], - "description": "Returns the feedback eBay shows for a seller, identified by the required `seller` username. The response has the total feedback count, positive feedback percentage, overall rating summary, detailed seller ratings, and review cards with buyer, comment, rating, period and verified-purchase flag. Page with `page` (default 1) and `per_page` (24, 48 or 72; default 48), using `has_more` and `next_page`.", - "operationId": "ebay-seller-feedback", + "description": "Returns one driver profile: full name, team, nationality and car number, the season the statistics describe, the current-season statistics (grand prix and sprint results, points and positions) and the career statistics, plus identity facts such as date and place of birth. The nested-statistics label and value are kept as text so suffixed values such as \"1 (x9)\" survive unchanged.", + "operationId": "formula1-driver", "parameters": [ { - "description": "eBay seller username", - "in": "path", - "name": "seller", + "description": "Driver profile slug from a season page or standings row, such as kimi-antonelli example(kimi-antonelli)", + "in": "query", + "name": "driver_slug", "required": true, "type": "string", - "x-example": "poloblade" - }, - { - "default": 1, - "description": "Feedback page number", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "default": 48, - "description": "Reviews per page", - "enum": [ - 24, - 48, - 72 - ], - "in": "query", - "name": "per_page", - "type": "integer" + "x-example": "kimi-antonelli" } ], "produces": [ @@ -345278,7 +419112,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ebay.sellerFeedbackResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.DriverResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -345299,12 +419145,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -345317,36 +419157,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get eBay seller feedback", + "summary": "One Formula 1 driver profile", "tags": [ - "eBay" + "Formula1" ] } }, - "/ebay/seller/{seller}/shop": { + "/formula1/driver-grid": { "get": { "consumes": [ "application/json" ], - "description": "Lists the items in an eBay seller's shop, identified by the required `seller` username, one page at a time with `page` (default 1). Each result has its item id, title, link, image, price or price range, shipping note, location, bid count and watcher count. The response gives the `total` and a `has_more` flag.", - "operationId": "ebay-seller-shop", - "parameters": [ - { - "description": "eBay seller username", - "in": "path", - "name": "seller", - "required": true, - "type": "string", - "x-example": "poloblade" - }, - { - "default": 1, - "description": "Shop page number", - "in": "query", - "name": "page", - "type": "integer" - } - ], + "description": "Returns the current race grid: each driver's first and last name, team, nationality, team colour, profile slug and profile URL. The grid page has no season selector (a season query is ignored upstream), so the route describes the season the page header names and reports that season in the payload. The grid is the current race line-up and can be smaller than the standings row set, which also lists mid-season substitutes.", + "operationId": "formula1-driver-grid", "produces": [ "application/json" ], @@ -345354,7 +419177,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ebay.sellerShopResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.DriverGridResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -345375,12 +419210,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -345393,24 +419222,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get eBay seller shop listings", + "summary": "The Formula 1 driver grid the site currently shows", "tags": [ - "eBay" + "Formula1" ] } }, - "/economictimes/article": { + "/formula1/driver-season-results": { "get": { - "description": "Returns public Economic Times article metadata (title, author(s), published/updated dates, section, lead image) and body paragraphs from a canonical article URL. An ETPrime subscription-gated story returns a permission error instead of a truncated or fabricated body.", - "operationId": "economictimes-article", + "consumes": [ + "application/json" + ], + "description": "Returns one driver's per-round results for a season: round, Grand Prix name, weekend date, the constructor the driver raced for in that round, finishing position or a non-numeric classification such as DNF, NC or DSQ, and the points scored. The page lists the rounds the driver appears in, not every round of the championship. The driver code is the page's real key; the slug only builds the URL and a wrong slug still serves the driver.", + "operationId": "formula1-driver-season-results", "parameters": [ { - "description": "Canonical Economic Times article URL", + "description": "Uppercase driver code from formula1-driver-standings, such as ANDANT01 example(ANDANT01)", "in": "query", - "name": "url", + "name": "driver_code", "required": true, "type": "string", - "x-example": "https://economictimes.indiatimes.com/markets/aif-pms/example-story/articleshow/134466306.cms" + "x-example": "ANDANT01" + }, + { + "description": "Four-digit championship year, 1950 through the current season; defaults to the current season example(2026)", + "in": "query", + "name": "season", + "type": "integer", + "x-example": 2026 + }, + { + "description": "Driver profile slug used only in the upstream URL; a placeholder is used when omitted example(kimi-antonelli)", + "in": "query", + "name": "driver_slug", + "type": "string", + "x-example": "kimi-antonelli" } ], "produces": [ @@ -345420,7 +419266,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.DriverSeasonResultsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -345429,14 +419287,14 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -345453,24 +419311,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get Economic Times article content", + "summary": "One Formula 1 driver's race-by-race results for a season", "tags": [ - "Economic Times" + "Formula1" ] } }, - "/economictimes/author": { + "/formula1/driver-standings": { "get": { - "description": "Returns an Economic Times reporter profile for a `url` like `https://economictimes.indiatimes.com/etreporter/author--.cms`. The response has the name, job title (role and desk in one string), biography, headshot and recent articles with title and URL. Job title, biography and image may be empty; no email field exists.", - "operationId": "economictimes-author", + "consumes": [ + "application/json" + ], + "description": "Returns one season's drivers' championship table: position, driver name and abbreviation, nationality, team, points, and the driver code, profile slug and standings URLs the page links to. The results archive covers 1950 through the current season.", + "operationId": "formula1-driver-standings", "parameters": [ { - "description": "Canonical Economic Times author URL", + "description": "Four-digit championship year, 1950 through the current season; defaults to the current season example(2026)", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://economictimes.indiatimes.com/etreporter/author-kshitij-anand-479257392.cms" + "name": "season", + "type": "integer", + "x-example": 2026 } ], "produces": [ @@ -345480,7 +419340,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.economicTimesAuthorResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.DriverStandingsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -345495,210 +419367,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get an Economic Times author profile", - "tags": [ - "Economic Times" - ] - } - }, - "/economictimes/headlines": { - "get": { - "description": "Returns the latest Economic Times headlines for one section. `section` is required and takes a slug such as `top-stories`, `markets-stocks`, `mf-mf-news`, `industry-banking-finance`, `jobs-fresher` or `news-india`. Each item has its title, URL, summary, publication time and image.", - "operationId": "economictimes-headlines", - "parameters": [ - { - "description": "Economic Times section slug", - "enum": [ - "top-stories", - "ai", - "ai-ai-insights", - "astrology-chalisa-bhajan", - "astrology-horoscope", - "astrology-love-horoscope", - "astrology-numerology-predictions", - "astrology-others", - "astrology-panchang", - "astrology-planets-transits", - "astrology-tarot-readings", - "astrology-us", - "industry", - "industry-auto", - "industry-banking-finance", - "industry-cons-products", - "industry-csr", - "industry-energy", - "industry-healthcare-biotech", - "industry-indl-goods-svs", - "industry-media-entertainment", - "industry-miscellaneous", - "industry-renewables", - "industry-services", - "industry-telecom", - "industry-transportation", - "jobs", - "jobs-c-suite", - "jobs-exams-results", - "jobs-fresher", - "jobs-government-jobs", - "jobs-hr-policies-trends", - "jobs-mid-career", - "magazines", - "magazines-et-magazine", - "magazines-luxury", - "magazines-panache", - "market-data", - "market-data-etlearn", - "markets", - "markets-aif-pms", - "markets-bonds", - "markets-commodities", - "markets-cryptocurrency", - "markets-digital-real-estate", - "markets-expert-view", - "markets-forex", - "markets-investment-ideas", - "markets-ipos-fpos", - "markets-market-moguls", - "markets-mind-over-money", - "markets-options", - "markets-stocks", - "markets-stocks-podcast", - "markets-us-stocks", - "markets-web-stories", - "mf", - "mf-analysis", - "mf-elss", - "mf-learn", - "mf-mf-news", - "mf-web-stories", - "news", - "news-top-trending-products", - "news-bengaluru-news", - "news-company", - "news-defence", - "news-economy", - "news-elections", - "news-environment", - "news-et-evoke", - "news-et-explains", - "news-india", - "news-international", - "news-latest-news", - "news-morning-brief-podcast", - "news-mumbai-news", - "news-new-updates", - "news-newsblogs", - "news-politics-and-nation", - "news-pune-news", - "news-science", - "news-sports", - "news-videos", - "nri", - "nri-country-pages", - "nri-invest", - "nri-latest-updates", - "nri-migrate", - "nri-study", - "nri-test-guide", - "nri-visit", - "nri-web-stories", - "nri-work", - "opinion", - "opinion-bliss-of-everyday-life", - "opinion-et-commentary", - "opinion-et-editorial", - "opinion-et-view", - "opinion-just-in-jest", - "opinion-speaking-tree", - "podcasts", - "prime", - "prime-collections", - "prime-consumer", - "prime-corporate-governance", - "prime-economy-and-policy", - "prime-energy", - "prime-environment", - "prime-fintech-and-bfsi", - "prime-infrastructure", - "prime-media-and-communications", - "prime-money-and-markets", - "prime-pharma-and-healthcare", - "prime-prime-decoder", - "prime-prime-vantage", - "prime-primeshots", - "prime-technology-and-startups", - "prime-transportation", - "small-biz", - "small-biz-entrepreneurship", - "small-biz-gst", - "small-biz-hr-leadership", - "small-biz-legal", - "small-biz-marketing-branding", - "small-biz-money", - "small-biz-policy-trends", - "small-biz-resources", - "small-biz-security-tech", - "small-biz-sme-sector", - "small-biz-sme-summits", - "small-biz-sustainability", - "small-biz-trade", - "tech", - "tech-artificial-intelligence", - "tech-catalysts", - "tech-funding", - "tech-information-tech", - "tech-newsletters", - "tech-startups", - "tech-tech-and-gadgets", - "tech-tech-bytes", - "tech-technology", - "wealth", - "wealth-borrow", - "wealth-earn", - "wealth-et-wealth", - "wealth-insure", - "wealth-invest", - "wealth-legal-will", - "wealth-mutual-funds", - "wealth-p2p", - "wealth-personal-finance-news", - "wealth-plan", - "wealth-real-estate", - "wealth-save", - "wealth-spend", - "wealth-tax" - ], - "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "top-stories" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" - } - }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -345715,16 +419385,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Economic Times section headlines", + "summary": "Formula 1 drivers' championship standings", "tags": [ - "Economic Times" + "Formula1" ] } }, - "/economictimes/news": { + "/formula1/filters": { "get": { - "description": "Returns the current Economic Times top stories. Each item has its title, URL and publication time, plus a summary for some stories. Takes no parameters; use `economictimes-headlines` for a single section.", - "operationId": "economictimes-news", + "consumes": [ + "application/json" + ], + "description": "Returns the pinned value space the Formula1 routes validate locally: the eleven session-result views with their page labels, the four season awards, the accepted season range per route class, the current season, and the discovery notes for driver codes, team values, meeting ids and the two slug spaces. The site publishes no value-listing endpoint for these; the values are read from its own page navigation and covered by exact-set tests. No upstream call is made.", + "operationId": "formula1-filters", "produces": [ "application/json" ], @@ -345732,13 +419405,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.FiltersResponse" + } + }, + "type": "object" + } + ] } }, "503": { @@ -345753,54 +419432,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Economic Times top stories", + "summary": "List the pinned Formula 1 request values", "tags": [ - "Economic Times" + "Formula1" ] } }, - "/economictimes/sections": { + "/formula1/json/awards": { "get": { - "description": "Returns the complete public section inventory accepted by /api/v1/economictimes/headlines: business/markets verticals, industry, tech, wealth, mutual funds, small business, NRI, careers, opinion, astrology, and ETPrime (subscription-gated) sections.", - "operationId": "economictimes-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get The Economic Times sections", - "tags": [ - "Economic Times" - ] - } - }, - "/email/verify": { - "post": { "consumes": [ "application/json" ], - "description": "Classifies up to 50 caller-supplied email addresses and returns each one's `status` (`verified` — the mailbox accepts mail; `risky` — catch-all, role or disposable; `invalid` — bad syntax or no MX; `unverified` — could not be determined) and `type` (`generic`, `role`, `personal`). Crawls nothing: pass the addresses you already hold. This is the same classifier the Contact API applies to addresses it discovers, so statuses are directly comparable. When `smtp_enabled` is false, mailbox probing was unavailable for the call and nothing can be reported `verified` — an honest `unverified` rather than a guess.", - "operationId": "email-verify", + "description": "Returns one season's award dropdown: the four award labels and the absolute extension path that returns each award's per-round winners. The award values match formula1-json-season-award's award enum.", + "operationId": "formula1-json-awards", "parameters": [ { - "description": "Addresses to verify", - "in": "body", - "name": "option", + "description": "Four-digit championship year, 1950 through next season example(2026)", + "in": "query", + "name": "season", "required": true, - "schema": { - "$ref": "#/definitions/contact.VerifyRequest" - } + "type": "integer", + "x-example": 2026 } ], "produces": [ @@ -345810,23 +419462,41 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/contact.verifyResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.JSONAwardsResponse" + } + }, + "type": "object" + } + ] } }, "400": { - "description": "Invalid input, or no usable address in the batch", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error during verification", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -345837,24 +419507,27 @@ "ApiKeyAuth": [] } ], - "summary": "Email verification — deliverability status for a batch of addresses", + "summary": "Formula 1 season awards from the JSON API", "tags": [ - "Web" + "Formula1" ] } }, - "/engadget/article": { + "/formula1/json/constructors": { "get": { - "description": "Returns public Engadget article metadata and body paragraphs from a canonical article URL. Engadget articles are free to read, so the full body is returned.", - "operationId": "engadget-article", + "consumes": [ + "application/json" + ], + "description": "Returns one season's constructor dropdown: each team's value (the standings identifier), name, logo image and team colour codes. This is the discovery surface for the team value formula1-team-season-results accepts.", + "operationId": "formula1-json-constructors", "parameters": [ { - "description": "Canonical Engadget article URL", + "description": "Four-digit championship year, 1950 through next season example(2026)", "in": "query", - "name": "url", + "name": "season", "required": true, - "type": "string", - "x-example": "https://www.engadget.com/2267229/meta-put-muse-in-a-tamagotchi-like-charm-device/" + "type": "integer", + "x-example": 2026 } ], "produces": [ @@ -345864,7 +419537,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.JSONConstructorsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -345879,6 +419564,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -345891,30 +419582,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Engadget article content", + "summary": "Formula 1 constructors from the JSON API", "tags": [ - "Engadget" + "Formula1" ] } }, - "/engadget/author": { + "/formula1/json/driver-assembly": { "get": { - "description": "Returns one Engadget author's public profile: name, biography, expertise, social links, and the latest stories listed on their page (a single fixed batch; the page has no further pagination).", - "operationId": "engadget-author", + "consumes": [ + "application/json" + ], + "description": "Returns one driver's full editorial assembly payload exactly as the API sends it: the driver reference and identifier, SEO copy, profile and logo images, shop link, results-archive CTA, pull quote, vertical video stories, gallery images and the related article/video assemblies. Use either `reference` (the alphanumeric driver code from formula1-json-drivers) or `identifier` (the driver slug), never both.", + "operationId": "formula1-json-driver-assembly", "parameters": [ { - "description": "Author slug, e.g. mariella-moon", + "description": "Alphanumeric driver reference from formula1-json-drivers, such as ALEALB01 example(ALEALB01)", "in": "query", - "name": "slug", + "name": "reference", "type": "string", - "x-example": "mariella-moon" + "x-example": "ALEALB01" }, { - "description": "Canonical engadget.com/author/ URL; alternative to slug", + "description": "Driver identifier (lowercase letters and hyphens) such as alexander-albon example(alexander-albon)", "in": "query", - "name": "url", + "name": "identifier", "type": "string", - "x-example": "https://www.engadget.com/author/mariella-moon/" + "x-example": "alexander-albon" } ], "produces": [ @@ -345924,7 +419618,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.engadgetAuthorResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.JSONDriverAssemblyResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -345939,6 +419645,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -345951,74 +419663,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Engadget author profile", + "summary": "One Formula 1 driver's editorial assembly", "tags": [ - "Engadget" + "Formula1" ] } }, - "/engadget/headlines": { + "/formula1/json/drivers": { "get": { - "description": "Returns the latest Engadget headlines for one category. `section` is required and takes one of 48 slugs such as `ai`, `gaming`, `apple`, `laptop-pc-reviews` or `transportation-evs`; other values return an invalid-parameter error. Small categories, such as buying guides, may hold only a few items.", - "operationId": "engadget-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns one season's driver dropdown: each driver's code (the value formula1-driver-season-results and the HTML standings rows use), display names, name format, avatar image and team colour codes. A season with no driver entries returns an empty list.", + "operationId": "formula1-json-drivers", "parameters": [ { - "description": "Engadget category slug", - "enum": [ - "ai", - "amazon", - "apple", - "apps", - "best-tech", - "big-tech", - "computer-accessories", - "computing", - "cybersecurity", - "entertainment", - "features", - "gaming", - "gaming-reviews", - "google", - "headphones-buying-guides", - "headphones-reviews", - "home-product-reviews", - "laptop-buying-guides", - "laptop-pc-reviews", - "laptops", - "meta", - "microsoft", - "mobile", - "news", - "nintendo", - "pc", - "photography-reviews", - "playstation", - "reviews", - "robotics", - "samsung", - "science", - "smart-home-buying-guides", - "smart-home-reviews", - "smartphone-reviews", - "smartphones", - "social-media", - "space", - "streaming", - "tablet-reviews", - "tablets", - "tomorrow", - "transportation-evs", - "tv-movies", - "vpn", - "wearable-reviews", - "wearables", - "xbox" - ], + "description": "Four-digit championship year, 1950 through next season example(2026)", "in": "query", - "name": "section", + "name": "season", "required": true, - "type": "string", - "x-example": "ai" + "type": "integer", + "x-example": 2026 } ], "produces": [ @@ -346028,7 +419693,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.JSONDriversResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -346037,37 +419714,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Engadget section headlines", - "tags": [ - "Engadget" - ] - } - }, - "/engadget/news": { - "get": { - "description": "Returns the current Engadget technology news. Each item has a title, URL, summary, publish time, author and image when available. Engadget articles are free to read. Takes no parameters; use `engadget-headlines` for a single category.", - "operationId": "engadget-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -346087,50 +419738,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get Engadget top stories", + "summary": "Formula 1 driver codes from the JSON API", "tags": [ - "Engadget" + "Formula1" ] } }, - "/engadget/sections": { + "/formula1/json/editorial": { "get": { - "description": "Lists the 48 Engadget categories accepted by `engadget-headlines`, such as `ai`, `cybersecurity`, `smartphone-reviews`, `space` and `xbox`. Each entry has the `slug`, display `name` and category feed `url`. Categories with an empty feed are not listed.", - "operationId": "engadget-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Engadget sections", - "tags": [ - "Engadget" - ] - } - }, - "/eonline/article": { - "get": { - "description": "Returns one E! News article by its `url`, in the form `https://www.eonline.com/news//`. The response has the title, description, publish time, byline, lead image, body `paragraphs` and `section`, which is the article's first tag. Photo galleries, videos and show pages are rejected; an unknown id returns not-found.", - "operationId": "eonline-article", + "description": "Returns one editorial resource exactly as the API sends it: the season event listing (every round with its event slug, official name, circuit facts and dates), the driver listing, the constructor listing, the atom race calendar (meeting dates with city and timezone) or the results archive metadata. The resource is a closed set; every resource except race-calendar requires a season, and race-calendar rejects one.", + "operationId": "formula1-json-editorial", "parameters": [ { - "description": "Canonical E! News article URL", + "description": "Resource: events, driver-listing, constructor-listing, race-calendar or results-archive", + "enum": [ + "events", + "driver-listing", + "constructor-listing", + "race-calendar", + "results-archive" + ], "in": "query", - "name": "url", + "name": "resource", "required": true, "type": "string", - "x-example": "https://www.eonline.com/news/1436400/inside-taylor-swift-dakota-johnsons-friendship" + "x-example": "events" + }, + { + "description": "Four-digit championship year; required for events, driver-listing, constructor-listing and results-archive, and not accepted for race-calendar example(2026)", + "in": "query", + "name": "season", + "type": "integer", + "x-example": 2026 } ], "produces": [ @@ -346140,7 +419782,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.JSONEditorialResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -346155,6 +419809,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -346167,26 +419827,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get E! News article content", + "summary": "Formula 1 editorial JSON resources", "tags": [ - "E! News" + "Formula1" ] } }, - "/eonline/author": { + "/formula1/json/event-tracker": { "get": { - "description": "Returns an E! News writer's `name` and the articles on their author page, about 45 per page, for a `url` like `https://www.eonline.com/authors/natalie-finn` (add `/page/` for older ones). There is no biography or photo. `published_at` is the page's own text, such as `18 minutes ago`, not a timestamp.", - "operationId": "eonline-author", - "parameters": [ - { - "description": "Canonical E! News author URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.eonline.com/authors/natalie-finn" - } + "consumes": [ + "application/json" ], + "description": "Returns the event tracker payload the site's own front end reads: the current season context (season year, current or next meeting key, event and season state), the current meeting's identity and dates, the live-timing and static replay base URLs, and any published race results. This is the current-event surface; the URLs it names are not fetched by any route (live timing stays out of scope).", + "operationId": "formula1-json-event-tracker", "produces": [ "application/json" ], @@ -346194,7 +419847,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.eonlineAuthorResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.JSONEventTrackerResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -346209,6 +419874,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -346221,38 +419892,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get an E! News author page", + "summary": "Formula 1 event tracker: current season context and live-timing source", "tags": [ - "E! News" + "Formula1" ] } }, - "/eonline/headlines": { + "/formula1/json/meeting-datasets": { "get": { - "description": "Returns up to 30 E! News headlines for one section. `section` is required and must be one of `top_stories`, `tv`, `movies`, `music`, `celebrities`, `couples`, `royals`, `red_carpet`, `influencer`, `style`, `fashion` or `shop`. Each item has its title, URL, summary, publication time, author and image.", - "operationId": "eonline-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns one meeting's dataset dropdown: each dataset's label, its relative path (with the meeting or session parameters), whether it is a session result, whether it is available and the editorial session type. This is the discovery surface for the dataset values formula1-json-results accepts for that meeting; a sprint dataset appears only on sprint weekends.", + "operationId": "formula1-json-meeting-datasets", "parameters": [ { - "description": "E! News section slug", - "enum": [ - "top_stories", - "tv", - "movies", - "music", - "celebrities", - "couples", - "royals", - "red_carpet", - "influencer", - "style", - "fashion", - "shop" - ], + "description": "Four-digit championship year example(2026)", "in": "query", - "name": "section", + "name": "season", "required": true, - "type": "string", - "x-example": "top_stories" + "type": "integer", + "x-example": 2026 + }, + { + "description": "Numeric meeting id from formula1-json-meetings example(1299)", + "in": "query", + "name": "meeting", + "required": true, + "type": "integer", + "x-example": 1299 } ], "produces": [ @@ -346262,7 +419930,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.JSONMeetingDatasetsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -346271,37 +419951,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get E! News section headlines", - "tags": [ - "E! News" - ] - } - }, - "/eonline/news": { - "get": { - "description": "Returns up to 30 top stories from the US edition of E! News. Each item has its title, canonical article URL, summary, publication time, byline and thumbnail. Takes no parameters; use `eonline-headlines` for a single section.", - "operationId": "eonline-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -346321,93 +419975,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get E! News top stories", - "tags": [ - "E! News" - ] - } - }, - "/eonline/sections": { - "get": { - "description": "Lists the 12 E! News sections accepted by `eonline-headlines`, from `top_stories`, `tv` and `movies` to `royals`, `fashion` and `shop`. Each entry has the `slug`, `name` and feed `url`. The list is curated from the main navigation hubs and major tag feeds, not every tag.", - "operationId": "eonline-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get E! News sections", + "summary": "Formula 1 session datasets for one meeting, from the JSON API", "tags": [ - "E! News" + "Formula1" ] } }, - "/espn/athlete": { + "/formula1/json/meetings": { "get": { "consumes": [ "application/json" ], - "description": "Returns one athlete's bio/overview (name, position, jersey, physicals, current team). The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.", - "operationId": "espn-athlete", + "description": "Returns one season's meeting dropdown from formula1.com's own JSON API: each meeting's numeric id, name, country code and ISO country name, and which one the site marks as current. Use the id with formula1-json-results and formula1-json-meeting-datasets; the JSON API requires the site's embedded public-bundle key, which this service rediscovers on first use and refreshes when the gateway rejects it.", + "operationId": "formula1-json-meetings", "parameters": [ { - "description": "Sport key", - "enum": [ - "football", - "basketball", - "baseball", - "hockey", - "soccer" - ], - "in": "query", - "name": "sport", - "required": true, - "type": "string", - "x-example": "football" - }, - { - "description": "League key (must be valid for the sport)", - "enum": [ - "nfl", - "college-football", - "nba", - "wnba", - "mens-college-basketball", - "womens-college-basketball", - "mlb", - "nhl", - "eng.1", - "esp.1", - "ita.1", - "ger.1", - "fra.1", - "usa.1", - "uefa.champions" - ], - "in": "query", - "name": "league", - "required": true, - "type": "string", - "x-example": "nfl" - }, - { - "description": "Numeric ESPN athlete (player) id", + "description": "Four-digit championship year, 1950 through next season example(2026)", "in": "query", - "name": "athlete", + "name": "season", "required": true, - "type": "string", - "x-example": "3139477" + "type": "integer", + "x-example": 2026 } ], "produces": [ @@ -346417,7 +420005,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/espn.athleteResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.JSONMeetingsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -346450,67 +420050,40 @@ "ApiKeyAuth": [] } ], - "summary": "ESPN athlete", + "summary": "Formula 1 meeting ids from the JSON API", "tags": [ - "ESPN" + "Formula1" ] } }, - "/espn/game-summary": { + "/formula1/json/race-assembly": { "get": { "consumes": [ "application/json" ], - "description": "Returns one game's matchup, betting odds, and boxscore stat totals. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport. Get an `event` id from the scoreboard endpoint.", - "operationId": "espn-game-summary", + "description": "Returns one race weekend's full editorial assembly payload exactly as the API sends it: the structured data (fomRaceId, season, identifier, SEO copy, brand colour and images), the session schedule (race.meetingSessions with session codes, names and UTC start/end times), the circuit description, session link sets, promotional content and the related article/video assemblies. Use either `meeting` or `season`+`identifier`, never both. Identifiers match the race-hub event slugs from formula1-race-calendar.", + "operationId": "formula1-json-race-assembly", "parameters": [ { - "description": "Sport key", - "enum": [ - "football", - "basketball", - "baseball", - "hockey", - "soccer" - ], + "description": "Numeric meeting id from formula1-json-meetings; use it alone example(1299)", "in": "query", - "name": "sport", - "required": true, - "type": "string", - "x-example": "baseball" + "name": "meeting", + "type": "integer", + "x-example": 1299 }, { - "description": "League key (must be valid for the sport)", - "enum": [ - "nfl", - "college-football", - "nba", - "wnba", - "mens-college-basketball", - "womens-college-basketball", - "mlb", - "nhl", - "eng.1", - "esp.1", - "ita.1", - "ger.1", - "fra.1", - "usa.1", - "uefa.champions" - ], + "description": "Four-digit championship year for the season+identifier mode example(2026)", "in": "query", - "name": "league", - "required": true, - "type": "string", - "x-example": "mlb" + "name": "season", + "type": "integer", + "x-example": 2026 }, { - "description": "Numeric ESPN event (game) id", + "description": "Race identifier (lowercase letters, numbers, hyphens) such as brazil; required with season example(brazil)", "in": "query", - "name": "event", - "required": true, + "name": "identifier", "type": "string", - "x-example": "401816033" + "x-example": "brazil" } ], "produces": [ @@ -346520,7 +420093,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/espn.gameSummaryResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.JSONRaceAssemblyResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -346553,59 +420138,53 @@ "ApiKeyAuth": [] } ], - "summary": "ESPN game summary", + "summary": "One Formula 1 race weekend's editorial assembly", "tags": [ - "ESPN" + "Formula1" ] } }, - "/espn/news": { + "/formula1/json/results": { "get": { "consumes": [ "application/json" ], - "description": "Returns recent news articles (headline, description, link) for a league. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.", - "operationId": "espn-news", + "description": "Returns one session dataset's full JSON payload for a meeting, exactly as formula1.com's own API returns it: session metadata, the result rows with every field the API sends, classification codes, gaps, lap counts, points, qualifying segment times and the meeting block. The dataset is the closed set from formula1-json-meeting-datasets; practice requires its numbered session and every other dataset rejects one. The payload is kept verbatim in data, so no rich field is reshaped or dropped.", + "operationId": "formula1-json-results", "parameters": [ { - "description": "Sport key", - "enum": [ - "football", - "basketball", - "baseball", - "hockey", - "soccer" - ], + "description": "Numeric meeting id from formula1-json-meetings example(1299)", "in": "query", - "name": "sport", + "name": "meeting", "required": true, - "type": "string", - "x-example": "basketball" + "type": "integer", + "x-example": 1299 }, { - "description": "League key (must be valid for the sport)", + "description": "Dataset: race, qualifying, starting-grid, pitstops, fastestlaps, sprint, sprint-grid, sprint-shootout or practice", "enum": [ - "nfl", - "college-football", - "nba", - "wnba", - "mens-college-basketball", - "womens-college-basketball", - "mlb", - "nhl", - "eng.1", - "esp.1", - "ita.1", - "ger.1", - "fra.1", - "usa.1", - "uefa.champions" + "race", + "qualifying", + "starting-grid", + "pitstops", + "fastestlaps", + "sprint", + "sprint-grid", + "sprint-shootout", + "practice" ], "in": "query", - "name": "league", + "name": "dataset", "required": true, "type": "string", - "x-example": "nba" + "x-example": "race" + }, + { + "description": "Practice session, 1 to 3; required for the practice dataset and rejected for the others example(1)", + "in": "query", + "name": "session", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -346615,7 +420194,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/espn.newsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.JSONResultsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -346648,44 +420239,41 @@ "ApiKeyAuth": [] } ], - "summary": "ESPN league news", + "summary": "One Formula 1 session dataset's rich JSON payload", "tags": [ - "ESPN" + "Formula1" ] } }, - "/espn/rankings": { + "/formula1/json/season-award": { "get": { "consumes": [ "application/json" ], - "description": "Returns poll rankings (e.g. AP Top 25) for a college league. Rankings are only published for college leagues: the `sport` enum accepts `football` and `basketball`, and the `league` enum accepts `college-football`, `mens-college-basketball`, and `womens-college-basketball`.", - "operationId": "espn-rankings", + "description": "Returns one season award extension payload exactly as the API sends it: the award text, call-to-action, article or video tags, and the per-round winner data with classified times, driver and team references. The award enum is the closed set the JSON API publishes; a season that predates an award is a valid empty data list.", + "operationId": "formula1-json-season-award", "parameters": [ { - "description": "Sport key", - "enum": [ - "football", - "basketball" - ], + "description": "Four-digit championship year example(2026)", "in": "query", - "name": "sport", + "name": "season", "required": true, - "type": "string", - "x-example": "football" + "type": "integer", + "x-example": 2026 }, { - "description": "College league key", + "description": "Award: fastest-laps, pole-positions, fastest-pit-stops or driver-of-the-day", "enum": [ - "college-football", - "mens-college-basketball", - "womens-college-basketball" + "fastest-laps", + "pole-positions", + "fastest-pit-stops", + "driver-of-the-day" ], "in": "query", - "name": "league", + "name": "award", "required": true, "type": "string", - "x-example": "college-football" + "x-example": "pole-positions" } ], "produces": [ @@ -346695,7 +420283,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/espn.rankingsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.JSONSeasonAwardResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -346728,86 +420328,33 @@ "ApiKeyAuth": [] } ], - "summary": "ESPN poll rankings", + "summary": "One Formula 1 season award's rich JSON payload", "tags": [ - "ESPN" + "Formula1" ] } }, - "/espn/scoreboard": { + "/formula1/json/team-assembly": { "get": { "consumes": [ "application/json" ], - "description": "Returns games (scores, schedule, status, and odds when available) for a sport and league. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport. The `seasontype` enum accepts `1` (preseason), `2` (regular season), `3` (postseason), and `4` (offseason).", - "operationId": "espn-scoreboard", + "description": "Returns one team's full editorial assembly payload exactly as the API sends it: the team key and identifier, SEO copy, profile and logo images, shop link, profile text, vertical video stories, gallery images and the related article/video assemblies. Use either `key` (the numeric teamKey from formula1-json-editorial resource=constructor-listing) or `identifier` (the team slug), never both.", + "operationId": "formula1-json-team-assembly", "parameters": [ { - "description": "Sport key", - "enum": [ - "football", - "basketball", - "baseball", - "hockey", - "soccer" - ], - "in": "query", - "name": "sport", - "required": true, - "type": "string", - "x-example": "football" - }, - { - "description": "League key (must be valid for the sport)", - "enum": [ - "nfl", - "college-football", - "nba", - "wnba", - "mens-college-basketball", - "womens-college-basketball", - "mlb", - "nhl", - "eng.1", - "esp.1", - "ita.1", - "ger.1", - "fra.1", - "usa.1", - "uefa.champions" - ], + "description": "Numeric team key from the constructor listing, such as 543 example(543)", "in": "query", - "name": "league", - "required": true, + "name": "key", "type": "string", - "x-example": "nfl" + "x-example": "543" }, { - "description": "Date or range as YYYYMMDD, YYYYMMDD-YYYYMMDD, or YYYY; defaults to the current scoreboard", + "description": "Team identifier (lowercase letters, numbers and hyphens) such as mercedes example(mercedes)", "in": "query", - "name": "dates", + "name": "identifier", "type": "string", - "x-example": "20260910" - }, - { - "description": "Week number (football leagues)", - "in": "query", - "name": "week", - "type": "integer", - "x-example": 1 - }, - { - "description": "Season type", - "enum": [ - 1, - 2, - 3, - 4 - ], - "in": "query", - "name": "seasontype", - "type": "integer", - "x-example": 2 + "x-example": "mercedes" } ], "produces": [ @@ -346817,7 +420364,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/espn.scoreboardResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.JSONTeamAssemblyResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -346850,78 +420409,26 @@ "ApiKeyAuth": [] } ], - "summary": "ESPN scoreboard", + "summary": "One Formula 1 team's editorial assembly", "tags": [ - "ESPN" + "Formula1" ] } }, - "/espn/standings": { + "/formula1/meetings": { "get": { "consumes": [ "application/json" ], - "description": "Returns league standings grouped by conference/division. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport. The `seasontype` enum accepts `1` (preseason), `2` (regular season), and `3` (postseason).", - "operationId": "espn-standings", + "description": "Returns one season's Grand Prix weekends in championship order with the site's numeric meeting id, the results-archive slug, the Grand Prix name, the weekend date and the winner's race result once the round has run. The meeting id is the only stable race key and is the selector the session-results route takes; on a detail URL the season and slug segments are decorative.", + "operationId": "formula1-meetings", "parameters": [ { - "description": "Sport key", - "enum": [ - "football", - "basketball", - "baseball", - "hockey", - "soccer" - ], - "in": "query", - "name": "sport", - "required": true, - "type": "string", - "x-example": "football" - }, - { - "description": "League key (must be valid for the sport)", - "enum": [ - "nfl", - "college-football", - "nba", - "wnba", - "mens-college-basketball", - "womens-college-basketball", - "mlb", - "nhl", - "eng.1", - "esp.1", - "ita.1", - "ger.1", - "fra.1", - "usa.1", - "uefa.champions" - ], - "in": "query", - "name": "league", - "required": true, - "type": "string", - "x-example": "nfl" - }, - { - "description": "Four-digit season year; defaults to the current season", + "description": "Four-digit championship year, 1950 through the current season; defaults to the current season example(2026)", "in": "query", "name": "season", "type": "integer", - "x-example": 2024 - }, - { - "description": "Season type", - "enum": [ - 1, - 2, - 3 - ], - "in": "query", - "name": "seasontype", - "type": "integer", - "x-example": 2 + "x-example": 2026 } ], "produces": [ @@ -346931,7 +420438,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/espn.standingsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.MeetingsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -346964,67 +420483,26 @@ "ApiKeyAuth": [] } ], - "summary": "ESPN standings", + "summary": "Formula 1 meetings with numeric meeting ids for one season", "tags": [ - "ESPN" + "Formula1" ] } }, - "/espn/team": { + "/formula1/race-calendar": { "get": { "consumes": [ "application/json" ], - "description": "Returns one team's detail (identity, colors, record, standing summary). The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.", - "operationId": "espn-team", + "description": "Returns the season's published calendar: every Grand Prix weekend including future rounds and pre-season testing, with the race-hub event slug, the short and official event names, the host country, the parsed weekend start and end dates, the completed marker and the championship round. The event slug is the race-hub selector and is a different slug space from the results-archive slug; winners come from the season-results route.", + "operationId": "formula1-race-calendar", "parameters": [ { - "description": "Sport key", - "enum": [ - "football", - "basketball", - "baseball", - "hockey", - "soccer" - ], - "in": "query", - "name": "sport", - "required": true, - "type": "string", - "x-example": "football" - }, - { - "description": "League key (must be valid for the sport)", - "enum": [ - "nfl", - "college-football", - "nba", - "wnba", - "mens-college-basketball", - "womens-college-basketball", - "mlb", - "nhl", - "eng.1", - "esp.1", - "ita.1", - "ger.1", - "fra.1", - "usa.1", - "uefa.champions" - ], - "in": "query", - "name": "league", - "required": true, - "type": "string", - "x-example": "nfl" - }, - { - "description": "Team id (numeric) or abbreviation", + "description": "Four-digit championship year, 2018 through next season; defaults to the current season example(2026)", "in": "query", - "name": "team", - "required": true, - "type": "string", - "x-example": "KC" + "name": "season", + "type": "integer", + "x-example": 2026 } ], "produces": [ @@ -347034,7 +420512,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/espn.teamResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.RaceCalendarResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -347067,67 +420557,34 @@ "ApiKeyAuth": [] } ], - "summary": "ESPN team detail", + "summary": "Formula 1 race calendar for one season", "tags": [ - "ESPN" + "Formula1" ] } }, - "/espn/team-roster": { + "/formula1/race-hub": { "get": { "consumes": [ "application/json" ], - "description": "Returns a team's roster (players with position, jersey, age, and experience) plus head coach. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.", - "operationId": "espn-team-roster", + "description": "Returns one race weekend's hub: the event's official name, description, host location and weekend bounds from the page's schema.org structured data, the published session schedule with UTC start and end times, the circuit facts (length, first Grand Prix, lap count) and, once the race has run, the top-five result table. The event slug is the race-hub slug from formula1-race-calendar and is a different slug space from the results-archive slug.", + "operationId": "formula1-race-hub", "parameters": [ { - "description": "Sport key", - "enum": [ - "football", - "basketball", - "baseball", - "hockey", - "soccer" - ], - "in": "query", - "name": "sport", - "required": true, - "type": "string", - "x-example": "football" - }, - { - "description": "League key (must be valid for the sport)", - "enum": [ - "nfl", - "college-football", - "nba", - "wnba", - "mens-college-basketball", - "womens-college-basketball", - "mlb", - "nhl", - "eng.1", - "esp.1", - "ita.1", - "ger.1", - "fra.1", - "usa.1", - "uefa.champions" - ], + "description": "Race-hub event slug from formula1-race-calendar, such as brazil or united-arab-emirates example(brazil)", "in": "query", - "name": "league", + "name": "event_slug", "required": true, "type": "string", - "x-example": "nfl" + "x-example": "brazil" }, { - "description": "Team id (numeric) or abbreviation", + "description": "Four-digit championship year, 2018 through next season; defaults to the current season example(2026)", "in": "query", - "name": "team", - "required": true, - "type": "string", - "x-example": "KC" + "name": "season", + "type": "integer", + "x-example": 2026 } ], "produces": [ @@ -347137,7 +420594,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/espn.rosterResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.RaceHubResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -347170,59 +420639,40 @@ "ApiKeyAuth": [] } ], - "summary": "ESPN team roster", + "summary": "One Formula 1 race weekend hub", "tags": [ - "ESPN" + "Formula1" ] } }, - "/espn/teams": { + "/formula1/season-awards": { "get": { "consumes": [ "application/json" ], - "description": "Returns the full team list for a sport and league. The `sport` enum accepts `football`, `basketball`, `baseball`, `hockey`, and `soccer`. The `league` enum accepts `nfl`, `college-football`, `nba`, `wnba`, `mens-college-basketball`, `womens-college-basketball`, `mlb`, `nhl`, `eng.1`, `esp.1`, `ita.1`, `ger.1`, `fra.1`, `usa.1`, and `uefa.champions`; it must be valid for the chosen sport.", - "operationId": "espn-teams", + "description": "Returns one season award's per-round winner list: the DHL Fastest Lap, Pirelli Pole Position, DHL Fastest Pit Stop (a team award) or Salesforce Driver of the Day. Each row carries the round, numeric meeting id, Grand Prix name, winner and the award time where the page renders one. An award the site does not publish for the requested season returns HTTP 400 with an explicit message.", + "operationId": "formula1-season-awards", "parameters": [ { - "description": "Sport key", - "enum": [ - "football", - "basketball", - "baseball", - "hockey", - "soccer" - ], + "description": "Four-digit championship year, 1950 through the current season; defaults to the current season example(2026)", "in": "query", - "name": "sport", - "required": true, - "type": "string", - "x-example": "basketball" + "name": "season", + "type": "integer", + "x-example": 2026 }, { - "description": "League key (must be valid for the sport)", + "description": "Season award: fastest-laps, pole-positions, fastest-pit-stops or driver-of-the-day", "enum": [ - "nfl", - "college-football", - "nba", - "wnba", - "mens-college-basketball", - "womens-college-basketball", - "mlb", - "nhl", - "eng.1", - "esp.1", - "ita.1", - "ger.1", - "fra.1", - "usa.1", - "uefa.champions" + "fastest-laps", + "pole-positions", + "fastest-pit-stops", + "driver-of-the-day" ], "in": "query", - "name": "league", + "name": "award", "required": true, "type": "string", - "x-example": "nba" + "x-example": "pole-positions" } ], "produces": [ @@ -347232,7 +420682,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/espn.teamsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.SeasonAwardsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -347265,27 +420727,26 @@ "ApiKeyAuth": [] } ], - "summary": "ESPN team list", + "summary": "Formula 1 season award winners by round", "tags": [ - "ESPN" + "Formula1" ] } }, - "/etsy/listing/{id}": { + "/formula1/season-results": { "get": { "consumes": [ "application/json" ], - "description": "Returns the details of one Etsy listing by its numeric `id`: title, description, URL, price and currency, quantity, favorites, views, materials, tags, images and category. It also has the shop id and name, listing state, sold-out, customizable and digital flags, when it was made, shipping origin country, and create and update dates.", - "operationId": "etsy-listing", + "description": "Returns one season's completed rounds: round number, numeric meeting id, results-archive slug, Grand Prix name, weekend date, race winner with abbreviation, winning team, lap count and race time. A season that has not started yet is a valid empty result.", + "operationId": "formula1-season-results", "parameters": [ { - "description": "Numeric Etsy listing id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "1044347578" + "description": "Four-digit championship year, 1950 through the current season; defaults to the current season example(2026)", + "in": "query", + "name": "season", + "type": "integer", + "x-example": 2026 } ], "produces": [ @@ -347295,7 +420756,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/etsy.listingResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.SeasonResultsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -347316,12 +420789,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -347334,50 +420801,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Etsy listing detail", + "summary": "Formula 1 season results table", "tags": [ - "Etsy" + "Formula1" ] } }, - "/etsy/listing/{id}/reviews": { + "/formula1/seasons": { "get": { "consumes": [ "application/json" ], - "description": "Returns buyer reviews for an Etsy listing, identified by the numeric `id`. Start from `offset` (0-based, default 0) and order with `sort` (`newest`, `oldest`, `highest_rating`, `lowest_rating` or `most_relevant`). The response has the average rating and total rating count; each review has buyer, date, rating, text, language and whether the seller replied.", - "operationId": "etsy-listing-reviews", - "parameters": [ - { - "description": "Numeric Etsy listing id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "1044347578" - }, - { - "description": "0-based review offset", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 - }, - { - "description": "Review sort order", - "enum": [ - "newest", - "oldest", - "highest_rating", - "lowest_rating", - "most_relevant" - ], - "in": "query", - "name": "sort", - "type": "string", - "x-example": "newest" - } - ], + "description": "Returns every championship season the formula1.com results archive publishes, newest first, with the season the site currently defaults to marked as current. This is the discovery surface for the season parameter the other Formula 1 routes accept: the archive covers 1950 through the current season.", + "operationId": "formula1-seasons", "produces": [ "application/json" ], @@ -347385,7 +420821,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/etsy.listingReviewsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.SeasonsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -347406,12 +420854,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -347424,41 +420866,62 @@ "ApiKeyAuth": [] } ], - "summary": "Get Etsy listing reviews", + "summary": "Formula 1 seasons published by the results archive", "tags": [ - "Etsy" + "Formula1" ] } }, - "/etsy/search": { + "/formula1/session-results": { "get": { "consumes": [ "application/json" ], - "description": "Searches Etsy listings across shops for the required keywords `q`, in Etsy's default relevance order. Page with `offset` (default 0) and `limit` (default 36, max 100). The response gives the total match `count`, and each result has listing id, title, URL, image, price, shop name and rating, quantity and sold-out flag. Read `currency`, since it is not fixed to USD.", - "operationId": "etsy-search", + "description": "Returns one session's classified table for a meeting: race, qualifying, starting grid, practice 1 to 3, pit-stop summary, fastest laps or the three sprint sessions. The meeting id is the real selector; the season and slug parameters only build the upstream URL and are decorative on the site's own detail pages. A session the site has no data for (a sprint view on a non-sprint weekend, or a practice session the weekend did not run) is a valid empty result.", + "operationId": "formula1-session-results", "parameters": [ { - "description": "Search keywords", + "description": "Numeric meeting id from formula1-meetings, such as 1299 example(1299)", "in": "query", - "name": "q", + "name": "meeting_id", + "required": true, + "type": "integer", + "x-example": 1299 + }, + { + "description": "Session view: race-result, qualifying, starting-grid, practice-1, practice-2, practice-3, pit-stop-summary, fastest-laps, sprint-results, sprint-grid or sprint-qualifying", + "enum": [ + "race-result", + "qualifying", + "starting-grid", + "practice-1", + "practice-2", + "practice-3", + "pit-stop-summary", + "fastest-laps", + "sprint-results", + "sprint-grid", + "sprint-qualifying" + ], + "in": "query", + "name": "session", "required": true, "type": "string", - "x-example": "handmade mug" + "x-example": "race-result" }, { - "description": "0-based result offset", + "description": "Four-digit season used in the upstream URL only; the meeting id selects the data. Defaults to the current season example(2026)", "in": "query", - "name": "offset", + "name": "season", "type": "integer", - "x-example": 0 + "x-example": 2026 }, { - "description": "Page size (default 36, max 100)", + "description": "Results-archive slug used in the upstream URL only; the meeting id selects the data. Defaults to a fixed placeholder example(brazil)", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 36 + "name": "meeting_slug", + "type": "string", + "x-example": "brazil" } ], "produces": [ @@ -347468,7 +420931,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/etsy.searchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.SessionResultsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -347477,14 +420952,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -347501,34 +420976,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Etsy listings", + "summary": "One Formula 1 session result table by meeting id", "tags": [ - "Etsy" + "Formula1" ] } }, - "/etsy/shop/search": { + "/formula1/team": { "get": { "consumes": [ "application/json" ], - "description": "Searches Etsy shops by the required keyword `q`, returning up to `limit` shops (default 10). Each shop has its id, name, avatar, location, active listing count, open date and a vacation-mode flag.", - "operationId": "etsy-shop-search", + "description": "Returns one team profile: team name, the current drivers the profile lists with their profile slugs, the season the statistics describe, the current-season statistics and the career statistics, plus profile facts such as full team name, base, team chief and power unit.", + "operationId": "formula1-team", "parameters": [ { - "description": "Shop search keyword", + "description": "Team profile slug from a season page or standings row, such as mercedes example(mercedes)", "in": "query", - "name": "q", + "name": "team_slug", "required": true, "type": "string", - "x-example": "ceramic" - }, - { - "description": "Max shops to return (default 10)", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "x-example": "mercedes" } ], "produces": [ @@ -347538,7 +421006,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/etsy.shopSearchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.TeamResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -347547,14 +421027,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -347571,29 +421051,19 @@ "ApiKeyAuth": [] } ], - "summary": "Search Etsy shops", + "summary": "One Formula 1 team profile", "tags": [ - "Etsy" + "Formula1" ] } }, - "/etsy/shop/{id}": { + "/formula1/team-grid": { "get": { "consumes": [ "application/json" ], - "description": "Returns an Etsy shop profile: seller, headline, rating, and sold count. Accepts a numeric shop id or a shop name.", - "operationId": "etsy-shop", - "parameters": [ - { - "description": "Numeric Etsy shop id or shop name", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "gaguatelier" - } - ], + "description": "Returns the current team grid: each team's name, team colour, profile slug, profile URL and the drivers the card names. The team page has no season selector (a season query is ignored upstream), so the route describes the season the page header names and reports that season in the payload.", + "operationId": "formula1-team-grid", "produces": [ "application/json" ], @@ -347601,7 +421071,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/etsy.shopResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.TeamGridResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -347622,12 +421104,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -347640,48 +421116,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get Etsy shop profile", + "summary": "The Formula 1 team grid the site currently shows", "tags": [ - "Etsy" + "Formula1" ] } }, - "/etsy/shop/{id}/listings": { + "/formula1/team-season-results": { "get": { "consumes": [ "application/json" ], - "description": "Lists the listings in an Etsy shop, identified by the required `id` (a numeric shop id or a shop name). Narrow with `q` to filter within the shop's own catalogue, and page with `offset` (default 0) and `limit` (default 24). Each listing has its id, title, URL, image, price, currency, quantity, shop rating and sold-out flag.", - "operationId": "etsy-shop-listings", + "description": "Returns one team's per-round points for a season: round, Grand Prix name, weekend date and the points the team scored in that round. The page lists the rounds the team appears in. The team value comes from formula1-team-standings and the upstream page matches it case-insensitively, so Mercedes and mercedes both serve the same team.", + "operationId": "formula1-team-season-results", "parameters": [ { - "description": "Numeric Etsy shop id or shop name", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "gaguatelier" - }, - { - "description": "Keyword filter within the shop's own catalog", + "description": "Results-archive team value from formula1-team-standings, such as Mercedes or Williams-Renault; matched case-insensitively example(Mercedes)", "in": "query", - "name": "q", + "name": "team", + "required": true, "type": "string", - "x-example": "mug" - }, - { - "description": "0-based listing offset", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "x-example": "Mercedes" }, { - "description": "Page size (default 24)", + "description": "Four-digit championship year, 1950 through the current season; defaults to the current season example(2026)", "in": "query", - "name": "limit", + "name": "season", "type": "integer", - "x-example": 24 + "x-example": 2026 } ], "produces": [ @@ -347691,7 +421153,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/etsy.shopListingsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.TeamSeasonResultsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -347712,12 +421186,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -347730,41 +421198,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Etsy shop's listings", + "summary": "One Formula 1 team's race-by-race points for a season", "tags": [ - "Etsy" + "Formula1" ] } }, - "/etsy/shop/{id}/reviews": { + "/formula1/team-standings": { "get": { "consumes": [ "application/json" ], - "description": "Returns buyer reviews for an Etsy shop, identified by the required `id` (a numeric shop id or a shop name). Page with `offset` (default 0) and `limit` (default 14). The response has the average rating and total rating count. Each review has buyer, date, rating, text, language, the reviewed listing, and whether the seller replied.", - "operationId": "etsy-shop-reviews", + "description": "Returns one season's constructors' championship table: position, team, points and the team standings URL. The constructors' championship started in 1958; a pre-1958 season returns available=false with an empty table, and a season the site has not published yet returns an empty table.", + "operationId": "formula1-team-standings", "parameters": [ { - "description": "Numeric Etsy shop id or shop name", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "gaguatelier" - }, - { - "description": "0-based review offset", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 - }, - { - "description": "Page size (default 14)", + "description": "Four-digit championship year, 1950 through the current season; defaults to the current season example(2026)", "in": "query", - "name": "limit", + "name": "season", "type": "integer", - "x-example": 14 + "x-example": 2026 } ], "produces": [ @@ -347774,7 +421227,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/etsy.shopReviewsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/formula1.TeamStandingsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -347795,12 +421260,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -347813,24 +421272,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Etsy shop reviews", + "summary": "Formula 1 constructors' championship standings", "tags": [ - "Etsy" + "Formula1" ] } }, - "/euronews/article": { + "/fortune/article": { "get": { - "description": "Returns one Euronews English-edition article by its `url`, in the form `https://www.euronews.com/YYYY/MM/DD/`. The response has the title, description, publish and update times, section, authors, lead image and body `paragraphs`.", - "operationId": "euronews-article", + "description": "Returns one Fortune article by its canonical `url`. The response has the title, description, publish and update times, section, authors, lead image, body `paragraphs` and a `paywalled` flag. Subscriber-only or blocked articles return an upstream error.", + "operationId": "fortune-article", "parameters": [ { - "description": "Canonical Euronews article URL", + "description": "Canonical Fortune article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.euronews.com/2026/09/24/example-article-slug" + "x-example": "https://fortune.com/2026/09/21/example/" } ], "produces": [ @@ -347867,24 +421326,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get Euronews article content", + "summary": "Get Fortune article content", "tags": [ - "Euronews" + "Fortune" ] } }, - "/euronews/author": { + "/fortune/author": { "get": { - "description": "Returns a Euronews author profile for a `url` like `https://www.euronews.com/profiles/`. The response has the name, job title, editorial team, `social_links` (usually one X/Twitter link, empty if none) and recent articles. There is no headshot or biography, and `job_title` is repeated as Euronews gives it.", - "operationId": "euronews-author", + "description": "Returns one Fortune author's public profile: name, bio, email, social accounts, and one page of their recent articles (30 fortune.com/2026-format article dates use \"Month D, YYYY\"; converted to YYYY-MM-DD here).", + "operationId": "fortune-author", "parameters": [ { - "description": "Canonical Euronews author profile URL", + "description": "Author slug, e.g. sheryl-estrada", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "sheryl-estrada" + }, + { + "description": "Canonical fortune.com/author// URL, optionally with a /page// suffix; alternative to slug", "in": "query", "name": "url", - "required": true, "type": "string", - "x-example": "https://www.euronews.com/profiles/2748" + "x-example": "https://fortune.com/author/sheryl-estrada/page/2/" + }, + { + "default": 1, + "description": "1-based page number; overrides any page number in url", + "in": "query", + "name": "page", + "type": "integer" } ], "produces": [ @@ -347894,7 +421366,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.euronewsAuthorResponseDoc" + "$ref": "#/definitions/publicnews.fortuneAuthorResponseDoc" } }, "400": { @@ -347921,68 +421393,86 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Euronews author profile", + "summary": "Get a Fortune author profile", "tags": [ - "Euronews" + "Fortune" ] } }, - "/euronews/headlines": { + "/fortune/companies": { "get": { - "description": "Returns the latest Euronews English-edition headlines for one section. `section` is required and takes one of 42 slugs, including themes (`business`, `culture`, `earth`, `health`, `next`, `travel`) and their sub-sections such as `business-markets` or `next-space`. Each item has its title and URL; the `news` and `business` sections also carry summary and publication time.", - "operationId": "euronews-headlines", + "description": "Searches Fortune's company directory, 30 companies per page, with `page` starting at 1. Filter by `search` (company name), `country`, `industry` (exact title), `ranking` with `year`, and ranges `min_revenue` and `max_revenue` (in $M) and `min_employees` and `max_employees`. Each item has name, slug, URL, country, revenues and description. Invalid `country` or `industry` values return `400`.", + "operationId": "fortune-companies", "parameters": [ { - "description": "Euronews section slug", - "enum": [ - "news", - "news-africa", - "news-americas", - "news-asia", - "news-international", - "news-middle-east", - "news-oceania", - "business", - "business-business", - "business-economy", - "business-markets", - "culture", - "culture-art", - "culture-lifestyle", - "culture-news", - "culture-design", - "culture-food-and-drink", - "earth", - "earth-climate", - "earth-news", - "earth-ecotech", - "earth-nature", - "earth-water", - "health", - "health-news", - "health-healthcare", - "health-nutrition", - "health-wellbeing", - "my-europe", - "my-europe-eu-xl", - "my-europe-news", - "next", - "next-mobility", - "next-money", - "next-space", - "next-tech-news", - "next-work", - "travel", - "travel-destinations", - "travel-moments", - "travel-residences", - "travel-news" - ], + "description": "Case-insensitive company-name search", "in": "query", - "name": "section", - "required": true, + "name": "search", "type": "string", - "x-example": "news" + "x-example": "alphabet" + }, + { + "description": "Country/territory slug or title; call fortune-company-filters for the complete accepted set", + "in": "query", + "name": "country", + "type": "string", + "x-example": "china" + }, + { + "description": "Exact industry title; call fortune-company-filters for the complete accepted set", + "in": "query", + "name": "industry", + "type": "string", + "x-example": "Computer Software" + }, + { + "description": "Fortune ranking slug to filter companies that appear on it; call fortune-company-filters for the accepted set", + "in": "query", + "name": "ranking", + "type": "string", + "x-example": "fortune500" + }, + { + "description": "Ranking year the ranking filter is evaluated against; defaults to the current year", + "in": "query", + "name": "year", + "type": "string", + "x-example": "2026" + }, + { + "description": "Minimum revenue in $M", + "in": "query", + "name": "min_revenue", + "type": "integer", + "x-example": 1000 + }, + { + "description": "Maximum revenue in $M", + "in": "query", + "name": "max_revenue", + "type": "integer", + "x-example": 500000 + }, + { + "description": "Minimum employee count", + "in": "query", + "name": "min_employees", + "type": "integer", + "x-example": 1000 + }, + { + "description": "Maximum employee count", + "in": "query", + "name": "max_employees", + "type": "integer", + "x-example": 500000 + }, + { + "default": 1, + "description": "1-based page number; 30 companies per page", + "in": "query", + "name": "page", + "type": "integer" } ], "produces": [ @@ -347992,7 +421482,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/publicnews.fortuneCompaniesResponseDoc" } }, "400": { @@ -348013,16 +421503,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Euronews section headlines", + "summary": "Search the Fortune company directory", "tags": [ - "Euronews" + "Fortune" ] } }, - "/euronews/news": { + "/fortune/companies/filters": { "get": { - "description": "Returns the current Euronews English-edition top stories. Each item has its title, URL, summary and publication time. Takes no parameters; use `euronews-headlines` for a single theme or sub-section.", - "operationId": "euronews-news", + "description": "Lists the filter values the Fortune company directory accepts: countries and industries (each with slug and title), the rankings usable with the `ranking` filter and their available years, and the minimum and maximum revenue and employee counts. The rankings are a subset of all Fortune rankings. It takes no parameters.", + "operationId": "fortune-company-filters", "produces": [ "application/json" ], @@ -348030,13 +421520,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.fortuneCompanyFiltersResponseDoc" } }, "503": { @@ -348051,16 +421535,32 @@ "ApiKeyAuth": [] } ], - "summary": "Get Euronews top stories", + "summary": "Discover Fortune company directory filters", "tags": [ - "Euronews" + "Fortune" ] } }, - "/euronews/sections": { + "/fortune/company": { "get": { - "description": "Lists the 42 Euronews English-edition sections accepted by `euronews-headlines`. Top-level themes include `news`, `business`, `culture`, `earth`, `health`, `my-europe`, `next` and `travel`, each with sub-sections such as `news-africa` or `earth-climate`. Each entry has the `slug`, `name` and `url`.", - "operationId": "euronews-sections", + "description": "Returns one company's public Fortune profile: fact sheet (headquarters, CEO, ticker, revenues, employees, ...), the Fortune rankings it appears on, workplace data tables, earnings report links, and social accounts, recovered from the company's own fortune.com page.", + "operationId": "fortune-company", + "parameters": [ + { + "description": "Company slug, e.g. alphabet", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "alphabet" + }, + { + "description": "Canonical fortune.com/company// URL; alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://fortune.com/company/alphabet/" + } + ], "produces": [ "application/json" ], @@ -348068,7 +421568,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/publicnews.fortuneCompanyResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -348077,33 +421595,62 @@ "ApiKeyAuth": [] } ], - "summary": "Get Euronews sections", + "summary": "Get a Fortune company profile", "tags": [ - "Euronews" + "Fortune" ] } }, - "/everlane/collections": { + "/fortune/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns collections from Everlane (https://www.everlane.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", - "operationId": "everlane-collections", + "description": "Returns the latest Fortune headlines for one section. `section` is required and takes one of 36 slugs such as `latest`, `fortune-500`, `finance`, `artificial-intelligence`, `crypto`, `leadership` or `europe`. Each item has its title and URL.", + "operationId": "fortune-headlines", "parameters": [ { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Maximum collections, defaults to 50 and supports up to 250", + "description": "Fortune section slug", + "enum": [ + "latest", + "fortune-500", + "finance", + "tech", + "leadership", + "lifestyle", + "economy", + "newsletters", + "success", + "magazine", + "real-estate", + "investing", + "asia", + "politics", + "artificial-intelligence", + "workplace-culture", + "personal-finance", + "middle-east", + "big-tech", + "travel-and-leisure", + "c-suite", + "crypto", + "health", + "commentary", + "retail", + "mpw", + "features", + "conferences", + "europe", + "environment", + "arts-and-entertainment", + "cybersecurity", + "global", + "innovation", + "news", + "north-america" + ], "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "section", + "required": true, + "type": "string", + "x-example": "latest" } ], "produces": [ @@ -348113,7 +421660,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -348122,11 +421669,37 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Fortune section headlines", + "tags": [ + "Fortune" + ] + } + }, + "/fortune/news": { + "get": { + "description": "Returns the current Fortune top stories. Each item has its title, URL, summary, publication time, author and image. Takes no parameters; use `fortune-headlines` for a single section.", + "operationId": "fortune-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "503": { "description": "Service Unavailable", @@ -348140,41 +421713,108 @@ "ApiKeyAuth": [] } ], - "summary": "List Everlane collections", + "summary": "Get Fortune top stories", "tags": [ - "Everlane" + "Fortune" ] } }, - "/everlane/collections/{handle}/products": { + "/fortune/ranking": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns products from one Everlane (https://www.everlane.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", - "operationId": "everlane-collection-products", + "description": "Returns rows from a selected Fortune ranking list and year -- the Fortune 500 franchise (including Fortune China 500) or one of Fortune's award/culture rankings. Search, filters, sorting, and pagination are applied against Fortune's public ranking data and validated against that list/year's filter inventory.", + "operationId": "fortune-ranking", "parameters": [ { - "description": "Collection handle", - "in": "path", - "name": "handle", - "required": true, + "default": "fortune500", + "description": "Accepted values: fortune500, global500, fortune500-europe, southeast-asia-500, fortune-china-500, 100-fastest-growing-companies, 40-under-40, ai-innovators, aiq, americas-most-innovative-companies, asia-future, best-companies, best-companies-europe, best-companies-southeast-asia, best-large-workplaces-in-technology, best-large-workplaces-parents, best-medium-workplaces, best-medium-workplaces-in-technology, best-places-families, best-places-retire-affordably, best-small-workplaces, best-small-workplaces-aging-services-senior-housing-care, best-small-workplaces-bay-area, best-small-workplaces-biotechnology-pharmaceuticals, best-small-workplaces-chicago-area, best-small-workplaces-construction, best-small-workplaces-consulting-professional-services, best-small-workplaces-financial-services-insurance, best-small-workplaces-for-women, best-small-workplaces-health-care, best-small-workplaces-in-technology, best-small-workplaces-manufacturing-production, best-small-workplaces-millennials, best-small-workplaces-new-york, best-small-workplaces-parents, best-small-workplaces-real-estate, best-small-workplaces-retail, best-small-workplaces-technology, best-small-workplaces-texas, best-workplaces-advertising-marketing, best-workplaces-aging-services-at-home-care, best-workplaces-aging-services-senior-housing-care, best-workplaces-baby-boomers, best-workplaces-bay-area, best-workplaces-biotechnology-pharmaceuticals, best-workplaces-camaraderie, best-workplaces-chicago-area, best-workplaces-construction, best-workplaces-consulting-professional-services, best-workplaces-finance-insurance, best-workplaces-financial-services-insurance, best-workplaces-flexibility, best-workplaces-for-african-americans, best-workplaces-for-asian-americans, best-workplaces-for-diversity, best-workplaces-for-hispanics-and-latinos, best-workplaces-for-retirement, best-workplaces-for-women, best-workplaces-gen-x, best-workplaces-giving-back, best-workplaces-health-care, best-workplaces-manufacturing-production, best-workplaces-millennials, best-workplaces-new-york, best-workplaces-parents, best-workplaces-real-estate, best-workplaces-recent-college-graduates, best-workplaces-retail, best-workplaces-technology, best-workplaces-texas, businessperson-of-the-year, candidates-working-women-times-up, change-the-world, creator-25, crypto, cyber, europes-most-innovative-companies, fintech-innovators-asia, food-drink-women-innovators, fortunate50, future-50, global-best-companies, heroes-of-the-fortune-500, impact20, inner-city-100, international-20, lgbtq-leaders, mejores-companias-latinos-hispanos, modern-board-25, most-fantastical-comic-book-businesses, most-important-private-companies, most-powerful-people, most-powerful-rising-executives, most-powerful-women, most-powerful-women-asia, most-powerful-women-europe-middle-east-africa, most-powerful-women-international, nfty-50, the-ledger-40-under-40, unicorns, women-tech-leaders-europe, worlds-best-workplaces, worlds-greatest-leaders, worlds-most-admired-companies. Defaults to fortune500.", + "in": "query", + "name": "list", + "type": "string" + }, + { + "description": "For fortune-china-500, accepted values are 2026, 2025, 2024, 2023; otherwise call fortune-ranking-years for this list's accepted years", + "in": "query", + "name": "year", "type": "string", - "x-example": "collection-handle" + "x-example": "2026" }, { - "description": "1-based page, defaults to 1", + "description": "Case-insensitive company-name search; Fortune China 500 searches every displayed row column", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "search", + "type": "string", + "x-example": "amazon" }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "collectionFormat": "multi", + "description": "Repeatable dynamic filter in field:value form; use company for fortune-china-500 or discover list-specific fields and values with fortune-ranking-filters", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array", + "x-example": "profitable:yes" + }, + { + "description": "Convenience alias for the live sector filter", + "in": "query", + "name": "sector", + "type": "string", + "x-example": "Technology" + }, + { + "description": "Convenience alias for the live industry filter", + "in": "query", + "name": "industry", + "type": "string", + "x-example": "Internet Services and Retailing" + }, + { + "description": "Convenience alias for the live state filter", + "in": "query", + "name": "state", + "type": "string", + "x-example": "Washington" + }, + { + "description": "Convenience alias; accepts true/false or yes/no", + "in": "query", + "name": "profitable", + "type": "string", + "x-example": "true" + }, + { + "description": "For fortune-china-500: Company, Rank, Rank of last year, Revenues ($M), Profits ($M); otherwise discover sortable fields with fortune-ranking-filters", + "in": "query", + "name": "sort_by", + "type": "string", + "x-example": "revenues" + }, + { + "default": "asc", + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_order", + "type": "string" + }, + { + "default": 0, + "description": "Zero-based result offset", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "default": 100, + "description": "Number of rows to return; 0 uses the default 100, maximum 1000", "in": "query", "name": "limit", - "type": "integer", - "x-example": 50 + "type": "integer" } ], "produces": [ @@ -348184,7 +421824,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" + "$ref": "#/definitions/publicnews.fortuneRankingResponseDoc" } }, "400": { @@ -348193,18 +421833,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -348217,33 +421845,30 @@ "ApiKeyAuth": [] } ], - "summary": "List Everlane collection products", + "summary": "Search a Fortune ranking", "tags": [ - "Everlane" + "Fortune" ] } }, - "/everlane/pages": { + "/fortune/ranking/filters": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists Everlane static pages, 50 per page by default (`limit`, max 250), with `page` starting at 1. Each page has its handle, title, URL, plain-text content, and created, updated and published dates. In a fallback mode flagged by `transport_mode: \"ssr_embedded\"`, items carry only `handle`, `url` and `updated_at`.", - "operationId": "everlane-pages", + "description": "Returns the filter fields and sortable columns for one Fortune ranking list. `list` selects the ranking (default `fortune500`) and `year` a historical edition; omit `year` for the list's current year. Each search field has its field name, title, type and accepted options, and each sortable column has a title and type.", + "operationId": "fortune-ranking-filters", "parameters": [ { - "description": "1-based page, defaults to 1", + "default": "fortune500", + "description": "Accepted values: fortune500, global500, fortune500-europe, southeast-asia-500, fortune-china-500, 100-fastest-growing-companies, 40-under-40, ai-innovators, aiq, americas-most-innovative-companies, asia-future, best-companies, best-companies-europe, best-companies-southeast-asia, best-large-workplaces-in-technology, best-large-workplaces-parents, best-medium-workplaces, best-medium-workplaces-in-technology, best-places-families, best-places-retire-affordably, best-small-workplaces, best-small-workplaces-aging-services-senior-housing-care, best-small-workplaces-bay-area, best-small-workplaces-biotechnology-pharmaceuticals, best-small-workplaces-chicago-area, best-small-workplaces-construction, best-small-workplaces-consulting-professional-services, best-small-workplaces-financial-services-insurance, best-small-workplaces-for-women, best-small-workplaces-health-care, best-small-workplaces-in-technology, best-small-workplaces-manufacturing-production, best-small-workplaces-millennials, best-small-workplaces-new-york, best-small-workplaces-parents, best-small-workplaces-real-estate, best-small-workplaces-retail, best-small-workplaces-technology, best-small-workplaces-texas, best-workplaces-advertising-marketing, best-workplaces-aging-services-at-home-care, best-workplaces-aging-services-senior-housing-care, best-workplaces-baby-boomers, best-workplaces-bay-area, best-workplaces-biotechnology-pharmaceuticals, best-workplaces-camaraderie, best-workplaces-chicago-area, best-workplaces-construction, best-workplaces-consulting-professional-services, best-workplaces-finance-insurance, best-workplaces-financial-services-insurance, best-workplaces-flexibility, best-workplaces-for-african-americans, best-workplaces-for-asian-americans, best-workplaces-for-diversity, best-workplaces-for-hispanics-and-latinos, best-workplaces-for-retirement, best-workplaces-for-women, best-workplaces-gen-x, best-workplaces-giving-back, best-workplaces-health-care, best-workplaces-manufacturing-production, best-workplaces-millennials, best-workplaces-new-york, best-workplaces-parents, best-workplaces-real-estate, best-workplaces-recent-college-graduates, best-workplaces-retail, best-workplaces-technology, best-workplaces-texas, businessperson-of-the-year, candidates-working-women-times-up, change-the-world, creator-25, crypto, cyber, europes-most-innovative-companies, fintech-innovators-asia, food-drink-women-innovators, fortunate50, future-50, global-best-companies, heroes-of-the-fortune-500, impact20, inner-city-100, international-20, lgbtq-leaders, mejores-companias-latinos-hispanos, modern-board-25, most-fantastical-comic-book-businesses, most-important-private-companies, most-powerful-people, most-powerful-rising-executives, most-powerful-women, most-powerful-women-asia, most-powerful-women-europe-middle-east-africa, most-powerful-women-international, nfty-50, the-ledger-40-under-40, unicorns, women-tech-leaders-europe, worlds-best-workplaces, worlds-greatest-leaders, worlds-most-admired-companies. Defaults to fortune500.", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "list", + "type": "string" }, { - "description": "Maximum static pages, defaults to 50 and supports up to 250", + "description": "For fortune-china-500, accepted values are 2026, 2025, 2024, 2023; omit for current year or call fortune-ranking-years", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "year", + "type": "string", + "x-example": "2026" } ], "produces": [ @@ -348253,7 +421878,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pagesResponseDoc" + "$ref": "#/definitions/publicnews.fortuneRankingFiltersResponseDoc" } }, "400": { @@ -348262,12 +421887,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -348280,27 +421899,49 @@ "ApiKeyAuth": [] } ], - "summary": "List Everlane static pages", + "summary": "Discover Fortune ranking filters", "tags": [ - "Everlane" + "Fortune" ] } }, - "/everlane/pages/{handle}": { + "/fortune/ranking/lists": { "get": { - "consumes": [ + "description": "Returns every public ranking accepted by the other fortune/ranking endpoints -- the Fortune 500 franchise's regional/global variants (including Fortune China 500) plus Fortune's award and culture rankings.", + "operationId": "fortune-ranking-lists", + "produces": [ "application/json" ], - "description": "Returns one Everlane static page by its required `handle`: title, URL, plain-text content, and created, updated and published dates. An unknown handle returns `404`. In a fallback mode flagged by `transport_mode: \"ssr_embedded\"`, the response omits `id`.", - "operationId": "everlane-page", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.fortuneRankingListsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Fortune ranking lists", + "tags": [ + "Fortune" + ] + } + }, + "/fortune/ranking/years": { + "get": { + "description": "Returns every year accepted by Fortune's public ranking source for a selected list, including the 2023-2026 Fortune China 500 editions.", + "operationId": "fortune-ranking-years", "parameters": [ { - "description": "Page handle", - "in": "path", - "name": "handle", - "required": true, - "type": "string", - "x-example": "page-handle" + "default": "fortune500", + "description": "Accepted values: fortune500, global500, fortune500-europe, southeast-asia-500, fortune-china-500, 100-fastest-growing-companies, 40-under-40, ai-innovators, aiq, americas-most-innovative-companies, asia-future, best-companies, best-companies-europe, best-companies-southeast-asia, best-large-workplaces-in-technology, best-large-workplaces-parents, best-medium-workplaces, best-medium-workplaces-in-technology, best-places-families, best-places-retire-affordably, best-small-workplaces, best-small-workplaces-aging-services-senior-housing-care, best-small-workplaces-bay-area, best-small-workplaces-biotechnology-pharmaceuticals, best-small-workplaces-chicago-area, best-small-workplaces-construction, best-small-workplaces-consulting-professional-services, best-small-workplaces-financial-services-insurance, best-small-workplaces-for-women, best-small-workplaces-health-care, best-small-workplaces-in-technology, best-small-workplaces-manufacturing-production, best-small-workplaces-millennials, best-small-workplaces-new-york, best-small-workplaces-parents, best-small-workplaces-real-estate, best-small-workplaces-retail, best-small-workplaces-technology, best-small-workplaces-texas, best-workplaces-advertising-marketing, best-workplaces-aging-services-at-home-care, best-workplaces-aging-services-senior-housing-care, best-workplaces-baby-boomers, best-workplaces-bay-area, best-workplaces-biotechnology-pharmaceuticals, best-workplaces-camaraderie, best-workplaces-chicago-area, best-workplaces-construction, best-workplaces-consulting-professional-services, best-workplaces-finance-insurance, best-workplaces-financial-services-insurance, best-workplaces-flexibility, best-workplaces-for-african-americans, best-workplaces-for-asian-americans, best-workplaces-for-diversity, best-workplaces-for-hispanics-and-latinos, best-workplaces-for-retirement, best-workplaces-for-women, best-workplaces-gen-x, best-workplaces-giving-back, best-workplaces-health-care, best-workplaces-manufacturing-production, best-workplaces-millennials, best-workplaces-new-york, best-workplaces-parents, best-workplaces-real-estate, best-workplaces-recent-college-graduates, best-workplaces-retail, best-workplaces-technology, best-workplaces-texas, businessperson-of-the-year, candidates-working-women-times-up, change-the-world, creator-25, crypto, cyber, europes-most-innovative-companies, fintech-innovators-asia, food-drink-women-innovators, fortunate50, future-50, global-best-companies, heroes-of-the-fortune-500, impact20, inner-city-100, international-20, lgbtq-leaders, mejores-companias-latinos-hispanos, modern-board-25, most-fantastical-comic-book-businesses, most-important-private-companies, most-powerful-people, most-powerful-rising-executives, most-powerful-women, most-powerful-women-asia, most-powerful-women-europe-middle-east-africa, most-powerful-women-international, nfty-50, the-ledger-40-under-40, unicorns, women-tech-leaders-europe, worlds-best-workplaces, worlds-greatest-leaders, worlds-most-admired-companies. Defaults to fortune500.", + "in": "query", + "name": "list", + "type": "string" } ], "produces": [ @@ -348310,7 +421951,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pageResponseDoc" + "$ref": "#/definitions/publicnews.fortuneRankingYearsResponseDoc" } }, "400": { @@ -348319,18 +421960,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -348343,35 +421972,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Everlane static page", + "summary": "List Fortune ranking years", "tags": [ - "Everlane" + "Fortune" ] } }, - "/everlane/products": { + "/fortune/sections": { "get": { - "consumes": [ + "description": "Lists the Fortune sections accepted by `fortune-headlines`, such as `latest`, `fortune-500`, `finance`, `tech`, `leadership` and `crypto`. Each entry has a stable `slug`, display `name` and the section `url`. Takes no parameters.", + "operationId": "fortune-sections", + "produces": [ "application/json" ], - "description": "Returns products from Everlane's (https://www.everlane.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", - "operationId": "everlane-products", - "parameters": [ - { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Maximum products, defaults to 50 and supports up to 250", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "ApiKeyAuth": [] } ], + "summary": "Get Fortune sections", + "tags": [ + "Fortune" + ] + } + }, + "/fotmob/audio-matches": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns FotMob's current match-to-audio-language availability index. Match ids are open-ended and can be passed to /fotmob/match. The list is independent of a selected match date and may include matches outside the current fixtures feed.", + "operationId": "fotmob-audio-matches", "produces": [ "application/json" ], @@ -348379,19 +422018,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/fotmob.responseDoc" } }, "503": { @@ -348406,27 +422033,31 @@ "ApiKeyAuth": [] } ], - "summary": "List Everlane products", + "summary": "FotMob matches with audio commentary", "tags": [ - "Everlane" + "FotMob" ] } }, - "/everlane/products/{handle}": { + "/fotmob/fifa-ranking-periods": { "get": { "consumes": [ "application/json" ], - "description": "Returns product detail for one Everlane (https://www.everlane.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", - "operationId": "everlane-product", + "description": "Lists the FIFA ranking periods FotMob currently offers for the required `gender` (`men` or `women`). Each period has a `periodId` and a `periodName` date label. Pass a `periodId` to the FotMob FIFA rankings endpoint; the ids change over time and are not a fixed set.", + "operationId": "fotmob-fifa-ranking-periods", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", + "description": "Ranking gender", + "enum": [ + "men", + "women" + ], + "in": "query", + "name": "gender", "required": true, "type": "string", - "x-example": "product-handle" + "x-example": "men" } ], "produces": [ @@ -348436,7 +422067,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productResponseDoc" + "$ref": "#/definitions/fotmob.fifaRankingPeriodsResponseDoc" } }, "400": { @@ -348445,18 +422076,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -348469,45 +422088,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Everlane product", + "summary": "FotMob FIFA ranking period directory", "tags": [ - "Everlane" + "FotMob" ] } }, - "/everlane/products/{handle}/recommendations": { + "/fotmob/fifa-rankings": { "get": { "consumes": [ "application/json" ], - "description": "Returns recommended products for one Everlane (https://www.everlane.com) product handle. The storefront URL is fixed server-side.", - "operationId": "everlane-product-recommendations", + "description": "Returns ranked national-team points and rank changes for one period. Discover valid periodId values for the selected gender from /fotmob/fifa-ranking-periods.", + "operationId": "fotmob-fifa-rankings", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", + "description": "Ranking gender", + "enum": [ + "men", + "women" + ], + "in": "query", + "name": "gender", "required": true, "type": "string", - "x-example": "product-handle" - }, - { - "description": "Maximum products, defaults to 10 and supports up to 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "x-example": "men" }, { - "description": "Recommendation intent. Allowed values: related, complementary", - "enum": [ - "related", - "complementary" - ], + "description": "Period id returned for this gender by /fotmob/fifa-ranking-periods", "in": "query", - "name": "intent", + "name": "period_id", + "required": true, "type": "string", - "x-example": "related" + "x-example": "20260720" } ], "produces": [ @@ -348517,7 +422130,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" + "$ref": "#/definitions/fotmob.fifaRankingsResponseDoc" } }, "400": { @@ -348532,12 +422145,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -348550,41 +422157,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Everlane product recommendations", + "summary": "FotMob FIFA national-team rankings", "tags": [ - "Everlane" + "FotMob" ] } }, - "/everlane/search/suggest": { + "/fotmob/latest-news": { "get": { "consumes": [ "application/json" ], - "description": "Returns products, collections, and query suggestions from Everlane's (https://www.everlane.com) predictive search. The storefront URL is fixed server-side.", - "operationId": "everlane-search-suggest", + "description": "Returns the global English latest-news feed. Items are article previews; the upstream response contains up to 20 items per offset. Use start_index increments of 20 to page without overlap.", + "operationId": "fotmob-latest-news", "parameters": [ { - "description": "Search query", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "wool" - }, - { - "description": "Comma-separated suggestion types. Allowed values: product, collection, query", - "in": "query", - "name": "types", - "type": "string", - "x-example": "product,collection,query" - }, - { - "description": "Maximum results per type, defaults to 10 and supports up to 20", + "description": "Zero-based news offset; defaults to 0", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "maximum": 10000, + "minimum": 0, + "name": "start_index", + "type": "integer" } ], "produces": [ @@ -348594,7 +422187,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" + "$ref": "#/definitions/fotmob.newsListResponseDoc" } }, "400": { @@ -348603,8 +422196,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -348621,42 +422214,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get Everlane search suggestions", + "summary": "FotMob latest football news", "tags": [ - "Everlane" + "FotMob" ] } }, - "/everlane/sitemap/urls": { + "/fotmob/league": { "get": { "consumes": [ "application/json" ], - "description": "Lists URL entries from Everlane's sitemaps, filtered by `type` (`all` by default, or `products`, `collections`, `pages`, `blogs`, `agentic_discovery`, `other`) and capped by `limit` (default 50, max 250). Each entry has its `loc`, inferred type, handle, last modified date, change frequency, and images with caption and title when present.", - "operationId": "everlane-sitemap-urls", + "description": "Returns FotMob's public league page payload, including available tabs, overview, table, fixtures, statistics, transfers, and seasons where supplied by the league. Discover valid season values with /fotmob/seasons. shotmap=true includes the optional, larger overview shot-map payload.", + "operationId": "fotmob-league", "parameters": [ { - "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", - "enum": [ - "all", - "products", - "collections", - "pages", - "blogs", - "agentic_discovery", - "other" - ], + "description": "Numeric FotMob league id from /fotmob/leagues", "in": "query", - "name": "type", + "name": "league_id", + "required": true, + "type": "integer", + "x-example": 47 + }, + { + "description": "Optional season value from /fotmob/seasons for this league", + "in": "query", + "name": "season", "type": "string", - "x-example": "products" + "x-example": "2025/2026" }, { - "description": "Maximum URL entries, defaults to 50 and supports up to 250", + "default": false, + "description": "Include the optional overview shot map; increases response size", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "shotmap", + "type": "boolean" } ], "produces": [ @@ -348666,7 +422258,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -348675,8 +422267,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -348693,19 +422285,19 @@ "ApiKeyAuth": [] } ], - "summary": "List Everlane sitemap URLs", + "summary": "FotMob league details and sections", "tags": [ - "Everlane" + "FotMob" ] } }, - "/everlane/sitemaps": { + "/fotmob/leagues": { "get": { "consumes": [ "application/json" ], - "description": "Lists the child sitemaps in Everlane's sitemap index. Each entry has its `loc` URL and an inferred `type`: `products`, `collections`, `pages`, `blogs`, `agentic_discovery` or `other`. It takes no parameters.", - "operationId": "everlane-sitemaps", + "description": "Returns FotMob's full public league directory grouped into popular, international, and country collections. Use league ids with other FotMob endpoints.", + "operationId": "fotmob-leagues", "produces": [ "application/json" ], @@ -348713,19 +422305,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/fotmob.responseDoc" } }, "503": { @@ -348740,19 +422320,29 @@ "ApiKeyAuth": [] } ], - "summary": "List Everlane sitemaps", + "summary": "FotMob competition directory", "tags": [ - "Everlane" + "FotMob" ] } }, - "/everlane/store": { + "/fotmob/lineup-builder-players": { "get": { "consumes": [ "application/json" ], - "description": "Returns storefront metadata for Everlane (https://www.everlane.com). The storefront URL is fixed server-side, so no `url` parameter is accepted.", - "operationId": "everlane-store", + "description": "Returns public metadata for 1 to 11 selected lineup players. Player ids are open-ended and can be discovered through /fotmob/search or /fotmob/lineup-builder-team. Unknown ids without complete public metadata return 404.", + "operationId": "fotmob-lineup-builder-players", + "parameters": [ + { + "description": "Comma-separated list of 1 to 11 numeric FotMob player ids", + "in": "query", + "name": "player_ids", + "required": true, + "type": "string", + "x-example": "961995,562727" + } + ], "produces": [ "application/json" ], @@ -348760,7 +422350,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.storeResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -348769,8 +422359,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -348787,24 +422377,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Everlane store metadata", + "summary": "FotMob lineup builder player metadata", "tags": [ - "Everlane" + "FotMob" ] } }, - "/ew/article": { + "/fotmob/lineup-builder-team": { "get": { - "description": "Returns one Entertainment Weekly article by its canonical `url` in the form `ew.com/-`. The response has the title, description, publish and update times, section, authors, lead image, body `paragraphs` and a `paywalled` flag. Blocked or malformed pages return an upstream error.", - "operationId": "ew-article", + "consumes": [ + "application/json" + ], + "description": "Returns the public lineup builder's prefilled formation, starting lineup, and squad for a team id. Discover open-ended team ids with /fotmob/search. Some teams legitimately have no squad list.", + "operationId": "fotmob-lineup-builder-team", "parameters": [ { - "description": "Canonical Entertainment Weekly article URL", + "description": "Numeric FotMob team id discoverable through /fotmob/search", "in": "query", - "name": "url", + "name": "team_id", "required": true, "type": "string", - "x-example": "https://ew.com/jean-smart-succeeds-diane-keaton-as-craig-t-nelson-love-interest-in-family-stone-sequel-12137476" + "x-example": "9825" } ], "produces": [ @@ -348814,7 +422407,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -348841,24 +422434,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Entertainment Weekly article content", + "summary": "FotMob lineup builder team data", "tags": [ - "Entertainment Weekly" + "FotMob" ] } }, - "/ew/author": { + "/fotmob/match": { "get": { - "description": "Returns one Entertainment Weekly contributor's public profile (name, job title, biography) and their recent articles from a canonical author URL.", - "operationId": "ew-author", + "consumes": [ + "application/json" + ], + "description": "Returns FotMob's public match-details payload, including available facts, events, statistics, lineups, shot map, momentum, table and head-to-head sections. The data field preserves the upstream JSON shape; individual sections may be absent for a match.", + "operationId": "fotmob-match", "parameters": [ { - "description": "Canonical ew.com/author/ or ew.com/- profile URL", + "description": "Numeric FotMob match id", "in": "query", - "name": "url", + "name": "id", "required": true, "type": "string", - "x-example": "https://ew.com/author/dalton-ross/" + "x-example": "5181825" } ], "produces": [ @@ -348868,7 +422464,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ewAuthorResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -348895,35 +422491,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Entertainment Weekly author profile", + "summary": "FotMob match details", "tags": [ - "Entertainment Weekly" + "FotMob" ] } }, - "/ew/headlines": { + "/fotmob/match-media": { "get": { - "description": "Returns the latest Entertainment Weekly headlines for one section. `section` is required and must be one of `tv`, `movies`, `music`, `what-to-watch`, `binge`, `celebrity`, `awardist`, `books` or `theater`. Each item has its title and URL, plus an image when the card shows one.", - "operationId": "ew-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns the public highlight-video and media metadata for one match. The request uses FotMob's English United States variant; unavailable media is represented by null source fields.", + "operationId": "fotmob-match-media", "parameters": [ { - "description": "Entertainment Weekly section slug", - "enum": [ - "tv", - "movies", - "music", - "what-to-watch", - "binge", - "celebrity", - "awardist", - "books", - "theater" - ], + "description": "Numeric FotMob match id, discoverable from /fotmob/matches or /fotmob/search", "in": "query", - "name": "section", + "name": "id", "required": true, "type": "string", - "x-example": "tv" + "x-example": "5795457" } ], "produces": [ @@ -348933,7 +422521,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -348942,6 +422530,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -348954,16 +422548,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get Entertainment Weekly section headlines", + "summary": "FotMob match videos and media metadata", "tags": [ - "Entertainment Weekly" + "FotMob" ] } }, - "/ew/news": { + "/fotmob/matches": { "get": { - "description": "Returns the current Entertainment Weekly top stories. Each item has its title and URL, plus an image when the card shows one. Takes no parameters; use `ew-headlines` for a single section.", - "operationId": "ew-news", + "consumes": [ + "application/json" + ], + "description": "Returns FotMob's public match payload for a calendar date and IANA timezone. The data field preserves the upstream JSON shape.", + "operationId": "fotmob-matches", + "parameters": [ + { + "description": "Date in YYYYMMDD format", + "in": "query", + "name": "date", + "required": true, + "type": "string", + "x-example": "20260925" + }, + { + "description": "IANA timezone; defaults to UTC", + "in": "query", + "name": "timezone", + "type": "string", + "x-example": "Asia/Shanghai" + } + ], "produces": [ "application/json" ], @@ -348971,7 +422585,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -348986,16 +422606,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get Entertainment Weekly top stories", + "summary": "FotMob matches for a date", "tags": [ - "Entertainment Weekly" + "FotMob" ] } }, - "/ew/sections": { + "/fotmob/news": { "get": { - "description": "Lists the nine Entertainment Weekly primary-navigation sections accepted by `ew-headlines`: `tv`, `movies`, `music`, `what-to-watch`, `binge`, `celebrity`, `awardist`, `books` and `theater`. Each entry has the `slug`, display `name` and section `url`.", - "operationId": "ew-sections", + "consumes": [ + "application/json" + ], + "description": "Returns a page of FotMob news items for one league. League ids are discoverable from /fotmob/leagues; start_index is a zero-based offset.", + "operationId": "fotmob-news", + "parameters": [ + { + "description": "Numeric FotMob league id", + "in": "query", + "name": "league_id", + "required": true, + "type": "string", + "x-example": "47" + }, + { + "description": "Zero-based news offset; defaults to 0", + "in": "query", + "maximum": 10000, + "minimum": 0, + "name": "start_index", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -349003,7 +422644,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -349012,28 +422671,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Entertainment Weekly sections", + "summary": "FotMob league news", "tags": [ - "Entertainment Weekly" + "FotMob" ] } }, - "/expedia/activities/search": { - "post": { + "/fotmob/news-article": { + "get": { "consumes": [ "application/json" ], - "description": "Searches Expedia things to do (activities and tours) for a free-text `destination` between `start_date` and `end_date` (`YYYY-MM-DD`), all required in the JSON body. Optional `page`, `page_size` (1-50, default 20), `currency` (default `USD`) and `locale` (default `en_US`). Each activity has its id, name, duration, price, review score and label, review count, free-cancellation flag and thumbnail.", - "operationId": "expedia-activities-search", + "description": "Returns the full article body for a FotMob-authored top-news story. Pass the complete id-and-slug value from the public /topnews/ URL. News previews from external publishers remain external and are not fetched.", + "operationId": "fotmob-news-article", "parameters": [ { - "description": "Activity search payload", - "in": "body", - "name": "option", + "description": "Complete FotMob top-news article id and slug from the public article URL", + "in": "query", + "name": "id", "required": true, - "schema": { - "$ref": "#/definitions/expedia.ActivitySearchOption" - } + "type": "string", + "x-example": "29776-fotmob-totw-premier-league-matchday-5s-best-xi" } ], "produces": [ @@ -349043,7 +422701,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/expedia.expediaActivitySearchResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -349052,14 +422710,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -349076,28 +422728,34 @@ "ApiKeyAuth": [] } ], - "summary": "Search Expedia activities", + "summary": "FotMob full top-news article", "tags": [ - "Expedia" + "FotMob" ] } }, - "/expedia/flights/search": { - "post": { + "/fotmob/player": { + "get": { "consumes": [ "application/json" ], - "description": "Searches Expedia flights between two IATA airport codes, `origin` and `destination`, on `departure_date` (`YYYY-MM-DD`). `return_date` is required for the default `round_trip`; `one_way` is the alternative `trip_type`. Optional `adults` (1-9, default 1), `cabin_class` (default `COACH`), `currency` and `locale`. Returns departing-leg offers only, with airline, times, duration, stops, route and price.", - "operationId": "expedia-flights-search", + "description": "Returns a public FotMob player profile, including current team, injuries, recent matches, career history, trophies, market values, and the player-specific season identifiers needed for deeper statistics. Discover player ids through /fotmob/search. Market values are included by default.", + "operationId": "fotmob-player", "parameters": [ { - "description": "Flights search payload", - "in": "body", - "name": "option", + "description": "Numeric FotMob player id from fotmob/search", + "in": "query", + "name": "id", "required": true, - "schema": { - "$ref": "#/definitions/expedia.FlightsSearchOption" - } + "type": "string", + "x-example": "961995" + }, + { + "default": true, + "description": "Include market-value history; defaults to true", + "in": "query", + "name": "include_market_values", + "type": "boolean" } ], "produces": [ @@ -349107,7 +422765,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/expedia.expediaFlightsSearchResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -349116,14 +422774,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -349140,28 +422792,35 @@ "ApiKeyAuth": [] } ], - "summary": "Search Expedia flights", + "summary": "FotMob player profile", "tags": [ - "Expedia" + "FotMob" ] } }, - "/expedia/locations/search": { - "post": { + "/fotmob/player-match-stats": { + "get": { "consumes": [ "application/json" ], - "description": "Returns Expedia destination and property suggestions for a free-text `term` (required, 100 characters or fewer), with optional `currency` and `locale`. Each item has its type, geo type, primary and secondary text, full location name, coordinates, and `region_id`, `property_id` or `airport_code` where they exist.", - "operationId": "expedia-locations-search", + "description": "Returns the public per-match stat rows for one player, including the available stat key, value, and translated label. Discover player ids through fotmob/search and match ids through fotmob/match or fotmob/player-matches.", + "operationId": "fotmob-player-match-stats", "parameters": [ { - "description": "Location search payload", - "in": "body", - "name": "option", + "description": "Numeric FotMob player id", + "in": "query", + "name": "player_id", "required": true, - "schema": { - "$ref": "#/definitions/expedia.LocationSearchOption" - } + "type": "string", + "x-example": "961995" + }, + { + "description": "Numeric FotMob match id", + "in": "query", + "name": "match_id", + "required": true, + "type": "string", + "x-example": "5795457" } ], "produces": [ @@ -349171,7 +422830,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/expedia.expediaLocationSearchResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -349180,14 +422839,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -349204,28 +422857,50 @@ "ApiKeyAuth": [] } ], - "summary": "Search Expedia destinations", + "summary": "FotMob player match stats", "tags": [ - "Expedia" + "FotMob" ] } }, - "/expedia/properties/detail": { - "post": { + "/fotmob/player-matches": { + "get": { "consumes": [ "application/json" ], - "description": "Returns a summary for one Expedia hotel by `property_id`, for the stay given by `check_in` and `check_out` (`YYYY-MM-DD`), all required in the JSON body. Optional `adults` (1-9, default 2), `currency` and `locale`. The response has the name, star rating, address, city, province, country code, coordinates, top amenities and VIP message.", - "operationId": "expedia-properties-detail", + "description": "Returns one page of player match history. The player's matchFilters and permitted league/team pairs are discovered from /fotmob/player. For another page, copy the numeric before timestamp from the upstream previous URL.", + "operationId": "fotmob-player-matches", "parameters": [ { - "description": "Property detail payload", - "in": "body", - "name": "option", + "description": "Numeric FotMob player id from fotmob/search", + "in": "query", + "name": "player_id", "required": true, - "schema": { - "$ref": "#/definitions/expedia.PropertyDetailOption" - } + "type": "string", + "x-example": "961995" + }, + { + "default": "all", + "description": "all, or a numeric league id from fotmob/player matchFilters", + "in": "query", + "name": "league_id", + "type": "string", + "x-example": "47" + }, + { + "default": "all", + "description": "all, or a numeric team id paired with league_id in fotmob/player matchFilters", + "in": "query", + "name": "team_id", + "type": "string", + "x-example": "9825" + }, + { + "description": "Numeric before timestamp from the upstream previous URL; omit for the newest page", + "in": "query", + "name": "before", + "type": "string", + "x-example": "1767902400" } ], "produces": [ @@ -349235,7 +422910,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/expedia.expediaPropertyDetailResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -349250,18 +422925,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -349274,28 +422937,35 @@ "ApiKeyAuth": [] } ], - "summary": "Expedia Stays property detail", + "summary": "FotMob player match history", "tags": [ - "Expedia" + "FotMob" ] } }, - "/expedia/properties/filters": { - "post": { + "/fotmob/player-stats": { + "get": { "consumes": [ "application/json" ], - "description": "Returns the sort and filter facets (amenities, star rating, neighborhood, nightly price range, sort options) available for a Stays search.", - "operationId": "expedia-properties-filters", + "description": "Returns deep statistics, shot map, heatmap, and goalkeeper shot map for one player-specific season entry. Discover valid season_id values and hasDeepStats from /fotmob/player statSeasons; entry ids vary by player and season.", + "operationId": "fotmob-player-stats", "parameters": [ { - "description": "Property filters payload", - "in": "body", - "name": "option", + "description": "Numeric FotMob player id from fotmob/search", + "in": "query", + "name": "player_id", "required": true, - "schema": { - "$ref": "#/definitions/expedia.PropertyFiltersOption" - } + "type": "string", + "x-example": "961995" + }, + { + "description": "Player-specific entryId from fotmob/player statSeasons", + "in": "query", + "name": "season_id", + "required": true, + "type": "string", + "x-example": "0-1" } ], "produces": [ @@ -349305,7 +422975,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/expedia.expediaPropertyFiltersResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -349320,18 +422990,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -349344,28 +423002,29 @@ "ApiKeyAuth": [] } ], - "summary": "Expedia search filters", + "summary": "FotMob player season statistics", "tags": [ - "Expedia" + "FotMob" ] } }, - "/expedia/properties/reviews": { - "post": { + "/fotmob/search": { + "get": { "consumes": [ "application/json" ], - "description": "Returns the overall rating and a short set of guest reviews, typically around six, for one Expedia hotel. `property_id`, `check_in` and `check_out` (`YYYY-MM-DD`) are required in the JSON body; `adults` (1-9, default 2), `currency` and `locale` are optional. Each review has the reviewer name, date, rating label, message and verified flag. It is not the full review archive.", - "operationId": "expedia-properties-reviews", + "description": "Returns public search suggestions for FotMob leagues, teams, players, and matches. term must contain 1 to 50 characters. Suggestions preserve the upstream JSON shape.", + "operationId": "fotmob-search", "parameters": [ { - "description": "Property reviews payload", - "in": "body", - "name": "option", + "description": "Search phrase, 1 to 50 characters", + "in": "query", + "maxLength": 50, + "minLength": 1, + "name": "term", "required": true, - "schema": { - "$ref": "#/definitions/expedia.PropertyReviewsOption" - } + "type": "string", + "x-example": "Arsenal" } ], "produces": [ @@ -349375,7 +423034,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/expedia.expediaPropertyReviewsResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -349384,24 +423043,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -349414,28 +423055,27 @@ "ApiKeyAuth": [] } ], - "summary": "Expedia Stays property guest reviews", + "summary": "Search FotMob entities", "tags": [ - "Expedia" + "FotMob" ] } }, - "/expedia/properties/search": { - "post": { + "/fotmob/seasons": { + "get": { "consumes": [ "application/json" ], - "description": "Returns Expedia Stays (hotel) search results for a free-text destination and date range. Promotional banners and sponsored ad slots are dropped, so every returned property has an id and name.", - "operationId": "expedia-properties-search", + "description": "Lists the season values FotMob offers for one league, identified by the required numeric `league_id` (from the FotMob leagues endpoint). The response has the league id, name and a `seasons` list such as `2026/2027`. Pass a season to the FotMob league endpoint; the list varies by league.", + "operationId": "fotmob-seasons", "parameters": [ { - "description": "Property search payload", - "in": "body", - "name": "option", + "description": "Numeric FotMob league id from /fotmob/leagues", + "in": "query", + "name": "league_id", "required": true, - "schema": { - "$ref": "#/definitions/expedia.PropertySearchOption" - } + "type": "integer", + "x-example": 47 } ], "produces": [ @@ -349445,7 +423085,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/expedia.expediaPropertySearchResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -349460,18 +423100,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -349484,24 +423112,77 @@ "ApiKeyAuth": [] } ], - "summary": "Search Expedia Stays properties", + "summary": "FotMob league season discovery", "tags": [ - "Expedia" + "FotMob" ] } }, - "/expresstribune/article": { + "/fotmob/stats": { "get": { - "description": "Returns one Express Tribune story by `url`, which must be a canonical `tribune.com.pk/story//` link. The response has the title, description, section, authors, publication and update times, lead image URL, body `paragraphs` and a `paywalled` flag.", - "operationId": "expresstribune-article", + "consumes": [ + "application/json" + ], + "description": "Returns ranked player or team statistics for a stat id discovered from /fotmob/stats-categories. The accepted stat ids vary by league, season, and type. team_id optionally restricts player statistics to one team. position filters player results client-side.", + "operationId": "fotmob-stats", "parameters": [ { - "description": "Canonical Express Tribune story URL", + "description": "Numeric FotMob league id", + "in": "query", + "name": "league_id", + "required": true, + "type": "string", + "x-example": "47" + }, + { + "description": "Numeric season id from /fotmob/stats-categories; defaults to the newest season", + "in": "query", + "name": "season_id", + "type": "string", + "x-example": "36781" + }, + { + "description": "Stats subject", + "enum": [ + "players", + "teams" + ], + "in": "query", + "name": "type", + "required": true, + "type": "string", + "x-example": "players" + }, + { + "description": "Stat id returned by /fotmob/stats-categories for this league, season, and type", + "in": "query", + "name": "stat", + "required": true, + "type": "string", + "x-example": "goals" + }, + { + "description": "Optional numeric team id to filter player stats", + "in": "query", + "name": "team_id", + "type": "string", + "x-example": "8456" + }, + { + "description": "Optional client-side player position filter", + "enum": [ + "all", + "striker", + "winger", + "attackingMidfielder", + "midfielder", + "fullback", + "centerBack" + ], "in": "query", - "name": "url", - "required": true, + "name": "position", "type": "string", - "x-example": "https://tribune.com.pk/story/2632091/somali-pirates-kill-three-pakistanis-during-rescue-operation" + "x-example": "striker" } ], "produces": [ @@ -349511,7 +423192,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -349538,32 +423219,46 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Express Tribune article content", + "summary": "FotMob league player or team statistics", "tags": [ - "The Express Tribune" + "FotMob" ] } }, - "/expresstribune/author": { + "/fotmob/stats-categories": { "get": { - "description": "Returns one page of story cards from a canonical public author archive. Page is 1-based; the publisher's Next link indicates another page.", - "operationId": "expresstribune-author", + "consumes": [ + "application/json" + ], + "description": "Returns FotMob's current stat catalog and available seasons for a league. With season_id omitted, the response exposes the season list and initial top-stat choices; pass a returned season id to retrieve that season's full player or team stat catalog.", + "operationId": "fotmob-stats-categories", "parameters": [ { - "description": "Canonical author archive URL", + "description": "Numeric FotMob league id", "in": "query", - "name": "url", + "name": "league_id", "required": true, "type": "string", - "x-example": "https://tribune.com.pk/author/7803/web-desk-2" + "x-example": "47" }, { - "description": "1-based page number", + "description": "Numeric season id; omit to discover seasons", "in": "query", - "maximum": 1000, - "minimum": 1, - "name": "page", - "type": "integer" + "name": "season_id", + "type": "string", + "x-example": "36781" + }, + { + "description": "Stats subject", + "enum": [ + "players", + "teams" + ], + "in": "query", + "name": "type", + "required": true, + "type": "string", + "x-example": "players" } ], "produces": [ @@ -349573,7 +423268,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.expresstribuneAuthorResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -349600,59 +423295,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Express Tribune author's public archive", + "summary": "FotMob league stat categories and seasons", "tags": [ - "The Express Tribune" + "FotMob" ] } }, - "/expresstribune/headlines": { + "/fotmob/table": { "get": { - "description": "Returns headlines from one public RSS section. Some directory feeds are historical or infrequently updated; their publisher timestamps are preserved.", - "operationId": "expresstribune-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns the league standings and the upstream table views, including all, home, away, form, and expected-goals tables. League ids are discoverable from /fotmob/leagues.", + "operationId": "fotmob-table", "parameters": [ { - "description": "The Express Tribune section slug", - "enum": [ - "home", - "latest", - "analysis", - "politics", - "cricket", - "movies", - "health", - "style", - "pakistan", - "sindh", - "punjab", - "balochistan", - "khyber-pakhtunkhwa", - "jammu-kashmir", - "gilgit-baltistan", - "business", - "world", - "sports", - "technology", - "games", - "gadget", - "life-style", - "art-books", - "music", - "film", - "fashion", - "gossip", - "tv", - "theatre", - "entertainment", - "opinion", - "editorial", - "blogs" - ], + "description": "Numeric FotMob league id", "in": "query", - "name": "section", + "name": "league_id", "required": true, "type": "string", - "x-example": "home" + "x-example": "47" } ], "produces": [ @@ -349662,7 +423325,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -349683,16 +423346,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Express Tribune section headlines", + "summary": "FotMob league table", "tags": [ - "The Express Tribune" + "FotMob" ] } }, - "/expresstribune/news": { + "/fotmob/team": { "get": { - "description": "Returns current top stories from The Express Tribune's public RSS feed. Feed dates and publisher teasers are returned as published.", - "operationId": "expresstribune-news", + "consumes": [ + "application/json" + ], + "description": "Returns public team data and the sections currently available for that team, such as overview, table, fixtures, squad, stats, transfers, and history. Team ids can be found with /fotmob/search. The upstream section set varies by team. For older fixtures, pass fixtures.previousFixturesUrl to /fotmob/team-fixtures.", + "operationId": "fotmob-team", + "parameters": [ + { + "description": "Numeric FotMob team id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "9825" + } + ], "produces": [ "application/json" ], @@ -349700,7 +423376,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -349715,16 +423403,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Express Tribune top stories", + "summary": "FotMob team details", "tags": [ - "The Express Tribune" + "FotMob" ] } }, - "/expresstribune/sections": { + "/fotmob/team-fixtures": { "get": { - "description": "Returns every usable feed section listed in the publisher's RSS directory. talko is omitted because its official endpoint currently returns an empty response.", - "operationId": "expresstribune-sections", + "consumes": [ + "application/json" + ], + "description": "Returns one page of older team matches. Start with the fixtures.previousFixturesUrl cursor from /fotmob/team, then pass each response's previous value as cursor until it is empty or null. Team ids are open-ended numeric ids discoverable through /fotmob/search.", + "operationId": "fotmob-team-fixtures", + "parameters": [ + { + "description": "Numeric FotMob team id", + "in": "query", + "name": "team_id", + "required": true, + "type": "string", + "x-example": "9825" + }, + { + "description": "Opaque cursor copied from fixtures.previousFixturesUrl in /fotmob/team or previous in the preceding response", + "in": "query", + "name": "cursor", + "required": true, + "type": "string", + "x-example": "https://pub.fotmob.com/prod/db/api/team/9825/fixture-by-date?beforeTimestamp=1785607200" + } + ], "produces": [ "application/json" ], @@ -349732,7 +423441,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -349741,28 +423468,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Express Tribune sections", + "summary": "FotMob paginated team fixtures", "tags": [ - "The Express Tribune" + "FotMob" ] } }, - "/extract": { - "post": { + "/fotmob/team-news": { + "get": { "consumes": [ "application/json" ], - "description": "Reads a public URL as clean Markdown, then returns data that strictly conforms to the supplied bounded JSON Schema. The response includes `truncated`, which is true when the page was too long and only its first part was used.", - "operationId": "extract", + "description": "Returns the paginated article feed shown on a public FotMob team news page. Team ids can be found with /fotmob/search or /fotmob/team.", + "operationId": "fotmob-team-news", "parameters": [ { - "description": "Extraction options", - "in": "body", - "name": "extractOption", + "description": "Numeric FotMob team id", + "in": "query", + "name": "team_id", "required": true, - "schema": { - "$ref": "#/definitions/extract.Option" - } + "type": "integer", + "x-example": 8456 + }, + { + "description": "Zero-based news offset from 0 through 10000", + "in": "query", + "maximum": 10000, + "minimum": 0, + "name": "start_index", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -349772,23 +423507,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/extract.responseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { - "description": "Invalid URL or schema", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Extraction is not configured", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "502": { - "description": "Fetch or model provider failed", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -349799,114 +423534,122 @@ "ApiKeyAuth": [] } ], - "summary": "Extract schema-conforming JSON from a URL", + "summary": "FotMob team news", "tags": [ - "Web" + "FotMob" ] } }, - "/facebook/marketplace/search": { + "/fotmob/transfers": { "get": { "consumes": [ "application/json" ], - "description": "Fetches Facebook Marketplace search or browse results for a location: listing id, title, price, city/state, and a thumbnail image per result. Only the first page Facebook's own server-rendered results page returns is available — Facebook's own further pagination requires a logged-in session and is out of scope. Omit both query and category to get the location's browse feed instead of running a search. minPrice, maxPrice, sortBy, daysSinceListed, and condition only take effect alongside a query or category (Facebook itself ignores them on the plain browse feed), except for the property_rentals category, which has its own always-filtered listing page. This endpoint can take noticeably longer than other search endpoints (up to roughly a minute in the slowest case) as it retries to get past an intermittent upstream condition; priced accordingly.", - "operationId": "facebook-marketplace-search", + "description": "Returns confirmed transfers, rumours, or popular transfers with the public transfer-center filters. Fee values are in EUR. Use fotmob/leagues and fotmob/search to discover league and team ids. The upstream returns 50 rows per page and caps its hit count at 10,000.", + "operationId": "fotmob-transfers", "parameters": [ { - "description": "Facebook Marketplace location vanity slug", + "default": "all", + "description": "Feed mode", + "enum": [ + "all", + "rumours", + "popular" + ], "in": "query", - "name": "location", - "required": true, - "type": "string", - "x-example": "austin" + "name": "mode", + "type": "string" }, { - "description": "Free-text search terms; omit (with category) for the location's browse feed", + "default": 1, + "description": "One-based result page; 50 rows per page", "in": "query", - "name": "query", - "type": "string", - "x-example": "bike" + "maximum": 200, + "minimum": 1, + "name": "page", + "type": "integer" }, { - "description": "Marketplace category", + "default": "6months", + "description": "Time window", "enum": [ - "vehicles", - "property_rentals", - "classifieds", - "apparel", - "electronics", - "entertainment", - "family", - "free", - "garden_outdoors", - "hobbies", - "home_goods", - "home_improvement", - "musical_instruments", - "office_supplies", - "pet_supplies", - "property_sale", - "sporting_goods", - "toys_games" + "6months", + "1year", + "2years", + "3years" ], "in": "query", - "name": "category", - "type": "string", - "x-example": "vehicles" + "name": "last", + "type": "string" }, { - "description": "Minimum price in whole currency units; requires query or category", + "default": "all", + "description": "Transfer direction; applied when league_ids or team_ids is supplied", + "enum": [ + "all", + "in", + "out" + ], "in": "query", - "name": "min_price", - "type": "integer", - "x-example": 20 + "name": "direction", + "type": "string" }, { - "description": "Maximum price in whole currency units; requires query or category", + "description": "Minimum transfer fee in EUR", "in": "query", - "name": "max_price", - "type": "integer", - "x-example": 500 + "minimum": 0, + "name": "min_fee", + "type": "integer" }, { - "description": "Result order; requires query or category", - "enum": [ - "best_match", - "distance_ascend", - "creation_time_descend", - "price_ascend", - "price_descend" - ], + "description": "Maximum transfer fee in EUR", "in": "query", - "name": "sort_by", + "minimum": 0, + "name": "max_fee", + "type": "integer" + }, + { + "description": "Comma-separated numeric FotMob league ids, up to 50; discover with /fotmob/leagues", + "in": "query", + "name": "league_ids", "type": "string", - "x-example": "price_ascend" + "x-example": "47" }, { - "description": "Restrict to listings posted within this many days; requires query or category", - "enum": [ - 1, - 7, - 30 - ], + "description": "Comma-separated numeric FotMob team ids, up to 50; discover with /fotmob/search", "in": "query", - "name": "days_since_listed", - "type": "integer", - "x-example": 7 + "name": "team_ids", + "type": "string", + "x-example": "8456" }, { - "description": "Comma-separated listing conditions; requires query or category", + "default": "lastModified", + "description": "Sort column", "enum": [ - "new", - "used_like_new", - "used_good", - "used_fair" + "lastModified", + "fee", + "date", + "name", + "fromClubName", + "toClubName" ], "in": "query", - "name": "condition", - "type": "string", - "x-example": "new,used_like_new" + "name": "order_by", + "type": "string" + }, + { + "default": false, + "description": "Exclude contract-extension records", + "in": "query", + "name": "exclude_extensions", + "type": "boolean" + }, + { + "default": false, + "description": "Return only likely rumours; mode must be rumours", + "in": "query", + "name": "likely_only", + "type": "boolean" } ], "produces": [ @@ -349916,23 +423659,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/facebook.marketplaceSearchResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { - "description": "Bad request — missing location, an unrecognized enum value, an invalid price range, or a filter given without query/category", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Location not recognized by Facebook Marketplace", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error while fetching search results", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -349943,29 +423686,19 @@ "ApiKeyAuth": [] } ], - "summary": "Search Facebook Marketplace", + "summary": "FotMob transfer center", "tags": [ - "Facebook" + "FotMob" ] } }, - "/facebook/{page}": { + "/fotmob/trending-news": { "get": { "consumes": [ "application/json" ], - "description": "Fetches public data about a Facebook Page given its page ID, vanity name, or full page URL: name, follower/like counts, intro, category, business hours/price range, review count, and any public contact details (email, phone, address, website, WhatsApp number) exposed on the Page's About tab.", - "operationId": "facebook-page", - "parameters": [ - { - "description": "Facebook Page reference: vanity name, handle, profile.php id, or full Facebook URL", - "in": "path", - "name": "page", - "required": true, - "type": "string", - "x-example": "nike" - } - ], + "description": "Returns the five-story Trending shelf shown on FotMob's public News page. Items are curated previews and may overlap the global latest-news feed; the upstream list is dynamic. No locale or country parameter is exposed because the complete accepted value space is not pinned.", + "operationId": "fotmob-trending-news", "produces": [ "application/json" ], @@ -349973,23 +423706,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/facebook.pageResponseDoc" - } - }, - "400": { - "description": "Bad request — missing or invalid page reference", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/fotmob.newsListResponseDoc" } }, "404": { - "description": "Page not found or unavailable", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error while fetching page data", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -350000,19 +423727,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Facebook page details", + "summary": "FotMob trending football news", "tags": [ - "Facebook" + "FotMob" ] } }, - "/fanatics/categories": { + "/fotmob/trending-searches": { "get": { "consumes": [ "application/json" ], - "description": "Returns Fanatics' full top-level navigation tree: leagues (NFL, MLB, NBA, NHL, Soccer, WWE, College, ...) and, where Fanatics exposes a team-level breakdown, each league's teams (College's several hundred schools included). Each league's or team's url is directly usable as fanatics_category's url input. Public data sourced from fanatics.com's own navigation data.", - "operationId": "fanatics-categories", + "description": "Returns FotMob's current grouped trending suggestions for all entities, players, teams, and leagues. The feed is dynamic and may vary by the upstream's inferred region; no region or category parameter is exposed.", + "operationId": "fotmob-trending-searches", "produces": [ "application/json" ], @@ -350020,13 +423747,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanatics.categoriesResponseDoc" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/fotmob.responseDoc" } }, "503": { @@ -350041,48 +423762,117 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fanatics' league and team navigation tree", + "summary": "FotMob trending search suggestions", "tags": [ - "Fanatics" + "FotMob" ] } }, - "/fanatics/category": { + "/fotmob/tv-guide": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a Fanatics league or team category's product listing (name, brand, price, availability, image, url). Use GET /fanatics/categories to discover valid category urls.", - "operationId": "fanatics-category", + "description": "Returns the public seven-day football broadcast schedule for a country, with local schedule times. Discover all accepted country codes from /fotmob/tv-guide-countries. Timezone defaults to UTC.", + "operationId": "fotmob-tv-guide", "parameters": [ { - "description": "A fanatics.com league or team category URL, exactly as returned by a fanatics_categories result's url field.", + "description": "Market code from /fotmob/tv-guide-countries", + "enum": [ + "us", + "se", + "gb", + "de", + "no", + "es", + "mx", + "ar", + "bo", + "cl", + "co", + "cr", + "ec", + "gt", + "hn", + "ni", + "pa", + "py", + "pe", + "uy", + "ve", + "da", + "ca", + "au", + "at", + "be", + "bg", + "hr", + "cy", + "cz", + "ee", + "fi", + "fr", + "gr", + "hu", + "is", + "ie", + "il", + "it", + "nl", + "pl", + "pt", + "ro", + "ru", + "ch", + "tr", + "za", + "br", + "in", + "me", + "id", + "th", + "mm", + "al", + "az", + "bl", + "ba", + "ks", + "la", + "li", + "mk", + "rs", + "sk", + "ua", + "essv", + "nz", + "bd", + "cn", + "gh", + "hk", + "jp", + "kr", + "ma", + "mt", + "my", + "ng", + "ph", + "pk", + "sg", + "si", + "tz" + ], "in": "query", - "name": "url", + "name": "country", "required": true, "type": "string", - "x-example": "/nfl/indianapolis-colts/o-2483+t-03378189+z-90650-4056854214" - }, - { - "description": "1-based result page. Defaults to 1.", - "in": "query", - "name": "page_number", - "type": "integer", - "x-example": 1 - }, - { - "description": "Results per page. One of 24, 48, 72. Defaults to 24.", - "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 24 + "x-example": "us" }, { - "description": "One of TopSellers, LowestPrice, HighestPrice, NewestArrivals. Defaults to TopSellers.", + "description": "IANA timezone for local times", "in": "query", - "name": "sort", + "name": "timezone", "type": "string", - "x-example": "TopSellers" + "x-example": "America/New_York" } ], "produces": [ @@ -350092,7 +423882,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanatics.categoryResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -350101,8 +423891,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -350119,27 +423909,110 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Fanatics league or team category", + "summary": "FotMob football TV guide", "tags": [ - "Fanatics" + "FotMob" ] } }, - "/fanatics/product": { + "/fotmob/tv-guide-channels": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Fanatics product's detail (name, brand, category, price, availability, condition, images), plus per-size availability/price, a fit/value/quality review-rating breakdown, a richer media gallery, and comparable-product alternates (e.g. a jersey's Game/Limited/Elite stitch tiers) where Fanatics exposes them. Use GET /fanatics/search or GET /fanatics/category to discover product urls.", - "operationId": "fanatics-product", + "description": "Discovers channels attached to matches in the selected country's current seven-day public TV guide window. Use the country directory to discover the complete country code set.", + "operationId": "fotmob-tv-guide-channels", "parameters": [ { - "description": "A fanatics.com product-detail URL, exactly as returned by a fanatics_search or fanatics_category result's url field.", + "description": "Market code from /fotmob/tv-guide-countries", + "enum": [ + "us", + "se", + "gb", + "de", + "no", + "es", + "mx", + "ar", + "bo", + "cl", + "co", + "cr", + "ec", + "gt", + "hn", + "ni", + "pa", + "py", + "pe", + "uy", + "ve", + "da", + "ca", + "au", + "at", + "be", + "bg", + "hr", + "cy", + "cz", + "ee", + "fi", + "fr", + "gr", + "hu", + "is", + "ie", + "il", + "it", + "nl", + "pl", + "pt", + "ro", + "ru", + "ch", + "tr", + "za", + "br", + "in", + "me", + "id", + "th", + "mm", + "al", + "az", + "bl", + "ba", + "ks", + "la", + "li", + "mk", + "rs", + "sk", + "ua", + "essv", + "nz", + "bd", + "cn", + "gh", + "hk", + "jp", + "kr", + "ma", + "mt", + "my", + "ng", + "ph", + "pk", + "sg", + "si", + "tz" + ], "in": "query", - "name": "url", + "name": "country", "required": true, "type": "string", - "x-example": "https://www.fanatics.com/nfl/indianapolis-colts/indianapolis-colts-fanatics-slice-shorts-royal/o-2472+t-03937001+p-94133518138+z-9-2488621558" + "x-example": "us" } ], "produces": [ @@ -350149,7 +424022,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanatics.productResponseDoc" + "$ref": "#/definitions/fotmob.responseDoc" } }, "400": { @@ -350164,12 +424037,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -350182,50 +424049,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fanatics product's detail", + "summary": "FotMob TV guide channels", "tags": [ - "Fanatics" + "FotMob" ] } }, - "/fanatics/search": { + "/fotmob/tv-guide-countries": { "get": { "consumes": [ "application/json" ], - "description": "Searches Fanatics products by the required `query`. Choose `page_size` (24, 48 or 72; default 24), `page_number` (default 1) and `sort` (`TopSellers`, `LowestPrice`, `HighestPrice` or `NewestArrivals`; default `TopSellers`). Each item has product id, name, brand, category, price, currency, availability, image and URL. Also returns `total_items` and `has_next_page`. An invalid `page_size` or `sort` returns `400`.", - "operationId": "fanatics-search", - "parameters": [ - { - "description": "Free-text search keywords.", - "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "colts jersey" - }, - { - "description": "1-based result page. Defaults to 1.", - "in": "query", - "name": "page_number", - "type": "integer", - "x-example": 1 - }, - { - "description": "Results per page. One of 24, 48, 72. Defaults to 24.", - "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 24 - }, - { - "description": "One of TopSellers, LowestPrice, HighestPrice, NewestArrivals. Defaults to TopSellers.", - "in": "query", - "name": "sort", - "type": "string", - "x-example": "TopSellers" - } - ], + "description": "Lists the countries in FotMob's football TV guide country selector, each with a country `code` (such as `us`, `gb`, `de` or `jp`) and a name. Use a code with the FotMob TV guide and TV guide channels endpoints. It takes no parameters.", + "operationId": "fotmob-tv-guide-countries", "produces": [ "application/json" ], @@ -350233,19 +424069,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanatics.searchResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/fotmob.responseDoc" } }, "503": { @@ -350260,19 +424084,26 @@ "ApiKeyAuth": [] } ], - "summary": "Search Fanatics' product catalog", + "summary": "FotMob TV guide country directory", "tags": [ - "Fanatics" + "FotMob" ] } }, - "/fanaticscollect/auctions": { + "/foxnews/article": { "get": { - "consumes": [ - "application/json" + "description": "Returns public Fox News article metadata and body paragraphs from a canonical article URL. This does not bypass login, subscription, or other access controls.", + "operationId": "foxnews-article", + "parameters": [ + { + "description": "Canonical Fox News article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.foxnews.com/us/example-story" + } ], - "description": "Returns Fanatics Collect's current and recent weekly and premier auction events -- the same short list the site's own header auction switcher and countdown banner show. This is the discovery endpoint for Search's auction_urn param: copy an event's urn value to browse every lot in that auction. A small, current/recent set (observed live: around 6 events), not a full historical archive -- older auctions' urn values found on a Search result or a GetListing response remain valid for Search even once they no longer appear here.", - "operationId": "fanaticscollect-auctions", "produces": [ "application/json" ], @@ -350280,17 +424111,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticscollect.auctionsResponseDoc" + "$ref": "#/definitions/foxnews.articleResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -350307,19 +424144,32 @@ "ApiKeyAuth": [] } ], - "summary": "List Fanatics Collect auction events", + "summary": "Get Fox News article content", "tags": [ - "Fanatics Collect" + "Fox News" ] } }, - "/fanaticscollect/categories": { + "/foxnews/author": { "get": { - "consumes": [ - "application/json" + "description": "Returns one Fox News author/personality's public bio page: name, biography, and their most recent articles. Provide either the author's name slug or the full https://www.foxnews.com/person// page URL.", + "operationId": "foxnews-author", + "parameters": [ + { + "description": "Fox News author name slug, e.g. brooke-taylor", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "brooke-taylor" + }, + { + "description": "Canonical https://www.foxnews.com/person// author page URL, as an alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.foxnews.com/person/t/brooke-taylor" + } ], - "description": "Returns every accepted value for GetListing's marketplace param -- WEEKLY, PREMIER, FIXED -- and for Search's marketplace, category_parent, sub_category, grading_service, status, and sort params. Discovery endpoint for those closed enums.", - "operationId": "fanaticscollect-categories", "produces": [ "application/json" ], @@ -350327,52 +424177,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticscollect.categoriesResponseDoc" + "$ref": "#/definitions/foxnews.authorResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "List Fanatics Collect search filter values", - "tags": [ - "Fanatics Collect" - ] - } - }, - "/fanaticscollect/instant-rips/categories": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns every category Fanatics Collect's \"Instant Rips\" mystery-pack product (fanaticscollect.com/instant-rips) currently advertises on its homepage: id, name, and price range. Instant Rips is a \"buy a randomized pack, a real graded card is revealed\" product; each category's id is a real listing id, fetchable through GetListing with type=FIXED for that entry point's own full detail. This does not cover the individual pack-tier tiles within a category or the homepage's \"Recently ripped\" live feed.", - "operationId": "fanaticscollect-instant-rips-categories", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/fanaticscollect.instantRipsCategoriesResponseDoc" - } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -350389,38 +424210,38 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fanatics Collect Instant Rips categories", + "summary": "Get Fox News author profile", "tags": [ - "Fanatics Collect" + "Fox News" ] } }, - "/fanaticscollect/listing/{id}": { + "/foxnews/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns full detail for a single Fanatics Collect listing: a weekly-auction lot, a premier-auction lot, or a fixed-price \"buy now\" item (including an Instant Rips pack). Fields include title, current bid/starting/asking price, bid count, auction window and status, images, description, completed sale history, and -- when the card is stored in Fanatics' vault -- grading/authentication metadata including a direct PSA cert-verification link.", - "operationId": "fanaticscollect-listing", + "description": "Returns the latest 25 Fox News headlines for one section. `section` is required and must be one of `us`, `world`, `politics`, `science`, `health`, `sports`, `travel`, `tech`, `opinion`, `entertainment`, `media` or `lifestyle`. Each item has its title, URL, summary, publication time and image.", + "operationId": "foxnews-headlines", "parameters": [ { - "description": "Listing UUID", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "1e389d12-6f23-11ed-9d8b-0a58a9feac02" - }, - { - "description": "Listing type. Default: WEEKLY", + "description": "Fox News RSS section slug: us, world, politics, science, health, sports, travel, tech, opinion, entertainment, media, or lifestyle", "enum": [ - "WEEKLY", - "PREMIER", - "FIXED" + "us", + "world", + "politics", + "science", + "health", + "sports", + "travel", + "tech", + "opinion", + "entertainment", + "media", + "lifestyle" ], "in": "query", - "name": "type", - "type": "string" + "name": "section", + "required": true, + "type": "string", + "x-example": "us" } ], "produces": [ @@ -350430,35 +424251,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticscollect.listingResponseDoc" + "$ref": "#/definitions/foxnews.headlinesResponseDoc" } }, "400": { - "description": "Missing or invalid path/query parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Listing not found", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal server error", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Fanatics Collect upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -350469,211 +424284,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fanatics Collect listing detail", + "summary": "Get Fox News section headlines", "tags": [ - "Fanatics Collect" + "Fox News" ] } }, - "/fanaticscollect/search": { + "/foxnews/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Fanatics Collect's full marketplace -- weekly auctions, premier auctions, and the fixed-price \"Buy Now\" marketplace -- by free-text query, category, grading service, price/year/grade range, and listing status, in a caller-selected sort order. See GetCategories for the accepted category, grading-service, status, and sort values.", - "operationId": "fanaticscollect-search", - "parameters": [ - { - "description": "Free-text search across title, brand, subject, and set", - "in": "query", - "name": "q", - "type": "string", - "x-example": "aaron judge" - }, - { - "description": "Listing type. Omit to search all three.", - "enum": [ - "WEEKLY", - "PREMIER", - "FIXED" - ], - "in": "query", - "name": "marketplace", - "type": "string" - }, - { - "description": "Top-level category", - "enum": [ - "Sports Cards", - "Trading Card Games", - "Other", - "Video Games", - "Comics" - ], - "in": "query", - "name": "category_parent", - "type": "string" - }, - { - "description": "A parent > child category path (or just the child name), e.g. \\", - "in": "query", - "name": "sub_category", - "type": "string" - }, - { - "description": "Grading/authentication service", - "enum": [ - "Ungraded", - "CGC", - "PSA", - "BGS", - "SGC", - "Other Approved", - "PSA/DNA", - "CSG", - "MBA", - "PSA_DNA", - "BVG", - "OTHER_APPROVED", - "BCCG", - "WATA", - "GAI", - "VGA", - "CBCS", - "UDA", - "CAC", - "KSA", - "PCGS" - ], - "in": "query", - "name": "grading_service", - "type": "string" - }, - { - "description": "Exact seller/shop name (case-insensitive). Not a fixed enum -- match a name from a prior Search result's certified_seller field.", - "in": "query", - "name": "certified_seller", - "type": "string", - "x-example": "Fanatics Collect" - }, - { - "description": "Exact seller id (UUID) -- browse everything one seller has listed. Not a fixed enum; match a prior Search result's seller_id field.", - "in": "query", - "name": "seller_id", - "type": "string", - "x-example": "4216b44a-9696-4263-96c3-5f58eeb9a316" - }, - { - "description": "Exact brand/subject facet value (case-insensitive), e.g. a player, character, or set name. Not a fixed enum; match a prior Search result's brand field.", - "in": "query", - "name": "brand", - "type": "string", - "x-example": "Michael Jordan" - }, - { - "description": "Browse every lot in one specific weekly or premier auction event. Not a fixed enum; copy the exact value from a prior Search result's auction_urn field. Only WEEKLY/PREMIER listings carry one.", - "in": "query", - "name": "auction_urn", - "type": "string", - "x-example": "WEEKLY:fb70389e-1c67-11f1-90df-0ab83224f98f" - }, - { - "description": "Listing status. Default LIVE.", - "enum": [ - "LIVE", - "SOLD", - "ALL" - ], - "in": "query", - "name": "status", - "type": "string" - }, - { - "description": "Filter for listings the seller accepts offers on", - "in": "query", - "name": "allow_offers", - "type": "boolean" - }, - { - "description": "Filter for listings with at least one active offer pending", - "in": "query", - "name": "has_offers", - "type": "boolean" - }, - { - "description": "Filter for listings Fanatics Collect itself flags as a great price vs. guide value", - "in": "query", - "name": "great_price", - "type": "boolean" - }, - { - "description": "Minimum current price/bid, inclusive", - "in": "query", - "name": "min_price", - "type": "number" - }, - { - "description": "Maximum current price/bid, inclusive", - "in": "query", - "name": "max_price", - "type": "number" - }, - { - "description": "Minimum card/item year, inclusive", - "in": "query", - "name": "min_year", - "type": "integer" - }, - { - "description": "Maximum card/item year, inclusive", - "in": "query", - "name": "max_year", - "type": "integer" - }, - { - "description": "Minimum numeric grade, inclusive", - "in": "query", - "name": "min_grade", - "type": "number" - }, - { - "description": "Maximum numeric grade, inclusive", - "in": "query", - "name": "max_grade", - "type": "number" - }, - { - "description": "Result order. Default best_value.", - "enum": [ - "recommended", - "recently_added", - "best_deals", - "lot_number", - "lowest_price", - "highest_price", - "best_value", - "earliest_year", - "latest_year", - "earliest_sale_date", - "latest_sale_date" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "1-based page number, default 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Results per page, default 24, max 100", - "in": "query", - "name": "per_page", - "type": "integer" - } - ], + "description": "Returns fresh Fox News top stories from the public site-wide RSS feed. The feed is a public headline/body source and does not require credentials.", + "operationId": "foxnews-news", "produces": [ "application/json" ], @@ -350681,17 +424301,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticscollect.searchResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/foxnews.newsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -350708,131 +424322,46 @@ "ApiKeyAuth": [] } ], - "summary": "Search Fanatics Collect listings", + "summary": "Get Fox News top stories", "tags": [ - "Fanatics Collect" + "Fox News" ] } }, - "/fanaticscollect/sold-items": { + "/foxnews/search": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Fanatics Collect's sales-history archive -- every completed sale across every marketplace, not just what the live search index currently surfaces. A separate product from Search, reached from the \"View all sold items\" link on every marketplace search page. purchase_price is what the buyer paid in US dollars: for WEEKLY and PREMIER auction sales it includes the buyer's premium, so it is higher than the listing's final bid; for FIXED sales it equals the asking price. See GetCategories for the accepted category, grading-service, eye-appeal-grade, and sort values.", - "operationId": "fanaticscollect-sold-items", + "description": "Searches Fox News. Results may include article, video, or slideshow records; use type to restrict the result kind.", + "operationId": "foxnews-search", "parameters": [ { - "description": "Free-text search across item title", + "description": "Search query", "in": "query", - "name": "title", + "maxLength": 200, + "minLength": 1, + "name": "q", + "required": true, "type": "string", - "x-example": "aaron judge" - }, - { - "description": "Item category", - "enum": [ - "Trading Cards", - "Baseball", - "Basketball", - "Football", - "Hockey", - "Golf", - "Boxing & MMA", - "Soccer", - "Tennis", - "Racing", - "Misc Sports", - "Non-Sport", - "Yu-Gi-Oh!", - "Magic The Gathering", - "Pokémon", - "Collectible Card Games", - "Miscellaneous", - "Memorabilia", - "Photos", - "Comics", - "Tickets", - "Coins", - "Video Games" - ], - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Grading/authentication service, including ungraded for raw items", - "enum": [ - "PSA", - "SGC", - "BGS", - "BVG", - "BCCG", - "CGC", - "CSG", - "ungraded" - ], - "in": "query", - "name": "grading_service", - "type": "string" - }, - { - "description": "Eye-appeal grade", - "enum": [ - "Eye Appeal - A", - "Eye Appeal - E", - "Eye Appeal - S" - ], - "in": "query", - "name": "eye_appeal_grade", - "type": "string" - }, - { - "description": "Minimum card/item year, inclusive", - "in": "query", - "name": "min_year", - "type": "integer" + "x-example": "election" }, { - "description": "Maximum card/item year, inclusive", + "default": 1, + "description": "1-based result offset", "in": "query", - "name": "max_year", + "maximum": 10000, + "minimum": 1, + "name": "start", "type": "integer" }, { - "description": "Minimum sold price, inclusive", - "in": "query", - "name": "min_price", - "type": "number" - }, - { - "description": "Maximum sold price, inclusive", - "in": "query", - "name": "max_price", - "type": "number" - }, - { - "description": "Result order. Default sold_date_desc.", + "description": "Result type", "enum": [ - "sold_date_desc", - "highest_price", - "lowest_price" + "article", + "video", + "slideshow" ], "in": "query", - "name": "sort", + "name": "type", "type": "string" - }, - { - "description": "1-based page number, default 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Results per page, default 20, max 100", - "in": "query", - "name": "per_page", - "type": "integer" } ], "produces": [ @@ -350842,7 +424371,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticscollect.soldItemsResponseDoc" + "$ref": "#/definitions/foxnews.searchResponseDoc" } }, "400": { @@ -350851,8 +424380,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -350869,28 +424398,16 @@ "ApiKeyAuth": [] } ], - "summary": "Search Fanatics Collect sold items", + "summary": "Search Fox News public content", "tags": [ - "Fanatics Collect" + "Fox News" ] } }, - "/fanaticscollect/trending-searches": { + "/foxnews/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Fanatics Collect's own currently trending search terms -- the same list shown in the site's own header search box before the visitor types anything.", - "operationId": "fanaticscollect-trending-searches", - "parameters": [ - { - "description": "Number of terms to return, 1-50, default 8", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 8 - } - ], + "description": "Returns the exact live-verified Fox News article RSS section slugs accepted by foxnews-headlines. The video-only RSS feed is intentionally excluded.", + "operationId": "foxnews-sections", "produces": [ "application/json" ], @@ -350898,23 +424415,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticscollect.trendingSearchesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/foxnews.sectionsResponseDoc" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -350925,52 +424430,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fanatics Collect trending search terms", + "summary": "Get Fox News RSS sections", "tags": [ - "Fanatics Collect" + "Fox News" ] } }, - "/fanaticslive/browse": { + "/foxsports/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the live and upcoming shows currently listed under a Fanatics Live league: name, status, cover image, viewers, and the hosting channel/shop.", - "operationId": "fanaticslive-browse", + "description": "Returns public FOX Sports article metadata and body paragraphs from a canonical foxsports.com/stories/
/ URL. Public body content stops at the article body container.", + "operationId": "foxsports-article", "parameters": [ { - "description": "Fanatics Live league type code. See GET /fanaticslive/leagues for the full list.", - "enum": [ - "NFL", - "NCAA_FB", - "NBA", - "MLB", - "SOCCER", - "NHL", - "POKEMON", - "STAR_WARS", - "MLS", - "UFC", - "WWE", - "F1", - "NASCAR", - "DISNEY", - "GARBAGE_PAIL_KIDS", - "MAGIC_THE_GATHERING", - "WNBA", - "NCAA_BK", - "GOLF", - "VEE_FRIENDS", - "DUDE_PERFECT", - "OTHER", - "ORIGINALS" - ], + "description": "Canonical FOX Sports story URL", "in": "query", - "name": "league", + "name": "url", "required": true, "type": "string", - "x-example": "POKEMON" + "x-example": "https://www.foxsports.com/stories/nfl/how-to-watch-eagles-vs-bears-tv-channel-live-stream-time-2026-week-3" } ], "produces": [ @@ -350980,7 +424457,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticslive.browseResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -350989,8 +424466,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -351007,27 +424490,49 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Fanatics Live shows by league", + "summary": "Get FOX Sports article content", "tags": [ - "Fanatics Live" + "FOX Sports" ] } }, - "/fanaticslive/channel/{id}": { + "/foxsports/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a Fanatics Live channel's own detail page: its parent shop, and a first page of its live/upcoming and past/replay shows. A shop can run several channels (e.g. a league-specific sub-feed) -- see /fanaticslive/shop/{slug} for a shop's full channel list and /fanaticslive/shop/{slug}/shows for cursor-paginated access to a full show history.", - "operationId": "fanaticslive-channel", + "description": "Returns current FOX Sports headlines for one sport or topic. `section` is required and takes one of 23 slugs such as `top`, `nfl`, `nba`, `college-football`, `ufc`, `golf` or `fifa-world-cup`; others return an invalid-parameter error. Feeds follow FOX Sports' own curation and can include related cross-sport items.", + "operationId": "foxsports-headlines", "parameters": [ { - "description": "Fanatics Live channel id (a UUID), e.g. from a shop or show result's channel.id field", - "in": "path", - "name": "id", + "description": "FOX Sports section slug", + "enum": [ + "top", + "mlb", + "nfl", + "college-football", + "ufl", + "nba", + "nhl", + "college-basketball", + "nascar", + "ufc", + "motor-sports", + "golf", + "soccer", + "fifa-world-cup", + "fifa-womens-world-cup", + "olympics", + "tennis", + "horseracing", + "westminster-kennel-club-dog-show", + "wnba", + "womens-college-basketball", + "world-baseball-classic", + "wwe" + ], + "in": "query", + "name": "section", "required": true, "type": "string", - "x-example": "adc4b55f-5e10-4ed0-8680-11875cfe1c94" + "x-example": "top" } ], "produces": [ @@ -351037,7 +424542,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticslive.channelResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -351046,14 +424551,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -351070,19 +424569,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fanatics Live channel's detail page", + "summary": "Get FOX Sports section headlines", "tags": [ - "Fanatics Live" + "FOX Sports" ] } }, - "/fanaticslive/leagues": { + "/foxsports/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Fanatics Live's full league/category list (e.g. \"Pokemon\", \"NFL\", \"MTG\"). Each entry's type is usable directly with /fanaticslive/browse's league filter.", - "operationId": "fanaticslive-leagues", + "description": "Returns current cross-sport stories from FOX Sports' All Headlines feed. Each item has its title and canonical story URL, plus summary, publication time, author and image when FOX Sports supplies them. Takes no parameters.", + "operationId": "foxsports-news", "produces": [ "application/json" ], @@ -351090,11 +424586,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticslive.leaguesResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -351111,27 +424607,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fanatics Live's league taxonomy", + "summary": "Get FOX Sports top stories", "tags": [ - "Fanatics Live" + "FOX Sports" ] } }, - "/fanaticslive/shop/{slug}": { + "/foxsports/sections": { "get": { - "consumes": [ + "description": "Lists the 23 FOX Sports editorial feeds accepted by `foxsports-headlines`, including `top`, `mlb`, `nfl`, `soccer`, `olympics` and `wwe`. Each entry has the `slug`, `name` and feed `url`. The All Headlines feed is served by `foxsports-news`, not as a section; checked 2026-09-28.", + "operationId": "foxsports-sections", + "produces": [ "application/json" ], - "description": "Returns a Fanatics Live shop's public profile page: description, social links, follower count, and its channels and staffers.", - "operationId": "fanaticslive-shop", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get FOX Sports news sections", + "tags": [ + "FOX Sports" + ] + } + }, + "/france24/article": { + "get": { + "description": "Returns public France 24 English-edition article metadata and body paragraphs from a canonical article URL. Live-blog pages are supported and return their chronological update entries as body paragraphs.", + "operationId": "france24-article", "parameters": [ { - "description": "Fanatics Live shop slug, e.g. from a shops-list result's slug field", - "in": "path", - "name": "slug", + "description": "Canonical France 24 article URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "we-the-hobby" + "x-example": "https://www.france24.com/en/europe/20260924-eu-sanctions-russian-pundit-xenia-fedorova-after-expulsion-from-france" } ], "produces": [ @@ -351141,7 +424660,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticslive.shopResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -351156,12 +424675,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -351174,52 +424687,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fanatics Live shop's public profile", + "summary": "Get France 24 article content", "tags": [ - "Fanatics Live" + "France 24" ] } }, - "/fanaticslive/shop/{slug}/shows": { + "/france24/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a Fanatics Live shop's own live/upcoming or past/replay show list -- distinct from /fanaticslive/browse, which lists shows across all shops filtered by league. status=replay is the only way to observe a COMPLETE-status show.", - "operationId": "fanaticslive-shop-shows", + "description": "Returns one France 24 byline's public profile (name, job title, biography) and their recent articles from a canonical author-profile URL. This includes the shared \"FRANCE 24\" newsroom byline used on many stories, which has no individual biography.", + "operationId": "france24-author", "parameters": [ { - "description": "Fanatics Live shop slug, e.g. from a shops-list result's slug field", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "going-twice" - }, - { - "description": "Which show list to return", - "enum": [ - "live", - "replay" - ], + "description": "Canonical www.france24.com/en/author// URL", "in": "query", - "name": "status", + "name": "url", "required": true, "type": "string", - "x-example": "live" - }, - { - "description": "Pagination cursor from a previous response's next_cursor", - "in": "query", - "name": "after", - "type": "string" - }, - { - "description": "Max shows to return (default 24)", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 24 + "x-example": "https://www.france24.com/en/author/france-24/" } ], "produces": [ @@ -351229,7 +424714,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticslive.shopShowsResponseDoc" + "$ref": "#/definitions/publicnews.france24AuthorResponseDoc" } }, "400": { @@ -351244,12 +424729,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -351262,19 +424741,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fanatics Live shop's own live or replay show list", + "summary": "Get a France 24 author profile", "tags": [ - "Fanatics Live" + "France 24" ] } }, - "/fanaticslive/shops": { + "/france24/headlines": { "get": { - "consumes": [ - "application/json" + "description": "Returns the latest France 24 English-edition headlines for one section. `section` is required and must be one of `africa`, `americas`, `asia-pacific`, `europe`, `france`, `middle-east`, `business-tech`, `culture`, `environment`, `sport`, `live-news` or `tv-shows`. Each item has its title, URL, summary, publication time and author.", + "operationId": "france24-headlines", + "parameters": [ + { + "description": "France 24 section slug", + "enum": [ + "africa", + "americas", + "asia-pacific", + "europe", + "france", + "middle-east", + "business-tech", + "culture", + "environment", + "sport", + "live-news", + "tv-shows" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "africa" + } ], - "description": "Returns Fanatics Live's full public shop directory: every shop's id, name, slug, logo, and follower count. Each entry's slug is usable directly with /fanaticslive/shop/{slug}.", - "operationId": "fanaticslive-shops", "produces": [ "application/json" ], @@ -351282,11 +424782,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticslive.shopsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -351303,29 +424803,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fanatics Live's shop directory", + "summary": "Get France 24 section headlines", "tags": [ - "Fanatics Live" + "France 24" ] } }, - "/fanaticslive/show/{id}": { + "/france24/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a Fanatics Live live show's detail page: status, viewers, hosting channel/shop, its currently active break/lot, and its full break/lot list.", - "operationId": "fanaticslive-show", - "parameters": [ - { - "description": "Fanatics Live show id, e.g. from a browse result's id field", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "1b1aeec0-346b-4c8f-941a-bcb8af558a5a" - } - ], + "description": "Returns the current France 24 English-edition top stories. Each item has its title, URL, summary, publication time and author. Takes no parameters; use `france24-headlines` for a single region or topic.", + "operationId": "france24-news", "produces": [ "application/json" ], @@ -351333,25 +424820,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticslive.showResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -351366,29 +424835,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fanatics Live show's detail page", + "summary": "Get France 24 top stories", "tags": [ - "Fanatics Live" + "France 24" ] } }, - "/fanaticslive/show/{id}/instant-rips": { + "/france24/sections": { "get": { - "consumes": [ + "description": "Lists the 12 France 24 English-edition sections accepted by `france24-headlines`: six regions, four topics, the `live-news` wire-briefs hub and the `tv-shows` programmes hub. Each entry has the `slug`, display `name` and section `url`.", + "operationId": "france24-sections", + "produces": [ "application/json" ], - "description": "Returns a Fanatics Live show's current break's digital-instant-rip state: spot claim/rip progress and the currently revealing item, when a rip is actively in progress. current_break is omitted when the show has no active break at request time.", - "operationId": "fanaticslive-instant-rips", - "parameters": [ + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Fanatics Live show id, the same id GET /fanaticslive/show/{id} takes", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "186f8cac-d031-436a-b46d-9d9f0b839df2" + "ApiKeyAuth": [] } ], + "summary": "Get France 24 sections", + "tags": [ + "France 24" + ] + } + }, + "/freemalaysiatoday/news": { + "get": { + "description": "Returns Free Malaysia Today's current public top-stories RSS feed: each story's title, canonical URL, summary, author, publication time, and lead image.", + "operationId": "freemalaysiatoday-news", "produces": [ "application/json" ], @@ -351396,23 +424878,49 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanaticslive.instantRipsResponseDoc" + "$ref": "#/definitions/freemalaysiatoday.newsResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get the latest Free Malaysia Today stories", + "tags": [ + "Free Malaysia Today" + ] + } + }, + "/freemalaysiatoday/sections": { + "get": { + "description": "Lists every live-verified primary editorial navigation section, with its slug, display name, and landing-page URL. This is the live-verified primary editorial navigation taxonomy; media, promotional, and duplicate commercial destinations are excluded.", + "operationId": "freemalaysiatoday-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/freemalaysiatoday.sectionsResponseDoc" + } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -351429,30 +424937,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fanatics Live show's current instant-rip state", + "summary": "List Free Malaysia Today sections", "tags": [ - "Fanatics Live" + "Free Malaysia Today" ] } }, - "/fanduel/casino/categories": { + "/fresha/landing-venues": { "get": { "consumes": [ "application/json" ], - "description": "Lists the FanDuel Casino lobby's public categories (slots, jackpots, blackjack, roulette, live dealer, exclusives and more) with the slug the `category` route takes. `region` picks the lobby: `mi` (default) is the Michigan lobby at casino.fanduel.com, which includes the Michigan-only MotorCity Favorites collection, and `on` is the Ontario lobby at casino.fanduel.ca, which has three Ontario-only collections and lacks Hot Slots, Classic Reels and Bonus Buy. The casino site serves one state's lobby to every address tried, so no other state is offered. The signed-in player's own favorites list is not a public category and is not included.", - "operationId": "fanduel-casino-categories", + "description": "Returns the venue list Fresha (fresha.com) publishes on one of its own pre-rendered landing pages: each venue's name, canonical page, published business types, postal address with coordinates, average rating with its rating count, the venue's coarse price band and an image. Read a plain city page with city alone, a business-type page with business_type, or a treatment-type page with treatment_type; the two facets are mutually exclusive. city is the page's own value with its country prefix, e.g. us-new-york. There is no pagination on this route: Fresha pre-renders a fixed list (about 30 venues on a city page, 130 on a business-type or treatment-type page) and exposes no page parameter, so count is the number of venues on the page and never a total. A facet combination Fresha does not publish is a not-found. The price range is the venue's own coarse display string and is not this API's price surface: a venue's service menu, read through fresha-venue, is.", + "operationId": "fresha-landing-venues", "parameters": [ { - "default": "mi", - "description": "Lobby: `mi` Michigan (default) or `on` Ontario", - "enum": [ - "mi", - "on" - ], + "description": "City landing value with country prefix, e.g. us-new-york", "in": "query", - "name": "region", - "type": "string" + "name": "city", + "required": true, + "type": "string", + "x-example": "us-new-york" + }, + { + "description": "Business-type slug, e.g. hair-salons; mutually exclusive with treatment_type", + "in": "query", + "name": "business_type", + "type": "string", + "x-example": "hair-salons" + }, + { + "description": "Treatment-type slug, e.g. hair-colouring; mutually exclusive with business_type", + "in": "query", + "name": "treatment_type", + "type": "string", + "x-example": "hair-colouring" } ], "produces": [ @@ -351462,7 +424981,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.casinoCategoriesResponseDoc" + "$ref": "#/definitions/fresha.landingVenuesResponseDoc" } }, "400": { @@ -351471,6 +424990,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -351483,100 +425014,117 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Casino categories", + "summary": "List the venues on one Fresha landing page", "tags": [ - "FanDuel" + "Fresha" ] } }, - "/fanduel/casino/category": { + "/fresha/search-venues": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of a casino category's games in the lobby's own order, with each game's slug, name, studio, badge (`Exclusive`, `Jackpot`), whether it is flagged as a site-wide jackpot game, and a link to its page. `providers` and `badges` count the whole category so the values the `provider` and `badge` filters accept are always visible; `q` matches every word against the game name. `all-games`, `slots` and `double-your-bet-category` hold the whole catalog (about 3,800 games) in one 30MB page, so their first call is slow and the parsed list is then cached for 15 minutes.", - "operationId": "fanduel-casino-category", + "description": "Returns one page of Fresha's (fresha.com) salon, barber and wellness venue search: each venue's id, slug, name, canonical page, address, business type, rating and rating count, rating badge, cover image and distance, plus the gateway's own match count and a forward cursor. Pass a latitude/longitude pair to search a place (with neither, the gateway falls back to its own default centre and the response reports the centre it used). query, min_price, service_gender (EVERYONE, MALE, FEMALE), awards (BEST_IN_CLASS, HIGHLY_RECOMMENDED), sort (DISTANCE, RATING, RECOMMENDED) and the three treatment ids from fresha-taxonomy (category:, tag:, treatment:/) each change the result set. first is 1 to 200 and larger values are rejected because the gateway rejects them too. Paging is cursor-based: pass next_cursor back as after while has_next_page is true, and note that a malformed cursor silently restarts the list at page one. count 0 with no error is an honest empty result for a valid filter. Search results carry no price: a venue's own service menu, read through fresha-venue, is the only place this API publishes one.", + "operationId": "fresha-search-venues", "parameters": [ { - "default": "mi", - "description": "Lobby: `mi` Michigan (default) or `on` Ontario", + "description": "Free-text query matched by Fresha's venue search", + "in": "query", + "name": "query", + "type": "string", + "x-example": "haircut" + }, + { + "description": "Latitude of the search centre; supply with longitude", + "in": "query", + "name": "latitude", + "type": "number", + "x-example": 40.7128 + }, + { + "description": "Longitude of the search centre; supply with latitude", + "in": "query", + "name": "longitude", + "type": "number", + "x-example": -74.006 + }, + { + "description": "Result ordering", "enum": [ - "mi", - "on" + "DISTANCE", + "RATING", + "RECOMMENDED" ], "in": "query", - "name": "region", - "type": "string" + "name": "sort", + "type": "string", + "x-example": "RATING" }, { - "description": "Category slug from the `categories` route for the same `region`. Michigan has `all-games`, `new`, `slots`, `double-your-bet-category`, `jackpots`, `daily-jackpots`, `hot-slots`, `classic-reels-category`, `bonus-buy-category`, `high-limit-category`, `spooky-slots-category`, `exclusives`, `pick-play`, `arcade`, `blackjack`, `baccarat`, `roulette`, `table`, `livecasino`, `online-casino-favorites`, `explore-videos`, `motorcity-favorites`; Ontario has the same list without `hot-slots`, `classic-reels-category`, `bonus-buy-category`, `online-casino-favorites` and `motorcity-favorites`, and adds `fallsview-favourites-category`, `the-wolf-den-category`, `sports-central`. A slug the lobby lacks returns `400`", + "description": "Minimum service price in the market's own currency", + "in": "query", + "name": "min_price", + "type": "number", + "x-example": 100 + }, + { + "description": "Venue gender focus", "enum": [ - "all-games", - "new", - "slots", - "double-your-bet-category", - "jackpots", - "daily-jackpots", - "hot-slots", - "classic-reels-category", - "bonus-buy-category", - "high-limit-category", - "spooky-slots-category", - "exclusives", - "pick-play", - "arcade", - "blackjack", - "baccarat", - "roulette", - "table", - "livecasino", - "online-casino-favorites", - "explore-videos", - "motorcity-favorites", - "fallsview-favourites-category", - "the-wolf-den-category", - "sports-central" + "EVERYONE", + "MALE", + "FEMALE" ], "in": "query", - "name": "category", - "required": true, + "name": "service_gender", "type": "string", - "x-example": "blackjack" + "x-example": "FEMALE" }, { - "description": "Words to find in the game name, such as `huff puff`; every word must match", + "description": "Fresha award filter", + "enum": [ + "BEST_IN_CLASS", + "HIGHLY_RECOMMENDED" + ], "in": "query", - "name": "q", - "type": "string" + "name": "awards", + "type": "string", + "x-example": "BEST_IN_CLASS" }, { - "description": "Keep only games from this studio, exactly as listed in the response `providers` (for example `NYX`, `Evolution`, `IGT`); a value the category does not have returns `400`", + "description": "Taxonomy category id from fresha-taxonomy, e.g. category:nails", "in": "query", - "name": "provider", - "type": "string" + "name": "treatment_category_id", + "type": "string", + "x-example": "category:nails" }, { - "description": "Keep only games with this badge, exactly as listed in the response `badges` (for example `Exclusive`, `Jackpot`)", + "description": "Taxonomy tag id from fresha-taxonomy, e.g. tag:haircut", "in": "query", - "name": "badge", - "type": "string" + "name": "treatment_tag_id", + "type": "string", + "x-example": "tag:haircut" }, { - "default": 50, - "description": "Games per page, 1 to 200; default 50", + "description": "Taxonomy treatment id from fresha-taxonomy, e.g. treatment:nails/wedding-nails", "in": "query", - "maximum": 200, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "treatment_type_id", + "type": "string", + "x-example": "treatment:nails/wedding-nails" }, { - "default": 0, - "description": "Games to skip; default 0", + "description": "Venues per page, default 20, maximum 200", "in": "query", - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "first", + "type": "integer", + "x-example": 20 + }, + { + "description": "Forward cursor from next_cursor; omit for the first page", + "in": "query", + "name": "after", + "type": "string", + "x-example": "WzEuMCwxLjEyOTY0NTMxMjM1ODQzNDIsMjgzMjcxXQ==" } ], "produces": [ @@ -351586,7 +425134,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.casinoCategoryResponseDoc" + "$ref": "#/definitions/fresha.searchVenuesResponseDoc" } }, "400": { @@ -351595,6 +425143,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -351607,38 +425161,40 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Casino category games", + "summary": "Search Fresha venues by text, place, price, gender, award and treatment", "tags": [ - "FanDuel" + "Fresha" ] } }, - "/fanduel/casino/game": { + "/fresha/taxonomy": { "get": { "consumes": [ "application/json" ], - "description": "Returns a casino game's detail page: category, minimum and maximum bet, studio, volatility, themes, features, how many players are in it right now, its badge and description, and the identifiers its play link carries (provider, provider reference, game id and the lobby region). Slugs come from the `category` route; an unknown game returns 404.", - "operationId": "fanduel-casino-game", + "description": "Returns one page of Fresha's (fresha.com) treatment taxonomy: the ids that fresha-search-venues accepts as treatment_category_id, treatment_tag_id and treatment_type_id. Each node carries its id, display label, kind (TreatmentCategory, TreatmentTag or TreatmentType) and an icon for categories; ids take the forms category:, tag: and treatment:/. With no query this returns Fresha's closed category page: 20 categories, with a 21st reachable only by text search, so categories are effectively complete. Tags and treatment types are not: they only appear for a text query and are ranked by Fresha's own autocomplete, so treat a text search as a discovered set rather than a complete catalogue, and page it with next_start while has_next_page is true. Use words from a treatment name (nail, haircut, massage). first is 1 to 200.", + "operationId": "fresha-taxonomy", "parameters": [ { - "default": "mi", - "description": "Lobby of the game: `mi` Michigan (default) or `on` Ontario", - "enum": [ - "mi", - "on" - ], + "description": "Taxonomy search text; empty returns the closed category page", "in": "query", - "name": "region", - "type": "string" + "name": "query", + "type": "string", + "x-example": "nail" }, { - "description": "Game slug from the `category` route (`games[].slug`), lower-case, such as `huff-n-even-more-puff-hard-hat-edition`", + "description": "Nodes per page, default 200, maximum 200", "in": "query", - "name": "game", - "required": true, - "type": "string", - "x-example": "huff-n-even-more-puff-hard-hat-edition" + "name": "first", + "type": "integer", + "x-example": 200 + }, + { + "description": "Zero-based offset from next_start, default 0", + "in": "query", + "name": "start", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -351648,7 +425204,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.casinoGameResponseDoc" + "$ref": "#/definitions/fresha.taxonomyResponseDoc" } }, "400": { @@ -351657,8 +425213,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -351675,55 +425231,27 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Casino game detail", + "summary": "List Fresha's treatment categories, tags and treatment types", "tags": [ - "FanDuel" + "Fresha" ] } }, - "/fanduel/racing/carryover-pools": { + "/fresha/venue": { "get": { "consumes": [ "application/json" ], - "description": "Lists the multi-race pools that carried over (Pick 3 to Pick 6, Super High Five, Superfecta, Daily Double) with the amount, the track, the race the pool pays on and that race's minutes to post and status. Largest pool first. `status` filters by the status of the race the pool pays on.", - "operationId": "fanduel-racing-carryover-pools", + "description": "Returns one Fresha (fresha.com) venue: name, description, canonical page, country and currency, business type, full postal address with coordinates, average rating with its rating count and rating badge, published opening hours per day, gallery images and the venue's own service menu. The service menu is grouped as the venue groups it; every service carries its own retail price in the venue's own currency and its shortest and longest duration in seconds, so this is the only place this API publishes a price and it is always the provider's own menu price, never a quote or a booking price. Pass a slug from fresha-search-venues. An unknown slug is a not-found, not an empty success. No staff, professional profile, review text or reviewer identity is returned, and no availability slot, booking or checkout data exists on this route.", + "operationId": "fresha-venue", "parameters": [ { - "description": "Keep only pools whose race has these statuses (repeat the parameter or comma-separate): `O` Open, `IC` Up Next, `SK` Race Off, `RO` Race Official", - "enum": [ - "O", - "IC", - "SK", - "RO" - ], - "in": "query", - "name": "status", - "type": "string" - }, - { - "description": "Keep only these track codes (repeat the parameter or comma-separate), such as `LRL`; list codes with the `tracks` route", - "in": "query", - "name": "track", - "type": "string" - }, - { - "default": 1, - "description": "Page number, from 1; default 1, at most 10000", - "in": "query", - "maximum": 10000, - "minimum": 1, - "name": "page", - "type": "integer" - }, - { - "default": 50, - "description": "Items per page, 1 to 200; default 50", + "description": "Venue page slug, e.g. toto-hair-new-york-201-grand-street-oqiknjih", "in": "query", - "maximum": 200, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "slug", + "required": true, + "type": "string", + "x-example": "toto-hair-new-york-201-grand-street-oqiknjih" } ], "produces": [ @@ -351733,7 +425261,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.racingCarryoverResponseDoc" + "$ref": "#/definitions/fresha.venueResponseDoc" } }, "400": { @@ -351748,6 +425276,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -351760,19 +425294,26 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Racing carry-over pools", + "summary": "Get one Fresha venue's profile, opening hours and service menu", "tags": [ - "FanDuel" + "Fresha" ] } }, - "/fanduel/racing/filters": { + "/ft/article": { "get": { - "consumes": [ - "application/json" + "description": "Returns one public Financial Times article's metadata and body paragraphs from a canonical article URL. Subscriber-only articles that the FT serves as a subscription page are not available.", + "operationId": "ft-article", + "parameters": [ + { + "description": "Canonical FT article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.ft.com/content/018aa34c-2498-4120-906b-5baf36e98c77" + } ], - "description": "Counts today's races by country, race type, status, surface and class, and lists the sort names, so every value the other racing routes accept is discoverable. Statuses, race types, surfaces, classes and countries are data-driven sets, so the counts are today's live inventory; a country appears here only while it is racing.", - "operationId": "fanduel-racing-filters", "produces": [ "application/json" ], @@ -351780,7 +425321,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.racingFiltersResponseDoc" + "$ref": "#/definitions/ft.articleResponseDoc" } }, "400": { @@ -351789,12 +425330,24 @@ "$ref": "#/definitions/app.Response" } }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -351807,47 +425360,89 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Racing filter values", + "summary": "Get a Financial Times article's content", "tags": [ - "FanDuel" + "FT" ] } }, - "/fanduel/racing/horse": { + "/ft/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a horse's career record (starts, wins, top-three finishes, win percentage) and its past races newest first, each with the race conditions and the horse's own result line: finish position, post-race report, beaten lengths and starting price when the track reports them. Needs the horse's `id` from the `search` route; an unknown id returns 404.", - "operationId": "fanduel-racing-horse", + "description": "Returns one Financial Times contributor's public byline profile (name, job title, email, social accounts) plus one page of their recent articles. FT author pages carry no bio paragraph, only this byline metadata.", + "operationId": "ft-author", "parameters": [ { - "description": "Horse id (`id` of a `runner` result of the `search` route), such as `1002257`", + "description": "Author URL slug, e.g. martin-wolf", "in": "query", - "name": "id", - "required": true, + "name": "slug", "type": "string", - "x-example": "1002257" + "x-example": "martin-wolf" + }, + { + "description": "Canonical www.ft.com/ author URL; alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.ft.com/martin-wolf" }, { "default": 1, - "description": "Page of races, from 1; default 1, at most 10000", + "description": "1-based page number of the author's article list", "in": "query", - "maximum": 10000, - "minimum": 1, "name": "page", "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/ft.authorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": 50, - "description": "Races per page, 1 to 200; default 50", - "in": "query", - "maximum": 200, - "minimum": 1, - "name": "limit", - "type": "integer" + "ApiKeyAuth": [] } ], + "summary": "Get an FT author profile", + "tags": [ + "FT" + ] + } + }, + "/ft/categories": { + "get": { + "description": "Lists every Financial Times section accepted by /ft/headlines, grouped by top-level section, with each section's slug, display name, and landing-page URL.", + "operationId": "ft-categories", "produces": [ "application/json" ], @@ -351855,7 +425450,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.racingHorseResponseDoc" + "$ref": "#/definitions/ft.categoriesResponseDoc" } }, "400": { @@ -351864,8 +425459,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -351882,43 +425477,32 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Racing horse career", + "summary": "List Financial Times sections", "tags": [ - "FanDuel" + "FT" ] } }, - "/fanduel/racing/past-race": { + "/ft/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one past race in full: conditions, the finish order with win, place and show payoffs, beaten lengths, starting price and the post-race report of each runner, the payoff of every wager type, and every entry with its morning-line and final odds and its horse, jockey, trainer, owner and pedigree. Needs a date, a track code and a race number from the `past-races` route; a race that did not run returns 404. A race whose results the service no longer holds returns no `results`.", - "operationId": "fanduel-racing-past-race", + "description": "Returns one page of a Financial Times section front: each story's title, canonical URL, summary, section tag, publication time, and lead image. Section must be a slug returned by /ft/categories.", + "operationId": "ft-headlines", "parameters": [ { - "description": "Day as `YYYY-MM-DD`, from `2008-01-01`", - "in": "query", - "name": "date", - "required": true, - "type": "string", - "x-example": "2026-10-02" - }, - { - "description": "Track code such as `BEL`", + "description": "Section slug from /ft/categories", "in": "query", - "name": "track", + "name": "section", "required": true, "type": "string", - "x-example": "BEL" + "x-example": "world" }, { - "description": "Race number, 1 to 99", + "description": "Results page", "in": "query", - "name": "number", - "required": true, - "type": "string", - "x-example": "9" + "maximum": 20, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -351928,7 +425512,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.racingPastRaceResponseDoc" + "$ref": "#/definitions/ft.headlinesResponseDoc" } }, "400": { @@ -351943,6 +425527,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -351955,53 +425545,16 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Racing past race result", + "summary": "Get the latest stories in a Financial Times section", "tags": [ - "FanDuel" + "FT" ] } }, - "/fanduel/racing/past-races": { + "/ft/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the races that ran on a date, at one track or at every track (558 races on 2026-10-02), with number, post time, conditions, distance, purse, surface and runner count; it has no results, so read a race with the `past-race` route. Results go back to 2008. A date with no races returns an empty list; today's date is empty until a race is official.", - "operationId": "fanduel-racing-past-races", - "parameters": [ - { - "description": "Day as `YYYY-MM-DD`, from `2008-01-01`", - "in": "query", - "name": "date", - "required": true, - "type": "string", - "x-example": "2026-10-02" - }, - { - "description": "Track code such as `BEL`; omit for every track", - "in": "query", - "name": "track", - "type": "string" - }, - { - "default": 1, - "description": "Page number, from 1; default 1, at most 10000", - "in": "query", - "maximum": 10000, - "minimum": 1, - "name": "page", - "type": "integer" - }, - { - "default": 50, - "description": "Races per page, 1 to 200; default 50", - "in": "query", - "maximum": 200, - "minimum": 1, - "name": "limit", - "type": "integer" - } - ], + "description": "Returns the Financial Times' current news feed: the newest stories across all sections, each with its title, canonical URL, and publication time.", + "operationId": "ft-news", "produces": [ "application/json" ], @@ -352009,7 +425562,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.racingPastRacesResponseDoc" + "$ref": "#/definitions/ft.newsResponseDoc" } }, "400": { @@ -352018,6 +425571,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -352030,49 +425589,54 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Racing past races of a day", + "summary": "Get the latest Financial Times stories", "tags": [ - "FanDuel" + "FT" ] } }, - "/fanduel/racing/past-tracks": { + "/ft/search": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the tracks that have past results. With `date` it returns the tracks that ran that day with their race count and race types; with `track` it returns that track and the dates it ran (newest first, paged by `page` and `limit`, back to 2008); with neither it returns every track (786 on 2026-10-24). An unknown track returns 404.", - "operationId": "fanduel-racing-past-tracks", + "description": "Returns one page of Financial Times search results: each story's title, canonical URL, summary, section tag, publication time, and lead image. Results can be ordered by relevance or date and filtered by publication window.", + "operationId": "ft-search", "parameters": [ { - "description": "Day as `YYYY-MM-DD`, from `2008-01-01`", - "in": "query", - "name": "date", - "type": "string" - }, - { - "description": "Track code such as `BEL`; adds the dates the track ran", + "description": "Search keywords", "in": "query", - "name": "track", - "type": "string" + "name": "q", + "required": true, + "type": "string", + "x-example": "climate" }, { - "default": 1, - "description": "Page number, from 1; default 1, at most 10000", + "description": "Results page", "in": "query", - "maximum": 10000, + "maximum": 100, "minimum": 1, "name": "page", "type": "integer" }, { - "default": 50, - "description": "Items per page, 1 to 200; default 50", + "description": "Result ordering", + "enum": [ + "relevance", + "date" + ], "in": "query", - "maximum": 200, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "sort", + "type": "string" + }, + { + "description": "Publication-window filter", + "enum": [ + "now-24h", + "now-7d", + "now-30d", + "now-1y" + ], + "in": "query", + "name": "date_range", + "type": "string" } ], "produces": [ @@ -352082,7 +425646,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.racingPastTracksResponseDoc" + "$ref": "#/definitions/ft.searchResponseDoc" } }, "400": { @@ -352097,6 +425661,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -352109,46 +425679,108 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Racing tracks with past results", + "summary": "Search Financial Times articles", "tags": [ - "FanDuel" + "FT" ] } }, - "/fanduel/racing/race": { + "/fussballde/amateur-stats": { "get": { "consumes": [ "application/json" ], - "description": "Returns one race in full: its conditions, every entry with morning-line and current odds (fractional and decimal), recent price history, runners (jockey, trainer, owner, pedigree, weight, age, scratch and jockey-change flags, win probability), pool totals, probable payouts, will-pays for multi-race bets, the wagers it accepts with their limits, and, once it is official, the finish order and payoffs. Pools, probables and will-pays appear only when the track reports them (mostly official and Up Next races). Pass `include` to add optional groups: `handicapping` (speed, class, pace, jockey-trainer record, power rating, career record and the favorite rank of every runner), `timeform` (Timeform analyst and production comments, tissue price, flags and, once official, how each finisher was beaten, its starting price and a post-race report) and `pool_grids` (the money bet on each entry's pairings in every pool, mostly once the race is official). A race that is not on today's card returns 404.", - "operationId": "fanduel-racing-race", + "description": "Returns a page of one of the ten Top-Amateurstatistiken rankings (Kreisklasse to Regionalliga, championship matches): top teams by goals, goal ratio, goals against and points average, highest-scoring matches, biggest draws, and top scorers by goals, ratio and goals in one match per week or season. Filter by season, team type and federation and page with `limit` and `offset`. A ranking is bounded to roughly its top 200 entries; `final` marks the last page.", + "operationId": "fussballde-amateur-stats", "parameters": [ { - "description": "Track code from the `tracks` route, such as `LRL`", + "description": "Ranking id", + "enum": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10" + ], "in": "query", - "name": "track", + "name": "stat", "required": true, "type": "string", - "x-example": "BOL" + "x-example": "8" }, { - "description": "Race number, 1 to 99, such as `2`", + "description": "Four-digit season code, 2627 for 2026/27; the site offers the current and previous season", "in": "query", - "name": "number", - "required": true, + "name": "season", "type": "string", - "x-example": "2" + "x-example": "2627" }, { - "description": "Optional groups to add (repeat the parameter or comma-separate): `handicapping` per-runner handicapping figures and favorite rank, `timeform` Timeform comments, tissue price, flags and finisher timing, `pool_grids` per-entry pool pairings. Other values return `400`", + "description": "Team type id; omit for all", "enum": [ - "handicapping", - "timeform", - "pool_grids" + "1", + "3", + "6", + "8", + "4", + "5", + "7", + "9" ], "in": "query", - "name": "include", - "type": "string" + "name": "team_type", + "type": "string", + "x-example": "1" + }, + { + "description": "Federation id; omit for all federations", + "enum": [ + "89", + "32", + "31", + "66", + "61", + "02", + "03", + "34", + "62", + "23", + "22", + "01", + "41", + "43", + "63", + "64", + "04", + "33", + "42", + "65", + "21", + "35" + ], + "in": "query", + "name": "federation_id", + "type": "string", + "x-example": "21" + }, + { + "description": "Rows per call, 1 to 100, default 30", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 30 + }, + { + "description": "Number of rows to skip, 0 to 1000, default 0", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -352158,7 +425790,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.racingRaceResponseDoc" + "$ref": "#/definitions/fussballde.amateurStatsResponseDoc" } }, "400": { @@ -352185,114 +425817,52 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Racing race detail", + "summary": "Get FUSSBALL.DE amateur top statistics", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/racing/races": { + "/fussballde/club": { "get": { "consumes": [ "application/json" ], - "description": "Lists today's races (about 500 across all tracks) with track, number, post time, minutes to post, status, race type, surface, class, distance, purse and runner count. Filter by track, country, race type, status, open or closed, or the next N minutes; sort by minutes to post, post time or race number. `total` counts every match so `page` and `limit` page through them.", - "operationId": "fanduel-racing-races", + "description": "Returns one club: name, federation, team counts, profile facts (founding year, address, website) and the club's teams with their competitions and team type. Teams are those of the current season; set `season` for an earlier one and `competition_kind` to keep only teams in championships, cups, friendlies and so on. Club ids appear as `club_id` on teams and matches.", + "operationId": "fussballde-club", "parameters": [ { - "description": "Keep only these track codes (repeat the parameter or comma-separate), such as `LRL`; list codes with the `tracks` route", - "in": "query", - "name": "track", - "type": "string" - }, - { - "description": "Keep only races or tracks in these countries (repeat the parameter or comma-separate): upper-case three-letter codes such as `USA`, `GBR`, `AUS`. Today's codes are listed in the `filters` route's `countries`; lower-case or two-letter values return `400`", - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Drop these countries (repeat the parameter or comma-separate), same codes as `country`", - "in": "query", - "name": "exclude_country", - "type": "string" - }, - { - "description": "Keep only these race types (repeat the parameter or comma-separate): `T` Thoroughbred, `H` Harness, `Q` QuarterHorse, `L` Thoroughbred LARC", - "enum": [ - "T", - "H", - "Q", - "L" - ], - "in": "query", - "name": "race_type", - "type": "string" - }, - { - "description": "Keep only these race statuses (repeat the parameter or comma-separate): `O` Open, `IC` Up Next, `SK` Race Off, `RO` Race Official", - "enum": [ - "O", - "IC", - "SK", - "RO" - ], - "in": "query", - "name": "status", - "type": "string" - }, - { - "description": "`true` for races still open for betting (`O` and `IC`), `false` for off or official races; omit for both", - "in": "query", - "name": "open", - "type": "boolean" - }, - { - "description": "Keep races that post within this many minutes, 1 to 1440", + "description": "Club id from a team or match, e.g. 00ES8GN8N400008VVV0AG08LVUPGND5I", "in": "query", - "maximum": 1440, - "minimum": 1, - "name": "within_minutes", - "type": "integer" + "name": "club_id", + "required": true, + "type": "string", + "x-example": "00ES8GN8N400008VVV0AG08LVUPGND5I" }, { - "description": "Sort: `mtp` (minutes to post), `post_time`, `race_number`; default is the service's own order", - "enum": [ - "mtp", - "post_time", - "race_number" - ], + "description": "Four-digit season code such as 2526; default current season", "in": "query", - "name": "sort", - "type": "string" + "name": "season", + "type": "string", + "x-example": "2526" }, { - "description": "`asc` or `desc`; default `asc`. Only valid together with `sort`", + "description": "Competition kind id; omit for all kinds", "enum": [ - "asc", - "desc" + "1", + "8", + "3", + "7", + "6", + "11", + "2", + "21", + "9" ], "in": "query", - "name": "order", - "type": "string" - }, - { - "default": 1, - "description": "Page number, from 1; default 1, at most 10000", - "in": "query", - "maximum": 10000, - "minimum": 1, - "name": "page", - "type": "integer" - }, - { - "default": 50, - "description": "Items per page, 1 to 200; default 50", - "in": "query", - "maximum": 200, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "competition_kind", + "type": "string", + "x-example": "1" } ], "produces": [ @@ -352302,7 +425872,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.racingRacesResponseDoc" + "$ref": "#/definitions/fussballde.clubResponseDoc" } }, "400": { @@ -352329,67 +425899,85 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Racing races", + "summary": "Get a FUSSBALL.DE club", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/racing/results": { + "/fussballde/club-matches": { "get": { "consumes": [ "application/json" ], - "description": "Returns today's official races with their results: winning time, finish order with win, place and show payoffs, and the payoff of every wager type. A race the service reports as refunded has no finishers and one payoff whose selection is `Refund`. Filter by track, country and race type.", - "operationId": "fanduel-racing-results", + "description": "Returns the fixtures and results across all of a club's teams (senior and youth). `all` (default) is the club match plan for a date window (default the current season) optionally for one competition kind and paged with `limit` and `offset`; `next` is the next fixtures and `previous` the latest results. Each match names its competition and team type.", + "operationId": "fussballde-club-matches", "parameters": [ { - "description": "Keep only these track codes (repeat the parameter or comma-separate), such as `LRL`; list codes with the `tracks` route", + "description": "Club id from fussballde-club or fussballde-club-search", "in": "query", - "name": "track", - "type": "string" + "name": "club_id", + "required": true, + "type": "string", + "x-example": "00ES8GN8N400008VVV0AG08LVUPGND5I" }, { - "description": "Keep only races or tracks in these countries (repeat the parameter or comma-separate): upper-case three-letter codes such as `USA`, `GBR`, `AUS`. Today's codes are listed in the `filters` route's `countries`; lower-case or two-letter values return `400`", + "description": "Match list kind, default all", + "enum": [ + "all", + "next", + "previous" + ], "in": "query", - "name": "country", - "type": "string" + "name": "kind", + "type": "string", + "x-example": "all" }, { - "description": "Drop these countries (repeat the parameter or comma-separate), same codes as `country`", + "description": "kind all only: first day as YYYY-MM-DD, default 1 July of the current season", "in": "query", - "name": "exclude_country", - "type": "string" + "name": "date_from", + "type": "string", + "x-example": "2026-10-01" }, { - "description": "Keep only these race types (repeat the parameter or comma-separate): `T` Thoroughbred, `H` Harness, `Q` QuarterHorse, `L` Thoroughbred LARC", + "description": "kind all only: last day as YYYY-MM-DD, default 30 June of the season", + "in": "query", + "name": "date_to", + "type": "string", + "x-example": "2026-10-31" + }, + { + "description": "kind all only: competition kind id; omit for all kinds", "enum": [ - "T", - "H", - "Q", - "L" + "1", + "8", + "3", + "7", + "6", + "11", + "2", + "21", + "9" ], "in": "query", - "name": "race_type", - "type": "string" + "name": "competition_kind", + "type": "string", + "x-example": "8" }, { - "default": 1, - "description": "Page number, from 1; default 1, at most 10000", + "description": "Matches (kind all only) per call, 1 to 50, default 10", "in": "query", - "maximum": 10000, - "minimum": 1, - "name": "page", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 10 }, { - "default": 50, - "description": "Items per page, 1 to 200; default 50", + "description": "Number of matches to skip, 0 to 1000, default 0", "in": "query", - "maximum": 200, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -352399,7 +425987,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.racingResultsResponseDoc" + "$ref": "#/definitions/fussballde.clubMatchesResponseDoc" } }, "400": { @@ -352426,79 +426014,47 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Racing results", + "summary": "Get FUSSBALL.DE fixtures and results of a club", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/racing/search": { + "/fussballde/club-search": { "get": { "consumes": [ "application/json" ], - "description": "Finds horses, jockeys, trainers and owners whose name contains the text (3 to 64 characters), with a horse's `id` and birth year and the date, race and track of each one's last start. Use a horse's `id` with the `horse` route. The service returns every match (several hundred owners for a common surname), so the list is paged here: horses first, then jockeys, trainers and owners, each group sorted by `sort` and `order`. Jockeys, trainers and owners have no id.", - "operationId": "fanduel-racing-search", + "description": "Searches FUSSBALL.DE clubs by club name, postcode or place, or both (both must match), and returns each club's id, name, postal code, city and logo. The first page reports the `total` hit count; page with `limit` (1 to 100, default 20) and `offset`, and `final` marks the last page. Zero results is a valid response. The site's search is not fuzzy and matches a club's official name (for example `RasenBallsport Leipzig`, `SC Freiburg`), so a looser display name such as `RB Leipzig` can return nothing: search by place or one distinctive word, or use the `club_id` that every team, table and match row already carries.", + "operationId": "fussballde-club-search", "parameters": [ { - "description": "Name text, 3 to 64 characters; matching is case-insensitive", + "description": "Club name or part of it; text or place is required", "in": "query", - "name": "q", - "required": true, + "name": "text", "type": "string", - "x-example": "Baf" - }, - { - "description": "Keep one kind (any other value silently finds nothing upstream, so it returns `400`)", - "enum": [ - "runner", - "jockey", - "trainer", - "owner" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "default": "name", - "description": "Sort within each kind; default `name`", - "enum": [ - "name", - "last_event" - ], - "in": "query", - "name": "sort", - "type": "string" + "x-example": "Dortmund" }, { - "default": "asc", - "description": "`asc` or `desc`; default `asc`", - "enum": [ - "asc", - "desc" - ], + "description": "Postcode or place name; text or place is required", "in": "query", - "name": "order", - "type": "string" + "name": "place", + "type": "string", + "x-example": "44139" }, { - "default": 1, - "description": "Page number, from 1; default 1, at most 10000", + "description": "Clubs per call, 1 to 100, default 20", "in": "query", - "maximum": 10000, - "minimum": 1, - "name": "page", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 20 }, { - "default": 50, - "description": "Items per page, 1 to 200; default 50", + "description": "Number of clubs to skip, 0 to 2000, default 0", "in": "query", - "maximum": 200, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -352508,7 +426064,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.racingSearchResponseDoc" + "$ref": "#/definitions/fussballde.clubSearchResponseDoc" } }, "400": { @@ -352517,6 +426073,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -352529,27 +426091,79 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Racing search by name", + "summary": "Search FUSSBALL.DE clubs by name or place", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/racing/track": { + "/fussballde/competition-options": { "get": { "consumes": [ "application/json" ], - "description": "Returns one track on today's card with every race it runs: number, post time, minutes to post, status, race type, surface, class, distance, purse and runner count. A code that is not racing today returns 404.", - "operationId": "fanduel-racing-track", + "description": "Returns the team types (Herren, Frauen, A-Junioren, ...), the leagues (Spielklassen) of each team type and the areas (Gebiete) of each league for one federation, season and competition type. Team type, league and area ids are federation-specific, so take them from this response and pass them to `fussballde-competitions`.", + "operationId": "fussballde-competition-options", "parameters": [ { - "description": "Track code from the `tracks` route (`tracks[].code`), such as `LRL`", + "description": "Federation id", + "enum": [ + "89", + "32", + "31", + "66", + "61", + "02", + "03", + "34", + "62", + "23", + "22", + "01", + "41", + "43", + "63", + "64", + "04", + "33", + "42", + "65", + "21", + "35" + ], "in": "query", - "name": "code", + "name": "federation_id", "required": true, "type": "string", - "x-example": "LRL" + "x-example": "89" + }, + { + "description": "Four-digit season code, 2627 for 2026/27", + "in": "query", + "name": "season", + "required": true, + "type": "string", + "x-example": "2627" + }, + { + "description": "Competition type id, default 1", + "enum": [ + "1", + "308", + "300", + "70", + "305", + "-300", + "-305", + "11", + "2", + "-2", + "12" + ], + "in": "query", + "name": "competition_type", + "type": "string", + "x-example": "1" } ], "produces": [ @@ -352559,7 +426173,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.racingTrackResponseDoc" + "$ref": "#/definitions/fussballde.competitionOptionsResponseDoc" } }, "400": { @@ -352586,101 +426200,103 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Racing track and its races", + "summary": "List FUSSBALL.DE team types, leagues and areas", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/racing/tracks": { + "/fussballde/competitions": { "get": { "consumes": [ "application/json" ], - "description": "Returns the tracks racing today (Australia, Canada, France, Great Britain, Ireland, Sweden, the U.S. and more) with country, state, race count, race types, whether the card is finished, and the race each track is on (number, minutes to post, post time, status). Filter by country, race type, track code, finished and featured; sort by name, minutes to post, minutes to post of the next wagerable race, or IVR code.", - "operationId": "fanduel-racing-tracks", + "description": "Returns the competitions (Staffeln) at one selector path: a federation, season, competition type, team type, league and area. Each competition `id` (for example `031BFREJC800001BVS5489BUVUR5FS5A-G` for the 2026/27 Bundesliga) is the key used by the matchday, match plan, table and top-scorer endpoints. An empty list is a valid result for a path with no competitions.", + "operationId": "fussballde-competitions", "parameters": [ { - "description": "Keep only races or tracks in these countries (repeat the parameter or comma-separate): upper-case three-letter codes such as `USA`, `GBR`, `AUS`. Today's codes are listed in the `filters` route's `countries`; lower-case or two-letter values return `400`", - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Drop these countries (repeat the parameter or comma-separate), same codes as `country`", - "in": "query", - "name": "exclude_country", - "type": "string" - }, - { - "description": "Keep only these race types (repeat the parameter or comma-separate): `T` Thoroughbred, `H` Harness, `Q` QuarterHorse, `L` Thoroughbred LARC", + "description": "Federation id", "enum": [ - "T", - "H", - "Q", - "L" + "89", + "32", + "31", + "66", + "61", + "02", + "03", + "34", + "62", + "23", + "22", + "01", + "41", + "43", + "63", + "64", + "04", + "33", + "42", + "65", + "21", + "35" ], "in": "query", - "name": "race_type", - "type": "string" - }, - { - "description": "Keep only these track codes (repeat the parameter or comma-separate), such as `LRL`", - "in": "query", - "name": "code", - "type": "string" - }, - { - "description": "`true` for tracks whose card is over, `false` for tracks still racing; omit for both", - "in": "query", - "name": "finished", - "type": "boolean" + "name": "federation_id", + "required": true, + "type": "string", + "x-example": "89" }, { - "description": "`true` for the Sportsbook's featured tracks only, `false` for the others; omit for both", + "description": "Four-digit season code", "in": "query", - "name": "featured", - "type": "boolean" + "name": "season", + "required": true, + "type": "string", + "x-example": "2627" }, { - "description": "Sort: `name`, `mtp` (minutes to post of the current race), `wagerable_mtp`, `ivr`; default is the service's own order", + "description": "Competition type id, default 1", "enum": [ - "name", - "mtp", - "wagerable_mtp", - "ivr" + "1", + "308", + "300", + "70", + "305", + "-300", + "-305", + "11", + "2", + "-2", + "12" ], "in": "query", - "name": "sort", - "type": "string" + "name": "competition_type", + "type": "string", + "x-example": "1" }, { - "description": "`asc` or `desc`; default `asc`. Only valid together with `sort`", - "enum": [ - "asc", - "desc" - ], + "description": "Team type id from fussballde-competition-options", "in": "query", - "name": "order", - "type": "string" + "name": "team_type", + "required": true, + "type": "string", + "x-example": "1" }, { - "default": 1, - "description": "Page number, from 1; default 1, at most 10000", + "description": "League id from fussballde-competition-options", "in": "query", - "maximum": 10000, - "minimum": 1, - "name": "page", - "type": "integer" + "name": "league", + "required": true, + "type": "string", + "x-example": "1" }, { - "default": 50, - "description": "Items per page, 1 to 200; default 50", + "description": "Area id from fussballde-competition-options", "in": "query", - "maximum": 200, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "area", + "required": true, + "type": "string", + "x-example": "0123456789ABCDEF0123456700004010" } ], "produces": [ @@ -352690,7 +426306,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.racingTracksResponseDoc" + "$ref": "#/definitions/fussballde.competitionsResponseDoc" } }, "400": { @@ -352717,19 +426333,66 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Racing tracks today", + "summary": "List FUSSBALL.DE competitions for a league and area", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/racing/wager-types": { + "/fussballde/federation": { "get": { "consumes": [ "application/json" ], - "description": "Lists every wager type the racing service offers (71 on 2026-10-24: Win, Place, Show, Exacta, Trifecta, Superfecta, Daily Double, the Pick bets, Quinella and the international Tote bets) with its code, name, description, group, and structure: legs, columns, positions, and whether it is a box, key or wheel.", - "operationId": "fanduel-racing-wager-types", + "description": "Returns the profile of one of the 22 federations (the DFB and the regional and state associations) or of one of the five regional associations (Norddeutscher, Nordostdeutscher, Süddeutscher, Südwest and Westdeutscher): name, address, website, president, club, member and team counts, and the latest news items. Provide exactly one of `federation_id` and `regional_association`.", + "operationId": "fussballde-federation", + "parameters": [ + { + "description": "Federation id; provide exactly one of federation_id and regional_association", + "enum": [ + "89", + "32", + "31", + "66", + "61", + "02", + "03", + "34", + "62", + "23", + "22", + "01", + "41", + "43", + "63", + "64", + "04", + "33", + "42", + "65", + "21", + "35" + ], + "in": "query", + "name": "federation_id", + "type": "string", + "x-example": "21" + }, + { + "description": "Regional association; provide exactly one of federation_id and regional_association", + "enum": [ + "nord", + "nordost", + "sued", + "suedwest", + "west" + ], + "in": "query", + "name": "regional_association", + "type": "string", + "x-example": "west" + } + ], "produces": [ "application/json" ], @@ -352737,7 +426400,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.racingWagerTypesResponseDoc" + "$ref": "#/definitions/fussballde.federationResponseDoc" } }, "400": { @@ -352764,19 +426427,52 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Racing wager types", + "summary": "Get a FUSSBALL.DE federation or regional association", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/research": { + "/fussballde/filters": { "get": { "consumes": [ "application/json" ], - "description": "Returns channel metadata and the recent item summaries from FanDuel Research's official RSS feed. `summary` is the feed description, not a full article body; this endpoint does not fetch linked article pages.", - "operationId": "fanduel-research", + "description": "Returns the competition selector base data of FUSSBALL.DE, the German amateur-football portal: the 22 federations (DFB plus regional associations), the available seasons per federation, and the competition types per federation and season. Use it first to get valid `federation_id`, `season` and `competition_type` values for the competition discovery endpoints.", + "operationId": "fussballde-filters", + "parameters": [ + { + "description": "Optional federation id that narrows seasons and competition types to one federation", + "enum": [ + "89", + "32", + "31", + "66", + "61", + "02", + "03", + "34", + "62", + "23", + "22", + "01", + "41", + "43", + "63", + "64", + "04", + "33", + "42", + "65", + "21", + "35" + ], + "in": "query", + "name": "federation_id", + "type": "string", + "x-example": "31" + } + ], "produces": [ "application/json" ], @@ -352784,11 +426480,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.researchResponseDoc" + "$ref": "#/definitions/fussballde.filtersResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -352805,27 +426507,27 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Research recent RSS items", + "summary": "List FUSSBALL.DE federations, seasons and competition types", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/research/article": { + "/fussballde/match": { "get": { "consumes": [ "application/json" ], - "description": "Returns one FanDuel Research article in full: its details plus the body rendered as `blocks` (paragraphs, headings, list items, tables, and embedded Sportsbook markets with their event, market and selection ids) and as plain `text`. Content the renderer cannot show, such as embedded HTML, is counted in `omitted_blocks` instead of being dropped silently. An unknown slug returns 404.", - "operationId": "fanduel-research-article", + "description": "Returns one match: teams, competition, date, kick-off time, venue, score and half-time score, match number and matchday, officials, goals with minutes and timeline events such as substitutions. Fields the match has not published (for example a future match's score) are omitted.", + "operationId": "fussballde-match", "parameters": [ { - "description": "Article slug from the `articles` route (`articles[].slug`)", + "description": "Match id from fussballde-matchday or fussballde-match-plan", "in": "query", - "name": "article", + "name": "match_id", "required": true, "type": "string", - "x-example": "avalanche-vs-lightning-prediction-nhl-odds-10-23-2026" + "x-example": "031BFTHDCC000000VS5489BUVUR5FS5A" } ], "produces": [ @@ -352835,7 +426537,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.researchArticleResponseDoc" + "$ref": "#/definitions/fussballde.matchResponseDoc" } }, "400": { @@ -352862,124 +426564,66 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Research article", + "summary": "Get a FUSSBALL.DE match", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/research/articles": { + "/fussballde/match-calendar": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of FanDuel Research articles (predictions, picks, prop bets, guides), newest first, without their bodies: title, description, sport, author, publish time, link, thumbnail and tags. Filter by sport, sub-category (needs a sport; cannot be combined with a date window), team (needs a sport), author, hero type and publish window. Page with `cursor` while `has_more` is true; the service reports no total.", - "operationId": "fanduel-research-articles", + "description": "Returns the matches FUSSBALL.DE's Matchkalender lists around a five-digit postcode within a date range (default today plus six days, at most 92 days), optionally filtered by team types and competition kind. Each match includes its team type (for example D-Junioren) and league. The upstream returns at most 10 matches per request and has no paging: `truncated` is true when the page is full, so narrow the dates or filters to see the rest. Zero matches is a valid response.", + "operationId": "fussballde-match-calendar", "parameters": [ { - "description": "Sport or topic slug from the `sports` route; default all sports", - "enum": [ - "casino", - "nascar", - "ncaab", - "f1", - "ufc", - "boxing", - "ncaaf", - "womenssoccer", - "tv-and-podcast", - "nba", - "pga", - "tennis", - "nhl", - "mma", - "soccer", - "fanduel-sportsbook-promo-codes", - "sports-betting-101", - "horse-racing", - "wnba", - "predicts", - "mlb", - "canada", - "nfl" - ], - "in": "query", - "name": "sport", - "type": "string" - }, - { - "description": "Drop these sports (repeat the parameter or comma-separate), same slugs as `sport`", - "in": "query", - "name": "exclude_sport", - "type": "string" - }, - { - "description": "Topic slug from the `sub-categories` route; needs `sport` and must belong to it", + "description": "Five-digit German postcode; look one up with fussballde-postal-codes", "in": "query", - "name": "sub_category", - "type": "string" + "name": "postal_code", + "required": true, + "type": "string", + "x-example": "44139" }, { - "description": "A team's `number_fire_id` from the `sports` route (`sport` selects the list); needs `sport`. An id of another sport returns `400`", + "description": "First day as YYYY-MM-DD, default today (Europe/Berlin)", "in": "query", - "name": "team", - "type": "integer" + "name": "date_from", + "type": "string", + "x-example": "2026-10-24" }, { - "description": "A player's `number_fire_id` (`subject.number_fire_id` of the `player-news` route); keeps articles about that player. An unknown id, or one of a different `sport`, returns `400`", + "description": "Last day as YYYY-MM-DD, at most 92 days after date_from, default six days after date_from", "in": "query", - "minimum": 1, - "name": "player", - "type": "integer" + "name": "date_to", + "type": "string", + "x-example": "2026-10-31" }, { - "description": "Author id (a UUID) from the `authors` route", + "description": "Comma-separated team type ids such as 1,3; omit for all team types", "in": "query", - "name": "author", - "type": "string" + "name": "team_types", + "type": "string", + "x-example": "1,3" }, { - "description": "Hero media: `IMAGE` or `JWPLAYER` (video)", + "description": "Competition kind id; omit for all kinds", "enum": [ - "IMAGE", - "JWPLAYER" + "1", + "8", + "3", + "7", + "6", + "11", + "2", + "21", + "9" ], "in": "query", - "name": "hero_type", - "type": "string" - }, - { - "description": "Earliest publish time, RFC 3339 or `YYYY-MM-DD`", - "in": "query", - "name": "published_after", - "type": "string" - }, - { - "description": "Latest publish time, RFC 3339 or `YYYY-MM-DD`; not earlier than `published_after`", - "in": "query", - "name": "published_before", - "type": "string" - }, - { - "description": "`true` to hide content the site ranks down; it also reorders the list", - "in": "query", - "name": "hide_deprioritized", - "type": "boolean" - }, - { - "default": 20, - "description": "Articles per page, 1 to 50; default 20", - "in": "query", - "maximum": 50, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "description": "Continue from the previous response's `next_cursor`", - "in": "query", - "name": "cursor", - "type": "string" + "name": "competition_kind", + "type": "string", + "x-example": "1" } ], "produces": [ @@ -352989,7 +426633,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.researchArticlesResponseDoc" + "$ref": "#/definitions/fussballde.matchCalendarResponseDoc" } }, "400": { @@ -353016,27 +426660,39 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Research articles", + "summary": "Get FUSSBALL.DE matches near a postcode", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/research/author": { + "/fussballde/match-comparison": { "get": { "consumes": [ "application/json" ], - "description": "Returns one FanDuel Research author: id, slug, bio, images, social accounts, and the sports and topics they write for. An unknown slug returns 404.", - "operationId": "fanduel-research-author", + "description": "Returns a pre-match comparison for one match: `history` is the all-time head-to-head record (duels, wins, draws, defeats, goals), `meetings` lists the other fixtures and results between the two teams, and `season` compares both teams' current standing, points, goals, form, top scorer and cards.", + "operationId": "fussballde-match-comparison", "parameters": [ { - "description": "Author slug from the `authors` route, such as `fanduel-staff`", + "description": "Match id from fussballde-matchday or fussballde-match-plan", "in": "query", - "name": "author", + "name": "match_id", "required": true, "type": "string", - "x-example": "fanduel-staff" + "x-example": "031BFTHDCC000000VS5489BUVUR5FS5A" + }, + { + "description": "Comparison view, default history", + "enum": [ + "history", + "meetings", + "season" + ], + "in": "query", + "name": "view", + "type": "string", + "x-example": "history" } ], "produces": [ @@ -353046,7 +426702,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.researchAuthorResponseDoc" + "$ref": "#/definitions/fussballde.matchComparisonResponseDoc" } }, "400": { @@ -353073,65 +426729,48 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Research author", + "summary": "Compare the two teams of a FUSSBALL.DE match", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/research/authors": { + "/fussballde/match-plan": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of FanDuel Research authors with their id, slug, bio, social accounts and the sports and topics they write for. Filter by sport; page with `cursor` while `has_more` is true. The author `id` filters the `articles` route.", - "operationId": "fanduel-research-authors", + "description": "Returns every match of a competition's season (fixtures and results), including the earliest matchdays, optionally filtered to one team and a date window; the date window is applied by the site, so a narrow window is cheaper than filtering a full season. Cups and tournaments are assembled round by round: every match carries its `round` and the response lists the `rounds` with their ids. Use it for a complete schedule; use `fussballde-matchday` for one matchday.", + "operationId": "fussballde-match-plan", "parameters": [ { - "description": "Sport or topic slug from the `sports` route", - "enum": [ - "casino", - "nascar", - "ncaab", - "f1", - "ufc", - "boxing", - "ncaaf", - "womenssoccer", - "tv-and-podcast", - "nba", - "pga", - "tennis", - "nhl", - "mma", - "soccer", - "fanduel-sportsbook-promo-codes", - "sports-betting-101", - "horse-racing", - "wnba", - "predicts", - "mlb", - "canada", - "nfl" - ], + "description": "Competition id from fussballde-competitions", "in": "query", - "name": "sport", - "type": "string" + "name": "competition_id", + "required": true, + "type": "string", + "x-example": "031BFREJC800001BVS5489BUVUR5FS5A-G" }, { - "default": 20, - "description": "Authors per page, 1 to 50; default 20", + "description": "Team id to keep only that team's matches", "in": "query", - "maximum": 50, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "team_id", + "type": "string", + "x-example": "011MI8V6UC000000VTVG0001VTR8C1K7" }, { - "description": "Continue from the previous response's `next_cursor`", + "description": "Earliest match date as YYYY-MM-DD; default is the whole season", "in": "query", - "name": "cursor", - "type": "string" + "name": "date_from", + "type": "string", + "x-example": "2026-10-01" + }, + { + "description": "Latest match date as YYYY-MM-DD; default is the whole season", + "in": "query", + "name": "date_to", + "type": "string", + "x-example": "2026-10-31" } ], "produces": [ @@ -353141,7 +426780,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.researchAuthorsResponseDoc" + "$ref": "#/definitions/fussballde.matchPlanResponseDoc" } }, "400": { @@ -353150,6 +426789,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -353162,107 +426807,41 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Research authors", + "summary": "Get the full FUSSBALL.DE match plan of a competition", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/research/featured-articles": { + "/fussballde/matchday": { "get": { "consumes": [ "application/json" ], - "description": "Returns the articles the FanDuel Research editors feature on a sport's page (about ten per sport, such as the week's best bets for the NFL), each with title, description, author, publish time, link and tags. It is a curated list, not the newest-first feed of the `articles` route: for most sports it differs from the latest articles. A sport with nothing featured (Women's Soccer and Sports Betting 101 on 2026-10-24) returns an empty list. The service has no homepage variant, so `sport` is required.", - "operationId": "fanduel-research-featured-articles", + "description": "Returns the matches of a competition's current matchday, of a numbered matchday (`matchday`, 1 to the competition's matchday count, reported as `matchday_count`) or of the matchday around a date. Each match has teams, date, kick-off time, score and status (`finished`, `scheduled`, `cancelled` and the other values listed below). Cups and tournaments have no numbered matchdays; for them the response lists the competition's `rounds` (each round id works as `competition_id` to read that round) and labels every match with its `round`. Dates, times and scores are decoded from the site's obfuscated glyph fonts.", + "operationId": "fussballde-matchday", "parameters": [ { - "description": "Sport or topic slug from the `sports` route", - "enum": [ - "casino", - "nascar", - "ncaab", - "f1", - "ufc", - "boxing", - "ncaaf", - "womenssoccer", - "tv-and-podcast", - "nba", - "pga", - "tennis", - "nhl", - "mma", - "soccer", - "fanduel-sportsbook-promo-codes", - "sports-betting-101", - "horse-racing", - "wnba", - "predicts", - "mlb", - "canada", - "nfl" - ], + "description": "Competition id from fussballde-competitions", "in": "query", - "name": "sport", + "name": "competition_id", "required": true, "type": "string", - "x-example": "nfl" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/fanduel.researchFeaturedArticlesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + "x-example": "031BFREJC800001BVS5489BUVUR5FS5A-G" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "FanDuel Research featured articles", - "tags": [ - "FanDuel" - ] - } - }, - "/fanduel/research/fixtures": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the games on today's slate and in progress for the NBA, NFL, NHL and MLB with status (`SCHEDULED`, `IN_PROGRESS`, `FINAL`), the game clock, each team's score and win probability, the TV network, the Sportsbook event link and the money line, spread and total prices with their market and selection ids. A team's `side` is `home` or `away` when it can be read from the event link. Pass `sport` to keep one league; a league with no games returns an empty list.", - "operationId": "fanduel-research-fixtures", - "parameters": [ + "description": "Matchday date as YYYY-MM-DD; omit for the current matchday; cannot be combined with matchday", + "in": "query", + "name": "date", + "type": "string", + "x-example": "2026-10-03" + }, { - "description": "Keep one league", - "enum": [ - "nba", - "nfl", - "nhl", - "mlb" - ], + "description": "Matchday number, 1 to the competition's matchday count (34 for the Bundesliga); cannot be combined with date", "in": "query", - "name": "sport", - "type": "string" + "name": "matchday", + "type": "integer", + "x-example": 3 } ], "produces": [ @@ -353272,7 +426851,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.researchFixturesResponseDoc" + "$ref": "#/definitions/fussballde.matchdayResponseDoc" } }, "400": { @@ -353281,6 +426860,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -353293,41 +426878,30 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Research live fixtures", + "summary": "Get FUSSBALL.DE matches of a competition matchday", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/research/nfl-schedule": { + "/fussballde/national-top-scorers": { "get": { "consumes": [ "application/json" ], - "description": "Returns one week of NFL games with kickoff time, stadium and roof type, weather, TV network, closing spread and total, status and game clock, and for each team its record, win probability, rankings, average yards, the game's box totals and its passing, rushing and receiving leaders. Games that have not finished also carry the Sportsbook event id, link and the money line, spread and total with the market and selection ids. `season_type` is `PRE`, `REGULAR` or `POST`; `week` is `0` to `4` for `PRE`, `1` to `18` for `REGULAR` and `1` to `5` for `POST`. A week with no games returns an empty list.", - "operationId": "fanduel-research-nfl-schedule", + "description": "Returns the top 10 scorers of every league level across Germany for men or women (the site's Torjägerkanone), with goals, matches played and club. Only championship matches count and the upstream refreshes the ranking once a day; the response `note` carries its last-update time. Adult teams only.", + "operationId": "fussballde-national-top-scorers", "parameters": [ { - "description": "Week number; `0` to `4` for PRE (`0` is the Hall of Fame game), `1` to `18` for REGULAR, `1` to `5` for POST", - "in": "query", - "maximum": 18, - "minimum": 0, - "name": "week", - "required": true, - "type": "integer", - "x-example": 1 - }, - { - "default": "REGULAR", - "description": "Season phase; default `REGULAR`", + "description": "Ranking to return, default men", "enum": [ - "PRE", - "REGULAR", - "POST" + "men", + "women" ], "in": "query", - "name": "season_type", - "type": "string" + "name": "team_type", + "type": "string", + "x-example": "men" } ], "produces": [ @@ -353337,7 +426911,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.researchNflScheduleResponseDoc" + "$ref": "#/definitions/fussballde.nationalTopScorersResponseDoc" } }, "400": { @@ -353346,6 +426920,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -353358,106 +426938,80 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Research NFL schedule", + "summary": "Get the nationwide FUSSBALL.DE top scorers by league level", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/research/player-news": { + "/fussballde/news": { "get": { "consumes": [ "application/json" ], - "description": "Returns short player and team updates, newest first: the fact, the analysis, the news type and the player (name, position, team, `number_fire_id`, and the Sportsbook roster page, whose slug ends in the same id). With `news_type=INJURY` it is a league-wide injury feed. Available for the NFL, NBA, MLB and NHL; the news types each sport has are listed by the `sports` route (the NFL has no `LINEUP`, MLB no `OUTLOOK`, the NHL only `INJURY`, `TRANSACTION` and `GAME_UPDATE`). Filter by team, or by player (id and position together).", - "operationId": "fanduel-research-player-news", + "description": "Returns news teasers of one FUSSBALL.DE stream (all news, magazine, Regionalliga, federations, service, campaigns or help center) with title, category, publication date and time, and excerpt, paged with `limit` (1 to 50, default 10) and `offset`; `final` is true on the last page. Use `regional_league` or `help_category` to narrow the Regionalliga and help-center streams to one league or category. Use the article id with `fussballde-news-article` for the full text.", + "operationId": "fussballde-news", "parameters": [ { - "description": "Sport slug", + "description": "News stream, default all_news", "enum": [ - "nfl", - "nba", - "mlb", - "nhl" + "all_news", + "magazin", + "regionalliga", + "verbaende", + "service", + "aktionen", + "helpcenter" ], "in": "query", - "name": "sport", - "required": true, + "name": "stream", "type": "string", - "x-example": "nfl" + "x-example": "all_news" }, { - "description": "Update type: `INJURY`, `RECAP`, `TRANSACTION`, `LINEUP`, `GAME_UPDATE`, `OUTLOOK`; a type the sport lacks returns `400` and lists the ones it has", + "description": "Only Regionalliga news of one league (implies stream regionalliga)", "enum": [ - "INJURY", - "RECAP", - "TRANSACTION", - "LINEUP", - "GAME_UPDATE", - "OUTLOOK" + "nord", + "nordost", + "west", + "suedwest", + "bayern" ], "in": "query", - "name": "news_type", - "type": "string" - }, - { - "description": "A team's `number_fire_id` from the `sports` route", - "in": "query", - "name": "team", - "type": "integer" - }, - { - "description": "A player's `number_fire_id`; needs `position`", - "in": "query", - "name": "player", - "type": "integer" + "name": "regional_league", + "type": "string", + "x-example": "nord" }, { - "description": "The player's position code; needs `player`", + "description": "Only help-center articles of one category (implies stream helpcenter)", "enum": [ - "G", - "F", - "C", - "W", - "D", - "QB", - "DB", - "DL", - "K", - "LB", - "OL", - "P", - "RB", - "TE", - "WR", - "IF", - "OF", - "DH" + "allgemeines", + "app", + "liveticker", + "mannschaftsseite", + "profile", + "registrierung", + "training_service", + "widgets" ], "in": "query", - "name": "position", - "type": "string" - }, - { - "description": "`true` to include updates where the subject is not the main player", - "in": "query", - "name": "include_non_primary", - "type": "boolean" + "name": "help_category", + "type": "string", + "x-example": "app" }, { - "default": 25, - "description": "Updates per page, 1 to 100; default 25", + "description": "Articles per call, 1 to 50, default 10", "in": "query", - "maximum": 100, - "minimum": 1, "name": "limit", - "type": "integer" + "type": "integer", + "x-example": 10 }, { - "description": "Continue from the previous response's `next_cursor`", + "description": "Number of articles to skip, 0 to 5000, default 0", "in": "query", - "name": "cursor", - "type": "string" + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -353467,7 +427021,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.researchPlayerNewsResponseDoc" + "$ref": "#/definitions/fussballde.newsResponseDoc" } }, "400": { @@ -353476,6 +427030,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -353488,25 +427048,27 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Research player news and injuries", + "summary": "List FUSSBALL.DE news", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/research/podcasts/quick-picks-daily": { + "/fussballde/news-article": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of public Quick Picks Daily program clip metadata from Omny Studio's read-only Consumer API. Follow `next_cursor` to continue; use `in_rss_playlist` to distinguish clips in the default podcast feed and `published_at` to judge freshness. The endpoint returns listening-page links and metadata, not audio files.", - "operationId": "fanduel-research-quick-picks-daily", + "description": "Returns one FUSSBALL.DE news article: title, category, publication date and time, lead image and caption, and the body paragraphs as plain text.", + "operationId": "fussballde-news-article", "parameters": [ { - "description": "Cursor from a previous response's `data.next_cursor`; omit for the first page", + "description": "Numeric article id from fussballde-news", "in": "query", - "name": "cursor", - "type": "string" + "name": "article_id", + "required": true, + "type": "string", + "x-example": "10067512" } ], "produces": [ @@ -353516,7 +427078,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.quickPicksDailyResponseDoc" + "$ref": "#/definitions/fussballde.newsArticleResponseDoc" } }, "400": { @@ -353525,8 +427087,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -353543,56 +427105,52 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Research Quick Picks Daily episode archive", + "summary": "Get a FUSSBALL.DE news article", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/research/projection-slates": { + "/fussballde/news-search": { "get": { "consumes": [ "application/json" ], - "description": "Lists the daily-fantasy slates (the contest pools such as `Main`, `All Day` or a single game) of a sport, which the DAILY projections need as `slate_id`. Defaults to today; pass `date` for MLB, NBA and NHL, or `week` and `season` for the NFL, to read another day (past days list their slates too; a day with no games returns an empty list). Golf also returns the current events whose `id` is the projections' `event_id`.", - "operationId": "fanduel-research-projection-slates", + "description": "Searches FUSSBALL.DE editorial news (`news`) or the Profi-Newsflash (`pro_news`) by keyword and returns teasers with title, category, date and excerpt. The first page (offset 0) also reports the total hit count; page with `limit` (1 to 50) and `offset`. No hits is a valid empty result.", + "operationId": "fussballde-news-search", "parameters": [ { - "description": "Sport", - "enum": [ - "mlb", - "nba", - "nfl", - "nhl", - "golf" - ], + "description": "Search text, 2 to 80 characters", "in": "query", - "name": "sport", + "name": "q", "required": true, "type": "string", - "x-example": "nba" + "x-example": "Dortmund" }, { - "description": "Day as `YYYY-MM-DD`; MLB, NBA and NHL only; cannot be combined with `week` or `season`", + "description": "News channel, default news", + "enum": [ + "news", + "pro_news" + ], "in": "query", - "name": "date", - "type": "string" + "name": "channel", + "type": "string", + "x-example": "news" }, { - "description": "NFL week, 1 to 30; NFL only, usually with `season`", + "description": "Articles per call, 1 to 50, default 10", "in": "query", - "maximum": 30, - "minimum": 1, - "name": "week", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 10 }, { - "description": "NFL season year such as `2026`; NFL only", + "description": "Number of hits to skip, 0 to 10000, default 0", "in": "query", - "maximum": 2100, - "minimum": 2000, - "name": "season", - "type": "integer" + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -353602,7 +427160,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.researchProjectionSlatesResponseDoc" + "$ref": "#/definitions/fussballde.newsSearchResponseDoc" } }, "400": { @@ -353611,6 +427169,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -353623,32 +427187,27 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Research projection slates", + "summary": "Search FUSSBALL.DE news", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/research/projection-tables": { + "/fussballde/player": { "get": { "consumes": [ "application/json" ], - "description": "Lists the 17 fantasy projection tables of FanDuel Research (numberFire) for MLB, NBA, NFL, NHL and golf: each table's sport, projection type, the position tabs it offers (with the player positions each tab keeps), whether it takes a scope, a slate or a golf event. Use it to find the valid `type`, `position` and `scope` values for the projections route.", - "operationId": "fanduel-research-projection-tables", + "description": "Returns a player's public profile: name, team, team type, birth date and, for registered players (`profile_type` full), the current-season statistics such as appearances, minutes played, goals, goals against and cards. Players without a registered profile (`profile_type` basic) only have name, team and team type. Player ids come from `fussballde-player-search`, scorer lists, squads and amateur statistics.", + "operationId": "fussballde-player", "parameters": [ { - "description": "Keep only this sport's tables", - "enum": [ - "mlb", - "nba", - "nfl", - "nhl", - "golf" - ], + "description": "Player id from fussballde-player-search, fussballde-top-scorers, fussballde-team-squad or fussballde-amateur-stats", "in": "query", - "name": "sport", - "type": "string" + "name": "player_id", + "required": true, + "type": "string", + "x-example": "01MH0AKR7C000007VV0AG13EVSFDFGE6" } ], "produces": [ @@ -353658,7 +427217,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.researchProjectionTablesResponseDoc" + "$ref": "#/definitions/fussballde.playerResponseDoc" } }, "400": { @@ -353667,6 +427226,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -353679,150 +427244,41 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Research projection tables", + "summary": "Get a FUSSBALL.DE player profile", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/research/projections": { + "/fussballde/player-matches": { "get": { "consumes": [ "application/json" ], - "description": "Returns numberFire's fantasy projections for MLB, NBA, NFL, NHL and golf in the service's rank order: each row has the player, team, game, FanDuel DFS salary and value (daily projections), and the stat columns of the player kind (points, rebounds and assists for the NBA; passing, rushing and receiving for NFL skill players; kicker, defense and individual defensive player columns; skater, goalie, batter and pitcher columns; golf finish odds). `type` picks the table: `DAILY` (needs `slate_id`), `WEEKLY`, `YEARLY`, `REMAINING`, `PPR` or `SEASON_STATS`; not every sport has every type, and `position` and `scope` depend on the table, so read them from the projection-tables route. An unknown slate is refused instead of silently returning other projections. Weekly NBA and MLB tables are empty outside their weeks. A player id can appear more than once in a yearly table.", - "operationId": "fanduel-research-projections", + "description": "Returns a registered player's matches for one season and team: date, teams, result and per match the goals, the minute they were substituted in or out, and minutes played. Also lists the player's teams and competitions for the season so another team can be selected with `team_id`. Basic profiles without registration have no match data.", + "operationId": "fussballde-player-matches", "parameters": [ { - "description": "Sport", - "enum": [ - "mlb", - "nba", - "nfl", - "nhl", - "golf" - ], - "in": "query", - "name": "sport", - "required": true, - "type": "string", - "x-example": "nba" - }, - { - "description": "Projection type", - "enum": [ - "DAILY", - "WEEKLY", - "YEARLY", - "REMAINING", - "PPR", - "SEASON_STATS" - ], + "description": "Player id of a full profile, see fussballde-player", "in": "query", - "name": "type", + "name": "player_id", "required": true, "type": "string", - "x-example": "SEASON_STATS" - }, - { - "description": "Position tab of the table; default is the table's default tab. Allowed values: `batters`, `pitchers`, `c`, `1b`, `2b`, `3b`, `ss`, `of`, `sp`, `rp` (MLB); `qb`, `rb`, `wr`, `te`, `flex`, `k`, `defense`, `idp` (NFL); `all`, `pg`, `sg`, `guards`, `sf`, `pf`, `forwards`, `centers` (NBA); `skaters`, `goalies`, `forwards`, `wingers`, `centers`, `d` (NHL); `all` (golf). Which of them a table offers is listed by projection-tables", - "enum": [ - "batters", - "pitchers", - "c", - "1b", - "2b", - "3b", - "ss", - "of", - "sp", - "rp", - "qb", - "rb", - "wr", - "te", - "flex", - "k", - "defense", - "all", - "pg", - "sg", - "guards", - "sf", - "pf", - "forwards", - "centers", - "skaters", - "goalies", - "wingers", - "d", - "idp" - ], - "in": "query", - "name": "position", - "type": "string" - }, - { - "description": "`TOTAL` or `PER_GAME`; only NBA WEEKLY, YEARLY, REMAINING and SEASON_STATS take it, default `TOTAL`; other tables return `400`", - "enum": [ - "TOTAL", - "PER_GAME" - ], - "in": "query", - "name": "scope", - "type": "string" - }, - { - "description": "Slate id from the projection-slates route; required for DAILY (golf defaults to its only slate); other types return `400`", - "in": "query", - "name": "slate_id", - "type": "string" - }, - { - "description": "Golf event id from the projection-slates route; golf only, defaults to the only current event", - "in": "query", - "name": "event_id", - "type": "string" - }, - { - "description": "Day of the slate as `YYYY-MM-DD` when `slate_id` is not from today; MLB, NBA and NHL DAILY only", - "in": "query", - "name": "date", - "type": "string" - }, - { - "description": "NFL week of the slate when `slate_id` is not from this week; NFL DAILY only", - "in": "query", - "maximum": 30, - "minimum": 1, - "name": "week", - "type": "integer" + "x-example": "01MH0AKR7C000007VV0AG13EVSFDFGE6" }, { - "description": "NFL season of the slate; NFL DAILY only", + "description": "Four-digit season code, default current season", "in": "query", - "maximum": 2100, - "minimum": 2000, "name": "season", - "type": "integer" - }, - { - "default": 1, - "description": "Page number, from 1; default 1, at most 10000", - "in": "query", - "maximum": 10000, - "minimum": 1, - "name": "page", - "type": "integer" + "type": "string", + "x-example": "2627" }, { - "default": 50, - "description": "Rows per page, 1 to 200; default 50", + "description": "Team id from the teams list of a previous response; default the player's main team", "in": "query", - "maximum": 200, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "team_id", + "type": "string", + "x-example": "030POM2JO0000000VS5489BSVSO3A7B3" } ], "produces": [ @@ -353832,7 +427288,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.researchProjectionsResponseDoc" + "$ref": "#/definitions/fussballde.playerMatchesResponseDoc" } }, "400": { @@ -353841,6 +427297,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -353853,50 +427315,54 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Research fantasy projections", + "summary": "Get a FUSSBALL.DE player's match-by-match record", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/research/sports": { + "/fussballde/player-search": { "get": { "consumes": [ "application/json" ], - "description": "Lists the 23 sports and topics of the FanDuel Research site (NFL, NBA, MLB, NHL, college football and basketball, golf, tennis, soccer, MMA, horse racing, casino, FanDuel Predicts and more) with the slug the other research routes take, the position codes, the team count and the player-news types each has. Pass `sport` to also get that sport's teams with the `number_fire_id` values the team filters take.", - "operationId": "fanduel-research-sports", + "description": "Searches players registered on FUSSBALL.DE by first and/or last name, optionally narrowed by postcode or place, and returns each player's id, name, birth date, team and team type. The first page reports the `total` hit count; page with `limit` (1 to 100, default 20) and `offset`, and `final` marks the last page. At least one of `first_name` and `last_name` is required. No match is a valid empty result.", + "operationId": "fussballde-player-search", "parameters": [ { - "description": "Sport or topic slug; adds the sport's teams", - "enum": [ - "casino", - "nascar", - "ncaab", - "f1", - "ufc", - "boxing", - "ncaaf", - "womenssoccer", - "tv-and-podcast", - "nba", - "pga", - "tennis", - "nhl", - "mma", - "soccer", - "fanduel-sportsbook-promo-codes", - "sports-betting-101", - "horse-racing", - "wnba", - "predicts", - "mlb", - "canada", - "nfl" - ], + "description": "First name; first_name or last_name is required", "in": "query", - "name": "sport", - "type": "string" + "name": "first_name", + "type": "string", + "x-example": "Niclas" + }, + { + "description": "Last name; first_name or last_name is required", + "in": "query", + "name": "last_name", + "type": "string", + "x-example": "Füllkrug" + }, + { + "description": "Postcode or place name to narrow the result; cannot be used alone", + "in": "query", + "name": "place", + "type": "string", + "x-example": "44139" + }, + { + "description": "Players per call, 1 to 100, default 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + }, + { + "description": "Number of players to skip, 0 to 2000, default 0", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -353906,7 +427372,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.researchSportsResponseDoc" + "$ref": "#/definitions/fussballde.playerSearchResponseDoc" } }, "400": { @@ -353915,43 +427381,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "FanDuel Research sports and topics", - "tags": [ - "FanDuel" - ] - } - }, - "/fanduel/research/sub-categories": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the topics articles can be filtered by (predictions, best prop bets today, FanDuel picks, fantasy football, NFL draft, Kentucky Derby, Breeders' Cup, World Cup and more), each with the sport it belongs to. A topic only filters articles of its own sport.", - "operationId": "fanduel-research-sub-categories", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/fanduel.researchSubCategoriesResponseDoc" - } - }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -353968,35 +427399,27 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Research topics", + "summary": "Search FUSSBALL.DE players by name", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/sportsbook/autocomplete": { + "/fussballde/position-history": { "get": { "consumes": [ "application/json" ], - "description": "Returns the suggestions the Sportsbook's search box offers while a user types: players, teams and competitions that match the prefix. Each suggestion has its plain `text` and a `highlighted` form that wraps the matched characters in `` tags. Use `search/tabs` for the full results of a chosen suggestion.", - "operationId": "fanduel-sportsbook-autocomplete", + "description": "Returns every team's table position after each played matchday of a competition (the site's Fieberkurve), as one ordered list of positions per team. Position 1 is the leader; the list index is the matchday.", + "operationId": "fussballde-position-history", "parameters": [ { - "description": "Prefix to complete, 2 to 100 characters, without `<` or `>`", + "description": "Competition id from fussballde-competitions", "in": "query", - "name": "q", + "name": "competition_id", "required": true, "type": "string", - "x-example": "lak" - }, - { - "description": "Suggestions to return, 1 to 50; default 5", - "in": "query", - "maximum": 50, - "minimum": 1, - "name": "limit", - "type": "integer" + "x-example": "031BFREJC800001BVS5489BUVUR5FS5A-G" } ], "produces": [ @@ -354006,7 +427429,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookAutocompleteResponseDoc" + "$ref": "#/definitions/fussballde.positionHistoryResponseDoc" } }, "400": { @@ -354033,48 +427456,27 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook search suggestions", + "summary": "Get the FUSSBALL.DE fever curve of a competition", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/sportsbook/builder": { + "/fussballde/postal-codes": { "get": { "consumes": [ "application/json" ], - "description": "Returns the Sportsbook's bet-builder content for one event: the `groups` and `cards` (bet templates such as who will win, player lines, bullseye ranges, player podium, either-player and head-to-head groups) with their selectable options, the `players` and `teams` on offer, the `periods` and every priceable `choice` with its `choice_id` and description. Choices carry no odds here; price them with `builder/quotes` using this response's `ramp_event_id`. `head-to-head` and `player-combos` return `404` when the event has no cards for that experience.", - "operationId": "fanduel-sportsbook-builder", + "description": "Returns the German postcodes (with city and district) that FUSSBALL.DE's own location search suggests for a place name or postcode prefix. Use it to turn a place such as Dortmund into the five-digit `postal_code` that `fussballde-match-calendar` requires. No match is a valid empty list.", + "operationId": "fussballde-postal-codes", "parameters": [ { - "description": "Event id from the `builder/events` route (`events[].event_id`)", + "description": "Place name or postcode prefix, 2 to 40 characters", "in": "query", - "name": "event_id", + "name": "q", "required": true, - "type": "integer", - "x-example": 36188995 - }, - { - "default": "yourway", - "description": "Builder experience: `yourway` (default), `head-to-head`, `player-combos`, `bullseye`, `player-podium`, `or-bets`", - "enum": [ - "yourway", - "head-to-head", - "player-combos", - "bullseye", - "player-podium", - "or-bets" - ], - "in": "query", - "name": "experience", - "type": "string" - }, - { - "description": "Market code, including `on` for Ontario; default `nj`", - "in": "query", - "name": "state", - "type": "string" + "type": "string", + "x-example": "Dortmund" } ], "produces": [ @@ -354084,7 +427486,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookBuilderResponseDoc" + "$ref": "#/definitions/fussballde.postalCodesResponseDoc" } }, "400": { @@ -354111,40 +427513,48 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook bet builder", + "summary": "Look up German postcodes by place name", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/sportsbook/builder/events": { + "/fussballde/table": { "get": { "consumes": [ "application/json" ], - "description": "Lists the events a bet-builder experience covers (currently NFL and NBA games), grouped by competition, with start times and team logos. Use an `event_id` from here with the `builder` route.", - "operationId": "fanduel-sportsbook-builder-events", + "description": "Returns a competition's standings in one view: `overall`, `home_away` (home and away tables), `rounds` (first and second half-season tables), `fairness` (fair-play table) or `cross` (cross table of results between every pair of teams). Set `matchday` to get the standings as they were after that matchday (not available for `fairness`). Rows carry position, team, played, won, drawn, lost, goals and points where the view has them, plus the raw cells.", + "operationId": "fussballde-table", "parameters": [ { - "default": "yourway", - "description": "Builder experience: `yourway` (default), `head-to-head`, `player-combos`, `bullseye`, `player-podium`, `or-bets`", + "description": "Competition id from fussballde-competitions", + "in": "query", + "name": "competition_id", + "required": true, + "type": "string", + "x-example": "031BFREJC800001BVS5489BUVUR5FS5A-G" + }, + { + "description": "Standings view, default overall", "enum": [ - "yourway", - "head-to-head", - "player-combos", - "bullseye", - "player-podium", - "or-bets" + "overall", + "home_away", + "rounds", + "fairness", + "cross" ], "in": "query", - "name": "experience", - "type": "string" + "name": "view", + "type": "string", + "x-example": "overall" }, { - "description": "Market code, including `on` for Ontario; default `nj`", + "description": "Return the standings after this matchday, 1 to the competition's matchday count; not available for the fairness view", "in": "query", - "name": "state", - "type": "string" + "name": "matchday", + "type": "integer", + "x-example": 3 } ], "produces": [ @@ -354154,7 +427564,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookBuilderEventsResponseDoc" + "$ref": "#/definitions/fussballde.tableResponseDoc" } }, "400": { @@ -354181,45 +427591,27 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook bet builder events", + "summary": "Get a FUSSBALL.DE competition standings table", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/sportsbook/builder/quotes": { + "/fussballde/team": { "get": { "consumes": [ "application/json" ], - "description": "Prices bet-builder choices as single bets and returns, for each, the live decimal, American and fractional odds. A choice the pricing service does not know is returned in `failures` (for example `CHOICE_NOT_FOUND`) instead of failing the request. This is the price of each choice on its own: the combined price of several choices is a separate call that requires an account and is not available.", - "operationId": "fanduel-sportsbook-builder-quotes", + "description": "Returns one team page: name, team type, federation, standing summary (competition, table position, points, goal ratio), current competitions, home venues, the club profile (founding year, address, contact) and the team's season-by-season history with final placings and the highest league reached. Use `fussballde-team-matches` and `fussballde-team-squad` for fixtures and players.", + "operationId": "fussballde-team", "parameters": [ { - "description": "The builder response's `ramp_event_id` (not its `event_id`)", - "in": "query", - "name": "ramp_event_id", - "required": true, - "type": "integer", - "x-example": 16712244 - }, - { - "collectionFormat": "csv", - "description": "Choice ids from the builder response (`choices[].choice_id`); 1 to 25, repeated or comma-separated", + "description": "Team id from fussballde-matchday, fussballde-table or fussballde-club", "in": "query", - "items": { - "type": "string" - }, - "name": "choice_id", + "name": "team_id", "required": true, - "type": "array", - "x-example": "2763248ae1c5094d3aff3f30eb484612655c4cea3c3d386788b3b75628961795" - }, - { - "description": "Market code, including `on` for Ontario; default `nj`", - "in": "query", - "name": "state", - "type": "string" + "type": "string", + "x-example": "011MI8V6UC000000VTVG0001VTR8C1K7" } ], "produces": [ @@ -354229,7 +427621,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookChoiceQuotesResponseDoc" + "$ref": "#/definitions/fussballde.teamResponseDoc" } }, "400": { @@ -354256,115 +427648,88 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook bet builder quotes", + "summary": "Get a FUSSBALL.DE team", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/sportsbook/competition": { + "/fussballde/team-matches": { "get": { "consumes": [ "application/json" ], - "description": "Returns one competition's schedule and futures (tabs `schedule` and `futures`) with markets and odds. Get `competition_id` from the `competitions` of a league or sport response.", - "operationId": "fanduel-sportsbook-competition", + "description": "Returns a team's matches across its competitions. `all` (default) is the match plan for a date window (default the current season, 1 July to 30 June), optionally for one competition kind and paged with `limit` and `offset`; `next` is the next 10 fixtures, `previous` the latest 10 results, and `wins`, `draws` and `losses` the latest 10 finished matches with that outcome.", + "operationId": "fussballde-team-matches", "parameters": [ { - "description": "Sport id: 6423 American Football; 1 Soccer; 7522 Basketball; 3 Golf; 7511 Baseball; 7524 Ice Hockey; 2 Tennis; 26420387 Mixed Martial Arts; 2593174 Table Tennis; 3503 Darts; 6 Boxing; 5 Rugby Union; 4 Cricket; 8 Motor Sport; 1477 Rugby League; 6422 Snooker; 468328 Handball; 28608997 Lacrosse; 998917 Volleyball, 4726642 Surfing, 10 Special Bets and 2378961 Politics; availability differs by market (Volleyball is also offered in NJ, PA, CO and AZ), and a sport a market does not offer returns 404", + "description": "Team id, see fussballde-team", + "in": "query", + "name": "team_id", + "required": true, + "type": "string", + "x-example": "011MI8V6UC000000VTVG0001VTR8C1K7" + }, + { + "description": "Match list kind, default all", "enum": [ - "6423", - "1", - "7522", - "3", - "7511", - "7524", - "2", - "26420387", - "2593174", - "3503", - "6", - "5", - "4", - "8", - "1477", - "6422", - "468328", - "28608997", - "998917", - "4726642", - "10", - "2378961" + "all", + "next", + "previous", + "wins", + "draws", + "losses" ], "in": "query", - "name": "event_type_id", - "required": true, + "name": "kind", "type": "string", - "x-example": "6423" + "x-example": "all" }, { - "description": "Competition id from a league, sport or home response `competitions`", + "description": "kind all only: first day as YYYY-MM-DD, default 1 July of the current season", "in": "query", - "name": "competition_id", - "required": true, - "type": "integer", - "x-example": 12282733 + "name": "date_from", + "type": "string", + "x-example": "2026-07-01" }, { - "default": "nj", - "description": "U.S. market to query (prices and offered markets differ by state); default nj", - "enum": [ - "ar", - "az", - "co", - "ct", - "dc", - "ia", - "il", - "in", - "ks", - "ky", - "la", - "ma", - "md", - "mi", - "mo", - "mr", - "nc", - "nj", - "ny", - "oh", - "on", - "pa", - "pr", - "tn", - "va", - "vt", - "wv", - "wy" - ], + "description": "kind all only: last day as YYYY-MM-DD, default 30 June of the season", "in": "query", - "name": "state", - "type": "string" + "name": "date_to", + "type": "string", + "x-example": "2027-06-30" }, { - "description": "Show only one tab of this page: a tab slug from the response `tabs[].slug` (the lowercase-hyphenated tab title, such as `games` or `player-props`). An unknown slug returns 400 listing the page's tabs", + "description": "kind all only: competition kind id; omit for all kinds", + "enum": [ + "1", + "8", + "3", + "7", + "6", + "11", + "2", + "21", + "9" + ], "in": "query", - "name": "tab", - "type": "string" + "name": "competition_kind", + "type": "string", + "x-example": "8" }, { - "description": "Keep only these market types (repeat the parameter or comma-separate), for example `MONEY_LINE`. Valid values are listed in the response `market_types`; unmatched types return no markets", + "description": "Matches (kind all only) per call, 1 to 50, default 10", "in": "query", - "name": "market_type", - "type": "string" + "name": "limit", + "type": "integer", + "x-example": 10 }, { - "default": false, - "description": "Return events without their markets (a cheap event listing); `market_types` is still returned", + "description": "Number of matches to skip, 0 to 1000, default 0", "in": "query", - "name": "exclude_markets", - "type": "boolean" + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -354374,7 +427739,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookPageResponseDoc" + "$ref": "#/definitions/fussballde.teamMatchesResponseDoc" } }, "400": { @@ -354389,12 +427754,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -354407,76 +427766,46 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook competition schedule and futures", + "summary": "Get FUSSBALL.DE fixtures and results of a team", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/sportsbook/event": { + "/fussballde/team-squad": { "get": { "consumes": [ "application/json" ], - "description": "Returns one event with the markets and odds of one tab (game lines, player props, quarters, same-game-parlay markets and more). `tabs` lists every tab the event offers, each with the `slug` accepted by `tab`; the default is `popular`, which holds the most markets. An unknown tab returns 400 listing the valid slugs; an ended event returns 404.", - "operationId": "fanduel-sportsbook-event", + "description": "Returns a team's players for a season: the `squad` (appearances, minutes, goals), `arrivals` or `departures` with the columns the site publishes for each. Player names come in the site's `Surname, Forename` order.", + "operationId": "fussballde-team-squad", "parameters": [ { - "description": "Event id from any Sportsbook events listing", + "description": "Team id, see fussballde-team", "in": "query", - "name": "event_id", + "name": "team_id", "required": true, - "type": "integer", - "x-example": 35605985 - }, - { - "default": "nj", - "description": "U.S. market to query (prices and offered markets differ by state); default nj", - "enum": [ - "ar", - "az", - "co", - "ct", - "dc", - "ia", - "il", - "in", - "ks", - "ky", - "la", - "ma", - "md", - "mi", - "mo", - "mr", - "nc", - "nj", - "ny", - "oh", - "on", - "pa", - "pr", - "tn", - "va", - "vt", - "wv", - "wy" - ], - "in": "query", - "name": "state", - "type": "string" + "type": "string", + "x-example": "011MI8V6UC000000VTVG0001VTR8C1K7" }, { - "description": "Tab slug from the response `tabs[].slug` (for example `popular`, `passing-props`, `1st-half`, `td-scorer-props`); default `popular`. Tabs differ by sport", + "description": "Four-digit season code, default current season", "in": "query", - "name": "tab", - "type": "string" + "name": "season", + "type": "string", + "x-example": "2627" }, { - "description": "Keep only these market types (repeat the parameter or comma-separate), for example `MONEY_LINE`. Valid values are listed in the response `market_types`; unmatched types return no markets", + "description": "Player list kind, default squad", + "enum": [ + "squad", + "arrivals", + "departures" + ], "in": "query", - "name": "market_type", - "type": "string" + "name": "kind", + "type": "string", + "x-example": "squad" } ], "produces": [ @@ -354486,7 +427815,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookEventResponseDoc" + "$ref": "#/definitions/fussballde.teamSquadResponseDoc" } }, "400": { @@ -354501,12 +427830,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -354519,27 +427842,41 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook event markets", + "summary": "Get a FUSSBALL.DE team squad", "tags": [ - "FanDuel" + "FUSSBALL.DE" ] } }, - "/fanduel/sportsbook/event/box-score": { + "/fussballde/top-scorers": { "get": { "consumes": [ "application/json" ], - "description": "Returns an event's box score grouped by stat category (for football passing, rushing, receiving, kicking, defense) with column labels and player names joined in. `available` is false until the provider has a box score.", - "operationId": "fanduel-sportsbook-event-box-score", + "description": "Returns a page of a competition's top-scorer list with position, player, team and goals; page through it with `limit` (1 to 100, default 30) and `offset`. Tied scorers share a position. A competition without recorded scorers returns an empty list; cups and tournaments have no scorer list at all and return 404.", + "operationId": "fussballde-top-scorers", "parameters": [ { - "description": "Event id from any Sportsbook events listing", + "description": "Competition id from fussballde-competitions", "in": "query", - "name": "event_id", + "name": "competition_id", "required": true, + "type": "string", + "x-example": "031BFREJC800001BVS5489BUVUR5FS5A-G" + }, + { + "description": "Scorers per call, 1 to 100, default 30", + "in": "query", + "name": "limit", "type": "integer", - "x-example": 35605985 + "x-example": 30 + }, + { + "description": "Number of scorers to skip, 0 to 1000, default 0", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -354549,7 +427886,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookBoxScoreResponseDoc" + "$ref": "#/definitions/fussballde.topScorersResponseDoc" } }, "400": { @@ -354564,11 +427901,37 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get the FUSSBALL.DE top scorers of a competition", + "tags": [ + "FUSSBALL.DE" + ] + } + }, + "/futgg/fc27/catalog": { + "get": { + "description": "Returns native catalog IDs, EA IDs and labels. Use eaId for player filters; internal database IDs are a separate namespace.", + "operationId": "futgg-fc27-catalog", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/futgg.ResponseDoc" + } }, "503": { "description": "Service Unavailable", @@ -354582,34 +427945,23 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook live box score", + "summary": "Discover FC27 native card catalogs", "tags": [ - "FanDuel" + "FUT.GG" ] } }, - "/fanduel/sportsbook/event/play-by-play": { + "/futgg/fc27/definitions": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns an event's play-by-play feed. The `feed` object keeps the provider's sport-specific structure (drives and plays for football). `available` is false until play-by-play exists for the event.", - "operationId": "fanduel-sportsbook-event-play-by-play", + "description": "Reads the source batch metadata endpoint with EA item IDs and preserves card identity/stat fields. This does not fetch accounts or install anything.", + "operationId": "futgg-fc27-definitions", "parameters": [ { - "description": "Event id from any Sportsbook events listing", + "description": "Comma-separated EA item IDs, 1 to 100", "in": "query", - "name": "event_id", + "name": "ids", "required": true, - "type": "integer", - "x-example": 35605985 - }, - { - "default": false, - "description": "Return only the play in progress (a much smaller payload for polling a live game); default false", - "in": "query", - "name": "current", - "type": "boolean" + "type": "string" } ], "produces": [ @@ -354619,7 +427971,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookPlayByPlayResponseDoc" + "$ref": "#/definitions/futgg.ResponseDoc" } }, "400": { @@ -354634,12 +427986,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -354652,27 +427998,53 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook live play-by-play", + "summary": "Get native FC27 card definitions", "tags": [ - "FanDuel" + "FUT.GG" ] } }, - "/fanduel/sportsbook/event/players": { + "/futgg/fc27/evolutions": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the teams (names, abbreviations, colors, logos) and player roster (name, team, jersey number, position) the live-data provider holds for an event.", - "operationId": "fanduel-sportsbook-event-players", + "description": "Reads native expiry/cosmetic/name/page/full-list options and preserves source evolution rules, level tasks, upgrade choices, published metrics and example cards. include_cosmetics=false does not mean every returned isCosmeticEvolution is false; the source option is forwarded without a local partition. Omission preserves the underlying API default; explicitly request include_cosmetics=true to match the current FC27 UI. No eligible-player/path generation, account tracking, biography or local calculation.", + "operationId": "futgg-fc27-evolutions", "parameters": [ { - "description": "Event id from any Sportsbook events listing", + "description": "One-based source page; omission resolves native page1", "in": "query", - "name": "event_id", - "required": true, - "type": "integer", - "x-example": 35605985 + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "description": "Native integer size; nonpositive uses source default30; ignored in full mode", + "in": "query", + "name": "page_size", + "type": "integer" + }, + { + "description": "Native evolution name search, up to1024bytes", + "in": "query", + "name": "name", + "type": "string" + }, + { + "description": "Native expired-list selector; explicit false preserved", + "in": "query", + "name": "only_expired", + "type": "boolean" + }, + { + "description": "Native option that widens source cosmetic coverage; not an exclusive type predicate", + "in": "query", + "name": "include_cosmetics", + "type": "boolean" + }, + { + "description": "Return source data-only full-list mode; ignores paging controls", + "in": "query", + "name": "no_pagination", + "type": "boolean" } ], "produces": [ @@ -354682,7 +428054,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookEventPlayersResponseDoc" + "$ref": "#/definitions/futgg.ResponseDoc" } }, "400": { @@ -354697,12 +428069,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -354715,27 +428081,23 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook event teams and player roster", + "summary": "Browse FC27 evolution metadata", "tags": [ - "FanDuel" + "FUT.GG" ] } }, - "/fanduel/sportsbook/event/score": { + "/futgg/fc27/evolutions/{slug}": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns an event's live status (`scheduled`, `inprogress`, ...), the data-availability flags for box score, play-by-play and quick bets, and the live score with the period breakdown and game clock once play has started.", - "operationId": "fanduel-sportsbook-event-score", + "description": "Uses the source evolution slug and returns native game/rule/level/upgrade metadata with its published raw-definition example. This differs from list example-card wrappers. Preserves nulls and source order while excluding biography/account/editorial/internal engine data. No previous-edition fallback, player/path generation, local upgrades or media execution.", + "operationId": "futgg-fc27-evolution", "parameters": [ { - "description": "Event id from any Sportsbook events listing", - "in": "query", - "name": "event_id", + "description": "Native evolution slug from listing; numeric prefix is the site evolution ID, not EA ID", + "in": "path", + "name": "slug", "required": true, - "type": "integer", - "x-example": 35605985 + "type": "string" } ], "produces": [ @@ -354745,7 +428107,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookEventScoreResponseDoc" + "$ref": "#/definitions/futgg.ResponseDoc" } }, "400": { @@ -354760,12 +428122,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -354778,29 +428134,16 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook live score and status", + "summary": "Read FC27 evolution detail", "tags": [ - "FanDuel" + "FUT.GG" ] } }, - "/fanduel/sportsbook/event/stats": { + "/futgg/fc27/gg-rating-ranks": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one event's public betting split (share of bets and of money on each side of the spread) and each team's last five results, with team colors. Events without published stats return 404.", - "operationId": "fanduel-sportsbook-event-stats", - "parameters": [ - { - "description": "Event id from any Sportsbook events listing", - "in": "query", - "name": "event_id", - "required": true, - "type": "integer", - "x-example": 35605985 - } - ], + "description": "Returns every native role histogram with source scale and bucket data. Role IDs are distinct from card EA item IDs. This returns the publisher's dataset without calculating new player ranks or percentiles.", + "operationId": "futgg-fc27-gg-rating-ranks", "produces": [ "application/json" ], @@ -354808,7 +428151,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookEventStatsResponseDoc" + "$ref": "#/definitions/futgg.ResponseDoc" } }, "400": { @@ -354817,18 +428160,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -354841,39 +428172,16 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook event betting splits and form", + "summary": "Get FC27 published GG-rating rank histograms", "tags": [ - "FanDuel" + "FUT.GG" ] } }, - "/fanduel/sportsbook/events/status": { + "/futgg/fc27/gg-ratings": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the live state of up to 30 events in one call: `status` (for example `ACTIVE`), `game_phase` (for example `PRE_PLAY`) and the three logical clocks that change when prices, status or structure change, which makes it a cheap way to poll many events. Ids the Sportsbook does not know are listed in `not_found` instead of failing the call.", - "operationId": "fanduel-sportsbook-events-status", - "parameters": [ - { - "collectionFormat": "csv", - "description": "Event ids, 1 to 30, repeated or comma-separated", - "in": "query", - "items": { - "type": "string" - }, - "name": "event_id", - "required": true, - "type": "array", - "x-example": "36188995" - }, - { - "description": "Market code, including `on` for Ontario; default `nj`", - "in": "query", - "name": "state", - "type": "string" - } - ], + "description": "Returns the complete native compact rating dataset with delta-coded EA item IDs, positions and scaled scores. Source fields, order, wire version and sentinel values remain intact. Publication references refresh automatically.", + "operationId": "futgg-fc27-gg-ratings", "produces": [ "application/json" ], @@ -354881,7 +428189,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookEventsStatusResponseDoc" + "$ref": "#/definitions/futgg.ResponseDoc" } }, "400": { @@ -354890,11 +428198,37 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get FC27 published GG ratings", + "tags": [ + "FUT.GG" + ] + } + }, + "/futgg/fc27/objective-categories": { + "get": { + "description": "Returns every source-backed group category, including the native coming-soon selector. The separate Season Pass campaign navigation row is excluded. UI-only Expiring Soon is not a server filter and is not offered. Native EA category IDs and optional flags are preserved; category_slug is the consuming value.", + "operationId": "futgg-fc27-objective-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/futgg.ResponseDoc" + } }, "503": { "description": "Service Unavailable", @@ -354908,80 +428242,62 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook events status", + "summary": "Discover FC27 objective group categories", "tags": [ - "FanDuel" + "FUT.GG" ] } }, - "/fanduel/sportsbook/home": { + "/futgg/fc27/objectives": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the Sportsbook homepage's featured events with their markets and current American, decimal and fractional odds, grouped by the homepage's tabs. Filter with `tab`, `competition_id` and `market_type`.", - "operationId": "fanduel-sportsbook-home", + "description": "Preserves native category, preview, expiry and pagination arguments/results. Current source quirk: omitted hide_expired hides expired groups, while explicit true or false both include them. The API forwards the native flag without locally correcting it. Full mode returns data only; paginated mode has currentPage,next,totalPages and no invented totalCount. No local expiry windows, squad building, account progress or reward aggregation.", + "operationId": "futgg-fc27-objective-groups", "parameters": [ { - "default": "nj", - "description": "U.S. market to query (prices and offered markets differ by state); default nj", - "enum": [ - "ar", - "az", - "co", - "ct", - "dc", - "ia", - "il", - "in", - "ks", - "ky", - "la", - "ma", - "md", - "mi", - "mo", - "mr", - "nc", - "nj", - "ny", - "oh", - "on", - "pa", - "pr", - "tn", - "va", - "vt", - "wv", - "wy" - ], + "description": "Native one-based page, default1", "in": "query", - "name": "state", - "type": "string" + "minimum": 1, + "name": "page", + "type": "integer" }, { - "description": "Show only one tab of this page: a tab slug from the response `tabs[].slug` (the lowercase-hyphenated tab title, such as `games` or `player-props`). An unknown slug returns 400 listing the page's tabs", + "description": "Native size; nonpositive resolves default30; ignored in full mode", "in": "query", - "name": "tab", + "name": "page_size", + "type": "integer" + }, + { + "description": "Native group category", + "enum": [ + "coming-soon", + "foundations", + "seasonal", + "campaigns", + "live-events", + "milestones", + "mastery", + "fc-pro" + ], + "in": "query", + "name": "category_slug", "type": "string" }, { - "description": "Keep only events of this competition id (from the response `competitions`)", + "description": "Return native complete data-only envelope", "in": "query", - "name": "competition_id", - "type": "integer" + "name": "no_pagination", + "type": "boolean" }, { - "description": "Keep only these market types (repeat the parameter or comma-separate), for example `MONEY_LINE`. Valid values are listed in the response `market_types`; unmatched types return no markets", + "description": "Native flag; omission and explicit presence differ as described", "in": "query", - "name": "market_type", - "type": "string" + "name": "hide_expired", + "type": "boolean" }, { - "default": false, - "description": "Return events without their markets (a cheap event listing); `market_types` is still returned", + "description": "Include source-published taskless preview metadata", "in": "query", - "name": "exclude_markets", + "name": "include_unreleased", "type": "boolean" } ], @@ -354992,7 +428308,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookPageResponseDoc" + "$ref": "#/definitions/futgg.ResponseDoc" } }, "400": { @@ -355007,12 +428323,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -355025,89 +428335,23 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook homepage odds", + "summary": "Browse FC27 objective groups", "tags": [ - "FanDuel" + "FUT.GG" ] } }, - "/fanduel/sportsbook/league": { + "/futgg/fc27/objectives/by-ea/{id}": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a featured league page (for example nfl, nba, mlb) with its events, markets and odds, grouped by the page's tabs such as Games, Player Props, Win Totals or Super Bowl. `custom_page_id` values come from the sports route's `popular_links`; an unknown id returns 404.", - "operationId": "fanduel-sportsbook-league", + "description": "Uses group eaId, not its internal database id or a child objective EA id. Returns the same public parent group metadata as the slug resource, without account state or cross-edition fallback.", + "operationId": "futgg-fc27-objective-group-by-ea", "parameters": [ { - "description": "League page id such as `nfl`, `nba`, `mlb`, `ncaaf`, `ncaab`, `nhl`, `wnba`, `pga`, `ncaaw`. Tournament and event pages appear and disappear during the year, and a retired page returns 404; list the current ones with the sports route", - "in": "query", - "name": "custom_page_id", + "description": "Positive EA group ID from listing eaId", + "in": "path", + "name": "id", "required": true, - "type": "string", - "x-example": "nfl" - }, - { - "default": "nj", - "description": "U.S. market to query (prices and offered markets differ by state); default nj", - "enum": [ - "ar", - "az", - "co", - "ct", - "dc", - "ia", - "il", - "in", - "ks", - "ky", - "la", - "ma", - "md", - "mi", - "mo", - "mr", - "nc", - "nj", - "ny", - "oh", - "on", - "pa", - "pr", - "tn", - "va", - "vt", - "wv", - "wy" - ], - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "Show only one tab of this page: a tab slug from the response `tabs[].slug` (the lowercase-hyphenated tab title, such as `games` or `player-props`). An unknown slug returns 400 listing the page's tabs", - "in": "query", - "name": "tab", - "type": "string" - }, - { - "description": "Keep only events of this competition id (from the response `competitions`)", - "in": "query", - "name": "competition_id", "type": "integer" - }, - { - "description": "Keep only these market types (repeat the parameter or comma-separate), for example `MONEY_LINE`. Valid values are listed in the response `market_types`; unmatched types return no markets", - "in": "query", - "name": "market_type", - "type": "string" - }, - { - "default": false, - "description": "Return events without their markets (a cheap event listing); `market_types` is still returned", - "in": "query", - "name": "exclude_markets", - "type": "boolean" } ], "produces": [ @@ -355117,7 +428361,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookPageResponseDoc" + "$ref": "#/definitions/futgg.ResponseDoc" } }, "400": { @@ -355132,12 +428376,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -355150,99 +428388,23 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook league page odds", + "summary": "Read FC27 objective group by EA group ID", "tags": [ - "FanDuel" + "FUT.GG" ] } }, - "/fanduel/sportsbook/live": { + "/futgg/fc27/objectives/by-objective/{id}": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns events that are in play now for one sport, with their live markets and odds. `tabs` lists every sport with its live-event count (`live_count`); pass `event_type_id` to load another sport. Without it the Sportsbook's default sport is returned and reported in `event_type_id`.", - "operationId": "fanduel-sportsbook-live", + "description": "Uses objectivesEaIds or objectives[].eaId and returns the parent group, not a standalone task DTO. EA group IDs and database IDs are distinct. No account tracking, biography or completion mutation.", + "operationId": "futgg-fc27-objective-group-by-objective", "parameters": [ { - "description": "Sport id: 6423 American Football; 1 Soccer; 7522 Basketball; 3 Golf; 7511 Baseball; 7524 Ice Hockey; 2 Tennis; 26420387 Mixed Martial Arts; 2593174 Table Tennis; 3503 Darts; 6 Boxing; 5 Rugby Union; 4 Cricket; 8 Motor Sport; 1477 Rugby League; 6422 Snooker; 468328 Handball; 28608997 Lacrosse; 998917 Volleyball, 4726642 Surfing, 10 Special Bets and 2378961 Politics; availability differs by market (Volleyball is also offered in NJ, PA, CO and AZ), and a sport a market does not offer returns 404", - "enum": [ - "6423", - "1", - "7522", - "3", - "7511", - "7524", - "2", - "26420387", - "2593174", - "3503", - "6", - "5", - "4", - "8", - "1477", - "6422", - "468328", - "28608997", - "998917", - "4726642", - "10", - "2378961" - ], - "in": "query", - "name": "event_type_id", - "type": "string" - }, - { - "default": "nj", - "description": "U.S. market to query (prices and offered markets differ by state); default nj", - "enum": [ - "ar", - "az", - "co", - "ct", - "dc", - "ia", - "il", - "in", - "ks", - "ky", - "la", - "ma", - "md", - "mi", - "mo", - "mr", - "nc", - "nj", - "ny", - "oh", - "on", - "pa", - "pr", - "tn", - "va", - "vt", - "wv", - "wy" - ], - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "Keep only these market types (repeat the parameter or comma-separate), for example `MONEY_LINE`. Valid values are listed in the response `market_types`; unmatched types return no markets", - "in": "query", - "name": "market_type", - "type": "string" - }, - { - "default": false, - "description": "Return events without their markets (a cheap event listing); `market_types` is still returned", - "in": "query", - "name": "exclude_markets", - "type": "boolean" + "description": "Positive child EA objective ID", + "in": "path", + "name": "id", + "required": true, + "type": "integer" } ], "produces": [ @@ -355252,7 +428414,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookPageResponseDoc" + "$ref": "#/definitions/futgg.ResponseDoc" } }, "400": { @@ -355261,8 +428423,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -355279,24 +428441,22 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook live betting events", + "summary": "Read FC27 parent group by EA objective ID", "tags": [ - "FanDuel" + "FUT.GG" ] } }, - "/fanduel/sportsbook/live-count": { + "/futgg/fc27/objectives/{slug}": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the number of events in play in a market, the figure the Sportsbook's homepage shows beside its Live link. It differs by market (for example about 130 in NJ, 107 in PA, 36 in NY and 185 in Ontario on one afternoon) and moves as games start and end, which makes it a cheap way to watch activity. Use the `live` route to list the events.", - "operationId": "fanduel-sportsbook-live-count", + "description": "Reads a source group slug and preserves task rules, completion requirements, source rewards and optional values. objectivesCompletionCount is a public completion requirement, not user progress. No automatic previous-edition fallback, biography/account data or locally built squad/reward totals.", + "operationId": "futgg-fc27-objective-group", "parameters": [ { - "description": "Market code, including `on` for Ontario; default `nj`", - "in": "query", - "name": "state", + "description": "Native objective group slug from listing", + "in": "path", + "name": "slug", + "required": true, "type": "string" } ], @@ -355307,7 +428467,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookLiveCountResponseDoc" + "$ref": "#/definitions/futgg.ResponseDoc" } }, "400": { @@ -355316,6 +428476,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -355328,27 +428494,27 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook live event count", + "summary": "Read FC27 objective group detail", "tags": [ - "FanDuel" + "FUT.GG" ] } }, - "/fanduel/sportsbook/live-data": { + "/futgg/fc27/player-sorts": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns live state for up to 20 events from the Sportsbook's in-play service, which covers every sport: tennis sets, games, points and server; soccer score, cards and corners; basketball and hockey period scores and remaining time, with live progress of player-prop markets where the sport has them. `details` keeps the provider's sport-specific structure; `home_score` and `away_score` are filled when the sport reports a single score. Scheduled events return `live: false`; ids with no entry are listed in `missing`.", - "operationId": "fanduel-sportsbook-live-data", + "description": "Returns the complete accepted business-sort catalog for the native Console or PC context, grouped by source labels with exact ascending/descending values. Price uses different Console/PC keys. Pass one returned value as sorts to the FC27 players endpoint. Biological sorts are outside the game-card contract.", + "operationId": "futgg-fc27-player-sorts", "parameters": [ { - "description": "Event id from any Sportsbook events listing; repeat the parameter or comma-separate, 1 to 20 ids", + "default": "console", + "description": "Native UI price-platform context", + "enum": [ + "console", + "pc" + ], "in": "query", - "name": "event_id", - "required": true, - "type": "string", - "x-example": "35605985" + "name": "platform", + "type": "string" } ], "produces": [ @@ -355358,7 +428524,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookLiveDataResponseDoc" + "$ref": "#/definitions/futgg.PlayerSortResponseDoc" } }, "400": { @@ -355367,12 +428533,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -355385,36 +428545,574 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook live state for any sport", + "summary": "Discover native FC27 player sorts", "tags": [ - "FanDuel" + "FUT.GG" ] } }, - "/fanduel/sportsbook/live-scores": { + "/futgg/fc27/players": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the live score and stats of up to 100 events in one call, from the Sportsbook's game-state service. Each event has `home_score` and `away_score`, the `period` and `current_period`, the time left in the period (`period_remaining_milliseconds`, basketball), the available `media_types` (for example `LIVE_VIDEO`, `MATCH_STATS`) and a sport-specific `details` block with per-period points, cards, corners or a timeline. `sport` is the Sportsbook's own name for the details block, in which `football` is soccer and `americanFootball` is the NFL and college football. An event the service has no live state for is listed in `not_found` instead of failing the call; use `event/score`, `event/box-score` and `event/play-by-play` for one event in depth.", - "operationId": "fanduel-sportsbook-live-scores", + "description": "Preserves source card, page/next and capped total metadata. Native definition predicates qualify position/body/foot/gender/acceleration filters; base accelerateType is not a substitute for possible chemistry-style types.", + "operationId": "futgg-fc27-players", "parameters": [ + { + "description": "Nation eaId from the catalog", + "in": "query", + "name": "nation_id", + "type": "integer" + }, + { + "description": "League eaId from the catalog", + "in": "query", + "name": "league_id", + "type": "integer" + }, + { + "description": "Native grouped-club eaId from the catalog", + "in": "query", + "name": "club_id", + "type": "integer" + }, + { + "description": "Rarity eaId from the catalog", + "in": "query", + "name": "rarity_id", + "type": "integer" + }, { "collectionFormat": "csv", - "description": "Event ids, 1 to 100, repeated or comma-separated", + "description": "Comma-separated primary/alternative positions:0,3,5,7,10,12,14,16,18,23,25,27; OR within selection", "in": "query", "items": { - "type": "string" + "enum": [ + 0, + 3, + 5, + 7, + 10, + 12, + 14, + 16, + 18, + 23, + 25, + 27 + ], + "type": "integer" }, - "name": "event_id", - "required": true, - "type": "array", - "x-example": "36218656" + "name": "positions", + "type": "array" }, { - "description": "Market code, including `on` for Ontario; default `nj`", + "collectionFormat": "csv", + "description": "Comma-separated strong-foot codes:1 right,2 left; OR within selection", "in": "query", - "name": "state", + "items": { + "enum": [ + 1, + 2 + ], + "type": "integer" + }, + "name": "foot", + "type": "array" + }, + { + "collectionFormat": "csv", + "description": "Comma-separated native gender codes:1 male,2 female; OR within selection", + "in": "query", + "items": { + "enum": [ + 1, + 2 + ], + "type": "integer" + }, + "name": "gender", + "type": "array" + }, + { + "collectionFormat": "csv", + "description": "Comma-separated native body-type codes:1,2,3,4,5,6,7,8,9,10; OR within selection", + "in": "query", + "items": { + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "type": "integer" + }, + "name": "body_types", + "type": "array" + }, + { + "collectionFormat": "csv", + "description": "Comma-separated possible chemistry-style codes:1 explosive,2 lengthy,3 controlled; OR within selection", + "in": "query", + "items": { + "enum": [ + 1, + 2, + 3 + ], + "type": "integer" + }, + "name": "accelerate_types", + "type": "array" + }, + { + "description": "Native player name search text", + "in": "query", + "name": "name", + "type": "string" + }, + { + "collectionFormat": "csv", + "description": "Comma-separated exact star selections:1,2,3,4,5; OR within selection", + "in": "query", + "items": { + "enum": [ + 1, + 2, + 3, + 4, + 5 + ], + "type": "integer" + }, + "name": "skill_moves", + "type": "array" + }, + { + "collectionFormat": "csv", + "description": "Comma-separated exact star selections:1,2,3,4,5; OR within selection", + "in": "query", + "items": { + "enum": [ + 1, + 2, + 3, + 4, + 5 + ], + "type": "integer" + }, + "name": "weak_foot", + "type": "array" + }, + { + "collectionFormat": "csv", + "description": "Comma-separated native types:1 Regular (holographic),2 Pristine; OR within selection", + "in": "query", + "items": { + "enum": [ + 1, + 2 + ], + "type": "integer" + }, + "name": "holographic_type", + "type": "array" + }, + { + "description": "Omit for native Hide mode; true includes holographics,only restricts to holographics", + "enum": [ + "true", + "only" + ], + "in": "query", + "name": "show_holographics", + "type": "string" + }, + { + "description": "Native inclusive lower bound: Min OVR (console); zero is forwarded unchanged", + "in": "query", + "minimum": 0, + "name": "overall__gte", + "type": "integer" + }, + { + "description": "Native inclusive upper bound: Max OVR (console); zero is forwarded unchanged", + "in": "query", + "minimum": 0, + "name": "overall__lte", + "type": "integer" + }, + { + "description": "Native inclusive lower bound: Min Item Score (console); zero is forwarded unchanged", + "in": "query", + "minimum": 0, + "name": "grading_score__gte", + "type": "integer" + }, + { + "description": "Native inclusive upper bound: Max Item Score (console); zero is forwarded unchanged", + "in": "query", + "minimum": 0, + "name": "grading_score__lte", + "type": "integer" + }, + { + "description": "Native inclusive lower bound: Min Price (console); zero is forwarded unchanged", + "in": "query", + "minimum": 0, + "name": "price__gte", + "type": "integer" + }, + { + "description": "Native inclusive upper bound: Max Price (console); zero is forwarded unchanged", + "in": "query", + "minimum": 0, + "name": "price__lte", + "type": "integer" + }, + { + "description": "Native inclusive lower bound: Min Positions (console); zero is forwarded unchanged", + "in": "query", + "minimum": 0, + "name": "number_of_positions__gte", + "type": "integer" + }, + { + "description": "Native inclusive upper bound: Max Positions (console); zero is forwarded unchanged", + "in": "query", + "minimum": 0, + "name": "number_of_positions__lte", + "type": "integer" + }, + { + "description": "Native inclusive lower bound: Min PlayStyles (console); zero is forwarded unchanged", + "in": "query", + "minimum": 0, + "name": "playstyles_count__gte", + "type": "integer" + }, + { + "description": "Native inclusive upper bound: Max PlayStyles (console); zero is forwarded unchanged", + "in": "query", + "minimum": 0, + "name": "playstyles_count__lte", + "type": "integer" + }, + { + "description": "Native inclusive lower bound: Min PlayStyles+ (console); zero is forwarded unchanged", + "in": "query", + "minimum": 0, + "name": "playstyles_plus_count__gte", + "type": "integer" + }, + { + "description": "Native inclusive upper bound: Max PlayStyles+ (console); zero is forwarded unchanged", + "in": "query", + "minimum": 0, + "name": "playstyles_plus_count__lte", + "type": "integer" + }, + { + "description": "Native inclusive lower bound: Min Roles+ (console); zero is forwarded unchanged", + "in": "query", + "minimum": 0, + "name": "role_plus_count__gte", + "type": "integer" + }, + { + "description": "Native inclusive upper bound: Max Roles+ (console); zero is forwarded unchanged", + "in": "query", + "minimum": 0, + "name": "role_plus_count__lte", + "type": "integer" + }, + { + "description": "Native inclusive lower bound: Min Roles++ (console); zero is forwarded unchanged", + "in": "query", + "minimum": 0, + "name": "role_plus_plus_count__gte", + "type": "integer" + }, + { + "description": "Native inclusive upper bound: Max Roles++ (console); zero is forwarded unchanged", + "in": "query", + "minimum": 0, + "name": "role_plus_plus_count__lte", + "type": "integer" + }, + { + "description": "Native inclusive lower bound: Min Price (pc); zero is forwarded unchanged", + "in": "query", + "minimum": 0, + "name": "pc_price__gte", + "type": "integer" + }, + { + "description": "Native inclusive upper bound: Max Price (pc); zero is forwarded unchanged", + "in": "query", + "minimum": 0, + "name": "pc_price__lte", + "type": "integer" + }, + { + "default": 1, + "description": "Native one-based page", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "default": 3, + "description": "API result count bound, 1 to 100", + "in": "query", + "name": "count", + "type": "integer" + }, + { + "description": "Single native signed key from player-sorts discovery; omit for native GG-rating order", + "enum": [ + "-attribute_acceleration", + "-attribute_aggression", + "-attribute_agility", + "-attribute_balance", + "-attribute_ball_control", + "-attribute_composure", + "-attribute_crossing", + "-attribute_curve", + "-attribute_defensive_awareness", + "-attribute_dribbling", + "-attribute_finishing", + "-attribute_fk_accuracy", + "-attribute_gk_diving", + "-attribute_gk_handling", + "-attribute_gk_kicking", + "-attribute_gk_positioning", + "-attribute_gk_reflexes", + "-attribute_heading_accuracy", + "-attribute_interceptions", + "-attribute_jumping", + "-attribute_long_passing", + "-attribute_long_shots", + "-attribute_penalties", + "-attribute_positioning", + "-attribute_reactions", + "-attribute_short_passing", + "-attribute_shot_power", + "-attribute_sliding_tackle", + "-attribute_sprint_speed", + "-attribute_stamina", + "-attribute_standing_tackle", + "-attribute_strength", + "-attribute_vision", + "-attribute_volleys", + "-created_at", + "-current_price", + "-face_defending", + "-face_dribbling", + "-face_pace", + "-face_passing", + "-face_physicality", + "-face_shooting", + "-gg_rating", + "-gk_face_diving", + "-gk_face_handling", + "-gk_face_kicking", + "-gk_face_positioning", + "-gk_face_reflexes", + "-gk_face_speed", + "-grading_score", + "-number_of_all_playstyles", + "-number_of_playstyles", + "-number_of_playstyles_plus", + "-overall", + "-pc_current_price", + "-pos_0_gg_rating", + "-pos_10_gg_rating", + "-pos_12_gg_rating", + "-pos_14_gg_rating", + "-pos_16_gg_rating", + "-pos_18_gg_rating", + "-pos_23_gg_rating", + "-pos_25_gg_rating", + "-pos_27_gg_rating", + "-pos_3_gg_rating", + "-pos_5_gg_rating", + "-pos_7_gg_rating", + "-role_10_gg_rating", + "-role_11_gg_rating", + "-role_12_gg_rating", + "-role_13_gg_rating", + "-role_14_gg_rating", + "-role_15_gg_rating", + "-role_16_gg_rating", + "-role_17_gg_rating", + "-role_1_gg_rating", + "-role_23_gg_rating", + "-role_24_gg_rating", + "-role_25_gg_rating", + "-role_26_gg_rating", + "-role_27_gg_rating", + "-role_2_gg_rating", + "-role_37_gg_rating", + "-role_38_gg_rating", + "-role_39_gg_rating", + "-role_3_gg_rating", + "-role_40_gg_rating", + "-role_45_gg_rating", + "-role_46_gg_rating", + "-role_47_gg_rating", + "-role_48_gg_rating", + "-role_49_gg_rating", + "-role_4_gg_rating", + "-role_50_gg_rating", + "-role_51_gg_rating", + "-role_52_gg_rating", + "-role_53_gg_rating", + "-role_54_gg_rating", + "-role_55_gg_rating", + "-role_56_gg_rating", + "-role_57_gg_rating", + "-role_58_gg_rating", + "-role_5_gg_rating", + "-role_63_gg_rating", + "-role_64_gg_rating", + "-role_65_gg_rating", + "-role_66_gg_rating", + "-role_6_gg_rating", + "-role_71_gg_rating", + "-role_72_gg_rating", + "-role_74_gg_rating", + "-role_75_gg_rating", + "-role_7_gg_rating", + "-role_8_gg_rating", + "-role_9_gg_rating", + "-total_face_stats", + "-total_igs", + "attribute_acceleration", + "attribute_aggression", + "attribute_agility", + "attribute_balance", + "attribute_ball_control", + "attribute_composure", + "attribute_crossing", + "attribute_curve", + "attribute_defensive_awareness", + "attribute_dribbling", + "attribute_finishing", + "attribute_fk_accuracy", + "attribute_gk_diving", + "attribute_gk_handling", + "attribute_gk_kicking", + "attribute_gk_positioning", + "attribute_gk_reflexes", + "attribute_heading_accuracy", + "attribute_interceptions", + "attribute_jumping", + "attribute_long_passing", + "attribute_long_shots", + "attribute_penalties", + "attribute_positioning", + "attribute_reactions", + "attribute_short_passing", + "attribute_shot_power", + "attribute_sliding_tackle", + "attribute_sprint_speed", + "attribute_stamina", + "attribute_standing_tackle", + "attribute_strength", + "attribute_vision", + "attribute_volleys", + "created_at", + "current_price", + "face_defending", + "face_dribbling", + "face_pace", + "face_passing", + "face_physicality", + "face_shooting", + "gg_rating", + "gk_face_diving", + "gk_face_handling", + "gk_face_kicking", + "gk_face_positioning", + "gk_face_reflexes", + "gk_face_speed", + "grading_score", + "number_of_all_playstyles", + "number_of_playstyles", + "number_of_playstyles_plus", + "overall", + "pc_current_price", + "pos_0_gg_rating", + "pos_10_gg_rating", + "pos_12_gg_rating", + "pos_14_gg_rating", + "pos_16_gg_rating", + "pos_18_gg_rating", + "pos_23_gg_rating", + "pos_25_gg_rating", + "pos_27_gg_rating", + "pos_3_gg_rating", + "pos_5_gg_rating", + "pos_7_gg_rating", + "role_10_gg_rating", + "role_11_gg_rating", + "role_12_gg_rating", + "role_13_gg_rating", + "role_14_gg_rating", + "role_15_gg_rating", + "role_16_gg_rating", + "role_17_gg_rating", + "role_1_gg_rating", + "role_23_gg_rating", + "role_24_gg_rating", + "role_25_gg_rating", + "role_26_gg_rating", + "role_27_gg_rating", + "role_2_gg_rating", + "role_37_gg_rating", + "role_38_gg_rating", + "role_39_gg_rating", + "role_3_gg_rating", + "role_40_gg_rating", + "role_45_gg_rating", + "role_46_gg_rating", + "role_47_gg_rating", + "role_48_gg_rating", + "role_49_gg_rating", + "role_4_gg_rating", + "role_50_gg_rating", + "role_51_gg_rating", + "role_52_gg_rating", + "role_53_gg_rating", + "role_54_gg_rating", + "role_55_gg_rating", + "role_56_gg_rating", + "role_57_gg_rating", + "role_58_gg_rating", + "role_5_gg_rating", + "role_63_gg_rating", + "role_64_gg_rating", + "role_65_gg_rating", + "role_66_gg_rating", + "role_6_gg_rating", + "role_71_gg_rating", + "role_72_gg_rating", + "role_74_gg_rating", + "role_75_gg_rating", + "role_7_gg_rating", + "role_8_gg_rating", + "role_9_gg_rating", + "total_face_stats", + "total_igs" + ], + "in": "query", + "name": "sorts", "type": "string" } ], @@ -355425,7 +429123,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookLiveScoresResponseDoc" + "$ref": "#/definitions/futgg.ResponseDoc" } }, "400": { @@ -355446,63 +429144,66 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook live scores and stats for many events", + "summary": "Search native FC27 player cards", "tags": [ - "FanDuel" + "FUT.GG" ] } }, - "/fanduel/sportsbook/market-prices": { + "/futgg/fc27/price-index": { "get": { - "consumes": [ + "description": "Returns native delta-coded EA item identifiers and sparse price/token metadata, preserving source wire fields and zero/absent values. The index is not a historical-price series.", + "operationId": "futgg-fc27-price-index", + "produces": [ "application/json" ], - "description": "Refreshes the current prices of up to 70 markets by market id, using the price feed the Sportsbook itself polls. Returns each market's status and every selection's American, decimal and fractional odds in the order requested; market ids the Sportsbook returns nothing for are listed in `missing`. Get market ids from the event and page routes (`markets[].market_id`).", - "operationId": "fanduel-sportsbook-market-prices", - "parameters": [ - { - "description": "Market id such as `734.191539418`; repeat the parameter or comma-separate, 1 to 70 ids", - "in": "query", - "name": "market_id", - "required": true, - "type": "string", - "x-example": "734.168824006" + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/futgg.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": "nj", - "description": "U.S. market to query (prices and offered markets differ by state); default nj", + "ApiKeyAuth": [] + } + ], + "summary": "Get FC27 published card-price index", + "tags": [ + "FUT.GG" + ] + } + }, + "/futgg/fc27/prices": { + "get": { + "description": "Supports all four native Console/PC standard/dynamic publications. Dynamic columns are combined with the same publication's shared index exactly as the website does; every price/status column is checked against its item index. Returns native compact fields, not computed price estimates or history.", + "operationId": "futgg-fc27-prices", + "parameters": [ + { + "default": "player-prices-ps5-dyn", + "description": "Native publication key; ps5 is the website's Console dataset", "enum": [ - "ar", - "az", - "co", - "ct", - "dc", - "ia", - "il", - "in", - "ks", - "ky", - "la", - "ma", - "md", - "mi", - "mo", - "mr", - "nc", - "nj", - "ny", - "oh", - "on", - "pa", - "pr", - "tn", - "va", - "vt", - "wv", - "wy" + "player-prices-ps5", + "player-prices-pc", + "player-prices-ps5-dyn", + "player-prices-pc-dyn" ], "in": "query", - "name": "state", + "name": "dataset", "type": "string" } ], @@ -355513,7 +429214,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookMarketPricesResponseDoc" + "$ref": "#/definitions/futgg.ResponseDoc" } }, "400": { @@ -355522,11 +429223,37 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get FC27 published card prices", + "tags": [ + "FUT.GG" + ] + } + }, + "/futgg/fc27/sbc/categories": { + "get": { + "description": "Returns every native SBC category with its slug, label, database ID, EA category ID and source active-set count. Slugs are accepted by the SBC listing; virtual Expired/Expiring Soon tabs use listing flags instead. Counts are source catalog values and are not recalculated for each listing filter.", + "operationId": "futgg-fc27-sbc-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/futgg.ResponseDoc" + } }, "503": { "description": "Service Unavailable", @@ -355540,134 +429267,65 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook current market prices", + "summary": "Discover FC27 SBC categories", "tags": [ - "FanDuel" + "FUT.GG" ] } }, - "/fanduel/sportsbook/parlays": { + "/futgg/fc27/sbc/sets": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the Sportsbook's Parlay Hub: popular parlays, same-game parlays (SGP) and SGP+ combinations, each with the number of tickets placed on it (`total_bets`), combined odds, the legs and an editor's narrative when there is one. `view` picks the list: `popular` (the homepage list), `all` (every card, filterable by `type`), `next-to-start` (grouped by the events starting soonest) or `event` (popular cards for one event). The Sportsbook returns at most 50 cards per request. `filters` lists the competition groups its own filter bar offers. A request returns at most 50 cards (`card_cap`); `truncated` is true when it filled that cap, and narrower `type`, sport, competition or decimal-odds filters reveal the cards beyond it.", - "operationId": "fanduel-sportsbook-parlays", + "description": "Reads native category/search/expiry filters and pagination. Both expiry flags true preserve the source's expired-only precedence. no_pagination=true returns the native data-only envelope and ignores pagination controls; no metadata is synthesized. Native page_size<=0 resolves its default. Preserves rewards, challenge metadata, published prices and null/false/zero values; excludes biography, account/render flags and unreviewed editorial data.", + "operationId": "futgg-fc27-sbc-sets", "parameters": [ { - "default": "popular", - "description": "Which list: `popular` (default), `all`, `next-to-start` or `event`", - "enum": [ - "popular", - "all", - "next-to-start", - "event" - ], - "in": "query", - "name": "view", - "type": "string" - }, - { - "description": "Event id, required for `view=event` and rejected otherwise", + "description": "One-based native page; default1; ignored in full-list mode", "in": "query", - "name": "event_id", + "minimum": 1, + "name": "page", "type": "integer" }, { - "description": "Card type filter for `view=all` (repeat or comma-separate): `PARLAY` (multi-event parlay), `SGP` (same-game parlay), `SGP_PLUS` (SGP combined across games)", - "enum": [ - "PARLAY", - "SGP", - "SGP_PLUS" - ], + "description": "Native integer page size; nonpositive uses source default24; ignored in full-list mode", "in": "query", - "name": "type", - "type": "string" + "name": "page_size", + "type": "integer" }, { - "description": "Sport filter for `view=all` and `view=next-to-start`: 6423 American Football; 1 Soccer; 7522 Basketball; 3 Golf; 7511 Baseball; 7524 Ice Hockey; 2 Tennis; 26420387 Mixed Martial Arts; 2593174 Table Tennis; 3503 Darts; 6 Boxing; 5 Rugby Union; 4 Cricket; 8 Motor Sport; 1477 Rugby League; 6422 Snooker; 468328 Handball; 28608997 Lacrosse; 998917 Volleyball, 4726642 Surfing, 10 Special Bets and 2378961 Politics; availability differs by market (Volleyball is also offered in NJ, PA, CO and AZ), and a sport a market does not offer returns 404", + "description": "Native category from discovery", "enum": [ - "6423", - "1", - "7522", - "3", - "7511", - "7524", - "2", - "26420387", - "2593174", - "3503", - "6", - "5", - "4", - "8", - "1477", - "6422", - "468328", - "28608997", - "998917", - "4726642", - "10", - "2378961" + "players", + "upgrades", + "challenges", + "foundations" ], "in": "query", - "name": "event_type_id", + "name": "category_slug", "type": "string" }, { - "description": "Competition filter for `view=all` and `view=next-to-start` (repeat or comma-separate, up to 20 ids); the groups in the response `filters` list valid ids", + "description": "Native SBC search text, up to1024bytes", "in": "query", - "name": "competition_id", + "name": "search", "type": "string" }, { - "description": "Minimum combined decimal odds (1.01 to 10000) for `view=all` and `view=next-to-start`", + "description": "Native expired-only selector; explicit false preserved", "in": "query", - "name": "min_odds", - "type": "number" + "name": "expired_only", + "type": "boolean" }, { - "description": "Maximum combined decimal odds (1.01 to 10000) for `view=all` and `view=next-to-start`", + "description": "Native expiring-soon selector; expired_only=true takes source precedence", "in": "query", - "name": "max_odds", - "type": "number" + "name": "expiring_soon", + "type": "boolean" }, { - "default": "nj", - "description": "Market to query; default nj", - "enum": [ - "ar", - "az", - "co", - "ct", - "dc", - "ia", - "il", - "in", - "ks", - "ky", - "la", - "ma", - "md", - "mi", - "mo", - "mr", - "nc", - "nj", - "ny", - "oh", - "on", - "pa", - "pr", - "tn", - "va", - "vt", - "wv", - "wy" - ], + "description": "Native full-list mode; source returns data without page fields", "in": "query", - "name": "state", - "type": "string" + "name": "no_pagination", + "type": "boolean" } ], "produces": [ @@ -355677,7 +429335,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookParlaysResponseDoc" + "$ref": "#/definitions/futgg.ResponseDoc" } }, "400": { @@ -355686,8 +429344,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -355704,39 +429362,23 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook Parlay Hub", + "summary": "Browse FC27 squad building challenges", "tags": [ - "FanDuel" + "FUT.GG" ] } }, - "/fanduel/sportsbook/player": { + "/futgg/fc27/sbc/sets/by-challenge/{id}": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a player's overview page: name, position, team, the season, and recent news with the player's updates. NFL players also carry `season_totals` and a `game_log`; NBA players carry `stats` (career and per-season lines) and `projections`. Available for NFL and NBA players; an unknown player id, or a player newly added to a roster whose page is still empty, returns 404.", - "operationId": "fanduel-sportsbook-player", + "description": "Uses a native EA challenge identity from challengeEaIds or challenges[].eaId and returns its parent set. This resource does not return a standalone challenge DTO. Database IDs and EA set IDs are different namespaces. No biography, account access or solver execution.", + "operationId": "futgg-fc27-sbc-set-by-challenge", "parameters": [ { - "description": "League: `nfl`, `nba`", - "enum": [ - "nfl", - "nba" - ], - "in": "query", - "name": "league", - "required": true, - "type": "string", - "x-example": "nfl" - }, - { - "description": "Player slug ending in its id, such as `josh-allen-53775`; take it from the `players` route (`players[].slug`) or `team/roster` (`players[].slug`)", - "in": "query", - "name": "player", + "description": "Positive EA challenge ID from a native set", + "in": "path", + "name": "id", "required": true, - "type": "string", - "x-example": "josh-allen-53775" + "type": "integer" } ], "produces": [ @@ -355746,7 +429388,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookPlayerResponseDoc" + "$ref": "#/definitions/futgg.ResponseDoc" } }, "400": { @@ -355773,52 +429415,22 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook player overview", + "summary": "Read FC27 parent SBC set by EA challenge ID", "tags": [ - "FanDuel" + "FUT.GG" ] } }, - "/fanduel/sportsbook/player/news": { + "/futgg/fc27/sbc/sets/by-ea/{id}": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a page of a player's news (title, summary, author, time, link). Without `cursor` it is the player page's own first 15 articles; while `has_more` is true, pass `next_cursor` as `cursor` to continue, 1 to 50 articles at a time (default 25). Available for NFL and NBA players; a player with no coverage returns an empty list.", - "operationId": "fanduel-sportsbook-player-news", + "description": "Uses the native EA set identity from listing eaId, not the set database id or an EA challenge ID. Returns the same public set/challenge/reward metadata as the slug resource. No account, biography or solver execution.", + "operationId": "futgg-fc27-sbc-set-by-ea", "parameters": [ { - "description": "League: `nfl`, `nba`", - "enum": [ - "nfl", - "nba" - ], - "in": "query", - "name": "league", - "required": true, - "type": "string", - "x-example": "nfl" - }, - { - "description": "Player slug ending in its id, such as `josh-allen-53775`; take it from the `players` route (`players[].slug`) or `team/roster` (`players[].slug`)", - "in": "query", - "name": "player", + "description": "Positive EA set ID from set eaId", + "in": "path", + "name": "id", "required": true, - "type": "string", - "x-example": "josh-allen-53775" - }, - { - "description": "Continue from the previous response's `next_cursor`; omit for the first page", - "in": "query", - "name": "cursor", - "type": "string" - }, - { - "description": "Articles per page after the first, 1 to 50; default 25. Only valid together with `cursor`", - "in": "query", - "maximum": 50, - "minimum": 1, - "name": "limit", "type": "integer" } ], @@ -355829,7 +429441,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookPlayerNewsResponseDoc" + "$ref": "#/definitions/futgg.ResponseDoc" } }, "400": { @@ -355856,39 +429468,23 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook player news", + "summary": "Read FC27 SBC set by EA set ID", "tags": [ - "FanDuel" + "FUT.GG" ] } }, - "/fanduel/sportsbook/player/props": { + "/futgg/fc27/sbc/sets/{slug}": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a player's prop markets for upcoming games, with event, market and selection ids and the current odds of each selection. A player with no listed props returns an empty `events` list. Available for NFL and NBA players.", - "operationId": "fanduel-sportsbook-player-props", + "description": "Reads a source-provided FC27 set slug and returns native set, challenge, condition/reward metadata and published prices. Preserves source IDs, order, repeatability and nullable values. Excludes biography, account/render flags and unreviewed editorial blobs. Does not execute a solver or access a private club.", + "operationId": "futgg-fc27-sbc-set", "parameters": [ { - "description": "League: `nfl`, `nba`", - "enum": [ - "nfl", - "nba" - ], - "in": "query", - "name": "league", - "required": true, - "type": "string", - "x-example": "nfl" - }, - { - "description": "Player slug ending in its id, such as `josh-allen-53775`; take it from the `players` route (`players[].slug`) or `team/roster` (`players[].slug`)", - "in": "query", - "name": "player", + "description": "Native FC27 slug from listing, for example27-125-riccardo-calafiori", + "in": "path", + "name": "slug", "required": true, - "type": "string", - "x-example": "josh-allen-53775" + "type": "string" } ], "produces": [ @@ -355898,7 +429494,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookPlayerPropsResponseDoc" + "$ref": "#/definitions/futgg.ResponseDoc" } }, "400": { @@ -355925,39 +429521,56 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook player props", + "summary": "Read FC27 SBC set detail", "tags": [ - "FanDuel" + "FUT.GG" ] } }, - "/fanduel/sportsbook/player/stats": { + "/futgg/fc27/season-pass": { "get": { - "consumes": [ + "description": "Returns current native campaign identity, dates, nullable premium currency metadata and every reward-tier row. Free and premium rows can share a level number and remain separate in source order. isPremium describes a reward tier, not user entitlement. No purchase, account access, reward aggregation, biography or media fetch.", + "operationId": "futgg-fc27-season-pass", + "produces": [ "application/json" ], - "description": "Returns a player's career and per-season statistics. The groups differ by sport (NFL: career rows plus regular-season and post-season weeks; NBA: regular-season and playoff careers plus preseason, regular-season and play-in seasons) and are passed through with snake_case keys. Available for NFL and NBA players.", - "operationId": "fanduel-sportsbook-player-stats", - "parameters": [ - { - "description": "League: `nfl`, `nba`", - "enum": [ - "nfl", - "nba" - ], - "in": "query", - "name": "league", - "required": true, - "type": "string", - "x-example": "nfl" + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/futgg.ResponseDoc" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Player slug ending in its id, such as `josh-allen-53775`; take it from the `players` route (`players[].slug`) or `team/roster` (`players[].slug`)", + "ApiKeyAuth": [] + } + ], + "summary": "Read FC27 Season Pass reward metadata", + "tags": [ + "FUT.GG" + ] + } + }, + "/gamerant/article": { + "get": { + "description": "Returns one Game Rant article by its `https://gamerant.com//` `url`. The response has the title, description, publish and update times, section, authors, lead image and body `paragraphs`. Section hubs, video pages and author pages are rejected as invalid parameters; `paywalled` is set only if the page declares the article not free.", + "operationId": "gamerant-article", + "parameters": [ + { + "description": "Canonical Game Rant article URL", "in": "query", - "name": "player", + "name": "url", "required": true, "type": "string", - "x-example": "josh-allen-53775" + "x-example": "https://gamerant.com/xbox-console-update-patch-notes-september-2026/" } ], "produces": [ @@ -355967,7 +429580,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookPlayerStatsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -355982,6 +429595,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -355994,52 +429613,24 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook player statistics", + "summary": "Get Game Rant article content", "tags": [ - "FanDuel" + "Game Rant" ] } }, - "/fanduel/sportsbook/players": { + "/gamerant/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches the players that have Sportsbook player pages: about 2,400 in the NFL and 480 in the NBA. Each entry has the `slug` that the player routes take, the numeric `player_id` and a `name` spelled from the slug (without punctuation or accents; `team/roster` has the exact spelling). `q` matches every word against the slug, results are in slug order, and `total` counts all matches so `limit` and `offset` can page through them.", - "operationId": "fanduel-sportsbook-players", + "description": "Returns a Game Rant author profile for a `url` of the form `https://gamerant.com/author//`. The response has the name, title, image, biography, `social_links` (type and URL) and about 20 latest articles. Paginated author URLs are rejected, so older articles are not available.", + "operationId": "gamerant-author", "parameters": [ { - "description": "League: `nfl`, `nba`", - "enum": [ - "nfl", - "nba" - ], + "description": "Canonical Game Rant author URL", "in": "query", - "name": "league", + "name": "url", "required": true, "type": "string", - "x-example": "nfl" - }, - { - "description": "Words to find in the player name, such as `josh allen`; omit to list everyone", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Players per page, 1 to 200; default 50", - "in": "query", - "maximum": 200, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "description": "Players to skip; default 0", - "in": "query", - "minimum": 0, - "name": "offset", - "type": "integer" + "x-example": "https://gamerant.com/author/dominik-bosnjak/" } ], "produces": [ @@ -356049,7 +429640,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookPlayersResponseDoc" + "$ref": "#/definitions/publicnews.gamerantAuthorResponseDoc" } }, "400": { @@ -356076,110 +429667,204 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook player directory", + "summary": "Get a Game Rant author profile", "tags": [ - "FanDuel" + "Game Rant" ] } }, - "/fanduel/sportsbook/promotions": { + "/gamerant/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the public promotions the Sportsbook shows to an anonymous visitor on its homepage, a league page or a sport page, with each promotion's tags, offer link, end time and artwork, and the carousel placement that orders them. Offers differ by `state` and by page. `tags` is the census of promotion tags on the page and is always unfiltered, so valid `tag` values are discoverable.", - "operationId": "fanduel-sportsbook-promotions", + "description": "Returns fresh headlines from one public Game Rant RSS section. Items from video sections have type video and are not readable through the article endpoint.", + "operationId": "gamerant-headlines", "parameters": [ { - "default": "home", - "description": "Which page's promotions: `home` (default), `league` or `sport`", - "enum": [ - "home", - "league", - "sport" - ], - "in": "query", - "name": "context", - "type": "string" - }, - { - "description": "League page id, required for `context=league` (for example `nfl`)", - "in": "query", - "name": "custom_page_id", - "type": "string" - }, - { - "description": "Sport id, required for `context=sport`: 6423 American Football; 1 Soccer; 7522 Basketball; 3 Golf; 7511 Baseball; 7524 Ice Hockey; 2 Tennis; 26420387 Mixed Martial Arts; 2593174 Table Tennis; 3503 Darts; 6 Boxing; 5 Rugby Union; 4 Cricket; 8 Motor Sport; 1477 Rugby League; 6422 Snooker; 468328 Handball; 28608997 Lacrosse; 998917 Volleyball, 4726642 Surfing, 10 Special Bets and 2378961 Politics; availability differs by market (Volleyball is also offered in NJ, PA, CO and AZ), and a sport a market does not offer returns 404", - "enum": [ - "6423", - "1", - "7522", - "3", - "7511", - "7524", - "2", - "26420387", - "2593174", - "3503", - "6", - "5", - "4", - "8", - "1477", - "6422", - "468328", - "28608997", - "998917", - "4726642", - "10", - "2378961" - ], - "in": "query", - "name": "event_type_id", - "type": "string" - }, - { - "description": "Keep only promotions with one of these tags (repeat the parameter or comma-separate), for example `nfl` or `basketball`; valid tags are listed in the response `tags`", - "in": "query", - "name": "tag", - "type": "string" - }, - { - "default": "nj", - "description": "Market to query (offers differ by state); default nj", + "description": "Game Rant RSS section slug", "enum": [ - "ar", - "az", - "co", - "ct", - "dc", - "ia", - "il", - "in", - "ks", - "ky", - "la", - "ma", - "md", - "mi", - "mo", - "mr", - "nc", - "nj", - "ny", - "oh", - "on", - "pa", - "pr", - "tn", - "va", - "vt", - "wv", - "wy" + "games", + "gaming", + "pc-news", + "steam-news", + "core-news", + "xbox-series-xs-news", + "xbox-news", + "xbox-one-news", + "platforms", + "lists", + "strategy-guide", + "anime", + "anime-news", + "nintendo-news", + "legend-of-zelda-news", + "originals", + "features", + "gaming-features", + "exclusives", + "ps5-news", + "bethesda-news", + "playstation-news", + "pokemon-news", + "animal-crossing-news", + "activision-news", + "call-of-duty-news", + "grand-theft-auto-news", + "epic-games-store-news", + "nintendo-switch-news", + "fortnite-news", + "one-piece-news", + "anime-editorial", + "diablo-news", + "pokemon-go-news", + "mobile-news", + "ios-news", + "android-news", + "tabletop", + "dc-news", + "mortal-kombat-news", + "latest-videos", + "game-rant-series", + "gamerant-gaming-videos-original", + "videos", + "disney-news", + "movies-tv", + "movies-tv-news", + "movies-tv-lists", + "movies-tv-features", + "giveaways-contests", + "stardew-valley-articles", + "grand-theft-auto-5-news", + "cd-projekt-red-news", + "halo-news", + "persona-news", + "death-stranding-news", + "dragon-ball-z-news", + "genshin-impact-guides", + "lord-of-the-rings-news", + "world-of-warcraft-news", + "streaming", + "the-witcher-franchise-news", + "final-fantasy-news", + "resident-evil-news", + "final-fantasy-7-news", + "ps4-news", + "call-of-duty-warzone-news", + "the-elder-scrolls-news", + "destiny-news", + "fallout-news", + "red-dead-redemption-news", + "game-reviews", + "final-fantasy-14-news", + "the-last-of-us-news", + "nintendo-3ds-news", + "fallout-76-news", + "marvel-news", + "featured", + "editorial", + "ps3-news", + "xbox-360-news", + "video-interviews", + "assassins-creed-news", + "pause-for-thought", + "star-wars-news", + "pokemon-scarlet-violet-news", + "theme-parks", + "bloodborne-news", + "review-roundup", + "apex-legends-news", + "dungeons-and-dragons-news", + "kingdom-hearts-franchise-news", + "dragon-age-news", + "overwatch-news", + "overwatch-2-news", + "pokemon-legends-z-a-news", + "pokemon-videos", + "minecraft-news", + "game-previews", + "elden-ring-news", + "amazon-news", + "doom-news", + "no-mans-sky-news", + "metroid-franchise-news", + "league-of-legends-news", + "borderlands-news", + "super-smash-bros-news", + "valheim-news", + "spider-man-news", + "wii-news", + "pokemon-go-guides", + "the-witcher-3-news", + "red-dead-redemption-2-news", + "battlefield-franchise-news", + "gta-online-news", + "cod-modern-warfare-news", + "video-lists", + "playstation-videos", + "xbox-videos", + "dark-souls-news", + "video-originals", + "genshin-impact-news", + "elden-ring-videos", + "mass-effect-news", + "rainbow-six-siege-news", + "rainbow-six-franchise-news", + "god-of-war-news", + "persona-5-news", + "the-last-of-us-2-news", + "explainer", + "stardew-valley-guides", + "halo-infinite-news", + "hardware-reviews", + "movie-review", + "dead-by-daylight-news", + "far-cry-franchise-news", + "zelda-breath-of-the-wild-news", + "pokemon-go-reading", + "365-days-later", + "dead-space-news", + "acnh-news", + "game-rant-advance", + "nintendo-switch-reviews", + "pokemon-scarlet-and-violet-features", + "red-dead-online-news", + "game-deals", + "steam-videos", + "psn-news", + "complete-guides-walkthroughs", + "horizon-forbidden-west-news", + "tv-review", + "game-trailers", + "assassins-creed-videos", + "wii-u-news", + "pc-videos", + "pubg-news", + "buyers-guides", + "cyberpunk-videos", + "baldurs-gate-3-videos", + "pokemon-legends-z-a-guides", + "rantable", + "pokemon-scarlet-and-violet-guides", + "fallout-videos", + "fallout-4-videos", + "game-rant-mailbag", + "video-news", + "star-wars-outlaws-videos", + "hype-train-videos", + "borderlands-3-news", + "bite-size-lore", + "open-world-videos", + "gamers-said", + "red-dead-redemption-2-videos", + "stardew-valley-videos", + "have-you-heard-of", + "creators-on-game-rant", + "movies-tv-trailers", + "indie-videos" ], "in": "query", - "name": "state", - "type": "string" + "name": "section", + "required": true, + "type": "string", + "x-example": "games" } ], "produces": [ @@ -356189,7 +429874,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookPromotionsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -356216,53 +429901,16 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook promotions", + "summary": "Get Game Rant section headlines", "tags": [ - "FanDuel" + "Game Rant" ] } }, - "/fanduel/sportsbook/schedule": { + "/gamerant/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a league's games with teams, start time, status, venue, broadcast network and scores. The NFL is selected by `week` (default: the current week; the response lists every week id in `weeks`) or by `date` and `end_date`; college football by `date` and `end_date` (default: today, UTC); the NBA and MLB by `date` (default: today, UTC). Available for the NFL, NBA, MLB and college football.", - "operationId": "fanduel-sportsbook-schedule", - "parameters": [ - { - "description": "League: `nfl`, `nba`, `mlb`, `college-football`", - "enum": [ - "nfl", - "nba", - "mlb", - "college-football" - ], - "in": "query", - "name": "league", - "required": true, - "type": "string", - "x-example": "nfl" - }, - { - "description": "NFL only: week id from the response `weeks` list, such as `7`; default is the current week. Cannot be combined with `date`", - "in": "query", - "name": "week", - "type": "string" - }, - { - "description": "First day as `YYYY-MM-DD`. Required form for the NBA and MLB (default today, UTC); optional for the NFL and college football", - "in": "query", - "name": "date", - "type": "string" - }, - { - "description": "NFL and college football only: last day as `YYYY-MM-DD`, at most 31 days after `date`; default is `date` alone", - "in": "query", - "name": "end_date", - "type": "string" - } - ], + "description": "Lists the latest Game Rant stories, about 10 items. Each item has its title, canonical URL, summary, publish time, author names (co-authors are joined with a comma) and lead image. Takes no parameters.", + "operationId": "gamerant-news", "produces": [ "application/json" ], @@ -356270,17 +429918,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookLeagueScheduleResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -356297,115 +429939,56 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook league schedule", + "summary": "Get Game Rant top stories", "tags": [ - "FanDuel" + "Game Rant" ] } }, - "/fanduel/sportsbook/search": { + "/gamerant/sections": { "get": { - "consumes": [ + "description": "Lists the 178 Game Rant section slugs accepted by `gamerant-headlines`, covering platforms (`pc-news`, `ps5-news`, `nintendo-switch-news`), franchises (`fortnite-news`, `pokemon-news`, `fallout-news`), `anime` and `game-reviews`. Each entry has the `slug`, `name` and feed `url`.", + "operationId": "gamerant-sections", + "produces": [ "application/json" ], - "description": "Searches the Sportsbook's events and competitions by text (team, player-event or league names such as `lakers` or `nfl`). Events come back in the search index's relevance order with the sport, competition and start time; competitions come back with a match count. Use the returned `event_id` and `competition_id` with the event and competition routes.", - "operationId": "fanduel-sportsbook-search", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Game Rant RSS sections", + "tags": [ + "Game Rant" + ] + } + }, + "/gamesradar/article": { + "get": { + "description": "Returns one GamesRadar+ article by its canonical `gamesradar.com` `url`. The response has the title, description, publish and update times, section, authors, lead image and body `paragraphs`. Game and hardware review pages work too, taking the author from the page byline when no article-level author exists.", + "operationId": "gamesradar-article", "parameters": [ { - "description": "Search text, 2 to 100 characters", + "description": "Canonical GamesRadar+ article URL", "in": "query", - "name": "q", + "name": "url", "required": true, "type": "string", - "x-example": "nfl" - }, - { - "default": "all", - "description": "What to search: `all` (events and competitions), `event` or `competition`; default all", - "enum": [ - "all", - "event", - "competition" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "description": "Limit results to one sport: 6423 American Football; 1 Soccer; 7522 Basketball; 3 Golf; 7511 Baseball; 7524 Ice Hockey; 2 Tennis; 26420387 Mixed Martial Arts; 2593174 Table Tennis; 3503 Darts; 6 Boxing; 5 Rugby Union; 4 Cricket; 8 Motor Sport; 1477 Rugby League; 6422 Snooker; 468328 Handball; 28608997 Lacrosse; 998917 Volleyball, 4726642 Surfing, 10 Special Bets and 2378961 Politics; availability differs by market (Volleyball is also offered in NJ, PA, CO and AZ), and a sport a market does not offer returns 404", - "enum": [ - "6423", - "1", - "7522", - "3", - "7511", - "7524", - "2", - "26420387", - "2593174", - "3503", - "6", - "5", - "4", - "8", - "1477", - "6422", - "468328", - "28608997", - "998917", - "4726642", - "10", - "2378961" - ], - "in": "query", - "name": "event_type_id", - "type": "string" - }, - { - "default": 20, - "description": "Maximum events returned, 1 to 50; default 20", - "in": "query", - "maximum": 50, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "default": "nj", - "description": "U.S. market to query (prices and offered markets differ by state); default nj", - "enum": [ - "ar", - "az", - "co", - "ct", - "dc", - "ia", - "il", - "in", - "ks", - "ky", - "la", - "ma", - "md", - "mi", - "mo", - "mr", - "nc", - "nj", - "ny", - "oh", - "on", - "pa", - "pr", - "tn", - "va", - "vt", - "wv", - "wy" - ], - "in": "query", - "name": "state", - "type": "string" + "x-example": "https://www.gamesradar.com/games/silent-hill/silent-hill-townfall-review/" } ], "produces": [ @@ -356415,7 +429998,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookSearchResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -356424,8 +430007,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -356442,60 +430025,37 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook search", + "summary": "Get GamesRadar+ article content", "tags": [ - "FanDuel" + "GamesRadar+" ] } }, - "/fanduel/sportsbook/search/tabs": { + "/gamesradar/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the Sportsbook's own search results, grouped into sport tabs (for example `Basketball`, `Ice Hockey`, `American Football`) and 20 per page. `tabs` lists the sports that have matches and the selected one is returned in `tab`; pass a tab title as `tab` to read another sport. A query without `tab` also lists competition `pills` for the selected sport, and passing `pill` with `tab` keeps only that competition. `found` counts the matches in the selected tab (and pill), `total_results` the matches across the whole query, and `next_start_index` is the `start_index` of the next page while more remain. Events and competitions are returned without markets; use the `search` route for markets.", - "operationId": "fanduel-sportsbook-search-tabs", + "description": "Returns a GamesRadar+ author profile, found by `slug` (for example `rosalie-newcombe`) or by `url`; send exactly one. `page` (1-based, default 1) overrides any page in the URL. The response has the name, job title, biography, `social_links`, one page of articles, `page` and `has_next_page`.", + "operationId": "gamesradar-author", "parameters": [ { - "description": "Search text, 3 to 100 characters, without `<` or `>`", + "description": "Author slug, e.g. rosalie-newcombe", "in": "query", - "name": "q", - "required": true, + "name": "slug", "type": "string", - "x-example": "nba" - }, - { - "description": "Sport tab title from a previous response's `tabs[].title`, such as `Basketball`; default is the tab with the most relevant matches", - "in": "query", - "name": "tab", - "type": "string" + "x-example": "rosalie-newcombe" }, { - "description": "Competition title from the response `pills[].title`, such as `NBA`; needs `tab`", + "description": "Canonical gamesradar.com/author/ URL, optionally with a /page/ segment; alternative to slug", "in": "query", - "name": "pill", - "type": "string" + "name": "url", + "type": "string", + "x-example": "https://www.gamesradar.com/author/rosalie-newcombe/" }, { - "default": 0, - "description": "Index of the first result, 0 to 9999, in steps of 20; default 0", + "default": 1, + "description": "1-based page number; overrides any page number in url", "in": "query", - "maximum": 9999, - "minimum": 0, - "name": "start_index", + "name": "page", "type": "integer" - }, - { - "description": "IANA time zone for result times, such as `America/New_York`; default `UTC`", - "in": "query", - "name": "timezone", - "type": "string" - }, - { - "description": "Market code, including `on` for Ontario; default `nj`", - "in": "query", - "name": "state", - "type": "string" } ], "produces": [ @@ -356505,7 +430065,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookSearchTabsResponseDoc" + "$ref": "#/definitions/publicnews.gamesradarAuthorResponseDoc" } }, "400": { @@ -356532,113 +430092,47 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook grouped search", + "summary": "Get a GamesRadar+ author profile", "tags": [ - "FanDuel" + "GamesRadar+" ] } }, - "/fanduel/sportsbook/sport": { + "/gamesradar/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns every league, event and market the Sportsbook shows for one sport, with current odds, grouped by the sport page's tabs. Get `event_type_id` from the sports route.", - "operationId": "fanduel-sportsbook-sport", + "description": "Returns the latest GamesRadar+ headlines for one section. `section` is required and takes one of 21 slugs such as `games`, `games-reviews`, `hardware-news`, `entertainment-tv`, `lego` or `dungeons-and-dragons`. Each item has its title, URL and `type`, plus publication time, author and image when the section page shows them.", + "operationId": "gamesradar-headlines", "parameters": [ { - "description": "Sport id: 6423 American Football; 1 Soccer; 7522 Basketball; 3 Golf; 7511 Baseball; 7524 Ice Hockey; 2 Tennis; 26420387 Mixed Martial Arts; 2593174 Table Tennis; 3503 Darts; 6 Boxing; 5 Rugby Union; 4 Cricket; 8 Motor Sport; 1477 Rugby League; 6422 Snooker; 468328 Handball; 28608997 Lacrosse; 998917 Volleyball, 4726642 Surfing, 10 Special Bets and 2378961 Politics; availability differs by market (Volleyball is also offered in NJ, PA, CO and AZ), and a sport a market does not offer returns 404", + "description": "GamesRadar+ section slug", "enum": [ - "6423", - "1", - "7522", - "3", - "7511", - "7524", - "2", - "26420387", - "2593174", - "3503", - "6", - "5", - "4", - "8", - "1477", - "6422", - "468328", - "28608997", - "998917", - "4726642", - "10", - "2378961" + "games", + "platforms", + "entertainment", + "comics", + "hardware", + "toys-collectibles", + "tabletop-gaming", + "buying-guides", + "lego", + "dungeons-and-dragons", + "videos", + "games-news", + "games-features", + "games-reviews", + "games-guides", + "hardware-news", + "hardware-reviews", + "hardware-features", + "entertainment-tv", + "entertainment-movies", + "entertainment-streaming" ], "in": "query", - "name": "event_type_id", + "name": "section", "required": true, "type": "string", - "x-example": "7522" - }, - { - "default": "nj", - "description": "U.S. market to query (prices and offered markets differ by state); default nj", - "enum": [ - "ar", - "az", - "co", - "ct", - "dc", - "ia", - "il", - "in", - "ks", - "ky", - "la", - "ma", - "md", - "mi", - "mo", - "mr", - "nc", - "nj", - "ny", - "oh", - "on", - "pa", - "pr", - "tn", - "va", - "vt", - "wv", - "wy" - ], - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "Show only one tab of this page: a tab slug from the response `tabs[].slug` (the lowercase-hyphenated tab title, such as `games` or `player-props`). An unknown slug returns 400 listing the page's tabs", - "in": "query", - "name": "tab", - "type": "string" - }, - { - "description": "Keep only events of this competition id (from the response `competitions`)", - "in": "query", - "name": "competition_id", - "type": "integer" - }, - { - "description": "Keep only these market types (repeat the parameter or comma-separate), for example `MONEY_LINE`. Valid values are listed in the response `market_types`; unmatched types return no markets", - "in": "query", - "name": "market_type", - "type": "string" - }, - { - "default": false, - "description": "Return events without their markets (a cheap event listing); `market_types` is still returned", - "in": "query", - "name": "exclude_markets", - "type": "boolean" + "x-example": "games" } ], "produces": [ @@ -356648,7 +430142,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookPageResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -356657,18 +430151,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -356681,58 +430163,16 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook sport page odds", + "summary": "Get GamesRadar+ section headlines", "tags": [ - "FanDuel" + "GamesRadar+" ] } }, - "/fanduel/sportsbook/sports": { + "/gamesradar/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the Sportsbook's navigation: the sports with their `event_type_id` (the set a market offers changes: on 2026-10-24 NJ and CO listed 19, PA and AZ 18, NY only 12, and Ontario 22 on 2026-10-23), the featured league pages (each with the `custom_page_id` accepted by the league route), quick links, teaser-bet competitions, and the 28 supported markets (27 U.S. states and Ontario, `state`) the other routes can query. Use it to discover valid `event_type_id` and `custom_page_id` values.", - "operationId": "fanduel-sportsbook-sports", - "parameters": [ - { - "default": "nj", - "description": "U.S. market to query (prices and offered markets differ by state); default nj", - "enum": [ - "ar", - "az", - "co", - "ct", - "dc", - "ia", - "il", - "in", - "ks", - "ky", - "la", - "ma", - "md", - "mi", - "mo", - "mr", - "nc", - "nj", - "ny", - "oh", - "on", - "pa", - "pr", - "tn", - "va", - "vt", - "wv", - "wy" - ], - "in": "query", - "name": "state", - "type": "string" - } - ], + "description": "Returns the current GamesRadar+ top stories. Each item has its title, URL, summary, publication time, author and image. Takes no parameters; use `gamesradar-headlines` for a single games, hardware or entertainment section.", + "operationId": "gamesradar-news", "produces": [ "application/json" ], @@ -356740,7 +430180,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookSportsResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -356752,7 +430192,33 @@ "503": { "description": "Service Unavailable", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get GamesRadar+ top stories", + "tags": [ + "GamesRadar+" + ] + } + }, + "/gamesradar/sections": { + "get": { + "description": "Lists the 21 GamesRadar+ sections accepted by `gamesradar-headlines`, from top-level hubs like `games`, `hardware` and `entertainment` to sub-sections such as `games-guides`, `hardware-reviews` and `entertainment-streaming`. Each entry has the `slug`, `name` and `url`.", + "operationId": "gamesradar-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -356761,33 +430227,24 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook sports and league pages", + "summary": "Get GamesRadar+ sections", "tags": [ - "FanDuel" + "GamesRadar+" ] } }, - "/fanduel/sportsbook/standings": { + "/gbnews/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a league's standings, one row per team with the team's identity and the record groups the Sportsbook shows for that league: conference, division and league rankings with home, road and streak records (NFL and NBA), games back, last ten and home and away records (MLB), or conference record, points and AP ranking (college football). Available for the NFL, NBA, MLB and college football.", - "operationId": "fanduel-sportsbook-standings", + "description": "Returns one GB News story by its `gbnews.com` `url` (news, opinion or sport; query strings are ignored). The response has the title, description, publish and update times, section label, authors, lead image and body `paragraphs`, without captions or widgets. `paywalled` is never set. Video, audio, author and hub pages return an error.", + "operationId": "gbnews-article", "parameters": [ { - "description": "League: `nfl`, `nba`, `mlb`, `college-football`", - "enum": [ - "nfl", - "nba", - "mlb", - "college-football" - ], + "description": "Canonical GB News story URL", "in": "query", - "name": "league", + "name": "url", "required": true, "type": "string", - "x-example": "nfl" + "x-example": "https://www.gbnews.com/news/north-yorkshire-gaza-barracks-fire-catterick-garrison" } ], "produces": [ @@ -356797,7 +430254,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookStandingsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -356824,25 +430281,30 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook league standings", + "summary": "Get GB News article content", "tags": [ - "FanDuel" + "GB News" ] } }, - "/fanduel/sportsbook/stats": { + "/gbnews/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists every event the Sportsbook currently publishes stats for: the share of bets and of money wagered on each side of the spread, and each team's last five results. Filter to one competition with `competition_id`.", - "operationId": "fanduel-sportsbook-stats", + "description": "Returns one GB News author's public profile: name, role, biography, image, and their most recent stories (up to 24; older stories are not available).", + "operationId": "gbnews-author", "parameters": [ { - "description": "Keep only this competition id (for example 12282733 for the NFL)", + "description": "Author slug, e.g. peter-stevens-a", "in": "query", - "name": "competition_id", - "type": "integer" + "name": "slug", + "type": "string", + "x-example": "peter-stevens-a" + }, + { + "description": "Canonical gbnews.com/authors/ URL; alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.gbnews.com/authors/peter-stevens-a" } ], "produces": [ @@ -356852,7 +430314,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookStatsListResponseDoc" + "$ref": "#/definitions/publicnews.gbnewsAuthorResponseDoc" } }, "400": { @@ -356861,8 +430323,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -356879,42 +430341,416 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook betting splits and form for upcoming events", + "summary": "Get a GB News author profile", "tags": [ - "FanDuel" + "GB News" ] } }, - "/fanduel/sportsbook/team/depth-chart": { + "/gbnews/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a team's depth chart (rank, position, college, age and draft details) and its statistical leaders. Available for the NFL only; other leagues return 400 listing their pages.", - "operationId": "fanduel-sportsbook-team-depth-chart", + "description": "Returns the latest GB News headlines for one section or topic. `section` is required and takes a site path such as `news`, `news/uk/london`, `news/world/ukraine`, `news/us` or `news/migrant-crisis`; the accepted values are listed by `gbnews-sections`. Each item has its title, URL, summary, publication time, author and image.", + "operationId": "gbnews-headlines", "parameters": [ { - "description": "League: `nfl`, `nba`, `mlb`, `college-football`, `college-basketball`", + "description": "GB News section or topic path", "enum": [ - "nfl", - "nba", - "mlb", - "college-football", - "college-basketball" + "news", + "news/animals", + "news/army", + "news/benefit-fraudsters", + "news/best-of-britain", + "news/christianity", + "news/crime", + "news/defence", + "news/education", + "news/energy", + "news/environment", + "news/falkland-islands", + "news/fire", + "news/free-speech", + "news/fuel-crisis", + "news/gibraltar", + "news/grooming-gangs", + "news/lgbt", + "news/m25", + "news/madeleine-mccann", + "news/migrant-crisis", + "news/national-lottery", + "news/neighbour-rows", + "news/oil", + "news/police", + "news/protests", + "news/social-media", + "news/taxpayer-waste", + "news/tesco", + "news/trains", + "news/transport", + "news/uk", + "news/uk/birmingham", + "news/uk/bristol", + "news/uk/east-midlands", + "news/uk/east-of-england", + "news/uk/edinburgh", + "news/uk/england", + "news/uk/essex", + "news/uk/glasgow", + "news/uk/kent", + "news/uk/liverpool", + "news/uk/london", + "news/uk/manchester", + "news/uk/north-east", + "news/uk/north-west", + "news/uk/northern-ireland", + "news/uk/scotland", + "news/uk/south-east", + "news/uk/south-west", + "news/uk/wales", + "news/uk/west-midlands", + "news/uk/yorkshire", + "news/us", + "news/us/elon-musk", + "news/us/melania-trump", + "news/us/new-york", + "news/video-news", + "news/woke-madness", + "news/world", + "news/world/australia", + "news/world/canada", + "news/world/china", + "news/world/emmanuel-macron", + "news/world/europe", + "news/world/france", + "news/world/germany", + "news/world/greece", + "news/world/iran", + "news/world/ireland", + "news/world/isis", + "news/world/israel", + "news/world/italy", + "news/world/nato", + "news/world/poland", + "news/world/portugal", + "news/world/russia", + "news/world/spain", + "news/world/terrorism", + "news/world/ukraine", + "news/world/vladimir-putin", + "news/world/volodymyr-zelenskyy", + "news/world/war", + "editorial", + "politics", + "politics/boris-johnson", + "politics/brexit", + "politics/ed-davey", + "politics/elections", + "politics/green-party", + "politics/uk", + "politics/uk/andy-burnham", + "politics/uk/angela-rayner", + "politics/uk/conservative-party", + "politics/uk/government", + "politics/uk/home-office", + "politics/uk/house-of-commons", + "politics/uk/john-healey", + "politics/uk/keir-starmer", + "politics/uk/kemi-badenoch", + "politics/uk/labour-party", + "politics/uk/liberal-democrats", + "politics/uk/nicola-sturgeon", + "politics/uk/pmqs", + "politics/uk/rachel-reeves", + "politics/uk/reform-uk", + "politics/uk/robert-jenrick", + "politics/uk/sadiq-khan", + "politics/uk/snp", + "politics/uk/suella-braverman", + "politics/uk/tony-blair", + "politics/us", + "politics/us/donald-trump", + "politics/us/jd-vance", + "politics/us/joe-biden", + "politics/world", + "politics/world/eu", + "us", + "sport", + "sport/boxing", + "sport/boxing/anthony-joshua", + "sport/boxing/tyson-fury", + "sport/cricket", + "sport/cricket/england-cricket", + "sport/darts", + "sport/darts/luke-littler", + "sport/f1", + "sport/f1/christian-horner", + "sport/f1/george-russell", + "sport/f1/lando-norris", + "sport/f1/lewis-hamilton", + "sport/f1/max-verstappen", + "sport/f1/michael-schumacher", + "sport/football", + "sport/football/arsenal", + "sport/football/champions-league", + "sport/football/chelsea", + "sport/football/cristiano-ronaldo", + "sport/football/efl", + "sport/football/england-football", + "sport/football/liverpool", + "sport/football/manchester-city", + "sport/football/manchester-united", + "sport/football/premier-league", + "sport/football/scotland-football", + "sport/football/tottenham-hotspur", + "sport/football/world-cup", + "sport/golf", + "sport/golf/rory-mcilroy", + "sport/golf/tiger-woods", + "sport/horse-racing", + "sport/nfl", + "sport/olympics", + "sport/other-sport", + "sport/rugby", + "sport/snooker", + "sport/snooker/ronnie-osullivan", + "sport/tennis", + "sport/tennis/carlos-alcaraz", + "sport/tennis/emma-raducanu", + "sport/tennis/novak-djokovic", + "sport/us-sport", + "opinion", + "celebrity", + "celebrity/22-kids-and-counting", + "celebrity/bbc", + "celebrity/big-brother", + "celebrity/britains-got-talent", + "celebrity/brooklyn-beckham", + "celebrity/channel-4", + "celebrity/channel-5", + "celebrity/clarksons-farm", + "celebrity/coronation-street", + "celebrity/david-beckham", + "celebrity/disney", + "celebrity/dragons-den", + "celebrity/eurovision", + "celebrity/film", + "celebrity/gary-lineker", + "celebrity/gogglebox", + "celebrity/harry-potter", + "celebrity/im-a-celebrity-get-me-out-of-here", + "celebrity/itv", + "celebrity/james-bond", + "celebrity/jk-rowling", + "celebrity/katie-price", + "celebrity/music", + "celebrity/netflix", + "celebrity/ricky-gervais", + "celebrity/rod-stewart", + "celebrity/strictly-come-dancing", + "celebrity/the-grand-tour", + "celebrity/this-morning", + "celebrity/tom-jones", + "celebrity/tv", + "royal", + "royal/buckingham-palace", + "royal/camilla", + "royal/coronation", + "royal/duchess-of-edinburgh", + "royal/earl-charles-spencer", + "royal/edoardo-mapelli-mozzi", + "royal/invictus-games", + "royal/james-middleton", + "royal/kate-middleton", + "royal/king-charles", + "royal/king-frederik", + "royal/lady-louise", + "royal/lilibet", + "royal/meghan-markle", + "royal/mike-tindall", + "royal/pippa-middleton", + "royal/prince-albert", + "royal/prince-andrew", + "royal/prince-archie", + "royal/prince-edward", + "royal/prince-george", + "royal/prince-harry", + "royal/prince-louis", + "royal/prince-philip", + "royal/prince-william", + "royal/princess-anne", + "royal/princess-beatrice", + "royal/princess-charlene", + "royal/princess-charlotte", + "royal/princess-diana", + "royal/princess-eugenie", + "royal/queen-elizabeth", + "royal/sarah-ferguson", + "royal/zara-tindall", + "money", + "money/amazon", + "money/bank-branch-closures", + "money/bank-of-england", + "money/barclays", + "money/cost-of-living", + "money/coventry-building-society", + "money/dwp", + "money/economy", + "money/energy-bills", + "money/high-street", + "money/hmrc", + "money/inflation", + "money/inheritance-tax", + "money/interest-rates", + "money/isa", + "money/jobs", + "money/lloyds-bank", + "money/martin-lewis", + "money/mortgage", + "money/national-insurance", + "money/nationwide-building-society", + "money/net-zero", + "money/nsi", + "money/octopus-energy", + "money/pension-credit", + "money/pensions", + "money/pip", + "money/poundland", + "money/premium-bonds", + "money/royal-mail", + "money/savings", + "money/skipton-building-society", + "money/state-pension", + "money/store-closures", + "money/student-loans", + "money/tax", + "money/universal-credit", + "money/yorkshire-building-society", + "lifestyle", + "lifestyle/aldi", + "lifestyle/asda", + "lifestyle/beauty", + "lifestyle/cars", + "lifestyle/cars/bmw", + "lifestyle/cars/byd", + "lifestyle/cars/car-finance", + "lifestyle/cars/car-insurance", + "lifestyle/cars/car-tax", + "lifestyle/cars/chery", + "lifestyle/cars/classic-cars", + "lifestyle/cars/diesel", + "lifestyle/cars/driving-laws", + "lifestyle/cars/driving-licences", + "lifestyle/cars/dvla", + "lifestyle/cars/dvsa", + "lifestyle/cars/electric-bikes", + "lifestyle/cars/electric-vehicles", + "lifestyle/cars/ford", + "lifestyle/cars/highway-code", + "lifestyle/cars/hydrogen-vehicles", + "lifestyle/cars/hyundai", + "lifestyle/cars/jaguar", + "lifestyle/cars/kia", + "lifestyle/cars/land-rover", + "lifestyle/cars/mercedes", + "lifestyle/cars/mini", + "lifestyle/cars/mot", + "lifestyle/cars/nissan", + "lifestyle/cars/parking", + "lifestyle/cars/petrol", + "lifestyle/cars/renault", + "lifestyle/cars/roads", + "lifestyle/cars/self-driving", + "lifestyle/cars/tesla", + "lifestyle/cars/toyota", + "lifestyle/cars/ulez", + "lifestyle/cars/vauxhall", + "lifestyle/cars/volkswagen", + "lifestyle/cars/volvo", + "lifestyle/diet", + "lifestyle/food", + "lifestyle/hair", + "lifestyle/how-to-look-younger", + "lifestyle/lidl", + "lifestyle/marks-spencer", + "lifestyle/morrisons", + "lifestyle/property", + "lifestyle/sainsburys", + "lifestyle/skin-care", + "lifestyle/style", + "lifestyle/tesco", + "travel", + "travel/british-airways", + "travel/cruise", + "travel/deals", + "travel/egypt", + "travel/france", + "travel/greece", + "travel/italy", + "travel/jet2", + "travel/spain", + "travel/staycation", + "travel/tui", + "travel/turkey", + "travel/wizz-air", + "health", + "health/cancer", + "health/covid", + "health/dementia", + "health/diabetes", + "health/nhs", + "health/sleep", + "health/vaccine", + "health/world-health-organisation", + "science", + "science/archaeology", + "science/space", + "tech", + "tech/ai", + "tech/android", + "tech/apple", + "tech/broadband", + "tech/chatgpt", + "tech/deals", + "tech/dyson", + "tech/ee", + "tech/fire-tv", + "tech/freely", + "tech/freeview", + "tech/gemini", + "tech/google", + "tech/kindle", + "tech/malware", + "tech/meta", + "tech/microsoft", + "tech/nintendo", + "tech/oura", + "tech/playstation", + "tech/prime-video", + "tech/privacy", + "tech/reviews", + "tech/roku", + "tech/samsung", + "tech/sky-tv", + "tech/streaming", + "tech/virgin", + "tech/vpn", + "tech/whatsapp", + "tech/windows", + "weather", + "weather/flood", + "weather/heatwave", + "weather/rain", + "weather/storms", + "traffic-travel", + "reflections", + "newsfromus", + "watch", + "watch/originals" ], "in": "query", - "name": "league", - "required": true, - "type": "string", - "x-example": "nfl" - }, - { - "description": "Team slug from the `teams` route (`groups[].teams[].slug`), such as `arizona-cardinals`", - "in": "query", - "name": "team", + "name": "section", "required": true, "type": "string", - "x-example": "arizona-cardinals" + "x-example": "news" } ], "produces": [ @@ -356924,7 +430760,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookDepthChartResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -356933,12 +430769,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -356951,58 +430781,16 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook team depth chart", + "summary": "Get GB News section headlines", "tags": [ - "FanDuel" + "GB News" ] } }, - "/fanduel/sportsbook/team/news": { + "/gbnews/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a page of a team's news (title, summary, author, time, link) and player updates. Without `cursor` it is the team page's own first 15 articles. While `has_more` is true, pass the response's `next_cursor` as `cursor` to continue through the archive, 1 to 50 articles at a time (default 25); an NFL team has more than 1,000. Teams in MLB and the college leagues currently have no news, which returns an empty list.", - "operationId": "fanduel-sportsbook-team-news", - "parameters": [ - { - "description": "League: `nfl`, `nba`, `mlb`, `college-football`, `college-basketball`", - "enum": [ - "nfl", - "nba", - "mlb", - "college-football", - "college-basketball" - ], - "in": "query", - "name": "league", - "required": true, - "type": "string", - "x-example": "nfl" - }, - { - "description": "Team slug from the `teams` route (`groups[].teams[].slug`), such as `arizona-cardinals`", - "in": "query", - "name": "team", - "required": true, - "type": "string", - "x-example": "arizona-cardinals" - }, - { - "description": "Continue from the previous response's `next_cursor`; omit for the first page", - "in": "query", - "name": "cursor", - "type": "string" - }, - { - "description": "Articles per page after the first, 1 to 50; default 25. Only valid together with `cursor`", - "in": "query", - "maximum": 50, - "minimum": 1, - "name": "limit", - "type": "integer" - } - ], + "description": "Returns the latest 30 GB News top stories. Each item has a title, canonical URL, summary (the story's first paragraph), publication time, author name and lead image, when GB News provides them. Takes no parameters.", + "operationId": "gbnews-news", "produces": [ "application/json" ], @@ -357010,17 +430798,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookTeamNewsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -357037,44 +430819,16 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook team news", + "summary": "Get GB News top stories", "tags": [ - "FanDuel" + "GB News" ] } }, - "/fanduel/sportsbook/team/odds": { + "/gbnews/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a team's odds page: futures prices for its league's championship (Super Bowl, NBA Finals, World Series, national championship), its upcoming games with money line, spread and total for both sides, and player props with selection ids and odds. Available for every league; props appear for the NFL and NBA only.", - "operationId": "fanduel-sportsbook-team-odds", - "parameters": [ - { - "description": "League: `nfl`, `nba`, `mlb`, `college-football`, `college-basketball`", - "enum": [ - "nfl", - "nba", - "mlb", - "college-football", - "college-basketball" - ], - "in": "query", - "name": "league", - "required": true, - "type": "string", - "x-example": "nfl" - }, - { - "description": "Team slug from the `teams` route (`groups[].teams[].slug`), such as `arizona-cardinals`", - "in": "query", - "name": "team", - "required": true, - "type": "string", - "x-example": "arizona-cardinals" - } - ], + "description": "Lists the 390 GB News sections and topics accepted by `gbnews-headlines`. Each entry has a `slug` that is the path on the site, such as `news/uk/scotland` or `news/world/china`, a display `name` and the feed `url`. Takes no parameters.", + "operationId": "gbnews-sections", "produces": [ "application/json" ], @@ -357082,17 +430836,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookTeamOddsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -357109,61 +430857,89 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook team odds page", + "summary": "Get GB News sections", "tags": [ - "FanDuel" + "GB News" ] } }, - "/fanduel/sportsbook/team/roster": { + "/gdelt/context": { "get": { "consumes": [ "application/json" ], - "description": "Returns a team's roster with each player's roster `status` (for example `ACT`, `PRA`, `IR`, `IRD`, `UFA`, `TWO-WAY`) and `injury_status` (observed `Q` and `O`; empty when healthy). `statuses`, `injury_statuses` and `positions` count the whole roster so valid filter values are discoverable. Available for the NFL and NBA only.", - "operationId": "fanduel-sportsbook-team-roster", + "description": "Searches the last 72 hours of GDELT-monitored news for sentences where every term of the required `query` appears together. Returns up to `maxrecords` rows (default 75, max 200), each with the matching sentence, its surrounding context, title, URL, domain, language and an `is_quote` flag. Filter with `domain`, `language`, `is_quote`, `timespan` or `from` and `to`, and order with `sort`.", + "operationId": "gdelt-context", "parameters": [ { - "description": "League: `nfl`, `nba`, `mlb`, `college-football`, `college-basketball`", - "enum": [ - "nfl", - "nba", - "mlb", - "college-football", - "college-basketball" - ], + "description": "GDELT query string. All terms must co-occur in the same sentence. Supports quoted phrases, (a OR b), domain:example.com.", "in": "query", - "name": "league", + "name": "query", "required": true, "type": "string", - "x-example": "nfl" + "x-example": "climate change" }, { - "description": "Team slug from the `teams` route (`groups[].teams[].slug`), such as `arizona-cardinals`", + "description": "Convenience domain filter, appended to the query as domain:VALUE.", "in": "query", - "name": "team", - "required": true, + "name": "domain", "type": "string", - "x-example": "arizona-cardinals" + "x-example": "bbc.com" }, { - "default": false, - "description": "Return only players with an injury designation; default false", + "description": "Source-language filter (GDELT's searchlang parameter). Space-segmented languages only (excludes CJK and similar).", "in": "query", - "name": "injured_only", + "name": "language", + "type": "string", + "x-example": "english" + }, + { + "description": "Only return sentences GDELT identified as a quotation.", + "in": "query", + "name": "is_quote", "type": "boolean" }, { - "description": "Keep only this roster status code, such as `IR`; valid codes are listed in the response `statuses`", + "description": "Relative time window ending now, e.g. 30min, 6h, 3d. Cannot be combined with from/to. GDELT caps this endpoint's window at 72 hours.", "in": "query", - "name": "status", - "type": "string" + "name": "timespan", + "type": "string", + "x-example": "24h" }, { - "description": "Keep only this position code, such as `QB`; valid codes are listed in the response `positions`", + "description": "Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan; GDELT caps this endpoint's window at 72 hours.", "in": "query", - "name": "position", + "name": "from", + "type": "string", + "x-example": "2026-08-19" + }, + { + "description": "End of an absolute time window. Same formats as from.", + "in": "query", + "name": "to", + "type": "string", + "x-example": "2026-08-20" + }, + { + "default": "relevance", + "description": "Result order.", + "enum": [ + "relevance", + "datedesc", + "dateasc" + ], + "in": "query", + "name": "sort", "type": "string" + }, + { + "default": 75, + "description": "Rows to return. GDELT's own hard cap is 200 for this endpoint (lower than gdelt-search's 250); there is no pagination cursor beyond it.", + "in": "query", + "maximum": 200, + "minimum": 1, + "name": "maxrecords", + "type": "integer" } ], "produces": [ @@ -357173,7 +430949,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookRosterResponseDoc" + "$ref": "#/definitions/gdelt.contextResponseDoc" } }, "400": { @@ -357182,8 +430958,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -357200,42 +430976,92 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook team roster and injuries", + "summary": "Sentence-level co-occurrence search across recent GDELT coverage", "tags": [ - "FanDuel" + "GDELT" ] } }, - "/fanduel/sportsbook/team/schedule": { + "/gdelt/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a team's schedule by season block (preseason, regular season) with opponent, venue, home/away, result and opponent record, plus its previous and next game. Available for the NFL and NBA only.", - "operationId": "fanduel-sportsbook-team-schedule", + "description": "Searches global news coverage indexed by GDELT for the required `query`, which accepts quoted phrases, `(a OR b)`, `theme:`, `toneN, near20:\\", "in": "query", - "name": "league", + "name": "query", "required": true, "type": "string", - "x-example": "nba" + "x-example": "climate change" }, { - "description": "Team slug from the `teams` route (`groups[].teams[].slug`), such as `arizona-cardinals`", + "description": "Convenience source-country filter, appended to the query as sourcecountry:VALUE. Accepts a GDELT-recognized country name (no spaces) or 2-letter FIPS code.", "in": "query", - "name": "team", - "required": true, + "name": "country", "type": "string", - "x-example": "atlanta-hawks" + "x-example": "unitedkingdom" + }, + { + "description": "Convenience source-language filter, appended to the query as sourcelang:VALUE. Accepts a GDELT-recognized language name or 3-letter code.", + "in": "query", + "name": "language", + "type": "string", + "x-example": "english" + }, + { + "description": "Convenience domain filter, appended to the query as domain:VALUE.", + "in": "query", + "name": "domain", + "type": "string", + "x-example": "bbc.com" + }, + { + "description": "Relative time window ending now, e.g. 1h, 2d, 1w, 3m. Cannot be combined with from/to.", + "in": "query", + "name": "timespan", + "type": "string", + "x-example": "1w" + }, + { + "description": "Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan; GDELT only indexes roughly the last 3 months.", + "in": "query", + "name": "from", + "type": "string", + "x-example": "2026-08-01" + }, + { + "description": "End of an absolute time window. Same formats as from.", + "in": "query", + "name": "to", + "type": "string", + "x-example": "2026-08-19" + }, + { + "default": "relevance", + "description": "Result order.", + "enum": [ + "relevance", + "datedesc", + "dateasc", + "tonedesc", + "toneasc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": 75, + "description": "Rows to return. GDELT's own hard cap is 250; there is no pagination cursor beyond it.", + "in": "query", + "maximum": 250, + "minimum": 1, + "name": "maxrecords", + "type": "integer" } ], "produces": [ @@ -357245,7 +431071,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookScheduleResponseDoc" + "$ref": "#/definitions/gdelt.searchResponseDoc" } }, "400": { @@ -357254,8 +431080,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -357272,42 +431098,92 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook team schedule and results", + "summary": "Search global news coverage indexed by GDELT", "tags": [ - "FanDuel" + "GDELT" ] } }, - "/fanduel/sportsbook/team/stats": { + "/gdelt/timeline": { "get": { "consumes": [ "application/json" ], - "description": "Returns a team's season statistics. The groups differ by sport (scoring, offense, defense and special teams for the NFL; totals and averages for the NBA), so `stats` is an object with snake_case keys. Available for the NFL and NBA only.", - "operationId": "fanduel-sportsbook-team-stats", + "description": "Returns how coverage of the required GDELT `query` changes over time, as dated points. `metric` picks `volume` (the default, share of monitored articles), `volume_raw` (matching article count), `tone` (average sentiment), or `lang` and `country` for one series per language or country. Filter with `country`, `language`, `domain`, `timespan` or `from` and `to`; `smooth` runs 0 to 30 (default 0).", + "operationId": "gdelt-timeline", "parameters": [ { - "description": "League: `nfl`, `nba`, `mlb`, `college-football`, `college-basketball`", + "description": "GDELT query string. Same syntax as gdelt-search's query.", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "climate change" + }, + { + "default": "volume", + "description": "Timeline metric. lang and country return one series per language/country instead of one aggregate series.", "enum": [ - "nfl", - "nba", - "mlb", - "college-football", - "college-basketball" + "volume", + "volume_raw", + "tone", + "lang", + "country" ], "in": "query", - "name": "league", - "required": true, + "name": "metric", + "type": "string" + }, + { + "description": "Convenience source-country filter, appended to the query as sourcecountry:VALUE.", + "in": "query", + "name": "country", "type": "string", - "x-example": "nfl" + "x-example": "unitedkingdom" }, { - "description": "Team slug from the `teams` route (`groups[].teams[].slug`), such as `arizona-cardinals`", + "description": "Convenience source-language filter, appended to the query as sourcelang:VALUE.", "in": "query", - "name": "team", - "required": true, + "name": "language", "type": "string", - "x-example": "arizona-cardinals" + "x-example": "english" + }, + { + "description": "Convenience domain filter, appended to the query as domain:VALUE.", + "in": "query", + "name": "domain", + "type": "string", + "x-example": "bbc.com" + }, + { + "description": "Relative time window ending now, e.g. 1h, 2d, 1w, 3m. Cannot be combined with from/to.", + "in": "query", + "name": "timespan", + "type": "string", + "x-example": "1w" + }, + { + "description": "Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan.", + "in": "query", + "name": "from", + "type": "string", + "x-example": "2026-08-01" + }, + { + "description": "End of an absolute time window. Same formats as from.", + "in": "query", + "name": "to", + "type": "string", + "x-example": "2026-08-19" + }, + { + "default": 0, + "description": "Moving-window smoothing applied to the timeline, in steps. 0 disables smoothing.", + "in": "query", + "maximum": 30, + "minimum": 0, + "name": "smooth", + "type": "integer" } ], "produces": [ @@ -357317,7 +431193,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookTeamStatsResponseDoc" + "$ref": "#/definitions/gdelt.timelineResponseDoc" } }, "400": { @@ -357326,8 +431202,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -357344,33 +431220,69 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook team statistics", + "summary": "Coverage volume or tone over time for a GDELT query", "tags": [ - "FanDuel" + "GDELT" ] } }, - "/fanduel/sportsbook/teams": { + "/gdelt/tonechart": { "get": { "consumes": [ "application/json" ], - "description": "Lists a league's teams grouped by conference or division, each with its season record against the spread, on the money line and on the over/under, its colors, head coach where published, and its next game. `sections` lists the team pages the league has (all six for the NFL; odds and news only for MLB and the college leagues). Team `slug` values feed the other team routes.", - "operationId": "fanduel-sportsbook-teams", + "description": "Returns a sentiment histogram for the required GDELT `query`: one bin per integer tone value, each with an article `count` and a short sample of top articles with title and URL. Filter with `country`, `language`, `domain`, and `timespan` or `from` and `to`. A tone value with no matching articles is absent rather than returned with a zero count.", + "operationId": "gdelt-tonechart", "parameters": [ { - "default": "nfl", - "description": "League: `nfl` (default), `nba`, `mlb`, `college-football`, `college-basketball`", - "enum": [ - "nfl", - "nba", - "mlb", - "college-football", - "college-basketball" - ], + "description": "GDELT query string. Same syntax as gdelt-search's query.", "in": "query", - "name": "league", - "type": "string" + "name": "query", + "required": true, + "type": "string", + "x-example": "climate change" + }, + { + "description": "Convenience source-country filter, appended to the query as sourcecountry:VALUE.", + "in": "query", + "name": "country", + "type": "string", + "x-example": "unitedkingdom" + }, + { + "description": "Convenience source-language filter, appended to the query as sourcelang:VALUE.", + "in": "query", + "name": "language", + "type": "string", + "x-example": "english" + }, + { + "description": "Convenience domain filter, appended to the query as domain:VALUE.", + "in": "query", + "name": "domain", + "type": "string", + "x-example": "bbc.com" + }, + { + "description": "Relative time window ending now, e.g. 1h, 2d, 1w, 3m. Cannot be combined with from/to.", + "in": "query", + "name": "timespan", + "type": "string", + "x-example": "1w" + }, + { + "description": "Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan.", + "in": "query", + "name": "from", + "type": "string", + "x-example": "2026-08-01" + }, + { + "description": "End of an absolute time window. Same formats as from.", + "in": "query", + "name": "to", + "type": "string", + "x-example": "2026-08-19" } ], "produces": [ @@ -357380,7 +431292,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookTeamsResponseDoc" + "$ref": "#/definitions/gdelt.toneChartResponseDoc" } }, "400": { @@ -357389,6 +431301,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -357401,26 +431319,28 @@ "ApiKeyAuth": [] } ], - "summary": "FanDuel Sportsbook team index", + "summary": "Sentiment histogram for a GDELT query", "tags": [ - "FanDuel" + "GDELT" ] } }, - "/fanduel/sportsbook/trending": { + "/gdelt/tv-concept-entities": { "get": { "consumes": [ "application/json" ], - "description": "Returns the terms the Sportsbook's search box shows as trending (about ten players, teams and clubs). With `enriched=true` each term is resolved to the event it points at, with the competition, event name and id, entity type (for example `PLAYER`), image and the time the entry expires. The list was identical in every market tested, so the route takes no state.", - "operationId": "fanduel-sportsbook-trending", + "description": "Lists the Google Knowledge Graph concept entities GDELT recognises in US television captioning, most frequent first, up to `limit` entries (default 100, max 10000). Each has a display `label` and a `mid` code. Pass the `mid`, not the label, as `concept` to the GDELT TV search and chart endpoints. The list does not depend on any query.", + "operationId": "gdelt-tv-concept-entities", "parameters": [ { - "default": false, - "description": "Resolve each term to its event, competition and entity; default false", + "default": 100, + "description": "Maximum entries to return, most-frequent first.", "in": "query", - "name": "enriched", - "type": "boolean" + "maximum": 10000, + "minimum": 1, + "name": "limit", + "type": "integer" } ], "produces": [ @@ -357430,7 +431350,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fanduel.sportsbookTrendingResponseDoc" + "$ref": "#/definitions/gdelt.tvCapNlpEntityDetailsResponseDoc" } }, "400": { @@ -357439,47 +431359,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "FanDuel Sportsbook trending searches", - "tags": [ - "FanDuel" - ] - } - }, - "/farfetch/categories": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns every department's top-level category directory (name, slug, URL). Each slug is usable directly as the category filter on GET /farfetch/search. Public data sourced live from Farfetch's own listing pages.", - "operationId": "farfetch-categories", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/farfetch.categoriesResponseDoc" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -357498,27 +431377,203 @@ "ApiKeyAuth": [] } ], - "summary": "Farfetch category directory", + "summary": "List GDELT Television 2.0 AI concept entities", "tags": [ - "Farfetch" + "GDELT" ] } }, - "/farfetch/designers": { + "/gdelt/tv-search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a department's full designer directory (name, slug, URL). Each slug is usable directly as the designer filter on GET /farfetch/search. Public data sourced from Farfetch's own designer-directory pages.", - "operationId": "farfetch-designers", + "description": "Searches GDELT's US television news index on one required `station` (`CNN`, `MSNBC`, `FOXNEWS`, `BBCNEWS`, `KGO`, `KPIX` or `KNTV`). Match on `transcript`, `caption`, `concept`, `onscreen_text` or `visual`, with matching `exclude_` options. Returns up to `maxrecords` clips (default 50, max 3000) with show, station, timing, caption, transcript, onscreen text and clip URL. Results lag 24 to 48 hours.", + "operationId": "gdelt-tv-search", "parameters": [ { - "description": "Department: women, men, kids", + "collectionFormat": "csv", + "description": "Search machine-generated speech-to-text transcripts (GDELT's asr: operator). Repeatable; multiple values are OR'd together. Short phrases only (GDELT caps each at 5 words).", "in": "query", - "name": "gender", + "items": { + "type": "string" + }, + "name": "transcript", + "type": "array", + "x-example": "climate change" + }, + { + "collectionFormat": "csv", + "description": "Search human-provided closed captioning (GDELT's cap: operator). Repeatable; multiple values are OR'd together.", + "in": "query", + "items": { + "type": "string" + }, + "name": "caption", + "type": "array", + "x-example": "climate change" + }, + { + "collectionFormat": "csv", + "description": "Search Google Knowledge Graph concepts extracted from captioning, by MID code (GDELT's capnlp: operator). Repeatable; multiple values are OR'd together.", + "in": "query", + "items": { + "type": "string" + }, + "name": "concept", + "type": "array", + "x-example": "/M/0d063v" + }, + { + "collectionFormat": "csv", + "description": "Search OCR'd onscreen text/chyrons (GDELT's ocr: operator). Repeatable; multiple values are OR'd together. Short phrases only (GDELT caps each at 5 words).", + "in": "query", + "items": { + "type": "string" + }, + "name": "onscreen_text", + "type": "array", + "x-example": "breaking news" + }, + { + "collectionFormat": "csv", + "description": "Search visual object/activity labels from computer vision (GDELT's visual: operator). Repeatable; multiple values are OR'd together.", + "in": "query", + "items": { + "type": "string" + }, + "name": "visual", + "type": "array", + "x-example": "flood" + }, + { + "collectionFormat": "csv", + "description": "Exclude clips whose speech-to-text transcript matches this value (GDELT's -asr: operator). Repeatable; every value must be absent.", + "in": "query", + "items": { + "type": "string" + }, + "name": "exclude_transcript", + "type": "array", + "x-example": "campaign ad" + }, + { + "collectionFormat": "csv", + "description": "Exclude clips whose closed captioning matches this value (GDELT's -cap: operator). Repeatable; every value must be absent.", + "in": "query", + "items": { + "type": "string" + }, + "name": "exclude_caption", + "type": "array", + "x-example": "sanders" + }, + { + "collectionFormat": "csv", + "description": "Exclude clips whose extracted concepts match this MID code (GDELT's -capnlp: operator). Repeatable; every value must be absent.", + "in": "query", + "items": { + "type": "string" + }, + "name": "exclude_concept", + "type": "array", + "x-example": "/M/081pw" + }, + { + "collectionFormat": "csv", + "description": "Exclude clips whose OCR'd onscreen text matches this value (GDELT's -ocr: operator). Repeatable; every value must be absent.", + "in": "query", + "items": { + "type": "string" + }, + "name": "exclude_onscreen_text", + "type": "array", + "x-example": "sponsored" + }, + { + "collectionFormat": "csv", + "description": "Exclude clips whose visual labels match this value (GDELT's -visual: operator). Repeatable; every value must be absent.", + "in": "query", + "items": { + "type": "string" + }, + "name": "exclude_visual", + "type": "array", + "x-example": "advertisement" + }, + { + "description": "Station to search.", + "enum": [ + "CNN", + "MSNBC", + "FOXNEWS", + "BBCNEWS", + "KGO", + "KPIX", + "KNTV" + ], + "in": "query", + "name": "station", "required": true, "type": "string", - "x-example": "women" + "x-example": "CNN" + }, + { + "description": "Limit to an exact show name.", + "in": "query", + "name": "show", + "type": "string", + "x-example": "Inside Politics" + }, + { + "description": "Limit to a day of week, 0 (Sunday) through 7 (Saturday), PST.", + "in": "query", + "maximum": 7, + "minimum": 0, + "name": "day_of_week", + "type": "integer" + }, + { + "description": "Relative time window ending now, e.g. 1h, 7d, 3m, 1y. Cannot be combined with from/to. GDELT's TV archive starts July 6, 2010.", + "in": "query", + "name": "timespan", + "type": "string", + "x-example": "7d" + }, + { + "description": "Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan.", + "in": "query", + "name": "from", + "type": "string", + "x-example": "2026-08-01" + }, + { + "description": "End of an absolute time window. Same formats as from.", + "in": "query", + "name": "to", + "type": "string", + "x-example": "2026-08-19" + }, + { + "default": "relevance", + "description": "Result order.", + "enum": [ + "relevance", + "datedesc", + "dateasc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": 50, + "description": "Rows to return. GDELT's own hard cap is 3000 for this endpoint; there is no pagination cursor beyond it.", + "in": "query", + "maximum": 3000, + "minimum": 1, + "name": "maxrecords", + "type": "integer" } ], "produces": [ @@ -357528,7 +431583,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/farfetch.designersResponseDoc" + "$ref": "#/definitions/gdelt.tvSearchResponseDoc" } }, "400": { @@ -357555,35 +431610,178 @@ "ApiKeyAuth": [] } ], - "summary": "Farfetch designer directory", + "summary": "Search US television news coverage (transcripts, captions, OCR, visual labels)", "tags": [ - "Farfetch" + "GDELT" ] } }, - "/farfetch/product": { + "/gdelt/tv-showchart": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Farfetch product's full detail: name, brand, color, description, images, category breadcrumb, and every size variant with its own price and availability. Public data sourced from Farfetch's own product pages.", - "operationId": "farfetch-product", + "description": "Ranks US television shows by how much they covered a topic. At least one `station` is required, and a match is set with `transcript`, `caption`, `concept`, `onscreen_text` or `visual` (with `exclude_` counterparts), optionally limited by `show`, `timespan` or `from` and `to`. Returns shows with a `count`. Omitting the time window searches the archive back to July 2010.", + "operationId": "gdelt-tv-showchart", "parameters": [ { - "description": "Department: women, men, kids", + "collectionFormat": "csv", + "description": "Search machine-generated speech-to-text transcripts (GDELT's asr: operator). Repeatable; multiple values are OR'd together. Short phrases only (GDELT caps each at 5 words).", "in": "query", - "name": "gender", + "items": { + "type": "string" + }, + "name": "transcript", + "type": "array", + "x-example": "climate change" + }, + { + "collectionFormat": "csv", + "description": "Search human-provided closed captioning (GDELT's cap: operator). Repeatable; multiple values are OR'd together.", + "in": "query", + "items": { + "type": "string" + }, + "name": "caption", + "type": "array", + "x-example": "trump" + }, + { + "collectionFormat": "csv", + "description": "Search Google Knowledge Graph concepts extracted from captioning, by MID code (GDELT's capnlp: operator). Repeatable; multiple values are OR'd together.", + "in": "query", + "items": { + "type": "string" + }, + "name": "concept", + "type": "array", + "x-example": "/M/0d063v" + }, + { + "collectionFormat": "csv", + "description": "Search OCR'd onscreen text/chyrons (GDELT's ocr: operator). Repeatable; multiple values are OR'd together. Short phrases only (GDELT caps each at 5 words).", + "in": "query", + "items": { + "type": "string" + }, + "name": "onscreen_text", + "type": "array", + "x-example": "breaking news" + }, + { + "collectionFormat": "csv", + "description": "Search visual object/activity labels from computer vision (GDELT's visual: operator). Repeatable; multiple values are OR'd together.", + "in": "query", + "items": { + "type": "string" + }, + "name": "visual", + "type": "array", + "x-example": "flood" + }, + { + "collectionFormat": "csv", + "description": "Exclude clips whose speech-to-text transcript matches this value (GDELT's -asr: operator). Repeatable; every value must be absent.", + "in": "query", + "items": { + "type": "string" + }, + "name": "exclude_transcript", + "type": "array", + "x-example": "campaign ad" + }, + { + "collectionFormat": "csv", + "description": "Exclude clips whose closed captioning matches this value (GDELT's -cap: operator). Repeatable; every value must be absent.", + "in": "query", + "items": { + "type": "string" + }, + "name": "exclude_caption", + "type": "array", + "x-example": "sanders" + }, + { + "collectionFormat": "csv", + "description": "Exclude clips whose extracted concepts match this MID code (GDELT's -capnlp: operator). Repeatable; every value must be absent.", + "in": "query", + "items": { + "type": "string" + }, + "name": "exclude_concept", + "type": "array", + "x-example": "/M/081pw" + }, + { + "collectionFormat": "csv", + "description": "Exclude clips whose OCR'd onscreen text matches this value (GDELT's -ocr: operator). Repeatable; every value must be absent.", + "in": "query", + "items": { + "type": "string" + }, + "name": "exclude_onscreen_text", + "type": "array", + "x-example": "sponsored" + }, + { + "collectionFormat": "csv", + "description": "Exclude clips whose visual labels match this value (GDELT's -visual: operator). Repeatable; every value must be absent.", + "in": "query", + "items": { + "type": "string" + }, + "name": "exclude_visual", + "type": "array", + "x-example": "advertisement" + }, + { + "collectionFormat": "csv", + "description": "Required, repeatable. One or more stations, OR'd together.", + "in": "query", + "items": { + "enum": [ + "CNN", + "MSNBC", + "FOXNEWS", + "BBCNEWS", + "KGO", + "KPIX", + "KNTV" + ], + "type": "string" + }, + "name": "station", "required": true, + "type": "array", + "x-example": "CNN" + }, + { + "description": "Limit to an exact show name.", + "in": "query", + "name": "show", "type": "string", - "x-example": "women" + "x-example": "Inside Politics" }, { - "description": "Product URL slug from a search result's id field", + "description": "Relative time window ending now, e.g. 1h, 7d, 3m, 1y. Cannot be combined with from/to. Omit both for GDELT's full archive (auto-resolution, back to July 6, 2010).", "in": "query", - "name": "slug", - "required": true, + "name": "timespan", "type": "string", - "x-example": "gucci-slide-sandals-with-double-g-item-37690086" + "x-example": "30d" + }, + { + "description": "Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan.", + "in": "query", + "name": "from", + "type": "string", + "x-example": "2026-07-01" + }, + { + "description": "End of an absolute time window. Same formats as from.", + "in": "query", + "name": "to", + "type": "string", + "x-example": "2026-08-19" } ], "produces": [ @@ -357593,7 +431791,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/farfetch.productResponseDoc" + "$ref": "#/definitions/gdelt.tvShowChartResponseDoc" } }, "400": { @@ -357602,12 +431800,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -357626,48 +431818,178 @@ "ApiKeyAuth": [] } ], - "summary": "Farfetch product detail", + "summary": "Top US television shows by coverage share for a query", "tags": [ - "Farfetch" + "GDELT" ] } }, - "/farfetch/search": { + "/gdelt/tv-stationchart": { "get": { "consumes": [ "application/json" ], - "description": "Browses Farfetch's luxury multi-brand marketplace by department plus a designer and/or category filter (at least one is required), returning listing summaries (name, brand, price, image, availability) and the upstream page count.", - "operationId": "farfetch-search", + "description": "Compares how much each US television station covered a topic. At least one `station` is required, and several are compared side by side. A match is set with `transcript`, `caption`, `concept`, `onscreen_text` or `visual` (with `exclude_` counterparts), optionally limited by `show`, `timespan` or `from` and `to`. Returns each station with a `count`.", + "operationId": "gdelt-tv-stationchart", "parameters": [ { - "description": "Department: women, men, kids", + "collectionFormat": "csv", + "description": "Search machine-generated speech-to-text transcripts (GDELT's asr: operator). Repeatable; multiple values are OR'd together. Short phrases only (GDELT caps each at 5 words).", "in": "query", - "name": "gender", + "items": { + "type": "string" + }, + "name": "transcript", + "type": "array", + "x-example": "climate change" + }, + { + "collectionFormat": "csv", + "description": "Search human-provided closed captioning (GDELT's cap: operator). Repeatable; multiple values are OR'd together.", + "in": "query", + "items": { + "type": "string" + }, + "name": "caption", + "type": "array", + "x-example": "trump" + }, + { + "collectionFormat": "csv", + "description": "Search Google Knowledge Graph concepts extracted from captioning, by MID code (GDELT's capnlp: operator). Repeatable; multiple values are OR'd together.", + "in": "query", + "items": { + "type": "string" + }, + "name": "concept", + "type": "array", + "x-example": "/M/0d063v" + }, + { + "collectionFormat": "csv", + "description": "Search OCR'd onscreen text/chyrons (GDELT's ocr: operator). Repeatable; multiple values are OR'd together. Short phrases only (GDELT caps each at 5 words).", + "in": "query", + "items": { + "type": "string" + }, + "name": "onscreen_text", + "type": "array", + "x-example": "breaking news" + }, + { + "collectionFormat": "csv", + "description": "Search visual object/activity labels from computer vision (GDELT's visual: operator). Repeatable; multiple values are OR'd together.", + "in": "query", + "items": { + "type": "string" + }, + "name": "visual", + "type": "array", + "x-example": "flood" + }, + { + "collectionFormat": "csv", + "description": "Exclude clips whose speech-to-text transcript matches this value (GDELT's -asr: operator). Repeatable; every value must be absent.", + "in": "query", + "items": { + "type": "string" + }, + "name": "exclude_transcript", + "type": "array", + "x-example": "campaign ad" + }, + { + "collectionFormat": "csv", + "description": "Exclude clips whose closed captioning matches this value (GDELT's -cap: operator). Repeatable; every value must be absent.", + "in": "query", + "items": { + "type": "string" + }, + "name": "exclude_caption", + "type": "array", + "x-example": "sanders" + }, + { + "collectionFormat": "csv", + "description": "Exclude clips whose extracted concepts match this MID code (GDELT's -capnlp: operator). Repeatable; every value must be absent.", + "in": "query", + "items": { + "type": "string" + }, + "name": "exclude_concept", + "type": "array", + "x-example": "/M/081pw" + }, + { + "collectionFormat": "csv", + "description": "Exclude clips whose OCR'd onscreen text matches this value (GDELT's -ocr: operator). Repeatable; every value must be absent.", + "in": "query", + "items": { + "type": "string" + }, + "name": "exclude_onscreen_text", + "type": "array", + "x-example": "sponsored" + }, + { + "collectionFormat": "csv", + "description": "Exclude clips whose visual labels match this value (GDELT's -visual: operator). Repeatable; every value must be absent.", + "in": "query", + "items": { + "type": "string" + }, + "name": "exclude_visual", + "type": "array", + "x-example": "advertisement" + }, + { + "collectionFormat": "csv", + "description": "Required, repeatable. One or more stations, OR'd together.", + "in": "query", + "items": { + "enum": [ + "CNN", + "MSNBC", + "FOXNEWS", + "BBCNEWS", + "KGO", + "KPIX", + "KNTV" + ], + "type": "string" + }, + "name": "station", "required": true, + "type": "array", + "x-example": "CNN" + }, + { + "description": "Limit to an exact show name.", + "in": "query", + "name": "show", "type": "string", - "x-example": "women" + "x-example": "Inside Politics" }, { - "description": "Designer slug from GET /farfetch/designers; designer or category is required", + "description": "Relative time window ending now, e.g. 1h, 7d, 3m, 1y. Cannot be combined with from/to. Omit both for GDELT's full archive (auto-resolution, back to July 6, 2010).", "in": "query", - "name": "designer", + "name": "timespan", "type": "string", - "x-example": "gucci" + "x-example": "30d" }, { - "description": "Category slug from GET /farfetch/categories; designer or category is required", + "description": "Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan.", "in": "query", - "name": "category", + "name": "from", "type": "string", - "x-example": "shoes-1" + "x-example": "2026-07-01" }, { - "description": "1-based page number; defaults to 1", + "description": "End of an absolute time window. Same formats as from.", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "to", + "type": "string", + "x-example": "2026-08-19" } ], "produces": [ @@ -357677,7 +431999,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/farfetch.searchResponseDoc" + "$ref": "#/definitions/gdelt.tvStationChartResponseDoc" } }, "400": { @@ -357704,35 +432026,19 @@ "ApiKeyAuth": [] } ], - "summary": "Search Farfetch listings", + "summary": "Compare US television news coverage across stations", "tags": [ - "Farfetch" + "GDELT" ] } }, - "/fashionnova/collections": { + "/gdelt/tv-stationdetails": { "get": { "consumes": [ "application/json" ], - "description": "Returns collections from Fashion Nova (https://www.fashionnova.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", - "operationId": "fashionnova-collections", - "parameters": [ - { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Maximum collections, defaults to 50 and supports up to 250", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 - } - ], + "description": "Lists the television stations GDELT currently monitors, each with its `id`, short `label` and a `label_long` that includes its coverage dates. Use the ids as `station` in the GDELT TV endpoints. It takes no parameters.", + "operationId": "gdelt-tv-stationdetails", "produces": [ "application/json" ], @@ -357740,17 +432046,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/gdelt.tvStationDetailsResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -357767,41 +432067,174 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashion Nova collections", + "summary": "List GDELT Television 2.0 AI stations", "tags": [ - "Fashion Nova" + "GDELT" ] } }, - "/fashionnova/collections/{handle}/products": { + "/gdelt/tv-timeline": { "get": { "consumes": [ "application/json" ], - "description": "Returns products from one Fashion Nova (https://www.fashionnova.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", - "operationId": "fashionnova-collection-products", + "description": "Returns the amount of US television news airtime matching the supplied query over time, using GDELT Television 2.0 AI timeline-volume data. A station is required. Supports the same caption, transcript, concept, and visual match operators as gdelt-tv-search; coverage and processing-delay caveats are documented there.", + "operationId": "gdelt-tv-timeline", "parameters": [ { - "description": "Collection handle", - "in": "path", - "name": "handle", + "collectionFormat": "csv", + "description": "Search machine-generated speech-to-text transcripts (GDELT's asr: operator). Repeatable; multiple values are OR'd together. Short phrases only (GDELT caps each at 5 words).", + "in": "query", + "items": { + "type": "string" + }, + "name": "transcript", + "type": "array", + "x-example": "climate change" + }, + { + "collectionFormat": "csv", + "description": "Search human-provided closed captioning (GDELT's cap: operator). Repeatable; multiple values are OR'd together.", + "in": "query", + "items": { + "type": "string" + }, + "name": "caption", + "type": "array", + "x-example": "climate change" + }, + { + "collectionFormat": "csv", + "description": "Search Google Knowledge Graph concepts extracted from captioning, by MID code (GDELT's capnlp: operator). Repeatable; multiple values are OR'd together.", + "in": "query", + "items": { + "type": "string" + }, + "name": "concept", + "type": "array", + "x-example": "/M/0d063v" + }, + { + "collectionFormat": "csv", + "description": "Search OCR'd onscreen text/chyrons (GDELT's ocr: operator). Repeatable; multiple values are OR'd together. Short phrases only (GDELT caps each at 5 words).", + "in": "query", + "items": { + "type": "string" + }, + "name": "onscreen_text", + "type": "array", + "x-example": "breaking news" + }, + { + "collectionFormat": "csv", + "description": "Search visual object/activity labels from computer vision (GDELT's visual: operator). Repeatable; multiple values are OR'd together.", + "in": "query", + "items": { + "type": "string" + }, + "name": "visual", + "type": "array", + "x-example": "flood" + }, + { + "collectionFormat": "csv", + "description": "Exclude clips whose speech-to-text transcript matches this value (GDELT's -asr: operator). Repeatable; every value must be absent.", + "in": "query", + "items": { + "type": "string" + }, + "name": "exclude_transcript", + "type": "array", + "x-example": "campaign ad" + }, + { + "collectionFormat": "csv", + "description": "Exclude clips whose closed captioning matches this value (GDELT's -cap: operator). Repeatable; every value must be absent.", + "in": "query", + "items": { + "type": "string" + }, + "name": "exclude_caption", + "type": "array", + "x-example": "sanders" + }, + { + "collectionFormat": "csv", + "description": "Exclude clips whose extracted concepts match this MID code (GDELT's -capnlp: operator). Repeatable; every value must be absent.", + "in": "query", + "items": { + "type": "string" + }, + "name": "exclude_concept", + "type": "array", + "x-example": "/M/081pw" + }, + { + "collectionFormat": "csv", + "description": "Exclude clips whose OCR'd onscreen text matches this value (GDELT's -ocr: operator). Repeatable; every value must be absent.", + "in": "query", + "items": { + "type": "string" + }, + "name": "exclude_onscreen_text", + "type": "array", + "x-example": "sponsored" + }, + { + "collectionFormat": "csv", + "description": "Exclude clips whose visual labels match this value (GDELT's -visual: operator). Repeatable; every value must be absent.", + "in": "query", + "items": { + "type": "string" + }, + "name": "exclude_visual", + "type": "array", + "x-example": "advertisement" + }, + { + "description": "Station to search.", + "enum": [ + "CNN", + "MSNBC", + "FOXNEWS", + "BBCNEWS", + "KGO", + "KPIX", + "KNTV" + ], + "in": "query", + "name": "station", "required": true, "type": "string", - "x-example": "collection-handle" + "x-example": "CNN" }, { - "description": "1-based page, defaults to 1", + "description": "Limit to an exact show name.", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "show", + "type": "string", + "x-example": "Inside Politics" }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "description": "Relative time window ending now, e.g. 1h, 7d, 3m, 1y. Cannot be combined with from/to. Omit both for GDELT's full archive (auto-resolution, back to July 6, 2010).", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "timespan", + "type": "string", + "x-example": "30d" + }, + { + "description": "Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan.", + "in": "query", + "name": "from", + "type": "string", + "x-example": "2026-07-01" + }, + { + "description": "End of an absolute time window. Same formats as from.", + "in": "query", + "name": "to", + "type": "string", + "x-example": "2026-08-19" } ], "produces": [ @@ -357811,7 +432244,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" + "$ref": "#/definitions/gdelt.tvTimelineResponseDoc" } }, "400": { @@ -357820,14 +432253,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -357844,33 +432271,28 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashion Nova collection products", + "summary": "Airtime volume over time for US television news coverage", "tags": [ - "Fashion Nova" + "GDELT" ] } }, - "/fashionnova/pages": { + "/gdelt/tv-visual-entities": { "get": { "consumes": [ "application/json" ], - "description": "Lists Fashion Nova static pages, 50 per page by default (`limit`, max 250), with `page` starting at 1. Each page has its handle, title, URL, plain-text content, and created, updated and published dates. When `transport_mode` is `ssr_embedded`, items carry only `handle`, `url` and `updated_at`. An empty result returns an empty `pages` array.", - "operationId": "fashionnova-pages", + "description": "Lists the computer-vision object and activity labels GDELT recognises in US television video, most frequent first, up to `limit` entries (default 100, max 10000). The label itself is the value to pass as `visual` to the GDELT TV search and chart endpoints. The list does not depend on any query.", + "operationId": "gdelt-tv-visual-entities", "parameters": [ { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Maximum static pages, defaults to 50 and supports up to 250", + "default": 100, + "description": "Maximum entries to return, most-frequent first.", "in": "query", + "maximum": 10000, + "minimum": 1, "name": "limit", - "type": "integer", - "x-example": 50 + "type": "integer" } ], "produces": [ @@ -357880,7 +432302,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pagesResponseDoc" + "$ref": "#/definitions/gdelt.tvVisualEntityDetailsResponseDoc" } }, "400": { @@ -357889,8 +432311,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -357907,96 +432329,196 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashion Nova static pages", + "summary": "List GDELT Television 2.0 AI visual entities", "tags": [ - "Fashion Nova" + "GDELT" ] } }, - "/fashionnova/pages/{handle}": { + "/gdelt/tv-wordcloud": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Fashion Nova static page by its required `handle`: title, URL, plain-text content, and created, updated and published dates. An unknown handle returns `404`. In a fallback mode flagged by `transport_mode: \"ssr_embedded\"`, the response omits `id`.", - "operationId": "fashionnova-page", + "description": "Returns a frequency-ranked word cloud for US television coverage. `channel` is required and picks what is counted: `transcript`, `caption`, `concept`, `onscreen_text` or `visual`; `station` is also required. Match with the same channel options (with `exclude_` counterparts) and limit by `show`, `day_of_week`, `timespan` or `from` and `to`. Each word has a `label` and `count`.", + "operationId": "gdelt-tv-wordcloud", "parameters": [ { - "description": "Page handle", - "in": "path", - "name": "handle", + "description": "Required. Which match channel to build a word cloud from.", + "enum": [ + "transcript", + "caption", + "concept", + "onscreen_text", + "visual" + ], + "in": "query", + "name": "channel", "required": true, "type": "string", - "x-example": "page-handle" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/shopifybrands.pageResponseDoc" - } + "x-example": "caption" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "collectionFormat": "csv", + "description": "Search machine-generated speech-to-text transcripts (GDELT's asr: operator). Repeatable; multiple values are OR'd together. Short phrases only (GDELT caps each at 5 words).", + "in": "query", + "items": { + "type": "string" + }, + "name": "transcript", + "type": "array", + "x-example": "climate change" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "collectionFormat": "csv", + "description": "Search human-provided closed captioning (GDELT's cap: operator). Repeatable; multiple values are OR'd together.", + "in": "query", + "items": { + "type": "string" + }, + "name": "caption", + "type": "array", + "x-example": "trump" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "collectionFormat": "csv", + "description": "Search Google Knowledge Graph concepts extracted from captioning, by MID code (GDELT's capnlp: operator). Repeatable; multiple values are OR'd together.", + "in": "query", + "items": { + "type": "string" + }, + "name": "concept", + "type": "array", + "x-example": "/M/0d063v" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get a Fashion Nova static page", - "tags": [ - "Fashion Nova" - ] - } - }, - "/fashionnova/products": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns products from Fashion Nova's (https://www.fashionnova.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", - "operationId": "fashionnova-products", - "parameters": [ + "collectionFormat": "csv", + "description": "Search OCR'd onscreen text/chyrons (GDELT's ocr: operator). Repeatable; multiple values are OR'd together. Short phrases only (GDELT caps each at 5 words).", + "in": "query", + "items": { + "type": "string" + }, + "name": "onscreen_text", + "type": "array", + "x-example": "breaking news" + }, { - "description": "1-based page, defaults to 1", + "collectionFormat": "csv", + "description": "Search visual object/activity labels from computer vision (GDELT's visual: operator). Repeatable; multiple values are OR'd together.", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "items": { + "type": "string" + }, + "name": "visual", + "type": "array", + "x-example": "flood" }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "collectionFormat": "csv", + "description": "Exclude clips whose speech-to-text transcript matches this value (GDELT's -asr: operator). Repeatable; every value must be absent.", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "items": { + "type": "string" + }, + "name": "exclude_transcript", + "type": "array", + "x-example": "campaign ad" + }, + { + "collectionFormat": "csv", + "description": "Exclude clips whose closed captioning matches this value (GDELT's -cap: operator). Repeatable; every value must be absent.", + "in": "query", + "items": { + "type": "string" + }, + "name": "exclude_caption", + "type": "array", + "x-example": "sanders" + }, + { + "collectionFormat": "csv", + "description": "Exclude clips whose extracted concepts match this MID code (GDELT's -capnlp: operator). Repeatable; every value must be absent.", + "in": "query", + "items": { + "type": "string" + }, + "name": "exclude_concept", + "type": "array", + "x-example": "/M/081pw" + }, + { + "collectionFormat": "csv", + "description": "Exclude clips whose OCR'd onscreen text matches this value (GDELT's -ocr: operator). Repeatable; every value must be absent.", + "in": "query", + "items": { + "type": "string" + }, + "name": "exclude_onscreen_text", + "type": "array", + "x-example": "sponsored" + }, + { + "collectionFormat": "csv", + "description": "Exclude clips whose visual labels match this value (GDELT's -visual: operator). Repeatable; every value must be absent.", + "in": "query", + "items": { + "type": "string" + }, + "name": "exclude_visual", + "type": "array", + "x-example": "advertisement" + }, + { + "description": "Required. Station to search.", + "enum": [ + "CNN", + "MSNBC", + "FOXNEWS", + "BBCNEWS", + "KGO", + "KPIX", + "KNTV" + ], + "in": "query", + "name": "station", + "required": true, + "type": "string", + "x-example": "CNN" + }, + { + "description": "Limit to an exact show name.", + "in": "query", + "name": "show", + "type": "string", + "x-example": "Inside Politics" + }, + { + "description": "Limit to a day of week, 0 (Sunday) through 7 (Saturday), PST.", + "in": "query", + "name": "day_of_week", + "type": "string", + "x-example": "1" + }, + { + "description": "Relative time window ending now, e.g. 1h, 7d, 3m, 1y. Cannot be combined with from/to. GDELT's TV archive starts July 6, 2010.", + "in": "query", + "name": "timespan", + "type": "string", + "x-example": "7d" + }, + { + "description": "Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan.", + "in": "query", + "name": "from", + "type": "string", + "x-example": "2026-08-01" + }, + { + "description": "End of an absolute time window. Same formats as from.", + "in": "query", + "name": "to", + "type": "string", + "x-example": "2026-08-19" } ], "produces": [ @@ -358006,7 +432528,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productsResponseDoc" + "$ref": "#/definitions/gdelt.tvWordCloudResponseDoc" } }, "400": { @@ -358014,9 +432536,9 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "429": { - "description": "Too Many Requests", + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -358033,27 +432555,51 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashion Nova products", + "summary": "Word cloud for US television news coverage", "tags": [ - "Fashion Nova" + "GDELT" ] } }, - "/fashionnova/products/{handle}": { + "/geocoding/lookup": { "get": { "consumes": [ "application/json" ], - "description": "Returns product detail for one Fashion Nova (https://www.fashionnova.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", - "operationId": "fashionnova-product", + "description": "Looks up OpenStreetMap objects by the required `osm_ids`, a comma-separated list prefixed `N` (node), `W` (way) or `R` (relation), such as `W34633854,N123`. Each place has its display name, category and type, coordinates, bounding box, importance and address parts; `addressdetails` defaults to true, and `extratags`, `namedetails` and `accept_language` are optional. Malformed ids return `400`; no match returns `404`.", + "operationId": "geocoding-lookup", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", + "description": "Comma-separated OSM ids such as W34633854,N123,R456", + "in": "query", + "name": "osm_ids", "required": true, "type": "string", - "x-example": "product-handle" + "x-example": "W34633854" + }, + { + "description": "Preferred result language, forwarded to Nominatim", + "in": "query", + "name": "accept_language", + "type": "string" + }, + { + "description": "Include address details, defaults to true", + "in": "query", + "name": "addressdetails", + "type": "boolean" + }, + { + "description": "Include OSM extra tags", + "in": "query", + "name": "extratags", + "type": "boolean" + }, + { + "description": "Include multilingual name details", + "in": "query", + "name": "namedetails", + "type": "boolean" } ], "produces": [ @@ -358063,7 +432609,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productResponseDoc" + "$ref": "#/definitions/geocoding.lookupResponseDoc" } }, "400": { @@ -358078,8 +432624,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "502": { + "description": "Bad Gateway", "schema": { "$ref": "#/definitions/app.Response" } @@ -358096,45 +432642,65 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fashion Nova product", + "summary": "Lookup Nominatim OSM ids", "tags": [ - "Fashion Nova" + "Geocoding" ] } }, - "/fashionnova/products/{handle}/recommendations": { + "/geocoding/reverse": { "get": { "consumes": [ "application/json" ], - "description": "Returns recommended products for one Fashion Nova (https://www.fashionnova.com) product handle. The storefront URL is fixed server-side.", - "operationId": "fashionnova-product-recommendations", + "description": "Returns the nearest OpenStreetMap place for the required `lat` and `lon`. `zoom` (0 to 18, default 18) sets the level of detail; `addressdetails` defaults to true, and `extratags`, `namedetails` and `accept_language` are optional. The place has its display name, category and type, OSM type and id, bounding box, importance and address parts. Out-of-range coordinates return `400`; no place found returns `404`.", + "operationId": "geocoding-reverse", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", + "description": "Latitude", + "in": "query", + "name": "lat", "required": true, - "type": "string", - "x-example": "product-handle" + "type": "number", + "x-example": 40.7484257 }, { - "description": "Maximum products, defaults to 10 and supports up to 20", + "description": "Longitude", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "lon", + "required": true, + "type": "number", + "x-example": -73.98567 }, { - "description": "Recommendation intent. Allowed values: related, complementary", - "enum": [ - "related", - "complementary" - ], + "description": "Nominatim address zoom, defaults to 18", "in": "query", - "name": "intent", - "type": "string", - "x-example": "related" + "name": "zoom", + "type": "integer" + }, + { + "description": "Preferred result language, forwarded to Nominatim", + "in": "query", + "name": "accept_language", + "type": "string" + }, + { + "description": "Include address details, defaults to true", + "in": "query", + "name": "addressdetails", + "type": "boolean" + }, + { + "description": "Include OSM extra tags", + "in": "query", + "name": "extratags", + "type": "boolean" + }, + { + "description": "Include multilingual name details", + "in": "query", + "name": "namedetails", + "type": "boolean" } ], "produces": [ @@ -358144,7 +432710,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" + "$ref": "#/definitions/geocoding.reverseResponseDoc" } }, "400": { @@ -358159,8 +432725,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "502": { + "description": "Bad Gateway", "schema": { "$ref": "#/definitions/app.Response" } @@ -358177,41 +432743,97 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashion Nova product recommendations", + "summary": "Reverse geocode coordinates", "tags": [ - "Fashion Nova" + "Geocoding" ] } }, - "/fashionnova/search/suggest": { + "/geocoding/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns products, collections, and query suggestions from Fashion Nova's (https://www.fashionnova.com) predictive search. The storefront URL is fixed server-side.", - "operationId": "fashionnova-search-suggest", + "description": "Searches OpenStreetMap places by address. Pass either free-text `q` or structured fields (`street`, `city`, `county`, `state`, `country`, `postalcode`), not both. `limit` defaults to 10 and is clamped to 20; `countrycodes` restricts by ISO 3166-1 alpha-2 country. Each result has its display name, coordinates, category, type, bounding box, importance and address parts. No match returns `404`.", + "operationId": "geocoding-search", "parameters": [ { - "description": "Search query", + "description": "Free-text search query", "in": "query", "name": "q", - "required": true, - "type": "string", - "x-example": "wool" + "type": "string" }, { - "description": "Comma-separated suggestion types. Allowed values: product, collection, query", + "description": "Structured street or house number", "in": "query", - "name": "types", - "type": "string", - "x-example": "product,collection,query" + "name": "street", + "type": "string" }, { - "description": "Maximum results per type, defaults to 10 and supports up to 20", + "description": "Structured city", + "in": "query", + "name": "city", + "type": "string" + }, + { + "description": "Structured county", + "in": "query", + "name": "county", + "type": "string" + }, + { + "description": "Structured state", + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "Structured country", + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Structured postal code", + "in": "query", + "name": "postalcode", + "type": "string" + }, + { + "description": "Maximum results, defaults to 10 and clamps to 20", "in": "query", "name": "limit", - "type": "integer", - "x-example": 10 + "type": "integer" + }, + { + "description": "Comma-separated ISO 3166-1 alpha-2 country filters", + "in": "query", + "name": "countrycodes", + "type": "string" + }, + { + "description": "Preferred result language, forwarded to Nominatim", + "in": "query", + "name": "accept_language", + "type": "string" + }, + { + "description": "Include address details, defaults to true", + "in": "query", + "name": "addressdetails", + "type": "boolean" + }, + { + "description": "Include OSM extra tags", + "in": "query", + "name": "extratags", + "type": "boolean" + }, + { + "description": "Include multilingual name details", + "in": "query", + "name": "namedetails", + "type": "boolean" } ], "produces": [ @@ -358221,7 +432843,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" + "$ref": "#/definitions/geocoding.searchResponseDoc" } }, "400": { @@ -358230,8 +432852,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "502": { + "description": "Bad Gateway", "schema": { "$ref": "#/definitions/app.Response" } @@ -358248,42 +432876,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fashion Nova search suggestions", + "summary": "Search Nominatim places", "tags": [ - "Fashion Nova" + "Geocoding" ] } }, - "/fashionnova/sitemap/urls": { + "/ghanaweb/archive": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns capped URL entries from Fashion Nova's (https://www.fashionnova.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", - "operationId": "fashionnova-sitemap-urls", + "description": "Returns paginated canonical article URLs from one month sitemap. Discover accepted month values from ghanaweb-archive-months; the service only fetches child sitemap URLs derived from that official index.", + "operationId": "ghanaweb-archive", "parameters": [ { - "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", - "enum": [ - "all", - "products", - "collections", - "pages", - "blogs", - "agentic_discovery", - "other" - ], + "description": "A YYYYMM value returned by ghanaweb-archive-months", "in": "query", - "name": "type", + "name": "month", + "required": true, "type": "string", - "x-example": "products" + "x-example": "202609" }, { - "description": "Maximum URL entries, defaults to 50 and supports up to 250", + "description": "Page number (default 1)", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Items per page, 1–100 (default 50)", "in": "query", "name": "limit", - "type": "integer", - "x-example": 50 + "type": "integer" } ], "produces": [ @@ -358293,7 +432915,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" + "$ref": "#/definitions/publicnews.ghanawebArchiveResponseDoc" } }, "400": { @@ -358302,8 +432924,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -358320,19 +432942,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashion Nova sitemap URLs", + "summary": "List GhanaWeb archive article URLs", "tags": [ - "Fashion Nova" + "GhanaWeb" ] } }, - "/fashionnova/sitemaps": { + "/ghanaweb/archive/months": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns child sitemap URLs from Fashion Nova's (https://www.fashionnova.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", - "operationId": "fashionnova-sitemaps", + "description": "Lists the `YYYYMM` months currently available in GhanaWeb's article archive, each with the time it was last updated. Use a returned month with the GhanaWeb archive endpoint; the set grows over time. It takes no parameters.", + "operationId": "ghanaweb-archive-months", "produces": [ "application/json" ], @@ -358340,19 +432959,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.ghanawebArchiveMonthsResponseDoc" } }, "503": { @@ -358367,19 +432974,26 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashion Nova sitemaps", + "summary": "Discover GhanaWeb archive months", "tags": [ - "Fashion Nova" + "GhanaWeb" ] } }, - "/fashionnova/store": { + "/ghanaweb/article": { "get": { - "consumes": [ - "application/json" + "description": "Returns public article metadata and readable body paragraphs. GhanaWeb's JSON-LD identifies the publisher rather than person authors, so authors are omitted.", + "operationId": "ghanaweb-article", + "parameters": [ + { + "description": "Canonical GhanaWeb article URL ending in its numeric story ID", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.ghanaweb.com/GhanaHomePage/NewsArchive/NPP-Chairmanship-Race-How-APL-s-survey-made-a-near-perfect-prediction-2055134" + } ], - "description": "Returns storefront metadata for Fashion Nova (https://www.fashionnova.com). The storefront URL is fixed server-side, so no `url` parameter is accepted.", - "operationId": "fashionnova-store", "produces": [ "application/json" ], @@ -358387,7 +433001,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.storeResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -358396,12 +433010,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -358414,33 +433022,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fashion Nova store metadata", + "summary": "Get GhanaWeb article content", "tags": [ - "Fashion Nova" + "GhanaWeb" ] } }, - "/fashionphile/collections": { + "/ghanaweb/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns collections from Fashionphile (https://www.fashionphile.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", - "operationId": "fashionphile-collections", + "description": "Returns the article cards currently listed on one GhanaWeb section. `section` is required and takes one of 15 slugs such as `news`, `sports`, `crime`, `tabloid` or `regional`. Each item has its `title`, `url` and, when the card shows one, `image_url`. Summary, author and publication time are not returned.", + "operationId": "ghanaweb-headlines", "parameters": [ { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Maximum collections, defaults to 50 and supports up to 250", + "description": "Section slug from ghanaweb-sections", + "enum": [ + "news", + "sports", + "business", + "entertainment", + "africa", + "opinions", + "editorial", + "crime", + "regional", + "health", + "politics", + "tabloid", + "world", + "lifestyle", + "features" + ], "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "section", + "required": true, + "type": "string", + "x-example": "news" } ], "produces": [ @@ -358450,7 +433066,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -358459,12 +433075,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -358477,43 +433087,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashionphile collections", + "summary": "Get GhanaWeb section headlines", "tags": [ - "Fashionphile" + "GhanaWeb" ] } }, - "/fashionphile/collections/{handle}/products": { + "/ghanaweb/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns products from one Fashionphile (https://www.fashionphile.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", - "operationId": "fashionphile-collection-products", - "parameters": [ - { - "description": "Collection handle", - "in": "path", - "name": "handle", - "required": true, - "type": "string", - "x-example": "collection-handle" - }, - { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Maximum products, defaults to 50 and supports up to 250", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 - } - ], + "description": "Lists GhanaWeb's current stories across the site, with no parameters. Each item carries its headline as `title`, the canonical article `url` and the `published_at` time. No author, summary or image is returned.", + "operationId": "ghanaweb-news", "produces": [ "application/json" ], @@ -358521,19 +433104,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -358554,35 +433125,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashionphile collection products", + "summary": "Get GhanaWeb latest stories", "tags": [ - "Fashionphile" + "GhanaWeb" ] } }, - "/fashionphile/pages": { + "/ghanaweb/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists Fashionphile static pages, 50 per page by default (`limit`, max 250), with `page` starting at 1. Each page has its handle, title, URL, plain-text content, and created, updated and published dates. When `transport_mode` is `ssr_embedded`, items carry only `handle`, `url` and `updated_at`. Fetch a single page for its full content.", - "operationId": "fashionphile-pages", - "parameters": [ - { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Maximum static pages, defaults to 50 and supports up to 250", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 - } - ], + "description": "Lists the 15 article sections GhanaWeb accepts for `ghanaweb-headlines`, from `news` and `sports` to `tabloid`, `lifestyle` and `features`. Each entry has a `slug`, display `name` and section `url`. Video and other non-article areas are left out.", + "operationId": "ghanaweb-sections", "produces": [ "application/json" ], @@ -358590,25 +433142,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pagesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -358617,27 +433151,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashionphile static pages", + "summary": "Get GhanaWeb article sections", "tags": [ - "Fashionphile" + "GhanaWeb" ] } }, - "/fashionphile/pages/{handle}": { + "/ghanaweb/video": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Fashionphile static page by its required `handle`, such as `about`: title, URL, plain-text content, and created, updated and published dates. An unknown handle returns `404`. In a fallback mode flagged by `transport_mode: \"ssr_embedded\"`, the response omits `id`.", - "operationId": "fashionphile-page", + "description": "Returns metadata for one GhanaWeb TV video by its required numeric `id`: title, page URL, image URL, published and updated times, and the YouTube embed URL. The video file itself is not returned.", + "operationId": "ghanaweb-video", "parameters": [ { - "description": "Page handle", - "in": "path", - "name": "handle", + "description": "Numeric GhanaWeb TV video ID", + "in": "query", + "name": "id", "required": true, "type": "string", - "x-example": "page-handle" + "x-example": "138878" } ], "produces": [ @@ -358647,7 +433178,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pageResponseDoc" + "$ref": "#/definitions/publicnews.ghanawebVideoResponseDoc" } }, "400": { @@ -358662,12 +433193,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -358680,35 +433205,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fashionphile static page", + "summary": "Get GhanaWeb TV video metadata", "tags": [ - "Fashionphile" + "GhanaWeb" ] } }, - "/fashionphile/products": { + "/ghanaweb/video-sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns products from Fashionphile's (https://www.fashionphile.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", - "operationId": "fashionphile-products", - "parameters": [ - { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Maximum products, defaults to 50 and supports up to 250", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 - } - ], + "description": "Lists the four GhanaWeb TV video categories accepted by `ghanaweb-videos`: `news`, `sports`, `business` and `entertainment`. Each entry has a `slug`, a display `name` and the category `url` on GhanaWeb. Takes no parameters.", + "operationId": "ghanaweb-video-sections", "produces": [ "application/json" ], @@ -358716,25 +433222,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.ghanawebVideoSectionsResponseDoc" } } }, @@ -358743,27 +433231,30 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashionphile products", + "summary": "Get GhanaWeb TV video sections", "tags": [ - "Fashionphile" + "GhanaWeb" ] } }, - "/fashionphile/products/{handle}": { + "/ghanaweb/videos": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns product detail for one Fashionphile (https://www.fashionphile.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", - "operationId": "fashionphile-product", + "description": "Returns current public video cards for one GhanaWeb TV category, including metadata and a canonical detail URL. This endpoint does not retrieve video media.", + "operationId": "ghanaweb-videos", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", + "description": "Video category from ghanaweb-video-sections", + "enum": [ + "news", + "sports", + "business", + "entertainment" + ], + "in": "query", + "name": "section", "required": true, "type": "string", - "x-example": "product-handle" + "x-example": "news" } ], "produces": [ @@ -358773,7 +433264,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productResponseDoc" + "$ref": "#/definitions/publicnews.ghanawebVideosResponseDoc" } }, "400": { @@ -358782,18 +433273,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -358806,45 +433285,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fashionphile product", + "summary": "List GhanaWeb TV videos", "tags": [ - "Fashionphile" + "GhanaWeb" ] } }, - "/fashionphile/products/{handle}/recommendations": { + "/github/org/{org}": { "get": { "consumes": [ "application/json" ], - "description": "Returns recommended products for one Fashionphile (https://www.fashionphile.com) product handle. The storefront URL is fixed server-side.", - "operationId": "fashionphile-product-recommendations", + "description": "Returns the public profile of a GitHub organization by its required `org` login, with fields such as name, description, blog URL, location, public repository count, followers and whether the organization is verified.", + "operationId": "github-org", "parameters": [ { - "description": "Product handle", + "description": "GitHub organization login", "in": "path", - "name": "handle", + "name": "org", "required": true, "type": "string", - "x-example": "product-handle" - }, - { - "description": "Maximum products, defaults to 10 and supports up to 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 - }, - { - "description": "Recommendation intent. Allowed values: related, complementary", - "enum": [ - "related", - "complementary" - ], - "in": "query", - "name": "intent", - "type": "string", - "x-example": "related" + "x-example": "github" } ], "produces": [ @@ -358852,31 +433313,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped organization profile", "schema": { - "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" + "$ref": "#/definitions/app.Response" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", + "description": "Organization not found", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or rate limit", "schema": { "$ref": "#/definitions/app.Response" } @@ -358887,88 +433342,74 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashionphile product recommendations", + "summary": "Retrieve a GitHub organization profile", "tags": [ - "Fashionphile" + "GitHub" ] } }, - "/fashionphile/search": { + "/github/org/{org}/repos": { "get": { "consumes": [ "application/json" ], - "description": "Returns ranked products from Fashionphile's (https://www.fashionphile.com) own full-text and faceted product search, including condition grade, discount percentage, and other filter attributes not available from the classic catalog endpoints in this family. The storefront URL is fixed server-side. Omitting `q` browses the full catalog subject to any condition/vendor/availability filters and the chosen sort. By default only in-stock listings are searched, matching the storefront; `availability=sold` searches the sold archive instead. `total_items` is the exact number of products matching the query and all filters.", - "operationId": "fashionphile-search", + "description": "Lists the public repositories of a GitHub organization, identified by the required `org` login. Filter with `type` (`all`, `public`, `forks`, `sources` or `member`), order with `sort` (`created`, `updated`, `pushed` or `full_name`) and `direction`, and page with `page` and `per_page` (max 100). Each repository has its name, description, language, stars and forks.", + "operationId": "github-org-repos", "parameters": [ { - "description": "Search query text", - "in": "query", - "name": "q", + "description": "GitHub organization login", + "in": "path", + "name": "org", + "required": true, "type": "string", - "x-example": "chanel" + "x-example": "github" }, { - "description": "Filter by condition grade. Allowed values: New, Excellent, Giftable, Shows Wear, Worn, Flawed, Fair", + "description": "Sort field", "enum": [ - "New", - "Excellent", - "Giftable", - "Shows Wear", - "Worn", - "Flawed", - "Fair" + "created", + "updated", + "pushed", + "full_name" ], "in": "query", - "name": "condition", - "type": "string", - "x-example": "Excellent" + "name": "sort", + "type": "string" }, { - "description": "Which listings to search. Allowed values: available (in-stock only, default), sold (sold archive only), all", + "description": "Sort direction", "enum": [ - "available", - "sold", - "all" + "asc", + "desc" ], "in": "query", - "name": "availability", - "type": "string", - "x-example": "available" - }, - { - "description": "Filter by exact designer/vendor name, e.g. Chanel", - "in": "query", - "name": "vendor", - "type": "string", - "x-example": "Chanel" + "name": "direction", + "type": "string" }, { - "description": "Sort order. Allowed values: relevance, newest, price_asc, price_desc", + "description": "Repository type", "enum": [ - "relevance", - "newest", - "price_asc", - "price_desc" + "all", + "public", + "forks", + "sources", + "member" ], "in": "query", - "name": "sort", - "type": "string", - "x-example": "relevance" + "name": "type", + "type": "string" }, { - "description": "1-based page, defaults to 1", + "description": "Page number", "in": "query", "name": "page", - "type": "integer", - "x-example": 1 + "type": "integer" }, { - "description": "Maximum products, defaults to 20 and supports up to 50", + "description": "Results per page (max 100)", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -358976,25 +433417,19 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/shopifybrands.searchResponseDoc" - } - }, - "400": { - "description": "Bad Request", + "description": "Wrapped repository list", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or rate limit", "schema": { "$ref": "#/definitions/app.Response" } @@ -359005,41 +433440,35 @@ "ApiKeyAuth": [] } ], - "summary": "Search Fashionphile products", + "summary": "List a GitHub organization's public repositories", "tags": [ - "Fashionphile" + "GitHub" ] } }, - "/fashionphile/search/suggest": { + "/github/repo/{owner}/{repo}": { "get": { "consumes": [ "application/json" ], - "description": "Returns products, collections, and query suggestions from Fashionphile's (https://www.fashionphile.com) predictive search. The storefront URL is fixed server-side.", - "operationId": "fashionphile-search-suggest", + "description": "Returns the public details of one GitHub repository, identified by the required `owner` and `repo`. Fields include the full name, description, main language, topics, stars, forks, watchers, open issues, license, default branch and last push time.", + "operationId": "github-repo", "parameters": [ { - "description": "Search query", - "in": "query", - "name": "q", + "description": "Repository owner (user or org login)", + "in": "path", + "name": "owner", "required": true, "type": "string", - "x-example": "wool" + "x-example": "torvalds" }, { - "description": "Comma-separated suggestion types. Allowed values: product, collection, query", - "in": "query", - "name": "types", + "description": "Repository name", + "in": "path", + "name": "repo", + "required": true, "type": "string", - "x-example": "product,collection,query" - }, - { - "description": "Maximum results per type, defaults to 10 and supports up to 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "x-example": "linux" } ], "produces": [ @@ -359047,25 +433476,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped repository detail", "schema": { - "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" + "$ref": "#/definitions/app.Response" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Repository not found", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or rate limit", "schema": { "$ref": "#/definitions/app.Response" } @@ -359076,115 +433505,67 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fashionphile search suggestions", + "summary": "Retrieve a GitHub repository", "tags": [ - "Fashionphile" + "GitHub" ] } }, - "/fashionphile/sitemap/urls": { + "/github/repo/{owner}/{repo}/contributors": { "get": { "consumes": [ "application/json" ], - "description": "Lists URL entries from Fashionphile's sitemaps, filtered by `type` (`all` by default, or `products`, `collections`, `pages`, `blogs`, `agentic_discovery`, `other`) and capped by `limit` (default 50, max 250). Each entry has its `loc`, inferred type, handle, last modified date, change frequency, and optional images.", - "operationId": "fashionphile-sitemap-urls", + "description": "Lists the contributors to a GitHub repository, identified by the required `owner` and `repo`, ordered by number of contributions. Page with `page` and `per_page` (max 100). Each contributor has their login, id, contribution count, profile URL and account type.", + "operationId": "github-repo-contributors", "parameters": [ { - "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", - "enum": [ - "all", - "products", - "collections", - "pages", - "blogs", - "agentic_discovery", - "other" - ], - "in": "query", - "name": "type", + "description": "Repository owner (user or org login)", + "in": "path", + "name": "owner", + "required": true, "type": "string", - "x-example": "products" + "x-example": "torvalds" }, { - "description": "Maximum URL entries, defaults to 50 and supports up to 250", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + "description": "Repository name", + "in": "path", + "name": "repo", + "required": true, + "type": "string", + "x-example": "linux" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Page number", + "in": "query", + "name": "page", + "type": "integer" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] + "description": "Results per page (max 100)", + "in": "query", + "name": "per_page", + "type": "integer" } ], - "summary": "List Fashionphile sitemap URLs", - "tags": [ - "Fashionphile" - ] - } - }, - "/fashionphile/sitemaps": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the child sitemaps in Fashionphile's sitemap index, with no parameters. Each entry has its `loc` URL and an inferred `type`: `products`, `collections`, `pages`, `blogs`, `agentic_discovery` or `other`. Product sitemap URLs may carry `from` and `to` query values.", - "operationId": "fashionphile-sitemaps", "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" - } - }, - "400": { - "description": "Bad Request", + "description": "Wrapped contributor list", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or rate limit", "schema": { "$ref": "#/definitions/app.Response" } @@ -359195,71 +433576,59 @@ "ApiKeyAuth": [] } ], - "summary": "List Fashionphile sitemaps", + "summary": "List a repository's contributors", "tags": [ - "Fashionphile" + "GitHub" ] } }, - "/fashionphile/store": { + "/github/repo/{owner}/{repo}/forks": { "get": { "consumes": [ "application/json" ], - "description": "Returns storefront metadata for Fashionphile (https://www.fashionphile.com). The storefront URL is fixed server-side, so no `url` parameter is accepted.", - "operationId": "fashionphile-store", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/shopifybrands.storeResponseDoc" - } + "description": "Lists the public forks of a GitHub repository, identified by the required `owner` and `repo`. Order with `sort` (`newest`, `oldest`, `stargazers` or `watchers`) and page with `page` and `per_page` (max 100). Each fork has its full name, owner, stars, language and creation time.", + "operationId": "github-repo-forks", + "parameters": [ + { + "description": "Repository owner (user or org login)", + "in": "path", + "name": "owner", + "required": true, + "type": "string", + "x-example": "torvalds" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Repository name", + "in": "path", + "name": "repo", + "required": true, + "type": "string", + "x-example": "linux" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Sort order", + "enum": [ + "newest", + "oldest", + "stargazers", + "watchers" + ], + "in": "query", + "name": "sort", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get Fashionphile store metadata", - "tags": [ - "Fashionphile" - ] - } - }, - "/fastcompany/article": { - "get": { - "description": "Returns public Fast Company article metadata and body paragraphs from a canonical article URL. It does not bypass authentication or access controls.", - "operationId": "fastcompany-article", - "parameters": [ + "description": "Page number", + "in": "query", + "name": "page", + "type": "integer" + }, { - "description": "Canonical Fast Company article URL", + "description": "Results per page (max 100)", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.fastcompany.com/91611506/example-headline" + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -359267,25 +433636,19 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" - } - }, - "400": { - "description": "Bad Request", + "description": "Wrapped fork list", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "400": { + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or rate limit", "schema": { "$ref": "#/definitions/app.Response" } @@ -359296,24 +433659,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fast Company article content", + "summary": "List a repository's public forks", "tags": [ - "Fast Company" + "GitHub" ] } }, - "/fastcompany/author": { + "/github/repo/{owner}/{repo}/languages": { "get": { - "description": "Returns a Fast Company contributor's name, biography, and recent articles from a canonical contributor URL. The biography is omitted if the contributor's profile page cannot be loaded. It does not bypass authentication or access controls.", - "operationId": "fastcompany-author", + "consumes": [ + "application/json" + ], + "description": "Returns the languages detected in a GitHub repository, identified by the required `owner` and `repo`, as language and byte-count pairs sorted by bytes, largest first.", + "operationId": "github-repo-languages", "parameters": [ { - "description": "Canonical Fast Company contributor URL", - "in": "query", - "name": "url", + "description": "Repository owner (user or org login)", + "in": "path", + "name": "owner", "required": true, "type": "string", - "x-example": "https://www.fastcompany.com/user/example-writer" + "x-example": "torvalds" + }, + { + "description": "Repository name", + "in": "path", + "name": "repo", + "required": true, + "type": "string", + "x-example": "linux" } ], "produces": [ @@ -359321,25 +433695,19 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.fastCompanyAuthorResponseDoc" - } - }, - "400": { - "description": "Bad Request", + "description": "Wrapped language breakdown", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "400": { + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or rate limit", "schema": { "$ref": "#/definitions/app.Response" } @@ -359350,82 +433718,67 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fast Company contributor profile", + "summary": "Retrieve a repository's language breakdown", "tags": [ - "Fast Company" + "GitHub" ] } }, - "/fastcompany/headlines": { + "/github/repo/{owner}/{repo}/releases": { "get": { - "description": "Returns fresh headlines from one Fast Company section or topic's public RSS feed. section accepts any slug returned by GET /fastcompany/sections (78 values, e.g. \"technology\" or \"artificial-intelligence\").", - "operationId": "fastcompany-headlines", + "consumes": [ + "application/json" + ], + "description": "Lists the published releases of a GitHub repository, identified by the required `owner` and `repo`. Page with `page` and `per_page` (max 100). Each release has its tag name, title, URL, prerelease flag, publication time and author.", + "operationId": "github-repo-releases", "parameters": [ { - "description": "Fast Company section slug, from GET /fastcompany/sections", - "in": "query", - "name": "section", + "description": "Repository owner (user or org login)", + "in": "path", + "name": "owner", "required": true, "type": "string", - "x-example": "technology" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" - } + "x-example": "torvalds" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Repository name", + "in": "path", + "name": "repo", + "required": true, + "type": "string", + "x-example": "linux" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] + "description": "Page number", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Results per page (max 100)", + "in": "query", + "name": "per_page", + "type": "integer" } ], - "summary": "Get Fast Company section headlines", - "tags": [ - "Fast Company" - ] - } - }, - "/fastcompany/news": { - "get": { - "description": "Returns the current Fast Company top stories. Each item has its title, canonical URL, summary, publication time, author and image. Takes no parameters, so there is no section or paging control.", - "operationId": "fastcompany-news", "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", + "description": "Wrapped release list", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or rate limit", "schema": { "$ref": "#/definitions/app.Response" } @@ -359436,52 +433789,61 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fast Company top stories", - "tags": [ - "Fast Company" - ] - } - }, - "/fastcompany/sections": { - "get": { - "description": "Returns the Fast Company section/topic inventory: the site's six primary verticals (Tech, Work Life, News, Design, Leadership, Impact) plus every topic tag accepted by GET /fastcompany/headlines (78 values total, too many to enumerate inline -- see that endpoint for the full, current, live-verified list), each linking to its public RSS feed.", - "operationId": "fastcompany-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Fast Company sections", + "summary": "List a repository's releases", "tags": [ - "Fast Company" + "GitHub" ] } }, - "/fiveguys/directory": { + "/github/search/repositories": { "get": { "consumes": [ "application/json" ], - "description": "Returns one level of Five Guys' US restaurant directory: the 50 states at the root, one state's cities when path is a state (e.g. `il`), and that city's restaurants when path is a city (e.g. `il/chicago`). Each child carries the path to pass back as this endpoint's `path`, and a `location_count` of how many restaurants sit under it. At the deepest level children are restaurants themselves (`is_location` true) -- pass their path to GET /fiveguys/store for the full profile. Use this to enumerate or browse locations; use GET /fiveguys/search or /fiveguys/nearby to find them by query or coordinate instead.", - "operationId": "fiveguys-directory", + "description": "Searches public GitHub repositories with the required GitHub search query `q`. Order with `sort` (`stars`, `forks`, `help-wanted-issues` or `updated`) and `order`, and page with `page` and `per_page` (max 100). The response has `total_count` and items with full name, owner, description, language, stars, forks, topics and license.", + "operationId": "github-search-repositories", "parameters": [ { - "description": "Optional. Directory path from a previous response's children[].path, e.g. \\", + "description": "GitHub repository search query", "in": "query", - "name": "path", + "name": "q", + "required": true, "type": "string", - "x-example": "il" + "x-example": "linux" + }, + { + "description": "Sort field", + "enum": [ + "stars", + "forks", + "help-wanted-issues", + "updated" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Sort order", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "order", + "type": "string" + }, + { + "description": "Page number", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Results per page (max 100)", + "in": "query", + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -359489,31 +433851,19 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/fiveguys.directoryResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Wrapped repository search result", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or rate limit", "schema": { "$ref": "#/definitions/app.Response" } @@ -359524,57 +433874,60 @@ "ApiKeyAuth": [] } ], - "summary": "Browse the Five Guys restaurant directory by state and city", + "summary": "Search public GitHub repositories", "tags": [ - "FiveGuys" + "GitHub" ] } }, - "/fiveguys/faq": { + "/github/search/users": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of Five Guys' published customer FAQ corpus -- 142 entries across 17 categories (Menu, Nutritional and Allergens, Ordering, Gift Card, Careers, Franchise, App, Company, The Crew, and others), filterable by category id and free text, in English (default) or Spanish via `lang`. Get valid category values from GET /fiveguys/faq-categories using the same `lang` -- category ids are language-specific.", - "operationId": "fiveguys-faq", + "description": "Searches public GitHub user accounts with the required GitHub search query `q`. Order with `sort` (`followers`, `repositories` or `joined`) and `order`, and page with `page` and `per_page` (max 100). The response has `total_count` and items with login, id, profile URL, account type and match score.", + "operationId": "github-search-users", "parameters": [ { - "description": "Optional. Free-text filter over question and answer text.", + "description": "GitHub user search query", "in": "query", - "name": "search", + "name": "q", + "required": true, "type": "string", - "x-example": "gluten" + "x-example": "torvalds" }, { - "description": "Optional. Comma-separated faq_category term ids, from GET /fiveguys/faq-categories.", + "description": "Sort field", + "enum": [ + "followers", + "repositories", + "joined" + ], "in": "query", - "name": "category", - "type": "string", - "x-example": "21" + "name": "sort", + "type": "string" }, { - "description": "Optional. 1-based page number, default 1.", + "description": "Sort order", + "enum": [ + "asc", + "desc" + ], "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "order", + "type": "string" }, { - "description": "Optional. Entries per page, 1-100, default 20.", + "description": "Page number", "in": "query", - "name": "per_page", - "type": "integer", - "x-example": 20 + "name": "page", + "type": "integer" }, { - "description": "Optional. Content language: en (default) or es.", - "enum": [ - "en", - "es" - ], + "description": "Results per page (max 100)", "in": "query", - "name": "lang", - "type": "string" + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -359582,25 +433935,19 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/fiveguys.faqResponseDoc" - } - }, - "400": { - "description": "Bad Request", + "description": "Wrapped user search result", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or rate limit", "schema": { "$ref": "#/definitions/app.Response" } @@ -359611,28 +433958,35 @@ "ApiKeyAuth": [] } ], - "summary": "List Five Guys' published customer FAQ", + "summary": "Search public GitHub users", "tags": [ - "FiveGuys" + "GitHub" ] } }, - "/fiveguys/faq-categories": { + "/github/trending": { "get": { "consumes": [ "application/json" ], - "description": "Returns every published Five Guys FAQ category with its id, name, slug, and entry count -- use an id here as GET /fiveguys/faq's category filter. Available in English (default) and Spanish via `lang`; ids differ between languages, so pass the same `lang` to both endpoints.", - "operationId": "fiveguys-faq-categories", + "description": "Lists the repositories currently trending on GitHub. Filter by programming `language` (such as `go` or `python`) and choose the window with `since` (`daily`, `weekly` or `monthly`). Each repository has its owner, name, URL, description, language, stars, forks and stars gained today.", + "operationId": "github-trending", "parameters": [ { - "description": "Optional. Content language: en (default) or es. Category ids differ per language -- feed ids from a given language back into GET /fiveguys/faq with the same lang.", + "description": "Programming language filter (e.g. go, python)", + "in": "query", + "name": "language", + "type": "string" + }, + { + "description": "Time window", "enum": [ - "en", - "es" + "daily", + "weekly", + "monthly" ], "in": "query", - "name": "lang", + "name": "since", "type": "string" } ], @@ -359641,19 +433995,19 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped trending repository list", "schema": { - "$ref": "#/definitions/fiveguys.faqCategoriesResponseDoc" + "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error", "schema": { "$ref": "#/definitions/app.Response" } @@ -359664,34 +434018,35 @@ "ApiKeyAuth": [] } ], - "summary": "List Five Guys FAQ categories", + "summary": "List trending GitHub repositories", "tags": [ - "FiveGuys" + "GitHub" ] } }, - "/fiveguys/menu": { + "/github/trending/developers": { "get": { "consumes": [ "application/json" ], - "description": "Returns Five Guys' public menu content: every category (Burgers, Fries, Shakes, Hot Dogs, Sandwiches, Drinks, Toppings) -- each with its own short description and cover image, plus its items' name, description, calories, and image -- or one category's items when category is given. Five Guys publishes no per-item price on this surface -- pricing is store-scoped and lives only behind its ordering flow, which this endpoint does not cover. Available in English (default) and Spanish via `lang`. Calories are shown exactly as published: a single value for most items, or a range (e.g. fries' \"530-1100\") for build-your-own items whose calories vary by size and toppings. Some items (drink categories, a few build-your-own items) publish no calorie figure at all; their calories field is omitted rather than estimated.", - "operationId": "fiveguys-menu", + "description": "Lists the developers currently trending on GitHub. Filter by programming `language` (such as `go` or `python`) and choose the window with `since` (`daily`, `weekly` or `monthly`). Each developer has a username, display name, profile URL and their popular repository.", + "operationId": "github-trending-developers", "parameters": [ { - "description": "Optional. One category slug to return only that category's items. Omit to return the full menu across every category. With lang=en (the default) one of: burgers, fries, shakes, dogs, sandwiches, drinks, toppings. With lang=es the slugs differ -- read them from a lang=es response's categories[].slug.", + "description": "Programming language filter (e.g. go, python)", "in": "query", - "name": "category", + "name": "language", "type": "string" }, { - "description": "Optional. Content language: en (default) or es.", + "description": "Time window", "enum": [ - "en", - "es" + "daily", + "weekly", + "monthly" ], "in": "query", - "name": "lang", + "name": "since", "type": "string" } ], @@ -359700,31 +434055,19 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/fiveguys.menuResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Wrapped trending developer list", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error", "schema": { "$ref": "#/definitions/app.Response" } @@ -359735,56 +434078,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Five Guys menu categories and items", + "summary": "List trending GitHub developers", "tags": [ - "FiveGuys" + "GitHub" ] } }, - "/fiveguys/nearby": { + "/github/user/{username}": { "get": { "consumes": [ "application/json" ], - "description": "Returns Five Guys restaurants within a radius of a latitude/longitude. Each result carries a full profile: a short area/plaza label distinguishing it from other locations, address, phone, weekly in-store hours plus a separate delivery-hours schedule when published, price tier, restaurant-amenity labels (e.g. Takeout, Dine In, Curbside), pickup/delivery service labels, order/delivery/menu URLs, a Google Place id, and distance in miles/kilometers from the given coordinate. `total_results` reports how many restaurants fall inside the radius overall, usually more than one page; use `offset` to page. A coordinate with no Five Guys nearby returns an empty list rather than an error.", - "operationId": "fiveguys-nearby", + "description": "Returns a public GitHub user's profile plus user-published social links. Email is included only when the user has made it public on their profile.", + "operationId": "github-user", "parameters": [ { - "description": "Search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 41.881953 - }, - { - "description": "Search center longitude", - "in": "query", - "name": "longitude", + "description": "GitHub username", + "in": "path", + "name": "username", "required": true, - "type": "number", - "x-example": -87.632362 - }, - { - "description": "Search radius in miles, 1-100 (default 25)", - "in": "query", - "name": "radius", - "type": "integer", - "x-example": 25 - }, - { - "description": "Maximum restaurants to return, 1-50 (default 10)", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 - }, - { - "description": "Result offset for paging through total_results (default 0)", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "type": "string", + "x-example": "torvalds" } ], "produces": [ @@ -359792,66 +434106,25 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/fiveguys.nearbyResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", + "description": "Wrapped user profile", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "400": { + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Find Five Guys restaurants near a coordinate", - "tags": [ - "FiveGuys" - ] - } - }, - "/fiveguys/nutrition": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Resolves the live location of Five Guys' current dated nutrition & allergen guide PDF (calories, full macro nutrition and allergen data per item) directly from fiveguys.com -- the guide's own file path changes when Five Guys republishes it (observed monthly), so this endpoint always discovers the current link rather than returning a fixed one. Returns the PDF's direct download URL plus best-effort size and last-modified metadata read from the PDF's own response headers. This endpoint returns metadata and a link to the guide, not its table parsed into structured fields -- pair it with GET /fiveguys/menu for structured per-item calories.", - "operationId": "fiveguys-nutrition", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/fiveguys.nutritionResponseDoc" - } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "User not found", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or rate limit", "schema": { "$ref": "#/definitions/app.Response" } @@ -359862,63 +434135,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get the current Five Guys nutrition & allergen PDF guide's location", + "summary": "Retrieve a GitHub user profile", "tags": [ - "FiveGuys" + "GitHub" ] } }, - "/fiveguys/ordering-locations": { + "/github/user/{username}/events": { "get": { "consumes": [ "application/json" ], - "description": "Returns Five Guys restaurants near a latitude/longitude as Five Guys' own ordering platform publishes them, with commerce detail no other endpoint in this family carries: per-store delivery fee, delivery and pickup order minimums, whether the store is currently accepting orders at all, the handoff modes an order placed now could actually use (delivery, pickup, curbside, dine-in, drive-thru, dispatch), group-order/coupon/loyalty support, how many days ahead an order may be scheduled, and the store's own order URL. Set `include_hours` to also return each store's dated business and delivery calendars -- concrete dated windows rather than the recurring weekly schedule the locator endpoints publish, so they reflect holiday and special hours a weekly schedule cannot express. This is a different upstream from GET /fiveguys/nearby, which returns the marketing/locator record: the two describe the same restaurants but do not share ids, and this one carries a per-store name (\"Five Guys Austin Arbor\") where the locator publishes the generic brand name. Use each result's `id` with GET /fiveguys/ordering-menu for that store's priced menu. A coordinate with no Five Guys nearby returns an empty list rather than an error.", - "operationId": "fiveguys-ordering-locations", + "description": "Lists a GitHub user's recent public events, identified by the required `username`. Page with `page` and `per_page` (max 100). Each event has its id, event type such as `PushEvent`, repository name, timestamp and public flag.", + "operationId": "github-user-events", "parameters": [ { - "description": "Search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 30.267153 - }, - { - "description": "Search center longitude", - "in": "query", - "name": "longitude", + "description": "GitHub username", + "in": "path", + "name": "username", "required": true, - "type": "number", - "x-example": -97.743061 - }, - { - "description": "Search radius in miles, 1-50 (default 20)", - "in": "query", - "name": "radius", - "type": "integer", - "x-example": 20 - }, - { - "description": "Maximum restaurants to return, 1-50 (default 10)", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "type": "string", + "x-example": "torvalds" }, { - "description": "Include each store's dated business and delivery calendars", + "description": "Page number", "in": "query", - "name": "include_hours", - "type": "boolean", - "x-example": true + "name": "page", + "type": "integer" }, { - "description": "Days of calendar to return from today, 1-30 (default 7). Only meaningful with include_hours.", + "description": "Results per page (max 100)", "in": "query", - "name": "days", - "type": "integer", - "x-example": 7 + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -359926,25 +434175,19 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/fiveguys.orderingLocationsResponseDoc" - } - }, - "400": { - "description": "Bad Request", + "description": "Wrapped event list", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or rate limit", "schema": { "$ref": "#/definitions/app.Response" } @@ -359955,27 +434198,39 @@ "ApiKeyAuth": [] } ], - "summary": "Find Five Guys restaurants near a coordinate with ordering details", + "summary": "List a GitHub user's recent public activity", "tags": [ - "FiveGuys" + "GitHub" ] } }, - "/fiveguys/ordering-menu": { + "/github/user/{username}/followers": { "get": { "consumes": [ "application/json" ], - "description": "Returns one restaurant's full menu exactly as Five Guys' own ordering platform sells it, including real per-item prices -- the one field no other endpoint in this family can surface (GET /fiveguys/menu is fiveguys.com's own marketing content and carries no price at all). Categories and items are returned with name, description, price, calories (a single value or a real range, e.g. a fountain drink sized at checkout), an image, and whether the platform currently has the item available. id is the ordering platform's own restaurant id from GET /fiveguys/ordering-locations' locations[].id -- it is not a Yext entity id and does not correspond to any id from GET /fiveguys/search, /fiveguys/nearby, /fiveguys/directory, or /fiveguys/store.", - "operationId": "fiveguys-ordering-menu", + "description": "Lists the public accounts that follow a GitHub user, identified by the required `username`. Page with `page` and `per_page` (max 100). Each follower has their login, id, avatar URL, profile URL and account type.", + "operationId": "github-user-followers", "parameters": [ { - "description": "The ordering platform's restaurant id, from GET /fiveguys/ordering-locations' locations[].id", - "in": "query", - "name": "id", + "description": "GitHub username", + "in": "path", + "name": "username", "required": true, "type": "string", - "x-example": "23841" + "x-example": "torvalds" + }, + { + "description": "Page number", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Results per page (max 100)", + "in": "query", + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -359983,31 +434238,19 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/fiveguys.orderingMenuResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Wrapped follower list", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or rate limit", "schema": { "$ref": "#/definitions/app.Response" } @@ -360018,41 +434261,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Five Guys store's priced menu from the ordering platform", + "summary": "List a GitHub user's followers", "tags": [ - "FiveGuys" + "GitHub" ] } }, - "/fiveguys/search": { + "/github/user/{username}/following": { "get": { "consumes": [ "application/json" ], - "description": "Returns Five Guys restaurants matching a free-text location query -- a city, a zip/postal code, a street address, or a landmark -- the same way restaurants.fiveguys.com's own locator search box works. Yext's own query understanding geocodes the text server-side, so no separate geocoding call is needed. Each result carries a full profile: a short area/plaza label distinguishing it from other locations, address, phone, weekly in-store hours plus a separate delivery-hours schedule when published, price tier, restaurant-amenity labels (e.g. Takeout, Dine In, Curbside), pickup/delivery service labels, order/delivery/menu URLs, a Google Place id, and distance in miles/kilometers from the resolved query location. `total_results` reports how many restaurants matched overall, usually more than one page; use `offset` to page. A query that resolves to nowhere Five Guys operates returns an empty list rather than an error.", - "operationId": "fiveguys-search", + "description": "Lists the public accounts a GitHub user follows, identified by the required `username`. Page with `page` and `per_page` (max 100). Each account has its login, id, avatar URL, profile URL and account type.", + "operationId": "github-user-following", "parameters": [ { - "description": "Free-text location: a city, a zip/postal code, a street address, or a landmark", - "in": "query", - "name": "query", + "description": "GitHub username", + "in": "path", + "name": "username", "required": true, "type": "string", - "x-example": "Chicago, IL" + "x-example": "torvalds" }, { - "description": "Maximum restaurants to return, 1-50 (default 10)", + "description": "Page number", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "page", + "type": "integer" }, { - "description": "Result offset for paging through total_results (default 0)", + "description": "Results per page (max 100)", "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -360060,25 +434301,19 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/fiveguys.searchResponseDoc" - } - }, - "400": { - "description": "Bad Request", + "description": "Wrapped following list", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or rate limit", "schema": { "$ref": "#/definitions/app.Response" } @@ -360089,33 +434324,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Five Guys restaurants by free-text location", + "summary": "List who a GitHub user follows", "tags": [ - "FiveGuys" + "GitHub" ] } }, - "/fiveguys/store": { + "/github/user/{username}/pinned": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Five Guys restaurant's full published profile by its locator slug -- address, phone, weekly in-store hours, separate delivery hours, coordinate, Google Place id, restaurant-amenity labels, and order/delivery/menu URLs. Get a path from GET /fiveguys/search or /fiveguys/nearby's `locations[].path`, or from GET /fiveguys/directory's `children[].path` where `is_location` is true. It also returns three detail-only extras that search and nearby results do not carry: `description` (this restaurant's own blurb, templated but genuinely per-location), `photos` (its published gallery images, omitted for the many locations that publish none), and `breadcrumbs` (the directory trail above it, each entry's `path` feeding straight back into GET /fiveguys/directory). Two fields available on search and nearby results are not published on this surface and are omitted here: `price_range` and `pickup_and_delivery_services`. A `profile` block, populated best-effort from a second Yext key, adds further per-restaurant detail no other field in this family carries: `google_attributes` (structured amenity flags, richer than `services`), `review_page_url`/`review_invite_url`, `featured_message`/`featured_message_url`, `google_cid`/`facebook_store_id`, `routable_latitude`/`routable_longitude` (a driving destination, distinct from the display coordinate), `payment_options`, `meals_served`, `services`, `permanently_closed`, `directory_listing_url`, `franchisee_group` (the operator of this specific restaurant -- a corporate code or a franchisee's own company name), `facebook_vanity_url` (this location's own Facebook handle), and `faq` (this restaurant's own generated question set, distinct from the national corpus GET /fiveguys/faq serves). Passing a state or city path returns 404 -- use GET /fiveguys/directory for those.", - "operationId": "fiveguys-store", + "description": "Returns the repositories a GitHub user has pinned on their profile, identified by the required `username`. Each has its owner, name, URL, description, language, stars and forks. The list is empty when the user has pinned nothing.", + "operationId": "github-user-pinned", "parameters": [ { - "description": "The restaurant's locator slug, e.g. \\", - "in": "query", - "name": "path", - "type": "string", - "x-example": "703-s-seely-ave" - }, - { - "description": "The restaurant's entity id, e.g. \\", - "in": "query", - "name": "id", + "description": "GitHub username", + "in": "path", + "name": "username", + "required": true, "type": "string", - "x-example": "4060" + "x-example": "torvalds" } ], "produces": [ @@ -360123,31 +434352,19 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/fiveguys.storeResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Wrapped pinned repository list", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or rate limit", "schema": { "$ref": "#/definitions/app.Response" } @@ -360158,35 +434375,72 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Five Guys restaurant by its locator path", + "summary": "List a GitHub user's pinned repositories", "tags": [ - "FiveGuys" + "GitHub" ] } }, - "/fiverr/gig/{username}/{slug}": { + "/github/user/{username}/repos": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Fiverr gig detail page: title, description, category, pricing packages (basic/standard/premium tiers with price and delivery time), rating, review count, orders in queue, tags, gallery images, and a seller summary (level, rating, response time, languages). Seller level uses the same values on the search, seller and gig endpoints: level_one_seller, level_two_seller, top_rated_seller, or new_seller.", - "operationId": "fiverr-gig", + "description": "Lists the public repositories of a GitHub user, identified by the required `username`. Filter with `type` (`all`, `owner` or `member`), order with `sort` (`created`, `updated`, `pushed` or `full_name`) and `direction`, and page with `page` and `per_page` (max 100). Each repository has its name, description, language, stars, forks, topics, fork flag and last push time.", + "operationId": "github-user-repos", "parameters": [ { - "description": "Fiverr seller username, e.g. from a search result's seller_username field", + "description": "GitHub username", "in": "path", "name": "username", "required": true, "type": "string", - "x-example": "inshape_studio" + "x-example": "torvalds" }, { - "description": "Fiverr gig URL slug, the trailing path segment after the username in a gig URL", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "do-modern-minimalist-logo-design-for-your-business" + "description": "Sort field", + "enum": [ + "created", + "updated", + "pushed", + "full_name" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "direction", + "type": "string" + }, + { + "description": "Repository type", + "enum": [ + "all", + "owner", + "member" + ], + "in": "query", + "name": "type", + "type": "string" + }, + { + "description": "Page number", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Results per page (max 100)", + "in": "query", + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -360194,31 +434448,19 @@ ], "responses": { "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/fiverr.gigResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Wrapped repository list", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or rate limit", "schema": { "$ref": "#/definitions/app.Response" } @@ -360229,34 +434471,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fiverr gig detail", + "summary": "List a GitHub user's public repositories", "tags": [ - "Fiverr" + "GitHub" ] } }, - "/fiverr/search": { + "/gizmodo/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Fiverr's public gig listings by free-text keyword, returning gig summaries (title, seller username, seller level, rating, review count, starting price, category, thumbnail image). Seller level uses the same values on the search, seller and gig endpoints: level_one_seller, level_two_seller, top_rated_seller, or new_seller.", - "operationId": "fiverr-search", + "description": "Returns public Gizmodo article metadata and body paragraphs from a canonical article URL. Gizmodo articles are free to read, so the full body is returned.", + "operationId": "gizmodo-article", "parameters": [ { - "description": "Free-text gig search keyword", + "description": "Canonical Gizmodo article URL", "in": "query", - "name": "q", + "name": "url", "required": true, "type": "string", - "x-example": "logo design" - }, - { - "description": "1-based result page. Defaults to 1.", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 2 + "x-example": "https://gizmodo.com/meta-muse-charm-ai-keychain-2000816515" } ], "produces": [ @@ -360266,7 +434498,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fiverr.searchResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -360275,8 +434507,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -360293,27 +434525,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search Fiverr gigs", + "summary": "Get Gizmodo article content", "tags": [ - "Fiverr" + "Gizmodo" ] } }, - "/fiverr/seller/{username}": { + "/gizmodo/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a Fiverr seller profile: display name, one-liner title, description, country, seller level, verification status, hourly rate, spoken languages, join date, and the seller's gig ids. Seller level uses the same values on the search, seller and gig endpoints: level_one_seller, level_two_seller, top_rated_seller, or new_seller.", - "operationId": "fiverr-seller", + "description": "Returns a Gizmodo author's name, job title, biography, headshot, social links, and most recent articles from a canonical author URL.", + "operationId": "gizmodo-author", "parameters": [ { - "description": "Fiverr seller username, e.g. from a search result's seller_username field", - "in": "path", - "name": "username", + "description": "Canonical Gizmodo author URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "inshape_studio" + "x-example": "https://gizmodo.com/author/jpero" } ], "produces": [ @@ -360323,7 +434552,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fiverr.sellerResponseDoc" + "$ref": "#/definitions/publicnews.gizmodoAuthorResponseDoc" } }, "400": { @@ -360338,12 +434567,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -360356,35 +434579,75 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fiverr seller profile", + "summary": "Get a Gizmodo author profile", "tags": [ - "Fiverr" + "Gizmodo" ] } }, - "/flashscore/calendar": { + "/gizmodo/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns public tournament calendar entries for the current season, sorted by start date, with date ranges, UTC start and end times, host country, winners and winner paths when decided, and competition paths.", - "operationId": "flashscore-calendar", + "description": "Returns the latest Gizmodo headlines for one section. `section` is required and takes a slug such as `gadgets`, `artificial-intelligence`, `io9`, `science` or `deals`; any other value returns an invalid-params error. Each item has its title, URL, summary, publication time, author and image. Use `gizmodo-sections` to list the slugs.", + "operationId": "gizmodo-headlines", "parameters": [ { - "description": "Calendar category from flashscore-calendar-categories", + "description": "Gizmodo section slug", "enum": [ - "tennis-atp", - "tennis-wta", - "golf-pga", - "golf-dp-world", - "badminton-bwf", - "motorsport-f1" + "tech", + "artificial-intelligence", + "commerce", + "crime", + "cryptocurrencies", + "culture", + "gadgets", + "internet", + "politics", + "privacy-and-security", + "robots", + "social-media", + "sploid", + "tech-policy", + "transportation", + "science", + "biology", + "health", + "human-history", + "physics", + "space", + "io9", + "anime", + "books-comics", + "corporate-culture", + "games", + "io9-reviews", + "movies", + "television", + "theme-parks-destinations", + "toys-and-collectibles", + "trailer-frenzy", + "earther", + "climate-change", + "conservation", + "earth-science", + "energy", + "environmental-justice", + "reviews", + "desktops", + "gaming", + "headphones", + "home-entertainment", + "laptops", + "other-gadgets", + "phones", + "tablets", + "wearables", + "deals" ], "in": "query", - "name": "category", + "name": "section", "required": true, "type": "string", - "x-example": "tennis-atp" + "x-example": "tech" } ], "produces": [ @@ -360394,7 +434657,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.calendarResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -360403,12 +434666,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -360421,19 +434678,16 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore season calendar", + "summary": "Get Gizmodo section headlines", "tags": [ - "Flashscore" + "Gizmodo" ] } }, - "/flashscore/calendar-categories": { + "/gizmodo/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the Flashscore season calendar sections currently available, covering ATP, WTA, golf, badminton and Formula 1. Each category has its `key`, name, sport and canonical path. Use a `key` with the Flashscore calendar endpoint. It takes no parameters.", - "operationId": "flashscore-calendar-categories", + "description": "Returns Gizmodo's current top stories from the main site-wide listing, with no parameters. Each item has its title, URL, summary, publication time, author and lead image.", + "operationId": "gizmodo-news", "produces": [ "application/json" ], @@ -360441,7 +434695,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.calendarCategoriesResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -360456,80 +434716,16 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore season calendar categories", + "summary": "Get Gizmodo top stories", "tags": [ - "Flashscore" + "Gizmodo" ] } }, - "/flashscore/competitions": { + "/gizmodo/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Discovers competitions present in a selected sport's score feed, including the provider competition id, label, region, canonical path, and event count. This is the active feed-date inventory, not an archive of inactive or historical seasons.", - "operationId": "flashscore-competitions", - "parameters": [ - { - "description": "Sport key", - "enum": [ - "football", - "tennis", - "basketball", - "hockey", - "golf", - "formula-1", - "baseball", - "snooker", - "american-football", - "aussie-rules", - "badminton", - "bandy", - "beach-soccer", - "beach-volleyball", - "boxing", - "cricket", - "cycling", - "darts", - "esports", - "field-hockey", - "floorball", - "futsal", - "handball", - "horse-racing", - "kabaddi", - "mma", - "motorsport", - "netball", - "pesapallo", - "rugby-league", - "rugby-union", - "table-tennis", - "volleyball", - "water-polo", - "winter-sports", - "moto-racing", - "ski-jumping", - "alpine-skiing", - "cross-country-skiing", - "biathlon" - ], - "in": "query", - "name": "sport", - "required": true, - "type": "string", - "x-example": "football" - }, - { - "description": "Days from today; -7 to 7; defaults to 0", - "in": "query", - "maximum": 7, - "minimum": -7, - "name": "day_offset", - "type": "integer", - "x-example": 0 - } - ], + "description": "Returns the Gizmodo section inventory: its five top-level verticals (Tech, Science, io9, Earther, Reviews), their sub-topics, and Deals, each linking to its public RSS feed. Every slug is accepted by the headlines endpoint.", + "operationId": "gizmodo-sections", "produces": [ "application/json" ], @@ -360537,19 +434733,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.competitionsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -360558,41 +434742,24 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore competitions by sport and date", + "summary": "Get Gizmodo sections", "tags": [ - "Flashscore" + "Gizmodo" ] } }, - "/flashscore/entity-news": { + "/globalnews/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the article ids of Flashscore's own news layout for one entity: the featured article plus the 25 most recent ones, grouped in the sections Flashscore shows. The layout has no pagination. Resolve the ids with flashscore-news-article (metadata) or flashscore-news-article-body (full text). Teams and players share one layout type. A tournament is a tournament template id (the competition id in event lists); a sport is one of the SPORT entity ids listed by flashscore-news-categories. An id with no news layout returns not found.", - "operationId": "flashscore-entity-news", - "parameters": [ - { - "description": "Entity type", - "enum": [ - "team", - "player", - "tournament", - "sport" - ], - "in": "query", - "name": "type", - "required": true, - "type": "string", - "x-example": "player" - }, + "description": "Returns one Global News article by `url`, a canonical `globalnews.ca` link of the form `/news///` or `/the-curator///`. The response has the title, description, section, authors, lead image, publish and update times, the body as `paragraphs`, and a `paywalled` flag.", + "operationId": "globalnews-article", + "parameters": [ { - "description": "Eight-character entity id: team or player id, tournament template id, or a SPORT entity id from flashscore-news-categories", + "description": "Canonical Global News article URL", "in": "query", - "name": "id", + "name": "url", "required": true, "type": "string", - "x-example": "UmV9iQmE" + "x-example": "https://globalnews.ca/news/12070709/example-article-slug/" } ], "produces": [ @@ -360602,19 +434769,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/flashscore.EntityNewsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -360641,27 +434796,24 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore news for a team, player, tournament or sport", + "summary": "Get Global News article content", "tags": [ - "Flashscore" + "Global News" ] } }, - "/flashscore/match-box-score": { + "/globalnews/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the per-player box score of a basketball, hockey or baseball match: one table per team (hockey adds a goalkeeper table and baseball a pitcher table) with the statistic columns the provider defines for that sport, and each player's value per column, or null where Flashscore shows a dash. Other sports and matches without box-score coverage return not found.", - "operationId": "flashscore-match-box-score", + "description": "Returns a Global News author profile by `url`, a canonical `https://globalnews.ca/author//` link. The response has the author's `name`, `biography`, `image_url` and a list of recent articles. `title`, `image_url` and `biography` appear only if the author page shows them, and each article's `published_at` is relative text such as `2 hours` or `Sep 16`, not a timestamp.", + "operationId": "globalnews-author", "parameters": [ { - "description": "Eight-character Flashscore match id", + "description": "Canonical Global News author URL", "in": "query", - "name": "id", + "name": "url", "required": true, "type": "string", - "x-example": "KzoOQu6j" + "x-example": "https://globalnews.ca/author/jane-doe/" } ], "produces": [ @@ -360671,7 +434823,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.matchBoxScoreResponseDoc" + "$ref": "#/definitions/publicnews.globalnewsAuthorResponseDoc" } }, "400": { @@ -360698,27 +434850,59 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore basketball, hockey and baseball box score", + "summary": "Get a Global News author profile", "tags": [ - "Flashscore" + "Global News" ] } }, - "/flashscore/match-darts": { + "/globalnews/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a darts match leg by leg: who started and won each leg, the leg score, every visit with the points scored, the score remaining and 180 or 140-plus highlights, and the score the winner finished from, plus the statistics comparison (three-dart average, 180s, 140+ and 100+ visits, checkout percentage, highest checkout). Set-play matches add the set of each leg, the leg score within the set and the statistics of every set; a live match includes the leg being played. Streamed events whose scoring is not tracked and non-darts matches return not found.", - "operationId": "flashscore-match-darts", + "description": "Returns recent Global News headlines for one section. `section` is required and takes a slug such as `canada`, `world`, `money`, `us-news`, `the-curator` or a local-station slug like `toronto` or `calgary`. Each item has its title and URL, plus summary, author, publication time and image when the outlet provides them.", + "operationId": "globalnews-headlines", "parameters": [ { - "description": "Eight-character Flashscore match id", + "description": "Global News RSS section slug", + "enum": [ + "world", + "canada", + "politics", + "money", + "health", + "entertainment", + "environment", + "lifestyle", + "perspectives", + "sports", + "commentary", + "us-news", + "the-curator", + "national", + "barrie", + "bc", + "calgary", + "edmonton", + "guelph", + "halifax", + "hamilton", + "kingston", + "lethbridge", + "london", + "montreal", + "new-brunswick", + "okanagan", + "ottawa", + "peterborough", + "regina", + "saskatoon", + "toronto", + "winnipeg" + ], "in": "query", - "name": "id", + "name": "section", "required": true, "type": "string", - "x-example": "KMrRR6R1" + "x-example": "world" } ], "produces": [ @@ -360728,7 +434912,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.matchDartsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -360737,12 +434921,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -360755,29 +434933,16 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore darts throw-by-throw and statistics", + "summary": "Get Global News section headlines", "tags": [ - "Flashscore" + "Global News" ] } }, - "/flashscore/match-h2h": { + "/globalnews/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Flashscore's public head-to-head and recent-results feed for a match id copied from a Flashscore match URL. The raw upstream feed is preserved as text because its format is not JSON.", - "operationId": "flashscore-match-h2h", - "parameters": [ - { - "description": "Eight-character Flashscore match id", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "xtmHKGT0" - } - ], + "description": "Returns the latest top stories from Global News (globalnews.ca), with no parameters. Each item has its title and URL, plus summary, author, publication time and image when the outlet provides them, so it works as a quick check on what the outlet is leading with.", + "operationId": "globalnews-news", "produces": [ "application/json" ], @@ -360785,17 +434950,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.responseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -360812,27 +434971,50 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore match head-to-head and recent results", + "summary": "Get Global News top stories", "tags": [ - "Flashscore" + "Global News" ] } }, - "/flashscore/match-highlights": { + "/globalnews/sections": { "get": { - "consumes": [ + "description": "Returns the public Global News RSS section inventory used by the headlines endpoint, covering topical sections and every regional/city hub with its own feed.", + "operationId": "globalnews-sections", + "produces": [ "application/json" ], - "description": "Returns public highlight identifiers, metadata, and video links as the provider's raw delimited text. Video content is not fetched or included. Matches without available highlights return not found.", - "operationId": "flashscore-match-highlights", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Global News RSS sections", + "tags": [ + "Global News" + ] + } + }, + "/globeandmail/article": { + "get": { + "description": "Returns one public Globe and Mail article's metadata and full body paragraphs from a canonical article URL. The Globe and Mail runs a metered paywall on most staff-bylined stories; those return a 403 permission error rather than a truncated or fabricated body -- see the endpoint markdown for the exact detection method.", + "operationId": "globeandmail-article", "parameters": [ { - "description": "Eight-character Flashscore match id", + "description": "Canonical Globe and Mail article URL", "in": "query", - "name": "id", + "name": "url", "required": true, "type": "string", - "x-example": "j52jHsN8" + "x-example": "https://www.theglobeandmail.com/canada/article-example-story/" } ], "produces": [ @@ -360842,7 +435024,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.responseDoc" + "$ref": "#/definitions/globeandmail.articleResponseDoc" } }, "400": { @@ -360851,12 +435033,24 @@ "$ref": "#/definitions/app.Response" } }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -360869,27 +435063,24 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore match highlights", + "summary": "Get a Globe and Mail article's content", "tags": [ - "Flashscore" + "GlobeAndMail" ] } }, - "/flashscore/match-info": { + "/globeandmail/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the public match information feed, including available venue, city, capacity, and broadcast listings, as the provider's raw delimited text.", - "operationId": "flashscore-match-info", + "description": "Returns one Globe and Mail reporter's public profile: name, job title, location, biography, headshot, contact/social links, and their recent articles from a canonical author URL.", + "operationId": "globeandmail-author", "parameters": [ { - "description": "Eight-character Flashscore match id", + "description": "Canonical Globe and Mail author URL", "in": "query", - "name": "id", + "name": "url", "required": true, "type": "string", - "x-example": "xtmHKGT0" + "x-example": "https://www.theglobeandmail.com/authors/example-reporter/" } ], "produces": [ @@ -360899,7 +435090,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.responseDoc" + "$ref": "#/definitions/globeandmail.authorResponseDoc" } }, "400": { @@ -360914,6 +435105,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -360926,27 +435123,38 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore match venue and broadcast information", + "summary": "Get a Globe and Mail reporter profile", "tags": [ - "Flashscore" + "GlobeAndMail" ] } }, - "/flashscore/match-lineups": { + "/globeandmail/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the public starting-lineup and formation feed as the provider's raw delimited text. Matches without published lineups return not found.", - "operationId": "flashscore-match-lineups", + "description": "Returns the current public feed for one Globe and Mail section: each story's title, canonical URL, summary, author, publication time, and lead image. Section must be one of the slugs returned by /globeandmail/sections: `canada`, `world`, `business`, `investing`, `personal-finance`, `politics`, `opinion`, `culture`, `sports`, `life`, `real-estate`, `drive`.", + "operationId": "globeandmail-headlines", "parameters": [ { - "description": "Eight-character Flashscore match id", + "description": "Globe and Mail section slug from /globeandmail/sections", + "enum": [ + "canada", + "world", + "business", + "investing", + "personal-finance", + "politics", + "opinion", + "culture", + "sports", + "life", + "real-estate", + "drive" + ], "in": "query", - "name": "id", + "name": "section", "required": true, "type": "string", - "x-example": "j52jHsN8" + "x-example": "canada" } ], "produces": [ @@ -360956,7 +435164,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.responseDoc" + "$ref": "#/definitions/globeandmail.headlinesResponseDoc" } }, "400": { @@ -360971,6 +435179,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -360983,29 +435197,54 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore match lineups and formations", + "summary": "Get the latest stories in a Globe and Mail section", "tags": [ - "Flashscore" + "GlobeAndMail" ] } }, - "/flashscore/match-missing-players": { + "/globeandmail/news": { "get": { - "consumes": [ + "description": "Returns The Globe and Mail's current public top-stories feed: each story's title, canonical URL, summary, author, publication time, and lead image.", + "operationId": "globeandmail-news", + "produces": [ "application/json" ], - "description": "Returns the players listed as missing and as doubtful for each side of a match, with the stated reason. Empty lists are a valid answer: nobody is reported missing, or the match has no coverage. Expected return dates are not provided by the source.", - "operationId": "flashscore-match-missing-players", - "parameters": [ + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/globeandmail.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Eight-character Flashscore match id", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "f75igXFG" + "ApiKeyAuth": [] } ], + "summary": "Get the latest Globe and Mail stories", + "tags": [ + "GlobeAndMail" + ] + } + }, + "/globeandmail/sections": { + "get": { + "description": "Lists every Globe and Mail section accepted by /globeandmail/headlines, with its slug, display name, and landing-page URL. This is the full public, RSS-backed section taxonomy from the site's primary navigation.", + "operationId": "globeandmail-sections", "produces": [ "application/json" ], @@ -361013,17 +435252,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.matchMissingPlayersResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/globeandmail.sectionsResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -361040,27 +435273,42 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore missing and doubtful players", + "summary": "List Globe and Mail sections", "tags": [ - "Flashscore" + "GlobeAndMail" ] } }, - "/flashscore/match-momentum": { + "/glovo/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns the per-minute momentum series of a football match (values from -1 to 1, positive favouring the home side) with the half and stoppage-time marker of each minute, and the key events plotted on it (goals, own goals, penalties, red cards) with their team and player. Matches without momentum coverage and non-football matches return not found.", - "operationId": "flashscore-match-momentum", + "description": "Returns a city's top-level store categories (for example Food, Groceries, Shops, Pharmacy & Beauty). Each carries the id that /glovo/stores/filters and /glovo/stores take as category_id. Only categories of type STORES have a store list; other types, such as package delivery, are listed but have none. The set differs by city.", + "operationId": "glovo-categories", "parameters": [ { - "description": "Eight-character Flashscore football match id", + "description": "Two-letter country code, from /glovo/cities.", "in": "query", - "name": "id", + "name": "country", "required": true, "type": "string", - "x-example": "j52jHsN8" + "x-example": "es" + }, + { + "description": "City slug (madrid) or city code (mad), from /glovo/cities.", + "in": "query", + "name": "city", + "required": true, + "type": "string", + "x-example": "madrid" + }, + { + "description": "Optional two-letter response language; defaults to en. A city's supported languages are in /glovo/city's supported_languages.", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -361070,7 +435318,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.matchMomentumResponseDoc" + "$ref": "#/definitions/glovo.categoriesResponseDoc" } }, "400": { @@ -361097,27 +435345,26 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore football match momentum", + "summary": "List a Glovo city's store categories", "tags": [ - "Flashscore" + "Glovo" ] } }, - "/flashscore/match-news": { + "/glovo/cities": { "get": { "consumes": [ "application/json" ], - "description": "Returns article references from the public news layout associated with a match. Article content is not included; use the article id with flashscore-news-article for public metadata.", - "operationId": "flashscore-match-news", + "description": "Returns Glovo's live directory of every country and city it delivers in, read from the directory its own landing page embeds. Each city carries the slug and the city code; every other Glovo endpoint takes country plus city (either the slug or the code) from here. The countries field always lists every supported country code, so the optional country filter's value space is discoverable; a country Glovo does not serve returns a 400 rather than an empty list. As of 2026-11-02 the directory covers 24 countries and 1,330 cities.", + "operationId": "glovo-cities", "parameters": [ { - "description": "Eight-character Flashscore match id", + "description": "Optional two-letter country code to restrict the directory to, e.g. es, it, pl. Omit for every country.", "in": "query", - "name": "id", - "required": true, + "name": "country", "type": "string", - "x-example": "xtmHKGT0" + "x-example": "es" } ], "produces": [ @@ -361127,7 +435374,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.matchNewsResponseDoc" + "$ref": "#/definitions/glovo.citiesResponseDoc" } }, "400": { @@ -361148,269 +435395,42 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore match news references", + "summary": "List the countries and cities Glovo serves", "tags": [ - "Flashscore" + "Glovo" ] } }, - "/flashscore/match-odds": { + "/glovo/city": { "get": { "consumes": [ "application/json" ], - "description": "Returns bookmaker odds for a match in one viewer market, grouped by betting type and scope with every bookmaker's priced outcomes, opening odds, handicap or total lines, and a selection label. Bookmakers and prices depend on the market, so pick geo (and subdivision for US or CA) from flashscore-odds-geos. A market with no licensed bookmakers returns empty lists. Promotional bonus text is not included.", - "operationId": "flashscore-match-odds", + "description": "Returns one city's market settings: its name, whether it is enabled, the languages it supports (the values the language parameter of every Glovo endpoint accepts for that city), its currency and its timezone. A city or country Glovo does not serve returns a 400 pointing to /glovo/cities.", + "operationId": "glovo-city", "parameters": [ { - "description": "Eight-character Flashscore match id", + "description": "Two-letter country code, from /glovo/cities.", "in": "query", - "name": "id", + "name": "country", "required": true, "type": "string", - "x-example": "p0aFxkkn" - }, - { - "description": "Viewer market country code from flashscore-odds-geos; defaults to GB", - "enum": [ - "AE", - "AL", - "AM", - "AO", - "AR", - "AT", - "AU", - "AZ", - "BA", - "BD", - "BE", - "BG", - "BO", - "BR", - "BY", - "CA", - "CH", - "CI", - "CL", - "CM", - "CN", - "CO", - "CR", - "CY", - "CZ", - "DE", - "DK", - "DO", - "DZ", - "EC", - "EE", - "EG", - "ES", - "ET", - "FI", - "FR", - "GB", - "GE", - "GH", - "GR", - "GT", - "HK", - "HN", - "HR", - "HU", - "ID", - "IE", - "IL", - "IN", - "IQ", - "IR", - "IS", - "IT", - "JO", - "JP", - "KE", - "KG", - "KH", - "KR", - "KW", - "KZ", - "LA", - "LB", - "LK", - "LT", - "LU", - "LV", - "LY", - "MA", - "MD", - "ME", - "MK", - "MM", - "MN", - "MT", - "MX", - "MY", - "NG", - "NI", - "NL", - "NO", - "NP", - "NZ", - "PA", - "PE", - "PH", - "PK", - "PL", - "PT", - "PY", - "QA", - "RO", - "RS", - "RU", - "SA", - "SD", - "SE", - "SG", - "SI", - "SK", - "SN", - "SV", - "TH", - "TN", - "TR", - "TW", - "TZ", - "UA", - "UG", - "US", - "UY", - "UZ", - "VE", - "VN", - "XK", - "ZA", - "ZM", - "ZW" - ], - "in": "query", - "name": "geo", - "type": "string", - "x-example": "GB" - }, - { - "description": "US state (with geo US) or Canadian province (with geo CA) code from flashscore-odds-geos; rejected with any other geo", - "enum": [ - "AB", - "AK", - "AL", - "AR", - "AZ", - "BC", - "CA", - "CO", - "CT", - "DC", - "DE", - "FL", - "GA", - "HI", - "IA", - "ID", - "IL", - "IN", - "KS", - "KY", - "LA", - "MA", - "MB", - "MD", - "ME", - "MI", - "MN", - "MO", - "MS", - "MT", - "NB", - "NC", - "ND", - "NE", - "NH", - "NJ", - "NL", - "NM", - "NS", - "NT", - "NU", - "NV", - "NY", - "OH", - "OK", - "ON", - "OR", - "PA", - "PE", - "QC", - "RI", - "SC", - "SD", - "SK", - "TN", - "TX", - "UT", - "VA", - "VT", - "WA", - "WI", - "WV", - "WY", - "YT" - ], - "in": "query", - "name": "subdivision", - "type": "string", - "x-example": "NJ" + "x-example": "es" }, { - "description": "Optional filter to one betting type", - "enum": [ - "HOME_DRAW_AWAY", - "HOME_AWAY", - "DRAW_NO_BET", - "DOUBLE_CHANCE", - "ASIAN_HANDICAP", - "EUROPEAN_HANDICAP", - "OVER_UNDER", - "BOTH_TEAMS_TO_SCORE", - "CORRECT_SCORE", - "HALF_FULL_TIME", - "ODD_OR_EVEN", - "TO_QUALIFY", - "NEXT_GOAL", - "TOP_POSITION_MERGED", - "TO_WIN_AND_TOP_POSITION", - "WIN_EACH_WAY" - ], + "description": "City slug (madrid) or city code (mad), from /glovo/cities.", "in": "query", - "name": "betting_type", + "name": "city", + "required": true, "type": "string", - "x-example": "HOME_DRAW_AWAY" + "x-example": "madrid" }, { - "description": "Optional filter to one scope", - "enum": [ - "FULL_TIME", - "FULL_TIME_OVER_TIME", - "FIRST_HALF", - "SECOND_HALF", - "FIRST_PERIOD", - "FIRST_QUARTER", - "FIRST_SET", - "SECOND_SET" - ], + "description": "Optional two-letter response language; defaults to en. A city's supported languages are in /glovo/city's supported_languages.", "in": "query", - "name": "scope", + "name": "language", "type": "string", - "x-example": "FULL_TIME" + "x-example": "en" } ], "produces": [ @@ -361420,7 +435440,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.matchOddsResponseDoc" + "$ref": "#/definitions/glovo.cityResponseDoc" } }, "400": { @@ -361447,50 +435467,50 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore match bookmaker odds comparison", + "summary": "Get one Glovo city's market settings", "tags": [ - "Flashscore" + "Glovo" ] } }, - "/flashscore/match-player-stats": { + "/glovo/store": { "get": { "consumes": [ "application/json" ], - "description": "Returns per-player statistics for a football match with player-statistics coverage: the Flashscore rating, highlight badges and every statistic of the player-statistics tabs (shots, expected goals, passes, duels, goalkeeping and more) with display text, unrounded value and rank, plus the statistic and group definitions. The full response is large; narrow it with group, or with player_id for a single player. Other sports and matches without coverage return not found.", - "operationId": "flashscore-match-player-stats", + "description": "Returns one store's public detail: name, slug, category, address and coordinates, whether it is open and enabled, rating label and count, delivery and service fees, cuisine filters, promotions and its default address_id. An unknown store_id returns a 404.", + "operationId": "glovo-store", "parameters": [ { - "description": "Eight-character Flashscore football match id", + "description": "Two-letter country code, from /glovo/cities.", "in": "query", - "name": "id", + "name": "country", "required": true, "type": "string", - "x-example": "j52jHsN8" + "x-example": "es" }, { - "description": "Eight-character Flashscore player id from this match; returns only that player", + "description": "City slug (madrid) or city code (mad), from /glovo/cities.", "in": "query", - "name": "player_id", + "name": "city", + "required": true, "type": "string", - "x-example": "trpxfbO3" + "x-example": "madrid" }, { - "description": "Optional statistic group", - "enum": [ - "top_stats", - "shots", - "attack", - "passes", - "defense", - "goalkeeping", - "general" - ], + "description": "Store id, from /glovo/stores' id field.", "in": "query", - "name": "group", + "name": "store_id", + "required": true, + "type": "integer", + "x-example": 2066 + }, + { + "description": "Optional two-letter response language; defaults to en. A city's supported languages are in /glovo/city's supported_languages.", + "in": "query", + "name": "language", "type": "string", - "x-example": "shots" + "x-example": "en" } ], "produces": [ @@ -361500,7 +435520,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.matchPlayerStatsResponseDoc" + "$ref": "#/definitions/glovo.storeResponseDoc" } }, "400": { @@ -361527,27 +435547,57 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore football player match statistics and ratings", + "summary": "Get one Glovo store's detail", "tags": [ - "Flashscore" + "Glovo" ] } }, - "/flashscore/match-point-by-point": { + "/glovo/store/fees": { "get": { "consumes": [ "application/json" ], - "description": "Returns the scoring history of a tennis, volleyball, badminton, handball or basketball match, grouped by set, quarter or half. Tennis lists each game with its server, winner, the running score inside the game and break, set and match point flags, plus tiebreak points; the other sports list every rally or basket with the leading side's margin. When a tennis match is live, current_game holds the game or tiebreak in progress. Other sports and matches without coverage return not found.", - "operationId": "flashscore-match-point-by-point", + "description": "Returns the small-basket surcharge tiers of one store: for each basket-value range (lower_bound to upper_bound) the extra fee charged, its currency and Glovo's strategy name. A store with no small-basket surcharge returns an empty tiers list. When address_id is omitted the store's own default location is looked up first, which costs one extra upstream call.", + "operationId": "glovo-store-fees", "parameters": [ { - "description": "Eight-character Flashscore match id", + "description": "Two-letter country code, from /glovo/cities.", "in": "query", - "name": "id", + "name": "country", "required": true, "type": "string", - "x-example": "8v653Rz9" + "x-example": "es" + }, + { + "description": "City slug (madrid) or city code (mad), from /glovo/cities.", + "in": "query", + "name": "city", + "required": true, + "type": "string", + "x-example": "madrid" + }, + { + "description": "Store id, from /glovo/stores' id field.", + "in": "query", + "name": "store_id", + "required": true, + "type": "integer", + "x-example": 2066 + }, + { + "description": "Optional store location id, from /glovo/stores' address_id field.", + "in": "query", + "name": "address_id", + "type": "integer", + "x-example": 182787 + }, + { + "description": "Optional two-letter response language; defaults to en. A city's supported languages are in /glovo/city's supported_languages.", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -361557,7 +435607,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.matchPointByPointResponseDoc" + "$ref": "#/definitions/glovo.storeFeesResponseDoc" } }, "400": { @@ -361584,27 +435634,57 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore point-by-point scoring history", + "summary": "Get one Glovo store's small-basket surcharge tiers", "tags": [ - "Flashscore" + "Glovo" ] } }, - "/flashscore/match-predicted-lineups": { + "/glovo/store/menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns each side's predicted formation, predicted starters with position tags and player details, lineup groups, and coaches. Predictions usually appear shortly before kickoff for covered matches; a match with no predicted players on either side returns not found.", - "operationId": "flashscore-match-predicted-lineups", + "description": "Returns one store's menu as its tree of collections (for example Top sellers, Starters, Drinks). Each collection's slug is the value /glovo/store/products takes as collection. When address_id is omitted the store's own default location is looked up first, which costs one extra upstream call.", + "operationId": "glovo-store-menu", "parameters": [ { - "description": "Eight-character Flashscore match id", + "description": "Two-letter country code, from /glovo/cities.", "in": "query", - "name": "id", + "name": "country", "required": true, "type": "string", - "x-example": "f75igXFG" + "x-example": "es" + }, + { + "description": "City slug (madrid) or city code (mad), from /glovo/cities.", + "in": "query", + "name": "city", + "required": true, + "type": "string", + "x-example": "madrid" + }, + { + "description": "Store id, from /glovo/stores' id field.", + "in": "query", + "name": "store_id", + "required": true, + "type": "integer", + "x-example": 2066 + }, + { + "description": "Optional store location id, from /glovo/stores' address_id field.", + "in": "query", + "name": "address_id", + "type": "integer", + "x-example": 182787 + }, + { + "description": "Optional two-letter response language; defaults to en. A city's supported languages are in /glovo/city's supported_languages.", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -361614,7 +435694,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.matchPredictedLineupsResponseDoc" + "$ref": "#/definitions/glovo.menuResponseDoc" } }, "400": { @@ -361641,27 +435721,71 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore predicted lineups", + "summary": "Get one Glovo store's menu collections", "tags": [ - "Flashscore" + "Glovo" ] } }, - "/flashscore/match-report": { + "/glovo/store/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns Flashscore's written match report: title, author, publication time, the full text as ordered paragraphs and inline images (with links to teams, players and competitions kept as structured data), and the credited photos. Only matches with editorial coverage have a report; every other match returns not found.", - "operationId": "flashscore-match-report", + "description": "Returns one store's products grouped into sections, each with a name, description, price, currency, display price, image URL, stock flag and its option groups (sizes, sides, toppings with price impact). Pass collection to return only one menu collection. limit caps the total products across sections (default 200, maximum 500); truncated reports whether more existed. When address_id is omitted the store's own default location is looked up first, which costs one extra upstream call.", + "operationId": "glovo-store-products", "parameters": [ { - "description": "Eight-character Flashscore match id", + "description": "Two-letter country code, from /glovo/cities.", "in": "query", - "name": "id", + "name": "country", "required": true, "type": "string", - "x-example": "j52jHsN8" + "x-example": "es" + }, + { + "description": "City slug (madrid) or city code (mad), from /glovo/cities.", + "in": "query", + "name": "city", + "required": true, + "type": "string", + "x-example": "madrid" + }, + { + "description": "Store id, from /glovo/stores' id field.", + "in": "query", + "name": "store_id", + "required": true, + "type": "integer", + "x-example": 2066 + }, + { + "description": "Optional store location id, from /glovo/stores' address_id field.", + "in": "query", + "name": "address_id", + "type": "integer", + "x-example": 182787 + }, + { + "description": "Optional menu collection slug, from /glovo/store/menu, to return only that collection.", + "in": "query", + "name": "collection", + "type": "string", + "x-example": "top-sellers-ts" + }, + { + "description": "Max products returned across all sections. Defaults to 200, maximum 500.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 200 + }, + { + "description": "Optional two-letter response language; defaults to en. A city's supported languages are in /glovo/city's supported_languages.", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -361671,7 +435795,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.matchReportResponseDoc" + "$ref": "#/definitions/glovo.productsResponseDoc" } }, "400": { @@ -361698,50 +435822,72 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore editorial match report", + "summary": "Get one Glovo store's products", "tags": [ - "Flashscore" + "Glovo" ] } }, - "/flashscore/match-standings": { + "/glovo/store/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns the match-linked table feed. Select overall, home/away, form, over/under, half-time/full-time, live table, or top scorers; the raw provider format is preserved. Defaults to overall.", - "operationId": "flashscore-match-standings", + "description": "Returns the products of one store that match a keyword (for example burger), with the same fields as /glovo/store/products: name, description, price, currency, display price, image URL, stock flag and option groups. total_products reports how many matched in the store; limit caps the returned list (default 50, maximum 500). A keyword that matches nothing returns an empty list, not an error. When address_id is omitted the store's own default location is looked up first, which costs one extra upstream call.", + "operationId": "glovo-store-search", "parameters": [ { - "description": "Eight-character Flashscore match id", + "description": "Two-letter country code, from /glovo/cities.", "in": "query", - "name": "id", + "name": "country", "required": true, "type": "string", - "x-example": "xtmHKGT0" + "x-example": "es" }, { - "description": "Standings/table view; defaults to overall", - "enum": [ - "overall", - "home", - "away", - "form_overall", - "overunder_overall", - "form_home", - "form_away", - "top_scorers", - "htft_overall", - "htft_home", - "htft_away", - "live_overall", - "overunder_home", - "overunder_away" - ], + "description": "City slug (madrid) or city code (mad), from /glovo/cities.", "in": "query", - "name": "view", + "name": "city", + "required": true, "type": "string", - "x-example": "overall" + "x-example": "madrid" + }, + { + "description": "Store id, from /glovo/stores' id field.", + "in": "query", + "name": "store_id", + "required": true, + "type": "integer", + "x-example": 2066 + }, + { + "description": "Keyword to search this store's own products by.", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "burger" + }, + { + "description": "Max products returned. Defaults to 50, maximum 500.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 + }, + { + "description": "Optional store location id, from /glovo/stores' address_id field.", + "in": "query", + "name": "address_id", + "type": "integer", + "x-example": 182787 + }, + { + "description": "Optional two-letter response language; defaults to en. A city's supported languages are in /glovo/city's supported_languages.", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -361751,7 +435897,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.responseDoc" + "$ref": "#/definitions/glovo.storeSearchResponseDoc" } }, "400": { @@ -361778,27 +435924,64 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore match league standings", + "summary": "Search one Glovo store's products by keyword", "tags": [ - "Flashscore" + "Glovo" ] } }, - "/flashscore/match-stats": { + "/glovo/stores": { "get": { "consumes": [ "application/json" ], - "description": "Returns Flashscore's public delimited statistics feed for a match id copied from a Flashscore match URL. The raw upstream feed is preserved as text because its format is not JSON.", - "operationId": "flashscore-match-stats", + "description": "Returns the first page of up to 50 stores from a city's category, in Glovo's own ranking, optionally narrowed to one cuisine or type filter. total_entries reports how many stores match in the city; only the first page is reachable without logging in (Glovo's server-rendered list ignores paging parameters), so use filter_id to reach other subsets. A category_id the city does not list, or a filter_id the category does not offer, returns a 404; a real category with no matching stores returns an empty list. The ranking and each store's distance are relative to the city's default point and can change between calls. Each store carries its id and address_id, which the store, menu and products endpoints take, plus its rating label, delivery estimate, delivery fee, promotions and open status.", + "operationId": "glovo-stores", "parameters": [ { - "description": "Eight-character Flashscore match id", + "description": "Two-letter country code, from /glovo/cities.", "in": "query", - "name": "id", + "name": "country", "required": true, "type": "string", - "x-example": "xtmHKGT0" + "x-example": "es" + }, + { + "description": "City slug (madrid) or city code (mad), from /glovo/cities.", + "in": "query", + "name": "city", + "required": true, + "type": "string", + "x-example": "madrid" + }, + { + "description": "Store category id, from /glovo/categories.", + "in": "query", + "name": "category_id", + "required": true, + "type": "integer", + "x-example": 1 + }, + { + "description": "Optional cuisine or type filter id, from /glovo/stores/filters for the same country, city and category_id.", + "in": "query", + "name": "filter_id", + "type": "integer", + "x-example": 34701 + }, + { + "description": "Max stores returned from the page. Defaults to 50, maximum 50.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 + }, + { + "description": "Optional two-letter response language; defaults to en. A city's supported languages are in /glovo/city's supported_languages.", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -361808,7 +435991,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.responseDoc" + "$ref": "#/definitions/glovo.storesResponseDoc" } }, "400": { @@ -361835,154 +436018,50 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore match statistics", + "summary": "List a Glovo category's ranked stores", "tags": [ - "Flashscore" + "Glovo" ] } }, - "/flashscore/match-tv": { + "/glovo/stores/filters": { "get": { "consumes": [ "application/json" ], - "description": "Returns the TV channels and streaming services listed for a match in one viewer market, with provider ids, names and website links. Listings are country specific, so pick geo from flashscore-odds-geos; an empty list means no broadcaster is listed for that market. Bookmaker promotions are not included.", - "operationId": "flashscore-match-tv", + "description": "Returns the cuisine or type filters (for example Burgers, Pizza, Healthy) that one category's store list accepts in one city. Each carries the id that /glovo/stores takes as filter_id. The filter set is category- and city-scoped, so call this for the same country, city and category_id you will pass to /glovo/stores. A category_id Glovo does not recognise in that city returns a 404.", + "operationId": "glovo-stores-filters", "parameters": [ { - "description": "Eight-character Flashscore match id", + "description": "Two-letter country code, from /glovo/cities.", "in": "query", - "name": "id", + "name": "country", "required": true, "type": "string", - "x-example": "p0aFxkkn" + "x-example": "es" }, { - "description": "Viewer market country code from flashscore-odds-geos; defaults to GB", - "enum": [ - "AE", - "AL", - "AM", - "AO", - "AR", - "AT", - "AU", - "AZ", - "BA", - "BD", - "BE", - "BG", - "BO", - "BR", - "BY", - "CA", - "CH", - "CI", - "CL", - "CM", - "CN", - "CO", - "CR", - "CY", - "CZ", - "DE", - "DK", - "DO", - "DZ", - "EC", - "EE", - "EG", - "ES", - "ET", - "FI", - "FR", - "GB", - "GE", - "GH", - "GR", - "GT", - "HK", - "HN", - "HR", - "HU", - "ID", - "IE", - "IL", - "IN", - "IQ", - "IR", - "IS", - "IT", - "JO", - "JP", - "KE", - "KG", - "KH", - "KR", - "KW", - "KZ", - "LA", - "LB", - "LK", - "LT", - "LU", - "LV", - "LY", - "MA", - "MD", - "ME", - "MK", - "MM", - "MN", - "MT", - "MX", - "MY", - "NG", - "NI", - "NL", - "NO", - "NP", - "NZ", - "PA", - "PE", - "PH", - "PK", - "PL", - "PT", - "PY", - "QA", - "RO", - "RS", - "RU", - "SA", - "SD", - "SE", - "SG", - "SI", - "SK", - "SN", - "SV", - "TH", - "TN", - "TR", - "TW", - "TZ", - "UA", - "UG", - "US", - "UY", - "UZ", - "VE", - "VN", - "XK", - "ZA", - "ZM", - "ZW" - ], + "description": "City slug (madrid) or city code (mad), from /glovo/cities.", "in": "query", - "name": "geo", + "name": "city", + "required": true, "type": "string", - "x-example": "GB" + "x-example": "madrid" + }, + { + "description": "Store category id, from /glovo/categories.", + "in": "query", + "name": "category_id", + "required": true, + "type": "integer", + "x-example": 1 + }, + { + "description": "Optional two-letter response language; defaults to en. A city's supported languages are in /glovo/city's supported_languages.", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -361992,7 +436071,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.matchTVResponseDoc" + "$ref": "#/definitions/glovo.filtersResponseDoc" } }, "400": { @@ -362019,26 +436098,24 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore match TV and streaming broadcasters", + "summary": "List a Glovo category's cuisine and type filters", "tags": [ - "Flashscore" + "Glovo" ] } }, - "/flashscore/navigation": { + "/gmanews/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the first-party category hierarchy and competition links for a public Flashscore sport or category page. Start with / or a sport path from flashscore-sports, then follow returned paths to enumerate region, country, category, and competition pages. Country/category lists reflect the current upstream navigation.", - "operationId": "flashscore-navigation", + "description": "Returns public GMA News Online article metadata and body paragraphs from a canonical article URL. GMA News articles are free to read; no content is paywalled.", + "operationId": "gmanews-article", "parameters": [ { - "description": "Relative Flashscore navigation path; defaults to /. Use a path returned by flashscore-sports or flashscore-navigation.", + "description": "Canonical GMA News article URL", "in": "query", - "name": "path", + "name": "url", + "required": true, "type": "string", - "x-example": "/basketball/usa/" + "x-example": "https://www.gmanetwork.com/news/topstories/world/1003638/at-un-netanyahu-defends-israel-as-delegates-storm-out/story/" } ], "produces": [ @@ -362048,7 +436125,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.navigationResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -362075,77 +436152,70 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore sport, category, country, and competition navigation", + "summary": "Get GMA News article content", "tags": [ - "Flashscore" + "GMA News" ] } }, - "/flashscore/news": { + "/gmanews/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns article previews from a public Flashscore News section. Use flashscore-news-categories to discover valid category keys. Page numbers follow the site's Show more pagination; article body text is not included.", - "operationId": "flashscore-news", + "description": "Returns up to 15 of the newest GMA News Online stories for one section, newest first. `section` is required and takes one of 44 slugs such as `topstories-world`, `money-economy`, `sports-nba` or `showbiz`. Each item has `title`, `url`, `summary`, `published_at` (UTC) and `image_url`. Quiet sections can return only a few items. An invalid or missing `section` returns 400.", + "operationId": "gmanews-headlines", "parameters": [ { - "description": "News section key; defaults to all", + "description": "GMA News section slug", "enum": [ - "all", - "football", - "uefa-nations-league", - "tennis", - "features", - "premier-league", - "nfl", - "mlb", - "nba", - "nhl", - "formula-1", - "champions-league", - "europa-league", - "conference-league", - "darts", - "snooker", - "golf", - "road-cycling", - "laliga", - "bundesliga", - "serie-a", - "ligue-1", - "badminton", - "handball", - "hockey", - "basketball", - "cricket", - "rugby-union", - "athletics", - "baseball", - "fifa", - "rugby-league", - "motorsport", - "aussie-rules", - "flashscore-ratings", - "american-sports", - "african-football", - "combat-sports", - "winter-sports", - "transfer-news" + "topstories", + "topstories-metro", + "topstories-nation", + "topstories-opinion", + "topstories-regions", + "topstories-specialreports", + "topstories-ulatfilipino", + "topstories-world", + "money", + "money-companies", + "money-economy", + "money-motoring", + "money-personalfinance", + "sports", + "sports-basketball", + "sports-boxing", + "sports-football", + "sports-nba", + "sports-othersports", + "sports-volleyball", + "showbiz", + "showbiz-chikaminute", + "showbiz-showbizabroad", + "lifestyle", + "lifestyle-artandculture", + "lifestyle-familyandrelationships", + "lifestyle-food", + "lifestyle-healthandwellness", + "lifestyle-hobbiesandactivities", + "lifestyle-shoppingandfashion", + "lifestyle-travel", + "scitech", + "scitech-science", + "scitech-technology", + "pinoyabroad", + "pinoyabroad-dispatch", + "pinoyabroad-pinoyachievers", + "serbisyopubliko", + "serbisyopubliko-missingpersons", + "serbisyopubliko-transportation", + "serbisyopubliko-walangpasok", + "cbb", + "publicaffairs", + "weather" ], "in": "query", - "name": "category", + "name": "section", + "required": true, "type": "string", - "x-example": "football" - }, - { - "description": "1-based page, 1 to 100; defaults to 1", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "topstories" } ], "produces": [ @@ -362155,7 +436225,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.newsListResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -362164,12 +436234,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -362182,29 +436246,16 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore News listings by section", + "summary": "Get GMA News section headlines", "tags": [ - "Flashscore" + "GMA News" ] } }, - "/flashscore/news-article": { + "/gmanews/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns public article metadata and image credits for an article id from a Flashscore match news listing. Article body text is not included.", - "operationId": "flashscore-news-article", - "parameters": [ - { - "description": "Eight-character Flashscore article id", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "GYDHQ2yR" - } - ], + "description": "Returns fresh GMA News Online top stories from the public top-stories RSS feed, with title, URL, summary, publish time, and thumbnail.", + "operationId": "gmanews-news", "produces": [ "application/json" ], @@ -362212,23 +436263,49 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.newsArticleResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get GMA News top stories", + "tags": [ + "GMA News" + ] + } + }, + "/gmanews/sections": { + "get": { + "description": "Lists the 44 GMA News Online sections accepted by `gmanews-headlines`, each with a `slug`, display `name` and `url`. Slugs run from `topstories` and `money` to sub-sections such as `sports-basketball` and `lifestyle-travel`. Video, photo and TV-show sections are excluded. Takes no parameters.", + "operationId": "gmanews-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -362239,27 +436316,48 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore news article metadata", + "summary": "Get GMA News sections", "tags": [ - "Flashscore" + "GMA News" ] } }, - "/flashscore/news-article-body": { + "/goat/collection": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Flashscore article with its headline, standfirst, author, source credit, tags, publication and edit times, cover image and the full body converted to plain-text paragraphs and headings with structured links to players, teams, matches and other articles. Embedded posts, images and info boxes are kept as placeholder blocks, not in the text. Live blogs work too. An unknown article id returns not found. For metadata and image variants only, use flashscore-news-article.", - "operationId": "flashscore-news-article-body", + "description": "Returns a page of one of GOAT's curated product collections (an editorial rail like \"top trending\" or \"new arrivals\"), as shown in GOAT's own product-page \"you may also like\" rails and homepage modules. Collection slugs are not enumerable by this API -- capture one from a live GOAT page.", + "operationId": "goat-collection", "parameters": [ { - "description": "Eight-character Flashscore news article id from a news listing, flashscore-entity-news or flashscore-news-most-read", + "description": "GOAT collection slug, e.g. as seen in a curated rail on GOAT's own site", "in": "query", - "name": "id", + "name": "slug", "required": true, "type": "string", - "x-example": "xlKVMkEO" + "x-example": "top-trending-uk" + }, + { + "description": "1-indexed result page, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Results per page, defaults to 12, maximum 100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 12 + }, + { + "description": "Omit specific products by id, comma-separated", + "in": "query", + "name": "exclude_product_ids", + "type": "string", + "x-example": "1481726" } ], "produces": [ @@ -362269,19 +436367,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/flashscore.NewsArticleBodyResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/goat.collectionResponseDoc" } }, "400": { @@ -362296,6 +436382,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -362308,19 +436400,19 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore news article with full text", + "summary": "Get a GOAT curated product collection", "tags": [ - "Flashscore" + "GOAT" ] } }, - "/flashscore/news-categories": { + "/goat/countries": { "get": { "consumes": [ "application/json" ], - "description": "Returns the exact currently usable public News section keys, names, and source paths from the live navigation inventory. Olympic Games is excluded because its linked page currently returns 404.", - "operationId": "flashscore-news-categories", + "description": "Returns every country GOAT recognizes -- the accepted values for GET /goat/product/{slug}'s country_code parameter -- with the currency and size unit (us, uk, eu) GOAT localizes to for each, plus whether GOAT ships and accepts returns there. Every country is listed, not only the shippable ones, because country_code localizes pricing and is accepted for all of them; filter on ships_to if you want only GOAT's shipping destinations.", + "operationId": "goat-countries", "produces": [ "application/json" ], @@ -362328,7 +436420,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.newsCategoriesResponseDoc" + "$ref": "#/definitions/goat.countriesResponseDoc" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -362337,19 +436441,19 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore News categories", + "summary": "Get GOAT countries", "tags": [ - "Flashscore" + "GOAT" ] } }, - "/flashscore/news-most-read": { + "/goat/curated": { "get": { "consumes": [ "application/json" ], - "description": "Returns Flashscore's site-wide list of the most-read news articles right now (about 20) in the provider's order, with title, slug, path, publication time and cover image. Use flashscore-news-article-body for an article's full text.", - "operationId": "flashscore-news-most-read", + "description": "Returns the shelf of editorially curated links GOAT is currently promoting in its own search box: seasonal collections, specific product searches, and browse-all entry points. Every link is actionable against this API -- a collection link carries a value for GET /goat/collection, a search link carries a query for GET /goat/search.", + "operationId": "goat-curated", "produces": [ "application/json" ], @@ -362357,19 +436461,13 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/flashscore.NewsMostReadResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/goat.curatedResponseDoc" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -362384,19 +436482,19 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore most-read news", + "summary": "Get GOAT curated links", "tags": [ - "Flashscore" + "GOAT" ] } }, - "/flashscore/odds-geos": { + "/goat/listings/count": { "get": { "consumes": [ "application/json" ], - "description": "Lists every country code accepted by flashscore-match-odds and flashscore-match-tv (with whether bookmakers were found for it when verified), the US states and Canadian provinces that change the bookmaker list, and every betting type, scope and handicap type that can appear in odds responses.", - "operationId": "flashscore-odds-geos", + "description": "Returns how many listings GOAT currently has live across its whole marketplace. This is the only way to see GOAT's true catalog size, because GET /goat/search's total_results saturates at 10000 on a broad query and cannot report a total above that ceiling.", + "operationId": "goat-listings-count", "produces": [ "application/json" ], @@ -362404,7 +436502,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.oddsGeosResponseDoc" + "$ref": "#/definitions/goat.listingsCountResponseDoc" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -362413,34 +436523,34 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore odds markets, subdivisions and odds enums", + "summary": "Get GOAT live listing count", "tags": [ - "Flashscore" + "GOAT" ] } }, - "/flashscore/player": { + "/goat/product/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a player's public profile: name, country, birth date, sport, photo and current team, plus (for team-sport players) position, age, market value, contract expiry, extra details such as height, and career statistics by season, team and competition grouped into league, domestic cups, international cups and national team. Players of individual sports such as tennis return the profile (and ranking text) without a career table.", - "operationId": "flashscore-player", + "description": "Returns a GOAT product: identity/descriptive metadata (name, brand, SKU, colorway, designer, silhouette, taxonomy, materials, release date, retail price, editorial story, images, full size range, other products featured alongside it), plus live per-size/condition pricing and stock status (lowest price, GOAT Instant Ship price, last sold price, highest current buyer offer).", + "operationId": "goat-product", "parameters": [ { - "description": "Eight-character Flashscore player id", - "in": "query", - "name": "id", + "description": "GOAT product URL slug, the path segment of a https://www.goat.com/sneakers/{slug} product page", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "UmV9iQmE" + "x-example": "fragment-design-x-travis-scott-x-air-jordan-1-low-og-sp-sail-military-blue-dm7866-104" }, { - "description": "Optional player slug; must match the id when supplied", + "description": "ISO 3166-1 alpha-2 country code used to localize per-size pricing, defaults to US", "in": "query", - "name": "slug", + "name": "country_code", "type": "string", - "x-example": "haaland-erling" + "x-example": "US" } ], "produces": [ @@ -362450,19 +436560,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/flashscore.PlayerResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/goat.productResponseDoc" } }, "400": { @@ -362477,6 +436575,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -362489,36 +436593,34 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore player profile and career", + "summary": "Get GOAT product detail", "tags": [ - "Flashscore" + "GOAT" ] } }, - "/flashscore/player-fixtures": { + "/goat/product/{slug}/recommended": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of an individual-sport player's upcoming matches (tennis, darts, golf, snooker and similar), soonest first, as structured events. Football, basketball and hockey players have no event list and return an empty list; use flashscore-team-fixtures for their team. Request successive pages until event_count is 0.", - "operationId": "flashscore-player-fixtures", + "description": "Returns the recommended/related products GOAT's own product page shows for a given product (other colorways, similar products) -- descriptive metadata only, no live pricing.", + "operationId": "goat-product-recommended", "parameters": [ { - "description": "Eight-character Flashscore player id", - "in": "query", - "name": "id", + "description": "GOAT product URL slug to find related products for", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "0K04jl1m" + "x-example": "fragment-design-x-travis-scott-x-air-jordan-1-low-og-sp-sail-military-blue-dm7866-104" }, { - "description": "1-based page from 1 to 300; defaults to 1", + "description": "Number of recommended products to return, defaults to 8, maximum 24", "in": "query", - "maximum": 300, - "minimum": 1, - "name": "page", + "name": "count", "type": "integer", - "x-example": 1 + "x-example": 8 } ], "produces": [ @@ -362528,19 +436630,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/flashscore.PlayerEventsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/goat.recommendedResponseDoc" } }, "400": { @@ -362555,6 +436645,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -362567,34 +436663,239 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore player fixtures", + "summary": "Get GOAT recommended products for a product", "tags": [ - "Flashscore" + "GOAT" ] } }, - "/flashscore/player-injuries": { + "/goat/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a team-sport player's injury history, newest first, with start date, end date (absent while unresolved) and injury type. A player with no recorded injuries returns an empty list. Players of individual sports have no injury page and return not found.", - "operationId": "flashscore-player-injuries", + "description": "Searches or browses GOAT's sneaker/streetwear/collectibles catalog by free-text query and/or facet filters (category, footwear sub-type, activity, color, gender, condition, brand, release year, price range, release-date range, silhouette, designer, in-stock/under-retail/instant-ship, curated collection), returning product summaries (brand, silhouette, category, image, stock status, headline pricing across all sizes) plus the total matching count. Query is optional -- a facet filter alone browses the catalog the same way GOAT's own category/brand pages do.", + "operationId": "goat-search", "parameters": [ { - "description": "Eight-character Flashscore player id", + "description": "Free-text search query, e.g. a model name, colorway, or style code. Optional -- omit to browse by facet filters alone", "in": "query", - "name": "id", - "required": true, + "name": "query", "type": "string", - "x-example": "UmV9iQmE" + "x-example": "jordan 1" }, { - "description": "Optional player slug; must match the id when supplied", + "description": "Only include products currently in stock", "in": "query", - "name": "slug", + "name": "in_stock", + "type": "boolean", + "x-example": false + }, + { + "description": "Filter by category, comma-separated for multiple values. See GET /goat/search/facets for the current live list", + "enum": [ + "footwear", + "apparel", + "accessories", + "bags", + "collectibles", + "media", + "sports", + "jewelry", + "home", + "objects", + "other", + "art" + ], + "in": "query", + "name": "categories", "type": "string", - "x-example": "haaland-erling" + "x-example": "footwear" + }, + { + "description": "Filter by color, comma-separated for multiple values", + "enum": [ + "black", + "white", + "blue", + "grey", + "red", + "green", + "pink", + "cream", + "brown", + "purple", + "multi-color", + "orange", + "tan", + "yellow", + "silver", + "gold", + "teal", + "copper" + ], + "in": "query", + "name": "colors", + "type": "string", + "x-example": "black" + }, + { + "description": "Filter by gender, comma-separated for multiple values", + "enum": [ + "men", + "youth", + "infant", + "women" + ], + "in": "query", + "name": "genders", + "type": "string", + "x-example": "men" + }, + { + "description": "Filter by item condition, comma-separated for multiple values", + "enum": [ + "new_no_defects", + "used", + "new_with_defects", + "goat_clean" + ], + "in": "query", + "name": "conditions", + "type": "string", + "x-example": "new_no_defects" + }, + { + "description": "Filter by footwear sub-type, comma-separated for multiple values", + "enum": [ + "sneakers", + "sandals", + "cleats", + "boots", + "slip-ons" + ], + "in": "query", + "name": "product_types", + "type": "string", + "x-example": "sneakers" + }, + { + "description": "Filter by activity (sneakers only), comma-separated for multiple values", + "enum": [ + "lifestyle", + "basketball", + "running", + "skateboarding" + ], + "in": "query", + "name": "activities", + "type": "string", + "x-example": "lifestyle" + }, + { + "description": "Filter by one or more brand slugs, comma-separated, e.g. air-jordan,nike. GET /goat/search/facets lists GOAT's top brands; long-tail brands are valid here even when absent from that list", + "in": "query", + "name": "brands", + "type": "string", + "x-example": "air-jordan" + }, + { + "description": "Filter by one or more silhouettes, comma-separated, matching GOAT's own naming (see a product's silhouette field)", + "in": "query", + "name": "silhouettes", + "type": "string", + "x-example": "Air Jordan 1" + }, + { + "description": "Filter by one or more designers, comma-separated, matching GOAT's own naming (see a product's designer field)", + "in": "query", + "name": "designers", + "type": "string", + "x-example": "Peter Moore" + }, + { + "description": "Filter by season year(s), comma-separated, e.g. 2025,2026. See GET /goat/search/facets for the current live list", + "in": "query", + "name": "years", + "type": "string", + "x-example": "2025" + }, + { + "description": "Only include results priced at or above this amount, in cents", + "in": "query", + "name": "price_cents_min", + "type": "integer", + "x-example": 10000 + }, + { + "description": "Only include results priced at or below this amount, in cents", + "in": "query", + "name": "price_cents_max", + "type": "integer", + "x-example": 20000 + }, + { + "description": "Only include products currently trading below original retail price", + "in": "query", + "name": "under_retail", + "type": "boolean", + "x-example": false + }, + { + "description": "Only include products with GOAT Instant Ship availability", + "in": "query", + "name": "instant_ship", + "type": "boolean", + "x-example": false + }, + { + "description": "Result sort order, defaults to relevance", + "enum": [ + "relevance", + "newest", + "price_asc", + "price_desc", + "discount" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "relevance" + }, + { + "description": "Scope results to a GOAT curated collection (see GET /goat/collection), combinable with query, every other filter, and sort", + "in": "query", + "name": "collection_slug", + "type": "string", + "x-example": "top-trending-uk" + }, + { + "description": "Only include products released on or after this date (YYYY-MM-DD, UTC)", + "in": "query", + "name": "released_after", + "type": "string", + "x-example": "2025-08-01" + }, + { + "description": "Only include products released on or before this date (YYYY-MM-DD, UTC)", + "in": "query", + "name": "released_before", + "type": "string", + "x-example": "2025-08-31" + }, + { + "description": "1-indexed result page, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Results per page, defaults to 12, maximum 100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 12 } ], "produces": [ @@ -362604,19 +436905,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/flashscore.PlayerInjuriesResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/goat.searchResponseDoc" } }, "400": { @@ -362625,8 +436914,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -362643,36 +436932,116 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore player injury history", + "summary": "Search GOAT products", "tags": [ - "Flashscore" + "GOAT" ] } }, - "/flashscore/player-match-log": { + "/goat/search/facets": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a football, basketball or hockey player's match log, newest first: each match with date, both sides and scores, competition, the player's rating and labelled statistics (minutes, goals, assists, cards, goalkeeper saves, points, rebounds, time on ice and more depending on the sport). Matches without statistics say why (on the bench, injured, suspended). Page 1 holds the 10 newest matches and every later page 25 older ones; request pages until has_more is false. Players of individual sports return an empty list, use flashscore-player-results for those.", - "operationId": "flashscore-player-match-log", + "description": "Returns the accepted values for goat_search's filter parameters: categories, colors, genders, conditions, brands, and years are returned live so a value GOAT adds is discoverable without any client-side change, while product_types and activities are served from a maintained list because GOAT exposes no live facet for them. brands is GOAT's top brands ordered by product count, not the complete brand list -- when brands_truncated is true, brands beyond the ones listed exist and remain valid goat_search values.", + "operationId": "goat-search-facets", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/goat.facetsResponseDoc" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get GOAT search facet values", + "tags": [ + "GOAT" + ] + } + }, + "/goat/searches/trending": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the search terms GOAT is currently surfacing as popular, in GOAT's own ranking order -- the same list its own search box shows. Each term is free text ready to pass to GET /goat/search's query parameter.", + "operationId": "goat-trending-searches", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/goat.trendingSearchesResponseDoc" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get GOAT trending searches", + "tags": [ + "GOAT" + ] + } + }, + "/goat/suggest": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns GOAT's own search-box autocomplete for a partial query: matching curated collections and matching products. The collections carry the slug values accepted by GET /goat/collection and by GET /goat/search's collection_slug parameter, making this the way to discover collection slugs.", + "operationId": "goat-suggest", "parameters": [ { - "description": "Eight-character Flashscore player id", + "description": "Partial search text to autocomplete", "in": "query", - "name": "id", + "name": "query", "required": true, "type": "string", - "x-example": "UmV9iQmE" + "x-example": "jord" }, { - "description": "1-based page from 1 to 300; defaults to 1", + "description": "Maximum curated collections to return. Defaults to 8, maximum 20. Does not affect the product count, which upstream fixes at 25", "in": "query", - "maximum": 300, - "minimum": 1, - "name": "page", + "name": "limit", "type": "integer", - "x-example": 1 + "x-example": 8 } ], "produces": [ @@ -362682,19 +437051,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/flashscore.PlayerMatchLogResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/goat.suggestResponseDoc" } }, "400": { @@ -362703,8 +437060,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -362721,27 +437078,29 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore player match log", + "summary": "Autocomplete a GOAT search", "tags": [ - "Flashscore" + "GOAT" ] } }, - "/flashscore/player-news": { + "/goldin/auctions": { "get": { "consumes": [ "application/json" ], - "description": "Returns up to 100 recent headlines about a player, aggregated from news publishers, with publisher, publication time and image. Links point to Flashscore's redirect to the publisher. A player without news returns an empty list. A team id returns not found, use flashscore-team-news for teams.", - "operationId": "flashscore-player-news", + "description": "Goldin's complete auction event history, back to 2012 -- title, type, status, start/end window, and buyer's premium for every auction Goldin has run. Pass an auction's own id as auction_id to goldin-search to browse its lots.", + "operationId": "goldin-auctions", "parameters": [ { - "description": "Eight-character Flashscore player id", + "description": "asc (oldest first) or desc (newest first, default)", + "enum": [ + "asc", + "desc" + ], "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "UmV9iQmE" + "name": "order", + "type": "string" } ], "produces": [ @@ -362751,19 +437110,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/flashscore.PlayerNewsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/goldin.auctionsResponseDoc" } }, "400": { @@ -362772,8 +437119,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -362790,36 +437137,80 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore player news", + "summary": "List Goldin's full auction history", "tags": [ - "Flashscore" + "Goldin" ] } }, - "/flashscore/player-results": { + "/goldin/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of an individual-sport player's finished and in-progress matches (tennis, darts, golf, snooker and similar), newest first, as structured events with start time, stage, both sides, score and competition. Competition blocks carry tournament_id and tournament_stage_id for the tournament endpoints. Football, basketball and hockey players have no event list and return an empty list, use flashscore-player-match-log for those. Request successive pages until event_count is 0.", - "operationId": "flashscore-player-results", + "description": "Goldin's full filter-enum surface for goldin-search, scoped to one lot pool -- category, sub_category, certification, item_type, and the live auction list (each with its own id, name, and current lot count), plus the sort enum valid for that pool. category/sub_category/certification/item_type are read live from Goldin's own current inventory, not a fixed taxonomy, so results can shift over time. The Auction pool (default) and the Fixed Price \"Private Sales\" marketplace are disjoint item pools with different certification/item_type values and different sort enums -- pass the same auction_type here and to goldin-search.", + "operationId": "goldin-categories", "parameters": [ { - "description": "Eight-character Flashscore player id", + "description": "Auction (default) or Fixed_Price -- selects which lot pool to discover enums for", + "enum": [ + "Auction", + "Fixed_Price" + ], "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "M5Nr6FTR" + "name": "auction_type", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/goldin.categoriesResponseDoc" + } }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "1-based page from 1 to 300; defaults to 1", + "ApiKeyAuth": [] + } + ], + "summary": "List Goldin's search filter enums", + "tags": [ + "Goldin" + ] + } + }, + "/goldin/listing": { + "get": { + "consumes": [ + "application/json" + ], + "description": "One lot's full public detail: title, description, current bid/starting price, auction window and status, grading info, images, and prev/next lot pointers within the same auction. slug is the meta_slug from a goldin-search result (or the trailing path segment of the lot's own goldin.co/item/{slug} page URL).", + "operationId": "goldin-listing", + "parameters": [ + { + "description": "The lot's meta_slug, from a goldin-search result", "in": "query", - "maximum": 300, - "minimum": 1, - "name": "page", - "type": "integer", - "x-example": 1 + "name": "slug", + "required": true, + "type": "string", + "x-example": "2002-03-upper-deck-mj-tribute-michael-jordan-milestones-m2-michael-jor1lwys" } ], "produces": [ @@ -362829,19 +437220,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/flashscore.PlayerEventsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/goldin.listingResponseDoc" } }, "400": { @@ -362856,6 +437235,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -362868,34 +437253,99 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore player results", + "summary": "Get one Goldin lot's full public detail", "tags": [ - "Flashscore" + "Goldin" ] } }, - "/flashscore/player-transfers": { + "/goldin/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a team-sport player's club history, newest first, with date, type such as Loan or Free agent, fee text and the clubs on each side. A player with no recorded transfers returns an empty list. Players of individual sports have no transfers page and return not found.", - "operationId": "flashscore-player-transfers", + "description": "Browse or search Goldin's current lot inventory by free-text keyword, category, sub_category, certification, item_type, and auction_id, in a caller-selected sort order. Every filter is optional and combines with AND semantics. All enum values come from goldin-categories -- pass the matching auction_type to both. The Auction pool (default) and the Fixed Price \"Private Sales\" marketplace are disjoint item pools with different certification/item_type values and different sort enums.", + "operationId": "goldin-search", "parameters": [ { - "description": "Eight-character Flashscore player id", + "description": "Auction (default) or Fixed_Price -- selects which lot pool to search", + "enum": [ + "Auction", + "Fixed_Price" + ], "in": "query", - "name": "id", - "required": true, + "name": "auction_type", + "type": "string" + }, + { + "description": "Free-text search across lot titles/descriptions", + "in": "query", + "name": "keyword", + "type": "string" + }, + { + "description": "One value from goldin-categories' category field", + "in": "query", + "name": "category", "type": "string", - "x-example": "UmV9iQmE" + "x-example": "Sport" }, { - "description": "Optional player slug; must match the id when supplied", + "description": "One value from goldin-categories' sub_category field", "in": "query", - "name": "slug", + "name": "sub_category", "type": "string", - "x-example": "haaland-erling" + "x-example": "Baseball" + }, + { + "description": "One value from goldin-categories' certification field", + "in": "query", + "name": "certification", + "type": "string", + "x-example": "PSA" + }, + { + "description": "One value from goldin-categories' item_type field", + "in": "query", + "name": "item_type", + "type": "string", + "x-example": "Single Cards" + }, + { + "description": "One auction id from goldin-categories' auctions field -- only meaningful for auction_type Auction", + "in": "query", + "name": "auction_id", + "type": "string" + }, + { + "description": "One value from goldin-categories' own sort field for the same auction_type. Auction pool: Featured (default), Ending_Soonest, Highest_Bids, Lowest_Bids, Most_Bids, Least_Bids, Most_Recent_Bids, Highest_Lot_Number, Recently_Started. Fixed Price pool: Recently_Created (default), Highest_Bids, Lowest_Bids", + "enum": [ + "Featured", + "Ending_Soonest", + "Highest_Bids", + "Lowest_Bids", + "Most_Bids", + "Least_Bids", + "Most_Recent_Bids", + "Highest_Lot_Number", + "Recently_Started", + "Recently_Created" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "1-based page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Page size, defaults to 24, capped at 96", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -362905,19 +437355,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/flashscore.PlayerTransfersResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/goldin.searchResponseDoc" } }, "400": { @@ -362926,8 +437364,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -362944,19 +437382,33 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore player transfer history", + "summary": "Search Goldin's lot auction inventory", "tags": [ - "Flashscore" + "Goldin" ] } }, - "/flashscore/ranking-categories": { + "/goldin/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Lists the Flashscore ranking categories currently available, including the tennis live-rankings pages. Each category has its `key`, name, sport, page path and a `live` flag. Use a `key` with the Flashscore rankings endpoint. It takes no parameters.", - "operationId": "flashscore-ranking-categories", + "description": "Goldin's own search-suggestions/autocomplete for a partial keyword, matching the site's own search box typeahead. keyword is optional -- when omitted, returns Goldin's current trending/popular searches instead of an error.", + "operationId": "goldin-suggest", + "parameters": [ + { + "description": "Partial search query, e.g. \\", + "in": "query", + "name": "keyword", + "type": "string" + }, + { + "description": "Max suggestions to return, defaults to 8, capped at 20", + "in": "query", + "name": "limit", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -362964,7 +437416,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.rankingCategoriesResponseDoc" + "$ref": "#/definitions/goldin.suggestResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -362979,64 +437443,27 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore ranking categories", + "summary": "Get Goldin's search suggestions for a keyword", "tags": [ - "Flashscore" + "Goldin" ] } }, - "/flashscore/rankings": { + "/goodreads/author/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns the first-party ranking feed pages for a supported ranking category. When page one is full, page two is included to cover the remaining rows.", - "operationId": "flashscore-rankings", + "description": "Returns a Goodreads author profile: bio, birth/death dates, website, genres, photo, and aggregate rating stats.", + "operationId": "goodreads-author", "parameters": [ { - "description": "Ranking category from flashscore-ranking-categories", - "enum": [ - "fifa", - "tennis-atp", - "tennis-wta", - "tennis-atp-race", - "tennis-wta-race", - "tennis-atp-doubles", - "tennis-wta-doubles", - "tennis-atp-doubles-race", - "tennis-wta-doubles-race", - "badminton-bwf-singles-men", - "badminton-bwf-singles-women", - "badminton-bwf-doubles-men", - "badminton-bwf-doubles-women", - "badminton-bwf-mixed-doubles", - "golf-owgr", - "golf-wwgr", - "golf-pga-fedexcup", - "golf-pga-money", - "golf-dp-world-tour", - "golf-lpga", - "golf-asian-tour", - "golf-japan-tour", - "golf-sunshine-tour", - "golf-korn-ferry", - "golf-champions-tour", - "darts-world-ranking", - "snooker-world-ranking", - "tennis-atp-live", - "tennis-wta-live", - "tennis-atp-race-live", - "tennis-wta-race-live", - "tennis-atp-doubles-live", - "tennis-wta-doubles-live", - "tennis-atp-doubles-race-live", - "tennis-wta-doubles-race-live" - ], - "in": "query", - "name": "category", + "description": "Goodreads author id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "tennis-atp" + "x-example": "153394" } ], "produces": [ @@ -363046,7 +437473,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.rankingResponseDoc" + "$ref": "#/definitions/goodreads.authorResponseDoc" } }, "400": { @@ -363061,6 +437488,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -363073,78 +437506,33 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore rankings", + "summary": "Get a Goodreads author", "tags": [ - "Flashscore" + "Goodreads" ] } }, - "/flashscore/scores": { + "/goodreads/author/{id}/books": { "get": { "consumes": [ "application/json" ], - "description": "Returns the public score feed for one sport and date-picker day offset. The upstream field-delimited text is preserved because field semantics vary by sport. Use flashscore-sports to discover sport keys, flashscore-navigation for the current category/country/competition directory, and flashscore-competitions for competitions on the selected date.", - "operationId": "flashscore-scores", + "description": "Lists the books of a Goodreads author by author `id`, about 30 per page; `page` is 1-based and defaults to 1. Each book has its `id`, title, author, average rating, ratings count and Goodreads URL, and the `id` can be used to look up the full book.", + "operationId": "goodreads-author-books", "parameters": [ { - "description": "Sport key", - "enum": [ - "football", - "tennis", - "basketball", - "hockey", - "golf", - "formula-1", - "baseball", - "snooker", - "american-football", - "aussie-rules", - "badminton", - "bandy", - "beach-soccer", - "beach-volleyball", - "boxing", - "cricket", - "cycling", - "darts", - "esports", - "field-hockey", - "floorball", - "futsal", - "handball", - "horse-racing", - "kabaddi", - "mma", - "motorsport", - "netball", - "pesapallo", - "rugby-league", - "rugby-union", - "table-tennis", - "volleyball", - "water-polo", - "winter-sports", - "moto-racing", - "ski-jumping", - "alpine-skiing", - "cross-country-skiing", - "biathlon" - ], - "in": "query", - "name": "sport", + "description": "Goodreads author id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "football" + "x-example": "153394" }, { - "description": "Days from today; -7 to 7; defaults to 0", + "description": "1-based page number, default 1", "in": "query", - "maximum": 7, - "minimum": -7, - "name": "day_offset", - "type": "integer", - "x-example": 0 + "name": "page", + "type": "integer" } ], "produces": [ @@ -363154,7 +437542,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.responseDoc" + "$ref": "#/definitions/goodreads.authorBooksResponseDoc" } }, "400": { @@ -363163,6 +437551,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -363175,29 +437575,33 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore scores and fixtures by sport", + "summary": "List a Goodreads author's books", "tags": [ - "Flashscore" + "Goodreads" ] } }, - "/flashscore/search": { + "/goodreads/author/{id}/quotes": { "get": { "consumes": [ "application/json" ], - "description": "Searches the same public entity index used by Flashscore's search box. Results can include teams, players, and tournament templates across supported sports.", - "operationId": "flashscore-search", + "description": "Returns an author's paginated attributed-quotes list (quote text, tags, like count, and — when the quote is credited to a specific book — that book's title, id, and work id).", + "operationId": "goodreads-author-quotes", "parameters": [ { - "description": "Search phrase (2 to 80 characters)", - "in": "query", - "maxLength": 80, - "minLength": 2, - "name": "q", + "description": "Goodreads author id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "Champions League" + "x-example": "153394" + }, + { + "description": "1-based page number, default 1", + "in": "query", + "name": "page", + "type": "integer" } ], "produces": [ @@ -363207,7 +437611,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.searchResponseDoc" + "$ref": "#/definitions/goodreads.authorQuotesResponseDoc" } }, "400": { @@ -363216,6 +437620,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -363228,19 +437644,29 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore search", + "summary": "List a Goodreads author's attributed quotes", "tags": [ - "Flashscore" + "Goodreads" ] } }, - "/flashscore/sports": { + "/goodreads/book/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns every sport category visible in Flashscore's score navigation, with sport id, caller key, page path, and current event/competition counts. Counts are a live snapshot and may be zero when the sport has no fixtures in the current feed window.", - "operationId": "flashscore-sports", + "description": "Returns a Goodreads book: description, authors, series, genres, format, pages, publisher, publication date, ISBNs, and aggregate rating with the full 1-5 star distribution.", + "operationId": "goodreads-book", + "parameters": [ + { + "description": "Goodreads book id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "2767052" + } + ], "produces": [ "application/json" ], @@ -363248,7 +437674,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.sportsResponseDoc" + "$ref": "#/definitions/goodreads.bookResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -363263,27 +437707,33 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore sports and live category counts", + "summary": "Get a Goodreads book", "tags": [ - "Flashscore" + "Goodreads" ] } }, - "/flashscore/team": { + "/goodreads/book/{id}/editions": { "get": { "consumes": [ "application/json" ], - "description": "Returns a team's public profile: name, country, sport, logo, the stadium and capacity shown on its summary page, and the competitions of its recent and upcoming fixtures. Use a team id from flashscore-search, a Flashscore team URL, a match endpoint's team ids, or flashscore-team-squad and flashscore-player. A player id returns not found.", - "operationId": "flashscore-team", + "description": "Returns a work's paginated edition list (per-edition book id, format, page count, publication date, publisher, ISBN/ISBN13/ASIN, language, and rating) — every other translation, printing, and format of the requested book id. Goodreads keys editions by a separate \"work id\", not the book id in the path; requests against a book with no editions data return an upstream error.", + "operationId": "goodreads-book-editions", "parameters": [ { - "description": "Eight-character Flashscore team id", - "in": "query", + "description": "Goodreads book id", + "in": "path", "name": "id", "required": true, "type": "string", - "x-example": "Wtn9Stg0" + "x-example": "2767052" + }, + { + "description": "1-based page number, default 1", + "in": "query", + "name": "page", + "type": "integer" } ], "produces": [ @@ -363293,19 +437743,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/flashscore.TeamResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/goodreads.editionsResponseDoc" } }, "400": { @@ -363320,6 +437758,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -363332,36 +437776,33 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore team profile", + "summary": "List a Goodreads book's editions", "tags": [ - "Flashscore" + "Goodreads" ] } }, - "/flashscore/team-fixtures": { + "/goodreads/book/{id}/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a team's upcoming matches, soonest first, as structured events with start time, both sides and competition. Event ids work with the flashscore match endpoints. Request successive pages until event_count is 0; a page past the end returns an empty list.", - "operationId": "flashscore-team-fixtures", + "description": "Returns a book's featured reviews (reviewer, rating, text, date, like/comment counts, spoiler flag), sorted by like count.", + "operationId": "goodreads-book-reviews", "parameters": [ { - "description": "Eight-character Flashscore team id", - "in": "query", + "description": "Goodreads book id", + "in": "path", "name": "id", "required": true, "type": "string", - "x-example": "Wtn9Stg0" + "x-example": "2767052" }, { - "description": "1-based page from 1 to 300; defaults to 1", + "description": "Max reviews, default 10, max 50", "in": "query", - "maximum": 300, - "minimum": 1, - "name": "page", - "type": "integer", - "x-example": 1 + "name": "limit", + "type": "integer" } ], "produces": [ @@ -363371,19 +437812,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/flashscore.TeamEventsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/goodreads.reviewsResponseDoc" } }, "400": { @@ -363398,6 +437827,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -363410,27 +437845,27 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore team fixtures", + "summary": "Get a Goodreads book's featured reviews", "tags": [ - "Flashscore" + "Goodreads" ] } }, - "/flashscore/team-news": { + "/goodreads/genre/{name}": { "get": { "consumes": [ "application/json" ], - "description": "Returns up to 100 recent headlines that Flashscore aggregates from news publishers for a team: title, publisher, publication time, image and a Flashscore link that redirects to the publisher's article. These are third-party headlines, separate from Flashscore's own articles in flashscore-news. Article text is not included.", - "operationId": "flashscore-team-news", + "description": "Returns up to 50 books on a Goodreads genre/shelf tag page (e.g. fantasy, romance, science-fiction), Goodreads' per-tag \"top books\" view: title, author, average rating, ratings count, publication year, and how many times the book was shelved under this specific tag. Goodreads' genre/shelf taxonomy is an open, user-generated folksonomy of thousands of tags, not a small fixed list, so there is no directory endpoint — pass any known tag slug, e.g. from a book's genres[] field or a value seen on goodreads.com. There is no pagination beyond the first 50.", + "operationId": "goodreads-genre", "parameters": [ { - "description": "Eight-character Flashscore team id", - "in": "query", - "name": "id", + "description": "Goodreads genre/shelf tag", + "in": "path", + "name": "name", "required": true, "type": "string", - "x-example": "Wtn9Stg0" + "x-example": "fantasy" } ], "produces": [ @@ -363440,19 +437875,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/flashscore.TeamNewsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/goodreads.genreResponseDoc" } }, "400": { @@ -363467,6 +437890,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -363479,227 +437908,33 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore team news headlines", + "summary": "Get a Goodreads genre shelf", "tags": [ - "Flashscore" + "Goodreads" ] } }, - "/flashscore/team-outright-odds": { + "/goodreads/list/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns the title odds bookmakers list for a team in one viewer market, grouped by the competitions it is priced in (league, cup, European competition) with every bookmaker's price and last movement. Pick geo (and subdivision for US or CA) from flashscore-odds-geos. A team with no listed title odds returns empty lists; a player id returns not found.", - "operationId": "flashscore-team-outright-odds", + "description": "Returns a Goodreads Listopia list (ranked book list) by id, paginated.", + "operationId": "goodreads-list", "parameters": [ { - "description": "Eight-character Flashscore team id", - "in": "query", + "description": "Goodreads list id", + "in": "path", "name": "id", "required": true, "type": "string", - "x-example": "Wtn9Stg0" - }, - { - "description": "Viewer market country code from flashscore-odds-geos; defaults to GB", - "enum": [ - "AE", - "AL", - "AM", - "AO", - "AR", - "AT", - "AU", - "AZ", - "BA", - "BD", - "BE", - "BG", - "BO", - "BR", - "BY", - "CA", - "CH", - "CI", - "CL", - "CM", - "CN", - "CO", - "CR", - "CY", - "CZ", - "DE", - "DK", - "DO", - "DZ", - "EC", - "EE", - "EG", - "ES", - "ET", - "FI", - "FR", - "GB", - "GE", - "GH", - "GR", - "GT", - "HK", - "HN", - "HR", - "HU", - "ID", - "IE", - "IL", - "IN", - "IQ", - "IR", - "IS", - "IT", - "JO", - "JP", - "KE", - "KG", - "KH", - "KR", - "KW", - "KZ", - "LA", - "LB", - "LK", - "LT", - "LU", - "LV", - "LY", - "MA", - "MD", - "ME", - "MK", - "MM", - "MN", - "MT", - "MX", - "MY", - "NG", - "NI", - "NL", - "NO", - "NP", - "NZ", - "PA", - "PE", - "PH", - "PK", - "PL", - "PT", - "PY", - "QA", - "RO", - "RS", - "RU", - "SA", - "SD", - "SE", - "SG", - "SI", - "SK", - "SN", - "SV", - "TH", - "TN", - "TR", - "TW", - "TZ", - "UA", - "UG", - "US", - "UY", - "UZ", - "VE", - "VN", - "XK", - "ZA", - "ZM", - "ZW" - ], - "in": "query", - "name": "geo", - "type": "string", - "x-example": "GB" + "x-example": "1" }, { - "description": "US state (with geo US) or Canadian province (with geo CA) code from flashscore-odds-geos; rejected with any other geo", - "enum": [ - "AB", - "AK", - "AL", - "AR", - "AZ", - "BC", - "CA", - "CO", - "CT", - "DC", - "DE", - "FL", - "GA", - "HI", - "IA", - "ID", - "IL", - "IN", - "KS", - "KY", - "LA", - "MA", - "MB", - "MD", - "ME", - "MI", - "MN", - "MO", - "MS", - "MT", - "NB", - "NC", - "ND", - "NE", - "NH", - "NJ", - "NL", - "NM", - "NS", - "NT", - "NU", - "NV", - "NY", - "OH", - "OK", - "ON", - "OR", - "PA", - "PE", - "QC", - "RI", - "SC", - "SD", - "SK", - "TN", - "TX", - "UT", - "VA", - "VT", - "WA", - "WI", - "WV", - "WY", - "YT" - ], + "description": "1-based page number, default 1", "in": "query", - "name": "subdivision", - "type": "string", - "x-example": "NJ" + "name": "page", + "type": "integer" } ], "produces": [ @@ -363709,19 +437944,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/flashscore.TeamOutrightOddsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/goodreads.listResponseDoc" } }, "400": { @@ -363736,6 +437959,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -363748,38 +437977,19 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore team title odds", + "summary": "Get a Goodreads Listopia list", "tags": [ - "Flashscore" + "Goodreads" ] } }, - "/flashscore/team-results": { + "/goodreads/lists": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a team's finished and in-progress matches, newest first, as structured events with start time, stage, both sides, score and competition. Event ids work with the flashscore match endpoints. Request successive pages until event_count is 0; a page past the end returns an empty list.", - "operationId": "flashscore-team-results", - "parameters": [ - { - "description": "Eight-character Flashscore team id", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "Wtn9Stg0" - }, - { - "description": "1-based page from 1 to 300; defaults to 1", - "in": "query", - "maximum": 300, - "minimum": 1, - "name": "page", - "type": "integer", - "x-example": 1 - } - ], + "description": "Returns a catalog of well-known Goodreads Listopia lists (id, name, category). Goodreads has no directory or search endpoint for the tens of thousands of user-created lists, so this is served from a live popular-lists source when available, falling back to a curated, hand-picked catalog otherwise. Pass a returned id to GET /goodreads/list/{id} for that list's ranked book contents. Category enum: `general`, `genre`, `era`, `young_adult`, `children`, `holiday`.", + "operationId": "goodreads-lists", "produces": [ "application/json" ], @@ -363787,35 +437997,17 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/flashscore.TeamEventsResponse" - } - }, - "type": "object" - } - ] - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/goodreads.listsResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -363826,41 +438018,33 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore team results", + "summary": "List curated Goodreads Listopia lists", "tags": [ - "Flashscore" + "Goodreads" ] } }, - "/flashscore/team-squad": { + "/goodreads/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a team's squad grouped by position (goalkeepers, defenders, and so on, plus the coach) with each person's jersey number, age, country (or club, for national teams), injury or absence note and season statistics. The default scope totals all competitions; the scopes list in every response names the per-competition scopes accepted by the scope parameter. Sports without a squad page return not found.", - "operationId": "flashscore-team-squad", + "description": "Searches Goodreads for books by title or author using `q`, returning up to `limit` results (default 10, max 50). Each result has its id, title, author and author id, average rating, ratings count, page count, a truncated description, cover image URL and Goodreads URL. Only books are returned, not authors or lists.", + "operationId": "goodreads-search", "parameters": [ { - "description": "Eight-character Flashscore team id", + "description": "Search query", "in": "query", - "name": "id", + "name": "q", "required": true, "type": "string", - "x-example": "Wtn9Stg0" - }, - { - "description": "Optional team slug; must match the id when supplied", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "manchester-city" + "x-example": "hunger games" }, { - "description": "Squad statistics scope key from the scopes list of a previous response (for example overall-all or league-SY30SsKF); defaults to overall-all", + "description": "Max results, default 10, max 50", "in": "query", - "name": "scope", - "type": "string", - "x-example": "overall-all" + "name": "limit", + "type": "integer" } ], "produces": [ @@ -363870,19 +438054,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/flashscore.TeamSquadResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/goodreads.searchResponseDoc" } }, "400": { @@ -363891,8 +438063,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -363909,48 +438081,27 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore team squad", + "summary": "Search Goodreads books", "tags": [ - "Flashscore" + "Goodreads" ] } }, - "/flashscore/team-transfers": { + "/goodrx/answer": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page (30 rows) of a team's transfer history, newest first: date, direction (in or out), type such as Loan or Transfer, fee text, the player and the clubs on each side. Filter by type to see arrivals or departures only. Request successive pages until transfer_count is 0.", - "operationId": "flashscore-team-transfers", + "description": "Returns one GoodRx health question with its short answer, supporting paragraphs, the source article, the drug it is about, more questions about that drug, related articles, and related medications. Use a slug from /goodrx/answers.", + "operationId": "goodrx-answer", "parameters": [ { - "description": "Eight-character Flashscore team id", + "description": "Question slug from /goodrx/answers", "in": "query", - "name": "id", + "name": "slug", "required": true, "type": "string", - "x-example": "Wtn9Stg0" - }, - { - "description": "Transfer direction filter; defaults to all", - "enum": [ - "all", - "arrivals", - "departures" - ], - "in": "query", - "name": "type", - "type": "string", - "x-example": "all" - }, - { - "description": "1-based page from 1 to 300; defaults to 1", - "in": "query", - "maximum": 300, - "minimum": 1, - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "is-viagra-available-over-the-counter" } ], "produces": [ @@ -363960,19 +438111,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/flashscore.TeamTransfersResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/goodrx.answerResponseDoc" } }, "400": { @@ -363987,6 +438126,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -363999,19 +438144,19 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore team transfers", + "summary": "Get a GoodRx health question and answer", "tags": [ - "Flashscore" + "GoodRx" ] } }, - "/flashscore/top-search": { + "/goodrx/answers": { "get": { "consumes": [ "application/json" ], - "description": "Returns the ten-or-fewer public team, player, and tournament results shown in Flashscore's search overlay. This is a changing curated list, not a complete entity directory.", - "operationId": "flashscore-top-search", + "description": "Returns GoodRx's medication and health questions: the index's top questions and every question with its slug, grouped by drug where GoodRx's index groups it (questions GoodRx lists only in its sitemap carry just their slug). Use a slug with /goodrx/answer.", + "operationId": "goodrx-answers", "produces": [ "application/json" ], @@ -364019,7 +438164,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.topSearchResponseDoc" + "$ref": "#/definitions/goodrx.answersResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -364034,29 +438185,19 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore top search entities", + "summary": "List GoodRx health questions", "tags": [ - "Flashscore" + "GoodRx" ] } }, - "/flashscore/tournament-archive-seasons": { + "/goodrx/brands": { "get": { "consumes": [ "application/json" ], - "description": "Returns every season of the competition that owns a tournament stage: season label, season tournament id, whether it is current, the winning participants and the stage ids of each season, plus the requested stage's names and page tabs (summary, odds, standings, results, fixtures, draw, news). Get a stage id from tournament_stage_id in the competition block of team, player and match event lists, then reuse the stage ids returned here for older seasons. Pass a stage id, not a season tournament id or a competition id: other ids can return an unrelated competition, so check the returned tournament name. An unknown stage id returns not found.", - "operationId": "flashscore-tournament-archive-seasons", - "parameters": [ - { - "description": "Eight-character tournament stage id (tournament_stage_id of an event competition block)", - "in": "query", - "name": "stage_id", - "required": true, - "type": "string", - "x-example": "CfoA8Dmm" - } - ], + "description": "Lists the brand-name drugs GoodRx features on its brand-name drugs page. Each entry has the drug name, `slug`, GoodRx URL, description, information URL and lowest price where shown. The `slug` feeds the drug prices endpoint. If GoodRx is unreachable, a retained copy up to about a day old is returned and flagged with an `X-Availability-Mode: stale` header.", + "operationId": "goodrx-brands", "produces": [ "application/json" ], @@ -364064,29 +438205,11 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/flashscore.TournamentArchiveSeasonsResponse" - } - }, - "type": "object" - } - ] - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/goodrx.brandsResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -364103,36 +438226,27 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore competition seasons by stage id", + "summary": "List GoodRx featured brand-name drugs", "tags": [ - "Flashscore" + "GoodRx" ] } }, - "/flashscore/tournament-events": { + "/goodrx/class": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of the public results or fixtures feed for any supported sport and competition path. Page 1 is embedded in the public tournament page; later pages follow its Show more feed sequence. Sum event_count from successive pages until total_events is reached.", - "operationId": "flashscore-tournament-events", + "description": "Returns the drugs GoodRx lists for one drug class, with each drug's lowest displayed price and summary. Use a slug from /goodrx/classes.", + "operationId": "goodrx-class", "parameters": [ { - "description": "Relative Flashscore competition season results or fixtures path", + "description": "Class slug from /goodrx/classes", "in": "query", - "name": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "/football/england/premier-league-2026-2027/fixtures/" - }, - { - "description": "1-based page; defaults to 1", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "statins" } ], "produces": [ @@ -364142,7 +438256,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.tournamentEventsResponseDoc" + "$ref": "#/definitions/goodrx.classResponseDoc" } }, "400": { @@ -364157,6 +438271,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -364169,229 +438289,19 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore tournament season results or fixtures", + "summary": "List drugs in a GoodRx drug class", "tags": [ - "Flashscore" + "GoodRx" ] } }, - "/flashscore/tournament-outright-odds": { + "/goodrx/classes": { "get": { "consumes": [ "application/json" ], - "description": "Returns the title odds bookmakers list for one competition season in one viewer market, grouped by participant with every bookmaker's price and last movement. The provider lists only the top favourites (three in every competition checked), so this is a favourites market, not the full field. Bookmakers depend on the market: pick geo (and subdivision for US or CA) from flashscore-odds-geos. A market with no listed odds returns empty lists. Use the season-level tournament_id from event competition blocks or flashscore-tournament-archive-seasons.", - "operationId": "flashscore-tournament-outright-odds", - "parameters": [ - { - "description": "Eight-character season-level tournament id (tournament_id of an event competition block or of a season)", - "in": "query", - "name": "tournament_id", - "required": true, - "type": "string", - "x-example": "SY30SsKF" - }, - { - "description": "Viewer market country code from flashscore-odds-geos; defaults to GB", - "enum": [ - "AE", - "AL", - "AM", - "AO", - "AR", - "AT", - "AU", - "AZ", - "BA", - "BD", - "BE", - "BG", - "BO", - "BR", - "BY", - "CA", - "CH", - "CI", - "CL", - "CM", - "CN", - "CO", - "CR", - "CY", - "CZ", - "DE", - "DK", - "DO", - "DZ", - "EC", - "EE", - "EG", - "ES", - "ET", - "FI", - "FR", - "GB", - "GE", - "GH", - "GR", - "GT", - "HK", - "HN", - "HR", - "HU", - "ID", - "IE", - "IL", - "IN", - "IQ", - "IR", - "IS", - "IT", - "JO", - "JP", - "KE", - "KG", - "KH", - "KR", - "KW", - "KZ", - "LA", - "LB", - "LK", - "LT", - "LU", - "LV", - "LY", - "MA", - "MD", - "ME", - "MK", - "MM", - "MN", - "MT", - "MX", - "MY", - "NG", - "NI", - "NL", - "NO", - "NP", - "NZ", - "PA", - "PE", - "PH", - "PK", - "PL", - "PT", - "PY", - "QA", - "RO", - "RS", - "RU", - "SA", - "SD", - "SE", - "SG", - "SI", - "SK", - "SN", - "SV", - "TH", - "TN", - "TR", - "TW", - "TZ", - "UA", - "UG", - "US", - "UY", - "UZ", - "VE", - "VN", - "XK", - "ZA", - "ZM", - "ZW" - ], - "in": "query", - "name": "geo", - "type": "string", - "x-example": "GB" - }, - { - "description": "US state (with geo US) or Canadian province (with geo CA) code from flashscore-odds-geos; rejected with any other geo", - "enum": [ - "AB", - "AK", - "AL", - "AR", - "AZ", - "BC", - "CA", - "CO", - "CT", - "DC", - "DE", - "FL", - "GA", - "HI", - "IA", - "ID", - "IL", - "IN", - "KS", - "KY", - "LA", - "MA", - "MB", - "MD", - "ME", - "MI", - "MN", - "MO", - "MS", - "MT", - "NB", - "NC", - "ND", - "NE", - "NH", - "NJ", - "NL", - "NM", - "NS", - "NT", - "NU", - "NV", - "NY", - "OH", - "OK", - "ON", - "OR", - "PA", - "PE", - "QC", - "RI", - "SC", - "SD", - "SK", - "TN", - "TX", - "UT", - "VA", - "VT", - "WA", - "WI", - "WV", - "WY", - "YT" - ], - "in": "query", - "name": "subdivision", - "type": "string", - "x-example": "NJ" - } - ], + "description": "Lists the drug classes in GoodRx's class directory, such as ACE Inhibitors, with each class name, GoodRx URL and the `slug` used to look up that class. If GoodRx is unreachable, a retained copy up to about a day old is returned and flagged with an `X-Availability-Mode: stale` header.", + "operationId": "goodrx-classes", "produces": [ "application/json" ], @@ -364399,29 +438309,11 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/flashscore.TournamentOutrightOddsResponse" - } - }, - "type": "object" - } - ] - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/goodrx.classesResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -364438,27 +438330,27 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore competition winner odds", + "summary": "List GoodRx drug classes", "tags": [ - "Flashscore" + "GoodRx" ] } }, - "/flashscore/tournament-seasons": { + "/goodrx/comparison": { "get": { "consumes": [ "application/json" ], - "description": "Lists the seasons and winners (both players for doubles) from a public competition archive page. Discover archive paths through flashscore-navigation or flashscore-competitions. Each returned results_path and fixtures_path can be passed to flashscore-tournament-events to retrieve season event feeds.", - "operationId": "flashscore-tournament-seasons", + "description": "Returns a GoodRx head-to-head drug comparison's key takeaways and the two drugs compared, with their price-page and information slugs. Use a slug from /goodrx/comparisons or /goodrx/drug-info alternatives.", + "operationId": "goodrx-comparison", "parameters": [ { - "description": "Relative Flashscore competition archive path ending in /archive/", + "description": "Comparison slug", "in": "query", - "name": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "/football/europe/champions-league/archive/" + "x-example": "lipitor-vs-zetia" } ], "produces": [ @@ -364468,7 +438360,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.tournamentSeasonsResponseDoc" + "$ref": "#/definitions/goodrx.comparisonResponseDoc" } }, "400": { @@ -364483,6 +438375,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -364495,51 +438393,19 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore tournament archive seasons", + "summary": "Get a GoodRx drug comparison", "tags": [ - "Flashscore" + "GoodRx" ] } }, - "/flashscore/tournament-standings": { + "/goodrx/comparisons": { "get": { "consumes": [ "application/json" ], - "description": "Returns a competition-level table feed independent of a match id. Discover the stage-specific view values with flashscore-tournament-standings-views. Data remains in Flashscore's raw delimited format.", - "operationId": "flashscore-tournament-standings", - "parameters": [ - { - "description": "Relative Flashscore competition path from flashscore-navigation or flashscore-competitions; omit /standings/", - "in": "query", - "name": "path", - "required": true, - "type": "string", - "x-example": "/football/england/premier-league/" - }, - { - "description": "View returned by flashscore-tournament-standings-views; defaults to overall", - "enum": [ - "overall", - "home", - "away", - "form_overall", - "form_home", - "form_away", - "overunder_overall", - "overunder_home", - "overunder_away", - "htft_overall", - "htft_home", - "htft_away", - "top_scorers" - ], - "in": "query", - "name": "view", - "type": "string", - "x-example": "overall" - } - ], + "description": "Lists GoodRx's head-to-head drug comparisons grouped by health topic, for example ADHD. Each comparison has a name, a `slug` for the comparison lookup and its GoodRx URL. If GoodRx is unreachable, a retained copy up to about a day old is returned and flagged with an `X-Availability-Mode: stale` header.", + "operationId": "goodrx-comparisons", "produces": [ "application/json" ], @@ -364547,17 +438413,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.tournamentStandingsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/goodrx.comparisonsResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -364574,27 +438434,27 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore competition standings table", + "summary": "List GoodRx drug comparisons", "tags": [ - "Flashscore" + "GoodRx" ] } }, - "/flashscore/tournament-standings-views": { + "/goodrx/condition": { "get": { "consumes": [ "application/json" ], - "description": "Returns the table views currently exposed on a public Flashscore competition standings page. The view set varies by competition and stage; use a returned value with flashscore-tournament-standings.", - "operationId": "flashscore-tournament-standings-views", + "description": "Returns a health condition's GoodRx overview article as titled sections (definition, types, causes, symptoms, diagnosis, medications, treatments, prevention, references), with the condition's alternate name, authors, publish and modified dates, the medications-list URL, and related articles. Use a slug from /goodrx/conditions.", + "operationId": "goodrx-condition", "parameters": [ { - "description": "Relative Flashscore competition path from flashscore-navigation or flashscore-competitions; omit /standings/", + "description": "Condition slug from /goodrx/conditions", "in": "query", - "name": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "/football/england/premier-league/" + "x-example": "acne" } ], "produces": [ @@ -364604,7 +438464,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/flashscore.tournamentStandingsViewsResponseDoc" + "$ref": "#/definitions/goodrx.conditionResponseDoc" } }, "400": { @@ -364619,6 +438479,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -364631,60 +438497,27 @@ "ApiKeyAuth": [] } ], - "summary": "Flashscore competition standings view discovery", + "summary": "Get a GoodRx health condition overview", "tags": [ - "Flashscore" + "GoodRx" ] } }, - "/foodpanda/restaurant": { + "/goodrx/condition-drugs": { "get": { "consumes": [ "application/json" ], - "description": "Returns one foodpanda restaurant's detail by code: name, address, coordinates, budget tier, rating and review count, cuisines, minimum order amount, minimum delivery fee, delivery/pickup availability, timezone, and a hero image. Supplying latitude and longitude only affects the (optional) computed fields the upstream itself returns for that coordinate; it does not filter or reject the lookup.", - "operationId": "foodpanda-restaurant", + "description": "Returns the medications GoodRx lists for one health condition, with each drug's lowest displayed price and summary. Use a slug from /goodrx/conditions whose has_medications is true.", + "operationId": "goodrx-condition-drugs", "parameters": [ { - "description": "Delivery Hero market the restaurant belongs to. Defaults to sg.", - "enum": [ - "sg", - "pk", - "bd", - "hk", - "my", - "ph", - "la", - "kh", - "tw", - "mm" - ], - "in": "query", - "name": "market", - "type": "string", - "x-example": "sg" - }, - { - "description": "Restaurant code, from /foodpanda/search's code field", + "description": "Condition slug from /goodrx/conditions", "in": "query", - "name": "code", + "name": "slug", "required": true, "type": "string", - "x-example": "dxpr" - }, - { - "description": "Caller latitude, optional", - "in": "query", - "name": "latitude", - "type": "number", - "x-example": 1.3521 - }, - { - "description": "Caller longitude, optional", - "in": "query", - "name": "longitude", - "type": "number", - "x-example": 103.8198 + "x-example": "acne" } ], "produces": [ @@ -364694,7 +438527,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foodpanda.restaurantResponseDoc" + "$ref": "#/definitions/goodrx.conditionDrugsResponseDoc" } }, "400": { @@ -364709,6 +438542,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -364721,48 +438560,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get one foodpanda restaurant's detail", + "summary": "List GoodRx medications for a condition", "tags": [ - "Foodpanda" + "GoodRx" ] } }, - "/foodpanda/restaurant/menu": { + "/goodrx/conditions": { "get": { "consumes": [ "application/json" ], - "description": "Returns one restaurant's full menu grouped into categories, plus opening hours, price range, cuisines served, and aggregate rating. Every item carries a title, description, image, sold-out flag, and price -- original_price plus discounted_price when the item is currently discounted.", - "operationId": "foodpanda-restaurant-menu", - "parameters": [ - { - "description": "Delivery Hero market the restaurant belongs to. Defaults to sg.", - "enum": [ - "sg", - "pk", - "bd", - "hk", - "my", - "ph", - "la", - "kh", - "tw", - "mm" - ], - "in": "query", - "name": "market", - "type": "string", - "x-example": "sg" - }, - { - "description": "Restaurant code, from /foodpanda/search's code field", - "in": "query", - "name": "code", - "required": true, - "type": "string", - "x-example": "dxpr" - } - ], + "description": "Lists the health conditions in GoodRx's conditions directory, with each condition's name, `slug` and GoodRx URL. `has_medications` tells you whether GoodRx publishes a medications list for that condition. If GoodRx is unreachable, a retained copy up to about a day old is returned and flagged with an `X-Availability-Mode: stale` header.", + "operationId": "goodrx-conditions", "produces": [ "application/json" ], @@ -364770,17 +438580,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foodpanda.menuResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/goodrx.conditionsResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -364797,46 +438601,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get one foodpanda restaurant's menu with prices", + "summary": "List GoodRx health conditions", "tags": [ - "Foodpanda" + "GoodRx" ] } }, - "/foodpanda/restaurant/reviews": { + "/goodrx/drug-guide": { "get": { "consumes": [ "application/json" ], - "description": "Returns a sample of real customer reviews for one restaurant -- author name, publish date, review text, and a 1-5 rating. This is the curated sample the restaurant's own storefront page embeds for search-engine rich results, not the full review corpus a logged-in customer would see in the app; the number returned scales with the restaurant's popularity rather than being a fixed cap, and can be empty for a restaurant with few or no reviews.", - "operationId": "foodpanda-restaurant-reviews", + "description": "Returns one dedicated GoodRx drug guide. side-effects: common and less common side effects with reported frequencies, serious and reported side effects, and the label source. dosage: coupon price per dosage and quantity for each dosage form, and typical dosing. interactions: interacting drugs grouped by severity (not_recommended, usually_not_recommended, increased_risk), with GoodRx slugs where linked. Includes reviewer, last-reviewed date, and related guides. Use pairs from /goodrx/drug-guides; a drug without that guide returns 404. Requests use US egress because GoodRx is US-only.", + "operationId": "goodrx-drug-guide", "parameters": [ { - "description": "Delivery Hero market the restaurant belongs to. Defaults to sg.", - "enum": [ - "sg", - "pk", - "bd", - "hk", - "my", - "ph", - "la", - "kh", - "tw", - "mm" - ], + "description": "Drug slug from /goodrx/drug-guides", "in": "query", - "name": "market", + "name": "slug", + "required": true, "type": "string", - "x-example": "sg" + "x-example": "torsemide" }, { - "description": "Restaurant code, from /foodpanda/search's code field", + "description": "Guide topic", + "enum": [ + "side-effects", + "dosage", + "interactions" + ], "in": "query", - "name": "code", + "name": "topic", "required": true, "type": "string", - "x-example": "dxpr" + "x-example": "side-effects" } ], "produces": [ @@ -364846,7 +438644,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foodpanda.reviewsResponseDoc" + "$ref": "#/definitions/goodrx.drugGuideResponseDoc" } }, "400": { @@ -364861,6 +438659,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -364873,75 +438677,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get a sample of one foodpanda restaurant's customer reviews", + "summary": "Get a GoodRx drug guide", "tags": [ - "Foodpanda" + "GoodRx" ] } }, - "/foodpanda/search": { + "/goodrx/drug-guides": { "get": { "consumes": [ "application/json" ], - "description": "Returns restaurants delivering to a latitude/longitude in a foodpanda market, optionally filtered by a numeric cuisine id (call foodpanda_search_cuisines for the live, location-scoped set of valid ids). Each restaurant carries its code (the value the restaurant and menu endpoints take), name, address, coordinates, budget tier, rating, cuisines, minimum order amount and delivery fee, delivery/pickup availability, and a hero image. A location with no coverage returns an empty list rather than an error.", - "operationId": "foodpanda-search", + "description": "Returns GoodRx's dedicated drug guide pages (side effects, dosage, and interactions) as drug slug and topic pairs with last-modified dates, optionally filtered by topic and by the first character of the drug slug. Use the pairs with /goodrx/drug-guide.", + "operationId": "goodrx-drug-guides", "parameters": [ { - "description": "Delivery Hero market. Defaults to sg.", + "description": "Guide topic", "enum": [ - "sg", - "pk", - "bd", - "hk", - "my", - "ph", - "la", - "kh", - "tw", - "mm" + "side-effects", + "dosage", + "interactions" ], "in": "query", - "name": "market", - "type": "string", - "x-example": "sg" - }, - { - "description": "Search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 1.3521 - }, - { - "description": "Search center longitude", - "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": 103.8198 - }, - { - "description": "Numeric cuisine id to filter by. Cuisine ids are location- and market-scoped, not a fixed global enum -- call foodpanda_search_cuisines with the same market/latitude/longitude to get the valid id set for this location", - "in": "query", - "name": "cuisine_id", - "type": "integer", - "x-example": 44 - }, - { - "description": "Restaurants to return, clamped to 50 (default 20)", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "name": "topic", + "type": "string" }, { - "description": "Result offset for pagination (default 0)", + "description": "First character of the drug slug: a-z or 0-9", "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "name": "letter", + "type": "string", + "x-example": "a" } ], "produces": [ @@ -364951,7 +438717,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foodpanda.searchResponseDoc" + "$ref": "#/definitions/goodrx.drugGuidesResponseDoc" } }, "400": { @@ -364960,6 +438726,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -364972,54 +438744,38 @@ "ApiKeyAuth": [] } ], - "summary": "Search foodpanda restaurants near a location", + "summary": "List GoodRx drug guides", "tags": [ - "Foodpanda" + "GoodRx" ] } }, - "/foodpanda/search/cuisines": { + "/goodrx/drug-info": { "get": { "consumes": [ "application/json" ], - "description": "Returns foodpanda's own live cuisine catalog for a latitude/longitude in a foodpanda market -- the exact facet list (with real, live restaurant counts) the site's own search page cuisine filter sidebar is populated from. Every entry's id is a valid value for /foodpanda/search's cuisine_id parameter. Cuisine ids are location- and market-scoped, not a fixed global enum: the same coordinate in a different neighborhood, or a different market, can return a different id/count set entirely, so call this endpoint with the same market/latitude/longitude you intend to search rather than reusing ids captured elsewhere.", - "operationId": "foodpanda-search-cuisines", + "description": "Returns a drug's GoodRx information page as titled sections (uses, side effects, pros and cons, pharmacist tips, risks and warnings, dosage, interactions, contraindications, alternatives, pill images, references, and common questions), plus authors, publish and review dates, FAQs, and comparison links to alternatives. With audience=pets it returns the drug's cat and dog page (veterinary uses, side effects, and dosing) for drugs listed by /goodrx/pet-medications; other drugs return 404. Requests use US egress because GoodRx is US-only.", + "operationId": "goodrx-drug-info", "parameters": [ { - "description": "Delivery Hero market. Defaults to sg.", - "enum": [ - "sg", - "pk", - "bd", - "hk", - "my", - "ph", - "la", - "kh", - "tw", - "mm" - ], - "in": "query", - "name": "market", - "type": "string", - "x-example": "sg" - }, - { - "description": "Search center latitude", + "description": "Drug slug from /goodrx/drugs (or /goodrx/pet-medications for audience=pets)", "in": "query", - "name": "latitude", + "name": "slug", "required": true, - "type": "number", - "x-example": 1.3521 + "type": "string", + "x-example": "atorvastatin" }, { - "description": "Search center longitude", + "default": "people", + "description": "people for the general page, pets for the cat and dog page", + "enum": [ + "people", + "pets" + ], "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": 103.8198 + "name": "audience", + "type": "string" } ], "produces": [ @@ -365029,7 +438785,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foodpanda.cuisinesResponseDoc" + "$ref": "#/definitions/goodrx.drugInfoResponseDoc" } }, "400": { @@ -365038,6 +438794,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -365050,24 +438818,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get foodpanda's live cuisine filter catalog for a location", + "summary": "Get GoodRx drug information", "tags": [ - "Foodpanda" + "GoodRx" ] } }, - "/forbes/article": { + "/goodrx/drug-options": { "get": { - "description": "Returns public Forbes article metadata and body content. The response preserves rich body HTML, paragraphs, headings, and public embed metadata. Accepts dated /sites//... and /councils//... URLs; it does not bypass login, subscription, or bot challenges.", - "operationId": "forbes-article", + "consumes": [ + "application/json" + ], + "description": "Returns every brand and generic label, dosage form, strength, and quantity GoodRx prices for one drug, with GoodRx's default prescription. Use these values for /goodrx/drug-prices.", + "operationId": "goodrx-drug-options", "parameters": [ { - "description": "Canonical HTTPS Forbes article URL", + "description": "Drug slug from /goodrx/drugs", "in": "query", - "name": "url", + "name": "slug", "required": true, "type": "string", - "x-example": "https://www.forbes.com/sites/example/2026/09/21/example-story/" + "x-example": "atorvastatin" } ], "produces": [ @@ -365077,7 +438848,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/forbes.articleResponseDoc" + "$ref": "#/definitions/goodrx.drugOptionsResponseDoc" } }, "400": { @@ -365098,12 +438869,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -365116,30 +438881,83 @@ "ApiKeyAuth": [] } ], - "summary": "Forbes article content", + "summary": "List a GoodRx drug's prescription options", "tags": [ - "Forbes" + "GoodRx" ] } }, - "/forbes/author": { + "/goodrx/drug-prices": { "get": { - "description": "Returns one Forbes contributor or staff author's public byline page: name, display type, bio, headshot, and their most recent bylined articles. This is the journalist byline page at forbes.com/sites//, distinct from forbes-person, which is a billionaire net-worth profile from Forbes's rich-list data.", - "operationId": "forbes-author", + "consumes": [ + "application/json" + ], + "description": "Returns GoodRx coupon, membership, and mail-order prices by pharmacy for one drug and prescription (brand/generic label, form, dosage, quantity), plus the drug summary, the priced configuration, the location prices were computed for, and every available label/form/dosage/quantity. Omit label/form/dosage/quantity for GoodRx's default prescription; values must come from /goodrx/drug-options. Pass latitude and longitude (optionally zip_code and state) to price at a US location; otherwise prices reflect a US location chosen by GoodRx. Requests use US egress because GoodRx is US-only.", + "operationId": "goodrx-drug-prices", "parameters": [ { - "description": "Forbes contributor slug, e.g. alisondurkee", + "description": "Drug slug from /goodrx/drugs, /goodrx/class, or /goodrx/condition-drugs", "in": "query", "name": "slug", + "required": true, "type": "string", - "x-example": "alisondurkee" + "x-example": "atorvastatin" }, { - "description": "Canonical forbes.com/sites// URL, as an alternative to slug", + "description": "Brand or generic label slug from /goodrx/drug-options", "in": "query", - "name": "url", + "name": "label", "type": "string", - "x-example": "https://www.forbes.com/sites/alisondurkee/" + "x-example": "atorvastatin" + }, + { + "description": "Form slug from /goodrx/drug-options", + "in": "query", + "name": "form", + "type": "string", + "x-example": "tablet" + }, + { + "description": "Dosage slug from /goodrx/drug-options", + "in": "query", + "name": "dosage", + "type": "string", + "x-example": "20mg" + }, + { + "description": "Quantity (1-999999); /goodrx/drug-options lists GoodRx's standard quantities", + "in": "query", + "name": "quantity", + "type": "integer", + "x-example": 30 + }, + { + "description": "Latitude of a US location to price at (requires longitude)", + "in": "query", + "name": "latitude", + "type": "number", + "x-example": 40.7506 + }, + { + "description": "Longitude of a US location to price at (requires latitude)", + "in": "query", + "name": "longitude", + "type": "number", + "x-example": -73.9972 + }, + { + "description": "Five-digit ZIP code of that location", + "in": "query", + "name": "zip_code", + "type": "string", + "x-example": "10001" + }, + { + "description": "Two-letter state code of that location", + "in": "query", + "name": "state", + "type": "string", + "x-example": "NY" } ], "produces": [ @@ -365149,7 +438967,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/forbes.authorResponseDoc" + "$ref": "#/definitions/goodrx.drugPricesResponseDoc" } }, "400": { @@ -365170,12 +438988,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -365188,37 +439000,55 @@ "ApiKeyAuth": [] } ], - "summary": "Forbes contributor/staff author profile", + "summary": "Get GoodRx drug prices by pharmacy", "tags": [ - "Forbes" + "GoodRx" ] } }, - "/forbes/billionaires": { + "/goodrx/drugs": { "get": { - "description": "Returns a paginated Forbes billionaires list from the public Forbes JSON feed. The default field set includes ranking, worth, person identity, citizenship, category, industry, organization, image, and biography fields.", - "operationId": "forbes-billionaires", + "consumes": [ + "application/json" + ], + "description": "Lists the drugs GoodRx files under one letter of its A-Z directory, chosen with the required `letter` (`a` to `z`). Each drug has its name, price-page `slug`, GoodRx URL and drug-information URL. If GoodRx is unreachable, a retained copy up to about a day old is returned and flagged with an `X-Availability-Mode: stale` header.", + "operationId": "goodrx-drugs", "parameters": [ { - "default": 2026, - "description": "Forbes list year", - "in": "query", - "name": "year", - "type": "integer" - }, - { - "default": 50, - "description": "Page size (1-100)", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "default": 0, - "description": "Zero-based offset", + "description": "Directory letter", + "enum": [ + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z" + ], "in": "query", - "name": "start", - "type": "integer" + "name": "letter", + "required": true, + "type": "string", + "x-example": "a" } ], "produces": [ @@ -365228,7 +439058,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/forbes.billionairesResponseDoc" + "$ref": "#/definitions/goodrx.drugsResponseDoc" } }, "400": { @@ -365237,24 +439067,12 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -365267,16 +439085,29 @@ "ApiKeyAuth": [] } ], - "summary": "Forbes billionaires list", + "summary": "List GoodRx drugs by letter", "tags": [ - "Forbes" + "GoodRx" ] } }, - "/forbes/categories": { + "/goodrx/health-article": { "get": { - "description": "Lists the current public Forbes navigation taxonomy, including business, money, innovation, leadership, lifestyle, Forbes Vetted, Advisor, Health, and their public subsections. Article promos, account surfaces, games, video-only links, and external hosts are excluded.", - "operationId": "forbes-categories", + "consumes": [ + "application/json" + ], + "description": "Returns one GoodRx Health article: headline, description, authors, medical reviewers, published and modified dates, category tag, key takeaways, the body as headed sections of paragraphs and lists, FAQs, references, and related medications. Requests use US egress because GoodRx is US-only.", + "operationId": "goodrx-health-article", + "parameters": [ + { + "description": "Article path from /goodrx/health-articles (or a www.goodrx.com article URL)", + "in": "query", + "name": "path", + "required": true, + "type": "string", + "x-example": "well-being/sleep/cbd-for-sleep" + } + ], "produces": [ "application/json" ], @@ -365284,17 +439115,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/forbes.categoriesResponseDoc" + "$ref": "#/definitions/goodrx.healthArticleResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -365311,24 +439148,61 @@ "ApiKeyAuth": [] } ], - "summary": "Forbes public editorial sections", + "summary": "Get a GoodRx Health article", "tags": [ - "Forbes" + "GoodRx" ] } }, - "/forbes/headlines": { + "/goodrx/health-articles": { "get": { - "description": "Returns up to 50 unique Forbes article cards for one navigation path. `section` is required and takes a `path` value from the Forbes categories endpoint, such as `/business/`. Each card has the title, article URL, description, author, and publication time and image URL when present. A blocked section returns an error, not an empty list.", - "operationId": "forbes-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns one page of GoodRx Health articles in a section, optionally one topic, most recently modified first: each article's path, section, topic, URL, and last-modified date, with total and total pages. Use a path with /goodrx/health-article.", + "operationId": "goodrx-health-articles", "parameters": [ { - "description": "Forbes navigation path from /forbes/categories", + "description": "Article section", + "enum": [ + "conditions", + "health-topic", + "well-being", + "pet-health", + "insurance", + "classes", + "drugs", + "healthcare-access", + "corporate", + "hcp", + "drug" + ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "/business/" + "x-example": "conditions" + }, + { + "description": "Topic slug from /goodrx/health-topics", + "in": "query", + "name": "topic", + "type": "string", + "x-example": "sleep" + }, + { + "default": 1, + "description": "Page number, starting at 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "default": 50, + "description": "Articles per page (1-200)", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -365338,7 +439212,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/forbes.headlinesResponseDoc" + "$ref": "#/definitions/goodrx.healthArticlesResponseDoc" } }, "400": { @@ -365359,12 +439233,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -365377,24 +439245,38 @@ "ApiKeyAuth": [] } ], - "summary": "Forbes section headlines", + "summary": "List GoodRx Health articles", "tags": [ - "Forbes" + "GoodRx" ] } }, - "/forbes/person": { + "/goodrx/health-topics": { "get": { - "description": "Returns public Forbes JSON profile data plus the profile page's biography, real-time net-worth display, wealth history, personal facts, editor update, and list-appearance metadata.", - "operationId": "forbes-person", + "consumes": [ + "application/json" + ], + "description": "Returns every GoodRx Health article topic as section and topic pairs with article counts and last-modified dates, optionally for one section. Sections: conditions, health-topic, well-being, pet-health, insurance, classes, drugs, healthcare-access, corporate, hcp (clinician resources), and drug (articles about one drug; the topic is the drug slug). Use the pairs with /goodrx/health-articles.", + "operationId": "goodrx-health-topics", "parameters": [ { - "description": "Forbes person URI", + "description": "Article section", + "enum": [ + "conditions", + "health-topic", + "well-being", + "pet-health", + "insurance", + "classes", + "drugs", + "healthcare-access", + "corporate", + "hcp", + "drug" + ], "in": "query", - "name": "uri", - "required": true, - "type": "string", - "x-example": "vladimir-lisin" + "name": "section", + "type": "string" } ], "produces": [ @@ -365404,7 +439286,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/forbes.personResponseDoc" + "$ref": "#/definitions/goodrx.healthTopicsResponseDoc" } }, "400": { @@ -365413,24 +439295,12 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -365443,26 +439313,19 @@ "ApiKeyAuth": [] } ], - "summary": "Forbes person profile", + "summary": "List GoodRx Health article topics", "tags": [ - "Forbes" + "GoodRx" ] } }, - "/foreignaffairs/article": { + "/goodrx/pet-medications": { "get": { - "description": "Returns public article metadata and ordered body paragraphs from a canonical Foreign Affairs article URL. Incomplete, truncated, challenge, or contaminated upstream HTML is rejected as an upstream error.", - "operationId": "foreignaffairs-article", - "parameters": [ - { - "description": "Canonical Foreign Affairs article URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.foreignaffairs.com/united-states/americas-attrition-trap" - } + "consumes": [ + "application/json" ], + "description": "Lists the drugs that have a GoodRx information page for cats and dogs (21 on 2026-10-03). Each entry has the drug `slug` and the URL of its pet page; the `slug` can be passed to the drug information lookup with `audience=pets`. A retained copy up to about a day old is returned, flagged `X-Availability-Mode: stale`, if GoodRx is unreachable.", + "operationId": "goodrx-pet-medications", "produces": [ "application/json" ], @@ -365470,19 +439333,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foreignaffairs.articleResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/goodrx.petMedicationsResponseDoc" } }, "429": { @@ -365503,30 +439354,27 @@ "ApiKeyAuth": [] } ], - "summary": "Extract a Foreign Affairs article", + "summary": "List GoodRx pet medications", "tags": [ - "ForeignAffairs" + "GoodRx" ] } }, - "/foreignaffairs/author": { + "/google-jobs/job": { "get": { - "description": "Returns one Foreign Affairs contributor's public profile: name, bio, and the recent articles listed on their contributor page. Foreign Affairs does not paginate this page; it shows a fixed recent-article list.", - "operationId": "foreignaffairs-author", + "consumes": [ + "application/json" + ], + "description": "Returns one Google Careers posting by its numeric job id (the `id` field returned by search).", + "operationId": "google-jobs-job", "parameters": [ { - "description": "Author slug, e.g. robert-kagan", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "robert-kagan" - }, - { - "description": "Canonical foreignaffairs.com/authors/ URL; alternative to slug", + "description": "Numeric Google job id", "in": "query", - "name": "url", + "name": "id", + "required": true, "type": "string", - "x-example": "https://www.foreignaffairs.com/authors/robert-kagan" + "x-example": "85207000467546822" } ], "produces": [ @@ -365536,7 +439384,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foreignaffairs.authorResponseDoc" + "$ref": "#/definitions/googlejobs.jobResponseDoc" } }, "400": { @@ -365569,16 +439417,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Foreign Affairs author profile", + "summary": "Google Jobs single posting", "tags": [ - "ForeignAffairs" + "Google Jobs" ] } }, - "/foreignaffairs/headlines": { + "/google-jobs/search": { "get": { - "description": "Returns fresh Foreign Affairs headlines from the site's public, site-wide RSS feed. Article pages and account state are not required.", - "operationId": "foreignaffairs-headlines", + "consumes": [ + "application/json" + ], + "description": "Searches Google's public careers site (careers.google.com) via its server-rendered search page's embedded job data. Each result includes the description, responsibilities, and qualifications inline. Page size is fixed by Google at 20 results.", + "operationId": "google-jobs-search", + "parameters": [ + { + "description": "Search query", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "software engineer" + }, + { + "description": "Location filter (free text)", + "in": "query", + "name": "location", + "type": "string", + "x-example": "Singapore" + }, + { + "description": "Page number, 1-based", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], "produces": [ "application/json" ], @@ -365586,7 +439461,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foreignaffairs.headlinesResponseDoc" + "$ref": "#/definitions/googlejobs.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -365607,24 +439488,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Foreign Affairs site-wide headlines", + "summary": "Google Jobs search", "tags": [ - "ForeignAffairs" + "Google Jobs" ] } }, - "/foreignaffairs/topic": { + "/google/finance/analyst-articles/{quote}": { "get": { - "description": "Returns the newest items from one Foreign Affairs topic RSS feed. Discover accepted values with foreignaffairs-topics; unknown topic values are rejected before upstream I/O.", - "operationId": "foreignaffairs-topic", + "consumes": [ + "application/json" + ], + "description": "Returns the analyst articles Google Finance shows for a quote such as `AAPL:NASDAQ`. Each article has its title, source, URL, publication time (ISO and Unix), thumbnail and the related instruments with price, change and exchange. Articles come back only when Google Finance has them for that quote.", + "operationId": "google-finance-analyst-articles", "parameters": [ { - "description": "Foreign Affairs topic slug from foreignaffairs-topics", - "in": "query", - "name": "topic", + "description": "Quote identifier such as AAPL:NASDAQ", + "in": "path", + "name": "quote", "required": true, "type": "string", - "x-example": "economics" + "x-example": "AAPL:NASDAQ" } ], "produces": [ @@ -365634,7 +439518,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foreignaffairs.topicResponseDoc" + "$ref": "#/definitions/finance.articlesResponseDoc" } }, "400": { @@ -365643,8 +439527,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -365661,50 +439551,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Foreign Affairs topic feed", + "summary": "Google Finance analyst articles", "tags": [ - "ForeignAffairs" + "Google" ] } }, - "/foreignaffairs/topics": { + "/google/finance/chart/{quote}": { "get": { - "description": "Lists the 19 Foreign Affairs topics accepted by the topic endpoint, such as `economics`, `nato`, `sanctions` and `us-foreign-policy`. Each topic has its `slug`, display name and RSS `feed_url`. It takes no parameters.", - "operationId": "foreignaffairs-topics", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/foreignaffairs.topicsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "List Foreign Affairs topic feeds", - "tags": [ - "ForeignAffairs" - ] - } - }, - "/foreignpolicy/article": { - "get": { - "description": "Returns a public Foreign Policy article's metadata and full body paragraphs from a canonical article URL. is_gated reports the site's own content-tier marker; the full body is always returned regardless, since Foreign Policy serves it in full to anonymous requests either way.", - "operationId": "foreignpolicy-article", + "description": "Returns the price chart for a Google Finance quote such as `AAPL:NASDAQ` or `BTC-USD` over a window from `1d` to `max` (default `1d`). Each point has a time, price and volume; the response also carries the instrument's name, exchange, currency, current price, change and previous close.", + "operationId": "google-finance-chart", "parameters": [ { - "description": "Canonical foreignpolicy.com article URL", - "in": "query", - "name": "url", + "description": "Quote identifier such as AAPL:NASDAQ", + "in": "path", + "name": "quote", "required": true, "type": "string", - "x-example": "https://foreignpolicy.com/2026/04/15/china-ports-maritime-power/" + "x-example": "AAPL:NASDAQ" + }, + { + "description": "Window: 1d, 5d, 1m, 6m, ytd, 1y, 5y, max", + "in": "query", + "name": "window", + "type": "string" } ], "produces": [ @@ -365714,7 +439587,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foreignpolicy.articleResponseDoc" + "$ref": "#/definitions/finance.chartResponseDoc" } }, "400": { @@ -365729,8 +439602,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -365747,30 +439620,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Foreign Policy article content", + "summary": "Google Finance chart data", "tags": [ - "ForeignPolicy" + "Google" ] } }, - "/foreignpolicy/author": { + "/google/finance/classification/{quote}": { "get": { - "description": "Returns one Foreign Policy contributor's public profile: name, bio, and their recent articles. Further articles load behind a client-side control this endpoint does not follow, so this is the author page's initial recent-article list, not the contributor's full history.", - "operationId": "foreignpolicy-author", + "consumes": [ + "application/json" + ], + "description": "Returns the category labels Google Finance assigns to a quote such as `AAPL:NASDAQ`, for example Technology, in `categories`. The response also carries the instrument itself: ticker, exchange, name, current price, change, previous close, currency and after-hours data.", + "operationId": "google-finance-classification", "parameters": [ { - "description": "Author slug, e.g. anne-applebaum", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "anne-applebaum" - }, - { - "description": "Canonical foreignpolicy.com/author// URL; alternative to slug", - "in": "query", - "name": "url", + "description": "Quote identifier such as AAPL:NASDAQ", + "in": "path", + "name": "quote", + "required": true, "type": "string", - "x-example": "https://foreignpolicy.com/author/anne-applebaum/" + "x-example": "AAPL:NASDAQ" } ], "produces": [ @@ -365780,7 +439650,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foreignpolicy.authorResponseDoc" + "$ref": "#/definitions/finance.classificationResponseDoc" } }, "400": { @@ -365795,8 +439665,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -365813,16 +439683,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Foreign Policy author profile", + "summary": "Google Finance classification data", "tags": [ - "ForeignPolicy" + "Google" ] } }, - "/foreignpolicy/headlines": { + "/google/finance/company/{quote}": { "get": { - "description": "Returns fresh headlines from Foreign Policy's public, site-wide RSS feed. There is no section parameter: use foreignpolicy-topic to scope to one category or tag.", - "operationId": "foreignpolicy-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns Google Finance company details for a quote such as `AAPL:NASDAQ`: description, CEO, employee count, headquarters, sector, market capitalisation, P/E ratio, open, day high and low, 52-week high and low, and volume.", + "operationId": "google-finance-company", + "parameters": [ + { + "description": "Quote identifier such as AAPL:NASDAQ", + "in": "path", + "name": "quote", + "required": true, + "type": "string", + "x-example": "AAPL:NASDAQ" + } + ], "produces": [ "application/json" ], @@ -365830,49 +439713,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foreignpolicy.headlinesResponseDoc" + "$ref": "#/definitions/finance.companyResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Foreign Policy site-wide headlines", - "tags": [ - "ForeignPolicy" - ] - } - }, - "/foreignpolicy/live": { - "get": { - "description": "Returns Foreign Policy's public FP Live conversation directory. The upstream renders the complete all-conversations list and applies year filtering in the browser.", - "operationId": "foreignpolicy-live", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/foreignpolicy.liveResponseDoc" - } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -365889,24 +439746,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Foreign Policy Live conversations", + "summary": "Google Finance company data", "tags": [ - "ForeignPolicy" + "Google" ] } }, - "/foreignpolicy/live-detail": { + "/google/finance/context": { "get": { - "description": "Returns one public FP Live conversation by the slug returned by foreignpolicy-live, including its description and any embedded video highlight metadata.", - "operationId": "foreignpolicy-live-detail", + "consumes": [ + "application/json" + ], + "description": "Searches Google Finance for instruments matching a company name or ticker query and returns results with ticker, exchange, name, price, currency, and change data. Use a returned ticker with quote, company, chart, or news endpoints.", + "operationId": "google-finance-context", "parameters": [ { - "description": "Foreign Policy FP Live conversation slug", + "description": "Search query", "in": "query", - "name": "live", + "name": "q", "required": true, "type": "string", - "x-example": "ama-ask-me-anything-ukraine" + "x-example": "apple" } ], "produces": [ @@ -365916,7 +439776,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foreignpolicy.liveDetailResponseDoc" + "$ref": "#/definitions/finance.contextResponseDoc" } }, "400": { @@ -365931,8 +439791,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -365949,24 +439809,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Foreign Policy Live conversation", + "summary": "Find Google Finance instruments by query", "tags": [ - "ForeignPolicy" + "Google" ] } }, - "/foreignpolicy/project": { + "/google/finance/financials/{quote}": { "get": { - "description": "Returns a public Foreign Policy curated project hub and its current article cards. Use foreignpolicy-projects to discover live project slugs.", - "operationId": "foreignpolicy-project", + "consumes": [ + "application/json" + ], + "description": "Returns the financial statements Google Finance holds for a quote such as `AAPL:NASDAQ`, as `annual` and `quarterly` rows plus a `currency`. Each row has revenue, net income, EBITDA, EPS, margins, cash flow, assets, liabilities and equity. The rows are empty when Google Finance has no statement data for the quote.", + "operationId": "google-finance-financials", "parameters": [ { - "description": "Foreign Policy project slug", - "in": "query", - "name": "project", + "description": "Quote identifier such as AAPL:NASDAQ", + "in": "path", + "name": "quote", "required": true, "type": "string", - "x-example": "asia" + "x-example": "AAPL:NASDAQ" } ], "produces": [ @@ -365976,7 +439839,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foreignpolicy.projectResponseDoc" + "$ref": "#/definitions/finance.financialsResponseDoc" } }, "400": { @@ -365991,8 +439854,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -366009,24 +439872,32 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Foreign Policy project hub", + "summary": "Google Finance financial statements", "tags": [ - "ForeignPolicy" + "Google" ] } }, - "/foreignpolicy/projects": { + "/google/finance/markets/categories/{category}/news": { "get": { - "description": "Returns one page of Foreign Policy's live public project directory. Follow next_page until it is zero to enumerate the current project slug space, then pass a slug to foreignpolicy-project.", - "operationId": "foreignpolicy-projects", + "consumes": [ + "application/json" + ], + "description": "Returns Google Finance news for one market category, identified by the `category` path id. Use `offset` to page through results. Each item has its title, URL and publication time (ISO and Unix), plus the source, a thumbnail and any related quotes with price, change and percent change when Google provides them. The response also echoes `category` and `offset`.", + "operationId": "google-finance-markets-category-news", "parameters": [ { - "default": 1, - "description": "1-based project-directory page, defaults to 1", + "description": "Google Finance category id", + "in": "path", + "name": "category", + "required": true, + "type": "string", + "x-example": "2" + }, + { + "description": "Result offset", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page", + "name": "offset", "type": "integer" } ], @@ -366037,7 +439908,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foreignpolicy.projectsResponseDoc" + "$ref": "#/definitions/finance.categoryNewsResponseDoc" } }, "400": { @@ -366046,8 +439917,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -366064,43 +439941,32 @@ "ApiKeyAuth": [] } ], - "summary": "List Foreign Policy project hubs", + "summary": "Google Finance category news", "tags": [ - "ForeignPolicy" + "Google" ] } }, - "/foreignpolicy/topic": { + "/google/finance/markets/categories/{category}/stocks": { "get": { - "description": "Returns one page of a public Foreign Policy category or tag archive (newest first). type selects the archive namespace and defaults to category; topic is the slug within it; page is 1-based.", - "operationId": "foreignpolicy-topic", + "consumes": [ + "application/json" + ], + "description": "Lists the instruments in one Google Finance market category, chosen by the required `category` id and paged with `offset`. Each item has its ticker, exchange, name, price, change and change percent, previous close, currency, country and after-hours data.", + "operationId": "google-finance-markets-category-stocks", "parameters": [ { - "default": "category", - "description": "Archive namespace, defaults to category", - "enum": [ - "category", - "tag" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "description": "Foreign Policy category or tag slug", - "in": "query", - "name": "topic", + "description": "Google Finance category id", + "in": "path", + "name": "category", "required": true, "type": "string", - "x-example": "world-brief" + "x-example": "2" }, { - "default": 1, - "description": "1-based archive page, defaults to 1", + "description": "Result offset", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page", + "name": "offset", "type": "integer" } ], @@ -366111,7 +439977,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foreignpolicy.topicResponseDoc" + "$ref": "#/definitions/finance.categoryStocksResponseDoc" } }, "400": { @@ -366126,8 +439992,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -366144,26 +440010,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Foreign Policy category or tag archive", + "summary": "Google Finance category stocks", "tags": [ - "ForeignPolicy" + "Google" ] } }, - "/fortune/article": { + "/google/finance/markets/earnings": { "get": { - "description": "Returns one Fortune article by its canonical `url`. The response has the title, description, publish and update times, section, authors, lead image, body `paragraphs` and a `paywalled` flag. Subscriber-only or blocked articles return an upstream error.", - "operationId": "fortune-article", - "parameters": [ - { - "description": "Canonical Fortune article URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://fortune.com/2026/09/21/example/" - } + "consumes": [ + "application/json" ], + "description": "Returns the Google Finance earnings calendar. Each item has the company name, fiscal period, event time (including a Unix timestamp), conference call phone and URL when listed, and the instrument with its ticker, exchange, price and change.", + "operationId": "google-finance-markets-earnings", "produces": [ "application/json" ], @@ -366171,17 +440030,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/finance.earningsResponseDoc" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -366198,39 +440051,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fortune article content", + "summary": "Google Finance earnings calendar", "tags": [ - "Fortune" + "Google" ] } }, - "/fortune/author": { + "/google/finance/markets/featured": { "get": { - "description": "Returns one Fortune author's public profile: name, bio, email, social accounts, and one page of their recent articles (30 fortune.com/2026-format article dates use \"Month D, YYYY\"; converted to YYYY-MM-DD here).", - "operationId": "fortune-author", - "parameters": [ - { - "description": "Author slug, e.g. sheryl-estrada", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "sheryl-estrada" - }, - { - "description": "Canonical fortune.com/author// URL, optionally with a /page// suffix; alternative to slug", - "in": "query", - "name": "url", - "type": "string", - "x-example": "https://fortune.com/author/sheryl-estrada/page/2/" - }, - { - "default": 1, - "description": "1-based page number; overrides any page number in url", - "in": "query", - "name": "page", - "type": "integer" - } + "consumes": [ + "application/json" ], + "description": "Returns the stocks Google Finance features on its markets page. Each instrument has its ticker, exchange, name, price, change and change percent, previous close, currency, country, time zone and after-hours data.", + "operationId": "google-finance-markets-featured", "produces": [ "application/json" ], @@ -366238,17 +440071,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.fortuneAuthorResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/finance.instrumentsResponseDoc" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -366265,88 +440092,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fortune author profile", + "summary": "Google Finance featured stocks", "tags": [ - "Fortune" + "Google" ] } }, - "/fortune/companies": { + "/google/finance/markets/headline": { "get": { - "description": "Searches Fortune's company directory, 30 companies per page, with `page` starting at 1. Filter by `search` (company name), `country`, `industry` (exact title), `ranking` with `year`, and ranges `min_revenue` and `max_revenue` (in $M) and `min_employees` and `max_employees`. Each item has name, slug, URL, country, revenues and description. Invalid `country` or `industry` values return `400`.", - "operationId": "fortune-companies", - "parameters": [ - { - "description": "Case-insensitive company-name search", - "in": "query", - "name": "search", - "type": "string", - "x-example": "alphabet" - }, - { - "description": "Country/territory slug or title; call fortune-company-filters for the complete accepted set", - "in": "query", - "name": "country", - "type": "string", - "x-example": "china" - }, - { - "description": "Exact industry title; call fortune-company-filters for the complete accepted set", - "in": "query", - "name": "industry", - "type": "string", - "x-example": "Computer Software" - }, - { - "description": "Fortune ranking slug to filter companies that appear on it; call fortune-company-filters for the accepted set", - "in": "query", - "name": "ranking", - "type": "string", - "x-example": "fortune500" - }, - { - "description": "Ranking year the ranking filter is evaluated against; defaults to the current year", - "in": "query", - "name": "year", - "type": "string", - "x-example": "2026" - }, - { - "description": "Minimum revenue in $M", - "in": "query", - "name": "min_revenue", - "type": "integer", - "x-example": 1000 - }, - { - "description": "Maximum revenue in $M", - "in": "query", - "name": "max_revenue", - "type": "integer", - "x-example": 500000 - }, - { - "description": "Minimum employee count", - "in": "query", - "name": "min_employees", - "type": "integer", - "x-example": 1000 - }, - { - "description": "Maximum employee count", - "in": "query", - "name": "max_employees", - "type": "integer", - "x-example": 500000 - }, - { - "default": 1, - "description": "1-based page number; 30 companies per page", - "in": "query", - "name": "page", - "type": "integer" - } + "consumes": [ + "application/json" ], + "description": "Returns the top headline on Google Finance markets as one article: title, source, URL, publication time (ISO and Unix), thumbnail and the related instruments with price and change. The article is present only when Google Finance shows a headline.", + "operationId": "google-finance-markets-headline", "produces": [ "application/json" ], @@ -366354,11 +440112,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.fortuneCompaniesResponseDoc" + "$ref": "#/definitions/finance.headlineResponseDoc" } }, - "400": { - "description": "Bad Request", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -366375,16 +440133,19 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Fortune company directory", + "summary": "Google Finance top headline", "tags": [ - "Fortune" + "Google" ] } }, - "/fortune/companies/filters": { + "/google/finance/markets/indices": { "get": { - "description": "Lists the filter values the Fortune company directory accepts: countries and industries (each with slug and title), the rankings usable with the `ranking` filter and their available years, and the minimum and maximum revenue and employee counts. The rankings are a subset of all Fortune rankings. It takes no parameters.", - "operationId": "fortune-company-filters", + "consumes": [ + "application/json" + ], + "description": "Returns the market indices Google Finance lists, such as the Dow Jones Industrial Average. Each index has its ticker, exchange, name, current value, change and change percent, previous close and last update time.", + "operationId": "google-finance-markets-indices", "produces": [ "application/json" ], @@ -366392,7 +440153,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.fortuneCompanyFiltersResponseDoc" + "$ref": "#/definitions/finance.instrumentsResponseDoc" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -366407,30 +440174,37 @@ "ApiKeyAuth": [] } ], - "summary": "Discover Fortune company directory filters", + "summary": "Google Finance market indices", "tags": [ - "Fortune" + "Google" ] } }, - "/fortune/company": { + "/google/finance/markets/movers": { "get": { - "description": "Returns one company's public Fortune profile: fact sheet (headquarters, CEO, ticker, revenues, employees, ...), the Fortune rankings it appears on, workplace data tables, earnings report links, and social accounts, recovered from the company's own fortune.com page.", - "operationId": "fortune-company", + "consumes": [ + "application/json" + ], + "description": "Lists Google Finance market movers. `categories` takes comma-separated numeric categories, `count` sets how many items to return (default 20) and `offset` skips ahead. Each item has its ticker, exchange, name, price, change and change percent, and previous close.", + "operationId": "google-finance-markets-movers", "parameters": [ { - "description": "Company slug, e.g. alphabet", + "description": "Comma-separated numeric categories", "in": "query", - "name": "slug", - "type": "string", - "x-example": "alphabet" + "name": "categories", + "type": "string" }, { - "description": "Canonical fortune.com/company// URL; alternative to slug", + "description": "Result count", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://fortune.com/company/alphabet/" + "name": "count", + "type": "integer" + }, + { + "description": "Result offset", + "in": "query", + "name": "offset", + "type": "integer" } ], "produces": [ @@ -366440,7 +440214,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.fortuneCompanyResponseDoc" + "$ref": "#/definitions/finance.marketMoversResponseDoc" } }, "400": { @@ -366455,6 +440229,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -366467,62 +440247,31 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Fortune company profile", + "summary": "Google Finance market movers", "tags": [ - "Fortune" + "Google" ] } }, - "/fortune/headlines": { + "/google/finance/markets/top": { "get": { - "description": "Returns the latest Fortune headlines for one section. `section` is required and takes one of 36 slugs such as `latest`, `fortune-500`, `finance`, `artificial-intelligence`, `crypto`, `leadership` or `europe`. Each item has its title and URL.", - "operationId": "fortune-headlines", + "consumes": [ + "application/json" + ], + "description": "Lists the top Google Finance instruments for a ranking metric. `metric` is a Google Finance metric id (default 6) and `page` is the page number (default 1). Each item has its ticker, exchange, name, price, change and change percent, and previous close.", + "operationId": "google-finance-markets-top", "parameters": [ { - "description": "Fortune section slug", - "enum": [ - "latest", - "fortune-500", - "finance", - "tech", - "leadership", - "lifestyle", - "economy", - "newsletters", - "success", - "magazine", - "real-estate", - "investing", - "asia", - "politics", - "artificial-intelligence", - "workplace-culture", - "personal-finance", - "middle-east", - "big-tech", - "travel-and-leisure", - "c-suite", - "crypto", - "health", - "commentary", - "retail", - "mpw", - "features", - "conferences", - "europe", - "environment", - "arts-and-entertainment", - "cybersecurity", - "global", - "innovation", - "news", - "north-america" - ], + "description": "Google Finance metric id", "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "latest" + "name": "metric", + "type": "integer" + }, + { + "description": "Page number", + "in": "query", + "name": "page", + "type": "integer" } ], "produces": [ @@ -366532,11 +440281,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/finance.topStocksResponseDoc" } }, - "400": { - "description": "Bad Request", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -366553,16 +440302,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fortune section headlines", + "summary": "Google Finance top stocks by metric", "tags": [ - "Fortune" + "Google" ] } }, - "/fortune/news": { + "/google/finance/markets/trending": { "get": { - "description": "Returns the current Fortune top stories. Each item has its title, URL, summary, publication time, author and image. Takes no parameters; use `fortune-headlines` for a single section.", - "operationId": "fortune-news", + "consumes": [ + "application/json" + ], + "description": "Returns the instruments currently trending on Google Finance, up to `limit` items (default 18). Each has its ticker, exchange, name, price, change and change percent, previous close, currency and after-hours data.", + "operationId": "google-finance-markets-trending", + "parameters": [ + { + "description": "Result limit", + "in": "query", + "name": "limit", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -366570,7 +440330,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/finance.instrumentsResponseDoc" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -366585,105 +440351,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fortune top stories", + "summary": "Google Finance trending stocks", "tags": [ - "Fortune" + "Google" ] } }, - "/fortune/ranking": { + "/google/finance/news/{quote}": { "get": { - "description": "Returns rows from a selected Fortune ranking list and year -- the Fortune 500 franchise (including Fortune China 500) or one of Fortune's award/culture rankings. Search, filters, sorting, and pagination are applied against Fortune's public ranking data and validated against that list/year's filter inventory.", - "operationId": "fortune-ranking", + "consumes": [ + "application/json" + ], + "description": "Returns recent Google Finance news for one quote, such as `AAPL:NASDAQ`, given in the `quote` path parameter. `limit` caps the number of articles and defaults to 6. Each article has its title, source, URL, publication time (ISO and Unix), thumbnail, and related quotes with price and change data.", + "operationId": "google-finance-news", "parameters": [ { - "default": "fortune500", - "description": "Accepted values: fortune500, global500, fortune500-europe, southeast-asia-500, fortune-china-500, 100-fastest-growing-companies, 40-under-40, ai-innovators, aiq, americas-most-innovative-companies, asia-future, best-companies, best-companies-europe, best-companies-southeast-asia, best-large-workplaces-in-technology, best-large-workplaces-parents, best-medium-workplaces, best-medium-workplaces-in-technology, best-places-families, best-places-retire-affordably, best-small-workplaces, best-small-workplaces-aging-services-senior-housing-care, best-small-workplaces-bay-area, best-small-workplaces-biotechnology-pharmaceuticals, best-small-workplaces-chicago-area, best-small-workplaces-construction, best-small-workplaces-consulting-professional-services, best-small-workplaces-financial-services-insurance, best-small-workplaces-for-women, best-small-workplaces-health-care, best-small-workplaces-in-technology, best-small-workplaces-manufacturing-production, best-small-workplaces-millennials, best-small-workplaces-new-york, best-small-workplaces-parents, best-small-workplaces-real-estate, best-small-workplaces-retail, best-small-workplaces-technology, best-small-workplaces-texas, best-workplaces-advertising-marketing, best-workplaces-aging-services-at-home-care, best-workplaces-aging-services-senior-housing-care, best-workplaces-baby-boomers, best-workplaces-bay-area, best-workplaces-biotechnology-pharmaceuticals, best-workplaces-camaraderie, best-workplaces-chicago-area, best-workplaces-construction, best-workplaces-consulting-professional-services, best-workplaces-finance-insurance, best-workplaces-financial-services-insurance, best-workplaces-flexibility, best-workplaces-for-african-americans, best-workplaces-for-asian-americans, best-workplaces-for-diversity, best-workplaces-for-hispanics-and-latinos, best-workplaces-for-retirement, best-workplaces-for-women, best-workplaces-gen-x, best-workplaces-giving-back, best-workplaces-health-care, best-workplaces-manufacturing-production, best-workplaces-millennials, best-workplaces-new-york, best-workplaces-parents, best-workplaces-real-estate, best-workplaces-recent-college-graduates, best-workplaces-retail, best-workplaces-technology, best-workplaces-texas, businessperson-of-the-year, candidates-working-women-times-up, change-the-world, creator-25, crypto, cyber, europes-most-innovative-companies, fintech-innovators-asia, food-drink-women-innovators, fortunate50, future-50, global-best-companies, heroes-of-the-fortune-500, impact20, inner-city-100, international-20, lgbtq-leaders, mejores-companias-latinos-hispanos, modern-board-25, most-fantastical-comic-book-businesses, most-important-private-companies, most-powerful-people, most-powerful-rising-executives, most-powerful-women, most-powerful-women-asia, most-powerful-women-europe-middle-east-africa, most-powerful-women-international, nfty-50, the-ledger-40-under-40, unicorns, women-tech-leaders-europe, worlds-best-workplaces, worlds-greatest-leaders, worlds-most-admired-companies. Defaults to fortune500.", - "in": "query", - "name": "list", - "type": "string" - }, - { - "description": "For fortune-china-500, accepted values are 2026, 2025, 2024, 2023; otherwise call fortune-ranking-years for this list's accepted years", - "in": "query", - "name": "year", - "type": "string", - "x-example": "2026" - }, - { - "description": "Case-insensitive company-name search; Fortune China 500 searches every displayed row column", - "in": "query", - "name": "search", - "type": "string", - "x-example": "amazon" - }, - { - "collectionFormat": "multi", - "description": "Repeatable dynamic filter in field:value form; use company for fortune-china-500 or discover list-specific fields and values with fortune-ranking-filters", - "in": "query", - "items": { - "type": "string" - }, - "name": "filter", - "type": "array", - "x-example": "profitable:yes" - }, - { - "description": "Convenience alias for the live sector filter", - "in": "query", - "name": "sector", - "type": "string", - "x-example": "Technology" - }, - { - "description": "Convenience alias for the live industry filter", - "in": "query", - "name": "industry", - "type": "string", - "x-example": "Internet Services and Retailing" - }, - { - "description": "Convenience alias for the live state filter", - "in": "query", - "name": "state", - "type": "string", - "x-example": "Washington" - }, - { - "description": "Convenience alias; accepts true/false or yes/no", - "in": "query", - "name": "profitable", - "type": "string", - "x-example": "true" - }, - { - "description": "For fortune-china-500: Company, Rank, Rank of last year, Revenues ($M), Profits ($M); otherwise discover sortable fields with fortune-ranking-filters", - "in": "query", - "name": "sort_by", + "description": "Quote identifier such as AAPL:NASDAQ", + "in": "path", + "name": "quote", + "required": true, "type": "string", - "x-example": "revenues" - }, - { - "default": "asc", - "description": "Sort direction", - "enum": [ - "asc", - "desc" - ], - "in": "query", - "name": "sort_order", - "type": "string" - }, - { - "default": 0, - "description": "Zero-based result offset", - "in": "query", - "name": "offset", - "type": "integer" + "x-example": "AAPL:NASDAQ" }, { - "default": 100, - "description": "Number of rows to return; 0 uses the default 100, maximum 1000", + "description": "Article limit", "in": "query", "name": "limit", "type": "integer" @@ -366696,7 +440387,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.fortuneRankingResponseDoc" + "$ref": "#/definitions/finance.articlesResponseDoc" } }, "400": { @@ -366705,6 +440396,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -366717,30 +440420,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search a Fortune ranking", + "summary": "Google Finance quote news", "tags": [ - "Fortune" + "Google" ] } }, - "/fortune/ranking/filters": { + "/google/finance/quote/{quote}": { "get": { - "description": "Returns the filter fields and sortable columns for one Fortune ranking list. `list` selects the ranking (default `fortune500`) and `year` a historical edition; omit `year` for the list's current year. Each search field has its field name, title, type and accepted options, and each sortable column has a title and type.", - "operationId": "fortune-ranking-filters", + "consumes": [ + "application/json" + ], + "description": "Returns the Google Finance quote page for a symbol such as `AAPL:NASDAQ` or `BTC-USD`. The response carries key stats, an about section (CEO, employees, founded, headquarters, website), news, and investment tables for the income statement, balance sheet and cash flow by quarter and year.", + "operationId": "google-finance-quote", "parameters": [ { - "default": "fortune500", - "description": "Accepted values: fortune500, global500, fortune500-europe, southeast-asia-500, fortune-china-500, 100-fastest-growing-companies, 40-under-40, ai-innovators, aiq, americas-most-innovative-companies, asia-future, best-companies, best-companies-europe, best-companies-southeast-asia, best-large-workplaces-in-technology, best-large-workplaces-parents, best-medium-workplaces, best-medium-workplaces-in-technology, best-places-families, best-places-retire-affordably, best-small-workplaces, best-small-workplaces-aging-services-senior-housing-care, best-small-workplaces-bay-area, best-small-workplaces-biotechnology-pharmaceuticals, best-small-workplaces-chicago-area, best-small-workplaces-construction, best-small-workplaces-consulting-professional-services, best-small-workplaces-financial-services-insurance, best-small-workplaces-for-women, best-small-workplaces-health-care, best-small-workplaces-in-technology, best-small-workplaces-manufacturing-production, best-small-workplaces-millennials, best-small-workplaces-new-york, best-small-workplaces-parents, best-small-workplaces-real-estate, best-small-workplaces-retail, best-small-workplaces-technology, best-small-workplaces-texas, best-workplaces-advertising-marketing, best-workplaces-aging-services-at-home-care, best-workplaces-aging-services-senior-housing-care, best-workplaces-baby-boomers, best-workplaces-bay-area, best-workplaces-biotechnology-pharmaceuticals, best-workplaces-camaraderie, best-workplaces-chicago-area, best-workplaces-construction, best-workplaces-consulting-professional-services, best-workplaces-finance-insurance, best-workplaces-financial-services-insurance, best-workplaces-flexibility, best-workplaces-for-african-americans, best-workplaces-for-asian-americans, best-workplaces-for-diversity, best-workplaces-for-hispanics-and-latinos, best-workplaces-for-retirement, best-workplaces-for-women, best-workplaces-gen-x, best-workplaces-giving-back, best-workplaces-health-care, best-workplaces-manufacturing-production, best-workplaces-millennials, best-workplaces-new-york, best-workplaces-parents, best-workplaces-real-estate, best-workplaces-recent-college-graduates, best-workplaces-retail, best-workplaces-technology, best-workplaces-texas, businessperson-of-the-year, candidates-working-women-times-up, change-the-world, creator-25, crypto, cyber, europes-most-innovative-companies, fintech-innovators-asia, food-drink-women-innovators, fortunate50, future-50, global-best-companies, heroes-of-the-fortune-500, impact20, inner-city-100, international-20, lgbtq-leaders, mejores-companias-latinos-hispanos, modern-board-25, most-fantastical-comic-book-businesses, most-important-private-companies, most-powerful-people, most-powerful-rising-executives, most-powerful-women, most-powerful-women-asia, most-powerful-women-europe-middle-east-africa, most-powerful-women-international, nfty-50, the-ledger-40-under-40, unicorns, women-tech-leaders-europe, worlds-best-workplaces, worlds-greatest-leaders, worlds-most-admired-companies. Defaults to fortune500.", - "in": "query", - "name": "list", - "type": "string" - }, - { - "description": "For fortune-china-500, accepted values are 2026, 2025, 2024, 2023; omit for current year or call fortune-ranking-years", - "in": "query", - "name": "year", + "description": "Stock symbol to fetch the latest quote for (e.g., AAPL:NASDAQ, BTC-USD)", + "in": "path", + "name": "quote", + "required": true, "type": "string", - "x-example": "2026" + "x-example": "AAPL:NASDAQ" } ], "produces": [ @@ -366748,19 +440448,19 @@ ], "responses": { "200": { - "description": "OK", + "description": "Latest stock quote data", "schema": { - "$ref": "#/definitions/publicnews.fortuneRankingFiltersResponseDoc" + "$ref": "#/definitions/finance.quoteResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input parameters", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -366771,49 +440471,27 @@ "ApiKeyAuth": [] } ], - "summary": "Discover Fortune ranking filters", + "summary": "Google Finance Quote API", "tags": [ - "Fortune" + "Google" ] } }, - "/fortune/ranking/lists": { + "/google/finance/related/{quote}": { "get": { - "description": "Returns every public ranking accepted by the other fortune/ranking endpoints -- the Fortune 500 franchise's regional/global variants (including Fortune China 500) plus Fortune's award and culture rankings.", - "operationId": "fortune-ranking-lists", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.fortuneRankingListsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "List Fortune ranking lists", - "tags": [ - "Fortune" - ] - } - }, - "/fortune/ranking/years": { - "get": { - "description": "Returns every year accepted by Fortune's public ranking source for a selected list, including the 2023-2026 Fortune China 500 editions.", - "operationId": "fortune-ranking-years", + "description": "Returns the instruments Google Finance lists as related to a quote such as `AAPL:NASDAQ`. The response gives the queried `instrument` and an `items` list, each with ticker, exchange, name, price, change and change percent, and previous close.", + "operationId": "google-finance-related", "parameters": [ { - "default": "fortune500", - "description": "Accepted values: fortune500, global500, fortune500-europe, southeast-asia-500, fortune-china-500, 100-fastest-growing-companies, 40-under-40, ai-innovators, aiq, americas-most-innovative-companies, asia-future, best-companies, best-companies-europe, best-companies-southeast-asia, best-large-workplaces-in-technology, best-large-workplaces-parents, best-medium-workplaces, best-medium-workplaces-in-technology, best-places-families, best-places-retire-affordably, best-small-workplaces, best-small-workplaces-aging-services-senior-housing-care, best-small-workplaces-bay-area, best-small-workplaces-biotechnology-pharmaceuticals, best-small-workplaces-chicago-area, best-small-workplaces-construction, best-small-workplaces-consulting-professional-services, best-small-workplaces-financial-services-insurance, best-small-workplaces-for-women, best-small-workplaces-health-care, best-small-workplaces-in-technology, best-small-workplaces-manufacturing-production, best-small-workplaces-millennials, best-small-workplaces-new-york, best-small-workplaces-parents, best-small-workplaces-real-estate, best-small-workplaces-retail, best-small-workplaces-technology, best-small-workplaces-texas, best-workplaces-advertising-marketing, best-workplaces-aging-services-at-home-care, best-workplaces-aging-services-senior-housing-care, best-workplaces-baby-boomers, best-workplaces-bay-area, best-workplaces-biotechnology-pharmaceuticals, best-workplaces-camaraderie, best-workplaces-chicago-area, best-workplaces-construction, best-workplaces-consulting-professional-services, best-workplaces-finance-insurance, best-workplaces-financial-services-insurance, best-workplaces-flexibility, best-workplaces-for-african-americans, best-workplaces-for-asian-americans, best-workplaces-for-diversity, best-workplaces-for-hispanics-and-latinos, best-workplaces-for-retirement, best-workplaces-for-women, best-workplaces-gen-x, best-workplaces-giving-back, best-workplaces-health-care, best-workplaces-manufacturing-production, best-workplaces-millennials, best-workplaces-new-york, best-workplaces-parents, best-workplaces-real-estate, best-workplaces-recent-college-graduates, best-workplaces-retail, best-workplaces-technology, best-workplaces-texas, businessperson-of-the-year, candidates-working-women-times-up, change-the-world, creator-25, crypto, cyber, europes-most-innovative-companies, fintech-innovators-asia, food-drink-women-innovators, fortunate50, future-50, global-best-companies, heroes-of-the-fortune-500, impact20, inner-city-100, international-20, lgbtq-leaders, mejores-companias-latinos-hispanos, modern-board-25, most-fantastical-comic-book-businesses, most-important-private-companies, most-powerful-people, most-powerful-rising-executives, most-powerful-women, most-powerful-women-asia, most-powerful-women-europe-middle-east-africa, most-powerful-women-international, nfty-50, the-ledger-40-under-40, unicorns, women-tech-leaders-europe, worlds-best-workplaces, worlds-greatest-leaders, worlds-most-admired-companies. Defaults to fortune500.", - "in": "query", - "name": "list", - "type": "string" + "description": "Quote identifier such as AAPL:NASDAQ", + "in": "path", + "name": "quote", + "required": true, + "type": "string", + "x-example": "AAPL:NASDAQ" } ], "produces": [ @@ -366823,7 +440501,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.fortuneRankingYearsResponseDoc" + "$ref": "#/definitions/finance.relatedResponseDoc" } }, "400": { @@ -366832,6 +440510,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -366844,24 +440534,55 @@ "ApiKeyAuth": [] } ], - "summary": "List Fortune ranking years", + "summary": "Google Finance related instruments", "tags": [ - "Fortune" + "Google" ] } }, - "/fortune/sections": { + "/google/finance/search": { "get": { - "description": "Lists the Fortune sections accepted by `fortune-headlines`, such as `latest`, `fortune-500`, `finance`, `tech`, `leadership` and `crypto`. Each entry has a stable `slug`, display `name` and the section `url`. Takes no parameters.", - "operationId": "fortune-sections", + "consumes": [ + "application/json" + ], + "description": "Searches Google Finance for instruments matching `q`, such as a company name. Each match has its ticker, exchange, company name, currency, price, change and percentage change.", + "operationId": "google-finance-search", + "parameters": [ + { + "description": "Keyword to search for (e.g., Apple)", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "Apple" + } + ], "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", + "description": "Search results", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/finance.searchResponseDoc" + } + }, + "400": { + "description": "Invalid input parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Google Finance upstream request failed", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -366870,31 +440591,59 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fortune sections", + "summary": "Google Finance Search API", "tags": [ - "Fortune" + "Google" ] } }, - "/fotmob/audio-matches": { + "/google/finance/ticker/{ticker}": { "get": { "consumes": [ "application/json" ], - "description": "Returns FotMob's current match-to-audio-language availability index. Match ids are open-ended and can be passed to /fotmob/match. The list is independent of a selected match date and may include matches outside the current fixtures feed.", - "operationId": "fotmob-audio-matches", + "description": "Returns the price series Google Finance charts for a ticker such as `AAPL:NASDAQ` or `BTC-USD`. `window` sets the range: `1d` (default), `5d`, `1m`, `6m`, `ytd`, `1y`, `5y` or `max`. Each point has a `time`, `price` and `volume`.", + "operationId": "google-finance-ticker", + "parameters": [ + { + "description": "Ticker symbol to fetch data for example:AAPL:NASDAQ, BTC-USD ", + "in": "path", + "name": "ticker", + "required": true, + "type": "string", + "x-example": "AAPL:NASDAQ" + }, + { + "description": "Time window for the ticker data (default: 1d), options: 1d, 5d, 1m, 6m, 1y, 5y, max", + "in": "query", + "name": "window", + "type": "string" + } + ], "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", + "description": "Ticker time series", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/finance.tickerResponseDoc" + } + }, + "400": { + "description": "Invalid input parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Google Finance upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -366905,31 +440654,28 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob matches with audio commentary", + "summary": "Google Finance Ticker API", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/fifa-ranking-periods": { - "get": { + "/google/jobs": { + "post": { "consumes": [ "application/json" ], - "description": "Lists the FIFA ranking periods FotMob currently offers for the required `gender` (`men` or `women`). Each period has a `periodId` and a `periodName` date label. Pass a `periodId` to the FotMob FIFA rankings endpoint; the ids change over time and are not a fixed set.", - "operationId": "fotmob-fifa-ranking-periods", + "description": "Searches Google Jobs for the `query` in the request body, optionally narrowed by `location` and paged with `page`. Each result has the job title, company, location, employment type, posting time, snippet, source and URL. The response echoes the query, location and page.", + "operationId": "google-jobs", "parameters": [ { - "description": "Ranking gender", - "enum": [ - "men", - "women" - ], - "in": "query", - "name": "gender", + "description": "Google Jobs search payload", + "in": "body", + "name": "option", "required": true, - "type": "string", - "x-example": "men" + "schema": { + "$ref": "#/definitions/google.JobsOption" + } } ], "produces": [ @@ -366939,7 +440685,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.fifaRankingPeriodsResponseDoc" + "$ref": "#/definitions/google.JobsResponse" } }, "400": { @@ -366948,6 +440694,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -366960,39 +440712,27 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob FIFA ranking period directory", + "summary": "Search Google Jobs", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/fifa-rankings": { + "/google/map/place/{place_id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns ranked national-team points and rank changes for one period. Discover valid periodId values for the selected gender from /fotmob/fifa-ranking-periods.", - "operationId": "fotmob-fifa-rankings", + "description": "Returns the Google Maps details of one place by its Google `place_id`: name, categories, address, coordinates, phone, website, description, image, amenities, rating and review count. `rating` is `null` when the place has no aggregate rating on Google.", + "operationId": "google-map-place", "parameters": [ { - "description": "Ranking gender", - "enum": [ - "men", - "women" - ], - "in": "query", - "name": "gender", - "required": true, - "type": "string", - "x-example": "men" - }, - { - "description": "Period id returned for this gender by /fotmob/fifa-ranking-periods", - "in": "query", - "name": "period_id", + "description": "Google Place ID", + "in": "path", + "name": "place_id", "required": true, "type": "string", - "x-example": "20260720" + "x-example": "ChIJs3cv0KuvEmsRHcXYwNJ6GU0" } ], "produces": [ @@ -367001,24 +440741,30 @@ "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/fotmob.fifaRankingsResponseDoc" + "$ref": "#/definitions/google.mapPlaceResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -367029,26 +440775,32 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob FIFA national-team rankings", + "summary": "Google Maps place details API", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/latest-news": { + "/google/map/place/{place_id}/photos": { "get": { "consumes": [ "application/json" ], - "description": "Returns the global English latest-news feed. Items are article previews; the upstream response contains up to 20 items per offset. Use start_index increments of 20 to page without overlap.", - "operationId": "fotmob-latest-news", + "description": "Returns the photos Google publishes for a specified place_id — the imagery shown on\nthe place's Google Maps page, typically dozens of images for a well-covered business.\nEach entry carries the image URL as served plus its pixel dimensions when reported;\nswap the trailing size suffix on the URL (e.g. `=w203-h100-k-no`) to request other\ndimensions. Contributor avatars and review-attached photos are excluded. This is the\nplace page's image set, not a paginated archive feed. Rate limit is enforced at 1\nrequest per second.", + "operationId": "google-map-place-photos", "parameters": [ { - "description": "Zero-based news offset; defaults to 0", + "description": "Google Place ID", + "in": "path", + "name": "place_id", + "required": true, + "type": "string", + "x-example": "ChIJs3cv0KuvEmsRHcXYwNJ6GU0" + }, + { + "description": "Maximum number of photos to return. Omit or 0 for all captured.", "in": "query", - "maximum": 10000, - "minimum": 0, - "name": "start_index", + "name": "limit", "type": "integer" } ], @@ -367058,24 +440810,30 @@ "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/fotmob.newsListResponseDoc" + "$ref": "#/definitions/google.mapPlacePhotosResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -367086,41 +440844,33 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob latest football news", + "summary": "Google Maps place photos API", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/league": { + "/google/map/place/{place_id}/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns FotMob's public league page payload, including available tabs, overview, table, fixtures, statistics, transfers, and seasons where supplied by the league. Discover valid season values with /fotmob/seasons. shotmap=true includes the optional, larger overview shot-map payload.", - "operationId": "fotmob-league", + "description": "Returns the reviews Google shows on a specified place_id's Google Maps page —\ntypically the 8 most relevant, each with its rating, text, reviewer, timestamp, and\nany photos the reviewer attached. Photo-only reviews return an empty `text`.\nThis is the place page's first page of reviews, not the full review archive.\nRate limit is enforced at 1 request per second.", + "operationId": "google-map-place-reviews", "parameters": [ { - "description": "Numeric FotMob league id from /fotmob/leagues", - "in": "query", - "name": "league_id", + "description": "Google Place ID", + "in": "path", + "name": "place_id", "required": true, - "type": "integer", - "x-example": 47 - }, - { - "description": "Optional season value from /fotmob/seasons for this league", - "in": "query", - "name": "season", "type": "string", - "x-example": "2025/2026" + "x-example": "ChIJs3cv0KuvEmsRHcXYwNJ6GU0" }, { - "default": false, - "description": "Include the optional overview shot map; increases response size", + "description": "Maximum number of reviews to return. Omit or 0 for all captured.", "in": "query", - "name": "shotmap", - "type": "boolean" + "name": "limit", + "type": "integer" } ], "produces": [ @@ -367129,24 +440879,30 @@ "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/google.mapPlaceReviewsResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -367157,31 +440913,60 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob league details and sections", + "summary": "Google Maps place reviews API", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/leagues": { - "get": { + "/google/map/search": { + "post": { "consumes": [ "application/json" ], - "description": "Returns FotMob's full public league directory grouped into popular, international, and country collections. Use league ids with other FotMob endpoints.", - "operationId": "fotmob-leagues", + "description": "Searches Google Maps with a request body of `keyword` (required) plus optional `language` (default `en`) and `country` (an ISO-2 code such as `us`, default `us`). Each place has its name, place id, categories, address, coordinates, phone, website, rating and review count. `rating` is `null` when Google has no aggregate rating.", + "operationId": "google-map-search", + "parameters": [ + { + "description": "Search options", + "in": "body", + "name": "mapSearchOption", + "required": true, + "schema": { + "$ref": "#/definitions/google.MapSearchOption" + } + } + ], "produces": [ "application/json" ], "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/google.mapSearchResponseDoc" } }, - "503": { - "description": "Service Unavailable", + "400": { + "description": "Invalid input", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -367192,27 +440977,58 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob competition directory", + "summary": "Google Maps search API", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/lineup-builder-players": { + "/google/news": { "get": { "consumes": [ "application/json" ], - "description": "Returns public metadata for 1 to 11 selected lineup players. Player ids are open-ended and can be discovered through /fotmob/search or /fotmob/lineup-builder-team. Unknown ids without complete public metadata return 404.", - "operationId": "fotmob-lineup-builder-players", + "description": "Returns current Google News search results. Pages slice the finite result snapshot; they do not traverse the Google Search index. Results include title, source, publisher article URL, age, and thumbnail when available. Valid no-results searches and exhausted pages return an empty array. Locale defaults to country=us and lang=en. Returns 503 for blocked or malformed upstream responses.", + "operationId": "google-news", "parameters": [ { - "description": "Comma-separated list of 1 to 11 numeric FotMob player ids", + "description": "Search query", "in": "query", - "name": "player_ids", + "name": "q", "required": true, "type": "string", - "x-example": "961995,562727" + "x-example": "openai" + }, + { + "description": "1-based page within the current finite result snapshot; defaults to 1", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Results per page; defaults to 10, clamped to 1..50", + "in": "query", + "maximum": 50, + "minimum": 1, + "name": "count", + "type": "integer", + "x-example": 10 + }, + { + "description": "Two-letter country code; defaults to us", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Google UI language; defaults to en", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -367222,23 +441038,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/google.newsResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid query parameters", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Google upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -367249,27 +441071,26 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob lineup builder player metadata", + "summary": "Search Google News", "tags": [ - "FotMob" + "Google" ] - } - }, - "/fotmob/lineup-builder-team": { - "get": { + }, + "post": { "consumes": [ "application/json" ], - "description": "Returns the public lineup builder's prefilled formation, starting lineup, and squad for a team id. Discover open-ended team ids with /fotmob/search. Some teams legitimately have no squad list.", - "operationId": "fotmob-lineup-builder-team", + "description": "Restored JSON compatibility endpoint. Returns current Google News articles. Pages slice the finite current result snapshot. Uses the legacy result array and field names; no-results searches and exhausted pages return an empty result array.", + "operationId": "google-news-search", "parameters": [ { - "description": "Numeric FotMob team id discoverable through /fotmob/search", - "in": "query", - "name": "team_id", + "description": "Search options; keyword, language and country are required. limit defaults to 10 and is clamped to 10..100; page defaults to 1.", + "in": "body", + "name": "searchOption", "required": true, - "type": "string", - "x-example": "9825" + "schema": { + "$ref": "#/definitions/google.SearchOption" + } } ], "produces": [ @@ -367279,23 +441100,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/google.newsSearchResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Google upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -367306,27 +441133,69 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob lineup builder team data", + "summary": "Search Google News with JSON", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/match": { + "/google/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns FotMob's public match-details payload, including available facts, events, statistics, lineups, shot map, momentum, table and head-to-head sections. The data field preserves the upstream JSON shape; individual sections may be absent for a match.", - "operationId": "fotmob-match", + "description": "Returns Google autosuggest query completions from the public unauthenticated suggest JSON endpoint. `source` selects the web, YouTube, or shopping suggestion list, and `rich=true` adds a type, relevance score, and short description to each suggestion.", + "operationId": "google-suggest", "parameters": [ { - "description": "Numeric FotMob match id", + "description": "Search query prefix", "in": "query", - "name": "id", + "name": "q", "required": true, "type": "string", - "x-example": "5181825" + "x-example": "openai" + }, + { + "description": "Suggestions to return; defaults to 10, clamped to 1..12", + "in": "query", + "maximum": 12, + "minimum": 1, + "name": "count", + "type": "integer", + "x-example": 10 + }, + { + "description": "Google result country; defaults to us", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Google UI language; defaults to en", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en" + }, + { + "default": "web", + "description": "Suggestion source; defaults to web", + "enum": [ + "web", + "youtube", + "shopping" + ], + "in": "query", + "name": "source", + "type": "string" + }, + { + "description": "Add Google's type, relevance score, and description to each suggestion; defaults to false", + "in": "query", + "name": "rich", + "type": "boolean", + "x-example": false } ], "produces": [ @@ -367336,23 +441205,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/google.suggestResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid query", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Google upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -367363,29 +441238,54 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob match details", + "summary": "Suggest Google search queries", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/match-media": { + "/google/trends/categories": { "get": { - "consumes": [ + "description": "Returns the top-level Google Trends categories as id and name pairs, such as 0 for All and 20 for Sports. These are the ids accepted by the Trending Now category filter.", + "operationId": "google-trends-categories", + "produces": [ "application/json" ], - "description": "Returns the public highlight-video and media metadata for one match. The request uses FotMob's English United States variant; unavailable media is represented by null source fields.", - "operationId": "fotmob-match-media", - "parameters": [ + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/trends.trendsCategoriesResponseDoc" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Numeric FotMob match id, discoverable from /fotmob/matches or /fotmob/search", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "5795457" + "ApiKeyAuth": [] } ], + "summary": "Google Trends categories", + "tags": [ + "Google" + ] + } + }, + "/google/trends/enums": { + "get": { + "description": "Returns supported Google Trends enum values for explore/trending filters, including locations, date ranges, search types, categories, statuses, and sort modes.", + "operationId": "google-trends-enums", "produces": [ "application/json" ], @@ -367393,23 +441293,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/trends.trendsEnumsResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -367420,34 +441314,28 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob match videos and media metadata", + "summary": "Google Trends enum metadata", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/matches": { - "get": { + "/google/trends/explore": { + "post": { "consumes": [ "application/json" ], - "description": "Returns FotMob's public match payload for a calendar date and IANA timezone. The data field preserves the upstream JSON shape.", - "operationId": "fotmob-matches", + "description": "Returns Google Trends keyword analytics: interest over time, interest by region, related queries, and related topics when available.", + "operationId": "google-trends-explore", "parameters": [ { - "description": "Date in YYYYMMDD format", - "in": "query", - "name": "date", + "description": "Explore request", + "in": "body", + "name": "request", "required": true, - "type": "string", - "x-example": "20260925" - }, - { - "description": "IANA timezone; defaults to UTC", - "in": "query", - "name": "timezone", - "type": "string", - "x-example": "Asia/Shanghai" + "schema": { + "$ref": "#/definitions/trends.ExploreRequest" + } } ], "produces": [ @@ -367457,17 +441345,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/trends.exploreResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Google Trends upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -367478,35 +441378,28 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob matches for a date", + "summary": "Google Trends explore data", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/news": { - "get": { + "/google/trends/explore/interest-by-region": { + "post": { "consumes": [ "application/json" ], - "description": "Returns a page of FotMob news items for one league. League ids are discoverable from /fotmob/leagues; start_index is a zero-based offset.", - "operationId": "fotmob-news", + "description": "Returns only the interest-by-region widget from the Google Trends Explore widget flow. Supports multiple comparison terms and returns an empty interest_by_region array when Google returns no rows.", + "operationId": "google-trends-explore-interest-by-region", "parameters": [ { - "description": "Numeric FotMob league id", - "in": "query", - "name": "league_id", + "description": "Explore request", + "in": "body", + "name": "request", "required": true, - "type": "string", - "x-example": "47" - }, - { - "description": "Zero-based news offset; defaults to 0", - "in": "query", - "maximum": 10000, - "minimum": 0, - "name": "start_index", - "type": "integer" + "schema": { + "$ref": "#/definitions/trends.ExploreRequest" + } } ], "produces": [ @@ -367516,23 +441409,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/trends.interestByRegionResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Google Trends upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -367543,27 +441442,28 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob league news", + "summary": "Google Trends interest by region", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/news-article": { - "get": { + "/google/trends/explore/interest-over-time": { + "post": { "consumes": [ "application/json" ], - "description": "Returns the full article body for a FotMob-authored top-news story. Pass the complete id-and-slug value from the public /topnews/ URL. News previews from external publishers remain external and are not fetched.", - "operationId": "fotmob-news-article", + "description": "Returns Google Trends interest over time for 1 to 5 `keywords`. Optional inputs are `geo` (default worldwide), `time_range` (default `today 12-m`), `hl`, `tz`, `category` and `type` (`web`, `image`, `news`, `youtube` or `shopping`). Each time point carries a value per keyword, with a `has_data` flag.", + "operationId": "google-trends-explore-interest-over-time", "parameters": [ { - "description": "Complete FotMob top-news article id and slug from the public article URL", - "in": "query", - "name": "id", + "description": "Explore request", + "in": "body", + "name": "request", "required": true, - "type": "string", - "x-example": "29776-fotmob-totw-premier-league-matchday-5s-best-xi" + "schema": { + "$ref": "#/definitions/trends.ExploreRequest" + } } ], "produces": [ @@ -367573,23 +441473,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/trends.interestOverTimeResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Google Trends upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -367600,34 +441506,28 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob full top-news article", + "summary": "Google Trends interest over time", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/player": { - "get": { + "/google/trends/explore/related-topics": { + "post": { "consumes": [ "application/json" ], - "description": "Returns a public FotMob player profile, including current team, injuries, recent matches, career history, trophies, market values, and the player-specific season identifiers needed for deeper statistics. Discover player ids through /fotmob/search. Market values are included by default.", - "operationId": "fotmob-player", + "description": "Returns only the related topics widget from the Google Trends Explore widget flow. Returns an empty related_topics array when Google returns no topic rows for the requested term/filter combination.", + "operationId": "google-trends-explore-related-topics", "parameters": [ { - "description": "Numeric FotMob player id from fotmob/search", - "in": "query", - "name": "id", + "description": "Explore request", + "in": "body", + "name": "request", "required": true, - "type": "string", - "x-example": "961995" - }, - { - "default": true, - "description": "Include market-value history; defaults to true", - "in": "query", - "name": "include_market_values", - "type": "boolean" + "schema": { + "$ref": "#/definitions/trends.ExploreRequest" + } } ], "produces": [ @@ -367637,23 +441537,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/trends.relatedTopicsResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Google Trends upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -367664,35 +441570,28 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob player profile", + "summary": "Google Trends related topics", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/player-match-stats": { - "get": { + "/google/trends/explore/rising-queries": { + "post": { "consumes": [ "application/json" ], - "description": "Returns the public per-match stat rows for one player, including the available stat key, value, and translated label. Discover player ids through fotmob/search and match ids through fotmob/match or fotmob/player-matches.", - "operationId": "fotmob-player-match-stats", + "description": "Returns the Rising related queries widget for one or more Google Trends explore terms. Returns an empty queries array when Google returns no rows for the requested term/filter combination.", + "operationId": "google-trends-explore-rising-queries", "parameters": [ { - "description": "Numeric FotMob player id", - "in": "query", - "name": "player_id", - "required": true, - "type": "string", - "x-example": "961995" - }, - { - "description": "Numeric FotMob match id", - "in": "query", - "name": "match_id", + "description": "Explore request", + "in": "body", + "name": "request", "required": true, - "type": "string", - "x-example": "5795457" + "schema": { + "$ref": "#/definitions/trends.ExploreRequest" + } } ], "produces": [ @@ -367702,23 +441601,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/trends.exploreQueriesResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Google Trends upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -367729,50 +441634,28 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob player match stats", + "summary": "Google Trends explore rising queries", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/player-matches": { - "get": { + "/google/trends/explore/top-queries": { + "post": { "consumes": [ "application/json" ], - "description": "Returns one page of player match history. The player's matchFilters and permitted league/team pairs are discovered from /fotmob/player. For another page, copy the numeric before timestamp from the upstream previous URL.", - "operationId": "fotmob-player-matches", + "description": "Returns the Top related queries widget for one or more Google Trends explore terms. Returns an empty queries array when Google returns no rows for the requested term/filter combination.", + "operationId": "google-trends-explore-top-queries", "parameters": [ { - "description": "Numeric FotMob player id from fotmob/search", - "in": "query", - "name": "player_id", + "description": "Explore request", + "in": "body", + "name": "request", "required": true, - "type": "string", - "x-example": "961995" - }, - { - "default": "all", - "description": "all, or a numeric league id from fotmob/player matchFilters", - "in": "query", - "name": "league_id", - "type": "string", - "x-example": "47" - }, - { - "default": "all", - "description": "all, or a numeric team id paired with league_id in fotmob/player matchFilters", - "in": "query", - "name": "team_id", - "type": "string", - "x-example": "9825" - }, - { - "description": "Numeric before timestamp from the upstream previous URL; omit for the newest page", - "in": "query", - "name": "before", - "type": "string", - "x-example": "1767902400" + "schema": { + "$ref": "#/definitions/trends.ExploreRequest" + } } ], "produces": [ @@ -367782,23 +441665,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/trends.exploreQueriesResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Google Trends upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -367809,35 +441698,422 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob player match history", + "summary": "Google Trends explore top queries", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/player-stats": { + "/google/trends/locations": { + "get": { + "description": "Returns the list of location codes that Google Trends supports, such as `US`, `HK` and `GB`, in `locations`. The Explore endpoints also accept `WORLDWIDE`, which appears in the list. It takes no parameters.", + "operationId": "google-trends-locations", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/trends.trendsLocationsResponseDoc" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Google Trends locations", + "tags": [ + "Google" + ] + } + }, + "/google/trends/trending": { "get": { "consumes": [ "application/json" ], - "description": "Returns deep statistics, shot map, heatmap, and goalkeeper shot map for one player-specific season entry. Discover valid season_id values and hasDeepStats from /fotmob/player statSeasons; entry ids vary by player and season.", - "operationId": "fotmob-player-stats", + "description": "Returns Google Trends Trending Now for a country or territory (`geo`, default `US`): each trend's query, rank, search traffic, status, start and update time, related terms and news articles, with explore and share links. Filter by time window, category and status, and choose the sort order.", + "operationId": "google-trends-trending", "parameters": [ { - "description": "Numeric FotMob player id from fotmob/search", + "default": "US", + "description": "Country/territory location code", + "enum": [ + "AF", + "AX", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BA", + "BW", + "BV", + "BR", + "IO", + "VG", + "BN", + "BG", + "BF", + "BI", + "KH", + "CM", + "CA", + "CV", + "BQ", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CG", + "CD", + "CK", + "CR", + "CI", + "HR", + "CU", + "CW", + "CY", + "CZ", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "XK", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "KP", + "MK", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "RE", + "RO", + "RU", + "RW", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "KR", + "SS", + "ES", + "LK", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UM", + "VI", + "UG", + "UA", + "AE", + "GB", + "US", + "UY", + "UZ", + "VU", + "VA", + "VE", + "VN", + "WF", + "EH", + "YE", + "ZM", + "ZW" + ], "in": "query", - "name": "player_id", - "required": true, - "type": "string", - "x-example": "961995" + "name": "geo", + "type": "string" }, { - "description": "Player-specific entryId from fotmob/player statSeasons", + "default": "en-US", + "description": "Google Trends UI locale", "in": "query", - "name": "season_id", - "required": true, - "type": "string", - "x-example": "0-1" + "name": "hl", + "type": "string" + }, + { + "default": 0, + "description": "Timezone offset minutes", + "in": "query", + "name": "tz", + "type": "integer" + }, + { + "default": "24h", + "description": "Trend window", + "enum": [ + "4h", + "24h", + "48h", + "7d" + ], + "in": "query", + "name": "window", + "type": "string" + }, + { + "description": "Alias for window", + "enum": [ + "4h", + "24h", + "48h", + "7d" + ], + "in": "query", + "name": "time_range", + "type": "string" + }, + { + "default": 0, + "description": "Trending category id", + "enum": [ + 0, + 3, + 47, + 44, + 22, + 12, + 5, + 7, + 71, + 8, + 45, + 65, + 11, + 13, + 958, + 19, + 16, + 299, + 14, + 66, + 29, + 533, + 174, + 18, + 20, + 67 + ], + "in": "query", + "name": "category", + "type": "integer" + }, + { + "default": "all", + "description": "Trend status filter", + "enum": [ + "all", + "active", + "ended" + ], + "in": "query", + "name": "status", + "type": "string" + }, + { + "default": "relevance", + "description": "Sort mode", + "enum": [ + "relevance", + "title", + "recency", + "search_volume" + ], + "in": "query", + "name": "sort_by", + "type": "string" + }, + { + "default": 20, + "description": "Maximum rows to return", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -367847,76 +442123,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/trends.trendingResponseDoc" } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "FotMob player season statistics", - "tags": [ - "FotMob" - ] - } - }, - "/fotmob/search": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns public search suggestions for FotMob leagues, teams, players, and matches. term must contain 1 to 50 characters. Suggestions preserve the upstream JSON shape.", - "operationId": "fotmob-search", - "parameters": [ - { - "description": "Search phrase, 1 to 50 characters", - "in": "query", - "maxLength": 50, - "minLength": 1, - "name": "term", - "required": true, - "type": "string", - "x-example": "Arsenal" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/fotmob.responseDoc" - } }, - "400": { - "description": "Bad Request", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Google Trends upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -367927,27 +442156,28 @@ "ApiKeyAuth": [] } ], - "summary": "Search FotMob entities", + "summary": "Google Trends trending now data", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/seasons": { - "get": { + "/google/trends/trending/detail": { + "post": { "consumes": [ "application/json" ], - "description": "Lists the season values FotMob offers for one league, identified by the required numeric `league_id` (from the FotMob leagues endpoint). The response has the league id, name and a `seasons` list such as `2026/2027`. Pass a season to the FotMob league endpoint; the list varies by league.", - "operationId": "fotmob-seasons", + "description": "Returns the Explore detail widgets for a single trending term, including interest over time, regional interest, top/rising related queries, and related topics when Google returns them.", + "operationId": "google-trends-trending-detail", "parameters": [ { - "description": "Numeric FotMob league id from /fotmob/leagues", - "in": "query", - "name": "league_id", + "description": "Trending detail request", + "in": "body", + "name": "request", "required": true, - "type": "integer", - "x-example": 47 + "schema": { + "$ref": "#/definitions/trends.TrendingDetailRequest" + } } ], "produces": [ @@ -367957,23 +442187,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/trends.exploreResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Google Trends upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -367984,77 +442220,58 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob league season discovery", + "summary": "Google Trends trending term detail", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/stats": { + "/google/videos": { "get": { "consumes": [ "application/json" ], - "description": "Returns ranked player or team statistics for a stat id discovered from /fotmob/stats-categories. The accepted stat ids vary by league, season, and type. team_id optionally restricts player statistics to one team. position filters player results client-side.", - "operationId": "fotmob-stats", + "description": "Returns Google video vertical results (title, platform, link, duration, age). Locale defaults to country=us and lang=en. Returns 503 when Google serves a challenge page or an unusable response.", + "operationId": "google-videos", "parameters": [ { - "description": "Numeric FotMob league id", + "description": "Search query", "in": "query", - "name": "league_id", + "name": "q", "required": true, "type": "string", - "x-example": "47" - }, - { - "description": "Numeric season id from /fotmob/stats-categories; defaults to the newest season", - "in": "query", - "name": "season_id", - "type": "string", - "x-example": "36781" + "x-example": "openai" }, { - "description": "Stats subject", - "enum": [ - "players", - "teams" - ], + "description": "1-based page number; defaults to 1", "in": "query", - "name": "type", - "required": true, - "type": "string", - "x-example": "players" + "minimum": 1, + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Stat id returned by /fotmob/stats-categories for this league, season, and type", + "description": "Results per page; defaults to 10, clamped to 1..50", "in": "query", - "name": "stat", - "required": true, - "type": "string", - "x-example": "goals" + "maximum": 50, + "minimum": 1, + "name": "count", + "type": "integer", + "x-example": 10 }, { - "description": "Optional numeric team id to filter player stats", + "description": "Two-letter country code; defaults to us", "in": "query", - "name": "team_id", + "name": "country", "type": "string", - "x-example": "8456" + "x-example": "us" }, { - "description": "Optional client-side player position filter", - "enum": [ - "all", - "striker", - "winger", - "attackingMidfielder", - "midfielder", - "fullback", - "centerBack" - ], + "description": "Google UI language; defaults to en", "in": "query", - "name": "position", + "name": "lang", "type": "string", - "x-example": "striker" + "x-example": "en" } ], "produces": [ @@ -368064,23 +442281,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/google.videosResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid query parameters", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Google upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -368091,46 +442314,27 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob league player or team statistics", + "summary": "Search Google video results", "tags": [ - "FotMob" + "Google" ] } }, - "/fotmob/stats-categories": { + "/googlepatents/classification": { "get": { "consumes": [ "application/json" ], - "description": "Returns FotMob's current stat catalog and available seasons for a league. With season_id omitted, the response exposes the season list and initial top-stat choices; pass a returned season id to retrieve that season's full player or team stat catalog.", - "operationId": "fotmob-stats-categories", + "description": "Returns a CPC classification symbol's official title, its position in the classification tree (parent/child symbols), related symbols, and its full scope-note description. Accepts a symbol at any level, e.g. a section (\"A\"), a class (\"A61\"), a subclass (\"A61K\"), or a full group/subgroup (\"A61K31/00\"). Public data, sourced from Google Patents' own search API.", + "operationId": "googlepatents-classification", "parameters": [ { - "description": "Numeric FotMob league id", - "in": "query", - "name": "league_id", - "required": true, - "type": "string", - "x-example": "47" - }, - { - "description": "Numeric season id; omit to discover seasons", - "in": "query", - "name": "season_id", - "type": "string", - "x-example": "36781" - }, - { - "description": "Stats subject", - "enum": [ - "players", - "teams" - ], + "description": "CPC classification symbol", "in": "query", - "name": "type", + "name": "code", "required": true, "type": "string", - "x-example": "players" + "x-example": "A61K31/00" } ], "produces": [ @@ -368140,7 +442344,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/googlepatents.classificationResponseDoc" } }, "400": { @@ -368155,53 +442359,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "FotMob league stat categories and seasons", - "tags": [ - "FotMob" - ] - } - }, - "/fotmob/table": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the league standings and the upstream table views, including all, home, away, form, and expected-goals tables. League ids are discoverable from /fotmob/leagues.", - "operationId": "fotmob-table", - "parameters": [ - { - "description": "Numeric FotMob league id", - "in": "query", - "name": "league_id", - "required": true, - "type": "string", - "x-example": "47" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/fotmob.responseDoc" - } }, - "400": { - "description": "Bad Request", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -368218,29 +442383,19 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob league table", + "summary": "Look up a Cooperative Patent Classification (CPC) symbol", "tags": [ - "FotMob" + "Google Patents" ] } }, - "/fotmob/team": { + "/googlepatents/coverage": { "get": { "consumes": [ "application/json" ], - "description": "Returns public team data and the sections currently available for that team, such as overview, table, fixtures, squad, stats, transfers, and history. Team ids can be found with /fotmob/search. The upstream section set varies by team. For older fixtures, pass fixtures.previousFixturesUrl to /fotmob/team-fixtures.", - "operationId": "fotmob-team", - "parameters": [ - { - "description": "Numeric FotMob team id", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "9825" - } - ], + "description": "Returns how many patent grants and applications Google Patents has indexed, per patent office/country, per year, across every authority it covers. Public data, sourced from Google Patents' own search API.", + "operationId": "googlepatents-coverage", "produces": [ "application/json" ], @@ -368248,17 +442403,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/googlepatents.coverageResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -368275,35 +442430,34 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob team details", + "summary": "Google Patents database coverage: grants and applications indexed per country per year", "tags": [ - "FotMob" + "Google Patents" ] } }, - "/fotmob/team-fixtures": { + "/googlepatents/detail": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of older team matches. Start with the fixtures.previousFixturesUrl cursor from /fotmob/team, then pass each response's previous value as cursor until it is empty or null. Team ids are open-ended numeric ids discoverable through /fotmob/search.", - "operationId": "fotmob-team-fixtures", + "description": "Returns a single patent's detail: title, abstract, inventors, assignees, dates, legal status, CPC/IPC classifications, claims, description, patent citations, cited-by patents, family members, and similar documents. `number` is a publication number such as `US10758101B2`, `EP1000000A1`, or `WO2020123456A1`. To search or browse by keyword, inventor, or assignee instead of a known publication number, use `/googlepatents/search`.", + "operationId": "googlepatents-detail", "parameters": [ { - "description": "Numeric FotMob team id", + "description": "Publication number, e.g. US10758101B2", "in": "query", - "name": "team_id", + "name": "number", "required": true, "type": "string", - "x-example": "9825" + "x-example": "US10758101B2" }, { - "description": "Opaque cursor copied from fixtures.previousFixturesUrl in /fotmob/team or previous in the preceding response", + "description": "Language code for the translated page, default en", "in": "query", - "name": "cursor", - "required": true, + "name": "lang", "type": "string", - "x-example": "https://pub.fotmob.com/prod/db/api/team/9825/fixture-by-date?beforeTimestamp=1785607200" + "x-example": "en" } ], "produces": [ @@ -368313,7 +442467,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/googlepatents.detailResponseDoc" } }, "400": { @@ -368328,6 +442482,18 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -368340,36 +442506,27 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob paginated team fixtures", + "summary": "A single patent's bibliographic data, abstract, claims, description, citations, and family", "tags": [ - "FotMob" + "Google Patents" ] } }, - "/fotmob/team-news": { + "/googlepatents/recent": { "get": { "consumes": [ "application/json" ], - "description": "Returns the paginated article feed shown on a public FotMob team news page. Team ids can be found with /fotmob/search or /fotmob/team.", - "operationId": "fotmob-team-news", + "description": "Returns the patent publications Google Patents' bulk sitemap indexes for one ISO 8601 week (format YYYY-Www, e.g. \"2026-W20\"): publication number, title, and detail-page URL for each. Useful for browsing recently published patents without a search query. Public data, sourced from Google Patents' own sitemap.", + "operationId": "googlepatents-recent", "parameters": [ { - "description": "Numeric FotMob team id", + "description": "ISO 8601 week, format YYYY-Www", "in": "query", - "name": "team_id", + "name": "week", "required": true, - "type": "integer", - "x-example": 8456 - }, - { - "description": "Zero-based news offset from 0 through 10000", - "in": "query", - "maximum": 10000, - "minimum": 0, - "name": "start_index", - "type": "integer", - "x-example": 0 + "type": "string", + "x-example": "2026-W20" } ], "produces": [ @@ -368379,7 +442536,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/googlepatents.recentResponseDoc" } }, "400": { @@ -368394,6 +442551,18 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -368406,122 +442575,147 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob team news", + "summary": "Browse patent publications indexed by Google Patents for one ISO week", "tags": [ - "FotMob" + "Google Patents" ] } }, - "/fotmob/transfers": { + "/googlepatents/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns confirmed transfers, rumours, or popular transfers with the public transfer-center filters. Fee values are in EUR. Use fotmob/leagues and fotmob/search to discover league and team ids. The upstream returns 50 rows per page and caps its hit count at 10,000.", - "operationId": "fotmob-transfers", + "description": "Searches Google Patents' full index by free-text query, with optional inventor, assignee, patent office, status, type, language, and date filters. Returns a page of hits plus top-assignee/top-inventor/top-classification breakdowns over the full result set.", + "operationId": "googlepatents-search", "parameters": [ { - "default": "all", - "description": "Feed mode", - "enum": [ - "all", - "rumours", - "popular" - ], + "description": "Free-text search query", "in": "query", - "name": "mode", - "type": "string" + "name": "q", + "required": true, + "type": "string", + "x-example": "battery" }, { - "default": 1, - "description": "One-based result page; 50 rows per page", + "description": "Filter by inventor name", "in": "query", - "maximum": 200, - "minimum": 1, - "name": "page", - "type": "integer" + "name": "inventor", + "type": "string", + "x-example": "Thomas Fogarty" }, { - "default": "6months", - "description": "Time window", + "description": "Filter by assignee/applicant name", + "in": "query", + "name": "assignee", + "type": "string", + "x-example": "Emerson Electric" + }, + { + "description": "Filter by patent office/authority code, e.g. US, EP, WO, CN, JP", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + }, + { + "description": "Filter by legal status. Allowed values: GRANT, APPLICATION", "enum": [ - "6months", - "1year", - "2years", - "3years" + "GRANT", + "APPLICATION" ], "in": "query", - "name": "last", - "type": "string" + "name": "status", + "type": "string", + "x-example": "GRANT" }, { - "default": "all", - "description": "Transfer direction; applied when league_ids or team_ids is supplied", + "description": "Filter by document type. Allowed values: PATENT, DESIGN", "enum": [ - "all", - "in", - "out" + "PATENT", + "DESIGN" ], "in": "query", - "name": "direction", - "type": "string" + "name": "type", + "type": "string", + "x-example": "PATENT" }, { - "description": "Minimum transfer fee in EUR", + "description": "Filter by document language. Allowed values: ENGLISH, GERMAN, CHINESE, FRENCH, SPANISH, ARABIC, JAPANESE, KOREAN, PORTUGUESE, RUSSIAN, ITALIAN, DUTCH, SWEDISH, FINNISH, NORWEGIAN, DANISH", + "enum": [ + "ENGLISH", + "GERMAN", + "CHINESE", + "FRENCH", + "SPANISH", + "ARABIC", + "JAPANESE", + "KOREAN", + "PORTUGUESE", + "RUSSIAN", + "ITALIAN", + "DUTCH", + "SWEDISH", + "FINNISH", + "NORWEGIAN", + "DANISH" + ], "in": "query", - "minimum": 0, - "name": "min_fee", - "type": "integer" + "name": "language", + "type": "string", + "x-example": "ENGLISH" }, { - "description": "Maximum transfer fee in EUR", + "description": "Which date before/after filter. Allowed values: priority, filing, publication. Defaults to priority when before/after is set", + "enum": [ + "priority", + "filing", + "publication" + ], "in": "query", - "minimum": 0, - "name": "max_fee", - "type": "integer" + "name": "date_field", + "type": "string", + "x-example": "priority" }, { - "description": "Comma-separated numeric FotMob league ids, up to 50; discover with /fotmob/leagues", + "description": "Only results dated on or before this date (YYYY-MM-DD)", "in": "query", - "name": "league_ids", + "name": "before", "type": "string", - "x-example": "47" + "x-example": "2021-12-31" }, { - "description": "Comma-separated numeric FotMob team ids, up to 50; discover with /fotmob/search", + "description": "Only results dated on or after this date (YYYY-MM-DD)", "in": "query", - "name": "team_ids", + "name": "after", "type": "string", - "x-example": "8456" + "x-example": "2020-01-01" }, { - "default": "lastModified", - "description": "Sort column", + "description": "Sort order. Allowed values: relevance, new, old. Defaults to relevance", "enum": [ - "lastModified", - "fee", - "date", - "name", - "fromClubName", - "toClubName" + "relevance", + "new", + "old" ], "in": "query", - "name": "order_by", - "type": "string" + "name": "sort", + "type": "string", + "x-example": "relevance" }, { - "default": false, - "description": "Exclude contract-extension records", + "description": "Results per page, default 10, max 100", "in": "query", - "name": "exclude_extensions", - "type": "boolean" + "name": "num", + "type": "integer", + "x-example": 10 }, { - "default": false, - "description": "Return only likely rumours; mode must be rumours", + "description": "Page number, 0-indexed, default 0", "in": "query", - "name": "likely_only", - "type": "boolean" + "name": "page", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -368531,7 +442725,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/googlepatents.searchResponseDoc" } }, "400": { @@ -368540,87 +442734,17 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "FotMob transfer center", - "tags": [ - "FotMob" - ] - } - }, - "/fotmob/trending-news": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the five-story Trending shelf shown on FotMob's public News page. Items are curated previews and may overlap the global latest-news feed; the upstream list is dynamic. No locale or country parameter is exposed because the complete accepted value space is not pinned.", - "operationId": "fotmob-trending-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/fotmob.newsListResponseDoc" - } - }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "FotMob trending football news", - "tags": [ - "FotMob" - ] - } - }, - "/fotmob/trending-searches": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns FotMob's current grouped trending suggestions for all entities, players, teams, and leagues. The feed is dynamic and may vary by the upstream's inferred region; no region or category parameter is exposed.", - "operationId": "fotmob-trending-searches", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/fotmob.responseDoc" - } }, "503": { "description": "Service Unavailable", @@ -368634,117 +442758,39 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob trending search suggestions", + "summary": "Search Google Patents by keyword, inventor, assignee, and other filters", "tags": [ - "FotMob" + "Google Patents" ] } }, - "/fotmob/tv-guide": { + "/googlepatents/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns the public seven-day football broadcast schedule for a country, with local schedule times. Discover all accepted country codes from /fotmob/tv-guide-countries. Timezone defaults to UTC.", - "operationId": "fotmob-tv-guide", + "description": "Returns Google Patents' own autocomplete suggestions for an inventor or assignee name as the user types, the same suggestions shown by the Inventor/Assignee fields on Google Patents' advanced search page. Public data, sourced from Google Patents' own search API.", + "operationId": "googlepatents-suggest", "parameters": [ { - "description": "Market code from /fotmob/tv-guide-countries", + "description": "Which field to autocomplete. Allowed values: inventor, assignee", "enum": [ - "us", - "se", - "gb", - "de", - "no", - "es", - "mx", - "ar", - "bo", - "cl", - "co", - "cr", - "ec", - "gt", - "hn", - "ni", - "pa", - "py", - "pe", - "uy", - "ve", - "da", - "ca", - "au", - "at", - "be", - "bg", - "hr", - "cy", - "cz", - "ee", - "fi", - "fr", - "gr", - "hu", - "is", - "ie", - "il", - "it", - "nl", - "pl", - "pt", - "ro", - "ru", - "ch", - "tr", - "za", - "br", - "in", - "me", - "id", - "th", - "mm", - "al", - "az", - "bl", - "ba", - "ks", - "la", - "li", - "mk", - "rs", - "sk", - "ua", - "essv", - "nz", - "bd", - "cn", - "gh", - "hk", - "jp", - "kr", - "ma", - "mt", - "my", - "ng", - "ph", - "pk", - "sg", - "si", - "tz" + "inventor", + "assignee" ], "in": "query", - "name": "country", + "name": "field", "required": true, "type": "string", - "x-example": "us" + "x-example": "inventor" }, { - "description": "IANA timezone for local times", + "description": "Partial name typed so far", "in": "query", - "name": "timezone", + "name": "value", + "required": true, "type": "string", - "x-example": "America/New_York" + "x-example": "John" } ], "produces": [ @@ -368754,7 +442800,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/googlepatents.suggestResponseDoc" } }, "400": { @@ -368763,8 +442809,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -368781,110 +442833,41 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob football TV guide", + "summary": "Autocomplete an inventor or assignee name for Google Patents search", "tags": [ - "FotMob" + "Google Patents" ] } }, - "/fotmob/tv-guide-channels": { + "/googleplay/app": { "get": { "consumes": [ "application/json" ], - "description": "Discovers channels attached to matches in the selected country's current seven-day public TV guide window. Use the country directory to discover the complete country code set.", - "operationId": "fotmob-tv-guide-channels", + "description": "Returns app metadata from a Google Play details page, including installs, ratings, pricing, version info, developer metadata, media assets, release state, selected user comments, and \"More by this developer\" and \"Similar apps\" recommendation rails. For a per-device (phone/tablet/Chromebook) ratings-and-reviews breakdown, see `/googleplay/ratings`. Defaults: `country=us`, `lang=en`.", + "operationId": "googleplay-app", "parameters": [ { - "description": "Market code from /fotmob/tv-guide-countries", - "enum": [ - "us", - "se", - "gb", - "de", - "no", - "es", - "mx", - "ar", - "bo", - "cl", - "co", - "cr", - "ec", - "gt", - "hn", - "ni", - "pa", - "py", - "pe", - "uy", - "ve", - "da", - "ca", - "au", - "at", - "be", - "bg", - "hr", - "cy", - "cz", - "ee", - "fi", - "fr", - "gr", - "hu", - "is", - "ie", - "il", - "it", - "nl", - "pl", - "pt", - "ro", - "ru", - "ch", - "tr", - "za", - "br", - "in", - "me", - "id", - "th", - "mm", - "al", - "az", - "bl", - "ba", - "ks", - "la", - "li", - "mk", - "rs", - "sk", - "ua", - "essv", - "nz", - "bd", - "cn", - "gh", - "hk", - "jp", - "kr", - "ma", - "mt", - "my", - "ng", - "ph", - "pk", - "sg", - "si", - "tz" - ], + "description": "Google Play package name", "in": "query", - "name": "country", + "name": "app_id", "required": true, "type": "string", + "x-example": "com.openai.chatgpt" + }, + { + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", "x-example": "us" + }, + { + "description": "Two-letter language code", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -368892,9 +442875,9 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped app details payload", "schema": { - "$ref": "#/definitions/fotmob.responseDoc" + "$ref": "#/definitions/googleplay.AppDetailsResponse" } }, "400": { @@ -368909,43 +442892,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "FotMob TV guide channels", - "tags": [ - "FotMob" - ] - } - }, - "/fotmob/tv-guide-countries": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the countries in FotMob's football TV guide country selector, each with a country `code` (such as `us`, `gb`, `de` or `jp`) and a name. Use a code with the FotMob TV guide and TV guide channels endpoints. It takes no parameters.", - "operationId": "fotmob-tv-guide-countries", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/fotmob.responseDoc" - } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -368956,24 +442910,33 @@ "ApiKeyAuth": [] } ], - "summary": "FotMob TV guide country directory", + "summary": "Retrieve full Google Play app details", "tags": [ - "FotMob" + "GooglePlay" ] } }, - "/foxnews/article": { + "/googleplay/categories": { "get": { - "description": "Returns public Fox News article metadata and body paragraphs from a canonical article URL. This does not bypass login, subscription, or other access controls.", - "operationId": "foxnews-article", + "consumes": [ + "application/json" + ], + "description": "Lists the Google Play app categories and subcategories, each with an id such as `PRODUCTIVITY` and a display name. `country` and `lang` take two-letter codes to pick the storefront and the language of the names.", + "operationId": "googleplay-categories", "parameters": [ { - "description": "Canonical Fox News article URL", + "description": "Two-letter country code", "in": "query", - "name": "url", - "required": true, + "name": "country", "type": "string", - "x-example": "https://www.foxnews.com/us/example-story" + "x-example": "us" + }, + { + "description": "Two-letter language code", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -368983,7 +442946,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foxnews.articleResponseDoc" + "$ref": "#/definitions/googleplay.categoriesResponseDoc" } }, "400": { @@ -369004,8 +442967,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -369016,30 +442979,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fox News article content", + "summary": "Retrieve Google Play app categories", "tags": [ - "Fox News" + "GooglePlay" ] } }, - "/foxnews/author": { + "/googleplay/datasafety": { "get": { - "description": "Returns one Fox News author/personality's public bio page: name, biography, and their most recent articles. Provide either the author's name slug or the full https://www.foxnews.com/person// page URL.", - "operationId": "foxnews-author", + "consumes": [ + "application/json" + ], + "description": "Returns the data safety section Google Play shows for an app, by the required `app_id`. It lists the data the app collects and shares, each with its type, purpose and whether it is optional, plus the app's security practices and privacy policy URL. `lang` sets the language.", + "operationId": "googleplay-datasafety", "parameters": [ { - "description": "Fox News author name slug, e.g. brooke-taylor", + "description": "Google Play app id", "in": "query", - "name": "slug", + "name": "app_id", + "required": true, "type": "string", - "x-example": "brooke-taylor" + "x-example": "com.openai.chatgpt" }, { - "description": "Canonical https://www.foxnews.com/person// author page URL, as an alternative to slug", + "description": "Two-letter language code", "in": "query", - "name": "url", + "name": "lang", "type": "string", - "x-example": "https://www.foxnews.com/person/t/brooke-taylor" + "x-example": "en" } ], "produces": [ @@ -369049,7 +443016,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foxnews.authorResponseDoc" + "$ref": "#/definitions/googleplay.dataSafetyResponseDoc" } }, "400": { @@ -369070,8 +443037,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -369082,38 +443049,55 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fox News author profile", + "summary": "Retrieve Google Play data safety details", "tags": [ - "Fox News" + "GooglePlay" ] } }, - "/foxnews/headlines": { + "/googleplay/developer/{dev_id}": { "get": { - "description": "Returns the latest 25 Fox News headlines for one section. `section` is required and must be one of `us`, `world`, `politics`, `science`, `health`, `sports`, `travel`, `tech`, `opinion`, `entertainment`, `media` or `lifestyle`. Each item has its title, URL, summary, publication time and image.", - "operationId": "foxnews-headlines", + "consumes": [ + "application/json" + ], + "description": "Lists the Google Play apps published by one developer, by developer id or name, for an optional country and language. `num` sets how many apps to return, and `full_detail=true` resolves each app to its full detail record instead of the listing summary. Returns the developer id and name with the app list.", + "operationId": "googleplay-developer", "parameters": [ { - "description": "Fox News RSS section slug: us, world, politics, science, health, sports, travel, tech, opinion, entertainment, media, or lifestyle", - "enum": [ - "us", - "world", - "politics", - "science", - "health", - "sports", - "travel", - "tech", - "opinion", - "entertainment", - "media", - "lifestyle" - ], - "in": "query", - "name": "section", + "description": "Developer id or name", + "in": "path", + "name": "dev_id", "required": true, "type": "string", + "x-example": "OpenAI" + }, + { + "description": "Number of apps", + "in": "query", + "name": "num", + "type": "integer", + "x-example": 60 + }, + { + "description": "Two-letter country code", + "in": "query", + "name": "country", + "type": "string", "x-example": "us" + }, + { + "description": "Two-letter language code", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en" + }, + { + "default": false, + "description": "Resolve each app to full detail", + "in": "query", + "name": "full_detail", + "type": "boolean" } ], "produces": [ @@ -369123,7 +443107,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/foxnews.headlinesResponseDoc" + "$ref": "#/definitions/googleplay.developerResultsResponseDoc" } }, "400": { @@ -369144,8 +443128,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -369156,170 +443140,91 @@ "ApiKeyAuth": [] } ], - "summary": "Get Fox News section headlines", + "summary": "Retrieve apps by Google Play developer", "tags": [ - "Fox News" + "GooglePlay" ] } }, - "/foxnews/news": { + "/googleplay/list": { "get": { - "description": "Returns fresh Fox News top stories from the public site-wide RSS feed. The feed is a public headline/body source and does not require credentials.", - "operationId": "foxnews-news", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/foxnews.newsResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Fox News top stories", - "tags": [ - "Fox News" - ] - } - }, - "/foxnews/search": { - "get": { - "description": "Searches Fox News. Results may include article, video, or slideshow records; use type to restrict the result kind.", - "operationId": "foxnews-search", + "description": "Lists apps from a Google Play chart. `collection` is `TOP_FREE`, `TOP_PAID`, `GROSSING`, `NEW_FREE` or `NEW_PAID`, and `category`, `device`, `age`, `num`, `country` and `lang` narrow it. Set `full_detail` to get full app details instead of the compact card.", + "operationId": "googleplay-list", "parameters": [ { - "description": "Search query", + "description": "Collection: TOP_FREE, TOP_PAID, GROSSING, NEW_FREE, NEW_PAID", + "enum": [ + "TOP_FREE", + "TOP_PAID", + "GROSSING", + "NEW_FREE", + "NEW_PAID" + ], "in": "query", - "maxLength": 200, - "minLength": 1, - "name": "q", - "required": true, + "name": "collection", "type": "string", - "x-example": "election" + "x-example": "TOP_FREE" }, { - "default": 1, - "description": "1-based result offset", + "description": "Category id", "in": "query", - "maximum": 10000, - "minimum": 1, - "name": "start", - "type": "integer" + "name": "category", + "type": "string", + "x-example": "TOOLS" }, { - "description": "Result type", + "description": "Google Play device tab: phone, tablet, tv, chromebook, watch, xr, car", "enum": [ - "article", - "video", - "slideshow" + "phone", + "tablet", + "tv", + "chromebook", + "watch", + "xr", + "car" ], "in": "query", - "name": "type", - "type": "string" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/foxnews.searchResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + "name": "device", + "type": "string", + "x-example": "tablet" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Family age range", + "in": "query", + "name": "age", + "type": "string", + "x-example": "AGE_RANGE1" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Search Fox News public content", - "tags": [ - "Fox News" - ] - } - }, - "/foxnews/sections": { - "get": { - "description": "Returns the exact live-verified Fox News article RSS section slugs accepted by foxnews-headlines. The video-only RSS feed is intentionally excluded.", - "operationId": "foxnews-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/foxnews.sectionsResponseDoc" - } + "description": "Number of apps", + "in": "query", + "name": "num", + "type": "integer", + "x-example": 50 }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get Fox News RSS sections", - "tags": [ - "Fox News" - ] - } - }, - "/foxsports/article": { - "get": { - "description": "Returns public FOX Sports article metadata and body paragraphs from a canonical foxsports.com/stories/
/ URL. Public body content stops at the article body container.", - "operationId": "foxsports-article", - "parameters": [ + "description": "Two-letter country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, { - "description": "Canonical FOX Sports story URL", + "description": "Two-letter language code", "in": "query", - "name": "url", - "required": true, + "name": "lang", "type": "string", - "x-example": "https://www.foxsports.com/stories/nfl/how-to-watch-eagles-vs-bears-tv-channel-live-stream-time-2026-week-3" + "x-example": "en" + }, + { + "default": false, + "description": "Resolve each app to full detail", + "in": "query", + "name": "full_detail", + "type": "boolean" } ], "produces": [ @@ -369329,7 +443234,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/googleplay.listResultsResponseDoc" } }, "400": { @@ -369350,8 +443255,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -369362,49 +443267,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get FOX Sports article content", + "summary": "Retrieve apps from a Google Play top collection", "tags": [ - "FOX Sports" + "GooglePlay" ] } }, - "/foxsports/headlines": { + "/googleplay/permissions": { "get": { - "description": "Returns current FOX Sports headlines for one sport or topic. `section` is required and takes one of 23 slugs such as `top`, `nfl`, `nba`, `college-football`, `ufc`, `golf` or `fifa-world-cup`; others return an invalid-parameter error. Feeds follow FOX Sports' own curation and can include related cross-sport items.", - "operationId": "foxsports-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns the permissions a Google Play app requests, by the required `app_id`. Each entry has the permission name and its type. Set `short` to get only the permission names as a flat list. `country` and `lang` pick the storefront and language.", + "operationId": "googleplay-permissions", "parameters": [ { - "description": "FOX Sports section slug", - "enum": [ - "top", - "mlb", - "nfl", - "college-football", - "ufl", - "nba", - "nhl", - "college-basketball", - "nascar", - "ufc", - "motor-sports", - "golf", - "soccer", - "fifa-world-cup", - "fifa-womens-world-cup", - "olympics", - "tennis", - "horseracing", - "westminster-kennel-club-dog-show", - "wnba", - "womens-college-basketball", - "world-baseball-classic", - "wwe" - ], + "description": "Google Play app id", "in": "query", - "name": "section", + "name": "app_id", "required": true, "type": "string", - "x-example": "top" + "x-example": "com.openai.chatgpt" + }, + { + "description": "Two-letter country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Two-letter language code", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en" + }, + { + "default": false, + "description": "Return only permission names", + "in": "query", + "name": "short", + "type": "boolean" } ], "produces": [ @@ -369414,7 +443318,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/googleplay.permissionsResultsResponseDoc" } }, "400": { @@ -369423,43 +443327,11 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get FOX Sports section headlines", - "tags": [ - "FOX Sports" - ] - } - }, - "/foxsports/news": { - "get": { - "description": "Returns current cross-sport stories from FOX Sports' All Headlines feed. Each item has its title and canonical story URL, plus summary, publication time, author and image when FOX Sports supplies them. Takes no parameters.", - "operationId": "foxsports-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -369467,8 +443339,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -369479,104 +443351,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get FOX Sports top stories", + "summary": "Retrieve Google Play app permissions", "tags": [ - "FOX Sports" + "GooglePlay" ] } }, - "/foxsports/sections": { + "/googleplay/ratings": { "get": { - "description": "Lists the 23 FOX Sports editorial feeds accepted by `foxsports-headlines`, including `top`, `mlb`, `nfl`, `soccer`, `olympics` and `wwe`. Each entry has the `slug`, `name` and feed `url`. The All Headlines feed is served by `foxsports-news`, not as a section; checked 2026-09-28.", - "operationId": "foxsports-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get FOX Sports news sections", - "tags": [ - "FOX Sports" - ] - } - }, - "/france24/article": { - "get": { - "description": "Returns public France 24 English-edition article metadata and body paragraphs from a canonical article URL. Live-blog pages are supported and return their chronological update entries as body paragraphs.", - "operationId": "france24-article", + "description": "Returns the ratings-and-reviews breakdown Google Play shows under the details page's device tabs, one entry each for phone, tablet, and Chromebook. Defaults: `country=us`, `lang=en`.", + "operationId": "googleplay-ratings", "parameters": [ { - "description": "Canonical France 24 article URL", + "description": "Google Play package name", "in": "query", - "name": "url", + "name": "app_id", "required": true, "type": "string", - "x-example": "https://www.france24.com/en/europe/20260924-eu-sanctions-russian-pundit-xenia-fedorova-after-expulsion-from-france" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + "x-example": "com.openai.chatgpt" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get France 24 article content", - "tags": [ - "France 24" - ] - } - }, - "/france24/author": { - "get": { - "description": "Returns one France 24 byline's public profile (name, job title, biography) and their recent articles from a canonical author-profile URL. This includes the shared \"FRANCE 24\" newsroom byline used on many stories, which has no individual biography.", - "operationId": "france24-author", - "parameters": [ + "description": "Two-letter storefront country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, { - "description": "Canonical www.france24.com/en/author// URL", + "description": "Two-letter language code", "in": "query", - "name": "url", - "required": true, + "name": "lang", "type": "string", - "x-example": "https://www.france24.com/en/author/france-24/" + "x-example": "en" } ], "produces": [ @@ -369586,7 +443395,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.france24AuthorResponseDoc" + "$ref": "#/definitions/googleplay.ratingsResponseDoc" } }, "400": { @@ -369601,70 +443410,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get a France 24 author profile", - "tags": [ - "France 24" - ] - } - }, - "/france24/headlines": { - "get": { - "description": "Returns the latest France 24 English-edition headlines for one section. `section` is required and must be one of `africa`, `americas`, `asia-pacific`, `europe`, `france`, `middle-east`, `business-tech`, `culture`, `environment`, `sport`, `live-news` or `tv-shows`. Each item has its title, URL, summary, publication time and author.", - "operationId": "france24-headlines", - "parameters": [ - { - "description": "France 24 section slug", - "enum": [ - "africa", - "americas", - "asia-pacific", - "europe", - "france", - "middle-east", - "business-tech", - "culture", - "environment", - "sport", - "live-news", - "tv-shows" - ], - "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "africa" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" - } - }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -369675,158 +443428,73 @@ "ApiKeyAuth": [] } ], - "summary": "Get France 24 section headlines", + "summary": "Get Google Play ratings by device", "tags": [ - "France 24" + "GooglePlay" ] } }, - "/france24/news": { + "/googleplay/reviews": { "get": { - "description": "Returns the current France 24 English-edition top stories. Each item has its title, URL, summary, publication time and author. Takes no parameters; use `france24-headlines` for a single region or topic.", - "operationId": "france24-news", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ + "description": "Returns Google Play reviews for an app by `app_id`. `sort` is `newest` (default), `helpfulness` or `rating`, and `num` is up to 1000 per request (default 100). Each review has its text, score, date, thumbs-up count, app version and any developer reply. Pass `next_pagination_token` back to continue.", + "operationId": "googleplay-reviews", + "parameters": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get France 24 top stories", - "tags": [ - "France 24" - ] - } - }, - "/france24/sections": { - "get": { - "description": "Lists the 12 France 24 English-edition sections accepted by `france24-headlines`: six regions, four topics, the `live-news` wire-briefs hub and the `tv-shows` programmes hub. Each entry has the `slug`, display `name` and section `url`.", - "operationId": "france24-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ + "description": "Google Play app id", + "in": "query", + "name": "app_id", + "required": true, + "type": "string", + "x-example": "com.openai.chatgpt" + }, { - "ApiKeyAuth": [] - } - ], - "summary": "Get France 24 sections", - "tags": [ - "France 24" - ] - } - }, - "/freemalaysiatoday/news": { - "get": { - "description": "Returns Free Malaysia Today's current public top-stories RSS feed: each story's title, canonical URL, summary, author, publication time, and lead image.", - "operationId": "freemalaysiatoday-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/freemalaysiatoday.newsResponseDoc" - } + "description": "Sort: helpfulness, newest, rating", + "enum": [ + "helpfulness", + "newest", + "rating" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "newest" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Number of reviews", + "in": "query", + "name": "num", + "type": "integer", + "x-example": 100 }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get the latest Free Malaysia Today stories", - "tags": [ - "Free Malaysia Today" - ] - } - }, - "/freemalaysiatoday/sections": { - "get": { - "description": "Lists every live-verified primary editorial navigation section, with its slug, display name, and landing-page URL. This is the live-verified primary editorial navigation taxonomy; media, promotional, and duplicate commercial destinations are excluded.", - "operationId": "freemalaysiatoday-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/freemalaysiatoday.sectionsResponseDoc" - } + "description": "Two-letter country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Two-letter language code", + "in": "query", + "name": "lang", + "type": "string", + "x-example": "en" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "List Free Malaysia Today sections", - "tags": [ - "Free Malaysia Today" - ] - } - }, - "/ft/article": { - "get": { - "description": "Returns one public Financial Times article's metadata and body paragraphs from a canonical article URL. Subscriber-only articles that the FT serves as a subscription page are not available.", - "operationId": "ft-article", - "parameters": [ + "default": false, + "description": "Only fetch the requested page", + "in": "query", + "name": "paginate", + "type": "boolean" + }, { - "description": "Canonical FT article URL", + "description": "Token from a previous response", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.ft.com/content/018aa34c-2498-4120-906b-5baf36e98c77" + "name": "next_pagination_token", + "type": "string" } ], "produces": [ @@ -369836,7 +443504,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ft.articleResponseDoc" + "$ref": "#/definitions/googleplay.reviewsResponseDoc" } }, "400": { @@ -369845,12 +443513,6 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "404": { "description": "Not Found", "schema": { @@ -369863,8 +443525,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -369875,37 +443537,67 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Financial Times article's content", + "summary": "Retrieve Google Play reviews", "tags": [ - "FT" + "GooglePlay" ] } }, - "/ft/author": { + "/googleplay/search": { "get": { - "description": "Returns one Financial Times contributor's public byline profile (name, job title, email, social accounts) plus one page of their recent articles. FT author pages carry no bio paragraph, only this byline metadata.", - "operationId": "ft-author", + "consumes": [ + "application/json" + ], + "description": "Searches Google Play for apps matching the required `term`, up to `num` results (default 20, max 250). `price` is `all` (default), `free` or `paid`, and `country` and `lang` default to `us` and `en`. A strong exact match is placed first. An empty list means no apps matched.", + "operationId": "googleplay-search", "parameters": [ { - "description": "Author URL slug, e.g. martin-wolf", + "description": "Search term", "in": "query", - "name": "slug", + "name": "term", + "required": true, "type": "string", - "x-example": "martin-wolf" + "x-example": "chatgpt" }, { - "description": "Canonical www.ft.com/ author URL; alternative to slug", + "description": "Number of apps", "in": "query", - "name": "url", + "name": "num", + "type": "integer", + "x-example": 20 + }, + { + "description": "Two-letter country code", + "in": "query", + "name": "country", "type": "string", - "x-example": "https://www.ft.com/martin-wolf" + "x-example": "us" }, { - "default": 1, - "description": "1-based page number of the author's article list", + "description": "Two-letter language code", "in": "query", - "name": "page", - "type": "integer" + "name": "lang", + "type": "string", + "x-example": "en" + }, + { + "default": false, + "description": "Resolve each app to full detail", + "in": "query", + "name": "full_detail", + "type": "boolean" + }, + { + "description": "Price filter: all, free, paid", + "enum": [ + "all", + "free", + "paid" + ], + "in": "query", + "name": "price", + "type": "string", + "x-example": "all" } ], "produces": [ @@ -369915,7 +443607,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ft.authorResponseDoc" + "$ref": "#/definitions/googleplay.searchResultsResponseDoc" } }, "400": { @@ -369936,8 +443628,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -369948,76 +443640,55 @@ "ApiKeyAuth": [] } ], - "summary": "Get an FT author profile", + "summary": "Search Google Play", "tags": [ - "FT" + "GooglePlay" ] } }, - "/ft/categories": { + "/googleplay/similar": { "get": { - "description": "Lists every Financial Times section accepted by /ft/headlines, grouped by top-level section, with each section's slug, display name, and landing-page URL.", - "operationId": "ft-categories", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/ft.categoriesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + "description": "Returns the apps in the Similar apps cluster on a Google Play app page, for the required `app_id`. `num` limits how many are returned, `country` and `lang` set the storefront and language, and `full_detail` returns full app details instead of compact cards.", + "operationId": "googleplay-similar", + "parameters": [ + { + "description": "Google Play app id", + "in": "query", + "name": "app_id", + "required": true, + "type": "string", + "x-example": "com.openai.chatgpt" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Number of apps", + "in": "query", + "name": "num", + "type": "integer", + "x-example": 24 }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "List Financial Times sections", - "tags": [ - "FT" - ] - } - }, - "/ft/headlines": { - "get": { - "description": "Returns one page of a Financial Times section front: each story's title, canonical URL, summary, section tag, publication time, and lead image. Section must be a slug returned by /ft/categories.", - "operationId": "ft-headlines", - "parameters": [ + "description": "Two-letter country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, { - "description": "Section slug from /ft/categories", + "description": "Two-letter language code", "in": "query", - "name": "section", - "required": true, + "name": "lang", "type": "string", - "x-example": "world" + "x-example": "en" }, { - "description": "Results page", + "default": false, + "description": "Resolve each app to full detail", "in": "query", - "maximum": 20, - "minimum": 1, - "name": "page", - "type": "integer" + "name": "full_detail", + "type": "boolean" } ], "produces": [ @@ -370027,7 +443698,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ft.headlinesResponseDoc" + "$ref": "#/definitions/googleplay.similarResultsResponseDoc" } }, "400": { @@ -370048,8 +443719,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -370060,98 +443731,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get the latest stories in a Financial Times section", + "summary": "Retrieve similar Google Play apps", "tags": [ - "FT" + "GooglePlay" ] } }, - "/ft/news": { + "/googleplay/suggest/{term}": { "get": { - "description": "Returns the Financial Times' current news feed: the newest stories across all sections, each with its title, canonical URL, and publication time.", - "operationId": "ft-news", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/ft.newsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get the latest Financial Times stories", - "tags": [ - "FT" - ] - } - }, - "/ft/search": { - "get": { - "description": "Returns one page of Financial Times search results: each story's title, canonical URL, summary, section tag, publication time, and lead image. Results can be ordered by relevance or date and filtered by publication window.", - "operationId": "ft-search", + "description": "Returns up to 10 Google Play search suggestions for the term prefix in the path. `country` and `lang` take two-letter codes to pick the storefront and language. Each suggestion is a `term`.", + "operationId": "googleplay-suggest", "parameters": [ { - "description": "Search keywords", - "in": "query", - "name": "q", + "description": "Search term prefix", + "in": "path", + "name": "term", "required": true, "type": "string", - "x-example": "climate" - }, - { - "description": "Results page", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page", - "type": "integer" + "x-example": "chatg" }, { - "description": "Result ordering", - "enum": [ - "relevance", - "date" - ], + "description": "Two-letter country code", "in": "query", - "name": "sort", - "type": "string" + "name": "country", + "type": "string", + "x-example": "us" }, { - "description": "Publication-window filter", - "enum": [ - "now-24h", - "now-7d", - "now-30d", - "now-1y" - ], + "description": "Two-letter language code", "in": "query", - "name": "date_range", - "type": "string" + "name": "lang", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -370161,7 +443775,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ft.searchResponseDoc" + "$ref": "#/definitions/googleplay.suggestResponseDoc" } }, "400": { @@ -370182,8 +443796,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -370194,108 +443808,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Financial Times articles", + "summary": "Retrieve Google Play query suggestions", "tags": [ - "FT" + "GooglePlay" ] } }, - "/fussballde/amateur-stats": { + "/gosugamers/article": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of one of the ten Top-Amateurstatistiken rankings (Kreisklasse to Regionalliga, championship matches): top teams by goals, goal ratio, goals against and points average, highest-scoring matches, biggest draws, and top scorers by goals, ratio and goals in one match per week or season. Filter by season, team type and federation and page with `limit` and `offset`. A ranking is bounded to roughly its top 200 entries; `final` marks the last page.", - "operationId": "fussballde-amateur-stats", + "description": "Returns one GosuGamers news or features article by numeric id: type, title, teaser, section, publish and update times, headline image with caption, authors, the full text as plain text and related articles. An unknown id returns not found. Take `id` from gosugamers-articles.", + "operationId": "gosugamers-article", "parameters": [ { - "description": "Ranking id", - "enum": [ - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10" - ], + "description": "Numeric article id from gosugamers-articles", "in": "query", - "name": "stat", + "name": "id", "required": true, "type": "string", - "x-example": "8" - }, - { - "description": "Four-digit season code, 2627 for 2026/27; the site offers the current and previous season", - "in": "query", - "name": "season", - "type": "string", - "x-example": "2627" - }, - { - "description": "Team type id; omit for all", - "enum": [ - "1", - "3", - "6", - "8", - "4", - "5", - "7", - "9" - ], - "in": "query", - "name": "team_type", - "type": "string", - "x-example": "1" - }, - { - "description": "Federation id; omit for all federations", - "enum": [ - "89", - "32", - "31", - "66", - "61", - "02", - "03", - "34", - "62", - "23", - "22", - "01", - "41", - "43", - "63", - "64", - "04", - "33", - "42", - "65", - "21", - "35" - ], - "in": "query", - "name": "federation_id", - "type": "string", - "x-example": "21" - }, - { - "description": "Rows per call, 1 to 100, default 30", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 30 - }, - { - "description": "Number of rows to skip, 0 to 1000, default 0", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "x-example": "79434" } ], "produces": [ @@ -370305,7 +443838,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.amateurStatsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/gosugamers.ArticleDetail" + } + }, + "type": "object" + } + ] } }, "400": { @@ -370320,6 +443865,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -370332,52 +443883,67 @@ "ApiKeyAuth": [] } ], - "summary": "Get FUSSBALL.DE amateur top statistics", + "summary": "GosuGamers article", "tags": [ - "FUSSBALL.DE" + "GosuGamers" ] } }, - "/fussballde/club": { + "/gosugamers/articles": { "get": { "consumes": [ "application/json" ], - "description": "Returns one club: name, federation, team counts, profile facts (founding year, address, website) and the club's teams with their competitions and team type. Teams are those of the current season; set `season` for an earlier one and `competition_kind` to keep only teams in championships, cups, friendlies and so on. Club ids appear as `club_id` on teams and matches.", - "operationId": "fussballde-club", + "description": "Pages the GosuGamers news and features archive (51,051 articles), newest first, with optional `section` and `type` filters: id, type, title, teaser, section, publish time, author, image and URL. `section` is one of the 15 sections that carry articles (the six esports titles, Wild Rift, Free Fire, Battlegrounds Mobile India and the editorial sections entertainment, genshin-impact, honkai-star-rail, zenless-zone-zero, honor-of-kings and umamusume-pretty-derby); an article can belong to several sections. `type` is `news` or `features`. Paged with `page` and `page_size` (up to 100). Use gosugamers-article with a returned id for the text.", + "operationId": "gosugamers-articles", "parameters": [ { - "description": "Club id from a team or match, e.g. 00ES8GN8N400008VVV0AG08LVUPGND5I", + "description": "Article section; one of dota2, counterstrike, lol, valorant, mobile-legends, pubg-mobile, wild-rift, free-fire, battlegrounds-mobile-india, entertainment, genshin-impact, honkai-star-rail, zenless-zone-zero, honor-of-kings, umamusume-pretty-derby; omit for all", + "enum": [ + "dota2", + "counterstrike", + "lol", + "valorant", + "mobile-legends", + "pubg-mobile", + "wild-rift", + "free-fire", + "battlegrounds-mobile-india", + "entertainment", + "genshin-impact", + "honkai-star-rail", + "zenless-zone-zero", + "honor-of-kings", + "umamusume-pretty-derby" + ], "in": "query", - "name": "club_id", - "required": true, - "type": "string", - "x-example": "00ES8GN8N400008VVV0AG08LVUPGND5I" + "name": "section", + "type": "string" }, { - "description": "Four-digit season code such as 2526; default current season", + "description": "Article type; one of news, features; omit for both", + "enum": [ + "news", + "features" + ], "in": "query", - "name": "season", - "type": "string", - "x-example": "2526" + "name": "type", + "type": "string" }, { - "description": "Competition kind id; omit for all kinds", - "enum": [ - "1", - "8", - "3", - "7", - "6", - "11", - "2", - "21", - "9" - ], + "description": "1-based page; defaults to 1", "in": "query", - "name": "competition_kind", - "type": "string", - "x-example": "1" + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "description": "Page size, 1 to 100; defaults to 10", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -370387,7 +443953,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.clubResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/gosugamers.ArticlesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -370396,8 +443974,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -370414,85 +443992,62 @@ "ApiKeyAuth": [] } ], - "summary": "Get a FUSSBALL.DE club", + "summary": "GosuGamers news and features archive", "tags": [ - "FUSSBALL.DE" + "GosuGamers" ] } }, - "/fussballde/club-matches": { + "/gosugamers/encounters": { "get": { "consumes": [ "application/json" ], - "description": "Returns the fixtures and results across all of a club's teams (senior and youth). `all` (default) is the club match plan for a date window (default the current season) optionally for one competition kind and paged with `limit` and `offset`; `next` is the next fixtures and `previous` the latest results. Each match names its competition and team type.", - "operationId": "fussballde-club-matches", + "description": "Returns the other recorded meetings between two GosuGamers teams as seen from one match: tournament, start time, both teams with ids, tags and final scores, winner flags and the match URL. The given `match_id` itself is left out; `game` is required by the upstream but does not narrow the list. Take the ids from gosugamers-matches, gosugamers-results or gosugamers-rankings. Two teams with no other meeting return an empty list.", + "operationId": "gosugamers-encounters", "parameters": [ { - "description": "Club id from fussballde-club or fussballde-club-search", - "in": "query", - "name": "club_id", - "required": true, - "type": "string", - "x-example": "00ES8GN8N400008VVV0AG08LVUPGND5I" - }, - { - "description": "Match list kind, default all", + "description": "Game section of the match; one of dota2, counterstrike, lol, valorant, mobile-legends, pubg-mobile, wild-rift, free-fire, battlegrounds-mobile-india", "enum": [ - "all", - "next", - "previous" + "dota2", + "counterstrike", + "lol", + "valorant", + "mobile-legends", + "pubg-mobile", + "wild-rift", + "free-fire", + "battlegrounds-mobile-india" ], "in": "query", - "name": "kind", + "name": "game", + "required": true, "type": "string", - "x-example": "all" + "x-example": "valorant" }, { - "description": "kind all only: first day as YYYY-MM-DD, default 1 July of the current season", + "description": "Numeric id of the match whose other meetings are wanted; that match is left out", "in": "query", - "name": "date_from", + "name": "match_id", + "required": true, "type": "string", - "x-example": "2026-10-01" + "x-example": "660816" }, { - "description": "kind all only: last day as YYYY-MM-DD, default 30 June of the season", + "description": "Numeric id of the first team", "in": "query", - "name": "date_to", + "name": "team1_id", + "required": true, "type": "string", - "x-example": "2026-10-31" + "x-example": "38335" }, { - "description": "kind all only: competition kind id; omit for all kinds", - "enum": [ - "1", - "8", - "3", - "7", - "6", - "11", - "2", - "21", - "9" - ], + "description": "Numeric id of the second team", "in": "query", - "name": "competition_kind", + "name": "team2_id", + "required": true, "type": "string", - "x-example": "8" - }, - { - "description": "Matches (kind all only) per call, 1 to 50, default 10", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 - }, - { - "description": "Number of matches to skip, 0 to 1000, default 0", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "x-example": "37547" } ], "produces": [ @@ -370502,7 +444057,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.clubMatchesResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/gosugamers.EncountersResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -370511,8 +444078,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -370529,49 +444096,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get FUSSBALL.DE fixtures and results of a club", + "summary": "GosuGamers head-to-head meetings", "tags": [ - "FUSSBALL.DE" + "GosuGamers" ] } }, - "/fussballde/club-search": { + "/gosugamers/games": { "get": { "consumes": [ "application/json" ], - "description": "Searches FUSSBALL.DE clubs by club name, postcode or place, or both (both must match), and returns each club's id, name, postal code, city and logo. The first page reports the `total` hit count; page with `limit` (1 to 100, default 20) and `offset`, and `final` marks the last page. Zero results is a valid response. The site's search is not fuzzy and matches a club's official name (for example `RasenBallsport Leipzig`, `SC Freiburg`), so a looser display name such as `RB Leipzig` can return nothing: search by place or one distinctive word, or use the `club_id` that every team, table and match row already carries.", - "operationId": "fussballde-club-search", - "parameters": [ - { - "description": "Club name or part of it; text or place is required", - "in": "query", - "name": "text", - "type": "string", - "x-example": "Dortmund" - }, - { - "description": "Postcode or place name; text or place is required", - "in": "query", - "name": "place", - "type": "string", - "x-example": "44139" - }, - { - "description": "Clubs per call, 1 to 100, default 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 - }, - { - "description": "Number of clubs to skip, 0 to 2000, default 0", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 - } - ], + "description": "Returns the game sections whose match pages this API reads: `dota2`, `counterstrike`, `lol`, `valorant`, `mobile-legends`, `pubg-mobile`, `wild-rift`, `free-fire` and `battlegrounds-mobile-india`, with display names. Use a slug as `game` in the other gosugamers endpoints.", + "operationId": "gosugamers-games", "produces": [ "application/json" ], @@ -370579,7 +444116,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.clubSearchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/gosugamers.GamesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -370588,8 +444137,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -370606,79 +444155,54 @@ "ApiKeyAuth": [] } ], - "summary": "Search FUSSBALL.DE clubs by name or place", + "summary": "GosuGamers game sections", "tags": [ - "FUSSBALL.DE" + "GosuGamers" ] } }, - "/fussballde/competition-options": { + "/gosugamers/match": { "get": { "consumes": [ "application/json" ], - "description": "Returns the team types (Herren, Frauen, A-Junioren, ...), the leagues (Spielklassen) of each team type and the areas (Gebiete) of each league for one federation, season and competition type. Team type, league and area ids are federation-specific, so take them from this response and pass them to `fussballde-competitions`.", - "operationId": "fussballde-competition-options", + "description": "Returns one GosuGamers match: start time, tournament, stage, round, best-of, finished flag, both opponents with score, placement, world ranking and country, the number of games in the series and linked streams with language and viewer count. All of `game`, `tournament_id` and `match_id` are required; an id that does not belong to the stated tournament returns not found. Battle-royale titles can list more than two opponents. The `games` list gives each game's id for gosugamers-match-game.", + "operationId": "gosugamers-match", "parameters": [ { - "description": "Federation id", + "description": "Game section; one of dota2, counterstrike, lol, valorant, mobile-legends, pubg-mobile, wild-rift, free-fire, battlegrounds-mobile-india", "enum": [ - "89", - "32", - "31", - "66", - "61", - "02", - "03", - "34", - "62", - "23", - "22", - "01", - "41", - "43", - "63", - "64", - "04", - "33", - "42", - "65", - "21", - "35" + "dota2", + "counterstrike", + "lol", + "valorant", + "mobile-legends", + "pubg-mobile", + "wild-rift", + "free-fire", + "battlegrounds-mobile-india" ], "in": "query", - "name": "federation_id", + "name": "game", "required": true, "type": "string", - "x-example": "89" + "x-example": "dota2" }, { - "description": "Four-digit season code, 2627 for 2026/27", + "description": "Numeric tournament id from gosugamers-matches or gosugamers-results (tournament.id)", "in": "query", - "name": "season", + "name": "tournament_id", "required": true, "type": "string", - "x-example": "2627" + "x-example": "63208" }, { - "description": "Competition type id, default 1", - "enum": [ - "1", - "308", - "300", - "70", - "305", - "-300", - "-305", - "11", - "2", - "-2", - "12" - ], + "description": "Numeric match id from gosugamers-matches or gosugamers-results (id)", "in": "query", - "name": "competition_type", + "name": "match_id", + "required": true, "type": "string", - "x-example": "1" + "x-example": "663299" } ], "produces": [ @@ -370688,7 +444212,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.competitionOptionsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/gosugamers.MatchDetail" + } + }, + "type": "object" + } + ] } }, "400": { @@ -370703,6 +444239,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -370715,103 +444257,27 @@ "ApiKeyAuth": [] } ], - "summary": "List FUSSBALL.DE team types, leagues and areas", + "summary": "GosuGamers esports match detail", "tags": [ - "FUSSBALL.DE" + "GosuGamers" ] } }, - "/fussballde/competitions": { + "/gosugamers/match-game": { "get": { "consumes": [ "application/json" ], - "description": "Returns the competitions (Staffeln) at one selector path: a federation, season, competition type, team type, league and area. Each competition `id` (for example `031BFREJC800001BVS5489BUVUR5FS5A-G` for the 2026/27 Bundesliga) is the key used by the matchday, match plan, table and top-scorer endpoints. An empty list is a valid result for a path with no competitions.", - "operationId": "fussballde-competitions", + "description": "Returns one game of a GosuGamers match: the map, each team's score, side and first-pick flag, the picks or bans with the player (agents, heroes or champions where the title publishes them), the lineups, round or half scores (Counter-Strike and Valorant), every team's placement, kills and points for battle-royale games (PUBG Mobile) and VODs. Take `game_id` from the `games` list of gosugamers-match. Fields a title does not publish are empty. An unknown game id returns not found.", + "operationId": "gosugamers-match-game", "parameters": [ { - "description": "Federation id", - "enum": [ - "89", - "32", - "31", - "66", - "61", - "02", - "03", - "34", - "62", - "23", - "22", - "01", - "41", - "43", - "63", - "64", - "04", - "33", - "42", - "65", - "21", - "35" - ], - "in": "query", - "name": "federation_id", - "required": true, - "type": "string", - "x-example": "89" - }, - { - "description": "Four-digit season code", - "in": "query", - "name": "season", - "required": true, - "type": "string", - "x-example": "2627" - }, - { - "description": "Competition type id, default 1", - "enum": [ - "1", - "308", - "300", - "70", - "305", - "-300", - "-305", - "11", - "2", - "-2", - "12" - ], - "in": "query", - "name": "competition_type", - "type": "string", - "x-example": "1" - }, - { - "description": "Team type id from fussballde-competition-options", - "in": "query", - "name": "team_type", - "required": true, - "type": "string", - "x-example": "1" - }, - { - "description": "League id from fussballde-competition-options", - "in": "query", - "name": "league", - "required": true, - "type": "string", - "x-example": "1" - }, - { - "description": "Area id from fussballde-competition-options", + "description": "Numeric game id from the games list of gosugamers-match", "in": "query", - "name": "area", + "name": "game_id", "required": true, "type": "string", - "x-example": "0123456789ABCDEF0123456700004010" + "x-example": "1361936" } ], "produces": [ @@ -370821,7 +444287,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.competitionsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/gosugamers.MatchGameResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -370836,6 +444314,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -370848,64 +444332,51 @@ "ApiKeyAuth": [] } ], - "summary": "List FUSSBALL.DE competitions for a league and area", + "summary": "GosuGamers single game (map) of a match", "tags": [ - "FUSSBALL.DE" + "GosuGamers" ] } }, - "/fussballde/federation": { + "/gosugamers/matches": { "get": { "consumes": [ "application/json" ], - "description": "Returns the profile of one of the 22 federations (the DFB and the regional and state associations) or of one of the five regional associations (Norddeutscher, Nordostdeutscher, Süddeutscher, Südwest and Westdeutscher): name, address, website, president, club, member and team counts, and the latest news items. Provide exactly one of `federation_id` and `regional_association`.", - "operationId": "fussballde-federation", + "description": "Returns the next upcoming and currently live esports matches from GosuGamers, for one `game` or across all games, 10 per page by default and up to 100 with `page` and `page_size`: start time, tournament, stage, round, both teams and the match URL. `total_rows` reports how many matches the site lists. Use gosugamers-match with the returned tournament and match ids.", + "operationId": "gosugamers-matches", "parameters": [ { - "description": "Federation id; provide exactly one of federation_id and regional_association", + "description": "Game section; one of dota2, counterstrike, lol, valorant, mobile-legends, pubg-mobile, wild-rift, free-fire, battlegrounds-mobile-india; omit for all games", "enum": [ - "89", - "32", - "31", - "66", - "61", - "02", - "03", - "34", - "62", - "23", - "22", - "01", - "41", - "43", - "63", - "64", - "04", - "33", - "42", - "65", - "21", - "35" + "dota2", + "counterstrike", + "lol", + "valorant", + "mobile-legends", + "pubg-mobile", + "wild-rift", + "free-fire", + "battlegrounds-mobile-india" ], "in": "query", - "name": "federation_id", - "type": "string", - "x-example": "21" + "name": "game", + "type": "string" }, { - "description": "Regional association; provide exactly one of federation_id and regional_association", - "enum": [ - "nord", - "nordost", - "sued", - "suedwest", - "west" - ], + "description": "1-based page; page 1 with the default size is read from the public page, any other page or size from the site's JSON API; defaults to 1", "in": "query", - "name": "regional_association", - "type": "string", - "x-example": "west" + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "description": "Page size, 1 to 100; defaults to 10", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -370915,7 +444386,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.federationResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/gosugamers.MatchListResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -370924,8 +444407,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -370942,50 +444425,46 @@ "ApiKeyAuth": [] } ], - "summary": "Get a FUSSBALL.DE federation or regional association", + "summary": "GosuGamers upcoming and live esports matches", "tags": [ - "FUSSBALL.DE" + "GosuGamers" ] } }, - "/fussballde/filters": { + "/gosugamers/player": { "get": { "consumes": [ "application/json" ], - "description": "Returns the competition selector base data of FUSSBALL.DE, the German amateur-football portal: the 22 federations (DFB plus regional associations), the available seasons per federation, and the competition types per federation and season. Use it first to get valid `federation_id`, `season` and `competition_type` values for the competition discovery endpoints.", - "operationId": "fussballde-filters", + "description": "Returns one GosuGamers player: in-game name, real name, country, GosuGamers Elo rating and world and regional ranking, win/loss/draw record and win rate, streak, career earnings in USD, social links, the current team and previous teams with join and leave dates. A player of a different game than `game` returns not found.", + "operationId": "gosugamers-player", "parameters": [ { - "description": "Optional federation id that narrows seasons and competition types to one federation", + "description": "Game section; one of dota2, counterstrike, lol, valorant, mobile-legends, pubg-mobile, wild-rift, free-fire, battlegrounds-mobile-india", "enum": [ - "89", - "32", - "31", - "66", - "61", - "02", - "03", - "34", - "62", - "23", - "22", - "01", - "41", - "43", - "63", - "64", - "04", - "33", - "42", - "65", - "21", - "35" + "dota2", + "counterstrike", + "lol", + "valorant", + "mobile-legends", + "pubg-mobile", + "wild-rift", + "free-fire", + "battlegrounds-mobile-india" ], "in": "query", - "name": "federation_id", + "name": "game", + "required": true, "type": "string", - "x-example": "31" + "x-example": "dota2" + }, + { + "description": "Numeric player id from gosugamers-team (roster[].id)", + "in": "query", + "name": "player_id", + "required": true, + "type": "string", + "x-example": "368742" } ], "produces": [ @@ -370995,7 +444474,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.filtersResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/gosugamers.PlayerDetail" + } + }, + "type": "object" + } + ] } }, "400": { @@ -371010,6 +444501,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -371022,27 +444519,67 @@ "ApiKeyAuth": [] } ], - "summary": "List FUSSBALL.DE federations, seasons and competition types", + "summary": "GosuGamers esports player profile", "tags": [ - "FUSSBALL.DE" + "GosuGamers" ] } }, - "/fussballde/match": { + "/gosugamers/rankings": { "get": { "consumes": [ "application/json" ], - "description": "Returns one match: teams, competition, date, kick-off time, venue, score and half-time score, match number and matchday, officials, goals with minutes and timeline events such as substitutions. Fields the match has not published (for example a future match's score) are omitted.", - "operationId": "fussballde-match", + "description": "Returns the GosuGamers Elo team ranking for one `game`, globally or for one ranking region (`region_id`, taken from the `regions` list in the response; 0 is Global), with an optional team name prefix `q`: rank, team id, name, tag, Elo, previous rank and rank change. Paged with `page` and `page_size` (up to 100); `total_rows` reports the size of the ranking. A `region_id` that the game does not list returns an invalid-parameter error.", + "operationId": "gosugamers-rankings", "parameters": [ { - "description": "Match id from fussballde-matchday or fussballde-match-plan", + "description": "Game section; one of dota2, counterstrike, lol, valorant, mobile-legends, pubg-mobile, wild-rift, free-fire, battlegrounds-mobile-india", + "enum": [ + "dota2", + "counterstrike", + "lol", + "valorant", + "mobile-legends", + "pubg-mobile", + "wild-rift", + "free-fire", + "battlegrounds-mobile-india" + ], "in": "query", - "name": "match_id", + "name": "game", "required": true, "type": "string", - "x-example": "031BFTHDCC000000VS5489BUVUR5FS5A" + "x-example": "valorant" + }, + { + "description": "Ranking region id from the regions list of the response; 0 is Global; defaults to 0", + "in": "query", + "minimum": 0, + "name": "region_id", + "type": "integer" + }, + { + "description": "Team name prefix, up to 100 characters", + "in": "query", + "name": "q", + "type": "string", + "x-example": "Te" + }, + { + "description": "1-based page; defaults to 1", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "description": "Page size, 1 to 100; defaults to 10", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -371052,7 +444589,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.matchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/gosugamers.RankingsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -371061,8 +444610,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -371079,66 +444628,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get a FUSSBALL.DE match", + "summary": "GosuGamers team rankings", "tags": [ - "FUSSBALL.DE" + "GosuGamers" ] } }, - "/fussballde/match-calendar": { + "/gosugamers/results": { "get": { "consumes": [ "application/json" ], - "description": "Returns the matches FUSSBALL.DE's Matchkalender lists around a five-digit postcode within a date range (default today plus six days, at most 92 days), optionally filtered by team types and competition kind. Each match includes its team type (for example D-Junioren) and league. The upstream returns at most 10 matches per request and has no paging: `truncated` is true when the page is full, so narrow the dates or filters to see the rest. Zero matches is a valid response.", - "operationId": "fussballde-match-calendar", + "description": "Returns the most recent completed esports matches from GosuGamers, for one `game` or across all games, 10 per page by default and up to 100 with `page` and `page_size`, with final scores and winner flags. `total_rows` reports how many results the site lists. Use gosugamers-match with the returned ids for opponents, ranking and streams.", + "operationId": "gosugamers-results", "parameters": [ { - "description": "Five-digit German postcode; look one up with fussballde-postal-codes", - "in": "query", - "name": "postal_code", - "required": true, - "type": "string", - "x-example": "44139" - }, - { - "description": "First day as YYYY-MM-DD, default today (Europe/Berlin)", - "in": "query", - "name": "date_from", - "type": "string", - "x-example": "2026-10-24" - }, - { - "description": "Last day as YYYY-MM-DD, at most 92 days after date_from, default six days after date_from", + "description": "Game section; one of dota2, counterstrike, lol, valorant, mobile-legends, pubg-mobile, wild-rift, free-fire, battlegrounds-mobile-india; omit for all games", + "enum": [ + "dota2", + "counterstrike", + "lol", + "valorant", + "mobile-legends", + "pubg-mobile", + "wild-rift", + "free-fire", + "battlegrounds-mobile-india" + ], "in": "query", - "name": "date_to", - "type": "string", - "x-example": "2026-10-31" + "name": "game", + "type": "string" }, { - "description": "Comma-separated team type ids such as 1,3; omit for all team types", + "description": "1-based page; page 1 with the default size is read from the public page, any other page or size from the site's JSON API; defaults to 1", "in": "query", - "name": "team_types", - "type": "string", - "x-example": "1,3" + "minimum": 1, + "name": "page", + "type": "integer" }, { - "description": "Competition kind id; omit for all kinds", - "enum": [ - "1", - "8", - "3", - "7", - "6", - "11", - "2", - "21", - "9" - ], + "description": "Page size, 1 to 100; defaults to 10", "in": "query", - "name": "competition_kind", - "type": "string", - "x-example": "1" + "maximum": 100, + "minimum": 1, + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -371148,7 +444682,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.matchCalendarResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/gosugamers.MatchListResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -371157,8 +444703,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -371175,39 +444721,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get FUSSBALL.DE matches near a postcode", + "summary": "GosuGamers recent esports match results", "tags": [ - "FUSSBALL.DE" + "GosuGamers" ] } }, - "/fussballde/match-comparison": { + "/gosugamers/stage-groups": { "get": { "consumes": [ "application/json" ], - "description": "Returns a pre-match comparison for one match: `history` is the all-time head-to-head record (duels, wins, draws, defeats, goals), `meetings` lists the other fixtures and results between the two teams, and `season` compares both teams' current standing, points, goals, form, top scorer and cards.", - "operationId": "fussballde-match-comparison", + "description": "Returns the groups (child tournaments) of one stage of a GosuGamers tournament, each with its format (for example Knockout), result type (for example Bracket), status, start time and the teams in it with ranking and country. Take `tournament_id` from gosugamers-tournaments or gosugamers-matches and `stage_id` from the stages list of gosugamers-tournament. An unknown stage, or a stage of another tournament, returns an empty list.", + "operationId": "gosugamers-stage-groups", "parameters": [ { - "description": "Match id from fussballde-matchday or fussballde-match-plan", + "description": "Numeric tournament id from gosugamers-tournaments or gosugamers-matches", "in": "query", - "name": "match_id", + "name": "tournament_id", "required": true, "type": "string", - "x-example": "031BFTHDCC000000VS5489BUVUR5FS5A" + "x-example": "63147" }, { - "description": "Comparison view, default history", - "enum": [ - "history", - "meetings", - "season" - ], + "description": "Numeric stage id (stages[].id) from gosugamers-tournament", "in": "query", - "name": "view", + "name": "stage_id", + "required": true, "type": "string", - "x-example": "history" + "x-example": "28413" } ], "produces": [ @@ -371217,7 +444759,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.matchComparisonResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/gosugamers.StageGroupsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -371226,8 +444780,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -371244,48 +444798,46 @@ "ApiKeyAuth": [] } ], - "summary": "Compare the two teams of a FUSSBALL.DE match", + "summary": "GosuGamers tournament stage groups", "tags": [ - "FUSSBALL.DE" + "GosuGamers" ] } }, - "/fussballde/match-plan": { + "/gosugamers/team": { "get": { "consumes": [ "application/json" ], - "description": "Returns every match of a competition's season (fixtures and results), including the earliest matchdays, optionally filtered to one team and a date window; the date window is applied by the site, so a narrow window is cheaper than filtering a full season. Cups and tournaments are assembled round by round: every match carries its `round` and the response lists the `rounds` with their ids. Use it for a complete schedule; use `fussballde-matchday` for one matchday.", - "operationId": "fussballde-match-plan", + "description": "Returns one GosuGamers team: name, tag, country, logo, GosuGamers Elo rating and world and regional ranking, win/loss/draw record and win rate, current streak, career earnings in USD, social links, the roster with join dates and the team's next upcoming matches. A team of a different game than `game` returns not found.", + "operationId": "gosugamers-team", "parameters": [ { - "description": "Competition id from fussballde-competitions", + "description": "Game section; one of dota2, counterstrike, lol, valorant, mobile-legends, pubg-mobile, wild-rift, free-fire, battlegrounds-mobile-india", + "enum": [ + "dota2", + "counterstrike", + "lol", + "valorant", + "mobile-legends", + "pubg-mobile", + "wild-rift", + "free-fire", + "battlegrounds-mobile-india" + ], "in": "query", - "name": "competition_id", + "name": "game", "required": true, "type": "string", - "x-example": "031BFREJC800001BVS5489BUVUR5FS5A-G" + "x-example": "dota2" }, { - "description": "Team id to keep only that team's matches", + "description": "Numeric team id from gosugamers-matches, gosugamers-results or gosugamers-match (teams[].id)", "in": "query", "name": "team_id", + "required": true, "type": "string", - "x-example": "011MI8V6UC000000VTVG0001VTR8C1K7" - }, - { - "description": "Earliest match date as YYYY-MM-DD; default is the whole season", - "in": "query", - "name": "date_from", - "type": "string", - "x-example": "2026-10-01" - }, - { - "description": "Latest match date as YYYY-MM-DD; default is the whole season", - "in": "query", - "name": "date_to", - "type": "string", - "x-example": "2026-10-31" + "x-example": "51203" } ], "produces": [ @@ -371295,7 +444847,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.matchPlanResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/gosugamers.TeamDetail" + } + }, + "type": "object" + } + ] } }, "400": { @@ -371310,6 +444874,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -371322,41 +444892,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get the full FUSSBALL.DE match plan of a competition", + "summary": "GosuGamers esports team profile", "tags": [ - "FUSSBALL.DE" + "GosuGamers" ] } }, - "/fussballde/matchday": { + "/gosugamers/team-results": { "get": { "consumes": [ "application/json" ], - "description": "Returns the matches of a competition's current matchday, of a numbered matchday (`matchday`, 1 to the competition's matchday count, reported as `matchday_count`) or of the matchday around a date. Each match has teams, date, kick-off time, score and status (`finished`, `scheduled`, `cancelled` and the other values listed below). Cups and tournaments have no numbered matchdays; for them the response lists the competition's `rounds` (each round id works as `competition_id` to read that round) and labels every match with its `round`. Dates, times and scores are decoded from the site's obfuscated glyph fonts.", - "operationId": "fussballde-matchday", + "description": "Returns the completed matches of one GosuGamers team, newest first, across the games it plays: start time, tournament, both teams with ids and final scores, winner flags and the match URL. Paged with `page` and `page_size` (up to 100, default 10); `total_rows` is the team's full history. An unknown team id returns an empty list. Take `team_id` from gosugamers-rankings, gosugamers-results or gosugamers-team.", + "operationId": "gosugamers-team-results", "parameters": [ { - "description": "Competition id from fussballde-competitions", + "description": "Numeric team id from gosugamers-rankings, gosugamers-results or gosugamers-team", "in": "query", - "name": "competition_id", + "name": "team_id", "required": true, "type": "string", - "x-example": "031BFREJC800001BVS5489BUVUR5FS5A-G" + "x-example": "37547" }, { - "description": "Matchday date as YYYY-MM-DD; omit for the current matchday; cannot be combined with matchday", + "description": "1-based page; defaults to 1", "in": "query", - "name": "date", - "type": "string", - "x-example": "2026-10-03" + "minimum": 1, + "name": "page", + "type": "integer" }, { - "description": "Matchday number, 1 to the competition's matchday count (34 for the Bundesliga); cannot be combined with date", + "description": "Page size, 1 to 100; defaults to 10", "in": "query", - "name": "matchday", - "type": "integer", - "x-example": 3 + "maximum": 100, + "minimum": 1, + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -371366,7 +444937,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.matchdayResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/gosugamers.TeamResultsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -371375,8 +444958,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -371393,30 +444976,46 @@ "ApiKeyAuth": [] } ], - "summary": "Get FUSSBALL.DE matches of a competition matchday", + "summary": "GosuGamers team match history", "tags": [ - "FUSSBALL.DE" + "GosuGamers" ] } }, - "/fussballde/national-top-scorers": { + "/gosugamers/tournament": { "get": { "consumes": [ "application/json" ], - "description": "Returns the top 10 scorers of every league level across Germany for men or women (the site's Torjägerkanone), with goals, matches played and club. Only championship matches count and the upstream refreshes the ranking once a day; the response `note` carries its last-update time. Adult teams only.", - "operationId": "fussballde-national-top-scorers", + "description": "Returns one GosuGamers tournament: name, status, start time, description, LAN flag, venue and country, prize pool in USD when listed, sponsors, stages with their status and the next upcoming matches. A tournament that belongs to a different game than `game` returns not found.", + "operationId": "gosugamers-tournament", "parameters": [ { - "description": "Ranking to return, default men", + "description": "Game section; one of dota2, counterstrike, lol, valorant, mobile-legends, pubg-mobile, wild-rift, free-fire, battlegrounds-mobile-india", "enum": [ - "men", - "women" + "dota2", + "counterstrike", + "lol", + "valorant", + "mobile-legends", + "pubg-mobile", + "wild-rift", + "free-fire", + "battlegrounds-mobile-india" ], "in": "query", - "name": "team_type", + "name": "game", + "required": true, "type": "string", - "x-example": "men" + "x-example": "dota2" + }, + { + "description": "Numeric tournament id from gosugamers-matches or gosugamers-results (tournament.id)", + "in": "query", + "name": "tournament_id", + "required": true, + "type": "string", + "x-example": "63208" } ], "produces": [ @@ -371426,7 +445025,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.nationalTopScorersResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/gosugamers.TournamentDetail" + } + }, + "type": "object" + } + ] } }, "400": { @@ -371441,6 +445052,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -371453,80 +445070,46 @@ "ApiKeyAuth": [] } ], - "summary": "Get the nationwide FUSSBALL.DE top scorers by league level", + "summary": "GosuGamers esports tournament detail", "tags": [ - "FUSSBALL.DE" + "GosuGamers" ] } }, - "/fussballde/news": { + "/gosugamers/tournament-participants": { "get": { "consumes": [ "application/json" ], - "description": "Returns news teasers of one FUSSBALL.DE stream (all news, magazine, Regionalliga, federations, service, campaigns or help center) with title, category, publication date and time, and excerpt, paged with `limit` (1 to 50, default 10) and `offset`; `final` is true on the last page. Use `regional_league` or `help_category` to narrow the Regionalliga and help-center streams to one league or category. Use the article id with `fussballde-news-article` for the full text.", - "operationId": "fussballde-news", + "description": "Returns the teams entered in one GosuGamers tournament: id, name, slug, logo, GosuGamers ranking, country and team URL. Both `game` and `tournament_id` are required; the upstream does not narrow the list by game, and an unknown tournament id returns an empty list. Take the tournament id from gosugamers-tournaments, gosugamers-matches or gosugamers-results and use a team id with gosugamers-team or gosugamers-team-results.", + "operationId": "gosugamers-tournament-participants", "parameters": [ { - "description": "News stream, default all_news", - "enum": [ - "all_news", - "magazin", - "regionalliga", - "verbaende", - "service", - "aktionen", - "helpcenter" - ], - "in": "query", - "name": "stream", - "type": "string", - "x-example": "all_news" - }, - { - "description": "Only Regionalliga news of one league (implies stream regionalliga)", + "description": "Game section of the tournament; one of dota2, counterstrike, lol, valorant, mobile-legends, pubg-mobile, wild-rift, free-fire, battlegrounds-mobile-india", "enum": [ - "nord", - "nordost", - "west", - "suedwest", - "bayern" + "dota2", + "counterstrike", + "lol", + "valorant", + "mobile-legends", + "pubg-mobile", + "wild-rift", + "free-fire", + "battlegrounds-mobile-india" ], "in": "query", - "name": "regional_league", + "name": "game", + "required": true, "type": "string", - "x-example": "nord" + "x-example": "valorant" }, { - "description": "Only help-center articles of one category (implies stream helpcenter)", - "enum": [ - "allgemeines", - "app", - "liveticker", - "mannschaftsseite", - "profile", - "registrierung", - "training_service", - "widgets" - ], + "description": "Numeric tournament id from gosugamers-tournaments, gosugamers-matches or gosugamers-results", "in": "query", - "name": "help_category", + "name": "tournament_id", + "required": true, "type": "string", - "x-example": "app" - }, - { - "description": "Articles per call, 1 to 50, default 10", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 - }, - { - "description": "Number of articles to skip, 0 to 5000, default 0", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "x-example": "63147" } ], "produces": [ @@ -371536,7 +445119,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.newsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/gosugamers.TournamentParticipantsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -371545,8 +445140,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -371563,27 +445158,27 @@ "ApiKeyAuth": [] } ], - "summary": "List FUSSBALL.DE news", + "summary": "GosuGamers tournament participants", "tags": [ - "FUSSBALL.DE" + "GosuGamers" ] } }, - "/fussballde/news-article": { + "/gosugamers/tournament-talents": { "get": { "consumes": [ "application/json" ], - "description": "Returns one FUSSBALL.DE news article: title, category, publication date and time, lead image and caption, and the body paragraphs as plain text.", - "operationId": "fussballde-news-article", + "description": "Returns the casters, hosts and analysts assigned to one GosuGamers tournament: id, name, game, roles, broadcast language code, country, image and profile URL. An unknown tournament id, or a tournament with no listed crew, returns an empty list. Take the tournament id from gosugamers-tournaments, gosugamers-matches or gosugamers-results.", + "operationId": "gosugamers-tournament-talents", "parameters": [ { - "description": "Numeric article id from fussballde-news", + "description": "Numeric tournament id from gosugamers-tournaments, gosugamers-matches or gosugamers-results", "in": "query", - "name": "article_id", + "name": "tournament_id", "required": true, "type": "string", - "x-example": "10067512" + "x-example": "63147" } ], "produces": [ @@ -371593,7 +445188,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.newsArticleResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/gosugamers.TournamentTalentsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -371602,8 +445209,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -371620,52 +445227,70 @@ "ApiKeyAuth": [] } ], - "summary": "Get a FUSSBALL.DE news article", + "summary": "GosuGamers tournament broadcast talents", "tags": [ - "FUSSBALL.DE" + "GosuGamers" ] } }, - "/fussballde/news-search": { + "/gosugamers/tournaments": { "get": { "consumes": [ "application/json" ], - "description": "Searches FUSSBALL.DE editorial news (`news`) or the Profi-Newsflash (`pro_news`) by keyword and returns teasers with title, category, date and excerpt. The first page (offset 0) also reports the total hit count; page with `limit` (1 to 50) and `offset`. No hits is a valid empty result.", - "operationId": "fussballde-news-search", + "description": "Lists GosuGamers esports tournaments, optionally for one `game` and one `state` (`all`, `ongoing`, `upcoming`, `past`), with an optional name prefix `q`: id, name, game, status, start time, prize pool with currency and USD value, participant count, featured flag and the tournament URL. Paged with `page` and `page_size` (up to 100); `total_rows` reports the size of the filtered list. Use gosugamers-tournament with a returned id and game for stages and upcoming matches.", + "operationId": "gosugamers-tournaments", "parameters": [ { - "description": "Search text, 2 to 80 characters", + "description": "Game section; one of dota2, counterstrike, lol, valorant, mobile-legends, pubg-mobile, wild-rift, free-fire, battlegrounds-mobile-india; omit for all games", + "enum": [ + "dota2", + "counterstrike", + "lol", + "valorant", + "mobile-legends", + "pubg-mobile", + "wild-rift", + "free-fire", + "battlegrounds-mobile-india" + ], "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "Dortmund" + "name": "game", + "type": "string" }, { - "description": "News channel, default news", + "description": "Tournament state; one of all, ongoing, upcoming, past; defaults to all", "enum": [ - "news", - "pro_news" + "all", + "ongoing", + "upcoming", + "past" ], "in": "query", - "name": "channel", + "name": "state", + "type": "string" + }, + { + "description": "Tournament name prefix, up to 100 characters", + "in": "query", + "name": "q", "type": "string", - "x-example": "news" + "x-example": "VCT" }, { - "description": "Articles per call, 1 to 50, default 10", + "description": "1-based page; defaults to 1", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "minimum": 1, + "name": "page", + "type": "integer" }, { - "description": "Number of hits to skip, 0 to 10000, default 0", + "description": "Page size, 1 to 100; defaults to 10", "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "maximum": 100, + "minimum": 1, + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -371675,7 +445300,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.newsSearchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/gosugamers.TournamentsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -371684,8 +445321,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -371702,27 +445339,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search FUSSBALL.DE news", + "summary": "GosuGamers esports tournament directory", "tags": [ - "FUSSBALL.DE" + "GosuGamers" ] } }, - "/fussballde/player": { + "/gq/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a player's public profile: name, team, team type, birth date and, for registered players (`profile_type` full), the current-season statistics such as appearances, minutes played, goals, goals against and cards. Players without a registered profile (`profile_type` basic) only have name, team and team type. Player ids come from `fussballde-player-search`, scorer lists, squads and amateur statistics.", - "operationId": "fussballde-player", + "description": "Returns public GQ article metadata and body paragraphs from a canonical story URL. A story GQ marks as subscriber-only returns a 403 permission error instead of partial text.", + "operationId": "gq-article", "parameters": [ { - "description": "Player id from fussballde-player-search, fussballde-top-scorers, fussballde-team-squad or fussballde-amateur-stats", + "description": "Canonical GQ story URL", "in": "query", - "name": "player_id", + "name": "url", "required": true, "type": "string", - "x-example": "01MH0AKR7C000007VV0AG13EVSFDFGE6" + "x-example": "https://www.gq.com/story/how-to-unclog-your-ear" } ], "produces": [ @@ -371732,7 +445366,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.playerResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -371741,6 +445375,12 @@ "$ref": "#/definitions/app.Response" } }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "404": { "description": "Not Found", "schema": { @@ -371759,41 +445399,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get a FUSSBALL.DE player profile", + "summary": "Get GQ article content", "tags": [ - "FUSSBALL.DE" + "GQ" ] } }, - "/fussballde/player-matches": { + "/gq/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a registered player's matches for one season and team: date, teams, result and per match the goals, the minute they were substituted in or out, and minutes played. Also lists the player's teams and competitions for the season so another team can be selected with `team_id`. Basic profiles without registration have no match data.", - "operationId": "fussballde-player-matches", + "description": "Returns a GQ contributor profile, identified by `slug` (such as `tom-ward`) or by a canonical `url`; provide exactly one. The response has the name, job title, biography, headshot, social links and one page of recent articles. `page` runs from 1 to 100 (default 1) and `has_next_page` signals more. Unknown contributors return 404.", + "operationId": "gq-author", "parameters": [ { - "description": "Player id of a full profile, see fussballde-player", + "description": "Contributor slug, e.g. tom-ward; provide slug or url", "in": "query", - "name": "player_id", - "required": true, + "name": "slug", "type": "string", - "x-example": "01MH0AKR7C000007VV0AG13EVSFDFGE6" + "x-example": "tom-ward" }, { - "description": "Four-digit season code, default current season", + "description": "Canonical www.gq.com/contributor/ URL; alternative to slug", "in": "query", - "name": "season", + "name": "url", "type": "string", - "x-example": "2627" + "x-example": "https://www.gq.com/contributor/tom-ward" }, { - "description": "Team id from the teams list of a previous response; default the player's main team", + "default": 1, + "description": "1-based page of the contributor's article list (1-100)", "in": "query", - "name": "team_id", - "type": "string", - "x-example": "030POM2JO0000000VS5489BSVSO3A7B3" + "name": "page", + "type": "integer" } ], "produces": [ @@ -371803,7 +445439,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.playerMatchesResponseDoc" + "$ref": "#/definitions/publicnews.gqAuthorResponseDoc" } }, "400": { @@ -371830,54 +445466,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get a FUSSBALL.DE player's match-by-match record", + "summary": "Get a GQ contributor profile", "tags": [ - "FUSSBALL.DE" + "GQ" ] } }, - "/fussballde/player-search": { + "/gq/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches players registered on FUSSBALL.DE by first and/or last name, optionally narrowed by postcode or place, and returns each player's id, name, birth date, team and team type. The first page reports the `total` hit count; page with `limit` (1 to 100, default 20) and `offset`, and `final` marks the last page. At least one of `first_name` and `last_name` is required. No match is a valid empty result.", - "operationId": "fussballde-player-search", + "description": "Returns the story cards currently on one GQ section page. `section` is required and takes one of 11 slugs such as `style`, `grooming`, `watches` or `gqsports`. Each item has its `title`, `url`, `summary`, `author`, `image_url` and a `published_at` date (`YYYY-MM-DD`). Only `/story/` articles are listed, and fields GQ does not show are omitted.", + "operationId": "gq-headlines", "parameters": [ { - "description": "First name; first_name or last_name is required", - "in": "query", - "name": "first_name", - "type": "string", - "x-example": "Niclas" - }, - { - "description": "Last name; first_name or last_name is required", - "in": "query", - "name": "last_name", - "type": "string", - "x-example": "Füllkrug" - }, - { - "description": "Postcode or place name to narrow the result; cannot be used alone", + "description": "GQ section slug", + "enum": [ + "culture", + "entertainment", + "fitness", + "gq-hype", + "gq-recommends", + "gqsports", + "grooming", + "politics", + "style", + "watches", + "wellness" + ], "in": "query", - "name": "place", + "name": "section", + "required": true, "type": "string", - "x-example": "44139" - }, - { - "description": "Players per call, 1 to 100, default 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 - }, - { - "description": "Number of players to skip, 0 to 2000, default 0", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "x-example": "culture" } ], "produces": [ @@ -371887,7 +445506,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.playerSearchResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -371896,8 +445515,40 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get GQ section headlines", + "tags": [ + "GQ" + ] + } + }, + "/gq/news": { + "get": { + "description": "Returns GQ's current top stories, with no parameters. Each item has its `title`, `url`, `summary`, `author`, `image_url` and `published_at` as an RFC 3339 UTC timestamp. Only `/story/` articles are included; galleries and other content types are skipped.", + "operationId": "gq-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -371914,29 +445565,45 @@ "ApiKeyAuth": [] } ], - "summary": "Search FUSSBALL.DE players by name", + "summary": "Get GQ top stories", "tags": [ - "FUSSBALL.DE" + "GQ" ] } }, - "/fussballde/position-history": { + "/gq/sections": { "get": { - "consumes": [ + "description": "Lists the 11 GQ sections accepted by `gq-headlines`: `culture`, `entertainment`, `fitness`, `gq-hype`, `gq-recommends`, `gqsports`, `grooming`, `politics`, `style`, `watches` and `wellness`. Each entry has a `slug`, display `name` and section `url`. Pages that list no stories are not included.", + "operationId": "gq-sections", + "produces": [ "application/json" ], - "description": "Returns every team's table position after each played matchday of a competition (the site's Fieberkurve), as one ordered list of positions per team. Position 1 is the leader; the list index is the matchday.", - "operationId": "fussballde-position-history", - "parameters": [ + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Competition id from fussballde-competitions", - "in": "query", - "name": "competition_id", - "required": true, - "type": "string", - "x-example": "031BFREJC800001BVS5489BUVUR5FS5A-G" + "ApiKeyAuth": [] } ], + "summary": "Get GQ sections", + "tags": [ + "GQ" + ] + } + }, + "/grailed/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Grailed's full facet taxonomy for the enum-like parameters grailed-search/grailed-sold-listings accept: department, category, category_path (a more granular subcategory slug), condition, color, and size, each with its own live listing count. department and condition are exhaustive closed sets (2 and 5 values respectively); category/category_path/color/size are the full, exhaustive value space as of the request. Designer is NOT included here (7,363 values, far too large for a facet-count response) -- see grailed-designers for that discovery endpoint.", + "operationId": "grailed-categories", "produces": [ "application/json" ], @@ -371944,17 +445611,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.positionHistoryResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/grailed.categoriesResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -371971,27 +445632,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get the FUSSBALL.DE fever curve of a competition", + "summary": "List Grailed's facet taxonomy", "tags": [ - "FUSSBALL.DE" + "Grailed" ] } }, - "/fussballde/postal-codes": { + "/grailed/collection": { "get": { "consumes": [ "application/json" ], - "description": "Returns the German postcodes (with city and district) that FUSSBALL.DE's own location search suggests for a place name or postcode prefix. Use it to turn a place such as Dortmund into the five-digit `postal_code` that `fussballde-match-calendar` requires. No match is a valid empty list.", - "operationId": "fussballde-postal-codes", + "description": "Returns one Grailed curated homepage collection's full listing set. id is the collection's numeric id, from grailed-collections' own collections[].id field. An unknown id returns a typed not-found error.", + "operationId": "grailed-collection", "parameters": [ { - "description": "Place name or postcode prefix, 2 to 40 characters", + "description": "Collection id, from grailed-collections' own collections[].id field", "in": "query", - "name": "q", + "name": "id", "required": true, - "type": "string", - "x-example": "Dortmund" + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -372001,7 +445662,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.postalCodesResponseDoc" + "$ref": "#/definitions/grailed.collectionResponseDoc" } }, "400": { @@ -372016,6 +445677,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -372028,50 +445695,19 @@ "ApiKeyAuth": [] } ], - "summary": "Look up German postcodes by place name", + "summary": "Get one Grailed curated collection's listings", "tags": [ - "FUSSBALL.DE" + "Grailed" ] } }, - "/fussballde/table": { + "/grailed/collections": { "get": { "consumes": [ "application/json" ], - "description": "Returns a competition's standings in one view: `overall`, `home_away` (home and away tables), `rounds` (first and second half-season tables), `fairness` (fair-play table) or `cross` (cross table of results between every pair of teams). Set `matchday` to get the standings as they were after that matchday (not available for `fairness`). Rows carry position, team, played, won, drawn, lost, goals and points where the view has them, plus the raw cells.", - "operationId": "fussballde-table", - "parameters": [ - { - "description": "Competition id from fussballde-competitions", - "in": "query", - "name": "competition_id", - "required": true, - "type": "string", - "x-example": "031BFREJC800001BVS5489BUVUR5FS5A-G" - }, - { - "description": "Standings view, default overall", - "enum": [ - "overall", - "home_away", - "rounds", - "fairness", - "cross" - ], - "in": "query", - "name": "view", - "type": "string", - "x-example": "overall" - }, - { - "description": "Return the standings after this matchday, 1 to the competition's matchday count; not available for the fairness view", - "in": "query", - "name": "matchday", - "type": "integer", - "x-example": 3 - } - ], + "description": "Returns Grailed's own curated homepage merchandising collections (e.g. \"Trending: Apparel\", \"Dark Luxury\", \"Chromed Out\") -- editorial/trending shelves distinct from a plain search or facet browse. Each collection's numeric id is the value grailed-collection's own id parameter accepts.", + "operationId": "grailed-collections", "produces": [ "application/json" ], @@ -372079,17 +445715,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.tableResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/grailed.collectionsResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -372106,27 +445736,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get a FUSSBALL.DE competition standings table", + "summary": "List Grailed's curated homepage collections", "tags": [ - "FUSSBALL.DE" + "Grailed" ] } }, - "/fussballde/team": { + "/grailed/designers": { "get": { "consumes": [ "application/json" ], - "description": "Returns one team page: name, team type, federation, standing summary (competition, table position, points, goal ratio), current competitions, home venues, the club profile (founding year, address, contact) and the team's season-by-season history with final placings and the highest league reached. Use `fussballde-team-matches` and `fussballde-team-squad` for fixtures and players.", - "operationId": "fussballde-team", + "description": "Returns a page of Grailed's full designer/brand taxonomy (7,363 designers as of 2026-09-09) -- the value space grailed-search/grailed-sold-listings' own designer parameter accepts (by name). q is an optional free-text filter (typo-tolerant, e.g. a partial name for typeahead-style lookup); an empty q lists the full taxonomy ordered by Grailed's own default ranking (most-listed designers first).", + "operationId": "grailed-designers", "parameters": [ { - "description": "Team id from fussballde-matchday, fussballde-table or fussballde-club", + "description": "Free-text designer name filter", "in": "query", - "name": "team_id", - "required": true, + "name": "q", "type": "string", - "x-example": "011MI8V6UC000000VTVG0001VTR8C1K7" + "x-example": "gucci" + }, + { + "description": "One-based page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Results per page, defaults to 24, maximum 100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 24 } ], "produces": [ @@ -372136,7 +445779,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.teamResponseDoc" + "$ref": "#/definitions/grailed.designersResponseDoc" } }, "400": { @@ -372145,8 +445788,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -372163,88 +445806,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a FUSSBALL.DE team", + "summary": "List or search Grailed's designer/brand taxonomy", "tags": [ - "FUSSBALL.DE" + "Grailed" ] } }, - "/fussballde/team-matches": { + "/grailed/listing": { "get": { "consumes": [ "application/json" ], - "description": "Returns a team's matches across its competitions. `all` (default) is the match plan for a date window (default the current season, 1 July to 30 June), optionally for one competition kind and paged with `limit` and `offset`; `next` is the next 10 fixtures, `previous` the latest 10 results, and `wins`, `draws` and `losses` the latest 10 finished matches with that outcome.", - "operationId": "fussballde-team-matches", + "description": "Returns full listing-detail data for one Grailed listing: description, every photo, measurements, designers, and the seller's full profile -- richer than the flattened summary grailed-search/grailed-sold-listings return per listing. id is the listing's numeric id, from a search or sold-listings result's own listings[].id field.", + "operationId": "grailed-listing", "parameters": [ { - "description": "Team id, see fussballde-team", + "description": "Listing id, from a search or sold-listings result's own listings[].id field", "in": "query", - "name": "team_id", + "name": "id", "required": true, - "type": "string", - "x-example": "011MI8V6UC000000VTVG0001VTR8C1K7" - }, - { - "description": "Match list kind, default all", - "enum": [ - "all", - "next", - "previous", - "wins", - "draws", - "losses" - ], - "in": "query", - "name": "kind", - "type": "string", - "x-example": "all" - }, - { - "description": "kind all only: first day as YYYY-MM-DD, default 1 July of the current season", - "in": "query", - "name": "date_from", - "type": "string", - "x-example": "2026-07-01" - }, - { - "description": "kind all only: last day as YYYY-MM-DD, default 30 June of the season", - "in": "query", - "name": "date_to", - "type": "string", - "x-example": "2027-06-30" - }, - { - "description": "kind all only: competition kind id; omit for all kinds", - "enum": [ - "1", - "8", - "3", - "7", - "6", - "11", - "2", - "21", - "9" - ], - "in": "query", - "name": "competition_kind", - "type": "string", - "x-example": "8" - }, - { - "description": "Matches (kind all only) per call, 1 to 50, default 10", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 - }, - { - "description": "Number of matches to skip, 0 to 1000, default 0", - "in": "query", - "name": "offset", "type": "integer", - "x-example": 0 + "x-example": 105379689 } ], "produces": [ @@ -372254,7 +445836,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.teamMatchesResponseDoc" + "$ref": "#/definitions/grailed.listingResponseDoc" } }, "400": { @@ -372269,6 +445851,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -372281,46 +445869,124 @@ "ApiKeyAuth": [] } ], - "summary": "Get FUSSBALL.DE fixtures and results of a team", + "summary": "Get a Grailed listing", "tags": [ - "FUSSBALL.DE" + "Grailed" ] } }, - "/fussballde/team-squad": { + "/grailed/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a team's players for a season: the `squad` (appearances, minutes, goals), `arrivals` or `departures` with the columns the site publishes for each. Player names come in the site's `Surname, Forename` order.", - "operationId": "fussballde-team-squad", + "description": "Searches or browses Grailed's (grailed.com) peer-to-peer resale marketplace for currently-active listings. q, designer, department, category, size, color, condition, min_price, and max_price are all optional and combine as an AND -- a free-text q can be combined with any of the facet filters in the same request, or every field can be omitted to browse the full active catalog by Grailed's own \"heat\" relevance ranking. designer accepts one of the values grailed-designers' own designers[].name field returns; department, category, size, and color accept values from grailed-categories' own departments[].value/categories[].value/sizes[].value/colors[].value fields. condition and sort are fixed, closed enums (listed below). Keyword search uses typo-tolerant relevance ranking, not a guaranteed exact match. A query with genuinely zero matches returns a well-formed empty result rather than an error.", + "operationId": "grailed-search", "parameters": [ { - "description": "Team id, see fussballde-team", + "description": "Free-text search query", "in": "query", - "name": "team_id", - "required": true, + "name": "q", "type": "string", - "x-example": "011MI8V6UC000000VTVG0001VTR8C1K7" + "x-example": "gucci" }, { - "description": "Four-digit season code, default current season", + "description": "Designer/brand name filter, from grailed-designers' own designers[].name field", "in": "query", - "name": "season", + "name": "designer", "type": "string", - "x-example": "2627" + "x-example": "Gucci" }, { - "description": "Player list kind, default squad", + "description": "Department filter", "enum": [ - "squad", - "arrivals", - "departures" + "menswear", + "womenswear" ], "in": "query", - "name": "kind", + "name": "department", "type": "string", - "x-example": "squad" + "x-example": "menswear" + }, + { + "description": "Category facet filter, from grailed-categories' own categories[].value field", + "in": "query", + "name": "category", + "type": "string", + "x-example": "tops" + }, + { + "description": "Size facet filter, from grailed-categories' own sizes[].value field", + "in": "query", + "name": "size", + "type": "string", + "x-example": "m" + }, + { + "description": "Color facet filter, from grailed-categories' own colors[].value field", + "in": "query", + "name": "color", + "type": "string", + "x-example": "black" + }, + { + "description": "Condition filter", + "enum": [ + "is_new", + "is_gently_used", + "is_used", + "is_worn", + "is_not_specified" + ], + "in": "query", + "name": "condition", + "type": "string", + "x-example": "is_gently_used" + }, + { + "description": "Minimum price (inclusive), in USD", + "in": "query", + "name": "min_price", + "type": "number", + "x-example": 50 + }, + { + "description": "Maximum price (inclusive), in USD", + "in": "query", + "name": "max_price", + "type": "number", + "x-example": 500 + }, + { + "description": "Sort order, defaults to heat", + "enum": [ + "heat", + "heat_recency", + "followers", + "newest", + "price_asc", + "price_desc", + "recently_updated", + "quality" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "heat" + }, + { + "description": "One-based page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Results per page, defaults to 24, maximum 100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 24 } ], "produces": [ @@ -372330,7 +445996,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.teamSquadResponseDoc" + "$ref": "#/definitions/grailed.searchResponseDoc" } }, "400": { @@ -372339,8 +446005,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -372357,41 +446023,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a FUSSBALL.DE team squad", + "summary": "Search or browse Grailed active listings", "tags": [ - "FUSSBALL.DE" + "Grailed" ] } }, - "/fussballde/top-scorers": { + "/grailed/seller": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of a competition's top-scorer list with position, player, team and goals; page through it with `limit` (1 to 100, default 30) and `offset`. Tied scorers share a position. A competition without recorded scorers returns an empty list; cups and tournaments have no scorer list at all and return 404.", - "operationId": "fussballde-top-scorers", + "description": "Returns a Grailed seller's public profile plus a page of their current active listings (Grailed's own \"shop\" view of a seller). username is the seller's Grailed username, from a listing's own seller.username field or grailed.com/{username}. Listings only ever contains that seller's ACTIVE listings; use grailed-sold-listings with a designer/query filter for a broader sales-history lookup, since sold listings are not filterable by seller through this endpoint. An unknown username returns a typed not-found error.", + "operationId": "grailed-seller", "parameters": [ { - "description": "Competition id from fussballde-competitions", + "description": "Grailed username", "in": "query", - "name": "competition_id", + "name": "username", "required": true, "type": "string", - "x-example": "031BFREJC800001BVS5489BUVUR5FS5A-G" + "x-example": "woodlandstepps" }, { - "description": "Scorers per call, 1 to 100, default 30", + "description": "One-based page number for the seller's listings, defaults to 1", "in": "query", - "name": "limit", + "name": "page", "type": "integer", - "x-example": 30 + "x-example": 1 }, { - "description": "Number of scorers to skip, 0 to 1000, default 0", + "description": "Listings per page, defaults to 24, maximum 100", "in": "query", - "name": "offset", + "name": "limit", "type": "integer", - "x-example": 0 + "x-example": 24 } ], "produces": [ @@ -372401,7 +446067,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/fussballde.topScorersResponseDoc" + "$ref": "#/definitions/grailed.sellerResponseDoc" } }, "400": { @@ -372416,6 +446082,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -372428,24 +446100,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get the FUSSBALL.DE top scorers of a competition", + "summary": "Get a Grailed seller's profile and active listings", "tags": [ - "FUSSBALL.DE" + "Grailed" ] } }, - "/gamerant/article": { + "/grailed/seller-reviews": { "get": { - "description": "Returns one Game Rant article by its `https://gamerant.com//` `url`. The response has the title, description, publish and update times, section, authors, lead image and body `paragraphs`. Section hubs, video pages and author pages are rejected as invalid parameters; `paywalled` is set only if the page declares the article not free.", - "operationId": "gamerant-article", + "consumes": [ + "application/json" + ], + "description": "Returns a page of a Grailed seller's individual buyer feedback entries (rating, note, feedback tags, and the listing each review was left for) -- reputation detail grailed-seller does not carry (grailed-seller only exposes the aggregate rating_average/rating_count). username is the seller's Grailed username, from a listing's own seller.username field or grailed.com/{username}. An unknown username returns a typed not-found error.", + "operationId": "grailed-seller-reviews", "parameters": [ { - "description": "Canonical Game Rant article URL", + "description": "Grailed username", "in": "query", - "name": "url", + "name": "username", "required": true, "type": "string", - "x-example": "https://gamerant.com/xbox-console-update-patch-notes-september-2026/" + "x-example": "woodlandstepps" + }, + { + "description": "One-based page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -372455,7 +446137,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/grailed.sellerReviewsResponseDoc" } }, "400": { @@ -372488,24 +446170,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get Game Rant article content", + "summary": "Get a Grailed seller's buyer feedback", "tags": [ - "Game Rant" + "Grailed" ] } }, - "/gamerant/author": { + "/grailed/similar-listings": { "get": { - "description": "Returns a Game Rant author profile for a `url` of the form `https://gamerant.com/author//`. The response has the name, title, image, biography, `social_links` (type and URL) and about 20 latest articles. Paginated author URLs are rejected, so older articles are not available.", - "operationId": "gamerant-author", + "consumes": [ + "application/json" + ], + "description": "Returns the listings Grailed's own product page recommends as \"similar\" to one listing -- the same related-items shelf shown on grailed.com's own listing-detail page. id is the listing's numeric id, from a search, sold-listings, or collection result's own id field. An id for a listing that does not exist (deleted, sold and removed, or never valid) returns a typed not-found error.", + "operationId": "grailed-similar-listings", "parameters": [ { - "description": "Canonical Game Rant author URL", + "description": "Listing id to find similar listings for", "in": "query", - "name": "url", + "name": "id", "required": true, - "type": "string", - "x-example": "https://gamerant.com/author/dominik-bosnjak/" + "type": "integer", + "x-example": 105379689 + }, + { + "description": "Results to return, defaults to 30, maximum 99", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 30 } ], "produces": [ @@ -372515,7 +446207,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.gamerantAuthorResponseDoc" + "$ref": "#/definitions/grailed.similarListingsResponseDoc" } }, "400": { @@ -372530,216 +446222,137 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get a Game Rant author profile", - "tags": [ - "Game Rant" - ] - } - }, - "/gamerant/headlines": { - "get": { - "description": "Returns fresh headlines from one public Game Rant RSS section. Items from video sections have type video and are not readable through the article endpoint.", - "operationId": "gamerant-headlines", - "parameters": [ - { - "description": "Game Rant RSS section slug", - "enum": [ - "games", - "gaming", - "pc-news", - "steam-news", - "core-news", - "xbox-series-xs-news", - "xbox-news", - "xbox-one-news", - "platforms", - "lists", - "strategy-guide", - "anime", - "anime-news", - "nintendo-news", - "legend-of-zelda-news", - "originals", - "features", - "gaming-features", - "exclusives", - "ps5-news", - "bethesda-news", - "playstation-news", - "pokemon-news", - "animal-crossing-news", - "activision-news", - "call-of-duty-news", - "grand-theft-auto-news", - "epic-games-store-news", - "nintendo-switch-news", - "fortnite-news", - "one-piece-news", - "anime-editorial", - "diablo-news", - "pokemon-go-news", - "mobile-news", - "ios-news", - "android-news", - "tabletop", - "dc-news", - "mortal-kombat-news", - "latest-videos", - "game-rant-series", - "gamerant-gaming-videos-original", - "videos", - "disney-news", - "movies-tv", - "movies-tv-news", - "movies-tv-lists", - "movies-tv-features", - "giveaways-contests", - "stardew-valley-articles", - "grand-theft-auto-5-news", - "cd-projekt-red-news", - "halo-news", - "persona-news", - "death-stranding-news", - "dragon-ball-z-news", - "genshin-impact-guides", - "lord-of-the-rings-news", - "world-of-warcraft-news", - "streaming", - "the-witcher-franchise-news", - "final-fantasy-news", - "resident-evil-news", - "final-fantasy-7-news", - "ps4-news", - "call-of-duty-warzone-news", - "the-elder-scrolls-news", - "destiny-news", - "fallout-news", - "red-dead-redemption-news", - "game-reviews", - "final-fantasy-14-news", - "the-last-of-us-news", - "nintendo-3ds-news", - "fallout-76-news", - "marvel-news", - "featured", - "editorial", - "ps3-news", - "xbox-360-news", - "video-interviews", - "assassins-creed-news", - "pause-for-thought", - "star-wars-news", - "pokemon-scarlet-violet-news", - "theme-parks", - "bloodborne-news", - "review-roundup", - "apex-legends-news", - "dungeons-and-dragons-news", - "kingdom-hearts-franchise-news", - "dragon-age-news", - "overwatch-news", - "overwatch-2-news", - "pokemon-legends-z-a-news", - "pokemon-videos", - "minecraft-news", - "game-previews", - "elden-ring-news", - "amazon-news", - "doom-news", - "no-mans-sky-news", - "metroid-franchise-news", - "league-of-legends-news", - "borderlands-news", - "super-smash-bros-news", - "valheim-news", - "spider-man-news", - "wii-news", - "pokemon-go-guides", - "the-witcher-3-news", - "red-dead-redemption-2-news", - "battlefield-franchise-news", - "gta-online-news", - "cod-modern-warfare-news", - "video-lists", - "playstation-videos", - "xbox-videos", - "dark-souls-news", - "video-originals", - "genshin-impact-news", - "elden-ring-videos", - "mass-effect-news", - "rainbow-six-siege-news", - "rainbow-six-franchise-news", - "god-of-war-news", - "persona-5-news", - "the-last-of-us-2-news", - "explainer", - "stardew-valley-guides", - "halo-infinite-news", - "hardware-reviews", - "movie-review", - "dead-by-daylight-news", - "far-cry-franchise-news", - "zelda-breath-of-the-wild-news", - "pokemon-go-reading", - "365-days-later", - "dead-space-news", - "acnh-news", - "game-rant-advance", - "nintendo-switch-reviews", - "pokemon-scarlet-and-violet-features", - "red-dead-online-news", - "game-deals", - "steam-videos", - "psn-news", - "complete-guides-walkthroughs", - "horizon-forbidden-west-news", - "tv-review", - "game-trailers", - "assassins-creed-videos", - "wii-u-news", - "pc-videos", - "pubg-news", - "buyers-guides", - "cyberpunk-videos", - "baldurs-gate-3-videos", - "pokemon-legends-z-a-guides", - "rantable", - "pokemon-scarlet-and-violet-guides", - "fallout-videos", - "fallout-4-videos", - "game-rant-mailbag", - "video-news", - "star-wars-outlaws-videos", - "hype-train-videos", - "borderlands-3-news", - "bite-size-lore", - "open-world-videos", - "gamers-said", - "red-dead-redemption-2-videos", - "stardew-valley-videos", - "have-you-heard-of", - "creators-on-game-rant", - "movies-tv-trailers", - "indie-videos" + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get listings similar to a Grailed listing", + "tags": [ + "Grailed" + ] + } + }, + "/grailed/sold-listings": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches Grailed's SOLD-listing index -- a separate dataset from active listings, carrying each item's final sale price and sale date. Same filter shape as grailed-search (q, designer, department, category, size, color, condition), but min_price/max_price filter the SOLD price, not the original asking price. Useful for sale-price-history/comparable-sales lookups (e.g. \"what did this designer/category actually sell for recently\"). A query with genuinely zero matches returns a well-formed empty result rather than an error.", + "operationId": "grailed-sold-listings", + "parameters": [ + { + "description": "Free-text search query", + "in": "query", + "name": "q", + "type": "string", + "x-example": "gucci" + }, + { + "description": "Designer/brand name filter, from grailed-designers' own designers[].name field", + "in": "query", + "name": "designer", + "type": "string", + "x-example": "Gucci" + }, + { + "description": "Department filter", + "enum": [ + "menswear", + "womenswear" ], "in": "query", - "name": "section", - "required": true, + "name": "department", "type": "string", - "x-example": "games" + "x-example": "menswear" + }, + { + "description": "Category facet filter, from grailed-categories' own categories[].value field", + "in": "query", + "name": "category", + "type": "string", + "x-example": "footwear" + }, + { + "description": "Size facet filter, from grailed-categories' own sizes[].value field", + "in": "query", + "name": "size", + "type": "string", + "x-example": "9" + }, + { + "description": "Color facet filter, from grailed-categories' own colors[].value field", + "in": "query", + "name": "color", + "type": "string", + "x-example": "white" + }, + { + "description": "Condition filter", + "enum": [ + "is_new", + "is_gently_used", + "is_used", + "is_worn", + "is_not_specified" + ], + "in": "query", + "name": "condition", + "type": "string", + "x-example": "is_used" + }, + { + "description": "Minimum SOLD price (inclusive), in USD", + "in": "query", + "name": "min_price", + "type": "number", + "x-example": 100 + }, + { + "description": "Maximum SOLD price (inclusive), in USD", + "in": "query", + "name": "max_price", + "type": "number", + "x-example": 500 + }, + { + "description": "Sort order, defaults to recent", + "enum": [ + "recent", + "price_asc", + "price_desc" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "recent" + }, + { + "description": "One-based page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Results per page, defaults to 24, maximum 100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 24 } ], "produces": [ @@ -372749,7 +446362,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/grailed.soldListingsResponseDoc" } }, "400": { @@ -372776,16 +446389,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Game Rant section headlines", + "summary": "Search Grailed sold listings (sale price history)", "tags": [ - "Game Rant" + "Grailed" ] } }, - "/gamerant/news": { + "/grailed/suggest": { "get": { - "description": "Lists the latest Game Rant stories, about 10 items. Each item has its title, canonical URL, summary, publish time, author names (co-authors are joined with a comma) and lead image. Takes no parameters.", - "operationId": "gamerant-news", + "consumes": [ + "application/json" + ], + "description": "Returns Grailed's own search-box typeahead suggestions for a partial query -- a flat list of suggested search phrases with a popularity score and live active-listing match count, no listing data. Pass a suggestion straight through to grailed-search/grailed-sold-listings' own q parameter. A query with no genuine matches returns a well-formed empty result rather than an error.", + "operationId": "grailed-suggest", + "parameters": [ + { + "description": "Partial search query", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "guc" + } + ], "produces": [ "application/json" ], @@ -372793,7 +446419,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/grailed.suggestResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -372814,16 +446446,53 @@ "ApiKeyAuth": [] } ], - "summary": "Get Game Rant top stories", + "summary": "Grailed search-box typeahead suggestions", "tags": [ - "Game Rant" + "Grailed" ] } }, - "/gamerant/sections": { + "/greystar/articles": { "get": { - "description": "Lists the 178 Game Rant section slugs accepted by `gamerant-headlines`, covering platforms (`pc-news`, `ps5-news`, `nintendo-switch-news`), franchises (`fortnite-news`, `pokemon-news`, `fallout-news`), `anime` and `game-reviews`. Each entry has the `slug`, `name` and feed `url`.", - "operationId": "gamerant-sections", + "consumes": [ + "application/json" + ], + "description": "Lists Greystar's renter guides (applying and leasing, general guides, moving) and blog posts from its public sitemap, newest first. Entries carry the section, slug, URL and last-modified date; fetch /greystar/articles/{section}/{slug} for the title and body.", + "operationId": "greystar-articles", + "parameters": [ + { + "description": "Content section", + "enum": [ + "applying-and-leasing", + "general-guides", + "moving", + "blog" + ], + "in": "query", + "name": "section", + "type": "string" + }, + { + "description": "Text matched against the slug", + "in": "query", + "name": "query", + "type": "string" + }, + { + "default": 1, + "description": "1-based page", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "default": 50, + "description": "Entries per page, 1-100", + "in": "query", + "name": "per_page", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -372831,7 +446500,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/greystar.ContentList" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -372839,6 +446514,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -372846,24 +446527,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get Game Rant RSS sections", + "summary": "List Greystar renter guides and blog posts", "tags": [ - "Game Rant" + "Greystar" ] } }, - "/gamesradar/article": { + "/greystar/articles/{section}/{slug}": { "get": { - "description": "Returns one GamesRadar+ article by its canonical `gamesradar.com` `url`. The response has the title, description, publish and update times, section, authors, lead image and body `paragraphs`. Game and hardware review pages work too, taking the author from the page byline when no article-level author exists.", - "operationId": "gamesradar-article", + "consumes": [ + "application/json" + ], + "description": "Retrieves one Greystar renter guide or blog post: title, description, category, publish date (blog posts), lead image, and the body as ordered heading, paragraph, and list blocks. Get section and slug values from /greystar/articles.", + "operationId": "greystar-article", "parameters": [ { - "description": "Canonical GamesRadar+ article URL", - "in": "query", - "name": "url", + "description": "Content section", + "enum": [ + "applying-and-leasing", + "general-guides", + "moving", + "blog" + ], + "in": "path", + "name": "section", "required": true, "type": "string", - "x-example": "https://www.gamesradar.com/games/silent-hill/silent-hill-townfall-review/" + "x-example": "blog" + }, + { + "description": "Article slug from /greystar/articles", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "the-best-plants-for-apartment-living" } ], "produces": [ @@ -372873,7 +446571,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/greystar.Article" } }, "400": { @@ -372888,6 +446586,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -372900,37 +446604,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get GamesRadar+ article content", + "summary": "Get a Greystar renter guide or blog post", "tags": [ - "GamesRadar+" + "Greystar" ] } }, - "/gamesradar/author": { + "/greystar/location": { "get": { - "description": "Returns a GamesRadar+ author profile, found by `slug` (for example `rosalie-newcombe`) or by `url`; send exactly one. `page` (1-based, default 1) overrides any page in the URL. The response has the name, job title, biography, `social_links`, one page of articles, `page` and `has_next_page`.", - "operationId": "gamesradar-author", + "consumes": [ + "application/json" + ], + "description": "Retrieves one Greystar state, city, or neighborhood rental hub: title, description, editorial guide text as ordered blocks, child locations with summaries, communities listed on the page (id, name, address, and price text when shown), and FAQs. State, city, and neighborhood slugs must come from /greystar/locations; unknown values return 400.", + "operationId": "greystar-location", "parameters": [ { - "description": "Author slug, e.g. rosalie-newcombe", + "description": "State slug from /greystar/locations, e.g. tx", "in": "query", - "name": "slug", + "name": "state", + "required": true, "type": "string", - "x-example": "rosalie-newcombe" + "x-example": "tx" }, { - "description": "Canonical gamesradar.com/author/ URL, optionally with a /page/ segment; alternative to slug", + "description": "City slug from /greystar/locations", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.gamesradar.com/author/rosalie-newcombe/" + "name": "city", + "type": "string" }, { - "default": 1, - "description": "1-based page number; overrides any page number in url", + "description": "Neighborhood slug from /greystar/locations; requires city", "in": "query", - "name": "page", - "type": "integer" + "name": "neighborhood", + "type": "string" } ], "produces": [ @@ -372940,7 +446646,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.gamesradarAuthorResponseDoc" + "$ref": "#/definitions/greystar.LocationDetail" } }, "400": { @@ -372955,6 +446661,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -372967,47 +446679,56 @@ "ApiKeyAuth": [] } ], - "summary": "Get a GamesRadar+ author profile", + "summary": "Get a Greystar rental hub page", "tags": [ - "GamesRadar+" + "Greystar" ] } }, - "/gamesradar/headlines": { + "/greystar/locations": { "get": { - "description": "Returns the latest GamesRadar+ headlines for one section. `section` is required and takes one of 21 slugs such as `games`, `games-reviews`, `hardware-news`, `entertainment-tv`, `lego` or `dungeons-and-dragons`. Each item has its title, URL and `type`, plus publication time, author and image when the section page shows them.", - "operationId": "gamesradar-headlines", + "consumes": [ + "application/json" + ], + "description": "Lists Greystar's state, city, and neighborhood rental hub pages (the site's own location tree) with slugs and URLs. Use the slugs with /greystar/location for a hub's editorial content, child locations, listed communities, and FAQs.", + "operationId": "greystar-locations", "parameters": [ { - "description": "GamesRadar+ section slug", + "description": "Hub level", "enum": [ - "games", - "platforms", - "entertainment", - "comics", - "hardware", - "toys-collectibles", - "tabletop-gaming", - "buying-guides", - "lego", - "dungeons-and-dragons", - "videos", - "games-news", - "games-features", - "games-reviews", - "games-guides", - "hardware-news", - "hardware-reviews", - "hardware-features", - "entertainment-tv", - "entertainment-movies", - "entertainment-streaming" + "state", + "city", + "neighborhood" ], "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "games" + "name": "level", + "type": "string" + }, + { + "description": "State slug from this list, e.g. tx", + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "City slug from this list; requires state", + "in": "query", + "name": "city", + "type": "string" + }, + { + "default": 1, + "description": "1-based page", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "default": 100, + "description": "Entries per page, 1-200", + "in": "query", + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -373017,7 +446738,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/greystar.LocationList" } }, "400": { @@ -373026,6 +446747,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -373038,16 +446765,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get GamesRadar+ section headlines", + "summary": "List Greystar rental hub locations", "tags": [ - "GamesRadar+" + "Greystar" ] } }, - "/gamesradar/news": { + "/greystar/markets": { "get": { - "description": "Returns the current GamesRadar+ top stories. Each item has its title, URL, summary, publication time, author and image. Takes no parameters; use `gamesradar-headlines` for a single games, hardware or entertainment section.", - "operationId": "gamesradar-news", + "consumes": [ + "application/json" + ], + "description": "Returns every value accepted by the /greystar/search market_area, neighborhood, city, state, and country_code filters, each with the number of communities currently published. Derived from the full live community list, so it is the complete value space.", + "operationId": "greystar-markets", "produces": [ "application/json" ], @@ -373055,7 +446785,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/greystar.Markets" } }, "429": { @@ -373076,50 +446806,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get GamesRadar+ top stories", + "summary": "List Greystar markets, neighborhoods, cities, and states", "tags": [ - "GamesRadar+" + "Greystar" ] } }, - "/gamesradar/sections": { + "/greystar/newsroom": { "get": { - "description": "Lists the 21 GamesRadar+ sections accepted by `gamesradar-headlines`, from top-level hubs like `games`, `hardware` and `entertainment` to sub-sections such as `games-guides`, `hardware-reviews` and `entertainment-streaming`. Each entry has the `slug`, `name` and `url`.", - "operationId": "gamesradar-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get GamesRadar+ sections", - "tags": [ - "GamesRadar+" - ] - } - }, - "/gbnews/article": { - "get": { - "description": "Returns one GB News story by its `gbnews.com` `url` (news, opinion or sport; query strings are ignored). The response has the title, description, publish and update times, section label, authors, lead image and body `paragraphs`, without captions or widgets. `paywalled` is never set. Video, audio, author and hub pages return an error.", - "operationId": "gbnews-article", + "description": "Lists Greystar corporate newsroom releases and news articles from its public sitemap, newest first, with slug, URL and last-modified date. Fetch /greystar/newsroom/{slug} for the title, date, and body.", + "operationId": "greystar-newsroom", "parameters": [ { - "description": "Canonical GB News story URL", + "description": "Text matched against the slug", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.gbnews.com/news/north-yorkshire-gaza-barracks-fire-catterick-garrison" + "name": "query", + "type": "string" + }, + { + "default": 1, + "description": "1-based page", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "default": 50, + "description": "Entries per page, 1-100", + "in": "query", + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -373129,7 +446848,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/greystar.ContentList" } }, "400": { @@ -373138,8 +446857,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -373156,30 +446875,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get GB News article content", + "summary": "List Greystar newsroom releases", "tags": [ - "GB News" + "Greystar" ] } }, - "/gbnews/author": { + "/greystar/newsroom/{slug}": { "get": { - "description": "Returns one GB News author's public profile: name, role, biography, image, and their most recent stories (up to 24; older stories are not available).", - "operationId": "gbnews-author", + "consumes": [ + "application/json" + ], + "description": "Retrieves one Greystar newsroom release: title, type (for example Press Release), publish date, lead image, and body paragraphs. Older news stubs carry only a title and date, so the body can be empty. Get slugs from /greystar/newsroom.", + "operationId": "greystar-newsroom-article", "parameters": [ { - "description": "Author slug, e.g. peter-stevens-a", - "in": "query", + "description": "Newsroom slug from /greystar/newsroom", + "in": "path", "name": "slug", + "required": true, "type": "string", - "x-example": "peter-stevens-a" - }, - { - "description": "Canonical gbnews.com/authors/ URL; alternative to slug", - "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.gbnews.com/authors/peter-stevens-a" + "x-example": "kenzie-tolbert-rising-star" } ], "produces": [ @@ -373189,7 +446905,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.gbnewsAuthorResponseDoc" + "$ref": "#/definitions/greystar.Article" } }, "400": { @@ -373204,6 +446920,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -373216,416 +446938,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a GB News author profile", + "summary": "Get a Greystar newsroom release", "tags": [ - "GB News" + "Greystar" ] } }, - "/gbnews/headlines": { + "/greystar/properties/{id}": { "get": { - "description": "Returns the latest GB News headlines for one section or topic. `section` is required and takes a site path such as `news`, `news/uk/london`, `news/world/ukraine`, `news/us` or `news/migrant-crisis`; the accepted values are listed by `gbnews-sections`. Each item has its title, URL, summary, publication time, author and image.", - "operationId": "gbnews-headlines", + "consumes": [ + "application/json" + ], + "description": "Retrieves a public Greystar community profile by its numeric property id: location, description, amenities, office hours, walk scores, tours, floor plans, published fees, and currently available units with starting prices and available dates. Get ids from /greystar/search.", + "operationId": "greystar-property", "parameters": [ { - "description": "GB News section or topic path", - "enum": [ - "news", - "news/animals", - "news/army", - "news/benefit-fraudsters", - "news/best-of-britain", - "news/christianity", - "news/crime", - "news/defence", - "news/education", - "news/energy", - "news/environment", - "news/falkland-islands", - "news/fire", - "news/free-speech", - "news/fuel-crisis", - "news/gibraltar", - "news/grooming-gangs", - "news/lgbt", - "news/m25", - "news/madeleine-mccann", - "news/migrant-crisis", - "news/national-lottery", - "news/neighbour-rows", - "news/oil", - "news/police", - "news/protests", - "news/social-media", - "news/taxpayer-waste", - "news/tesco", - "news/trains", - "news/transport", - "news/uk", - "news/uk/birmingham", - "news/uk/bristol", - "news/uk/east-midlands", - "news/uk/east-of-england", - "news/uk/edinburgh", - "news/uk/england", - "news/uk/essex", - "news/uk/glasgow", - "news/uk/kent", - "news/uk/liverpool", - "news/uk/london", - "news/uk/manchester", - "news/uk/north-east", - "news/uk/north-west", - "news/uk/northern-ireland", - "news/uk/scotland", - "news/uk/south-east", - "news/uk/south-west", - "news/uk/wales", - "news/uk/west-midlands", - "news/uk/yorkshire", - "news/us", - "news/us/elon-musk", - "news/us/melania-trump", - "news/us/new-york", - "news/video-news", - "news/woke-madness", - "news/world", - "news/world/australia", - "news/world/canada", - "news/world/china", - "news/world/emmanuel-macron", - "news/world/europe", - "news/world/france", - "news/world/germany", - "news/world/greece", - "news/world/iran", - "news/world/ireland", - "news/world/isis", - "news/world/israel", - "news/world/italy", - "news/world/nato", - "news/world/poland", - "news/world/portugal", - "news/world/russia", - "news/world/spain", - "news/world/terrorism", - "news/world/ukraine", - "news/world/vladimir-putin", - "news/world/volodymyr-zelenskyy", - "news/world/war", - "editorial", - "politics", - "politics/boris-johnson", - "politics/brexit", - "politics/ed-davey", - "politics/elections", - "politics/green-party", - "politics/uk", - "politics/uk/andy-burnham", - "politics/uk/angela-rayner", - "politics/uk/conservative-party", - "politics/uk/government", - "politics/uk/home-office", - "politics/uk/house-of-commons", - "politics/uk/john-healey", - "politics/uk/keir-starmer", - "politics/uk/kemi-badenoch", - "politics/uk/labour-party", - "politics/uk/liberal-democrats", - "politics/uk/nicola-sturgeon", - "politics/uk/pmqs", - "politics/uk/rachel-reeves", - "politics/uk/reform-uk", - "politics/uk/robert-jenrick", - "politics/uk/sadiq-khan", - "politics/uk/snp", - "politics/uk/suella-braverman", - "politics/uk/tony-blair", - "politics/us", - "politics/us/donald-trump", - "politics/us/jd-vance", - "politics/us/joe-biden", - "politics/world", - "politics/world/eu", - "us", - "sport", - "sport/boxing", - "sport/boxing/anthony-joshua", - "sport/boxing/tyson-fury", - "sport/cricket", - "sport/cricket/england-cricket", - "sport/darts", - "sport/darts/luke-littler", - "sport/f1", - "sport/f1/christian-horner", - "sport/f1/george-russell", - "sport/f1/lando-norris", - "sport/f1/lewis-hamilton", - "sport/f1/max-verstappen", - "sport/f1/michael-schumacher", - "sport/football", - "sport/football/arsenal", - "sport/football/champions-league", - "sport/football/chelsea", - "sport/football/cristiano-ronaldo", - "sport/football/efl", - "sport/football/england-football", - "sport/football/liverpool", - "sport/football/manchester-city", - "sport/football/manchester-united", - "sport/football/premier-league", - "sport/football/scotland-football", - "sport/football/tottenham-hotspur", - "sport/football/world-cup", - "sport/golf", - "sport/golf/rory-mcilroy", - "sport/golf/tiger-woods", - "sport/horse-racing", - "sport/nfl", - "sport/olympics", - "sport/other-sport", - "sport/rugby", - "sport/snooker", - "sport/snooker/ronnie-osullivan", - "sport/tennis", - "sport/tennis/carlos-alcaraz", - "sport/tennis/emma-raducanu", - "sport/tennis/novak-djokovic", - "sport/us-sport", - "opinion", - "celebrity", - "celebrity/22-kids-and-counting", - "celebrity/bbc", - "celebrity/big-brother", - "celebrity/britains-got-talent", - "celebrity/brooklyn-beckham", - "celebrity/channel-4", - "celebrity/channel-5", - "celebrity/clarksons-farm", - "celebrity/coronation-street", - "celebrity/david-beckham", - "celebrity/disney", - "celebrity/dragons-den", - "celebrity/eurovision", - "celebrity/film", - "celebrity/gary-lineker", - "celebrity/gogglebox", - "celebrity/harry-potter", - "celebrity/im-a-celebrity-get-me-out-of-here", - "celebrity/itv", - "celebrity/james-bond", - "celebrity/jk-rowling", - "celebrity/katie-price", - "celebrity/music", - "celebrity/netflix", - "celebrity/ricky-gervais", - "celebrity/rod-stewart", - "celebrity/strictly-come-dancing", - "celebrity/the-grand-tour", - "celebrity/this-morning", - "celebrity/tom-jones", - "celebrity/tv", - "royal", - "royal/buckingham-palace", - "royal/camilla", - "royal/coronation", - "royal/duchess-of-edinburgh", - "royal/earl-charles-spencer", - "royal/edoardo-mapelli-mozzi", - "royal/invictus-games", - "royal/james-middleton", - "royal/kate-middleton", - "royal/king-charles", - "royal/king-frederik", - "royal/lady-louise", - "royal/lilibet", - "royal/meghan-markle", - "royal/mike-tindall", - "royal/pippa-middleton", - "royal/prince-albert", - "royal/prince-andrew", - "royal/prince-archie", - "royal/prince-edward", - "royal/prince-george", - "royal/prince-harry", - "royal/prince-louis", - "royal/prince-philip", - "royal/prince-william", - "royal/princess-anne", - "royal/princess-beatrice", - "royal/princess-charlene", - "royal/princess-charlotte", - "royal/princess-diana", - "royal/princess-eugenie", - "royal/queen-elizabeth", - "royal/sarah-ferguson", - "royal/zara-tindall", - "money", - "money/amazon", - "money/bank-branch-closures", - "money/bank-of-england", - "money/barclays", - "money/cost-of-living", - "money/coventry-building-society", - "money/dwp", - "money/economy", - "money/energy-bills", - "money/high-street", - "money/hmrc", - "money/inflation", - "money/inheritance-tax", - "money/interest-rates", - "money/isa", - "money/jobs", - "money/lloyds-bank", - "money/martin-lewis", - "money/mortgage", - "money/national-insurance", - "money/nationwide-building-society", - "money/net-zero", - "money/nsi", - "money/octopus-energy", - "money/pension-credit", - "money/pensions", - "money/pip", - "money/poundland", - "money/premium-bonds", - "money/royal-mail", - "money/savings", - "money/skipton-building-society", - "money/state-pension", - "money/store-closures", - "money/student-loans", - "money/tax", - "money/universal-credit", - "money/yorkshire-building-society", - "lifestyle", - "lifestyle/aldi", - "lifestyle/asda", - "lifestyle/beauty", - "lifestyle/cars", - "lifestyle/cars/bmw", - "lifestyle/cars/byd", - "lifestyle/cars/car-finance", - "lifestyle/cars/car-insurance", - "lifestyle/cars/car-tax", - "lifestyle/cars/chery", - "lifestyle/cars/classic-cars", - "lifestyle/cars/diesel", - "lifestyle/cars/driving-laws", - "lifestyle/cars/driving-licences", - "lifestyle/cars/dvla", - "lifestyle/cars/dvsa", - "lifestyle/cars/electric-bikes", - "lifestyle/cars/electric-vehicles", - "lifestyle/cars/ford", - "lifestyle/cars/highway-code", - "lifestyle/cars/hydrogen-vehicles", - "lifestyle/cars/hyundai", - "lifestyle/cars/jaguar", - "lifestyle/cars/kia", - "lifestyle/cars/land-rover", - "lifestyle/cars/mercedes", - "lifestyle/cars/mini", - "lifestyle/cars/mot", - "lifestyle/cars/nissan", - "lifestyle/cars/parking", - "lifestyle/cars/petrol", - "lifestyle/cars/renault", - "lifestyle/cars/roads", - "lifestyle/cars/self-driving", - "lifestyle/cars/tesla", - "lifestyle/cars/toyota", - "lifestyle/cars/ulez", - "lifestyle/cars/vauxhall", - "lifestyle/cars/volkswagen", - "lifestyle/cars/volvo", - "lifestyle/diet", - "lifestyle/food", - "lifestyle/hair", - "lifestyle/how-to-look-younger", - "lifestyle/lidl", - "lifestyle/marks-spencer", - "lifestyle/morrisons", - "lifestyle/property", - "lifestyle/sainsburys", - "lifestyle/skin-care", - "lifestyle/style", - "lifestyle/tesco", - "travel", - "travel/british-airways", - "travel/cruise", - "travel/deals", - "travel/egypt", - "travel/france", - "travel/greece", - "travel/italy", - "travel/jet2", - "travel/spain", - "travel/staycation", - "travel/tui", - "travel/turkey", - "travel/wizz-air", - "health", - "health/cancer", - "health/covid", - "health/dementia", - "health/diabetes", - "health/nhs", - "health/sleep", - "health/vaccine", - "health/world-health-organisation", - "science", - "science/archaeology", - "science/space", - "tech", - "tech/ai", - "tech/android", - "tech/apple", - "tech/broadband", - "tech/chatgpt", - "tech/deals", - "tech/dyson", - "tech/ee", - "tech/fire-tv", - "tech/freely", - "tech/freeview", - "tech/gemini", - "tech/google", - "tech/kindle", - "tech/malware", - "tech/meta", - "tech/microsoft", - "tech/nintendo", - "tech/oura", - "tech/playstation", - "tech/prime-video", - "tech/privacy", - "tech/reviews", - "tech/roku", - "tech/samsung", - "tech/sky-tv", - "tech/streaming", - "tech/virgin", - "tech/vpn", - "tech/whatsapp", - "tech/windows", - "weather", - "weather/flood", - "weather/heatwave", - "weather/rain", - "weather/storms", - "traffic-travel", - "reflections", - "newsfromus", - "watch", - "watch/originals" - ], - "in": "query", - "name": "section", + "description": "Numeric Greystar property id, e.g. 10124", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "news" + "x-example": "10124" } ], "produces": [ @@ -373635,7 +446968,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/greystar.PropertyDetails" } }, "400": { @@ -373644,6 +446977,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -373656,16 +447001,96 @@ "ApiKeyAuth": [] } ], - "summary": "Get GB News section headlines", + "summary": "Get a Greystar apartment community", "tags": [ - "GB News" + "Greystar" ] } }, - "/gbnews/news": { + "/greystar/search": { "get": { - "description": "Returns the latest 30 GB News top stories. Each item has a title, canonical URL, summary (the story's first paragraph), publication time, author name and lead image, when GB News provides them. Takes no parameters.", - "operationId": "gbnews-news", + "consumes": [ + "application/json" + ], + "description": "Lists Greystar communities published on greystar.com, optionally filtered by market area, neighborhood, city, state, country, starting rent, or free text. Filter values must come from /greystar/markets; an unknown value returns 400. Starting prices reflect each community's published minimum and are null when none is published. Results come from an hourly snapshot of every community listed on greystar.com; the default order follows the site.", + "operationId": "greystar-search", + "parameters": [ + { + "description": "Free-text match on name, address, city, neighborhood, market area, or postal code (max 160 characters)", + "in": "query", + "name": "query", + "type": "string" + }, + { + "description": "Exact market area from /greystar/markets, e.g. Greater Austin", + "in": "query", + "name": "market_area", + "type": "string" + }, + { + "description": "Exact neighborhood from /greystar/markets", + "in": "query", + "name": "neighborhood", + "type": "string" + }, + { + "description": "Exact city from /greystar/markets", + "in": "query", + "name": "city", + "type": "string" + }, + { + "description": "State or region abbreviation from /greystar/markets, e.g. TX", + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "ISO country code from /greystar/markets, e.g. US", + "in": "query", + "name": "country_code", + "type": "string" + }, + { + "description": "Minimum starting monthly rent; excludes communities with no published price", + "in": "query", + "name": "min_price", + "type": "number" + }, + { + "description": "Maximum starting monthly rent; excludes communities with no published price", + "in": "query", + "name": "max_price", + "type": "number" + }, + { + "default": "relevance", + "description": "Result order; relevance keeps the site's own order", + "enum": [ + "relevance", + "name", + "price_asc", + "price_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": 1, + "description": "1-based page", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "default": 20, + "description": "Results per page, 1-100", + "in": "query", + "name": "per_page", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -373673,7 +447098,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/greystar.SearchResult" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -373694,16 +447125,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get GB News top stories", + "summary": "Search Greystar apartment communities", "tags": [ - "GB News" + "Greystar" ] } }, - "/gbnews/sections": { + "/greystar/unit-locations": { "get": { - "description": "Lists the 390 GB News sections and topics accepted by `gbnews-headlines`. Each entry has a `slug` that is the path on the site, such as `news/uk/scotland` or `news/world/china`, a display `name` and the feed `url`. Takes no parameters.", - "operationId": "gbnews-sections", + "consumes": [ + "application/json" + ], + "description": "Lists every location accepted by /greystar/units: the nationwide us listing, states, metros, cities, and neighborhoods (nested ones carry their parent), taken from the site's own search pages. Locations Greystar has no unit listing for are dropped once detected.", + "operationId": "greystar-unit-locations", + "parameters": [ + { + "description": "Text matched against the location slug, e.g. austin", + "in": "query", + "name": "query", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -373711,7 +447153,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/greystar.UnitLocationList" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -373732,88 +447180,142 @@ "ApiKeyAuth": [] } ], - "summary": "Get GB News sections", + "summary": "List Greystar unit search locations", "tags": [ - "GB News" + "Greystar" ] } }, - "/gdelt/context": { + "/greystar/units": { "get": { "consumes": [ "application/json" ], - "description": "Searches the last 72 hours of GDELT-monitored news for sentences where every term of the required `query` appears together. Returns up to `maxrecords` rows (default 75, max 200), each with the matching sentence, its surrounding context, title, URL, domain, language and an `is_quote` flag. Filter with `domain`, `language`, `is_quote`, `timespan` or `from` and `to`, and order with `sort`.", - "operationId": "gdelt-context", + "description": "Searches apartment units currently available to rent on greystar.com within one location (nationwide by default), filtered by bedrooms, bathrooms, building type, community highlights, and monthly price, sorted by relevance or price. Results are grouped by community: each carries its address, coordinates, the number of matching units, and up to about 100 units with unit number, floor plan, bedrooms, bathrooms, price range, and lease term. The response also returns filter counts for the location. Several values of one filter match any of them. Get location values from /greystar/unit-locations.", + "operationId": "greystar-units", "parameters": [ { - "description": "GDELT query string. All terms must co-occur in the same sentence. Supports quoted phrases, (a OR b), domain:example.com.", + "default": "us", + "description": "Search location slug from /greystar/unit-locations, e.g. austin-tx, texas or greater-austin/round-rock", "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "climate change" + "name": "location", + "type": "string" }, { - "description": "Convenience domain filter, appended to the query as domain:VALUE.", + "collectionFormat": "multi", + "description": "Bedroom count; repeat for several (0 is studio)", "in": "query", - "name": "domain", - "type": "string", - "x-example": "bbc.com" + "items": { + "enum": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6" + ], + "type": "string" + }, + "name": "bedrooms", + "type": "array" }, { - "description": "Source-language filter (GDELT's searchlang parameter). Space-segmented languages only (excludes CJK and similar).", + "collectionFormat": "multi", + "description": "Bathroom count; repeat for several", "in": "query", - "name": "language", - "type": "string", - "x-example": "english" + "items": { + "enum": [ + "0", + "1", + "2", + "3", + "4" + ], + "type": "string" + }, + "name": "bathrooms", + "type": "array" }, { - "description": "Only return sentences GDELT identified as a quotation.", + "collectionFormat": "multi", + "description": "Building type; repeat for several", "in": "query", - "name": "is_quote", - "type": "boolean" + "items": { + "enum": [ + "Active Adult", + "Garden", + "High-Rise", + "Mid-Rise", + "Single Family Home", + "Student", + "Townhome" + ], + "type": "string" + }, + "name": "building_type", + "type": "array" }, { - "description": "Relative time window ending now, e.g. 30min, 6h, 3d. Cannot be combined with from/to. GDELT caps this endpoint's window at 72 hours.", + "collectionFormat": "multi", + "description": "Community highlight; repeat for several (matches any)", "in": "query", - "name": "timespan", - "type": "string", - "x-example": "24h" + "items": { + "enum": [ + "airCon", + "dishwasher", + "eco", + "fitness", + "garages", + "limitedAccess", + "patioBalcony", + "pets", + "playground", + "pools", + "smokeFree", + "walkInClosets", + "washerDryer" + ], + "type": "string" + }, + "name": "highlights", + "type": "array" }, { - "description": "Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan; GDELT caps this endpoint's window at 72 hours.", + "description": "Minimum monthly unit price", "in": "query", - "name": "from", - "type": "string", - "x-example": "2026-08-19" + "name": "min_price", + "type": "number" }, { - "description": "End of an absolute time window. Same formats as from.", + "description": "Maximum monthly unit price", "in": "query", - "name": "to", - "type": "string", - "x-example": "2026-08-20" + "name": "max_price", + "type": "number" }, { "default": "relevance", - "description": "Result order.", + "description": "Result order", "enum": [ "relevance", - "datedesc", - "dateasc" + "price_asc" ], "in": "query", "name": "sort", "type": "string" }, { - "default": 75, - "description": "Rows to return. GDELT's own hard cap is 200 for this endpoint (lower than gdelt-search's 250); there is no pagination cursor beyond it.", + "default": 1, + "description": "1-based page", "in": "query", - "maximum": 200, - "minimum": 1, - "name": "maxrecords", + "name": "page", + "type": "integer" + }, + { + "default": 20, + "description": "Communities per page, 1-100", + "in": "query", + "name": "per_page", "type": "integer" } ], @@ -373824,7 +447326,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gdelt.contextResponseDoc" + "$ref": "#/definitions/greystar.UnitSearchResult" } }, "400": { @@ -373833,8 +447335,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -373851,92 +447359,43 @@ "ApiKeyAuth": [] } ], - "summary": "Sentence-level co-occurrence search across recent GDELT coverage", + "summary": "Search available Greystar apartment units", "tags": [ - "GDELT" + "Greystar" ] } }, - "/gdelt/search": { + "/grubhub/availability": { "get": { "consumes": [ "application/json" ], - "description": "Searches global news coverage indexed by GDELT for the required `query`, which accepts quoted phrases, `(a OR b)`, `theme:`, `toneN, near20:\\", + "description": "Comma-separated Grubhub restaurant ids, up to 20", "in": "query", - "name": "query", + "name": "restaurant_ids", "required": true, "type": "string", - "x-example": "climate change" - }, - { - "description": "Convenience source-country filter, appended to the query as sourcecountry:VALUE. Accepts a GDELT-recognized country name (no spaces) or 2-letter FIPS code.", - "in": "query", - "name": "country", - "type": "string", - "x-example": "unitedkingdom" - }, - { - "description": "Convenience source-language filter, appended to the query as sourcelang:VALUE. Accepts a GDELT-recognized language name or 3-letter code.", - "in": "query", - "name": "language", - "type": "string", - "x-example": "english" - }, - { - "description": "Convenience domain filter, appended to the query as domain:VALUE.", - "in": "query", - "name": "domain", - "type": "string", - "x-example": "bbc.com" - }, - { - "description": "Relative time window ending now, e.g. 1h, 2d, 1w, 3m. Cannot be combined with from/to.", - "in": "query", - "name": "timespan", - "type": "string", - "x-example": "1w" - }, - { - "description": "Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan; GDELT only indexes roughly the last 3 months.", - "in": "query", - "name": "from", - "type": "string", - "x-example": "2026-08-01" - }, - { - "description": "End of an absolute time window. Same formats as from.", - "in": "query", - "name": "to", - "type": "string", - "x-example": "2026-08-19" + "x-example": "6238960,14344720" }, { - "default": "relevance", - "description": "Result order.", - "enum": [ - "relevance", - "datedesc", - "dateasc", - "tonedesc", - "toneasc" - ], + "description": "Diner location latitude -- availability is relative to it", "in": "query", - "name": "sort", - "type": "string" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 40.7128 }, { - "default": 75, - "description": "Rows to return. GDELT's own hard cap is 250; there is no pagination cursor beyond it.", + "description": "Diner location longitude", "in": "query", - "maximum": 250, - "minimum": 1, - "name": "maxrecords", - "type": "integer" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -74.006 } ], "produces": [ @@ -373946,7 +447405,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gdelt.searchResponseDoc" + "$ref": "#/definitions/grubhub.availabilityResponseDoc" } }, "400": { @@ -373955,8 +447414,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -373973,92 +447438,43 @@ "ApiKeyAuth": [] } ], - "summary": "Search global news coverage indexed by GDELT", + "summary": "Check ordering availability for a batch of Grubhub restaurants", "tags": [ - "GDELT" + "Grubhub" ] } }, - "/gdelt/timeline": { + "/grubhub/offers": { "get": { "consumes": [ "application/json" ], - "description": "Returns how coverage of the required GDELT `query` changes over time, as dated points. `metric` picks `volume` (the default, share of monitored articles), `volume_raw` (matching article count), `tone` (average sentiment), or `lang` and `country` for one series per language or country. Filter with `country`, `language`, `domain`, `timespan` or `from` and `to`; `smooth` runs 0 to 30 (default 0).", - "operationId": "gdelt-timeline", + "description": "Returns the promotional offers a Grubhub restaurant is currently running -- free items, BOGO deals, spend-and-save discounts -- the same data that drives the \"2 offers available\" badge on the site's own restaurant cards. An empty list is the common, legitimate case: most restaurants have no active promotion at any given moment. `amount.value` is 0 for a free-item offer since the item itself is the value, not a monetary discount; `amount.amount_maximum` then caps the item's dollar value, and `amount.order_minimum` is the spend threshold required to unlock it.", + "operationId": "grubhub-offers", "parameters": [ { - "description": "GDELT query string. Same syntax as gdelt-search's query.", + "description": "Grubhub restaurant id", "in": "query", - "name": "query", + "name": "restaurant_id", "required": true, "type": "string", - "x-example": "climate change" - }, - { - "default": "volume", - "description": "Timeline metric. lang and country return one series per language/country instead of one aggregate series.", - "enum": [ - "volume", - "volume_raw", - "tone", - "lang", - "country" - ], - "in": "query", - "name": "metric", - "type": "string" - }, - { - "description": "Convenience source-country filter, appended to the query as sourcecountry:VALUE.", - "in": "query", - "name": "country", - "type": "string", - "x-example": "unitedkingdom" - }, - { - "description": "Convenience source-language filter, appended to the query as sourcelang:VALUE.", - "in": "query", - "name": "language", - "type": "string", - "x-example": "english" - }, - { - "description": "Convenience domain filter, appended to the query as domain:VALUE.", - "in": "query", - "name": "domain", - "type": "string", - "x-example": "bbc.com" - }, - { - "description": "Relative time window ending now, e.g. 1h, 2d, 1w, 3m. Cannot be combined with from/to.", - "in": "query", - "name": "timespan", - "type": "string", - "x-example": "1w" - }, - { - "description": "Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan.", - "in": "query", - "name": "from", - "type": "string", - "x-example": "2026-08-01" + "x-example": "1338141" }, { - "description": "End of an absolute time window. Same formats as from.", + "description": "Diner location latitude", "in": "query", - "name": "to", - "type": "string", - "x-example": "2026-08-19" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 40.7128 }, { - "default": 0, - "description": "Moving-window smoothing applied to the timeline, in steps. 0 disables smoothing.", + "description": "Diner location longitude", "in": "query", - "maximum": 30, - "minimum": 0, - "name": "smooth", - "type": "integer" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -74.006 } ], "produces": [ @@ -374068,7 +447484,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gdelt.timelineResponseDoc" + "$ref": "#/definitions/grubhub.offersResponseDoc" } }, "400": { @@ -374077,8 +447493,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -374095,69 +447517,27 @@ "ApiKeyAuth": [] } ], - "summary": "Coverage volume or tone over time for a GDELT query", + "summary": "Get one Grubhub restaurant's currently active promotions", "tags": [ - "GDELT" + "Grubhub" ] } }, - "/gdelt/tonechart": { + "/grubhub/restaurant": { "get": { "consumes": [ "application/json" ], - "description": "Returns a sentiment histogram for the required GDELT `query`: one bin per integer tone value, each with an article `count` and a short sample of top articles with title and URL. Filter with `country`, `language`, `domain`, and `timespan` or `from` and `to`. A tone value with no matching articles is absent rather than returned with a zero count.", - "operationId": "gdelt-tonechart", + "description": "Returns one Grubhub restaurant: name, address with coordinates, timezone, phone, cuisines, star rating, price tier, whether online ordering is available, whether it offers delivery and pickup, delivery fee, coupon availability, restaurant tags and the full published week of service hours. Note this endpoint publishes fewer economics than GET /grubhub/search -- delivery minimum and the delivery/pickup time estimates come back empty here, so use the search endpoint when you need those.", + "operationId": "grubhub-restaurant", "parameters": [ { - "description": "GDELT query string. Same syntax as gdelt-search's query.", + "description": "Grubhub's numeric restaurant id, from /grubhub/search", "in": "query", - "name": "query", + "name": "restaurant_id", "required": true, "type": "string", - "x-example": "climate change" - }, - { - "description": "Convenience source-country filter, appended to the query as sourcecountry:VALUE.", - "in": "query", - "name": "country", - "type": "string", - "x-example": "unitedkingdom" - }, - { - "description": "Convenience source-language filter, appended to the query as sourcelang:VALUE.", - "in": "query", - "name": "language", - "type": "string", - "x-example": "english" - }, - { - "description": "Convenience domain filter, appended to the query as domain:VALUE.", - "in": "query", - "name": "domain", - "type": "string", - "x-example": "bbc.com" - }, - { - "description": "Relative time window ending now, e.g. 1h, 2d, 1w, 3m. Cannot be combined with from/to.", - "in": "query", - "name": "timespan", - "type": "string", - "x-example": "1w" - }, - { - "description": "Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan.", - "in": "query", - "name": "from", - "type": "string", - "x-example": "2026-08-01" - }, - { - "description": "End of an absolute time window. Same formats as from.", - "in": "query", - "name": "to", - "type": "string", - "x-example": "2026-08-19" + "x-example": "6238960" } ], "produces": [ @@ -374167,7 +447547,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gdelt.toneChartResponseDoc" + "$ref": "#/definitions/grubhub.restaurantResponseDoc" } }, "400": { @@ -374176,8 +447556,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -374194,28 +447580,34 @@ "ApiKeyAuth": [] } ], - "summary": "Sentiment histogram for a GDELT query", + "summary": "Get one Grubhub restaurant's detail", "tags": [ - "GDELT" + "Grubhub" ] } }, - "/gdelt/tv-concept-entities": { + "/grubhub/restaurant/menu": { "get": { "consumes": [ "application/json" ], - "description": "Lists the Google Knowledge Graph concept entities GDELT recognises in US television captioning, most frequent first, up to `limit` entries (default 100, max 10000). Each has a display `label` and a `mid` code. Pass the `mid`, not the label, as `concept` to the GDELT TV search and chart endpoints. The list does not depend on any query.", - "operationId": "gdelt-tv-concept-entities", + "description": "Returns one restaurant's full menu grouped into categories. Every item carries a base price, a delivery price and a pickup price, which genuinely differ, plus a min and max price bounding items whose price varies with the options chosen. Items also carry a description, a popularity flag, availability, tags and an image. Amounts are given both in minor units (cents) and as a decimal value.", + "operationId": "grubhub-restaurant-menu", "parameters": [ { - "default": 100, - "description": "Maximum entries to return, most-frequent first.", + "description": "Grubhub's numeric restaurant id, from /grubhub/search", "in": "query", - "maximum": 10000, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "restaurant_id", + "required": true, + "type": "string", + "x-example": "6238960" + }, + { + "description": "Include items the restaurant currently has unavailable (default false)", + "in": "query", + "name": "include_unavailable", + "type": "boolean", + "x-example": true } ], "produces": [ @@ -374225,7 +447617,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gdelt.tvCapNlpEntityDetailsResponseDoc" + "$ref": "#/definitions/grubhub.menuResponseDoc" } }, "400": { @@ -374234,8 +447626,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -374252,203 +447650,52 @@ "ApiKeyAuth": [] } ], - "summary": "List GDELT Television 2.0 AI concept entities", + "summary": "Get one Grubhub restaurant's menu with prices", "tags": [ - "GDELT" + "Grubhub" ] } }, - "/gdelt/tv-search": { + "/grubhub/restaurant/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Searches GDELT's US television news index on one required `station` (`CNN`, `MSNBC`, `FOXNEWS`, `BBCNEWS`, `KGO`, `KPIX` or `KNTV`). Match on `transcript`, `caption`, `concept`, `onscreen_text` or `visual`, with matching `exclude_` options. Returns up to `maxrecords` clips (default 50, max 3000) with show, station, timing, caption, transcript, onscreen text and clip URL. Results lag 24 to 48 hours.", - "operationId": "gdelt-tv-search", + "description": "Returns one restaurant's customer reviews plus its 1-5 star rating histogram. Each review carries the star rating, the written body, the reviewer's display name and how many reviews they have written, the review date, Grubhub's own sentiment classification, the diner type, and the specific menu items the review is attached to -- Grubhub ties each review to what the diner actually ordered. sort accepts `timeCreated_desc` (most recent, the default) and `ratingValue_desc` (highest rated). Note the written-review corpus and the headline rating shown in search are separate systems upstream, so a restaurant can report a large rating count in search while returning few or no written reviews here.", + "operationId": "grubhub-restaurant-reviews", "parameters": [ { - "collectionFormat": "csv", - "description": "Search machine-generated speech-to-text transcripts (GDELT's asr: operator). Repeatable; multiple values are OR'd together. Short phrases only (GDELT caps each at 5 words).", - "in": "query", - "items": { - "type": "string" - }, - "name": "transcript", - "type": "array", - "x-example": "climate change" - }, - { - "collectionFormat": "csv", - "description": "Search human-provided closed captioning (GDELT's cap: operator). Repeatable; multiple values are OR'd together.", - "in": "query", - "items": { - "type": "string" - }, - "name": "caption", - "type": "array", - "x-example": "climate change" - }, - { - "collectionFormat": "csv", - "description": "Search Google Knowledge Graph concepts extracted from captioning, by MID code (GDELT's capnlp: operator). Repeatable; multiple values are OR'd together.", - "in": "query", - "items": { - "type": "string" - }, - "name": "concept", - "type": "array", - "x-example": "/M/0d063v" - }, - { - "collectionFormat": "csv", - "description": "Search OCR'd onscreen text/chyrons (GDELT's ocr: operator). Repeatable; multiple values are OR'd together. Short phrases only (GDELT caps each at 5 words).", - "in": "query", - "items": { - "type": "string" - }, - "name": "onscreen_text", - "type": "array", - "x-example": "breaking news" - }, - { - "collectionFormat": "csv", - "description": "Search visual object/activity labels from computer vision (GDELT's visual: operator). Repeatable; multiple values are OR'd together.", - "in": "query", - "items": { - "type": "string" - }, - "name": "visual", - "type": "array", - "x-example": "flood" - }, - { - "collectionFormat": "csv", - "description": "Exclude clips whose speech-to-text transcript matches this value (GDELT's -asr: operator). Repeatable; every value must be absent.", - "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_transcript", - "type": "array", - "x-example": "campaign ad" - }, - { - "collectionFormat": "csv", - "description": "Exclude clips whose closed captioning matches this value (GDELT's -cap: operator). Repeatable; every value must be absent.", - "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_caption", - "type": "array", - "x-example": "sanders" - }, - { - "collectionFormat": "csv", - "description": "Exclude clips whose extracted concepts match this MID code (GDELT's -capnlp: operator). Repeatable; every value must be absent.", - "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_concept", - "type": "array", - "x-example": "/M/081pw" - }, - { - "collectionFormat": "csv", - "description": "Exclude clips whose OCR'd onscreen text matches this value (GDELT's -ocr: operator). Repeatable; every value must be absent.", - "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_onscreen_text", - "type": "array", - "x-example": "sponsored" - }, - { - "collectionFormat": "csv", - "description": "Exclude clips whose visual labels match this value (GDELT's -visual: operator). Repeatable; every value must be absent.", - "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_visual", - "type": "array", - "x-example": "advertisement" - }, - { - "description": "Station to search.", - "enum": [ - "CNN", - "MSNBC", - "FOXNEWS", - "BBCNEWS", - "KGO", - "KPIX", - "KNTV" - ], + "description": "Grubhub's numeric restaurant id, from /grubhub/search", "in": "query", - "name": "station", + "name": "restaurant_id", "required": true, "type": "string", - "x-example": "CNN" - }, - { - "description": "Limit to an exact show name.", - "in": "query", - "name": "show", - "type": "string", - "x-example": "Inside Politics" - }, - { - "description": "Limit to a day of week, 0 (Sunday) through 7 (Saturday), PST.", - "in": "query", - "maximum": 7, - "minimum": 0, - "name": "day_of_week", - "type": "integer" - }, - { - "description": "Relative time window ending now, e.g. 1h, 7d, 3m, 1y. Cannot be combined with from/to. GDELT's TV archive starts July 6, 2010.", - "in": "query", - "name": "timespan", - "type": "string", - "x-example": "7d" + "x-example": "6238960" }, { - "description": "Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan.", + "description": "Reviews per page, 1-50 (default 20)", "in": "query", - "name": "from", - "type": "string", - "x-example": "2026-08-01" + "name": "page_size", + "type": "integer", + "x-example": 20 }, { - "description": "End of an absolute time window. Same formats as from.", + "description": "1-based page number (default 1)", "in": "query", - "name": "to", - "type": "string", - "x-example": "2026-08-19" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "default": "relevance", - "description": "Result order.", + "description": "One of timeCreated_desc, ratingValue_desc. Default timeCreated_desc.", "enum": [ - "relevance", - "datedesc", - "dateasc" + "timeCreated_desc", + "ratingValue_desc" ], "in": "query", "name": "sort", - "type": "string" - }, - { - "default": 50, - "description": "Rows to return. GDELT's own hard cap is 3000 for this endpoint; there is no pagination cursor beyond it.", - "in": "query", - "maximum": 3000, - "minimum": 1, - "name": "maxrecords", - "type": "integer" + "type": "string", + "x-example": "timeCreated_desc" } ], "produces": [ @@ -374458,7 +447705,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gdelt.tvSearchResponseDoc" + "$ref": "#/definitions/grubhub.reviewsResponseDoc" } }, "400": { @@ -374467,8 +447714,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -374485,178 +447738,67 @@ "ApiKeyAuth": [] } ], - "summary": "Search US television news coverage (transcripts, captions, OCR, visual labels)", + "summary": "Get one Grubhub restaurant's reviews and rating histogram", "tags": [ - "GDELT" + "Grubhub" ] } }, - "/gdelt/tv-showchart": { + "/grubhub/search": { "get": { "consumes": [ "application/json" ], - "description": "Ranks US television shows by how much they covered a topic. At least one `station` is required, and a match is set with `transcript`, `caption`, `concept`, `onscreen_text` or `visual` (with `exclude_` counterparts), optionally limited by `show`, `timespan` or `from` and `to`. Returns shows with a `count`. Omitting the time window searches the archive back to July 2010.", - "operationId": "gdelt-tv-showchart", + "description": "Returns restaurants delivering to (or offering pickup at) a latitude/longitude, optionally filtered by keyword over restaurant names, cuisines and dishes. Each restaurant carries its id (the value every other Grubhub endpoint takes), name, full address with coordinates, phone, cuisines, star rating and rating count, Grubhub's 1-4 price tier, distance, open state, delivery and pickup fees and minimums, service fee, delivery and pickup time estimates, coupon availability and total menu item count. A location Grubhub does not serve returns an empty list rather than an error.", + "operationId": "grubhub-search", "parameters": [ { - "collectionFormat": "csv", - "description": "Search machine-generated speech-to-text transcripts (GDELT's asr: operator). Repeatable; multiple values are OR'd together. Short phrases only (GDELT caps each at 5 words).", - "in": "query", - "items": { - "type": "string" - }, - "name": "transcript", - "type": "array", - "x-example": "climate change" - }, - { - "collectionFormat": "csv", - "description": "Search human-provided closed captioning (GDELT's cap: operator). Repeatable; multiple values are OR'd together.", - "in": "query", - "items": { - "type": "string" - }, - "name": "caption", - "type": "array", - "x-example": "trump" - }, - { - "collectionFormat": "csv", - "description": "Search Google Knowledge Graph concepts extracted from captioning, by MID code (GDELT's capnlp: operator). Repeatable; multiple values are OR'd together.", - "in": "query", - "items": { - "type": "string" - }, - "name": "concept", - "type": "array", - "x-example": "/M/0d063v" - }, - { - "collectionFormat": "csv", - "description": "Search OCR'd onscreen text/chyrons (GDELT's ocr: operator). Repeatable; multiple values are OR'd together. Short phrases only (GDELT caps each at 5 words).", - "in": "query", - "items": { - "type": "string" - }, - "name": "onscreen_text", - "type": "array", - "x-example": "breaking news" - }, - { - "collectionFormat": "csv", - "description": "Search visual object/activity labels from computer vision (GDELT's visual: operator). Repeatable; multiple values are OR'd together.", - "in": "query", - "items": { - "type": "string" - }, - "name": "visual", - "type": "array", - "x-example": "flood" - }, - { - "collectionFormat": "csv", - "description": "Exclude clips whose speech-to-text transcript matches this value (GDELT's -asr: operator). Repeatable; every value must be absent.", - "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_transcript", - "type": "array", - "x-example": "campaign ad" - }, - { - "collectionFormat": "csv", - "description": "Exclude clips whose closed captioning matches this value (GDELT's -cap: operator). Repeatable; every value must be absent.", - "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_caption", - "type": "array", - "x-example": "sanders" - }, - { - "collectionFormat": "csv", - "description": "Exclude clips whose extracted concepts match this MID code (GDELT's -capnlp: operator). Repeatable; every value must be absent.", - "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_concept", - "type": "array", - "x-example": "/M/081pw" - }, - { - "collectionFormat": "csv", - "description": "Exclude clips whose OCR'd onscreen text matches this value (GDELT's -ocr: operator). Repeatable; every value must be absent.", - "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_onscreen_text", - "type": "array", - "x-example": "sponsored" - }, - { - "collectionFormat": "csv", - "description": "Exclude clips whose visual labels match this value (GDELT's -visual: operator). Repeatable; every value must be absent.", + "description": "Search center latitude", "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_visual", - "type": "array", - "x-example": "advertisement" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 40.7128 }, { - "collectionFormat": "csv", - "description": "Required, repeatable. One or more stations, OR'd together.", + "description": "Search center longitude", "in": "query", - "items": { - "enum": [ - "CNN", - "MSNBC", - "FOXNEWS", - "BBCNEWS", - "KGO", - "KPIX", - "KNTV" - ], - "type": "string" - }, - "name": "station", + "name": "longitude", "required": true, - "type": "array", - "x-example": "CNN" + "type": "number", + "x-example": -74.006 }, { - "description": "Limit to an exact show name.", + "description": "Keyword over restaurant names, cuisines and dishes", "in": "query", - "name": "show", + "name": "search", "type": "string", - "x-example": "Inside Politics" + "x-example": "pizza" }, { - "description": "Relative time window ending now, e.g. 1h, 7d, 3m, 1y. Cannot be combined with from/to. Omit both for GDELT's full archive (auto-resolution, back to July 6, 2010).", + "description": "One of delivery, pickup. Default delivery.", + "enum": [ + "delivery", + "pickup" + ], "in": "query", - "name": "timespan", + "name": "order_method", "type": "string", - "x-example": "30d" + "x-example": "delivery" }, { - "description": "Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan.", + "description": "Restaurants per page, 1-50 (default 20)", "in": "query", - "name": "from", - "type": "string", - "x-example": "2026-07-01" + "name": "page_size", + "type": "integer", + "x-example": 20 }, { - "description": "End of an absolute time window. Same formats as from.", + "description": "1-based page number (default 1)", "in": "query", - "name": "to", - "type": "string", - "x-example": "2026-08-19" + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -374666,7 +447808,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gdelt.tvShowChartResponseDoc" + "$ref": "#/definitions/grubhub.searchResponseDoc" } }, "400": { @@ -374675,8 +447817,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -374693,178 +447841,62 @@ "ApiKeyAuth": [] } ], - "summary": "Top US television shows by coverage share for a query", + "summary": "Search Grubhub restaurants near a location", "tags": [ - "GDELT" + "Grubhub" ] } }, - "/gdelt/tv-stationchart": { + "/grubhub/timepicker": { "get": { "consumes": [ "application/json" ], - "description": "Compares how much each US television station covered a topic. At least one `station` is required, and several are compared side by side. A match is set with `transcript`, `caption`, `concept`, `onscreen_text` or `visual` (with `exclude_` counterparts), optionally limited by `show`, `timespan` or `from` and `to`. Returns each station with a `count`.", - "operationId": "gdelt-tv-stationchart", + "description": "Returns every future delivery or pickup time slot Grubhub will accept an order for, up to 7 days ahead. This is what powers the site's own \"schedule my order\" picker: `/grubhub/availability` tells you whether a restaurant is orderable right now plus one \"next\" time, while this returns the full future slot calendar a caller would need to build an actual date-and-time picker. Slots are grouped by date and given as full timestamps carrying the restaurant's real UTC offset for that instant, so a caller never has to resolve daylight-saving transitions themselves. Requesting `location_mode=DELIVERY` returns delivery slots only; `PICKUP` returns pickup slots only -- the upstream only computes one side per call.", + "operationId": "grubhub-timepicker", "parameters": [ { - "collectionFormat": "csv", - "description": "Search machine-generated speech-to-text transcripts (GDELT's asr: operator). Repeatable; multiple values are OR'd together. Short phrases only (GDELT caps each at 5 words).", - "in": "query", - "items": { - "type": "string" - }, - "name": "transcript", - "type": "array", - "x-example": "climate change" - }, - { - "collectionFormat": "csv", - "description": "Search human-provided closed captioning (GDELT's cap: operator). Repeatable; multiple values are OR'd together.", - "in": "query", - "items": { - "type": "string" - }, - "name": "caption", - "type": "array", - "x-example": "trump" - }, - { - "collectionFormat": "csv", - "description": "Search Google Knowledge Graph concepts extracted from captioning, by MID code (GDELT's capnlp: operator). Repeatable; multiple values are OR'd together.", - "in": "query", - "items": { - "type": "string" - }, - "name": "concept", - "type": "array", - "x-example": "/M/0d063v" - }, - { - "collectionFormat": "csv", - "description": "Search OCR'd onscreen text/chyrons (GDELT's ocr: operator). Repeatable; multiple values are OR'd together. Short phrases only (GDELT caps each at 5 words).", - "in": "query", - "items": { - "type": "string" - }, - "name": "onscreen_text", - "type": "array", - "x-example": "breaking news" - }, - { - "collectionFormat": "csv", - "description": "Search visual object/activity labels from computer vision (GDELT's visual: operator). Repeatable; multiple values are OR'd together.", - "in": "query", - "items": { - "type": "string" - }, - "name": "visual", - "type": "array", - "x-example": "flood" - }, - { - "collectionFormat": "csv", - "description": "Exclude clips whose speech-to-text transcript matches this value (GDELT's -asr: operator). Repeatable; every value must be absent.", - "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_transcript", - "type": "array", - "x-example": "campaign ad" - }, - { - "collectionFormat": "csv", - "description": "Exclude clips whose closed captioning matches this value (GDELT's -cap: operator). Repeatable; every value must be absent.", - "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_caption", - "type": "array", - "x-example": "sanders" - }, - { - "collectionFormat": "csv", - "description": "Exclude clips whose extracted concepts match this MID code (GDELT's -capnlp: operator). Repeatable; every value must be absent.", - "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_concept", - "type": "array", - "x-example": "/M/081pw" - }, - { - "collectionFormat": "csv", - "description": "Exclude clips whose OCR'd onscreen text matches this value (GDELT's -ocr: operator). Repeatable; every value must be absent.", - "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_onscreen_text", - "type": "array", - "x-example": "sponsored" - }, - { - "collectionFormat": "csv", - "description": "Exclude clips whose visual labels match this value (GDELT's -visual: operator). Repeatable; every value must be absent.", - "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_visual", - "type": "array", - "x-example": "advertisement" - }, - { - "collectionFormat": "csv", - "description": "Required, repeatable. One or more stations, OR'd together.", + "description": "Grubhub restaurant id", "in": "query", - "items": { - "enum": [ - "CNN", - "MSNBC", - "FOXNEWS", - "BBCNEWS", - "KGO", - "KPIX", - "KNTV" - ], - "type": "string" - }, - "name": "station", + "name": "restaurant_id", "required": true, - "type": "array", - "x-example": "CNN" + "type": "string", + "x-example": "698307" }, { - "description": "Limit to an exact show name.", + "description": "Diner location latitude", "in": "query", - "name": "show", - "type": "string", - "x-example": "Inside Politics" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 40.7128 }, { - "description": "Relative time window ending now, e.g. 1h, 7d, 3m, 1y. Cannot be combined with from/to. Omit both for GDELT's full archive (auto-resolution, back to July 6, 2010).", + "description": "Diner location longitude", "in": "query", - "name": "timespan", - "type": "string", - "x-example": "30d" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -74.006 }, { - "description": "Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan.", + "description": "Which slot grid to return", + "enum": [ + "DELIVERY", + "PICKUP" + ], "in": "query", - "name": "from", + "name": "location_mode", + "required": true, "type": "string", - "x-example": "2026-07-01" + "x-example": "DELIVERY" }, { - "description": "End of an absolute time window. Same formats as from.", + "description": "How many days ahead to fetch, 1-7 (default 7)", "in": "query", - "name": "to", - "type": "string", - "x-example": "2026-08-19" + "name": "days", + "type": "integer", + "x-example": 7 } ], "produces": [ @@ -374874,7 +447906,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gdelt.tvStationChartResponseDoc" + "$ref": "#/definitions/grubhub.timepickerResponseDoc" } }, "400": { @@ -374883,8 +447915,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -374901,19 +447939,26 @@ "ApiKeyAuth": [] } ], - "summary": "Compare US television news coverage across stations", + "summary": "Get one Grubhub restaurant's future orderable time-slot calendar", "tags": [ - "GDELT" + "Grubhub" ] } }, - "/gdelt/tv-stationdetails": { + "/guardian/article": { "get": { - "consumes": [ - "application/json" + "description": "Returns a Guardian article by `url`, a canonical `www.theguardian.com` article link. The response has the title, description, section, authors, lead image, publication and update times, and the body as `paragraphs`. Live-blog timelines are not supported.", + "operationId": "guardian-article", + "parameters": [ + { + "description": "Canonical www.theguardian.com article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.theguardian.com/world/2026/aug/26/us-military-kills-four-boat-strike-caribbean" + } ], - "description": "Lists the television stations GDELT currently monitors, each with its `id`, short `label` and a `label_long` that includes its coverage dates. Use the ids as `station` in the GDELT TV endpoints. It takes no parameters.", - "operationId": "gdelt-tv-stationdetails", "produces": [ "application/json" ], @@ -374921,11 +447966,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gdelt.tvStationDetailsResponseDoc" + "$ref": "#/definitions/guardian.articleResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -374942,174 +447999,39 @@ "ApiKeyAuth": [] } ], - "summary": "List GDELT Television 2.0 AI stations", + "summary": "Get Guardian article content", "tags": [ - "GDELT" + "Guardian" ] } }, - "/gdelt/tv-timeline": { + "/guardian/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the amount of US television news airtime matching the supplied query over time, using GDELT Television 2.0 AI timeline-volume data. A station is required. Supports the same caption, transcript, concept, and visual match operators as gdelt-tv-search; coverage and processing-delay caveats are documented there.", - "operationId": "gdelt-tv-timeline", + "description": "Returns one Guardian contributor's public profile: name, bio, Twitter handle, byline image, and one page of their recent articles. Provide either the contributor's profile slug or the full profile page URL.", + "operationId": "guardian-author", "parameters": [ { - "collectionFormat": "csv", - "description": "Search machine-generated speech-to-text transcripts (GDELT's asr: operator). Repeatable; multiple values are OR'd together. Short phrases only (GDELT caps each at 5 words).", - "in": "query", - "items": { - "type": "string" - }, - "name": "transcript", - "type": "array", - "x-example": "climate change" - }, - { - "collectionFormat": "csv", - "description": "Search human-provided closed captioning (GDELT's cap: operator). Repeatable; multiple values are OR'd together.", - "in": "query", - "items": { - "type": "string" - }, - "name": "caption", - "type": "array", - "x-example": "climate change" - }, - { - "collectionFormat": "csv", - "description": "Search Google Knowledge Graph concepts extracted from captioning, by MID code (GDELT's capnlp: operator). Repeatable; multiple values are OR'd together.", - "in": "query", - "items": { - "type": "string" - }, - "name": "concept", - "type": "array", - "x-example": "/M/0d063v" - }, - { - "collectionFormat": "csv", - "description": "Search OCR'd onscreen text/chyrons (GDELT's ocr: operator). Repeatable; multiple values are OR'd together. Short phrases only (GDELT caps each at 5 words).", - "in": "query", - "items": { - "type": "string" - }, - "name": "onscreen_text", - "type": "array", - "x-example": "breaking news" - }, - { - "collectionFormat": "csv", - "description": "Search visual object/activity labels from computer vision (GDELT's visual: operator). Repeatable; multiple values are OR'd together.", - "in": "query", - "items": { - "type": "string" - }, - "name": "visual", - "type": "array", - "x-example": "flood" - }, - { - "collectionFormat": "csv", - "description": "Exclude clips whose speech-to-text transcript matches this value (GDELT's -asr: operator). Repeatable; every value must be absent.", - "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_transcript", - "type": "array", - "x-example": "campaign ad" - }, - { - "collectionFormat": "csv", - "description": "Exclude clips whose closed captioning matches this value (GDELT's -cap: operator). Repeatable; every value must be absent.", - "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_caption", - "type": "array", - "x-example": "sanders" - }, - { - "collectionFormat": "csv", - "description": "Exclude clips whose extracted concepts match this MID code (GDELT's -capnlp: operator). Repeatable; every value must be absent.", - "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_concept", - "type": "array", - "x-example": "/M/081pw" - }, - { - "collectionFormat": "csv", - "description": "Exclude clips whose OCR'd onscreen text matches this value (GDELT's -ocr: operator). Repeatable; every value must be absent.", - "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_onscreen_text", - "type": "array", - "x-example": "sponsored" - }, - { - "collectionFormat": "csv", - "description": "Exclude clips whose visual labels match this value (GDELT's -visual: operator). Repeatable; every value must be absent.", - "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_visual", - "type": "array", - "x-example": "advertisement" - }, - { - "description": "Station to search.", - "enum": [ - "CNN", - "MSNBC", - "FOXNEWS", - "BBCNEWS", - "KGO", - "KPIX", - "KNTV" - ], - "in": "query", - "name": "station", - "required": true, - "type": "string", - "x-example": "CNN" - }, - { - "description": "Limit to an exact show name.", - "in": "query", - "name": "show", - "type": "string", - "x-example": "Inside Politics" - }, - { - "description": "Relative time window ending now, e.g. 1h, 7d, 3m, 1y. Cannot be combined with from/to. Omit both for GDELT's full archive (auto-resolution, back to July 6, 2010).", + "description": "Guardian contributor profile slug, e.g. hannah-devlin", "in": "query", - "name": "timespan", + "name": "slug", "type": "string", - "x-example": "30d" + "x-example": "hannah-devlin" }, { - "description": "Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan.", + "description": "Canonical https://www.theguardian.com/profile/ page URL, as an alternative to slug", "in": "query", - "name": "from", + "name": "url", "type": "string", - "x-example": "2026-07-01" + "x-example": "https://www.theguardian.com/profile/hannah-devlin" }, { - "description": "End of an absolute time window. Same formats as from.", + "default": 1, + "description": "1-based article-history page, 1 to 100, defaults to 1", "in": "query", - "name": "to", - "type": "string", - "x-example": "2026-08-19" + "maximum": 100, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -375119,7 +448041,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gdelt.tvTimelineResponseDoc" + "$ref": "#/definitions/guardian.authorResponseDoc" } }, "400": { @@ -375128,8 +448050,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -375146,28 +448074,36 @@ "ApiKeyAuth": [] } ], - "summary": "Airtime volume over time for US television news coverage", + "summary": "Get Guardian contributor profile", "tags": [ - "GDELT" + "Guardian" ] } }, - "/gdelt/tv-visual-entities": { + "/guardian/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the computer-vision object and activity labels GDELT recognises in US television video, most frequent first, up to `limit` entries (default 100, max 10000). The label itself is the value to pass as `visual` to the GDELT TV search and chart endpoints. The list does not depend on any query.", - "operationId": "gdelt-tv-visual-entities", + "description": "Returns recent Guardian headlines for one section. `section` is optional and defaults to `world`; the other values are `uk-news`, `us-news`, `politics`, `business`, `technology`, `environment`, `science`, `sport`, `culture`, `lifeandstyle` and `commentisfree`. Each item has a title, URL, summary, publication time and author, plus its section when available.", + "operationId": "guardian-headlines", "parameters": [ { - "default": 100, - "description": "Maximum entries to return, most-frequent first.", + "description": "Guardian RSS section, defaults to world", + "enum": [ + "world", + "uk-news", + "us-news", + "politics", + "business", + "technology", + "environment", + "science", + "sport", + "culture", + "lifeandstyle", + "commentisfree" + ], "in": "query", - "maximum": 10000, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "section", + "type": "string" } ], "produces": [ @@ -375177,7 +448113,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gdelt.tvVisualEntityDetailsResponseDoc" + "$ref": "#/definitions/guardian.headlinesResponseDoc" } }, "400": { @@ -375186,8 +448122,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -375204,196 +448146,155 @@ "ApiKeyAuth": [] } ], - "summary": "List GDELT Television 2.0 AI visual entities", + "summary": "Get Guardian section headlines", "tags": [ - "GDELT" + "Guardian" ] } }, - "/gdelt/tv-wordcloud": { + "/guardian/live": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a frequency-ranked word cloud for US television coverage. `channel` is required and picks what is counted: `transcript`, `caption`, `concept`, `onscreen_text` or `visual`; `station` is also required. Match with the same channel options (with `exclude_` counterparts) and limit by `show`, `day_of_week`, `timespan` or `from` and `to`. Each word has a `label` and `count`.", - "operationId": "gdelt-tv-wordcloud", + "description": "Returns a bounded text snapshot of one public Guardian live blog: the headline, the key-events timeline, and the update blocks with timestamps, headings, bylines, and body paragraphs. This is a single page fetch of the public page at a canonical live-blog URL — not a live stream or polling feed. URLs must use the dated www.theguardian.com section /live/ path, e.g. https://www.theguardian.com/sport/live/2026/aug/08//.", + "operationId": "guardian-live", "parameters": [ { - "description": "Required. Which match channel to build a word cloud from.", - "enum": [ - "transcript", - "caption", - "concept", - "onscreen_text", - "visual" - ], + "description": "Canonical www.theguardian.com live-blog URL", "in": "query", - "name": "channel", + "name": "url", "required": true, "type": "string", - "x-example": "caption" - }, - { - "collectionFormat": "csv", - "description": "Search machine-generated speech-to-text transcripts (GDELT's asr: operator). Repeatable; multiple values are OR'd together. Short phrases only (GDELT caps each at 5 words).", - "in": "query", - "items": { - "type": "string" - }, - "name": "transcript", - "type": "array", - "x-example": "climate change" - }, - { - "collectionFormat": "csv", - "description": "Search human-provided closed captioning (GDELT's cap: operator). Repeatable; multiple values are OR'd together.", - "in": "query", - "items": { - "type": "string" - }, - "name": "caption", - "type": "array", - "x-example": "trump" - }, - { - "collectionFormat": "csv", - "description": "Search Google Knowledge Graph concepts extracted from captioning, by MID code (GDELT's capnlp: operator). Repeatable; multiple values are OR'd together.", - "in": "query", - "items": { - "type": "string" - }, - "name": "concept", - "type": "array", - "x-example": "/M/0d063v" - }, - { - "collectionFormat": "csv", - "description": "Search OCR'd onscreen text/chyrons (GDELT's ocr: operator). Repeatable; multiple values are OR'd together. Short phrases only (GDELT caps each at 5 words).", - "in": "query", - "items": { - "type": "string" - }, - "name": "onscreen_text", - "type": "array", - "x-example": "breaking news" - }, - { - "collectionFormat": "csv", - "description": "Search visual object/activity labels from computer vision (GDELT's visual: operator). Repeatable; multiple values are OR'd together.", - "in": "query", - "items": { - "type": "string" - }, - "name": "visual", - "type": "array", - "x-example": "flood" - }, - { - "collectionFormat": "csv", - "description": "Exclude clips whose speech-to-text transcript matches this value (GDELT's -asr: operator). Repeatable; every value must be absent.", - "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_transcript", - "type": "array", - "x-example": "campaign ad" + "x-example": "https://www.theguardian.com/sport/live/2026/aug/08/japan-vs-australia-live-updates-wallabies-nations-championship-rugby-union" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/guardian.liveResponseDoc" + } }, - { - "collectionFormat": "csv", - "description": "Exclude clips whose closed captioning matches this value (GDELT's -cap: operator). Repeatable; every value must be absent.", - "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_caption", - "type": "array", - "x-example": "sanders" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "collectionFormat": "csv", - "description": "Exclude clips whose extracted concepts match this MID code (GDELT's -capnlp: operator). Repeatable; every value must be absent.", - "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_concept", - "type": "array", - "x-example": "/M/081pw" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "collectionFormat": "csv", - "description": "Exclude clips whose OCR'd onscreen text matches this value (GDELT's -ocr: operator). Repeatable; every value must be absent.", - "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_onscreen_text", - "type": "array", - "x-example": "sponsored" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "collectionFormat": "csv", - "description": "Exclude clips whose visual labels match this value (GDELT's -visual: operator). Repeatable; every value must be absent.", - "in": "query", - "items": { - "type": "string" - }, - "name": "exclude_visual", - "type": "array", - "x-example": "advertisement" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get Guardian live blog snapshot", + "tags": [ + "Guardian" + ] + } + }, + "/guardian/topic": { + "get": { + "description": "Returns the stories on a public Guardian tag archive (20 per page, newest first, with total pages and results) or section front (a single curated page, is_front true). topic is a Guardian tag or section slug and page defaults to 1. resolved_topic reports the path actually served, which differs for edition-scoped fronts.", + "operationId": "guardian-topic", + "parameters": [ { - "description": "Required. Station to search.", - "enum": [ - "CNN", - "MSNBC", - "FOXNEWS", - "BBCNEWS", - "KGO", - "KPIX", - "KNTV" - ], + "description": "Guardian tag or section slug", "in": "query", - "name": "station", + "name": "topic", "required": true, "type": "string", - "x-example": "CNN" + "x-example": "world" }, { - "description": "Limit to an exact show name.", + "default": 1, + "description": "1-based archive page, 1 to 100, defaults to 1", "in": "query", - "name": "show", - "type": "string", - "x-example": "Inside Politics" + "maximum": 100, + "minimum": 1, + "name": "page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/guardian.topicResponseDoc" + } }, - { - "description": "Limit to a day of week, 0 (Sunday) through 7 (Saturday), PST.", - "in": "query", - "name": "day_of_week", - "type": "string", - "x-example": "1" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Relative time window ending now, e.g. 1h, 7d, 3m, 1y. Cannot be combined with from/to. GDELT's TV archive starts July 6, 2010.", - "in": "query", - "name": "timespan", - "type": "string", - "x-example": "7d" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Start of an absolute time window. Accepts YYYY-MM-DD, RFC3339, or GDELT's raw YYYYMMDDHHMMSS. Cannot be combined with timespan.", - "in": "query", - "name": "from", - "type": "string", - "x-example": "2026-08-01" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "End of an absolute time window. Same formats as from.", + "ApiKeyAuth": [] + } + ], + "summary": "Get Guardian topic archive", + "tags": [ + "Guardian" + ] + } + }, + "/gucci/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Gucci's full department/category/subcategory taxonomy, sourced directly from the site's own header navigation menu. Each entry's category value is exactly what gucci-category's own category parameter accepts. Filter to one department with department (e.g. women, men); omit for every department -- see the response's own departments field for the live list of top-level department labels to filter by.", + "operationId": "gucci-categories", + "parameters": [ + { + "description": "Department label to filter to (case-insensitive substring match against the response's own departments field), e.g. women, men. Omit for every department.", "in": "query", - "name": "to", + "name": "department", "type": "string", - "x-example": "2026-08-19" + "x-example": "women" } ], "produces": [ @@ -375403,7 +448304,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gdelt.tvWordCloudResponseDoc" + "$ref": "#/definitions/gucci.categoriesResponseDoc" } }, "400": { @@ -375412,8 +448313,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -375430,51 +448331,34 @@ "ApiKeyAuth": [] } ], - "summary": "Word cloud for US television news coverage", + "summary": "List Gucci's category and subcategory taxonomy", "tags": [ - "GDELT" + "Gucci" ] } }, - "/geocoding/lookup": { + "/gucci/category": { "get": { "consumes": [ "application/json" ], - "description": "Looks up OpenStreetMap objects by the required `osm_ids`, a comma-separated list prefixed `N` (node), `W` (way) or `R` (relation), such as `W34633854,N123`. Each place has its display name, category and type, coordinates, bounding box, importance and address parts; `addressdetails` defaults to true, and `extratags`, `namedetails` and `accept_language` are optional. Malformed ids return `400`; no match returns `404`.", - "operationId": "geocoding-lookup", + "description": "Returns one Gucci category/browse listing: products (name, price, colors, images, stock) plus the upstream's own product count, page count, sibling-category counts, and sort options. category comes from gucci-categories' own category field. page selects how many of the upstream's own batches to accumulate -- Gucci's own category pages page this way: requesting page=N returns every product from page 1 through page N combined (its own \"Load All\" button simply requests the last page), not a single page's worth. Defaults to 1 (the upstream's own first batch, 36 products); request page equal to the response's own pages_count to fetch a category's complete listing in one call.", + "operationId": "gucci-category", "parameters": [ { - "description": "Comma-separated OSM ids such as W34633854,N123,R456", + "description": "Category path from gucci-categories' own category field", "in": "query", - "name": "osm_ids", + "name": "category", "required": true, "type": "string", - "x-example": "W34633854" - }, - { - "description": "Preferred result language, forwarded to Nominatim", - "in": "query", - "name": "accept_language", - "type": "string" - }, - { - "description": "Include address details, defaults to true", - "in": "query", - "name": "addressdetails", - "type": "boolean" - }, - { - "description": "Include OSM extra tags", - "in": "query", - "name": "extratags", - "type": "boolean" + "x-example": "women/handbags-c-women-handbags" }, { - "description": "Include multilingual name details", + "description": "How many of the upstream's own batches to accumulate, defaults to 1 (see description)", "in": "query", - "name": "namedetails", - "type": "boolean" + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -375484,7 +448368,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/geocoding.lookupResponseDoc" + "$ref": "#/definitions/gucci.categoryResponseDoc" } }, "400": { @@ -375499,8 +448383,8 @@ "$ref": "#/definitions/app.Response" } }, - "502": { - "description": "Bad Gateway", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -375517,65 +448401,27 @@ "ApiKeyAuth": [] } ], - "summary": "Lookup Nominatim OSM ids", + "summary": "Browse a Gucci category listing", "tags": [ - "Geocoding" + "Gucci" ] } }, - "/geocoding/reverse": { + "/gucci/product": { "get": { "consumes": [ "application/json" ], - "description": "Returns the nearest OpenStreetMap place for the required `lat` and `lon`. `zoom` (0 to 18, default 18) sets the level of detail; `addressdetails` defaults to true, and `extratags`, `namedetails` and `accept_language` are optional. The place has its display name, category and type, OSM type and id, bounding box, importance and address parts. Out-of-range coordinates return `400`; no place found returns `404`.", - "operationId": "geocoding-reverse", + "description": "Returns product detail for one style: name, price, images, stock, and PDP attributes available from Gucci's current storefront, including description, breadcrumbs, SKU, colors, materials, and sizes. style_code comes from gucci-search's or gucci-category's own style_code field. PDP-only fields are omitted if the detail page is unavailable.", + "operationId": "gucci-product", "parameters": [ { - "description": "Latitude", - "in": "query", - "name": "lat", - "required": true, - "type": "number", - "x-example": 40.7484257 - }, - { - "description": "Longitude", + "description": "Product style code, from gucci-search's or gucci-category's own style_code field", "in": "query", - "name": "lon", + "name": "style_code", "required": true, - "type": "number", - "x-example": -73.98567 - }, - { - "description": "Nominatim address zoom, defaults to 18", - "in": "query", - "name": "zoom", - "type": "integer" - }, - { - "description": "Preferred result language, forwarded to Nominatim", - "in": "query", - "name": "accept_language", - "type": "string" - }, - { - "description": "Include address details, defaults to true", - "in": "query", - "name": "addressdetails", - "type": "boolean" - }, - { - "description": "Include OSM extra tags", - "in": "query", - "name": "extratags", - "type": "boolean" - }, - { - "description": "Include multilingual name details", - "in": "query", - "name": "namedetails", - "type": "boolean" + "type": "string", + "x-example": "A005Y8AAG231096" } ], "produces": [ @@ -375585,7 +448431,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/geocoding.reverseResponseDoc" + "$ref": "#/definitions/gucci.productResponseDoc" } }, "400": { @@ -375600,8 +448446,8 @@ "$ref": "#/definitions/app.Response" } }, - "502": { - "description": "Bad Gateway", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -375618,97 +448464,33 @@ "ApiKeyAuth": [] } ], - "summary": "Reverse geocode coordinates", + "summary": "Get a Gucci product", "tags": [ - "Geocoding" + "Gucci" ] } }, - "/geocoding/search": { + "/gucci/recommendations": { "get": { "consumes": [ "application/json" ], - "description": "Searches OpenStreetMap places by address. Pass either free-text `q` or structured fields (`street`, `city`, `county`, `state`, `country`, `postalcode`), not both. `limit` defaults to 10 and is clamped to 20; `countrycodes` restricts by ISO 3166-1 alpha-2 country. Each result has its display name, coordinates, category, type, bounding box, importance and address parts. No match returns `404`.", - "operationId": "geocoding-search", + "description": "Returns one Gucci recommendations shelf: product summaries (name, price, image, stock) from either a given product's own \"You May Also Like\" carousel (style_code set) or the site's general trending-items shelf (style_code omitted). style_code comes from gucci-search's or gucci-category's own style_code field.", + "operationId": "gucci-recommendations", "parameters": [ { - "description": "Free-text search query", - "in": "query", - "name": "q", - "type": "string" - }, - { - "description": "Structured street or house number", - "in": "query", - "name": "street", - "type": "string" - }, - { - "description": "Structured city", - "in": "query", - "name": "city", - "type": "string" - }, - { - "description": "Structured county", - "in": "query", - "name": "county", - "type": "string" - }, - { - "description": "Structured state", - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "Structured country", - "in": "query", - "name": "country", - "type": "string" - }, - { - "description": "Structured postal code", - "in": "query", - "name": "postalcode", - "type": "string" - }, - { - "description": "Maximum results, defaults to 10 and clamps to 20", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Comma-separated ISO 3166-1 alpha-2 country filters", - "in": "query", - "name": "countrycodes", - "type": "string" - }, - { - "description": "Preferred result language, forwarded to Nominatim", - "in": "query", - "name": "accept_language", - "type": "string" - }, - { - "description": "Include address details, defaults to true", - "in": "query", - "name": "addressdetails", - "type": "boolean" - }, - { - "description": "Include OSM extra tags", + "description": "Product style code to get related items for; omit for the site's general trending-items shelf instead", "in": "query", - "name": "extratags", - "type": "boolean" + "name": "style_code", + "type": "string", + "x-example": "A005Y8AAG231096" }, { - "description": "Include multilingual name details", + "description": "Maximum products to return, defaults to 10, maximum 20", "in": "query", - "name": "namedetails", - "type": "boolean" + "name": "max", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -375718,7 +448500,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/geocoding.searchResponseDoc" + "$ref": "#/definitions/gucci.recommendationsResponseDoc" } }, "400": { @@ -375727,14 +448509,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "502": { - "description": "Bad Gateway", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -375751,36 +448527,48 @@ "ApiKeyAuth": [] } ], - "summary": "Search Nominatim places", + "summary": "Gucci product recommendations", "tags": [ - "Geocoding" + "Gucci" ] } }, - "/ghanaweb/archive": { + "/gucci/search": { "get": { - "description": "Returns paginated canonical article URLs from one month sitemap. Discover accepted month values from ghanaweb-archive-months; the service only fetches child sitemap URLs derived from that official index.", - "operationId": "ghanaweb-archive", + "consumes": [ + "application/json" + ], + "description": "Searches Gucci's US product catalog by keyword using the storefront's public catalog. Results include card-level data and the live total count; per-product colors, materials, sizes, gender, and line are omitted when the search source does not provide them. A genuinely empty result returns a well-formed empty products list. The response's size_facets field lists live size values and counts -- pass one as size on a follow-up call to filter.", + "operationId": "gucci-search", "parameters": [ { - "description": "A YYYYMM value returned by ghanaweb-archive-months", + "description": "Search keyword", "in": "query", - "name": "month", + "name": "q", "required": true, "type": "string", - "x-example": "202609" + "x-example": "belt" }, { - "description": "Page number (default 1)", + "description": "One-based page number, defaults to 1", "in": "query", "name": "page", - "type": "integer" + "type": "integer", + "x-example": 1 }, { - "description": "Items per page, 1–100 (default 50)", + "description": "Results per page, defaults to 24, maximum 100", "in": "query", "name": "limit", - "type": "integer" + "type": "integer", + "x-example": 24 + }, + { + "description": "Filter to products listing this exact size as available. See size_facets for live values -- omit size to see all sizes first.", + "in": "query", + "name": "size", + "type": "string", + "x-example": "Gucci 90" } ], "produces": [ @@ -375790,7 +448578,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ghanawebArchiveResponseDoc" + "$ref": "#/definitions/gucci.searchResponseDoc" } }, "400": { @@ -375799,8 +448587,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -375817,16 +448605,29 @@ "ApiKeyAuth": [] } ], - "summary": "List GhanaWeb archive article URLs", + "summary": "Search Gucci's product catalog", "tags": [ - "GhanaWeb" + "Gucci" ] } }, - "/ghanaweb/archive/months": { + "/gucci/size-guide": { "get": { - "description": "Lists the `YYYYMM` months currently available in GhanaWeb's article archive, each with the time it was last updated. Use a returned month with the GhanaWeb archive endpoint; the set grows over time. It takes no parameters.", - "operationId": "ghanaweb-archive-months", + "consumes": [ + "application/json" + ], + "description": "Returns Gucci's own size-conversion chart for one product style, as a plain header row plus data rows. Not every style carries one -- a one-size accessory (a bag, a scarf) returns available: false with no headers/rows, a well-formed signal rather than an error. style_code comes from gucci-search's or gucci-category's own style_code field.", + "operationId": "gucci-size-guide", + "parameters": [ + { + "description": "Product style code", + "in": "query", + "name": "style_code", + "required": true, + "type": "string", + "x-example": "757892AACAG9055" + } + ], "produces": [ "application/json" ], @@ -375834,7 +448635,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ghanawebArchiveMonthsResponseDoc" + "$ref": "#/definitions/gucci.sizeGuideResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -375849,24 +448662,27 @@ "ApiKeyAuth": [] } ], - "summary": "Discover GhanaWeb archive months", + "summary": "Gucci product size chart", "tags": [ - "GhanaWeb" + "Gucci" ] } }, - "/ghanaweb/article": { + "/gucci/store": { "get": { - "description": "Returns public article metadata and readable body paragraphs. GhanaWeb's JSON-LD identifies the publisher rather than person authors, so authors are omitted.", - "operationId": "ghanaweb-article", + "consumes": [ + "application/json" + ], + "description": "Returns one Gucci store's full detail: name, phone, address, opening hours, and photos. slug comes from gucci-stores' own slug field.", + "operationId": "gucci-store", "parameters": [ { - "description": "Canonical GhanaWeb article URL ending in its numeric story ID", + "description": "Store slug, from gucci-stores' own slug field", "in": "query", - "name": "url", + "name": "slug", "required": true, "type": "string", - "x-example": "https://www.ghanaweb.com/GhanaHomePage/NewsArchive/NPP-Chairmanship-Race-How-APL-s-survey-made-a-near-perfect-prediction-2055134" + "x-example": "900-north-michigan-avenue" } ], "produces": [ @@ -375876,7 +448692,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/gucci.storeResponseDoc" } }, "400": { @@ -375885,6 +448701,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -375897,41 +448725,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get GhanaWeb article content", + "summary": "Get a Gucci store's detail", "tags": [ - "GhanaWeb" + "Gucci" ] } }, - "/ghanaweb/headlines": { + "/gucci/stores": { "get": { - "description": "Returns the article cards currently listed on one GhanaWeb section. `section` is required and takes one of 15 slugs such as `news`, `sports`, `crime`, `tabloid` or `regional`. Each item has its `title`, `url` and, when the card shows one, `image_url`. Summary, author and publication time are not returned.", - "operationId": "ghanaweb-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns Gucci's full US store-locator listing: name, address, phone, coordinates, product departments carried, and a link to book an in-store appointment for each location. Filter to stores carrying one department with department (e.g. jewelry, mens_shoes); omit for every store -- see the response's own departments field for the live list of department tags to filter by.", + "operationId": "gucci-stores", "parameters": [ { - "description": "Section slug from ghanaweb-sections", - "enum": [ - "news", - "sports", - "business", - "entertainment", - "africa", - "opinions", - "editorial", - "crime", - "regional", - "health", - "politics", - "tabloid", - "world", - "lifestyle", - "features" - ], + "description": "Department tag to filter to (case-insensitive substring match against the response's own departments field), e.g. jewelry, mens_shoes. Omit for every store.", "in": "query", - "name": "section", - "required": true, + "name": "department", "type": "string", - "x-example": "news" + "x-example": "jewelry" } ], "produces": [ @@ -375941,7 +448754,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/gucci.storesResponseDoc" } }, "400": { @@ -375950,6 +448763,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -375962,16 +448781,84 @@ "ApiKeyAuth": [] } ], - "summary": "Get GhanaWeb section headlines", + "summary": "List Gucci store locations", "tags": [ - "GhanaWeb" + "Gucci" ] } }, - "/ghanaweb/news": { + "/gucci/stores/search": { "get": { - "description": "Lists GhanaWeb's current stories across the site, with no parameters. Each item carries its headline as `title`, the canonical article `url` and the `published_at` time. No author, summary or image is returned.", - "operationId": "ghanaweb-news", + "consumes": [ + "application/json" + ], + "description": "Searches Gucci's public store-map GeoJSON feed for locations inside the requested viewport. market selects the storefront locale and localized labels; it does not filter results by country. The supported, live-verified market values are ca (English), fr (French), jp (Japanese), uk (English), and us (English). Coordinates and viewport bounds determine the returned stores. The Gucci site's text field geocodes in the browser and its name parameter does not filter this feed, so callers must provide bounds and a center (geocode a place before calling). Dateline-crossing bounds are not supported.", + "operationId": "gucci-store-search", + "parameters": [ + { + "description": "Gucci storefront locale; controls localization only, not geographic filtering", + "enum": [ + "ca", + "fr", + "jp", + "uk", + "us" + ], + "in": "query", + "name": "market", + "required": true, + "type": "string", + "x-example": "us" + }, + { + "description": "Viewport northern latitude", + "in": "query", + "name": "north", + "required": true, + "type": "number", + "x-example": 40.917705 + }, + { + "description": "Viewport western longitude", + "in": "query", + "name": "west", + "required": true, + "type": "number", + "x-example": -74.258843 + }, + { + "description": "Viewport southern latitude", + "in": "query", + "name": "south", + "required": true, + "type": "number", + "x-example": 40.476578 + }, + { + "description": "Viewport eastern longitude", + "in": "query", + "name": "east", + "required": true, + "type": "number", + "x-example": -73.700169 + }, + { + "description": "Viewport center latitude", + "in": "query", + "name": "latitude", + "required": true, + "type": "number", + "x-example": 40.7127753 + }, + { + "description": "Viewport center longitude", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -74.0059728 + } + ], "produces": [ "application/json" ], @@ -375979,7 +448866,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/gucci.storeSearchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -376000,16 +448893,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get GhanaWeb latest stories", + "summary": "Search Gucci stores in a map viewport", "tags": [ - "GhanaWeb" + "Gucci" ] } }, - "/ghanaweb/sections": { + "/gucci/suggest": { "get": { - "description": "Lists the 15 article sections GhanaWeb accepts for `ghanaweb-headlines`, from `news` and `sports` to `tabloid`, `lifestyle` and `features`. Each entry has a `slug`, display `name` and section `url`. Video and other non-article areas are left out.", - "operationId": "ghanaweb-sections", + "consumes": [ + "application/json" + ], + "description": "Returns Gucci's own search-box typeahead suggestions for a partial query. The current public suggestion source does not provide per-phrase result counts. Not product data -- pass a suggestion's query into gucci-search for results.", + "operationId": "gucci-suggest", + "parameters": [ + { + "description": "Partial search query", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "bel" + }, + { + "description": "Maximum suggestions to return, defaults to 5, maximum 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 5 + } + ], "produces": [ "application/json" ], @@ -376017,7 +448930,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/gucci.suggestResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -376026,24 +448957,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get GhanaWeb article sections", + "summary": "Gucci search-box suggestions", "tags": [ - "GhanaWeb" + "Gucci" ] } }, - "/ghanaweb/video": { + "/gulfnews/article": { "get": { - "description": "Returns metadata for one GhanaWeb TV video by its required numeric `id`: title, page URL, image URL, published and updated times, and the YouTube embed URL. The video file itself is not returned.", - "operationId": "ghanaweb-video", + "description": "Returns a Gulf News article by `url`, a canonical `gulfnews.com` link whose path ends in the `-1.` suffix. The response has the title, description, section, authors, lead image, publish and update times, and body `paragraphs`. Section and author pages are rejected, and `paywalled` is omitted because sampled articles were freely readable.", + "operationId": "gulfnews-article", "parameters": [ { - "description": "Numeric GhanaWeb TV video ID", + "description": "Canonical Gulf News article URL", "in": "query", - "name": "id", + "name": "url", "required": true, "type": "string", - "x-example": "138878" + "x-example": "https://gulfnews.com/business/aviation/air-india-flydubai-tie-up-opens-52-more-destinations-via-dubai-1.500686930" } ], "produces": [ @@ -376053,7 +448984,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ghanawebVideoResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -376080,16 +449011,32 @@ "ApiKeyAuth": [] } ], - "summary": "Get GhanaWeb TV video metadata", + "summary": "Get Gulf News article content", "tags": [ - "GhanaWeb" + "Gulf News" ] } }, - "/ghanaweb/video-sections": { + "/gulfnews/author": { "get": { - "description": "Lists the four GhanaWeb TV video categories accepted by `ghanaweb-videos`: `news`, `sports`, `business` and `entertainment`. Each entry has a `slug`, a display `name` and the category `url` on GhanaWeb. Takes no parameters.", - "operationId": "ghanaweb-video-sections", + "description": "Returns a Gulf News author profile, identified by `slug` (such as `nathaniel-lacsina`) or by a canonical `gulfnews.com/author/` `url`; provide exactly one. The response has the name, job title, bio and the single page of recent articles on the profile, each with `title`, `url` and sometimes a `summary`. Unknown authors return not found.", + "operationId": "gulfnews-author", + "parameters": [ + { + "description": "Author slug, e.g. nathaniel-lacsina", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "nathaniel-lacsina" + }, + { + "description": "Canonical gulfnews.com/author/ URL; alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://gulfnews.com/author/nathaniel-lacsina" + } + ], "produces": [ "application/json" ], @@ -376097,7 +449044,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ghanawebVideoSectionsResponseDoc" + "$ref": "#/definitions/publicnews.gulfNewsAuthorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -376106,30 +449071,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get GhanaWeb TV video sections", + "summary": "Get a Gulf News author profile", "tags": [ - "GhanaWeb" + "Gulf News" ] } }, - "/ghanaweb/videos": { + "/gulfnews/headlines": { "get": { - "description": "Returns current public video cards for one GhanaWeb TV category, including metadata and a canonical detail URL. This endpoint does not retrieve video media.", - "operationId": "ghanaweb-videos", + "description": "Returns current Gulf News headlines for one section. `section` is required and takes one of 19 slugs such as `latest-news`, `business`, `uae`, `sport`, `living-in-uae` or `your-money`; other values return an invalid-params error. Each item has a title and canonical article URL.", + "operationId": "gulfnews-headlines", "parameters": [ { - "description": "Video category from ghanaweb-video-sections", + "description": "Gulf News section slug", "enum": [ - "news", - "sports", + "latest-news", "business", - "entertainment" + "best-buys", + "uae", + "entertainment", + "world", + "sport", + "living-in-uae", + "lifestyle", + "opinion", + "travel", + "podcasts", + "special-reports", + "things-to-do", + "friday", + "the-kurator", + "uae-success-stories", + "photos", + "your-money" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "news" + "x-example": "latest-news" } ], "produces": [ @@ -376139,7 +449119,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ghanawebVideosResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -376160,55 +449140,56 @@ "ApiKeyAuth": [] } ], - "summary": "List GhanaWeb TV videos", + "summary": "Get Gulf News section headlines", "tags": [ - "GhanaWeb" + "Gulf News" ] } }, - "/github/org/{org}": { + "/gulfnews/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the public profile of a GitHub organization by its required `org` login, with fields such as name, description, blog URL, location, public repository count, followers and whether the organization is verified.", - "operationId": "github-org", - "parameters": [ - { - "description": "GitHub organization login", - "in": "path", - "name": "org", - "required": true, - "type": "string", - "x-example": "github" - } - ], + "description": "Returns the latest Gulf News stories across all sections, with no parameters. Each item has its title, canonical article URL, publication time and lead image. The listing carries no summary text.", + "operationId": "gulfnews-news", "produces": [ "application/json" ], "responses": { "200": { - "description": "Wrapped organization profile", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "400": { - "description": "Missing or invalid parameters", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "404": { - "description": "Organization not found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Upstream error or rate limit", + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Gulf News top stories", + "tags": [ + "Gulf News" + ] + } + }, + "/gulfnews/sections": { + "get": { + "description": "Lists the 19 top-level Gulf News sections accepted by `gulfnews-headlines`, such as `latest-news`, `business`, `uae`, `world`, `sport` and `things-to-do`. Each entry has a `slug`, display `name` and section `url`. Sub-sections such as `business/aviation` are not separate values; their stories appear under the parent.", + "operationId": "gulfnews-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -376217,74 +449198,33 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve a GitHub organization profile", + "summary": "Get Gulf News sections", "tags": [ - "GitHub" + "Gulf News" ] } }, - "/github/org/{org}/repos": { + "/gymshark/collections": { "get": { "consumes": [ "application/json" ], - "description": "Lists the public repositories of a GitHub organization, identified by the required `org` login. Filter with `type` (`all`, `public`, `forks`, `sources` or `member`), order with `sort` (`created`, `updated`, `pushed` or `full_name`) and `direction`, and page with `page` and `per_page` (max 100). Each repository has its name, description, language, stars and forks.", - "operationId": "github-org-repos", + "description": "Returns collections from Gymshark (https://row.gymshark.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", + "operationId": "gymshark-collections", "parameters": [ { - "description": "GitHub organization login", - "in": "path", - "name": "org", - "required": true, - "type": "string", - "x-example": "github" - }, - { - "description": "Sort field", - "enum": [ - "created", - "updated", - "pushed", - "full_name" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Sort direction", - "enum": [ - "asc", - "desc" - ], - "in": "query", - "name": "direction", - "type": "string" - }, - { - "description": "Repository type", - "enum": [ - "all", - "public", - "forks", - "sources", - "member" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "description": "Page number", + "description": "1-based page, defaults to 1", "in": "query", "name": "page", - "type": "integer" + "type": "integer", + "x-example": 1 }, { - "description": "Results per page (max 100)", + "description": "Maximum collections, defaults to 50 and supports up to 250", "in": "query", - "name": "per_page", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -376292,19 +449232,25 @@ ], "responses": { "200": { - "description": "Wrapped repository list", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Upstream error or rate limit", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -376315,35 +449261,41 @@ "ApiKeyAuth": [] } ], - "summary": "List a GitHub organization's public repositories", + "summary": "List Gymshark collections", "tags": [ - "GitHub" + "Gymshark" ] } }, - "/github/repo/{owner}/{repo}": { + "/gymshark/collections/{handle}/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns the public details of one GitHub repository, identified by the required `owner` and `repo`. Fields include the full name, description, main language, topics, stars, forks, watchers, open issues, license, default branch and last push time.", - "operationId": "github-repo", + "description": "Returns products from one Gymshark (https://row.gymshark.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", + "operationId": "gymshark-collection-products", "parameters": [ { - "description": "Repository owner (user or org login)", + "description": "Collection handle", "in": "path", - "name": "owner", + "name": "handle", "required": true, "type": "string", - "x-example": "torvalds" + "x-example": "collection-handle" }, { - "description": "Repository name", - "in": "path", - "name": "repo", - "required": true, - "type": "string", - "x-example": "linux" + "description": "1-based page, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Maximum products, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -376351,25 +449303,31 @@ ], "responses": { "200": { - "description": "Wrapped repository detail", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Repository not found", + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Upstream error or rate limit", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -376380,47 +449338,33 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve a GitHub repository", + "summary": "List Gymshark collection products", "tags": [ - "GitHub" + "Gymshark" ] } }, - "/github/repo/{owner}/{repo}/contributors": { + "/gymshark/pages": { "get": { "consumes": [ "application/json" ], - "description": "Lists the contributors to a GitHub repository, identified by the required `owner` and `repo`, ordered by number of contributions. Page with `page` and `per_page` (max 100). Each contributor has their login, id, contribution count, profile URL and account type.", - "operationId": "github-repo-contributors", + "description": "Lists Gymshark static pages, 50 per page by default (`limit` up to 250) with a 1-based `page`. Each has its handle, title, URL, plain-text content and timestamps. When `transport_mode` is `ssr_embedded`, items carry only `handle`, `url` and `updated_at`.", + "operationId": "gymshark-pages", "parameters": [ { - "description": "Repository owner (user or org login)", - "in": "path", - "name": "owner", - "required": true, - "type": "string", - "x-example": "torvalds" - }, - { - "description": "Repository name", - "in": "path", - "name": "repo", - "required": true, - "type": "string", - "x-example": "linux" - }, - { - "description": "Page number", + "description": "1-based page, defaults to 1", "in": "query", "name": "page", - "type": "integer" + "type": "integer", + "x-example": 1 }, { - "description": "Results per page (max 100)", + "description": "Maximum static pages, defaults to 50 and supports up to 250", "in": "query", - "name": "per_page", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -376428,19 +449372,25 @@ ], "responses": { "200": { - "description": "Wrapped contributor list", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/shopifybrands.pagesResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Upstream error or rate limit", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -376451,59 +449401,27 @@ "ApiKeyAuth": [] } ], - "summary": "List a repository's contributors", + "summary": "List Gymshark static pages", "tags": [ - "GitHub" + "Gymshark" ] } }, - "/github/repo/{owner}/{repo}/forks": { + "/gymshark/pages/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "Lists the public forks of a GitHub repository, identified by the required `owner` and `repo`. Order with `sort` (`newest`, `oldest`, `stargazers` or `watchers`) and page with `page` and `per_page` (max 100). Each fork has its full name, owner, stars, language and creation time.", - "operationId": "github-repo-forks", + "description": "Returns one Gymshark static page by its `handle`, such as `sports-bras`: title, handle, URL, plain-text content, and created, published and updated times. Page HTML is not returned. An unknown handle returns a 404. `id` is absent when `transport_mode` is `ssr_embedded`.", + "operationId": "gymshark-page", "parameters": [ { - "description": "Repository owner (user or org login)", - "in": "path", - "name": "owner", - "required": true, - "type": "string", - "x-example": "torvalds" - }, - { - "description": "Repository name", + "description": "Page handle", "in": "path", - "name": "repo", + "name": "handle", "required": true, "type": "string", - "x-example": "linux" - }, - { - "description": "Sort order", - "enum": [ - "newest", - "oldest", - "stargazers", - "watchers" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Page number", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Results per page (max 100)", - "in": "query", - "name": "per_page", - "type": "integer" + "x-example": "page-handle" } ], "produces": [ @@ -376511,19 +449429,31 @@ ], "responses": { "200": { - "description": "Wrapped fork list", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/shopifybrands.pageResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Upstream error or rate limit", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -376534,35 +449464,33 @@ "ApiKeyAuth": [] } ], - "summary": "List a repository's public forks", + "summary": "Get a Gymshark static page", "tags": [ - "GitHub" + "Gymshark" ] } }, - "/github/repo/{owner}/{repo}/languages": { + "/gymshark/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns the languages detected in a GitHub repository, identified by the required `owner` and `repo`, as language and byte-count pairs sorted by bytes, largest first.", - "operationId": "github-repo-languages", + "description": "Returns products from Gymshark's (https://row.gymshark.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", + "operationId": "gymshark-products", "parameters": [ { - "description": "Repository owner (user or org login)", - "in": "path", - "name": "owner", - "required": true, - "type": "string", - "x-example": "torvalds" + "description": "1-based page, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Repository name", - "in": "path", - "name": "repo", - "required": true, - "type": "string", - "x-example": "linux" + "description": "Maximum products, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -376570,19 +449498,25 @@ ], "responses": { "200": { - "description": "Wrapped language breakdown", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/shopifybrands.productsResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Upstream error or rate limit", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -376593,47 +449527,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve a repository's language breakdown", + "summary": "List Gymshark products", "tags": [ - "GitHub" + "Gymshark" ] } }, - "/github/repo/{owner}/{repo}/releases": { + "/gymshark/products/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "Lists the published releases of a GitHub repository, identified by the required `owner` and `repo`. Page with `page` and `per_page` (max 100). Each release has its tag name, title, URL, prerelease flag, publication time and author.", - "operationId": "github-repo-releases", + "description": "Returns product detail for one Gymshark (https://row.gymshark.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", + "operationId": "gymshark-product", "parameters": [ { - "description": "Repository owner (user or org login)", - "in": "path", - "name": "owner", - "required": true, - "type": "string", - "x-example": "torvalds" - }, - { - "description": "Repository name", + "description": "Product handle", "in": "path", - "name": "repo", + "name": "handle", "required": true, "type": "string", - "x-example": "linux" - }, - { - "description": "Page number", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Results per page (max 100)", - "in": "query", - "name": "per_page", - "type": "integer" + "x-example": "product-handle" } ], "produces": [ @@ -376641,19 +449555,31 @@ ], "responses": { "200": { - "description": "Wrapped release list", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/shopifybrands.productResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Upstream error or rate limit", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -376664,61 +449590,45 @@ "ApiKeyAuth": [] } ], - "summary": "List a repository's releases", + "summary": "Get a Gymshark product", "tags": [ - "GitHub" + "Gymshark" ] } }, - "/github/search/repositories": { + "/gymshark/products/{handle}/recommendations": { "get": { "consumes": [ "application/json" ], - "description": "Searches public GitHub repositories with the required GitHub search query `q`. Order with `sort` (`stars`, `forks`, `help-wanted-issues` or `updated`) and `order`, and page with `page` and `per_page` (max 100). The response has `total_count` and items with full name, owner, description, language, stars, forks, topics and license.", - "operationId": "github-search-repositories", + "description": "Returns recommended products for one Gymshark (https://row.gymshark.com) product handle. The storefront URL is fixed server-side.", + "operationId": "gymshark-product-recommendations", "parameters": [ { - "description": "GitHub repository search query", - "in": "query", - "name": "q", + "description": "Product handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "linux" + "x-example": "product-handle" }, { - "description": "Sort field", - "enum": [ - "stars", - "forks", - "help-wanted-issues", - "updated" - ], + "description": "Maximum products, defaults to 10 and supports up to 20", "in": "query", - "name": "sort", - "type": "string" + "name": "limit", + "type": "integer", + "x-example": 10 }, { - "description": "Sort order", + "description": "Recommendation intent. Allowed values: related, complementary", "enum": [ - "asc", - "desc" + "related", + "complementary" ], "in": "query", - "name": "order", - "type": "string" - }, - { - "description": "Page number", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Results per page (max 100)", - "in": "query", - "name": "per_page", - "type": "integer" + "name": "intent", + "type": "string", + "x-example": "related" } ], "produces": [ @@ -376726,19 +449636,31 @@ ], "responses": { "200": { - "description": "Wrapped repository search result", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Upstream error or rate limit", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -376749,60 +449671,42 @@ "ApiKeyAuth": [] } ], - "summary": "Search public GitHub repositories", + "summary": "List Gymshark product recommendations", "tags": [ - "GitHub" + "Gymshark" ] } }, - "/github/search/users": { + "/gymshark/sitemap/urls": { "get": { "consumes": [ "application/json" ], - "description": "Searches public GitHub user accounts with the required GitHub search query `q`. Order with `sort` (`followers`, `repositories` or `joined`) and `order`, and page with `page` and `per_page` (max 100). The response has `total_count` and items with login, id, profile URL, account type and match score.", - "operationId": "github-search-users", + "description": "Lists URL entries from Gymshark's sitemaps, filtered by `type` (`all` by default, `products`, `collections`, `pages`, `blogs`, `agentic_discovery` or `other`) and capped by `limit` (default 50, max 250). Each has its `loc`, type, handle, last modified date, change frequency and any images.", + "operationId": "gymshark-sitemap-urls", "parameters": [ { - "description": "GitHub user search query", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "torvalds" - }, - { - "description": "Sort field", - "enum": [ - "followers", - "repositories", - "joined" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Sort order", + "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", "enum": [ - "asc", - "desc" + "all", + "products", + "collections", + "pages", + "blogs", + "agentic_discovery", + "other" ], "in": "query", - "name": "order", - "type": "string" - }, - { - "description": "Page number", - "in": "query", - "name": "page", - "type": "integer" + "name": "type", + "type": "string", + "x-example": "products" }, { - "description": "Results per page (max 100)", + "description": "Maximum URL entries, defaults to 50 and supports up to 250", "in": "query", - "name": "per_page", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -376810,19 +449714,25 @@ ], "responses": { "200": { - "description": "Wrapped user search result", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Upstream error or rate limit", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -376833,56 +449743,43 @@ "ApiKeyAuth": [] } ], - "summary": "Search public GitHub users", + "summary": "List Gymshark sitemap URLs", "tags": [ - "GitHub" + "Gymshark" ] } }, - "/github/trending": { + "/gymshark/sitemaps": { "get": { "consumes": [ "application/json" ], - "description": "Lists the repositories currently trending on GitHub. Filter by programming `language` (such as `go` or `python`) and choose the window with `since` (`daily`, `weekly` or `monthly`). Each repository has its owner, name, URL, description, language, stars, forks and stars gained today.", - "operationId": "github-trending", - "parameters": [ - { - "description": "Programming language filter (e.g. go, python)", - "in": "query", - "name": "language", - "type": "string" - }, - { - "description": "Time window", - "enum": [ - "daily", - "weekly", - "monthly" - ], - "in": "query", - "name": "since", - "type": "string" - } - ], + "description": "Lists the child sitemaps in Gymshark's sitemap index. Each entry has its `loc` and a type of `products`, `collections`, `pages`, `blogs`, `agentic_discovery` or `other`. The type is worked out from the sitemap URL.", + "operationId": "gymshark-sitemaps", "produces": [ "application/json" ], "responses": { "200": { - "description": "Wrapped trending repository list", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" } }, "400": { - "description": "Invalid parameters", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Upstream error", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -376893,56 +449790,43 @@ "ApiKeyAuth": [] } ], - "summary": "List trending GitHub repositories", + "summary": "List Gymshark sitemaps", "tags": [ - "GitHub" + "Gymshark" ] } }, - "/github/trending/developers": { + "/gymshark/store": { "get": { "consumes": [ "application/json" ], - "description": "Lists the developers currently trending on GitHub. Filter by programming `language` (such as `go` or `python`) and choose the window with `since` (`daily`, `weekly` or `monthly`). Each developer has a username, display name, profile URL and their popular repository.", - "operationId": "github-trending-developers", - "parameters": [ - { - "description": "Programming language filter (e.g. go, python)", - "in": "query", - "name": "language", - "type": "string" - }, - { - "description": "Time window", - "enum": [ - "daily", - "weekly", - "monthly" - ], - "in": "query", - "name": "since", - "type": "string" - } - ], + "description": "Returns storefront metadata for Gymshark (https://row.gymshark.com). The storefront URL is fixed server-side, so no `url` parameter is accepted.", + "operationId": "gymshark-store", "produces": [ "application/json" ], "responses": { "200": { - "description": "Wrapped trending developer list", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/shopifybrands.storeResponseDoc" } }, "400": { - "description": "Invalid parameters", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Upstream error", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -376953,27 +449837,24 @@ "ApiKeyAuth": [] } ], - "summary": "List trending GitHub developers", + "summary": "Get Gymshark store metadata", "tags": [ - "GitHub" + "Gymshark" ] } }, - "/github/user/{username}": { + "/hbr/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a public GitHub user's profile plus user-published social links. Email is included only when the user has made it public on their profile.", - "operationId": "github-user", + "description": "Returns a public Harvard Business Review article's metadata and full body text from a canonical article URL. from_magazine flags articles originally published in the print magazine.", + "operationId": "hbr-article", "parameters": [ { - "description": "GitHub username", - "in": "path", - "name": "username", + "description": "Canonical hbr.org article URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "torvalds" + "x-example": "https://hbr.org/2026/09/is-your-strategic-plan-too-ambitious-or-not-ambitious-enough" } ], "produces": [ @@ -376981,25 +449862,31 @@ ], "responses": { "200": { - "description": "Wrapped user profile", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/hbr.articleResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "User not found", + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Upstream error or rate limit", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -377010,59 +449897,72 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve a GitHub user profile", + "summary": "Get Harvard Business Review article content", "tags": [ - "GitHub" + "Harvard Business Review" ] } }, - "/github/user/{username}/events": { + "/hbr/categories": { "get": { - "consumes": [ + "description": "Returns Harvard Business Review's full public topic taxonomy, grouped into Subject, Industry, and Geography. Use a topic's slug directly as the topic parameter on hbr-topic.", + "operationId": "hbr-categories", + "produces": [ "application/json" ], - "description": "Lists a GitHub user's recent public events, identified by the required `username`. Page with `page` and `per_page` (max 100). Each event has its id, event type such as `PushEvent`, repository name, timestamp and public flag.", - "operationId": "github-user-events", - "parameters": [ - { - "description": "GitHub username", - "in": "path", - "name": "username", - "required": true, - "type": "string", - "x-example": "torvalds" + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/hbr.categoriesResponseDoc" + } }, - { - "description": "Page number", - "in": "query", - "name": "page", - "type": "integer" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Results per page (max 100)", - "in": "query", - "name": "per_page", - "type": "integer" + "ApiKeyAuth": [] } ], + "summary": "Get Harvard Business Review topic taxonomy", + "tags": [ + "Harvard Business Review" + ] + } + }, + "/hbr/headlines": { + "get": { + "description": "Returns the latest items from Harvard Business Review's site-wide The Latest stream, with no parameters. Each item has its `title`, `url`, `summary`, `topic`, `content_type` (for example Digital Article), and `authors` and an `image_url` when available. Items carry no publication time.", + "operationId": "hbr-headlines", "produces": [ "application/json" ], "responses": { "200": { - "description": "Wrapped event list", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/hbr.headlinesResponseDoc" } }, - "400": { - "description": "Missing or invalid parameters", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Upstream error or rate limit", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -377073,39 +449973,24 @@ "ApiKeyAuth": [] } ], - "summary": "List a GitHub user's recent public activity", + "summary": "Get Harvard Business Review latest headlines", "tags": [ - "GitHub" + "Harvard Business Review" ] } }, - "/github/user/{username}/followers": { + "/hbr/topic": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the public accounts that follow a GitHub user, identified by the required `username`. Page with `page` and `per_page` (max 100). Each follower has their login, id, avatar URL, profile URL and account type.", - "operationId": "github-user-followers", + "description": "Returns the newest public Harvard Business Review articles on one topic archive page. topic is a \"/\" value -- see hbr-categories for the full known value space.", + "operationId": "hbr-topic", "parameters": [ { - "description": "GitHub username", - "in": "path", - "name": "username", + "description": "Harvard Business Review topic slug", + "in": "query", + "name": "topic", "required": true, "type": "string", - "x-example": "torvalds" - }, - { - "description": "Page number", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Results per page (max 100)", - "in": "query", - "name": "per_page", - "type": "integer" + "x-example": "subject/strategy" } ], "produces": [ @@ -377113,19 +449998,31 @@ ], "responses": { "200": { - "description": "Wrapped follower list", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/hbr.topicResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Upstream error or rate limit", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -377136,39 +450033,27 @@ "ApiKeyAuth": [] } ], - "summary": "List a GitHub user's followers", + "summary": "Get Harvard Business Review topic archive", "tags": [ - "GitHub" + "Harvard Business Review" ] } }, - "/github/user/{username}/following": { + "/healthgrades/autocomplete": { "get": { "consumes": [ "application/json" ], - "description": "Lists the public accounts a GitHub user follows, identified by the required `username`. Page with `page` and `per_page` (max 100). Each account has its login, id, avatar URL, profile URL and account type.", - "operationId": "github-user-following", + "description": "Returns dynamic provider, specialty, condition, procedure, and other suggestions for a free-text query. Group categories vary with the query and are returned as data, not accepted as a closed enum.", + "operationId": "healthgrades-autocomplete", "parameters": [ { - "description": "GitHub username", - "in": "path", - "name": "username", + "description": "Free-text provider, specialty, condition, or procedure query", + "in": "query", + "name": "term", "required": true, "type": "string", - "x-example": "torvalds" - }, - { - "description": "Page number", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Results per page (max 100)", - "in": "query", - "name": "per_page", - "type": "integer" + "x-example": "orthopedic surgeon" } ], "produces": [ @@ -377176,19 +450061,25 @@ ], "responses": { "200": { - "description": "Wrapped following list", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/healthgrades.suggestionsResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Upstream error or rate limit", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -377199,27 +450090,47 @@ "ApiKeyAuth": [] } ], - "summary": "List who a GitHub user follows", + "summary": "Get Healthgrades search suggestions", "tags": [ - "GitHub" + "Healthgrades" ] } }, - "/github/user/{username}/pinned": { + "/healthgrades/facilities/filters": { "get": { "consumes": [ "application/json" ], - "description": "Returns the repositories a GitHub user has pinned on their profile, identified by the required `username`. Each has its owner, name, URL, description, language, stars and forks. The list is empty when the user has pinned nothing.", - "operationId": "github-user-pinned", + "description": "Returns the sorts and filters for a Healthgrades facility search: distance values and, for hospitals, every specialty rating and award value accepted by /healthgrades/facilities/search.", + "operationId": "healthgrades-facilities-filters", "parameters": [ { - "description": "GitHub username", - "in": "path", - "name": "username", + "description": "Facility type", + "enum": [ + "hospital", + "pharmacy", + "group_practice", + "urgent_care" + ], + "in": "query", + "name": "type", "required": true, "type": "string", - "x-example": "torvalds" + "x-example": "hospital" + }, + { + "description": "Optional facility name or keyword", + "in": "query", + "name": "query", + "type": "string" + }, + { + "description": "City and state, or ZIP code", + "in": "query", + "name": "where", + "required": true, + "type": "string", + "x-example": "Boston, MA" } ], "produces": [ @@ -377227,19 +450138,25 @@ ], "responses": { "200": { - "description": "Wrapped pinned repository list", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/healthgrades.facilityFiltersResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Upstream error or rate limit", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -377250,72 +450167,96 @@ "ApiKeyAuth": [] } ], - "summary": "List a GitHub user's pinned repositories", + "summary": "List Healthgrades facility search filters", "tags": [ - "GitHub" + "Healthgrades" ] } }, - "/github/user/{username}/repos": { + "/healthgrades/facilities/search": { "get": { "consumes": [ "application/json" ], - "description": "Lists the public repositories of a GitHub user, identified by the required `username`. Filter with `type` (`all`, `owner` or `member`), order with `sort` (`created`, `updated`, `pushed` or `full_name`) and `direction`, and page with `page` and `per_page` (max 100). Each repository has its name, description, language, stars, forks, topics, fork flag and last push time.", - "operationId": "github-user-repos", + "description": "Returns one page of Healthgrades facility search results near a location for one facility type (hospital, pharmacy, group practice, or urgent care), with name, address, phone, distance, profile URL, affiliated provider and rating counts, hospital awards, and the filters available for the search. Requests use US egress because Healthgrades restricts content by region.", + "operationId": "healthgrades-facilities-search", "parameters": [ { - "description": "GitHub username", - "in": "path", - "name": "username", + "description": "Facility type", + "enum": [ + "hospital", + "pharmacy", + "group_practice", + "urgent_care" + ], + "in": "query", + "name": "type", "required": true, "type": "string", - "x-example": "torvalds" + "x-example": "hospital" }, { - "description": "Sort field", - "enum": [ - "created", - "updated", - "pushed", - "full_name" - ], + "description": "Optional facility name or keyword", "in": "query", - "name": "sort", - "type": "string" + "name": "query", + "type": "string", + "x-example": "Mass General" }, { - "description": "Sort direction", + "description": "City and state, or ZIP code", + "in": "query", + "name": "where", + "required": true, + "type": "string", + "x-example": "Boston, MA" + }, + { + "default": 1, + "description": "Result page (1-500, 20 results per page)", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Result order; patientsatisfaction is hospital-only and group_practice supports only distance", "enum": [ - "asc", - "desc" + "bestmatch", + "distance", + "patientsatisfaction" ], "in": "query", - "name": "direction", + "name": "sort", "type": "string" }, { - "description": "Repository type", + "description": "Search radius in miles", "enum": [ - "all", - "owner", - "member" + "0.5", + "1", + "5", + "10", + "25", + "50", + "100", + "national" ], "in": "query", - "name": "type", + "name": "distance", "type": "string" }, { - "description": "Page number", + "description": "Hospital specialty-rating value from /healthgrades/facilities/filters (type=hospital only)", "in": "query", - "name": "page", - "type": "integer" + "name": "rating", + "type": "string", + "x-example": "Bowel Obstruction|BLO" }, { - "description": "Results per page (max 100)", + "description": "Hospital award value from /healthgrades/facilities/filters (type=hospital only)", "in": "query", - "name": "per_page", - "type": "integer" + "name": "award", + "type": "string", + "x-example": "Critical Care Excellence Award|CCU" } ], "produces": [ @@ -377323,19 +450264,25 @@ ], "responses": { "200": { - "description": "Wrapped repository list", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/healthgrades.facilitySearchResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Upstream error or rate limit", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -377346,24 +450293,27 @@ "ApiKeyAuth": [] } ], - "summary": "List a GitHub user's public repositories", + "summary": "Search Healthgrades hospitals, pharmacies, group practices, and urgent care", "tags": [ - "GitHub" + "Healthgrades" ] } }, - "/gizmodo/article": { + "/healthgrades/facility": { "get": { - "description": "Returns public Gizmodo article metadata and body paragraphs from a canonical article URL. Gizmodo articles are free to read, so the full body is returned.", - "operationId": "gizmodo-article", + "consumes": [ + "application/json" + ], + "description": "Returns one Healthgrades pharmacy, urgent care center, or group practice profile; the type (pharmacy, urgent_care, or group_practice) is inferred from the URL. Pharmacies: opening hours, services (for example compounding, immunizations, Medicare), and nearby pharmacies. Urgent care centers: opening hours and aggregated visitor answers to amenity questions. Group practices: specialties, providers with specialty and rating, medical services offered, language services, office locations with phones and coordinates, FAQs, and nearby offices. All types include name, address, and phone. Patient-authored reviews are not returned. Requests use US egress because Healthgrades restricts content by region.", + "operationId": "healthgrades-facility", "parameters": [ { - "description": "Canonical Gizmodo article URL", + "description": "Healthgrades pharmacy, urgent care, or group practice profile URL from /healthgrades/facilities/search", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://gizmodo.com/meta-muse-charm-ai-keychain-2000816515" + "x-example": "https://www.healthgrades.com/pharmacy/walgreens-12805-pas6pu" } ], "produces": [ @@ -377373,7 +450323,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/healthgrades.facilityResponseDoc" } }, "400": { @@ -377388,6 +450338,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -377400,24 +450356,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Gizmodo article content", + "summary": "Get a Healthgrades pharmacy, urgent care, or group practice profile", "tags": [ - "Gizmodo" + "Healthgrades" ] } }, - "/gizmodo/author": { + "/healthgrades/health-article": { "get": { - "description": "Returns a Gizmodo author's name, job title, biography, headshot, social links, and most recent articles from a canonical author URL.", - "operationId": "gizmodo-author", + "consumes": [ + "application/json" + ], + "description": "Returns one Healthgrades Health A-Z or drug article: headline, description, authors, medical reviewers, published and modified dates, image, the conditions the article is tagged with, and the article body as headed sections of paragraphs and lists. Works for standard, chaptered, and slideshow articles. Requests use US egress because Healthgrades restricts content by region.", + "operationId": "healthgrades-health-article", "parameters": [ { - "description": "Canonical Gizmodo author URL", + "description": "Article URL from /healthgrades/health-articles", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://gizmodo.com/author/jpero" + "x-example": "https://resources.healthgrades.com/drugs/atenolol" } ], "produces": [ @@ -377427,7 +450386,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.gizmodoAuthorResponseDoc" + "$ref": "#/definitions/healthgrades.healthArticleResponseDoc" } }, "400": { @@ -377442,6 +450401,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -377454,75 +450419,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Gizmodo author profile", + "summary": "Get a Healthgrades Health A-Z article", "tags": [ - "Gizmodo" + "Healthgrades" ] } }, - "/gizmodo/headlines": { + "/healthgrades/health-articles": { "get": { - "description": "Returns the latest Gizmodo headlines for one section. `section` is required and takes a slug such as `gadgets`, `artificial-intelligence`, `io9`, `science` or `deals`; any other value returns an invalid-params error. Each item has its title, URL, summary, publication time, author and image. Use `gizmodo-sections` to list the slugs.", - "operationId": "gizmodo-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns one page of a Healthgrades Health A-Z topic's articles (slug, URL, and last-modified date), most recently modified first, with total and total pages. Use topic=drugs for drug articles. Use an article URL with /healthgrades/health-article.", + "operationId": "healthgrades-health-articles", "parameters": [ { - "description": "Gizmodo section slug", - "enum": [ - "tech", - "artificial-intelligence", - "commerce", - "crime", - "cryptocurrencies", - "culture", - "gadgets", - "internet", - "politics", - "privacy-and-security", - "robots", - "social-media", - "sploid", - "tech-policy", - "transportation", - "science", - "biology", - "health", - "human-history", - "physics", - "space", - "io9", - "anime", - "books-comics", - "corporate-culture", - "games", - "io9-reviews", - "movies", - "television", - "theme-parks-destinations", - "toys-and-collectibles", - "trailer-frenzy", - "earther", - "climate-change", - "conservation", - "earth-science", - "energy", - "environmental-justice", - "reviews", - "desktops", - "gaming", - "headphones", - "home-entertainment", - "laptops", - "other-gadgets", - "phones", - "tablets", - "wearables", - "deals" - ], + "description": "Topic slug from /healthgrades/health-topics", "in": "query", - "name": "section", + "name": "topic", "required": true, "type": "string", - "x-example": "tech" + "x-example": "diabetes" + }, + { + "default": 1, + "description": "Page number, starting at 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "default": 50, + "description": "Articles per page (1-200)", + "in": "query", + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -377532,7 +450463,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/healthgrades.healthArticlesResponseDoc" } }, "400": { @@ -377541,6 +450472,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -377553,16 +450496,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Gizmodo section headlines", + "summary": "List Healthgrades Health A-Z articles in a topic", "tags": [ - "Gizmodo" + "Healthgrades" ] } }, - "/gizmodo/news": { + "/healthgrades/health-topics": { "get": { - "description": "Returns Gizmodo's current top stories from the main site-wide listing, with no parameters. Each item has its title, URL, summary, publication time, author and lead image.", - "operationId": "gizmodo-news", + "consumes": [ + "application/json" + ], + "description": "Returns every topic of Healthgrades' Health A-Z library (conditions, body systems, treatments, and wellness topics) with its article count, last-modified date, and topic hub URL where one exists, plus the drugs topic for Healthgrades' drug articles. Use a slug with /healthgrades/health-articles.", + "operationId": "healthgrades-health-topics", "produces": [ "application/json" ], @@ -377570,7 +450516,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/healthgrades.healthTopicsResponseDoc" } }, "429": { @@ -377591,50 +450537,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Gizmodo top stories", + "summary": "List Healthgrades Health A-Z topics", "tags": [ - "Gizmodo" + "Healthgrades" ] } }, - "/gizmodo/sections": { + "/healthgrades/hospital": { "get": { - "description": "Returns the Gizmodo section inventory: its five top-level verticals (Tech, Science, io9, Earther, Reviews), their sub-topics, and Deals, each linking to its public RSS feed. Every slug is accepted by the headlines endpoint.", - "operationId": "gizmodo-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Gizmodo sections", - "tags": [ - "Gizmodo" - ] - } - }, - "/globalnews/article": { - "get": { - "description": "Returns one Global News article by `url`, a canonical `globalnews.ca` link of the form `/news///` or `/the-curator///`. The response has the title, description, section, authors, lead image, publish and update times, the body as `paragraphs`, and a `paywalled` flag.", - "operationId": "globalnews-article", + "description": "Returns one Healthgrades hospital profile: hospital-wide and specialty awards with years, clinical outcome ratings by service line (procedure or condition, measure, outcome rating, and 1-5 stars), patient-experience measures with national comparisons, address, and phone. Patient-authored reviews are not returned. Requests use US egress because Healthgrades restricts content by region.", + "operationId": "healthgrades-hospital", "parameters": [ { - "description": "Canonical Global News article URL", + "description": "Healthgrades hospital profile URL from /healthgrades/facilities/search", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://globalnews.ca/news/12070709/example-article-slug/" + "x-example": "https://www.healthgrades.com/hospital/massachusetts-general-hospital-60c282" } ], "produces": [ @@ -377644,7 +450567,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/healthgrades.hospitalResponseDoc" } }, "400": { @@ -377659,6 +450582,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -377671,24 +450600,145 @@ "ApiKeyAuth": [] } ], - "summary": "Get Global News article content", + "summary": "Get a Healthgrades hospital profile", "tags": [ - "Global News" + "Healthgrades" ] } }, - "/globalnews/author": { + "/healthgrades/hospital-awards": { "get": { - "description": "Returns a Global News author profile by `url`, a canonical `https://globalnews.ca/author//` link. The response has the author's `name`, `biography`, `image_url` and a list of recent articles. `title`, `image_url` and `biography` appear only if the author page shows them, and each article's `published_at` is relative text such as `2 hours` or `Sep 16`, not a timestamp.", - "operationId": "globalnews-author", + "consumes": [ + "application/json" + ], + "description": "Returns one page (20 hospitals) of a Healthgrades hospital quality award list: America's Best Hospitals (top 50, 100, or 250), Specialty Excellence (by specialty, top 50 or 100), Patient Safety Excellence, Outstanding Patient Experience, Ob-Gyn Care, or Specialty State Rankings. Filter by year, state, city, specialty, and Ob-Gyn award type; sort by name or, with latitude and longitude, by distance. Each hospital includes its profile URL (for /healthgrades/hospital), address, coordinates, phone, and every award it holds with years. Read accepted filter values from /healthgrades/hospital-awards/filters. Requests use US egress because Healthgrades restricts content by region.", + "operationId": "healthgrades-hospital-awards", "parameters": [ { - "description": "Canonical Global News author URL", + "description": "Award list", + "enum": [ + "americas-best-hospitals", + "specialty-excellence-americas-best-care", + "patient-safety-excellence-award", + "outstanding-patient-experience-award", + "ob-gyn-care-excellence-awards", + "state-rankings" + ], "in": "query", - "name": "url", + "name": "award", "required": true, "type": "string", - "x-example": "https://globalnews.ca/author/jane-doe/" + "x-example": "americas-best-hospitals" + }, + { + "description": "Award year from the filters (defaults to the latest)", + "in": "query", + "name": "year", + "type": "string", + "x-example": "2026" + }, + { + "description": "State slug from the filters", + "in": "query", + "name": "state", + "type": "string", + "x-example": "texas" + }, + { + "description": "City slug from the filters for the state (requires state)", + "in": "query", + "name": "city", + "type": "string", + "x-example": "houston" + }, + { + "description": "America's Best Hospitals list size (award=americas-best-hospitals)", + "enum": [ + "top50", + "top100", + "top250" + ], + "in": "query", + "name": "list", + "type": "string" + }, + { + "description": "Specialty Excellence list size (award=specialty-excellence-americas-best-care)", + "enum": [ + "top50", + "top100" + ], + "in": "query", + "name": "list_category", + "type": "string" + }, + { + "description": "Specialty code (award=specialty-excellence-americas-best-care or state-rankings)", + "enum": [ + "BAR", + "CVO", + "CWS", + "PCI", + "NSG", + "CCU", + "GIO", + "GSO", + "ORJ", + "NSC", + "ORT", + "OJO", + "OOR", + "OBP", + "PRS", + "PUL", + "ORS", + "NEU", + "OVSC", + "VAS" + ], + "in": "query", + "name": "specialty", + "type": "string" + }, + { + "description": "Ob-Gyn award (award=ob-gyn-care-excellence-awards): GYS gynecologic surgery, LAB labor and delivery, OBG obstetrics and gynecology", + "enum": [ + "GYS", + "LAB", + "OBG" + ], + "in": "query", + "name": "ob_gyn_type", + "type": "string" + }, + { + "description": "Result order; distance requires latitude and longitude", + "enum": [ + "name", + "distance" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Latitude for distance sorting", + "in": "query", + "name": "latitude", + "type": "number" + }, + { + "description": "Longitude for distance sorting", + "in": "query", + "name": "longitude", + "type": "number" + }, + { + "default": 1, + "description": "Page number (20 hospitals per page)", + "in": "query", + "name": "page", + "type": "integer" } ], "produces": [ @@ -377698,7 +450748,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.globalnewsAuthorResponseDoc" + "$ref": "#/definitions/healthgrades.hospitalAwardsResponseDoc" } }, "400": { @@ -377713,6 +450763,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -377725,59 +450781,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Global News author profile", + "summary": "List Healthgrades hospital award recipients", "tags": [ - "Global News" + "Healthgrades" ] } }, - "/globalnews/headlines": { + "/healthgrades/hospital-awards/filters": { "get": { - "description": "Returns recent Global News headlines for one section. `section` is required and takes a slug such as `canada`, `world`, `money`, `us-news`, `the-curator` or a local-station slug like `toronto` or `calgary`. Each item has its title and URL, plus summary, author, publication time and image when the outlet provides them.", - "operationId": "globalnews-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns the filter values Healthgrades offers for one hospital award list: list sizes, specialty codes, Ob-Gyn award types, award years, states with recipients, and (with a state) cities with recipient counts, plus the sort options. Each group's param names the /healthgrades/hospital-awards parameter that accepts its values.", + "operationId": "healthgrades-hospital-award-filters", "parameters": [ { - "description": "Global News RSS section slug", + "description": "Award list", "enum": [ - "world", - "canada", - "politics", - "money", - "health", - "entertainment", - "environment", - "lifestyle", - "perspectives", - "sports", - "commentary", - "us-news", - "the-curator", - "national", - "barrie", - "bc", - "calgary", - "edmonton", - "guelph", - "halifax", - "hamilton", - "kingston", - "lethbridge", - "london", - "montreal", - "new-brunswick", - "okanagan", - "ottawa", - "peterborough", - "regina", - "saskatoon", - "toronto", - "winnipeg" + "americas-best-hospitals", + "specialty-excellence-americas-best-care", + "patient-safety-excellence-award", + "outstanding-patient-experience-award", + "ob-gyn-care-excellence-awards", + "state-rankings" ], "in": "query", - "name": "section", + "name": "award", "required": true, "type": "string", - "x-example": "world" + "x-example": "americas-best-hospitals" + }, + { + "description": "State slug, to list its cities", + "in": "query", + "name": "state", + "type": "string", + "x-example": "california" + }, + { + "description": "Award year", + "in": "query", + "name": "year", + "type": "string", + "x-example": "2026" } ], "produces": [ @@ -377787,7 +450833,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/healthgrades.hospitalAwardFiltersResponseDoc" } }, "400": { @@ -377796,6 +450842,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -377808,16 +450866,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Global News section headlines", + "summary": "List Healthgrades hospital award filters", "tags": [ - "Global News" + "Healthgrades" ] } }, - "/globalnews/news": { + "/healthgrades/locations": { "get": { - "description": "Returns the latest top stories from Global News (globalnews.ca), with no parameters. Each item has its title and URL, plus summary, author, publication time and image when the outlet provides them, so it works as a quick check on what the outlet is leading with.", - "operationId": "globalnews-news", + "consumes": [ + "application/json" + ], + "description": "Returns location autocomplete suggestions for a city, state, ZIP code, or other free-text location. Private upstream metadata and coordinates are omitted.", + "operationId": "healthgrades-locations", + "parameters": [ + { + "description": "City, state, or ZIP code", + "in": "query", + "name": "term", + "required": true, + "type": "string", + "x-example": "Boston" + } + ], "produces": [ "application/json" ], @@ -377825,7 +450896,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/healthgrades.suggestionsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -377846,50 +450923,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Global News top stories", + "summary": "Get Healthgrades location suggestions", "tags": [ - "Global News" + "Healthgrades" ] } }, - "/globalnews/sections": { + "/healthgrades/physician": { "get": { - "description": "Returns the public Global News RSS section inventory used by the headlines endpoint, covering topical sections and every regional/city hub with its own feed.", - "operationId": "globalnews-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Global News RSS sections", - "tags": [ - "Global News" - ] - } - }, - "/globeandmail/article": { - "get": { - "description": "Returns one public Globe and Mail article's metadata and full body paragraphs from a canonical article URL. The Globe and Mail runs a metered paywall on most staff-bylined stories; those return a 403 permission error rather than a truncated or fabricated body -- see the endpoint markdown for the exact detection method.", - "operationId": "globeandmail-article", + "description": "Returns public professional profile fields and practice locations for one Healthgrades physician. Patient-authored review text is not returned. Requests use US egress because Healthgrades restricts some content by region.", + "operationId": "healthgrades-physician", "parameters": [ { - "description": "Canonical Globe and Mail article URL", + "description": "Canonical Healthgrades physician profile URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.theglobeandmail.com/canada/article-example-story/" + "x-example": "https://www.healthgrades.com/physician/dr-example-abcde" } ], "produces": [ @@ -377899,7 +450953,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/globeandmail.articleResponseDoc" + "$ref": "#/definitions/healthgrades.physicianResponseDoc" } }, "400": { @@ -377908,12 +450962,6 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "404": { "description": "Not Found", "schema": { @@ -377938,24 +450986,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Globe and Mail article's content", + "summary": "Get a Healthgrades physician profile", "tags": [ - "GlobeAndMail" + "Healthgrades" ] } }, - "/globeandmail/author": { + "/healthgrades/physicians/filters": { "get": { - "description": "Returns one Globe and Mail reporter's public profile: name, job title, location, biography, headshot, contact/social links, and their recent articles from a canonical author URL.", - "operationId": "globeandmail-author", + "consumes": [ + "application/json" + ], + "description": "Returns every filter available for a Healthgrades provider search at a location, with accepted values, labels, and result counts: insurers (with plan IDs), gender, distance, age, availability, language, patient rating, clinical focus, affiliated hospitals, practicing specialties, and affirming care. Insurer, language, clinical focus, hospital, and specialty values depend on the query and location. Each group's param names the /healthgrades/physicians/search parameter that accepts its values.", + "operationId": "healthgrades-physicians-filters", "parameters": [ { - "description": "Canonical Globe and Mail author URL", + "description": "Specialty, condition, procedure, or provider name", "in": "query", - "name": "url", + "name": "query", "required": true, "type": "string", - "x-example": "https://www.theglobeandmail.com/authors/example-reporter/" + "x-example": "Cardiology" + }, + { + "description": "City and state, or ZIP code", + "in": "query", + "name": "where", + "type": "string", + "x-example": "Boston, MA" } ], "produces": [ @@ -377965,7 +451023,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/globeandmail.authorResponseDoc" + "$ref": "#/definitions/healthgrades.physicianFiltersResponseDoc" } }, "400": { @@ -377974,12 +451032,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -377998,38 +451050,164 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Globe and Mail reporter profile", + "summary": "List Healthgrades physician search filters", "tags": [ - "GlobeAndMail" + "Healthgrades" ] } }, - "/globeandmail/headlines": { + "/healthgrades/physicians/search": { "get": { - "description": "Returns the current public feed for one Globe and Mail section: each story's title, canonical URL, summary, author, publication time, and lead image. Section must be one of the slugs returned by /globeandmail/sections: `canada`, `world`, `business`, `investing`, `personal-finance`, `politics`, `opinion`, `culture`, `sports`, `life`, `real-estate`, `drive`.", - "operationId": "globeandmail-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns one page of Healthgrades provider search results for a specialty, condition, procedure, or provider name near a location, with each provider's NPI, specialty, office, aggregate patient rating, accepted insurers, and profile URL, plus the filters available for the search. Closed-set filters accept the listed values; insurance, insurance_plan, language, clinical_focus, affiliated_hospital, and specialty accept values returned in the filters for the same query/where. List filters take comma-separated values. Requests use US egress because Healthgrades restricts content by region. Patient review text is not returned.", + "operationId": "healthgrades-physicians-search", "parameters": [ { - "description": "Globe and Mail section slug from /globeandmail/sections", + "description": "Specialty, condition, procedure, or provider name", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "Cardiology" + }, + { + "description": "City and state, or ZIP code", + "in": "query", + "name": "where", + "type": "string", + "x-example": "Boston, MA" + }, + { + "default": 1, + "description": "Result page (1-500, 20 results per page)", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "default": "bestmatch", + "description": "Result order", "enum": [ - "canada", - "world", - "business", - "investing", - "personal-finance", - "politics", - "opinion", - "culture", - "sports", - "life", - "real-estate", - "drive" + "bestmatch", + "distance", + "ratings" ], "in": "query", - "name": "section", - "required": true, + "name": "sort", + "type": "string" + }, + { + "description": "Provider gender", + "enum": [ + "F", + "M" + ], + "in": "query", + "name": "gender", + "type": "string" + }, + { + "description": "Search radius in miles", + "enum": [ + "1", + "5", + "10", + "25", + "50", + "100", + "national" + ], + "in": "query", + "name": "distance", + "type": "string" + }, + { + "description": "Comma-separated provider age bands", + "enum": [ + "*-40", + "41-50", + "51-60", + "61-70", + "71-*" + ], + "in": "query", + "name": "age", + "type": "string" + }, + { + "description": "Comma-separated availability filters", + "enum": [ + "today", + "tomorrow", + "nextTwoWeeks", + "online", + "acceptsNewPatients", + "telehealth" + ], + "in": "query", + "name": "availability", + "type": "string" + }, + { + "description": "Minimum patient-satisfaction stars (5 means exactly 5)", + "enum": [ + "1", + "2", + "3", + "4", + "5" + ], + "in": "query", + "name": "rating", + "type": "string" + }, + { + "description": "Comma-separated insurer codes from the insurance filter", + "in": "query", + "name": "insurance", "type": "string", - "x-example": "canada" + "x-example": "HPY00006F7" + }, + { + "description": "Comma-separated plan IDs from an insurer's plans (requires insurance)", + "in": "query", + "name": "insurance_plan", + "type": "string", + "x-example": "HPT0000407" + }, + { + "description": "Comma-separated language codes from the language filter", + "in": "query", + "name": "language", + "type": "string", + "x-example": "spanish" + }, + { + "description": "Comma-separated clinical focus codes from the clinical_focus filter", + "in": "query", + "name": "clinical_focus", + "type": "string" + }, + { + "description": "Comma-separated hospital codes from the affiliated_hospital filter", + "in": "query", + "name": "affiliated_hospital", + "type": "string" + }, + { + "description": "Comma-separated practicing-specialty codes from the specialty filter", + "in": "query", + "name": "specialty", + "type": "string", + "x-example": "ps1027" + }, + { + "description": "Only providers marked LGBTQ+ affirming", + "in": "query", + "name": "affirming_care", + "type": "boolean" } ], "produces": [ @@ -378039,7 +451217,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/globeandmail.headlinesResponseDoc" + "$ref": "#/definitions/healthgrades.physicianSearchResponseDoc" } }, "400": { @@ -378048,12 +451226,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -378072,16 +451244,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get the latest stories in a Globe and Mail section", + "summary": "Search Healthgrades physicians", "tags": [ - "GlobeAndMail" + "Healthgrades" ] } }, - "/globeandmail/news": { + "/healthgrades/specialties": { "get": { - "description": "Returns The Globe and Mail's current public top-stories feed: each story's title, canonical URL, summary, author, publication time, and lead image.", - "operationId": "globeandmail-news", + "consumes": [ + "application/json" + ], + "description": "Returns every specialty name and directory URL shown on Healthgrades' public A-Z specialty directory.", + "operationId": "healthgrades-specialties", "produces": [ "application/json" ], @@ -378089,7 +451264,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/globeandmail.newsResponseDoc" + "$ref": "#/definitions/healthgrades.specialtiesResponseDoc" } }, "429": { @@ -378110,16 +451285,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get the latest Globe and Mail stories", + "summary": "List Healthgrades physician specialties", "tags": [ - "GlobeAndMail" + "Healthgrades" ] } }, - "/globeandmail/sections": { + "/healthgrades/top-searches": { "get": { - "description": "Lists every Globe and Mail section accepted by /globeandmail/headlines, with its slug, display name, and landing-page URL. This is the full public, RSS-backed section taxonomy from the site's primary navigation.", - "operationId": "globeandmail-sections", + "consumes": [ + "application/json" + ], + "description": "Returns the popular specialty searches Healthgrades currently suggests, in `groups`. Each group has a category, a title such as Popular Healthcare Specialties, and suggestions with a label and value. The set changes over time and is not a fixed list.", + "operationId": "healthgrades-top-searches", "produces": [ "application/json" ], @@ -378127,7 +451305,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/globeandmail.sectionsResponseDoc" + "$ref": "#/definitions/healthgrades.suggestionsResponseDoc" } }, "429": { @@ -378148,24 +451326,65 @@ "ApiKeyAuth": [] } ], - "summary": "List Globe and Mail sections", + "summary": "List popular Healthgrades searches", "tags": [ - "GlobeAndMail" + "Healthgrades" ] } }, - "/gmanews/article": { + "/hermes/categories": { "get": { - "description": "Returns public GMA News Online article metadata and body paragraphs from a canonical article URL. GMA News articles are free to read; no content is paywalled.", - "operationId": "gmanews-article", + "consumes": [ + "application/json" + ], + "description": "Returns every browsable Hermès category for a market: the category code hermes-category accepts, its display name, its page path and absolute URL, its parent code and its depth in the tree. This is the discovery endpoint for hermes-category's category parameter, so every accepted value is obtainable from this API rather than by reading the website. Editorial and story tiles that carry no browsable category page are excluded, so every code returned is one hermes-category will accept.", + "operationId": "hermes-categories", "parameters": [ { - "description": "Canonical GMA News article URL", + "default": "us_en", + "description": "Market and language. One of: at_de, au_en, be_en, be_fr, br_pt, ca_en, ca_fr, ch_de, ch_fr, cz_en, de_de, dh_en, dk_en, es_es, fi_en, fr_fr, gr_en, hk_en, ie_en, it_it, jp_ja, kr_ko, lu_fr, mo_en, mx_es, my_en, nl_en, no_en, pl_en, pt_en, ri_en, se_en, sg_en, th_en, tw_zh, uk_en, us_en", + "enum": [ + "at_de", + "au_en", + "be_en", + "be_fr", + "br_pt", + "ca_en", + "ca_fr", + "ch_de", + "ch_fr", + "cz_en", + "de_de", + "dh_en", + "dk_en", + "es_es", + "fi_en", + "fr_fr", + "gr_en", + "hk_en", + "ie_en", + "it_it", + "jp_ja", + "kr_ko", + "lu_fr", + "mo_en", + "mx_es", + "my_en", + "nl_en", + "no_en", + "pl_en", + "pt_en", + "ri_en", + "se_en", + "sg_en", + "th_en", + "tw_zh", + "uk_en", + "us_en" + ], "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.gmanetwork.com/news/topstories/world/1003638/at-un-netanyahu-defends-israel-as-delegates-storm-out/story/" + "name": "locale", + "type": "string" } ], "produces": [ @@ -378175,7 +451394,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/hermes.categoriesResponseDoc" } }, "400": { @@ -378184,8 +451403,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -378202,70 +451421,93 @@ "ApiKeyAuth": [] } ], - "summary": "Get GMA News article content", + "summary": "List Hermès category codes", "tags": [ - "GMA News" + "Hermes" ] } }, - "/gmanews/headlines": { + "/hermes/category": { "get": { - "description": "Returns up to 15 of the newest GMA News Online stories for one section, newest first. `section` is required and takes one of 44 slugs such as `topstories-world`, `money-economy`, `sports-nba` or `showbiz`. Each item has `title`, `url`, `summary`, `published_at` (UTC) and `image_url`. Quiet sections can return only a few items. An invalid or missing `section` returns 400.", - "operationId": "gmanews-headlines", + "consumes": [ + "application/json" + ], + "description": "Browses one Hermès product category and returns a page of products (SKU, title, price with currency, colour, size, stock, images) plus the facet groups Hermès offers for that category, and the category's own title and description. The category parameter takes a category code from hermes-categories, which is the discovery endpoint for every accepted value. Page size is fixed at 48 by Hermès and cannot be changed. Prices are returned with the ISO-4217 currency for the selected market, since Hermès itself publishes bare numbers.", + "operationId": "hermes-category", "parameters": [ { - "description": "GMA News section slug", - "enum": [ - "topstories", - "topstories-metro", - "topstories-nation", - "topstories-opinion", - "topstories-regions", - "topstories-specialreports", - "topstories-ulatfilipino", - "topstories-world", - "money", - "money-companies", - "money-economy", - "money-motoring", - "money-personalfinance", - "sports", - "sports-basketball", - "sports-boxing", - "sports-football", - "sports-nba", - "sports-othersports", - "sports-volleyball", - "showbiz", - "showbiz-chikaminute", - "showbiz-showbizabroad", - "lifestyle", - "lifestyle-artandculture", - "lifestyle-familyandrelationships", - "lifestyle-food", - "lifestyle-healthandwellness", - "lifestyle-hobbiesandactivities", - "lifestyle-shoppingandfashion", - "lifestyle-travel", - "scitech", - "scitech-science", - "scitech-technology", - "pinoyabroad", - "pinoyabroad-dispatch", - "pinoyabroad-pinoyachievers", - "serbisyopubliko", - "serbisyopubliko-missingpersons", - "serbisyopubliko-transportation", - "serbisyopubliko-walangpasok", - "cbb", - "publicaffairs", - "weather" - ], + "description": "Hermès category code, from hermes-categories", "in": "query", - "name": "section", + "name": "category", "required": true, "type": "string", - "x-example": "topstories" + "x-example": "WOMEN_SHOES_SNEAKERS" + }, + { + "default": "relevance", + "description": "Result order. One of: relevance, priceasc, pricedsc. Non-default sorts are best-effort", + "enum": [ + "relevance", + "priceasc", + "pricedsc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": "us_en", + "description": "Market and language. One of: at_de, au_en, be_en, be_fr, br_pt, ca_en, ca_fr, ch_de, ch_fr, cz_en, de_de, dh_en, dk_en, es_es, fi_en, fr_fr, gr_en, hk_en, ie_en, it_it, jp_ja, kr_ko, lu_fr, mo_en, mx_es, my_en, nl_en, no_en, pl_en, pt_en, ri_en, se_en, sg_en, th_en, tw_zh, uk_en, us_en", + "enum": [ + "at_de", + "au_en", + "be_en", + "be_fr", + "br_pt", + "ca_en", + "ca_fr", + "ch_de", + "ch_fr", + "cz_en", + "de_de", + "dh_en", + "dk_en", + "es_es", + "fi_en", + "fr_fr", + "gr_en", + "hk_en", + "ie_en", + "it_it", + "jp_ja", + "kr_ko", + "lu_fr", + "mo_en", + "mx_es", + "my_en", + "nl_en", + "no_en", + "pl_en", + "pt_en", + "ri_en", + "se_en", + "sg_en", + "th_en", + "tw_zh", + "uk_en", + "us_en" + ], + "in": "query", + "name": "locale", + "type": "string" + }, + { + "default": 1, + "description": "One-based result page; page size is fixed at 48. Page 1 is fully validated; pages beyond 1 are best-effort and provisional", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -378275,7 +451517,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/hermes.categoryResponseDoc" } }, "400": { @@ -378284,6 +451526,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -378296,16 +451544,75 @@ "ApiKeyAuth": [] } ], - "summary": "Get GMA News section headlines", + "summary": "Browse a Hermès category", "tags": [ - "GMA News" + "Hermes" ] } }, - "/gmanews/news": { + "/hermes/product": { "get": { - "description": "Returns fresh GMA News Online top stories from the public top-stories RSS feed, with title, URL, summary, publish time, and thumbnail.", - "operationId": "gmanews-news", + "consumes": [ + "application/json" + ], + "description": "Returns one Hermès product's full detail: title, description, dimensions, the Hermès colour name, country of manufacture, price with its market currency, stock, every product image, and the complete colour and size variant matrix with per-variant sku, price, stock and image. Care, gift and delivery text are returned as Hermès' own HTML fragments. sku accepts the reference-plus-colour form (H252013Z BM), the fuller listing sku that also carries size (H252013Z BM360), or the URL identifier returned by hermes-products (H252013ZvBM).", + "operationId": "hermes-product", + "parameters": [ + { + "description": "Hermès product sku, in any of the accepted forms", + "in": "query", + "name": "sku", + "required": true, + "type": "string", + "x-example": "H252013Z BM" + }, + { + "default": "us_en", + "description": "Market and language. One of: at_de, au_en, be_en, be_fr, br_pt, ca_en, ca_fr, ch_de, ch_fr, cz_en, de_de, dh_en, dk_en, es_es, fi_en, fr_fr, gr_en, hk_en, ie_en, it_it, jp_ja, kr_ko, lu_fr, mo_en, mx_es, my_en, nl_en, no_en, pl_en, pt_en, ri_en, se_en, sg_en, th_en, tw_zh, uk_en, us_en", + "enum": [ + "at_de", + "au_en", + "be_en", + "be_fr", + "br_pt", + "ca_en", + "ca_fr", + "ch_de", + "ch_fr", + "cz_en", + "de_de", + "dh_en", + "dk_en", + "es_es", + "fi_en", + "fr_fr", + "gr_en", + "hk_en", + "ie_en", + "it_it", + "jp_ja", + "kr_ko", + "lu_fr", + "mo_en", + "mx_es", + "my_en", + "nl_en", + "no_en", + "pl_en", + "pt_en", + "ri_en", + "se_en", + "sg_en", + "th_en", + "tw_zh", + "uk_en", + "us_en" + ], + "in": "query", + "name": "locale", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -378313,7 +451620,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/hermes.productResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -378334,16 +451653,75 @@ "ApiKeyAuth": [] } ], - "summary": "Get GMA News top stories", + "summary": "Get a Hermès product", "tags": [ - "GMA News" + "Hermes" ] } }, - "/gmanews/sections": { + "/hermes/product/recommendations": { "get": { - "description": "Lists the 44 GMA News Online sections accepted by `gmanews-headlines`, each with a `slug`, display `name` and `url`. Slugs run from `topstories` and `money` to sub-sections such as `sports-basketball` and `lifestyle-travel`. Video, photo and TV-show sections are excluded. Takes no parameters.", - "operationId": "gmanews-sections", + "consumes": [ + "application/json" + ], + "description": "Returns the cross-sell shelves Hermès shows on a product page: \"keep exploring\" (similar items) and \"perfect partner\" (items styled with it), each a list of products with price, stock and image. Takes the same sku forms as hermes-product. A product Hermès offers no recommendations for returns an empty shelves list rather than an error.", + "operationId": "hermes-product-recommendations", + "parameters": [ + { + "description": "Hermès product sku, in any of the forms hermes-product accepts", + "in": "query", + "name": "sku", + "required": true, + "type": "string", + "x-example": "H252013Z BM" + }, + { + "default": "us_en", + "description": "Market and language. One of: at_de, au_en, be_en, be_fr, br_pt, ca_en, ca_fr, ch_de, ch_fr, cz_en, de_de, dh_en, dk_en, es_es, fi_en, fr_fr, gr_en, hk_en, ie_en, it_it, jp_ja, kr_ko, lu_fr, mo_en, mx_es, my_en, nl_en, no_en, pl_en, pt_en, ri_en, se_en, sg_en, th_en, tw_zh, uk_en, us_en", + "enum": [ + "at_de", + "au_en", + "be_en", + "be_fr", + "br_pt", + "ca_en", + "ca_fr", + "ch_de", + "ch_fr", + "cz_en", + "de_de", + "dh_en", + "dk_en", + "es_es", + "fi_en", + "fr_fr", + "gr_en", + "hk_en", + "ie_en", + "it_it", + "jp_ja", + "kr_ko", + "lu_fr", + "mo_en", + "mx_es", + "my_en", + "nl_en", + "no_en", + "pl_en", + "pt_en", + "ri_en", + "se_en", + "sg_en", + "th_en", + "tw_zh", + "uk_en", + "us_en" + ], + "in": "query", + "name": "locale", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -378351,7 +451729,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/hermes.recommendationsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -378359,6 +451749,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -378366,48 +451762,89 @@ "ApiKeyAuth": [] } ], - "summary": "Get GMA News sections", + "summary": "Get a Hermès product's recommended items", "tags": [ - "GMA News" + "Hermes" ] } }, - "/goat/collection": { + "/hermes/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of one of GOAT's curated product collections (an editorial rail like \"top trending\" or \"new arrivals\"), as shown in GOAT's own product-page \"you may also like\" rails and homepage modules. Collection slugs are not enumerable by this API -- capture one from a live GOAT page.", - "operationId": "goat-collection", + "description": "Returns a page of Hermès' full catalogue index for one market: each product's URL, slug, URL identifier and the date Hermès last modified it. Built from Hermès' own product sitemap, so it enumerates the entire catalogue for that market including items no category listing surfaces. Use changed_since to return only products added or updated on or after a date, which makes this a new-arrivals feed. The product_id is the identifier used in the product URL and is NOT the same string as the sku returned by hermes-category and hermes-search, which also encodes size.", + "operationId": "hermes-products", "parameters": [ { - "description": "GOAT collection slug, e.g. as seen in a curated rail on GOAT's own site", + "default": "us_en", + "description": "Market and language. One of: at_de, au_en, be_en, be_fr, br_pt, ca_en, ca_fr, ch_de, ch_fr, cz_en, de_de, dh_en, dk_en, es_es, fi_en, fr_fr, gr_en, hk_en, ie_en, it_it, jp_ja, kr_ko, lu_fr, mo_en, mx_es, my_en, nl_en, no_en, pl_en, pt_en, ri_en, se_en, sg_en, th_en, tw_zh, uk_en, us_en", + "enum": [ + "at_de", + "au_en", + "be_en", + "be_fr", + "br_pt", + "ca_en", + "ca_fr", + "ch_de", + "ch_fr", + "cz_en", + "de_de", + "dh_en", + "dk_en", + "es_es", + "fi_en", + "fr_fr", + "gr_en", + "hk_en", + "ie_en", + "it_it", + "jp_ja", + "kr_ko", + "lu_fr", + "mo_en", + "mx_es", + "my_en", + "nl_en", + "no_en", + "pl_en", + "pt_en", + "ri_en", + "se_en", + "sg_en", + "th_en", + "tw_zh", + "uk_en", + "us_en" + ], "in": "query", - "name": "slug", - "required": true, - "type": "string", - "x-example": "top-trending-uk" + "name": "locale", + "type": "string" }, { - "description": "1-indexed result page, defaults to 1", + "default": 1, + "description": "One-based result page", "in": "query", + "minimum": 1, "name": "page", - "type": "integer", - "x-example": 1 + "type": "integer" }, { - "description": "Results per page, defaults to 12, maximum 100", + "default": 100, + "description": "Results per page, 1-500", "in": "query", + "maximum": 500, + "minimum": 1, "name": "limit", - "type": "integer", - "x-example": 12 + "type": "integer" }, { - "description": "Omit specific products by id, comma-separated", + "description": "Return only products last modified on or after this YYYY-MM-DD date", "in": "query", - "name": "exclude_product_ids", + "name": "changed_since", "type": "string", - "x-example": "1481726" + "x-example": "2026-09-01" } ], "produces": [ @@ -378417,7 +451854,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goat.collectionResponseDoc" + "$ref": "#/definitions/hermes.productsResponseDoc" } }, "400": { @@ -378426,14 +451863,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -378450,19 +451881,83 @@ "ApiKeyAuth": [] } ], - "summary": "Get a GOAT curated product collection", + "summary": "List the Hermès catalogue index", "tags": [ - "GOAT" + "Hermes" ] } }, - "/goat/countries": { + "/hermes/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns every country GOAT recognizes -- the accepted values for GET /goat/product/{slug}'s country_code parameter -- with the currency and size unit (us, uk, eu) GOAT localizes to for each, plus whether GOAT ships and accepts returns there. Every country is listed, not only the shippable ones, because country_code localizes pricing and is accepted for all of them; filter on ships_to if you want only GOAT's shipping destinations.", - "operationId": "goat-countries", + "description": "Searches the Hermès catalogue by keyword and returns a page of products in the same shape as hermes-category. A query Hermès has no match for returns total 0 with an empty products array: Hermès itself renders unrelated fallback recommendations on a no-results page, and those are deliberately not returned as results. When Hermès applies its own spelling correction the corrected term is reported in results_for. Page size is fixed at 48 by Hermès and cannot be changed.", + "operationId": "hermes-search", + "parameters": [ + { + "description": "Search keyword", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "scarf" + }, + { + "default": "us_en", + "description": "Market and language. One of: at_de, au_en, be_en, be_fr, br_pt, ca_en, ca_fr, ch_de, ch_fr, cz_en, de_de, dh_en, dk_en, es_es, fi_en, fr_fr, gr_en, hk_en, ie_en, it_it, jp_ja, kr_ko, lu_fr, mo_en, mx_es, my_en, nl_en, no_en, pl_en, pt_en, ri_en, se_en, sg_en, th_en, tw_zh, uk_en, us_en", + "enum": [ + "at_de", + "au_en", + "be_en", + "be_fr", + "br_pt", + "ca_en", + "ca_fr", + "ch_de", + "ch_fr", + "cz_en", + "de_de", + "dh_en", + "dk_en", + "es_es", + "fi_en", + "fr_fr", + "gr_en", + "hk_en", + "ie_en", + "it_it", + "jp_ja", + "kr_ko", + "lu_fr", + "mo_en", + "mx_es", + "my_en", + "nl_en", + "no_en", + "pl_en", + "pt_en", + "ri_en", + "se_en", + "sg_en", + "th_en", + "tw_zh", + "uk_en", + "us_en" + ], + "in": "query", + "name": "locale", + "type": "string" + }, + { + "default": 1, + "description": "One-based result page; page size is fixed at 48. Page 1 is fully validated; pages beyond 1 are best-effort and provisional", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -378470,11 +451965,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goat.countriesResponseDoc" + "$ref": "#/definitions/hermes.searchResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -378491,19 +451992,81 @@ "ApiKeyAuth": [] } ], - "summary": "Get GOAT countries", + "summary": "Search the Hermès catalogue", "tags": [ - "GOAT" + "Hermes" ] } }, - "/goat/curated": { + "/hermes/stores": { "get": { "consumes": [ "application/json" ], - "description": "Returns the shelf of editorially curated links GOAT is currently promoting in its own search box: seasonal collections, specific product searches, and browse-all entry points. Every link is actionable against this API -- a collection link carries a value for GET /goat/collection, a search link carries a query for GET /goat/search.", - "operationId": "goat-curated", + "description": "Returns Hermès' worldwide store directory: name, street address, city, postal code, country, geographic coordinates, phone, displayed opening hours, whether in-store appointments are offered, and store photos. Optionally narrowed to one country (by name or ISO-2 code) or city. Hermès publishes the same worldwide directory for every market, so locale selects the language names are returned in rather than which stores are listed.", + "operationId": "hermes-stores", + "parameters": [ + { + "default": "us_en", + "description": "Market and language. One of: at_de, au_en, be_en, be_fr, br_pt, ca_en, ca_fr, ch_de, ch_fr, cz_en, de_de, dh_en, dk_en, es_es, fi_en, fr_fr, gr_en, hk_en, ie_en, it_it, jp_ja, kr_ko, lu_fr, mo_en, mx_es, my_en, nl_en, no_en, pl_en, pt_en, ri_en, se_en, sg_en, th_en, tw_zh, uk_en, us_en", + "enum": [ + "at_de", + "au_en", + "be_en", + "be_fr", + "br_pt", + "ca_en", + "ca_fr", + "ch_de", + "ch_fr", + "cz_en", + "de_de", + "dh_en", + "dk_en", + "es_es", + "fi_en", + "fr_fr", + "gr_en", + "hk_en", + "ie_en", + "it_it", + "jp_ja", + "kr_ko", + "lu_fr", + "mo_en", + "mx_es", + "my_en", + "nl_en", + "no_en", + "pl_en", + "pt_en", + "ri_en", + "se_en", + "sg_en", + "th_en", + "tw_zh", + "uk_en", + "us_en" + ], + "in": "query", + "name": "locale", + "type": "string" + }, + { + "description": "Case-insensitive country filter, matched against the country name or its ISO-2 code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "France" + }, + { + "description": "Case-insensitive city filter", + "in": "query", + "name": "city", + "type": "string", + "x-example": "Paris" + } + ], "produces": [ "application/json" ], @@ -378511,11 +452074,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goat.curatedResponseDoc" + "$ref": "#/definitions/hermes.storesResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -378532,19 +452101,74 @@ "ApiKeyAuth": [] } ], - "summary": "Get GOAT curated links", + "summary": "List Hermès stores", "tags": [ - "GOAT" + "Hermes" ] } }, - "/goat/listings/count": { + "/hermes/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns how many listings GOAT currently has live across its whole marketplace. This is the only way to see GOAT's true catalog size, because GET /goat/search's total_results saturates at 10000 on a broad query and cannot report a total above that ceiling.", - "operationId": "goat-listings-count", + "description": "Returns Hermès' own search-box autocomplete for a partial term: matching categories with the number of items behind each, and matching products. The category codes returned are the same codes hermes-category accepts, so a suggestion feeds straight into a category browse. An empty query is supported and returns Hermès' default suggestions rather than an error.", + "operationId": "hermes-suggest", + "parameters": [ + { + "description": "Partial search term; may be empty for Hermès' default suggestions", + "in": "query", + "name": "query", + "type": "string", + "x-example": "bel" + }, + { + "default": "us_en", + "description": "Market and language. One of: at_de, au_en, be_en, be_fr, br_pt, ca_en, ca_fr, ch_de, ch_fr, cz_en, de_de, dh_en, dk_en, es_es, fi_en, fr_fr, gr_en, hk_en, ie_en, it_it, jp_ja, kr_ko, lu_fr, mo_en, mx_es, my_en, nl_en, no_en, pl_en, pt_en, ri_en, se_en, sg_en, th_en, tw_zh, uk_en, us_en", + "enum": [ + "at_de", + "au_en", + "be_en", + "be_fr", + "br_pt", + "ca_en", + "ca_fr", + "ch_de", + "ch_fr", + "cz_en", + "de_de", + "dh_en", + "dk_en", + "es_es", + "fi_en", + "fr_fr", + "gr_en", + "hk_en", + "ie_en", + "it_it", + "jp_ja", + "kr_ko", + "lu_fr", + "mo_en", + "mx_es", + "my_en", + "nl_en", + "no_en", + "pl_en", + "pt_en", + "ri_en", + "se_en", + "sg_en", + "th_en", + "tw_zh", + "uk_en", + "us_en" + ], + "in": "query", + "name": "locale", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -378552,11 +452176,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goat.listingsCountResponseDoc" + "$ref": "#/definitions/hermes.suggestResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -378573,34 +452203,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get GOAT live listing count", + "summary": "Hermès search suggestions", "tags": [ - "GOAT" + "Hermes" ] } }, - "/goat/product/{slug}": { + "/hindustantimes/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a GOAT product: identity/descriptive metadata (name, brand, SKU, colorway, designer, silhouette, taxonomy, materials, release date, retail price, editorial story, images, full size range, other products featured alongside it), plus live per-size/condition pricing and stock status (lowest price, GOAT Instant Ship price, last sold price, highest current buyer offer).", - "operationId": "goat-product", + "description": "Returns public Hindustan Times article metadata and body paragraphs from a canonical article URL. A story Hindustan Times marks subscriber-only (chiefly syndicated Wall Street Journal / The Economist partner content) returns a permission error instead of a body.", + "operationId": "hindustantimes-article", "parameters": [ { - "description": "GOAT product URL slug, the path segment of a https://www.goat.com/sneakers/{slug} product page", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "fragment-design-x-travis-scott-x-air-jordan-1-low-og-sp-sail-military-blue-dm7866-104" - }, - { - "description": "ISO 3166-1 alpha-2 country code used to localize per-size pricing, defaults to US", + "description": "Canonical Hindustan Times article URL", "in": "query", - "name": "country_code", + "name": "url", + "required": true, "type": "string", - "x-example": "US" + "x-example": "https://www.hindustantimes.com/india-news/example-article-slug-101790241314039.html" } ], "produces": [ @@ -378610,7 +452230,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goat.productResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -378619,14 +452239,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Forbidden", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -378643,34 +452263,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get GOAT product detail", + "summary": "Get Hindustan Times article content", "tags": [ - "GOAT" + "Hindustan Times" ] } }, - "/goat/product/{slug}/recommended": { + "/hindustantimes/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the recommended/related products GOAT's own product page shows for a given product (other colorways, similar products) -- descriptive metadata only, no live pricing.", - "operationId": "goat-product-recommended", + "description": "Returns a Hindustan Times author's byline metadata, biography, contact/social links, and their most recent articles (the first page only) from a canonical author URL.", + "operationId": "hindustantimes-author", "parameters": [ { - "description": "GOAT product URL slug to find related products for", - "in": "path", - "name": "slug", + "description": "Canonical Hindustan Times author URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "fragment-design-x-travis-scott-x-air-jordan-1-low-og-sp-sail-military-blue-dm7866-104" - }, - { - "description": "Number of recommended products to return, defaults to 8, maximum 24", - "in": "query", - "name": "count", - "type": "integer", - "x-example": 8 + "x-example": "https://www.hindustantimes.com/author/ht-news-desk-101650005059496" } ], "produces": [ @@ -378680,7 +452290,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goat.recommendedResponseDoc" + "$ref": "#/definitions/publicnews.hindustanTimesAuthorResponseDoc" } }, "400": { @@ -378695,12 +452305,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -378713,239 +452317,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get GOAT recommended products for a product", + "summary": "Get a Hindustan Times author profile", "tags": [ - "GOAT" + "Hindustan Times" ] } }, - "/goat/search": { + "/hindustantimes/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches or browses GOAT's sneaker/streetwear/collectibles catalog by free-text query and/or facet filters (category, footwear sub-type, activity, color, gender, condition, brand, release year, price range, release-date range, silhouette, designer, in-stock/under-retail/instant-ship, curated collection), returning product summaries (brand, silhouette, category, image, stock status, headline pricing across all sizes) plus the total matching count. Query is optional -- a facet filter alone browses the catalog the same way GOAT's own category/brand pages do.", - "operationId": "goat-search", + "description": "Returns current Hindustan Times headlines for one section. `section` is required and takes one of 24 slugs such as `india-news`, `world-news`, `cricket`, `business`, `htcity` or `editorials`. Each item has its title, URL, summary, author, publication time and image where the site provides them.", + "operationId": "hindustantimes-headlines", "parameters": [ { - "description": "Free-text search query, e.g. a model name, colorway, or style code. Optional -- omit to browse by facet filters alone", - "in": "query", - "name": "query", - "type": "string", - "x-example": "jordan 1" - }, - { - "description": "Only include products currently in stock", - "in": "query", - "name": "in_stock", - "type": "boolean", - "x-example": false - }, - { - "description": "Filter by category, comma-separated for multiple values. See GET /goat/search/facets for the current live list", + "description": "Hindustan Times section slug", "enum": [ - "footwear", - "apparel", - "accessories", - "bags", - "collectibles", - "media", + "india-news", + "world-news", + "cities", + "business", "sports", - "jewelry", - "home", - "objects", - "other", - "art" - ], - "in": "query", - "name": "categories", - "type": "string", - "x-example": "footwear" - }, - { - "description": "Filter by color, comma-separated for multiple values", - "enum": [ - "black", - "white", - "blue", - "grey", - "red", - "green", - "pink", - "cream", - "brown", - "purple", - "multi-color", - "orange", - "tan", - "yellow", - "silver", - "gold", - "teal", - "copper" - ], - "in": "query", - "name": "colors", - "type": "string", - "x-example": "black" - }, - { - "description": "Filter by gender, comma-separated for multiple values", - "enum": [ - "men", - "youth", - "infant", - "women" - ], - "in": "query", - "name": "genders", - "type": "string", - "x-example": "men" - }, - { - "description": "Filter by item condition, comma-separated for multiple values", - "enum": [ - "new_no_defects", - "used", - "new_with_defects", - "goat_clean" - ], - "in": "query", - "name": "conditions", - "type": "string", - "x-example": "new_no_defects" - }, - { - "description": "Filter by footwear sub-type, comma-separated for multiple values", - "enum": [ - "sneakers", - "sandals", - "cleats", - "boots", - "slip-ons" - ], - "in": "query", - "name": "product_types", - "type": "string", - "x-example": "sneakers" - }, - { - "description": "Filter by activity (sneakers only), comma-separated for multiple values", - "enum": [ + "cricket", + "entertainment", "lifestyle", - "basketball", - "running", - "skateboarding" - ], - "in": "query", - "name": "activities", - "type": "string", - "x-example": "lifestyle" - }, - { - "description": "Filter by one or more brand slugs, comma-separated, e.g. air-jordan,nike. GET /goat/search/facets lists GOAT's top brands; long-tail brands are valid here even when absent from that list", - "in": "query", - "name": "brands", - "type": "string", - "x-example": "air-jordan" - }, - { - "description": "Filter by one or more silhouettes, comma-separated, matching GOAT's own naming (see a product's silhouette field)", - "in": "query", - "name": "silhouettes", - "type": "string", - "x-example": "Air Jordan 1" - }, - { - "description": "Filter by one or more designers, comma-separated, matching GOAT's own naming (see a product's designer field)", - "in": "query", - "name": "designers", - "type": "string", - "x-example": "Peter Moore" - }, - { - "description": "Filter by season year(s), comma-separated, e.g. 2025,2026. See GET /goat/search/facets for the current live list", - "in": "query", - "name": "years", - "type": "string", - "x-example": "2025" - }, - { - "description": "Only include results priced at or above this amount, in cents", - "in": "query", - "name": "price_cents_min", - "type": "integer", - "x-example": 10000 - }, - { - "description": "Only include results priced at or below this amount, in cents", - "in": "query", - "name": "price_cents_max", - "type": "integer", - "x-example": 20000 - }, - { - "description": "Only include products currently trading below original retail price", - "in": "query", - "name": "under_retail", - "type": "boolean", - "x-example": false - }, - { - "description": "Only include products with GOAT Instant Ship availability", - "in": "query", - "name": "instant_ship", - "type": "boolean", - "x-example": false - }, - { - "description": "Result sort order, defaults to relevance", - "enum": [ - "relevance", - "newest", - "price_asc", - "price_desc", - "discount" + "astrology", + "education", + "technology", + "opinion", + "science", + "books", + "real-estate", + "car-bike", + "nri", + "htcity", + "ht-insight", + "ht-explainers", + "editorials", + "trending", + "india-and-the-elections", + "editors-pick" ], "in": "query", - "name": "sort", - "type": "string", - "x-example": "relevance" - }, - { - "description": "Scope results to a GOAT curated collection (see GET /goat/collection), combinable with query, every other filter, and sort", - "in": "query", - "name": "collection_slug", - "type": "string", - "x-example": "top-trending-uk" - }, - { - "description": "Only include products released on or after this date (YYYY-MM-DD, UTC)", - "in": "query", - "name": "released_after", - "type": "string", - "x-example": "2025-08-01" - }, - { - "description": "Only include products released on or before this date (YYYY-MM-DD, UTC)", - "in": "query", - "name": "released_before", + "name": "section", + "required": true, "type": "string", - "x-example": "2025-08-31" - }, - { - "description": "1-indexed result page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Results per page, defaults to 12, maximum 100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 12 + "x-example": "india-news" } ], "produces": [ @@ -378955,7 +452370,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goat.searchResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -378964,8 +452379,40 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Hindustan Times section headlines", + "tags": [ + "Hindustan Times" + ] + } + }, + "/hindustantimes/news": { + "get": { + "description": "Returns Hindustan Times' current top stories from its Latest News listing, with no parameters. Each item has its title, URL, summary, author, publication time and image where available.", + "operationId": "hindustantimes-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -378982,19 +452429,59 @@ "ApiKeyAuth": [] } ], - "summary": "Search GOAT products", + "summary": "Get Hindustan Times top stories", "tags": [ - "GOAT" + "Hindustan Times" ] } }, - "/goat/search/facets": { + "/hindustantimes/sections": { "get": { - "consumes": [ + "description": "Lists the 24 Hindustan Times sections accepted by `hindustantimes-headlines`, including `india-news`, `world-news`, `cricket`, `real-estate`, `nri` and `editors-pick`. Each entry has a `slug`, display `name` and section `url`. Takes no parameters.", + "operationId": "hindustantimes-sections", + "produces": [ "application/json" ], - "description": "Returns the accepted values for goat_search's filter parameters: categories, colors, genders, conditions, brands, and years are returned live so a value GOAT adds is discoverable without any client-side change, while product_types and activities are served from a maintained list because GOAT exposes no live facet for them. brands is GOAT's top brands ordered by product count, not the complete brand list -- when brands_truncated is true, brands beyond the ones listed exist and remain valid goat_search values.", - "operationId": "goat-search-facets", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Hindustan Times sections", + "tags": [ + "Hindustan Times" + ] + } + }, + "/hltv/event": { + "get": { + "description": "Returns one event's public HLTV overview page by numeric `id`: name, canonical URL, `status` (`finished`, `ongoing`, or `upcoming`), start/end dates in UTC, total prize pool, participating team count, location, and the attending teams with their ids, logos and the HLTV/Valve ranking positions shown at event start. The trailing `slug` is cosmetic and optional; HLTV resolves the event by id. Use hltv-events to discover event ids.", + "operationId": "hltv-event", + "parameters": [ + { + "description": "HLTV numeric event id", + "in": "query", + "name": "id", + "required": true, + "type": "integer", + "x-example": 8050 + }, + { + "description": "Cosmetic event slug; HLTV resolves the event by id", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "pgl-masters-bucharest-2026" + } + ], "produces": [ "application/json" ], @@ -379002,11 +452489,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goat.facetsResponseDoc" + "$ref": "#/definitions/hltv.eventResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -379023,19 +452522,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get GOAT search facet values", + "summary": "Get a Counter-Strike event overview", "tags": [ - "GOAT" + "HLTV" ] } }, - "/goat/searches/trending": { + "/hltv/events": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the search terms GOAT is currently surfacing as popular, in GOAT's own ranking order -- the same list its own search box shows. Each term is free text ready to pass to GET /goat/search's query parameter.", - "operationId": "goat-trending-searches", + "description": "Returns HLTV's public event calendar: ongoing events, featured events, and the month-grouped upcoming list. Each event has its numeric `id`, canonical `url`, `name`, `status` (`ongoing` or `upcoming`), `type` (for example `LAN`, `Intl. LAN`, `Online`), start/end dates in UTC when published, prize pool and location when the card shows them, and the top participating teams when listed. Use hltv-event with an id from this response for one event's overview.", + "operationId": "hltv-events", "produces": [ "application/json" ], @@ -379043,11 +452539,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goat.trendingSearchesResponseDoc" + "$ref": "#/definitions/hltv.eventsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -379064,34 +452560,31 @@ "ApiKeyAuth": [] } ], - "summary": "Get GOAT trending searches", + "summary": "Get the Counter-Strike event calendar", "tags": [ - "GOAT" + "HLTV" ] } }, - "/goat/suggest": { + "/hltv/match": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns GOAT's own search-box autocomplete for a partial query: matching curated collections and matching products. The collections carry the slug values accepted by GET /goat/collection and by GET /goat/search's collection_slug parameter, making this the way to discover collection slugs.", - "operationId": "goat-suggest", + "description": "Returns one HLTV match by numeric `id`: both teams with ids, logos and series score; `status` (`finished`, `live` or `upcoming`); scheduled `date` in UTC; `format` (`bo1`/`bo3`/`bo5`), LAN flag and stage from the veto summary; the event id/name/URL; the full map list with per-map `score`, `winner`, `picked_by`, regulation and overtime `halves`, and the per-map stats page id; the map `veto` in order (`picked`, `removed` or `left over`); both `lineups` with player ids, nicknames, real names and roles; the match-total scoreboard `stats`; and `map_stats` scoreboards for the captured maps. The trailing `slug` is cosmetic and optional; HLTV resolves the match by id.", + "operationId": "hltv-match", "parameters": [ { - "description": "Partial search text to autocomplete", + "description": "HLTV numeric match id", "in": "query", - "name": "query", + "name": "id", "required": true, - "type": "string", - "x-example": "jord" + "type": "integer", + "x-example": 2399417 }, { - "description": "Maximum curated collections to return. Defaults to 8, maximum 20. Does not affect the product count, which upstream fixes at 25", + "description": "Cosmetic match slug; HLTV resolves the match by id", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 8 + "name": "slug", + "type": "string", + "x-example": "furia-vs-betboom-thunderpick-world-championship-2026" } ], "produces": [ @@ -379101,7 +452594,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goat.suggestResponseDoc" + "$ref": "#/definitions/hltv.matchResponseDoc" } }, "400": { @@ -379110,8 +452603,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -379128,31 +452627,16 @@ "ApiKeyAuth": [] } ], - "summary": "Autocomplete a GOAT search", + "summary": "Get a Counter-Strike match detail page", "tags": [ - "GOAT" + "HLTV" ] } }, - "/goldin/auctions": { + "/hltv/matches": { "get": { - "consumes": [ - "application/json" - ], - "description": "Goldin's complete auction event history, back to 2012 -- title, type, status, start/end window, and buyer's premium for every auction Goldin has run. Pass an auction's own id as auction_id to goldin-search to browse its lots.", - "operationId": "goldin-auctions", - "parameters": [ - { - "description": "asc (oldest first) or desc (newest first, default)", - "enum": [ - "asc", - "desc" - ], - "in": "query", - "name": "order", - "type": "string" - } - ], + "description": "Returns HLTV's current live and upcoming Counter-Strike 2 matches, no input needed. Each match has its numeric `id`, canonical `url`, scheduled `starts_at` (UTC; omitted for matches already live), `status` (`live` or `upcoming`), `format` (`bo1`/`bo3`/`bo5`), `stage`, star rating `stars` (0-5), `region`, LAN flag, both teams with ids and logos, and the event id/name. Use this for the current schedule; use hltv-results for finished matches and hltv-events for tournament calendars. Pinned matches may omit `event.name` while still carrying `event.id`.", + "operationId": "hltv-matches", "produces": [ "application/json" ], @@ -379160,17 +452644,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goldin.auctionsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/hltv.matchesResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -379187,29 +452665,31 @@ "ApiKeyAuth": [] } ], - "summary": "List Goldin's full auction history", + "summary": "Get live and upcoming Counter-Strike 2 matches", "tags": [ - "Goldin" + "HLTV" ] } }, - "/goldin/categories": { + "/hltv/player": { "get": { - "consumes": [ - "application/json" - ], - "description": "Goldin's full filter-enum surface for goldin-search, scoped to one lot pool -- category, sub_category, certification, item_type, and the live auction list (each with its own id, name, and current lot count), plus the sort enum valid for that pool. category/sub_category/certification/item_type are read live from Goldin's own current inventory, not a fixed taxonomy, so results can shift over time. The Auction pool (default) and the Fixed Price \"Private Sales\" marketplace are disjoint item pools with different certification/item_type values and different sort enums -- pass the same auction_type here and to goldin-search.", - "operationId": "goldin-categories", + "description": "Returns one player's public HLTV profile by numeric `id`: nickname, real name, country, age and date of birth when published, canonical URL, current team (id, name, logo) when the player is on a team, and the role-rating rows HLTV shows (Rating 3.0 plus Firepower, Entrying, Trading, Opening, Closing, Sniping and Utility scored out of 100). The trailing `slug` is cosmetic and optional; HLTV resolves the player by id.", + "operationId": "hltv-player", "parameters": [ { - "description": "Auction (default) or Fixed_Price -- selects which lot pool to discover enums for", - "enum": [ - "Auction", - "Fixed_Price" - ], + "description": "HLTV numeric player id", "in": "query", - "name": "auction_type", - "type": "string" + "name": "id", + "required": true, + "type": "integer", + "x-example": 2023 + }, + { + "description": "Cosmetic player slug; HLTV resolves the player by id", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "fallen" } ], "produces": [ @@ -379219,7 +452699,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goldin.categoriesResponseDoc" + "$ref": "#/definitions/hltv.playerResponseDoc" } }, "400": { @@ -379228,8 +452708,20 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -379240,27 +452732,30 @@ "ApiKeyAuth": [] } ], - "summary": "List Goldin's search filter enums", + "summary": "Get a Counter-Strike player profile", "tags": [ - "Goldin" + "HLTV" ] } }, - "/goldin/listing": { + "/hltv/rankings": { "get": { - "consumes": [ - "application/json" - ], - "description": "One lot's full public detail: title, description, current bid/starting price, auction window and status, grading info, images, and prev/next lot pointers within the same auction. slug is the meta_slug from a goldin-search result (or the trailing path segment of the lot's own goldin.co/item/{slug} page URL).", - "operationId": "goldin-listing", + "description": "Returns one HLTV Counter-Strike world-ranking snapshot: the snapshot `date` and every ranked team in order, each with `rank`, team id/name/logo, HLTV `points`, the week-over-week `change` (`+1`, `-2`, `new`, or `-` for unchanged), and the five ranked players with their ids and profile URLs. Omit `date` for the current ranking; pass a snapshot date (`YYYY-MM-DD`, typically a Monday) to read an older ranking. A date with no published snapshot returns `404`.", + "operationId": "hltv-rankings", "parameters": [ { - "description": "The lot's meta_slug, from a goldin-search result", + "description": "Ranking snapshot date (YYYY-MM-DD); omit for the current ranking", "in": "query", - "name": "slug", - "required": true, + "name": "date", "type": "string", - "x-example": "2002-03-upper-deck-mj-tribute-michael-jordan-milestones-m2-michael-jor1lwys" + "x-example": "2026-10-12" + }, + { + "description": "Country or region from the ranking page's own region selector", + "in": "query", + "name": "country", + "type": "string", + "x-example": "Denmark" } ], "produces": [ @@ -379270,7 +452765,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goldin.listingResponseDoc" + "$ref": "#/definitions/hltv.rankingsResponseDoc" } }, "400": { @@ -379285,8 +452780,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -379303,99 +452798,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Goldin lot's full public detail", + "summary": "Get the HLTV world team ranking", "tags": [ - "Goldin" + "HLTV" ] } }, - "/goldin/search": { + "/hltv/results": { "get": { - "consumes": [ - "application/json" - ], - "description": "Browse or search Goldin's current lot inventory by free-text keyword, category, sub_category, certification, item_type, and auction_id, in a caller-selected sort order. Every filter is optional and combines with AND semantics. All enum values come from goldin-categories -- pass the matching auction_type to both. The Auction pool (default) and the Fixed Price \"Private Sales\" marketplace are disjoint item pools with different certification/item_type values and different sort enums.", - "operationId": "goldin-search", + "description": "Returns one page of HLTV's finished-match archive, 100 results per page in reverse chronological order. Each result has the match `id`, canonical `url`, group `date` (YYYY-MM-DD), both teams with logos, `score` as [team1, team2], `winner` (1 or 2), event name, `format`, and star rating. Pass `offset` to page: `next_offset` in the response is the value for the following page and is absent on the last page; `total` is the archive's full result count. Offsets past the end return an empty `results` list rather than an error.", + "operationId": "hltv-results", "parameters": [ { - "description": "Auction (default) or Fixed_Price -- selects which lot pool to search", - "enum": [ - "Auction", - "Fixed_Price" - ], - "in": "query", - "name": "auction_type", - "type": "string" - }, - { - "description": "Free-text search across lot titles/descriptions", - "in": "query", - "name": "keyword", - "type": "string" - }, - { - "description": "One value from goldin-categories' category field", - "in": "query", - "name": "category", - "type": "string", - "x-example": "Sport" - }, - { - "description": "One value from goldin-categories' sub_category field", - "in": "query", - "name": "sub_category", - "type": "string", - "x-example": "Baseball" - }, - { - "description": "One value from goldin-categories' certification field", - "in": "query", - "name": "certification", - "type": "string", - "x-example": "PSA" - }, - { - "description": "One value from goldin-categories' item_type field", - "in": "query", - "name": "item_type", - "type": "string", - "x-example": "Single Cards" - }, - { - "description": "One auction id from goldin-categories' auctions field -- only meaningful for auction_type Auction", - "in": "query", - "name": "auction_id", - "type": "string" - }, - { - "description": "One value from goldin-categories' own sort field for the same auction_type. Auction pool: Featured (default), Ending_Soonest, Highest_Bids, Lowest_Bids, Most_Bids, Least_Bids, Most_Recent_Bids, Highest_Lot_Number, Recently_Started. Fixed Price pool: Recently_Created (default), Highest_Bids, Lowest_Bids", - "enum": [ - "Featured", - "Ending_Soonest", - "Highest_Bids", - "Lowest_Bids", - "Most_Bids", - "Least_Bids", - "Most_Recent_Bids", - "Highest_Lot_Number", - "Recently_Started", - "Recently_Created" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "1-based page number, defaults to 1", + "description": "Result offset; 0 is the newest page, 100 is the next page", "in": "query", - "name": "page", - "type": "integer" + "name": "offset", + "type": "integer", + "x-example": 0 }, { - "description": "Page size, defaults to 24, capped at 96", + "description": "HLTV event id to limit results to one tournament", "in": "query", - "name": "page_size", - "type": "integer" + "name": "event", + "type": "integer", + "x-example": 8050 } ], "produces": [ @@ -379405,7 +452831,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goldin.searchResponseDoc" + "$ref": "#/definitions/hltv.resultsResponseDoc" } }, "400": { @@ -379414,8 +452840,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -379432,31 +452858,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search Goldin's lot auction inventory", + "summary": "Get finished Counter-Strike 2 match results", "tags": [ - "Goldin" + "HLTV" ] } }, - "/goldin/suggest": { + "/hltv/search": { "get": { - "consumes": [ - "application/json" - ], - "description": "Goldin's own search-suggestions/autocomplete for a partial keyword, matching the site's own search box typeahead. keyword is optional -- when omitted, returns Goldin's current trending/popular searches instead of an error.", - "operationId": "goldin-suggest", + "description": "Runs HLTV's public site search and returns its result groups. Each group has a `name` (for example `Player`, `Team` or `Article`) and `items`; every item has a `type` (`player`, `team`, `article`, `event` or `match`), numeric `id`, `name`, canonical `url` and `slug`. Player items carry their `country`; team items carry a `logo_url`; article items carry the publication `date` and the `author` with the author profile `author_url`. The query is required (up to 100 characters) and is echoed as `query`. Use this to resolve a name to the ids that hltv-player, hltv-team, hltv-event and hltv-match accept.", + "operationId": "hltv-search", "parameters": [ { - "description": "Partial search query, e.g. \\", - "in": "query", - "name": "keyword", - "type": "string" - }, - { - "description": "Max suggestions to return, defaults to 8, capped at 20", + "description": "Search term, 1-100 characters", "in": "query", - "name": "limit", - "type": "integer" + "name": "query", + "required": true, + "type": "string", + "x-example": "furia" } ], "produces": [ @@ -379466,7 +452885,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goldin.suggestResponseDoc" + "$ref": "#/definitions/hltv.searchResponseDoc" } }, "400": { @@ -379475,8 +452894,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -379493,27 +452912,31 @@ "ApiKeyAuth": [] } ], - "summary": "Get Goldin's search suggestions for a keyword", + "summary": "Search HLTV for players, teams and articles", "tags": [ - "Goldin" + "HLTV" ] } }, - "/goodreads/author/{id}": { + "/hltv/team": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a Goodreads author profile: bio, birth/death dates, website, genres, photo, and aggregate rating stats.", - "operationId": "goodreads-author", + "description": "Returns one team's public HLTV profile by numeric `id`: name, country, logo, canonical URL, the team's current HLTV and Valve ranking positions (with regional rank when shown), and the current five-player roster with player ids, nicknames, real names, profile URLs and in-game roles when HLTV publishes them. The trailing `slug` is cosmetic and optional; HLTV resolves the team by id. Use hltv-rankings to discover team ids.", + "operationId": "hltv-team", "parameters": [ { - "description": "Goodreads author id", - "in": "path", + "description": "HLTV numeric team id", + "in": "query", "name": "id", "required": true, + "type": "integer", + "x-example": 8297 + }, + { + "description": "Cosmetic team slug; HLTV resolves the team by id", + "in": "query", + "name": "slug", "type": "string", - "x-example": "153394" + "x-example": "furia" } ], "produces": [ @@ -379523,7 +452946,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodreads.authorResponseDoc" + "$ref": "#/definitions/hltv.teamResponseDoc" } }, "400": { @@ -379538,8 +452961,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -379556,33 +452979,32 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Goodreads author", + "summary": "Get a Counter-Strike team profile", "tags": [ - "Goodreads" + "HLTV" ] } }, - "/goodreads/author/{id}/books": { + "/hm/categories": { "get": { "consumes": [ "application/json" ], - "description": "Lists the books of a Goodreads author by author `id`, about 30 per page; `page` is 1-based and defaults to 1. Each book has its `id`, title, author, average rating, ratings count and Goodreads URL, and the `id` can be used to look up the full book.", - "operationId": "goodreads-author-books", + "description": "Returns H&M's own storefront category navigation, department by department: every direct nav item and subcategory currently shown in the site's own menu, with its display name and storefront URL. Where this build has separately verified the value against hm-listing's own category_id parameter, that id is included too; category_id is omitted for entries not yet verified rather than guessed, since the visible category label is confirmed NOT a reliable way to derive H&M's real listing category ids for every category. department, when given, filters the result to one department.", + "operationId": "hm-categories", "parameters": [ { - "description": "Goodreads author id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "153394" - }, - { - "description": "1-based page number, default 1", + "description": "Filter to one storefront department", + "enum": [ + "women", + "men", + "kids", + "home", + "beauty" + ], "in": "query", - "name": "page", - "type": "integer" + "name": "department", + "type": "string" } ], "produces": [ @@ -379592,7 +453014,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodreads.authorBooksResponseDoc" + "$ref": "#/definitions/hm.categoriesResponseDoc" } }, "400": { @@ -379601,14 +453023,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -379625,33 +453041,59 @@ "ApiKeyAuth": [] } ], - "summary": "List a Goodreads author's books", + "summary": "Browse H&M's storefront category navigation", "tags": [ - "Goodreads" + "H&M" ] } }, - "/goodreads/author/{id}/quotes": { + "/hm/listing": { "get": { "consumes": [ "application/json" ], - "description": "Returns an author's paginated attributed-quotes list (quote text, tags, like count, and — when the quote is credited to a specific book — that book's title, id, and work id).", - "operationId": "goodreads-author-quotes", + "description": "Returns one H&M category's product listing page: products with pricing, images, colors, and per-size stock. category_id is an H&M category slug (e.g. ladies_newarrivals_all, men_newarrivals_all, ladies_jeans) -- there is no category/nav-tree discovery endpoint, so category_id values come from known H&M storefront paths rather than a lookup call. Pagination is page-based and real: requesting a page beyond the category's real last page returns a normal response with an empty products array rather than an error.", + "operationId": "hm-listing", "parameters": [ { - "description": "Goodreads author id", - "in": "path", - "name": "id", + "description": "H&M category slug", + "in": "query", + "name": "category_id", "required": true, "type": "string", - "x-example": "153394" + "x-example": "ladies_newarrivals_all" }, { - "description": "1-based page number, default 1", + "description": "Page number, one-based, defaults to 1", "in": "query", "name": "page", - "type": "integer" + "type": "integer", + "x-example": 1 + }, + { + "description": "Results per page, 1 to 72, defaults to 36", + "in": "query", + "name": "page_size", + "type": "integer", + "x-example": 36 + }, + { + "description": "Sort order, defaults to RELEVANCE", + "enum": [ + "RELEVANCE", + "NEWEST_FIRST", + "PRICE_ASCENDING", + "PRICE_DESCENDING" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Optional filter for newly added items only", + "in": "query", + "name": "is_new", + "type": "boolean" } ], "produces": [ @@ -379661,7 +453103,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodreads.authorQuotesResponseDoc" + "$ref": "#/definitions/hm.listingResponseDoc" } }, "400": { @@ -379670,14 +453112,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -379694,27 +453130,27 @@ "ApiKeyAuth": [] } ], - "summary": "List a Goodreads author's attributed quotes", + "summary": "Browse an H&M category's product listing", "tags": [ - "Goodreads" + "H&M" ] } }, - "/goodreads/book/{id}": { + "/hm/product/{product_id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Goodreads book: description, authors, series, genres, format, pages, publisher, publication date, ISBNs, and aggregate rating with the full 1-5 star distribution.", - "operationId": "goodreads-book", + "description": "Returns one H&M product's full detail: every purchasable color grouped with its own per-size price and live availability, plus an aggregate rating and real customer reviews (author label, date, body, rating, and any fit-feedback tags the reviewer left, such as \"True to Size\") when the product has any. This data is not available from hm-listing or hm-search, which only carry one representative price and a per-color stock count. product_id is the numeric id from a listing/search result's id field or its url field's productpage..html segment. An unrecognized product_id returns 404.", + "operationId": "hm-product", "parameters": [ { - "description": "Goodreads book id", + "description": "Numeric H&M product id, from a listing/search result's id field", "in": "path", - "name": "id", + "name": "product_id", "required": true, "type": "string", - "x-example": "2767052" + "x-example": "1268470004" } ], "produces": [ @@ -379724,7 +453160,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodreads.bookResponseDoc" + "$ref": "#/definitions/hm.productDetailResponseDoc" } }, "400": { @@ -379739,8 +453175,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -379757,33 +453193,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Goodreads book", + "summary": "Get an H&M product's full detail", "tags": [ - "Goodreads" + "H&M" ] } }, - "/goodreads/book/{id}/editions": { + "/hm/product/{product_id}/related": { "get": { "consumes": [ "application/json" ], - "description": "Returns a work's paginated edition list (per-edition book id, format, page count, publication date, publisher, ISBN/ISBN13/ASIN, language, and rating) — every other translation, printing, and format of the requested book id. Goodreads keys editions by a separate \"work id\", not the book id in the path; requests against a book with no editions data return an upstream error.", - "operationId": "goodreads-book-editions", + "description": "Returns every product-detail recommendation list H&M's own app shows for one product (which lists are present genuinely varies by product -- for example \"more from series\" and \"style with\" appear only when the product has one, while \"alternatives\" and \"upsell\" are more consistently present). An unrecognized product_id returns a well-formed empty result rather than an error.", + "operationId": "hm-product-related", "parameters": [ { - "description": "Goodreads book id", + "description": "Numeric H&M product id, from a listing/search result's id field", "in": "path", - "name": "id", + "name": "product_id", "required": true, "type": "string", - "x-example": "2767052" - }, - { - "description": "1-based page number, default 1", - "in": "query", - "name": "page", - "type": "integer" + "x-example": "1268470004" } ], "produces": [ @@ -379793,7 +453223,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodreads.editionsResponseDoc" + "$ref": "#/definitions/hm.relatedResponseDoc" } }, "400": { @@ -379802,14 +453232,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -379826,33 +453250,41 @@ "ApiKeyAuth": [] } ], - "summary": "List a Goodreads book's editions", + "summary": "Get an H&M product's related items", "tags": [ - "Goodreads" + "H&M" ] } }, - "/goodreads/book/{id}/reviews": { + "/hm/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a book's featured reviews (reviewer, rating, text, date, like/comment counts, spoiler flag), sorted by like count.", - "operationId": "goodreads-book-reviews", + "description": "Runs a free-text keyword search on H&M and returns products with pricing, images, colors, and per-size stock, plus search-quality metadata (a spelling-correction suggestion, related searches, and a content-filter flag). Unlike category browsing, an obscure or nonsense keyword returns a genuine empty result (zero products) rather than a fallback set. Pagination is page-based and real: requesting a page beyond the real last page returns a normal response with an empty products array rather than an error.", + "operationId": "hm-search", "parameters": [ { - "description": "Goodreads book id", - "in": "path", - "name": "id", + "description": "Free-text search keyword", + "in": "query", + "name": "query", "required": true, "type": "string", - "x-example": "2767052" + "x-example": "jeans" }, { - "description": "Max reviews, default 10, max 50", + "description": "Page number, one-based, defaults to 1", "in": "query", - "name": "limit", - "type": "integer" + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Results per page, 1 to 72, defaults to 36", + "in": "query", + "name": "page_size", + "type": "integer", + "x-example": 36 } ], "produces": [ @@ -379862,7 +453294,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodreads.reviewsResponseDoc" + "$ref": "#/definitions/hm.searchResponseDoc" } }, "400": { @@ -379871,14 +453303,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -379895,27 +453321,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Goodreads book's featured reviews", + "summary": "Search H&M product listings by free-text keyword", "tags": [ - "Goodreads" + "H&M" ] } }, - "/goodreads/genre/{name}": { + "/hm/search/suggestions": { "get": { "consumes": [ "application/json" ], - "description": "Returns up to 50 books on a Goodreads genre/shelf tag page (e.g. fantasy, romance, science-fiction), Goodreads' per-tag \"top books\" view: title, author, average rating, ratings count, publication year, and how many times the book was shelved under this specific tag. Goodreads' genre/shelf taxonomy is an open, user-generated folksonomy of thousands of tags, not a small fixed list, so there is no directory endpoint — pass any known tag slug, e.g. from a book's genres[] field or a value seen on goodreads.com. There is no pagination beyond the first 50.", - "operationId": "goodreads-genre", + "description": "Returns H&M's own search-box typeahead suggestions. When query is given, returns spelling-complete phrase suggestions and merchandised content results. When query is omitted or empty, instead returns trending searches and popular-search shortcuts (phrase/content suggestions are both empty in that mode). search_history is not session-scoped -- it returns the identical list for every request, so treat it as fixed default content rather than a real per-caller history.", + "operationId": "hm-search-suggestions", "parameters": [ { - "description": "Goodreads genre/shelf tag", - "in": "path", - "name": "name", - "required": true, + "description": "Free-text search-box input; omit or leave empty for trending/popular searches instead", + "in": "query", + "name": "query", "type": "string", - "x-example": "fantasy" + "x-example": "jean" } ], "produces": [ @@ -379925,23 +453350,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodreads.genreResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/hm.suggestResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -379958,33 +453371,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Goodreads genre shelf", + "summary": "Get H&M search-box suggestions", "tags": [ - "Goodreads" + "H&M" ] } }, - "/goodreads/list/{id}": { + "/hm/stores": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Goodreads Listopia list (ranked book list) by id, paginated.", - "operationId": "goodreads-list", + "description": "Returns H&M physical retail store locations near a point: name, phone, full address, and coordinates. Either search, or both lat and lng, is required. search is a free-text zip code or place name that is first resolved to coordinates; if it does not resolve to any location, a well-formed empty result is returned rather than an error. lat and lng, when given directly, skip that resolution step. radius_meters is optional (1000 to 50000, defaults to 10000). A location with no stores within the radius returns a well-formed empty result rather than an error.", + "operationId": "hm-stores", "parameters": [ { - "description": "Goodreads list id", - "in": "path", - "name": "id", - "required": true, + "description": "Free-text zip code or place name to resolve to coordinates", + "in": "query", + "name": "search", "type": "string", - "x-example": "1" + "x-example": "10001" }, { - "description": "1-based page number, default 1", + "description": "Latitude, requires lng", "in": "query", - "name": "page", - "type": "integer" + "name": "lat", + "type": "number", + "x-example": 40.7128 + }, + { + "description": "Longitude, requires lat", + "in": "query", + "name": "lng", + "type": "number", + "x-example": -74.006 + }, + { + "description": "Search radius in meters, 1000 to 50000, defaults to 10000", + "in": "query", + "name": "radius_meters", + "type": "integer", + "x-example": 10000 } ], "produces": [ @@ -379994,7 +453421,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodreads.listResponseDoc" + "$ref": "#/definitions/hm.storesResponseDoc" } }, "400": { @@ -380003,14 +453430,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -380027,19 +453448,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Goodreads Listopia list", + "summary": "Find nearby H&M physical stores", "tags": [ - "Goodreads" + "H&M" ] } }, - "/goodreads/lists": { + "/hollywoodreporter/article": { "get": { - "consumes": [ - "application/json" + "description": "Returns public The Hollywood Reporter article metadata (title, author(s), published/updated dates, section, lead image) and body paragraphs from a canonical article URL.", + "operationId": "hollywoodreporter-article", + "parameters": [ + { + "description": "Canonical Hollywood Reporter article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.hollywoodreporter.com/movies/movie-news/example-story-1236709066/" + } ], - "description": "Returns a catalog of well-known Goodreads Listopia lists (id, name, category). Goodreads has no directory or search endpoint for the tens of thousands of user-created lists, so this is served from a live popular-lists source when available, falling back to a curated, hand-picked catalog otherwise. Pass a returned id to GET /goodreads/list/{id} for that list's ranked book contents. Category enum: `general`, `genre`, `era`, `young_adult`, `children`, `holiday`.", - "operationId": "goodreads-lists", "produces": [ "application/json" ], @@ -380047,17 +453475,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodreads.listsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -380068,33 +453502,31 @@ "ApiKeyAuth": [] } ], - "summary": "List curated Goodreads Listopia lists", + "summary": "Get The Hollywood Reporter article content", "tags": [ - "Goodreads" + "Hollywood Reporter" ] } }, - "/goodreads/search": { + "/hollywoodreporter/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Goodreads for books by title or author using `q`, returning up to `limit` results (default 10, max 50). Each result has its id, title, author and author id, average rating, ratings count, page count, a truncated description, cover image URL and Goodreads URL. Only books are returned, not authors or lists.", - "operationId": "goodreads-search", + "description": "Returns one Hollywood Reporter staff writer or contributor's public profile: name, job title, headshot, biography, social/contact links, and one page of their recent articles.", + "operationId": "hollywoodreporter-author", "parameters": [ { - "description": "Search query", + "description": "Canonical hollywoodreporter.com/author/ URL", "in": "query", - "name": "q", + "name": "url", "required": true, "type": "string", - "x-example": "hunger games" + "x-example": "https://www.hollywoodreporter.com/author/borys-kit/" }, { - "description": "Max results, default 10, max 50", + "description": "1-based page of recent articles to return; defaults to 1", "in": "query", - "name": "limit", - "type": "integer" + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -380104,7 +453536,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodreads.searchResponseDoc" + "$ref": "#/definitions/publicnews.hollywoodReporterAuthorResponseDoc" } }, "400": { @@ -380113,8 +453545,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -380131,27 +453563,63 @@ "ApiKeyAuth": [] } ], - "summary": "Search Goodreads books", + "summary": "Get a Hollywood Reporter author profile", "tags": [ - "Goodreads" + "Hollywood Reporter" ] } }, - "/goodrx/answer": { + "/hollywoodreporter/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one GoodRx health question with its short answer, supporting paragraphs, the source article, the drug it is about, more questions about that drug, related articles, and related medications. Use a slug from /goodrx/answers.", - "operationId": "goodrx-answer", + "description": "Returns recent Hollywood Reporter headlines for one section or editorial vertical. `section` is required and takes one of 37 slugs such as `movie-reviews`, `tv-news`, `music-industry-news`, `awards`, `heat-vision` or `thr-esq`. Each item has its title and URL, plus summary, author, publication time and image when the outlet provides them.", + "operationId": "hollywoodreporter-headlines", "parameters": [ { - "description": "Question slug from /goodrx/answers", + "description": "Hollywood Reporter section slug", + "enum": [ + "arts", + "business", + "business-news", + "digital", + "film-tv-music-news", + "general-news", + "lifestyle", + "lifestyle-news", + "local-news", + "movie-features", + "movie-news", + "movie-reviews", + "movie-videos", + "movies", + "music", + "music-features", + "music-industry-news", + "music-news", + "news", + "politics-news", + "real-estate", + "shopping", + "style", + "tv", + "tv-features", + "tv-news", + "tv-reviews", + "tv-videos", + "awards", + "behind-the-screen", + "heat-vision", + "international", + "live-feed", + "rambling-reporter", + "the-fien-print", + "the-race", + "thr-esq" + ], "in": "query", - "name": "slug", + "name": "section", "required": true, "type": "string", - "x-example": "is-viagra-available-over-the-counter" + "x-example": "arts" } ], "produces": [ @@ -380161,7 +453629,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodrx.answerResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -380170,18 +453638,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -380194,19 +453650,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a GoodRx health question and answer", + "summary": "Get The Hollywood Reporter section headlines", "tags": [ - "GoodRx" + "Hollywood Reporter" ] } }, - "/goodrx/answers": { + "/hollywoodreporter/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns GoodRx's medication and health questions: the index's top questions and every question with its slug, grouped by drug where GoodRx's index groups it (questions GoodRx lists only in its sitemap carry just their slug). Use a slug with /goodrx/answer.", - "operationId": "goodrx-answers", + "description": "Returns The Hollywood Reporter's current top entertainment-industry stories from its home feed, with no parameters. Each item has its title and URL, plus summary, author, publication time and image when the outlet provides them.", + "operationId": "hollywoodreporter-news", "produces": [ "application/json" ], @@ -380214,7 +453667,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodrx.answersResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -380235,19 +453688,45 @@ "ApiKeyAuth": [] } ], - "summary": "List GoodRx health questions", + "summary": "Get The Hollywood Reporter top stories", "tags": [ - "GoodRx" + "Hollywood Reporter" ] } }, - "/goodrx/brands": { + "/hollywoodreporter/sections": { + "get": { + "description": "Returns the complete public section inventory accepted by /api/v1/hollywoodreporter/headlines (both The Hollywood Reporter's editorial categories and its named editorial verticals).", + "operationId": "hollywoodreporter-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The Hollywood Reporter sections", + "tags": [ + "Hollywood Reporter" + ] + } + }, + "/homedepot/categories": { "get": { "consumes": [ "application/json" ], - "description": "Lists the brand-name drugs GoodRx features on its brand-name drugs page. Each entry has the drug name, `slug`, GoodRx URL, description, information URL and lowest price where shown. The `slug` feeds the drug prices endpoint. If GoodRx is unreachable, a retained copy up to about a day old is returned and flagged with an `X-Availability-Mode: stale` header.", - "operationId": "goodrx-brands", + "description": "Returns Home Depot's top-level department taxonomy (name, path, url) from the homepage's own \"All Departments\" navigation. Each department's path is directly usable as GET /homedepot/category's path parameter.", + "operationId": "homedepot-categories", "produces": [ "application/json" ], @@ -380255,7 +453734,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodrx.brandsResponseDoc" + "$ref": "#/definitions/homedepot.categoriesResponseDoc" } }, "429": { @@ -380276,27 +453755,50 @@ "ApiKeyAuth": [] } ], - "summary": "List GoodRx featured brand-name drugs", + "summary": "Home Depot department taxonomy", "tags": [ - "GoodRx" + "Home Depot" ] } }, - "/goodrx/class": { + "/homedepot/category": { "get": { "consumes": [ "application/json" ], - "description": "Returns the drugs GoodRx lists for one drug class, with each drug's lowest displayed price and summary. Use a slug from /goodrx/classes.", - "operationId": "goodrx-class", + "description": "Returns one page of a Home Depot category or brand browse page's product grid: products with title, image, model, current/original price, and rating/review count, plus the category's total result count and the refinement facets the page offers. path is the segment of a /b/ URL after \"/b/\", e.g. \"Tools-Power-Tools-Drills-Impact-Drivers/N-5yc1vZc29x\"; a full https://www.homedepot.com/b/... URL or a \"/b/...\" path is also accepted. sort selects the result ordering and is one of best_match, top_sellers, top_rated, price_low_to_high, price_high_to_low, most_popular, delivery_date; omit it to keep the site's default ordering. page is a 1-indexed page number (default 1, maximum 42), 24 products per page. Each returned facet's path is directly usable as this endpoint's own path parameter to drill down. An unrecognized or blocked path returns an upstream error rather than an empty result.", + "operationId": "homedepot-category", "parameters": [ { - "description": "Class slug from /goodrx/classes", + "description": "Home Depot category/brand browse path, e.g. \\", "in": "query", - "name": "slug", + "name": "path", "required": true, "type": "string", - "x-example": "statins" + "x-example": "Tools-Power-Tools-Drills-Impact-Drivers/N-5yc1vZc29x" + }, + { + "description": "Result ordering. One of: best_match, top_sellers, top_rated, price_low_to_high, price_high_to_low, most_popular, delivery_date. Omit for the site's default ordering", + "enum": [ + "best_match", + "top_sellers", + "top_rated", + "price_low_to_high", + "price_high_to_low", + "most_popular", + "delivery_date" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "top_sellers" + }, + { + "description": "1-indexed page number, default 1, maximum 42 (12 products per page)", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -380306,7 +453808,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodrx.classResponseDoc" + "$ref": "#/definitions/homedepot.categoryResponseDoc" } }, "400": { @@ -380339,19 +453841,29 @@ "ApiKeyAuth": [] } ], - "summary": "List drugs in a GoodRx drug class", + "summary": "Browse a Home Depot category or brand page", "tags": [ - "GoodRx" + "Home Depot" ] } }, - "/goodrx/classes": { + "/homedepot/product/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Lists the drug classes in GoodRx's class directory, such as ACE Inhibitors, with each class name, GoodRx URL and the `slug` used to look up that class. If GoodRx is unreachable, a retained copy up to about a day old is returned and flagged with an `X-Availability-Mode: stale` header.", - "operationId": "goodrx-classes", + "description": "Returns one Home Depot product's full detail: name, description, brand, model, store SKU, GTIN, price, images, aggregate rating and review count, and the featured customer reviews embedded on the product page. id is the numeric product/internet id (the trailing number of a /p/{slug}/{id} URL). The product page does not distinguish an unknown id from a known one in a consistent way, so an unrecognized id may return an upstream error rather than a not-found.", + "operationId": "homedepot-product", + "parameters": [ + { + "description": "Home Depot product/internet id, e.g. 320326875", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "320326875" + } + ], "produces": [ "application/json" ], @@ -380359,7 +453871,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodrx.classesResponseDoc" + "$ref": "#/definitions/homedepot.productResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -380380,27 +453904,27 @@ "ApiKeyAuth": [] } ], - "summary": "List GoodRx drug classes", + "summary": "Home Depot product detail", "tags": [ - "GoodRx" + "Home Depot" ] } }, - "/goodrx/comparison": { + "/homedepot/product/{id}/questions": { "get": { "consumes": [ "application/json" ], - "description": "Returns a GoodRx head-to-head drug comparison's key takeaways and the two drugs compared, with their price-page and information slugs. Use a slug from /goodrx/comparisons or /goodrx/drug-info alternatives.", - "operationId": "goodrx-comparison", + "description": "Returns the first page (8 questions) of a Home Depot product's customer questions and answers, plus the product's total Q&A count. id is the numeric product/internet id. A product with no Q&A returns a genuine zero-result response rather than an error.", + "operationId": "homedepot-product-questions", "parameters": [ { - "description": "Comparison slug", - "in": "query", - "name": "slug", + "description": "Home Depot product/internet id, e.g. 328425526", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "lipitor-vs-zetia" + "x-example": "328425526" } ], "produces": [ @@ -380410,7 +453934,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodrx.comparisonResponseDoc" + "$ref": "#/definitions/homedepot.productQuestionsResponseDoc" } }, "400": { @@ -380419,12 +453943,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -380443,19 +453961,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get a GoodRx drug comparison", + "summary": "Home Depot product questions and answers", "tags": [ - "GoodRx" + "Home Depot" ] } }, - "/goodrx/comparisons": { + "/homedepot/search": { "get": { "consumes": [ "application/json" ], - "description": "Lists GoodRx's head-to-head drug comparisons grouped by health topic, for example ADHD. Each comparison has a name, a `slug` for the comparison lookup and its GoodRx URL. If GoodRx is unreachable, a retained copy up to about a day old is returned and flagged with an `X-Availability-Mode: stale` header.", - "operationId": "goodrx-comparisons", + "description": "Returns one page of a Home Depot keyword search's product listing: products with title, image, model, current/original price, and rating/review count, plus the search's total result count. A page carries up to 24 products, or up to 12 when Home Depot answers the query with a category page. q is free-text search keywords, e.g. \"impact driver\". page is a 1-indexed page number (default 1). An unrecognized/blocked query returns an upstream error rather than an empty result.", + "operationId": "homedepot-search", + "parameters": [ + { + "description": "Free-text search keywords, e.g. \\", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "impact driver" + }, + { + "description": "1-indexed page number, default 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], "produces": [ "application/json" ], @@ -380463,7 +453998,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodrx.comparisonsResponseDoc" + "$ref": "#/definitions/homedepot.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -380484,27 +454025,27 @@ "ApiKeyAuth": [] } ], - "summary": "List GoodRx drug comparisons", + "summary": "Home Depot keyword search", "tags": [ - "GoodRx" + "Home Depot" ] } }, - "/goodrx/condition": { + "/homedepot/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns a health condition's GoodRx overview article as titled sections (definition, types, causes, symptoms, diagnosis, medications, treatments, prevention, references), with the condition's alternate name, authors, publish and modified dates, the medications-list URL, and related articles. Use a slug from /goodrx/conditions.", - "operationId": "goodrx-condition", + "description": "Returns Home Depot's own search-box typeahead suggestions for a partial query, in the site's own ranking order. term is the partial search text, e.g. \"drill\". Each suggestion's term is directly usable as GET /homedepot/search's q parameter. A term that matches nothing returns an empty suggestion list rather than an error.", + "operationId": "homedepot-suggest", "parameters": [ { - "description": "Condition slug from /goodrx/conditions", + "description": "Partial search text, e.g. \\", "in": "query", - "name": "slug", + "name": "term", "required": true, "type": "string", - "x-example": "acne" + "x-example": "drill" } ], "produces": [ @@ -380514,7 +454055,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodrx.conditionResponseDoc" + "$ref": "#/definitions/homedepot.suggestResponseDoc" } }, "400": { @@ -380523,12 +454064,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -380547,27 +454082,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a GoodRx health condition overview", + "summary": "Home Depot search suggestions", "tags": [ - "GoodRx" + "Home Depot" ] } }, - "/goodrx/condition-drugs": { + "/hotels/autocomplete": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the medications GoodRx lists for one health condition, with each drug's lowest displayed price and summary. Use a slug from /goodrx/conditions whose has_medications is true.", - "operationId": "goodrx-condition-drugs", + "description": "Returns Hotels.com search-box suggestions for a partial destination or property name in `q` (up to 120 characters). Each suggestion has its type, primary and secondary text, full location name, coordinates, and region or property id. A query with no match returns an empty `suggestions` list.", + "operationId": "hotels-autocomplete", "parameters": [ { - "description": "Condition slug from /goodrx/conditions", + "description": "Partial destination or property name", "in": "query", - "name": "slug", + "name": "q", "required": true, "type": "string", - "x-example": "acne" + "x-example": "New York" } ], "produces": [ @@ -380577,7 +454109,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodrx.conditionDrugsResponseDoc" + "$ref": "#/definitions/hotels.autocompleteResponseDoc" } }, "400": { @@ -380586,14 +454118,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -380610,19 +454142,30 @@ "ApiKeyAuth": [] } ], - "summary": "List GoodRx medications for a condition", + "summary": "Get Hotels.com destination suggestions", "tags": [ - "GoodRx" + "Hotels.com" ] } }, - "/goodrx/conditions": { - "get": { + "/hotels/offers": { + "post": { "consumes": [ "application/json" ], - "description": "Lists the health conditions in GoodRx's conditions directory, with each condition's name, `slug` and GoodRx URL. `has_medications` tells you whether GoodRx publishes a medications list for that condition. If GoodRx is unreachable, a retained copy up to about a day old is returned and flagged with an `X-Availability-Mode: stale` header.", - "operationId": "goodrx-conditions", + "description": "Returns the public room/unit offer summaries shown for one Hotels.com property and date range, including room labels and non-transactional offer messages. Booking, checkout, payment, and reservation tokens are never returned. property_id is the numeric global property id from a Search response.", + "operationId": "hotels-offers", + "parameters": [ + { + "description": "Room offers request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/hotels.OffersOption" + } + } + ], "produces": [ "application/json" ], @@ -380630,7 +454173,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodrx.conditionsResponseDoc" + "$ref": "#/definitions/hotels.offersResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -380639,6 +454194,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -380651,40 +454212,28 @@ "ApiKeyAuth": [] } ], - "summary": "List GoodRx health conditions", + "summary": "Get Hotels.com room offers", "tags": [ - "GoodRx" + "Hotels.com" ] } }, - "/goodrx/drug-guide": { - "get": { + "/hotels/property": { + "post": { "consumes": [ "application/json" ], - "description": "Returns one dedicated GoodRx drug guide. side-effects: common and less common side effects with reported frequencies, serious and reported side effects, and the label source. dosage: coupon price per dosage and quantity for each dosage form, and typical dosing. interactions: interacting drugs grouped by severity (not_recommended, usually_not_recommended, increased_risk), with GoodRx slugs where linked. Includes reviewer, last-reviewed date, and related guides. Use pairs from /goodrx/drug-guides; a drug without that guide returns 404. Requests use US egress because GoodRx is US-only.", - "operationId": "goodrx-drug-guide", + "description": "Returns public static metadata from one canonical Hotels.com property page, including name, address, rating, images, and amenities. Date-bound availability, prices, booking, and review content are excluded.", + "operationId": "hotels-property", "parameters": [ { - "description": "Drug slug from /goodrx/drug-guides", - "in": "query", - "name": "slug", - "required": true, - "type": "string", - "x-example": "torsemide" - }, - { - "description": "Guide topic", - "enum": [ - "side-effects", - "dosage", - "interactions" - ], - "in": "query", - "name": "topic", + "description": "Canonical Hotels.com property URL", + "in": "body", + "name": "request", "required": true, - "type": "string", - "x-example": "side-effects" + "schema": { + "$ref": "#/definitions/hotels.PropertyOption" + } } ], "produces": [ @@ -380694,7 +454243,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodrx.drugGuideResponseDoc" + "$ref": "#/definitions/hotels.propertyResponseDoc" } }, "400": { @@ -380703,14 +454252,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -380727,37 +454276,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get a GoodRx drug guide", + "summary": "Get Hotels.com property details", "tags": [ - "GoodRx" + "Hotels.com" ] } }, - "/goodrx/drug-guides": { - "get": { + "/hotels/rates": { + "post": { "consumes": [ "application/json" ], - "description": "Returns GoodRx's dedicated drug guide pages (side effects, dosage, and interactions) as drug slug and topic pairs with last-modified dates, optionally filtered by topic and by the first character of the drug slug. Use the pairs with /goodrx/drug-guide.", - "operationId": "goodrx-drug-guides", + "description": "Returns one Hotels.com property's date-bound rates and availability: the same property card Search returns, with the live per-night and per-stay prices Hotels.com shows for the requested dates. property_id is the numeric global property id from a Search response's properties[].id; it is distinct from the legacy /ho/ URL id.", + "operationId": "hotels-rates", "parameters": [ { - "description": "Guide topic", - "enum": [ - "side-effects", - "dosage", - "interactions" - ], - "in": "query", - "name": "topic", - "type": "string" - }, - { - "description": "First character of the drug slug: a-z or 0-9", - "in": "query", - "name": "letter", - "type": "string", - "x-example": "a" + "description": "Rates request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/hotels.RatesOption" + } } ], "produces": [ @@ -380767,7 +454307,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodrx.drugGuidesResponseDoc" + "$ref": "#/definitions/hotels.ratesResponseDoc" } }, "400": { @@ -380776,12 +454316,24 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -380794,38 +454346,28 @@ "ApiKeyAuth": [] } ], - "summary": "List GoodRx drug guides", + "summary": "Get Hotels.com rates for one property", "tags": [ - "GoodRx" + "Hotels.com" ] } }, - "/goodrx/drug-info": { - "get": { + "/hotels/reviews": { + "post": { "consumes": [ "application/json" ], - "description": "Returns a drug's GoodRx information page as titled sections (uses, side effects, pros and cons, pharmacist tips, risks and warnings, dosage, interactions, contraindications, alternatives, pill images, references, and common questions), plus authors, publish and review dates, FAQs, and comparison links to alternatives. With audience=pets it returns the drug's cat and dog page (veterinary uses, side effects, and dosing) for drugs listed by /goodrx/pet-medications; other drugs return 404. Requests use US egress because GoodRx is US-only.", - "operationId": "goodrx-drug-info", + "description": "Returns one Hotels.com property's review overview: the overall rating (0-10) with its descriptive label, the per-category sub-ratings (cleanliness, service, amenities, and so on), and a bounded set of highlighted guest reviews with reviewer, date, rating label, text, and verified-stay flag. property_id is the numeric global property id from a Search response's properties[].id. This mirrors the property page's Guest reviews section; the full paginated review archive is not exposed.", + "operationId": "hotels-reviews", "parameters": [ { - "description": "Drug slug from /goodrx/drugs (or /goodrx/pet-medications for audience=pets)", - "in": "query", - "name": "slug", + "description": "Reviews request", + "in": "body", + "name": "request", "required": true, - "type": "string", - "x-example": "atorvastatin" - }, - { - "default": "people", - "description": "people for the general page, pets for the cat and dog page", - "enum": [ - "people", - "pets" - ], - "in": "query", - "name": "audience", - "type": "string" + "schema": { + "$ref": "#/definitions/hotels.ReviewsOption" + } } ], "produces": [ @@ -380835,7 +454377,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodrx.drugInfoResponseDoc" + "$ref": "#/definitions/hotels.reviewsResponseDoc" } }, "400": { @@ -380856,6 +454398,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -380868,27 +454416,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get GoodRx drug information", + "summary": "Get Hotels.com guest reviews", "tags": [ - "GoodRx" + "Hotels.com" ] } }, - "/goodrx/drug-options": { - "get": { + "/hotels/reviews/archive": { + "post": { "consumes": [ "application/json" ], - "description": "Returns every brand and generic label, dosage form, strength, and quantity GoodRx prices for one drug, with GoodRx's default prescription. Use these values for /goodrx/drug-prices.", - "operationId": "goodrx-drug-options", + "description": "Returns one page of public guest reviews for a Hotels.com property, including reviewer, date, traveler type, rating label, title, and message. Use page and page_size to walk the archive; the response reports whether another page is available. property_id is the numeric global property id from a Search response's properties[].id. Booking, account, and private review data are not included.", + "operationId": "hotels-reviews-archive", "parameters": [ { - "description": "Drug slug from /goodrx/drugs", - "in": "query", - "name": "slug", + "description": "Review archive request", + "in": "body", + "name": "request", "required": true, - "type": "string", - "x-example": "atorvastatin" + "schema": { + "$ref": "#/definitions/hotels.ReviewsArchiveOption" + } } ], "produces": [ @@ -380898,7 +454447,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodrx.drugOptionsResponseDoc" + "$ref": "#/definitions/hotels.reviewsArchiveResponseDoc" } }, "400": { @@ -380919,6 +454468,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -380931,83 +454486,28 @@ "ApiKeyAuth": [] } ], - "summary": "List a GoodRx drug's prescription options", + "summary": "List Hotels.com guest reviews", "tags": [ - "GoodRx" + "Hotels.com" ] } }, - "/goodrx/drug-prices": { - "get": { + "/hotels/search": { + "post": { "consumes": [ "application/json" ], - "description": "Returns GoodRx coupon, membership, and mail-order prices by pharmacy for one drug and prescription (brand/generic label, form, dosage, quantity), plus the drug summary, the priced configuration, the location prices were computed for, and every available label/form/dosage/quantity. Omit label/form/dosage/quantity for GoodRx's default prescription; values must come from /goodrx/drug-options. Pass latitude and longitude (optionally zip_code and state) to price at a US location; otherwise prices reflect a US location chosen by GoodRx. Requests use US egress because GoodRx is US-only.", - "operationId": "goodrx-drug-prices", + "description": "Returns a page of date-bound Hotels.com hotel search results for either a free-text destination or a numeric Hotels.com region_id: property cards with per-night and per-stay prices, review score and count, location, thumbnail, amenities, and promotional badges. Provide exactly one of query or region_id; region_id skips destination typeahead resolution. Prices are the live rates Hotels.com shows for the requested check-in and check-out dates.", + "operationId": "hotels-search", "parameters": [ { - "description": "Drug slug from /goodrx/drugs, /goodrx/class, or /goodrx/condition-drugs", - "in": "query", - "name": "slug", + "description": "Search request", + "in": "body", + "name": "request", "required": true, - "type": "string", - "x-example": "atorvastatin" - }, - { - "description": "Brand or generic label slug from /goodrx/drug-options", - "in": "query", - "name": "label", - "type": "string", - "x-example": "atorvastatin" - }, - { - "description": "Form slug from /goodrx/drug-options", - "in": "query", - "name": "form", - "type": "string", - "x-example": "tablet" - }, - { - "description": "Dosage slug from /goodrx/drug-options", - "in": "query", - "name": "dosage", - "type": "string", - "x-example": "20mg" - }, - { - "description": "Quantity (1-999999); /goodrx/drug-options lists GoodRx's standard quantities", - "in": "query", - "name": "quantity", - "type": "integer", - "x-example": 30 - }, - { - "description": "Latitude of a US location to price at (requires longitude)", - "in": "query", - "name": "latitude", - "type": "number", - "x-example": 40.7506 - }, - { - "description": "Longitude of a US location to price at (requires latitude)", - "in": "query", - "name": "longitude", - "type": "number", - "x-example": -73.9972 - }, - { - "description": "Five-digit ZIP code of that location", - "in": "query", - "name": "zip_code", - "type": "string", - "x-example": "10001" - }, - { - "description": "Two-letter state code of that location", - "in": "query", - "name": "state", - "type": "string", - "x-example": "NY" + "schema": { + "$ref": "#/definitions/hotels.SearchOption" + } } ], "produces": [ @@ -381017,7 +454517,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodrx.drugPricesResponseDoc" + "$ref": "#/definitions/hotels.searchResponseDoc" } }, "400": { @@ -381038,6 +454538,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -381050,55 +454556,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get GoodRx drug prices by pharmacy", + "summary": "Search Hotels.com hotels", "tags": [ - "GoodRx" + "Hotels.com" ] } }, - "/goodrx/drugs": { + "/houston-chronicle/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the drugs GoodRx files under one letter of its A-Z directory, chosen with the required `letter` (`a` to `z`). Each drug has its name, price-page `slug`, GoodRx URL and drug-information URL. If GoodRx is unreachable, a retained copy up to about a day old is returned and flagged with an `X-Availability-Mode: stale` header.", - "operationId": "goodrx-drugs", + "description": "Returns public Houston Chronicle article metadata and the body available in the anonymous response. Premium stories are flagged from the publisher's content-tier and JSON-LD markers; the service does not authenticate or bypass access controls.", + "operationId": "houston-chronicle-article", "parameters": [ { - "description": "Directory letter", - "enum": [ - "a", - "b", - "c", - "d", - "e", - "f", - "g", - "h", - "i", - "j", - "k", - "l", - "m", - "n", - "o", - "p", - "q", - "r", - "s", - "t", - "u", - "v", - "w", - "x", - "y", - "z" - ], + "description": "Canonical Houston Chronicle article URL", "in": "query", - "name": "letter", + "name": "url", "required": true, "type": "string", - "x-example": "a" + "x-example": "https://www.houstonchronicle.com/news/article/example-story-22400001.php" } ], "produces": [ @@ -381108,7 +454583,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodrx.drugsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -381117,8 +454592,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -381135,27 +454610,24 @@ "ApiKeyAuth": [] } ], - "summary": "List GoodRx drugs by letter", + "summary": "Get Houston Chronicle article content", "tags": [ - "GoodRx" + "Houston Chronicle" ] } }, - "/goodrx/health-article": { + "/houston-chronicle/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one GoodRx Health article: headline, description, authors, medical reviewers, published and modified dates, category tag, key takeaways, the body as headed sections of paragraphs and lists, FAQs, references, and related medications. Requests use US egress because GoodRx is US-only.", - "operationId": "goodrx-health-article", + "description": "Returns a Houston Chronicle author profile by `url`, a canonical `houstonchronicle.com/author//` link. The response has the `name`, `job_title`, `biography`, `image_url`, social profile links in `same_as`, and recent article cards with title, URL and summary.", + "operationId": "houston-chronicle-author", "parameters": [ { - "description": "Article path from /goodrx/health-articles (or a www.goodrx.com article URL)", + "description": "Canonical Houston Chronicle author URL", "in": "query", - "name": "path", + "name": "url", "required": true, "type": "string", - "x-example": "well-being/sleep/cbd-for-sleep" + "x-example": "https://www.houstonchronicle.com/author/example-writer/" } ], "produces": [ @@ -381165,7 +454637,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodrx.healthArticleResponseDoc" + "$ref": "#/definitions/publicnews.houstonChronicleAuthorResponseDoc" } }, "400": { @@ -381180,12 +454652,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -381198,61 +454664,61 @@ "ApiKeyAuth": [] } ], - "summary": "Get a GoodRx Health article", + "summary": "Get a Houston Chronicle author profile", "tags": [ - "GoodRx" + "Houston Chronicle" ] } }, - "/goodrx/health-articles": { + "/houston-chronicle/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of GoodRx Health articles in a section, optionally one topic, most recently modified first: each article's path, section, topic, URL, and last-modified date, with total and total pages. Use a path with /goodrx/health-article.", - "operationId": "goodrx-health-articles", + "description": "Returns current public headlines from a verified Houston Chronicle editorial section. Pages that return Hearst's Client Challenge are retried through configured rendering backends; the service does not solve or bypass access controls.", + "operationId": "houston-chronicle-headlines", "parameters": [ { - "description": "Article section", + "description": "Houston Chronicle public section slug", "enum": [ - "conditions", - "health-topic", - "well-being", - "pet-health", - "insurance", - "classes", - "drugs", - "healthcare-access", - "corporate", - "hcp", - "drug" + "news-houston-texas", + "news-houston-texas-trending", + "neighborhood", + "news-houston-texas-education", + "news-houston-texas-environment", + "health", + "news-houston-weather", + "politics", + "politics-houston", + "politics-texas", + "politics-us-world", + "business", + "business-energy", + "business-real-estate", + "business-tech", + "sports", + "sports-texans", + "sports-astros", + "sports-rockets", + "sports-college", + "sports-high-school", + "sports-dynamo", + "entertainment", + "lifestyle", + "food-restaurants", + "food-restaurants-reviews", + "food-restaurants-bbq", + "opinion", + "opinion-editorials", + "opinion-letters", + "opinion-columnists", + "news-interactives", + "news-investigations", + "la-voz", + "visuals" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "conditions" - }, - { - "description": "Topic slug from /goodrx/health-topics", - "in": "query", - "name": "topic", - "type": "string", - "x-example": "sleep" - }, - { - "default": 1, - "description": "Page number, starting at 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "default": 50, - "description": "Articles per page (1-200)", - "in": "query", - "name": "page_size", - "type": "integer" + "x-example": "news-houston-texas" } ], "produces": [ @@ -381262,7 +454728,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodrx.healthArticlesResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -381271,11 +454737,37 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Houston Chronicle section headlines", + "tags": [ + "Houston Chronicle" + ] + } + }, + "/houston-chronicle/news": { + "get": { + "description": "Returns current public Houston Chronicle homepage stories. Publisher premium markers are preserved on article responses.", + "operationId": "houston-chronicle-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -381295,40 +454787,42 @@ "ApiKeyAuth": [] } ], - "summary": "List GoodRx Health articles", + "summary": "Get Houston Chronicle top stories", "tags": [ - "GoodRx" + "Houston Chronicle" ] } }, - "/goodrx/health-topics": { + "/houston-chronicle/sections": { "get": { - "consumes": [ + "description": "Returns every live-verified public editorial section accepted by the Houston Chronicle headlines endpoint. Newsletter, games, audio-only, external marketplace and interactive project/tool links are excluded.", + "operationId": "houston-chronicle-sections", + "produces": [ "application/json" ], - "description": "Returns every GoodRx Health article topic as section and topic pairs with article counts and last-modified dates, optionally for one section. Sections: conditions, health-topic, well-being, pet-health, insurance, classes, drugs, healthcare-access, corporate, hcp (clinician resources), and drug (articles about one drug; the topic is the drug slug). Use the pairs with /goodrx/health-articles.", - "operationId": "goodrx-health-topics", - "parameters": [ + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Article section", - "enum": [ - "conditions", - "health-topic", - "well-being", - "pet-health", - "insurance", - "classes", - "drugs", - "healthcare-access", - "corporate", - "hcp", - "drug" - ], - "in": "query", - "name": "section", - "type": "string" + "ApiKeyAuth": [] } ], + "summary": "Get Houston Chronicle sections", + "tags": [ + "Houston Chronicle" + ] + } + }, + "/howtogeek/news": { + "get": { + "description": "Returns current stories from How-To Geek's public RSS feed. Summaries are publisher teasers, not full article text. This feed-only route does not claim a complete section taxonomy or retrieve article bodies.", + "operationId": "howtogeek-news", "produces": [ "application/json" ], @@ -381336,13 +454830,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodrx.healthTopicsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -381363,19 +454851,26 @@ "ApiKeyAuth": [] } ], - "summary": "List GoodRx Health article topics", + "summary": "Get How-To Geek top stories", "tags": [ - "GoodRx" + "How-To Geek" ] } }, - "/goodrx/pet-medications": { + "/huffpost/article": { "get": { - "consumes": [ - "application/json" + "description": "Returns a HuffPost article by `url`, a canonical `huffpost.com/entry/__` link. The response has the title, description, section, authors, lead image, publish and update times, body `paragraphs` and a `paywalled` flag.", + "operationId": "huffpost-article", + "parameters": [ + { + "description": "Canonical HuffPost article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.huffpost.com/entry/example-story_n_1234567890abcdef12345678" + } ], - "description": "Lists the drugs that have a GoodRx information page for cats and dogs (21 on 2026-10-03). Each entry has the drug `slug` and the URL of its pet page; the `slug` can be passed to the drug information lookup with `audience=pets`. A retained copy up to about a day old is returned, flagged `X-Availability-Mode: stale`, if GoodRx is unreachable.", - "operationId": "goodrx-pet-medications", "produces": [ "application/json" ], @@ -381383,11 +454878,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/goodrx.petMedicationsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -381404,27 +454905,24 @@ "ApiKeyAuth": [] } ], - "summary": "List GoodRx pet medications", + "summary": "Get HuffPost article content", "tags": [ - "GoodRx" + "HuffPost" ] } }, - "/google-jobs/job": { + "/huffpost/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Google Careers posting by its numeric job id (the `id` field returned by search).", - "operationId": "google-jobs-job", + "description": "Returns a HuffPost author or contributor profile by `url`, a canonical `https://www.huffpost.com/author/` link. The response has the name, recent articles, and, when the profile shows them, `job_title`, `image_url`, `biography` and `social_links` (platform and URL). Outside contributors often lack most of these optional fields.", + "operationId": "huffpost-author", "parameters": [ { - "description": "Numeric Google job id", + "description": "Canonical huffpost.com/author/ URL", "in": "query", - "name": "id", + "name": "url", "required": true, "type": "string", - "x-example": "85207000467546822" + "x-example": "https://www.huffpost.com/author/lee-moran" } ], "produces": [ @@ -381434,7 +454932,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googlejobs.jobResponseDoc" + "$ref": "#/definitions/publicnews.huffPostAuthorResponseDoc" } }, "400": { @@ -381449,12 +454947,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -381467,41 +454959,66 @@ "ApiKeyAuth": [] } ], - "summary": "Google Jobs single posting", + "summary": "Get a HuffPost author profile", "tags": [ - "Google Jobs" + "HuffPost" ] } }, - "/google-jobs/search": { + "/huffpost/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Google's public careers site (careers.google.com) via its server-rendered search page's embedded job data. Each result includes the description, responsibilities, and qualifications inline. Page size is fixed by Google at 20 results.", - "operationId": "google-jobs-search", + "description": "Returns current HuffPost headlines for one topic hub. `section` is required and takes a slug that can include a path, such as `news/politics`, `impact/green`, `entertainment/tv`, `life/travel` or `voices/black-voices`. Each item has its title, URL and image. Summary, author and publication time are not returned.", + "operationId": "huffpost-headlines", "parameters": [ { - "description": "Search query", + "description": "HuffPost section slug", + "enum": [ + "news", + "news/us-news", + "news/world-news", + "impact/business", + "impact/green", + "section/health", + "impact/topic/social-justice", + "news/crime", + "news/politics", + "news/topic/us-congress", + "news/topic/extremism", + "section/opinion", + "entertainment", + "entertainment/arts", + "news/media", + "entertainment/celebrity", + "entertainment/tv", + "section/sports", + "life", + "life/healthy-living", + "life/travel", + "life/technology", + "life/taste", + "life/style", + "life/family", + "life/relationships", + "life/money", + "life/huffpost-home", + "life/worklife", + "life/huffpost-shopping", + "voices", + "voices/black-voices", + "voices/queer-voices", + "voices/latino-voices", + "voices/indigenous-voices", + "voices/asian-voices", + "voices/womens-voices", + "voices/voices-of-disabled-people", + "section/huffpost-personal", + "section/video" + ], "in": "query", - "name": "q", + "name": "section", "required": true, "type": "string", - "x-example": "software engineer" - }, - { - "description": "Location filter (free text)", - "in": "query", - "name": "location", - "type": "string", - "x-example": "Singapore" - }, - { - "description": "Page number, 1-based", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "news" } ], "produces": [ @@ -381511,7 +455028,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googlejobs.searchResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -381520,11 +455037,37 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get HuffPost section headlines", + "tags": [ + "HuffPost" + ] + } + }, + "/huffpost/news": { + "get": { + "description": "Returns HuffPost's current top stories from its homepage, with no parameters. Each item has its title, URL and image where available. Summary, author and publication time are not returned.", + "operationId": "huffpost-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "503": { "description": "Service Unavailable", @@ -381538,27 +455081,50 @@ "ApiKeyAuth": [] } ], - "summary": "Google Jobs search", + "summary": "Get HuffPost top stories", "tags": [ - "Google Jobs" + "HuffPost" ] } }, - "/google/finance/analyst-articles/{quote}": { + "/huffpost/sections": { "get": { - "consumes": [ + "description": "Lists the topic hubs accepted by `huffpost-headlines`, such as `news/politics`, `impact/business`, `life/travel` and `voices/latino-voices`. Each entry has a `slug`, display `name` and hub `url`. Games, Horoscopes, Newsletters and HuffPost's international editions are excluded.", + "operationId": "huffpost-sections", + "produces": [ "application/json" ], - "description": "Returns the analyst articles Google Finance shows for a quote such as `AAPL:NASDAQ`. Each article has its title, source, URL, publication time (ISO and Unix), thumbnail and the related instruments with price, change and exchange. Articles come back only when Google Finance has them for that quote.", - "operationId": "google-finance-analyst-articles", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get HuffPost sections", + "tags": [ + "HuffPost" + ] + } + }, + "/ign/article": { + "get": { + "description": "Returns public IGN article or review metadata and body paragraphs from a canonical article URL. Only canonical https://www.ign.com/articles/ URLs are accepted; wiki, video, and game/movie/TV hub pages return an invalid-parameter error.", + "operationId": "ign-article", "parameters": [ { - "description": "Quote identifier such as AAPL:NASDAQ", - "in": "path", - "name": "quote", + "description": "Canonical IGN article or review URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "AAPL:NASDAQ" + "x-example": "https://www.ign.com/articles/brothers-season-1-review" } ], "produces": [ @@ -381568,7 +455134,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.articlesResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -381583,12 +455149,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -381601,33 +455161,24 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance analyst articles", + "summary": "Get IGN article or review content", "tags": [ - "Google" + "IGN" ] } }, - "/google/finance/chart/{quote}": { + "/ign/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the price chart for a Google Finance quote such as `AAPL:NASDAQ` or `BTC-USD` over a window from `1d` to `max` (default `1d`). Each point has a time, price and volume; the response also carries the instrument's name, exchange, currency, current price, change and previous close.", - "operationId": "google-finance-chart", + "description": "Returns an IGN author profile by `url`, a canonical `https://www.ign.com/person/` link. The response has the `username`, name, job title, location, biography, headshot, `social_links` (platform and URL) and the author's recent articles.", + "operationId": "ign-author", "parameters": [ { - "description": "Quote identifier such as AAPL:NASDAQ", - "in": "path", - "name": "quote", + "description": "Canonical www.ign.com/person/ URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "AAPL:NASDAQ" - }, - { - "description": "Window: 1d, 5d, 1m, 6m, ytd, 1y, 5y, max", - "in": "query", - "name": "window", - "type": "string" + "x-example": "https://www.ign.com/person/tomphillipsIGN" } ], "produces": [ @@ -381637,7 +455188,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.chartResponseDoc" + "$ref": "#/definitions/publicnews.ignAuthorResponseDoc" } }, "400": { @@ -381652,12 +455203,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -381670,27 +455215,38 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance chart data", + "summary": "Get an IGN author profile", "tags": [ - "Google" + "IGN" ] } }, - "/google/finance/classification/{quote}": { + "/ign/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the category labels Google Finance assigns to a quote such as `AAPL:NASDAQ`, for example Technology, in `categories`. The response also carries the instrument itself: ticker, exchange, name, current price, change, previous close, currency and after-hours data.", - "operationId": "google-finance-classification", + "description": "Returns current IGN headlines for one section. `section` is required and takes one of `news`, `reviews`, `games`, `movies`, `tv`, `tech`, `nintendo`, `playstation`, `xbox`, `pc`, `mobile` or `comics`. Each item has its title and URL, plus summary, author, publication time and image when the outlet provides them.", + "operationId": "ign-headlines", "parameters": [ { - "description": "Quote identifier such as AAPL:NASDAQ", - "in": "path", - "name": "quote", + "description": "IGN section slug", + "enum": [ + "news", + "reviews", + "games", + "movies", + "tv", + "tech", + "nintendo", + "playstation", + "xbox", + "pc", + "mobile", + "comics" + ], + "in": "query", + "name": "section", "required": true, "type": "string", - "x-example": "AAPL:NASDAQ" + "x-example": "news" } ], "produces": [ @@ -381700,7 +455256,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.classificationResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -381709,14 +455265,40 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get IGN section headlines", + "tags": [ + "IGN" + ] + } + }, + "/ign/news": { + "get": { + "description": "Returns IGN's current top stories on gaming and entertainment, with no parameters. Each item has its title and URL, plus summary, author, publication time and image when the outlet provides them, covering games, film and TV news in one list.", + "operationId": "ign-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -381733,27 +455315,57 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance classification data", + "summary": "Get IGN top stories", "tags": [ - "Google" + "IGN" ] } }, - "/google/finance/company/{quote}": { + "/ign/sections": { "get": { - "consumes": [ + "description": "Lists the 12 IGN sections accepted by `ign-headlines`: `news`, `reviews`, `games`, `movies`, `tv`, `tech`, `nintendo`, `playstation`, `xbox`, `pc`, `mobile` and `comics`. Each entry has a `slug`, display `name` and `url`.", + "operationId": "ign-sections", + "produces": [ "application/json" ], - "description": "Returns Google Finance company details for a quote such as `AAPL:NASDAQ`: description, CEO, employee count, headquarters, sector, market capitalisation, P/E ratio, open, day high and low, 52-week high and low, and volume.", - "operationId": "google-finance-company", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get IGN sections", + "tags": [ + "IGN" + ] + } + }, + "/ikea/availability": { + "get": { + "description": "Returns one IKEA item's real-time home-delivery and click-and-collect stock signal for the requested country. item_no is IKEA's own item number.", + "operationId": "ikea-availability", "parameters": [ { - "description": "Quote identifier such as AAPL:NASDAQ", - "in": "path", - "name": "quote", + "description": "IKEA item number", + "in": "query", + "name": "item_no", "required": true, "type": "string", - "x-example": "AAPL:NASDAQ" + "x-example": "80213074" + }, + { + "default": "us", + "description": "Lowercase 2-letter IKEA site country code", + "in": "query", + "name": "country", + "type": "string" } ], "produces": [ @@ -381763,7 +455375,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.companyResponseDoc" + "$ref": "#/definitions/ikea.availabilityResponseDoc" } }, "400": { @@ -381778,8 +455390,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -381796,27 +455408,54 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance company data", + "summary": "Get an IKEA item's real-time stock availability", "tags": [ - "Google" + "IKEA" ] } }, - "/google/finance/context": { + "/ikea/categories": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Google Finance for instruments matching a company name or ticker query and returns results with ticker, exchange, name, price, currency, and change data. Use a returned ticker with quote, company, chart, or news endpoints.", - "operationId": "google-finance-context", + "description": "Returns a page of IKEA's full category taxonomy, sourced from IKEA's own site navigation data: every top-level department and nested subcategory, with the key each one uses as ikea_category's own category input. key is IKEA's own category key (numeric, e.g. 20649, or a short alphanumeric department code, e.g. st001). parent_key is the immediate parent category's own key (empty for a top-level department); level is depth in the taxonomy tree, starting at 1. q optionally filters by a case-insensitive substring of name.", + "operationId": "ikea-categories", "parameters": [ { - "description": "Search query", + "description": "Case-insensitive substring filter on category name", "in": "query", "name": "q", - "required": true, "type": "string", - "x-example": "apple" + "x-example": "desk" + }, + { + "default": "us", + "description": "Lowercase 2-letter IKEA site country code", + "in": "query", + "name": "country", + "type": "string" + }, + { + "default": "en", + "description": "Lowercase 2-letter IKEA site language code", + "in": "query", + "name": "language", + "type": "string" + }, + { + "default": 1, + "description": "1-based page number", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "default": 100, + "description": "Result count per page (1-1000)", + "in": "query", + "maximum": 1000, + "minimum": 1, + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -381826,7 +455465,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.contextResponseDoc" + "$ref": "#/definitions/ikea.categoriesResponseDoc" } }, "400": { @@ -381835,14 +455474,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -381859,27 +455492,76 @@ "ApiKeyAuth": [] } ], - "summary": "Find Google Finance instruments by query", + "summary": "Discover IKEA category keys", "tags": [ - "Google" + "IKEA" ] } }, - "/google/finance/financials/{quote}": { + "/ikea/category": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the financial statements Google Finance holds for a quote such as `AAPL:NASDAQ`, as `annual` and `quarterly` rows plus a `currency`. Each row has revenue, net income, EBITDA, EPS, margins, cash flow, assets, liabilities and equity. The rows are empty when Google Finance has no statement data for the quote.", - "operationId": "google-finance-financials", + "description": "Returns one page of an IKEA category's product listing, with real offset/size pagination and sort. category is IKEA's own category key (e.g. 20649), taken from a category URL's trailing -{key}/ segment, a product's own category_path field, or GET /ikea/categories, which discovers every valid category value.", + "operationId": "ikea-category", "parameters": [ { - "description": "Quote identifier such as AAPL:NASDAQ", - "in": "path", - "name": "quote", + "description": "IKEA category key", + "in": "query", + "name": "category", "required": true, "type": "string", - "x-example": "AAPL:NASDAQ" + "x-example": "20649" + }, + { + "default": "us", + "description": "Lowercase 2-letter IKEA site country code", + "in": "query", + "name": "country", + "type": "string" + }, + { + "default": "en", + "description": "Lowercase 2-letter IKEA site language code", + "in": "query", + "name": "language", + "type": "string" + }, + { + "default": 0, + "description": "Zero-based result offset", + "in": "query", + "maximum": 9999, + "minimum": 0, + "name": "offset", + "type": "integer" + }, + { + "default": 24, + "description": "Result count (1-100)", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "size", + "type": "integer" + }, + { + "default": "relevance", + "description": "Result order", + "enum": [ + "relevance", + "price-low", + "price-high", + "newest", + "rating", + "name", + "popular", + "width", + "height", + "depth", + "length" + ], + "in": "query", + "name": "sort", + "type": "string" } ], "produces": [ @@ -381889,7 +455571,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.financialsResponseDoc" + "$ref": "#/definitions/ikea.categoryResponseDoc" } }, "400": { @@ -381904,8 +455586,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -381922,33 +455604,38 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance financial statements", + "summary": "Browse an IKEA category", "tags": [ - "Google" + "IKEA" ] } }, - "/google/finance/markets/categories/{category}/news": { + "/ikea/product": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Google Finance news for one market category, identified by the `category` path id. Use `offset` to page through results. Each item has its title, URL and publication time (ISO and Unix), plus the source, a thumbnail and any related quotes with price, change and percent change when Google provides them. The response also echoes `category` and `offset`.", - "operationId": "google-finance-markets-category-news", + "description": "Returns one IKEA item's full detail: name, price, rating, every product image, quick facts, and category breadcrumb path. item_no is IKEA's own item number (8 digits, optionally prefixed with \"s\" for a combination/set article), taken from a search result's item_no field or an ikea.com product page's own URL.", + "operationId": "ikea-product", "parameters": [ { - "description": "Google Finance category id", - "in": "path", - "name": "category", + "description": "IKEA item number", + "in": "query", + "name": "item_no", "required": true, "type": "string", - "x-example": "2" + "x-example": "80213074" }, { - "description": "Result offset", + "default": "us", + "description": "Lowercase 2-letter IKEA site country code", "in": "query", - "name": "offset", - "type": "integer" + "name": "country", + "type": "string" + }, + { + "default": "en", + "description": "Lowercase 2-letter IKEA site language code", + "in": "query", + "name": "language", + "type": "string" } ], "produces": [ @@ -381958,7 +455645,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.categoryNewsResponseDoc" + "$ref": "#/definitions/ikea.productResponseDoc" } }, "400": { @@ -381973,8 +455660,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -381991,33 +455678,38 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance category news", + "summary": "Get an IKEA product's detail", "tags": [ - "Google" + "IKEA" ] } }, - "/google/finance/markets/categories/{category}/stocks": { + "/ikea/reviews": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the instruments in one Google Finance market category, chosen by the required `category` id and paged with `offset`. Each item has its ticker, exchange, name, price, change and change percent, previous close, currency, country and after-hours data.", - "operationId": "google-finance-markets-category-stocks", + "description": "Returns one IKEA item's own highlighted customer reviews (title, rating, text, author) plus its aggregate rating, sourced from the product page's own curated reviews carousel. This is a small, representative set of reviews (a handful per item), not the full paginated review list.", + "operationId": "ikea-reviews", "parameters": [ { - "description": "Google Finance category id", - "in": "path", - "name": "category", + "description": "IKEA item number", + "in": "query", + "name": "item_no", "required": true, "type": "string", - "x-example": "2" + "x-example": "80213074" }, { - "description": "Result offset", + "default": "us", + "description": "Lowercase 2-letter IKEA site country code", "in": "query", - "name": "offset", - "type": "integer" + "name": "country", + "type": "string" + }, + { + "default": "en", + "description": "Lowercase 2-letter IKEA site language code", + "in": "query", + "name": "language", + "type": "string" } ], "produces": [ @@ -382027,7 +455719,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.categoryStocksResponseDoc" + "$ref": "#/definitions/ikea.reviewsResponseDoc" } }, "400": { @@ -382042,8 +455734,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -382060,19 +455752,49 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance category stocks", + "summary": "Get an IKEA item's highlighted customer reviews", "tags": [ - "Google" + "IKEA" ] } }, - "/google/finance/markets/earnings": { + "/ikea/search": { "get": { - "consumes": [ - "application/json" + "description": "Searches IKEA products and returns name, price, rating, images, colors, and variant data. q is a free-text query; an IKEA item number also resolves as its own single result. country and language select IKEA's per-country site (default us/en). A zero total with an empty products list is a valid no-results response.", + "operationId": "ikea-search", + "parameters": [ + { + "description": "Free-text product search query", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "desk" + }, + { + "default": "us", + "description": "Lowercase 2-letter IKEA site country code", + "in": "query", + "name": "country", + "type": "string" + }, + { + "default": "en", + "description": "Lowercase 2-letter IKEA site language code", + "in": "query", + "name": "language", + "type": "string" + }, + { + "default": 24, + "description": "Result count (1-100)", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "size", + "type": "integer" + } ], - "description": "Returns the Google Finance earnings calendar. Each item has the company name, fiscal period, event time (including a Unix timestamp), conference call phone and URL when listed, and the instrument with its ticker, exchange, price and change.", - "operationId": "google-finance-markets-earnings", "produces": [ "application/json" ], @@ -382080,11 +455802,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.earningsResponseDoc" + "$ref": "#/definitions/ikea.searchResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -382101,19 +455829,40 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance earnings calendar", + "summary": "Search IKEA products", "tags": [ - "Google" + "IKEA" ] } }, - "/google/finance/markets/featured": { + "/ikea/store": { "get": { - "consumes": [ - "application/json" + "description": "Returns one IKEA physical location's full detail: address, geo coordinates, opening hours, and price range. slug is IKEA's own store URL slug, taken from an ikea_stores result's own slug field. Geo, hours, and price range are only present for full/small stores; order points and pick-up-only points return address only.", + "operationId": "ikea-store", + "parameters": [ + { + "description": "IKEA store URL slug", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "burbank" + }, + { + "default": "us", + "description": "Lowercase 2-letter IKEA site country code", + "in": "query", + "name": "country", + "type": "string" + }, + { + "default": "en", + "description": "Lowercase 2-letter IKEA site language code", + "in": "query", + "name": "language", + "type": "string" + } ], - "description": "Returns the stocks Google Finance features on its markets page. Each instrument has its ticker, exchange, name, price, change and change percent, previous close, currency, country, time zone and after-hours data.", - "operationId": "google-finance-markets-featured", "produces": [ "application/json" ], @@ -382121,11 +455870,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.instrumentsResponseDoc" + "$ref": "#/definitions/ikea.storeResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -382142,19 +455903,32 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance featured stocks", + "summary": "Get an IKEA store's detail", "tags": [ - "Google" + "IKEA" ] } }, - "/google/finance/markets/headline": { + "/ikea/stores": { "get": { - "consumes": [ - "application/json" + "description": "Returns IKEA's own directory of physical locations for the requested country: name, URL slug, region grouping, and location type (Store, Small store, Plan & order point with pick-up, etc). Each slug is usable directly as ikea_store's own slug input.", + "operationId": "ikea-stores", + "parameters": [ + { + "default": "us", + "description": "Lowercase 2-letter IKEA site country code", + "in": "query", + "name": "country", + "type": "string" + }, + { + "default": "en", + "description": "Lowercase 2-letter IKEA site language code", + "in": "query", + "name": "language", + "type": "string" + } ], - "description": "Returns the top headline on Google Finance markets as one article: title, source, URL, publication time (ISO and Unix), thumbnail and the related instruments with price and change. The article is present only when Google Finance shows a headline.", - "operationId": "google-finance-markets-headline", "produces": [ "application/json" ], @@ -382162,11 +455936,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.headlineResponseDoc" + "$ref": "#/definitions/ikea.storesResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -382183,19 +455963,49 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance top headline", + "summary": "List IKEA physical store locations", "tags": [ - "Google" + "IKEA" ] } }, - "/google/finance/markets/indices": { + "/ikea/suggest": { "get": { - "consumes": [ - "application/json" + "description": "Returns IKEA's own search-box typeahead result for a partial or full query: suggested query completions with their own match counts, plus a small number of top matching products. A query with no matches returns a clean empty response.", + "operationId": "ikea-suggest", + "parameters": [ + { + "description": "Partial or full search term", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "des" + }, + { + "default": "us", + "description": "Lowercase 2-letter IKEA site country code", + "in": "query", + "name": "country", + "type": "string" + }, + { + "default": "en", + "description": "Lowercase 2-letter IKEA site language code", + "in": "query", + "name": "language", + "type": "string" + }, + { + "default": 5, + "description": "Top-product count (1-20)", + "in": "query", + "maximum": 20, + "minimum": 1, + "name": "size", + "type": "integer" + } ], - "description": "Returns the market indices Google Finance lists, such as the Dow Jones Industrial Average. Each index has its ticker, exchange, name, current value, change and change percent, previous close and last update time.", - "operationId": "google-finance-markets-indices", "produces": [ "application/json" ], @@ -382203,11 +456013,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.instrumentsResponseDoc" + "$ref": "#/definitions/ikea.suggestResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -382224,36 +456040,40 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance market indices", + "summary": "Get IKEA search-box typeahead suggestions", "tags": [ - "Google" + "IKEA" ] } }, - "/google/finance/markets/movers": { + "/imdb/charts": { "get": { "consumes": [ "application/json" ], - "description": "Lists Google Finance market movers. `categories` takes comma-separated numeric categories, `count` sets how many items to return (default 20) and `offset` skips ahead. Each item has its ticker, exchange, name, price, change and change percent, and previous close.", - "operationId": "google-finance-markets-movers", + "description": "Returns an IMDb title chart, chosen with `chart`: `top_rated_movies` (default), `top_rated_tv_shows`, `most_popular_movies`, `most_popular_tv_shows`, `top_rated_english_movies` or `lowest_rated_movies`. `limit` sets the rows (default 25, max 250). Each title has its rank, id, year, rating, rating count and credits.", + "operationId": "imdb-charts", "parameters": [ { - "description": "Comma-separated numeric categories", + "default": "top_rated_movies", + "description": "IMDb chart", + "enum": [ + "top_rated_movies", + "top_rated_tv_shows", + "most_popular_movies", + "most_popular_tv_shows", + "top_rated_english_movies", + "lowest_rated_movies" + ], "in": "query", - "name": "categories", + "name": "chart", "type": "string" }, { - "description": "Result count", - "in": "query", - "name": "count", - "type": "integer" - }, - { - "description": "Result offset", + "default": 25, + "description": "Rows to return, default 25, max 250", "in": "query", - "name": "offset", + "name": "limit", "type": "integer" } ], @@ -382264,7 +456084,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.marketMoversResponseDoc" + "$ref": "#/definitions/imdb.chartsResponseDoc" } }, "400": { @@ -382273,8 +456093,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -382297,33 +456123,19 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance market movers", + "summary": "IMDb title charts", "tags": [ - "Google" + "IMDb" ] } }, - "/google/finance/markets/top": { + "/imdb/image-types": { "get": { "consumes": [ "application/json" ], - "description": "Lists the top Google Finance instruments for a ranking metric. `metric` is a Google Finance metric id (default 6) and `page` is the page number (default 1). Each item has its ticker, exchange, name, price, change and change percent, and previous close.", - "operationId": "google-finance-markets-top", - "parameters": [ - { - "description": "Google Finance metric id", - "in": "query", - "name": "metric", - "type": "integer" - }, - { - "description": "Page number", - "in": "query", - "name": "page", - "type": "integer" - } - ], + "description": "Lists every value the `type` parameter of the IMDb image endpoints accepts: `behind_the_scenes`, `event`, `poster`, `product`, `production_art`, `publicity`, `still_frame`, `unknown`. Each row carries a display label and a short description.", + "operationId": "imdb-image-types", "produces": [ "application/json" ], @@ -382331,17 +456143,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.topStocksResponseDoc" + "$ref": "#/definitions/imdb.imageTypesResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -382352,25 +456164,33 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance top stocks by metric", + "summary": "IMDb image types", "tags": [ - "Google" + "IMDb" ] } }, - "/google/finance/markets/trending": { + "/imdb/name": { "get": { "consumes": [ "application/json" ], - "description": "Returns the instruments currently trending on Google Finance, up to `limit` items (default 18). Each has its ticker, exchange, name, price, change and change percent, previous close, currency and after-hours data.", - "operationId": "google-finance-markets-trending", + "description": "Returns an IMDb person's profile. Pass exactly one of `id` (such as `nm0634240`) or `url`. The response has the name, biography, birth and death dates, birth place, professions, image and a known-for list of titles with year and credit category.", + "operationId": "imdb-name", "parameters": [ { - "description": "Result limit", + "description": "IMDb name id", "in": "query", - "name": "limit", - "type": "integer" + "name": "id", + "type": "string", + "x-example": "nm0634240" + }, + { + "description": "Absolute https://www.imdb.com/name// URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/name/nm0634240/" } ], "produces": [ @@ -382380,7 +456200,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.instrumentsResponseDoc" + "$ref": "#/definitions/imdb.nameResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" } }, "500": { @@ -382401,33 +456239,33 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance trending stocks", + "summary": "IMDb name detail", "tags": [ - "Google" + "IMDb" ] } }, - "/google/finance/news/{quote}": { + "/imdb/name/awards": { "get": { "consumes": [ "application/json" ], - "description": "Returns recent Google Finance news for one quote, such as `AAPL:NASDAQ`, given in the `quote` path parameter. `limit` caps the number of articles and defaults to 6. Each article has its title, source, URL, publication time (ISO and Unix), thumbnail, and related quotes with price and change data.", - "operationId": "google-finance-news", + "description": "Returns the awards IMDb lists for a person. Pass exactly one of `id` or `url`. Each row has the event, year, category, `win` or `nomination` result, award name, recipients and related titles. `total` is the count IMDb lists, and `has_more` is true when fewer rows are returned.", + "operationId": "imdb-name-awards", "parameters": [ { - "description": "Quote identifier such as AAPL:NASDAQ", - "in": "path", - "name": "quote", - "required": true, + "description": "IMDb name id", + "in": "query", + "name": "id", "type": "string", - "x-example": "AAPL:NASDAQ" + "x-example": "nm0634240" }, { - "description": "Article limit", + "description": "Absolute https://www.imdb.com/name// URL", "in": "query", - "name": "limit", - "type": "integer" + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/name/nm0634240/" } ], "produces": [ @@ -382437,7 +456275,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.articlesResponseDoc" + "$ref": "#/definitions/imdb.nameAwardsResponseDoc" } }, "400": { @@ -382452,6 +456290,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -382470,27 +456314,33 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance quote news", + "summary": "IMDb name awards", "tags": [ - "Google" + "IMDb" ] } }, - "/google/finance/quote/{quote}": { + "/imdb/name/credits": { "get": { "consumes": [ "application/json" ], - "description": "Returns the Google Finance quote page for a symbol such as `AAPL:NASDAQ` or `BTC-USD`. The response carries key stats, an about section (CEO, employees, founded, headquarters, website), news, and investment tables for the income statement, balance sheet and cash flow by quarter and year.", - "operationId": "google-finance-quote", + "description": "Returns a person's IMDb filmography, grouped into sections such as Actor, Director and Self. Pass exactly one of `id` or `url`. Each credit has its title, year, role and episode count. A section returns up to 100 credits, so `total` can exceed the rows returned.", + "operationId": "imdb-name-credits", "parameters": [ { - "description": "Stock symbol to fetch the latest quote for (e.g., AAPL:NASDAQ, BTC-USD)", - "in": "path", - "name": "quote", - "required": true, + "description": "IMDb name id", + "in": "query", + "name": "id", "type": "string", - "x-example": "AAPL:NASDAQ" + "x-example": "nm0634240" + }, + { + "description": "Absolute https://www.imdb.com/name// URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/name/nm0634240/" } ], "produces": [ @@ -382498,19 +456348,37 @@ ], "responses": { "200": { - "description": "Latest stock quote data", + "description": "OK", "schema": { - "$ref": "#/definitions/finance.quoteResponseDoc" + "$ref": "#/definitions/imdb.nameCreditsResponseDoc" } }, "400": { - "description": "Invalid input parameters", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -382521,27 +456389,57 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance Quote API", + "summary": "IMDb name credits", "tags": [ - "Google" + "IMDb" ] } }, - "/google/finance/related/{quote}": { + "/imdb/name/images": { "get": { "consumes": [ "application/json" ], - "description": "Returns the instruments Google Finance lists as related to a quote such as `AAPL:NASDAQ`. The response gives the queried `instrument` and an `items` list, each with ticker, exchange, name, price, change and change percent, and previous close.", - "operationId": "google-finance-related", + "description": "Returns image metadata from a person's media index, including the original image URL, dimensions, caption and credited people. Filter by image type with `type`, which accepts a single value or a comma-separated list of: `behind_the_scenes`, `event`, `poster`, `product`, `production_art`, `publicity`, `still_frame`, `unknown`. Omit `type` to return every type. Limit defaults to 50 and clamps to 1000. Pass exactly one of `id` or `url`.", + "operationId": "imdb-name-images", "parameters": [ { - "description": "Quote identifier such as AAPL:NASDAQ", - "in": "path", - "name": "quote", - "required": true, + "description": "IMDb name id", + "in": "query", + "name": "id", "type": "string", - "x-example": "AAPL:NASDAQ" + "x-example": "nm0000151" + }, + { + "description": "Absolute https://www.imdb.com/name// URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/name/nm0000151/" + }, + { + "description": "Image type filter, single value or comma-separated list", + "enum": [ + "behind_the_scenes", + "event", + "poster", + "product", + "production_art", + "publicity", + "still_frame", + "unknown" + ], + "in": "query", + "name": "type", + "type": "string", + "x-example": "still_frame" + }, + { + "description": "Rows to return, default 50, max 1000", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -382551,7 +456449,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/finance.relatedResponseDoc" + "$ref": "#/definitions/imdb.nameImagesResponseDoc" } }, "400": { @@ -382566,6 +456464,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -382584,27 +456488,40 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance related instruments", + "summary": "IMDb name images", "tags": [ - "Google" + "IMDb" ] } }, - "/google/finance/search": { + "/imdb/name/videos": { "get": { "consumes": [ "application/json" ], - "description": "Searches Google Finance for instruments matching `q`, such as a company name. Each match has its ticker, exchange, company name, currency, price, change and percentage change.", - "operationId": "google-finance-search", + "description": "Returns public person video metadata and thumbnail URLs only; playback URLs and media manifests are never returned. IMDb caps the upstream slice at 100 and provides no usable continuation cursor, so `total` can exceed returned rows and `has_more` reports that condition. Limit defaults to 50 and clamps to 100. Pass exactly one of `id` or `url`.", + "operationId": "imdb-name-videos", "parameters": [ { - "description": "Keyword to search for (e.g., Apple)", + "description": "IMDb name id", "in": "query", - "name": "q", - "required": true, + "name": "id", "type": "string", - "x-example": "Apple" + "x-example": "nm0000151" + }, + { + "description": "Absolute https://www.imdb.com/name// URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/name/nm0000151/" + }, + { + "description": "Rows to return, default 50, max 100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -382612,25 +456529,37 @@ ], "responses": { "200": { - "description": "Search results", + "description": "OK", "schema": { - "$ref": "#/definitions/finance.searchResponseDoc" + "$ref": "#/definitions/imdb.nameVideosResponseDoc" } }, "400": { - "description": "Invalid input parameters", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Google Finance upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -382641,33 +456570,34 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance Search API", + "summary": "IMDb name video metadata", "tags": [ - "Google" + "IMDb" ] } }, - "/google/finance/ticker/{ticker}": { + "/imdb/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns the price series Google Finance charts for a ticker such as `AAPL:NASDAQ` or `BTC-USD`. `window` sets the range: `1d` (default), `5d`, `1m`, `6m`, `ytd`, `1y`, `5y` or `max`. Each point has a `time`, `price` and `volume`.", - "operationId": "google-finance-ticker", + "description": "Searches IMDb titles by `query`, returning up to `limit` rows (default 10, max 20). Each result has the title id, title, URL, year, title type, image and a description holding the lead cast. A query with no matches returns an empty `results` list.", + "operationId": "imdb-search", "parameters": [ { - "description": "Ticker symbol to fetch data for example:AAPL:NASDAQ, BTC-USD ", - "in": "path", - "name": "ticker", + "description": "Search query", + "in": "query", + "name": "query", "required": true, "type": "string", - "x-example": "AAPL:NASDAQ" + "x-example": "inception" }, { - "description": "Time window for the ticker data (default: 1d), options: 1d, 5d, 1m, 6m, 1y, 5y, max", + "description": "Rows to return, default 10, max 20", "in": "query", - "name": "window", - "type": "string" + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -382675,25 +456605,37 @@ ], "responses": { "200": { - "description": "Ticker time series", + "description": "OK", "schema": { - "$ref": "#/definitions/finance.tickerResponseDoc" + "$ref": "#/definitions/imdb.searchResponseDoc" } }, "400": { - "description": "Invalid input parameters", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Google Finance upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -382704,28 +456646,207 @@ "ApiKeyAuth": [] } ], - "summary": "Google Finance Ticker API", + "summary": "IMDb title search", "tags": [ - "Google" + "IMDb" ] } }, - "/google/jobs": { - "post": { + "/imdb/search/title": { + "get": { "consumes": [ "application/json" ], - "description": "Searches Google Jobs for the `query` in the request body, optionally narrowed by `location` and paged with `page`. Each result has the job title, company, location, employment type, posting time, snippet, source and URL. The response echoes the query, location and page.", - "operationId": "google-jobs", + "description": "Returns IMDb advanced title-search results (imdb.com/search/title/). At least one filter is required; sort/limit alone are not enough. Limit defaults to 25 and clamps to 50; only IMDb's first page of results is returned (see `total`/`has_more`), there is no deeper cursor pagination. Genre/company/certificate/country/language/keyword/characters/role are include-only lists; there is no exclude support. Unsupported: genre exclude, three curated `groups` values (best-picture-nominee, best-director-nominee, national-film-registry), and the non-plot \"page topic\" search fields.", + "operationId": "imdb-search-title", "parameters": [ { - "description": "Google Jobs search payload", - "in": "body", - "name": "option", - "required": true, - "schema": { - "$ref": "#/definitions/google.JobsOption" - } + "description": "Title-name substring match", + "in": "query", + "name": "title", + "type": "string", + "x-example": "matrix" + }, + { + "description": "Comma-separated title types: `feature`, `tvSeries`, `short`, `tvEpisode`, `tvMiniSeries`, `tvMovie`, `tvSpecial`, `tvShort`, `videoGame`, `video`, `musicVideo`, `podcastSeries`, `podcastEpisode`", + "in": "query", + "name": "title_type", + "type": "string", + "x-example": "feature" + }, + { + "description": "Comma-separated genres (include-only): `Action`, `Adventure`, `Animation`, `Biography`, `Comedy`, `Crime`, `Documentary`, `Drama`, `Family`, `Fantasy`, `Film-Noir`, `Game-Show`, `History`, `Horror`, `Music`, `Musical`, `Mystery`, `News`, `Reality-TV`, `Romance`, `Sci-Fi`, `Short`, `Sport`, `Talk-Show`, `Thriller`, `War`, `Western`", + "in": "query", + "name": "genres", + "type": "string", + "x-example": "Action,Adventure" + }, + { + "description": "Release date lower bound: YYYY, YYYY-MM, or YYYY-MM-DD", + "in": "query", + "name": "release_date_from", + "type": "string", + "x-example": "2020-01-01" + }, + { + "description": "Release date upper bound: YYYY, YYYY-MM, or YYYY-MM-DD", + "in": "query", + "name": "release_date_to", + "type": "string", + "x-example": "2021-12-31" + }, + { + "description": "Minimum IMDb user rating, 0-10", + "in": "query", + "name": "min_user_rating", + "type": "number", + "x-example": 7 + }, + { + "description": "Maximum IMDb user rating, 0-10", + "in": "query", + "name": "max_user_rating", + "type": "number", + "x-example": 9.5 + }, + { + "description": "Minimum number of user rating votes", + "in": "query", + "name": "min_votes", + "type": "integer", + "x-example": 25000 + }, + { + "description": "Maximum number of user rating votes", + "in": "query", + "name": "max_votes", + "type": "integer" + }, + { + "description": "Minimum IMDb popularity rank (1 is most popular)", + "in": "query", + "name": "min_popularity", + "type": "integer" + }, + { + "description": "Maximum IMDb popularity rank", + "in": "query", + "name": "max_popularity", + "type": "integer" + }, + { + "description": "Minimum runtime in minutes", + "in": "query", + "name": "min_runtime", + "type": "integer" + }, + { + "description": "Maximum runtime in minutes", + "in": "query", + "name": "max_runtime", + "type": "integer" + }, + { + "description": "Comma-separated awards/curated-list groups: `oscar_winner`, `oscar_nominee`, `emmy_winner`, `emmy_nominee`, `golden_globe_winner`, `golden_globe_nominee`, `best_picture_winner`, `best_director_winner`, `razzie_winner`, `razzie_nominee`, `top_100`, `top_250`, `top_1000`, `bottom_100`, `bottom_250`, `bottom_1000`", + "in": "query", + "name": "groups", + "type": "string" + }, + { + "description": "Comma-separated plot keywords", + "in": "query", + "name": "keywords", + "type": "string", + "x-example": "superhero" + }, + { + "description": "Comma-separated IMDb company ids, format `co########`", + "in": "query", + "name": "companies", + "type": "string", + "x-example": "co0000756" + }, + { + "description": "Comma-separated `COUNTRY:RATING` certificate pairs, e.g. `US:PG-13`", + "in": "query", + "name": "certificates", + "type": "string", + "x-example": "US:PG-13" + }, + { + "description": "Comma-separated color info: `color`, `black_and_white`, `colorized`, `aces`", + "in": "query", + "name": "colors", + "type": "string" + }, + { + "description": "Comma-separated ISO country codes", + "in": "query", + "name": "countries", + "type": "string", + "x-example": "US" + }, + { + "description": "Comma-separated ISO language codes", + "in": "query", + "name": "languages", + "type": "string", + "x-example": "en" + }, + { + "description": "Comma-separated sound mix names: `12-Track Digital Sound`, `3 Channel Stereo`, `4-Track Stereo`, `6-Track Stereo`, `70 mm 6-Track`, `AGA Sound System`, `Auro 11.1`, `CDS`, `Chronophone`, `Cinematophone`, `Cinephone`, `Cinerama 7-Track`, `Cinesound`, `D-Cinema 48kHz 5.1`, `Datasat`, `De Forest Phonofilm`, `Digitrac Digital Audio System`, `Dolby`, `Dolby Atmos`, `Dolby Digital`, `Dolby Digital EX`, `Dolby SR`, `Dolby Stereo`, `Dolby Surround 7.1`, `DTS`, `DTS 70 mm`, `DTS Stereo`, `DTS-ES`, `IMAX 6-Track`, `Kinoplasticon`, `LC-Concept Digital Sound`, `Matrix Surround`, `Mono`, `Perspecta Stereo`, `Phono-Kinema`, `SDDS`, `Sensurround`, `Silent`, `Sonics-DDP`, `Sonix`, `Stereo`, `Ultra Stereo`, `Vitaphone`", + "in": "query", + "name": "sound_mixes", + "type": "string" + }, + { + "description": "Comma-separated cast/crew IMDb name ids, format `nm########`", + "in": "query", + "name": "role", + "type": "string", + "x-example": "nm0634240" + }, + { + "description": "Comma-separated character names", + "in": "query", + "name": "characters", + "type": "string", + "x-example": "Neo" + }, + { + "description": "Plot text search term", + "in": "query", + "name": "plot", + "type": "string", + "x-example": "hacker" + }, + { + "default": false, + "description": "Include adult titles. Defaults to excluded", + "in": "query", + "name": "include_adult", + "type": "boolean" + }, + { + "description": "One of `moviemeter`, `alpha`, `user_rating`, `num_votes`, `boxoffice_gross_us`, `runtime`, `year`, `release_date`", + "in": "query", + "name": "sort", + "type": "string", + "x-example": "user_rating" + }, + { + "description": "`asc` or `desc`. Defaults to `asc` when sort is set", + "in": "query", + "name": "sort_order", + "type": "string", + "x-example": "desc" + }, + { + "description": "Rows to return, default 25, max 50", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 25 } ], "produces": [ @@ -382735,7 +456856,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/google.JobsResponse" + "$ref": "#/definitions/imdb.searchTitleResponseDoc" } }, "400": { @@ -382744,12 +456865,24 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -382762,27 +456895,33 @@ "ApiKeyAuth": [] } ], - "summary": "Search Google Jobs", + "summary": "IMDb advanced title search", "tags": [ - "Google" + "IMDb" ] } }, - "/google/map/place/{place_id}": { + "/imdb/title": { "get": { "consumes": [ "application/json" ], - "description": "Returns the Google Maps details of one place by its Google `place_id`: name, categories, address, coordinates, phone, website, description, image, amenities, rating and review count. `rating` is `null` when the place has no aggregate rating on Google.", - "operationId": "google-map-place", + "description": "Returns an IMDb title's details. Pass exactly one of `id` (such as `tt1375666`) or `url`. The response has the title, type, year, release date, runtime, genres, plot, content rating, rating and count, popularity rank, directors and up to three lead cast. Rating and cast fields appear only when present.", + "operationId": "imdb-title", "parameters": [ { - "description": "Google Place ID", - "in": "path", - "name": "place_id", - "required": true, + "description": "IMDb title id", + "in": "query", + "name": "id", "type": "string", - "x-example": "ChIJs3cv0KuvEmsRHcXYwNJ6GU0" + "x-example": "tt1375666" + }, + { + "description": "Absolute https://www.imdb.com/title// URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/title/tt1375666/" } ], "produces": [ @@ -382791,30 +456930,36 @@ "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/google.mapPlaceResponseDoc" + "$ref": "#/definitions/imdb.titleResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -382825,33 +456970,33 @@ "ApiKeyAuth": [] } ], - "summary": "Google Maps place details API", + "summary": "IMDb title detail", "tags": [ - "Google" + "IMDb" ] } }, - "/google/map/place/{place_id}/photos": { + "/imdb/title/awards": { "get": { "consumes": [ "application/json" ], - "description": "Returns the photos Google publishes for a specified place_id — the imagery shown on\nthe place's Google Maps page, typically dozens of images for a well-covered business.\nEach entry carries the image URL as served plus its pixel dimensions when reported;\nswap the trailing size suffix on the URL (e.g. `=w203-h100-k-no`) to request other\ndimensions. Contributor avatars and review-attached photos are excluded. This is the\nplace page's image set, not a paginated archive feed. Rate limit is enforced at 1\nrequest per second.", - "operationId": "google-map-place-photos", + "description": "Returns the awards IMDb lists for a title. Pass exactly one of `id` or `url`. Each row has the event, year, category, `win` or `nomination` result, award name, recipients and notes. `total` is the number IMDb lists and `has_more` is true when only part is returned.", + "operationId": "imdb-title-awards", "parameters": [ { - "description": "Google Place ID", - "in": "path", - "name": "place_id", - "required": true, + "description": "IMDb title id", + "in": "query", + "name": "id", "type": "string", - "x-example": "ChIJs3cv0KuvEmsRHcXYwNJ6GU0" + "x-example": "tt1375666" }, { - "description": "Maximum number of photos to return. Omit or 0 for all captured.", + "description": "Absolute https://www.imdb.com/title// URL", "in": "query", - "name": "limit", - "type": "integer" + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/title/tt1375666/" } ], "produces": [ @@ -382860,30 +457005,36 @@ "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/google.mapPlacePhotosResponseDoc" + "$ref": "#/definitions/imdb.titleAwardsResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -382894,33 +457045,33 @@ "ApiKeyAuth": [] } ], - "summary": "Google Maps place photos API", + "summary": "IMDb title awards", "tags": [ - "Google" + "IMDb" ] } }, - "/google/map/place/{place_id}/reviews": { + "/imdb/title/box-office": { "get": { "consumes": [ "application/json" ], - "description": "Returns the reviews Google shows on a specified place_id's Google Maps page —\ntypically the 8 most relevant, each with its rating, text, reviewer, timestamp, and\nany photos the reviewer attached. Photo-only reviews return an empty `text`.\nThis is the place page's first page of reviews, not the full review archive.\nRate limit is enforced at 1 request per second.", - "operationId": "google-map-place-reviews", + "description": "Returns a title's public box-office summary: lifetime gross by market (domestic, international, worldwide), the domestic opening weekend, and the production budget. IMDb reports each figure independently, so a real title with no box office data (most TV series, many non-theatrical titles) returns `has_box_office: false` with every figure omitted rather than an error. Pass exactly one of `id` or `url`.", + "operationId": "imdb-title-box-office", "parameters": [ { - "description": "Google Place ID", - "in": "path", - "name": "place_id", - "required": true, + "description": "IMDb title id", + "in": "query", + "name": "id", "type": "string", - "x-example": "ChIJs3cv0KuvEmsRHcXYwNJ6GU0" + "x-example": "tt0111161" }, { - "description": "Maximum number of reviews to return. Omit or 0 for all captured.", + "description": "Absolute https://www.imdb.com/title// URL", "in": "query", - "name": "limit", - "type": "integer" + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/title/tt0111161/" } ], "produces": [ @@ -382929,30 +457080,36 @@ "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/google.mapPlaceReviewsResponseDoc" + "$ref": "#/definitions/imdb.titleBoxOfficeResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -382963,28 +457120,33 @@ "ApiKeyAuth": [] } ], - "summary": "Google Maps place reviews API", + "summary": "IMDb title box office summary", "tags": [ - "Google" + "IMDb" ] } }, - "/google/map/search": { - "post": { + "/imdb/title/company-credits": { + "get": { "consumes": [ "application/json" ], - "description": "Searches Google Maps with a request body of `keyword`, `language` and `country` (an ISO-2 code such as `us`), all required. Each place has its name, place id, categories, address, coordinates, phone, website, rating and review count. `rating` is `null` when Google has no aggregate rating.", - "operationId": "google-map-search", + "description": "Returns the company credits IMDb lists for a title, in sections such as production companies and distributors. Pass exactly one of `id` or `url`. Each company has its name, URL and a qualifier note. `total` is the count IMDb lists, so a short list is normal on popular titles.", + "operationId": "imdb-title-company-credits", "parameters": [ { - "description": "Search options", - "in": "body", - "name": "mapSearchOption", - "required": true, - "schema": { - "$ref": "#/definitions/google.MapSearchOption" - } + "description": "IMDb title id", + "in": "query", + "name": "id", + "type": "string", + "x-example": "tt1375666" + }, + { + "description": "Absolute https://www.imdb.com/title// URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/title/tt1375666/" } ], "produces": [ @@ -382993,30 +457155,36 @@ "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/google.mapSearchResponseDoc" + "$ref": "#/definitions/imdb.titlePublicFactsResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -383027,58 +457195,40 @@ "ApiKeyAuth": [] } ], - "summary": "Google Maps search API", + "summary": "IMDb title company credits", "tags": [ - "Google" + "IMDb" ] } }, - "/google/news": { + "/imdb/title/connections": { "get": { "consumes": [ "application/json" ], - "description": "Returns current Google News search results. Pages slice the finite result snapshot; they do not traverse the Google Search index. Results include title, source, publisher article URL, age, and thumbnail when available. Valid no-results searches and exhausted pages return an empty array. Locale defaults to country=us and lang=en. Returns 503 for blocked or malformed upstream responses.", - "operationId": "google-news", + "description": "Returns a bounded slice of a title's public connections: other titles it references or is referenced by, such as remakes, spin-offs, \"featured in\" clips, and \"edited into\" compilations. `category` is upstream-supplied free text, not a closed enum. IMDb's connections list can run to hundreds or thousands of rows, so `total` can exceed the returned rows and `has_more` reports that condition. Limit defaults to 50 and clamps to 250. Pass exactly one of `id` or `url`.", + "operationId": "imdb-title-connections", "parameters": [ { - "description": "Search query", + "description": "IMDb title id", "in": "query", - "name": "q", - "required": true, + "name": "id", "type": "string", - "x-example": "openai" - }, - { - "description": "1-based page within the current finite result snapshot; defaults to 1", - "in": "query", - "minimum": 1, - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Results per page; defaults to 10, clamped to 1..50", - "in": "query", - "maximum": 50, - "minimum": 1, - "name": "count", - "type": "integer", - "x-example": 10 + "x-example": "tt0111161" }, { - "description": "Two-letter country code; defaults to us", + "description": "Absolute https://www.imdb.com/title// URL", "in": "query", - "name": "country", + "name": "url", "type": "string", - "x-example": "us" + "x-example": "https://www.imdb.com/title/tt0111161/" }, { - "description": "Google UI language; defaults to en", + "description": "Rows to return, default 50, max 250", "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -383088,29 +457238,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/google.newsResponseDoc" + "$ref": "#/definitions/imdb.titleConnectionsResponseDoc" } }, "400": { - "description": "Missing or invalid query parameters", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Google upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -383121,26 +457277,33 @@ "ApiKeyAuth": [] } ], - "summary": "Search Google News", + "summary": "IMDb title connections", "tags": [ - "Google" + "IMDb" ] - }, - "post": { + } + }, + "/imdb/title/credits": { + "get": { "consumes": [ "application/json" ], - "description": "Restored JSON compatibility endpoint. Returns current Google News articles. Pages slice the finite current result snapshot. Uses the legacy result array and field names; no-results searches and exhausted pages return an empty result array.", - "operationId": "google-news-search", + "description": "Returns the full cast and crew IMDb lists for a title, in named sections. Pass exactly one of `id` or `url`. Each credit has a name, IMDb name URL, role and, for cast, the character. The cast returns up to 2,000 rows and other sections up to 100.", + "operationId": "imdb-title-credits", "parameters": [ { - "description": "Search options; keyword, language and country are required. limit defaults to 10 and is clamped to 10..100; page defaults to 1.", - "in": "body", - "name": "searchOption", - "required": true, - "schema": { - "$ref": "#/definitions/google.SearchOption" - } + "description": "IMDb title id", + "in": "query", + "name": "id", + "type": "string", + "x-example": "tt1375666" + }, + { + "description": "Absolute https://www.imdb.com/title// URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/title/tt1375666/" } ], "produces": [ @@ -383150,29 +457313,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/google.newsSearchResponseDoc" + "$ref": "#/definitions/imdb.creditsResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Google upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -383183,69 +457352,47 @@ "ApiKeyAuth": [] } ], - "summary": "Search Google News with JSON", + "summary": "IMDb title credits", "tags": [ - "Google" + "IMDb" ] } }, - "/google/suggest": { + "/imdb/title/episodes": { "get": { "consumes": [ "application/json" ], - "description": "Returns Google autosuggest query completions from the public unauthenticated suggest JSON endpoint. `source` selects the web, YouTube, or shopping suggestion list, and `rich=true` adds a type, relevance score, and short description to each suggestion.", - "operationId": "google-suggest", + "description": "Returns public IMDb episode rows for a series title. Limit defaults to 10 and clamps to 20. Optional `season` filters the episodes returned. Pass exactly one of `id` or `url`.", + "operationId": "imdb-title-episodes", "parameters": [ { - "description": "Search query prefix", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "openai" - }, - { - "description": "Suggestions to return; defaults to 10, clamped to 1..12", - "in": "query", - "maximum": 12, - "minimum": 1, - "name": "count", - "type": "integer", - "x-example": 10 - }, - { - "description": "Google result country; defaults to us", + "description": "IMDb title id", "in": "query", - "name": "country", + "name": "id", "type": "string", - "x-example": "us" + "x-example": "tt0944947" }, { - "description": "Google UI language; defaults to en", + "description": "Absolute https://www.imdb.com/title// URL", "in": "query", - "name": "lang", + "name": "url", "type": "string", - "x-example": "en" + "x-example": "https://www.imdb.com/title/tt0944947/" }, { - "default": "web", - "description": "Suggestion source; defaults to web", - "enum": [ - "web", - "youtube", - "shopping" - ], + "description": "Season number to request", "in": "query", - "name": "source", - "type": "string" + "name": "season", + "type": "integer", + "x-example": 1 }, { - "description": "Add Google's type, relevance score, and description to each suggestion; defaults to false", + "description": "Rows to return, default 10, max 20", "in": "query", - "name": "rich", - "type": "boolean", - "x-example": false + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -383255,29 +457402,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/google.suggestResponseDoc" + "$ref": "#/definitions/imdb.episodesResponseDoc" } }, "400": { - "description": "Missing or invalid query", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Google upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -383288,16 +457441,35 @@ "ApiKeyAuth": [] } ], - "summary": "Suggest Google search queries", + "summary": "IMDb title episodes", "tags": [ - "Google" + "IMDb" ] } }, - "/google/trends/categories": { + "/imdb/title/filming-locations": { "get": { - "description": "Returns the top-level Google Trends categories as id and name pairs, such as 0 for All and 20 for Sports. These are the ids accepted by the Trending Now category filter.", - "operationId": "google-trends-categories", + "consumes": [ + "application/json" + ], + "description": "Returns the filming locations IMDb lists for a title. Pass exactly one of `id` or `url`. Each location has its text and an optional note. `total` is the count IMDb lists, `has_more` shows when the list is cut short, and a title with none returns an empty list with `total` 0.", + "operationId": "imdb-title-filming-locations", + "parameters": [ + { + "description": "IMDb title id", + "in": "query", + "name": "id", + "type": "string", + "x-example": "tt1375666" + }, + { + "description": "Absolute https://www.imdb.com/title// URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/title/tt1375666/" + } + ], "produces": [ "application/json" ], @@ -383305,55 +457477,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trends.trendsCategoriesResponseDoc" + "$ref": "#/definitions/imdb.titlePublicFactsResponseDoc" } }, - "429": { - "description": "Rate limit exceeded", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Google Trends categories", - "tags": [ - "Google" - ] - } - }, - "/google/trends/enums": { - "get": { - "description": "Returns supported Google Trends enum values for explore/trending filters, including locations, date ranges, search types, categories, statuses, and sort modes.", - "operationId": "google-trends-enums", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/trends.trendsEnumsResponseDoc" - } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -383364,28 +457516,33 @@ "ApiKeyAuth": [] } ], - "summary": "Google Trends enum metadata", + "summary": "IMDb title filming locations", "tags": [ - "Google" + "IMDb" ] } }, - "/google/trends/explore": { - "post": { + "/imdb/title/goofs": { + "get": { "consumes": [ "application/json" ], - "description": "Returns Google Trends keyword analytics: interest over time, interest by region, related queries, and related topics when available.", - "operationId": "google-trends-explore", + "description": "Returns the goofs IMDb lists for a title. Pass exactly one of `id` or `url`. Each entry in `facts` has the text, a `spoiler` flag and, when IMDb groups it, a category such as Continuity. `total` is the count IMDb lists and `has_more` is true when only part is returned.", + "operationId": "imdb-title-goofs", "parameters": [ { - "description": "Explore request", - "in": "body", - "name": "request", - "required": true, - "schema": { - "$ref": "#/definitions/trends.ExploreRequest" - } + "description": "IMDb title id", + "in": "query", + "name": "id", + "type": "string", + "x-example": "tt1375666" + }, + { + "description": "Absolute https://www.imdb.com/title// URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/title/tt1375666/" } ], "produces": [ @@ -383395,29 +457552,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trends.exploreResponseDoc" + "$ref": "#/definitions/imdb.titlePublicFactsResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Google Trends upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -383428,28 +457591,57 @@ "ApiKeyAuth": [] } ], - "summary": "Google Trends explore data", + "summary": "IMDb title goofs", "tags": [ - "Google" + "IMDb" ] } }, - "/google/trends/explore/interest-by-region": { - "post": { + "/imdb/title/images": { + "get": { "consumes": [ "application/json" ], - "description": "Returns only the interest-by-region widget from the Google Trends Explore widget flow. Supports multiple comparison terms and returns an empty interest_by_region array when Google returns no rows.", - "operationId": "google-trends-explore-interest-by-region", + "description": "Returns image metadata from a title's media index, including the original image URL, dimensions, caption and credited people. Filter by image type with `type`, which accepts a single value or a comma-separated list of: `behind_the_scenes`, `event`, `poster`, `product`, `production_art`, `publicity`, `still_frame`, `unknown`. Omit `type` to return every type. Limit defaults to 50 and clamps to 1000. Pass exactly one of `id` or `url`.", + "operationId": "imdb-title-images", "parameters": [ { - "description": "Explore request", - "in": "body", - "name": "request", - "required": true, - "schema": { - "$ref": "#/definitions/trends.ExploreRequest" - } + "description": "IMDb title id", + "in": "query", + "name": "id", + "type": "string", + "x-example": "tt0089753" + }, + { + "description": "Absolute https://www.imdb.com/title// URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/title/tt0089753/" + }, + { + "description": "Image type filter, single value or comma-separated list", + "enum": [ + "behind_the_scenes", + "event", + "poster", + "product", + "production_art", + "publicity", + "still_frame", + "unknown" + ], + "in": "query", + "name": "type", + "type": "string", + "x-example": "still_frame" + }, + { + "description": "Rows to return, default 50, max 1000", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -383459,29 +457651,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trends.interestByRegionResponseDoc" + "$ref": "#/definitions/imdb.titleImagesResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Google Trends upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -383492,28 +457690,33 @@ "ApiKeyAuth": [] } ], - "summary": "Google Trends interest by region", + "summary": "IMDb title images", "tags": [ - "Google" + "IMDb" ] } }, - "/google/trends/explore/interest-over-time": { - "post": { + "/imdb/title/keywords": { + "get": { "consumes": [ "application/json" ], - "description": "Returns Google Trends interest over time for 1 to 5 `keywords`. Optional inputs are `geo` (default worldwide), `time_range` (default `today 12-m`), `hl`, `tz`, `category` and `type` (`web`, `image`, `news`, `youtube` or `shopping`). Each time point carries a value per keyword, with a `has_data` flag.", - "operationId": "google-trends-explore-interest-over-time", + "description": "Returns the plot keywords IMDb lists for a title. Pass exactly one of `id` or `url`. Each keyword has its text and an IMDb search URL for that keyword. `total` is the count IMDb lists, so a short list is normal on popular titles.", + "operationId": "imdb-title-keywords", "parameters": [ { - "description": "Explore request", - "in": "body", - "name": "request", - "required": true, - "schema": { - "$ref": "#/definitions/trends.ExploreRequest" - } + "description": "IMDb title id", + "in": "query", + "name": "id", + "type": "string", + "x-example": "tt1375666" + }, + { + "description": "Absolute https://www.imdb.com/title// URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/title/tt1375666/" } ], "produces": [ @@ -383523,29 +457726,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trends.interestOverTimeResponseDoc" + "$ref": "#/definitions/imdb.titlePublicFactsResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Google Trends upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -383556,28 +457765,33 @@ "ApiKeyAuth": [] } ], - "summary": "Google Trends interest over time", + "summary": "IMDb title keywords", "tags": [ - "Google" + "IMDb" ] } }, - "/google/trends/explore/related-topics": { - "post": { + "/imdb/title/parental-guide": { + "get": { "consumes": [ "application/json" ], - "description": "Returns only the related topics widget from the Google Trends Explore widget flow. Returns an empty related_topics array when Google returns no topic rows for the requested term/filter combination.", - "operationId": "google-trends-explore-related-topics", + "description": "Returns the IMDb parental guide for a title. Pass exactly one of `id` or `url`. Categories such as violence, profanity and frightening scenes carry a severity of `none`, `mild`, `moderate` or `severe` and the guide text. A `summary` gives counts and the highest severity. Spoiler items are excluded.", + "operationId": "imdb-title-parental-guide", "parameters": [ { - "description": "Explore request", - "in": "body", - "name": "request", - "required": true, - "schema": { - "$ref": "#/definitions/trends.ExploreRequest" - } + "description": "IMDb title id", + "in": "query", + "name": "id", + "type": "string", + "x-example": "tt1375666" + }, + { + "description": "Absolute https://www.imdb.com/title// URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/title/tt1375666/" } ], "produces": [ @@ -383587,29 +457801,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trends.relatedTopicsResponseDoc" + "$ref": "#/definitions/imdb.parentalGuideResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Google Trends upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -383620,28 +457840,33 @@ "ApiKeyAuth": [] } ], - "summary": "Google Trends related topics", + "summary": "IMDb title parental guide", "tags": [ - "Google" + "IMDb" ] } }, - "/google/trends/explore/rising-queries": { - "post": { + "/imdb/title/public-facts-analysis": { + "get": { "consumes": [ "application/json" ], - "description": "Returns the Rising related queries widget for one or more Google Trends explore terms. Returns an empty queries array when Google returns no rows for the requested term/filter combination.", - "operationId": "google-trends-explore-rising-queries", + "description": "Returns derived public-page summary metrics for IMDb trivia, goofs, quotes, keywords, filming locations, and company credits. This endpoint is not viewing advice. Pass exactly one of `id` or `url`. The six sections are gathered from six independent sources, so a section that cannot be fetched is omitted and named in `missing_sections` with `partial` set to `true`, rather than failing the whole response; an error is returned only when no section could be fetched. Callers that require a complete analysis should check `partial`.", + "operationId": "imdb-title-public-facts-analysis", "parameters": [ { - "description": "Explore request", - "in": "body", - "name": "request", - "required": true, - "schema": { - "$ref": "#/definitions/trends.ExploreRequest" - } + "description": "IMDb title id", + "in": "query", + "name": "id", + "type": "string", + "x-example": "tt1375666" + }, + { + "description": "Absolute https://www.imdb.com/title// URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/title/tt1375666/" } ], "produces": [ @@ -383651,29 +457876,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trends.exploreQueriesResponseDoc" + "$ref": "#/definitions/imdb.titlePublicFactsAnalysisResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Google Trends upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -383684,28 +457915,33 @@ "ApiKeyAuth": [] } ], - "summary": "Google Trends explore rising queries", + "summary": "IMDb title public facts analysis", "tags": [ - "Google" + "IMDb" ] } }, - "/google/trends/explore/top-queries": { - "post": { + "/imdb/title/quotes": { + "get": { "consumes": [ "application/json" ], - "description": "Returns the Top related queries widget for one or more Google Trends explore terms. Returns an empty queries array when Google returns no rows for the requested term/filter combination.", - "operationId": "google-trends-explore-top-queries", + "description": "Returns the quotes IMDb lists for a title. Pass exactly one of `id` or `url`. Each entry in `facts` is a whole exchange, with lines prefixed by the speaker, plus a `spoiler` flag. `total` is the count IMDb lists, so a short list is normal on popular titles.", + "operationId": "imdb-title-quotes", "parameters": [ { - "description": "Explore request", - "in": "body", - "name": "request", - "required": true, - "schema": { - "$ref": "#/definitions/trends.ExploreRequest" - } + "description": "IMDb title id", + "in": "query", + "name": "id", + "type": "string", + "x-example": "tt1375666" + }, + { + "description": "Absolute https://www.imdb.com/title// URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/title/tt1375666/" } ], "produces": [ @@ -383715,29 +457951,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trends.exploreQueriesResponseDoc" + "$ref": "#/definitions/imdb.titlePublicFactsResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Google Trends upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -383748,16 +457990,35 @@ "ApiKeyAuth": [] } ], - "summary": "Google Trends explore top queries", + "summary": "IMDb title quotes", "tags": [ - "Google" + "IMDb" ] } }, - "/google/trends/locations": { + "/imdb/title/ratings": { "get": { - "description": "Returns the list of location codes that Google Trends supports, such as `US`, `HK` and `GB`, in `locations`. The Explore endpoints also accept `WORLDWIDE`, which appears in the list. It takes no parameters.", - "operationId": "google-trends-locations", + "consumes": [ + "application/json" + ], + "description": "Returns IMDb's aggregate rating, vote count, ten rating buckets, and country rating summaries. Pass exactly one of `id` or `url`.", + "operationId": "imdb-title-ratings", + "parameters": [ + { + "description": "IMDb title id", + "in": "query", + "name": "id", + "type": "string", + "x-example": "tt0111161" + }, + { + "description": "Absolute IMDb title URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/title/tt0111161/" + } + ], "produces": [ "application/json" ], @@ -383765,17 +458026,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trends.trendsLocationsResponseDoc" + "$ref": "#/definitions/imdb.ratingsResponseDoc" } }, - "429": { - "description": "Rate limit exceeded", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -383786,384 +458047,33 @@ "ApiKeyAuth": [] } ], - "summary": "Google Trends locations", + "summary": "IMDb title ratings breakdown", "tags": [ - "Google" + "IMDb" ] } }, - "/google/trends/trending": { + "/imdb/title/release-info": { "get": { "consumes": [ "application/json" ], - "description": "Returns Google Trends Trending Now for a country or territory (`geo`, default `US`): each trend's query, rank, search traffic, status, start and update time, related terms and news articles, with explore and share links. Filter by time window, category and status, and choose the sort order.", - "operationId": "google-trends-trending", + "description": "Returns the release dates and alternate titles IMDb lists for a title. Pass exactly one of `id` or `url`. Releases have a country, date and note; alternate titles have a country, title and type. Both lists are often shorter than `total` and `alternate_titles_total`.", + "operationId": "imdb-title-release-info", "parameters": [ { - "default": "US", - "description": "Country/territory location code", - "enum": [ - "AF", - "AX", - "AL", - "DZ", - "AS", - "AD", - "AO", - "AI", - "AQ", - "AG", - "AR", - "AM", - "AW", - "AU", - "AT", - "AZ", - "BS", - "BH", - "BD", - "BB", - "BY", - "BE", - "BZ", - "BJ", - "BM", - "BT", - "BO", - "BA", - "BW", - "BV", - "BR", - "IO", - "VG", - "BN", - "BG", - "BF", - "BI", - "KH", - "CM", - "CA", - "CV", - "BQ", - "KY", - "CF", - "TD", - "CL", - "CN", - "CX", - "CC", - "CO", - "KM", - "CG", - "CD", - "CK", - "CR", - "CI", - "HR", - "CU", - "CW", - "CY", - "CZ", - "DK", - "DJ", - "DM", - "DO", - "EC", - "EG", - "SV", - "GQ", - "ER", - "EE", - "SZ", - "ET", - "FK", - "FO", - "FJ", - "FI", - "FR", - "GF", - "PF", - "TF", - "GA", - "GM", - "GE", - "DE", - "GH", - "GI", - "GR", - "GL", - "GD", - "GP", - "GU", - "GT", - "GG", - "GN", - "GW", - "GY", - "HT", - "HM", - "HN", - "HK", - "HU", - "IS", - "IN", - "ID", - "IR", - "IQ", - "IE", - "IM", - "IL", - "IT", - "JM", - "JP", - "JE", - "JO", - "KZ", - "KE", - "KI", - "XK", - "KW", - "KG", - "LA", - "LV", - "LB", - "LS", - "LR", - "LY", - "LI", - "LT", - "LU", - "MO", - "MG", - "MW", - "MY", - "MV", - "ML", - "MT", - "MH", - "MQ", - "MR", - "MU", - "YT", - "MX", - "FM", - "MD", - "MC", - "MN", - "ME", - "MS", - "MA", - "MZ", - "MM", - "NA", - "NR", - "NP", - "NL", - "NC", - "NZ", - "NI", - "NE", - "NG", - "NU", - "NF", - "KP", - "MK", - "MP", - "NO", - "OM", - "PK", - "PW", - "PS", - "PA", - "PG", - "PY", - "PE", - "PH", - "PN", - "PL", - "PT", - "PR", - "QA", - "RE", - "RO", - "RU", - "RW", - "WS", - "SM", - "ST", - "SA", - "SN", - "RS", - "SC", - "SL", - "SG", - "SX", - "SK", - "SI", - "SB", - "SO", - "ZA", - "GS", - "KR", - "SS", - "ES", - "LK", - "BL", - "SH", - "KN", - "LC", - "MF", - "PM", - "VC", - "SD", - "SR", - "SJ", - "SE", - "CH", - "SY", - "TW", - "TJ", - "TZ", - "TH", - "TL", - "TG", - "TK", - "TO", - "TT", - "TN", - "TR", - "TM", - "TC", - "TV", - "UM", - "VI", - "UG", - "UA", - "AE", - "GB", - "US", - "UY", - "UZ", - "VU", - "VA", - "VE", - "VN", - "WF", - "EH", - "YE", - "ZM", - "ZW" - ], - "in": "query", - "name": "geo", - "type": "string" - }, - { - "default": "en-US", - "description": "Google Trends UI locale", - "in": "query", - "name": "hl", - "type": "string" - }, - { - "default": 0, - "description": "Timezone offset minutes", - "in": "query", - "name": "tz", - "type": "integer" - }, - { - "default": "24h", - "description": "Trend window", - "enum": [ - "4h", - "24h", - "48h", - "7d" - ], - "in": "query", - "name": "window", - "type": "string" - }, - { - "description": "Alias for window", - "enum": [ - "4h", - "24h", - "48h", - "7d" - ], - "in": "query", - "name": "time_range", - "type": "string" - }, - { - "default": 0, - "description": "Trending category id", - "enum": [ - 0, - 3, - 47, - 44, - 22, - 12, - 5, - 7, - 71, - 8, - 45, - 65, - 11, - 13, - 958, - 19, - 16, - 299, - 14, - 66, - 29, - 533, - 174, - 18, - 20, - 67 - ], - "in": "query", - "name": "category", - "type": "integer" - }, - { - "default": "all", - "description": "Trend status filter", - "enum": [ - "all", - "active", - "ended" - ], - "in": "query", - "name": "status", - "type": "string" - }, - { - "default": "relevance", - "description": "Sort mode", - "enum": [ - "relevance", - "title", - "recency", - "search_volume" - ], + "description": "IMDb title id", "in": "query", - "name": "sort_by", - "type": "string" + "name": "id", + "type": "string", + "x-example": "tt1375666" }, { - "default": 20, - "description": "Maximum rows to return", + "description": "Absolute https://www.imdb.com/title// URL", "in": "query", - "name": "limit", - "type": "integer" + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/title/tt1375666/" } ], "produces": [ @@ -384173,29 +458083,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trends.trendingResponseDoc" + "$ref": "#/definitions/imdb.releaseInfoResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Google Trends upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -384206,28 +458122,40 @@ "ApiKeyAuth": [] } ], - "summary": "Google Trends trending now data", + "summary": "IMDb title release info", "tags": [ - "Google" + "IMDb" ] } }, - "/google/trends/trending/detail": { - "post": { + "/imdb/title/reviews": { + "get": { "consumes": [ "application/json" ], - "description": "Returns the Explore detail widgets for a single trending term, including interest over time, regional interest, top/rising related queries, and related topics when Google returns them.", - "operationId": "google-trends-trending-detail", + "description": "Returns public IMDb user review rows. Limit defaults to 10 and clamps to 20. Pass exactly one of `id` or `url`.", + "operationId": "imdb-title-reviews", "parameters": [ { - "description": "Trending detail request", - "in": "body", - "name": "request", - "required": true, - "schema": { - "$ref": "#/definitions/trends.TrendingDetailRequest" - } + "description": "IMDb title id", + "in": "query", + "name": "id", + "type": "string", + "x-example": "tt1375666" + }, + { + "description": "Absolute https://www.imdb.com/title// URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/title/tt1375666/" + }, + { + "description": "Rows to return, default 10, max 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -384237,29 +458165,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trends.exploreResponseDoc" + "$ref": "#/definitions/imdb.reviewsResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Google Trends upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -384270,58 +458204,90 @@ "ApiKeyAuth": [] } ], - "summary": "Google Trends trending term detail", + "summary": "IMDb title user reviews", "tags": [ - "Google" + "IMDb" ] } }, - "/google/videos": { + "/imdb/title/similar": { "get": { "consumes": [ "application/json" ], - "description": "Returns Google video vertical results (title, platform, link, duration, age). Locale defaults to country=us and lang=en. Returns 503 when Google serves a challenge page or an unusable response.", - "operationId": "google-videos", + "description": "Returns the titles in IMDb's More like this recommendations for a title. Pass exactly one of `id` (such as `tt0111161`) or `url`. Each title has its id, name, URL, year, type, runtime, content rating, rating, rating count and image.", + "operationId": "imdb-title-similar", "parameters": [ { - "description": "Search query", + "description": "IMDb title id", "in": "query", - "name": "q", - "required": true, + "name": "id", "type": "string", - "x-example": "openai" + "x-example": "tt0111161" }, { - "description": "1-based page number; defaults to 1", + "description": "Absolute IMDb title URL", "in": "query", - "minimum": 1, - "name": "page", - "type": "integer", - "x-example": 1 + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/title/tt0111161/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/imdb.similarResponseDoc" + } }, - { - "description": "Results per page; defaults to 10, clamped to 1..50", - "in": "query", - "maximum": 50, - "minimum": 1, - "name": "count", - "type": "integer", - "x-example": 10 + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Two-letter country code; defaults to us", + "ApiKeyAuth": [] + } + ], + "summary": "IMDb similar titles", + "tags": [ + "IMDb" + ] + } + }, + "/imdb/title/technical-specs": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns public IMDb technical specifications such as runtime, sound mix, color, and aspect ratio. Pass exactly one of `id` or `url`.", + "operationId": "imdb-title-technical-specs", + "parameters": [ + { + "description": "IMDb title id", "in": "query", - "name": "country", + "name": "id", "type": "string", - "x-example": "us" + "x-example": "tt1375666" }, { - "description": "Google UI language; defaults to en", + "description": "Absolute https://www.imdb.com/title// URL", "in": "query", - "name": "lang", + "name": "url", "type": "string", - "x-example": "en" + "x-example": "https://www.imdb.com/title/tt1375666/" } ], "produces": [ @@ -384331,29 +458297,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/google.videosResponseDoc" + "$ref": "#/definitions/imdb.technicalSpecsResponseDoc" } }, "400": { - "description": "Missing or invalid query parameters", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Google upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -384364,27 +458336,33 @@ "ApiKeyAuth": [] } ], - "summary": "Search Google video results", + "summary": "IMDb title technical specs", "tags": [ - "Google" + "IMDb" ] } }, - "/googlepatents/classification": { + "/imdb/title/trivia": { "get": { "consumes": [ "application/json" ], - "description": "Returns a CPC classification symbol's official title, its position in the classification tree (parent/child symbols), related symbols, and its full scope-note description. Accepts a symbol at any level, e.g. a section (\"A\"), a class (\"A61\"), a subclass (\"A61K\"), or a full group/subgroup (\"A61K31/00\"). Public data, sourced from Google Patents' own search API.", - "operationId": "googlepatents-classification", + "description": "Returns the trivia IMDb lists for a title. Pass exactly one of `id` or `url`. Each entry in `facts` has the text, a `spoiler` flag and, for grouped items, a category such as Director Trademark. `total` is the count IMDb lists and `has_more` is true when only part is returned.", + "operationId": "imdb-title-trivia", "parameters": [ { - "description": "CPC classification symbol", + "description": "IMDb title id", "in": "query", - "name": "code", - "required": true, + "name": "id", "type": "string", - "x-example": "A61K31/00" + "x-example": "tt1375666" + }, + { + "description": "Absolute https://www.imdb.com/title// URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/title/tt1375666/" } ], "produces": [ @@ -384394,7 +458372,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googlepatents.classificationResponseDoc" + "$ref": "#/definitions/imdb.titlePublicFactsResponseDoc" } }, "400": { @@ -384433,19 +458411,42 @@ "ApiKeyAuth": [] } ], - "summary": "Look up a Cooperative Patent Classification (CPC) symbol", + "summary": "IMDb title trivia", "tags": [ - "Google Patents" + "IMDb" ] } }, - "/googlepatents/coverage": { + "/imdb/title/videos": { "get": { "consumes": [ "application/json" ], - "description": "Returns how many patent grants and applications Google Patents has indexed, per patent office/country, per year, across every authority it covers. Public data, sourced from Google Patents' own search API.", - "operationId": "googlepatents-coverage", + "description": "Returns public title video metadata and thumbnail URLs only; playback URLs and media manifests are never returned. IMDb server-truncates this connection and exposes no usable continuation cursor, so `total` can exceed returned rows and `has_more` reports that condition. Limit defaults to 50 and clamps to 100. Pass exactly one of `id` or `url`.", + "operationId": "imdb-title-videos", + "parameters": [ + { + "description": "IMDb title id", + "in": "query", + "name": "id", + "type": "string", + "x-example": "tt1375666" + }, + { + "description": "Absolute https://www.imdb.com/title// URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.imdb.com/title/tt1375666/" + }, + { + "description": "Rows to return, default 50, max 100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 + } + ], "produces": [ "application/json" ], @@ -384453,7 +458454,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googlepatents.coverageResponseDoc" + "$ref": "#/definitions/imdb.titleVideosResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -384480,34 +458493,27 @@ "ApiKeyAuth": [] } ], - "summary": "Google Patents database coverage: grants and applications indexed per country per year", + "summary": "IMDb title video metadata", "tags": [ - "Google Patents" + "IMDb" ] } }, - "/googlepatents/detail": { + "/importyeti/company": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single patent's detail: title, abstract, inventors, assignees, dates, legal status, CPC/IPC classifications, claims, description, patent citations, cited-by patents, family members, and similar documents. `number` is a publication number such as `US10758101B2`, `EP1000000A1`, or `WO2020123456A1`. To search or browse by keyword, inventor, or assignee instead of a known publication number, use `/googlepatents/search`.", - "operationId": "googlepatents-detail", + "description": "Returns an ImportYeti company report: identity, headline US customs shipment-volume metrics (total shipments, average TEU, last shipment date, estimated shipping spend), its supplier list, and recent bill-of-lading shipment activity.", + "operationId": "importyeti-company", "parameters": [ { - "description": "Publication number, e.g. US10758101B2", + "description": "ImportYeti company slug, the last path segment of a /company/{slug} URL", "in": "query", - "name": "number", + "name": "slug", "required": true, "type": "string", - "x-example": "US10758101B2" - }, - { - "description": "Language code for the translated page, default en", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "x-example": "target" } ], "produces": [ @@ -384517,7 +458523,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googlepatents.detailResponseDoc" + "$ref": "#/definitions/importyeti.companyResponseDoc" } }, "400": { @@ -384532,8 +458538,66 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get an ImportYeti company report", + "tags": [ + "ImportYeti" + ] + } + }, + "/importyeti/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches ImportYeti for companies and suppliers matching a name, returning each match's kind (company or supplier), slug, country, address, and headline shipment stats. A \"company\" result's slug chains into GET /importyeti/company.", + "operationId": "importyeti-search", + "parameters": [ + { + "description": "Company or supplier name to search for", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "nike" + }, + { + "description": "1-indexed result page, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/importyeti.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -384556,27 +458620,27 @@ "ApiKeyAuth": [] } ], - "summary": "A single patent's bibliographic data, abstract, claims, description, citations, and family", + "summary": "Search ImportYeti companies and suppliers by name", "tags": [ - "Google Patents" + "ImportYeti" ] } }, - "/googlepatents/recent": { + "/indeed/job": { "get": { "consumes": [ "application/json" ], - "description": "Returns the patent publications Google Patents' bulk sitemap indexes for one ISO 8601 week (format YYYY-Www, e.g. \"2026-W20\"): publication number, title, and detail-page URL for each. Useful for browsing recently published patents without a search query. Public data, sourced from Google Patents' own sitemap.", - "operationId": "googlepatents-recent", + "description": "Returns one Indeed job posting by its job key (the `job_key` field returned by search).", + "operationId": "indeed-job", "parameters": [ { - "description": "ISO 8601 week, format YYYY-Www", + "description": "Indeed job key (16-character hex)", "in": "query", - "name": "week", + "name": "jk", "required": true, "type": "string", - "x-example": "2026-W20" + "x-example": "a055dc6ab3a91a3b" } ], "produces": [ @@ -384586,7 +458650,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googlepatents.recentResponseDoc" + "$ref": "#/definitions/indeed.jobResponseDoc" } }, "400": { @@ -384607,12 +458671,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -384625,147 +458683,129 @@ "ApiKeyAuth": [] } ], - "summary": "Browse patent publications indexed by Google Patents for one ISO week", + "summary": "Indeed job detail", "tags": [ - "Google Patents" + "Indeed" ] } }, - "/googlepatents/search": { + "/indeed/locations/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Searches Google Patents' full index by free-text query, with optional inventor, assignee, patent office, status, type, language, and date filters. Returns a page of hits plus top-assignee/top-inventor/top-classification breakdowns over the full result set.", - "operationId": "googlepatents-search", + "description": "Returns Indeed's own location-search autocomplete suggestions for a partial location string -- the same suggestions the app's search bar offers -- for building a valid `l` value for search.", + "operationId": "indeed-locations-suggest", "parameters": [ { - "description": "Free-text search query", + "description": "Partial location text", "in": "query", "name": "q", "required": true, "type": "string", - "x-example": "battery" - }, - { - "description": "Filter by inventor name", - "in": "query", - "name": "inventor", - "type": "string", - "x-example": "Thomas Fogarty" - }, - { - "description": "Filter by assignee/applicant name", - "in": "query", - "name": "assignee", - "type": "string", - "x-example": "Emerson Electric" + "x-example": "Austin" }, { - "description": "Filter by patent office/authority code, e.g. US, EP, WO, CN, JP", + "description": "Max suggestions to return, defaults to 10, maxes at 25", "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "name": "limit", + "type": "integer", + "x-example": 10 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/indeed.locationSuggestResponseDoc" + } }, - { - "description": "Filter by legal status. Allowed values: GRANT, APPLICATION", - "enum": [ - "GRANT", - "APPLICATION" - ], - "in": "query", - "name": "status", - "type": "string", - "x-example": "GRANT" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Filter by document type. Allowed values: PATENT, DESIGN", - "enum": [ - "PATENT", - "DESIGN" - ], - "in": "query", - "name": "type", - "type": "string", - "x-example": "PATENT" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Filter by document language. Allowed values: ENGLISH, GERMAN, CHINESE, FRENCH, SPANISH, ARABIC, JAPANESE, KOREAN, PORTUGUESE, RUSSIAN, ITALIAN, DUTCH, SWEDISH, FINNISH, NORWEGIAN, DANISH", - "enum": [ - "ENGLISH", - "GERMAN", - "CHINESE", - "FRENCH", - "SPANISH", - "ARABIC", - "JAPANESE", - "KOREAN", - "PORTUGUESE", - "RUSSIAN", - "ITALIAN", - "DUTCH", - "SWEDISH", - "FINNISH", - "NORWEGIAN", - "DANISH" - ], - "in": "query", - "name": "language", - "type": "string", - "x-example": "ENGLISH" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Indeed location suggestions", + "tags": [ + "Indeed" + ] + } + }, + "/indeed/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches Indeed job postings by keyword and location. `sort` enum: `relevance` (default), `date`.", + "operationId": "indeed-search", + "parameters": [ { - "description": "Which date before/after filter. Allowed values: priority, filing, publication. Defaults to priority when before/after is set", - "enum": [ - "priority", - "filing", - "publication" - ], + "description": "Search keywords", "in": "query", - "name": "date_field", + "name": "q", + "required": true, "type": "string", - "x-example": "priority" + "x-example": "software engineer" }, { - "description": "Only results dated on or before this date (YYYY-MM-DD)", + "description": "Location (city, state, or zip)", "in": "query", - "name": "before", + "name": "l", "type": "string", - "x-example": "2021-12-31" + "x-example": "New York, NY" }, { - "description": "Only results dated on or after this date (YYYY-MM-DD)", + "description": "Page number, 1-based, defaults to 1", "in": "query", - "name": "after", - "type": "string", - "x-example": "2020-01-01" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Sort order. Allowed values: relevance, new, old. Defaults to relevance", + "description": "Sort order: relevance, date", "enum": [ "relevance", - "new", - "old" + "date" ], "in": "query", "name": "sort", - "type": "string", - "x-example": "relevance" + "type": "string" }, { - "description": "Results per page, default 10, max 100", + "description": "Search radius in miles", "in": "query", - "name": "num", + "name": "radius", "type": "integer", - "x-example": 10 + "x-example": 25 }, { - "description": "Page number, 0-indexed, default 0", + "description": "Only jobs posted within this many days", "in": "query", - "name": "page", + "name": "fromage", "type": "integer", - "x-example": 0 + "x-example": 7 } ], "produces": [ @@ -384775,7 +458815,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googlepatents.searchResponseDoc" + "$ref": "#/definitions/indeed.searchResponseDoc" } }, "400": { @@ -384790,12 +458830,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -384808,39 +458842,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search Google Patents by keyword, inventor, assignee, and other filters", + "summary": "Indeed job search", "tags": [ - "Google Patents" + "Indeed" ] } }, - "/googlepatents/suggest": { + "/independent/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Google Patents' own autocomplete suggestions for an inventor or assignee name as the user types, the same suggestions shown by the Inventor/Assignee fields on Google Patents' advanced search page. Public data, sourced from Google Patents' own search API.", - "operationId": "googlepatents-suggest", + "description": "Returns one The Independent article by `url`, which must be a canonical HTTPS `independent.co.uk` article link. The response has the title, description, section, authors, publication and update times, lead image URL, body `paragraphs` and a `paywalled` flag.", + "operationId": "independent-article", "parameters": [ { - "description": "Which field to autocomplete. Allowed values: inventor, assignee", - "enum": [ - "inventor", - "assignee" - ], - "in": "query", - "name": "field", - "required": true, - "type": "string", - "x-example": "inventor" - }, - { - "description": "Partial name typed so far", + "description": "Canonical The Independent article URL", "in": "query", - "name": "value", + "name": "url", "required": true, "type": "string", - "x-example": "John" + "x-example": "https://www.independent.co.uk/news/world/example-b1234567.html" } ], "produces": [ @@ -384850,7 +458869,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googlepatents.suggestResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -384859,14 +458878,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -384883,41 +458896,30 @@ "ApiKeyAuth": [] } ], - "summary": "Autocomplete an inventor or assignee name for Google Patents search", + "summary": "Get The Independent article content", "tags": [ - "Google Patents" + "The Independent" ] } }, - "/googleplay/app": { + "/independent/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns app metadata from a Google Play details page, including installs, ratings, pricing, version info, developer metadata, media assets, release state, selected user comments, and \"More by this developer\" and \"Similar apps\" recommendation rails. For a per-device (phone/tablet/Chromebook) ratings-and-reviews breakdown, see `/googleplay/ratings`. Defaults: `country=us`, `lang=en`.", - "operationId": "googleplay-app", + "description": "Returns one Independent author's profile by `slug` (for example `lizzie-dearden`) or `url`; exactly one is required. The response has name, job title, bio, X/Twitter handle and the author's recent articles with title, URL, section and section URL. It is a single page of articles with no further pagination.", + "operationId": "independent-author", "parameters": [ { - "description": "Google Play package name", - "in": "query", - "name": "app_id", - "required": true, - "type": "string", - "x-example": "com.openai.chatgpt" - }, - { - "description": "Two-letter storefront country code", + "description": "Author slug, e.g. lizzie-dearden", "in": "query", - "name": "country", + "name": "slug", "type": "string", - "x-example": "us" + "x-example": "lizzie-dearden" }, { - "description": "Two-letter language code", + "description": "Canonical independent.co.uk/author/ URL; alternative to slug", "in": "query", - "name": "lang", + "name": "url", "type": "string", - "x-example": "en" + "x-example": "https://www.independent.co.uk/author/lizzie-dearden" } ], "produces": [ @@ -384925,9 +458927,9 @@ ], "responses": { "200": { - "description": "Wrapped app details payload", + "description": "OK", "schema": { - "$ref": "#/definitions/googleplay.AppDetailsResponse" + "$ref": "#/definitions/publicnews.independentAuthorResponseDoc" } }, "400": { @@ -384942,14 +458944,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -384960,33 +458956,43 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve full Google Play app details", + "summary": "Get an Independent author profile", "tags": [ - "GooglePlay" + "The Independent" ] } }, - "/googleplay/categories": { + "/independent/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the Google Play app categories and subcategories, each with an id such as `PRODUCTIVITY` and a display name. `country` and `lang` take two-letter codes to pick the storefront and the language of the names.", - "operationId": "googleplay-categories", + "description": "Returns the current headlines for one The Independent section. `section` is required and takes one of 17 slugs, such as `news/uk`, `news/world`, `sport`, `voices`, `money` or `bulletin`. Each item has its title and URL, plus summary, author, publication time and image when the outlet provides them, and the response echoes the `section`.", + "operationId": "independent-headlines", "parameters": [ { - "description": "Two-letter country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Two-letter language code", + "description": "The Independent RSS section slug", + "enum": [ + "news", + "news/uk", + "news/world", + "news/business", + "news/people", + "news/science", + "news/media", + "news/education", + "news/obituaries", + "environment", + "sport", + "arts-entertainment", + "life-style", + "travel", + "voices", + "money", + "bulletin" + ], "in": "query", - "name": "lang", + "name": "section", + "required": true, "type": "string", - "x-example": "en" + "x-example": "news" } ], "produces": [ @@ -384996,7 +459002,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googleplay.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -385005,11 +459011,37 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The Independent section headlines", + "tags": [ + "The Independent" + ] + } + }, + "/independent/news": { + "get": { + "description": "Returns the current top stories from The Independent. It takes no parameters. Each item has its title, URL and, where the outlet gives them, a summary, author, publication time, image URL and `type`. Use the headlines endpoint for one section.", + "operationId": "independent-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -385017,8 +459049,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -385029,34 +459061,50 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Google Play app categories", + "summary": "Get The Independent top stories", "tags": [ - "GooglePlay" + "The Independent" ] } }, - "/googleplay/datasafety": { + "/independent/sections": { "get": { - "consumes": [ + "description": "Lists the 17 The Independent section slugs that the headlines endpoint accepts, from `news` and `news/uk` to `life-style`, `voices`, `money` and `bulletin`. Each entry has a `slug`, a display `name` and a `url`.", + "operationId": "independent-sections", + "produces": [ "application/json" ], - "description": "Returns the data safety section Google Play shows for an app, by the required `app_id`. It lists the data the app collects and shares, each with its type, purpose and whether it is optional, plus the app's security practices and privacy policy URL. `lang` sets the language.", - "operationId": "googleplay-datasafety", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The Independent RSS sections", + "tags": [ + "The Independent" + ] + } + }, + "/indianexpress/article": { + "get": { + "description": "Returns public The Indian Express article metadata and body paragraphs from a canonical article URL. A story gated behind an Express Premium subscription returns a permission error instead of a truncated or paid body.", + "operationId": "indianexpress-article", "parameters": [ { - "description": "Google Play app id", + "description": "Canonical The Indian Express article URL", "in": "query", - "name": "app_id", + "name": "url", "required": true, "type": "string", - "x-example": "com.openai.chatgpt" - }, - { - "description": "Two-letter language code", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "x-example": "https://indianexpress.com/article/cities/delhi/example-article-slug-10892304/" } ], "produces": [ @@ -385066,7 +459114,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googleplay.dataSafetyResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -385075,20 +459123,20 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Forbidden", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -385099,55 +459147,136 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Google Play data safety details", + "summary": "Get The Indian Express article content", "tags": [ - "GooglePlay" + "The Indian Express" ] } }, - "/googleplay/developer/{dev_id}": { + "/indianexpress/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the Google Play apps published by one developer, by developer id or name, for an optional country and language. `num` sets how many apps to return, and `full_detail=true` resolves each app to its full detail record instead of the listing summary. Returns the developer id and name with the app list.", - "operationId": "googleplay-developer", + "description": "Returns a The Indian Express author's profile by `url`, a canonical `indianexpress.com/profile/author//` link: name, image URL, biography and recent articles with title, URL, summary and image. `image_url` and `biography` may be missing, and `published_at` is the page's date text such as `Sep 24, 2026 16:36 IST`, not a timestamp.", + "operationId": "indianexpress-author", "parameters": [ { - "description": "Developer id or name", - "in": "path", - "name": "dev_id", + "description": "Canonical The Indian Express author URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "OpenAI" + "x-example": "https://indianexpress.com/profile/author/jane-doe/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.indianExpressAuthorResponseDoc" + } }, - { - "description": "Number of apps", - "in": "query", - "name": "num", - "type": "integer", - "x-example": 60 + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Two-letter country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Two-letter language code", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get a The Indian Express author profile", + "tags": [ + "The Indian Express" + ] + } + }, + "/indianexpress/headlines": { + "get": { + "description": "Returns the current headlines for one The Indian Express section. `section` is required and takes a slug such as `india`, `explained`, `cities-delhi`, `entertainment-bollywood`, `sports-cricket` or `political-pulse`. Items carry title, URL, summary, author, publication time and image, and the response echoes the `section`.", + "operationId": "indianexpress-headlines", + "parameters": [ { - "default": false, - "description": "Resolve each app to full detail", + "description": "The Indian Express RSS section slug", + "enum": [ + "politics", + "india", + "world", + "explained", + "express-exclusive", + "opinion", + "opinion-columns", + "business", + "cities", + "cities-delhi", + "cities-mumbai", + "cities-kolkata", + "cities-pune", + "cities-chandigarh", + "cities-ahmedabad", + "cities-lucknow", + "cities-chennai", + "cities-hyderabad", + "cities-bangalore", + "upsc-current-affairs", + "entertainment", + "entertainment-bollywood", + "entertainment-hollywood", + "entertainment-malayalam", + "entertainment-movie-review", + "entertainment-regional", + "entertainment-tamil", + "entertainment-television", + "entertainment-telugu", + "entertainment-web-series", + "lifestyle", + "lifestyle-art-and-culture", + "lifestyle-destination-of-the-week", + "lifestyle-fashion", + "lifestyle-feelings", + "lifestyle-fitness", + "lifestyle-food-wine", + "lifestyle-health", + "lifestyle-pets-animals", + "lifestyle-workplace", + "technology", + "technology-tech-news", + "technology-tech-reviews", + "sports", + "sports-cricket", + "sports-football", + "sports-chess", + "sports-asian-games", + "health-wellness", + "education", + "research", + "books-and-literature", + "long-reads", + "fresh-take", + "political-pulse", + "smart-stocks" + ], "in": "query", - "name": "full_detail", - "type": "boolean" + "name": "section", + "required": true, + "type": "string", + "x-example": "politics" } ], "produces": [ @@ -385157,7 +459286,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googleplay.developerResultsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -385166,11 +459295,37 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The Indian Express section headlines", + "tags": [ + "The Indian Express" + ] + } + }, + "/indianexpress/news": { + "get": { + "description": "Returns the current top stories from The Indian Express. It takes no parameters. Each item has its title, URL and, where the outlet gives them, a summary, author, publication time, image URL and `type`. Use the headlines endpoint to read one section.", + "operationId": "indianexpress-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -385178,8 +459333,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -385190,91 +459345,195 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve apps by Google Play developer", + "summary": "Get The Indian Express top stories", "tags": [ - "GooglePlay" + "The Indian Express" ] } }, - "/googleplay/list": { + "/indianexpress/sections": { "get": { - "consumes": [ + "description": "Lists the The Indian Express section slugs that the headlines endpoint accepts, including `politics`, `india`, `explained`, `cities-mumbai`, `entertainment-tamil`, `lifestyle-health` and `smart-stocks`. Each entry has a `slug`, a display `name` and a section `url`.", + "operationId": "indianexpress-sections", + "produces": [ "application/json" ], - "description": "Lists apps from a Google Play chart. `collection` is `TOP_FREE`, `TOP_PAID`, `GROSSING`, `NEW_FREE` or `NEW_PAID`, and `category`, `device`, `age`, `num`, `country` and `lang` narrow it. Set `full_detail` to get full app details instead of the compact card.", - "operationId": "googleplay-list", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The Indian Express RSS sections", + "tags": [ + "The Indian Express" + ] + } + }, + "/indiatoday/article": { + "get": { + "description": "Returns public India Today article metadata and body paragraphs from a canonical story URL. Subscriber-only magazine stories return only the public teaser with paywalled set to true.", + "operationId": "indiatoday-article", "parameters": [ { - "description": "Collection: TOP_FREE, TOP_PAID, GROSSING, NEW_FREE, NEW_PAID", - "enum": [ - "TOP_FREE", - "TOP_PAID", - "GROSSING", - "NEW_FREE", - "NEW_PAID" - ], + "description": "Canonical India Today story URL", "in": "query", - "name": "collection", + "name": "url", + "required": true, "type": "string", - "x-example": "TOP_FREE" + "x-example": "https://www.indiatoday.in/world/story/example-story-slug-3002364-2026-09-24" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } }, - { - "description": "Category id", - "in": "query", - "name": "category", - "type": "string", - "x-example": "TOOLS" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Google Play device tab: phone, tablet, tv, chromebook, watch, xr, car", - "enum": [ - "phone", - "tablet", - "tv", - "chromebook", - "watch", - "xr", - "car" - ], - "in": "query", - "name": "device", - "type": "string", - "x-example": "tablet" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Family age range", + "ApiKeyAuth": [] + } + ], + "summary": "Get India Today article content", + "tags": [ + "India Today" + ] + } + }, + "/indiatoday/author": { + "get": { + "description": "Returns an India Today author profile by `url`, a canonical `https://www.indiatoday.in/author/` link; desk bylines such as `india-today-business-desk` work too. The response has the name, job title, headshot, biography and the first page of recent text stories (typically 20), each with title, URL, section, summary and image. Stories carry no dates.", + "operationId": "indiatoday-author", + "parameters": [ + { + "description": "Canonical India Today author URL", "in": "query", - "name": "age", + "name": "url", + "required": true, "type": "string", - "x-example": "AGE_RANGE1" + "x-example": "https://www.indiatoday.in/author/jane-doe" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.indiaTodayAuthorResponseDoc" + } }, - { - "description": "Number of apps", - "in": "query", - "name": "num", - "type": "integer", - "x-example": 50 + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Two-letter country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Two-letter language code", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get an India Today author profile", + "tags": [ + "India Today" + ] + } + }, + "/indiatoday/headlines": { + "get": { + "description": "Returns the text stories listed on one India Today section page, typically 12 to 60. `section` is required and takes one of 35 slugs such as `top-news`, `cricket`, `markets`, `bollywood` or `fact-check`; other values return 400. Items have title, URL, `type`, summary and image when shown, but no `published_at`.", + "operationId": "indiatoday-headlines", + "parameters": [ { - "default": false, - "description": "Resolve each app to full detail", + "description": "India Today section slug", + "enum": [ + "top-news", + "india", + "south-india", + "law", + "business", + "markets", + "world", + "us-news", + "sports", + "cricket", + "football", + "technology", + "science", + "health", + "environment", + "lifestyle", + "movies", + "bollywood", + "hollywood", + "movie-reviews", + "ott", + "television", + "education", + "elections", + "fact-check", + "opinion", + "trending", + "sunday-special", + "cities", + "auto", + "jobs", + "horoscopes", + "insight", + "data-intelligence", + "history-of-it" + ], "in": "query", - "name": "full_detail", - "type": "boolean" + "name": "section", + "required": true, + "type": "string", + "x-example": "top-news" } ], "produces": [ @@ -385284,7 +459543,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googleplay.listResultsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -385293,11 +459552,37 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get India Today section headlines", + "tags": [ + "India Today" + ] + } + }, + "/indiatoday/news": { + "get": { + "description": "Returns fresh India Today top stories from its public RSS feed (text stories only; video and photo items are omitted).", + "operationId": "indiatoday-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -385305,8 +459590,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -385317,48 +459602,111 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve apps from a Google Play top collection", + "summary": "Get India Today top stories", "tags": [ - "GooglePlay" + "India Today" ] } }, - "/googleplay/permissions": { + "/indiatoday/sections": { "get": { - "consumes": [ + "description": "Lists the 35 India Today sections accepted by `indiatoday-headlines`, such as `top-news`, `south-india`, `markets`, `ott`, `elections` and `history-of-it`. Each entry has a `slug`, display `name` and the section page `url`. Takes no parameters.", + "operationId": "indiatoday-sections", + "produces": [ "application/json" ], - "description": "Returns the permissions a Google Play app requests, by the required `app_id`. Each entry has the permission name and its type. Set `short` to get only the permission names as a flat list. `country` and `lang` pick the storefront and language.", - "operationId": "googleplay-permissions", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get India Today sections", + "tags": [ + "India Today" + ] + } + }, + "/indiewire/article": { + "get": { + "description": "Returns public IndieWire article metadata (title, author(s), published/updated dates, section, lead image) and the body paragraphs an anonymous visitor sees, from a canonical article URL. Paywalled content is never bypassed; a gated story would return only its public portion.", + "operationId": "indiewire-article", "parameters": [ { - "description": "Google Play app id", + "description": "Canonical IndieWire article URL", "in": "query", - "name": "app_id", + "name": "url", "required": true, "type": "string", - "x-example": "com.openai.chatgpt" + "x-example": "https://www.indiewire.com/features/interviews/handle-with-care-dvd-traveling-indie-film-physical-media-1235216158/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } }, - { - "description": "Two-letter country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Two-letter language code", + "ApiKeyAuth": [] + } + ], + "summary": "Get IndieWire article content", + "tags": [ + "IndieWire" + ] + } + }, + "/indiewire/author": { + "get": { + "description": "Returns one IndieWire staff writer or contributor's public profile: name, headshot, biography, any listed social/contact links, and one page of their recent articles.", + "operationId": "indiewire-author", + "parameters": [ + { + "description": "Canonical indiewire.com/author/ URL", "in": "query", - "name": "lang", + "name": "url", + "required": true, "type": "string", - "x-example": "en" + "x-example": "https://www.indiewire.com/author/alison-foreman/" }, { - "default": false, - "description": "Return only permission names", + "description": "1-based page of recent articles to return; defaults to 1", "in": "query", - "name": "short", - "type": "boolean" + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -385368,7 +459716,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googleplay.permissionsResultsResponseDoc" + "$ref": "#/definitions/publicnews.indiewireAuthorResponseDoc" } }, "400": { @@ -385383,14 +459731,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -385401,41 +459743,58 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Google Play app permissions", + "summary": "Get an IndieWire author profile", "tags": [ - "GooglePlay" + "IndieWire" ] } }, - "/googleplay/ratings": { + "/indiewire/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the ratings-and-reviews breakdown Google Play shows under the details page's device tabs, one entry each for phone, tablet, and Chromebook. Defaults: `country=us`, `lang=en`.", - "operationId": "googleplay-ratings", + "description": "Returns fresh headlines from one public IndieWire section feed. Gallery and list pages are omitted because they are not text articles.", + "operationId": "indiewire-headlines", "parameters": [ { - "description": "Google Play package name", + "description": "IndieWire section slug", + "enum": [ + "analysis", + "animation", + "awards", + "awards-premium", + "best-of", + "box-office", + "brand-content", + "breaking-news", + "business", + "commentary", + "consider-this", + "craft", + "criticism", + "culture", + "events", + "features", + "festivals", + "film", + "general", + "general-news", + "industry", + "interviews", + "movies", + "news", + "obituary", + "podcast", + "predictions", + "results", + "shop", + "shows", + "special-projects", + "trailers" + ], "in": "query", - "name": "app_id", + "name": "section", "required": true, "type": "string", - "x-example": "com.openai.chatgpt" - }, - { - "description": "Two-letter storefront country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Two-letter language code", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "x-example": "analysis" } ], "produces": [ @@ -385445,7 +459804,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googleplay.ratingsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -385454,11 +459813,37 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get IndieWire section headlines", + "tags": [ + "IndieWire" + ] + } + }, + "/indiewire/news": { + "get": { + "description": "Returns IndieWire's current top stories on independent film, TV and awards, with no parameters. Each item has its title, URL, one-sentence summary, author and publication time. Gallery and list pages are left out because they are not text articles.", + "operationId": "indiewire-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -385466,8 +459851,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -385478,73 +459863,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get Google Play ratings by device", + "summary": "Get IndieWire top stories", "tags": [ - "GooglePlay" + "IndieWire" ] } }, - "/googleplay/reviews": { + "/indiewire/sections": { "get": { - "consumes": [ + "description": "Lists IndieWire's 32 editorial categories accepted by `indiewire-headlines`, such as `analysis`, `box-office`, `festivals`, `interviews`, `obituary` and `trailers`. Each entry has a `slug`, display `name` and the category feed `url`. Categories nest under the roots `news`, `features`, `awards` and `criticism`.", + "operationId": "indiewire-sections", + "produces": [ "application/json" ], - "description": "Returns Google Play reviews for an app by `app_id`. `sort` is `newest` (default), `helpfulness` or `rating`, and `num` is up to 1000 per request (default 100). Each review has its text, score, date, thumbs-up count, app version and any developer reply. Pass `next_pagination_token` back to continue.", - "operationId": "googleplay-reviews", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get IndieWire sections", + "tags": [ + "IndieWire" + ] + } + }, + "/inews/article": { + "get": { + "description": "Returns public i article metadata (headline, description, section, authors, publish/update times, lead image) and body paragraphs from a canonical article URL.", + "operationId": "inews-article", "parameters": [ { - "description": "Google Play app id", + "description": "Canonical i article URL", "in": "query", - "name": "app_id", + "name": "url", "required": true, "type": "string", - "x-example": "com.openai.chatgpt" - }, - { - "description": "Sort: helpfulness, newest, rating", - "enum": [ - "helpfulness", - "newest", - "rating" - ], - "in": "query", - "name": "sort", - "type": "string", - "x-example": "newest" - }, - { - "description": "Number of reviews", - "in": "query", - "name": "num", - "type": "integer", - "x-example": 100 - }, - { - "description": "Two-letter country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - }, - { - "description": "Two-letter language code", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" - }, - { - "default": false, - "description": "Only fetch the requested page", - "in": "query", - "name": "paginate", - "type": "boolean" - }, - { - "description": "Token from a previous response", - "in": "query", - "name": "next_pagination_token", - "type": "string" + "x-example": "https://inews.co.uk/news/world/withering-remark-humiliated-trump-court-failure-4786703" } ], "produces": [ @@ -385554,7 +459916,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googleplay.reviewsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -385563,20 +459925,20 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Forbidden", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -385587,67 +459949,125 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Google Play reviews", + "summary": "Get i article content", "tags": [ - "GooglePlay" + "i" ] } }, - "/googleplay/search": { + "/inews/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Google Play for apps matching the required `term`, up to `num` results (default 20, max 250). `price` is `all` (default), `free` or `paid`, and `country` and `lang` default to `us` and `en`. A strong exact match is placed first. An empty list means no apps matched.", - "operationId": "googleplay-search", + "description": "Returns an author profile from i (inews.co.uk) by `url`, a canonical `https://inews.co.uk/author/` link. The response has `name`, `bio`, `image_url`, `same_as` social profiles and up to about 30 recent articles, each with title, URL, summary, section and `published_at`. Paginated or non-author URLs return 400, and an unknown author returns 404.", + "operationId": "inews-author", "parameters": [ { - "description": "Search term", + "description": "Canonical i author URL", "in": "query", - "name": "term", + "name": "url", "required": true, "type": "string", - "x-example": "chatgpt" - }, - { - "description": "Number of apps", - "in": "query", - "name": "num", - "type": "integer", - "x-example": 20 + "x-example": "https://inews.co.uk/author/simon-kelner" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.inewsAuthorResponseDoc" + } }, - { - "description": "Two-letter country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Two-letter language code", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": false, - "description": "Resolve each app to full detail", - "in": "query", - "name": "full_detail", - "type": "boolean" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get an i author profile", + "tags": [ + "i" + ] + } + }, + "/inews/headlines": { + "get": { + "description": "Returns fresh headlines from one public i section feed. The section must be a slug returned by the sections endpoint.", + "operationId": "inews-headlines", + "parameters": [ { - "description": "Price filter: all, free, paid", + "description": "i section slug", "enum": [ - "all", - "free", - "paid" + "home", + "news", + "world", + "technology", + "politics", + "science", + "business", + "education", + "environment", + "health", + "media", + "housing", + "crime", + "sport", + "tennis", + "football", + "rugby-union", + "golf", + "cricket", + "boxing", + "olympics", + "rugby-league", + "opinion", + "editor", + "columnists", + "comment", + "culture", + "television", + "music", + "film", + "books", + "arts", + "radio", + "comedy", + "inews-lifestyle", + "money", + "property-and-mortgages", + "saving-and-banking", + "pensions-and-retirement", + "investing", + "small-business", + "travel", + "food-and-drink", + "homes-and-gardens", + "relationships" ], "in": "query", - "name": "price", + "name": "section", + "required": true, "type": "string", - "x-example": "all" + "x-example": "home" } ], "produces": [ @@ -385657,7 +460077,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googleplay.searchResultsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -385666,20 +460086,40 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } - }, - "429": { - "description": "Too Many Requests", + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get i section headlines", + "tags": [ + "i" + ] + } + }, + "/inews/news": { + "get": { + "description": "Returns fresh i (inews.co.uk) top stories from the site's public RSS feed, with summary, author, publish time, and lead image when present.", + "operationId": "inews-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -385690,55 +460130,110 @@ "ApiKeyAuth": [] } ], - "summary": "Search Google Play", + "summary": "Get i top stories", "tags": [ - "GooglePlay" + "i" ] } }, - "/googleplay/similar": { + "/inews/sections": { "get": { - "consumes": [ + "description": "Lists the 45 i sections accepted by `inews-headlines`, from `home` and `news` to `football`, `money` and `relationships`. Each entry has a `slug`, display `name` and `url`. `home` is the site-wide listing, and low-volume sections such as `golf` or `comedy` may hold only one or two items.", + "operationId": "inews-sections", + "produces": [ "application/json" ], - "description": "Returns the apps in the Similar apps cluster on a Google Play app page, for the required `app_id`. `num` limits how many are returned, `country` and `lang` set the storefront and language, and `full_detail` returns full app details instead of compact cards.", - "operationId": "googleplay-similar", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get i sections", + "tags": [ + "i" + ] + } + }, + "/inquirer/article": { + "get": { + "description": "Returns public Philippine Daily Inquirer article metadata and body paragraphs from a canonical article URL on any of its ten public news subdomains.", + "operationId": "inquirer-article", "parameters": [ { - "description": "Google Play app id", + "description": "Canonical Philippine Daily Inquirer article URL", "in": "query", - "name": "app_id", + "name": "url", "required": true, "type": "string", - "x-example": "com.openai.chatgpt" + "x-example": "https://newsinfo.inquirer.net/2311358/18-mindanawons-top-2026-nursing-licensure-exam" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } }, - { - "description": "Number of apps", - "in": "query", - "name": "num", - "type": "integer", - "x-example": 24 + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Two-letter country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Two-letter language code", + "ApiKeyAuth": [] + } + ], + "summary": "Get Philippine Daily Inquirer article content", + "tags": [ + "Philippine Daily Inquirer" + ] + } + }, + "/inquirer/author": { + "get": { + "description": "Returns one Philippine Daily Inquirer byline's public archive page: the contributor's name and their recent articles on that subdomain, from a canonical byline URL. Byline pages are per-subdomain, so an author's articles from a different section require calling this endpoint again with that section's own byline URL.", + "operationId": "inquirer-author", + "parameters": [ + { + "description": "Canonical Philippine Daily Inquirer byline URL", "in": "query", - "name": "lang", + "name": "url", + "required": true, "type": "string", - "x-example": "en" + "x-example": "https://newsinfo.inquirer.net/byline/ivana-janlee-a-otoc" }, { - "default": false, - "description": "Resolve each app to full detail", + "description": "1-based page number of articles to return; defaults to 1 and overrides any page number already present in url", "in": "query", - "name": "full_detail", - "type": "boolean" + "name": "page", + "type": "integer" } ], "produces": [ @@ -385748,7 +460243,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googleplay.similarResultsResponseDoc" + "$ref": "#/definitions/publicnews.inquirerAuthorResponseDoc" } }, "400": { @@ -385763,14 +460258,106 @@ "$ref": "#/definitions/app.Response" } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Philippine Daily Inquirer author profile", + "tags": [ + "Philippine Daily Inquirer" + ] + } + }, + "/inquirer/headlines": { + "get": { + "description": "Returns the latest Philippine Daily Inquirer stories for one section. `section` is required and takes `newsinfo`, `globalnation`, `business`, `sports`, `entertainment`, `lifestyle`, `technology`, `opinion`, `usa` or `cebudailynews`. Each item has its title, URL, summary, publication time, author and lead image.", + "operationId": "inquirer-headlines", + "parameters": [ + { + "description": "Philippine Daily Inquirer section slug", + "enum": [ + "newsinfo", + "globalnation", + "business", + "sports", + "entertainment", + "lifestyle", + "technology", + "opinion", + "usa", + "cebudailynews" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "newsinfo" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Philippine Daily Inquirer section headlines", + "tags": [ + "Philippine Daily Inquirer" + ] + } + }, + "/inquirer/news": { + "get": { + "description": "Returns the latest top stories from the Philippine Daily Inquirer's flagship national-news site, newsinfo.inquirer.net. Takes no parameters. Each item has its title, URL, summary, publication time, author and lead image.", + "operationId": "inquirer-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -385781,41 +460368,69 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve similar Google Play apps", + "summary": "Get Philippine Daily Inquirer top stories", "tags": [ - "GooglePlay" + "Philippine Daily Inquirer" ] } }, - "/googleplay/suggest/{term}": { + "/inquirer/sections": { + "get": { + "description": "Lists the ten Philippine Daily Inquirer sections that `inquirer-headlines` accepts, from `newsinfo` to `cebudailynews`. Each entry has a `slug`, a display `name` and the section's `url`. Takes no parameters.", + "operationId": "inquirer-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Philippine Daily Inquirer sections", + "tags": [ + "Philippine Daily Inquirer" + ] + } + }, + "/instacart/departments": { "get": { "consumes": [ "application/json" ], - "description": "Returns up to 10 Google Play search suggestions for the term prefix in the path. `country` and `lang` take two-letter codes to pick the storefront and language. Each suggestion is a `term`.", - "operationId": "googleplay-suggest", + "description": "Returns a store's department/category taxonomy (Produce, Dairy & Eggs, Bakery, ...) two levels deep -- department and subcategory. Metadata only, does not return products. Public data sourced from Instacart's own storefront navigation.", + "operationId": "instacart-departments", "parameters": [ { - "description": "Search term prefix", - "in": "path", - "name": "term", + "description": "Store's opaque shop id, from GET /instacart/stores", + "in": "query", + "name": "shop_id", "required": true, "type": "string", - "x-example": "chatg" + "x-example": "9501" }, { - "description": "Two-letter country code", + "description": "Store's retailer slug, from GET /instacart/stores", "in": "query", - "name": "country", + "name": "store_slug", + "required": true, "type": "string", - "x-example": "us" + "x-example": "safeway" }, { - "description": "Two-letter language code", + "description": "Postal code to localize the taxonomy for", "in": "query", - "name": "lang", + "name": "postal_code", + "required": true, "type": "string", - "x-example": "en" + "x-example": "94105" } ], "produces": [ @@ -385825,7 +460440,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/googleplay.suggestResponseDoc" + "$ref": "#/definitions/instacart.departmentsResponseDoc" } }, "400": { @@ -385834,20 +460449,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -385858,61 +460467,59 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Google Play query suggestions", + "summary": "Get Instacart store department taxonomy", "tags": [ - "GooglePlay" + "Instacart" ] } }, - "/gosugamers/encounters": { + "/instacart/item": { "get": { "consumes": [ "application/json" ], - "description": "Returns the other recorded meetings between two GosuGamers teams as seen from one match: tournament, start time, both teams with ids, tags and final scores, winner flags and the match URL. The given `match_id` itself is left out; `game` is required by the upstream but does not narrow the list. Take the ids from gosugamers-matches, gosugamers-results or gosugamers-rankings. Two teams with no other meeting return an empty list.", - "operationId": "gosugamers-encounters", + "description": "Returns a single product's detail at a specific Instacart store: name, size, brand, image, current pricing (with any sale/offer badge), availability, stock level, dietary labels, and nutrition facts. Public data sourced from Instacart's own storefront pages.", + "operationId": "instacart-item", "parameters": [ { - "description": "Game section of the match; one of dota2, counterstrike, lol, valorant, mobile-legends, pubg-mobile, wild-rift, free-fire, battlegrounds-mobile-india", - "enum": [ - "dota2", - "counterstrike", - "lol", - "valorant", - "mobile-legends", - "pubg-mobile", - "wild-rift", - "free-fire", - "battlegrounds-mobile-india" - ], + "description": "Store's opaque shop id, from GET /instacart/stores", "in": "query", - "name": "game", + "name": "shop_id", "required": true, - "type": "string" + "type": "string", + "x-example": "9501" }, { - "description": "Numeric id of the match whose other meetings are wanted; that match is left out", + "description": "Store's retailer slug, from GET /instacart/stores", "in": "query", - "name": "match_id", + "name": "store_slug", + "required": true, + "type": "string", + "x-example": "safeway" + }, + { + "description": "Store's opaque retailer location id, from GET /instacart/stores", + "in": "query", + "name": "retailer_location_id", "required": true, "type": "string", - "x-example": "660816" + "x-example": "53" }, { - "description": "Numeric id of the first team", + "description": "Instacart's opaque product id", "in": "query", - "name": "team1_id", + "name": "product_id", "required": true, "type": "string", - "x-example": "38335" + "x-example": "17830663" }, { - "description": "Numeric id of the second team", + "description": "Postal code to price/localize the lookup for", "in": "query", - "name": "team2_id", + "name": "postal_code", "required": true, "type": "string", - "x-example": "37547" + "x-example": "94105" } ], "produces": [ @@ -385922,19 +460529,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/gosugamers.EncountersResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/instacart.itemResponseDoc" } }, "400": { @@ -385943,8 +460538,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -385961,19 +460562,45 @@ "ApiKeyAuth": [] } ], - "summary": "GosuGamers head-to-head meetings", + "summary": "Get Instacart product detail at a store", "tags": [ - "GosuGamers" + "Instacart" ] } }, - "/gosugamers/games": { + "/instacart/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns the game sections whose match pages this API reads: `dota2`, `counterstrike`, `lol`, `valorant`, `mobile-legends`, `pubg-mobile`, `wild-rift`, `free-fire` and `battlegrounds-mobile-india`, with display names. Use a slug as `game` in the other gosugamers endpoints.", - "operationId": "gosugamers-games", + "description": "Returns Instacart's own search-term autosuggestions for a keyword within one store -- the same suggestion list shown in the site's own search box dropdown. This is term-level (matching search phrases plus a representative thumbnail), not a paginated product-results list. Public data sourced from Instacart's own storefront search.", + "operationId": "instacart-search", + "parameters": [ + { + "description": "Store's opaque shop id, from GET /instacart/stores", + "in": "query", + "name": "shop_id", + "required": true, + "type": "string", + "x-example": "9501" + }, + { + "description": "Store's retailer slug, from GET /instacart/stores", + "in": "query", + "name": "store_slug", + "required": true, + "type": "string", + "x-example": "safeway" + }, + { + "description": "Free-text search term", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "milk" + } + ], "produces": [ "application/json" ], @@ -385981,19 +460608,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/gosugamers.GamesResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/instacart.searchResponseDoc" } }, "400": { @@ -386002,8 +460617,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -386020,54 +460635,35 @@ "ApiKeyAuth": [] } ], - "summary": "GosuGamers game sections", + "summary": "Search Instacart product terms at a store", "tags": [ - "GosuGamers" + "Instacart" ] } }, - "/gosugamers/match": { + "/instacart/search-nearby": { "get": { "consumes": [ "application/json" ], - "description": "Returns one GosuGamers match: start time, tournament, stage, round, best-of, finished flag, both opponents with score, placement, world ranking and country, the number of games in the series and linked streams with language and viewer count. All of `game`, `tournament_id` and `match_id` are required; an id that does not belong to the stated tournament returns not found. Battle-royale titles can list more than two opponents. The `games` list gives each game's id for gosugamers-match-game.", - "operationId": "gosugamers-match", + "description": "Returns Instacart's own search-term autosuggestions for a keyword across every retailer serving a postal code at once, rather than one specific store. Public data sourced from Instacart's own cross-retailer search.", + "operationId": "instacart-search-nearby", "parameters": [ { - "description": "Game section; one of dota2, counterstrike, lol, valorant, mobile-legends, pubg-mobile, wild-rift, free-fire, battlegrounds-mobile-india", - "enum": [ - "dota2", - "counterstrike", - "lol", - "valorant", - "mobile-legends", - "pubg-mobile", - "wild-rift", - "free-fire", - "battlegrounds-mobile-india" - ], - "in": "query", - "name": "game", - "required": true, - "type": "string", - "x-example": "dota2" - }, - { - "description": "Numeric tournament id from gosugamers-matches or gosugamers-results (tournament.id)", + "description": "US postal/ZIP code to search near", "in": "query", - "name": "tournament_id", + "name": "postal_code", "required": true, "type": "string", - "x-example": "63208" + "x-example": "94105" }, { - "description": "Numeric match id from gosugamers-matches or gosugamers-results (id)", + "description": "Free-text search term", "in": "query", - "name": "match_id", + "name": "q", "required": true, "type": "string", - "x-example": "663299" + "x-example": "milk" } ], "produces": [ @@ -386077,19 +460673,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/gosugamers.MatchDetail" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/instacart.searchNearbyResponseDoc" } }, "400": { @@ -386104,8 +460688,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -386122,27 +460706,27 @@ "ApiKeyAuth": [] } ], - "summary": "GosuGamers esports match detail", + "summary": "Search Instacart product terms near a postal code", "tags": [ - "GosuGamers" + "Instacart" ] } }, - "/gosugamers/match-game": { + "/instacart/stores": { "get": { "consumes": [ "application/json" ], - "description": "Returns one game of a GosuGamers match: the map, each team's score, side and first-pick flag, the picks or bans with the player (agents, heroes or champions where the title publishes them), the lineups, round or half scores (Counter-Strike and Valorant), every team's placement, kills and points for battle-royale games (PUBG Mobile) and VODs. Take `game_id` from the `games` list of gosugamers-match. Fields a title does not publish are empty. An unknown game id returns not found.", - "operationId": "gosugamers-match-game", + "description": "Finds Instacart retailer storefronts (grocery stores, warehouse clubs, and other partner retailers) serving a US postal code, each with the identifiers needed to look up its items and search suggestions. Public data sourced from Instacart's own store-discovery API.", + "operationId": "instacart-stores", "parameters": [ { - "description": "Numeric game id from the games list of gosugamers-match", + "description": "US postal/ZIP code to search near", "in": "query", - "name": "game_id", + "name": "postal_code", "required": true, "type": "string", - "x-example": "1361936" + "x-example": "94105" } ], "produces": [ @@ -386152,19 +460736,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/gosugamers.MatchGameResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/instacart.storesResponseDoc" } }, "400": { @@ -386179,8 +460751,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -386197,51 +460769,27 @@ "ApiKeyAuth": [] } ], - "summary": "GosuGamers single game (map) of a match", + "summary": "Find Instacart stores near a postal code", "tags": [ - "GosuGamers" + "Instacart" ] } }, - "/gosugamers/matches": { + "/instacart/trending": { "get": { "consumes": [ "application/json" ], - "description": "Returns the next upcoming and currently live esports matches from GosuGamers, for one `game` or across all games, 10 per page by default and up to 100 with `page` and `page_size`: start time, tournament, stage, round, both teams and the match URL. `total_rows` reports how many matches the site lists. Use gosugamers-match with the returned tournament and match ids.", - "operationId": "gosugamers-matches", + "description": "Returns Instacart's own popular/trending search terms across every retailer serving a postal code -- the same blank-state suggestions shown before a user types anything into the search box. Public data sourced from Instacart's own cross-retailer search.", + "operationId": "instacart-trending", "parameters": [ { - "description": "Game section; one of dota2, counterstrike, lol, valorant, mobile-legends, pubg-mobile, wild-rift, free-fire, battlegrounds-mobile-india; omit for all games", - "enum": [ - "dota2", - "counterstrike", - "lol", - "valorant", - "mobile-legends", - "pubg-mobile", - "wild-rift", - "free-fire", - "battlegrounds-mobile-india" - ], - "in": "query", - "name": "game", - "type": "string" - }, - { - "description": "1-based page; page 1 with the default size is read from the public page, any other page or size from the site's JSON API; defaults to 1", - "in": "query", - "minimum": 1, - "name": "page", - "type": "integer" - }, - { - "description": "Page size, 1 to 100; defaults to 10", + "description": "US postal/ZIP code to search near", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page_size", - "type": "integer" + "name": "postal_code", + "required": true, + "type": "string", + "x-example": "94105" } ], "produces": [ @@ -386251,19 +460799,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/gosugamers.MatchListResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/instacart.trendingResponseDoc" } }, "400": { @@ -386272,8 +460808,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -386290,46 +460832,33 @@ "ApiKeyAuth": [] } ], - "summary": "GosuGamers upcoming and live esports matches", + "summary": "Get Instacart trending search terms near a postal code", "tags": [ - "GosuGamers" + "Instacart" ] } }, - "/gosugamers/player": { + "/instagram/post/comments": { "get": { "consumes": [ "application/json" ], - "description": "Returns one GosuGamers player: in-game name, real name, country, GosuGamers Elo rating and world and regional ranking, win/loss/draw record and win rate, streak, career earnings in USD, social links, the current team and previous teams with join and leave dates. A player of a different game than `game` returns not found.", - "operationId": "gosugamers-player", + "description": "Returns top-level comments for a public Instagram post or Reel. `reply_count` is included when the logged-out source exposes it; reply bodies are not available on this anonymous surface. Pass `paging_info.max_id` back as `max_id` for the next comment page.", + "operationId": "instagram-comments", "parameters": [ { - "description": "Game section; one of dota2, counterstrike, lol, valorant, mobile-legends, pubg-mobile, wild-rift, free-fire, battlegrounds-mobile-india", - "enum": [ - "dota2", - "counterstrike", - "lol", - "valorant", - "mobile-legends", - "pubg-mobile", - "wild-rift", - "free-fire", - "battlegrounds-mobile-india" - ], + "description": "Public Instagram post or Reel URL", "in": "query", - "name": "game", + "name": "url", "required": true, "type": "string", - "x-example": "dota2" + "x-example": "https://www.instagram.com/google/p/DecN711mjpI/" }, { - "description": "Numeric player id from gosugamers-team (roster[].id)", + "description": "Opaque cursor from the previous response's paging_info.max_id", "in": "query", - "name": "player_id", - "required": true, - "type": "string", - "x-example": "368742" + "name": "max_id", + "type": "string" } ], "produces": [ @@ -386337,43 +460866,37 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped top-level comments page", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/gosugamers.PlayerDetail" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/instagram.commentsResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "Post or Reel not found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Anonymous upstream access denied or unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -386384,66 +460907,35 @@ "ApiKeyAuth": [] } ], - "summary": "GosuGamers esports player profile", + "summary": "Retrieve paginated Instagram comments", "tags": [ - "GosuGamers" + "Instagram" ] } }, - "/gosugamers/rankings": { + "/instagram/post/{id}/{post_id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns the GosuGamers Elo team ranking for one `game`, globally or for one ranking region (`region_id`, taken from the `regions` list in the response; 0 is Global), with an optional team name prefix `q`: rank, team id, name, tag, Elo, previous rank and rank change. Paged with `page` and `page_size` (up to 100); `total_rows` reports the size of the ranking. A `region_id` that the game does not list returns an invalid-parameter error.", - "operationId": "gosugamers-rankings", + "description": "Returns media details for an Instagram URL shortcode. Use media.code from the reels response or shortcode from a public post URL; numeric media IDs are rejected.", + "operationId": "instagram-post", "parameters": [ { - "description": "Game section; one of dota2, counterstrike, lol, valorant, mobile-legends, pubg-mobile, wild-rift, free-fire, battlegrounds-mobile-india", - "enum": [ - "dota2", - "counterstrike", - "lol", - "valorant", - "mobile-legends", - "pubg-mobile", - "wild-rift", - "free-fire", - "battlegrounds-mobile-india" - ], - "in": "query", - "name": "game", + "description": "Instagram user ID retained for route compatibility; ownership is not verified", + "in": "path", + "name": "id", "required": true, - "type": "string" - }, - { - "description": "Ranking region id from the regions list of the response; 0 is Global; defaults to 0", - "in": "query", - "minimum": 0, - "name": "region_id", - "type": "integer" - }, - { - "description": "Team name prefix, up to 100 characters", - "in": "query", - "name": "q", "type": "string", - "x-example": "Te" - }, - { - "description": "1-based page; defaults to 1", - "in": "query", - "minimum": 1, - "name": "page", - "type": "integer" + "x-example": "1067259270" }, { - "description": "Page size, 1 to 100; defaults to 10", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page_size", - "type": "integer" + "description": "Instagram URL shortcode (media.code), not a numeric media ID", + "in": "path", + "name": "post_id", + "required": true, + "type": "string", + "x-example": "DNBxHTZRigP" } ], "produces": [ @@ -386451,37 +460943,31 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped media item payload", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/gosugamers.RankingsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/instagram.postResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "No post found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -386492,51 +460978,27 @@ "ApiKeyAuth": [] } ], - "summary": "GosuGamers team rankings", + "summary": "Retrieve a specific Instagram post by URL shortcode", "tags": [ - "GosuGamers" + "Instagram" ] } }, - "/gosugamers/results": { + "/instagram/profile/{username}": { "get": { "consumes": [ "application/json" ], - "description": "Returns the most recent completed esports matches from GosuGamers, for one `game` or across all games, 10 per page by default and up to 100 with `page` and `page_size`, with final scores and winner flags. `total_rows` reports how many results the site lists. Use gosugamers-match with the returned ids for opponents, ranking and streams.", - "operationId": "gosugamers-results", + "description": "Returns the public profile of an Instagram account by `username`. The response has the user id, full name, biography, bio links, external URL, category, follower, following and post counts, verified and private flags, location, profile picture, recent posts with captions and like counts, and related profiles.", + "operationId": "instagram-profile", "parameters": [ { - "description": "Game section; one of dota2, counterstrike, lol, valorant, mobile-legends, pubg-mobile, wild-rift, free-fire, battlegrounds-mobile-india; omit for all games", - "enum": [ - "dota2", - "counterstrike", - "lol", - "valorant", - "mobile-legends", - "pubg-mobile", - "wild-rift", - "free-fire", - "battlegrounds-mobile-india" - ], - "in": "query", - "name": "game", - "type": "string" - }, - { - "description": "1-based page; page 1 with the default size is read from the public page, any other page or size from the site's JSON API; defaults to 1", - "in": "query", - "minimum": 1, - "name": "page", - "type": "integer" - }, - { - "description": "Page size, 1 to 100; defaults to 10", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page_size", - "type": "integer" + "description": "Instagram username", + "in": "path", + "name": "username", + "required": true, + "type": "string", + "x-example": "google" } ], "produces": [ @@ -386544,37 +461006,31 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped profile payload", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/gosugamers.MatchListResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/instagram.profileResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Profile not found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -386585,35 +461041,33 @@ "ApiKeyAuth": [] } ], - "summary": "GosuGamers recent esports match results", + "summary": "Retrieve an Instagram user profile by username", "tags": [ - "GosuGamers" + "Instagram" ] } }, - "/gosugamers/stage-groups": { + "/instagram/reels/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns the groups (child tournaments) of one stage of a GosuGamers tournament, each with its format (for example Knockout), result type (for example Bracket), status, start time and the teams in it with ranking and country. Take `tournament_id` from gosugamers-tournaments or gosugamers-matches and `stage_id` from the stages list of gosugamers-tournament. An unknown stage, or a stage of another tournament, returns an empty list.", - "operationId": "gosugamers-stage-groups", + "description": "Returns up to 12 public Reels via anonymous proxied HTTP for the numeric Instagram user ID. Supports opaque `max_id` pagination. Captions, timestamps and original image dimensions are omitted when the public source does not expose them.", + "operationId": "instagram-reels", "parameters": [ { - "description": "Numeric tournament id from gosugamers-tournaments or gosugamers-matches", - "in": "query", - "name": "tournament_id", + "description": "Numeric Instagram user ID (not a username)", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "63147" + "x-example": "45374573700" }, { - "description": "Numeric stage id (stages[].id) from gosugamers-tournament", + "description": "Pagination cursor for fetching the next page of Reels", "in": "query", - "name": "stage_id", - "required": true, - "type": "string", - "x-example": "28413" + "name": "max_id", + "type": "string" } ], "produces": [ @@ -386621,37 +461075,37 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped Reels feed payload", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/gosugamers.StageGroupsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/instagram.reelsResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "No Reels found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Anonymous upstream access denied or unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -386662,46 +461116,33 @@ "ApiKeyAuth": [] } ], - "summary": "GosuGamers tournament stage groups", + "summary": "Retrieve Instagram Reels for a user", "tags": [ - "GosuGamers" + "Instagram" ] } }, - "/gosugamers/team": { + "/instagram/user/{username}/posts": { "get": { "consumes": [ "application/json" ], - "description": "Returns one GosuGamers team: name, tag, country, logo, GosuGamers Elo rating and world and regional ranking, win/loss/draw record and win rate, current streak, career earnings in USD, social links, the roster with join dates and the team's next upcoming matches. A team of a different game than `game` returns not found.", - "operationId": "gosugamers-team", + "description": "Returns public posts and Reels from the logged-out Posts tab for an Instagram username. Each item exposes the fields available in Instagram's public grid; source-omitted metrics and dimensions are not inferred. Pass `paging_info.max_id` back as `max_id` for the next page.", + "operationId": "instagram-user-posts", "parameters": [ { - "description": "Game section; one of dota2, counterstrike, lol, valorant, mobile-legends, pubg-mobile, wild-rift, free-fire, battlegrounds-mobile-india", - "enum": [ - "dota2", - "counterstrike", - "lol", - "valorant", - "mobile-legends", - "pubg-mobile", - "wild-rift", - "free-fire", - "battlegrounds-mobile-india" - ], - "in": "query", - "name": "game", + "description": "Instagram username, optionally prefixed with @", + "in": "path", + "name": "username", "required": true, "type": "string", - "x-example": "dota2" + "x-example": "google" }, { - "description": "Numeric team id from gosugamers-matches, gosugamers-results or gosugamers-match (teams[].id)", + "description": "Opaque cursor from the previous response's paging_info.max_id", "in": "query", - "name": "team_id", - "required": true, - "type": "string", - "x-example": "51203" + "name": "max_id", + "type": "string" } ], "produces": [ @@ -386709,43 +461150,37 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped user posts page", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/gosugamers.TeamDetail" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/instagram.userPostsResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "Profile not found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Anonymous upstream access denied or unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -386756,42 +461191,24 @@ "ApiKeyAuth": [] } ], - "summary": "GosuGamers esports team profile", + "summary": "Retrieve paginated Instagram user posts", "tags": [ - "GosuGamers" + "Instagram" ] } }, - "/gosugamers/team-results": { + "/investopedia/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the completed matches of one GosuGamers team, newest first, across the games it plays: start time, tournament, both teams with ids and final scores, winner flags and the match URL. Paged with `page` and `page_size` (up to 100, default 10); `total_rows` is the team's full history. An unknown team id returns an empty list. Take `team_id` from gosugamers-rankings, gosugamers-results or gosugamers-team.", - "operationId": "gosugamers-team-results", + "description": "Returns metadata (title, description, dates, section, authors, image) and body paragraphs for a public Investopedia page that uses the article template: news stories, dictionary terms (/terms/...), explainers and Q&A pages (/articles/..., /ask/answers/..., and similar), and product roundups. Section listing pages and author profiles are rejected with a 400 that names the endpoint to use instead.", + "operationId": "investopedia-article", "parameters": [ { - "description": "Numeric team id from gosugamers-rankings, gosugamers-results or gosugamers-team", + "description": "Canonical Investopedia article, term, or explainer URL", "in": "query", - "name": "team_id", + "name": "url", "required": true, "type": "string", - "x-example": "37547" - }, - { - "description": "1-based page; defaults to 1", - "in": "query", - "minimum": 1, - "name": "page", - "type": "integer" - }, - { - "description": "Page size, 1 to 100; defaults to 10", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page_size", - "type": "integer" + "x-example": "https://www.investopedia.com/terms/c/compoundinterest.asp" } ], "produces": [ @@ -386801,19 +461218,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/gosugamers.TeamResultsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -386822,8 +461227,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -386840,46 +461245,24 @@ "ApiKeyAuth": [] } ], - "summary": "GosuGamers team match history", + "summary": "Get Investopedia article content", "tags": [ - "GosuGamers" + "Investopedia" ] } }, - "/gosugamers/tournament": { + "/investopedia/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one GosuGamers tournament: name, status, start time, description, LAN flag, venue and country, prize pool in USD when listed, sponsors, stages with their status and the next upcoming matches. A tournament that belongs to a different game than `game` returns not found.", - "operationId": "gosugamers-tournament", + "description": "Returns an Investopedia writer, editor, reviewer, or expert contributor's public profile (name, job title, summary, photo, credentials such as education, location, and expertise, personal social links, biography, favorite quote) and their recent articles.", + "operationId": "investopedia-author", "parameters": [ { - "description": "Game section; one of dota2, counterstrike, lol, valorant, mobile-legends, pubg-mobile, wild-rift, free-fire, battlegrounds-mobile-india", - "enum": [ - "dota2", - "counterstrike", - "lol", - "valorant", - "mobile-legends", - "pubg-mobile", - "wild-rift", - "free-fire", - "battlegrounds-mobile-india" - ], - "in": "query", - "name": "game", - "required": true, - "type": "string", - "x-example": "dota2" - }, - { - "description": "Numeric tournament id from gosugamers-matches or gosugamers-results (tournament.id)", + "description": "Canonical Investopedia author URL (/- or /contributors//)", "in": "query", - "name": "tournament_id", + "name": "url", "required": true, "type": "string", - "x-example": "63208" + "x-example": "https://www.investopedia.com/diccon-hyatt-7100294" } ], "produces": [ @@ -386889,19 +461272,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/gosugamers.TournamentDetail" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/publicnews.investopediaAuthorResponseDoc" } }, "400": { @@ -386916,12 +461287,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -386934,45 +461299,69 @@ "ApiKeyAuth": [] } ], - "summary": "GosuGamers esports tournament detail", + "summary": "Get an Investopedia author or expert profile", "tags": [ - "GosuGamers" + "Investopedia" ] } }, - "/gosugamers/tournament-participants": { + "/investopedia/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the teams entered in one GosuGamers tournament: id, name, slug, logo, GosuGamers ranking, country and team URL. Both `game` and `tournament_id` are required; the upstream does not narrow the list by game, and an unknown tournament id returns an empty list. Take the tournament id from gosugamers-tournaments, gosugamers-matches or gosugamers-results and use a team id with gosugamers-team or gosugamers-team-results.", - "operationId": "gosugamers-tournament-participants", + "description": "Returns the current story list from one Investopedia section, with title, URL, byline, and image. section accepts any slug returned by GET /investopedia/sections.", + "operationId": "investopedia-headlines", "parameters": [ { - "description": "Game section of the tournament; one of dota2, counterstrike, lol, valorant, mobile-legends, pubg-mobile, wild-rift, free-fire, battlegrounds-mobile-india", + "description": "Investopedia section slug, from GET /investopedia/sections", "enum": [ - "dota2", - "counterstrike", - "lol", - "valorant", - "mobile-legends", - "pubg-mobile", - "wild-rift", - "free-fire", - "battlegrounds-mobile-india" + "news", + "markets-news", + "company-news", + "earnings-reports", + "certificates-deposit-news", + "mortgage-rates", + "economic-news", + "political-news", + "cryptocurrency-news", + "live-markets-news", + "personal-finance-news", + "investing", + "stocks", + "cryptocurrency", + "bonds", + "etfs", + "options-and-derivatives-trading", + "commodities", + "trading", + "financial-technology-and-automated-investing", + "brokers", + "fundamental-analysis", + "banking", + "savings-accounts", + "certificate-of-deposits", + "money-market-account", + "checking-accounts", + "personal-finance", + "retirement-planning", + "student-loans", + "personal-loans", + "budgeting-and-savings", + "mortgage", + "credit-and-debt", + "taxes", + "insurance", + "financial-literacy-resource-center", + "economy", + "government-and-policy", + "monetary-policy", + "fiscal-policy", + "economics", + "financial-product-reviews" ], "in": "query", - "name": "game", - "required": true, - "type": "string" - }, - { - "description": "Numeric tournament id from gosugamers-tournaments, gosugamers-matches or gosugamers-results", - "in": "query", - "name": "tournament_id", + "name": "section", "required": true, "type": "string", - "x-example": "63147" + "x-example": "news" } ], "produces": [ @@ -386982,19 +461371,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/gosugamers.TournamentParticipantsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -387003,8 +461380,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -387021,29 +461398,16 @@ "ApiKeyAuth": [] } ], - "summary": "GosuGamers tournament participants", + "summary": "Get Investopedia section headlines", "tags": [ - "GosuGamers" + "Investopedia" ] } }, - "/gosugamers/tournament-talents": { + "/investopedia/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the casters, hosts and analysts assigned to one GosuGamers tournament: id, name, game, roles, broadcast language code, country, image and profile URL. An unknown tournament id, or a tournament with no listed crew, returns an empty list. Take the tournament id from gosugamers-tournaments, gosugamers-matches or gosugamers-results.", - "operationId": "gosugamers-tournament-talents", - "parameters": [ - { - "description": "Numeric tournament id from gosugamers-tournaments, gosugamers-matches or gosugamers-results", - "in": "query", - "name": "tournament_id", - "required": true, - "type": "string", - "x-example": "63147" - } - ], + "description": "Returns the newest Investopedia news stories (markets, companies, earnings, economy, government, crypto, rates, and personal finance news), with title, URL, byline, and image.", + "operationId": "investopedia-news", "produces": [ "application/json" ], @@ -387051,25 +461415,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/gosugamers.TournamentTalentsResponse" - } - }, - "type": "object" - } - ] - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -387090,72 +461436,16 @@ "ApiKeyAuth": [] } ], - "summary": "GosuGamers tournament broadcast talents", + "summary": "Get Investopedia latest news", "tags": [ - "GosuGamers" + "Investopedia" ] } }, - "/gosugamers/tournaments": { + "/investopedia/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists GosuGamers esports tournaments, optionally for one `game` and one `state` (`all`, `ongoing`, `upcoming`, `past`), with an optional name prefix `q`: id, name, game, status, start time, prize pool with currency and USD value, participant count, featured flag and the tournament URL. Paged with `page` and `page_size` (up to 100); `total_rows` reports the size of the filtered list. Use gosugamers-tournament with a returned id and game for stages and upcoming matches.", - "operationId": "gosugamers-tournaments", - "parameters": [ - { - "description": "Game section; one of dota2, counterstrike, lol, valorant, mobile-legends, pubg-mobile, wild-rift, free-fire, battlegrounds-mobile-india; omit for all games", - "enum": [ - "dota2", - "counterstrike", - "lol", - "valorant", - "mobile-legends", - "pubg-mobile", - "wild-rift", - "free-fire", - "battlegrounds-mobile-india" - ], - "in": "query", - "name": "game", - "type": "string" - }, - { - "description": "Tournament state; one of all, ongoing, upcoming, past; defaults to all", - "enum": [ - "all", - "ongoing", - "upcoming", - "past" - ], - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "Tournament name prefix, up to 100 characters", - "in": "query", - "name": "q", - "type": "string", - "x-example": "VCT" - }, - { - "description": "1-based page; defaults to 1", - "in": "query", - "minimum": 1, - "name": "page", - "type": "integer" - }, - { - "description": "Page size, 1 to 100; defaults to 10", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page_size", - "type": "integer" - } - ], + "description": "Returns the full Investopedia section inventory (43 news, investing, banking, personal finance, economy, and reviews sections), each with a slug, display name, and public listing URL. Use a returned slug as the section parameter on GET /investopedia/headlines.", + "operationId": "investopedia-sections", "produces": [ "application/json" ], @@ -387163,37 +461453,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/gosugamers.TournamentsResponse" - } - }, - "type": "object" - } - ] - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -387202,24 +461462,24 @@ "ApiKeyAuth": [] } ], - "summary": "GosuGamers esports tournament directory", + "summary": "Get Investopedia sections", "tags": [ - "GosuGamers" + "Investopedia" ] } }, - "/gq/article": { + "/iol/article": { "get": { - "description": "Returns public GQ article metadata and body paragraphs from a canonical story URL. A story GQ marks as subscriber-only returns a 403 permission error instead of partial text.", - "operationId": "gq-article", + "description": "Returns an IOL article by `url`, a canonical `iol.co.za` story link. The response has the title, description, section (the deepest in the breadcrumb, such as `Crime and Courts`), authors, lead image, publish and update times, and body `paragraphs`. Section, author, tag and search pages are rejected. `paywalled` is never set.", + "operationId": "iol-article", "parameters": [ { - "description": "Canonical GQ story URL", + "description": "Canonical IOL article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.gq.com/story/how-to-unclog-your-ear" + "x-example": "https://iol.co.za/news/crime-and-courts/2026-09-24-homii-lift-tragedy-durban-father-demands-ethekwini-report-nearly-a-year-after-twins-fall/" } ], "produces": [ @@ -387238,12 +461498,6 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "404": { "description": "Not Found", "schema": { @@ -387262,37 +461516,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get GQ article content", + "summary": "Get IOL article content", "tags": [ - "GQ" + "IOL" ] } }, - "/gq/author": { + "/iol/author": { "get": { - "description": "Returns a GQ contributor profile, identified by `slug` (such as `tom-ward`) or by a canonical `url`; provide exactly one. The response has the name, job title, biography, headshot, social links and one page of recent articles. `page` runs from 1 to 100 (default 1) and `has_next_page` signals more. Unknown contributors return 404.", - "operationId": "gq-author", + "description": "Returns an IOL author profile, identified by `slug` (such as `xolile-mtembu`) or a canonical `iol.co.za/authors//` `url`; provide exactly one. The response has the name, `role` and `image_url` when present, and up to 25 recent articles with title, URL, summary, section and a `published_date` taken from the article URL. Unknown authors return not found.", + "operationId": "iol-author", "parameters": [ { - "description": "Contributor slug, e.g. tom-ward; provide slug or url", + "description": "Author slug, e.g. xolile-mtembu", "in": "query", "name": "slug", "type": "string", - "x-example": "tom-ward" + "x-example": "xolile-mtembu" }, { - "description": "Canonical www.gq.com/contributor/ URL; alternative to slug", + "description": "Canonical iol.co.za/authors// URL; alternative to slug", "in": "query", "name": "url", "type": "string", - "x-example": "https://www.gq.com/contributor/tom-ward" - }, - { - "default": 1, - "description": "1-based page of the contributor's article list (1-100)", - "in": "query", - "name": "page", - "type": "integer" + "x-example": "https://iol.co.za/authors/xolile-mtembu/" } ], "produces": [ @@ -387302,7 +461549,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.gqAuthorResponseDoc" + "$ref": "#/definitions/publicnews.iolAuthorResponseDoc" } }, "400": { @@ -387329,37 +461576,149 @@ "ApiKeyAuth": [] } ], - "summary": "Get a GQ contributor profile", + "summary": "Get an IOL author profile", "tags": [ - "GQ" + "IOL" ] } }, - "/gq/headlines": { + "/iol/headlines": { "get": { - "description": "Returns the story cards currently on one GQ section page. `section` is required and takes one of 11 slugs such as `style`, `grooming`, `watches` or `gqsports`. Each item has its `title`, `url`, `summary`, `author`, `image_url` and a `published_at` date (`YYYY-MM-DD`). Only `/story/` articles are listed, and fields GQ does not show are omitted.", - "operationId": "gq-headlines", + "description": "Returns recent IOL headlines for one section path. `section` is required and takes a value such as `news`, `news/south-africa/gauteng`, `sport/rugby/springboks`, `business/economy` or `entertainment/music`. Each item has its title, URL, summary, publication time and image, plus the author when the outlet names one. Unlisted values are rejected.", + "operationId": "iol-headlines", "parameters": [ { - "description": "GQ section slug", + "description": "IOL section path", "enum": [ - "culture", + "news", + "news/africa", + "news/brics", + "news/crime-and-courts", + "news/education", + "news/energy", + "news/environment", + "news/feel-good", + "news/opinion", + "news/partnered", + "news/politics", + "news/politics/opinion", + "news/south-africa", + "news/south-africa/eastern-cape", + "news/south-africa/free-state", + "news/south-africa/gauteng", + "news/south-africa/kwazulu-natal", + "news/south-africa/limpopo", + "news/south-africa/mpumalanga", + "news/south-africa/north-west", + "news/south-africa/northern-cape", + "news/south-africa/western-cape", + "news/world", + "sport", + "sport/athletics", + "sport/betting", + "sport/boxing", + "sport/cricket", + "sport/cricket/domestic", + "sport/cricket/international", + "sport/cricket/proteas", + "sport/cricket/proteas-women", + "sport/golf", + "sport/horse-racing", + "sport/mma", + "sport/opinion", + "sport/rugby", + "sport/rugby/imbokodo", + "sport/rugby/international", + "sport/rugby/springboks", + "sport/rugby/super-rugby", + "sport/rugby/urc", + "sport/soccer", + "sport/soccer/bafana", + "sport/soccer/la-liga", + "sport/soccer/premier-league", + "sport/soccer/psl", + "sport/soccer/uefa-champions-league", + "sport/swimming", + "sport/tennis", + "business", + "business/economy", + "business/jobs", + "business/property", + "business/window-on-china", + "personal-finance", + "opinion", + "opinion/letters", "entertainment", - "fitness", - "gq-hype", - "gq-recommends", - "gqsports", - "grooming", - "politics", - "style", - "watches", - "wellness" + "entertainment/books", + "entertainment/celebrity-news", + "entertainment/events", + "entertainment/movies", + "entertainment/music", + "entertainment/opinion", + "entertainment/royals", + "entertainment/streaming", + "entertainment/tv", + "entertainment/whats-on", + "entertainment/whats-on/cape-town", + "entertainment/whats-on/durban", + "entertainment/whats-on/joburg", + "entertainment/whats-on/pretoria", + "lifestyle", + "lifestyle/competitions", + "lifestyle/family", + "lifestyle/family/parenting", + "lifestyle/food-drink", + "lifestyle/food-drink/recipes", + "lifestyle/health", + "lifestyle/love-sex", + "lifestyle/love-sex/relationships", + "lifestyle/opinion", + "lifestyle/style-beauty", + "lifestyle/style-beauty/beauty", + "lifestyle/style-beauty/fashion", + "technology", + "technology/esports", + "technology/gadgets", + "technology/gaming", + "technology/mobile-apps", + "technology/opinion", + "technology/software-and-internet", + "motoring", + "motoring/f1-grand-prix", + "motoring/industry-news", + "motoring/latest-launches", + "motoring/motorsport", + "motoring/partnered", + "motoring/road-tests", + "travel", + "travel/africa", + "travel/partnered", + "travel/south-africa", + "travel/travel-tips", + "travel/world", + "matric", + "g20", + "government-at-work", + "capeargus", + "capeargus/news", + "capeargus/opinion", + "weekend-argus", + "weekend-argus/news", + "dailynews", + "dailynews/news", + "the-star", + "the-star/news", + "sunday-tribune", + "saturday-star", + "pretoria-news", + "pretoria-news/news", + "pretoria-news/opinion" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "culture" + "x-example": "news" } ], "produces": [ @@ -387390,16 +461749,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get GQ section headlines", + "summary": "Get IOL section headlines", "tags": [ - "GQ" + "IOL" ] } }, - "/gq/news": { + "/iol/news": { "get": { - "description": "Returns GQ's current top stories, with no parameters. Each item has its `title`, `url`, `summary`, `author`, `image_url` and `published_at` as an RFC 3339 UTC timestamp. Only `/story/` articles are included; galleries and other content types are skipped.", - "operationId": "gq-news", + "description": "Returns the 30 newest stories from IOL (Independent Online, South Africa), with no parameters. Each item has its title, canonical article URL, short summary, publication time, author byline and lead image.", + "operationId": "iol-news", "produces": [ "application/json" ], @@ -387410,12 +461769,6 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -387428,16 +461781,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get GQ top stories", + "summary": "Get IOL top stories", "tags": [ - "GQ" + "IOL" ] } }, - "/gq/sections": { + "/iol/sections": { "get": { - "description": "Lists the 11 GQ sections accepted by `gq-headlines`: `culture`, `entertainment`, `fitness`, `gq-hype`, `gq-recommends`, `gqsports`, `grooming`, `politics`, `style`, `watches` and `wellness`. Each entry has a `slug`, display `name` and section `url`. Pages that list no stories are not included.", - "operationId": "gq-sections", + "description": "Returns the verified IOL section inventory accepted by the headlines endpoint: news, sport, business, lifestyle, entertainment, technology, motoring, travel and opinion, their sub-sections, provincial news and the sister-title feeds.", + "operationId": "iol-sections", "produces": [ "application/json" ], @@ -387454,19 +461807,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get GQ sections", + "summary": "Get IOL sections", "tags": [ - "GQ" + "IOL" ] } }, - "/grailed/categories": { + "/irishindependent/article": { "get": { - "consumes": [ - "application/json" + "description": "Returns public Irish Independent article metadata (headline, description, section, authors, publish/update times, lead image) and body paragraphs from a canonical article URL. Premium articles are served to anonymous readers as a one-paragraph teaser; those are returned with paywalled set to true and only the teaser paragraph.", + "operationId": "irishindependent-article", + "parameters": [ + { + "description": "Canonical Irish Independent article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.independent.ie/sport/golf/dream-start-for-defending-champion-michael-kim-at-open-de-france/a/162124102.html" + } ], - "description": "Returns Grailed's full facet taxonomy for the enum-like parameters grailed-search/grailed-sold-listings accept: department, category, category_path (a more granular subcategory slug), condition, color, and size, each with its own live listing count. department and condition are exhaustive closed sets (2 and 5 values respectively); category/category_path/color/size are the full, exhaustive value space as of the request. Designer is NOT included here (7,363 values, far too large for a facet-count response) -- see grailed-designers for that discovery endpoint.", - "operationId": "grailed-categories", "produces": [ "application/json" ], @@ -387474,11 +461834,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grailed.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -387495,27 +461861,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Grailed's facet taxonomy", + "summary": "Get Irish Independent article content", "tags": [ - "Grailed" + "Irish Independent" ] } }, - "/grailed/collection": { + "/irishindependent/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Grailed curated homepage collection's full listing set. id is the collection's numeric id, from grailed-collections' own collections[].id field. An unknown id returns a typed not-found error.", - "operationId": "grailed-collection", + "description": "Returns an Irish Independent author's name, biography, published email and social links, headshot, and their most recent articles (the first page of the profile's article list) from a canonical author URL.", + "operationId": "irishindependent-author", "parameters": [ { - "description": "Collection id, from grailed-collections' own collections[].id field", + "description": "Canonical Irish Independent author URL", "in": "query", - "name": "id", + "name": "url", "required": true, - "type": "integer", - "x-example": 20 + "type": "string", + "x-example": "https://www.independent.ie/authors/139084244-brian-keogh/" } ], "produces": [ @@ -387525,7 +461888,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grailed.collectionResponseDoc" + "$ref": "#/definitions/publicnews.irishindependentAuthorResponseDoc" } }, "400": { @@ -387540,12 +461903,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -387558,19 +461915,156 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Grailed curated collection's listings", + "summary": "Get an Irish Independent author profile", "tags": [ - "Grailed" + "Irish Independent" ] } }, - "/grailed/collections": { + "/irishindependent/headlines": { "get": { - "consumes": [ - "application/json" + "description": "Returns fresh headlines from one public Irish Independent section feed. The section must be a slug returned by the sections endpoint.", + "operationId": "irishindependent-headlines", + "parameters": [ + { + "description": "Irish Independent section slug", + "enum": [ + "home", + "business", + "business-commercial-property", + "business-in-the-workplace", + "business-irish-business", + "business-jobs", + "business-money", + "business-small-business", + "business-technology", + "business-world", + "comment", + "comment-analysis", + "comment-editorial", + "comment-letters", + "comment-opinion", + "county", + "county-cork", + "county-cork-sport", + "county-dublin", + "county-galway", + "county-kerry", + "county-kerry-north-west-kerry-news", + "county-kerry-south-kerry-news", + "county-kerry-sport", + "county-kerry-tralee-news", + "county-louth", + "county-louth-drogheda-news", + "county-louth-dundalk-news", + "county-louth-sport", + "county-sligo", + "county-sligo-sport", + "county-wexford", + "county-wexford-enniscorthy-news", + "county-wexford-gorey-news", + "county-wexford-new-ross-news", + "county-wexford-sport", + "county-wexford-wexford-district", + "county-wicklow", + "county-wicklow-arklow-news", + "county-wicklow-bray-news", + "county-wicklow-sport", + "county-wicklow-west-wicklow-news", + "county-wicklow-wicklow-district", + "entertainment", + "entertainment-books", + "entertainment-celebrity", + "entertainment-movies", + "entertainment-music", + "entertainment-radio", + "entertainment-television", + "entertainment-theatre-arts", + "farming", + "irish-news", + "irish-news-courts", + "irish-news-crime", + "irish-news-education", + "irish-news-health", + "irish-news-politics", + "latest", + "lifestyle", + "lifestyle-family", + "lifestyle-family-learning", + "lifestyle-family-mothers-babies", + "lifestyle-family-parenting", + "lifestyle-fashion-beauty", + "lifestyle-food-drink", + "lifestyle-food-drink-food-reviews", + "lifestyle-food-drink-recipes", + "lifestyle-food-drink-wine", + "lifestyle-health-wellbeing", + "lifestyle-health-wellbeing-baby-loss", + "lifestyle-health-wellbeing-fitness", + "lifestyle-health-wellbeing-healthy-eating", + "lifestyle-health-wellbeing-mental-health", + "lifestyle-home-garden", + "lifestyle-home-garden-gardens", + "lifestyle-home-garden-homes", + "lifestyle-home-garden-interiors", + "lifestyle-home-garden-new-homes", + "lifestyle-motoring", + "lifestyle-motoring-car-news", + "lifestyle-motoring-car-reviews", + "lifestyle-motoring-car-talk", + "lifestyle-sex-relationships", + "lifestyle-travel", + "lifestyle-weddings", + "seachtain", + "sport", + "sport-gaa", + "sport-gaa-camogie", + "sport-gaa-gaelic-football", + "sport-gaa-hurling", + "sport-gaa-ladies-football", + "sport-gaa-u-20-gaelic-football", + "sport-gaa-u-20-hurling", + "sport-golf", + "sport-horse-racing", + "sport-other-sports", + "sport-other-sports-american-football", + "sport-other-sports-athletics", + "sport-other-sports-basketball", + "sport-other-sports-boxing", + "sport-other-sports-cricket", + "sport-other-sports-cycling", + "sport-other-sports-darts", + "sport-other-sports-hockey", + "sport-other-sports-motor-sport", + "sport-other-sports-rowing", + "sport-other-sports-snooker", + "sport-other-sports-swimming", + "sport-other-sports-tennis", + "sport-rugby", + "sport-rugby-champions-cup", + "sport-rugby-connacht-rugby", + "sport-rugby-leinster-rugby", + "sport-rugby-munster-rugby", + "sport-rugby-six-nations", + "sport-rugby-ulster-rugby", + "sport-rugby-united-rugby-championship", + "sport-soccer", + "sport-soccer-champions-league", + "sport-soccer-international-soccer", + "sport-soccer-league-of-ireland", + "sport-soccer-other-soccer", + "sport-soccer-premier-league", + "sport-womens-sport", + "subscriber-exclusives", + "world-news" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "home" + } ], - "description": "Returns Grailed's own curated homepage merchandising collections (e.g. \"Trending: Apparel\", \"Dark Luxury\", \"Chromed Out\") -- editorial/trending shelves distinct from a plain search or facet browse. Each collection's numeric id is the value grailed-collection's own id parameter accepts.", - "operationId": "grailed-collections", "produces": [ "application/json" ], @@ -387578,11 +462072,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grailed.collectionsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -387599,42 +462093,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Grailed's curated homepage collections", + "summary": "Get Irish Independent section headlines", "tags": [ - "Grailed" + "Irish Independent" ] } }, - "/grailed/designers": { + "/irishindependent/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a page of Grailed's full designer/brand taxonomy (7,363 designers as of 2026-09-09) -- the value space grailed-search/grailed-sold-listings' own designer parameter accepts (by name). q is an optional free-text filter (typo-tolerant, e.g. a partial name for typeahead-style lookup); an empty q lists the full taxonomy ordered by Grailed's own default ranking (most-listed designers first).", - "operationId": "grailed-designers", - "parameters": [ - { - "description": "Free-text designer name filter", - "in": "query", - "name": "q", - "type": "string", - "x-example": "gucci" - }, - { - "description": "One-based page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Results per page, defaults to 24, maximum 100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 24 - } - ], + "description": "Returns fresh Irish Independent (independent.ie) top stories from the site's public RSS feed, with summary, author, publish time, and lead image when present. Some stories are premium (subscriber) content; open them with the article endpoint to see the paywalled flag.", + "operationId": "irishindependent-news", "produces": [ "application/json" ], @@ -387642,19 +462110,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grailed.designersResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -387669,27 +462125,50 @@ "ApiKeyAuth": [] } ], - "summary": "List or search Grailed's designer/brand taxonomy", + "summary": "Get Irish Independent top stories", "tags": [ - "Grailed" + "Irish Independent" ] } }, - "/grailed/listing": { + "/irishindependent/sections": { "get": { - "consumes": [ + "description": "Returns every Irish Independent section slug accepted by the headlines endpoint (national, regional and county news, sport, business, comment, lifestyle and entertainment), with its display name and public RSS feed URL.", + "operationId": "irishindependent-sections", + "produces": [ "application/json" ], - "description": "Returns full listing-detail data for one Grailed listing: description, every photo, measurements, designers, and the seller's full profile -- richer than the flattened summary grailed-search/grailed-sold-listings return per listing. id is the listing's numeric id, from a search or sold-listings result's own listings[].id field.", - "operationId": "grailed-listing", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Irish Independent sections", + "tags": [ + "Irish Independent" + ] + } + }, + "/irishtimes/article": { + "get": { + "description": "Returns public Irish Times article metadata and body paragraphs from a canonical article URL. A subscriber-only (premium) article returns a permission error instead of its body; metered articles are returned in full.", + "operationId": "irishtimes-article", "parameters": [ { - "description": "Listing id, from a search or sold-listings result's own listings[].id field", + "description": "Canonical Irish Times article URL", "in": "query", - "name": "id", + "name": "url", "required": true, - "type": "integer", - "x-example": 105379689 + "type": "string", + "x-example": "https://www.irishtimes.com/technology/2026/09/24/example-article-slug/" } ], "produces": [ @@ -387699,7 +462178,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grailed.listingResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -387708,14 +462187,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Forbidden", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -387732,124 +462211,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Grailed listing", + "summary": "Get Irish Times article content", "tags": [ - "Grailed" + "Irish Times" ] } }, - "/grailed/search": { + "/irishtimes/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches or browses Grailed's (grailed.com) peer-to-peer resale marketplace for currently-active listings. q, designer, department, category, size, color, condition, min_price, and max_price are all optional and combine as an AND -- a free-text q can be combined with any of the facet filters in the same request, or every field can be omitted to browse the full active catalog by Grailed's own \"heat\" relevance ranking. designer accepts one of the values grailed-designers' own designers[].name field returns; department, category, size, and color accept values from grailed-categories' own departments[].value/categories[].value/sizes[].value/colors[].value fields. condition and sort are fixed, closed enums (listed below). Keyword search uses typo-tolerant relevance ranking, not a guaranteed exact match. A query with genuinely zero matches returns a well-formed empty result rather than an error.", - "operationId": "grailed-search", + "description": "Returns an Irish Times author's name, job title, biography, headshot, contact details, and recent articles from a canonical author URL.", + "operationId": "irishtimes-author", "parameters": [ { - "description": "Free-text search query", - "in": "query", - "name": "q", - "type": "string", - "x-example": "gucci" - }, - { - "description": "Designer/brand name filter, from grailed-designers' own designers[].name field", - "in": "query", - "name": "designer", - "type": "string", - "x-example": "Gucci" - }, - { - "description": "Department filter", - "enum": [ - "menswear", - "womenswear" - ], - "in": "query", - "name": "department", - "type": "string", - "x-example": "menswear" - }, - { - "description": "Category facet filter, from grailed-categories' own categories[].value field", - "in": "query", - "name": "category", - "type": "string", - "x-example": "tops" - }, - { - "description": "Size facet filter, from grailed-categories' own sizes[].value field", - "in": "query", - "name": "size", - "type": "string", - "x-example": "m" - }, - { - "description": "Color facet filter, from grailed-categories' own colors[].value field", - "in": "query", - "name": "color", - "type": "string", - "x-example": "black" - }, - { - "description": "Condition filter", - "enum": [ - "is_new", - "is_gently_used", - "is_used", - "is_worn", - "is_not_specified" - ], - "in": "query", - "name": "condition", - "type": "string", - "x-example": "is_gently_used" - }, - { - "description": "Minimum price (inclusive), in USD", - "in": "query", - "name": "min_price", - "type": "number", - "x-example": 50 - }, - { - "description": "Maximum price (inclusive), in USD", - "in": "query", - "name": "max_price", - "type": "number", - "x-example": 500 - }, - { - "description": "Sort order, defaults to heat", - "enum": [ - "heat", - "heat_recency", - "followers", - "newest", - "price_asc", - "price_desc", - "recently_updated", - "quality" - ], + "description": "Canonical Irish Times author URL", "in": "query", - "name": "sort", + "name": "url", + "required": true, "type": "string", - "x-example": "heat" - }, - { - "description": "One-based page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Results per page, defaults to 24, maximum 100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 24 + "x-example": "https://www.irishtimes.com/author/jane-doe/" } ], "produces": [ @@ -387859,7 +462238,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grailed.searchResponseDoc" + "$ref": "#/definitions/publicnews.irishtimesAuthorResponseDoc" } }, "400": { @@ -387868,8 +462247,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -387886,41 +462265,42 @@ "ApiKeyAuth": [] } ], - "summary": "Search or browse Grailed active listings", + "summary": "Get an Irish Times author profile", "tags": [ - "Grailed" + "Irish Times" ] } }, - "/grailed/seller": { + "/irishtimes/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a Grailed seller's public profile plus a page of their current active listings (Grailed's own \"shop\" view of a seller). username is the seller's Grailed username, from a listing's own seller.username field or grailed.com/{username}. Listings only ever contains that seller's ACTIVE listings; use grailed-sold-listings with a designer/query filter for a broader sales-history lookup, since sold listings are not filterable by seller through this endpoint. An unknown username returns a typed not-found error.", - "operationId": "grailed-seller", + "description": "Returns current Irish Times headlines for one section. `section` is required and takes one of 16 slugs such as `ireland`, `politics`, `your-money`, `life-style`, `motors` or `abroad`; other values return 400. Some listed articles are subscriber-only, and `irishtimes-article` returns a permission error for those.", + "operationId": "irishtimes-headlines", "parameters": [ { - "description": "Grailed username", + "description": "Irish Times section slug", + "enum": [ + "ireland", + "opinion", + "politics", + "business", + "your-money", + "world", + "sport", + "life-style", + "health", + "technology", + "culture", + "property", + "food", + "motors", + "history", + "abroad" + ], "in": "query", - "name": "username", + "name": "section", "required": true, "type": "string", - "x-example": "woodlandstepps" - }, - { - "description": "One-based page number for the seller's listings, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Listings per page, defaults to 24, maximum 100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 24 + "x-example": "ireland" } ], "produces": [ @@ -387930,7 +462310,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grailed.sellerResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -387939,11 +462319,37 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Irish Times section headlines", + "tags": [ + "Irish Times" + ] + } + }, + "/irishtimes/news": { + "get": { + "description": "Returns up to 100 current Irish Times top stories from its Irish news listing, with no parameters. Each item has its title, URL, summary, author, publication time and image where available.", + "operationId": "irishtimes-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -387963,34 +462369,57 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Grailed seller's profile and active listings", + "summary": "Get Irish Times top stories", "tags": [ - "Grailed" + "Irish Times" ] } }, - "/grailed/seller-reviews": { + "/irishtimes/sections": { "get": { - "consumes": [ + "description": "Lists the 16 Irish Times sections accepted by `irishtimes-headlines`: `ireland`, `opinion`, `politics`, `business`, `your-money`, `world`, `sport`, `life-style`, `health`, `technology`, `culture`, `property`, `food`, `motors`, `history` and `abroad`. Each entry has a `slug`, `name` and `url`.", + "operationId": "irishtimes-sections", + "produces": [ "application/json" ], - "description": "Returns a page of a Grailed seller's individual buyer feedback entries (rating, note, feedback tags, and the listing each review was left for) -- reputation detail grailed-seller does not carry (grailed-seller only exposes the aggregate rating_average/rating_count). username is the seller's Grailed username, from a listing's own seller.username field or grailed.com/{username}. An unknown username returns a typed not-found error.", - "operationId": "grailed-seller-reviews", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Irish Times sections", + "tags": [ + "Irish Times" + ] + } + }, + "/itchio/browse": { + "get": { + "description": "Follow paths from browse options or tag discovery. Supports all nine classifications and native filter/sort combinations with one-based pages. Returns the source order, project cards and native item count; an explicit empty page returns an empty array.", + "operationId": "itchio-browse", "parameters": [ { - "description": "Grailed username", + "description": "Relative native catalog path, such as /games/top-rated/tag-horror", "in": "query", - "name": "username", + "name": "path", "required": true, - "type": "string", - "x-example": "woodlandstepps" + "type": "string" }, { - "description": "One-based page number, defaults to 1", + "default": 1, + "description": "Native one-based page", "in": "query", + "minimum": 1, "name": "page", - "type": "integer", - "x-example": 1 + "type": "integer" } ], "produces": [ @@ -388000,7 +462429,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grailed.sellerReviewsResponseDoc" + "$ref": "#/definitions/itchio.ListingResponseDoc" } }, "400": { @@ -388009,18 +462438,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -388033,34 +462450,23 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Grailed seller's buyer feedback", + "summary": "Browse itch.io projects by native filter path", "tags": [ - "Grailed" + "itch.io" ] } }, - "/grailed/similar-listings": { + "/itchio/browse/options": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the listings Grailed's own product page recommends as \"similar\" to one listing -- the same related-items shelf shown on grailed.com's own listing-detail page. id is the listing's numeric id, from a search, sold-listings, or collection result's own id field. An id for a listing that does not exist (deleted, sold and removed, or never valid) returns a typed not-found error.", - "operationId": "grailed-similar-listings", + "description": "Returns all visible filter groups, source destination paths, five native sort choices, the current facet values and a tag-discovery reference. Tags form an open vocabulary; suggested tags are not an exhaustive list of creator tags. Follow returned paths to preserve the selected context.", + "operationId": "itchio-browse-options", "parameters": [ { - "description": "Listing id to find similar listings for", + "description": "Relative native catalog path, such as /games or /tools/newest", "in": "query", - "name": "id", + "name": "path", "required": true, - "type": "integer", - "x-example": 105379689 - }, - { - "description": "Results to return, defaults to 30, maximum 99", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 30 + "type": "string" } ], "produces": [ @@ -388070,7 +462476,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grailed.similarListingsResponseDoc" + "$ref": "#/definitions/itchio.BrowseOptionsResponseDoc" } }, "400": { @@ -388079,18 +462485,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -388103,119 +462497,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get listings similar to a Grailed listing", + "summary": "Discover itch.io catalog filters and sorts", "tags": [ - "Grailed" + "itch.io" ] } }, - "/grailed/sold-listings": { + "/itchio/catalogs/{classification}": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Grailed's SOLD-listing index -- a separate dataset from active listings, carrying each item's final sale price and sale date. Same filter shape as grailed-search (q, designer, department, category, size, color, condition), but min_price/max_price filter the SOLD price, not the original asking price. Useful for sale-price-history/comparable-sales lookups (e.g. \"what did this designer/category actually sell for recently\"). A query with genuinely zero matches returns a well-formed empty result rather than an error.", - "operationId": "grailed-sold-listings", + "description": "Reads public itch.io catalog metadata without account keys, purchases or creator administration.", + "operationId": "itchio-catalog", "parameters": [ { - "description": "Free-text search query", - "in": "query", - "name": "q", - "type": "string", - "x-example": "gucci" - }, - { - "description": "Designer/brand name filter, from grailed-designers' own designers[].name field", - "in": "query", - "name": "designer", - "type": "string", - "x-example": "Gucci" - }, - { - "description": "Department filter", - "enum": [ - "menswear", - "womenswear" - ], - "in": "query", - "name": "department", - "type": "string", - "x-example": "menswear" - }, - { - "description": "Category facet filter, from grailed-categories' own categories[].value field", - "in": "query", - "name": "category", - "type": "string", - "x-example": "footwear" - }, - { - "description": "Size facet filter, from grailed-categories' own sizes[].value field", - "in": "query", - "name": "size", - "type": "string", - "x-example": "9" - }, - { - "description": "Color facet filter, from grailed-categories' own colors[].value field", - "in": "query", - "name": "color", - "type": "string", - "x-example": "white" - }, - { - "description": "Condition filter", - "enum": [ - "is_new", - "is_gently_used", - "is_used", - "is_worn", - "is_not_specified" - ], - "in": "query", - "name": "condition", - "type": "string", - "x-example": "is_used" - }, - { - "description": "Minimum SOLD price (inclusive), in USD", - "in": "query", - "name": "min_price", - "type": "number", - "x-example": 100 - }, - { - "description": "Maximum SOLD price (inclusive), in USD", - "in": "query", - "name": "max_price", - "type": "number", - "x-example": 500 - }, - { - "description": "Sort order, defaults to recent", + "description": "Website catalog context", "enum": [ - "recent", - "price_asc", - "price_desc" + "games", + "tools", + "game-assets", + "comics", + "books", + "physical-games", + "soundtracks", + "game-mods", + "misc" ], - "in": "query", - "name": "sort", - "type": "string", - "x-example": "recent" - }, - { - "description": "One-based page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Results per page, defaults to 24, maximum 100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 24 + "in": "path", + "name": "classification", + "required": true, + "type": "string" } ], "produces": [ @@ -388225,7 +462534,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grailed.soldListingsResponseDoc" + "$ref": "#/definitions/itchio.ListingResponseDoc" } }, "400": { @@ -388234,12 +462543,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -388252,27 +462555,23 @@ "ApiKeyAuth": [] } ], - "summary": "Search Grailed sold listings (sale price history)", + "summary": "Get a native itch.io classification index", "tags": [ - "Grailed" + "itch.io" ] } }, - "/grailed/suggest": { + "/itchio/games/top-rated": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Grailed's own search-box typeahead suggestions for a partial query -- a flat list of suggested search phrases with a popularity score and live active-listing match count, no listing data. Pass a suggestion straight through to grailed-search/grailed-sold-listings' own q parameter. A query with no genuine matches returns a well-formed empty result rather than an error.", - "operationId": "grailed-suggest", + "description": "Reads public itch.io catalog metadata without account keys, purchases or creator administration.", + "operationId": "itchio-top-rated", "parameters": [ { - "description": "Partial search query", + "default": 1, + "description": "Native one-based page", "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "guc" + "name": "page", + "type": "integer" } ], "produces": [ @@ -388282,7 +462581,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grailed.suggestResponseDoc" + "$ref": "#/definitions/itchio.ListingResponseDoc" } }, "400": { @@ -388291,12 +462590,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -388309,51 +462602,31 @@ "ApiKeyAuth": [] } ], - "summary": "Grailed search-box typeahead suggestions", + "summary": "Get a native top-rated games page", "tags": [ - "Grailed" + "itch.io" ] } }, - "/greystar/articles": { + "/itchio/jams/browse": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists Greystar's renter guides (applying and leasing, general guides, moving) and blog posts from its public sitemap, newest first. Entries carry the section, slug, URL and last-modified date; fetch /greystar/articles/{section}/{slug} for the title and body.", - "operationId": "greystar-articles", + "description": "Follows native timing/voting/featured/participation filters and context-specific sorts. Preserves source cards, host links, dates, display counts, result links, ordering and page links. Explicit empty pages return an empty array. The /jams landing grid supports page1 only and has no pagination field.", + "operationId": "itchio-jams-browse", "parameters": [ { - "description": "Content section", - "enum": [ - "applying-and-leasing", - "general-guides", - "moving", - "blog" - ], - "in": "query", - "name": "section", - "type": "string" - }, - { - "description": "Text matched against the slug", + "default": "/jams/upcoming", + "description": "Native relative path from jam options", "in": "query", - "name": "query", + "name": "path", "type": "string" }, { "default": 1, - "description": "1-based page", + "description": "One-based native page", "in": "query", + "minimum": 1, "name": "page", "type": "integer" - }, - { - "default": 50, - "description": "Entries per page, 1-100", - "in": "query", - "name": "per_page", - "type": "integer" } ], "produces": [ @@ -388363,7 +462636,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/greystar.ContentList" + "$ref": "#/definitions/itchio.JamListingResponseDoc" } }, "400": { @@ -388372,12 +462645,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -388390,43 +462657,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Greystar renter guides and blog posts", + "summary": "Browse itch.io game jams", "tags": [ - "Greystar" + "itch.io" ] } }, - "/greystar/articles/{section}/{slug}": { + "/itchio/jams/calendar": { "get": { - "consumes": [ - "application/json" - ], - "description": "Retrieves one Greystar renter guide or blog post: title, description, category, publish date (blog posts), lead image, and the body as ordered heading, paragraph, and list blocks. Get section and slug values from /greystar/articles.", - "operationId": "greystar-article", - "parameters": [ - { - "description": "Content section", - "enum": [ - "applying-and-leasing", - "general-guides", - "moving", - "blog" - ], - "in": "path", - "name": "section", - "required": true, - "type": "string", - "x-example": "blog" - }, - { - "description": "Article slug from /greystar/articles", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "the-best-plants-for-apartment-living" - } - ], + "description": "Returns every jam in the public calendar payload, preserving source IDs, relative detail URLs, dates, joined counts, hue and optional featured/highlight values. Dates remain source strings. The calendar is a source-selected window, not an exhaustive archive. Participant, duration and featured UI filters operate locally and are not server query parameters.", + "operationId": "itchio-jam-calendar", "produces": [ "application/json" ], @@ -388434,7 +462674,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/greystar.Article" + "$ref": "#/definitions/itchio.JamCalendarResponseDoc" } }, "400": { @@ -388443,18 +462683,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -388467,38 +462695,22 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Greystar renter guide or blog post", + "summary": "Get itch.io game-jam calendar", "tags": [ - "Greystar" + "itch.io" ] } }, - "/greystar/location": { + "/itchio/jams/entries": { "get": { - "consumes": [ - "application/json" - ], - "description": "Retrieves one Greystar state, city, or neighborhood rental hub: title, description, editorial guide text as ordered blocks, child locations with summaries, communities listed on the page (id, name, address, and price text when shown), and FAQs. State, city, and neighborhood slugs must come from /greystar/locations; unknown values return 400.", - "operationId": "greystar-location", + "description": "Resolves the current native submissions JSON URL from the public jam page and returns its full published document. Preserves source ordering, entry and project ID namespaces, generated_on, zero counts, contributor credits and optional project metadata. The upstream UI filters, sorts and paginates this document locally; this endpoint accepts no server-side filter, sort or page parameters. Account, rating and custom private submission data are excluded.", + "operationId": "itchio-jams-entries", "parameters": [ { - "description": "State slug from /greystar/locations, e.g. tx", - "in": "query", - "name": "state", - "required": true, - "type": "string", - "x-example": "tx" - }, - { - "description": "City slug from /greystar/locations", - "in": "query", - "name": "city", - "type": "string" - }, - { - "description": "Neighborhood slug from /greystar/locations; requires city", + "description": "Native relative /jam/slug/entries path linked by a public jam", "in": "query", - "name": "neighborhood", + "name": "path", + "required": true, "type": "string" } ], @@ -388509,7 +462721,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/greystar.LocationDetail" + "$ref": "#/definitions/itchio.JamEntriesResponseDoc" } }, "400": { @@ -388524,12 +462736,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -388542,56 +462748,23 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Greystar rental hub page", + "summary": "Read itch.io game-jam submissions", "tags": [ - "Greystar" + "itch.io" ] } }, - "/greystar/locations": { + "/itchio/jams/options": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists Greystar's state, city, and neighborhood rental hub pages (the site's own location tree) with slugs and URLs. Use the slugs with /greystar/location for a hub's editorial content, child locations, listed communities, and FAQs.", - "operationId": "greystar-locations", + "description": "Returns every visible filter-group value, selected choice, clear-filter path and contextual sort. At /jams returns native landing-page browse links. Follow returned paths without guessing parameter translations. Account, hosting, joining and rating operations are excluded.", + "operationId": "itchio-jams-options", "parameters": [ { - "description": "Hub level", - "enum": [ - "state", - "city", - "neighborhood" - ], - "in": "query", - "name": "level", - "type": "string" - }, - { - "description": "State slug from this list, e.g. tx", - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "City slug from this list; requires state", + "default": "/jams/upcoming", + "description": "Native relative jam destination", "in": "query", - "name": "city", + "name": "path", "type": "string" - }, - { - "default": 1, - "description": "1-based page", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "default": 100, - "description": "Entries per page, 1-200", - "in": "query", - "name": "per_page", - "type": "integer" } ], "produces": [ @@ -388601,7 +462774,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/greystar.LocationList" + "$ref": "#/definitions/itchio.JamBrowseOptionsResponseDoc" } }, "400": { @@ -388610,12 +462783,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -388628,19 +462795,25 @@ "ApiKeyAuth": [] } ], - "summary": "List Greystar rental hub locations", + "summary": "Discover itch.io game-jam filters and sorts", "tags": [ - "Greystar" + "itch.io" ] } }, - "/greystar/markets": { + "/itchio/jams/overview": { "get": { - "consumes": [ - "application/json" + "description": "Returns the jam's native identity, date strings, optional voting deadline, hosting credits/links, description text, status text, banner, display statistics and navigation. Preserves upcoming, active, voting and finished page metadata without computing a phase or countdown. Account and participation actions are excluded.", + "operationId": "itchio-jams-overview", + "parameters": [ + { + "description": "Native relative /jam/slug destination from jam browse", + "in": "query", + "name": "path", + "required": true, + "type": "string" + } ], - "description": "Returns every value accepted by the /greystar/search market_area, neighborhood, city, state, and country_code filters, each with the number of communities currently published. Derived from the full live community list, so it is the complete value space.", - "operationId": "greystar-markets", "produces": [ "application/json" ], @@ -388648,11 +462821,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/greystar.Markets" + "$ref": "#/definitions/itchio.JamOverviewResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -388669,39 +462848,31 @@ "ApiKeyAuth": [] } ], - "summary": "List Greystar markets, neighborhoods, cities, and states", + "summary": "Read itch.io game-jam overview", "tags": [ - "Greystar" + "itch.io" ] } }, - "/greystar/newsroom": { + "/itchio/jams/results": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists Greystar corporate newsroom releases and news articles from its public sitemap, newest first, with slug, URL and last-modified date. Fetch /greystar/newsroom/{slug} for the title, date, and body.", - "operationId": "greystar-newsroom", + "description": "Reads a published per-criterion ranking page. Criteria must belong to the selected jam's live discovery menu. Preserves native ties, rank text, adjusted/raw score strings (including n/a), creator credits, submission links and relative pagination. No derived rankings or account actions.", + "operationId": "itchio-jams-results", "parameters": [ { - "description": "Text matched against the slug", + "description": "Relative result destination from jam results options", "in": "query", - "name": "query", + "name": "path", + "required": true, "type": "string" }, { "default": 1, - "description": "1-based page", + "description": "One-based native page", "in": "query", + "minimum": 1, "name": "page", "type": "integer" - }, - { - "default": 50, - "description": "Entries per page, 1-100", - "in": "query", - "name": "per_page", - "type": "integer" } ], "produces": [ @@ -388711,7 +462882,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/greystar.ContentList" + "$ref": "#/definitions/itchio.JamResultsResponseDoc" } }, "400": { @@ -388720,8 +462891,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -388738,27 +462909,23 @@ "ApiKeyAuth": [] } ], - "summary": "List Greystar newsroom releases", + "summary": "Read itch.io game-jam results", "tags": [ - "Greystar" + "itch.io" ] } }, - "/greystar/newsroom/{slug}": { + "/itchio/jams/results/options": { "get": { - "consumes": [ - "application/json" - ], - "description": "Retrieves one Greystar newsroom release: title, type (for example Press Release), publish date, lead image, and body paragraphs. Older news stubs carry only a title and date, so the body can be empty. Get slugs from /greystar/newsroom.", - "operationId": "greystar-newsroom-article", + "description": "Returns every visible criterion label and native results path for one jam, including the default/primary selection. Criteria are host-defined and may include manual rankings or Overall. Use a root /jam/slug/results path linked from jam browse. Hidden or unpublished results are unavailable.", + "operationId": "itchio-jams-results-options", "parameters": [ { - "description": "Newsroom slug from /greystar/newsroom", - "in": "path", - "name": "slug", + "description": "Root relative /jam/slug/results destination", + "in": "query", + "name": "path", "required": true, - "type": "string", - "x-example": "kenzie-tolbert-rising-star" + "type": "string" } ], "produces": [ @@ -388768,7 +462935,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/greystar.Article" + "$ref": "#/definitions/itchio.JamResultsOptionsResponseDoc" } }, "400": { @@ -388783,12 +462950,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -388801,27 +462962,23 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Greystar newsroom release", + "summary": "Discover itch.io game-jam ranking criteria", "tags": [ - "Greystar" + "itch.io" ] } }, - "/greystar/properties/{id}": { + "/itchio/jams/submission": { "get": { - "consumes": [ - "application/json" - ], - "description": "Retrieves a public Greystar community profile by its numeric property id: location, description, amenities, office hours, walk scores, tours, floor plans, published fees, and currently available units with starting prices and available dates. Get ids from /greystar/search.", - "operationId": "greystar-property", + "description": "Returns the public submission's project/jam identity, title, summary, submitter credits and published per-criterion rank/score/raw-score strings. Preserves n/a manual scores and source ordering. results_available:false means the anonymous page provides no published score table; it does not assert that private or future results do not exist. Individual votes, comments, arbitrary custom answers, judge feedback and account actions are excluded.", + "operationId": "itchio-jams-submission", "parameters": [ { - "description": "Numeric Greystar property id, e.g. 10124", - "in": "path", - "name": "id", + "description": "Native relative /jam/slug/rate/project-id link from entries or results", + "in": "query", + "name": "path", "required": true, - "type": "string", - "x-example": "10124" + "type": "string" } ], "produces": [ @@ -388831,7 +462988,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/greystar.PropertyDetails" + "$ref": "#/definitions/itchio.JamSubmissionResponseDoc" } }, "400": { @@ -388846,12 +463003,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -388864,94 +463015,23 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Greystar apartment community", + "summary": "Read itch.io jam submission metadata and scores", "tags": [ - "Greystar" + "itch.io" ] } }, - "/greystar/search": { + "/itchio/project": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists Greystar communities published on greystar.com, optionally filtered by market area, neighborhood, city, state, country, starting rent, or free text. Filter values must come from /greystar/markets; an unknown value returns 400. Starting prices reflect each community's published minimum and are null when none is published. Results come from an hourly snapshot of every community listed on greystar.com; the default order follows the site.", - "operationId": "greystar-search", + "description": "Returns source project ID, title, summary, project description, cover URL and every available More information row/link. Uses public HTTPS creator.itch.io project pages only; source schema metadata provides title fallback. Download instructions, community text, credentials and account/purchase/download requests are excluded.", + "operationId": "itchio-project", "parameters": [ { - "description": "Free-text match on name, address, city, neighborhood, market area, or postal code (max 160 characters)", - "in": "query", - "name": "query", - "type": "string" - }, - { - "description": "Exact market area from /greystar/markets, e.g. Greater Austin", - "in": "query", - "name": "market_area", - "type": "string" - }, - { - "description": "Exact neighborhood from /greystar/markets", - "in": "query", - "name": "neighborhood", - "type": "string" - }, - { - "description": "Exact city from /greystar/markets", - "in": "query", - "name": "city", - "type": "string" - }, - { - "description": "State or region abbreviation from /greystar/markets, e.g. TX", - "in": "query", - "name": "state", - "type": "string" - }, - { - "description": "ISO country code from /greystar/markets, e.g. US", - "in": "query", - "name": "country_code", - "type": "string" - }, - { - "description": "Minimum starting monthly rent; excludes communities with no published price", - "in": "query", - "name": "min_price", - "type": "number" - }, - { - "description": "Maximum starting monthly rent; excludes communities with no published price", - "in": "query", - "name": "max_price", - "type": "number" - }, - { - "default": "relevance", - "description": "Result order; relevance keeps the site's own order", - "enum": [ - "relevance", - "name", - "price_asc", - "price_desc" - ], + "description": "Public HTTPS creator.itch.io/project URL without query or fragment", "in": "query", - "name": "sort", + "name": "url", + "required": true, "type": "string" - }, - { - "default": 1, - "description": "1-based page", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "default": 20, - "description": "Results per page, 1-100", - "in": "query", - "name": "per_page", - "type": "integer" } ], "produces": [ @@ -388961,7 +463041,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/greystar.SearchResult" + "$ref": "#/definitions/itchio.ProjectResponseDoc" } }, "400": { @@ -388970,8 +463050,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -388988,24 +463068,33 @@ "ApiKeyAuth": [] } ], - "summary": "Search Greystar apartment communities", + "summary": "Get itch.io public project details", "tags": [ - "Greystar" + "itch.io" ] } }, - "/greystar/unit-locations": { + "/itchio/tags/{classification}": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists every location accepted by /greystar/units: the nationwide us listing, states, metros, cities, and neighborhoods (nested ones carry their parent), taken from the site's own search pages. Locations Greystar has no unit listing for are dropped once detected.", - "operationId": "greystar-unit-locations", + "description": "Reads public itch.io catalog metadata without account keys, purchases or creator administration.", + "operationId": "itchio-tags", "parameters": [ { - "description": "Text matched against the location slug, e.g. austin", - "in": "query", - "name": "query", + "description": "Website catalog context", + "enum": [ + "games", + "tools", + "game-assets", + "comics", + "books", + "physical-games", + "soundtracks", + "game-mods", + "misc" + ], + "in": "path", + "name": "classification", + "required": true, "type": "string" } ], @@ -389016,7 +463105,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/greystar.UnitLocationList" + "$ref": "#/definitions/itchio.TagsResponseDoc" } }, "400": { @@ -389025,12 +463114,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -389043,143 +463126,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Greystar unit search locations", + "summary": "Get native itch.io picker options", "tags": [ - "Greystar" + "itch.io" ] } }, - "/greystar/units": { + "/japantimes/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches apartment units currently available to rent on greystar.com within one location (nationwide by default), filtered by bedrooms, bathrooms, building type, community highlights, and monthly price, sorted by relevance or price. Results are grouped by community: each carries its address, coordinates, the number of matching units, and up to about 100 units with unit number, floor plan, bedrooms, bathrooms, price range, and lease term. The response also returns filter counts for the location. Several values of one filter match any of them. Get location values from /greystar/unit-locations.", - "operationId": "greystar-units", + "description": "Returns public article metadata. If the page marks its body as blurred for anonymous visitors, paywalled is true and hidden subscriber text is omitted.", + "operationId": "japantimes-article", "parameters": [ { - "default": "us", - "description": "Search location slug from /greystar/unit-locations, e.g. austin-tx, texas or greater-austin/round-rock", - "in": "query", - "name": "location", - "type": "string" - }, - { - "collectionFormat": "multi", - "description": "Bedroom count; repeat for several (0 is studio)", - "in": "query", - "items": { - "enum": [ - "0", - "1", - "2", - "3", - "4", - "5", - "6" - ], - "type": "string" - }, - "name": "bedrooms", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Bathroom count; repeat for several", - "in": "query", - "items": { - "enum": [ - "0", - "1", - "2", - "3", - "4" - ], - "type": "string" - }, - "name": "bathrooms", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Building type; repeat for several", - "in": "query", - "items": { - "enum": [ - "Active Adult", - "Garden", - "High-Rise", - "Mid-Rise", - "Single Family Home", - "Student", - "Townhome" - ], - "type": "string" - }, - "name": "building_type", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Community highlight; repeat for several (matches any)", - "in": "query", - "items": { - "enum": [ - "airCon", - "dishwasher", - "eco", - "fitness", - "garages", - "limitedAccess", - "patioBalcony", - "pets", - "playground", - "pools", - "smokeFree", - "walkInClosets", - "washerDryer" - ], - "type": "string" - }, - "name": "highlights", - "type": "array" - }, - { - "description": "Minimum monthly unit price", - "in": "query", - "name": "min_price", - "type": "number" - }, - { - "description": "Maximum monthly unit price", - "in": "query", - "name": "max_price", - "type": "number" - }, - { - "default": "relevance", - "description": "Result order", - "enum": [ - "relevance", - "price_asc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "default": 1, - "description": "1-based page", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "default": 20, - "description": "Communities per page, 1-100", + "description": "Canonical HTTPS The Japan Times article URL", "in": "query", - "name": "per_page", - "type": "integer" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.japantimes.co.jp/news/2026/09/28/japan/explainer/etc-explainer/" } ], "produces": [ @@ -389189,7 +463153,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/greystar.UnitSearchResult" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -389204,12 +463168,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -389222,43 +463180,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search available Greystar apartment units", + "summary": "Get a The Japan Times article", "tags": [ - "Greystar" + "The Japan Times" ] } }, - "/grubhub/availability": { + "/japantimes/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns current ordering state for up to 20 restaurants in one call, relative to a diner location. Each entry reports whether the restaurant is open overall and per channel (these can differ), whether delivery and pickup are offered at all as distinct from open right now, whether it delivers to the supplied coordinate, blackout and overloaded flags, distance, delivery and pickup time estimates, delivery fee, order minimum, cuisines, and the next time an order can be sent per channel -- useful when a restaurant is currently closed. The response echoes the requested ids so a caller can tell which ones Grubhub returned nothing for.", - "operationId": "grubhub-availability", + "description": "Returns a The Japan Times author's name and the article cards linked from their profile page. `url` is required and must be a canonical HTTPS profile link in the form `/author///`. Each article has a title, URL, summary, author, image, `type` and publication time. Paginated `/page//` URLs are not followed.", + "operationId": "japantimes-author", "parameters": [ { - "description": "Comma-separated Grubhub restaurant ids, up to 20", + "description": "Canonical HTTPS /author/// profile URL", "in": "query", - "name": "restaurant_ids", + "name": "url", "required": true, "type": "string", - "x-example": "6238960,14344720" - }, - { - "description": "Diner location latitude -- availability is relative to it", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 40.7128 - }, - { - "description": "Diner location longitude", - "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -74.006 + "x-example": "https://www.japantimes.co.jp/author/162/kanako-takahara/" } ], "produces": [ @@ -389268,7 +463207,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grubhub.availabilityResponseDoc" + "$ref": "#/definitions/publicnews.japantimesAuthorResponseDoc" } }, "400": { @@ -389283,12 +463222,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -389301,43 +463234,86 @@ "ApiKeyAuth": [] } ], - "summary": "Check ordering availability for a batch of Grubhub restaurants", + "summary": "Get a The Japan Times author profile", "tags": [ - "Grubhub" + "The Japan Times" ] } }, - "/grubhub/offers": { + "/japantimes/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the promotional offers a Grubhub restaurant is currently running -- free items, BOGO deals, spend-and-save discounts -- the same data that drives the \"2 offers available\" badge on the site's own restaurant cards. An empty list is the common, legitimate case: most restaurants have no active promotion at any given moment. `amount.value` is 0 for a free-item offer since the item itself is the value, not a monetary discount; `amount.amount_maximum` then caps the item's dollar value, and `amount.order_minimum` is the spend threshold required to unlock it.", - "operationId": "grubhub-offers", + "description": "Returns public article cards from one canonical section page. This site's section pages are HTML; only the top stories surface has a verified RSS feed.", + "operationId": "japantimes-headlines", "parameters": [ { - "description": "Grubhub restaurant id", + "description": "Canonical section slug from japantimes-sections", + "enum": [ + "news-japan", + "news-japan-politics", + "news-japan-society", + "news-japan-crime-legal", + "news-japan-science-health", + "news-japan-explainer", + "news-japan-history", + "news-world", + "news-world-politics", + "news-world-crime-legal", + "news-world-science-health", + "news-world-society", + "news-asia-pacific", + "news-asia-pacific-politics", + "news-asia-pacific-crime-legal", + "news-asia-pacific-science-health", + "news-asia-pacific-society", + "business", + "business-companies", + "business-economy", + "business-markets", + "business-tech", + "sports", + "sports-sumo", + "sports-soccer", + "sports-baseball", + "sports-basketball", + "sports-tennis", + "sports-olympics", + "sports-more-sports", + "opinion", + "opinion-editorials", + "opinion-commentary", + "tag-geoeconomic-briefing", + "environment", + "environment-climate-change", + "environment-energy", + "environment-sustainability", + "environment-wildlife", + "environment-earth-science", + "life", + "life-travel", + "life-digital", + "life-food-drink", + "life-style-design", + "life-language", + "life-lifestyle", + "culture", + "culture-film", + "culture-books", + "culture-music", + "culture-art", + "culture-tv-streaming", + "culture-stage", + "culture-entertainment-news", + "community", + "community-voices", + "community-issues", + "community-how-tos", + "community-our-lives" + ], "in": "query", - "name": "restaurant_id", + "name": "section", "required": true, "type": "string", - "x-example": "1338141" - }, - { - "description": "Diner location latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 40.7128 - }, - { - "description": "Diner location longitude", - "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -74.006 + "x-example": "news-japan" } ], "produces": [ @@ -389347,7 +463323,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grubhub.offersResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -389356,16 +463332,36 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } - }, - "429": { - "description": "Too Many Requests", + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The Japan Times section headlines", + "tags": [ + "The Japan Times" + ] + } + }, + "/japantimes/news": { + "get": { + "description": "Returns the current top stories from The Japan Times. It takes no parameters. Each item has its title, URL, publication time and a short publisher-written teaser in `summary`, not the article text, plus the author and image when the outlet provides them.", + "operationId": "japantimes-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -389380,27 +463376,63 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Grubhub restaurant's currently active promotions", + "summary": "Get The Japan Times top stories", "tags": [ - "Grubhub" + "The Japan Times" ] } }, - "/grubhub/restaurant": { + "/japantimes/sections": { + "get": { + "description": "Lists the 60 sections linked from The Japan Times main navigation, which the headlines endpoint accepts, for example `news-japan`, `business-markets`, `sports-sumo`, `culture-film` and `community-voices`. Each entry has a `slug`, a display `name` and a section `url`.", + "operationId": "japantimes-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The Japan Times sections", + "tags": [ + "The Japan Times" + ] + } + }, + "/jcrew/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Grubhub restaurant: name, address with coordinates, timezone, phone, cuisines, star rating, price tier, whether online ordering is available, whether it offers delivery and pickup, delivery fee, coupon availability, restaurant tags and the full published week of service hours. Note this endpoint publishes fewer economics than GET /grubhub/search -- delivery minimum and the delivery/pickup time estimates come back empty here, so use the search endpoint when you need those.", - "operationId": "grubhub-restaurant", + "description": "Lists every category and subcategory from the storefront's own header navigation, flattened into department/section/category triples -- resolves the category-discovery gap jcrew-category's own category parameter otherwise leaves as \"find one from a storefront URL\". Each entry's category value is exactly what jcrew-category's own category parameter accepts. Filter to one department with department (e.g. women, men); omit for every department. Departments vary slightly by site (jcrew.com has an extra \"home\" department factory.jcrew.com doesn't) -- see the response's own departments field for the live list.", + "operationId": "jcrew-categories", "parameters": [ { - "description": "Grubhub's numeric restaurant id, from /grubhub/search", + "default": "jcrew", + "description": "Storefront to list", + "enum": [ + "jcrew", + "factory" + ], "in": "query", - "name": "restaurant_id", - "required": true, + "name": "site", + "type": "string" + }, + { + "description": "Department to filter to, e.g. women, men, boys, girls, accessories, shoes, home (jcrew only) -- omit for every department", + "in": "query", + "name": "department", "type": "string", - "x-example": "6238960" + "x-example": "women" } ], "produces": [ @@ -389410,7 +463442,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grubhub.restaurantResponseDoc" + "$ref": "#/definitions/jcrew.categoriesResponseDoc" } }, "400": { @@ -389419,12 +463451,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -389443,34 +463469,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Grubhub restaurant's detail", + "summary": "List J.Crew or J.Crew Factory categories", "tags": [ - "Grubhub" + "J.Crew" ] } }, - "/grubhub/restaurant/menu": { + "/jcrew/category": { "get": { "consumes": [ "application/json" ], - "description": "Returns one restaurant's full menu grouped into categories. Every item carries a base price, a delivery price and a pickup price, which genuinely differ, plus a min and max price bounding items whose price varies with the options chosen. Items also carry a description, a popularity flag, availability, tags and an image. Amounts are given both in minor units (cents) and as a decimal value.", - "operationId": "grubhub-restaurant-menu", + "description": "Returns one page (up to 60 products) of a category/browse listing for a category path. category is the slash-separated path segment after the storefront's own /plp/ (e.g. womens/categories/clothing/sweaters) -- use jcrew-categories to discover every valid value instead of guessing from storefront URLs. site selects the storefront (default jcrew). page selects the SFCC-native page (default 1); result_count reports the upstream's true total regardless of page size. A hub-level (non-leaf) category path returns a well-formed empty result rather than an error.", + "operationId": "jcrew-category", "parameters": [ { - "description": "Grubhub's numeric restaurant id, from /grubhub/search", + "description": "Slash-separated category path -- see jcrew-categories", "in": "query", - "name": "restaurant_id", + "name": "category", "required": true, "type": "string", - "x-example": "6238960" + "x-example": "womens/categories/clothing/sweaters" }, { - "description": "Include items the restaurant currently has unavailable (default false)", + "default": "jcrew", + "description": "Storefront to browse", + "enum": [ + "jcrew", + "factory" + ], "in": "query", - "name": "include_unavailable", - "type": "boolean", - "x-example": true + "name": "site", + "type": "string" + }, + { + "default": 1, + "description": "One-based page", + "in": "query", + "maximum": 50, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -389480,7 +463519,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grubhub.menuResponseDoc" + "$ref": "#/definitions/jcrew.categoryResponseDoc" } }, "400": { @@ -389513,52 +463552,38 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Grubhub restaurant's menu with prices", + "summary": "Browse a J.Crew or J.Crew Factory category", "tags": [ - "Grubhub" + "J.Crew" ] } }, - "/grubhub/restaurant/reviews": { + "/jcrew/product": { "get": { "consumes": [ "application/json" ], - "description": "Returns one restaurant's customer reviews plus its 1-5 star rating histogram. Each review carries the star rating, the written body, the reviewer's display name and how many reviews they have written, the review date, Grubhub's own sentiment classification, the diner type, and the specific menu items the review is attached to -- Grubhub ties each review to what the diner actually ordered. sort accepts `timeCreated_desc` (most recent, the default) and `ratingValue_desc` (highest rated). Note the written-review corpus and the headline rating shown in search are separate systems upstream, so a restaurant can report a large rating count in search while returning few or no written reviews here.", - "operationId": "grubhub-restaurant-reviews", + "description": "Returns full product detail for one style: name, brand, description, category, list price, aggregate rating, every purchasable color, and every color+size combination as a separate priced/stocked SKU. pid is a style id (e.g. CX415), as returned by jcrew-search's products[].id field. site must match the storefront the pid belongs to (default jcrew). A single call covers every color and size of the style -- no per-color lookup needed.", + "operationId": "jcrew-product", "parameters": [ { - "description": "Grubhub's numeric restaurant id, from /grubhub/search", + "description": "Style id, from a search result's id field", "in": "query", - "name": "restaurant_id", + "name": "pid", "required": true, "type": "string", - "x-example": "6238960" - }, - { - "description": "Reviews per page, 1-50 (default 20)", - "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 20 - }, - { - "description": "1-based page number (default 1)", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "CX415" }, { - "description": "One of timeCreated_desc, ratingValue_desc. Default timeCreated_desc.", + "default": "jcrew", + "description": "Storefront the pid belongs to", "enum": [ - "timeCreated_desc", - "ratingValue_desc" + "jcrew", + "factory" ], "in": "query", - "name": "sort", - "type": "string", - "x-example": "timeCreated_desc" + "name": "site", + "type": "string" } ], "produces": [ @@ -389568,7 +463593,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grubhub.reviewsResponseDoc" + "$ref": "#/definitions/jcrew.productResponseDoc" } }, "400": { @@ -389601,67 +463626,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Grubhub restaurant's reviews and rating histogram", + "summary": "Get a J.Crew or J.Crew Factory product", "tags": [ - "Grubhub" + "J.Crew" ] } }, - "/grubhub/search": { + "/jcrew/product/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns restaurants delivering to (or offering pickup at) a latitude/longitude, optionally filtered by keyword over restaurant names, cuisines and dishes. Each restaurant carries its id (the value every other Grubhub endpoint takes), name, full address with coordinates, phone, cuisines, star rating and rating count, Grubhub's 1-4 price tier, distance, open state, delivery and pickup fees and minimums, service fee, delivery and pickup time estimates, coupon availability and total menu item count. A location Grubhub does not serve returns an empty list rather than an error.", - "operationId": "grubhub-search", + "description": "Returns one page of a product's customer reviews (author, location, date, rating, headline, body, and verified-purchase flag), plus the product's overall rating summary (average rating, rating count, per-star histogram, and recommended ratio). pid is a style id (e.g. CX415), as returned by jcrew-search's products[].id field. site must match the storefront the pid belongs to (default jcrew). A product with no reviews yet, or a well-formed but unrecognized pid, returns a well-formed empty result, not an error.", + "operationId": "jcrew-product-reviews", "parameters": [ { - "description": "Search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 40.7128 - }, - { - "description": "Search center longitude", + "description": "Style id, from a search result's id field", "in": "query", - "name": "longitude", + "name": "pid", "required": true, - "type": "number", - "x-example": -74.006 - }, - { - "description": "Keyword over restaurant names, cuisines and dishes", - "in": "query", - "name": "search", "type": "string", - "x-example": "pizza" + "x-example": "CX415" }, { - "description": "One of delivery, pickup. Default delivery.", + "default": "jcrew", + "description": "Storefront the pid belongs to", "enum": [ - "delivery", - "pickup" + "jcrew", + "factory" ], "in": "query", - "name": "order_method", - "type": "string", - "x-example": "delivery" - }, - { - "description": "Restaurants per page, 1-50 (default 20)", - "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 20 + "name": "site", + "type": "string" }, { - "description": "1-based page number (default 1)", + "default": 1, + "description": "One-based page, 10 reviews per page", "in": "query", + "maximum": 1000, + "minimum": 1, "name": "page", - "type": "integer", - "x-example": 1 + "type": "integer" } ], "produces": [ @@ -389671,7 +463676,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grubhub.searchResponseDoc" + "$ref": "#/definitions/jcrew.productReviewsResponseDoc" } }, "400": { @@ -389680,12 +463685,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -389704,62 +463703,75 @@ "ApiKeyAuth": [] } ], - "summary": "Search Grubhub restaurants near a location", + "summary": "Get reviews for a J.Crew or J.Crew Factory product", "tags": [ - "Grubhub" + "J.Crew" ] } }, - "/grubhub/timepicker": { + "/jcrew/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns every future delivery or pickup time slot Grubhub will accept an order for, up to 7 days ahead. This is what powers the site's own \"schedule my order\" picker: `/grubhub/availability` tells you whether a restaurant is orderable right now plus one \"next\" time, while this returns the full future slot calendar a caller would need to build an actual date-and-time picker. Slots are grouped by date and given as full timestamps carrying the restaurant's real UTC offset for that instant, so a caller never has to resolve daylight-saving transitions themselves. Requesting `location_mode=DELIVERY` returns delivery slots only; `PICKUP` returns pickup slots only -- the upstream only computes one side per call.", - "operationId": "grubhub-timepicker", + "description": "Searches the product catalog for either storefront (select with site, default jcrew). Returns product summaries with USD pricing, gender, and a description, plus the search index's own facets (gender, fabric, category, size, color, price range, and others) with live per-option counts. sort selects relevance (default), price_asc, or price_desc. filter narrows results by one or more facet name:value pairs (comma-separated, e.g. productGender:Men,styleFabric:Cashmere) taken from a prior response's own facets[].name/facets[].options[].value fields -- not curated against a fixed list, since the facet set is large and can change. This is best-effort relevance, not a guaranteed keyword match: for an obscure alphanumeric keyword the search index falls back to its own semantically-related results instead of an empty list, and there is no reliable field in the response to distinguish a true keyword match from that fallback.", + "operationId": "jcrew-search", "parameters": [ { - "description": "Grubhub restaurant id", + "description": "Search keyword", "in": "query", - "name": "restaurant_id", + "name": "keyword", "required": true, "type": "string", - "x-example": "698307" + "x-example": "sweater" }, { - "description": "Diner location latitude", + "default": "jcrew", + "description": "Storefront to search", + "enum": [ + "jcrew", + "factory" + ], "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 40.7128 + "name": "site", + "type": "string" }, { - "description": "Diner location longitude", + "default": 1, + "description": "One-based page", "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -74.006 + "maximum": 500, + "minimum": 1, + "name": "page", + "type": "integer" }, { - "description": "Which slot grid to return", + "default": 24, + "description": "Results per page", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "per_page", + "type": "integer" + }, + { + "default": "relevance", + "description": "Sort order", "enum": [ - "DELIVERY", - "PICKUP" + "relevance", + "price_asc", + "price_desc" ], "in": "query", - "name": "location_mode", - "required": true, - "type": "string", - "x-example": "DELIVERY" + "name": "sort", + "type": "string" }, { - "description": "How many days ahead to fetch, 1-7 (default 7)", + "description": "Comma-separated facet name:value pairs, e.g. productGender:Men,styleFabric:Cashmere", "in": "query", - "name": "days", - "type": "integer", - "x-example": 7 + "name": "filter", + "type": "string", + "x-example": "productGender:Men" } ], "produces": [ @@ -389769,7 +463781,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/grubhub.timepickerResponseDoc" + "$ref": "#/definitions/jcrew.searchResponseDoc" } }, "400": { @@ -389778,12 +463790,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -389802,24 +463808,38 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Grubhub restaurant's future orderable time-slot calendar", + "summary": "Search J.Crew or J.Crew Factory products", "tags": [ - "Grubhub" + "J.Crew" ] } }, - "/guardian/article": { + "/jcrew/size-chart": { "get": { - "description": "Returns a Guardian article by `url`, a canonical `www.theguardian.com` article link. The response has the title, description, section, authors, lead image, publication and update times, and the body as `paragraphs`. Live-blog timelines are not supported.", - "operationId": "guardian-article", + "consumes": [ + "application/json" + ], + "description": "Returns real body measurements per size (chest, waist, hip, sleeve, length, or a subset depending on the style/category), in both inches and centimeters. pid is a style id, as returned by jcrew-search's products[].id field. site must match the storefront the pid belongs to (default jcrew). A measurement value of 0 means that column doesn't apply to this style (e.g. hip on a top) -- the upstream itself doesn't distinguish that from a genuine zero, so this endpoint passes it through as-is.", + "operationId": "jcrew-size-chart", "parameters": [ { - "description": "Canonical www.theguardian.com article URL", + "description": "Style id, from a search result's id field", "in": "query", - "name": "url", + "name": "pid", "required": true, "type": "string", - "x-example": "https://www.theguardian.com/world/2026/aug/26/us-military-kills-four-boat-strike-caribbean" + "x-example": "CX415" + }, + { + "default": "jcrew", + "description": "Storefront the pid belongs to", + "enum": [ + "jcrew", + "factory" + ], + "in": "query", + "name": "site", + "type": "string" } ], "produces": [ @@ -389829,7 +463849,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/guardian.articleResponseDoc" + "$ref": "#/definitions/jcrew.sizeChartResponseDoc" } }, "400": { @@ -389862,39 +463882,44 @@ "ApiKeyAuth": [] } ], - "summary": "Get Guardian article content", + "summary": "Get the size chart for a J.Crew or J.Crew Factory product", "tags": [ - "Guardian" + "J.Crew" ] } }, - "/guardian/author": { + "/jcrew/stores": { "get": { - "description": "Returns one Guardian contributor's public profile: name, bio, Twitter handle, byline image, and one page of their recent articles. Provide either the contributor's profile slug or the full profile page URL.", - "operationId": "guardian-author", + "consumes": [ + "application/json" + ], + "description": "Returns one storefront's full open-store directory (address, phone, coordinates, services, weekly hours). site selects the storefront and accepts jcrew or factory; defaults to jcrew. Give lat and lng together to sort by distance from that point (each store's distance_miles is then populated); omit both for the upstream's own order.", + "operationId": "jcrew-stores", "parameters": [ { - "description": "Guardian contributor profile slug, e.g. hannah-devlin", + "default": "jcrew", + "description": "Storefront whose stores to return", + "enum": [ + "jcrew", + "factory" + ], "in": "query", - "name": "slug", - "type": "string", - "x-example": "hannah-devlin" + "name": "site", + "type": "string" }, { - "description": "Canonical https://www.theguardian.com/profile/ page URL, as an alternative to slug", + "description": "Latitude to sort distance from (must be given together with lng)", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.theguardian.com/profile/hannah-devlin" + "name": "lat", + "type": "number", + "x-example": 40.7128 }, { - "default": 1, - "description": "1-based article-history page, 1 to 100, defaults to 1", + "description": "Longitude to sort distance from (must be given together with lat)", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page", - "type": "integer" + "name": "lng", + "type": "number", + "x-example": -74.006 } ], "produces": [ @@ -389904,7 +463929,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/guardian.authorResponseDoc" + "$ref": "#/definitions/jcrew.storesResponseDoc" } }, "400": { @@ -389913,12 +463938,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -389937,35 +463956,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get Guardian contributor profile", + "summary": "Find J.Crew or J.Crew Factory store locations", "tags": [ - "Guardian" + "J.Crew" ] } }, - "/guardian/headlines": { + "/jcrew/suggest": { "get": { - "description": "Returns recent Guardian headlines for one section. `section` is optional and defaults to `world`; the other values are `uk-news`, `us-news`, `politics`, `business`, `technology`, `environment`, `science`, `sport`, `culture`, `lifeandstyle` and `commentisfree`. Each item has a title, URL, summary, publication time and author, plus its section when available.", - "operationId": "guardian-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns the storefront's own search-box suggestions (typeahead) for a partial query -- a flat list of suggested search phrases, each with its own live total result count on the search index. Select the storefront with site (default jcrew). Not product data.", + "operationId": "jcrew-suggest", "parameters": [ { - "description": "Guardian RSS section, defaults to world", + "description": "Partial search query", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "dress" + }, + { + "default": "jcrew", + "description": "Storefront to search", "enum": [ - "world", - "uk-news", - "us-news", - "politics", - "business", - "technology", - "environment", - "science", - "sport", - "culture", - "lifeandstyle", - "commentisfree" + "jcrew", + "factory" ], "in": "query", - "name": "section", + "name": "site", "type": "string" } ], @@ -389976,7 +463997,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/guardian.headlinesResponseDoc" + "$ref": "#/definitions/jcrew.suggestResponseDoc" } }, "400": { @@ -389985,12 +464006,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -390009,24 +464024,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Guardian section headlines", + "summary": "Get J.Crew or J.Crew Factory search-box suggestions", "tags": [ - "Guardian" + "J.Crew" ] } }, - "/guardian/live": { + "/jerusalempost/article": { "get": { - "description": "Returns a bounded text snapshot of one public Guardian live blog: the headline, the key-events timeline, and the update blocks with timestamps, headings, bylines, and body paragraphs. This is a single page fetch of the public page at a canonical live-blog URL — not a live stream or polling feed. URLs must use the dated www.theguardian.com section /live/ path, e.g. https://www.theguardian.com/sport/live/2026/aug/08//.", - "operationId": "guardian-live", + "description": "Returns public Jerusalem Post article metadata and free body paragraphs. If isAccessibleForFree is false, paywalled is true and body paragraphs are omitted; paid article text is not represented by feed snippets.", + "operationId": "jerusalempost-article", "parameters": [ { - "description": "Canonical www.theguardian.com live-blog URL", + "description": "Canonical Jerusalem Post article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.theguardian.com/sport/live/2026/aug/08/japan-vs-australia-live-updates-wallabies-nations-championship-rugby-union" + "x-example": "https://www.jpost.com/middle-east/article-909945" } ], "produces": [ @@ -390036,7 +464051,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/guardian.liveResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -390051,12 +464066,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -390069,33 +464078,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Guardian live blog snapshot", + "summary": "Get Jerusalem Post article content", "tags": [ - "Guardian" + "Jerusalem Post" ] } }, - "/guardian/topic": { + "/jerusalempost/author": { "get": { - "description": "Returns the stories on a public Guardian tag archive (20 per page, newest first, with total pages and results) or section front (a single curated page, is_front true). topic is a Guardian tag or section slug and page defaults to 1. resolved_topic reports the path actually served, which differs for edition-scoped fronts.", - "operationId": "guardian-topic", + "description": "Returns a Jerusalem Post author or blogger profile by `url`, a canonical `/author/` or `/blogger/` link. The response has the profile `type`, name, `description`, `image_url` and article cards with title, URL, summary and publication time.", + "operationId": "jerusalempost-author", "parameters": [ { - "description": "Guardian tag or section slug", + "description": "Canonical Jerusalem Post /author/ or /blogger/ profile URL", "in": "query", - "name": "topic", + "name": "url", "required": true, "type": "string", - "x-example": "world" - }, - { - "default": 1, - "description": "1-based archive page, 1 to 100, defaults to 1", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page", - "type": "integer" + "x-example": "https://www.jpost.com/author/cameron-s-brown" } ], "produces": [ @@ -390105,7 +464105,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/guardian.topicResponseDoc" + "$ref": "#/definitions/publicnews.jerusalemPostAuthorResponseDoc" } }, "400": { @@ -390120,11 +464120,37 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Jerusalem Post author profile", + "tags": [ + "Jerusalem Post" + ] + } + }, + "/jerusalempost/authors": { + "get": { + "description": "Returns the current author and blogger profile URLs discovered from the site's public Experts sitemap. This dynamic roster is intentionally exposed as a discovery endpoint.", + "operationId": "jerusalempost-authors", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.jerusalemPostAuthorsResponseDoc" + } }, "503": { "description": "Service Unavailable", @@ -390138,26 +464164,66 @@ "ApiKeyAuth": [] } ], - "summary": "Get Guardian topic archive", + "summary": "List Jerusalem Post author profiles", "tags": [ - "Guardian" + "Jerusalem Post" ] } }, - "/gucci/categories": { + "/jerusalempost/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Gucci's full department/category/subcategory taxonomy, sourced directly from the site's own header navigation menu. Each entry's category value is exactly what gucci-category's own category parameter accepts. Filter to one department with department (e.g. women, men); omit for every department -- see the response's own departments field for the live list of top-level department labels to filter by.", - "operationId": "gucci-categories", + "description": "Returns current Jerusalem Post stories for one section. `section` is required and takes one of 40 slugs such as `israel-news`, `iran-news`, `middle-east`, `tech-and-startups` or `torah-portion`. Each item has its title, URL, author, publication time and image, plus a summary except on premium items, which have none.", + "operationId": "jerusalempost-headlines", "parameters": [ { - "description": "Department label to filter to (case-insensitive substring match against the response's own departments field), e.g. women, men. Omit for every department.", + "description": "Jerusalem Post section slug", + "enum": [ + "aliyah", + "american-politics", + "arab-israeli-conflict", + "archaeology", + "bds-movement", + "all-news", + "banking-and-finance", + "business-and-innovation", + "business-opinion", + "christian-world", + "consumerism", + "culture", + "defense-and-tech", + "diaspora", + "environment", + "food-and-recipes", + "health-and-wellness", + "health-around-the-world", + "history", + "home", + "iran-news", + "israel-election-2026", + "israel-news", + "israel-politics", + "israeli-sports", + "j-spot", + "jewish-holidays", + "judaism", + "kabbalah", + "middle-east", + "must", + "nutrition", + "omg", + "opinion", + "science", + "tech-and-startups", + "terrorism", + "torah-portion", + "ukraine-russia-war", + "world-news" + ], "in": "query", - "name": "department", + "name": "section", + "required": true, "type": "string", - "x-example": "women" + "x-example": "aliyah" } ], "produces": [ @@ -390167,7 +464233,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gucci.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -390176,11 +464242,37 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Jerusalem Post section headlines", + "tags": [ + "Jerusalem Post" + ] + } + }, + "/jerusalempost/news": { + "get": { + "description": "Returns recent Jerusalem Post front-page stories, with no parameters. Each item has its title, URL, author, publication time and image where available. Premium items keep their title and metadata but have no summary. Use `jerusalempost-article` to read an article and check its paywall flag.", + "operationId": "jerusalempost-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "503": { "description": "Service Unavailable", @@ -390194,34 +464286,53 @@ "ApiKeyAuth": [] } ], - "summary": "List Gucci's category and subcategory taxonomy", + "summary": "Get Jerusalem Post top stories", "tags": [ - "Gucci" + "Jerusalem Post" ] } }, - "/gucci/category": { + "/jerusalempost/sections": { + "get": { + "description": "Lists the 40 English-language editorial sections accepted by `jerusalempost-headlines`, such as `world-news`, `israel-politics`, `archaeology` and `jewish-holidays`. Each entry has a `slug`, display `name` and section `url`. Takes no parameters.", + "operationId": "jerusalempost-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Jerusalem Post section inventory", + "tags": [ + "Jerusalem Post" + ] + } + }, + "/jimmy-johns/menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Gucci category/browse listing: products (name, price, colors, images, stock) plus the upstream's own product count, page count, sibling-category counts, and sort options. category comes from gucci-categories' own category field. page selects how many of the upstream's own batches to accumulate -- Gucci's own category pages page this way: requesting page=N returns every product from page 1 through page N combined (its own \"Load All\" button simply requests the last page), not a single page's worth. Defaults to 1 (the upstream's own first batch, 36 products); request page equal to the response's own pages_count to fetch a category's complete listing in one call.", - "operationId": "gucci-category", + "description": "Returns one Jimmy John's restaurant's full menu as a category tree: every category and its products, with name, description, calorie range, base cost and image. restaurant_id comes from GET /jimmy-johns/nearby. Many sandwiches price entirely through a size selection rather than a base cost, so cost is commonly 0 for those items -- see GET /jimmy-johns/modifiers for the real per-size price.", + "operationId": "jimmy-johns-menu", "parameters": [ { - "description": "Category path from gucci-categories' own category field", + "description": "Olo restaurant id from /jimmy-johns/nearby", "in": "query", - "name": "category", + "name": "restaurant_id", "required": true, - "type": "string", - "x-example": "women/handbags-c-women-handbags" - }, - { - "description": "How many of the upstream's own batches to accumulate, defaults to 1 (see description)", - "in": "query", - "name": "page", "type": "integer", - "x-example": 1 + "x-example": 67182 } ], "produces": [ @@ -390231,7 +464342,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gucci.categoryResponseDoc" + "$ref": "#/definitions/jimmyjohns.menuResponseDoc" } }, "400": { @@ -390264,27 +464375,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Gucci category listing", + "summary": "Get one Jimmy John's restaurant's full menu", "tags": [ - "Gucci" + "JimmyJohns" ] } }, - "/gucci/product": { + "/jimmy-johns/modifiers": { "get": { "consumes": [ "application/json" ], - "description": "Returns product detail for one style: name, price, images, stock, and PDP attributes available from Gucci's current storefront, including description, breadcrumbs, SKU, colors, materials, and sizes. style_code comes from gucci-search's or gucci-category's own style_code field. PDP-only fields are omitted if the detail page is unavailable.", - "operationId": "gucci-product", + "description": "Returns one menu product's full customization tree: size, bread, and per-ingredient choices (extra/regular/light/none), each with its real price and calorie delta. Groups nest -- picking a size choice can reveal a bread group, which can reveal one group per ingredient -- so a size step, a bread step, and every \"Customize Sandwich\" ingredient all live in one recursive tree. product_id comes from GET /jimmy-johns/menu.", + "operationId": "jimmy-johns-modifiers", "parameters": [ { - "description": "Product style code, from gucci-search's or gucci-category's own style_code field", + "description": "Product id from a /jimmy-johns/menu product", "in": "query", - "name": "style_code", + "name": "product_id", "required": true, - "type": "string", - "x-example": "A005Y8AAG231096" + "type": "integer", + "x-example": 33276056 } ], "produces": [ @@ -390294,7 +464405,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gucci.productResponseDoc" + "$ref": "#/definitions/jimmyjohns.modifiersResponseDoc" } }, "400": { @@ -390327,31 +464438,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Gucci product", + "summary": "Get one Jimmy John's menu product's customization options", "tags": [ - "Gucci" + "JimmyJohns" ] } }, - "/gucci/recommendations": { + "/jimmy-johns/nearby": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Gucci recommendations shelf: product summaries (name, price, image, stock) from either a given product's own \"You May Also Like\" carousel (style_code set) or the site's general trending-items shelf (style_code omitted). style_code comes from gucci-search's or gucci-category's own style_code field.", - "operationId": "gucci-recommendations", + "description": "Returns Jimmy John's restaurants within a radius of a coordinate, nearest first, using Jimmy John's own Olo-backed ordering API (a separate host from the locator this family's sitemap and store endpoints read). Each result carries restaurant_id -- pass it to GET /jimmy-johns/menu for that restaurant's full menu. The upstream's own radius parameter does not narrow its result set, so distance filtering and sorting happen here.", + "operationId": "jimmy-johns-nearby", "parameters": [ { - "description": "Product style code to get related items for; omit for the site's general trending-items shelf instead", + "description": "Search center latitude", "in": "query", - "name": "style_code", - "type": "string", - "x-example": "A005Y8AAG231096" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 39.9612 }, { - "description": "Maximum products to return, defaults to 10, maximum 20", + "description": "Search center longitude", "in": "query", - "name": "max", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -82.9988 + }, + { + "description": "Search radius in miles, 1-100 (default 15)", + "in": "query", + "name": "radius", + "type": "integer", + "x-example": 15 + }, + { + "description": "Maximum restaurants to return, 1-50 (default 10)", + "in": "query", + "name": "limit", "type": "integer", "x-example": 10 } @@ -390363,7 +464490,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gucci.recommendationsResponseDoc" + "$ref": "#/definitions/jimmyjohns.nearbyResponseDoc" } }, "400": { @@ -390390,48 +464517,52 @@ "ApiKeyAuth": [] } ], - "summary": "Gucci product recommendations", + "summary": "Find Jimmy John's restaurants near a coordinate", "tags": [ - "Gucci" + "JimmyJohns" ] } }, - "/gucci/search": { + "/jimmy-johns/sitemap": { "get": { "consumes": [ "application/json" ], - "description": "Searches Gucci's US product catalog by keyword using the storefront's public catalog. Results include card-level data and the live total count; per-product colors, materials, sizes, gender, and line are omitted when the search source does not provide them. A genuinely empty result returns a well-formed empty products list. The response's size_facets field lists live size values and counts -- pass one as size on a follow-up call to filter.", - "operationId": "gucci-search", + "description": "Returns one page of Jimmy John's sitemap-declared store index -- 9,700+ URLs at time of writing. Jimmy John's publishes three page variants per store (sandwiches, delivery, catering) and all three appear in the sitemap, so each entry carries a kind and the store number they share; filter with the kind parameter to enumerate one variant per restaurant. `sandwiches` is the canonical variant. A page past the end returns an empty list rather than an error, so a caller can walk to exhaustion.", + "operationId": "jimmy-johns-sitemap", "parameters": [ { - "description": "Search keyword", + "description": "Sitemap shard index (default 0)", "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "belt" + "name": "shard", + "type": "integer", + "x-example": 0 }, { - "description": "One-based page number, defaults to 1", + "description": "1-based page within the shard (default 1)", "in": "query", "name": "page", "type": "integer", "x-example": 1 }, { - "description": "Results per page, defaults to 24, maximum 100", + "description": "Entries per page, 1-500 (default 100)", "in": "query", - "name": "limit", + "name": "page_size", "type": "integer", - "x-example": 24 + "x-example": 100 }, { - "description": "Filter to products listing this exact size as available. See size_facets for live values -- omit size to see all sizes first.", + "description": "Filter by page variant. One of sandwiches, delivery, catering. Default all.", + "enum": [ + "sandwiches", + "delivery", + "catering" + ], "in": "query", - "name": "size", + "name": "kind", "type": "string", - "x-example": "Gucci 90" + "x-example": "sandwiches" } ], "produces": [ @@ -390441,7 +464572,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gucci.searchResponseDoc" + "$ref": "#/definitions/jimmyjohns.sitemapResponseDoc" } }, "400": { @@ -390450,6 +464581,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -390468,27 +464605,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Gucci's product catalog", + "summary": "Browse Jimmy John's store-URL index", "tags": [ - "Gucci" + "JimmyJohns" ] } }, - "/gucci/size-guide": { + "/jimmy-johns/store": { "get": { "consumes": [ "application/json" ], - "description": "Returns Gucci's own size-conversion chart for one product style, as a plain header row plus data rows. Not every style carries one -- a one-size accessory (a bag, a scarf) returns available: false with no headers/rows, a well-formed signal rather than an error. style_code comes from gucci-search's or gucci-category's own style_code field.", - "operationId": "gucci-size-guide", + "description": "Returns one Jimmy John's store: name, postal address, phone, coordinates, cuisine description and the published week of opening hours. Store paths come from GET /jimmy-johns/sitemap. Note Jimmy John's main site is behind a bot challenge that serves a page with HTTP 200, so this family reads the separate locator subdomain instead. For menu data, see GET /jimmy-johns/nearby and GET /jimmy-johns/menu, which read a separate ordering API.", + "operationId": "jimmy-johns-store", "parameters": [ { - "description": "Product style code", + "description": "Store path from a /jimmy-johns/sitemap entry", "in": "query", - "name": "style_code", + "name": "path", "required": true, "type": "string", - "x-example": "757892AACAG9055" + "x-example": "in/columbus/sandwiches-1414.html" } ], "produces": [ @@ -390498,7 +464635,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gucci.sizeGuideResponseDoc" + "$ref": "#/definitions/jimmyjohns.storeResponseDoc" } }, "400": { @@ -390507,6 +464644,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -390525,27 +464668,33 @@ "ApiKeyAuth": [] } ], - "summary": "Gucci product size chart", + "summary": "Get one Jimmy John's store's detail", "tags": [ - "Gucci" + "JimmyJohns" ] } }, - "/gucci/store": { + "/jobs/ashby/board": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Gucci store's full detail: name, phone, address, opening hours, and photos. slug comes from gucci-stores' own slug field.", - "operationId": "gucci-store", + "description": "Lists an organization's public Ashby board postings with inline detail (description, compensation when include_compensation=true). The org is the Ashby slug from its careers URL. An unknown org returns an empty board (Ashby does not 404).", + "operationId": "jobs-ashby-board", "parameters": [ { - "description": "Store slug, from gucci-stores' own slug field", + "description": "Ashby org slug (careers URL)", "in": "query", - "name": "slug", + "name": "org", "required": true, "type": "string", - "x-example": "900-north-michigan-avenue" + "x-example": "openai" + }, + { + "description": "Include compensation summary", + "in": "query", + "name": "include_compensation", + "type": "boolean" } ], "produces": [ @@ -390555,7 +464704,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gucci.storeResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -390564,18 +464713,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -390588,26 +464725,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Gucci store's detail", + "summary": "List an organization's Ashby job board", "tags": [ - "Gucci" + "Jobs" ] } }, - "/gucci/stores": { + "/jobs/company-search": { "get": { "consumes": [ "application/json" ], - "description": "Returns Gucci's full US store-locator listing: name, address, phone, coordinates, product departments carried, and a link to book an in-store appointment for each location. Filter to stores carrying one department with department (e.g. jewelry, mens_shoes); omit for every store -- see the response's own departments field for the live list of department tags to filter by.", - "operationId": "gucci-stores", + "description": "Probes Greenhouse, Lever, Ashby, SmartRecruiters, Workable, Recruitee, Rippling, Teamtailor, and Pinpoint in parallel for a slug and reports the providers where it resolves to a non-empty board (with the open-role count and board URL). Workday is excluded (its board needs tenant + datacenter + site).", + "operationId": "jobs-company-search", "parameters": [ { - "description": "Department tag to filter to (case-insensitive substring match against the response's own departments field), e.g. jewelry, mens_shoes. Omit for every store.", + "description": "Company careers slug to probe", "in": "query", - "name": "department", + "name": "slug", + "required": true, "type": "string", - "x-example": "jewelry" + "x-example": "stripe" } ], "produces": [ @@ -390617,7 +464755,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gucci.storesResponseDoc" + "$ref": "#/definitions/jobs.searchResponseDoc" } }, "400": { @@ -390626,12 +464764,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -390644,82 +464776,59 @@ "ApiKeyAuth": [] } ], - "summary": "List Gucci store locations", + "summary": "Find which ATS a company uses by slug", "tags": [ - "Gucci" + "Jobs" ] } }, - "/gucci/stores/search": { + "/jobs/eightfold/board": { "get": { "consumes": [ "application/json" ], - "description": "Searches Gucci's public store-map GeoJSON feed for locations inside the requested viewport. market selects the storefront locale and localized labels; it does not filter results by country. The supported, live-verified market values are ca (English), fr (French), jp (Japanese), uk (English), and us (English). Coordinates and viewport bounds determine the returned stores. The Gucci site's text field geocodes in the browser and its name parameter does not filter this feed, so callers must provide bounds and a center (geocode a place before calling). Dateline-crossing bounds are not supported.", - "operationId": "gucci-store-search", + "description": "Lists a company's public Eightfold AI job board, paged via limit/offset. tenant is the {tenant}.eightfold.ai subdomain from the careers URL; domain is the hiring organization's own domain (e.g. microsoft.com), also visible on the tenant's careers page.", + "operationId": "jobs-eightfold-board", "parameters": [ { - "description": "Gucci storefront locale; controls localization only, not geographic filtering", - "enum": [ - "ca", - "fr", - "jp", - "uk", - "us" - ], + "description": "Eightfold tenant subdomain (careers URL)", "in": "query", - "name": "market", + "name": "tenant", "required": true, "type": "string", - "x-example": "us" - }, - { - "description": "Viewport northern latitude", - "in": "query", - "name": "north", - "required": true, - "type": "number", - "x-example": 40.917705 + "x-example": "microsoft" }, { - "description": "Viewport western longitude", + "description": "Hiring organization domain", "in": "query", - "name": "west", + "name": "domain", "required": true, - "type": "number", - "x-example": -74.258843 + "type": "string", + "x-example": "microsoft.com" }, { - "description": "Viewport southern latitude", + "description": "Free-text search", "in": "query", - "name": "south", - "required": true, - "type": "number", - "x-example": 40.476578 + "name": "query", + "type": "string" }, { - "description": "Viewport eastern longitude", + "description": "Filter: location contains", "in": "query", - "name": "east", - "required": true, - "type": "number", - "x-example": -73.700169 + "name": "location", + "type": "string" }, { - "description": "Viewport center latitude", + "description": "Page size, default 10, max 10 (upstream caps results per page regardless of a larger value)", "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 40.7127753 + "name": "limit", + "type": "integer" }, { - "description": "Viewport center longitude", + "description": "Page offset, default 0", "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -74.0059728 + "name": "offset", + "type": "integer" } ], "produces": [ @@ -390729,7 +464838,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gucci.storeSearchResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -390738,12 +464847,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -390756,34 +464859,43 @@ "ApiKeyAuth": [] } ], - "summary": "Search Gucci stores in a map viewport", + "summary": "List an Eightfold tenant's job board", "tags": [ - "Gucci" + "Jobs" ] } }, - "/gucci/suggest": { + "/jobs/eightfold/job": { "get": { "consumes": [ "application/json" ], - "description": "Returns Gucci's own search-box typeahead suggestions for a partial query. The current public suggestion source does not provide per-phrase result counts. Not product data -- pass a suggestion's query into gucci-search for results.", - "operationId": "gucci-suggest", + "description": "Returns a single Eightfold position with its full HTML/text description. id is the position id from a board listing; tenant/domain as in the board endpoint.", + "operationId": "jobs-eightfold-job", "parameters": [ { - "description": "Partial search query", + "description": "Eightfold tenant subdomain", "in": "query", - "name": "q", + "name": "tenant", "required": true, "type": "string", - "x-example": "bel" + "x-example": "microsoft" }, { - "description": "Maximum suggestions to return, defaults to 5, maximum 20", + "description": "Hiring organization domain", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 5 + "name": "domain", + "required": true, + "type": "string", + "x-example": "microsoft.com" + }, + { + "description": "Eightfold position id from a board listing", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "1970393556928891" } ], "produces": [ @@ -390793,7 +464905,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/gucci.suggestResponseDoc" + "$ref": "#/definitions/jobs.jobResponseDoc" } }, "400": { @@ -390802,8 +464914,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -390820,24 +464932,27 @@ "ApiKeyAuth": [] } ], - "summary": "Gucci search-box suggestions", + "summary": "Get a single Eightfold position", "tags": [ - "Gucci" + "Jobs" ] } }, - "/gulfnews/article": { + "/jobs/gem/board": { "get": { - "description": "Returns a Gulf News article by `url`, a canonical `gulfnews.com` link whose path ends in the `-1.` suffix. The response has the title, description, section, authors, lead image, publish and update times, and body `paragraphs`. Section and author pages are rejected, and `paywalled` is omitted because sampled articles were freely readable.", - "operationId": "gulfnews-article", + "consumes": [ + "application/json" + ], + "description": "Lists a company's public Gem (gem.com) board postings with inline detail (full HTML description, and compensation when the company publishes a pay range). The company is the Gem vanity URL slug from its careers URL.", + "operationId": "jobs-gem-board", "parameters": [ { - "description": "Canonical Gulf News article URL", + "description": "Gem vanity URL slug (careers URL)", "in": "query", - "name": "url", + "name": "company", "required": true, "type": "string", - "x-example": "https://gulfnews.com/business/aviation/air-india-flydubai-tie-up-opens-52-more-destinations-via-dubai-1.500686930" + "x-example": "agora" } ], "produces": [ @@ -390847,7 +464962,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -390874,30 +464989,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Gulf News article content", + "summary": "List a company's Gem job board", "tags": [ - "Gulf News" + "Jobs" ] } }, - "/gulfnews/author": { + "/jobs/greenhouse/board": { "get": { - "description": "Returns a Gulf News author profile, identified by `slug` (such as `nathaniel-lacsina`) or by a canonical `gulfnews.com/author/` `url`; provide exactly one. The response has the name, job title, bio and the single page of recent articles on the profile, each with `title`, `url` and sometimes a `summary`. Unknown authors return not found.", - "operationId": "gulfnews-author", + "consumes": [ + "application/json" + ], + "description": "Lists a company's public Greenhouse board postings in the shared Job shape. Set content=true to include each job's full HTML description in one call. The token is the company's Greenhouse board slug from its careers URL.", + "operationId": "jobs-greenhouse-board", "parameters": [ { - "description": "Author slug, e.g. nathaniel-lacsina", + "description": "Greenhouse board token (careers URL slug)", "in": "query", - "name": "slug", + "name": "token", + "required": true, "type": "string", - "x-example": "nathaniel-lacsina" + "x-example": "stripe" }, { - "description": "Canonical gulfnews.com/author/ URL; alternative to slug", + "description": "Include full HTML description per job", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://gulfnews.com/author/nathaniel-lacsina" + "name": "content", + "type": "boolean" } ], "produces": [ @@ -390907,7 +465025,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.gulfNewsAuthorResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -390934,45 +465052,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Gulf News author profile", + "summary": "List a company's Greenhouse job board", "tags": [ - "Gulf News" + "Jobs" ] } }, - "/gulfnews/headlines": { + "/jobs/greenhouse/job": { "get": { - "description": "Returns current Gulf News headlines for one section. `section` is required and takes one of 19 slugs such as `latest-news`, `business`, `uae`, `sport`, `living-in-uae` or `your-money`; other values return an invalid-params error. Each item has a title and canonical article URL.", - "operationId": "gulfnews-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns one Greenhouse job, identified by the board `token` and job `id`, both required. The response has the title, company, department, team, location and offices, workplace type, employment type, posting and apply URLs, posting date, compensation, and the description as HTML and plain text. An unknown token or id returns `404`.", + "operationId": "jobs-greenhouse-job", "parameters": [ { - "description": "Gulf News section slug", - "enum": [ - "latest-news", - "business", - "best-buys", - "uae", - "entertainment", - "world", - "sport", - "living-in-uae", - "lifestyle", - "opinion", - "travel", - "podcasts", - "special-reports", - "things-to-do", - "friday", - "the-kurator", - "uae-success-stories", - "photos", - "your-money" - ], + "description": "Greenhouse board token", "in": "query", - "name": "section", + "name": "token", "required": true, "type": "string", - "x-example": "latest-news" + "x-example": "stripe" + }, + { + "description": "Greenhouse job id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "8172508" } ], "produces": [ @@ -390982,7 +465090,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/jobs.jobResponseDoc" } }, "400": { @@ -390991,6 +465099,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -391003,48 +465117,101 @@ "ApiKeyAuth": [] } ], - "summary": "Get Gulf News section headlines", + "summary": "Get a single Greenhouse job", "tags": [ - "Gulf News" + "Jobs" ] } }, - "/gulfnews/news": { + "/jobs/hiring-signals": { "get": { - "description": "Returns the latest Gulf News stories across all sections, with no parameters. Each item has its title, canonical article URL, publication time and lead image. The listing carries no summary text.", - "operationId": "gulfnews-news", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } + "description": "Aggregates a company's ATS board into a hiring snapshot: total open roles, breakdowns by department/location/title, remote share, and how many roles are new in the last 7/30 days — a leading indicator of company growth. Supply provider plus that provider's slug params (token / company / org / tenant+datacenter+site / domain). Breakdowns are computed over the fetched postings.", + "operationId": "jobs-hiring-signals", + "parameters": [ + { + "description": "ATS provider", + "enum": [ + "greenhouse", + "lever", + "ashby", + "workday", + "smartrecruiters", + "workable", + "recruitee", + "rippling", + "personio", + "teamtailor", + "oracle", + "ukg", + "icims", + "eightfold", + "gem", + "pinpoint" + ], + "in": "query", + "name": "provider", + "required": true, + "type": "string", + "x-example": "greenhouse" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] + "description": "greenhouse board token", + "in": "query", + "name": "token", + "type": "string" + }, + { + "description": "lever / smartrecruiters / workable / recruitee / rippling / personio / teamtailor / gem / pinpoint company slug", + "in": "query", + "name": "company", + "type": "string" + }, + { + "description": "ashby org slug", + "in": "query", + "name": "org", + "type": "string" + }, + { + "description": "workday / eightfold tenant", + "in": "query", + "name": "tenant", + "type": "string" + }, + { + "description": "workday datacenter shard", + "in": "query", + "name": "datacenter", + "type": "string" + }, + { + "description": "workday / oracle career site", + "in": "query", + "name": "site", + "type": "string" + }, + { + "description": "oracle cloud host (*.oraclecloud.com)", + "in": "query", + "name": "host", + "type": "string" + }, + { + "description": "ukg job-board UUID", + "in": "query", + "name": "board", + "type": "string" + }, + { + "description": "icims careers domain / eightfold organization domain", + "in": "query", + "name": "domain", + "type": "string" } ], - "summary": "Get Gulf News top stories", - "tags": [ - "Gulf News" - ] - } - }, - "/gulfnews/sections": { - "get": { - "description": "Lists the 19 top-level Gulf News sections accepted by `gulfnews-headlines`, such as `latest-news`, `business`, `uae`, `world`, `sport` and `things-to-do`. Each entry has a `slug`, display `name` and section `url`. Sub-sections such as `business/aviation` are not separate values; their stories appear under the parent.", - "operationId": "gulfnews-sections", "produces": [ "application/json" ], @@ -391052,7 +465219,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/jobs.signalsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -391061,33 +465246,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get Gulf News sections", + "summary": "Aggregate hiring signals for a company's board", "tags": [ - "Gulf News" + "Jobs" ] } }, - "/gymshark/collections": { + "/jobs/icims/board": { "get": { "consumes": [ "application/json" ], - "description": "Returns collections from Gymshark (https://row.gymshark.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", - "operationId": "gymshark-collections", + "description": "Lists a company's public iCIMS job board (served through the tenant's white-labeled careers domain, e.g. careers.costco.com — not the bare {company}.icims.com subdomain, which is an OAuth-gated employee portal), paged via page/limit, with the full description inline per job. domain is the tenant's careers domain from its careers URL.", + "operationId": "jobs-icims-board", "parameters": [ { - "description": "1-based page, defaults to 1", + "description": "iCIMS tenant careers domain (careers URL)", + "in": "query", + "name": "domain", + "required": true, + "type": "string", + "x-example": "careers.costco.com" + }, + { + "description": "Free-text keyword search", + "in": "query", + "name": "keywords", + "type": "string" + }, + { + "description": "Filter: location contains", + "in": "query", + "name": "location", + "type": "string" + }, + { + "description": "Page number, default 1", "in": "query", "name": "page", - "type": "integer", - "x-example": 1 + "type": "integer" }, { - "description": "Maximum collections, defaults to 50 and supports up to 250", + "description": "Page size, default 20, max 50", "in": "query", "name": "limit", - "type": "integer", - "x-example": 50 + "type": "integer" } ], "produces": [ @@ -391097,7 +465300,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -391106,12 +465309,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -391124,41 +465321,42 @@ "ApiKeyAuth": [] } ], - "summary": "List Gymshark collections", + "summary": "List an iCIMS tenant's job board", "tags": [ - "Gymshark" + "Jobs" ] } }, - "/gymshark/collections/{handle}/products": { + "/jobs/icims/job": { "get": { "consumes": [ "application/json" ], - "description": "Returns products from one Gymshark (https://row.gymshark.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", - "operationId": "gymshark-collection-products", + "description": "Returns a single iCIMS job with its full HTML/text description, department, and benefits. id is the req_id/slug from a board listing; lang defaults to en-us.", + "operationId": "jobs-icims-job", "parameters": [ { - "description": "Collection handle", - "in": "path", - "name": "handle", + "description": "iCIMS tenant careers domain", + "in": "query", + "name": "domain", "required": true, "type": "string", - "x-example": "collection-handle" + "x-example": "careers.costco.com" }, { - "description": "1-based page, defaults to 1", + "description": "iCIMS job req_id/slug from a board listing", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "id", + "required": true, + "type": "string", + "x-example": "30341" }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "description": "Language code, default en-us", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "lang", + "type": "string", + "x-example": "en-us" } ], "produces": [ @@ -391168,7 +465366,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" + "$ref": "#/definitions/jobs.jobResponseDoc" } }, "400": { @@ -391183,12 +465381,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -391201,33 +465393,35 @@ "ApiKeyAuth": [] } ], - "summary": "List Gymshark collection products", + "summary": "Get a single iCIMS job", "tags": [ - "Gymshark" + "Jobs" ] } }, - "/gymshark/pages": { + "/jobs/lever/posting": { "get": { "consumes": [ "application/json" ], - "description": "Lists Gymshark static pages, 50 per page by default (`limit` up to 250) with a 1-based `page`. Each has its handle, title, URL, plain-text content and timestamps. When `transport_mode` is `ssr_embedded`, items carry only `handle`, `url` and `updated_at`.", - "operationId": "gymshark-pages", + "description": "Returns one Lever posting, identified by the `company` slug and posting `id`, both required. The response has the title, department, team, location, workplace type, employment type, posting and apply URLs, posting date, compensation, and the description as HTML and plain text. An unknown company or id returns `404`.", + "operationId": "jobs-lever-posting", "parameters": [ { - "description": "1-based page, defaults to 1", + "description": "Lever company slug", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "company", + "required": true, + "type": "string", + "x-example": "spotify" }, { - "description": "Maximum static pages, defaults to 50 and supports up to 250", + "description": "Lever posting id", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "id", + "required": true, + "type": "string", + "x-example": "2193db3f-77c5-43b8-b030-8f92c9882bf1" } ], "produces": [ @@ -391237,7 +465431,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pagesResponseDoc" + "$ref": "#/definitions/jobs.jobResponseDoc" } }, "400": { @@ -391246,8 +465440,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -391264,27 +465458,45 @@ "ApiKeyAuth": [] } ], - "summary": "List Gymshark static pages", + "summary": "Get a single Lever posting", "tags": [ - "Gymshark" + "Jobs" ] } }, - "/gymshark/pages/{handle}": { + "/jobs/lever/postings": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Gymshark static page by its `handle`, such as `sports-bras`: title, handle, URL, plain-text content, and created, published and updated times. Page HTML is not returned. An unknown handle returns a 404. `id` is absent when `transport_mode` is `ssr_embedded`.", - "operationId": "gymshark-page", + "description": "Lists a company's public Lever postings (detail is inline), optionally filtered by department, location, or remote. The company is the Lever slug from its careers URL.", + "operationId": "jobs-lever-postings", "parameters": [ { - "description": "Page handle", - "in": "path", - "name": "handle", + "description": "Lever company slug (careers URL)", + "in": "query", + "name": "company", "required": true, "type": "string", - "x-example": "page-handle" + "x-example": "spotify" + }, + { + "description": "Filter: department contains", + "in": "query", + "name": "department", + "type": "string" + }, + { + "description": "Filter: location contains", + "in": "query", + "name": "location", + "type": "string" + }, + { + "description": "Filter by remote (true or false)", + "in": "query", + "name": "remote", + "type": "boolean" } ], "produces": [ @@ -391294,7 +465506,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pageResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -391309,12 +465521,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -391327,33 +465533,53 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Gymshark static page", + "summary": "List a company's Lever postings", "tags": [ - "Gymshark" + "Jobs" ] } }, - "/gymshark/products": { + "/jobs/oracle/board": { "get": { "consumes": [ "application/json" ], - "description": "Returns products from Gymshark's (https://row.gymshark.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", - "operationId": "gymshark-products", + "description": "Lists an Oracle Recruiting Cloud tenant's public requisitions, paged via limit/offset. host and site both come from the careers URL https://{host}/hcmUI/CandidateExperience/en/sites/{site}/ (host must be an *.oraclecloud.com hostname; site looks like CX_1). The listing carries a short description; use the single-job endpoint for full detail.", + "operationId": "jobs-oracle-board", "parameters": [ { - "description": "1-based page, defaults to 1", + "description": "Oracle Cloud host (careers URL, *.oraclecloud.com)", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "host", + "required": true, + "type": "string", + "x-example": "eeho.fa.us2.oraclecloud.com" }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "description": "Oracle career site number", + "in": "query", + "name": "site", + "required": true, + "type": "string", + "x-example": "CX_1" + }, + { + "description": "Free-text keyword search", + "in": "query", + "name": "search", + "type": "string" + }, + { + "description": "Page size, default 25, max 50", "in": "query", "name": "limit", - "type": "integer", - "x-example": 50 + "type": "integer" + }, + { + "description": "Page offset, default 0", + "in": "query", + "name": "offset", + "type": "integer" } ], "produces": [ @@ -391363,7 +465589,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productsResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -391372,12 +465598,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -391390,27 +465610,43 @@ "ApiKeyAuth": [] } ], - "summary": "List Gymshark products", + "summary": "List an Oracle Recruiting (ORC) tenant's job board", "tags": [ - "Gymshark" + "Jobs" ] } }, - "/gymshark/products/{handle}": { + "/jobs/oracle/job": { "get": { "consumes": [ "application/json" ], - "description": "Returns product detail for one Gymshark (https://row.gymshark.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", - "operationId": "gymshark-product", + "description": "Returns a single Oracle Recruiting requisition with its full HTML/text description (description, responsibilities, qualifications). id is the requisition Id from a board listing; host/site as in the board endpoint.", + "operationId": "jobs-oracle-job", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", + "description": "Oracle Cloud host (*.oraclecloud.com)", + "in": "query", + "name": "host", "required": true, "type": "string", - "x-example": "product-handle" + "x-example": "eeho.fa.us2.oraclecloud.com" + }, + { + "description": "Oracle career site number", + "in": "query", + "name": "site", + "required": true, + "type": "string", + "x-example": "CX_1" + }, + { + "description": "Oracle requisition Id from a board listing", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "331738" } ], "produces": [ @@ -391420,7 +465656,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productResponseDoc" + "$ref": "#/definitions/jobs.jobResponseDoc" } }, "400": { @@ -391435,12 +465671,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -391453,45 +465683,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Gymshark product", + "summary": "Get a single Oracle Recruiting (ORC) requisition", "tags": [ - "Gymshark" + "Jobs" ] } }, - "/gymshark/products/{handle}/recommendations": { + "/jobs/personio/feed": { "get": { "consumes": [ "application/json" ], - "description": "Returns recommended products for one Gymshark (https://row.gymshark.com) product handle. The storefront URL is fixed server-side.", - "operationId": "gymshark-product-recommendations", + "description": "Lists a company's public Personio board feed in the shared Job shape with detail inline, optionally filtered by department, location, or remote. The company is the Personio subdomain from its careers URL https://{company}.jobs.personio.de/.", + "operationId": "jobs-personio-feed", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", + "description": "Personio subdomain (careers URL)", + "in": "query", + "name": "company", "required": true, "type": "string", - "x-example": "product-handle" + "x-example": "getquin" }, { - "description": "Maximum products, defaults to 10 and supports up to 20", + "description": "Filter: department contains", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "department", + "type": "string" }, { - "description": "Recommendation intent. Allowed values: related, complementary", - "enum": [ - "related", - "complementary" - ], + "description": "Filter: location contains", "in": "query", - "name": "intent", - "type": "string", - "x-example": "related" + "name": "location", + "type": "string" + }, + { + "description": "Filter by remote (true or false)", + "in": "query", + "name": "remote", + "type": "boolean" } ], "produces": [ @@ -391501,7 +465731,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -391516,12 +465746,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -391534,42 +465758,67 @@ "ApiKeyAuth": [] } ], - "summary": "List Gymshark product recommendations", + "summary": "List a company's Personio job board", "tags": [ - "Gymshark" + "Jobs" ] } }, - "/gymshark/sitemap/urls": { + "/jobs/phenom/board": { "get": { "consumes": [ "application/json" ], - "description": "Lists URL entries from Gymshark's sitemaps, filtered by `type` (`all` by default, `products`, `collections`, `pages`, `blogs`, `agentic_discovery` or `other`) and capped by `limit` (default 50, max 250). Each has its `loc`, type, handle, last modified date, change frequency and any images.", - "operationId": "gymshark-sitemap-urls", + "description": "Searches a company's public Phenom People career site (a white-labeled domain such as careers.whataburger.com or jobs.cvshealth.com). domain is the tenant's careers domain from its careers URL. Paged via offset/limit; limit is a best-effort page-size hint some tenants ignore, so count always reflects what actually came back.", + "operationId": "jobs-phenom-board", "parameters": [ { - "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", + "description": "Phenom tenant careers domain (careers URL)", + "in": "query", + "name": "domain", + "required": true, + "type": "string", + "x-example": "careers.whataburger.com" + }, + { + "description": "Free-text keyword search", + "in": "query", + "name": "keywords", + "type": "string" + }, + { + "description": "Filter: location contains", + "in": "query", + "name": "location", + "type": "string" + }, + { + "description": "Filter: category contains", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Sort order, default relevant", "enum": [ - "all", - "products", - "collections", - "pages", - "blogs", - "agentic_discovery", - "other" + "relevant", + "recent" ], "in": "query", - "name": "type", - "type": "string", - "x-example": "products" + "name": "sort", + "type": "string" }, { - "description": "Maximum URL entries, defaults to 50 and supports up to 250", + "description": "Page offset, default 0", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "Page size hint, default 10, max 100 (some tenants ignore this and return their own configured page size regardless)", "in": "query", "name": "limit", - "type": "integer", - "x-example": 50 + "type": "integer" } ], "produces": [ @@ -391579,7 +465828,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -391588,12 +465837,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -391606,19 +465849,37 @@ "ApiKeyAuth": [] } ], - "summary": "List Gymshark sitemap URLs", + "summary": "Search a Phenom People tenant's job board", "tags": [ - "Gymshark" + "Jobs" ] } }, - "/gymshark/sitemaps": { + "/jobs/phenom/job": { "get": { "consumes": [ "application/json" ], - "description": "Lists the child sitemaps in Gymshark's sitemap index. Each entry has its `loc` and a type of `products`, `collections`, `pages`, `blogs`, `agentic_discovery` or `other`. The type is worked out from the sitemap URL.", - "operationId": "gymshark-sitemaps", + "description": "Returns a single Phenom People job with its full HTML/text description, category, and apply URL. domain is the tenant's careers domain (as in the board endpoint); id is the jobId/reqId from a board listing (e.g. JR10002958).", + "operationId": "jobs-phenom-job", + "parameters": [ + { + "description": "Phenom tenant careers domain", + "in": "query", + "name": "domain", + "required": true, + "type": "string", + "x-example": "careers.whataburger.com" + }, + { + "description": "Phenom job id from a board listing", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "JR10002958" + } + ], "produces": [ "application/json" ], @@ -391626,7 +465887,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" + "$ref": "#/definitions/jobs.jobResponseDoc" } }, "400": { @@ -391635,8 +465896,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -391653,19 +465914,29 @@ "ApiKeyAuth": [] } ], - "summary": "List Gymshark sitemaps", + "summary": "Get a single Phenom People job", "tags": [ - "Gymshark" + "Jobs" ] } }, - "/gymshark/store": { + "/jobs/pinpoint/board": { "get": { "consumes": [ "application/json" ], - "description": "Returns storefront metadata for Gymshark (https://row.gymshark.com). The storefront URL is fixed server-side, so no `url` parameter is accepted.", - "operationId": "gymshark-store", + "description": "Lists a tenant's public Pinpoint (pinpointhq.com) board postings with inline detail (full HTML description, key responsibilities, skills, and benefits, plus structured compensation when the tenant publishes a pay range). The company is the tenant subdomain from its careers URL https://{company}.pinpointhq.com/.", + "operationId": "jobs-pinpoint-board", + "parameters": [ + { + "description": "Pinpoint tenant subdomain (careers URL)", + "in": "query", + "name": "company", + "required": true, + "type": "string", + "x-example": "workwithus" + } + ], "produces": [ "application/json" ], @@ -391673,7 +465944,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.storeResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -391682,8 +465953,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -391700,24 +465971,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get Gymshark store metadata", + "summary": "List a tenant's Pinpoint job board", "tags": [ - "Gymshark" + "Jobs" ] } }, - "/hbr/article": { + "/jobs/recruitee/offer": { "get": { - "description": "Returns a public Harvard Business Review article's metadata and full body text from a canonical article URL. from_magazine flags articles originally published in the print magazine.", - "operationId": "hbr-article", + "consumes": [ + "application/json" + ], + "description": "Returns a single Recruitee offer with its full HTML/text description and structured compensation when the board exposes it.", + "operationId": "jobs-recruitee-offer", "parameters": [ { - "description": "Canonical hbr.org article URL", + "description": "Recruitee subdomain", "in": "query", - "name": "url", + "name": "company", "required": true, "type": "string", - "x-example": "https://hbr.org/2026/09/is-your-strategic-plan-too-ambitious-or-not-ambitious-enough" + "x-example": "bunq" + }, + { + "description": "Recruitee offer id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "2679762" } ], "produces": [ @@ -391727,7 +466009,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hbr.articleResponseDoc" + "$ref": "#/definitions/jobs.jobResponseDoc" } }, "400": { @@ -391742,12 +466024,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -391760,16 +466036,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get Harvard Business Review article content", + "summary": "Get a single Recruitee offer", "tags": [ - "Harvard Business Review" + "Jobs" ] } }, - "/hbr/categories": { + "/jobs/recruitee/offers": { "get": { - "description": "Returns Harvard Business Review's full public topic taxonomy, grouped into Subject, Industry, and Geography. Use a topic's slug directly as the topic parameter on hbr-topic.", - "operationId": "hbr-categories", + "consumes": [ + "application/json" + ], + "description": "Lists a company's public Recruitee offers (detail is inline), optionally filtered by department, location, or remote. The company is the Recruitee subdomain from its careers URL https://{company}.recruitee.com/.", + "operationId": "jobs-recruitee-offers", + "parameters": [ + { + "description": "Recruitee subdomain (careers URL)", + "in": "query", + "name": "company", + "required": true, + "type": "string", + "x-example": "bunq" + }, + { + "description": "Filter: department contains", + "in": "query", + "name": "department", + "type": "string" + }, + { + "description": "Filter: location contains", + "in": "query", + "name": "location", + "type": "string" + }, + { + "description": "Filter by remote (true or false)", + "in": "query", + "name": "remote", + "type": "boolean" + } + ], "produces": [ "application/json" ], @@ -391777,11 +466084,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hbr.categoriesResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -391798,16 +466111,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get Harvard Business Review topic taxonomy", + "summary": "List a company's Recruitee offers", "tags": [ - "Harvard Business Review" + "Jobs" ] } }, - "/hbr/headlines": { + "/jobs/rippling/board": { "get": { - "description": "Returns the latest items from Harvard Business Review's site-wide The Latest stream, with no parameters. Each item has its `title`, `url`, `summary`, `topic`, `content_type` (for example Digital Article), and `authors` and an `image_url` when available. Items carry no publication time.", - "operationId": "hbr-headlines", + "consumes": [ + "application/json" + ], + "description": "Lists a company's public Rippling board postings (thin listing — title, department, work location). The company is the Rippling board slug from its careers URL https://ats.rippling.com/{company}/jobs. Detail (full description, employment type) is fetched per job via the single-job endpoint.", + "operationId": "jobs-rippling-board", + "parameters": [ + { + "description": "Rippling board slug (careers URL)", + "in": "query", + "name": "company", + "required": true, + "type": "string", + "x-example": "rippling" + }, + { + "description": "Filter: department contains", + "in": "query", + "name": "department", + "type": "string" + }, + { + "description": "Filter: location contains", + "in": "query", + "name": "location", + "type": "string" + }, + { + "description": "Filter by remote (true or false)", + "in": "query", + "name": "remote", + "type": "boolean" + } + ], "produces": [ "application/json" ], @@ -391815,11 +466159,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hbr.headlinesResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -391836,24 +466186,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get Harvard Business Review latest headlines", + "summary": "List a company's Rippling job board", "tags": [ - "Harvard Business Review" + "Jobs" ] } }, - "/hbr/topic": { + "/jobs/rippling/job": { "get": { - "description": "Returns the newest public Harvard Business Review articles on one topic archive page. topic is a \"/\" value -- see hbr-categories for the full known value space.", - "operationId": "hbr-topic", + "consumes": [ + "application/json" + ], + "description": "Returns a single Rippling job with its full HTML/text description, employment type, and work locations. The id is the job uuid from a listing.", + "operationId": "jobs-rippling-job", "parameters": [ { - "description": "Harvard Business Review topic slug", + "description": "Rippling board slug", "in": "query", - "name": "topic", + "name": "company", "required": true, "type": "string", - "x-example": "subject/strategy" + "x-example": "rippling" + }, + { + "description": "Rippling job uuid", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "2f0674e6-f01f-4ecd-b459-e947241c211f" } ], "produces": [ @@ -391863,7 +466224,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hbr.topicResponseDoc" + "$ref": "#/definitions/jobs.jobResponseDoc" } }, "400": { @@ -391878,12 +466239,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -391896,27 +466251,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get Harvard Business Review topic archive", + "summary": "Get a single Rippling job", "tags": [ - "Harvard Business Review" + "Jobs" ] } }, - "/healthgrades/autocomplete": { + "/jobs/smartrecruiters/posting": { "get": { "consumes": [ "application/json" ], - "description": "Returns dynamic provider, specialty, condition, procedure, and other suggestions for a free-text query. Group categories vary with the query and are returned as data, not accepted as a closed enum.", - "operationId": "healthgrades-autocomplete", + "description": "Returns one SmartRecruiters posting, identified by the `company` id and posting `id`, both required. The response has the title, department, location, employment type, posting and apply URLs, posting date, compensation, and the job ad description as HTML and text. Recruiter personal data is left out. An unknown company or id returns `404`.", + "operationId": "jobs-smartrecruiters-posting", "parameters": [ { - "description": "Free-text provider, specialty, condition, or procedure query", + "description": "SmartRecruiters company id", "in": "query", - "name": "term", + "name": "company", "required": true, "type": "string", - "x-example": "orthopedic surgeon" + "x-example": "Visa" + }, + { + "description": "SmartRecruiters posting id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "744000133907678" } ], "produces": [ @@ -391926,7 +466289,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/healthgrades.suggestionsResponseDoc" + "$ref": "#/definitions/jobs.jobResponseDoc" } }, "400": { @@ -391935,8 +466298,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -391953,47 +466316,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get Healthgrades search suggestions", + "summary": "Get a single SmartRecruiters posting", "tags": [ - "Healthgrades" + "Jobs" ] } }, - "/healthgrades/facilities/filters": { + "/jobs/smartrecruiters/postings": { "get": { "consumes": [ "application/json" ], - "description": "Returns the sorts and filters for a Healthgrades facility search: distance values and, for hospitals, every specialty rating and award value accepted by /healthgrades/facilities/search.", - "operationId": "healthgrades-facilities-filters", + "description": "Lists a company's public SmartRecruiters postings, paged via limit/offset. The company is the SmartRecruiters identifier from its careers URL.", + "operationId": "jobs-smartrecruiters-postings", "parameters": [ { - "description": "Facility type", - "enum": [ - "hospital", - "pharmacy", - "group_practice", - "urgent_care" - ], + "description": "SmartRecruiters company id (careers URL)", "in": "query", - "name": "type", + "name": "company", "required": true, "type": "string", - "x-example": "hospital" + "x-example": "Visa" }, { - "description": "Optional facility name or keyword", + "description": "Page size, default 100, max 100", "in": "query", - "name": "query", - "type": "string" + "name": "limit", + "type": "integer" }, { - "description": "City and state, or ZIP code", + "description": "Page offset, default 0", "in": "query", - "name": "where", - "required": true, - "type": "string", - "x-example": "Boston, MA" + "name": "offset", + "type": "integer" } ], "produces": [ @@ -392003,7 +466358,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/healthgrades.facilityFiltersResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -392012,8 +466367,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -392030,96 +466385,45 @@ "ApiKeyAuth": [] } ], - "summary": "List Healthgrades facility search filters", + "summary": "List a company's SmartRecruiters postings", "tags": [ - "Healthgrades" + "Jobs" ] } }, - "/healthgrades/facilities/search": { + "/jobs/teamtailor/jobs": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of Healthgrades facility search results near a location for one facility type (hospital, pharmacy, group practice, or urgent care), with name, address, phone, distance, profile URL, affiliated provider and rating counts, hospital awards, and the filters available for the search. Requests use US egress because Healthgrades restricts content by region.", - "operationId": "healthgrades-facilities-search", + "description": "Lists a company's public Teamtailor board feed in the shared Job shape with detail inline, optionally filtered by department, location, or remote. The company is the Teamtailor subdomain from its careers URL https://{company}.teamtailor.com/.", + "operationId": "jobs-teamtailor-jobs", "parameters": [ { - "description": "Facility type", - "enum": [ - "hospital", - "pharmacy", - "group_practice", - "urgent_care" - ], - "in": "query", - "name": "type", - "required": true, - "type": "string", - "x-example": "hospital" - }, - { - "description": "Optional facility name or keyword", - "in": "query", - "name": "query", - "type": "string", - "x-example": "Mass General" - }, - { - "description": "City and state, or ZIP code", + "description": "Teamtailor subdomain (careers URL)", "in": "query", - "name": "where", + "name": "company", "required": true, "type": "string", - "x-example": "Boston, MA" - }, - { - "default": 1, - "description": "Result page (1-500, 20 results per page)", - "in": "query", - "name": "page", - "type": "integer" + "x-example": "oatly" }, { - "description": "Result order; patientsatisfaction is hospital-only and group_practice supports only distance", - "enum": [ - "bestmatch", - "distance", - "patientsatisfaction" - ], + "description": "Filter: department contains", "in": "query", - "name": "sort", + "name": "department", "type": "string" }, { - "description": "Search radius in miles", - "enum": [ - "0.5", - "1", - "5", - "10", - "25", - "50", - "100", - "national" - ], + "description": "Filter: location contains", "in": "query", - "name": "distance", + "name": "location", "type": "string" }, { - "description": "Hospital specialty-rating value from /healthgrades/facilities/filters (type=hospital only)", - "in": "query", - "name": "rating", - "type": "string", - "x-example": "Bowel Obstruction|BLO" - }, - { - "description": "Hospital award value from /healthgrades/facilities/filters (type=hospital only)", + "description": "Filter by remote (true or false)", "in": "query", - "name": "award", - "type": "string", - "x-example": "Critical Care Excellence Award|CCU" + "name": "remote", + "type": "boolean" } ], "produces": [ @@ -392129,7 +466433,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/healthgrades.facilitySearchResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -392138,8 +466442,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -392156,27 +466460,53 @@ "ApiKeyAuth": [] } ], - "summary": "Search Healthgrades hospitals, pharmacies, group practices, and urgent care", + "summary": "List a company's Teamtailor job board", "tags": [ - "Healthgrades" + "Jobs" ] } }, - "/healthgrades/facility": { + "/jobs/ukg/board": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Healthgrades pharmacy, urgent care center, or group practice profile; the type (pharmacy, urgent_care, or group_practice) is inferred from the URL. Pharmacies: opening hours, services (for example compounding, immunizations, Medicare), and nearby pharmacies. Urgent care centers: opening hours and aggregated visitor answers to amenity questions. Group practices: specialties, providers with specialty and rating, medical services offered, language services, office locations with phones and coordinates, FAQs, and nearby offices. All types include name, address, and phone. Patient-authored reviews are not returned. Requests use US egress because Healthgrades restricts content by region.", - "operationId": "healthgrades-facility", + "description": "Lists a UKG Pro Recruiting (formerly UltiPro) tenant's public opportunities, paged via limit/offset. tenant and board both come from the careers URL https://recruiting.ultipro.com/{tenant}/JobBoard/{board}. Each posting carries a brief description inline.", + "operationId": "jobs-ukg-board", "parameters": [ { - "description": "Healthgrades pharmacy, urgent care, or group practice profile URL from /healthgrades/facilities/search", + "description": "UKG tenant code (careers URL)", "in": "query", - "name": "url", + "name": "tenant", "required": true, "type": "string", - "x-example": "https://www.healthgrades.com/pharmacy/walgreens-12805-pas6pu" + "x-example": "BUI1004BMDI" + }, + { + "description": "UKG job-board UUID (careers URL)", + "in": "query", + "name": "board", + "required": true, + "type": "string", + "x-example": "6b442184-52a5-4635-8db5-5aa4bed2a563" + }, + { + "description": "Free-text keyword search", + "in": "query", + "name": "search", + "type": "string" + }, + { + "description": "Page size, default 25, max 50", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Page offset, default 0", + "in": "query", + "name": "offset", + "type": "integer" } ], "produces": [ @@ -392186,7 +466516,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/healthgrades.facilityResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -392195,18 +466525,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -392219,27 +466537,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Healthgrades pharmacy, urgent care, or group practice profile", + "summary": "List a UKG Pro Recruiting tenant's job board", "tags": [ - "Healthgrades" + "Jobs" ] } }, - "/healthgrades/health-article": { + "/jobs/workable/posting": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Healthgrades Health A-Z or drug article: headline, description, authors, medical reviewers, published and modified dates, image, the conditions the article is tagged with, and the article body as headed sections of paragraphs and lists. Works for standard, chaptered, and slideshow articles. Requests use US egress because Healthgrades restricts content by region.", - "operationId": "healthgrades-health-article", + "description": "Returns a single Workable posting with its full HTML/text description. The id is the posting shortcode from a listing.", + "operationId": "jobs-workable-posting", "parameters": [ { - "description": "Article URL from /healthgrades/health-articles", + "description": "Workable account slug", "in": "query", - "name": "url", + "name": "company", "required": true, "type": "string", - "x-example": "https://resources.healthgrades.com/drugs/atenolol" + "x-example": "zego" + }, + { + "description": "Workable posting shortcode", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "DBB0F9D146" } ], "produces": [ @@ -392249,7 +466575,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/healthgrades.healthArticleResponseDoc" + "$ref": "#/definitions/jobs.jobResponseDoc" } }, "400": { @@ -392264,12 +466590,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -392282,41 +466602,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Healthgrades Health A-Z article", + "summary": "Get a single Workable posting", "tags": [ - "Healthgrades" + "Jobs" ] } }, - "/healthgrades/health-articles": { + "/jobs/workable/postings": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a Healthgrades Health A-Z topic's articles (slug, URL, and last-modified date), most recently modified first, with total and total pages. Use topic=drugs for drug articles. Use an article URL with /healthgrades/health-article.", - "operationId": "healthgrades-health-articles", + "description": "Lists a company's public Workable postings in the shared Job shape, optionally filtered by department, location, or remote. The company is the Workable account slug from its careers URL https://apply.workable.com/{company}/. Detail (full description) is fetched per job via the single-posting endpoint.", + "operationId": "jobs-workable-postings", "parameters": [ { - "description": "Topic slug from /healthgrades/health-topics", + "description": "Workable account slug (careers URL)", "in": "query", - "name": "topic", + "name": "company", "required": true, "type": "string", - "x-example": "diabetes" + "x-example": "zego" }, { - "default": 1, - "description": "Page number, starting at 1", + "description": "Free-text search", "in": "query", - "name": "page", - "type": "integer" + "name": "search", + "type": "string" }, { - "default": 50, - "description": "Articles per page (1-200)", + "description": "Filter: department contains", "in": "query", - "name": "page_size", - "type": "integer" + "name": "department", + "type": "string" + }, + { + "description": "Filter: location contains", + "in": "query", + "name": "location", + "type": "string" + }, + { + "description": "Filter by remote (true or false)", + "in": "query", + "name": "remote", + "type": "boolean" } ], "produces": [ @@ -392326,7 +466656,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/healthgrades.healthArticlesResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, "400": { @@ -392341,12 +466671,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -392359,19 +466683,63 @@ "ApiKeyAuth": [] } ], - "summary": "List Healthgrades Health A-Z articles in a topic", + "summary": "List a company's Workable postings", "tags": [ - "Healthgrades" + "Jobs" ] } }, - "/healthgrades/health-topics": { + "/jobs/workday/board": { "get": { "consumes": [ "application/json" ], - "description": "Returns every topic of Healthgrades' Health A-Z library (conditions, body systems, treatments, and wellness topics) with its article count, last-modified date, and topic hub URL where one exists, plus the drugs topic for Healthgrades' drug articles. Use a slug with /healthgrades/health-articles.", - "operationId": "healthgrades-health-topics", + "description": "Lists a company's public Workday (CXS) postings, paged via limit/offset. tenant, datacenter (wd1/wd3/wd5/...), and site all come from the careers URL https://{tenant}.wd5.myworkdayjobs.com/{site}.", + "operationId": "jobs-workday-board", + "parameters": [ + { + "description": "Workday tenant", + "in": "query", + "name": "tenant", + "required": true, + "type": "string", + "x-example": "nvidia" + }, + { + "description": "Workday datacenter shard (wd1, wd3, wd5, ...)", + "in": "query", + "name": "datacenter", + "required": true, + "type": "string", + "x-example": "wd5" + }, + { + "description": "Workday career site", + "in": "query", + "name": "site", + "required": true, + "type": "string", + "x-example": "NVIDIAExternalCareerSite" + }, + { + "description": "Free-text search", + "in": "query", + "name": "search", + "type": "string" + }, + { + "description": "Page size, default 20, max 20", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Page offset, default 0", + "in": "query", + "name": "offset", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -392379,11 +466747,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/healthgrades.healthTopicsResponseDoc" + "$ref": "#/definitions/jobs.boardResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -392400,27 +466768,51 @@ "ApiKeyAuth": [] } ], - "summary": "List Healthgrades Health A-Z topics", + "summary": "List a Workday tenant's job board", "tags": [ - "Healthgrades" + "Jobs" ] } }, - "/healthgrades/hospital": { + "/jobs/workday/job": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Healthgrades hospital profile: hospital-wide and specialty awards with years, clinical outcome ratings by service line (procedure or condition, measure, outcome rating, and 1-5 stars), patient-experience measures with national comparisons, address, and phone. Patient-authored reviews are not returned. Requests use US egress because Healthgrades restricts content by region.", - "operationId": "healthgrades-hospital", + "description": "Returns a single Workday posting's full detail (description, location, req id). path is the externalPath from a board listing. tenant/datacenter/site as in the board endpoint.", + "operationId": "jobs-workday-job", "parameters": [ { - "description": "Healthgrades hospital profile URL from /healthgrades/facilities/search", + "description": "Workday tenant", "in": "query", - "name": "url", + "name": "tenant", "required": true, "type": "string", - "x-example": "https://www.healthgrades.com/hospital/massachusetts-general-hospital-60c282" + "x-example": "nvidia" + }, + { + "description": "Workday datacenter shard", + "in": "query", + "name": "datacenter", + "required": true, + "type": "string", + "x-example": "wd5" + }, + { + "description": "Workday career site", + "in": "query", + "name": "site", + "required": true, + "type": "string", + "x-example": "NVIDIAExternalCareerSite" + }, + { + "description": "Job externalPath from a board listing", + "in": "query", + "name": "path", + "required": true, + "type": "string", + "x-example": "/job/Israel-Tel-Aviv/Chip-Design-Engineer_JR2016289" } ], "produces": [ @@ -392430,7 +466822,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/healthgrades.hospitalResponseDoc" + "$ref": "#/definitions/jobs.jobResponseDoc" } }, "400": { @@ -392445,12 +466837,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -392463,145 +466849,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Healthgrades hospital profile", + "summary": "Get a single Workday job", "tags": [ - "Healthgrades" + "Jobs" ] } }, - "/healthgrades/hospital-awards": { + "/jumia/categories": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page (20 hospitals) of a Healthgrades hospital quality award list: America's Best Hospitals (top 50, 100, or 250), Specialty Excellence (by specialty, top 50 or 100), Patient Safety Excellence, Outstanding Patient Experience, Ob-Gyn Care, or Specialty State Rankings. Filter by year, state, city, specialty, and Ob-Gyn award type; sort by name or, with latitude and longitude, by distance. Each hospital includes its profile URL (for /healthgrades/hospital), address, coordinates, phone, and every award it holds with years. Read accepted filter values from /healthgrades/hospital-awards/filters. Requests use US egress because Healthgrades restricts content by region.", - "operationId": "healthgrades-hospital-awards", + "description": "Lists the category slugs that jumia-category accepts. Without category it returns the storefront's top-level departments; with category it returns that category's direct sub-categories, each with its numeric id. Walk the tree by passing a returned slug back as category. country is required; see jumia-countries. Jumia sits behind an anti-bot challenge that clears on only some connections, so a call can take up to about 50 seconds and may return 503; retry it.", + "operationId": "jumia-categories", "parameters": [ { - "description": "Award list", + "description": "Jumia country storefront", "enum": [ - "americas-best-hospitals", - "specialty-excellence-americas-best-care", - "patient-safety-excellence-award", - "outstanding-patient-experience-award", - "ob-gyn-care-excellence-awards", - "state-rankings" + "ci", + "eg", + "ke", + "ma", + "ng", + "sn" ], "in": "query", - "name": "award", + "name": "country", "required": true, "type": "string", - "x-example": "americas-best-hospitals" - }, - { - "description": "Award year from the filters (defaults to the latest)", - "in": "query", - "name": "year", - "type": "string", - "x-example": "2026" - }, - { - "description": "State slug from the filters", - "in": "query", - "name": "state", - "type": "string", - "x-example": "texas" + "x-example": "ng" }, { - "description": "City slug from the filters for the state (requires state)", + "description": "Category slug whose sub-categories to list; omit for top-level departments", "in": "query", - "name": "city", + "name": "category", "type": "string", - "x-example": "houston" - }, - { - "description": "America's Best Hospitals list size (award=americas-best-hospitals)", - "enum": [ - "top50", - "top100", - "top250" - ], - "in": "query", - "name": "list", - "type": "string" - }, - { - "description": "Specialty Excellence list size (award=specialty-excellence-americas-best-care)", - "enum": [ - "top50", - "top100" - ], - "in": "query", - "name": "list_category", - "type": "string" - }, - { - "description": "Specialty code (award=specialty-excellence-americas-best-care or state-rankings)", - "enum": [ - "BAR", - "CVO", - "CWS", - "PCI", - "NSG", - "CCU", - "GIO", - "GSO", - "ORJ", - "NSC", - "ORT", - "OJO", - "OOR", - "OBP", - "PRS", - "PUL", - "ORS", - "NEU", - "OVSC", - "VAS" - ], - "in": "query", - "name": "specialty", - "type": "string" - }, - { - "description": "Ob-Gyn award (award=ob-gyn-care-excellence-awards): GYS gynecologic surgery, LAB labor and delivery, OBG obstetrics and gynecology", - "enum": [ - "GYS", - "LAB", - "OBG" - ], - "in": "query", - "name": "ob_gyn_type", - "type": "string" - }, - { - "description": "Result order; distance requires latitude and longitude", - "enum": [ - "name", - "distance" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Latitude for distance sorting", - "in": "query", - "name": "latitude", - "type": "number" - }, - { - "description": "Longitude for distance sorting", - "in": "query", - "name": "longitude", - "type": "number" - }, - { - "default": 1, - "description": "Page number (20 hospitals per page)", - "in": "query", - "name": "page", - "type": "integer" + "x-example": "phones-tablets" } ], "produces": [ @@ -392611,7 +466891,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/healthgrades.hospitalAwardsResponseDoc" + "$ref": "#/definitions/jumia.categoriesResponseDoc" } }, "400": { @@ -392644,49 +466924,49 @@ "ApiKeyAuth": [] } ], - "summary": "List Healthgrades hospital award recipients", + "summary": "List Jumia categories", "tags": [ - "Healthgrades" + "Jumia" ] } }, - "/healthgrades/hospital-awards/filters": { + "/jumia/category": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the filter values Healthgrades offers for one hospital award list: list sizes, specialty codes, Ob-Gyn award types, award years, states with recipients, and (with a state) cities with recipient counts, plus the sort options. Each group's param names the /healthgrades/hospital-awards parameter that accepts its values.", - "operationId": "healthgrades-hospital-award-filters", + "description": "Browses one Jumia category listing by slug and returns the same product cards as jumia-search, plus the category's upstream total_count and a has_next flag. Take the slug from jumia-categories (top-level departments, or a department's sub-categories). Jumia serves at most 50 pages. Jumia sits behind an anti-bot challenge that clears on only some connections, so a call can take up to about 50 seconds and may return 503; retry it. country is required; see jumia-countries.", + "operationId": "jumia-category", "parameters": [ { - "description": "Award list", + "description": "Jumia country storefront", "enum": [ - "americas-best-hospitals", - "specialty-excellence-americas-best-care", - "patient-safety-excellence-award", - "outstanding-patient-experience-award", - "ob-gyn-care-excellence-awards", - "state-rankings" + "ci", + "eg", + "ke", + "ma", + "ng", + "sn" ], "in": "query", - "name": "award", + "name": "country", "required": true, "type": "string", - "x-example": "americas-best-hospitals" + "x-example": "ng" }, { - "description": "State slug, to list its cities", + "description": "Category slug from jumia-categories", "in": "query", - "name": "state", + "name": "category", + "required": true, "type": "string", - "x-example": "california" + "x-example": "phones-tablets" }, { - "description": "Award year", + "default": 1, + "description": "1-based result page, 1 to 50", "in": "query", - "name": "year", - "type": "string", - "x-example": "2026" + "maximum": 50, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -392696,7 +466976,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/healthgrades.hospitalAwardFiltersResponseDoc" + "$ref": "#/definitions/jumia.listingResponseDoc" } }, "400": { @@ -392729,29 +467009,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Healthgrades hospital award filters", + "summary": "Browse a Jumia category", "tags": [ - "Healthgrades" + "Jumia" ] } }, - "/healthgrades/locations": { + "/jumia/countries": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns location autocomplete suggestions for a city, state, ZIP code, or other free-text location. Private upstream metadata and coordinates are omitted.", - "operationId": "healthgrades-locations", - "parameters": [ - { - "description": "City, state, or ZIP code", - "in": "query", - "name": "term", - "required": true, - "type": "string", - "x-example": "Boston" - } - ], + "description": "Returns the Jumia country storefronts accepted by the country parameter on jumia-search, jumia-category and jumia-categories, with each storefront's domain and currency. Static metadata.", + "operationId": "jumia-countries", "produces": [ "application/json" ], @@ -392759,13 +467026,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/healthgrades.suggestionsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/jumia.countriesResponseDoc" } }, "429": { @@ -392773,12 +467034,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -392786,27 +467041,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Healthgrades location suggestions", + "summary": "List supported Jumia country storefronts", "tags": [ - "Healthgrades" + "Jumia" ] } }, - "/healthgrades/physician": { + "/jumia/product": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns public professional profile fields and practice locations for one Healthgrades physician. Patient-authored review text is not returned. Requests use US egress because Healthgrades restricts some content by region.", - "operationId": "healthgrades-physician", + "description": "Returns one Jumia product: name, brand, sku, images, price in the storefront's currency with original price and discount, availability, rating and rating count, category path, seller (name, id, score, followers, shipping speed), description, key features and the specification table. Pass the url returned by jumia-search or jumia-category; the storefront country is taken from the URL host. Jumia sits behind an anti-bot challenge that clears on only some connections, so a call can take up to about 50 seconds and may return 503; retry it. A product id Jumia no longer serves returns 404.", + "operationId": "jumia-product", "parameters": [ { - "description": "Canonical Healthgrades physician profile URL", + "description": "Absolute Jumia product URL from a search or category result", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.healthgrades.com/physician/dr-example-abcde" + "x-example": "https://www.jumia.com.ng/samsung-galaxy-a07-6.7-4gb-ram128gbgb-rom-black-418619812.html" } ], "produces": [ @@ -392816,7 +467068,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/healthgrades.physicianResponseDoc" + "$ref": "#/definitions/jumia.productResponseDoc" } }, "400": { @@ -392849,34 +467101,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Healthgrades physician profile", + "summary": "Get a Jumia product", "tags": [ - "Healthgrades" + "Jumia" ] } }, - "/healthgrades/physicians/filters": { + "/jumia/reviews": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns every filter available for a Healthgrades provider search at a location, with accepted values, labels, and result counts: insurers (with plan IDs), gender, distance, age, availability, language, patient rating, clinical focus, affiliated hospitals, practicing specialties, and affirming care. Insurer, language, clinical focus, hospital, and specialty values depend on the query and location. Each group's param names the /healthgrades/physicians/search parameter that accepts its values.", - "operationId": "healthgrades-physicians-filters", + "description": "Returns one page of a Jumia product's written, verified customer reviews (rating, title, text, date, first name of the author) with the rating summary: average rating, total ratings, total written reviews and the count of ratings per star. Reviews are 10 per page. A product with ratings but no written reviews returns an empty list with the summary. Pass the sku returned by jumia-search, jumia-category or jumia-product. Jumia sits behind an anti-bot challenge that clears on only some connections, so a call can take up to about 50 seconds and may return 503; retry it. country is required; see jumia-countries.", + "operationId": "jumia-reviews", "parameters": [ { - "description": "Specialty, condition, procedure, or provider name", + "description": "Jumia country storefront", + "enum": [ + "ci", + "eg", + "ke", + "ma", + "ng", + "sn" + ], "in": "query", - "name": "query", + "name": "country", "required": true, "type": "string", - "x-example": "Cardiology" + "x-example": "ng" }, { - "description": "City and state, or ZIP code", + "description": "Product sku", "in": "query", - "name": "where", + "name": "sku", + "required": true, "type": "string", - "x-example": "Boston, MA" + "x-example": "SA948MP6Z6LPDNAFAMZ" + }, + { + "default": 1, + "description": "1-based page of reviews, 10 per page", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -392886,7 +467153,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/healthgrades.physicianFiltersResponseDoc" + "$ref": "#/definitions/jumia.reviewsResponseDoc" } }, "400": { @@ -392895,6 +467162,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -392913,164 +467186,49 @@ "ApiKeyAuth": [] } ], - "summary": "List Healthgrades physician search filters", + "summary": "Get the reviews of a Jumia product", "tags": [ - "Healthgrades" + "Jumia" ] } }, - "/healthgrades/physicians/search": { + "/jumia/search": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of Healthgrades provider search results for a specialty, condition, procedure, or provider name near a location, with each provider's NPI, specialty, office, aggregate patient rating, accepted insurers, and profile URL, plus the filters available for the search. Closed-set filters accept the listed values; insurance, insurance_plan, language, clinical_focus, affiliated_hospital, and specialty accept values returned in the filters for the same query/where. List filters take comma-separated values. Requests use US egress because Healthgrades restricts content by region. Patient review text is not returned.", - "operationId": "healthgrades-physicians-search", + "description": "Searches a Jumia country storefront by keyword and returns one page of product cards with price in the storefront's currency, original price and discount, rating, brand, categories and badges, plus the upstream total_count and a has_next flag. Jumia serves at most 50 pages. A search with no matches returns an empty products list. Jumia sits behind an anti-bot challenge that clears on only some connections, so a call can take up to about 50 seconds and may return 503; retry it. country is required (there is no default storefront); see jumia-countries.", + "operationId": "jumia-search", "parameters": [ { - "description": "Specialty, condition, procedure, or provider name", + "description": "Jumia country storefront", + "enum": [ + "ci", + "eg", + "ke", + "ma", + "ng", + "sn" + ], "in": "query", - "name": "query", + "name": "country", "required": true, "type": "string", - "x-example": "Cardiology" + "x-example": "ng" }, { - "description": "City and state, or ZIP code", + "description": "Product search keyword", "in": "query", - "name": "where", + "name": "q", + "required": true, "type": "string", - "x-example": "Boston, MA" + "x-example": "wireless earbuds" }, { "default": 1, - "description": "Result page (1-500, 20 results per page)", + "description": "1-based result page, 1 to 50", "in": "query", + "maximum": 50, + "minimum": 1, "name": "page", "type": "integer" - }, - { - "default": "bestmatch", - "description": "Result order", - "enum": [ - "bestmatch", - "distance", - "ratings" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Provider gender", - "enum": [ - "F", - "M" - ], - "in": "query", - "name": "gender", - "type": "string" - }, - { - "description": "Search radius in miles", - "enum": [ - "1", - "5", - "10", - "25", - "50", - "100", - "national" - ], - "in": "query", - "name": "distance", - "type": "string" - }, - { - "description": "Comma-separated provider age bands", - "enum": [ - "*-40", - "41-50", - "51-60", - "61-70", - "71-*" - ], - "in": "query", - "name": "age", - "type": "string" - }, - { - "description": "Comma-separated availability filters", - "enum": [ - "today", - "tomorrow", - "nextTwoWeeks", - "online", - "acceptsNewPatients", - "telehealth" - ], - "in": "query", - "name": "availability", - "type": "string" - }, - { - "description": "Minimum patient-satisfaction stars (5 means exactly 5)", - "enum": [ - "1", - "2", - "3", - "4", - "5" - ], - "in": "query", - "name": "rating", - "type": "string" - }, - { - "description": "Comma-separated insurer codes from the insurance filter", - "in": "query", - "name": "insurance", - "type": "string", - "x-example": "HPY00006F7" - }, - { - "description": "Comma-separated plan IDs from an insurer's plans (requires insurance)", - "in": "query", - "name": "insurance_plan", - "type": "string", - "x-example": "HPT0000407" - }, - { - "description": "Comma-separated language codes from the language filter", - "in": "query", - "name": "language", - "type": "string", - "x-example": "spanish" - }, - { - "description": "Comma-separated clinical focus codes from the clinical_focus filter", - "in": "query", - "name": "clinical_focus", - "type": "string" - }, - { - "description": "Comma-separated hospital codes from the affiliated_hospital filter", - "in": "query", - "name": "affiliated_hospital", - "type": "string" - }, - { - "description": "Comma-separated practicing-specialty codes from the specialty filter", - "in": "query", - "name": "specialty", - "type": "string", - "x-example": "ps1027" - }, - { - "description": "Only providers marked LGBTQ+ affirming", - "in": "query", - "name": "affirming_care", - "type": "boolean" } ], "produces": [ @@ -393080,7 +467238,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/healthgrades.physicianSearchResponseDoc" + "$ref": "#/definitions/jumia.listingResponseDoc" } }, "400": { @@ -393107,147 +467265,57 @@ "ApiKeyAuth": [] } ], - "summary": "Search Healthgrades physicians", + "summary": "Search Jumia products", "tags": [ - "Healthgrades" + "Jumia" ] } }, - "/healthgrades/specialties": { + "/jumia/sitemap-urls": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns every specialty name and directory URL shown on Healthgrades' public A-Z specialty directory.", - "operationId": "healthgrades-specialties", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/healthgrades.specialtiesResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ + "description": "Returns one page of the URLs listed in a Jumia sitemap file, each with its last-modified date and first image, plus the total number of URLs in the file. A product file holds up to 16,000 product URLs; page through it with page and page_size (up to 5000). Take the file name from jumia-sitemaps. A page past the end returns an empty list. Jumia sits behind an anti-bot challenge that clears on only some connections, so a call can take up to about 50 seconds and may return 503; retry it. country is required; see jumia-countries.", + "operationId": "jumia-sitemap-urls", + "parameters": [ { - "ApiKeyAuth": [] - } - ], - "summary": "List Healthgrades physician specialties", - "tags": [ - "Healthgrades" - ] - } - }, - "/healthgrades/top-searches": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the popular specialty searches Healthgrades currently suggests, in `groups`. Each group has a category, a title such as Popular Healthcare Specialties, and suggestions with a label and value. The set changes over time and is not a fixed list.", - "operationId": "healthgrades-top-searches", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/healthgrades.suggestionsResponseDoc" - } + "description": "Jumia country storefront", + "enum": [ + "ci", + "eg", + "ke", + "ma", + "ng", + "sn" + ], + "in": "query", + "name": "country", + "required": true, + "type": "string", + "x-example": "ng" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Sitemap file name from jumia-sitemaps", + "in": "query", + "name": "sitemap", + "required": true, + "type": "string", + "x-example": "products-sitemap-9.xml.gz" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "List popular Healthgrades searches", - "tags": [ - "Healthgrades" - ] - } - }, - "/hermes/categories": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns every browsable Hermès category for a market: the category code hermes-category accepts, its display name, its page path and absolute URL, its parent code and its depth in the tree. This is the discovery endpoint for hermes-category's category parameter, so every accepted value is obtainable from this API rather than by reading the website. Editorial and story tiles that carry no browsable category page are excluded, so every code returned is one hermes-category will accept.", - "operationId": "hermes-categories", - "parameters": [ + "default": 1, + "description": "1-based page of URLs", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer" + }, { - "default": "us_en", - "description": "Market and language. One of: at_de, au_en, be_en, be_fr, br_pt, ca_en, ca_fr, ch_de, ch_fr, cz_en, de_de, dh_en, dk_en, es_es, fi_en, fr_fr, gr_en, hk_en, ie_en, it_it, jp_ja, kr_ko, lu_fr, mo_en, mx_es, my_en, nl_en, no_en, pl_en, pt_en, ri_en, se_en, sg_en, th_en, tw_zh, uk_en, us_en", - "enum": [ - "at_de", - "au_en", - "be_en", - "be_fr", - "br_pt", - "ca_en", - "ca_fr", - "ch_de", - "ch_fr", - "cz_en", - "de_de", - "dh_en", - "dk_en", - "es_es", - "fi_en", - "fr_fr", - "gr_en", - "hk_en", - "ie_en", - "it_it", - "jp_ja", - "kr_ko", - "lu_fr", - "mo_en", - "mx_es", - "my_en", - "nl_en", - "no_en", - "pl_en", - "pt_en", - "ri_en", - "se_en", - "sg_en", - "th_en", - "tw_zh", - "uk_en", - "us_en" - ], + "default": 1000, + "description": "URLs per page", "in": "query", - "name": "locale", - "type": "string" + "maximum": 5000, + "minimum": 1, + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -393257,7 +467325,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hermes.categoriesResponseDoc" + "$ref": "#/definitions/jumia.sitemapURLsResponseDoc" } }, "400": { @@ -393266,6 +467334,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -393284,93 +467358,44 @@ "ApiKeyAuth": [] } ], - "summary": "List Hermès category codes", + "summary": "Read the URLs in a Jumia sitemap file", "tags": [ - "Hermes" + "Jumia" ] } }, - "/hermes/category": { + "/jumia/sitemaps": { "get": { - "consumes": [ - "application/json" - ], - "description": "Browses one Hermès product category and returns a page of products (SKU, title, price with currency, colour, size, stock, images) plus the facet groups Hermès offers for that category, and the category's own title and description. The category parameter takes a category code from hermes-categories, which is the discovery endpoint for every accepted value. Page size is fixed at 48 by Hermès and cannot be changed. Prices are returned with the ISO-4217 currency for the selected market, since Hermès itself publishes bare numbers.", - "operationId": "hermes-category", + "description": "Lists the sitemap files a Jumia storefront publishes: product, brand, category and curated-page (mlps) files, each with its name, type, language, last-modified date and URL. Pass a returned name to jumia-sitemap-urls to read the URLs in it. Optionally narrow to one type. Jumia sits behind an anti-bot challenge that clears on only some connections, so a call can take up to about 50 seconds and may return 503; retry it. country is required; see jumia-countries.", + "operationId": "jumia-sitemaps", "parameters": [ { - "description": "Hermès category code, from hermes-categories", - "in": "query", - "name": "category", - "required": true, - "type": "string", - "x-example": "WOMEN_SHOES_SNEAKERS" - }, - { - "default": "relevance", - "description": "Result order. One of: relevance, priceasc, pricedsc. Non-default sorts are best-effort", + "description": "Jumia country storefront", "enum": [ - "relevance", - "priceasc", - "pricedsc" + "ci", + "eg", + "ke", + "ma", + "ng", + "sn" ], "in": "query", - "name": "sort", - "type": "string" + "name": "country", + "required": true, + "type": "string", + "x-example": "ng" }, { - "default": "us_en", - "description": "Market and language. One of: at_de, au_en, be_en, be_fr, br_pt, ca_en, ca_fr, ch_de, ch_fr, cz_en, de_de, dh_en, dk_en, es_es, fi_en, fr_fr, gr_en, hk_en, ie_en, it_it, jp_ja, kr_ko, lu_fr, mo_en, mx_es, my_en, nl_en, no_en, pl_en, pt_en, ri_en, se_en, sg_en, th_en, tw_zh, uk_en, us_en", + "description": "Only list one kind of sitemap", "enum": [ - "at_de", - "au_en", - "be_en", - "be_fr", - "br_pt", - "ca_en", - "ca_fr", - "ch_de", - "ch_fr", - "cz_en", - "de_de", - "dh_en", - "dk_en", - "es_es", - "fi_en", - "fr_fr", - "gr_en", - "hk_en", - "ie_en", - "it_it", - "jp_ja", - "kr_ko", - "lu_fr", - "mo_en", - "mx_es", - "my_en", - "nl_en", - "no_en", - "pl_en", - "pt_en", - "ri_en", - "se_en", - "sg_en", - "th_en", - "tw_zh", - "uk_en", - "us_en" + "products", + "brands", + "categories", + "mlps" ], "in": "query", - "name": "locale", + "name": "type", "type": "string" - }, - { - "default": 1, - "description": "One-based result page; page size is fixed at 48. Page 1 is fully validated; pages beyond 1 are best-effort and provisional", - "in": "query", - "minimum": 1, - "name": "page", - "type": "integer" } ], "produces": [ @@ -393380,7 +467405,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hermes.categoryResponseDoc" + "$ref": "#/definitions/jumia.sitemapsResponseDoc" } }, "400": { @@ -393407,73 +467432,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Hermès category", + "summary": "List the sitemap files of a Jumia storefront", "tags": [ - "Hermes" + "Jumia" ] } }, - "/hermes/product": { + "/justeat/restaurant": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Hermès product's full detail: title, description, dimensions, the Hermès colour name, country of manufacture, price with its market currency, stock, every product image, and the complete colour and size variant matrix with per-variant sku, price, stock and image. Care, gift and delivery text are returned as Hermès' own HTML fragments. sku accepts the reference-plus-colour form (H252013Z BM), the fuller listing sku that also carries size (H252013Z BM360), or the URL identifier returned by hermes-products (H252013ZvBM).", - "operationId": "hermes-product", + "description": "Returns one Just Eat restaurant by `unique_name`, the slug found in a search result. The response has the restaurant id, name, address, city, postal code, country, image, primary cuisine, rating and rating count, and `is_active`, which says whether it currently accepts orders. `rating` can read `0` even when the site shows one. An unknown `unique_name` returns `404`.", + "operationId": "justeat-restaurant", "parameters": [ { - "description": "Hermès product sku, in any of the accepted forms", + "description": "Restaurant slug, from a search response's unique_name field", "in": "query", - "name": "sku", + "name": "unique_name", "required": true, "type": "string", - "x-example": "H252013Z BM" - }, - { - "default": "us_en", - "description": "Market and language. One of: at_de, au_en, be_en, be_fr, br_pt, ca_en, ca_fr, ch_de, ch_fr, cz_en, de_de, dh_en, dk_en, es_es, fi_en, fr_fr, gr_en, hk_en, ie_en, it_it, jp_ja, kr_ko, lu_fr, mo_en, mx_es, my_en, nl_en, no_en, pl_en, pt_en, ri_en, se_en, sg_en, th_en, tw_zh, uk_en, us_en", - "enum": [ - "at_de", - "au_en", - "be_en", - "be_fr", - "br_pt", - "ca_en", - "ca_fr", - "ch_de", - "ch_fr", - "cz_en", - "de_de", - "dh_en", - "dk_en", - "es_es", - "fi_en", - "fr_fr", - "gr_en", - "hk_en", - "ie_en", - "it_it", - "jp_ja", - "kr_ko", - "lu_fr", - "mo_en", - "mx_es", - "my_en", - "nl_en", - "no_en", - "pl_en", - "pt_en", - "ri_en", - "se_en", - "sg_en", - "th_en", - "tw_zh", - "uk_en", - "us_en" - ], - "in": "query", - "name": "locale", - "type": "string" + "x-example": "mcdonalds-victorialondon" } ], "produces": [ @@ -393483,7 +467462,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hermes.productResponseDoc" + "$ref": "#/definitions/justeat.restaurantResponseDoc" } }, "400": { @@ -393498,12 +467477,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -393516,73 +467489,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Hermès product", + "summary": "Get one Just Eat restaurant's detail", "tags": [ - "Hermes" + "Just Eat" ] } }, - "/hermes/product/recommendations": { + "/justeat/restaurant/menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns the cross-sell shelves Hermès shows on a product page: \"keep exploring\" (similar items) and \"perfect partner\" (items styled with it), each a list of products with price, stock and image. Takes the same sku forms as hermes-product. A product Hermès offers no recommendations for returns an empty shelves list rather than an error.", - "operationId": "hermes-product-recommendations", + "description": "Returns one restaurant's full menu grouped into categories. Every item carries a name, description, image, price, and calorie/energy text when the upstream provides it. Items with customization options (e.g. \"Dip 1/2\") carry a modifier_groups list with each option's own price. Non-restaurant stores (groceries, alcohol, pharmacy, electronics, and similar) return every item under a single \"All items\" category rather than the site's own finer-grained grouping.", + "operationId": "justeat-restaurant-menu", "parameters": [ { - "description": "Hermès product sku, in any of the forms hermes-product accepts", + "description": "Restaurant slug, from a search response's unique_name field", "in": "query", - "name": "sku", + "name": "unique_name", "required": true, "type": "string", - "x-example": "H252013Z BM" - }, - { - "default": "us_en", - "description": "Market and language. One of: at_de, au_en, be_en, be_fr, br_pt, ca_en, ca_fr, ch_de, ch_fr, cz_en, de_de, dh_en, dk_en, es_es, fi_en, fr_fr, gr_en, hk_en, ie_en, it_it, jp_ja, kr_ko, lu_fr, mo_en, mx_es, my_en, nl_en, no_en, pl_en, pt_en, ri_en, se_en, sg_en, th_en, tw_zh, uk_en, us_en", - "enum": [ - "at_de", - "au_en", - "be_en", - "be_fr", - "br_pt", - "ca_en", - "ca_fr", - "ch_de", - "ch_fr", - "cz_en", - "de_de", - "dh_en", - "dk_en", - "es_es", - "fi_en", - "fr_fr", - "gr_en", - "hk_en", - "ie_en", - "it_it", - "jp_ja", - "kr_ko", - "lu_fr", - "mo_en", - "mx_es", - "my_en", - "nl_en", - "no_en", - "pl_en", - "pt_en", - "ri_en", - "se_en", - "sg_en", - "th_en", - "tw_zh", - "uk_en", - "us_en" - ], - "in": "query", - "name": "locale", - "type": "string" + "x-example": "mcdonalds-victorialondon" } ], "produces": [ @@ -393592,7 +467519,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hermes.recommendationsResponseDoc" + "$ref": "#/definitions/justeat.menuResponseDoc" } }, "400": { @@ -393607,12 +467534,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -393625,89 +467546,60 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Hermès product's recommended items", + "summary": "Get one Just Eat restaurant's menu with prices", "tags": [ - "Hermes" + "Just Eat" ] } }, - "/hermes/products": { + "/justeat/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of Hermès' full catalogue index for one market: each product's URL, slug, URL identifier and the date Hermès last modified it. Built from Hermès' own product sitemap, so it enumerates the entire catalogue for that market including items no category listing surfaces. Use changed_since to return only products added or updated on or after a date, which makes this a new-arrivals feed. The product_id is the identifier used in the product URL and is NOT the same string as the sku returned by hermes-category and hermes-search, which also encodes size.", - "operationId": "hermes-products", + "description": "Returns Just Eat's full restaurant listing for a UK postcode -- every restaurant the site's own area page carries, ordered as Just Eat's default \"best match\" sort presents them (or by sort_by, if set), not a curated subset. Each restaurant carries its unique_name (the value the restaurant and menu endpoints take), name, image, rating, delivery time window, and open-now status. A postcode with no coverage returns an empty list rather than an error.", + "operationId": "justeat-search", "parameters": [ { - "default": "us_en", - "description": "Market and language. One of: at_de, au_en, be_en, be_fr, br_pt, ca_en, ca_fr, ch_de, ch_fr, cz_en, de_de, dh_en, dk_en, es_es, fi_en, fr_fr, gr_en, hk_en, ie_en, it_it, jp_ja, kr_ko, lu_fr, mo_en, mx_es, my_en, nl_en, no_en, pl_en, pt_en, ri_en, se_en, sg_en, th_en, tw_zh, uk_en, us_en", - "enum": [ - "at_de", - "au_en", - "be_en", - "be_fr", - "br_pt", - "ca_en", - "ca_fr", - "ch_de", - "ch_fr", - "cz_en", - "de_de", - "dh_en", - "dk_en", - "es_es", - "fi_en", - "fr_fr", - "gr_en", - "hk_en", - "ie_en", - "it_it", - "jp_ja", - "kr_ko", - "lu_fr", - "mo_en", - "mx_es", - "my_en", - "nl_en", - "no_en", - "pl_en", - "pt_en", - "ri_en", - "se_en", - "sg_en", - "th_en", - "tw_zh", - "uk_en", - "us_en" - ], + "description": "UK postcode to search near", "in": "query", - "name": "locale", - "type": "string" + "name": "postcode", + "required": true, + "type": "string", + "x-example": "SW1A 1AA" }, { - "default": 1, - "description": "One-based result page", + "description": "Restaurants to return, clamped to 100 (default 20)", "in": "query", - "minimum": 1, - "name": "page", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 20 }, { - "default": 100, - "description": "Results per page, 1-500", + "collectionFormat": "multi", + "description": "Repeatable. Just Eat's own area-page filter slugs (e.g. open_now, or a cuisine tile's slug), passed through as-is and OR'd together. Also reaches non-restaurant categories -- groceries, alcohol, pharmacy, electronics, and more -- via the same mechanism, e.g. filter=groceries. The valid slug set is specific to the postcode you are searching -- call /justeat/search/filters with the same postcode for the current, complete, location-scoped list with live result counts. An unrecognized slug narrows to a smaller or empty result rather than erroring.", "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" + "items": { + "type": "string" + }, + "name": "filter", + "type": "array", + "x-example": "pizza" }, { - "description": "Return only products last modified on or after this YYYY-MM-DD date", + "description": "Result order, matching the area page's own Sort by control. Default best_match.", + "enum": [ + "best_match", + "review_rating", + "distance", + "delivery_time", + "minimum_order_value", + "delivery_fee" + ], "in": "query", - "name": "changed_since", + "name": "sort_by", "type": "string", - "x-example": "2026-09-01" + "x-example": "distance" } ], "produces": [ @@ -393717,7 +467609,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hermes.productsResponseDoc" + "$ref": "#/definitions/justeat.searchResponseDoc" } }, "400": { @@ -393726,12 +467618,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -393744,81 +467630,27 @@ "ApiKeyAuth": [] } ], - "summary": "List the Hermès catalogue index", + "summary": "Search Just Eat restaurants near a UK postcode", "tags": [ - "Hermes" + "Just Eat" ] } }, - "/hermes/search": { + "/justeat/search/filters": { "get": { "consumes": [ "application/json" ], - "description": "Searches the Hermès catalogue by keyword and returns a page of products in the same shape as hermes-category. A query Hermès has no match for returns total 0 with an empty products array: Hermès itself renders unrelated fallback recommendations on a no-results page, and those are deliberately not returned as results. When Hermès applies its own spelling correction the corrected term is reported in results_for. Page size is fixed at 48 by Hermès and cannot be changed.", - "operationId": "hermes-search", + "description": "Returns the exact filter slugs Just Eat's own area page currently offers for a UK postcode -- star-rating thresholds, boolean toggles (open_now, new, free_delivery, halal, vegan, ...), cuisine tiles (pizza, chinese, italian, ...), and non-restaurant top-nav verticals (groceries, alcohol, pharmacy, electronics, flowers, gifts, and more) alike -- each with the live count of restaurants it currently narrows this postcode's listing to. Every filter value is the literal string /justeat/search's repeatable filter parameter accepts. The slug set is genuinely postcode-dependent: a rural postcode's own area page offers fewer cuisine tiles than central London's, because Just Eat's own frontend never advertises a filter with zero local coverage -- call this endpoint again for a different postcode rather than assume one location's slug set applies everywhere.", + "operationId": "justeat-search-filters", "parameters": [ { - "description": "Search keyword", + "description": "UK postcode to look up", "in": "query", - "name": "query", + "name": "postcode", "required": true, "type": "string", - "x-example": "scarf" - }, - { - "default": "us_en", - "description": "Market and language. One of: at_de, au_en, be_en, be_fr, br_pt, ca_en, ca_fr, ch_de, ch_fr, cz_en, de_de, dh_en, dk_en, es_es, fi_en, fr_fr, gr_en, hk_en, ie_en, it_it, jp_ja, kr_ko, lu_fr, mo_en, mx_es, my_en, nl_en, no_en, pl_en, pt_en, ri_en, se_en, sg_en, th_en, tw_zh, uk_en, us_en", - "enum": [ - "at_de", - "au_en", - "be_en", - "be_fr", - "br_pt", - "ca_en", - "ca_fr", - "ch_de", - "ch_fr", - "cz_en", - "de_de", - "dh_en", - "dk_en", - "es_es", - "fi_en", - "fr_fr", - "gr_en", - "hk_en", - "ie_en", - "it_it", - "jp_ja", - "kr_ko", - "lu_fr", - "mo_en", - "mx_es", - "my_en", - "nl_en", - "no_en", - "pl_en", - "pt_en", - "ri_en", - "se_en", - "sg_en", - "th_en", - "tw_zh", - "uk_en", - "us_en" - ], - "in": "query", - "name": "locale", - "type": "string" - }, - { - "default": 1, - "description": "One-based result page; page size is fixed at 48. Page 1 is fully validated; pages beyond 1 are best-effort and provisional", - "in": "query", - "minimum": 1, - "name": "page", - "type": "integer" + "x-example": "SW1A 1AA" } ], "produces": [ @@ -393828,7 +467660,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hermes.searchResponseDoc" + "$ref": "#/definitions/justeat.filtersResponseDoc" } }, "400": { @@ -393837,12 +467669,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -393855,79 +467681,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Hermès catalogue", + "summary": "Get Just Eat's live filter slug catalog for a UK postcode", "tags": [ - "Hermes" + "Just Eat" ] } }, - "/hermes/stores": { + "/justwatch/age-certifications": { "get": { "consumes": [ "application/json" ], - "description": "Returns Hermès' worldwide store directory: name, street address, city, postal code, country, geographic coordinates, phone, displayed opening hours, whether in-store appointments are offered, and store photos. Optionally narrowed to one country (by name or ISO-2 code) or city. Hermès publishes the same worldwide directory for every market, so locale selects the language names are returned in rather than which stores are listed.", - "operationId": "hermes-stores", + "description": "Lists the JustWatch age certification technical names for a country, such as `PG-13` for the US. `country` is a two-letter code and defaults to `US`. An invalid country returns `400`, and an unexpectedly empty result returns `503`.", + "operationId": "justwatch-age-certifications", "parameters": [ { - "default": "us_en", - "description": "Market and language. One of: at_de, au_en, be_en, be_fr, br_pt, ca_en, ca_fr, ch_de, ch_fr, cz_en, de_de, dh_en, dk_en, es_es, fi_en, fr_fr, gr_en, hk_en, ie_en, it_it, jp_ja, kr_ko, lu_fr, mo_en, mx_es, my_en, nl_en, no_en, pl_en, pt_en, ri_en, se_en, sg_en, th_en, tw_zh, uk_en, us_en", - "enum": [ - "at_de", - "au_en", - "be_en", - "be_fr", - "br_pt", - "ca_en", - "ca_fr", - "ch_de", - "ch_fr", - "cz_en", - "de_de", - "dh_en", - "dk_en", - "es_es", - "fi_en", - "fr_fr", - "gr_en", - "hk_en", - "ie_en", - "it_it", - "jp_ja", - "kr_ko", - "lu_fr", - "mo_en", - "mx_es", - "my_en", - "nl_en", - "no_en", - "pl_en", - "pt_en", - "ri_en", - "se_en", - "sg_en", - "th_en", - "tw_zh", - "uk_en", - "us_en" - ], - "in": "query", - "name": "locale", - "type": "string" - }, - { - "description": "Case-insensitive country filter, matched against the country name or its ISO-2 code", + "default": "US", + "description": "Two-letter country code", "in": "query", "name": "country", "type": "string", - "x-example": "France" - }, - { - "description": "Case-insensitive city filter", - "in": "query", - "name": "city", - "type": "string", - "x-example": "Paris" + "x-example": "US" } ], "produces": [ @@ -393937,7 +467711,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hermes.storesResponseDoc" + "$ref": "#/definitions/justwatch.ageCertificationsResponseDoc" } }, "400": { @@ -393964,72 +467738,104 @@ "ApiKeyAuth": [] } ], - "summary": "List Hermès stores", + "summary": "Get JustWatch age certifications", "tags": [ - "Hermes" + "JustWatch" ] } }, - "/hermes/suggest": { + "/justwatch/discover": { "get": { "consumes": [ "application/json" ], - "description": "Returns Hermès' own search-box autocomplete for a partial term: matching categories with the number of items behind each, and matching products. The category codes returned are the same codes hermes-category accepts, so a suggestion feeds straight into a category browse. An empty query is supported and returns Hermès' default suggestions rather than an error.", - "operationId": "hermes-suggest", + "description": "Returns popular movies and shows filtered by optional genre short names, provider short names, production countries, monetization types, and release year bounds. Combine `providers` with `production_countries` to build charts such as most popular Korean or Japanese titles on a given service. Type accepts only `all`, `movie`, or `show`; monetization_types accepts only `FLATRATE`, `FREE`, `ADS`, `RENT`, or `BUY`.", + "operationId": "justwatch-discover", "parameters": [ { - "description": "Partial search term; may be empty for Hermès' default suggestions", + "default": "US", + "description": "Two-letter country code", "in": "query", - "name": "query", + "name": "country", "type": "string", - "x-example": "bel" + "x-example": "US" }, { - "default": "us_en", - "description": "Market and language. One of: at_de, au_en, be_en, be_fr, br_pt, ca_en, ca_fr, ch_de, ch_fr, cz_en, de_de, dh_en, dk_en, es_es, fi_en, fr_fr, gr_en, hk_en, ie_en, it_it, jp_ja, kr_ko, lu_fr, mo_en, mx_es, my_en, nl_en, no_en, pl_en, pt_en, ri_en, se_en, sg_en, th_en, tw_zh, uk_en, us_en", + "default": "en", + "description": "Two-letter language code", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" + }, + { + "description": "Maximum results, defaults to 20 and clamps to 50", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + }, + { + "default": "all", + "description": "Title type: all, movie, show", "enum": [ - "at_de", - "au_en", - "be_en", - "be_fr", - "br_pt", - "ca_en", - "ca_fr", - "ch_de", - "ch_fr", - "cz_en", - "de_de", - "dh_en", - "dk_en", - "es_es", - "fi_en", - "fr_fr", - "gr_en", - "hk_en", - "ie_en", - "it_it", - "jp_ja", - "kr_ko", - "lu_fr", - "mo_en", - "mx_es", - "my_en", - "nl_en", - "no_en", - "pl_en", - "pt_en", - "ri_en", - "se_en", - "sg_en", - "th_en", - "tw_zh", - "uk_en", - "us_en" + "all", + "movie", + "show" ], "in": "query", - "name": "locale", - "type": "string" + "name": "type", + "type": "string", + "x-example": "all" + }, + { + "description": "Comma-separated JustWatch genre short names", + "in": "query", + "name": "genres", + "type": "string", + "x-example": "act,scf" + }, + { + "description": "Comma-separated JustWatch provider short names", + "in": "query", + "name": "providers", + "type": "string", + "x-example": "nfx,amp" + }, + { + "description": "Comma-separated two-letter ISO production-country codes", + "in": "query", + "name": "production_countries", + "type": "string", + "x-example": "KR,JP" + }, + { + "description": "Comma-separated monetization types: FLATRATE, FREE, ADS, RENT, BUY", + "enum": [ + "FLATRATE", + "FREE", + "ADS", + "RENT", + "BUY" + ], + "in": "query", + "name": "monetization_types", + "type": "string", + "x-example": "FLATRATE,FREE" + }, + { + "description": "Minimum release year", + "in": "query", + "name": "year_min", + "type": "integer", + "x-example": 2020 + }, + { + "description": "Maximum release year", + "in": "query", + "name": "year_max", + "type": "integer", + "x-example": 2026 } ], "produces": [ @@ -394039,7 +467845,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hermes.suggestResponseDoc" + "$ref": "#/definitions/justwatch.discoverResponseDoc" } }, "400": { @@ -394066,24 +467872,43 @@ "ApiKeyAuth": [] } ], - "summary": "Hermès search suggestions", + "summary": "Discover JustWatch titles", "tags": [ - "Hermes" + "JustWatch" ] } }, - "/hindustantimes/article": { + "/justwatch/episode/by-id": { "get": { - "description": "Returns public Hindustan Times article metadata and body paragraphs from a canonical article URL. A story Hindustan Times marks subscriber-only (chiefly syndicated Wall Street Journal / The Economist partner content) returns a permission error instead of a body.", - "operationId": "hindustantimes-article", + "consumes": [ + "application/json" + ], + "description": "Looks up one JustWatch episode by its raw `id` (`tse` followed by digits, such as `tse5550494`), in the `country` (default `US`) and `language` (default `en`) you choose. Returns the title, year, episode number, description, poster, paths, and streaming offers with provider, monetization type, presentation type, price and currency. A valid id with no match returns `404`.", + "operationId": "justwatch-episode-by-id", "parameters": [ { - "description": "Canonical Hindustan Times article URL", + "description": "Raw JustWatch episode id matching tse[0-9]+", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "tse5550494" + }, + { + "default": "US", + "description": "Two-letter country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + }, + { + "default": "en", + "description": "Two-letter language code", "in": "query", - "name": "url", - "required": true, + "name": "language", "type": "string", - "x-example": "https://www.hindustantimes.com/india-news/example-article-slug-101790241314039.html" + "x-example": "en" } ], "produces": [ @@ -394093,7 +467918,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/justwatch.episodeByIDResponseDoc" } }, "400": { @@ -394102,14 +467927,14 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -394126,24 +467951,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get Hindustan Times article content", + "summary": "Get JustWatch episode by raw id", "tags": [ - "Hindustan Times" + "JustWatch" ] } }, - "/hindustantimes/author": { + "/justwatch/episode/offers": { "get": { - "description": "Returns a Hindustan Times author's byline metadata, biography, contact/social links, and their most recent articles (the first page only) from a canonical author URL.", - "operationId": "hindustantimes-author", + "consumes": [ + "application/json" + ], + "description": "Returns the streaming offers for one JustWatch episode `id` (`tse` followed by digits) across one to five comma-separated country codes in `countries` (default `US`), with `language` defaulting to `en`. Each country entry lists offers by provider, monetization type, presentation type, price and currency, with the episode details. An unknown id returns `404`.", + "operationId": "justwatch-episode-offers", "parameters": [ { - "description": "Canonical Hindustan Times author URL", + "description": "Raw JustWatch episode id matching tse[0-9]+", "in": "query", - "name": "url", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.hindustantimes.com/author/ht-news-desk-101650005059496" + "x-example": "tse5550494" + }, + { + "default": "US", + "description": "One to five comma-separated two-letter country codes", + "in": "query", + "name": "countries", + "type": "string", + "x-example": "US,GB" + }, + { + "default": "en", + "description": "Two-letter language code", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -394153,7 +467997,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.hindustanTimesAuthorResponseDoc" + "$ref": "#/definitions/justwatch.episodeOffersResponseDoc" } }, "400": { @@ -394168,6 +468012,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -394180,50 +468030,63 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Hindustan Times author profile", + "summary": "Get JustWatch episode offers", "tags": [ - "Hindustan Times" + "JustWatch" ] } }, - "/hindustantimes/headlines": { + "/justwatch/genre/titles": { "get": { - "description": "Returns current Hindustan Times headlines for one section. `section` is required and takes one of 24 slugs such as `india-news`, `world-news`, `cricket`, `business`, `htcity` or `editorials`. Each item has its title, URL, summary, author, publication time and image where the site provides them.", - "operationId": "hindustantimes-headlines", + "consumes": [ + "application/json" + ], + "description": "Lists popular JustWatch titles for one genre short name in `genre`, such as `act`. `type` is `all`, `movie` or `show` (default `all`), `limit` defaults to 20 and is capped at 50, and `country` and `language` default to `US` and `en`. Each title has its id, year, path, poster, production countries and offers. Find genre names with the genres endpoint.", + "operationId": "justwatch-genre-titles", "parameters": [ { - "description": "Hindustan Times section slug", + "description": "JustWatch genre short name", + "in": "query", + "name": "genre", + "required": true, + "type": "string", + "x-example": "act" + }, + { + "default": "US", + "description": "Two-letter country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + }, + { + "default": "en", + "description": "Two-letter language code", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" + }, + { + "description": "Maximum results, defaults to 20 and clamps to 50", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + }, + { + "default": "all", + "description": "Title type: all, movie, show", "enum": [ - "india-news", - "world-news", - "cities", - "business", - "sports", - "cricket", - "entertainment", - "lifestyle", - "astrology", - "education", - "technology", - "opinion", - "science", - "books", - "real-estate", - "car-bike", - "nri", - "htcity", - "ht-insight", - "ht-explainers", - "editorials", - "trending", - "india-and-the-elections", - "editors-pick" + "all", + "movie", + "show" ], "in": "query", - "name": "section", - "required": true, + "name": "type", "type": "string", - "x-example": "india-news" + "x-example": "all" } ], "produces": [ @@ -394233,7 +468096,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/justwatch.genreTitlesResponseDoc" } }, "400": { @@ -394242,38 +468105,6 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Hindustan Times section headlines", - "tags": [ - "Hindustan Times" - ] - } - }, - "/hindustantimes/news": { - "get": { - "description": "Returns Hindustan Times' current top stories from its Latest News listing, with no parameters. Each item has its title, URL, summary, author, publication time and image where available.", - "operationId": "hindustantimes-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -394292,58 +468123,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Hindustan Times top stories", - "tags": [ - "Hindustan Times" - ] - } - }, - "/hindustantimes/sections": { - "get": { - "description": "Lists the 24 Hindustan Times sections accepted by `hindustantimes-headlines`, including `india-news`, `world-news`, `cricket`, `real-estate`, `nri` and `editors-pick`. Each entry has a `slug`, display `name` and section `url`. Takes no parameters.", - "operationId": "hindustantimes-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Hindustan Times sections", + "summary": "Get JustWatch genre titles", "tags": [ - "Hindustan Times" + "JustWatch" ] } }, - "/hm/categories": { + "/justwatch/genres": { "get": { "consumes": [ "application/json" ], - "description": "Returns H&M's own storefront category navigation, department by department: every direct nav item and subcategory currently shown in the site's own menu, with its display name and storefront URL. Where this build has separately verified the value against hm-listing's own category_id parameter, that id is included too; category_id is omitted for entries not yet verified rather than guessed, since the visible category label is confirmed NOT a reliable way to derive H&M's real listing category ids for every category. department, when given, filters the result to one department.", - "operationId": "hm-categories", + "description": "Lists the JustWatch genres, each with its `short_name` (such as `act`) and a translated name in the `language` you choose (two-letter code, default `en`). Use the short names as the `genre` input of the genre titles endpoint. An invalid language returns `400`.", + "operationId": "justwatch-genres", "parameters": [ { - "description": "Filter to one storefront department", - "enum": [ - "women", - "men", - "kids", - "home", - "beauty" - ], + "default": "en", + "description": "Two-letter language code", "in": "query", - "name": "department", - "type": "string" + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -394353,7 +468153,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hm.categoriesResponseDoc" + "$ref": "#/definitions/justwatch.genresResponseDoc" } }, "400": { @@ -394380,59 +468180,70 @@ "ApiKeyAuth": [] } ], - "summary": "Browse H&M's storefront category navigation", + "summary": "Get JustWatch genres", "tags": [ - "H&M" + "JustWatch" ] } }, - "/hm/listing": { + "/justwatch/monetization/titles": { "get": { "consumes": [ "application/json" ], - "description": "Returns one H&M category's product listing page: products with pricing, images, colors, and per-size stock. category_id is an H&M category slug (e.g. ladies_newarrivals_all, men_newarrivals_all, ladies_jeans) -- there is no category/nav-tree discovery endpoint, so category_id values come from known H&M storefront paths rather than a lookup call. Pagination is page-based and real: requesting a page beyond the category's real last page returns a normal response with an empty products array rather than an error.", - "operationId": "hm-listing", + "description": "Returns popular titles for one monetization type. monetization_type accepts only `FLATRATE`, `FREE`, `ADS`, `RENT`, or `BUY`; type accepts only `all`, `movie`, or `show`.", + "operationId": "justwatch-monetization-titles", "parameters": [ { - "description": "H&M category slug", + "description": "Monetization type: FLATRATE, FREE, ADS, RENT, BUY", + "enum": [ + "FLATRATE", + "FREE", + "ADS", + "RENT", + "BUY" + ], "in": "query", - "name": "category_id", + "name": "monetization_type", "required": true, "type": "string", - "x-example": "ladies_newarrivals_all" + "x-example": "FLATRATE" }, { - "description": "Page number, one-based, defaults to 1", + "default": "US", + "description": "Two-letter country code", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "country", + "type": "string", + "x-example": "US" }, { - "description": "Results per page, 1 to 72, defaults to 36", + "default": "en", + "description": "Two-letter language code", "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 36 + "name": "language", + "type": "string", + "x-example": "en" }, { - "description": "Sort order, defaults to RELEVANCE", - "enum": [ - "RELEVANCE", - "NEWEST_FIRST", - "PRICE_ASCENDING", - "PRICE_DESCENDING" - ], + "description": "Maximum results, defaults to 20 and clamps to 50", "in": "query", - "name": "sort", - "type": "string" + "name": "limit", + "type": "integer", + "x-example": 20 }, { - "description": "Optional filter for newly added items only", + "default": "all", + "description": "Title type: all, movie, show", + "enum": [ + "all", + "movie", + "show" + ], "in": "query", - "name": "is_new", - "type": "boolean" + "name": "type", + "type": "string", + "x-example": "all" } ], "produces": [ @@ -394442,7 +468253,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hm.listingResponseDoc" + "$ref": "#/definitions/justwatch.monetizationTitlesResponseDoc" } }, "400": { @@ -394469,27 +468280,55 @@ "ApiKeyAuth": [] } ], - "summary": "Browse an H&M category's product listing", + "summary": "Get JustWatch monetization titles", "tags": [ - "H&M" + "JustWatch" ] } }, - "/hm/product/{product_id}": { + "/justwatch/new": { "get": { "consumes": [ "application/json" ], - "description": "Returns one H&M product's full detail: every purchasable color grouped with its own per-size price and live availability, plus an aggregate rating and real customer reviews (author label, date, body, rating, and any fit-feedback tags the reviewer left, such as \"True to Size\") when the product has any. This data is not available from hm-listing or hm-search, which only carry one representative price and a per-color stock count. product_id is the numeric id from a listing/search result's id field or its url field's productpage..html segment. An unrecognized product_id returns 404.", - "operationId": "hm-product", + "description": "Returns newly available movies and shows. Type accepts only `all`, `movie`, or `show`; limit defaults to 20 and clamps to 50.", + "operationId": "justwatch-new", "parameters": [ { - "description": "Numeric H&M product id, from a listing/search result's id field", - "in": "path", - "name": "product_id", - "required": true, + "default": "US", + "description": "Two-letter country code", + "in": "query", + "name": "country", "type": "string", - "x-example": "1268470004" + "x-example": "US" + }, + { + "default": "en", + "description": "Two-letter language code", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" + }, + { + "description": "Maximum results, defaults to 20 and clamps to 50", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + }, + { + "default": "all", + "description": "Title type: all, movie, show", + "enum": [ + "all", + "movie", + "show" + ], + "in": "query", + "name": "type", + "type": "string", + "x-example": "all" } ], "produces": [ @@ -394499,7 +468338,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hm.productDetailResponseDoc" + "$ref": "#/definitions/justwatch.newTitlesResponseDoc" } }, "400": { @@ -394508,12 +468347,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -394532,27 +468365,62 @@ "ApiKeyAuth": [] } ], - "summary": "Get an H&M product's full detail", + "summary": "Get new JustWatch titles", "tags": [ - "H&M" + "JustWatch" ] } }, - "/hm/product/{product_id}/related": { + "/justwatch/popular": { "get": { "consumes": [ "application/json" ], - "description": "Returns every product-detail recommendation list H&M's own app shows for one product (which lists are present genuinely varies by product -- for example \"more from series\" and \"style with\" appear only when the product has one, while \"alternatives\" and \"upsell\" are more consistently present). An unrecognized product_id returns a well-formed empty result rather than an error.", - "operationId": "hm-product-related", + "description": "Returns popular movies and shows. Type accepts only `all`, `movie`, or `show`; limit defaults to 20 and clamps to 50.", + "operationId": "justwatch-popular", "parameters": [ { - "description": "Numeric H&M product id, from a listing/search result's id field", - "in": "path", - "name": "product_id", - "required": true, + "default": "US", + "description": "Two-letter country code", + "in": "query", + "name": "country", "type": "string", - "x-example": "1268470004" + "x-example": "US" + }, + { + "default": "en", + "description": "Two-letter language code", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" + }, + { + "description": "Maximum results, defaults to 20 and clamps to 50", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + }, + { + "default": "all", + "description": "Title type: all, movie, show", + "enum": [ + "all", + "movie", + "show" + ], + "in": "query", + "name": "type", + "type": "string", + "x-example": "all" + }, + { + "description": "Opaque next_cursor from the prior response; omit for the first page", + "in": "query", + "name": "cursor", + "type": "string", + "x-example": "MQ==" } ], "produces": [ @@ -394562,7 +468430,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hm.relatedResponseDoc" + "$ref": "#/definitions/justwatch.popularResponseDoc" } }, "400": { @@ -394589,41 +468457,63 @@ "ApiKeyAuth": [] } ], - "summary": "Get an H&M product's related items", + "summary": "Get popular JustWatch titles", "tags": [ - "H&M" + "JustWatch" ] } }, - "/hm/search": { + "/justwatch/provider/titles": { "get": { "consumes": [ "application/json" ], - "description": "Runs a free-text keyword search on H&M and returns products with pricing, images, colors, and per-size stock, plus search-quality metadata (a spelling-correction suggestion, related searches, and a content-filter flag). Unlike category browsing, an obscure or nonsense keyword returns a genuine empty result (zero products) rather than a fallback set. Pagination is page-based and real: requesting a page beyond the real last page returns a normal response with an empty products array rather than an error.", - "operationId": "hm-search", + "description": "Returns popular movies and shows available on one streaming provider, by JustWatch provider short name such as `nfx`, for a country (default `US`) and language (default `en`). Filter to movies or shows with `type` and cap results with `limit` (default 20, max 50). Each title has its name, year, type, poster, JustWatch URL and offers with price, currency and monetization type.", + "operationId": "justwatch-provider-titles", "parameters": [ { - "description": "Free-text search keyword", + "description": "JustWatch provider short name", "in": "query", - "name": "query", + "name": "provider", "required": true, "type": "string", - "x-example": "jeans" + "x-example": "nfx" }, { - "description": "Page number, one-based, defaults to 1", + "default": "US", + "description": "Two-letter country code", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "country", + "type": "string", + "x-example": "US" }, { - "description": "Results per page, 1 to 72, defaults to 36", + "default": "en", + "description": "Two-letter language code", "in": "query", - "name": "page_size", + "name": "language", + "type": "string", + "x-example": "en" + }, + { + "description": "Maximum results, defaults to 20 and clamps to 50", + "in": "query", + "name": "limit", "type": "integer", - "x-example": 36 + "x-example": 20 + }, + { + "default": "all", + "description": "Title type: all, movie, show", + "enum": [ + "all", + "movie", + "show" + ], + "in": "query", + "name": "type", + "type": "string", + "x-example": "all" } ], "produces": [ @@ -394633,7 +468523,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hm.searchResponseDoc" + "$ref": "#/definitions/justwatch.providerTitlesResponseDoc" } }, "400": { @@ -394660,26 +468550,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search H&M product listings by free-text keyword", + "summary": "Get JustWatch provider titles", "tags": [ - "H&M" + "JustWatch" ] } }, - "/hm/search/suggestions": { + "/justwatch/providers": { "get": { "consumes": [ "application/json" ], - "description": "Returns H&M's own search-box typeahead suggestions. When query is given, returns spelling-complete phrase suggestions and merchandised content results. When query is omitted or empty, instead returns trending searches and popular-search shortcuts (phrase/content suggestions are both empty in that mode). search_history is not session-scoped -- it returns the identical list for every request, so treat it as fixed default content rather than a real per-caller history.", - "operationId": "hm-search-suggestions", + "description": "Lists the streaming providers JustWatch tracks in a country. `country` is a two-letter code and defaults to `US`. Each provider has its id, clear name, short name, technical name and an absolute icon URL. An invalid country returns `400`.", + "operationId": "justwatch-providers", "parameters": [ { - "description": "Free-text search-box input; omit or leave empty for trending/popular searches instead", + "default": "US", + "description": "Two-letter country code", "in": "query", - "name": "query", + "name": "country", "type": "string", - "x-example": "jean" + "x-example": "US" } ], "produces": [ @@ -394689,7 +468580,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hm.suggestResponseDoc" + "$ref": "#/definitions/justwatch.providersResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -394710,47 +468607,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get H&M search-box suggestions", + "summary": "Get JustWatch providers", "tags": [ - "H&M" + "JustWatch" ] } }, - "/hm/stores": { + "/justwatch/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns H&M physical retail store locations near a point: name, phone, full address, and coordinates. Either search, or both lat and lng, is required. search is a free-text zip code or place name that is first resolved to coordinates; if it does not resolve to any location, a well-formed empty result is returned rather than an error. lat and lng, when given directly, skip that resolution step. radius_meters is optional (1000 to 50000, defaults to 10000). A location with no stores within the radius returns a well-formed empty result rather than an error.", - "operationId": "hm-stores", + "description": "Searches JustWatch titles. Country must be a two-letter ISO code such as `US`; language must be a two-letter code such as `en`.", + "operationId": "justwatch-search", "parameters": [ { - "description": "Free-text zip code or place name to resolve to coordinates", + "description": "Search query", "in": "query", - "name": "search", + "name": "query", + "required": true, "type": "string", - "x-example": "10001" + "x-example": "inception" }, { - "description": "Latitude, requires lng", + "default": "US", + "description": "Two-letter country code", "in": "query", - "name": "lat", - "type": "number", - "x-example": 40.7128 + "name": "country", + "type": "string", + "x-example": "US" }, { - "description": "Longitude, requires lat", + "default": "en", + "description": "Two-letter language code", "in": "query", - "name": "lng", - "type": "number", - "x-example": -74.006 + "name": "language", + "type": "string", + "x-example": "en" }, { - "description": "Search radius in meters, 1000 to 50000, defaults to 10000", + "description": "Maximum results, defaults to 10 and clamps to 25", "in": "query", - "name": "radius_meters", + "name": "limit", "type": "integer", - "x-example": 10000 + "x-example": 10 } ], "produces": [ @@ -394760,7 +468660,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hm.storesResponseDoc" + "$ref": "#/definitions/justwatch.searchResponseDoc" } }, "400": { @@ -394769,6 +468669,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -394787,24 +468693,43 @@ "ApiKeyAuth": [] } ], - "summary": "Find nearby H&M physical stores", + "summary": "Search JustWatch titles", "tags": [ - "H&M" + "JustWatch" ] } }, - "/hollywoodreporter/article": { + "/justwatch/season/by-id": { "get": { - "description": "Returns public The Hollywood Reporter article metadata (title, author(s), published/updated dates, section, lead image) and body paragraphs from a canonical article URL.", - "operationId": "hollywoodreporter-article", + "consumes": [ + "application/json" + ], + "description": "Looks up one JustWatch season by its raw `id` (`tss` followed by digits, such as `tss297253`), in the `country` (default `US`) and `language` (default `en`) you choose. Returns the season title, number, year, description, path, URL and poster. A valid id with no match returns `404`.", + "operationId": "justwatch-season-by-id", "parameters": [ { - "description": "Canonical Hollywood Reporter article URL", + "description": "Raw JustWatch season id matching tss[0-9]+", "in": "query", - "name": "url", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.hollywoodreporter.com/movies/movie-news/example-story-1236709066/" + "x-example": "tss297253" + }, + { + "default": "US", + "description": "Two-letter country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + }, + { + "default": "en", + "description": "Two-letter language code", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -394814,7 +468739,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/justwatch.seasonByIDResponseDoc" } }, "400": { @@ -394829,6 +468754,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -394841,31 +468772,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Hollywood Reporter article content", + "summary": "Get JustWatch season by raw id", "tags": [ - "Hollywood Reporter" + "JustWatch" ] } }, - "/hollywoodreporter/author": { + "/justwatch/season/episodes": { "get": { - "description": "Returns one Hollywood Reporter staff writer or contributor's public profile: name, job title, headshot, biography, social/contact links, and one page of their recent articles.", - "operationId": "hollywoodreporter-author", + "consumes": [ + "application/json" + ], + "description": "Lists the episodes of a JustWatch season given as `season_id` (`tss` followed by digits), with `country` defaulting to `US` and `language` to `en`. Each episode has its number, title, description and streaming offers with provider, price and currency. Path, URL and poster appear only when JustWatch has them for that episode. An unknown season returns `404`.", + "operationId": "justwatch-season-episodes", "parameters": [ { - "description": "Canonical hollywoodreporter.com/author/ URL", + "description": "Raw JustWatch season id matching tss[0-9]+", "in": "query", - "name": "url", + "name": "season_id", "required": true, "type": "string", - "x-example": "https://www.hollywoodreporter.com/author/borys-kit/" + "x-example": "tss297253" }, { - "description": "1-based page of recent articles to return; defaults to 1", + "default": "US", + "description": "Two-letter country code", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "country", + "type": "string", + "x-example": "US" + }, + { + "default": "en", + "description": "Two-letter language code", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -394875,7 +468818,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.hollywoodReporterAuthorResponseDoc" + "$ref": "#/definitions/justwatch.seasonEpisodesResponseDoc" } }, "400": { @@ -394890,6 +468833,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -394902,63 +468851,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Hollywood Reporter author profile", + "summary": "Get JustWatch season episodes", "tags": [ - "Hollywood Reporter" + "JustWatch" ] } }, - "/hollywoodreporter/headlines": { + "/justwatch/show/seasons": { "get": { - "description": "Returns recent Hollywood Reporter headlines for one section or editorial vertical. `section` is required and takes one of 37 slugs such as `movie-reviews`, `tv-news`, `music-industry-news`, `awards`, `heat-vision` or `thr-esq`. Each item has its title and URL, plus summary, author, publication time and image when the outlet provides them.", - "operationId": "hollywoodreporter-headlines", + "consumes": [ + "application/json" + ], + "description": "Lists the seasons of a JustWatch show given as `show_id` (`ts` followed by digits, such as `ts287292`), with `country` defaulting to `US` and `language` to `en`. Each season has its number, title, year, description, path and poster. The show itself comes back with genres, scoring, runtime and offers. An unknown show returns `404`.", + "operationId": "justwatch-show-seasons", "parameters": [ { - "description": "Hollywood Reporter section slug", - "enum": [ - "arts", - "business", - "business-news", - "digital", - "film-tv-music-news", - "general-news", - "lifestyle", - "lifestyle-news", - "local-news", - "movie-features", - "movie-news", - "movie-reviews", - "movie-videos", - "movies", - "music", - "music-features", - "music-industry-news", - "music-news", - "news", - "politics-news", - "real-estate", - "shopping", - "style", - "tv", - "tv-features", - "tv-news", - "tv-reviews", - "tv-videos", - "awards", - "behind-the-screen", - "heat-vision", - "international", - "live-feed", - "rambling-reporter", - "the-fien-print", - "the-race", - "thr-esq" - ], + "description": "Raw JustWatch show id matching ts[0-9]+", "in": "query", - "name": "section", + "name": "show_id", "required": true, "type": "string", - "x-example": "arts" + "x-example": "ts287292" + }, + { + "default": "US", + "description": "Two-letter country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + }, + { + "default": "en", + "description": "Two-letter language code", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -394968,7 +468897,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/justwatch.showSeasonsResponseDoc" } }, "400": { @@ -394977,6 +468906,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -394989,16 +468930,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Hollywood Reporter section headlines", + "summary": "Get JustWatch show seasons", "tags": [ - "Hollywood Reporter" + "JustWatch" ] } }, - "/hollywoodreporter/news": { + "/justwatch/title": { "get": { - "description": "Returns The Hollywood Reporter's current top entertainment-industry stories from its home feed, with no parameters. Each item has its title and URL, plus summary, author, publication time and image when the outlet provides them.", - "operationId": "hollywoodreporter-news", + "consumes": [ + "application/json" + ], + "description": "Returns the details of a JustWatch movie or show. Pass exactly one of `path` (such as `/us/movie/inception`) or `url` (an absolute JustWatch address). The response has the title, year, genres, runtime, content rating, `scoring` (IMDb and TMDB scores, tomato meter, JustWatch rating) and current offers. Titles with no offers still return metadata; a missing page returns `404`.", + "operationId": "justwatch-title", + "parameters": [ + { + "description": "JustWatch title path", + "in": "query", + "name": "path", + "type": "string", + "x-example": "/us/movie/inception" + }, + { + "description": "Absolute https://www.justwatch.com title URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.justwatch.com/us/movie/inception" + } + ], "produces": [ "application/json" ], @@ -395006,7 +468966,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/justwatch.titleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -395027,45 +468999,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Hollywood Reporter top stories", + "summary": "Get JustWatch title details", "tags": [ - "Hollywood Reporter" + "JustWatch" ] } }, - "/hollywoodreporter/sections": { + "/justwatch/title/analysis": { "get": { - "description": "Returns the complete public section inventory accepted by /api/v1/hollywoodreporter/headlines (both The Hollywood Reporter's editorial categories and its named editorial verticals).", - "operationId": "hollywoodreporter-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ + "description": "Fetches a JustWatch title page and summarizes provider availability, monetization buckets, formats, price ranges, and best rent/buy/free/subscription options. Pass exactly one of `path` or `url`.", + "operationId": "justwatch-title-analysis", + "parameters": [ { - "ApiKeyAuth": [] + "description": "JustWatch title path", + "in": "query", + "name": "path", + "type": "string", + "x-example": "/us/movie/inception" + }, + { + "description": "Absolute https://www.justwatch.com title URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.justwatch.com/us/movie/inception" } ], - "summary": "Get The Hollywood Reporter sections", - "tags": [ - "Hollywood Reporter" - ] - } - }, - "/homedepot/categories": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Home Depot's top-level department taxonomy (name, path, url) from the homepage's own \"All Departments\" navigation. Each department's path is directly usable as GET /homedepot/category's path parameter.", - "operationId": "homedepot-categories", "produces": [ "application/json" ], @@ -395073,7 +469035,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/homedepot.categoriesResponseDoc" + "$ref": "#/definitions/justwatch.analysisResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -395094,50 +469068,43 @@ "ApiKeyAuth": [] } ], - "summary": "Home Depot department taxonomy", + "summary": "Analyze JustWatch title availability", "tags": [ - "Home Depot" + "JustWatch" ] } }, - "/homedepot/category": { + "/justwatch/title/by-id": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a Home Depot category or brand browse page's product grid: products with title, image, model, current/original price, and rating/review count, plus the category's total result count and the refinement facets the page offers. path is the segment of a /b/ URL after \"/b/\", e.g. \"Tools-Power-Tools-Drills-Impact-Drivers/N-5yc1vZc29x\"; a full https://www.homedepot.com/b/... URL or a \"/b/...\" path is also accepted. sort selects the result ordering and is one of best_match, top_sellers, top_rated, price_low_to_high, price_high_to_low, most_popular, delivery_date; omit it to keep the site's default ordering. page is a 1-indexed page number (default 1, maximum 42), 24 products per page. Each returned facet's path is directly usable as this endpoint's own path parameter to drill down. An unrecognized or blocked path returns an upstream error rather than an empty result.", - "operationId": "homedepot-category", + "description": "Looks up a JustWatch movie or show by its raw `id` (`tm` or `ts` followed by digits, such as `tm92641`), with `country` defaulting to `US` and `language` to `en`. Returns the title, year, genres, runtime, content rating, description, scoring, and offers with provider, monetization type, price and currency. A valid id with no match returns `404`.", + "operationId": "justwatch-title-by-id", "parameters": [ { - "description": "Home Depot category/brand browse path, e.g. \\", + "description": "Raw JustWatch movie/show id matching tm[0-9]+ or ts[0-9]+", "in": "query", - "name": "path", + "name": "id", "required": true, "type": "string", - "x-example": "Tools-Power-Tools-Drills-Impact-Drivers/N-5yc1vZc29x" + "x-example": "tm92641" }, { - "description": "Result ordering. One of: best_match, top_sellers, top_rated, price_low_to_high, price_high_to_low, most_popular, delivery_date. Omit for the site's default ordering", - "enum": [ - "best_match", - "top_sellers", - "top_rated", - "price_low_to_high", - "price_high_to_low", - "most_popular", - "delivery_date" - ], + "default": "US", + "description": "Two-letter country code", "in": "query", - "name": "sort", + "name": "country", "type": "string", - "x-example": "top_sellers" + "x-example": "US" }, { - "description": "1-indexed page number, default 1, maximum 42 (12 products per page)", + "default": "en", + "description": "Two-letter language code", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -395147,7 +469114,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/homedepot.categoryResponseDoc" + "$ref": "#/definitions/justwatch.titleResponseDoc" } }, "400": { @@ -395180,27 +469147,43 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Home Depot category or brand page", + "summary": "Get JustWatch title by raw id", "tags": [ - "Home Depot" + "JustWatch" ] } }, - "/homedepot/product/{id}": { + "/justwatch/title/media": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Home Depot product's full detail: name, description, brand, model, store SKU, GTIN, price, images, aggregate rating and review count, and the featured customer reviews embedded on the product page. id is the numeric product/internet id (the trailing number of a /p/{slug}/{id} URL). The product page does not distinguish an unknown id from a known one in a consistent way, so an unrecognized id may return an upstream error rather than a not-found.", - "operationId": "homedepot-product", + "description": "Returns the media for a JustWatch movie or show `id` (`tm` or `ts` followed by digits): credits with role, name, character and person id, video clips with provider and URL, and backdrop image URLs. `country` defaults to `US` and `language` to `en`. YouTube clips carry a watch URL. An unknown id returns `404`.", + "operationId": "justwatch-title-media", "parameters": [ { - "description": "Home Depot product/internet id, e.g. 320326875", - "in": "path", + "description": "Raw JustWatch movie/show id matching tm[0-9]+ or ts[0-9]+", + "in": "query", "name": "id", "required": true, "type": "string", - "x-example": "320326875" + "x-example": "tm92641" + }, + { + "default": "US", + "description": "Two-letter country code", + "in": "query", + "name": "country", + "type": "string", + "x-example": "US" + }, + { + "default": "en", + "description": "Two-letter language code", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -395210,7 +469193,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/homedepot.productResponseDoc" + "$ref": "#/definitions/justwatch.titleMediaResponseDoc" } }, "400": { @@ -395243,27 +469226,43 @@ "ApiKeyAuth": [] } ], - "summary": "Home Depot product detail", + "summary": "Get JustWatch title media", "tags": [ - "Home Depot" + "JustWatch" ] } }, - "/homedepot/product/{id}/questions": { + "/justwatch/title/offers": { "get": { "consumes": [ "application/json" ], - "description": "Returns the first page (8 questions) of a Home Depot product's customer questions and answers, plus the product's total Q&A count. id is the numeric product/internet id. A product with no Q&A returns a genuine zero-result response rather than an error.", - "operationId": "homedepot-product-questions", + "description": "Returns the streaming offers for a JustWatch movie or show `id` across one to five comma-separated country codes in `countries` (default `US`), with `language` defaulting to `en`. Each country entry has its offers (provider, monetization type, presentation type, price, currency) and the title details. An unknown id returns `404`.", + "operationId": "justwatch-title-offers", "parameters": [ { - "description": "Home Depot product/internet id, e.g. 328425526", - "in": "path", + "description": "Raw JustWatch movie/show id matching tm[0-9]+ or ts[0-9]+", + "in": "query", "name": "id", "required": true, "type": "string", - "x-example": "328425526" + "x-example": "tm92641" + }, + { + "default": "US", + "description": "One to five comma-separated two-letter country codes", + "in": "query", + "name": "countries", + "type": "string", + "x-example": "US,GB" + }, + { + "default": "en", + "description": "Two-letter language code", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -395273,7 +469272,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/homedepot.productQuestionsResponseDoc" + "$ref": "#/definitions/justwatch.titleOffersResponseDoc" } }, "400": { @@ -395282,6 +469281,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -395300,34 +469305,50 @@ "ApiKeyAuth": [] } ], - "summary": "Home Depot product questions and answers", + "summary": "Get JustWatch title offers", "tags": [ - "Home Depot" + "JustWatch" ] } }, - "/homedepot/search": { + "/justwatch/title/similar": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a Home Depot keyword search's product listing: products with title, image, model, current/original price, and rating/review count, plus the search's total result count. A page carries up to 24 products, or up to 12 when Home Depot answers the query with a category page. q is free-text search keywords, e.g. \"impact driver\". page is a 1-indexed page number (default 1). An unrecognized/blocked query returns an upstream error rather than an empty result.", - "operationId": "homedepot-search", + "description": "Lists titles similar to a JustWatch movie or show `id` (`tm` or `ts` followed by digits). `limit` defaults to 10 and is capped at 25; `country` defaults to `US` and `language` to `en`. Each result has its id, type, title, year, path, poster, production countries and offers. An unknown id returns `404`.", + "operationId": "justwatch-title-similar", "parameters": [ { - "description": "Free-text search keywords, e.g. \\", + "description": "Raw JustWatch movie/show id matching tm[0-9]+ or ts[0-9]+", "in": "query", - "name": "q", + "name": "id", "required": true, "type": "string", - "x-example": "impact driver" + "x-example": "tm92641" }, { - "description": "1-indexed page number, default 1", + "default": "US", + "description": "Two-letter country code", "in": "query", - "name": "page", + "name": "country", + "type": "string", + "x-example": "US" + }, + { + "default": "en", + "description": "Two-letter language code", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" + }, + { + "description": "Maximum results, defaults to 10 and clamps to 25", + "in": "query", + "name": "limit", "type": "integer", - "x-example": 1 + "x-example": 10 } ], "produces": [ @@ -395337,7 +469358,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/homedepot.searchResponseDoc" + "$ref": "#/definitions/justwatch.similarTitlesResponseDoc" } }, "400": { @@ -395346,6 +469367,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -395364,27 +469391,27 @@ "ApiKeyAuth": [] } ], - "summary": "Home Depot keyword search", + "summary": "Get similar JustWatch titles", "tags": [ - "Home Depot" + "JustWatch" ] } }, - "/homedepot/suggest": { + "/kalshi/event/{event_ticker}": { "get": { "consumes": [ "application/json" ], - "description": "Returns Home Depot's own search-box typeahead suggestions for a partial query, in the site's own ranking order. term is the partial search text, e.g. \"drill\". Each suggestion's term is directly usable as GET /homedepot/search's q parameter. A term that matches nothing returns an empty suggestion list rather than an error.", - "operationId": "homedepot-suggest", + "description": "Returns one Kalshi event by `event_ticker` (such as `KXELONMARS-99`) together with its markets. The event has its series ticker, title, subtitle, category, strike period and mutually-exclusive flag; each market has prices, bid and ask, volume, open interest, status and rules. An unknown ticker returns a not-found error.", + "operationId": "kalshi-event", "parameters": [ { - "description": "Partial search text, e.g. \\", - "in": "query", - "name": "term", + "description": "Kalshi event ticker", + "in": "path", + "name": "event_ticker", "required": true, "type": "string", - "x-example": "drill" + "x-example": "KXELONMARS-99" } ], "produces": [ @@ -395394,7 +469421,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/homedepot.suggestResponseDoc" + "$ref": "#/definitions/kalshi.eventResponseDoc" } }, "400": { @@ -395403,12 +469430,24 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -395421,24 +469460,57 @@ "ApiKeyAuth": [] } ], - "summary": "Home Depot search suggestions", + "summary": "Kalshi event detail", "tags": [ - "Home Depot" + "Kalshi" ] } }, - "/hotels/autocomplete": { + "/kalshi/event/{event_ticker}/history": { "get": { - "description": "Returns Hotels.com search-box suggestions for a partial destination or property name in `q` (up to 120 characters). Each suggestion has its type, primary and secondary text, full location name, coordinates, and region or property id. A query with no match returns an empty `suggestions` list.", - "operationId": "hotels-autocomplete", + "consumes": [ + "application/json" + ], + "description": "Returns candlesticks for the markets in a Kalshi event, grouped by market, for `event_ticker`. `start_ts` defaults to 7 days ago, `end_ts` to now, `period_interval` to 1440 minutes, and `series_ticker` to the ticker prefix before the last dash. Each candle has price, yes bid and ask, volume and open interest. Ranges are capped at 366 days.", + "operationId": "kalshi-event-history", "parameters": [ { - "description": "Partial destination or property name", - "in": "query", - "name": "q", + "description": "Kalshi event ticker", + "in": "path", + "name": "event_ticker", "required": true, "type": "string", - "x-example": "New York" + "x-example": "KXELONMARS-99" + }, + { + "description": "Kalshi series ticker. Defaults to the event ticker prefix before the last dash.", + "in": "query", + "name": "series_ticker", + "type": "string" + }, + { + "description": "Unix start timestamp in seconds. Defaults to 7 days ago.", + "in": "query", + "name": "start_ts", + "type": "integer" + }, + { + "description": "Unix end timestamp in seconds. Defaults to now.", + "in": "query", + "name": "end_ts", + "type": "integer" + }, + { + "description": "Candlestick interval in minutes. Default: 1440.", + "in": "query", + "name": "period_interval", + "type": "integer" + }, + { + "description": "Include the latest candle before start_ts when supported upstream.", + "in": "query", + "name": "include_latest_before_start", + "type": "boolean" } ], "produces": [ @@ -395448,7 +469520,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hotels.autocompleteResponseDoc" + "$ref": "#/definitions/kalshi.eventHistoryResponseDoc" } }, "400": { @@ -395457,6 +469529,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -395481,28 +469559,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Hotels.com destination suggestions", + "summary": "Kalshi event history", "tags": [ - "Hotels.com" + "Kalshi" ] } }, - "/hotels/offers": { - "post": { + "/kalshi/event/{event_ticker}/metadata": { + "get": { "consumes": [ "application/json" ], - "description": "Returns the public room/unit offer summaries shown for one Hotels.com property and date range, including room labels and non-transactional offer messages. Booking, checkout, payment, and reservation tokens are never returned. property_id is the numeric global property id from a Search response.", - "operationId": "hotels-offers", + "description": "Returns the media and market metadata for one Kalshi event by `event_ticker`. The response has the event image and featured image, a color code and image for each market, settlement sources with name and URL, and competition context when it applies. An unknown ticker returns a not-found error.", + "operationId": "kalshi-event-metadata", "parameters": [ { - "description": "Room offers request", - "in": "body", - "name": "request", + "description": "Kalshi event ticker", + "in": "path", + "name": "event_ticker", "required": true, - "schema": { - "$ref": "#/definitions/hotels.OffersOption" - } + "type": "string", + "x-example": "KXELONMARS-99" } ], "produces": [ @@ -395512,7 +469589,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hotels.offersResponseDoc" + "$ref": "#/definitions/kalshi.eventMetadataResponseDoc" } }, "400": { @@ -395551,28 +469628,78 @@ "ApiKeyAuth": [] } ], - "summary": "Get Hotels.com room offers", + "summary": "Kalshi event metadata", "tags": [ - "Hotels.com" + "Kalshi" ] } }, - "/hotels/property": { - "post": { + "/kalshi/events": { + "get": { "consumes": [ "application/json" ], - "description": "Returns public static metadata from one canonical Hotels.com property page, including name, address, rating, images, and amenities. Date-bound availability, prices, booking, and review content are excluded.", - "operationId": "hotels-property", + "description": "Lists Kalshi events, up to `limit` rows (default 25, max 200), continued with `cursor`. Filter by `series_ticker`, `category`, `status` (`open`, `closed` or `settled`), `min_close_ts` and `min_updated_ts`. `with_nested_markets` adds each event's markets. Each event has its ticker, title, category and strike period. A `cursor` is returned when more rows exist.", + "operationId": "kalshi-events", "parameters": [ { - "description": "Canonical Hotels.com property URL", - "in": "body", - "name": "request", - "required": true, - "schema": { - "$ref": "#/definitions/hotels.PropertyOption" - } + "description": "Rows to return, default 25, max 200", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Pagination cursor from a previous Kalshi response", + "in": "query", + "name": "cursor", + "type": "string" + }, + { + "description": "Kalshi series ticker filter", + "in": "query", + "name": "series_ticker", + "type": "string" + }, + { + "description": "Kalshi category filter", + "in": "query", + "name": "category", + "type": "string" + }, + { + "description": "Event status filter", + "enum": [ + "open", + "closed", + "settled" + ], + "in": "query", + "name": "status", + "type": "string" + }, + { + "description": "Include nested market rows when supported upstream", + "in": "query", + "name": "with_nested_markets", + "type": "boolean" + }, + { + "description": "Include event milestones when supported upstream", + "in": "query", + "name": "with_milestones", + "type": "boolean" + }, + { + "description": "Minimum event close Unix timestamp in seconds", + "in": "query", + "name": "min_close_ts", + "type": "integer" + }, + { + "description": "Minimum event update Unix timestamp in seconds", + "in": "query", + "name": "min_updated_ts", + "type": "integer" } ], "produces": [ @@ -395582,7 +469709,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hotels.propertyResponseDoc" + "$ref": "#/definitions/kalshi.eventsResponseDoc" } }, "400": { @@ -395591,6 +469718,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -395615,28 +469748,31 @@ "ApiKeyAuth": [] } ], - "summary": "Get Hotels.com property details", + "summary": "Kalshi events", "tags": [ - "Hotels.com" + "Kalshi" ] } }, - "/hotels/rates": { - "post": { + "/kalshi/events/multivariate": { + "get": { "consumes": [ "application/json" ], - "description": "Returns one Hotels.com property's date-bound rates and availability: the same property card Search returns, with the live per-night and per-stay prices Hotels.com shows for the requested dates. property_id is the numeric global property id from a Search response's properties[].id; it is distinct from the legacy /ho/ URL id.", - "operationId": "hotels-rates", + "description": "Lists Kalshi multivariate events, which the regular events list leaves out, up to `limit` rows (default 25, max 200), continued with `cursor`. Each event has its ticker, series ticker, title, subtitle, category and markets. A `cursor` is returned when more rows exist.", + "operationId": "kalshi-multivariate-events", "parameters": [ { - "description": "Rates request", - "in": "body", - "name": "request", - "required": true, - "schema": { - "$ref": "#/definitions/hotels.RatesOption" - } + "description": "Rows to return, default 25, max 200", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Pagination cursor from a previous Kalshi response", + "in": "query", + "name": "cursor", + "type": "string" } ], "produces": [ @@ -395646,7 +469782,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hotels.ratesResponseDoc" + "$ref": "#/definitions/kalshi.multivariateEventsResponseDoc" } }, "400": { @@ -395685,30 +469821,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Hotels.com rates for one property", + "summary": "Kalshi multivariate events", "tags": [ - "Hotels.com" + "Kalshi" ] } }, - "/hotels/reviews": { - "post": { + "/kalshi/exchange/schedule": { + "get": { "consumes": [ "application/json" ], - "description": "Returns one Hotels.com property's review overview: the overall rating (0-10) with its descriptive label, the per-category sub-ratings (cleanliness, service, amenities, and so on), and a bounded set of highlighted guest reviews with reviewer, date, rating label, text, and verified-stay flag. property_id is the numeric global property id from a Search response's properties[].id. This mirrors the property page's Guest reviews section; the full paginated review archive is not exposed.", - "operationId": "hotels-reviews", - "parameters": [ - { - "description": "Reviews request", - "in": "body", - "name": "request", - "required": true, - "schema": { - "$ref": "#/definitions/hotels.ReviewsOption" - } - } - ], + "description": "Returns the Kalshi exchange schedule, with no inputs. `standard_hours` are date-bounded blocks listing `open_time` and `close_time` for each weekday, and `maintenance_windows` list start time, end time and reason. The maintenance list can be empty. Informational only.", + "operationId": "kalshi-exchange-schedule", "produces": [ "application/json" ], @@ -395716,7 +469841,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hotels.reviewsResponseDoc" + "$ref": "#/definitions/kalshi.exchangeScheduleResponseDoc" } }, "400": { @@ -395755,30 +469880,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Hotels.com guest reviews", + "summary": "Kalshi exchange schedule", "tags": [ - "Hotels.com" + "Kalshi" ] } }, - "/hotels/reviews/archive": { - "post": { + "/kalshi/exchange/status": { + "get": { "consumes": [ "application/json" ], - "description": "Returns one page of public guest reviews for a Hotels.com property, including reviewer, date, traveler type, rating label, title, and message. Use page and page_size to walk the archive; the response reports whether another page is available. property_id is the numeric global property id from a Search response's properties[].id. Booking, account, and private review data are not included.", - "operationId": "hotels-reviews-archive", - "parameters": [ - { - "description": "Review archive request", - "in": "body", - "name": "request", - "required": true, - "schema": { - "$ref": "#/definitions/hotels.ReviewsArchiveOption" - } - } - ], + "description": "Returns the current Kalshi exchange status, with no inputs: `exchange_active` says whether the exchange is up, and `trading_active` says whether trading is open at the time of the request. Informational only, not real-time trading data.", + "operationId": "kalshi-exchange-status", "produces": [ "application/json" ], @@ -395786,7 +469900,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hotels.reviewsArchiveResponseDoc" + "$ref": "#/definitions/kalshi.exchangeStatusResponseDoc" } }, "400": { @@ -395825,30 +469939,19 @@ "ApiKeyAuth": [] } ], - "summary": "List Hotels.com guest reviews", + "summary": "Kalshi exchange status", "tags": [ - "Hotels.com" + "Kalshi" ] } }, - "/hotels/search": { - "post": { + "/kalshi/historical/cutoff": { + "get": { "consumes": [ "application/json" ], - "description": "Returns a page of date-bound Hotels.com hotel search results for either a free-text destination or a numeric Hotels.com region_id: property cards with per-night and per-stay prices, review score and count, location, thumbnail, amenities, and promotional badges. Provide exactly one of query or region_id; region_id skips destination typeahead resolution. Prices are the live rates Hotels.com shows for the requested check-in and check-out dates.", - "operationId": "hotels-search", - "parameters": [ - { - "description": "Search request", - "in": "body", - "name": "request", - "required": true, - "schema": { - "$ref": "#/definitions/hotels.SearchOption" - } - } - ], + "description": "Returns the three cutoff timestamps Kalshi uses to split live from historical data: `market_settled_at`, `orders_updated_at` and `trades_created_at`. Use them to decide when settled market data should be read from the historical endpoints. Takes no parameters.", + "operationId": "kalshi-historical-cutoff", "produces": [ "application/json" ], @@ -395856,7 +469959,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/hotels.searchResponseDoc" + "$ref": "#/definitions/kalshi.historicalCutoffResponseDoc" } }, "400": { @@ -395895,24 +469998,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Hotels.com hotels", + "summary": "Kalshi historical data cutoff", "tags": [ - "Hotels.com" + "Kalshi" ] } }, - "/houston-chronicle/article": { + "/kalshi/historical/market/{ticker}": { "get": { - "description": "Returns public Houston Chronicle article metadata and the body available in the anonymous response. Premium stories are flagged from the publisher's content-tier and JSON-LD markers; the service does not authenticate or bypass access controls.", - "operationId": "houston-chronicle-article", + "consumes": [ + "application/json" + ], + "description": "Returns one settled Kalshi market from historical storage by `ticker`. The response has the title, subtitle, event ticker, status, result, open, close and expiration times, last and previous price, yes and no bid and ask, volume, open interest, liquidity and primary rules text. Invalid tickers are rejected.", + "operationId": "kalshi-historical-market", "parameters": [ { - "description": "Canonical Houston Chronicle article URL", - "in": "query", - "name": "url", + "description": "Kalshi historical market ticker", + "in": "path", + "name": "ticker", "required": true, "type": "string", - "x-example": "https://www.houstonchronicle.com/news/article/example-story-22400001.php" + "x-example": "KXMVECROSSCATEGORY-S2026144E784A147-ED367B84557" } ], "produces": [ @@ -395922,7 +470028,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/kalshi.historicalMarketResponseDoc" } }, "400": { @@ -395937,6 +470043,18 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -395949,24 +470067,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get Houston Chronicle article content", + "summary": "Kalshi historical market detail", "tags": [ - "Houston Chronicle" + "Kalshi" ] } }, - "/houston-chronicle/author": { + "/kalshi/historical/market/{ticker}/history": { "get": { - "description": "Returns a Houston Chronicle author profile by `url`, a canonical `houstonchronicle.com/author//` link. The response has the `name`, `job_title`, `biography`, `image_url`, social profile links in `same_as`, and recent article cards with title, URL and summary.", - "operationId": "houston-chronicle-author", + "consumes": [ + "application/json" + ], + "description": "Returns candlesticks for one settled Kalshi market by `ticker`. `start_ts` defaults to 7 days ago, `end_ts` to now and `period_interval` to 1440 minutes. Each candle has end time, price, yes bid and ask, volume and open interest. Ranges are capped at 366 days.", + "operationId": "kalshi-historical-market-history", "parameters": [ { - "description": "Canonical Houston Chronicle author URL", - "in": "query", - "name": "url", + "description": "Kalshi historical market ticker", + "in": "path", + "name": "ticker", "required": true, "type": "string", - "x-example": "https://www.houstonchronicle.com/author/example-writer/" + "x-example": "KXMVECROSSCATEGORY-S2026144E784A147-ED367B84557" + }, + { + "description": "Unix start timestamp in seconds. Defaults to 7 days ago.", + "in": "query", + "name": "start_ts", + "type": "integer" + }, + { + "description": "Unix end timestamp in seconds. Defaults to now.", + "in": "query", + "name": "end_ts", + "type": "integer" + }, + { + "description": "Candlestick interval in minutes. Default: 1440.", + "in": "query", + "name": "period_interval", + "type": "integer" } ], "produces": [ @@ -395976,7 +470115,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.houstonChronicleAuthorResponseDoc" + "$ref": "#/definitions/kalshi.marketHistoryResponseDoc" } }, "400": { @@ -395991,6 +470130,18 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -396003,61 +470154,58 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Houston Chronicle author profile", + "summary": "Kalshi historical market history", "tags": [ - "Houston Chronicle" + "Kalshi" ] } }, - "/houston-chronicle/headlines": { + "/kalshi/historical/markets": { "get": { - "description": "Returns current public headlines from a verified Houston Chronicle editorial section. Pages that return Hearst's Client Challenge are retried through configured rendering backends; the service does not solve or bypass access controls.", - "operationId": "houston-chronicle-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns settled Kalshi historical market rows. `tickers`, `event_ticker`, and `series_ticker` are mutually exclusive. The `mve_filter` enum accepts `exclude`.", + "operationId": "kalshi-historical-markets", "parameters": [ { - "description": "Houston Chronicle public section slug", + "description": "Rows to return, default 25, max 1000", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Pagination cursor from a previous Kalshi response", + "in": "query", + "name": "cursor", + "type": "string" + }, + { + "description": "Comma-separated Kalshi market tickers. Mutually exclusive with event_ticker and series_ticker.", + "in": "query", + "name": "tickers", + "type": "string" + }, + { + "description": "Kalshi event ticker filter. Mutually exclusive with tickers and series_ticker.", + "in": "query", + "name": "event_ticker", + "type": "string" + }, + { + "description": "Kalshi series ticker filter. Mutually exclusive with tickers and event_ticker.", + "in": "query", + "name": "series_ticker", + "type": "string" + }, + { + "description": "Multivariate event filter", "enum": [ - "news-houston-texas", - "news-houston-texas-trending", - "neighborhood", - "news-houston-texas-education", - "news-houston-texas-environment", - "health", - "news-houston-weather", - "politics", - "politics-houston", - "politics-texas", - "politics-us-world", - "business", - "business-energy", - "business-real-estate", - "business-tech", - "sports", - "sports-texans", - "sports-astros", - "sports-rockets", - "sports-college", - "sports-high-school", - "sports-dynamo", - "entertainment", - "lifestyle", - "food-restaurants", - "food-restaurants-reviews", - "food-restaurants-bbq", - "opinion", - "opinion-editorials", - "opinion-letters", - "opinion-columnists", - "news-interactives", - "news-investigations", - "la-voz", - "visuals" + "exclude" ], "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "news-houston-texas" + "name": "mve_filter", + "type": "string" } ], "produces": [ @@ -396067,7 +470215,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/kalshi.historicalMarketsResponseDoc" } }, "400": { @@ -396076,37 +470224,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Houston Chronicle section headlines", - "tags": [ - "Houston Chronicle" - ] - } - }, - "/houston-chronicle/news": { - "get": { - "description": "Returns current public Houston Chronicle homepage stories. Publisher premium markers are preserved on article responses.", - "operationId": "houston-chronicle-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -396114,6 +470236,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -396126,42 +470254,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get Houston Chronicle top stories", + "summary": "Kalshi historical markets", "tags": [ - "Houston Chronicle" + "Kalshi" ] } }, - "/houston-chronicle/sections": { + "/kalshi/historical/trades": { "get": { - "description": "Returns every live-verified public editorial section accepted by the Houston Chronicle headlines endpoint. Newsletter, games, audio-only, external marketplace and interactive project/tool links are excluded.", - "operationId": "houston-chronicle-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ + "description": "Lists older Kalshi trades that have moved into historical storage, up to `limit` rows (default 25, max 200), continued with `cursor`. Filter by market `ticker` and by created time with `min_ts` and `max_ts` (Unix seconds). Each trade has its id, count, yes and no price, taker side and created time.", + "operationId": "kalshi-historical-trades", + "parameters": [ { - "ApiKeyAuth": [] + "description": "Rows to return, default 25, max 200", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Pagination cursor from a previous Kalshi response", + "in": "query", + "name": "cursor", + "type": "string" + }, + { + "description": "Kalshi market ticker filter", + "in": "query", + "name": "ticker", + "type": "string" + }, + { + "description": "Minimum created Unix timestamp in seconds", + "in": "query", + "name": "min_ts", + "type": "integer" + }, + { + "description": "Maximum created Unix timestamp in seconds", + "in": "query", + "name": "max_ts", + "type": "integer" } ], - "summary": "Get Houston Chronicle sections", - "tags": [ - "Houston Chronicle" - ] - } - }, - "/howtogeek/news": { - "get": { - "description": "Returns current stories from How-To Geek's public RSS feed. Summaries are publisher teasers, not full article text. This feed-only route does not claim a complete section taxonomy or retrieve article bodies.", - "operationId": "howtogeek-news", "produces": [ "application/json" ], @@ -396169,7 +470306,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/kalshi.historicalTradesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -396178,6 +470327,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -396190,24 +470345,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get How-To Geek top stories", + "summary": "Kalshi historical trades", "tags": [ - "How-To Geek" + "Kalshi" ] } }, - "/huffpost/article": { + "/kalshi/market/{ticker}": { "get": { - "description": "Returns a HuffPost article by `url`, a canonical `huffpost.com/entry/__` link. The response has the title, description, section, authors, lead image, publish and update times, body `paragraphs` and a `paywalled` flag.", - "operationId": "huffpost-article", + "consumes": [ + "application/json" + ], + "description": "Returns one Kalshi market by `ticker` (such as `KXELONMARS-99`). The response has the title, subtitle, event ticker, status, result, open, close and expiration times, last and previous price, yes and no bid and ask, volume, 24-hour volume, open interest, liquidity and rules text. An unknown ticker returns a not-found error.", + "operationId": "kalshi-market", "parameters": [ { - "description": "Canonical HuffPost article URL", - "in": "query", - "name": "url", + "description": "Kalshi market ticker", + "in": "path", + "name": "ticker", "required": true, "type": "string", - "x-example": "https://www.huffpost.com/entry/example-story_n_1234567890abcdef12345678" + "x-example": "KXELONMARS-99" } ], "produces": [ @@ -396217,7 +470375,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/kalshi.marketResponseDoc" } }, "400": { @@ -396232,6 +470390,18 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -396244,24 +470414,57 @@ "ApiKeyAuth": [] } ], - "summary": "Get HuffPost article content", + "summary": "Kalshi market detail", "tags": [ - "HuffPost" + "Kalshi" ] } }, - "/huffpost/author": { + "/kalshi/market/{ticker}/history": { "get": { - "description": "Returns a HuffPost author or contributor profile by `url`, a canonical `https://www.huffpost.com/author/` link. The response has the name, recent articles, and, when the profile shows them, `job_title`, `image_url`, `biography` and `social_links` (platform and URL). Outside contributors often lack most of these optional fields.", - "operationId": "huffpost-author", + "consumes": [ + "application/json" + ], + "description": "Returns candlesticks for one Kalshi market by `ticker`. `series_ticker` defaults to the ticker prefix before the last dash, `start_ts` to 7 days ago, `end_ts` to now and `period_interval` to 1440 minutes. `include_latest_before_start` adds the last candle before the start. Ranges are capped at 366 days.", + "operationId": "kalshi-market-history", "parameters": [ { - "description": "Canonical huffpost.com/author/ URL", - "in": "query", - "name": "url", + "description": "Kalshi market ticker", + "in": "path", + "name": "ticker", "required": true, "type": "string", - "x-example": "https://www.huffpost.com/author/lee-moran" + "x-example": "KXELONMARS-99" + }, + { + "description": "Kalshi series ticker. Defaults to the market ticker prefix before the last dash.", + "in": "query", + "name": "series_ticker", + "type": "string" + }, + { + "description": "Unix start timestamp in seconds. Defaults to 7 days ago.", + "in": "query", + "name": "start_ts", + "type": "integer" + }, + { + "description": "Unix end timestamp in seconds. Defaults to now.", + "in": "query", + "name": "end_ts", + "type": "integer" + }, + { + "description": "Candlestick interval in minutes. Default: 1440.", + "in": "query", + "name": "period_interval", + "type": "integer" + }, + { + "description": "Include the latest candle before start_ts when supported upstream.", + "in": "query", + "name": "include_latest_before_start", + "type": "boolean" } ], "produces": [ @@ -396271,7 +470474,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.huffPostAuthorResponseDoc" + "$ref": "#/definitions/kalshi.marketHistoryResponseDoc" } }, "400": { @@ -396286,6 +470489,18 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -396298,66 +470513,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a HuffPost author profile", + "summary": "Kalshi market history", "tags": [ - "HuffPost" + "Kalshi" ] } }, - "/huffpost/headlines": { + "/kalshi/market/{ticker}/orderbook": { "get": { - "description": "Returns current HuffPost headlines for one topic hub. `section` is required and takes a slug that can include a path, such as `news/politics`, `impact/green`, `entertainment/tv`, `life/travel` or `voices/black-voices`. Each item has its title, URL and image. Summary, author and publication time are not returned.", - "operationId": "huffpost-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns the order book for one Kalshi market by `ticker`: bid levels for the `yes` side and the `no` side, each with `price` and `size`. Kalshi publishes bids only, so ask levels are not listed. The response also carries a `raw_unit_hint` for the price unit.", + "operationId": "kalshi-market-orderbook", "parameters": [ { - "description": "HuffPost section slug", - "enum": [ - "news", - "news/us-news", - "news/world-news", - "impact/business", - "impact/green", - "section/health", - "impact/topic/social-justice", - "news/crime", - "news/politics", - "news/topic/us-congress", - "news/topic/extremism", - "section/opinion", - "entertainment", - "entertainment/arts", - "news/media", - "entertainment/celebrity", - "entertainment/tv", - "section/sports", - "life", - "life/healthy-living", - "life/travel", - "life/technology", - "life/taste", - "life/style", - "life/family", - "life/relationships", - "life/money", - "life/huffpost-home", - "life/worklife", - "life/huffpost-shopping", - "voices", - "voices/black-voices", - "voices/queer-voices", - "voices/latino-voices", - "voices/indigenous-voices", - "voices/asian-voices", - "voices/womens-voices", - "voices/voices-of-disabled-people", - "section/huffpost-personal", - "section/video" - ], - "in": "query", - "name": "section", + "description": "Kalshi market ticker", + "in": "path", + "name": "ticker", "required": true, "type": "string", - "x-example": "news" + "x-example": "KXELONMARS-99" } ], "produces": [ @@ -396367,7 +470543,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/kalshi.orderBookResponseDoc" } }, "400": { @@ -396376,36 +470552,22 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get HuffPost section headlines", - "tags": [ - "HuffPost" - ] - } - }, - "/huffpost/news": { - "get": { - "description": "Returns HuffPost's current top stories from its homepage, with no parameters. Each item has its title, URL and image where available. Summary, author and publication time are not returned.", - "operationId": "huffpost-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "429": { + "description": "Too Many Requests", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -396420,50 +470582,61 @@ "ApiKeyAuth": [] } ], - "summary": "Get HuffPost top stories", + "summary": "Kalshi market orderbook", "tags": [ - "HuffPost" + "Kalshi" ] } }, - "/huffpost/sections": { + "/kalshi/markets": { "get": { - "description": "Lists the topic hubs accepted by `huffpost-headlines`, such as `news/politics`, `impact/business`, `life/travel` and `voices/latino-voices`. Each entry has a `slug`, display `name` and hub `url`. Games, Horoscopes, Newsletters and HuffPost's international editions are excluded.", - "operationId": "huffpost-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get HuffPost sections", - "tags": [ - "HuffPost" - ] - } - }, - "/ign/article": { - "get": { - "description": "Returns public IGN article or review metadata and body paragraphs from a canonical article URL. Only canonical https://www.ign.com/articles/ URLs are accepted; wiki, video, and game/movie/TV hub pages return an invalid-parameter error.", - "operationId": "ign-article", + "description": "Lists Kalshi markets, up to `limit` rows (default 25, max 200), continued with `cursor`. Filter by `event_ticker`, `series_ticker`, `ticker`, or `status` (`unopened`, `open`, `closed` or `settled`). Each market has its title, status, prices, bid and ask, volume, open interest and rules text. A returned status can read `active` even though the filter does not accept it.", + "operationId": "kalshi-markets", "parameters": [ { - "description": "Canonical IGN article or review URL", + "description": "Rows to return, default 25, max 200", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.ign.com/articles/brothers-season-1-review" + "name": "limit", + "type": "integer" + }, + { + "description": "Pagination cursor from a previous Kalshi response", + "in": "query", + "name": "cursor", + "type": "string" + }, + { + "description": "Kalshi event ticker filter", + "in": "query", + "name": "event_ticker", + "type": "string" + }, + { + "description": "Kalshi series ticker filter", + "in": "query", + "name": "series_ticker", + "type": "string" + }, + { + "description": "Market status filter", + "enum": [ + "unopened", + "open", + "closed", + "settled" + ], + "in": "query", + "name": "status", + "type": "string" + }, + { + "description": "Kalshi market ticker filter", + "in": "query", + "name": "ticker", + "type": "string" } ], "produces": [ @@ -396473,7 +470646,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/kalshi.marketsResponseDoc" } }, "400": { @@ -396488,6 +470661,18 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -396500,24 +470685,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get IGN article or review content", + "summary": "Kalshi markets", "tags": [ - "IGN" + "Kalshi" ] } }, - "/ign/author": { + "/kalshi/markets/history": { "get": { - "description": "Returns an IGN author profile by `url`, a canonical `https://www.ign.com/person/` link. The response has the `username`, name, job title, location, biography, headshot, `social_links` (platform and URL) and the author's recent articles.", - "operationId": "ign-author", + "consumes": [ + "application/json" + ], + "description": "Returns candlesticks for up to 25 Kalshi markets in one call. `market_tickers` is required, as a comma-separated list or repeated values. `start_ts` defaults to 7 days ago, `end_ts` to now and `period_interval` to 1440 minutes. Results are grouped by market. Ranges are capped at 366 days.", + "operationId": "kalshi-markets-history", "parameters": [ { - "description": "Canonical www.ign.com/person/ URL", + "description": "Comma-separated Kalshi market tickers. Repeated query values are also accepted.", "in": "query", - "name": "url", + "name": "market_tickers", "required": true, "type": "string", - "x-example": "https://www.ign.com/person/tomphillipsIGN" + "x-example": "KXELONMARS-99,KXNEWPOPE-70" + }, + { + "description": "Unix start timestamp in seconds. Defaults to 7 days ago.", + "in": "query", + "name": "start_ts", + "type": "integer" + }, + { + "description": "Unix end timestamp in seconds. Defaults to now.", + "in": "query", + "name": "end_ts", + "type": "integer" + }, + { + "description": "Candlestick interval in minutes. Default: 1440.", + "in": "query", + "name": "period_interval", + "type": "integer" + }, + { + "description": "Include the latest candle before start_ts when supported upstream.", + "in": "query", + "name": "include_latest_before_start", + "type": "boolean" } ], "produces": [ @@ -396527,7 +470739,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ignAuthorResponseDoc" + "$ref": "#/definitions/kalshi.batchMarketHistoryResponseDoc" } }, "400": { @@ -396542,6 +470754,18 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -396554,38 +470778,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get an IGN author profile", + "summary": "Kalshi batch market history", "tags": [ - "IGN" + "Kalshi" ] } }, - "/ign/headlines": { + "/kalshi/markets/orderbooks": { "get": { - "description": "Returns current IGN headlines for one section. `section` is required and takes one of `news`, `reviews`, `games`, `movies`, `tv`, `tech`, `nintendo`, `playstation`, `xbox`, `pc`, `mobile` or `comics`. Each item has its title and URL, plus summary, author, publication time and image when the outlet provides them.", - "operationId": "ign-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns order books for up to 25 Kalshi markets in one call. `tickers` is required, as a comma-separated list or repeated values. Each book has the `yes` and `no` bid levels with `price` and `size`; ask levels are not listed. Books come back in the order requested.", + "operationId": "kalshi-markets-orderbooks", "parameters": [ { - "description": "IGN section slug", - "enum": [ - "news", - "reviews", - "games", - "movies", - "tv", - "tech", - "nintendo", - "playstation", - "xbox", - "pc", - "mobile", - "comics" - ], + "description": "Comma-separated Kalshi market tickers. Repeated query values are also accepted.", "in": "query", - "name": "section", + "name": "tickers", "required": true, "type": "string", - "x-example": "news" + "x-example": "KXELONMARS-99,KXNEWPOPE-70" } ], "produces": [ @@ -396595,7 +470808,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/kalshi.batchOrderBookResponseDoc" } }, "400": { @@ -396604,37 +470817,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get IGN section headlines", - "tags": [ - "IGN" - ] - } - }, - "/ign/news": { - "get": { - "description": "Returns IGN's current top stories on gaming and entertainment, with no parameters. Each item has its title and URL, plus summary, author, publication time and image when the outlet provides them, covering games, film and TV news in one list.", - "operationId": "ign-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -396642,6 +470829,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -396654,56 +470847,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get IGN top stories", + "summary": "Kalshi batch market orderbooks", "tags": [ - "IGN" + "Kalshi" ] } }, - "/ign/sections": { + "/kalshi/series": { "get": { - "description": "Lists the 12 IGN sections accepted by `ign-headlines`: `news`, `reviews`, `games`, `movies`, `tv`, `tech`, `nintendo`, `playstation`, `xbox`, `pc`, `mobile` and `comics`. Each entry has a `slug`, display `name` and `url`.", - "operationId": "ign-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get IGN sections", - "tags": [ - "IGN" - ] - } - }, - "/ikea/availability": { - "get": { - "description": "Returns one IKEA item's real-time home-delivery and click-and-collect stock signal for the requested country. item_no is IKEA's own item number.", - "operationId": "ikea-availability", + "description": "Lists Kalshi series, up to `limit` rows (default 25, max 200). Each series has its ticker, title, category, frequency, fee type and multiplier, settlement sources, and contract and contract-terms URLs. The catalogue comes back in one page, so `cursor` has no effect on this endpoint.", + "operationId": "kalshi-series", "parameters": [ { - "description": "IKEA item number", + "description": "Rows to return, default 25, max 200", "in": "query", - "name": "item_no", - "required": true, - "type": "string", - "x-example": "80213074" + "name": "limit", + "type": "integer" }, { - "default": "us", - "description": "Lowercase 2-letter IKEA site country code", + "description": "Pagination cursor from a previous Kalshi response", "in": "query", - "name": "country", + "name": "cursor", "type": "string" } ], @@ -396714,7 +470881,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ikea.availabilityResponseDoc" + "$ref": "#/definitions/kalshi.seriesResponseDoc" } }, "400": { @@ -396735,6 +470902,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -396747,54 +470920,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get an IKEA item's real-time stock availability", + "summary": "Kalshi series", "tags": [ - "IKEA" + "Kalshi" ] } }, - "/ikea/categories": { + "/kalshi/series/{series_ticker}": { "get": { - "description": "Returns a page of IKEA's full category taxonomy, sourced from IKEA's own site navigation data: every top-level department and nested subcategory, with the key each one uses as ikea_category's own category input. key is IKEA's own category key (numeric, e.g. 20649, or a short alphanumeric department code, e.g. st001). parent_key is the immediate parent category's own key (empty for a top-level department); level is depth in the taxonomy tree, starting at 1. q optionally filters by a case-insensitive substring of name.", - "operationId": "ikea-categories", + "consumes": [ + "application/json" + ], + "description": "Returns one Kalshi series by `series_ticker` (such as `KXELONMARS`). The response has the title, category, frequency, fee type and multiplier, settlement sources with name and URL, contract and contract-terms URLs, and last update time. An unknown ticker returns a not-found error.", + "operationId": "kalshi-series-detail", "parameters": [ { - "description": "Case-insensitive substring filter on category name", - "in": "query", - "name": "q", + "description": "Kalshi series ticker", + "in": "path", + "name": "series_ticker", + "required": true, "type": "string", - "x-example": "desk" - }, - { - "default": "us", - "description": "Lowercase 2-letter IKEA site country code", - "in": "query", - "name": "country", - "type": "string" - }, - { - "default": "en", - "description": "Lowercase 2-letter IKEA site language code", - "in": "query", - "name": "language", - "type": "string" - }, - { - "default": 1, - "description": "1-based page number", - "in": "query", - "minimum": 1, - "name": "page", - "type": "integer" - }, - { - "default": 100, - "description": "Result count per page (1-1000)", - "in": "query", - "maximum": 1000, - "minimum": 1, - "name": "page_size", - "type": "integer" + "x-example": "KXELONMARS" } ], "produces": [ @@ -396804,7 +470950,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ikea.categoriesResponseDoc" + "$ref": "#/definitions/kalshi.seriesDetailResponseDoc" } }, "400": { @@ -396813,12 +470959,24 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -396831,76 +470989,49 @@ "ApiKeyAuth": [] } ], - "summary": "Discover IKEA category keys", + "summary": "Kalshi series detail", "tags": [ - "IKEA" + "Kalshi" ] } }, - "/ikea/category": { + "/kalshi/trades": { "get": { - "description": "Returns one page of an IKEA category's product listing, with real offset/size pagination and sort. category is IKEA's own category key (e.g. 20649), taken from a category URL's trailing -{key}/ segment, a product's own category_path field, or GET /ikea/categories, which discovers every valid category value.", - "operationId": "ikea-category", + "consumes": [ + "application/json" + ], + "description": "Lists recent Kalshi trades, up to `limit` rows (default 25, max 200), continued with `cursor`. Filter by market `ticker` and by created time with `min_ts` and `max_ts` (Unix seconds, at most 366 days apart). Each trade has its id, count, yes and no price, taker side and created time.", + "operationId": "kalshi-trades", "parameters": [ { - "description": "IKEA category key", + "description": "Rows to return, default 25, max 200", "in": "query", - "name": "category", - "required": true, - "type": "string", - "x-example": "20649" + "name": "limit", + "type": "integer" }, { - "default": "us", - "description": "Lowercase 2-letter IKEA site country code", + "description": "Pagination cursor from a previous Kalshi response", "in": "query", - "name": "country", + "name": "cursor", "type": "string" }, { - "default": "en", - "description": "Lowercase 2-letter IKEA site language code", + "description": "Kalshi market ticker filter", "in": "query", - "name": "language", + "name": "ticker", "type": "string" }, { - "default": 0, - "description": "Zero-based result offset", + "description": "Minimum created Unix timestamp in seconds", "in": "query", - "maximum": 9999, - "minimum": 0, - "name": "offset", + "name": "min_ts", "type": "integer" }, { - "default": 24, - "description": "Result count (1-100)", + "description": "Maximum created Unix timestamp in seconds", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "size", + "name": "max_ts", "type": "integer" - }, - { - "default": "relevance", - "description": "Result order", - "enum": [ - "relevance", - "price-low", - "price-high", - "newest", - "rating", - "name", - "popular", - "width", - "height", - "depth", - "length" - ], - "in": "query", - "name": "sort", - "type": "string" } ], "produces": [ @@ -396910,7 +471041,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ikea.categoryResponseDoc" + "$ref": "#/definitions/kalshi.tradesResponseDoc" } }, "400": { @@ -396931,6 +471062,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -396943,38 +471080,116 @@ "ApiKeyAuth": [] } ], - "summary": "Browse an IKEA category", + "summary": "Kalshi trades", "tags": [ - "IKEA" + "Kalshi" ] } }, - "/ikea/product": { + "/kfc/delivery-estimate": { "get": { - "description": "Returns one IKEA item's full detail: name, price, rating, every product image, quick facts, and category breadcrumb path. item_no is IKEA's own item number (8 digits, optionally prefixed with \"s\" for a combination/set article), taken from a search result's item_no field or an ikea.com product page's own URL.", - "operationId": "ikea-product", + "consumes": [ + "application/json" + ], + "description": "Checks whether a KFC restaurant's delivery integration can deliver to a given address and, when it can, the estimated delivery fee (broken down by fee line item) and pickup/dropoff time. This reads the same checkout-time estimate KFC's own site calls -- it does not add an item to a cart or place an order, and takes no payment or account information. serviceable is true only when the upstream returned a real estimate; a false value with reason populated covers every other case seen live: the delivery provider not enabled at this store, the address being outside the delivery zone, or the delivery marketplace itself reporting the store temporarily inactive. order_subtotal materially affects the fee estimate (KFC's own fee schedules can vary by order size), so it is required rather than defaulted. pickup_at defaults to 30 minutes from now (an \"order now\" style estimate) when omitted.", + "operationId": "kfc-delivery-estimate", "parameters": [ { - "description": "IKEA item number", + "description": "KFC's alphanumeric store number, from /kfc/stores or /kfc/nearby", "in": "query", - "name": "item_no", + "name": "store_number", "required": true, "type": "string", - "x-example": "80213074" + "x-example": "K750015" }, { - "default": "us", - "description": "Lowercase 2-letter IKEA site country code", + "description": "Delivery address line 1", "in": "query", - "name": "country", - "type": "string" + "name": "address1", + "required": true, + "type": "string", + "x-example": "2600 Preston Highway" }, { - "default": "en", - "description": "Lowercase 2-letter IKEA site language code", + "description": "Delivery address line 2", "in": "query", - "name": "language", - "type": "string" + "name": "address2", + "type": "string", + "x-example": "" + }, + { + "description": "Delivery address city", + "in": "query", + "name": "city", + "required": true, + "type": "string", + "x-example": "Louisville" + }, + { + "description": "Delivery address state, two-letter code", + "in": "query", + "name": "state", + "required": true, + "type": "string", + "x-example": "KY" + }, + { + "description": "Delivery address postal code", + "in": "query", + "name": "postal_code", + "required": true, + "type": "string", + "x-example": "40217" + }, + { + "description": "Delivery address country code (default US)", + "in": "query", + "name": "country_code", + "type": "string", + "x-example": "US" + }, + { + "description": "Delivery address latitude", + "in": "query", + "name": "latitude", + "required": true, + "type": "number", + "x-example": 38.21 + }, + { + "description": "Delivery address longitude", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -85.7415 + }, + { + "description": "Order subtotal before fees, in dollars", + "in": "query", + "name": "order_subtotal", + "required": true, + "type": "number", + "x-example": 10 + }, + { + "description": "RFC3339 pickup time (default 30 minutes from now)", + "in": "query", + "name": "pickup_at", + "type": "string", + "x-example": "2026-09-03T20:00:00Z" + }, + { + "description": "Delivery provider to check (default DOORDASH)", + "enum": [ + "DOORDASH", + "MOCK_DOORDASH", + "INTERNAL" + ], + "in": "query", + "name": "delivery_provider", + "type": "string", + "x-example": "DOORDASH" } ], "produces": [ @@ -396984,7 +471199,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ikea.productResponseDoc" + "$ref": "#/definitions/kfc.deliveryEstimateResponseDoc" } }, "400": { @@ -397017,38 +471232,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get an IKEA product's detail", + "summary": "Check KFC delivery serviceability and estimated fee for one store and address", "tags": [ - "IKEA" + "KFC" ] } }, - "/ikea/reviews": { + "/kfc/menu": { "get": { - "description": "Returns one IKEA item's own highlighted customer reviews (title, rating, text, author) plus its aggregate rating, sourced from the product page's own curated reviews carousel. This is a small, representative set of reviews (a handful per item), not the full paginated review list.", - "operationId": "ikea-reviews", + "consumes": [ + "application/json" + ], + "description": "Returns one restaurant's full menu grouped into categories (e.g. \"Deals\", \"Combos\", \"Tenders\"). Every entry is a product, a bundle (a combo or family meal), or a standalone priced variant -- type tells callers which -- and carries a price in USD cents plus a decimal dollar value, and an image when the upstream publishes one. Prices reflect this specific restaurant and order channel, not a national default. channel selects which order channel the menu is priced for (web ordering by default); prices can genuinely differ by channel (e.g. a delivery-marketplace channel vs. web).", + "operationId": "kfc-menu", "parameters": [ { - "description": "IKEA item number", + "description": "KFC's alphanumeric store number, from /kfc/stores or /kfc/nearby", "in": "query", - "name": "item_no", + "name": "store_number", "required": true, "type": "string", - "x-example": "80213074" - }, - { - "default": "us", - "description": "Lowercase 2-letter IKEA site country code", - "in": "query", - "name": "country", - "type": "string" + "x-example": "I824001" }, { - "default": "en", - "description": "Lowercase 2-letter IKEA site language code", + "description": "Order channel the menu is priced for (default WEB)", + "enum": [ + "WEB", + "MOBILE", + "POS", + "KIOSK", + "DOORDASH", + "UBEREATS", + "GRUBHUB", + "IOS", + "ANDROID", + "DELIVEROO", + "JUST_EAT", + "CALL_CENTER" + ], "in": "query", - "name": "language", - "type": "string" + "name": "channel", + "type": "string", + "x-example": "WEB" } ], "produces": [ @@ -397058,7 +471283,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ikea.reviewsResponseDoc" + "$ref": "#/definitions/kfc.menuResponseDoc" } }, "400": { @@ -397091,47 +471316,63 @@ "ApiKeyAuth": [] } ], - "summary": "Get an IKEA item's highlighted customer reviews", + "summary": "Get one KFC restaurant's full priced menu", "tags": [ - "IKEA" + "KFC" ] } }, - "/ikea/search": { + "/kfc/nearby": { "get": { - "description": "Searches IKEA products and returns name, price, rating, images, colors, and variant data. q is a free-text query; an IKEA item number also resolves as its own single result. country and language select IKEA's per-country site (default us/en). A zero total with an empty products list is a valid no-results response.", - "operationId": "ikea-search", + "consumes": [ + "application/json" + ], + "description": "Returns KFC restaurants near a latitude/longitude, nearest first. A coordinate with no nearby KFC returns an empty list rather than an error. Each restaurant carries its store number, full address with coordinates, phone, whether it currently accepts online orders, its timezone, and its distance from the search point in miles. occasion restricts results to restaurants that offer a given order channel (e.g. only drive-thru locations).", + "operationId": "kfc-nearby", "parameters": [ { - "description": "Free-text product search query", + "description": "Search center latitude", "in": "query", - "name": "q", + "name": "latitude", "required": true, - "type": "string", - "x-example": "desk" + "type": "number", + "x-example": 38.2527 }, { - "default": "us", - "description": "Lowercase 2-letter IKEA site country code", + "description": "Search center longitude", "in": "query", - "name": "country", - "type": "string" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -85.7585 }, { - "default": "en", - "description": "Lowercase 2-letter IKEA site language code", + "description": "Search radius in miles, 0.1-100 (default 10)", "in": "query", - "name": "language", - "type": "string" + "name": "radius_miles", + "type": "number", + "x-example": 10 }, { - "default": 24, - "description": "Result count (1-100)", + "description": "Restrict to restaurants offering this order channel", + "enum": [ + "DELIVERY", + "CARRYOUT", + "DINE_IN", + "DRIVE_THRU", + "CATERING_CARRYOUT" + ], "in": "query", - "maximum": 100, - "minimum": 1, - "name": "size", - "type": "integer" + "name": "occasion", + "type": "string", + "x-example": "DRIVE_THRU" + }, + { + "description": "Maximum restaurants to return, 1-50 (default 20)", + "in": "query", + "name": "max_results", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -397141,7 +471382,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ikea.searchResponseDoc" + "$ref": "#/definitions/kfc.nearbyResponseDoc" } }, "400": { @@ -397168,38 +471409,33 @@ "ApiKeyAuth": [] } ], - "summary": "Search IKEA products", + "summary": "Find KFC restaurants near a location", "tags": [ - "IKEA" + "KFC" ] } }, - "/ikea/store": { + "/kfc/promotion": { "get": { - "description": "Returns one IKEA physical location's full detail: address, geo coordinates, opening hours, and price range. slug is IKEA's own store URL slug, taken from an ikea_stores result's own slug field. Geo, hours, and price range are only present for full/small stores; order points and pick-up-only points return address only.", - "operationId": "ikea-store", + "consumes": [ + "application/json" + ], + "description": "Returns one promotion by its redemption code (the code a customer types in at checkout) or its serialized code (a unique per-print QR/serial code, e.g. from a printed coupon, that resolves to a shared redemption code and its promotion). Exactly one of code or serialized_code is required. A serialized-code lookup additionally returns that code's own usage metadata (redemption_code, times_used, code_status, group_status, effective_date, expiration_date) alongside the promotion. An unknown or expired code returns a 404 rather than a null success payload.", + "operationId": "kfc-promotion", "parameters": [ { - "description": "IKEA store URL slug", + "description": "The redemption code as a customer would type it in at checkout. Use a value returned by kfc-promotions when available. Exactly one of code or serialized_code is required", "in": "query", - "name": "slug", - "required": true, + "name": "code", "type": "string", - "x-example": "burbank" - }, - { - "default": "us", - "description": "Lowercase 2-letter IKEA site country code", - "in": "query", - "name": "country", - "type": "string" + "x-example": "WALMART5DOLLARSOFF" }, { - "default": "en", - "description": "Lowercase 2-letter IKEA site language code", + "description": "A unique per-print serialized/QR code that resolves to a shared redemption code. Exactly one of code or serialized_code is required", "in": "query", - "name": "language", - "type": "string" + "name": "serialized_code", + "type": "string", + "x-example": "deadbeef1234" } ], "produces": [ @@ -397209,7 +471445,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ikea.storeResponseDoc" + "$ref": "#/definitions/kfc.promotionResponseDoc" } }, "400": { @@ -397242,30 +471478,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get an IKEA store's detail", + "summary": "Look up one KFC promotion by its redemption code or serialized code", "tags": [ - "IKEA" + "KFC" ] } }, - "/ikea/stores": { + "/kfc/promotions": { "get": { - "description": "Returns IKEA's own directory of physical locations for the requested country: name, URL slug, region grouping, and location type (Store, Small store, Plan & order point with pick-up, etc). Each slug is usable directly as ikea_store's own slug input.", - "operationId": "ikea-stores", + "consumes": [ + "application/json" + ], + "description": "Returns one restaurant's current public promotions -- current deals and offers KFC's storefront marks as public, with each promotion's id, internal and display name, description, whether it applies automatically, and active redemption codes when KFC exposes them. The returned codes can be passed to kfc-promotion. A store with no active public promotions returns an empty list rather than an error.", + "operationId": "kfc-promotions", "parameters": [ { - "default": "us", - "description": "Lowercase 2-letter IKEA site country code", - "in": "query", - "name": "country", - "type": "string" - }, - { - "default": "en", - "description": "Lowercase 2-letter IKEA site language code", + "description": "KFC's alphanumeric store number, from /kfc/stores or /kfc/nearby", "in": "query", - "name": "language", - "type": "string" + "name": "store_number", + "required": true, + "type": "string", + "x-example": "I824001" } ], "produces": [ @@ -397275,7 +471508,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ikea.storesResponseDoc" + "$ref": "#/definitions/kfc.promotionsResponseDoc" } }, "400": { @@ -397302,47 +471535,27 @@ "ApiKeyAuth": [] } ], - "summary": "List IKEA physical store locations", + "summary": "Get one KFC restaurant's current public promotions", "tags": [ - "IKEA" + "KFC" ] } }, - "/ikea/suggest": { + "/kfc/store": { "get": { - "description": "Returns IKEA's own search-box typeahead result for a partial or full query: suggested query completions with their own match counts, plus a small number of top matching products. A query with no matches returns a clean empty response.", - "operationId": "ikea-suggest", + "consumes": [ + "application/json" + ], + "description": "Returns one KFC restaurant's detail by its exact store number, from /kfc/stores or /kfc/nearby, including its recurring open hours per order channel (carryout, delivery, dine-in, drive-thru, catering carryout). A channel this restaurant does not offer at all is omitted from hours rather than reported as always-closed.", + "operationId": "kfc-store", "parameters": [ { - "description": "Partial or full search term", + "description": "KFC's alphanumeric store number, from /kfc/stores or /kfc/nearby", "in": "query", - "name": "q", + "name": "store_number", "required": true, "type": "string", - "x-example": "des" - }, - { - "default": "us", - "description": "Lowercase 2-letter IKEA site country code", - "in": "query", - "name": "country", - "type": "string" - }, - { - "default": "en", - "description": "Lowercase 2-letter IKEA site language code", - "in": "query", - "name": "language", - "type": "string" - }, - { - "default": 5, - "description": "Top-product count (1-20)", - "in": "query", - "maximum": 20, - "minimum": 1, - "name": "size", - "type": "integer" + "x-example": "I824001" } ], "produces": [ @@ -397352,7 +471565,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ikea.suggestResponseDoc" + "$ref": "#/definitions/kfc.storeResponseDoc" } }, "400": { @@ -397361,6 +471574,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -397379,41 +471598,90 @@ "ApiKeyAuth": [] } ], - "summary": "Get IKEA search-box typeahead suggestions", + "summary": "Get one KFC restaurant by its store number", "tags": [ - "IKEA" + "KFC" ] } }, - "/imdb/charts": { + "/kfc/stores": { "get": { "consumes": [ "application/json" ], - "description": "Returns an IMDb title chart, chosen with `chart`: `top_rated_movies` (default), `top_rated_tv_shows`, `most_popular_movies`, `most_popular_tv_shows`, `top_rated_english_movies` or `lowest_rated_movies`. `limit` sets the rows (default 25, max 250). Each title has its rank, id, year, rating, rating count and credits.", - "operationId": "imdb-charts", + "description": "Returns KFC restaurants matching a city/state/postal code/name/franchise code/store number filter. At least one filter is required -- an unfiltered call would enumerate every US restaurant in one response, which this endpoint intentionally does not expose. Each restaurant carries its store number (the value /kfc/menu and /kfc/promotions take), full address with coordinates, phone, whether it currently accepts online orders, and its timezone. appear_in_store_results (default true) excludes internal/test records KFC's own storefront does not surface in customer-facing search -- a raw filter can otherwise return non-orderable administrative entries alongside real restaurants.", + "operationId": "kfc-stores", "parameters": [ { - "default": "top_rated_movies", - "description": "IMDb chart", + "description": "Exact store number", + "in": "query", + "name": "store_number", + "type": "string", + "x-example": "I824001" + }, + { + "description": "Restaurant city", + "in": "query", + "name": "city", + "type": "string", + "x-example": "Louisville" + }, + { + "description": "Restaurant state, two-letter code", + "in": "query", + "name": "state", + "type": "string", + "x-example": "KY" + }, + { + "description": "Restaurant postal code", + "in": "query", + "name": "postal_code", + "type": "string", + "x-example": "40213" + }, + { + "description": "Restaurant name, partial match", + "in": "query", + "name": "name", + "type": "string", + "x-example": "KFC 600 Terminal Drive" + }, + { + "description": "Exact franchise/operator code", + "in": "query", + "name": "franchise_code", + "type": "string", + "x-example": "C761" + }, + { + "description": "Restrict to restaurants shown in customer-facing search, excluding internal/test entries (default true)", + "in": "query", + "name": "appear_in_store_results", + "type": "boolean", + "x-example": true + }, + { + "description": "Sort order", "enum": [ - "top_rated_movies", - "top_rated_tv_shows", - "most_popular_movies", - "most_popular_tv_shows", - "top_rated_english_movies", - "lowest_rated_movies" + "store_number_asc", + "store_number_desc", + "name_asc", + "name_desc", + "franchise_code_asc", + "franchise_code_desc" ], "in": "query", - "name": "chart", - "type": "string" + "name": "sort", + "type": "string", + "x-example": "name_asc" }, { - "default": 25, - "description": "Rows to return, default 25, max 250", + "description": "Maximum restaurants to return, 1-50 (default 20)", "in": "query", - "name": "limit", - "type": "integer" + "name": "max_results", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -397423,7 +471691,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.chartsResponseDoc" + "$ref": "#/definitions/kfc.storesResponseDoc" } }, "400": { @@ -397432,24 +471700,12 @@ "$ref": "#/definitions/app.Response" } }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -397462,19 +471718,26 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title charts", + "summary": "Search KFC restaurants by city, state, postal code, name, franchise code, or store number", "tags": [ - "IMDb" + "KFC" ] } }, - "/imdb/image-types": { + "/khaleejtimes/article": { "get": { - "consumes": [ - "application/json" + "description": "Returns public Khaleej Times article metadata and body paragraphs from a canonical article URL. Live-blog pages are accepted and return their timestamped update headlines as paragraphs.", + "operationId": "khaleejtimes-article", + "parameters": [ + { + "description": "Canonical Khaleej Times article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.khaleejtimes.com/business/example-article-slug" + } ], - "description": "Lists every value the `type` parameter of the IMDb image endpoints accepts: `behind_the_scenes`, `event`, `poster`, `product`, `production_art`, `publicity`, `still_frame`, `unknown`. Each row carries a display label and a short description.", - "operationId": "imdb-image-types", "produces": [ "application/json" ], @@ -397482,17 +471745,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.imageTypesResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -397503,33 +471772,24 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb image types", + "summary": "Get Khaleej Times article content", "tags": [ - "IMDb" + "Khaleej Times" ] } }, - "/imdb/name": { + "/khaleejtimes/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns an IMDb person's profile. Pass exactly one of `id` (such as `nm0634240`) or `url`. The response has the name, biography, birth and death dates, birth place, professions, image and a known-for list of titles with year and credit category.", - "operationId": "imdb-name", + "description": "Returns a Khaleej Times author's name, photo, biography, and most recent articles (first page) from a canonical author profile URL.", + "operationId": "khaleejtimes-author", "parameters": [ { - "description": "IMDb name id", - "in": "query", - "name": "id", - "type": "string", - "x-example": "nm0634240" - }, - { - "description": "Absolute https://www.imdb.com/name// URL", + "description": "Canonical Khaleej Times author URL", "in": "query", "name": "url", + "required": true, "type": "string", - "x-example": "https://www.imdb.com/name/nm0634240/" + "x-example": "https://www.khaleejtimes.com/author/jane-doe" } ], "produces": [ @@ -397539,7 +471799,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.nameResponseDoc" + "$ref": "#/definitions/publicnews.khaleejTimesAuthorResponseDoc" } }, "400": { @@ -397554,18 +471814,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -397578,33 +471826,120 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb name detail", + "summary": "Get a Khaleej Times author profile", "tags": [ - "IMDb" + "Khaleej Times" ] } }, - "/imdb/name/awards": { + "/khaleejtimes/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the awards IMDb lists for a person. Pass exactly one of `id` or `url`. Each row has the event, year, category, `win` or `nomination` result, award name, recipients and related titles. `total` is the count IMDb lists, and `has_more` is true when fewer rows are returned.", - "operationId": "imdb-name-awards", + "description": "Returns current Khaleej Times headlines for one section or sub-section. `section` is required; its slug is the section's URL path with slashes turned into hyphens, so `/business/markets` is `business-markets`. Top-level sections mix their sub-sections' stories. Each item has its title, URL and publication time, plus summary, author and image when the outlet provides them. Call `khaleejtimes-sections` for the slugs.", + "operationId": "khaleejtimes-headlines", "parameters": [ { - "description": "IMDb name id", - "in": "query", - "name": "id", - "type": "string", - "x-example": "nm0634240" - }, - { - "description": "Absolute https://www.imdb.com/name// URL", + "description": "Khaleej Times section slug", + "enum": [ + "business", + "business-property", + "metaverse", + "metaverse-blockchain", + "metaverse-web3", + "business-auto", + "business-aviation", + "business-corporate", + "business-cryptocurrency", + "business-currency-exchange", + "business-economy", + "business-energy", + "business-finance", + "business-infrastructure", + "business-markets", + "business-personal-finance", + "business-tech", + "business-telecom", + "entertainment", + "entertainment-gaming", + "entertainment-local-events", + "entertainment-movies", + "entertainment-music", + "entertainment-ott", + "entertainment-things-to-do-in-the-uae", + "life-and-living", + "life-and-living-banking-in-uae", + "life-and-living-housing-in-uae", + "life-and-living-public-transport-in-uae", + "life-and-living-schooling-in-uae", + "life-and-living-uae-holidays", + "life-and-living-visa-and-immigration-in-uae", + "lifestyle", + "lifestyle-arts", + "lifestyle-beauty", + "lifestyle-books", + "lifestyle-fashion", + "lifestyle-food", + "lifestyle-gadgets", + "lifestyle-health", + "lifestyle-home", + "lifestyle-mental-health", + "lifestyle-parenting", + "lifestyle-restaurant-reviews", + "lifestyle-shopping", + "lifestyle-wellness", + "lifestyle-women-and-money", + "lifestyle-writers-corner", + "opinion", + "opinion-columnists", + "opinion-editorial", + "offbeat", + "long-reads", + "space", + "reviews", + "reviews-movie-reviews", + "reviews-tech-reviews", + "sports", + "sports-cricket", + "sports-f1", + "sports-fifa-world-cup", + "sports-football", + "sports-golf", + "sports-horse-racing", + "sports-tennis", + "sports-local-sports", + "travel", + "travel-uae-attractions", + "uae", + "uae-crime", + "uae-education", + "uae-emergencies", + "uae-environment", + "uae-expo-city-dubai", + "uae-government", + "uae-legal", + "uae-transport", + "uae-weather", + "world", + "world-africa", + "world-americas", + "world-asia", + "world-europe", + "world-gulf", + "world-mena", + "uae-eid-al-etihad", + "metaverse-nfts", + "leadership", + "leadership-interviews", + "leadership-breaking-bread", + "leadership-stories", + "leadership-contributors", + "uae-schools-and-parents", + "uae-global-indians" + ], "in": "query", - "name": "url", + "name": "section", + "required": true, "type": "string", - "x-example": "https://www.imdb.com/name/nm0634240/" + "x-example": "business" } ], "produces": [ @@ -397614,7 +471949,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.nameAwardsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -397623,20 +471958,40 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } - }, - "429": { - "description": "Too Many Requests", + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Khaleej Times section headlines", + "tags": [ + "Khaleej Times" + ] + } + }, + "/khaleejtimes/news": { + "get": { + "description": "Returns fresh Khaleej Times top stories from its public Google News sitemap (the site publishes no RSS feed). Video, partner-content, and section pages are left out.", + "operationId": "khaleejtimes-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -397653,35 +472008,45 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb name awards", + "summary": "Get Khaleej Times top stories", "tags": [ - "IMDb" + "Khaleej Times" ] } }, - "/imdb/name/credits": { + "/khaleejtimes/sections": { "get": { - "consumes": [ + "description": "Returns the public Khaleej Times section inventory used by the headlines endpoint. A section slug is its URL path with slashes turned into hyphens (for example business-markets for /business/markets).", + "operationId": "khaleejtimes-sections", + "produces": [ "application/json" ], - "description": "Returns a person's IMDb filmography, grouped into sections such as Actor, Director and Self. Pass exactly one of `id` or `url`. Each credit has its title, year, role and episode count. A section returns up to 100 credits, so `total` can exceed the rows returned.", - "operationId": "imdb-name-credits", - "parameters": [ - { - "description": "IMDb name id", - "in": "query", - "name": "id", - "type": "string", - "x-example": "nm0634240" - }, + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Absolute https://www.imdb.com/name// URL", - "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.imdb.com/name/nm0634240/" + "ApiKeyAuth": [] } ], + "summary": "Get Khaleej Times sections", + "tags": [ + "Khaleej Times" + ] + } + }, + "/kick/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Kick's top-level categories (Games, IRL, Music, Gambling, Creative, Alternative, Chat Roulette) with id, name, slug and icon. These slugs are the exact values the category parameter of kick-subcategories takes. Kick's website and its mobile app each list one parent the other omits (Gambling and Chat Roulette), so this call reads both and returns their union; icon is empty for a category only the app lists. The lists are read live from Kick.", + "operationId": "kick-categories", "produces": [ "application/json" ], @@ -397689,7 +472054,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.nameCreditsResponseDoc" + "$ref": "#/definitions/kick.categoriesResponseDoc" } }, "400": { @@ -397698,24 +472063,12 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -397728,57 +472081,34 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb name credits", + "summary": "List Kick's top-level categories", "tags": [ - "IMDb" + "Kick" ] } }, - "/imdb/name/images": { + "/kick/category-clips": { "get": { "consumes": [ "application/json" ], - "description": "Returns image metadata from a person's media index, including the original image URL, dimensions, caption and credited people. Filter by image type with `type`, which accepts a single value or a comma-separated list of: `behind_the_scenes`, `event`, `poster`, `product`, `production_art`, `publicity`, `still_frame`, `unknown`. Omit `type` to return every type. Limit defaults to 50 and clamps to 1000. Pass exactly one of `id` or `url`.", - "operationId": "imdb-name-images", + "description": "Returns one page of 20 clips made in a Kick (kick.com) game or activity category, newest first: id, title, kick.com link, thumbnail, views, likes, duration in seconds, creation time, mature flag, category, the channel it came from, with a cursor for the next page. slug is a category slug from kick-subcategories such as just-chatting; a top-level category such as games has no clip page and returns not found. Only public data is read and no playable media is returned.", + "operationId": "kick-category-clips", "parameters": [ { - "description": "IMDb name id", - "in": "query", - "name": "id", - "type": "string", - "x-example": "nm0000151" - }, - { - "description": "Absolute https://www.imdb.com/name// URL", + "description": "Category slug from kick-subcategories or kick-search-categories, lowercase; a kick.com/category URL is also accepted", "in": "query", - "name": "url", + "name": "slug", + "required": true, "type": "string", - "x-example": "https://www.imdb.com/name/nm0000151/" + "x-example": "just-chatting" }, { - "description": "Image type filter, single value or comma-separated list", - "enum": [ - "behind_the_scenes", - "event", - "poster", - "product", - "production_art", - "publicity", - "still_frame", - "unknown" - ], + "description": "Previous response's next_cursor; omit for the newest page", "in": "query", - "name": "type", + "name": "cursor", "type": "string", - "x-example": "still_frame" - }, - { - "description": "Rows to return, default 50, max 1000", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "x-example": "clip_01M5TR7FRZPCDA6BS1NP7HKV4T" } ], "produces": [ @@ -397788,7 +472118,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.nameImagesResponseDoc" + "$ref": "#/definitions/kick.categoryClipsResponseDoc" } }, "400": { @@ -397809,12 +472139,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -397827,40 +472151,27 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb name images", + "summary": "List the newest clips in a Kick category", "tags": [ - "IMDb" + "Kick" ] } }, - "/imdb/name/videos": { + "/kick/channel": { "get": { "consumes": [ "application/json" ], - "description": "Returns public person video metadata and thumbnail URLs only; playback URLs and media manifests are never returned. IMDb caps the upstream slice at 100 and provides no usable continuation cursor, so `total` can exceed returned rows and `has_more` reports that condition. Limit defaults to 50 and clamps to 100. Pass exactly one of `id` or `url`.", - "operationId": "imdb-name-videos", + "description": "Returns a Kick (kick.com) channel's public profile and, when it is live, its current broadcast: username, bio, verification and affiliate flags, follower count, linked social handles, profile and banner images, recent categories, and a live object with title, viewers, start time, language, tags and categories (omitted when the channel is offline). slug is the channel slug from its kick.com address, case-insensitive; a full kick.com URL is also accepted. Playable stream URLs are never returned. An unknown channel returns not found.", + "operationId": "kick-channel", "parameters": [ { - "description": "IMDb name id", - "in": "query", - "name": "id", - "type": "string", - "x-example": "nm0000151" - }, - { - "description": "Absolute https://www.imdb.com/name// URL", + "description": "Channel slug from kick.com/{slug}, case-insensitive; a kick.com URL is also accepted", "in": "query", - "name": "url", + "name": "slug", + "required": true, "type": "string", - "x-example": "https://www.imdb.com/name/nm0000151/" - }, - { - "description": "Rows to return, default 50, max 100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "x-example": "xqc" } ], "produces": [ @@ -397870,7 +472181,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.nameVideosResponseDoc" + "$ref": "#/definitions/kick.channelResponseDoc" } }, "400": { @@ -397891,12 +472202,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -397909,34 +472214,27 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb name video metadata", + "summary": "Get a Kick channel profile and live state", "tags": [ - "IMDb" + "Kick" ] } }, - "/imdb/search": { + "/kick/channel-chatroom": { "get": { "consumes": [ "application/json" ], - "description": "Searches IMDb titles by `query`, returning up to `limit` rows (default 10, max 20). Each result has the title id, title, URL, year, title type, image and a description holding the lead cast. A query with no matches returns an empty `results` list.", - "operationId": "imdb-search", + "description": "Returns a Kick (kick.com) channel's chat restrictions and rules: slow mode (delay between messages), subscribers-only, followers-only (minimum follow time), emotes-only and minimum account age, whether gifts are enabled, and the channel's chat rules text. slug is the channel slug from its kick.com address, case-insensitive; a full kick.com URL is also accepted. The pinned message is not returned. This call reads two Kick pages. An unknown channel returns not found.", + "operationId": "kick-channel-chatroom", "parameters": [ { - "description": "Search query", + "description": "Channel slug from kick.com/{slug}, case-insensitive; a kick.com URL is also accepted", "in": "query", - "name": "query", + "name": "slug", "required": true, "type": "string", - "x-example": "inception" - }, - { - "description": "Rows to return, default 10, max 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "x-example": "xqc" } ], "produces": [ @@ -397946,7 +472244,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.searchResponseDoc" + "$ref": "#/definitions/kick.channelChatroomResponseDoc" } }, "400": { @@ -397967,12 +472265,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -397985,207 +472277,34 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title search", + "summary": "Get a Kick channel's chat settings and rules", "tags": [ - "IMDb" + "Kick" ] } }, - "/imdb/search/title": { + "/kick/channel-clips": { "get": { "consumes": [ "application/json" ], - "description": "Returns IMDb advanced title-search results (imdb.com/search/title/). At least one filter is required; sort/limit alone are not enough. Limit defaults to 25 and clamps to 50; only IMDb's first page of results is returned (see `total`/`has_more`), there is no deeper cursor pagination. Genre/company/certificate/country/language/keyword/characters/role are include-only lists; there is no exclude support. Unsupported: genre exclude, three curated `groups` values (best-picture-nominee, best-director-nominee, national-film-registry), and the non-plot \"page topic\" search fields.", - "operationId": "imdb-search-title", + "description": "Returns one page of 20 clips from a Kick channel, newest first: id, title, kick.com link, thumbnail, views, likes, duration in seconds, creation time, mature flag, category, the viewer who made the clip and the channel. Page onward by passing the previous response's next_cursor as cursor; next_cursor is empty on the last page. Playable clip URLs are never returned. An unknown channel returns not found.", + "operationId": "kick-channel-clips", "parameters": [ { - "description": "Title-name substring match", - "in": "query", - "name": "title", - "type": "string", - "x-example": "matrix" - }, - { - "description": "Comma-separated title types: `feature`, `tvSeries`, `short`, `tvEpisode`, `tvMiniSeries`, `tvMovie`, `tvSpecial`, `tvShort`, `videoGame`, `video`, `musicVideo`, `podcastSeries`, `podcastEpisode`", - "in": "query", - "name": "title_type", - "type": "string", - "x-example": "feature" - }, - { - "description": "Comma-separated genres (include-only): `Action`, `Adventure`, `Animation`, `Biography`, `Comedy`, `Crime`, `Documentary`, `Drama`, `Family`, `Fantasy`, `Film-Noir`, `Game-Show`, `History`, `Horror`, `Music`, `Musical`, `Mystery`, `News`, `Reality-TV`, `Romance`, `Sci-Fi`, `Short`, `Sport`, `Talk-Show`, `Thriller`, `War`, `Western`", - "in": "query", - "name": "genres", - "type": "string", - "x-example": "Action,Adventure" - }, - { - "description": "Release date lower bound: YYYY, YYYY-MM, or YYYY-MM-DD", - "in": "query", - "name": "release_date_from", - "type": "string", - "x-example": "2020-01-01" - }, - { - "description": "Release date upper bound: YYYY, YYYY-MM, or YYYY-MM-DD", - "in": "query", - "name": "release_date_to", - "type": "string", - "x-example": "2021-12-31" - }, - { - "description": "Minimum IMDb user rating, 0-10", - "in": "query", - "name": "min_user_rating", - "type": "number", - "x-example": 7 - }, - { - "description": "Maximum IMDb user rating, 0-10", - "in": "query", - "name": "max_user_rating", - "type": "number", - "x-example": 9.5 - }, - { - "description": "Minimum number of user rating votes", - "in": "query", - "name": "min_votes", - "type": "integer", - "x-example": 25000 - }, - { - "description": "Maximum number of user rating votes", - "in": "query", - "name": "max_votes", - "type": "integer" - }, - { - "description": "Minimum IMDb popularity rank (1 is most popular)", - "in": "query", - "name": "min_popularity", - "type": "integer" - }, - { - "description": "Maximum IMDb popularity rank", - "in": "query", - "name": "max_popularity", - "type": "integer" - }, - { - "description": "Minimum runtime in minutes", - "in": "query", - "name": "min_runtime", - "type": "integer" - }, - { - "description": "Maximum runtime in minutes", - "in": "query", - "name": "max_runtime", - "type": "integer" - }, - { - "description": "Comma-separated awards/curated-list groups: `oscar_winner`, `oscar_nominee`, `emmy_winner`, `emmy_nominee`, `golden_globe_winner`, `golden_globe_nominee`, `best_picture_winner`, `best_director_winner`, `razzie_winner`, `razzie_nominee`, `top_100`, `top_250`, `top_1000`, `bottom_100`, `bottom_250`, `bottom_1000`", - "in": "query", - "name": "groups", - "type": "string" - }, - { - "description": "Comma-separated plot keywords", - "in": "query", - "name": "keywords", - "type": "string", - "x-example": "superhero" - }, - { - "description": "Comma-separated IMDb company ids, format `co########`", - "in": "query", - "name": "companies", - "type": "string", - "x-example": "co0000756" - }, - { - "description": "Comma-separated `COUNTRY:RATING` certificate pairs, e.g. `US:PG-13`", - "in": "query", - "name": "certificates", - "type": "string", - "x-example": "US:PG-13" - }, - { - "description": "Comma-separated color info: `color`, `black_and_white`, `colorized`, `aces`", - "in": "query", - "name": "colors", - "type": "string" - }, - { - "description": "Comma-separated ISO country codes", - "in": "query", - "name": "countries", - "type": "string", - "x-example": "US" - }, - { - "description": "Comma-separated ISO language codes", - "in": "query", - "name": "languages", - "type": "string", - "x-example": "en" - }, - { - "description": "Comma-separated sound mix names: `12-Track Digital Sound`, `3 Channel Stereo`, `4-Track Stereo`, `6-Track Stereo`, `70 mm 6-Track`, `AGA Sound System`, `Auro 11.1`, `CDS`, `Chronophone`, `Cinematophone`, `Cinephone`, `Cinerama 7-Track`, `Cinesound`, `D-Cinema 48kHz 5.1`, `Datasat`, `De Forest Phonofilm`, `Digitrac Digital Audio System`, `Dolby`, `Dolby Atmos`, `Dolby Digital`, `Dolby Digital EX`, `Dolby SR`, `Dolby Stereo`, `Dolby Surround 7.1`, `DTS`, `DTS 70 mm`, `DTS Stereo`, `DTS-ES`, `IMAX 6-Track`, `Kinoplasticon`, `LC-Concept Digital Sound`, `Matrix Surround`, `Mono`, `Perspecta Stereo`, `Phono-Kinema`, `SDDS`, `Sensurround`, `Silent`, `Sonics-DDP`, `Sonix`, `Stereo`, `Ultra Stereo`, `Vitaphone`", - "in": "query", - "name": "sound_mixes", - "type": "string" - }, - { - "description": "Comma-separated cast/crew IMDb name ids, format `nm########`", - "in": "query", - "name": "role", - "type": "string", - "x-example": "nm0634240" - }, - { - "description": "Comma-separated character names", - "in": "query", - "name": "characters", - "type": "string", - "x-example": "Neo" - }, - { - "description": "Plot text search term", - "in": "query", - "name": "plot", - "type": "string", - "x-example": "hacker" - }, - { - "default": false, - "description": "Include adult titles. Defaults to excluded", - "in": "query", - "name": "include_adult", - "type": "boolean" - }, - { - "description": "One of `moviemeter`, `alpha`, `user_rating`, `num_votes`, `boxoffice_gross_us`, `runtime`, `year`, `release_date`", + "description": "Channel slug from kick.com/{slug}, case-insensitive; a kick.com URL is also accepted", "in": "query", - "name": "sort", + "name": "slug", + "required": true, "type": "string", - "x-example": "user_rating" + "x-example": "xqc" }, { - "description": "`asc` or `desc`. Defaults to `asc` when sort is set", + "description": "Previous response's next_cursor; omit for the newest page", "in": "query", - "name": "sort_order", + "name": "cursor", "type": "string", - "x-example": "desc" - }, - { - "description": "Rows to return, default 25, max 50", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 25 + "x-example": "abc" } ], "produces": [ @@ -398195,7 +472314,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.searchTitleResponseDoc" + "$ref": "#/definitions/kick.channelClipsResponseDoc" } }, "400": { @@ -398216,12 +472335,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -398234,33 +472347,27 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb advanced title search", + "summary": "List a Kick channel's clips", "tags": [ - "IMDb" + "Kick" ] } }, - "/imdb/title": { + "/kick/channel-emotes": { "get": { "consumes": [ "application/json" ], - "description": "Returns an IMDb title's details. Pass exactly one of `id` (such as `tt1375666`) or `url`. The response has the title, type, year, release date, runtime, genres, plot, content rating, rating and count, popularity rank, directors and up to three lead cast. Rating and cast fields appear only when present.", - "operationId": "imdb-title", + "description": "Returns the chat emote sets available in a Kick (kick.com) channel: the channel's own custom emotes (id, name, whether subscribers only, image link), plus the Global and Emoji sets that every channel shares. slug is the channel slug from its kick.com address, case-insensitive; a full kick.com URL is also accepted. A channel with no custom emotes returns an empty channel set. Only public data is read and no playable media is returned. An unknown channel returns not found.", + "operationId": "kick-channel-emotes", "parameters": [ { - "description": "IMDb title id", - "in": "query", - "name": "id", - "type": "string", - "x-example": "tt1375666" - }, - { - "description": "Absolute https://www.imdb.com/title// URL", + "description": "Channel slug from kick.com/{slug}, case-insensitive; a kick.com URL is also accepted", "in": "query", - "name": "url", + "name": "slug", + "required": true, "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "x-example": "xqc" } ], "produces": [ @@ -398270,7 +472377,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titleResponseDoc" + "$ref": "#/definitions/kick.channelEmotesResponseDoc" } }, "400": { @@ -398291,12 +472398,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -398309,33 +472410,27 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title detail", + "summary": "List the chat emotes a Kick channel offers", "tags": [ - "IMDb" + "Kick" ] } }, - "/imdb/title/awards": { + "/kick/channel-links": { "get": { "consumes": [ "application/json" ], - "description": "Returns the awards IMDb lists for a title. Pass exactly one of `id` or `url`. Each row has the event, year, category, `win` or `nomination` result, award name, recipients and notes. `total` is the number IMDb lists and `has_more` is true when only part is returned.", - "operationId": "imdb-title-awards", + "description": "Returns the panels a Kick (kick.com) channel shows under its stream, in the order Kick shows them: link panels (tip pages, merch, social profiles) with title, description, URL and image, and text panels (FAQ, rules, disclaimers) that are only a title and description. slug is the channel slug from its kick.com address, case-insensitive; a full kick.com URL is also accepted. Only public data is read and no playable media is returned. An unknown channel returns not found.", + "operationId": "kick-channel-links", "parameters": [ { - "description": "IMDb title id", - "in": "query", - "name": "id", - "type": "string", - "x-example": "tt1375666" - }, - { - "description": "Absolute https://www.imdb.com/title// URL", + "description": "Channel slug from kick.com/{slug}, case-insensitive; a kick.com URL is also accepted", "in": "query", - "name": "url", + "name": "slug", + "required": true, "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "x-example": "xqc" } ], "produces": [ @@ -398345,7 +472440,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titleAwardsResponseDoc" + "$ref": "#/definitions/kick.channelLinksResponseDoc" } }, "400": { @@ -398366,12 +472461,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -398384,33 +472473,27 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title awards", + "summary": "List a Kick channel's link panels", "tags": [ - "IMDb" + "Kick" ] } }, - "/imdb/title/box-office": { + "/kick/channel-streams": { "get": { "consumes": [ "application/json" ], - "description": "Returns a title's public box-office summary: lifetime gross by market (domestic, international, worldwide), the domestic opening weekend, and the production budget. IMDb reports each figure independently, so a real title with no box office data (most TV series, many non-theatrical titles) returns `has_box_office: false` with every figure omitted rather than an error. Pass exactly one of `id` or `url`.", - "operationId": "imdb-title-box-office", + "description": "Returns a Kick (kick.com) channel's recent broadcast history, newest first: id, title, start time, duration in milliseconds, the viewer count Kick reports for the broadcast, language, mature flag, tags, categories, thumbnail, and for broadcasts with a recording its video uuid, video views and kick.com video link. slug is the channel slug from its kick.com address, case-insensitive; a full kick.com URL is also accepted. Kick keeps between none and about thirty broadcasts. Only public data is read and no playable media is returned. An unknown channel returns not found.", + "operationId": "kick-channel-streams", "parameters": [ { - "description": "IMDb title id", - "in": "query", - "name": "id", - "type": "string", - "x-example": "tt0111161" - }, - { - "description": "Absolute https://www.imdb.com/title// URL", + "description": "Channel slug from kick.com/{slug}, case-insensitive; a kick.com URL is also accepted", "in": "query", - "name": "url", + "name": "slug", + "required": true, "type": "string", - "x-example": "https://www.imdb.com/title/tt0111161/" + "x-example": "xqc" } ], "produces": [ @@ -398420,7 +472503,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titleBoxOfficeResponseDoc" + "$ref": "#/definitions/kick.channelStreamsResponseDoc" } }, "400": { @@ -398441,12 +472524,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -398459,33 +472536,27 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title box office summary", + "summary": "List a Kick channel's recent broadcast history", "tags": [ - "IMDb" + "Kick" ] } }, - "/imdb/title/company-credits": { + "/kick/channel-videos": { "get": { "consumes": [ "application/json" ], - "description": "Returns the company credits IMDb lists for a title, in sections such as production companies and distributors. Pass exactly one of `id` or `url`. Each company has its name, URL and a qualifier note. `total` is the count IMDb lists, so a short list is normal on popular titles.", - "operationId": "imdb-title-company-credits", + "description": "Returns a Kick channel's recent past broadcasts (VODs), newest first: id, uuid, title, start time, duration in milliseconds, views, language, mature flag, tags, categories, thumbnail and the kick.com video link. Kick returns a fixed window of recent videos (26 at the time of writing) with no paging, so this call takes only the channel slug. Playable stream sources are never returned. An unknown channel returns not found.", + "operationId": "kick-channel-videos", "parameters": [ { - "description": "IMDb title id", - "in": "query", - "name": "id", - "type": "string", - "x-example": "tt1375666" - }, - { - "description": "Absolute https://www.imdb.com/title// URL", + "description": "Channel slug from kick.com/{slug}, case-insensitive; a kick.com URL is also accepted", "in": "query", - "name": "url", + "name": "slug", + "required": true, "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "x-example": "xqc" } ], "produces": [ @@ -398495,7 +472566,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titlePublicFactsResponseDoc" + "$ref": "#/definitions/kick.channelVideosResponseDoc" } }, "400": { @@ -398516,12 +472587,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -398534,40 +472599,27 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title company credits", + "summary": "List a Kick channel's recent past broadcasts", "tags": [ - "IMDb" + "Kick" ] } }, - "/imdb/title/connections": { + "/kick/clip": { "get": { "consumes": [ "application/json" ], - "description": "Returns a bounded slice of a title's public connections: other titles it references or is referenced by, such as remakes, spin-offs, \"featured in\" clips, and \"edited into\" compilations. `category` is upstream-supplied free text, not a closed enum. IMDb's connections list can run to hundreds or thousands of rows, so `total` can exceed the returned rows and `has_more` reports that condition. Limit defaults to 50 and clamps to 250. Pass exactly one of `id` or `url`.", - "operationId": "imdb-title-connections", + "description": "Returns one Kick clip by id: title, kick.com link, thumbnail, views, duration, creation time, the moment it starts inside the source broadcast, mature flag, category and channel. id is a clip id such as clip_01M5SKVA6GGAAAT5YPJ7J43WE4, from the id field of kick-channel-clips or kick-clips. A malformed id returns a 400 and an unknown clip returns not found. Playable clip URLs are never returned.", + "operationId": "kick-clip", "parameters": [ { - "description": "IMDb title id", + "description": "Clip id from kick-clips' or kick-channel-clips' own clips[].id field", "in": "query", "name": "id", + "required": true, "type": "string", - "x-example": "tt0111161" - }, - { - "description": "Absolute https://www.imdb.com/title// URL", - "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.imdb.com/title/tt0111161/" - }, - { - "description": "Rows to return, default 50, max 250", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "x-example": "clip_01M5SKVA6GGAAAT5YPJ7J43WE4" } ], "produces": [ @@ -398577,7 +472629,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titleConnectionsResponseDoc" + "$ref": "#/definitions/kick.clipResponseDoc" } }, "400": { @@ -398598,12 +472650,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -398616,33 +472662,50 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title connections", + "summary": "Get one Kick clip", "tags": [ - "IMDb" + "Kick" ] } }, - "/imdb/title/credits": { + "/kick/clips": { "get": { "consumes": [ "application/json" ], - "description": "Returns the full cast and crew IMDb lists for a title, in named sections. Pass exactly one of `id` or `url`. Each credit has a name, IMDb name URL, role and, for cast, the character. The cast returns up to 2,000 rows and other sections up to 100.", - "operationId": "imdb-title-credits", + "description": "Returns one page of 20 clips from across all of Kick, either newest first (sort=date, the default) or ranked by views inside a time window (sort=views with time=day, week, month or all). Each clip has its id, title, kick.com link, thumbnail, views, duration, category and channel. Page onward by passing the previous response's next_cursor as cursor. Playable clip URLs are never returned. Use kick-channel-clips for one channel's clips.", + "operationId": "kick-clips", "parameters": [ { - "description": "IMDb title id", + "description": "Ordering: date is newest first (default), views ranks by views inside the time window", + "enum": [ + "date", + "views" + ], "in": "query", - "name": "id", + "name": "sort", "type": "string", - "x-example": "tt1375666" + "x-example": "views" }, { - "description": "Absolute https://www.imdb.com/title// URL", + "description": "Window that views ranks within; omit for Kick's default window", + "enum": [ + "day", + "week", + "month", + "all" + ], "in": "query", - "name": "url", + "name": "time", "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "x-example": "week" + }, + { + "description": "Previous response's next_cursor; omit for the first page", + "in": "query", + "name": "cursor", + "type": "string", + "x-example": "abc" } ], "produces": [ @@ -398652,7 +472715,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.creditsResponseDoc" + "$ref": "#/definitions/kick.clipsResponseDoc" } }, "400": { @@ -398661,24 +472724,12 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -398691,47 +472742,31 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title credits", + "summary": "List Kick's site-wide clips", "tags": [ - "IMDb" + "Kick" ] } }, - "/imdb/title/episodes": { + "/kick/drops": { "get": { "consumes": [ "application/json" ], - "description": "Returns public IMDb episode rows for a series title. Limit defaults to 10 and clamps to 20. Optional `season` filters the episodes returned. Pass exactly one of `id` or `url`.", - "operationId": "imdb-title-episodes", + "description": "Returns Kick (kick.com) Drops campaigns, publisher-sponsored rewards that viewers earn by watching, newest first: id, name, status, start and end time, campaign page, the rule (for example Watch to redeem), the publisher with its logo, the game or activity category, every reward with the watch threshold that earns it and its image, and the channels taking part. status is active (the default), expired or all. Only public campaign information is read; no account or progress data.", + "operationId": "kick-drops", "parameters": [ { - "description": "IMDb title id", - "in": "query", - "name": "id", - "type": "string", - "x-example": "tt0944947" - }, - { - "description": "Absolute https://www.imdb.com/title// URL", + "description": "Which campaigns to return: active (default), expired or all", + "enum": [ + "active", + "expired", + "all" + ], "in": "query", - "name": "url", + "name": "status", "type": "string", - "x-example": "https://www.imdb.com/title/tt0944947/" - }, - { - "description": "Season number to request", - "in": "query", - "name": "season", - "type": "integer", - "x-example": 1 - }, - { - "description": "Rows to return, default 10, max 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "x-example": "active" } ], "produces": [ @@ -398741,7 +472776,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.episodesResponseDoc" + "$ref": "#/definitions/kick.dropsResponseDoc" } }, "400": { @@ -398750,24 +472785,12 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -398780,35 +472803,19 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title episodes", + "summary": "List Kick Drops campaigns", "tags": [ - "IMDb" + "Kick" ] } }, - "/imdb/title/filming-locations": { + "/kick/gifts": { "get": { "consumes": [ "application/json" ], - "description": "Returns the filming locations IMDb lists for a title. Pass exactly one of `id` or `url`. Each location has its text and an optional note. `total` is the count IMDb lists, `has_more` shows when the list is cut short, and a title with none returns an empty list with `total` 0.", - "operationId": "imdb-title-filming-locations", - "parameters": [ - { - "description": "IMDb title id", - "in": "query", - "name": "id", - "type": "string", - "x-example": "tt1375666" - }, - { - "description": "Absolute https://www.imdb.com/title// URL", - "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" - } - ], + "description": "Returns the catalog of gifts viewers can send on Kick (kick.com) with Kicks, Kick's virtual currency: gift id, name, price in Kicks, tier (BASIC, MID or HIGHER), type (BASIC or LEVEL_UP), and for level-up gifts the message length they allow and how long they pin the message in chat. This call takes no parameters.", + "operationId": "kick-gifts", "produces": [ "application/json" ], @@ -398816,7 +472823,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titlePublicFactsResponseDoc" + "$ref": "#/definitions/kick.giftsResponseDoc" } }, "400": { @@ -398825,24 +472832,12 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -398855,35 +472850,19 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title filming locations", + "summary": "List the gifts viewers can send on Kick", "tags": [ - "IMDb" + "Kick" ] } }, - "/imdb/title/goofs": { + "/kick/languages": { "get": { "consumes": [ "application/json" ], - "description": "Returns the goofs IMDb lists for a title. Pass exactly one of `id` or `url`. Each entry in `facts` has the text, a `spoiler` flag and, when IMDb groups it, a category such as Continuity. `total` is the count IMDb lists and `has_more` is true when only part is returned.", - "operationId": "imdb-title-goofs", - "parameters": [ - { - "description": "IMDb title id", - "in": "query", - "name": "id", - "type": "string", - "x-example": "tt1375666" - }, - { - "description": "Absolute https://www.imdb.com/title// URL", - "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" - } - ], + "description": "Returns the stream languages Kick shows in its own language picker, each with its code and display name (67 at the time of writing). These codes are all accepted by the language parameter of kick-livestreams, which also accepts further ISO-style codes the picker does not list. The list is read live from Kick, so it follows any language Kick adds.", + "operationId": "kick-languages", "produces": [ "application/json" ], @@ -398891,7 +472870,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titlePublicFactsResponseDoc" + "$ref": "#/definitions/kick.languagesResponseDoc" } }, "400": { @@ -398900,24 +472879,12 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -398930,57 +472897,58 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title goofs", + "summary": "List Kick stream languages", "tags": [ - "IMDb" + "Kick" ] } }, - "/imdb/title/images": { + "/kick/livestreams": { "get": { "consumes": [ "application/json" ], - "description": "Returns image metadata from a title's media index, including the original image URL, dimensions, caption and credited people. Filter by image type with `type`, which accepts a single value or a comma-separated list of: `behind_the_scenes`, `event`, `poster`, `product`, `production_art`, `publicity`, `still_frame`, `unknown`. Omit `type` to return every type. Limit defaults to 50 and clamps to 1000. Pass exactly one of `id` or `url`.", - "operationId": "imdb-title-images", + "description": "Returns one page of Kick's live-stream directory: title, viewer count, start time, language, mature flag, tags, category, thumbnail and the channel for each live broadcast. sort is viewer_count_desc (the default, most viewers first) or featured. language filters to one stream language by code (kick-languages lists the languages Kick shows in its own picker; the directory accepts a wider range of codes than that list, and an unrecognized code returns a 400), and category_id filters to one category by the numeric id from kick-subcategories or kick-search-categories. limit is 1 to 100 (default 24). Page onward by passing the previous response's next_cursor as after; next_cursor is empty on the last page.", + "operationId": "kick-livestreams", "parameters": [ { - "description": "IMDb title id", + "description": "Ordering: viewer_count_desc is most viewers first (default), featured is Kick's featured order", + "enum": [ + "viewer_count_desc", + "featured" + ], "in": "query", - "name": "id", + "name": "sort", "type": "string", - "x-example": "tt0089753" + "x-example": "viewer_count_desc" }, { - "description": "Absolute https://www.imdb.com/title// URL", + "description": "Stream language code such as en, ja, es, pt-BR, optionally with a region (2 to 3 letters, then an optional 2 to 4 letter region); see kick-languages for the codes Kick lists", "in": "query", - "name": "url", + "name": "language", "type": "string", - "x-example": "https://www.imdb.com/title/tt0089753/" + "x-example": "ja" }, { - "description": "Image type filter, single value or comma-separated list", - "enum": [ - "behind_the_scenes", - "event", - "poster", - "product", - "production_art", - "publicity", - "still_frame", - "unknown" - ], + "description": "Category id from kick-subcategories' or kick-search-categories' own id field", "in": "query", - "name": "type", - "type": "string", - "x-example": "still_frame" + "name": "category_id", + "type": "integer", + "x-example": 15 }, { - "description": "Rows to return, default 50, max 1000", + "description": "Page size, 1 to 100; defaults to 24", "in": "query", "name": "limit", "type": "integer", - "x-example": 50 + "x-example": 24 + }, + { + "description": "Previous response's next_cursor; omit for the first page", + "in": "query", + "name": "after", + "type": "string", + "x-example": "eyJvIjoxfQ" } ], "produces": [ @@ -398990,7 +472958,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titleImagesResponseDoc" + "$ref": "#/definitions/kick.livestreamsResponseDoc" } }, "400": { @@ -398999,24 +472967,12 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -399029,33 +472985,34 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title images", + "summary": "List live broadcasts on Kick", "tags": [ - "IMDb" + "Kick" ] } }, - "/imdb/title/keywords": { + "/kick/search-categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns the plot keywords IMDb lists for a title. Pass exactly one of `id` or `url`. Each keyword has its text and an IMDb search URL for that keyword. `total` is the count IMDb lists, so a short list is normal on popular titles.", - "operationId": "imdb-title-keywords", + "description": "Searches Kick's game and activity categories by name and returns each match's id, name, slug, tags, mature flag, current viewers, thumbnail and kick.com link. query is required and at most 100 characters; limit is 1 to 100 (default 10). Use this to find categories outside the first pages that kick-subcategories can reach. A search with no matches returns an empty list.", + "operationId": "kick-search-categories", "parameters": [ { - "description": "IMDb title id", + "description": "Category name to search for, up to 100 characters", "in": "query", - "name": "id", + "name": "query", + "required": true, "type": "string", - "x-example": "tt1375666" + "x-example": "chat" }, { - "description": "Absolute https://www.imdb.com/title// URL", + "description": "Maximum results, 1 to 100; defaults to 10", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -399065,7 +473022,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titlePublicFactsResponseDoc" + "$ref": "#/definitions/kick.searchCategoriesResponseDoc" } }, "400": { @@ -399074,24 +473031,12 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -399104,33 +473049,41 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title keywords", + "summary": "Search Kick categories", "tags": [ - "IMDb" + "Kick" ] } }, - "/imdb/title/parental-guide": { + "/kick/search-channels": { "get": { "consumes": [ "application/json" ], - "description": "Returns the IMDb parental guide for a title. Pass exactly one of `id` or `url`. Categories such as violence, profanity and frightening scenes carry a severity of `none`, `mild`, `moderate` or `severe` and the guide text. A `summary` gives counts and the highest severity. Spoiler items are excluded.", - "operationId": "imdb-title-parental-guide", + "description": "Searches Kick channels by name and returns each match's id, slug, username, follower count, live flag, verification and kick.com link, most relevant first. query is required and at most 100 characters. live=true restricts to channels that are broadcasting now. limit is 1 to 100 (default 10). A search with no matches returns an empty list.", + "operationId": "kick-search-channels", "parameters": [ { - "description": "IMDb title id", + "description": "Channel name to search for, up to 100 characters", "in": "query", - "name": "id", + "name": "query", + "required": true, "type": "string", - "x-example": "tt1375666" + "x-example": "xqc" }, { - "description": "Absolute https://www.imdb.com/title// URL", + "description": "Only channels live now", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "name": "live", + "type": "boolean", + "x-example": true + }, + { + "description": "Maximum results, 1 to 100; defaults to 10", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -399140,7 +473093,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.parentalGuideResponseDoc" + "$ref": "#/definitions/kick.searchChannelsResponseDoc" } }, "400": { @@ -399149,24 +473102,12 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -399179,33 +473120,49 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title parental guide", + "summary": "Search Kick channels", "tags": [ - "IMDb" + "Kick" ] } }, - "/imdb/title/public-facts-analysis": { + "/kick/subcategories": { "get": { "consumes": [ "application/json" ], - "description": "Returns derived public-page summary metrics for IMDb trivia, goofs, quotes, keywords, filming locations, and company credits. This endpoint is not viewing advice. Pass exactly one of `id` or `url`. The six sections are gathered from six independent sources, so a section that cannot be fetched is omitted and named in `missing_sections` with `partial` set to `true`, rather than failing the whole response; an error is returned only when no section could be fetched. Callers that require a complete analysis should check `partial`.", - "operationId": "imdb-title-public-facts-analysis", + "description": "Returns one page of Kick's game and activity categories (Just Chatting, Grand Theft Auto V, ...) ordered by current viewers: id, name, slug, parent category, tags, viewers, mature flag, banner and kick.com link. category restricts to one top-level category by slug from kick-categories (a parent Kick adds later is accepted too). page is 1 to 20 and limit is 1 to 32 (default 24) because Kick silently caps both; total is the size of the whole catalog (over 18,000) while reachable is how many entries these limits can reach, so use kick-search-categories to find a category outside the first pages.", + "operationId": "kick-subcategories", "parameters": [ { - "description": "IMDb title id", + "description": "Top-level category slug from kick-categories; a parent Kick adds later is also accepted once it appears there", + "enum": [ + "games", + "irl", + "music", + "gambling", + "creative", + "alternative", + "chat-roulette" + ], "in": "query", - "name": "id", + "name": "category", "type": "string", - "x-example": "tt1375666" + "x-example": "irl" }, { - "description": "Absolute https://www.imdb.com/title// URL", + "description": "Page number, 1 to 20; defaults to 1", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Page size, 1 to 32; defaults to 24", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -399215,7 +473172,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titlePublicFactsAnalysisResponseDoc" + "$ref": "#/definitions/kick.subcategoriesResponseDoc" } }, "400": { @@ -399224,24 +473181,12 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -399254,33 +473199,27 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title public facts analysis", + "summary": "List Kick's game and activity categories", "tags": [ - "IMDb" + "Kick" ] } }, - "/imdb/title/quotes": { + "/kick/subcategory": { "get": { "consumes": [ "application/json" ], - "description": "Returns the quotes IMDb lists for a title. Pass exactly one of `id` or `url`. Each entry in `facts` is a whole exchange, with lines prefixed by the speaker, plus a `spoiler` flag. `total` is the count IMDb lists, so a short list is normal on popular titles.", - "operationId": "imdb-title-quotes", + "description": "Returns one Kick game or activity category by slug: id, name, parent category, tags, description, current viewers, follower count, mature flag, banner and kick.com link. slug comes from kick-subcategories or kick-search-categories. An unknown slug returns not found.", + "operationId": "kick-subcategory", "parameters": [ { - "description": "IMDb title id", - "in": "query", - "name": "id", - "type": "string", - "x-example": "tt1375666" - }, - { - "description": "Absolute https://www.imdb.com/title// URL", + "description": "Category slug from kick-subcategories' or kick-search-categories' own slug field", "in": "query", - "name": "url", + "name": "slug", + "required": true, "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "x-example": "just-chatting" } ], "produces": [ @@ -399290,7 +473229,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titlePublicFactsResponseDoc" + "$ref": "#/definitions/kick.subcategoryResponseDoc" } }, "400": { @@ -399311,12 +473250,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -399329,35 +473262,19 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title quotes", + "summary": "Get one Kick category", "tags": [ - "IMDb" + "Kick" ] } }, - "/imdb/title/ratings": { + "/kick/top-channels": { "get": { "consumes": [ "application/json" ], - "description": "Returns IMDb's aggregate rating, vote count, ten rating buckets, and country rating summaries. Pass exactly one of `id` or `url`.", - "operationId": "imdb-title-ratings", - "parameters": [ - { - "description": "IMDb title id", - "in": "query", - "name": "id", - "type": "string", - "x-example": "tt0111161" - }, - { - "description": "Absolute IMDb title URL", - "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.imdb.com/title/tt0111161/" - } - ], + "description": "Returns Kick's top-channels list (30 at the time of writing) ranked by followers: id, slug, username, follower count, live flag, verification, profile picture and kick.com link. The list takes no parameters.", + "operationId": "kick-top-channels", "produces": [ "application/json" ], @@ -399365,7 +473282,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.ratingsResponseDoc" + "$ref": "#/definitions/kick.topChannelsResponseDoc" } }, "400": { @@ -399374,6 +473291,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -399386,33 +473309,27 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title ratings breakdown", + "summary": "List Kick's top channels", "tags": [ - "IMDb" + "Kick" ] } }, - "/imdb/title/release-info": { + "/kick/video": { "get": { "consumes": [ "application/json" ], - "description": "Returns the release dates and alternate titles IMDb lists for a title. Pass exactly one of `id` or `url`. Releases have a country, date and note; alternate titles have a country, title and type. Both lists are often shorter than `total` and `alternate_titles_total`.", - "operationId": "imdb-title-release-info", + "description": "Returns one Kick (kick.com) past broadcast looked up by its recording's uuid, without needing the channel: uuid, title, start time, duration in milliseconds, the viewer count Kick reports, views, status, language, mature flag, tags, categories, thumbnail, the owning channel and the kick.com video link. id is the uuid from kick-channel-videos or kick-channel-streams, or a kick.com video URL. Only public data is read and no playable media is returned. An unknown video returns not found.", + "operationId": "kick-video", "parameters": [ { - "description": "IMDb title id", + "description": "Video uuid (36 characters) from kick-channel-videos or kick-channel-streams, or a kick.com video URL", "in": "query", "name": "id", + "required": true, "type": "string", - "x-example": "tt1375666" - }, - { - "description": "Absolute https://www.imdb.com/title// URL", - "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "x-example": "eb707c31-208b-4737-8bcf-a5c9fd187e82" } ], "produces": [ @@ -399422,7 +473339,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.releaseInfoResponseDoc" + "$ref": "#/definitions/kick.videoResponseDoc" } }, "400": { @@ -399443,12 +473360,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -399461,40 +473372,35 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title release info", + "summary": "Get a Kick video by its uuid", "tags": [ - "IMDb" + "Kick" ] } }, - "/imdb/title/reviews": { + "/kickstarter/comments": { "get": { "consumes": [ "application/json" ], - "description": "Returns public IMDb user review rows. Limit defaults to 10 and clamps to 20. Pass exactly one of `id` or `url`.", - "operationId": "imdb-title-reviews", + "description": "Returns the first page of one Kickstarter campaign's comments feed (Kickstarter's own server-rendered initial batch, typically 40-60 comments; total_count reports the feed's real total). Each comment includes the author, whether the author is the creator (a reply), the posted timestamp, and the comment text. creator and slug are the two path segments of the project URL, e.g. lookingglass and musubi for kickstarter.com/projects/lookingglass/musubi.", + "operationId": "kickstarter-comments", "parameters": [ { - "description": "IMDb title id", + "description": "Creator path segment of the project URL", "in": "query", - "name": "id", + "name": "creator", + "required": true, "type": "string", - "x-example": "tt1375666" + "x-example": "lookingglass" }, { - "description": "Absolute https://www.imdb.com/title// URL", + "description": "Project slug path segment of the project URL", "in": "query", - "name": "url", + "name": "slug", + "required": true, "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" - }, - { - "description": "Rows to return, default 10, max 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "x-example": "musubi" } ], "produces": [ @@ -399504,7 +473410,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.reviewsResponseDoc" + "$ref": "#/definitions/kickstarter.commentsResponseDoc" } }, "400": { @@ -399525,12 +473431,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -399543,90 +473443,79 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title user reviews", + "summary": "Get a Kickstarter campaign's comments", "tags": [ - "IMDb" + "Kickstarter" ] } }, - "/imdb/title/similar": { + "/kickstarter/discover": { "get": { "consumes": [ "application/json" ], - "description": "Returns the titles in IMDb's More like this recommendations for a title. Pass exactly one of `id` (such as `tt0111161`) or `url`. Each title has its id, name, URL, year, type, runtime, content rating, rating, rating count and image.", - "operationId": "imdb-title-similar", + "description": "Returns one page of Kickstarter's own Discover results -- browse by category id and/or a free-text search term, sorted by magic/popularity/newest/end_date/most_funded, optionally filtered by campaign state and/or restricted to staff picks. Each result includes the campaign's funding snapshot (goal, pledged, percent funded, backers), category, location, creator, and cover photo.", + "operationId": "kickstarter-discover", "parameters": [ { - "description": "IMDb title id", + "description": "Kickstarter's own numeric category id (top-level or sub-category), e.g. 16 for Technology", "in": "query", - "name": "id", - "type": "string", - "x-example": "tt0111161" + "name": "category_id", + "type": "integer", + "x-example": 16 }, { - "description": "Absolute IMDb title URL", + "description": "Free-text search query", "in": "query", - "name": "url", + "name": "term", "type": "string", - "x-example": "https://www.imdb.com/title/tt0111161/" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/imdb.similarResponseDoc" - } + "x-example": "hologram" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "magic", + "description": "Result order", + "enum": [ + "magic", + "popularity", + "newest", + "end_date", + "most_funded" + ], + "in": "query", + "name": "sort", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "IMDb similar titles", - "tags": [ - "IMDb" - ] - } - }, - "/imdb/title/technical-specs": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns public IMDb technical specifications such as runtime, sound mix, color, and aspect ratio. Pass exactly one of `id` or `url`.", - "operationId": "imdb-title-technical-specs", - "parameters": [ + "default": 1, + "description": "1-based page number", + "in": "query", + "name": "page", + "type": "integer" + }, { - "description": "IMDb title id", + "collectionFormat": "csv", + "description": "Repeatable campaign state filter", "in": "query", - "name": "id", - "type": "string", - "x-example": "tt1375666" + "items": { + "enum": [ + "upcoming", + "live", + "late_pledge", + "canceled", + "failed", + "successful" + ], + "type": "string" + }, + "name": "state", + "type": "array" }, { - "description": "Absolute https://www.imdb.com/title// URL", + "default": false, + "description": "Restrict results to Kickstarter's own \\", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "name": "staff_pick_only", + "type": "boolean" } ], "produces": [ @@ -399636,29 +473525,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.technicalSpecsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/kickstarter.discoverResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -399675,33 +473552,35 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title technical specs", + "summary": "Browse or search Kickstarter's Discover surface", "tags": [ - "IMDb" + "Kickstarter" ] } }, - "/imdb/title/trivia": { + "/kickstarter/project": { "get": { "consumes": [ "application/json" ], - "description": "Returns the trivia IMDb lists for a title. Pass exactly one of `id` or `url`. Each entry in `facts` has the text, a `spoiler` flag and, for grouped items, a category such as Director Trademark. `total` is the count IMDb lists and `has_more` is true when only part is returned.", - "operationId": "imdb-title-trivia", + "description": "Returns one Kickstarter campaign's detail: funding snapshot (goal, pledged, percent funded, backers, state, dates), category, creator, cover photo, story text, risks & challenges, update/comment/FAQ counts, and reward/pledge tiers. creator and slug are the two path segments of the project URL, e.g. lookingglass and musubi for kickstarter.com/projects/lookingglass/musubi. Reward tiers are best-effort -- see the endpoint's documentation for when they may be omitted.", + "operationId": "kickstarter-project", "parameters": [ { - "description": "IMDb title id", + "description": "Creator path segment of the project URL", "in": "query", - "name": "id", + "name": "creator", + "required": true, "type": "string", - "x-example": "tt1375666" + "x-example": "lookingglass" }, { - "description": "Absolute https://www.imdb.com/title// URL", + "description": "Project slug path segment of the project URL", "in": "query", - "name": "url", + "name": "slug", + "required": true, "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" + "x-example": "musubi" } ], "produces": [ @@ -399711,7 +473590,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titlePublicFactsResponseDoc" + "$ref": "#/definitions/kickstarter.projectResponseDoc" } }, "400": { @@ -399732,12 +473611,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -399750,40 +473623,35 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title trivia", + "summary": "Get a Kickstarter campaign's detail", "tags": [ - "IMDb" + "Kickstarter" ] } }, - "/imdb/title/videos": { + "/kickstarter/updates": { "get": { "consumes": [ "application/json" ], - "description": "Returns public title video metadata and thumbnail URLs only; playback URLs and media manifests are never returned. IMDb server-truncates this connection and exposes no usable continuation cursor, so `total` can exceed returned rows and `has_more` reports that condition. Limit defaults to 50 and clamps to 100. Pass exactly one of `id` or `url`.", - "operationId": "imdb-title-videos", + "description": "Returns one Kickstarter campaign's full updates feed: for each update, its number, title, author, whether the author is the creator, publish date, body text, and comment count. creator and slug are the two path segments of the project URL, e.g. lookingglass and musubi for kickstarter.com/projects/lookingglass/musubi.", + "operationId": "kickstarter-updates", "parameters": [ { - "description": "IMDb title id", + "description": "Creator path segment of the project URL", "in": "query", - "name": "id", + "name": "creator", + "required": true, "type": "string", - "x-example": "tt1375666" + "x-example": "lookingglass" }, { - "description": "Absolute https://www.imdb.com/title// URL", + "description": "Project slug path segment of the project URL", "in": "query", - "name": "url", + "name": "slug", + "required": true, "type": "string", - "x-example": "https://www.imdb.com/title/tt1375666/" - }, - { - "description": "Rows to return, default 50, max 100", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "x-example": "musubi" } ], "produces": [ @@ -399793,7 +473661,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/imdb.titleVideosResponseDoc" + "$ref": "#/definitions/kickstarter.updatesResponseDoc" } }, "400": { @@ -399814,12 +473682,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -399832,27 +473694,24 @@ "ApiKeyAuth": [] } ], - "summary": "IMDb title video metadata", + "summary": "Get a Kickstarter campaign's updates feed", "tags": [ - "IMDb" + "Kickstarter" ] } }, - "/importyeti/company": { + "/klook/activities/{activity_id}": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns an ImportYeti company report: identity, headline US customs shipment-volume metrics (total shipments, average TEU, last shipment date, estimated shipping spend), its supplier list, and recent bill-of-lading shipment activity.", - "operationId": "importyeti-company", + "description": "Returns the public card-level record for one Klook activity: title, destination, price, rating, review count, image, coordinates and tags. Use an activity_id from /klook/search. This is Klook's card surface; the full detail page payload is behind Klook's bot defense and is not served.", + "operationId": "klook-activity", "parameters": [ { - "description": "ImportYeti company slug, the last path segment of a /company/{slug} URL", - "in": "query", - "name": "slug", + "description": "Klook activity id from /klook/search", + "in": "path", + "name": "activity_id", "required": true, - "type": "string", - "x-example": "target" + "type": "integer", + "x-example": 4099 } ], "produces": [ @@ -399862,7 +473721,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/importyeti.companyResponseDoc" + "$ref": "#/definitions/klook.ActivityResponse" } }, "400": { @@ -399877,12 +473736,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -399895,36 +473748,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get an ImportYeti company report", + "summary": "Get a Klook activity card", "tags": [ - "ImportYeti" + "Klook" ] } }, - "/importyeti/search": { + "/klook/attractions/categories": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches ImportYeti for companies and suppliers matching a name, returning each match's kind (company or supplier), slug, country, address, and headline shipment stats. A \"company\" result's slug chains into GET /importyeti/company.", - "operationId": "importyeti-search", - "parameters": [ - { - "description": "Company or supplier name to search for", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "nike" - }, - { - "description": "1-indexed result page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - } - ], + "description": "Returns Klook's attractions-vertical category set: the flat list of attraction categories with ids, names and listing URLs, plus the vertical's root category (\"Attraction tickets\"). Use a category_id with /klook/attractions/search to narrow listings; this list is the authoritative value space for that parameter.", + "operationId": "klook-attractions-categories", "produces": [ "application/json" ], @@ -399932,19 +473765,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/importyeti.searchResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/klook.AttractionsCategoriesResponse" } }, "503": { @@ -399959,27 +473780,30 @@ "ApiKeyAuth": [] } ], - "summary": "Search ImportYeti companies and suppliers by name", + "summary": "List Klook attraction categories", "tags": [ - "ImportYeti" + "Klook" ] } }, - "/indeed/job": { + "/klook/attractions/destinations": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Indeed job posting by its job key (the `job_key` field returned by search).", - "operationId": "indeed-job", + "description": "Returns Klook's attractions destination-discovery surface: the hot attractions countries with their top activity cards (always), the hot cities for a country (when country_id is supplied), and the cities near a destination city (when city_id is supplied). Note the two country id spaces: the response's countries[].country_id uses Klook's activity-country ids (Japan is 1012), while the country_id parameter uses the destination-country ids from /klook/destinations (Japan is 12) because that is what Klook's hot-city read accepts. Nearby cities carry their upstream distance in kilometres; hot cities do not. Empty hot-city or nearby-city lists are valid answers.", + "operationId": "klook-attractions-destinations", "parameters": [ { - "description": "Indeed job key (16-character hex)", + "description": "Klook city id; adds nearby cities and scopes the hot-city list", "in": "query", - "name": "jk", - "required": true, - "type": "string", - "x-example": "a055dc6ab3a91a3b" + "name": "city_id", + "type": "integer", + "x-example": 28 + }, + { + "description": "Klook destination-country id from /klook/destinations; adds the hot-city list", + "in": "query", + "name": "country_id", + "type": "integer", + "x-example": 12 } ], "produces": [ @@ -399989,7 +473813,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/indeed.jobResponseDoc" + "$ref": "#/definitions/klook.AttractionsDestinationsResponse" } }, "400": { @@ -399998,18 +473822,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -400022,34 +473834,41 @@ "ApiKeyAuth": [] } ], - "summary": "Indeed job detail", + "summary": "Discover Klook attractions destinations", "tags": [ - "Indeed" + "Klook" ] } }, - "/indeed/locations/suggest": { + "/klook/attractions/highlights": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Indeed's own location-search autocomplete suggestions for a partial location string -- the same suggestions the app's search bar offers -- for building a valid `l` value for search.", - "operationId": "indeed-locations-suggest", + "description": "Returns Klook's curated attraction highlight sections (Bestsellers, Book for today or tomorrow, New experiences, deals, date ideas, great for kids) for a city or a country, each with its top activity cards, plus the section-list button text and URL. A scope is required: type defaults to city when city_id is supplied and country otherwise, and the id must match the requested type. Unscoped highlights are rejected upstream.", + "operationId": "klook-attractions-highlights", "parameters": [ { - "description": "Partial location text", + "description": "Klook city id; required when type is city", "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "Austin" + "name": "city_id", + "type": "integer", + "x-example": 28 }, { - "description": "Max suggestions to return, defaults to 10, maxes at 25", + "description": "Klook country id; required when type is country", "in": "query", - "name": "limit", + "name": "country_id", "type": "integer", - "x-example": 10 + "x-example": 12 + }, + { + "default": "city", + "description": "Highlight scope", + "enum": [ + "city", + "country" + ], + "in": "query", + "name": "type", + "type": "string" } ], "produces": [ @@ -400059,7 +473878,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/indeed.locationSuggestResponseDoc" + "$ref": "#/definitions/klook.AttractionsHighlightsResponse" } }, "400": { @@ -400068,12 +473887,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -400086,65 +473899,95 @@ "ApiKeyAuth": [] } ], - "summary": "Indeed location suggestions", + "summary": "List curated Klook attraction highlight sections", "tags": [ - "Indeed" + "Klook" ] } }, - "/indeed/search": { + "/klook/attractions/search": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Indeed job postings by keyword and location. `sort` enum: `relevance` (default), `date`.", - "operationId": "indeed-search", + "description": "Returns one page of Klook's attractions-vertical listings (theme parks, museums, observation decks and the rest of the attraction-ticket catalogue) for an optional destination city and/or attraction category. Use city_id from /klook/destinations and category_id from /klook/attractions/categories; with neither it returns Klook's global attractions listing. Unlike /klook/search this reads Klook's dedicated attractions catalogue, which is a separate inventory from the general experiences search. sort reorders the same result set, page is 1-based, and prices are display strings in the response currency. Klook caps the reported total at 10000 for broad queries.", + "operationId": "klook-attractions-search", "parameters": [ { - "description": "Search keywords", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "software engineer" - }, - { - "description": "Location (city, state, or zip)", + "description": "Klook city id from /klook/destinations; omit to browse globally", "in": "query", - "name": "l", - "type": "string", - "x-example": "New York, NY" + "name": "city_id", + "type": "integer", + "x-example": 28 }, { - "description": "Page number, 1-based, defaults to 1", + "description": "Klook attraction category id from /klook/attractions/categories", "in": "query", - "name": "page", + "name": "category_id", "type": "integer", - "x-example": 1 + "x-example": 3 }, { - "description": "Sort order: relevance, date", + "default": "recommended", + "description": "Result ordering", "enum": [ - "relevance", - "date" + "recommended", + "bestselling", + "top_rated", + "price_low_to_high", + "newest" ], "in": "query", "name": "sort", "type": "string" }, { - "description": "Search radius in miles", + "description": "Minimum price in the response currency; requires price_max", "in": "query", - "name": "radius", + "name": "price_min", "type": "integer", - "x-example": 25 + "x-example": 0 }, { - "description": "Only jobs posted within this many days", + "description": "Maximum price in the response currency; requires price_min", "in": "query", - "name": "fromage", + "name": "price_max", "type": "integer", - "x-example": 7 + "x-example": 300 + }, + { + "description": "Guided-language tag id, e.g. 3029 (English guided)", + "in": "query", + "name": "service_lang_tag", + "type": "integer", + "x-example": 3029 + }, + { + "description": "Duration tag id, e.g. 7959 (0-3 hours)", + "in": "query", + "name": "duration_tag", + "type": "integer", + "x-example": 7959 + }, + { + "description": "Other-filter tag id, e.g. 3013 (Free cancellation)", + "in": "query", + "name": "other_filters_tag", + "type": "integer", + "x-example": 3013 + }, + { + "default": 1, + "description": "1-based result page", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "default": 20, + "description": "Results per page, 1-50", + "in": "query", + "name": "per_page", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -400154,7 +473997,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/indeed.searchResponseDoc" + "$ref": "#/definitions/klook.AttractionsSearchResponse" } }, "400": { @@ -400163,12 +474006,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -400181,24 +474018,32 @@ "ApiKeyAuth": [] } ], - "summary": "Indeed job search", + "summary": "Search Klook attractions by destination or category", "tags": [ - "Indeed" + "Klook" ] } }, - "/independent/article": { + "/klook/attractions/suggest": { "get": { - "description": "Returns one The Independent article by `url`, which must be a canonical HTTPS `independent.co.uk` article link. The response has the title, description, section, authors, publication and update times, lead image URL, body `paragraphs` and a `paywalled` flag.", - "operationId": "independent-article", + "description": "Returns Klook attractions-vertical autocomplete matches for a partial query: matching attraction tickets with ids, city ids, images and URLs, plus matching destination cities and countries. Use a returned activity_id with /klook/activities/{activity_id} or its city_id with /klook/attractions/search.", + "operationId": "klook-attractions-suggest", "parameters": [ { - "description": "Canonical The Independent article URL", + "description": "Text to complete, 2-80 characters", "in": "query", - "name": "url", + "name": "query", "required": true, "type": "string", - "x-example": "https://www.independent.co.uk/news/world/example-b1234567.html" + "x-example": "hong" + }, + { + "default": 10, + "description": "Maximum activities to return, 1-20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -400208,7 +474053,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/klook.SuggestResponse" } }, "400": { @@ -400217,12 +474062,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -400235,32 +474074,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Independent article content", + "summary": "Autocomplete Klook attractions, cities and countries", "tags": [ - "The Independent" + "Klook" ] } }, - "/independent/author": { + "/klook/categories": { "get": { - "description": "Returns one Independent author's profile by `slug` (for example `lizzie-dearden`) or `url`; exactly one is required. The response has name, job title, bio, X/Twitter handle and the author's recent articles with title, URL, section and section URL. It is a single page of articles with no further pagination.", - "operationId": "independent-author", - "parameters": [ - { - "description": "Author slug, e.g. lizzie-dearden", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "lizzie-dearden" - }, - { - "description": "Canonical independent.co.uk/author/ URL; alternative to slug", - "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.independent.co.uk/author/lizzie-dearden" - } - ], + "description": "Returns Klook's complete filterable activity category tree with ids, names and listing URLs. Use a category_id with /klook/search to narrow results; the tree is the authoritative value space for that parameter.", + "operationId": "klook-categories", "produces": [ "application/json" ], @@ -400268,19 +474091,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.independentAuthorResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/klook.CategoriesResponse" } }, "503": { @@ -400295,45 +474106,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Independent author profile", + "summary": "List Klook activity categories", "tags": [ - "The Independent" + "Klook" ] } }, - "/independent/headlines": { + "/klook/destinations": { "get": { - "description": "Returns the current headlines for one The Independent section. `section` is required and takes one of 17 slugs, such as `news/uk`, `news/world`, `sport`, `voices`, `money` or `bulletin`. Each item has its title and URL, plus summary, author, publication time and image when the outlet provides them, and the response echoes the `section`.", - "operationId": "independent-headlines", - "parameters": [ - { - "description": "The Independent RSS section slug", - "enum": [ - "news", - "news/uk", - "news/world", - "news/business", - "news/people", - "news/science", - "news/media", - "news/education", - "news/obituaries", - "environment", - "sport", - "arts-entertainment", - "life-style", - "travel", - "voices", - "money", - "bulletin" - ], - "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "news" - } - ], + "description": "Returns Klook's bookable country list and its destination-guide area tree with city ids and listing URLs. Use a city_id with /klook/search to browse that destination.", + "operationId": "klook-destinations", "produces": [ "application/json" ], @@ -400341,13 +474123,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/klook.DestinationsResponse" } }, "503": { @@ -400362,16 +474138,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Independent section headlines", + "summary": "List Klook countries and destination areas", "tags": [ - "The Independent" + "Klook" ] } }, - "/independent/news": { + "/klook/hot": { "get": { - "description": "Returns the current top stories from The Independent. It takes no parameters. Each item has its title, URL and, where the outlet gives them, a summary, author, publication time, image URL and `type`. Use the headlines endpoint for one section.", - "operationId": "independent-news", + "description": "Returns Klook's curated hot lists: named groups of popular destinations and popular activities, the Travel Must-Haves category group, and the short vertical menu published alongside them. Destination entries carry a city id and country name plus a landing link; use a city entry's id with /klook/search or /klook/destinations. Activity entries carry the activity id and display name. An empty hot list is a valid answer, not an error.", + "operationId": "klook-hot", "produces": [ "application/json" ], @@ -400379,13 +474155,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/klook.HotResponse" } }, "503": { @@ -400400,16 +474170,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Independent top stories", + "summary": "List Klook hot destinations and activities", "tags": [ - "The Independent" + "Klook" ] } }, - "/independent/sections": { + "/klook/interests": { "get": { - "description": "Lists the 17 The Independent section slugs that the headlines endpoint accepts, from `news` and `news/uk` to `life-style`, `voices`, `money` and `bulletin`. Each entry has a `slug`, a display `name` and a `url`.", - "operationId": "independent-sections", + "description": "Returns Klook's published interest-topic landing pages, read from its en-US interest sitemap. Each entry carries the interest id, the landing-page slug, the optional city id or country id the page is scoped to, and the absolute landing URL. The same interest id appears more than once: once unscoped, and again scoped to a country or a city, because each is a separately published landing page. Use an interest id as the interest_tag value with /klook/search (browse only, not with query); the context-scoped interest options for a specific destination are published by /klook/search/filters.", + "operationId": "klook-interests", "produces": [ "application/json" ], @@ -400417,7 +474187,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/klook.InterestsResponse" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -400426,24 +474202,23 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Independent RSS sections", + "summary": "List Klook interest topics", "tags": [ - "The Independent" + "Klook" ] } }, - "/indianexpress/article": { + "/klook/recommendations": { "get": { - "description": "Returns public The Indian Express article metadata and body paragraphs from a canonical article URL. A story gated behind an Express Premium subscription returns a permission error instead of a truncated or paid body.", - "operationId": "indianexpress-article", + "description": "Returns Klook's curated \"unmissable experiences\" sections for a destination (or its default global selection): named category sections with their activity cards, plus the call-to-action button. Use city_id from /klook/destinations or /klook/suggest to scope the sections; use /klook/search or /klook/attractions/search for a full result page instead.", + "operationId": "klook-recommendations", "parameters": [ { - "description": "Canonical The Indian Express article URL", + "description": "Klook city id to scope the curated sections to", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://indianexpress.com/article/cities/delhi/example-article-slug-10892304/" + "name": "city_id", + "type": "integer", + "x-example": 28 } ], "produces": [ @@ -400453,7 +474228,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/klook.RecommendationsResponse" } }, "400": { @@ -400462,14 +474237,61 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Klook curated category recommendations", + "tags": [ + "Klook" + ] + } + }, + "/klook/reviews": { + "get": { + "description": "Returns recent review cards from Klook's city-level review feed for one product vertical: the reviewed activity title and URL, the review score, the review text and its timestamp. Reviewer display names are deliberately not returned because they are personal data, even when Klook masks them. Vertical experiences (the default) reads Klook's experiences review feed and attractions reads its attractions review feed; the two feeds are separate inventories. Use a city_id from /klook/destinations.", + "operationId": "klook-reviews", + "parameters": [ + { + "description": "Klook city id from /klook/destinations", + "in": "query", + "name": "city_id", + "required": true, + "type": "integer", + "x-example": 28 + }, + { + "default": "experiences", + "description": "Review feed to read", + "enum": [ + "experiences", + "attractions" + ], + "in": "query", + "name": "vertical", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/klook.ReviewsResponse" + } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -400486,24 +474308,109 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Indian Express article content", + "summary": "List recent Klook reviews for a city", "tags": [ - "The Indian Express" + "Klook" ] } }, - "/indianexpress/author": { + "/klook/search": { "get": { - "description": "Returns a The Indian Express author's profile by `url`, a canonical `indianexpress.com/profile/author//` link: name, image URL, biography and recent articles with title, URL, summary and image. `image_url` and `biography` may be missing, and `published_at` is the page's date text such as `Sep 24, 2026 16:36 IST`, not a timestamp.", - "operationId": "indianexpress-author", + "description": "Returns Klook activity search results for a free-text query, a destination city, or a category. A free-text query runs Klook keyword search against its en-US catalogue and can be combined with city_id and category_id; without a query the request browses a destination or category listing instead. Use city_id from /klook/destinations (or a city from /klook/suggest) and category_id from /klook/categories; the tag filters (interest_tag, service_lang_tag, duration_tag, other_filters_tag) take ids from /klook/search/filters, and interest_tag is browse-only. sort reorders the same result set. A query with no matches returns an empty activities list, Klook caps the reported total at 10000 for broad queries, and prices are display strings in the response currency.", + "operationId": "klook-search", "parameters": [ { - "description": "Canonical The Indian Express author URL", + "description": "Free-text activity search. At least one of query, city_id or category_id is required.", "in": "query", - "name": "url", - "required": true, + "name": "query", "type": "string", - "x-example": "https://indianexpress.com/profile/author/jane-doe/" + "x-example": "universal studios" + }, + { + "description": "Klook city id from /klook/destinations or /klook/suggest", + "in": "query", + "name": "city_id", + "type": "integer", + "x-example": 28 + }, + { + "description": "Klook category id from /klook/categories", + "in": "query", + "name": "category_id", + "type": "integer", + "x-example": 9 + }, + { + "default": "recommended", + "description": "Result ordering", + "enum": [ + "recommended", + "bestselling", + "top_rated", + "price_low_to_high", + "newest" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Minimum price in the response currency; requires price_max", + "in": "query", + "name": "price_min", + "type": "integer", + "x-example": 0 + }, + { + "description": "Maximum price in the response currency; requires price_min", + "in": "query", + "name": "price_max", + "type": "integer", + "x-example": 500 + }, + { + "description": "Interest/topic id from /klook/search/filters; browse only, not with query", + "in": "query", + "name": "interest_tag", + "type": "integer", + "x-example": 49423 + }, + { + "description": "Guided-language id from /klook/search/filters", + "in": "query", + "name": "service_lang_tag", + "type": "integer", + "x-example": 3029 + }, + { + "description": "Duration-bucket id from /klook/search/filters", + "in": "query", + "name": "duration_tag", + "type": "integer", + "x-example": 7959 + }, + { + "description": "Service/feature id from /klook/search/filters", + "in": "query", + "name": "other_filters_tag", + "type": "integer", + "x-example": 3013 + }, + { + "default": 1, + "description": "1-based result page", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "default": 20, + "description": "Results per page, 1-50", + "in": "query", + "name": "per_page", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -400513,7 +474420,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.indianExpressAuthorResponseDoc" + "$ref": "#/definitions/klook.SearchResponse" } }, "400": { @@ -400522,12 +474429,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -400540,82 +474441,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a The Indian Express author profile", + "summary": "Search Klook travel activities", "tags": [ - "The Indian Express" + "Klook" ] } }, - "/indianexpress/headlines": { + "/klook/search/filters": { "get": { - "description": "Returns the current headlines for one The Indian Express section. `section` is required and takes a slug such as `india`, `explained`, `cities-delhi`, `entertainment-bollywood`, `sports-cricket` or `political-pulse`. Items carry title, URL, summary, author, publication time and image, and the response echoes the `section`.", - "operationId": "indianexpress-headlines", + "description": "Returns the filter metadata Klook publishes for a search context: the category tree, price bounds, the bookable dates, the destination tree and the accepted sort values. vertical selects the product vertical. experiences (the default) returns the activity category tree, the price slider bounds, the accepted sort values and the resolved destination, but no destination tree and no enumerated dates: use /klook/destinations for the experiences destination tree and /klook/search for the date-range input. attractions returns the attraction category tree with Klook's own enabled flags, the attraction price bounds, the exact bookable start dates and the region -> country -> city destination tree. Use a returned category id with /klook/search (experiences) or /klook/attractions/search (attractions), and a returned city id with either listing.", + "operationId": "klook-search-filters", "parameters": [ { - "description": "The Indian Express RSS section slug", + "default": "experiences", + "description": "Product vertical whose filters to return", "enum": [ - "politics", - "india", - "world", - "explained", - "express-exclusive", - "opinion", - "opinion-columns", - "business", - "cities", - "cities-delhi", - "cities-mumbai", - "cities-kolkata", - "cities-pune", - "cities-chandigarh", - "cities-ahmedabad", - "cities-lucknow", - "cities-chennai", - "cities-hyderabad", - "cities-bangalore", - "upsc-current-affairs", - "entertainment", - "entertainment-bollywood", - "entertainment-hollywood", - "entertainment-malayalam", - "entertainment-movie-review", - "entertainment-regional", - "entertainment-tamil", - "entertainment-television", - "entertainment-telugu", - "entertainment-web-series", - "lifestyle", - "lifestyle-art-and-culture", - "lifestyle-destination-of-the-week", - "lifestyle-fashion", - "lifestyle-feelings", - "lifestyle-fitness", - "lifestyle-food-wine", - "lifestyle-health", - "lifestyle-pets-animals", - "lifestyle-workplace", - "technology", - "technology-tech-news", - "technology-tech-reviews", - "sports", - "sports-cricket", - "sports-football", - "sports-chess", - "sports-asian-games", - "health-wellness", - "education", - "research", - "books-and-literature", - "long-reads", - "fresh-take", - "political-pulse", - "smart-stocks" + "experiences", + "attractions" ], "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "politics" + "name": "vertical", + "type": "string" + }, + { + "description": "Klook city id from /klook/destinations to scope the metadata", + "in": "query", + "name": "city_id", + "type": "integer", + "x-example": 28 + }, + { + "description": "Category id from /klook/categories (experiences) or /klook/attractions/categories (attractions) to scope the metadata", + "in": "query", + "name": "category_id", + "type": "integer", + "x-example": 3 } ], "produces": [ @@ -400625,7 +474485,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/klook.SearchFiltersResponse" } }, "400": { @@ -400646,16 +474506,32 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Indian Express section headlines", + "summary": "Get Klook search filter metadata", "tags": [ - "The Indian Express" + "Klook" ] } }, - "/indianexpress/news": { + "/klook/search/hot-keywords": { "get": { - "description": "Returns the current top stories from The Indian Express. It takes no parameters. Each item has its title, URL and, where the outlet gives them, a summary, author, publication time, image URL and `type`. Use the headlines endpoint to read one section.", - "operationId": "indianexpress-news", + "description": "Returns the hot search keywords Klook publishes for a search context, together with its curated topic tabs. Without country_id it reads the start-page set, scoped to city_id when one is supplied and unscoped otherwise; with country_id it reads that destination country's page instead and city_id is ignored. hot_words entries carry the keyword text, the exact query Klook records for it and a landing url when Klook publishes one (some hot words have no link). tabs are named lists of curated items (a raw tab key such as search_topics_popular, or Klook's display name for the curated tab that has no raw key), and each item carries its title, subtitle, icon, landing url and display price when present. An empty hot_words list is a valid answer, not an error.", + "operationId": "klook-search-hot-keywords", + "parameters": [ + { + "description": "Klook city id from /klook/destinations or /klook/suggest to scope the start-page hot words; ignored when country_id is set", + "in": "query", + "name": "city_id", + "type": "integer", + "x-example": 28 + }, + { + "description": "Klook country id from /klook/destinations to read the destination-page hot words instead of the start-page set", + "in": "query", + "name": "country_id", + "type": "integer", + "x-example": 12 + } + ], "produces": [ "application/json" ], @@ -400663,11 +474539,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/klook.HotKeywordsResponse" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -400684,16 +474560,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Indian Express top stories", + "summary": "Get Klook hot search keywords and topic tabs", "tags": [ - "The Indian Express" + "Klook" ] } }, - "/indianexpress/sections": { + "/klook/search/unified": { "get": { - "description": "Lists the The Indian Express section slugs that the headlines endpoint accepts, including `politics`, `india`, `explained`, `cities-mumbai`, `entertainment-tamil`, `lifestyle-health` and `smart-stocks`. Each entry has a `slug`, a display `name` and a section `url`.", - "operationId": "indianexpress-sections", + "description": "Returns Klook's platform search-box suggestions for a partial query: destination cities, keyword suggestions, vertical-service shortcuts (airport transfers, hotels, rail passes and similar) and matching activities in one list. Each suggestion carries a normalized type (destination, keyword, vertical_service, activity or other), Klook's raw upstream type code in upstream_type, and an absolute landing url. Vertical-service entries can carry Klook's own template placeholders such as {dest_city_id} in their url; they are served as-is, so substitute a real id only if you know that vertical's own parameter shape. A query with no matches returns an empty suggestions list. Use a destination suggestion's id with /klook/search (city_id), or an activity suggestion's id with /klook/activities/{activity_id}.", + "operationId": "klook-search-unified", + "parameters": [ + { + "description": "Partial text to suggest for, 1-80 characters", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "tokyo" + } + ], "produces": [ "application/json" ], @@ -400701,7 +474587,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/klook.UnifiedSearchResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -400710,24 +474608,32 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Indian Express RSS sections", + "summary": "Search Klook across product verticals", "tags": [ - "The Indian Express" + "Klook" ] } }, - "/indiatoday/article": { + "/klook/suggest": { "get": { - "description": "Returns public India Today article metadata and body paragraphs from a canonical story URL. Subscriber-only magazine stories return only the public teaser with paywalled set to true.", - "operationId": "indiatoday-article", + "description": "Returns Klook autocomplete matches for a partial query: matching activities, destination cities with city ids, and countries. Use a returned city_id with /klook/search, or an activity_id with /klook/activities/{activity_id}.", + "operationId": "klook-suggest", "parameters": [ { - "description": "Canonical India Today story URL", + "description": "Text to complete, 2-80 characters", "in": "query", - "name": "url", + "name": "query", "required": true, "type": "string", - "x-example": "https://www.indiatoday.in/world/story/example-story-slug-3002364-2026-09-24" + "x-example": "tokyo" + }, + { + "default": 10, + "description": "Maximum activities to return, 1-20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -400737,7 +474643,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/klook.SuggestResponse" } }, "400": { @@ -400746,11 +474652,37 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Autocomplete Klook activities, cities and countries", + "tags": [ + "Klook" + ] + } + }, + "/klook/verticals": { + "get": { + "description": "Returns Klook's navigation vertical menu: the top-level product verticals (Things to do, WiFi & SIM Card, Transportation, Train Tickets & Passes, Food & Dining) with every child entry nested. Each entry carries Klook's own type/template key, display label, icon key and absolute listing link. Use the menu to discover which product families Klook currently sells; the things_to_do children are the template_id value space the search page accepts.", + "operationId": "klook-verticals", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/klook.VerticalsResponse" + } }, "503": { "description": "Service Unavailable", @@ -400764,24 +474696,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get India Today article content", + "summary": "List Klook product verticals", "tags": [ - "India Today" + "Klook" ] } }, - "/indiatoday/author": { + "/kohls/category": { "get": { - "description": "Returns an India Today author profile by `url`, a canonical `https://www.indiatoday.in/author/` link; desk bylines such as `india-today-business-desk` work too. The response has the name, job title, headshot, biography and the first page of recent text stories (typically 20), each with title, URL, section, summary and image. Stories carry no dates.", - "operationId": "indiatoday-author", + "consumes": [ + "application/json" + ], + "description": "Returns a Kohl's category or curated campaign page's product grid (page 1 only), with products (title, image, colors, pricing, rating, availability) and facets for discovering further category values. category is Kohl's own catalog taxonomy string, e.g. \"Room:Dorm\" or \"Department:Kitchen & Dining\" -- combine multiple dimensions with a literal \"+\", percent-encoded as \"%2B\" so it survives as \"+\" rather than being decoded to a space (e.g. \"Room%3ADorm%2BDepartment%3ABedding\"). Every facets[].options[].category value in a response is a ready-to-use category string for a follow-up call, so a caller can discover the full taxonomy by starting from a known category (e.g. \"Room:Dorm\") and following facets. A category value Kohl's does not recognize returns a 404 rather than an unfiltered listing; a recognized dimension with no matching products returns a genuine zero-result response instead.", + "operationId": "kohls-category", "parameters": [ { - "description": "Canonical India Today author URL", + "description": "Kohl's catalog taxonomy string, e.g. \\", "in": "query", - "name": "url", + "name": "category", "required": true, "type": "string", - "x-example": "https://www.indiatoday.in/author/jane-doe" + "x-example": "Room:Dorm" } ], "produces": [ @@ -400791,7 +474726,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.indiaTodayAuthorResponseDoc" + "$ref": "#/definitions/kohls.categoryResponseDoc" } }, "400": { @@ -400806,6 +474741,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -400818,61 +474759,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get an India Today author profile", + "summary": "Browse a Kohl's category or curated campaign page", "tags": [ - "India Today" + "Kohl's" ] } }, - "/indiatoday/headlines": { + "/kohls/product/reviews": { "get": { - "description": "Returns the text stories listed on one India Today section page, typically 12 to 60. `section` is required and takes one of 35 slugs such as `top-news`, `cricket`, `markets`, `bollywood` or `fact-check`; other values return 400. Items have title, URL, `type`, summary and image when shown, but no `published_at`.", - "operationId": "indiatoday-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns one page of a Kohl's product's customer reviews (title, text, rating, secondary ratings such as quality/durability/value/style, reviewer name and location, submission date, and photo URLs). web_id is the same identifier a GET /kohls/category response's products[].web_id field carries. A web_id with zero reviews returns a genuine zero-result response rather than an error.", + "operationId": "kohls-product-reviews", "parameters": [ { - "description": "India Today section slug", - "enum": [ - "top-news", - "india", - "south-india", - "law", - "business", - "markets", - "world", - "us-news", - "sports", - "cricket", - "football", - "technology", - "science", - "health", - "environment", - "lifestyle", - "movies", - "bollywood", - "hollywood", - "movie-reviews", - "ott", - "television", - "education", - "elections", - "fact-check", - "opinion", - "trending", - "sunday-special", - "cities", - "auto", - "jobs", - "horoscopes", - "insight", - "data-intelligence", - "history-of-it" - ], + "description": "Kohl's product web id, e.g. from a GET /kohls/category response's products[].web_id", "in": "query", - "name": "section", + "name": "web_id", "required": true, "type": "string", - "x-example": "top-news" + "x-example": "4569328" + }, + { + "description": "Page number, 10 reviews per page (default 1)", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -400882,7 +474796,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/kohls.productReviewsResponseDoc" } }, "400": { @@ -400891,6 +474805,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -400903,16 +474823,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get India Today section headlines", + "summary": "Browse a Kohl's product's customer reviews", "tags": [ - "India Today" + "Kohl's" ] } }, - "/indiatoday/news": { + "/kohls/stores": { "get": { - "description": "Returns fresh India Today top stories from its public RSS feed (text stories only; video and photo items are omitted).", - "operationId": "indiatoday-news", + "consumes": [ + "application/json" + ], + "description": "Returns physical Kohl's store locations near a free-text location (city/state, zip code, or address): address, phone, weekly hours, distance, and store badges/services. A search with no results returns a genuine empty list rather than an error.", + "operationId": "kohls-stores", + "parameters": [ + { + "description": "Free-text location: city/state, zip code, or address", + "in": "query", + "name": "search", + "required": true, + "type": "string", + "x-example": "Seattle, WA" + } + ], "produces": [ "application/json" ], @@ -400920,7 +474853,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/kohls.storesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -400941,16 +474880,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get India Today top stories", + "summary": "Find nearby Kohl's store locations", "tags": [ - "India Today" + "Kohl's" ] } }, - "/indiatoday/sections": { + "/kohls/suggest": { "get": { - "description": "Lists the 35 India Today sections accepted by `indiatoday-headlines`, such as `top-news`, `south-india`, `markets`, `ott`, `elections` and `history-of-it`. Each entry has a `slug`, display `name` and the section page `url`. Takes no parameters.", - "operationId": "indiatoday-sections", + "consumes": [ + "application/json" + ], + "description": "Returns Kohl's own search-box typeahead result for a partial query: a flat list of suggested search phrases (no product data). A nonsense query returns a genuine, well-formed empty list rather than an error.", + "operationId": "kohls-suggest", + "parameters": [ + { + "description": "Partial search text, e.g. \\", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "coff" + } + ], "produces": [ "application/json" ], @@ -400958,7 +474910,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/kohls.suggestResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -400967,24 +474937,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get India Today sections", + "summary": "Kohl's search-box typeahead suggestions", "tags": [ - "India Today" + "Kohl's" ] } }, - "/indiewire/article": { + "/kotaku/article": { "get": { - "description": "Returns public IndieWire article metadata (title, author(s), published/updated dates, section, lead image) and the body paragraphs an anonymous visitor sees, from a canonical article URL. Paywalled content is never bypassed; a gated story would return only its public portion.", - "operationId": "indiewire-article", + "description": "Returns public Kotaku article metadata and body paragraphs from a canonical article URL. Kotaku articles are free to read, so the full body is returned.", + "operationId": "kotaku-article", "parameters": [ { - "description": "Canonical IndieWire article URL", + "description": "Canonical Kotaku article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.indiewire.com/features/interviews/handle-with-care-dvd-traveling-indie-film-physical-media-1235216158/" + "x-example": "https://kotaku.com/dressmaker-indie-hours-character-creators-2000736522" } ], "produces": [ @@ -401021,31 +474991,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get IndieWire article content", + "summary": "Get Kotaku article content", "tags": [ - "IndieWire" + "Kotaku" ] } }, - "/indiewire/author": { + "/kotaku/author": { "get": { - "description": "Returns one IndieWire staff writer or contributor's public profile: name, headshot, biography, any listed social/contact links, and one page of their recent articles.", - "operationId": "indiewire-author", + "description": "Returns a Kotaku author profile by `url`, a canonical `https://kotaku.com/author/` link. The response has the `name`, `biography`, `image_url`, `social_links` (a `type` label and URL) and recent articles. The article `published_at` is the page's own date text, such as `Published September 23, 2026 at 11:20 am`, not a timestamp.", + "operationId": "kotaku-author", "parameters": [ { - "description": "Canonical indiewire.com/author/ URL", + "description": "Canonical Kotaku author URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.indiewire.com/author/alison-foreman/" - }, - { - "description": "1-based page of recent articles to return; defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "https://kotaku.com/author/ethangach" } ], "produces": [ @@ -401055,7 +475018,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.indiewireAuthorResponseDoc" + "$ref": "#/definitions/publicnews.kotakuAuthorResponseDoc" } }, "400": { @@ -401082,58 +475045,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get an IndieWire author profile", + "summary": "Get a Kotaku author profile", "tags": [ - "IndieWire" + "Kotaku" ] } }, - "/indiewire/headlines": { + "/kotaku/headlines": { "get": { - "description": "Returns fresh headlines from one public IndieWire section feed. Gallery and list pages are omitted because they are not text articles.", - "operationId": "indiewire-headlines", + "description": "Returns recent Kotaku headlines for one section. `section` is required and takes one of 17 slugs such as `news`, `reviews`, `games`, `game-tips`, `retro`, `horror` or `deals`. Each item has its title, URL, summary, author, publication time and image.", + "operationId": "kotaku-headlines", "parameters": [ { - "description": "IndieWire section slug", + "description": "Kotaku section slug", "enum": [ - "analysis", - "animation", - "awards", - "awards-premium", - "best-of", - "box-office", - "brand-content", - "breaking-news", - "business", - "commentary", - "consider-this", - "craft", - "criticism", - "culture", - "events", - "features", - "festivals", - "film", - "general", - "general-news", - "industry", - "interviews", - "movies", + "entertainment", + "action", + "fantasy", + "horror", + "sci-fi", + "superhero", + "reviews", "news", - "obituary", - "podcast", - "predictions", - "results", - "shop", - "shows", - "special-projects", - "trailers" + "retro", + "kotaku-game-diary", + "youtube", + "odds-and-ends", + "feature", + "fine-art", + "game-tips", + "games", + "deals" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "analysis" + "x-example": "entertainment" } ], "produces": [ @@ -401164,16 +475112,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get IndieWire section headlines", + "summary": "Get Kotaku section headlines", "tags": [ - "IndieWire" + "Kotaku" ] } }, - "/indiewire/news": { + "/kotaku/news": { "get": { - "description": "Returns IndieWire's current top stories on independent film, TV and awards, with no parameters. Each item has its title, URL, one-sentence summary, author and publication time. Gallery and list pages are left out because they are not text articles.", - "operationId": "indiewire-news", + "description": "Returns Kotaku's current top gaming stories, with no parameters. Each item has its title, URL, summary, author, publication time and image where Kotaku provides them. Use `kotaku-headlines` for a single section instead.", + "operationId": "kotaku-news", "produces": [ "application/json" ], @@ -401202,16 +475150,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get IndieWire top stories", + "summary": "Get Kotaku top stories", "tags": [ - "IndieWire" + "Kotaku" ] } }, - "/indiewire/sections": { + "/kotaku/sections": { "get": { - "description": "Lists IndieWire's 32 editorial categories accepted by `indiewire-headlines`, such as `analysis`, `box-office`, `festivals`, `interviews`, `obituary` and `trailers`. Each entry has a `slug`, display `name` and the category feed `url`. Categories nest under the roots `news`, `features`, `awards` and `criticism`.", - "operationId": "indiewire-sections", + "description": "Returns the Kotaku section inventory: Entertainment (with its Action, Fantasy, Horror, Sci-Fi, and Superhero sub-topics), Reviews, the Culture umbrella's own sub-topics (News, Retro, Kotaku Game Diary, YouTube, Odds and Ends, Feature, Fine Art), Tips & Guides, Games, and Deals, each linking to its public RSS feed. Every slug is accepted by the headlines endpoint.", + "operationId": "kotaku-sections", "produces": [ "application/json" ], @@ -401228,26 +475176,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get IndieWire sections", + "summary": "Get Kotaku sections", "tags": [ - "IndieWire" + "Kotaku" ] } }, - "/inews/article": { + "/kroger/categories": { "get": { - "description": "Returns public i article metadata (headline, description, section, authors, publish/update times, lead image) and body paragraphs from a canonical article URL.", - "operationId": "inews-article", - "parameters": [ - { - "description": "Canonical i article URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://inews.co.uk/news/world/withering-remark-humiliated-trump-court-failure-4786703" - } + "consumes": [ + "application/json" ], + "description": "Returns Kroger's full product-browse category taxonomy: every slug/category_id pair kroger-search and kroger-category accept, each with its department and full breadcrumb. This is how to discover valid slug/category_id values -- previously the only way was to already have one from a search response's facet group. Sourced from Kroger's own site navigation menu; covers every category a shopper can browse to from Kroger's site menu (321 at time of writing across 7 departments). Takes no parameters.", + "operationId": "kroger-categories", "produces": [ "application/json" ], @@ -401255,23 +475196,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/kroger.categoriesResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -401288,24 +475217,111 @@ "ApiKeyAuth": [] } ], - "summary": "Get i article content", + "summary": "Get Kroger's product-browse category taxonomy", "tags": [ - "i" + "Kroger" ] } }, - "/inews/author": { + "/kroger/category": { "get": { - "description": "Returns an author profile from i (inews.co.uk) by `url`, a canonical `https://inews.co.uk/author/` link. The response has `name`, `bio`, `image_url`, `same_as` social profiles and up to about 30 recent articles, each with title, URL, summary, section and `published_at`. Paginated or non-author URLs return 400, and an unknown author returns 404.", - "operationId": "inews-author", + "consumes": [ + "application/json" + ], + "description": "Browses a Kroger product category and returns product cards plus facet groups, in the same shape as kroger-search. slug and category_id together identify the category (e.g. \"pet\" and \"27\" for kroger.com/pl/pet/27) -- call kroger-categories to discover every valid slug/category_id pair. It uses category_id as a taxonomy filter, with real pagination, and the source field reports which path answered. Facet filters and sort apply to the primary path only: when any of them is set, a failure of that path returns an error rather than silently falling back to unfiltered results.", + "operationId": "kroger-category", "parameters": [ { - "description": "Canonical i author URL", + "description": "Category URL slug segment. Obtain valid slug/category_id pairs from kroger-categories", "in": "query", - "name": "url", + "name": "slug", "required": true, "type": "string", - "x-example": "https://inews.co.uk/author/simon-kelner" + "x-example": "pet" + }, + { + "description": "Category numeric taxonomy id. Obtain valid slug/category_id pairs from kroger-categories", + "in": "query", + "name": "category_id", + "required": true, + "type": "string", + "x-example": "27" + }, + { + "default": 1, + "description": "One-based result page", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "default": "relevance", + "description": "Result order. One of: relevance, name_asc, popularity_desc", + "enum": [ + "relevance", + "name_asc", + "popularity_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Comma-separated brand names to filter by, taken verbatim from a previous response's facets", + "in": "query", + "name": "brands", + "type": "string", + "x-example": "Halo Top,Rebel" + }, + { + "description": "Comma-separated nutrition/dietary facet values", + "in": "query", + "name": "nutrition", + "type": "string", + "x-example": "Gluten Free" + }, + { + "description": "Comma-separated flavor facet values", + "in": "query", + "name": "flavor", + "type": "string", + "x-example": "Chocolate" + }, + { + "description": "Comma-separated scent facet values", + "in": "query", + "name": "scent", + "type": "string", + "x-example": "Bergamot" + }, + { + "description": "Comma-separated savings facet values", + "in": "query", + "name": "savings", + "type": "string", + "x-example": "On Sale" + }, + { + "description": "Comma-separated more-options facet values", + "in": "query", + "name": "more_options", + "type": "string", + "x-example": "SNAP EBT Eligible" + }, + { + "description": "Lower bound of the price filter; defaults to 0", + "in": "query", + "name": "price_min", + "type": "number", + "x-example": 0 + }, + { + "description": "Upper bound of the price filter; required to filter on price", + "in": "query", + "name": "price_max", + "type": "number", + "x-example": 8 } ], "produces": [ @@ -401315,7 +475331,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.inewsAuthorResponseDoc" + "$ref": "#/definitions/kroger.categoryResponseDoc" } }, "400": { @@ -401324,8 +475340,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -401342,71 +475358,57 @@ "ApiKeyAuth": [] } ], - "summary": "Get an i author profile", + "summary": "Browse a Kroger category", "tags": [ - "i" + "Kroger" ] } }, - "/inews/headlines": { + "/kroger/coupons": { "get": { - "description": "Returns fresh headlines from one public i section feed. The section must be a slug returned by the sections endpoint.", - "operationId": "inews-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns a page of Kroger's public digital coupons: savings value, requirement text and quantity, brand, categories, redemption modalities, promotional tags, image, and start/end/expiry dates. Optionally narrow to one product (upc) or brand. This is the anonymous public coupon catalog -- per-account clipping state is not returned.", + "operationId": "kroger-coupons", "parameters": [ { - "description": "i section slug", - "enum": [ - "home", - "news", - "world", - "technology", - "politics", - "science", - "business", - "education", - "environment", - "health", - "media", - "housing", - "crime", - "sport", - "tennis", - "football", - "rugby-union", - "golf", - "cricket", - "boxing", - "olympics", - "rugby-league", - "opinion", - "editor", - "columnists", - "comment", - "culture", - "television", - "music", - "film", - "books", - "arts", - "radio", - "comedy", - "inews-lifestyle", - "money", - "property-and-mortgages", - "saving-and-banking", - "pensions-and-retirement", - "investing", - "small-business", - "travel", - "food-and-drink", - "homes-and-gardens", - "relationships" - ], + "description": "Narrow to coupons applying to one Kroger product", "in": "query", - "name": "section", - "required": true, + "name": "upc", "type": "string", - "x-example": "home" + "x-example": "0001111060933" + }, + { + "description": "Narrow to one brand's coupons", + "in": "query", + "name": "brand", + "type": "string", + "x-example": "Pillsbury" + }, + { + "description": "Kroger store/location id that scopes coupons", + "in": "query", + "name": "location_id", + "type": "string", + "x-example": "03500917" + }, + { + "default": 1, + "description": "One-based result page", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "default": 50, + "description": "Coupons per page, 1-200", + "in": "query", + "maximum": 200, + "minimum": 1, + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -401416,7 +475418,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/kroger.couponsResponseDoc" } }, "400": { @@ -401425,6 +475427,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -401437,16 +475445,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get i section headlines", + "summary": "Get Kroger digital coupons", "tags": [ - "i" + "Kroger" ] } }, - "/inews/news": { + "/kroger/product": { "get": { - "description": "Returns fresh i (inews.co.uk) top stories from the site's public RSS feed, with summary, author, publish time, and lead image when present.", - "operationId": "inews-news", + "consumes": [ + "application/json" + ], + "description": "Returns product detail for one Kroger item: title, description, image, brand, category trail, price/availability, and rating.", + "operationId": "kroger-product", + "parameters": [ + { + "description": "Kroger product UPC/id (the last path segment of the product page URL)", + "in": "query", + "name": "upc", + "required": true, + "type": "string", + "x-example": "0064519402151" + } + ], "produces": [ "application/json" ], @@ -401454,7 +475475,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/kroger.productResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -401469,16 +475508,46 @@ "ApiKeyAuth": [] } ], - "summary": "Get i top stories", + "summary": "Get a Kroger product", "tags": [ - "i" + "Kroger" ] } }, - "/inews/sections": { + "/kroger/product/reviews": { "get": { - "description": "Lists the 45 i sections accepted by `inews-headlines`, from `home` and `news` to `football`, `money` and `relationships`. Each entry has a `slug`, display `name` and `url`. `home` is the site-wide listing, and low-volume sections such as `golf` or `comedy` may hold only one or two items.", - "operationId": "inews-sections", + "consumes": [ + "application/json" + ], + "description": "Returns one page of a Kroger product's customer reviews -- review text, star rating, recommendation flag, helpful-vote counts, and customer photo URLs -- alongside the product's full star histogram. Customer display names are deliberately not returned.", + "operationId": "kroger-product-reviews", + "parameters": [ + { + "description": "Kroger product UPC/id", + "in": "query", + "name": "upc", + "required": true, + "type": "string", + "x-example": "0007120200411" + }, + { + "default": 1, + "description": "One-based review page", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "default": 16, + "description": "Reviews per page, 1-100", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "page_size", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -401486,7 +475555,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/kroger.reviewsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -401495,24 +475582,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get i sections", + "summary": "Get a Kroger product's customer reviews", "tags": [ - "i" + "Kroger" ] } }, - "/inquirer/article": { + "/kroger/products": { "get": { - "description": "Returns public Philippine Daily Inquirer article metadata and body paragraphs from a canonical article URL on any of its ten public news subdomains.", - "operationId": "inquirer-article", + "consumes": [ + "application/json" + ], + "description": "Returns full detail for up to 50 Kroger products in one call. Carries materially more than kroger-product: a nutrition-facts panel with ingredients, allergens and dietary flags; store-specific price and stock level; a full star-rating histogram; the merchandising hierarchy; and every image perspective. location_id scopes price and stock to one store.", + "operationId": "kroger-products", "parameters": [ { - "description": "Canonical Philippine Daily Inquirer article URL", + "description": "Comma-separated Kroger product UPCs, up to 50", "in": "query", - "name": "url", + "name": "upcs", "required": true, "type": "string", - "x-example": "https://newsinfo.inquirer.net/2311358/18-mindanawons-top-2026-nursing-licensure-exam" + "x-example": "0007465324996,0005100027014" + }, + { + "description": "Kroger store/location id that scopes price and stock", + "in": "query", + "name": "location_id", + "type": "string", + "x-example": "03500917" } ], "produces": [ @@ -401522,7 +475619,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/kroger.productsResponseDoc" } }, "400": { @@ -401531,8 +475628,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -401549,30 +475646,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get Philippine Daily Inquirer article content", + "summary": "Get full Kroger product detail in bulk", "tags": [ - "Philippine Daily Inquirer" + "Kroger" ] } }, - "/inquirer/author": { + "/kroger/related-tags": { "get": { - "description": "Returns one Philippine Daily Inquirer byline's public archive page: the contributor's name and their recent articles on that subdomain, from a canonical byline URL. Byline pages are per-subdomain, so an author's articles from a different section require calling this endpoint again with that section's own byline URL.", - "operationId": "inquirer-author", + "consumes": [ + "application/json" + ], + "description": "Returns the search-refinement chips Kroger shows above its own results for a query (e.g. \"chips ahoy\" returns \"chewy\", \"chunky\", \"thins\"). Each tag carries the full follow-on query it maps to, so results feed straight back into kroger-search.", + "operationId": "kroger-related-tags", "parameters": [ { - "description": "Canonical Philippine Daily Inquirer byline URL", + "description": "Search term to get refinement tags for", "in": "query", - "name": "url", + "name": "query", "required": true, "type": "string", - "x-example": "https://newsinfo.inquirer.net/byline/ivana-janlee-a-otoc" + "x-example": "chips ahoy" }, { - "description": "1-based page number of articles to return; defaults to 1 and overrides any page number already present in url", + "description": "Kroger store/location id that scopes results", "in": "query", - "name": "page", - "type": "integer" + "name": "location_id", + "type": "string", + "x-example": "03500917" } ], "produces": [ @@ -401582,7 +475683,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.inquirerAuthorResponseDoc" + "$ref": "#/definitions/kroger.relatedTagsResponseDoc" } }, "400": { @@ -401591,8 +475692,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -401609,36 +475710,103 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Philippine Daily Inquirer author profile", + "summary": "Get Kroger search-refinement tags", "tags": [ - "Philippine Daily Inquirer" + "Kroger" ] } }, - "/inquirer/headlines": { + "/kroger/search": { "get": { - "description": "Returns the latest Philippine Daily Inquirer stories for one section. `section` is required and takes `newsinfo`, `globalnation`, `business`, `sports`, `entertainment`, `lifestyle`, `technology`, `opinion`, `usa` or `cebudailynews`. Each item has its title, URL, summary, publication time, author and lead image.", - "operationId": "inquirer-headlines", + "consumes": [ + "application/json" + ], + "description": "Searches Kroger products by keyword and returns product cards (price, unit price, brand, size, stock level) plus the facet groups Kroger offers for the query (brands, nutrition, savings, price range and more). It supports real pagination, and the source field reports which path answered. Facet filters and sort apply to the primary path only: when any of them is set, a failure of that path returns an error rather than silently falling back to unfiltered results.", + "operationId": "kroger-search", "parameters": [ { - "description": "Philippine Daily Inquirer section slug", + "description": "Search keyword", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "milk" + }, + { + "default": 1, + "description": "One-based result page", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "default": "relevance", + "description": "Result order. One of: relevance, name_asc, popularity_desc", "enum": [ - "newsinfo", - "globalnation", - "business", - "sports", - "entertainment", - "lifestyle", - "technology", - "opinion", - "usa", - "cebudailynews" + "relevance", + "name_asc", + "popularity_desc" ], "in": "query", - "name": "section", - "required": true, + "name": "sort", + "type": "string" + }, + { + "description": "Comma-separated brand names to filter by, taken verbatim from a previous response's facets", + "in": "query", + "name": "brands", "type": "string", - "x-example": "newsinfo" + "x-example": "Halo Top,Rebel" + }, + { + "description": "Comma-separated nutrition/dietary facet values", + "in": "query", + "name": "nutrition", + "type": "string", + "x-example": "Gluten Free" + }, + { + "description": "Comma-separated flavor facet values", + "in": "query", + "name": "flavor", + "type": "string", + "x-example": "Chocolate" + }, + { + "description": "Comma-separated scent facet values", + "in": "query", + "name": "scent", + "type": "string", + "x-example": "Bergamot" + }, + { + "description": "Comma-separated savings facet values", + "in": "query", + "name": "savings", + "type": "string", + "x-example": "On Sale" + }, + { + "description": "Comma-separated more-options facet values", + "in": "query", + "name": "more_options", + "type": "string", + "x-example": "SNAP EBT Eligible" + }, + { + "description": "Lower bound of the price filter; defaults to 0", + "in": "query", + "name": "price_min", + "type": "number", + "x-example": 0 + }, + { + "description": "Upper bound of the price filter; required to filter on price", + "in": "query", + "name": "price_max", + "type": "number", + "x-example": 8 } ], "produces": [ @@ -401648,7 +475816,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/kroger.searchResponseDoc" } }, "400": { @@ -401657,6 +475825,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -401669,16 +475843,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Philippine Daily Inquirer section headlines", + "summary": "Search Kroger products", "tags": [ - "Philippine Daily Inquirer" + "Kroger" ] } }, - "/inquirer/news": { + "/kroger/store": { "get": { - "description": "Returns the latest top stories from the Philippine Daily Inquirer's flagship national-news site, newsinfo.inquirer.net. Takes no parameters. Each item has its title, URL, summary, publication time, author and lead image.", - "operationId": "inquirer-news", + "consumes": [ + "application/json" + ], + "description": "Returns one Kroger store's public detail: postal address, geographic coordinates, phone number, displayed opening hours (including any daily break hours), and whether it has a drive-thru. store_id is the same store/location id kroger-products and kroger-suggest accept.", + "operationId": "kroger-store", + "parameters": [ + { + "description": "Kroger store/location id", + "in": "query", + "name": "store_id", + "required": true, + "type": "string", + "x-example": "01600531" + } + ], "produces": [ "application/json" ], @@ -401686,7 +475873,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/kroger.storeResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -401707,16 +475906,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get Philippine Daily Inquirer top stories", + "summary": "Get one Kroger store's detail", "tags": [ - "Philippine Daily Inquirer" + "Kroger" ] } }, - "/inquirer/sections": { + "/kroger/suggest": { "get": { - "description": "Lists the ten Philippine Daily Inquirer sections that `inquirer-headlines` accepts, from `newsinfo` to `cebudailynews`. Each entry has a `slug`, a display `name` and the section's `url`. Takes no parameters.", - "operationId": "inquirer-sections", + "consumes": [ + "application/json" + ], + "description": "Returns Kroger's own search-box suggestions for a (possibly empty) query, sourced directly from Kroger's public suggestions API rather than the rendered search page. An empty query returns Kroger's default \"trending\" shopping shortcuts instead of an error. location_id scopes results to one Kroger store and defaults to a confirmed-working store id when omitted.", + "operationId": "kroger-suggest", + "parameters": [ + { + "description": "Partial search text; omit for trending default suggestions", + "in": "query", + "name": "query", + "type": "string", + "x-example": "rin" + }, + { + "description": "Kroger store/location id", + "in": "query", + "name": "location_id", + "type": "string", + "x-example": "03500917" + } + ], "produces": [ "application/json" ], @@ -401724,7 +475942,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/kroger.suggestResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -401733,43 +475963,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Philippine Daily Inquirer sections", + "summary": "Get Kroger search-box suggestions", "tags": [ - "Philippine Daily Inquirer" + "Kroger" ] } }, - "/instacart/departments": { + "/kyliecosmetics/collections": { "get": { "consumes": [ "application/json" ], - "description": "Returns a store's department/category taxonomy (Produce, Dairy & Eggs, Bakery, ...) two levels deep -- department and subcategory. Metadata only, does not return products. Public data sourced from Instacart's own storefront navigation.", - "operationId": "instacart-departments", + "description": "Returns collections from Kylie Cosmetics (https://www.kyliecosmetics.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", + "operationId": "kyliecosmetics-collections", "parameters": [ { - "description": "Store's opaque shop id, from GET /instacart/stores", - "in": "query", - "name": "shop_id", - "required": true, - "type": "string", - "x-example": "9501" - }, - { - "description": "Store's retailer slug, from GET /instacart/stores", + "description": "1-based page, defaults to 1", "in": "query", - "name": "store_slug", - "required": true, - "type": "string", - "x-example": "safeway" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Postal code to localize the taxonomy for", + "description": "Maximum collections, defaults to 50 and supports up to 250", "in": "query", - "name": "postal_code", - "required": true, - "type": "string", - "x-example": "94105" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -401779,7 +475999,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/instacart.departmentsResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" } }, "400": { @@ -401788,8 +476008,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -401806,59 +476026,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get Instacart store department taxonomy", + "summary": "List Kylie Cosmetics collections", "tags": [ - "Instacart" + "Kylie Cosmetics" ] } }, - "/instacart/item": { + "/kyliecosmetics/collections/{handle}/products": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single product's detail at a specific Instacart store: name, size, brand, image, current pricing (with any sale/offer badge), availability, stock level, dietary labels, and nutrition facts. Public data sourced from Instacart's own storefront pages.", - "operationId": "instacart-item", + "description": "Returns products from one Kylie Cosmetics (https://www.kyliecosmetics.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", + "operationId": "kyliecosmetics-collection-products", "parameters": [ { - "description": "Store's opaque shop id, from GET /instacart/stores", - "in": "query", - "name": "shop_id", - "required": true, - "type": "string", - "x-example": "9501" - }, - { - "description": "Store's retailer slug, from GET /instacart/stores", - "in": "query", - "name": "store_slug", - "required": true, - "type": "string", - "x-example": "safeway" - }, - { - "description": "Store's opaque retailer location id, from GET /instacart/stores", - "in": "query", - "name": "retailer_location_id", + "description": "Collection handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "53" + "x-example": "collection-handle" }, { - "description": "Instacart's opaque product id", + "description": "1-based page, defaults to 1", "in": "query", - "name": "product_id", - "required": true, - "type": "string", - "x-example": "17830663" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Postal code to price/localize the lookup for", + "description": "Maximum products, defaults to 50 and supports up to 250", "in": "query", - "name": "postal_code", - "required": true, - "type": "string", - "x-example": "94105" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -401868,7 +476070,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/instacart.itemResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" } }, "400": { @@ -401883,8 +476085,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -401901,43 +476103,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Instacart product detail at a store", + "summary": "List Kylie Cosmetics collection products", "tags": [ - "Instacart" + "Kylie Cosmetics" ] } }, - "/instacart/search": { + "/kyliecosmetics/pages": { "get": { "consumes": [ "application/json" ], - "description": "Returns Instacart's own search-term autosuggestions for a keyword within one store -- the same suggestion list shown in the site's own search box dropdown. This is term-level (matching search phrases plus a representative thumbnail), not a paginated product-results list. Public data sourced from Instacart's own storefront search.", - "operationId": "instacart-search", + "description": "Lists static pages from the Kylie Cosmetics store, paged with `page` (default 1) and `limit` (default 50, max 250). Each page has its id, handle, title, URL, plain-text content and timestamps. When `transport_mode` is `ssr_embedded`, items carry only `handle`, `url` and `updated_at`.", + "operationId": "kyliecosmetics-pages", "parameters": [ { - "description": "Store's opaque shop id, from GET /instacart/stores", - "in": "query", - "name": "shop_id", - "required": true, - "type": "string", - "x-example": "9501" - }, - { - "description": "Store's retailer slug, from GET /instacart/stores", + "description": "1-based page, defaults to 1", "in": "query", - "name": "store_slug", - "required": true, - "type": "string", - "x-example": "safeway" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Free-text search term", + "description": "Maximum static pages, defaults to 50 and supports up to 250", "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "milk" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -401947,7 +476139,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/instacart.searchResponseDoc" + "$ref": "#/definitions/shopifybrands.pagesResponseDoc" } }, "400": { @@ -401956,8 +476148,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -401974,35 +476166,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Instacart product terms at a store", + "summary": "List Kylie Cosmetics static pages", "tags": [ - "Instacart" + "Kylie Cosmetics" ] } }, - "/instacart/search-nearby": { + "/kyliecosmetics/pages/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "Returns Instacart's own search-term autosuggestions for a keyword across every retailer serving a postal code at once, rather than one specific store. Public data sourced from Instacart's own cross-retailer search.", - "operationId": "instacart-search-nearby", + "description": "Returns one static page from the Kylie Cosmetics store by `handle`. The response has the page id, title, URL, handle, plain-text content, and created, updated and published times. Content is text, not HTML. In some cases `transport_mode` is `ssr_embedded` and `id` is omitted. An unknown handle returns `404`.", + "operationId": "kyliecosmetics-page", "parameters": [ { - "description": "US postal/ZIP code to search near", - "in": "query", - "name": "postal_code", - "required": true, - "type": "string", - "x-example": "94105" - }, - { - "description": "Free-text search term", - "in": "query", - "name": "q", + "description": "Page handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "milk" + "x-example": "page-handle" } ], "produces": [ @@ -402012,7 +476196,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/instacart.searchNearbyResponseDoc" + "$ref": "#/definitions/shopifybrands.pageResponseDoc" } }, "400": { @@ -402027,8 +476211,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -402045,27 +476229,33 @@ "ApiKeyAuth": [] } ], - "summary": "Search Instacart product terms near a postal code", + "summary": "Get a Kylie Cosmetics static page", "tags": [ - "Instacart" + "Kylie Cosmetics" ] } }, - "/instacart/stores": { + "/kyliecosmetics/products": { "get": { "consumes": [ "application/json" ], - "description": "Finds Instacart retailer storefronts (grocery stores, warehouse clubs, and other partner retailers) serving a US postal code, each with the identifiers needed to look up its items and search suggestions. Public data sourced from Instacart's own store-discovery API.", - "operationId": "instacart-stores", + "description": "Returns products from Kylie Cosmetics's (https://www.kyliecosmetics.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", + "operationId": "kyliecosmetics-products", "parameters": [ { - "description": "US postal/ZIP code to search near", + "description": "1-based page, defaults to 1", "in": "query", - "name": "postal_code", - "required": true, - "type": "string", - "x-example": "94105" + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Maximum products, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -402075,7 +476265,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/instacart.storesResponseDoc" + "$ref": "#/definitions/shopifybrands.productsResponseDoc" } }, "400": { @@ -402084,14 +476274,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -402108,27 +476292,27 @@ "ApiKeyAuth": [] } ], - "summary": "Find Instacart stores near a postal code", + "summary": "List Kylie Cosmetics products", "tags": [ - "Instacart" + "Kylie Cosmetics" ] } }, - "/instacart/trending": { + "/kyliecosmetics/products/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "Returns Instacart's own popular/trending search terms across every retailer serving a postal code -- the same blank-state suggestions shown before a user types anything into the search box. Public data sourced from Instacart's own cross-retailer search.", - "operationId": "instacart-trending", + "description": "Returns product detail for one Kylie Cosmetics (https://www.kyliecosmetics.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", + "operationId": "kyliecosmetics-product", "parameters": [ { - "description": "US postal/ZIP code to search near", - "in": "query", - "name": "postal_code", + "description": "Product handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "94105" + "x-example": "product-handle" } ], "produces": [ @@ -402138,7 +476322,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/instacart.trendingResponseDoc" + "$ref": "#/definitions/shopifybrands.productResponseDoc" } }, "400": { @@ -402153,8 +476337,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -402171,33 +476355,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get Instacart trending search terms near a postal code", + "summary": "Get a Kylie Cosmetics product", "tags": [ - "Instacart" + "Kylie Cosmetics" ] } }, - "/instagram/post/comments": { + "/kyliecosmetics/products/{handle}/recommendations": { "get": { "consumes": [ "application/json" ], - "description": "Returns top-level comments for a public Instagram post or Reel. `reply_count` is included when the logged-out source exposes it; reply bodies are not available on this anonymous surface. Pass `paging_info.max_id` back as `max_id` for the next comment page.", - "operationId": "instagram-comments", + "description": "Returns recommended products for one Kylie Cosmetics (https://www.kyliecosmetics.com) product handle. The storefront URL is fixed server-side.", + "operationId": "kyliecosmetics-product-recommendations", "parameters": [ { - "description": "Public Instagram post or Reel URL", - "in": "query", - "name": "url", + "description": "Product handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "https://www.instagram.com/google/p/DecN711mjpI/" + "x-example": "product-handle" }, { - "description": "Opaque cursor from the previous response's paging_info.max_id", + "description": "Maximum products, defaults to 10 and supports up to 20", "in": "query", - "name": "max_id", - "type": "string" + "name": "limit", + "type": "integer", + "x-example": 10 + }, + { + "description": "Recommendation intent. Allowed values: related, complementary", + "enum": [ + "related", + "complementary" + ], + "in": "query", + "name": "intent", + "type": "string", + "x-example": "related" } ], "produces": [ @@ -402205,37 +476401,31 @@ ], "responses": { "200": { - "description": "Wrapped top-level comments page", + "description": "OK", "schema": { - "$ref": "#/definitions/instagram.commentsResponseDoc" + "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Post or Reel not found", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal server error", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Anonymous upstream access denied or unavailable", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -402246,35 +476436,41 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve paginated Instagram comments", + "summary": "List Kylie Cosmetics product recommendations", "tags": [ - "Instagram" + "Kylie Cosmetics" ] } }, - "/instagram/post/{id}/{post_id}": { + "/kyliecosmetics/search/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns media details for an Instagram URL shortcode. Use media.code from the reels response or shortcode from a public post URL; numeric media IDs are rejected.", - "operationId": "instagram-post", + "description": "Returns products, collections, and query suggestions from Kylie Cosmetics's (https://www.kyliecosmetics.com) predictive search. The storefront URL is fixed server-side.", + "operationId": "kyliecosmetics-search-suggest", "parameters": [ { - "description": "Instagram user ID retained for route compatibility; ownership is not verified", - "in": "path", - "name": "id", + "description": "Search query", + "in": "query", + "name": "q", "required": true, "type": "string", - "x-example": "1067259270" + "x-example": "wool" }, { - "description": "Instagram URL shortcode (media.code), not a numeric media ID", - "in": "path", - "name": "post_id", - "required": true, + "description": "Comma-separated suggestion types. Allowed values: product, collection, query", + "in": "query", + "name": "types", "type": "string", - "x-example": "DNBxHTZRigP" + "x-example": "product,collection,query" + }, + { + "description": "Maximum results per type, defaults to 10 and supports up to 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -402282,31 +476478,25 @@ ], "responses": { "200": { - "description": "Wrapped media item payload", + "description": "OK", "schema": { - "$ref": "#/definitions/instagram.postResponseDoc" + "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "No post found", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -402317,27 +476507,42 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve a specific Instagram post by URL shortcode", + "summary": "Get Kylie Cosmetics search suggestions", "tags": [ - "Instagram" + "Kylie Cosmetics" ] } }, - "/instagram/profile/{username}": { + "/kyliecosmetics/sitemap/urls": { "get": { "consumes": [ "application/json" ], - "description": "Returns the public profile of an Instagram account by `username`. The response has the user id, full name, biography, bio links, external URL, category, follower, following and post counts, verified and private flags, location, profile picture, recent posts with captions and like counts, and related profiles.", - "operationId": "instagram-profile", + "description": "Returns capped URL entries from Kylie Cosmetics's (https://www.kyliecosmetics.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", + "operationId": "kyliecosmetics-sitemap-urls", "parameters": [ { - "description": "Instagram username", - "in": "path", - "name": "username", - "required": true, + "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", + "enum": [ + "all", + "products", + "collections", + "pages", + "blogs", + "agentic_discovery", + "other" + ], + "in": "query", + "name": "type", "type": "string", - "x-example": "google" + "x-example": "products" + }, + { + "description": "Maximum URL entries, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -402345,31 +476550,25 @@ ], "responses": { "200": { - "description": "Wrapped profile payload", + "description": "OK", "schema": { - "$ref": "#/definitions/instagram.profileResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Profile not found", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -402380,71 +476579,43 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve an Instagram user profile by username", + "summary": "List Kylie Cosmetics sitemap URLs", "tags": [ - "Instagram" + "Kylie Cosmetics" ] } }, - "/instagram/reels/{id}": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns up to 12 public Reels via anonymous proxied HTTP for the numeric Instagram user ID. Supports opaque `max_id` pagination. Captions, timestamps and original image dimensions are omitted when the public source does not expose them.", - "operationId": "instagram-reels", - "parameters": [ - { - "description": "Numeric Instagram user ID (not a username)", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "45374573700" - }, - { - "description": "Pagination cursor for fetching the next page of Reels", - "in": "query", - "name": "max_id", - "type": "string" - } + "/kyliecosmetics/sitemaps": { + "get": { + "consumes": [ + "application/json" ], + "description": "Returns child sitemap URLs from Kylie Cosmetics's (https://www.kyliecosmetics.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", + "operationId": "kyliecosmetics-sitemaps", "produces": [ "application/json" ], "responses": { "200": { - "description": "Wrapped Reels feed payload", + "description": "OK", "schema": { - "$ref": "#/definitions/instagram.reelsResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "No Reels found", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal server error", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Anonymous upstream access denied or unavailable", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -402455,71 +476626,43 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve Instagram Reels for a user", + "summary": "List Kylie Cosmetics sitemaps", "tags": [ - "Instagram" + "Kylie Cosmetics" ] } }, - "/instagram/user/{username}/posts": { + "/kyliecosmetics/store": { "get": { "consumes": [ "application/json" ], - "description": "Returns public posts and Reels from the logged-out Posts tab for an Instagram username. Each item exposes the fields available in Instagram's public grid; source-omitted metrics and dimensions are not inferred. Pass `paging_info.max_id` back as `max_id` for the next page.", - "operationId": "instagram-user-posts", - "parameters": [ - { - "description": "Instagram username, optionally prefixed with @", - "in": "path", - "name": "username", - "required": true, - "type": "string", - "x-example": "google" - }, - { - "description": "Opaque cursor from the previous response's paging_info.max_id", - "in": "query", - "name": "max_id", - "type": "string" - } - ], + "description": "Returns storefront metadata for Kylie Cosmetics (https://www.kyliecosmetics.com). The storefront URL is fixed server-side, so no `url` parameter is accepted.", + "operationId": "kyliecosmetics-store", "produces": [ "application/json" ], "responses": { "200": { - "description": "Wrapped user posts page", + "description": "OK", "schema": { - "$ref": "#/definitions/instagram.userPostsResponseDoc" + "$ref": "#/definitions/shopifybrands.storeResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Profile not found", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal server error", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Anonymous upstream access denied or unavailable", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -402530,24 +476673,24 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve paginated Instagram user posts", + "summary": "Get Kylie Cosmetics store metadata", "tags": [ - "Instagram" + "Kylie Cosmetics" ] } }, - "/investopedia/article": { + "/latimes/article": { "get": { - "description": "Returns metadata (title, description, dates, section, authors, image) and body paragraphs for a public Investopedia page that uses the article template: news stories, dictionary terms (/terms/...), explainers and Q&A pages (/articles/..., /ask/answers/..., and similar), and product roundups. Section listing pages and author profiles are rejected with a 400 that names the endpoint to use instead.", - "operationId": "investopedia-article", + "description": "Returns a Los Angeles Times article's public metadata and body paragraphs from a canonical article URL, read from the page's NewsArticle structured data.", + "operationId": "latimes-article", "parameters": [ { - "description": "Canonical Investopedia article, term, or explainer URL", + "description": "Canonical Los Angeles Times article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.investopedia.com/terms/c/compoundinterest.asp" + "x-example": "https://www.latimes.com/environment/story/2026-09-18/newsom-rejects-roll-back-of-ceqa-exemptions-for-advanced-manufacturing" } ], "produces": [ @@ -402557,7 +476700,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/latimes.articleResponseDoc" } }, "400": { @@ -402572,6 +476715,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -402584,24 +476733,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Investopedia article content", + "summary": "Get Los Angeles Times article content", "tags": [ - "Investopedia" + "Los Angeles Times" ] } }, - "/investopedia/author": { + "/latimes/author": { "get": { - "description": "Returns an Investopedia writer, editor, reviewer, or expert contributor's public profile (name, job title, summary, photo, credentials such as education, location, and expertise, personal social links, biography, favorite quote) and their recent articles.", - "operationId": "investopedia-author", + "description": "Returns a Los Angeles Times author profile by `url`, a canonical `https://www.latimes.com/people/` link; other hosts or paths return a bad-request error. The response has the `name`, `job_title`, `bio`, `email`, `image_url`, `social_accounts` and recent articles with title, URL, summary, publication time and lead image. Accounts the page does not list are absent.", + "operationId": "latimes-author", "parameters": [ { - "description": "Canonical Investopedia author URL (/- or /contributors//)", + "description": "Canonical Los Angeles Times author URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.investopedia.com/diccon-hyatt-7100294" + "x-example": "https://www.latimes.com/people/anita-chabria" } ], "produces": [ @@ -402611,7 +476760,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.investopediaAuthorResponseDoc" + "$ref": "#/definitions/latimes.authorResponseDoc" } }, "400": { @@ -402626,6 +476775,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -402638,69 +476793,67 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Investopedia author or expert profile", + "summary": "Get a Los Angeles Times author profile", "tags": [ - "Investopedia" + "Los Angeles Times" ] } }, - "/investopedia/headlines": { + "/latimes/headlines": { "get": { - "description": "Returns the current story list from one Investopedia section, with title, URL, byline, and image. section accepts any slug returned by GET /investopedia/sections.", - "operationId": "investopedia-headlines", + "description": "Returns fresh headlines from a public Los Angeles Times section RSS feed: title, canonical URL, summary, author, publication time, and lead image. section defaults to main.", + "operationId": "latimes-headlines", "parameters": [ { - "description": "Investopedia section slug, from GET /investopedia/sections", + "description": "Section slug from latimes-sections, defaults to main", "enum": [ - "news", - "markets-news", - "company-news", - "earnings-reports", - "certificates-deposit-news", - "mortgage-rates", - "economic-news", - "political-news", - "cryptocurrency-news", - "live-markets-news", - "personal-finance-news", - "investing", - "stocks", - "cryptocurrency", - "bonds", - "etfs", - "options-and-derivatives-trading", - "commodities", - "trading", - "financial-technology-and-automated-investing", - "brokers", - "fundamental-analysis", - "banking", - "savings-accounts", - "certificate-of-deposits", - "money-market-account", - "checking-accounts", - "personal-finance", - "retirement-planning", - "student-loans", - "personal-loans", - "budgeting-and-savings", - "mortgage", - "credit-and-debt", - "taxes", - "insurance", - "financial-literacy-resource-center", - "economy", - "government-and-policy", - "monetary-policy", - "fiscal-policy", - "economics", - "financial-product-reviews" + "main", + "business", + "business/autos", + "business/real-estate", + "business/technology", + "california", + "california/orange-county", + "entertainment-arts", + "entertainment-arts/awards", + "entertainment-arts/books", + "entertainment-arts/business", + "entertainment-arts/movies", + "entertainment-arts/music", + "entertainment-arts/tv", + "environment", + "espanol/comida", + "espanol/deportes", + "espanol/eeuu", + "espanol/entretenimiento", + "espanol/internacional", + "espanol/mexico", + "espanol/politica", + "espanol/vida-y-estilo", + "food", + "lifestyle", + "obituaries", + "opinion", + "politics", + "science", + "sports", + "sports/angels", + "sports/chargers", + "sports/clippers", + "sports/dodgers", + "sports/highschool", + "sports/hockey", + "sports/lakers", + "sports/rams", + "sports/soccer", + "sports/ucla", + "sports/usc", + "travel", + "world-nation" ], "in": "query", "name": "section", - "required": true, - "type": "string", - "x-example": "news" + "type": "string" } ], "produces": [ @@ -402710,7 +476863,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/latimes.headlinesResponseDoc" } }, "400": { @@ -402725,6 +476878,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -402737,16 +476896,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Investopedia section headlines", + "summary": "Get Los Angeles Times section headlines", "tags": [ - "Investopedia" + "Los Angeles Times" ] } }, - "/investopedia/news": { + "/latimes/sections": { "get": { - "description": "Returns the newest Investopedia news stories (markets, companies, earnings, economy, government, crypto, rates, and personal finance news), with title, URL, byline, and image.", - "operationId": "investopedia-news", + "description": "Returns the complete set of section slugs accepted by latimes-headlines, each with its display name and public RSS feed URL.", + "operationId": "latimes-sections", "produces": [ "application/json" ], @@ -402754,7 +476913,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/latimes.sectionsResponseDoc" } }, "429": { @@ -402775,50 +476934,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Investopedia latest news", + "summary": "List Los Angeles Times section feeds", "tags": [ - "Investopedia" + "Los Angeles Times" ] } }, - "/investopedia/sections": { + "/lazada/categories": { "get": { - "description": "Returns the full Investopedia section inventory (43 news, investing, banking, personal finance, economy, and reviews sections), each with a slug, display name, and public listing URL. Use a returned slug as the section parameter on GET /investopedia/headlines.", - "operationId": "investopedia-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Investopedia sections", - "tags": [ - "Investopedia" - ] - } - }, - "/iol/article": { - "get": { - "description": "Returns an IOL article by `url`, a canonical `iol.co.za` story link. The response has the title, description, section (the deepest in the breadcrumb, such as `Crime and Courts`), authors, lead image, publish and update times, and body `paragraphs`. Section, author, tag and search pages are rejected. `paywalled` is never set.", - "operationId": "iol-article", + "description": "Returns one Lazada country storefront's public category directory from the server-rendered LazMall navigation menu. The response includes top-level groups, categories, and subcategory links; it does not include product listings.", + "operationId": "lazada-categories", "parameters": [ { - "description": "Canonical IOL article URL", + "description": "Lazada country storefront. Defaults to id.", + "enum": [ + "id", + "ph", + "th", + "my", + "vn", + "sg" + ], "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://iol.co.za/news/crime-and-courts/2026-09-24-homii-lift-tragedy-durban-father-demands-ethekwini-report-nearly-a-year-after-twins-fall/" + "name": "country", + "type": "string" } ], "produces": [ @@ -402828,7 +476970,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/lazada.categoriesResponseDoc" } }, "400": { @@ -402837,8 +476979,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -402855,30 +476997,64 @@ "ApiKeyAuth": [] } ], - "summary": "Get IOL article content", + "summary": "Get a Lazada country storefront's category directory", "tags": [ - "IOL" + "Lazada" ] } }, - "/iol/author": { + "/lazada/category-products": { "get": { - "description": "Returns an IOL author profile, identified by `slug` (such as `xolile-mtembu`) or a canonical `iol.co.za/authors//` `url`; provide exactly one. The response has the name, `role` and `image_url` when present, and up to 25 recent articles with title, URL, summary, section and a `published_date` taken from the article URL. Unknown authors return not found.", - "operationId": "iol-author", + "consumes": [ + "application/json" + ], + "description": "Returns one Lazada country storefront's product listing for one category, optionally filtered to one brand within it. Product cards include item ids, canonical product URLs, images, prices, ratings, and review counts, with pagination and sort. The category (and optional brand) value is the raw Lazada path slug, not a display name -- use the categories endpoint's own returned URLs to discover a category's slug.", + "operationId": "lazada-category-products", "parameters": [ { - "description": "Author slug, e.g. xolile-mtembu", + "description": "Lazada country storefront. Defaults to id.", + "enum": [ + "id", + "ph", + "th", + "my", + "vn", + "sg" + ], "in": "query", - "name": "slug", - "type": "string", - "x-example": "xolile-mtembu" + "name": "country", + "type": "string" }, { - "description": "Canonical iol.co.za/authors// URL; alternative to slug", + "description": "Lazada category path slug, e.g. \\", "in": "query", - "name": "url", + "name": "category", + "required": true, "type": "string", - "x-example": "https://iol.co.za/authors/xolile-mtembu/" + "x-example": "shop-mobiles" + }, + { + "description": "Optional brand path slug to filter within the category.", + "in": "query", + "name": "brand", + "type": "string" + }, + { + "description": "Result page, 1-indexed. Defaults to 1.", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Sort order. Defaults to popularity.", + "enum": [ + "popularity", + "priceasc", + "pricedesc" + ], + "in": "query", + "name": "sort", + "type": "string" } ], "produces": [ @@ -402888,7 +477064,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.iolAuthorResponseDoc" + "$ref": "#/definitions/lazada.categoryProductsResponseDoc" } }, "400": { @@ -402897,8 +477073,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -402915,149 +477091,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get an IOL author profile", + "summary": "Get a Lazada country storefront's product listing for one category", "tags": [ - "IOL" + "Lazada" ] } }, - "/iol/headlines": { + "/lazada/home": { "get": { - "description": "Returns recent IOL headlines for one section path. `section` is required and takes a value such as `news`, `news/south-africa/gauteng`, `sport/rugby/springboks`, `business/economy` or `entertainment/music`. Each item has its title, URL, summary, publication time and image, plus the author when the outlet names one. Unlisted values are rejected.", - "operationId": "iol-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns one Lazada country storefront's anonymous homepage feed: current flash-sale product cards, featured category links, and (where shown) an official-stores carousel. Product-detail and free-text catalog pages are not included because Lazada's stateless routes currently return an anti-bot challenge on every country domain.", + "operationId": "lazada-home", "parameters": [ { - "description": "IOL section path", + "description": "Lazada country storefront. Defaults to id.", "enum": [ - "news", - "news/africa", - "news/brics", - "news/crime-and-courts", - "news/education", - "news/energy", - "news/environment", - "news/feel-good", - "news/opinion", - "news/partnered", - "news/politics", - "news/politics/opinion", - "news/south-africa", - "news/south-africa/eastern-cape", - "news/south-africa/free-state", - "news/south-africa/gauteng", - "news/south-africa/kwazulu-natal", - "news/south-africa/limpopo", - "news/south-africa/mpumalanga", - "news/south-africa/north-west", - "news/south-africa/northern-cape", - "news/south-africa/western-cape", - "news/world", - "sport", - "sport/athletics", - "sport/betting", - "sport/boxing", - "sport/cricket", - "sport/cricket/domestic", - "sport/cricket/international", - "sport/cricket/proteas", - "sport/cricket/proteas-women", - "sport/golf", - "sport/horse-racing", - "sport/mma", - "sport/opinion", - "sport/rugby", - "sport/rugby/imbokodo", - "sport/rugby/international", - "sport/rugby/springboks", - "sport/rugby/super-rugby", - "sport/rugby/urc", - "sport/soccer", - "sport/soccer/bafana", - "sport/soccer/la-liga", - "sport/soccer/premier-league", - "sport/soccer/psl", - "sport/soccer/uefa-champions-league", - "sport/swimming", - "sport/tennis", - "business", - "business/economy", - "business/jobs", - "business/property", - "business/window-on-china", - "personal-finance", - "opinion", - "opinion/letters", - "entertainment", - "entertainment/books", - "entertainment/celebrity-news", - "entertainment/events", - "entertainment/movies", - "entertainment/music", - "entertainment/opinion", - "entertainment/royals", - "entertainment/streaming", - "entertainment/tv", - "entertainment/whats-on", - "entertainment/whats-on/cape-town", - "entertainment/whats-on/durban", - "entertainment/whats-on/joburg", - "entertainment/whats-on/pretoria", - "lifestyle", - "lifestyle/competitions", - "lifestyle/family", - "lifestyle/family/parenting", - "lifestyle/food-drink", - "lifestyle/food-drink/recipes", - "lifestyle/health", - "lifestyle/love-sex", - "lifestyle/love-sex/relationships", - "lifestyle/opinion", - "lifestyle/style-beauty", - "lifestyle/style-beauty/beauty", - "lifestyle/style-beauty/fashion", - "technology", - "technology/esports", - "technology/gadgets", - "technology/gaming", - "technology/mobile-apps", - "technology/opinion", - "technology/software-and-internet", - "motoring", - "motoring/f1-grand-prix", - "motoring/industry-news", - "motoring/latest-launches", - "motoring/motorsport", - "motoring/partnered", - "motoring/road-tests", - "travel", - "travel/africa", - "travel/partnered", - "travel/south-africa", - "travel/travel-tips", - "travel/world", - "matric", - "g20", - "government-at-work", - "capeargus", - "capeargus/news", - "capeargus/opinion", - "weekend-argus", - "weekend-argus/news", - "dailynews", - "dailynews/news", - "the-star", - "the-star/news", - "sunday-tribune", - "saturday-star", - "pretoria-news", - "pretoria-news/news", - "pretoria-news/opinion" + "id", + "ph", + "th", + "my", + "vn", + "sg" ], "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "news" + "name": "country", + "type": "string" } ], "produces": [ @@ -403067,7 +477127,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/lazada.homeResponseDoc" } }, "400": { @@ -403076,6 +477136,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -403088,16 +477154,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get IOL section headlines", + "summary": "Get a Lazada country storefront's homepage feed", "tags": [ - "IOL" + "Lazada" ] } }, - "/iol/news": { + "/lazada/product": { "get": { - "description": "Returns the 30 newest stories from IOL (Independent Online, South Africa), with no parameters. Each item has its title, canonical article URL, short summary, publication time, author byline and lead image.", - "operationId": "iol-news", + "consumes": [ + "application/json" + ], + "description": "Returns one Lazada country storefront's product-detail page: title, brand, full description, image gallery, category breadcrumb, and selectable variant properties. item_id (and, for a specific variant, sku_id) are the same ids the search, category-products, and home endpoints already return as item_id. Price is best-effort, read from the page's own display-tracking data rather than a dedicated pricing field; rating and review count are not available on this endpoint because Lazada fetches them client-side after the initial page load.", + "operationId": "lazada-product", + "parameters": [ + { + "description": "Lazada country storefront. Defaults to id.", + "enum": [ + "id", + "ph", + "th", + "my", + "vn", + "sg" + ], + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Lazada item id.", + "in": "query", + "name": "item_id", + "required": true, + "type": "integer", + "x-example": 159992555 + }, + { + "description": "Optional Lazada sku id, for a specific variant.", + "in": "query", + "name": "sku_id", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -403105,7 +477204,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/lazada.productResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -403120,50 +477237,58 @@ "ApiKeyAuth": [] } ], - "summary": "Get IOL top stories", + "summary": "Get a Lazada country storefront's product-detail page", "tags": [ - "IOL" + "Lazada" ] } }, - "/iol/sections": { + "/lazada/search": { "get": { - "description": "Returns the verified IOL section inventory accepted by the headlines endpoint: news, sport, business, lifestyle, entertainment, technology, motoring, travel and opinion, their sub-sections, provincial news and the sister-title feeds.", - "operationId": "iol-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get IOL sections", - "tags": [ - "IOL" - ] - } - }, - "/irishindependent/article": { - "get": { - "description": "Returns public Irish Independent article metadata (headline, description, section, authors, publish/update times, lead image) and body paragraphs from a canonical article URL. Premium articles are served to anonymous readers as a one-paragraph teaser; those are returned with paywalled set to true and only the teaser paragraph.", - "operationId": "irishindependent-article", + "description": "Returns one Lazada country storefront's free-text catalog search results: product cards with item ids, canonical product URLs, images, prices in the storefront's own currency, ratings, and review counts, with pagination and sort. Lazada's own search always substitutes generic or trending items rather than returning a genuinely empty result set, so an empty items list or a low total_results is not by itself a reliable \"no matches\" signal.", + "operationId": "lazada-search", "parameters": [ { - "description": "Canonical Irish Independent article URL", + "description": "Lazada country storefront. Defaults to id.", + "enum": [ + "id", + "ph", + "th", + "my", + "vn", + "sg" + ], "in": "query", - "name": "url", + "name": "country", + "type": "string" + }, + { + "description": "Free-text search query.", + "in": "query", + "name": "q", "required": true, "type": "string", - "x-example": "https://www.independent.ie/sport/golf/dream-start-for-defending-champion-michael-kim-at-open-de-france/a/162124102.html" + "x-example": "karaoke" + }, + { + "description": "Result page, 1-indexed. Defaults to 1.", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Sort order. Defaults to popularity.", + "enum": [ + "popularity", + "priceasc", + "pricedesc" + ], + "in": "query", + "name": "sort", + "type": "string" } ], "produces": [ @@ -403173,7 +477298,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/lazada.searchResponseDoc" } }, "400": { @@ -403182,8 +477307,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -403200,24 +477325,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Irish Independent article content", + "summary": "Search a Lazada country storefront's catalog by keyword", "tags": [ - "Irish Independent" + "Lazada" ] } }, - "/irishindependent/author": { + "/leboncoin/listing": { "get": { - "description": "Returns an Irish Independent author's name, biography, published email and social links, headshot, and their most recent articles (the first page of the profile's article list) from a canonical author URL.", - "operationId": "irishindependent-author", + "description": "Returns public metadata for one supplied Leboncoin ad URL. It excludes seller identity and contacts, precise location, payment, delivery, and account data.", + "operationId": "leboncoin-listing", "parameters": [ { - "description": "Canonical Irish Independent author URL", + "description": "Canonical public ad URL returned by leboncoin-search", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.independent.ie/authors/139084244-brian-keogh/" + "x-example": "https://www.leboncoin.fr/ad/ordinateurs/1946831025" } ], "produces": [ @@ -403227,7 +477352,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.irishindependentAuthorResponseDoc" + "$ref": "#/definitions/leboncoin.listingResponseDoc" } }, "400": { @@ -403242,6 +477367,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -403254,154 +477385,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Irish Independent author profile", + "summary": "Get a Leboncoin public listing", "tags": [ - "Irish Independent" + "Leboncoin" ] } }, - "/irishindependent/headlines": { + "/leboncoin/search": { "get": { - "description": "Returns fresh headlines from one public Irish Independent section feed. The section must be a slug returned by the sections endpoint.", - "operationId": "irishindependent-headlines", + "description": "Returns public listing cards from one Leboncoin location page. This endpoint excludes contacts, seller profiles, accounts, and transaction data.", + "operationId": "leboncoin-search", "parameters": [ { - "description": "Irish Independent section slug", - "enum": [ - "home", - "business", - "business-commercial-property", - "business-in-the-workplace", - "business-irish-business", - "business-jobs", - "business-money", - "business-small-business", - "business-technology", - "business-world", - "comment", - "comment-analysis", - "comment-editorial", - "comment-letters", - "comment-opinion", - "county", - "county-cork", - "county-cork-sport", - "county-dublin", - "county-galway", - "county-kerry", - "county-kerry-north-west-kerry-news", - "county-kerry-south-kerry-news", - "county-kerry-sport", - "county-kerry-tralee-news", - "county-louth", - "county-louth-drogheda-news", - "county-louth-dundalk-news", - "county-louth-sport", - "county-sligo", - "county-sligo-sport", - "county-wexford", - "county-wexford-enniscorthy-news", - "county-wexford-gorey-news", - "county-wexford-new-ross-news", - "county-wexford-sport", - "county-wexford-wexford-district", - "county-wicklow", - "county-wicklow-arklow-news", - "county-wicklow-bray-news", - "county-wicklow-sport", - "county-wicklow-west-wicklow-news", - "county-wicklow-wicklow-district", - "entertainment", - "entertainment-books", - "entertainment-celebrity", - "entertainment-movies", - "entertainment-music", - "entertainment-radio", - "entertainment-television", - "entertainment-theatre-arts", - "farming", - "irish-news", - "irish-news-courts", - "irish-news-crime", - "irish-news-education", - "irish-news-health", - "irish-news-politics", - "latest", - "lifestyle", - "lifestyle-family", - "lifestyle-family-learning", - "lifestyle-family-mothers-babies", - "lifestyle-family-parenting", - "lifestyle-fashion-beauty", - "lifestyle-food-drink", - "lifestyle-food-drink-food-reviews", - "lifestyle-food-drink-recipes", - "lifestyle-food-drink-wine", - "lifestyle-health-wellbeing", - "lifestyle-health-wellbeing-baby-loss", - "lifestyle-health-wellbeing-fitness", - "lifestyle-health-wellbeing-healthy-eating", - "lifestyle-health-wellbeing-mental-health", - "lifestyle-home-garden", - "lifestyle-home-garden-gardens", - "lifestyle-home-garden-homes", - "lifestyle-home-garden-interiors", - "lifestyle-home-garden-new-homes", - "lifestyle-motoring", - "lifestyle-motoring-car-news", - "lifestyle-motoring-car-reviews", - "lifestyle-motoring-car-talk", - "lifestyle-sex-relationships", - "lifestyle-travel", - "lifestyle-weddings", - "seachtain", - "sport", - "sport-gaa", - "sport-gaa-camogie", - "sport-gaa-gaelic-football", - "sport-gaa-hurling", - "sport-gaa-ladies-football", - "sport-gaa-u-20-gaelic-football", - "sport-gaa-u-20-hurling", - "sport-golf", - "sport-horse-racing", - "sport-other-sports", - "sport-other-sports-american-football", - "sport-other-sports-athletics", - "sport-other-sports-basketball", - "sport-other-sports-boxing", - "sport-other-sports-cricket", - "sport-other-sports-cycling", - "sport-other-sports-darts", - "sport-other-sports-hockey", - "sport-other-sports-motor-sport", - "sport-other-sports-rowing", - "sport-other-sports-snooker", - "sport-other-sports-swimming", - "sport-other-sports-tennis", - "sport-rugby", - "sport-rugby-champions-cup", - "sport-rugby-connacht-rugby", - "sport-rugby-leinster-rugby", - "sport-rugby-munster-rugby", - "sport-rugby-six-nations", - "sport-rugby-ulster-rugby", - "sport-rugby-united-rugby-championship", - "sport-soccer", - "sport-soccer-champions-league", - "sport-soccer-international-soccer", - "sport-soccer-league-of-ireland", - "sport-soccer-other-soccer", - "sport-soccer-premier-league", - "sport-womens-sport", - "subscriber-exclusives", - "world-news" - ], + "description": "Public Leboncoin location slug", "in": "query", - "name": "section", + "name": "location", "required": true, "type": "string", - "x-example": "home" + "x-example": "cp_paris_75016" } ], "produces": [ @@ -403411,7 +477412,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/leboncoin.searchResponseDoc" } }, "400": { @@ -403420,6 +477421,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -403432,16 +477439,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Irish Independent section headlines", + "summary": "Search Leboncoin public listings", "tags": [ - "Irish Independent" + "Leboncoin" ] } }, - "/irishindependent/news": { + "/letterboxd/film/{slug}": { "get": { - "description": "Returns fresh Irish Independent (independent.ie) top stories from the site's public RSS feed, with summary, author, publish time, and lead image when present. Some stories are premium (subscriber) content; open them with the article endpoint to see the paywalled flag.", - "operationId": "irishindependent-news", + "consumes": [ + "application/json" + ], + "description": "Returns a Letterboxd film: synopsis, director, cast, genres, countries, languages, runtime, and aggregate member rating.", + "operationId": "letterboxd-film", + "parameters": [ + { + "description": "Letterboxd film slug", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "parasite-2019" + } + ], "produces": [ "application/json" ], @@ -403449,7 +477469,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/letterboxd.filmResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -403464,50 +477502,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Irish Independent top stories", + "summary": "Get a Letterboxd film", "tags": [ - "Irish Independent" + "Letterboxd" ] } }, - "/irishindependent/sections": { + "/letterboxd/film/{slug}/rating-histogram": { "get": { - "description": "Returns every Irish Independent section slug accepted by the headlines endpoint (national, regional and county news, sport, business, comment, lifestyle and entertainment), with its display name and public RSS feed URL.", - "operationId": "irishindependent-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Irish Independent sections", - "tags": [ - "Irish Independent" - ] - } - }, - "/irishtimes/article": { - "get": { - "description": "Returns public Irish Times article metadata and body paragraphs from a canonical article URL. A subscriber-only (premium) article returns a permission error instead of its body; metered articles are returned in full.", - "operationId": "irishtimes-article", + "description": "Returns a film's full star-rating distribution (0.5 to 5.0 in half-star buckets) with counts and percentages.", + "operationId": "letterboxd-film-rating-histogram", "parameters": [ { - "description": "Canonical Irish Times article URL", - "in": "query", - "name": "url", + "description": "Letterboxd film slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "https://www.irishtimes.com/technology/2026/09/24/example-article-slug/" + "x-example": "parasite-2019" } ], "produces": [ @@ -403517,7 +477532,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/letterboxd.ratingHistogramResponseDoc" } }, "400": { @@ -403526,14 +477541,8 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -403550,24 +477559,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Irish Times article content", + "summary": "Get a Letterboxd film's rating distribution", "tags": [ - "Irish Times" + "Letterboxd" ] } }, - "/irishtimes/author": { + "/letterboxd/film/{slug}/reviews": { "get": { - "description": "Returns an Irish Times author's name, job title, biography, headshot, contact details, and recent articles from a canonical author URL.", - "operationId": "irishtimes-author", + "consumes": [ + "application/json" + ], + "description": "Returns popular reviews for a Letterboxd film by `slug`, up to `limit` (default 10, max 50). Each review has the username, display name, rating from 0.5 to 5.0 when the reviewer gave one, liked flag, date, text, spoiler flag, and like and comment counts.", + "operationId": "letterboxd-film-reviews", "parameters": [ { - "description": "Canonical Irish Times author URL", - "in": "query", - "name": "url", + "description": "Letterboxd film slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "https://www.irishtimes.com/author/jane-doe/" + "x-example": "parasite-2019" + }, + { + "description": "Max reviews, default 10, max 50", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -403577,7 +477595,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.irishtimesAuthorResponseDoc" + "$ref": "#/definitions/letterboxd.reviewsResponseDoc" } }, "400": { @@ -403586,8 +477604,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -403604,42 +477622,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Irish Times author profile", + "summary": "Get a Letterboxd film's popular reviews", "tags": [ - "Irish Times" + "Letterboxd" ] } }, - "/irishtimes/headlines": { + "/letterboxd/film/{slug}/similar": { "get": { - "description": "Returns current Irish Times headlines for one section. `section` is required and takes one of 16 slugs such as `ireland`, `politics`, `your-money`, `life-style`, `motors` or `abroad`; other values return 400. Some listed articles are subscriber-only, and `irishtimes-article` returns a permission error for those.", - "operationId": "irishtimes-headlines", + "consumes": [ + "application/json" + ], + "description": "Lists films Letterboxd recommends as similar to the film given by `slug`, up to `limit` (default 10, max 50). Each film has its `slug`, title and Letterboxd URL. Use the slug to look up that film's details.", + "operationId": "letterboxd-film-similar", "parameters": [ { - "description": "Irish Times section slug", - "enum": [ - "ireland", - "opinion", - "politics", - "business", - "your-money", - "world", - "sport", - "life-style", - "health", - "technology", - "culture", - "property", - "food", - "motors", - "history", - "abroad" - ], - "in": "query", - "name": "section", + "description": "Letterboxd film slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "ireland" + "x-example": "parasite-2019" + }, + { + "description": "Max films, default 10, max 50", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -403649,7 +477658,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/letterboxd.similarResponseDoc" } }, "400": { @@ -403658,6 +477667,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -403670,16 +477685,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Irish Times section headlines", + "summary": "Get films similar to a Letterboxd film", "tags": [ - "Irish Times" + "Letterboxd" ] } }, - "/irishtimes/news": { + "/letterboxd/member/{username}": { "get": { - "description": "Returns up to 100 current Irish Times top stories from its Irish news listing, with no parameters. Each item has its title, URL, summary, author, publication time and image where available.", - "operationId": "irishtimes-news", + "consumes": [ + "application/json" + ], + "description": "Returns a member's public profile stats (films watched, lists, following/followers). No private data — everything is visible to a logged-out visitor.", + "operationId": "letterboxd-member", + "parameters": [ + { + "description": "Letterboxd username", + "in": "path", + "name": "username", + "required": true, + "type": "string", + "x-example": "dave" + } + ], "produces": [ "application/json" ], @@ -403687,11 +477715,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/letterboxd.memberResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -403708,16 +477748,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get Irish Times top stories", + "summary": "Get a Letterboxd member's public profile stats", "tags": [ - "Irish Times" + "Letterboxd" ] } }, - "/irishtimes/sections": { + "/letterboxd/person/{slug}": { "get": { - "description": "Lists the 16 Irish Times sections accepted by `irishtimes-headlines`: `ireland`, `opinion`, `politics`, `business`, `your-money`, `world`, `sport`, `life-style`, `health`, `technology`, `culture`, `property`, `food`, `motors`, `history` and `abroad`. Each entry has a `slug`, `name` and `url`.", - "operationId": "irishtimes-sections", + "consumes": [ + "application/json" + ], + "description": "Returns a person's Letterboxd filmography by `slug`, ranked by popularity for one credit role. `role` is `actor` (default) or `director`, and `limit` defaults to 10 with a max of 50. The response has the person's name, role, and films with `slug`, title and Letterboxd URL.", + "operationId": "letterboxd-person", + "parameters": [ + { + "description": "Letterboxd person slug", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "bong-joon-ho" + }, + { + "description": "Credit role, default actor", + "enum": [ + "actor", + "director" + ], + "in": "query", + "name": "role", + "type": "string" + }, + { + "description": "Max films, default 10, max 50", + "in": "query", + "name": "limit", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -403725,7 +477794,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/letterboxd.personResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -403734,24 +477821,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get Irish Times sections", + "summary": "Get a Letterboxd person's filmography", "tags": [ - "Irish Times" + "Letterboxd" ] } }, - "/japantimes/article": { + "/letterboxd/popular": { "get": { - "description": "Returns public article metadata. If the page marks its body as blurred for anonymous visitors, paywalled is true and hidden subscriber text is omitted.", - "operationId": "japantimes-article", + "consumes": [ + "application/json" + ], + "description": "Returns a Letterboxd film chart ranked by popularity. Omit `period` for all-time, or set `day`, `week`, `month` or `year`. `genre` takes a genre slug, `decade` a value like `2010s`, and `limit` defaults to 10 with a max of 50. Each film has its `slug`, title and Letterboxd URL.", + "operationId": "letterboxd-popular", "parameters": [ { - "description": "Canonical HTTPS The Japan Times article URL", + "description": "Popularity window, omit for all-time", + "enum": [ + "day", + "week", + "month", + "year" + ], "in": "query", - "name": "url", - "required": true, + "name": "period", + "type": "string" + }, + { + "description": "Genre slug filter", + "in": "query", + "name": "genre", "type": "string", - "x-example": "https://www.japantimes.co.jp/news/2026/09/28/japan/explainer/etc-explainer/" + "x-example": "mystery" + }, + { + "description": "Decade filter, e.g. 2010s", + "in": "query", + "name": "decade", + "type": "string", + "x-example": "2010s" + }, + { + "description": "Max films, default 10, max 50", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -403761,7 +477875,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/letterboxd.popularResponseDoc" } }, "400": { @@ -403770,8 +477884,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -403788,24 +477902,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get a The Japan Times article", + "summary": "Get a Letterboxd popularity-ranked film chart", "tags": [ - "The Japan Times" + "Letterboxd" ] } }, - "/japantimes/author": { + "/letterboxd/search": { "get": { - "description": "Returns a The Japan Times author's name and the article cards linked from their profile page. `url` is required and must be a canonical HTTPS profile link in the form `/author///`. Each article has a title, URL, summary, author, image, `type` and publication time. Paginated `/page//` URLs are not followed.", - "operationId": "japantimes-author", + "consumes": [ + "application/json" + ], + "description": "Searches Letterboxd for films, people, lists and tags by `q`, required. `type` can be set to `film` to return films only; `limit` defaults to 10 with a max of 50. Fields vary by result type: films carry `slug` and `year`, people carry `slug` and `role`, lists carry `owner`, and tags carry only a title and URL.", + "operationId": "letterboxd-search", "parameters": [ { - "description": "Canonical HTTPS /author/// profile URL", + "description": "Search query", "in": "query", - "name": "url", + "name": "q", "required": true, "type": "string", - "x-example": "https://www.japantimes.co.jp/author/162/kanako-takahara/" + "x-example": "Parasite" + }, + { + "description": "Optional result type filter", + "enum": [ + "film" + ], + "in": "query", + "name": "type", + "type": "string" + }, + { + "description": "Max results, default 10, max 50", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -403815,7 +477947,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.japantimesAuthorResponseDoc" + "$ref": "#/definitions/letterboxd.searchResponseDoc" } }, "400": { @@ -403824,8 +477956,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -403842,86 +477974,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a The Japan Times author profile", + "summary": "Search Letterboxd", "tags": [ - "The Japan Times" + "Letterboxd" ] } }, - "/japantimes/headlines": { + "/linkedin/company/{id}": { "get": { - "description": "Returns public article cards from one canonical section page. This site's section pages are HTML; only the top stories surface has a verified RSS feed.", - "operationId": "japantimes-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns a LinkedIn company page by its company `id`. The response has the name, headline, about text, industry, company size, employee count on LinkedIn, follower count, founding year, headquarters, locations, specialties, website, logo, Products section cards, affiliated and similar pages, and recent updates with reactions and comment counts.", + "operationId": "linkedin-company", "parameters": [ { - "description": "Canonical section slug from japantimes-sections", - "enum": [ - "news-japan", - "news-japan-politics", - "news-japan-society", - "news-japan-crime-legal", - "news-japan-science-health", - "news-japan-explainer", - "news-japan-history", - "news-world", - "news-world-politics", - "news-world-crime-legal", - "news-world-science-health", - "news-world-society", - "news-asia-pacific", - "news-asia-pacific-politics", - "news-asia-pacific-crime-legal", - "news-asia-pacific-science-health", - "news-asia-pacific-society", - "business", - "business-companies", - "business-economy", - "business-markets", - "business-tech", - "sports", - "sports-sumo", - "sports-soccer", - "sports-baseball", - "sports-basketball", - "sports-tennis", - "sports-olympics", - "sports-more-sports", - "opinion", - "opinion-editorials", - "opinion-commentary", - "tag-geoeconomic-briefing", - "environment", - "environment-climate-change", - "environment-energy", - "environment-sustainability", - "environment-wildlife", - "environment-earth-science", - "life", - "life-travel", - "life-digital", - "life-food-drink", - "life-style-design", - "life-language", - "life-lifestyle", - "culture", - "culture-film", - "culture-books", - "culture-music", - "culture-art", - "culture-tv-streaming", - "culture-stage", - "culture-entertainment-news", - "community", - "community-voices", - "community-issues", - "community-how-tos", - "community-our-lives" - ], - "in": "query", - "name": "section", + "description": "LinkedIn Company ID", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "news-japan" + "x-example": "googledeepmind" } ], "produces": [ @@ -403931,17 +478004,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/linkedin.companyResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid company ID", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -403952,16 +478031,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Japan Times section headlines", + "summary": "Get LinkedIn Company info by ID", "tags": [ - "The Japan Times" + "LinkedIn" ] } }, - "/japantimes/news": { + "/linkedin/product/categories": { "get": { - "description": "Returns the current top stories from The Japan Times. It takes no parameters. Each item has its title, URL, publication time and a short publisher-written teaser in `summary`, not the article text, plus the author and image when the outlet provides them.", - "operationId": "japantimes-news", + "consumes": [ + "application/json" + ], + "description": "Returns the standardized product categories accepted by the products/search endpoint's category_id filter. With a keyword, returns matching categories from LinkedIn's own category search. Without one, returns every known category.", + "operationId": "linkedin-product-categories", + "parameters": [ + { + "description": "Narrow results to categories matching this term. Omit to return every known category.", + "in": "query", + "name": "keyword", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -403969,11 +478059,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/linkedin.productCategoriesResponseDoc" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "LinkedIn upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -403984,16 +478086,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Japan Times top stories", + "summary": "Discover LinkedIn product categories", "tags": [ - "The Japan Times" + "LinkedIn" ] } }, - "/japantimes/sections": { + "/linkedin/product/{id}": { "get": { - "description": "Lists the 60 sections linked from The Japan Times main navigation, which the headlines endpoint accepts, for example `news-japan`, `business-markets`, `sports-sumo`, `culture-film` and `community-voices`. Each entry has a `slug`, a display `name` and a section `url`.", - "operationId": "japantimes-sections", + "consumes": [ + "application/json" + ], + "description": "Returns a LinkedIn product page by its product `id`. The response has the name, about text, category, owning organization, external link, logo, cover image, media items, featured customers with industry and follower count, and lists of other and similar products.", + "operationId": "linkedin-product", + "parameters": [ + { + "description": "LinkedIn Product ID", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "microsoft-dynamics-microsoft-dynamics-365-business-central" + } + ], "produces": [ "application/json" ], @@ -404001,7 +478116,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/linkedin.productResponseDoc" + } + }, + "400": { + "description": "Invalid Params", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -404010,37 +478143,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Japan Times sections", + "summary": "Get LinkedIn Product info by ID", "tags": [ - "The Japan Times" + "LinkedIn" ] } }, - "/jcrew/categories": { + "/linkedin/products/search": { "get": { "consumes": [ "application/json" ], - "description": "Lists every category and subcategory from the storefront's own header navigation, flattened into department/section/category triples -- resolves the category-discovery gap jcrew-category's own category parameter otherwise leaves as \"find one from a storefront URL\". Each entry's category value is exactly what jcrew-category's own category parameter accepts. Filter to one department with department (e.g. women, men); omit for every department. Departments vary slightly by site (jcrew.com has an extra \"home\" department factory.jcrew.com doesn't) -- see the response's own departments field for the live list.", - "operationId": "jcrew-categories", + "description": "Returns one page of LinkedIn's public product directory search results, optionally scoped to a keyword and/or category. Keyword matching is on word prefixes. start is an upstream card offset advanced by the previous response's next_start; LinkedIn's guest search stops returning results at offset 1200.", + "operationId": "linkedin-products-search", "parameters": [ { - "default": "jcrew", - "description": "Storefront to list", - "enum": [ - "jcrew", - "factory" - ], + "description": "Search keyword, matched on word prefixes", "in": "query", - "name": "site", - "type": "string" + "name": "keyword", + "type": "string", + "x-example": "crm" }, { - "description": "Department to filter to, e.g. women, men, boys, girls, accessories, shoes, home (jcrew only) -- omit for every department", + "description": "Numeric category id from /linkedin/product/categories", "in": "query", - "name": "department", + "name": "category_id", "type": "string", - "x-example": "women" + "x-example": "1620" + }, + { + "default": 0, + "description": "Upstream card offset, 0 to 1199", + "in": "query", + "maximum": 1199, + "minimum": 0, + "name": "start", + "type": "integer" } ], "produces": [ @@ -404050,23 +478188,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jcrew.categoriesResponseDoc" + "$ref": "#/definitions/linkedin.productsSearchResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid Params", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "LinkedIn upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -404077,47 +478221,27 @@ "ApiKeyAuth": [] } ], - "summary": "List J.Crew or J.Crew Factory categories", + "summary": "Search the LinkedIn product directory", "tags": [ - "J.Crew" + "LinkedIn" ] } }, - "/jcrew/category": { + "/linkedin/showcase/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page (up to 60 products) of a category/browse listing for a category path. category is the slash-separated path segment after the storefront's own /plp/ (e.g. womens/categories/clothing/sweaters) -- use jcrew-categories to discover every valid value instead of guessing from storefront URLs. site selects the storefront (default jcrew). page selects the SFCC-native page (default 1); result_count reports the upstream's true total regardless of page size. A hub-level (non-leaf) category path returns a well-formed empty result rather than an error.", - "operationId": "jcrew-category", + "description": "Returns a LinkedIn showcase page by its showcase page `id`. The response has the name, headline, about text, industry, follower count, employees on LinkedIn, headquarters, locations, specialties, website, logo, Products section cards when present, affiliated and similar pages, and recent updates with reactions and comment counts.", + "operationId": "linkedin-showcase", "parameters": [ { - "description": "Slash-separated category path -- see jcrew-categories", - "in": "query", - "name": "category", + "description": "LinkedIn Showcase Page ID", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "womens/categories/clothing/sweaters" - }, - { - "default": "jcrew", - "description": "Storefront to browse", - "enum": [ - "jcrew", - "factory" - ], - "in": "query", - "name": "site", - "type": "string" - }, - { - "default": 1, - "description": "One-based page", - "in": "query", - "maximum": 50, - "minimum": 1, - "name": "page", - "type": "integer" + "x-example": "think-with-google" } ], "produces": [ @@ -404127,29 +478251,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jcrew.categoryResponseDoc" + "$ref": "#/definitions/linkedin.showcaseResponseDoc" } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Invalid Params", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -404160,38 +478278,24 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a J.Crew or J.Crew Factory category", + "summary": "Get Linkedin Showcase Page Info", "tags": [ - "J.Crew" + "LinkedIn" ] } }, - "/jcrew/product": { + "/livemint/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns full product detail for one style: name, brand, description, category, list price, aggregate rating, every purchasable color, and every color+size combination as a separate priced/stocked SKU. pid is a style id (e.g. CX415), as returned by jcrew-search's products[].id field. site must match the storefront the pid belongs to (default jcrew). A single call covers every color and size of the style -- no per-color lookup needed.", - "operationId": "jcrew-product", + "description": "Returns public Mint article metadata and body paragraphs from a canonical article URL. A story Mint marks \"Mint Premium\" returns a permission error instead of a body.", + "operationId": "livemint-article", "parameters": [ { - "description": "Style id, from a search result's id field", + "description": "Canonical Mint article URL", "in": "query", - "name": "pid", + "name": "url", "required": true, "type": "string", - "x-example": "CX415" - }, - { - "default": "jcrew", - "description": "Storefront the pid belongs to", - "enum": [ - "jcrew", - "factory" - ], - "in": "query", - "name": "site", - "type": "string" + "x-example": "https://www.livemint.com/companies/news/example-article-slug-11790258702207.html" } ], "produces": [ @@ -404201,7 +478305,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jcrew.productResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -404210,14 +478314,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Forbidden", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -404234,47 +478338,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a J.Crew or J.Crew Factory product", + "summary": "Get Mint article content", "tags": [ - "J.Crew" + "Mint" ] } }, - "/jcrew/product/reviews": { + "/livemint/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of a product's customer reviews (author, location, date, rating, headline, body, and verified-purchase flag), plus the product's overall rating summary (average rating, rating count, per-star histogram, and recommended ratio). pid is a style id (e.g. CX415), as returned by jcrew-search's products[].id field. site must match the storefront the pid belongs to (default jcrew). A product with no reviews yet, or a well-formed but unrecognized pid, returns a well-formed empty result, not an error.", - "operationId": "jcrew-product-reviews", + "description": "Returns a Mint author profile from a required `url` in the form `https://www.livemint.com/authors/`. The response has `name`, `job_title`, `biography`, `image_url` and Twitter, Facebook, LinkedIn and Instagram links, each present only when the profile carries it. It does not list the author's articles.", + "operationId": "livemint-author", "parameters": [ { - "description": "Style id, from a search result's id field", + "description": "Canonical Mint author URL", "in": "query", - "name": "pid", + "name": "url", "required": true, "type": "string", - "x-example": "CX415" - }, - { - "default": "jcrew", - "description": "Storefront the pid belongs to", - "enum": [ - "jcrew", - "factory" - ], - "in": "query", - "name": "site", - "type": "string" - }, - { - "default": 1, - "description": "One-based page, 10 reviews per page", - "in": "query", - "maximum": 1000, - "minimum": 1, - "name": "page", - "type": "integer" + "x-example": "https://www.livemint.com/authors/sheetal-goel" } ], "produces": [ @@ -404284,7 +478365,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jcrew.productReviewsResponseDoc" + "$ref": "#/definitions/publicnews.livemintAuthorResponseDoc" } }, "400": { @@ -404293,8 +478374,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -404311,75 +478392,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get reviews for a J.Crew or J.Crew Factory product", + "summary": "Get a Mint author profile", "tags": [ - "J.Crew" + "Mint" ] } }, - "/jcrew/search": { + "/livemint/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches the product catalog for either storefront (select with site, default jcrew). Returns product summaries with USD pricing, gender, and a description, plus the search index's own facets (gender, fabric, category, size, color, price range, and others) with live per-option counts. sort selects relevance (default), price_asc, or price_desc. filter narrows results by one or more facet name:value pairs (comma-separated, e.g. productGender:Men,styleFabric:Cashmere) taken from a prior response's own facets[].name/facets[].options[].value fields -- not curated against a fixed list, since the facet set is large and can change. This is best-effort relevance, not a guaranteed keyword match: for an obscure alphanumeric keyword the search index falls back to its own semantically-related results instead of an empty list, and there is no reliable field in the response to distinguish a true keyword match from that fallback.", - "operationId": "jcrew-search", + "description": "Returns recent Mint headlines for one section. `section` is required and takes one of 15 slugs, including `companies`, `markets`, `money`, `ai` and `videos`. Each item has a title and URL, and may include summary, author, publication time and image.", + "operationId": "livemint-headlines", "parameters": [ { - "description": "Search keyword", - "in": "query", - "name": "keyword", - "required": true, - "type": "string", - "x-example": "sweater" - }, - { - "default": "jcrew", - "description": "Storefront to search", - "enum": [ - "jcrew", - "factory" - ], - "in": "query", - "name": "site", - "type": "string" - }, - { - "default": 1, - "description": "One-based page", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "page", - "type": "integer" - }, - { - "default": 24, - "description": "Results per page", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "per_page", - "type": "integer" - }, - { - "default": "relevance", - "description": "Sort order", + "description": "Mint section slug", "enum": [ - "relevance", - "price_asc", - "price_desc" + "companies", + "opinion", + "money", + "politics", + "science", + "industry", + "education", + "sports", + "technology", + "markets", + "ai", + "insurance", + "budget", + "elections", + "videos" ], "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Comma-separated facet name:value pairs, e.g. productGender:Men,styleFabric:Cashmere", - "in": "query", - "name": "filter", + "name": "section", + "required": true, "type": "string", - "x-example": "productGender:Men" + "x-example": "companies" } ], "produces": [ @@ -404389,7 +478436,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jcrew.searchResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -404398,6 +478445,38 @@ "$ref": "#/definitions/app.Response" } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Mint section headlines", + "tags": [ + "Mint" + ] + } + }, + "/livemint/news": { + "get": { + "description": "Returns the current Mint (livemint.com) top stories, with no parameters. Each item has a title and URL, and may include summary, author, publication time and image. For one topic area, use `livemint-headlines` with a `section`.", + "operationId": "livemint-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -404416,38 +478495,50 @@ "ApiKeyAuth": [] } ], - "summary": "Search J.Crew or J.Crew Factory products", + "summary": "Get Mint top stories", "tags": [ - "J.Crew" + "Mint" ] } }, - "/jcrew/size-chart": { + "/livemint/sections": { "get": { - "consumes": [ + "description": "Lists the 15 Mint section slugs accepted by `livemint-headlines`, such as `companies`, `markets`, `money`, `budget` and `videos`. Each entry has its `slug`, display `name` and page `url`.", + "operationId": "livemint-sections", + "produces": [ "application/json" ], - "description": "Returns real body measurements per size (chest, waist, hip, sleeve, length, or a subset depending on the style/category), in both inches and centimeters. pid is a style id, as returned by jcrew-search's products[].id field. site must match the storefront the pid belongs to (default jcrew). A measurement value of 0 means that column doesn't apply to this style (e.g. hip on a top) -- the upstream itself doesn't distinguish that from a genuine zero, so this endpoint passes it through as-is.", - "operationId": "jcrew-size-chart", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Mint sections", + "tags": [ + "Mint" + ] + } + }, + "/liverpoolecho/article": { + "get": { + "description": "Returns public Liverpool Echo article metadata (including the section) and body paragraphs from a canonical article URL. Photo-gallery URLs are rejected.", + "operationId": "liverpoolecho-article", "parameters": [ { - "description": "Style id, from a search result's id field", + "description": "Canonical Liverpool Echo article URL", "in": "query", - "name": "pid", + "name": "url", "required": true, "type": "string", - "x-example": "CX415" - }, - { - "default": "jcrew", - "description": "Storefront the pid belongs to", - "enum": [ - "jcrew", - "factory" - ], - "in": "query", - "name": "site", - "type": "string" + "x-example": "https://www.liverpoolecho.co.uk/news/liverpool-news/oxton-mans-vile-campaign-harassment-34666610" } ], "produces": [ @@ -404457,7 +478548,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jcrew.sizeChartResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -404490,44 +478581,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get the size chart for a J.Crew or J.Crew Factory product", + "summary": "Get Liverpool Echo article content", "tags": [ - "J.Crew" + "Liverpool Echo" ] } }, - "/jcrew/stores": { + "/liverpoolecho/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one storefront's full open-store directory (address, phone, coordinates, services, weekly hours). site selects the storefront and accepts jcrew or factory; defaults to jcrew. Give lat and lng together to sort by distance from that point (each store's distance_miles is then populated); omit both for the upstream's own order.", - "operationId": "jcrew-stores", + "description": "Returns one Liverpool Echo author's public profile: name, job title, bio, email, X/Twitter handle, and one page of their recent articles.", + "operationId": "liverpoolecho-author", "parameters": [ { - "default": "jcrew", - "description": "Storefront whose stores to return", - "enum": [ - "jcrew", - "factory" - ], + "description": "Author slug, e.g. wesley-holmes", "in": "query", - "name": "site", - "type": "string" + "name": "slug", + "type": "string", + "x-example": "wesley-holmes" }, { - "description": "Latitude to sort distance from (must be given together with lng)", + "description": "Canonical liverpoolecho.co.uk/authors// URL; alternative to slug", "in": "query", - "name": "lat", - "type": "number", - "x-example": 40.7128 + "name": "url", + "type": "string", + "x-example": "https://www.liverpoolecho.co.uk/authors/wesley-holmes/" }, { - "description": "Longitude to sort distance from (must be given together with lat)", + "default": 1, + "description": "1-based page number of the author's article list (1 to 100); overrides any pageNumber in url", "in": "query", - "name": "lng", - "type": "number", - "x-example": -74.006 + "name": "page", + "type": "integer" } ], "produces": [ @@ -404537,7 +478621,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jcrew.storesResponseDoc" + "$ref": "#/definitions/publicnews.reachAuthorResponseDoc" } }, "400": { @@ -404546,6 +478630,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -404564,38 +478654,54 @@ "ApiKeyAuth": [] } ], - "summary": "Find J.Crew or J.Crew Factory store locations", + "summary": "Get a Liverpool Echo author profile", "tags": [ - "J.Crew" + "Liverpool Echo" ] } }, - "/jcrew/suggest": { + "/liverpoolecho/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the storefront's own search-box suggestions (typeahead) for a partial query -- a flat list of suggested search phrases, each with its own live total result count on the search index. Select the storefront with site (default jcrew). Not product data.", - "operationId": "jcrew-suggest", + "description": "Returns fresh headlines from one public Liverpool Echo section. Photo galleries are omitted because they have no readable article body.", + "operationId": "liverpoolecho-headlines", "parameters": [ { - "description": "Partial search query", - "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "dress" - }, - { - "default": "jcrew", - "description": "Storefront to search", + "description": "Liverpool Echo section slug", "enum": [ - "jcrew", - "factory" + "news", + "news/liverpool-news", + "news/uk-world-news", + "news/showbiz-news", + "news/tv", + "news/nostalgia", + "news/property", + "news/motoring", + "news/cost-of-living", + "news/health", + "sport", + "sport/football", + "sport/football/football-news", + "sport/football/transfer-news", + "sport/boxing", + "sport/other-sport", + "sport/other-sport/horse-racing", + "sport/sport-opinion", + "whats-on", + "whats-on/whats-on-news", + "whats-on/family-kids-news", + "whats-on/food-drink-news", + "whats-on/music-nightlife-news", + "whats-on/shopping", + "whats-on/theatre-news", + "travel", + "special-features", + "in-your-area" ], "in": "query", - "name": "site", - "type": "string" + "name": "section", + "required": true, + "type": "string", + "x-example": "news" } ], "produces": [ @@ -404605,7 +478711,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jcrew.suggestResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -404632,26 +478738,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get J.Crew or J.Crew Factory search-box suggestions", + "summary": "Get Liverpool Echo section headlines", "tags": [ - "J.Crew" + "Liverpool Echo" ] } }, - "/jerusalempost/article": { + "/liverpoolecho/news": { "get": { - "description": "Returns public Jerusalem Post article metadata and free body paragraphs. If isAccessibleForFree is false, paywalled is true and body paragraphs are omitted; paid article text is not represented by feed snippets.", - "operationId": "jerusalempost-article", - "parameters": [ - { - "description": "Canonical Jerusalem Post article URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.jpost.com/middle-east/article-909945" - } - ], + "description": "Returns fresh Liverpool Echo top stories from the public home RSS feed. Photo galleries are omitted because they have no readable article body.", + "operationId": "liverpoolecho-news", "produces": [ "application/json" ], @@ -404659,17 +478755,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -404686,24 +478776,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get Jerusalem Post article content", + "summary": "Get Liverpool Echo top stories", "tags": [ - "Jerusalem Post" + "Liverpool Echo" ] } }, - "/jerusalempost/author": { + "/liverpoolecho/sections": { "get": { - "description": "Returns a Jerusalem Post author or blogger profile by `url`, a canonical `/author/` or `/blogger/` link. The response has the profile `type`, name, `description`, `image_url` and article cards with title, URL, summary and publication time.", - "operationId": "jerusalempost-author", + "description": "Lists the Liverpool Echo sections accepted by `liverpoolecho-headlines`, such as `news/liverpool-news`, `sport/football/transfer-news`, `whats-on/theatre-news` and `in-your-area`. Each entry has a `slug`, display `name` and feed `url`. Each listed section had at least one current entry when last checked, and feeds hold up to about 25 entries.", + "operationId": "liverpoolecho-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Liverpool Echo sections", + "tags": [ + "Liverpool Echo" + ] + } + }, + "/livescience/article": { + "get": { + "description": "Returns a Live Science article by `url`, a canonical HTTPS `livescience.com` article link. The response has the title, description, section, authors, lead image, publish and update times, body `paragraphs` and a `paywalled` flag.", + "operationId": "livescience-article", "parameters": [ { - "description": "Canonical Jerusalem Post /author/ or /blogger/ profile URL", + "description": "Canonical Live Science article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.jpost.com/author/cameron-s-brown" + "x-example": "https://www.livescience.com/space/comets/example-comet-story" } ], "produces": [ @@ -404713,7 +478829,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.jerusalemPostAuthorResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -404740,16 +478856,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get Jerusalem Post author profile", + "summary": "Get Live Science article content", "tags": [ - "Jerusalem Post" + "Live Science" ] } }, - "/jerusalempost/authors": { + "/livescience/author": { "get": { - "description": "Returns the current author and blogger profile URLs discovered from the site's public Experts sitemap. This dynamic roster is intentionally exposed as a discovery endpoint.", - "operationId": "jerusalempost-authors", + "description": "Returns one Live Science author's public profile: name, job title, biography, social links, and one page of their recent articles.", + "operationId": "livescience-author", + "parameters": [ + { + "description": "Author slug, e.g. ben-turner", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "ben-turner" + }, + { + "description": "Canonical livescience.com/author/ URL, optionally with a /page/ segment; alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.livescience.com/author/ben-turner" + }, + { + "default": 1, + "description": "1-based page number of the author's article list; overrides any page number embedded in url", + "in": "query", + "name": "page", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -404757,7 +478896,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.jerusalemPostAuthorsResponseDoc" + "$ref": "#/definitions/publicnews.livescienceAuthorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -404772,66 +478923,40 @@ "ApiKeyAuth": [] } ], - "summary": "List Jerusalem Post author profiles", + "summary": "Get a Live Science author profile", "tags": [ - "Jerusalem Post" + "Live Science" ] } }, - "/jerusalempost/headlines": { + "/livescience/headlines": { "get": { - "description": "Returns current Jerusalem Post stories for one section. `section` is required and takes one of 40 slugs such as `israel-news`, `iran-news`, `middle-east`, `tech-and-startups` or `torah-portion`. Each item has its title, URL, author, publication time and image, plus a summary except on premium items, which have none.", - "operationId": "jerusalempost-headlines", + "description": "Returns current Live Science headlines for one section. `section` is required and takes one of 14 slugs: `animals`, `archaeology`, `chemistry`, `features`, `health`, `human-behavior`, `interviews`, `news`, `opinion`, `physics-mathematics`, `planet-earth`, `products`, `space` or `technology`. Each item has a title and URL, plus author, publication time and image when the section page shows them.", + "operationId": "livescience-headlines", "parameters": [ { - "description": "Jerusalem Post section slug", + "description": "Live Science section slug", "enum": [ - "aliyah", - "american-politics", - "arab-israeli-conflict", + "animals", "archaeology", - "bds-movement", - "all-news", - "banking-and-finance", - "business-and-innovation", - "business-opinion", - "christian-world", - "consumerism", - "culture", - "defense-and-tech", - "diaspora", - "environment", - "food-and-recipes", - "health-and-wellness", - "health-around-the-world", - "history", - "home", - "iran-news", - "israel-election-2026", - "israel-news", - "israel-politics", - "israeli-sports", - "j-spot", - "jewish-holidays", - "judaism", - "kabbalah", - "middle-east", - "must", - "nutrition", - "omg", + "chemistry", + "features", + "health", + "human-behavior", + "interviews", + "news", "opinion", - "science", - "tech-and-startups", - "terrorism", - "torah-portion", - "ukraine-russia-war", - "world-news" + "physics-mathematics", + "planet-earth", + "products", + "space", + "technology" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "aliyah" + "x-example": "animals" } ], "produces": [ @@ -404862,16 +478987,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Jerusalem Post section headlines", + "summary": "Get Live Science section headlines", "tags": [ - "Jerusalem Post" + "Live Science" ] } }, - "/jerusalempost/news": { + "/livescience/news": { "get": { - "description": "Returns recent Jerusalem Post front-page stories, with no parameters. Each item has its title, URL, author, publication time and image where available. Premium items keep their title and metadata but have no summary. Use `jerusalempost-article` to read an article and check its paywall flag.", - "operationId": "jerusalempost-news", + "description": "Returns Live Science's current top stories across the site, with no parameters. Each item has its title, URL, summary, author, publication time and image where available. Use `livescience-headlines` to narrow to one section.", + "operationId": "livescience-news", "produces": [ "application/json" ], @@ -404882,6 +479007,12 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -404894,16 +479025,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Jerusalem Post top stories", + "summary": "Get Live Science top stories", "tags": [ - "Jerusalem Post" + "Live Science" ] } }, - "/jerusalempost/sections": { + "/livescience/sections": { "get": { - "description": "Lists the 40 English-language editorial sections accepted by `jerusalempost-headlines`, such as `world-news`, `israel-politics`, `archaeology` and `jewish-holidays`. Each entry has a `slug`, display `name` and section `url`. Takes no parameters.", - "operationId": "jerusalempost-sections", + "description": "Lists the 14 top-level Live Science sections accepted by `livescience-headlines`, including `animals`, `archaeology`, `human-behavior`, `physics-mathematics`, `planet-earth` and `space`. Each entry has a `slug`, display `name` and section `url`.", + "operationId": "livescience-sections", "produces": [ "application/json" ], @@ -404920,27 +479051,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Jerusalem Post section inventory", + "summary": "Get Live Science sections", "tags": [ - "Jerusalem Post" + "Live Science" ] } }, - "/jimmy-johns/menu": { + "/livescore/competition": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Jimmy John's restaurant's full menu as a category tree: every category and its products, with name, description, calorie range, base cost and image. restaurant_id comes from GET /jimmy-johns/nearby. Many sandwiches price entirely through a size selection rather than a base cost, so cost is commonly 0 for those items -- see GET /jimmy-johns/modifiers for the real per-size price.", - "operationId": "jimmy-johns-menu", + "description": "Returns public competition or stage page data and its visible sections. Competition ids and tabs vary by sport; discover English sitemap-listed paths, including cricket stage pages, with /livescore/competitions.", + "operationId": "livescore-competition", "parameters": [ { - "description": "Olo restaurant id from /jimmy-johns/nearby", + "description": "Three to five lowercase path segments following /en/, such as football/england/premier-league or football/england/premier-league/standings", "in": "query", - "name": "restaurant_id", + "name": "path", "required": true, - "type": "integer", - "x-example": 67182 + "type": "string", + "x-example": "football/england/premier-league" } ], "produces": [ @@ -404950,7 +479081,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jimmyjohns.menuResponseDoc" + "$ref": "#/definitions/livescore.responseDoc" } }, "400": { @@ -404965,12 +479096,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -404983,29 +479108,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Jimmy John's restaurant's full menu", + "summary": "LiveScore competition page and section data", "tags": [ - "JimmyJohns" + "LiveScore" ] } }, - "/jimmy-johns/modifiers": { + "/livescore/competitions": { "get": { "consumes": [ "application/json" ], - "description": "Returns one menu product's full customization tree: size, bread, and per-ingredient choices (extra/regular/light/none), each with its real price and calorie delta. Groups nest -- picking a size choice can reveal a bread group, which can reveal one group per ingredient -- so a size step, a bread step, and every \"Customize Sandwich\" ingredient all live in one recursive tree. product_id comes from GET /jimmy-johns/menu.", - "operationId": "jimmy-johns-modifiers", - "parameters": [ - { - "description": "Product id from a /jimmy-johns/menu product", - "in": "query", - "name": "product_id", - "required": true, - "type": "integer", - "x-example": 33276056 - } - ], + "description": "Returns English competition pages listed in LiveScore's public competition sitemaps plus competition-shaped pages listed in the English cricket sport sitemap. The sitemap index has dedicated competition sitemaps for soccer, hockey, basketball, and tennis; cricket discovery remains partial and dynamic.", + "operationId": "livescore-competitions", "produces": [ "application/json" ], @@ -405013,25 +479128,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jimmyjohns.modifiersResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/livescore.responseDoc" } }, "503": { @@ -405046,49 +479143,65 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Jimmy John's menu product's customization options", + "summary": "LiveScore competition page directory", "tags": [ - "JimmyJohns" + "LiveScore" ] } }, - "/jimmy-johns/nearby": { + "/livescore/live-scores": { "get": { "consumes": [ "application/json" ], - "description": "Returns Jimmy John's restaurants within a radius of a coordinate, nearest first, using Jimmy John's own Olo-backed ordering API (a separate host from the locator this family's sitemap and store endpoints read). Each result carries restaurant_id -- pass it to GET /jimmy-johns/menu for that restaurant's full menu. The upstream's own radius parameter does not narrow its result set, so distance filtering and sorting happen here.", - "operationId": "jimmy-johns-nearby", + "description": "Returns current live sections for a supported sport. Empty Sctns is a valid result when there are no live events. Use Nav and the final section Id for cursor paging.", + "operationId": "livescore-live-scores", "parameters": [ { - "description": "Search center latitude", + "description": "LiveScore sport id", + "enum": [ + "soccer", + "hockey", + "basketball", + "tennis", + "cricket" + ], "in": "query", - "name": "latitude", + "name": "sport", "required": true, - "type": "number", - "x-example": 39.9612 + "type": "string", + "x-example": "soccer" }, { - "description": "Search center longitude", + "description": "UTC offset in hours from -12 through 14; defaults to 0", "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -82.9988 + "maximum": 14, + "minimum": -12, + "name": "timezone_offset", + "type": "integer" }, { - "description": "Search radius in miles, 1-100 (default 15)", + "description": "Request a paged live feed; defaults to false", "in": "query", - "name": "radius", - "type": "integer", - "x-example": 15 + "name": "paging", + "type": "boolean" }, { - "description": "Maximum restaurants to return, 1-50 (default 10)", + "description": "Section Id from the prior paged response, e.g. s-26031", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "cursor", + "type": "string", + "x-example": "s-26031" + }, + { + "description": "Page direction in paged mode", + "enum": [ + "down", + "up" + ], + "in": "query", + "name": "direction", + "type": "string" } ], "produces": [ @@ -405098,7 +479211,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jimmyjohns.nearbyResponseDoc" + "$ref": "#/definitions/livescore.responseDoc" } }, "400": { @@ -405107,8 +479220,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -405125,52 +479238,27 @@ "ApiKeyAuth": [] } ], - "summary": "Find Jimmy John's restaurants near a coordinate", + "summary": "LiveScore live scores by sport", "tags": [ - "JimmyJohns" + "LiveScore" ] } }, - "/jimmy-johns/sitemap": { + "/livescore/match": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of Jimmy John's sitemap-declared store index -- 9,700+ URLs at time of writing. Jimmy John's publishes three page variants per store (sandwiches, delivery, catering) and all three appear in the sitemap, so each entry carries a kind and the store number they share; filter with the kind parameter to enumerate one variant per restaurant. `sandwiches` is the canonical variant. A page past the end returns an empty list rather than an error, so a caller can walk to exhaustion.", - "operationId": "jimmy-johns-sitemap", + "description": "Returns the event data embedded in a public LiveScore match page. Data uses LiveScore's event payload shape; available fields vary by event and stage.", + "operationId": "livescore-match", "parameters": [ { - "description": "Sitemap shard index (default 0)", - "in": "query", - "name": "shard", - "type": "integer", - "x-example": 0 - }, - { - "description": "1-based page within the shard (default 1)", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Entries per page, 1-500 (default 100)", - "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 100 - }, - { - "description": "Filter by page variant. One of sandwiches, delivery, catering. Default all.", - "enum": [ - "sandwiches", - "delivery", - "catering" - ], + "description": "Five path segments following /en/ in a LiveScore match URL", "in": "query", - "name": "kind", + "name": "path", + "required": true, "type": "string", - "x-example": "sandwiches" + "x-example": "football/uefa-nations-league/league-b-group-3/austria-vs-israel/1738267" } ], "produces": [ @@ -405180,7 +479268,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jimmyjohns.sitemapResponseDoc" + "$ref": "#/definitions/livescore.responseDoc" } }, "400": { @@ -405195,12 +479283,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -405213,27 +479295,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Jimmy John's store-URL index", + "summary": "LiveScore match details", "tags": [ - "JimmyJohns" + "LiveScore" ] } }, - "/jimmy-johns/store": { + "/livescore/match-stats": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Jimmy John's store: name, postal address, phone, coordinates, cuisine description and the published week of opening hours. Store paths come from GET /jimmy-johns/sitemap. Note Jimmy John's main site is behind a bot challenge that serves a page with HTTP 200, so this family reads the separate locator subdomain instead. For menu data, see GET /jimmy-johns/nearby and GET /jimmy-johns/menu, which read a separate ordering API.", - "operationId": "jimmy-johns-store", + "description": "Returns the statistics section for a LiveScore match when the source exposes it.", + "operationId": "livescore-match-stats", "parameters": [ { - "description": "Store path from a /jimmy-johns/sitemap entry", + "description": "Five-segment path after /en/ from a LiveScore match URL", "in": "query", "name": "path", "required": true, "type": "string", - "x-example": "in/columbus/sandwiches-1414.html" + "x-example": "football/uefa-nations-league/league-b-group-3/austria-vs-israel/1738267" } ], "produces": [ @@ -405243,7 +479325,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jimmyjohns.storeResponseDoc" + "$ref": "#/definitions/livescore.responseDoc" } }, "400": { @@ -405258,12 +479340,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -405276,33 +479352,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Jimmy John's store's detail", + "summary": "LiveScore match statistics", "tags": [ - "JimmyJohns" + "LiveScore" ] } }, - "/jobs/ashby/board": { + "/livescore/news": { "get": { "consumes": [ "application/json" ], - "description": "Lists an organization's public Ashby board postings with inline detail (description, compensation when include_compensation=true). The org is the Ashby slug from its careers URL. An unknown org returns an empty board (Ashby does not 404).", - "operationId": "jobs-ashby-board", + "description": "Returns the article cards for one LiveScore news route. `category` is required: `all` for the home feed, or a lowercase route path of up to six segments, such as `football/premier-league`, found via `livescore-news-categories`. The response carries `source_url` and the page `data`. Some articles link to third-party publishers, article bodies are not returned, and unknown paths return not found or an upstream error.", + "operationId": "livescore-news", "parameters": [ { - "description": "Ashby org slug (careers URL)", + "description": "all or a lowercase path from /livescore/news-categories; up to six segments", "in": "query", - "name": "org", + "name": "category", "required": true, "type": "string", - "x-example": "openai" - }, - { - "description": "Include compensation summary", - "in": "query", - "name": "include_compensation", - "type": "boolean" + "x-example": "football/premier-league" } ], "produces": [ @@ -405312,7 +479382,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/livescore.responseDoc" } }, "400": { @@ -405321,6 +479391,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -405333,27 +479409,27 @@ "ApiKeyAuth": [] } ], - "summary": "List an organization's Ashby job board", + "summary": "LiveScore news by category or topic", "tags": [ - "Jobs" + "LiveScore" ] } }, - "/jobs/company-search": { + "/livescore/news-article": { "get": { "consumes": [ "application/json" ], - "description": "Probes Greenhouse, Lever, Ashby, SmartRecruiters, Workable, Recruitee, Rippling, Teamtailor, and Pinpoint in parallel for a slug and reports the providers where it resolves to a non-empty board (with the open-role count and board URL). Workday is excluded (its board needs tenant + datacenter + site).", - "operationId": "jobs-company-search", + "description": "Returns the public full article record, including the article's structured content when supplied by LiveScore. Copy the path following /en/news/ from an article slug in /livescore/news.", + "operationId": "livescore-news-article", "parameters": [ { - "description": "Company careers slug to probe", + "description": "Two to eight lowercase path segments after /en/news/, copied from an article slug", "in": "query", - "name": "slug", + "name": "path", "required": true, "type": "string", - "x-example": "stripe" + "x-example": "football/man-city-guilty-of-114-charges-what-happens-next-man-city-square" } ], "produces": [ @@ -405363,7 +479439,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.searchResponseDoc" + "$ref": "#/definitions/livescore.responseDoc" } }, "400": { @@ -405372,6 +479448,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -405384,59 +479466,61 @@ "ApiKeyAuth": [] } ], - "summary": "Find which ATS a company uses by slug", + "summary": "LiveScore news article", "tags": [ - "Jobs" + "LiveScore" ] } }, - "/jobs/eightfold/board": { + "/livescore/news-categories": { "get": { "consumes": [ "application/json" ], - "description": "Lists a company's public Eightfold AI job board, paged via limit/offset. tenant is the {tenant}.eightfold.ai subdomain from the careers URL; domain is the hiring organization's own domain (e.g. microsoft.com), also visible on the tenant's careers page.", - "operationId": "jobs-eightfold-board", - "parameters": [ - { - "description": "Eightfold tenant subdomain (careers URL)", - "in": "query", - "name": "tenant", - "required": true, - "type": "string", - "x-example": "microsoft" - }, - { - "description": "Hiring organization domain", - "in": "query", - "name": "domain", - "required": true, - "type": "string", - "x-example": "microsoft.com" - }, - { - "description": "Free-text search", - "in": "query", - "name": "query", - "type": "string" - }, - { - "description": "Filter: location contains", - "in": "query", - "name": "location", - "type": "string" + "description": "Returns all current public news routes from LiveScore's own category sitemap files, including sports, competitions, tips, daily team feeds, and teams. The values update with the source sitemap.", + "operationId": "livescore-news-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/livescore.newsCategoriesResponseDoc" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Page size, default 10, max 10 (upstream caps results per page regardless of a larger value)", - "in": "query", - "name": "limit", - "type": "integer" - }, + "ApiKeyAuth": [] + } + ], + "summary": "LiveScore news categories", + "tags": [ + "LiveScore" + ] + } + }, + "/livescore/news-feed": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns latest public news items from LiveScore's global RSS feed. The source feed may include multiple sports and has no verified category filter. Set include_content=true to include each RSS item's full content:encoded body.", + "operationId": "livescore-news-feed", + "parameters": [ { - "description": "Page offset, default 0", + "default": false, + "description": "Include full RSS article content when available", "in": "query", - "name": "offset", - "type": "integer" + "name": "include_content", + "type": "boolean" } ], "produces": [ @@ -405446,11 +479530,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/livescore.livescoreNewsFeedResponseDoc" } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -405467,45 +479551,19 @@ "ApiKeyAuth": [] } ], - "summary": "List an Eightfold tenant's job board", + "summary": "LiveScore global RSS news feed", "tags": [ - "Jobs" + "LiveScore" ] } }, - "/jobs/eightfold/job": { + "/livescore/news-publishers": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single Eightfold position with its full HTML/text description. id is the position id from a board listing; tenant/domain as in the board endpoint.", - "operationId": "jobs-eightfold-job", - "parameters": [ - { - "description": "Eightfold tenant subdomain", - "in": "query", - "name": "tenant", - "required": true, - "type": "string", - "x-example": "microsoft" - }, - { - "description": "Hiring organization domain", - "in": "query", - "name": "domain", - "required": true, - "type": "string", - "x-example": "microsoft.com" - }, - { - "description": "Eightfold position id from a board listing", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "1970393556928891" - } - ], + "description": "Returns the current public publisher directory linked from LiveScore News, including publisher names, logos, websites, contact links, and telephone numbers.", + "operationId": "livescore-news-publishers", "produces": [ "application/json" ], @@ -405513,13 +479571,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.jobResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/livescore.livescoreNewsPublishersResponseDoc" } }, "404": { @@ -405540,27 +479592,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single Eightfold position", + "summary": "LiveScore news publisher directory", "tags": [ - "Jobs" + "LiveScore" ] } }, - "/jobs/gem/board": { + "/livescore/player": { "get": { "consumes": [ "application/json" ], - "description": "Lists a company's public Gem (gem.com) board postings with inline detail (full HTML description, and compensation when the company publishes a pay range). The company is the Gem vanity URL slug from its careers URL.", - "operationId": "jobs-gem-board", + "description": "Returns the public overview profile data for a player linked from a team squad, including player identity, current team/competition, career teams, recent-match context, and player league summary when supplied.", + "operationId": "livescore-player", "parameters": [ { - "description": "Gem vanity URL slug (careers URL)", + "description": "season-stats/player-slug/numeric-player-id path copied from a public LiveScore player link", "in": "query", - "name": "company", + "name": "path", "required": true, "type": "string", - "x-example": "agora" + "x-example": "season-stats/radek-vitek/56253" } ], "produces": [ @@ -405570,7 +479622,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/livescore.responseDoc" } }, "400": { @@ -405597,33 +479649,73 @@ "ApiKeyAuth": [] } ], - "summary": "List a company's Gem job board", + "summary": "LiveScore player profile", "tags": [ - "Jobs" + "LiveScore" ] } }, - "/jobs/greenhouse/board": { + "/livescore/scores": { "get": { "consumes": [ "application/json" ], - "description": "Lists a company's public Greenhouse board postings in the shared Job shape. Set content=true to include each job's full HTML description in one call. The token is the company's Greenhouse board slug from its careers URL.", - "operationId": "jobs-greenhouse-board", + "description": "Returns either the unpaged full-day scoreboard or one cursor-paged UI-style section page for a supported sport and date. The response's Nav values indicate whether another page is available; use the last returned section Id as cursor. Sport ids are discoverable from /livescore/sports.", + "operationId": "livescore-scores", "parameters": [ { - "description": "Greenhouse board token (careers URL slug)", + "description": "LiveScore sport id", + "enum": [ + "soccer", + "hockey", + "basketball", + "tennis", + "cricket" + ], "in": "query", - "name": "token", + "name": "sport", "required": true, "type": "string", - "x-example": "stripe" + "x-example": "soccer" }, { - "description": "Include full HTML description per job", + "description": "Calendar date in YYYYMMDD format", "in": "query", - "name": "content", + "name": "date", + "required": true, + "type": "string", + "x-example": "20260926" + }, + { + "description": "UTC offset in hours from -12 through 14; defaults to 0", + "in": "query", + "maximum": 14, + "minimum": -12, + "name": "timezone_offset", + "type": "integer" + }, + { + "description": "Request one UI-style page; defaults to false (full-day feed)", + "in": "query", + "name": "paging", "type": "boolean" + }, + { + "description": "Section Id from the prior paged response, e.g. s-26031", + "in": "query", + "name": "cursor", + "type": "string", + "x-example": "s-26031" + }, + { + "description": "Page direction in paged mode", + "enum": [ + "down", + "up" + ], + "in": "query", + "name": "direction", + "type": "string" } ], "produces": [ @@ -405633,7 +479725,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/livescore.responseDoc" } }, "400": { @@ -405660,35 +479752,50 @@ "ApiKeyAuth": [] } ], - "summary": "List a company's Greenhouse job board", + "summary": "LiveScore scores and fixtures by sport and date", "tags": [ - "Jobs" + "LiveScore" ] } }, - "/jobs/greenhouse/job": { + "/livescore/scores-toc": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Greenhouse job, identified by the board `token` and job `id`, both required. The response has the title, company, department, team, location and offices, workplace type, employment type, posting and apply URLs, posting date, compensation, and the description as HTML and plain text. An unknown token or id returns `404`.", - "operationId": "jobs-greenhouse-job", + "description": "Returns the event, player, section, and competition identifiers indexed by a sport and date. These IDs are date-specific and can help callers enumerate score-page sections.", + "operationId": "livescore-scores-toc", "parameters": [ { - "description": "Greenhouse board token", + "description": "LiveScore sport id", + "enum": [ + "soccer", + "hockey", + "basketball", + "tennis", + "cricket" + ], "in": "query", - "name": "token", + "name": "sport", "required": true, "type": "string", - "x-example": "stripe" + "x-example": "soccer" }, { - "description": "Greenhouse job id", + "description": "Calendar date in YYYYMMDD format", "in": "query", - "name": "id", + "name": "date", "required": true, "type": "string", - "x-example": "8172508" + "x-example": "20260926" + }, + { + "description": "UTC offset in hours from -12 through 14; defaults to 0", + "in": "query", + "maximum": 14, + "minimum": -12, + "name": "timezone_offset", + "type": "integer" } ], "produces": [ @@ -405698,7 +479805,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.jobResponseDoc" + "$ref": "#/definitions/livescore.responseDoc" } }, "400": { @@ -405725,99 +479832,137 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single Greenhouse job", + "summary": "LiveScore score date table of contents", "tags": [ - "Jobs" + "LiveScore" ] } }, - "/jobs/hiring-signals": { + "/livescore/search": { "get": { "consumes": [ "application/json" ], - "description": "Aggregates a company's ATS board into a hiring snapshot: total open roles, breakdowns by department/location/title, remote share, and how many roles are new in the last 7/30 days — a leading indicator of company growth. Supply provider plus that provider's slug params (token / company / org / tenant+datacenter+site / domain). Breakdowns are computed over the fetched postings.", - "operationId": "jobs-hiring-signals", + "description": "Searches the public LiveScore index for a free-text term, or browse its current team, competition-stage, and region-category sections with an empty query. Results are dynamic, limited per section, and are not a complete historical competition directory. Use /livescore/sports to discover all supported sport tokens.", + "operationId": "livescore-search", "parameters": [ { - "description": "ATS provider", + "description": "LiveScore sport token", "enum": [ - "greenhouse", - "lever", - "ashby", - "workday", - "smartrecruiters", - "workable", - "recruitee", - "rippling", - "personio", - "teamtailor", - "oracle", - "ukg", - "icims", - "eightfold", - "gem", - "pinpoint" + "soccer", + "hockey", + "basketball", + "tennis", + "cricket" ], "in": "query", - "name": "provider", + "name": "sport", "required": true, "type": "string", - "x-example": "greenhouse" - }, - { - "description": "greenhouse board token", - "in": "query", - "name": "token", - "type": "string" - }, - { - "description": "lever / smartrecruiters / workable / recruitee / rippling / personio / teamtailor / gem / pinpoint company slug", - "in": "query", - "name": "company", - "type": "string" + "x-example": "soccer" }, { - "description": "ashby org slug", + "description": "Optional free-text team, competition, or region term (up to 100 characters). Omit or leave empty to browse current results.", "in": "query", - "name": "org", - "type": "string" + "maxLength": 100, + "name": "query", + "type": "string", + "x-example": "Manchester City" }, { - "description": "workday / eightfold tenant", + "description": "Optional results per section (1 to 100). Defaults to 10 for a text query or 50 when query is empty.", "in": "query", - "name": "tenant", - "type": "string" + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer", + "x-example": 50 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/livescore.livescoreSearchResponseDoc" + } }, - { - "description": "workday datacenter shard", - "in": "query", - "name": "datacenter", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "workday / oracle career site", - "in": "query", - "name": "site", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "oracle cloud host (*.oraclecloud.com)", - "in": "query", - "name": "host", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Search LiveScore teams, competitions, and regions", + "tags": [ + "LiveScore" + ] + } + }, + "/livescore/sports": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Lists the five sports in LiveScore's fixture navigation, with no inputs. The ids are `soccer` (shown as Football on the site), `hockey`, `basketball`, `tennis` and `cricket`. Use an id as the sport input of the LiveScore scores endpoint.", + "operationId": "livescore-sports", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/livescore.sportsResponseDoc" + } + } + }, + "security": [ { - "description": "ukg job-board UUID", - "in": "query", - "name": "board", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "LiveScore supported sports", + "tags": [ + "LiveScore" + ] + } + }, + "/livescore/team": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a public team page section such as overview, fixtures, results, standings, squad, player stats, or team stats. Tab paths and competition-specific identifiers are supplied by the source page; copy a team tab href from LiveScore.", + "operationId": "livescore-team", + "parameters": [ { - "description": "icims careers domain / eightfold organization domain", + "description": "Five to nine lowercase path segments following /en/ from a public LiveScore team page or linked tab", "in": "query", - "name": "domain", - "type": "string" + "name": "path", + "required": true, + "type": "string", + "x-example": "football/team/name/2909/stats/teams/70" } ], "produces": [ @@ -405827,7 +479972,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.signalsResponseDoc" + "$ref": "#/definitions/livescore.responseDoc" } }, "400": { @@ -405854,51 +479999,50 @@ "ApiKeyAuth": [] } ], - "summary": "Aggregate hiring signals for a company's board", + "summary": "LiveScore team page and section data", "tags": [ - "Jobs" + "LiveScore" ] } }, - "/jobs/icims/board": { + "/lolesports/completed-events": { "get": { "consumes": [ "application/json" ], - "description": "Lists a company's public iCIMS job board (served through the tenant's white-labeled careers domain, e.g. careers.costco.com — not the bare {company}.icims.com subdomain, which is an OAuth-gated employee portal), paged via page/limit, with the full description inline per job. domain is the tenant's careers domain from its careers URL.", - "operationId": "jobs-icims-board", + "description": "Returns every completed match of one tournament with final game wins and the game ids and VOD references for each game. An empty list is valid for a tournament that has not started.", + "operationId": "lolesports-completed-events", "parameters": [ { - "description": "iCIMS tenant careers domain (careers URL)", - "in": "query", - "name": "domain", - "required": true, - "type": "string", - "x-example": "careers.costco.com" - }, - { - "description": "Free-text keyword search", - "in": "query", - "name": "keywords", - "type": "string" - }, - { - "description": "Filter: location contains", + "description": "Language for names and labels; one of cs-CZ, de-DE, en-US, es-ES, es-MX, fr-FR, hu-HU, ja-JP, ko-KR, pl-PL, pt-BR, th-TH, tr-TR, vi-VN, zh-TW; defaults to en-US", + "enum": [ + "cs-CZ", + "de-DE", + "en-US", + "es-ES", + "es-MX", + "fr-FR", + "hu-HU", + "ja-JP", + "ko-KR", + "pl-PL", + "pt-BR", + "th-TH", + "tr-TR", + "vi-VN", + "zh-TW" + ], "in": "query", - "name": "location", + "name": "hl", "type": "string" }, { - "description": "Page number, default 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Page size, default 20, max 50", + "description": "Numeric tournament id from lolesports-tournaments", "in": "query", - "name": "limit", - "type": "integer" + "name": "tournament_id", + "required": true, + "type": "string", + "x-example": "115548681802226458" } ], "produces": [ @@ -405908,7 +480052,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/lolesports.CompletedEventsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -405917,6 +480073,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -405929,42 +480091,50 @@ "ApiKeyAuth": [] } ], - "summary": "List an iCIMS tenant's job board", + "summary": "League of Legends Esports completed matches", "tags": [ - "Jobs" + "LoL Esports" ] } }, - "/jobs/icims/job": { + "/lolesports/event": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single iCIMS job with its full HTML/text description, department, and benefits. id is the req_id/slug from a board listing; lang defaults to en-us.", - "operationId": "jobs-icims-job", + "description": "Returns one match: league, tournament, teams with game wins, best-of strategy, each game's id, number, state (`unneeded`, `unstarted`, `inProgress`, `completed`), blue/red side assignment and VODs, plus broadcast streams. Use a game `id` with lolesports-game-window or lolesports-game-details. An unknown match id returns not found.", + "operationId": "lolesports-event", "parameters": [ { - "description": "iCIMS tenant careers domain", + "description": "Language for names and labels; one of cs-CZ, de-DE, en-US, es-ES, es-MX, fr-FR, hu-HU, ja-JP, ko-KR, pl-PL, pt-BR, th-TH, tr-TR, vi-VN, zh-TW; defaults to en-US", + "enum": [ + "cs-CZ", + "de-DE", + "en-US", + "es-ES", + "es-MX", + "fr-FR", + "hu-HU", + "ja-JP", + "ko-KR", + "pl-PL", + "pt-BR", + "th-TH", + "tr-TR", + "vi-VN", + "zh-TW" + ], "in": "query", - "name": "domain", - "required": true, - "type": "string", - "x-example": "careers.costco.com" + "name": "hl", + "type": "string" }, { - "description": "iCIMS job req_id/slug from a board listing", + "description": "Numeric match id from lolesports-schedule, lolesports-live or lolesports-standings", "in": "query", - "name": "id", + "name": "match_id", "required": true, "type": "string", - "x-example": "30341" - }, - { - "description": "Language code, default en-us", - "in": "query", - "name": "lang", - "type": "string", - "x-example": "en-us" + "x-example": "117133816701918802" } ], "produces": [ @@ -405974,7 +480144,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.jobResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/lolesports.EventDetailResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -405989,6 +480171,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -406001,35 +480189,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single iCIMS job", + "summary": "League of Legends Esports match detail", "tags": [ - "Jobs" + "LoL Esports" ] } }, - "/jobs/lever/posting": { + "/lolesports/game-details": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Lever posting, identified by the `company` slug and posting `id`, both required. The response has the title, department, team, location, workplace type, employment type, posting and apply URLs, posting date, compensation, and the description as HTML and plain text. An unknown company or id returns `404`.", - "operationId": "jobs-lever-posting", + "description": "Returns per-player detail frames for one game: level, KDA, gold, creep score, kill participation, damage share, wards, attack damage, ability power, armor, magic resistance, final items, rune ids and skill order. Use participant ids from lolesports-game-window metadata. The same `starting_time` rule as lolesports-game-window applies.", + "operationId": "lolesports-game-details", "parameters": [ { - "description": "Lever company slug", + "description": "Numeric game id from lolesports-event", "in": "query", - "name": "company", + "name": "game_id", "required": true, "type": "string", - "x-example": "spotify" + "x-example": "117133816701918803" }, { - "description": "Lever posting id", + "description": "RFC 3339 UTC timestamp whose seconds are divisible by 10; frames begin there", "in": "query", - "name": "id", - "required": true, + "name": "starting_time", "type": "string", - "x-example": "2193db3f-77c5-43b8-b030-8f92c9882bf1" + "x-example": "2026-10-07T11:30:00.000Z" + }, + { + "description": "Participant numbers 1 to 10 joined by underscores, for example 1_2_3", + "in": "query", + "name": "participant_ids", + "type": "string", + "x-example": "1_2" } ], "produces": [ @@ -406039,7 +480233,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.jobResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/lolesports.GameDetailsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -406054,6 +480260,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -406066,45 +480278,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single Lever posting", + "summary": "League of Legends Esports player game details", "tags": [ - "Jobs" + "LoL Esports" ] } }, - "/jobs/lever/postings": { + "/lolesports/game-window": { "get": { "consumes": [ "application/json" ], - "description": "Lists a company's public Lever postings (detail is inline), optionally filtered by department, location, or remote. The company is the Lever slug from its careers URL.", - "operationId": "jobs-lever-postings", + "description": "Returns the lolesports live-stats window for one game: patch, blue and red team and player metadata (champion, role, summoner name) and roughly ten seconds of frames with team gold, kills, towers, inhibitors, barons, dragons and per-player level, KDA, creep score and health. `game_state` is `in_game`, `paused` or `finished`. For a game in progress omit `starting_time` for the latest window; for a completed game pass a timestamp inside the game.", + "operationId": "lolesports-game-window", "parameters": [ { - "description": "Lever company slug (careers URL)", + "description": "Numeric game id from lolesports-event", "in": "query", - "name": "company", + "name": "game_id", "required": true, "type": "string", - "x-example": "spotify" - }, - { - "description": "Filter: department contains", - "in": "query", - "name": "department", - "type": "string" - }, - { - "description": "Filter: location contains", - "in": "query", - "name": "location", - "type": "string" + "x-example": "117133816701918803" }, { - "description": "Filter by remote (true or false)", + "description": "RFC 3339 UTC timestamp whose seconds are divisible by 10; frames begin there", "in": "query", - "name": "remote", - "type": "boolean" + "name": "starting_time", + "type": "string", + "x-example": "2026-10-07T10:20:00.000Z" } ], "produces": [ @@ -406114,7 +480315,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/lolesports.GameWindowResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -406129,6 +480342,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -406141,53 +480360,45 @@ "ApiKeyAuth": [] } ], - "summary": "List a company's Lever postings", + "summary": "League of Legends Esports live game window", "tags": [ - "Jobs" + "LoL Esports" ] } }, - "/jobs/oracle/board": { + "/lolesports/gpr": { "get": { "consumes": [ "application/json" ], - "description": "Lists an Oracle Recruiting Cloud tenant's public requisitions, paged via limit/offset. host and site both come from the careers URL https://{host}/hcmUI/CandidateExperience/en/sites/{site}/ (host must be an *.oraclecloud.com hostname; site looks like CX_1). The listing carries a short description; use the single-job endpoint for full detail.", - "operationId": "jobs-oracle-board", + "description": "Returns the League of Legends Esports Global Power Rankings (GPR): every ranked team with rank, GPR score, Elo, previous rank and rank change, home league, match and game records, average opponent GPR and the tournaments counted with each result and placement. `season` selects `current` (the running year, default) or the Worlds snapshot of a four-digit year (`2025`, `2024`; every season listed in the response's `seasons` is accepted, and a year without a snapshot returns 404); `league` keeps one home league's teams and `history` adds the daily GPR history points. The response lists the seasons and home leagues available.", + "operationId": "lolesports-gpr", "parameters": [ { - "description": "Oracle Cloud host (careers URL, *.oraclecloud.com)", - "in": "query", - "name": "host", - "required": true, - "type": "string", - "x-example": "eeho.fa.us2.oraclecloud.com" - }, - { - "description": "Oracle career site number", + "description": "Ranking snapshot; current, or a four-digit Worlds snapshot year such as 2025 or 2024 (any season listed in the response is accepted); defaults to current", "in": "query", - "name": "site", - "required": true, - "type": "string", - "x-example": "CX_1" + "name": "season", + "type": "string" }, { - "description": "Free-text keyword search", + "description": "Home league slug from the leagues list of the response, for example lck", "in": "query", - "name": "search", + "name": "league", "type": "string" }, { - "description": "Page size, default 25, max 50", + "description": "Number of teams to return, 1 to 200, best rank first; defaults to all", "in": "query", + "maximum": 200, + "minimum": 1, "name": "limit", "type": "integer" }, { - "description": "Page offset, default 0", + "description": "Add each team's GPR history points", "in": "query", - "name": "offset", - "type": "integer" + "name": "history", + "type": "boolean" } ], "produces": [ @@ -406197,7 +480408,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/lolesports.GPRResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -406206,6 +480429,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -406218,43 +480453,42 @@ "ApiKeyAuth": [] } ], - "summary": "List an Oracle Recruiting (ORC) tenant's job board", + "summary": "League of Legends Global Power Rankings", "tags": [ - "Jobs" + "LoL Esports" ] } }, - "/jobs/oracle/job": { + "/lolesports/leagues": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single Oracle Recruiting requisition with its full HTML/text description (description, responsibilities, qualifications). id is the requisition Id from a board listing; host/site as in the board endpoint.", - "operationId": "jobs-oracle-job", + "description": "Returns every league on lolesports.com with its numeric `id`, `slug`, name, region, image and display status (`force_selected`, `selected`, `not_selected`, `hidden`). Use a league `id` with lolesports-schedule or lolesports-tournaments. Region labels are upstream values such as `EMEA`, `KOREA`, `CHINA`, `NORTH AMERICA` and `INTERNATIONAL`.", + "operationId": "lolesports-leagues", "parameters": [ { - "description": "Oracle Cloud host (*.oraclecloud.com)", - "in": "query", - "name": "host", - "required": true, - "type": "string", - "x-example": "eeho.fa.us2.oraclecloud.com" - }, - { - "description": "Oracle career site number", - "in": "query", - "name": "site", - "required": true, - "type": "string", - "x-example": "CX_1" - }, - { - "description": "Oracle requisition Id from a board listing", + "description": "Language for names and labels; one of cs-CZ, de-DE, en-US, es-ES, es-MX, fr-FR, hu-HU, ja-JP, ko-KR, pl-PL, pt-BR, th-TH, tr-TR, vi-VN, zh-TW; defaults to en-US", + "enum": [ + "cs-CZ", + "de-DE", + "en-US", + "es-ES", + "es-MX", + "fr-FR", + "hu-HU", + "ja-JP", + "ko-KR", + "pl-PL", + "pt-BR", + "th-TH", + "tr-TR", + "vi-VN", + "zh-TW" + ], "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "331738" + "name": "hl", + "type": "string" } ], "produces": [ @@ -406264,7 +480498,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.jobResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/lolesports.LeaguesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -406273,8 +480519,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -406291,45 +480537,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single Oracle Recruiting (ORC) requisition", + "summary": "League of Legends Esports leagues", "tags": [ - "Jobs" + "LoL Esports" ] } }, - "/jobs/personio/feed": { + "/lolesports/live": { "get": { "consumes": [ "application/json" ], - "description": "Lists a company's public Personio board feed in the shared Job shape with detail inline, optionally filtered by department, location, or remote. The company is the Personio subdomain from its careers URL https://{company}.jobs.personio.de/.", - "operationId": "jobs-personio-feed", + "description": "Returns matches currently in progress across all leagues, in the same shape as lolesports-schedule events. An empty list is valid when no league is playing. Pair a returned match id with lolesports-event to get game ids, then lolesports-game-window for live frames.", + "operationId": "lolesports-live", "parameters": [ { - "description": "Personio subdomain (careers URL)", - "in": "query", - "name": "company", - "required": true, - "type": "string", - "x-example": "getquin" - }, - { - "description": "Filter: department contains", - "in": "query", - "name": "department", - "type": "string" - }, - { - "description": "Filter: location contains", + "description": "Language for names and labels; one of cs-CZ, de-DE, en-US, es-ES, es-MX, fr-FR, hu-HU, ja-JP, ko-KR, pl-PL, pt-BR, th-TH, tr-TR, vi-VN, zh-TW; defaults to en-US", + "enum": [ + "cs-CZ", + "de-DE", + "en-US", + "es-ES", + "es-MX", + "fr-FR", + "hu-HU", + "ja-JP", + "ko-KR", + "pl-PL", + "pt-BR", + "th-TH", + "tr-TR", + "vi-VN", + "zh-TW" + ], "in": "query", - "name": "location", + "name": "hl", "type": "string" - }, - { - "description": "Filter by remote (true or false)", - "in": "query", - "name": "remote", - "type": "boolean" } ], "produces": [ @@ -406339,7 +480582,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/lolesports.LiveResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -406348,8 +480603,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -406366,65 +480621,57 @@ "ApiKeyAuth": [] } ], - "summary": "List a company's Personio job board", + "summary": "League of Legends Esports live matches", "tags": [ - "Jobs" + "LoL Esports" ] } }, - "/jobs/phenom/board": { + "/lolesports/news": { "get": { "consumes": [ "application/json" ], - "description": "Searches a company's public Phenom People career site (a white-labeled domain such as careers.whataburger.com or jobs.cvshealth.com). domain is the tenant's careers domain from its careers URL. Paged via offset/limit; limit is a best-effort page-size hint some tenants ignore, so count always reflects what actually came back.", - "operationId": "jobs-phenom-board", + "description": "Returns the articles listed on the League of Legends Esports news page: title, summary, link, publication time, banner image, authors and whether the item links out to another site (a video or a store page). The page shows up to the newest 100 items and has no category, tag or paging controls; `hl` selects the site language and `limit` keeps the newest items only.", + "operationId": "lolesports-news", "parameters": [ { - "description": "Phenom tenant careers domain (careers URL)", - "in": "query", - "name": "domain", - "required": true, - "type": "string", - "x-example": "careers.whataburger.com" - }, - { - "description": "Free-text keyword search", - "in": "query", - "name": "keywords", - "type": "string" - }, - { - "description": "Filter: location contains", - "in": "query", - "name": "location", - "type": "string" - }, - { - "description": "Filter: category contains", - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Sort order, default relevant", + "description": "Site language; one of cs-CZ, de-DE, el-GR, en-AU, en-GB, en-PH, en-SG, en-US, es-ES, es-MX, fr-FR, hu-HU, id-ID, it-IT, ja-JP, ko-KR, pl-PL, pt-BR, ro-RO, ru-RU, th-TH, tr-TR, vi-VN, zh-TW; defaults to en-US", "enum": [ - "relevant", - "recent" + "cs-CZ", + "de-DE", + "el-GR", + "en-AU", + "en-GB", + "en-PH", + "en-SG", + "en-US", + "es-ES", + "es-MX", + "fr-FR", + "hu-HU", + "id-ID", + "it-IT", + "ja-JP", + "ko-KR", + "pl-PL", + "pt-BR", + "ro-RO", + "ru-RU", + "th-TH", + "tr-TR", + "vi-VN", + "zh-TW" ], "in": "query", - "name": "sort", + "name": "hl", "type": "string" }, { - "description": "Page offset, default 0", - "in": "query", - "name": "offset", - "type": "integer" - }, - { - "description": "Page size hint, default 10, max 100 (some tenants ignore this and return their own configured page size regardless)", + "description": "Number of newest articles to return, 1 to 100; defaults to all the page lists", "in": "query", + "maximum": 100, + "minimum": 1, "name": "limit", "type": "integer" } @@ -406436,7 +480683,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/lolesports.NewsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -406445,6 +480704,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -406457,35 +480728,55 @@ "ApiKeyAuth": [] } ], - "summary": "Search a Phenom People tenant's job board", + "summary": "League of Legends Esports news", "tags": [ - "Jobs" + "LoL Esports" ] } }, - "/jobs/phenom/job": { + "/lolesports/schedule": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single Phenom People job with its full HTML/text description, category, and apply URL. domain is the tenant's careers domain (as in the board endpoint); id is the jobId/reqId from a board listing (e.g. JR10002958).", - "operationId": "jobs-phenom-job", + "description": "Returns the match schedule around today: start time, state (`unstarted`, `inProgress`, `completed`), block name, league, teams, outcome and game wins, and best-of strategy. Optionally filter with `league_id`. Follow `older_page_token` for past results and `newer_page_token` for later fixtures; a missing token means that direction is exhausted.", + "operationId": "lolesports-schedule", "parameters": [ { - "description": "Phenom tenant careers domain", + "description": "Language for names and labels; one of cs-CZ, de-DE, en-US, es-ES, es-MX, fr-FR, hu-HU, ja-JP, ko-KR, pl-PL, pt-BR, th-TH, tr-TR, vi-VN, zh-TW; defaults to en-US", + "enum": [ + "cs-CZ", + "de-DE", + "en-US", + "es-ES", + "es-MX", + "fr-FR", + "hu-HU", + "ja-JP", + "ko-KR", + "pl-PL", + "pt-BR", + "th-TH", + "tr-TR", + "vi-VN", + "zh-TW" + ], "in": "query", - "name": "domain", - "required": true, - "type": "string", - "x-example": "careers.whataburger.com" + "name": "hl", + "type": "string" }, { - "description": "Phenom job id from a board listing", + "description": "Numeric league id from lolesports-leagues, or up to 10 comma-separated ids to combine leagues; omit for all leagues", "in": "query", - "name": "id", - "required": true, + "name": "league_id", "type": "string", - "x-example": "JR10002958" + "x-example": "98767991302996019" + }, + { + "description": "older_page_token or newer_page_token copied from a previous response", + "in": "query", + "name": "page_token", + "type": "string" } ], "produces": [ @@ -406495,7 +480786,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.jobResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/lolesports.ScheduleResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -406504,8 +480807,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -406522,27 +480825,63 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single Phenom People job", + "summary": "League of Legends Esports schedule", "tags": [ - "Jobs" + "LoL Esports" ] } }, - "/jobs/pinpoint/board": { + "/lolesports/seasons": { "get": { "consumes": [ "application/json" ], - "description": "Lists a tenant's public Pinpoint (pinpointhq.com) board postings with inline detail (full HTML description, key responsibilities, skills, and benefits, plus structured compensation when the tenant publishes a pay range). The company is the tenant subdomain from its careers URL https://{company}.pinpointhq.com/.", - "operationId": "jobs-pinpoint-board", + "description": "Returns the League of Legends esports calendar since 2011, newest first: every season with its splits (start and end time, region) and the tournaments played in each split with their league. Use a tournament `id` with lolesports-standings or lolesports-completed-events and a league `id` with lolesports-tournaments. `season_id` (taken from an earlier response) returns one season; `region` keeps only splits of one region and `league_id` keeps only that league's tournaments, both applied after the fetch. The unfiltered list is large (about 300 KB). A season id that does not exist returns not found.", + "operationId": "lolesports-seasons", "parameters": [ { - "description": "Pinpoint tenant subdomain (careers URL)", + "description": "Language for names and labels; one of cs-CZ, de-DE, en-US, es-ES, es-MX, fr-FR, hu-HU, ja-JP, ko-KR, pl-PL, pt-BR, th-TH, tr-TR, vi-VN, zh-TW; defaults to en-US", + "enum": [ + "cs-CZ", + "de-DE", + "en-US", + "es-ES", + "es-MX", + "fr-FR", + "hu-HU", + "ja-JP", + "ko-KR", + "pl-PL", + "pt-BR", + "th-TH", + "tr-TR", + "vi-VN", + "zh-TW" + ], "in": "query", - "name": "company", - "required": true, + "name": "hl", + "type": "string" + }, + { + "description": "Numeric season id from an earlier lolesports-seasons response; omit for every season", + "in": "query", + "name": "season_id", "type": "string", - "x-example": "workwithus" + "x-example": "115547545029543948" + }, + { + "description": "Split region, case-insensitive; one of AMERICAS, BRAZIL, CHINA, COMMONWEALTH OF INDEPENDENT STATES, EMEA, EUROPE, GLOBAL, HONG KONG, MACAU, TAIWAN, INTERNATIONAL, JAPAN, KOREA, LATIN AMERICA, LATIN AMERICA NORTH, LATIN AMERICA SOUTH, NORTH AMERICA, OCEANIA, REGIONAL, SOUTHEAST ASIA, TURKEY, VIETNAM", + "in": "query", + "name": "region", + "type": "string", + "x-example": "KOREA" + }, + { + "description": "Numeric league id from lolesports-leagues; keeps only that league's tournaments", + "in": "query", + "name": "league_id", + "type": "string", + "x-example": "98767991302996019" } ], "produces": [ @@ -406552,7 +480891,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/lolesports.SeasonsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -406567,6 +480918,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -406579,35 +480936,60 @@ "ApiKeyAuth": [] } ], - "summary": "List a tenant's Pinpoint job board", + "summary": "League of Legends Esports seasons and splits", "tags": [ - "Jobs" + "LoL Esports" ] } }, - "/jobs/recruitee/offer": { + "/lolesports/standings": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single Recruitee offer with its full HTML/text description and structured compensation when the board exposes it.", - "operationId": "jobs-recruitee-offer", + "description": "Returns one tournament's stages (for example Regular Season, Playoffs), each with sections of matches and ordered team rankings with win-loss records. Playoff brackets include `previous_match_ids` that link rounds; `rounds=true` also names each bracket round. Use match ids with lolesports-event.", + "operationId": "lolesports-standings", "parameters": [ { - "description": "Recruitee subdomain", + "description": "Language for names and labels; one of cs-CZ, de-DE, en-US, es-ES, es-MX, fr-FR, hu-HU, ja-JP, ko-KR, pl-PL, pt-BR, th-TH, tr-TR, vi-VN, zh-TW; defaults to en-US", + "enum": [ + "cs-CZ", + "de-DE", + "en-US", + "es-ES", + "es-MX", + "fr-FR", + "hu-HU", + "ja-JP", + "ko-KR", + "pl-PL", + "pt-BR", + "th-TH", + "tr-TR", + "vi-VN", + "zh-TW" + ], "in": "query", - "name": "company", - "required": true, - "type": "string", - "x-example": "bunq" + "name": "hl", + "type": "string" }, { - "description": "Recruitee offer id", + "description": "Numeric tournament id from lolesports-tournaments", "in": "query", - "name": "id", + "name": "tournament_id", "required": true, "type": "string", - "x-example": "2679762" + "x-example": "115548681802226458" + }, + { + "description": "true adds each section's id and type (group or bracket) and bracket round names with their match ids; costs a second upstream call; false or omitted keeps the default response", + "enum": [ + true, + false + ], + "in": "query", + "name": "rounds", + "type": "boolean" } ], "produces": [ @@ -406617,7 +480999,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.jobResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/lolesports.StandingsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -406632,6 +481026,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -406644,45 +481044,80 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single Recruitee offer", + "summary": "League of Legends Esports standings", "tags": [ - "Jobs" + "LoL Esports" ] } }, - "/jobs/recruitee/offers": { + "/lolesports/teams": { "get": { "consumes": [ "application/json" ], - "description": "Lists a company's public Recruitee offers (detail is inline), optionally filtered by department, location, or remote. The company is the Recruitee subdomain from its careers URL https://{company}.recruitee.com/.", - "operationId": "jobs-recruitee-offers", + "description": "Returns teams with slug, code, status (`active`, `archived`), home league and the roster of players (summoner name, real name, role `top`, `jungle`, `mid`, `bottom`, `support`). Look up one team with `slug` or search with `q`; results are sorted by name and paged. The slug of every team is available from lolesports-standings and lolesports-schedule.", + "operationId": "lolesports-teams", "parameters": [ { - "description": "Recruitee subdomain (careers URL)", + "description": "Language for names and labels; one of cs-CZ, de-DE, en-US, es-ES, es-MX, fr-FR, hu-HU, ja-JP, ko-KR, pl-PL, pt-BR, th-TH, tr-TR, vi-VN, zh-TW; defaults to en-US", + "enum": [ + "cs-CZ", + "de-DE", + "en-US", + "es-ES", + "es-MX", + "fr-FR", + "hu-HU", + "ja-JP", + "ko-KR", + "pl-PL", + "pt-BR", + "th-TH", + "tr-TR", + "vi-VN", + "zh-TW" + ], "in": "query", - "name": "company", - "required": true, + "name": "hl", + "type": "string" + }, + { + "description": "Exact team slug such as t1 or g2-esports; takes precedence over q", + "in": "query", + "name": "slug", "type": "string", - "x-example": "bunq" + "x-example": "t1" }, { - "description": "Filter: department contains", + "description": "Case-insensitive substring of team name, code or slug", "in": "query", - "name": "department", + "name": "q", "type": "string" }, { - "description": "Filter: location contains", + "description": "Team status filter: active or archived", + "enum": [ + "active", + "archived" + ], "in": "query", - "name": "location", + "name": "status", "type": "string" }, { - "description": "Filter by remote (true or false)", + "description": "1-based page number; defaults to 1", "in": "query", - "name": "remote", - "type": "boolean" + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "description": "Page size 1 to 100; defaults to 25", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer" } ], "produces": [ @@ -406692,7 +481127,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/lolesports.TeamsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -406707,6 +481154,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -406719,45 +481172,50 @@ "ApiKeyAuth": [] } ], - "summary": "List a company's Recruitee offers", + "summary": "League of Legends Esports teams and rosters", "tags": [ - "Jobs" + "LoL Esports" ] } }, - "/jobs/rippling/board": { + "/lolesports/tournaments": { "get": { "consumes": [ "application/json" ], - "description": "Lists a company's public Rippling board postings (thin listing — title, department, work location). The company is the Rippling board slug from its careers URL https://ats.rippling.com/{company}/jobs. Detail (full description, employment type) is fetched per job via the single-job endpoint.", - "operationId": "jobs-rippling-board", + "description": "Returns a league's tournaments (splits and seasons) with numeric `id`, `slug`, `start_date` and `end_date`, newest first. Use a tournament `id` with lolesports-standings or lolesports-completed-events. An unknown league id returns not found.", + "operationId": "lolesports-tournaments", "parameters": [ { - "description": "Rippling board slug (careers URL)", - "in": "query", - "name": "company", - "required": true, - "type": "string", - "x-example": "rippling" - }, - { - "description": "Filter: department contains", - "in": "query", - "name": "department", - "type": "string" - }, - { - "description": "Filter: location contains", + "description": "Language for names and labels; one of cs-CZ, de-DE, en-US, es-ES, es-MX, fr-FR, hu-HU, ja-JP, ko-KR, pl-PL, pt-BR, th-TH, tr-TR, vi-VN, zh-TW; defaults to en-US", + "enum": [ + "cs-CZ", + "de-DE", + "en-US", + "es-ES", + "es-MX", + "fr-FR", + "hu-HU", + "ja-JP", + "ko-KR", + "pl-PL", + "pt-BR", + "th-TH", + "tr-TR", + "vi-VN", + "zh-TW" + ], "in": "query", - "name": "location", + "name": "hl", "type": "string" }, { - "description": "Filter by remote (true or false)", + "description": "Numeric league id from lolesports-leagues", "in": "query", - "name": "remote", - "type": "boolean" + "name": "league_id", + "required": true, + "type": "string", + "x-example": "98767991302996019" } ], "produces": [ @@ -406767,7 +481225,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/lolesports.TournamentsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -406782,6 +481252,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -406794,35 +481270,34 @@ "ApiKeyAuth": [] } ], - "summary": "List a company's Rippling job board", + "summary": "League of Legends Esports tournaments", "tags": [ - "Jobs" + "LoL Esports" ] } }, - "/jobs/rippling/job": { + "/lululemon/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single Rippling job with its full HTML/text description, employment type, and work locations. The id is the job uuid from a listing.", - "operationId": "jobs-rippling-job", + "description": "Returns lululemon's own storefront category navigation, flattened out of the site's shared header nav: every navigable category with its display name, breadcrumb path, and the exact category/cdp_hash pair lululemon-category's own parameters expect (read directly from the nav's own URL, not guessed from the display label). section, when given, filters the result to one top-level nav section.", + "operationId": "lululemon-categories", "parameters": [ { - "description": "Rippling board slug", - "in": "query", - "name": "company", - "required": true, - "type": "string", - "x-example": "rippling" - }, - { - "description": "Rippling job uuid", + "description": "Filter to one top-level storefront nav section", + "enum": [ + "new-featured", + "women", + "men", + "accessories", + "bags", + "activity", + "we-made-too-much" + ], "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "2f0674e6-f01f-4ecd-b459-e947241c211f" + "name": "section", + "type": "string" } ], "produces": [ @@ -406832,7 +481307,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.jobResponseDoc" + "$ref": "#/definitions/lululemon.categoriesResponseDoc" } }, "400": { @@ -406841,8 +481316,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -406859,35 +481334,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single Rippling job", + "summary": "Browse lululemon's storefront category navigation", "tags": [ - "Jobs" + "Lululemon" ] } }, - "/jobs/smartrecruiters/posting": { + "/lululemon/category": { "get": { "consumes": [ "application/json" ], - "description": "Returns one SmartRecruiters posting, identified by the `company` id and posting `id`, both required. The response has the title, department, location, employment type, posting and apply URLs, posting date, compensation, and the job ad description as HTML and text. Recruiter personal data is left out. An unknown company or id returns `404`.", - "operationId": "jobs-smartrecruiters-posting", + "description": "Returns one lululemon category's product listing page: products with pricing, sale detection, sizes, colors, and style numbers. category and cdp_hash are the two path segments of a lululemon category URL (https://shop.lululemon.com/c/{category}/{cdp_hash}), e.g. women-new-styles and n14f1wz6o10 -- both are also available from lululemon-categories's own category and cdp_hash fields. Pagination is page-based and real: requesting a page beyond the category's real last page returns a normal response with an empty products array rather than an error. An unrecognized category/cdp_hash pair returns 404.", + "operationId": "lululemon-category", "parameters": [ { - "description": "SmartRecruiters company id", + "description": "lululemon category slug, from a category URL's first path segment", "in": "query", - "name": "company", + "name": "category", "required": true, "type": "string", - "x-example": "Visa" + "x-example": "women-new-styles" }, { - "description": "SmartRecruiters posting id", + "description": "lululemon category id, from a category URL's second path segment", "in": "query", - "name": "id", + "name": "cdp_hash", "required": true, "type": "string", - "x-example": "744000133907678" + "x-example": "n14f1wz6o10" + }, + { + "description": "Page number, one-based, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Results per page, 1 to 100, defaults to 24", + "in": "query", + "name": "page_size", + "type": "integer", + "x-example": 24 } ], "produces": [ @@ -406897,7 +481386,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.jobResponseDoc" + "$ref": "#/definitions/lululemon.categoryResponseDoc" } }, "400": { @@ -406912,6 +481401,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -406924,39 +481419,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single SmartRecruiters posting", + "summary": "Browse a lululemon category's product listing", "tags": [ - "Jobs" + "Lululemon" ] } }, - "/jobs/smartrecruiters/postings": { + "/lululemon/outfit": { "get": { "consumes": [ "application/json" ], - "description": "Lists a company's public SmartRecruiters postings, paged via limit/offset. The company is the SmartRecruiters identifier from its careers URL.", - "operationId": "jobs-smartrecruiters-postings", + "description": "Returns lululemon's own curated outfit/style recommendations for one product color: every complementary item in each styled look, plus the anchor product itself. unified_id and color_code are lululemon-product's own unified_id response field and a color's code field (from lululemon-product's colors[] or lululemon-category's style_numbers-paired colors[]) -- not lululemon-product's own product_id, which is a different id space. Recommended items' own id is a separate, third-party catalog id (not lululemon-product's product_id) -- use each item's url to reach its product page. An unrecognized unified_id/color_code pair returns 404.", + "operationId": "lululemon-outfit", "parameters": [ { - "description": "SmartRecruiters company id (careers URL)", + "description": "lululemon product unified id, from a lululemon-product result's unified_id field", "in": "query", - "name": "company", + "name": "unified_id", "required": true, "type": "string", - "x-example": "Visa" - }, - { - "description": "Page size, default 100, max 100", - "in": "query", - "name": "limit", - "type": "integer" + "x-example": "Scuba-Relaxed-Half-Zip-Colourblock" }, { - "description": "Page offset, default 0", + "description": "lululemon color code, from a lululemon-product result's colors[].code field", "in": "query", - "name": "offset", - "type": "integer" + "name": "color_code", + "required": true, + "type": "string", + "x-example": "79895" } ], "produces": [ @@ -406966,7 +481457,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/lululemon.outfitResponseDoc" } }, "400": { @@ -406981,6 +481472,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -406993,45 +481490,27 @@ "ApiKeyAuth": [] } ], - "summary": "List a company's SmartRecruiters postings", + "summary": "Get lululemon's outfit/style recommendations for a product color", "tags": [ - "Jobs" + "Lululemon" ] } }, - "/jobs/teamtailor/jobs": { + "/lululemon/product/{product_id}": { "get": { "consumes": [ "application/json" ], - "description": "Lists a company's public Teamtailor board feed in the shared Job shape with detail inline, optionally filtered by department, location, or remote. The company is the Teamtailor subdomain from its careers URL https://{company}.teamtailor.com/.", - "operationId": "jobs-teamtailor-jobs", + "description": "Returns one lululemon product's full detail: every purchasable color/size SKU with its own price, sale status, and live availability, plus an aggregate rating and real customer reviews when the product has any -- none of which lululemon-category exposes (it only carries one representative color/price per product). product_id is the id from a lululemon-category result's id field or a lululemon product URL's trailing path segment (https://shop.lululemon.com/p/{slug}/{product_id}) -- the slug itself is not needed. An unrecognized product_id returns 404.", + "operationId": "lululemon-product", "parameters": [ { - "description": "Teamtailor subdomain (careers URL)", - "in": "query", - "name": "company", + "description": "lululemon product id, from a lululemon-category result's id field", + "in": "path", + "name": "product_id", "required": true, "type": "string", - "x-example": "oatly" - }, - { - "description": "Filter: department contains", - "in": "query", - "name": "department", - "type": "string" - }, - { - "description": "Filter: location contains", - "in": "query", - "name": "location", - "type": "string" - }, - { - "description": "Filter by remote (true or false)", - "in": "query", - "name": "remote", - "type": "boolean" + "x-example": "lt5o6p8kho" } ], "produces": [ @@ -407041,7 +481520,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/lululemon.productDetailResponseDoc" } }, "400": { @@ -407056,6 +481535,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -407068,53 +481553,54 @@ "ApiKeyAuth": [] } ], - "summary": "List a company's Teamtailor job board", + "summary": "Get a lululemon product's full detail", "tags": [ - "Jobs" + "Lululemon" ] } }, - "/jobs/ukg/board": { + "/lululemon/stores": { "get": { "consumes": [ "application/json" ], - "description": "Lists a UKG Pro Recruiting (formerly UltiPro) tenant's public opportunities, paged via limit/offset. tenant and board both come from the careers URL https://recruiting.ultipro.com/{tenant}/JobBoard/{board}. Each posting carries a brief description inline.", - "operationId": "jobs-ukg-board", + "description": "Returns lululemon's own complete physical store directory (480 US and 86 Canada locations), including regular weekly hours and in-store amenities. All filters are optional and applied to the full directory. country and state are free-text equality filters against the values this directory actually carries (2-letter codes, e.g. US/CA, NY/CA), not an enforced enum. lat and lng (both required together) filter to stores within radius_miles (1 to 500, defaults to 50), sorted nearest-first.", + "operationId": "lululemon-stores", "parameters": [ { - "description": "UKG tenant code (careers URL)", + "description": "Filter to one country by its 2-letter code", "in": "query", - "name": "tenant", - "required": true, + "name": "country", "type": "string", - "x-example": "BUI1004BMDI" + "x-example": "US" }, { - "description": "UKG job-board UUID (careers URL)", + "description": "Filter to one state/province by its 2-letter code", "in": "query", - "name": "board", - "required": true, + "name": "state", "type": "string", - "x-example": "6b442184-52a5-4635-8db5-5aa4bed2a563" + "x-example": "NY" }, { - "description": "Free-text keyword search", + "description": "Latitude, requires lng", "in": "query", - "name": "search", - "type": "string" + "name": "lat", + "type": "number", + "x-example": 40.7538 }, { - "description": "Page size, default 25, max 50", + "description": "Longitude, requires lat", "in": "query", - "name": "limit", - "type": "integer" + "name": "lng", + "type": "number", + "x-example": -74.0022 }, { - "description": "Page offset, default 0", + "description": "Search radius in miles, 1 to 500, defaults to 50", "in": "query", - "name": "offset", - "type": "integer" + "name": "radius_miles", + "type": "number", + "x-example": 50 } ], "produces": [ @@ -407124,7 +481610,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/lululemon.storesResponseDoc" } }, "400": { @@ -407133,6 +481619,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -407145,35 +481637,23 @@ "ApiKeyAuth": [] } ], - "summary": "List a UKG Pro Recruiting tenant's job board", + "summary": "Browse lululemon's physical store directory", "tags": [ - "Jobs" + "Lululemon" ] } }, - "/jobs/workable/posting": { + "/luma/calendar": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a single Workable posting with its full HTML/text description. The id is the posting shortcode from a listing.", - "operationId": "jobs-workable-posting", + "description": "Returns public calendar details, its current tags, featured items and initial upcoming events from the public calendar page. Personal, membership, subscription and payment fields are omitted. Use luma-calendar-events for past or date-specific feeds.", + "operationId": "luma-calendar", "parameters": [ { - "description": "Workable account slug", - "in": "query", - "name": "company", - "required": true, - "type": "string", - "x-example": "zego" - }, - { - "description": "Workable posting shortcode", + "description": "Public Luma calendar slug, such as philosophy", "in": "query", - "name": "id", + "name": "slug", "required": true, - "type": "string", - "x-example": "DBB0F9D146" + "type": "string" } ], "produces": [ @@ -407183,7 +481663,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.jobResponseDoc" + "$ref": "#/definitions/luma.CalendarDetailResponse" } }, "400": { @@ -407210,51 +481690,63 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single Workable posting", + "summary": "Get a public Luma calendar", "tags": [ - "Jobs" + "Luma" ] } }, - "/jobs/workable/postings": { + "/luma/calendar-events": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists a company's public Workable postings in the shared Job shape, optionally filtered by department, location, or remote. The company is the Workable account slug from its careers URL https://apply.workable.com/{company}/. Detail (full description) is fetched per job via the single-posting endpoint.", - "operationId": "jobs-workable-postings", + "description": "Returns public future, past, or date-specific events for one calendar. `period` accepts `future`, `past`, or `specific`; the last value requires RFC3339 `after` and `before` timestamps.", + "operationId": "luma-calendar-events", "parameters": [ { - "description": "Workable account slug (careers URL)", + "description": "Calendar API id from luma-place-calendars", "in": "query", - "name": "company", + "name": "calendar_api_id", "required": true, - "type": "string", - "x-example": "zego" + "type": "string" }, { - "description": "Free-text search", + "default": "future", + "description": "Calendar event period", + "enum": [ + "future", + "past", + "specific" + ], "in": "query", - "name": "search", + "name": "period", "type": "string" }, { - "description": "Filter: department contains", + "description": "RFC3339 start time; required for period=specific", + "format": "date-time", "in": "query", - "name": "department", + "name": "after", "type": "string" }, { - "description": "Filter: location contains", + "description": "RFC3339 end time; required for period=specific", + "format": "date-time", "in": "query", - "name": "location", + "name": "before", "type": "string" }, { - "description": "Filter by remote (true or false)", + "default": 20, + "description": "Page size; 0 returns all entries in the selected period", "in": "query", - "name": "remote", - "type": "boolean" + "minimum": 0, + "name": "pagination_limit", + "type": "integer" + }, + { + "description": "Opaque cursor returned by Luma", + "in": "query", + "name": "pagination_cursor", + "type": "string" } ], "produces": [ @@ -407264,7 +481756,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/luma.PlaceEventsResponse" } }, "400": { @@ -407291,61 +481783,69 @@ "ApiKeyAuth": [] } ], - "summary": "List a company's Workable postings", + "summary": "List events for a public Luma calendar", "tags": [ - "Jobs" + "Luma" ] } }, - "/jobs/workday/board": { + "/luma/categories": { "get": { - "consumes": [ + "description": "Returns Luma's complete current public event-category list. Use each category slug with the category detail or event-feed endpoint.", + "operationId": "luma-categories", + "produces": [ "application/json" ], - "description": "Lists a company's public Workday (CXS) postings, paged via limit/offset. tenant, datacenter (wd1/wd3/wd5/...), and site all come from the careers URL https://{tenant}.wd5.myworkdayjobs.com/{site}.", - "operationId": "jobs-workday-board", - "parameters": [ - { - "description": "Workday tenant", - "in": "query", - "name": "tenant", - "required": true, - "type": "string", - "x-example": "nvidia" + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/luma.CategoriesResponse" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Workday datacenter shard (wd1, wd3, wd5, ...)", - "in": "query", - "name": "datacenter", - "required": true, - "type": "string", - "x-example": "wd5" - }, + "ApiKeyAuth": [] + } + ], + "summary": "List Luma event categories", + "tags": [ + "Luma" + ] + } + }, + "/luma/category": { + "get": { + "description": "Returns public category details and its public featured/timeline calendars. The slug must be one of `family`, `books`, `games`, `tech`, `food`, `ai`, `running`, `arts`, `climate`, `fitness`, `wellness`, or `crypto`.", + "operationId": "luma-category", + "parameters": [ { - "description": "Workday career site", + "description": "Luma category slug", + "enum": [ + "family", + "books", + "games", + "tech", + "food", + "ai", + "running", + "arts", + "climate", + "fitness", + "wellness", + "crypto" + ], "in": "query", - "name": "site", + "name": "slug", "required": true, - "type": "string", - "x-example": "NVIDIAExternalCareerSite" - }, - { - "description": "Free-text search", - "in": "query", - "name": "search", "type": "string" - }, - { - "description": "Page size, default 20, max 20", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Page offset, default 0", - "in": "query", - "name": "offset", - "type": "integer" } ], "produces": [ @@ -407355,7 +481855,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.boardResponseDoc" + "$ref": "#/definitions/luma.CategoryDetailResponse" } }, "400": { @@ -407376,51 +481876,73 @@ "ApiKeyAuth": [] } ], - "summary": "List a Workday tenant's job board", + "summary": "Get a Luma event category", "tags": [ - "Jobs" + "Luma" ] } }, - "/jobs/workday/job": { + "/luma/category-events": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a single Workday posting's full detail (description, location, req id). path is the externalPath from a board listing. tenant/datacenter/site as in the board endpoint.", - "operationId": "jobs-workday-job", + "description": "Returns public event cards in a Luma category. The category slug must be one of `family`, `books`, `games`, `tech`, `food`, `ai`, `running`, `arts`, `climate`, `fitness`, `wellness`, or `crypto`. Query, cursor, page limit, and optional coordinates mirror Luma's category feed. Follow `next_cursor` only when `has_more` is true.", + "operationId": "luma-category-events", "parameters": [ { - "description": "Workday tenant", + "description": "Luma category slug", + "enum": [ + "family", + "books", + "games", + "tech", + "food", + "ai", + "running", + "arts", + "climate", + "fitness", + "wellness", + "crypto" + ], "in": "query", - "name": "tenant", + "name": "slug", "required": true, - "type": "string", - "x-example": "nvidia" + "type": "string" }, { - "description": "Workday datacenter shard", + "description": "Luma event search text", "in": "query", - "name": "datacenter", - "required": true, - "type": "string", - "x-example": "wd5" + "name": "query", + "type": "string" }, { - "description": "Workday career site", + "default": 25, + "description": "Page size; Luma returns at most 50 entries", "in": "query", - "name": "site", - "required": true, - "type": "string", - "x-example": "NVIDIAExternalCareerSite" + "minimum": 0, + "name": "pagination_limit", + "type": "integer" }, { - "description": "Job externalPath from a board listing", + "description": "Opaque cursor returned by Luma", "in": "query", - "name": "path", - "required": true, - "type": "string", - "x-example": "/job/Israel-Tel-Aviv/Chip-Design-Engineer_JR2016289" + "name": "pagination_cursor", + "type": "string" + }, + { + "description": "Optional latitude used by Luma's nearby category feed", + "in": "query", + "maximum": 90, + "minimum": -90, + "name": "latitude", + "type": "number" + }, + { + "description": "Optional longitude used by Luma's nearby category feed", + "in": "query", + "maximum": 180, + "minimum": -180, + "name": "longitude", + "type": "number" } ], "produces": [ @@ -407430,7 +481952,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jobs.jobResponseDoc" + "$ref": "#/definitions/luma.PlaceEventsResponse" } }, "400": { @@ -407439,12 +481961,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -407457,39 +481973,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a single Workday job", + "summary": "List and search events in a Luma category", "tags": [ - "Jobs" + "Luma" ] } }, - "/jumia/categories": { + "/luma/event": { "get": { - "description": "Lists the category slugs that jumia-category accepts. Without category it returns the storefront's top-level departments; with category it returns that category's direct sub-categories, each with its numeric id. Walk the tree by passing a returned slug back as category. country is required; see jumia-countries. Jumia sits behind an anti-bot challenge that clears on only some connections, so a call can take up to about 50 seconds and may return 503; retry it.", - "operationId": "jumia-categories", + "description": "Returns public event details, categories, host display names, and ticket availability fields. Guest identities, payment data, and private calendar fields are omitted.", + "operationId": "luma-event", "parameters": [ { - "description": "Jumia country storefront", - "enum": [ - "ci", - "eg", - "ke", - "ma", - "ng", - "sn" - ], + "description": "Public Luma event id returned by an event feed", "in": "query", - "name": "country", + "name": "event_api_id", "required": true, "type": "string", - "x-example": "ng" - }, - { - "description": "Category slug whose sub-categories to list; omit for top-level departments", - "in": "query", - "name": "category", - "type": "string", - "x-example": "phones-tablets" + "x-example": "evt-Haahe4AP6d6qVEg" } ], "produces": [ @@ -407499,7 +482000,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jumia.categoriesResponseDoc" + "$ref": "#/definitions/luma.EventDetailResponse" } }, "400": { @@ -407514,12 +482015,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -407532,49 +482027,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Jumia categories", + "summary": "Get a public Luma event", "tags": [ - "Jumia" + "Luma" ] } }, - "/jumia/category": { + "/luma/place": { "get": { - "description": "Browses one Jumia category listing by slug and returns the same product cards as jumia-search, plus the category's upstream total_count and a has_next flag. Take the slug from jumia-categories (top-level departments, or a department's sub-categories). Jumia serves at most 50 pages. Jumia sits behind an anti-bot challenge that clears on only some connections, so a call can take up to about 50 seconds and may return 503; retry it. country is required; see jumia-countries.", - "operationId": "jumia-category", + "description": "Returns public place details from a Luma place page, including its name, slug, time zone, public coordinates, description, and event metadata.", + "operationId": "luma-place", "parameters": [ { - "description": "Jumia country storefront", - "enum": [ - "ci", - "eg", - "ke", - "ma", - "ng", - "sn" - ], - "in": "query", - "name": "country", - "required": true, - "type": "string", - "x-example": "ng" - }, - { - "description": "Category slug from jumia-categories", + "description": "Luma place page slug", "in": "query", - "name": "category", + "name": "slug", "required": true, "type": "string", - "x-example": "phones-tablets" - }, - { - "default": 1, - "description": "1-based result page, 1 to 50", - "in": "query", - "maximum": 50, - "minimum": 1, - "name": "page", - "type": "integer" + "x-example": "nyc" } ], "produces": [ @@ -407584,7 +482054,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jumia.listingResponseDoc" + "$ref": "#/definitions/luma.PlaceResponse" } }, "400": { @@ -407599,12 +482069,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -407617,56 +482081,24 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Jumia category", - "tags": [ - "Jumia" - ] - } - }, - "/jumia/countries": { - "get": { - "description": "Returns the Jumia country storefronts accepted by the country parameter on jumia-search, jumia-category and jumia-categories, with each storefront's domain and currency. Static metadata.", - "operationId": "jumia-countries", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/jumia.countriesResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "List supported Jumia country storefronts", + "summary": "Get a Luma place", "tags": [ - "Jumia" + "Luma" ] } }, - "/jumia/product": { + "/luma/place-calendars": { "get": { - "description": "Returns one Jumia product: name, brand, sku, images, price in the storefront's currency with original price and discount, availability, rating and rating count, category path, seller (name, id, score, followers, shipping speed), description, key features and the specification table. Pass the url returned by jumia-search or jumia-category; the storefront country is taken from the URL host. Jumia sits behind an anti-bot challenge that clears on only some connections, so a call can take up to about 50 seconds and may return 503; retry it. A product id Jumia no longer serves returns 404.", - "operationId": "jumia-product", + "description": "Returns calendars that Luma publicly lists for a place. Personal and blocked calendars are omitted.", + "operationId": "luma-place-calendars", "parameters": [ { - "description": "Absolute Jumia product URL from a search or category result", + "description": "Luma place page slug", "in": "query", - "name": "url", + "name": "slug", "required": true, "type": "string", - "x-example": "https://www.jumia.com.ng/samsung-galaxy-a07-6.7-4gb-ram128gbgb-rom-black-418619812.html" + "x-example": "nyc" } ], "produces": [ @@ -407676,7 +482108,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jumia.productResponseDoc" + "$ref": "#/definitions/luma.PlaceCalendarsResponse" } }, "400": { @@ -407691,12 +482123,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -407709,49 +482135,44 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Jumia product", + "summary": "List public calendars for a Luma place", "tags": [ - "Jumia" + "Luma" ] } }, - "/jumia/reviews": { + "/luma/place-events": { "get": { - "description": "Returns one page of a Jumia product's written, verified customer reviews (rating, title, text, date, first name of the author) with the rating summary: average rating, total ratings, total written reviews and the count of ratings per star. Reviews are 10 per page. A product with ratings but no written reviews returns an empty list with the summary. Pass the sku returned by jumia-search, jumia-category or jumia-product. Jumia sits behind an anti-bot challenge that clears on only some connections, so a call can take up to about 50 seconds and may return 503; retry it. country is required; see jumia-countries.", - "operationId": "jumia-reviews", + "description": "Returns public event cards for a Luma place. The optional query, page limit, and cursor mirror the place's public event feed. Follow the returned `next_cursor` only when `has_more` is true.", + "operationId": "luma-place-events", "parameters": [ { - "description": "Jumia country storefront", - "enum": [ - "ci", - "eg", - "ke", - "ma", - "ng", - "sn" - ], + "description": "Luma place page slug", "in": "query", - "name": "country", + "name": "place_slug", "required": true, "type": "string", - "x-example": "ng" + "x-example": "nyc" }, { - "description": "Product sku", + "description": "Luma event search text", "in": "query", - "name": "sku", - "required": true, - "type": "string", - "x-example": "SA948MP6Z6LPDNAFAMZ" + "name": "query", + "type": "string" }, { - "default": 1, - "description": "1-based page of reviews, 10 per page", + "default": 25, + "description": "Page size; Luma returns at most 50 entries", "in": "query", - "maximum": 500, - "minimum": 1, - "name": "page", + "minimum": 0, + "name": "pagination_limit", "type": "integer" + }, + { + "description": "Opaque cursor returned by Luma", + "in": "query", + "name": "pagination_cursor", + "type": "string" } ], "produces": [ @@ -407761,7 +482182,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jumia.reviewsResponseDoc" + "$ref": "#/definitions/luma.PlaceEventsResponse" } }, "400": { @@ -407776,12 +482197,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -407794,49 +482209,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get the reviews of a Jumia product", + "summary": "List and search public events for a Luma place", "tags": [ - "Jumia" + "Luma" ] } }, - "/jumia/search": { + "/macrumors/article": { "get": { - "description": "Searches a Jumia country storefront by keyword and returns one page of product cards with price in the storefront's currency, original price and discount, rating, brand, categories and badges, plus the upstream total_count and a has_next flag. Jumia serves at most 50 pages. A search with no matches returns an empty products list. Jumia sits behind an anti-bot challenge that clears on only some connections, so a call can take up to about 50 seconds and may return 503; retry it. country is required (there is no default storefront); see jumia-countries.", - "operationId": "jumia-search", + "description": "Returns a MacRumors article by `url`: a dated news post, or a `/guide/`, `/how-to/` or `/review/` page. The response has the title, description, section, authors, lead image, publish time, `updated_at` and body `paragraphs`. Roundup, author and forum URLs are rejected. Reviews have no `updated_at`, and `paywalled` is omitted.", + "operationId": "macrumors-article", "parameters": [ { - "description": "Jumia country storefront", - "enum": [ - "ci", - "eg", - "ke", - "ma", - "ng", - "sn" - ], - "in": "query", - "name": "country", - "required": true, - "type": "string", - "x-example": "ng" - }, - { - "description": "Product search keyword", + "description": "Canonical MacRumors article URL", "in": "query", - "name": "q", + "name": "url", "required": true, "type": "string", - "x-example": "wireless earbuds" - }, - { - "default": 1, - "description": "1-based result page, 1 to 50", - "in": "query", - "maximum": 50, - "minimum": 1, - "name": "page", - "type": "integer" + "x-example": "https://www.macrumors.com/2026/09/24/google-photos-wardrobe-ios/" } ], "produces": [ @@ -407846,7 +482236,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jumia.listingResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -407855,8 +482245,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -407873,57 +482263,30 @@ "ApiKeyAuth": [] } ], - "summary": "Search Jumia products", + "summary": "Get MacRumors article content", "tags": [ - "Jumia" + "MacRumors" ] } }, - "/jumia/sitemap-urls": { + "/macrumors/author": { "get": { - "description": "Returns one page of the URLs listed in a Jumia sitemap file, each with its last-modified date and first image, plus the total number of URLs in the file. A product file holds up to 16,000 product URLs; page through it with page and page_size (up to 5000). Take the file name from jumia-sitemaps. A page past the end returns an empty list. Jumia sits behind an anti-bot challenge that clears on only some connections, so a call can take up to about 50 seconds and may return 503; retry it. country is required; see jumia-countries.", - "operationId": "jumia-sitemap-urls", + "description": "Returns a MacRumors author profile, identified by `slug` (such as `juli-clover`) or a canonical `macrumors.com/author/` `url`; provide exactly one. The response has the name, `bio`, `image_url` and about 20 recent articles with title, URL, publication time and, when shown, summary and image. Unknown authors return not found.", + "operationId": "macrumors-author", "parameters": [ { - "description": "Jumia country storefront", - "enum": [ - "ci", - "eg", - "ke", - "ma", - "ng", - "sn" - ], + "description": "Author slug, e.g. juli-clover", "in": "query", - "name": "country", - "required": true, + "name": "slug", "type": "string", - "x-example": "ng" + "x-example": "juli-clover" }, { - "description": "Sitemap file name from jumia-sitemaps", + "description": "Canonical macrumors.com/author/ URL; alternative to slug", "in": "query", - "name": "sitemap", - "required": true, + "name": "url", "type": "string", - "x-example": "products-sitemap-9.xml.gz" - }, - { - "default": 1, - "description": "1-based page of URLs", - "in": "query", - "minimum": 1, - "name": "page", - "type": "integer" - }, - { - "default": 1000, - "description": "URLs per page", - "in": "query", - "maximum": 5000, - "minimum": 1, - "name": "page_size", - "type": "integer" + "x-example": "https://www.macrumors.com/author/juli-clover/" } ], "produces": [ @@ -407933,7 +482296,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jumia.sitemapURLsResponseDoc" + "$ref": "#/definitions/publicnews.macRumorsAuthorResponseDoc" } }, "400": { @@ -407948,12 +482311,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -407966,44 +482323,30 @@ "ApiKeyAuth": [] } ], - "summary": "Read the URLs in a Jumia sitemap file", + "summary": "Get a MacRumors author profile", "tags": [ - "Jumia" + "MacRumors" ] } }, - "/jumia/sitemaps": { + "/macrumors/headlines": { "get": { - "description": "Lists the sitemap files a Jumia storefront publishes: product, brand, category and curated-page (mlps) files, each with its name, type, language, last-modified date and URL. Pass a returned name to jumia-sitemap-urls to read the URLs in it. Optionally narrow to one type. Jumia sits behind an anti-bot challenge that clears on only some connections, so a call can take up to about 50 seconds and may return 503; retry it. country is required; see jumia-countries.", - "operationId": "jumia-sitemaps", + "description": "Returns the newest 20 MacRumors entries for one section. `section` is required and takes `front-page`, `guides`, `how-to` or `reviews`; other values return an invalid-params error. Each item has its title, URL, author, publication time and short summary. Items from `guides`, `how-to` and `reviews` also carry a thumbnail `image_url`.", + "operationId": "macrumors-headlines", "parameters": [ { - "description": "Jumia country storefront", + "description": "MacRumors section slug", "enum": [ - "ci", - "eg", - "ke", - "ma", - "ng", - "sn" + "front-page", + "guides", + "how-to", + "reviews" ], "in": "query", - "name": "country", + "name": "section", "required": true, "type": "string", - "x-example": "ng" - }, - { - "description": "Only list one kind of sitemap", - "enum": [ - "products", - "brands", - "categories", - "mlps" - ], - "in": "query", - "name": "type", - "type": "string" + "x-example": "front-page" } ], "produces": [ @@ -408013,7 +482356,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/jumia.sitemapsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -408022,11 +482365,37 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get MacRumors section headlines", + "tags": [ + "MacRumors" + ] + } + }, + "/macrumors/news": { + "get": { + "description": "Returns the latest 20 stories across MacRumors, with no parameters. Each item has its title, canonical article URL, author, publication time and a plain-text summary of about 300 characters. Items carry no lead image.", + "operationId": "macrumors-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "503": { "description": "Service Unavailable", @@ -408040,27 +482409,60 @@ "ApiKeyAuth": [] } ], - "summary": "List the sitemap files of a Jumia storefront", + "summary": "Get MacRumors top stories", "tags": [ - "Jumia" + "MacRumors" ] } }, - "/justeat/restaurant": { + "/macrumors/sections": { + "get": { + "description": "Lists the four MacRumors sections accepted by `macrumors-headlines`: `front-page` (all stories mixed), `guides`, `how-to` and `reviews`. Each entry has a `slug`, display `name` and `url`. Roundups, the Buyer's Guide and the forums are not sections.", + "operationId": "macrumors-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get MacRumors sections", + "tags": [ + "MacRumors" + ] + } + }, + "/macys/product/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Just Eat restaurant by `unique_name`, the slug found in a search result. The response has the restaurant id, name, address, city, postal code, country, image, primary cuisine, rating and rating count, and `is_active`, which says whether it currently accepts orders. `rating` can read `0` even when the site shows one. An unknown `unique_name` returns `404`.", - "operationId": "justeat-restaurant", + "description": "Returns one page of a Macy's product's customer reviews, plus a site-wide rating summary (rating count, average rating, recommended ratio, rating histogram) for the product. product_id is a numeric id, the same one used by GET /macys/product/{productId}. A product with zero reviews, or a well-formed but unrecognized product_id, returns a normal, empty result rather than an error.", + "operationId": "macys-product-reviews", "parameters": [ { - "description": "Restaurant slug, from a search response's unique_name field", + "description": "Numeric Macy's product id, from a product page's ?ID= query parameter", "in": "query", - "name": "unique_name", + "name": "product_id", "required": true, "type": "string", - "x-example": "mcdonalds-victorialondon" + "x-example": "15041387" + }, + { + "description": "Result page, 1-based, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -408070,7 +482472,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justeat.restaurantResponseDoc" + "$ref": "#/definitions/macys.productReviewsResponseDoc" } }, "400": { @@ -408079,8 +482481,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -408097,27 +482499,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Just Eat restaurant's detail", + "summary": "Get a Macy's product's customer reviews", "tags": [ - "Just Eat" + "Macy's" ] } }, - "/justeat/restaurant/menu": { + "/macys/product/{productId}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one restaurant's full menu grouped into categories. Every item carries a name, description, image, price, and calorie/energy text when the upstream provides it. Items with customization options (e.g. \"Dip 1/2\") carry a modifier_groups list with each option's own price. Non-restaurant stores (groceries, alcohol, pharmacy, electronics, and similar) return every item under a single \"All items\" category rather than the site's own finer-grained grouping.", - "operationId": "justeat-restaurant-menu", + "description": "Returns one Macy's product's full detail: name, brand, description, department/division, category breadcrumb, pricing (with sale detection), availability, images, aggregate rating, and every purchasable color variant with its own price. productId is a numeric id, taken from a Macy's product page's ?ID= query parameter.", + "operationId": "macys-product", "parameters": [ { - "description": "Restaurant slug, from a search response's unique_name field", - "in": "query", - "name": "unique_name", + "description": "Numeric Macy's product id, from a product page's ?ID= query parameter", + "in": "path", + "name": "productId", "required": true, "type": "string", - "x-example": "mcdonalds-victorialondon" + "x-example": "20518101" } ], "produces": [ @@ -408127,7 +482529,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justeat.menuResponseDoc" + "$ref": "#/definitions/macys.productDetailResponseDoc" } }, "400": { @@ -408142,6 +482544,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -408154,60 +482562,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Just Eat restaurant's menu with prices", + "summary": "Get a Macy's product's full detail", "tags": [ - "Just Eat" + "Macy's" ] } }, - "/justeat/search": { + "/macys/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns Just Eat's full restaurant listing for a UK postcode -- every restaurant the site's own area page carries, ordered as Just Eat's default \"best match\" sort presents them (or by sort_by, if set), not a curated subset. Each restaurant carries its unique_name (the value the restaurant and menu endpoints take), name, image, rating, delivery time window, and open-now status. A postcode with no coverage returns an empty list rather than an error.", - "operationId": "justeat-search", + "description": "Returns Macy's own search-box suggestions (typeahead) for a partial query: a flat list of suggested search phrases, no product data. A partial query with no real matches returns a normal, empty result rather than an error.", + "operationId": "macys-suggest", "parameters": [ { - "description": "UK postcode to search near", + "description": "Partial search query", "in": "query", - "name": "postcode", + "name": "query", "required": true, "type": "string", - "x-example": "SW1A 1AA" - }, - { - "description": "Restaurants to return, clamped to 100 (default 20)", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 - }, - { - "collectionFormat": "multi", - "description": "Repeatable. Just Eat's own area-page filter slugs (e.g. open_now, or a cuisine tile's slug), passed through as-is and OR'd together. Also reaches non-restaurant categories -- groceries, alcohol, pharmacy, electronics, and more -- via the same mechanism, e.g. filter=groceries. The valid slug set is specific to the postcode you are searching -- call /justeat/search/filters with the same postcode for the current, complete, location-scoped list with live result counts. An unrecognized slug narrows to a smaller or empty result rather than erroring.", - "in": "query", - "items": { - "type": "string" - }, - "name": "filter", - "type": "array", - "x-example": "pizza" - }, - { - "description": "Result order, matching the area page's own Sort by control. Default best_match.", - "enum": [ - "best_match", - "review_rating", - "distance", - "delivery_time", - "minimum_order_value", - "delivery_fee" - ], - "in": "query", - "name": "sort_by", - "type": "string", - "x-example": "distance" + "x-example": "dress" } ], "produces": [ @@ -408217,7 +482592,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justeat.searchResponseDoc" + "$ref": "#/definitions/macys.suggestResponseDoc" } }, "400": { @@ -408226,6 +482601,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -408238,27 +482619,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search Just Eat restaurants near a UK postcode", + "summary": "Get Macy's search-box suggestions", "tags": [ - "Just Eat" + "Macy's" ] } }, - "/justeat/search/filters": { + "/makeuseof/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the exact filter slugs Just Eat's own area page currently offers for a UK postcode -- star-rating thresholds, boolean toggles (open_now, new, free_delivery, halal, vegan, ...), cuisine tiles (pizza, chinese, italian, ...), and non-restaurant top-nav verticals (groceries, alcohol, pharmacy, electronics, flowers, gifts, and more) alike -- each with the live count of restaurants it currently narrows this postcode's listing to. Every filter value is the literal string /justeat/search's repeatable filter parameter accepts. The slug set is genuinely postcode-dependent: a rural postcode's own area page offers fewer cuisine tiles than central London's, because Just Eat's own frontend never advertises a filter with zero local coverage -- call this endpoint again for a different postcode rather than assume one location's slug set applies everywhere.", - "operationId": "justeat-search-filters", + "description": "Returns a MakeUseOf article by `url`, a canonical HTTPS article link. The response has the title, description, section, authors, lead image, publish and update times, the article body as `paragraphs`, and a `paywalled` flag. Section, author, tag, utility and video pages are not article URLs.", + "operationId": "makeuseof-article", "parameters": [ { - "description": "UK postcode to look up", + "description": "Canonical MakeUseOf article URL", "in": "query", - "name": "postcode", + "name": "url", "required": true, "type": "string", - "x-example": "SW1A 1AA" + "x-example": "https://www.makeuseof.com/these-websites-replace-one-off-utility-apps/" } ], "produces": [ @@ -408268,7 +482646,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justeat.filtersResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -408277,6 +482655,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -408289,27 +482673,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Just Eat's live filter slug catalog for a UK postcode", + "summary": "Get MakeUseOf article content", "tags": [ - "Just Eat" + "MakeUseOf" ] } }, - "/justwatch/age-certifications": { + "/makeuseof/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the JustWatch age certification technical names for a country, such as `PG-13` for the US. `country` is a two-letter code and defaults to `US`. An invalid country returns `400`, and an unexpectedly empty result returns `503`.", - "operationId": "justwatch-age-certifications", + "description": "Returns an author's public byline metadata, biography, social links, and recent stories from a canonical author URL. Only the first page is covered.", + "operationId": "makeuseof-author", "parameters": [ { - "default": "US", - "description": "Two-letter country code", + "description": "Canonical MakeUseOf author URL", "in": "query", - "name": "country", + "name": "url", + "required": true, "type": "string", - "x-example": "US" + "x-example": "https://www.makeuseof.com/author/oluwademilade-afolabi/" } ], "produces": [ @@ -408319,7 +482700,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.ageCertificationsResponseDoc" + "$ref": "#/definitions/publicnews.makeuseofAuthorResponseDoc" } }, "400": { @@ -408328,8 +482709,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -408346,104 +482727,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch age certifications", + "summary": "Get a MakeUseOf author profile", "tags": [ - "JustWatch" + "MakeUseOf" ] } }, - "/justwatch/discover": { + "/makeuseof/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns popular movies and shows filtered by optional genre short names, provider short names, production countries, monetization types, and release year bounds. Combine `providers` with `production_countries` to build charts such as most popular Korean or Japanese titles on a given service. Type accepts only `all`, `movie`, or `show`; monetization_types accepts only `FLATRATE`, `FREE`, `ADS`, `RENT`, or `BUY`.", - "operationId": "justwatch-discover", + "description": "Returns current MakeUseOf headlines for one category. `section` is required and takes one of 14 slugs such as `windows`, `linux`, `google-android`, `security`, `smart-home` or `news`; tag archives are not accepted. Each item has its title, URL, summary, author, publication time and image.", + "operationId": "makeuseof-headlines", "parameters": [ { - "default": "US", - "description": "Two-letter country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "US" - }, - { - "default": "en", - "description": "Two-letter language code", - "in": "query", - "name": "language", - "type": "string", - "x-example": "en" - }, - { - "description": "Maximum results, defaults to 20 and clamps to 50", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 - }, - { - "default": "all", - "description": "Title type: all, movie, show", - "enum": [ - "all", - "movie", - "show" - ], - "in": "query", - "name": "type", - "type": "string", - "x-example": "all" - }, - { - "description": "Comma-separated JustWatch genre short names", - "in": "query", - "name": "genres", - "type": "string", - "x-example": "act,scf" - }, - { - "description": "Comma-separated JustWatch provider short names", - "in": "query", - "name": "providers", - "type": "string", - "x-example": "nfx,amp" - }, - { - "description": "Comma-separated two-letter ISO production-country codes", - "in": "query", - "name": "production_countries", - "type": "string", - "x-example": "KR,JP" - }, - { - "description": "Comma-separated monetization types: FLATRATE, FREE, ADS, RENT, BUY", + "description": "MakeUseOf section slug", "enum": [ - "FLATRATE", - "FREE", - "ADS", - "RENT", - "BUY" + "windows", + "linux", + "google-android", + "apple", + "technology-explained", + "networking", + "security", + "productivity", + "creative", + "entertainment", + "streaming", + "smart-home", + "home", + "news" ], "in": "query", - "name": "monetization_types", + "name": "section", + "required": true, "type": "string", - "x-example": "FLATRATE,FREE" - }, - { - "description": "Minimum release year", - "in": "query", - "name": "year_min", - "type": "integer", - "x-example": 2020 - }, - { - "description": "Maximum release year", - "in": "query", - "name": "year_max", - "type": "integer", - "x-example": 2026 + "x-example": "windows" } ], "produces": [ @@ -408453,7 +482770,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.discoverResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -408480,45 +482797,16 @@ "ApiKeyAuth": [] } ], - "summary": "Discover JustWatch titles", + "summary": "Get MakeUseOf section headlines", "tags": [ - "JustWatch" + "MakeUseOf" ] } }, - "/justwatch/episode/by-id": { + "/makeuseof/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Looks up one JustWatch episode by its raw `id` (`tse` followed by digits, such as `tse5550494`), in the `country` (default `US`) and `language` (default `en`) you choose. Returns the title, year, episode number, description, poster, paths, and streaming offers with provider, monetization type, presentation type, price and currency. A valid id with no match returns `404`.", - "operationId": "justwatch-episode-by-id", - "parameters": [ - { - "description": "Raw JustWatch episode id matching tse[0-9]+", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "tse5550494" - }, - { - "default": "US", - "description": "Two-letter country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "US" - }, - { - "default": "en", - "description": "Two-letter language code", - "in": "query", - "name": "language", - "type": "string", - "x-example": "en" - } - ], + "description": "Returns MakeUseOf's current top stories, with no parameters. Each item has its title, canonical article URL, short summary, publication time, and author and image when available.", + "operationId": "makeuseof-news", "produces": [ "application/json" ], @@ -408526,20 +482814,46 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.episodeByIDResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get MakeUseOf top stories", + "tags": [ + "MakeUseOf" + ] + } + }, + "/makeuseof/sections": { + "get": { + "description": "Lists the 14 MakeUseOf sections accepted by `makeuseof-headlines`, including `windows`, `linux`, `apple`, `networking`, `productivity`, `streaming` and `news`. Each entry has a `slug`, display `name` and `url`. Open-ended tag archives are not sections.", + "operationId": "makeuseof-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -408559,43 +482873,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch episode by raw id", + "summary": "Get MakeUseOf RSS sections", "tags": [ - "JustWatch" + "MakeUseOf" ] } }, - "/justwatch/episode/offers": { + "/malaymail/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the streaming offers for one JustWatch episode `id` (`tse` followed by digits) across one to five comma-separated country codes in `countries` (default `US`), with `language` defaulting to `en`. Each country entry lists offers by provider, monetization type, presentation type, price and currency, with the episode details. An unknown id returns `404`.", - "operationId": "justwatch-episode-offers", + "description": "Returns a Malay Mail article by `url`, an absolute canonical link in the dated form `/news/
/////`. The response has the title, description, section, authors, lead image, publish and update times, body `paragraphs` and a `paywalled` flag.", + "operationId": "malaymail-article", "parameters": [ { - "description": "Raw JustWatch episode id matching tse[0-9]+", + "description": "Canonical Malay Mail article URL", "in": "query", - "name": "id", + "name": "url", "required": true, "type": "string", - "x-example": "tse5550494" - }, - { - "default": "US", - "description": "One to five comma-separated two-letter country codes", - "in": "query", - "name": "countries", - "type": "string", - "x-example": "US,GB" - }, - { - "default": "en", - "description": "Two-letter language code", - "in": "query", - "name": "language", - "type": "string", - "x-example": "en" + "x-example": "https://www.malaymail.com/news/malaysia/2026/10/04/sabah-gives-more-than-500-adults-second-chance-to-learn-reading-writing-counting/237637" } ], "produces": [ @@ -408605,7 +482900,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.episodeOffersResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -408638,63 +482933,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch episode offers", + "summary": "Get a Malay Mail article", "tags": [ - "JustWatch" + "Malay Mail" ] } }, - "/justwatch/genre/titles": { + "/malaymail/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists popular JustWatch titles for one genre short name in `genre`, such as `act`. `type` is `all`, `movie` or `show` (default `all`), `limit` defaults to 20 and is capped at 50, and `country` and `language` default to `US` and `en`. Each title has its id, year, path, poster, production countries and offers. Find genre names with the genres endpoint.", - "operationId": "justwatch-genre-titles", + "description": "Returns current Malay Mail headline cards for one News section. `section` is required and takes one of `malaysia`, `singapore`, `money`, `world`, `life`, `eat-drink`, `showbiz`, `opinion`, `sports`, `tech-gadgets` or `what-you-think`. Each item has its title and URL; no summary, author, time or image is returned.", + "operationId": "malaymail-headlines", "parameters": [ { - "description": "JustWatch genre short name", - "in": "query", - "name": "genre", - "required": true, - "type": "string", - "x-example": "act" - }, - { - "default": "US", - "description": "Two-letter country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "US" - }, - { - "default": "en", - "description": "Two-letter language code", - "in": "query", - "name": "language", - "type": "string", - "x-example": "en" - }, - { - "description": "Maximum results, defaults to 20 and clamps to 50", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 - }, - { - "default": "all", - "description": "Title type: all, movie, show", + "description": "Malay Mail News section slug", "enum": [ - "all", - "movie", - "show" + "malaysia", + "singapore", + "money", + "world", + "life", + "eat-drink", + "showbiz", + "opinion", + "sports", + "tech-gadgets", + "what-you-think" ], "in": "query", - "name": "type", + "name": "section", + "required": true, "type": "string", - "x-example": "all" + "x-example": "malaysia" } ], "produces": [ @@ -408704,7 +482973,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.genreTitlesResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -408731,29 +483000,54 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch genre titles", + "summary": "Get Malay Mail section headlines", "tags": [ - "JustWatch" + "Malay Mail" ] } }, - "/justwatch/genres": { + "/malaymail/news": { "get": { - "consumes": [ + "description": "Returns up to 50 current stories from Malay Mail's public all-stories RSS feed. Summaries are publisher teasers, not full article text. Use the sections, headlines, and article routes for verified public archives and story pages.", + "operationId": "malaymail-news", + "produces": [ "application/json" ], - "description": "Lists the JustWatch genres, each with its `short_name` (such as `act`) and a translated name in the `language` you choose (two-letter code, default `en`). Use the short names as the `genre` input of the genre titles endpoint. An invalid language returns `400`.", - "operationId": "justwatch-genres", - "parameters": [ + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": "en", - "description": "Two-letter language code", - "in": "query", - "name": "language", - "type": "string", - "x-example": "en" + "ApiKeyAuth": [] } ], + "summary": "Get Malay Mail top stories", + "tags": [ + "Malay Mail" + ] + } + }, + "/malaymail/sections": { + "get": { + "description": "Lists the 11 Malay Mail News sections accepted by `malaymail-headlines`, from `malaysia` and `singapore` to `eat-drink`, `tech-gadgets` and `what-you-think`. Each entry has a `slug`, display `name` and section `url`. Takes no parameters.", + "operationId": "malaymail-sections", "produces": [ "application/json" ], @@ -408761,13 +483055,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.genresResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } }, "429": { @@ -408788,70 +483076,75 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch genres", + "summary": "Get Malay Mail sections", "tags": [ - "JustWatch" + "Malay Mail" ] } }, - "/justwatch/monetization/titles": { + "/manga/rankings": { "get": { "consumes": [ "application/json" ], - "description": "Returns popular titles for one monetization type. monetization_type accepts only `FLATRATE`, `FREE`, `ADS`, `RENT`, or `BUY`; type accepts only `all`, `movie`, or `show`.", - "operationId": "justwatch-monetization-titles", + "description": "Returns a ranked list of manga from AniList. `sort` defaults to `TRENDING_DESC`; other values are `POPULARITY_DESC`, `SCORE_DESC`, `FAVOURITES_DESC`, `START_DATE_DESC` and `UPDATED_AT_DESC`. Filter by `format`, `genre` or `status`. Paged with `page` (default 1) and `per_page` (default 20, max 50); `has_next_page` shows if more exist.", + "operationId": "manga-rankings", "parameters": [ { - "description": "Monetization type: FLATRATE, FREE, ADS, RENT, BUY", + "description": "Order: TRENDING_DESC, POPULARITY_DESC, SCORE_DESC, FAVOURITES_DESC, START_DATE_DESC, UPDATED_AT_DESC. Default TRENDING_DESC.", "enum": [ - "FLATRATE", - "FREE", - "ADS", - "RENT", - "BUY" + "TRENDING_DESC", + "POPULARITY_DESC", + "SCORE_DESC", + "FAVOURITES_DESC", + "START_DATE_DESC", + "UPDATED_AT_DESC" ], "in": "query", - "name": "monetization_type", - "required": true, - "type": "string", - "x-example": "FLATRATE" + "name": "sort", + "type": "string" }, { - "default": "US", - "description": "Two-letter country code", + "description": "Format filter: MANGA, NOVEL, ONE_SHOT.", + "enum": [ + "MANGA", + "NOVEL", + "ONE_SHOT" + ], "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "name": "format", + "type": "string" }, { - "default": "en", - "description": "Two-letter language code", + "description": "Genre filter, e.g. Fantasy.", "in": "query", - "name": "language", - "type": "string", - "x-example": "en" + "name": "genre", + "type": "string" }, { - "description": "Maximum results, defaults to 20 and clamps to 50", + "description": "Status filter: FINISHED, RELEASING, NOT_YET_RELEASED, CANCELLED, HIATUS.", + "enum": [ + "FINISHED", + "RELEASING", + "NOT_YET_RELEASED", + "CANCELLED", + "HIATUS" + ], "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "name": "status", + "type": "string" }, { - "default": "all", - "description": "Title type: all, movie, show", - "enum": [ - "all", - "movie", - "show" - ], + "description": "1-based page number, default 1", "in": "query", - "name": "type", - "type": "string", - "x-example": "all" + "name": "page", + "type": "integer" + }, + { + "description": "Results per page, default 20, max 50", + "in": "query", + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -408861,7 +483154,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.monetizationTitlesResponseDoc" + "$ref": "#/definitions/anime.mangaRankingsResponseDoc" } }, "400": { @@ -408870,8 +483163,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -408888,55 +483181,53 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch monetization titles", + "summary": "Rank manga", "tags": [ - "JustWatch" + "Manga" ] } }, - "/justwatch/new": { + "/manga/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns newly available movies and shows. Type accepts only `all`, `movie`, or `show`; limit defaults to 20 and clamps to 50.", - "operationId": "justwatch-new", + "description": "Searches manga by free-text query. Returns entries: titles, scores, popularity, format, status, chapters, volumes, genres, and tags.", + "operationId": "manga-search", "parameters": [ { - "default": "US", - "description": "Two-letter country code", + "description": "Search text", "in": "query", - "name": "country", + "name": "query", + "required": true, "type": "string", - "x-example": "US" + "x-example": "Berserk" }, { - "default": "en", - "description": "Two-letter language code", + "description": "Ordering: SEARCH_MATCH, POPULARITY_DESC, SCORE_DESC, TRENDING_DESC, FAVOURITES_DESC, START_DATE_DESC. Default SEARCH_MATCH.", + "enum": [ + "SEARCH_MATCH", + "POPULARITY_DESC", + "SCORE_DESC", + "TRENDING_DESC", + "FAVOURITES_DESC", + "START_DATE_DESC" + ], "in": "query", - "name": "language", - "type": "string", - "x-example": "en" + "name": "sort", + "type": "string" }, { - "description": "Maximum results, defaults to 20 and clamps to 50", + "description": "1-based page number, default 1", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "name": "page", + "type": "integer" }, { - "default": "all", - "description": "Title type: all, movie, show", - "enum": [ - "all", - "movie", - "show" - ], + "description": "Results per page, default 10, max 50", "in": "query", - "name": "type", - "type": "string", - "x-example": "all" + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -408946,7 +483237,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.newTitlesResponseDoc" + "$ref": "#/definitions/anime.searchResponseDoc" } }, "400": { @@ -408955,8 +483246,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -408973,62 +483264,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get new JustWatch titles", + "summary": "Search manga", "tags": [ - "JustWatch" + "Manga" ] } }, - "/justwatch/popular": { + "/manga/title/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns popular movies and shows. Type accepts only `all`, `movie`, or `show`; limit defaults to 20 and clamps to 50.", - "operationId": "justwatch-popular", + "description": "Returns a manga by AniList id: titles, MyAnimeList id, scores, popularity, favourites, format, status, chapters, volumes, genres, ranked tags, dates, description, and images. Pass mal=true to additionally enrich the response with the MyAnimeList community score (mal block: score on a 0-10 scale, plus scored-by count).", + "operationId": "manga-title", "parameters": [ { - "default": "US", - "description": "Two-letter country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "US" - }, - { - "default": "en", - "description": "Two-letter language code", - "in": "query", - "name": "language", - "type": "string", - "x-example": "en" - }, - { - "description": "Maximum results, defaults to 20 and clamps to 50", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 - }, - { - "default": "all", - "description": "Title type: all, movie, show", - "enum": [ - "all", - "movie", - "show" - ], - "in": "query", - "name": "type", + "description": "AniList manga id", + "in": "path", + "name": "id", + "required": true, "type": "string", - "x-example": "all" + "x-example": "30002" }, { - "description": "Opaque next_cursor from the prior response; omit for the first page", + "description": "Enrich with the MyAnimeList community score (adds one fetch; omitted when the title has no MAL id)", "in": "query", - "name": "cursor", - "type": "string", - "x-example": "MQ==" + "name": "mal", + "type": "boolean" } ], "produces": [ @@ -409038,7 +483300,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.popularResponseDoc" + "$ref": "#/definitions/anime.mediaResponseDoc" } }, "400": { @@ -409047,8 +483309,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -409065,63 +483333,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get popular JustWatch titles", + "summary": "Get a manga", "tags": [ - "JustWatch" + "Manga" ] } }, - "/justwatch/provider/titles": { + "/manga/title/{id}/characters": { "get": { "consumes": [ "application/json" ], - "description": "Returns popular movies and shows available on one streaming provider, by JustWatch provider short name such as `nfx`, for a country (default `US`) and language (default `en`). Filter to movies or shows with `type` and cap results with `limit` (default 20, max 50). Each title has its name, year, type, poster, JustWatch URL and offers with price, currency and monetization type.", - "operationId": "justwatch-provider-titles", + "description": "Returns a manga's cast (character name, native name, billed role, image, favourites), paginated. The AniList id space is shared between anime and manga but the two do not overlap, so an anime id here returns 404 -- use GET /anime/title/{id}/characters for those.", + "operationId": "manga-title-characters", "parameters": [ { - "description": "JustWatch provider short name", - "in": "query", - "name": "provider", + "description": "AniList manga id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "nfx" - }, - { - "default": "US", - "description": "Two-letter country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "US" - }, - { - "default": "en", - "description": "Two-letter language code", - "in": "query", - "name": "language", - "type": "string", - "x-example": "en" + "x-example": "30002" }, { - "description": "Maximum results, defaults to 20 and clamps to 50", + "description": "1-based page number, default 1", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "name": "page", + "type": "integer" }, { - "default": "all", - "description": "Title type: all, movie, show", - "enum": [ - "all", - "movie", - "show" - ], + "description": "Results per page, default 10, max 50", "in": "query", - "name": "type", - "type": "string", - "x-example": "all" + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -409131,7 +483375,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.providerTitlesResponseDoc" + "$ref": "#/definitions/anime.charactersResponseDoc" } }, "400": { @@ -409140,8 +483384,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -409158,27 +483408,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch provider titles", + "summary": "List a manga's characters", "tags": [ - "JustWatch" + "Manga" ] } }, - "/justwatch/providers": { + "/manga/title/{id}/recommendations": { "get": { "consumes": [ "application/json" ], - "description": "Lists the streaming providers JustWatch tracks in a country. `country` is a two-letter code and defaults to `US`. Each provider has its id, clear name, short name, technical name and an absolute icon URL. An invalid country returns `400`.", - "operationId": "justwatch-providers", + "description": "Returns the titles AniList users recommend alongside a manga, most-recommended first, each with its community rating and full title record. Recommendations can cross media types -- a manga's list may include anime -- so read each entry's own type rather than assuming manga. An anime id here returns 404 -- use GET /anime/title/{id}/recommendations for those.", + "operationId": "manga-title-recommendations", "parameters": [ { - "default": "US", - "description": "Two-letter country code", - "in": "query", - "name": "country", + "description": "AniList manga id", + "in": "path", + "name": "id", + "required": true, "type": "string", - "x-example": "US" + "x-example": "30013" + }, + { + "description": "1-based page number, default 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Results per page, default 10, max 50", + "in": "query", + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -409188,7 +483450,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.providersResponseDoc" + "$ref": "#/definitions/anime.recommendationsResponseDoc" } }, "400": { @@ -409197,8 +483459,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -409215,50 +483483,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch providers", + "summary": "List titles recommended alongside a manga", "tags": [ - "JustWatch" + "Manga" ] } }, - "/justwatch/search": { + "/manga/title/{id}/staff": { "get": { "consumes": [ "application/json" ], - "description": "Searches JustWatch titles. Country must be a two-letter ISO code such as `US`; language must be a two-letter code such as `en`.", - "operationId": "justwatch-search", + "description": "Returns the people credited on a manga -- author, artist, assistants, and per-language translation and lettering credits -- with each person's role, occupations and image, paginated. Manga roles carry detail anime credits do not: a long-running series records volume ranges per credit (e.g. \"Story & Art (vols 1-41)\", \"Supervisor (vols 41- )\"). An anime id here returns 404 -- use GET /anime/title/{id}/staff for those.", + "operationId": "manga-title-staff", "parameters": [ { - "description": "Search query", - "in": "query", - "name": "query", + "description": "AniList manga id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "inception" - }, - { - "default": "US", - "description": "Two-letter country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "x-example": "30002" }, { - "default": "en", - "description": "Two-letter language code", + "description": "1-based page number, default 1", "in": "query", - "name": "language", - "type": "string", - "x-example": "en" + "name": "page", + "type": "integer" }, { - "description": "Maximum results, defaults to 10 and clamps to 25", + "description": "Results per page, default 10, max 50", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -409268,7 +483525,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.searchResponseDoc" + "$ref": "#/definitions/anime.staffResponseDoc" } }, "400": { @@ -409283,8 +483540,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -409301,43 +483558,84 @@ "ApiKeyAuth": [] } ], - "summary": "Search JustWatch titles", + "summary": "List a manga's staff credits", "tags": [ - "JustWatch" + "Manga" ] } }, - "/justwatch/season/by-id": { + "/marketwatch/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Looks up one JustWatch season by its raw `id` (`tss` followed by digits, such as `tss297253`), in the `country` (default `US`) and `language` (default `en`) you choose. Returns the season title, number, year, description, path, URL and poster. A valid id with no match returns `404`.", - "operationId": "justwatch-season-by-id", + "description": "Returns a MarketWatch article by `url`, a canonical HTTPS article link. The response has the title, description, section, authors, lead image, publish and update times, body `paragraphs` and a `paywalled` flag. Subscriber-only or blocked articles return an upstream error, so some URLs may fail.", + "operationId": "marketwatch-article", "parameters": [ { - "description": "Raw JustWatch season id matching tss[0-9]+", + "description": "Canonical MarketWatch article URL", "in": "query", - "name": "id", + "name": "url", "required": true, "type": "string", - "x-example": "tss297253" + "x-example": "https://www.marketwatch.com/story/example" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": "US", - "description": "Two-letter country code", + "ApiKeyAuth": [] + } + ], + "summary": "Get MarketWatch article content", + "tags": [ + "MarketWatch" + ] + } + }, + "/marketwatch/author": { + "get": { + "description": "Returns a MarketWatch author profile, identified by `slug` (such as `hannah-pedone`) or a canonical `marketwatch.com/author/` `url`; provide exactly one. The response has the name, job title, bio, `works_for` and one page of recent articles with title and URL. The `?mod=` attribution query is removed from article URLs.", + "operationId": "marketwatch-author", + "parameters": [ + { + "description": "Author slug, e.g. hannah-pedone", "in": "query", - "name": "country", + "name": "slug", "type": "string", - "x-example": "US" + "x-example": "hannah-pedone" }, { - "default": "en", - "description": "Two-letter language code", + "description": "Canonical marketwatch.com/author/ URL; alternative to slug", "in": "query", - "name": "language", + "name": "url", "type": "string", - "x-example": "en" + "x-example": "https://www.marketwatch.com/author/hannah-pedone" } ], "produces": [ @@ -409347,7 +483645,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.seasonByIDResponseDoc" + "$ref": "#/definitions/publicnews.marketWatchAuthorResponseDoc" } }, "400": { @@ -409362,12 +483660,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -409380,43 +483672,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch season by raw id", + "summary": "Get a MarketWatch author profile", "tags": [ - "JustWatch" + "MarketWatch" ] } }, - "/justwatch/season/episodes": { + "/marketwatch/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the episodes of a JustWatch season given as `season_id` (`tss` followed by digits), with `country` defaulting to `US` and `language` to `en`. Each episode has its number, title, description and streaming offers with provider, price and currency. Path, URL and poster appear only when JustWatch has them for that episode. An unknown season returns `404`.", - "operationId": "justwatch-season-episodes", + "description": "Returns current MarketWatch headlines for one section. `section` is required and takes `latest-news`, `markets`, `investing`, `personal-finance`, `economy-politics`, `technology`, `retirement` or `real-estate`. Each item has its title, URL, summary, author, publication time and image where available.", + "operationId": "marketwatch-headlines", "parameters": [ { - "description": "Raw JustWatch season id matching tss[0-9]+", + "description": "MarketWatch section slug", + "enum": [ + "latest-news", + "markets", + "investing", + "personal-finance", + "economy-politics", + "technology", + "retirement", + "real-estate" + ], "in": "query", - "name": "season_id", + "name": "section", "required": true, "type": "string", - "x-example": "tss297253" - }, - { - "default": "US", - "description": "Two-letter country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "US" - }, - { - "default": "en", - "description": "Two-letter language code", - "in": "query", - "name": "language", - "type": "string", - "x-example": "en" + "x-example": "latest-news" } ], "produces": [ @@ -409426,7 +483709,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.seasonEpisodesResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -409435,16 +483718,36 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } - }, - "429": { - "description": "Too Many Requests", + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get MarketWatch section headlines", + "tags": [ + "MarketWatch" + ] + } + }, + "/marketwatch/news": { + "get": { + "description": "Returns MarketWatch's current top stories, with no parameters. Each item has its title, URL, summary, author, publication time and image where available. Use `marketwatch-headlines` to read a single section instead.", + "operationId": "marketwatch-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -409459,43 +483762,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch season episodes", + "summary": "Get MarketWatch top stories", "tags": [ - "JustWatch" + "MarketWatch" ] } }, - "/justwatch/show/seasons": { + "/marketwatch/sections": { "get": { - "consumes": [ + "description": "Lists the eight MarketWatch sections accepted by `marketwatch-headlines`: `latest-news`, `markets`, `investing`, `personal-finance`, `economy-politics`, `technology`, `retirement` and `real-estate`. Each entry has a `slug`, display `name` and section `url`.", + "operationId": "marketwatch-sections", + "produces": [ "application/json" ], - "description": "Lists the seasons of a JustWatch show given as `show_id` (`ts` followed by digits, such as `ts287292`), with `country` defaulting to `US` and `language` to `en`. Each season has its number, title, year, description, path and poster. The show itself comes back with genres, scoring, runtime and offers. An unknown show returns `404`.", - "operationId": "justwatch-show-seasons", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get MarketWatch sections", + "tags": [ + "MarketWatch" + ] + } + }, + "/mashable/article": { + "get": { + "description": "Returns public Mashable article metadata and body paragraphs from a canonical article URL. Mashable articles are free to read, so the full body is returned.", + "operationId": "mashable-article", "parameters": [ { - "description": "Raw JustWatch show id matching ts[0-9]+", + "description": "Canonical Mashable article URL", "in": "query", - "name": "show_id", + "name": "url", "required": true, "type": "string", - "x-example": "ts287292" - }, - { - "default": "US", - "description": "Two-letter country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "US" - }, - { - "default": "en", - "description": "Two-letter language code", - "in": "query", - "name": "language", - "type": "string", - "x-example": "en" + "x-example": "https://mashable.com/tech/openai-hack-australian-government-ai-agent" } ], "produces": [ @@ -409505,7 +483815,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.showSeasonsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -409520,12 +483830,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -409538,33 +483842,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch show seasons", + "summary": "Get Mashable article content", "tags": [ - "JustWatch" + "Mashable" ] } }, - "/justwatch/title": { + "/mashable/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the details of a JustWatch movie or show. Pass exactly one of `path` (such as `/us/movie/inception`) or `url` (an absolute JustWatch address). The response has the title, year, genres, runtime, content rating, `scoring` (IMDb and TMDB scores, tomato meter, JustWatch rating) and current offers. Titles with no offers still return metadata; a missing page returns `404`.", - "operationId": "justwatch-title", + "description": "Returns one Mashable author's public profile (name, job title, biography, image, social links) plus one page of their recent articles. Profile fields are only present on page 1.", + "operationId": "mashable-author", "parameters": [ { - "description": "JustWatch title path", + "description": "Author slug, e.g. amanda-yeo", "in": "query", - "name": "path", + "name": "slug", "type": "string", - "x-example": "/us/movie/inception" + "x-example": "amanda-yeo" }, { - "description": "Absolute https://www.justwatch.com title URL", + "description": "Canonical mashable.com/author/ URL; alternative to slug", "in": "query", "name": "url", "type": "string", - "x-example": "https://www.justwatch.com/us/movie/inception" + "x-example": "https://mashable.com/author/amanda-yeo" + }, + { + "default": 1, + "description": "1-based page number of the article list", + "in": "query", + "name": "page", + "type": "integer" } ], "produces": [ @@ -409574,7 +483882,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.titleResponseDoc" + "$ref": "#/definitions/publicnews.mashableAuthorResponseDoc" } }, "400": { @@ -409589,12 +483897,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -409607,33 +483909,68 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch title details", + "summary": "Get a Mashable author profile", "tags": [ - "JustWatch" + "Mashable" ] } }, - "/justwatch/title/analysis": { + "/mashable/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Fetches a JustWatch title page and summarizes provider availability, monetization buckets, formats, price ranges, and best rent/buy/free/subscription options. Pass exactly one of `path` or `url`.", - "operationId": "justwatch-title-analysis", + "description": "Returns fresh Mashable headlines from one public category RSS feed. Sponsored partner posts, shopping roundups, reviews, and video pages are not included.", + "operationId": "mashable-headlines", "parameters": [ { - "description": "JustWatch title path", - "in": "query", - "name": "path", - "type": "string", - "x-example": "/us/movie/inception" - }, - { - "description": "Absolute https://www.justwatch.com title URL", + "description": "Mashable category slug", + "enum": [ + "android", + "animals", + "apple", + "cannabis", + "celebrities", + "climate-change", + "covid-19", + "desktops", + "digital-culture", + "education", + "entertainment", + "fitness", + "games", + "gaming", + "gaming-consoles", + "gender", + "headphones", + "health-wellness", + "house-home", + "laptops", + "lgbtq", + "life", + "memes", + "mental-health", + "mobile", + "movies", + "podcasts", + "science", + "sex", + "sex-dating-relationships", + "smart-home", + "social-good", + "social-media", + "space", + "speakers", + "tablets", + "tech", + "tech-industry", + "transportation", + "tv-shows", + "tvs", + "wifirouters" + ], "in": "query", - "name": "url", + "name": "section", + "required": true, "type": "string", - "x-example": "https://www.justwatch.com/us/movie/inception" + "x-example": "android" } ], "produces": [ @@ -409643,7 +483980,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.analysisResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -409652,11 +483989,37 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Mashable section headlines", + "tags": [ + "Mashable" + ] + } + }, + "/mashable/news": { + "get": { + "description": "Returns fresh Mashable top stories from the public all-stories RSS feed. Mashable articles are free to read; sponsored partner posts, shopping roundups, reviews, and video pages are not included.", + "operationId": "mashable-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -409676,43 +484039,115 @@ "ApiKeyAuth": [] } ], - "summary": "Analyze JustWatch title availability", + "summary": "Get Mashable top stories", "tags": [ - "JustWatch" + "Mashable" ] } }, - "/justwatch/title/by-id": { + "/mashable/sections": { + "get": { + "description": "Returns the public Mashable category taxonomy accepted by the headlines endpoint. Only categories that publish a working public RSS feed are listed.", + "operationId": "mashable-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Mashable sections", + "tags": [ + "Mashable" + ] + } + }, + "/maxpreps/rankings-groupings": { "get": { "consumes": [ "application/json" ], - "description": "Looks up a JustWatch movie or show by its raw `id` (`tm` or `ts` followed by digits, such as `tm92641`), with `country` defaulting to `US` and `language` to `en`. Returns the title, year, genres, runtime, content rating, description, scoring, and offers with provider, monetization type, price and currency. A valid id with no match returns `404`.", - "operationId": "justwatch-title-by-id", + "description": "Returns one state season's ranking groupings: the league/section/division/athlete naming aliases, the state divisions, the associations and the designated market areas, each with its id and canonical rankings/scoreboard URLs. This is the discovery surface for the sectionId, stateDivisionId, associationId and dmaId values maxpreps-scoreboard and maxpreps-team-rankings accept.", + "operationId": "maxpreps-rankings-groupings", "parameters": [ { - "description": "Raw JustWatch movie/show id matching tm[0-9]+ or ts[0-9]+", + "description": "State code from maxpreps-states", + "enum": [ + "AL", + "AK", + "AZ", + "AR", + "CA", + "CO", + "CT", + "DE", + "FL", + "GA", + "HI", + "ID", + "IL", + "IN", + "IA", + "KS", + "KY", + "LA", + "ME", + "MD", + "MA", + "MI", + "MN", + "MS", + "MO", + "MT", + "NE", + "NV", + "NH", + "NJ", + "NM", + "NY", + "NC", + "ND", + "OH", + "OK", + "OR", + "PA", + "RI", + "SC", + "SD", + "TN", + "TX", + "UT", + "VT", + "VA", + "WA", + "DC", + "WV", + "WI", + "WY", + "NN", + "PS" + ], "in": "query", - "name": "id", + "name": "stateCode", "required": true, - "type": "string", - "x-example": "tm92641" - }, - { - "default": "US", - "description": "Two-letter country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "type": "string" }, { - "default": "en", - "description": "Two-letter language code", + "description": "Sport-season id for the ranked team season example(2286cd80-c46d-4739-8dd1-92a67ca8daa7)", "in": "query", - "name": "language", + "name": "sportSeasonId", + "required": true, "type": "string", - "x-example": "en" + "x-example": "2286cd80-c46d-4739-8dd1-92a67ca8daa7" } ], "produces": [ @@ -409722,7 +484157,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.titleResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/maxpreps.RankingsGroupingsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -409755,45 +484202,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch title by raw id", + "summary": "MaxPreps ranking groupings for a state season", "tags": [ - "JustWatch" + "MaxPreps" ] } }, - "/justwatch/title/media": { + "/maxpreps/request-enums": { "get": { "consumes": [ "application/json" ], - "description": "Returns the media for a JustWatch movie or show `id` (`tm` or `ts` followed by digits): credits with role, name, character and person id, video clips with provider and URL, and backdrop image URLs. `country` defaults to `US` and `language` to `en`. YouTube clips carry a watch URL. An unknown id returns `404`.", - "operationId": "justwatch-title-media", - "parameters": [ - { - "description": "Raw JustWatch movie/show id matching tm[0-9]+ or ts[0-9]+", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "tm92641" - }, - { - "default": "US", - "description": "Two-letter country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "US" - }, - { - "default": "en", - "description": "Two-letter language code", - "in": "query", - "name": "language", - "type": "string", - "x-example": "en" - } - ], + "description": "Returns every closed request value set the MaxPreps routes validate locally: the 53 state codes, the 64 gender+sport tokens, the three genders, the three team levels, the two school-search sort orders and the seven scoreboard contexts with the identifier kind each context's id parameter must carry. Values were cold-replay verified on 2026-11-09 and are covered by exact-set tests. No upstream call is made.", + "operationId": "maxpreps-request-enums", "produces": [ "application/json" ], @@ -409801,7 +484222,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.titleMediaResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/maxpreps.RequestEnumsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -409834,43 +484267,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch title media", + "summary": "MaxPreps closed request enum values", "tags": [ - "JustWatch" + "MaxPreps" ] } }, - "/justwatch/title/offers": { + "/maxpreps/school": { "get": { "consumes": [ "application/json" ], - "description": "Returns the streaming offers for a JustWatch movie or show `id` across one to five comma-separated country codes in `countries` (default `US`), with `language` defaulting to `en`. Each country entry has its offers (provider, monetization type, presentation type, price, currency) and the title details. An unknown id returns `404`.", - "operationId": "justwatch-title-offers", + "description": "Returns one school's institutional record by schoolId: name, address, city, ZIP, state, colours, mascot, enrollment, school type and the governing association (id, name, abbreviation, URL). Use it after maxpreps-school-search to resolve the school behind a team.", + "operationId": "maxpreps-school", "parameters": [ { - "description": "Raw JustWatch movie/show id matching tm[0-9]+ or ts[0-9]+", + "description": "School id from maxpreps-school-search or maxpreps-school-zip-search example(7bdc339f-7cbf-4728-b0c8-ed898929cf68)", "in": "query", - "name": "id", + "name": "schoolId", "required": true, "type": "string", - "x-example": "tm92641" - }, - { - "default": "US", - "description": "One to five comma-separated two-letter country codes", - "in": "query", - "name": "countries", - "type": "string", - "x-example": "US,GB" - }, - { - "default": "en", - "description": "Two-letter language code", - "in": "query", - "name": "language", - "type": "string", - "x-example": "en" + "x-example": "7bdc339f-7cbf-4728-b0c8-ed898929cf68" } ], "produces": [ @@ -409880,7 +484297,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.titleOffersResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/maxpreps.SchoolResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -409913,50 +484342,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get JustWatch title offers", + "summary": "MaxPreps school record by id", "tags": [ - "JustWatch" + "MaxPreps" ] } }, - "/justwatch/title/similar": { + "/maxpreps/school-contests": { "get": { "consumes": [ "application/json" ], - "description": "Lists titles similar to a JustWatch movie or show `id` (`tm` or `ts` followed by digits). `limit` defaults to 10 and is capped at 25; `country` defaults to `US` and `language` to `en`. Each result has its id, type, title, year, path, poster, production countries and offers. An unknown id returns `404`.", - "operationId": "justwatch-title-similar", + "description": "Returns a school's recent and upcoming contests across sports: contest id, canonical URL, timestamp, sport/gender/season/year, team level, contest state, TBA flags, home/away type and both teams with score, result and record. The source caps the list with maxLimit and returns the most relevant contests first.", + "operationId": "maxpreps-school-contests", "parameters": [ { - "description": "Raw JustWatch movie/show id matching tm[0-9]+ or ts[0-9]+", + "description": "School id from maxpreps-school-search or maxpreps-school-zip-search example(7bdc339f-7cbf-4728-b0c8-ed898929cf68)", "in": "query", - "name": "id", + "name": "schoolId", "required": true, "type": "string", - "x-example": "tm92641" - }, - { - "default": "US", - "description": "Two-letter country code", - "in": "query", - "name": "country", - "type": "string", - "x-example": "US" - }, - { - "default": "en", - "description": "Two-letter language code", - "in": "query", - "name": "language", - "type": "string", - "x-example": "en" + "x-example": "7bdc339f-7cbf-4728-b0c8-ed898929cf68" }, { - "description": "Maximum results, defaults to 10 and clamps to 25", + "description": "Maximum number of contests from 1 to 100; defaults to 25 example(5)", "in": "query", - "name": "limit", + "name": "maxLimit", "type": "integer", - "x-example": 10 + "x-example": 5 } ], "produces": [ @@ -409966,7 +484379,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/justwatch.similarTitlesResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/maxpreps.SchoolContestsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -409999,27 +484424,110 @@ "ApiKeyAuth": [] } ], - "summary": "Get similar JustWatch titles", + "summary": "MaxPreps school recent and upcoming contests", "tags": [ - "JustWatch" + "MaxPreps" ] } }, - "/kalshi/event/{event_ticker}": { + "/maxpreps/school-proximal": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Kalshi event by `event_ticker` (such as `KXELONMARS-99`) together with its markets. The event has its series ticker, title, subtitle, category, strike period and mutually-exclusive flag; each market has prices, bid and ask, volume, open interest, status and rules. An unknown ticker returns a not-found error.", - "operationId": "kalshi-event", + "description": "Returns the MaxPreps schools near one school, using that school as the proximity origin, with the same school record shape as maxpreps-school-search: identity, location, colours, mascot, enrollment and each school's sport-season ids. Offset pagination with maxResults and startFrom; optional name, distance, ZIP, season and state-scope filters.", + "operationId": "maxpreps-school-proximal", "parameters": [ { - "description": "Kalshi event ticker", - "in": "path", - "name": "event_ticker", + "description": "School id used as the proximity origin example(7bdc339f-7cbf-4728-b0c8-ed898929cf68)", + "in": "query", + "name": "schoolId", "required": true, "type": "string", - "x-example": "KXELONMARS-99" + "x-example": "7bdc339f-7cbf-4728-b0c8-ed898929cf68" + }, + { + "description": "Optional school-name filter inside the radius example(lincoln)", + "in": "query", + "name": "searchText", + "type": "string", + "x-example": "lincoln" + }, + { + "description": "Optional maximum distance in metres example(40000)", + "in": "query", + "name": "maxDistance", + "type": "integer", + "x-example": 40000 + }, + { + "description": "Optional sort order: Distance or Name", + "enum": [ + "Distance", + "Name" + ], + "in": "query", + "name": "sortOrder", + "type": "string" + }, + { + "description": "Optional all-season id from maxpreps-sports example(22e2b335-334e-4d4d-9f67-a0f716bb1ccd)", + "in": "query", + "name": "allSeasonId", + "type": "string", + "x-example": "22e2b335-334e-4d4d-9f67-a0f716bb1ccd" + }, + { + "description": "Optional sport-season id to scope returned teams example(2286cd80-c46d-4739-8dd1-92a67ca8daa7)", + "in": "query", + "name": "sportSeasonId", + "type": "string", + "x-example": "2286cd80-c46d-4739-8dd1-92a67ca8daa7" + }, + { + "description": "Optional five-digit US ZIP code example(90210)", + "in": "query", + "name": "zipCode", + "type": "string", + "x-example": "90210" + }, + { + "description": "Search by state instead of radius", + "in": "query", + "name": "byState", + "type": "boolean" + }, + { + "description": "Include deleted schools", + "in": "query", + "name": "includeDeleted", + "type": "boolean" + }, + { + "description": "Only historically published schools", + "in": "query", + "name": "historicalOnly", + "type": "boolean" + }, + { + "description": "Only published schools", + "in": "query", + "name": "publishedOnly", + "type": "boolean" + }, + { + "description": "Page size from 1 to 200; defaults to 50 example(25)", + "in": "query", + "name": "maxResults", + "type": "integer", + "x-example": 25 + }, + { + "description": "Zero-based offset; defaults to 0 example(0)", + "in": "query", + "name": "startFrom", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -410029,7 +484537,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.eventResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/maxpreps.SchoolProximalResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -410050,12 +484570,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -410068,57 +484582,90 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi event detail", + "summary": "MaxPreps schools near a school", "tags": [ - "Kalshi" + "MaxPreps" ] } }, - "/kalshi/event/{event_ticker}/history": { + "/maxpreps/school-search": { "get": { "consumes": [ "application/json" ], - "description": "Returns candlesticks for the markets in a Kalshi event, grouped by market, for `event_ticker`. `start_ts` defaults to 7 days ago, `end_ts` to now, `period_interval` to 1440 minutes, and `series_ticker` to the ticker prefix before the last dash. Each candle has price, yes bid and ask, volume and open interest. Ranges are capped at 366 days.", - "operationId": "kalshi-event-history", + "description": "Searches MaxPreps schools by name and returns school records with identity, location, colours, mascot, enrollment and the sport-season ids of the school's teams. Offset pagination with maxResults and startFrom; sortOrder Name sorts alphabetically, Distance requires schoolId and returns rows nearest to that school. This is the primary discovery surface for schoolId and team sportSeasonId values.", + "operationId": "maxpreps-school-search", "parameters": [ { - "description": "Kalshi event ticker", - "in": "path", - "name": "event_ticker", + "description": "School-name search text; * browses the whole directory example(lincoln)", + "in": "query", + "name": "query", "required": true, "type": "string", - "x-example": "KXELONMARS-99" + "x-example": "lincoln" }, { - "description": "Kalshi series ticker. Defaults to the event ticker prefix before the last dash.", + "description": "Sort order: Distance or Name; Distance requires schoolId", + "enum": [ + "Distance", + "Name" + ], "in": "query", - "name": "series_ticker", + "name": "sortOrder", "type": "string" }, { - "description": "Unix start timestamp in seconds. Defaults to 7 days ago.", + "description": "School id used as the distance origin; required when sortOrder is Distance example(7bdc339f-7cbf-4728-b0c8-ed898929cf68)", "in": "query", - "name": "start_ts", - "type": "integer" + "name": "schoolId", + "type": "string", + "x-example": "7bdc339f-7cbf-4728-b0c8-ed898929cf68" }, { - "description": "Unix end timestamp in seconds. Defaults to now.", + "description": "Optional all-season id from maxpreps-sports to scope returned teams example(22e2b335-334e-4d4d-9f67-a0f716bb1ccd)", "in": "query", - "name": "end_ts", - "type": "integer" + "name": "allSeasonId", + "type": "string", + "x-example": "22e2b335-334e-4d4d-9f67-a0f716bb1ccd" }, { - "description": "Candlestick interval in minutes. Default: 1440.", + "description": "Optional five-digit US ZIP code example(90210)", "in": "query", - "name": "period_interval", - "type": "integer" + "name": "zipCode", + "type": "string", + "x-example": "90210" }, { - "description": "Include the latest candle before start_ts when supported upstream.", + "description": "Include deleted schools", "in": "query", - "name": "include_latest_before_start", + "name": "includeDeleted", + "type": "boolean" + }, + { + "description": "Only historically published schools", + "in": "query", + "name": "historicalOnly", + "type": "boolean" + }, + { + "description": "Only published schools", + "in": "query", + "name": "publishedOnly", "type": "boolean" + }, + { + "description": "Page size from 1 to 200; defaults to 50 example(25)", + "in": "query", + "name": "maxResults", + "type": "integer", + "x-example": 25 + }, + { + "description": "Zero-based offset; defaults to 0 example(0)", + "in": "query", + "name": "startFrom", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -410128,7 +484675,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.eventHistoryResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/maxpreps.SchoolSearchResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -410149,12 +484708,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -410167,27 +484720,27 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi event history", + "summary": "Search MaxPreps schools by name", "tags": [ - "Kalshi" + "MaxPreps" ] } }, - "/kalshi/event/{event_ticker}/metadata": { + "/maxpreps/school-seasons": { "get": { "consumes": [ "application/json" ], - "description": "Returns the media and market metadata for one Kalshi event by `event_ticker`. The response has the event image and featured image, a color code and image for each market, settlement sources with name and URL, and competition context when it applies. An unknown ticker returns a not-found error.", - "operationId": "kalshi-event-metadata", + "description": "Returns every sport-season entry one school publishes: one row per team at each level and year, with the sportSeasonId, allSeasonId, gender, sport, level, teamLevel, season and year, and the canonical team URL. This is the discovery surface for the sportSeasonId values that maxpreps-team, maxpreps-team-schedule, maxpreps-team-stat-leaders, maxpreps-team-roster-summary, maxpreps-team-next-contest and maxpreps-team-context require.", + "operationId": "maxpreps-school-seasons", "parameters": [ { - "description": "Kalshi event ticker", - "in": "path", - "name": "event_ticker", + "description": "School id from maxpreps-school-search or maxpreps-school-zip-search example(7bdc339f-7cbf-4728-b0c8-ed898929cf68)", + "in": "query", + "name": "schoolId", "required": true, "type": "string", - "x-example": "KXELONMARS-99" + "x-example": "7bdc339f-7cbf-4728-b0c8-ed898929cf68" } ], "produces": [ @@ -410197,7 +484750,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.eventMetadataResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/maxpreps.SchoolSeasonsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -410207,19 +484772,13 @@ } }, "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -410236,78 +484795,93 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi event metadata", + "summary": "MaxPreps school sport seasons", "tags": [ - "Kalshi" + "MaxPreps" ] } }, - "/kalshi/events": { + "/maxpreps/school-zip-search": { "get": { "consumes": [ "application/json" ], - "description": "Lists Kalshi events, up to `limit` rows (default 25, max 200), continued with `cursor`. Filter by `series_ticker`, `category`, `status` (`open`, `closed` or `settled`), `min_close_ts` and `min_updated_ts`. `with_nested_markets` adds each event's markets. Each event has its ticker, title, category and strike period. A `cursor` is returned when more rows exist.", - "operationId": "kalshi-events", + "description": "Returns the MaxPreps schools around one five-digit US ZIP code with the same school record shape as maxpreps-school-search: identity, location, colours, mascot, enrollment and each school's sport-season ids. Offset pagination with startFrom; optional name, city and distance filters. Use it when a caller starts from a location rather than a school name.", + "operationId": "maxpreps-school-zip-search", "parameters": [ { - "description": "Rows to return, default 25, max 200", + "description": "Five-digit US ZIP code example(90210)", "in": "query", - "name": "limit", - "type": "integer" + "name": "zipCode", + "required": true, + "type": "string", + "x-example": "90210" }, { - "description": "Pagination cursor from a previous Kalshi response", + "description": "Optional school-name filter example(lincoln)", "in": "query", - "name": "cursor", - "type": "string" + "name": "searchText", + "type": "string", + "x-example": "lincoln" }, { - "description": "Kalshi series ticker filter", + "description": "Optional maximum distance in metres example(40000)", "in": "query", - "name": "series_ticker", - "type": "string" + "name": "maxDistance", + "type": "integer", + "x-example": 40000 }, { - "description": "Kalshi category filter", + "description": "Optional all-season id from maxpreps-sports example(22e2b335-334e-4d4d-9f67-a0f716bb1ccd)", "in": "query", - "name": "category", - "type": "string" + "name": "allSeasonId", + "type": "string", + "x-example": "22e2b335-334e-4d4d-9f67-a0f716bb1ccd" }, { - "description": "Event status filter", - "enum": [ - "open", - "closed", - "settled" - ], + "description": "Optional sport-season id to scope returned teams example(2286cd80-c46d-4739-8dd1-92a67ca8daa7)", "in": "query", - "name": "status", - "type": "string" + "name": "sportSeasonId", + "type": "string", + "x-example": "2286cd80-c46d-4739-8dd1-92a67ca8daa7" }, { - "description": "Include nested market rows when supported upstream", + "description": "Search by state instead of radius", "in": "query", - "name": "with_nested_markets", + "name": "searchByState", "type": "boolean" }, { - "description": "Include event milestones when supported upstream", + "description": "Optional city filter example(Beverly Hills)", "in": "query", - "name": "with_milestones", + "name": "searchCity", + "type": "string", + "x-example": "Beverly Hills" + }, + { + "description": "Include deleted schools", + "in": "query", + "name": "includeDeleted", "type": "boolean" }, { - "description": "Minimum event close Unix timestamp in seconds", + "description": "Only historically published schools", "in": "query", - "name": "min_close_ts", - "type": "integer" + "name": "historicalOnly", + "type": "boolean" }, { - "description": "Minimum event update Unix timestamp in seconds", + "description": "Only published schools", "in": "query", - "name": "min_updated_ts", - "type": "integer" + "name": "publishedOnly", + "type": "boolean" + }, + { + "description": "Zero-based offset; defaults to 0 example(0)", + "in": "query", + "name": "startFrom", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -410317,7 +484891,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.eventsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/maxpreps.SchoolZipSearchResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -410338,12 +484924,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -410356,31 +484936,75 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi events", + "summary": "List MaxPreps schools near a ZIP code", "tags": [ - "Kalshi" + "MaxPreps" ] } }, - "/kalshi/events/multivariate": { + "/maxpreps/scoreboard": { "get": { "consumes": [ "application/json" ], - "description": "Lists Kalshi multivariate events, which the regular events list leaves out, up to `limit` rows (default 25, max 200), continued with `cursor`. Each event has its ticker, series ticker, title, subtitle, category and markets. A `cursor` is returned when more rows exist.", - "operationId": "kalshi-multivariate-events", + "description": "Returns the scoreboard for one context (National, State, Section, StateDivision, Association, League or DMA) and one genderSport and level: the yesterday/today/tomorrow scoreboard canonical URLs and the contest ids grouped by date. Use the ids to discover which games exist on a date; this route returns the id index, not the contest detail.", + "operationId": "maxpreps-scoreboard", "parameters": [ { - "description": "Rows to return, default 25, max 200", + "description": "Scoreboard context: National, State, Section, StateDivision, Association, League or DMA; see maxpreps-request-enums for the id kind each context needs", + "enum": [ + "National", + "State", + "Section", + "StateDivision", + "Association", + "League", + "DMA" + ], "in": "query", - "name": "limit", - "type": "integer" + "name": "context", + "required": true, + "type": "string" }, { - "description": "Pagination cursor from a previous Kalshi response", + "description": "Context identifier: state code for National (use NN) and State, otherwise a section/state-division/association/league/DMA id example(FL)", "in": "query", - "name": "cursor", + "name": "id", + "type": "string", + "x-example": "FL" + }, + { + "description": "Gender+sport value from maxpreps-sports in lowercase, for example boys,football. Case-insensitive; see maxpreps-sports for all 64 values example(boys,football)", + "in": "query", + "name": "genderSport", + "required": true, + "type": "string", + "x-example": "boys,football" + }, + { + "description": "Team level: Varsity, JV or Freshman", + "enum": [ + "Varsity", + "JV", + "Freshman" + ], + "in": "query", + "name": "level", + "required": true, "type": "string" + }, + { + "description": "Exclude contests whose date is still TBA", + "in": "query", + "name": "excludeTbaDate", + "type": "boolean" + }, + { + "description": "Number of nationally ranked teams to include for a National context scoreboard example(10)", + "in": "query", + "name": "nationalTeamCount", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -410390,7 +485014,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.multivariateEventsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/maxpreps.ScoreboardResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -410411,12 +485047,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -410429,19 +485059,36 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi multivariate events", + "summary": "MaxPreps scoreboard contest ids by date", "tags": [ - "Kalshi" + "MaxPreps" ] } }, - "/kalshi/exchange/schedule": { + "/maxpreps/season-navigation": { "get": { "consumes": [ "application/json" ], - "description": "Returns the Kalshi exchange schedule, with no inputs. `standard_hours` are date-bounded blocks listing `open_time` and `close_time` for each weekday, and `maintenance_windows` list start time, end time and reason. The maintenance list can be empty. Informational only.", - "operationId": "kalshi-exchange-schedule", + "description": "Returns the season navigation tree for one allSeasonId: the resolved season name and the site's own navigation sections (Football Home, Teams, Players, States, Scores, Rankings, Stat leaders, Photos, Playoffs, Videos, Record Book, News, Live Streams) with their links. Use it to resolve the season an allSeasonId belongs to and the sport/season pages the site itself links.", + "operationId": "maxpreps-season-navigation", + "parameters": [ + { + "description": "All-season id from maxpreps-sports (one per gender+sport) example(22e2b335-334e-4d4d-9f67-a0f716bb1ccd)", + "in": "query", + "name": "allSeasonId", + "required": true, + "type": "string", + "x-example": "22e2b335-334e-4d4d-9f67-a0f716bb1ccd" + }, + { + "description": "Optional season name as the navigation reports it example(Fall)", + "in": "query", + "name": "season", + "type": "string", + "x-example": "Fall" + } + ], "produces": [ "application/json" ], @@ -410449,7 +485096,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.exchangeScheduleResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/maxpreps.SeasonNavigationResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -410470,12 +485129,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -410488,19 +485141,19 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi exchange schedule", + "summary": "MaxPreps season navigation tree", "tags": [ - "Kalshi" + "MaxPreps" ] } }, - "/kalshi/exchange/status": { + "/maxpreps/sports": { "get": { "consumes": [ "application/json" ], - "description": "Returns the current Kalshi exchange status, with no inputs: `exchange_active` says whether the exchange is up, and `trading_active` says whether trading is open at the time of the request. Informational only, not real-time trading data.", - "operationId": "kalshi-exchange-status", + "description": "Returns the complete MaxPreps gender/sport taxonomy grouped by Boys, Co-ed and Girls: 64 gender+sport entries covering 40 distinct sports. Each entry carries its own allSeasonId, display name, public URL, canonical genderSport token, schedule model and stat model. This is the discovery surface for the genderSport enum and the allSeasonId values the other routes accept.", + "operationId": "maxpreps-sports", "produces": [ "application/json" ], @@ -410508,7 +485161,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.exchangeStatusResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/maxpreps.SportsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -410529,12 +485194,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -410547,19 +485206,19 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi exchange status", + "summary": "MaxPreps gender and sport taxonomy", "tags": [ - "Kalshi" + "MaxPreps" ] } }, - "/kalshi/historical/cutoff": { + "/maxpreps/states": { "get": { "consumes": [ "application/json" ], - "description": "Returns the three cutoff timestamps Kalshi uses to split live from historical data: `market_settled_at`, `orders_updated_at` and `trades_created_at`. Use them to decide when settled market data should be read from the historical endpoints. Takes no parameters.", - "operationId": "kalshi-historical-cutoff", + "description": "Returns the complete MaxPreps state/area taxonomy: 54 records covering the 50 US states, the District of Columbia, National (NN), Prep Schools (PS) and Mexico. Each record carries the state GUID, code, long name, section/division naming aliases, governing-body identity and time zone. This is the discovery surface for the stateCode enum every other MaxPreps route accepts.", + "operationId": "maxpreps-states", "produces": [ "application/json" ], @@ -410567,7 +485226,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.historicalCutoffResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/maxpreps.StatesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -410588,12 +485259,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -410606,27 +485271,35 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi historical data cutoff", + "summary": "MaxPreps states and areas taxonomy", "tags": [ - "Kalshi" + "MaxPreps" ] } }, - "/kalshi/historical/market/{ticker}": { + "/maxpreps/team": { "get": { "consumes": [ "application/json" ], - "description": "Returns one settled Kalshi market from historical storage by `ticker`. The response has the title, subtitle, event ticker, status, result, open, close and expiration times, last and previous price, yes and no bid and ask, volume, open interest, liquidity and primary rules text. Invalid tickers are rejected.", - "operationId": "kalshi-historical-market", + "description": "Returns one team-season record by teamId and sportSeasonId: school identity and address, season/level/gender/sport, league, section and state division (with their ids), governing association and the team's canonical URL. The returned sectionId, leagueId, stateDivisionId and associationId are the identifiers maxpreps-scoreboard and maxpreps-team-rankings accept for their non-state contexts.", + "operationId": "maxpreps-team", "parameters": [ { - "description": "Kalshi historical market ticker", - "in": "path", - "name": "ticker", + "description": "Team id from maxpreps-school-search or maxpreps-school-zip-search example(7bdc339f-7cbf-4728-b0c8-ed898929cf68)", + "in": "query", + "name": "teamId", "required": true, "type": "string", - "x-example": "KXMVECROSSCATEGORY-S2026144E784A147-ED367B84557" + "x-example": "7bdc339f-7cbf-4728-b0c8-ed898929cf68" + }, + { + "description": "Sport-season id for that exact team and level example(2286cd80-c46d-4739-8dd1-92a67ca8daa7)", + "in": "query", + "name": "sportSeasonId", + "required": true, + "type": "string", + "x-example": "2286cd80-c46d-4739-8dd1-92a67ca8daa7" } ], "produces": [ @@ -410636,7 +485309,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.historicalMarketResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/maxpreps.TeamResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -410657,12 +485342,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -410675,45 +485354,35 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi historical market detail", + "summary": "MaxPreps team-season record", "tags": [ - "Kalshi" + "MaxPreps" ] } }, - "/kalshi/historical/market/{ticker}/history": { + "/maxpreps/team-context": { "get": { "consumes": [ "application/json" ], - "description": "Returns candlesticks for one settled Kalshi market by `ticker`. `start_ts` defaults to 7 days ago, `end_ts` to now and `period_interval` to 1440 minutes. Each candle has end time, price, yes bid and ask, volume and open interest. Ranges are capped at 366 days.", - "operationId": "kalshi-historical-market-history", + "description": "Returns the focused team page context for one team season: the team identity (same shape as maxpreps-team), every school sport-season, the sport's own vocabulary (contest/athlete aliases, period alias, overtime alias), the state record, the team's ranking summaries for the current and last season, its overall and league standings, its designated market areas, its association affiliations and its content-availability flags. Site chrome, partner/commerce blocks, team photo and internal settings are excluded.", + "operationId": "maxpreps-team-context", "parameters": [ { - "description": "Kalshi historical market ticker", - "in": "path", - "name": "ticker", + "description": "Team id from maxpreps-school-search or maxpreps-team example(7bdc339f-7cbf-4728-b0c8-ed898929cf68)", + "in": "query", + "name": "teamId", "required": true, "type": "string", - "x-example": "KXMVECROSSCATEGORY-S2026144E784A147-ED367B84557" - }, - { - "description": "Unix start timestamp in seconds. Defaults to 7 days ago.", - "in": "query", - "name": "start_ts", - "type": "integer" - }, - { - "description": "Unix end timestamp in seconds. Defaults to now.", - "in": "query", - "name": "end_ts", - "type": "integer" + "x-example": "7bdc339f-7cbf-4728-b0c8-ed898929cf68" }, { - "description": "Candlestick interval in minutes. Default: 1440.", + "description": "Sport-season id for that exact team and level example(2286cd80-c46d-4739-8dd1-92a67ca8daa7)", "in": "query", - "name": "period_interval", - "type": "integer" + "name": "sportSeasonId", + "required": true, + "type": "string", + "x-example": "2286cd80-c46d-4739-8dd1-92a67ca8daa7" } ], "produces": [ @@ -410723,7 +485392,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.marketHistoryResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/maxpreps.TeamContextResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -410744,12 +485425,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -410762,58 +485437,35 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi historical market history", + "summary": "MaxPreps team page context", "tags": [ - "Kalshi" + "MaxPreps" ] } }, - "/kalshi/historical/markets": { + "/maxpreps/team-next-contest": { "get": { "consumes": [ "application/json" ], - "description": "Returns settled Kalshi historical market rows. `tickers`, `event_ticker`, and `series_ticker` are mutually exclusive. The `mve_filter` enum accepts `exclude`.", - "operationId": "kalshi-historical-markets", + "description": "Returns one team season's next-contest box: the contest (date, site, teams, scores, home/away type, contest state) with the same contest shape as maxpreps-team-schedule, the derived fields the site renders (title, contest alias, canonical URL, TBA flags) and the Hudl linkage block. Videos and the gofan/NFHS stream URLs are media/commerce fields and are excluded.", + "operationId": "maxpreps-team-next-contest", "parameters": [ { - "description": "Rows to return, default 25, max 1000", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Pagination cursor from a previous Kalshi response", - "in": "query", - "name": "cursor", - "type": "string" - }, - { - "description": "Comma-separated Kalshi market tickers. Mutually exclusive with event_ticker and series_ticker.", - "in": "query", - "name": "tickers", - "type": "string" - }, - { - "description": "Kalshi event ticker filter. Mutually exclusive with tickers and series_ticker.", - "in": "query", - "name": "event_ticker", - "type": "string" - }, - { - "description": "Kalshi series ticker filter. Mutually exclusive with tickers and event_ticker.", + "description": "Team id from maxpreps-school-search or maxpreps-team example(7bdc339f-7cbf-4728-b0c8-ed898929cf68)", "in": "query", - "name": "series_ticker", - "type": "string" + "name": "teamId", + "required": true, + "type": "string", + "x-example": "7bdc339f-7cbf-4728-b0c8-ed898929cf68" }, { - "description": "Multivariate event filter", - "enum": [ - "exclude" - ], + "description": "Sport-season id for that exact team and level example(2286cd80-c46d-4739-8dd1-92a67ca8daa7)", "in": "query", - "name": "mve_filter", - "type": "string" + "name": "sportSeasonId", + "required": true, + "type": "string", + "x-example": "2286cd80-c46d-4739-8dd1-92a67ca8daa7" } ], "produces": [ @@ -410823,7 +485475,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.historicalMarketsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/maxpreps.TeamNextContestResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -410844,12 +485508,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -410862,49 +485520,136 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi historical markets", + "summary": "MaxPreps team next contest", "tags": [ - "Kalshi" + "MaxPreps" ] } }, - "/kalshi/historical/trades": { + "/maxpreps/team-rankings": { "get": { "consumes": [ "application/json" ], - "description": "Lists older Kalshi trades that have moved into historical storage, up to `limit` rows (default 25, max 200), continued with `cursor`. Filter by market `ticker` and by created time with `min_ts` and `max_ts` (Unix seconds). Each trade has its id, count, yes and no price, taker side and created time.", - "operationId": "kalshi-historical-trades", + "description": "Returns a ranked team list for one sport season: national, state (stateCode) or section (sectionId) scope, with the rank, school identity, overall record, rating, strength, movement, team size, last-updated time and total ranked count. The source pages with count and page; teamSize is optional and the source returned the same rankings with and without it.", + "operationId": "maxpreps-team-rankings", "parameters": [ { - "description": "Rows to return, default 25, max 200", + "description": "Ranking scope: national, state or section", + "enum": [ + "national", + "state", + "section" + ], "in": "query", - "name": "limit", - "type": "integer" + "name": "type", + "required": true, + "type": "string" }, { - "description": "Pagination cursor from a previous Kalshi response", + "description": "All-season id from maxpreps-sports example(22e2b335-334e-4d4d-9f67-a0f716bb1ccd)", "in": "query", - "name": "cursor", - "type": "string" + "name": "allSeasonId", + "required": true, + "type": "string", + "x-example": "22e2b335-334e-4d4d-9f67-a0f716bb1ccd" }, { - "description": "Kalshi market ticker filter", + "description": "Sport-season id for the ranked team season example(2286cd80-c46d-4739-8dd1-92a67ca8daa7)", "in": "query", - "name": "ticker", + "name": "sportSeasonId", + "required": true, + "type": "string", + "x-example": "2286cd80-c46d-4739-8dd1-92a67ca8daa7" + }, + { + "description": "State code; required when type is state. See maxpreps-states for the complete value set", + "enum": [ + "AL", + "AK", + "AZ", + "AR", + "CA", + "CO", + "CT", + "DE", + "FL", + "GA", + "HI", + "ID", + "IL", + "IN", + "IA", + "KS", + "KY", + "LA", + "ME", + "MD", + "MA", + "MI", + "MN", + "MS", + "MO", + "MT", + "NE", + "NV", + "NH", + "NJ", + "NM", + "NY", + "NC", + "ND", + "OH", + "OK", + "OR", + "PA", + "RI", + "SC", + "SD", + "TN", + "TX", + "UT", + "VT", + "VA", + "WA", + "DC", + "WV", + "WI", + "WY", + "NN", + "PS" + ], + "in": "query", + "name": "stateCode", "type": "string" }, { - "description": "Minimum created Unix timestamp in seconds", + "description": "Section id; required when type is section (discover it from maxpreps-team or maxpreps-rankings-groupings) example(7bcaf5fa-f8bd-4fe8-a970-f05012cd05b2)", "in": "query", - "name": "min_ts", - "type": "integer" + "name": "sectionId", + "type": "string", + "x-example": "7bcaf5fa-f8bd-4fe8-a970-f05012cd05b2" }, { - "description": "Maximum created Unix timestamp in seconds", + "description": "Page size from 1 to 100; defaults to 25 example(10)", "in": "query", - "name": "max_ts", - "type": "integer" + "name": "count", + "type": "integer", + "x-example": 10 + }, + { + "description": "Optional on-field team size, for example 11 for football or 5 for basketball example(11)", + "in": "query", + "name": "teamSize", + "type": "integer", + "x-example": 11 + }, + { + "description": "One-based page number; defaults to 1 example(1)", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -410914,7 +485659,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.historicalTradesResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/maxpreps.TeamRankingsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -410935,12 +485692,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -410953,27 +485704,35 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi historical trades", + "summary": "MaxPreps team rankings (national, state, section)", "tags": [ - "Kalshi" + "MaxPreps" ] } }, - "/kalshi/market/{ticker}": { + "/maxpreps/team-roster-summary": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Kalshi market by `ticker` (such as `KXELONMARS-99`). The response has the title, subtitle, event ticker, status, result, open, close and expiration times, last and previous price, yes and no bid and ask, volume, 24-hour volume, open interest, liquidity and rules text. An unknown ticker returns a not-found error.", - "operationId": "kalshi-market", + "description": "Returns one team season's roster counts only: whether the team has a team photo, the athlete count, how many athletes have a photo or jersey number, and the Hudl athlete count. Coach names and staff records are personal data and are excluded; use this route for roster size, not for player records.", + "operationId": "maxpreps-team-roster-summary", "parameters": [ { - "description": "Kalshi market ticker", - "in": "path", - "name": "ticker", + "description": "Team id from maxpreps-school-search or maxpreps-team example(7bdc339f-7cbf-4728-b0c8-ed898929cf68)", + "in": "query", + "name": "teamId", "required": true, "type": "string", - "x-example": "KXELONMARS-99" + "x-example": "7bdc339f-7cbf-4728-b0c8-ed898929cf68" + }, + { + "description": "Sport-season id for that exact team and level example(2286cd80-c46d-4739-8dd1-92a67ca8daa7)", + "in": "query", + "name": "sportSeasonId", + "required": true, + "type": "string", + "x-example": "2286cd80-c46d-4739-8dd1-92a67ca8daa7" } ], "produces": [ @@ -410983,7 +485742,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.marketResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/maxpreps.TeamRosterSummaryResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -411004,12 +485775,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -411022,57 +485787,35 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi market detail", + "summary": "MaxPreps team roster counts", "tags": [ - "Kalshi" + "MaxPreps" ] } }, - "/kalshi/market/{ticker}/history": { + "/maxpreps/team-schedule": { "get": { "consumes": [ "application/json" ], - "description": "Returns candlesticks for one Kalshi market by `ticker`. `series_ticker` defaults to the ticker prefix before the last dash, `start_ts` to 7 days ago, `end_ts` to now and `period_interval` to 1440 minutes. `include_latest_before_start` adds the last candle before the start. Ranges are capped at 366 days.", - "operationId": "kalshi-market-history", + "description": "Returns one team season's full schedule with results: each contest's date, site, state, per-team scores (b1..b30), result, home/away type, forfeit/TBA flags, contest state (Pregame, ContestInProgress, Boxscore, ScoreNotReported) and the derived fields the site renders (title, contest alias, canonical URL, overtime, tournament and bracket identity).", + "operationId": "maxpreps-team-schedule", "parameters": [ { - "description": "Kalshi market ticker", - "in": "path", - "name": "ticker", + "description": "Team id from maxpreps-school-search or maxpreps-team example(7bdc339f-7cbf-4728-b0c8-ed898929cf68)", + "in": "query", + "name": "teamId", "required": true, "type": "string", - "x-example": "KXELONMARS-99" - }, - { - "description": "Kalshi series ticker. Defaults to the market ticker prefix before the last dash.", - "in": "query", - "name": "series_ticker", - "type": "string" - }, - { - "description": "Unix start timestamp in seconds. Defaults to 7 days ago.", - "in": "query", - "name": "start_ts", - "type": "integer" - }, - { - "description": "Unix end timestamp in seconds. Defaults to now.", - "in": "query", - "name": "end_ts", - "type": "integer" - }, - { - "description": "Candlestick interval in minutes. Default: 1440.", - "in": "query", - "name": "period_interval", - "type": "integer" + "x-example": "7bdc339f-7cbf-4728-b0c8-ed898929cf68" }, { - "description": "Include the latest candle before start_ts when supported upstream.", + "description": "Sport-season id for that exact team and level example(2286cd80-c46d-4739-8dd1-92a67ca8daa7)", "in": "query", - "name": "include_latest_before_start", - "type": "boolean" + "name": "sportSeasonId", + "required": true, + "type": "string", + "x-example": "2286cd80-c46d-4739-8dd1-92a67ca8daa7" } ], "produces": [ @@ -411082,7 +485825,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.marketHistoryResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/maxpreps.TeamScheduleResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -411103,12 +485858,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -411121,27 +485870,35 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi market history", + "summary": "MaxPreps team schedule and results", "tags": [ - "Kalshi" + "MaxPreps" ] } }, - "/kalshi/market/{ticker}/orderbook": { + "/maxpreps/team-stat-leaders": { "get": { "consumes": [ "application/json" ], - "description": "Returns the order book for one Kalshi market by `ticker`: bid levels for the `yes` side and the `no` side, each with `price` and `size`. Kalshi publishes bids only, so ask levels are not listed. The response also carries a `raw_unit_hint` for the price unit.", - "operationId": "kalshi-market-orderbook", + "description": "Returns one team season's stat-leader rows: the stat name and header, the stat value, the leader's rank within that stat and the leaderboard context, plus the minimum-games cutoffs the leaderboard applied. Athlete identity (name, photo, positions, class year, ids) is deliberately excluded; this route reports the statistics, not player records.", + "operationId": "maxpreps-team-stat-leaders", "parameters": [ { - "description": "Kalshi market ticker", - "in": "path", - "name": "ticker", + "description": "Team id from maxpreps-school-search or maxpreps-team example(7bdc339f-7cbf-4728-b0c8-ed898929cf68)", + "in": "query", + "name": "teamId", "required": true, "type": "string", - "x-example": "KXELONMARS-99" + "x-example": "7bdc339f-7cbf-4728-b0c8-ed898929cf68" + }, + { + "description": "Sport-season id for that exact team and level example(2286cd80-c46d-4739-8dd1-92a67ca8daa7)", + "in": "query", + "name": "sportSeasonId", + "required": true, + "type": "string", + "x-example": "2286cd80-c46d-4739-8dd1-92a67ca8daa7" } ], "produces": [ @@ -411151,7 +485908,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.orderBookResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/maxpreps.TeamStatLeadersResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -411172,12 +485941,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -411190,60 +485953,79 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi market orderbook", + "summary": "MaxPreps team stat leaders", "tags": [ - "Kalshi" + "MaxPreps" ] } }, - "/kalshi/markets": { + "/maxpreps/tournament-sports": { "get": { "consumes": [ "application/json" ], - "description": "Lists Kalshi markets, up to `limit` rows (default 25, max 200), continued with `cursor`. Filter by `event_ticker`, `series_ticker`, `ticker`, or `status` (`unopened`, `open`, `closed` or `settled`). Each market has its title, status, prices, bid and ask, volume, open interest and rules text. A returned status can read `active` even though the filter does not accept it.", - "operationId": "kalshi-markets", + "description": "Returns the sports the upstream publishes tournament (playoff) brackets for, with each sport's display name and canonical playoffs URL. Optionally scope the list to one state with stateCode.", + "operationId": "maxpreps-tournament-sports", "parameters": [ { - "description": "Rows to return, default 25, max 200", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Pagination cursor from a previous Kalshi response", - "in": "query", - "name": "cursor", - "type": "string" - }, - { - "description": "Kalshi event ticker filter", - "in": "query", - "name": "event_ticker", - "type": "string" - }, - { - "description": "Kalshi series ticker filter", - "in": "query", - "name": "series_ticker", - "type": "string" - }, - { - "description": "Market status filter", + "description": "Optional state code from maxpreps-states to scope the list", "enum": [ - "unopened", - "open", - "closed", - "settled" + "AL", + "AK", + "AZ", + "AR", + "CA", + "CO", + "CT", + "DE", + "FL", + "GA", + "HI", + "ID", + "IL", + "IN", + "IA", + "KS", + "KY", + "LA", + "ME", + "MD", + "MA", + "MI", + "MN", + "MS", + "MO", + "MT", + "NE", + "NV", + "NH", + "NJ", + "NM", + "NY", + "NC", + "ND", + "OH", + "OK", + "OR", + "PA", + "RI", + "SC", + "SD", + "TN", + "TX", + "UT", + "VT", + "VA", + "WA", + "DC", + "WV", + "WI", + "WY", + "NN", + "PS" ], "in": "query", - "name": "status", - "type": "string" - }, - { - "description": "Kalshi market ticker filter", - "in": "query", - "name": "ticker", + "name": "stateCode", "type": "string" } ], @@ -411254,7 +486036,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.marketsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/maxpreps.TournamentSportsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -411275,12 +486069,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -411293,51 +486081,36 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi markets", + "summary": "MaxPreps tournament sports", "tags": [ - "Kalshi" + "MaxPreps" ] } }, - "/kalshi/markets/history": { + "/mcdonalds/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns candlesticks for up to 25 Kalshi markets in one call. `market_tickers` is required, as a comma-separated list or repeated values. `start_ts` defaults to 7 days ago, `end_ts` to now and `period_interval` to 1440 minutes. Results are grouped by market. Ranges are capped at 366 days.", - "operationId": "kalshi-markets-history", + "description": "Returns one market's McDonald's menu categories -- 13 in the United States at time of writing, including breakfast, burgers, chicken-and-fish-sandwiches, mcnuggets-and-mccrispy-strips, snack-wrap, fries-sides, happy-meal, sweets-treats, mccafe-coffees, drinks, sauces-and-condiments and the two value menus; other markets publish their own, from 6 in Switzerland to 17 in Australia. Each entry's slug is the value GET /mcdonalds/menu takes. Slugs are not portable between markets, so pass the same country back. Eight markets publish a reachable menu, fewer than the ten the restaurant locator covers.", + "operationId": "mcdonalds-categories", "parameters": [ { - "description": "Comma-separated Kalshi market tickers. Repeated query values are also accepted.", + "description": "Market (default us). One of us, ca, gb, au, ie, nz, ch, se.", + "enum": [ + "us", + "ca", + "gb", + "au", + "ie", + "nz", + "ch", + "se" + ], "in": "query", - "name": "market_tickers", - "required": true, + "name": "country", "type": "string", - "x-example": "KXELONMARS-99,KXNEWPOPE-70" - }, - { - "description": "Unix start timestamp in seconds. Defaults to 7 days ago.", - "in": "query", - "name": "start_ts", - "type": "integer" - }, - { - "description": "Unix end timestamp in seconds. Defaults to now.", - "in": "query", - "name": "end_ts", - "type": "integer" - }, - { - "description": "Candlestick interval in minutes. Default: 1440.", - "in": "query", - "name": "period_interval", - "type": "integer" - }, - { - "description": "Include the latest candle before start_ts when supported upstream.", - "in": "query", - "name": "include_latest_before_start", - "type": "boolean" + "x-example": "us" } ], "produces": [ @@ -411347,19 +486120,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.batchMarketHistoryResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/mcdonalds.categoriesResponseDoc" } }, "429": { @@ -411368,12 +486129,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -411386,27 +486141,43 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi batch market history", + "summary": "List McDonald's menu categories", "tags": [ - "Kalshi" + "McDonalds" ] } }, - "/kalshi/markets/orderbooks": { + "/mcdonalds/item": { "get": { "consumes": [ "application/json" ], - "description": "Returns order books for up to 25 Kalshi markets in one call. `tickers` is required, as a comma-separated list or repeated values. Each book has the `yes` and `no` bid levels with `price` and `size`; ask levels are not listed. Books come back in the order requested.", - "operationId": "kalshi-markets-orderbooks", + "description": "Returns one McDonald's item's published nutrition detail: the full per-serving nutrient list (calories, protein, carbohydrates, total and saturated fat, trans fat, cholesterol, sodium, fibre, sugars, vitamins and minerals -- 21 values for a Big Mac), each with a stable machine key, a unit and a percent-daily-value where McDonald's prints one; plus the item's marketing description, allergen statement, full ingredient statement and image. Item ids come from GET /mcdonalds/menu and are market-specific, so pass the same country back. Seven markets serve this endpoint, fewer than the eight publishing a menu -- Great Britain has a menu but no nutrition surface. Combo meals legitimately carry no nutrient list. Prices are not available on this surface.", + "operationId": "mcdonalds-item", "parameters": [ { - "description": "Comma-separated Kalshi market tickers. Repeated query values are also accepted.", + "description": "McDonald's numeric product id, from /mcdonalds/menu", "in": "query", - "name": "tickers", + "name": "item_id", "required": true, "type": "string", - "x-example": "KXELONMARS-99,KXNEWPOPE-70" + "x-example": "200463" + }, + { + "description": "Market (default us). One of us, ca, au, ie, nz, ch, se. Must match the market the item id came from.", + "enum": [ + "us", + "ca", + "au", + "ie", + "nz", + "ch", + "se" + ], + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" } ], "produces": [ @@ -411416,7 +486187,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.batchOrderBookResponseDoc" + "$ref": "#/definitions/mcdonalds.itemResponseDoc" } }, "400": { @@ -411437,12 +486208,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -411455,31 +486220,43 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi batch market orderbooks", + "summary": "Get one McDonald's item's nutrition", "tags": [ - "Kalshi" + "McDonalds" ] } }, - "/kalshi/series": { + "/mcdonalds/item-list": { "get": { "consumes": [ "application/json" ], - "description": "Lists Kalshi series, up to `limit` rows (default 25, max 200). Each series has its ticker, title, category, frequency, fee type and multiplier, settlement sources, and contract and contract-terms URLs. The catalogue comes back in one page, so `cursor` has no effect on this endpoint.", - "operationId": "kalshi-series", + "description": "Returns the same published nutrition detail as GET /mcdonalds/item for up to 20 items in one call, plus the per-component ingredient and allergen breakdown that the single-item endpoint does not expose -- a composite item's overall allergen statement is the union of its parts' (a burger's bun, patty, cheese and condiment each carry their own ingredient statement and allergens), so this is the source to use when the full breakdown matters, not just the item-level summary. Item ids come from GET /mcdonalds/menu and are market-specific, so pass the same country back. The response echoes the requested ids so a caller can tell which ones McDonald's returned nothing for.", + "operationId": "mcdonalds-item-list", "parameters": [ { - "description": "Rows to return, default 25, max 200", + "description": "Comma-separated McDonald's numeric product ids, up to 20", "in": "query", - "name": "limit", - "type": "integer" + "name": "item_ids", + "required": true, + "type": "string", + "x-example": "200463,200466,200476" }, { - "description": "Pagination cursor from a previous Kalshi response", + "description": "Market (default us). One of us, ca, au, ie, nz, ch, se. Must match the market the item ids came from.", + "enum": [ + "us", + "ca", + "au", + "ie", + "nz", + "ch", + "se" + ], "in": "query", - "name": "cursor", - "type": "string" + "name": "country", + "type": "string", + "x-example": "us" } ], "produces": [ @@ -411489,7 +486266,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.seriesResponseDoc" + "$ref": "#/definitions/mcdonalds.itemListResponseDoc" } }, "400": { @@ -411510,12 +486287,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -411528,27 +486299,44 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi series", + "summary": "Get nutrition and allergen detail for a batch of McDonald's items", "tags": [ - "Kalshi" + "McDonalds" ] } }, - "/kalshi/series/{series_ticker}": { + "/mcdonalds/menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Kalshi series by `series_ticker` (such as `KXELONMARS`). The response has the title, category, frequency, fee type and multiplier, settlement sources with name and URL, contract and contract-terms URLs, and last update time. An unknown ticker returns a not-found error.", - "operationId": "kalshi-series-detail", + "description": "Returns the items in one McDonald's menu category: each item's numeric id, name, product page URL and image. The item id is what GET /mcdonalds/item takes for full nutrition. Category slugs come from GET /mcdonalds/categories and must be paired with the country they came from -- both slugs and item ids are market-specific. Prices are not available; McDonald's does not publish them on this surface. A calorie label is included per item where the category page prints one, which is often blank.", + "operationId": "mcdonalds-menu", "parameters": [ { - "description": "Kalshi series ticker", - "in": "path", - "name": "series_ticker", + "description": "Category slug from /mcdonalds/categories", + "in": "query", + "name": "category", "required": true, "type": "string", - "x-example": "KXELONMARS" + "x-example": "breakfast" + }, + { + "description": "Market (default us). One of us, ca, gb, au, ie, nz, ch, se. Must match the market the slug came from.", + "enum": [ + "us", + "ca", + "gb", + "au", + "ie", + "nz", + "ch", + "se" + ], + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" } ], "produces": [ @@ -411558,7 +486346,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.seriesDetailResponseDoc" + "$ref": "#/definitions/mcdonalds.menuResponseDoc" } }, "400": { @@ -411579,12 +486367,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -411597,49 +486379,27 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi series detail", + "summary": "List one McDonald's menu category's items", "tags": [ - "Kalshi" + "McDonalds" ] } }, - "/kalshi/trades": { + "/mcdonalds/restaurant-menu": { "get": { "consumes": [ "application/json" ], - "description": "Lists recent Kalshi trades, up to `limit` rows (default 25, max 200), continued with `cursor`. Filter by market `ticker` and by created time with `min_ts` and `max_ts` (Unix seconds, at most 366 days apart). Each trade has its id, count, yes and no price, taker side and created time.", - "operationId": "kalshi-trades", + "description": "Returns one restaurant's full menu with real prices: item name, image and independently-priced eat-in, pickup and delivery listings, since a McDonald's restaurant genuinely sells a different catalog (and different prices) per channel -- delivery is typically marked up over eat-in/pickup, and some items are channel-exclusive. Where McDonald's publishes a curated substitute or add-on list for an item (a meal's drink upgrade, a dip-able item's sauce choices), each real alternative is included with its own eat-in/pickup price delta -- plain entree or side substitution is not covered, since McDonald's does not publish a curated candidate list for it. This is the only endpoint in this family that publishes prices; every other McDonald's endpoint's source never does. US restaurants only. The store id comes from GET /mcdonalds/restaurants' store_id field.", + "operationId": "mcdonalds-restaurant-menu", "parameters": [ { - "description": "Rows to return, default 25, max 200", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Pagination cursor from a previous Kalshi response", - "in": "query", - "name": "cursor", - "type": "string" - }, - { - "description": "Kalshi market ticker filter", - "in": "query", - "name": "ticker", - "type": "string" - }, - { - "description": "Minimum created Unix timestamp in seconds", - "in": "query", - "name": "min_ts", - "type": "integer" - }, - { - "description": "Maximum created Unix timestamp in seconds", + "description": "McDonald's numeric store number, from /mcdonalds/restaurants", "in": "query", - "name": "max_ts", - "type": "integer" + "name": "store_id", + "required": true, + "type": "string", + "x-example": "10528" } ], "produces": [ @@ -411649,7 +486409,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kalshi.tradesResponseDoc" + "$ref": "#/definitions/mcdonalds.restaurantMenuResponseDoc" } }, "400": { @@ -411670,12 +486430,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -411688,116 +486442,68 @@ "ApiKeyAuth": [] } ], - "summary": "Kalshi trades", + "summary": "Get one McDonald's restaurant's priced menu", "tags": [ - "Kalshi" + "McDonalds" ] } }, - "/kfc/delivery-estimate": { + "/mcdonalds/restaurants": { "get": { "consumes": [ "application/json" ], - "description": "Checks whether a KFC restaurant's delivery integration can deliver to a given address and, when it can, the estimated delivery fee (broken down by fee line item) and pickup/dropoff time. This reads the same checkout-time estimate KFC's own site calls -- it does not add an item to a cart or place an order, and takes no payment or account information. serviceable is true only when the upstream returned a real estimate; a false value with reason populated covers every other case seen live: the delivery provider not enabled at this store, the address being outside the delivery zone, or the delivery marketplace itself reporting the store temporarily inactive. order_subtotal materially affects the fee estimate (KFC's own fee schedules can vary by order size), so it is required rather than defaulted. pickup_at defaults to 30 minutes from now (an \"order now\" style estimate) when omitted.", - "operationId": "kfc-delivery-estimate", + "description": "Returns McDonald's restaurants near a latitude/longitude, in any of ten markets. Each restaurant carries its store id, name, street address, city, state, postal code, phone, coordinates, timezone, open status, today's dining and drive-thru hours, the full published week of hours, and McDonald's own amenity codes (for example DRIVETHRU, WIFI, MOBILEOFFERS, GIFTCARDS). A delivery deep link is included where McDonald's publishes one; note it points at a third-party delivery platform. A coordinate with no McDonald's nearby returns an empty list rather than an error. Set country to search outside the United States -- the locator covers more markets than the menu and item endpoints do, so a country valid here is not necessarily valid there.", + "operationId": "mcdonalds-restaurants", "parameters": [ { - "description": "KFC's alphanumeric store number, from /kfc/stores or /kfc/nearby", - "in": "query", - "name": "store_number", - "required": true, - "type": "string", - "x-example": "K750015" - }, - { - "description": "Delivery address line 1", - "in": "query", - "name": "address1", - "required": true, - "type": "string", - "x-example": "2600 Preston Highway" - }, - { - "description": "Delivery address line 2", - "in": "query", - "name": "address2", - "type": "string", - "x-example": "" - }, - { - "description": "Delivery address city", - "in": "query", - "name": "city", - "required": true, - "type": "string", - "x-example": "Louisville" - }, - { - "description": "Delivery address state, two-letter code", - "in": "query", - "name": "state", - "required": true, - "type": "string", - "x-example": "KY" - }, - { - "description": "Delivery address postal code", - "in": "query", - "name": "postal_code", - "required": true, - "type": "string", - "x-example": "40217" - }, - { - "description": "Delivery address country code (default US)", - "in": "query", - "name": "country_code", - "type": "string", - "x-example": "US" - }, - { - "description": "Delivery address latitude", + "description": "Search center latitude", "in": "query", "name": "latitude", "required": true, "type": "number", - "x-example": 38.21 + "x-example": 40.7128 }, { - "description": "Delivery address longitude", + "description": "Search center longitude", "in": "query", "name": "longitude", "required": true, "type": "number", - "x-example": -85.7415 + "x-example": -74.006 }, { - "description": "Order subtotal before fees, in dollars", + "description": "Search radius in miles, 1-100 (default 20)", "in": "query", - "name": "order_subtotal", - "required": true, - "type": "number", - "x-example": 10 + "name": "radius", + "type": "integer", + "x-example": 20 }, { - "description": "RFC3339 pickup time (default 30 minutes from now)", + "description": "Maximum restaurants to return, 1-50 (default 10)", "in": "query", - "name": "pickup_at", - "type": "string", - "x-example": "2026-09-03T20:00:00Z" + "name": "max_results", + "type": "integer", + "x-example": 10 }, { - "description": "Delivery provider to check (default DOORDASH)", + "description": "Market to search (default us). One of us, gb, ca, au, de, ie, nz, ch, nl, se.", "enum": [ - "DOORDASH", - "MOCK_DOORDASH", - "INTERNAL" + "us", + "gb", + "ca", + "au", + "de", + "ie", + "nz", + "ch", + "nl", + "se" ], "in": "query", - "name": "delivery_provider", + "name": "country", "type": "string", - "x-example": "DOORDASH" + "x-example": "us" } ], "produces": [ @@ -411807,7 +486513,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kfc.deliveryEstimateResponseDoc" + "$ref": "#/definitions/mcdonalds.restaurantsResponseDoc" } }, "400": { @@ -411840,48 +486546,24 @@ "ApiKeyAuth": [] } ], - "summary": "Check KFC delivery serviceability and estimated fee for one store and address", + "summary": "Find McDonald's restaurants near a location", "tags": [ - "KFC" + "McDonalds" ] } }, - "/kfc/menu": { + "/mediaite/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one restaurant's full menu grouped into categories (e.g. \"Deals\", \"Combos\", \"Tenders\"). Every entry is a product, a bundle (a combo or family meal), or a standalone priced variant -- type tells callers which -- and carries a price in USD cents plus a decimal dollar value, and an image when the upstream publishes one. Prices reflect this specific restaurant and order channel, not a national default. channel selects which order channel the menu is priced for (web ordering by default); prices can genuinely differ by channel (e.g. a delivery-marketplace channel vs. web).", - "operationId": "kfc-menu", + "description": "Returns public Mediaite article metadata and body paragraphs from a canonical article URL. Mediaite One Sheet (premium) pages are flagged paywalled.", + "operationId": "mediaite-article", "parameters": [ { - "description": "KFC's alphanumeric store number, from /kfc/stores or /kfc/nearby", + "description": "Canonical Mediaite article URL", "in": "query", - "name": "store_number", + "name": "url", "required": true, "type": "string", - "x-example": "I824001" - }, - { - "description": "Order channel the menu is priced for (default WEB)", - "enum": [ - "WEB", - "MOBILE", - "POS", - "KIOSK", - "DOORDASH", - "UBEREATS", - "GRUBHUB", - "IOS", - "ANDROID", - "DELIVEROO", - "JUST_EAT", - "CALL_CENTER" - ], - "in": "query", - "name": "channel", - "type": "string", - "x-example": "WEB" + "x-example": "https://www.mediaite.com/media/tv/breaking-news-denied-white-house-blocks-cnn-and-ms-now-from-covering-state-dinner-despite-judges-ruling/" } ], "produces": [ @@ -411891,7 +486573,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kfc.menuResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -411906,12 +486588,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -411924,63 +486600,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get one KFC restaurant's full priced menu", + "summary": "Get Mediaite article content", "tags": [ - "KFC" + "Mediaite" ] } }, - "/kfc/nearby": { + "/mediaite/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns KFC restaurants near a latitude/longitude, nearest first. A coordinate with no nearby KFC returns an empty list rather than an error. Each restaurant carries its store number, full address with coordinates, phone, whether it currently accepts online orders, its timezone, and its distance from the search point in miles. occasion restricts results to restaurants that offer a given order channel (e.g. only drive-thru locations).", - "operationId": "kfc-nearby", + "description": "Returns a Mediaite author profile by `slug` (for example `michael-luciano`) or by a mediaite.com author `url`; supply exactly one. The response has `name`, `bio`, `avatar_url`, `email`, `twitter` and about 10 recent articles, each with `title`, `url` and a short `date` label such as `Sep 24th` (no year or time). Contact fields are omitted when the page shows none.", + "operationId": "mediaite-author", "parameters": [ { - "description": "Search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 38.2527 - }, - { - "description": "Search center longitude", - "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -85.7585 - }, - { - "description": "Search radius in miles, 0.1-100 (default 10)", - "in": "query", - "name": "radius_miles", - "type": "number", - "x-example": 10 - }, - { - "description": "Restrict to restaurants offering this order channel", - "enum": [ - "DELIVERY", - "CARRYOUT", - "DINE_IN", - "DRIVE_THRU", - "CATERING_CARRYOUT" - ], + "description": "Author slug, e.g. michael-luciano", "in": "query", - "name": "occasion", + "name": "slug", "type": "string", - "x-example": "DRIVE_THRU" + "x-example": "michael-luciano" }, { - "description": "Maximum restaurants to return, 1-50 (default 20)", + "description": "Canonical mediaite.com/author// URL; alternative to slug", "in": "query", - "name": "max_results", - "type": "integer", - "x-example": 20 + "name": "url", + "type": "string", + "x-example": "https://www.mediaite.com/author/michael-luciano/" } ], "produces": [ @@ -411990,7 +486633,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kfc.nearbyResponseDoc" + "$ref": "#/definitions/publicnews.mediaiteAuthorResponseDoc" } }, "400": { @@ -411999,8 +486642,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -412017,33 +486660,41 @@ "ApiKeyAuth": [] } ], - "summary": "Find KFC restaurants near a location", + "summary": "Get a Mediaite author profile", "tags": [ - "KFC" + "Mediaite" ] } }, - "/kfc/promotion": { + "/mediaite/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one promotion by its redemption code (the code a customer types in at checkout) or its serialized code (a unique per-print QR/serial code, e.g. from a printed coupon, that resolves to a shared redemption code and its promotion). Exactly one of code or serialized_code is required. A serialized-code lookup additionally returns that code's own usage metadata (redemption_code, times_used, code_status, group_status, effective_date, expiration_date) alongside the promotion. An unknown or expired code returns a 404 rather than a null success payload.", - "operationId": "kfc-promotion", + "description": "Returns up to 20 recent Mediaite stories for one category. `section` is required and takes a slug such as `tv`, `politics`, `opinion` or `premium`; any other value returns an invalid-parameter error. Each item has a title, URL and publication time, and may include author, summary and image.", + "operationId": "mediaite-headlines", "parameters": [ { - "description": "The redemption code as a customer would type it in at checkout. Use a value returned by kfc-promotions when available. Exactly one of code or serialized_code is required", - "in": "query", - "name": "code", - "type": "string", - "x-example": "WALMART5DOLLARSOFF" - }, - { - "description": "A unique per-print serialized/QR code that resolves to a shared redemption code. Exactly one of code or serialized_code is required", + "description": "Mediaite category slug", + "enum": [ + "media", + "tv", + "news", + "entertainment", + "sports", + "podcasts", + "tech", + "online", + "politics", + "trump", + "election-2020", + "opinion", + "columnists", + "crime", + "premium" + ], "in": "query", - "name": "serialized_code", + "name": "section", + "required": true, "type": "string", - "x-example": "deadbeef1234" + "x-example": "media" } ], "produces": [ @@ -412053,7 +486704,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kfc.promotionResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -412062,11 +486713,37 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Mediaite section headlines", + "tags": [ + "Mediaite" + ] + } + }, + "/mediaite/news": { + "get": { + "description": "Returns the 20 most recent Mediaite stories across the site, with no parameters. Each item has its title, canonical URL, summary, publication time and author. Use `mediaite-headlines` to read a single category instead.", + "operationId": "mediaite-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -412086,27 +486763,62 @@ "ApiKeyAuth": [] } ], - "summary": "Look up one KFC promotion by its redemption code or serialized code", + "summary": "Get Mediaite top stories", "tags": [ - "KFC" + "Mediaite" ] } }, - "/kfc/promotions": { + "/mediaite/sections": { "get": { - "consumes": [ + "description": "Lists the 15 Mediaite category slugs accepted as `section` by `mediaite-headlines`, such as `tv`, `politics`, `opinion` and `crime`. Each entry has its `slug`, display `name` and `url`. `premium` is the Mediaite One Sheet newsletter category, and `election-2020` is a legacy category that still publishes occasionally.", + "operationId": "mediaite-sections", + "produces": [ "application/json" ], - "description": "Returns one restaurant's current public promotions -- current deals and offers KFC's storefront marks as public, with each promotion's id, internal and display name, description, whether it applies automatically, and active redemption codes when KFC exposes them. The returned codes can be passed to kfc-promotion. A store with no active public promotions returns an empty list rather than an error.", - "operationId": "kfc-promotions", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Mediaite sections", + "tags": [ + "Mediaite" + ] + } + }, + "/medicalnewstoday/article": { + "get": { + "description": "Returns public article metadata and body paragraphs. No login or paywall is bypassed. URLs under the robots-disallowed /articles/mnt-* path are rejected.", + "operationId": "medicalnewstoday-article", "parameters": [ { - "description": "KFC's alphanumeric store number, from /kfc/stores or /kfc/nearby", + "description": "Canonical Medical News Today article URL", "in": "query", - "name": "store_number", + "name": "url", "required": true, "type": "string", - "x-example": "I824001" + "x-example": "https://www.medicalnewstoday.com/articles/fda-clears-two-new-alzheimers-blood-tests-including-one-for-adults-as-young-as-40" } ], "produces": [ @@ -412116,7 +486828,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kfc.promotionsResponseDoc" + "$ref": "#/definitions/medicalnewstoday.articleResponseDoc" } }, "400": { @@ -412125,8 +486837,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -412143,27 +486855,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get one KFC restaurant's current public promotions", + "summary": "Get a Medical News Today article", "tags": [ - "KFC" + "Medical News Today" ] } }, - "/kfc/store": { + "/medicalnewstoday/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one KFC restaurant's detail by its exact store number, from /kfc/stores or /kfc/nearby, including its recurring open hours per order channel (carryout, delivery, dine-in, drive-thru, catering carryout). A channel this restaurant does not offer at all is omitted from hours rather than reported as always-closed.", - "operationId": "kfc-store", + "description": "Returns a Medical News Today author profile by `slug` including its numeric id (for example `peter-brown-1595`) or by the profile `url`; provide one of the two. The response has the author's `name`, a `bio` when one is listed, and recent articles with title and URL, plus summary, date and image where present.", + "operationId": "medicalnewstoday-author", "parameters": [ { - "description": "KFC's alphanumeric store number, from /kfc/stores or /kfc/nearby", + "description": "Author slug including numeric id, e.g. peter-brown-1595", "in": "query", - "name": "store_number", - "required": true, + "name": "slug", "type": "string", - "x-example": "I824001" + "x-example": "peter-brown-1595" + }, + { + "description": "Public author profile URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.medicalnewstoday.com/authors/peter-brown-1595" } ], "produces": [ @@ -412173,7 +486888,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kfc.storeResponseDoc" + "$ref": "#/definitions/medicalnewstoday.authorResponseDoc" } }, "400": { @@ -412188,12 +486903,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -412206,90 +486915,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get one KFC restaurant by its store number", + "summary": "Get a Medical News Today author profile", "tags": [ - "KFC" + "Medical News Today" ] } }, - "/kfc/stores": { + "/medicalnewstoday/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns KFC restaurants matching a city/state/postal code/name/franchise code/store number filter. At least one filter is required -- an unfiltered call would enumerate every US restaurant in one response, which this endpoint intentionally does not expose. Each restaurant carries its store number (the value /kfc/menu and /kfc/promotions take), full address with coordinates, phone, whether it currently accepts online orders, and its timezone. appear_in_store_results (default true) excludes internal/test records KFC's own storefront does not surface in customer-facing search -- a raw filter can otherwise return non-orderable administrative entries alongside real restaurants.", - "operationId": "kfc-stores", + "description": "Returns the dated story cards from the Medical News Today Health News stream. `section` is required and currently accepts only `news`; `medicalnewstoday-sections` shows the accepted value. Each item has a title and URL, with a publication date such as `2026-09-26`, author, summary and image when the card shows them.", + "operationId": "medicalnewstoday-headlines", "parameters": [ { - "description": "Exact store number", - "in": "query", - "name": "store_number", - "type": "string", - "x-example": "I824001" - }, - { - "description": "Restaurant city", - "in": "query", - "name": "city", - "type": "string", - "x-example": "Louisville" - }, - { - "description": "Restaurant state, two-letter code", - "in": "query", - "name": "state", - "type": "string", - "x-example": "KY" - }, - { - "description": "Restaurant postal code", - "in": "query", - "name": "postal_code", - "type": "string", - "x-example": "40213" - }, - { - "description": "Restaurant name, partial match", - "in": "query", - "name": "name", - "type": "string", - "x-example": "KFC 600 Terminal Drive" - }, - { - "description": "Exact franchise/operator code", - "in": "query", - "name": "franchise_code", - "type": "string", - "x-example": "C761" - }, - { - "description": "Restrict to restaurants shown in customer-facing search, excluding internal/test entries (default true)", - "in": "query", - "name": "appear_in_store_results", - "type": "boolean", - "x-example": true - }, - { - "description": "Sort order", + "description": "Medical News Today newsroom section", "enum": [ - "store_number_asc", - "store_number_desc", - "name_asc", - "name_desc", - "franchise_code_asc", - "franchise_code_desc" + "news" ], "in": "query", - "name": "sort", + "name": "section", + "required": true, "type": "string", - "x-example": "name_asc" - }, - { - "description": "Maximum restaurants to return, 1-50 (default 20)", - "in": "query", - "name": "max_results", - "type": "integer", - "x-example": 20 + "x-example": "news" } ], "produces": [ @@ -412299,7 +486945,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kfc.storesResponseDoc" + "$ref": "#/definitions/medicalnewstoday.headlinesResponseDoc" } }, "400": { @@ -412308,8 +486954,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -412326,24 +486972,82 @@ "ApiKeyAuth": [] } ], - "summary": "Search KFC restaurants by city, state, postal code, name, franchise code, or store number", + "summary": "Get Medical News Today section headlines", "tags": [ - "KFC" + "Medical News Today" ] } }, - "/khaleejtimes/article": { + "/medicalnewstoday/news": { "get": { - "description": "Returns public Khaleej Times article metadata and body paragraphs from a canonical article URL. Live-blog pages are accepted and return their timestamped update headlines as paragraphs.", - "operationId": "khaleejtimes-article", + "description": "Returns the current article cards from Medical News Today's Health News listing, with no parameters. Each item has a title and URL, plus publication date, author, summary and image when the card shows them. It is the way to read the latest health stories without choosing a section.", + "operationId": "medicalnewstoday-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/medicalnewstoday.newsResponseDoc" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Medical News Today latest health news", + "tags": [ + "Medical News Today" + ] + } + }, + "/medicalnewstoday/sections": { + "get": { + "description": "Returns the exact public editorial news-section value accepted by medicalnewstoday-headlines. Health Topics and Health Hubs are educational resources, not newsroom sections.", + "operationId": "medicalnewstoday-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/medicalnewstoday.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Medical News Today newsroom sections", + "tags": [ + "Medical News Today" + ] + } + }, + "/men/article": { + "get": { + "description": "Returns a Manchester Evening News article by `url`, a canonical HTTPS article link. The response has the title, description, section, authors, lead image, publish and update times, body `paragraphs` and a `paywalled` flag. Subscriber-only or blocked articles return an upstream error.", + "operationId": "men-article", "parameters": [ { - "description": "Canonical Khaleej Times article URL", + "description": "Canonical Manchester Evening News article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.khaleejtimes.com/business/example-article-slug" + "x-example": "https://www.manchestereveningnews.co.uk/news/how-opt-out-app-pushes-17427838" } ], "produces": [ @@ -412380,24 +487084,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get Khaleej Times article content", + "summary": "Get Manchester Evening News article content", "tags": [ - "Khaleej Times" + "Manchester Evening News" ] } }, - "/khaleejtimes/author": { + "/men/author": { "get": { - "description": "Returns a Khaleej Times author's name, photo, biography, and most recent articles (first page) from a canonical author profile URL.", - "operationId": "khaleejtimes-author", + "description": "Returns a Manchester Evening News author profile, identified by `slug` (such as `lee-swettenham`) or a canonical `manchestereveningnews.co.uk/authors//` `url`; provide exactly one. The response has the name, job title, bio, `email`, `twitter` and one page of recent articles with title, URL and label. Contact fields are absent when unlisted.", + "operationId": "men-author", "parameters": [ { - "description": "Canonical Khaleej Times author URL", + "description": "Author slug, e.g. lee-swettenham", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "lee-swettenham" + }, + { + "description": "Canonical manchestereveningnews.co.uk/authors// URL; alternative to slug", "in": "query", "name": "url", - "required": true, "type": "string", - "x-example": "https://www.khaleejtimes.com/author/jane-doe" + "x-example": "https://www.manchestereveningnews.co.uk/authors/lee-swettenham/" } ], "produces": [ @@ -412407,7 +487117,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.khaleejTimesAuthorResponseDoc" + "$ref": "#/definitions/publicnews.menAuthorResponseDoc" } }, "400": { @@ -412434,120 +487144,53 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Khaleej Times author profile", + "summary": "Get a Manchester Evening News author profile", "tags": [ - "Khaleej Times" + "Manchester Evening News" ] } }, - "/khaleejtimes/headlines": { + "/men/headlines": { "get": { - "description": "Returns current Khaleej Times headlines for one section or sub-section. `section` is required; its slug is the section's URL path with slashes turned into hyphens, so `/business/markets` is `business-markets`. Top-level sections mix their sub-sections' stories. Each item has its title, URL and publication time, plus summary, author and image when the outlet provides them. Call `khaleejtimes-sections` for the slugs.", - "operationId": "khaleejtimes-headlines", + "description": "Returns current Manchester Evening News headlines for one section. `section` is required and takes a slug such as `news`, `news/greater-manchester-news`, `sport/football/transfer-news`, `whats-on/theatre-news` or `trips-and-breaks`. Each item has its title, URL, summary, publication time and image.", + "operationId": "men-headlines", "parameters": [ { - "description": "Khaleej Times section slug", + "description": "Manchester Evening News section slug", "enum": [ - "business", - "business-property", - "metaverse", - "metaverse-blockchain", - "metaverse-web3", - "business-auto", - "business-aviation", - "business-corporate", - "business-cryptocurrency", - "business-currency-exchange", - "business-economy", - "business-energy", - "business-finance", - "business-infrastructure", - "business-markets", - "business-personal-finance", - "business-tech", - "business-telecom", - "entertainment", - "entertainment-gaming", - "entertainment-local-events", - "entertainment-movies", - "entertainment-music", - "entertainment-ott", - "entertainment-things-to-do-in-the-uae", - "life-and-living", - "life-and-living-banking-in-uae", - "life-and-living-housing-in-uae", - "life-and-living-public-transport-in-uae", - "life-and-living-schooling-in-uae", - "life-and-living-uae-holidays", - "life-and-living-visa-and-immigration-in-uae", - "lifestyle", - "lifestyle-arts", - "lifestyle-beauty", - "lifestyle-books", - "lifestyle-fashion", - "lifestyle-food", - "lifestyle-gadgets", - "lifestyle-health", - "lifestyle-home", - "lifestyle-mental-health", - "lifestyle-parenting", - "lifestyle-restaurant-reviews", - "lifestyle-shopping", - "lifestyle-wellness", - "lifestyle-women-and-money", - "lifestyle-writers-corner", - "opinion", - "opinion-columnists", - "opinion-editorial", - "offbeat", - "long-reads", - "space", - "reviews", - "reviews-movie-reviews", - "reviews-tech-reviews", - "sports", - "sports-cricket", - "sports-f1", - "sports-fifa-world-cup", - "sports-football", - "sports-golf", - "sports-horse-racing", - "sports-tennis", - "sports-local-sports", - "travel", - "travel-uae-attractions", - "uae", - "uae-crime", - "uae-education", - "uae-emergencies", - "uae-environment", - "uae-expo-city-dubai", - "uae-government", - "uae-legal", - "uae-transport", - "uae-weather", - "world", - "world-africa", - "world-americas", - "world-asia", - "world-europe", - "world-gulf", - "world-mena", - "uae-eid-al-etihad", - "metaverse-nfts", - "leadership", - "leadership-interviews", - "leadership-breaking-bread", - "leadership-stories", - "leadership-contributors", - "uae-schools-and-parents", - "uae-global-indians" + "news", + "news/uk-news", + "news/greater-manchester-news", + "news/local-news", + "news/world-news", + "news/health", + "news/property", + "news/cost-of-living", + "news/money-saving", + "news/parenting", + "news/real-life", + "news/showbiz-news", + "news/tv", + "sport", + "sport/football", + "sport/football/football-news", + "sport/football/transfer-news", + "sport/boxing", + "sport/cricket", + "whats-on", + "whats-on/whats-on-news", + "whats-on/family-kids-news", + "whats-on/food-drink-news", + "whats-on/music-nightlife-news", + "whats-on/theatre-news", + "whats-on/shopping", + "trips-and-breaks" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "business" + "x-example": "news" } ], "produces": [ @@ -412578,16 +487221,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Khaleej Times section headlines", + "summary": "Get Manchester Evening News section headlines", "tags": [ - "Khaleej Times" + "Manchester Evening News" ] } }, - "/khaleejtimes/news": { + "/men/news": { "get": { - "description": "Returns fresh Khaleej Times top stories from its public Google News sitemap (the site publishes no RSS feed). Video, partner-content, and section pages are left out.", - "operationId": "khaleejtimes-news", + "description": "Returns the Manchester Evening News' current top stories, with no parameters. Each item has its title, URL, summary, author, publication time and image where available.", + "operationId": "men-news", "produces": [ "application/json" ], @@ -412598,12 +487241,6 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -412616,16 +487253,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Khaleej Times top stories", + "summary": "Get Manchester Evening News top stories", "tags": [ - "Khaleej Times" + "Manchester Evening News" ] } }, - "/khaleejtimes/sections": { + "/men/sections": { "get": { - "description": "Returns the public Khaleej Times section inventory used by the headlines endpoint. A section slug is its URL path with slashes turned into hyphens (for example business-markets for /business/markets).", - "operationId": "khaleejtimes-sections", + "description": "Lists the Manchester Evening News sections accepted by `men-headlines`, such as `news`, `news/uk-news`, `sport/football`, `whats-on/music-nightlife-news` and `trips-and-breaks`. Each entry has a stable `slug`, display `name` and section `url`. Takes no parameters.", + "operationId": "men-sections", "produces": [ "application/json" ], @@ -412642,19 +487279,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Khaleej Times sections", + "summary": "Get Manchester Evening News sections", "tags": [ - "Khaleej Times" + "Manchester Evening News" ] } }, - "/kick/categories": { + "/mercari/autocomplete": { "get": { "consumes": [ "application/json" ], - "description": "Returns Kick's top-level categories (Games, IRL, Music, Gambling, Creative, Alternative, Chat Roulette) with id, name, slug and icon. These slugs are the exact values the category parameter of kick-subcategories takes. Kick's website and its mobile app each list one parent the other omits (Gambling and Chat Roulette), so this call reads both and returns their union; icon is empty for a category only the app lists. The lists are read live from Kick.", - "operationId": "kick-categories", + "description": "Returns Mercari's own search-suggestion list for a partial keyword, in its own relevance order. An empty suggestion list is a normal outcome for obscure or gibberish input.", + "operationId": "mercari-autocomplete", + "parameters": [ + { + "description": "Partial keyword to get suggestions for", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "nike" + } + ], "produces": [ "application/json" ], @@ -412662,7 +487309,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kick.categoriesResponseDoc" + "$ref": "#/definitions/mercari.autocompleteResponseDoc" } }, "400": { @@ -412671,8 +487318,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -412689,36 +487336,19 @@ "ApiKeyAuth": [] } ], - "summary": "List Kick's top-level categories", + "summary": "Mercari search autocomplete", "tags": [ - "Kick" + "Mercari" ] } }, - "/kick/category-clips": { + "/mercari/home": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of 20 clips made in a Kick (kick.com) game or activity category, newest first: id, title, kick.com link, thumbnail, views, likes, duration in seconds, creation time, mature flag, category, the channel it came from, with a cursor for the next page. slug is a category slug from kick-subcategories such as just-chatting; a top-level category such as games has no clip page and returns not found. Only public data is read and no playable media is returned.", - "operationId": "kick-category-clips", - "parameters": [ - { - "description": "Category slug from kick-subcategories or kick-search-categories, lowercase; a kick.com/category URL is also accepted", - "in": "query", - "name": "slug", - "required": true, - "type": "string", - "x-example": "just-chatting" - }, - { - "description": "Previous response's next_cursor; omit for the newest page", - "in": "query", - "name": "cursor", - "type": "string", - "x-example": "clip_01M5TR7FRZPCDA6BS1NP7HKV4T" - } - ], + "description": "Returns Mercari's own curated home-feed recommendations: listing summaries (title, price, thumbnail, condition, seller).", + "operationId": "mercari-home", "produces": [ "application/json" ], @@ -412726,23 +487356,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kick.categoryClipsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/mercari.homeResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -412759,27 +487377,27 @@ "ApiKeyAuth": [] } ], - "summary": "List the newest clips in a Kick category", + "summary": "Get Mercari home feed", "tags": [ - "Kick" + "Mercari" ] } }, - "/kick/channel": { + "/mercari/item/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Kick (kick.com) channel's public profile and, when it is live, its current broadcast: username, bio, verification and affiliate flags, follower count, linked social handles, profile and banner images, recent categories, and a live object with title, viewers, start time, language, tags and categories (omitted when the channel is offline). slug is the channel slug from its kick.com address, case-insensitive; a full kick.com URL is also accepted. Playable stream URLs are never returned. An unknown channel returns not found.", - "operationId": "kick-channel", + "description": "Returns a Mercari item-detail page: description, all photos, price, condition, category, hashtags, the shipping origin state, and a \"similar items\" carousel of related listings.", + "operationId": "mercari-item", "parameters": [ { - "description": "Channel slug from kick.com/{slug}, case-insensitive; a kick.com URL is also accepted", - "in": "query", - "name": "slug", + "description": "Mercari item id, e.g. from a search result's id field", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "xqc" + "x-example": "m98337445585" } ], "produces": [ @@ -412789,7 +487407,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kick.channelResponseDoc" + "$ref": "#/definitions/mercari.ItemDetailResponse" } }, "400": { @@ -412804,8 +487422,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -412822,29 +487440,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Kick channel profile and live state", + "summary": "Get Mercari item detail", "tags": [ - "Kick" + "Mercari" ] } }, - "/kick/channel-chatroom": { + "/mercari/master": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Kick (kick.com) channel's chat restrictions and rules: slow mode (delay between messages), subscribers-only, followers-only (minimum follow time), emotes-only and minimum account age, whether gifts are enabled, and the channel's chat rules text. slug is the channel slug from its kick.com address, case-insensitive; a full kick.com URL is also accepted. The pinned message is not returned. This call reads two Kick pages. An unknown channel returns not found.", - "operationId": "kick-channel-chatroom", - "parameters": [ - { - "description": "Channel slug from kick.com/{slug}, case-insensitive; a kick.com URL is also accepted", - "in": "query", - "name": "slug", - "required": true, - "type": "string", - "x-example": "xqc" - } - ], + "description": "Returns Mercari's full reference taxonomy in one call: every category (with parent linkage), every recognized brand, and every clothing/shoe/apparel size. Large (tens of thousands of brand entries) and effectively static -- cache this response rather than polling it.", + "operationId": "mercari-master", "produces": [ "application/json" ], @@ -412852,23 +487460,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kick.channelChatroomResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/mercari.masterResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -412885,34 +487481,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Kick channel's chat settings and rules", + "summary": "Get Mercari full taxonomy (categories, brands, sizes)", "tags": [ - "Kick" + "Mercari" ] } }, - "/kick/channel-clips": { + "/mercari/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of 20 clips from a Kick channel, newest first: id, title, kick.com link, thumbnail, views, likes, duration in seconds, creation time, mature flag, category, the viewer who made the clip and the channel. Page onward by passing the previous response's next_cursor as cursor; next_cursor is empty on the last page. Playable clip URLs are never returned. An unknown channel returns not found.", - "operationId": "kick-channel-clips", + "description": "Searches Mercari's live resale marketplace by free-text keyword, returning listing summaries (title, price, thumbnail, condition, seller) plus the total matching count.", + "operationId": "mercari-search", "parameters": [ { - "description": "Channel slug from kick.com/{slug}, case-insensitive; a kick.com URL is also accepted", + "description": "Free-text keyword search", "in": "query", - "name": "slug", + "name": "query", "required": true, "type": "string", - "x-example": "xqc" - }, - { - "description": "Previous response's next_cursor; omit for the newest page", - "in": "query", - "name": "cursor", - "type": "string", - "x-example": "abc" + "x-example": "nike jacket" } ], "produces": [ @@ -412922,7 +487511,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kick.channelClipsResponseDoc" + "$ref": "#/definitions/mercari.searchResponseDoc" } }, "400": { @@ -412931,14 +487520,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -412955,27 +487538,27 @@ "ApiKeyAuth": [] } ], - "summary": "List a Kick channel's clips", + "summary": "Search Mercari listings", "tags": [ - "Kick" + "Mercari" ] } }, - "/kick/channel-emotes": { + "/meta-jobs/job": { "get": { "consumes": [ "application/json" ], - "description": "Returns the chat emote sets available in a Kick (kick.com) channel: the channel's own custom emotes (id, name, whether subscribers only, image link), plus the Global and Emoji sets that every channel shares. slug is the channel slug from its kick.com address, case-insensitive; a full kick.com URL is also accepted. A channel with no custom emotes returns an empty channel set. Only public data is read and no playable media is returned. An unknown channel returns not found.", - "operationId": "kick-channel-emotes", + "description": "Returns one Meta Careers posting by its numeric job id (the `id` field returned by search or list).", + "operationId": "meta-jobs-job", "parameters": [ { - "description": "Channel slug from kick.com/{slug}, case-insensitive; a kick.com URL is also accepted", + "description": "Meta job id", "in": "query", - "name": "slug", + "name": "id", "required": true, "type": "string", - "x-example": "xqc" + "x-example": "1238249364564427" } ], "produces": [ @@ -412985,7 +487568,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kick.channelEmotesResponseDoc" + "$ref": "#/definitions/metajobs.jobResponseDoc" } }, "400": { @@ -413018,27 +487601,33 @@ "ApiKeyAuth": [] } ], - "summary": "List the chat emotes a Kick channel offers", + "summary": "Meta Jobs single posting", "tags": [ - "Kick" + "Meta Jobs" ] } }, - "/kick/channel-links": { + "/meta-jobs/list": { "get": { "consumes": [ "application/json" ], - "description": "Returns the panels a Kick (kick.com) channel shows under its stream, in the order Kick shows them: link panels (tip pages, merch, social profiles) with title, description, URL and image, and text panels (FAQ, rules, disclaimers) that are only a title and description. slug is the channel slug from its kick.com address, case-insensitive; a full kick.com URL is also accepted. Only public data is read and no playable media is returned. An unknown channel returns not found.", - "operationId": "kick-channel-links", + "description": "Returns a page of Meta's own public job sitemap -- every open requisition's id, canonical URL, and last-modified timestamp, with no team/location/keyword filtering. Use this for full-catalog enumeration or change tracking via last_modified; use search when you need to filter by team, technology, location, employment type, or keyword.", + "operationId": "meta-jobs-list", "parameters": [ { - "description": "Channel slug from kick.com/{slug}, case-insensitive; a kick.com URL is also accepted", + "description": "Page number, 1-based, defaults to 1", "in": "query", - "name": "slug", - "required": true, - "type": "string", - "x-example": "xqc" + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Page size, defaults to 50, maxes at 200", + "in": "query", + "name": "page_size", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -413048,7 +487637,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kick.channelLinksResponseDoc" + "$ref": "#/definitions/metajobs.listResponseDoc" } }, "400": { @@ -413057,12 +487646,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -413081,27 +487664,82 @@ "ApiKeyAuth": [] } ], - "summary": "List a Kick channel's link panels", + "summary": "Meta Jobs catalog listing", "tags": [ - "Kick" + "Meta Jobs" ] } }, - "/kick/channel-streams": { + "/meta-jobs/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Kick (kick.com) channel's recent broadcast history, newest first: id, title, start time, duration in milliseconds, the viewer count Kick reports for the broadcast, language, mature flag, tags, categories, thumbnail, and for broadcasts with a recording its video uuid, video views and kick.com video link. slug is the channel slug from its kick.com address, case-insensitive; a full kick.com URL is also accepted. Kick keeps between none and about thirty broadcasts. Only public data is read and no playable media is returned. An unknown channel returns not found.", - "operationId": "kick-channel-streams", + "description": "Searches Meta's public careers site (metacareers.com) with the same team/technology/location/employment-type/keyword/remote/sort filters the live search page offers. All filters are optional and combine with AND semantics; an empty request returns Meta's entire open-requisition catalog in one response. `q` matches team, technology, location, or ref/req-code names -- it is NOT a free-text search over job titles or descriptions. `teams` enum (org teams + technologies, both use the same field): `Advertising Technology`, `AR/VR`, `Artificial Intelligence`, `Business Development & Partnerships`, `Communications & Public Policy`, `Creative`, `Data & Analytics`, `Data Center`, `Design & User Experience`, `Enterprise Engineering`, `Global Operations`, `Infrastructure`, `Internship - Business`, `Internship - Engineering, Tech & Design`, `Internship - PhD`, `Legal, Finance, Facilities & Admin`, `People & Recruiting`, `Product Management`, `Research`, `Sales & Marketing`, `Security`, `Software Engineering`, `Technical Program Management`, `University Grad - Business`, `University Grad - Engineering, Tech & Design`, `University Grad - PhD & Postdoc`, `Facebook`, `Messenger`, `Instagram`, `WhatsApp`, `Meta Quest`. `roles` enum: `Full time employment`, `Internship`, `Short term employment`. `results_per_page` enum: `all`, `five`, `ten`.", + "operationId": "meta-jobs-search", "parameters": [ { - "description": "Channel slug from kick.com/{slug}, case-insensitive; a kick.com URL is also accepted", + "description": "Facet-name keyword: matches team, technology, location, or ref/req-code -- not a title/description search", "in": "query", - "name": "slug", - "required": true, + "name": "q", "type": "string", - "x-example": "xqc" + "x-example": "Instagram" + }, + { + "collectionFormat": "csv", + "description": "Repeatable team-or-technology filter (OR); see teams enum above", + "in": "query", + "items": { + "type": "string" + }, + "name": "teams", + "type": "array", + "x-example": "Software Engineering" + }, + { + "collectionFormat": "csv", + "description": "Repeatable employment-type filter (OR); see roles enum above", + "in": "query", + "items": { + "type": "string" + }, + "name": "roles", + "type": "array", + "x-example": "Full time employment" + }, + { + "collectionFormat": "csv", + "description": "Repeatable location-id filter (OR) in Meta's own id format, e.g. menlo-park, london -- not a closed enum", + "in": "query", + "items": { + "type": "string" + }, + "name": "offices", + "type": "array", + "x-example": "menlo-park" + }, + { + "description": "Restrict to remote-only postings", + "in": "query", + "name": "is_remote_only", + "type": "boolean" + }, + { + "description": "Sort newest-first instead of relevance", + "in": "query", + "name": "sort_by_new", + "type": "boolean" + }, + { + "description": "Response size cap: all, five, ten", + "enum": [ + "all", + "five", + "ten" + ], + "in": "query", + "name": "results_per_page", + "type": "string" } ], "produces": [ @@ -413111,7 +487749,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kick.channelStreamsResponseDoc" + "$ref": "#/definitions/metajobs.searchResponseDoc" } }, "400": { @@ -413120,12 +487758,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -413144,27 +487776,62 @@ "ApiKeyAuth": [] } ], - "summary": "List a Kick channel's recent broadcast history", + "summary": "Meta Jobs search", "tags": [ - "Kick" + "Meta Jobs" ] } }, - "/kick/channel-videos": { + "/metacritic/browse": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Kick channel's recent past broadcasts (VODs), newest first: id, uuid, title, start time, duration in milliseconds, views, language, mature flag, tags, categories, thumbnail and the kick.com video link. Kick returns a fixed window of recent videos (26 at the time of writing) with no paging, so this call takes only the channel slug. Playable stream sources are never returned. An unknown channel returns not found.", - "operationId": "kick-channel-videos", + "description": "Browse Metacritic titles by content type, optionally filtered by genre and ordered by Metascore, popularity, or release date. Returns paginated title cards with Metascore and user score.", + "operationId": "metacritic-browse", "parameters": [ { - "description": "Channel slug from kick.com/{slug}, case-insensitive; a kick.com URL is also accepted", + "description": "Content type", + "enum": [ + "game", + "movie", + "tv" + ], "in": "query", - "name": "slug", + "name": "type", "required": true, "type": "string", - "x-example": "xqc" + "x-example": "game" + }, + { + "description": "Genre filter (e.g. Action)", + "in": "query", + "name": "genre", + "type": "string" + }, + { + "description": "Sort order", + "enum": [ + "score", + "popularity", + "release_date", + "oldest" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "1-based page number (default 1)", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Results per page (default 24, max 100)", + "in": "query", + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -413174,7 +487841,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kick.channelVideosResponseDoc" + "$ref": "#/definitions/metacritic.browseResponseDoc" } }, "400": { @@ -413189,8 +487856,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -413207,27 +487874,27 @@ "ApiKeyAuth": [] } ], - "summary": "List a Kick channel's recent past broadcasts", + "summary": "Browse Metacritic titles", "tags": [ - "Kick" + "Metacritic" ] } }, - "/kick/clip": { + "/metacritic/game/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Kick clip by id: title, kick.com link, thumbnail, views, duration, creation time, the moment it starts inside the source broadcast, mature flag, category and channel. id is a clip id such as clip_01M5SKVA6GGAAAT5YPJ7J43WE4, from the id field of kick-channel-clips or kick-clips. A malformed id returns a 400 and an unknown clip returns not found. Playable clip URLs are never returned.", - "operationId": "kick-clip", + "description": "Returns a Metacritic game: Metascore (critic) and user score with sentiment and review counts, genres, per-platform scores, developer/publisher, rating, release date, and trailer.", + "operationId": "metacritic-game", "parameters": [ { - "description": "Clip id from kick-clips' or kick-channel-clips' own clips[].id field", - "in": "query", - "name": "id", + "description": "Metacritic game slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "clip_01M5SKVA6GGAAAT5YPJ7J43WE4" + "x-example": "elden-ring" } ], "produces": [ @@ -413237,7 +487904,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kick.clipResponseDoc" + "$ref": "#/definitions/metacritic.productResponseDoc" } }, "400": { @@ -413252,8 +487919,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -413270,50 +487937,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Kick clip", + "summary": "Get a Metacritic game", "tags": [ - "Kick" + "Metacritic" ] } }, - "/kick/clips": { + "/metacritic/game/{slug}/critic-reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of 20 clips from across all of Kick, either newest first (sort=date, the default) or ranked by views inside a time window (sort=views with time=day, week, month or all). Each clip has its id, title, kick.com link, thumbnail, views, duration, category and channel. Page onward by passing the previous response's next_cursor as cursor. Playable clip URLs are never returned. Use kick-channel-clips for one channel's clips.", - "operationId": "kick-clips", + "description": "Lists critic reviews for a Metacritic game by `slug` (such as `elden-ring`). Each review has the publication, score, quote, author, date, platform and source URL. `sort` is `date` (default), `score` or `publication`; `page` defaults to 1 and `per_page` to 20 with a max of 50. The response includes the `total` count.", + "operationId": "metacritic-game-critic-reviews", "parameters": [ { - "description": "Ordering: date is newest first (default), views ranks by views inside the time window", - "enum": [ - "date", - "views" - ], - "in": "query", - "name": "sort", + "description": "Metacritic game slug", + "in": "path", + "name": "slug", + "required": true, "type": "string", - "x-example": "views" + "x-example": "elden-ring" }, { - "description": "Window that views ranks within; omit for Kick's default window", - "enum": [ - "day", - "week", - "month", - "all" - ], + "description": "1-based page number (default 1)", "in": "query", - "name": "time", - "type": "string", - "x-example": "week" + "name": "page", + "type": "integer" }, { - "description": "Previous response's next_cursor; omit for the first page", + "description": "Results per page (default 20, max 50)", "in": "query", - "name": "cursor", - "type": "string", - "x-example": "abc" + "name": "per_page", + "type": "integer" + }, + { + "description": "Sort order", + "enum": [ + "date", + "score", + "publication" + ], + "in": "query", + "name": "sort", + "type": "string" } ], "produces": [ @@ -413323,7 +487990,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kick.clipsResponseDoc" + "$ref": "#/definitions/metacritic.criticReviewsResponseDoc" } }, "400": { @@ -413332,8 +487999,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -413350,31 +488023,50 @@ "ApiKeyAuth": [] } ], - "summary": "List Kick's site-wide clips", + "summary": "List a Metacritic game's critic reviews", "tags": [ - "Kick" + "Metacritic" ] } }, - "/kick/drops": { + "/metacritic/game/{slug}/user-reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns Kick (kick.com) Drops campaigns, publisher-sponsored rewards that viewers earn by watching, newest first: id, name, status, start and end time, campaign page, the rule (for example Watch to redeem), the publisher with its logo, the game or activity category, every reward with the watch threshold that earns it and its image, and the channels taking part. status is active (the default), expired or all. Only public campaign information is read; no account or progress data.", - "operationId": "kick-drops", + "description": "Returns paginated user reviews for a game: author, score (0-10), quote, date, platform, helpfulness, and spoiler flag.", + "operationId": "metacritic-game-user-reviews", "parameters": [ { - "description": "Which campaigns to return: active (default), expired or all", + "description": "Metacritic game slug", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "elden-ring" + }, + { + "description": "1-based page number (default 1)", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Results per page (default 20, max 50)", + "in": "query", + "name": "per_page", + "type": "integer" + }, + { + "description": "Sort order", "enum": [ - "active", - "expired", - "all" + "date", + "score", + "helpful" ], "in": "query", - "name": "status", - "type": "string", - "x-example": "active" + "name": "sort", + "type": "string" } ], "produces": [ @@ -413384,7 +488076,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kick.dropsResponseDoc" + "$ref": "#/definitions/metacritic.userReviewsResponseDoc" } }, "400": { @@ -413393,8 +488085,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -413411,19 +488109,29 @@ "ApiKeyAuth": [] } ], - "summary": "List Kick Drops campaigns", + "summary": "List a Metacritic game's user reviews", "tags": [ - "Kick" + "Metacritic" ] } }, - "/kick/gifts": { + "/metacritic/movie/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns the catalog of gifts viewers can send on Kick (kick.com) with Kicks, Kick's virtual currency: gift id, name, price in Kicks, tier (BASIC, MID or HIGHER), type (BASIC or LEVEL_UP), and for level-up gifts the message length they allow and how long they pin the message in chat. This call takes no parameters.", - "operationId": "kick-gifts", + "description": "Returns a Metacritic movie: Metascore (critic) and user score with sentiment and review counts, genres, cast/crew, rating, runtime, release date, IMDb id, and trailer.", + "operationId": "metacritic-movie", + "parameters": [ + { + "description": "Metacritic movie slug", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "oppenheimer" + } + ], "produces": [ "application/json" ], @@ -413431,7 +488139,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kick.giftsResponseDoc" + "$ref": "#/definitions/metacritic.productResponseDoc" } }, "400": { @@ -413440,8 +488148,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -413458,19 +488172,52 @@ "ApiKeyAuth": [] } ], - "summary": "List the gifts viewers can send on Kick", + "summary": "Get a Metacritic movie", "tags": [ - "Kick" + "Metacritic" ] } }, - "/kick/languages": { + "/metacritic/movie/{slug}/critic-reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns the stream languages Kick shows in its own language picker, each with its code and display name (67 at the time of writing). These codes are all accepted by the language parameter of kick-livestreams, which also accepts further ISO-style codes the picker does not list. The list is read live from Kick, so it follows any language Kick adds.", - "operationId": "kick-languages", + "description": "Lists critic reviews for a Metacritic movie by `slug` (such as `oppenheimer`). Each review has the publication, score, quote, author, date and source URL. `sort` is `date` (default), `score` or `publication`; `page` defaults to 1 and `per_page` to 20 with a max of 50. The response includes the `total` count.", + "operationId": "metacritic-movie-critic-reviews", + "parameters": [ + { + "description": "Metacritic movie slug", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "oppenheimer" + }, + { + "description": "1-based page number (default 1)", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Results per page (default 20, max 50)", + "in": "query", + "name": "per_page", + "type": "integer" + }, + { + "description": "Sort order", + "enum": [ + "date", + "score", + "publication" + ], + "in": "query", + "name": "sort", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -413478,7 +488225,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kick.languagesResponseDoc" + "$ref": "#/definitions/metacritic.criticReviewsResponseDoc" } }, "400": { @@ -413487,8 +488234,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -413505,58 +488258,50 @@ "ApiKeyAuth": [] } ], - "summary": "List Kick stream languages", + "summary": "List a Metacritic movie's critic reviews", "tags": [ - "Kick" + "Metacritic" ] } }, - "/kick/livestreams": { + "/metacritic/movie/{slug}/user-reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of Kick's live-stream directory: title, viewer count, start time, language, mature flag, tags, category, thumbnail and the channel for each live broadcast. sort is viewer_count_desc (the default, most viewers first) or featured. language filters to one stream language by code (kick-languages lists the languages Kick shows in its own picker; the directory accepts a wider range of codes than that list, and an unrecognized code returns a 400), and category_id filters to one category by the numeric id from kick-subcategories or kick-search-categories. limit is 1 to 100 (default 24). Page onward by passing the previous response's next_cursor as after; next_cursor is empty on the last page.", - "operationId": "kick-livestreams", + "description": "Returns paginated user reviews for a movie: author, score (0-10), quote, date, helpfulness, and spoiler flag.", + "operationId": "metacritic-movie-user-reviews", "parameters": [ { - "description": "Ordering: viewer_count_desc is most viewers first (default), featured is Kick's featured order", - "enum": [ - "viewer_count_desc", - "featured" - ], - "in": "query", - "name": "sort", - "type": "string", - "x-example": "viewer_count_desc" - }, - { - "description": "Stream language code such as en, ja, es, pt-BR, optionally with a region (2 to 3 letters, then an optional 2 to 4 letter region); see kick-languages for the codes Kick lists", - "in": "query", - "name": "language", + "description": "Metacritic movie slug", + "in": "path", + "name": "slug", + "required": true, "type": "string", - "x-example": "ja" + "x-example": "oppenheimer" }, { - "description": "Category id from kick-subcategories' or kick-search-categories' own id field", + "description": "1-based page number (default 1)", "in": "query", - "name": "category_id", - "type": "integer", - "x-example": 15 + "name": "page", + "type": "integer" }, { - "description": "Page size, 1 to 100; defaults to 24", + "description": "Results per page (default 20, max 50)", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 24 + "name": "per_page", + "type": "integer" }, { - "description": "Previous response's next_cursor; omit for the first page", + "description": "Sort order", + "enum": [ + "date", + "score", + "helpful" + ], "in": "query", - "name": "after", - "type": "string", - "x-example": "eyJvIjoxfQ" + "name": "sort", + "type": "string" } ], "produces": [ @@ -413566,7 +488311,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kick.livestreamsResponseDoc" + "$ref": "#/definitions/metacritic.userReviewsResponseDoc" } }, "400": { @@ -413575,8 +488320,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -413593,34 +488344,27 @@ "ApiKeyAuth": [] } ], - "summary": "List live broadcasts on Kick", + "summary": "List a Metacritic movie's user reviews", "tags": [ - "Kick" + "Metacritic" ] } }, - "/kick/search-categories": { + "/metacritic/tv/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Searches Kick's game and activity categories by name and returns each match's id, name, slug, tags, mature flag, current viewers, thumbnail and kick.com link. query is required and at most 100 characters; limit is 1 to 100 (default 10). Use this to find categories outside the first pages that kick-subcategories can reach. A search with no matches returns an empty list.", - "operationId": "kick-search-categories", + "description": "Returns a Metacritic TV show: Metascore (critic) and user score with sentiment and review counts, genres, networks, season count, rating, release date, IMDb id, and trailer.", + "operationId": "metacritic-tv", "parameters": [ { - "description": "Category name to search for, up to 100 characters", - "in": "query", - "name": "query", + "description": "Metacritic TV show slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "chat" - }, - { - "description": "Maximum results, 1 to 100; defaults to 10", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "x-example": "shogun" } ], "produces": [ @@ -413630,7 +488374,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kick.searchCategoriesResponseDoc" + "$ref": "#/definitions/metacritic.productResponseDoc" } }, "400": { @@ -413639,8 +488383,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -413657,41 +488407,50 @@ "ApiKeyAuth": [] } ], - "summary": "Search Kick categories", + "summary": "Get a Metacritic TV show", "tags": [ - "Kick" + "Metacritic" ] } }, - "/kick/search-channels": { + "/metacritic/tv/{slug}/critic-reviews": { "get": { "consumes": [ "application/json" ], - "description": "Searches Kick channels by name and returns each match's id, slug, username, follower count, live flag, verification and kick.com link, most relevant first. query is required and at most 100 characters. live=true restricts to channels that are broadcasting now. limit is 1 to 100 (default 10). A search with no matches returns an empty list.", - "operationId": "kick-search-channels", + "description": "Lists critic reviews for a Metacritic TV show by `slug` (such as `breaking-bad`). Each review has the publication, score, quote, author, date and source URL. `sort` is `date` (default), `score` or `publication`; `page` defaults to 1 and `per_page` to 20 with a max of 50. The response includes the `total` count.", + "operationId": "metacritic-tv-critic-reviews", "parameters": [ { - "description": "Channel name to search for, up to 100 characters", - "in": "query", - "name": "query", + "description": "Metacritic TV show slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "xqc" + "x-example": "shogun" }, { - "description": "Only channels live now", + "description": "1-based page number (default 1)", "in": "query", - "name": "live", - "type": "boolean", - "x-example": true + "name": "page", + "type": "integer" }, { - "description": "Maximum results, 1 to 100; defaults to 10", + "description": "Results per page (default 20, max 50)", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "per_page", + "type": "integer" + }, + { + "description": "Sort order", + "enum": [ + "date", + "score", + "publication" + ], + "in": "query", + "name": "sort", + "type": "string" } ], "produces": [ @@ -413701,7 +488460,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kick.searchChannelsResponseDoc" + "$ref": "#/definitions/metacritic.criticReviewsResponseDoc" } }, "400": { @@ -413710,8 +488469,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -413728,49 +488493,50 @@ "ApiKeyAuth": [] } ], - "summary": "Search Kick channels", + "summary": "List a Metacritic TV show's critic reviews", "tags": [ - "Kick" + "Metacritic" ] } }, - "/kick/subcategories": { + "/metacritic/tv/{slug}/user-reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of Kick's game and activity categories (Just Chatting, Grand Theft Auto V, ...) ordered by current viewers: id, name, slug, parent category, tags, viewers, mature flag, banner and kick.com link. category restricts to one top-level category by slug from kick-categories (a parent Kick adds later is accepted too). page is 1 to 20 and limit is 1 to 32 (default 24) because Kick silently caps both; total is the size of the whole catalog (over 18,000) while reachable is how many entries these limits can reach, so use kick-search-categories to find a category outside the first pages.", - "operationId": "kick-subcategories", + "description": "Returns paginated user reviews for a TV show: author, score (0-10), quote, date, helpfulness, and spoiler flag.", + "operationId": "metacritic-tv-user-reviews", "parameters": [ { - "description": "Top-level category slug from kick-categories; a parent Kick adds later is also accepted once it appears there", - "enum": [ - "games", - "irl", - "music", - "gambling", - "creative", - "alternative", - "chat-roulette" - ], - "in": "query", - "name": "category", + "description": "Metacritic TV show slug", + "in": "path", + "name": "slug", + "required": true, "type": "string", - "x-example": "irl" + "x-example": "shogun" }, { - "description": "Page number, 1 to 20; defaults to 1", + "description": "1-based page number (default 1)", "in": "query", "name": "page", - "type": "integer", - "x-example": 1 + "type": "integer" }, { - "description": "Page size, 1 to 32; defaults to 24", + "description": "Results per page (default 20, max 50)", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "per_page", + "type": "integer" + }, + { + "description": "Sort order", + "enum": [ + "date", + "score", + "helpful" + ], + "in": "query", + "name": "sort", + "type": "string" } ], "produces": [ @@ -413780,7 +488546,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kick.subcategoriesResponseDoc" + "$ref": "#/definitions/metacritic.userReviewsResponseDoc" } }, "400": { @@ -413789,8 +488555,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -413807,27 +488579,52 @@ "ApiKeyAuth": [] } ], - "summary": "List Kick's game and activity categories", + "summary": "List a Metacritic TV show's user reviews", "tags": [ - "Kick" + "Metacritic" ] } }, - "/kick/subcategory": { + "/metaculus/category/{slug}/questions": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Kick game or activity category by slug: id, name, parent category, tags, description, current viewers, follower count, mature flag, banner and kick.com link. slug comes from kick-subcategories or kick-search-categories. An unknown slug returns not found.", - "operationId": "kick-subcategory", + "description": "Returns Metaculus question rows for a category. Allowed category slugs: artificial-intelligence, computing-and-math, cryptocurrencies, economy-business, elections, environment-climate, geopolitics, health-pandemics, law, metaculus, natural-sciences, nuclear, politics, social-sciences, space, sports-entertainment, technology.", + "operationId": "metaculus-category-questions", "parameters": [ { - "description": "Category slug from kick-subcategories' or kick-search-categories' own slug field", - "in": "query", + "description": "Metaculus category slug", + "enum": [ + "artificial-intelligence", + "computing-and-math", + "cryptocurrencies", + "economy-business", + "elections", + "environment-climate", + "geopolitics", + "health-pandemics", + "law", + "metaculus", + "natural-sciences", + "nuclear", + "politics", + "social-sciences", + "space", + "sports-entertainment", + "technology" + ], + "in": "path", "name": "slug", "required": true, "type": "string", - "x-example": "just-chatting" + "x-example": "artificial-intelligence" + }, + { + "description": "Rows to return, default 10, max 25", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -413837,7 +488634,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kick.subcategoryResponseDoc" + "$ref": "#/definitions/metaculus.questionsResponseDoc" } }, "400": { @@ -413858,6 +488655,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -413870,19 +488673,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Kick category", + "summary": "Metaculus category questions", "tags": [ - "Kick" + "Metaculus" ] } }, - "/kick/top-channels": { + "/metaculus/comments-feed": { "get": { "consumes": [ "application/json" ], - "description": "Returns Kick's top-channels list (30 at the time of writing) ranked by followers: id, slug, username, follower count, live flag, verification, profile picture and kick.com link. The list takes no parameters.", - "operationId": "kick-top-channels", + "description": "Returns Metaculus question rows for the questions referenced by the most recent public comments, in comment recency order. Comment bodies are not exposed.", + "operationId": "metaculus-comments-feed", + "parameters": [ + { + "description": "Rows to return, default 10, max 25", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Optional Metaculus topic slug", + "in": "query", + "name": "topic", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -413890,7 +488707,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kick.topChannelsResponseDoc" + "$ref": "#/definitions/metaculus.questionsResponseDoc" } }, "400": { @@ -413899,12 +488716,24 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -413917,27 +488746,33 @@ "ApiKeyAuth": [] } ], - "summary": "List Kick's top channels", + "summary": "Metaculus comments feed", "tags": [ - "Kick" + "Metaculus" ] } }, - "/kick/video": { + "/metaculus/project/{slug}/questions": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Kick (kick.com) past broadcast looked up by its recording's uuid, without needing the channel: uuid, title, start time, duration in milliseconds, the viewer count Kick reports, views, status, language, mature flag, tags, categories, thumbnail, the owning channel and the kick.com video link. id is the uuid from kick-channel-videos or kick-channel-streams, or a kick.com video URL. Only public data is read and no playable media is returned. An unknown video returns not found.", - "operationId": "kick-video", + "description": "Returns Metaculus question rows for one public project, filtered by its slug. A slug that does not exist returns 404.", + "operationId": "metaculus-project-questions", "parameters": [ { - "description": "Video uuid (36 characters) from kick-channel-videos or kick-channel-streams, or a kick.com video URL", - "in": "query", - "name": "id", + "description": "Metaculus project slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "eb707c31-208b-4737-8bcf-a5c9fd187e82" + "x-example": "ai-2027" + }, + { + "description": "Rows to return, default 10, max 25", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -413947,7 +488782,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kick.videoResponseDoc" + "$ref": "#/definitions/metaculus.questionsResponseDoc" } }, "400": { @@ -413968,6 +488803,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -413980,35 +488821,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Kick video by its uuid", + "summary": "Metaculus project questions", "tags": [ - "Kick" + "Metaculus" ] } }, - "/kickstarter/comments": { + "/metaculus/question/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns the first page of one Kickstarter campaign's comments feed (Kickstarter's own server-rendered initial batch, typically 40-60 comments; total_count reports the feed's real total). Each comment includes the author, whether the author is the creator (a reply), the posted timestamp, and the comment text. creator and slug are the two path segments of the project URL, e.g. lookingglass and musubi for kickstarter.com/projects/lookingglass/musubi.", - "operationId": "kickstarter-comments", + "description": "Returns one Metaculus question by numeric `id` (a question or post id). The response has the title, status, question type, unit, open, close and resolve times, forecaster and forecast counts, comment count, latest forecast center and bounds, categories, projects and URL.", + "operationId": "metaculus-question", "parameters": [ { - "description": "Creator path segment of the project URL", - "in": "query", - "name": "creator", - "required": true, - "type": "string", - "x-example": "lookingglass" - }, - { - "description": "Project slug path segment of the project URL", - "in": "query", - "name": "slug", + "description": "Metaculus question or post id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "musubi" + "x-example": "43612" } ], "produces": [ @@ -414018,7 +488851,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kickstarter.commentsResponseDoc" + "$ref": "#/definitions/metaculus.questionResponseDoc" } }, "400": { @@ -414039,6 +488872,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -414051,79 +488890,46 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Kickstarter campaign's comments", + "summary": "Metaculus question detail", "tags": [ - "Kickstarter" + "Metaculus" ] } }, - "/kickstarter/discover": { + "/metaculus/question/{id}/forecast-history": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of Kickstarter's own Discover results -- browse by category id and/or a free-text search term, sorted by magic/popularity/newest/end_date/most_funded, optionally filtered by campaign state and/or restricted to staff picks. Each result includes the campaign's funding snapshot (goal, pledged, percent funded, backers), category, location, creator, and cover photo.", - "operationId": "kickstarter-discover", + "description": "Returns public aggregation forecast history points for one Metaculus question. The `method` enum accepts `recency_weighted`, `unweighted`, and `single_aggregation`.", + "operationId": "metaculus-question-forecast-history", "parameters": [ { - "description": "Kickstarter's own numeric category id (top-level or sub-category), e.g. 16 for Technology", - "in": "query", - "name": "category_id", - "type": "integer", - "x-example": 16 - }, - { - "description": "Free-text search query", - "in": "query", - "name": "term", + "description": "Metaculus question or post id", + "in": "path", + "name": "id", + "required": true, "type": "string", - "x-example": "hologram" + "x-example": "43612" }, { - "default": "magic", - "description": "Result order", + "description": "Aggregation method", "enum": [ - "magic", - "popularity", - "newest", - "end_date", - "most_funded" + "recency_weighted", + "unweighted", + "single_aggregation" ], "in": "query", - "name": "sort", - "type": "string" - }, - { - "default": 1, - "description": "1-based page number", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "collectionFormat": "csv", - "description": "Repeatable campaign state filter", - "in": "query", - "items": { - "enum": [ - "upcoming", - "live", - "late_pledge", - "canceled", - "failed", - "successful" - ], - "type": "string" - }, - "name": "state", - "type": "array" + "name": "method", + "type": "string", + "x-example": "recency_weighted" }, { - "default": false, - "description": "Restrict results to Kickstarter's own \\", + "description": "Maximum history points to return, default 500, max 2000", "in": "query", - "name": "staff_pick_only", - "type": "boolean" + "name": "max_points", + "type": "integer", + "x-example": 500 } ], "produces": [ @@ -414133,7 +488939,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kickstarter.discoverResponseDoc" + "$ref": "#/definitions/metaculus.forecastHistoryResponseDoc" } }, "400": { @@ -414142,12 +488948,24 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -414160,35 +488978,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse or search Kickstarter's Discover surface", + "summary": "Metaculus question forecast history", "tags": [ - "Kickstarter" + "Metaculus" ] } }, - "/kickstarter/project": { + "/metaculus/question/{id}/forecasts": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Kickstarter campaign's detail: funding snapshot (goal, pledged, percent funded, backers, state, dates), category, creator, cover photo, story text, risks & challenges, update/comment/FAQ counts, and reward/pledge tiers. creator and slug are the two path segments of the project URL, e.g. lookingglass and musubi for kickstarter.com/projects/lookingglass/musubi. Reward tiers are best-effort -- see the endpoint's documentation for when they may be omitted.", - "operationId": "kickstarter-project", + "description": "Returns the latest forecast summary per aggregation method for one Metaculus question, by numeric `id`. Each method has its name, forecaster count, center, lower and upper values, and number of history points. `recency_weighted`, `unweighted` and `single_aggregation` are listed first when present. The question details come with it.", + "operationId": "metaculus-question-forecasts", "parameters": [ { - "description": "Creator path segment of the project URL", - "in": "query", - "name": "creator", - "required": true, - "type": "string", - "x-example": "lookingglass" - }, - { - "description": "Project slug path segment of the project URL", - "in": "query", - "name": "slug", + "description": "Metaculus question or post id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "musubi" + "x-example": "43612" } ], "produces": [ @@ -414198,7 +489008,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kickstarter.projectResponseDoc" + "$ref": "#/definitions/metaculus.forecastsResponseDoc" } }, "400": { @@ -414219,6 +489029,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -414231,35 +489047,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Kickstarter campaign's detail", + "summary": "Metaculus question forecasts", "tags": [ - "Kickstarter" + "Metaculus" ] } }, - "/kickstarter/updates": { + "/metaculus/question/{id}/metadata": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Kickstarter campaign's full updates feed: for each update, its number, title, author, whether the author is the creator, publish date, body text, and comment count. creator and slug are the two path segments of the project URL, e.g. lookingglass and musubi for kickstarter.com/projects/lookingglass/musubi.", - "operationId": "kickstarter-updates", + "description": "Returns public metadata for one Metaculus question, including option labels, option history, scaling metadata, resolution fields, and timing fields when present.", + "operationId": "metaculus-question-metadata", "parameters": [ { - "description": "Creator path segment of the project URL", - "in": "query", - "name": "creator", - "required": true, - "type": "string", - "x-example": "lookingglass" - }, - { - "description": "Project slug path segment of the project URL", - "in": "query", - "name": "slug", + "description": "Metaculus question or post id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "musubi" + "x-example": "43731" } ], "produces": [ @@ -414269,7 +489077,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kickstarter.updatesResponseDoc" + "$ref": "#/definitions/metaculus.metadataResponseDoc" } }, "400": { @@ -414290,6 +489098,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -414302,27 +489116,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Kickstarter campaign's updates feed", + "summary": "Metaculus question metadata", "tags": [ - "Kickstarter" + "Metaculus" ] } }, - "/kohls/category": { + "/metaculus/question/{id}/options": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Kohl's category or curated campaign page's product grid (page 1 only), with products (title, image, colors, pricing, rating, availability) and facets for discovering further category values. category is Kohl's own catalog taxonomy string, e.g. \"Room:Dorm\" or \"Department:Kitchen & Dining\" -- combine multiple dimensions with a literal \"+\", percent-encoded as \"%2B\" so it survives as \"+\" rather than being decoded to a space (e.g. \"Room%3ADorm%2BDepartment%3ABedding\"). Every facets[].options[].category value in a response is a ready-to-use category string for a follow-up call, so a caller can discover the full taxonomy by starting from a known category (e.g. \"Room:Dorm\") and following facets. A category value Kohl's does not recognize returns a 404 rather than an unfiltered listing; a recognized dimension with no matching products returns a genuine zero-result response instead.", - "operationId": "kohls-category", + "description": "Returns public multiple-choice option labels and latest option-level forecast values for one Metaculus question. The `method` enum accepts `recency_weighted`, `unweighted`, and `single_aggregation`.", + "operationId": "metaculus-question-options", "parameters": [ { - "description": "Kohl's catalog taxonomy string, e.g. \\", - "in": "query", - "name": "category", + "description": "Metaculus question or post id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "Room:Dorm" + "x-example": "43731" + }, + { + "description": "Aggregation method", + "enum": [ + "recency_weighted", + "unweighted", + "single_aggregation" + ], + "in": "query", + "name": "method", + "type": "string", + "x-example": "recency_weighted" } ], "produces": [ @@ -414332,7 +489158,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kohls.categoryResponseDoc" + "$ref": "#/definitions/metaculus.optionsResponseDoc" } }, "400": { @@ -414353,6 +489179,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -414365,34 +489197,31 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Kohl's category or curated campaign page", + "summary": "Metaculus question options", "tags": [ - "Kohl's" + "Metaculus" ] } }, - "/kohls/product/reviews": { + "/metaculus/questions": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a Kohl's product's customer reviews (title, text, rating, secondary ratings such as quality/durability/value/style, reviewer name and location, submission date, and photo URLs). web_id is the same identifier a GET /kohls/category response's products[].web_id field carries. A web_id with zero reviews returns a genuine zero-result response rather than an error.", - "operationId": "kohls-product-reviews", + "description": "Returns Metaculus question rows. The endpoint fails closed, returning an error instead of partial data, when the source responds with an authenticated-only response or a challenge page.", + "operationId": "metaculus-questions", "parameters": [ { - "description": "Kohl's product web id, e.g. from a GET /kohls/category response's products[].web_id", + "description": "Rows to return, default 10, max 25", "in": "query", - "name": "web_id", - "required": true, - "type": "string", - "x-example": "4569328" + "name": "limit", + "type": "integer" }, { - "description": "Page number, 10 reviews per page (default 1)", + "description": "Optional Metaculus topic slug", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "topic", + "type": "string" } ], "produces": [ @@ -414402,7 +489231,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kohls.productReviewsResponseDoc" + "$ref": "#/definitions/metaculus.questionsResponseDoc" } }, "400": { @@ -414411,12 +489240,24 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -414429,27 +489270,31 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Kohl's product's customer reviews", + "summary": "Metaculus questions", "tags": [ - "Kohl's" + "Metaculus" ] } }, - "/kohls/stores": { + "/metaculus/top-comments": { "get": { "consumes": [ "application/json" ], - "description": "Returns physical Kohl's store locations near a free-text location (city/state, zip code, or address): address, phone, weekly hours, distance, and store badges/services. A search with no results returns a genuine empty list rather than an error.", - "operationId": "kohls-stores", + "description": "Returns Metaculus question rows for the questions whose recent public comments collected the highest vote scores over roughly the last week. Comment bodies are not exposed.", + "operationId": "metaculus-top-comments", "parameters": [ { - "description": "Free-text location: city/state, zip code, or address", + "description": "Rows to return, default 10, max 25", "in": "query", - "name": "search", - "required": true, - "type": "string", - "x-example": "Seattle, WA" + "name": "limit", + "type": "integer" + }, + { + "description": "Optional Metaculus topic slug", + "in": "query", + "name": "topic", + "type": "string" } ], "produces": [ @@ -414459,7 +489304,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kohls.storesResponseDoc" + "$ref": "#/definitions/metaculus.questionsResponseDoc" } }, "400": { @@ -414468,12 +489313,24 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -414486,27 +489343,33 @@ "ApiKeyAuth": [] } ], - "summary": "Find nearby Kohl's store locations", + "summary": "Metaculus top comments feed", "tags": [ - "Kohl's" + "Metaculus" ] } }, - "/kohls/suggest": { + "/metaculus/tournament/{slug}/questions": { "get": { "consumes": [ "application/json" ], - "description": "Returns Kohl's own search-box typeahead result for a partial query: a flat list of suggested search phrases (no product data). A nonsense query returns a genuine, well-formed empty list rather than an error.", - "operationId": "kohls-suggest", + "description": "Returns Metaculus question rows for one public tournament, filtered by its slug. A slug that does not exist returns 404.", + "operationId": "metaculus-tournament-questions", "parameters": [ { - "description": "Partial search text, e.g. \\", - "in": "query", - "name": "query", + "description": "Metaculus tournament slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "coff" + "x-example": "quarterly-cup" + }, + { + "description": "Rows to return, default 10, max 25", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -414516,7 +489379,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kohls.suggestResponseDoc" + "$ref": "#/definitions/metaculus.questionsResponseDoc" } }, "400": { @@ -414525,12 +489388,24 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -414543,24 +489418,24 @@ "ApiKeyAuth": [] } ], - "summary": "Kohl's search-box typeahead suggestions", + "summary": "Metaculus tournament questions", "tags": [ - "Kohl's" + "Metaculus" ] } }, - "/kotaku/article": { + "/metro/article": { "get": { - "description": "Returns public Kotaku article metadata and body paragraphs from a canonical article URL. Kotaku articles are free to read, so the full body is returned.", - "operationId": "kotaku-article", + "description": "Returns public Metro article metadata (headline, description, section, authors, publish/update times, lead image) and body paragraphs from a canonical article URL. Metro articles are free to read; live-blog entries are included in the body.", + "operationId": "metro-article", "parameters": [ { - "description": "Canonical Kotaku article URL", + "description": "Canonical Metro article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://kotaku.com/dressmaker-indie-hours-character-creators-2000736522" + "x-example": "https://metro.co.uk/2026/09/24/andy-burnham-talking-russia-this-week-29649003/" } ], "produces": [ @@ -414597,24 +489472,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Kotaku article content", + "summary": "Get Metro article content", "tags": [ - "Kotaku" + "Metro" ] } }, - "/kotaku/author": { + "/metro/author": { "get": { - "description": "Returns a Kotaku author profile by `url`, a canonical `https://kotaku.com/author/` link. The response has the `name`, `biography`, `image_url`, `social_links` (a `type` label and URL) and recent articles. The article `published_at` is the page's own date text, such as `Published September 23, 2026 at 11:20 am`, not a timestamp.", - "operationId": "kotaku-author", + "description": "Returns a Metro author's name, job title, biography, topic areas, social links, and most recent articles from a canonical author URL.", + "operationId": "metro-author", "parameters": [ { - "description": "Canonical Kotaku author URL", + "description": "Canonical Metro author URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://kotaku.com/author/ethangach" + "x-example": "https://metro.co.uk/author/craig-munro/" } ], "produces": [ @@ -414624,7 +489499,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.kotakuAuthorResponseDoc" + "$ref": "#/definitions/publicnews.metroAuthorResponseDoc" } }, "400": { @@ -414651,43 +489526,68 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Kotaku author profile", + "summary": "Get a Metro author profile", "tags": [ - "Kotaku" + "Metro" ] } }, - "/kotaku/headlines": { + "/metro/headlines": { "get": { - "description": "Returns recent Kotaku headlines for one section. `section` is required and takes one of 17 slugs such as `news`, `reviews`, `games`, `game-tips`, `retro`, `horror` or `deals`. Each item has its title, URL, summary, author, publication time and image.", - "operationId": "kotaku-headlines", + "description": "Returns fresh headlines from one public Metro section feed. The section must be a slug returned by the sections endpoint.", + "operationId": "metro-headlines", "parameters": [ { - "description": "Kotaku section slug", + "description": "Metro section slug", "enum": [ - "entertainment", - "action", - "fantasy", - "horror", - "sci-fi", - "superhero", - "reviews", + "home", "news", - "retro", - "kotaku-game-diary", - "youtube", - "odds-and-ends", - "feature", - "fine-art", - "game-tips", - "games", - "deals" + "uk", + "world", + "us", + "politics", + "tech", + "weird", + "sport", + "football", + "boxing", + "cricket", + "f1", + "golf", + "snooker", + "tennis", + "entertainment", + "showbiz", + "tv", + "film", + "music", + "gaming", + "tv-soaps", + "coronation-street", + "eastenders", + "emmerdale", + "hollyoaks", + "casualty", + "lifestyle", + "health", + "food", + "travel", + "money", + "property", + "families", + "beauty", + "sex", + "horoscopes", + "shopping", + "opinion", + "letters", + "cartoons" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "entertainment" + "x-example": "home" } ], "produces": [ @@ -414718,16 +489618,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Kotaku section headlines", + "summary": "Get Metro section headlines", "tags": [ - "Kotaku" + "Metro" ] } }, - "/kotaku/news": { + "/metro/news": { "get": { - "description": "Returns Kotaku's current top gaming stories, with no parameters. Each item has its title, URL, summary, author, publication time and image where Kotaku provides them. Use `kotaku-headlines` for a single section instead.", - "operationId": "kotaku-news", + "description": "Returns fresh Metro (metro.co.uk) top stories from the site's public RSS feed, with summary, author, publish time, and lead image when present.", + "operationId": "metro-news", "produces": [ "application/json" ], @@ -414738,12 +489638,6 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -414756,16 +489650,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Kotaku top stories", + "summary": "Get Metro top stories", "tags": [ - "Kotaku" + "Metro" ] } }, - "/kotaku/sections": { + "/metro/sections": { "get": { - "description": "Returns the Kotaku section inventory: Entertainment (with its Action, Fantasy, Horror, Sci-Fi, and Superhero sub-topics), Reviews, the Culture umbrella's own sub-topics (News, Retro, Kotaku Game Diary, YouTube, Odds and Ends, Feature, Fine Art), Tips & Guides, Games, and Deals, each linking to its public RSS feed. Every slug is accepted by the headlines endpoint.", - "operationId": "kotaku-sections", + "description": "Lists the 42 Metro section slugs accepted by `metro-headlines`, each with its display name and URL. Slugs include `uk`, `football`, `showbiz` and `coronation-street`. `home` is the site-wide stream, the same stories as `metro-news`, and parent sections such as `news` and `sport` aggregate their child sections.", + "operationId": "metro-sections", "produces": [ "application/json" ], @@ -414782,19 +489676,38 @@ "ApiKeyAuth": [] } ], - "summary": "Get Kotaku sections", + "summary": "Get Metro sections", "tags": [ - "Kotaku" + "Metro" ] } }, - "/kroger/categories": { + "/microsoftstore/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns Kroger's full product-browse category taxonomy: every slug/category_id pair kroger-search and kroger-category accept, each with its department and full breadcrumb. This is how to discover valid slug/category_id values -- previously the only way was to already have one from a search response's facet group. Sourced from Kroger's own site navigation menu; covers every category a shopper can browse to from Kroger's site menu (321 at time of writing across 7 departments). Takes no parameters.", - "operationId": "kroger-categories", + "description": "Returns every accepted category for a department, and -- apps only -- each category's own finer subcategories (e.g. Books & reference -> E-reader, Fiction, Nonfiction, Reference). This is the discovery endpoint for the category/subcategory values accepted by /microsoftstore/search, /microsoftstore/category, and /microsoftstore/charts. Subcategories are apps-only: games categories have none.", + "operationId": "microsoftstore-categories", + "parameters": [ + { + "default": "apps", + "description": "Department to list categories for", + "enum": [ + "apps", + "games", + "devices", + "passes", + "fonts", + "themes", + "tencent-android", + "tencent-mini" + ], + "in": "query", + "name": "media_type", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -414802,17 +489715,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kroger.categoriesResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/microsoftstore.categoriesResponseDoc" } }, - "503": { - "description": "Service Unavailable", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -414823,111 +489730,64 @@ "ApiKeyAuth": [] } ], - "summary": "Get Kroger's product-browse category taxonomy", + "summary": "Get the full Microsoft Store category (and subcategory) taxonomy for a department", "tags": [ - "Kroger" + "Microsoft Store" ] } }, - "/kroger/category": { + "/microsoftstore/category": { "get": { "consumes": [ "application/json" ], - "description": "Browses a Kroger product category and returns product cards plus facet groups, in the same shape as kroger-search. slug and category_id together identify the category (e.g. \"pet\" and \"27\" for kroger.com/pl/pet/27) -- call kroger-categories to discover every valid slug/category_id pair. It uses category_id as a taxonomy filter, with real pagination, and the source field reports which path answered. Facet filters and sort apply to the primary path only: when any of them is set, a failure of that path returns an error rather than silently falling back to unfiltered results.", - "operationId": "kroger-category", + "description": "Returns a page of a single department+category listing, cursor-paginated, with no search keyword required -- the way to list an entire category (search requires a non-empty query and returns nothing for an empty one). category is required; the accepted set depends on media_type (see /microsoftstore/search's markdown doc for the full per-department lists). media_type defaults to apps; all is not accepted here since it has no category filter.", + "operationId": "microsoftstore-category", "parameters": [ { - "description": "Category URL slug segment. Obtain valid slug/category_id pairs from kroger-categories", - "in": "query", - "name": "slug", - "required": true, - "type": "string", - "x-example": "pet" - }, - { - "description": "Category numeric taxonomy id. Obtain valid slug/category_id pairs from kroger-categories", + "description": "Category to browse", "in": "query", - "name": "category_id", + "name": "category", "required": true, "type": "string", - "x-example": "27" - }, - { - "default": 1, - "description": "One-based result page", - "in": "query", - "minimum": 1, - "name": "page", - "type": "integer" + "x-example": "Photo & video" }, { - "default": "relevance", - "description": "Result order. One of: relevance, name_asc, popularity_desc", + "default": "apps", + "description": "Department to browse", "enum": [ - "relevance", - "name_asc", - "popularity_desc" + "apps", + "games", + "devices", + "passes", + "fonts", + "themes", + "tencent-android", + "tencent-mini" ], "in": "query", - "name": "sort", + "name": "media_type", "type": "string" }, { - "description": "Comma-separated brand names to filter by, taken verbatim from a previous response's facets", - "in": "query", - "name": "brands", - "type": "string", - "x-example": "Halo Top,Rebel" - }, - { - "description": "Comma-separated nutrition/dietary facet values", - "in": "query", - "name": "nutrition", - "type": "string", - "x-example": "Gluten Free" - }, - { - "description": "Comma-separated flavor facet values", - "in": "query", - "name": "flavor", - "type": "string", - "x-example": "Chocolate" - }, - { - "description": "Comma-separated scent facet values", - "in": "query", - "name": "scent", - "type": "string", - "x-example": "Bergamot" - }, - { - "description": "Comma-separated savings facet values", - "in": "query", - "name": "savings", - "type": "string", - "x-example": "On Sale" - }, - { - "description": "Comma-separated more-options facet values", + "description": "Opaque pagination cursor from a previous response's next_cursor", "in": "query", - "name": "more_options", - "type": "string", - "x-example": "SNAP EBT Eligible" + "name": "cursor", + "type": "string" }, { - "description": "Lower bound of the price filter; defaults to 0", + "default": "US", + "description": "Store country/region code (ISO-2)", "in": "query", - "name": "price_min", - "type": "number", - "x-example": 0 + "name": "country", + "type": "string" }, { - "description": "Upper bound of the price filter; required to filter on price", + "default": "en-US", + "description": "Display locale (BCP-47)", "in": "query", - "name": "price_max", - "type": "number", - "x-example": 8 + "name": "locale", + "type": "string" } ], "produces": [ @@ -414937,7 +489797,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kroger.categoryResponseDoc" + "$ref": "#/definitions/microsoftstore.categoryResponseDoc" } }, "400": { @@ -414946,12 +489806,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -414964,57 +489818,122 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Kroger category", + "summary": "Browse a Microsoft Store category without a keyword", "tags": [ - "Kroger" + "Microsoft Store" ] } }, - "/kroger/coupons": { + "/microsoftstore/charts": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of Kroger's public digital coupons: savings value, requirement text and quantity, brand, categories, redemption modalities, promotional tags, image, and start/end/expiry dates. Optionally narrow to one product (upc) or brand. This is the anonymous public coupon catalog -- per-account clipping state is not returned.", - "operationId": "kroger-coupons", + "description": "Returns a curated Microsoft Store chart (top free, top paid, top grossing, trending, deals, new releases, getting-started picks, or -- apps only -- most popular), optionally scoped to a category/subcategory and, for games, by Xbox Game Pass availability or player count. Some charts (notably NewAndRising) can legitimately return fewer items than page_size even at the first page -- that reflects real sparsity for that chart.", + "operationId": "microsoftstore-charts", "parameters": [ { - "description": "Narrow to coupons applying to one Kroger product", + "description": "Chart to fetch", + "enum": [ + "TopFree", + "TopPaid", + "TopGrossing", + "toptrending", + "NewAndRising", + "Deal", + "GettingStartedApps", + "MostPopular" + ], "in": "query", - "name": "upc", + "name": "list", + "required": true, "type": "string", - "x-example": "0001111060933" + "x-example": "TopFree" }, { - "description": "Narrow to one brand's coupons", + "default": "apps", + "description": "Department to scope the chart to", + "enum": [ + "apps", + "games" + ], "in": "query", - "name": "brand", + "name": "media_type", + "type": "string" + }, + { + "description": "Optional category to scope the chart to further", + "in": "query", + "name": "category", "type": "string", - "x-example": "Pillsbury" + "x-example": "Photo & video" }, { - "description": "Kroger store/location id that scopes coupons", + "description": "Optional finer subcategory within category (apps only; requires category to also be set)", "in": "query", - "name": "location_id", + "name": "subcategory", "type": "string", - "x-example": "03500917" + "x-example": "E-reader" + }, + { + "description": "Optional discount filter", + "enum": [ + "onsale" + ], + "in": "query", + "name": "discount_filter", + "type": "string" + }, + { + "description": "Optional subscription filter (games only)", + "enum": [ + "gamepass" + ], + "in": "query", + "name": "subscription_filter", + "type": "string" + }, + { + "description": "Optional player-count filter (games only)", + "enum": [ + "AllPlayers", + "SinglePlayer", + "OnlineMultiplayerWithGold", + "LocalMultiplayer", + "CoopSupportOnline", + "CoopSupportLocal" + ], + "in": "query", + "name": "num_players_filter", + "type": "string" }, { "default": 1, - "description": "One-based result page", + "description": "1-based page number", "in": "query", - "minimum": 1, "name": "page", "type": "integer" }, { - "default": 50, - "description": "Coupons per page, 1-200", + "default": 20, + "description": "Items per page (max 24)", "in": "query", - "maximum": 200, - "minimum": 1, "name": "page_size", "type": "integer" + }, + { + "default": "US", + "description": "Store country/region code (ISO-2)", + "in": "query", + "name": "country", + "type": "string" + }, + { + "default": "en-US", + "description": "Display locale (BCP-47)", + "in": "query", + "name": "locale", + "type": "string" } ], "produces": [ @@ -415024,7 +489943,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kroger.couponsResponseDoc" + "$ref": "#/definitions/microsoftstore.chartsResponseDoc" } }, "400": { @@ -415033,12 +489952,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -415051,27 +489964,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get Kroger digital coupons", + "summary": "Get a curated Microsoft Store chart", "tags": [ - "Kroger" + "Microsoft Store" ] } }, - "/kroger/product": { + "/microsoftstore/editorial": { "get": { "consumes": [ "application/json" ], - "description": "Returns product detail for one Kroger item: title, description, image, brand, category trail, price/availability, and rating.", - "operationId": "kroger-product", + "description": "Returns a Microsoft Store editorial article (currently only seen in the wild as a per-product Microsoft Store Awards writeup). There is no discovery endpoint for editorial ids: they are only found embedded in a product's own award.editorial_id field, returned by /microsoftstore/search, /microsoftstore/category, /microsoftstore/charts, /microsoftstore/publisher, and /microsoftstore/related when that product carries an award. An unknown/invalid id returns a 503 upstream error, not a clean 404 -- the upstream itself does not distinguish the two.", + "operationId": "microsoftstore-editorial", "parameters": [ { - "description": "Kroger product UPC/id (the last path segment of the product page URL)", + "description": "Editorial content id, from a product's award.editorial_id field", "in": "query", - "name": "upc", + "name": "editorial_id", "required": true, "type": "string", - "x-example": "0064519402151" + "x-example": "Editorials/Awards_2025/Global/Notion_xpdbvss44r0l9h" + }, + { + "default": "US", + "description": "Store country/region code (ISO-2)", + "in": "query", + "name": "country", + "type": "string" + }, + { + "default": "en-US", + "description": "Display locale (BCP-47)", + "in": "query", + "name": "locale", + "type": "string" } ], "produces": [ @@ -415081,7 +490008,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kroger.productResponseDoc" + "$ref": "#/definitions/microsoftstore.editorialResponseDoc" } }, "400": { @@ -415096,12 +490023,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -415114,44 +490035,58 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Kroger product", + "summary": "Get a Microsoft Store editorial article by id", "tags": [ - "Kroger" + "Microsoft Store" ] } }, - "/kroger/product/reviews": { + "/microsoftstore/events": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a Kroger product's customer reviews -- review text, star rating, recommendation flag, helpful-vote counts, and customer photo URLs -- alongside the product's full star histogram. Customer display names are deliberately not returned.", - "operationId": "kroger-product-reviews", + "description": "Returns a department's \"Special events\" promotional shelf -- featured/limited-time products, distinct from the ranked charts (/microsoftstore/charts) and the curated home/department spotlight (/microsoftstore/spotlight). Only apps and games have this shelf; any other media_type is rejected.", + "operationId": "microsoftstore-events", "parameters": [ { - "description": "Kroger product UPC/id", + "default": "apps", + "description": "Department to fetch special events for", + "enum": [ + "apps", + "games" + ], "in": "query", - "name": "upc", - "required": true, - "type": "string", - "x-example": "0007120200411" + "name": "media_type", + "type": "string" }, { "default": 1, - "description": "One-based review page", + "description": "1-based page number", "in": "query", - "minimum": 1, "name": "page", "type": "integer" }, { - "default": 16, - "description": "Reviews per page, 1-100", + "default": 20, + "description": "Items per page (max 24)", "in": "query", - "maximum": 100, - "minimum": 1, "name": "page_size", "type": "integer" + }, + { + "default": "US", + "description": "Store country/region code (ISO-2)", + "in": "query", + "name": "country", + "type": "string" + }, + { + "default": "en-US", + "description": "Display locale (BCP-47)", + "in": "query", + "name": "locale", + "type": "string" } ], "produces": [ @@ -415161,7 +490096,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kroger.reviewsResponseDoc" + "$ref": "#/definitions/microsoftstore.eventsResponseDoc" } }, "400": { @@ -415170,12 +490105,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -415188,34 +490117,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Kroger product's customer reviews", + "summary": "Get a Microsoft Store department's special-events shelf", "tags": [ - "Kroger" + "Microsoft Store" ] } }, - "/kroger/products": { + "/microsoftstore/product": { "get": { "consumes": [ "application/json" ], - "description": "Returns full detail for up to 50 Kroger products in one call. Carries materially more than kroger-product: a nutrition-facts panel with ingredients, allergens and dietary flags; store-specific price and stock level; a full star-rating histogram; the merchandising hierarchy; and every image perspective. location_id scopes price and stock to one store.", - "operationId": "kroger-products", + "description": "Returns Microsoft Store listing details for a single product id: title, description, publisher, category, media type, aggregate rating and content-rating breakdown, price and SKU summary, size, supported platforms/languages, capabilities, version/release/update timestamps, feature callouts, and media (icon, poster art, screenshots, trailers).", + "operationId": "microsoftstore-product", "parameters": [ { - "description": "Comma-separated Kroger product UPCs, up to 50", + "description": "Microsoft Store product id", "in": "query", - "name": "upcs", + "name": "product_id", "required": true, "type": "string", - "x-example": "0007465324996,0005100027014" + "x-example": "9NCBCSZSJRSB" }, { - "description": "Kroger store/location id that scopes price and stock", + "default": "US", + "description": "Store country/region code (ISO-2)", "in": "query", - "name": "location_id", - "type": "string", - "x-example": "03500917" + "name": "country", + "type": "string" + }, + { + "default": "en-US", + "description": "Display locale (BCP-47)", + "in": "query", + "name": "locale", + "type": "string" } ], "produces": [ @@ -415225,7 +490161,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kroger.productsResponseDoc" + "$ref": "#/definitions/microsoftstore.productResponseDoc" } }, "400": { @@ -415234,8 +490170,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -415252,34 +490188,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get full Kroger product detail in bulk", + "summary": "Get Microsoft Store details for a single product", "tags": [ - "Kroger" + "Microsoft Store" ] } }, - "/kroger/related-tags": { + "/microsoftstore/publisher": { "get": { "consumes": [ "application/json" ], - "description": "Returns the search-refinement chips Kroger shows above its own results for a query (e.g. \"chips ahoy\" returns \"chewy\", \"chunky\", \"thins\"). Each tag carries the full follow-on query it maps to, so results feed straight back into kroger-search.", - "operationId": "kroger-related-tags", + "description": "Returns every product a publisher/developer has listed on the Microsoft Store, cursor-paginated. publisher_name must match the publisher name exactly as shown on a listing (e.g. the publisher field returned by /microsoftstore/product or /microsoftstore/search).", + "operationId": "microsoftstore-publisher", "parameters": [ { - "description": "Search term to get refinement tags for", + "description": "Exact publisher/developer name", "in": "query", - "name": "query", + "name": "publisher_name", "required": true, "type": "string", - "x-example": "chips ahoy" + "x-example": "Spotify AB" }, { - "description": "Kroger store/location id that scopes results", + "description": "Opaque pagination cursor from a previous response's next_cursor", "in": "query", - "name": "location_id", - "type": "string", - "x-example": "03500917" + "name": "cursor", + "type": "string" + }, + { + "default": "US", + "description": "Store country/region code (ISO-2)", + "in": "query", + "name": "country", + "type": "string" + }, + { + "default": "en-US", + "description": "Display locale (BCP-47)", + "in": "query", + "name": "locale", + "type": "string" } ], "produces": [ @@ -415289,7 +490238,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kroger.relatedTagsResponseDoc" + "$ref": "#/definitions/microsoftstore.publisherResponseDoc" } }, "400": { @@ -415298,12 +490247,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -415316,103 +490259,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Kroger search-refinement tags", + "summary": "List a Microsoft Store publisher's full catalog", "tags": [ - "Kroger" + "Microsoft Store" ] } }, - "/kroger/search": { + "/microsoftstore/recommended": { "get": { "consumes": [ "application/json" ], - "description": "Searches Kroger products by keyword and returns product cards (price, unit price, brand, size, stock level) plus the facet groups Kroger offers for the query (brands, nutrition, savings, price range and more). It supports real pagination, and the source field reports which path answered. Facet filters and sort apply to the primary path only: when any of them is set, a failure of that path returns an error rather than silently falling back to unfiltered results.", - "operationId": "kroger-search", + "description": "Returns the store's default, query-less \"Recommended for you\" shelf -- the same recommendations the search box shows before a caller types anything. No query parameters beyond region/locale.", + "operationId": "microsoftstore-recommended", "parameters": [ { - "description": "Search keyword", - "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "milk" - }, - { - "default": 1, - "description": "One-based result page", - "in": "query", - "minimum": 1, - "name": "page", - "type": "integer" - }, - { - "default": "relevance", - "description": "Result order. One of: relevance, name_asc, popularity_desc", - "enum": [ - "relevance", - "name_asc", - "popularity_desc" - ], + "default": "US", + "description": "Store country/region code (ISO-2)", "in": "query", - "name": "sort", + "name": "country", "type": "string" }, { - "description": "Comma-separated brand names to filter by, taken verbatim from a previous response's facets", - "in": "query", - "name": "brands", - "type": "string", - "x-example": "Halo Top,Rebel" - }, - { - "description": "Comma-separated nutrition/dietary facet values", - "in": "query", - "name": "nutrition", - "type": "string", - "x-example": "Gluten Free" - }, - { - "description": "Comma-separated flavor facet values", - "in": "query", - "name": "flavor", - "type": "string", - "x-example": "Chocolate" - }, - { - "description": "Comma-separated scent facet values", - "in": "query", - "name": "scent", - "type": "string", - "x-example": "Bergamot" - }, - { - "description": "Comma-separated savings facet values", - "in": "query", - "name": "savings", - "type": "string", - "x-example": "On Sale" - }, - { - "description": "Comma-separated more-options facet values", - "in": "query", - "name": "more_options", - "type": "string", - "x-example": "SNAP EBT Eligible" - }, - { - "description": "Lower bound of the price filter; defaults to 0", - "in": "query", - "name": "price_min", - "type": "number", - "x-example": 0 - }, - { - "description": "Upper bound of the price filter; required to filter on price", + "default": "en-US", + "description": "Display locale (BCP-47)", "in": "query", - "name": "price_max", - "type": "number", - "x-example": 8 + "name": "locale", + "type": "string" } ], "produces": [ @@ -415422,19 +490295,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kroger.searchResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/microsoftstore.recommendedResponseDoc" } }, "503": { @@ -415449,27 +490310,66 @@ "ApiKeyAuth": [] } ], - "summary": "Search Kroger products", + "summary": "Get the Microsoft Store's default recommendation shelf", "tags": [ - "Kroger" + "Microsoft Store" ] } }, - "/kroger/store": { + "/microsoftstore/related": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Kroger store's public detail: postal address, geographic coordinates, phone number, displayed opening hours (including any daily break hours), and whether it has a drive-thru. store_id is the same store/location id kroger-products and kroger-suggest accept.", - "operationId": "kroger-store", + "description": "Returns products related to a seed product id, paginated. product_type must match the seed product's own media type (apps -> Application, games -> Game, passes -> Passes) -- any other value is rejected upstream. Omit product_type to have it resolved automatically from product_id via one extra lightweight lookup; pass it explicitly to skip that lookup.", + "operationId": "microsoftstore-related", "parameters": [ { - "description": "Kroger store/location id", + "description": "Seed Microsoft Store product id", "in": "query", - "name": "store_id", + "name": "product_id", "required": true, "type": "string", - "x-example": "01600531" + "x-example": "9NCBCSZSJRSB" + }, + { + "description": "The seed product's own type. Omit to auto-resolve from product_id.", + "enum": [ + "Application", + "Game", + "Passes" + ], + "in": "query", + "name": "product_type", + "type": "string" + }, + { + "default": 1, + "description": "1-based page number", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "default": 10, + "description": "Related products per page (max 24)", + "in": "query", + "name": "page_size", + "type": "integer" + }, + { + "default": "US", + "description": "Store country/region code (ISO-2)", + "in": "query", + "name": "country", + "type": "string" + }, + { + "default": "en-US", + "description": "Display locale (BCP-47)", + "in": "query", + "name": "locale", + "type": "string" } ], "produces": [ @@ -415479,7 +490379,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kroger.storeResponseDoc" + "$ref": "#/definitions/microsoftstore.relatedResponseDoc" } }, "400": { @@ -415488,18 +490388,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -415512,33 +490400,66 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Kroger store's detail", + "summary": "Get products related to a Microsoft Store product", "tags": [ - "Kroger" + "Microsoft Store" ] } }, - "/kroger/suggest": { + "/microsoftstore/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns Kroger's own search-box suggestions for a (possibly empty) query, sourced directly from Kroger's public suggestions API rather than the rendered search page. An empty query returns Kroger's default \"trending\" shopping shortcuts instead of an error. location_id scopes results to one Kroger store and defaults to a confirmed-working store id when omitted.", - "operationId": "kroger-suggest", + "description": "Returns one page of written Microsoft Store reviews for a product id, each with rating, title, text, submission time, helpful-vote counts, and device/OS info. sort controls ordering (MostHelpful or MostRecent -- the only two values the upstream API itself accepts; any other value is rejected).", + "operationId": "microsoftstore-reviews", "parameters": [ { - "description": "Partial search text; omit for trending default suggestions", + "description": "Microsoft Store product id", "in": "query", - "name": "query", + "name": "product_id", + "required": true, "type": "string", - "x-example": "rin" + "x-example": "9NCBCSZSJRSB" }, { - "description": "Kroger store/location id", + "default": "MostHelpful", + "description": "Review sort order", + "enum": [ + "MostHelpful", + "MostRecent" + ], "in": "query", - "name": "location_id", - "type": "string", - "x-example": "03500917" + "name": "sort", + "type": "string" + }, + { + "default": 1, + "description": "1-based page number", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "default": 20, + "description": "Reviews per page (max 50)", + "in": "query", + "name": "page_size", + "type": "integer" + }, + { + "default": "US", + "description": "Store country/region code (ISO-2)", + "in": "query", + "name": "country", + "type": "string" + }, + { + "default": "en-US", + "description": "Display locale (BCP-47)", + "in": "query", + "name": "locale", + "type": "string" } ], "produces": [ @@ -415548,11 +490469,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/kroger.suggestResponseDoc" + "$ref": "#/definitions/microsoftstore.reviewsResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -415569,33 +490490,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get Kroger search-box suggestions", + "summary": "Get paginated Microsoft Store reviews for a product", "tags": [ - "Kroger" + "Microsoft Store" ] } }, - "/kyliecosmetics/collections": { + "/microsoftstore/reviews/summary": { "get": { "consumes": [ "application/json" ], - "description": "Returns collections from Kylie Cosmetics (https://www.kyliecosmetics.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", - "operationId": "kyliecosmetics-collections", + "description": "Returns a product's aggregate rating: average rating, total review count, a 1-5 star rating distribution, and the upstream-selected most critical and most favorable written reviews.", + "operationId": "microsoftstore-reviews-summary", "parameters": [ { - "description": "1-based page, defaults to 1", + "description": "Microsoft Store product id", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "product_id", + "required": true, + "type": "string", + "x-example": "9NCBCSZSJRSB" }, { - "description": "Maximum collections, defaults to 50 and supports up to 250", + "default": "US", + "description": "Store country/region code (ISO-2)", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "country", + "type": "string" + }, + { + "default": "en-US", + "description": "Display locale (BCP-47)", + "in": "query", + "name": "locale", + "type": "string" } ], "produces": [ @@ -415605,7 +490534,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" + "$ref": "#/definitions/microsoftstore.reviewsSummaryResponseDoc" } }, "400": { @@ -415614,12 +490543,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -415632,41 +490555,110 @@ "ApiKeyAuth": [] } ], - "summary": "List Kylie Cosmetics collections", + "summary": "Get a Microsoft Store product's aggregate rating summary", "tags": [ - "Kylie Cosmetics" + "Microsoft Store" ] } }, - "/kyliecosmetics/collections/{handle}/products": { + "/microsoftstore/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns products from one Kylie Cosmetics (https://www.kyliecosmetics.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", - "operationId": "kyliecosmetics-collection-products", + "description": "Returns a page of Microsoft Store search results (apps, games, devices, and other listings) for a keyword, with cursor-based pagination and per-item publisher, rating, price, and media. media_type selects the department (apps, games, devices, passes, fonts, themes, tencent-android, tencent-mini, or all); category further filters within that department (the accepted set depends on media_type -- see the markdown doc for the full per-department lists). Pass the previous response's next_cursor to fetch the next page.", + "operationId": "microsoftstore-search", "parameters": [ { - "description": "Collection handle", - "in": "path", - "name": "handle", + "description": "Search keyword", + "in": "query", + "name": "query", "required": true, "type": "string", - "x-example": "collection-handle" + "x-example": "spotify" }, { - "description": "1-based page, defaults to 1", + "default": "all", + "description": "Department to search", + "enum": [ + "all", + "apps", + "games", + "devices", + "passes", + "fonts", + "themes", + "tencent-android", + "tencent-mini" + ], "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "media_type", + "type": "string" }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "description": "Category to filter by (accepted set depends on media_type)", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "category", + "type": "string", + "x-example": "Photo & video" + }, + { + "default": "all", + "description": "Price filter", + "enum": [ + "all", + "Free", + "Paid", + "Sale" + ], + "in": "query", + "name": "price", + "type": "string" + }, + { + "default": "all", + "description": "Maximum-age filter", + "enum": [ + "all", + "TO3", + "TO4", + "TO5", + "TO6", + "TO7", + "TO8", + "TO9", + "TO10", + "TO11", + "TO12", + "TO13", + "TO14", + "TO15", + "TO16", + "TO17" + ], + "in": "query", + "name": "age", + "type": "string" + }, + { + "description": "Opaque pagination cursor from a previous response's next_cursor", + "in": "query", + "name": "cursor", + "type": "string" + }, + { + "default": "US", + "description": "Store country/region code (ISO-2)", + "in": "query", + "name": "country", + "type": "string" + }, + { + "default": "en-US", + "description": "Display locale (BCP-47)", + "in": "query", + "name": "locale", + "type": "string" } ], "produces": [ @@ -415676,7 +490668,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" + "$ref": "#/definitions/microsoftstore.searchResponseDoc" } }, "400": { @@ -415685,18 +490677,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -415709,33 +490689,45 @@ "ApiKeyAuth": [] } ], - "summary": "List Kylie Cosmetics collection products", + "summary": "Search the Microsoft Store", "tags": [ - "Kylie Cosmetics" + "Microsoft Store" ] } }, - "/kyliecosmetics/pages": { + "/microsoftstore/spotlight": { "get": { "consumes": [ "application/json" ], - "description": "Lists static pages from the Kylie Cosmetics store, paged with `page` (default 1) and `limit` (default 50, max 250). Each page has its id, handle, title, URL, plain-text content and timestamps. When `transport_mode` is `ssr_embedded`, items carry only `handle`, `url` and `updated_at`.", - "operationId": "kyliecosmetics-pages", + "description": "Returns the curated hero/spotlight shelf shown at the top of the store's home page or one department's landing page (the large featured banners, not the ranked charts or the smaller \"Special events\" shelf). Only home, apps, and games have a spotlight; any other media_type is rejected.", + "operationId": "microsoftstore-spotlight", "parameters": [ { - "description": "1-based page, defaults to 1", + "default": "home", + "description": "Which spotlight to fetch", + "enum": [ + "home", + "apps", + "games" + ], "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "media_type", + "type": "string" }, { - "description": "Maximum static pages, defaults to 50 and supports up to 250", + "default": "US", + "description": "Store country/region code (ISO-2)", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "country", + "type": "string" + }, + { + "default": "en-US", + "description": "Display locale (BCP-47)", + "in": "query", + "name": "locale", + "type": "string" } ], "produces": [ @@ -415745,7 +490737,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pagesResponseDoc" + "$ref": "#/definitions/microsoftstore.spotlightResponseDoc" } }, "400": { @@ -415754,12 +490746,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -415772,27 +490758,41 @@ "ApiKeyAuth": [] } ], - "summary": "List Kylie Cosmetics static pages", + "summary": "Get the Microsoft Store home page or department spotlight", "tags": [ - "Kylie Cosmetics" + "Microsoft Store" ] } }, - "/kyliecosmetics/pages/{handle}": { + "/microsoftstore/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns one static page from the Kylie Cosmetics store by `handle`. The response has the page id, title, URL, handle, plain-text content, and created, updated and published times. Content is text, not HTML. In some cases `transport_mode` is `ssr_embedded` and `id` is omitted. An unknown handle returns `404`.", - "operationId": "kyliecosmetics-page", + "description": "Returns typeahead-style Microsoft Store search suggestions for a partial search term: plain-text completions plus a short list of matching products (id, title, icon, department, and store URL).", + "operationId": "microsoftstore-suggest", "parameters": [ { - "description": "Page handle", - "in": "path", - "name": "handle", + "description": "Partial search term to autocomplete", + "in": "query", + "name": "prefix", "required": true, "type": "string", - "x-example": "page-handle" + "x-example": "spot" + }, + { + "default": "US", + "description": "Store country/region code (ISO-2)", + "in": "query", + "name": "country", + "type": "string" + }, + { + "default": "en-US", + "description": "Display locale (BCP-47)", + "in": "query", + "name": "locale", + "type": "string" } ], "produces": [ @@ -415802,7 +490802,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pageResponseDoc" + "$ref": "#/definitions/microsoftstore.suggestResponseDoc" } }, "400": { @@ -415811,18 +490811,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -415835,33 +490823,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Kylie Cosmetics static page", + "summary": "Get Microsoft Store search suggestions for a prefix", "tags": [ - "Kylie Cosmetics" + "Microsoft Store" ] } }, - "/kyliecosmetics/products": { + "/mirror/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns products from Kylie Cosmetics's (https://www.kyliecosmetics.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", - "operationId": "kyliecosmetics-products", + "description": "Returns a Mirror article by its canonical `url`: title, description, section, authors, lead image, publication and update times, a `paywalled` flag and the body `paragraphs`. Only public content is returned; subscriber-only or blocked articles return an upstream error.", + "operationId": "mirror-article", "parameters": [ { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Maximum products, defaults to 50 and supports up to 250", + "description": "Canonical Mirror article URL", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.mirror.co.uk/news/uk-news/bootle-house-fire-schools-tributes-37697006" } ], "produces": [ @@ -415871,7 +490850,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -415880,8 +490859,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -415898,27 +490877,30 @@ "ApiKeyAuth": [] } ], - "summary": "List Kylie Cosmetics products", + "summary": "Get Mirror article content", "tags": [ - "Kylie Cosmetics" + "Mirror" ] } }, - "/kyliecosmetics/products/{handle}": { + "/mirror/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns product detail for one Kylie Cosmetics (https://www.kyliecosmetics.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", - "operationId": "kyliecosmetics-product", + "description": "Returns a Mirror author profile by `slug` (for example `neil-shaw`) or by a mirror.co.uk author `url`; supply exactly one. The response has `name`, `job_title`, `bio`, `email`, `twitter` and one page of recent articles with title, URL and label. There is no paging, and unlisted contact details are omitted rather than raising an error.", + "operationId": "mirror-author", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", - "required": true, + "description": "Author slug, e.g. neil-shaw", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "neil-shaw" + }, + { + "description": "Canonical mirror.co.uk/authors// URL; alternative to slug", + "in": "query", + "name": "url", "type": "string", - "x-example": "product-handle" + "x-example": "https://www.mirror.co.uk/authors/neil-shaw/" } ], "produces": [ @@ -415928,7 +490910,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productResponseDoc" + "$ref": "#/definitions/publicnews.mirrorAuthorResponseDoc" } }, "400": { @@ -415943,12 +490925,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -415961,45 +490937,60 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Kylie Cosmetics product", + "summary": "Get a Mirror author profile", "tags": [ - "Kylie Cosmetics" + "Mirror" ] } }, - "/kyliecosmetics/products/{handle}/recommendations": { + "/mirror/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns recommended products for one Kylie Cosmetics (https://www.kyliecosmetics.com) product handle. The storefront URL is fixed server-side.", - "operationId": "kyliecosmetics-product-recommendations", + "description": "Returns recent Mirror headlines for one section. `section` is required and takes one of 34 slugs or paths, such as `news/uk-news`, `sport/football`, `3am` or `lifestyle/food-drink`. Each item has a title and URL, and may include summary, author, publication time and image.", + "operationId": "mirror-headlines", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", - "required": true, - "type": "string", - "x-example": "product-handle" - }, - { - "description": "Maximum products, defaults to 10 and supports up to 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 - }, - { - "description": "Recommendation intent. Allowed values: related, complementary", + "description": "Mirror section slug", "enum": [ - "related", - "complementary" + "news", + "news/uk-news", + "news/world-news", + "news/politics", + "news/weird-news", + "news/royals", + "news/health", + "news/us-news", + "news/real-life-stories", + "sport", + "sport/football", + "sport/boxing", + "sport/cricket", + "sport/formula-1", + "sport/golf", + "sport/horse-racing", + "sport/rugby-league", + "sport/rugby-union", + "3am", + "3am/style", + "3am/us-celebrity-news", + "lifestyle", + "lifestyle/family", + "lifestyle/food-drink", + "lifestyle/gardening", + "lifestyle/motoring", + "lifestyle/sex-relationships", + "travel", + "money", + "money/shopping-deals", + "tv", + "film", + "gaming", + "tech" ], "in": "query", - "name": "intent", + "name": "section", + "required": true, "type": "string", - "x-example": "related" + "x-example": "news" } ], "produces": [ @@ -416009,7 +491000,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -416018,18 +491009,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -416042,43 +491021,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Kylie Cosmetics product recommendations", + "summary": "Get Mirror section headlines", "tags": [ - "Kylie Cosmetics" + "Mirror" ] } }, - "/kyliecosmetics/search/suggest": { + "/mirror/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns products, collections, and query suggestions from Kylie Cosmetics's (https://www.kyliecosmetics.com) predictive search. The storefront URL is fixed server-side.", - "operationId": "kyliecosmetics-search-suggest", - "parameters": [ - { - "description": "Search query", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "wool" - }, - { - "description": "Comma-separated suggestion types. Allowed values: product, collection, query", - "in": "query", - "name": "types", - "type": "string", - "x-example": "product,collection,query" - }, - { - "description": "Maximum results per type, defaults to 10 and supports up to 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 - } - ], + "description": "Returns the current Mirror top stories, with no parameters. Each item has a title and URL, and may include summary, author, publication time and image. Use `mirror-headlines` to read a single section.", + "operationId": "mirror-news", "produces": [ "application/json" ], @@ -416086,19 +491038,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -416113,44 +491053,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get Kylie Cosmetics search suggestions", + "summary": "Get Mirror top stories", "tags": [ - "Kylie Cosmetics" + "Mirror" ] } }, - "/kyliecosmetics/sitemap/urls": { + "/mirror/sections": { "get": { - "consumes": [ + "description": "Lists the Mirror section slugs accepted by `mirror-headlines`. Each entry has a stable `slug`, a display `name` and a section `url`. Slugs can contain a path, such as `news/uk-news` or `sport/football`.", + "operationId": "mirror-sections", + "produces": [ "application/json" ], - "description": "Returns capped URL entries from Kylie Cosmetics's (https://www.kyliecosmetics.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", - "operationId": "kyliecosmetics-sitemap-urls", - "parameters": [ - { - "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", - "enum": [ - "all", - "products", - "collections", - "pages", - "blogs", - "agentic_discovery", - "other" - ], - "in": "query", - "name": "type", - "type": "string", - "x-example": "products" - }, + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Maximum URL entries, defaults to 50 and supports up to 250", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "ApiKeyAuth": [] } ], + "summary": "Get Mirror sections", + "tags": [ + "Mirror" + ] + } + }, + "/mlb/discovery": { + "get": { + "description": "Returns MLB.com's live navigation tree, including hidden nodes labeled with visibility, and the MLB-only value sets for leagues, divisions, game types, roster types, standings types, stat groups, supported stat types, leader categories, MLB Pipeline prospect filters, league-stats hitter positions and player pools, and observed Baseball Savant leaderboard categories and filters including Top Performers, ABS Challenges, Expected Statistics, Outs Above Average, Arm Strength, Arm Value, Home Runs, Percentile Rankings, Pitch Movement, Rolling Windows, Pitcher Arm Angle, Year-to-Year Changes, Catcher Blocking, Catcher Framing, Catcher Throwing, First Base Receiving, and Fielding Run Value. Use these values to discover sections and supported filters before calling MLB endpoints.", + "operationId": "mlb-discovery", "produces": [ "application/json" ], @@ -416158,19 +491096,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/mlb.discoveryResponseDoc" } }, "503": { @@ -416185,19 +491111,55 @@ "ApiKeyAuth": [] } ], - "summary": "List Kylie Cosmetics sitemap URLs", + "summary": "Discover MLB sections and Stats API values", "tags": [ - "Kylie Cosmetics" + "MLB" ] } }, - "/kyliecosmetics/sitemaps": { + "/mlb/editorial-feed": { "get": { - "consumes": [ - "application/json" + "description": "Returns a paginated first-party MLB.com news, video, or selection feed. Slugs are dynamic and not a complete closed topic catalog; discover current topic suggestions with mlb-search and sections with mlb-discovery. Feed items retain upstream Article, ShortContent, VSMContent, or Video fields.", + "operationId": "mlb-editorial-feed", + "parameters": [ + { + "description": "MLB feed or selection slug, such as mlb-news-list or sel-vvc-mlb-stories", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "mlb-news-list" + }, + { + "default": "EN_US", + "description": "Feed locale", + "enum": [ + "EN_US", + "ES_US" + ], + "in": "query", + "name": "language", + "type": "string" + }, + { + "default": 20, + "description": "Items per page (1-100)", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "default": 0, + "description": "Number of items to skip (0-100000)", + "in": "query", + "maximum": 100000, + "minimum": 0, + "name": "skip", + "type": "integer" + } ], - "description": "Returns child sitemap URLs from Kylie Cosmetics's (https://www.kyliecosmetics.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", - "operationId": "kyliecosmetics-sitemaps", "produces": [ "application/json" ], @@ -416205,7 +491167,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" + "$ref": "#/definitions/mlb.editorialFeedResponseDoc" } }, "400": { @@ -416214,12 +491176,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -416232,19 +491188,29 @@ "ApiKeyAuth": [] } ], - "summary": "List Kylie Cosmetics sitemaps", + "summary": "Get an MLB.com editorial feed", "tags": [ - "Kylie Cosmetics" + "MLB" ] } }, - "/kyliecosmetics/store": { + "/mlb/game": { "get": { "consumes": [ "application/json" ], - "description": "Returns storefront metadata for Kylie Cosmetics (https://www.kyliecosmetics.com). The storefront URL is fixed server-side, so no `url` parameter is accepted.", - "operationId": "kyliecosmetics-store", + "description": "Returns an MLB game summary by numeric `id`. The response has the status, both teams with records and score, inning-by-inning runs, probable pitchers, winning, losing and save pitchers, and team box-score totals. It does not include the full play-by-play. Use the play-by-play endpoint for that.", + "operationId": "mlb-game", + "parameters": [ + { + "description": "Numeric MLB game id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "822781" + } + ], "produces": [ "application/json" ], @@ -416252,7 +491218,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.storeResponseDoc" + "$ref": "#/definitions/mlb.gameResponseDoc" } }, "400": { @@ -416261,6 +491227,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -416279,24 +491251,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Kylie Cosmetics store metadata", + "summary": "Get an MLB game feed", "tags": [ - "Kylie Cosmetics" + "MLB" ] } }, - "/latimes/article": { + "/mlb/game-boxscore": { "get": { - "description": "Returns a Los Angeles Times article's public metadata and body paragraphs from a canonical article URL, read from the page's NewsArticle structured data.", - "operationId": "latimes-article", + "description": "Returns the player box score for an MLB game by numeric `id`. For the home and away teams it lists each player used with position, batting order and batting, pitching and fielding stats, plus team totals.", + "operationId": "mlb-game-boxscore", "parameters": [ { - "description": "Canonical Los Angeles Times article URL", + "description": "Numeric MLB game id", "in": "query", - "name": "url", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.latimes.com/environment/story/2026-09-18/newsom-rejects-roll-back-of-ceqa-exemptions-for-advanced-manufacturing" + "x-example": "824651" } ], "produces": [ @@ -416306,7 +491278,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/latimes.articleResponseDoc" + "$ref": "#/definitions/mlb.boxscoreResponseDoc" } }, "400": { @@ -416321,12 +491293,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -416339,24 +491305,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Los Angeles Times article content", + "summary": "Get an MLB player boxscore", "tags": [ - "Los Angeles Times" + "MLB" ] } }, - "/latimes/author": { + "/mlb/game-play-by-play": { "get": { - "description": "Returns a Los Angeles Times author profile by `url`, a canonical `https://www.latimes.com/people/` link; other hosts or paths return a bad-request error. The response has the `name`, `job_title`, `bio`, `email`, `image_url`, `social_accounts` and recent articles with title, URL, summary, publication time and lead image. Accounts the page does not list are absent.", - "operationId": "latimes-author", + "description": "Returns the at-bats of an MLB game by numeric `id`. Each play has its inning and half, batter, pitcher, event and description, and a list of individual pitch and event records with timing and pitch data. The response includes a `total` count of plays.", + "operationId": "mlb-game-play-by-play", "parameters": [ { - "description": "Canonical Los Angeles Times author URL", + "description": "Numeric MLB game id", "in": "query", - "name": "url", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.latimes.com/people/anita-chabria" + "x-example": "824651" } ], "produces": [ @@ -416366,7 +491332,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/latimes.authorResponseDoc" + "$ref": "#/definitions/mlb.playByPlayResponseDoc" } }, "400": { @@ -416381,12 +491347,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -416399,67 +491359,85 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Los Angeles Times author profile", + "summary": "Get MLB game play-by-play", "tags": [ - "Los Angeles Times" + "MLB" ] } }, - "/latimes/headlines": { + "/mlb/league-leaders": { "get": { - "description": "Returns fresh headlines from a public Los Angeles Times section RSS feed: title, canonical URL, summary, author, publication time, and lead image. section defaults to main.", - "operationId": "latimes-headlines", + "description": "Returns ranked MLB leader entries for one or more validated categories. Use mlb-discovery for all accepted categories, groups, and game type codes.", + "operationId": "mlb-league-leaders", "parameters": [ { - "description": "Section slug from latimes-sections, defaults to main", + "description": "Comma-separated MLB leader category names; values are listed in mlb-discovery", + "in": "query", + "name": "categories", + "required": true, + "type": "string", + "x-example": "homeRuns" + }, + { + "description": "Four-digit season; defaults to current year", + "in": "query", + "name": "season", + "type": "integer", + "x-example": 2026 + }, + { + "description": "Stat group", "enum": [ - "main", - "business", - "business/autos", - "business/real-estate", - "business/technology", - "california", - "california/orange-county", - "entertainment-arts", - "entertainment-arts/awards", - "entertainment-arts/books", - "entertainment-arts/business", - "entertainment-arts/movies", - "entertainment-arts/music", - "entertainment-arts/tv", - "environment", - "espanol/comida", - "espanol/deportes", - "espanol/eeuu", - "espanol/entretenimiento", - "espanol/internacional", - "espanol/mexico", - "espanol/politica", - "espanol/vida-y-estilo", - "food", - "lifestyle", - "obituaries", - "opinion", - "politics", - "science", - "sports", - "sports/angels", - "sports/chargers", - "sports/clippers", - "sports/dodgers", - "sports/highschool", - "sports/hockey", - "sports/lakers", - "sports/rams", - "sports/soccer", - "sports/ucla", - "sports/usc", - "travel", - "world-nation" + "hitting", + "pitching", + "fielding", + "catching", + "running", + "game", + "team", + "streak" ], "in": "query", - "name": "section", + "name": "group", + "type": "string" + }, + { + "description": "MLB game type", + "enum": [ + "S", + "R", + "F", + "D", + "L", + "W", + "C", + "P", + "A", + "I", + "E" + ], + "in": "query", + "name": "game_type", "type": "string" + }, + { + "description": "MLB league id", + "enum": [ + "103", + "104" + ], + "in": "query", + "name": "league_id", + "type": "string" + }, + { + "default": 10, + "description": "Leaders per category (1-100)", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer" } ], "produces": [ @@ -416469,7 +491447,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/latimes.headlinesResponseDoc" + "$ref": "#/definitions/mlb.leagueLeadersResponseDoc" } }, "400": { @@ -416478,18 +491456,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -416502,16 +491468,220 @@ "ApiKeyAuth": [] } ], - "summary": "Get Los Angeles Times section headlines", + "summary": "Get MLB league leaders", "tags": [ - "Los Angeles Times" + "MLB" ] } }, - "/latimes/sections": { + "/mlb/league-stats": { "get": { - "description": "Returns the complete set of section slugs accepted by latimes-headlines, each with its display name and public RSS feed URL.", - "operationId": "latimes-sections", + "consumes": [ + "application/json" + ], + "description": "Returns ranked MLB stat splits across both leagues. `group` is required (`hitting`, `pitching`, `fielding`, `catching`, `running`, `game`, `team` or `streak`). `season` defaults to the current year and `stat_type` to `season`. Narrow with `league_id`, `team_id`, `position`, `player_pool`, and page with `limit` (1 to 100) and `offset` (0 to 10000).", + "operationId": "mlb-league-stats", + "parameters": [ + { + "description": "Four-digit season; defaults to current year", + "in": "query", + "name": "season", + "type": "integer", + "x-example": 2026 + }, + { + "description": "Stat group", + "enum": [ + "hitting", + "pitching", + "fielding", + "catching", + "running", + "game", + "team", + "streak" + ], + "in": "query", + "name": "group", + "required": true, + "type": "string", + "x-example": "hitting" + }, + { + "default": "season", + "description": "Stats API stat type; defaults to season", + "enum": [ + "projected", + "projectedRos", + "yearByYear", + "yearByYearAdvanced", + "yearByYearPlayoffs", + "season", + "standard", + "advanced", + "career", + "careerRegularSeason", + "careerAdvanced", + "seasonAdvanced", + "careerStatSplits", + "careerPlayoffs", + "gameLog", + "playLog", + "pitchLog", + "pitchArsenal", + "outsAboveAverage", + "expectedStatistics", + "sabermetrics", + "sprayChart", + "tracking", + "vsPlayer", + "vsPlayerTotal", + "vsPlayer5Y", + "vsTeam", + "vsTeam5Y", + "vsTeamTotal", + "lastXGames", + "byDateRange", + "byDateRangeAdvanced", + "byMonth", + "byMonthPlayoffs", + "byDayOfWeek", + "byDayOfWeekPlayoffs", + "homeAndAway", + "homeAndAwayPlayoffs", + "winLoss", + "winLossPlayoffs", + "rankings", + "rankingsByYear", + "statsSingleSeason", + "statsSingleSeasonAdvanced", + "hotColdZones", + "availableStats", + "opponentsFaced", + "gameTypeStats", + "firstYearStats", + "lastYearStats", + "statSplits", + "statSplitsAdvanced", + "atGameStart", + "vsOpponents", + "sabermetricsMultiTeam", + "projected_Zips", + "projected_ZipsRos", + "projected_Zips2YR", + "projected_Zips3YR" + ], + "in": "query", + "name": "stat_type", + "type": "string" + }, + { + "description": "MLB game type", + "enum": [ + "S", + "R", + "F", + "D", + "L", + "W", + "C", + "P", + "A", + "I", + "E" + ], + "in": "query", + "name": "game_type", + "type": "string" + }, + { + "description": "Start date for byDateRange stat types; requires end_date", + "in": "query", + "name": "start_date", + "type": "string" + }, + { + "description": "End date for byDateRange stat types; requires start_date", + "in": "query", + "name": "end_date", + "type": "string" + }, + { + "description": "Required by vsTeam stat types", + "in": "query", + "name": "opponent_team_id", + "type": "string" + }, + { + "description": "Required by vsPlayer stat types", + "in": "query", + "name": "opponent_player_id", + "type": "string" + }, + { + "description": "MLB league id", + "enum": [ + "103", + "104" + ], + "in": "query", + "name": "league_id", + "type": "string" + }, + { + "description": "Optional MLB team id; discover current team ids with mlb_teams", + "in": "query", + "name": "team_id", + "type": "string" + }, + { + "description": "Hitter position; use only with group=hitting", + "enum": [ + "C", + "1B", + "2B", + "3B", + "SS", + "LF", + "CF", + "RF", + "DH", + "OF", + "IF" + ], + "in": "query", + "name": "position", + "type": "string" + }, + { + "description": "Qualified-player pool", + "enum": [ + "QUALIFIED", + "ALL" + ], + "in": "query", + "name": "player_pool", + "type": "string" + }, + { + "default": 10, + "description": "Results to return (1-100)", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "default": 0, + "description": "Zero-based result offset (0-10000)", + "in": "query", + "maximum": 10000, + "minimum": 0, + "name": "offset", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -416519,7 +491689,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/latimes.sectionsResponseDoc" + "$ref": "#/definitions/mlb.statsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -416540,33 +491716,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Los Angeles Times section feeds", + "summary": "Get ranked MLB league statistics", "tags": [ - "Los Angeles Times" + "MLB" ] } }, - "/lazada/categories": { + "/mlb/player": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Lazada country storefront's public category directory from the server-rendered LazMall navigation menu. The response includes top-level groups, categories, and subcategory links; it does not include product listings.", - "operationId": "lazada-categories", + "description": "Returns an MLB player by numeric `id`. The response has the full name, position, bats and throws sides, birth date, city and country, current age, height, weight, jersey number, MLB debut date, active flag and current team. Unknown players return `404`.", + "operationId": "mlb-player", "parameters": [ { - "description": "Lazada country storefront. Defaults to id.", - "enum": [ - "id", - "ph", - "th", - "my", - "vn", - "sg" - ], + "description": "Numeric MLB player id", "in": "query", - "name": "country", - "type": "string" + "name": "id", + "required": true, + "type": "string", + "x-example": "592450" } ], "produces": [ @@ -416576,7 +491746,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/lazada.categoriesResponseDoc" + "$ref": "#/definitions/mlb.playerResponseDoc" } }, "400": { @@ -416585,8 +491755,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -416603,63 +491779,162 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Lazada country storefront's category directory", + "summary": "Get an MLB player", "tags": [ - "Lazada" + "MLB" ] } }, - "/lazada/category-products": { + "/mlb/player-stats": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Lazada country storefront's product listing for one category, optionally filtered to one brand within it. Product cards include item ids, canonical product URLs, images, prices, ratings, and review counts, with pagination and sort. The category (and optional brand) value is the raw Lazada path slug, not a display name -- use the categories endpoint's own returned URLs to discover a category's slug.", - "operationId": "lazada-category-products", + "description": "Returns one MLB player's statistics. `id` and `group` (`hitting`, `pitching`, `fielding`, `catching`, `running`, `game`, `team` or `streak`) are required. `season` defaults to the current year and `stat_type` to `season`. Other `stat_type` values cover career, game logs and splits. Use `start_date` with `end_date` for date ranges.", + "operationId": "mlb-player-stats", "parameters": [ { - "description": "Lazada country storefront. Defaults to id.", + "description": "Numeric MLB player id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "592450" + }, + { + "description": "Four-digit season; defaults to current year", + "in": "query", + "name": "season", + "type": "integer", + "x-example": 2026 + }, + { + "description": "Stat group", "enum": [ - "id", - "ph", - "th", - "my", - "vn", - "sg" + "hitting", + "pitching", + "fielding", + "catching", + "running", + "game", + "team", + "streak" ], "in": "query", - "name": "country", + "name": "group", + "required": true, + "type": "string", + "x-example": "hitting" + }, + { + "default": "season", + "description": "Stats API stat type; defaults to season", + "enum": [ + "projected", + "projectedRos", + "yearByYear", + "yearByYearAdvanced", + "yearByYearPlayoffs", + "season", + "standard", + "advanced", + "career", + "careerRegularSeason", + "careerAdvanced", + "seasonAdvanced", + "careerStatSplits", + "careerPlayoffs", + "gameLog", + "playLog", + "pitchLog", + "pitchArsenal", + "outsAboveAverage", + "expectedStatistics", + "sabermetrics", + "sprayChart", + "tracking", + "vsPlayer", + "vsPlayerTotal", + "vsPlayer5Y", + "vsTeam", + "vsTeam5Y", + "vsTeamTotal", + "lastXGames", + "byDateRange", + "byDateRangeAdvanced", + "byMonth", + "byMonthPlayoffs", + "byDayOfWeek", + "byDayOfWeekPlayoffs", + "homeAndAway", + "homeAndAwayPlayoffs", + "winLoss", + "winLossPlayoffs", + "rankings", + "rankingsByYear", + "statsSingleSeason", + "statsSingleSeasonAdvanced", + "hotColdZones", + "availableStats", + "opponentsFaced", + "gameTypeStats", + "firstYearStats", + "lastYearStats", + "statSplits", + "statSplitsAdvanced", + "atGameStart", + "vsOpponents", + "sabermetricsMultiTeam", + "projected_Zips", + "projected_ZipsRos", + "projected_Zips2YR", + "projected_Zips3YR" + ], + "in": "query", + "name": "stat_type", "type": "string" }, { - "description": "Lazada category path slug, e.g. \\", + "description": "MLB game type", + "enum": [ + "S", + "R", + "F", + "D", + "L", + "W", + "C", + "P", + "A", + "I", + "E" + ], "in": "query", - "name": "category", - "required": true, - "type": "string", - "x-example": "shop-mobiles" + "name": "game_type", + "type": "string" }, { - "description": "Optional brand path slug to filter within the category.", + "description": "Start date for byDateRange stat types; requires end_date", "in": "query", - "name": "brand", + "name": "start_date", "type": "string" }, { - "description": "Result page, 1-indexed. Defaults to 1.", + "description": "End date for byDateRange stat types; requires start_date", "in": "query", - "name": "page", - "type": "integer" + "name": "end_date", + "type": "string" }, { - "description": "Sort order. Defaults to popularity.", - "enum": [ - "popularity", - "priceasc", - "pricedesc" - ], + "description": "Required by vsTeam stat types", "in": "query", - "name": "sort", + "name": "opponent_team_id", + "type": "string" + }, + { + "description": "Required by vsPlayer stat types", + "in": "query", + "name": "opponent_player_id", "type": "string" } ], @@ -416670,7 +491945,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/lazada.categoryProductsResponseDoc" + "$ref": "#/definitions/mlb.statsResponseDoc" } }, "400": { @@ -416679,8 +491954,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -416697,33 +491978,129 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Lazada country storefront's product listing for one category", + "summary": "Get MLB player season statistics", "tags": [ - "Lazada" + "MLB" ] } }, - "/lazada/home": { + "/mlb/prospect-rankings": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Lazada country storefront's anonymous homepage feed: current flash-sale product cards, featured category links, and (where shown) an official-stores carousel. Product-detail and free-text catalog pages are not included because Lazada's stateless routes currently return an anti-bot challenge on every country domain.", - "operationId": "lazada-home", + "description": "Returns MLB Pipeline's curated Top 100, Top 30 by Team, Top 10 by Position, Draft Top 200, or International Top 50 ranking. The anonymous first-party page embeds full ranked data. Search, sort, team filtering on Top 100, and pagination are applied to the extracted rows. Use mlb_discovery for the exact view, year, team, position, and sort values.", + "operationId": "mlb-prospect-rankings", "parameters": [ { - "description": "Lazada country storefront. Defaults to id.", + "default": "top100", + "description": "Ranking view", "enum": [ - "id", - "ph", - "th", - "my", - "vn", - "sg" + "top100", + "team", + "position", + "draft", + "international" ], "in": "query", - "name": "country", + "name": "view", + "type": "string" + }, + { + "default": 2026, + "description": "Ranking year", + "enum": [ + 2026, + 2025, + 2024, + 2023, + 2022, + 2021, + 2020, + 2019, + 2018, + 2017, + 2016, + 2015, + 2014, + 2013, + 2011, + 2012 + ], + "in": "query", + "name": "year", + "type": "integer" + }, + { + "description": "Required for view=team; one of the MLB Pipeline team ranking slugs. See mlb_discovery.", + "in": "query", + "name": "team_slug", + "type": "string" + }, + { + "description": "Required for view=position", + "enum": [ + "1b", + "2b", + "ss", + "3b", + "c", + "of", + "rhp", + "lhp" + ], + "in": "query", + "name": "position", + "type": "string" + }, + { + "description": "Optional organization filter for view=top100; use a team slug from mlb_discovery.", + "in": "query", + "name": "team_filter", + "type": "string" + }, + { + "description": "Case-insensitive player-name substring", + "in": "query", + "name": "q", + "type": "string" + }, + { + "default": "rank", + "description": "Local sort field", + "enum": [ + "rank", + "level", + "eta", + "age" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Local sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", "type": "string" + }, + { + "default": 250, + "description": "Rows per page (1-250)", + "in": "query", + "maximum": 250, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "description": "Zero-based row offset", + "in": "query", + "maximum": 10000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -416733,7 +492110,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/lazada.homeResponseDoc" + "$ref": "#/definitions/mlb.prospectRankingsResponseDoc" } }, "400": { @@ -416742,12 +492119,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -416760,46 +492131,122 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Lazada country storefront's homepage feed", + "summary": "Get MLB Pipeline curated prospect rankings", "tags": [ - "Lazada" + "MLB" ] } }, - "/lazada/product": { + "/mlb/prospect-stats": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Lazada country storefront's product-detail page: title, brand, full description, image gallery, category breadcrumb, and selectable variant properties. item_id (and, for a specific variant, sku_id) are the same ids the search, category-products, and home endpoints already return as item_id. Price is best-effort, read from the page's own display-tracking data rather than a dedicated pricing field; rating and review count are not available on this endpoint because Lazada fetches them client-side after the initial page load.", - "operationId": "lazada-product", + "description": "Returns MLB Pipeline prospect stats from the anonymous first-party prospect tables. Supports the Top 100, all-prospect, or one-team list; batter/pitcher views; validated date periods and minimum thresholds; and local name/position filters. Use mlb_discovery for date periods, minimum thresholds, and positions. Team ids come from mlb_teams.", + "operationId": "mlb-prospect-stats", "parameters": [ { - "description": "Lazada country storefront. Defaults to id.", + "default": "top100", + "description": "Prospect pool", "enum": [ - "id", - "ph", - "th", - "my", - "vn", - "sg" + "top100", + "all" ], "in": "query", - "name": "country", + "name": "list_type", "type": "string" }, { - "description": "Lazada item id.", + "description": "Optional MLB team id; selects that team's prospect list and overrides list_type", "in": "query", - "name": "item_id", - "required": true, - "type": "integer", - "x-example": 159992555 + "name": "team_id", + "type": "string" }, { - "description": "Optional Lazada sku id, for a specific variant.", + "default": "Year2026", + "description": "Prospect table period", + "enum": [ + "today", + "1day", + "10day", + "30day", + "springTraining", + "Year2019", + "Year2020", + "Year2021", + "Year2022", + "Year2023", + "Year2024", + "Year2025", + "Year2026" + ], "in": "query", - "name": "sku_id", + "name": "date_range", + "type": "string" + }, + { + "default": "batters", + "description": "Player table", + "enum": [ + "batters", + "pitchers" + ], + "in": "query", + "name": "player_type", + "type": "string" + }, + { + "default": 1, + "description": "Minimum PA threshold", + "enum": [ + 1, + 5, + 10, + 25, + 50, + 100, + 150, + 200, + 250 + ], + "in": "query", + "name": "min_pa", + "type": "integer" + }, + { + "description": "Position filter", + "enum": [ + "1b", + "2b", + "ss", + "3b", + "c", + "of", + "rhp", + "lhp" + ], + "in": "query", + "name": "position", + "type": "string" + }, + { + "description": "Case-insensitive player-name substring", + "in": "query", + "name": "q", + "type": "string" + }, + { + "default": 100, + "description": "Rows to return (1-100)", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "description": "Zero-based row offset", + "in": "query", + "maximum": 10000, + "minimum": 0, + "name": "offset", "type": "integer" } ], @@ -416810,7 +492257,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/lazada.productResponseDoc" + "$ref": "#/definitions/mlb.prospectStatsResponseDoc" } }, "400": { @@ -416819,18 +492266,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -416843,57 +492278,62 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Lazada country storefront's product-detail page", + "summary": "Get MLB Pipeline prospect statistics and rankings", "tags": [ - "Lazada" + "MLB" ] } }, - "/lazada/search": { + "/mlb/schedule": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Lazada country storefront's free-text catalog search results: product cards with item ids, canonical product URLs, images, prices in the storefront's own currency, ratings, and review counts, with pagination and sort. Lazada's own search always substitutes generic or trending items rather than returning a genuinely empty result set, so an empty items list or a low total_results is not by itself a reliable \"no matches\" signal.", - "operationId": "lazada-search", + "description": "Returns MLB games, teams, scores, status, probable pitchers, venue, and series information for one date or date range, optionally filtered to a team.", + "operationId": "mlb-schedule", "parameters": [ { - "description": "Lazada country storefront. Defaults to id.", - "enum": [ - "id", - "ph", - "th", - "my", - "vn", - "sg" - ], + "description": "Single date in YYYY-MM-DD format", "in": "query", - "name": "country", + "name": "date", + "type": "string", + "x-example": "2026-08-01" + }, + { + "description": "Range start in YYYY-MM-DD format", + "in": "query", + "name": "start_date", "type": "string" }, { - "description": "Free-text search query.", + "description": "Range end in YYYY-MM-DD format", "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "karaoke" + "name": "end_date", + "type": "string" }, { - "description": "Result page, 1-indexed. Defaults to 1.", + "description": "Numeric MLB team id", "in": "query", - "name": "page", - "type": "integer" + "name": "team_id", + "type": "string" }, { - "description": "Sort order. Defaults to popularity.", + "description": "Game type", "enum": [ - "popularity", - "priceasc", - "pricedesc" + "S", + "R", + "F", + "D", + "L", + "W", + "C", + "P", + "A", + "I", + "E" ], "in": "query", - "name": "sort", + "name": "game_type", "type": "string" } ], @@ -416904,7 +492344,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/lazada.searchResponseDoc" + "$ref": "#/definitions/mlb.scheduleResponseDoc" } }, "400": { @@ -416913,8 +492353,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -416931,24 +492371,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search a Lazada country storefront's catalog by keyword", + "summary": "Get the MLB schedule and scores", "tags": [ - "Lazada" + "MLB" ] } }, - "/leboncoin/listing": { + "/mlb/search": { "get": { - "description": "Returns public metadata for one supplied Leboncoin ad URL. It excludes seller identity and contacts, precise location, payment, delivery, and account data.", - "operationId": "leboncoin-listing", + "description": "Returns the same anonymous MLB typeahead categories used by MLB.com: player suggestions, team suggestions, content topics, and search terms. Queries need at least three characters.", + "operationId": "mlb-search", "parameters": [ { - "description": "Canonical public ad URL returned by leboncoin-search", + "description": "Search text; 3-100 characters", "in": "query", - "name": "url", + "name": "q", "required": true, "type": "string", - "x-example": "https://www.leboncoin.fr/ad/ordinateurs/1946831025" + "x-example": "Yankees" } ], "produces": [ @@ -416958,7 +492398,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/leboncoin.listingResponseDoc" + "$ref": "#/definitions/mlb.searchResponseDoc" } }, "400": { @@ -416967,18 +492407,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -416991,24 +492419,55 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Leboncoin public listing", + "summary": "Search MLB players, teams, and content topics", "tags": [ - "Leboncoin" + "MLB" ] } }, - "/leboncoin/search": { + "/mlb/standings": { "get": { - "description": "Returns public listing cards from one Leboncoin location page. This endpoint excludes contacts, seller profiles, accounts, and transaction data.", - "operationId": "leboncoin-search", + "consumes": [ + "application/json" + ], + "description": "Returns American League and National League standings, including source-provided expected, home/away, last-ten, ranking, and elimination fields when available, using any supported standings type returned by mlb_discovery.", + "operationId": "mlb-standings", "parameters": [ { - "description": "Public Leboncoin location slug", + "description": "Four-digit season; defaults to current year", "in": "query", - "name": "location", - "required": true, + "name": "season", + "type": "integer", + "x-example": 2026 + }, + { + "default": "regularSeason", + "description": "Standings type", + "enum": [ + "regularSeason", + "wildCard", + "divisionLeaders", + "wildCardWithLeaders", + "firstHalf", + "secondHalf", + "springTraining", + "postseason", + "byDivision", + "byConference", + "byLeague", + "byOrganization", + "currentHalf" + ], + "in": "query", + "name": "type", + "type": "string" + }, + { + "description": "Snapshot date in YYYY-MM-DD format; returns standings as of that date", + "in": "query", + "name": "date", "type": "string", - "x-example": "cp_paris_75016" + "x-example": "2026-09-27" } ], "produces": [ @@ -417018,7 +492477,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/leboncoin.searchResponseDoc" + "$ref": "#/definitions/mlb.standingsResponseDoc" } }, "400": { @@ -417045,27 +492504,322 @@ "ApiKeyAuth": [] } ], - "summary": "Search Leboncoin public listings", + "summary": "Get MLB standings", "tags": [ - "Leboncoin" + "MLB" ] } }, - "/letterboxd/film/{slug}": { + "/mlb/statcast-abs-challenges": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a Letterboxd film: synopsis, director, cast, genres, countries, languages, runtime, and aggregate member rating.", - "operationId": "letterboxd-film", + "description": "Returns Baseball Savant's ABS challenge table with repeated season, game type, split, challenging-team, opponent-team, pitch-type, and shadow-zone filters, plus challenger type, level, thresholds, leverage, pitch location, breakeven, and split-year controls. Filter values are live-verified and listed by /mlb/discovery. The entire filtered table is returned; UI-only drawer details and client-side sorting are not separate source filters.", + "operationId": "mlb-statcast-abs-challenges", "parameters": [ { - "description": "Letterboxd film slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "parasite-2019" + "default": "batter", + "description": "Challenge board group", + "enum": [ + "batter", + "batting-team", + "catcher", + "pitcher", + "catching-team", + "team-summary", + "league" + ], + "in": "query", + "name": "challenge_type", + "type": "string" + }, + { + "collectionFormat": "multi", + "description": "Season values", + "in": "query", + "items": { + "enum": [ + "2025", + "2026" + ], + "type": "string" + }, + "name": "seasons", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Game type codes", + "in": "query", + "items": { + "enum": [ + "R", + "S", + "F", + "D", + "L", + "W" + ], + "type": "string" + }, + "name": "game_types", + "type": "array" + }, + { + "default": "for", + "description": "Challenges made or against", + "enum": [ + "for", + "against" + ], + "in": "query", + "name": "data_mode", + "type": "string" + }, + { + "default": "chal", + "description": "Challenge count or run value", + "enum": [ + "chal", + "runs" + ], + "in": "query", + "name": "data_count", + "type": "string" + }, + { + "default": "1", + "description": "Minimum challenges made", + "enum": [ + "0", + "1", + "2", + "5", + "10", + "20" + ], + "in": "query", + "name": "min_challenges", + "type": "string" + }, + { + "default": "0", + "description": "Minimum challenges against", + "enum": [ + "0", + "1", + "2", + "5", + "10", + "20" + ], + "in": "query", + "name": "min_opponent_challenges", + "type": "string" + }, + { + "default": "mlb", + "description": "Competition level", + "enum": [ + "mlb", + "aaa" + ], + "in": "query", + "name": "level", + "type": "string" + }, + { + "description": "Leverage bucket; empty selects All", + "enum": [ + "vlow", + "low", + "med", + "high" + ], + "in": "query", + "name": "leverage", + "type": "string" + }, + { + "description": "Pitch location; empty selects All", + "enum": [ + "in", + "out" + ], + "in": "query", + "name": "ball_strike", + "type": "string" + }, + { + "description": "Challenge breakeven band; empty selects All", + "enum": [ + "low", + "med", + "high", + "vhigh" + ], + "in": "query", + "name": "breakeven", + "type": "string" + }, + { + "default": "1", + "description": "Separate year groups", + "enum": [ + "0", + "1" + ], + "in": "query", + "name": "split_year", + "type": "string" + }, + { + "collectionFormat": "multi", + "description": "Split dimensions", + "in": "query", + "items": { + "enum": [ + "api_game_date_month_text", + "game_type", + "bat_position_code", + "lineup_cd", + "leverage_run_value_code", + "is_strike_calc", + "home_away", + "api_pitch_type_group03", + "gameday3_pitchzone_cd", + "abschallenge_breakeven_code" + ], + "type": "string" + }, + "name": "splits", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Challenging MLB team ids", + "in": "query", + "items": { + "enum": [ + "141", + "110", + "139", + "111", + "147", + "114", + "118", + "116", + "142", + "145", + "108", + "117", + "133", + "136", + "140", + "144", + "146", + "121", + "120", + "143", + "158", + "138", + "112", + "134", + "113", + "109", + "119", + "137", + "135", + "115" + ], + "type": "string" + }, + "name": "challenge_team_ids", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Opponent MLB team ids", + "in": "query", + "items": { + "enum": [ + "141", + "110", + "139", + "111", + "147", + "114", + "118", + "116", + "142", + "145", + "108", + "117", + "133", + "136", + "140", + "144", + "146", + "121", + "120", + "143", + "158", + "138", + "112", + "134", + "113", + "109", + "119", + "137", + "135", + "115" + ], + "type": "string" + }, + "name": "opponent_team_ids", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Pitch type codes", + "in": "query", + "items": { + "enum": [ + "FF", + "SI", + "FC", + "CH", + "FS", + "FO", + "SC", + "CU", + "SL", + "ST", + "SV", + "KN" + ], + "type": "string" + }, + "name": "pitch_types", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Shadow zone codes", + "in": "query", + "items": { + "enum": [ + "11", + "12", + "13", + "14", + "16", + "17", + "18", + "19" + ], + "type": "string" + }, + "name": "shadow_zones", + "type": "array" } ], "produces": [ @@ -417075,7 +492829,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/letterboxd.filmResponseDoc" + "$ref": "#/definitions/mlb.statcastABSChallengesResponseDoc" } }, "400": { @@ -417084,18 +492838,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -417108,27 +492850,121 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Letterboxd film", + "summary": "Get Baseball Savant ABS challenge rankings", "tags": [ - "Letterboxd" + "MLB" ] } }, - "/letterboxd/film/{slug}/rating-histogram": { + "/mlb/statcast-active-spin": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a film's full star-rating distribution (0.5 to 5.0 in half-star buckets) with counts and percentages.", - "operationId": "letterboxd-film-rating-histogram", + "description": "Returns pitcher Active Spin table rows for the selected season/calculation method, minimum pitch count, and throwing hand. Table sorting and pagination are applied locally. The player search only highlights pitchers in the first-party SVG visualization; the SVG chart and CSV download remain outside this JSON table contract.", + "operationId": "mlb-statcast-active-spin", "parameters": [ { - "description": "Letterboxd film slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "parasite-2019" + "default": "2026_spin-based", + "description": "Season and calculation method", + "enum": [ + "2026_spin-based", + "2026_observed", + "2025_spin-based", + "2025_observed", + "2024_spin-based", + "2024_observed", + "2023_spin-based", + "2023_observed", + "2022_spin-based", + "2022_observed", + "2021_spin-based", + "2021_observed", + "2020_spin-based", + "2020_observed", + "2019_observed", + "2018_observed", + "2017_observed" + ], + "in": "query", + "name": "year", + "type": "string" + }, + { + "default": "50", + "description": "Minimum total pitches", + "enum": [ + "50", + "100", + "250", + "500", + "750", + "1000", + "1500", + "2000", + "2500", + "3000" + ], + "in": "query", + "name": "min", + "type": "string" + }, + { + "description": "Pitcher throwing hand; omit for both", + "enum": [ + "R", + "L" + ], + "in": "query", + "name": "hand", + "type": "string" + }, + { + "default": "formatted_active_spin_fourseam", + "description": "Local table sort field", + "enum": [ + "name_display_last_first", + "team_id", + "pitch_hand", + "formatted_active_spin_fourseam", + "formatted_active_spin_sinker", + "formatted_active_spin_cutter", + "formatted_active_spin_changeup", + "formatted_active_spin_splitter", + "formatted_active_spin_curve", + "formatted_active_spin_slider", + "formatted_active_spin_sweeper", + "formatted_active_spin_slurve" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": "desc", + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", + "type": "string" + }, + { + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "default": 0, + "description": "Zero-based row offset", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -417138,7 +492974,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/letterboxd.ratingHistogramResponseDoc" + "$ref": "#/definitions/mlb.statcastActiveSpinResponseDoc" } }, "400": { @@ -417147,8 +492983,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -417165,33 +493001,255 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Letterboxd film's rating distribution", + "summary": "Get Baseball Savant Active Spin rows", "tags": [ - "Letterboxd" + "MLB" ] } }, - "/letterboxd/film/{slug}/reviews": { + "/mlb/statcast-arm-angle": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns popular reviews for a Letterboxd film by `slug`, up to `limit` (default 10, max 50). Each review has the username, display name, rating from 0.5 to 5.0 when the reviewer gave one, liked flag, date, text, spoiler flag, and like and comment counts.", - "operationId": "letterboxd-film-reviews", + "description": "Returns Pitcher Arm Angle table rows and the matching MLB-average reference. Supports season, team, game type, pitch type, hand, batter side, pitch-count thresholds, date range, and up to four group-by selectors. Table sorting and pagination run locally. Visualization-only controls, animation, and CSV output are separate formats.", + "operationId": "mlb-statcast-arm-angle", "parameters": [ { - "description": "Letterboxd film slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "parasite-2019" + "collectionFormat": "multi", + "description": "Seasons; at most three may be combined. Defaults to 2026.", + "in": "query", + "items": { + "enum": [ + "2026", + "2025", + "2024", + "2023", + "2022", + "2021", + "2020" + ], + "type": "string" + }, + "name": "seasons", + "type": "array" }, { - "description": "Max reviews, default 10, max 50", + "collectionFormat": "multi", + "description": "MLB team ids; omit for all teams.", + "in": "query", + "items": { + "enum": [ + "108", + "109", + "110", + "111", + "112", + "113", + "114", + "115", + "116", + "117", + "118", + "119", + "120", + "121", + "133", + "134", + "135", + "136", + "137", + "138", + "139", + "140", + "141", + "142", + "143", + "144", + "145", + "146", + "147", + "158" + ], + "type": "string" + }, + "name": "teams", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Game type codes; defaults to R.", + "in": "query", + "items": { + "enum": [ + "R", + "F", + "D", + "L", + "W" + ], + "type": "string" + }, + "name": "game_types", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Pitch type codes; defaults to FF.", + "in": "query", + "items": { + "enum": [ + "FF", + "SI", + "FC", + "CH", + "FS", + "FO", + "SC", + "CU", + "SL", + "ST", + "SV", + "KN" + ], + "type": "string" + }, + "name": "pitch_types", + "type": "array" + }, + { + "description": "Pitcher throwing hand; omit for both.", + "enum": [ + "L", + "R" + ], + "in": "query", + "name": "pitch_hand", + "type": "string" + }, + { + "description": "Batter side; omit for both.", + "enum": [ + "L", + "R" + ], + "in": "query", + "name": "bat_side", + "type": "string" + }, + { + "description": "Minimum total pitches; defaults to q.", + "enum": [ + "q", + "1", + "5", + "10", + "25", + "50", + "100", + "300", + "500", + "1000", + "1500", + "2000", + "2500", + "3000" + ], + "in": "query", + "name": "min", + "type": "string" + }, + { + "description": "Minimum pitches per group; defaults to 1.", + "enum": [ + "1", + "5", + "10", + "25", + "50", + "100", + "300", + "500", + "1000", + "1500", + "2000" + ], + "in": "query", + "name": "min_group_pitches", + "type": "string" + }, + { + "collectionFormat": "multi", + "description": "Up to four grouping fields.", + "in": "query", + "items": { + "enum": [ + "year", + "api_game_date_month_text", + "api_pitch_type_group03", + "game_type", + "bat_side", + "fld_team_id" + ], + "type": "string" + }, + "name": "group_by", + "type": "array" + }, + { + "description": "Inclusive start date, YYYY-MM-DD.", + "in": "query", + "name": "date_start", + "type": "string" + }, + { + "description": "Inclusive end date, YYYY-MM-DD.", + "in": "query", + "name": "date_end", + "type": "string" + }, + { + "description": "Local table sort field; defaults to arm_angle.", + "enum": [ + "name", + "team_name", + "pitch_hand", + "n_pitches", + "arm_angle", + "release_ball_x", + "relative_release_ball_x", + "release_ball_z", + "relative_shoulder_x", + "shoulder_z" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Local sort direction; defaults to asc.", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", + "type": "string" + }, + { + "default": 100, + "description": "Rows per page (1-500).", "in": "query", + "maximum": 500, + "minimum": 1, "name": "limit", "type": "integer" + }, + { + "default": 0, + "description": "Zero-based row offset (0-5000).", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -417201,7 +493259,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/letterboxd.reviewsResponseDoc" + "$ref": "#/definitions/mlb.statcastArmAngleResponseDoc" } }, "400": { @@ -417210,8 +493268,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -417228,33 +493286,164 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Letterboxd film's popular reviews", + "summary": "Get Baseball Savant Pitcher Arm Angle rows", "tags": [ - "Letterboxd" + "MLB" ] } }, - "/letterboxd/film/{slug}/similar": { + "/mlb/statcast-arm-strength": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists films Letterboxd recommends as similar to the film given by `slug`, up to `limit` (default 10, max 50). Each film has its `slug`, title and Letterboxd URL. Use the slug to look up that film's details.", - "operationId": "letterboxd-film-similar", + "description": "Returns the player or team Arm Strength leaderboard with verified year, team, position metric, minimum throws, local sort, and pagination filters. The player detail route returns individual throw records.", + "operationId": "mlb-statcast-arm-strength", "parameters": [ { - "description": "Letterboxd film slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "parasite-2019" + "default": "player", + "description": "Leaderboard row type", + "enum": [ + "player", + "team" + ], + "in": "query", + "name": "type", + "type": "string" }, { - "description": "Max films, default 10, max 50", + "default": "2026", + "description": "Season or all years", + "enum": [ + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026", + "9999" + ], + "in": "query", + "name": "year", + "type": "string" + }, + { + "description": "MLB team id", + "enum": [ + "108", + "117", + "133", + "141", + "144", + "158", + "138", + "112", + "109", + "119", + "137", + "114", + "136", + "146", + "121", + "120", + "110", + "135", + "143", + "134", + "140", + "139", + "113", + "111", + "115", + "118", + "116", + "142", + "145", + "147" + ], + "in": "query", + "name": "team_id", + "type": "string" + }, + { + "description": "Position metric", + "enum": [ + "arm_inf", + "arm_of", + "arm_1b", + "arm_2b", + "arm_3b", + "arm_ss", + "arm_lf", + "arm_cf", + "arm_rf" + ], + "in": "query", + "name": "position", + "type": "string" + }, + { + "default": "50", + "description": "Minimum throws", + "enum": [ + "50", + "100", + "300", + "500", + "1000" + ], + "in": "query", + "name": "min_throws", + "type": "string" + }, + { + "default": "max_arm_strength", + "description": "Local sort field", + "enum": [ + "fielder_name", + "team_name", + "total_throws", + "max_arm_strength", + "arm_overall", + "arm_inf", + "arm_of", + "arm_1b", + "arm_2b", + "arm_3b", + "arm_ss", + "arm_lf", + "arm_cf", + "arm_rf" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": "desc", + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", + "type": "string" + }, + { + "default": 100, + "description": "Rows per page (1-500)", "in": "query", + "maximum": 500, + "minimum": 1, "name": "limit", "type": "integer" + }, + { + "description": "Zero-based row offset", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -417264,7 +493453,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/letterboxd.similarResponseDoc" + "$ref": "#/definitions/mlb.statcastArmStrengthResponseDoc" } }, "400": { @@ -417273,12 +493462,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -417291,27 +493474,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get films similar to a Letterboxd film", + "summary": "Get Baseball Savant Arm Strength leaderboard data", "tags": [ - "Letterboxd" + "MLB" ] } }, - "/letterboxd/member/{username}": { + "/mlb/statcast-arm-strength-player": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a member's public profile stats (films watched, lists, following/followers). No private data — everything is visible to a logged-out visitor.", - "operationId": "letterboxd-member", + "description": "Returns the individual Arm Strength throw records for one player, by positive `player_id`. `year` can be 2020 to 2026, or `9999` for all years, and defaults to the current verified season. Each throw has its year, fielder id, position, the measured arm-strength value and a play id.", + "operationId": "mlb-statcast-arm-strength-player", "parameters": [ { - "description": "Letterboxd username", - "in": "path", - "name": "username", + "description": "Positive MLB player id", + "in": "query", + "name": "player_id", "required": true, "type": "string", - "x-example": "dave" + "x-example": "694374" + }, + { + "default": "2026", + "description": "Season or all years", + "enum": [ + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026", + "9999" + ], + "in": "query", + "name": "year", + "type": "string" } ], "produces": [ @@ -417321,7 +493518,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/letterboxd.memberResponseDoc" + "$ref": "#/definitions/mlb.statcastArmStrengthPlayerResponseDoc" } }, "400": { @@ -417336,12 +493533,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -417354,124 +493545,223 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Letterboxd member's public profile stats", + "summary": "Get Baseball Savant player throw details", "tags": [ - "Letterboxd" + "MLB" ] } }, - "/letterboxd/person/{slug}": { + "/mlb/statcast-arm-value": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a person's Letterboxd filmography by `slug`, ranked by popularity for one credit role. `role` is `actor` (default) or `director`, and `limit` defaults to 10 with a max of 50. The response has the person's name, role, and films with `slug`, title and Letterboxd URL.", - "operationId": "letterboxd-person", + "description": "Returns the Arm Value section's complete embedded table, including its Run, Fld, Pit, team, and league views, filters, local sorting, and pagination. Expanded player rows are available from mlb-statcast-arm-value-details. The JSON rows contain the same selected records as the upstream CSV export.", + "operationId": "mlb-statcast-arm-value", "parameters": [ { - "description": "Letterboxd person slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "bong-joon-ho" + "description": "Case- and accent-insensitive local substring on the displayed row name; up to 100 characters", + "in": "query", + "name": "q", + "type": "string" }, { - "description": "Credit role, default actor", + "default": "Fld", + "description": "Leaderboard view", "enum": [ - "actor", - "director" + "Run", + "Fld", + "Pit", + "Batting Team", + "Pitching Team", + "League" ], "in": "query", - "name": "role", + "name": "type", "type": "string" }, { - "description": "Max films, default 10, max 50", + "default": "Regular", + "description": "Game type", + "enum": [ + "Regular", + "Playoff", + "All" + ], "in": "query", - "name": "limit", + "name": "game_type", + "type": "string" + }, + { + "default": "All", + "description": "Baserunner situation", + "enum": [ + "All", + "r10_to_2b_210", + "r10_to_3b_210", + "r11_to_3b_10", + "r11_to_3b_2", + "r11_to_hp_10", + "r11_to_hp_2", + "r12_to_hp_10", + "r12_to_hp_2", + "r13_to_hp_0", + "r13_to_hp_1" + ], + "in": "query", + "name": "key_base_out", + "type": "string" + }, + { + "default": "top", + "description": "Minimum opportunities", + "enum": [ + "top", + "1", + "5", + "10", + "20", + "30", + "40", + "50", + "75", + "100", + "250", + "500", + "1000" + ], + "in": "query", + "name": "minimum_opps", + "type": "string" + }, + { + "description": "Start season, 2016 through current season", + "in": "query", + "minimum": 2016, + "name": "start_year", "type": "integer" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/letterboxd.personResponseDoc" - } }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "End season, 2016 through current season; must be >= start_year", + "in": "query", + "minimum": 2016, + "name": "end_year", + "type": "integer" }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "no", + "description": "Return one row per season", + "enum": [ + "no", + "yes" + ], + "in": "query", + "name": "split", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get a Letterboxd person's filmography", - "tags": [ - "Letterboxd" - ] - } - }, - "/letterboxd/popular": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a Letterboxd film chart ranked by popularity. Omit `period` for all-time, or set `day`, `week`, `month` or `year`. `genre` takes a genre slug, `decade` a value like `2010s`, and `limit` defaults to 10 with a max of 50. Each film has its `slug`, title and Letterboxd URL.", - "operationId": "letterboxd-popular", - "parameters": [ + "description": "MLB team id from mlb_discovery, split for All Teams Split by Team, or empty for All Teams", + "enum": [ + "108", + "117", + "133", + "141", + "144", + "158", + "138", + "112", + "109", + "119", + "137", + "114", + "136", + "146", + "121", + "120", + "110", + "135", + "143", + "134", + "140", + "139", + "113", + "111", + "115", + "118", + "116", + "142", + "145", + "147", + "split" + ], + "in": "query", + "name": "team_id", + "type": "string" + }, { - "description": "Popularity window, omit for all-time", + "default": "1", + "description": "Team-roster membership for a selected team", "enum": [ - "day", - "week", - "month", - "year" + "1", + "0" ], "in": "query", - "name": "period", + "name": "with_team_only", "type": "string" }, { - "description": "Genre slug filter", + "description": "Local table sort field", + "enum": [ + "entity_name", + "team_name", + "start_year", + "runner_runs", + "fielder_runs", + "runner_runs_swipe", + "runner_runs_snipe", + "runner_runs_freeze", + "fielder_runs_swipe", + "fielder_runs_snipe", + "fielder_runs_freeze", + "n_opp_xb", + "n_att_xb", + "rate_att_xb", + "est_rate_att_generic_runner", + "est_rate_att_generic_fielder", + "rate_att_xb_diff_runner", + "rate_att_xb_diff_fielder", + "n_safe", + "rate_safe", + "rate_safe_per_attempt" + ], "in": "query", - "name": "genre", - "type": "string", - "x-example": "mystery" + "name": "sort", + "type": "string" }, { - "description": "Decade filter, e.g. 2010s", + "default": "desc", + "description": "Local sort direction", + "enum": [ + "asc", + "desc" + ], "in": "query", - "name": "decade", - "type": "string", - "x-example": "2010s" + "name": "sort_dir", + "type": "string" }, { - "description": "Max films, default 10, max 50", + "default": 100, + "description": "Rows per page (1-500)", "in": "query", + "maximum": 500, + "minimum": 1, "name": "limit", "type": "integer" + }, + { + "description": "Zero-based row offset", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -417481,7 +493771,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/letterboxd.popularResponseDoc" + "$ref": "#/definitions/mlb.statcastArmValueResponseDoc" } }, "400": { @@ -417490,12 +493780,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -417508,42 +493792,165 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Letterboxd popularity-ranked film chart", + "summary": "Get Baseball Savant Extra Bases Run Value leaderboard data", "tags": [ - "Letterboxd" + "MLB" ] } }, - "/letterboxd/search": { + "/mlb/statcast-arm-value-details": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Letterboxd for films, people, lists and tags by `q`, required. `type` can be set to `film` to return films only; `limit` defaults to 10 with a max of 50. Fields vary by result type: films carry `slug` and `year`, people carry `slug` and `role`, lists carry `owner`, and tags carry only a title and URL.", - "operationId": "letterboxd-search", + "description": "Returns the game-level play details displayed when expanding a Run, Fld, or Pit player row in the Arm Value leaderboard. Pass the leaderboard filters used to produce the selected row.", + "operationId": "mlb-statcast-arm-value-details", "parameters": [ { - "description": "Search query", + "description": "Positive player id from an Arm Value player row", "in": "query", - "name": "q", + "name": "entity_id", "required": true, "type": "string", - "x-example": "Parasite" + "x-example": "677800" }, { - "description": "Optional result type filter", + "default": "Fld", + "description": "Player view", "enum": [ - "film" + "Run", + "Fld", + "Pit" ], "in": "query", "name": "type", "type": "string" }, { - "description": "Max results, default 10, max 50", + "default": "Regular", + "description": "Game type", + "enum": [ + "Regular", + "Playoff", + "All" + ], "in": "query", - "name": "limit", + "name": "game_type", + "type": "string" + }, + { + "default": "All", + "description": "Baserunner situation", + "enum": [ + "All", + "r10_to_2b_210", + "r10_to_3b_210", + "r11_to_3b_10", + "r11_to_3b_2", + "r11_to_hp_10", + "r11_to_hp_2", + "r12_to_hp_10", + "r12_to_hp_2", + "r13_to_hp_0", + "r13_to_hp_1" + ], + "in": "query", + "name": "key_base_out", + "type": "string" + }, + { + "default": "top", + "description": "Minimum opportunities", + "enum": [ + "top", + "1", + "5", + "10", + "20", + "30", + "40", + "50", + "75", + "100", + "250", + "500", + "1000" + ], + "in": "query", + "name": "minimum_opps", + "type": "string" + }, + { + "description": "Start season, 2016 through current season", + "in": "query", + "minimum": 2016, + "name": "start_year", "type": "integer" + }, + { + "description": "End season, 2016 through current season; must be >= start_year", + "in": "query", + "minimum": 2016, + "name": "end_year", + "type": "integer" + }, + { + "default": "no", + "description": "Split leaderboard records by season", + "enum": [ + "no", + "yes" + ], + "in": "query", + "name": "split", + "type": "string" + }, + { + "description": "MLB team id from mlb_discovery, split, or empty", + "enum": [ + "108", + "117", + "133", + "141", + "144", + "158", + "138", + "112", + "109", + "119", + "137", + "114", + "136", + "146", + "121", + "120", + "110", + "135", + "143", + "134", + "140", + "139", + "113", + "111", + "115", + "118", + "116", + "142", + "145", + "147", + "split" + ], + "in": "query", + "name": "team_id", + "type": "string" + }, + { + "default": "1", + "description": "Team-roster membership for a selected team", + "enum": [ + "1", + "0" + ], + "in": "query", + "name": "with_team_only", + "type": "string" } ], "produces": [ @@ -417553,7 +493960,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/letterboxd.searchResponseDoc" + "$ref": "#/definitions/mlb.statcastArmValueDetailsResponseDoc" } }, "400": { @@ -417562,8 +493969,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -417580,210 +493987,354 @@ "ApiKeyAuth": [] } ], - "summary": "Search Letterboxd", + "summary": "Get expanded Baseball Savant Arm Value player plays", "tags": [ - "Letterboxd" + "MLB" ] } }, - "/linkedin/company/{id}": { + "/mlb/statcast-baserunning": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a LinkedIn company page by its company `id`. The response has the name, headline, about text, industry, company size, employee count on LinkedIn, follower count, founding year, headquarters, locations, specialties, website, logo, Products section cards, affiliated and similar pages, and recent updates with reactions and comment counts.", - "operationId": "linkedin-company", + "description": "Returns Baseball Savant Baserunning Run Value, Basestealing, or Extra Bases Taken tables. All filter value sets were read from the live first-party controls; rows are embedded in the page response and searched, sorted, and paged locally. Use mlb_discovery.statcast_baserunning_filters for board-specific groups, thresholds, and sort fields. CSV and visual expansion modes are excluded; this returns the underlying JSON table rows.", + "operationId": "mlb-statcast-baserunning", "parameters": [ { - "description": "LinkedIn Company ID", - "in": "path", - "name": "id", + "description": "Baseball Savant table", + "enum": [ + "baserunning-run-value", + "basestealing-running-game", + "baserunning" + ], + "in": "query", + "name": "board", "required": true, "type": "string", - "x-example": "googledeepmind" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/linkedin.companyResponseDoc" - } + "x-example": "baserunning-run-value" }, - "400": { - "description": "Invalid company ID", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Board group; accepted values depend on board", + "enum": [ + "Run", + "Bat", + "Batting Team", + "Pitching Team", + "Fld", + "Pit", + "League" + ], + "in": "query", + "name": "type", + "type": "string" }, - "429": { - "description": "Rate limit exceeded", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "Regular", + "description": "Game scope", + "enum": [ + "Regular", + "Playoff", + "All" + ], + "in": "query", + "name": "game_type", + "type": "string" }, - "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get LinkedIn Company info by ID", - "tags": [ - "LinkedIn" - ] - } - }, - "/linkedin/product/categories": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the standardized product categories accepted by the products/search endpoint's category_id filter. With a keyword, returns matching categories from LinkedIn's own category search. Without one, returns every known category.", - "operationId": "linkedin-product-categories", - "parameters": [ + "description": "Inclusive first season", + "enum": [ + 2016, + 2017, + 2018, + 2019, + 2020, + 2021, + 2022, + 2023, + 2024, + 2025, + 2026 + ], + "in": "query", + "name": "season_start", + "type": "integer" + }, { - "description": "Narrow results to categories matching this term. Omit to return every known category.", + "description": "Inclusive last season", + "enum": [ + 2016, + 2017, + 2018, + 2019, + 2020, + 2021, + 2022, + 2023, + 2024, + 2025, + 2026 + ], "in": "query", - "name": "keyword", + "name": "season_end", + "type": "integer" + }, + { + "default": "no", + "description": "Return separate year rows", + "enum": [ + "no", + "yes" + ], + "in": "query", + "name": "split", "type": "string" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/linkedin.productCategoriesResponseDoc" - } }, - "429": { - "description": "Rate limit exceeded", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Board-specific row threshold", + "enum": [ + "q", + "top", + "1", + "5", + "10", + "20", + "30", + "40", + "50", + "75", + "100", + "250", + "500", + "1000", + "1500", + "2000" + ], + "in": "query", + "name": "n", + "type": "string" }, - "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "MLB team id or split-team rows", + "enum": [ + "split", + "108", + "117", + "133", + "141", + "144", + "158", + "138", + "112", + "109", + "119", + "137", + "114", + "136", + "146", + "121", + "120", + "110", + "135", + "143", + "134", + "140", + "139", + "113", + "111", + "115", + "118", + "116", + "142", + "145", + "147" + ], + "in": "query", + "name": "team", + "type": "string" }, - "503": { - "description": "LinkedIn upstream request failed", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Discover LinkedIn product categories", - "tags": [ - "LinkedIn" - ] - } - }, - "/linkedin/product/{id}": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a LinkedIn product page by its product `id`. The response has the name, about text, category, owning organization, external link, logo, cover image, media items, featured customers with industry and follower count, and lists of other and similar products.", - "operationId": "linkedin-product", - "parameters": [ + "default": true, + "description": "Restrict to selected team's active player rows; requires a specific team id", + "in": "query", + "name": "with_team_only", + "type": "boolean" + }, { - "description": "LinkedIn Product ID", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "microsoft-dynamics-microsoft-dynamics-365-business-central" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/linkedin.productResponseDoc" - } + "default": "all", + "description": "Basestealing pitcher hand", + "enum": [ + "all", + "L", + "R" + ], + "in": "query", + "name": "pitch_hand", + "type": "string" }, - "400": { - "description": "Invalid Params", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "All", + "description": "Basestealing runner outcome", + "enum": [ + "All", + "Advance", + "Out", + "Hold" + ], + "in": "query", + "name": "runner_moved", + "type": "string" }, - "429": { - "description": "Rate limit exceeded", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "All", + "description": "Basestealing target base", + "enum": [ + "All", + "2B", + "3B" + ], + "in": "query", + "name": "target_base", + "type": "string" }, - "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get LinkedIn Product info by ID", - "tags": [ - "LinkedIn" - ] - } - }, - "/linkedin/products/search": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of LinkedIn's public product directory search results, optionally scoped to a keyword and/or category. Keyword matching is on word prefixes. start is an upstream card offset advanced by the previous response's next_start; LinkedIn's guest search stops returning results at offset 1200.", - "operationId": "linkedin-products-search", - "parameters": [ + "default": "All", + "description": "Basestealing prior pickoffs", + "enum": [ + "All", + "0", + "1", + "2", + "3" + ], + "in": "query", + "name": "prior_pk", + "type": "string" + }, { - "description": "Search keyword, matched on word prefixes", + "default": "All", + "description": "Extra Bases Taken situation", + "enum": [ + "All", + "r10_to_2b_210", + "r10_to_3b_210", + "r11_to_3b_10", + "r11_to_3b_2", + "r11_to_hp_10", + "r11_to_hp_2", + "r12_to_hp_10", + "r12_to_hp_2", + "r13_to_hp_0", + "r13_to_hp_1" + ], "in": "query", - "name": "keyword", - "type": "string", - "x-example": "crm" + "name": "key_base_out", + "type": "string" }, { - "description": "Numeric category id from /linkedin/product/categories", + "description": "Local sort field; accepted values depend on board", + "enum": [ + "entity_name", + "team_name", + "start_year", + "N_runner_moved", + "N_runner_moved_SBX", + "N_runner_moved_XB", + "runner_runs_SB2", + "runner_runs_SB3", + "runner_runs_SBX", + "runner_runs_XB", + "runner_runs_XB_freeze", + "runner_runs_XB_snipe", + "runner_runs_XB_swipe", + "runner_runs_tot", + "simple_stolen_on_running_act_SB2", + "simple_stolen_on_running_act_SB3", + "bk", + "catcher_name", + "cs", + "entity_id", + "fb", + "fielder_name", + "game_date", + "n_bk", + "n_cs", + "n_fb", + "n_init", + "n_minus", + "n_pk", + "n_plus", + "n_sb", + "net_act_minus", + "net_act_plus", + "pitcher_name", + "pk", + "r_primary_lead", + "r_primary_lead_sbx", + "r_sec_minus_prim_lead", + "r_sec_minus_prim_lead_sbx", + "r_secondary_lead", + "r_secondary_lead_sbx", + "r_sprint_speed_top50percent", + "rate_sbx", + "runner_moved_cd", + "runner_name", + "runs_stolen_on_running_act", + "sb", + "sba", + "simple_stolen_on_running_act", + "target_base", + "runner_runs", + "fielder_runs", + "runner_runs_swipe", + "runner_runs_snipe", + "runner_runs_freeze", + "fielder_runs_swipe", + "fielder_runs_snipe", + "fielder_runs_freeze", + "n_opp_xb", + "rate_att_xb", + "est_rate_att_generic_runner", + "est_rate_att_generic_fielder", + "rate_att_xb_diff_runner", + "rate_att_xb_diff_fielder", + "n_safe", + "rate_safe", + "rate_safe_per_attempt" + ], "in": "query", - "name": "category_id", - "type": "string", - "x-example": "1620" + "name": "sort", + "type": "string" }, { - "default": 0, - "description": "Upstream card offset, 0 to 1199", + "default": "desc", + "description": "Local sort direction", + "enum": [ + "asc", + "desc" + ], "in": "query", - "maximum": 1199, + "name": "sort_dir", + "type": "string" + }, + { + "description": "Case-insensitive substring in the displayed player or team name", + "in": "query", + "name": "search", + "type": "string" + }, + { + "default": 100, + "description": "Rows per page, 1-500", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "description": "Zero-based row offset", + "in": "query", + "maximum": 10000, "minimum": 0, - "name": "start", + "name": "offset", "type": "integer" } ], @@ -417794,29 +494345,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/linkedin.productsSearchResponseDoc" + "$ref": "#/definitions/mlb.statcastBaserunningResponseDoc" } }, "400": { - "description": "Invalid Params", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Rate limit exceeded", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal server error", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "LinkedIn upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -417827,141 +494366,369 @@ "ApiKeyAuth": [] } ], - "summary": "Search the LinkedIn product directory", + "summary": "Get Baseball Savant baserunning leaderboard tables", "tags": [ - "LinkedIn" + "MLB" ] } }, - "/linkedin/showcase/{id}": { + "/mlb/statcast-bat-tracking": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a LinkedIn showcase page by its showcase page `id`. The response has the name, headline, about text, industry, follower count, employees on LinkedIn, headquarters, locations, specialties, website, logo, Products section cards when present, affiliated and similar pages, and recent updates with reactions and comment counts.", - "operationId": "linkedin-showcase", + "description": "Returns batter, batting-team, pitcher, pitching-team, or league bat-tracking rows with the live page's season, game type, swing threshold, date, side, contact, attack zone, team, pitch, count, and grouping filters. Use mlb_discovery for the same complete value sets. Multi-value filters are passed as repeated query parameters.", + "operationId": "mlb-statcast-bat-tracking", "parameters": [ { - "description": "LinkedIn Showcase Page ID", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "think-with-google" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/linkedin.showcaseResponseDoc" - } + "default": "batter", + "description": "Table row type", + "enum": [ + "batter", + "batting-team", + "pitcher", + "pitching-team", + "league" + ], + "in": "query", + "name": "type", + "type": "string" }, - "400": { - "description": "Invalid Params", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "2026", + "description": "First season", + "enum": [ + "2023", + "2024", + "2025", + "2026" + ], + "in": "query", + "name": "season_start", + "type": "string" }, - "429": { - "description": "Rate limit exceeded", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "season_start", + "description": "Last season; must be >= season_start", + "enum": [ + "2023", + "2024", + "2025", + "2026" + ], + "in": "query", + "name": "season_end", + "type": "string" }, - "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get Linkedin Showcase Page Info", - "tags": [ - "LinkedIn" - ] - } - }, - "/livemint/article": { - "get": { - "description": "Returns public Mint article metadata and body paragraphs from a canonical article URL. A story Mint marks \"Mint Premium\" returns a permission error instead of a body.", - "operationId": "livemint-article", - "parameters": [ + "default": "Regular", + "description": "Game type", + "enum": [ + "Any", + "Playoff", + "Regular" + ], + "in": "query", + "name": "game_type", + "type": "string" + }, { - "description": "Canonical Mint article URL", + "default": "q", + "description": "Minimum swing qualifier", + "enum": [ + "q", + "1", + "5", + "10", + "25", + "50", + "100", + "200", + "500", + "1000" + ], "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.livemint.com/companies/news/example-article-slug-11790258702207.html" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" - } + "name": "min_swings", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "1", + "description": "Minimum swings per grouped row", + "enum": [ + "1", + "5", + "10", + "25", + "50", + "100", + "200", + "500", + "1000" + ], + "in": "query", + "name": "min_group_swings", + "type": "string" }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Optional date range start in YYYY-MM-DD", + "in": "query", + "name": "date_start", + "type": "string" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Optional date range end in YYYY-MM-DD", + "in": "query", + "name": "date_end", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get Mint article content", - "tags": [ - "Mint" - ] - } - }, - "/livemint/author": { - "get": { - "description": "Returns a Mint author profile from a required `url` in the form `https://www.livemint.com/authors/`. The response has `name`, `job_title`, `biography`, `image_url` and Twitter, Facebook, LinkedIn and Instagram links, each present only when the profile carries it. It does not list the author's articles.", - "operationId": "livemint-author", - "parameters": [ + "description": "Batter side", + "enum": [ + "L", + "R" + ], + "in": "query", + "name": "bat_side", + "type": "string" + }, { - "description": "Canonical Mint author URL", + "description": "Contact type", + "enum": [ + "2", + "4", + "9" + ], "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.livemint.com/authors/sheetal-goel" + "name": "contact_type", + "type": "string" + }, + { + "description": "Hard-hit filter", + "enum": [ + "1", + "0" + ], + "in": "query", + "name": "is_hard_hit", + "type": "string" + }, + { + "description": "Attack zone", + "enum": [ + "0", + "1", + "1.1", + "2", + "3" + ], + "in": "query", + "name": "attack_zone", + "type": "string" + }, + { + "description": "Pitcher hand", + "enum": [ + "L", + "R" + ], + "in": "query", + "name": "pitch_hand", + "type": "string" + }, + { + "collectionFormat": "multi", + "description": "One or more MLB team ids", + "in": "query", + "items": { + "enum": [ + "108", + "109", + "110", + "111", + "112", + "113", + "114", + "115", + "116", + "117", + "118", + "119", + "120", + "121", + "133", + "134", + "135", + "136", + "137", + "138", + "139", + "140", + "141", + "142", + "143", + "144", + "145", + "146", + "147", + "158" + ], + "type": "string" + }, + "name": "teams", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "One or more pitch types", + "in": "query", + "items": { + "enum": [ + "FF", + "SI", + "FC", + "CH", + "FS", + "FO", + "SC", + "CU", + "SL", + "ST", + "SV", + "KN" + ], + "type": "string" + }, + "name": "pitch_types", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "One or more ball-strike counts", + "in": "query", + "items": { + "enum": [ + "00", + "01", + "02", + "10", + "11", + "12", + "20", + "21", + "22", + "30", + "31", + "32" + ], + "type": "string" + }, + "name": "counts", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Up to four grouping columns", + "in": "query", + "items": { + "enum": [ + "year", + "api_game_date_month_text", + "bat_contact_code", + "api_pitch_type_group03", + "game_type", + "is_hit_into_play_hardhit", + "is_best_speed", + "pitch_hand", + "bat_side", + "is_pre_ball_count_3", + "is_pre_strike_count_2" + ], + "type": "string" + }, + "name": "group_by", + "type": "array" + }, + { + "default": "avg_sweetspot_speed_mph_qualified", + "description": "Local row sort field", + "enum": [ + "avg_batter_x_position", + "avg_batter_y_position", + "avg_intercept_x_vs_batter", + "avg_intercept_y_vs_batter", + "avg_foot_sep0", + "avg_foot_angle0", + "attack_direction_pullopp", + "rate_ideal_attack_angle", + "attack_angle", + "avg_plane_vertical_angle", + "avg_sweetspot_speed_mph", + "avg_sweetspot_speed_mph_qualified", + "avg_is_sweetspot_speed_high", + "avg_is_sweetspot_speed_high_qualified", + "squared_up", + "squared_up_qualified", + "squared_up_per_bat_contact", + "squared_up_per_swing", + "squared_up_with_speed", + "squared_up_with_speed_qualified", + "squared_up_with_speed_per_bat_contact", + "squared_up_with_speed_per_swing", + "swing_length_qualified", + "swords", + "swings_qualified", + "percent_qualified", + "hit_into_play_qualified", + "bat_contact", + "bat_contact_qualified", + "count", + "delta_run_exp", + "hit_into_play_per_swing", + "pitcher_delta_run_exp", + "strikes_swinging_qualified", + "sweetspot_speed_high_qualified", + "strike_swinging_per_swing", + "id", + "name", + "batter_name", + "b_name_display_first_last", + "savant_batter_id", + "team_id", + "team_name", + "side", + "n_sides", + "n_teams", + "bat_side_formatted" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": "desc", + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", + "type": "string" + }, + { + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "default": 0, + "description": "Zero-based row offset", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -417971,7 +494738,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.livemintAuthorResponseDoc" + "$ref": "#/definitions/mlb.statcastBatTrackingResponseDoc" } }, "400": { @@ -417998,225 +494765,296 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Mint author profile", + "summary": "Get Baseball Savant bat-tracking rows", "tags": [ - "Mint" + "MLB" ] } }, - "/livemint/headlines": { + "/mlb/statcast-batted-ball": { "get": { - "description": "Returns recent Mint headlines for one section. `section` is required and takes one of 15 slugs, including `companies`, `markets`, `money`, `ai` and `videos`. Each item has a title and URL, and may include summary, author, publication time and image.", - "operationId": "livemint-headlines", + "description": "Returns the Batted Ball Profile table for batters, batting teams, pitchers, pitching teams, or league totals. Supports first-party season, game type, split, team, date, side, hand, pitch type, event threshold, and split-group threshold filters. The All-Star A game type is accepted by the live page query although its checkbox is hidden. Sorting and pagination are local. The league-average reference row is returned separately when requested; CSV and visualization controls are outside this JSON contract.", + "operationId": "mlb-statcast-batted-ball", "parameters": [ { - "description": "Mint section slug", + "default": "batter", + "description": "Row type", "enum": [ - "companies", - "opinion", - "money", - "politics", - "science", - "industry", - "education", - "sports", - "technology", - "markets", - "ai", - "insurance", - "budget", - "elections", - "videos" + "batter", + "batting-team", + "pitcher", + "pitching-team", + "league" ], "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "companies" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" - } + "name": "type", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "collectionFormat": "multi", + "description": "One or more seasons", + "in": "query", + "items": { + "enum": [ + "2015", + "2016", + "2017", + "2018", + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" + ], + "type": "string" + }, + "name": "seasons", + "type": "array" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get Mint section headlines", - "tags": [ - "Mint" - ] - } - }, - "/livemint/news": { - "get": { - "description": "Returns the current Mint (livemint.com) top stories, with no parameters. Each item has a title and URL, and may include summary, author, publication time and image. For one topic area, use `livemint-headlines` with a `section`.", - "operationId": "livemint-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } + "collectionFormat": "multi", + "description": "One or more game type codes", + "in": "query", + "items": { + "enum": [ + "R", + "A", + "F", + "D", + "L", + "W" + ], + "type": "string" + }, + "name": "game_types", + "type": "array" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "collectionFormat": "multi", + "description": "One or more split dimensions", + "in": "query", + "items": { + "enum": [ + "api_game_date_month_text", + "game_type", + "api_pitch_type_group03", + "bat_side", + "pitch_hand" + ], + "type": "string" + }, + "name": "splits", + "type": "array" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get Mint top stories", - "tags": [ - "Mint" - ] - } - }, - "/livemint/sections": { - "get": { - "description": "Lists the 15 Mint section slugs accepted by `livemint-headlines`, such as `companies`, `markets`, `money`, `budget` and `videos`. Each entry has its `slug`, display `name` and page `url`.", - "operationId": "livemint-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ + "default": "q", + "description": "Minimum batted-ball events", + "enum": [ + "q", + "1", + "5", + "10", + "25", + "50", + "100", + "200", + "500", + "1000" + ], + "in": "query", + "name": "min", + "type": "string" + }, { - "ApiKeyAuth": [] - } - ], - "summary": "Get Mint sections", - "tags": [ - "Mint" - ] - } - }, - "/liverpoolecho/article": { - "get": { - "description": "Returns public Liverpool Echo article metadata (including the section) and body paragraphs from a canonical article URL. Photo-gallery URLs are rejected.", - "operationId": "liverpoolecho-article", - "parameters": [ + "default": "1", + "description": "Minimum rows per split group", + "enum": [ + "1", + "5", + "10", + "25", + "50", + "100", + "200", + "500", + "1000" + ], + "in": "query", + "name": "min_split", + "type": "string" + }, { - "description": "Canonical Liverpool Echo article URL", + "default": "1", + "description": "Split seasons into separate rows", + "enum": [ + "1", + "0" + ], "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.liverpoolecho.co.uk/news/liverpool-news/oxton-mans-vile-campaign-harassment-34666610" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" - } + "name": "split_year", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "collectionFormat": "multi", + "description": "One or more MLB team ids", + "in": "query", + "items": { + "enum": [ + "108", + "109", + "110", + "111", + "112", + "113", + "114", + "115", + "116", + "117", + "118", + "119", + "120", + "121", + "133", + "134", + "135", + "136", + "137", + "138", + "139", + "140", + "141", + "142", + "143", + "144", + "145", + "146", + "147", + "158" + ], + "type": "string" + }, + "name": "teams", + "type": "array" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "YYYY-MM-DD date range start (2015-04-05 through today)", + "in": "query", + "name": "date_start", + "type": "string" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "YYYY-MM-DD date range end (2015-04-05 through today)", + "in": "query", + "name": "date_end", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get Liverpool Echo article content", - "tags": [ - "Liverpool Echo" - ] - } - }, - "/liverpoolecho/author": { - "get": { - "description": "Returns one Liverpool Echo author's public profile: name, job title, bio, email, X/Twitter handle, and one page of their recent articles.", - "operationId": "liverpoolecho-author", - "parameters": [ + "description": "Batter side", + "enum": [ + "L", + "R" + ], + "in": "query", + "name": "bat_side", + "type": "string" + }, { - "description": "Author slug, e.g. wesley-holmes", + "description": "Pitcher throwing hand", + "enum": [ + "L", + "R" + ], "in": "query", - "name": "slug", - "type": "string", - "x-example": "wesley-holmes" + "name": "pitch_hand", + "type": "string" }, { - "description": "Canonical liverpoolecho.co.uk/authors// URL; alternative to slug", + "collectionFormat": "multi", + "description": "One or more pitch type codes", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.liverpoolecho.co.uk/authors/wesley-holmes/" + "items": { + "enum": [ + "FF", + "SI", + "FC", + "CH", + "FS", + "FO", + "SC", + "CU", + "SL", + "ST", + "SV", + "KN" + ], + "type": "string" + }, + "name": "pitch_types", + "type": "array" + }, + { + "default": false, + "description": "Include the first-party league-average reference row", + "in": "query", + "name": "include_league_average", + "type": "boolean" + }, + { + "default": "pull_air_rate", + "description": "Local table sort field", + "enum": [ + "name", + "team_name", + "num_bbe", + "gb_rate", + "air_rate", + "fb_rate", + "ld_rate", + "pu_rate", + "pull_rate", + "straight_rate", + "oppo_rate", + "pull_gb_rate", + "straight_gb_rate", + "oppo_gb_rate", + "pull_air_rate", + "straight_air_rate", + "oppo_air_rate" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": "desc", + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", + "type": "string" + }, + { + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" }, { - "default": 1, - "description": "1-based page number of the author's article list (1 to 100); overrides any pageNumber in url", + "default": 0, + "description": "Zero-based row offset", "in": "query", - "name": "page", + "maximum": 10000, + "minimum": 0, + "name": "offset", "type": "integer" } ], @@ -418227,7 +495065,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.reachAuthorResponseDoc" + "$ref": "#/definitions/mlb.statcastBattedBallResponseDoc" } }, "400": { @@ -418242,12 +495080,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -418260,172 +495092,118 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Liverpool Echo author profile", + "summary": "Get Baseball Savant Batted Ball Profile rows", "tags": [ - "Liverpool Echo" + "MLB" ] } }, - "/liverpoolecho/headlines": { + "/mlb/statcast-birthday-index": { "get": { - "description": "Returns fresh headlines from one public Liverpool Echo section. Photo galleries are omitted because they have no readable article body.", - "operationId": "liverpoolecho-headlines", + "description": "Returns today's birthday tables for batters and pitchers plus the selected upcoming-birthday table. Type and minimum-games are first-party filters; date must fall inside the live page's season date range. The active-player toggle, sorting, and pagination are applied locally. The MLB Terms of Use notes a private, non-commercial-use boundary and restrictions on redistribution; this endpoint exposes statistical rows only and excludes media, graphics, and CSV.", + "operationId": "mlb-statcast-birthday-index", "parameters": [ { - "description": "Liverpool Echo section slug", + "default": "batter", + "description": "Upcoming table", "enum": [ - "news", - "news/liverpool-news", - "news/uk-world-news", - "news/showbiz-news", - "news/tv", - "news/nostalgia", - "news/property", - "news/motoring", - "news/cost-of-living", - "news/health", - "sport", - "sport/football", - "sport/football/football-news", - "sport/football/transfer-news", - "sport/boxing", - "sport/other-sport", - "sport/other-sport/horse-racing", - "sport/sport-opinion", - "whats-on", - "whats-on/whats-on-news", - "whats-on/family-kids-news", - "whats-on/food-drink-news", - "whats-on/music-nightlife-news", - "whats-on/shopping", - "whats-on/theatre-news", - "travel", - "special-features", - "in-your-area" + "batter", + "pitcher" ], "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "news" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" - } + "name": "type", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "1", + "description": "Minimum games played on the birthday", + "enum": [ + "1", + "2", + "3", + "5", + "8", + "10" + ], + "in": "query", + "name": "min_games", + "type": "string" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Optional birthday date in M-D form; accepted dates are bounded by the current live page season window", + "in": "query", + "name": "date", + "type": "string", + "x-example": "5-2" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get Liverpool Echo section headlines", - "tags": [ - "Liverpool Echo" - ] - } - }, - "/liverpoolecho/news": { - "get": { - "description": "Returns fresh Liverpool Echo top stories from the public home RSS feed. Photo galleries are omitted because they have no readable article body.", - "operationId": "liverpoolecho-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } + "default": false, + "description": "Include inactive and deceased players in upcoming rows", + "in": "query", + "name": "show_inactives", + "type": "boolean" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Local sort column. Some values are type- or date-specific and invalid combinations are rejected.", + "enum": [ + "player_name", + "is_player_active", + "birth_day_noyear_sort_hidden", + "age", + "daysUntil", + "birthday_index", + "birthday_games", + "birthday_pa", + "birthday_hits", + "birthday_hit_1b", + "birthday_hit_2b", + "birthday_hit_3b", + "birthday_hit_hr", + "birthday_strikeout", + "birthday_k_percent", + "birthday_walk", + "birthday_bb_percent", + "birthday_BA", + "non_birthday_BA", + "birthday_BA_diff", + "birthday_OPS", + "non_birthday_OPS", + "birthday_OPS_diff", + "birthday_wOBA", + "non_birthday_wOBA", + "birthday_wOBA_diff" + ], + "in": "query", + "name": "sort", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get Liverpool Echo top stories", - "tags": [ - "Liverpool Echo" - ] - } - }, - "/liverpoolecho/sections": { - "get": { - "description": "Lists the Liverpool Echo sections accepted by `liverpoolecho-headlines`, such as `news/liverpool-news`, `sport/football/transfer-news`, `whats-on/theatre-news` and `in-your-area`. Each entry has a `slug`, display `name` and feed `url`. Each listed section had at least one current entry when last checked, and feeds hold up to about 25 entries.", - "operationId": "liverpoolecho-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ + "description": "Local sort direction; omitted values use the selected column's live first-party initial direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", + "type": "string" + }, { - "ApiKeyAuth": [] - } - ], - "summary": "Get Liverpool Echo sections", - "tags": [ - "Liverpool Echo" - ] - } - }, - "/livescience/article": { - "get": { - "description": "Returns a Live Science article by `url`, a canonical HTTPS `livescience.com` article link. The response has the title, description, section, authors, lead image, publish and update times, body `paragraphs` and a `paywalled` flag.", - "operationId": "livescience-article", - "parameters": [ + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, { - "description": "Canonical Live Science article URL", + "default": 0, + "description": "Zero-based row offset (0-5000)", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.livescience.com/space/comets/example-comet-story" + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -418435,7 +495213,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/mlb.statcastBirthdayIndexResponseDoc" } }, "400": { @@ -418462,147 +495240,154 @@ "ApiKeyAuth": [] } ], - "summary": "Get Live Science article content", + "summary": "Get Baseball Savant Sarah Langs Birthday Index rows", "tags": [ - "Live Science" + "MLB" ] } }, - "/livescience/author": { + "/mlb/statcast-catcher-blocking": { "get": { - "description": "Returns one Live Science author's public profile: name, job title, biography, social links, and one page of their recent articles.", - "operationId": "livescience-author", + "description": "Returns catcher, pitcher, catching-team, or league Catcher Blocking rows. Filters cover game type, season range, minimum opportunities, team/stint, and local table sorting. Use mlb_discovery for the exact filter sets. Row detail events are available from mlb-statcast-catcher-blocking-details; chart playback and CSV export controls are not data rows.", + "operationId": "mlb-statcast-catcher-blocking", "parameters": [ { - "description": "Author slug, e.g. ben-turner", + "default": "Cat", + "description": "Leaderboard group", + "enum": [ + "Cat", + "Pit", + "Pitching Team", + "League" + ], "in": "query", - "name": "slug", - "type": "string", - "x-example": "ben-turner" + "name": "type", + "type": "string" }, { - "description": "Canonical livescience.com/author/ URL, optionally with a /page/ segment; alternative to slug", + "default": "Regular", + "description": "Game type", + "enum": [ + "Regular", + "Playoff", + "All" + ], "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.livescience.com/author/ben-turner" + "name": "game_type", + "type": "string" }, { - "default": 1, - "description": "1-based page number of the author's article list; overrides any page number embedded in url", + "default": "q", + "description": "Minimum opportunities; applies to Cat and Pit", + "enum": [ + "q", + "1", + "50", + "100", + "250", + "500", + "1000", + "2000", + "3000", + "4000", + "5000" + ], "in": "query", - "name": "page", + "name": "min", + "type": "string" + }, + { + "description": "First season, 2018 through current season", + "in": "query", + "maximum": 2026, + "minimum": 2018, + "name": "start_year", "type": "integer" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.livescienceAuthorResponseDoc" - } }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Last season, start_year through current season", + "in": "query", + "maximum": 2026, + "minimum": 2018, + "name": "end_year", + "type": "integer" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "no", + "description": "Split rows by season", + "enum": [ + "yes", + "no" + ], + "in": "query", + "name": "split", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get a Live Science author profile", - "tags": [ - "Live Science" - ] - } - }, - "/livescience/headlines": { - "get": { - "description": "Returns current Live Science headlines for one section. `section` is required and takes one of 14 slugs: `animals`, `archaeology`, `chemistry`, `features`, `health`, `human-behavior`, `interviews`, `news`, `opinion`, `physics-mathematics`, `planet-earth`, `products`, `space` or `technology`. Each item has a title and URL, plus author, publication time and image when the section page shows them.", - "operationId": "livescience-headlines", - "parameters": [ + "description": "Optional team filter: split or an MLB team id from mlb_discovery", + "in": "query", + "name": "team", + "type": "string" + }, { - "description": "Live Science section slug", + "description": "For a specific Cat or Pit team, include only rows for that team; defaults true", + "in": "query", + "name": "with_team_only", + "type": "boolean" + }, + { + "default": "diff_runner_pbwp", + "description": "Local sort field from mlb_discovery", "enum": [ - "animals", - "archaeology", - "chemistry", - "features", - "health", - "human-behavior", - "interviews", - "news", - "opinion", - "physics-mathematics", - "planet-earth", - "products", - "space", - "technology" + "entity_name", + "team_name", + "start_year", + "N", + "catcher_runs", + "diff_runner_pbwp", + "N_runner_pbwp", + "x_runner_pbwp", + "diff_rate_runner_pbwp", + "freq_pbwp_1_easy", + "freq_pbwp_2_medium", + "freq_pbwp_3_tough", + "diff_runner_pbwp_1_easy", + "diff_runner_pbwp_2_medium", + "diff_runner_pbwp_3_tough" ], "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "animals" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" - } + "name": "sort", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "desc", + "description": "Local sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "description": "Zero-based row offset", + "in": "query", + "maximum": 10000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], - "summary": "Get Live Science section headlines", - "tags": [ - "Live Science" - ] - } - }, - "/livescience/news": { - "get": { - "description": "Returns Live Science's current top stories across the site, with no parameters. Each item has its title, URL, summary, author, publication time and image where available. Use `livescience-headlines` to narrow to one section.", - "operationId": "livescience-news", "produces": [ "application/json" ], @@ -418610,11 +495395,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/mlb.statcastCatcherBlockingResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -418631,53 +495416,104 @@ "ApiKeyAuth": [] } ], - "summary": "Get Live Science top stories", - "tags": [ - "Live Science" - ] - } - }, - "/livescience/sections": { - "get": { - "description": "Lists the 14 top-level Live Science sections accepted by `livescience-headlines`, including `animals`, `archaeology`, `human-behavior`, `physics-mathematics`, `planet-earth` and `space`. Each entry has a `slug`, display `name` and section `url`.", - "operationId": "livescience-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Live Science sections", + "summary": "Get Baseball Savant Catcher Blocking leaderboard rows", "tags": [ - "Live Science" + "MLB" ] } }, - "/livescore/competition": { + "/mlb/statcast-catcher-blocking-details": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns public competition or stage page data and its visible sections. Competition ids and tabs vary by sport; discover English sitemap-listed paths, including cricket stage pages, with /livescore/competitions.", - "operationId": "livescore-competition", + "description": "Expands a Catcher Blocking Cat, Pit, or Pitching Team table row into paginated play-location events. entity_id must come from the matching leaderboard rows and other filters must match that row query. League rows have no detail feed.", + "operationId": "mlb-statcast-catcher-blocking-details", "parameters": [ { - "description": "Three to five lowercase path segments following /en/, such as football/england/premier-league or football/england/premier-league/standings", + "description": "Entity id from a Cat, Pit, or Pitching Team leaderboard row", "in": "query", - "name": "path", + "name": "entity_id", "required": true, "type": "string", - "x-example": "football/england/premier-league" + "x-example": "682626" + }, + { + "default": "Cat", + "description": "Row group", + "enum": [ + "Cat", + "Pit", + "Pitching Team" + ], + "in": "query", + "name": "type", + "type": "string" + }, + { + "default": "Regular", + "description": "Game type", + "enum": [ + "Regular", + "Playoff", + "All" + ], + "in": "query", + "name": "game_type", + "type": "string" + }, + { + "description": "First season, 2018 through current season", + "in": "query", + "maximum": 2026, + "minimum": 2018, + "name": "start_year", + "type": "integer" + }, + { + "description": "Last season, start_year through current season", + "in": "query", + "maximum": 2026, + "minimum": 2018, + "name": "end_year", + "type": "integer" + }, + { + "default": "no", + "description": "Split details by season", + "enum": [ + "yes", + "no" + ], + "in": "query", + "name": "split", + "type": "string" + }, + { + "description": "Optional team id or split selector from mlb_discovery", + "in": "query", + "name": "team", + "type": "string" + }, + { + "description": "For a specific Cat or Pit team, include only rows for that team; defaults true", + "in": "query", + "name": "with_team_only", + "type": "boolean" + }, + { + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "description": "Zero-based row offset", + "in": "query", + "maximum": 100000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -418687,7 +495523,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/livescore.responseDoc" + "$ref": "#/definitions/mlb.statcastCatcherBlockingDetailsResponseDoc" } }, "400": { @@ -418696,12 +495532,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -418714,214 +495544,345 @@ "ApiKeyAuth": [] } ], - "summary": "LiveScore competition page and section data", + "summary": "Get Baseball Savant Catcher Blocking play details", "tags": [ - "LiveScore" + "MLB" ] } }, - "/livescore/competitions": { + "/mlb/statcast-catcher-framing": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns English competition pages listed in LiveScore's public competition sitemaps plus competition-shaped pages listed in the English cricket sport sitemap. The sitemap index has dedicated competition sitemaps for soccer, hockey, basketball, and tennis; cricket discovery remains partial and dynamic.", - "operationId": "livescore-competitions", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/livescore.responseDoc" - } + "description": "Returns the Catcher Framing table for catcher, catching-team, batter, batting-team, pitcher, or league groups. Supports observed game, season, one-team, pitch/result minimum, date, bat-side, pitch-hand, pitch-type, ball/strike, and call-model filters, plus local sort and pagination. Use mlb_discovery for exact enum values; chart-only groupings and player comparison controls are excluded.", + "operationId": "mlb-statcast-catcher-framing", + "parameters": [ + { + "default": "catcher", + "description": "Table group", + "enum": [ + "catcher", + "catching-team", + "batter", + "batting-team", + "pitcher", + "league" + ], + "in": "query", + "name": "type", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "LiveScore competition page directory", - "tags": [ - "LiveScore" - ] - } - }, - "/livescore/live-scores": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns current live sections for a supported sport. Empty Sctns is a valid result when there are no live events. Use Nav and the final section Id for cursor paging.", - "operationId": "livescore-live-scores", - "parameters": [ + "default": "Regular", + "description": "Game type", + "enum": [ + "Any", + "Playoff", + "Regular" + ], + "in": "query", + "name": "game_type", + "type": "string" + }, { - "description": "LiveScore sport id", + "description": "Optional single MLB team id", "enum": [ - "soccer", - "hockey", - "basketball", - "tennis", - "cricket" + "108", + "117", + "133", + "141", + "144", + "158", + "138", + "112", + "109", + "119", + "137", + "114", + "136", + "146", + "121", + "120", + "110", + "135", + "143", + "134", + "140", + "139", + "113", + "111", + "115", + "118", + "116", + "142", + "145", + "147" ], "in": "query", - "name": "sport", - "required": true, - "type": "string", - "x-example": "soccer" + "name": "team", + "type": "string" }, { - "description": "UTC offset in hours from -12 through 14; defaults to 0", + "default": "q", + "description": "Minimum pitches", + "enum": [ + "q", + "100", + "250", + "500", + "750", + "1000", + "1250", + "1500" + ], "in": "query", - "maximum": 14, - "minimum": -12, - "name": "timezone_offset", + "name": "min_pitches", + "type": "string" + }, + { + "default": 1, + "description": "Minimum results", + "enum": [ + 1, + 25, + 50, + 100, + 250, + 500, + 750, + 1000, + 1250, + 1500 + ], + "in": "query", + "name": "min_results", "type": "integer" }, { - "description": "Request a paged live feed; defaults to false", + "description": "First season", + "enum": [ + 2018, + 2019, + 2020, + 2021, + 2022, + 2023, + 2024, + 2025, + 2026 + ], "in": "query", - "name": "paging", - "type": "boolean" + "name": "season_start", + "type": "integer" }, { - "description": "Section Id from the prior paged response, e.g. s-26031", + "description": "Last season", + "enum": [ + 2018, + 2019, + 2020, + 2021, + 2022, + 2023, + 2024, + 2025, + 2026 + ], "in": "query", - "name": "cursor", - "type": "string", - "x-example": "s-26031" + "name": "season_end", + "type": "integer" }, { - "description": "Page direction in paged mode", + "description": "Inclusive start date", + "format": "date", + "in": "query", + "name": "date_start", + "type": "string" + }, + { + "description": "Inclusive end date", + "format": "date", + "in": "query", + "name": "date_end", + "type": "string" + }, + { + "description": "Batter side", "enum": [ - "down", - "up" + "L", + "R" ], "in": "query", - "name": "direction", + "name": "bat_side", "type": "string" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/livescore.responseDoc" - } }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Pitcher hand", + "enum": [ + "L", + "R" + ], + "in": "query", + "name": "pitch_hand", + "type": "string" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Single pitch type", + "enum": [ + "FF", + "SI", + "FC", + "CH", + "FS", + "FO", + "SC", + "CU", + "SL", + "ST", + "SV", + "KN" + ], + "in": "query", + "name": "pitch_type", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "LiveScore live scores by sport", - "tags": [ - "LiveScore" - ] - } - }, - "/livescore/match": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the event data embedded in a public LiveScore match page. Data uses LiveScore's event payload shape; available fields vary by event and stage.", - "operationId": "livescore-match", - "parameters": [ + "description": "Pitch location relative to strike zone", + "enum": [ + "in", + "out" + ], + "in": "query", + "name": "ball_strike", + "type": "string" + }, { - "description": "Five path segments following /en/ in a LiveScore match URL", + "default": "original", + "description": "Framing model", + "enum": [ + "original", + "final" + ], "in": "query", - "name": "path", - "required": true, - "type": "string", - "x-example": "football/uefa-nations-league/league-b-group-3/austria-vs-israel/1738267" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/livescore.responseDoc" - } + "name": "call", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "rv_tot", + "description": "Local sort field", + "enum": [ + "name", + "team_name", + "pitches", + "pitches_shadow", + "rv_tot", + "pct_tot", + "pitches_shadow_top", + "rv_shadow_top", + "pct_shadow_top", + "pitches_shadow_bot", + "rv_shadow_bot", + "pct_shadow_bot", + "pitches_11", + "rv_11", + "pct_11", + "pitches_12", + "rv_12", + "pct_12", + "pitches_13", + "rv_13", + "pct_13", + "pitches_14", + "rv_14", + "pct_14", + "pitches_16", + "rv_16", + "pct_16", + "pitches_17", + "rv_17", + "pct_17", + "pitches_18", + "rv_18", + "pct_18", + "pitches_19", + "rv_19", + "pct_19", + "pitches_heart", + "rv_heart", + "pct_heart", + "pitches_chwa", + "rv_chwa", + "pct_chwa", + "pitches_bin_minus10", + "pitches_bin_minus9", + "pitches_bin_minus8", + "pitches_bin_minus7", + "pitches_bin_minus6", + "pitches_bin_minus5", + "pitches_bin_minus4", + "pitches_bin_minus3", + "pitches_bin_minus2", + "pitches_bin_minus1", + "pitches_bin_0", + "pitches_bin_1", + "pitches_bin_2", + "pitches_bin_3", + "pitches_bin_4", + "pitches_bin_5", + "pitches_bin_6", + "pitches_bin_7", + "pitches_bin_8", + "pitches_bin_9", + "pct_bin_minus10", + "pct_bin_minus9", + "pct_bin_minus8", + "pct_bin_minus7", + "pct_bin_minus6", + "pct_bin_minus5", + "pct_bin_minus4", + "pct_bin_minus3", + "pct_bin_minus2", + "pct_bin_minus1", + "pct_bin_0", + "pct_bin_1", + "pct_bin_2", + "pct_bin_3", + "pct_bin_4", + "pct_bin_5", + "pct_bin_6", + "pct_bin_7", + "pct_bin_8", + "pct_bin_9" + ], + "in": "query", + "name": "sort", + "type": "string" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "desc", + "description": "Local sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "LiveScore match details", - "tags": [ - "LiveScore" - ] - } - }, - "/livescore/match-stats": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the statistics section for a LiveScore match when the source exposes it.", - "operationId": "livescore-match-stats", - "parameters": [ + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, { - "description": "Five-segment path after /en/ from a LiveScore match URL", + "description": "Zero-based row offset", "in": "query", - "name": "path", - "required": true, - "type": "string", - "x-example": "football/uefa-nations-league/league-b-group-3/austria-vs-israel/1738267" + "maximum": 10000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -418931,7 +495892,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/livescore.responseDoc" + "$ref": "#/definitions/mlb.statcastCatcherFramingResponseDoc" } }, "400": { @@ -418958,267 +495919,250 @@ "ApiKeyAuth": [] } ], - "summary": "LiveScore match statistics", + "summary": "Get Baseball Savant Catcher Framing leaderboard rows", "tags": [ - "LiveScore" + "MLB" ] } }, - "/livescore/news": { + "/mlb/statcast-catcher-framing-details": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the article cards for one LiveScore news route. `category` is required: `all` for the home feed, or a lowercase route path of up to six segments, such as `football/premier-league`, found via `livescore-news-categories`. The response carries `source_url` and the page `data`. Some articles link to third-party publishers, article bodies are not returned, and unknown paths return not found or an upstream error.", - "operationId": "livescore-news", + "description": "Returns paginated pitch events for a Catcher Framing entity_id. Repeat the leaderboard filters used to obtain the entity; league aggregate rows have no detail feed. The upstream detail response may be large, so use limit and offset.", + "operationId": "mlb-statcast-catcher-framing-details", "parameters": [ { - "description": "all or a lowercase path from /livescore/news-categories; up to six segments", + "description": "Entity id from a Catcher Framing leaderboard row", "in": "query", - "name": "category", + "name": "entity_id", "required": true, "type": "string", - "x-example": "football/premier-league" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/livescore.responseDoc" - } + "x-example": "663886" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "catcher", + "description": "Table group; league details are unavailable", + "enum": [ + "catcher", + "catching-team", + "batter", + "batting-team", + "pitcher" + ], + "in": "query", + "name": "type", + "type": "string" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "Regular", + "description": "Game type", + "enum": [ + "Any", + "Playoff", + "Regular" + ], + "in": "query", + "name": "game_type", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "LiveScore news by category or topic", - "tags": [ - "LiveScore" - ] - } - }, - "/livescore/news-article": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the public full article record, including the article's structured content when supplied by LiveScore. Copy the path following /en/news/ from an article slug in /livescore/news.", - "operationId": "livescore-news-article", - "parameters": [ + "description": "Optional single MLB team id", + "enum": [ + "108", + "117", + "133", + "141", + "144", + "158", + "138", + "112", + "109", + "119", + "137", + "114", + "136", + "146", + "121", + "120", + "110", + "135", + "143", + "134", + "140", + "139", + "113", + "111", + "115", + "118", + "116", + "142", + "145", + "147" + ], + "in": "query", + "name": "team", + "type": "string" + }, { - "description": "Two to eight lowercase path segments after /en/news/, copied from an article slug", + "default": "q", + "description": "Minimum pitches", + "enum": [ + "q", + "100", + "250", + "500", + "750", + "1000", + "1250", + "1500" + ], "in": "query", - "name": "path", - "required": true, - "type": "string", - "x-example": "football/man-city-guilty-of-114-charges-what-happens-next-man-city-square" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/livescore.responseDoc" - } + "name": "min_pitches", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": 1, + "description": "Minimum results", + "enum": [ + 1, + 25, + 50, + 100, + 250, + 500, + 750, + 1000, + 1250, + 1500 + ], + "in": "query", + "name": "min_results", + "type": "integer" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "First season", + "enum": [ + 2018, + 2019, + 2020, + 2021, + 2022, + 2023, + 2024, + 2025, + 2026 + ], + "in": "query", + "name": "season_start", + "type": "integer" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "LiveScore news article", - "tags": [ - "LiveScore" - ] - } - }, - "/livescore/news-categories": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns all current public news routes from LiveScore's own category sitemap files, including sports, competitions, tips, daily team feeds, and teams. The values update with the source sitemap.", - "operationId": "livescore-news-categories", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/livescore.newsCategoriesResponseDoc" - } + "description": "Last season", + "enum": [ + 2018, + 2019, + 2020, + 2021, + 2022, + 2023, + 2024, + 2025, + 2026 + ], + "in": "query", + "name": "season_end", + "type": "integer" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "LiveScore news categories", - "tags": [ - "LiveScore" - ] - } - }, - "/livescore/news-feed": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns latest public news items from LiveScore's global RSS feed. The source feed may include multiple sports and has no verified category filter. Set include_content=true to include each RSS item's full content:encoded body.", - "operationId": "livescore-news-feed", - "parameters": [ + "description": "Inclusive start date", + "format": "date", + "in": "query", + "name": "date_start", + "type": "string" + }, { - "default": false, - "description": "Include full RSS article content when available", + "description": "Inclusive end date", + "format": "date", "in": "query", - "name": "include_content", - "type": "boolean" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/livescore.livescoreNewsFeedResponseDoc" - } + "name": "date_end", + "type": "string" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Batter side", + "enum": [ + "L", + "R" + ], + "in": "query", + "name": "bat_side", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "LiveScore global RSS news feed", - "tags": [ - "LiveScore" - ] - } - }, - "/livescore/news-publishers": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the current public publisher directory linked from LiveScore News, including publisher names, logos, websites, contact links, and telephone numbers.", - "operationId": "livescore-news-publishers", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/livescore.livescoreNewsPublishersResponseDoc" - } + "description": "Pitcher hand", + "enum": [ + "L", + "R" + ], + "in": "query", + "name": "pitch_hand", + "type": "string" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Single pitch type", + "enum": [ + "FF", + "SI", + "FC", + "CH", + "FS", + "FO", + "SC", + "CU", + "SL", + "ST", + "SV", + "KN" + ], + "in": "query", + "name": "pitch_type", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "LiveScore news publisher directory", - "tags": [ - "LiveScore" - ] - } - }, - "/livescore/player": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the public overview profile data for a player linked from a team squad, including player identity, current team/competition, career teams, recent-match context, and player league summary when supplied.", - "operationId": "livescore-player", - "parameters": [ + "description": "Pitch location relative to strike zone", + "enum": [ + "in", + "out" + ], + "in": "query", + "name": "ball_strike", + "type": "string" + }, { - "description": "season-stats/player-slug/numeric-player-id path copied from a public LiveScore player link", + "default": "original", + "description": "Framing model", + "enum": [ + "original", + "final" + ], "in": "query", - "name": "path", - "required": true, - "type": "string", - "x-example": "season-stats/radek-vitek/56253" + "name": "call", + "type": "string" + }, + { + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "description": "Zero-based row offset", + "in": "query", + "maximum": 100000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -419228,7 +496172,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/livescore.responseDoc" + "$ref": "#/definitions/mlb.statcastCatcherFramingDetailsResponseDoc" } }, "400": { @@ -419255,73 +496199,154 @@ "ApiKeyAuth": [] } ], - "summary": "LiveScore player profile", + "summary": "Get Baseball Savant Catcher Framing pitch-event details", "tags": [ - "LiveScore" + "MLB" ] } }, - "/livescore/scores": { + "/mlb/statcast-catcher-pop-time": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns either the unpaged full-day scoreboard or one cursor-paged UI-style section page for a supported sport and date. The response's Nav values indicate whether another page is available; use the last returned section Id as cursor. Sport ids are discoverable from /livescore/sports.", - "operationId": "livescore-scores", + "description": "Returns catchers ranked by pop-time metrics, filtered by season, team, and minimum steal attempts to second or third. Sort and pagination are applied locally.", + "operationId": "mlb-statcast-catcher-pop-time", "parameters": [ { - "description": "LiveScore sport id", + "default": "2026", + "description": "Season from 2015 through 2026", "enum": [ - "soccer", - "hockey", - "basketball", - "tennis", - "cricket" + "2015", + "2016", + "2017", + "2018", + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" ], "in": "query", - "name": "sport", - "required": true, - "type": "string", - "x-example": "soccer" + "name": "year", + "type": "string" }, { - "description": "Calendar date in YYYYMMDD format", + "description": "MLB team id", + "enum": [ + "108", + "117", + "133", + "141", + "144", + "158", + "138", + "112", + "109", + "119", + "137", + "114", + "136", + "146", + "121", + "120", + "110", + "135", + "143", + "134", + "140", + "139", + "111", + "113", + "115", + "118", + "116", + "142", + "145", + "147" + ], "in": "query", - "name": "date", - "required": true, - "type": "string", - "x-example": "20260926" + "name": "team_id", + "type": "string" }, { - "description": "UTC offset in hours from -12 through 14; defaults to 0", + "default": "5", + "description": "Minimum attempts to second base", + "enum": [ + "1", + "5", + "10", + "15", + "20" + ], "in": "query", - "maximum": 14, - "minimum": -12, - "name": "timezone_offset", - "type": "integer" + "name": "min2b", + "type": "string" }, { - "description": "Request one UI-style page; defaults to false (full-day feed)", + "default": "0", + "description": "Minimum attempts to third base", + "enum": [ + "0", + "1", + "5", + "10", + "15", + "20" + ], "in": "query", - "name": "paging", - "type": "boolean" + "name": "min3b", + "type": "string" }, { - "description": "Section Id from the prior paged response, e.g. s-26031", + "default": "2b_all", + "description": "Sort field from mlb_discovery", + "enum": [ + "catcher", + "team", + "age", + "arm", + "exchange", + "2b_attempts", + "2b_all", + "2b_caught_stealing", + "2b_stolen_bases", + "3b_attempts", + "3b_all", + "3b_caught_stealing", + "3b_stolen_bases" + ], "in": "query", - "name": "cursor", - "type": "string", - "x-example": "s-26031" + "name": "sort", + "type": "string" }, { - "description": "Page direction in paged mode", + "default": "asc", + "description": "Sort direction", "enum": [ - "down", - "up" + "asc", + "desc" ], "in": "query", - "name": "direction", + "name": "sort_dir", "type": "string" + }, + { + "default": 100, + "description": "Rows to return (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "description": "Zero-based offset", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -419331,7 +496356,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/livescore.responseDoc" + "$ref": "#/definitions/mlb.statcastCatcherPopTimeResponseDoc" } }, "400": { @@ -419340,8 +496365,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -419358,49 +496383,351 @@ "ApiKeyAuth": [] } ], - "summary": "LiveScore scores and fixtures by sport and date", + "summary": "Get Baseball Savant Catcher Pop Time leaderboard", "tags": [ - "LiveScore" + "MLB" ] } }, - "/livescore/scores-toc": { + "/mlb/statcast-catcher-stance": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the event, player, section, and competition identifiers indexed by a sport and date. These IDs are date-specific and can help callers enumerate score-page sections.", - "operationId": "livescore-scores-toc", + "description": "Returns the public Catcher Stance table for catchers, catching teams, batters, batting teams, pitchers, or league totals. Supports the live year, game, date, threshold, team, pitch type, batter/pitcher hand, knee posture, grouping, sorting, and pagination controls. Grouping accepts up to four values. Use mlb_discovery for exact value sets. Chart series and page-local search/column toggles are not included.", + "operationId": "mlb-statcast-catcher-stance", "parameters": [ { - "description": "LiveScore sport id", + "default": "catcher", + "description": "Table entity type", "enum": [ - "soccer", - "hockey", - "basketball", - "tennis", - "cricket" + "catcher", + "catching-team", + "batter", + "batting-team", + "pitcher", + "league" ], "in": "query", - "name": "sport", - "required": true, - "type": "string", - "x-example": "soccer" + "name": "type", + "type": "string" }, { - "description": "Calendar date in YYYYMMDD format", + "default": "2020", + "description": "First season", + "enum": [ + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" + ], "in": "query", - "name": "date", - "required": true, - "type": "string", - "x-example": "20260926" + "name": "season_start", + "type": "string" + }, + { + "default": "2026", + "description": "Last season; must be >= season_start", + "enum": [ + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" + ], + "in": "query", + "name": "season_end", + "type": "string" + }, + { + "default": "Regular", + "description": "Game type", + "enum": [ + "Any", + "Playoff", + "Regular" + ], + "in": "query", + "name": "game_type", + "type": "string" + }, + { + "default": "q", + "description": "Minimum pitches", + "enum": [ + "q", + "100", + "250", + "500", + "750", + "1000", + "2500", + "5000", + "7500", + "10000", + "15000", + "20000" + ], + "in": "query", + "name": "min_pitches", + "type": "string" + }, + { + "default": "1", + "description": "Minimum results", + "enum": [ + "1", + "25", + "50", + "100", + "250", + "500", + "750", + "1000", + "2500", + "5000", + "7500", + "10000", + "15000", + "20000" + ], + "in": "query", + "name": "min_results", + "type": "string" + }, + { + "description": "Start date YYYY-MM-DD", + "in": "query", + "name": "date_start", + "type": "string" + }, + { + "description": "End date YYYY-MM-DD", + "in": "query", + "name": "date_end", + "type": "string" + }, + { + "description": "Batter side; omit for all", + "enum": [ + "L", + "R" + ], + "in": "query", + "name": "bat_side", + "type": "string" + }, + { + "description": "Pitcher hand; omit for all", + "enum": [ + "L", + "R" + ], + "in": "query", + "name": "pitch_hand", + "type": "string" + }, + { + "description": "Knee posture", + "enum": [ + "9999", + "4", + "1", + "2", + "3" + ], + "in": "query", + "name": "knee_code", + "type": "string" + }, + { + "collectionFormat": "multi", + "description": "One or more MLB team ids", + "in": "query", + "items": { + "enum": [ + "108", + "117", + "133", + "141", + "144", + "158", + "138", + "112", + "109", + "119", + "137", + "114", + "136", + "146", + "121", + "120", + "110", + "135", + "143", + "134", + "140", + "139", + "111", + "113", + "115", + "118", + "116", + "142", + "145", + "147" + ], + "type": "string" + }, + "name": "teams", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "One or more pitch types", + "in": "query", + "items": { + "enum": [ + "FF", + "SI", + "FC", + "CH", + "FS", + "FO", + "SC", + "CU", + "SL", + "ST", + "SV", + "KN" + ], + "type": "string" + }, + "name": "pitch_types", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Up to four grouping dimensions; none disables grouping", + "in": "query", + "items": { + "enum": [ + "none", + "year", + "api_game_date_month_text", + "game_type", + "knee_code_overview", + "pitch_hand", + "bat_side", + "api_pitch_type_group03", + "knee_code" + ], + "type": "string" + }, + "name": "group_by", + "type": "array" + }, + { + "default": "pct_one_down", + "description": "Local row sort field", + "enum": [ + "name", + "id", + "team_id", + "team_name", + "year", + "pitches", + "skeletal_pitches", + "n_both_down", + "n_both_up", + "n_inside_down", + "n_l_down", + "n_leg_extended", + "n_one_down", + "n_outside_down", + "n_r_down", + "n_teams", + "pct_both_down", + "pct_both_up", + "pct_inside_down", + "pct_l_down", + "pct_leg_extended", + "pct_one_down", + "pct_outside_down", + "pct_r_down", + "one_knee_blocking", + "one_knee_blocking_162", + "one_knee_csaa", + "one_knee_csp", + "one_knee_framing", + "one_knee_framing_162", + "one_knee_pbwp", + "one_knee_pitching", + "one_knee_pitching_162", + "one_knee_ron_num", + "one_knee_ron_pbwp", + "one_knee_sba_csaa", + "one_knee_sba_num", + "one_knee_shadow_cs", + "one_knee_shadow_num", + "one_knee_throwing", + "one_knee_throwing_162", + "other_blocking", + "other_blocking_162", + "other_csaa", + "other_csp", + "other_framing", + "other_framing_162", + "other_pbwp", + "other_pitching", + "other_pitching_162", + "other_ron_num", + "other_ron_pbwp", + "other_sba_csaa", + "other_sba_num", + "other_shadow_cs", + "other_shadow_num", + "other_throwing", + "other_throwing_162", + "total_blocking", + "total_framing", + "total_frv", + "total_throwing", + "total_untracked" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": "desc", + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", + "type": "string" + }, + { + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" }, { - "description": "UTC offset in hours from -12 through 14; defaults to 0", + "default": 0, + "description": "Zero-based row offset", "in": "query", - "maximum": 14, - "minimum": -12, - "name": "timezone_offset", + "maximum": 5000, + "minimum": 0, + "name": "offset", "type": "integer" } ], @@ -419411,7 +496738,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/livescore.responseDoc" + "$ref": "#/definitions/mlb.statcastCatcherStanceResponseDoc" } }, "400": { @@ -419420,12 +496747,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -419438,217 +496759,226 @@ "ApiKeyAuth": [] } ], - "summary": "LiveScore score date table of contents", + "summary": "Get Baseball Savant Catcher Stance rows", "tags": [ - "LiveScore" + "MLB" ] } }, - "/livescore/search": { + "/mlb/statcast-catcher-throwing": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches the public LiveScore index for a free-text term, or browse its current team, competition-stage, and region-category sections with an empty query. Results are dynamic, limited per section, and are not a complete historical competition directory. Use /livescore/sports to discover all supported sport tokens.", - "operationId": "livescore-search", + "description": "Returns catcher, catching-team, or league caught-stealing and throw-quality rows with the public season, game, attempt-threshold, target-base, split-years, team, and roster-membership filters. Table sorting and pagination are applied locally. Catcher rows can be expanded with mlb-statcast-catcher-throwing-details. CSV, charts, and page-local display controls are excluded.", + "operationId": "mlb-statcast-catcher-throwing", "parameters": [ { - "description": "LiveScore sport token", + "default": "Cat", + "description": "Table group", "enum": [ - "soccer", - "hockey", - "basketball", - "tennis", - "cricket" + "Cat", + "Pitching Team", + "League" ], "in": "query", - "name": "sport", - "required": true, - "type": "string", - "x-example": "soccer" + "name": "type", + "type": "string" }, { - "description": "Optional free-text team, competition, or region term (up to 100 characters). Omit or leave empty to browse current results.", + "default": "2026", + "description": "First season", + "enum": [ + "2016", + "2017", + "2018", + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" + ], "in": "query", - "maxLength": 100, - "name": "query", - "type": "string", - "x-example": "Manchester City" + "name": "season_start", + "type": "string" }, { - "description": "Optional results per section (1 to 100). Defaults to 10 for a text query or 50 when query is empty.", + "default": "2026", + "description": "Last season; must be >= season_start", + "enum": [ + "2016", + "2017", + "2018", + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" + ], "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", - "type": "integer", - "x-example": 50 - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/livescore.livescoreSearchResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + "name": "season_end", + "type": "string" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "Regular", + "description": "Game type", + "enum": [ + "Regular", + "Playoff", + "All" + ], + "in": "query", + "name": "game_type", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Search LiveScore teams, competitions, and regions", - "tags": [ - "LiveScore" - ] - } - }, - "/livescore/sports": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the five sports in LiveScore's fixture navigation, with no inputs. The ids are `soccer` (shown as Football on the site), `hockey`, `basketball`, `tennis` and `cricket`. Use an id as the sport input of the LiveScore scores endpoint.", - "operationId": "livescore-sports", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/livescore.sportsResponseDoc" - } - } - }, - "security": [ + "default": "q", + "description": "Minimum steal attempts", + "enum": [ + "q", + "1", + "5", + "10", + "20", + "30", + "40", + "50", + "75", + "100" + ], + "in": "query", + "name": "minimum", + "type": "string" + }, { - "ApiKeyAuth": [] - } - ], - "summary": "LiveScore supported sports", - "tags": [ - "LiveScore" - ] - } - }, - "/livescore/team": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a public team page section such as overview, fixtures, results, standings, squad, player stats, or team stats. Tab paths and competition-specific identifiers are supplied by the source page; copy a team tab href from LiveScore.", - "operationId": "livescore-team", - "parameters": [ + "default": "All", + "description": "Throw target", + "enum": [ + "2B", + "3B", + "All" + ], + "in": "query", + "name": "target_base", + "type": "string" + }, { - "description": "Five to nine lowercase path segments following /en/ from a public LiveScore team page or linked tab", + "default": "no", + "description": "Split results by season", + "enum": [ + "yes", + "no" + ], "in": "query", - "name": "path", - "required": true, - "type": "string", - "x-example": "football/team/name/2909/stats/teams/70" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/livescore.responseDoc" - } + "name": "split", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Empty for all teams, split for team stints, or an MLB team id", + "enum": [ + "split", + "108", + "117", + "133", + "141", + "144", + "158", + "138", + "112", + "109", + "119", + "137", + "114", + "136", + "146", + "121", + "120", + "110", + "135", + "143", + "134", + "140", + "139", + "111", + "113", + "115", + "118", + "116", + "142", + "145", + "147" + ], + "in": "query", + "name": "team", + "type": "string" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": true, + "description": "For a selected team, include only catchers on that team", + "in": "query", + "name": "with_team_only", + "type": "boolean" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "LiveScore team page and section data", - "tags": [ - "LiveScore" - ] - } - }, - "/lolesports/completed-events": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns every completed match of one tournament with final game wins and the game ids and VOD references for each game. An empty list is valid for a tournament that has not started.", - "operationId": "lolesports-completed-events", - "parameters": [ + "default": "n_cs_aa", + "description": "Local sort field", + "enum": [ + "entity_name", + "start_year", + "n", + "cs_raa", + "n_cs_aa", + "n_cs", + "rate_cs", + "n_xcs", + "rate_xcs", + "rate_cs_aa", + "seasonal_sprint_speed", + "distance_to_target", + "pop_time", + "exchange_time", + "arm_strength", + "n_xcs_with_flight_over_xcs", + "n_xcs_with_exchange_over_xcs", + "n_xcs_with_accuracy_over_xcs", + "n_xcs_with_ground_other_over_xcs", + "n_xcs_with_onfly_other_over_xcs", + "n_xcs_with_untracked_other_over_xcs" + ], + "in": "query", + "name": "sort", + "type": "string" + }, { - "description": "Language for names and labels; one of cs-CZ, de-DE, en-US, es-ES, es-MX, fr-FR, hu-HU, ja-JP, ko-KR, pl-PL, pt-BR, th-TH, tr-TR, vi-VN, zh-TW; defaults to en-US", + "default": "desc", + "description": "Local sort direction", "enum": [ - "cs-CZ", - "de-DE", - "en-US", - "es-ES", - "es-MX", - "fr-FR", - "hu-HU", - "ja-JP", - "ko-KR", - "pl-PL", - "pt-BR", - "th-TH", - "tr-TR", - "vi-VN", - "zh-TW" + "asc", + "desc" ], "in": "query", - "name": "hl", + "name": "sort_dir", "type": "string" }, { - "description": "Numeric tournament id from lolesports-tournaments", + "default": 100, + "description": "Rows per page (1-500)", "in": "query", - "name": "tournament_id", - "required": true, - "type": "string", - "x-example": "115548681802226458" + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "description": "Zero-based row offset", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -419658,19 +496988,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/lolesports.CompletedEventsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/mlb.statcastCatcherThrowingResponseDoc" } }, "400": { @@ -419697,50 +497015,160 @@ "ApiKeyAuth": [] } ], - "summary": "League of Legends Esports completed matches", + "summary": "Get Baseball Savant Catcher Throwing leaderboard rows", "tags": [ - "LoL Esports" + "MLB" ] } }, - "/lolesports/event": { + "/mlb/statcast-catcher-throwing-details": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one match: league, tournament, teams with game wins, best-of strategy, each game's id, number, state (`unneeded`, `unstarted`, `inProgress`, `completed`), blue/red side assignment and VODs, plus broadcast streams. Use a game `id` with lolesports-game-window or lolesports-game-details. An unknown match id returns not found.", - "operationId": "lolesports-event", + "description": "Returns per-attempt play records expanded from a Catcher Throwing catcher row. Supply the entity_id from a Cat row and the row's year/team when it represents a season or team stint. Details are ungrouped source attempts, paginated locally.", + "operationId": "mlb-statcast-catcher-throwing-details", "parameters": [ { - "description": "Language for names and labels; one of cs-CZ, de-DE, en-US, es-ES, es-MX, fr-FR, hu-HU, ja-JP, ko-KR, pl-PL, pt-BR, th-TH, tr-TR, vi-VN, zh-TW; defaults to en-US", + "description": "Positive catcher id from a Cat row", + "in": "query", + "name": "entity_id", + "required": true, + "type": "integer", + "x-example": 521692 + }, + { + "default": 2026, + "description": "Season", "enum": [ - "cs-CZ", - "de-DE", - "en-US", - "es-ES", - "es-MX", - "fr-FR", - "hu-HU", - "ja-JP", - "ko-KR", - "pl-PL", - "pt-BR", - "th-TH", - "tr-TR", - "vi-VN", - "zh-TW" + 2016, + 2017, + 2018, + 2019, + 2020, + 2021, + 2022, + 2023, + 2024, + 2025, + 2026 ], "in": "query", - "name": "hl", + "name": "year", + "type": "integer" + }, + { + "default": "Regular", + "description": "Game type", + "enum": [ + "Regular", + "Playoff", + "All" + ], + "in": "query", + "name": "game_type", "type": "string" }, { - "description": "Numeric match id from lolesports-schedule, lolesports-live or lolesports-standings", + "default": "q", + "description": "Minimum steal attempts", + "enum": [ + "q", + "1", + "5", + "10", + "20", + "30", + "40", + "50", + "75", + "100" + ], "in": "query", - "name": "match_id", - "required": true, - "type": "string", - "x-example": "117133816701918802" + "name": "minimum", + "type": "string" + }, + { + "default": "All", + "description": "Throw target", + "enum": [ + "2B", + "3B", + "All" + ], + "in": "query", + "name": "target_base", + "type": "string" + }, + { + "default": "no", + "description": "Split rows by season", + "enum": [ + "yes", + "no" + ], + "in": "query", + "name": "split", + "type": "string" + }, + { + "description": "Empty, split, or team id from the corresponding leaderboard row", + "enum": [ + "108", + "117", + "133", + "141", + "144", + "158", + "138", + "112", + "109", + "119", + "137", + "114", + "136", + "146", + "121", + "120", + "110", + "135", + "143", + "134", + "140", + "139", + "111", + "113", + "115", + "118", + "116", + "142", + "145", + "147" + ], + "in": "query", + "name": "team", + "type": "string" + }, + { + "default": true, + "description": "Team roster membership filter", + "in": "query", + "name": "with_team_only", + "type": "boolean" + }, + { + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "description": "Zero-based row offset", + "in": "query", + "maximum": 100000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -419750,19 +497178,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/lolesports.EventDetailResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/mlb.statcastCatcherThrowingDetailsResponseDoc" } }, "400": { @@ -419795,123 +497211,147 @@ "ApiKeyAuth": [] } ], - "summary": "League of Legends Esports match detail", + "summary": "Get Catcher Throwing attempt details", "tags": [ - "LoL Esports" + "MLB" ] } }, - "/lolesports/game-details": { + "/mlb/statcast-expected": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns per-player detail frames for one game: level, KDA, gold, creep score, kill participation, damage share, wards, attack damage, ability power, armor, magic resistance, final items, rune ids and skill order. Use participant ids from lolesports-game-window metadata. The same `starting_time` rule as lolesports-game-window applies.", - "operationId": "lolesports-game-details", + "description": "Returns the separate Expected Statistics leaderboard with batter, pitcher, and team views; season, team, batter-position, BIP/PA qualifier and threshold filters; local metric sorting; and pagination. League-average values are returned separately.", + "operationId": "mlb-statcast-expected", "parameters": [ { - "description": "Numeric game id from lolesports-event", + "default": "batter", + "description": "Leaderboard view", + "enum": [ + "batter", + "pitcher", + "batter-team", + "pitcher-team" + ], "in": "query", - "name": "game_id", - "required": true, - "type": "string", - "x-example": "117133816701918803" + "name": "type", + "type": "string" }, { - "description": "RFC 3339 UTC timestamp whose seconds are divisible by 10; frames begin there", + "description": "Season from 2015 through the current season", "in": "query", - "name": "starting_time", - "type": "string", - "x-example": "2026-10-07T11:30:00.000Z" + "name": "year", + "type": "integer" }, { - "description": "Participant numbers 1 to 10 joined by underscores, for example 1_2_3", + "description": "Optional MLB team id from mlb_teams", "in": "query", - "name": "participant_ids", - "type": "string", - "x-example": "1_2" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/lolesports.GameDetailsResponse" - } - }, - "type": "object" - } - ] - } + "name": "team_id", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Batter position; only supported for type=batter", + "enum": [ + "C", + "1B", + "2B", + "SS", + "3B", + "LF", + "CF", + "RF", + "DH" + ], + "in": "query", + "name": "position", + "type": "string" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "bip", + "description": "Minimum qualifier type", + "enum": [ + "bip", + "pa" + ], + "in": "query", + "name": "filter_type", + "type": "string" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "q", + "description": "Minimum BIP/PA threshold", + "enum": [ + "q", + "1", + "25", + "50", + "100", + "150", + "200", + "250", + "350", + "450", + "500", + "600" + ], + "in": "query", + "name": "minimum", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "League of Legends Esports player game details", - "tags": [ - "LoL Esports" - ] - } - }, - "/lolesports/game-window": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the lolesports live-stats window for one game: patch, blue and red team and player metadata (champion, role, summoner name) and roughly ten seconds of frames with team gold, kills, towers, inhibitors, barons, dragons and per-player level, KDA, creep score and health. `game_state` is `in_game`, `paused` or `finished`. For a game in progress omit `starting_time` for the latest window; for a completed game pass a timestamp inside the game.", - "operationId": "lolesports-game-window", - "parameters": [ + "default": "est_woba", + "description": "Sort field", + "enum": [ + "entity_name", + "entity_team_name", + "pa", + "bip", + "ba", + "est_ba", + "ba_minus_est_ba_diff", + "slg", + "est_slg", + "slg_minus_est_slg_diff", + "woba", + "est_woba", + "woba_minus_est_woba_diff", + "wobacon", + "est_wobacon", + "wobacon_minus_est_wobacon_diff", + "exit_velocity_avg", + "hard_hit_percent", + "barrels_per_bip", + "barrels_per_pa" + ], + "in": "query", + "name": "sort", + "type": "string" + }, { - "description": "Numeric game id from lolesports-event", + "default": "desc", + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], "in": "query", - "name": "game_id", - "required": true, - "type": "string", - "x-example": "117133816701918803" + "name": "sort_dir", + "type": "string" }, { - "description": "RFC 3339 UTC timestamp whose seconds are divisible by 10; frames begin there", + "default": 100, + "description": "Rows per page (1-500)", "in": "query", - "name": "starting_time", - "type": "string", - "x-example": "2026-10-07T10:20:00.000Z" + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "description": "Zero-based row offset", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -419921,19 +497361,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/lolesports.GameWindowResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/mlb.statcastBoardResponseDoc" } }, "400": { @@ -419942,18 +497370,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -419966,50 +497382,284 @@ "ApiKeyAuth": [] } ], - "summary": "League of Legends Esports live game window", + "summary": "Get Baseball Savant Expected Statistics", "tags": [ - "LoL Esports" + "MLB" ] } }, - "/lolesports/gpr": { + "/mlb/statcast-fielding-run-value": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the League of Legends Esports Global Power Rankings (GPR): every ranked team with rank, GPR score, Elo, previous rank and rank change, home league, match and game records, average opponent GPR and the tournaments counted with each result and placement. `season` selects `current` (the running year, default) or the Worlds snapshots `2025` and `2024`; `league` keeps one home league's teams and `history` adds the daily GPR history points. The response lists the seasons and home leagues available.", - "operationId": "lolesports-gpr", + "description": "Returns fielding run value for fielder, fielding-team, batter, batting-team, or pitcher views. Dates and grouping dimensions follow the first-party leaderboard. Minimum 0.1 is available only for fielder and fielding-team views; the batting/pitching views omit it. Sorting and pagination are applied locally. CSV and player-page visualizations are outside this table contract.", + "operationId": "mlb-statcast-fielding-run-value", "parameters": [ { - "description": "Ranking snapshot; one of current, 2025, 2024; defaults to current", + "default": "fielder", + "description": "Table type", "enum": [ - "current", + "fielder", + "fielding-team", + "batter", + "batting-team", + "pitcher" + ], + "in": "query", + "name": "type", + "type": "string" + }, + { + "default": "2026", + "description": "First season", + "enum": [ + "2016", + "2017", + "2018", + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", "2025", - "2024" + "2026" ], "in": "query", - "name": "season", + "name": "season_start", "type": "string" }, { - "description": "Home league slug from the leagues list of the response, for example lck", + "default": "season_start", + "description": "Last season; must be >= season_start", + "enum": [ + "2016", + "2017", + "2018", + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" + ], "in": "query", - "name": "league", + "name": "season_end", "type": "string" }, { - "description": "Number of teams to return, 1 to 200, best rank first; defaults to all", + "default": "Regular", + "description": "Game type", + "enum": [ + "Any", + "Regular", + "Playoff" + ], "in": "query", - "maximum": 200, + "name": "game_type", + "type": "string" + }, + { + "default": "q", + "description": "Total minimum; 0.1 only for fielder and fielding-team", + "enum": [ + "q", + "0.1", + "1", + "10", + "25", + "50", + "100", + "200", + "500", + "750", + "1000", + "2500", + "5000" + ], + "in": "query", + "name": "minimum", + "type": "string" + }, + { + "default": "1", + "description": "Minimum within each split; 0.1 only for fielder and fielding-team", + "enum": [ + "0.1", + "1", + "10", + "25", + "50", + "100", + "200", + "500", + "750", + "1000", + "2500", + "5000" + ], + "in": "query", + "name": "minimum_split", + "type": "string" + }, + { + "default": "0", + "description": "Position / position group", + "enum": [ + "0", + "11", + "12", + "111", + "112", + "121", + "13", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" + ], + "in": "query", + "name": "position", + "type": "string" + }, + { + "collectionFormat": "multi", + "description": "Repeated MLB team ids", + "in": "query", + "items": { + "enum": [ + "108", + "109", + "110", + "111", + "112", + "113", + "114", + "115", + "116", + "117", + "118", + "119", + "120", + "121", + "133", + "134", + "135", + "136", + "137", + "138", + "139", + "140", + "141", + "142", + "143", + "144", + "145", + "146", + "147", + "158" + ], + "type": "string" + }, + "name": "team_id", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Repeated split dimensions", + "in": "query", + "items": { + "enum": [ + "year", + "api_game_date_month_text", + "position", + "game_type" + ], + "type": "string" + }, + "name": "group_by", + "type": "array" + }, + { + "description": "Start date, YYYY-MM-DD, from 2018-03-29 through today", + "in": "query", + "name": "date_start", + "type": "string" + }, + { + "description": "End date, YYYY-MM-DD, from 2018-03-29 through today", + "in": "query", + "name": "date_end", + "type": "string" + }, + { + "default": "total_runs", + "description": "Local sort field", + "enum": [ + "name", + "team_name", + "total_runs", + "inf_of_runs", + "range_runs", + "arm_runs", + "dp_runs", + "fielding_runs_prevented_on_rec1b", + "catching_runs", + "framing_runs", + "throwing_runs", + "blocking_runs", + "outs_total", + "outs_2", + "outs_3", + "outs_4", + "outs_5", + "outs_6", + "outs_7", + "outs_8", + "outs_9", + "tot_pa", + "year", + "api_game_date_month_mm", + "api_game_date_month_text", + "pos_id", + "game_type" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": "desc", + "description": "Local sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", + "type": "string" + }, + { + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, "minimum": 1, "name": "limit", "type": "integer" }, { - "description": "Add each team's GPR history points", + "default": 0, + "description": "Zero-based row offset (0-5000)", "in": "query", - "name": "history", - "type": "boolean" + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -420019,19 +497669,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/lolesports.GPRResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/mlb.statcastFieldingRunValueResponseDoc" } }, "400": { @@ -420040,18 +497678,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -420064,227 +497690,376 @@ "ApiKeyAuth": [] } ], - "summary": "League of Legends Global Power Rankings", + "summary": "Get Baseball Savant Fielding Run Value rows", "tags": [ - "LoL Esports" + "MLB" ] } }, - "/lolesports/leagues": { + "/mlb/statcast-first-base-receiving": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns every league on lolesports.com with its numeric `id`, `slug`, name, region, image and display status (`force_selected`, `selected`, `not_selected`, `hidden`). Use a league `id` with lolesports-schedule or lolesports-tournaments. Region labels are upstream values such as `EMEA`, `KOREA`, `CHINA`, `NORTH AMERICA` and `INTERNATIONAL`.", - "operationId": "lolesports-leagues", + "description": "Returns first baseman, throwing fielder, fielding team, batting team, or league receiving rows. Includes season/game selections, threshold and group filters, team/date/hand/height/outcome filters, and validated page-local split filters and sorting. Per-play source records are available through mlb-statcast-first-base-receiving-details. 3D trajectory visualizations are not included.", + "operationId": "mlb-statcast-first-base-receiving", "parameters": [ { - "description": "Language for names and labels; one of cs-CZ, de-DE, en-US, es-ES, es-MX, fr-FR, hu-HU, ja-JP, ko-KR, pl-PL, pt-BR, th-TH, tr-TR, vi-VN, zh-TW; defaults to en-US", + "default": "fielder_3", + "description": "Leaderboard group", "enum": [ - "cs-CZ", - "de-DE", - "en-US", - "es-ES", - "es-MX", - "fr-FR", - "hu-HU", - "ja-JP", - "ko-KR", - "pl-PL", - "pt-BR", - "th-TH", - "tr-TR", - "vi-VN", - "zh-TW" + "fielder_3", + "throw_fielder_id", + "pitching-team", + "batting-team", + "league" ], "in": "query", - "name": "hl", + "name": "type", "type": "string" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/lolesports.LeaguesResponse" - } - }, - "type": "object" - } - ] - } }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "collectionFormat": "multi", + "description": "Season values", + "in": "query", + "items": { + "enum": [ + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" + ], + "type": "string" + }, + "name": "season[]", + "type": "array" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "collectionFormat": "multi", + "description": "Game types", + "in": "query", + "items": { + "enum": [ + "R", + "F", + "D", + "L", + "W" + ], + "type": "string" + }, + "name": "gameType[]", + "type": "array" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "League of Legends Esports leagues", - "tags": [ - "LoL Esports" - ] - } - }, - "/lolesports/live": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns matches currently in progress across all leagues, in the same shape as lolesports-schedule events. An empty list is valid when no league is playing. Pair a returned match id with lolesports-event to get game ids, then lolesports-game-window for live frames.", - "operationId": "lolesports-live", - "parameters": [ + "default": "q", + "description": "Minimum opportunities", + "enum": [ + "q", + "1", + "5", + "10", + "25", + "50", + "75", + "100", + "200", + "300", + "400", + "500", + "750", + "1000" + ], + "in": "query", + "name": "min", + "type": "string" + }, { - "description": "Language for names and labels; one of cs-CZ, de-DE, en-US, es-ES, es-MX, fr-FR, hu-HU, ja-JP, ko-KR, pl-PL, pt-BR, th-TH, tr-TR, vi-VN, zh-TW; defaults to en-US", + "default": "1", + "description": "Minimum opportunities within each group", "enum": [ - "cs-CZ", - "de-DE", - "en-US", - "es-ES", - "es-MX", - "fr-FR", - "hu-HU", - "ja-JP", - "ko-KR", - "pl-PL", - "pt-BR", - "th-TH", - "tr-TR", - "vi-VN", - "zh-TW" + "1", + "5", + "10", + "25", + "50", + "75", + "100", + "200", + "300", + "400", + "500", + "750", + "1000" ], "in": "query", - "name": "hl", + "name": "minSplit", "type": "string" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/lolesports.LiveResponse" - } - }, - "type": "object" - } - ] - } }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "1", + "description": "Year split selector", + "enum": [ + "0", + "1" + ], + "in": "query", + "name": "splitYear", + "type": "string" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "collectionFormat": "multi", + "description": "Group dimensions", + "in": "query", + "items": { + "enum": [ + "throw_height_code", + "throw_location_code_full", + "runners_on_cd" + ], + "type": "string" + }, + "name": "split[]", + "type": "array" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "League of Legends Esports live matches", - "tags": [ - "LoL Esports" - ] - } - }, - "/lolesports/news": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the articles listed on the League of Legends Esports news page: title, summary, link, publication time, banner image, authors and whether the item links out to another site (a video or a store page). The page shows up to the newest 100 items and has no category, tag or paging controls; `hl` selects the site language and `limit` keeps the newest items only.", - "operationId": "lolesports-news", - "parameters": [ + "collectionFormat": "multi", + "description": "MLB team ids", + "in": "query", + "items": { + "enum": [ + "108", + "117", + "133", + "141", + "144", + "158", + "138", + "112", + "109", + "119", + "137", + "114", + "136", + "146", + "121", + "120", + "110", + "135", + "143", + "134", + "140", + "139", + "111", + "113", + "115", + "118", + "116", + "142", + "145", + "147" + ], + "type": "string" + }, + "name": "team[]", + "type": "array" + }, { - "description": "Site language; one of cs-CZ, de-DE, el-GR, en-AU, en-GB, en-PH, en-SG, en-US, es-ES, es-MX, fr-FR, hu-HU, id-ID, it-IT, ja-JP, ko-KR, pl-PL, pt-BR, ro-RO, ru-RU, th-TH, tr-TR, vi-VN, zh-TW; defaults to en-US", + "description": "Inclusive start date (YYYY-MM-DD)", + "in": "query", + "name": "dateStart", + "type": "string" + }, + { + "description": "Inclusive end date (YYYY-MM-DD)", + "in": "query", + "name": "dateEnd", + "type": "string" + }, + { + "description": "First baseman batting hand", "enum": [ - "cs-CZ", - "de-DE", - "el-GR", - "en-AU", - "en-GB", - "en-PH", - "en-SG", - "en-US", - "es-ES", - "es-MX", - "fr-FR", - "hu-HU", - "id-ID", - "it-IT", - "ja-JP", - "ko-KR", - "pl-PL", - "pt-BR", - "ro-RO", - "ru-RU", - "th-TH", - "tr-TR", - "vi-VN", - "zh-TW" + "L", + "R" ], "in": "query", - "name": "hl", + "name": "fielder_3_hand", "type": "string" }, { - "description": "Number of newest articles to return, 1 to 100; defaults to all the page lists", + "description": "Minimum fielder height, inches", + "enum": [ + "70", + "71", + "72", + "73", + "74", + "75", + "76", + "77", + "78", + "79", + "80" + ], "in": "query", - "maximum": 100, + "name": "min_height_in_inches", + "type": "string" + }, + { + "description": "Field-out flag", + "enum": [ + "0", + "1" + ], + "in": "query", + "name": "is_hit_into_play_field_out", + "type": "string" + }, + { + "collectionFormat": "multi", + "description": "Base occupancy codes", + "in": "query", + "items": { + "enum": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7" + ], + "type": "string" + }, + "name": "runners_on_cd[]", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Throwing position ids", + "in": "query", + "items": { + "enum": [ + "4", + "5", + "6" + ], + "type": "string" + }, + "name": "throw_pos_id[]", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Throw heights", + "in": "query", + "items": { + "enum": [ + "1_Low", + "2_Mid", + "3_High" + ], + "type": "string" + }, + "name": "throw_height_code[]", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Throw outcomes", + "in": "query", + "items": { + "enum": [ + "A. On Target", + "B. Scoop", + "C. Bounce", + "D. Low", + "E. Wide", + "F. High" + ], + "type": "string" + }, + "name": "throw_location_code_full[]", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Time bins", + "in": "query", + "items": { + "enum": [ + "-1", + "0", + "1", + "2", + "3", + "4", + "5" + ], + "type": "string" + }, + "name": "bin_time_X10[]", + "type": "array" + }, + { + "default": "total_oaa", + "description": "Local sort field", + "enum": [ + "entity_name", + "total_oaa", + "oaa_on_target", + "oaa_bounce", + "oaa_scoop", + "oaa_low", + "oaa_high", + "oaa_wide", + "n_on_target", + "n_bounce", + "n_scoop", + "n_low", + "n_high", + "n_wide", + "outs_on_target", + "outs_bounce", + "outs_scoop", + "outs_low", + "outs_high", + "outs_wide", + "n_outs", + "n_plays", + "avg_expected_rate_out" + ], + "in": "query", + "name": "sortColumn", + "type": "string" + }, + { + "default": "desc", + "description": "Local sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sortDirection", + "type": "string" + }, + { + "default": 100, + "description": "Rows per page, 1-500", + "in": "query", + "maximum": 500, "minimum": 1, "name": "limit", "type": "integer" + }, + { + "description": "Zero-based row offset", + "in": "query", + "maximum": 10000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -420294,19 +498069,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/lolesports.NewsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/mlb.statcastFirstBaseReceivingResponseDoc" } }, "400": { @@ -420315,12 +498078,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -420339,160 +498096,341 @@ "ApiKeyAuth": [] } ], - "summary": "League of Legends Esports news", + "summary": "Get Baseball Savant First Base Receiving leaderboards", "tags": [ - "LoL Esports" + "MLB" ] } }, - "/lolesports/schedule": { + "/mlb/statcast-first-base-receiving-details": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the match schedule around today: start time, state (`unstarted`, `inProgress`, `completed`), block name, league, teams, outcome and game wins, and best-of strategy. Optionally filter with `league_id`. Follow `older_page_token` for past results and `newer_page_token` for later fixtures; a missing token means that direction is exhausted.", - "operationId": "lolesports-schedule", + "description": "Returns per-play records backing an individual first-base receiving leaderboard row, including game/play ids, outcome codes, receiving OAA, expected out rate, timing, and field coordinates. This is tabular JSON; the separate 3D skeletal visualization route is excluded.", + "operationId": "mlb-statcast-first-base-receiving-details", "parameters": [ { - "description": "Language for names and labels; one of cs-CZ, de-DE, en-US, es-ES, es-MX, fr-FR, hu-HU, ja-JP, ko-KR, pl-PL, pt-BR, th-TH, tr-TR, vi-VN, zh-TW; defaults to en-US", + "description": "Positive MLB player id", + "in": "query", + "name": "player_id", + "required": true, + "type": "integer", + "x-example": 683737 + }, + { + "default": "fielder_3", + "description": "Leaderboard group", "enum": [ - "cs-CZ", - "de-DE", - "en-US", - "es-ES", - "es-MX", - "fr-FR", - "hu-HU", - "ja-JP", - "ko-KR", - "pl-PL", - "pt-BR", - "th-TH", - "tr-TR", - "vi-VN", - "zh-TW" + "fielder_3", + "throw_fielder_id", + "pitching-team", + "batting-team", + "league" ], "in": "query", - "name": "hl", + "name": "type", "type": "string" }, { - "description": "Numeric league id from lolesports-leagues; omit for all leagues", + "collectionFormat": "multi", + "description": "Season values", "in": "query", - "name": "league_id", - "type": "string", - "x-example": "98767991302996019" + "items": { + "enum": [ + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" + ], + "type": "string" + }, + "name": "season[]", + "type": "array" }, { - "description": "older_page_token or newer_page_token copied from a previous response", + "collectionFormat": "multi", + "description": "Game types", "in": "query", - "name": "page_token", + "items": { + "enum": [ + "R", + "F", + "D", + "L", + "W" + ], + "type": "string" + }, + "name": "gameType[]", + "type": "array" + }, + { + "default": "q", + "description": "Minimum opportunities", + "enum": [ + "q", + "1", + "5", + "10", + "25", + "50", + "75", + "100", + "200", + "300", + "400", + "500", + "750", + "1000" + ], + "in": "query", + "name": "min", "type": "string" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/lolesports.ScheduleResponse" - } - }, - "type": "object" - } - ] - } }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "1", + "description": "Grouped opportunity threshold", + "enum": [ + "1", + "5", + "10", + "25", + "50", + "75", + "100", + "200", + "300", + "400", + "500", + "750", + "1000" + ], + "in": "query", + "name": "minSplit", + "type": "string" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "collectionFormat": "multi", + "description": "Group dimensions", + "in": "query", + "items": { + "enum": [ + "throw_height_code", + "throw_location_code_full", + "runners_on_cd" + ], + "type": "string" + }, + "name": "split[]", + "type": "array" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "League of Legends Esports schedule", - "tags": [ - "LoL Esports" - ] - } - }, - "/lolesports/seasons": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the League of Legends esports calendar since 2011, newest first: every season with its splits (start and end time, region) and the tournaments played in each split with their league. Use a tournament `id` with lolesports-standings or lolesports-completed-events and a league `id` with lolesports-tournaments. `season_id` (taken from an earlier response) returns one season; `region` keeps only splits of one region and `league_id` keeps only that league's tournaments, both applied after the fetch. The unfiltered list is large (about 300 KB). A season id that does not exist returns not found.", - "operationId": "lolesports-seasons", - "parameters": [ + "default": "1", + "description": "Year split selector", + "enum": [ + "0", + "1" + ], + "in": "query", + "name": "splitYear", + "type": "string" + }, { - "description": "Language for names and labels; one of cs-CZ, de-DE, en-US, es-ES, es-MX, fr-FR, hu-HU, ja-JP, ko-KR, pl-PL, pt-BR, th-TH, tr-TR, vi-VN, zh-TW; defaults to en-US", + "collectionFormat": "multi", + "description": "MLB team ids", + "in": "query", + "items": { + "enum": [ + "108", + "117", + "133", + "141", + "144", + "158", + "138", + "112", + "109", + "119", + "137", + "114", + "136", + "146", + "121", + "120", + "110", + "135", + "143", + "134", + "140", + "139", + "111", + "113", + "115", + "118", + "116", + "142", + "145", + "147" + ], + "type": "string" + }, + "name": "team[]", + "type": "array" + }, + { + "description": "Inclusive start date (YYYY-MM-DD)", + "in": "query", + "name": "dateStart", + "type": "string" + }, + { + "description": "Inclusive end date (YYYY-MM-DD)", + "in": "query", + "name": "dateEnd", + "type": "string" + }, + { + "description": "First baseman batting hand", "enum": [ - "cs-CZ", - "de-DE", - "en-US", - "es-ES", - "es-MX", - "fr-FR", - "hu-HU", - "ja-JP", - "ko-KR", - "pl-PL", - "pt-BR", - "th-TH", - "tr-TR", - "vi-VN", - "zh-TW" + "L", + "R" ], "in": "query", - "name": "hl", + "name": "fielder_3_hand", "type": "string" }, { - "description": "Numeric season id from an earlier lolesports-seasons response; omit for every season", + "description": "Minimum fielder height", + "enum": [ + "70", + "71", + "72", + "73", + "74", + "75", + "76", + "77", + "78", + "79", + "80" + ], "in": "query", - "name": "season_id", - "type": "string", - "x-example": "115547545029543948" + "name": "min_height_in_inches", + "type": "string" + }, + { + "description": "Field-out flag", + "enum": [ + "0", + "1" + ], + "in": "query", + "name": "is_hit_into_play_field_out", + "type": "string" + }, + { + "collectionFormat": "multi", + "description": "Base occupancy codes", + "in": "query", + "items": { + "enum": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7" + ], + "type": "string" + }, + "name": "runners_on_cd[]", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Throwing position ids", + "in": "query", + "items": { + "enum": [ + "4", + "5", + "6" + ], + "type": "string" + }, + "name": "throw_pos_id[]", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Throw heights", + "in": "query", + "items": { + "enum": [ + "1_Low", + "2_Mid", + "3_High" + ], + "type": "string" + }, + "name": "throw_height_code[]", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Throw outcomes", + "in": "query", + "items": { + "enum": [ + "A. On Target", + "B. Scoop", + "C. Bounce", + "D. Low", + "E. Wide", + "F. High" + ], + "type": "string" + }, + "name": "throw_location_code_full[]", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Time bins", + "in": "query", + "items": { + "enum": [ + "-1", + "0", + "1", + "2", + "3", + "4", + "5" + ], + "type": "string" + }, + "name": "bin_time_X10[]", + "type": "array" }, { - "description": "Split region, case-insensitive; one of AMERICAS, BRAZIL, CHINA, COMMONWEALTH OF INDEPENDENT STATES, EMEA, EUROPE, GLOBAL, HONG KONG, MACAU, TAIWAN, INTERNATIONAL, JAPAN, KOREA, LATIN AMERICA, LATIN AMERICA NORTH, LATIN AMERICA SOUTH, NORTH AMERICA, OCEANIA, REGIONAL, SOUTHEAST ASIA, TURKEY, VIETNAM", + "default": 100, + "description": "Rows per page, 1-500", "in": "query", - "name": "region", - "type": "string", - "x-example": "KOREA" + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" }, { - "description": "Numeric league id from lolesports-leagues; keeps only that league's tournaments", + "description": "Zero-based row offset", "in": "query", - "name": "league_id", - "type": "string", - "x-example": "98767991302996019" + "maximum": 100000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -420502,19 +498440,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/lolesports.SeasonsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/mlb.statcastFirstBaseReceivingDetailsResponseDoc" } }, "400": { @@ -420523,12 +498449,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -420547,177 +498467,157 @@ "ApiKeyAuth": [] } ], - "summary": "League of Legends Esports seasons and splits", + "summary": "Get a player's First Base Receiving play records", "tags": [ - "LoL Esports" + "MLB" ] } }, - "/lolesports/standings": { + "/mlb/statcast-home-runs": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one tournament's stages (for example Regular Season, Playoffs), each with sections of matches and ordered team rankings with win-loss records. Playoff brackets include `previous_match_ids` that link rounds. Use match ids with lolesports-event.", - "operationId": "lolesports-standings", + "description": "Returns Batter or Pitcher Home Runs Tracking rows. Year, team id, minimum home runs, and Standard/Adjusted mode are first-party filters. The first-party table sorts client-side; this endpoint applies a named local sort and pagination. Use mlb_discovery for the exact filter sets. Per-player home-run plays are available from mlb-statcast-home-runs-details; trajectory images, video media, and CSV downloads are separate representations.", + "operationId": "mlb-statcast-home-runs", "parameters": [ { - "description": "Language for names and labels; one of cs-CZ, de-DE, en-US, es-ES, es-MX, fr-FR, hu-HU, ja-JP, ko-KR, pl-PL, pt-BR, th-TH, tr-TR, vi-VN, zh-TW; defaults to en-US", + "default": "Batter", + "description": "Table type", "enum": [ - "cs-CZ", - "de-DE", - "en-US", - "es-ES", - "es-MX", - "fr-FR", - "hu-HU", - "ja-JP", - "ko-KR", - "pl-PL", - "pt-BR", - "th-TH", - "tr-TR", - "vi-VN", - "zh-TW" + "Batter", + "Pitcher" ], "in": "query", - "name": "hl", + "name": "player_type", "type": "string" }, { - "description": "Numeric tournament id from lolesports-tournaments", + "default": "2026", + "description": "Season", + "enum": [ + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" + ], "in": "query", - "name": "tournament_id", - "required": true, - "type": "string", - "x-example": "115548681802226458" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/lolesports.StandingsResponse" - } - }, - "type": "object" - } - ] - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + "name": "year", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "League of Legends Esports standings", - "tags": [ - "LoL Esports" - ] - } - }, - "/lolesports/teams": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns teams with slug, code, status (`active`, `archived`), home league and the roster of players (summoner name, real name, role `top`, `jungle`, `mid`, `bottom`, `support`). Look up one team with `slug` or search with `q`; results are sorted by name and paged. The slug of every team is available from lolesports-standings and lolesports-schedule.", - "operationId": "lolesports-teams", - "parameters": [ + "description": "MLB team id; blank selects all teams", + "enum": [ + "108", + "109", + "110", + "111", + "112", + "113", + "114", + "115", + "116", + "117", + "118", + "119", + "120", + "121", + "133", + "134", + "135", + "136", + "137", + "138", + "139", + "140", + "141", + "142", + "143", + "144", + "145", + "146", + "147", + "158" + ], + "in": "query", + "name": "team", + "type": "string" + }, { - "description": "Language for names and labels; one of cs-CZ, de-DE, en-US, es-ES, es-MX, fr-FR, hu-HU, ja-JP, ko-KR, pl-PL, pt-BR, th-TH, tr-TR, vi-VN, zh-TW; defaults to en-US", + "default": "0", + "description": "Minimum home run total", "enum": [ - "cs-CZ", - "de-DE", - "en-US", - "es-ES", - "es-MX", - "fr-FR", - "hu-HU", - "ja-JP", - "ko-KR", - "pl-PL", - "pt-BR", - "th-TH", - "tr-TR", - "vi-VN", - "zh-TW" + "0", + "5", + "10", + "15", + "20", + "25" ], "in": "query", - "name": "hl", + "name": "min", "type": "string" }, { - "description": "Exact team slug such as t1 or g2-esports; takes precedence over q", + "default": "adj_xhr", + "description": "Trajectory mode", + "enum": [ + "adj_xhr", + "xhr" + ], "in": "query", - "name": "slug", - "type": "string", - "x-example": "t1" + "name": "cat", + "type": "string" }, { - "description": "Case-insensitive substring of team name, code or slug", + "default": "xhr", + "description": "Local sort column", + "enum": [ + "player", + "team", + "year", + "cat", + "avg_hr_trot", + "doubters", + "mostly_gone", + "no_doubters", + "no_doubter_per", + "hr_total", + "xhr", + "xhr_diff" + ], "in": "query", - "name": "q", + "name": "sort", "type": "string" }, { - "description": "Team status filter: active or archived", + "default": "desc", + "description": "Local sort direction", "enum": [ - "active", - "archived" + "asc", + "desc" ], "in": "query", - "name": "status", + "name": "sort_dir", "type": "string" }, { - "description": "1-based page number; defaults to 1", + "default": 100, + "description": "Rows per page (1-500)", "in": "query", + "maximum": 500, "minimum": 1, - "name": "page", + "name": "limit", "type": "integer" }, { - "description": "Page size 1 to 100; defaults to 25", + "default": 0, + "description": "Zero-based row offset", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", + "maximum": 5000, + "minimum": 0, + "name": "offset", "type": "integer" } ], @@ -420728,19 +498628,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/lolesports.TeamsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/mlb.statcastHomeRunsResponseDoc" } }, "400": { @@ -420755,12 +498643,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -420773,50 +498655,81 @@ "ApiKeyAuth": [] } ], - "summary": "League of Legends Esports teams and rosters", + "summary": "Get Baseball Savant Home Runs Tracking", "tags": [ - "LoL Esports" + "MLB" ] } }, - "/lolesports/tournaments": { + "/mlb/statcast-home-runs-details": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a league's tournaments (splits and seasons) with numeric `id`, `slug`, `start_date` and `end_date`, newest first. Use a tournament `id` with lolesports-standings or lolesports-completed-events. An unknown league id returns not found.", - "operationId": "lolesports-tournaments", + "description": "Returns the home-run plays expanded from one batter or pitcher leaderboard row, with event measurements and park outcomes. Provide the exact player id, player type, year, and mode from the row. Play identifiers and source links are returned; trajectory images, video media, and CSV output are not included.", + "operationId": "mlb-statcast-home-runs-details", "parameters": [ { - "description": "Language for names and labels; one of cs-CZ, de-DE, en-US, es-ES, es-MX, fr-FR, hu-HU, ja-JP, ko-KR, pl-PL, pt-BR, th-TH, tr-TR, vi-VN, zh-TW; defaults to en-US", + "description": "Positive MLB player id from mlb-statcast-home-runs", + "in": "query", + "name": "player_id", + "required": true, + "type": "string", + "x-example": "691718" + }, + { + "default": "Batter", + "description": "Table type", "enum": [ - "cs-CZ", - "de-DE", - "en-US", - "es-ES", - "es-MX", - "fr-FR", - "hu-HU", - "ja-JP", - "ko-KR", - "pl-PL", - "pt-BR", - "th-TH", - "tr-TR", - "vi-VN", - "zh-TW" + "Batter", + "Pitcher" ], "in": "query", - "name": "hl", + "name": "player_type", "type": "string" }, { - "description": "Numeric league id from lolesports-leagues", + "default": "2026", + "description": "Season", + "enum": [ + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" + ], "in": "query", - "name": "league_id", - "required": true, - "type": "string", - "x-example": "98767991302996019" + "name": "year", + "type": "string" + }, + { + "default": "adj_xhr", + "description": "Trajectory mode", + "enum": [ + "adj_xhr", + "xhr" + ], + "in": "query", + "name": "cat", + "type": "string" + }, + { + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "default": 0, + "description": "Zero-based row offset", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -420826,19 +498739,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/lolesports.TournamentsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/mlb.statcastHomeRunsDetailsResponseDoc" } }, "400": { @@ -420853,12 +498754,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -420871,34 +498766,132 @@ "ApiKeyAuth": [] } ], - "summary": "League of Legends Esports tournaments", + "summary": "Get Baseball Savant Home Runs play details", "tags": [ - "LoL Esports" + "MLB" ] } }, - "/lululemon/categories": { + "/mlb/statcast-leaders": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns lululemon's own storefront category navigation, flattened out of the site's shared header nav: every navigable category with its display name, breadcrumb path, and the exact category/cdp_hash pair lululemon-category's own parameters expect (read directly from the nav's own URL, not guessed from the display label). section, when given, filters the result to one top-level nav section.", - "operationId": "lululemon-categories", + "description": "Returns the standard anonymous Baseball Savant Statcast leaderboard for batters, pitchers, teams, or pitcher teams. Supports the page's season, team, batter position, minimum batted-ball event, and sortable metric filters, plus local pagination. Use mlb_discovery for exact filter sets. Other Baseball Savant leaderboard pages are listed there but are not represented by this route.", + "operationId": "mlb-statcast", "parameters": [ { - "description": "Filter to one top-level storefront nav section", + "default": "batter", + "description": "Leaderboard row type", "enum": [ - "new-featured", - "women", - "men", - "accessories", - "bags", - "activity", - "we-made-too-much" + "batter", + "pitcher", + "batter-team", + "pitcher-team" ], "in": "query", - "name": "section", + "name": "type", + "type": "string" + }, + { + "description": "Season; current season back 11 seasons", + "in": "query", + "name": "year", + "type": "integer" + }, + { + "description": "Optional MLB team id from mlb_teams", + "in": "query", + "name": "team_id", + "type": "string" + }, + { + "description": "Batter position", + "enum": [ + "C", + "1B", + "2B", + "SS", + "3B", + "LF", + "CF", + "RF", + "DH" + ], + "in": "query", + "name": "position", + "type": "string" + }, + { + "default": "q", + "description": "Minimum batted-ball event threshold", + "enum": [ + "q", + "1", + "25", + "50", + "100", + "150", + "200", + "250", + "350", + "450", + "500", + "600" + ], + "in": "query", + "name": "min_bbe", + "type": "string" + }, + { + "default": "barrels_per_pa", + "description": "Sort field", + "enum": [ + "entity_name", + "bip", + "launch_angle_avg", + "sweet_spot_percent", + "exit_velocity_max", + "exit_velocity_avg", + "avg_best_speed", + "exit_velocity_fbld", + "distance_max", + "distance_hr_avg", + "hard_hit_ct", + "hard_hit_percent", + "hard_hit_per_swing", + "barrel_ct", + "barrels_per_bip", + "barrels_per_pa" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": "desc", + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", "type": "string" + }, + { + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "description": "Zero-based row offset", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -420908,7 +498901,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/lululemon.categoriesResponseDoc" + "$ref": "#/definitions/mlb.statcastResponseDoc" } }, "400": { @@ -420917,12 +498910,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -420935,49 +498922,165 @@ "ApiKeyAuth": [] } ], - "summary": "Browse lululemon's storefront category navigation", + "summary": "Get Baseball Savant Statcast leaderboard data", "tags": [ - "Lululemon" + "MLB" ] } }, - "/lululemon/category": { + "/mlb/statcast-oaa": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one lululemon category's product listing page: products with pricing, sale detection, sizes, colors, and style numbers. category and cdp_hash are the two path segments of a lululemon category URL (https://shop.lululemon.com/c/{category}/{cdp_hash}), e.g. women-new-styles and n14f1wz6o10 -- both are also available from lululemon-categories's own category and cdp_hash fields. Pagination is page-based and real: requesting a page beyond the category's real last page returns a normal response with an empty products array rather than an error. An unrecognized category/cdp_hash pair returns 404.", - "operationId": "lululemon-category", + "description": "Returns the separate Outs Above Average leaderboard for fielders, fielding teams, batters, batting teams, or pitchers. Supports season range, split years, team, monthly range, attempts, position, detailed fielder roles, local sorting, and pagination.", + "operationId": "mlb-statcast-oaa", "parameters": [ { - "description": "lululemon category slug, from a category URL's first path segment", + "default": "Fielder", + "description": "Leaderboard view", + "enum": [ + "Fielder", + "Fielding_Team", + "Batter", + "Batting_Team", + "Pitcher" + ], "in": "query", - "name": "category", - "required": true, - "type": "string", - "x-example": "women-new-styles" + "name": "type", + "type": "string" }, { - "description": "lululemon category id, from a category URL's second path segment", + "description": "Start season from 2016 through the current season", "in": "query", - "name": "cdp_hash", - "required": true, - "type": "string", - "x-example": "n14f1wz6o10" + "name": "start_year", + "type": "integer" }, { - "description": "Page number, one-based, defaults to 1", + "description": "End season from 2016 through the current season", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "end_year", + "type": "integer" }, { - "description": "Results per page, 1 to 100, defaults to 24", + "default": "no", + "description": "Return one row per season in a year range", + "enum": [ + "no", + "yes" + ], "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 24 + "name": "split", + "type": "string" + }, + { + "description": "Optional MLB team id from mlb_teams", + "in": "query", + "name": "team_id", + "type": "string" + }, + { + "default": "year", + "description": "Time range", + "enum": [ + "year", + "4", + "5", + "6", + "7", + "8", + "9" + ], + "in": "query", + "name": "range", + "type": "string" + }, + { + "default": "q", + "description": "Minimum attempts", + "enum": [ + "q", + "10", + "25", + "50", + "75", + "100", + "150", + "200", + "250" + ], + "in": "query", + "name": "minimum", + "type": "string" + }, + { + "description": "Position filter", + "enum": [ + "if", + "of", + "3", + "4", + "5", + "6", + "7", + "8", + "9" + ], + "in": "query", + "name": "position", + "type": "string" + }, + { + "description": "Comma-separated detailed fielder role ids. Values: 32,30,31,77,71,70,72,78,43,42,40,41,46,87,81,82,89,64,62,60,61,98,91,90,92,99,51,50,52", + "in": "query", + "name": "roles", + "type": "string" + }, + { + "default": "outs_above_average", + "description": "Sort field", + "enum": [ + "entity_name", + "display_team_name", + "primary_pos_formatted", + "fielding_runs_prevented", + "outs_above_average", + "outs_above_average_infront", + "outs_above_average_lateral", + "outs_above_average_behind", + "actual_success_rate", + "adj_estimated_success_rate", + "diff_success_rate", + "n" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": "desc", + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", + "type": "string" + }, + { + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "description": "Zero-based row offset", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -420987,7 +499090,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/lululemon.categoryResponseDoc" + "$ref": "#/definitions/mlb.statcastBoardResponseDoc" } }, "400": { @@ -420996,18 +499099,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -421020,35 +499111,139 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a lululemon category's product listing", + "summary": "Get Baseball Savant Outs Above Average", "tags": [ - "Lululemon" + "MLB" ] } }, - "/lululemon/outfit": { + "/mlb/statcast-park-factors": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns lululemon's own curated outfit/style recommendations for one product color: every complementary item in each styled look, plus the anchor product itself. unified_id and color_code are lululemon-product's own unified_id response field and a color's code field (from lululemon-product's colors[] or lululemon-category's style_numbers-paired colors[]) -- not lululemon-product's own product_id, which is a different id space. Recommended items' own id is a separate, third-party catalog id (not lululemon-product's product_id) -- use each item's url to reach its product page. An unrecognized unified_id/color_code pair returns 404.", - "operationId": "lululemon-outfit", + "description": "Returns season, venue, distance, distance-all, raw, or dimensions rows from Baseball Savant. Query filters are conditional on type and are live-echo validated; local sorting and pagination are applied to returned rows. The fence-stat and allDiffs controls only change display columns and do not change row data; CSV and linked venue detail pages are separate surfaces.", + "operationId": "mlb-statcast-park-factors", "parameters": [ { - "description": "lululemon product unified id, from a lululemon-product result's unified_id field", + "default": "year", + "description": "Park Factors table mode", + "enum": [ + "year", + "venue", + "distance", + "distance-all", + "raw", + "dimensions" + ], "in": "query", - "name": "unified_id", - "required": true, - "type": "string", - "x-example": "Scuba-Relaxed-Half-Zip-Colourblock" + "name": "type", + "type": "string" }, { - "description": "lululemon color code, from a lululemon-product result's colors[].code field", + "description": "Mode-specific season; see endpoint markdown and mlb_discovery for exact values", "in": "query", - "name": "color_code", - "required": true, - "type": "string", - "x-example": "79895" + "name": "year", + "type": "string" + }, + { + "description": "Optional batter side for year, venue, or raw mode", + "enum": [ + "R", + "L" + ], + "in": "query", + "name": "bat_side", + "type": "string" + }, + { + "description": "Park condition for year and venue modes", + "enum": [ + "All", + "Day", + "Night", + "Roof Closed", + "Open Air" + ], + "in": "query", + "name": "condition", + "type": "string" + }, + { + "default": "3", + "description": "Rolling year count for year and venue modes", + "enum": [ + "1", + "2", + "3" + ], + "in": "query", + "name": "rolling", + "type": "string" + }, + { + "description": "Venue mode metric", + "enum": [ + "index_wOBA", + "index_wOBAcon", + "index_xwOBAcon", + "index_BACON", + "index_xBAcon", + "index_hardhit", + "index_runs", + "index_OBP", + "index_Hits", + "index_1B", + "index_2B", + "index_3B", + "index_HR", + "index_BB", + "index_SO" + ], + "in": "query", + "name": "stat", + "type": "string" + }, + { + "description": "Park population selector", + "enum": [ + "mlb", + "all" + ], + "in": "query", + "name": "parks", + "type": "string" + }, + { + "description": "Local row field present in the selected mode's data", + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Local sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", + "type": "string" + }, + { + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "default": 0, + "description": "Zero-based row offset", + "in": "query", + "maximum": 10000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -421058,7 +499253,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/lululemon.outfitResponseDoc" + "$ref": "#/definitions/mlb.statcastParkFactorsResponseDoc" } }, "400": { @@ -421073,12 +499268,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -421091,27 +499280,131 @@ "ApiKeyAuth": [] } ], - "summary": "Get lululemon's outfit/style recommendations for a product color", + "summary": "Get Baseball Savant Statcast Park Factors rows", "tags": [ - "Lululemon" + "MLB" ] } }, - "/lululemon/product/{product_id}": { + "/mlb/statcast-percentile": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one lululemon product's full detail: every purchasable color/size SKU with its own price, sale status, and live availability, plus an aggregate rating and real customer reviews when the product has any -- none of which lululemon-category exposes (it only carries one representative color/price per product). product_id is the id from a lululemon-category result's id field or a lululemon product URL's trailing path segment (https://shop.lululemon.com/p/{slug}/{product_id}) -- the slug itself is not needed. An unrecognized product_id returns 404.", - "operationId": "lululemon-product", + "description": "Returns batter or pitcher percentile rankings. Type, season, and team are first-party table filters. Repeated pctl filters, table sorting, and pagination are applied locally to the embedded rows. Use mlb_discovery for exact type-specific fields, comparators, seasons, and team ids. CSV is a separate download.", + "operationId": "mlb-statcast-percentile", "parameters": [ { - "description": "lululemon product id, from a lululemon-category result's id field", - "in": "path", - "name": "product_id", - "required": true, - "type": "string", - "x-example": "lt5o6p8kho" + "default": "batter", + "description": "Table type", + "enum": [ + "batter", + "pitcher" + ], + "in": "query", + "name": "type", + "type": "string" + }, + { + "default": "2026", + "description": "Season", + "enum": [ + "2015", + "2016", + "2017", + "2018", + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" + ], + "in": "query", + "name": "year", + "type": "string" + }, + { + "description": "MLB team id; blank selects all teams", + "enum": [ + "108", + "109", + "110", + "111", + "112", + "113", + "114", + "115", + "116", + "117", + "118", + "119", + "120", + "121", + "133", + "134", + "135", + "136", + "137", + "138", + "139", + "140", + "141", + "142", + "143", + "144", + "145", + "146", + "147", + "158" + ], + "in": "query", + "name": "team", + "type": "string" + }, + { + "collectionFormat": "multi", + "description": "Repeated field-comparator-value filter from the type-specific field set in mlb_discovery; value range 0-100", + "in": "query", + "items": { + "type": "string" + }, + "name": "pctl", + "type": "array" + }, + { + "description": "Local sort field from the type-specific set in mlb_discovery", + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": "desc", + "description": "Local sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", + "type": "string" + }, + { + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "default": 0, + "description": "Zero-based row offset", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -421121,7 +499414,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/lululemon.productDetailResponseDoc" + "$ref": "#/definitions/mlb.statcastPercentileResponseDoc" } }, "400": { @@ -421136,12 +499429,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -421154,108 +499441,166 @@ "ApiKeyAuth": [] } ], - "summary": "Get a lululemon product's full detail", + "summary": "Get Baseball Savant Percentile Rankings", "tags": [ - "Lululemon" + "MLB" ] } }, - "/lululemon/stores": { + "/mlb/statcast-pitch-arsenal": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns lululemon's own complete physical store directory (480 US and 86 Canada locations), including regular weekly hours and in-store amenities. All filters are optional and applied to the full directory. country and state are free-text equality filters against the values this directory actually carries (2-letter codes, e.g. US/CA, NY/CA), not an enforced enum. lat and lng (both required together) filter to stores within radius_miles (1 to 500, defaults to 50), sorted nearest-first.", - "operationId": "lululemon-stores", + "description": "Returns pitcher or batter pitch-level arsenal leaderboards. Season, team, pitch type, minimum PA, and minimum-pitch qualification filters are replayed against the anonymous first-party table; sorting and pagination are applied locally. Use mlb_discovery for the full selector set. Player rows can be expanded with mlb-statcast-pitch-arsenal-details.", + "operationId": "mlb-statcast-pitch-arsenal", "parameters": [ { - "description": "Filter to one country by its 2-letter code", + "default": "pitcher", + "description": "Row type", + "enum": [ + "pitcher", + "batter" + ], "in": "query", - "name": "country", - "type": "string", - "x-example": "US" + "name": "type", + "type": "string" }, { - "description": "Filter to one state/province by its 2-letter code", + "default": "2026", + "description": "Season", + "enum": [ + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" + ], "in": "query", - "name": "state", - "type": "string", - "x-example": "NY" + "name": "year", + "type": "string" }, { - "description": "Latitude, requires lng", + "description": "MLB team id from mlb_teams", "in": "query", - "name": "lat", - "type": "number", - "x-example": 40.7538 + "name": "team_id", + "type": "string" }, { - "description": "Longitude, requires lat", + "description": "Pitch code; blank means all pitch types", + "enum": [ + "FF", + "CH", + "CU", + "FC", + "KN", + "SC", + "SI", + "SL", + "SV", + "FS", + "ST", + "CUKC", + "SIFT" + ], "in": "query", - "name": "lng", - "type": "number", - "x-example": -74.0022 + "name": "pitch_type", + "type": "string" }, { - "description": "Search radius in miles, 1 to 500, defaults to 50", + "default": "1", + "description": "Minimum plate appearances", + "enum": [ + "1", + "10", + "25", + "50", + "100", + "150", + "200", + "250", + "350", + "450", + "500", + "600" + ], "in": "query", - "name": "radius_miles", - "type": "number", - "x-example": 50 - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/lululemon.storesResponseDoc" - } + "name": "min_pa", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "q", + "description": "Minimum pitches; q means qualified", + "enum": [ + "q", + "1", + "10", + "50", + "100", + "200", + "300", + "500", + "750" + ], + "in": "query", + "name": "min_pitches", + "type": "string" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "run_value_per_100", + "description": "Local sort field", + "enum": [ + "player_name", + "team_name_alt", + "pitch_name", + "run_value_per_100", + "run_value", + "pitches", + "pitch_usage", + "pa", + "ba", + "slg", + "woba", + "whiff_percent", + "k_percent", + "put_away", + "est_ba", + "est_slg", + "est_woba", + "hard_hit_percent" + ], + "in": "query", + "name": "sort", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Browse lululemon's physical store directory", - "tags": [ - "Lululemon" - ] - } - }, - "/macrumors/article": { - "get": { - "description": "Returns a MacRumors article by `url`: a dated news post, or a `/guide/`, `/how-to/` or `/review/` page. The response has the title, description, section, authors, lead image, publish time, `updated_at` and body `paragraphs`. Roundup, author and forum URLs are rejected. Reviews have no `updated_at`, and `paywalled` is omitted.", - "operationId": "macrumors-article", - "parameters": [ + "default": "desc", + "description": "Local sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", + "type": "string" + }, { - "description": "Canonical MacRumors article URL", + "default": 100, + "description": "Rows per page (1-500)", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.macrumors.com/2026/09/24/google-photos-wardrobe-ios/" + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "default": 0, + "description": "Zero-based row offset", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -421265,7 +499610,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/mlb.statcastPitchArsenalResponseDoc" } }, "400": { @@ -421292,30 +499637,93 @@ "ApiKeyAuth": [] } ], - "summary": "Get MacRumors article content", + "summary": "Get Baseball Savant Pitch Arsenal Stats", "tags": [ - "MacRumors" + "MLB" ] } }, - "/macrumors/author": { + "/mlb/statcast-pitch-arsenal-details": { "get": { - "description": "Returns a MacRumors author profile, identified by `slug` (such as `juli-clover`) or a canonical `macrumors.com/author/` `url`; provide exactly one. The response has the name, `bio`, `image_url` and about 20 recent articles with title, URL, publication time and, when shown, summary and image. Unknown authors return not found.", - "operationId": "macrumors-author", + "description": "Returns game-level pitches expanded from one batter or pitcher pitch-arsenal row. Supply player_id, player_type, year, and the row's pitch_type. The upstream's min_ab request parameter is ignored, so it is not exposed. Rows include play_id values used by Baseball Savant's video pages; this endpoint returns play data and identifiers, not video media.", + "operationId": "mlb-statcast-pitch-arsenal-details", "parameters": [ { - "description": "Author slug, e.g. juli-clover", + "description": "Positive MLB player id from mlb-statcast-pitch-arsenal", "in": "query", - "name": "slug", + "name": "player_id", + "required": true, "type": "string", - "x-example": "juli-clover" + "x-example": "592332" }, { - "description": "Canonical macrumors.com/author/ URL; alternative to slug", + "default": "pitcher", + "description": "Row type", + "enum": [ + "pitcher", + "batter" + ], "in": "query", - "name": "url", + "name": "player_type", + "type": "string" + }, + { + "description": "Pitch type from the selected row", + "enum": [ + "FF", + "CH", + "CU", + "FC", + "KN", + "SC", + "SI", + "SL", + "SV", + "FS", + "ST", + "CUKC", + "SIFT" + ], + "in": "query", + "name": "pitch_type", + "required": true, "type": "string", - "x-example": "https://www.macrumors.com/author/juli-clover/" + "x-example": "FF" + }, + { + "default": "2026", + "description": "Season", + "enum": [ + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" + ], + "in": "query", + "name": "year", + "type": "string" + }, + { + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "default": 0, + "description": "Zero-based row offset", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -421325,7 +499733,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.macRumorsAuthorResponseDoc" + "$ref": "#/definitions/mlb.statcastPitchArsenalDetailsResponseDoc" } }, "400": { @@ -421352,203 +499760,171 @@ "ApiKeyAuth": [] } ], - "summary": "Get a MacRumors author profile", + "summary": "Get Baseball Savant Pitch Arsenal play details", "tags": [ - "MacRumors" + "MLB" ] } }, - "/macrumors/headlines": { + "/mlb/statcast-pitch-arsenals": { "get": { - "description": "Returns the newest 20 MacRumors entries for one section. `section` is required and takes `front-page`, `guides`, `how-to` or `reviews`; other values return an invalid-params error. Each item has its title, URL, author, publication time and short summary. Items from `guides`, `how-to` and `reviews` also carry a thumbnail `image_url`.", - "operationId": "macrumors-headlines", + "description": "Returns pitcher pitch speed, percentage, or spin rankings by pitch class. Year, minimum-pitch threshold, and hand are first-party filters. Team filtering and table sorting are applied locally because the page JavaScript applies them after receiving the embedded rows. Use mlb_discovery for exact values. CSV and pitch movement visualizations remain separate representations.", + "operationId": "mlb-statcast-pitch-arsenals", "parameters": [ { - "description": "MacRumors section slug", + "default": "2026", + "description": "Season", "enum": [ - "front-page", - "guides", - "how-to", - "reviews" + "2008", + "2009", + "2010", + "2011", + "2012", + "2013", + "2014", + "2015", + "2016", + "2017", + "2018", + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" ], "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "front-page" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + "name": "year", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get MacRumors section headlines", - "tags": [ - "MacRumors" - ] - } - }, - "/macrumors/news": { - "get": { - "description": "Returns the latest 20 stories across MacRumors, with no parameters. Each item has its title, canonical article URL, author, publication time and a plain-text summary of about 300 characters. Items carry no lead image.", - "operationId": "macrumors-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } + "default": "avg_speed", + "description": "Metric", + "enum": [ + "avg_speed", + "n_", + "avg_spin" + ], + "in": "query", + "name": "type", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get MacRumors top stories", - "tags": [ - "MacRumors" - ] - } - }, - "/macrumors/sections": { - "get": { - "description": "Lists the four MacRumors sections accepted by `macrumors-headlines`: `front-page` (all stories mixed), `guides`, `how-to` and `reviews`. Each entry has a `slug`, display `name` and `url`. Roundups, the Buyer's Guide and the forums are not sections.", - "operationId": "macrumors-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get MacRumors sections", - "tags": [ - "MacRumors" - ] - } - }, - "/macys/product/reviews": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of a Macy's product's customer reviews, plus a site-wide rating summary (rating count, average rating, recommended ratio, rating histogram) for the product. product_id is a numeric id, the same one used by GET /macys/product/{productId}. A product with zero reviews, or a well-formed but unrecognized product_id, returns a normal, empty result rather than an error.", - "operationId": "macys-product-reviews", - "parameters": [ + "description": "Throwing hand; omit for all pitchers", + "enum": [ + "R", + "L" + ], + "in": "query", + "name": "hand", + "type": "string" + }, { - "description": "Numeric Macy's product id, from a product page's ?ID= query parameter", + "default": "q", + "description": "Minimum pitches", + "enum": [ + "q", + "100", + "250", + "500", + "750", + "1000", + "1500", + "2000", + "2500", + "3000" + ], "in": "query", - "name": "product_id", - "required": true, - "type": "string", - "x-example": "15041387" + "name": "min_pitches", + "type": "string" }, { - "description": "Result page, 1-based, defaults to 1", + "description": "Current MLB team abbreviation; applied locally", + "enum": [ + "ATH", + "ATL", + "AZ", + "BAL", + "BOS", + "CHC", + "CIN", + "CLE", + "COL", + "CWS", + "DET", + "HOU", + "KC", + "LAA", + "LAD", + "MIA", + "MIL", + "MIN", + "NYM", + "NYY", + "PHI", + "PIT", + "SD", + "SEA", + "SF", + "STL", + "TB", + "TEX", + "TOR", + "WSH" + ], "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/macys.productReviewsResponseDoc" - } + "name": "team", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "four_seam", + "description": "Local sort column", + "enum": [ + "player_name", + "four_seam", + "sinker", + "cutter", + "slider", + "changeup", + "curve", + "splitter", + "sweeper", + "slurve" + ], + "in": "query", + "name": "sort", + "type": "string" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "desc", + "description": "Local sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get a Macy's product's customer reviews", - "tags": [ - "Macy's" - ] - } - }, - "/macys/product/{productId}": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Macy's product's full detail: name, brand, description, department/division, category breadcrumb, pricing (with sale detection), availability, images, aggregate rating, and every purchasable color variant with its own price. productId is a numeric id, taken from a Macy's product page's ?ID= query parameter.", - "operationId": "macys-product", - "parameters": [ + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, { - "description": "Numeric Macy's product id, from a product page's ?ID= query parameter", - "in": "path", - "name": "productId", - "required": true, - "type": "string", - "x-example": "20518101" + "default": 0, + "description": "Zero-based row offset", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -421558,7 +499934,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/macys.productDetailResponseDoc" + "$ref": "#/definitions/mlb.statcastPitchArsenalsResponseDoc" } }, "400": { @@ -421573,12 +499949,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -421591,81 +499961,138 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Macy's product's full detail", + "summary": "Get Baseball Savant Pitch Arsenals", "tags": [ - "Macy's" + "MLB" ] } }, - "/macys/suggest": { + "/mlb/statcast-pitch-movement": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Macy's own search-box suggestions (typeahead) for a partial query: a flat list of suggested search phrases, no product data. A partial query with no real matches returns a normal, empty result rather than an error.", - "operationId": "macys-suggest", + "description": "Returns pitcher-level pitch movement table rows for the selected season, pitch type, throwing hand, and minimum pitch count. Sorting and pagination are applied locally. The page's X/Z visualization axes and CSV download are separate presentation formats and are not returned by this JSON table contract.", + "operationId": "mlb-statcast-pitch-movement", "parameters": [ { - "description": "Partial search query", + "default": "2026", + "description": "Season", + "enum": [ + "2026", + "2025", + "2024", + "2023", + "2022", + "2021", + "2020", + "2019", + "2018", + "2017" + ], "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "dress" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/macys.suggestResponseDoc" - } + "name": "year", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": "FF", + "description": "Pitch class", + "enum": [ + "FF", + "CH", + "CU", + "FC", + "FO", + "KN", + "SC", + "SI", + "SL", + "SV", + "FS", + "ST", + "ALL" + ], + "in": "query", + "name": "pitch_type", + "type": "string" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Pitcher throwing hand; omit for both", + "enum": [ + "R", + "L" + ], + "in": "query", + "name": "hand", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get Macy's search-box suggestions", - "tags": [ - "Macy's" - ] - } - }, - "/makeuseof/article": { - "get": { - "description": "Returns a MakeUseOf article by `url`, a canonical HTTPS article link. The response has the title, description, section, authors, lead image, publish and update times, the article body as `paragraphs`, and a `paywalled` flag. Section, author, tag, utility and video pages are not article URLs.", - "operationId": "makeuseof-article", - "parameters": [ + "default": "q", + "description": "Minimum pitch count", + "enum": [ + "q", + "50", + "100", + "250", + "500", + "750", + "1000", + "1500", + "2000", + "2500", + "3000" + ], + "in": "query", + "name": "min", + "type": "string" + }, { - "description": "Canonical MakeUseOf article URL", + "default": "pitcher_break_z", + "description": "Local table sort field", + "enum": [ + "pitcher_name", + "team_name_abbrev", + "pitch_hand", + "pitch_type_name", + "pitches_thrown", + "avg_speed", + "pitcher_break_z", + "diff_z", + "pitcher_break_x_hidden", + "diff_x", + "pitcher_break_z_induced", + "diff_z_induced_standard", + "diff_x_standard" + ], "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.makeuseof.com/these-websites-replace-one-off-utility-apps/" + "name": "sort", + "type": "string" + }, + { + "default": "desc", + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", + "type": "string" + }, + { + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "default": 0, + "description": "Zero-based row offset", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -421675,7 +500102,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/mlb.statcastPitchMovementResponseDoc" } }, "400": { @@ -421702,24 +500129,228 @@ "ApiKeyAuth": [] } ], - "summary": "Get MakeUseOf article content", + "summary": "Get Baseball Savant Pitch Movement rows", "tags": [ - "MakeUseOf" + "MLB" ] } }, - "/makeuseof/author": { + "/mlb/statcast-pitch-tempo": { "get": { - "description": "Returns an author's public byline metadata, biography, social links, and recent stories from a canonical author URL. Only the first page is covered.", - "operationId": "makeuseof-author", + "description": "Returns pitcher, batter, pitching-team, batting-team, or league tempo rows. Season, game type, minimum pitch, team, year comparison, and team membership options mirror the live first-party controls; q and sorting are applied locally before pagination. Use mlb_discovery for exact value sets.", + "operationId": "mlb-statcast-pitch-tempo", "parameters": [ { - "description": "Canonical MakeUseOf author URL", + "default": "Pit", + "description": "Table group", + "enum": [ + "Pit", + "Bat", + "Pitching Team", + "Batting Team", + "League" + ], "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.makeuseof.com/author/oluwademilade-afolabi/" + "name": "type", + "type": "string" + }, + { + "default": "2026", + "description": "First season", + "enum": [ + "2010", + "2011", + "2012", + "2013", + "2014", + "2015", + "2016", + "2017", + "2018", + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" + ], + "in": "query", + "name": "season_start", + "type": "string" + }, + { + "default": "season_start", + "description": "Last season; must be >= season_start", + "enum": [ + "2010", + "2011", + "2012", + "2013", + "2014", + "2015", + "2016", + "2017", + "2018", + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" + ], + "in": "query", + "name": "season_end", + "type": "string" + }, + { + "default": "Regular", + "description": "Game type", + "enum": [ + "Regular", + "Playoff", + "All" + ], + "in": "query", + "name": "game_type", + "type": "string" + }, + { + "default": "q", + "description": "Minimum pitch count", + "enum": [ + "q", + "1", + "10", + "50", + "100", + "250", + "500", + "1000", + "2000", + "5000" + ], + "in": "query", + "name": "n", + "type": "string" + }, + { + "description": "Optional MLB team id", + "enum": [ + "108", + "109", + "110", + "111", + "112", + "113", + "114", + "115", + "116", + "117", + "118", + "119", + "120", + "121", + "133", + "134", + "135", + "136", + "137", + "138", + "139", + "140", + "141", + "142", + "143", + "144", + "145", + "146", + "147", + "158" + ], + "in": "query", + "name": "team", + "type": "string" + }, + { + "default": "no", + "description": "Compare seasons separately", + "enum": [ + "yes", + "no" + ], + "in": "query", + "name": "split", + "type": "string" + }, + { + "description": "Team membership mode; requires team", + "enum": [ + "0", + "1" + ], + "in": "query", + "name": "with_team_only", + "type": "string" + }, + { + "description": "Case-insensitive local entity-name filter", + "in": "query", + "name": "q", + "type": "string" + }, + { + "default": "median_seconds_empty", + "description": "Local sort field", + "enum": [ + "entity_name", + "start_year", + "tot_n_empty", + "median_seconds_empty", + "empty_equiv", + "freq_hot_empty", + "freq_cold_empty", + "tot_n_onbase", + "median_seconds_onbase", + "onbase_equiv", + "freq_hot_onbase", + "freq_cold_onbase" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": "asc", + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", + "type": "string" + }, + { + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "default": 0, + "description": "Zero-based row offset", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -421729,7 +500360,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.makeuseofAuthorResponseDoc" + "$ref": "#/definitions/mlb.statcastPitchTempoResponseDoc" } }, "400": { @@ -421756,40 +500387,99 @@ "ApiKeyAuth": [] } ], - "summary": "Get a MakeUseOf author profile", + "summary": "Get Baseball Savant Pitch Tempo rows", "tags": [ - "MakeUseOf" + "MLB" ] } }, - "/makeuseof/headlines": { + "/mlb/statcast-pitch-tempo-player": { "get": { - "description": "Returns current MakeUseOf headlines for one category. `section` is required and takes one of 14 slugs such as `windows`, `linux`, `google-android`, `security`, `smart-home` or `news`; tag archives are not accepted. Each item has its title, URL, summary, author, publication time and image.", - "operationId": "makeuseof-headlines", + "description": "Returns game-level Pitch Tempo detail rows for one pitcher or batter. `entity_id` is required, taken from a Pitch Tempo result. `type` is `Pit` (default) or `Bat`, `season_start` and `season_end` run from 2010 to 2026 and default to the current year, and `game_type` is `Regular` (default), `Playoff` or `All`. Rows hold elapsed seconds, counts and frequencies; empty when nothing matches.", + "operationId": "mlb-statcast-pitch-tempo-player", "parameters": [ { - "description": "MakeUseOf section slug", - "enum": [ - "windows", - "linux", - "google-android", - "apple", - "technology-explained", - "networking", - "security", - "productivity", - "creative", - "entertainment", - "streaming", - "smart-home", - "home", - "news" - ], + "description": "Numeric entity id from a Pitch Tempo row", "in": "query", - "name": "section", + "name": "entity_id", "required": true, "type": "string", - "x-example": "windows" + "x-example": "608718" + }, + { + "default": "Pit", + "description": "Entity type", + "enum": [ + "Pit", + "Bat" + ], + "in": "query", + "name": "type", + "type": "string" + }, + { + "default": "2026", + "description": "First season", + "enum": [ + "2010", + "2011", + "2012", + "2013", + "2014", + "2015", + "2016", + "2017", + "2018", + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" + ], + "in": "query", + "name": "season_start", + "type": "string" + }, + { + "default": "season_start", + "description": "Last season; must be >= season_start", + "enum": [ + "2010", + "2011", + "2012", + "2013", + "2014", + "2015", + "2016", + "2017", + "2018", + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" + ], + "in": "query", + "name": "season_end", + "type": "string" + }, + { + "default": "Regular", + "description": "Game type", + "enum": [ + "Regular", + "Playoff", + "All" + ], + "in": "query", + "name": "game_type", + "type": "string" } ], "produces": [ @@ -421799,7 +500489,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/mlb.statcastPitchTempoPlayerResponseDoc" } }, "400": { @@ -421808,8 +500498,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -421826,16 +500516,143 @@ "ApiKeyAuth": [] } ], - "summary": "Get MakeUseOf section headlines", + "summary": "Get a player's Pitch Tempo detail rows", "tags": [ - "MakeUseOf" + "MLB" ] } }, - "/makeuseof/news": { + "/mlb/statcast-pitch-timer": { "get": { - "description": "Returns MakeUseOf's current top stories, with no parameters. Each item has its title, canonical article URL, short summary, publication time, and author and image when available.", - "operationId": "makeuseof-news", + "description": "Returns the Pitch Timer Infractions table for pitchers, batters, catchers, teams, or opposing teams. Filters for type, season, minimum pitches, and zero-infraction rows are upstream-backed; entity search, table sorting, and pagination are applied locally. The chart ordering is included as view metadata; the endpoint returns table rows, not the SVG chart.", + "operationId": "mlb-statcast-pitch-timer", + "parameters": [ + { + "default": "Team", + "description": "Entity group", + "enum": [ + "Pit", + "Bat", + "Cat", + "Team", + "Opp" + ], + "in": "query", + "name": "type", + "type": "string" + }, + { + "default": "2026", + "description": "Season", + "enum": [ + "2023", + "2024", + "2025", + "2026" + ], + "in": "query", + "name": "season", + "type": "string" + }, + { + "default": "1", + "description": "Minimum pitches", + "enum": [ + "1", + "5", + "25", + "50", + "100", + "250", + "500", + "1000" + ], + "in": "query", + "name": "min_pitches", + "type": "string" + }, + { + "default": "0", + "description": "Include entities without infractions", + "enum": [ + "0", + "1" + ], + "in": "query", + "name": "include_zeroes", + "type": "string" + }, + { + "description": "Local case-insensitive entity-name substring filter", + "in": "query", + "name": "q", + "type": "string" + }, + { + "default": "violating", + "description": "Chart ordering metadata", + "enum": [ + "violating", + "violated", + "net", + "ballsAgainst", + "ballsFor", + "strikesAgainst", + "strikesFor", + "division" + ], + "in": "query", + "name": "chart_sort", + "type": "string" + }, + { + "default": "N_time_violations", + "description": "Local table sort field", + "enum": [ + "entity_name", + "N_pitches", + "N_time_violations", + "N_pitcher_pitch_timer", + "N_batter_pitch_timer", + "N_batter_timeout", + "N_catcher_pitch_timer", + "N_defensive_shift", + "rate" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": "desc", + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", + "type": "string" + }, + { + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "default": 0, + "description": "Zero-based row offset", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -421843,11 +500660,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/mlb.statcastPitchTimerResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -421864,16 +500687,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get MakeUseOf top stories", + "summary": "Get Baseball Savant Pitch Timer infraction rows", "tags": [ - "MakeUseOf" + "MLB" ] } }, - "/makeuseof/sections": { + "/mlb/statcast-player-details": { "get": { - "description": "Lists the 14 MakeUseOf sections accepted by `makeuseof-headlines`, including `windows`, `linux`, `apple`, `networking`, `productivity`, `streaming` and `news`. Each entry has a `slug`, display `name` and `url`. Open-ended tag archives are not sections.", - "operationId": "makeuseof-sections", + "description": "Returns the game-level pitch or batted-ball rows shown when expanding a batter or pitcher row in the standard Statcast leaderboard, including matchup, date, event, exit velocity, launch angle, distance, play id, and video availability.", + "operationId": "mlb-statcast-player-details", + "parameters": [ + { + "description": "Positive MLB player id from a batter or pitcher row", + "in": "query", + "name": "player_id", + "required": true, + "type": "string", + "x-example": "650333" + }, + { + "default": "batter", + "description": "Player row type", + "enum": [ + "batter", + "pitcher" + ], + "in": "query", + "name": "player_type", + "type": "string" + }, + { + "description": "Season from 2015 through the current season", + "in": "query", + "name": "year", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -421881,11 +500731,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/mlb.statcastPlayerDetailsResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -421902,24 +500752,70 @@ "ApiKeyAuth": [] } ], - "summary": "Get MakeUseOf RSS sections", + "summary": "Get expanded standard Baseball Savant Statcast player plays", "tags": [ - "MakeUseOf" + "MLB" ] } }, - "/malaymail/article": { + "/mlb/statcast-rolling": { "get": { - "description": "Returns a Malay Mail article by `url`, an absolute canonical link in the dated form `/news/
/////`. The response has the title, description, section, authors, lead image, publish and update times, body `paragraphs` and a `paywalled` flag.", - "operationId": "malaymail-article", + "description": "Returns the six embedded Batter/Pitcher rolling-window tables, filtered by metric, role, and plate-appearance window. Each group is sorted by the selected metric delta in the same direction as the first-party page and paginated independently. The upstream page has no season, team, or game-type filters.", + "operationId": "mlb-statcast-rolling", "parameters": [ { - "description": "Canonical Malay Mail article URL", + "default": "xwoba", + "description": "Displayed metric", + "enum": [ + "xwoba", + "woba", + "ba", + "xba", + "slg", + "xslg" + ], "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.malaymail.com/news/malaysia/2026/10/04/sabah-gives-more-than-500-adults-second-chance-to-learn-reading-writing-counting/237637" + "name": "metric", + "type": "string" + }, + { + "description": "Optional player role; omit for both", + "enum": [ + "Batter", + "Pitcher" + ], + "in": "query", + "name": "role", + "type": "string" + }, + { + "description": "Optional rolling plate-appearance window; omit for all", + "enum": [ + "50", + "100", + "250" + ], + "in": "query", + "name": "window_pa", + "type": "string" + }, + { + "default": 100, + "description": "Rows per group (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "default": 0, + "description": "Zero-based row offset per group (0-5000)", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -421929,7 +500825,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/mlb.statcastRollingResponseDoc" } }, "400": { @@ -421944,12 +500840,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -421962,37 +500852,198 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Malay Mail article", + "summary": "Get Baseball Savant Rolling Windows rows", "tags": [ - "Malay Mail" + "MLB" ] } }, - "/malaymail/headlines": { + "/mlb/statcast-run-value": { "get": { - "description": "Returns current Malay Mail headline cards for one News section. `section` is required and takes one of `malaysia`, `singapore`, `money`, `world`, `life`, `eat-drink`, `showbiz`, `opinion`, `sports`, `tech-gadgets` or `what-you-think`. Each item has its title and URL; no summary, author, time or image is returned.", - "operationId": "malaymail-headlines", + "description": "Returns batting or pitching Run Value rows from the Swing-Take leaderboard. Filters are cold-replay verified; sorting and pagination are applied locally. The Bat-side R/L selector was verified to leave the embedded rows byte-identical and is omitted. The page's visual charts and CSV export are separate formats.", + "operationId": "mlb-statcast-run-value", "parameters": [ { - "description": "Malay Mail News section slug", + "default": "Batter", + "description": "Row group", "enum": [ - "malaysia", - "singapore", - "money", - "world", - "life", - "eat-drink", - "showbiz", - "opinion", - "sports", - "tech-gadgets", - "what-you-think" + "Batter", + "Pitcher" ], "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "malaysia" + "name": "group", + "type": "string" + }, + { + "default": "2026", + "description": "Season, All, or Career", + "enum": [ + "All", + "Career", + "2026", + "2025", + "2024", + "2023", + "2022", + "2021", + "2020", + "2019", + "2018", + "2017", + "2016", + "2015", + "2014", + "2013", + "2012", + "2011", + "2010", + "2009", + "2008" + ], + "in": "query", + "name": "year", + "type": "string" + }, + { + "description": "MLB numeric team id; omit for all teams", + "in": "query", + "name": "team", + "type": "string" + }, + { + "default": "q", + "description": "Minimum plate appearances", + "enum": [ + "q", + "10", + "25", + "50", + "75", + "100", + "150", + "200", + "250", + "500", + "600", + "700", + "800", + "900", + "1000", + "1500" + ], + "in": "query", + "name": "min", + "type": "string" + }, + { + "default": "Neutral", + "description": "Run-value method", + "enum": [ + "Neutral", + "Leveraged" + ], + "in": "query", + "name": "leverage", + "type": "string" + }, + { + "default": "All", + "description": "Table view", + "enum": [ + "All", + "Swing-Take", + "Pitch Type", + "Attack Region", + "Bat-side" + ], + "in": "query", + "name": "type", + "type": "string" + }, + { + "description": "Conditional subtype: Swing/Take; pitch name; or Heart/Shadow/Chase/Waste", + "enum": [ + "Swing", + "Take", + "4-Seam Fastball", + "Changeup", + "Curveball", + "Cutter", + "Knuckleball", + "Screwball", + "Sinker", + "Slider", + "Slurve", + "Split-Finger", + "Sweeper", + "Heart", + "Shadow", + "Chase", + "Waste" + ], + "in": "query", + "name": "sub_type", + "type": "string" + }, + { + "default": "runs_all", + "description": "Local table sort field; supported set varies by view", + "enum": [ + "player_name", + "team_name_abbrev", + "year", + "pa", + "pitches", + "runs_heart", + "runs_shadow", + "runs_chase", + "runs_waste", + "runs_all", + "runs_ff", + "runs_si", + "runs_fc", + "runs_ch", + "runs_fs", + "runs_cu", + "runs_sl", + "runs_st", + "runs_sv", + "runs_kn", + "runs_sc", + "delta_runs" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": "desc", + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", + "type": "string" + }, + { + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "default": 0, + "description": "Zero-based row offset", + "in": "query", + "maximum": 10000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -422002,7 +501053,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/mlb.statcastRunValueResponseDoc" } }, "400": { @@ -422011,8 +501062,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -422029,16 +501080,273 @@ "ApiKeyAuth": [] } ], - "summary": "Get Malay Mail section headlines", + "summary": "Get Baseball Savant Run Value rows", "tags": [ - "Malay Mail" + "MLB" ] } }, - "/malaymail/news": { + "/mlb/statcast-running-game": { "get": { - "description": "Returns up to 50 current stories from Malay Mail's public all-stories RSS feed. Summaries are publisher teasers, not full article text. Use the sections, headlines, and article routes for verified public archives and story pages.", - "operationId": "malaymail-news", + "description": "Returns the Running Game table for pitchers, pitching teams, or league. Season/game, hand, runner movement, target base, prior pickoff count, minimum opportunities, team, and team-stint controls are live-verified; named sorting, player/team search, and pagination are applied locally. Per-play records are available from mlb-statcast-running-game-details. The expanded-column toggle returns the same source fields, and the first-party CSV download is not a separate JSON response mode.", + "operationId": "mlb-statcast-running-game", + "parameters": [ + { + "default": "Pit", + "description": "Leaderboard group", + "enum": [ + "Pit", + "Pitching Team", + "League" + ], + "in": "query", + "name": "type", + "type": "string" + }, + { + "default": "Regular", + "description": "Game scope", + "enum": [ + "Regular", + "Playoff", + "All" + ], + "in": "query", + "name": "game_type", + "type": "string" + }, + { + "default": "all", + "description": "Pitcher's throwing hand", + "enum": [ + "all", + "L", + "R" + ], + "in": "query", + "name": "pitch_hand", + "type": "string" + }, + { + "default": "All", + "description": "Runner movement outcome", + "enum": [ + "All", + "Advance", + "Out", + "Hold" + ], + "in": "query", + "name": "runner_moved", + "type": "string" + }, + { + "default": "All", + "description": "Target base", + "enum": [ + "All", + "2B", + "3B" + ], + "in": "query", + "name": "target_base", + "type": "string" + }, + { + "default": "All", + "description": "Prior pickoff/disengagement count", + "enum": [ + "All", + "0", + "1", + "2", + "3" + ], + "in": "query", + "name": "prior_pk", + "type": "string" + }, + { + "default": "q", + "description": "Minimum pitcher opportunities", + "enum": [ + "q", + "1", + "50", + "100", + "200", + "500", + "1000", + "1500", + "2000" + ], + "in": "query", + "name": "n", + "type": "string" + }, + { + "description": "Inclusive first season", + "enum": [ + 2016, + 2017, + 2018, + 2019, + 2020, + 2021, + 2022, + 2023, + 2024, + 2025, + 2026 + ], + "in": "query", + "name": "season_start", + "type": "integer" + }, + { + "description": "Inclusive last season", + "enum": [ + 2016, + 2017, + 2018, + 2019, + 2020, + 2021, + 2022, + 2023, + 2024, + 2025, + 2026 + ], + "in": "query", + "name": "season_end", + "type": "integer" + }, + { + "default": "no", + "description": "Return separate year rows", + "enum": [ + "yes", + "no" + ], + "in": "query", + "name": "split", + "type": "string" + }, + { + "description": "MLB team id, or split team stints", + "enum": [ + "split", + "108", + "117", + "133", + "141", + "144", + "158", + "138", + "112", + "109", + "119", + "137", + "114", + "136", + "146", + "121", + "120", + "110", + "135", + "143", + "134", + "140", + "139", + "113", + "111", + "115", + "118", + "116", + "142", + "145", + "147" + ], + "in": "query", + "name": "team", + "type": "string" + }, + { + "default": true, + "description": "Restrict pitcher rows to the selected team; only valid with one specific team id", + "in": "query", + "name": "with_team_only", + "type": "boolean" + }, + { + "default": "simple_prevented_on_running_attr", + "description": "Local table sort field", + "enum": [ + "entity_name", + "team_name", + "start_year", + "pitch_hand", + "key_pitch_hand", + "runs_prevented_on_running_attr", + "simple_prevented_on_running_attr", + "net_attr_plus", + "net_attr_minus", + "n_init", + "rate_sbx", + "n_plus", + "n_minus", + "r_sec_minus_prim_lead", + "r_sec_minus_prim_lead_sbx", + "n_sb", + "n_cs", + "n_pk", + "n_bk", + "n_fb", + "r_primary_lead", + "r_secondary_lead", + "r_primary_lead_sbx", + "r_secondary_lead_sbx" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": "desc", + "description": "Local sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", + "type": "string" + }, + { + "description": "Case-insensitive substring of the displayed player or team name", + "in": "query", + "name": "search", + "type": "string" + }, + { + "default": 100, + "description": "Rows per page, 1-500", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "description": "Zero-based row offset", + "in": "query", + "maximum": 10000, + "minimum": 0, + "name": "offset", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -422046,11 +501354,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/mlb.statcastRunningGameResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -422067,16 +501375,229 @@ "ApiKeyAuth": [] } ], - "summary": "Get Malay Mail top stories", + "summary": "Get Baseball Savant Running Game leaderboards", "tags": [ - "Malay Mail" + "MLB" ] } }, - "/malaymail/sections": { + "/mlb/statcast-running-game-details": { "get": { - "description": "Lists the 11 Malay Mail News sections accepted by `malaymail-headlines`, from `malaysia` and `singapore` to `eat-drink`, `tech-gadgets` and `what-you-think`. Each entry has a `slug`, display `name` and section `url`. Takes no parameters.", - "operationId": "malaymail-sections", + "description": "Returns individual attempted-running plays expanded from a pitcher or pitching-team Running Game row. Pass its entity_id and repeat the same table filters. For team-stint rows, pass that row's team id; League rows do not expose a detail feed.", + "operationId": "mlb-statcast-running-game-details", + "parameters": [ + { + "description": "Positive player or team entity id from the Running Game leaderboard", + "in": "query", + "name": "entity_id", + "required": true, + "type": "integer", + "x-example": 695549 + }, + { + "default": "Pit", + "description": "Detail group", + "enum": [ + "Pit", + "Pitching Team" + ], + "in": "query", + "name": "type", + "type": "string" + }, + { + "default": "Regular", + "description": "Game scope", + "enum": [ + "Regular", + "Playoff", + "All" + ], + "in": "query", + "name": "game_type", + "type": "string" + }, + { + "default": "all", + "description": "Pitcher's throwing hand", + "enum": [ + "all", + "L", + "R" + ], + "in": "query", + "name": "pitch_hand", + "type": "string" + }, + { + "default": "All", + "description": "Runner movement outcome", + "enum": [ + "All", + "Advance", + "Out", + "Hold" + ], + "in": "query", + "name": "runner_moved", + "type": "string" + }, + { + "default": "All", + "description": "Target base", + "enum": [ + "All", + "2B", + "3B" + ], + "in": "query", + "name": "target_base", + "type": "string" + }, + { + "default": "All", + "description": "Prior pickoff/disengagement count", + "enum": [ + "All", + "0", + "1", + "2", + "3" + ], + "in": "query", + "name": "prior_pk", + "type": "string" + }, + { + "default": "q", + "description": "Minimum pitcher opportunities", + "enum": [ + "q", + "1", + "50", + "100", + "200", + "500", + "1000", + "1500", + "2000" + ], + "in": "query", + "name": "n", + "type": "string" + }, + { + "description": "Inclusive first season", + "enum": [ + 2016, + 2017, + 2018, + 2019, + 2020, + 2021, + 2022, + 2023, + 2024, + 2025, + 2026 + ], + "in": "query", + "name": "season_start", + "type": "integer" + }, + { + "description": "Inclusive last season", + "enum": [ + 2016, + 2017, + 2018, + 2019, + 2020, + 2021, + 2022, + 2023, + 2024, + 2025, + 2026 + ], + "in": "query", + "name": "season_end", + "type": "integer" + }, + { + "default": "no", + "description": "Return separate year rows", + "enum": [ + "yes", + "no" + ], + "in": "query", + "name": "split", + "type": "string" + }, + { + "description": "One MLB team id; use the row's team id for split-team rows", + "enum": [ + "108", + "117", + "133", + "141", + "144", + "158", + "138", + "112", + "109", + "119", + "137", + "114", + "136", + "146", + "121", + "120", + "110", + "135", + "143", + "134", + "140", + "139", + "113", + "111", + "115", + "118", + "116", + "142", + "145", + "147" + ], + "in": "query", + "name": "team", + "type": "string" + }, + { + "default": true, + "description": "Restrict player rows to selected team; only valid with a specific team and Pit type", + "in": "query", + "name": "with_team_only", + "type": "boolean" + }, + { + "default": 100, + "description": "Play rows per page, 1-500", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "description": "Zero-based play-row offset", + "in": "query", + "maximum": 100000, + "minimum": 0, + "name": "offset", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -422084,11 +501605,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/mlb.statcastRunningGameDetailsResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -422105,74 +501626,179 @@ "ApiKeyAuth": [] } ], - "summary": "Get Malay Mail sections", + "summary": "Get Baseball Savant Running Game play details", "tags": [ - "Malay Mail" + "MLB" ] } }, - "/manga/rankings": { + "/mlb/statcast-sprint-speed": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a ranked list of manga from AniList. `sort` defaults to `TRENDING_DESC`; other values are `POPULARITY_DESC`, `SCORE_DESC`, `FAVOURITES_DESC`, `START_DATE_DESC` and `UPDATED_AT_DESC`. Filter by `format`, `genre` or `status`. Paged with `page` (default 1) and `per_page` (default 20, max 50); `has_next_page` shows if more exist.", - "operationId": "manga-rankings", + "description": "Returns player Sprint Speed rows from the Baseball Savant leaderboard. The source filters season range, position, and minimum competitive runs; team filtering and sorting are applied locally. Use mlb_discovery for every closed value set.", + "operationId": "mlb-statcast-sprint-speed", "parameters": [ { - "description": "Order: TRENDING_DESC, POPULARITY_DESC, SCORE_DESC, FAVOURITES_DESC, START_DATE_DESC, UPDATED_AT_DESC. Default TRENDING_DESC.", + "default": "2026", + "description": "First season", "enum": [ - "TRENDING_DESC", - "POPULARITY_DESC", - "SCORE_DESC", - "FAVOURITES_DESC", - "START_DATE_DESC", - "UPDATED_AT_DESC" + "2015", + "2016", + "2017", + "2018", + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" ], "in": "query", - "name": "sort", + "name": "min_season", "type": "string" }, { - "description": "Format filter: MANGA, NOVEL, ONE_SHOT.", + "default": "min_season", + "description": "Last season; must be >= min_season", "enum": [ - "MANGA", - "NOVEL", - "ONE_SHOT" + "2015", + "2016", + "2017", + "2018", + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026" ], "in": "query", - "name": "format", + "name": "max_season", "type": "string" }, { - "description": "Genre filter, e.g. Fantasy.", + "description": "Position code; omitted is All Positions", + "enum": [ + "all", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10" + ], "in": "query", - "name": "genre", + "name": "position", "type": "string" }, { - "description": "Status filter: FINISHED, RELEASING, NOT_YET_RELEASED, CANCELLED, HIATUS.", + "description": "MLB team id", "enum": [ - "FINISHED", - "RELEASING", - "NOT_YET_RELEASED", - "CANCELLED", - "HIATUS" + "108", + "117", + "133", + "141", + "144", + "158", + "138", + "112", + "109", + "119", + "137", + "114", + "136", + "146", + "121", + "120", + "110", + "135", + "143", + "134", + "140", + "139", + "113", + "111", + "115", + "118", + "116", + "142", + "145", + "147" ], "in": "query", - "name": "status", + "name": "team_id", "type": "string" }, { - "description": "1-based page number, default 1", + "default": "10", + "description": "Minimum competitive runs", + "enum": [ + "0", + "5", + "10", + "25", + "50", + "75", + "100", + "150", + "200", + "250" + ], "in": "query", - "name": "page", + "name": "minimum_runs", + "type": "string" + }, + { + "default": "sprint_speed", + "description": "Local sort field", + "enum": [ + "player", + "team", + "position", + "age", + "competitive_runs", + "bolts", + "home_to_first", + "sprint_speed" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": "desc", + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", + "type": "string" + }, + { + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", "type": "integer" }, { - "description": "Results per page, default 20, max 50", + "default": 0, + "description": "Zero-based row offset", "in": "query", - "name": "per_page", + "maximum": 5000, + "minimum": 0, + "name": "offset", "type": "integer" } ], @@ -422183,7 +501809,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.mangaRankingsResponseDoc" + "$ref": "#/definitions/mlb.statcastSprintSpeedResponseDoc" } }, "400": { @@ -422192,12 +501818,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -422210,52 +501830,122 @@ "ApiKeyAuth": [] } ], - "summary": "Rank manga", + "summary": "Get Baseball Savant Sprint Speed player rows", "tags": [ - "Manga" + "MLB" ] } }, - "/manga/search": { + "/mlb/statcast-sprint-speed-teams": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches manga by free-text query. Returns entries: titles, scores, popularity, format, status, chapters, volumes, genres, and tags.", - "operationId": "manga-search", + "description": "Returns team-level Sprint Speed rows. Season is selected upstream; team filtering and sorting are applied locally because the first-party page embeds every team before its client-side filter. Use mlb_discovery for all accepted seasons, teams, and sort fields.", + "operationId": "mlb-statcast-sprint-speed-teams", "parameters": [ { - "description": "Search text", + "default": "2026", + "description": "Season or all seasons", + "enum": [ + "2015", + "2016", + "2017", + "2018", + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025", + "2026", + "all" + ], "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "Berserk" + "name": "season", + "type": "string" }, { - "description": "Ordering: SEARCH_MATCH, POPULARITY_DESC, SCORE_DESC, TRENDING_DESC, FAVOURITES_DESC, START_DATE_DESC. Default SEARCH_MATCH.", + "description": "Optional first-party team selector abbreviation", "enum": [ - "SEARCH_MATCH", - "POPULARITY_DESC", - "SCORE_DESC", - "TRENDING_DESC", - "FAVOURITES_DESC", - "START_DATE_DESC" + "LAA", + "HOU", + "OAK", + "TOR", + "ATL", + "MIL", + "STL", + "CHC", + "ARI", + "LAD", + "SF", + "CLE", + "SEA", + "MIA", + "NYM", + "WSH", + "BAL", + "SD", + "PHI", + "PIT", + "TEX", + "TB", + "BOS", + "CIN", + "COL", + "KC", + "DET", + "MIN", + "CWS", + "NYY" + ], + "in": "query", + "name": "team", + "type": "string" + }, + { + "default": "average_sprint_speed", + "description": "Local sort field", + "enum": [ + "season", + "team", + "players", + "competitive_runs", + "average_sprint_speed", + "fastest_sprint_speed", + "slowest_sprint_speed", + "bolts", + "average_home_to_first" ], "in": "query", "name": "sort", "type": "string" }, { - "description": "1-based page number, default 1", + "default": "desc", + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], "in": "query", - "name": "page", + "name": "sort_dir", + "type": "string" + }, + { + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", "type": "integer" }, { - "description": "Results per page, default 10, max 50", + "default": 0, + "description": "Zero-based row offset", "in": "query", - "name": "per_page", + "maximum": 5000, + "minimum": 0, + "name": "offset", "type": "integer" } ], @@ -422266,7 +501956,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.searchResponseDoc" + "$ref": "#/definitions/mlb.statcastSprintSpeedTeamsResponseDoc" } }, "400": { @@ -422275,12 +501965,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -422293,33 +501977,260 @@ "ApiKeyAuth": [] } ], - "summary": "Search manga", + "summary": "Get Baseball Savant Sprint Speed team rows", "tags": [ - "Manga" + "MLB" ] } }, - "/manga/title/{id}": { + "/mlb/statcast-swing-path": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a manga by AniList id: titles, MyAnimeList id, scores, popularity, favourites, format, status, chapters, volumes, genres, ranked tags, dates, description, and images. Pass mal=true to additionally enrich the response with the MyAnimeList community score (mal block: score on a 0-10 scale, plus scored-by count).", - "operationId": "manga-title", + "description": "Returns batter, batting-team, or league Swing Path and Attack Angle rows with the first-party season, game, swing, team, date, side, contact, hard-hit, attack-zone, and pitcher-hand filters. Use mlb_discovery for exact values.", + "operationId": "mlb-statcast-swing-path", "parameters": [ { - "description": "AniList manga id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "30002" + "default": "batter", + "description": "Row type", + "enum": [ + "batter", + "batting-team", + "league" + ], + "in": "query", + "name": "type", + "type": "string" }, { - "description": "Enrich with the MyAnimeList community score (adds one fetch; omitted when the title has no MAL id)", + "default": "2026", + "description": "First season", + "enum": [ + "2023", + "2024", + "2025", + "2026" + ], "in": "query", - "name": "mal", - "type": "boolean" + "name": "season_start", + "type": "string" + }, + { + "default": "season_start", + "description": "Last season; must be >= season_start", + "enum": [ + "2023", + "2024", + "2025", + "2026" + ], + "in": "query", + "name": "season_end", + "type": "string" + }, + { + "default": "Regular", + "description": "Game type", + "enum": [ + "Any", + "Exhibition", + "Playoff", + "Regular" + ], + "in": "query", + "name": "game_type", + "type": "string" + }, + { + "default": "q", + "description": "Minimum swing threshold", + "enum": [ + "q", + "1", + "5", + "10", + "25", + "50", + "100", + "200", + "500", + "1000" + ], + "in": "query", + "name": "min_swings", + "type": "string" + }, + { + "default": "1", + "description": "Minimum swings per group", + "enum": [ + "1", + "5", + "10", + "25", + "50", + "100", + "200", + "500", + "1000" + ], + "in": "query", + "name": "min_group_swings", + "type": "string" + }, + { + "description": "Optional MLB team id", + "enum": [ + "108", + "109", + "110", + "111", + "112", + "113", + "114", + "115", + "116", + "117", + "118", + "119", + "120", + "121", + "133", + "134", + "135", + "136", + "137", + "138", + "139", + "140", + "141", + "142", + "143", + "144", + "145", + "146", + "147", + "158" + ], + "in": "query", + "name": "team_id", + "type": "string" + }, + { + "description": "Optional range start in YYYY-MM-DD", + "in": "query", + "name": "date_start", + "type": "string" + }, + { + "description": "Optional range end in YYYY-MM-DD", + "in": "query", + "name": "date_end", + "type": "string" + }, + { + "description": "Batter side", + "enum": [ + "L", + "R" + ], + "in": "query", + "name": "bat_side", + "type": "string" + }, + { + "description": "Contact type", + "enum": [ + "2", + "4", + "9" + ], + "in": "query", + "name": "contact_type", + "type": "string" + }, + { + "description": "Hard-hit filter", + "enum": [ + "1", + "0" + ], + "in": "query", + "name": "is_hard_hit", + "type": "string" + }, + { + "description": "Attack zone", + "enum": [ + "0", + "1", + "1.1", + "2", + "3" + ], + "in": "query", + "name": "attack_zone", + "type": "string" + }, + { + "description": "Pitcher hand", + "enum": [ + "L", + "R" + ], + "in": "query", + "name": "pitch_hand", + "type": "string" + }, + { + "default": "avg_sweetspot_speed_mph", + "description": "Local sort field", + "enum": [ + "name", + "team_name", + "avg_sweetspot_speed_mph", + "avg_plane_vertical_angle", + "attack_angle", + "attack_direction_pullopp", + "rate_ideal_attack_angle", + "avg_intercept_y_vs_plate", + "avg_intercept_y_vs_batter", + "avg_batter_y_position", + "avg_batter_x_position", + "avg_foot_sep0", + "avg_foot_angle0", + "n_swings" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": "desc", + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", + "type": "string" + }, + { + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "default": 0, + "description": "Zero-based row offset", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -422329,7 +502240,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.mediaResponseDoc" + "$ref": "#/definitions/mlb.statcastSwingPathResponseDoc" } }, "400": { @@ -422344,12 +502255,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -422362,38 +502267,418 @@ "ApiKeyAuth": [] } ], - "summary": "Get a manga", + "summary": "Get Baseball Savant Swing Path and Attack Angle rows", "tags": [ - "Manga" + "MLB" ] } }, - "/manga/title/{id}/characters": { + "/mlb/statcast-swing-timing": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a manga's cast (character name, native name, billed role, image, favourites), paginated. The AniList id space is shared between anime and manga but the two do not overlap, so an anime id here returns 404 -- use GET /anime/title/{id}/characters for those.", - "operationId": "manga-title-characters", + "description": "Returns batter, batting-team, pitcher, pitching-team, or league rows with the page's season, game type, pitch-group, split, team, date, swing, contact, zone, pitch hand/type, count, timing-axis, and timing-flag filters. Sorting is local. Use mlb_discovery for exact values.", + "operationId": "mlb-statcast-swing-timing", "parameters": [ { - "description": "AniList manga id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "30002" + "default": "batter", + "description": "Row type", + "enum": [ + "batter", + "batting-team", + "pitcher", + "pitching-team", + "league" + ], + "in": "query", + "name": "type", + "type": "string" + }, + { + "collectionFormat": "multi", + "description": "One or more seasons", + "in": "query", + "items": { + "enum": [ + "2023", + "2024", + "2025", + "2026" + ], + "type": "string" + }, + "name": "seasons", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "One or more game types", + "in": "query", + "items": { + "enum": [ + "R", + "A", + "F", + "D", + "L", + "W" + ], + "type": "string" + }, + "name": "game_types", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "One or more split dimensions", + "in": "query", + "items": { + "enum": [ + "api_pitch_type_group03", + "api_pitch_type_group09", + "api_game_date_month_text", + "bat_contact_code", + "game_type", + "is_hit_into_play_hardhit", + "is_best_speed", + "timing_x_tiedupflail", + "timing_y_earlylate", + "timing_z_overunder", + "pitch_hand", + "bat_side", + "is_pre_ball_count_3", + "is_pre_strike_count_2", + "pitchzone_height_code", + "is_starter_pitcher" + ], + "type": "string" + }, + "name": "splits", + "type": "array" + }, + { + "default": "q", + "description": "Minimum swing threshold", + "enum": [ + "q", + "1", + "5", + "10", + "25", + "50", + "100", + "200", + "500", + "1000" + ], + "in": "query", + "name": "min_swings", + "type": "string" + }, + { + "default": "1", + "description": "Minimum swings per split group", + "enum": [ + "1", + "5", + "10", + "25", + "50", + "100", + "200", + "500", + "1000" + ], + "in": "query", + "name": "min_split", + "type": "string" + }, + { + "default": "1", + "description": "Split years into separate rows", + "enum": [ + "1", + "0" + ], + "in": "query", + "name": "split_year", + "type": "string" + }, + { + "collectionFormat": "multi", + "description": "One or more MLB team ids", + "in": "query", + "items": { + "enum": [ + "108", + "109", + "110", + "111", + "112", + "113", + "114", + "115", + "116", + "117", + "118", + "119", + "120", + "121", + "133", + "134", + "135", + "136", + "137", + "138", + "139", + "140", + "141", + "142", + "143", + "144", + "145", + "146", + "147", + "158" + ], + "type": "string" + }, + "name": "teams", + "type": "array" + }, + { + "description": "Optional range start in YYYY-MM-DD", + "in": "query", + "name": "date_start", + "type": "string" + }, + { + "description": "Optional range end in YYYY-MM-DD", + "in": "query", + "name": "date_end", + "type": "string" + }, + { + "description": "Batter side", + "enum": [ + "L", + "R" + ], + "in": "query", + "name": "bat_side", + "type": "string" + }, + { + "description": "Contact type", + "enum": [ + "2", + "4", + "9" + ], + "in": "query", + "name": "contact_type", + "type": "string" + }, + { + "description": "Attack zone", + "enum": [ + "0", + "1", + "1.1", + "2", + "3" + ], + "in": "query", + "name": "attack_zone", + "type": "string" + }, + { + "description": "Pitcher hand", + "enum": [ + "L", + "R" + ], + "in": "query", + "name": "pitch_hand", + "type": "string" + }, + { + "collectionFormat": "multi", + "description": "One or more pitch type codes", + "in": "query", + "items": { + "enum": [ + "FF", + "SI", + "FC", + "CH", + "FS", + "FO", + "SC", + "CU", + "SL", + "ST", + "SV", + "KN" + ], + "type": "string" + }, + "name": "pitch_types", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "One or more ball-strike counts", + "in": "query", + "items": { + "enum": [ + "00", + "01", + "02", + "10", + "11", + "12", + "20", + "21", + "22", + "30", + "31", + "32" + ], + "type": "string" + }, + "name": "counts", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Tied-up, centered, or flailed", + "in": "query", + "items": { + "enum": [ + "Tiedup", + "Centered", + "Flail" + ], + "type": "string" + }, + "name": "swing_timing_x", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Early, on-time, or late", + "in": "query", + "items": { + "enum": [ + "Early", + "OnTime", + "Late" + ], + "type": "string" + }, + "name": "swing_timing_y", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Under, lined-up, or over", + "in": "query", + "items": { + "enum": [ + "Under", + "Linedup", + "Over" + ], + "type": "string" + }, + "name": "swing_timing_z", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Positive timing flags", + "in": "query", + "items": { + "enum": [ + "is_timing_xyz_flawed", + "is_timing_xyz_perfect" + ], + "type": "string" + }, + "name": "flags", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Excluded timing flags", + "in": "query", + "items": { + "enum": [ + "is_timing_xyz_flawed", + "is_timing_xyz_perfect" + ], + "type": "string" + }, + "name": "not_flags", + "type": "array" + }, + { + "default": "n_swings", + "description": "Local sort field", + "enum": [ + "name", + "team_name", + "pitch_hand_type", + "bat_side_type", + "n_swings", + "competitive_swings", + "strikes_swinging", + "miss_distance", + "flails", + "centers", + "tied_ups", + "earlys", + "on_times", + "lates", + "unders", + "lined_ups", + "overs", + "delta_run_exp", + "whiff_rate", + "competitive_percent", + "perfect_percent", + "flawed_percent" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": "desc", + "description": "Sort direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_dir", + "type": "string" }, { - "description": "1-based page number, default 1", + "default": 100, + "description": "Rows per page (1-500)", "in": "query", - "name": "page", + "maximum": 500, + "minimum": 1, + "name": "limit", "type": "integer" }, { - "description": "Results per page, default 10, max 50", + "default": 0, + "description": "Zero-based row offset", "in": "query", - "name": "per_page", + "maximum": 5000, + "minimum": 0, + "name": "offset", "type": "integer" } ], @@ -422404,7 +502689,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/anime.charactersResponseDoc" + "$ref": "#/definitions/mlb.statcastSwingTimingResponseDoc" } }, "400": { @@ -422419,12 +502704,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -422437,471 +502716,363 @@ "ApiKeyAuth": [] } ], - "summary": "List a manga's characters", + "summary": "Get Baseball Savant Swing Timing and Miss Distance rows", "tags": [ - "Manga" + "MLB" ] } }, - "/manga/title/{id}/recommendations": { + "/mlb/statcast-swing-timing-details": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the titles AniList users recommend alongside a manga, most-recommended first, each with its community rating and full title record. Recommendations can cross media types -- a manga's list may include anime -- so read each entry's own type rather than assuming manga. An anime id here returns 404 -- use GET /anime/title/{id}/recommendations for those.", - "operationId": "manga-title-recommendations", + "description": "Returns the four anonymous per-swing detail arrays expanded from a batter or pitcher Swing Timing row. Pass the row_id uniqueId from mlb-statcast-swing-timing and repeat its type and table filters so split values can be mapped to the upstream detail query.", + "operationId": "mlb-statcast-swing-timing-details", "parameters": [ { - "description": "AniList manga id", - "in": "path", - "name": "id", + "description": "Unique row id from mlb-statcast-swing-timing, including any selected split values", + "in": "query", + "name": "row_id", "required": true, "type": "string", - "x-example": "30013" + "x-example": "666018_FF_2026" }, { - "description": "1-based page number, default 1", + "description": "Player row type", + "enum": [ + "batter", + "pitcher" + ], "in": "query", - "name": "page", - "type": "integer" + "name": "type", + "required": true, + "type": "string", + "x-example": "batter" }, { - "description": "Results per page, default 10, max 50", + "collectionFormat": "csv", + "description": "Season filters", "in": "query", - "name": "per_page", - "type": "integer" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/anime.recommendationsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } + "items": { + "enum": [ + "2023", + "2024", + "2025", + "2026" + ], + "type": "string" + }, + "name": "seasons", + "type": "array" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "List titles recommended alongside a manga", - "tags": [ - "Manga" - ] - } - }, - "/manga/title/{id}/staff": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the people credited on a manga -- author, artist, assistants, and per-language translation and lettering credits -- with each person's role, occupations and image, paginated. Manga roles carry detail anime credits do not: a long-running series records volume ranges per credit (e.g. \"Story & Art (vols 1-41)\", \"Supervisor (vols 41- )\"). An anime id here returns 404 -- use GET /anime/title/{id}/staff for those.", - "operationId": "manga-title-staff", - "parameters": [ { - "description": "AniList manga id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "30002" + "collectionFormat": "csv", + "description": "Game-type filters", + "in": "query", + "items": { + "enum": [ + "R", + "A", + "F", + "D", + "L", + "W" + ], + "type": "string" + }, + "name": "game_types", + "type": "array" }, { - "description": "1-based page number, default 1", + "collectionFormat": "csv", + "description": "Split dimensions", "in": "query", - "name": "page", - "type": "integer" + "items": { + "enum": [ + "api_pitch_type_group03", + "api_pitch_type_group09", + "api_game_date_month_text", + "bat_contact_code", + "game_type", + "is_hit_into_play_hardhit", + "is_best_speed", + "timing_x_tiedupflail", + "timing_y_earlylate", + "timing_z_overunder", + "pitch_hand", + "bat_side", + "is_pre_ball_count_3", + "is_pre_strike_count_2", + "pitchzone_height_code", + "is_starter_pitcher" + ], + "type": "string" + }, + "name": "splits", + "type": "array" }, { - "description": "Results per page, default 10, max 50", + "default": "q", + "description": "Minimum swings", + "enum": [ + "q", + "1", + "5", + "10", + "25", + "50", + "100", + "200", + "500", + "1000" + ], "in": "query", - "name": "per_page", - "type": "integer" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/anime.staffResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } + "name": "min_swings", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "List a manga's staff credits", - "tags": [ - "Manga" - ] - } - }, - "/marketwatch/article": { - "get": { - "description": "Returns a MarketWatch article by `url`, a canonical HTTPS article link. The response has the title, description, section, authors, lead image, publish and update times, body `paragraphs` and a `paywalled` flag. Subscriber-only or blocked articles return an upstream error, so some URLs may fail.", - "operationId": "marketwatch-article", - "parameters": [ { - "description": "Canonical MarketWatch article URL", + "default": "1", + "description": "Minimum group swings", + "enum": [ + "1", + "5", + "10", + "25", + "50", + "100", + "200", + "500", + "1000" + ], "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.marketwatch.com/story/example" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + "name": "min_split", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get MarketWatch article content", - "tags": [ - "MarketWatch" - ] - } - }, - "/marketwatch/author": { - "get": { - "description": "Returns a MarketWatch author profile, identified by `slug` (such as `hannah-pedone`) or a canonical `marketwatch.com/author/` `url`; provide exactly one. The response has the name, job title, bio, `works_for` and one page of recent articles with title and URL. The `?mod=` attribution query is removed from article URLs.", - "operationId": "marketwatch-author", - "parameters": [ { - "description": "Author slug, e.g. hannah-pedone", + "default": "1", + "description": "Include year in the row grouping", + "enum": [ + "0", + "1" + ], "in": "query", - "name": "slug", - "type": "string", - "x-example": "hannah-pedone" + "name": "split_year", + "type": "string" }, { - "description": "Canonical marketwatch.com/author/ URL; alternative to slug", + "collectionFormat": "csv", + "description": "MLB team ids", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.marketwatch.com/author/hannah-pedone" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.marketWatchAuthorResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + "items": { + "enum": [ + "108", + "117", + "133", + "141", + "144", + "158", + "138", + "112", + "109", + "119", + "137", + "114", + "136", + "146", + "121", + "120", + "110", + "135", + "143", + "134", + "113", + "111", + "115", + "118", + "116", + "142", + "145", + "147" + ], + "type": "string" + }, + "name": "teams", + "type": "array" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Filter start date in YYYY-MM-DD format", + "in": "query", + "name": "date_start", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get a MarketWatch author profile", - "tags": [ - "MarketWatch" - ] - } - }, - "/marketwatch/headlines": { - "get": { - "description": "Returns current MarketWatch headlines for one section. `section` is required and takes `latest-news`, `markets`, `investing`, `personal-finance`, `economy-politics`, `technology`, `retirement` or `real-estate`. Each item has its title, URL, summary, author, publication time and image where available.", - "operationId": "marketwatch-headlines", - "parameters": [ + "description": "Filter end date in YYYY-MM-DD format", + "in": "query", + "name": "date_end", + "type": "string" + }, { - "description": "MarketWatch section slug", + "description": "Batter side", "enum": [ - "latest-news", - "markets", - "investing", - "personal-finance", - "economy-politics", - "technology", - "retirement", - "real-estate" + "L", + "R" ], "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "latest-news" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + "name": "bat_side", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get MarketWatch section headlines", - "tags": [ - "MarketWatch" - ] - } - }, - "/marketwatch/news": { - "get": { - "description": "Returns MarketWatch's current top stories, with no parameters. Each item has its title, URL, summary, author, publication time and image where available. Use `marketwatch-headlines` to read a single section instead.", - "operationId": "marketwatch-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } + "description": "Contact type", + "enum": [ + "2", + "4", + "9" + ], + "in": "query", + "name": "contact_type", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get MarketWatch top stories", - "tags": [ - "MarketWatch" - ] - } - }, - "/marketwatch/sections": { - "get": { - "description": "Lists the eight MarketWatch sections accepted by `marketwatch-headlines`: `latest-news`, `markets`, `investing`, `personal-finance`, `economy-politics`, `technology`, `retirement` and `real-estate`. Each entry has a `slug`, display `name` and section `url`.", - "operationId": "marketwatch-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ + "description": "Attack zone", + "enum": [ + "0", + "1", + "1.1", + "2", + "3" + ], + "in": "query", + "name": "attack_zone", + "type": "string" + }, { - "ApiKeyAuth": [] - } - ], - "summary": "Get MarketWatch sections", - "tags": [ - "MarketWatch" - ] - } - }, - "/mashable/article": { - "get": { - "description": "Returns public Mashable article metadata and body paragraphs from a canonical article URL. Mashable articles are free to read, so the full body is returned.", - "operationId": "mashable-article", - "parameters": [ + "description": "Pitcher hand", + "enum": [ + "L", + "R" + ], + "in": "query", + "name": "pitch_hand", + "type": "string" + }, { - "description": "Canonical Mashable article URL", + "collectionFormat": "csv", + "description": "Pitch type codes", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://mashable.com/tech/openai-hack-australian-government-ai-agent" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" - } + "items": { + "enum": [ + "FF", + "SI", + "FC", + "CH", + "FS", + "FO", + "SC", + "CU", + "SL", + "ST", + "SV", + "KN" + ], + "type": "string" + }, + "name": "pitch_types", + "type": "array" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "collectionFormat": "csv", + "description": "Ball-strike counts", + "in": "query", + "items": { + "enum": [ + "00", + "01", + "02", + "10", + "11", + "12", + "20", + "21", + "22", + "30", + "31", + "32" + ], + "type": "string" + }, + "name": "counts", + "type": "array" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "collectionFormat": "csv", + "description": "Tied-up/flail axis values", + "in": "query", + "items": { + "enum": [ + "Tiedup", + "Centered", + "Flail" + ], + "type": "string" + }, + "name": "swing_timing_x", + "type": "array" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get Mashable article content", - "tags": [ - "Mashable" - ] - } - }, - "/mashable/author": { - "get": { - "description": "Returns one Mashable author's public profile (name, job title, biography, image, social links) plus one page of their recent articles. Profile fields are only present on page 1.", - "operationId": "mashable-author", - "parameters": [ + "collectionFormat": "csv", + "description": "Early/late axis values", + "in": "query", + "items": { + "enum": [ + "Early", + "OnTime", + "Late" + ], + "type": "string" + }, + "name": "swing_timing_y", + "type": "array" + }, { - "description": "Author slug, e.g. amanda-yeo", + "collectionFormat": "csv", + "description": "Over/under axis values", "in": "query", - "name": "slug", - "type": "string", - "x-example": "amanda-yeo" + "items": { + "enum": [ + "Under", + "Linedup", + "Over" + ], + "type": "string" + }, + "name": "swing_timing_z", + "type": "array" }, { - "description": "Canonical mashable.com/author/ URL; alternative to slug", + "collectionFormat": "csv", + "description": "Positive swing timing flags", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://mashable.com/author/amanda-yeo" + "items": { + "enum": [ + "is_timing_xyz_flawed", + "is_timing_xyz_perfect" + ], + "type": "string" + }, + "name": "flags", + "type": "array" }, { - "default": 1, - "description": "1-based page number of the article list", + "collectionFormat": "csv", + "description": "Excluded swing timing flags", "in": "query", - "name": "page", - "type": "integer" + "items": { + "enum": [ + "is_timing_xyz_flawed", + "is_timing_xyz_perfect" + ], + "type": "string" + }, + "name": "not_flags", + "type": "array" } ], "produces": [ @@ -422911,7 +503082,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.mashableAuthorResponseDoc" + "$ref": "#/definitions/mlb.statcastSwingTimingDetailsResponseDoc" } }, "400": { @@ -422938,68 +503109,22 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Mashable author profile", + "summary": "Get Baseball Savant Swing Timing player details", "tags": [ - "Mashable" + "MLB" ] } }, - "/mashable/headlines": { + "/mlb/statcast-top-performers": { "get": { - "description": "Returns fresh Mashable headlines from one public category RSS feed. Sponsored partner posts, shopping roundups, reviews, and video pages are not included.", - "operationId": "mashable-headlines", + "description": "Returns every current Top Performers card for the selected season, including batter and pitcher rankings across batting, batted-ball, expected-stat, fielding, catching, running, and pitch-metric views. The page exposes a season selector but no per-card filters; use the specialist Statcast endpoints for complete filtered leaderboards.", + "operationId": "mlb-statcast-top-performers", "parameters": [ { - "description": "Mashable category slug", - "enum": [ - "android", - "animals", - "apple", - "cannabis", - "celebrities", - "climate-change", - "covid-19", - "desktops", - "digital-culture", - "education", - "entertainment", - "fitness", - "games", - "gaming", - "gaming-consoles", - "gender", - "headphones", - "health-wellness", - "house-home", - "laptops", - "lgbtq", - "life", - "memes", - "mental-health", - "mobile", - "movies", - "podcasts", - "science", - "sex", - "sex-dating-relationships", - "smart-home", - "social-good", - "social-media", - "space", - "speakers", - "tablets", - "tech", - "tech-industry", - "transportation", - "tv-shows", - "tvs", - "wifirouters" - ], + "description": "Season from 2015 through the current season; defaults to the current season", "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "android" + "name": "year", + "type": "integer" } ], "produces": [ @@ -423009,7 +503134,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/mlb.statcastTopPerformersResponseDoc" } }, "400": { @@ -423018,40 +503143,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Mashable section headlines", - "tags": [ - "Mashable" - ] - } - }, - "/mashable/news": { - "get": { - "description": "Returns fresh Mashable top stories from the public all-stories RSS feed. Mashable articles are free to read; sponsored partner posts, shopping roundups, reviews, and video pages are not included.", - "operationId": "mashable-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -423068,208 +503161,180 @@ "ApiKeyAuth": [] } ], - "summary": "Get Mashable top stories", - "tags": [ - "Mashable" - ] - } - }, - "/mashable/sections": { - "get": { - "description": "Returns the public Mashable category taxonomy accepted by the headlines endpoint. Only categories that publish a working public RSS feed are listed.", - "operationId": "mashable-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Mashable sections", + "summary": "Get Baseball Savant Top Performers", "tags": [ - "Mashable" + "MLB" ] } }, - "/mcdonalds/categories": { + "/mlb/statcast-year-to-year": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one market's McDonald's menu categories -- 13 in the United States at time of writing, including breakfast, burgers, chicken-and-fish-sandwiches, mcnuggets-and-mccrispy-strips, snack-wrap, fries-sides, happy-meal, sweets-treats, mccafe-coffees, drinks, sauces-and-condiments and the two value menus; other markets publish their own, from 6 in Switzerland to 17 in Australia. Each entry's slug is the value GET /mcdonalds/menu takes. Slugs are not portable between markets, so pass the same country back. Eight markets publish a reachable menu, fewer than the ten the restaurant locator covers.", - "operationId": "mcdonalds-categories", + "description": "Returns one of Baseball Savant's Year-to-Year Changes tables for batters, pitchers, batting teams, or pitching teams. Select one of the live statistic types and comparison start years; the page data contains available yearly values and differences. Table sorting and pagination are applied locally. Use mlb_discovery for all accepted group, type, and year values.", + "operationId": "mlb-statcast-year-to-year", "parameters": [ { - "description": "Market (default us). One of us, ca, gb, au, ie, nz, ch, se.", + "default": "Batter", + "description": "Table group", "enum": [ - "us", - "ca", - "gb", - "au", - "ie", - "nz", - "ch", - "se" + "Batter", + "Pitcher", + "Batter Team", + "Pitcher Team" ], "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/mcdonalds.categoriesResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + "name": "group", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "List McDonald's menu categories", - "tags": [ - "McDonalds" - ] - } - }, - "/mcdonalds/item": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one McDonald's item's published nutrition detail: the full per-serving nutrient list (calories, protein, carbohydrates, total and saturated fat, trans fat, cholesterol, sodium, fibre, sugars, vitamins and minerals -- 21 values for a Big Mac), each with a stable machine key, a unit and a percent-daily-value where McDonald's prints one; plus the item's marketing description, allergen statement, full ingredient statement and image. Item ids come from GET /mcdonalds/menu and are market-specific, so pass the same country back. Seven markets serve this endpoint, fewer than the eight publishing a menu -- Great Britain has a menu but no nutrition surface. Combo meals legitimately carry no nutrient list. Prices are not available on this surface.", - "operationId": "mcdonalds-item", - "parameters": [ { - "description": "McDonald's numeric product id, from /mcdonalds/menu", + "default": "hard_hit_percent", + "description": "Statistic type", + "enum": [ + "ba", + "xba", + "obp", + "xobp", + "slg", + "xslg", + "iso", + "xiso", + "babip", + "woba", + "xwoba", + "wobacon", + "xwobacon", + "bacon", + "xbacon", + "hard_hit_percent", + "exit_velocity_avg", + "sweet_spot_percent", + "barrel_batted_rate", + "launch_angle_avg", + "avg_swing_speed", + "attack_angle", + "ideal_angle_rate", + "attack_direction", + "vertical_swing_path", + "avg_swing_length", + "fastball_velo", + "breaking_velo", + "offspeed_velo", + "barrels", + "popups_percent", + "flyballs_percent", + "linedrives_percent", + "groundballs_percent", + "pull_percent", + "straightaway_percent", + "opposite_percent", + "poorlyweak_percent", + "pull_percent_airballs", + "poorlytopped_percent", + "poorlyunder_percent", + "flareburner_percent", + "solidcontact_percent", + "hr_flyballs_percent", + "popups", + "flyballs", + "linedrives", + "groundballs", + "in_zone_percent", + "out_zone_percent", + "edge_percent", + "z_swing_percent", + "oz_swing_percent", + "iz_contact_percent", + "oz_contact_percent", + "whiff_percent", + "f_strike_percent", + "f_swing_percent", + "swing_percent", + "meatball_swing_percent", + "meatball_percent", + "z_swing_miss_percent", + "oz_swing_miss_percent", + "in_zone", + "out_zone", + "edge", + "in_zone_swing", + "out_zone_swing", + "in_zone_swing_miss", + "out_zone_swing_miss", + "pitch_count", + "pa", + "ab", + "hit", + "single", + "double", + "triple", + "home_run", + "walk", + "strikeout", + "k_percent", + "bb_percent", + "hbp", + "batted_ball", + "pitch_usage_fastball", + "pitch_usage_offspeed", + "pitch_usage_breaking", + "pitch_count_fastball", + "pitch_count_offspeed", + "pitch_count_breaking" + ], "in": "query", - "name": "item_id", - "required": true, - "type": "string", - "x-example": "200463" + "name": "type", + "type": "string" }, { - "description": "Market (default us). One of us, ca, au, ie, nz, ch, se. Must match the market the item id came from.", + "default": "2025", + "description": "Comparison start year; compares this season with the following year", "enum": [ - "us", - "ca", - "au", - "ie", - "nz", - "ch", - "se" + "2025", + "2024", + "2023", + "2022", + "2021", + "2020", + "2019", + "2018", + "2017" ], "in": "query", - "name": "country", - "type": "string", - "x-example": "us" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/mcdonalds.itemResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + "name": "year", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get one McDonald's item's nutrition", - "tags": [ - "McDonalds" - ] - } - }, - "/mcdonalds/item-list": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the same published nutrition detail as GET /mcdonalds/item for up to 20 items in one call, plus the per-component ingredient and allergen breakdown that the single-item endpoint does not expose -- a composite item's overall allergen statement is the union of its parts' (a burger's bun, patty, cheese and condiment each carry their own ingredient statement and allergens), so this is the source to use when the full breakdown matters, not just the item-level summary. Item ids come from GET /mcdonalds/menu and are market-specific, so pass the same country back. The response echoes the requested ids so a caller can tell which ones McDonald's returned nothing for.", - "operationId": "mcdonalds-item-list", - "parameters": [ { - "description": "Comma-separated McDonald's numeric product ids, up to 20", + "description": "Local sortable column; name_display_last_first, year_YYYY, TYPE_YYYY, or TYPE_diff_YYYY. Defaults to the selected metric's difference for the selected comparison year.", "in": "query", - "name": "item_ids", - "required": true, - "type": "string", - "x-example": "200463,200466,200476" + "name": "sort", + "type": "string" }, { - "description": "Market (default us). One of us, ca, au, ie, nz, ch, se. Must match the market the item ids came from.", + "description": "Sort direction; defaults to Batter descending and Pitcher ascending", "enum": [ - "us", - "ca", - "au", - "ie", - "nz", - "ch", - "se" + "asc", + "desc" ], "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "sort_dir", + "type": "string" + }, + { + "default": 100, + "description": "Rows per page (1-500)", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "default": 0, + "description": "Zero-based row offset (0-5000)", + "in": "query", + "maximum": 5000, + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -423279,7 +503344,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mcdonalds.itemListResponseDoc" + "$ref": "#/definitions/mlb.statcastYearToYearResponseDoc" } }, "400": { @@ -423294,12 +503359,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -423312,44 +503371,52 @@ "ApiKeyAuth": [] } ], - "summary": "Get nutrition and allergen detail for a batch of McDonald's items", + "summary": "Get Baseball Savant Year-to-Year Changes", "tags": [ - "McDonalds" + "MLB" ] } }, - "/mcdonalds/menu": { + "/mlb/team-roster": { "get": { "consumes": [ "application/json" ], - "description": "Returns the items in one McDonald's menu category: each item's numeric id, name, product page URL and image. The item id is what GET /mcdonalds/item takes for full nutrition. Category slugs come from GET /mcdonalds/categories and must be paired with the country they came from -- both slugs and item ids are market-specific. Prices are not available; McDonald's does not publish them on this surface. A calorie label is included per item where the category page prints one, which is often blank.", - "operationId": "mcdonalds-menu", + "description": "Returns a team's players, jersey numbers, positions, and roster status. The roster_type parameter accepts every value in the live MLB value set returned by mlb_discovery.", + "operationId": "mlb-team-roster", "parameters": [ { - "description": "Category slug from /mcdonalds/categories", + "description": "Numeric MLB team id", "in": "query", - "name": "category", + "name": "team_id", "required": true, "type": "string", - "x-example": "breakfast" + "x-example": "147" }, { - "description": "Market (default us). One of us, ca, gb, au, ie, nz, ch, se. Must match the market the slug came from.", + "description": "Four-digit season; defaults to current year", + "in": "query", + "name": "season", + "type": "integer", + "x-example": 2026 + }, + { + "default": "active", + "description": "Roster type", "enum": [ - "us", - "ca", - "gb", - "au", - "ie", - "nz", - "ch", - "se" + "40Man", + "fullSeason", + "fullRoster", + "nonRosterInvitees", + "active", + "allTime", + "depthChart", + "gameday", + "coach" ], "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "roster_type", + "type": "string" } ], "produces": [ @@ -423359,7 +503426,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mcdonalds.menuResponseDoc" + "$ref": "#/definitions/mlb.rosterResponseDoc" } }, "400": { @@ -423392,131 +503459,159 @@ "ApiKeyAuth": [] } ], - "summary": "List one McDonald's menu category's items", + "summary": "Get an MLB team roster", "tags": [ - "McDonalds" + "MLB" ] } }, - "/mcdonalds/restaurant-menu": { + "/mlb/team-stats": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one restaurant's full menu with real prices: item name, image and independently-priced eat-in, pickup and delivery listings, since a McDonald's restaurant genuinely sells a different catalog (and different prices) per channel -- delivery is typically marked up over eat-in/pickup, and some items are channel-exclusive. Where McDonald's publishes a curated substitute or add-on list for an item (a meal's drink upgrade, a dip-able item's sauce choices), each real alternative is included with its own eat-in/pickup price delta -- plain entree or side substitution is not covered, since McDonald's does not publish a curated candidate list for it. This is the only endpoint in this family that publishes prices; every other McDonald's endpoint's source never does. US restaurants only. The store id comes from GET /mcdonalds/restaurants' store_id field.", - "operationId": "mcdonalds-restaurant-menu", + "description": "Returns one MLB team's statistics. `team_id` and `group` (`hitting`, `pitching`, `fielding`, `catching`, `running`, `game`, `team` or `streak`) are required. `season` defaults to the current year and `stat_type` to `season`. Other `stat_type` values cover splits and logs. Use `start_date` with `end_date` for date ranges.", + "operationId": "mlb-team-stats", "parameters": [ { - "description": "McDonald's numeric store number, from /mcdonalds/restaurants", + "description": "Numeric MLB team id", "in": "query", - "name": "store_id", + "name": "team_id", "required": true, "type": "string", - "x-example": "10528" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/mcdonalds.restaurantMenuResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + "x-example": "147" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Four-digit season", + "in": "query", + "name": "season", + "type": "integer" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Statistics group", + "enum": [ + "hitting", + "pitching", + "fielding", + "catching", + "running", + "game", + "team", + "streak" + ], + "in": "query", + "name": "group", + "required": true, + "type": "string", + "x-example": "hitting" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get one McDonald's restaurant's priced menu", - "tags": [ - "McDonalds" - ] - } - }, - "/mcdonalds/restaurants": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns McDonald's restaurants near a latitude/longitude, in any of ten markets. Each restaurant carries its store id, name, street address, city, state, postal code, phone, coordinates, timezone, open status, today's dining and drive-thru hours, the full published week of hours, and McDonald's own amenity codes (for example DRIVETHRU, WIFI, MOBILEOFFERS, GIFTCARDS). A delivery deep link is included where McDonald's publishes one; note it points at a third-party delivery platform. A coordinate with no McDonald's nearby returns an empty list rather than an error. Set country to search outside the United States -- the locator covers more markets than the menu and item endpoints do, so a country valid here is not necessarily valid there.", - "operationId": "mcdonalds-restaurants", - "parameters": [ + "default": "season", + "description": "Stats API stat type; defaults to season", + "enum": [ + "projected", + "projectedRos", + "yearByYear", + "yearByYearAdvanced", + "yearByYearPlayoffs", + "season", + "standard", + "advanced", + "career", + "careerRegularSeason", + "careerAdvanced", + "seasonAdvanced", + "careerStatSplits", + "careerPlayoffs", + "gameLog", + "playLog", + "pitchLog", + "pitchArsenal", + "outsAboveAverage", + "expectedStatistics", + "sabermetrics", + "sprayChart", + "tracking", + "vsPlayer", + "vsPlayerTotal", + "vsPlayer5Y", + "vsTeam", + "vsTeam5Y", + "vsTeamTotal", + "lastXGames", + "byDateRange", + "byDateRangeAdvanced", + "byMonth", + "byMonthPlayoffs", + "byDayOfWeek", + "byDayOfWeekPlayoffs", + "homeAndAway", + "homeAndAwayPlayoffs", + "winLoss", + "winLossPlayoffs", + "rankings", + "rankingsByYear", + "statsSingleSeason", + "statsSingleSeasonAdvanced", + "hotColdZones", + "availableStats", + "opponentsFaced", + "gameTypeStats", + "firstYearStats", + "lastYearStats", + "statSplits", + "statSplitsAdvanced", + "atGameStart", + "vsOpponents", + "sabermetricsMultiTeam", + "projected_Zips", + "projected_ZipsRos", + "projected_Zips2YR", + "projected_Zips3YR" + ], + "in": "query", + "name": "stat_type", + "type": "string" + }, { - "description": "Search center latitude", + "description": "MLB game type", + "enum": [ + "S", + "R", + "F", + "D", + "L", + "W", + "C", + "P", + "A", + "I", + "E" + ], "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 40.7128 + "name": "game_type", + "type": "string" }, { - "description": "Search center longitude", + "description": "Start date for byDateRange stat types; requires end_date", "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -74.006 + "name": "start_date", + "type": "string" }, { - "description": "Search radius in miles, 1-100 (default 20)", + "description": "End date for byDateRange stat types; requires start_date", "in": "query", - "name": "radius", - "type": "integer", - "x-example": 20 + "name": "end_date", + "type": "string" }, { - "description": "Maximum restaurants to return, 1-50 (default 10)", + "description": "Required by vsTeam stat types", "in": "query", - "name": "max_results", - "type": "integer", - "x-example": 10 + "name": "opponent_team_id", + "type": "string" }, { - "description": "Market to search (default us). One of us, gb, ca, au, de, ie, nz, ch, nl, se.", - "enum": [ - "us", - "gb", - "ca", - "au", - "de", - "ie", - "nz", - "ch", - "nl", - "se" - ], + "description": "Required by vsPlayer stat types", "in": "query", - "name": "country", - "type": "string", - "x-example": "us" + "name": "opponent_player_id", + "type": "string" } ], "produces": [ @@ -423526,7 +503621,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mcdonalds.restaurantsResponseDoc" + "$ref": "#/definitions/mlb.statsResponseDoc" } }, "400": { @@ -423535,18 +503630,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -423559,24 +503642,26 @@ "ApiKeyAuth": [] } ], - "summary": "Find McDonald's restaurants near a location", + "summary": "Get MLB team season statistics", "tags": [ - "McDonalds" + "MLB" ] } }, - "/mediaite/article": { + "/mlb/teams": { "get": { - "description": "Returns public Mediaite article metadata and body paragraphs from a canonical article URL. Mediaite One Sheet (premium) pages are flagged paywalled.", - "operationId": "mediaite-article", + "consumes": [ + "application/json" + ], + "description": "Lists the 30 MLB clubs for a `season` (four-digit year, default the current year). Each team has its id, name, club name, location, abbreviation, league, division, venue, first year of play and active flag.", + "operationId": "mlb-teams", "parameters": [ { - "description": "Canonical Mediaite article URL", + "description": "Four-digit season; defaults to current year", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.mediaite.com/media/tv/breaking-news-denied-white-house-blocks-cnn-and-ms-now-from-covering-state-dinner-despite-judges-ruling/" + "name": "season", + "type": "integer", + "x-example": 2026 } ], "produces": [ @@ -423586,7 +503671,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/mlb.teamsResponseDoc" } }, "400": { @@ -423595,8 +503680,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -423613,101 +503698,44 @@ "ApiKeyAuth": [] } ], - "summary": "Get Mediaite article content", + "summary": "List MLB teams", "tags": [ - "Mediaite" + "MLB" ] } }, - "/mediaite/author": { + "/mlb/transactions": { "get": { - "description": "Returns a Mediaite author profile by `slug` (for example `michael-luciano`) or by a mediaite.com author `url`; supply exactly one. The response has `name`, `bio`, `avatar_url`, `email`, `twitter` and about 10 recent articles, each with `title`, `url` and a short `date` label such as `Sep 24th` (no year or time). Contact fields are omitted when the page shows none.", - "operationId": "mediaite-author", + "description": "Lists MLB transactions between `start_date` and `end_date`, both required in `YYYY-MM-DD` format. Covers signings, trades, options, assignments, injured-list moves and releases. Narrow with `team_id` or `player_id`. Each entry has the date, effective date, type, description, player, and from and to teams, with a total `count`.", + "operationId": "mlb-transactions", "parameters": [ { - "description": "Author slug, e.g. michael-luciano", + "description": "Range start in YYYY-MM-DD format", "in": "query", - "name": "slug", + "name": "start_date", + "required": true, "type": "string", - "x-example": "michael-luciano" + "x-example": "2026-07-25" }, { - "description": "Canonical mediaite.com/author// URL; alternative to slug", + "description": "Range end in YYYY-MM-DD format", "in": "query", - "name": "url", + "name": "end_date", + "required": true, "type": "string", - "x-example": "https://www.mediaite.com/author/michael-luciano/" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.mediaiteAuthorResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + "x-example": "2026-08-01" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get a Mediaite author profile", - "tags": [ - "Mediaite" - ] - } - }, - "/mediaite/headlines": { - "get": { - "description": "Returns up to 20 recent Mediaite stories for one category. `section` is required and takes a slug such as `tv`, `politics`, `opinion` or `premium`; any other value returns an invalid-parameter error. Each item has a title, URL and publication time, and may include author, summary and image.", - "operationId": "mediaite-headlines", - "parameters": [ + "description": "Numeric MLB team id", + "in": "query", + "name": "team_id", + "type": "string" + }, { - "description": "Mediaite category slug", - "enum": [ - "media", - "tv", - "news", - "entertainment", - "sports", - "podcasts", - "tech", - "online", - "politics", - "trump", - "election-2020", - "opinion", - "columnists", - "crime", - "premium" - ], + "description": "Numeric MLB player id", "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "media" + "name": "player_id", + "type": "string" } ], "produces": [ @@ -423717,7 +503745,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/mlb.transactionsResponseDoc" } }, "400": { @@ -423738,16 +503766,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Mediaite section headlines", + "summary": "List MLB transactions", "tags": [ - "Mediaite" + "MLB" ] } }, - "/mediaite/news": { + "/mlive/news": { "get": { - "description": "Returns the 20 most recent Mediaite stories across the site, with no parameters. Each item has its title, canonical URL, summary, publication time and author. Use `mediaite-headlines` to read a single category instead.", - "operationId": "mediaite-news", + "description": "Returns current MLive top stories, including title, canonical URL, brief summary, author, publication time, and image where available. Article pages are not currently available, and category endpoints are deferred.", + "operationId": "mlive-news", "produces": [ "application/json" ], @@ -423776,16 +503804,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Mediaite top stories", + "summary": "Get MLive top stories", "tags": [ - "Mediaite" + "MLive" ] } }, - "/mediaite/sections": { + "/modaoperandi/categories": { "get": { - "description": "Lists the 15 Mediaite category slugs accepted as `section` by `mediaite-headlines`, such as `tv`, `politics`, `opinion` and `crime`. Each entry has its `slug`, display `name` and `url`. `premium` is the Mediaite One Sheet newsletter category, and `election-2020` is a legacy category that still publishes occasionally.", - "operationId": "mediaite-sections", + "consumes": [ + "application/json" + ], + "description": "Returns the live category tree, designer, color, size, availability, and sort values discovered from Moda Operandi's public catalog. Returned category and designer slugs are valid for modaoperandi-search.", + "operationId": "modaoperandi-categories", "produces": [ "application/json" ], @@ -423793,13 +503824,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/modaoperandi.categoriesDoc" } }, "503": { @@ -423814,24 +503839,31 @@ "ApiKeyAuth": [] } ], - "summary": "Get Mediaite sections", + "summary": "List Moda Operandi categories and facets", "tags": [ - "Mediaite" + "Moda Operandi" ] } }, - "/medicalnewstoday/article": { + "/modaoperandi/designers": { "get": { - "description": "Returns public article metadata and body paragraphs. No login or paywall is bypassed. URLs under the robots-disallowed /articles/mnt-* path are rejected.", - "operationId": "medicalnewstoday-article", + "consumes": [ + "application/json" + ], + "description": "Lists the designers currently available in one Moda Operandi department, chosen with the required `gender` (`women` or `men`). Each designer has its name, slug and item count, and each slug can be passed as `designer` to `modaoperandi-search`. The response also carries the `count` of designers.", + "operationId": "modaoperandi-designers", "parameters": [ { - "description": "Canonical Medical News Today article URL", + "description": "Department", + "enum": [ + "women", + "men" + ], "in": "query", - "name": "url", + "name": "gender", "required": true, "type": "string", - "x-example": "https://www.medicalnewstoday.com/articles/fda-clears-two-new-alzheimers-blood-tests-including-one-for-adults-as-young-as-40" + "x-example": "women" } ], "produces": [ @@ -423841,7 +503873,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/medicalnewstoday.articleResponseDoc" + "$ref": "#/definitions/modaoperandi.designersDoc" } }, "400": { @@ -423850,12 +503882,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -423868,30 +503894,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Medical News Today article", + "summary": "List Moda Operandi designers", "tags": [ - "Medical News Today" + "Moda Operandi" ] } }, - "/medicalnewstoday/author": { + "/modaoperandi/product": { "get": { - "description": "Returns a Medical News Today author profile by `slug` including its numeric id (for example `peter-brown-1595`) or by the profile `url`; provide one of the two. The response has the author's `name`, a `bio` when one is listed, and recent articles with title and URL, plus summary, date and image where present.", - "operationId": "medicalnewstoday-author", + "consumes": [ + "application/json" + ], + "description": "Returns one Moda Operandi product by its product page `url`: id, name, designer, color, price and currency, description, details, images, and the available sizes. It also reports `availability` and an `in_stock` flag for the product.", + "operationId": "modaoperandi-product", "parameters": [ { - "description": "Author slug including numeric id, e.g. peter-brown-1595", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "peter-brown-1595" - }, - { - "description": "Public author profile URL", + "description": "Moda Operandi product URL", "in": "query", "name": "url", + "required": true, "type": "string", - "x-example": "https://www.medicalnewstoday.com/authors/peter-brown-1595" + "x-example": "https://www.modaoperandi.com/women/p/melisse/the-minuit-knot-bag-in-black-taffeta/752807" } ], "produces": [ @@ -423901,7 +503924,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/medicalnewstoday.authorResponseDoc" + "$ref": "#/definitions/modaoperandi.productDoc" } }, "400": { @@ -423928,322 +503951,127 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Medical News Today author profile", + "summary": "Get a Moda Operandi product", "tags": [ - "Medical News Today" + "Moda Operandi" ] } }, - "/medicalnewstoday/headlines": { + "/modaoperandi/search": { "get": { - "description": "Returns the dated story cards from the Medical News Today Health News stream. `section` is required and currently accepts only `news`; `medicalnewstoday-sections` shows the accepted value. Each item has a title and URL, with a publication date such as `2026-09-26`, author, summary and image when the card shows them.", - "operationId": "medicalnewstoday-headlines", + "consumes": [ + "application/json" + ], + "description": "Searches or browses the Moda Operandi catalogue for one department, with `gender` (`women` or `men`) required and either `q` or `category` needed as well. Filter by `designer`, `color`, `size`, `availability`, price range or `on_sale`, and sort with `sort`. `limit` is 1 to 180 per page. Returns products plus facet counts and the `total`.", + "operationId": "modaoperandi-search", "parameters": [ { - "description": "Medical News Today newsroom section", + "description": "Department", "enum": [ - "news" + "women", + "men" ], "in": "query", - "name": "section", + "name": "gender", "required": true, "type": "string", - "x-example": "news" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/medicalnewstoday.headlinesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + "x-example": "women" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get Medical News Today section headlines", - "tags": [ - "Medical News Today" - ] - } - }, - "/medicalnewstoday/news": { - "get": { - "description": "Returns the current article cards from Medical News Today's Health News listing, with no parameters. Each item has a title and URL, plus publication date, author, summary and image when the card shows them. It is the way to read the latest health stories without choosing a section.", - "operationId": "medicalnewstoday-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/medicalnewstoday.newsResponseDoc" - } + "description": "Free-text search", + "in": "query", + "name": "q", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Medical News Today latest health news", - "tags": [ - "Medical News Today" - ] - } - }, - "/medicalnewstoday/sections": { - "get": { - "description": "Returns the exact public editorial news-section value accepted by medicalnewstoday-headlines. Health Topics and Health Hubs are educational resources, not newsroom sections.", - "operationId": "medicalnewstoday-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/medicalnewstoday.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Medical News Today newsroom sections", - "tags": [ - "Medical News Today" - ] - } - }, - "/men/article": { - "get": { - "description": "Returns a Manchester Evening News article by `url`, a canonical HTTPS article link. The response has the title, description, section, authors, lead image, publish and update times, body `paragraphs` and a `paywalled` flag. Subscriber-only or blocked articles return an upstream error.", - "operationId": "men-article", - "parameters": [ { - "description": "Canonical Manchester Evening News article URL", + "description": "Category slug from modaoperandi-categories", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.manchestereveningnews.co.uk/news/how-opt-out-app-pushes-17427838" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" - } + "name": "category", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Designer slug from modaoperandi-designers", + "in": "query", + "name": "designer", + "type": "string" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Color facet value", + "in": "query", + "name": "color", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get Manchester Evening News article content", - "tags": [ - "Manchester Evening News" - ] - } - }, - "/men/author": { - "get": { - "description": "Returns a Manchester Evening News author profile, identified by `slug` (such as `lee-swettenham`) or a canonical `manchestereveningnews.co.uk/authors//` `url`; provide exactly one. The response has the name, job title, bio, `email`, `twitter` and one page of recent articles with title, URL and label. Contact fields are absent when unlisted.", - "operationId": "men-author", - "parameters": [ + "description": "Size facet value", + "in": "query", + "name": "size", + "type": "string" + }, { - "description": "Author slug, e.g. lee-swettenham", + "description": "Attribute facet value", "in": "query", - "name": "slug", - "type": "string", - "x-example": "lee-swettenham" + "name": "attribute", + "type": "string" }, { - "description": "Canonical manchestereveningnews.co.uk/authors// URL; alternative to slug", + "description": "Availability", + "enum": [ + "available_now", + "preorder", + "trunkshow" + ], "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.manchestereveningnews.co.uk/authors/lee-swettenham/" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.menAuthorResponseDoc" - } + "name": "availability", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Minimum price", + "in": "query", + "name": "price_min", + "type": "number" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Maximum price", + "in": "query", + "name": "price_max", + "type": "number" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get a Manchester Evening News author profile", - "tags": [ - "Manchester Evening News" - ] - } - }, - "/men/headlines": { - "get": { - "description": "Returns current Manchester Evening News headlines for one section. `section` is required and takes a slug such as `news`, `news/greater-manchester-news`, `sport/football/transfer-news`, `whats-on/theatre-news` or `trips-and-breaks`. Each item has its title, URL, summary, publication time and image.", - "operationId": "men-headlines", - "parameters": [ + "description": "Sale items only", + "in": "query", + "name": "on_sale", + "type": "boolean" + }, { - "description": "Manchester Evening News section slug", + "description": "Sort", "enum": [ - "news", - "news/uk-news", - "news/greater-manchester-news", - "news/local-news", - "news/world-news", - "news/health", - "news/property", - "news/cost-of-living", - "news/money-saving", - "news/parenting", - "news/real-life", - "news/showbiz-news", - "news/tv", - "sport", - "sport/football", - "sport/football/football-news", - "sport/football/transfer-news", - "sport/boxing", - "sport/cricket", - "whats-on", - "whats-on/whats-on-news", - "whats-on/family-kids-news", - "whats-on/food-drink-news", - "whats-on/music-nightlife-news", - "whats-on/theatre-news", - "whats-on/shopping", - "trips-and-breaks" + "default", + "price_low_to_high", + "price_high_to_low", + "newest" ], "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "news" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" - } + "name": "sort", + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "default": 1, + "description": "1-based page", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] + "default": 60, + "description": "Results per page", + "in": "query", + "maximum": 180, + "minimum": 1, + "name": "limit", + "type": "integer" } ], - "summary": "Get Manchester Evening News section headlines", - "tags": [ - "Manchester Evening News" - ] - } - }, - "/men/news": { - "get": { - "description": "Returns the Manchester Evening News' current top stories, with no parameters. Each item has its title, URL, summary, author, publication time and image where available.", - "operationId": "men-news", "produces": [ "application/json" ], @@ -424251,39 +504079,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/modaoperandi.searchDoc" } }, - "503": { - "description": "Service Unavailable", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Manchester Evening News top stories", - "tags": [ - "Manchester Evening News" - ] - } - }, - "/men/sections": { - "get": { - "description": "Lists the Manchester Evening News sections accepted by `men-headlines`, such as `news`, `news/uk-news`, `sport/football`, `whats-on/music-nightlife-news` and `trips-and-breaks`. Each entry has a stable `slug`, display `name` and section `url`. Takes no parameters.", - "operationId": "men-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "503": { + "description": "Service Unavailable", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/app.Response" } } }, @@ -424292,27 +504100,23 @@ "ApiKeyAuth": [] } ], - "summary": "Get Manchester Evening News sections", + "summary": "Search Moda Operandi products", "tags": [ - "Manchester Evening News" + "Moda Operandi" ] } }, - "/mercari/autocomplete": { + "/modrinth/collection/{id}": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Mercari's own search-suggestion list for a partial keyword, in its own relevance order. An empty suggestion list is a normal outcome for obscure or gibberish input.", - "operationId": "mercari-autocomplete", + "description": "Reads public collection metadata and its complete native project-ID list. Retains native list order, visibility, timestamps and nullable fields while excluding the owner's account identifier. Does not fetch project details or private collections.", + "operationId": "modrinth-collection", "parameters": [ { - "description": "Partial keyword to get suggestions for", - "in": "query", - "name": "query", + "description": "Base62 collection ID from a public collection URL", + "in": "path", + "name": "id", "required": true, - "type": "string", - "x-example": "nike" + "type": "string" } ], "produces": [ @@ -424322,7 +504126,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mercari.autocompleteResponseDoc" + "$ref": "#/definitions/modrinth.ObjectResponseDoc" } }, "400": { @@ -424331,8 +504135,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -424349,19 +504153,25 @@ "ApiKeyAuth": [] } ], - "summary": "Mercari search autocomplete", + "summary": "Read a public Modrinth collection", "tags": [ - "Mercari" + "Modrinth" ] } }, - "/mercari/home": { + "/modrinth/collections": { "get": { - "consumes": [ - "application/json" + "description": "Uses the native bulk read for a JSON array of collection IDs. Preserves the returned order, omissions and complete per-collection project-ID lists. Excludes owner account identifiers and private data. An empty array returns an empty array.", + "operationId": "modrinth-collections", + "parameters": [ + { + "description": "Native JSON array of base62 collection IDs; [] is valid", + "in": "query", + "name": "ids", + "required": true, + "type": "string" + } ], - "description": "Returns Mercari's own curated home-feed recommendations: listing summaries (title, price, thumbnail, condition, seller).", - "operationId": "mercari-home", "produces": [ "application/json" ], @@ -424369,11 +504179,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mercari.homeResponseDoc" + "$ref": "#/definitions/modrinth.ArrayResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -424390,29 +504200,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Mercari home feed", + "summary": "Resolve public Modrinth collections", "tags": [ - "Mercari" + "Modrinth" ] } }, - "/mercari/item/{id}": { + "/modrinth/metadata/link-platforms": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a Mercari item-detail page: description, all photos, price, condition, category, hashtags, the shipping origin state, and a \"similar items\" carousel of related listings.", - "operationId": "mercari-item", - "parameters": [ - { - "description": "Mercari item id, e.g. from a search result's id field", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "m98337445585" - } - ], + "description": "Returns every native link-platform name and donation classification. This is public reference metadata and does not initiate donations, payments or account actions.", + "operationId": "modrinth-metadata-link-platforms", "produces": [ "application/json" ], @@ -424420,7 +504217,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mercari.ItemDetailResponse" + "$ref": "#/definitions/modrinth.ArrayResponseDoc" } }, "400": { @@ -424435,12 +504232,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -424453,19 +504244,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Mercari item detail", + "summary": "Get Modrinth link platforms", "tags": [ - "Mercari" + "Modrinth" ] } }, - "/mercari/master": { + "/modrinth/metadata/loader-fields": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Mercari's full reference taxonomy in one call: every category (with parent linkage), every recognized brand, and every clothing/shoe/apparel size. Large (tens of thousands of brand entries) and effectively static -- cache this response rather than polling it.", - "operationId": "mercari-master", + "description": "Returns every distinct supported field advertised by the native loader catalog, preserving first source occurrence. Names refresh with the loader catalog rather than a hard-coded field list.", + "operationId": "modrinth-metadata-loader-fields", "produces": [ "application/json" ], @@ -424473,11 +504261,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mercari.masterResponseDoc" + "$ref": "#/definitions/modrinth.StringListResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -424494,27 +504288,23 @@ "ApiKeyAuth": [] } ], - "summary": "Get Mercari full taxonomy (categories, brands, sizes)", + "summary": "Discover Modrinth loader fields", "tags": [ - "Mercari" + "Modrinth" ] } }, - "/mercari/search": { + "/modrinth/metadata/loader-fields/{field}": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Mercari's live resale marketplace by free-text keyword, returning listing summaries (title, price, thumbnail, condition, seller) plus the total matching count.", - "operationId": "mercari-search", + "description": "Returns all native enumerable values and metadata for a field from loader-field discovery. Null ordering/type/major and explicit false remain distinct; optional upstream metadata filters are not exposed.", + "operationId": "modrinth-metadata-loader-field-values", "parameters": [ { - "description": "Free-text keyword search", - "in": "query", - "name": "query", + "description": "Source field name from loader-field discovery", + "in": "path", + "name": "field", "required": true, - "type": "string", - "x-example": "nike jacket" + "type": "string" } ], "produces": [ @@ -424524,7 +504314,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mercari.searchResponseDoc" + "$ref": "#/definitions/modrinth.ArrayResponseDoc" } }, "400": { @@ -424533,8 +504323,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -424551,29 +504341,16 @@ "ApiKeyAuth": [] } ], - "summary": "Search Mercari listings", + "summary": "Get Modrinth loader-field values", "tags": [ - "Mercari" + "Modrinth" ] } }, - "/meta-jobs/job": { + "/modrinth/metadata/loaders": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Meta Careers posting by its numeric job id (the `id` field returned by search or list).", - "operationId": "meta-jobs-job", - "parameters": [ - { - "description": "Meta job id", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "1238249364564427" - } - ], + "description": "Returns native v3 loader names, supported games, project types, supported fields and metadata. Use the dedicated loader-field discovery to obtain accepted field names.", + "operationId": "modrinth-metadata-loaders", "produces": [ "application/json" ], @@ -424581,7 +504358,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metajobs.jobResponseDoc" + "$ref": "#/definitions/modrinth.ArrayResponseDoc" } }, "400": { @@ -424596,12 +504373,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -424614,33 +504385,23 @@ "ApiKeyAuth": [] } ], - "summary": "Meta Jobs single posting", + "summary": "Get Modrinth loader capabilities", "tags": [ - "Meta Jobs" + "Modrinth" ] } }, - "/meta-jobs/list": { + "/modrinth/organization/{id}": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a page of Meta's own public job sitemap -- every open requisition's id, canonical URL, and last-modified timestamp, with no team/location/keyword filtering. Use this for full-catalog enumeration or change tracking via last_modified; use search when you need to filter by team, technology, location, employment type, or keyword.", - "operationId": "meta-jobs-list", + "description": "Reads an organization by its native ID or slug and returns its public name, description and icon metadata. Account, team-member and moderation data are excluded.", + "operationId": "modrinth-organization", "parameters": [ { - "description": "Page number, 1-based, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Page size, defaults to 50, maxes at 200", - "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 50 + "description": "Organization ID or slug from a public organization URL or project metadata", + "in": "path", + "name": "id", + "required": true, + "type": "string" } ], "produces": [ @@ -424650,7 +504411,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metajobs.listResponseDoc" + "$ref": "#/definitions/modrinth.ObjectResponseDoc" } }, "400": { @@ -424659,8 +504420,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -424677,81 +504438,22 @@ "ApiKeyAuth": [] } ], - "summary": "Meta Jobs catalog listing", + "summary": "Read a public Modrinth organization", "tags": [ - "Meta Jobs" + "Modrinth" ] } }, - "/meta-jobs/search": { + "/modrinth/organization/{id}/projects": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Meta's public careers site (metacareers.com) with the same team/technology/location/employment-type/keyword/remote/sort filters the live search page offers. All filters are optional and combine with AND semantics; an empty request returns Meta's entire open-requisition catalog in one response. `q` matches team, technology, location, or ref/req-code names -- it is NOT a free-text search over job titles or descriptions. `teams` enum (org teams + technologies, both use the same field): `Advertising Technology`, `AR/VR`, `Artificial Intelligence`, `Business Development & Partnerships`, `Communications & Public Policy`, `Creative`, `Data & Analytics`, `Data Center`, `Design & User Experience`, `Enterprise Engineering`, `Global Operations`, `Infrastructure`, `Internship - Business`, `Internship - Engineering, Tech & Design`, `Internship - PhD`, `Legal, Finance, Facilities & Admin`, `People & Recruiting`, `Product Management`, `Research`, `Sales & Marketing`, `Security`, `Software Engineering`, `Technical Program Management`, `University Grad - Business`, `University Grad - Engineering, Tech & Design`, `University Grad - PhD & Postdoc`, `Facebook`, `Messenger`, `Instagram`, `WhatsApp`, `Meta Quest`. `roles` enum: `Full time employment`, `Internship`, `Short term employment`. `results_per_page` enum: `all`, `five`, `ten`.", - "operationId": "meta-jobs-search", + "description": "Returns every anonymously visible project published by the organization in native order, including reviewed game, compatibility and public server metadata. Validates organization identity before accepting the list. Does not add project-type filters, sorting or pagination.", + "operationId": "modrinth-organization-projects", "parameters": [ { - "description": "Facet-name keyword: matches team, technology, location, or ref/req-code -- not a title/description search", - "in": "query", - "name": "q", - "type": "string", - "x-example": "Instagram" - }, - { - "collectionFormat": "csv", - "description": "Repeatable team-or-technology filter (OR); see teams enum above", - "in": "query", - "items": { - "type": "string" - }, - "name": "teams", - "type": "array", - "x-example": "Software Engineering" - }, - { - "collectionFormat": "csv", - "description": "Repeatable employment-type filter (OR); see roles enum above", - "in": "query", - "items": { - "type": "string" - }, - "name": "roles", - "type": "array", - "x-example": "Full time employment" - }, - { - "collectionFormat": "csv", - "description": "Repeatable location-id filter (OR) in Meta's own id format, e.g. menlo-park, london -- not a closed enum", - "in": "query", - "items": { - "type": "string" - }, - "name": "offices", - "type": "array", - "x-example": "menlo-park" - }, - { - "description": "Restrict to remote-only postings", - "in": "query", - "name": "is_remote_only", - "type": "boolean" - }, - { - "description": "Sort newest-first instead of relevance", - "in": "query", - "name": "sort_by_new", - "type": "boolean" - }, - { - "description": "Response size cap: all, five, ten", - "enum": [ - "all", - "five", - "ten" - ], - "in": "query", - "name": "results_per_page", + "description": "Organization ID or slug from a public organization URL or project metadata", + "in": "path", + "name": "id", + "required": true, "type": "string" } ], @@ -424762,7 +504464,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metajobs.searchResponseDoc" + "$ref": "#/definitions/modrinth.ArrayResponseDoc" } }, "400": { @@ -424771,8 +504473,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -424789,62 +504491,23 @@ "ApiKeyAuth": [] } ], - "summary": "Meta Jobs search", + "summary": "Read a public organization's Modrinth projects", "tags": [ - "Meta Jobs" + "Modrinth" ] } }, - "/metacritic/browse": { + "/modrinth/organizations": { "get": { - "consumes": [ - "application/json" - ], - "description": "Browse Metacritic titles by content type, optionally filtered by genre and ordered by Metascore, popularity, or release date. Returns paginated title cards with Metascore and user score.", - "operationId": "metacritic-browse", + "description": "Uses the native bulk read for a JSON array of organization IDs or slugs. Preserves native response order and omissions instead of creating entries for unknown IDs. Returns public organization metadata without members or account data. An empty array returns an empty array.", + "operationId": "modrinth-organizations", "parameters": [ { - "description": "Content type", - "enum": [ - "game", - "movie", - "tv" - ], + "description": "Native JSON array of organization IDs or slugs; [] is valid", "in": "query", - "name": "type", + "name": "ids", "required": true, - "type": "string", - "x-example": "game" - }, - { - "description": "Genre filter (e.g. Action)", - "in": "query", - "name": "genre", - "type": "string" - }, - { - "description": "Sort order", - "enum": [ - "score", - "popularity", - "release_date", - "oldest" - ], - "in": "query", - "name": "sort", "type": "string" - }, - { - "description": "1-based page number (default 1)", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Results per page (default 24, max 100)", - "in": "query", - "name": "per_page", - "type": "integer" } ], "produces": [ @@ -424854,7 +504517,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metacritic.browseResponseDoc" + "$ref": "#/definitions/modrinth.ArrayResponseDoc" } }, "400": { @@ -424863,18 +504526,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -424887,27 +504538,26 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Metacritic titles", + "summary": "Resolve public Modrinth organizations", "tags": [ - "Metacritic" + "Modrinth" ] } }, - "/metacritic/game/{slug}": { + "/modrinth/project/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Metacritic game: Metascore (critic) and user score with sentiment and review counts, genres, per-platform scores, developer/publisher, rating, release date, and trailer.", - "operationId": "metacritic-game", + "description": "Returns the native public Modrinth metadata for this resource. See the endpoint reference for exact request and response behavior.", + "operationId": "modrinth-project", "parameters": [ { - "description": "Metacritic game slug", + "description": "Native id", "in": "path", - "name": "slug", + "name": "id", "required": true, - "type": "string", - "x-example": "elden-ring" + "type": "string" } ], "produces": [ @@ -424917,7 +504567,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metacritic.productResponseDoc" + "$ref": "#/definitions/modrinth.ObjectResponseDoc" } }, "400": { @@ -424932,12 +504582,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -424950,49 +504594,25 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Metacritic game", + "summary": "Get a Modrinth project", "tags": [ - "Metacritic" + "Modrinth" ] } }, - "/metacritic/game/{slug}/critic-reviews": { + "/modrinth/project/{id}/check": { "get": { "consumes": [ "application/json" ], - "description": "Lists critic reviews for a Metacritic game by `slug` (such as `elden-ring`). Each review has the publication, score, quote, author, date, platform and source URL. `sort` is `date` (default), `score` or `publication`; `page` defaults to 1 and `per_page` to 20 with a max of 50. The response includes the `total` count.", - "operationId": "metacritic-game-critic-reviews", + "description": "Returns the native public Modrinth metadata for this resource. See the endpoint reference for exact request and response behavior.", + "operationId": "modrinth-check-project", "parameters": [ { - "description": "Metacritic game slug", + "description": "Native id", "in": "path", - "name": "slug", + "name": "id", "required": true, - "type": "string", - "x-example": "elden-ring" - }, - { - "description": "1-based page number (default 1)", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Results per page (default 20, max 50)", - "in": "query", - "name": "per_page", - "type": "integer" - }, - { - "description": "Sort order", - "enum": [ - "date", - "score", - "publication" - ], - "in": "query", - "name": "sort", "type": "string" } ], @@ -425003,7 +504623,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metacritic.criticReviewsResponseDoc" + "$ref": "#/definitions/modrinth.ObjectResponseDoc" } }, "400": { @@ -425018,12 +504638,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -425036,49 +504650,25 @@ "ApiKeyAuth": [] } ], - "summary": "List a Metacritic game's critic reviews", + "summary": "Resolve a project ID or slug", "tags": [ - "Metacritic" + "Modrinth" ] } }, - "/metacritic/game/{slug}/user-reviews": { + "/modrinth/project/{id}/dependencies": { "get": { "consumes": [ "application/json" ], - "description": "Returns paginated user reviews for a game: author, score (0-10), quote, date, platform, helpfulness, and spoiler flag.", - "operationId": "metacritic-game-user-reviews", + "description": "Returns the native public Modrinth metadata for this resource. See the endpoint reference for exact request and response behavior.", + "operationId": "modrinth-dependencies", "parameters": [ { - "description": "Metacritic game slug", + "description": "Native id", "in": "path", - "name": "slug", + "name": "id", "required": true, - "type": "string", - "x-example": "elden-ring" - }, - { - "description": "1-based page number (default 1)", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Results per page (default 20, max 50)", - "in": "query", - "name": "per_page", - "type": "integer" - }, - { - "description": "Sort order", - "enum": [ - "date", - "score", - "helpful" - ], - "in": "query", - "name": "sort", "type": "string" } ], @@ -425089,7 +504679,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metacritic.userReviewsResponseDoc" + "$ref": "#/definitions/modrinth.ObjectResponseDoc" } }, "400": { @@ -425104,12 +504694,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -425122,27 +504706,23 @@ "ApiKeyAuth": [] } ], - "summary": "List a Metacritic game's user reviews", + "summary": "Get project dependency metadata", "tags": [ - "Metacritic" + "Modrinth" ] } }, - "/metacritic/movie/{slug}": { + "/modrinth/project/{id}/disclosures": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a Metacritic movie: Metascore (critic) and user score with sentiment and review counts, genres, cast/crew, rating, runtime, release date, IMDb id, and trailer.", - "operationId": "metacritic-movie", + "description": "Returns all current public declarations, their type-specific fields and timestamps. Empty declarations are valid. Public AI/system/telemetry/derivative/paid-feature/archive metadata is preserved; moderation, authorship, lock and deletion controls are omitted. No credentials, private/member view or write operation is used.", + "operationId": "modrinth-project-disclosures", "parameters": [ { - "description": "Metacritic movie slug", + "description": "Native project ID or canonical slug", "in": "path", - "name": "slug", + "name": "id", "required": true, - "type": "string", - "x-example": "oppenheimer" + "type": "string" } ], "produces": [ @@ -425152,7 +504732,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metacritic.productResponseDoc" + "$ref": "#/definitions/modrinth.ObjectResponseDoc" } }, "400": { @@ -425167,12 +504747,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -425185,50 +504759,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Metacritic movie", + "summary": "Get Modrinth public project disclosures", "tags": [ - "Metacritic" + "Modrinth" ] } }, - "/metacritic/movie/{slug}/critic-reviews": { + "/modrinth/project/{id}/version": { "get": { "consumes": [ "application/json" ], - "description": "Lists critic reviews for a Metacritic movie by `slug` (such as `oppenheimer`). Each review has the publication, score, quote, author, date and source URL. `sort` is `date` (default), `score` or `publication`; `page` defaults to 1 and `per_page` to 20 with a max of 50. The response includes the `total` count.", - "operationId": "metacritic-movie-critic-reviews", + "description": "Returns the native public Modrinth metadata for this resource. See the endpoint reference for exact request and response behavior.", + "operationId": "modrinth-project-versions", "parameters": [ { - "description": "Metacritic movie slug", + "description": "Native id", "in": "path", - "name": "slug", + "name": "id", "required": true, - "type": "string", - "x-example": "oppenheimer" + "type": "string" }, { - "description": "1-based page number (default 1)", + "description": "JSON array of loader names from the loader tag catalog", "in": "query", - "name": "page", - "type": "integer" + "name": "loaders", + "type": "string" }, { - "description": "Results per page (default 20, max 50)", + "description": "JSON array of game versions from the game_version tag catalog", "in": "query", - "name": "per_page", - "type": "integer" + "name": "game_versions", + "type": "string" }, { - "description": "Sort order", - "enum": [ - "date", - "score", - "publication" - ], + "description": "Native featured selector; false is distinct from omission", "in": "query", - "name": "sort", - "type": "string" + "name": "featured", + "type": "boolean" + }, + { + "default": true, + "description": "Include changelog fields", + "in": "query", + "name": "include_changelog", + "type": "boolean" } ], "produces": [ @@ -425238,7 +504813,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metacritic.criticReviewsResponseDoc" + "$ref": "#/definitions/modrinth.ArrayResponseDoc" } }, "400": { @@ -425253,12 +504828,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -425271,49 +504840,32 @@ "ApiKeyAuth": [] } ], - "summary": "List a Metacritic movie's critic reviews", + "summary": "List project versions", "tags": [ - "Metacritic" + "Modrinth" ] } }, - "/metacritic/movie/{slug}/user-reviews": { + "/modrinth/project/{id}/version/{number}": { "get": { "consumes": [ "application/json" ], - "description": "Returns paginated user reviews for a movie: author, score (0-10), quote, date, helpfulness, and spoiler flag.", - "operationId": "metacritic-movie-user-reviews", + "description": "Returns the native public Modrinth metadata for this resource. See the endpoint reference for exact request and response behavior.", + "operationId": "modrinth-project-version", "parameters": [ { - "description": "Metacritic movie slug", + "description": "Native id", "in": "path", - "name": "slug", + "name": "id", "required": true, - "type": "string", - "x-example": "oppenheimer" - }, - { - "description": "1-based page number (default 1)", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Results per page (default 20, max 50)", - "in": "query", - "name": "per_page", - "type": "integer" + "type": "string" }, { - "description": "Sort order", - "enum": [ - "date", - "score", - "helpful" - ], - "in": "query", - "name": "sort", + "description": "Native number", + "in": "path", + "name": "number", + "required": true, "type": "string" } ], @@ -425324,7 +504876,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metacritic.userReviewsResponseDoc" + "$ref": "#/definitions/modrinth.ObjectResponseDoc" } }, "400": { @@ -425339,12 +504891,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -425357,27 +504903,26 @@ "ApiKeyAuth": [] } ], - "summary": "List a Metacritic movie's user reviews", + "summary": "Get a project version by number or ID", "tags": [ - "Metacritic" + "Modrinth" ] } }, - "/metacritic/tv/{slug}": { + "/modrinth/projects": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Metacritic TV show: Metascore (critic) and user score with sentiment and review counts, genres, networks, season count, rating, release date, IMDb id, and trailer.", - "operationId": "metacritic-tv", + "description": "Returns the native public Modrinth metadata for this resource. See the endpoint reference for exact request and response behavior.", + "operationId": "modrinth-projects", "parameters": [ { - "description": "Metacritic TV show slug", - "in": "path", - "name": "slug", + "description": "JSON-encoded array of native identifiers; absent members are omitted", + "in": "query", + "name": "ids", "required": true, - "type": "string", - "x-example": "shogun" + "type": "string" } ], "produces": [ @@ -425387,7 +504932,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metacritic.productResponseDoc" + "$ref": "#/definitions/modrinth.ArrayResponseDoc" } }, "400": { @@ -425402,12 +504947,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -425420,50 +504959,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Metacritic TV show", + "summary": "Get native multiple-project metadata", "tags": [ - "Metacritic" + "Modrinth" ] } }, - "/metacritic/tv/{slug}/critic-reviews": { + "/modrinth/projects_random": { "get": { "consumes": [ "application/json" ], - "description": "Lists critic reviews for a Metacritic TV show by `slug` (such as `breaking-bad`). Each review has the publication, score, quote, author, date and source URL. `sort` is `date` (default), `score` or `publication`; `page` defaults to 1 and `per_page` to 20 with a max of 50. The response includes the `total` count.", - "operationId": "metacritic-tv-critic-reviews", + "description": "Returns the native public Modrinth metadata for this resource. See the endpoint reference for exact request and response behavior.", + "operationId": "modrinth-random-projects", "parameters": [ { - "description": "Metacritic TV show slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "shogun" - }, - { - "description": "1-based page number (default 1)", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Results per page (default 20, max 50)", + "description": "Number of random projects, 1 to 100", "in": "query", - "name": "per_page", + "name": "count", + "required": true, "type": "integer" - }, - { - "description": "Sort order", - "enum": [ - "date", - "score", - "publication" - ], - "in": "query", - "name": "sort", - "type": "string" } ], "produces": [ @@ -425473,7 +504988,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metacritic.criticReviewsResponseDoc" + "$ref": "#/definitions/modrinth.ArrayResponseDoc" } }, "400": { @@ -425488,12 +505003,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -425506,50 +505015,58 @@ "ApiKeyAuth": [] } ], - "summary": "List a Metacritic TV show's critic reviews", + "summary": "Get native random projects", "tags": [ - "Metacritic" + "Modrinth" ] } }, - "/metacritic/tv/{slug}/user-reviews": { + "/modrinth/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns paginated user reviews for a TV show: author, score (0-10), quote, date, helpfulness, and spoiler flag.", - "operationId": "metacritic-tv-user-reviews", + "description": "Returns the native public Modrinth metadata for this resource. See the endpoint reference for exact request and response behavior.", + "operationId": "modrinth-search", "parameters": [ { - "description": "Metacritic TV show slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "shogun" - }, - { - "description": "1-based page number (default 1)", + "description": "Search text", "in": "query", - "name": "page", - "type": "integer" + "name": "query", + "type": "string" }, { - "description": "Results per page (default 20, max 50)", + "description": "Native JSON array of OR groups joined by AND; see the full facet reference", "in": "query", - "name": "per_page", - "type": "integer" + "name": "facets", + "type": "string" }, { - "description": "Sort order", + "description": "Native search order", "enum": [ - "date", - "score", - "helpful" + "relevance", + "downloads", + "follows", + "newest", + "updated" ], "in": "query", - "name": "sort", + "name": "index", "type": "string" + }, + { + "default": 0, + "description": "Native result offset, at least zero", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "default": 10, + "description": "Native result limit, zero to 100", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -425559,7 +505076,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metacritic.userReviewsResponseDoc" + "$ref": "#/definitions/modrinth.ObjectResponseDoc" } }, "400": { @@ -425574,12 +505091,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -425592,54 +505103,19 @@ "ApiKeyAuth": [] } ], - "summary": "List a Metacritic TV show's user reviews", + "summary": "Search Modrinth projects", "tags": [ - "Metacritic" + "Modrinth" ] } }, - "/metaculus/category/{slug}/questions": { + "/modrinth/statistics": { "get": { "consumes": [ "application/json" ], - "description": "Returns Metaculus question rows for a category. Allowed category slugs: artificial-intelligence, computing-and-math, cryptocurrencies, economy-business, elections, environment-climate, geopolitics, health-pandemics, law, metaculus, natural-sciences, nuclear, politics, social-sciences, space, sports-entertainment, technology.", - "operationId": "metaculus-category-questions", - "parameters": [ - { - "description": "Metaculus category slug", - "enum": [ - "artificial-intelligence", - "computing-and-math", - "cryptocurrencies", - "economy-business", - "elections", - "environment-climate", - "geopolitics", - "health-pandemics", - "law", - "metaculus", - "natural-sciences", - "nuclear", - "politics", - "social-sciences", - "space", - "sports-entertainment", - "technology" - ], - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "artificial-intelligence" - }, - { - "description": "Rows to return, default 10, max 25", - "in": "query", - "name": "limit", - "type": "integer" - } - ], + "description": "Returns the native public Modrinth metadata for this resource. See the endpoint reference for exact request and response behavior.", + "operationId": "modrinth-statistics", "produces": [ "application/json" ], @@ -425647,7 +505123,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metaculus.questionsResponseDoc" + "$ref": "#/definitions/modrinth.ObjectResponseDoc" } }, "400": { @@ -425662,18 +505138,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -425686,30 +505150,25 @@ "ApiKeyAuth": [] } ], - "summary": "Metaculus category questions", + "summary": "Get Modrinth instance statistics", "tags": [ - "Metaculus" + "Modrinth" ] } }, - "/metaculus/comments-feed": { + "/modrinth/tag/license/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns Metaculus question rows for the questions referenced by the most recent public comments, in comment recency order. Comment bodies are not exposed.", - "operationId": "metaculus-comments-feed", + "description": "Returns the native public Modrinth metadata for this resource. See the endpoint reference for exact request and response behavior.", + "operationId": "modrinth-license", "parameters": [ { - "description": "Rows to return, default 10, max 25", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Optional Metaculus topic slug", - "in": "query", - "name": "topic", + "description": "Native id", + "in": "path", + "name": "id", + "required": true, "type": "string" } ], @@ -425720,7 +505179,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metaculus.questionsResponseDoc" + "$ref": "#/definitions/modrinth.ObjectResponseDoc" } }, "400": { @@ -425735,18 +505194,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -425759,33 +505206,36 @@ "ApiKeyAuth": [] } ], - "summary": "Metaculus comments feed", + "summary": "Get source license title and text", "tags": [ - "Metaculus" + "Modrinth" ] } }, - "/metaculus/project/{slug}/questions": { + "/modrinth/tag/{type}": { "get": { "consumes": [ "application/json" ], - "description": "Returns Metaculus question rows for one public project, filtered by its slug. A slug that does not exist returns 404.", - "operationId": "metaculus-project-questions", + "description": "Returns the native public Modrinth metadata for this resource. See the endpoint reference for exact request and response behavior.", + "operationId": "modrinth-tags", "parameters": [ { - "description": "Metaculus project slug", + "description": "Native type", + "enum": [ + "category", + "loader", + "game_version", + "license", + "donation_platform", + "report_type", + "project_type", + "side_type" + ], "in": "path", - "name": "slug", + "name": "type", "required": true, - "type": "string", - "x-example": "ai-2027" - }, - { - "description": "Rows to return, default 10, max 25", - "in": "query", - "name": "limit", - "type": "integer" + "type": "string" } ], "produces": [ @@ -425795,7 +505245,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metaculus.questionsResponseDoc" + "$ref": "#/definitions/modrinth.ArrayResponseDoc" } }, "400": { @@ -425810,18 +505260,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -425834,27 +505272,36 @@ "ApiKeyAuth": [] } ], - "summary": "Metaculus project questions", + "summary": "Discover Modrinth catalog values", "tags": [ - "Metaculus" + "Modrinth" ] } }, - "/metaculus/question/{id}": { + "/modrinth/updates/{id}/forge_updates.json": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Metaculus question by numeric `id` (a question or post id). The response has the title, status, question type, unit, open, close and resolve times, forecaster and forecast counts, comment count, latest forecast center and bounds, categories, projects and URL.", - "operationId": "metaculus-question", + "description": "Returns the native public Modrinth metadata for this resource. See the endpoint reference for exact request and response behavior.", + "operationId": "modrinth-forge-updates", "parameters": [ { - "description": "Metaculus question or post id", + "description": "Native id", "in": "path", "name": "id", "required": true, - "type": "string", - "x-example": "43612" + "type": "string" + }, + { + "description": "Native NeoForge selection; omitted retains Forge default", + "enum": [ + "include", + "only" + ], + "in": "query", + "name": "neoforge", + "type": "string" } ], "produces": [ @@ -425864,7 +505311,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metaculus.questionResponseDoc" + "$ref": "#/definitions/modrinth.ObjectResponseDoc" } }, "400": { @@ -425879,18 +505326,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -425903,46 +505338,75 @@ "ApiKeyAuth": [] } ], - "summary": "Metaculus question detail", + "summary": "Get native Forge update metadata", "tags": [ - "Metaculus" + "Modrinth" ] } }, - "/metaculus/question/{id}/forecast-history": { + "/modrinth/v3/search": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns public aggregation forecast history points for one Metaculus question. The `method` enum accepts `recency_weighted`, `unweighted`, and `single_aggregation`.", - "operationId": "metaculus-question-forecast-history", + "description": "Returns native v3 name/summary/project_types/version-aware hits, page, hits_per_page and total_hits. Uses native offset/limit and filter expressions unchanged. Source limit0 resolves to1, values above100 cap at100; page is one-based. New_filters takes precedence over legacy filters/version; version is a legacy expression clause, not a bare game-version value. Use search options and native metadata catalogs for values.", + "operationId": "modrinth-search-v3", "parameters": [ { - "description": "Metaculus question or post id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "43612" + "description": "Native search text", + "in": "query", + "name": "query", + "type": "string" }, { - "description": "Aggregation method", + "description": "Native v3 order", "enum": [ - "recency_weighted", - "unweighted", - "single_aggregation" + "relevance", + "downloads", + "follows", + "newest", + "updated", + "date_created", + "date_modified", + "minecraft_java_server.verified_plays_2w", + "minecraft_java_server.ping.data.players_online" ], "in": "query", - "name": "method", - "type": "string", - "x-example": "recency_weighted" + "name": "index", + "type": "string" }, { - "description": "Maximum history points to return, default 500, max 2000", + "description": "Native nonnegative offset; default0", "in": "query", - "name": "max_points", - "type": "integer", - "x-example": 500 + "name": "offset", + "type": "integer" + }, + { + "description": "Native nonnegative limit; default10; source normalizes to1–100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Native current filter expression, forwarded unchanged", + "in": "query", + "name": "new_filters", + "type": "string" + }, + { + "description": "Legacy JSON array of string arrays using v3 field names", + "in": "query", + "name": "facets", + "type": "string" + }, + { + "description": "Legacy filter-expression clause", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Legacy secondary filter-expression clause", + "in": "query", + "name": "version", + "type": "string" } ], "produces": [ @@ -425952,7 +505416,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metaculus.forecastHistoryResponseDoc" + "$ref": "#/definitions/modrinth.ObjectResponseDoc" } }, "400": { @@ -425961,24 +505425,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -425991,27 +505437,26 @@ "ApiKeyAuth": [] } ], - "summary": "Metaculus question forecast history", + "summary": "Search current Modrinth projects and servers", "tags": [ - "Metaculus" + "Modrinth" ] - } - }, - "/metaculus/question/{id}/forecasts": { - "get": { + }, + "post": { "consumes": [ "application/json" ], - "description": "Returns the latest forecast summary per aggregation method for one Metaculus question, by numeric `id`. Each method has its name, forecaster count, center, lower and upper values, and number of history points. `recency_weighted`, `unweighted` and `single_aggregation` are listed first when present. The question details come with it.", - "operationId": "metaculus-question-forecasts", + "description": "Performs the upstream native POST search read. Offset and limit are decimal strings in this body; show_metadata preserves explicit false and optionally returns native per-hit score/sort metadata. No projects or account state are modified. Other fields and filter precedence match GET search.", + "operationId": "modrinth-search-v3-body", "parameters": [ { - "description": "Metaculus question or post id", - "in": "path", - "name": "id", + "description": "Native search body; offset/limit are strings", + "in": "body", + "name": "body", "required": true, - "type": "string", - "x-example": "43612" + "schema": { + "$ref": "#/definitions/modrinth.SearchV3BodyRequest" + } } ], "produces": [ @@ -426021,7 +505466,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metaculus.forecastsResponseDoc" + "$ref": "#/definitions/modrinth.ObjectResponseDoc" } }, "400": { @@ -426030,26 +505475,40 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } - }, - "500": { - "description": "Internal Server Error", + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Modrinth using the native v3 JSON body", + "tags": [ + "Modrinth" + ] + } + }, + "/modrinth/v3/search/options": { + "get": { + "description": "Returns all supported indexes, published server UI region/language choices, exact native content/status filter expressions, disclosure search flags and catalog paths for dynamic project types, categories, loaders, versions, environments and licenses. These reference choices do not restrict the native expression grammar.", + "operationId": "modrinth-search-v3-options", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/modrinth.ObjectResponseDoc" } }, - "503": { - "description": "Service Unavailable", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -426060,27 +505519,26 @@ "ApiKeyAuth": [] } ], - "summary": "Metaculus question forecasts", + "summary": "Discover Modrinth v3 search options", "tags": [ - "Metaculus" + "Modrinth" ] } }, - "/metaculus/question/{id}/metadata": { + "/modrinth/version/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns public metadata for one Metaculus question, including option labels, option history, scaling metadata, resolution fields, and timing fields when present.", - "operationId": "metaculus-question-metadata", + "description": "Returns the native public Modrinth metadata for this resource. See the endpoint reference for exact request and response behavior.", + "operationId": "modrinth-version", "parameters": [ { - "description": "Metaculus question or post id", + "description": "Native id", "in": "path", "name": "id", "required": true, - "type": "string", - "x-example": "43731" + "type": "string" } ], "produces": [ @@ -426090,7 +505548,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metaculus.metadataResponseDoc" + "$ref": "#/definitions/modrinth.ObjectResponseDoc" } }, "400": { @@ -426105,18 +505563,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -426129,39 +505575,28 @@ "ApiKeyAuth": [] } ], - "summary": "Metaculus question metadata", + "summary": "Get a version by ID", "tags": [ - "Metaculus" + "Modrinth" ] } }, - "/metaculus/question/{id}/options": { - "get": { + "/modrinth/version_file/project": { + "post": { "consumes": [ "application/json" ], - "description": "Returns public multiple-choice option labels and latest option-level forecast values for one Metaculus question. The `method` enum accepts `recency_weighted`, `unweighted`, and `single_aggregation`.", - "operationId": "metaculus-question-options", + "description": "Returns the native public Modrinth metadata for this resource. See the endpoint reference for exact request and response behavior.", + "operationId": "modrinth-file-projects", "parameters": [ { - "description": "Metaculus question or post id", - "in": "path", - "name": "id", + "description": "Native metadata lookup body", + "in": "body", + "name": "body", "required": true, - "type": "string", - "x-example": "43731" - }, - { - "description": "Aggregation method", - "enum": [ - "recency_weighted", - "unweighted", - "single_aggregation" - ], - "in": "query", - "name": "method", - "type": "string", - "x-example": "recency_weighted" + "schema": { + "$ref": "#/definitions/modrinth.HashesRequest" + } } ], "produces": [ @@ -426171,7 +505606,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metaculus.optionsResponseDoc" + "$ref": "#/definitions/modrinth.ObjectResponseDoc" } }, "400": { @@ -426186,18 +505621,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -426210,30 +505633,35 @@ "ApiKeyAuth": [] } ], - "summary": "Metaculus question options", + "summary": "Resolve file hashes to projects", "tags": [ - "Metaculus" + "Modrinth" ] } }, - "/metaculus/questions": { + "/modrinth/version_file/{hash}": { "get": { "consumes": [ "application/json" ], - "description": "Returns Metaculus question rows. The endpoint fails closed, returning an error instead of partial data, when the source responds with an authenticated-only response or a challenge page.", - "operationId": "metaculus-questions", + "description": "Returns the native public Modrinth metadata for this resource. See the endpoint reference for exact request and response behavior.", + "operationId": "modrinth-file-version", "parameters": [ { - "description": "Rows to return, default 10, max 25", - "in": "query", - "name": "limit", - "type": "integer" + "description": "Native hash", + "in": "path", + "name": "hash", + "required": true, + "type": "string" }, { - "description": "Optional Metaculus topic slug", + "description": "File-hash algorithm; omitted uses native auto-detection", + "enum": [ + "sha1", + "sha512" + ], "in": "query", - "name": "topic", + "name": "algorithm", "type": "string" } ], @@ -426244,7 +505672,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metaculus.questionsResponseDoc" + "$ref": "#/definitions/modrinth.ObjectResponseDoc" } }, "400": { @@ -426259,18 +505687,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -426283,31 +505699,45 @@ "ApiKeyAuth": [] } ], - "summary": "Metaculus questions", + "summary": "Resolve a version by file hash", "tags": [ - "Metaculus" + "Modrinth" ] } }, - "/metaculus/top-comments": { - "get": { + "/modrinth/version_file/{hash}/update": { + "post": { "consumes": [ "application/json" ], - "description": "Returns Metaculus question rows for the questions whose recent public comments collected the highest vote scores over roughly the last week. Comment bodies are not exposed.", - "operationId": "metaculus-top-comments", + "description": "Returns the native public Modrinth metadata for this resource. See the endpoint reference for exact request and response behavior.", + "operationId": "modrinth-file-update", "parameters": [ { - "description": "Rows to return, default 10, max 25", - "in": "query", - "name": "limit", - "type": "integer" + "description": "Native hash", + "in": "path", + "name": "hash", + "required": true, + "type": "string" }, { - "description": "Optional Metaculus topic slug", + "description": "File-hash algorithm; omitted uses native auto-detection", + "enum": [ + "sha1", + "sha512" + ], "in": "query", - "name": "topic", + "name": "algorithm", "type": "string" + }, + { + "description": "Native metadata lookup body", + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/modrinth.FiltersRequest" + } } ], "produces": [ @@ -426317,7 +505747,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metaculus.questionsResponseDoc" + "$ref": "#/definitions/modrinth.ObjectResponseDoc" } }, "400": { @@ -426332,18 +505762,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -426356,33 +505774,28 @@ "ApiKeyAuth": [] } ], - "summary": "Metaculus top comments feed", + "summary": "Resolve a compatible update for a file", "tags": [ - "Metaculus" + "Modrinth" ] } }, - "/metaculus/tournament/{slug}/questions": { - "get": { + "/modrinth/version_files": { + "post": { "consumes": [ "application/json" ], - "description": "Returns Metaculus question rows for one public tournament, filtered by its slug. A slug that does not exist returns 404.", - "operationId": "metaculus-tournament-questions", + "description": "Returns the native public Modrinth metadata for this resource. See the endpoint reference for exact request and response behavior.", + "operationId": "modrinth-file-versions", "parameters": [ { - "description": "Metaculus tournament slug", - "in": "path", - "name": "slug", + "description": "Native metadata lookup body", + "in": "body", + "name": "body", "required": true, - "type": "string", - "x-example": "quarterly-cup" - }, - { - "description": "Rows to return, default 10, max 25", - "in": "query", - "name": "limit", - "type": "integer" + "schema": { + "$ref": "#/definitions/modrinth.HashesRequest" + } } ], "produces": [ @@ -426392,7 +505805,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/metaculus.questionsResponseDoc" + "$ref": "#/definitions/modrinth.ObjectResponseDoc" } }, "400": { @@ -426407,18 +505820,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -426431,24 +505832,28 @@ "ApiKeyAuth": [] } ], - "summary": "Metaculus tournament questions", + "summary": "Resolve file hashes to versions", "tags": [ - "Metaculus" + "Modrinth" ] } }, - "/metro/article": { - "get": { - "description": "Returns public Metro article metadata (headline, description, section, authors, publish/update times, lead image) and body paragraphs from a canonical article URL. Metro articles are free to read; live-blog entries are included in the body.", - "operationId": "metro-article", + "/modrinth/version_files/update": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Returns the native public Modrinth metadata for this resource. See the endpoint reference for exact request and response behavior.", + "operationId": "modrinth-files-update", "parameters": [ { - "description": "Canonical Metro article URL", - "in": "query", - "name": "url", + "description": "Native metadata lookup body", + "in": "body", + "name": "body", "required": true, - "type": "string", - "x-example": "https://metro.co.uk/2026/09/24/andy-burnham-talking-russia-this-week-29649003/" + "schema": { + "$ref": "#/definitions/modrinth.HashUpdatesRequest" + } } ], "produces": [ @@ -426458,7 +505863,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/modrinth.ObjectResponseDoc" } }, "400": { @@ -426485,24 +505890,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get Metro article content", + "summary": "Resolve compatible updates for files", "tags": [ - "Metro" + "Modrinth" ] } }, - "/metro/author": { - "get": { - "description": "Returns a Metro author's name, job title, biography, topic areas, social links, and most recent articles from a canonical author URL.", - "operationId": "metro-author", + "/modrinth/version_files/update_individual": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Returns the native public Modrinth metadata for this resource. See the endpoint reference for exact request and response behavior.", + "operationId": "modrinth-files-update-individual", "parameters": [ { - "description": "Canonical Metro author URL", - "in": "query", - "name": "url", + "description": "Native metadata lookup body", + "in": "body", + "name": "body", "required": true, - "type": "string", - "x-example": "https://metro.co.uk/author/craig-munro/" + "schema": { + "$ref": "#/definitions/modrinth.IndividualUpdatesRequest" + } } ], "produces": [ @@ -426512,7 +505921,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.metroAuthorResponseDoc" + "$ref": "#/definitions/modrinth.ObjectResponseDoc" } }, "400": { @@ -426539,68 +505948,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Metro author profile", + "summary": "Resolve updates with per-file filters", "tags": [ - "Metro" + "Modrinth" ] } }, - "/metro/headlines": { - "get": { - "description": "Returns fresh headlines from one public Metro section feed. The section must be a slug returned by the sections endpoint.", - "operationId": "metro-headlines", + "/modrinth/version_files/update_many": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Returns the native public Modrinth metadata for this resource. See the endpoint reference for exact request and response behavior.", + "operationId": "modrinth-files-update-many", "parameters": [ { - "description": "Metro section slug", - "enum": [ - "home", - "news", - "uk", - "world", - "us", - "politics", - "tech", - "weird", - "sport", - "football", - "boxing", - "cricket", - "f1", - "golf", - "snooker", - "tennis", - "entertainment", - "showbiz", - "tv", - "film", - "music", - "gaming", - "tv-soaps", - "coronation-street", - "eastenders", - "emmerdale", - "hollyoaks", - "casualty", - "lifestyle", - "health", - "food", - "travel", - "money", - "property", - "families", - "beauty", - "sex", - "horoscopes", - "shopping", - "opinion", - "letters", - "cartoons" - ], - "in": "query", - "name": "section", + "description": "Native metadata lookup body", + "in": "body", + "name": "body", "required": true, - "type": "string", - "x-example": "home" + "schema": { + "$ref": "#/definitions/modrinth.HashUpdatesRequest" + } } ], "produces": [ @@ -426610,7 +505979,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/modrinth.ObjectResponseDoc" } }, "400": { @@ -426619,37 +505988,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Metro section headlines", - "tags": [ - "Metro" - ] - } - }, - "/metro/news": { - "get": { - "description": "Returns fresh Metro (metro.co.uk) top stories from the site's public RSS feed, with summary, author, publish time, and lead image when present.", - "operationId": "metro-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "503": { "description": "Service Unavailable", @@ -426663,61 +506006,25 @@ "ApiKeyAuth": [] } ], - "summary": "Get Metro top stories", - "tags": [ - "Metro" - ] - } - }, - "/metro/sections": { - "get": { - "description": "Lists the 42 Metro section slugs accepted by `metro-headlines`, each with its display name and URL. Slugs include `uk`, `football`, `showbiz` and `coronation-street`. `home` is the site-wide stream, the same stories as `metro-news`, and parent sections such as `news` and `sport` aggregate their child sections.", - "operationId": "metro-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Metro sections", + "summary": "List compatible update versions for files", "tags": [ - "Metro" + "Modrinth" ] } }, - "/microsoftstore/categories": { + "/modrinth/versions": { "get": { "consumes": [ "application/json" ], - "description": "Returns every accepted category for a department, and -- apps only -- each category's own finer subcategories (e.g. Books & reference -> E-reader, Fiction, Nonfiction, Reference). This is the discovery endpoint for the category/subcategory values accepted by /microsoftstore/search, /microsoftstore/category, and /microsoftstore/charts. Subcategories are apps-only: games categories have none.", - "operationId": "microsoftstore-categories", + "description": "Returns the native public Modrinth metadata for this resource. See the endpoint reference for exact request and response behavior.", + "operationId": "modrinth-versions", "parameters": [ { - "default": "apps", - "description": "Department to list categories for", - "enum": [ - "apps", - "games", - "devices", - "passes", - "fonts", - "themes", - "tencent-android", - "tencent-mini" - ], + "description": "JSON-encoded array of native identifiers; absent members are omitted", "in": "query", - "name": "media_type", + "name": "ids", + "required": true, "type": "string" } ], @@ -426728,7 +506035,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.categoriesResponseDoc" + "$ref": "#/definitions/modrinth.ArrayResponseDoc" } }, "400": { @@ -426736,6 +506043,18 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -426743,64 +506062,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get the full Microsoft Store category (and subcategory) taxonomy for a department", + "summary": "Get native multiple-version metadata", "tags": [ - "Microsoft Store" + "Modrinth" ] } }, - "/microsoftstore/category": { + "/moncler/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of a single department+category listing, cursor-paginated, with no search keyword required -- the way to list an entire category (search requires a non-empty query and returns nothing for an empty one). category is required; the accepted set depends on media_type (see /microsoftstore/search's markdown doc for the full per-department lists). media_type defaults to apps; all is not accepted here since it has no category filter.", - "operationId": "microsoftstore-category", + "description": "Returns Moncler's full category tree (id, name, description, and subcategories). Every id is a valid value for moncler-category's own category_id parameter. levels controls how many levels of subcategories are included.", + "operationId": "moncler-categories", "parameters": [ { - "description": "Category to browse", - "in": "query", - "name": "category", - "required": true, - "type": "string", - "x-example": "Photo & video" - }, - { - "default": "apps", - "description": "Department to browse", - "enum": [ - "apps", - "games", - "devices", - "passes", - "fonts", - "themes", - "tencent-android", - "tencent-mini" - ], - "in": "query", - "name": "media_type", - "type": "string" - }, - { - "description": "Opaque pagination cursor from a previous response's next_cursor", - "in": "query", - "name": "cursor", - "type": "string" - }, - { - "default": "US", - "description": "Store country/region code (ISO-2)", - "in": "query", - "name": "country", - "type": "string" - }, - { - "default": "en-US", - "description": "Display locale (BCP-47)", + "default": 2, + "description": "How many levels of the category tree to return", "in": "query", - "name": "locale", - "type": "string" + "maximum": 3, + "minimum": 1, + "name": "levels", + "type": "integer" } ], "produces": [ @@ -426810,7 +506093,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.categoryResponseDoc" + "$ref": "#/definitions/moncler.categoriesResponseDoc" } }, "400": { @@ -426819,6 +506102,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -426831,122 +506120,66 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Microsoft Store category without a keyword", + "summary": "List Moncler categories", "tags": [ - "Microsoft Store" + "Moncler" ] } }, - "/microsoftstore/charts": { + "/moncler/category": { "get": { "consumes": [ "application/json" ], - "description": "Returns a curated Microsoft Store chart (top free, top paid, top grossing, trending, deals, new releases, getting-started picks, or -- apps only -- most popular), optionally scoped to a category/subcategory and, for games, by Xbox Game Pass availability or player count. Some charts (notably NewAndRising) can legitimately return fewer items than page_size even at the first page -- that reflects real sparsity for that chart.", - "operationId": "microsoftstore-charts", + "description": "Lists products within one category. category_id must be a value returned by moncler-categories' own category_id field -- a closed set the upstream defines. Returns the same result and facet shape as moncler-search. Narrow the same results with the filter param below.", + "operationId": "moncler-category", "parameters": [ { - "description": "Chart to fetch", - "enum": [ - "TopFree", - "TopPaid", - "TopGrossing", - "toptrending", - "NewAndRising", - "Deal", - "GettingStartedApps", - "MostPopular" - ], + "description": "Category id, from moncler-categories", "in": "query", - "name": "list", + "name": "category_id", "required": true, "type": "string", - "x-example": "TopFree" + "x-example": "men-outerwear-all-down-jackets" }, { - "default": "apps", - "description": "Department to scope the chart to", + "description": "Sort order", "enum": [ - "apps", - "games" + "price-high-to-low", + "price-low-to-high" ], "in": "query", - "name": "media_type", - "type": "string" - }, - { - "description": "Optional category to scope the chart to further", - "in": "query", - "name": "category", - "type": "string", - "x-example": "Photo & video" - }, - { - "description": "Optional finer subcategory within category (apps only; requires category to also be set)", - "in": "query", - "name": "subcategory", + "name": "sort", "type": "string", - "x-example": "E-reader" - }, - { - "description": "Optional discount filter", - "enum": [ - "onsale" - ], - "in": "query", - "name": "discount_filter", - "type": "string" - }, - { - "description": "Optional subscription filter (games only)", - "enum": [ - "gamepass" - ], - "in": "query", - "name": "subscription_filter", - "type": "string" + "x-example": "price-low-to-high" }, { - "description": "Optional player-count filter (games only)", - "enum": [ - "AllPlayers", - "SinglePlayer", - "OnlineMultiplayerWithGold", - "LocalMultiplayer", - "CoopSupportOnline", - "CoopSupportLocal" - ], + "collectionFormat": "csv", + "description": "Repeatable, up to 10. Each value is \\", "in": "query", - "name": "num_players_filter", - "type": "string" + "items": { + "type": "string" + }, + "name": "filter", + "type": "array", + "x-example": "c_refinementColor:Black" }, { - "default": 1, - "description": "1-based page number", + "default": 24, + "description": "Max results to return", "in": "query", - "name": "page", + "maximum": 100, + "minimum": 1, + "name": "limit", "type": "integer" }, { - "default": 20, - "description": "Items per page (max 24)", + "default": 0, + "description": "Result offset for pagination", "in": "query", - "name": "page_size", + "minimum": 0, + "name": "offset", "type": "integer" - }, - { - "default": "US", - "description": "Store country/region code (ISO-2)", - "in": "query", - "name": "country", - "type": "string" - }, - { - "default": "en-US", - "description": "Display locale (BCP-47)", - "in": "query", - "name": "locale", - "type": "string" } ], "produces": [ @@ -426956,7 +506189,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.chartsResponseDoc" + "$ref": "#/definitions/moncler.categoryResponseDoc" } }, "400": { @@ -426965,6 +506198,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -426977,41 +506222,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a curated Microsoft Store chart", + "summary": "Browse a Moncler category", "tags": [ - "Microsoft Store" + "Moncler" ] } }, - "/microsoftstore/editorial": { + "/moncler/product": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Microsoft Store editorial article (currently only seen in the wild as a per-product Microsoft Store Awards writeup). There is no discovery endpoint for editorial ids: they are only found embedded in a product's own award.editorial_id field, returned by /microsoftstore/search, /microsoftstore/category, /microsoftstore/charts, /microsoftstore/publisher, and /microsoftstore/related when that product carries an award. An unknown/invalid id returns a 503 upstream error, not a clean 404 -- the upstream itself does not distinguish the two.", - "operationId": "microsoftstore-editorial", + "description": "Returns one product's full detail: name, brand, price, descriptions, color, composition and care instructions, size availability, live stock, variation attributes (color/size options), every orderable variant SKU, product images, \"styled with\" related products, and a size guide (per-size body measurements and/or a cross-region size conversion table) when the upstream provides one. product_id accepts either a variant-level id or a master/style-level id, both as returned by moncler-search/moncler-category's own result ids.", + "operationId": "moncler-product", "parameters": [ { - "description": "Editorial content id, from a product's award.editorial_id field", + "description": "Product or master id", "in": "query", - "name": "editorial_id", + "name": "product_id", "required": true, "type": "string", - "x-example": "Editorials/Awards_2025/Global/Notion_xpdbvss44r0l9h" - }, - { - "default": "US", - "description": "Store country/region code (ISO-2)", - "in": "query", - "name": "country", - "type": "string" - }, - { - "default": "en-US", - "description": "Display locale (BCP-47)", - "in": "query", - "name": "locale", - "type": "string" + "x-example": "L20911A53600689509990" } ], "produces": [ @@ -427021,7 +506252,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.editorialResponseDoc" + "$ref": "#/definitions/moncler.productResponseDoc" } }, "400": { @@ -427036,6 +506267,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -427048,58 +506285,66 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Microsoft Store editorial article by id", + "summary": "Get a Moncler product's detail", "tags": [ - "Microsoft Store" + "Moncler" ] } }, - "/microsoftstore/events": { + "/moncler/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a department's \"Special events\" promotional shelf -- featured/limited-time products, distinct from the ranked charts (/microsoftstore/charts) and the curated home/department spotlight (/microsoftstore/spotlight). Only apps and games have this shelf; any other media_type is rejected.", - "operationId": "microsoftstore-events", + "description": "Searches Moncler's product catalog by keyword. Returns product results (name, price, image, orderable color/size variant ids, and live stock level) plus the search index's own sort options and facets (gender, category, color, size, and others) with live per-option result counts. Narrow the same results with the filter param below.", + "operationId": "moncler-search", "parameters": [ { - "default": "apps", - "description": "Department to fetch special events for", - "enum": [ - "apps", - "games" - ], + "description": "Search keyword", "in": "query", - "name": "media_type", - "type": "string" + "name": "q", + "required": true, + "type": "string", + "x-example": "down jacket" }, { - "default": 1, - "description": "1-based page number", + "description": "Sort order", + "enum": [ + "price-high-to-low", + "price-low-to-high" + ], "in": "query", - "name": "page", - "type": "integer" + "name": "sort", + "type": "string", + "x-example": "price-low-to-high" }, { - "default": 20, - "description": "Items per page (max 24)", + "collectionFormat": "csv", + "description": "Repeatable, up to 10. Each value is \\", "in": "query", - "name": "page_size", - "type": "integer" + "items": { + "type": "string" + }, + "name": "filter", + "type": "array", + "x-example": "c_refinementColor:Black" }, { - "default": "US", - "description": "Store country/region code (ISO-2)", + "default": 24, + "description": "Max results to return", "in": "query", - "name": "country", - "type": "string" + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer" }, { - "default": "en-US", - "description": "Display locale (BCP-47)", + "default": 0, + "description": "Result offset for pagination", "in": "query", - "name": "locale", - "type": "string" + "minimum": 0, + "name": "offset", + "type": "integer" } ], "produces": [ @@ -427109,7 +506354,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.eventsResponseDoc" + "$ref": "#/definitions/moncler.searchResponseDoc" } }, "400": { @@ -427118,6 +506363,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -427130,43 +506381,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Microsoft Store department's special-events shelf", + "summary": "Search Moncler products", "tags": [ - "Microsoft Store" + "Moncler" ] } }, - "/microsoftstore/product": { + "/moncler/stores": { "get": { "consumes": [ "application/json" ], - "description": "Returns Microsoft Store listing details for a single product id: title, description, publisher, category, media type, aggregate rating and content-rating breakdown, price and SKU summary, size, supported platforms/languages, capabilities, version/release/update timestamps, feature callouts, and media (icon, poster art, screenshots, trailers).", - "operationId": "microsoftstore-product", - "parameters": [ - { - "description": "Microsoft Store product id", - "in": "query", - "name": "product_id", - "required": true, - "type": "string", - "x-example": "9NCBCSZSJRSB" - }, - { - "default": "US", - "description": "Store country/region code (ISO-2)", - "in": "query", - "name": "country", - "type": "string" - }, - { - "default": "en-US", - "description": "Display locale (BCP-47)", - "in": "query", - "name": "locale", - "type": "string" - } - ], + "description": "Returns Moncler's full worldwide boutique list: name, coordinates, address, phone, email, opening hours, store type, and in-store service flags. This is the full list, not geo-filtered -- filter by country_code or proximity to coordinates client-side over the returned list.", + "operationId": "moncler-stores", "produces": [ "application/json" ], @@ -427174,7 +506401,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.productResponseDoc" + "$ref": "#/definitions/moncler.storesResponseDoc" } }, "400": { @@ -427183,8 +506410,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -427201,47 +506428,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Microsoft Store details for a single product", + "summary": "List Moncler boutiques", "tags": [ - "Microsoft Store" + "Moncler" ] } }, - "/microsoftstore/publisher": { + "/moncler/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns every product a publisher/developer has listed on the Microsoft Store, cursor-paginated. publisher_name must match the publisher name exactly as shown on a listing (e.g. the publisher field returned by /microsoftstore/product or /microsoftstore/search).", - "operationId": "microsoftstore-publisher", + "description": "Returns the storefront's own search-box suggestions (typeahead) for a partial query: completed/corrected search terms, suggested full phrases, and matching categories. Not product data.", + "operationId": "moncler-suggest", "parameters": [ { - "description": "Exact publisher/developer name", + "description": "Partial search query", "in": "query", - "name": "publisher_name", + "name": "q", "required": true, "type": "string", - "x-example": "Spotify AB" - }, - { - "description": "Opaque pagination cursor from a previous response's next_cursor", - "in": "query", - "name": "cursor", - "type": "string" - }, - { - "default": "US", - "description": "Store country/region code (ISO-2)", - "in": "query", - "name": "country", - "type": "string" - }, - { - "default": "en-US", - "description": "Display locale (BCP-47)", - "in": "query", - "name": "locale", - "type": "string" + "x-example": "jack" } ], "produces": [ @@ -427251,7 +506458,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.publisherResponseDoc" + "$ref": "#/definitions/moncler.suggestResponseDoc" } }, "400": { @@ -427260,56 +506467,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "List a Microsoft Store publisher's full catalog", - "tags": [ - "Microsoft Store" - ] - } - }, - "/microsoftstore/recommended": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the store's default, query-less \"Recommended for you\" shelf -- the same recommendations the search box shows before a caller types anything. No query parameters beyond region/locale.", - "operationId": "microsoftstore-recommended", - "parameters": [ - { - "default": "US", - "description": "Store country/region code (ISO-2)", - "in": "query", - "name": "country", - "type": "string" - }, - { - "default": "en-US", - "description": "Display locale (BCP-47)", - "in": "query", - "name": "locale", - "type": "string" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/microsoftstore.recommendedResponseDoc" - } }, "503": { "description": "Service Unavailable", @@ -427323,66 +506485,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get the Microsoft Store's default recommendation shelf", + "summary": "Get Moncler search-box suggestions", "tags": [ - "Microsoft Store" + "Moncler" ] } }, - "/microsoftstore/related": { + "/moneycontrol/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns products related to a seed product id, paginated. product_type must match the seed product's own media type (apps -> Application, games -> Game, passes -> Passes) -- any other value is rejected upstream. Omit product_type to have it resolved automatically from product_id via one extra lightweight lookup; pass it explicitly to skip that lookup.", - "operationId": "microsoftstore-related", + "description": "Returns public Moneycontrol article metadata and body paragraphs from a canonical article URL. Moneycontrol Pro subscriber stories are refused with a 403 permission error because no free content is available. Live blogs return one paragraph per update.", + "operationId": "moneycontrol-article", "parameters": [ { - "description": "Seed Microsoft Store product id", + "description": "Canonical Moneycontrol article URL", "in": "query", - "name": "product_id", + "name": "url", "required": true, "type": "string", - "x-example": "9NCBCSZSJRSB" - }, - { - "description": "The seed product's own type. Omit to auto-resolve from product_id.", - "enum": [ - "Application", - "Game", - "Passes" - ], - "in": "query", - "name": "product_type", - "type": "string" - }, - { - "default": 1, - "description": "1-based page number", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "default": 10, - "description": "Related products per page (max 24)", - "in": "query", - "name": "page_size", - "type": "integer" - }, - { - "default": "US", - "description": "Store country/region code (ISO-2)", - "in": "query", - "name": "country", - "type": "string" - }, - { - "default": "en-US", - "description": "Display locale (BCP-47)", - "in": "query", - "name": "locale", - "type": "string" + "x-example": "https://www.moneycontrol.com/news/business/markets/example-article-slug-14037252.html" } ], "produces": [ @@ -427392,7 +506512,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.relatedResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -427401,6 +506521,18 @@ "$ref": "#/definitions/app.Response" } }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -427413,66 +506545,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get products related to a Microsoft Store product", + "summary": "Get Moneycontrol article content", "tags": [ - "Microsoft Store" + "Moneycontrol" ] } }, - "/microsoftstore/reviews": { + "/moneycontrol/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of written Microsoft Store reviews for a product id, each with rating, title, text, submission time, helpful-vote counts, and device/OS info. sort controls ordering (MostHelpful or MostRecent -- the only two values the upstream API itself accepts; any other value is rejected).", - "operationId": "microsoftstore-reviews", + "description": "Returns a Moneycontrol author's name, job title, biography (when present), social links, and recent articles from a canonical author URL.", + "operationId": "moneycontrol-author", "parameters": [ { - "description": "Microsoft Store product id", + "description": "Canonical Moneycontrol author URL", "in": "query", - "name": "product_id", + "name": "url", "required": true, "type": "string", - "x-example": "9NCBCSZSJRSB" - }, - { - "default": "MostHelpful", - "description": "Review sort order", - "enum": [ - "MostHelpful", - "MostRecent" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "default": 1, - "description": "1-based page number", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "default": 20, - "description": "Reviews per page (max 50)", - "in": "query", - "name": "page_size", - "type": "integer" - }, - { - "default": "US", - "description": "Store country/region code (ISO-2)", - "in": "query", - "name": "country", - "type": "string" - }, - { - "default": "en-US", - "description": "Display locale (BCP-47)", - "in": "query", - "name": "locale", - "type": "string" + "x-example": "https://www.moneycontrol.com/author/jane-doe-12345/" } ], "produces": [ @@ -427482,7 +506572,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.reviewsResponseDoc" + "$ref": "#/definitions/publicnews.moneycontrolAuthorResponseDoc" } }, "400": { @@ -427491,6 +506581,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -427503,41 +506599,78 @@ "ApiKeyAuth": [] } ], - "summary": "Get paginated Microsoft Store reviews for a product", + "summary": "Get a Moneycontrol author profile", "tags": [ - "Microsoft Store" + "Moneycontrol" ] } }, - "/microsoftstore/reviews/summary": { + "/moneycontrol/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a product's aggregate rating: average rating, total review count, a 1-5 star rating distribution, and the upstream-selected most critical and most favorable written reviews.", - "operationId": "microsoftstore-reviews-summary", + "description": "Returns the current front page of one Moneycontrol section: 25 or 50 stories, each with `title`, `url`, a short `summary` and `image_url`. `section` is required and takes one of 52 slugs such as `markets`, `ipo` or `cricket`; other values return `400`. Publication time and author are omitted, and only the first page is available.", + "operationId": "moneycontrol-headlines", "parameters": [ { - "description": "Microsoft Store product id", + "description": "Moneycontrol section slug", + "enum": [ + "business", + "markets", + "economy", + "companies", + "personal-finance", + "ipo", + "startup", + "commodities", + "earnings", + "insurance", + "banks", + "stocks", + "mutual-funds", + "real-estate", + "funding", + "information-technology", + "india", + "politics", + "trends", + "interview", + "opinion", + "currency", + "telecom", + "world", + "city", + "banking", + "explainers", + "technology", + "automobile", + "sports", + "cricket", + "football", + "entertainment", + "bollywood", + "hollywood", + "ott", + "tv", + "regional", + "music", + "lifestyle", + "beauty", + "parenting", + "relationship", + "home-garden", + "health-and-fitness", + "education", + "science", + "astrology", + "religion", + "travel", + "artificial-intelligence", + "books" + ], "in": "query", - "name": "product_id", + "name": "section", "required": true, "type": "string", - "x-example": "9NCBCSZSJRSB" - }, - { - "default": "US", - "description": "Store country/region code (ISO-2)", - "in": "query", - "name": "country", - "type": "string" - }, - { - "default": "en-US", - "description": "Display locale (BCP-47)", - "in": "query", - "name": "locale", - "type": "string" + "x-example": "business" } ], "produces": [ @@ -427547,7 +506680,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.reviewsSummaryResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -427568,112 +506701,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Microsoft Store product's aggregate rating summary", + "summary": "Get Moneycontrol section headlines", "tags": [ - "Microsoft Store" + "Moneycontrol" ] } }, - "/microsoftstore/search": { + "/moneycontrol/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a page of Microsoft Store search results (apps, games, devices, and other listings) for a keyword, with cursor-based pagination and per-item publisher, rating, price, and media. media_type selects the department (apps, games, devices, passes, fonts, themes, tencent-android, tencent-mini, or all); category further filters within that department (the accepted set depends on media_type -- see the markdown doc for the full per-department lists). Pass the previous response's next_cursor to fetch the next page.", - "operationId": "microsoftstore-search", - "parameters": [ - { - "description": "Search keyword", - "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "spotify" - }, - { - "default": "all", - "description": "Department to search", - "enum": [ - "all", - "apps", - "games", - "devices", - "passes", - "fonts", - "themes", - "tencent-android", - "tencent-mini" - ], - "in": "query", - "name": "media_type", - "type": "string" - }, - { - "description": "Category to filter by (accepted set depends on media_type)", - "in": "query", - "name": "category", - "type": "string", - "x-example": "Photo & video" - }, - { - "default": "all", - "description": "Price filter", - "enum": [ - "all", - "Free", - "Paid", - "Sale" - ], - "in": "query", - "name": "price", - "type": "string" - }, - { - "default": "all", - "description": "Maximum-age filter", - "enum": [ - "all", - "TO3", - "TO4", - "TO5", - "TO6", - "TO7", - "TO8", - "TO9", - "TO10", - "TO11", - "TO12", - "TO13", - "TO14", - "TO15", - "TO16", - "TO17" - ], - "in": "query", - "name": "age", - "type": "string" - }, - { - "description": "Opaque pagination cursor from a previous response's next_cursor", - "in": "query", - "name": "cursor", - "type": "string" - }, - { - "default": "US", - "description": "Store country/region code (ISO-2)", - "in": "query", - "name": "country", - "type": "string" - }, - { - "default": "en-US", - "description": "Display locale (BCP-47)", - "in": "query", - "name": "locale", - "type": "string" - } - ], + "description": "Returns the 50 newest Moneycontrol stories across all sections, newest first, with no parameters. Each item has `title`, `url`, `published_at` (RFC3339 UTC) and `image_url`. Videos, podcasts, photo galleries and sponsored brand-connect posts are left out.", + "operationId": "moneycontrol-news", "produces": [ "application/json" ], @@ -427681,11 +506718,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/microsoftstore.searchResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -427702,65 +506739,63 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Microsoft Store", + "summary": "Get Moneycontrol latest news", "tags": [ - "Microsoft Store" + "Moneycontrol" ] } }, - "/microsoftstore/spotlight": { + "/moneycontrol/sections": { "get": { - "consumes": [ + "description": "Lists the 52 Moneycontrol news section slugs accepted by `moneycontrol-headlines`, such as `markets`, `economy`, `ipo` and `cricket`. Each entry has its `slug`, display `name` and page `url`. Moneycontrol Pro-only research, video, podcast and photo hubs are not sections.", + "operationId": "moneycontrol-sections", + "produces": [ "application/json" ], - "description": "Returns the curated hero/spotlight shelf shown at the top of the store's home page or one department's landing page (the large featured banners, not the ranked charts or the smaller \"Special events\" shelf). Only home, apps, and games have a spotlight; any other media_type is rejected.", - "operationId": "microsoftstore-spotlight", - "parameters": [ - { - "default": "home", - "description": "Which spotlight to fetch", - "enum": [ - "home", - "apps", - "games" - ], - "in": "query", - "name": "media_type", - "type": "string" - }, - { - "default": "US", - "description": "Store country/region code (ISO-2)", - "in": "query", - "name": "country", - "type": "string" - }, + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "default": "en-US", - "description": "Display locale (BCP-47)", - "in": "query", - "name": "locale", - "type": "string" + "ApiKeyAuth": [] } ], + "summary": "Get Moneycontrol sections", + "tags": [ + "Moneycontrol" + ] + } + }, + "/monitors": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Lists the website-change monitors on your account, most recently created first, up to 100. Each monitor has its `target_type` (`page` or `sitemap`), URL, name, cadence in minutes, enabled flag, last checked and last changed times, next check time, failure count, last error, and notification and sitemap settings.", + "operationId": "monitors-list", "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", + "description": "Monitors", "schema": { - "$ref": "#/definitions/microsoftstore.spotlightResponseDoc" + "$ref": "#/definitions/webmonitor.monitorListResponseDoc" } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Authentication required", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -427771,41 +506806,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get the Microsoft Store home page or department spotlight", + "summary": "List website-change monitors", "tags": [ - "Microsoft Store" + "Monitors" ] - } - }, - "/microsoftstore/suggest": { - "get": { + }, + "post": { "consumes": [ "application/json" ], - "description": "Returns typeahead-style Microsoft Store search suggestions for a partial search term: plain-text completions plus a short list of matching products (id, title, icon, department, and store URL).", - "operationId": "microsoftstore-suggest", + "description": "Creates a monitor that periodically checks a page or sitemap for changes and can notify a webhook. Free to call -- only completed check runs consume credits, at 1 credit per completed run regardless of target type or whether a change was detected. `target_type` defaults to \"page\" (exact-fingerprint diff of the page). \"sitemap\" watches the sitemap at `url` for added/removed entries instead, honoring `sitemap.include_patterns`/`exclude_patterns` (shell-style globs matched against each URL's path) and `sitemap.max_urls` (default 5000, hard cap 10000).", + "operationId": "monitors-create", "parameters": [ { - "description": "Partial search term to autocomplete", - "in": "query", - "name": "prefix", + "description": "Monitor definition", + "in": "body", + "name": "request", "required": true, - "type": "string", - "x-example": "spot" - }, - { - "default": "US", - "description": "Store country/region code (ISO-2)", - "in": "query", - "name": "country", - "type": "string" - }, - { - "default": "en-US", - "description": "Display locale (BCP-47)", - "in": "query", - "name": "locale", - "type": "string" + "schema": { + "$ref": "#/definitions/webmonitor.createMonitorBodyDoc" + } } ], "produces": [ @@ -427813,19 +506833,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Created monitor", "schema": { - "$ref": "#/definitions/microsoftstore.suggestResponseDoc" + "$ref": "#/definitions/webmonitor.monitorResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "401": { + "description": "Authentication required", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -427836,24 +506862,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Microsoft Store search suggestions for a prefix", + "summary": "Create a website-change monitor", "tags": [ - "Microsoft Store" + "Monitors" ] } }, - "/mirror/article": { - "get": { - "description": "Returns a Mirror article by its canonical `url`: title, description, section, authors, lead image, publication and update times, a `paywalled` flag and the body `paragraphs`. Only public content is returned; subscriber-only or blocked articles return an upstream error.", - "operationId": "mirror-article", + "/monitors/{id}": { + "delete": { + "consumes": [ + "application/json" + ], + "description": "Deletes one website-change monitor by its `id`, which must belong to the calling account. Returns `deleted: true` on success. The monitor's past check history is not removed.", + "operationId": "monitors-delete", "parameters": [ { - "description": "Canonical Mirror article URL", - "in": "query", - "name": "url", + "description": "Monitor ID returned by your account monitor create/list response; replace the illustrative example with your own ID", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.mirror.co.uk/news/uk-news/bootle-house-fire-schools-tributes-37697006" + "x-example": "66d2f0b1c2a4e5f6a7b8c9d0" } ], "produces": [ @@ -427861,25 +506890,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Deleted", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/webmonitor.monitorDeleteResponseDoc" } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Authentication required", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "Monitor not found", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -427890,30 +506919,25 @@ "ApiKeyAuth": [] } ], - "summary": "Get Mirror article content", + "summary": "Delete a website-change monitor", "tags": [ - "Mirror" + "Monitors" ] - } - }, - "/mirror/author": { + }, "get": { - "description": "Returns a Mirror author profile by `slug` (for example `neil-shaw`) or by a mirror.co.uk author `url`; supply exactly one. The response has `name`, `job_title`, `bio`, `email`, `twitter` and one page of recent articles with title, URL and label. There is no paging, and unlisted contact details are omitted rather than raising an error.", - "operationId": "mirror-author", + "consumes": [ + "application/json" + ], + "description": "Returns one of your website-change monitors by `id`. The monitor includes its `target_type` (`page` or `sitemap`), URL, name, check cadence in minutes, enabled flag, last and next check times, failure count and last error, plus notification and sitemap settings.", + "operationId": "monitors-get", "parameters": [ { - "description": "Author slug, e.g. neil-shaw", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "neil-shaw" - }, - { - "description": "Canonical mirror.co.uk/authors// URL; alternative to slug", - "in": "query", - "name": "url", + "description": "Monitor ID returned by your account monitor create/list response; replace the illustrative example with your own ID", + "in": "path", + "name": "id", + "required": true, "type": "string", - "x-example": "https://www.mirror.co.uk/authors/neil-shaw/" + "x-example": "66d2f0b1c2a4e5f6a7b8c9d0" } ], "produces": [ @@ -427921,25 +506945,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Monitor", "schema": { - "$ref": "#/definitions/publicnews.mirrorAuthorResponseDoc" + "$ref": "#/definitions/webmonitor.monitorResponseDoc" } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Authentication required", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "Monitor not found", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -427950,60 +506974,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Mirror author profile", + "summary": "Get a website-change monitor", "tags": [ - "Mirror" + "Monitors" ] - } - }, - "/mirror/headlines": { - "get": { - "description": "Returns recent Mirror headlines for one section. `section` is required and takes one of 34 slugs or paths, such as `news/uk-news`, `sport/football`, `3am` or `lifestyle/food-drink`. Each item has a title and URL, and may include summary, author, publication time and image.", - "operationId": "mirror-headlines", + }, + "patch": { + "consumes": [ + "application/json" + ], + "description": "Partially updates one of the caller's own monitors. Free to call. Changing `target_type` or `sitemap` resets the stored diff baseline (fingerprint, snapshot, or URL set), so the next check establishes a fresh baseline instead of comparing against a now-meaningless prior state.", + "operationId": "monitors-update", "parameters": [ { - "description": "Mirror section slug", - "enum": [ - "news", - "news/uk-news", - "news/world-news", - "news/politics", - "news/weird-news", - "news/royals", - "news/health", - "news/us-news", - "news/real-life-stories", - "sport", - "sport/football", - "sport/boxing", - "sport/cricket", - "sport/formula-1", - "sport/golf", - "sport/horse-racing", - "sport/rugby-league", - "sport/rugby-union", - "3am", - "3am/style", - "3am/us-celebrity-news", - "lifestyle", - "lifestyle/family", - "lifestyle/food-drink", - "lifestyle/gardening", - "lifestyle/motoring", - "lifestyle/sex-relationships", - "travel", - "money", - "money/shopping-deals", - "tv", - "film", - "gaming", - "tech" - ], - "in": "query", - "name": "section", + "description": "Monitor ID returned by your account monitor create/list response; replace the illustrative example with your own ID", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "news" + "x-example": "66d2f0b1c2a4e5f6a7b8c9d0" + }, + { + "description": "Fields to update", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/webmonitor.updateMonitorBodyDoc" + } } ], "produces": [ @@ -428011,51 +507009,31 @@ ], "responses": { "200": { - "description": "OK", + "description": "Updated monitor", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/webmonitor.monitorResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "401": { + "description": "Authentication required", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Mirror section headlines", - "tags": [ - "Mirror" - ] - } - }, - "/mirror/news": { - "get": { - "description": "Returns the current Mirror top stories, with no parameters. Each item has a title and URL, and may include summary, author, publication time and image. Use `mirror-headlines` to read a single section.", - "operationId": "mirror-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "404": { + "description": "Monitor not found", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -428066,54 +507044,53 @@ "ApiKeyAuth": [] } ], - "summary": "Get Mirror top stories", + "summary": "Update a website-change monitor", "tags": [ - "Mirror" + "Monitors" ] } }, - "/mirror/sections": { + "/monitors/{id}/checks": { "get": { - "description": "Lists the Mirror section slugs accepted by `mirror-headlines`. Each entry has a stable `slug`, a display `name` and a section `url`. Slugs can contain a path, such as `news/uk-news` or `sport/football`.", - "operationId": "mirror-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ + "description": "Returns the caller's own monitor's most recent check runs (most recent first, capped at 50), including webhook delivery status per run.", + "operationId": "monitors-checks", + "parameters": [ { - "ApiKeyAuth": [] + "description": "Monitor ID returned by your account monitor create/list response; replace the illustrative example with your own ID", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "66d2f0b1c2a4e5f6a7b8c9d0" } ], - "summary": "Get Mirror sections", - "tags": [ - "Mirror" - ] - } - }, - "/mlb/discovery": { - "get": { - "description": "Returns MLB.com's live navigation tree, including hidden nodes labeled with visibility, and the MLB-only value sets for leagues, divisions, game types, roster types, standings types, stat groups, supported stat types, leader categories, MLB Pipeline prospect filters, league-stats hitter positions and player pools, and observed Baseball Savant leaderboard categories and filters including Top Performers, ABS Challenges, Expected Statistics, Outs Above Average, Arm Strength, Arm Value, Home Runs, Percentile Rankings, Pitch Movement, Rolling Windows, Pitcher Arm Angle, Year-to-Year Changes, Catcher Blocking, Catcher Framing, Catcher Throwing, First Base Receiving, and Fielding Run Value. Use these values to discover sections and supported filters before calling MLB endpoints.", - "operationId": "mlb-discovery", "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", + "description": "Check history", "schema": { - "$ref": "#/definitions/mlb.discoveryResponseDoc" + "$ref": "#/definitions/webmonitor.checkListResponseDoc" } }, - "503": { - "description": "Service Unavailable", + "401": { + "description": "Authentication required", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Monitor not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -428124,53 +507101,24 @@ "ApiKeyAuth": [] } ], - "summary": "Discover MLB sections and Stats API values", + "summary": "List a monitor's check history", "tags": [ - "MLB" + "Monitors" ] } }, - "/mlb/editorial-feed": { + "/motleyfool/article": { "get": { - "description": "Returns a paginated first-party MLB.com news, video, or selection feed. Slugs are dynamic and not a complete closed topic catalog; discover current topic suggestions with mlb-search and sections with mlb-discovery. Feed items retain upstream Article, ShortContent, VSMContent, or Video fields.", - "operationId": "mlb-editorial-feed", + "description": "Returns one Motley Fool investing article by `url`, which must look like `https://www.fool.com/investing/YYYY/MM/DD/slug/`; only public `/investing/` URLs are accepted. The response has the title, description, section, authors, publication and update times, image URL, body `paragraphs` and a `paywalled` flag.", + "operationId": "motleyfool-article", "parameters": [ { - "description": "MLB feed or selection slug, such as mlb-news-list or sel-vvc-mlb-stories", + "description": "Canonical The Motley Fool investing article URL", "in": "query", - "name": "slug", + "name": "url", "required": true, "type": "string", - "x-example": "mlb-news-list" - }, - { - "default": "EN_US", - "description": "Feed locale", - "enum": [ - "EN_US", - "ES_US" - ], - "in": "query", - "name": "language", - "type": "string" - }, - { - "default": 20, - "description": "Items per page (1-100)", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "default": 0, - "description": "Number of items to skip (0-100000)", - "in": "query", - "maximum": 100000, - "minimum": 0, - "name": "skip", - "type": "integer" + "x-example": "https://www.fool.com/investing/2026/09/28/example-story/" } ], "produces": [ @@ -428180,7 +507128,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.editorialFeedResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -428189,6 +507137,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -428201,27 +507155,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get an MLB.com editorial feed", + "summary": "Get a Motley Fool article", "tags": [ - "MLB" + "The Motley Fool" ] } }, - "/mlb/game": { + "/motleyfool/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns an MLB game summary by numeric `id`. The response has the status, both teams with records and score, inning-by-inning runs, probable pitchers, winning, losing and save pitchers, and team box-score totals. It does not include the full play-by-play. Use the play-by-play endpoint for that.", - "operationId": "mlb-game", + "description": "Returns a Motley Fool author's name, biography when published, image when available and recent investing articles from their author page. `url` is required, for example `https://www.fool.com/author/2104/`. Each article has a title, URL, summary, author, image, `type` and publication time.", + "operationId": "motleyfool-author", "parameters": [ { - "description": "Numeric MLB game id", + "description": "Canonical The Motley Fool author URL", "in": "query", - "name": "id", + "name": "url", "required": true, "type": "string", - "x-example": "822781" + "x-example": "https://www.fool.com/author/2104/" } ], "produces": [ @@ -428231,7 +507182,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.gameResponseDoc" + "$ref": "#/definitions/publicnews.motleyfoolAuthorResponseDoc" } }, "400": { @@ -428246,12 +507197,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -428264,24 +507209,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get an MLB game feed", + "summary": "Get a Motley Fool author profile", "tags": [ - "MLB" + "The Motley Fool" ] } }, - "/mlb/game-boxscore": { + "/motleyfool/headlines": { "get": { - "description": "Returns the player box score for an MLB game by numeric `id`. For the home and away teams it lists each player used with position, batting order and batting, pitching and fielding stats, plus team totals.", - "operationId": "mlb-game-boxscore", + "description": "Returns the article cards of one Motley Fool investing-news section. `section` is required: `trending-news`, `news`, `market-movers`, `tech-stock-news`, `market-trends`, `crypto-news`, `markets`, `most-active-stocks`, `top-stock-gainers` or `top-stock-losers`. Other values return a 400. Items carry the title, URL and, where present, summary, author and publication time.", + "operationId": "motleyfool-headlines", "parameters": [ { - "description": "Numeric MLB game id", + "description": "The Motley Fool section slug", + "enum": [ + "trending-news", + "news", + "market-movers", + "tech-stock-news", + "market-trends", + "crypto-news", + "markets", + "most-active-stocks", + "top-stock-gainers", + "top-stock-losers" + ], "in": "query", - "name": "id", + "name": "section", "required": true, "type": "string", - "x-example": "824651" + "x-example": "trending-news" } ], "produces": [ @@ -428291,7 +507248,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.boxscoreResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -428300,8 +507257,40 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The Motley Fool section headlines", + "tags": [ + "The Motley Fool" + ] + } + }, + "/motleyfool/news": { + "get": { + "description": "Returns up to 50 recent Motley Fool investing stories, newest first, each with its title, URL and publication time. Only stories at `/investing/YYYY/MM/DD/slug/` URLs are included. It takes no parameters; use the headlines endpoint for a named section.", + "operationId": "motleyfool-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -428318,24 +507307,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get an MLB player boxscore", + "summary": "Get The Motley Fool top investing stories", "tags": [ - "MLB" + "The Motley Fool" ] } }, - "/mlb/game-play-by-play": { + "/motleyfool/sections": { "get": { - "description": "Returns the at-bats of an MLB game by numeric `id`. Each play has its inning and half, batter, pitcher, event and description, and a list of individual pitch and event records with timing and pitch data. The response includes a `total` count of plays.", - "operationId": "mlb-game-play-by-play", + "description": "Lists the 10 Motley Fool Stock Market News section slugs that the headlines endpoint accepts, from `trending-news` and `news` to `most-active-stocks`, `top-stock-gainers` and `top-stock-losers`. Each entry has a `slug`, a display `name` (`news` is named Stock News) and a section `url`.", + "operationId": "motleyfool-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List The Motley Fool news sections", + "tags": [ + "The Motley Fool" + ] + } + }, + "/motogp/bmw-award": { + "get": { + "description": "Returns every source classification row and its report URL for a calendar season year. Uses a numeric year, not a season UUID. Native empty classifications remain empty and do not imply that the award existed in that season. Report links are metadata only.", + "operationId": "motogp-bmw-award", "parameters": [ { - "description": "Numeric MLB game id", + "description": "Four-digit native season year; seasons discovery supplies observed years", "in": "query", - "name": "id", + "name": "season_year", "required": true, - "type": "string", - "x-example": "824651" + "type": "integer" } ], "produces": [ @@ -428345,7 +507359,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.playByPlayResponseDoc" + "$ref": "#/definitions/motogp.ObjectResponseDoc" } }, "400": { @@ -428372,85 +507386,31 @@ "ApiKeyAuth": [] } ], - "summary": "Get MLB game play-by-play", + "summary": "Get MotoGP BMW Award standings", "tags": [ - "MLB" + "MotoGP" ] } }, - "/mlb/league-leaders": { + "/motogp/categories": { "get": { - "description": "Returns ranked MLB leader entries for one or more validated categories. Use mlb-discovery for all accepted categories, groups, and game type codes.", - "operationId": "mlb-league-leaders", + "consumes": [ + "application/json" + ], + "description": "Reads anonymous MotoGP results metadata using the result UUID namespace. Historical categories and test events retain their native source fields.", + "operationId": "motogp-categories", "parameters": [ { - "description": "Comma-separated MLB leader category names; values are listed in mlb-discovery", - "in": "query", - "name": "categories", - "required": true, - "type": "string", - "x-example": "homeRuns" - }, - { - "description": "Four-digit season; defaults to current year", - "in": "query", - "name": "season", - "type": "integer", - "x-example": 2026 - }, - { - "description": "Stat group", - "enum": [ - "hitting", - "pitching", - "fielding", - "catching", - "running", - "game", - "team", - "streak" - ], - "in": "query", - "name": "group", - "type": "string" - }, - { - "description": "MLB game type", - "enum": [ - "S", - "R", - "F", - "D", - "L", - "W", - "C", - "P", - "A", - "I", - "E" - ], + "description": "Result UUID from the corresponding discovery resource", "in": "query", - "name": "game_type", + "name": "season_uuid", "type": "string" }, { - "description": "MLB league id", - "enum": [ - "103", - "104" - ], + "description": "Result UUID from the corresponding discovery resource", "in": "query", - "name": "league_id", + "name": "event_uuid", "type": "string" - }, - { - "default": 10, - "description": "Leaders per category (1-100)", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", - "type": "integer" } ], "produces": [ @@ -428460,7 +507420,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.leagueLeadersResponseDoc" + "$ref": "#/definitions/motogp.ArrayResponseDoc" } }, "400": { @@ -428469,6 +507429,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -428481,218 +507447,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get MLB league leaders", + "summary": "Discover historical result categories", "tags": [ - "MLB" + "MotoGP" ] } }, - "/mlb/league-stats": { + "/motogp/circuit-poles": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns ranked MLB stat splits across both leagues. `group` is required (`hitting`, `pitching`, `fielding`, `catching`, `running`, `game`, `team` or `streak`). `season` defaults to the current year and `stat_type` to `season`. Narrow with `league_id`, `team_id`, `position`, `player_pool`, and page with `limit` (1 to 100) and `offset` (0 to 10000).", - "operationId": "mlb-league-stats", + "description": "Preserves every native rider/count row, source ordering and pagination metadata. Uses result-circuit UUIDs and lowercase circuit-statistics categories; no new rank, total or historical category alias is calculated.", + "operationId": "motogp-circuit-poles", "parameters": [ { - "description": "Four-digit season; defaults to current year", - "in": "query", - "name": "season", - "type": "integer", - "x-example": 2026 - }, - { - "description": "Stat group", - "enum": [ - "hitting", - "pitching", - "fielding", - "catching", - "running", - "game", - "team", - "streak" - ], + "description": "Native result-circuit UUID from result event metadata", "in": "query", - "name": "group", + "name": "circuit_uuid", "required": true, - "type": "string", - "x-example": "hitting" - }, - { - "default": "season", - "description": "Stats API stat type; defaults to season", - "enum": [ - "projected", - "projectedRos", - "yearByYear", - "yearByYearAdvanced", - "yearByYearPlayoffs", - "season", - "standard", - "advanced", - "career", - "careerRegularSeason", - "careerAdvanced", - "seasonAdvanced", - "careerStatSplits", - "careerPlayoffs", - "gameLog", - "playLog", - "pitchLog", - "pitchArsenal", - "outsAboveAverage", - "expectedStatistics", - "sabermetrics", - "sprayChart", - "tracking", - "vsPlayer", - "vsPlayerTotal", - "vsPlayer5Y", - "vsTeam", - "vsTeam5Y", - "vsTeamTotal", - "lastXGames", - "byDateRange", - "byDateRangeAdvanced", - "byMonth", - "byMonthPlayoffs", - "byDayOfWeek", - "byDayOfWeekPlayoffs", - "homeAndAway", - "homeAndAwayPlayoffs", - "winLoss", - "winLossPlayoffs", - "rankings", - "rankingsByYear", - "statsSingleSeason", - "statsSingleSeasonAdvanced", - "hotColdZones", - "availableStats", - "opponentsFaced", - "gameTypeStats", - "firstYearStats", - "lastYearStats", - "statSplits", - "statSplitsAdvanced", - "atGameStart", - "vsOpponents", - "sabermetricsMultiTeam", - "projected_Zips", - "projected_ZipsRos", - "projected_Zips2YR", - "projected_Zips3YR" - ], - "in": "query", - "name": "stat_type", - "type": "string" - }, - { - "description": "MLB game type", - "enum": [ - "S", - "R", - "F", - "D", - "L", - "W", - "C", - "P", - "A", - "I", - "E" - ], - "in": "query", - "name": "game_type", - "type": "string" - }, - { - "description": "Start date for byDateRange stat types; requires end_date", - "in": "query", - "name": "start_date", - "type": "string" - }, - { - "description": "End date for byDateRange stat types; requires start_date", - "in": "query", - "name": "end_date", - "type": "string" - }, - { - "description": "Required by vsTeam stat types", - "in": "query", - "name": "opponent_team_id", - "type": "string" - }, - { - "description": "Required by vsPlayer stat types", - "in": "query", - "name": "opponent_player_id", - "type": "string" - }, - { - "description": "MLB league id", - "enum": [ - "103", - "104" - ], - "in": "query", - "name": "league_id", - "type": "string" - }, - { - "description": "Optional MLB team id; discover current team ids with mlb_teams", - "in": "query", - "name": "team_id", - "type": "string" - }, - { - "description": "Hitter position; use only with group=hitting", - "enum": [ - "C", - "1B", - "2B", - "3B", - "SS", - "LF", - "CF", - "RF", - "DH", - "OF", - "IF" - ], - "in": "query", - "name": "position", "type": "string" }, { - "description": "Qualified-player pool", + "description": "Native circuit-statistics category name", "enum": [ - "QUALIFIED", - "ALL" + "motogp", + "moto2", + "moto3", + "motoe" ], "in": "query", - "name": "player_pool", + "name": "category_name", + "required": true, "type": "string" - }, - { - "default": 10, - "description": "Results to return (1-100)", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "default": 0, - "description": "Zero-based result offset (0-10000)", - "in": "query", - "maximum": 10000, - "minimum": 0, - "name": "offset", - "type": "integer" } ], "produces": [ @@ -428702,7 +507486,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statsResponseDoc" + "$ref": "#/definitions/motogp.ObjectResponseDoc" } }, "400": { @@ -428711,8 +507495,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -428729,27 +507513,23 @@ "ApiKeyAuth": [] } ], - "summary": "Get ranked MLB league statistics", + "summary": "Get native MotoGP circuit pole records", "tags": [ - "MLB" + "MotoGP" ] } }, - "/mlb/player": { + "/motogp/circuit-records": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns an MLB player by numeric `id`. The response has the full name, position, bats and throws sides, birth date, city and country, current age, height, weight, jersey number, MLB debut date, active flag and current team. Unknown players return `404`.", - "operationId": "mlb-player", + "description": "Reads anonymous native result metadata. Result UUID namespaces and source report/record variants are preserved.", + "operationId": "motogp-circuit-records", "parameters": [ { - "description": "Numeric MLB player id", + "description": "Result UUID from the corresponding discovery resource", "in": "query", - "name": "id", + "name": "circuit_uuid", "required": true, - "type": "string", - "x-example": "592450" + "type": "string" } ], "produces": [ @@ -428759,7 +507539,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.playerResponseDoc" + "$ref": "#/definitions/motogp.ObjectResponseDoc" } }, "400": { @@ -428774,12 +507554,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -428792,162 +507566,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get an MLB player", + "summary": "Get native circuit record metadata", "tags": [ - "MLB" + "MotoGP" ] } }, - "/mlb/player-stats": { + "/motogp/circuit-wins": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one MLB player's statistics. `id` and `group` (`hitting`, `pitching`, `fielding`, `catching`, `running`, `game`, `team` or `streak`) are required. `season` defaults to the current year and `stat_type` to `season`. Other `stat_type` values cover career, game logs and splits. Use `start_date` with `end_date` for date ranges.", - "operationId": "mlb-player-stats", + "description": "Mirrors the circuit first-place-frequency resource. Preserves source rider identities, times, finishing position1, order and pagination metadata. Lowercase category names are a separate namespace from result-category UUIDs. Empty MotoE data can be valid even when native pagination totals are nonzero.", + "operationId": "motogp-circuit-wins", "parameters": [ { - "description": "Numeric MLB player id", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "592450" - }, - { - "description": "Four-digit season; defaults to current year", - "in": "query", - "name": "season", - "type": "integer", - "x-example": 2026 - }, - { - "description": "Stat group", - "enum": [ - "hitting", - "pitching", - "fielding", - "catching", - "running", - "game", - "team", - "streak" - ], + "description": "Native result-circuit UUID from result event metadata", "in": "query", - "name": "group", + "name": "circuit_uuid", "required": true, - "type": "string", - "x-example": "hitting" - }, - { - "default": "season", - "description": "Stats API stat type; defaults to season", - "enum": [ - "projected", - "projectedRos", - "yearByYear", - "yearByYearAdvanced", - "yearByYearPlayoffs", - "season", - "standard", - "advanced", - "career", - "careerRegularSeason", - "careerAdvanced", - "seasonAdvanced", - "careerStatSplits", - "careerPlayoffs", - "gameLog", - "playLog", - "pitchLog", - "pitchArsenal", - "outsAboveAverage", - "expectedStatistics", - "sabermetrics", - "sprayChart", - "tracking", - "vsPlayer", - "vsPlayerTotal", - "vsPlayer5Y", - "vsTeam", - "vsTeam5Y", - "vsTeamTotal", - "lastXGames", - "byDateRange", - "byDateRangeAdvanced", - "byMonth", - "byMonthPlayoffs", - "byDayOfWeek", - "byDayOfWeekPlayoffs", - "homeAndAway", - "homeAndAwayPlayoffs", - "winLoss", - "winLossPlayoffs", - "rankings", - "rankingsByYear", - "statsSingleSeason", - "statsSingleSeasonAdvanced", - "hotColdZones", - "availableStats", - "opponentsFaced", - "gameTypeStats", - "firstYearStats", - "lastYearStats", - "statSplits", - "statSplitsAdvanced", - "atGameStart", - "vsOpponents", - "sabermetricsMultiTeam", - "projected_Zips", - "projected_ZipsRos", - "projected_Zips2YR", - "projected_Zips3YR" - ], - "in": "query", - "name": "stat_type", "type": "string" }, { - "description": "MLB game type", + "description": "Native circuit-statistics category name", "enum": [ - "S", - "R", - "F", - "D", - "L", - "W", - "C", - "P", - "A", - "I", - "E" + "motogp", + "moto2", + "moto3", + "motoe" ], "in": "query", - "name": "game_type", - "type": "string" - }, - { - "description": "Start date for byDateRange stat types; requires end_date", - "in": "query", - "name": "start_date", - "type": "string" - }, - { - "description": "End date for byDateRange stat types; requires start_date", - "in": "query", - "name": "end_date", - "type": "string" - }, - { - "description": "Required by vsTeam stat types", - "in": "query", - "name": "opponent_team_id", - "type": "string" - }, - { - "description": "Required by vsPlayer stat types", - "in": "query", - "name": "opponent_player_id", + "name": "category_name", + "required": true, "type": "string" } ], @@ -428958,7 +507605,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statsResponseDoc" + "$ref": "#/definitions/motogp.ObjectResponseDoc" } }, "400": { @@ -428973,12 +507620,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -428991,129 +507632,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get MLB player season statistics", + "summary": "Get native MotoGP circuit win records", "tags": [ - "MLB" + "MotoGP" ] } }, - "/mlb/prospect-rankings": { + "/motogp/classifications": { "get": { - "description": "Returns MLB Pipeline's curated Top 100, Top 30 by Team, Top 10 by Position, Draft Top 200, or International Top 50 ranking. The anonymous first-party page embeds full ranked data. Search, sort, team filtering on Top 100, and pagination are applied to the extracted rows. Use mlb_discovery for the exact view, year, team, position, and sort values.", - "operationId": "mlb-prospect-rankings", + "consumes": [ + "application/json" + ], + "description": "Reads anonymous MotoGP results metadata using the result UUID namespace. Historical categories and test events retain their native source fields.", + "operationId": "motogp-classifications", "parameters": [ { - "default": "top100", - "description": "Ranking view", - "enum": [ - "top100", - "team", - "position", - "draft", - "international" - ], - "in": "query", - "name": "view", - "type": "string" - }, - { - "default": 2026, - "description": "Ranking year", - "enum": [ - 2026, - 2025, - 2024, - 2023, - 2022, - 2021, - 2020, - 2019, - 2018, - 2017, - 2016, - 2015, - 2014, - 2013, - 2011, - 2012 - ], - "in": "query", - "name": "year", - "type": "integer" - }, - { - "description": "Required for view=team; one of the MLB Pipeline team ranking slugs. See mlb_discovery.", - "in": "query", - "name": "team_slug", - "type": "string" - }, - { - "description": "Required for view=position", - "enum": [ - "1b", - "2b", - "ss", - "3b", - "c", - "of", - "rhp", - "lhp" - ], - "in": "query", - "name": "position", - "type": "string" - }, - { - "description": "Optional organization filter for view=top100; use a team slug from mlb_discovery.", - "in": "query", - "name": "team_filter", - "type": "string" - }, - { - "description": "Case-insensitive player-name substring", - "in": "query", - "name": "q", - "type": "string" - }, - { - "default": "rank", - "description": "Local sort field", - "enum": [ - "rank", - "level", - "eta", - "age" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Local sort direction", - "enum": [ - "asc", - "desc" - ], + "description": "Result UUID from the corresponding discovery resource", "in": "query", - "name": "sort_dir", + "name": "session_uuid", + "required": true, "type": "string" }, { - "default": 250, - "description": "Rows per page (1-250)", - "in": "query", - "maximum": 250, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "description": "Zero-based row offset", + "default": false, + "description": "Native test-session flag; defaults to false", "in": "query", - "maximum": 10000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "test", + "type": "boolean" } ], "produces": [ @@ -429123,7 +507668,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.prospectRankingsResponseDoc" + "$ref": "#/definitions/motogp.ObjectResponseDoc" } }, "400": { @@ -429132,6 +507677,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -429144,122 +507695,22 @@ "ApiKeyAuth": [] } ], - "summary": "Get MLB Pipeline curated prospect rankings", + "summary": "Get a native MotoGP session classification", "tags": [ - "MLB" + "MotoGP" ] } }, - "/mlb/prospect-stats": { + "/motogp/content/categories": { "get": { - "description": "Returns MLB Pipeline prospect stats from the anonymous first-party prospect tables. Supports the Top 100, all-prospect, or one-team list; batter/pitcher views; validated date periods and minimum thresholds; and local name/position filters. Use mlb_discovery for date periods, minimum thresholds, and positions. Team ids come from mlb_teams.", - "operationId": "mlb-prospect-stats", + "description": "Returns the complete native category entity IDs, names and signed numeric legacy IDs for a source season year. These category UUIDs differ from event-instance and result-category UUIDs. Legacy IDs select latest sports sessions; historical choices can have no available session and return404 there.", + "operationId": "motogp-content-categories", "parameters": [ { - "default": "top100", - "description": "Prospect pool", - "enum": [ - "top100", - "all" - ], - "in": "query", - "name": "list_type", - "type": "string" - }, - { - "description": "Optional MLB team id; selects that team's prospect list and overrides list_type", - "in": "query", - "name": "team_id", - "type": "string" - }, - { - "default": "Year2026", - "description": "Prospect table period", - "enum": [ - "today", - "1day", - "10day", - "30day", - "springTraining", - "Year2019", - "Year2020", - "Year2021", - "Year2022", - "Year2023", - "Year2024", - "Year2025", - "Year2026" - ], - "in": "query", - "name": "date_range", - "type": "string" - }, - { - "default": "batters", - "description": "Player table", - "enum": [ - "batters", - "pitchers" - ], - "in": "query", - "name": "player_type", - "type": "string" - }, - { - "default": 1, - "description": "Minimum PA threshold", - "enum": [ - 1, - 5, - 10, - 25, - 50, - 100, - 150, - 200, - 250 - ], - "in": "query", - "name": "min_pa", - "type": "integer" - }, - { - "description": "Position filter", - "enum": [ - "1b", - "2b", - "ss", - "3b", - "c", - "of", - "rhp", - "lhp" - ], - "in": "query", - "name": "position", - "type": "string" - }, - { - "description": "Case-insensitive player-name substring", - "in": "query", - "name": "q", - "type": "string" - }, - { - "default": 100, - "description": "Rows to return (1-100)", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "description": "Zero-based row offset", + "description": "Four-digit source year; seasons discovery supplies published choices", "in": "query", - "maximum": 10000, - "minimum": 0, - "name": "offset", + "name": "season_year", + "required": true, "type": "integer" } ], @@ -429270,7 +507721,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.prospectStatsResponseDoc" + "$ref": "#/definitions/motogp.ArrayResponseDoc" } }, "400": { @@ -429279,6 +507730,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -429291,63 +507748,23 @@ "ApiKeyAuth": [] } ], - "summary": "Get MLB Pipeline prospect statistics and rankings", + "summary": "Read MotoGP content category catalog", "tags": [ - "MLB" + "MotoGP" ] } }, - "/mlb/schedule": { + "/motogp/content/events": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns MLB games, teams, scores, status, probable pitchers, venue, and series information for one date or date range, optionally filtered to a team.", - "operationId": "mlb-schedule", + "description": "Returns all source event metadata in native order, including GP, test and media-event timing metadata. Preserves native schedules, season context, venue/track fields, category relations and availability flags. Assets, playback, client location and venue narrative content are excluded. Source season years can include preseason dates in the preceding calendar year. No locally computed filters, timezone transforms or pagination.", + "operationId": "motogp-content-events", "parameters": [ { - "description": "Single date in YYYY-MM-DD format", - "in": "query", - "name": "date", - "type": "string", - "x-example": "2026-08-01" - }, - { - "description": "Range start in YYYY-MM-DD format", - "in": "query", - "name": "start_date", - "type": "string" - }, - { - "description": "Range end in YYYY-MM-DD format", - "in": "query", - "name": "end_date", - "type": "string" - }, - { - "description": "Numeric MLB team id", - "in": "query", - "name": "team_id", - "type": "string" - }, - { - "description": "Game type", - "enum": [ - "S", - "R", - "F", - "D", - "L", - "W", - "C", - "P", - "A", - "I", - "E" - ], + "description": "Four-digit source season year", "in": "query", - "name": "game_type", - "type": "string" + "name": "season_year", + "required": true, + "type": "integer" } ], "produces": [ @@ -429357,7 +507774,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.scheduleResponseDoc" + "$ref": "#/definitions/motogp.ArrayResponseDoc" } }, "400": { @@ -429366,8 +507783,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -429384,24 +507801,23 @@ "ApiKeyAuth": [] } ], - "summary": "Get the MLB schedule and scores", + "summary": "Read MotoGP content event catalog", "tags": [ - "MLB" + "MotoGP" ] } }, - "/mlb/search": { + "/motogp/content/events/{id}": { "get": { - "description": "Returns the same anonymous MLB typeahead categories used by MLB.com: player suggestions, team suggestions, content topics, and search terms. Queries need at least three characters.", - "operationId": "mlb-search", + "description": "Uses a content-event UUID from the content catalog or session metadata. Returns the native public event/category/venue/track/schedule metadata and explicit result-event/result-circuit UUID bridges when present. Does not synthesize mappings or hydrate classifications. Preserves nulls, dates and source spelling; excludes assets, playback, client location and venue narratives.", + "operationId": "motogp-content-event", "parameters": [ { - "description": "Search text; 3-100 characters", - "in": "query", - "name": "q", + "description": "Content-event UUID; not a result-event UUID", + "in": "path", + "name": "id", "required": true, - "type": "string", - "x-example": "Yankees" + "type": "string" } ], "produces": [ @@ -429411,7 +507827,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.searchResponseDoc" + "$ref": "#/definitions/motogp.ObjectResponseDoc" } }, "400": { @@ -429420,6 +507836,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -429432,55 +507854,44 @@ "ApiKeyAuth": [] } ], - "summary": "Search MLB players, teams, and content topics", + "summary": "Read MotoGP content event metadata", "tags": [ - "MLB" + "MotoGP" ] } }, - "/mlb/standings": { + "/motogp/content/sessions/latest": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns American League and National League standings, including source-provided expected, home/away, last-ten, ranking, and elimination fields when available, using any supported standings type returned by mlb_discovery.", - "operationId": "mlb-standings", + "description": "Reads the native sport/session resource, with optional signed legacy-category and GP/test selectors. Omission preserves the upstream default. Returned session/category/event IDs are content metadata IDs, not result-session/category UUIDs. Historical categories can return older sessions or native404. Null season fields and published timing/availability flags remain unchanged; no media or account access.", + "operationId": "motogp-latest-session", "parameters": [ { - "description": "Four-digit season; defaults to current year", + "description": "Native numeric legacy_id from content category catalog", + "enum": [ + -1, + 1, + 2, + 3, + 5, + 7, + 8, + 9, + 10, + 19 + ], "in": "query", - "name": "season", - "type": "integer", - "x-example": 2026 + "name": "category_legacy_id", + "type": "integer" }, { - "default": "regularSeason", - "description": "Standings type", + "description": "Optional native sports-event kind", "enum": [ - "regularSeason", - "wildCard", - "divisionLeaders", - "wildCardWithLeaders", - "firstHalf", - "secondHalf", - "springTraining", - "postseason", - "byDivision", - "byConference", - "byLeague", - "byOrganization", - "currentHalf" + "gp", + "test" ], "in": "query", - "name": "type", + "name": "event_kind", "type": "string" - }, - { - "description": "Snapshot date in YYYY-MM-DD format; returns standings as of that date", - "in": "query", - "name": "date", - "type": "string", - "x-example": "2026-09-27" } ], "produces": [ @@ -429490,7 +507901,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.standingsResponseDoc" + "$ref": "#/definitions/motogp.ObjectResponseDoc" } }, "400": { @@ -429499,8 +507910,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -429517,324 +507928,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get MLB standings", + "summary": "Read latest MotoGP sports session metadata", "tags": [ - "MLB" + "MotoGP" ] } }, - "/mlb/statcast-abs-challenges": { + "/motogp/content/sessions/next-live": { "get": { - "description": "Returns Baseball Savant's ABS challenge table with repeated season, game type, split, challenging-team, opponent-team, pitch-type, and shadow-zone filters, plus challenger type, level, thresholds, leverage, pitch location, breakeven, and split-year controls. Filter values are live-verified and listed by /mlb/discovery. The entire filtered table is returned; UI-only drawer details and client-side sorting are not separate source filters.", - "operationId": "mlb-statcast-abs-challenges", - "parameters": [ - { - "default": "batter", - "description": "Challenge board group", - "enum": [ - "batter", - "batting-team", - "catcher", - "pitcher", - "catching-team", - "team-summary", - "league" - ], - "in": "query", - "name": "challenge_type", - "type": "string" - }, - { - "collectionFormat": "multi", - "description": "Season values", - "in": "query", - "items": { - "enum": [ - "2025", - "2026" - ], - "type": "string" - }, - "name": "seasons", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Game type codes", - "in": "query", - "items": { - "enum": [ - "R", - "S", - "F", - "D", - "L", - "W" - ], - "type": "string" - }, - "name": "game_types", - "type": "array" - }, - { - "default": "for", - "description": "Challenges made or against", - "enum": [ - "for", - "against" - ], - "in": "query", - "name": "data_mode", - "type": "string" - }, - { - "default": "chal", - "description": "Challenge count or run value", - "enum": [ - "chal", - "runs" - ], - "in": "query", - "name": "data_count", - "type": "string" - }, - { - "default": "1", - "description": "Minimum challenges made", - "enum": [ - "0", - "1", - "2", - "5", - "10", - "20" - ], - "in": "query", - "name": "min_challenges", - "type": "string" - }, - { - "default": "0", - "description": "Minimum challenges against", - "enum": [ - "0", - "1", - "2", - "5", - "10", - "20" - ], - "in": "query", - "name": "min_opponent_challenges", - "type": "string" - }, - { - "default": "mlb", - "description": "Competition level", - "enum": [ - "mlb", - "aaa" - ], - "in": "query", - "name": "level", - "type": "string" - }, - { - "description": "Leverage bucket; empty selects All", - "enum": [ - "vlow", - "low", - "med", - "high" - ], - "in": "query", - "name": "leverage", - "type": "string" - }, - { - "description": "Pitch location; empty selects All", - "enum": [ - "in", - "out" - ], - "in": "query", - "name": "ball_strike", - "type": "string" - }, - { - "description": "Challenge breakeven band; empty selects All", - "enum": [ - "low", - "med", - "high", - "vhigh" - ], - "in": "query", - "name": "breakeven", - "type": "string" - }, - { - "default": "1", - "description": "Separate year groups", - "enum": [ - "0", - "1" - ], - "in": "query", - "name": "split_year", - "type": "string" - }, - { - "collectionFormat": "multi", - "description": "Split dimensions", - "in": "query", - "items": { - "enum": [ - "api_game_date_month_text", - "game_type", - "bat_position_code", - "lineup_cd", - "leverage_run_value_code", - "is_strike_calc", - "home_away", - "api_pitch_type_group03", - "gameday3_pitchzone_cd", - "abschallenge_breakeven_code" - ], - "type": "string" - }, - "name": "splits", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Challenging MLB team ids", - "in": "query", - "items": { - "enum": [ - "141", - "110", - "139", - "111", - "147", - "114", - "118", - "116", - "142", - "145", - "108", - "117", - "133", - "136", - "140", - "144", - "146", - "121", - "120", - "143", - "158", - "138", - "112", - "134", - "113", - "109", - "119", - "137", - "135", - "115" - ], - "type": "string" - }, - "name": "challenge_team_ids", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Opponent MLB team ids", - "in": "query", - "items": { - "enum": [ - "141", - "110", - "139", - "111", - "147", - "114", - "118", - "116", - "142", - "145", - "108", - "117", - "133", - "136", - "140", - "144", - "146", - "121", - "120", - "143", - "158", - "138", - "112", - "134", - "113", - "109", - "119", - "137", - "135", - "115" - ], - "type": "string" - }, - "name": "opponent_team_ids", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Pitch type codes", - "in": "query", - "items": { - "enum": [ - "FF", - "SI", - "FC", - "CH", - "FS", - "FO", - "SC", - "CU", - "SL", - "ST", - "SV", - "KN" - ], - "type": "string" - }, - "name": "pitch_types", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Shadow zone codes", - "in": "query", - "items": { - "enum": [ - "11", - "12", - "13", - "14", - "16", - "17", - "18", - "19" - ], - "type": "string" - }, - "name": "shadow_zones", - "type": "array" - } - ], + "description": "Reads the native next-session request with live=true and returns reviewed public broadcast timing, category and event metadata. Preserves source ordering within nested metadata and null/false/zero values. Content-session UUIDs are not result-session UUIDs. Playback assets, account state, client location and venue narratives are excluded. No query parameters.", + "operationId": "motogp-next-live-session", "produces": [ "application/json" ], @@ -429842,7 +507945,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastABSChallengesResponseDoc" + "$ref": "#/definitions/motogp.ObjectResponseDoc" } }, "400": { @@ -429851,6 +507954,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -429863,121 +507972,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant ABS challenge rankings", + "summary": "Read next live MotoGP session metadata", "tags": [ - "MLB" + "MotoGP" ] } }, - "/mlb/statcast-active-spin": { + "/motogp/entries": { "get": { - "description": "Returns pitcher Active Spin table rows for the selected season/calculation method, minimum pitch count, and throwing hand. Table sorting and pagination are applied locally. The player search only highlights pitchers in the first-party SVG visualization; the SVG chart and CSV download remain outside this JSON table contract.", - "operationId": "mlb-statcast-active-spin", + "description": "Returns the whole native entry array and optional report link. Preserves professional rider identities, countries, numbers, team/constructor data and published wildcard/replacement/rookie flags. Validates the event's category context before reading entries. Does not reconcile entries with grids or infer active riders.", + "operationId": "motogp-entry-list", "parameters": [ { - "default": "2026_spin-based", - "description": "Season and calculation method", - "enum": [ - "2026_spin-based", - "2026_observed", - "2025_spin-based", - "2025_observed", - "2024_spin-based", - "2024_observed", - "2023_spin-based", - "2023_observed", - "2022_spin-based", - "2022_observed", - "2021_spin-based", - "2021_observed", - "2020_spin-based", - "2020_observed", - "2019_observed", - "2018_observed", - "2017_observed" - ], - "in": "query", - "name": "year", - "type": "string" - }, - { - "default": "50", - "description": "Minimum total pitches", - "enum": [ - "50", - "100", - "250", - "500", - "750", - "1000", - "1500", - "2000", - "2500", - "3000" - ], - "in": "query", - "name": "min", - "type": "string" - }, - { - "description": "Pitcher throwing hand; omit for both", - "enum": [ - "R", - "L" - ], - "in": "query", - "name": "hand", - "type": "string" - }, - { - "default": "formatted_active_spin_fourseam", - "description": "Local table sort field", - "enum": [ - "name_display_last_first", - "team_id", - "pitch_hand", - "formatted_active_spin_fourseam", - "formatted_active_spin_sinker", - "formatted_active_spin_cutter", - "formatted_active_spin_changeup", - "formatted_active_spin_splitter", - "formatted_active_spin_curve", - "formatted_active_spin_slider", - "formatted_active_spin_sweeper", - "formatted_active_spin_slurve" - ], + "description": "Result-event UUID from entry/grid options or event discovery", "in": "query", - "name": "sort", + "name": "event_uuid", + "required": true, "type": "string" }, { - "default": "desc", - "description": "Sort direction", - "enum": [ - "asc", - "desc" - ], + "description": "Result-category UUID from that event's category discovery", "in": "query", - "name": "sort_dir", + "name": "category_uuid", + "required": true, "type": "string" - }, - { - "default": 100, - "description": "Rows per page (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "default": 0, - "description": "Zero-based row offset", - "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" } ], "produces": [ @@ -429987,7 +508005,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastActiveSpinResponseDoc" + "$ref": "#/definitions/motogp.ObjectResponseDoc" } }, "400": { @@ -430014,255 +508032,23 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Active Spin rows", + "summary": "Read a MotoGP event category's published entry list", "tags": [ - "MLB" + "MotoGP" ] } }, - "/mlb/statcast-arm-angle": { + "/motogp/entry-grid-options/{id}": { "get": { - "description": "Returns Pitcher Arm Angle table rows and the matching MLB-average reference. Supports season, team, game type, pitch type, hand, batter side, pitch-count thresholds, date range, and up to four group-by selectors. Table sorting and pagination run locally. Visualization-only controls, animation, and CSV output are separate formats.", - "operationId": "mlb-statcast-arm-angle", + "description": "Resolves a native content event's explicit result-event bridge and categories. Returns complete entry-list UUID tuples and GP starting-grid season/shortname/category tuples. Uses the site's native category-name conversion. Missing bridges or mismatched category namespaces fail rather than inventing identifiers. No source rows or media are fetched for discovery.", + "operationId": "motogp-entry-grid-options", "parameters": [ { - "collectionFormat": "multi", - "description": "Seasons; at most three may be combined. Defaults to 2026.", - "in": "query", - "items": { - "enum": [ - "2026", - "2025", - "2024", - "2023", - "2022", - "2021", - "2020" - ], - "type": "string" - }, - "name": "seasons", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "MLB team ids; omit for all teams.", - "in": "query", - "items": { - "enum": [ - "108", - "109", - "110", - "111", - "112", - "113", - "114", - "115", - "116", - "117", - "118", - "119", - "120", - "121", - "133", - "134", - "135", - "136", - "137", - "138", - "139", - "140", - "141", - "142", - "143", - "144", - "145", - "146", - "147", - "158" - ], - "type": "string" - }, - "name": "teams", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Game type codes; defaults to R.", - "in": "query", - "items": { - "enum": [ - "R", - "F", - "D", - "L", - "W" - ], - "type": "string" - }, - "name": "game_types", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Pitch type codes; defaults to FF.", - "in": "query", - "items": { - "enum": [ - "FF", - "SI", - "FC", - "CH", - "FS", - "FO", - "SC", - "CU", - "SL", - "ST", - "SV", - "KN" - ], - "type": "string" - }, - "name": "pitch_types", - "type": "array" - }, - { - "description": "Pitcher throwing hand; omit for both.", - "enum": [ - "L", - "R" - ], - "in": "query", - "name": "pitch_hand", - "type": "string" - }, - { - "description": "Batter side; omit for both.", - "enum": [ - "L", - "R" - ], - "in": "query", - "name": "bat_side", - "type": "string" - }, - { - "description": "Minimum total pitches; defaults to q.", - "enum": [ - "q", - "1", - "5", - "10", - "25", - "50", - "100", - "300", - "500", - "1000", - "1500", - "2000", - "2500", - "3000" - ], - "in": "query", - "name": "min", - "type": "string" - }, - { - "description": "Minimum pitches per group; defaults to 1.", - "enum": [ - "1", - "5", - "10", - "25", - "50", - "100", - "300", - "500", - "1000", - "1500", - "2000" - ], - "in": "query", - "name": "min_group_pitches", - "type": "string" - }, - { - "collectionFormat": "multi", - "description": "Up to four grouping fields.", - "in": "query", - "items": { - "enum": [ - "year", - "api_game_date_month_text", - "api_pitch_type_group03", - "game_type", - "bat_side", - "fld_team_id" - ], - "type": "string" - }, - "name": "group_by", - "type": "array" - }, - { - "description": "Inclusive start date, YYYY-MM-DD.", - "in": "query", - "name": "date_start", - "type": "string" - }, - { - "description": "Inclusive end date, YYYY-MM-DD.", - "in": "query", - "name": "date_end", - "type": "string" - }, - { - "description": "Local table sort field; defaults to arm_angle.", - "enum": [ - "name", - "team_name", - "pitch_hand", - "n_pitches", - "arm_angle", - "release_ball_x", - "relative_release_ball_x", - "release_ball_z", - "relative_shoulder_x", - "shoulder_z" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Local sort direction; defaults to asc.", - "enum": [ - "asc", - "desc" - ], - "in": "query", - "name": "sort_dir", - "type": "string" - }, - { - "default": 100, - "description": "Rows per page (1-500).", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "default": 0, - "description": "Zero-based row offset (0-5000).", - "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "description": "Content-event UUID from content event discovery; this is a different namespace from result UUIDs", + "in": "path", + "name": "id", + "required": true, + "type": "string" } ], "produces": [ @@ -430272,7 +508058,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastArmAngleResponseDoc" + "$ref": "#/definitions/motogp.ObjectResponseDoc" } }, "400": { @@ -430299,166 +508085,141 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Pitcher Arm Angle rows", + "summary": "Discover MotoGP entry-list and grid selectors", "tags": [ - "MLB" + "MotoGP" ] } }, - "/mlb/statcast-arm-strength": { + "/motogp/event-files": { "get": { - "description": "Returns the player or team Arm Strength leaderboard with verified year, team, position metric, minimum throws, local sort, and pagination filters. The player detail route returns individual throw records.", - "operationId": "mlb-statcast-arm-strength", + "description": "Reads anonymous native result metadata. Result UUID namespaces and source report/record variants are preserved.", + "operationId": "motogp-event-files", "parameters": [ { - "default": "player", - "description": "Leaderboard row type", - "enum": [ - "player", - "team" - ], + "description": "Result UUID from the corresponding discovery resource", "in": "query", - "name": "type", + "name": "event_uuid", + "required": true, "type": "string" }, { - "default": "2026", - "description": "Season or all years", - "enum": [ - "2020", - "2021", - "2022", - "2023", - "2024", - "2025", - "2026", - "9999" - ], + "description": "Result UUID from the corresponding discovery resource", "in": "query", - "name": "year", + "name": "category_uuid", + "required": true, "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/motogp.ObjectResponseDoc" + } }, - { - "description": "MLB team id", - "enum": [ - "108", - "117", - "133", - "141", - "144", - "158", - "138", - "112", - "109", - "119", - "137", - "114", - "136", - "146", - "121", - "120", - "110", - "135", - "143", - "134", - "140", - "139", - "113", - "111", - "115", - "118", - "116", - "142", - "145", - "147" - ], - "in": "query", - "name": "team_id", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Position metric", - "enum": [ - "arm_inf", - "arm_of", - "arm_1b", - "arm_2b", - "arm_3b", - "arm_ss", - "arm_lf", - "arm_cf", - "arm_rf" - ], - "in": "query", - "name": "position", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": "50", - "description": "Minimum throws", - "enum": [ - "50", - "100", - "300", - "500", - "1000" - ], - "in": "query", - "name": "min_throws", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get native event and category report links", + "tags": [ + "MotoGP" + ] + } + }, + "/motogp/events": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Reads anonymous MotoGP results metadata using the result UUID namespace. Historical categories and test events retain their native source fields.", + "operationId": "motogp-events", + "parameters": [ { - "default": "max_arm_strength", - "description": "Local sort field", - "enum": [ - "fielder_name", - "team_name", - "total_throws", - "max_arm_strength", - "arm_overall", - "arm_inf", - "arm_of", - "arm_1b", - "arm_2b", - "arm_3b", - "arm_ss", - "arm_lf", - "arm_cf", - "arm_rf" - ], + "description": "Result UUID from the corresponding discovery resource", "in": "query", - "name": "sort", + "name": "season_uuid", + "required": true, "type": "string" }, { - "default": "desc", - "description": "Sort direction", - "enum": [ - "asc", - "desc" - ], + "description": "Native selector; omitted, true and false are distinct; true also includes the current weekend", "in": "query", - "name": "sort_dir", - "type": "string" + "name": "is_finished", + "type": "boolean" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/motogp.ArrayResponseDoc" + } }, - { - "default": 100, - "description": "Rows per page (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Zero-based row offset", - "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "ApiKeyAuth": [] } ], + "summary": "List native season events", + "tags": [ + "MotoGP" + ] + } + }, + "/motogp/seasons": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Reads anonymous MotoGP results metadata using the result UUID namespace. Historical categories and test events retain their native source fields.", + "operationId": "motogp-seasons", "produces": [ "application/json" ], @@ -430466,7 +508227,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastArmStrengthResponseDoc" + "$ref": "#/definitions/motogp.ArrayResponseDoc" } }, "400": { @@ -430475,6 +508236,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -430487,40 +508254,32 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Arm Strength leaderboard data", + "summary": "Discover MotoGP result seasons", "tags": [ - "MLB" + "MotoGP" ] } }, - "/mlb/statcast-arm-strength-player": { + "/motogp/sessions": { "get": { - "description": "Returns the individual Arm Strength throw records for one player, by positive `player_id`. `year` can be 2020 to 2026, or `9999` for all years, and defaults to the current verified season. Each throw has its year, fielder id, position, the measured arm-strength value and a play id.", - "operationId": "mlb-statcast-arm-strength-player", + "consumes": [ + "application/json" + ], + "description": "Reads anonymous MotoGP results metadata using the result UUID namespace. Historical categories and test events retain their native source fields.", + "operationId": "motogp-sessions", "parameters": [ { - "description": "Positive MLB player id", + "description": "Result UUID from the corresponding discovery resource", "in": "query", - "name": "player_id", + "name": "event_uuid", "required": true, - "type": "string", - "x-example": "694374" + "type": "string" }, { - "default": "2026", - "description": "Season or all years", - "enum": [ - "2020", - "2021", - "2022", - "2023", - "2024", - "2025", - "2026", - "9999" - ], + "description": "Result UUID from the corresponding discovery resource", "in": "query", - "name": "year", + "name": "category_uuid", + "required": true, "type": "string" } ], @@ -430531,7 +508290,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastArmStrengthPlayerResponseDoc" + "$ref": "#/definitions/motogp.ArrayResponseDoc" } }, "400": { @@ -430558,225 +508317,241 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant player throw details", + "summary": "List event and category sessions", "tags": [ - "MLB" + "MotoGP" ] } }, - "/mlb/statcast-arm-value": { + "/motogp/standings": { "get": { - "description": "Returns the Arm Value section's complete embedded table, including its Run, Fld, Pit, team, and league views, filters, local sorting, and pagination. Expanded player rows are available from mlb-statcast-arm-value-details. The JSON rows contain the same selected records as the upstream CSV export.", - "operationId": "mlb-statcast-arm-value", + "description": "Reads anonymous native result metadata. Result UUID namespaces and source report/record variants are preserved.", + "operationId": "motogp-standings", "parameters": [ { - "description": "Case- and accent-insensitive local substring on the displayed row name; up to 100 characters", + "description": "Result UUID from the corresponding discovery resource", "in": "query", - "name": "q", + "name": "season_uuid", + "required": true, "type": "string" }, { - "default": "Fld", - "description": "Leaderboard view", - "enum": [ - "Run", - "Fld", - "Pit", - "Batting Team", - "Pitching Team", - "League" - ], + "description": "Result UUID from the corresponding discovery resource", "in": "query", - "name": "type", + "name": "category_uuid", + "required": true, "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/motogp.ObjectResponseDoc" + } }, - { - "default": "Regular", - "description": "Game type", - "enum": [ - "Regular", - "Playoff", - "All" - ], - "in": "query", - "name": "game_type", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": "All", - "description": "Baserunner situation", - "enum": [ - "All", - "r10_to_2b_210", - "r10_to_3b_210", - "r11_to_3b_10", - "r11_to_3b_2", - "r11_to_hp_10", - "r11_to_hp_2", - "r12_to_hp_10", - "r12_to_hp_2", - "r13_to_hp_0", - "r13_to_hp_1" - ], + "ApiKeyAuth": [] + } + ], + "summary": "Get native season rider standings", + "tags": [ + "MotoGP" + ] + } + }, + "/motogp/standings-files": { + "get": { + "description": "Reads anonymous native result metadata. Result UUID namespaces and source report/record variants are preserved.", + "operationId": "motogp-standings-files", + "parameters": [ + { + "description": "Result UUID from the corresponding discovery resource", "in": "query", - "name": "key_base_out", + "name": "season_uuid", + "required": true, "type": "string" }, { - "default": "top", - "description": "Minimum opportunities", - "enum": [ - "top", - "1", - "5", - "10", - "20", - "30", - "40", - "50", - "75", - "100", - "250", - "500", - "1000" - ], + "description": "Result UUID from the corresponding discovery resource", "in": "query", - "name": "minimum_opps", + "name": "category_uuid", + "required": true, "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/motogp.ObjectResponseDoc" + } }, - { - "description": "Start season, 2016 through current season", - "in": "query", - "minimum": 2016, - "name": "start_year", - "type": "integer" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "End season, 2016 through current season; must be >= start_year", + "ApiKeyAuth": [] + } + ], + "summary": "Get native standings report links", + "tags": [ + "MotoGP" + ] + } + }, + "/motogp/starting-grid": { + "get": { + "description": "Reads the native season/shortname/category grid after validating its GP event context. Preserves native grid order, positions, times, professional rider/team data and optional penalty text. Biography and media fields are excluded. No qualifying-order calculation, row regrouping, entry reconciliation or local filters are added.", + "operationId": "motogp-starting-grid", + "parameters": [ + { + "description": "Native season_year from entry/grid options", "in": "query", - "minimum": 2016, - "name": "end_year", + "name": "season_year", + "required": true, "type": "integer" }, { - "default": "no", - "description": "Return one row per season", - "enum": [ - "no", - "yes" - ], + "description": "Exact native GP event shortname, up to four characters, from entry/grid options", "in": "query", - "name": "split", + "name": "shortname", + "required": true, "type": "string" }, { - "description": "MLB team id from mlb_discovery, split for All Teams Split by Team, or empty for All Teams", - "enum": [ - "108", - "117", - "133", - "141", - "144", - "158", - "138", - "112", - "109", - "119", - "137", - "114", - "136", - "146", - "121", - "120", - "110", - "135", - "143", - "134", - "140", - "139", - "113", - "111", - "115", - "118", - "116", - "142", - "145", - "147", - "split" - ], + "description": "Exact native category label from the same starting_grid option tuple", "in": "query", - "name": "team_id", + "name": "category_name", + "required": true, "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/motogp.ObjectResponseDoc" + } }, - { - "default": "1", - "description": "Team-roster membership for a selected team", - "enum": [ - "1", - "0" - ], - "in": "query", - "name": "with_team_only", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Local table sort field", - "enum": [ - "entity_name", - "team_name", - "start_year", - "runner_runs", - "fielder_runs", - "runner_runs_swipe", - "runner_runs_snipe", - "runner_runs_freeze", - "fielder_runs_swipe", - "fielder_runs_snipe", - "fielder_runs_freeze", - "n_opp_xb", - "n_att_xb", - "rate_att_xb", - "est_rate_att_generic_runner", - "est_rate_att_generic_fielder", - "rate_att_xb_diff_runner", - "rate_att_xb_diff_fielder", - "n_safe", - "rate_safe", - "rate_safe_per_attempt" - ], - "in": "query", - "name": "sort", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": "desc", - "description": "Local sort direction", - "enum": [ - "asc", - "desc" - ], - "in": "query", - "name": "sort_dir", - "type": "string" + "ApiKeyAuth": [] + } + ], + "summary": "Read a published MotoGP starting grid", + "tags": [ + "MotoGP" + ] + } + }, + "/nascar/live-feed": { + "get": { + "description": "Preserves the native anonymous feed and its source identity and timestamps. This resource does not accept series or historical selectors.", + "operationId": "nascar-live-feed", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/nascar.ResponseDoc" + } }, - { - "default": 100, - "description": "Rows per page (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Zero-based row offset", - "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "ApiKeyAuth": [] } ], + "summary": "Get NASCAR’s latest published global session feed", + "tags": [ + "NASCAR" + ] + } + }, + "/nascar/races": { + "get": { + "description": "Preserves the native anonymous feed and its source identity and timestamps. This resource does not accept series or historical selectors.", + "operationId": "nascar-races", "produces": [ "application/json" ], @@ -430784,7 +508559,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastArmValueResponseDoc" + "$ref": "#/definitions/nascar.ResponseDoc" } }, "400": { @@ -430805,165 +508580,136 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Extra Bases Run Value leaderboard data", + "summary": "Get the current-season NASCAR race feed", "tags": [ - "MLB" + "NASCAR" ] } }, - "/mlb/statcast-arm-value-details": { + "/nascar/races/{season}": { "get": { - "description": "Returns the game-level play details displayed when expanding a Run, Fld, or Pit player row in the Arm Value leaderboard. Pass the leaderboard filters used to produce the selected row.", - "operationId": "mlb-statcast-arm-value-details", + "description": "Returns the complete published source series groups for a native calendar year. Discover race and series IDs here before requesting a weekend. Year is a source resource key, not a guarantee that every historical/future file is published; missing or denied source objects remain errors.", + "operationId": "nascar-season-races", "parameters": [ { - "description": "Positive player id from an Arm Value player row", - "in": "query", - "name": "entity_id", + "description": "Four-digit native season year", + "in": "path", + "name": "season", "required": true, - "type": "string", - "x-example": "677800" - }, - { - "default": "Fld", - "description": "Player view", - "enum": [ - "Run", - "Fld", - "Pit" - ], - "in": "query", - "name": "type", - "type": "string" + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/nascar.ResponseDoc" + } }, - { - "default": "Regular", - "description": "Game type", - "enum": [ - "Regular", - "Playoff", - "All" - ], - "in": "query", - "name": "game_type", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "default": "All", - "description": "Baserunner situation", - "enum": [ - "All", - "r10_to_2b_210", - "r10_to_3b_210", - "r11_to_3b_10", - "r11_to_3b_2", - "r11_to_hp_10", - "r11_to_hp_2", - "r12_to_hp_10", - "r12_to_hp_2", - "r13_to_hp_0", - "r13_to_hp_1" - ], - "in": "query", - "name": "key_base_out", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": "top", - "description": "Minimum opportunities", - "enum": [ - "top", - "1", - "5", - "10", - "20", - "30", - "40", - "50", - "75", - "100", - "250", - "500", - "1000" - ], - "in": "query", - "name": "minimum_opps", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get a NASCAR season race feed", + "tags": [ + "NASCAR" + ] + } + }, + "/nascar/series": { + "get": { + "description": "Returns every native series ID and source group key in a published season feed. No marketing label or unavailable season inventory is invented. Omission selects the current UTC calendar year.", + "operationId": "nascar-series", + "parameters": [ { - "description": "Start season, 2016 through current season", + "description": "Published native season; omission uses current UTC year", "in": "query", - "minimum": 2016, - "name": "start_year", + "name": "season", "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/nascar.SeriesResponseDoc" + } }, - { - "description": "End season, 2016 through current season; must be >= start_year", - "in": "query", - "minimum": 2016, - "name": "end_year", - "type": "integer" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": "no", - "description": "Split leaderboard records by season", - "enum": [ - "no", - "yes" - ], - "in": "query", - "name": "split", - "type": "string" + "ApiKeyAuth": [] + } + ], + "summary": "Discover NASCAR source series IDs", + "tags": [ + "NASCAR" + ] + } + }, + "/nascar/weekend/{season}/{series}/{race}": { + "get": { + "description": "Returns all native weekend_race and weekend_runs rows for a discovered race, preserving source result fields, run types and timestamps. The race must belong to the selected native season/series; driver biography fields are omitted. No ranking, status inference or local series filtering is performed.", + "operationId": "nascar-race-weekend", + "parameters": [ + { + "description": "Four-digit native season", + "in": "path", + "name": "season", + "required": true, + "type": "integer" }, { - "description": "MLB team id from mlb_discovery, split, or empty", - "enum": [ - "108", - "117", - "133", - "141", - "144", - "158", - "138", - "112", - "109", - "119", - "137", - "114", - "136", - "146", - "121", - "120", - "110", - "135", - "143", - "134", - "140", - "139", - "113", - "111", - "115", - "118", - "116", - "142", - "145", - "147", - "split" - ], - "in": "query", - "name": "team_id", - "type": "string" + "description": "Source series ID from series/race discovery", + "in": "path", + "name": "series", + "required": true, + "type": "integer" }, { - "default": "1", - "description": "Team-roster membership for a selected team", - "enum": [ - "1", - "0" - ], - "in": "query", - "name": "with_team_only", - "type": "string" + "description": "Source race ID from selected season and series", + "in": "path", + "name": "race", + "required": true, + "type": "integer" } ], "produces": [ @@ -430973,7 +508719,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastArmValueDetailsResponseDoc" + "$ref": "#/definitions/nascar.ResponseDoc" } }, "400": { @@ -431000,355 +508746,293 @@ "ApiKeyAuth": [] } ], - "summary": "Get expanded Baseball Savant Arm Value player plays", + "summary": "Get NASCAR race-weekend results and sessions", "tags": [ - "MLB" + "NASCAR" ] } }, - "/mlb/statcast-baserunning": { + "/nationafrica/article": { "get": { - "description": "Returns Baseball Savant Baserunning Run Value, Basestealing, or Extra Bases Taken tables. All filter value sets were read from the live first-party controls; rows are embedded in the page response and searched, sorted, and paged locally. Use mlb_discovery.statcast_baserunning_filters for board-specific groups, thresholds, and sort fields. CSV and visual expansion modes are excluded; this returns the underlying JSON table rows.", - "operationId": "mlb-statcast-baserunning", + "description": "Returns public Nation Africa article metadata and body paragraphs from a canonical article URL. paywalled is true for a Premium story: the publisher serves an anonymous reader only the opening paragraph(s), so paragraphs is a partial teaser and nothing is bypassed. Video, photo, audio, puzzle and cartoon URLs are rejected with a 400.", + "operationId": "nationafrica-article", "parameters": [ { - "description": "Baseball Savant table", - "enum": [ - "baserunning-run-value", - "basestealing-running-game", - "baserunning" - ], + "description": "Canonical Nation Africa article URL", "in": "query", - "name": "board", + "name": "url", "required": true, "type": "string", - "x-example": "baserunning-run-value" - }, - { - "description": "Board group; accepted values depend on board", - "enum": [ - "Run", - "Bat", - "Batting Team", - "Pitching Team", - "Fld", - "Pit", - "League" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "default": "Regular", - "description": "Game scope", - "enum": [ - "Regular", - "Playoff", - "All" - ], - "in": "query", - "name": "game_type", - "type": "string" - }, - { - "description": "Inclusive first season", - "enum": [ - 2016, - 2017, - 2018, - 2019, - 2020, - 2021, - 2022, - 2023, - 2024, - 2025, - 2026 - ], - "in": "query", - "name": "season_start", - "type": "integer" - }, - { - "description": "Inclusive last season", - "enum": [ - 2016, - 2017, - 2018, - 2019, - 2020, - 2021, - 2022, - 2023, - 2024, - 2025, - 2026 - ], - "in": "query", - "name": "season_end", - "type": "integer" + "x-example": "https://nation.africa/kenya/news/rex-masai-inquest-verdict-on-killers-delayed-5608166" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } }, - { - "default": "no", - "description": "Return separate year rows", - "enum": [ - "no", - "yes" - ], - "in": "query", - "name": "split", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Board-specific row threshold", - "enum": [ - "q", - "top", - "1", - "5", - "10", - "20", - "30", - "40", - "50", - "75", - "100", - "250", - "500", - "1000", - "1500", - "2000" - ], - "in": "query", - "name": "n", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "MLB team id or split-team rows", - "enum": [ - "split", - "108", - "117", - "133", - "141", - "144", - "158", - "138", - "112", - "109", - "119", - "137", - "114", - "136", - "146", - "121", - "120", - "110", - "135", - "143", - "134", - "140", - "139", - "113", - "111", - "115", - "118", - "116", - "142", - "145", - "147" - ], - "in": "query", - "name": "team", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get Nation Africa article content", + "tags": [ + "Nation Africa" + ] + } + }, + "/nationafrica/author": { + "get": { + "description": "Returns one Nation Africa author's public profile: name, bio, portrait and the latest stories the profile page itself lists (a handful; the site loads the full list separately and it is not read).", + "operationId": "nationafrica-author", + "parameters": [ { - "default": true, - "description": "Restrict to selected team's active player rows; requires a specific team id", + "description": "Author slug, e.g. richard-munguti-11590", "in": "query", - "name": "with_team_only", - "type": "boolean" + "name": "slug", + "type": "string", + "x-example": "richard-munguti-11590" }, { - "default": "all", - "description": "Basestealing pitcher hand", - "enum": [ - "all", - "L", - "R" - ], + "description": "Canonical nation.africa/kenya/ URL; alternative to slug", "in": "query", - "name": "pitch_hand", - "type": "string" + "name": "url", + "type": "string", + "x-example": "https://nation.africa/kenya/richard-munguti-11590" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.nationAfricaAuthorResponseDoc" + } }, - { - "default": "All", - "description": "Basestealing runner outcome", - "enum": [ - "All", - "Advance", - "Out", - "Hold" - ], - "in": "query", - "name": "runner_moved", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "default": "All", - "description": "Basestealing target base", - "enum": [ - "All", - "2B", - "3B" - ], - "in": "query", - "name": "target_base", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": "All", - "description": "Basestealing prior pickoffs", - "enum": [ - "All", - "0", - "1", - "2", - "3" - ], - "in": "query", - "name": "prior_pk", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get a Nation Africa author profile", + "tags": [ + "Nation Africa" + ] + } + }, + "/nationafrica/headlines": { + "get": { + "description": "Returns the current story teasers of one public Nation Africa section page. Subscriber-only stories carry type \"premium\". Teasers show only a relative age, so published_at is omitted.", + "operationId": "nationafrica-headlines", + "parameters": [ { - "default": "All", - "description": "Extra Bases Taken situation", + "description": "Nation Africa section slug", "enum": [ - "All", - "r10_to_2b_210", - "r10_to_3b_210", - "r11_to_3b_10", - "r11_to_3b_2", - "r11_to_hp_10", - "r11_to_hp_2", - "r12_to_hp_10", - "r12_to_hp_2", - "r13_to_hp_0", - "r13_to_hp_1" + "news", + "politics", + "world", + "gender", + "education", + "business", + "companies", + "enterprise", + "finance-and-markets", + "seeds-of-gold", + "sports", + "football", + "athletics", + "rugby", + "motorsports", + "other-sports", + "talkup", + "counties", + "coast", + "lake-region", + "mountain", + "nairobi-metro", + "northern", + "rift-valley", + "blogs-opinion", + "opinion", + "editorials", + "letters", + "blogs", + "cutting-edge", + "life-and-style", + "wellness", + "travel", + "relationships", + "motoring", + "family", + "culture", + "art-books", + "health", + "healthy-nation", + "elections", + "elections-news", + "presidential", + "governor-race", + "constituencies", + "explainers", + "fact-checks" ], "in": "query", - "name": "key_base_out", - "type": "string" + "name": "section", + "required": true, + "type": "string", + "x-example": "news" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } }, - { - "description": "Local sort field; accepted values depend on board", - "enum": [ - "entity_name", - "team_name", - "start_year", - "N_runner_moved", - "N_runner_moved_SBX", - "N_runner_moved_XB", - "runner_runs_SB2", - "runner_runs_SB3", - "runner_runs_SBX", - "runner_runs_XB", - "runner_runs_XB_freeze", - "runner_runs_XB_snipe", - "runner_runs_XB_swipe", - "runner_runs_tot", - "simple_stolen_on_running_act_SB2", - "simple_stolen_on_running_act_SB3", - "bk", - "catcher_name", - "cs", - "entity_id", - "fb", - "fielder_name", - "game_date", - "n_bk", - "n_cs", - "n_fb", - "n_init", - "n_minus", - "n_pk", - "n_plus", - "n_sb", - "net_act_minus", - "net_act_plus", - "pitcher_name", - "pk", - "r_primary_lead", - "r_primary_lead_sbx", - "r_sec_minus_prim_lead", - "r_sec_minus_prim_lead_sbx", - "r_secondary_lead", - "r_secondary_lead_sbx", - "r_sprint_speed_top50percent", - "rate_sbx", - "runner_moved_cd", - "runner_name", - "runs_stolen_on_running_act", - "sb", - "sba", - "simple_stolen_on_running_act", - "target_base", - "runner_runs", - "fielder_runs", - "runner_runs_swipe", - "runner_runs_snipe", - "runner_runs_freeze", - "fielder_runs_swipe", - "fielder_runs_snipe", - "fielder_runs_freeze", - "n_opp_xb", - "rate_att_xb", - "est_rate_att_generic_runner", - "est_rate_att_generic_fielder", - "rate_att_xb_diff_runner", - "rate_att_xb_diff_fielder", - "n_safe", - "rate_safe", - "rate_safe_per_attempt" - ], - "in": "query", - "name": "sort", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": "desc", - "description": "Local sort direction", - "enum": [ - "asc", - "desc" - ], - "in": "query", - "name": "sort_dir", - "type": "string" + "ApiKeyAuth": [] + } + ], + "summary": "Get Nation Africa section headlines", + "tags": [ + "Nation Africa" + ] + } + }, + "/nationafrica/news": { + "get": { + "description": "Returns the newest Nation Africa (Daily Nation, Kenya) stories from its public news sitemap: headline, publication time and lead image. If the sitemap returns 404, it falls back to the public News section hub, whose relative timestamps may omit publication time. Video pages are excluded.", + "operationId": "nationafrica-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Case-insensitive substring in the displayed player or team name", - "in": "query", - "name": "search", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get Nation Africa top stories", + "tags": [ + "Nation Africa" + ] + } + }, + "/nationafrica/sections": { + "get": { + "description": "Lists the 47 section slugs of Nation Africa's Kenya edition accepted by `nationafrica-headlines`, such as `news`, `politics`, `counties`, `football` and `fact-checks`. Each entry has its `slug`, display `name` and section page `url`. Photo, video, audio, puzzle, newsletter and cartoon pages are not included.", + "operationId": "nationafrica-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "default": 100, - "description": "Rows per page, 1-500", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get Nation Africa sections", + "tags": [ + "Nation Africa" + ] + } + }, + "/national/article": { + "get": { + "description": "Returns article metadata and the body served to an anonymous visitor for one canonical The National story URL. The endpoint does not bypass subscriber or access gates and reports paywalled when the page marks content as restricted.", + "operationId": "national-article", + "parameters": [ { - "description": "Zero-based row offset", + "description": "Canonical thenationalnews.com article URL", "in": "query", - "maximum": 10000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.thenationalnews.com/future/technology/2026/09/29/ai-trump-midterm-poll-democrats/" } ], "produces": [ @@ -431358,7 +509042,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastBaserunningResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -431367,6 +509051,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -431379,369 +509069,416 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant baserunning leaderboard tables", + "summary": "Get The National article content", "tags": [ - "MLB" + "The National" ] } }, - "/mlb/statcast-bat-tracking": { + "/national/author": { "get": { - "description": "Returns batter, batting-team, pitcher, pitching-team, or league bat-tracking rows with the live page's season, game type, swing threshold, date, side, contact, attack zone, team, pitch, count, and grouping filters. Use mlb_discovery for the same complete value sets. Multi-value filters are passed as repeated query parameters.", - "operationId": "mlb-statcast-bat-tracking", + "description": "Returns one public author topic page, its name, optional author image and the latest article cards listed on that page.", + "operationId": "national-author", "parameters": [ { - "default": "batter", - "description": "Table row type", - "enum": [ - "batter", - "batting-team", - "pitcher", - "pitching-team", - "league" - ], + "description": "The National author slug, e.g. cody-combs", "in": "query", - "name": "type", - "type": "string" + "name": "slug", + "type": "string", + "x-example": "cody-combs" }, { - "default": "2026", - "description": "First season", - "enum": [ - "2023", - "2024", - "2025", - "2026" - ], + "description": "Canonical thenationalnews.com/topics/Author/ URL; alternative to slug", "in": "query", - "name": "season_start", - "type": "string" + "name": "url", + "type": "string", + "x-example": "https://www.thenationalnews.com/topics/Author/cody-combs/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.nationalAuthorResponseDoc" + } }, - { - "default": "season_start", - "description": "Last season; must be >= season_start", - "enum": [ - "2023", - "2024", - "2025", - "2026" - ], - "in": "query", - "name": "season_end", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "default": "Regular", - "description": "Game type", - "enum": [ - "Any", - "Playoff", - "Regular" - ], - "in": "query", - "name": "game_type", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": "q", - "description": "Minimum swing qualifier", - "enum": [ - "q", - "1", - "5", - "10", - "25", - "50", - "100", - "200", - "500", - "1000" - ], - "in": "query", - "name": "min_swings", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get a The National author profile", + "tags": [ + "The National" + ] + } + }, + "/national/headlines": { + "get": { + "description": "Returns current The National stories for a category. Pass one of the editorial section slugs from national_sections. A valid category with no current stories returns an empty items list.", + "operationId": "national-headlines", + "parameters": [ { - "default": "1", - "description": "Minimum swings per grouped row", + "description": "The National editorial section slug", "enum": [ - "1", - "5", - "10", - "25", - "50", - "100", - "200", - "500", - "1000" + "news", + "news/uae", + "news/gulf", + "news/mena", + "mena/arab-showcase", + "news/us", + "news/uk", + "news/europe", + "news/asia", + "business", + "business/aviation", + "business/economy", + "business/energy", + "business/money", + "business/property", + "business/banking", + "business/uk", + "business/markets", + "in-focus", + "opinion", + "opinion/comment", + "opinion/editorial", + "opinion/obituaries", + "opinion/cartoon", + "opinion/feedback", + "future", + "future/science", + "future/space", + "future/technology", + "climate", + "climate/environment", + "climate/road-to-net-zero", + "health", + "arts-culture", + "arts-culture/art-design", + "arts-culture/books", + "arts-culture/film-tv", + "arts-culture/music-stage", + "arts-culture/pop-culture", + "lifestyle", + "travel", + "lifestyle/fashion-beauty", + "lifestyle/food", + "lifestyle/motoring", + "magazine", + "lifestyle/luxury", + "lifestyle/home-garden", + "lifestyle/wellbeing", + "lifestyle/things-to-do", + "sport", + "sport/football", + "sport/cricket", + "sport/f1", + "sport/tennis", + "sport/combat-sports", + "sport/cycling", + "weekend" ], "in": "query", - "name": "min_group_swings", - "type": "string" + "name": "section", + "required": true, + "type": "string", + "x-example": "news" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } }, - { - "description": "Optional date range start in YYYY-MM-DD", - "in": "query", - "name": "date_start", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Optional date range end in YYYY-MM-DD", - "in": "query", - "name": "date_end", - "type": "string" + "ApiKeyAuth": [] + } + ], + "summary": "Get The National section headlines", + "tags": [ + "The National" + ] + } + }, + "/national/news": { + "get": { + "description": "Returns current The National UAE stories.", + "operationId": "national-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, - { - "description": "Batter side", - "enum": [ - "L", - "R" - ], - "in": "query", - "name": "bat_side", - "type": "string" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Contact type", - "enum": [ - "2", - "4", - "9" - ], - "in": "query", - "name": "contact_type", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get The National top stories", + "tags": [ + "The National" + ] + } + }, + "/national/sections": { + "get": { + "description": "Returns all 57 editorial categories in The National's section taxonomy that are accepted by national_headlines. Podcast, newsletter, puzzle, partner and promotional surfaces are excluded.", + "operationId": "national-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Hard-hit filter", - "enum": [ - "1", - "0" - ], - "in": "query", - "name": "is_hard_hit", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get The National sections", + "tags": [ + "The National" + ] + } + }, + "/nationalpost/article": { + "get": { + "description": "Returns public National Post article metadata and body paragraphs from a canonical article URL. paywalled is true when the publisher marks the story subscriber-only or registration-gated; National Post gates these stories in the reader's browser but still serves the complete text to an anonymous request, so paragraphs is the whole body and nothing is bypassed. Category, tag, author and Sponsored URLs are rejected with a 400.", + "operationId": "nationalpost-article", + "parameters": [ { - "description": "Attack zone", - "enum": [ - "0", - "1", - "1.1", - "2", - "3" - ], + "description": "Canonical National Post article URL", "in": "query", - "name": "attack_zone", - "type": "string" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://nationalpost.com/news/politics/carney-will-miss-target-balancing-operating-budget-pbo-says" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } }, - { - "description": "Pitcher hand", - "enum": [ - "L", - "R" - ], - "in": "query", - "name": "pitch_hand", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "collectionFormat": "multi", - "description": "One or more MLB team ids", - "in": "query", - "items": { - "enum": [ - "108", - "109", - "110", - "111", - "112", - "113", - "114", - "115", - "116", - "117", - "118", - "119", - "120", - "121", - "133", - "134", - "135", - "136", - "137", - "138", - "139", - "140", - "141", - "142", - "143", - "144", - "145", - "146", - "147", - "158" - ], - "type": "string" - }, - "name": "teams", - "type": "array" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "collectionFormat": "multi", - "description": "One or more pitch types", - "in": "query", - "items": { - "enum": [ - "FF", - "SI", - "FC", - "CH", - "FS", - "FO", - "SC", - "CU", - "SL", - "ST", - "SV", - "KN" - ], - "type": "string" - }, - "name": "pitch_types", - "type": "array" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get National Post article content", + "tags": [ + "National Post" + ] + } + }, + "/nationalpost/author": { + "get": { + "description": "Returns one National Post author's public profile: name, bio when the author has one, the total number of stories the page attributes to them, and their latest stories (first page).", + "operationId": "nationalpost-author", + "parameters": [ { - "collectionFormat": "multi", - "description": "One or more ball-strike counts", + "description": "Author slug, e.g. stuckpostmedia-com", "in": "query", - "items": { - "enum": [ - "00", - "01", - "02", - "10", - "11", - "12", - "20", - "21", - "22", - "30", - "31", - "32" - ], - "type": "string" - }, - "name": "counts", - "type": "array" + "name": "slug", + "type": "string", + "x-example": "stuckpostmedia-com" }, { - "collectionFormat": "multi", - "description": "Up to four grouping columns", + "description": "Canonical nationalpost.com/author// URL; alternative to slug", "in": "query", - "items": { - "enum": [ - "year", - "api_game_date_month_text", - "bat_contact_code", - "api_pitch_type_group03", - "game_type", - "is_hit_into_play_hardhit", - "is_best_speed", - "pitch_hand", - "bat_side", - "is_pre_ball_count_3", - "is_pre_strike_count_2" - ], - "type": "string" - }, - "name": "group_by", - "type": "array" + "name": "url", + "type": "string", + "x-example": "https://nationalpost.com/author/stuckpostmedia-com/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.nationalPostAuthorResponseDoc" + } }, - { - "default": "avg_sweetspot_speed_mph_qualified", - "description": "Local row sort field", - "enum": [ - "avg_batter_x_position", - "avg_batter_y_position", - "avg_intercept_x_vs_batter", - "avg_intercept_y_vs_batter", - "avg_foot_sep0", - "avg_foot_angle0", - "attack_direction_pullopp", - "rate_ideal_attack_angle", - "attack_angle", - "avg_plane_vertical_angle", - "avg_sweetspot_speed_mph", - "avg_sweetspot_speed_mph_qualified", - "avg_is_sweetspot_speed_high", - "avg_is_sweetspot_speed_high_qualified", - "squared_up", - "squared_up_qualified", - "squared_up_per_bat_contact", - "squared_up_per_swing", - "squared_up_with_speed", - "squared_up_with_speed_qualified", - "squared_up_with_speed_per_bat_contact", - "squared_up_with_speed_per_swing", - "swing_length_qualified", - "swords", - "swings_qualified", - "percent_qualified", - "hit_into_play_qualified", - "bat_contact", - "bat_contact_qualified", - "count", - "delta_run_exp", - "hit_into_play_per_swing", - "pitcher_delta_run_exp", - "strikes_swinging_qualified", - "sweetspot_speed_high_qualified", - "strike_swinging_per_swing", - "id", - "name", - "batter_name", - "b_name_display_first_last", - "savant_batter_id", - "team_id", - "team_name", - "side", - "n_sides", - "n_teams", - "bat_side_formatted" - ], - "in": "query", - "name": "sort", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "default": "desc", - "description": "Sort direction", - "enum": [ - "asc", - "desc" - ], - "in": "query", - "name": "sort_dir", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": 100, - "description": "Rows per page (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get a National Post author profile", + "tags": [ + "National Post" + ] + } + }, + "/nationalpost/headlines": { + "get": { + "description": "Returns National Post headlines for one section; `section` is required and takes one of 45 slugs such as `canada`, `hockey` or `deals`. The top-level sections `health`, `opinion`, `longreads`, `modern-life`, `travel`, `entertainment`, `shopping-essentials` and `sports` return 10 stories with publication time and byline. Others return up to about 45 without either. Sponsored stories are left out.", + "operationId": "nationalpost-headlines", + "parameters": [ { - "default": 0, - "description": "Zero-based row offset", + "description": "National Post section slug", + "enum": [ + "canada", + "true-crime", + "politics", + "health", + "world", + "israel-middle-east", + "opinion", + "longreads", + "modern-life", + "food", + "horoscopes", + "style-beauty", + "travel", + "travel-canada", + "travel-usa", + "travel-international", + "travel-cruises", + "travel-guide", + "entertainment", + "books", + "celebrity", + "movies", + "music", + "theatre", + "television", + "business-essentials", + "shopping-essentials", + "buy-canadian", + "home-living", + "outdoor-living", + "kitchen-dining", + "tech", + "personal-care", + "entertainment-hobbies", + "gift-guide", + "deals", + "sports", + "hockey", + "baseball", + "basketball", + "football", + "soccer", + "golf", + "tennis", + "driving" + ], "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "section", + "required": true, + "type": "string", + "x-example": "canada" } ], "produces": [ @@ -431751,7 +509488,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastBatTrackingResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -431760,11 +509497,37 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get National Post section headlines", + "tags": [ + "National Post" + ] + } + }, + "/nationalpost/news": { + "get": { + "description": "Returns the latest 10 National Post stories across all sections, with no parameters. Each item has a title, canonical article URL, one-line summary, publication time and byline. Use `nationalpost-headlines` to read a single section.", + "operationId": "nationalpost-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "503": { "description": "Service Unavailable", @@ -431778,297 +509541,77 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant bat-tracking rows", + "summary": "Get National Post top stories", "tags": [ - "MLB" + "National Post" ] } }, - "/mlb/statcast-batted-ball": { + "/nationalpost/sections": { "get": { - "description": "Returns the Batted Ball Profile table for batters, batting teams, pitchers, pitching teams, or league totals. Supports first-party season, game type, split, team, date, side, hand, pitch type, event threshold, and split-group threshold filters. The All-Star A game type is accepted by the live page query although its checkbox is hidden. Sorting and pagination are local. The league-average reference row is returned separately when requested; CSV and visualization controls are outside this JSON contract.", - "operationId": "mlb-statcast-batted-ball", - "parameters": [ - { - "default": "batter", - "description": "Row type", - "enum": [ - "batter", - "batting-team", - "pitcher", - "pitching-team", - "league" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "collectionFormat": "multi", - "description": "One or more seasons", - "in": "query", - "items": { - "enum": [ - "2015", - "2016", - "2017", - "2018", - "2019", - "2020", - "2021", - "2022", - "2023", - "2024", - "2025", - "2026" - ], - "type": "string" - }, - "name": "seasons", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "One or more game type codes", - "in": "query", - "items": { - "enum": [ - "R", - "A", - "F", - "D", - "L", - "W" - ], - "type": "string" - }, - "name": "game_types", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "One or more split dimensions", - "in": "query", - "items": { - "enum": [ - "api_game_date_month_text", - "game_type", - "api_pitch_type_group03", - "bat_side", - "pitch_hand" - ], - "type": "string" - }, - "name": "splits", - "type": "array" - }, - { - "default": "q", - "description": "Minimum batted-ball events", - "enum": [ - "q", - "1", - "5", - "10", - "25", - "50", - "100", - "200", - "500", - "1000" - ], - "in": "query", - "name": "min", - "type": "string" - }, - { - "default": "1", - "description": "Minimum rows per split group", - "enum": [ - "1", - "5", - "10", - "25", - "50", - "100", - "200", - "500", - "1000" - ], - "in": "query", - "name": "min_split", - "type": "string" - }, - { - "default": "1", - "description": "Split seasons into separate rows", - "enum": [ - "1", - "0" - ], - "in": "query", - "name": "split_year", - "type": "string" - }, - { - "collectionFormat": "multi", - "description": "One or more MLB team ids", - "in": "query", - "items": { - "enum": [ - "108", - "109", - "110", - "111", - "112", - "113", - "114", - "115", - "116", - "117", - "118", - "119", - "120", - "121", - "133", - "134", - "135", - "136", - "137", - "138", - "139", - "140", - "141", - "142", - "143", - "144", - "145", - "146", - "147", - "158" - ], - "type": "string" - }, - "name": "teams", - "type": "array" - }, - { - "description": "YYYY-MM-DD date range start (2015-04-05 through today)", - "in": "query", - "name": "date_start", - "type": "string" - }, - { - "description": "YYYY-MM-DD date range end (2015-04-05 through today)", - "in": "query", - "name": "date_end", - "type": "string" - }, - { - "description": "Batter side", - "enum": [ - "L", - "R" - ], - "in": "query", - "name": "bat_side", - "type": "string" - }, - { - "description": "Pitcher throwing hand", - "enum": [ - "L", - "R" - ], - "in": "query", - "name": "pitch_hand", - "type": "string" - }, - { - "collectionFormat": "multi", - "description": "One or more pitch type codes", - "in": "query", - "items": { - "enum": [ - "FF", - "SI", - "FC", - "CH", - "FS", - "FO", - "SC", - "CU", - "SL", - "ST", - "SV", - "KN" - ], - "type": "string" - }, - "name": "pitch_types", - "type": "array" - }, + "description": "Lists the 45 National Post section slugs accepted by `nationalpost-headlines`, such as `canada`, `opinion`, `hockey` and `gift-guide`, each with its display `name` and category page `url`. Links that leave nationalpost.com (Financial Post, Driving.ca, puzzles, classifieds, e-paper) and the paid Sponsored categories are not included.", + "operationId": "nationalpost-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "default": false, - "description": "Include the first-party league-average reference row", - "in": "query", - "name": "include_league_average", - "type": "boolean" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get National Post sections", + "tags": [ + "National Post" + ] + } + }, + "/nba/box-score": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the traditional box score for one game: both teams and, per team, one row per player with player id, name, jersey number, position, starter flag, minutes, points, rebounds, assists and field goals made. The player ids are the source's stable player identity used by the player-statistics routes.", + "operationId": "nba-box-score", + "parameters": [ { - "default": "pull_air_rate", - "description": "Local table sort field", - "enum": [ - "name", - "team_name", - "num_bbe", - "gb_rate", - "air_rate", - "fb_rate", - "ld_rate", - "pu_rate", - "pull_rate", - "straight_rate", - "oppo_rate", - "pull_gb_rate", - "straight_gb_rate", - "oppo_gb_rate", - "pull_air_rate", - "straight_air_rate", - "oppo_air_rate" - ], + "description": "Ten-digit game id from nba-scoreboard", "in": "query", - "name": "sort", - "type": "string" + "name": "game_id", + "required": true, + "type": "string", + "x-example": "0022600196" }, { - "default": "desc", - "description": "Sort direction", + "description": "League id; only 00 (NBA) is verified", "enum": [ - "asc", - "desc" + "00" ], "in": "query", - "name": "sort_dir", - "type": "string" + "name": "league_id", + "type": "string", + "x-example": "00" }, { - "default": 100, - "description": "Rows per page (1-500)", + "description": "First period to include, 0 to 14; 0 means from the start example(0)", "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "start_period", + "type": "integer", + "x-example": 0 }, { - "default": 0, - "description": "Zero-based row offset", + "description": "Last period to include, 0 to 14; 0 means through the end example(14)", "in": "query", - "maximum": 10000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "end_period", + "type": "integer", + "x-example": 14 } ], "produces": [ @@ -432078,7 +509621,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastBattedBallResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.BoxScoreResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -432093,6 +509648,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -432105,118 +509666,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Batted Ball Profile rows", + "summary": "NBA traditional box score for one game", "tags": [ - "MLB" + "NBA" ] } }, - "/mlb/statcast-birthday-index": { + "/nba/box-score-advanced": { "get": { - "description": "Returns today's birthday tables for batters and pitchers plus the selected upcoming-birthday table. Type and minimum-games are first-party filters; date must fall inside the live page's season date range. The active-player toggle, sorting, and pagination are applied locally. The MLB Terms of Use notes a private, non-commercial-use boundary and restrictions on redistribution; this endpoint exposes statistical rows only and excludes media, graphics, and CSV.", - "operationId": "mlb-statcast-birthday-index", + "consumes": [ + "application/json" + ], + "description": "Returns the advanced box score for one game: each team's per-player rows with the upstream's own advanced statistics keyed by their source names. Verified statistic keys include netRating, pace and pie; the upstream sends a larger key set (offensive/defensive rating and the percentage family use long names such as offensiveRating and effectiveFieldGoalPercentage) and every key is passed through unchanged rather than projected onto a guessed struct.", + "operationId": "nba-box-score-advanced", "parameters": [ { - "default": "batter", - "description": "Upcoming table", - "enum": [ - "batter", - "pitcher" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "default": "1", - "description": "Minimum games played on the birthday", - "enum": [ - "1", - "2", - "3", - "5", - "8", - "10" - ], - "in": "query", - "name": "min_games", - "type": "string" - }, - { - "description": "Optional birthday date in M-D form; accepted dates are bounded by the current live page season window", + "description": "Ten-digit game id from nba-scoreboard", "in": "query", - "name": "date", + "name": "game_id", + "required": true, "type": "string", - "x-example": "5-2" - }, - { - "default": false, - "description": "Include inactive and deceased players in upcoming rows", - "in": "query", - "name": "show_inactives", - "type": "boolean" - }, - { - "description": "Local sort column. Some values are type- or date-specific and invalid combinations are rejected.", - "enum": [ - "player_name", - "is_player_active", - "birth_day_noyear_sort_hidden", - "age", - "daysUntil", - "birthday_index", - "birthday_games", - "birthday_pa", - "birthday_hits", - "birthday_hit_1b", - "birthday_hit_2b", - "birthday_hit_3b", - "birthday_hit_hr", - "birthday_strikeout", - "birthday_k_percent", - "birthday_walk", - "birthday_bb_percent", - "birthday_BA", - "non_birthday_BA", - "birthday_BA_diff", - "birthday_OPS", - "non_birthday_OPS", - "birthday_OPS_diff", - "birthday_wOBA", - "non_birthday_wOBA", - "birthday_wOBA_diff" - ], - "in": "query", - "name": "sort", - "type": "string" + "x-example": "0022600196" }, { - "description": "Local sort direction; omitted values use the selected column's live first-party initial direction", + "description": "League id; only 00 (NBA) is verified", "enum": [ - "asc", - "desc" + "00" ], "in": "query", - "name": "sort_dir", - "type": "string" + "name": "league_id", + "type": "string", + "x-example": "00" }, { - "default": 100, - "description": "Rows per page (1-500)", + "description": "First period to include, 0 to 14; 0 means from the start", "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "start_period", + "type": "integer", + "x-example": 0 }, { - "default": 0, - "description": "Zero-based row offset (0-5000)", + "description": "Last period to include, 0 to 14; 0 means through the end", "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "end_period", + "type": "integer", + "x-example": 14 } ], "produces": [ @@ -432226,7 +509720,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastBirthdayIndexResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.BoxScoreStatsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -432241,6 +509747,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -432253,152 +509765,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Sarah Langs Birthday Index rows", + "summary": "NBA advanced box score for one game", "tags": [ - "MLB" + "NBA" ] } }, - "/mlb/statcast-catcher-blocking": { + "/nba/box-score-four-factors": { "get": { - "description": "Returns catcher, pitcher, catching-team, or league Catcher Blocking rows. Filters cover game type, season range, minimum opportunities, team/stint, and local table sorting. Use mlb_discovery for the exact filter sets. Row detail events are available from mlb-statcast-catcher-blocking-details; chart playback and CSV export controls are not data rows.", - "operationId": "mlb-statcast-catcher-blocking", + "consumes": [ + "application/json" + ], + "description": "Returns the four-factors box score for one game. Verified statistic keys are effectiveFieldGoalPercentage, freeThrowAttemptRate, teamTurnoverPercentage, offensiveReboundPercentage, oppEffectiveFieldGoalPercentage and oppFreeThrowAttemptRate.", + "operationId": "nba-box-score-four-factors", "parameters": [ { - "default": "Cat", - "description": "Leaderboard group", - "enum": [ - "Cat", - "Pit", - "Pitching Team", - "League" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "default": "Regular", - "description": "Game type", - "enum": [ - "Regular", - "Playoff", - "All" - ], - "in": "query", - "name": "game_type", - "type": "string" - }, - { - "default": "q", - "description": "Minimum opportunities; applies to Cat and Pit", - "enum": [ - "q", - "1", - "50", - "100", - "250", - "500", - "1000", - "2000", - "3000", - "4000", - "5000" - ], - "in": "query", - "name": "min", - "type": "string" - }, - { - "description": "First season, 2018 through current season", - "in": "query", - "maximum": 2026, - "minimum": 2018, - "name": "start_year", - "type": "integer" - }, - { - "description": "Last season, start_year through current season", - "in": "query", - "maximum": 2026, - "minimum": 2018, - "name": "end_year", - "type": "integer" - }, - { - "default": "no", - "description": "Split rows by season", - "enum": [ - "yes", - "no" - ], - "in": "query", - "name": "split", - "type": "string" - }, - { - "description": "Optional team filter: split or an MLB team id from mlb_discovery", - "in": "query", - "name": "team", - "type": "string" - }, - { - "description": "For a specific Cat or Pit team, include only rows for that team; defaults true", - "in": "query", - "name": "with_team_only", - "type": "boolean" - }, - { - "default": "diff_runner_pbwp", - "description": "Local sort field from mlb_discovery", - "enum": [ - "entity_name", - "team_name", - "start_year", - "N", - "catcher_runs", - "diff_runner_pbwp", - "N_runner_pbwp", - "x_runner_pbwp", - "diff_rate_runner_pbwp", - "freq_pbwp_1_easy", - "freq_pbwp_2_medium", - "freq_pbwp_3_tough", - "diff_runner_pbwp_1_easy", - "diff_runner_pbwp_2_medium", - "diff_runner_pbwp_3_tough" - ], + "description": "Ten-digit game id from nba-scoreboard", "in": "query", - "name": "sort", - "type": "string" + "name": "game_id", + "required": true, + "type": "string", + "x-example": "0022600196" }, { - "default": "desc", - "description": "Local sort direction", + "description": "League id; only 00 (NBA) is verified", "enum": [ - "asc", - "desc" + "00" ], "in": "query", - "name": "sort_dir", - "type": "string" + "name": "league_id", + "type": "string", + "x-example": "00" }, { - "default": 100, - "description": "Rows per page (1-500)", + "description": "First period to include, 0 to 14; 0 means from the start", "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "start_period", + "type": "integer", + "x-example": 0 }, { - "description": "Zero-based row offset", + "description": "Last period to include, 0 to 14; 0 means through the end", "in": "query", - "maximum": 10000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "end_period", + "type": "integer", + "x-example": 14 } ], "produces": [ @@ -432408,7 +509819,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastCatcherBlockingResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.BoxScoreStatsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -432417,6 +509840,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -432429,104 +509864,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Catcher Blocking leaderboard rows", + "summary": "NBA four-factors box score for one game", "tags": [ - "MLB" + "NBA" ] } }, - "/mlb/statcast-catcher-blocking-details": { + "/nba/box-score-misc": { "get": { - "description": "Expands a Catcher Blocking Cat, Pit, or Pitching Team table row into paginated play-location events. entity_id must come from the matching leaderboard rows and other filters must match that row query. League rows have no detail feed.", - "operationId": "mlb-statcast-catcher-blocking-details", + "consumes": [ + "application/json" + ], + "description": "Returns the miscellaneous box score for one game: points off turnovers, second chance and fast-break points, paint points, opponent points off turnovers, blocks, blocks against, personal fouls and fouls drawn. All of those keys are verified on this flavor.", + "operationId": "nba-box-score-misc", "parameters": [ { - "description": "Entity id from a Cat, Pit, or Pitching Team leaderboard row", + "description": "Ten-digit game id from nba-scoreboard", "in": "query", - "name": "entity_id", + "name": "game_id", "required": true, "type": "string", - "x-example": "682626" - }, - { - "default": "Cat", - "description": "Row group", - "enum": [ - "Cat", - "Pit", - "Pitching Team" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "default": "Regular", - "description": "Game type", - "enum": [ - "Regular", - "Playoff", - "All" - ], - "in": "query", - "name": "game_type", - "type": "string" - }, - { - "description": "First season, 2018 through current season", - "in": "query", - "maximum": 2026, - "minimum": 2018, - "name": "start_year", - "type": "integer" - }, - { - "description": "Last season, start_year through current season", - "in": "query", - "maximum": 2026, - "minimum": 2018, - "name": "end_year", - "type": "integer" + "x-example": "0022600196" }, { - "default": "no", - "description": "Split details by season", + "description": "League id; only 00 (NBA) is verified", "enum": [ - "yes", - "no" + "00" ], "in": "query", - "name": "split", - "type": "string" - }, - { - "description": "Optional team id or split selector from mlb_discovery", - "in": "query", - "name": "team", - "type": "string" - }, - { - "description": "For a specific Cat or Pit team, include only rows for that team; defaults true", - "in": "query", - "name": "with_team_only", - "type": "boolean" + "name": "league_id", + "type": "string", + "x-example": "00" }, { - "default": 100, - "description": "Rows per page (1-500)", + "description": "First period to include, 0 to 14; 0 means from the start", "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "start_period", + "type": "integer", + "x-example": 0 }, { - "description": "Zero-based row offset", + "description": "Last period to include, 0 to 14; 0 means through the end", "in": "query", - "maximum": 100000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "end_period", + "type": "integer", + "x-example": 14 } ], "produces": [ @@ -432536,7 +509918,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastCatcherBlockingDetailsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.BoxScoreStatsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -432545,6 +509939,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -432557,345 +509963,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Catcher Blocking play details", + "summary": "NBA miscellaneous box score for one game", "tags": [ - "MLB" + "NBA" ] } }, - "/mlb/statcast-catcher-framing": { + "/nba/box-score-player-track": { "get": { - "description": "Returns the Catcher Framing table for catcher, catching-team, batter, batting-team, pitcher, or league groups. Supports observed game, season, one-team, pitch/result minimum, date, bat-side, pitch-hand, pitch-type, ball/strike, and call-model filters, plus local sort and pagination. Use mlb_discovery for exact enum values; chart-only groupings and player comparison controls are excluded.", - "operationId": "mlb-statcast-catcher-framing", + "consumes": [ + "application/json" + ], + "description": "Returns the player-tracking box score for one game. Verified statistic keys are speed, distance, touches, passes, secondaryAssists, contestedFieldGoalsMade and uncontestedFieldGoals. Unlike its siblings this flavor answers the game id alone, so it takes no league or period parameters.", + "operationId": "nba-box-score-player-track", "parameters": [ { - "default": "catcher", - "description": "Table group", - "enum": [ - "catcher", - "catching-team", - "batter", - "batting-team", - "pitcher", - "league" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "default": "Regular", - "description": "Game type", - "enum": [ - "Any", - "Playoff", - "Regular" - ], - "in": "query", - "name": "game_type", - "type": "string" - }, - { - "description": "Optional single MLB team id", - "enum": [ - "108", - "117", - "133", - "141", - "144", - "158", - "138", - "112", - "109", - "119", - "137", - "114", - "136", - "146", - "121", - "120", - "110", - "135", - "143", - "134", - "140", - "139", - "113", - "111", - "115", - "118", - "116", - "142", - "145", - "147" - ], - "in": "query", - "name": "team", - "type": "string" - }, - { - "default": "q", - "description": "Minimum pitches", - "enum": [ - "q", - "100", - "250", - "500", - "750", - "1000", - "1250", - "1500" - ], - "in": "query", - "name": "min_pitches", - "type": "string" - }, - { - "default": 1, - "description": "Minimum results", - "enum": [ - 1, - 25, - 50, - 100, - 250, - 500, - 750, - 1000, - 1250, - 1500 - ], - "in": "query", - "name": "min_results", - "type": "integer" - }, - { - "description": "First season", - "enum": [ - 2018, - 2019, - 2020, - 2021, - 2022, - 2023, - 2024, - 2025, - 2026 - ], - "in": "query", - "name": "season_start", - "type": "integer" - }, - { - "description": "Last season", - "enum": [ - 2018, - 2019, - 2020, - 2021, - 2022, - 2023, - 2024, - 2025, - 2026 - ], - "in": "query", - "name": "season_end", - "type": "integer" - }, - { - "description": "Inclusive start date", - "format": "date", - "in": "query", - "name": "date_start", - "type": "string" - }, - { - "description": "Inclusive end date", - "format": "date", - "in": "query", - "name": "date_end", - "type": "string" - }, - { - "description": "Batter side", - "enum": [ - "L", - "R" - ], - "in": "query", - "name": "bat_side", - "type": "string" - }, - { - "description": "Pitcher hand", - "enum": [ - "L", - "R" - ], - "in": "query", - "name": "pitch_hand", - "type": "string" - }, - { - "description": "Single pitch type", - "enum": [ - "FF", - "SI", - "FC", - "CH", - "FS", - "FO", - "SC", - "CU", - "SL", - "ST", - "SV", - "KN" - ], - "in": "query", - "name": "pitch_type", - "type": "string" - }, - { - "description": "Pitch location relative to strike zone", - "enum": [ - "in", - "out" - ], - "in": "query", - "name": "ball_strike", - "type": "string" - }, - { - "default": "original", - "description": "Framing model", - "enum": [ - "original", - "final" - ], - "in": "query", - "name": "call", - "type": "string" - }, - { - "default": "rv_tot", - "description": "Local sort field", - "enum": [ - "name", - "team_name", - "pitches", - "pitches_shadow", - "rv_tot", - "pct_tot", - "pitches_shadow_top", - "rv_shadow_top", - "pct_shadow_top", - "pitches_shadow_bot", - "rv_shadow_bot", - "pct_shadow_bot", - "pitches_11", - "rv_11", - "pct_11", - "pitches_12", - "rv_12", - "pct_12", - "pitches_13", - "rv_13", - "pct_13", - "pitches_14", - "rv_14", - "pct_14", - "pitches_16", - "rv_16", - "pct_16", - "pitches_17", - "rv_17", - "pct_17", - "pitches_18", - "rv_18", - "pct_18", - "pitches_19", - "rv_19", - "pct_19", - "pitches_heart", - "rv_heart", - "pct_heart", - "pitches_chwa", - "rv_chwa", - "pct_chwa", - "pitches_bin_minus10", - "pitches_bin_minus9", - "pitches_bin_minus8", - "pitches_bin_minus7", - "pitches_bin_minus6", - "pitches_bin_minus5", - "pitches_bin_minus4", - "pitches_bin_minus3", - "pitches_bin_minus2", - "pitches_bin_minus1", - "pitches_bin_0", - "pitches_bin_1", - "pitches_bin_2", - "pitches_bin_3", - "pitches_bin_4", - "pitches_bin_5", - "pitches_bin_6", - "pitches_bin_7", - "pitches_bin_8", - "pitches_bin_9", - "pct_bin_minus10", - "pct_bin_minus9", - "pct_bin_minus8", - "pct_bin_minus7", - "pct_bin_minus6", - "pct_bin_minus5", - "pct_bin_minus4", - "pct_bin_minus3", - "pct_bin_minus2", - "pct_bin_minus1", - "pct_bin_0", - "pct_bin_1", - "pct_bin_2", - "pct_bin_3", - "pct_bin_4", - "pct_bin_5", - "pct_bin_6", - "pct_bin_7", - "pct_bin_8", - "pct_bin_9" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "default": "desc", - "description": "Local sort direction", - "enum": [ - "asc", - "desc" - ], - "in": "query", - "name": "sort_dir", - "type": "string" - }, - { - "default": 100, - "description": "Rows per page (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "description": "Zero-based row offset", + "description": "Ten-digit game id from nba-scoreboard", "in": "query", - "maximum": 10000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "game_id", + "required": true, + "type": "string", + "x-example": "0022600196" } ], "produces": [ @@ -432905,7 +509993,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastCatcherFramingResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.BoxScoreStatsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -432920,6 +510020,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -432932,250 +510038,150 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Catcher Framing leaderboard rows", + "summary": "NBA player-tracking box score for one game", "tags": [ - "MLB" + "NBA" ] } }, - "/mlb/statcast-catcher-framing-details": { + "/nba/box-score-scoring": { "get": { - "description": "Returns paginated pitch events for a Catcher Framing entity_id. Repeat the leaderboard filters used to obtain the entity; league aggregate rows have no detail feed. The upstream detail response may be large, so use limit and offset.", - "operationId": "mlb-statcast-catcher-framing-details", + "consumes": [ + "application/json" + ], + "description": "Returns the scoring-distribution box score for one game. Verified statistic keys are percentageFieldGoalsAttempted2pt, percentageFieldGoalsAttempted3pt, percentagePoints2pt, percentagePoints3pt, percentagePointsFastBreak and percentagePointsPaint.", + "operationId": "nba-box-score-scoring", "parameters": [ { - "description": "Entity id from a Catcher Framing leaderboard row", + "description": "Ten-digit game id from nba-scoreboard", "in": "query", - "name": "entity_id", + "name": "game_id", "required": true, "type": "string", - "x-example": "663886" - }, - { - "default": "catcher", - "description": "Table group; league details are unavailable", - "enum": [ - "catcher", - "catching-team", - "batter", - "batting-team", - "pitcher" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "default": "Regular", - "description": "Game type", - "enum": [ - "Any", - "Playoff", - "Regular" - ], - "in": "query", - "name": "game_type", - "type": "string" - }, - { - "description": "Optional single MLB team id", - "enum": [ - "108", - "117", - "133", - "141", - "144", - "158", - "138", - "112", - "109", - "119", - "137", - "114", - "136", - "146", - "121", - "120", - "110", - "135", - "143", - "134", - "140", - "139", - "113", - "111", - "115", - "118", - "116", - "142", - "145", - "147" - ], - "in": "query", - "name": "team", - "type": "string" - }, - { - "default": "q", - "description": "Minimum pitches", - "enum": [ - "q", - "100", - "250", - "500", - "750", - "1000", - "1250", - "1500" - ], - "in": "query", - "name": "min_pitches", - "type": "string" - }, - { - "default": 1, - "description": "Minimum results", - "enum": [ - 1, - 25, - 50, - 100, - 250, - 500, - 750, - 1000, - 1250, - 1500 - ], - "in": "query", - "name": "min_results", - "type": "integer" + "x-example": "0022600196" }, { - "description": "First season", + "description": "League id; only 00 (NBA) is verified", "enum": [ - 2018, - 2019, - 2020, - 2021, - 2022, - 2023, - 2024, - 2025, - 2026 + "00" ], "in": "query", - "name": "season_start", - "type": "integer" + "name": "league_id", + "type": "string", + "x-example": "00" }, { - "description": "Last season", - "enum": [ - 2018, - 2019, - 2020, - 2021, - 2022, - 2023, - 2024, - 2025, - 2026 - ], + "description": "First period to include, 0 to 14; 0 means from the start", "in": "query", - "name": "season_end", - "type": "integer" + "name": "start_period", + "type": "integer", + "x-example": 0 }, { - "description": "Inclusive start date", - "format": "date", + "description": "Last period to include, 0 to 14; 0 means through the end", "in": "query", - "name": "date_start", - "type": "string" + "name": "end_period", + "type": "integer", + "x-example": 14 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.BoxScoreStatsResponse" + } + }, + "type": "object" + } + ] + } }, - { - "description": "Inclusive end date", - "format": "date", - "in": "query", - "name": "date_end", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Batter side", - "enum": [ - "L", - "R" - ], - "in": "query", - "name": "bat_side", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Pitcher hand", - "enum": [ - "L", - "R" - ], - "in": "query", - "name": "pitch_hand", - "type": "string" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Single pitch type", - "enum": [ - "FF", - "SI", - "FC", - "CH", - "FS", - "FO", - "SC", - "CU", - "SL", - "ST", - "SV", - "KN" - ], - "in": "query", - "name": "pitch_type", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "NBA scoring-distribution box score for one game", + "tags": [ + "NBA" + ] + } + }, + "/nba/box-score-usage": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the usage box score for one game: each team's per-player rows with the upstream's usage statistics. Verified statistic keys are usagePercentage, percentageFieldGoalsAttempted, percentageFreeThrowsAttempted, percentageAssists, percentageTurnovers, percentageRebounds and percentagePoints.", + "operationId": "nba-box-score-usage", + "parameters": [ { - "description": "Pitch location relative to strike zone", - "enum": [ - "in", - "out" - ], + "description": "Ten-digit game id from nba-scoreboard", "in": "query", - "name": "ball_strike", - "type": "string" + "name": "game_id", + "required": true, + "type": "string", + "x-example": "0022600196" }, { - "default": "original", - "description": "Framing model", + "description": "League id; only 00 (NBA) is verified", "enum": [ - "original", - "final" + "00" ], "in": "query", - "name": "call", - "type": "string" + "name": "league_id", + "type": "string", + "x-example": "00" }, { - "default": 100, - "description": "Rows per page (1-500)", + "description": "First period to include, 0 to 14; 0 means from the start", "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "start_period", + "type": "integer", + "x-example": 0 }, { - "description": "Zero-based row offset", + "description": "Last period to include, 0 to 14; 0 means through the end", "in": "query", - "maximum": 100000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "end_period", + "type": "integer", + "x-example": 14 } ], "produces": [ @@ -433185,7 +510191,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastCatcherFramingDetailsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.BoxScoreStatsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -433200,6 +510218,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -433212,154 +510236,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Catcher Framing pitch-event details", + "summary": "NBA usage box score for one game", "tags": [ - "MLB" + "NBA" ] } }, - "/mlb/statcast-catcher-pop-time": { + "/nba/common-all-players": { "get": { - "description": "Returns catchers ranked by pop-time metrics, filtered by season, team, and minimum steal attempts to second or third. Sort and pagination are applied locally.", - "operationId": "mlb-statcast-catcher-pop-time", + "consumes": [ + "application/json" + ], + "description": "Returns the league's complete player listing for a season (the CommonAllPlayers table). Verified columns are PERSON_ID, DISPLAY_FIRST_LAST, ROSTERSTATUS, TEAM_ID, TEAM_NAME, TEAM_ABBREVIATION and PLAYERCODE. This is the widest player listing in the family; use nba-players when you want the index with roster attributes, and this route when you need the historical-to-current player set.", + "operationId": "nba-common-all-players", "parameters": [ { - "default": "2026", - "description": "Season from 2015 through 2026", - "enum": [ - "2015", - "2016", - "2017", - "2018", - "2019", - "2020", - "2021", - "2022", - "2023", - "2024", - "2025", - "2026" - ], - "in": "query", - "name": "year", - "type": "string" - }, - { - "description": "MLB team id", - "enum": [ - "108", - "117", - "133", - "141", - "144", - "158", - "138", - "112", - "109", - "119", - "137", - "114", - "136", - "146", - "121", - "120", - "110", - "135", - "143", - "134", - "140", - "139", - "111", - "113", - "115", - "118", - "116", - "142", - "145", - "147" - ], - "in": "query", - "name": "team_id", - "type": "string" - }, - { - "default": "5", - "description": "Minimum attempts to second base", - "enum": [ - "1", - "5", - "10", - "15", - "20" - ], - "in": "query", - "name": "min2b", - "type": "string" - }, - { - "default": "0", - "description": "Minimum attempts to third base", - "enum": [ - "0", - "1", - "5", - "10", - "15", - "20" - ], - "in": "query", - "name": "min3b", - "type": "string" - }, - { - "default": "2b_all", - "description": "Sort field from mlb_discovery", - "enum": [ - "catcher", - "team", - "age", - "arm", - "exchange", - "2b_attempts", - "2b_all", - "2b_caught_stealing", - "2b_stolen_bases", - "3b_attempts", - "3b_all", - "3b_caught_stealing", - "3b_stolen_bases" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "default": "asc", - "description": "Sort direction", + "description": "League id; only 00 (NBA) is verified", "enum": [ - "asc", - "desc" + "00" ], "in": "query", - "name": "sort_dir", - "type": "string" + "name": "league_id", + "type": "string", + "x-example": "00" }, { - "default": 100, - "description": "Rows to return (1-500)", + "description": "Season in YYYY-YY form; defaults to the current NBA season", "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "season", + "type": "string", + "x-example": "2026-27" }, { - "description": "Zero-based offset", + "description": "When true, only players on a current roster are returned", "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "is_only_current_season", + "type": "boolean" } ], "produces": [ @@ -433369,7 +510281,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastCatcherPopTimeResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.TablesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -433378,6 +510302,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -433396,352 +510326,243 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Catcher Pop Time leaderboard", + "summary": "NBA league-wide player listing for a season", "tags": [ - "MLB" + "NBA" ] } }, - "/mlb/statcast-catcher-stance": { + "/nba/draft-combine-anthro": { "get": { - "description": "Returns the public Catcher Stance table for catchers, catching teams, batters, batting teams, pitchers, or league totals. Supports the live year, game, date, threshold, team, pitch type, batter/pitcher hand, knee posture, grouping, sorting, and pagination controls. Grouping accepts up to four values. Use mlb_discovery for exact value sets. Chart series and page-local search/column toggles are not included.", - "operationId": "mlb-statcast-catcher-stance", + "consumes": [ + "application/json" + ], + "description": "Returns one draft class's combine anthropometric measurements (the DraftCombinePlayerAnthro table). Verified columns are PLAYER_ID, FIRST_NAME, LAST_NAME, POSITION, HEIGHT_WO_SHOES, WEIGHT, WINGSPAN, STANDING_REACH, HAND_LENGTH and HAND_WIDTH. The draft year is required: the endpoint has no all-years mode that was verified.", + "operationId": "nba-draft-combine-anthro", "parameters": [ { - "default": "catcher", - "description": "Table entity type", - "enum": [ - "catcher", - "catching-team", - "batter", - "batting-team", - "pitcher", - "league" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "default": "2020", - "description": "First season", - "enum": [ - "2020", - "2021", - "2022", - "2023", - "2024", - "2025", - "2026" - ], - "in": "query", - "name": "season_start", - "type": "string" - }, - { - "default": "2026", - "description": "Last season; must be >= season_start", - "enum": [ - "2020", - "2021", - "2022", - "2023", - "2024", - "2025", - "2026" - ], - "in": "query", - "name": "season_end", - "type": "string" - }, - { - "default": "Regular", - "description": "Game type", - "enum": [ - "Any", - "Playoff", - "Regular" - ], + "description": "Four-digit draft year", "in": "query", - "name": "game_type", - "type": "string" + "name": "season_year", + "required": true, + "type": "string", + "x-example": "2025" }, { - "default": "q", - "description": "Minimum pitches", + "description": "League id; only 00 (NBA) is verified", "enum": [ - "q", - "100", - "250", - "500", - "750", - "1000", - "2500", - "5000", - "7500", - "10000", - "15000", - "20000" + "00" ], "in": "query", - "name": "min_pitches", - "type": "string" + "name": "league_id", + "type": "string", + "x-example": "00" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.TablesResponse" + } + }, + "type": "object" + } + ] + } }, - { - "default": "1", - "description": "Minimum results", - "enum": [ - "1", - "25", - "50", - "100", - "250", - "500", - "750", - "1000", - "2500", - "5000", - "7500", - "10000", - "15000", - "20000" - ], - "in": "query", - "name": "min_results", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Start date YYYY-MM-DD", - "in": "query", - "name": "date_start", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "End date YYYY-MM-DD", - "in": "query", - "name": "date_end", - "type": "string" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Batter side; omit for all", - "enum": [ - "L", - "R" - ], - "in": "query", - "name": "bat_side", - "type": "string" + "ApiKeyAuth": [] + } + ], + "summary": "NBA draft combine anthropometric measurements", + "tags": [ + "NBA" + ] + } + }, + "/nba/enums": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the complete pinned request-enum inventory the NBA routes validate locally: league ids, season types (all four upstream values, including Pre Season and All Star), measure types, per modes, leader stat categories, the leaderboard scope, the game-date and season formats, and the values deliberately blocked because they are not verified. The upstream exposes no value-listing endpoint and answers an invalid enum with a bare HTTP 500, so these values are pinned from measured live acceptance and covered by exact-set tests. No upstream call is made.", + "operationId": "nba-enums", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.EnumsResponse" + } + }, + "type": "object" + } + ] + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Pitcher hand; omit for all", - "enum": [ - "L", - "R" - ], - "in": "query", - "name": "pitch_hand", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "List the pinned NBA request enum values", + "tags": [ + "NBA" + ] + } + }, + "/nba/franchise-history": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns every franchise's history as two tables: FranchiseHistory for active franchises and DefunctTeams for the ones that no longer play. Verified columns are TEAM_ID, TEAM_NAME, START_YEAR, END_YEAR, YEARS and GAMES. The table is league-wide and needs no team id; pass team_id only to narrow it.", + "operationId": "nba-franchise-history", + "parameters": [ { - "description": "Knee posture", + "description": "League id; only 00 (NBA) is verified", "enum": [ - "9999", - "4", - "1", - "2", - "3" + "00" ], "in": "query", - "name": "knee_code", - "type": "string" - }, - { - "collectionFormat": "multi", - "description": "One or more MLB team ids", - "in": "query", - "items": { - "enum": [ - "108", - "117", - "133", - "141", - "144", - "158", - "138", - "112", - "109", - "119", - "137", - "114", - "136", - "146", - "121", - "120", - "110", - "135", - "143", - "134", - "140", - "139", - "111", - "113", - "115", - "118", - "116", - "142", - "145", - "147" - ], - "type": "string" - }, - "name": "teams", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "One or more pitch types", - "in": "query", - "items": { - "enum": [ - "FF", - "SI", - "FC", - "CH", - "FS", - "FO", - "SC", - "CU", - "SL", - "ST", - "SV", - "KN" - ], - "type": "string" - }, - "name": "pitch_types", - "type": "array" + "name": "league_id", + "type": "string", + "x-example": "00" }, { - "collectionFormat": "multi", - "description": "Up to four grouping dimensions; none disables grouping", + "description": "Optional team id from nba-standings; narrows the history to that franchise", "in": "query", - "items": { - "enum": [ - "none", - "year", - "api_game_date_month_text", - "game_type", - "knee_code_overview", - "pitch_hand", - "bat_side", - "api_pitch_type_group03", - "knee_code" - ], - "type": "string" - }, - "name": "group_by", - "type": "array" + "name": "team_id", + "type": "integer", + "x-example": 1610612741 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.TablesResponse" + } + }, + "type": "object" + } + ] + } }, - { - "default": "pct_one_down", - "description": "Local row sort field", - "enum": [ - "name", - "id", - "team_id", - "team_name", - "year", - "pitches", - "skeletal_pitches", - "n_both_down", - "n_both_up", - "n_inside_down", - "n_l_down", - "n_leg_extended", - "n_one_down", - "n_outside_down", - "n_r_down", - "n_teams", - "pct_both_down", - "pct_both_up", - "pct_inside_down", - "pct_l_down", - "pct_leg_extended", - "pct_one_down", - "pct_outside_down", - "pct_r_down", - "one_knee_blocking", - "one_knee_blocking_162", - "one_knee_csaa", - "one_knee_csp", - "one_knee_framing", - "one_knee_framing_162", - "one_knee_pbwp", - "one_knee_pitching", - "one_knee_pitching_162", - "one_knee_ron_num", - "one_knee_ron_pbwp", - "one_knee_sba_csaa", - "one_knee_sba_num", - "one_knee_shadow_cs", - "one_knee_shadow_num", - "one_knee_throwing", - "one_knee_throwing_162", - "other_blocking", - "other_blocking_162", - "other_csaa", - "other_csp", - "other_framing", - "other_framing_162", - "other_pbwp", - "other_pitching", - "other_pitching_162", - "other_ron_num", - "other_ron_pbwp", - "other_sba_csaa", - "other_sba_num", - "other_shadow_cs", - "other_shadow_num", - "other_throwing", - "other_throwing_162", - "total_blocking", - "total_framing", - "total_frv", - "total_throwing", - "total_untracked" - ], - "in": "query", - "name": "sort", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "default": "desc", - "description": "Sort direction", - "enum": [ - "asc", - "desc" - ], - "in": "query", - "name": "sort_dir", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "default": 100, - "description": "Rows per page (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": 0, - "description": "Zero-based row offset", + "ApiKeyAuth": [] + } + ], + "summary": "NBA franchise history, including defunct teams", + "tags": [ + "NBA" + ] + } + }, + "/nba/game-detail": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one game's summary detail from nba.com's game page, read from the page's embedded JSON state: status and clock, game duration, attendance and sellout flag, venue id, name, city, state, country and timezone, the officiating crew with names and jersey numbers, series text, and each team's per-period scoring with a derived game total. Use nba-box-score for per-player statistics; this route is the game-level summary the box score does not carry.", + "operationId": "nba-game-detail", + "parameters": [ + { + "description": "Ten-digit game id from nba-scoreboard", "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "game_id", + "required": true, + "type": "string", + "x-example": "0022600196" } ], "produces": [ @@ -433751,7 +510572,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastCatcherStanceResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.GameDetailResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -433760,6 +510593,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -433772,226 +510617,207 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Catcher Stance rows", + "summary": "NBA game summary detail from nba.com", "tags": [ - "MLB" + "NBA" ] } }, - "/mlb/statcast-catcher-throwing": { + "/nba/games": { "get": { - "description": "Returns catcher, catching-team, or league caught-stealing and throw-quality rows with the public season, game, attempt-threshold, target-base, split-years, team, and roster-membership filters. Table sorting and pagination are applied locally. Catcher rows can be expanded with mlb-statcast-catcher-throwing-details. CSV, charts, and page-local display controls are excluded.", - "operationId": "mlb-statcast-catcher-throwing", - "parameters": [ - { - "default": "Cat", - "description": "Table group", - "enum": [ - "Cat", - "Pitching Team", - "League" - ], - "in": "query", - "name": "type", - "type": "string" + "consumes": [ + "application/json" + ], + "description": "Returns the games currently shown on nba.com's games page, read from the page's embedded JSON state: game id, code, status and clock, period, and both teams with id, tricode, name, score, wins and losses. The shape is identical to nba-scoreboard, so the two routes are interchangeable for callers. This route is an independent fallback: it uses nba.com's public website instead of the statistics service, needs no parameters, and returns the slate that page displays rather than an arbitrary date.", + "operationId": "nba-games", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.GamesResponse" + } + }, + "type": "object" + } + ] + } }, - { - "default": "2026", - "description": "First season", - "enum": [ - "2016", - "2017", - "2018", - "2019", - "2020", - "2021", - "2022", - "2023", - "2024", - "2025", - "2026" - ], - "in": "query", - "name": "season_start", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "default": "2026", - "description": "Last season; must be >= season_start", - "enum": [ - "2016", - "2017", - "2018", - "2019", - "2020", - "2021", - "2022", - "2023", - "2024", - "2025", - "2026" - ], - "in": "query", - "name": "season_end", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "default": "Regular", - "description": "Game type", - "enum": [ - "Regular", - "Playoff", - "All" - ], - "in": "query", - "name": "game_type", - "type": "string" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": "q", - "description": "Minimum steal attempts", - "enum": [ - "q", - "1", - "5", - "10", - "20", - "30", - "40", - "50", - "75", - "100" - ], - "in": "query", - "name": "minimum", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Current NBA games from nba.com's own page state", + "tags": [ + "NBA" + ] + } + }, + "/nba/homepage-leaders": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the homepage leader board for one category. This endpoint has no required parameter beyond the league: a LeagueID-only request answers 200 and echoes its whole contract, which is how its parameter names were recovered after an earlier sampled request answered 400. Note its category spelling is the upstream's own — 'Points' and 'Rebounds', not the 'PTS' short form leagueleaders uses.", + "operationId": "nba-homepage-leaders", + "parameters": [ { - "default": "All", - "description": "Throw target", + "description": "League id; only 00 (NBA) is verified", "enum": [ - "2B", - "3B", - "All" + "00" ], "in": "query", - "name": "target_base", - "type": "string" + "name": "league_id", + "type": "string", + "x-example": "00" }, { - "default": "no", - "description": "Split results by season", + "description": "Leader category", "enum": [ - "yes", - "no" + "Points", + "Rebounds" ], "in": "query", - "name": "split", - "type": "string" + "name": "stat_category", + "type": "string", + "x-example": "Points" }, { - "description": "Empty for all teams, split for team stints, or an MLB team id", + "description": "Subject", "enum": [ - "split", - "108", - "117", - "133", - "141", - "144", - "158", - "138", - "112", - "109", - "119", - "137", - "114", - "136", - "146", - "121", - "120", - "110", - "135", - "143", - "134", - "140", - "139", - "111", - "113", - "115", - "118", - "116", - "142", - "145", - "147" + "Team" ], "in": "query", - "name": "team", - "type": "string" + "name": "player_or_team", + "type": "string", + "x-example": "Team" }, { - "default": true, - "description": "For a selected team, include only catchers on that team", + "description": "Player pool", "in": "query", - "name": "with_team_only", - "type": "boolean" + "name": "player_scope", + "type": "string", + "x-example": "All Players" }, { - "default": "n_cs_aa", - "description": "Local sort field", + "description": "Game window", "enum": [ - "entity_name", - "start_year", - "n", - "cs_raa", - "n_cs_aa", - "n_cs", - "rate_cs", - "n_xcs", - "rate_xcs", - "rate_cs_aa", - "seasonal_sprint_speed", - "distance_to_target", - "pop_time", - "exchange_time", - "arm_strength", - "n_xcs_with_flight_over_xcs", - "n_xcs_with_exchange_over_xcs", - "n_xcs_with_accuracy_over_xcs", - "n_xcs_with_ground_other_over_xcs", - "n_xcs_with_onfly_other_over_xcs", - "n_xcs_with_untracked_other_over_xcs" + "Season" ], "in": "query", - "name": "sort", - "type": "string" + "name": "game_scope", + "type": "string", + "x-example": "Season" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.TablesResponse" + } + }, + "type": "object" + } + ] + } }, - { - "default": "desc", - "description": "Local sort direction", - "enum": [ - "asc", - "desc" - ], - "in": "query", - "name": "sort_dir", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "default": 100, - "description": "Rows per page (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Zero-based row offset", + "ApiKeyAuth": [] + } + ], + "summary": "NBA homepage leader board", + "tags": [ + "NBA" + ] + } + }, + "/nba/hustle-stats": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the hustle statistics for one game: minutes plus contested shots (overall, two-point and three-point), deflections, charges drawn, screen assists and screen-assist points, loose balls recovered (offensive, defensive and total) and box-outs. Marker-verified columns are PLAYER_ID, TEAM_ID, MINUTES, CONTESTED_SHOTS, CONTESTED_SHOTS_2PT, CONTESTED_SHOTS_3PT, DEFLECTIONS, CHARGES_DRAWN, SCREEN_ASSISTS, SCREEN_AST_PTS, OFF_LOOSE_BALLS_RECOVERED, DEF_LOOSE_BALLS_RECOVERED, LOOSE_BALLS_RECOVERED and BOX_OUTS; the sampled BOX_OUTS_PLAYER and BOX_OUTS_TEAM names did not match and are not claimed.", + "operationId": "nba-hustle-stats", + "parameters": [ + { + "description": "Ten-digit game id from nba-scoreboard", "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "game_id", + "required": true, + "type": "string", + "x-example": "0022600196" } ], "produces": [ @@ -434001,7 +510827,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastCatcherThrowingResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.TablesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -434010,6 +510848,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -434028,160 +510872,76 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Catcher Throwing leaderboard rows", + "summary": "NBA hustle statistics for one game", "tags": [ - "MLB" + "NBA" ] } }, - "/mlb/statcast-catcher-throwing-details": { + "/nba/league-game-log": { "get": { - "description": "Returns per-attempt play records expanded from a Catcher Throwing catcher row. Supply the entity_id from a Cat row and the row's year/team when it represents a season or team stint. Details are ungrouped source attempts, paginated locally.", - "operationId": "mlb-statcast-catcher-throwing-details", + "consumes": [ + "application/json" + ], + "description": "Returns every game in a season as the league's game log. With player_or_team=T each row is one team-game and carries GAME_ID, TEAM_ID, GAME_DATE, MATCHUP, WL, MIN, PTS, PLUS_MINUS and VIDEO_AVAILABLE; with player_or_team=P each row is one player-game (the same identity columns plus PLAYER_ID and PLAYER_NAME) and the payload grows to several hundred KB. direction orders the log newest-first (DESC) or chronologically (ASC).", + "operationId": "nba-league-game-log", "parameters": [ { - "description": "Positive catcher id from a Cat row", - "in": "query", - "name": "entity_id", - "required": true, - "type": "integer", - "x-example": 521692 - }, - { - "default": 2026, - "description": "Season", + "description": "League id; only 00 (NBA) is verified", "enum": [ - 2016, - 2017, - 2018, - 2019, - 2020, - 2021, - 2022, - 2023, - 2024, - 2025, - 2026 + "00" ], "in": "query", - "name": "year", - "type": "integer" + "name": "league_id", + "type": "string", + "x-example": "00" }, { - "default": "Regular", - "description": "Game type", - "enum": [ - "Regular", - "Playoff", - "All" - ], + "description": "Season in YYYY-YY form; defaults to the current NBA season", "in": "query", - "name": "game_type", - "type": "string" + "name": "season", + "type": "string", + "x-example": "2026-27" }, { - "default": "q", - "description": "Minimum steal attempts", + "description": "Season type", "enum": [ - "q", - "1", - "5", - "10", - "20", - "30", - "40", - "50", - "75", - "100" + "Regular Season" ], "in": "query", - "name": "minimum", - "type": "string" + "name": "season_type", + "type": "string", + "x-example": "Regular Season" }, { - "default": "All", - "description": "Throw target", + "description": "Ordering; ASC or DESC", "enum": [ - "2B", - "3B", - "All" + "DESC" ], "in": "query", - "name": "target_base", - "type": "string" + "name": "direction", + "type": "string", + "x-example": "DESC" }, { - "default": "no", - "description": "Split rows by season", + "description": "T for one row per team, P for one row per player", "enum": [ - "yes", - "no" + "T" ], "in": "query", - "name": "split", - "type": "string" + "name": "player_or_team", + "type": "string", + "x-example": "T" }, { - "description": "Empty, split, or team id from the corresponding leaderboard row", + "description": "Sort key; only DATE is verified", "enum": [ - "108", - "117", - "133", - "141", - "144", - "158", - "138", - "112", - "109", - "119", - "137", - "114", - "136", - "146", - "121", - "120", - "110", - "135", - "143", - "134", - "140", - "139", - "111", - "113", - "115", - "118", - "116", - "142", - "145", - "147" + "DATE" ], "in": "query", - "name": "team", - "type": "string" - }, - { - "default": true, - "description": "Team roster membership filter", - "in": "query", - "name": "with_team_only", - "type": "boolean" - }, - { - "default": 100, - "description": "Rows per page (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "description": "Zero-based row offset", - "in": "query", - "maximum": 100000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "sorter", + "type": "string", + "x-example": "DATE" } ], "produces": [ @@ -434191,7 +510951,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastCatcherThrowingDetailsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.TablesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -434224,147 +510996,76 @@ "ApiKeyAuth": [] } ], - "summary": "Get Catcher Throwing attempt details", + "summary": "NBA game log for a season, by team or by player", "tags": [ - "MLB" + "NBA" ] } }, - "/mlb/statcast-expected": { + "/nba/lineups": { "get": { - "description": "Returns the separate Expected Statistics leaderboard with batter, pitcher, and team views; season, team, batter-position, BIP/PA qualifier and threshold filters; local metric sorting; and pagination. League-average values are returned separately.", - "operationId": "mlb-statcast-expected", + "consumes": [ + "application/json" + ], + "description": "Returns the lineup dashboard for one lineup size and measure: one row per lineup with GROUP_ID, GROUP_NAME, TEAM_ID, TEAM_ABBREVIATION and the counting/rate columns for the requested measure. The payload is large — the five-man sample was about 712 KB — so request it once and page locally. GroupQuantity is pinned to the one verified size, 5.", + "operationId": "nba-lineups", "parameters": [ { - "default": "batter", - "description": "Leaderboard view", + "description": "League id; only 00 (NBA) is verified", "enum": [ - "batter", - "pitcher", - "batter-team", - "pitcher-team" + "00" ], "in": "query", - "name": "type", - "type": "string" - }, - { - "description": "Season from 2015 through the current season", - "in": "query", - "name": "year", - "type": "integer" - }, - { - "description": "Optional MLB team id from mlb_teams", - "in": "query", - "name": "team_id", - "type": "string" + "name": "league_id", + "type": "string", + "x-example": "00" }, { - "description": "Batter position; only supported for type=batter", - "enum": [ - "C", - "1B", - "2B", - "SS", - "3B", - "LF", - "CF", - "RF", - "DH" - ], + "description": "Season in YYYY-YY form; defaults to the current NBA season", "in": "query", - "name": "position", - "type": "string" + "name": "season", + "type": "string", + "x-example": "2026-27" }, { - "default": "bip", - "description": "Minimum qualifier type", + "description": "Season type", "enum": [ - "bip", - "pa" + "Regular Season" ], "in": "query", - "name": "filter_type", - "type": "string" + "name": "season_type", + "type": "string", + "x-example": "Regular Season" }, { - "default": "q", - "description": "Minimum BIP/PA threshold", + "description": "Statistic family", "enum": [ - "q", - "1", - "25", - "50", - "100", - "150", - "200", - "250", - "350", - "450", - "500", - "600" + "Base" ], "in": "query", - "name": "minimum", - "type": "string" + "name": "measure_type", + "type": "string", + "x-example": "Base" }, { - "default": "est_woba", - "description": "Sort field", + "description": "Aggregation", "enum": [ - "entity_name", - "entity_team_name", - "pa", - "bip", - "ba", - "est_ba", - "ba_minus_est_ba_diff", - "slg", - "est_slg", - "slg_minus_est_slg_diff", - "woba", - "est_woba", - "woba_minus_est_woba_diff", - "wobacon", - "est_wobacon", - "wobacon_minus_est_wobacon_diff", - "exit_velocity_avg", - "hard_hit_percent", - "barrels_per_bip", - "barrels_per_pa" + "PerGame" ], "in": "query", - "name": "sort", - "type": "string" + "name": "per_mode", + "type": "string", + "x-example": "PerGame" }, { - "default": "desc", - "description": "Sort direction", + "description": "Lineup size; only 5 is verified", "enum": [ - "asc", - "desc" + 5 ], "in": "query", - "name": "sort_dir", - "type": "string" - }, - { - "default": 100, - "description": "Rows per page (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "description": "Zero-based row offset", - "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "group_quantity", + "type": "integer", + "x-example": 5 } ], "produces": [ @@ -434374,7 +511075,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastBoardResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.TablesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -434383,6 +511096,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -434395,284 +511120,181 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Expected Statistics", + "summary": "NBA lineup dashboard", "tags": [ - "MLB" + "NBA" ] } }, - "/mlb/statcast-fielding-run-value": { + "/nba/news": { "get": { - "description": "Returns fielding run value for fielder, fielding-team, batter, batting-team, or pitcher views. Dates and grouping dimensions follow the first-party leaderboard. Minimum 0.1 is available only for fielder and fielding-team views; the batting/pitching views omit it. Sorting and pagination are applied locally. CSV and player-page visualizations are outside this table contract.", - "operationId": "mlb-statcast-fielding-run-value", - "parameters": [ - { - "default": "fielder", - "description": "Table type", - "enum": [ - "fielder", - "fielding-team", - "batter", - "batting-team", - "pitcher" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "default": "2026", - "description": "First season", - "enum": [ - "2016", - "2017", - "2018", - "2019", - "2020", - "2021", - "2022", - "2023", - "2024", - "2025", - "2026" - ], - "in": "query", - "name": "season_start", - "type": "string" - }, - { - "default": "season_start", - "description": "Last season; must be >= season_start", - "enum": [ - "2016", - "2017", - "2018", - "2019", - "2020", - "2021", - "2022", - "2023", - "2024", - "2025", - "2026" - ], - "in": "query", - "name": "season_end", - "type": "string" + "consumes": [ + "application/json" + ], + "description": "Returns the news articles nba.com is currently featuring, read from the page's embedded JSON state: article id, title, slug, canonical permalink, excerpt, publication and modification timestamps, publish status, word count and the primary section name and slug. Permalinks are the canonical article URLs, so a caller can link straight to a story without building a URL.", + "operationId": "nba-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.NewsResponse" + } + }, + "type": "object" + } + ] + } }, - { - "default": "Regular", - "description": "Game type", - "enum": [ - "Any", - "Regular", - "Playoff" - ], - "in": "query", - "name": "game_type", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "default": "q", - "description": "Total minimum; 0.1 only for fielder and fielding-team", - "enum": [ - "q", - "0.1", - "1", - "10", - "25", - "50", - "100", - "200", - "500", - "750", - "1000", - "2500", - "5000" - ], - "in": "query", - "name": "minimum", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "default": "1", - "description": "Minimum within each split; 0.1 only for fielder and fielding-team", - "enum": [ - "0.1", - "1", - "10", - "25", - "50", - "100", - "200", - "500", - "750", - "1000", - "2500", - "5000" - ], - "in": "query", - "name": "minimum_split", - "type": "string" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": "0", - "description": "Position / position group", - "enum": [ - "0", - "11", - "12", - "111", - "112", - "121", - "13", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9" - ], - "in": "query", - "name": "position", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "NBA news articles from nba.com", + "tags": [ + "NBA" + ] + } + }, + "/nba/play-by-play": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns every play-by-play action for one game in period order: action number and type, period, an ISO-8601 clock such as PT12M00.00S, team and player identity, the description, shot result and value, and the running home/away score. A full game is about 220 KB, so request it once and page locally rather than polling.", + "operationId": "nba-play-by-play", + "parameters": [ { - "collectionFormat": "multi", - "description": "Repeated MLB team ids", + "description": "Ten-digit game id from nba-scoreboard", "in": "query", - "items": { - "enum": [ - "108", - "109", - "110", - "111", - "112", - "113", - "114", - "115", - "116", - "117", - "118", - "119", - "120", - "121", - "133", - "134", - "135", - "136", - "137", - "138", - "139", - "140", - "141", - "142", - "143", - "144", - "145", - "146", - "147", - "158" - ], - "type": "string" - }, - "name": "team_id", - "type": "array" + "name": "game_id", + "required": true, + "type": "string", + "x-example": "0022600196" }, { - "collectionFormat": "multi", - "description": "Repeated split dimensions", + "description": "First period to include, 0 to 14; 0 means from the start example(0)", "in": "query", - "items": { - "enum": [ - "year", - "api_game_date_month_text", - "position", - "game_type" - ], - "type": "string" - }, - "name": "group_by", - "type": "array" + "name": "start_period", + "type": "integer", + "x-example": 0 }, { - "description": "Start date, YYYY-MM-DD, from 2018-03-29 through today", + "description": "Last period to include, 0 to 14; 0 means through the end example(14)", "in": "query", - "name": "date_start", - "type": "string" + "name": "end_period", + "type": "integer", + "x-example": 14 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.PlayByPlayResponse" + } + }, + "type": "object" + } + ] + } }, - { - "description": "End date, YYYY-MM-DD, from 2018-03-29 through today", - "in": "query", - "name": "date_end", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "default": "total_runs", - "description": "Local sort field", - "enum": [ - "name", - "team_name", - "total_runs", - "inf_of_runs", - "range_runs", - "arm_runs", - "dp_runs", - "fielding_runs_prevented_on_rec1b", - "catching_runs", - "framing_runs", - "throwing_runs", - "blocking_runs", - "outs_total", - "outs_2", - "outs_3", - "outs_4", - "outs_5", - "outs_6", - "outs_7", - "outs_8", - "outs_9", - "tot_pa", - "year", - "api_game_date_month_mm", - "api_game_date_month_text", - "pos_id", - "game_type" - ], - "in": "query", - "name": "sort", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "default": "desc", - "description": "Local sort direction", - "enum": [ - "asc", - "desc" - ], - "in": "query", - "name": "sort_dir", - "type": "string" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": 100, - "description": "Rows per page (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" - }, + "ApiKeyAuth": [] + } + ], + "summary": "NBA play-by-play for one game", + "tags": [ + "NBA" + ] + } + }, + "/nba/player-awards": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one player's award history, one row per award. Marker-verified columns are PERSON_ID, FIRST_NAME, LAST_NAME, TEAM, DESCRIPTION, SEASON, CONFERENCE, TYPE, SUBTYPE1, SUBTYPE2, SUBTYPE3, ALL_NBA_TEAM_NUMBER and ALL_NBA_TEAM; the sampled AWARD_TYPE, ALL_DEFENSIVE_TEAM_NUMBER and ALL_ROOKIE_TEAM_NUMBER names did not match and are not claimed.", + "operationId": "nba-player-awards", + "parameters": [ { - "default": 0, - "description": "Zero-based row offset (0-5000)", + "description": "Player id from nba-players or nba-team-roster", "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "player_id", + "required": true, + "type": "integer", + "x-example": 1628398 } ], "produces": [ @@ -434682,7 +511304,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastFieldingRunValueResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.TablesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -434691,6 +511325,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -434703,376 +511349,263 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Fielding Run Value rows", + "summary": "NBA player award history", "tags": [ - "MLB" + "NBA" ] } }, - "/mlb/statcast-first-base-receiving": { + "/nba/player-bio-stats": { "get": { - "description": "Returns first baseman, throwing fielder, fielding team, batting team, or league receiving rows. Includes season/game selections, threshold and group filters, team/date/hand/height/outcome filters, and validated page-local split filters and sorting. Per-play source records are available through mlb-statcast-first-base-receiving-details. 3D trajectory visualizations are not included.", - "operationId": "mlb-statcast-first-base-receiving", + "consumes": [ + "application/json" + ], + "description": "Returns the league bio table for a season: each player's height (label and inches), weight, college, country, draft year/round/number and age, with season GP and the counting stat line. Marker-verified columns are PLAYER_ID, PLAYER_NAME, TEAM_ID, TEAM_ABBREVIATION, AGE, PLAYER_HEIGHT, PLAYER_HEIGHT_INCHES, PLAYER_WEIGHT, COLLEGE, COUNTRY, DRAFT_YEAR, DRAFT_ROUND, DRAFT_NUMBER, GP, PTS, REB and AST — the complete sampled set matched.", + "operationId": "nba-player-bio-stats", "parameters": [ { - "default": "fielder_3", - "description": "Leaderboard group", + "description": "League id; only 00 (NBA) is verified", "enum": [ - "fielder_3", - "throw_fielder_id", - "pitching-team", - "batting-team", - "league" + "00" ], "in": "query", - "name": "type", - "type": "string" - }, - { - "collectionFormat": "multi", - "description": "Season values", - "in": "query", - "items": { - "enum": [ - "2021", - "2022", - "2023", - "2024", - "2025", - "2026" - ], - "type": "string" - }, - "name": "season[]", - "type": "array" + "name": "league_id", + "type": "string", + "x-example": "00" }, { - "collectionFormat": "multi", - "description": "Game types", + "description": "Season in YYYY-YY form; defaults to the current NBA season", "in": "query", - "items": { - "enum": [ - "R", - "F", - "D", - "L", - "W" - ], - "type": "string" - }, - "name": "gameType[]", - "type": "array" + "name": "season", + "type": "string", + "x-example": "2026-27" }, { - "default": "q", - "description": "Minimum opportunities", + "description": "Season type", "enum": [ - "q", - "1", - "5", - "10", - "25", - "50", - "75", - "100", - "200", - "300", - "400", - "500", - "750", - "1000" + "Regular Season" ], "in": "query", - "name": "min", - "type": "string" + "name": "season_type", + "type": "string", + "x-example": "Regular Season" }, { - "default": "1", - "description": "Minimum opportunities within each group", + "description": "Aggregation", "enum": [ - "1", - "5", - "10", - "25", - "50", - "75", - "100", - "200", - "300", - "400", - "500", - "750", - "1000" + "PerGame" ], "in": "query", - "name": "minSplit", - "type": "string" + "name": "per_mode", + "type": "string", + "x-example": "PerGame" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.TablesResponse" + } + }, + "type": "object" + } + ] + } }, - { - "default": "1", - "description": "Year split selector", - "enum": [ - "0", - "1" - ], - "in": "query", - "name": "splitYear", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "collectionFormat": "multi", - "description": "Group dimensions", - "in": "query", - "items": { - "enum": [ - "throw_height_code", - "throw_location_code_full", - "runners_on_cd" - ], - "type": "string" - }, - "name": "split[]", - "type": "array" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "collectionFormat": "multi", - "description": "MLB team ids", - "in": "query", - "items": { - "enum": [ - "108", - "117", - "133", - "141", - "144", - "158", - "138", - "112", - "109", - "119", - "137", - "114", - "136", - "146", - "121", - "120", - "110", - "135", - "143", - "134", - "140", - "139", - "111", - "113", - "115", - "118", - "116", - "142", - "145", - "147" - ], - "type": "string" - }, - "name": "team[]", - "type": "array" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Inclusive start date (YYYY-MM-DD)", - "in": "query", - "name": "dateStart", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "NBA league bio table", + "tags": [ + "NBA" + ] + } + }, + "/nba/player-career-stats": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one player's career statistics as several tables: the season-by-season regular-season line, the career regular-season totals, the season-by-season postseason line and the career postseason totals. Verified columns are SEASON_ID, TEAM_ID, GP, GS, MIN and PTS. per_mode PerGame or Totals is validated against the values verified on this endpoint.", + "operationId": "nba-player-career-stats", + "parameters": [ { - "description": "Inclusive end date (YYYY-MM-DD)", + "description": "Player id from nba-players or nba-team-roster", "in": "query", - "name": "dateEnd", - "type": "string" + "name": "player_id", + "required": true, + "type": "integer", + "x-example": 1628398 }, { - "description": "First baseman batting hand", + "description": "Aggregation; PerGame or Totals", "enum": [ - "L", - "R" + "PerGame" ], "in": "query", - "name": "fielder_3_hand", - "type": "string" + "name": "per_mode", + "type": "string", + "x-example": "PerGame" }, { - "description": "Minimum fielder height, inches", + "description": "League id; only 00 (NBA) is verified", "enum": [ - "70", - "71", - "72", - "73", - "74", - "75", - "76", - "77", - "78", - "79", - "80" + "00" ], "in": "query", - "name": "min_height_in_inches", - "type": "string" + "name": "league_id", + "type": "string", + "x-example": "00" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.TablesResponse" + } + }, + "type": "object" + } + ] + } }, - { - "description": "Field-out flag", - "enum": [ - "0", - "1" - ], - "in": "query", - "name": "is_hit_into_play_field_out", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "collectionFormat": "multi", - "description": "Base occupancy codes", - "in": "query", - "items": { - "enum": [ - "0", - "1", - "2", - "3", - "4", - "5", - "6", - "7" - ], - "type": "string" - }, - "name": "runners_on_cd[]", - "type": "array" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "collectionFormat": "multi", - "description": "Throwing position ids", - "in": "query", - "items": { - "enum": [ - "4", - "5", - "6" - ], - "type": "string" - }, - "name": "throw_pos_id[]", - "type": "array" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "collectionFormat": "multi", - "description": "Throw heights", + "ApiKeyAuth": [] + } + ], + "summary": "NBA player season-by-season and career statistics", + "tags": [ + "NBA" + ] + } + }, + "/nba/player-dash-pt-shots": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one player's tracking shot dashboard as several result sets (overall, and the tracking breakdowns the upstream returns). The endpoint rejects a trimmed query with HTTP 500, so the full dashboard scope set is always sent.", + "operationId": "nba-player-dash-pt-shots", + "parameters": [ + { + "description": "Player id from nba-players or nba-team-roster", "in": "query", - "items": { - "enum": [ - "1_Low", - "2_Mid", - "3_High" - ], - "type": "string" - }, - "name": "throw_height_code[]", - "type": "array" + "name": "player_id", + "required": true, + "type": "integer", + "x-example": 1628398 }, { - "collectionFormat": "multi", - "description": "Throw outcomes", + "description": "League id; only 00 (NBA) is verified", + "enum": [ + "00" + ], "in": "query", - "items": { - "enum": [ - "A. On Target", - "B. Scoop", - "C. Bounce", - "D. Low", - "E. Wide", - "F. High" - ], - "type": "string" - }, - "name": "throw_location_code_full[]", - "type": "array" + "name": "league_id", + "type": "string", + "x-example": "00" }, { - "collectionFormat": "multi", - "description": "Time bins", + "description": "Season in YYYY-YY form; defaults to the current NBA season", "in": "query", - "items": { - "enum": [ - "-1", - "0", - "1", - "2", - "3", - "4", - "5" - ], - "type": "string" - }, - "name": "bin_time_X10[]", - "type": "array" + "name": "season", + "type": "string", + "x-example": "2026-27" }, { - "default": "total_oaa", - "description": "Local sort field", + "description": "Season type", "enum": [ - "entity_name", - "total_oaa", - "oaa_on_target", - "oaa_bounce", - "oaa_scoop", - "oaa_low", - "oaa_high", - "oaa_wide", - "n_on_target", - "n_bounce", - "n_scoop", - "n_low", - "n_high", - "n_wide", - "outs_on_target", - "outs_bounce", - "outs_scoop", - "outs_low", - "outs_high", - "outs_wide", - "n_outs", - "n_plays", - "avg_expected_rate_out" + "Regular Season" ], "in": "query", - "name": "sortColumn", - "type": "string" + "name": "season_type", + "type": "string", + "x-example": "Regular Season" }, { - "default": "desc", - "description": "Local sort direction", + "description": "Aggregation", "enum": [ - "asc", - "desc" + "PerGame" ], "in": "query", - "name": "sortDirection", - "type": "string" - }, - { - "default": 100, - "description": "Rows per page, 1-500", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "description": "Zero-based row offset", - "in": "query", - "maximum": 10000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "per_mode", + "type": "string", + "x-example": "PerGame" } ], "produces": [ @@ -435082,7 +511615,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastFirstBaseReceivingResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.TablesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -435091,6 +511636,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -435109,341 +511660,346 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant First Base Receiving leaderboards", + "summary": "NBA player tracking shot dashboard", "tags": [ - "MLB" + "NBA" ] } }, - "/mlb/statcast-first-base-receiving-details": { + "/nba/player-info": { "get": { - "description": "Returns per-play records backing an individual first-base receiving leaderboard row, including game/play ids, outcome codes, receiving OAA, expected out rate, timing, and field coordinates. This is tabular JSON; the separate 3D skeletal visualization route is excluded.", - "operationId": "mlb-statcast-first-base-receiving-details", + "consumes": [ + "application/json" + ], + "description": "Returns one player's league profile: full name forms, birth date, school and country, draft year and round, jersey number, position, height and weight, team identity and season experience. Take the player id from nba-players or nba-team-roster.", + "operationId": "nba-player-info", "parameters": [ { - "description": "Positive MLB player id", + "description": "Player id from nba-players or nba-team-roster", "in": "query", "name": "player_id", "required": true, "type": "integer", - "x-example": 683737 + "x-example": 1628398 }, { - "default": "fielder_3", - "description": "Leaderboard group", + "description": "League id; only 00 (NBA) is verified", "enum": [ - "fielder_3", - "throw_fielder_id", - "pitching-team", - "batting-team", - "league" + "00" ], "in": "query", - "name": "type", - "type": "string" + "name": "league_id", + "type": "string", + "x-example": "00" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.TablesResponse" + } + }, + "type": "object" + } + ] + } }, - { - "collectionFormat": "multi", - "description": "Season values", - "in": "query", - "items": { - "enum": [ - "2021", - "2022", - "2023", - "2024", - "2025", - "2026" - ], - "type": "string" - }, - "name": "season[]", - "type": "array" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "collectionFormat": "multi", - "description": "Game types", - "in": "query", - "items": { - "enum": [ - "R", - "F", - "D", - "L", - "W" - ], - "type": "string" - }, - "name": "gameType[]", - "type": "array" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "default": "q", - "description": "Minimum opportunities", - "enum": [ - "q", - "1", - "5", - "10", - "25", - "50", - "75", - "100", - "200", - "300", - "400", - "500", - "750", - "1000" - ], - "in": "query", - "name": "min", - "type": "string" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": "1", - "description": "Grouped opportunity threshold", + "ApiKeyAuth": [] + } + ], + "summary": "NBA player profile", + "tags": [ + "NBA" + ] + } + }, + "/nba/player-stats": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the league-wide player statistics table for one season, measure and aggregation: one row per player with the columns the source publishes for that measure, keyed by the source's own column names such as PLAYER_ID, PLAYER_NAME, TEAM_ID, GP, MIN, PTS, REB and AST. Base and Advanced are the two verified measures, and PerGame and Totals the two verified aggregations; read the response's headers list rather than assuming a fixed column set.", + "operationId": "nba-player-stats", + "parameters": [ + { + "description": "League id; only 00 (NBA) is verified", "enum": [ - "1", - "5", - "10", - "25", - "50", - "75", - "100", - "200", - "300", - "400", - "500", - "750", - "1000" + "00" ], "in": "query", - "name": "minSplit", - "type": "string" + "name": "league_id", + "type": "string", + "x-example": "00" }, { - "collectionFormat": "multi", - "description": "Group dimensions", + "description": "Season in YYYY-YY form; defaults to the current NBA season", "in": "query", - "items": { - "enum": [ - "throw_height_code", - "throw_location_code_full", - "runners_on_cd" - ], - "type": "string" - }, - "name": "split[]", - "type": "array" + "name": "season", + "type": "string", + "x-example": "2026-27" }, { - "default": "1", - "description": "Year split selector", + "description": "Season type; Regular Season or Playoffs", "enum": [ - "0", - "1" + "Regular Season", + "Playoffs", + "Pre Season", + "All Star" ], "in": "query", - "name": "splitYear", - "type": "string" - }, - { - "collectionFormat": "multi", - "description": "MLB team ids", - "in": "query", - "items": { - "enum": [ - "108", - "117", - "133", - "141", - "144", - "158", - "138", - "112", - "109", - "119", - "137", - "114", - "136", - "146", - "121", - "120", - "110", - "135", - "143", - "134", - "140", - "139", - "111", - "113", - "115", - "118", - "116", - "142", - "145", - "147" - ], - "type": "string" - }, - "name": "team[]", - "type": "array" - }, - { - "description": "Inclusive start date (YYYY-MM-DD)", - "in": "query", - "name": "dateStart", - "type": "string" - }, - { - "description": "Inclusive end date (YYYY-MM-DD)", - "in": "query", - "name": "dateEnd", - "type": "string" + "name": "season_type", + "type": "string", + "x-example": "Regular Season" }, { - "description": "First baseman batting hand", + "description": "Statistic family; Base or Advanced", "enum": [ - "L", - "R" + "Base", + "Advanced", + "Misc", + "Scoring", + "Defense", + "Opponent" ], "in": "query", - "name": "fielder_3_hand", - "type": "string" + "name": "measure_type", + "type": "string", + "x-example": "Base" }, { - "description": "Minimum fielder height", + "description": "Aggregation; PerGame or Totals", "enum": [ - "70", - "71", - "72", - "73", - "74", - "75", - "76", - "77", - "78", - "79", - "80" + "PerGame", + "Totals", + "Per36", + "Per48", + "Per100Possessions", + "MinutesPer", + "PerPossession" ], "in": "query", - "name": "min_height_in_inches", - "type": "string" + "name": "per_mode", + "type": "string", + "x-example": "PerGame" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.TablesResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Field-out flag", + "ApiKeyAuth": [] + } + ], + "summary": "NBA league-wide player statistics table", + "tags": [ + "NBA" + ] + } + }, + "/nba/players": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the league's player index for a season, one row per player with player id, first and last name, team id and the source's roster attributes. This is the family's player-id discovery route: the ids it returns are what nba-player-info, nba-box-score and nba-play-by-play accept, so call this instead of guessing an id. Pass team_id to narrow the index to one roster.", + "operationId": "nba-players", + "parameters": [ + { + "description": "League id; only 00 (NBA) is verified", "enum": [ - "0", - "1" + "00" ], "in": "query", - "name": "is_hit_into_play_field_out", - "type": "string" + "name": "league_id", + "type": "string", + "x-example": "00" }, { - "collectionFormat": "multi", - "description": "Base occupancy codes", + "description": "Season in YYYY-YY form; defaults to the current NBA season", "in": "query", - "items": { - "enum": [ - "0", - "1", - "2", - "3", - "4", - "5", - "6", - "7" - ], - "type": "string" - }, - "name": "runners_on_cd[]", - "type": "array" + "name": "season", + "type": "string", + "x-example": "2026-27" }, { - "collectionFormat": "multi", - "description": "Throwing position ids", + "description": "Optional team id from nba-standings; narrows the index to that roster example(1610612741)", "in": "query", - "items": { - "enum": [ - "4", - "5", - "6" - ], - "type": "string" - }, - "name": "throw_pos_id[]", - "type": "array" + "name": "team_id", + "type": "integer", + "x-example": 1610612741 }, { - "collectionFormat": "multi", - "description": "Throw heights", + "description": "When true, keep only players active in the season", "in": "query", - "items": { - "enum": [ - "1_Low", - "2_Mid", - "3_High" - ], - "type": "string" - }, - "name": "throw_height_code[]", - "type": "array" + "name": "active", + "type": "boolean" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.TablesResponse" + } + }, + "type": "object" + } + ] + } }, - { - "collectionFormat": "multi", - "description": "Throw outcomes", - "in": "query", - "items": { - "enum": [ - "A. On Target", - "B. Scoop", - "C. Bounce", - "D. Low", - "E. Wide", - "F. High" - ], - "type": "string" - }, - "name": "throw_location_code_full[]", - "type": "array" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "collectionFormat": "multi", - "description": "Time bins", - "in": "query", - "items": { - "enum": [ - "-1", - "0", - "1", - "2", - "3", - "4", - "5" - ], - "type": "string" - }, - "name": "bin_time_X10[]", - "type": "array" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": 100, - "description": "Rows per page, 1-500", + "ApiKeyAuth": [] + } + ], + "summary": "NBA player index: every player id for a season", + "tags": [ + "NBA" + ] + } + }, + "/nba/playoff-picture": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the current playoff picture as two tables, EastConfPlayoffPicture and WestConfPlayoffPicture. Verified columns are TEAM_ID, CONFERENCE and CLINCHED; the upstream sends more columns than were confirmed here (the sampled PLAYOFF_RANK column name did not match the response) and any extras are passed through as-is.", + "operationId": "nba-playoff-picture", + "parameters": [ + { + "description": "League id; only 00 (NBA) is verified", + "enum": [ + "00" + ], "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "league_id", + "type": "string", + "x-example": "00" }, { - "description": "Zero-based row offset", + "description": "Five-digit season id such as 22026; defaults to the current season", "in": "query", - "maximum": 100000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "season_id", + "type": "string", + "x-example": "22026" } ], "produces": [ @@ -435453,7 +512009,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastFirstBaseReceivingDetailsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.TablesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -435462,6 +512030,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -435480,158 +512054,67 @@ "ApiKeyAuth": [] } ], - "summary": "Get a player's First Base Receiving play records", + "summary": "NBA playoff picture by conference", "tags": [ - "MLB" + "NBA" ] } }, - "/mlb/statcast-home-runs": { + "/nba/pt-defend": { "get": { - "description": "Returns Batter or Pitcher Home Runs Tracking rows. Year, team id, minimum home runs, and Standard/Adjusted mode are first-party filters. The first-party table sorts client-side; this endpoint applies a named local sort and pagination. Use mlb_discovery for the exact filter sets. Per-player home-run plays are available from mlb-statcast-home-runs-details; trajectory images, video media, and CSV downloads are separate representations.", - "operationId": "mlb-statcast-home-runs", + "consumes": [ + "application/json" + ], + "description": "Returns the league's defensive tracking table for one defended-shot category. Marker-verified columns are CLOSE_DEF_PERSON_ID, PLAYER_NAME, TEAM_ID, TEAM_ABBREVIATION, AGE, GP, G, FREQ, D_FGM, D_FGA, D_FG_PCT, NORMAL_FG_PCT and PCT_PLUSMINUS. The player identity column on this table is CLOSE_DEF_PERSON_ID, not PLAYER_ID.", + "operationId": "nba-pt-defend", "parameters": [ { - "default": "Batter", - "description": "Table type", - "enum": [ - "Batter", - "Pitcher" - ], - "in": "query", - "name": "player_type", - "type": "string" - }, - { - "default": "2026", - "description": "Season", - "enum": [ - "2019", - "2020", - "2021", - "2022", - "2023", - "2024", - "2025", - "2026" - ], - "in": "query", - "name": "year", - "type": "string" - }, - { - "description": "MLB team id; blank selects all teams", + "description": "League id; only 00 (NBA) is verified", "enum": [ - "108", - "109", - "110", - "111", - "112", - "113", - "114", - "115", - "116", - "117", - "118", - "119", - "120", - "121", - "133", - "134", - "135", - "136", - "137", - "138", - "139", - "140", - "141", - "142", - "143", - "144", - "145", - "146", - "147", - "158" + "00" ], "in": "query", - "name": "team", - "type": "string" + "name": "league_id", + "type": "string", + "x-example": "00" }, { - "default": "0", - "description": "Minimum home run total", - "enum": [ - "0", - "5", - "10", - "15", - "20", - "25" - ], + "description": "Season in YYYY-YY form; defaults to the current NBA season", "in": "query", - "name": "min", - "type": "string" + "name": "season", + "type": "string", + "x-example": "2026-27" }, { - "default": "adj_xhr", - "description": "Trajectory mode", + "description": "Season type", "enum": [ - "adj_xhr", - "xhr" + "Regular Season" ], "in": "query", - "name": "cat", - "type": "string" + "name": "season_type", + "type": "string", + "x-example": "Regular Season" }, { - "default": "xhr", - "description": "Local sort column", + "description": "Aggregation", "enum": [ - "player", - "team", - "year", - "cat", - "avg_hr_trot", - "doubters", - "mostly_gone", - "no_doubters", - "no_doubter_per", - "hr_total", - "xhr", - "xhr_diff" + "PerGame" ], "in": "query", - "name": "sort", - "type": "string" + "name": "per_mode", + "type": "string", + "x-example": "PerGame" }, { - "default": "desc", - "description": "Local sort direction", + "description": "Defended-shot category", "enum": [ - "asc", - "desc" + "Overall", + "3 Pointers" ], "in": "query", - "name": "sort_dir", - "type": "string" - }, - { - "default": 100, - "description": "Rows per page (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "default": 0, - "description": "Zero-based row offset", - "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "defense_category", + "type": "string", + "x-example": "Overall" } ], "produces": [ @@ -435641,7 +512124,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastHomeRunsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.TablesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -435656,6 +512151,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -435668,81 +512169,66 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Home Runs Tracking", + "summary": "NBA defensive tracking dashboard", "tags": [ - "MLB" + "NBA" ] } }, - "/mlb/statcast-home-runs-details": { + "/nba/pt-stats": { "get": { - "description": "Returns the home-run plays expanded from one batter or pitcher leaderboard row, with event measurements and park outcomes. Provide the exact player id, player type, year, and mode from the row. Play identifiers and source links are returned; trajectory images, video media, and CSV output are not included.", - "operationId": "mlb-statcast-home-runs-details", + "consumes": [ + "application/json" + ], + "description": "Returns the league player-tracking dashboard for one tracking measure. The endpoint rejects a trimmed query with HTTP 500, so the full dashboard scope set is always sent. pt_measure_type is pinned to the one verified measure, SpeedDistance.", + "operationId": "nba-pt-stats", "parameters": [ { - "description": "Positive MLB player id from mlb-statcast-home-runs", + "description": "League id; only 00 (NBA) is verified", + "enum": [ + "00" + ], "in": "query", - "name": "player_id", - "required": true, + "name": "league_id", "type": "string", - "x-example": "691718" + "x-example": "00" }, { - "default": "Batter", - "description": "Table type", - "enum": [ - "Batter", - "Pitcher" - ], + "description": "Season in YYYY-YY form; defaults to the current NBA season", "in": "query", - "name": "player_type", - "type": "string" + "name": "season", + "type": "string", + "x-example": "2026-27" }, { - "default": "2026", - "description": "Season", + "description": "Season type", "enum": [ - "2019", - "2020", - "2021", - "2022", - "2023", - "2024", - "2025", - "2026" + "Regular Season" ], "in": "query", - "name": "year", - "type": "string" + "name": "season_type", + "type": "string", + "x-example": "Regular Season" }, { - "default": "adj_xhr", - "description": "Trajectory mode", + "description": "Aggregation", "enum": [ - "adj_xhr", - "xhr" + "PerGame" ], "in": "query", - "name": "cat", - "type": "string" - }, - { - "default": 100, - "description": "Rows per page (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "per_mode", + "type": "string", + "x-example": "PerGame" }, { - "default": 0, - "description": "Zero-based row offset", + "description": "Tracking measure; only SpeedDistance is verified", + "enum": [ + "SpeedDistance" + ], "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "pt_measure_type", + "type": "string", + "x-example": "SpeedDistance" } ], "produces": [ @@ -435752,7 +512238,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastHomeRunsDetailsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.TablesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -435767,6 +512265,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -435779,132 +512283,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Home Runs play details", + "summary": "NBA player-tracking dashboard", "tags": [ - "MLB" + "NBA" ] } }, - "/mlb/statcast-leaders": { + "/nba/scoreboard": { "get": { - "description": "Returns the standard anonymous Baseball Savant Statcast leaderboard for batters, pitchers, teams, or pitcher teams. Supports the page's season, team, batter position, minimum batted-ball event, and sortable metric filters, plus local pagination. Use mlb_discovery for exact filter sets. Other Baseball Savant leaderboard pages are listed there but are not represented by this route.", - "operationId": "mlb-statcast", + "consumes": [ + "application/json" + ], + "description": "Returns every NBA game for a game day from the league's own statistics service: game id, code, status and clock, period, and both teams with id, tricode, name, score, wins and losses. Game ids from this route are the input to the box-score and play-by-play routes. The upstream requires a game date, so a missing date defaults to the current UTC date; the NBA game day is US Eastern, so pass game_date explicitly when the exact slate matters.", + "operationId": "nba-scoreboard", "parameters": [ { - "default": "batter", - "description": "Leaderboard row type", - "enum": [ - "batter", - "pitcher", - "batter-team", - "pitcher-team" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "description": "Season; current season back 11 seasons", - "in": "query", - "name": "year", - "type": "integer" - }, - { - "description": "Optional MLB team id from mlb_teams", - "in": "query", - "name": "team_id", - "type": "string" - }, - { - "description": "Batter position", - "enum": [ - "C", - "1B", - "2B", - "SS", - "3B", - "LF", - "CF", - "RF", - "DH" - ], - "in": "query", - "name": "position", - "type": "string" - }, - { - "default": "q", - "description": "Minimum batted-ball event threshold", - "enum": [ - "q", - "1", - "25", - "50", - "100", - "150", - "200", - "250", - "350", - "450", - "500", - "600" - ], - "in": "query", - "name": "min_bbe", - "type": "string" - }, - { - "default": "barrels_per_pa", - "description": "Sort field", - "enum": [ - "entity_name", - "bip", - "launch_angle_avg", - "sweet_spot_percent", - "exit_velocity_max", - "exit_velocity_avg", - "avg_best_speed", - "exit_velocity_fbld", - "distance_max", - "distance_hr_avg", - "hard_hit_ct", - "hard_hit_percent", - "hard_hit_per_swing", - "barrel_ct", - "barrels_per_bip", - "barrels_per_pa" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "default": "desc", - "description": "Sort direction", + "description": "League id; only 00 (NBA) is verified", "enum": [ - "asc", - "desc" + "00" ], "in": "query", - "name": "sort_dir", - "type": "string" + "name": "league_id", + "type": "string", + "x-example": "00" }, { - "default": 100, - "description": "Rows per page (1-500)", + "description": "Game day in MM/DD/YYYY form; defaults to the current UTC date", "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "game_date", + "type": "string", + "x-example": "11/08/2026" }, { - "description": "Zero-based row offset", + "description": "Whole-day offset applied to the game day example(0)", "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "day_offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -435914,7 +512329,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.ScoreboardResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -435923,6 +512350,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -435935,165 +512374,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Statcast leaderboard data", + "summary": "NBA scoreboard for one game day", "tags": [ - "MLB" + "NBA" ] } }, - "/mlb/statcast-oaa": { + "/nba/standings": { "get": { - "description": "Returns the separate Outs Above Average leaderboard for fielders, fielding teams, batters, batting teams, or pitchers. Supports season range, split years, team, monthly range, attempts, position, detailed fielder roles, local sorting, and pagination.", - "operationId": "mlb-statcast-oaa", + "consumes": [ + "application/json" + ], + "description": "Returns the standings table for one season and season type: one row per team with team id, city, name, slug, conference, division, wins, losses, win percentage, playoff rank, streak, conference record and clinched flag. Western/Eastern conference and division are columns rather than parameters, so one call returns the whole league and callers split on them.", + "operationId": "nba-standings", "parameters": [ { - "default": "Fielder", - "description": "Leaderboard view", - "enum": [ - "Fielder", - "Fielding_Team", - "Batter", - "Batting_Team", - "Pitcher" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "description": "Start season from 2016 through the current season", - "in": "query", - "name": "start_year", - "type": "integer" - }, - { - "description": "End season from 2016 through the current season", - "in": "query", - "name": "end_year", - "type": "integer" - }, - { - "default": "no", - "description": "Return one row per season in a year range", - "enum": [ - "no", - "yes" - ], - "in": "query", - "name": "split", - "type": "string" - }, - { - "description": "Optional MLB team id from mlb_teams", - "in": "query", - "name": "team_id", - "type": "string" - }, - { - "default": "year", - "description": "Time range", - "enum": [ - "year", - "4", - "5", - "6", - "7", - "8", - "9" - ], - "in": "query", - "name": "range", - "type": "string" - }, - { - "default": "q", - "description": "Minimum attempts", - "enum": [ - "q", - "10", - "25", - "50", - "75", - "100", - "150", - "200", - "250" - ], - "in": "query", - "name": "minimum", - "type": "string" - }, - { - "description": "Position filter", + "description": "League id; only 00 (NBA) is verified", "enum": [ - "if", - "of", - "3", - "4", - "5", - "6", - "7", - "8", - "9" + "00" ], "in": "query", - "name": "position", - "type": "string" - }, - { - "description": "Comma-separated detailed fielder role ids. Values: 32,30,31,77,71,70,72,78,43,42,40,41,46,87,81,82,89,64,62,60,61,98,91,90,92,99,51,50,52", - "in": "query", - "name": "roles", - "type": "string" + "name": "league_id", + "type": "string", + "x-example": "00" }, { - "default": "outs_above_average", - "description": "Sort field", - "enum": [ - "entity_name", - "display_team_name", - "primary_pos_formatted", - "fielding_runs_prevented", - "outs_above_average", - "outs_above_average_infront", - "outs_above_average_lateral", - "outs_above_average_behind", - "actual_success_rate", - "adj_estimated_success_rate", - "diff_success_rate", - "n" - ], + "description": "Season in YYYY-YY form; defaults to the current NBA season", "in": "query", - "name": "sort", - "type": "string" + "name": "season", + "type": "string", + "x-example": "2026-27" }, { - "default": "desc", - "description": "Sort direction", + "description": "Season type; Regular Season or Playoffs", "enum": [ - "asc", - "desc" + "Regular Season", + "Playoffs", + "Pre Season", + "All Star" ], "in": "query", - "name": "sort_dir", - "type": "string" - }, - { - "default": 100, - "description": "Rows per page (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "description": "Zero-based row offset", - "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "season_type", + "type": "string", + "x-example": "Regular Season" } ], "produces": [ @@ -436103,7 +512426,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastBoardResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.TablesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -436112,6 +512447,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -436124,139 +512471,86 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Outs Above Average", + "summary": "NBA standings for a season and season type", "tags": [ - "MLB" + "NBA" ] } }, - "/mlb/statcast-park-factors": { + "/nba/synergy-play-types": { "get": { - "description": "Returns season, venue, distance, distance-all, raw, or dimensions rows from Baseball Savant. Query filters are conditional on type and are live-echo validated; local sorting and pagination are applied to returned rows. The fence-stat and allDiffs controls only change display columns and do not change row data; CSV and linked venue detail pages are separate surfaces.", - "operationId": "mlb-statcast-park-factors", + "consumes": [ + "application/json" + ], + "description": "Returns the synergy play-type dashboard for one play type and grouping. This endpoint takes a four-digit SeasonYear rather than the dashboards' YYYY-YY season label. play_type is pinned to the one verified value, Isolation, and type_grouping to the verified offensive grouping.", + "operationId": "nba-synergy-play-types", "parameters": [ { - "default": "year", - "description": "Park Factors table mode", + "description": "League id; only 00 (NBA) is verified", "enum": [ - "year", - "venue", - "distance", - "distance-all", - "raw", - "dimensions" + "00" ], "in": "query", - "name": "type", - "type": "string" - }, - { - "description": "Mode-specific season; see endpoint markdown and mlb_discovery for exact values", - "in": "query", - "name": "year", - "type": "string" + "name": "league_id", + "type": "string", + "x-example": "00" }, { - "description": "Optional batter side for year, venue, or raw mode", - "enum": [ - "R", - "L" - ], + "description": "Four-digit season year such as 2026; defaults to the current season", "in": "query", - "name": "bat_side", - "type": "string" + "name": "season_year", + "type": "string", + "x-example": "2026" }, { - "description": "Park condition for year and venue modes", + "description": "Season type", "enum": [ - "All", - "Day", - "Night", - "Roof Closed", - "Open Air" + "Regular Season" ], "in": "query", - "name": "condition", - "type": "string" + "name": "season_type", + "type": "string", + "x-example": "Regular Season" }, { - "default": "3", - "description": "Rolling year count for year and venue modes", + "description": "Synergy play type; only Isolation is verified", "enum": [ - "1", - "2", - "3" + "Isolation" ], "in": "query", - "name": "rolling", - "type": "string" + "name": "play_type", + "type": "string", + "x-example": "Isolation" }, { - "description": "Venue mode metric", + "description": "Aggregation", "enum": [ - "index_wOBA", - "index_wOBAcon", - "index_xwOBAcon", - "index_BACON", - "index_xBAcon", - "index_hardhit", - "index_runs", - "index_OBP", - "index_Hits", - "index_1B", - "index_2B", - "index_3B", - "index_HR", - "index_BB", - "index_SO" + "PerGame" ], "in": "query", - "name": "stat", - "type": "string" + "name": "per_mode", + "type": "string", + "x-example": "PerGame" }, { - "description": "Park population selector", + "description": "Subject", "enum": [ - "mlb", - "all" + "T" ], "in": "query", - "name": "parks", - "type": "string" - }, - { - "description": "Local row field present in the selected mode's data", - "in": "query", - "name": "sort", - "type": "string" + "name": "player_or_team", + "type": "string", + "x-example": "T" }, { - "description": "Local sort direction", + "description": "Grouping", "enum": [ - "asc", - "desc" + "offensive" ], "in": "query", - "name": "sort_dir", - "type": "string" - }, - { - "default": 100, - "description": "Rows per page (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "default": 0, - "description": "Zero-based row offset", - "in": "query", - "maximum": 10000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "type_grouping", + "type": "string", + "x-example": "offensive" } ], "produces": [ @@ -436266,7 +512560,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastParkFactorsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.TablesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -436281,6 +512587,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -436293,131 +512605,129 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Statcast Park Factors rows", + "summary": "NBA synergy play-type dashboard", "tags": [ - "MLB" + "NBA" ] } }, - "/mlb/statcast-percentile": { + "/nba/team-details": { "get": { - "description": "Returns batter or pitcher percentile rankings. Type, season, and team are first-party table filters. Repeated pctl filters, table sorting, and pagination are applied locally to the embedded rows. Use mlb_discovery for exact type-specific fields, comparators, seasons, and team ids. CSV is a separate download.", - "operationId": "mlb-statcast-percentile", + "consumes": [ + "application/json" + ], + "description": "Returns one franchise's detail from the league statistics service: the franchise background row (team id, abbreviation, nickname, city, arena and capacity, owner, general manager, head coach, G-League affiliate, founding year), its season-by-season history, and its championship awards. Verified columns are TEAM_ID, ABBREVIATION, NICKNAME, CITY, ARENA, ARENACAPACITY, OWNER, GENERALMANAGER, HEADCOACH, DLEAGUEAFFILIATION and YEARFOUNDED on TeamBackground, plus YEARAWARDED and OPPOSITETEAM on TeamAwardsChampionships; the upstream sends more columns than were confirmed here and they are passed through as-is.", + "operationId": "nba-team-details", "parameters": [ { - "default": "batter", - "description": "Table type", - "enum": [ - "batter", - "pitcher" - ], + "description": "Team id from nba-standings", "in": "query", - "name": "type", - "type": "string" + "name": "team_id", + "required": true, + "type": "integer", + "x-example": 1610612741 }, { - "default": "2026", - "description": "Season", + "description": "League id; only 00 (NBA) is verified", "enum": [ - "2015", - "2016", - "2017", - "2018", - "2019", - "2020", - "2021", - "2022", - "2023", - "2024", - "2025", - "2026" + "00" ], "in": "query", - "name": "year", - "type": "string" + "name": "league_id", + "type": "string", + "x-example": "00" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.TablesResponse" + } + }, + "type": "object" + } + ] + } }, - { - "description": "MLB team id; blank selects all teams", - "enum": [ - "108", - "109", - "110", - "111", - "112", - "113", - "114", - "115", - "116", - "117", - "118", - "119", - "120", - "121", - "133", - "134", - "135", - "136", - "137", - "138", - "139", - "140", - "141", - "142", - "143", - "144", - "145", - "146", - "147", - "158" - ], - "in": "query", - "name": "team", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "collectionFormat": "multi", - "description": "Repeated field-comparator-value filter from the type-specific field set in mlb_discovery; value range 0-100", - "in": "query", - "items": { - "type": "string" - }, - "name": "pctl", - "type": "array" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Local sort field from the type-specific set in mlb_discovery", + "ApiKeyAuth": [] + } + ], + "summary": "NBA franchise background, season history and awards", + "tags": [ + "NBA" + ] + } + }, + "/nba/team-roster": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one team's roster for a season, one row per player with player id, name, nickname, player slug, jersey number, position, height and weight. Player ids from this route are the input nba-player-info accepts; take the team id from nba-standings.", + "operationId": "nba-team-roster", + "parameters": [ + { + "description": "Team id from nba-standings", "in": "query", - "name": "sort", - "type": "string" + "name": "team_id", + "required": true, + "type": "integer", + "x-example": 1610612741 }, { - "default": "desc", - "description": "Local sort direction", + "description": "League id; only 00 (NBA) is verified", "enum": [ - "asc", - "desc" + "00" ], "in": "query", - "name": "sort_dir", - "type": "string" - }, - { - "default": 100, - "description": "Rows per page (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "league_id", + "type": "string", + "x-example": "00" }, { - "default": 0, - "description": "Zero-based row offset", + "description": "Season in YYYY-YY form; defaults to the current NBA season", "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "season", + "type": "string", + "x-example": "2026-27" } ], "produces": [ @@ -436427,7 +512737,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastPercentileResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.TablesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -436442,6 +512764,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -436454,166 +512782,73 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Percentile Rankings", + "summary": "NBA team roster for a season", "tags": [ - "MLB" + "NBA" ] } }, - "/mlb/statcast-pitch-arsenal": { + "/nba/team-shot-locations": { "get": { - "description": "Returns pitcher or batter pitch-level arsenal leaderboards. Season, team, pitch type, minimum PA, and minimum-pitch qualification filters are replayed against the anonymous first-party table; sorting and pagination are applied locally. Use mlb_discovery for the full selector set. Player rows can be expanded with mlb-statcast-pitch-arsenal-details.", - "operationId": "mlb-statcast-pitch-arsenal", + "consumes": [ + "application/json" + ], + "description": "Returns the team shot-location dashboard: one row per team with the shooting columns for each distance zone. The endpoint requires both MeasureType and DistanceRange; a request without MeasureType answers HTTP 400 naming that parameter. distance_range is pinned to the one verified value, 'By Zone'.", + "operationId": "nba-team-shot-locations", "parameters": [ { - "default": "pitcher", - "description": "Row type", - "enum": [ - "pitcher", - "batter" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "default": "2026", - "description": "Season", - "enum": [ - "2019", - "2020", - "2021", - "2022", - "2023", - "2024", - "2025", - "2026" - ], - "in": "query", - "name": "year", - "type": "string" - }, - { - "description": "MLB team id from mlb_teams", - "in": "query", - "name": "team_id", - "type": "string" - }, - { - "description": "Pitch code; blank means all pitch types", + "description": "League id; only 00 (NBA) is verified", "enum": [ - "FF", - "CH", - "CU", - "FC", - "KN", - "SC", - "SI", - "SL", - "SV", - "FS", - "ST", - "CUKC", - "SIFT" + "00" ], "in": "query", - "name": "pitch_type", - "type": "string" + "name": "league_id", + "type": "string", + "x-example": "00" }, { - "default": "1", - "description": "Minimum plate appearances", - "enum": [ - "1", - "10", - "25", - "50", - "100", - "150", - "200", - "250", - "350", - "450", - "500", - "600" - ], + "description": "Season in YYYY-YY form; defaults to the current NBA season", "in": "query", - "name": "min_pa", - "type": "string" + "name": "season", + "type": "string", + "x-example": "2026-27" }, { - "default": "q", - "description": "Minimum pitches; q means qualified", + "description": "Season type", "enum": [ - "q", - "1", - "10", - "50", - "100", - "200", - "300", - "500", - "750" + "Regular Season" ], "in": "query", - "name": "min_pitches", - "type": "string" + "name": "season_type", + "type": "string", + "x-example": "Regular Season" }, { - "default": "run_value_per_100", - "description": "Local sort field", + "description": "Statistic family", "enum": [ - "player_name", - "team_name_alt", - "pitch_name", - "run_value_per_100", - "run_value", - "pitches", - "pitch_usage", - "pa", - "ba", - "slg", - "woba", - "whiff_percent", - "k_percent", - "put_away", - "est_ba", - "est_slg", - "est_woba", - "hard_hit_percent" + "Base" ], "in": "query", - "name": "sort", - "type": "string" + "name": "measure_type", + "type": "string", + "x-example": "Base" }, { - "default": "desc", - "description": "Local sort direction", + "description": "Aggregation", "enum": [ - "asc", - "desc" + "PerGame" ], "in": "query", - "name": "sort_dir", - "type": "string" - }, - { - "default": 100, - "description": "Rows per page (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "per_mode", + "type": "string", + "x-example": "PerGame" }, { - "default": 0, - "description": "Zero-based row offset", + "description": "Distance bucket set; only By Zone is verified", "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "distance_range", + "type": "string", + "x-example": "By Zone" } ], "produces": [ @@ -436623,7 +512858,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastPitchArsenalResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.TablesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -436638,6 +512885,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -436650,93 +512903,80 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Pitch Arsenal Stats", + "summary": "NBA team shot-location dashboard", "tags": [ - "MLB" + "NBA" ] } }, - "/mlb/statcast-pitch-arsenal-details": { + "/nba/team-stats": { "get": { - "description": "Returns game-level pitches expanded from one batter or pitcher pitch-arsenal row. Supply player_id, player_type, year, and the row's pitch_type. The upstream's min_ab request parameter is ignored, so it is not exposed. Rows include play_id values used by Baseball Savant's video pages; this endpoint returns play data and identifiers, not video media.", - "operationId": "mlb-statcast-pitch-arsenal-details", + "consumes": [ + "application/json" + ], + "description": "Returns the league-wide team statistics table for one season, measure and aggregation: one row per team with the columns the source publishes for that measure, keyed by the source's own column names such as TEAM_ID, TEAM_NAME, GP, W, L, W_PCT, PTS and PLUS_MINUS. Base and Advanced are the two verified measures, and PerGame and Totals the two verified aggregations; the columns differ between measures, so read the response's headers list rather than assuming a fixed set.", + "operationId": "nba-team-stats", "parameters": [ { - "description": "Positive MLB player id from mlb-statcast-pitch-arsenal", + "description": "League id; only 00 (NBA) is verified", + "enum": [ + "00" + ], "in": "query", - "name": "player_id", - "required": true, + "name": "league_id", "type": "string", - "x-example": "592332" + "x-example": "00" }, { - "default": "pitcher", - "description": "Row type", - "enum": [ - "pitcher", - "batter" - ], + "description": "Season in YYYY-YY form; defaults to the current NBA season", "in": "query", - "name": "player_type", - "type": "string" + "name": "season", + "type": "string", + "x-example": "2026-27" }, { - "description": "Pitch type from the selected row", + "description": "Season type; Regular Season or Playoffs", "enum": [ - "FF", - "CH", - "CU", - "FC", - "KN", - "SC", - "SI", - "SL", - "SV", - "FS", - "ST", - "CUKC", - "SIFT" + "Regular Season", + "Playoffs", + "Pre Season", + "All Star" ], "in": "query", - "name": "pitch_type", - "required": true, + "name": "season_type", "type": "string", - "x-example": "FF" + "x-example": "Regular Season" }, { - "default": "2026", - "description": "Season", + "description": "Statistic family; Base or Advanced", "enum": [ - "2019", - "2020", - "2021", - "2022", - "2023", - "2024", - "2025", - "2026" + "Base", + "Advanced", + "Misc", + "Scoring", + "Defense", + "Opponent" ], "in": "query", - "name": "year", - "type": "string" - }, - { - "default": 100, - "description": "Rows per page (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "measure_type", + "type": "string", + "x-example": "Base" }, { - "default": 0, - "description": "Zero-based row offset", + "description": "Aggregation; PerGame or Totals", + "enum": [ + "PerGame", + "Totals", + "Per36", + "Per48", + "Per100Possessions", + "MinutesPer", + "PerPossession" + ], "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "per_mode", + "type": "string", + "x-example": "PerGame" } ], "produces": [ @@ -436746,7 +512986,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastPitchArsenalDetailsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.TablesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -436761,6 +513013,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -436773,171 +513031,91 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Pitch Arsenal play details", + "summary": "NBA league-wide team statistics table", "tags": [ - "MLB" + "NBA" ] } }, - "/mlb/statcast-pitch-arsenals": { + "/nba/team-stats-leaders": { "get": { - "description": "Returns pitcher pitch speed, percentage, or spin rankings by pitch class. Year, minimum-pitch threshold, and hand are first-party filters. Team filtering and table sorting are applied locally because the page JavaScript applies them after receiving the embedded rows. Use mlb_discovery for exact values. CSV and pitch movement visualizations remain separate representations.", - "operationId": "mlb-statcast-pitch-arsenals", + "consumes": [ + "application/json" + ], + "description": "Returns the league leaders table for one ranked statistical category: one row per player with the columns the source publishes, keyed by the source's own column names such as PLAYER_ID, PLAYER_NAME, TEAM_ID, GP, MIN, PTS, REB and AST. stat_category is required and only the verified categories are accepted; the upstream answers HTTP 403 when it is omitted, so this route rejects the request locally instead.", + "operationId": "nba-team-stats-leaders", "parameters": [ { - "default": "2026", - "description": "Season", - "enum": [ - "2008", - "2009", - "2010", - "2011", - "2012", - "2013", - "2014", - "2015", - "2016", - "2017", - "2018", - "2019", - "2020", - "2021", - "2022", - "2023", - "2024", - "2025", - "2026" - ], - "in": "query", - "name": "year", - "type": "string" - }, - { - "default": "avg_speed", - "description": "Metric", + "description": "Ranked statistic; PTS, REB or AST", "enum": [ - "avg_speed", - "n_", - "avg_spin" + "PTS", + "REB", + "AST", + "BLK", + "STL", + "TOV" ], "in": "query", - "name": "type", - "type": "string" + "name": "stat_category", + "required": true, + "type": "string", + "x-example": "PTS" }, { - "description": "Throwing hand; omit for all pitchers", + "description": "League id; only 00 (NBA) is verified", "enum": [ - "R", - "L" + "00" ], "in": "query", - "name": "hand", - "type": "string" + "name": "league_id", + "type": "string", + "x-example": "00" }, { - "default": "q", - "description": "Minimum pitches", - "enum": [ - "q", - "100", - "250", - "500", - "750", - "1000", - "1500", - "2000", - "2500", - "3000" - ], + "description": "Season in YYYY-YY form; defaults to the current NBA season", "in": "query", - "name": "min_pitches", - "type": "string" + "name": "season", + "type": "string", + "x-example": "2026-27" }, { - "description": "Current MLB team abbreviation; applied locally", + "description": "Season type; Regular Season or Playoffs", "enum": [ - "ATH", - "ATL", - "AZ", - "BAL", - "BOS", - "CHC", - "CIN", - "CLE", - "COL", - "CWS", - "DET", - "HOU", - "KC", - "LAA", - "LAD", - "MIA", - "MIL", - "MIN", - "NYM", - "NYY", - "PHI", - "PIT", - "SD", - "SEA", - "SF", - "STL", - "TB", - "TEX", - "TOR", - "WSH" + "Regular Season", + "Playoffs", + "Pre Season", + "All Star" ], "in": "query", - "name": "team", - "type": "string" + "name": "season_type", + "type": "string", + "x-example": "Regular Season" }, { - "default": "four_seam", - "description": "Local sort column", + "description": "Aggregation; PerGame or Totals", "enum": [ - "player_name", - "four_seam", - "sinker", - "cutter", - "slider", - "changeup", - "curve", - "splitter", - "sweeper", - "slurve" + "PerGame", + "Totals", + "Per36", + "Per48", + "Per100Possessions", + "MinutesPer", + "PerPossession" ], "in": "query", - "name": "sort", - "type": "string" + "name": "per_mode", + "type": "string", + "x-example": "PerGame" }, { - "default": "desc", - "description": "Local sort direction", + "description": "Player-pool scope; S is all players (the only verified value)", "enum": [ - "asc", - "desc" + "S" ], "in": "query", - "name": "sort_dir", - "type": "string" - }, - { - "default": 100, - "description": "Rows per page (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "default": 0, - "description": "Zero-based row offset", - "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "scope", + "type": "string", + "x-example": "S" } ], "produces": [ @@ -436947,7 +513125,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastPitchArsenalsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nba.TablesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -436962,6 +513152,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -436974,138 +513170,84 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Pitch Arsenals", + "summary": "NBA league leaders for one statistical category", "tags": [ - "MLB" + "NBA" ] } }, - "/mlb/statcast-pitch-movement": { + "/nbc/article": { "get": { - "description": "Returns pitcher-level pitch movement table rows for the selected season, pitch type, throwing hand, and minimum pitch count. Sorting and pagination are applied locally. The page's X/Z visualization axes and CSV download are separate presentation formats and are not returned by this JSON table contract.", - "operationId": "mlb-statcast-pitch-movement", + "description": "Returns public NBC News article metadata and body paragraphs from a canonical article URL. This does not bypass login, subscription, or other access controls.", + "operationId": "nbc-article", "parameters": [ { - "default": "2026", - "description": "Season", - "enum": [ - "2026", - "2025", - "2024", - "2023", - "2022", - "2021", - "2020", - "2019", - "2018", - "2017" - ], - "in": "query", - "name": "year", - "type": "string" - }, - { - "default": "FF", - "description": "Pitch class", - "enum": [ - "FF", - "CH", - "CU", - "FC", - "FO", - "KN", - "SC", - "SI", - "SL", - "SV", - "FS", - "ST", - "ALL" - ], - "in": "query", - "name": "pitch_type", - "type": "string" - }, - { - "description": "Pitcher throwing hand; omit for both", - "enum": [ - "R", - "L" - ], + "description": "Canonical www.nbcnews.com article URL", "in": "query", - "name": "hand", - "type": "string" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.nbcnews.com/news/us-news/ice-shooting-austin-texas-rcna598870" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/nbc.articleResponseDoc" + } }, - { - "default": "q", - "description": "Minimum pitch count", - "enum": [ - "q", - "50", - "100", - "250", - "500", - "750", - "1000", - "1500", - "2000", - "2500", - "3000" - ], - "in": "query", - "name": "min", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "default": "pitcher_break_z", - "description": "Local table sort field", - "enum": [ - "pitcher_name", - "team_name_abbrev", - "pitch_hand", - "pitch_type_name", - "pitches_thrown", - "avg_speed", - "pitcher_break_z", - "diff_z", - "pitcher_break_x_hidden", - "diff_x", - "pitcher_break_z_induced", - "diff_z_induced_standard", - "diff_x_standard" - ], - "in": "query", - "name": "sort", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "default": "desc", - "description": "Sort direction", - "enum": [ - "asc", - "desc" - ], - "in": "query", - "name": "sort_dir", - "type": "string" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": 100, - "description": "Rows per page (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get NBC News article content", + "tags": [ + "NBC News" + ] + } + }, + "/nbc/author": { + "get": { + "description": "Returns an NBC News author's byline metadata (job title, bio, social links) and their recent articles from a canonical author URL.", + "operationId": "nbc-author", + "parameters": [ { - "default": 0, - "description": "Zero-based row offset", + "description": "Canonical NBC News author URL", "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.nbcnews.com/author/daniella-silva-ncpn211" } ], "produces": [ @@ -437115,7 +513257,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastPitchMovementResponseDoc" + "$ref": "#/definitions/nbc.authorResponseDoc" } }, "400": { @@ -437130,6 +513272,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -437142,227 +513290,225 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Pitch Movement rows", + "summary": "Get an NBC News author profile", "tags": [ - "MLB" + "NBC News" ] } }, - "/mlb/statcast-pitch-tempo": { + "/nbc/headlines": { "get": { - "description": "Returns pitcher, batter, pitching-team, batting-team, or league tempo rows. Season, game type, minimum pitch, team, year comparison, and team membership options mirror the live first-party controls; q and sorting are applied locally before pagination. Use mlb_discovery for exact value sets.", - "operationId": "mlb-statcast-pitch-tempo", + "description": "Returns recent NBC News stories for one section. `section` is required and must be one of `news`, `world`, `us-news`, `politics`, `business`, `science` or `health`. Each item has a title and URL, and may include summary, author, publication time and image.", + "operationId": "nbc-headlines", "parameters": [ { - "default": "Pit", - "description": "Table group", + "description": "NBC News RSS section slug: news, world, us-news, politics, business, science, or health", "enum": [ - "Pit", - "Bat", - "Pitching Team", - "Batting Team", - "League" + "news", + "world", + "us-news", + "politics", + "business", + "science", + "health" ], "in": "query", - "name": "type", - "type": "string" + "name": "section", + "required": true, + "type": "string", + "x-example": "news" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/nbc.headlinesResponseDoc" + } }, - { - "default": "2026", - "description": "First season", - "enum": [ - "2010", - "2011", - "2012", - "2013", - "2014", - "2015", - "2016", - "2017", - "2018", - "2019", - "2020", - "2021", - "2022", - "2023", - "2024", - "2025", - "2026" - ], - "in": "query", - "name": "season_start", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "default": "season_start", - "description": "Last season; must be >= season_start", - "enum": [ - "2010", - "2011", - "2012", - "2013", - "2014", - "2015", - "2016", - "2017", - "2018", - "2019", - "2020", - "2021", - "2022", - "2023", - "2024", - "2025", - "2026" - ], - "in": "query", - "name": "season_end", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "default": "Regular", - "description": "Game type", - "enum": [ - "Regular", - "Playoff", - "All" - ], - "in": "query", - "name": "game_type", - "type": "string" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": "q", - "description": "Minimum pitch count", - "enum": [ - "q", - "1", - "10", - "50", - "100", - "250", - "500", - "1000", - "2000", - "5000" - ], - "in": "query", - "name": "n", - "type": "string" + "ApiKeyAuth": [] + } + ], + "summary": "Get NBC News section headlines", + "tags": [ + "NBC News" + ] + } + }, + "/nbc/news": { + "get": { + "description": "Returns the current NBC News top stories across the site, with no parameters. Each item has a title and URL, and may include summary, author, publication time and image. Use `nbc-headlines` to read one section.", + "operationId": "nbc-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/nbc.newsResponseDoc" + } }, - { - "description": "Optional MLB team id", - "enum": [ - "108", - "109", - "110", - "111", - "112", - "113", - "114", - "115", - "116", - "117", - "118", - "119", - "120", - "121", - "133", - "134", - "135", - "136", - "137", - "138", - "139", - "140", - "141", - "142", - "143", - "144", - "145", - "146", - "147", - "158" - ], - "in": "query", - "name": "team", - "type": "string" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": "no", - "description": "Compare seasons separately", - "enum": [ - "yes", - "no" - ], - "in": "query", - "name": "split", - "type": "string" + "ApiKeyAuth": [] + } + ], + "summary": "Get NBC News top stories", + "tags": [ + "NBC News" + ] + } + }, + "/nbc/sections": { + "get": { + "description": "Lists the seven NBC News section slugs accepted by `nbc-headlines`: `news`, `world`, `us-news`, `politics`, `business`, `science` and `health`. Each entry has its `slug`, display `name` and `url`.", + "operationId": "nbc-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/nbc.sectionsResponseDoc" + } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Team membership mode; requires team", - "enum": [ - "0", - "1" - ], - "in": "query", - "name": "with_team_only", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get NBC News RSS sections", + "tags": [ + "NBC News" + ] + } + }, + "/ndtv/article": { + "get": { + "description": "Returns public NDTV article metadata and body paragraphs from a canonical article URL. premium is true for NDTV Premium stories; paragraphs are always the text NDTV serves on its public page.", + "operationId": "ndtv-article", + "parameters": [ { - "description": "Case-insensitive local entity-name filter", + "description": "Canonical NDTV article URL", "in": "query", - "name": "q", - "type": "string" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.ndtv.com/india-news/indias-power-shortage-tops-summer-levels-as-el-nino-dries-up-hydropower-12091489" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.ndtvArticleResponseDoc" + } }, - { - "default": "median_seconds_empty", - "description": "Local sort field", - "enum": [ - "entity_name", - "start_year", - "tot_n_empty", - "median_seconds_empty", - "empty_equiv", - "freq_hot_empty", - "freq_cold_empty", - "tot_n_onbase", - "median_seconds_onbase", - "onbase_equiv", - "freq_hot_onbase", - "freq_cold_onbase" - ], - "in": "query", - "name": "sort", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "default": "asc", - "description": "Sort direction", - "enum": [ - "asc", - "desc" - ], - "in": "query", - "name": "sort_dir", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": 100, - "description": "Rows per page (1-500)", + "ApiKeyAuth": [] + } + ], + "summary": "Get NDTV article content", + "tags": [ + "NDTV" + ] + } + }, + "/ndtv/author": { + "get": { + "description": "Returns an NDTV author's or news agency's byline profile (name, role, biography, image) and one page of authored news stories from a canonical author URL. Request sequential pages until articles is empty; NDTV does not expose a total count.", + "operationId": "ndtv-author", + "parameters": [ + { + "description": "Canonical NDTV author or agency URL", "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.ndtv.com/authors/ritu-singh-6082" }, { - "default": 0, - "description": "Zero-based row offset", + "default": 1, + "description": "1-based authored news story page; request sequentially until articles is empty", "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", + "maximum": 100, + "minimum": 1, + "name": "page", "type": "integer" } ], @@ -437373,7 +513519,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastPitchTempoResponseDoc" + "$ref": "#/definitions/publicnews.ndtvAuthorResponseDoc" } }, "400": { @@ -437400,99 +513546,131 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Pitch Tempo rows", + "summary": "Get an NDTV author profile", "tags": [ - "MLB" + "NDTV" ] } }, - "/mlb/statcast-pitch-tempo-player": { + "/ndtv/headlines": { "get": { - "description": "Returns game-level Pitch Tempo detail rows for one pitcher or batter. `entity_id` is required, taken from a Pitch Tempo result. `type` is `Pit` (default) or `Bat`, `season_start` and `season_end` run from 2010 to 2026 and default to the current year, and `game_type` is `Regular` (default), `Playoff` or `All`. Rows hold elapsed seconds, counts and frequencies; empty when nothing matches.", - "operationId": "mlb-statcast-pitch-tempo-player", + "description": "Returns the current story cards from one NDTV section page: title, canonical URL, and, where the section shows them, summary, publication time, byline, and image.", + "operationId": "ndtv-headlines", "parameters": [ { - "description": "Numeric entity id from a Pitch Tempo row", - "in": "query", - "name": "entity_id", - "required": true, - "type": "string", - "x-example": "608718" - }, - { - "default": "Pit", - "description": "Entity type", + "description": "NDTV section slug from ndtv-sections", "enum": [ - "Pit", - "Bat" + "latest", + "india", + "world", + "world-india-global", + "world-diaspora", + "opinion", + "spotlight", + "business-news", + "south", + "cities", + "bangalore-news", + "chennai-news", + "delhi-news", + "mumbai-news", + "others-news", + "ahmedabad-news", + "allahabad-news", + "amritsar-news", + "bhopal-news", + "bhubaneshwar-news", + "chandigarh-news", + "ghaziabad-news", + "goa-news", + "gurgaon-news", + "guwahati-news", + "hyderabad-news", + "jaipur-news", + "kanpur-news", + "kolkata-news", + "lucknow-news", + "noida-news", + "patna-news", + "pune-news", + "srinagar-news", + "thiruvananthapuram-news", + "andhra-pradesh-news", + "karnataka-news", + "kerala-news", + "tamil-nadu-news", + "telangana-news", + "education", + "education-exams-news", + "education-school-news", + "education-campus-news", + "education-study-abroad", + "education-latest", + "health", + "entertainment", + "lifestyle", + "food", + "travel", + "auto", + "science", + "offbeat", + "trends", + "feature" ], "in": "query", - "name": "type", - "type": "string" + "name": "section", + "required": true, + "type": "string", + "x-example": "latest" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } }, - { - "default": "2026", - "description": "First season", - "enum": [ - "2010", - "2011", - "2012", - "2013", - "2014", - "2015", - "2016", - "2017", - "2018", - "2019", - "2020", - "2021", - "2022", - "2023", - "2024", - "2025", - "2026" - ], - "in": "query", - "name": "season_start", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": "season_start", - "description": "Last season; must be >= season_start", - "enum": [ - "2010", - "2011", - "2012", - "2013", - "2014", - "2015", - "2016", - "2017", - "2018", - "2019", - "2020", - "2021", - "2022", - "2023", - "2024", - "2025", - "2026" - ], - "in": "query", - "name": "season_end", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get NDTV section headlines", + "tags": [ + "NDTV" + ] + } + }, + "/ndtv/latest-videos": { + "get": { + "description": "Returns one page from NDTV's separate latest-videos feed. This feed is not a category slug; use page sequentially. Results contain metadata only, with no media bytes or player URLs.", + "operationId": "ndtv-latest-videos", + "parameters": [ { - "default": "Regular", - "description": "Game type", - "enum": [ - "Regular", - "Playoff", - "All" - ], + "default": 1, + "description": "1-based latest-video page", "in": "query", - "name": "game_type", - "type": "string" + "maximum": 100, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -437502,7 +513680,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastPitchTempoPlayerResponseDoc" + "$ref": "#/definitions/publicnews.ndtvLatestVideosResponseDoc" } }, "400": { @@ -437529,141 +513707,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a player's Pitch Tempo detail rows", + "summary": "Get NDTV latest videos", "tags": [ - "MLB" + "NDTV" ] } }, - "/mlb/statcast-pitch-timer": { + "/ndtv/live-blog": { "get": { - "description": "Returns the Pitch Timer Infractions table for pitchers, batters, catchers, teams, or opposing teams. Filters for type, season, minimum pitches, and zero-infraction rows are upstream-backed; entity search, table sorting, and pagination are applied locally. The chart ordering is included as view metadata; the endpoint returns table rows, not the SVG chart.", - "operationId": "mlb-statcast-pitch-timer", + "description": "Returns the metadata and ordered updates of an NDTV live blog, given its canonical article `url`. The blog carries title, description, section, authors, image and publish and update times. Each update has its title, URL, body text, timestamps, authors and image when NDTV gives them. A regular article URL is rejected with an error.", + "operationId": "ndtv-live-blog", "parameters": [ { - "default": "Team", - "description": "Entity group", - "enum": [ - "Pit", - "Bat", - "Cat", - "Team", - "Opp" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "default": "2026", - "description": "Season", - "enum": [ - "2023", - "2024", - "2025", - "2026" - ], - "in": "query", - "name": "season", - "type": "string" - }, - { - "default": "1", - "description": "Minimum pitches", - "enum": [ - "1", - "5", - "25", - "50", - "100", - "250", - "500", - "1000" - ], - "in": "query", - "name": "min_pitches", - "type": "string" - }, - { - "default": "0", - "description": "Include entities without infractions", - "enum": [ - "0", - "1" - ], - "in": "query", - "name": "include_zeroes", - "type": "string" - }, - { - "description": "Local case-insensitive entity-name substring filter", - "in": "query", - "name": "q", - "type": "string" - }, - { - "default": "violating", - "description": "Chart ordering metadata", - "enum": [ - "violating", - "violated", - "net", - "ballsAgainst", - "ballsFor", - "strikesAgainst", - "strikesFor", - "division" - ], - "in": "query", - "name": "chart_sort", - "type": "string" - }, - { - "default": "N_time_violations", - "description": "Local table sort field", - "enum": [ - "entity_name", - "N_pitches", - "N_time_violations", - "N_pitcher_pitch_timer", - "N_batter_pitch_timer", - "N_batter_timeout", - "N_catcher_pitch_timer", - "N_defensive_shift", - "rate" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "default": "desc", - "description": "Sort direction", - "enum": [ - "asc", - "desc" - ], - "in": "query", - "name": "sort_dir", - "type": "string" - }, - { - "default": 100, - "description": "Rows per page (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "default": 0, - "description": "Zero-based row offset", + "description": "Canonical NDTV live-blog article URL", "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.ndtv.com/business-news/stock-market-live-updates-12112191" } ], "produces": [ @@ -437673,7 +513734,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastPitchTimerResponseDoc" + "$ref": "#/definitions/publicnews.ndtvLiveBlogResponseDoc" } }, "400": { @@ -437700,40 +513761,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Pitch Timer infraction rows", + "summary": "Get structured updates from an NDTV live blog", "tags": [ - "MLB" + "NDTV" ] } }, - "/mlb/statcast-player-details": { + "/ndtv/live-blogs": { "get": { - "description": "Returns the game-level pitch or batted-ball rows shown when expanding a batter or pitcher row in the standard Statcast leaderboard, including matchup, date, event, exit velocity, launch angle, distance, play id, and video availability.", - "operationId": "mlb-statcast-player-details", + "description": "Returns one page of public NDTV live-blog cards. Pages include only www.ndtv.com live blogs; sister-site cards are excluded. NDTV does not expose a total count or continuation marker; request sequential pages until the upstream reports not found.", + "operationId": "ndtv-live-blogs", "parameters": [ { - "description": "Positive MLB player id from a batter or pitcher row", - "in": "query", - "name": "player_id", - "required": true, - "type": "string", - "x-example": "650333" - }, - { - "default": "batter", - "description": "Player row type", - "enum": [ - "batter", - "pitcher" - ], - "in": "query", - "name": "player_type", - "type": "string" - }, - { - "description": "Season from 2015 through the current season", + "default": 1, + "description": "1-based index page", "in": "query", - "name": "year", + "maximum": 100, + "minimum": 1, + "name": "page", "type": "integer" } ], @@ -437744,7 +513789,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastPlayerDetailsResponseDoc" + "$ref": "#/definitions/publicnews.ndtvLiveBlogsResponseDoc" } }, "400": { @@ -437753,6 +513798,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -437765,72 +513816,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get expanded standard Baseball Savant Statcast player plays", + "summary": "Get NDTV live-blog index", "tags": [ - "MLB" + "NDTV" ] } }, - "/mlb/statcast-rolling": { + "/ndtv/news": { "get": { - "description": "Returns the six embedded Batter/Pitcher rolling-window tables, filtered by metric, role, and plate-appearance window. Each group is sorted by the selected metric delta in the same direction as the first-party page and paginated independently. The upstream page has no season, team, or game-type filters.", - "operationId": "mlb-statcast-rolling", - "parameters": [ - { - "default": "xwoba", - "description": "Displayed metric", - "enum": [ - "xwoba", - "woba", - "ba", - "xba", - "slg", - "xslg" - ], - "in": "query", - "name": "metric", - "type": "string" - }, - { - "description": "Optional player role; omit for both", - "enum": [ - "Batter", - "Pitcher" - ], - "in": "query", - "name": "role", - "type": "string" - }, - { - "description": "Optional rolling plate-appearance window; omit for all", - "enum": [ - "50", - "100", - "250" - ], - "in": "query", - "name": "window_pa", - "type": "string" - }, - { - "default": 100, - "description": "Rows per group (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "default": 0, - "description": "Zero-based row offset per group (0-5000)", - "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" - } - ], + "description": "Returns the stories NDTV published in roughly the last two days, newest first, from its public news sitemap: title, canonical URL, publication time, keywords, and lead image.", + "operationId": "ndtv-news", "produces": [ "application/json" ], @@ -437838,17 +513833,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastRollingResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -437865,197 +513854,32 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Rolling Windows rows", + "summary": "Get NDTV latest stories", "tags": [ - "MLB" + "NDTV" ] } }, - "/mlb/statcast-run-value": { + "/ndtv/search": { "get": { - "description": "Returns batting or pitching Run Value rows from the Swing-Take leaderboard. Filters are cold-replay verified; sorting and pagination are applied locally. The Bat-side R/L selector was verified to leave the embedded rows byte-identical and is omitted. The page's visual charts and CSV export are separate formats.", - "operationId": "mlb-statcast-run-value", + "description": "Returns one page of NDTV's public news topic results (15 story cards per page). Unknown topics return 404. The result page supports no sort or filter parameters.", + "operationId": "ndtv-search", "parameters": [ { - "default": "Batter", - "description": "Row group", - "enum": [ - "Batter", - "Pitcher" - ], - "in": "query", - "name": "group", - "type": "string" - }, - { - "default": "2026", - "description": "Season, All, or Career", - "enum": [ - "All", - "Career", - "2026", - "2025", - "2024", - "2023", - "2022", - "2021", - "2020", - "2019", - "2018", - "2017", - "2016", - "2015", - "2014", - "2013", - "2012", - "2011", - "2010", - "2009", - "2008" - ], - "in": "query", - "name": "year", - "type": "string" - }, - { - "description": "MLB numeric team id; omit for all teams", - "in": "query", - "name": "team", - "type": "string" - }, - { - "default": "q", - "description": "Minimum plate appearances", - "enum": [ - "q", - "10", - "25", - "50", - "75", - "100", - "150", - "200", - "250", - "500", - "600", - "700", - "800", - "900", - "1000", - "1500" - ], - "in": "query", - "name": "min", - "type": "string" - }, - { - "default": "Neutral", - "description": "Run-value method", - "enum": [ - "Neutral", - "Leveraged" - ], - "in": "query", - "name": "leverage", - "type": "string" - }, - { - "default": "All", - "description": "Table view", - "enum": [ - "All", - "Swing-Take", - "Pitch Type", - "Attack Region", - "Bat-side" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "description": "Conditional subtype: Swing/Take; pitch name; or Heart/Shadow/Chase/Waste", - "enum": [ - "Swing", - "Take", - "4-Seam Fastball", - "Changeup", - "Curveball", - "Cutter", - "Knuckleball", - "Screwball", - "Sinker", - "Slider", - "Slurve", - "Split-Finger", - "Sweeper", - "Heart", - "Shadow", - "Chase", - "Waste" - ], - "in": "query", - "name": "sub_type", - "type": "string" - }, - { - "default": "runs_all", - "description": "Local table sort field; supported set varies by view", - "enum": [ - "player_name", - "team_name_abbrev", - "year", - "pa", - "pitches", - "runs_heart", - "runs_shadow", - "runs_chase", - "runs_waste", - "runs_all", - "runs_ff", - "runs_si", - "runs_fc", - "runs_ch", - "runs_fs", - "runs_cu", - "runs_sl", - "runs_st", - "runs_sv", - "runs_kn", - "runs_sc", - "delta_runs" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "default": "desc", - "description": "Sort direction", - "enum": [ - "asc", - "desc" - ], + "description": "Search terms", "in": "query", - "name": "sort_dir", - "type": "string" + "name": "query", + "required": true, + "type": "string", + "x-example": "climate change" }, { - "default": 100, - "description": "Rows per page (1-500)", + "default": 1, + "description": "1-based result page", "in": "query", - "maximum": 500, + "maximum": 100, "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "default": 0, - "description": "Zero-based row offset", - "in": "query", - "maximum": 10000, - "minimum": 0, - "name": "offset", + "name": "page", "type": "integer" } ], @@ -438066,7 +513890,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastRunValueResponseDoc" + "$ref": "#/definitions/publicnews.ndtvSearchResponseDoc" } }, "400": { @@ -438093,271 +513917,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Run Value rows", + "summary": "Search NDTV news stories", "tags": [ - "MLB" + "NDTV" ] } }, - "/mlb/statcast-running-game": { + "/ndtv/sections": { "get": { - "description": "Returns the Running Game table for pitchers, pitching teams, or league. Season/game, hand, runner movement, target base, prior pickoff count, minimum opportunities, team, and team-stint controls are live-verified; named sorting, player/team search, and pagination are applied locally. Per-play records are available from mlb-statcast-running-game-details. The expanded-column toggle returns the same source fields, and the first-party CSV download is not a separate JSON response mode.", - "operationId": "mlb-statcast-running-game", - "parameters": [ - { - "default": "Pit", - "description": "Leaderboard group", - "enum": [ - "Pit", - "Pitching Team", - "League" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "default": "Regular", - "description": "Game scope", - "enum": [ - "Regular", - "Playoff", - "All" - ], - "in": "query", - "name": "game_type", - "type": "string" - }, - { - "default": "all", - "description": "Pitcher's throwing hand", - "enum": [ - "all", - "L", - "R" - ], - "in": "query", - "name": "pitch_hand", - "type": "string" - }, - { - "default": "All", - "description": "Runner movement outcome", - "enum": [ - "All", - "Advance", - "Out", - "Hold" - ], - "in": "query", - "name": "runner_moved", - "type": "string" - }, - { - "default": "All", - "description": "Target base", - "enum": [ - "All", - "2B", - "3B" - ], - "in": "query", - "name": "target_base", - "type": "string" - }, - { - "default": "All", - "description": "Prior pickoff/disengagement count", - "enum": [ - "All", - "0", - "1", - "2", - "3" - ], - "in": "query", - "name": "prior_pk", - "type": "string" - }, - { - "default": "q", - "description": "Minimum pitcher opportunities", - "enum": [ - "q", - "1", - "50", - "100", - "200", - "500", - "1000", - "1500", - "2000" - ], - "in": "query", - "name": "n", - "type": "string" - }, - { - "description": "Inclusive first season", - "enum": [ - 2016, - 2017, - 2018, - 2019, - 2020, - 2021, - 2022, - 2023, - 2024, - 2025, - 2026 - ], - "in": "query", - "name": "season_start", - "type": "integer" - }, - { - "description": "Inclusive last season", - "enum": [ - 2016, - 2017, - 2018, - 2019, - 2020, - 2021, - 2022, - 2023, - 2024, - 2025, - 2026 - ], - "in": "query", - "name": "season_end", - "type": "integer" - }, - { - "default": "no", - "description": "Return separate year rows", - "enum": [ - "yes", - "no" - ], - "in": "query", - "name": "split", - "type": "string" - }, - { - "description": "MLB team id, or split team stints", - "enum": [ - "split", - "108", - "117", - "133", - "141", - "144", - "158", - "138", - "112", - "109", - "119", - "137", - "114", - "136", - "146", - "121", - "120", - "110", - "135", - "143", - "134", - "140", - "139", - "113", - "111", - "115", - "118", - "116", - "142", - "145", - "147" - ], - "in": "query", - "name": "team", - "type": "string" - }, - { - "default": true, - "description": "Restrict pitcher rows to the selected team; only valid with one specific team id", - "in": "query", - "name": "with_team_only", - "type": "boolean" - }, - { - "default": "simple_prevented_on_running_attr", - "description": "Local table sort field", - "enum": [ - "entity_name", - "team_name", - "start_year", - "pitch_hand", - "key_pitch_hand", - "runs_prevented_on_running_attr", - "simple_prevented_on_running_attr", - "net_attr_plus", - "net_attr_minus", - "n_init", - "rate_sbx", - "n_plus", - "n_minus", - "r_sec_minus_prim_lead", - "r_sec_minus_prim_lead_sbx", - "n_sb", - "n_cs", - "n_pk", - "n_bk", - "n_fb", - "r_primary_lead", - "r_secondary_lead", - "r_primary_lead_sbx", - "r_secondary_lead_sbx" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "default": "desc", - "description": "Local sort direction", - "enum": [ - "asc", - "desc" - ], - "in": "query", - "name": "sort_dir", - "type": "string" - }, - { - "description": "Case-insensitive substring of the displayed player or team name", - "in": "query", - "name": "search", - "type": "string" - }, + "description": "Lists the NDTV section slugs accepted by `ndtv-headlines`, each with its display name and page URL. They cover national and world news (`latest`, `india`, `world`), city and state pages such as `mumbai-news` and `kerala-news`, and topics such as `education` and `food`. `spotlight` is NDTV's Premium hub; video, podcasts and sister sites are excluded.", + "operationId": "ndtv-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "default": 100, - "description": "Rows per page, 1-500", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get NDTV sections", + "tags": [ + "NDTV" + ] + } + }, + "/ndtv/video": { + "get": { + "description": "Returns title, description, publication time, duration, and thumbnail metadata from one canonical NDTV video page. It does not fetch or return video media or player URLs.", + "operationId": "ndtv-video", + "parameters": [ { - "description": "Zero-based row offset", + "description": "Canonical NDTV video URL", "in": "query", - "maximum": 10000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.ndtv.com/video/revanth-reddy-under-bjp-fire-over-ram-god-of-rich-shiva-of-poor-remarks-1166049" } ], "produces": [ @@ -438367,7 +513970,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastRunningGameResponseDoc" + "$ref": "#/definitions/publicnews.ndtvVideoResponseDoc" } }, "400": { @@ -438376,6 +513979,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -438388,226 +513997,76 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Running Game leaderboards", + "summary": "Get NDTV video metadata", "tags": [ - "MLB" + "NDTV" ] } }, - "/mlb/statcast-running-game-details": { + "/ndtv/video-categories": { "get": { - "description": "Returns individual attempted-running plays expanded from a pitcher or pitching-team Running Game row. Pass its entity_id and repeat the same table filters. For team-stint rows, pass that row's team id; League rows do not expose a detail feed.", - "operationId": "mlb-statcast-running-game-details", - "parameters": [ - { - "description": "Positive player or team entity id from the Running Game leaderboard", - "in": "query", - "name": "entity_id", - "required": true, - "type": "integer", - "x-example": 695549 - }, - { - "default": "Pit", - "description": "Detail group", - "enum": [ - "Pit", - "Pitching Team" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "default": "Regular", - "description": "Game scope", - "enum": [ - "Regular", - "Playoff", - "All" - ], - "in": "query", - "name": "game_type", - "type": "string" - }, - { - "default": "all", - "description": "Pitcher's throwing hand", - "enum": [ - "all", - "L", - "R" - ], - "in": "query", - "name": "pitch_hand", - "type": "string" - }, - { - "default": "All", - "description": "Runner movement outcome", - "enum": [ - "All", - "Advance", - "Out", - "Hold" - ], - "in": "query", - "name": "runner_moved", - "type": "string" - }, - { - "default": "All", - "description": "Target base", - "enum": [ - "All", - "2B", - "3B" - ], - "in": "query", - "name": "target_base", - "type": "string" - }, - { - "default": "All", - "description": "Prior pickoff/disengagement count", - "enum": [ - "All", - "0", - "1", - "2", - "3" - ], - "in": "query", - "name": "prior_pk", - "type": "string" - }, - { - "default": "q", - "description": "Minimum pitcher opportunities", - "enum": [ - "q", - "1", - "50", - "100", - "200", - "500", - "1000", - "1500", - "2000" - ], - "in": "query", - "name": "n", - "type": "string" - }, - { - "description": "Inclusive first season", - "enum": [ - 2016, - 2017, - 2018, - 2019, - 2020, - 2021, - 2022, - 2023, - 2024, - 2025, - 2026 - ], - "in": "query", - "name": "season_start", - "type": "integer" - }, - { - "description": "Inclusive last season", - "enum": [ - 2016, - 2017, - 2018, - 2019, - 2020, - 2021, - 2022, - 2023, - 2024, - 2025, - 2026 - ], - "in": "query", - "name": "season_end", - "type": "integer" - }, + "description": "Returns the live-verified NDTV-hosted category slugs accepted by ndtv-videos. Categories hosted on sister domains, Shorts, and unavailable Faith are excluded.", + "operationId": "ndtv-video-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.ndtvVideoCategoriesResponseDoc" + } + } + }, + "security": [ { - "default": "no", - "description": "Return separate year rows", - "enum": [ - "yes", - "no" - ], - "in": "query", - "name": "split", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get NDTV video categories", + "tags": [ + "NDTV" + ] + } + }, + "/ndtv/videos": { + "get": { + "description": "Returns one page of metadata cards from a supported NDTV-hosted video category. Use ndtv-video-categories to discover the complete supported category set; request pages sequentially. This returns no media bytes or player URLs.", + "operationId": "ndtv-videos", + "parameters": [ { - "description": "One MLB team id; use the row's team id for split-team rows", + "description": "NDTV video category slug from ndtv-video-categories", "enum": [ - "108", - "117", - "133", - "141", - "144", - "158", - "138", - "112", - "109", - "119", - "137", - "114", - "136", - "146", - "121", - "120", - "110", - "135", - "143", - "134", - "140", - "139", - "113", - "111", - "115", - "118", - "116", - "142", - "145", - "147" + "news", + "business", + "entertainment", + "auto", + "exclusive", + "features", + "environment", + "fashion", + "travel", + "elections", + "comedy", + "property", + "art", + "beauty", + "lifestyle", + "tech360" ], "in": "query", - "name": "team", - "type": "string" - }, - { - "default": true, - "description": "Restrict player rows to selected team; only valid with a specific team and Pit type", - "in": "query", - "name": "with_team_only", - "type": "boolean" + "name": "category", + "required": true, + "type": "string", + "x-example": "news" }, { - "default": 100, - "description": "Play rows per page, 1-500", + "default": 1, + "description": "1-based category result page", "in": "query", - "maximum": 500, + "maximum": 100, "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "description": "Zero-based play-row offset", - "in": "query", - "maximum": 100000, - "minimum": 0, - "name": "offset", + "name": "page", "type": "integer" } ], @@ -438618,7 +514077,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastRunningGameDetailsResponseDoc" + "$ref": "#/definitions/publicnews.ndtvVideosResponseDoc" } }, "400": { @@ -438627,6 +514086,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -438639,180 +514104,52 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Running Game play details", + "summary": "Get videos from an NDTV category", "tags": [ - "MLB" + "NDTV" ] } }, - "/mlb/statcast-sprint-speed": { + "/netshort/browse": { "get": { - "description": "Returns player Sprint Speed rows from the Baseball Savant leaderboard. The source filters season range, position, and minimum competitive runs; team filtering and sorting are applied locally. Use mlb_discovery for every closed value set.", - "operationId": "mlb-statcast-sprint-speed", + "consumes": [ + "application/json" + ], + "description": "Returns one page of NetShort's (netshort.com) all-episodes browse index: 10 titles per page over the same 11,575-title catalogue as netshort-plots, with the site's own totalCount. It is the same library in the site's browse ordering and a different page size, so it overlaps netshort-plots almost completely — use netshort-plots for coverage and this endpoint when the browse order is what you want; do not merge the two expecting disjoint sets. Pages are 1-based; page 0 is rejected and a page past the end is a 404.", + "operationId": "netshort-browse", "parameters": [ { - "default": "2026", - "description": "First season", - "enum": [ - "2015", - "2016", - "2017", - "2018", - "2019", - "2020", - "2021", - "2022", - "2023", - "2024", - "2025", - "2026" - ], - "in": "query", - "name": "min_season", - "type": "string" - }, - { - "default": "min_season", - "description": "Last season; must be >= min_season", - "enum": [ - "2015", - "2016", - "2017", - "2018", - "2019", - "2020", - "2021", - "2022", - "2023", - "2024", - "2025", - "2026" - ], - "in": "query", - "name": "max_season", - "type": "string" - }, - { - "description": "Position code; omitted is All Positions", - "enum": [ - "all", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10" - ], - "in": "query", - "name": "position", - "type": "string" - }, - { - "description": "MLB team id", - "enum": [ - "108", - "117", - "133", - "141", - "144", - "158", - "138", - "112", - "109", - "119", - "137", - "114", - "136", - "146", - "121", - "120", - "110", - "135", - "143", - "134", - "140", - "139", - "113", - "111", - "115", - "118", - "116", - "142", - "145", - "147" - ], - "in": "query", - "name": "team_id", - "type": "string" - }, - { - "default": "10", - "description": "Minimum competitive runs", - "enum": [ - "0", - "5", - "10", - "25", - "50", - "75", - "100", - "150", - "200", - "250" - ], - "in": "query", - "name": "minimum_runs", - "type": "string" - }, - { - "default": "sprint_speed", - "description": "Local sort field", - "enum": [ - "player", - "team", - "position", - "age", - "competitive_runs", - "bolts", - "home_to_first", - "sprint_speed" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "default": "desc", - "description": "Sort direction", + "description": "Locale, defaults to en", "enum": [ - "asc", - "desc" + "en", + "ar", + "cn", + "de", + "es", + "fr", + "hi", + "id", + "it", + "ja", + "ko", + "ms", + "pt", + "th", + "tr", + "vi", + "zh" ], "in": "query", - "name": "sort_dir", - "type": "string" - }, - { - "default": 100, - "description": "Rows per page (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "language", + "type": "string", + "x-example": "en" }, { - "default": 0, - "description": "Zero-based row offset", + "description": "1-based page of 10 titles, defaults to 1", "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -438822,7 +514159,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastSprintSpeedResponseDoc" + "$ref": "#/definitions/netshort.browseResponseDoc" } }, "400": { @@ -438831,6 +514168,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -438843,123 +514192,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Sprint Speed player rows", + "summary": "List one page of NetShort's browse index", "tags": [ - "MLB" + "NetShort" ] } }, - "/mlb/statcast-sprint-speed-teams": { + "/netshort/genres": { "get": { - "description": "Returns team-level Sprint Speed rows. Season is selected upstream; team filtering and sorting are applied locally because the first-party page embeds every team before its client-side filter. Use mlb_discovery for all accepted seasons, teams, and sort fields.", - "operationId": "mlb-statcast-sprint-speed-teams", + "consumes": [ + "application/json" + ], + "description": "Returns NetShort's (netshort.com) label taxonomy as the site's own plot index carries it: four navigation tabs (all-plots, story, characters, settings) and every label value underneath them, each with its labelId, labelName, site path and play count. This is the discovery endpoint for netshort-label, so a caller never has to guess a label id. The capture held 196 labels over the four tabs (146 distinct ids), and three tabs end at exactly 50: that is the upstream's own per-tab cap, not a truncation here, so capped reports it and the list must not be described as provably exhaustive. Labels here are the type-2 id space; the labels attached to a card are a different, type-1 vocabulary.", + "operationId": "netshort-genres", "parameters": [ { - "default": "2026", - "description": "Season or all seasons", - "enum": [ - "2015", - "2016", - "2017", - "2018", - "2019", - "2020", - "2021", - "2022", - "2023", - "2024", - "2025", - "2026", - "all" - ], - "in": "query", - "name": "season", - "type": "string" - }, - { - "description": "Optional first-party team selector abbreviation", - "enum": [ - "LAA", - "HOU", - "OAK", - "TOR", - "ATL", - "MIL", - "STL", - "CHC", - "ARI", - "LAD", - "SF", - "CLE", - "SEA", - "MIA", - "NYM", - "WSH", - "BAL", - "SD", - "PHI", - "PIT", - "TEX", - "TB", - "BOS", - "CIN", - "COL", - "KC", - "DET", - "MIN", - "CWS", - "NYY" - ], - "in": "query", - "name": "team", - "type": "string" - }, - { - "default": "average_sprint_speed", - "description": "Local sort field", - "enum": [ - "season", - "team", - "players", - "competitive_runs", - "average_sprint_speed", - "fastest_sprint_speed", - "slowest_sprint_speed", - "bolts", - "average_home_to_first" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "default": "desc", - "description": "Sort direction", + "description": "Locale, defaults to en", "enum": [ - "asc", - "desc" + "en", + "ar", + "cn", + "de", + "es", + "fr", + "hi", + "id", + "it", + "ja", + "ko", + "ms", + "pt", + "th", + "tr", + "vi", + "zh" ], "in": "query", - "name": "sort_dir", - "type": "string" - }, - { - "default": 100, - "description": "Rows per page (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "default": 0, - "description": "Zero-based row offset", - "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -438969,7 +514240,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastSprintSpeedTeamsResponseDoc" + "$ref": "#/definitions/netshort.genresResponseDoc" } }, "400": { @@ -438978,6 +514249,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -438990,260 +514267,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Sprint Speed team rows", + "summary": "List NetShort's label taxonomy", "tags": [ - "MLB" + "NetShort" ] } }, - "/mlb/statcast-swing-path": { + "/netshort/home": { "get": { - "description": "Returns batter, batting-team, or league Swing Path and Attack Angle rows with the first-party season, game, swing, team, date, side, contact, hard-hit, attack-zone, and pitcher-hand filters. Use mlb_discovery for exact values.", - "operationId": "mlb-statcast-swing-path", + "consumes": [ + "application/json" + ], + "description": "Returns the NetShort (netshort.com) home page's five curated shelves (Trending Now, New Releases, Highly Recommended, Exclusive Originals and one editorial shelf), each with its display name, its \"see all\" link and 11-12 titles. Every title carries its shortPlayId, library id, name, episode path, cover, synopsis, episode count, finished flag and labels. Pass language to read a different locale's catalogue: the site offers 17 locales and each is a separate library, so shelves and ids differ per locale. Take a title id from any card and pass it to netshort-title; take a label id and name from netshort-genres for netshort-label.", + "operationId": "netshort-home", "parameters": [ { - "default": "batter", - "description": "Row type", - "enum": [ - "batter", - "batting-team", - "league" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "default": "2026", - "description": "First season", - "enum": [ - "2023", - "2024", - "2025", - "2026" - ], - "in": "query", - "name": "season_start", - "type": "string" - }, - { - "default": "season_start", - "description": "Last season; must be >= season_start", - "enum": [ - "2023", - "2024", - "2025", - "2026" - ], - "in": "query", - "name": "season_end", - "type": "string" - }, - { - "default": "Regular", - "description": "Game type", - "enum": [ - "Any", - "Exhibition", - "Playoff", - "Regular" - ], - "in": "query", - "name": "game_type", - "type": "string" - }, - { - "default": "q", - "description": "Minimum swing threshold", - "enum": [ - "q", - "1", - "5", - "10", - "25", - "50", - "100", - "200", - "500", - "1000" - ], - "in": "query", - "name": "min_swings", - "type": "string" - }, - { - "default": "1", - "description": "Minimum swings per group", - "enum": [ - "1", - "5", - "10", - "25", - "50", - "100", - "200", - "500", - "1000" - ], - "in": "query", - "name": "min_group_swings", - "type": "string" - }, - { - "description": "Optional MLB team id", - "enum": [ - "108", - "109", - "110", - "111", - "112", - "113", - "114", - "115", - "116", - "117", - "118", - "119", - "120", - "121", - "133", - "134", - "135", - "136", - "137", - "138", - "139", - "140", - "141", - "142", - "143", - "144", - "145", - "146", - "147", - "158" - ], - "in": "query", - "name": "team_id", - "type": "string" - }, - { - "description": "Optional range start in YYYY-MM-DD", - "in": "query", - "name": "date_start", - "type": "string" - }, - { - "description": "Optional range end in YYYY-MM-DD", - "in": "query", - "name": "date_end", - "type": "string" - }, - { - "description": "Batter side", - "enum": [ - "L", - "R" - ], - "in": "query", - "name": "bat_side", - "type": "string" - }, - { - "description": "Contact type", - "enum": [ - "2", - "4", - "9" - ], - "in": "query", - "name": "contact_type", - "type": "string" - }, - { - "description": "Hard-hit filter", - "enum": [ - "1", - "0" - ], - "in": "query", - "name": "is_hard_hit", - "type": "string" - }, - { - "description": "Attack zone", - "enum": [ - "0", - "1", - "1.1", - "2", - "3" - ], - "in": "query", - "name": "attack_zone", - "type": "string" - }, - { - "description": "Pitcher hand", - "enum": [ - "L", - "R" - ], - "in": "query", - "name": "pitch_hand", - "type": "string" - }, - { - "default": "avg_sweetspot_speed_mph", - "description": "Local sort field", - "enum": [ - "name", - "team_name", - "avg_sweetspot_speed_mph", - "avg_plane_vertical_angle", - "attack_angle", - "attack_direction_pullopp", - "rate_ideal_attack_angle", - "avg_intercept_y_vs_plate", - "avg_intercept_y_vs_batter", - "avg_batter_y_position", - "avg_batter_x_position", - "avg_foot_sep0", - "avg_foot_angle0", - "n_swings" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "default": "desc", - "description": "Sort direction", + "description": "Locale, defaults to en (the un-prefixed default)", "enum": [ - "asc", - "desc" + "en", + "ar", + "cn", + "de", + "es", + "fr", + "hi", + "id", + "it", + "ja", + "ko", + "ms", + "pt", + "th", + "tr", + "vi", + "zh" ], "in": "query", - "name": "sort_dir", - "type": "string" - }, - { - "default": 100, - "description": "Rows per page (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "default": 0, - "description": "Zero-based row offset", - "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "language", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -439253,7 +514315,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastSwingPathResponseDoc" + "$ref": "#/definitions/netshort.homeResponseDoc" } }, "400": { @@ -439262,8 +514324,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -439280,419 +514342,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Swing Path and Attack Angle rows", + "summary": "Get NetShort's home shelves", "tags": [ - "MLB" + "NetShort" ] } }, - "/mlb/statcast-swing-timing": { + "/netshort/label": { "get": { - "description": "Returns batter, batting-team, pitcher, pitching-team, or league rows with the page's season, game type, pitch-group, split, team, date, swing, contact, zone, pitch hand/type, count, timing-axis, and timing-flag filters. Sorting is local. Use mlb_discovery for exact values.", - "operationId": "mlb-statcast-swing-timing", + "consumes": [ + "application/json" + ], + "description": "Returns one page of one NetShort (netshort.com) label listing: 24 titles per page with the site's own totalCount for that label, in the same card shape as netshort-plots. Take label_id and name from netshort-genres — the site's own label path is /drama/--2 and carries both, so a type-2 label id without its name is rejected locally. Label pages are English-only in practice regardless of the site's locale prefixes. Pages are 1-based; page 0 is rejected and a page past the end is a 404.", + "operationId": "netshort-label", "parameters": [ { - "default": "batter", - "description": "Row type", - "enum": [ - "batter", - "batting-team", - "pitcher", - "pitching-team", - "league" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "collectionFormat": "multi", - "description": "One or more seasons", - "in": "query", - "items": { - "enum": [ - "2023", - "2024", - "2025", - "2026" - ], - "type": "string" - }, - "name": "seasons", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "One or more game types", - "in": "query", - "items": { - "enum": [ - "R", - "A", - "F", - "D", - "L", - "W" - ], - "type": "string" - }, - "name": "game_types", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "One or more split dimensions", - "in": "query", - "items": { - "enum": [ - "api_pitch_type_group03", - "api_pitch_type_group09", - "api_game_date_month_text", - "bat_contact_code", - "game_type", - "is_hit_into_play_hardhit", - "is_best_speed", - "timing_x_tiedupflail", - "timing_y_earlylate", - "timing_z_overunder", - "pitch_hand", - "bat_side", - "is_pre_ball_count_3", - "is_pre_strike_count_2", - "pitchzone_height_code", - "is_starter_pitcher" - ], - "type": "string" - }, - "name": "splits", - "type": "array" - }, - { - "default": "q", - "description": "Minimum swing threshold", - "enum": [ - "q", - "1", - "5", - "10", - "25", - "50", - "100", - "200", - "500", - "1000" - ], - "in": "query", - "name": "min_swings", - "type": "string" - }, - { - "default": "1", - "description": "Minimum swings per split group", - "enum": [ - "1", - "5", - "10", - "25", - "50", - "100", - "200", - "500", - "1000" - ], - "in": "query", - "name": "min_split", - "type": "string" - }, - { - "default": "1", - "description": "Split years into separate rows", - "enum": [ - "1", - "0" - ], - "in": "query", - "name": "split_year", - "type": "string" - }, - { - "collectionFormat": "multi", - "description": "One or more MLB team ids", - "in": "query", - "items": { - "enum": [ - "108", - "109", - "110", - "111", - "112", - "113", - "114", - "115", - "116", - "117", - "118", - "119", - "120", - "121", - "133", - "134", - "135", - "136", - "137", - "138", - "139", - "140", - "141", - "142", - "143", - "144", - "145", - "146", - "147", - "158" - ], - "type": "string" - }, - "name": "teams", - "type": "array" - }, - { - "description": "Optional range start in YYYY-MM-DD", - "in": "query", - "name": "date_start", - "type": "string" - }, - { - "description": "Optional range end in YYYY-MM-DD", - "in": "query", - "name": "date_end", - "type": "string" - }, - { - "description": "Batter side", - "enum": [ - "L", - "R" - ], - "in": "query", - "name": "bat_side", - "type": "string" - }, - { - "description": "Contact type", - "enum": [ - "2", - "4", - "9" - ], - "in": "query", - "name": "contact_type", - "type": "string" - }, - { - "description": "Attack zone", - "enum": [ - "0", - "1", - "1.1", - "2", - "3" - ], - "in": "query", - "name": "attack_zone", - "type": "string" - }, - { - "description": "Pitcher hand", - "enum": [ - "L", - "R" - ], - "in": "query", - "name": "pitch_hand", - "type": "string" - }, - { - "collectionFormat": "multi", - "description": "One or more pitch type codes", - "in": "query", - "items": { - "enum": [ - "FF", - "SI", - "FC", - "CH", - "FS", - "FO", - "SC", - "CU", - "SL", - "ST", - "SV", - "KN" - ], - "type": "string" - }, - "name": "pitch_types", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "One or more ball-strike counts", - "in": "query", - "items": { - "enum": [ - "00", - "01", - "02", - "10", - "11", - "12", - "20", - "21", - "22", - "30", - "31", - "32" - ], - "type": "string" - }, - "name": "counts", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Tied-up, centered, or flailed", - "in": "query", - "items": { - "enum": [ - "Tiedup", - "Centered", - "Flail" - ], - "type": "string" - }, - "name": "swing_timing_x", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Early, on-time, or late", - "in": "query", - "items": { - "enum": [ - "Early", - "OnTime", - "Late" - ], - "type": "string" - }, - "name": "swing_timing_y", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Under, lined-up, or over", - "in": "query", - "items": { - "enum": [ - "Under", - "Linedup", - "Over" - ], - "type": "string" - }, - "name": "swing_timing_z", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Positive timing flags", - "in": "query", - "items": { - "enum": [ - "is_timing_xyz_flawed", - "is_timing_xyz_perfect" - ], - "type": "string" - }, - "name": "flags", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Excluded timing flags", - "in": "query", - "items": { - "enum": [ - "is_timing_xyz_flawed", - "is_timing_xyz_perfect" - ], - "type": "string" - }, - "name": "not_flags", - "type": "array" - }, - { - "default": "n_swings", - "description": "Local sort field", - "enum": [ - "name", - "team_name", - "pitch_hand_type", - "bat_side_type", - "n_swings", - "competitive_swings", - "strikes_swinging", - "miss_distance", - "flails", - "centers", - "tied_ups", - "earlys", - "on_times", - "lates", - "unders", - "lined_ups", - "overs", - "delta_run_exp", - "whiff_rate", - "competitive_percent", - "perfect_percent", - "flawed_percent" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "default": "desc", - "description": "Sort direction", - "enum": [ - "asc", - "desc" - ], + "description": "Type-2 labelId from netshort-genres", "in": "query", - "name": "sort_dir", - "type": "string" + "name": "label_id", + "required": true, + "type": "string", + "x-example": "2117544125728063490" }, { - "default": 100, - "description": "Rows per page (1-500)", + "description": "labelName of the same label from netshort-genres; it is part of the site's own path", "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "name", + "required": true, + "type": "string", + "x-example": "Revenge" }, { - "default": 0, - "description": "Zero-based row offset", + "description": "1-based page of 24 titles, defaults to 1", "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -439702,7 +514387,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastSwingTimingResponseDoc" + "$ref": "#/definitions/netshort.labelResponseDoc" } }, "400": { @@ -439717,6 +514402,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -439729,363 +514420,273 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Swing Timing and Miss Distance rows", + "summary": "List one page of a NetShort label listing", "tags": [ - "MLB" + "NetShort" ] } }, - "/mlb/statcast-swing-timing-details": { + "/netshort/plots": { "get": { - "description": "Returns the four anonymous per-swing detail arrays expanded from a batter or pitcher Swing Timing row. Pass the row_id uniqueId from mlb-statcast-swing-timing and repeat its type and table filters so split values can be mapped to the upstream detail query.", - "operationId": "mlb-statcast-swing-timing-details", + "consumes": [ + "application/json" + ], + "description": "Returns one page of NetShort's (netshort.com) complete catalogue in the site's plot-index order: 24 titles per page with the site's own totalCount (11,575 titles in the 2026-11-07 capture), page number and page size. Use it to walk the whole library; consecutive pages do not overlap. Pages are 1-based path segments: page 1 is the canonical un-suffixed URL and page 0 is rejected locally. A page past the end answers HTTP 404 upstream, so has-next is only ever a full-page signal — walk until a 404. Pass language for one of the site's 17 locale catalogues.", + "operationId": "netshort-plots", "parameters": [ { - "description": "Unique row id from mlb-statcast-swing-timing, including any selected split values", - "in": "query", - "name": "row_id", - "required": true, - "type": "string", - "x-example": "666018_FF_2026" - }, - { - "description": "Player row type", + "description": "Locale, defaults to en", "enum": [ - "batter", - "pitcher" + "en", + "ar", + "cn", + "de", + "es", + "fr", + "hi", + "id", + "it", + "ja", + "ko", + "ms", + "pt", + "th", + "tr", + "vi", + "zh" ], "in": "query", - "name": "type", - "required": true, + "name": "language", "type": "string", - "x-example": "batter" - }, - { - "collectionFormat": "csv", - "description": "Season filters", - "in": "query", - "items": { - "enum": [ - "2023", - "2024", - "2025", - "2026" - ], - "type": "string" - }, - "name": "seasons", - "type": "array" + "x-example": "en" }, { - "collectionFormat": "csv", - "description": "Game-type filters", + "description": "1-based page of 24 titles, defaults to 1; a page past the end is a 404", "in": "query", - "items": { - "enum": [ - "R", - "A", - "F", - "D", - "L", - "W" - ], - "type": "string" - }, - "name": "game_types", - "type": "array" + "name": "page", + "type": "integer", + "x-example": 1 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/netshort.plotsResponseDoc" + } }, - { - "collectionFormat": "csv", - "description": "Split dimensions", - "in": "query", - "items": { - "enum": [ - "api_pitch_type_group03", - "api_pitch_type_group09", - "api_game_date_month_text", - "bat_contact_code", - "game_type", - "is_hit_into_play_hardhit", - "is_best_speed", - "timing_x_tiedupflail", - "timing_y_earlylate", - "timing_z_overunder", - "pitch_hand", - "bat_side", - "is_pre_ball_count_3", - "is_pre_strike_count_2", - "pitchzone_height_code", - "is_starter_pitcher" - ], - "type": "string" - }, - "name": "splits", - "type": "array" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "default": "q", - "description": "Minimum swings", - "enum": [ - "q", - "1", - "5", - "10", - "25", - "50", - "100", - "200", - "500", - "1000" - ], - "in": "query", - "name": "min_swings", - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "default": "1", - "description": "Minimum group swings", - "enum": [ - "1", - "5", - "10", - "25", - "50", - "100", - "200", - "500", - "1000" - ], - "in": "query", - "name": "min_split", - "type": "string" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": "1", - "description": "Include year in the row grouping", - "enum": [ - "0", - "1" - ], - "in": "query", - "name": "split_year", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "List one page of NetShort's whole catalogue", + "tags": [ + "NetShort" + ] + } + }, + "/netshort/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of NetShort (netshort.com) keyword search results: each match's shortPlayId, library id, name with the upstream's highlight markup stripped, episode path, cover, synopsis, episode count and labels. This is the platform's only real search — its /search page ships just the site shell — and it is reached through the site's own encrypted XHR, with the key material read from the site's public bundle at runtime and never pinned. The search is fuzzy, not exact: an unmatched keyword still returns token matches, so treat results as approximate and never read an empty result as \"no such title\" (only an empty query is empty, and that is rejected locally). Pages are not a strict partition either — page 2 repeated 2 of page 1's 15 ids in the 2026-11-07 measurement — so dedupe by id when accumulating pages. The upstream applies a floor of 15 items on page 1, so a response can carry more results than page_size. language selects the locale and results are locale-specific.", + "operationId": "netshort-search", + "parameters": [ { - "collectionFormat": "csv", - "description": "MLB team ids", + "description": "Keyword to search for", "in": "query", - "items": { - "enum": [ - "108", - "117", - "133", - "141", - "144", - "158", - "138", - "112", - "109", - "119", - "137", - "114", - "136", - "146", - "121", - "120", - "110", - "135", - "143", - "134", - "113", - "111", - "115", - "118", - "116", - "142", - "145", - "147" - ], - "type": "string" - }, - "name": "teams", - "type": "array" + "name": "query", + "required": true, + "type": "string", + "x-example": "love" }, { - "description": "Filter start date in YYYY-MM-DD format", + "description": "1-based result page, defaults to 1", "in": "query", - "name": "date_start", - "type": "string" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Filter end date in YYYY-MM-DD format", + "description": "Results per page, 1-50, default 10; the upstream floors page 1 at 15 items", "in": "query", - "name": "date_end", - "type": "string" + "name": "page_size", + "type": "integer", + "x-example": 10 }, { - "description": "Batter side", + "description": "Locale sent as content-language; results are locale-specific", "enum": [ - "L", - "R" + "en_US", + "ja_JP" ], "in": "query", - "name": "bat_side", - "type": "string" + "name": "language", + "type": "string", + "x-example": "en_US" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/netshort.searchResponseDoc" + } }, - { - "description": "Contact type", - "enum": [ - "2", - "4", - "9" - ], - "in": "query", - "name": "contact_type", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Attack zone", - "enum": [ - "0", - "1", - "1.1", - "2", - "3" - ], - "in": "query", - "name": "attack_zone", - "type": "string" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Pitcher hand", - "enum": [ - "L", - "R" - ], - "in": "query", - "name": "pitch_hand", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Search NetShort's catalogue by keyword", + "tags": [ + "NetShort" + ] + } + }, + "/netshort/title": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one NetShort (netshort.com) title: shortPlayId, library id, name, canonical episode path, cover, synopsis, label list, the site's own like and chase counters (display strings such as 282.6K, not exact integers), publish time, delisted flag, and the episode window the page carries (40 videoEpisodeInfos with episode id, number, lock flag and cover). has_more_episodes reports a full 40-episode window, so a longer series continues past it. An unknown title id is a 404. Play URLs and the site's shortPlayAddress fields are never returned.", + "operationId": "netshort-title", + "parameters": [ { - "collectionFormat": "csv", - "description": "Pitch type codes", + "description": "shortPlayId from any catalogue card or search result", "in": "query", - "items": { - "enum": [ - "FF", - "SI", - "FC", - "CH", - "FS", - "FO", - "SC", - "CU", - "SL", - "ST", - "SV", - "KN" - ], - "type": "string" - }, - "name": "pitch_types", - "type": "array" + "name": "title_id", + "required": true, + "type": "string", + "x-example": "2112388670085812226" }, { - "collectionFormat": "csv", - "description": "Ball-strike counts", + "description": "Optional slug from the card URL (the text between /episode/ and the trailing -id); the id resolves the route", "in": "query", - "items": { - "enum": [ - "00", - "01", - "02", - "10", - "11", - "12", - "20", - "21", - "22", - "30", - "31", - "32" - ], - "type": "string" - }, - "name": "counts", - "type": "array" + "name": "slug", + "type": "string", + "x-example": "the-dragons-silly-captive" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/netshort.titleResponseDoc" + } }, - { - "collectionFormat": "csv", - "description": "Tied-up/flail axis values", - "in": "query", - "items": { - "enum": [ - "Tiedup", - "Centered", - "Flail" - ], - "type": "string" - }, - "name": "swing_timing_x", - "type": "array" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "collectionFormat": "csv", - "description": "Early/late axis values", - "in": "query", - "items": { - "enum": [ - "Early", - "OnTime", - "Late" - ], - "type": "string" - }, - "name": "swing_timing_y", - "type": "array" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "collectionFormat": "csv", - "description": "Over/under axis values", - "in": "query", - "items": { - "enum": [ - "Under", - "Linedup", - "Over" - ], - "type": "string" - }, - "name": "swing_timing_z", - "type": "array" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "collectionFormat": "csv", - "description": "Positive swing timing flags", - "in": "query", - "items": { - "enum": [ - "is_timing_xyz_flawed", - "is_timing_xyz_perfect" - ], - "type": "string" - }, - "name": "flags", - "type": "array" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get one NetShort title with its episode window", + "tags": [ + "NetShort" + ] + } + }, + "/netshort/toplist": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one of NetShort's (netshort.com) four fixed toplist boards: twelve titles with the same card shape as the other catalogue endpoints and no paging. The four boards — trending-short-dramas, new-short-drama-releases, recommended-short-dramas, exclusive-original-short-dramas — are the complete set from the site's own navigation, and each board's titles also appear as a home shelf, so this is the cheaper single-board read. An unknown board is rejected locally.", + "operationId": "netshort-toplist", + "parameters": [ { - "collectionFormat": "csv", - "description": "Excluded swing timing flags", + "description": "Board slug", + "enum": [ + "trending-short-dramas", + "new-short-drama-releases", + "recommended-short-dramas", + "exclusive-original-short-dramas" + ], "in": "query", - "items": { - "enum": [ - "is_timing_xyz_flawed", - "is_timing_xyz_perfect" - ], - "type": "string" - }, - "name": "not_flags", - "type": "array" + "name": "board", + "required": true, + "type": "string", + "x-example": "trending-short-dramas" } ], "produces": [ @@ -440095,7 +514696,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastSwingTimingDetailsResponseDoc" + "$ref": "#/definitions/netshort.toplistResponseDoc" } }, "400": { @@ -440104,8 +514705,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -440122,22 +514723,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Swing Timing player details", + "summary": "List one NetShort toplist board", "tags": [ - "MLB" + "NetShort" ] } }, - "/mlb/statcast-top-performers": { + "/news18/article": { "get": { - "description": "Returns every current Top Performers card for the selected season, including batter and pitcher rankings across batting, batted-ball, expected-stat, fielding, catching, running, and pitch-metric views. The page exposes a season selector but no per-card filters; use the specialist Statcast endpoints for complete filtered leaderboards.", - "operationId": "mlb-statcast-top-performers", + "description": "Returns a News18 article by canonical `url` in the form `/
/-.html`, optionally with a subsection. The response has title, description, authors, lead image, publication and update times, a `paywalled` flag and body `paragraphs`. `section` is the article's own category, so it can be a subsection such as `business/markets` that `news18-sections` does not list.", + "operationId": "news18-article", "parameters": [ { - "description": "Season from 2015 through the current season; defaults to the current season", + "description": "Canonical News18 article URL", "in": "query", - "name": "year", - "type": "integer" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.news18.com/india/example-article-slug-10350678.html" } ], "produces": [ @@ -440147,7 +514750,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastTopPerformersResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -440174,180 +514777,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Top Performers", + "summary": "Get News18 article content", "tags": [ - "MLB" + "News18" ] } }, - "/mlb/statcast-year-to-year": { + "/news18/author": { "get": { - "description": "Returns one of Baseball Savant's Year-to-Year Changes tables for batters, pitchers, batting teams, or pitching teams. Select one of the live statistic types and comparison start years; the page data contains available yearly values and differences. Table sorting and pagination are applied locally. Use mlb_discovery for all accepted group, type, and year values.", - "operationId": "mlb-statcast-year-to-year", + "description": "Returns a News18 author profile from a required `url` in the form `https://www.news18.com/byline/.html`. The response has `name`, `biography`, `image_url`, `social_links` (whichever of website, X/Twitter, Facebook, Instagram, YouTube and LinkedIn are set) and recent articles with `published_at` in RFC3339 UTC. Wire and staff bylines often have no bio or links.", + "operationId": "news18-author", "parameters": [ { - "default": "Batter", - "description": "Table group", - "enum": [ - "Batter", - "Pitcher", - "Batter Team", - "Pitcher Team" - ], - "in": "query", - "name": "group", - "type": "string" - }, - { - "default": "hard_hit_percent", - "description": "Statistic type", - "enum": [ - "ba", - "xba", - "obp", - "xobp", - "slg", - "xslg", - "iso", - "xiso", - "babip", - "woba", - "xwoba", - "wobacon", - "xwobacon", - "bacon", - "xbacon", - "hard_hit_percent", - "exit_velocity_avg", - "sweet_spot_percent", - "barrel_batted_rate", - "launch_angle_avg", - "avg_swing_speed", - "attack_angle", - "ideal_angle_rate", - "attack_direction", - "vertical_swing_path", - "avg_swing_length", - "fastball_velo", - "breaking_velo", - "offspeed_velo", - "barrels", - "popups_percent", - "flyballs_percent", - "linedrives_percent", - "groundballs_percent", - "pull_percent", - "straightaway_percent", - "opposite_percent", - "poorlyweak_percent", - "pull_percent_airballs", - "poorlytopped_percent", - "poorlyunder_percent", - "flareburner_percent", - "solidcontact_percent", - "hr_flyballs_percent", - "popups", - "flyballs", - "linedrives", - "groundballs", - "in_zone_percent", - "out_zone_percent", - "edge_percent", - "z_swing_percent", - "oz_swing_percent", - "iz_contact_percent", - "oz_contact_percent", - "whiff_percent", - "f_strike_percent", - "f_swing_percent", - "swing_percent", - "meatball_swing_percent", - "meatball_percent", - "z_swing_miss_percent", - "oz_swing_miss_percent", - "in_zone", - "out_zone", - "edge", - "in_zone_swing", - "out_zone_swing", - "in_zone_swing_miss", - "out_zone_swing_miss", - "pitch_count", - "pa", - "ab", - "hit", - "single", - "double", - "triple", - "home_run", - "walk", - "strikeout", - "k_percent", - "bb_percent", - "hbp", - "batted_ball", - "pitch_usage_fastball", - "pitch_usage_offspeed", - "pitch_usage_breaking", - "pitch_count_fastball", - "pitch_count_offspeed", - "pitch_count_breaking" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "default": "2025", - "description": "Comparison start year; compares this season with the following year", - "enum": [ - "2025", - "2024", - "2023", - "2022", - "2021", - "2020", - "2019", - "2018", - "2017" - ], - "in": "query", - "name": "year", - "type": "string" - }, - { - "description": "Local sortable column; name_display_last_first, year_YYYY, TYPE_YYYY, or TYPE_diff_YYYY. Defaults to the selected metric's difference for the selected comparison year.", - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Sort direction; defaults to Batter descending and Pitcher ascending", - "enum": [ - "asc", - "desc" - ], - "in": "query", - "name": "sort_dir", - "type": "string" - }, - { - "default": 100, - "description": "Rows per page (1-500)", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "default": 0, - "description": "Zero-based row offset (0-5000)", + "description": "Canonical News18 author URL", "in": "query", - "maximum": 5000, - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.news18.com/byline/jane-doe-12345.html" } ], "produces": [ @@ -440357,7 +514804,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statcastYearToYearResponseDoc" + "$ref": "#/definitions/publicnews.news18AuthorResponseDoc" } }, "400": { @@ -440384,52 +514831,44 @@ "ApiKeyAuth": [] } ], - "summary": "Get Baseball Savant Year-to-Year Changes", + "summary": "Get a News18 author profile", "tags": [ - "MLB" + "News18" ] } }, - "/mlb/team-roster": { + "/news18/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a team's players, jersey numbers, positions, and roster status. The roster_type parameter accepts every value in the live MLB value set returned by mlb_discovery.", - "operationId": "mlb-team-roster", + "description": "Returns recent News18 stories for one section. `section` is required and takes one of 18 slugs, such as `india`, `cricket`, `elections`, `viral` or `breaking-news`. Each item has a title and URL, and may include summary, author, publication time and image.", + "operationId": "news18-headlines", "parameters": [ { - "description": "Numeric MLB team id", - "in": "query", - "name": "team_id", - "required": true, - "type": "string", - "x-example": "147" - }, - { - "description": "Four-digit season; defaults to current year", - "in": "query", - "name": "season", - "type": "integer", - "x-example": 2026 - }, - { - "default": "active", - "description": "Roster type", + "description": "News18 RSS section slug", "enum": [ - "40Man", - "fullSeason", - "fullRoster", - "nonRosterInvitees", - "active", - "allTime", - "depthChart", - "gameday", - "coach" + "india", + "world", + "cricket", + "business", + "sports", + "movies", + "lifestyle", + "tech", + "auto", + "opinion", + "elections", + "politics", + "viral", + "explainers", + "education-career", + "astrology", + "cities", + "breaking-news" ], "in": "query", - "name": "roster_type", - "type": "string" + "name": "section", + "required": true, + "type": "string", + "x-example": "india" } ], "produces": [ @@ -440439,7 +514878,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.rosterResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -440448,11 +514887,37 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get News18 section headlines", + "tags": [ + "News18" + ] + } + }, + "/news18/news": { + "get": { + "description": "Returns the current News18 top stories, with no parameters. Each item has a title and URL, and may include summary, author, publication time and image. Use `news18-headlines` to read one section.", + "operationId": "news18-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -440472,159 +514937,297 @@ "ApiKeyAuth": [] } ], - "summary": "Get an MLB team roster", + "summary": "Get News18 top stories", "tags": [ - "MLB" + "News18" ] } }, - "/mlb/team-stats": { + "/news18/sections": { "get": { - "description": "Returns one MLB team's statistics. `team_id` and `group` (`hitting`, `pitching`, `fielding`, `catching`, `running`, `game`, `team` or `streak`) are required. `season` defaults to the current year and `stat_type` to `season`. Other `stat_type` values cover splits and logs. Use `start_date` with `end_date` for date ranges.", - "operationId": "mlb-team-stats", + "description": "Lists the 18 News18 section slugs accepted by `news18-headlines`, such as `india`, `world`, `cricket`, `explainers` and `education-career`. Each entry has its `slug`, display `name` and `url`.", + "operationId": "news18-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get News18 RSS sections", + "tags": [ + "News18" + ] + } + }, + "/news24/article": { + "get": { + "description": "Returns public News24 article metadata and body paragraphs from a canonical article URL. Subscriber-only articles return the standfirst as the only paragraph with paywalled set to true.", + "operationId": "news24-article", "parameters": [ { - "description": "Numeric MLB team id", + "description": "Canonical News24 article URL", "in": "query", - "name": "team_id", + "name": "url", "required": true, "type": "string", - "x-example": "147" + "x-example": "https://www.news24.com/world/untangling-the-meth-mexican-cartels-set-up-huge-labs-in-sa-to-service-demand-in-australia-20260924-0692" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } }, - { - "description": "Four-digit season", - "in": "query", - "name": "season", - "type": "integer" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Statistics group", + "ApiKeyAuth": [] + } + ], + "summary": "Get News24 article content", + "tags": [ + "News24" + ] + } + }, + "/news24/headlines": { + "get": { + "description": "Returns News24 headlines for one section. `section` is required and takes a path such as `business/markets`, `sport/rugby/springboks` or `politics`, from the 73 listed by `news24-sections`. Each item has a title and URL, and `type` is `subscriber` on cards News24 marks subscriber-only. Summary, author, publication time and image appear when available.", + "operationId": "news24-headlines", + "parameters": [ + { + "description": "News24 section path", "enum": [ - "hitting", - "pitching", - "fielding", - "catching", - "running", - "game", - "team", - "streak" + "business", + "business/climate-future", + "business/climate-future/energy", + "business/climate-future/environment", + "business/climate-future/news", + "business/climate-future/solutions", + "business/companies", + "business/consumer-lookout", + "business/economy", + "business/markets", + "business/money", + "business/opinion", + "business/tech", + "investigations", + "investigations/eskomfiles", + "investigations/phala-phala", + "investigations/silenced", + "life", + "life/arts-and-entertainment", + "life/books", + "life/food", + "life/lifestyle-trends", + "life/motoring", + "life/relationships", + "life/travel", + "life/wellness", + "life/wine", + "opinions", + "opinions/analysis", + "opinions/cartoons", + "opinions/columnists", + "opinions/explainers", + "opinions/fridaybriefing/editions", + "opinions/letters", + "opinions/reader-hub", + "politics", + "southafrica", + "southafrica/crime-and-courts", + "southafrica/debunking", + "southafrica/education", + "southafrica/good-news", + "southafrica/good-news/outdoor", + "southafrica/health-news", + "southafrica/schools-hub", + "southafrica/weather", + "specialreports", + "sport", + "sport/columnists", + "sport/cricket", + "sport/cricket/proteas", + "sport/cricket/sa20", + "sport/golf", + "sport/motorsport", + "sport/motorsport/formula-one", + "sport/other-sport", + "sport/rugby", + "sport/rugby/bulls", + "sport/rugby/cheetahs", + "sport/rugby/lions", + "sport/rugby/pnpgoldcup", + "sport/rugby/sharks", + "sport/rugby/springboks", + "sport/rugby/stormers", + "sport/rugby/urc", + "sport/soccer", + "sport/soccer/bafana-bafana-and-banyana-banyana", + "sport/soccer/english-premier-league", + "sport/soccer/psl", + "sport/soccer/worldcup", + "sport/tennis", + "sunday", + "world", + "world/africa" ], "in": "query", - "name": "group", + "name": "section", "required": true, "type": "string", - "x-example": "hitting" + "x-example": "business" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } }, - { - "default": "season", - "description": "Stats API stat type; defaults to season", - "enum": [ - "projected", - "projectedRos", - "yearByYear", - "yearByYearAdvanced", - "yearByYearPlayoffs", - "season", - "standard", - "advanced", - "career", - "careerRegularSeason", - "careerAdvanced", - "seasonAdvanced", - "careerStatSplits", - "careerPlayoffs", - "gameLog", - "playLog", - "pitchLog", - "pitchArsenal", - "outsAboveAverage", - "expectedStatistics", - "sabermetrics", - "sprayChart", - "tracking", - "vsPlayer", - "vsPlayerTotal", - "vsPlayer5Y", - "vsTeam", - "vsTeam5Y", - "vsTeamTotal", - "lastXGames", - "byDateRange", - "byDateRangeAdvanced", - "byMonth", - "byMonthPlayoffs", - "byDayOfWeek", - "byDayOfWeekPlayoffs", - "homeAndAway", - "homeAndAwayPlayoffs", - "winLoss", - "winLossPlayoffs", - "rankings", - "rankingsByYear", - "statsSingleSeason", - "statsSingleSeasonAdvanced", - "hotColdZones", - "availableStats", - "opponentsFaced", - "gameTypeStats", - "firstYearStats", - "lastYearStats", - "statSplits", - "statSplitsAdvanced", - "atGameStart", - "vsOpponents", - "sabermetricsMultiTeam", - "projected_Zips", - "projected_ZipsRos", - "projected_Zips2YR", - "projected_Zips3YR" - ], - "in": "query", - "name": "stat_type", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "MLB game type", - "enum": [ - "S", - "R", - "F", - "D", - "L", - "W", - "C", - "P", - "A", - "I", - "E" - ], - "in": "query", - "name": "game_type", - "type": "string" + "ApiKeyAuth": [] + } + ], + "summary": "Get News24 section headlines", + "tags": [ + "News24" + ] + } + }, + "/news24/news": { + "get": { + "description": "Returns the current News24 top stories, with no parameters. Each item has a title, canonical URL and image. `type` is `subscriber` when News24 marks the story subscriber-only and is omitted for freely readable stories.", + "operationId": "news24-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, - { - "description": "Start date for byDateRange stat types; requires end_date", - "in": "query", - "name": "start_date", - "type": "string" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "End date for byDateRange stat types; requires start_date", - "in": "query", - "name": "end_date", - "type": "string" + "ApiKeyAuth": [] + } + ], + "summary": "Get News24 top stories", + "tags": [ + "News24" + ] + } + }, + "/news24/sections": { + "get": { + "description": "Lists the 73 News24 sections accepted by `news24-headlines`. Each entry has a `slug` (the URL path under news24.com, which may contain `/`, as in `sport/rugby/springboks`), a display `name` and a page `url`. Top-level groups include `business`, `life`, `opinions`, `southafrica`, `sport` and `world`.", + "operationId": "news24-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Required by vsTeam stat types", - "in": "query", - "name": "opponent_team_id", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get News24 sections", + "tags": [ + "News24" + ] + } + }, + "/newscomau/article": { + "get": { + "description": "Returns a News.com.au article by canonical `url`, which must be a `www.news.com.au` link ending in `/news-story/<32-character-id>`. The response has title, description, section, authors, lead image, publication and update times, a `paywalled` flag and body `paragraphs`. `authors` is empty for wire or agency pieces with no byline.", + "operationId": "newscomau-article", + "parameters": [ { - "description": "Required by vsPlayer stat types", + "description": "Canonical News.com.au article URL", "in": "query", - "name": "opponent_player_id", - "type": "string" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.news.com.au/national/example-headline/news-story/0123456789abcdef0123456789abcdef" } ], "produces": [ @@ -440634,7 +515237,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.statsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -440643,6 +515246,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -440655,26 +515264,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get MLB team season statistics", + "summary": "Get News.com.au article content", "tags": [ - "MLB" + "News.com.au" ] } }, - "/mlb/teams": { + "/newscomau/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the 30 MLB clubs for a `season` (four-digit year, default the current year). Each team has its id, name, club name, location, abbreviation, league, division, venue, first year of play and active flag.", - "operationId": "mlb-teams", + "description": "Returns a News.com.au staff writer's profile (name, job title, headshot, biography, social links) and recent articles from a canonical author URL.", + "operationId": "newscomau-author", "parameters": [ { - "description": "Four-digit season; defaults to current year", + "description": "Canonical News.com.au author URL", "in": "query", - "name": "season", - "type": "integer", - "x-example": 2026 + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.news.com.au/the-team/example-writer" } ], "produces": [ @@ -440684,7 +515291,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.teamsResponseDoc" + "$ref": "#/definitions/publicnews.newscomauAuthorResponseDoc" } }, "400": { @@ -440693,8 +515300,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -440711,44 +515318,24 @@ "ApiKeyAuth": [] } ], - "summary": "List MLB teams", + "summary": "Get a News.com.au author profile", "tags": [ - "MLB" + "News.com.au" ] } }, - "/mlb/transactions": { + "/newscomau/headlines": { "get": { - "description": "Lists MLB transactions between `start_date` and `end_date`, both required in `YYYY-MM-DD` format. Covers signings, trades, options, assignments, injured-list moves and releases. Narrow with `team_id` or `player_id`. Each entry has the date, effective date, type, description, player, and from and to teams, with a total `count`.", - "operationId": "mlb-transactions", + "description": "Returns fresh headlines from one News.com.au section or category listing page. section accepts any slug returned by GET /newscomau/sections (236 values, too many to enumerate inline -- see that endpoint for the full, current list), for example \"national\" or the nested \"national/nsw-act/politics\".", + "operationId": "newscomau-headlines", "parameters": [ { - "description": "Range start in YYYY-MM-DD format", - "in": "query", - "name": "start_date", - "required": true, - "type": "string", - "x-example": "2026-07-25" - }, - { - "description": "Range end in YYYY-MM-DD format", + "description": "News.com.au section slug, from GET /newscomau/sections", "in": "query", - "name": "end_date", + "name": "section", "required": true, "type": "string", - "x-example": "2026-08-01" - }, - { - "description": "Numeric MLB team id", - "in": "query", - "name": "team_id", - "type": "string" - }, - { - "description": "Numeric MLB player id", - "in": "query", - "name": "player_id", - "type": "string" + "x-example": "national" } ], "produces": [ @@ -440758,7 +515345,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/mlb.transactionsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -440779,16 +515366,16 @@ "ApiKeyAuth": [] } ], - "summary": "List MLB transactions", + "summary": "Get News.com.au section headlines", "tags": [ - "MLB" + "News.com.au" ] } }, - "/mlive/news": { + "/newscomau/news": { "get": { - "description": "Returns current MLive top stories, including title, canonical URL, brief summary, author, publication time, and image where available. Article pages are not currently available, and category endpoints are deferred.", - "operationId": "mlive-news", + "description": "Returns the current News.com.au top stories, with no parameters and no section filter. Each item has a title and URL, and may include summary, author, publication time and image.", + "operationId": "newscomau-news", "produces": [ "application/json" ], @@ -440817,19 +515404,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get MLive top stories", + "summary": "Get News.com.au top stories", "tags": [ - "MLive" + "News.com.au" ] } }, - "/modaoperandi/categories": { + "/newscomau/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the live category tree, designer, color, size, availability, and sort values discovered from Moda Operandi's public catalog. Returned category and designer slugs are valid for modaoperandi-search.", - "operationId": "modaoperandi-categories", + "description": "Returns the full News.com.au section/category navigation inventory (236 entries as of 2026-09-23), each with a slug, display name, and public listing URL. Use a returned slug as the section parameter on GET /newscomau/headlines.", + "operationId": "newscomau-sections", "produces": [ "application/json" ], @@ -440837,13 +515421,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/modaoperandi.categoriesDoc" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -440852,31 +515430,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Moda Operandi categories and facets", + "summary": "Get News.com.au sections", "tags": [ - "Moda Operandi" + "News.com.au" ] } }, - "/modaoperandi/designers": { + "/newsmax/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the designers currently available in one Moda Operandi department, chosen with the required `gender` (`women` or `men`). Each designer has its name, slug and item count, and each slug can be passed as `designer` to `modaoperandi-search`. The response also carries the `count` of designers.", - "operationId": "modaoperandi-designers", + "description": "Returns a Newsmax article by canonical `url` in the form `/
//YYYY/MM/DD/id/`: title, description, section, authors, lead image, publication and update times, and body `paragraphs`. `authors` may be empty for wire or staff-aggregated stories. Paywalled Platinum URLs are not accepted.", + "operationId": "newsmax-article", "parameters": [ { - "description": "Department", - "enum": [ - "women", - "men" - ], + "description": "Canonical Newsmax article URL", "in": "query", - "name": "gender", + "name": "url", "required": true, "type": "string", - "x-example": "women" + "x-example": "https://www.newsmax.com/newsfront/example-article-slug/2026/09/23/id/1270487/" } ], "produces": [ @@ -440886,7 +515457,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/modaoperandi.designersDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -440895,6 +515466,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -440907,27 +515484,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Moda Operandi designers", + "summary": "Get Newsmax article content", "tags": [ - "Moda Operandi" + "Newsmax" ] } }, - "/modaoperandi/product": { + "/newsmax/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Moda Operandi product by its product page `url`: id, name, designer, color, price and currency, description, details, images, and the available sizes. It also reports `availability` and an `in_stock` flag for the product.", - "operationId": "modaoperandi-product", + "description": "Returns a Newsmax Insiders (opinion columnist) profile from a required `url` such as `https://www.newsmax.com/insiders//id-/`. The response has `name`, `biography`, `image_url` and recent columns. `biography` is omitted when Newsmax's separate profile page is unavailable, and article `published_at` is date text such as `Sep 23, 2026`.", + "operationId": "newsmax-author", "parameters": [ { - "description": "Moda Operandi product URL", + "description": "Canonical Newsmax Insiders author URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.modaoperandi.com/women/p/melisse/the-minuit-knot-bag-in-black-taffeta/752807" + "x-example": "https://www.newsmax.com/insiders/janedoe/id-1234/" } ], "produces": [ @@ -440937,7 +515511,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/modaoperandi.productDoc" + "$ref": "#/definitions/publicnews.newsmaxAuthorResponseDoc" } }, "400": { @@ -440964,125 +515538,225 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Moda Operandi product", + "summary": "Get a Newsmax Insiders author profile", "tags": [ - "Moda Operandi" + "Newsmax" ] } }, - "/modaoperandi/search": { + "/newsmax/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches or browses the Moda Operandi catalogue for one department, with `gender` (`women` or `men`) required and either `q` or `category` needed as well. Filter by `designer`, `color`, `size`, `availability`, price range or `on_sale`, and sort with `sort`. `limit` is 1 to 180 per page. Returns products plus facet counts and the `total`.", - "operationId": "modaoperandi-search", + "description": "Returns recent Newsmax stories for one section. `section` is required and takes one of 20 slugs, such as `newsfront`, `politics`, `health-news`, `finance-news` or `insiders`. Each item has a title and URL, and may include summary, author, publication time and image.", + "operationId": "newsmax-headlines", "parameters": [ { - "description": "Department", + "description": "Newsmax RSS section slug", "enum": [ - "women", - "men" + "newsfront", + "us", + "politics", + "thewire", + "scitech", + "health-news", + "cancer", + "brain-health", + "diet-and-fitness", + "diabetes", + "natural-health", + "anti-aging", + "finance-headlines", + "street-talk", + "finance-news", + "economy", + "companies", + "investing-analysis", + "global-talk", + "insiders" ], "in": "query", - "name": "gender", + "name": "section", "required": true, "type": "string", - "x-example": "women" + "x-example": "newsfront" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } }, - { - "description": "Free-text search", - "in": "query", - "name": "q", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Category slug from modaoperandi-categories", - "in": "query", - "name": "category", - "type": "string" + "ApiKeyAuth": [] + } + ], + "summary": "Get Newsmax section headlines", + "tags": [ + "Newsmax" + ] + } + }, + "/newsmax/news": { + "get": { + "description": "Returns the current Newsmax top stories from the Newsfront section, with no parameters. Each item has a title and URL, and may include summary, author, publication time and image. Use `newsmax-headlines` for other sections.", + "operationId": "newsmax-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, - { - "description": "Designer slug from modaoperandi-designers", - "in": "query", - "name": "designer", - "type": "string" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Color facet value", - "in": "query", - "name": "color", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get Newsmax top stories", + "tags": [ + "Newsmax" + ] + } + }, + "/newsmax/sections": { + "get": { + "description": "Lists the 20 Newsmax section slugs accepted by `newsmax-headlines`, such as `newsfront`, `scitech`, `street-talk` and `global-talk`. Each entry has its `slug`, display `name` and `url`. `insiders` is the combined opinion section, and `finance-headlines` is the finance section's Headlines listing.", + "operationId": "newsmax-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Size facet value", - "in": "query", - "name": "size", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get Newsmax RSS sections", + "tags": [ + "Newsmax" + ] + } + }, + "/newsweek/article": { + "get": { + "description": "Returns a Newsweek article by canonical `url`, which must be a `newsweek.com` link ending in a numeric article id. The response has title, description, section, authors, lead image, publication and update times, a `paywalled` flag and body `paragraphs`.", + "operationId": "newsweek-article", + "parameters": [ { - "description": "Attribute facet value", + "description": "Canonical Newsweek article URL", "in": "query", - "name": "attribute", - "type": "string" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.newsweek.com/example-article-1234567" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } }, - { - "description": "Availability", - "enum": [ - "available_now", - "preorder", - "trunkshow" - ], - "in": "query", - "name": "availability", - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Minimum price", - "in": "query", - "name": "price_min", - "type": "number" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Maximum price", - "in": "query", - "name": "price_max", - "type": "number" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get Newsweek article content", + "tags": [ + "Newsweek" + ] + } + }, + "/newsweek/author": { + "get": { + "description": "Returns a Newsweek author profile by `slug` (for example `jennifer-fink`) or a newsweek.com authors `url`; supply exactly one. `page` selects the 1-based page of recent articles (default 1) and overrides any page in `url`. The response has `name`, `job_title`, `bio`, `email`, `image_url`, articles and `has_next_page`; a page past the end gives an empty `articles` list, not an error.", + "operationId": "newsweek-author", + "parameters": [ { - "description": "Sale items only", + "description": "Author slug, e.g. jennifer-fink", "in": "query", - "name": "on_sale", - "type": "boolean" + "name": "slug", + "type": "string", + "x-example": "jennifer-fink" }, { - "description": "Sort", - "enum": [ - "default", - "price_low_to_high", - "price_high_to_low", - "newest" - ], + "description": "Canonical newsweek.com/authors/ URL, optionally with a ?page= query; alternative to slug", "in": "query", - "name": "sort", - "type": "string" + "name": "url", + "type": "string", + "x-example": "https://www.newsweek.com/authors/jennifer-fink" }, { "default": 1, - "description": "1-based page", + "description": "1-based page number; overrides any page number in url", "in": "query", - "minimum": 1, "name": "page", "type": "integer" - }, - { - "default": 60, - "description": "Results per page", - "in": "query", - "maximum": 180, - "minimum": 1, - "name": "limit", - "type": "integer" } ], "produces": [ @@ -441092,7 +515766,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/modaoperandi.searchDoc" + "$ref": "#/definitions/publicnews.newsweekAuthorResponseDoc" } }, "400": { @@ -441101,6 +515775,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -441113,28 +515793,47 @@ "ApiKeyAuth": [] } ], - "summary": "Search Moda Operandi products", + "summary": "Get a Newsweek author profile", "tags": [ - "Moda Operandi" + "Newsweek" ] } }, - "/moncler/categories": { + "/newsweek/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Moncler's full category tree (id, name, description, and subcategories). Every id is a valid value for moncler-category's own category_id parameter. levels controls how many levels of subcategories are included.", - "operationId": "moncler-categories", + "description": "Returns recent Newsweek stories for one section. `section` is required and takes one of 21 slugs, such as `politics`, `fact-check`, `better-planet`, `personal-finance` or `my-turn`. Each item has a title and URL, and may include summary, author, publication time and image.", + "operationId": "newsweek-headlines", "parameters": [ { - "default": 2, - "description": "How many levels of the category tree to return", + "description": "Newsweek section slug", + "enum": [ + "news", + "opinion", + "politics", + "world", + "us", + "business", + "technology", + "health", + "entertainment", + "sports", + "fact-check", + "better-planet", + "life", + "travel", + "pets", + "autos", + "relationships", + "tech-science", + "personal-finance", + "better-workplaces", + "my-turn" + ], "in": "query", - "maximum": 3, - "minimum": 1, - "name": "levels", - "type": "integer" + "name": "section", + "required": true, + "type": "string", + "x-example": "news" } ], "produces": [ @@ -441144,7 +515843,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/moncler.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -441153,6 +515852,38 @@ "$ref": "#/definitions/app.Response" } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Newsweek section headlines", + "tags": [ + "Newsweek" + ] + } + }, + "/newsweek/news": { + "get": { + "description": "Returns the current Newsweek top stories, with no parameters. Each item has a title and URL, and may include summary, author, publication time and image. Use `newsweek-headlines` to read one section.", + "operationId": "newsweek-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -441171,66 +515902,110 @@ "ApiKeyAuth": [] } ], - "summary": "List Moncler categories", + "summary": "Get Newsweek top stories", "tags": [ - "Moncler" + "Newsweek" ] } }, - "/moncler/category": { + "/newsweek/sections": { "get": { - "consumes": [ + "description": "Lists the 21 Newsweek section slugs accepted by `newsweek-headlines`, such as `news`, `world`, `us`, `fact-check` and `pets`. Each entry has its `slug`, display `name` and section page `url`.", + "operationId": "newsweek-sections", + "produces": [ "application/json" ], - "description": "Lists products within one category. category_id must be a value returned by moncler-categories' own category_id field -- a closed set the upstream defines. Returns the same result and facet shape as moncler-search. Narrow the same results with the filter param below.", - "operationId": "moncler-category", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Newsweek sections", + "tags": [ + "Newsweek" + ] + } + }, + "/newyorker/article": { + "get": { + "description": "Returns public The New Yorker article metadata and body paragraphs from a canonical article URL. The New Yorker uses a metered paywall: when a page marks itself as gated, only the publicly served text is returned and is_truncated is true; is_accessible_for_free reports the page's own access flag.", + "operationId": "newyorker-article", "parameters": [ { - "description": "Category id, from moncler-categories", + "description": "Canonical The New Yorker article URL", "in": "query", - "name": "category_id", + "name": "url", "required": true, "type": "string", - "x-example": "men-outerwear-all-down-jackets" + "x-example": "https://www.newyorker.com/news/the-lede/example-article-slug" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newyorkerArticleResponseDoc" + } }, - { - "description": "Sort order", - "enum": [ - "price-high-to-low", - "price-low-to-high" - ], - "in": "query", - "name": "sort", - "type": "string", - "x-example": "price-low-to-high" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "collectionFormat": "csv", - "description": "Repeatable, up to 10. Each value is \\", - "in": "query", - "items": { - "type": "string" - }, - "name": "filter", - "type": "array", - "x-example": "c_refinementColor:Black" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "default": 24, - "description": "Max results to return", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", - "type": "integer" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": 0, - "description": "Result offset for pagination", + "ApiKeyAuth": [] + } + ], + "summary": "Get The New Yorker article content", + "tags": [ + "The New Yorker" + ] + } + }, + "/newyorker/author": { + "get": { + "description": "Returns a The New Yorker contributor's name, photo, biography, external profile links, and the first page of their recent articles from a canonical contributor URL.", + "operationId": "newyorker-author", + "parameters": [ + { + "description": "Canonical The New Yorker contributor URL", "in": "query", - "minimum": 0, - "name": "offset", - "type": "integer" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.newyorker.com/contributors/casey-cep" } ], "produces": [ @@ -441240,7 +516015,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/moncler.categoryResponseDoc" + "$ref": "#/definitions/publicnews.newyorkerAuthorResponseDoc" } }, "400": { @@ -441273,27 +516048,39 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Moncler category", + "summary": "Get a The New Yorker contributor profile", "tags": [ - "Moncler" + "The New Yorker" ] } }, - "/moncler/product": { + "/newyorker/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one product's full detail: name, brand, price, descriptions, color, composition and care instructions, size availability, live stock, variation attributes (color/size options), every orderable variant SKU, product images, \"styled with\" related products, and a size guide (per-size body measurements and/or a cross-region size conversion table) when the upstream provides one. product_id accepts either a variant-level id or a master/style-level id, both as returned by moncler-search/moncler-category's own result ids.", - "operationId": "moncler-product", + "description": "Returns fresh headlines from one public The New Yorker section feed. Section must be one of the slugs returned by the sections endpoint.", + "operationId": "newyorker-headlines", "parameters": [ { - "description": "Product or master id", + "description": "The New Yorker section slug", + "enum": [ + "everything", + "news", + "culture", + "humor", + "magazine", + "business", + "tech", + "daily-comment", + "news-desk", + "cultural-comment", + "photo-booth", + "page-turner", + "borowitz-report" + ], "in": "query", - "name": "product_id", + "name": "section", "required": true, "type": "string", - "x-example": "L20911A53600689509990" + "x-example": "everything" } ], "produces": [ @@ -441303,7 +516090,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/moncler.productResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -441312,11 +516099,43 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The New Yorker section headlines", + "tags": [ + "The New Yorker" + ] + } + }, + "/newyorker/news": { + "get": { + "description": "Returns fresh The New Yorker top stories from its public RSS feed: title, canonical URL, summary, author, publication time, lead image, and the department label (for example \"News / The Lede\").", + "operationId": "newyorker-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -441336,65 +516155,153 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Moncler product's detail", + "summary": "Get The New Yorker top stories", "tags": [ - "Moncler" + "The New Yorker" ] } }, - "/moncler/search": { + "/newyorker/sections": { + "get": { + "description": "Lists every The New Yorker section accepted by the headlines endpoint, with slug, display name, and feed URL. This is the complete set of public text-article feeds the publisher serves; cartoon, podcast, video, and puzzle feeds are not included.", + "operationId": "newyorker-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List The New Yorker sections", + "tags": [ + "The New Yorker" + ] + } + }, + "/nfhs/activities": { "get": { "consumes": [ "application/json" ], - "description": "Searches Moncler's product catalog by keyword. Returns product results (name, price, image, orderable color/size variant ids, and live stock level) plus the search index's own sort options and facets (gender, category, color, size, and others) with live per-option result counts. Narrow the same results with the filter param below.", - "operationId": "moncler-search", + "description": "Returns the complete activity list NFHS Network serves: sports plus non-sport activities such as graduation, band performance and assembly, with each record's sport, two-team, indoor, championship and top-sport flags. Use this discovery endpoint to obtain the exact activity names the nfhs-events and nfhs-highlights activity filter accepts, matched case-insensitively. The upstream list is complete and ordered; is_sport and is_top_sport are filtered locally against the upstream's own flags.", + "operationId": "nfhs-activities", "parameters": [ { - "description": "Search keyword", + "description": "Optional sport flag filter; true returns only sports", "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "down jacket" + "name": "is_sport", + "type": "boolean" }, { - "description": "Sort order", - "enum": [ - "price-high-to-low", - "price-low-to-high" - ], + "description": "Optional top-sport flag filter; true returns the 12 promoted top sports", "in": "query", - "name": "sort", - "type": "string", - "x-example": "price-low-to-high" + "name": "is_top_sport", + "type": "boolean" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nfhs.ActivitiesResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "collectionFormat": "csv", - "description": "Repeatable, up to 10. Each value is \\", + "ApiKeyAuth": [] + } + ], + "summary": "List NFHS Network activities and sports", + "tags": [ + "NFHS" + ] + } + }, + "/nfhs/affiliates": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of broadcast affiliates with identity, type, network and subscription flags, attribution group, colours, social links and state coverage. Search by name with search_term (at least 3 characters) or filter by state; page with start/size and use next_cursor for deep pages. Use nfhs-affiliate to fetch one record by key or slug.", + "operationId": "nfhs-affiliates", + "parameters": [ + { + "description": "Free-text term matched against affiliate names; at least 3 characters", "in": "query", - "items": { - "type": "string" - }, - "name": "filter", - "type": "array", - "x-example": "c_refinementColor:Black" + "name": "search_term", + "type": "string" }, { - "default": 24, - "description": "Max results to return", + "description": "Two-letter state code from nfhs-states", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", + "name": "state", + "type": "string" + }, + { + "description": "Optional network flag filter; true returns affiliates that are part of the NFHS Network", + "in": "query", + "name": "is_network", + "type": "boolean" + }, + { + "description": "Zero-based result offset", + "in": "query", + "name": "start", "type": "integer" }, { - "default": 0, - "description": "Result offset for pagination", + "description": "Page size, 1 to 500; defaults to 20", "in": "query", - "minimum": 0, - "name": "offset", + "name": "size", "type": "integer" } ], @@ -441405,7 +516312,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/moncler.searchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nfhs.AffiliatesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -441432,19 +516351,28 @@ "ApiKeyAuth": [] } ], - "summary": "Search Moncler products", + "summary": "Search NFHS Network broadcast affiliates", "tags": [ - "Moncler" + "NFHS" ] } }, - "/moncler/stores": { + "/nfhs/affiliates/{key}": { "get": { "consumes": [ "application/json" ], - "description": "Returns Moncler's full worldwide boutique list: name, coordinates, address, phone, email, opening hours, store type, and in-store service flags. This is the full list, not geo-filtered -- filter by country_code or proximity to coordinates client-side over the returned list.", - "operationId": "moncler-stores", + "description": "Returns one broadcast affiliate by its key or slug, including its type, network and subscription flags, attribution group, colours, social links and state coverage. Use nfhs-affiliates to discover the key or slug first.", + "operationId": "nfhs-affiliate", + "parameters": [ + { + "description": "Affiliate key or slug, for example prepspin or 00bf21ab8d", + "in": "path", + "name": "key", + "required": true, + "type": "string" + } + ], "produces": [ "application/json" ], @@ -441452,7 +516380,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/moncler.storesResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nfhs.AffiliateResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -441461,6 +516401,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -441479,27 +516425,49 @@ "ApiKeyAuth": [] } ], - "summary": "List Moncler boutiques", + "summary": "Get one NFHS Network broadcast affiliate", "tags": [ - "Moncler" + "NFHS" ] } }, - "/moncler/suggest": { + "/nfhs/associations": { "get": { "consumes": [ "application/json" ], - "description": "Returns the storefront's own search-box suggestions (typeahead) for a partial query: completed/corrected search terms, suggested full phrases, and matching categories. Not product data.", - "operationId": "moncler-suggest", + "description": "Returns one page of state high-school associations and their sections (for example GHSA or CIF - North Coast Section) with identity, acronym, timezone, colours, social links, state coverage, publisher and producer keys and championship page URL. Search by name or acronym with search_term (at least 3 characters) or filter by state; page with start/size and use next_cursor for deep pages. Use nfhs-association to fetch one record by key or slug.", + "operationId": "nfhs-associations", "parameters": [ { - "description": "Partial search query", + "description": "Free-text term matched against association names and acronyms; at least 3 characters", "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "jack" + "name": "search_term", + "type": "string" + }, + { + "description": "Two-letter state code from nfhs-states", + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "Optional network flag filter; true returns associations that are part of the NFHS Network", + "in": "query", + "name": "is_network", + "type": "boolean" + }, + { + "description": "Zero-based result offset", + "in": "query", + "name": "start", + "type": "integer" + }, + { + "description": "Page size, 1 to 500; defaults to 20", + "in": "query", + "name": "size", + "type": "integer" } ], "produces": [ @@ -441509,7 +516477,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/moncler.suggestResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nfhs.AssociationsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -441536,24 +516516,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get Moncler search-box suggestions", + "summary": "Search NFHS Network state associations and sections", "tags": [ - "Moncler" + "NFHS" ] } }, - "/moneycontrol/article": { + "/nfhs/associations/{key}": { "get": { - "description": "Returns public Moneycontrol article metadata and body paragraphs from a canonical article URL. Moneycontrol Pro subscriber stories are refused with a 403 permission error because no free content is available. Live blogs return one paragraph per update.", - "operationId": "moneycontrol-article", + "consumes": [ + "application/json" + ], + "description": "Returns one state association or section by its key or slug, including its about text, colours, social links, state coverage and publisher, producer and championship-page identities. Use nfhs-associations to discover the key or slug first.", + "operationId": "nfhs-association", "parameters": [ { - "description": "Canonical Moneycontrol article URL", - "in": "query", - "name": "url", + "description": "Association key or slug, for example ghsa or 18bad24aaa", + "in": "path", + "name": "key", "required": true, - "type": "string", - "x-example": "https://www.moneycontrol.com/news/business/markets/example-article-slug-14037252.html" + "type": "string" } ], "produces": [ @@ -441563,7 +516545,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nfhs.AssociationResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -441572,14 +516566,14 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -441596,24 +516590,115 @@ "ApiKeyAuth": [] } ], - "summary": "Get Moneycontrol article content", + "summary": "Get one NFHS Network state association", "tags": [ - "Moneycontrol" + "NFHS" ] } }, - "/moneycontrol/author": { + "/nfhs/events": { "get": { - "description": "Returns a Moneycontrol author's name, job title, biography (when present), social links, and recent articles from a canonical author URL.", - "operationId": "moneycontrol-author", + "consumes": [ + "application/json" + ], + "description": "Returns one page of games and events from the live, upcoming or on-demand drill-down with schedule, sport, game type, gender, level, scores, status, postseason flag, participant teams and publisher identities. Filter by activity display name from nfhs-activities, state from nfhs-states, gender and level from nfhs-filters, school_key or publisher_key, a free-text search_term (at least 3 characters) and a YYYY-MM-DD from/to start-date range; sort by start_time or date. Page with start/size and use next_cursor for deep pages. Use nfhs-event for the full detail of one event key.", + "operationId": "nfhs-events", "parameters": [ { - "description": "Canonical Moneycontrol author URL", + "description": "Event drill-down: live, upcoming (default) or ondemand", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.moneycontrol.com/author/jane-doe-12345/" + "name": "type", + "type": "string" + }, + { + "description": "Activity name from nfhs-activities, matched case-insensitively, for example Football", + "in": "query", + "name": "activity", + "type": "string" + }, + { + "description": "Two-letter state code from nfhs-states", + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "Gender filter: boys, girls or coed", + "in": "query", + "name": "gender", + "type": "string" + }, + { + "description": "Level filter: varsity, junior varsity, freshman, sophomore or middle school", + "in": "query", + "name": "level", + "type": "string" + }, + { + "description": "School key from nfhs-schools", + "in": "query", + "name": "school_key", + "type": "string" + }, + { + "description": "Publisher key from an event's publishers list", + "in": "query", + "name": "publisher_key", + "type": "string" + }, + { + "description": "Optional postseason flag filter; true returns playoff and championship events only", + "in": "query", + "name": "is_postseason", + "type": "boolean" + }, + { + "description": "Optional download-to-own filter; true returns events whose broadcast can be downloaded for ownership", + "in": "query", + "name": "download_to_own", + "type": "boolean" + }, + { + "description": "Free-text term matched against event titles and team names; at least 3 characters", + "in": "query", + "name": "search_term", + "type": "string" + }, + { + "description": "Inclusive start-date lower bound as YYYY-MM-DD", + "in": "query", + "name": "from", + "type": "string" + }, + { + "description": "Inclusive start-date upper bound as YYYY-MM-DD", + "in": "query", + "name": "to", + "type": "string" + }, + { + "description": "Sort order: start_time+asc, start_time+desc, date+asc, date+desc or updated_at+desc", + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Zero-based result offset", + "in": "query", + "name": "start", + "type": "integer" + }, + { + "description": "Page size, 1 to 500; defaults to 20", + "in": "query", + "name": "size", + "type": "integer" + }, + { + "description": "next_cursor from a previous page; the reliable way to page beyond 10000 results", + "in": "query", + "name": "cursor", + "type": "string" } ], "produces": [ @@ -441623,7 +516708,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.moneycontrolAuthorResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nfhs.EventsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -441632,8 +516729,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -441650,78 +516747,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Moneycontrol author profile", + "summary": "Search NFHS Network games and events", "tags": [ - "Moneycontrol" + "NFHS" ] } }, - "/moneycontrol/headlines": { + "/nfhs/events/{key}": { "get": { - "description": "Returns the current front page of one Moneycontrol section: 25 or 50 stories, each with `title`, `url`, a short `summary` and `image_url`. `section` is required and takes one of 52 slugs such as `markets`, `ipo` or `cricket`; other values return `400`. Publication time and author are omitted, and only the first page is available.", - "operationId": "moneycontrol-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns one game or event by key with its full schedule, sport, game type, gender, level, scores, status, postseason flag, participant teams and publisher identities. Broadcast ingest data, VOD keys, tickets and contact fields are not part of this contract. The site reads event detail from the echo service first and falls back to unity; this route mirrors that order. Use nfhs-events to discover the event key first.", + "operationId": "nfhs-event", "parameters": [ { - "description": "Moneycontrol section slug", - "enum": [ - "business", - "markets", - "economy", - "companies", - "personal-finance", - "ipo", - "startup", - "commodities", - "earnings", - "insurance", - "banks", - "stocks", - "mutual-funds", - "real-estate", - "funding", - "information-technology", - "india", - "politics", - "trends", - "interview", - "opinion", - "currency", - "telecom", - "world", - "city", - "banking", - "explainers", - "technology", - "automobile", - "sports", - "cricket", - "football", - "entertainment", - "bollywood", - "hollywood", - "ott", - "tv", - "regional", - "music", - "lifestyle", - "beauty", - "parenting", - "relationship", - "home-garden", - "health-and-fitness", - "education", - "science", - "astrology", - "religion", - "travel", - "artificial-intelligence", - "books" - ], - "in": "query", - "name": "section", + "description": "Event key from nfhs-events, for example gam00aa5c4cde", + "in": "path", + "name": "key", "required": true, - "type": "string", - "x-example": "business" + "type": "string" } ], "produces": [ @@ -441731,7 +516776,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nfhs.EventResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -441740,37 +516797,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Moneycontrol section headlines", - "tags": [ - "Moneycontrol" - ] - } - }, - "/moneycontrol/news": { - "get": { - "description": "Returns the 50 newest Moneycontrol stories across all sections, newest first, with no parameters. Each item has `title`, `url`, `published_at` (RFC3339 UTC) and `image_url`. Videos, podcasts, photo galleries and sponsored brand-connect posts are left out.", - "operationId": "moneycontrol-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -441790,63 +516821,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get Moneycontrol latest news", - "tags": [ - "Moneycontrol" - ] - } - }, - "/moneycontrol/sections": { - "get": { - "description": "Lists the 52 Moneycontrol news section slugs accepted by `moneycontrol-headlines`, such as `markets`, `economy`, `ipo` and `cricket`. Each entry has its `slug`, display `name` and page `url`. Moneycontrol Pro-only research, video, podcast and photo hubs are not sections.", - "operationId": "moneycontrol-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Moneycontrol sections", + "summary": "Get one NFHS Network event", "tags": [ - "Moneycontrol" + "NFHS" ] } }, - "/monitors": { + "/nfhs/filters": { "get": { "consumes": [ "application/json" ], - "description": "Lists the website-change monitors on your account, most recently created first, up to 100. Each monitor has its `target_type` (`page` or `sitemap`), URL, name, cadence in minutes, enabled flag, last checked and last changed times, next check time, failure count, last error, and notification and sitemap settings.", - "operationId": "monitors-list", + "description": "Returns every closed enum the NFHS Network event-filter UI exposes: genders, levels, event drill-down types, event sort expressions, highlight sort expressions, school sort expressions and suggester scopes. The activity and state value spaces are larger upstream-owned lists and have their own discovery endpoints (nfhs-activities, nfhs-states). Use this before calling nfhs-events, nfhs-highlights, nfhs-schools or nfhs-suggest so a filter value is never guessed. This endpoint takes no parameters.", + "operationId": "nfhs-filters", "produces": [ "application/json" ], "responses": { "200": { - "description": "Monitors", - "schema": { - "$ref": "#/definitions/webmonitor.monitorListResponseDoc" - } - }, - "401": { - "description": "Authentication required", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nfhs.FiltersResponse" + } + }, + "type": "object" + } + ] } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -441857,26 +516868,91 @@ "ApiKeyAuth": [] } ], - "summary": "List website-change monitors", + "summary": "List the closed NFHS Network event-filter value space", "tags": [ - "Monitors" + "NFHS" ] - }, - "post": { + } + }, + "/nfhs/highlights": { + "get": { "consumes": [ "application/json" ], - "description": "Creates a monitor that periodically checks a page or sitemap for changes and can notify a webhook. Free to call -- only completed check runs consume credits, at 1 credit per completed run regardless of target type or whether a change was detected. `target_type` defaults to \"page\" (exact-fingerprint diff of the page). \"sitemap\" watches the sitemap at `url` for added/removed entries instead, honoring `sitemap.include_patterns`/`exclude_patterns` (shell-style globs matched against each URL's path) and `sitemap.max_urls` (default 5000, hard cap 10000).", - "operationId": "monitors-create", + "description": "Returns one page of published highlight clips with title, headline, subtitle, date, duration, publisher identity and logo, sport, game type, gender, level, categories and thumbnail. Filter by activity display name from nfhs-activities, state from nfhs-states, gender and level from nfhs-filters, school_key, a free-text search_term (at least 3 characters) and a YYYY-MM-DD from/to date range; sort by date or created_at. Page with start/size and use next_cursor for deep pages.", + "operationId": "nfhs-highlights", "parameters": [ { - "description": "Monitor definition", - "in": "body", - "name": "request", - "required": true, - "schema": { - "$ref": "#/definitions/webmonitor.createMonitorBodyDoc" - } + "description": "Activity name from nfhs-activities, matched case-insensitively", + "in": "query", + "name": "activity", + "type": "string" + }, + { + "description": "Two-letter state code from nfhs-states", + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "Gender filter: boys, girls or coed", + "in": "query", + "name": "gender", + "type": "string" + }, + { + "description": "Level filter: varsity, junior varsity, freshman, sophomore or middle school", + "in": "query", + "name": "level", + "type": "string" + }, + { + "description": "School key from nfhs-schools", + "in": "query", + "name": "school_key", + "type": "string" + }, + { + "description": "Free-text term matched against highlight titles; at least 3 characters", + "in": "query", + "name": "search_term", + "type": "string" + }, + { + "description": "Inclusive date lower bound as YYYY-MM-DD", + "in": "query", + "name": "from", + "type": "string" + }, + { + "description": "Inclusive date upper bound as YYYY-MM-DD", + "in": "query", + "name": "to", + "type": "string" + }, + { + "description": "Sort order: date+asc, date+desc or created_at+desc", + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Zero-based result offset", + "in": "query", + "name": "start", + "type": "integer" + }, + { + "description": "Page size, 1 to 500; defaults to 20", + "in": "query", + "name": "size", + "type": "integer" + }, + { + "description": "next_cursor from a previous page; the reliable way to page beyond 10000 results", + "in": "query", + "name": "cursor", + "type": "string" } ], "produces": [ @@ -441884,25 +516960,37 @@ ], "responses": { "200": { - "description": "Created monitor", + "description": "OK", "schema": { - "$ref": "#/definitions/webmonitor.monitorResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nfhs.HighlightsResponse" + } + }, + "type": "object" + } + ] } }, "400": { - "description": "Invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "401": { - "description": "Authentication required", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -441913,27 +517001,26 @@ "ApiKeyAuth": [] } ], - "summary": "Create a website-change monitor", + "summary": "Search NFHS Network highlights", "tags": [ - "Monitors" + "NFHS" ] } }, - "/monitors/{id}": { - "delete": { + "/nfhs/producers/{key}": { + "get": { "consumes": [ "application/json" ], - "description": "Deletes one website-change monitor by its `id`, which must belong to the calling account. Returns `deleted: true` on success. The monitor's past check history is not removed.", - "operationId": "monitors-delete", + "description": "Returns one producer record by key: identity, type, state-association linkage, state coverage, colours, social links and related publishers. Producer keys appear in school and event records. Use nfhs-publisher for the publisher that fronts a producer. Device and contact data is not part of this contract.", + "operationId": "nfhs-producer", "parameters": [ { - "description": "Monitor ID returned by your account monitor create/list response; replace the illustrative example with your own ID", + "description": "Producer key, for example pdc1e100ffe6e", "in": "path", - "name": "id", + "name": "key", "required": true, - "type": "string", - "x-example": "66d2f0b1c2a4e5f6a7b8c9d0" + "type": "string" } ], "produces": [ @@ -441941,25 +517028,43 @@ ], "responses": { "200": { - "description": "Deleted", + "description": "OK", "schema": { - "$ref": "#/definitions/webmonitor.monitorDeleteResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nfhs.ProducerResponse" + } + }, + "type": "object" + } + ] } }, - "401": { - "description": "Authentication required", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Monitor not found", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -441970,25 +517075,26 @@ "ApiKeyAuth": [] } ], - "summary": "Delete a website-change monitor", + "summary": "Get one NFHS Network producer", "tags": [ - "Monitors" + "NFHS" ] - }, + } + }, + "/nfhs/publishers/{key}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one of your website-change monitors by `id`. The monitor includes its `target_type` (`page` or `sitemap`), URL, name, check cadence in minutes, enabled flag, last and next check times, failure count and last error, plus notification and sitemap settings.", - "operationId": "monitors-get", + "description": "Returns one publisher record by key: identity, type, state-association linkage, state coverage, colours, social links, network/subscription flags and related producers. Publisher keys appear in an event's publishers list and in school records. Use nfhs-producer for the producer behind a publisher. Device and contact data is not part of this contract.", + "operationId": "nfhs-publisher", "parameters": [ { - "description": "Monitor ID returned by your account monitor create/list response; replace the illustrative example with your own ID", + "description": "Publisher key, for example cdb81ad6cb", "in": "path", - "name": "id", + "name": "key", "required": true, - "type": "string", - "x-example": "66d2f0b1c2a4e5f6a7b8c9d0" + "type": "string" } ], "produces": [ @@ -441996,25 +517102,43 @@ ], "responses": { "200": { - "description": "Monitor", + "description": "OK", "schema": { - "$ref": "#/definitions/webmonitor.monitorResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nfhs.PublisherResponse" + } + }, + "type": "object" + } + ] } }, - "401": { - "description": "Authentication required", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Monitor not found", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -442025,34 +517149,55 @@ "ApiKeyAuth": [] } ], - "summary": "Get a website-change monitor", + "summary": "Get one NFHS Network publisher", "tags": [ - "Monitors" + "NFHS" ] - }, - "patch": { + } + }, + "/nfhs/schools": { + "get": { "consumes": [ "application/json" ], - "description": "Partially updates one of the caller's own monitors. Free to call. Changing `target_type` or `sitemap` resets the stored diff baseline (fingerprint, snapshot, or URL set), so the next check establishes a fresh baseline instead of comparing against a now-meaningless prior state.", - "operationId": "monitors-update", + "description": "Returns one page of schools with identity, mascot, acronym, address, city, state, coordinates, colours, logo, network/subscription flags, publisher and producer keys and share image. Search within a state (recommended) and optionally by school name with search_term (at least 3 characters), sorted by school_name+asc or school_name+desc; page with start/size and use next_cursor for deep pages. Use nfhs-suggest for typeahead and nfhs-school for one record by key or slug.", + "operationId": "nfhs-schools", "parameters": [ { - "description": "Monitor ID returned by your account monitor create/list response; replace the illustrative example with your own ID", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "66d2f0b1c2a4e5f6a7b8c9d0" + "description": "Two-letter state code from nfhs-states; without it the national school index is searched", + "in": "query", + "name": "state", + "type": "string" }, { - "description": "Fields to update", - "in": "body", - "name": "request", - "required": true, - "schema": { - "$ref": "#/definitions/webmonitor.updateMonitorBodyDoc" - } + "description": "Free-text term matched against school names; at least 3 characters", + "in": "query", + "name": "search_term", + "type": "string" + }, + { + "description": "Sort order: school_name+asc or school_name+desc", + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Optional network flag filter; true returns schools that are part of the NFHS Network", + "in": "query", + "name": "is_network", + "type": "boolean" + }, + { + "description": "Zero-based result offset", + "in": "query", + "name": "start", + "type": "integer" + }, + { + "description": "Page size, 1 to 500; defaults to 20", + "in": "query", + "name": "size", + "type": "integer" } ], "produces": [ @@ -442060,31 +517205,37 @@ ], "responses": { "200": { - "description": "Updated monitor", + "description": "OK", "schema": { - "$ref": "#/definitions/webmonitor.monitorResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nfhs.SchoolsResponse" + } + }, + "type": "object" + } + ] } }, "400": { - "description": "Invalid parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "401": { - "description": "Authentication required", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Monitor not found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -442095,27 +517246,26 @@ "ApiKeyAuth": [] } ], - "summary": "Update a website-change monitor", + "summary": "Search NFHS Network schools", "tags": [ - "Monitors" + "NFHS" ] } }, - "/monitors/{id}/checks": { + "/nfhs/schools/{key}": { "get": { "consumes": [ "application/json" ], - "description": "Returns the caller's own monitor's most recent check runs (most recent first, capped at 50), including webhook delivery status per run.", - "operationId": "monitors-checks", + "description": "Returns one school by its key or slug with identity, mascot, acronym, address, city, state, coordinates, colours, logo, network/subscription flags, publisher and producer keys and share image. Contact fields, subscriber emails and Pixellot device mappings are not part of this contract. Use nfhs-schools or nfhs-suggest to discover the key or slug first.", + "operationId": "nfhs-school", "parameters": [ { - "description": "Monitor ID returned by your account monitor create/list response; replace the illustrative example with your own ID", + "description": "School key or slug, for example 0004954463 or covington-high-school-covington-tx", "in": "path", - "name": "id", + "name": "key", "required": true, - "type": "string", - "x-example": "66d2f0b1c2a4e5f6a7b8c9d0" + "type": "string" } ], "produces": [ @@ -442123,25 +517273,43 @@ ], "responses": { "200": { - "description": "Check history", + "description": "OK", "schema": { - "$ref": "#/definitions/webmonitor.checkListResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nfhs.SchoolResponse" + } + }, + "type": "object" + } + ] } }, - "401": { - "description": "Authentication required", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Monitor not found", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -442152,24 +517320,56 @@ "ApiKeyAuth": [] } ], - "summary": "List a monitor's check history", + "summary": "Get one NFHS Network school", "tags": [ - "Monitors" + "NFHS" ] } }, - "/motleyfool/article": { + "/nfhs/search": { "get": { - "description": "Returns one Motley Fool investing article by `url`, which must look like `https://www.fool.com/investing/YYYY/MM/DD/slug/`; only public `/investing/` URLs are accepted. The response has the title, description, section, authors, publication and update times, image URL, body `paragraphs` and a `paywalled` flag.", - "operationId": "motleyfool-article", + "consumes": [ + "application/json" + ], + "description": "Returns one page of mixed-entity search results for a term of at least 3 characters. Each item's content_type identifies its shape: school items carry school identity and location fields, state_association items carry association identity, and game items carry game scheduling fields. Optionally filter by state from nfhs-states or activity from nfhs-activities; page with start/size and use next_cursor for deep pages. Use the entity-specific routes when the type is known.", + "operationId": "nfhs-search", "parameters": [ { - "description": "Canonical The Motley Fool investing article URL", + "description": "Free-text term matched across school, association and game names; at least 3 characters", "in": "query", - "name": "url", + "name": "search_term", "required": true, - "type": "string", - "x-example": "https://www.fool.com/investing/2026/09/28/example-story/" + "type": "string" + }, + { + "description": "Two-letter state code from nfhs-states", + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "Activity name from nfhs-activities, matched case-insensitively", + "in": "query", + "name": "activity", + "type": "string" + }, + { + "description": "Zero-based result offset", + "in": "query", + "name": "start", + "type": "integer" + }, + { + "description": "Page size, 1 to 500; defaults to 20", + "in": "query", + "name": "size", + "type": "integer" + }, + { + "description": "next_cursor from a previous page; the reliable way to page beyond 10000 results", + "in": "query", + "name": "cursor", + "type": "string" } ], "produces": [ @@ -442179,7 +517379,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nfhs.SearchResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -442188,8 +517400,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -442206,26 +517418,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Motley Fool article", + "summary": "Free-text search across NFHS Network entities", "tags": [ - "The Motley Fool" + "NFHS" ] } }, - "/motleyfool/author": { + "/nfhs/sports": { "get": { - "description": "Returns a Motley Fool author's name, biography when published, image when available and recent investing articles from their author page. `url` is required, for example `https://www.fool.com/author/2104/`. Each article has a title, URL, summary, author, image, `type` and publication time.", - "operationId": "motleyfool-author", - "parameters": [ - { - "description": "Canonical The Motley Fool author URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.fool.com/author/2104/" - } + "consumes": [ + "application/json" ], + "description": "Returns the sport-slug to flags map NFHS Network uses in its sport routes, currently the is_two_team flag for each of the nine two-team sports. The keys are the URL slugs used in /sports/{sport}/... routes; the nfhs-events activity filter instead takes the activity display names returned by nfhs-activities. This endpoint takes no parameters.", + "operationId": "nfhs-sports", "produces": [ "application/json" ], @@ -442233,19 +517438,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.motleyfoolAuthorResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nfhs.SportsResponse" + } + }, + "type": "object" + } + ] } }, "503": { @@ -442260,38 +517465,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Motley Fool author profile", + "summary": "List NFHS Network sport slugs and two-team flags", "tags": [ - "The Motley Fool" + "NFHS" ] } }, - "/motleyfool/headlines": { + "/nfhs/states": { "get": { - "description": "Returns the article cards of one Motley Fool investing-news section. `section` is required: `trending-news`, `news`, `market-movers`, `tech-stock-news`, `market-trends`, `crypto-news`, `markets`, `most-active-stocks`, `top-stock-gainers` or `top-stock-losers`. Other values return a 400. Items carry the title, URL and, where present, summary, author and publication time.", - "operationId": "motleyfool-headlines", - "parameters": [ - { - "description": "The Motley Fool section slug", - "enum": [ - "trending-news", - "news", - "market-movers", - "tech-stock-news", - "market-trends", - "crypto-news", - "markets", - "most-active-stocks", - "top-stock-gainers", - "top-stock-losers" - ], - "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "trending-news" - } + "consumes": [ + "application/json" ], + "description": "Returns the complete state list NFHS Network serves (52 values, including DC and the national \"US\" pseudo-state) with the name, code and slug used by state routes. Use it to obtain the exact state code the nfhs-schools, nfhs-events, nfhs-highlights, nfhs-associations, nfhs-affiliates and nfhs-search state filters accept. This endpoint takes no parameters.", + "operationId": "nfhs-states", "produces": [ "application/json" ], @@ -442299,13 +517485,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nfhs.StatesResponse" + } + }, + "type": "object" + } + ] } }, "503": { @@ -442320,16 +517512,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Motley Fool section headlines", + "summary": "List NFHS Network states and territories", "tags": [ - "The Motley Fool" + "NFHS" ] } }, - "/motleyfool/news": { + "/nfhs/suggest": { "get": { - "description": "Returns up to 50 recent Motley Fool investing stories, newest first, each with its title, URL and publication time. Only stories at `/investing/YYYY/MM/DD/slug/` URLs are included. It takes no parameters; use the headlines endpoint for a named section.", - "operationId": "motleyfool-news", + "consumes": [ + "application/json" + ], + "description": "Returns typeahead suggestions for a partial name (at least 3 characters). The profiles scope (default) returns schools and state associations, matching the site's global search box; the schools scope returns schools only. Each item uses the school shape, so school items carry the full school identity and location fields. Use nfhs-schools for a paginated filtered search instead.", + "operationId": "nfhs-suggest", + "parameters": [ + { + "description": "Partial name, at least 3 characters", + "in": "query", + "name": "search_term", + "required": true, + "type": "string" + }, + { + "description": "Suggester scope: schools or profiles (default)", + "in": "query", + "name": "scope", + "type": "string" + }, + { + "description": "Number of suggestions, 1 to 500; defaults to 10", + "in": "query", + "name": "size", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -442337,7 +517553,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/nfhs.SuggestResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -442358,52 +517592,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Motley Fool top investing stories", + "summary": "Typeahead school and association suggestions", "tags": [ - "The Motley Fool" + "NFHS" ] } }, - "/motleyfool/sections": { + "/nike/categories": { "get": { - "description": "Lists the 10 Motley Fool Stock Market News section slugs that the headlines endpoint accepts, from `trending-news` and `news` to `most-active-stocks`, `top-stock-gainers` and `top-stock-losers`. Each entry has a `slug`, a display `name` (`news` is named Stock News) and a section `url`.", - "operationId": "motleyfool-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "List The Motley Fool news sections", - "tags": [ - "The Motley Fool" - ] - } - }, - "/nationafrica/article": { - "get": { - "description": "Returns public Nation Africa article metadata and body paragraphs from a canonical article URL. paywalled is true for a Premium story: the publisher serves an anonymous reader only the opening paragraph(s), so paragraphs is a partial teaser and nothing is bypassed. Video, photo, audio, puzzle and cartoon URLs are rejected with a 400.", - "operationId": "nationafrica-article", - "parameters": [ - { - "description": "Canonical Nation Africa article URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://nation.africa/kenya/news/rex-masai-inquest-verdict-on-killers-delayed-5608166" - } - ], + "description": "Returns Nike's full Men/Women/Kids/Jordan category and subcategory taxonomy tree, sourced directly from Nike.com's own nav mega-menu. Each top-level entry (Men, Women, Kids, Jordan) breaks down into named groups (e.g. Shoes, Clothing, Accessories, Shop By Sport -- Women additionally carries a Shop by Color group, and Jordan is organized by Men/Women/Kids instead of by product type), each with its own subcategory entries. Every subcategory (and most groups) carries a slug usable as a future category-browse endpoint's path/slug input, and is directly browsable today at https://www.nike.com/w/. This mirrors the live nav exactly, including its seasonal/promotional groups (e.g. Limited Time, New & Featured) alongside the stable structural ones -- Nike's own markup does not distinguish the two.", + "operationId": "nike-categories", "produces": [ "application/json" ], @@ -442411,17 +517612,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/nike.categoriesResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -442438,30 +517633,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get Nation Africa article content", + "summary": "List Nike's category and subcategory taxonomy", "tags": [ - "Nation Africa" + "Nike" ] } }, - "/nationafrica/author": { + "/nike/product": { "get": { - "description": "Returns one Nation Africa author's public profile: name, bio, portrait and the latest stories the profile page itself lists (a handful; the site loads the full list separately and it is not read).", - "operationId": "nationafrica-author", + "consumes": [ + "application/json" + ], + "description": "Returns product-detail data for one color variant: title, description, pricing, images, every offered size, and every other available color. slug and style_color together reproduce Nike's own product page URL (nike.com/t//) and are both returned by nike-search's product colors[].slug and colors[].style_color fields.", + "operationId": "nike-product", "parameters": [ { - "description": "Author slug, e.g. richard-munguti-11590", + "description": "Product-detail URL slug, from a search result's colors[].slug field", "in": "query", "name": "slug", + "required": true, "type": "string", - "x-example": "richard-munguti-11590" + "x-example": "vomero-premium-mens-road-running-shoes-l11miwwa" }, { - "description": "Canonical nation.africa/kenya/ URL; alternative to slug", + "description": "Style-color id, from a search result's colors[].style_color field", "in": "query", - "name": "url", + "name": "style_color", + "required": true, "type": "string", - "x-example": "https://nation.africa/kenya/richard-munguti-11590" + "x-example": "HQ2050-102" } ], "produces": [ @@ -442471,7 +517671,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.nationAfricaAuthorResponseDoc" + "$ref": "#/definitions/nike.productResponseDoc" } }, "400": { @@ -442486,6 +517686,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -442498,73 +517704,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Nation Africa author profile", + "summary": "Get a Nike product", "tags": [ - "Nation Africa" + "Nike" ] } }, - "/nationafrica/headlines": { + "/nike/product/availability": { "get": { - "description": "Returns the current story teasers of one public Nation Africa section page. Subscriber-only stories carry type \"premium\". Teasers show only a relative age, so published_at is omitted.", - "operationId": "nationafrica-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns per-size shipping availability for one product, sourced from the same anonymous mobile backend Nike's own app uses. group_key is the product's rollup key (from a search result's products[].group_key field). Each size carries its label, localized label, the color variant it belongs to, a GTIN, an available flag, Nike's own shipping-availability level (HIGH/LOW/MEDIUM/OOS), and the width grouping (Regular/Wide). Per-store pickup availability is not included -- this reflects online shipping availability.", + "operationId": "nike-product-availability", "parameters": [ { - "description": "Nation Africa section slug", - "enum": [ - "news", - "politics", - "world", - "gender", - "education", - "business", - "companies", - "enterprise", - "finance-and-markets", - "seeds-of-gold", - "sports", - "football", - "athletics", - "rugby", - "motorsports", - "other-sports", - "talkup", - "counties", - "coast", - "lake-region", - "mountain", - "nairobi-metro", - "northern", - "rift-valley", - "blogs-opinion", - "opinion", - "editorials", - "letters", - "blogs", - "cutting-edge", - "life-and-style", - "wellness", - "travel", - "relationships", - "motoring", - "family", - "culture", - "art-books", - "health", - "healthy-nation", - "elections", - "elections-news", - "presidential", - "governor-race", - "constituencies", - "explainers", - "fact-checks" - ], + "description": "Product rollup key, from a search result's products[].group_key field", "in": "query", - "name": "section", + "name": "group_key", "required": true, "type": "string", - "x-example": "news" + "x-example": "5npsVBwT" } ], "produces": [ @@ -442574,7 +517734,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/nike.availabilityResponseDoc" } }, "400": { @@ -442583,36 +517743,16 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Nation Africa section headlines", - "tags": [ - "Nation Africa" - ] - } - }, - "/nationafrica/news": { - "get": { - "description": "Returns the newest Nation Africa (Daily Nation, Kenya) stories from its public news sitemap: headline, publication time and lead image. If the sitemap returns 404, it falls back to the public News section hub, whose relative timestamps may omit publication time. Video pages are excluded.", - "operationId": "nationafrica-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "429": { + "description": "Too Many Requests", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/app.Response" } }, "503": { @@ -442627,50 +517767,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Nation Africa top stories", + "summary": "Get Nike product size availability", "tags": [ - "Nation Africa" + "Nike" ] } }, - "/nationafrica/sections": { + "/nike/product/details": { "get": { - "description": "Lists the 47 section slugs of Nation Africa's Kenya edition accepted by `nationafrica-headlines`, such as `news`, `politics`, `counties`, `football` and `fact-checks`. Each entry has its `slug`, display `name` and section page `url`. Photo, video, audio, puzzle, newsletter and cartoon pages are not included.", - "operationId": "nationafrica-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Nation Africa sections", - "tags": [ - "Nation Africa" - ] - } - }, - "/national/article": { - "get": { - "description": "Returns article metadata and the body served to an anonymous visitor for one canonical The National story URL. The endpoint does not bypass subscriber or access gates and reports paywalled when the page marks content as restricted.", - "operationId": "national-article", + "description": "Returns full product-group detail for one product's rollup key, sourced from the same anonymous mobile backend Nike's own app uses: shared product copy plus every purchasable color variant (across width groupings), each with its own pricing, sizes, and images. group_key is the product's rollup key, the same value nike-search returns as a products[].group_key field. Unlike nike-product (which returns one color variant by slug/style_color), this returns every color of the product in one response.", + "operationId": "nike-product-details", "parameters": [ { - "description": "Canonical thenationalnews.com article URL", + "description": "Product rollup key, from a search result's products[].group_key field", "in": "query", - "name": "url", + "name": "group_key", "required": true, "type": "string", - "x-example": "https://www.thenationalnews.com/future/technology/2026/09/29/ai-trump-midterm-poll-democrats/" + "x-example": "5npsVBwT" } ], "produces": [ @@ -442680,7 +517797,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/nike.productDetailsResponseDoc" } }, "400": { @@ -442695,6 +517812,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -442707,30 +517830,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get The National article content", + "summary": "Get full Nike product details", "tags": [ - "The National" + "Nike" ] } }, - "/national/author": { + "/nike/product/recommendations": { "get": { - "description": "Returns one public author topic page, its name, optional author image and the latest article cards listed on that page.", - "operationId": "national-author", + "consumes": [ + "application/json" + ], + "description": "Returns Nike's own related-product (\"Shop Similar\") recommendations for one product, sourced from the same anonymous mobile backend Nike's own app uses. style_color is the anchor product's style-color id (from a search result's colors[].style_color field). Each recommendation carries the product's style-color, rank, title/subtitle, image, PDP URL, and current pricing. Recommendations are Nike's own ranking, not a guaranteed keyword match: an unrecognized style_color returns Nike's fallback recommendations rather than an empty list or an error.", + "operationId": "nike-product-recommendations", "parameters": [ { - "description": "The National author slug, e.g. cody-combs", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "cody-combs" - }, - { - "description": "Canonical thenationalnews.com/topics/Author/ URL; alternative to slug", + "description": "Anchor product's style-color id, from a search result's colors[].style_color field", "in": "query", - "name": "url", + "name": "style_color", + "required": true, "type": "string", - "x-example": "https://www.thenationalnews.com/topics/Author/cody-combs/" + "x-example": "HQ2050-102" } ], "produces": [ @@ -442740,7 +517860,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.nationalAuthorResponseDoc" + "$ref": "#/definitions/nike.recommendationsResponseDoc" } }, "400": { @@ -442749,8 +517869,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -442767,83 +517887,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get a The National author profile", + "summary": "Get Nike product recommendations", "tags": [ - "The National" + "Nike" ] } }, - "/national/headlines": { + "/nike/product/reviews": { "get": { - "description": "Returns current The National stories for a category. Pass one of the editorial section slugs from national_sections. A valid category with no current stories returns an empty items list.", - "operationId": "national-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns one page of a Nike product's customer reviews, plus an aggregate rating summary (average rating and a per-star rating breakdown) that Nike's own product-detail endpoint does not otherwise expose. slug and style_color are the same values nike-product accepts (from a search result's colors[].slug/colors[].style_color fields). A product with no reviews yet returns a well-formed empty result rather than an error. Requesting a page beyond the available result pages returns a not-found error.", + "operationId": "nike-product-reviews", "parameters": [ { - "description": "The National editorial section slug", - "enum": [ - "news", - "news/uae", - "news/gulf", - "news/mena", - "mena/arab-showcase", - "news/us", - "news/uk", - "news/europe", - "news/asia", - "business", - "business/aviation", - "business/economy", - "business/energy", - "business/money", - "business/property", - "business/banking", - "business/uk", - "business/markets", - "in-focus", - "opinion", - "opinion/comment", - "opinion/editorial", - "opinion/obituaries", - "opinion/cartoon", - "opinion/feedback", - "future", - "future/science", - "future/space", - "future/technology", - "climate", - "climate/environment", - "climate/road-to-net-zero", - "health", - "arts-culture", - "arts-culture/art-design", - "arts-culture/books", - "arts-culture/film-tv", - "arts-culture/music-stage", - "arts-culture/pop-culture", - "lifestyle", - "travel", - "lifestyle/fashion-beauty", - "lifestyle/food", - "lifestyle/motoring", - "magazine", - "lifestyle/luxury", - "lifestyle/home-garden", - "lifestyle/wellbeing", - "lifestyle/things-to-do", - "sport", - "sport/football", - "sport/cricket", - "sport/f1", - "sport/tennis", - "sport/combat-sports", - "sport/cycling", - "weekend" - ], + "description": "Product-detail URL slug, from a search result's colors[].slug field", "in": "query", - "name": "section", + "name": "slug", "required": true, "type": "string", - "x-example": "news" + "x-example": "vomero-premium-mens-road-running-shoes-l11miwwa" + }, + { + "description": "Style-color id, from a search result's colors[].style_color field", + "in": "query", + "name": "style_color", + "required": true, + "type": "string", + "x-example": "HQ2050-102" + }, + { + "description": "One-based page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -442853,7 +517932,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/nike.productReviewsResponseDoc" } }, "400": { @@ -442862,37 +517941,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get The National section headlines", - "tags": [ - "The National" - ] - } - }, - "/national/news": { - "get": { - "description": "Returns current The National UAE stories.", - "operationId": "national-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -442912,50 +517965,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get The National top stories", + "summary": "Get Nike product reviews", "tags": [ - "The National" + "Nike" ] } }, - "/national/sections": { + "/nike/search": { "get": { - "description": "Returns all 57 editorial categories in The National's section taxonomy that are accepted by national_headlines. Podcast, newsletter, puzzle, partner and promotional surfaces are excluded.", - "operationId": "national-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get The National sections", - "tags": [ - "The National" - ] - } - }, - "/nationalpost/article": { - "get": { - "description": "Returns public National Post article metadata and body paragraphs from a canonical article URL. paywalled is true when the publisher marks the story subscriber-only or registration-gated; National Post gates these stories in the reader's browser but still serves the complete text to an anonymous request, so paragraphs is the whole body and nothing is bypassed. Category, tag, author and Sponsored URLs are rejected with a 400.", - "operationId": "nationalpost-article", + "description": "Searches Nike.com product listings by keyword, or browses a category/subcategory listing by slug, with real pagination. Exactly one of keyword or category is required. Returns product groups with pricing, colorway images, and every purchasable color variant, plus filter and subcategory navigation data (facet_nav) already present on the same response -- both keyword search and a category listing's first page include filter groups (Gender, Color, Price, Size, and similar); only a category listing includes a breadcrumb trail and subcategory drill-down options, and only its first page (a category listing's later pages do not repeat navigation data). Keyword search is best-effort relevance, not a guaranteed keyword match: for an obscure or nonsense keyword, Nike's own search index falls back to its own recommended results instead of returning an empty list, and there is currently no reliable signal in the response to distinguish a true keyword match from that fallback behavior. A keyword Nike's own search router treats as structurally empty (for example a punctuation-only query) does return a genuine empty result. Category values come from nike-categories' own slug field, or from a prior response's own facet_nav navigation paths (with the leading /w/ stripped). Requesting a page beyond the available result pages returns a not-found error.", + "operationId": "nike-search", "parameters": [ { - "description": "Canonical National Post article URL", + "description": "Search keyword. Exactly one of keyword or category is required.", "in": "query", - "name": "url", - "required": true, + "name": "keyword", "type": "string", - "x-example": "https://nationalpost.com/news/politics/carney-will-miss-target-balancing-operating-budget-pbo-says" + "x-example": "running shoes" + }, + { + "description": "Category/subcategory browse slug, from nike-categories' own slug field or a prior response's facet_nav navigation. Exactly one of keyword or category is required.", + "in": "query", + "name": "category", + "type": "string", + "x-example": "mens-jordan-shoes-37eefznik1zy7ok" + }, + { + "description": "One-based page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -442965,7 +518008,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/nike.searchResponseDoc" } }, "400": { @@ -442980,6 +518023,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -442992,30 +518041,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get National Post article content", + "summary": "Search or browse Nike products", "tags": [ - "National Post" + "Nike" ] } }, - "/nationalpost/author": { + "/nike/stores": { "get": { - "description": "Returns one National Post author's public profile: name, bio when the author has one, the total number of stories the page attributes to them, and their latest stories (first page).", - "operationId": "nationalpost-author", + "consumes": [ + "application/json" + ], + "description": "Searches Nike's physical retail store locator by coordinates and radius. Returns each nearby store's name, address, phone, coordinates, distance, and store page URL. A location with no nearby stores within the given radius returns a well-formed empty result.", + "operationId": "nike-stores", "parameters": [ { - "description": "Author slug, e.g. stuckpostmedia-com", + "description": "Latitude, -90 to 90", "in": "query", - "name": "slug", - "type": "string", - "x-example": "stuckpostmedia-com" + "name": "lat", + "required": true, + "type": "number", + "x-example": 40.75 }, { - "description": "Canonical nationalpost.com/author// URL; alternative to slug", + "description": "Longitude, -180 to 180", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://nationalpost.com/author/stuckpostmedia-com/" + "name": "lng", + "required": true, + "type": "number", + "x-example": -73.99 + }, + { + "description": "Search radius in miles, defaults to 50", + "in": "query", + "name": "radius_miles", + "type": "integer", + "x-example": 50 + }, + { + "description": "One-based page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -443025,7 +518093,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.nationalPostAuthorResponseDoc" + "$ref": "#/definitions/nike.storesResponseDoc" } }, "400": { @@ -443040,6 +518108,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -443052,71 +518126,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a National Post author profile", + "summary": "Find nearby Nike stores", "tags": [ - "National Post" + "Nike" ] } }, - "/nationalpost/headlines": { + "/nike/suggest": { "get": { - "description": "Returns National Post headlines for one section; `section` is required and takes one of 45 slugs such as `canada`, `hockey` or `deals`. The top-level sections `health`, `opinion`, `longreads`, `modern-life`, `travel`, `entertainment`, `shopping-essentials` and `sports` return 10 stories with publication time and byline. Others return up to about 45 without either. Sponsored stories are left out.", - "operationId": "nationalpost-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns Nike's own search-box suggestions (typeahead) for a partial query, the same \"Top Suggestions\" list shown while typing into Nike's search box: a flat list of suggested search phrases, no product data.", + "operationId": "nike-suggest", "parameters": [ { - "description": "National Post section slug", - "enum": [ - "canada", - "true-crime", - "politics", - "health", - "world", - "israel-middle-east", - "opinion", - "longreads", - "modern-life", - "food", - "horoscopes", - "style-beauty", - "travel", - "travel-canada", - "travel-usa", - "travel-international", - "travel-cruises", - "travel-guide", - "entertainment", - "books", - "celebrity", - "movies", - "music", - "theatre", - "television", - "business-essentials", - "shopping-essentials", - "buy-canadian", - "home-living", - "outdoor-living", - "kitchen-dining", - "tech", - "personal-care", - "entertainment-hobbies", - "gift-guide", - "deals", - "sports", - "hockey", - "baseball", - "basketball", - "football", - "soccer", - "golf", - "tennis", - "driving" - ], + "description": "Partial search query", "in": "query", - "name": "section", + "name": "query", "required": true, "type": "string", - "x-example": "canada" + "x-example": "running shoes" } ], "produces": [ @@ -443126,7 +518156,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/nike.suggestResponseDoc" } }, "400": { @@ -443135,37 +518165,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get National Post section headlines", - "tags": [ - "National Post" - ] - } - }, - "/nationalpost/news": { - "get": { - "description": "Returns the latest 10 National Post stories across all sections, with no parameters. Each item has a title, canonical article URL, one-line summary, publication time and byline. Use `nationalpost-headlines` to read a single section.", - "operationId": "nationalpost-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "503": { "description": "Service Unavailable", @@ -443179,50 +518183,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get National Post top stories", - "tags": [ - "National Post" - ] - } - }, - "/nationalpost/sections": { - "get": { - "description": "Lists the 45 National Post section slugs accepted by `nationalpost-headlines`, such as `canada`, `opinion`, `hockey` and `gift-guide`, each with its display `name` and category page `url`. Links that leave nationalpost.com (Financial Post, Driving.ca, puzzles, classifieds, e-paper) and the paid Sponsored categories are not included.", - "operationId": "nationalpost-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get National Post sections", + "summary": "Get Nike search-box suggestions", "tags": [ - "National Post" + "Nike" ] } }, - "/nbc/article": { + "/ninetofivegoogle/article": { "get": { - "description": "Returns public NBC News article metadata and body paragraphs from a canonical article URL. This does not bypass login, subscription, or other access controls.", - "operationId": "nbc-article", + "description": "Returns public 9to5Google article metadata and readable body paragraphs from a canonical dated article URL. Audio-first podcast archive slugs are excluded from the sections list; podcast episodes that appear in the main feed can still be read when their page exposes metadata and paragraphs.", + "operationId": "ninetofivegoogle-article", "parameters": [ { - "description": "Canonical www.nbcnews.com article URL", + "description": "Canonical 9to5Google article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.nbcnews.com/news/us-news/ice-shooting-austin-texas-rcna598870" + "x-example": "https://9to5google.com/2026/09/29/pixel-11-hilight-messages-qpr2/" } ], "produces": [ @@ -443232,7 +518210,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nbc.articleResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -443247,12 +518225,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -443265,24 +518237,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get NBC News article content", + "summary": "Get a 9to5Google article", "tags": [ - "NBC News" + "9to5Google" ] } }, - "/nbc/author": { + "/ninetofivegoogle/author": { "get": { - "description": "Returns an NBC News author's byline metadata (job title, bio, social links) and their recent articles from a canonical author URL.", - "operationId": "nbc-author", + "description": "Returns a 9to5Google author profile from `url`, a canonical `https://9to5google.com/author//` address. The response has the author's `name`, avatar, `biography`, `social_links` and the first page of recent articles, each with title, URL, summary and image. Social-link types and dates are as the author's page shows them.", + "operationId": "ninetofivegoogle-author", "parameters": [ { - "description": "Canonical NBC News author URL", + "description": "Canonical 9to5Google author URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.nbcnews.com/author/daniella-silva-ncpn211" + "x-example": "https://9to5google.com/author/technacity/" } ], "produces": [ @@ -443292,7 +518264,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nbc.authorResponseDoc" + "$ref": "#/definitions/publicnews.ninetofivegoogleAuthorResponseDoc" } }, "400": { @@ -443307,12 +518279,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -443325,33 +518291,89 @@ "ApiKeyAuth": [] } ], - "summary": "Get an NBC News author profile", + "summary": "Get a 9to5Google author profile", "tags": [ - "NBC News" + "9to5Google" ] } }, - "/nbc/headlines": { + "/ninetofivegoogle/headlines": { "get": { - "description": "Returns recent NBC News stories for one section. `section` is required and must be one of `news`, `world`, `us-news`, `politics`, `business`, `science` or `health`. Each item has a title and URL, and may include summary, author, publication time and image.", - "operationId": "nbc-headlines", + "description": "Returns recent 9to5Google headlines for one guide or editorial archive. `section` is required and takes a slug such as `gemini`, `google-pixel-9` or `wear-os`; an unknown or missing value returns an invalid-params error. There are 58 guide feeds and five editorial archives, and some hold fewer than 100 entries.", + "operationId": "ninetofivegoogle-headlines", "parameters": [ { - "description": "NBC News RSS section slug: news, world, us-news, politics, business, science, or health", + "description": "Slug returned by ninetofivegoogle_sections", "enum": [ - "news", - "world", - "us-news", - "politics", - "business", - "science", - "health" + "gemini", + "google-pixel-9-pro-fold", + "google-pixel-9-pro-xl", + "google-pixel-9-pro", + "google-pixel-9", + "google-pixel-8-pro", + "google-pixel-8", + "google-pixel-watch-3", + "google-pixel-watch", + "google-pixel-buds-pro-2", + "google-pixel-buds-pro", + "google-nest-hub", + "google-nest-hub-max", + "google-nest-mini", + "google-nest-audio", + "nest-thermostat", + "nest-cam", + "google-nest-doorbell", + "android-17", + "android-auto", + "wear-os", + "samsung", + "oneplus", + "oppo", + "xiaomi", + "google-chrome", + "chrome-os", + "google-tv", + "android-tv", + "chromecast", + "chromecast-with-google-tv", + "gmail", + "google-meet", + "google-chat", + "google-calendar", + "google-keep", + "google-drive", + "google-docs", + "youtube", + "youtube-music", + "youtube-tv", + "android", + "android-14", + "android-15", + "android-15-beta", + "apk-insight", + "apps-and-updates-2", + "exclusives", + "fitbit", + "google", + "google-apps", + "google-assistant", + "google-home", + "google-pixel", + "pixel-11-buyers-guide", + "google-play", + "google-search", + "made-by-google", + "feature-exclusives", + "feature-review", + "feature-newsletter", + "feature-videos", + "feature-sponsored-post" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "news" + "x-example": "gemini" } ], "produces": [ @@ -443361,7 +518383,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nbc.headlinesResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -443370,18 +518392,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -443394,16 +518404,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get NBC News section headlines", + "summary": "Get 9to5Google section headlines", "tags": [ - "NBC News" + "9to5Google" ] } }, - "/nbc/news": { + "/ninetofivegoogle/news": { "get": { - "description": "Returns the current NBC News top stories across the site, with no parameters. Each item has a title and URL, and may include summary, author, publication time and image. Use `nbc-headlines` to read one section.", - "operationId": "nbc-news", + "description": "Returns recent 9to5Google stories with no input needed. Each item has a title, canonical URL, summary, publication time and author. Cross-network links are filtered out, so returned items use canonical 9to5Google story URLs.", + "operationId": "ninetofivegoogle-news", "produces": [ "application/json" ], @@ -443411,7 +518421,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nbc.newsResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -443432,16 +518442,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get NBC News top stories", + "summary": "Get 9to5Google top stories", "tags": [ - "NBC News" + "9to5Google" ] } }, - "/nbc/sections": { + "/ninetofivegoogle/sections": { "get": { - "description": "Lists the seven NBC News section slugs accepted by `nbc-headlines`: `news`, `world`, `us-news`, `politics`, `business`, `science` and `health`. Each entry has its `slug`, display `name` and `url`.", - "operationId": "nbc-sections", + "description": "Returns the 58 topic guides linked by the current first-party Guides directory and five separately navigable editorial feeds. Use each slug with the headlines endpoint.", + "operationId": "ninetofivegoogle-sections", "produces": [ "application/json" ], @@ -443449,13 +518459,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nbc.sectionsResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -443464,24 +518468,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get NBC News RSS sections", + "summary": "Discover 9to5Google sections", "tags": [ - "NBC News" + "9to5Google" ] } }, - "/ndtv/article": { + "/ninetofivemac/article": { "get": { - "description": "Returns public NDTV article metadata and body paragraphs from a canonical article URL. premium is true for NDTV Premium stories; paragraphs are always the text NDTV serves on its public page.", - "operationId": "ndtv-article", + "description": "Returns a 9to5Mac article by `url`, a canonical `9to5mac.com` address in the form `/YYYY/MM/DD//`: title, description, publication and update times, `authors`, `section`, image and the body `paragraphs`. The affiliate FTC disclaimer and embedded-tweet text are left out, and `paywalled` is never set because the articles are free.", + "operationId": "ninetofivemac-article", "parameters": [ { - "description": "Canonical NDTV article URL", + "description": "Canonical 9to5Mac article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.ndtv.com/india-news/indias-power-shortage-tops-summer-levels-as-el-nino-dries-up-hydropower-12091489" + "x-example": "https://9to5mac.com/2026/09/24/heres-everything-new-for-apple-maps-in-ios-27/" } ], "produces": [ @@ -443491,7 +518495,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ndtvArticleResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -443518,33 +518522,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get NDTV article content", + "summary": "Get 9to5Mac article content", "tags": [ - "NDTV" + "9to5Mac" ] } }, - "/ndtv/author": { + "/ninetofivemac/author": { "get": { - "description": "Returns an NDTV author's or news agency's byline profile (name, role, biography, image) and one page of authored news stories from a canonical author URL. Request sequential pages until articles is empty; NDTV does not expose a total count.", - "operationId": "ndtv-author", + "description": "Returns a 9to5Mac author profile from `url`, a canonical `https://9to5mac.com/author//` address: name, avatar, `biography`, `social_links` and the first page of recent articles. Each social link's `type` comes from the page's icon, and each article's `published_at` is the page's own text, such as `9 hours ago`, not a timestamp.", + "operationId": "ninetofivemac-author", "parameters": [ { - "description": "Canonical NDTV author or agency URL", + "description": "Canonical 9to5Mac author URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.ndtv.com/authors/ritu-singh-6082" - }, - { - "default": 1, - "description": "1-based authored news story page; request sequentially until articles is empty", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page", - "type": "integer" + "x-example": "https://9to5mac.com/author/chmiller44/" } ], "produces": [ @@ -443554,7 +518549,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ndtvAuthorResponseDoc" + "$ref": "#/definitions/publicnews.ninetofivemacAuthorResponseDoc" } }, "400": { @@ -443581,82 +518576,61 @@ "ApiKeyAuth": [] } ], - "summary": "Get an NDTV author profile", + "summary": "Get a 9to5Mac author profile", "tags": [ - "NDTV" + "9to5Mac" ] } }, - "/ndtv/headlines": { + "/ninetofivemac/headlines": { "get": { - "description": "Returns the current story cards from one NDTV section page: title, canonical URL, and, where the section shows them, summary, publication time, byline, and image.", - "operationId": "ndtv-headlines", + "description": "Returns the newest posts from one 9to5Mac topic guide, up to 100. `section` is required and takes a guide slug such as `iphone`, `macbook-pro`, `vision-pro` or `how-to`; an unknown or missing value returns an invalid-params error. Smaller guides, such as `apple-watch-se`, return fewer. Items carry title, URL, summary, time and author.", + "operationId": "ninetofivemac-headlines", "parameters": [ { - "description": "NDTV section slug from ndtv-sections", + "description": "9to5Mac guide slug", "enum": [ - "latest", - "india", - "world", - "world-india-global", - "world-diaspora", - "opinion", - "spotlight", - "business-news", - "south", - "cities", - "bangalore-news", - "chennai-news", - "delhi-news", - "mumbai-news", - "others-news", - "ahmedabad-news", - "allahabad-news", - "amritsar-news", - "bhopal-news", - "bhubaneshwar-news", - "chandigarh-news", - "ghaziabad-news", - "goa-news", - "gurgaon-news", - "guwahati-news", - "hyderabad-news", - "jaipur-news", - "kanpur-news", - "kolkata-news", - "lucknow-news", - "noida-news", - "patna-news", - "pune-news", - "srinagar-news", - "thiruvananthapuram-news", - "andhra-pradesh-news", - "karnataka-news", - "kerala-news", - "tamil-nadu-news", - "telangana-news", - "education", - "education-exams-news", - "education-school-news", - "education-campus-news", - "education-study-abroad", - "education-latest", - "health", - "entertainment", - "lifestyle", - "food", - "travel", - "auto", - "science", - "offbeat", - "trends", - "feature" + "iphone", + "mac", + "macbook-pro", + "macbook-air", + "imac", + "mac-mini", + "mac-studio", + "mac-pro", + "ipad-pro", + "ipad-air", + "ipad-mini", + "ipad", + "ipados", + "apple-watch", + "apple-watch-ultra", + "apple-health", + "apple-watch-se", + "vision-pro", + "visionos", + "apple-music", + "airpods", + "homepod", + "apple-tv", + "review", + "how-to", + "aapl", + "apple-store", + "apple-arcade", + "apple-card", + "apple-silicon", + "apple-one", + "apple-fitness", + "carplay", + "siri", + "homekit" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "latest" + "x-example": "iphone" } ], "produces": [ @@ -443687,81 +518661,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get NDTV section headlines", - "tags": [ - "NDTV" - ] - } - }, - "/ndtv/latest-videos": { - "get": { - "description": "Returns one page from NDTV's separate latest-videos feed. This feed is not a category slug; use page sequentially. Results contain metadata only, with no media bytes or player URLs.", - "operationId": "ndtv-latest-videos", - "parameters": [ - { - "default": 1, - "description": "1-based latest-video page", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page", - "type": "integer" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.ndtvLatestVideosResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get NDTV latest videos", + "summary": "Get 9to5Mac section headlines", "tags": [ - "NDTV" + "9to5Mac" ] } }, - "/ndtv/live-blog": { + "/ninetofivemac/news": { "get": { - "description": "Returns the metadata and ordered updates of an NDTV live blog, given its canonical article `url`. The blog carries title, description, section, authors, image and publish and update times. Each update has its title, URL, body text, timestamps, authors and image when NDTV gives them. A regular article URL is rejected with an error.", - "operationId": "ndtv-live-blog", - "parameters": [ - { - "description": "Canonical NDTV live-blog article URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.ndtv.com/business-news/stock-market-live-updates-12112191" - } - ], + "description": "Returns the latest 9to5Mac Apple news stories with no input needed. Each item has a title, canonical article URL, summary, publication time, author and image when present. The list can include podcast episode posts, such as Happy Hour and 9to5Mac Daily, alongside news articles.", + "operationId": "ninetofivemac-news", "produces": [ "application/json" ], @@ -443769,17 +518678,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ndtvLiveBlogResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -443796,27 +518699,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get structured updates from an NDTV live blog", + "summary": "Get 9to5Mac top stories", "tags": [ - "NDTV" + "9to5Mac" ] } }, - "/ndtv/live-blogs": { + "/ninetofivemac/sections": { "get": { - "description": "Returns one page of public NDTV live-blog cards. Pages include only www.ndtv.com live blogs; sister-site cards are excluded. NDTV does not expose a total count or continuation marker; request sequential pages until the upstream reports not found.", - "operationId": "ndtv-live-blogs", - "parameters": [ - { - "default": 1, - "description": "1-based index page", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page", - "type": "integer" - } - ], + "description": "Lists the 35 9to5Mac topic guides that the headlines endpoint accepts as `section`. Each has a `slug` (for example `iphone`, `mac-studio` or `carplay`), a display `name` and the guide's feed `url`.", + "operationId": "ninetofivemac-sections", "produces": [ "application/json" ], @@ -443824,25 +518716,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ndtvLiveBlogsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -443851,16 +518725,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get NDTV live-blog index", + "summary": "Get 9to5Mac sections", "tags": [ - "NDTV" + "9to5Mac" ] } }, - "/ndtv/news": { + "/njcom/news": { "get": { - "description": "Returns the stories NDTV published in roughly the last two days, newest first, from its public news sitemap: title, canonical URL, publication time, keywords, and lead image.", - "operationId": "ndtv-news", + "description": "Returns current NJ.com top stories, including title, canonical URL, short summary, author, publication time, and image where available. Category discovery, section headlines, and article and author routes are not available.", + "operationId": "njcom-news", "produces": [ "application/json" ], @@ -443889,33 +518763,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get NDTV latest stories", + "summary": "Get NJ.com top stories", "tags": [ - "NDTV" + "NJ.com" ] } }, - "/ndtv/search": { + "/npr/article": { "get": { - "description": "Returns one page of NDTV's public news topic results (15 story cards per page). Unknown topics return 404. The result page supports no sort or filter parameters.", - "operationId": "ndtv-search", + "description": "Returns an NPR article by canonical `url` in the form `https://www.npr.org/YYYY/MM/DD/...`: title, description, section, authors, lead image, publication and update times, and body `paragraphs`. Tracking query strings and fragments are ignored; other hosts, encoded paths and non-article paths are rejected.", + "operationId": "npr-article", "parameters": [ { - "description": "Search terms", + "description": "Canonical www.npr.org article URL", "in": "query", - "name": "query", + "name": "url", "required": true, "type": "string", - "x-example": "climate change" - }, - { - "default": 1, - "description": "1-based result page", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page", - "type": "integer" + "x-example": "https://www.npr.org/2026/09/19/nx-s1-5974980/saudi-arabia-houthis-attempted-attack-capital" } ], "produces": [ @@ -443925,7 +518790,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ndtvSearchResponseDoc" + "$ref": "#/definitions/npr.articleResponseDoc" } }, "400": { @@ -443940,36 +518805,16 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Search NDTV news stories", - "tags": [ - "NDTV" - ] - } - }, - "/ndtv/sections": { - "get": { - "description": "Lists the NDTV section slugs accepted by `ndtv-headlines`, each with its display name and page URL. They cover national and world news (`latest`, `india`, `world`), city and state pages such as `mumbai-news` and `kerala-news`, and topics such as `education` and `food`. `spotlight` is NDTV's Premium hub; video, podcasts and sister sites are excluded.", - "operationId": "ndtv-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "503": { + "description": "Service Unavailable", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/app.Response" } } }, @@ -443978,24 +518823,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get NDTV sections", + "summary": "Get NPR article content", "tags": [ - "NDTV" + "NPR" ] } }, - "/ndtv/video": { + "/npr/author": { "get": { - "description": "Returns title, description, publication time, duration, and thumbnail metadata from one canonical NDTV video page. It does not fetch or return video media or player URLs.", - "operationId": "ndtv-video", + "description": "Returns an NPR author profile from a required `url` in the form `https://www.npr.org/people//`. The response has `name`, `job_title`, `bio` and the recent stories listed under Stories By, each with title, URL, summary, publication date and a lead image where the card has one. Other hosts or paths return a bad-request error.", + "operationId": "npr-author", "parameters": [ { - "description": "Canonical NDTV video URL", + "description": "Canonical www.npr.org author URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.ndtv.com/video/revanth-reddy-under-bjp-fire-over-ram-god-of-rich-shiva-of-poor-remarks-1166049" + "x-example": "https://www.npr.org/people/14562108/bill-chappell" } ], "produces": [ @@ -444005,7 +518850,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ndtvVideoResponseDoc" + "$ref": "#/definitions/npr.authorResponseDoc" } }, "400": { @@ -444020,6 +518865,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -444032,16 +518883,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get NDTV video metadata", + "summary": "Get an NPR author profile", "tags": [ - "NDTV" + "NPR" ] } }, - "/ndtv/video-categories": { + "/npr/categories": { "get": { - "description": "Returns the live-verified NDTV-hosted category slugs accepted by ndtv-videos. Categories hosted on sister domains, Shorts, and unavailable Faith are excluded.", - "operationId": "ndtv-video-categories", + "description": "Lists the sections in NPR's current navigation, each with its name, slug and URL. Pass a returned `slug` as the `topic` parameter of `npr-topic`. The list is not a fixed set, so it follows whatever sections NPR currently shows.", + "operationId": "npr-categories", "produces": [ "application/json" ], @@ -444049,7 +518900,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ndtvVideoCategoriesResponseDoc" + "$ref": "#/definitions/npr.categoriesResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -444058,53 +518921,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get NDTV video categories", + "summary": "Get NPR section navigation", "tags": [ - "NDTV" + "NPR" ] } }, - "/ndtv/videos": { + "/npr/headlines": { "get": { - "description": "Returns one page of metadata cards from a supported NDTV-hosted video category. Use ndtv-video-categories to discover the complete supported category set; request pages sequentially. This returns no media bytes or player URLs.", - "operationId": "ndtv-videos", - "parameters": [ - { - "description": "NDTV video category slug from ndtv-video-categories", - "enum": [ - "news", - "business", - "entertainment", - "auto", - "exclusive", - "features", - "environment", - "fashion", - "travel", - "elections", - "comedy", - "property", - "art", - "beauty", - "lifestyle", - "tech360" - ], - "in": "query", - "name": "category", - "required": true, - "type": "string", - "x-example": "news" - }, - { - "default": 1, - "description": "1-based category result page", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page", - "type": "integer" - } - ], + "description": "Returns the current NPR headlines across the site, with no parameters and no section filter. Each item has a title, canonical URL, summary, publication time and author when one is given.", + "operationId": "npr-headlines", "produces": [ "application/json" ], @@ -444112,17 +518938,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ndtvVideosResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/npr.headlinesResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -444139,24 +518959,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get videos from an NDTV category", + "summary": "Get NPR site-wide headlines", "tags": [ - "NDTV" + "NPR" ] } }, - "/news18/article": { + "/npr/topic": { "get": { - "description": "Returns a News18 article by canonical `url` in the form `/
/-.html`, optionally with a subsection. The response has title, description, authors, lead image, publication and update times, a `paywalled` flag and body `paragraphs`. `section` is the article's own category, so it can be a subsection such as `business/markets` that `news18-sections` does not list.", - "operationId": "news18-article", + "description": "Returns the newest public NPR stories from one section archive page. topic is a section slug; use npr-categories for the current value space.", + "operationId": "npr-topic", "parameters": [ { - "description": "Canonical News18 article URL", + "description": "NPR section slug", "in": "query", - "name": "url", + "name": "topic", "required": true, "type": "string", - "x-example": "https://www.news18.com/india/example-article-slug-10350678.html" + "x-example": "politics" } ], "produces": [ @@ -444166,7 +518986,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/npr.topicResponseDoc" } }, "400": { @@ -444181,6 +519001,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -444193,24 +519019,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get News18 article content", + "summary": "Get NPR section headlines", "tags": [ - "News18" + "NPR" ] } }, - "/news18/author": { + "/numbeo/cost-of-living/city/{slug}": { "get": { - "description": "Returns a News18 author profile from a required `url` in the form `https://www.news18.com/byline/.html`. The response has `name`, `biography`, `image_url`, `social_links` (whichever of website, X/Twitter, Facebook, Instagram, YouTube and LinkedIn are set) and recent articles with `published_at` in RFC3339 UTC. Wire and staff bylines often have no bio or links.", - "operationId": "news18-author", + "consumes": [ + "application/json" + ], + "description": "Returns itemized cost-of-living prices for one city (restaurants, markets, transportation, utilities, rent, and more), grouped by category.", + "operationId": "numbeo-cost-of-living-city", "parameters": [ { - "description": "Canonical News18 author URL", - "in": "query", - "name": "url", + "description": "Numbeo city slug", + "in": "path", + "name": "slug", "required": true, "type": "string", - "x-example": "https://www.news18.com/byline/jane-doe-12345.html" + "x-example": "Los-Angeles" } ], "produces": [ @@ -444220,7 +519049,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.news18AuthorResponseDoc" + "$ref": "#/definitions/numbeo.costOfLivingCityResponseDoc" } }, "400": { @@ -444235,6 +519064,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -444247,44 +519082,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a News18 author profile", + "summary": "Get a Numbeo city's cost-of-living prices", "tags": [ - "News18" + "Numbeo" ] } }, - "/news18/headlines": { + "/numbeo/cost-of-living/country": { "get": { - "description": "Returns recent News18 stories for one section. `section` is required and takes one of 18 slugs, such as `india`, `cricket`, `elections`, `viral` or `breaking-news`. Each item has a title and URL, and may include summary, author, publication time and image.", - "operationId": "news18-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns aggregate itemized cost-of-living prices for a country, plus the headline cost-of-living indices for every city Numbeo tracks there.", + "operationId": "numbeo-cost-of-living-country", "parameters": [ { - "description": "News18 RSS section slug", - "enum": [ - "india", - "world", - "cricket", - "business", - "sports", - "movies", - "lifestyle", - "tech", - "auto", - "opinion", - "elections", - "politics", - "viral", - "explainers", - "education-career", - "astrology", - "cities", - "breaking-news" - ], + "description": "Country name as Numbeo spells it", "in": "query", - "name": "section", + "name": "country", "required": true, "type": "string", - "x-example": "india" + "x-example": "Vietnam" } ], "produces": [ @@ -444294,7 +519112,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/numbeo.costOfLivingCountryResponseDoc" } }, "400": { @@ -444303,6 +519121,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -444315,16 +519145,38 @@ "ApiKeyAuth": [] } ], - "summary": "Get News18 section headlines", + "summary": "Get a Numbeo country's cost-of-living prices", "tags": [ - "News18" + "Numbeo" ] } }, - "/news18/news": { + "/numbeo/cost-of-living/rankings": { "get": { - "description": "Returns the current News18 top stories, with no parameters. Each item has a title and URL, and may include summary, author, publication time and image. Use `news18-headlines` to read one section.", - "operationId": "news18-news", + "consumes": [ + "application/json" + ], + "description": "Returns the global cost-of-living city ranking (Cost of Living, Rent, Cost of Living Plus Rent, Groceries, Restaurant Price, and Local Purchasing Power indices), either the continuously-updated current index or a historical periodic snapshot.", + "operationId": "numbeo-cost-of-living-rankings", + "parameters": [ + { + "description": "current (default) or historical", + "enum": [ + "current", + "historical" + ], + "in": "query", + "name": "scope", + "type": "string" + }, + { + "description": "Required when scope=historical, e.g. 2026-mid or 2025", + "in": "query", + "name": "period", + "type": "string", + "x-example": "2026-mid" + } + ], "produces": [ "application/json" ], @@ -444332,11 +519184,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/numbeo.rankingsResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -444353,16 +519211,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get News18 top stories", + "summary": "Get the global Numbeo cost-of-living city ranking", "tags": [ - "News18" + "Numbeo" ] } }, - "/news18/sections": { + "/numbeo/cost-of-living/rankings-by-country": { "get": { - "description": "Lists the 18 News18 section slugs accepted by `news18-headlines`, such as `india`, `world`, `cricket`, `explainers` and `education-career`. Each entry has its `slug`, display `name` and `url`.", - "operationId": "news18-sections", + "consumes": [ + "application/json" + ], + "description": "Returns the global country-level cost-of-living ranking (Cost of Living, Rent, Cost of Living Plus Rent, Groceries, Restaurant Price, and Local Purchasing Power indices).", + "operationId": "numbeo-cost-of-living-rankings-by-country", "produces": [ "application/json" ], @@ -444370,7 +519231,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/numbeo.rankingsByCountryResponseDoc" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -444379,24 +519252,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get News18 RSS sections", + "summary": "Get the global Numbeo cost-of-living country ranking", "tags": [ - "News18" + "Numbeo" ] } }, - "/news24/article": { + "/numbeo/indices/city/{slug}": { "get": { - "description": "Returns public News24 article metadata and body paragraphs from a canonical article URL. Subscriber-only articles return the standfirst as the only paragraph with paywalled set to true.", - "operationId": "news24-article", + "consumes": [ + "application/json" + ], + "description": "Returns one city's data for a Numbeo index family (quality of life, crime, health care, pollution, traffic, or property investment): headline indices, and (depending on the family) titled sub-index sections and/or itemized prices.", + "operationId": "numbeo-indices-city", "parameters": [ { - "description": "Canonical News24 article URL", + "description": "Numbeo city slug", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "Los-Angeles" + }, + { + "description": "Index family", + "enum": [ + "quality-of-life", + "crime", + "health-care", + "pollution", + "traffic", + "property-investment" + ], "in": "query", - "name": "url", + "name": "index", "required": true, "type": "string", - "x-example": "https://www.news24.com/world/untangling-the-meth-mexican-cartels-set-up-huge-labs-in-sa-to-service-demand-in-australia-20260924-0692" + "x-example": "quality-of-life" } ], "produces": [ @@ -444406,7 +519298,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/numbeo.indicesCityResponseDoc" } }, "400": { @@ -444421,6 +519313,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -444433,99 +519331,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get News24 article content", + "summary": "Get a Numbeo city's data for an index family", "tags": [ - "News24" + "Numbeo" ] } }, - "/news24/headlines": { + "/numbeo/indices/country": { "get": { - "description": "Returns News24 headlines for one section. `section` is required and takes a path such as `business/markets`, `sport/rugby/springboks` or `politics`, from the 73 listed by `news24-sections`. Each item has a title and URL, and `type` is `subscriber` on cards News24 marks subscriber-only. Summary, author, publication time and image appear when available.", - "operationId": "news24-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns one country's aggregate data for a Numbeo index family, plus every city Numbeo tracks there with its index breakdown.", + "operationId": "numbeo-indices-country", "parameters": [ { - "description": "News24 section path", + "description": "Country name as Numbeo spells it", + "in": "query", + "name": "country", + "required": true, + "type": "string", + "x-example": "Vietnam" + }, + { + "description": "Index family", "enum": [ - "business", - "business/climate-future", - "business/climate-future/energy", - "business/climate-future/environment", - "business/climate-future/news", - "business/climate-future/solutions", - "business/companies", - "business/consumer-lookout", - "business/economy", - "business/markets", - "business/money", - "business/opinion", - "business/tech", - "investigations", - "investigations/eskomfiles", - "investigations/phala-phala", - "investigations/silenced", - "life", - "life/arts-and-entertainment", - "life/books", - "life/food", - "life/lifestyle-trends", - "life/motoring", - "life/relationships", - "life/travel", - "life/wellness", - "life/wine", - "opinions", - "opinions/analysis", - "opinions/cartoons", - "opinions/columnists", - "opinions/explainers", - "opinions/fridaybriefing/editions", - "opinions/letters", - "opinions/reader-hub", - "politics", - "southafrica", - "southafrica/crime-and-courts", - "southafrica/debunking", - "southafrica/education", - "southafrica/good-news", - "southafrica/good-news/outdoor", - "southafrica/health-news", - "southafrica/schools-hub", - "southafrica/weather", - "specialreports", - "sport", - "sport/columnists", - "sport/cricket", - "sport/cricket/proteas", - "sport/cricket/sa20", - "sport/golf", - "sport/motorsport", - "sport/motorsport/formula-one", - "sport/other-sport", - "sport/rugby", - "sport/rugby/bulls", - "sport/rugby/cheetahs", - "sport/rugby/lions", - "sport/rugby/pnpgoldcup", - "sport/rugby/sharks", - "sport/rugby/springboks", - "sport/rugby/stormers", - "sport/rugby/urc", - "sport/soccer", - "sport/soccer/bafana-bafana-and-banyana-banyana", - "sport/soccer/english-premier-league", - "sport/soccer/psl", - "sport/soccer/worldcup", - "sport/tennis", - "sunday", - "world", - "world/africa" + "quality-of-life", + "crime", + "health-care", + "pollution", + "traffic", + "property-investment" ], "in": "query", - "name": "section", + "name": "index", "required": true, "type": "string", - "x-example": "business" + "x-example": "quality-of-life" } ], "produces": [ @@ -444535,7 +519377,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/numbeo.indicesCountryResponseDoc" } }, "400": { @@ -444544,6 +519386,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -444556,16 +519410,54 @@ "ApiKeyAuth": [] } ], - "summary": "Get News24 section headlines", + "summary": "Get a Numbeo country's data for an index family", "tags": [ - "News24" + "Numbeo" ] } }, - "/news24/news": { + "/numbeo/indices/rankings": { "get": { - "description": "Returns the current News24 top stories, with no parameters. Each item has a title, canonical URL and image. `type` is `subscriber` when News24 marks the story subscriber-only and is omitted for freely readable stories.", - "operationId": "news24-news", + "consumes": [ + "application/json" + ], + "description": "Returns the global city ranking for a Numbeo index family, either the continuously-updated current index or a historical periodic snapshot.", + "operationId": "numbeo-indices-rankings", + "parameters": [ + { + "description": "Index family", + "enum": [ + "quality-of-life", + "crime", + "health-care", + "pollution", + "traffic", + "property-investment" + ], + "in": "query", + "name": "index", + "required": true, + "type": "string", + "x-example": "quality-of-life" + }, + { + "description": "current (default) or historical", + "enum": [ + "current", + "historical" + ], + "in": "query", + "name": "scope", + "type": "string" + }, + { + "description": "Required when scope=historical, e.g. 2026-mid or 2025", + "in": "query", + "name": "period", + "type": "string", + "x-example": "2026-mid" + } + ], "produces": [ "application/json" ], @@ -444573,11 +519465,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/numbeo.indicesRankingsResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -444594,16 +519492,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get News24 top stories", + "summary": "Get the global Numbeo city ranking for an index family", "tags": [ - "News24" + "Numbeo" ] } }, - "/news24/sections": { + "/numbeo/indices/rankings-by-country": { "get": { - "description": "Lists the 73 News24 sections accepted by `news24-headlines`. Each entry has a `slug` (the URL path under news24.com, which may contain `/`, as in `sport/rugby/springboks`), a display `name` and a page `url`. Top-level groups include `business`, `life`, `opinions`, `southafrica`, `sport` and `world`.", - "operationId": "news24-sections", + "consumes": [ + "application/json" + ], + "description": "Returns the global Numbeo ranking of countries for one index family, selected by the required `index`: `quality-of-life`, `crime`, `health-care`, `pollution`, `traffic` or `property-investment`. Each row has its `rank`, country and a list of named index values, such as the Crime Index and Safety Index for `crime`.", + "operationId": "numbeo-indices-rankings-by-country", + "parameters": [ + { + "description": "Index family", + "enum": [ + "quality-of-life", + "crime", + "health-care", + "pollution", + "traffic", + "property-investment" + ], + "in": "query", + "name": "index", + "required": true, + "type": "string", + "x-example": "quality-of-life" + } + ], "produces": [ "application/json" ], @@ -444611,11 +519530,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/numbeo.indicesRankingsByCountryResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -444626,24 +519557,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get News24 sections", + "summary": "Get the global Numbeo country ranking for an index family", "tags": [ - "News24" + "Numbeo" ] } }, - "/newscomau/article": { + "/nydailynews/article": { "get": { - "description": "Returns a News.com.au article by canonical `url`, which must be a `www.news.com.au` link ending in `/news-story/<32-character-id>`. The response has title, description, section, authors, lead image, publication and update times, a `paywalled` flag and body `paragraphs`. `authors` is empty for wire or agency pieces with no byline.", - "operationId": "newscomau-article", + "description": "Returns public New York Daily News article metadata and body paragraphs from a canonical article URL. For subscriber-only articles the response carries the free lead-in with paywalled set to true.", + "operationId": "nydailynews-article", "parameters": [ { - "description": "Canonical News.com.au article URL", + "description": "Canonical New York Daily News article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.news.com.au/national/example-headline/news-story/0123456789abcdef0123456789abcdef" + "x-example": "https://www.nydailynews.com/2026/09/24/city-hall-must-explain-why-they-broke-disclosure-rules/" } ], "produces": [ @@ -444680,24 +519611,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get News.com.au article content", + "summary": "Get New York Daily News article content", "tags": [ - "News.com.au" + "New York Daily News" ] } }, - "/newscomau/author": { + "/nydailynews/author": { "get": { - "description": "Returns a News.com.au staff writer's profile (name, job title, headshot, biography, social links) and recent articles from a canonical author URL.", - "operationId": "newscomau-author", + "description": "Returns one New York Daily News author's public profile: name, job title, bio, public email and X/Twitter handle, and their recent articles.", + "operationId": "nydailynews-author", "parameters": [ { - "description": "Canonical News.com.au author URL", + "description": "Author slug, e.g. rocco-parascandola", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "rocco-parascandola" + }, + { + "description": "Canonical nydailynews.com/author// URL; alternative to slug", "in": "query", "name": "url", - "required": true, "type": "string", - "x-example": "https://www.news.com.au/the-team/example-writer" + "x-example": "https://www.nydailynews.com/author/rocco-parascandola/" } ], "produces": [ @@ -444707,7 +519644,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newscomauAuthorResponseDoc" + "$ref": "#/definitions/publicnews.nyDailyNewsAuthorResponseDoc" } }, "400": { @@ -444734,24 +519671,62 @@ "ApiKeyAuth": [] } ], - "summary": "Get a News.com.au author profile", + "summary": "Get a New York Daily News author profile", "tags": [ - "News.com.au" + "New York Daily News" ] } }, - "/newscomau/headlines": { + "/nydailynews/headlines": { "get": { - "description": "Returns fresh headlines from one News.com.au section or category listing page. section accepts any slug returned by GET /newscomau/sections (236 values, too many to enumerate inline -- see that endpoint for the full, current list), for example \"national\" or the nested \"national/nsw-act/politics\".", - "operationId": "newscomau-headlines", + "description": "Returns New York Daily News headlines for one section, newest first, up to about 100 stories. `section` is required and takes one of 36 slugs such as `crime-public-safety`, `new-york-yankees` or `opinion`; other values return an invalid-params error. Items carry a title and URL, plus publication time, byline, excerpt and lead image where shown. Team pages can list fewer stories out of season.", + "operationId": "nydailynews-headlines", "parameters": [ { - "description": "News.com.au section slug, from GET /newscomau/sections", + "description": "New York Daily News section slug", + "enum": [ + "news", + "crime-public-safety", + "politics", + "new-york-politics", + "business", + "health", + "national", + "world", + "local-news", + "new-york-news", + "education", + "transportation", + "news-obituaries", + "sports", + "mlb", + "new-york-yankees", + "new-york-mets", + "nfl", + "new-york-giants", + "new-york-jets", + "nba", + "new-york-knicks", + "brooklyn-nets", + "wnba", + "new-york-liberty", + "nhl", + "new-york-rangers", + "new-york-islanders", + "soccer", + "opinion", + "editorials", + "viva", + "things-to-do", + "restaurants-food-drink", + "horoscopes", + "best-reviews" + ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "national" + "x-example": "news" } ], "produces": [ @@ -444782,16 +519757,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get News.com.au section headlines", + "summary": "Get New York Daily News section headlines", "tags": [ - "News.com.au" + "New York Daily News" ] } }, - "/newscomau/news": { + "/nydailynews/news": { "get": { - "description": "Returns the current News.com.au top stories, with no parameters and no section filter. Each item has a title and URL, and may include summary, author, publication time and image.", - "operationId": "newscomau-news", + "description": "Returns the current New York Daily News top stories, with no parameters. Each item has a title and canonical article URL, plus publication time, byline, excerpt and lead image where the story card shows them. Use `nydailynews-headlines` for a single section.", + "operationId": "nydailynews-news", "produces": [ "application/json" ], @@ -444802,12 +519777,6 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -444820,16 +519789,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get News.com.au top stories", + "summary": "Get New York Daily News top stories", "tags": [ - "News.com.au" + "New York Daily News" ] } }, - "/newscomau/sections": { + "/nydailynews/sections": { "get": { - "description": "Returns the full News.com.au section/category navigation inventory (236 entries as of 2026-09-23), each with a slug, display name, and public listing URL. Use a returned slug as the section parameter on GET /newscomau/headlines.", - "operationId": "newscomau-sections", + "description": "Lists the 36 New York Daily News section slugs accepted by `nydailynews-headlines`, such as `crime-public-safety`, `new-york-mets`, `nfl` and `things-to-do`. Each entry has its `slug` (the last path segment of the section URL), display `name` and `url`. Topic (`/tag/...`) pages and off-site properties are not sections.", + "operationId": "nydailynews-sections", "produces": [ "application/json" ], @@ -444846,24 +519815,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get News.com.au sections", + "summary": "Get New York Daily News sections", "tags": [ - "News.com.au" + "New York Daily News" ] } }, - "/newsmax/article": { + "/nymag/article": { "get": { - "description": "Returns a Newsmax article by canonical `url` in the form `/
//YYYY/MM/DD/id/`: title, description, section, authors, lead image, publication and update times, and body `paragraphs`. `authors` may be empty for wire or staff-aggregated stories. Paywalled Platinum URLs are not accepted.", - "operationId": "newsmax-article", + "description": "Returns a New York Magazine article by its canonical `url`: title, description, section, authors, lead image, publication and update times, a `paywalled` flag and the body `paragraphs`. Subscriber-only or blocked articles return an upstream error.", + "operationId": "nymag-article", "parameters": [ { - "description": "Canonical Newsmax article URL", + "description": "Canonical New York Magazine article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.newsmax.com/newsfront/example-article-slug/2026/09/23/id/1270487/" + "x-example": "https://nymag.com/intelligencer/example.html" } ], "produces": [ @@ -444900,24 +519869,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Newsmax article content", + "summary": "Get New York Magazine article content", "tags": [ - "Newsmax" + "New York Magazine" ] } }, - "/newsmax/author": { + "/nymag/author": { "get": { - "description": "Returns a Newsmax Insiders (opinion columnist) profile from a required `url` such as `https://www.newsmax.com/insiders//id-/`. The response has `name`, `biography`, `image_url` and recent columns. `biography` is omitted when Newsmax's separate profile page is unavailable, and article `published_at` is date text such as `Sep 23, 2026`.", - "operationId": "newsmax-author", + "description": "Returns a New York Magazine author profile from a required `url` in the form `https://nymag.com/author//`. The response has `name`, `job_title` (empty for some contributors), `bio` and recent articles with title, URL, `excerpt` and a `section` label. Each article's `published_at` is the page's date text, such as `Sept. 20, 2026`, not a timestamp.", + "operationId": "nymag-author", "parameters": [ { - "description": "Canonical Newsmax Insiders author URL", + "description": "Canonical New York Magazine author URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.newsmax.com/insiders/janedoe/id-1234/" + "x-example": "https://nymag.com/author/john-herrman/" } ], "produces": [ @@ -444927,7 +519896,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsmaxAuthorResponseDoc" + "$ref": "#/definitions/publicnews.nymagAuthorResponseDoc" } }, "400": { @@ -444954,46 +519923,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Newsmax Insiders author profile", + "summary": "Get a New York Magazine author profile", "tags": [ - "Newsmax" + "New York Magazine" ] } }, - "/newsmax/headlines": { + "/nymag/headlines": { "get": { - "description": "Returns recent Newsmax stories for one section. `section` is required and takes one of 20 slugs, such as `newsfront`, `politics`, `health-news`, `finance-news` or `insiders`. Each item has a title and URL, and may include summary, author, publication time and image.", - "operationId": "newsmax-headlines", + "description": "Returns recent New York Magazine stories for one site section. `section` is required and takes one of nine slugs: `intelligencer`, `thecut`, `vulture`, `grub-street`, `curbed`, `strategist`, `select-all`, `science` or `daily`. Each item has a title and URL, and may include summary, author, publication time and image.", + "operationId": "nymag-headlines", "parameters": [ { - "description": "Newsmax RSS section slug", + "description": "New York Magazine section slug", "enum": [ - "newsfront", - "us", - "politics", - "thewire", - "scitech", - "health-news", - "cancer", - "brain-health", - "diet-and-fitness", - "diabetes", - "natural-health", - "anti-aging", - "finance-headlines", - "street-talk", - "finance-news", - "economy", - "companies", - "investing-analysis", - "global-talk", - "insiders" + "intelligencer", + "thecut", + "vulture", + "grub-street", + "curbed", + "strategist", + "select-all", + "science", + "daily" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "newsfront" + "x-example": "intelligencer" } ], "produces": [ @@ -445024,16 +519982,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Newsmax section headlines", + "summary": "Get New York Magazine section headlines", "tags": [ - "Newsmax" + "New York Magazine" ] } }, - "/newsmax/news": { + "/nymag/news": { "get": { - "description": "Returns the current Newsmax top stories from the Newsfront section, with no parameters. Each item has a title and URL, and may include summary, author, publication time and image. Use `newsmax-headlines` for other sections.", - "operationId": "newsmax-news", + "description": "Returns the current New York Magazine top stories, with no parameters. Each item has a title and URL, and may include summary, author, publication time and image. Use `nymag-headlines` to read one of its sections.", + "operationId": "nymag-news", "produces": [ "application/json" ], @@ -445044,12 +520002,6 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -445062,16 +520014,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Newsmax top stories", + "summary": "Get New York Magazine top stories", "tags": [ - "Newsmax" + "New York Magazine" ] } }, - "/newsmax/sections": { + "/nymag/sections": { "get": { - "description": "Lists the 20 Newsmax section slugs accepted by `newsmax-headlines`, such as `newsfront`, `scitech`, `street-talk` and `global-talk`. Each entry has its `slug`, display `name` and `url`. `insiders` is the combined opinion section, and `finance-headlines` is the finance section's Headlines listing.", - "operationId": "newsmax-sections", + "description": "Lists the New York Magazine section slugs accepted by `nymag-headlines`, such as `intelligencer`, `thecut`, `vulture` and `grub-street`. Each entry has its stable `slug`, display `name` and section `url`.", + "operationId": "nymag-sections", "produces": [ "application/json" ], @@ -445088,24 +520040,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Newsmax RSS sections", + "summary": "Get New York Magazine sections", "tags": [ - "Newsmax" + "New York Magazine" ] } }, - "/newsweek/article": { + "/nypost/article": { "get": { - "description": "Returns a Newsweek article by canonical `url`, which must be a `newsweek.com` link ending in a numeric article id. The response has title, description, section, authors, lead image, publication and update times, a `paywalled` flag and body `paragraphs`.", - "operationId": "newsweek-article", + "description": "Returns a New York Post article by canonical `url` in the form `https://nypost.com/YYYY/MM/DD/
//`: title, description, section, authors, lead image, publication and update times, a `paywalled` flag and the body `paragraphs`.", + "operationId": "nypost-article", "parameters": [ { - "description": "Canonical Newsweek article URL", + "description": "Canonical New York Post article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.newsweek.com/example-article-1234567" + "x-example": "https://nypost.com/2026/09/23/us-news/example-article-slug/" } ], "produces": [ @@ -445142,37 +520094,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Newsweek article content", + "summary": "Get New York Post article content", "tags": [ - "Newsweek" + "New York Post" ] } }, - "/newsweek/author": { + "/nypost/author": { "get": { - "description": "Returns a Newsweek author profile by `slug` (for example `jennifer-fink`) or a newsweek.com authors `url`; supply exactly one. `page` selects the 1-based page of recent articles (default 1) and overrides any page in `url`. The response has `name`, `job_title`, `bio`, `email`, `image_url`, articles and `has_next_page`; a page past the end gives an empty `articles` list, not an error.", - "operationId": "newsweek-author", + "description": "Returns a New York Post author profile from a required `url` in the form `https://nypost.com/author//`. The response has `name`, `biography`, `image_url`, `social_links` and recent articles. Staff and wire bylines often have no headshot or bio, and each article's `published_at` is the page's date text such as `September 20, 2026 | 10:06pm`.", + "operationId": "nypost-author", "parameters": [ { - "description": "Author slug, e.g. jennifer-fink", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "jennifer-fink" - }, - { - "description": "Canonical newsweek.com/authors/ URL, optionally with a ?page= query; alternative to slug", + "description": "Canonical New York Post author URL", "in": "query", "name": "url", + "required": true, "type": "string", - "x-example": "https://www.newsweek.com/authors/jennifer-fink" - }, - { - "default": 1, - "description": "1-based page number; overrides any page number in url", - "in": "query", - "name": "page", - "type": "integer" + "x-example": "https://nypost.com/author/jane-doe/" } ], "produces": [ @@ -445182,7 +520121,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsweekAuthorResponseDoc" + "$ref": "#/definitions/publicnews.nypostAuthorResponseDoc" } }, "400": { @@ -445209,47 +520148,80 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Newsweek author profile", + "summary": "Get a New York Post author profile", "tags": [ - "Newsweek" + "New York Post" ] } }, - "/newsweek/headlines": { + "/nypost/headlines": { "get": { - "description": "Returns recent Newsweek stories for one section. `section` is required and takes one of 21 slugs, such as `politics`, `fact-check`, `better-planet`, `personal-finance` or `my-turn`. Each item has a title and URL, and may include summary, author, publication time and image.", - "operationId": "newsweek-headlines", + "description": "Returns recent New York Post stories for one section. `section` is required and takes one of 54 slugs, such as `us-news`, `metro`, `nfl`, `business`, `real-estate` or `astrology`. Each item has a title and URL, and may include summary, author, publication time and image.", + "operationId": "nypost-headlines", "parameters": [ { - "description": "Newsweek section slug", + "description": "New York Post RSS section slug", "enum": [ - "news", - "opinion", + "us-news", + "metro", + "long-island", "politics", - "world", - "us", + "world-news", + "sports", + "nfl", + "mlb", + "olympics", + "nba", + "nhl", + "college-football", + "college-basketball", + "wnba", + "sports-plus", + "betting", "business", - "technology", - "health", + "opinion", "entertainment", - "sports", - "fact-check", - "better-planet", - "life", + "tv", + "movies", + "music", + "celebrities", + "awards", + "theater", + "shopping", + "lifestyle", + "weird-but-true", + "sex-and-relationships", + "viral-trends", + "human-interest", + "parenting", + "fashion-and-beauty", + "food-and-drink", "travel", - "pets", - "autos", - "relationships", - "tech-science", - "personal-finance", - "better-workplaces", - "my-turn" + "health", + "wellness", + "fitness", + "health-care", + "medicine", + "mens-health", + "womens-health", + "mental-health", + "nutrition", + "real-estate", + "alexa", + "media", + "tech", + "science", + "space", + "environment", + "wildlife", + "archaeology", + "astrology" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "news" + "x-example": "us-news" } ], "produces": [ @@ -445280,16 +520252,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Newsweek section headlines", + "summary": "Get New York Post section headlines", "tags": [ - "Newsweek" + "New York Post" ] } }, - "/newsweek/news": { + "/nypost/news": { "get": { - "description": "Returns the current Newsweek top stories, with no parameters. Each item has a title and URL, and may include summary, author, publication time and image. Use `newsweek-headlines` to read one section.", - "operationId": "newsweek-news", + "description": "Returns the current New York Post top stories, with no parameters. Each item has a title and URL, and may include summary, author, publication time and image. Use `nypost-headlines` to read a single section.", + "operationId": "nypost-news", "produces": [ "application/json" ], @@ -445318,16 +520290,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Newsweek top stories", + "summary": "Get New York Post top stories", "tags": [ - "Newsweek" + "New York Post" ] } }, - "/newsweek/sections": { + "/nypost/sections": { "get": { - "description": "Lists the 21 Newsweek section slugs accepted by `newsweek-headlines`, such as `news`, `world`, `us`, `fact-check` and `pets`. Each entry has its `slug`, display `name` and section page `url`.", - "operationId": "newsweek-sections", + "description": "Lists the 54 New York Post section slugs accepted by `nypost-headlines`, such as `us-news`, `politics`, `nfl`, `celebrities` and `mental-health`. Each entry has its `slug`, display `name` and `url`.", + "operationId": "nypost-sections", "produces": [ "application/json" ], @@ -445344,24 +520316,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Newsweek sections", + "summary": "Get New York Post RSS sections", "tags": [ - "Newsweek" + "New York Post" ] } }, - "/newyorker/article": { + "/nyt/article": { "get": { - "description": "Returns public The New Yorker article metadata and body paragraphs from a canonical article URL. The New Yorker uses a metered paywall: when a page marks itself as gated, only the publicly served text is returned and is_truncated is true; is_accessible_for_free reports the page's own access flag.", - "operationId": "newyorker-article", + "description": "Returns a New York Times article by canonical `url`, with `title`, `description`, `published_at`, `updated_at`, `section`, `authors`, `keywords`, `image_url` and the body `paragraphs` in order. Query strings and fragments are stripped. A subscription barrier returns `403`, and non-article or non-NYT URLs return `400`.", + "operationId": "nyt-article", "parameters": [ { - "description": "Canonical The New Yorker article URL", + "description": "Canonical NYT article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.newyorker.com/news/the-lede/example-article-slug" + "x-example": "https://www.nytimes.com/2026/09/20/us/politics/example-story.html" } ], "produces": [ @@ -445371,7 +520343,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newyorkerArticleResponseDoc" + "$ref": "#/definitions/nyt.articleResponseDoc" } }, "400": { @@ -445380,6 +520352,12 @@ "$ref": "#/definitions/app.Response" } }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "404": { "description": "Not Found", "schema": { @@ -445404,24 +520382,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get The New Yorker article content", + "summary": "Get a New York Times article's content", "tags": [ - "The New Yorker" + "New York Times" ] } }, - "/newyorker/author": { + "/nyt/author": { "get": { - "description": "Returns a The New Yorker contributor's name, photo, biography, external profile links, and the first page of their recent articles from a canonical contributor URL.", - "operationId": "newyorker-author", + "description": "Returns one New York Times contributor's public byline page: name, tagline, About/Contact panels, and their recent articles from a canonical author URL.", + "operationId": "nyt-author", "parameters": [ { - "description": "Canonical The New Yorker contributor URL", + "description": "Canonical NYT author URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.newyorker.com/contributors/casey-cep" + "x-example": "https://www.nytimes.com/by/maggie-haberman" } ], "produces": [ @@ -445431,7 +520409,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newyorkerAuthorResponseDoc" + "$ref": "#/definitions/nyt.authorResponseDoc" } }, "400": { @@ -445440,6 +520418,12 @@ "$ref": "#/definitions/app.Response" } }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "404": { "description": "Not Found", "schema": { @@ -445464,41 +520448,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a The New Yorker contributor profile", + "summary": "Get a New York Times contributor profile", "tags": [ - "The New Yorker" + "New York Times" ] } }, - "/newyorker/headlines": { + "/nyt/categories": { "get": { - "description": "Returns fresh headlines from one public The New Yorker section feed. Section must be one of the slugs returned by the sections endpoint.", - "operationId": "newyorker-headlines", - "parameters": [ - { - "description": "The New Yorker section slug", - "enum": [ - "everything", - "news", - "culture", - "humor", - "magazine", - "business", - "tech", - "daily-comment", - "news-desk", - "cultural-comment", - "photo-booth", - "page-turner", - "borowitz-report" - ], - "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "everything" - } - ], + "description": "Lists the public New York Times editorial navigation taxonomy, including top-level categories and nested destinations. Use /nyt/sections for the separately verified RSS-backed section values accepted by /nyt/headlines; product links, newsletters, and podcasts are not included as article categories.", + "operationId": "nyt-categories", "produces": [ "application/json" ], @@ -445506,13 +520465,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/nyt.categoriesResponseDoc" } }, "429": { @@ -445533,16 +520486,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get The New Yorker section headlines", + "summary": "List New York Times navigation categories", "tags": [ - "The New Yorker" + "New York Times" ] } }, - "/newyorker/news": { + "/nyt/headlines": { "get": { - "description": "Returns fresh The New Yorker top stories from its public RSS feed: title, canonical URL, summary, author, publication time, lead image, and the department label (for example \"News / The Lede\").", - "operationId": "newyorker-news", + "description": "Returns a New York Times section RSS feed: each story's title, canonical URL, description, author, publication time, and lead image. Section must be a slug returned by /nyt/sections.", + "operationId": "nyt-headlines", + "parameters": [ + { + "description": "Section slug from /nyt/sections", + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "World" + } + ], "produces": [ "application/json" ], @@ -445550,46 +520513,20 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/nyt.headlinesResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get The New Yorker top stories", - "tags": [ - "The New Yorker" - ] - } - }, - "/newyorker/sections": { - "get": { - "description": "Lists every The New Yorker section accepted by the headlines endpoint, with slug, display name, and feed URL. This is the complete set of public text-article feeds the publisher serves; cartoon, podcast, video, and puzzle feeds are not included.", - "operationId": "newyorker-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -445609,19 +520546,16 @@ "ApiKeyAuth": [] } ], - "summary": "List The New Yorker sections", + "summary": "Get the latest stories in a New York Times section", "tags": [ - "The New Yorker" + "New York Times" ] } }, - "/nike/categories": { + "/nyt/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Nike's full Men/Women/Kids/Jordan category and subcategory taxonomy tree, sourced directly from Nike.com's own nav mega-menu. Each top-level entry (Men, Women, Kids, Jordan) breaks down into named groups (e.g. Shoes, Clothing, Accessories, Shop By Sport -- Women additionally carries a Shop by Color group, and Jordan is organized by Men/Women/Kids instead of by product type), each with its own subcategory entries. Every subcategory (and most groups) carries a slug usable as a future category-browse endpoint's path/slug input, and is directly browsable today at https://www.nike.com/w/. This mirrors the live nav exactly, including its seasonal/promotional groups (e.g. Limited Time, New & Featured) alongside the stable structural ones -- Nike's own markup does not distinguish the two.", - "operationId": "nike-categories", + "description": "Lists the New York Times section slugs accepted by `nyt-headlines`, such as `World` and `Business`, each with its display `name` and `url`. It covers only the sections that endpoint takes; use `nyt-categories` for the broader site navigation, including Politics, DealBook and Wirecutter.", + "operationId": "nyt-sections", "produces": [ "application/json" ], @@ -445629,7 +520563,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nike.categoriesResponseDoc" + "$ref": "#/definitions/nyt.sectionsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -445650,35 +520590,24 @@ "ApiKeyAuth": [] } ], - "summary": "List Nike's category and subcategory taxonomy", + "summary": "List New York Times sections", "tags": [ - "Nike" + "New York Times" ] } }, - "/nike/product": { + "/nzherald/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns product-detail data for one color variant: title, description, pricing, images, every offered size, and every other available color. slug and style_color together reproduce Nike's own product page URL (nike.com/t//) and are both returned by nike-search's product colors[].slug and colors[].style_color fields.", - "operationId": "nike-product", + "description": "Returns public NZ Herald article metadata and body paragraphs from a canonical article URL. A premium (subscriber-only) article URL returns a permission error instead of a partial or fabricated body.", + "operationId": "nzherald-article", "parameters": [ { - "description": "Product-detail URL slug, from a search result's colors[].slug field", - "in": "query", - "name": "slug", - "required": true, - "type": "string", - "x-example": "vomero-premium-mens-road-running-shoes-l11miwwa" - }, - { - "description": "Style-color id, from a search result's colors[].style_color field", + "description": "Canonical NZ Herald article URL", "in": "query", - "name": "style_color", + "name": "url", "required": true, "type": "string", - "x-example": "HQ2050-102" + "x-example": "https://www.nzherald.co.nz/nz/example-article-slug/ABCDEFGHIJKLMNOPQRST1234/" } ], "produces": [ @@ -445688,7 +520617,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nike.productResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -445697,14 +520626,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Forbidden", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -445721,27 +520650,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Nike product", + "summary": "Get NZ Herald article content", "tags": [ - "Nike" + "NZ Herald" ] } }, - "/nike/product/availability": { + "/nzherald/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns per-size shipping availability for one product, sourced from the same anonymous mobile backend Nike's own app uses. group_key is the product's rollup key (from a search result's products[].group_key field). Each size carries its label, localized label, the color variant it belongs to, a GTIN, an available flag, Nike's own shipping-availability level (HIGH/LOW/MEDIUM/OOS), and the width grouping (Regular/Wide). Per-store pickup availability is not included -- this reflects online shipping availability.", - "operationId": "nike-product-availability", + "description": "Returns an NZ Herald author profile from a required `url` in the form `https://www.nzherald.co.nz/author//`. The response has `name`, `job_title`, `location`, `email`, `biography`, `image_url` and recent articles. Each field reflects what the author's page shows, and article `published_at` is RFC3339 where the page gives a machine-readable timestamp.", + "operationId": "nzherald-author", "parameters": [ { - "description": "Product rollup key, from a search result's products[].group_key field", + "description": "Canonical NZ Herald author URL", "in": "query", - "name": "group_key", + "name": "url", "required": true, "type": "string", - "x-example": "5npsVBwT" + "x-example": "https://www.nzherald.co.nz/author/jane-doe/" } ], "produces": [ @@ -445751,7 +520677,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nike.availabilityResponseDoc" + "$ref": "#/definitions/publicnews.nzheraldAuthorResponseDoc" } }, "400": { @@ -445766,12 +520692,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -445784,27 +520704,70 @@ "ApiKeyAuth": [] } ], - "summary": "Get Nike product size availability", + "summary": "Get an NZ Herald author profile", "tags": [ - "Nike" + "NZ Herald" ] } }, - "/nike/product/details": { + "/nzherald/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns full product-group detail for one product's rollup key, sourced from the same anonymous mobile backend Nike's own app uses: shared product copy plus every purchasable color variant (across width groupings), each with its own pricing, sizes, and images. group_key is the product's rollup key, the same value nike-search returns as a products[].group_key field. Unlike nike-product (which returns one color variant by slug/style_color), this returns every color of the product in one response.", - "operationId": "nike-product-details", + "description": "Returns recent NZ Herald headlines for one section. `section` is required and takes a slug listed by `nzherald-sections`, such as `nz`, `business`, `rugby`, `politics` or `world`. Each item has a title and URL. A URL may point at a premium article, which `nzherald-article` rejects with a permission error.", + "operationId": "nzherald-headlines", "parameters": [ { - "description": "Product rollup key, from a search result's products[].group_key field", + "description": "NZ Herald section slug", + "enum": [ + "business", + "markets-with-madison", + "media-insider", + "business-reports", + "small-business", + "personal-finance", + "economy", + "companies", + "markets", + "entertainment", + "lifestyle", + "society-insider", + "nz", + "crime", + "education", + "politics", + "trailblazers", + "property", + "sport", + "commonwealth-games", + "cricket", + "olympics", + "paralympics", + "rugby", + "rugby-league", + "football", + "basketball", + "golf", + "boxing", + "netball", + "athletics", + "cycling", + "motorsport", + "racing", + "sailing", + "tennis", + "ufc", + "technology", + "travel", + "travel-news", + "world", + "kahu", + "talanoa", + "the-selection" + ], "in": "query", - "name": "group_key", + "name": "section", "required": true, "type": "string", - "x-example": "5npsVBwT" + "x-example": "business" } ], "produces": [ @@ -445814,7 +520777,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nike.productDetailsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -445823,18 +520786,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -445847,29 +520798,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get full Nike product details", + "summary": "Get NZ Herald section headlines", "tags": [ - "Nike" + "NZ Herald" ] } }, - "/nike/product/recommendations": { + "/nzherald/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Nike's own related-product (\"Shop Similar\") recommendations for one product, sourced from the same anonymous mobile backend Nike's own app uses. style_color is the anchor product's style-color id (from a search result's colors[].style_color field). Each recommendation carries the product's style-color, rank, title/subtitle, image, PDP URL, and current pricing. Recommendations are Nike's own ranking, not a guaranteed keyword match: an unrecognized style_color returns Nike's fallback recommendations rather than an empty list or an error.", - "operationId": "nike-product-recommendations", - "parameters": [ - { - "description": "Anchor product's style-color id, from a search result's colors[].style_color field", - "in": "query", - "name": "style_color", - "required": true, - "type": "string", - "x-example": "HQ2050-102" - } - ], + "description": "Returns the current New Zealand Herald top stories, with no parameters. Each item has a title and URL, and may include summary, author, publication time and image. Use `nzherald-headlines` to read one section.", + "operationId": "nzherald-news", "produces": [ "application/json" ], @@ -445877,13 +520815,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nike.recommendationsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -445904,44 +520836,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Nike product recommendations", + "summary": "Get NZ Herald top stories", "tags": [ - "Nike" + "NZ Herald" ] } }, - "/nike/product/reviews": { + "/nzherald/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of a Nike product's customer reviews, plus an aggregate rating summary (average rating and a per-star rating breakdown) that Nike's own product-detail endpoint does not otherwise expose. slug and style_color are the same values nike-product accepts (from a search result's colors[].slug/colors[].style_color fields). A product with no reviews yet returns a well-formed empty result rather than an error. Requesting a page beyond the available result pages returns a not-found error.", - "operationId": "nike-product-reviews", - "parameters": [ - { - "description": "Product-detail URL slug, from a search result's colors[].slug field", - "in": "query", - "name": "slug", - "required": true, - "type": "string", - "x-example": "vomero-premium-mens-road-running-shoes-l11miwwa" - }, - { - "description": "Style-color id, from a search result's colors[].style_color field", - "in": "query", - "name": "style_color", - "required": true, - "type": "string", - "x-example": "HQ2050-102" - }, - { - "description": "One-based page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - } - ], + "description": "Lists the NZ Herald section slugs accepted by `nzherald-headlines`, such as `nz`, `business`, `rugby`, `technology` and `world`. Each entry has its `slug`, a display `name` (for example `New Zealand` for `nz`) and a `url`.", + "operationId": "nzherald-sections", "produces": [ "application/json" ], @@ -445949,31 +520853,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nike.productReviewsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -445982,40 +520862,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Nike product reviews", + "summary": "Get NZ Herald sections", "tags": [ - "Nike" + "NZ Herald" ] } }, - "/nike/search": { + "/ohpolly/collections": { "get": { "consumes": [ "application/json" ], - "description": "Searches Nike.com product listings by keyword, or browses a category/subcategory listing by slug, with real pagination. Exactly one of keyword or category is required. Returns product groups with pricing, colorway images, and every purchasable color variant, plus filter and subcategory navigation data (facet_nav) already present on the same response -- both keyword search and a category listing's first page include filter groups (Gender, Color, Price, Size, and similar); only a category listing includes a breadcrumb trail and subcategory drill-down options, and only its first page (a category listing's later pages do not repeat navigation data). Keyword search is best-effort relevance, not a guaranteed keyword match: for an obscure or nonsense keyword, Nike's own search index falls back to its own recommended results instead of returning an empty list, and there is currently no reliable signal in the response to distinguish a true keyword match from that fallback behavior. A keyword Nike's own search router treats as structurally empty (for example a punctuation-only query) does return a genuine empty result. Category values come from nike-categories' own slug field, or from a prior response's own facet_nav navigation paths (with the leading /w/ stripped). Requesting a page beyond the available result pages returns a not-found error.", - "operationId": "nike-search", + "description": "Returns collections from Oh Polly (https://www.ohpolly.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", + "operationId": "ohpolly-collections", "parameters": [ { - "description": "Search keyword. Exactly one of keyword or category is required.", - "in": "query", - "name": "keyword", - "type": "string", - "x-example": "running shoes" - }, - { - "description": "Category/subcategory browse slug, from nike-categories' own slug field or a prior response's facet_nav navigation. Exactly one of keyword or category is required.", + "description": "1-based page, defaults to 1", "in": "query", - "name": "category", - "type": "string", - "x-example": "mens-jordan-shoes-37eefznik1zy7ok" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "One-based page number, defaults to 1", + "description": "Maximum collections, defaults to 50 and supports up to 250", "in": "query", - "name": "page", + "name": "limit", "type": "integer", - "x-example": 1 + "x-example": 50 } ], "produces": [ @@ -446025,7 +520898,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nike.searchResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" } }, "400": { @@ -446034,12 +520907,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -446058,49 +520925,41 @@ "ApiKeyAuth": [] } ], - "summary": "Search or browse Nike products", + "summary": "List Oh Polly collections", "tags": [ - "Nike" + "Oh Polly" ] } }, - "/nike/stores": { + "/ohpolly/collections/{handle}/products": { "get": { "consumes": [ "application/json" ], - "description": "Searches Nike's physical retail store locator by coordinates and radius. Returns each nearby store's name, address, phone, coordinates, distance, and store page URL. A location with no nearby stores within the given radius returns a well-formed empty result.", - "operationId": "nike-stores", + "description": "Returns products from one Oh Polly (https://www.ohpolly.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", + "operationId": "ohpolly-collection-products", "parameters": [ { - "description": "Latitude, -90 to 90", - "in": "query", - "name": "lat", - "required": true, - "type": "number", - "x-example": 40.75 - }, - { - "description": "Longitude, -180 to 180", - "in": "query", - "name": "lng", + "description": "Collection handle", + "in": "path", + "name": "handle", "required": true, - "type": "number", - "x-example": -73.99 + "type": "string", + "x-example": "collection-handle" }, { - "description": "Search radius in miles, defaults to 50", + "description": "1-based page, defaults to 1", "in": "query", - "name": "radius_miles", + "name": "page", "type": "integer", - "x-example": 50 + "x-example": 1 }, { - "description": "One-based page number, defaults to 1", + "description": "Maximum products, defaults to 50 and supports up to 250", "in": "query", - "name": "page", + "name": "limit", "type": "integer", - "x-example": 1 + "x-example": 50 } ], "produces": [ @@ -446110,7 +520969,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nike.storesResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" } }, "400": { @@ -446143,27 +521002,33 @@ "ApiKeyAuth": [] } ], - "summary": "Find nearby Nike stores", + "summary": "List Oh Polly collection products", "tags": [ - "Nike" + "Oh Polly" ] } }, - "/nike/suggest": { + "/ohpolly/pages": { "get": { "consumes": [ "application/json" ], - "description": "Returns Nike's own search-box suggestions (typeahead) for a partial query, the same \"Top Suggestions\" list shown while typing into Nike's search box: a flat list of suggested search phrases, no product data.", - "operationId": "nike-suggest", + "description": "Lists Oh Polly's static pages, paged with `page` (default 1) and `limit` (default 50, max 250). Each page has its handle, title, URL, plain-text content and timestamps. In some responses `transport_mode` is `ssr_embedded` and items carry only `handle`, `url` and `updated_at`, so fetch a single page for its content.", + "operationId": "ohpolly-pages", "parameters": [ { - "description": "Partial search query", + "description": "1-based page, defaults to 1", "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "running shoes" + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Maximum static pages, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -446173,7 +521038,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nike.suggestResponseDoc" + "$ref": "#/definitions/shopifybrands.pagesResponseDoc" } }, "400": { @@ -446200,24 +521065,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Nike search-box suggestions", + "summary": "List Oh Polly static pages", "tags": [ - "Nike" + "Oh Polly" ] } }, - "/ninetofivegoogle/article": { + "/ohpolly/pages/{handle}": { "get": { - "description": "Returns public 9to5Google article metadata and readable body paragraphs from a canonical dated article URL. Audio-first podcast archive slugs are excluded from the sections list; podcast episodes that appear in the main feed can still be read when their page exposes metadata and paragraphs.", - "operationId": "ninetofivegoogle-article", + "consumes": [ + "application/json" + ], + "description": "Returns one Oh Polly static page by its `handle`: title, page URL, plain-text content, and created, published and updated times. Content is cleaned text, not HTML. An unknown handle returns 404. The store is fixed to Oh Polly, so no store URL is needed. Some responses include `transport_mode` set to `ssr_embedded` and omit `id`.", + "operationId": "ohpolly-page", "parameters": [ { - "description": "Canonical 9to5Google article URL", - "in": "query", - "name": "url", + "description": "Page handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "https://9to5google.com/2026/09/29/pixel-11-hilight-messages-qpr2/" + "x-example": "page-handle" } ], "produces": [ @@ -446227,7 +521095,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/shopifybrands.pageResponseDoc" } }, "400": { @@ -446242,6 +521110,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -446254,24 +521128,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get a 9to5Google article", + "summary": "Get a Oh Polly static page", "tags": [ - "9to5Google" + "Oh Polly" ] } }, - "/ninetofivegoogle/author": { + "/ohpolly/products": { "get": { - "description": "Returns a 9to5Google author profile from `url`, a canonical `https://9to5google.com/author//` address. The response has the author's `name`, avatar, `biography`, `social_links` and the first page of recent articles, each with title, URL, summary and image. Social-link types and dates are as the author's page shows them.", - "operationId": "ninetofivegoogle-author", + "consumes": [ + "application/json" + ], + "description": "Returns products from Oh Polly's (https://www.ohpolly.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", + "operationId": "ohpolly-products", "parameters": [ { - "description": "Canonical 9to5Google author URL", + "description": "1-based page, defaults to 1", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://9to5google.com/author/technacity/" + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Maximum products, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -446281,7 +521164,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ninetofivegoogleAuthorResponseDoc" + "$ref": "#/definitions/shopifybrands.productsResponseDoc" } }, "400": { @@ -446290,8 +521173,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -446308,89 +521191,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a 9to5Google author profile", + "summary": "List Oh Polly products", "tags": [ - "9to5Google" + "Oh Polly" ] } }, - "/ninetofivegoogle/headlines": { + "/ohpolly/products/{handle}": { "get": { - "description": "Returns recent 9to5Google headlines for one guide or editorial archive. `section` is required and takes a slug such as `gemini`, `google-pixel-9` or `wear-os`; an unknown or missing value returns an invalid-params error. There are 58 guide feeds and five editorial archives, and some hold fewer than 100 entries.", - "operationId": "ninetofivegoogle-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns product detail for one Oh Polly (https://www.ohpolly.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", + "operationId": "ohpolly-product", "parameters": [ { - "description": "Slug returned by ninetofivegoogle_sections", - "enum": [ - "gemini", - "google-pixel-9-pro-fold", - "google-pixel-9-pro-xl", - "google-pixel-9-pro", - "google-pixel-9", - "google-pixel-8-pro", - "google-pixel-8", - "google-pixel-watch-3", - "google-pixel-watch", - "google-pixel-buds-pro-2", - "google-pixel-buds-pro", - "google-nest-hub", - "google-nest-hub-max", - "google-nest-mini", - "google-nest-audio", - "nest-thermostat", - "nest-cam", - "google-nest-doorbell", - "android-17", - "android-auto", - "wear-os", - "samsung", - "oneplus", - "oppo", - "xiaomi", - "google-chrome", - "chrome-os", - "google-tv", - "android-tv", - "chromecast", - "chromecast-with-google-tv", - "gmail", - "google-meet", - "google-chat", - "google-calendar", - "google-keep", - "google-drive", - "google-docs", - "youtube", - "youtube-music", - "youtube-tv", - "android", - "android-14", - "android-15", - "android-15-beta", - "apk-insight", - "apps-and-updates-2", - "exclusives", - "fitbit", - "google", - "google-apps", - "google-assistant", - "google-home", - "google-pixel", - "pixel-11-buyers-guide", - "google-play", - "google-search", - "made-by-google", - "feature-exclusives", - "feature-review", - "feature-newsletter", - "feature-videos", - "feature-sponsored-post" - ], - "in": "query", - "name": "section", + "description": "Product handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "gemini" + "x-example": "product-handle" } ], "produces": [ @@ -446400,7 +521221,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/shopifybrands.productResponseDoc" } }, "400": { @@ -446409,37 +521230,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get 9to5Google section headlines", - "tags": [ - "9to5Google" - ] - } - }, - "/ninetofivegoogle/news": { - "get": { - "description": "Returns recent 9to5Google stories with no input needed. Each item has a title, canonical URL, summary, publication time and author. Cross-network links are filtered out, so returned items use canonical 9to5Google story URLs.", - "operationId": "ninetofivegoogle-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -446459,50 +521254,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get 9to5Google top stories", + "summary": "Get a Oh Polly product", "tags": [ - "9to5Google" + "Oh Polly" ] } }, - "/ninetofivegoogle/sections": { + "/ohpolly/products/{handle}/recommendations": { "get": { - "description": "Returns the 58 topic guides linked by the current first-party Guides directory and five separately navigable editorial feeds. Use each slug with the headlines endpoint.", - "operationId": "ninetofivegoogle-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Discover 9to5Google sections", - "tags": [ - "9to5Google" - ] - } - }, - "/ninetofivemac/article": { - "get": { - "description": "Returns a 9to5Mac article by `url`, a canonical `9to5mac.com` address in the form `/YYYY/MM/DD//`: title, description, publication and update times, `authors`, `section`, image and the body `paragraphs`. The affiliate FTC disclaimer and embedded-tweet text are left out, and `paywalled` is never set because the articles are free.", - "operationId": "ninetofivemac-article", + "description": "Returns recommended products for one Oh Polly (https://www.ohpolly.com) product handle. The storefront URL is fixed server-side.", + "operationId": "ohpolly-product-recommendations", "parameters": [ { - "description": "Canonical 9to5Mac article URL", - "in": "query", - "name": "url", + "description": "Product handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "https://9to5mac.com/2026/09/24/heres-everything-new-for-apple-maps-in-ios-27/" + "x-example": "product-handle" + }, + { + "description": "Maximum products, defaults to 10 and supports up to 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + }, + { + "description": "Recommendation intent. Allowed values: related, complementary", + "enum": [ + "related", + "complementary" + ], + "in": "query", + "name": "intent", + "type": "string", + "x-example": "related" } ], "produces": [ @@ -446512,7 +521302,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" } }, "400": { @@ -446527,6 +521317,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -446539,24 +521335,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get 9to5Mac article content", + "summary": "List Oh Polly product recommendations", "tags": [ - "9to5Mac" + "Oh Polly" ] } }, - "/ninetofivemac/author": { + "/ohpolly/search/suggest": { "get": { - "description": "Returns a 9to5Mac author profile from `url`, a canonical `https://9to5mac.com/author//` address: name, avatar, `biography`, `social_links` and the first page of recent articles. Each social link's `type` comes from the page's icon, and each article's `published_at` is the page's own text, such as `9 hours ago`, not a timestamp.", - "operationId": "ninetofivemac-author", + "consumes": [ + "application/json" + ], + "description": "Returns products, collections, and query suggestions from Oh Polly's (https://www.ohpolly.com) predictive search. The storefront URL is fixed server-side.", + "operationId": "ohpolly-search-suggest", "parameters": [ { - "description": "Canonical 9to5Mac author URL", + "description": "Search query", "in": "query", - "name": "url", + "name": "q", "required": true, "type": "string", - "x-example": "https://9to5mac.com/author/chmiller44/" + "x-example": "wool" + }, + { + "description": "Comma-separated suggestion types. Allowed values: product, collection, query", + "in": "query", + "name": "types", + "type": "string", + "x-example": "product,collection,query" + }, + { + "description": "Maximum results per type, defaults to 10 and supports up to 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -446566,7 +521379,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.ninetofivemacAuthorResponseDoc" + "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" } }, "400": { @@ -446575,8 +521388,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -446593,61 +521406,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get a 9to5Mac author profile", + "summary": "Get Oh Polly search suggestions", "tags": [ - "9to5Mac" + "Oh Polly" ] } }, - "/ninetofivemac/headlines": { + "/ohpolly/sitemap/urls": { "get": { - "description": "Returns the newest posts from one 9to5Mac topic guide, up to 100. `section` is required and takes a guide slug such as `iphone`, `macbook-pro`, `vision-pro` or `how-to`; an unknown or missing value returns an invalid-params error. Smaller guides, such as `apple-watch-se`, return fewer. Items carry title, URL, summary, time and author.", - "operationId": "ninetofivemac-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns capped URL entries from Oh Polly's (https://www.ohpolly.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", + "operationId": "ohpolly-sitemap-urls", "parameters": [ { - "description": "9to5Mac guide slug", + "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", "enum": [ - "iphone", - "mac", - "macbook-pro", - "macbook-air", - "imac", - "mac-mini", - "mac-studio", - "mac-pro", - "ipad-pro", - "ipad-air", - "ipad-mini", - "ipad", - "ipados", - "apple-watch", - "apple-watch-ultra", - "apple-health", - "apple-watch-se", - "vision-pro", - "visionos", - "apple-music", - "airpods", - "homepod", - "apple-tv", - "review", - "how-to", - "aapl", - "apple-store", - "apple-arcade", - "apple-card", - "apple-silicon", - "apple-one", - "apple-fitness", - "carplay", - "siri", - "homekit" + "all", + "products", + "collections", + "pages", + "blogs", + "agentic_discovery", + "other" ], "in": "query", - "name": "section", - "required": true, + "name": "type", "type": "string", - "x-example": "iphone" + "x-example": "products" + }, + { + "description": "Maximum URL entries, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -446657,7 +521451,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" } }, "400": { @@ -446666,6 +521460,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -446678,16 +521478,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get 9to5Mac section headlines", + "summary": "List Oh Polly sitemap URLs", "tags": [ - "9to5Mac" + "Oh Polly" ] } }, - "/ninetofivemac/news": { + "/ohpolly/sitemaps": { "get": { - "description": "Returns the latest 9to5Mac Apple news stories with no input needed. Each item has a title, canonical article URL, summary, publication time, author and image when present. The list can include podcast episode posts, such as Happy Hour and 9to5Mac Daily, alongside news articles.", - "operationId": "ninetofivemac-news", + "consumes": [ + "application/json" + ], + "description": "Returns child sitemap URLs from Oh Polly's (https://www.ohpolly.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", + "operationId": "ohpolly-sitemaps", "produces": [ "application/json" ], @@ -446695,7 +521498,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -446716,42 +521525,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get 9to5Mac top stories", + "summary": "List Oh Polly sitemaps", "tags": [ - "9to5Mac" + "Oh Polly" ] } }, - "/ninetofivemac/sections": { + "/ohpolly/store": { "get": { - "description": "Lists the 35 9to5Mac topic guides that the headlines endpoint accepts as `section`. Each has a `slug` (for example `iphone`, `mac-studio` or `carplay`), a display `name` and the guide's feed `url`.", - "operationId": "ninetofivemac-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get 9to5Mac sections", - "tags": [ - "9to5Mac" - ] - } - }, - "/njcom/news": { - "get": { - "description": "Returns current NJ.com top stories, including title, canonical URL, short summary, author, publication time, and image where available. Category discovery, section headlines, and article and author routes are not available.", - "operationId": "njcom-news", + "description": "Returns storefront metadata for Oh Polly (https://www.ohpolly.com). The storefront URL is fixed server-side, so no `url` parameter is accepted.", + "operationId": "ohpolly-store", "produces": [ "application/json" ], @@ -446759,7 +521545,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/shopifybrands.storeResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -446780,24 +521572,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get NJ.com top stories", + "summary": "Get Oh Polly store metadata", "tags": [ - "NJ.com" + "Oh Polly" ] } }, - "/npr/article": { + "/oldnavy/categories": { "get": { - "description": "Returns an NPR article by canonical `url` in the form `https://www.npr.org/YYYY/MM/DD/...`: title, description, section, authors, lead image, publication and update times, and body `paragraphs`. Tracking query strings and fragments are ignored; other hosts, encoded paths and non-article paths are rejected.", - "operationId": "npr-article", + "consumes": [ + "application/json" + ], + "description": "Lists Old Navy's own storefront navigation as name/cid pairs, resolving the cid-discovery gap oldnavy-search, oldnavy-product, and oldnavy-category all document. Omit cid to list Old Navy's top-level divisions (e.g. Women, Men, Boys, Toddler). Pass a cid (a division's own, or any deeper category's) to list the related categories for that part of the storefront instead, in the same order the live storefront menu shows them -- this is section-level, not necessarily unique per leaf category. Currently only available for brand=on (Old Navy).", + "operationId": "oldnavy-categories", "parameters": [ { - "description": "Canonical www.npr.org article URL", + "default": "on", + "description": "Storefront to list -- only on (Old Navy) is currently supported", + "enum": [ + "on" + ], "in": "query", - "name": "url", - "required": true, + "name": "brand", + "type": "string" + }, + { + "description": "Category id to list related categories for; omit to list the top-level divisions", + "in": "query", + "name": "cid", "type": "string", - "x-example": "https://www.npr.org/2026/09/19/nx-s1-5974980/saudi-arabia-houthis-attempted-attack-capital" + "x-example": "1185232" } ], "produces": [ @@ -446807,7 +521611,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/npr.articleResponseDoc" + "$ref": "#/definitions/oldnavy.categoriesResponseDoc" } }, "400": { @@ -446816,12 +521620,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -446840,24 +521638,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get NPR article content", + "summary": "List Old Navy storefront categories", "tags": [ - "NPR" + "Old Navy" ] } }, - "/npr/author": { + "/oldnavy/category": { "get": { - "description": "Returns an NPR author profile from a required `url` in the form `https://www.npr.org/people//`. The response has `name`, `job_title`, `bio` and the recent stories listed under Stories By, each with title, URL, summary, publication date and a lead image where the card has one. Other hosts or paths return a bad-request error.", - "operationId": "npr-author", + "consumes": [ + "application/json" + ], + "description": "Returns a category/browse listing for one storefront category id (cid). cid is an opaque Gap Inc category id assigned by the storefront's own navigation -- neither oldnavy-search nor oldnavy-category currently surface a category-id list, so find one from the storefront's own category page URLs (the cid query parameter on a /browse/... page) for now. Select the storefront with the brand parameter (`on` for Old Navy, `gap` for Gap, `br` for Banana Republic, `at` for Athleta; defaults to `on`) -- it must match the brand the cid was found under. Returns the category's subcategory breakdown, product summaries with per-color inventory data, and available search facets with live counts.", + "operationId": "oldnavy-category", "parameters": [ { - "description": "Canonical www.npr.org author URL", + "description": "Category id, from a storefront category page's own cid query parameter", "in": "query", - "name": "url", + "name": "cid", "required": true, "type": "string", - "x-example": "https://www.npr.org/people/14562108/bill-chappell" + "x-example": "85729" + }, + { + "default": "on", + "description": "Storefront to browse", + "enum": [ + "on", + "gap", + "br", + "at" + ], + "in": "query", + "name": "brand", + "type": "string" + }, + { + "default": 1, + "description": "One-based page", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -446867,7 +521690,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/npr.authorResponseDoc" + "$ref": "#/definitions/oldnavy.categoryResponseDoc" } }, "400": { @@ -446900,16 +521723,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get an NPR author profile", + "summary": "Browse an Old Navy, Gap, Banana Republic, or Athleta category", "tags": [ - "NPR" + "Old Navy" ] } }, - "/npr/categories": { + "/oldnavy/product": { "get": { - "description": "Lists the sections in NPR's current navigation, each with its name, slug and URL. Pass a returned `slug` as the `topic` parameter of `npr-topic`. The list is not a fixed set, so it follows whatever sections NPR currently shows.", - "operationId": "npr-categories", + "consumes": [ + "application/json" + ], + "description": "Returns product-detail data for one color variant: name, description, images, aggregate rating, and every size offered in that color as a separate priced offer. pid is a color-specific product id, as returned by oldnavy-search's product colors[].id field (not the bare base product id). Select the storefront with the brand parameter (`on` for Old Navy, `gap` for Gap, `br` for Banana Republic, `at` for Athleta; defaults to `on`) -- it must match the brand the pid was found under.", + "operationId": "oldnavy-product", + "parameters": [ + { + "description": "Color-specific product id, from a search result's colors[].id field", + "in": "query", + "name": "pid", + "required": true, + "type": "string", + "x-example": "907290012" + }, + { + "default": "on", + "description": "Storefront the pid belongs to", + "enum": [ + "on", + "gap", + "br", + "at" + ], + "in": "query", + "name": "brand", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -446917,46 +521766,20 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/npr.categoriesResponseDoc" + "$ref": "#/definitions/oldnavy.productResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get NPR section navigation", - "tags": [ - "NPR" - ] - } - }, - "/npr/headlines": { - "get": { - "description": "Returns the current NPR headlines across the site, with no parameters and no section filter. Each item has a title, canonical URL, summary, publication time and author when one is given.", - "operationId": "npr-headlines", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/npr.headlinesResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -446976,24 +521799,68 @@ "ApiKeyAuth": [] } ], - "summary": "Get NPR site-wide headlines", + "summary": "Get an Old Navy, Gap, Banana Republic, or Athleta product", "tags": [ - "NPR" + "Old Navy" ] } }, - "/npr/topic": { + "/oldnavy/product/availability": { "get": { - "description": "Returns the newest public NPR stories from one section archive page. topic is a section slug; use npr-categories for the current value space.", - "operationId": "npr-topic", + "consumes": [ + "application/json" + ], + "description": "Checks per-size, in-store pickup stock status for one color (pid) at one or more physical stores. pid matches oldnavy-product's own color-level id. Give store location either directly with store_id (one or more comma-separated store ids, e.g. from a prior call to this endpoint or a value you already have) or with zip or both lat and lng, which resolves the nearest stores automatically. Select the storefront with the brand parameter (`on` for Old Navy, `gap` for Gap, `br` for Banana Republic, `at` for Athleta; defaults to `on`). Each returned store lists every offered size's stock status: `in_stock`, `out_of_stock`, or `low_stock`.", + "operationId": "oldnavy-product-availability", "parameters": [ { - "description": "NPR section slug", + "description": "Color-level Old Navy/Gap/Banana Republic/Athleta product id", + "in": "query", + "name": "pid", + "required": true, + "type": "string", + "x-example": "907290012" + }, + { + "default": "on", + "description": "Storefront to check", + "enum": [ + "on", + "gap", + "br", + "at" + ], + "in": "query", + "name": "brand", + "type": "string" + }, + { + "description": "One or more comma-separated numeric store ids", + "in": "query", + "name": "store_id", + "type": "string", + "x-example": "3444" + }, + { + "description": "Zip code to resolve the nearest stores from", "in": "query", - "name": "topic", - "required": true, + "name": "zip", "type": "string", - "x-example": "politics" + "x-example": "10001" + }, + { + "description": "Latitude to resolve the nearest stores from (must be given together with lng)", + "in": "query", + "name": "lat", + "type": "number", + "x-example": 40.7128 + }, + { + "description": "Longitude to resolve the nearest stores from (must be given together with lat)", + "in": "query", + "name": "lng", + "type": "number", + "x-example": -74.006 } ], "produces": [ @@ -447003,7 +521870,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/npr.topicResponseDoc" + "$ref": "#/definitions/oldnavy.availabilityResponseDoc" } }, "400": { @@ -447036,27 +521903,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get NPR section headlines", + "summary": "Check in-store pickup stock for an Old Navy, Gap, Banana Republic, or Athleta product", "tags": [ - "NPR" + "Old Navy" ] } }, - "/numbeo/cost-of-living/city/{slug}": { + "/oldnavy/product/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns itemized cost-of-living prices for one city (restaurants, markets, transportation, utilities, rent, and more), grouped by category.", - "operationId": "numbeo-cost-of-living-city", + "description": "Returns one page of a product's customer reviews (author, date, rating, headline, body, and verified-purchase flag), plus the product's overall rating summary (average rating, rating count, per-star histogram, and recommended ratio). pid is a color-specific product id, as returned by oldnavy-search's product colors[].id field (not the bare base product id) -- the same pid oldnavy-product accepts. Select the storefront with the brand parameter (`on` for Old Navy, `gap` for Gap, `br` for Banana Republic, `at` for Athleta; defaults to `on`) -- it must match the brand the pid was found under. A product with no reviews yet returns a well-formed empty result, not an error.", + "operationId": "oldnavy-product-reviews", "parameters": [ { - "description": "Numbeo city slug", - "in": "path", - "name": "slug", + "description": "Color-specific product id, from a search result's colors[].id field", + "in": "query", + "name": "pid", "required": true, "type": "string", - "x-example": "Los-Angeles" + "x-example": "907290012" + }, + { + "default": "on", + "description": "Storefront the pid belongs to", + "enum": [ + "on", + "gap", + "br", + "at" + ], + "in": "query", + "name": "brand", + "type": "string" + }, + { + "default": 1, + "description": "One-based page, 10 reviews per page", + "in": "query", + "maximum": 1000, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -447066,7 +521955,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/numbeo.costOfLivingCityResponseDoc" + "$ref": "#/definitions/oldnavy.productReviewsResponseDoc" } }, "400": { @@ -447081,8 +521970,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -447099,27 +521988,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Numbeo city's cost-of-living prices", + "summary": "Get reviews for an Old Navy, Gap, Banana Republic, or Athleta product", "tags": [ - "Numbeo" + "Old Navy" ] } }, - "/numbeo/cost-of-living/country": { + "/oldnavy/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns aggregate itemized cost-of-living prices for a country, plus the headline cost-of-living indices for every city Numbeo tracks there.", - "operationId": "numbeo-cost-of-living-country", + "description": "Searches product listings across Old Navy, Gap, Banana Republic, and Athleta -- select the storefront with the brand parameter (`on` for Old Navy, `gap` for Gap, `br` for Banana Republic, `at` for Athleta; defaults to `on`). Returns product summaries with pricing, review scores, and every purchasable color variant. This search is best-effort relevance, not a guaranteed keyword match: for an obscure or nonsense keyword the upstream search index falls back to its own recommended results instead of returning an empty list, and there is currently no reliable signal in the response to distinguish a true keyword match from that fallback behavior.", + "operationId": "oldnavy-search", "parameters": [ { - "description": "Country name as Numbeo spells it", + "description": "Search keyword", "in": "query", - "name": "country", + "name": "keyword", "required": true, "type": "string", - "x-example": "Vietnam" + "x-example": "jeans" + }, + { + "default": "on", + "description": "Storefront to search", + "enum": [ + "on", + "gap", + "br", + "at" + ], + "in": "query", + "name": "brand", + "type": "string" + }, + { + "default": 1, + "description": "One-based page", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -447129,7 +522040,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/numbeo.costOfLivingCountryResponseDoc" + "$ref": "#/definitions/oldnavy.searchResponseDoc" } }, "400": { @@ -447144,8 +522055,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -447162,36 +522073,53 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Numbeo country's cost-of-living prices", + "summary": "Search Old Navy, Gap, Banana Republic, or Athleta products", "tags": [ - "Numbeo" + "Old Navy" ] } }, - "/numbeo/cost-of-living/rankings": { + "/oldnavy/stores": { "get": { "consumes": [ "application/json" ], - "description": "Returns the global cost-of-living city ranking (Cost of Living, Rent, Cost of Living Plus Rent, Groceries, Restaurant Price, and Local Purchasing Power indices), either the continuously-updated current index or a historical periodic snapshot.", - "operationId": "numbeo-cost-of-living-rankings", + "description": "Searches physical store locations for one storefront by free-text search (zip code or city) and/or coordinates. Provide search, or both lat and lng. Select the storefront with the brand parameter (`on` for Old Navy, `gap` for Gap, `br` for Banana Republic, `at` for Athleta; defaults to `on`). Returns each nearby store's name, full address, phone number, coordinates, distance, and specialties (e.g. \"In-Store Shopping\", \"Outlet\"). This is location search only -- it does not report per-item, per-store stock levels; use oldnavy-product-availability for that.", + "operationId": "oldnavy-stores", "parameters": [ { - "description": "current (default) or historical", - "enum": [ - "current", - "historical" - ], + "description": "Zip code or city to search near", "in": "query", - "name": "scope", - "type": "string" + "name": "search", + "type": "string", + "x-example": "10001" }, { - "description": "Required when scope=historical, e.g. 2026-mid or 2025", + "description": "Latitude (must be given together with lng)", "in": "query", - "name": "period", - "type": "string", - "x-example": "2026-mid" + "name": "lat", + "type": "number", + "x-example": 40.7128 + }, + { + "description": "Longitude (must be given together with lat)", + "in": "query", + "name": "lng", + "type": "number", + "x-example": -74.006 + }, + { + "default": "on", + "description": "Storefront to search", + "enum": [ + "on", + "gap", + "br", + "at" + ], + "in": "query", + "name": "brand", + "type": "string" } ], "produces": [ @@ -447201,7 +522129,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/numbeo.rankingsResponseDoc" + "$ref": "#/definitions/oldnavy.storesResponseDoc" } }, "400": { @@ -447210,8 +522138,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -447228,19 +522156,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get the global Numbeo cost-of-living city ranking", + "summary": "Find Old Navy, Gap, Banana Republic, or Athleta store locations", "tags": [ - "Numbeo" + "Old Navy" ] } }, - "/numbeo/cost-of-living/rankings-by-country": { + "/opendota/abilities": { "get": { "consumes": [ "application/json" ], - "description": "Returns the global country-level cost-of-living ranking (Cost of Living, Rent, Cost of Living Plus Rent, Groceries, Restaurant Price, and Local Purchasing Power indices).", - "operationId": "numbeo-cost-of-living-rankings-by-country", + "description": "Returns Dota 2 abilities from OpenDota's constants table as compact summaries (key, display name, behavior, target team and type, damage type, dispellable, BKB pierce, cooldown, mana cost, innate flag, description), sorted by key. Internal helper entries without a display name are skipped. `q` searches the key and display name.", + "operationId": "opendota-abilities", + "parameters": [ + { + "description": "Case-insensitive search on the ability key or display name, for example blink", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Number of abilities to return, 1 to 500; defaults to 50", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -447248,11 +522192,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/numbeo.rankingsByCountryResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.AbilitiesResponse" + } + }, + "type": "object" + } + ] } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -447269,43 +522231,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get the global Numbeo cost-of-living country ranking", + "summary": "OpenDota Dota 2 ability reference", "tags": [ - "Numbeo" + "OpenDota" ] } }, - "/numbeo/indices/city/{slug}": { + "/opendota/benchmarks": { "get": { "consumes": [ "application/json" ], - "description": "Returns one city's data for a Numbeo index family (quality of life, crime, health care, pollution, traffic, or property investment): headline indices, and (depending on the family) titled sub-index sections and/or itemized prices.", - "operationId": "numbeo-indices-city", + "description": "Returns a Dota 2 hero's benchmark percentiles from OpenDota's public games: for each of ten per-minute metrics (`gold_per_min`, `xp_per_min`, `kills_per_min`, `deaths_per_min`, `assists_per_min`, `last_hits_per_min`, `denies_per_min`, `hero_damage_per_min`, `hero_healing_per_min`, `tower_damage`) the value at percentiles 0.1 to 0.99, sorted by percentile. An unknown hero id returns 404.", + "operationId": "opendota-benchmarks", "parameters": [ { - "description": "Numbeo city slug", - "in": "path", - "name": "slug", + "description": "Positive hero ID from opendota-heroes", + "in": "query", + "name": "hero_id", "required": true, - "type": "string", - "x-example": "Los-Angeles" + "type": "integer", + "x-example": 1 }, { - "description": "Index family", + "description": "Rank bracket 1 (Herald) to 8 (Immortal) to benchmark against; omit for all ranks", + "in": "query", + "maximum": 8, + "minimum": 1, + "name": "bracket", + "type": "integer" + }, + { + "description": "Role of the games counted; one of core, support; omit for all roles", "enum": [ - "quality-of-life", - "crime", - "health-care", - "pollution", - "traffic", - "property-investment" + "core", + "support" ], "in": "query", - "name": "index", - "required": true, - "type": "string", - "x-example": "quality-of-life" + "name": "role", + "type": "string" } ], "produces": [ @@ -447315,7 +522279,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/numbeo.indicesCityResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.BenchmarksResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -447330,8 +522306,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -447348,43 +522324,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Numbeo city's data for an index family", + "summary": "OpenDota Dota 2 hero benchmarks by percentile", "tags": [ - "Numbeo" + "OpenDota" ] } }, - "/numbeo/indices/country": { + "/opendota/constants": { "get": { "consumes": [ "application/json" ], - "description": "Returns one country's aggregate data for a Numbeo index family, plus every city Numbeo tracks there with its index breakdown.", - "operationId": "numbeo-indices-country", + "description": "Returns one OpenDota lookup table as a sorted list of `id`/`name` entries, used to decode ids in match data: game modes and lobby types (with `balanced`), patches (with release `date`), regions, server clusters (`value` is the region id), item and ability ids, permanent buff ids, experience thresholds per level (`value`) countries (`id` is the ISO code), order types (`order_types`, the unit order names) player slot colors (`player_colors`, hex colors), chat wheel phrases (`chat_wheel`, `name` is the label and `text` the message), item rarity colors (`item_colors`, `text` is the hex color), neutral ancient creeps (`ancients`) and skillshot abilities (`skillshots`). `resource` is one of `game_mode`, `lobby_type`, `patch`, `region`, `cluster`, `item_ids`, `ability_ids`, `permanent_buffs`, `xp_level`, `countries`.", + "operationId": "opendota-constants", "parameters": [ { - "description": "Country name as Numbeo spells it", - "in": "query", - "name": "country", - "required": true, - "type": "string", - "x-example": "Vietnam" - }, - { - "description": "Index family", + "description": "Lookup table; one of game_mode, lobby_type, patch, region, cluster, item_ids, ability_ids, permanent_buffs, xp_level, countries, order_types, player_colors, chat_wheel, item_colors, ancients, skillshots", "enum": [ - "quality-of-life", - "crime", - "health-care", - "pollution", - "traffic", - "property-investment" + "game_mode", + "lobby_type", + "patch", + "region", + "cluster", + "item_ids", + "ability_ids", + "permanent_buffs", + "xp_level", + "countries", + "order_types", + "player_colors", + "chat_wheel", + "item_colors", + "ancients", + "skillshots" ], "in": "query", - "name": "index", + "name": "resource", "required": true, "type": "string", - "x-example": "quality-of-life" + "x-example": "game_mode" } ], "produces": [ @@ -447394,7 +522372,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/numbeo.indicesCountryResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.ConstantsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -447403,14 +522393,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -447427,52 +522411,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Numbeo country's data for an index family", + "summary": "OpenDota Dota 2 id lookup tables", "tags": [ - "Numbeo" + "OpenDota" ] } }, - "/numbeo/indices/rankings": { + "/opendota/find-matches": { "get": { "consumes": [ "application/json" ], - "description": "Returns the global city ranking for a Numbeo index family, either the continuously-updated current index or a historical periodic snapshot.", - "operationId": "numbeo-indices-rankings", + "description": "Returns recent public Dota 2 matches in which the given heroes were on team A and/or team B, with both full lineups (radiant and dire), whether Radiant won, and which side the requested team A heroes were on and whether they won. Provide at least one hero id in total; each side takes up to 5 comma-separated hero ids from opendota-heroes. Unknown or repeated hero ids return an invalid-parameter error.", + "operationId": "opendota-find-matches", "parameters": [ { - "description": "Index family", - "enum": [ - "quality-of-life", - "crime", - "health-care", - "pollution", - "traffic", - "property-investment" - ], + "description": "Comma-separated hero ids (up to 5) that must be on team A", "in": "query", - "name": "index", - "required": true, + "name": "team_a", "type": "string", - "x-example": "quality-of-life" - }, - { - "description": "current (default) or historical", - "enum": [ - "current", - "historical" - ], - "in": "query", - "name": "scope", - "type": "string" + "x-example": "1,2" }, { - "description": "Required when scope=historical, e.g. 2026-mid or 2025", + "description": "Comma-separated hero ids (up to 5) that must be on team B", "in": "query", - "name": "period", + "name": "team_b", "type": "string", - "x-example": "2026-mid" + "x-example": "3" } ], "produces": [ @@ -447482,7 +522447,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/numbeo.indicesRankingsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.FindMatchesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -447491,8 +522468,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -447509,35 +522486,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get the global Numbeo city ranking for an index family", + "summary": "OpenDota Dota 2 matches by hero lineup", "tags": [ - "Numbeo" + "OpenDota" ] } }, - "/numbeo/indices/rankings-by-country": { + "/opendota/hero-descriptions": { "get": { "consumes": [ "application/json" ], - "description": "Returns the global Numbeo ranking of countries for one index family, selected by the required `index`: `quality-of-life`, `crime`, `health-care`, `pollution`, `traffic` or `property-investment`. Each row has its `rank`, country and a list of named index values, such as the Crime Index and Safety Index for `crime`.", - "operationId": "numbeo-indices-rankings-by-country", + "description": "Returns, for every Dota 2 hero or for one `hero_id`, what Aghanim's Scepter and Aghanim's Shard do: whether each upgrade exists, its description, the skill it changes and whether it adds a new skill. `include_lore=true` adds each hero's lore text (about 155 KB for all heroes), so it is off by default. An unknown hero id returns not found. Take `hero_id` from opendota-heroes.", + "operationId": "opendota-hero-descriptions", "parameters": [ { - "description": "Index family", - "enum": [ - "quality-of-life", - "crime", - "health-care", - "pollution", - "traffic", - "property-investment" - ], + "description": "Positive hero id from opendota-heroes; omit it for all heroes", "in": "query", - "name": "index", - "required": true, - "type": "string", - "x-example": "quality-of-life" + "minimum": 1, + "name": "hero_id", + "type": "integer", + "x-example": 1 + }, + { + "description": "true adds each hero's lore text; defaults to false", + "in": "query", + "name": "include_lore", + "type": "boolean" } ], "produces": [ @@ -447547,7 +522522,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/numbeo.indicesRankingsByCountryResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.HeroDescriptionsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -447556,8 +522543,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -447574,24 +522567,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get the global Numbeo country ranking for an index family", + "summary": "OpenDota Dota 2 Aghanim's Scepter and Shard descriptions", "tags": [ - "Numbeo" + "OpenDota" ] } }, - "/nydailynews/article": { + "/opendota/hero-durations": { "get": { - "description": "Returns public New York Daily News article metadata and body paragraphs from a canonical article URL. For subscriber-only articles the response carries the free lead-in with paywalled set to true.", - "operationId": "nydailynews-article", + "consumes": [ + "application/json" + ], + "description": "Returns a hero's games and wins grouped by game length in five-minute bins (`start_minute` is the bin's first minute), sorted by length, to show whether the hero is stronger early or late. An unknown hero id returns not found.", + "operationId": "opendota-hero-durations", "parameters": [ { - "description": "Canonical New York Daily News article URL", + "description": "Positive hero ID from opendota-heroes", "in": "query", - "name": "url", + "name": "hero_id", "required": true, - "type": "string", - "x-example": "https://www.nydailynews.com/2026/09/24/city-hall-must-explain-why-they-broke-disclosure-rules/" + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -447601,7 +522597,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.HeroDurationsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -447616,6 +522624,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -447628,30 +522642,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get New York Daily News article content", + "summary": "OpenDota Dota 2 hero win rate by game duration", "tags": [ - "New York Daily News" + "OpenDota" ] } }, - "/nydailynews/author": { + "/opendota/hero-items": { "get": { - "description": "Returns one New York Daily News author's public profile: name, job title, bio, public email and X/Twitter handle, and their recent articles.", - "operationId": "nydailynews-author", + "consumes": [ + "application/json" + ], + "description": "Returns the items players buy on a hero in four phases (`start_game`, `early_game`, `mid_game`, `late_game`), each sorted by purchase count, with item ids resolved to internal names such as `power_treads` through the item-id table. An unknown hero id returns not found.", + "operationId": "opendota-hero-items", "parameters": [ { - "description": "Author slug, e.g. rocco-parascandola", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "rocco-parascandola" - }, - { - "description": "Canonical nydailynews.com/author// URL; alternative to slug", + "description": "Positive hero ID from opendota-heroes", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.nydailynews.com/author/rocco-parascandola/" + "name": "hero_id", + "required": true, + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -447661,7 +522672,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.nyDailyNewsAuthorResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.HeroItemsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -447676,6 +522699,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -447688,62 +522717,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a New York Daily News author profile", + "summary": "OpenDota Dota 2 hero item popularity", "tags": [ - "New York Daily News" + "OpenDota" ] } }, - "/nydailynews/headlines": { + "/opendota/hero-matches": { "get": { - "description": "Returns New York Daily News headlines for one section, newest first, up to about 100 stories. `section` is required and takes one of 36 slugs such as `crime-public-safety`, `new-york-yankees` or `opinion`; other values return an invalid-params error. Items carry a title and URL, plus publication time, byline, excerpt and lead image where shown. Team pages can list fewer stories out of season.", - "operationId": "nydailynews-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns recent professional and public matches in which a hero was played (about 100), each with the side it played, whether it won, its kills, deaths and assists, duration and league when there is one. Players' account ids are not returned. An unknown hero id returns not found.", + "operationId": "opendota-hero-matches", "parameters": [ { - "description": "New York Daily News section slug", - "enum": [ - "news", - "crime-public-safety", - "politics", - "new-york-politics", - "business", - "health", - "national", - "world", - "local-news", - "new-york-news", - "education", - "transportation", - "news-obituaries", - "sports", - "mlb", - "new-york-yankees", - "new-york-mets", - "nfl", - "new-york-giants", - "new-york-jets", - "nba", - "new-york-knicks", - "brooklyn-nets", - "wnba", - "new-york-liberty", - "nhl", - "new-york-rangers", - "new-york-islanders", - "soccer", - "opinion", - "editorials", - "viva", - "things-to-do", - "restaurants-food-drink", - "horoscopes", - "best-reviews" - ], + "description": "Positive hero ID from opendota-heroes", "in": "query", - "name": "section", + "name": "hero_id", "required": true, - "type": "string", - "x-example": "news" + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -447753,7 +522747,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.HeroMatchesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -447762,36 +522768,16 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get New York Daily News section headlines", - "tags": [ - "New York Daily News" - ] - } - }, - "/nydailynews/news": { - "get": { - "description": "Returns the current New York Daily News top stories, with no parameters. Each item has a title and canonical article URL, plus publication time, byline, excerpt and lead image where the story card shows them. Use `nydailynews-headlines` for a single section.", - "operationId": "nydailynews-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "429": { + "description": "Too Many Requests", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/app.Response" } }, "503": { @@ -447806,50 +522792,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get New York Daily News top stories", + "summary": "OpenDota Dota 2 recent matches of a hero", "tags": [ - "New York Daily News" + "OpenDota" ] } }, - "/nydailynews/sections": { + "/opendota/hero-matchups": { "get": { - "description": "Lists the 36 New York Daily News section slugs accepted by `nydailynews-headlines`, such as `crime-public-safety`, `new-york-mets`, `nfl` and `things-to-do`. Each entry has its `slug` (the last path segment of the section URL), display `name` and `url`. Topic (`/tag/...`) pages and off-site properties are not sections.", - "operationId": "nydailynews-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get New York Daily News sections", - "tags": [ - "New York Daily News" - ] - } - }, - "/nymag/article": { - "get": { - "description": "Returns a New York Magazine article by its canonical `url`: title, description, section, authors, lead image, publication and update times, a `paywalled` flag and the body `paragraphs`. Subscriber-only or blocked articles return an upstream error.", - "operationId": "nymag-article", + "description": "Returns how often a hero faced each other hero in recent public games and how often it won, sorted by games played, with localized hero names and win-rate percentages. An unknown hero id returns not found.", + "operationId": "opendota-hero-matchups", "parameters": [ { - "description": "Canonical New York Magazine article URL", + "description": "Positive hero ID from opendota-heroes", "in": "query", - "name": "url", + "name": "hero_id", "required": true, - "type": "string", - "x-example": "https://nymag.com/intelligencer/example.html" + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -447859,7 +522822,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.HeroMatchupsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -447874,6 +522849,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -447886,24 +522867,90 @@ "ApiKeyAuth": [] } ], - "summary": "Get New York Magazine article content", + "summary": "OpenDota Dota 2 hero matchup records", "tags": [ - "New York Magazine" + "OpenDota" ] } }, - "/nymag/author": { + "/opendota/hero-stats": { "get": { - "description": "Returns a New York Magazine author profile from a required `url` in the form `https://nymag.com/author//`. The response has `name`, `job_title` (empty for some contributors), `bio` and recent articles with title, URL, `excerpt` and a `section` label. Each article's `published_at` is the page's date text, such as `Sept. 20, 2026`, not a timestamp.", - "operationId": "nymag-author", + "consumes": [ + "application/json" + ], + "description": "Returns every Dota 2 hero with base stats (health, mana, armor, attack range, move speed) and OpenDota's aggregate pick/win counts and win rates for professional games (with bans), public games, turbo, and each of the eight rank brackets (`Herald`, `Guardian`, `Crusader`, `Archon`, `Legend`, `Ancient`, `Divine`, `Immortal`). Filter by `primary_attr` (`agi`, `all`, `int`, `str`), `attack_type` (`Melee`, `Ranged`) and `role`, sort with `sort` and `desc`, and cap with `limit`. Win rates are percentages and are omitted when there are no picks.", + "operationId": "opendota-hero-stats", "parameters": [ { - "description": "Canonical New York Magazine author URL", + "description": "Primary attribute filter; one of agi, all, int, str", + "enum": [ + "agi", + "all", + "int", + "str" + ], "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://nymag.com/author/john-herrman/" + "name": "primary_attr", + "type": "string" + }, + { + "description": "Attack type filter; one of Melee, Ranged", + "enum": [ + "Melee", + "Ranged" + ], + "in": "query", + "name": "attack_type", + "type": "string" + }, + { + "description": "Role filter; one of Carry, Disabler, Durable, Escape, Initiator, Nuker, Pusher, Support", + "enum": [ + "Carry", + "Disabler", + "Durable", + "Escape", + "Initiator", + "Nuker", + "Pusher", + "Support" + ], + "in": "query", + "name": "role", + "type": "string" + }, + { + "description": "Sort key; one of id, name, pro_pick, pro_win, pro_ban, pro_win_rate, pub_pick, pub_win, pub_win_rate, turbo_pick, turbo_win_rate; defaults to id", + "enum": [ + "id", + "name", + "pro_pick", + "pro_win", + "pro_ban", + "pro_win_rate", + "pub_pick", + "pub_win", + "pub_win_rate", + "turbo_pick", + "turbo_win_rate" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Sort descending (the default for every key except id and name)", + "in": "query", + "name": "desc", + "type": "boolean" + }, + { + "description": "Number of heroes to return, 1 to 200; defaults to all", + "in": "query", + "maximum": 200, + "minimum": 1, + "name": "limit", + "type": "integer" } ], "produces": [ @@ -447913,7 +522960,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.nymagAuthorResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.HeroStatsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -447922,8 +522981,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -447940,37 +522999,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a New York Magazine author profile", + "summary": "OpenDota Dota 2 hero pick and win statistics", "tags": [ - "New York Magazine" + "OpenDota" ] } }, - "/nymag/headlines": { + "/opendota/heroes": { "get": { - "description": "Returns recent New York Magazine stories for one site section. `section` is required and takes one of nine slugs: `intelligencer`, `thecut`, `vulture`, `grub-street`, `curbed`, `strategist`, `select-all`, `science` or `daily`. Each item has a title and URL, and may include summary, author, publication time and image.", - "operationId": "nymag-headlines", - "parameters": [ - { - "description": "New York Magazine section slug", - "enum": [ - "intelligencer", - "thecut", - "vulture", - "grub-street", - "curbed", - "strategist", - "select-all", - "science", - "daily" - ], - "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "intelligencer" - } + "consumes": [ + "application/json" ], + "description": "Returns the live OpenDota hero lookup needed to resolve `hero_id` values in live and detailed match responses. It includes every current hero ID with its internal name, localized name, primary attribute (`agi`, `all`, `int`, or `str`) and attack type (`Melee` or `Ranged`).", + "operationId": "opendota-heroes", "produces": [ "application/json" ], @@ -447978,11 +523019,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.HeroesResponse" + } + }, + "type": "object" + } + ] } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -447999,16 +523052,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get New York Magazine section headlines", + "summary": "OpenDota hero directory", "tags": [ - "New York Magazine" + "OpenDota" ] } }, - "/nymag/news": { + "/opendota/items": { "get": { - "description": "Returns the current New York Magazine top stories, with no parameters. Each item has a title and URL, and may include summary, author, publication time and image. Use `nymag-headlines` to read one of its sections.", - "operationId": "nymag-news", + "consumes": [ + "application/json" + ], + "description": "Returns Dota 2 items from OpenDota's constants table as compact summaries (key, id, display name, quality, gold cost, behavior, cooldown, mana cost, components, active and passive abilities, numeric attributes), sorted by key. `q` searches the key and display name, `quality` filters by quality, and `qualities` lists the quality values present.", + "operationId": "opendota-items", + "parameters": [ + { + "description": "Case-insensitive search on the item key or display name, for example blink", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Item quality from the qualities list in the response; currently artifact, common, component, consumable, consumable;laning, epic, rare, secret_shop", + "in": "query", + "name": "quality", + "type": "string" + }, + { + "description": "Number of items to return, 1 to 500; defaults to 50", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "limit", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -448016,7 +523094,31 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.ItemsResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -448031,16 +523133,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get New York Magazine top stories", + "summary": "OpenDota Dota 2 item reference", "tags": [ - "New York Magazine" + "OpenDota" ] } }, - "/nymag/sections": { + "/opendota/league": { "get": { - "description": "Lists the New York Magazine section slugs accepted by `nymag-headlines`, such as `intelligencer`, `thecut`, `vulture` and `grub-street`. Each entry has its stable `slug`, display `name` and section `url`.", - "operationId": "nymag-sections", + "consumes": [ + "application/json" + ], + "description": "Returns one league's name, tier (`amateur`, `excluded`, `premium`, `professional` or `unrated` when blank), ticket and banner, plus the teams that played in it with rating and record. An unknown league id returns not found.", + "operationId": "opendota-league", + "parameters": [ + { + "description": "Positive OpenDota league ID from opendota-leagues", + "in": "query", + "name": "league_id", + "required": true, + "type": "integer", + "x-example": 20395 + } + ], "produces": [ "application/json" ], @@ -448048,7 +523163,43 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.LeagueDetailResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -448057,24 +523208,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get New York Magazine sections", + "summary": "OpenDota Dota 2 league detail and teams", "tags": [ - "New York Magazine" + "OpenDota" ] } }, - "/nypost/article": { + "/opendota/league-match-ids": { "get": { - "description": "Returns a New York Post article by canonical `url` in the form `https://nypost.com/YYYY/MM/DD/
//`: title, description, section, authors, lead image, publication and update times, a `paywalled` flag and the body `paragraphs`.", - "operationId": "nypost-article", + "consumes": [ + "application/json" + ], + "description": "Returns match IDs for one league, including amateur leagues omitted from opendota_league_matches. An empty array is valid for a league with no matches. Copy an ID into opendota_match for match details.", + "operationId": "opendota-league-match-ids", "parameters": [ { - "description": "Canonical New York Post article URL", + "description": "Positive OpenDota league ID from opendota_leagues", + "format": "int64", "in": "query", - "name": "url", + "name": "league_id", "required": true, - "type": "string", - "x-example": "https://nypost.com/2026/09/23/us-news/example-article-slug/" + "type": "integer", + "x-example": 20395 } ], "produces": [ @@ -448084,7 +523239,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.LeagueMatchIDsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -448099,6 +523266,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -448111,24 +523284,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get New York Post article content", + "summary": "OpenDota match IDs for one league", "tags": [ - "New York Post" + "OpenDota" ] } }, - "/nypost/author": { + "/opendota/league-matches": { "get": { - "description": "Returns a New York Post author profile from a required `url` in the form `https://nypost.com/author//`. The response has `name`, `biography`, `image_url`, `social_links` and recent articles. Staff and wire bylines often have no headshot or bio, and each article's `published_at` is the page's date text such as `September 20, 2026 | 10:06pm`.", - "operationId": "nypost-author", + "consumes": [ + "application/json" + ], + "description": "Returns the complete match list supplied for one OpenDota league, including match ID, teams, scores, start time and series metadata. Optionally filter locally to matches involving one team; league_id and team_id are echoed. This source route is not paginated and can include completed or scheduled rows; use opendota_match for parsed player statistics.", + "operationId": "opendota-league-matches", "parameters": [ { - "description": "Canonical New York Post author URL", + "description": "Positive league ID from opendota_leagues", + "format": "int64", "in": "query", - "name": "url", + "name": "league_id", "required": true, - "type": "string", - "x-example": "https://nypost.com/author/jane-doe/" + "type": "integer", + "x-example": 20395 + }, + { + "description": "Optional positive team ID; keeps matches where this team is Radiant or Dire", + "format": "int64", + "in": "query", + "name": "team_id", + "type": "integer", + "x-example": 8255888 } ], "produces": [ @@ -448138,7 +523323,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.nypostAuthorResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.LeagueMatchesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -448153,6 +523350,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -448165,80 +523368,32 @@ "ApiKeyAuth": [] } ], - "summary": "Get a New York Post author profile", + "summary": "OpenDota matches for one league", "tags": [ - "New York Post" + "OpenDota" ] } }, - "/nypost/headlines": { + "/opendota/leagues": { "get": { - "description": "Returns recent New York Post stories for one section. `section` is required and takes one of 54 slugs, such as `us-news`, `metro`, `nfl`, `business`, `real-estate` or `astrology`. Each item has a title and URL, and may include summary, author, publication time and image.", - "operationId": "nypost-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns every league ID and its source name, ticket, banner and tier. The source list is large and can include historical or excluded leagues. Filter `tier` locally; `unrated` selects source rows whose tier is blank. The response echoes tier_filter. Use a returned ID with opendota_league_matches.", + "operationId": "opendota-leagues", "parameters": [ { - "description": "New York Post RSS section slug", + "description": "Optional exact source tier filter", "enum": [ - "us-news", - "metro", - "long-island", - "politics", - "world-news", - "sports", - "nfl", - "mlb", - "olympics", - "nba", - "nhl", - "college-football", - "college-basketball", - "wnba", - "sports-plus", - "betting", - "business", - "opinion", - "entertainment", - "tv", - "movies", - "music", - "celebrities", - "awards", - "theater", - "shopping", - "lifestyle", - "weird-but-true", - "sex-and-relationships", - "viral-trends", - "human-interest", - "parenting", - "fashion-and-beauty", - "food-and-drink", - "travel", - "health", - "wellness", - "fitness", - "health-care", - "medicine", - "mens-health", - "womens-health", - "mental-health", - "nutrition", - "real-estate", - "alexa", - "media", - "tech", - "science", - "space", - "environment", - "wildlife", - "archaeology", - "astrology" + "amateur", + "excluded", + "premium", + "professional", + "unrated" ], "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "us-news" + "name": "tier", + "type": "string" } ], "produces": [ @@ -448248,7 +523403,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.LeaguesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -448257,6 +523424,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -448269,16 +523442,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get New York Post section headlines", + "summary": "OpenDota league directory", "tags": [ - "New York Post" + "OpenDota" ] } }, - "/nypost/news": { + "/opendota/live": { "get": { - "description": "Returns the current New York Post top stories, with no parameters. Each item has a title and URL, and may include summary, author, publication time and image. Use `nypost-headlines` to read a single section.", - "operationId": "nypost-news", + "consumes": [ + "application/json" + ], + "description": "Returns OpenDota's current top live Dota 2 games: match and league IDs, team names, score, game clock, net-worth lead, player names when exposed, raw hero IDs, the upstream team code (`0` or `1`), and team slot (`1`, `2`, `3`, `4`, or `5`). The source mixes public matchmaking with tournament games; `league_id` is `0` when no league is associated, so its presence alone does not certify a professional event. `delay_seconds` and `last_update_time` report source freshness. Live player K/D/A is not provided by this endpoint. Resolve `hero_id` values with opendota_heroes.", + "operationId": "opendota-live", "produces": [ "application/json" ], @@ -448286,7 +523462,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.LiveMatchesResponse" + } + }, + "type": "object" + } + ] } }, "429": { @@ -448307,50 +523495,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get New York Post top stories", + "summary": "OpenDota live games", "tags": [ - "New York Post" + "OpenDota" ] } }, - "/nypost/sections": { + "/opendota/match": { "get": { - "description": "Lists the 54 New York Post section slugs accepted by `nypost-headlines`, such as `us-news`, `politics`, `nfl`, `celebrities` and `mental-health`. Each entry has its `slug`, display `name` and `url`.", - "operationId": "nypost-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get New York Post RSS sections", - "tags": [ - "New York Post" - ] - } - }, - "/nyt/article": { - "get": { - "description": "Returns a New York Times article by canonical `url`, with `title`, `description`, `published_at`, `updated_at`, `section`, `authors`, `keywords`, `image_url` and the body `paragraphs` in order. Query strings and fragments are stripped. A subscription barrier returns `403`, and non-article or non-NYT URLs return `400`.", - "operationId": "nyt-article", + "description": "Returns a compact parsed match summary and player lines for one numeric OpenDota match ID. Copy the ID from opendota_live, opendota_pro_matches, opendota_league_matches, or opendota_league_match_ids. Replay-derived player data can be absent or delayed; a missing match ID returns not found. Steam account IDs, chat logs, replay salts and raw telemetry are not returned. `hero_id` is resolved with opendota_heroes.", + "operationId": "opendota-match", "parameters": [ { - "description": "Canonical NYT article URL", + "description": "Positive OpenDota match ID from live, pro-match, league-match, or league-match-ID results", + "format": "int64", "in": "query", - "name": "url", + "name": "id", "required": true, - "type": "string", - "x-example": "https://www.nytimes.com/2026/09/20/us/politics/example-story.html" + "type": "integer", + "x-example": 9063495955 } ], "produces": [ @@ -448360,7 +523526,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nyt.articleResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.MatchDetail" + } + }, + "type": "object" + } + ] } }, "400": { @@ -448369,12 +523547,6 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "404": { "description": "Not Found", "schema": { @@ -448399,24 +523571,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get a New York Times article's content", + "summary": "OpenDota match detail", "tags": [ - "New York Times" + "OpenDota" ] } }, - "/nyt/author": { + "/opendota/patch-notes": { "get": { - "description": "Returns one New York Times contributor's public byline page: name, tagline, About/Contact panels, and their recent articles from a canonical author URL.", - "operationId": "nyt-author", + "consumes": [ + "application/json" + ], + "description": "Without `patch`, lists every patch key OpenDota has notes for (from 7_06d to the current patch) in chronological order with the number of heroes and items changed. With `patch` (for example `7_38`), returns that patch's general notes, item changes and hero changes (general, talents and per-ability notes, with the hero id and name resolved).", + "operationId": "opendota-patch-notes", "parameters": [ { - "description": "Canonical NYT author URL", + "description": "Patch key such as 7_38 or 7_06d; omit it to list every patch key", "in": "query", - "name": "url", - "required": true, + "name": "patch", "type": "string", - "x-example": "https://www.nytimes.com/by/maggie-haberman" + "x-example": "7_38" } ], "produces": [ @@ -448426,7 +523600,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nyt.authorResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.PatchNotesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -448435,18 +523621,6 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -448465,16 +523639,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get a New York Times contributor profile", + "summary": "OpenDota Dota 2 patch notes", "tags": [ - "New York Times" + "OpenDota" ] } }, - "/nyt/categories": { + "/opendota/pro-matches": { "get": { - "description": "Lists the public New York Times editorial navigation taxonomy, including top-level categories and nested destinations. Use /nyt/sections for the separately verified RSS-backed section values accepted by /nyt/headlines; product links, newsletters, and podcasts are not included as article categories.", - "operationId": "nyt-categories", + "consumes": [ + "application/json" + ], + "description": "Returns professional Dota 2 match summaries with match ID, teams, league, start time, duration, scores, winner and series metadata. OpenDota returns up to 100 rows per page. Set `less_than_match_id` to a positive match ID to fetch older results; use `next_less_than_match_id` from the response for the next page. An empty cursor page is the end of history. This is recent results, not an upcoming-match schedule. Use opendota_match with one returned match ID for parsed player statistics.", + "operationId": "opendota-pro-matches", + "parameters": [ + { + "description": "Return professional matches with IDs lower than this positive match ID; copy next_less_than_match_id from the previous response", + "format": "int64", + "in": "query", + "name": "less_than_match_id", + "type": "integer", + "x-example": 9063495955 + } + ], "produces": [ "application/json" ], @@ -448482,7 +523669,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nyt.categoriesResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.ProMatchesResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -448503,24 +523708,47 @@ "ApiKeyAuth": [] } ], - "summary": "List New York Times navigation categories", + "summary": "OpenDota recent professional matches", "tags": [ - "New York Times" + "OpenDota" ] } }, - "/nyt/headlines": { + "/opendota/pro-players": { "get": { - "description": "Returns a New York Times section RSS feed: each story's title, canonical URL, description, author, publication time, and lead image. Section must be a slug returned by /nyt/sections.", - "operationId": "nyt-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns a sanitized, searchable page of the OpenDota pro-player roster with player names, country codes and team tags. The upstream sends an unfiltered roster without pagination; this endpoint caches it and applies team_id, q, limit and offset locally. q searches names, tags and country codes. Account IDs, Steam IDs, profile URLs and avatars are omitted.", + "operationId": "opendota-pro-players", "parameters": [ { - "description": "Section slug from /nyt/sections", + "description": "Optional positive team ID from opendota_teams", + "format": "int64", "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "World" + "name": "team_id", + "type": "integer", + "x-example": 8255888 + }, + { + "description": "Case-insensitive substring in player/team names, team tags or country codes; maximum 200 characters", + "in": "query", + "name": "q", + "type": "string" + }, + { + "description": "Local page size, default 50, maximum 100", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 + }, + { + "description": "Zero-based local offset, default 0", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -448530,7 +523758,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nyt.headlinesResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.ProPlayersResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -448539,12 +523779,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -448563,16 +523797,124 @@ "ApiKeyAuth": [] } ], - "summary": "Get the latest stories in a New York Times section", + "summary": "OpenDota professional player roster", "tags": [ - "New York Times" + "OpenDota" ] } }, - "/nyt/sections": { + "/opendota/public-matches": { "get": { - "description": "Lists the New York Times section slugs accepted by `nyt-headlines`, such as `World` and `Business`, each with its display `name` and `url`. It covers only the sections that endpoint takes; use `nyt-categories` for the broader site navigation, including Politics, DealBook and Wirecutter.", - "operationId": "nyt-sections", + "consumes": [ + "application/json" + ], + "description": "Returns about 100 recent ranked public Dota 2 matches with the heroes on each side, game mode, lobby type and average rank tier, optionally limited to a rank range. Rank tiers are the medal (1 Herald, 2 Guardian, 3 Crusader, 4 Archon, 5 Legend, 6 Ancient, 7 Divine, 8 Immortal) times ten plus stars 1 to 5. Page back with `less_than_match_id` set to the previous `next_less_than_match_id`. Players' account ids are not returned.", + "operationId": "opendota-public-matches", + "parameters": [ + { + "description": "Lowest average rank tier, medal 1-8 times ten plus stars 1-5", + "enum": [ + 11, + 12, + 13, + 14, + 15, + 21, + 22, + 23, + 24, + 25, + 31, + 32, + 33, + 34, + 35, + 41, + 42, + 43, + 44, + 45, + 51, + 52, + 53, + 54, + 55, + 61, + 62, + 63, + 64, + 65, + 71, + 72, + 73, + 74, + 75, + 81, + 82, + 83, + 84, + 85 + ], + "in": "query", + "name": "min_rank", + "type": "integer" + }, + { + "description": "Highest average rank tier, same form as min_rank; not below min_rank", + "enum": [ + 11, + 12, + 13, + 14, + 15, + 21, + 22, + 23, + 24, + 25, + 31, + 32, + 33, + 34, + 35, + 41, + 42, + 43, + 44, + 45, + 51, + 52, + 53, + 54, + 55, + 61, + 62, + 63, + 64, + 65, + 71, + 72, + 73, + 74, + 75, + 81, + 82, + 83, + 84, + 85 + ], + "in": "query", + "name": "max_rank", + "type": "integer" + }, + { + "description": "Return matches older than this match id", + "in": "query", + "name": "less_than_match_id", + "type": "integer", + "x-example": 9066000000 + } + ], "produces": [ "application/json" ], @@ -448580,7 +523922,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/nyt.sectionsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.PublicMatchesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -448607,26 +523961,19 @@ "ApiKeyAuth": [] } ], - "summary": "List New York Times sections", + "summary": "OpenDota Dota 2 recent public matches by rank", "tags": [ - "New York Times" + "OpenDota" ] } }, - "/nzherald/article": { + "/opendota/rank-distribution": { "get": { - "description": "Returns public NZ Herald article metadata and body paragraphs from a canonical article URL. A premium (subscriber-only) article URL returns a permission error instead of a partial or fabricated body.", - "operationId": "nzherald-article", - "parameters": [ - { - "description": "Canonical NZ Herald article URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.nzherald.co.nz/nz/example-article-slug/ABCDEFGHIJKLMNOPQRST1234/" - } + "consumes": [ + "application/json" ], + "description": "Returns how OpenDota's rated players are distributed over Dota 2 rank tiers: for each `rank_tier` (the first digit is the medal, the second the stars) the medal name, stars, player count, cumulative count and the share and cumulative share in percent, sorted by tier.", + "operationId": "opendota-rank-distribution", "produces": [ "application/json" ], @@ -448634,23 +523981,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.DistributionsResponse" + } + }, + "type": "object" + } + ] } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -448667,24 +524014,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get NZ Herald article content", + "summary": "OpenDota Dota 2 rank distribution", "tags": [ - "NZ Herald" + "OpenDota" ] } }, - "/nzherald/author": { + "/opendota/records": { "get": { - "description": "Returns an NZ Herald author profile from a required `url` in the form `https://www.nzherald.co.nz/author//`. The response has `name`, `job_title`, `location`, `email`, `biography`, `image_url` and recent articles. Each field reflects what the author's page shows, and article `published_at` is RFC3339 where the page gives a machine-readable timestamp.", - "operationId": "nzherald-author", + "consumes": [ + "application/json" + ], + "description": "Returns the top 100 single-match records for one stat (`kills`, `deaths`, `assists`, `last_hits`, `denies`, `gold_per_min`, `xp_per_min`, `hero_damage`, `tower_damage`, `hero_healing`, `duration`): rank, match id, start time, hero (with name) and the record value. Use opendota-match with a returned match id.", + "operationId": "opendota-records", "parameters": [ { - "description": "Canonical NZ Herald author URL", + "description": "Record field; one of kills, deaths, assists, last_hits, denies, gold_per_min, xp_per_min, hero_damage, tower_damage, hero_healing, duration", + "enum": [ + "kills", + "deaths", + "assists", + "last_hits", + "denies", + "gold_per_min", + "xp_per_min", + "hero_damage", + "tower_damage", + "hero_healing", + "duration" + ], "in": "query", - "name": "url", + "name": "field", "required": true, "type": "string", - "x-example": "https://www.nzherald.co.nz/author/jane-doe/" + "x-example": "kills" } ], "produces": [ @@ -448694,7 +524057,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.nzheraldAuthorResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.RecordsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -448703,8 +524078,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -448721,70 +524096,73 @@ "ApiKeyAuth": [] } ], - "summary": "Get an NZ Herald author profile", + "summary": "OpenDota Dota 2 single-match record leaderboards", "tags": [ - "NZ Herald" + "OpenDota" ] } }, - "/nzherald/headlines": { + "/opendota/scenarios": { "get": { - "description": "Returns recent NZ Herald headlines for one section. `section` is required and takes a slug listed by `nzherald-sections`, such as `nz`, `business`, `rugby`, `politics` or `world`. Each item has a title and URL. A URL may point at a premium article, which `nzherald-article` rejects with a permission error.", - "operationId": "nzherald-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns OpenDota's scenario datasets as games, wins and win rate rows, most games first. `kind` selects `item-timings` (an item bought by a time for a hero), `lane-roles` (a hero in a lane role at a time) or `misc` (courier kill, first blood and chat scenarios by side and region). Filters are validated before any upstream call: `hero_id` and `item` apply to item-timings, `hero_id` and `lane_role` to lane-roles, `scenario` to misc.", + "operationId": "opendota-scenarios", "parameters": [ { - "description": "NZ Herald section slug", + "description": "Dataset; one of item-timings, lane-roles, misc", "enum": [ - "business", - "markets-with-madison", - "media-insider", - "business-reports", - "small-business", - "personal-finance", - "economy", - "companies", - "markets", - "entertainment", - "lifestyle", - "society-insider", - "nz", - "crime", - "education", - "politics", - "trailblazers", - "property", - "sport", - "commonwealth-games", - "cricket", - "olympics", - "paralympics", - "rugby", - "rugby-league", - "football", - "basketball", - "golf", - "boxing", - "netball", - "athletics", - "cycling", - "motorsport", - "racing", - "sailing", - "tennis", - "ufc", - "technology", - "travel", - "travel-news", - "world", - "kahu", - "talanoa", - "the-selection" + "item-timings", + "lane-roles", + "misc" ], "in": "query", - "name": "section", + "name": "kind", "required": true, "type": "string", - "x-example": "business" + "x-example": "item-timings" + }, + { + "description": "Positive hero ID from opendota-heroes; item-timings and lane-roles only", + "in": "query", + "name": "hero_id", + "type": "integer", + "x-example": 1 + }, + { + "description": "Item name from opendota-constants item_ids, for example bfury; item-timings only", + "in": "query", + "name": "item", + "type": "string" + }, + { + "description": "Lane role 1 to 4 (1 safe lane, 2 mid, 3 off lane, 4 jungle); lane-roles only", + "in": "query", + "maximum": 4, + "minimum": 1, + "name": "lane_role", + "type": "integer" + }, + { + "description": "Scenario; one of courier_kill, first_blood, neg_chat_1min, pos_chat_1min; misc only", + "enum": [ + "courier_kill", + "first_blood", + "neg_chat_1min", + "pos_chat_1min" + ], + "in": "query", + "name": "scenario", + "type": "string" + }, + { + "description": "Number of rows to return, 1 to 2000, most games first; defaults to all", + "in": "query", + "maximum": 2000, + "minimum": 1, + "name": "limit", + "type": "integer" } ], "produces": [ @@ -448794,7 +524172,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.ScenariosResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -448803,6 +524193,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -448815,16 +524217,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get NZ Herald section headlines", + "summary": "OpenDota Dota 2 scenario win rates", "tags": [ - "NZ Herald" + "OpenDota" ] } }, - "/nzherald/news": { + "/opendota/team": { "get": { - "description": "Returns the current New Zealand Herald top stories, with no parameters. Each item has a title and URL, and may include summary, author, publication time and image. Use `nzherald-headlines` to read one section.", - "operationId": "nzherald-news", + "consumes": [ + "application/json" + ], + "description": "Returns one team's OpenDota profile, tag, logo, rating, wins, losses and most recent match metadata.", + "operationId": "opendota-team", + "parameters": [ + { + "description": "Positive OpenDota team ID from opendota_teams or a match response", + "format": "int64", + "in": "query", + "name": "team_id", + "required": true, + "type": "integer", + "x-example": 8255888 + } + ], "produces": [ "application/json" ], @@ -448832,7 +524248,31 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.TeamResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -448853,16 +524293,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get NZ Herald top stories", + "summary": "OpenDota team details", "tags": [ - "NZ Herald" + "OpenDota" ] } }, - "/nzherald/sections": { + "/opendota/team-heroes": { "get": { - "description": "Lists the NZ Herald section slugs accepted by `nzherald-headlines`, such as `nz`, `business`, `rugby`, `technology` and `world`. Each entry has its `slug`, a display `name` (for example `New Zealand` for `nz`) and a `url`.", - "operationId": "nzherald-sections", + "consumes": [ + "application/json" + ], + "description": "Returns the heroes a team has played with games, wins and win rate, sorted by games played. Heroes the team never played are omitted. An unknown team id returns not found.", + "operationId": "opendota-team-heroes", + "parameters": [ + { + "description": "Positive OpenDota team ID from opendota-teams or a match response", + "in": "query", + "name": "team_id", + "required": true, + "type": "integer", + "x-example": 8255888 + } + ], "produces": [ "application/json" ], @@ -448870,7 +524323,43 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.TeamHeroesResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -448879,33 +524368,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get NZ Herald sections", + "summary": "OpenDota Dota 2 team hero pool", "tags": [ - "NZ Herald" + "OpenDota" ] } }, - "/ohpolly/collections": { + "/opendota/team-matches": { "get": { "consumes": [ "application/json" ], - "description": "Returns collections from Oh Polly (https://www.ohpolly.com). The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty collections array.", - "operationId": "ohpolly-collections", + "description": "Returns a team's complete upstream match history with league, opponent, score and winner data. The source does not paginate this list; large histories can contain over a thousand rows. Use opendota_match for parsed player statistics.", + "operationId": "opendota-team-matches", "parameters": [ { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Maximum collections, defaults to 50 and supports up to 250", + "description": "Positive OpenDota team ID from opendota_teams or a match response", + "format": "int64", "in": "query", - "name": "limit", + "name": "team_id", + "required": true, "type": "integer", - "x-example": 50 + "x-example": 8255888 } ], "produces": [ @@ -448915,7 +524399,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.TeamMatchesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -448924,6 +524420,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -448942,41 +524444,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Oh Polly collections", + "summary": "OpenDota team match history", "tags": [ - "Oh Polly" + "OpenDota" ] } }, - "/ohpolly/collections/{handle}/products": { + "/opendota/team-players": { "get": { "consumes": [ "application/json" ], - "description": "Returns products from one Oh Polly (https://www.ohpolly.com) collection. The storefront URL is fixed server-side; `handle` is the collection's URL slug.", - "operationId": "ohpolly-collection-products", + "description": "Returns the players who have played for a team with games played, wins and whether they are a current member, current members first. Steam account ids are not returned. An unknown team id returns not found.", + "operationId": "opendota-team-players", "parameters": [ { - "description": "Collection handle", - "in": "path", - "name": "handle", - "required": true, - "type": "string", - "x-example": "collection-handle" - }, - { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Maximum products, defaults to 50 and supports up to 250", + "description": "Positive OpenDota team ID from opendota-teams or a match response", "in": "query", - "name": "limit", + "name": "team_id", + "required": true, "type": "integer", - "x-example": 50 + "x-example": 8255888 } ], "produces": [ @@ -448986,7 +524474,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.TeamPlayersResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -449019,33 +524519,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Oh Polly collection products", + "summary": "OpenDota Dota 2 team player history", "tags": [ - "Oh Polly" + "OpenDota" ] } }, - "/ohpolly/pages": { + "/opendota/teams": { "get": { "consumes": [ "application/json" ], - "description": "Lists Oh Polly's static pages, paged with `page` (default 1) and `limit` (default 50, max 250). Each page has its handle, title, URL, plain-text content and timestamps. In some responses `transport_mode` is `ssr_embedded` and items carry only `handle`, `url` and `updated_at`, so fetch a single page for its content.", - "operationId": "ohpolly-pages", + "description": "Returns a zero-based page of OpenDota team records with team IDs, names, tags, ranking and recent-match metadata. OpenDota returns up to 1000 teams per page; use `next_page` while present. Use a team ID with opendota_team or opendota_team_matches.", + "operationId": "opendota-teams", "parameters": [ { - "description": "1-based page, defaults to 1", + "description": "Zero-based page index; defaults to 0", + "format": "int64", "in": "query", "name": "page", "type": "integer", - "x-example": 1 - }, - { - "description": "Maximum static pages, defaults to 50 and supports up to 250", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "x-example": 0 } ], "produces": [ @@ -449055,7 +524549,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pagesResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/opendota.TeamsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -449082,27 +524588,119 @@ "ApiKeyAuth": [] } ], - "summary": "List Oh Polly static pages", + "summary": "OpenDota team directory", "tags": [ - "Oh Polly" + "OpenDota" ] } }, - "/ohpolly/pages/{handle}": { + "/openf1/car-data": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Oh Polly static page by its `handle`: title, page URL, plain-text content, and created, published and updated times. Content is cleaned text, not HTML. An unknown handle returns 404. The store is fixed to Oh Polly, so no store URL is needed. Some responses include `transport_mode` set to `ssr_embedded` and omit `id`.", - "operationId": "ohpolly-page", + "description": "Returns car telemetry at roughly 3.7 Hz: speed, engine RPM, gear, throttle percentage, brake flag and DRS status for each sample timestamp. Always pass driver_number and a date window: a whole-session request without a driver is rejected upstream as too much data at once.", + "operationId": "openf1-car-data", "parameters": [ { - "description": "Page handle", - "in": "path", - "name": "handle", - "required": true, + "description": "Positive session key from openf1-sessions, or `latest` for the current session example(11408)", + "in": "query", + "name": "session_key", "type": "string", - "x-example": "page-handle" + "x-example": "11408" + }, + { + "description": "Positive meeting key from openf1-meetings, or `latest` for the current meeting example(1299)", + "in": "query", + "name": "meeting_key", + "type": "string", + "x-example": "1299" + }, + { + "description": "Positive permanent driver number (see openf1-drivers) example(1)", + "in": "query", + "name": "driver_number", + "type": "integer", + "x-example": 1 + }, + { + "description": "Inclusive lower bound; RFC3339 timestamp or YYYY-MM-DD example(2026-11-07)", + "in": "query", + "name": "date_from", + "type": "string", + "x-example": "2026-11-07" + }, + { + "description": "Inclusive upper bound; RFC3339 timestamp or YYYY-MM-DD example(2026-11-08)", + "in": "query", + "name": "date_to", + "type": "string", + "x-example": "2026-11-08" + }, + { + "description": "Inclusive minimum speed in km/h example(315)", + "in": "query", + "name": "speed_gte", + "type": "integer", + "x-example": 315 + }, + { + "description": "Inclusive maximum speed in km/h", + "in": "query", + "name": "speed_lte", + "type": "integer" + }, + { + "description": "Inclusive minimum engine RPM", + "in": "query", + "name": "rpm_gte", + "type": "integer" + }, + { + "description": "Inclusive maximum engine RPM", + "in": "query", + "name": "rpm_lte", + "type": "integer" + }, + { + "description": "Inclusive minimum throttle percentage", + "in": "query", + "name": "throttle_gte", + "type": "integer" + }, + { + "description": "Inclusive maximum throttle percentage", + "in": "query", + "name": "throttle_lte", + "type": "integer" + }, + { + "description": "Exact gear, 0 to 8", + "in": "query", + "name": "n_gear", + "type": "integer" + }, + { + "description": "Exact DRS status code", + "in": "query", + "name": "drs", + "type": "integer" + }, + { + "description": "Brake flag, 0 or 1", + "in": "query", + "name": "brake", + "type": "integer" + }, + { + "collectionFormat": "multi", + "description": "Repeatable upstream filter written as , with operators >=, <=, =, > and <. Repeated filters on the same attribute are OR'ed, a lower and upper bound form an inclusive range, and different attributes are AND'ed. Filterable attributes on this route: meeting_key, session_key, driver_number, date, rpm, speed, n_gear, throttle, brake, drs.", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array" } ], "produces": [ @@ -449112,7 +524710,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pageResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/openf1.CarDataResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -449145,33 +524755,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Oh Polly static page", + "summary": "OpenF1 Formula 1 car telemetry samples", "tags": [ - "Oh Polly" + "OpenF1" ] } }, - "/ohpolly/products": { + "/openf1/championship-drivers": { "get": { "consumes": [ "application/json" ], - "description": "Returns products from Oh Polly's (https://www.ohpolly.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", - "operationId": "ohpolly-products", + "description": "Returns each driver's championship position and points before the race and during/after it. Available for race sessions only; other session types return an empty list.", + "operationId": "openf1-championship-drivers", "parameters": [ { - "description": "1-based page, defaults to 1", + "description": "Positive session key from openf1-sessions, or `latest` for the current session example(11408)", "in": "query", - "name": "page", + "name": "session_key", + "type": "string", + "x-example": "11408" + }, + { + "description": "Positive meeting key from openf1-meetings, or `latest` for the current meeting example(1299)", + "in": "query", + "name": "meeting_key", + "type": "string", + "x-example": "1299" + }, + { + "description": "Positive permanent driver number (see openf1-drivers) example(1)", + "in": "query", + "name": "driver_number", "type": "integer", "x-example": 1 }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "collectionFormat": "multi", + "description": "Repeatable upstream filter written as , with operators >=, <=, =, > and <. Repeated filters on the same attribute are OR'ed, a lower and upper bound form an inclusive range, and different attributes are AND'ed. Filterable attributes on this route: meeting_key, session_key, driver_number, position_start, position_current, points_start, points_current.", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "items": { + "type": "string" + }, + "name": "filter", + "type": "array" } ], "produces": [ @@ -449181,7 +524808,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/openf1.ChampionshipDriversResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -449190,6 +524829,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -449208,27 +524853,50 @@ "ApiKeyAuth": [] } ], - "summary": "List Oh Polly products", + "summary": "OpenF1 Formula 1 driver championship standings", "tags": [ - "Oh Polly" + "OpenF1" ] } }, - "/ohpolly/products/{handle}": { + "/openf1/championship-teams": { "get": { "consumes": [ "application/json" ], - "description": "Returns product detail for one Oh Polly (https://www.ohpolly.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", - "operationId": "ohpolly-product", + "description": "Returns each team's championship position and points before the race and during/after it. Available for race sessions only; other session types return an empty list.", + "operationId": "openf1-championship-teams", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", - "required": true, + "description": "Positive session key from openf1-sessions, or `latest` for the current session example(11408)", + "in": "query", + "name": "session_key", "type": "string", - "x-example": "product-handle" + "x-example": "11408" + }, + { + "description": "Positive meeting key from openf1-meetings, or `latest` for the current meeting example(1299)", + "in": "query", + "name": "meeting_key", + "type": "string", + "x-example": "1299" + }, + { + "description": "Team name exactly as the source reports it example(McLaren)", + "in": "query", + "name": "team_name", + "type": "string", + "x-example": "McLaren" + }, + { + "collectionFormat": "multi", + "description": "Repeatable upstream filter written as , with operators >=, <=, =, > and <. Repeated filters on the same attribute are OR'ed, a lower and upper bound form an inclusive range, and different attributes are AND'ed. Filterable attributes on this route: meeting_key, session_key, team_name, position_start, position_current, points_start, points_current.", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array" } ], "produces": [ @@ -449238,7 +524906,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/openf1.ChampionshipTeamsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -449271,45 +524951,78 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Oh Polly product", + "summary": "OpenF1 Formula 1 team championship standings", "tags": [ - "Oh Polly" + "OpenF1" ] } }, - "/ohpolly/products/{handle}/recommendations": { + "/openf1/drivers": { "get": { "consumes": [ "application/json" ], - "description": "Returns recommended products for one Oh Polly (https://www.ohpolly.com) product handle. The storefront URL is fixed server-side.", - "operationId": "ohpolly-product-recommendations", + "description": "Returns the drivers entered in a session or meeting with their permanent number, broadcast/full name, three-letter acronym, team name and colour, and headshot URL. Use it to resolve a driver_number before querying telemetry, laps or position data.", + "operationId": "openf1-drivers", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", - "required": true, + "description": "Positive session key from openf1-sessions, or `latest` for the current session example(11408)", + "in": "query", + "name": "session_key", "type": "string", - "x-example": "product-handle" + "x-example": "11408" }, { - "description": "Maximum products, defaults to 10 and supports up to 20", + "description": "Positive meeting key from openf1-meetings, or `latest` for the current meeting example(1299)", "in": "query", - "name": "limit", + "name": "meeting_key", + "type": "string", + "x-example": "1299" + }, + { + "description": "Positive permanent driver number (see openf1-drivers) example(1)", + "in": "query", + "name": "driver_number", "type": "integer", - "x-example": 10 + "x-example": 1 }, { - "description": "Recommendation intent. Allowed values: related, complementary", - "enum": [ - "related", - "complementary" - ], + "description": "Team name exactly as the source reports it example(McLaren)", "in": "query", - "name": "intent", + "name": "team_name", "type": "string", - "x-example": "related" + "x-example": "McLaren" + }, + { + "description": "Three-letter driver acronym example(NOR)", + "in": "query", + "name": "name_acronym", + "type": "string", + "x-example": "NOR" + }, + { + "description": "Full driver name example(Lando NORRIS)", + "in": "query", + "name": "full_name", + "type": "string", + "x-example": "Lando NORRIS" + }, + { + "description": "Three-letter country code example(BRA)", + "in": "query", + "name": "country_code", + "type": "string", + "x-example": "BRA" + }, + { + "collectionFormat": "multi", + "description": "Repeatable upstream filter written as , with operators >=, <=, =, > and <. Repeated filters on the same attribute are OR'ed, a lower and upper bound form an inclusive range, and different attributes are AND'ed. Filterable attributes on this route: meeting_key, session_key, driver_number, broadcast_name, full_name, name_acronym, team_name, team_colour, first_name, last_name, headshot_url, country_code.", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array" } ], "produces": [ @@ -449319,7 +525032,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/openf1.DriversResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -449352,41 +525077,88 @@ "ApiKeyAuth": [] } ], - "summary": "List Oh Polly product recommendations", + "summary": "OpenF1 Formula 1 drivers in a session or meeting", "tags": [ - "Oh Polly" + "OpenF1" ] } }, - "/ohpolly/search/suggest": { + "/openf1/intervals": { "get": { "consumes": [ "application/json" ], - "description": "Returns products, collections, and query suggestions from Oh Polly's (https://www.ohpolly.com) predictive search. The storefront URL is fixed server-side.", - "operationId": "ohpolly-search-suggest", + "description": "Returns the gap to the car ahead and the gap to the leader, updated about every four seconds during race sessions. Values are raw source data: a number of seconds, an array, or a string such as +1 LAP, and null for the leader. Race sessions only; other session types return an empty list.", + "operationId": "openf1-intervals", "parameters": [ { - "description": "Search query", + "description": "Positive session key from openf1-sessions, or `latest` for the current session example(11408)", "in": "query", - "name": "q", - "required": true, + "name": "session_key", "type": "string", - "x-example": "wool" + "x-example": "11408" }, { - "description": "Comma-separated suggestion types. Allowed values: product, collection, query", + "description": "Positive meeting key from openf1-meetings, or `latest` for the current meeting example(1299)", "in": "query", - "name": "types", + "name": "meeting_key", "type": "string", - "x-example": "product,collection,query" + "x-example": "1299" }, { - "description": "Maximum results per type, defaults to 10 and supports up to 20", + "description": "Positive permanent driver number (see openf1-drivers) example(1)", "in": "query", - "name": "limit", + "name": "driver_number", "type": "integer", - "x-example": 10 + "x-example": 1 + }, + { + "description": "Inclusive lower bound; RFC3339 timestamp or YYYY-MM-DD example(2026-11-07)", + "in": "query", + "name": "date_from", + "type": "string", + "x-example": "2026-11-07" + }, + { + "description": "Inclusive upper bound; RFC3339 timestamp or YYYY-MM-DD example(2026-11-08)", + "in": "query", + "name": "date_to", + "type": "string", + "x-example": "2026-11-08" + }, + { + "description": "Exclusive minimum gap to the car ahead, in seconds", + "in": "query", + "name": "interval_gt", + "type": "number" + }, + { + "description": "Exclusive maximum gap to the car ahead, in seconds", + "in": "query", + "name": "interval_lt", + "type": "number" + }, + { + "description": "Exclusive minimum gap to the leader, in seconds", + "in": "query", + "name": "gap_to_leader_gt", + "type": "number" + }, + { + "description": "Exclusive maximum gap to the leader, in seconds", + "in": "query", + "name": "gap_to_leader_lt", + "type": "number" + }, + { + "collectionFormat": "multi", + "description": "Repeatable upstream filter written as , with operators >=, <=, =, > and <. Repeated filters on the same attribute are OR'ed, a lower and upper bound form an inclusive range, and different attributes are AND'ed. Filterable attributes on this route: meeting_key, session_key, driver_number, gap_to_leader, interval, date.", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array" } ], "produces": [ @@ -449396,7 +525168,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/openf1.IntervalsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -449405,6 +525189,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -449423,42 +525213,89 @@ "ApiKeyAuth": [] } ], - "summary": "Get Oh Polly search suggestions", + "summary": "OpenF1 Formula 1 interval and gap measurements", "tags": [ - "Oh Polly" + "OpenF1" ] } }, - "/ohpolly/sitemap/urls": { + "/openf1/laps": { "get": { "consumes": [ "application/json" ], - "description": "Returns capped URL entries from Oh Polly's (https://www.ohpolly.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", - "operationId": "ohpolly-sitemap-urls", + "description": "Returns per-lap data: lap duration, three sector durations, intermediate and speed-trap speeds, pit-out flag and the mini-sector code arrays the source publishes. Segment arrays are not published during races. Pass session_key plus driver_number to keep the response bounded.", + "operationId": "openf1-laps", "parameters": [ { - "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", - "enum": [ - "all", - "products", - "collections", - "pages", - "blogs", - "agentic_discovery", - "other" - ], + "description": "Positive session key from openf1-sessions, or `latest` for the current session example(11408)", "in": "query", - "name": "type", + "name": "session_key", "type": "string", - "x-example": "products" + "x-example": "11408" }, { - "description": "Maximum URL entries, defaults to 50 and supports up to 250", + "description": "Positive meeting key from openf1-meetings, or `latest` for the current meeting example(1299)", "in": "query", - "name": "limit", + "name": "meeting_key", + "type": "string", + "x-example": "1299" + }, + { + "description": "Positive permanent driver number (see openf1-drivers) example(1)", + "in": "query", + "name": "driver_number", "type": "integer", - "x-example": 50 + "x-example": 1 + }, + { + "description": "Lap number within the session, starting at 1 example(8)", + "in": "query", + "name": "lap_number", + "type": "integer", + "x-example": 8 + }, + { + "description": "Only pit-out laps", + "in": "query", + "name": "is_pit_out_lap", + "type": "boolean" + }, + { + "description": "Inclusive minimum lap duration, in seconds", + "in": "query", + "name": "lap_duration_gte", + "type": "number" + }, + { + "description": "Inclusive maximum lap duration, in seconds", + "in": "query", + "name": "lap_duration_lte", + "type": "number" + }, + { + "description": "Inclusive lower bound; RFC3339 timestamp or YYYY-MM-DD example(2026-11-07)", + "in": "query", + "name": "date_from", + "type": "string", + "x-example": "2026-11-07" + }, + { + "description": "Inclusive upper bound; RFC3339 timestamp or YYYY-MM-DD example(2026-11-08)", + "in": "query", + "name": "date_to", + "type": "string", + "x-example": "2026-11-08" + }, + { + "collectionFormat": "multi", + "description": "Repeatable upstream filter written as , with operators >=, <=, =, > and <. Repeated filters on the same attribute are OR'ed, a lower and upper bound form an inclusive range, and different attributes are AND'ed. Filterable attributes on this route: meeting_key, session_key, driver_number, lap_number, date_start, duration_sector_1, duration_sector_2, duration_sector_3, i1_speed, i2_speed, is_pit_out_lap, lap_duration, st_speed.", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array" } ], "produces": [ @@ -449468,7 +525305,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/openf1.LapsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -449477,6 +525326,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -449495,66 +525350,66 @@ "ApiKeyAuth": [] } ], - "summary": "List Oh Polly sitemap URLs", + "summary": "OpenF1 Formula 1 lap times and sectors", "tags": [ - "Oh Polly" + "OpenF1" ] } }, - "/ohpolly/sitemaps": { + "/openf1/location": { "get": { "consumes": [ "application/json" ], - "description": "Returns child sitemap URLs from Oh Polly's (https://www.ohpolly.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", - "operationId": "ohpolly-sitemaps", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" - } + "description": "Returns the approximate car position at roughly 3.7 Hz in the circuit's 3D coordinate system (x, y, z). The origin is arbitrary and is not tied to a point on the track, and lateral placement is not carried. Always pass driver_number and a date window to keep the response small.", + "operationId": "openf1-location", + "parameters": [ + { + "description": "Positive session key from openf1-sessions, or `latest` for the current session example(11408)", + "in": "query", + "name": "session_key", + "type": "string", + "x-example": "11408" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Positive meeting key from openf1-meetings, or `latest` for the current meeting example(1299)", + "in": "query", + "name": "meeting_key", + "type": "string", + "x-example": "1299" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Positive permanent driver number (see openf1-drivers) example(1)", + "in": "query", + "name": "driver_number", + "type": "integer", + "x-example": 1 }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] + "description": "Inclusive lower bound; RFC3339 timestamp or YYYY-MM-DD example(2026-11-07)", + "in": "query", + "name": "date_from", + "type": "string", + "x-example": "2026-11-07" + }, + { + "description": "Inclusive upper bound; RFC3339 timestamp or YYYY-MM-DD example(2026-11-08)", + "in": "query", + "name": "date_to", + "type": "string", + "x-example": "2026-11-08" + }, + { + "collectionFormat": "multi", + "description": "Repeatable upstream filter written as , with operators >=, <=, =, > and <. Repeated filters on the same attribute are OR'ed, a lower and upper bound form an inclusive range, and different attributes are AND'ed. Filterable attributes on this route: meeting_key, session_key, driver_number, date, x, y, z.", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array" } ], - "summary": "List Oh Polly sitemaps", - "tags": [ - "Oh Polly" - ] - } - }, - "/ohpolly/store": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns storefront metadata for Oh Polly (https://www.ohpolly.com). The storefront URL is fixed server-side, so no `url` parameter is accepted.", - "operationId": "ohpolly-store", "produces": [ "application/json" ], @@ -449562,7 +525417,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.storeResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/openf1.LocationResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -449571,6 +525438,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -449589,36 +525462,109 @@ "ApiKeyAuth": [] } ], - "summary": "Get Oh Polly store metadata", + "summary": "OpenF1 Formula 1 car position samples", "tags": [ - "Oh Polly" + "OpenF1" ] } }, - "/oldnavy/categories": { + "/openf1/meetings": { "get": { "consumes": [ "application/json" ], - "description": "Lists Old Navy's own storefront navigation as name/cid pairs, resolving the cid-discovery gap oldnavy-search, oldnavy-product, and oldnavy-category all document. Omit cid to list Old Navy's top-level divisions (e.g. Women, Men, Boys, Toddler). Pass a cid (a division's own, or any deeper category's) to list the related categories for that part of the storefront instead, in the same order the live storefront menu shows them -- this is section-level, not necessarily unique per leaf category. Currently only available for brand=on (Old Navy).", - "operationId": "oldnavy-categories", + "description": "Returns Formula 1 Grand Prix and testing weekends from OpenF1's anonymous public API: meeting and official name, country, circuit key and type, circuit info/image URLs, GMT offset and start/end timestamps. A season query is the discovery surface for the country, circuit and meeting values the other OpenF1 resources filter on.", + "operationId": "openf1-meetings", "parameters": [ { - "default": "on", - "description": "Storefront to list -- only on (Old Navy) is currently supported", + "description": "Four-digit season year; the source serves 2023 onwards example(2024)", + "in": "query", + "name": "year", + "type": "integer", + "x-example": 2024 + }, + { + "description": "Country name exactly as the source reports it example(Brazil)", + "in": "query", + "name": "country_name", + "type": "string", + "x-example": "Brazil" + }, + { + "description": "Three-letter country code example(BRA)", + "in": "query", + "name": "country_code", + "type": "string", + "x-example": "BRA" + }, + { + "description": "Meeting name exactly as the source reports it example(Singapore Grand Prix)", + "in": "query", + "name": "meeting_name", + "type": "string", + "x-example": "Singapore Grand Prix" + }, + { + "description": "Circuit key from openf1-meetings example(14)", + "in": "query", + "name": "circuit_key", + "type": "integer", + "x-example": 14 + }, + { + "description": "Circuit short name example(Interlagos)", + "in": "query", + "name": "circuit_short_name", + "type": "string", + "x-example": "Interlagos" + }, + { + "description": "Circuit type, one of Permanent, Temporary - Road, Temporary - Street", "enum": [ - "on" + "Permanent", + "Temporary - Road", + "Temporary - Street" ], "in": "query", - "name": "brand", + "name": "circuit_type", "type": "string" }, { - "description": "Category id to list related categories for; omit to list the top-level divisions", + "description": "City or geographical location of the meeting example(São Paulo)", "in": "query", - "name": "cid", + "name": "location", "type": "string", - "x-example": "1185232" + "x-example": "São Paulo" + }, + { + "description": "Cancelled flag filter", + "in": "query", + "name": "is_cancelled", + "type": "boolean" + }, + { + "description": "Inclusive lower bound; RFC3339 timestamp or YYYY-MM-DD example(2026-11-07)", + "in": "query", + "name": "date_from", + "type": "string", + "x-example": "2026-11-07" + }, + { + "description": "Inclusive upper bound; RFC3339 timestamp or YYYY-MM-DD example(2026-11-08)", + "in": "query", + "name": "date_to", + "type": "string", + "x-example": "2026-11-08" + }, + { + "collectionFormat": "multi", + "description": "Repeatable upstream filter written as , with operators >=, <=, =, > and <. Repeated filters on the same attribute are OR'ed, a lower and upper bound form an inclusive range, and different attributes are AND'ed. Filterable attributes on this route: meeting_key, meeting_name, meeting_official_name, location, country_key, country_code, country_name, country_flag, circuit_key, circuit_short_name, circuit_type, circuit_info_url, circuit_image, gmt_offset, date_start, date_end, year, is_cancelled.", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array" } ], "produces": [ @@ -449628,7 +525574,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/oldnavy.categoriesResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/openf1.MeetingsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -449637,6 +525595,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -449655,49 +525619,77 @@ "ApiKeyAuth": [] } ], - "summary": "List Old Navy storefront categories", + "summary": "OpenF1 Formula 1 meetings by season and filters", "tags": [ - "Old Navy" + "OpenF1" ] } }, - "/oldnavy/category": { + "/openf1/overtakes": { "get": { "consumes": [ "application/json" ], - "description": "Returns a category/browse listing for one storefront category id (cid). cid is an opaque Gap Inc category id assigned by the storefront's own navigation -- neither oldnavy-search nor oldnavy-category currently surface a category-id list, so find one from the storefront's own category page URLs (the cid query parameter on a /browse/... page) for now. Select the storefront with the brand parameter (`on` for Old Navy, `gap` for Gap, `br` for Banana Republic, `at` for Athleta; defaults to `on`) -- it must match the brand the cid was found under. Returns the category's subcategory breakdown, product summaries with per-color inventory data, and available search facets with live counts.", - "operationId": "oldnavy-category", + "description": "Returns position exchanges during race sessions, naming the overtaking and overtaken driver and the position held after the pass. The source includes pit-stop and penalty position changes and states the data may be incomplete. Race sessions only.", + "operationId": "openf1-overtakes", "parameters": [ { - "description": "Category id, from a storefront category page's own cid query parameter", + "description": "Positive session key from openf1-sessions, or `latest` for the current session example(11408)", "in": "query", - "name": "cid", - "required": true, + "name": "session_key", "type": "string", - "x-example": "85729" + "x-example": "11408" }, { - "default": "on", - "description": "Storefront to browse", - "enum": [ - "on", - "gap", - "br", - "at" - ], + "description": "Positive meeting key from openf1-meetings, or `latest` for the current meeting example(1299)", "in": "query", - "name": "brand", - "type": "string" + "name": "meeting_key", + "type": "string", + "x-example": "1299" }, { - "default": 1, - "description": "One-based page", + "description": "Number of the driver who gained the position example(63)", "in": "query", - "maximum": 500, - "minimum": 1, - "name": "page", + "name": "overtaking_driver_number", + "type": "integer", + "x-example": 63 + }, + { + "description": "Number of the driver who lost the position example(4)", + "in": "query", + "name": "overtaken_driver_number", + "type": "integer", + "x-example": 4 + }, + { + "description": "Exact position, starting at 1", + "in": "query", + "name": "position", "type": "integer" + }, + { + "description": "Inclusive lower bound; RFC3339 timestamp or YYYY-MM-DD example(2026-11-07)", + "in": "query", + "name": "date_from", + "type": "string", + "x-example": "2026-11-07" + }, + { + "description": "Inclusive upper bound; RFC3339 timestamp or YYYY-MM-DD example(2026-11-08)", + "in": "query", + "name": "date_to", + "type": "string", + "x-example": "2026-11-08" + }, + { + "collectionFormat": "multi", + "description": "Repeatable upstream filter written as , with operators >=, <=, =, > and <. Repeated filters on the same attribute are OR'ed, a lower and upper bound form an inclusive range, and different attributes are AND'ed. Filterable attributes on this route: meeting_key, session_key, overtaking_driver_number, overtaken_driver_number, date, position.", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array" } ], "produces": [ @@ -449707,7 +525699,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/oldnavy.categoryResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/openf1.OvertakesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -449740,40 +525744,96 @@ "ApiKeyAuth": [] } ], - "summary": "Browse an Old Navy, Gap, Banana Republic, or Athleta category", + "summary": "OpenF1 Formula 1 overtakes", "tags": [ - "Old Navy" + "OpenF1" ] } }, - "/oldnavy/product": { + "/openf1/pit": { "get": { "consumes": [ "application/json" ], - "description": "Returns product-detail data for one color variant: name, description, images, aggregate rating, and every size offered in that color as a separate priced offer. pid is a color-specific product id, as returned by oldnavy-search's product colors[].id field (not the bare base product id). Select the storefront with the brand parameter (`on` for Old Navy, `gap` for Gap, `br` for Banana Republic, `at` for Athleta; defaults to `on`) -- it must match the brand the pid was found under.", - "operationId": "oldnavy-product", + "description": "Returns pit-lane entries with the lap number, time spent in the pit lane and the stationary stop time where the source publishes it (from the 2024 United States Grand Prix onwards). Present across session types, so pass session_key and optionally driver_number.", + "operationId": "openf1-pit", "parameters": [ { - "description": "Color-specific product id, from a search result's colors[].id field", + "description": "Positive session key from openf1-sessions, or `latest` for the current session example(11408)", "in": "query", - "name": "pid", - "required": true, + "name": "session_key", "type": "string", - "x-example": "907290012" + "x-example": "11408" }, { - "default": "on", - "description": "Storefront the pid belongs to", - "enum": [ - "on", - "gap", - "br", - "at" - ], + "description": "Positive meeting key from openf1-meetings, or `latest` for the current meeting example(1299)", "in": "query", - "name": "brand", - "type": "string" + "name": "meeting_key", + "type": "string", + "x-example": "1299" + }, + { + "description": "Positive permanent driver number (see openf1-drivers) example(1)", + "in": "query", + "name": "driver_number", + "type": "integer", + "x-example": 1 + }, + { + "description": "Lap number within the session, starting at 1 example(8)", + "in": "query", + "name": "lap_number", + "type": "integer", + "x-example": 8 + }, + { + "description": "Inclusive lower bound; RFC3339 timestamp or YYYY-MM-DD example(2026-11-07)", + "in": "query", + "name": "date_from", + "type": "string", + "x-example": "2026-11-07" + }, + { + "description": "Inclusive upper bound; RFC3339 timestamp or YYYY-MM-DD example(2026-11-08)", + "in": "query", + "name": "date_to", + "type": "string", + "x-example": "2026-11-08" + }, + { + "description": "Exclusive maximum stationary stop time, in seconds example(2.3)", + "in": "query", + "name": "stop_duration_lt", + "type": "number", + "x-example": 2.3 + }, + { + "description": "Inclusive maximum stationary stop time, in seconds", + "in": "query", + "name": "stop_duration_lte", + "type": "number" + }, + { + "description": "Inclusive minimum pit-lane time, in seconds", + "in": "query", + "name": "lane_duration_gte", + "type": "number" + }, + { + "description": "Inclusive maximum pit-lane time, in seconds", + "in": "query", + "name": "lane_duration_lte", + "type": "number" + }, + { + "collectionFormat": "multi", + "description": "Repeatable upstream filter written as , with operators >=, <=, =, > and <. Repeated filters on the same attribute are OR'ed, a lower and upper bound form an inclusive range, and different attributes are AND'ed. Filterable attributes on this route: meeting_key, session_key, lap_number, driver_number, date, pit_duration, lane_duration, stop_duration.", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array" } ], "produces": [ @@ -449783,7 +525843,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/oldnavy.productResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/openf1.PitResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -449816,68 +525888,77 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Old Navy, Gap, Banana Republic, or Athleta product", + "summary": "OpenF1 Formula 1 pit lane entries", "tags": [ - "Old Navy" + "OpenF1" ] } }, - "/oldnavy/product/availability": { + "/openf1/position": { "get": { "consumes": [ "application/json" ], - "description": "Checks per-size, in-store pickup stock status for one color (pid) at one or more physical stores. pid matches oldnavy-product's own color-level id. Give store location either directly with store_id (one or more comma-separated store ids, e.g. from a prior call to this endpoint or a value you already have) or with zip or both lat and lng, which resolves the nearest stores automatically. Select the storefront with the brand parameter (`on` for Old Navy, `gap` for Gap, `br` for Banana Republic, `at` for Athleta; defaults to `on`). Each returned store lists every offered size's stock status: `in_stock`, `out_of_stock`, or `low_stock`.", - "operationId": "oldnavy-product-availability", + "description": "Returns each driver's position at every change during a session, with the timestamp of the change. Pass session_key with driver_number or a position bound to keep the result small.", + "operationId": "openf1-position", "parameters": [ { - "description": "Color-level Old Navy/Gap/Banana Republic/Athleta product id", + "description": "Positive session key from openf1-sessions, or `latest` for the current session example(11408)", "in": "query", - "name": "pid", - "required": true, + "name": "session_key", "type": "string", - "x-example": "907290012" + "x-example": "11408" }, { - "default": "on", - "description": "Storefront to check", - "enum": [ - "on", - "gap", - "br", - "at" - ], + "description": "Positive meeting key from openf1-meetings, or `latest` for the current meeting example(1299)", "in": "query", - "name": "brand", - "type": "string" + "name": "meeting_key", + "type": "string", + "x-example": "1299" }, { - "description": "One or more comma-separated numeric store ids", + "description": "Positive permanent driver number (see openf1-drivers) example(1)", "in": "query", - "name": "store_id", - "type": "string", - "x-example": "3444" + "name": "driver_number", + "type": "integer", + "x-example": 1 }, { - "description": "Zip code to resolve the nearest stores from", + "description": "Inclusive minimum position, starting at 1", "in": "query", - "name": "zip", + "name": "position_gte", + "type": "integer" + }, + { + "description": "Inclusive maximum position, starting at 1 example(3)", + "in": "query", + "name": "position_lte", + "type": "integer", + "x-example": 3 + }, + { + "description": "Inclusive lower bound; RFC3339 timestamp or YYYY-MM-DD example(2026-11-07)", + "in": "query", + "name": "date_from", "type": "string", - "x-example": "10001" + "x-example": "2026-11-07" }, { - "description": "Latitude to resolve the nearest stores from (must be given together with lng)", + "description": "Inclusive upper bound; RFC3339 timestamp or YYYY-MM-DD example(2026-11-08)", "in": "query", - "name": "lat", - "type": "number", - "x-example": 40.7128 + "name": "date_to", + "type": "string", + "x-example": "2026-11-08" }, { - "description": "Longitude to resolve the nearest stores from (must be given together with lat)", + "collectionFormat": "multi", + "description": "Repeatable upstream filter written as , with operators >=, <=, =, > and <. Repeated filters on the same attribute are OR'ed, a lower and upper bound form an inclusive range, and different attributes are AND'ed. Filterable attributes on this route: meeting_key, session_key, driver_number, date, position.", "in": "query", - "name": "lng", - "type": "number", - "x-example": -74.006 + "items": { + "type": "string" + }, + "name": "filter", + "type": "array" } ], "produces": [ @@ -449887,7 +525968,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/oldnavy.availabilityResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/openf1.PositionResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -449920,49 +526013,126 @@ "ApiKeyAuth": [] } ], - "summary": "Check in-store pickup stock for an Old Navy, Gap, Banana Republic, or Athleta product", + "summary": "OpenF1 Formula 1 driver position changes", "tags": [ - "Old Navy" + "OpenF1" ] } }, - "/oldnavy/product/reviews": { + "/openf1/race-control": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a product's customer reviews (author, date, rating, headline, body, and verified-purchase flag), plus the product's overall rating summary (average rating, rating count, per-star histogram, and recommended ratio). pid is a color-specific product id, as returned by oldnavy-search's product colors[].id field (not the bare base product id) -- the same pid oldnavy-product accepts. Select the storefront with the brand parameter (`on` for Old Navy, `gap` for Gap, `br` for Banana Republic, `at` for Athleta; defaults to `on`) -- it must match the brand the pid was found under. A product with no reviews yet returns a well-formed empty result, not an error.", - "operationId": "oldnavy-product-reviews", + "description": "Returns race-control messages: session status, incidents, flags, safety car and DRS events, with category, flag, scope, sector, lap number, qualifying phase and the message text. Use session_key for one session, or a date window to sweep a range.", + "operationId": "openf1-race-control", "parameters": [ { - "description": "Color-specific product id, from a search result's colors[].id field", + "description": "Positive session key from openf1-sessions, or `latest` for the current session example(11408)", "in": "query", - "name": "pid", - "required": true, + "name": "session_key", "type": "string", - "x-example": "907290012" + "x-example": "11408" }, { - "default": "on", - "description": "Storefront the pid belongs to", + "description": "Positive meeting key from openf1-meetings, or `latest` for the current meeting example(1299)", + "in": "query", + "name": "meeting_key", + "type": "string", + "x-example": "1299" + }, + { + "description": "Positive permanent driver number (see openf1-drivers) example(1)", + "in": "query", + "name": "driver_number", + "type": "integer", + "x-example": 1 + }, + { + "description": "Race-control category, one of CarEvent, Drs, Flag, Other, SafetyCar, SessionStatus Enums(CarEvent,Drs,Flag,Other,SafetyCar,SessionStatus) example(Flag)", "enum": [ - "on", - "gap", - "br", - "at" + "CarEvent", + "Drs", + "Flag", + "Other", + "SafetyCar", + "SessionStatus" ], "in": "query", - "name": "brand", + "name": "category", + "type": "string", + "x-example": "Flag" + }, + { + "description": "Flag type, one of BLACK AND WHITE, BLUE, CHEQUERED, CLEAR, DOUBLE YELLOW, GREEN, RED, YELLOW Enums(BLACK AND WHITE,BLUE,CHEQUERED,CLEAR,DOUBLE YELLOW,GREEN,RED,YELLOW) example(BLACK AND WHITE)", + "enum": [ + "BLACK AND WHITE", + "BLUE", + "CHEQUERED", + "CLEAR", + "DOUBLE YELLOW", + "GREEN", + "RED", + "YELLOW" + ], + "in": "query", + "name": "flag", + "type": "string", + "x-example": "BLACK AND WHITE" + }, + { + "description": "Event scope; one of Track, Driver, Sector Enums(Track,Driver,Sector)", + "enum": [ + "Track", + "Driver", + "Sector" + ], + "in": "query", + "name": "scope", "type": "string" }, { - "default": 1, - "description": "One-based page, 10 reviews per page", + "description": "Track sector the message refers to, starting at 1", "in": "query", - "maximum": 1000, - "minimum": 1, - "name": "page", + "name": "sector", + "type": "integer" + }, + { + "description": "Lap number within the session, starting at 1 example(8)", + "in": "query", + "name": "lap_number", + "type": "integer", + "x-example": 8 + }, + { + "description": "Qualifying phase, 1 to 3", + "in": "query", + "name": "qualifying_phase", "type": "integer" + }, + { + "description": "Inclusive lower bound; RFC3339 timestamp or YYYY-MM-DD example(2026-11-07)", + "in": "query", + "name": "date_from", + "type": "string", + "x-example": "2026-11-07" + }, + { + "description": "Inclusive upper bound; RFC3339 timestamp or YYYY-MM-DD example(2026-11-08)", + "in": "query", + "name": "date_to", + "type": "string", + "x-example": "2026-11-08" + }, + { + "collectionFormat": "multi", + "description": "Repeatable upstream filter written as , with operators >=, <=, =, > and <. Repeated filters on the same attribute are OR'ed, a lower and upper bound form an inclusive range, and different attributes are AND'ed. Filterable attributes on this route: meeting_key, session_key, date, driver_number, lap_number, category, flag, scope, sector, qualifying_phase, message.", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array" } ], "produces": [ @@ -449972,7 +526142,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/oldnavy.productReviewsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/openf1.RaceControlResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -450005,49 +526187,81 @@ "ApiKeyAuth": [] } ], - "summary": "Get reviews for an Old Navy, Gap, Banana Republic, or Athleta product", + "summary": "OpenF1 Formula 1 race control messages", "tags": [ - "Old Navy" + "OpenF1" ] } }, - "/oldnavy/search": { + "/openf1/session-result": { "get": { "consumes": [ "application/json" ], - "description": "Searches product listings across Old Navy, Gap, Banana Republic, and Athleta -- select the storefront with the brand parameter (`on` for Old Navy, `gap` for Gap, `br` for Banana Republic, `at` for Athleta; defaults to `on`). Returns product summaries with pricing, review scores, and every purchasable color variant. This search is best-effort relevance, not a guaranteed keyword match: for an obscure or nonsense keyword the upstream search index falls back to its own recommended results instead of returning an empty list, and there is currently no reliable signal in the response to distinguish a true keyword match from that fallback behavior.", - "operationId": "oldnavy-search", + "description": "Returns the classification published a few minutes after the official results: final position, laps completed, DNF/DNS/DSQ flags, points for races, and duration and gap to the leader, which are single numbers for a race and Q1/Q2/Q3 arrays for practice and qualifying.", + "operationId": "openf1-session-result", "parameters": [ { - "description": "Search keyword", + "description": "Positive session key from openf1-sessions, or `latest` for the current session example(11408)", "in": "query", - "name": "keyword", - "required": true, + "name": "session_key", "type": "string", - "x-example": "jeans" + "x-example": "11408" }, { - "default": "on", - "description": "Storefront to search", - "enum": [ - "on", - "gap", - "br", - "at" - ], + "description": "Positive meeting key from openf1-meetings, or `latest` for the current meeting example(1299)", "in": "query", - "name": "brand", - "type": "string" + "name": "meeting_key", + "type": "string", + "x-example": "1299" }, { - "default": 1, - "description": "One-based page", + "description": "Positive permanent driver number (see openf1-drivers) example(1)", "in": "query", - "maximum": 500, - "minimum": 1, - "name": "page", + "name": "driver_number", + "type": "integer", + "x-example": 1 + }, + { + "description": "Inclusive minimum position, starting at 1", + "in": "query", + "name": "position_gte", "type": "integer" + }, + { + "description": "Inclusive maximum position, starting at 1 example(3)", + "in": "query", + "name": "position_lte", + "type": "integer", + "x-example": 3 + }, + { + "description": "Only drivers who did not finish", + "in": "query", + "name": "dnf", + "type": "boolean" + }, + { + "description": "Only drivers who did not start", + "in": "query", + "name": "dns", + "type": "boolean" + }, + { + "description": "Only disqualified drivers", + "in": "query", + "name": "dsq", + "type": "boolean" + }, + { + "collectionFormat": "multi", + "description": "Repeatable upstream filter written as , with operators >=, <=, =, > and <. Repeated filters on the same attribute are OR'ed, a lower and upper bound form an inclusive range, and different attributes are AND'ed. Filterable attributes on this route: meeting_key, session_key, position, driver_number, number_of_laps, points, dnf, dns, dsq.", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array" } ], "produces": [ @@ -450057,7 +526271,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/oldnavy.searchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/openf1.SessionResultResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -450090,53 +526316,103 @@ "ApiKeyAuth": [] } ], - "summary": "Search Old Navy, Gap, Banana Republic, or Athleta products", + "summary": "OpenF1 Formula 1 session classification", "tags": [ - "Old Navy" + "OpenF1" ] } }, - "/oldnavy/stores": { + "/openf1/sessions": { "get": { "consumes": [ "application/json" ], - "description": "Searches physical store locations for one storefront by free-text search (zip code or city) and/or coordinates. Provide search, or both lat and lng. Select the storefront with the brand parameter (`on` for Old Navy, `gap` for Gap, `br` for Banana Republic, `at` for Athleta; defaults to `on`). Returns each nearby store's name, full address, phone number, coordinates, distance, and specialties (e.g. \"In-Store Shopping\", \"Outlet\"). This is location search only -- it does not report per-item, per-store stock levels; use oldnavy-product-availability for that.", - "operationId": "oldnavy-stores", + "description": "Returns the practice, qualifying, sprint and race sessions OpenF1 publishes, with session type and name, start/end timestamps, meeting and circuit keys, country and location. A session_key from this list is the input to almost every other OpenF1 route; latest resolves to the current or most recent session.", + "operationId": "openf1-sessions", "parameters": [ { - "description": "Zip code or city to search near", + "description": "Four-digit season year; the source serves 2023 onwards example(2024)", "in": "query", - "name": "search", + "name": "year", + "type": "integer", + "x-example": 2024 + }, + { + "description": "Country name exactly as the source reports it example(Brazil)", + "in": "query", + "name": "country_name", "type": "string", - "x-example": "10001" + "x-example": "Brazil" }, { - "description": "Latitude (must be given together with lng)", + "description": "Three-letter country code example(BRA)", "in": "query", - "name": "lat", - "type": "number", - "x-example": 40.7128 + "name": "country_code", + "type": "string", + "x-example": "BRA" }, { - "description": "Longitude (must be given together with lat)", + "description": "Session name exactly as the source reports it example(Qualifying)", "in": "query", - "name": "lng", - "type": "number", - "x-example": -74.006 + "name": "session_name", + "type": "string", + "x-example": "Qualifying" }, { - "default": "on", - "description": "Storefront to search", + "description": "Session type; one of Practice, Qualifying, Race Enums(Practice,Qualifying,Race) example(Qualifying)", "enum": [ - "on", - "gap", - "br", - "at" + "Practice", + "Qualifying", + "Race" ], "in": "query", - "name": "brand", - "type": "string" + "name": "session_type", + "type": "string", + "x-example": "Qualifying" + }, + { + "description": "Positive meeting key from openf1-meetings, or `latest` for the current meeting example(1299)", + "in": "query", + "name": "meeting_key", + "type": "string", + "x-example": "1299" + }, + { + "description": "Circuit key from openf1-meetings example(14)", + "in": "query", + "name": "circuit_key", + "type": "integer", + "x-example": 14 + }, + { + "description": "Cancelled flag filter", + "in": "query", + "name": "is_cancelled", + "type": "boolean" + }, + { + "description": "Inclusive lower bound; RFC3339 timestamp or YYYY-MM-DD example(2026-11-07)", + "in": "query", + "name": "date_from", + "type": "string", + "x-example": "2026-11-07" + }, + { + "description": "Inclusive upper bound; RFC3339 timestamp or YYYY-MM-DD example(2026-11-08)", + "in": "query", + "name": "date_to", + "type": "string", + "x-example": "2026-11-08" + }, + { + "collectionFormat": "multi", + "description": "Repeatable upstream filter written as , with operators >=, <=, =, > and <. Repeated filters on the same attribute are OR'ed, a lower and upper bound form an inclusive range, and different attributes are AND'ed. Filterable attributes on this route: session_key, session_type, session_name, date_start, date_end, meeting_key, circuit_key, circuit_short_name, country_key, country_code, country_name, location, gmt_offset, year, is_cancelled.", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array" } ], "produces": [ @@ -450146,7 +526422,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/oldnavy.storesResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/openf1.SessionsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -450155,6 +526443,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -450173,33 +526467,63 @@ "ApiKeyAuth": [] } ], - "summary": "Find Old Navy, Gap, Banana Republic, or Athleta store locations", + "summary": "OpenF1 Formula 1 sessions by season and filters", "tags": [ - "Old Navy" + "OpenF1" ] } }, - "/opendota/abilities": { + "/openf1/starting-grid": { "get": { "consumes": [ "application/json" ], - "description": "Returns Dota 2 abilities from OpenDota's constants table as compact summaries (key, display name, behavior, target team and type, damage type, dispellable, BKB pierce, cooldown, mana cost, innate flag, description), sorted by key. Internal helper entries without a display name are skipped. `q` searches the key and display name.", - "operationId": "opendota-abilities", + "description": "Returns the grid for an upcoming or completed race: grid position, driver number and the qualifying lap duration that set it, published a few minutes after the official results. The rows are keyed by the qualifying session_key that set the grid, not the race session_key; pair this route with the matching openf1-sessions row.", + "operationId": "openf1-starting-grid", "parameters": [ { - "description": "Case-insensitive search on the ability key or display name, for example blink", + "description": "Positive session key from openf1-sessions, or `latest` for the current session example(11408)", "in": "query", - "name": "q", - "type": "string" + "name": "session_key", + "type": "string", + "x-example": "11408" }, { - "description": "Number of abilities to return, 1 to 500; defaults to 50", + "description": "Positive meeting key from openf1-meetings, or `latest` for the current meeting example(1299)", "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", + "name": "meeting_key", + "type": "string", + "x-example": "1299" + }, + { + "description": "Positive permanent driver number (see openf1-drivers) example(1)", + "in": "query", + "name": "driver_number", + "type": "integer", + "x-example": 1 + }, + { + "description": "Inclusive minimum position, starting at 1", + "in": "query", + "name": "position_gte", "type": "integer" + }, + { + "description": "Inclusive maximum position, starting at 1 example(3)", + "in": "query", + "name": "position_lte", + "type": "integer", + "x-example": 3 + }, + { + "collectionFormat": "multi", + "description": "Repeatable upstream filter written as , with operators >=, <=, =, > and <. Repeated filters on the same attribute are OR'ed, a lower and upper bound form an inclusive range, and different attributes are AND'ed. Filterable attributes on this route: meeting_key, session_key, position, driver_number, lap_duration.", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array" } ], "produces": [ @@ -450216,7 +526540,7 @@ { "properties": { "data": { - "$ref": "#/definitions/opendota.AbilitiesResponse" + "$ref": "#/definitions/openf1.StartingGridResponse" } }, "type": "object" @@ -450230,6 +526554,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -450248,27 +526578,107 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota Dota 2 ability reference", + "summary": "OpenF1 Formula 1 starting grid", "tags": [ - "OpenDota" + "OpenF1" ] } }, - "/opendota/benchmarks": { + "/openf1/stints": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Dota 2 hero's benchmark percentiles from OpenDota's public games: for each of ten per-minute metrics (`gold_per_min`, `xp_per_min`, `kills_per_min`, `deaths_per_min`, `assists_per_min`, `last_hits_per_min`, `denies_per_min`, `hero_damage_per_min`, `hero_healing_per_min`, `tower_damage`) the value at percentiles 0.1 to 0.99, sorted by percentile. An unknown hero id returns 404.", - "operationId": "opendota-benchmarks", + "description": "Returns each continuous driving period on one set of tyres: stint number, starting and ending lap, tyre compound and tyre age at the start. Use session_key with driver_number for one driver's strategy.", + "operationId": "openf1-stints", "parameters": [ { - "description": "Positive hero ID from opendota-heroes", + "description": "Positive session key from openf1-sessions, or `latest` for the current session example(11408)", "in": "query", - "name": "hero_id", - "required": true, + "name": "session_key", + "type": "string", + "x-example": "11408" + }, + { + "description": "Positive meeting key from openf1-meetings, or `latest` for the current meeting example(1299)", + "in": "query", + "name": "meeting_key", + "type": "string", + "x-example": "1299" + }, + { + "description": "Positive permanent driver number (see openf1-drivers) example(1)", + "in": "query", + "name": "driver_number", "type": "integer", "x-example": 1 + }, + { + "description": "Tyre compound; one of SOFT, MEDIUM, HARD, INTERMEDIATE, WET Enums(SOFT,MEDIUM,HARD,INTERMEDIATE,WET) example(SOFT)", + "enum": [ + "SOFT", + "MEDIUM", + "HARD", + "INTERMEDIATE", + "WET" + ], + "in": "query", + "name": "compound", + "type": "string", + "x-example": "SOFT" + }, + { + "description": "Stint number within the session, starting at 1", + "in": "query", + "name": "stint_number", + "type": "integer" + }, + { + "description": "Inclusive minimum tyre age at stint start, in laps example(3)", + "in": "query", + "name": "tyre_age_at_start_gte", + "type": "integer", + "x-example": 3 + }, + { + "description": "Inclusive maximum tyre age at stint start, in laps", + "in": "query", + "name": "tyre_age_at_start_lte", + "type": "integer" + }, + { + "description": "Inclusive minimum stint starting lap", + "in": "query", + "name": "lap_start_gte", + "type": "integer" + }, + { + "description": "Inclusive maximum stint starting lap", + "in": "query", + "name": "lap_start_lte", + "type": "integer" + }, + { + "description": "Inclusive minimum stint ending lap", + "in": "query", + "name": "lap_end_gte", + "type": "integer" + }, + { + "description": "Inclusive maximum stint ending lap", + "in": "query", + "name": "lap_end_lte", + "type": "integer" + }, + { + "collectionFormat": "multi", + "description": "Repeatable upstream filter written as , with operators >=, <=, =, > and <. Repeated filters on the same attribute are OR'ed, a lower and upper bound form an inclusive range, and different attributes are AND'ed. Filterable attributes on this route: meeting_key, session_key, stint_number, driver_number, lap_start, lap_end, compound, tyre_age_at_start.", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array" } ], "produces": [ @@ -450285,7 +526695,7 @@ { "properties": { "data": { - "$ref": "#/definitions/opendota.BenchmarksResponse" + "$ref": "#/definitions/openf1.StintsResponse" } }, "type": "object" @@ -450323,41 +526733,64 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota Dota 2 hero benchmarks by percentile", + "summary": "OpenF1 Formula 1 stints and tyre compounds", "tags": [ - "OpenDota" + "OpenF1" ] } }, - "/opendota/constants": { + "/openf1/team-radio": { "get": { "consumes": [ "application/json" ], - "description": "Returns one OpenDota lookup table as a sorted list of `id`/`name` entries, used to decode ids in match data: game modes and lobby types (with `balanced`), patches (with release `date`), regions, server clusters (`value` is the region id), item and ability ids, permanent buff ids, experience thresholds per level (`value`) countries (`id` is the ISO code), order types (`order_types`, the unit order names) and player slot colors (`player_colors`, hex colors). `resource` is one of `game_mode`, `lobby_type`, `patch`, `region`, `cluster`, `item_ids`, `ability_ids`, `permanent_buffs`, `xp_level`, `countries`.", - "operationId": "opendota-constants", + "description": "Returns published driver-to-team radio exchanges with the timestamp and an MP3 recording URL. Only a selection of communications is published and coverage is sparse; several sessions return no radio data at all.", + "operationId": "openf1-team-radio", "parameters": [ { - "description": "Lookup table; one of game_mode, lobby_type, patch, region, cluster, item_ids, ability_ids, permanent_buffs, xp_level, countries, order_types, player_colors", - "enum": [ - "game_mode", - "lobby_type", - "patch", - "region", - "cluster", - "item_ids", - "ability_ids", - "permanent_buffs", - "xp_level", - "countries", - "order_types", - "player_colors" - ], + "description": "Positive session key from openf1-sessions, or `latest` for the current session example(11408)", "in": "query", - "name": "resource", - "required": true, + "name": "session_key", "type": "string", - "x-example": "game_mode" + "x-example": "11408" + }, + { + "description": "Positive meeting key from openf1-meetings, or `latest` for the current meeting example(1299)", + "in": "query", + "name": "meeting_key", + "type": "string", + "x-example": "1299" + }, + { + "description": "Positive permanent driver number (see openf1-drivers) example(1)", + "in": "query", + "name": "driver_number", + "type": "integer", + "x-example": 1 + }, + { + "description": "Inclusive lower bound; RFC3339 timestamp or YYYY-MM-DD example(2026-11-07)", + "in": "query", + "name": "date_from", + "type": "string", + "x-example": "2026-11-07" + }, + { + "description": "Inclusive upper bound; RFC3339 timestamp or YYYY-MM-DD example(2026-11-08)", + "in": "query", + "name": "date_to", + "type": "string", + "x-example": "2026-11-08" + }, + { + "collectionFormat": "multi", + "description": "Repeatable upstream filter written as , with operators >=, <=, =, > and <. Repeated filters on the same attribute are OR'ed, a lower and upper bound form an inclusive range, and different attributes are AND'ed. Filterable attributes on this route: meeting_key, session_key, driver_number, date, recording_url.", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array" } ], "produces": [ @@ -450374,7 +526807,7 @@ { "properties": { "data": { - "$ref": "#/definitions/opendota.ConstantsResponse" + "$ref": "#/definitions/openf1.TeamRadioResponse" } }, "type": "object" @@ -450388,6 +526821,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -450406,27 +526845,137 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota Dota 2 id lookup tables", + "summary": "OpenF1 Formula 1 team radio recordings", "tags": [ - "OpenDota" + "OpenF1" ] } }, - "/opendota/hero-durations": { + "/openf1/weather": { "get": { "consumes": [ "application/json" ], - "description": "Returns a hero's games and wins grouped by game length in five-minute bins (`start_minute` is the bin's first minute), sorted by length, to show whether the hero is stronger early or late. An unknown hero id returns not found.", - "operationId": "opendota-hero-durations", + "description": "Returns track-weather samples updated about once a minute: air and track temperature, humidity, pressure, wind speed and direction, and the rainfall flag. Pass session_key or meeting_key plus a date window for a bounded read.", + "operationId": "openf1-weather", "parameters": [ { - "description": "Positive hero ID from opendota-heroes", + "description": "Positive session key from openf1-sessions, or `latest` for the current session example(11408)", "in": "query", - "name": "hero_id", - "required": true, - "type": "integer", - "x-example": 1 + "name": "session_key", + "type": "string", + "x-example": "11408" + }, + { + "description": "Positive meeting key from openf1-meetings, or `latest` for the current meeting example(1299)", + "in": "query", + "name": "meeting_key", + "type": "string", + "x-example": "1299" + }, + { + "description": "Inclusive lower bound; RFC3339 timestamp or YYYY-MM-DD example(2026-11-07)", + "in": "query", + "name": "date_from", + "type": "string", + "x-example": "2026-11-07" + }, + { + "description": "Inclusive upper bound; RFC3339 timestamp or YYYY-MM-DD example(2026-11-08)", + "in": "query", + "name": "date_to", + "type": "string", + "x-example": "2026-11-08" + }, + { + "description": "Inclusive minimum air temperature in Celsius", + "in": "query", + "name": "air_temperature_gte", + "type": "number" + }, + { + "description": "Inclusive maximum air temperature in Celsius", + "in": "query", + "name": "air_temperature_lte", + "type": "number" + }, + { + "description": "Inclusive minimum track temperature in Celsius example(52)", + "in": "query", + "name": "track_temperature_gte", + "type": "number", + "x-example": 52 + }, + { + "description": "Inclusive maximum track temperature in Celsius", + "in": "query", + "name": "track_temperature_lte", + "type": "number" + }, + { + "description": "Inclusive minimum relative humidity percentage", + "in": "query", + "name": "humidity_gte", + "type": "number" + }, + { + "description": "Inclusive maximum relative humidity percentage", + "in": "query", + "name": "humidity_lte", + "type": "number" + }, + { + "description": "Inclusive minimum air pressure in mbar", + "in": "query", + "name": "pressure_gte", + "type": "number" + }, + { + "description": "Inclusive maximum air pressure in mbar", + "in": "query", + "name": "pressure_lte", + "type": "number" + }, + { + "description": "Inclusive minimum wind direction in degrees example(130)", + "in": "query", + "name": "wind_direction_gte", + "type": "number", + "x-example": 130 + }, + { + "description": "Inclusive maximum wind direction in degrees", + "in": "query", + "name": "wind_direction_lte", + "type": "number" + }, + { + "description": "Inclusive minimum wind speed in m/s", + "in": "query", + "name": "wind_speed_gte", + "type": "number" + }, + { + "description": "Inclusive maximum wind speed in m/s", + "in": "query", + "name": "wind_speed_lte", + "type": "number" + }, + { + "description": "Rainfall flag, 0 or 1", + "in": "query", + "name": "rainfall", + "type": "integer" + }, + { + "collectionFormat": "multi", + "description": "Repeatable upstream filter written as , with operators >=, <=, =, > and <. Repeated filters on the same attribute are OR'ed, a lower and upper bound form an inclusive range, and different attributes are AND'ed. Filterable attributes on this route: meeting_key, session_key, date, air_temperature, humidity, pressure, rainfall, track_temperature, wind_direction, wind_speed.", + "in": "query", + "items": { + "type": "string" + }, + "name": "filter", + "type": "array" } ], "produces": [ @@ -450443,7 +526992,7 @@ { "properties": { "data": { - "$ref": "#/definitions/opendota.HeroDurationsResponse" + "$ref": "#/definitions/openf1.WeatherResponse" } }, "type": "object" @@ -450481,27 +527030,27 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota Dota 2 hero win rate by game duration", + "summary": "OpenF1 Formula 1 track weather samples", "tags": [ - "OpenDota" + "OpenF1" ] } }, - "/opendota/hero-items": { + "/openligadb/current-group": { "get": { "consumes": [ "application/json" ], - "description": "Returns the items players buy on a hero in four phases (`start_game`, `early_game`, `mid_game`, `late_game`), each sorted by purchase count, with item ids resolved to internal names such as `power_treads` through the item-id table. An unknown hero id returns not found.", - "operationId": "opendota-hero-items", + "description": "Returns OpenLigaDB's current group or matchday for a league shortcut. Use `openligadb_groups` for all matchdays and `openligadb_current_matchday` for the matches in this group.", + "operationId": "openligadb-current-group", "parameters": [ { - "description": "Positive hero ID from opendota-heroes", + "description": "Exact shortcut from openligadb-leagues", "in": "query", - "name": "hero_id", + "name": "league_shortcut", "required": true, - "type": "integer", - "x-example": 1 + "type": "string", + "x-example": "bl1" } ], "produces": [ @@ -450511,19 +527060,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/opendota.HeroItemsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/openligadb.objectResponseDoc" } }, "400": { @@ -450556,27 +527093,27 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota Dota 2 hero item popularity", + "summary": "Get the current league matchday", "tags": [ - "OpenDota" + "OpenLigaDB" ] } }, - "/opendota/hero-matchups": { + "/openligadb/current-matchday": { "get": { "consumes": [ "application/json" ], - "description": "Returns how often a hero faced each other hero in recent public games and how often it won, sorted by games played, with localized hero names and win-rate percentages. An unknown hero id returns not found.", - "operationId": "opendota-hero-matchups", + "description": "Returns the matches for OpenLigaDB's current group or matchday in one league. This mirrors the source's current-matchday route; a league without a current matchday may return not found. Use `openligadb_current_group` to see the selected group id or `openligadb_matches` for a whole season.", + "operationId": "openligadb-current-matchday", "parameters": [ { - "description": "Positive hero ID from opendota-heroes", + "description": "Exact shortcut from openligadb-leagues", "in": "query", - "name": "hero_id", + "name": "league_shortcut", "required": true, - "type": "integer", - "x-example": 1 + "type": "string", + "x-example": "bl1" } ], "produces": [ @@ -450586,19 +527123,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/opendota.HeroMatchupsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/openligadb.listResponseDoc" } }, "400": { @@ -450631,90 +527156,35 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota Dota 2 hero matchup records", + "summary": "Get current matchday fixtures and results", "tags": [ - "OpenDota" + "OpenLigaDB" ] } }, - "/opendota/hero-stats": { + "/openligadb/goal-getters": { "get": { "consumes": [ "application/json" ], - "description": "Returns every Dota 2 hero with base stats (health, mana, armor, attack range, move speed) and OpenDota's aggregate pick/win counts and win rates for professional games (with bans), public games, turbo, and each of the eight rank brackets (`Herald`, `Guardian`, `Crusader`, `Archon`, `Legend`, `Ancient`, `Divine`, `Immortal`). Filter by `primary_attr` (`agi`, `all`, `int`, `str`), `attack_type` (`Melee`, `Ranged`) and `role`, sort with `sort` and `desc`, and cap with `limit`. Win rates are percentages and are omitted when there are no picks.", - "operationId": "opendota-hero-stats", + "description": "Returns the source's goal-getter ranking for one discovered league shortcut and season. The ranking uses the source's own goal and result records.", + "operationId": "openligadb-goal-getters", "parameters": [ { - "description": "Primary attribute filter; one of agi, all, int, str", - "enum": [ - "agi", - "all", - "int", - "str" - ], - "in": "query", - "name": "primary_attr", - "type": "string" - }, - { - "description": "Attack type filter; one of Melee, Ranged", - "enum": [ - "Melee", - "Ranged" - ], - "in": "query", - "name": "attack_type", - "type": "string" - }, - { - "description": "Role filter; one of Carry, Disabler, Durable, Escape, Initiator, Nuker, Pusher, Support", - "enum": [ - "Carry", - "Disabler", - "Durable", - "Escape", - "Initiator", - "Nuker", - "Pusher", - "Support" - ], - "in": "query", - "name": "role", - "type": "string" - }, - { - "description": "Sort key; one of id, name, pro_pick, pro_win, pro_ban, pro_win_rate, pub_pick, pub_win, pub_win_rate, turbo_pick, turbo_win_rate; defaults to id", - "enum": [ - "id", - "name", - "pro_pick", - "pro_win", - "pro_ban", - "pro_win_rate", - "pub_pick", - "pub_win", - "pub_win_rate", - "turbo_pick", - "turbo_win_rate" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Sort descending (the default for every key except id and name)", + "description": "Exact shortcut from openligadb-leagues", "in": "query", - "name": "desc", - "type": "boolean" + "name": "league_shortcut", + "required": true, + "type": "string", + "x-example": "bl1" }, { - "description": "Number of heroes to return, 1 to 200; defaults to all", + "description": "Season starting year", "in": "query", - "maximum": 200, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "season", + "required": true, + "type": "integer", + "x-example": 2026 } ], "produces": [ @@ -450724,19 +527194,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/opendota.HeroStatsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/openligadb.listResponseDoc" } }, "400": { @@ -450745,6 +527203,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -450763,19 +527227,37 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota Dota 2 hero pick and win statistics", + "summary": "List league season goal-getters", "tags": [ - "OpenDota" + "OpenLigaDB" ] } }, - "/opendota/heroes": { + "/openligadb/groups": { "get": { "consumes": [ "application/json" ], - "description": "Returns the live OpenDota hero lookup needed to resolve `hero_id` values in live and detailed match responses. It includes every current hero ID with its internal name, localized name, primary attribute (`agi`, `all`, `int`, or `str`) and attack type (`Melee` or `Ranged`).", - "operationId": "opendota-heroes", + "description": "Returns every matchday or round id for one discovered league shortcut and season. Pass a returned `groupOrderID` to `openligadb_matchday_matches` or `openligadb_last_changed`. Some legacy league-season entries in the source directory may return 404 or an empty group list.", + "operationId": "openligadb-groups", + "parameters": [ + { + "description": "Exact shortcut from openligadb-leagues", + "in": "query", + "name": "league_shortcut", + "required": true, + "type": "string", + "x-example": "bl1" + }, + { + "description": "Season starting year", + "in": "query", + "name": "season", + "required": true, + "type": "integer", + "x-example": 2026 + } + ], "produces": [ "application/json" ], @@ -450783,19 +527265,19 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/opendota.HeroesResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/openligadb.listResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -450816,39 +527298,43 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota hero directory", + "summary": "List league matchdays and rounds", "tags": [ - "OpenDota" + "OpenLigaDB" ] } }, - "/opendota/items": { + "/openligadb/last-changed": { "get": { "consumes": [ "application/json" ], - "description": "Returns Dota 2 items from OpenDota's constants table as compact summaries (key, id, display name, quality, gold cost, behavior, cooldown, mana cost, components, active and passive abilities, numeric attributes), sorted by key. `q` searches the key and display name, `quality` filters by quality, and `qualities` lists the quality values present.", - "operationId": "opendota-items", + "description": "Returns OpenLigaDB's source update timestamp for one league, season and matchday. Use this cheap check before refetching the full matchday when the timestamp is unchanged.", + "operationId": "openligadb-last-changed", "parameters": [ { - "description": "Case-insensitive search on the item key or display name, for example blink", + "description": "Exact shortcut from openligadb-leagues", "in": "query", - "name": "q", - "type": "string" + "name": "league_shortcut", + "required": true, + "type": "string", + "x-example": "bl1" }, { - "description": "Item quality from the qualities list in the response; currently artifact, common, component, consumable, consumable;laning, epic, rare, secret_shop", + "description": "Season starting year", "in": "query", - "name": "quality", - "type": "string" + "name": "season", + "required": true, + "type": "integer", + "x-example": 2026 }, { - "description": "Number of items to return, 1 to 500; defaults to 50", + "description": "Matchday or round id from openligadb-groups", "in": "query", - "maximum": 500, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "group_order_id", + "required": true, + "type": "integer", + "x-example": 8 } ], "produces": [ @@ -450858,19 +527344,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/opendota.ItemsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/openligadb.stringResponseDoc" } }, "400": { @@ -450879,6 +527353,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -450897,27 +527377,27 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota Dota 2 item reference", + "summary": "Get a matchday's last update time", "tags": [ - "OpenDota" + "OpenLigaDB" ] } }, - "/opendota/league": { + "/openligadb/last-match": { "get": { "consumes": [ "application/json" ], - "description": "Returns one league's name, tier (`amateur`, `excluded`, `premium`, `professional` or `unrated` when blank), ticket and banner, plus the teams that played in it with rating and record. An unknown league id returns not found.", - "operationId": "opendota-league", + "description": "Returns the most recently played match for a league shortcut. Use `openligadb_leagues` to find a shortcut or `openligadb_last_team_match` for one team.", + "operationId": "openligadb-last-match", "parameters": [ { - "description": "Positive OpenDota league ID from opendota-leagues", + "description": "Exact shortcut from openligadb-leagues", "in": "query", - "name": "league_id", + "name": "league_shortcut", "required": true, - "type": "integer", - "x-example": 20395 + "type": "string", + "x-example": "bl1" } ], "produces": [ @@ -450927,19 +527407,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/opendota.LeagueDetailResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/openligadb.objectResponseDoc" } }, "400": { @@ -450972,28 +527440,37 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota Dota 2 league detail and teams", + "summary": "Get a league's last match", "tags": [ - "OpenDota" + "OpenLigaDB" ] } }, - "/opendota/league-match-ids": { + "/openligadb/last-team-match": { "get": { "consumes": [ "application/json" ], - "description": "Returns match IDs for one league, including amateur leagues omitted from opendota_league_matches. An empty array is valid for a league with no matches. Copy an ID into opendota_match for match details.", - "operationId": "opendota-league-match-ids", + "description": "Returns the most recently played match for one team id in one league id. Discover the league id with `openligadb_leagues` and the team id with `openligadb_teams`.", + "operationId": "openligadb-last-team-match", "parameters": [ { - "description": "Positive OpenDota league ID from opendota_leagues", + "description": "OpenLigaDB league id from openligadb_leagues", "format": "int64", "in": "query", "name": "league_id", "required": true, "type": "integer", - "x-example": 20395 + "x-example": 4937 + }, + { + "description": "OpenLigaDB team id from openligadb_teams", + "format": "int64", + "in": "query", + "name": "team_id", + "required": true, + "type": "integer", + "x-example": 40 } ], "produces": [ @@ -451003,19 +527480,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/opendota.LeagueMatchIDsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/openligadb.objectResponseDoc" } }, "400": { @@ -451048,36 +527513,43 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota match IDs for one league", + "summary": "Get a team's last match in a league", "tags": [ - "OpenDota" + "OpenLigaDB" ] } }, - "/opendota/league-matches": { + "/openligadb/league-team-matches": { "get": { "consumes": [ "application/json" ], - "description": "Returns the complete match list supplied for one OpenDota league, including match ID, teams, scores, start time and series metadata. Optionally filter locally to matches involving one team; league_id and team_id are echoed. This source route is not paginated and can include completed or scheduled rows; use opendota_match for parsed player statistics.", - "operationId": "opendota-league-matches", + "description": "Returns matches in one league season whose team name matches a partial text fragment. Use `openligadb_teams` for exact team names and ids. Numeric fragments are rejected because the upstream path assigns numeric segments to matchday ids.", + "operationId": "openligadb-league-team-matches", "parameters": [ { - "description": "Positive league ID from opendota_leagues", - "format": "int64", + "description": "Exact shortcut from openligadb-leagues", "in": "query", - "name": "league_id", + "name": "league_shortcut", "required": true, - "type": "integer", - "x-example": 20395 + "type": "string", + "x-example": "bl1" }, { - "description": "Optional positive team ID; keeps matches where this team is Radiant or Dire", - "format": "int64", + "description": "Season starting year", "in": "query", - "name": "team_id", + "name": "season", + "required": true, "type": "integer", - "x-example": 8255888 + "x-example": 2026 + }, + { + "description": "Partial team-name text; numeric-only values are not accepted", + "in": "query", + "name": "team_filter", + "required": true, + "type": "string", + "x-example": "Bayern" } ], "produces": [ @@ -451087,19 +527559,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/opendota.LeagueMatchesResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/openligadb.listResponseDoc" } }, "400": { @@ -451132,32 +527592,25 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota matches for one league", + "summary": "Find a team's matches in one league season", "tags": [ - "OpenDota" + "OpenLigaDB" ] } }, - "/opendota/leagues": { + "/openligadb/leagues": { "get": { "consumes": [ "application/json" ], - "description": "Returns every league ID and its source name, ticket, banner and tier. The source list is large and can include historical or excluded leagues. Filter `tier` locally; `unrated` selects source rows whose tier is blank. The response echoes tier_filter. Use a returned ID with opendota_league_matches.", - "operationId": "opendota-leagues", + "description": "Returns every league-season record across all sports. Set `season` to the season's starting year to use OpenLigaDB's season-specific listing. This is the discovery source for `league_shortcut`, `league_id`, and `sport`; shortcuts may repeat across seasons, and the response is not paginated. The catalog is community-maintained and may include user-created or legacy entries; verify a selected pair through groups or matches.", + "operationId": "openligadb-leagues", "parameters": [ { - "description": "Optional exact source tier filter", - "enum": [ - "amateur", - "excluded", - "premium", - "professional", - "unrated" - ], + "description": "Optional season starting year, e.g. 2026 for 2026/27", "in": "query", - "name": "tier", - "type": "string" + "name": "season", + "type": "integer" } ], "produces": [ @@ -451167,19 +527620,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/opendota.LeaguesResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/openligadb.listResponseDoc" } }, "400": { @@ -451206,19 +527647,30 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota league directory", + "summary": "List OpenLigaDB league seasons", "tags": [ - "OpenDota" + "OpenLigaDB" ] } }, - "/opendota/live": { + "/openligadb/match": { "get": { "consumes": [ "application/json" ], - "description": "Returns OpenDota's current top live Dota 2 games: match and league IDs, team names, score, game clock, net-worth lead, player names when exposed, raw hero IDs, the upstream team code (`0` or `1`), and team slot (`1`, `2`, `3`, `4`, or `5`). The source mixes public matchmaking with tournament games; `league_id` is `0` when no league is associated, so its presence alone does not certify a professional event. `delay_seconds` and `last_update_time` report source freshness. Live player K/D/A is not provided by this endpoint. Resolve `hero_id` values with opendota_heroes.", - "operationId": "opendota-live", + "description": "Returns one match record with its results, goal sequence, teams, location, and source update time. Get `match_id` from `openligadb_matches`, `openligadb_matchday_matches`, or a team-match endpoint.", + "operationId": "openligadb-match", + "parameters": [ + { + "description": "OpenLigaDB match id", + "format": "int64", + "in": "query", + "name": "match_id", + "required": true, + "type": "integer", + "x-example": 83224 + } + ], "produces": [ "application/json" ], @@ -451226,19 +527678,19 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/opendota.LiveMatchesResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/openligadb.objectResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -451259,28 +527711,43 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota live games", + "summary": "Get one OpenLigaDB match", "tags": [ - "OpenDota" + "OpenLigaDB" ] } }, - "/opendota/match": { + "/openligadb/matchday-matches": { "get": { "consumes": [ "application/json" ], - "description": "Returns a compact parsed match summary and player lines for one numeric OpenDota match ID. Copy the ID from opendota_live, opendota_pro_matches, opendota_league_matches, or opendota_league_match_ids. Replay-derived player data can be absent or delayed; a missing match ID returns not found. Steam account IDs, chat logs, replay salts and raw telemetry are not returned. `hero_id` is resolved with opendota_heroes.", - "operationId": "opendota-match", + "description": "Returns all fixtures and results for one discovered league shortcut, season and group order id. Use `openligadb_groups` to discover valid matchday or round ids.", + "operationId": "openligadb-matchday-matches", "parameters": [ { - "description": "Positive OpenDota match ID from live, pro-match, league-match, or league-match-ID results", - "format": "int64", + "description": "Exact shortcut from openligadb-leagues", "in": "query", - "name": "id", + "name": "league_shortcut", + "required": true, + "type": "string", + "x-example": "bl1" + }, + { + "description": "Season starting year", + "in": "query", + "name": "season", "required": true, "type": "integer", - "x-example": 9063495955 + "x-example": 2026 + }, + { + "description": "Matchday or round id from openligadb-groups", + "in": "query", + "name": "group_order_id", + "required": true, + "type": "integer", + "x-example": 8 } ], "produces": [ @@ -451290,19 +527757,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/opendota.MatchDetail" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/openligadb.listResponseDoc" } }, "400": { @@ -451335,26 +527790,35 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota match detail", + "summary": "List one league matchday", "tags": [ - "OpenDota" + "OpenLigaDB" ] } }, - "/opendota/patch-notes": { + "/openligadb/matches": { "get": { "consumes": [ "application/json" ], - "description": "Without `patch`, lists every patch key OpenDota has notes for (from 7_06d to the current patch) in chronological order with the number of heroes and items changed. With `patch` (for example `7_38`), returns that patch's general notes, item changes and hero changes (general, talents and per-ability notes, with the hero id and name resolved).", - "operationId": "opendota-patch-notes", + "description": "Returns every fixture and result recorded for one league shortcut and season. Use `openligadb_groups` and `openligadb_matchday_matches` for one round, or `openligadb_leagues` to discover valid league-season pairs. The source returns the full list without pagination.", + "operationId": "openligadb-league-matches", "parameters": [ { - "description": "Patch key such as 7_38 or 7_06d; omit it to list every patch key", + "description": "Exact shortcut from openligadb-leagues", "in": "query", - "name": "patch", + "name": "league_shortcut", + "required": true, "type": "string", - "x-example": "7_38" + "x-example": "bl1" + }, + { + "description": "Season starting year", + "in": "query", + "name": "season", + "required": true, + "type": "integer", + "x-example": 2026 } ], "produces": [ @@ -451364,19 +527828,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/opendota.PatchNotesResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/openligadb.listResponseDoc" } }, "400": { @@ -451385,6 +527837,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -451403,27 +527861,45 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota Dota 2 patch notes", + "summary": "List a league season's matches", "tags": [ - "OpenDota" + "OpenLigaDB" ] } }, - "/opendota/pro-matches": { + "/openligadb/matches-by-team": { "get": { "consumes": [ "application/json" ], - "description": "Returns professional Dota 2 match summaries with match ID, teams, league, start time, duration, scores, winner and series metadata. OpenDota returns up to 100 rows per page. Set `less_than_match_id` to a positive match ID to fetch older results; use `next_less_than_match_id` from the response for the next page. An empty cursor page is the end of history. This is recent results, not an upcoming-match schedule. Use opendota_match with one returned match ID for parsed player statistics.", - "operationId": "opendota-pro-matches", + "description": "Returns matches around the current date across leagues for a partial team-name fragment. Both week counts are required; zero is allowed. Use `openligadb_matches_by_team_id` when you have a team id.", + "operationId": "openligadb-matches-by-team", "parameters": [ { - "description": "Return professional matches with IDs lower than this positive match ID; copy next_less_than_match_id from the previous response", + "description": "Partial team-name fragment", + "in": "query", + "name": "team_filter", + "required": true, + "type": "string", + "x-example": "Bayern" + }, + { + "description": "Number of weeks before today to include; zero is allowed", "format": "int64", "in": "query", - "name": "less_than_match_id", + "name": "weeks_past", + "required": true, "type": "integer", - "x-example": 9063495955 + "x-example": 1 + }, + { + "description": "Number of weeks after today to include; zero is allowed", + "format": "int64", + "in": "query", + "name": "weeks_future", + "required": true, + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -451433,19 +527909,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/opendota.ProMatchesResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/openligadb.listResponseDoc" } }, "400": { @@ -451454,6 +527918,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -451472,47 +527942,46 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota recent professional matches", + "summary": "Find recent and upcoming matches by team name", "tags": [ - "OpenDota" + "OpenLigaDB" ] } }, - "/opendota/pro-players": { + "/openligadb/matches-by-team-id": { "get": { "consumes": [ "application/json" ], - "description": "Returns a sanitized, searchable page of the OpenDota pro-player roster with player names, country codes and team tags. The upstream sends an unfiltered roster without pagination; this endpoint caches it and applies team_id, q, limit and offset locally. q searches names, tags and country codes. Account IDs, Steam IDs, profile URLs and avatars are omitted.", - "operationId": "opendota-pro-players", + "description": "Returns matches around the current date across leagues for an OpenLigaDB team id. Both week counts are required; zero is allowed. Use `openligadb_matches_by_team` for a partial name search.", + "operationId": "openligadb-matches-by-team-id", "parameters": [ { - "description": "Optional positive team ID from opendota_teams", + "description": "OpenLigaDB team id from openligadb_teams", "format": "int64", "in": "query", "name": "team_id", + "required": true, "type": "integer", - "x-example": 8255888 - }, - { - "description": "Case-insensitive substring in player/team names, team tags or country codes; maximum 200 characters", - "in": "query", - "name": "q", - "type": "string" + "x-example": 40 }, { - "description": "Local page size, default 50, maximum 100", + "description": "Number of weeks before today to include; zero is allowed", + "format": "int64", "in": "query", - "name": "limit", + "name": "weeks_past", + "required": true, "type": "integer", - "x-example": 50 + "x-example": 1 }, { - "description": "Zero-based local offset, default 0", + "description": "Number of weeks after today to include; zero is allowed", + "format": "int64", "in": "query", - "name": "offset", + "name": "weeks_future", + "required": true, "type": "integer", - "x-example": 0 + "x-example": 1 } ], "produces": [ @@ -451522,19 +527991,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/opendota.ProPlayersResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/openligadb.listResponseDoc" } }, "400": { @@ -451543,58 +528000,11 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "OpenDota professional player roster", - "tags": [ - "OpenDota" - ] - } - }, - "/opendota/rank-distribution": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns how OpenDota's rated players are distributed over Dota 2 rank tiers: for each `rank_tier` (the first digit is the medal, the second the stars) the medal name, stars, player count, cumulative count and the share and cumulative share in percent, sorted by tier.", - "operationId": "opendota-rank-distribution", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/opendota.DistributionsResponse" - } - }, - "type": "object" - } - ] - } }, "429": { "description": "Too Many Requests", @@ -451614,40 +528024,27 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota Dota 2 rank distribution", + "summary": "Find recent and upcoming matches by team id", "tags": [ - "OpenDota" + "OpenLigaDB" ] } }, - "/opendota/records": { + "/openligadb/next-match": { "get": { "consumes": [ "application/json" ], - "description": "Returns the top 100 single-match records for one stat (`kills`, `deaths`, `assists`, `last_hits`, `denies`, `gold_per_min`, `xp_per_min`, `hero_damage`, `tower_damage`, `hero_healing`, `duration`): rank, match id, start time, hero (with name) and the record value. Use opendota-match with a returned match id.", - "operationId": "opendota-records", + "description": "Returns the next upcoming match for a league shortcut. Use `openligadb_leagues` to find a shortcut or `openligadb_next_team_match` for one team.", + "operationId": "openligadb-next-match", "parameters": [ { - "description": "Record field; one of kills, deaths, assists, last_hits, denies, gold_per_min, xp_per_min, hero_damage, tower_damage, hero_healing, duration", - "enum": [ - "kills", - "deaths", - "assists", - "last_hits", - "denies", - "gold_per_min", - "xp_per_min", - "hero_damage", - "tower_damage", - "hero_healing", - "duration" - ], + "description": "Exact shortcut from openligadb-leagues", "in": "query", - "name": "field", + "name": "league_shortcut", "required": true, "type": "string", - "x-example": "kills" + "x-example": "bl1" } ], "produces": [ @@ -451657,19 +528054,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/opendota.RecordsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/openligadb.objectResponseDoc" } }, "400": { @@ -451678,6 +528063,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -451696,73 +528087,37 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota Dota 2 single-match record leaderboards", + "summary": "Get a league's next match", "tags": [ - "OpenDota" + "OpenLigaDB" ] } }, - "/opendota/scenarios": { + "/openligadb/next-team-match": { "get": { "consumes": [ "application/json" ], - "description": "Returns OpenDota's scenario datasets as games, wins and win rate rows, most games first. `kind` selects `item-timings` (an item bought by a time for a hero), `lane-roles` (a hero in a lane role at a time) or `misc` (courier kill, first blood and chat scenarios by side and region). Filters are validated before any upstream call: `hero_id` and `item` apply to item-timings, `hero_id` and `lane_role` to lane-roles, `scenario` to misc.", - "operationId": "opendota-scenarios", + "description": "Returns the next match for one team id in one league id. Discover the league id with `openligadb_leagues` and the team id with `openligadb_teams`.", + "operationId": "openligadb-next-team-match", "parameters": [ { - "description": "Dataset; one of item-timings, lane-roles, misc", - "enum": [ - "item-timings", - "lane-roles", - "misc" - ], + "description": "OpenLigaDB league id from openligadb_leagues", + "format": "int64", "in": "query", - "name": "kind", + "name": "league_id", "required": true, - "type": "string", - "x-example": "item-timings" - }, - { - "description": "Positive hero ID from opendota-heroes; item-timings and lane-roles only", - "in": "query", - "name": "hero_id", "type": "integer", - "x-example": 1 - }, - { - "description": "Item name from opendota-constants item_ids, for example bfury; item-timings only", - "in": "query", - "name": "item", - "type": "string" - }, - { - "description": "Lane role 1 to 4 (1 safe lane, 2 mid, 3 off lane, 4 jungle); lane-roles only", - "in": "query", - "maximum": 4, - "minimum": 1, - "name": "lane_role", - "type": "integer" - }, - { - "description": "Scenario; one of courier_kill, first_blood, neg_chat_1min, pos_chat_1min; misc only", - "enum": [ - "courier_kill", - "first_blood", - "neg_chat_1min", - "pos_chat_1min" - ], - "in": "query", - "name": "scenario", - "type": "string" + "x-example": 4937 }, { - "description": "Number of rows to return, 1 to 2000, most games first; defaults to all", + "description": "OpenLigaDB team id from openligadb_teams", + "format": "int64", "in": "query", - "maximum": 2000, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "team_id", + "required": true, + "type": "integer", + "x-example": 40 } ], "produces": [ @@ -451772,19 +528127,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/opendota.ScenariosResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/openligadb.objectResponseDoc" } }, "400": { @@ -451817,28 +528160,28 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota Dota 2 scenario win rates", + "summary": "Get a team's next match in a league", "tags": [ - "OpenDota" + "OpenLigaDB" ] } }, - "/opendota/team": { + "/openligadb/result-infos": { "get": { "consumes": [ "application/json" ], - "description": "Returns one team's OpenDota profile, tag, logo, rating, wins, losses and most recent match metadata.", - "operationId": "opendota-team", + "description": "Returns the result types configured for one OpenLigaDB league id. Use this for league-specific result names and ids; `openligadb_result_types` lists the global machine-readable meanings.", + "operationId": "openligadb-result-infos", "parameters": [ { - "description": "Positive OpenDota team ID from opendota_teams or a match response", + "description": "OpenLigaDB league id from openligadb-leagues", "format": "int64", "in": "query", - "name": "team_id", + "name": "league_id", "required": true, "type": "integer", - "x-example": 8255888 + "x-example": 4937 } ], "produces": [ @@ -451848,19 +528191,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/opendota.TeamResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/openligadb.listResponseDoc" } }, "400": { @@ -451893,29 +528224,19 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota team details", + "summary": "List result types configured for a league", "tags": [ - "OpenDota" + "OpenLigaDB" ] } }, - "/opendota/team-heroes": { + "/openligadb/result-types": { "get": { "consumes": [ "application/json" ], - "description": "Returns the heroes a team has played with games, wins and win rate, sorted by games played. Heroes the team never played are omitted. An unknown team id returns not found.", - "operationId": "opendota-team-heroes", - "parameters": [ - { - "description": "Positive OpenDota team ID from opendota-teams or a match response", - "in": "query", - "name": "team_id", - "required": true, - "type": "integer", - "x-example": 8255888 - } - ], + "description": "Returns the global machine-readable meanings of OpenLigaDB result types, including halftime, regulation, extra time, penalties and unknown.", + "operationId": "openligadb-result-types", "produces": [ "application/json" ], @@ -451923,32 +528244,49 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/opendota.TeamHeroesResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/openligadb.listResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List global result types", + "tags": [ + "OpenLigaDB" + ] + } + }, + "/openligadb/sports": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns OpenLigaDB's current sport directory. Use the returned sport names and ids with `openligadb_leagues` to inspect the complete league-season catalog; the source currently exposes 13 sports, including its `Test` category.", + "operationId": "openligadb-sports", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/openligadb.listResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -451968,28 +528306,35 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota Dota 2 team hero pool", + "summary": "List OpenLigaDB sports", "tags": [ - "OpenDota" + "OpenLigaDB" ] } }, - "/opendota/team-matches": { + "/openligadb/table": { "get": { "consumes": [ "application/json" ], - "description": "Returns a team's complete upstream match history with league, opponent, score and winner data. The source does not paginate this list; large histories can contain over a thousand rows. Use opendota_match for parsed player statistics.", - "operationId": "opendota-team-matches", + "description": "Returns the league standings for one discovered shortcut and season. OpenLigaDB's documented `getgrouptable` path currently returns HTTP 404 on tested league/season pairs; this endpoint uses the live `getbltable` resource.", + "operationId": "openligadb-table", "parameters": [ { - "description": "Positive OpenDota team ID from opendota_teams or a match response", - "format": "int64", + "description": "Exact shortcut from openligadb-leagues", "in": "query", - "name": "team_id", + "name": "league_shortcut", + "required": true, + "type": "string", + "x-example": "bl1" + }, + { + "description": "Season starting year", + "in": "query", + "name": "season", "required": true, "type": "integer", - "x-example": 8255888 + "x-example": 2026 } ], "produces": [ @@ -451999,19 +528344,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/opendota.TeamMatchesResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/openligadb.listResponseDoc" } }, "400": { @@ -452044,27 +528377,37 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota team match history", + "summary": "Get a league season's table", "tags": [ - "OpenDota" + "OpenLigaDB" ] } }, - "/opendota/team-players": { + "/openligadb/team-pair-matches": { "get": { "consumes": [ "application/json" ], - "description": "Returns the players who have played for a team with games played, wins and whether they are a current member, current members first. Steam account ids are not returned. An unknown team id returns not found.", - "operationId": "opendota-team-players", + "description": "Returns every recorded match between two OpenLigaDB team ids. Discover team ids through `openligadb_teams`.", + "operationId": "openligadb-team-pair-matches", "parameters": [ { - "description": "Positive OpenDota team ID from opendota-teams or a match response", + "description": "First OpenLigaDB team id", + "format": "int64", "in": "query", - "name": "team_id", + "name": "team_id_1", "required": true, "type": "integer", - "x-example": 8255888 + "x-example": 40 + }, + { + "description": "Second OpenLigaDB team id", + "format": "int64", + "in": "query", + "name": "team_id_2", + "required": true, + "type": "integer", + "x-example": 7 } ], "produces": [ @@ -452074,19 +528417,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/opendota.TeamPlayersResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/openligadb.listResponseDoc" } }, "400": { @@ -452119,27 +528450,35 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota Dota 2 team player history", + "summary": "List matches between two teams", "tags": [ - "OpenDota" + "OpenLigaDB" ] } }, - "/opendota/teams": { + "/openligadb/teams": { "get": { "consumes": [ "application/json" ], - "description": "Returns a zero-based page of OpenDota team records with team IDs, names, tags, ranking and recent-match metadata. OpenDota returns up to 1000 teams per page; use `next_page` while present. Use a team ID with opendota_team or opendota_team_matches.", - "operationId": "opendota-teams", + "description": "Returns the full team list for one discovered league shortcut and season. Use the returned `teamId` values with the team-match and head-to-head endpoints.", + "operationId": "openligadb-teams", "parameters": [ { - "description": "Zero-based page index; defaults to 0", - "format": "int64", + "description": "Exact shortcut from openligadb-leagues", "in": "query", - "name": "page", + "name": "league_shortcut", + "required": true, + "type": "string", + "x-example": "bl1" + }, + { + "description": "Season starting year", + "in": "query", + "name": "season", + "required": true, "type": "integer", - "x-example": 0 + "x-example": 2026 } ], "produces": [ @@ -452149,19 +528488,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/opendota.TeamsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/openligadb.listResponseDoc" } }, "400": { @@ -452170,6 +528497,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -452188,9 +528521,9 @@ "ApiKeyAuth": [] } ], - "summary": "OpenDota team directory", + "summary": "List teams in a league season", "tags": [ - "OpenDota" + "OpenLigaDB" ] } }, @@ -458592,6 +534925,271 @@ ] } }, + "/partiful/city-facets": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one facet of one Partiful (partiful.com) region: the requested slug, the facet value Partiful reports for it, its label, the month and date-range labels, the facet's featured events, the date and category facets Partiful offers alongside it, and the other regions it links. Each event carries its id, title, start and end time, timezone, status, cover image, canonical URL and venue name plus approximate city and neighborhood. The slug is validated locally against the complete fifteen-value set (events, today, tomorrow, this-week, this-weekend, thanksgiving, fall, popups, food, free-events, live-music, parties, run-clubs, trivia, lgbtq) because Partiful answers an unknown slug with a 200 that silently degrades to its unfiltered ANYTIME view; the response's facet value must match the slug, or the call fails as an upstream error rather than returning the wrong list. A slug Partiful does not serve for that region is reported as a 400 naming both values. Facet availability is per-region and seasonal, which is why the response carries the arrays rather than a fixed per-region promise. Private-party data is never returned.", + "operationId": "partiful-city-facets", + "parameters": [ + { + "description": "Region code from partiful-explore-cities", + "enum": [ + "NYC", + "LA", + "SF", + "CHI", + "ATX", + "BOS", + "DC", + "MIA", + "LON" + ], + "in": "query", + "name": "region", + "required": true, + "type": "string", + "x-example": "NYC" + }, + { + "description": "Facet slug; validated locally against the complete fifteen-value set", + "enum": [ + "events", + "today", + "tomorrow", + "this-week", + "this-weekend", + "thanksgiving", + "fall", + "popups", + "food", + "free-events", + "live-music", + "parties", + "run-clubs", + "trivia", + "lgbtq" + ], + "in": "query", + "name": "facet", + "required": true, + "type": "string", + "x-example": "parties" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/partiful.cityFacetsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get one facet of one Partiful region", + "tags": [ + "Partiful" + ] + } + }, + "/partiful/city-feed": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one Partiful (partiful.com) region's public discover feed: the region code and label, its trending carousel, every themed carousel, a flat feed of up to twenty featured events, and the category facets Partiful currently offers for that region. Each event carries its id, title, start and end time, timezone, status, cover image, canonical URL and venue name plus approximate city and neighborhood; pass an id to partiful-event for the full public event. This is a curated discovery feed, never a complete city catalogue: Partiful publishes a fixed slab and there is no page, cursor or offset parameter, so a page parameter is not accepted and coverage is only what Partiful chose to feature. Private-party data is never returned: guest lists, attendees, invite/RSVP state, ownerIds, host contacts, exact street addresses and RSVP counters are dropped, and non-public events are filtered out. Regions come from partiful-explore-cities.", + "operationId": "partiful-city-feed", + "parameters": [ + { + "description": "Region code from partiful-explore-cities", + "enum": [ + "NYC", + "LA", + "SF", + "CHI", + "ATX", + "BOS", + "DC", + "MIA", + "LON" + ], + "in": "query", + "name": "region", + "required": true, + "type": "string", + "x-example": "NYC" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/partiful.cityFeedResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get one region's Partiful discover feed", + "tags": [ + "Partiful" + ] + } + }, + "/partiful/event": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one publicly listed Partiful (partiful.com) event: title, host-authored description, start and end time, timezone, status, cover image, canonical URL, venue name plus approximate city and neighborhood, host display names, the page's own advertised offers with a free signal, and the public events Partiful suggests. Take event_id from partiful-city-feed, partiful-city-facets or partiful-explore-cities; ids are twenty alphanumeric characters and are validated locally. An unknown id is a 404, and an event that is not public or requires a password is answered as a 404 because it belongs to the invite-link surface. Privacy is a hard scope limit: guest lists, attendee names and phone numbers, invite/RSVP state, ownerIds, host ids and contacts, exact street addresses and aggregate RSVP counters are never returned.", + "operationId": "partiful-event", + "parameters": [ + { + "description": "Partiful event id, twenty alphanumeric characters", + "in": "query", + "name": "event_id", + "required": true, + "type": "string", + "x-example": "Dv8UDa1p7wa2XNeiN7uY" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/partiful.eventResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get one public Partiful event", + "tags": [ + "Partiful" + ] + } + }, + "/partiful/explore-cities": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the top of Partiful's (partiful.com) public Explore surface: the three regions its hub features (New York City, Los Angeles, San Francisco), each with the carousel's own title, subtitle, icon and featured events. Every event carries its id, title, start and end time, timezone, status, cover image, canonical partiful.com URL, and venue name plus approximate city and neighborhood. Private-party fields are never returned: guest lists, attendee names and phone numbers, invite/RSVP state, ownerIds, host contacts, exact street addresses and aggregate RSVP counters are dropped, and events flagged isPublic false or requiring a password are filtered out. This is also the discovery endpoint for the region parameter: its region codes are the complete nine-value set (NYC, LA, SF, CHI, ATX, BOS, DC, MIA, LON). Explore is a curated discovery feed, not a city catalogue: there is no pagination anywhere on this surface.", + "operationId": "partiful-explore-cities", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/partiful.exploreCitiesResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List the three regions Partiful's Explore hub features", + "tags": [ + "Partiful" + ] + } + }, "/patreon/creator": { "get": { "consumes": [ @@ -459781,6 +536379,1491 @@ ] } }, + "/petsmart/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns PetSmart's category directory: every category path (for example Dog > Food > Dry Food) with its name, parent path and depth, about 1,400 in all, hierarchical so a parent path covers its descendants. A category's path is the value /petsmart/search and /petsmart/search/filters take as category. Filter with query (text in the path), parent (descendants of a path) and depth, and page through with page and limit. Ancestor paths that the directory does not list itself are included, since products carry them and they are valid category filters. Pass country=ca for the Canadian catalog.", + "operationId": "petsmart-categories", + "parameters": [ + { + "description": "Optional catalog: us (default) or ca for the Canadian store, which has its own products (about 9,000), categories, filters and prices.", + "enum": [ + "us", + "ca" + ], + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Optional text; keeps categories whose path contains it (case-insensitive).", + "in": "query", + "name": "query", + "type": "string", + "x-example": "treats" + }, + { + "description": "Optional category path; keeps only its descendants.", + "in": "query", + "name": "parent", + "type": "string", + "x-example": "Dog > Food" + }, + { + "description": "Optional exact depth: 1 for top-level categories, 2 for their children, and so on.", + "in": "query", + "name": "depth", + "type": "integer", + "x-example": 2 + }, + { + "description": "Optional 1-based page number. Defaults to 1.", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Optional categories per page. Defaults to 100, maximum 500.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 100 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/petsmart.categoriesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List PetSmart's product categories", + "tags": [ + "PetSmart" + ] + } + }, + "/petsmart/product": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one product's full public detail by SKU: everything /petsmart/search returns plus the full description (as text and as PetSmart's HTML), short description, manufacturer name and SKU, every UPC, all category paths, the size and flavor variation options, current promotions, shipping dimensions and every other catalog attribute PetSmart publishes (life stage, food form, flavor, health considerations and so on) under attributes. An unknown SKU returns a 404. Pass country=ca for the Canadian catalog.", + "operationId": "petsmart-product", + "parameters": [ + { + "description": "Optional catalog: us (default) or ca for the Canadian store, which has its own products (about 9,000), categories, filters and prices.", + "enum": [ + "us", + "ca" + ], + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Product SKU, from /petsmart/search's id field.", + "in": "query", + "name": "id", + "required": true, + "type": "integer", + "x-example": 5252900 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/petsmart.productResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get one PetSmart product's full detail", + "tags": [ + "PetSmart" + ] + } + }, + "/petsmart/product/inventory": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns how many units of a product PetSmart reports in each store, as store number and quantity, highest stock first, with totals over every store that has a record (stores_with_record, stores_in_stock, total_units). Narrow with store_id (repeatable) and min_quantity; limit caps the list (default 100, maximum 2000) without changing the totals. Store numbers are PetSmart's own; PetSmart's store locator is not available anonymously, so this endpoint does not map them to addresses. An unknown SKU returns a 404.", + "operationId": "petsmart-product-inventory", + "parameters": [ + { + "description": "Product SKU, from /petsmart/search's id field.", + "in": "query", + "name": "id", + "required": true, + "type": "integer", + "x-example": 5252900 + }, + { + "description": "Optional PetSmart store numbers to return, repeatable. Omit for every store with a record.", + "in": "query", + "name": "store_id", + "type": "integer", + "x-example": 100 + }, + { + "description": "Optional minimum units in stock for a store to be listed. Defaults to 0, which includes stores that are out of stock.", + "in": "query", + "name": "min_quantity", + "type": "integer", + "x-example": 1 + }, + { + "description": "Optional stores returned, highest stock first. Defaults to 100, maximum 2000.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 100 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/petsmart.inventoryResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get one PetSmart product's stock count per store", + "tags": [ + "PetSmart" + ] + } + }, + "/petsmart/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of PetSmart products from its catalog of about 20,000, optionally narrowed by keyword, category, brand, price range, minimum rating or any catalog filter, in six orderings (relevance, price_asc, price_desc, best_sellers, top_rated, new_arrivals). Each product carries its SKU id, master product id, name, brand, price (current, list and PetSmart's display text, with the range across sizes), images, rating and review count, primary category, pets, size, variations, UPC and availability flags (available online, in stock in stores, in-store only, online only, pickup and autoship eligible). total_results and total_pages describe the whole result set; PetSmart pages no deeper than 10,000 results, so narrow the search to reach the rest. Call /petsmart/categories and /petsmart/search/filters for the valid category and filter values; an unknown category path or filter name returns a 400 rather than an empty list. Pass country=ca for the Canadian catalog.", + "operationId": "petsmart-search", + "parameters": [ + { + "description": "Optional catalog: us (default) or ca for the Canadian store, which has its own products (about 9,000), categories, filters and prices.", + "enum": [ + "us", + "ca" + ], + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Optional keyword.", + "in": "query", + "name": "query", + "type": "string", + "x-example": "dog food" + }, + { + "description": "Optional category path, from /petsmart/categories' path field (for example Dog > Food > Dry Food). Includes the category's descendants. A path not in the directory returns a 400.", + "in": "query", + "name": "category", + "type": "string", + "x-example": "Dog > Food > Dry Food" + }, + { + "description": "Optional exact brand name. Find values with /petsmart/search/filters using facet=brand and facet_query.", + "in": "query", + "name": "brand", + "type": "string", + "x-example": "Blue Buffalo" + }, + { + "description": "Optional catalog filters as name:value, repeatable (for example customPet:Dog). Names and values come from /petsmart/search/filters; an unknown name returns a 400. Different names combine with AND; repeating one name combines its values with OR.", + "in": "query", + "name": "filter", + "type": "string", + "x-example": "customPet:Dog" + }, + { + "description": "Optional minimum price in dollars.", + "in": "query", + "name": "min_price", + "type": "number", + "x-example": 10 + }, + { + "description": "Optional maximum price in dollars.", + "in": "query", + "name": "max_price", + "type": "number", + "x-example": 60 + }, + { + "description": "Optional minimum average customer rating, 0 to 5.", + "in": "query", + "name": "min_rating", + "type": "number", + "x-example": 4.5 + }, + { + "description": "Optional ordering.", + "enum": [ + "relevance", + "price_asc", + "price_desc", + "best_sellers", + "top_rated", + "new_arrivals" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "price_asc" + }, + { + "description": "Optional 1-based page number. Defaults to 1.", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Optional products per page. Defaults to 24, maximum 100.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 24 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/petsmart.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search PetSmart products", + "tags": [ + "PetSmart" + ] + } + }, + "/petsmart/search/filters": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns every filter PetSmart's catalog offers (about 120, such as brand, pet type, food form, size, flavor and life stage) with each filter's top values and product counts, scoped to the same search arguments /petsmart/search takes so the counts describe the result set that search would return. facet_names always lists every valid filter name for /petsmart/search's filter parameter. Pass facet to list one filter's values (up to 1,000) and facet_query to search within them, for example brand names containing blue; numeric_ranges reports the spread of numeric attributes such as price and rating over the scoped products. An unknown facet returns a 400. Pass country=ca for the Canadian catalog.", + "operationId": "petsmart-search-filters", + "parameters": [ + { + "description": "Optional catalog: us (default) or ca for the Canadian store, which has its own products (about 9,000), categories, filters and prices.", + "enum": [ + "us", + "ca" + ], + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Optional keyword.", + "in": "query", + "name": "query", + "type": "string", + "x-example": "dog food" + }, + { + "description": "Optional category path, from /petsmart/categories' path field (for example Dog > Food > Dry Food). Includes the category's descendants. A path not in the directory returns a 400.", + "in": "query", + "name": "category", + "type": "string", + "x-example": "Dog > Food > Dry Food" + }, + { + "description": "Optional exact brand name. Find values with /petsmart/search/filters using facet=brand and facet_query.", + "in": "query", + "name": "brand", + "type": "string", + "x-example": "Blue Buffalo" + }, + { + "description": "Optional catalog filters as name:value, repeatable (for example customPet:Dog). Names and values come from /petsmart/search/filters; an unknown name returns a 400. Different names combine with AND; repeating one name combines its values with OR.", + "in": "query", + "name": "filter", + "type": "string", + "x-example": "customPet:Dog" + }, + { + "description": "Optional minimum price in dollars.", + "in": "query", + "name": "min_price", + "type": "number", + "x-example": 10 + }, + { + "description": "Optional maximum price in dollars.", + "in": "query", + "name": "max_price", + "type": "number", + "x-example": 60 + }, + { + "description": "Optional minimum average customer rating, 0 to 5.", + "in": "query", + "name": "min_rating", + "type": "number", + "x-example": 4.5 + }, + { + "description": "Optional single filter name to list values for, from facet_names. Without it every filter is returned with its top values.", + "in": "query", + "name": "facet", + "type": "string", + "x-example": "brand" + }, + { + "description": "Optional text to search within the values of facet, for example brand names containing blue. Requires facet.", + "in": "query", + "name": "facet_query", + "type": "string", + "x-example": "blue" + }, + { + "description": "Optional values per filter. Defaults to 10 (maximum 100) for all filters; with facet, maximum 1000, or 100 together with facet_query.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/petsmart.filtersResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List PetSmart's catalog filters and their values", + "tags": [ + "PetSmart" + ] + } + }, + "/petsmart/suggest": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns PetSmart's own search suggestions for partial text, each with its relative popularity and how many products it matches exactly. Useful for completing a search phrase before calling /petsmart/search. Pass country=ca for the Canadian catalog.", + "operationId": "petsmart-suggest", + "parameters": [ + { + "description": "Optional catalog: us (default) or ca for the Canadian store, which has its own products (about 9,000), categories, filters and prices.", + "enum": [ + "us", + "ca" + ], + "in": "query", + "name": "country", + "type": "string", + "x-example": "us" + }, + { + "description": "Partial search text to complete, for example dog fo.", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "dog fo" + }, + { + "description": "Optional suggestions returned. Defaults to 8, maximum 20.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 8 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/petsmart.suggestResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get PetSmart search suggestions", + "tags": [ + "PetSmart" + ] + } + }, + "/pgatour/leaderboard": { + "get": { + "description": "Returns the selected public golf resource with its native identity, tour and resolved season context. Player IDs retain significant leading zeroes.", + "operationId": "pgatour-leaderboard", + "parameters": [ + { + "default": "R", + "description": "R: PGA Tour; S: Champions; H: Korn Ferry; Y: Americas", + "enum": [ + "R", + "S", + "H", + "Y" + ], + "in": "query", + "name": "tour", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/pgatour.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get the website-default golf leaderboard", + "tags": [ + "PGA Tour" + ] + } + }, + "/pgatour/players": { + "get": { + "description": "Returns the selected public golf resource with its native identity, tour and resolved season context. Player IDs retain significant leading zeroes.", + "operationId": "pgatour-players", + "parameters": [ + { + "default": "R", + "description": "R: PGA Tour; S: Champions; H: Korn Ferry; Y: Americas", + "enum": [ + "R", + "S", + "H", + "Y" + ], + "in": "query", + "name": "tour", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/pgatour.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a professional golf player directory", + "tags": [ + "PGA Tour" + ] + } + }, + "/pgatour/schedule": { + "get": { + "description": "Returns the selected public golf resource with its native identity, tour and resolved season context. Player IDs retain significant leading zeroes.", + "operationId": "pgatour-schedule", + "parameters": [ + { + "default": "R", + "description": "R: PGA Tour; S: Champions; H: Korn Ferry; Y: Americas", + "enum": [ + "R", + "S", + "H", + "Y" + ], + "in": "query", + "name": "tour", + "type": "string" + }, + { + "description": "Native season value from tour-specific season discovery; omission preserves source default", + "in": "query", + "name": "season", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/pgatour.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get the website-default golf schedule", + "tags": [ + "PGA Tour" + ] + } + }, + "/pgatour/schedule/seasons": { + "get": { + "description": "Returns every native season value and display label for the selected tour. Labels such as2022–2023 are not replaced by guessed calendar years. Use returned values with the schedule season selector; omission there preserves its own source default.", + "operationId": "pgatour-schedule-seasons", + "parameters": [ + { + "description": "Native tour, defaultR", + "enum": [ + "R", + "S", + "H", + "Y" + ], + "in": "query", + "name": "tour", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/pgatour.ScheduleSeasonsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Discover PGA tour-specific schedule seasons", + "tags": [ + "PGA Tour" + ] + } + }, + "/pgatour/stats": { + "get": { + "description": "Returns the selected public golf resource with its native identity, tour and resolved season context. Player IDs retain significant leading zeroes.", + "operationId": "pgatour-stats", + "parameters": [ + { + "default": "R", + "description": "R: PGA Tour; S: Champions; H: Korn Ferry; Y: Americas", + "enum": [ + "R", + "S", + "H", + "Y" + ], + "in": "query", + "name": "tour", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/pgatour.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get the golf statistics overview", + "tags": [ + "PGA Tour" + ] + } + }, + "/pgatour/stats/{stat_id}": { + "get": { + "description": "Returns the published player and tour-average rows for a native stat ID. Preserves source season labels, columns, values and selector menus. Use stat options for per-stat years and tournaments; pair query_type with tournament_id. Search, sorting and favorites are not server filters.", + "operationId": "pgatour-stat-detail", + "parameters": [ + { + "description": "Native stat ID from statistics discovery; leading zeroes are significant", + "in": "path", + "name": "stat_id", + "required": true, + "type": "string" + }, + { + "default": "R", + "description": "Tour", + "enum": [ + "R", + "S", + "H", + "Y" + ], + "in": "query", + "name": "tour", + "type": "string" + }, + { + "description": "Native year from this stat's options; omission selects the source default", + "in": "query", + "name": "year", + "type": "integer" + }, + { + "description": "Native event aggregation; requires tournament_id", + "enum": [ + "THROUGH_EVENT", + "EVENT_ONLY" + ], + "in": "query", + "name": "query_type", + "type": "string" + }, + { + "description": "Native tournament ID from this stat and year's options; requires query_type", + "in": "query", + "name": "tournament_id", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/pgatour.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/pgatour.ResponseDoc" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/pgatour.ResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Read a PGA Tour statistics table", + "tags": [ + "PGA Tour" + ] + } + }, + "/pgatour/stats/{stat_id}/options": { + "get": { + "description": "Returns the native years, season labels, tournaments and event-query types for one statistics table. A year selector refreshes the tournament choices for that season. Stat IDs and category groups come from statistics discovery.", + "operationId": "pgatour-stat-options", + "parameters": [ + { + "description": "Native stat ID from statistics discovery; leading zeroes are significant", + "in": "path", + "name": "stat_id", + "required": true, + "type": "string" + }, + { + "default": "R", + "description": "Tour", + "enum": [ + "R", + "S", + "H", + "Y" + ], + "in": "query", + "name": "tour", + "type": "string" + }, + { + "description": "Native year from this stat's options", + "in": "query", + "name": "year", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/pgatour.StatOptionsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/pgatour.ResponseDoc" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/pgatour.ResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Discover PGA Tour statistics selectors", + "tags": [ + "PGA Tour" + ] + } + }, + "/pgatour/tournament-links": { + "get": { + "description": "Returns year, slug and ID from actual main-tour schedule/sitemap links. Schedule events without a matching source link are listed separately; their slugs are not guessed. Use returned contexts with tournament tab endpoints.", + "operationId": "pgatour-tournament-links", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/pgatour.TournamentLinksResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Discover PGA tournament URL contexts", + "tags": [ + "PGA Tour" + ] + } + }, + "/pgatour/tournaments/{year}/{slug}/{id}/broadcast": { + "get": { + "description": "Returns native regional broadcast schedules, network metadata and the actual source country code. There is no country selector or worldwide-coverage promise. Direct media stream URLs are omitted; no stream is fetched. Use year, slug and full main-tour ID from tournament-link discovery.", + "operationId": "pgatour-tournament-broadcast", + "parameters": [ + { + "description": "Four-digit native tournament URL year", + "in": "path", + "name": "year", + "required": true, + "type": "string" + }, + { + "description": "Native tournament URL slug from link discovery", + "in": "path", + "name": "slug", + "required": true, + "type": "string" + }, + { + "description": "Complete main-tour tournament ID", + "in": "path", + "name": "id", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/pgatour.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get PGA tournament broadcast coverage", + "tags": [ + "PGA Tour" + ] + } + }, + "/pgatour/tournaments/{year}/{slug}/{id}/course-stats": { + "get": { + "description": "Returns every native course, round summary and hole statistic. Null all-round selectors remain null. Supply canonical year, slug and full tournament ID from tournament-link discovery. Other tours and team-event variants are not qualified by this local contract.", + "operationId": "pgatour-tournament-course-stats", + "parameters": [ + { + "description": "Canonical tournament URL year, matching the full ID", + "in": "path", + "name": "year", + "required": true, + "type": "string" + }, + { + "description": "Canonical main-tour tournament URL slug from schedule", + "in": "path", + "name": "slug", + "required": true, + "type": "string" + }, + { + "description": "Full native main-tour tournament ID, for example R2026457", + "in": "path", + "name": "id", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/pgatour.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get PGA Tour tournament course statistics", + "tags": [ + "PGA Tour" + ] + } + }, + "/pgatour/tournaments/{year}/{slug}/{id}/field": { + "get": { + "description": "Returns the complete native field and alternate lists, status and qualifying metadata. It does not equate field membership with leaderboard rows. Supply canonical year, slug and full tournament ID from tournament-link discovery. Other tours and team-event variants are not qualified by this local contract.", + "operationId": "pgatour-tournament-field", + "parameters": [ + { + "description": "Canonical tournament URL year, matching the full ID", + "in": "path", + "name": "year", + "required": true, + "type": "string" + }, + { + "description": "Canonical main-tour tournament URL slug from schedule", + "in": "path", + "name": "slug", + "required": true, + "type": "string" + }, + { + "description": "Full native main-tour tournament ID, for example R2026457", + "in": "path", + "name": "id", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/pgatour.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get PGA Tour tournament field and alternates", + "tags": [ + "PGA Tour" + ] + } + }, + "/pgatour/tournaments/{year}/{slug}/{id}/overview": { + "get": { + "description": "Returns native tournament facts, courses and individual champion history. Ticket purchase links and account preference fields are omitted. Supply canonical year, slug and full tournament ID from tournament-link discovery. Other tours and team-event variants are not qualified by this local contract.", + "operationId": "pgatour-tournament-overview", + "parameters": [ + { + "description": "Canonical tournament URL year, matching the full ID", + "in": "path", + "name": "year", + "required": true, + "type": "string" + }, + { + "description": "Canonical main-tour tournament URL slug from schedule", + "in": "path", + "name": "slug", + "required": true, + "type": "string" + }, + { + "description": "Full native main-tour tournament ID, for example R2026457", + "in": "path", + "name": "id", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/pgatour.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get PGA Tour tournament overview", + "tags": [ + "PGA Tour" + ] + } + }, + "/pgatour/tournaments/{year}/{slug}/{id}/past-results": { + "get": { + "description": "Returns the source default historical results and every native available-season entry. The resolved results ID can refer to a previous year; no year selector is invented. Supply canonical year, slug and full tournament ID from tournament-link discovery. Other tours and team-event variants are not qualified by this local contract.", + "operationId": "pgatour-tournament-past-results", + "parameters": [ + { + "description": "Canonical tournament URL year, matching the full ID", + "in": "path", + "name": "year", + "required": true, + "type": "string" + }, + { + "description": "Canonical main-tour tournament URL slug from schedule", + "in": "path", + "name": "slug", + "required": true, + "type": "string" + }, + { + "description": "Full native main-tour tournament ID, for example R2026457", + "in": "path", + "name": "id", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/pgatour.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get PGA Tour tournament past results", + "tags": [ + "PGA Tour" + ] + } + }, + "/pgatour/tournaments/{year}/{slug}/{id}/tee-times": { + "get": { + "description": "Returns all native rounds, groups and professional player identities with source tee times and timezone. Supply canonical year, slug and full tournament ID from tournament-link discovery. Other tours and team-event variants are not qualified by this local contract.", + "operationId": "pgatour-tournament-tee-times", + "parameters": [ + { + "description": "Canonical tournament URL year, matching the full ID", + "in": "path", + "name": "year", + "required": true, + "type": "string" + }, + { + "description": "Canonical main-tour tournament URL slug from schedule", + "in": "path", + "name": "slug", + "required": true, + "type": "string" + }, + { + "description": "Full native main-tour tournament ID, for example R2026457", + "in": "path", + "name": "id", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/pgatour.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get PGA Tour tournament tee times", + "tags": [ + "PGA Tour" + ] + } + }, + "/pgatour/tournaments/{year}/{slug}/{id}/weather": { + "get": { + "description": "Returns native hourly and daily forecasts, source conditions, wind, humidity, precipitation and Celsius/Fahrenheit strings. Reads the tournament overview resource without calculating weather values. Use year, slug and full main-tour ID from tournament-link discovery.", + "operationId": "pgatour-tournament-weather", + "parameters": [ + { + "description": "Four-digit native tournament URL year", + "in": "path", + "name": "year", + "required": true, + "type": "string" + }, + { + "description": "Native tournament URL slug from link discovery", + "in": "path", + "name": "slug", + "required": true, + "type": "string" + }, + { + "description": "Complete main-tour tournament ID", + "in": "path", + "name": "id", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/pgatour.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get PGA tournament weather forecast", + "tags": [ + "PGA Tour" + ] + } + }, "/phillyinquirer/article": { "get": { "description": "Returns a Philadelphia Inquirer story by canonical `inquirer.com` `url` ending in `-.html`: title, description, publication and update times, section, authors, lead image and body `paragraphs` in reading order. Captions, teasers and comments are excluded. Associated Press `/wires/` pages, section pages and author pages return `400`.", @@ -486228,11 +564311,11 @@ "x-example": "Mjk=" }, { - "description": "Rows to return, default 10, max 30", + "description": "Rows to return, default 30 (one full page), max 30. The cursor always moves past the whole 30-row page, so keep the default when paging", "in": "query", "name": "limit", "type": "integer", - "x-example": 10 + "x-example": 30 } ], "produces": [ @@ -486435,11 +564518,11 @@ "x-example": "Mjk=" }, { - "description": "Rows to return, default 10, max 30", + "description": "Rows to return, default 30 (one full page), max 30. The cursor always moves past the whole 30-row page, so keep the default when paging", "in": "query", "name": "limit", "type": "integer", - "x-example": 10 + "x-example": 30 } ], "produces": [ @@ -486494,6 +564577,245 @@ ] } }, + "/rottentomatoes/critic": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one Rotten Tomatoes critic's profile: display name, initials, vanity, encrypted critic id, biography, website, top-critic and Tomatometer-approved flags, review and publication counts, follower/following counts, critics groups, the publications they write for and their most recent reviews. The profile is read directly from Rotten Tomatoes' feed (normally a second or two), with a slower browser fallback when the feed cannot be read. An unknown critic path returns 404. Pass exactly one of `path` or `url`.", + "operationId": "rottentomatoes-critic", + "parameters": [ + { + "description": "Rotten Tomatoes critic path: /critic/{slug}. /critics/{slug} (the form critics/authors returns) and /profiles/critic/{slug} are accepted too", + "in": "query", + "name": "path", + "type": "string", + "x-example": "/critic/mark-kermode" + }, + { + "description": "Absolute https://www.rottentomatoes.com critic URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.rottentomatoes.com/critic/mark-kermode" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/rottentomatoes.criticResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Rotten Tomatoes critic profile", + "tags": [ + "Rotten Tomatoes" + ] + } + }, + "/rottentomatoes/critic/publications": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the publications one Rotten Tomatoes critic writes for: publication name, editorial site URL, logo image, encrypted and numeric publication ids, and the top-publication and Tomatometer-approved flags. The list is read directly from Rotten Tomatoes' feed (normally a second or two), with a slower browser fallback when the feed cannot be read. Only the first page is served today; `data.page_info.end_cursor` reports that more exist. An unknown critic path returns 404. Pass exactly one of `path` or `url`.", + "operationId": "rottentomatoes-critic-publications", + "parameters": [ + { + "description": "Rotten Tomatoes critic path: /critic/{slug}. /critics/{slug} (the form critics/authors returns) and /profiles/critic/{slug} are accepted too", + "in": "query", + "name": "path", + "type": "string", + "x-example": "/critic/mark-kermode" + }, + { + "description": "Absolute https://www.rottentomatoes.com critic URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.rottentomatoes.com/critic/mark-kermode" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/rottentomatoes.criticPublicationsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Rotten Tomatoes critic publications", + "tags": [ + "Rotten Tomatoes" + ] + } + }, + "/rottentomatoes/critic/reviews": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the movie reviews published by one critic, newest first. Each review carries a stable `id`, ISO `created_at`/`updated_at`, the publication, the original article URL and a `media` object naming the reviewed title (with its path, URL and poster). The list is pageable `limit` reviews at a time: pass `data.page_info.end_cursor` as `after` and keep `limit` the same while paging. It is read directly from Rotten Tomatoes' review feed (`data.transport` is `feed_api`, normally a second or two), with a slower browser fallback (`browser_render`, at most five pages) when the feed cannot be read. A critic with no reviews returns 200 with an empty `reviews` array; an unknown critic path returns 404. `data.subject.kind` is `critic` and `data.subject.title` is the reviewer's display name as Rotten Tomatoes prints it.", + "operationId": "rottentomatoes-critic-reviews", + "parameters": [ + { + "description": "Rotten Tomatoes critic path: /critic/{slug}. /critics/{slug} (the form critics/authors returns) and /profiles/critic/{slug} are accepted too", + "in": "query", + "name": "path", + "type": "string", + "x-example": "/critic/mark-kermode" + }, + { + "description": "Absolute https://www.rottentomatoes.com critic URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.rottentomatoes.com/critic/mark-kermode" + }, + { + "description": "Reviews per page, default 10, max 20. Keep it the same on every page of one walk: the cursor is a page index times this value.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + }, + { + "description": "Pagination cursor: pass data.page_info.end_cursor from the previous response, with the same limit. Lists can be paged through the available reviews.", + "in": "query", + "name": "after", + "type": "string", + "x-example": "MQ==" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/rottentomatoes.reviewsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Rotten Tomatoes reviews by one critic", + "tags": [ + "Rotten Tomatoes" + ] + } + }, "/rottentomatoes/critics/authors": { "get": { "consumes": [ @@ -487349,6 +565671,107 @@ ] } }, + "/rottentomatoes/episode/reviews": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the critic reviews of one TV episode, newest first, read the same way as the season and movie feeds. Reviews carry a stable `id`, ISO `created_at`/`updated_at`, the critic identity and the original article URL. The list is pageable `limit` reviews at a time: pass `data.page_info.end_cursor` as `after` and keep `limit` the same while paging. It is read directly from Rotten Tomatoes' review feed (`data.transport` is `feed_api`, normally about a second), with a slower browser fallback (`browser_render`, at most five pages) when the feed cannot be read. Episode review lists are often small or empty: an episode nobody has reviewed yet returns 200 with an empty `reviews` array. `data.subject` identifies the episode.", + "operationId": "rottentomatoes-episode-reviews", + "parameters": [ + { + "description": "Rotten Tomatoes episode path", + "in": "query", + "name": "path", + "type": "string", + "x-example": "/tv/breaking_bad/s01/e01" + }, + { + "description": "Absolute https://www.rottentomatoes.com episode URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.rottentomatoes.com/tv/breaking_bad/s01/e01" + }, + { + "description": "Review list: critics (default), top-critics or audience.", + "enum": [ + "critics", + "top-critics", + "audience" + ], + "in": "query", + "name": "type", + "type": "string", + "x-example": "critics" + }, + { + "description": "Reviews per page, default 10, max 20. Keep it the same on every page of one walk: the cursor is a page index times this value.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + }, + { + "description": "Pagination cursor: pass data.page_info.end_cursor from the previous response, with the same limit. Critic cursors are base64 page indexes; audience cursors are opaque keyset values that should be passed back unchanged. The feed has no 500-review ceiling; browser fallback is capped at five pages.", + "in": "query", + "name": "after", + "type": "string", + "x-example": "MQ==" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/rottentomatoes.reviewsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Rotten Tomatoes TV episode critic reviews", + "tags": [ + "Rotten Tomatoes" + ] + } + }, "/rottentomatoes/movie": { "get": { "consumes": [ @@ -487429,7 +565852,7 @@ "consumes": [ "application/json" ], - "description": "Returns a first-page sample of critic or audience reviews for a Rotten Tomatoes movie, read from the public movie page. A response typically holds about 6 reviews (as few as 1 for `top-critics`), not the full list, in no guaranteed order. Critic reviews have no stable id, dates are date-only text, and pagination is currently unavailable. `data.fetched_at` and the `X-Cache` and `X-Availability-Last-Success-*` response headers show how fresh the data is. Pass exactly one of `path` or `url`. Supported `type` values are `critics`, `top-critics`, `audience`, and `verified-audience`.", + "description": "Returns Rotten Tomatoes movie reviews, newest first. All four `type` values return the full review feed in one request: each review carries a stable `id`, ISO `created_at`/`updated_at` timestamps, the critic identity and the original article URL, and the list is pageable `limit` reviews at a time: pass `data.page_info.end_cursor` back as `after` for the next page and keep `limit` the same while paging. `data.transport` is `feed_api` for that path. A title with no reviews yet, or a top-critics or audience list that is still empty, returns 200 with an empty `reviews` array. If the feed cannot be read the service loads the movie's own review page the way a visitor's browser does and reads the list that page receives (`transport: browser_render`, slower, at most five pages); if that also fails for the first page, the movie page's embedded sample of about 6 reviews is served with `render_error` set (`transport: public_page`) and the call is not charged. `data.subject.kind` is `movie`, and `data.movie` remains present for compatibility. `data.fetched_at` and the `X-Cache` and `X-Availability-Last-Success-*` response headers show how fresh the data is. Pass exactly one of `path` or `url`. Supported `type` values are `critics`, `top-critics`, `audience`, and `verified-audience`.", "operationId": "rottentomatoes-movie-reviews", "parameters": [ { @@ -487460,17 +565883,18 @@ "x-example": "critics" }, { - "description": "Maximum reviews to return, default 10, max 20. The movie page typically supplies about 6, so fewer may come back.", + "description": "Reviews per page, default 10, max 20. Keep it the same on every page of one walk: the critic cursor is a page index times this value.", "in": "query", "name": "limit", "type": "integer", "x-example": 10 }, { - "description": "Pagination cursor. Currently unavailable: responses carry no data.page_info.end_cursor, and any value returns 503.", + "description": "Pagination cursor: pass data.page_info.end_cursor from the previous response. Critic cursors are base64 page indexes; audience cursors are opaque keyset values that should be passed back unchanged. The feed has no 500-review ceiling; browser fallback is capped at five pages. Invalid cursors are rejected before upstream work.", "in": "query", "name": "after", - "type": "string" + "type": "string", + "x-example": "MQ==" } ], "produces": [ @@ -487519,33 +565943,526 @@ "ApiKeyAuth": [] } ], - "summary": "Rotten Tomatoes movie reviews", + "summary": "Rotten Tomatoes movie reviews", + "tags": [ + "Rotten Tomatoes" + ] + } + }, + "/rottentomatoes/movie/videos": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the videos Rotten Tomatoes lists for one movie: trailers and clips with the video id, title, kind (`TRAILER`/`OTHER`), duration, thumbnail, playable stream/playlist URL and the video page URL. The primary video reference is read from the movie page and the list comes from Rotten Tomatoes' open JSON endpoint (`/cnapi/videos`), so it is as fast as other endpoints. A movie with no listed video returns an empty `data.videos` rather than an error. `data.fetched_at` is the UTC time the data was fetched. Pass exactly one of `path` or `url`.", + "operationId": "rottentomatoes-movie-videos", + "parameters": [ + { + "description": "Rotten Tomatoes movie path", + "in": "query", + "name": "path", + "type": "string", + "x-example": "/m/clayface" + }, + { + "description": "Absolute https://www.rottentomatoes.com movie URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.rottentomatoes.com/m/clayface" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/rottentomatoes.movieVideosResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Rotten Tomatoes movie videos and trailers", + "tags": [ + "Rotten Tomatoes" + ] + } + }, + "/rottentomatoes/movies": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the details of up to 20 Rotten Tomatoes movies in one call, in the order requested. Each entry carries the title, synopsis, path and URL, `ems_id`, runtime, release date/year, production companies, the release runs with distributors, the Tomatometer and Popcornmeter scores, the score variants for all critics, top critics, all audience and verified audience, the critics and audience consensus, and `where_to_watch`: the public streaming, rental and purchase offers with provider name, link, licence, quality, price and availability date. Those are public provider pages, not playable media URLs. Identifiers that resolve to nothing are listed in `data.not_found` instead of failing the call. Pass exactly one of `ids` (Rotten Tomatoes `ems_id` values) or `paths` (Rotten Tomatoes movie paths or URLs); the `paths` form resolves each path first, so it costs one extra upstream read per path. The headline Tomatometer and Popcornmeter carry no counts; review and rating counts are in the score variants (for the number of critic reviews read `scores.critics_all.review_count`). Review samples are not returned here: use `/rottentomatoes/movie/reviews` for reviews. `data.fetched_at` is the UTC fetch time.", + "operationId": "rottentomatoes-movies", + "parameters": [ + { + "description": "Comma-separated Rotten Tomatoes ems_id values, 1 to 20", + "in": "query", + "name": "ids", + "type": "string", + "x-example": "d5639ed5-2dfe-44a3-8ed2-1cb3ea99855f" + }, + { + "description": "Comma-separated Rotten Tomatoes movie paths or URLs, 1 to 20", + "in": "query", + "name": "paths", + "type": "string", + "x-example": "/m/clayface" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/rottentomatoes.moviesBatchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Rotten Tomatoes movie details, several at once", + "tags": [ + "Rotten Tomatoes" + ] + } + }, + "/rottentomatoes/person": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Rotten Tomatoes celebrity/person metadata and filmography rows. Pass exactly one of `path` or `url`.", + "operationId": "rottentomatoes-person", + "parameters": [ + { + "description": "Rotten Tomatoes person path", + "in": "query", + "name": "path", + "type": "string", + "x-example": "/celebrity/christopher_nolan" + }, + { + "description": "Absolute https://www.rottentomatoes.com person URL", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.rottentomatoes.com/celebrity/christopher_nolan" + }, + { + "description": "Filmography list to page: movie or tv. Omit to use the page's embedded first page.", + "enum": [ + "movie", + "tv" + ], + "in": "query", + "name": "media_type", + "type": "string", + "x-example": "movie" + }, + { + "description": "Filmography sort order. Omit for newest.", + "enum": [ + "newest", + "oldest", + "audience_highest", + "audience_lowest", + "critic_highest", + "critic_lowest" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "newest" + }, + { + "description": "Filmography pagination cursor: pass data.page_info.end_cursor from the previous response.", + "in": "query", + "name": "after", + "type": "string", + "x-example": "MjM=" + }, + { + "description": "Filmography page size. Defaults to 20; a value above 100 is lowered to 100; a negative value is rejected.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/rottentomatoes.personResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Rotten Tomatoes person detail and filmography", + "tags": [ + "Rotten Tomatoes" + ] + } + }, + "/rottentomatoes/publication": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one Rotten Tomatoes publication: its name, encrypted id, editorial page, image, whether it is a top publication and Tomatometer approved, its follower and review counts, and the critics who write for it with their names, encrypted ids, profile URLs and top-critic flags. Take the `id` from `encrypted_publication_id` (or `publication_id`) on any review row returned by the review endpoints. `data.fetched_at` is the UTC fetch time.", + "operationId": "rottentomatoes-publication", + "parameters": [ + { + "description": "Publication id: encrypted_publication_id or publication_id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "ld6ANN0Z" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/rottentomatoes.publicationResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Rotten Tomatoes publication profile", + "tags": [ + "Rotten Tomatoes" + ] + } + }, + "/rottentomatoes/publication/reviews": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the critic reviews one Rotten Tomatoes publication has published, newest first: stable review ids, ISO `created_at`/`updated_at` times, the critic identity, the publication name, the quote, the score sentiment and the original article URL. Pass `data.page_info.end_cursor` back as `after` for the next page, with the same `limit` (max 20). `data.subject.kind` is `publication` and `data.subject.title` is the outlet's name. An empty list is a `200` with no reviews. The `id` must be the encrypted publication id (`encrypted_publication_id` on any review row); a numeric id is rejected. `data.fetched_at` is the UTC fetch time.", + "operationId": "rottentomatoes-publication-reviews", + "parameters": [ + { + "description": "Publication id: encrypted_publication_id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "ld6ANN0Z" + }, + { + "description": "Reviews per page, default 10, max 20. Keep it the same on every page of one walk.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + }, + { + "description": "Pagination cursor: pass data.page_info.end_cursor from the previous response", + "in": "query", + "name": "after", + "type": "string", + "x-example": "MQ==" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/rottentomatoes.publicationReviewsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Rotten Tomatoes publication reviews", + "tags": [ + "Rotten Tomatoes" + ] + } + }, + "/rottentomatoes/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches Rotten Tomatoes movies by the required `query`, returning up to `limit` rows (default 10, max 20). Each row has the title, URL, release year or start and end year, `tomatometer_score` and sentiment, `certified_fresh`, cast and image. No matches returns an empty `results` array.", + "operationId": "rottentomatoes-search", + "parameters": [ + { + "description": "Search query", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "inception" + }, + { + "description": "Rows to return, default 10, max 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/rottentomatoes.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Rotten Tomatoes movie search", "tags": [ "Rotten Tomatoes" ] } }, - "/rottentomatoes/person": { + "/rottentomatoes/season": { "get": { "consumes": [ "application/json" ], - "description": "Returns Rotten Tomatoes celebrity/person metadata and filmography rows. Pass exactly one of `path` or `url`.", - "operationId": "rottentomatoes-person", + "description": "Returns Rotten Tomatoes TV season metadata, scorecard data, parent series metadata, and episode rows. Pass exactly one of `path` or `url`.", + "operationId": "rottentomatoes-season", "parameters": [ { - "description": "Rotten Tomatoes person path", + "description": "Rotten Tomatoes season path", "in": "query", "name": "path", "type": "string", - "x-example": "/celebrity/christopher_nolan" + "x-example": "/tv/breaking_bad/s01" }, { - "description": "Absolute https://www.rottentomatoes.com person URL", + "description": "Absolute https://www.rottentomatoes.com season URL", "in": "query", "name": "url", "type": "string", - "x-example": "https://www.rottentomatoes.com/celebrity/christopher_nolan" + "x-example": "https://www.rottentomatoes.com/tv/breaking_bad/s01" } ], "produces": [ @@ -487555,7 +566472,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/rottentomatoes.personResponseDoc" + "$ref": "#/definitions/rottentomatoes.seasonResponseDoc" } }, "400": { @@ -487594,109 +566511,59 @@ "ApiKeyAuth": [] } ], - "summary": "Rotten Tomatoes person detail and filmography", + "summary": "Rotten Tomatoes season detail", "tags": [ "Rotten Tomatoes" ] } }, - "/rottentomatoes/search": { + "/rottentomatoes/season/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Searches Rotten Tomatoes movies by the required `query`, returning up to `limit` rows (default 10, max 20). Each row has the title, URL, release year or start and end year, `tomatometer_score` and sentiment, `certified_fresh`, cast and image. No matches returns an empty `results` array.", - "operationId": "rottentomatoes-search", + "description": "Returns the critic reviews of one TV season, newest first. Each review has a stable `id`, ISO `created_at`/`updated_at` timestamps, the critic identity and the original article URL. The list is pageable `limit` reviews at a time: pass `data.page_info.end_cursor` as `after` and keep `limit` the same while paging. It is read directly from Rotten Tomatoes' review feed (`data.transport` is `feed_api`, normally about a second); if the feed cannot be read, the service may fall back to loading the season's reviews page in a browser (`transport: browser_render`, much slower and at most five pages deep). A season with no critic reviews yet returns 200 with an empty `reviews` array. `data.subject` identifies the season. `data.fetched_at`, `X-Cache` and `X-Availability-Last-Success-*` describe freshness. Pass exactly one of `path` or `url`.", + "operationId": "rottentomatoes-season-reviews", "parameters": [ { - "description": "Search query", + "description": "Rotten Tomatoes season path", "in": "query", - "name": "query", - "required": true, + "name": "path", "type": "string", - "x-example": "inception" + "x-example": "/tv/breaking_bad/s01" }, { - "description": "Rows to return, default 10, max 20", + "description": "Absolute https://www.rottentomatoes.com season URL", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/rottentomatoes.searchResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } + "name": "url", + "type": "string", + "x-example": "https://www.rottentomatoes.com/tv/breaking_bad/s01" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Rotten Tomatoes movie search", - "tags": [ - "Rotten Tomatoes" - ] - } - }, - "/rottentomatoes/season": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Rotten Tomatoes TV season metadata, scorecard data, parent series metadata, and episode rows. Pass exactly one of `path` or `url`.", - "operationId": "rottentomatoes-season", - "parameters": [ - { - "description": "Rotten Tomatoes season path", + "description": "Review list: critics (default), top-critics or audience.", + "enum": [ + "critics", + "top-critics", + "audience" + ], "in": "query", - "name": "path", + "name": "type", "type": "string", - "x-example": "/tv/breaking_bad/s01" + "x-example": "critics" }, { - "description": "Absolute https://www.rottentomatoes.com season URL", + "description": "Reviews per page, default 10, max 20. Keep it the same on every page of one walk: the cursor is a page index times this value.", "in": "query", - "name": "url", + "name": "limit", + "type": "integer", + "x-example": 10 + }, + { + "description": "Pagination cursor: pass data.page_info.end_cursor from the previous response. Critic cursors are base64 page indexes; audience cursors are opaque keyset values that should be passed back unchanged. The feed has no 500-review ceiling; browser fallback is capped at five pages.", + "in": "query", + "name": "after", "type": "string", - "x-example": "https://www.rottentomatoes.com/tv/breaking_bad/s01" + "x-example": "MQ==" } ], "produces": [ @@ -487706,7 +566573,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/rottentomatoes.seasonResponseDoc" + "$ref": "#/definitions/rottentomatoes.reviewsResponseDoc" } }, "400": { @@ -487745,7 +566612,7 @@ "ApiKeyAuth": [] } ], - "summary": "Rotten Tomatoes season detail", + "summary": "Rotten Tomatoes TV season critic reviews", "tags": [ "Rotten Tomatoes" ] @@ -502026,6 +580893,83 @@ ] } }, + "/sofascore/event-player-actions": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the spatial actions SofaScore tracks for one football player in a match, grouped into passes, dribbles, defensive actions and ball carries. Includes pitch coordinates, end coordinates when reported, and optional outcome and key-pass flags. Get the player id from event-lineups. An uncovered match or player returns 404.", + "operationId": "sofascore-event-player-actions", + "parameters": [ + { + "description": "Numeric SofaScore event id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "16363867" + }, + { + "description": "Numeric SofaScore player id for that event", + "in": "query", + "name": "player_id", + "required": true, + "type": "string", + "x-example": "839956" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/sofascore.EventPlayerActionsResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "SofaScore football player action maps", + "tags": [ + "SofaScore" + ] + } + }, "/sofascore/event-player-heatmap": { "get": { "consumes": [ @@ -502491,6 +581435,83 @@ ] } }, + "/sofascore/event-team-shotmap": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one team's shot chart in a basketball game, with the made, missed and saved counts at each court location in SofaScore's coordinate units. Pass the home or away team id from the event. An uncovered team or event returns 404.", + "operationId": "sofascore-event-team-shotmap", + "parameters": [ + { + "description": "Numeric SofaScore basketball event id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "14442544" + }, + { + "description": "Numeric SofaScore team id for that event", + "in": "query", + "name": "team_id", + "required": true, + "type": "string", + "x-example": "3428" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/sofascore.EventTeamShotmapResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "SofaScore basketball team shot chart", + "tags": [ + "SofaScore" + ] + } + }, "/sofascore/event-team-streaks": { "get": { "consumes": [ @@ -510181,6 +589202,1593 @@ ] } }, + "/speedrun/catalogs/{kind}": { + "get": { + "description": "Reads anonymous Speedrun.com v1 metadata and preserves native opaque identifiers, run context and pagination. Source attribution: Speedrun.com.", + "operationId": "speedrun-catalog", + "parameters": [ + { + "description": "Native metadata collection", + "enum": [ + "platforms", + "regions", + "gametypes", + "developers", + "publishers", + "genres", + "engines" + ], + "in": "path", + "name": "kind", + "required": true, + "type": "string" + }, + { + "description": "Native page size from 1 to 200", + "in": "query", + "name": "max", + "type": "integer" + }, + { + "description": "Native zero-based result offset", + "in": "query", + "name": "offset", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/speedrun.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Discover Speedrun.com filter catalogs", + "tags": [ + "Speedrun.com" + ] + } + }, + "/speedrun/categories/{id}": { + "get": { + "description": "Returns complete native category detail and context. Use game/category/level discovery IDs, not mutable abbreviations. Metadata embeds preserve their native wrappers; account/profile embeds are excluded. Records count places and preserve ties, empty boards and native pagination. Variable resources return every applicable value and its source scope.", + "operationId": "speedrun-category-detail", + "parameters": [ + { + "description": "Native category ID, opaque alphanumeric", + "in": "path", + "name": "id", + "required": true, + "type": "string" + }, + { + "collectionFormat": "csv", + "description": "Native metadata embeds, comma-separated", + "in": "query", + "items": { + "enum": [ + "game", + "variables" + ], + "type": "string" + }, + "name": "embed", + "type": "array" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/speedrun.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Speedrun category detail", + "tags": [ + "Speedrun.com" + ] + } + }, + "/speedrun/categories/{id}/records": { + "get": { + "description": "Returns complete native category records and context. Use game/category/level discovery IDs, not mutable abbreviations. Metadata embeds preserve their native wrappers; account/profile embeds are excluded. Records count places and preserve ties, empty boards and native pagination. Variable resources return every applicable value and its source scope.", + "operationId": "speedrun-category-records", + "parameters": [ + { + "description": "Native category ID, opaque alphanumeric", + "in": "path", + "name": "id", + "required": true, + "type": "string" + }, + { + "collectionFormat": "csv", + "description": "Native metadata embeds, comma-separated", + "in": "query", + "items": { + "enum": [ + "game", + "category", + "level", + "platforms", + "regions", + "variables" + ], + "type": "string" + }, + "name": "embed", + "type": "array" + }, + { + "description": "Top places, not runs; API budget 1–200; native default 3", + "in": "query", + "name": "top", + "type": "integer" + }, + { + "description": "Omit empty boards when true; explicit false is retained", + "in": "query", + "name": "skip_empty", + "type": "boolean" + }, + { + "description": "Native page size 1–200", + "in": "query", + "name": "max", + "type": "integer" + }, + { + "description": "Native offset, nonnegative", + "in": "query", + "name": "offset", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/speedrun.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Speedrun category records", + "tags": [ + "Speedrun.com" + ] + } + }, + "/speedrun/categories/{id}/variables": { + "get": { + "description": "Returns complete native category variables and context. Use game/category/level discovery IDs, not mutable abbreviations. Metadata embeds preserve their native wrappers; account/profile embeds are excluded. Records count places and preserve ties, empty boards and native pagination. Variable resources return every applicable value and its source scope.", + "operationId": "speedrun-category-variables", + "parameters": [ + { + "description": "Native category ID, opaque alphanumeric", + "in": "path", + "name": "id", + "required": true, + "type": "string" + }, + { + "collectionFormat": "csv", + "description": "Native metadata embeds, comma-separated", + "in": "query", + "items": { + "enum": [ + "game" + ], + "type": "string" + }, + "name": "embed", + "type": "array" + }, + { + "description": "Native contextual order", + "enum": [ + "name", + "mandatory", + "user-defined", + "pos" + ], + "in": "query", + "name": "orderby", + "type": "string" + }, + { + "description": "Native order direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "direction", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/speedrun.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Speedrun category variables", + "tags": [ + "Speedrun.com" + ] + } + }, + "/speedrun/games": { + "get": { + "description": "Reads anonymous Speedrun.com v1 metadata and preserves native opaque identifiers, run context and pagination. Source attribution: Speedrun.com.", + "operationId": "speedrun-games", + "parameters": [ + { + "description": "Native game name search", + "in": "query", + "name": "name", + "type": "string" + }, + { + "description": "Platform ID from the platforms catalog", + "in": "query", + "name": "platform", + "type": "string" + }, + { + "description": "Region ID from the regions catalog", + "in": "query", + "name": "region", + "type": "string" + }, + { + "description": "Game-type ID from the gametypes catalog", + "in": "query", + "name": "gametype", + "type": "string" + }, + { + "description": "Native page size1–200, or1–1000 with _bulk=true", + "in": "query", + "name": "max", + "type": "integer" + }, + { + "description": "Native zero-based result offset", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "Exact native abbreviation", + "in": "query", + "name": "abbreviation", + "type": "string" + }, + { + "description": "Native release year, including0 for unknown", + "in": "query", + "name": "released", + "type": "integer" + }, + { + "description": "Native genre ID from catalog", + "in": "query", + "name": "genre", + "type": "string" + }, + { + "description": "Native engine ID from catalog", + "in": "query", + "name": "engine", + "type": "string" + }, + { + "description": "Native developer ID from catalog", + "in": "query", + "name": "developer", + "type": "string" + }, + { + "description": "Native publisher ID from catalog", + "in": "query", + "name": "publisher", + "type": "string" + }, + { + "description": "Native game order; similarity requires name", + "enum": [ + "name.int", + "name.jap", + "abbreviation", + "released", + "created", + "similarity" + ], + "in": "query", + "name": "orderby", + "type": "string" + }, + { + "description": "Native order direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "direction", + "type": "string" + }, + { + "description": "Native compact page mode, max up to1000; disables embeds", + "in": "query", + "name": "_bulk", + "type": "boolean" + }, + { + "description": "Legacy inclusion: true only typed games, false only untyped; omission includes both", + "in": "query", + "name": "romhack", + "type": "boolean" + }, + { + "collectionFormat": "csv", + "description": "Native metadata embeds", + "in": "query", + "items": { + "enum": [ + "categories", + "levels", + "variables", + "platforms", + "regions", + "gametypes", + "genres", + "engines", + "developers", + "publishers" + ], + "type": "string" + }, + "name": "embed", + "type": "array" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/speedrun.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Speedrun.com games", + "tags": [ + "Speedrun.com" + ] + } + }, + "/speedrun/games/{id}": { + "get": { + "description": "Returns complete native game detail and context. Use game/category/level discovery IDs, not mutable abbreviations. Metadata embeds preserve their native wrappers; account/profile embeds are excluded. Records count places and preserve ties, empty boards and native pagination. Variable resources return every applicable value and its source scope.", + "operationId": "speedrun-game-detail", + "parameters": [ + { + "description": "Native game ID, opaque alphanumeric", + "in": "path", + "name": "id", + "required": true, + "type": "string" + }, + { + "collectionFormat": "csv", + "description": "Native metadata embeds, comma-separated", + "in": "query", + "items": { + "enum": [ + "categories", + "levels", + "variables", + "platforms", + "regions", + "gametypes", + "genres", + "engines", + "developers", + "publishers" + ], + "type": "string" + }, + "name": "embed", + "type": "array" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/speedrun.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Speedrun game detail", + "tags": [ + "Speedrun.com" + ] + } + }, + "/speedrun/games/{id}/categories": { + "get": { + "description": "Reads anonymous Speedrun.com v1 metadata and preserves native opaque identifiers, run context and pagination. Source attribution: Speedrun.com.", + "operationId": "speedrun-categories", + "parameters": [ + { + "description": "Native opaque alphanumeric game ID", + "in": "path", + "name": "id", + "required": true, + "type": "string" + }, + { + "description": "Source miscellaneous selector; explicit false preserved", + "in": "query", + "name": "miscellaneous", + "type": "boolean" + }, + { + "description": "Native category order", + "enum": [ + "name", + "miscellaneous", + "pos" + ], + "in": "query", + "name": "orderby", + "type": "string" + }, + { + "description": "Native order direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "direction", + "type": "string" + }, + { + "collectionFormat": "csv", + "description": "Metadata embeds", + "in": "query", + "items": { + "enum": [ + "game", + "variables" + ], + "type": "string" + }, + "name": "embed", + "type": "array" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/speedrun.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get native game categories", + "tags": [ + "Speedrun.com" + ] + } + }, + "/speedrun/games/{id}/levels": { + "get": { + "description": "Reads anonymous Speedrun.com v1 metadata and preserves native opaque identifiers, run context and pagination. Source attribution: Speedrun.com.", + "operationId": "speedrun-levels", + "parameters": [ + { + "description": "Native opaque alphanumeric game ID", + "in": "path", + "name": "id", + "required": true, + "type": "string" + }, + { + "description": "Native level order", + "enum": [ + "name", + "pos" + ], + "in": "query", + "name": "orderby", + "type": "string" + }, + { + "description": "Native order direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "direction", + "type": "string" + }, + { + "collectionFormat": "csv", + "description": "Metadata embeds", + "in": "query", + "items": { + "enum": [ + "categories", + "variables" + ], + "type": "string" + }, + "name": "embed", + "type": "array" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/speedrun.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get native game levels", + "tags": [ + "Speedrun.com" + ] + } + }, + "/speedrun/games/{id}/records": { + "get": { + "description": "Reads anonymous Speedrun.com v1 metadata and preserves native opaque identifiers, run context and pagination. Source attribution: Speedrun.com.", + "operationId": "speedrun-records", + "parameters": [ + { + "description": "Native opaque alphanumeric game ID", + "in": "path", + "name": "id", + "required": true, + "type": "string" + }, + { + "description": "Native page size from 1 to 200", + "in": "query", + "name": "max", + "type": "integer" + }, + { + "description": "Native zero-based result offset", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "default": 1, + "description": "Top places, API budget1–200; compatibility default1", + "in": "query", + "name": "top", + "type": "integer" + }, + { + "description": "Omit empty boards when true; explicit false preserved", + "in": "query", + "name": "skip_empty", + "type": "boolean" + }, + { + "collectionFormat": "csv", + "description": "Metadata embeds", + "in": "query", + "items": { + "enum": [ + "game", + "category", + "level", + "platforms", + "regions", + "variables" + ], + "type": "string" + }, + "name": "embed", + "type": "array" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/speedrun.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get native top-one game record boards", + "tags": [ + "Speedrun.com" + ] + } + }, + "/speedrun/games/{id}/variables": { + "get": { + "description": "Reads anonymous Speedrun.com v1 metadata and preserves native opaque identifiers, run context and pagination. Source attribution: Speedrun.com.", + "operationId": "speedrun-variables", + "parameters": [ + { + "description": "Native opaque alphanumeric game ID", + "in": "path", + "name": "id", + "required": true, + "type": "string" + }, + { + "description": "Native variable order", + "enum": [ + "name", + "mandatory", + "user-defined", + "pos" + ], + "in": "query", + "name": "orderby", + "type": "string" + }, + { + "description": "Native order direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "direction", + "type": "string" + }, + { + "collectionFormat": "csv", + "description": "Metadata embed", + "in": "query", + "items": { + "enum": [ + "game" + ], + "type": "string" + }, + "name": "embed", + "type": "array" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/speedrun.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get native game variable definitions", + "tags": [ + "Speedrun.com" + ] + } + }, + "/speedrun/leaderboards/{game}/category/{category}": { + "get": { + "description": "Returns native places, tied runs and game/category/level context. top counts places, not runs. IDs come from game/category/level discovery; platform/region use catalog discovery. Game variables expose value IDs and scope; requested variables are checked against this board's native applicable-variable embedding. No local ranking or synthetic pagination is performed.", + "operationId": "speedrun-game-leaderboard", + "parameters": [ + { + "description": "Native game ID", + "in": "path", + "name": "game", + "required": true, + "type": "string" + }, + { + "description": "Native category ID appropriate to this board", + "in": "path", + "name": "category", + "required": true, + "type": "string" + }, + { + "collectionFormat": "csv", + "description": "Native metadata embeds", + "in": "query", + "items": { + "enum": [ + "game", + "category", + "level", + "platforms", + "regions", + "variables" + ], + "type": "string" + }, + "name": "embed", + "type": "array" + }, + { + "default": 1, + "description": "Top places, 1–200; API response-budget limit, ties can return more runs", + "in": "query", + "name": "top", + "type": "integer" + }, + { + "description": "Native platform ID from catalogs", + "in": "query", + "name": "platform", + "type": "string" + }, + { + "description": "Native region ID from catalogs", + "in": "query", + "name": "region", + "type": "string" + }, + { + "description": "Omit for both; true for emulators, false for real devices", + "in": "query", + "name": "emulators", + "type": "boolean" + }, + { + "description": "Require a video when true; omission uses source default", + "in": "query", + "name": "video_only", + "type": "boolean" + }, + { + "description": "Native timing method; omission uses source default", + "enum": [ + "realtime", + "realtime_noloads", + "ingame" + ], + "in": "query", + "name": "timing", + "type": "string" + }, + { + "description": "Run date cutoff YYYY-MM-DD", + "in": "query", + "name": "date", + "type": "string" + }, + { + "description": "JSON object mapping native variable IDs to value IDs", + "in": "query", + "name": "variables", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/speedrun.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Speedrun full-game leaderboard", + "tags": [ + "Speedrun.com" + ] + } + }, + "/speedrun/leaderboards/{game}/level/{level}/{category}": { + "get": { + "description": "Returns native places, tied runs and game/category/level context. top counts places, not runs. IDs come from game/category/level discovery; platform/region use catalog discovery. Game variables expose value IDs and scope; requested variables are checked against this board's native applicable-variable embedding. No local ranking or synthetic pagination is performed.", + "operationId": "speedrun-level-leaderboard", + "parameters": [ + { + "description": "Native game ID", + "in": "path", + "name": "game", + "required": true, + "type": "string" + }, + { + "description": "Native category ID appropriate to this board", + "in": "path", + "name": "category", + "required": true, + "type": "string" + }, + { + "description": "Native level ID from game level discovery", + "in": "path", + "name": "level", + "required": true, + "type": "string" + }, + { + "collectionFormat": "csv", + "description": "Native metadata embeds", + "in": "query", + "items": { + "enum": [ + "game", + "category", + "level", + "platforms", + "regions", + "variables" + ], + "type": "string" + }, + "name": "embed", + "type": "array" + }, + { + "default": 1, + "description": "Top places, 1–200; API response-budget limit, ties can return more runs", + "in": "query", + "name": "top", + "type": "integer" + }, + { + "description": "Native platform ID from catalogs", + "in": "query", + "name": "platform", + "type": "string" + }, + { + "description": "Native region ID from catalogs", + "in": "query", + "name": "region", + "type": "string" + }, + { + "description": "Omit for both; true for emulators, false for real devices", + "in": "query", + "name": "emulators", + "type": "boolean" + }, + { + "description": "Require a video when true; omission uses source default", + "in": "query", + "name": "video_only", + "type": "boolean" + }, + { + "description": "Native timing method; omission uses source default", + "enum": [ + "realtime", + "realtime_noloads", + "ingame" + ], + "in": "query", + "name": "timing", + "type": "string" + }, + { + "description": "Run date cutoff YYYY-MM-DD", + "in": "query", + "name": "date", + "type": "string" + }, + { + "description": "JSON object mapping native variable IDs to value IDs", + "in": "query", + "name": "variables", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/speedrun.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Speedrun individual-level leaderboard", + "tags": [ + "Speedrun.com" + ] + } + }, + "/speedrun/levels/{id}": { + "get": { + "description": "Returns complete native level detail and context. Use game/category/level discovery IDs, not mutable abbreviations. Metadata embeds preserve their native wrappers; account/profile embeds are excluded. Records count places and preserve ties, empty boards and native pagination. Variable resources return every applicable value and its source scope.", + "operationId": "speedrun-level-detail", + "parameters": [ + { + "description": "Native level ID, opaque alphanumeric", + "in": "path", + "name": "id", + "required": true, + "type": "string" + }, + { + "collectionFormat": "csv", + "description": "Native metadata embeds, comma-separated", + "in": "query", + "items": { + "enum": [ + "categories", + "variables" + ], + "type": "string" + }, + "name": "embed", + "type": "array" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/speedrun.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Speedrun level detail", + "tags": [ + "Speedrun.com" + ] + } + }, + "/speedrun/levels/{id}/categories": { + "get": { + "description": "Returns complete native level categories and context. Use game/category/level discovery IDs, not mutable abbreviations. Metadata embeds preserve their native wrappers; account/profile embeds are excluded. Records count places and preserve ties, empty boards and native pagination. Variable resources return every applicable value and its source scope.", + "operationId": "speedrun-level-categories", + "parameters": [ + { + "description": "Native level ID, opaque alphanumeric", + "in": "path", + "name": "id", + "required": true, + "type": "string" + }, + { + "collectionFormat": "csv", + "description": "Native metadata embeds, comma-separated", + "in": "query", + "items": { + "enum": [ + "game", + "variables" + ], + "type": "string" + }, + "name": "embed", + "type": "array" + }, + { + "description": "Native contextual order", + "enum": [ + "name", + "miscellaneous", + "pos" + ], + "in": "query", + "name": "orderby", + "type": "string" + }, + { + "description": "Native order direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "direction", + "type": "string" + }, + { + "description": "Select source miscellaneous flag, preserving explicit false", + "in": "query", + "name": "miscellaneous", + "type": "boolean" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/speedrun.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Speedrun level categories", + "tags": [ + "Speedrun.com" + ] + } + }, + "/speedrun/levels/{id}/records": { + "get": { + "description": "Returns complete native level records and context. Use game/category/level discovery IDs, not mutable abbreviations. Metadata embeds preserve their native wrappers; account/profile embeds are excluded. Records count places and preserve ties, empty boards and native pagination. Variable resources return every applicable value and its source scope.", + "operationId": "speedrun-level-records", + "parameters": [ + { + "description": "Native level ID, opaque alphanumeric", + "in": "path", + "name": "id", + "required": true, + "type": "string" + }, + { + "collectionFormat": "csv", + "description": "Native metadata embeds, comma-separated", + "in": "query", + "items": { + "enum": [ + "game", + "category", + "level", + "platforms", + "regions", + "variables" + ], + "type": "string" + }, + "name": "embed", + "type": "array" + }, + { + "description": "Top places, not runs; API budget 1–200; native default 3", + "in": "query", + "name": "top", + "type": "integer" + }, + { + "description": "Omit empty boards when true; explicit false is retained", + "in": "query", + "name": "skip_empty", + "type": "boolean" + }, + { + "description": "Native page size 1–200", + "in": "query", + "name": "max", + "type": "integer" + }, + { + "description": "Native offset, nonnegative", + "in": "query", + "name": "offset", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/speedrun.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Speedrun level records", + "tags": [ + "Speedrun.com" + ] + } + }, + "/speedrun/levels/{id}/variables": { + "get": { + "description": "Returns complete native level variables and context. Use game/category/level discovery IDs, not mutable abbreviations. Metadata embeds preserve their native wrappers; account/profile embeds are excluded. Records count places and preserve ties, empty boards and native pagination. Variable resources return every applicable value and its source scope.", + "operationId": "speedrun-level-variables", + "parameters": [ + { + "description": "Native level ID, opaque alphanumeric", + "in": "path", + "name": "id", + "required": true, + "type": "string" + }, + { + "collectionFormat": "csv", + "description": "Native metadata embeds, comma-separated", + "in": "query", + "items": { + "enum": [ + "game" + ], + "type": "string" + }, + "name": "embed", + "type": "array" + }, + { + "description": "Native contextual order", + "enum": [ + "name", + "mandatory", + "user-defined", + "pos" + ], + "in": "query", + "name": "orderby", + "type": "string" + }, + { + "description": "Native order direction", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "direction", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/speedrun.ResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Speedrun level variables", + "tags": [ + "Speedrun.com" + ] + } + }, + "/speedrun/options": { + "get": { + "description": "Lists supported metadata embeds, contextual ordering directions and global timing method names by resource path. Game detail supplies per-game timing support. No upstream collection or account request is made.", + "operationId": "speedrun-resource-options", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/speedrun.OptionsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Discover Speedrun contextual resource options", + "tags": [ + "Speedrun.com" + ] + } + }, "/sportingnews/article": { "get": { "description": "Returns a Sporting News US article by canonical `url`, such as `https://www.sportingnews.com/us/nfl/dallas-cowboys/news//`: title, description, section (the sport or topic in the URL, for example `NFL`), authors, publication and update times, image and body `paragraphs`. Tables, embeds, ad slots and related-story lists are excluded. Non-US editions and hub pages are rejected.", @@ -522771,16 +603379,2037 @@ 3 ], "in": "query", - "name": "top_level_category_id", - "type": "integer" + "name": "top_level_category_id", + "type": "integer" + }, + { + "default": 1, + "description": "One-based result page", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/stubhub.trendingEventsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List StubHub's currently-trending individual events", + "tags": [ + "StubHub" + ] + } + }, + "/stubhub/venue-events": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Lists a venue's own upcoming event calendar (event name, date, starting price) from its StubHub page. Obtain a real venue_slug+venue_id pair from another endpoint's event url field (e.g. https://www.stubhub.com/geha-field-at-arrowhead-stadium-tickets/venue/4467/ -- slug \"geha-field-at-arrowhead-stadium-tickets\", id 4467). A zero count with an empty events list is a valid no-upcoming-events response.", + "operationId": "stubhub-venue-events", + "parameters": [ + { + "description": "The venue's URL slug, e.g. geha-field-at-arrowhead-stadium-tickets", + "in": "query", + "name": "venue_slug", + "required": true, + "type": "string", + "x-example": "geha-field-at-arrowhead-stadium-tickets" + }, + { + "description": "The venue's numeric id", + "in": "query", + "name": "venue_id", + "required": true, + "type": "integer", + "x-example": 4467 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/stubhub.venueEventsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List a StubHub venue's upcoming events", + "tags": [ + "StubHub" + ] + } + }, + "/stuff/article": { + "get": { + "description": "Returns public Stuff article metadata and body paragraphs from a canonical article URL. A story the publisher marks premium is reported as paywalled, or refused with a permission error when no free text is available.", + "operationId": "stuff-article", + "parameters": [ + { + "description": "Canonical Stuff article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.stuff.co.nz/sport/361037655/new-mum-sarah-hirini-eyes-third-olympic-gold-after-confirming-return-rugby" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Stuff article content", + "tags": [ + "Stuff" + ] + } + }, + "/stuff/author": { + "get": { + "description": "Returns a Stuff (New Zealand) author's profile, looked up by `slug` (for example `damien-venuto`) or canonical `url`; exactly one is required. The response has the name, `job_title`, `location`, biography, headshot, `email` and recent stories. Fields show only what the profile has; shared team bylines usually carry just a job title. An unknown author returns not found.", + "operationId": "stuff-author", + "parameters": [ + { + "description": "Author slug, e.g. damien-venuto", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "damien-venuto" + }, + { + "description": "Canonical stuff.co.nz/authors/ URL; alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.stuff.co.nz/authors/damien-venuto" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.stuffAuthorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Stuff author profile", + "tags": [ + "Stuff" + ] + } + }, + "/stuff/headlines": { + "get": { + "description": "Returns the latest Stuff (New Zealand) stories for one section. `section` is required and takes one of 31 slugs, including slash-separated regional and sport ones such as `nz-news/auckland` and `sport/rugby`, plus `world-news`, `business`, `politics` and `motoring`. Each item has its title, URL, summary, publication time, author and image.", + "operationId": "stuff-headlines", + "parameters": [ + { + "description": "Stuff section slug", + "enum": [ + "latest-news", + "nz-news", + "nz-news/auckland", + "nz-news/wellington", + "nz-news/canterbury", + "nz-news/north-island", + "nz-news/south-island", + "world-news", + "business", + "money", + "politics", + "perspectives", + "pou-tiaki", + "forever-project", + "sport", + "sport/rugby", + "sport/cricket", + "sport/netball", + "sport/football", + "sport/rugby-league", + "home-property", + "home-property/good-life", + "travel", + "life-and-style", + "wellbeing", + "wellbeing/house-wellness", + "food-drink", + "culture", + "motoring", + "health", + "quizzes" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "latest-news" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Stuff section headlines", + "tags": [ + "Stuff" + ] + } + }, + "/stuff/news": { + "get": { + "description": "Returns the latest Stuff (New Zealand) top stories from the site-wide feed. Takes no parameters. Each item has its title, URL, summary, publication time, author and image where the feed provides them.", + "operationId": "stuff-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Stuff top stories", + "tags": [ + "Stuff" + ] + } + }, + "/stuff/sections": { + "get": { + "description": "Lists the 31 Stuff sections that `stuff-headlines` accepts, including regional and sport slugs that contain a slash, such as `nz-news/auckland` and `sport/rugby`. Each entry has a `slug`, a display `name` and the section's Atom feed `url`.", + "operationId": "stuff-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Stuff sections", + "tags": [ + "Stuff" + ] + } + }, + "/substack/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns every public Substack category, with the category id required by /substack/category. Ids span two spaces: 32 categories use a numeric id and one uses the string id `podcast`. Both are accepted by /substack/category.", + "operationId": "substack-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/substack.categoriesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Substack categories", + "tags": [ + "Substack" + ] + } + }, + "/substack/category": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of a category's public publication leaderboard. Each row carries the publication's subscriber signals and its full subscription offering (web plans with multi-currency pricing, App Store plans, and per-tier benefits). Subscriber totals are published to roughly three significant figures and are opt-in per writer; paid subscriber figures are only ever buckets. Upstream serves 25 publications per page and accepts pages 0-26, so at most 675 publications are reachable per category and type.", + "operationId": "substack-category", + "parameters": [ + { + "description": "Category id from /substack/categories. Numeric for 32 categories, or the string podcast.", + "in": "query", + "name": "category_id", + "required": true, + "type": "string", + "x-example": "4" + }, + { + "default": "paid", + "description": "Ranking to read", + "enum": [ + "paid", + "free" + ], + "in": "query", + "name": "type", + "type": "string" + }, + { + "default": 0, + "description": "Zero-based page, 0-26", + "in": "query", + "name": "page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/substack.categoryResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List the publications ranked in one Substack category", + "tags": [ + "Substack" + ] + } + }, + "/substack/explore": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of Substack's Explore surface. Explore is a feed of heterogeneous modules rather than a flat list, so each page returns the modules it contains and every module names its own type. Known module types are `trendingTopicsExplore` (trending topics and suggested searches), `trendingPostsExplore`, `newBestsellersExplore`, `videoSuggestionsExplore`, `categoryLeaderboard`, `comment` (a single Note) and `post` (a single post). Only the collections a module actually carries are populated. Pagination is cursor-based; early pages are curated shelves and later pages are individual Notes and posts.", + "operationId": "substack-explore", + "parameters": [ + { + "default": "explore", + "description": "Explore tab id from the tabs endpoint with surface=explore", + "in": "query", + "name": "tab", + "type": "string", + "x-example": "explore" + }, + { + "default": "base", + "description": "Tab type", + "enum": [ + "base", + "secondary", + "category" + ], + "in": "query", + "name": "type", + "type": "string" + }, + { + "description": "Opaque cursor from a previous response's next_cursor", + "in": "query", + "name": "cursor", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/substack.exploreResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Browse the public Substack Explore surface", + "tags": [ + "Substack" + ] + } + }, + "/substack/leaderboard": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of a category's bestseller leaderboard, pairing each ranked publication with its author. This is a different surface from /substack/category: it exposes the trending ranking (the site's \"Rising\" tab), validates its ranking values rather than silently defaulting, accepts the extra cross-category id `bestseller`, and returns the author alongside the publication. Use a category_id from /substack/categories whose in_leaderboard is true. Upstream serves 25 rows per page and accepts pages 0-25.", + "operationId": "substack-leaderboard", + "parameters": [ + { + "description": "Category id from /substack/categories with in_leaderboard true. Numeric, or the string ids podcast or bestseller.", + "in": "query", + "name": "category_id", + "required": true, + "type": "string", + "x-example": "96" + }, + { + "default": "trending", + "description": "Ranking to read", + "enum": [ + "trending", + "paid", + "all" + ], + "in": "query", + "name": "type", + "type": "string" + }, + { + "default": 0, + "description": "Zero-based page, 0-25", + "in": "query", + "name": "page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/substack.leaderboardResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List a Substack category's bestseller leaderboard", + "tags": [ + "Substack" + ] + } + }, + "/substack/note": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one public Note with its author, engagement counts, and the post it links to when it has one. Notes are Substack's short-form social posts. note_id is the numeric id from a Note URL: in `/@handle/note/c-316240438` it is `316240438`.", + "operationId": "substack-note", + "parameters": [ + { + "description": "Numeric Note id", + "in": "query", + "name": "note_id", + "required": true, + "type": "integer", + "x-example": 316240438 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/substack.noteResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get one public Substack Note", + "tags": [ + "Substack" + ] + } + }, + "/substack/note/replies": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of public replies to a Note, each in the same shape as /substack/note. Pagination is cursor-based: pass the previous response's next_cursor back as cursor.", + "operationId": "substack-note-replies", + "parameters": [ + { + "description": "Numeric Note id", + "in": "query", + "name": "note_id", + "required": true, + "type": "integer", + "x-example": 316240438 + }, + { + "description": "Opaque cursor from a previous response's next_cursor", + "in": "query", + "name": "cursor", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/substack.noteRepliesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List replies to a Substack Note", + "tags": [ + "Substack" + ] + } + }, + "/substack/note/restacks": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of the Notes that restacked a given Note, each in the same shape as the single-Note endpoint. A restack may carry its own commentary in `body` or be a bare reshare with an empty body. Pagination is cursor-based.", + "operationId": "substack-note-restacks", + "parameters": [ + { + "description": "Numeric Note id", + "in": "query", + "name": "note_id", + "required": true, + "type": "integer", + "x-example": 316240438 + }, + { + "description": "Opaque cursor from a previous response's next_cursor", + "in": "query", + "name": "cursor", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/substack.noteRestacksResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List the Notes that restacked a Substack Note", + "tags": [ + "Substack" + ] + } + }, + "/substack/notes": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of the public Notes feed for one tab. tab and type come as a pair from the Notes feed tabs endpoint. Pagination is cursor-based: pass the previous response's next_cursor back as cursor. Post-only rows in the upstream feed are omitted; every returned row is a Note.", + "operationId": "substack-notes", + "parameters": [ + { + "default": "for-you", + "description": "Feed tab id from the Notes feed tabs endpoint", + "in": "query", + "name": "tab", + "type": "string", + "x-example": "for-you" + }, + { + "default": "base", + "description": "Tab type from the Notes feed tabs endpoint", + "enum": [ + "base", + "secondary", + "category" + ], + "in": "query", + "name": "type", + "type": "string" + }, + { + "description": "Opaque cursor from a previous response's next_cursor", + "in": "query", + "name": "cursor", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/substack.notesFeedResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Browse the public Substack Notes feed", + "tags": [ + "Substack" + ] + } + }, + "/substack/notes/tabs": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns every selectable tab for one surface. The two surfaces expose different tab sets: `feed` has 34 tabs (the main feed, the bestseller feed, and one per category) and `explore` has 33. Each row's id and type must be passed together to the matching feed endpoint, which rejects a tab whose type does not match.", + "operationId": "substack-notes-tabs", + "parameters": [ + { + "default": "feed", + "description": "Which surface's tabs to list", + "enum": [ + "feed", + "explore" + ], + "in": "query", + "name": "surface", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/substack.notesFeedTabsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List the Substack feed tabs", + "tags": [ + "Substack" + ] + } + }, + "/substack/post": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one public post with the extended metadata the archive listing omits, including word count, every credited byline, and podcast audio details where the post has them. Post bodies are not returned.", + "operationId": "substack-post", + "parameters": [ + { + "description": "Publication subdomain or custom domain", + "in": "query", + "name": "publication", + "required": true, + "type": "string", + "x-example": "semianalysis" + }, + { + "description": "Post slug, the trailing path segment of the post URL", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "koreas-trillion-dollar-sovereign" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/substack.postResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get one public Substack post", + "tags": [ + "Substack" + ] + } + }, + "/substack/publication": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a publication's public profile and its complete subscription offering: every purchasable web plan with per-currency pricing, the separately priced App Store plans, per-tier benefit copy, and the toggles governing which tiers are sold. Identify the publication by name (a subdomain such as semianalysis, or a custom domain such as www.thefp.com) or by numeric publication_id -- exactly one is required. Prefer publication_id when you have it: it reads a compact document, while resolving by name has to parse the publication's full homepage.", + "operationId": "substack-publication", + "parameters": [ + { + "description": "Publication subdomain or custom domain. Provide this or publication_id.", + "in": "query", + "name": "publication", + "type": "string", + "x-example": "semianalysis" + }, + { + "description": "Numeric publication id. Cheaper than resolving by name. Provide this or publication.", + "in": "query", + "name": "publication_id", + "type": "integer", + "x-example": 6349492 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/substack.publicationResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Substack publication and its subscription offering", + "tags": [ + "Substack" + ] + } + }, + "/substack/publication/contributors": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of the writers credited on a publication, ranked as Substack ranks them. Rows include each writer's handle, profile URL, and bestseller badge tier, so a publication can be fanned out into individual /substack/user lookups. Large publications return several hundred contributors on the first page.", + "operationId": "substack-publication-contributors", + "parameters": [ + { + "description": "Publication subdomain or custom domain", + "in": "query", + "name": "publication", + "required": true, + "type": "string", + "x-example": "www.thefp.com" + }, + { + "default": 0, + "description": "Zero-based page", + "in": "query", + "name": "page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/substack.contributorsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List a Substack publication's public contributors", + "tags": [ + "Substack" + ] + } + }, + "/substack/publication/posts": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of a publication's public post archive with title, subtitle, canonical URL, publish date, engagement counts, and whether each post is paywalled. search filters the publication's own posts full-text; a query with no matches returns an empty list rather than the unfiltered archive.", + "operationId": "substack-publication-posts", + "parameters": [ + { + "description": "Publication subdomain or custom domain", + "in": "query", + "name": "publication", + "required": true, + "type": "string", + "x-example": "semianalysis" + }, + { + "description": "Full-text filter over the publication's own posts", + "in": "query", + "name": "search", + "type": "string", + "x-example": "nvidia" + }, + { + "default": "new", + "description": "Archive ordering", + "enum": [ + "new", + "top", + "community" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": 0, + "description": "Zero-based row offset", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "default": 12, + "description": "Rows per page, 1-50", + "in": "query", + "name": "limit", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/substack.postsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List a Substack publication's public post archive", + "tags": [ + "Substack" + ] + } + }, + "/substack/publication/recommendations": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the publications a given publication recommends to its own readers, as a publication-to-publication graph. Useful for discovering publications beyond the 675-per-category ceiling on /substack/category. publication_id is the numeric id returned by /substack/publication, /substack/category, or /substack/user.", + "operationId": "substack-publication-recommendations", + "parameters": [ + { + "description": "Numeric publication id", + "in": "query", + "name": "publication_id", + "required": true, + "type": "integer", + "x-example": 6349492 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/substack.recommendationsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List the publications one Substack publication recommends", + "tags": [ + "Substack" + ] + } + }, + "/substack/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches posts across all of Substack and returns the publications that also matched, unlike /substack/publication/posts which searches within a single publication. Set focus_publication_id to additionally receive that one publication's own matching posts in focused_posts alongside the site-wide results.", + "operationId": "substack-search", + "parameters": [ + { + "description": "Search text", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "artificial intelligence" + }, + { + "default": 0, + "description": "Zero-based page, 20 posts per page", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Numeric publication id whose own matching posts are returned in focused_posts", + "in": "query", + "name": "focus_publication_id", + "type": "integer", + "x-example": 6349492 + }, + { + "description": "Cap on focused_posts, 1-20. Requires focus_publication_id.", + "in": "query", + "name": "focus_limit", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/substack.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search posts and publications across Substack", + "tags": [ + "Substack" + ] + } + }, + "/substack/user": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one public Substack profile: identity, the publications the writer contributes to, their publicly visible subscriptions, and every subscriber signal Substack publishes. total is opt-in per writer and rounded to roughly three significant figures; when a writer hides it, total_hidden is true and total is 0, which must not be read as zero subscribers. paid_rough, paid_rough_int, and paid_tier are buckets - no exact paid subscriber count is published anywhere. follower_count is exact but counts followers, not subscribers.", + "operationId": "substack-user", + "parameters": [ + { + "description": "Substack profile handle", + "in": "query", + "name": "handle", + "required": true, + "type": "string", + "x-example": "pragmaticengineer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/substack.userResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a public Substack writer profile", + "tags": [ + "Substack" + ] + } + }, + "/substack/user/activity": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of a user's public activity: the notes they wrote, posts they published, and items they liked, replied to, or restacked. types is an optional comma-separated filter accepting `note`, `post`, `like`, `replies` and `restack`; omit it for the default mixed feed. Each item's kind is the upstream's own finer-grained label, so filtering on `restack` returns both `comment_restack` and `post_restack` items. Pagination is cursor-based.", + "operationId": "substack-user-activity", + "parameters": [ + { + "description": "Numeric user id from the user endpoint", + "in": "query", + "name": "user_id", + "required": true, + "type": "integer", + "x-example": 49731969 + }, + { + "description": "Comma-separated activity kinds: note, post, like, replies, restack", + "in": "query", + "name": "types", + "type": "string", + "x-example": "note,post" + }, + { + "description": "Opaque cursor from a previous response's next_cursor", + "in": "query", + "name": "cursor", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/substack.userActivityResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List a Substack user's public activity", + "tags": [ + "Substack" + ] + } + }, + "/substack/user/connections": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one of a user's public connection lists. Each entry is a full profile in the same shape as /substack/user, subscriber signals included. user_id is the numeric id returned by /substack/user. The upstream returns a bounded preview of each list rather than the complete membership.", + "operationId": "substack-user-connections", + "parameters": [ + { + "description": "Numeric user id from /substack/user", + "in": "query", + "name": "user_id", + "required": true, + "type": "integer", + "x-example": 49731969 + }, + { + "default": "followers", + "description": "Which list to read", + "enum": [ + "followers", + "following", + "subscribers" + ], + "in": "query", + "name": "list", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/substack.userConnectionsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List a Substack user's followers, following, or subscribers", + "tags": [ + "Substack" + ] + } + }, + "/substack/user/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches public Substack profiles by name or handle. Each result carries the same subscriber signals as /substack/user, so a search enumerates writers without a second lookup per profile. Returns 20 profiles per page; use has_more rather than assuming a fixed depth, since result counts vary by query.", + "operationId": "substack-user-search", + "parameters": [ + { + "description": "Search text matched against profile names and handles", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "pragmatic engineer" + }, + { + "default": 0, + "description": "Zero-based page", + "in": "query", + "name": "page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/substack.userSearchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search public Substack writer profiles", + "tags": [ + "Substack" + ] + } + }, + "/subway/available-times": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one Subway store's forward-looking pickup schedule -- every time slot the store is currently accepting orders for, as RFC3339 UTC instants, earliest first. Slots begin at the store's next orderable time (roughly half an hour out, not immediately) and run through closing, so the list reflects real remaining capacity for today rather than the store's advertised opening hours. Store IDs come from a GET /subway/store or GET /subway/nearby result's store_id field. A store that is closed or past its last slot for the day returns an empty slots array, which is a valid answer rather than an error. interval_minutes reports the spacing between consecutive slots as measured from the response itself.", + "operationId": "subway-available-times", + "parameters": [ + { + "description": "Store ID from a /subway/store or /subway/nearby result's store_id", + "in": "query", + "name": "store_id", + "required": true, + "type": "string", + "x-example": "75376-0" + }, + { + "description": "Maximum slots to return (1-200). Defaults to every slot the store offers.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/subway.availableTimesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get one Subway store's available pickup times", + "tags": [ + "Subway" + ] + } + }, + "/subway/combos": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one Subway store's bundle and combo categories with the price ranges they advertise -- min_bundled_price (cheapest as a bundle) and a_la_carte_price (cheapest bought separately). Unlike GET /subway/menu, which is US-only, this works in other markets: confirmed against US, GB and DE stores. It is NOT an itemised menu -- the upstream route behind it carries categories and prices only, with no individual products, no nutrition panels and no allergen disclosures. Use GET /subway/menu for a full itemised menu where it is available. A store with no bundles configured returns an empty categories array, which is a valid answer rather than an error. Store IDs come from a GET /subway/store or GET /subway/nearby result's store_id field.", + "operationId": "subway-combos", + "parameters": [ + { + "description": "Store ID from a /subway/store or /subway/nearby result's store_id", + "in": "query", + "name": "store_id", + "required": true, + "type": "string", + "x-example": "50916-0" + }, + { + "description": "Preferred translation culture for display names, e.g. en-US, en-GB, de-DE. Falls back to the category's default name.", + "in": "query", + "name": "culture", + "type": "string", + "x-example": "en-GB" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/subway.combosResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get one Subway store's bundle/combo categories", + "tags": [ + "Subway" + ] + } + }, + "/subway/menu": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one Subway store's complete menu: every category, every product, and for each purchasable size (Footlong, 6-inch, etc.) its price, full nutrition panel (calories, fat, sodium, protein and more) and allergen disclosures. Store IDs come from a GET /subway/store result's store_id field. This endpoint currently covers US stores only: the menu is not available for non-US stores, which return 404 -- see GET /subway/combos for the bundle/combo categories that are available in other markets. Categories carry is_main_category: true for human-browsable menu sections (Sandwiches, Drinks, Salads, ...) and false for Subway's own internal build/customization groupings, which are included for completeness but are not meant to be shown as menu sections on their own.", + "operationId": "subway-menu", + "parameters": [ + { + "description": "Store ID from a /subway/store result's store_id", + "in": "query", + "name": "store_id", + "required": true, + "type": "string", + "x-example": "75376-0" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/subway.menuResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get one Subway store's full menu", + "tags": [ + "Subway" + ] + } + }, + "/subway/nearby": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Subway stores nearest first to a coordinate or a free-text address/city/ZIP, with live open/closed status, payment methods, catering link, and feature flags. This is the proximity search GET /subway/sitemap cannot do directly -- the sitemap enumerates the whole world for bulk scraping, this answers \"what is near this point\" with distance and live attributes the sitemap/store locator does not carry. Each store's store_id is the same value GET /subway/menu takes, and can be passed back here as store_id to re-read one store's live attributes directly.", + "operationId": "subway-nearby", + "parameters": [ + { + "description": "Search center latitude. Set together with longitude, or set query or store_id instead -- exactly one search mode.", + "in": "query", + "name": "latitude", + "type": "number", + "x-example": 34.0549076 + }, + { + "description": "Search center longitude.", + "in": "query", + "name": "longitude", + "type": "number", + "x-example": -118.242643 + }, + { + "description": "Free-text address, city or ZIP to search near. Alternative to latitude/longitude and store_id.", + "in": "query", + "name": "query", + "type": "string", + "x-example": "Los Angeles, CA" + }, + { + "description": "Look up one store directly by its store_id, from GET /subway/store or a prior /subway/nearby result. Alternative to latitude/longitude and query.", + "in": "query", + "name": "store_id", + "type": "string", + "x-example": "75376-0" + }, + { + "description": "Maximum stores to return, 1-20 (default 10)", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + }, + { + "description": "Opaque pagination cursor from a previous response's next_offset", + "in": "query", + "name": "offset", + "type": "string" + }, + { + "description": "Comma-separated. Restricts results to stores with ALL listed features. Allowed values: HAS_BREAKFAST, IS_REMOTEORDER_ACCEPTED, HAS_HALAL, HAS_DRIVETHROUGH, HAS_CATERING, HAS_CURBSIDE, IS_OPERATING.", + "in": "query", + "name": "features", + "type": "string", + "x-example": "HAS_BREAKFAST,IS_REMOTEORDER_ACCEPTED" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/subway.nearbyResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search Subway stores near a coordinate or address", + "tags": [ + "Subway" + ] + } + }, + "/subway/sitemap": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns one page of Subway's sitemap-declared store index -- 22,700+ URLs across 2 shards at time of writing, covering a country/region/city/street tree worldwide. This is the cheapest way to enumerate Subway locations. Each entry carries its URL, the locator path GET /subway/store takes, and a depth: the deepest entries are store pages, shallower ones are country, region and city directory pages listed in the same sitemap. A page past the end returns an empty list rather than an error, so a caller can walk to exhaustion.", + "operationId": "subway-sitemap", + "parameters": [ + { + "description": "Sitemap shard index (default 0). shard_count in the response says how many exist.", + "in": "query", + "name": "shard", + "type": "integer", + "x-example": 0 }, { - "default": 1, - "description": "One-based result page", + "description": "1-based page within the shard (default 1)", "in": "query", - "minimum": 1, "name": "page", - "type": "integer" + "type": "integer", + "x-example": 1 + }, + { + "description": "Entries per page, 1-500 (default 100)", + "in": "query", + "name": "page_size", + "type": "integer", + "x-example": 100 } ], "produces": [ @@ -522790,7 +605419,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/stubhub.trendingEventsResponseDoc" + "$ref": "#/definitions/subway.sitemapResponseDoc" } }, "400": { @@ -522799,6 +605428,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -522811,35 +605452,27 @@ "ApiKeyAuth": [] } ], - "summary": "List StubHub's currently-trending individual events", + "summary": "Browse Subway's global store-URL index", "tags": [ - "StubHub" + "Subway" ] } }, - "/stubhub/venue-events": { + "/subway/store": { "get": { "consumes": [ "application/json" ], - "description": "Lists a venue's own upcoming event calendar (event name, date, starting price) from its StubHub page. Obtain a real venue_slug+venue_id pair from another endpoint's event url field (e.g. https://www.stubhub.com/geha-field-at-arrowhead-stadium-tickets/venue/4467/ -- slug \"geha-field-at-arrowhead-stadium-tickets\", id 4467). A zero count with an empty events list is a valid no-upcoming-events response.", - "operationId": "stubhub-venue-events", + "description": "Returns one Subway store's detail: address, coordinates, phone (display and E.164), opening hours, and the locator's own entity profile -- IANA timezone, Google Place ID and CID for joining to Google Maps data, franchise number, price range, published services and meal types, and explicit online-ordering/catering/drive-through flags. Boolean flags are omitted entirely when the locator does not publish them, so an absent flag is not a false one. open reflects the location's published status (a store flagged closed long-term), which is distinct from whether it is currently within its opening hours. store_id is the value GET /subway/menu and GET /subway/available-times take. Paths come from a GET /subway/sitemap entry.", + "operationId": "subway-store", "parameters": [ { - "description": "The venue's URL slug, e.g. geha-field-at-arrowhead-stadium-tickets", + "description": "Store path from a /subway/sitemap entry", "in": "query", - "name": "venue_slug", + "name": "path", "required": true, "type": "string", - "x-example": "geha-field-at-arrowhead-stadium-tickets" - }, - { - "description": "The venue's numeric id", - "in": "query", - "name": "venue_id", - "required": true, - "type": "integer", - "x-example": 4467 + "x-example": "united-states/ny/new-york/1-penn-plaza" } ], "produces": [ @@ -522849,7 +605482,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/stubhub.venueEventsResponseDoc" + "$ref": "#/definitions/subway.storeResponseDoc" } }, "400": { @@ -522858,6 +605491,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -522870,24 +605515,24 @@ "ApiKeyAuth": [] } ], - "summary": "List a StubHub venue's upcoming events", + "summary": "Get one Subway store's detail", "tags": [ - "StubHub" + "Subway" ] } }, - "/stuff/article": { + "/sun/article": { "get": { - "description": "Returns public Stuff article metadata and body paragraphs from a canonical article URL. A story the publisher marks premium is reported as paywalled, or refused with a permission error when no free text is available.", - "operationId": "stuff-article", + "description": "Returns one The Sun article by `url`, a canonical HTTPS article link. The response has the title, description, section, authors, publication and update times, lead image URL, body `paragraphs` and a `paywalled` flag. Subscriber-only or blocked pages return an error instead.", + "operationId": "sun-article", "parameters": [ { - "description": "Canonical Stuff article URL", + "description": "Canonical The Sun article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.stuff.co.nz/sport/361037655/new-mum-sarah-hirini-eyes-third-olympic-gold-after-confirming-return-rugby" + "x-example": "https://www.thesun.co.uk/news/12345678/example/" } ], "produces": [ @@ -522906,12 +605551,6 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "404": { "description": "Not Found", "schema": { @@ -522930,30 +605569,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Stuff article content", + "summary": "Get The Sun article content", "tags": [ - "Stuff" + "The Sun" ] } }, - "/stuff/author": { + "/sun/author": { "get": { - "description": "Returns a Stuff (New Zealand) author's profile, looked up by `slug` (for example `damien-venuto`) or canonical `url`; exactly one is required. The response has the name, `job_title`, `location`, biography, headshot, `email` and recent stories. Fields show only what the profile has; shared team bylines usually carry just a job title. An unknown author returns not found.", - "operationId": "stuff-author", + "description": "Returns a Sun author's profile by `url`, a canonical `thesun.co.uk/author//` link: name, job title, bio and recent articles with title, URL, excerpt, category and category URL. `job_title` is often empty because most Sun bylines carry only a name and bio.", + "operationId": "sun-author", "parameters": [ { - "description": "Author slug, e.g. damien-venuto", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "damien-venuto" - }, - { - "description": "Canonical stuff.co.nz/authors/ URL; alternative to slug", + "description": "Canonical The Sun author URL", "in": "query", "name": "url", + "required": true, "type": "string", - "x-example": "https://www.stuff.co.nz/authors/damien-venuto" + "x-example": "https://www.thesun.co.uk/author/becky-pemberton/" } ], "produces": [ @@ -522963,7 +605596,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.stuffAuthorResponseDoc" + "$ref": "#/definitions/publicnews.sunAuthorResponseDoc" } }, "400": { @@ -522990,57 +605623,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Stuff author profile", + "summary": "Get a Sun author profile", "tags": [ - "Stuff" + "The Sun" ] } }, - "/stuff/headlines": { + "/sun/headlines": { "get": { - "description": "Returns the latest Stuff (New Zealand) stories for one section. `section` is required and takes one of 31 slugs, including slash-separated regional and sport ones such as `nz-news/auckland` and `sport/rugby`, plus `world-news`, `business`, `politics` and `motoring`. Each item has its title, URL, summary, publication time, author and image.", - "operationId": "stuff-headlines", + "description": "Returns the current headlines for one The Sun section. `section` is required and takes one of `news`, `politics`, `royal-family`, `sport`, `showbiz`, `money`, `tech`, `fabulous`, `travel` or `health`. Every item has its title and URL. The `news` section also carries summary, author, publication time and image when the outlet provides them.", + "operationId": "sun-headlines", "parameters": [ { - "description": "Stuff section slug", + "description": "The Sun section slug", "enum": [ - "latest-news", - "nz-news", - "nz-news/auckland", - "nz-news/wellington", - "nz-news/canterbury", - "nz-news/north-island", - "nz-news/south-island", - "world-news", - "business", - "money", + "news", "politics", - "perspectives", - "pou-tiaki", - "forever-project", + "royal-family", "sport", - "sport/rugby", - "sport/cricket", - "sport/netball", - "sport/football", - "sport/rugby-league", - "home-property", - "home-property/good-life", + "showbiz", + "money", + "tech", + "fabulous", "travel", - "life-and-style", - "wellbeing", - "wellbeing/house-wellness", - "food-drink", - "culture", - "motoring", - "health", - "quizzes" + "health" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "latest-news" + "x-example": "news" } ], "produces": [ @@ -523071,16 +605683,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Stuff section headlines", + "summary": "Get The Sun section headlines", "tags": [ - "Stuff" + "The Sun" ] } }, - "/stuff/news": { + "/sun/news": { "get": { - "description": "Returns the latest Stuff (New Zealand) top stories from the site-wide feed. Takes no parameters. Each item has its title, URL, summary, publication time, author and image where the feed provides them.", - "operationId": "stuff-news", + "description": "Returns the current top stories from The Sun. It takes no parameters. Each item has its title, URL and, where available, a summary, author, publication time, image URL and `type`. Use the headlines endpoint to read one section.", + "operationId": "sun-news", "produces": [ "application/json" ], @@ -523091,12 +605703,6 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -523109,16 +605715,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Stuff top stories", + "summary": "Get The Sun top stories", "tags": [ - "Stuff" + "The Sun" ] } }, - "/stuff/sections": { + "/sun/sections": { "get": { - "description": "Lists the 31 Stuff sections that `stuff-headlines` accepts, including regional and sport slugs that contain a slash, such as `nz-news/auckland` and `sport/rugby`. Each entry has a `slug`, a display `name` and the section's Atom feed `url`.", - "operationId": "stuff-sections", + "description": "Lists the The Sun sections that the headlines endpoint accepts, such as `news`, `politics`, `royal-family`, `sport`, `showbiz`, `money`, `tech`, `fabulous`, `travel` and `health`. Each entry has a `slug`, a display `name` and a section `url`.", + "operationId": "sun-sections", "produces": [ "application/json" ], @@ -523135,19 +605741,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get Stuff sections", + "summary": "Get The Sun sections", "tags": [ - "Stuff" + "The Sun" ] } }, - "/substack/categories": { + "/swiggy/collections": { "get": { "consumes": [ "application/json" ], - "description": "Returns every public Substack category, with the category id required by /substack/category. Ids span two spaces: 32 categories use a numeric id and one uses the string id `podcast`. Both are accepted by /substack/category.", - "operationId": "substack-categories", + "description": "Returns the curated dish/cuisine collections Swiggy's own homepage surfaces for a latitude/longitude (e.g. \"Idli\", \"Biryani\", \"Dosa\"). Each collection's id is the value /swiggy/search's collection_id param takes to browse restaurants within it. The response also carries is_serviceable, which says whether Swiggy delivers to the requested coordinates at all: false means the coordinates are outside Swiggy's delivery coverage, so the empty collections list is a coverage answer rather than a location that simply has no curated collections.", + "operationId": "swiggy-collections", + "parameters": [ + { + "description": "Search center latitude", + "in": "query", + "name": "latitude", + "required": true, + "type": "number", + "x-example": 12.9716 + }, + { + "description": "Search center longitude", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": 77.5946 + } + ], "produces": [ "application/json" ], @@ -523155,7 +605779,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/substack.categoriesResponseDoc" + "$ref": "#/definitions/swiggy.collectionsResponseDoc" } }, "400": { @@ -523164,12 +605788,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -523182,45 +605800,43 @@ "ApiKeyAuth": [] } ], - "summary": "List Substack categories", + "summary": "List Swiggy's curated collections for a location", "tags": [ - "Substack" + "Swiggy" ] } }, - "/substack/category": { + "/swiggy/restaurant": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a category's public publication leaderboard. Each row carries the publication's subscriber signals and its full subscription offering (web plans with multi-currency pricing, App Store plans, and per-tier benefits). Subscriber totals are published to roughly three significant figures and are opt-in per writer; paid subscriber figures are only ever buckets. Upstream serves 25 publications per page and accepts pages 0-26, so at most 675 publications are reachable per category and type.", - "operationId": "substack-category", + "description": "Returns one Swiggy restaurant's detail by id: name, city, area, address, postal code, coordinates, phone, cuisines, cost for two, rating and total rating count, delivery time, weekly opening hours with the current open/closed callout, plus the promotions Swiggy currently shows on that restaurant's page (headline discount, conditions, and coupon code when one is needed). Swiggy has no lighter restaurant-detail-only source -- this reads the same upstream as /swiggy/restaurant/menu, just without the menu items.", + "operationId": "swiggy-restaurant", "parameters": [ { - "description": "Category id from /substack/categories. Numeric for 32 categories, or the string podcast.", + "description": "Restaurant id, from /swiggy/search's id field", "in": "query", - "name": "category_id", + "name": "restaurant_id", "required": true, "type": "string", - "x-example": "4" + "x-example": "5938" }, { - "default": "paid", - "description": "Ranking to read", - "enum": [ - "paid", - "free" - ], + "description": "Caller latitude (required by Swiggy's own menu API)", "in": "query", - "name": "type", - "type": "string" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 12.9716 }, { - "default": 0, - "description": "Zero-based page, 0-26", + "description": "Caller longitude (required by Swiggy's own menu API)", "in": "query", - "name": "page", - "type": "integer" + "name": "longitude", + "required": true, + "type": "number", + "x-example": 77.5946 } ], "produces": [ @@ -523230,7 +605846,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/substack.categoryResponseDoc" + "$ref": "#/definitions/swiggy.restaurantResponseDoc" } }, "400": { @@ -523239,12 +605855,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -523257,45 +605867,43 @@ "ApiKeyAuth": [] } ], - "summary": "List the publications ranked in one Substack category", + "summary": "Get one Swiggy restaurant's detail", "tags": [ - "Substack" + "Swiggy" ] } }, - "/substack/explore": { + "/swiggy/restaurant/menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of Substack's Explore surface. Explore is a feed of heterogeneous modules rather than a flat list, so each page returns the modules it contains and every module names its own type. Known module types are `trendingTopicsExplore` (trending topics and suggested searches), `trendingPostsExplore`, `newBestsellersExplore`, `videoSuggestionsExplore`, `categoryLeaderboard`, `comment` (a single Note) and `post` (a single post). Only the collections a module actually carries are populated. Pagination is cursor-based; early pages are curated shelves and later pages are individual Notes and posts.", - "operationId": "substack-explore", + "description": "Returns one restaurant's full menu grouped into categories, plus its restaurant summary. Every item carries a name, description, category, price, discounted_price when currently discounted, veg/non-veg flag, stock status, an image, and Swiggy's own per-dish rating and review count where it carries one. A category nested under a parent group on the live site (e.g. \"Whopper\" under \"Burgers, Wraps & Tacos\") is flattened to one level: its title is the parent's, with subcategory set to its own name. The response also carries the restaurant's current promotions in offers, the same block /swiggy/restaurant returns.", + "operationId": "swiggy-restaurant-menu", "parameters": [ { - "default": "explore", - "description": "Explore tab id from the tabs endpoint with surface=explore", + "description": "Restaurant id, from /swiggy/search's id field", "in": "query", - "name": "tab", + "name": "restaurant_id", + "required": true, "type": "string", - "x-example": "explore" + "x-example": "5938" }, { - "default": "base", - "description": "Tab type", - "enum": [ - "base", - "secondary", - "category" - ], + "description": "Caller latitude (required by Swiggy's own menu API)", "in": "query", - "name": "type", - "type": "string" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 12.9716 }, { - "description": "Opaque cursor from a previous response's next_cursor", + "description": "Caller longitude (required by Swiggy's own menu API)", "in": "query", - "name": "cursor", - "type": "string" + "name": "longitude", + "required": true, + "type": "number", + "x-example": 77.5946 } ], "produces": [ @@ -523305,7 +605913,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/substack.exploreResponseDoc" + "$ref": "#/definitions/swiggy.menuResponseDoc" } }, "400": { @@ -523314,12 +605922,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -523332,46 +605934,101 @@ "ApiKeyAuth": [] } ], - "summary": "Browse the public Substack Explore surface", + "summary": "Get one Swiggy restaurant's menu with prices", "tags": [ - "Substack" + "Swiggy" ] } }, - "/substack/leaderboard": { + "/swiggy/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a category's bestseller leaderboard, pairing each ranked publication with its author. This is a different surface from /substack/category: it exposes the trending ranking (the site's \"Rising\" tab), validates its ranking values rather than silently defaulting, accepts the extra cross-category id `bestseller`, and returns the author alongside the publication. Use a category_id from /substack/categories whose in_leaderboard is true. Upstream serves 25 rows per page and accepts pages 0-25.", - "operationId": "substack-leaderboard", + "description": "Returns restaurants delivering to a latitude/longitude, optionally filtered by a keyword or browsed within a curated collection. With no query and no collection_id this browses the nearby-restaurant listing; with a query it runs a keyword search across restaurant names, cuisines, and dishes; with a collection_id (from /swiggy/collections) it browses restaurants within that curated collection. query and collection_id are mutually exclusive. Keyword search has two result tabs, selected with tab: dish (the default) returns restaurants that serve a matching dish, each with the matching dishes, their prices, and Swiggy's own per-dish rating where it has one, in a dishes array; restaurant returns restaurants whose own name or cuisine matches, a wider set with no dishes. tab, veg, min_rating and offers are only valid together with query. sort works with either query (relevance, delivery_time, rating) or collection_id (those three plus cost_low_to_high and cost_high_to_low), and is rejected on a plain nearby browse. Each restaurant carries its id (the value the restaurant and menu endpoints take), name, cuisines, cost for two, rating, delivery time, open/closed status, a hero image, and, where one is shown, an external_rating block with the third-party aggregate score, count, and source. Where the result card advertises a promotion it also carries offers, the same title/description/tag shape /swiggy/restaurant returns (a listing card never carries a coupon code, and a card showing both a discount and a separate free-delivery benefit returns them as two entries). is_promoted is present and true only for a result Swiggy itself labels a sponsored placement rather than an organic one. unavailable_message is present only when Swiggy says the restaurant cannot currently be ordered from and carries its own reason; it is not the inverse of is_open, since Swiggy reports a restaurant as open while still refusing orders for the requested location. A plain nearby browse also returns is_serviceable, which says whether Swiggy delivers to the requested coordinates at all: false means the coordinates are outside Swiggy's delivery coverage, so the empty restaurants list is a coverage answer rather than a no-matches answer, while an empty list without the field means no matches in a served area. It is omitted on keyword search and on a collection_id browse, neither of which carries Swiggy's own coverage marker.", + "operationId": "swiggy-search", "parameters": [ { - "description": "Category id from /substack/categories with in_leaderboard true. Numeric, or the string ids podcast or bestseller.", + "description": "Search center latitude", "in": "query", - "name": "category_id", + "name": "latitude", + "required": true, + "type": "number", + "x-example": 12.9716 + }, + { + "description": "Search center longitude", + "in": "query", + "name": "longitude", "required": true, + "type": "number", + "x-example": 77.5946 + }, + { + "description": "Optional keyword to search restaurants and dishes by, at least 2 characters. Mutually exclusive with collection_id.", + "in": "query", + "name": "query", "type": "string", - "x-example": "96" + "x-example": "pizza" }, { - "default": "trending", - "description": "Ranking to read", + "description": "Optional curated collection id from /swiggy/collections's id field. Browses restaurants within that collection instead of the plain nearby listing. Mutually exclusive with query.", + "in": "query", + "name": "collection_id", + "type": "string", + "x-example": "80440" + }, + { + "description": "Optional sort order. With query: relevance, delivery_time, rating. With collection_id: those three plus cost_low_to_high and cost_high_to_low. Not valid on a plain nearby browse.", "enum": [ - "trending", - "paid", - "all" + "relevance", + "delivery_time", + "rating", + "cost_low_to_high", + "cost_high_to_low" ], "in": "query", - "name": "type", + "name": "sort", + "type": "string", + "x-example": "rating" + }, + { + "description": "Opaque pagination cursor from a prior response's next_offset (not meaningful when query is set)", + "in": "query", + "name": "offset", "type": "string" }, { - "default": 0, - "description": "Zero-based page, 0-25", + "description": "Which keyword-search result tab to read: dish (default, restaurants serving a matching dish, each with a dishes array) or restaurant (restaurants whose own name/cuisine matches). Only valid together with query.", + "enum": [ + "dish", + "restaurant" + ], "in": "query", - "name": "page", - "type": "integer" + "name": "tab", + "type": "string", + "x-example": "restaurant" + }, + { + "description": "Only return vegetarian results: veg dishes on tab=dish, pure-veg restaurants on tab=restaurant. Only valid together with query.", + "in": "query", + "name": "veg", + "type": "boolean", + "x-example": true + }, + { + "description": "Only return restaurants rated at or above this score (0-5). Only valid together with query.", + "in": "query", + "name": "min_rating", + "type": "number", + "x-example": 4 + }, + { + "description": "Only return restaurants currently running an offer. Only valid together with query.", + "in": "query", + "name": "offers", + "type": "boolean", + "x-example": true } ], "produces": [ @@ -523381,7 +606038,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/substack.leaderboardResponseDoc" + "$ref": "#/definitions/swiggy.searchResponseDoc" } }, "400": { @@ -523390,12 +606047,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -523408,27 +606059,27 @@ "ApiKeyAuth": [] } ], - "summary": "List a Substack category's bestseller leaderboard", + "summary": "Search Swiggy restaurants near a location", "tags": [ - "Substack" + "Swiggy" ] } }, - "/substack/note": { + "/taco-bell/app-menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns one public Note with its author, engagement counts, and the post it links to when it has one. Notes are Substack's short-form social posts. note_id is the numeric id from a Note URL: in `/@handle/note/c-316240438` it is `316240438`.", - "operationId": "substack-note", + "description": "Returns one Taco Bell US restaurant's complete app-ordering catalog by store number: every category, every individually orderable product, AND every combo (kind \"bundle\") it carries. This is the only endpoint in this family that publishes combos at all -- each one resolved down to its full slot composition (choices[], each with min/max selections and the product codes it defaults to when not customized), not just a name and price. Also returns the store's named ordering windows (dayparts) and, per item, which dayparts it is orderable in. Store numbers come from GET /taco-bell/stores.", + "operationId": "taco-bell-app-menu", "parameters": [ { - "description": "Numeric Note id", + "description": "Taco Bell store number, from /taco-bell/stores", "in": "query", - "name": "note_id", + "name": "store_number", "required": true, - "type": "integer", - "x-example": 316240438 + "type": "string", + "x-example": "034922" } ], "produces": [ @@ -523438,7 +606089,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/substack.noteResponseDoc" + "$ref": "#/definitions/tacobell.appMenuResponseDoc" } }, "400": { @@ -523471,33 +606122,68 @@ "ApiKeyAuth": [] } ], - "summary": "Get one public Substack Note", + "summary": "Get one Taco Bell restaurant's full app-ordering catalog, combos included", "tags": [ - "Substack" + "TacoBell" ] } }, - "/substack/note/replies": { + "/taco-bell/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of public replies to a Note, each in the same shape as /substack/note. Pagination is cursor-based: pass the previous response's next_cursor back as cursor.", - "operationId": "substack-note-replies", + "description": "Returns Taco Bell's US menu categories -- 17 at time of writing, including tacos, burritos, quesadillas, nachos, bowls, breakfast, drinks, snacks-sweets, specialties, party-packs, vegetarian, boxes-and-combos and the value menus. Each entry's slug is the value GET /taco-bell/menu takes. A category flagged hidden_from_menu is one Taco Bell does not surface in its own navigation; it is still fetchable. Takes no parameters.", + "operationId": "taco-bell-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/tacobell.categoriesResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Taco Bell menu categories", + "tags": [ + "TacoBell" + ] + } + }, + "/taco-bell/menu": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the items in one Taco Bell US menu category, each with its product code, name, price, calorie count, product and food type, image, and flags for whether it is customizable, has a meatless variant, and is currently available in store. Category slugs come from GET /taco-bell/categories, and the endpoint accepts either the bare slug (`tacos`) or the full path form (`/food/tacos`). Taco Bell is one of the few brands publishing both price and calories in the same payload.", + "operationId": "taco-bell-menu", "parameters": [ { - "description": "Numeric Note id", + "description": "Category slug from /taco-bell/categories", "in": "query", - "name": "note_id", + "name": "category", "required": true, - "type": "integer", - "x-example": 316240438 - }, - { - "description": "Opaque cursor from a previous response's next_cursor", - "in": "query", - "name": "cursor", - "type": "string" + "type": "string", + "x-example": "tacos" } ], "produces": [ @@ -523507,7 +606193,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/substack.noteRepliesResponseDoc" + "$ref": "#/definitions/tacobell.menuResponseDoc" } }, "400": { @@ -523540,33 +606226,42 @@ "ApiKeyAuth": [] } ], - "summary": "List replies to a Substack Note", + "summary": "List one Taco Bell menu category's items with prices and calories", "tags": [ - "Substack" + "TacoBell" ] } }, - "/substack/note/restacks": { + "/taco-bell/nutrition": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of the Notes that restacked a given Note, each in the same shape as the single-Note endpoint. A restack may carry its own commentary in `body` or be a bare reshare with an empty body. Pagination is cursor-based.", - "operationId": "substack-note-restacks", + "description": "Returns the complete nutrition-facts panel for one Taco Bell US menu item -- fats (total, saturated, trans, poly- and monounsaturated), cholesterol, sodium, potassium, carbohydrates, fiber, sugars including added sugars, protein, and the vitamin and mineral figures -- plus serving size and weight and the item's declared allergens. Values are unrounded as published, in the panel's own units: grams for fats, carbohydrates and protein, milligrams for cholesterol, sodium, potassium, calcium, iron and caffeine, and micrograms for vitamin D. This goes well beyond the calorie count on /taco-bell/menu and /taco-bell/product, which is all the menu pages themselves carry. The full component-by-component ingredient statement is available via include_ingredients; it runs to several kilobytes per item, so it is off by default.", + "operationId": "taco-bell-nutrition", "parameters": [ { - "description": "Numeric Note id", + "description": "Category slug from /taco-bell/categories", "in": "query", - "name": "note_id", + "name": "category", "required": true, - "type": "integer", - "x-example": 316240438 + "type": "string", + "x-example": "burritos" }, { - "description": "Opaque cursor from a previous response's next_cursor", + "description": "Product slug, the last segment of a /food/{category}/{product} URL", "in": "query", - "name": "cursor", - "type": "string" + "name": "product", + "required": true, + "type": "string", + "x-example": "burrito-supreme" + }, + { + "description": "Include the full ingredient statement (default false -- it is long)", + "in": "query", + "name": "include_ingredients", + "type": "boolean", + "x-example": false } ], "produces": [ @@ -523576,7 +606271,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/substack.noteRestacksResponseDoc" + "$ref": "#/definitions/tacobell.nutritionResponseDoc" } }, "400": { @@ -523609,45 +606304,35 @@ "ApiKeyAuth": [] } ], - "summary": "List the Notes that restacked a Substack Note", + "summary": "Get one Taco Bell menu item's full nutrition panel, allergens and ingredients", "tags": [ - "Substack" + "TacoBell" ] } }, - "/substack/notes": { + "/taco-bell/product": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of the public Notes feed for one tab. tab and type come as a pair from the Notes feed tabs endpoint. Pagination is cursor-based: pass the previous response's next_cursor back as cursor. Post-only rows in the upstream feed are omitted; every returned row is a Note.", - "operationId": "substack-notes", + "description": "Returns one Taco Bell US menu item in full: product code, name, description, price, rounded and unrounded calorie counts, every published image rendition, and cross-sell/upsell references. The distinguishing part is `customizations` -- the option groups the item accepts (proteins, included ingredients, add-ons, sauces, shells, upgrades, and Supreme/Fresco add and remove sets), each option carrying its own calorie delta and add-on price. Calorie deltas can be negative, since the Fresco style replaces sauces. Slugs come from GET /taco-bell/menu, and both the bare slug and the full path form are accepted.", + "operationId": "taco-bell-product", "parameters": [ { - "default": "for-you", - "description": "Feed tab id from the Notes feed tabs endpoint", + "description": "Category slug from /taco-bell/categories", "in": "query", - "name": "tab", + "name": "category", + "required": true, "type": "string", - "x-example": "for-you" - }, - { - "default": "base", - "description": "Tab type from the Notes feed tabs endpoint", - "enum": [ - "base", - "secondary", - "category" - ], - "in": "query", - "name": "type", - "type": "string" + "x-example": "burritos" }, { - "description": "Opaque cursor from a previous response's next_cursor", + "description": "Product slug, the last segment of a /food/{category}/{product} URL", "in": "query", - "name": "cursor", - "type": "string" + "name": "product", + "required": true, + "type": "string", + "x-example": "burrito-supreme" } ], "produces": [ @@ -523657,7 +606342,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/substack.notesFeedResponseDoc" + "$ref": "#/definitions/tacobell.productResponseDoc" } }, "400": { @@ -523666,6 +606351,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -523684,30 +606375,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse the public Substack Notes feed", + "summary": "Get one Taco Bell menu item's full detail, including its customization matrix", "tags": [ - "Substack" + "TacoBell" ] } }, - "/substack/notes/tabs": { + "/taco-bell/store": { "get": { "consumes": [ "application/json" ], - "description": "Returns every selectable tab for one surface. The two surfaces expose different tab sets: `feed` has 34 tabs (the main feed, the bestseller feed, and one per category) and `explore` has 33. Each row's id and type must be passed together to the matching feed endpoint, which rejects a tab whose type does not match.", - "operationId": "substack-notes-tabs", + "description": "Returns one Taco Bell US restaurant by store number: address and coordinates, phone, open status, timezone, delivery and online-ordering state, Taco Bell's per-store capability flags, mobile-pickup status and geofencing radius. Where GET /taco-bell/stores gives only today's window for each nearby restaurant, this returns the full published week, Monday-first, and each day's dayparts. Dayparts matter for ordering: Taco Bell's menu availability is daypart-scoped, so breakfast items and Balance Of Day items are orderable in different windows of the same day. Store numbers come from GET /taco-bell/stores.", + "operationId": "taco-bell-store", "parameters": [ { - "default": "feed", - "description": "Which surface's tabs to list", - "enum": [ - "feed", - "explore" - ], + "description": "Taco Bell store number, from /taco-bell/stores", "in": "query", - "name": "surface", - "type": "string" + "name": "store_number", + "required": true, + "type": "string", + "x-example": "040890" } ], "produces": [ @@ -523717,7 +606405,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/substack.notesFeedTabsResponseDoc" + "$ref": "#/definitions/tacobell.storeDetailResponseDoc" } }, "400": { @@ -523726,6 +606414,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -523744,35 +606438,27 @@ "ApiKeyAuth": [] } ], - "summary": "List the Substack feed tabs", + "summary": "Get one Taco Bell restaurant's full record, including the whole week's hours and dayparts", "tags": [ - "Substack" + "TacoBell" ] } }, - "/substack/post": { + "/taco-bell/store-menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns one public post with the extended metadata the archive listing omits, including word count, every credited byline, and podcast audio details where the post has them. Post bodies are not returned.", - "operationId": "substack-post", + "description": "Returns one Taco Bell US restaurant's entire menu -- every category and item in one call, each with its price, calories, product and food type, image, and whether it is currently carried and displayed at THIS store. Where GET /taco-bell/menu returns one category's items from the national default catalog, this is store-scoped: some items are absent or hidden at some restaurants, and this is the only endpoint that shows that per store. Also returns the store's current happy-hour discount window, published nowhere else in this family. The response can be cached at the edge for up to 24 hours, so treat it as a recent snapshot of what the store carries rather than a live per-second signal; for a store's serving-time windows (breakfast vs. Balance Of Day, etc.) use GET /taco-bell/store instead. Store numbers come from GET /taco-bell/stores.", + "operationId": "taco-bell-store-menu", "parameters": [ { - "description": "Publication subdomain or custom domain", - "in": "query", - "name": "publication", - "required": true, - "type": "string", - "x-example": "semianalysis" - }, - { - "description": "Post slug, the trailing path segment of the post URL", + "description": "Taco Bell store number, from /taco-bell/stores", "in": "query", - "name": "slug", + "name": "store_number", "required": true, "type": "string", - "x-example": "koreas-trillion-dollar-sovereign" + "x-example": "040890" } ], "produces": [ @@ -523782,7 +606468,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/substack.postResponseDoc" + "$ref": "#/definitions/tacobell.storeMenuResponseDoc" } }, "400": { @@ -523815,33 +606501,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get one public Substack post", + "summary": "Get one Taco Bell restaurant's full live catalog in a single call", "tags": [ - "Substack" + "TacoBell" ] } }, - "/substack/publication": { + "/taco-bell/stores": { "get": { "consumes": [ "application/json" ], - "description": "Returns a publication's public profile and its complete subscription offering: every purchasable web plan with per-currency pricing, the separately priced App Store plans, per-tier benefit copy, and the toggles governing which tiers are sold. Identify the publication by name (a subdomain such as semianalysis, or a custom domain such as www.thefp.com) or by numeric publication_id -- exactly one is required. Prefer publication_id when you have it: it reads a compact document, while resolving by name has to parse the publication's full homepage.", - "operationId": "substack-publication", + "description": "Returns Taco Bell US restaurants near a latitude/longitude, ordered by distance. Each store carries its store number, full postal address with coordinates, phone, distance, open status, timezone, today's published opening and closing hours, and Taco Bell's own per-store capability flags (breakfast, drive-thru, delivery, mobile ordering, open late, pickup shelves, Live Mas Cafe, online). A coordinate with no Taco Bell nearby returns an empty list rather than an error.", + "operationId": "taco-bell-stores", "parameters": [ { - "description": "Publication subdomain or custom domain. Provide this or publication_id.", + "description": "Search center latitude", "in": "query", - "name": "publication", - "type": "string", - "x-example": "semianalysis" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 34.0522 }, { - "description": "Numeric publication id. Cheaper than resolving by name. Provide this or publication.", + "description": "Search center longitude", "in": "query", - "name": "publication_id", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -118.2437 + }, + { + "description": "Stores per page, 1-50 (default 10)", + "in": "query", + "name": "page_size", "type": "integer", - "x-example": 6349492 + "x-example": 10 + }, + { + "description": "0-based page index (default 0)", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -523851,7 +606553,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/substack.publicationResponseDoc" + "$ref": "#/definitions/tacobell.storesResponseDoc" } }, "400": { @@ -523884,34 +606586,102 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Substack publication and its subscription offering", + "summary": "Find Taco Bell restaurants near a location", "tags": [ - "Substack" + "TacoBell" ] } }, - "/substack/publication/contributors": { + "/target/categories": { "get": { - "consumes": [ + "description": "Lists Target's top-level category menu in `categories`, plus the grouped shop-all directory in `groups`. Each category has an `id` (the one used by `/target/category-products`), name, canonical URL and, when Target supplies one, an image URL. The response also gives `count` and `group_count`. Takes no parameters.", + "operationId": "target-categories", + "produces": [ "application/json" ], - "description": "Returns one page of the writers credited on a publication, ranked as Substack ranks them. Rows include each writer's handle, profile URL, and bestseller badge tier, so a publication can be fanned out into individual /substack/user lookups. Large publications return several hundred contributors on the first page.", - "operationId": "substack-publication-contributors", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/target.categoriesResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List all Target categories", + "tags": [ + "Target" + ] + } + }, + "/target/category-products": { + "get": { + "description": "Returns paginated products for any category id from target-categories. Each response also contains every available dynamic filter group and option. Pass selected option ids through filter_ids as a comma-separated list. The sort enum accepts `relevance`, `featured`, `price-low`, `price-high`, `rating`, `bestselling`, and `newest`.", + "operationId": "target-category-products", "parameters": [ { - "description": "Publication subdomain or custom domain", + "description": "Target category id", "in": "query", - "name": "publication", + "name": "category_id", "required": true, "type": "string", - "x-example": "www.thefp.com" + "x-example": "5q0ga" }, { - "default": 0, - "description": "Zero-based page", + "default": 1, + "description": "One-based page (1-50)", "in": "query", + "maximum": 50, + "minimum": 1, "name": "page", "type": "integer" + }, + { + "default": "featured", + "description": "Result order", + "enum": [ + "relevance", + "featured", + "price-low", + "price-high", + "rating", + "bestselling", + "newest" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": 2885, + "description": "Target store id used for pricing", + "in": "query", + "minimum": 1, + "name": "store_id", + "type": "integer" + }, + { + "description": "Comma-separated Target filter option ids", + "in": "query", + "name": "filter_ids", + "type": "string", + "x-example": "5tdv1,fwtfr" } ], "produces": [ @@ -523921,7 +606691,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/substack.contributorsResponseDoc" + "$ref": "#/definitions/target.categoryProductsResponseDoc" } }, "400": { @@ -523930,12 +606700,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -523954,60 +606718,45 @@ "ApiKeyAuth": [] } ], - "summary": "List a Substack publication's public contributors", + "summary": "Browse Target category products", "tags": [ - "Substack" + "Target" ] } }, - "/substack/publication/posts": { + "/target/filter-options": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of a publication's public post archive with title, subtitle, canonical URL, publish date, engagement counts, and whether each post is paywalled. search filters the publication's own posts full-text; a query with no matches returns an empty list rather than the unfiltered archive.", - "operationId": "substack-publication-posts", + "description": "Returns every dynamic filter group and option for either a product query or category. Provide exactly one of q or category_id. Pass currently selected option ids through filter_ids to obtain the remaining context-aware options.", + "operationId": "target-filter-options", "parameters": [ { - "description": "Publication subdomain or custom domain", + "description": "Product search query; mutually exclusive with category_id", "in": "query", - "name": "publication", - "required": true, + "name": "q", "type": "string", - "x-example": "semianalysis" + "x-example": "coffee" }, { - "description": "Full-text filter over the publication's own posts", + "description": "Target category id; mutually exclusive with q", "in": "query", - "name": "search", + "name": "category_id", "type": "string", - "x-example": "nvidia" - }, - { - "default": "new", - "description": "Archive ordering", - "enum": [ - "new", - "top", - "community" - ], - "in": "query", - "name": "sort", - "type": "string" + "x-example": "5q0ga" }, { - "default": 0, - "description": "Zero-based row offset", + "default": 2885, + "description": "Target store id used for pricing", "in": "query", - "name": "offset", + "minimum": 1, + "name": "store_id", "type": "integer" }, { - "default": 12, - "description": "Rows per page, 1-50", + "description": "Comma-separated selected Target filter option ids", "in": "query", - "name": "limit", - "type": "integer" + "name": "filter_ids", + "type": "string", + "x-example": "5tdv1,fwtfr" } ], "produces": [ @@ -524017,7 +606766,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/substack.postsResponseDoc" + "$ref": "#/definitions/target.filterOptionsResponseDoc" } }, "400": { @@ -524026,12 +606775,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -524050,27 +606793,35 @@ "ApiKeyAuth": [] } ], - "summary": "List a Substack publication's public post archive", + "summary": "List Target filter options", "tags": [ - "Substack" + "Target" ] } }, - "/substack/publication/recommendations": { + "/target/product": { "get": { "consumes": [ "application/json" ], - "description": "Returns the publications a given publication recommends to its own readers, as a publication-to-publication graph. Useful for discovering publications beyond the 675-per-category ceiling on /substack/category. publication_id is the numeric id returned by /substack/publication, /substack/category, or /substack/user.", - "operationId": "substack-publication-recommendations", + "description": "Returns product details for one Target item, including product content, images, price, rating, category, and availability flags for the selected store.", + "operationId": "target-product", "parameters": [ { - "description": "Numeric publication id", + "description": "Numeric Target item id (TCIN)", "in": "query", - "name": "publication_id", + "name": "tcin", "required": true, - "type": "integer", - "x-example": 6349492 + "type": "string", + "x-example": "12954151" + }, + { + "default": 2885, + "description": "Target store id used for pricing and availability", + "in": "query", + "minimum": 1, + "name": "store_id", + "type": "integer" } ], "produces": [ @@ -524080,7 +606831,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/substack.recommendationsResponseDoc" + "$ref": "#/definitions/target.productResponseDoc" } }, "400": { @@ -524113,46 +606864,40 @@ "ApiKeyAuth": [] } ], - "summary": "List the publications one Substack publication recommends", + "summary": "Get a Target product", "tags": [ - "Substack" + "Target" ] } }, - "/substack/search": { + "/target/questions": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches posts across all of Substack and returns the publications that also matched, unlike /substack/publication/posts which searches within a single publication. Set focus_publication_id to additionally receive that one publication's own matching posts in focused_posts alongside the site-wide results.", - "operationId": "substack-search", + "description": "Lists customer questions for a Target item given by its numeric `tcin`, each with its text, author, submission time, helpful votes and nested answers. `page` is zero-based and `per_page` runs 1 to 25. The response gives `total_pages` and `count` for paging.", + "operationId": "target-questions", "parameters": [ { - "description": "Search text", + "description": "Numeric Target item id", "in": "query", - "name": "query", + "name": "tcin", "required": true, "type": "string", - "x-example": "artificial intelligence" + "x-example": "91940750" }, { "default": 0, - "description": "Zero-based page, 20 posts per page", + "description": "Zero-based page", "in": "query", + "minimum": 0, "name": "page", "type": "integer" }, { - "description": "Numeric publication id whose own matching posts are returned in focused_posts", - "in": "query", - "name": "focus_publication_id", - "type": "integer", - "x-example": 6349492 - }, - { - "description": "Cap on focused_posts, 1-20. Requires focus_publication_id.", + "default": 25, + "description": "Questions per page", "in": "query", - "name": "focus_limit", + "maximum": 25, + "minimum": 1, + "name": "per_page", "type": "integer" } ], @@ -524163,7 +606908,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/substack.searchResponseDoc" + "$ref": "#/definitions/target.questionsResponseDoc" } }, "400": { @@ -524172,8 +606917,68 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Target product questions and answers", + "tags": [ + "Target" + ] + } + }, + "/target/reviews": { + "get": { + "description": "Lists written reviews for a Target item given by its numeric `tcin`. Each review has its rating, title, text, author, submission time, helpful votes, and verified and syndicated flags. `page` is zero-based and stops at 50; `per_page` runs 1 to 25. The response gives `total` and `total_pages`.", + "operationId": "target-reviews", + "parameters": [ + { + "description": "Numeric Target item id", + "in": "query", + "name": "tcin", + "required": true, + "type": "string", + "x-example": "91940750" + }, + { + "default": 0, + "description": "Zero-based page", + "in": "query", + "maximum": 50, + "minimum": 0, + "name": "page", + "type": "integer" + }, + { + "default": 25, + "description": "Reviews per page", + "in": "query", + "maximum": 25, + "minimum": 1, + "name": "per_page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/target.reviewsResponseDoc" + } + }, + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -524190,27 +606995,67 @@ "ApiKeyAuth": [] } ], - "summary": "Search posts and publications across Substack", + "summary": "List Target product reviews", "tags": [ - "Substack" + "Target" ] } }, - "/substack/user": { + "/target/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns one public Substack profile: identity, the publications the writer contributes to, their publicly visible subscriptions, and every subscriber signal Substack publishes. total is opt-in per writer and rounded to roughly three significant figures; when a writer hides it, total_hidden is true and total is 0, which must not be read as zero subscribers. paid_rough, paid_rough_int, and paid_tier are buckets - no exact paid subscriber count is published anywhere. follower_count is exact but counts followers, not subscribers.", - "operationId": "substack-user", + "description": "Searches Target products and returns products plus every filter group and option available for the current result set. Pass option ids back through filter_ids as a comma-separated list. A zero total with an empty products list is a valid no-results response. The sort enum accepts `relevance`, `featured`, `price-low`, `price-high`, `rating`, `bestselling`, and `newest`.", + "operationId": "target-search", "parameters": [ { - "description": "Substack profile handle", + "description": "Product search query", "in": "query", - "name": "handle", + "name": "q", "required": true, "type": "string", - "x-example": "pragmaticengineer" + "x-example": "coffee" + }, + { + "default": 1, + "description": "One-based page (1-50)", + "in": "query", + "maximum": 50, + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "default": "relevance", + "description": "Result order", + "enum": [ + "relevance", + "featured", + "price-low", + "price-high", + "rating", + "bestselling", + "newest" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": 2885, + "description": "Target store id used for pricing", + "in": "query", + "minimum": 1, + "name": "store_id", + "type": "integer" + }, + { + "description": "Comma-separated Target filter option ids", + "in": "query", + "name": "filter_ids", + "type": "string", + "x-example": "5tdv1,fwtfr" } ], "produces": [ @@ -524220,7 +607065,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/substack.userResponseDoc" + "$ref": "#/definitions/target.searchResponseDoc" } }, "400": { @@ -524229,12 +607074,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -524253,40 +607092,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get a public Substack writer profile", + "summary": "Search Target products", "tags": [ - "Substack" + "Target" ] } }, - "/substack/user/activity": { + "/target/stores": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of a user's public activity: the notes they wrote, posts they published, and items they liked, replied to, or restacked. types is an optional comma-separated filter accepting `note`, `post`, `like`, `replies` and `restack`; omit it for the default mixed feed. Each item's kind is the upstream's own finer-grained label, so filtering on `restack` returns both `comment_restack` and `post_restack` items. Pagination is cursor-based.", - "operationId": "substack-user-activity", + "description": "Returns Target's physical stores near a ZIP code, a free-text \"city, state\", or a \"latitude,longitude\" pair, including each store's store_id, status, distance, phone, address, service list, time zone, and two weeks of daily opening hours. Use the returned store_id values with the store_id parameter on target-search, target-category-products, target-filter-options, and target-product.", + "operationId": "target-stores", "parameters": [ { - "description": "Numeric user id from the user endpoint", + "description": "ZIP code, city/state, or latitude,longitude", "in": "query", - "name": "user_id", + "name": "place", "required": true, - "type": "integer", - "x-example": 49731969 + "type": "string", + "x-example": "95014" }, { - "description": "Comma-separated activity kinds: note, post, like, replies, restack", + "default": 20, + "description": "Maximum stores to return (1-20)", "in": "query", - "name": "types", - "type": "string", - "x-example": "note,post" + "maximum": 20, + "minimum": 1, + "name": "limit", + "type": "integer" }, { - "description": "Opaque cursor from a previous response's next_cursor", + "default": 100, + "description": "Search radius in miles (1-5000)", "in": "query", - "name": "cursor", - "type": "string" + "maximum": 5000, + "minimum": 1, + "name": "within", + "type": "integer" } ], "produces": [ @@ -524296,7 +607137,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/substack.userActivityResponseDoc" + "$ref": "#/definitions/target.storesResponseDoc" } }, "400": { @@ -524329,39 +607170,33 @@ "ApiKeyAuth": [] } ], - "summary": "List a Substack user's public activity", + "summary": "Find Target stores near a location", "tags": [ - "Substack" + "Target" ] } }, - "/substack/user/connections": { + "/tcgplayer/filters": { "get": { "consumes": [ "application/json" ], - "description": "Returns one of a user's public connection lists. Each entry is a full profile in the same shape as /substack/user, subscriber signals included. user_id is the numeric id returned by /substack/user. The upstream returns a bounded preview of each list rather than the complete membership.", - "operationId": "substack-user-connections", + "description": "Returns the values the tcgplayer-sales filters accept for one TCGplayer product line: the printings (variants such as Normal, Foil, Holofoil or 1st Edition), the six conditions, the languages and the listing types, each with TCGplayer's id. Printings belong to one product line (Pokemon has Reverse Holofoil, Magic has Foil), while languages are shared. Give product_line (a url_name from tcgplayer-product-lines) or id (a TCGplayer product id, which uses that product's line). An unknown product line returns invalid parameters and an unknown product returns not found.", + "operationId": "tcgplayer-filters", "parameters": [ { - "description": "Numeric user id from /substack/user", + "description": "Product line url_name from tcgplayer-product-lines; give this or id", "in": "query", - "name": "user_id", - "required": true, - "type": "integer", - "x-example": 49731969 + "name": "product_line", + "type": "string", + "x-example": "pokemon" }, { - "default": "followers", - "description": "Which list to read", - "enum": [ - "followers", - "following", - "subscribers" - ], + "description": "TCGplayer product id from tcgplayer-search; give this or product_line", "in": "query", - "name": "list", - "type": "string" + "name": "id", + "type": "integer", + "x-example": 684332 } ], "produces": [ @@ -524371,7 +607206,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/substack.userConnectionsResponseDoc" + "$ref": "#/definitions/tcgplayer.filtersResponseDoc" } }, "400": { @@ -524404,34 +607239,91 @@ "ApiKeyAuth": [] } ], - "summary": "List a Substack user's followers, following, or subscribers", + "summary": "List the printing, condition and language filters of a TCGplayer product line", "tags": [ - "Substack" + "TCGplayer" ] } }, - "/substack/user/search": { + "/tcgplayer/listings": { "get": { "consumes": [ "application/json" ], - "description": "Searches public Substack profiles by name or handle. Each result carries the same subscriber signals as /substack/user, so a search enumerates writers without a second lookup per profile. Returns 20 profiles per page; use has_more rather than assuming a fixed depth, since result counts vary by query.", - "operationId": "substack-user-search", + "description": "Returns one page of the current seller listings for a TCGplayer product: seller storefront name, rating and sales volume, condition, printing, language, quantity, price, shipping price and seller location. Filter by condition, printing and language, and sort by price or price with shipping.", + "operationId": "tcgplayer-listings", "parameters": [ { - "description": "Search text matched against profile names and handles", + "description": "TCGplayer product id from tcgplayer-search", "in": "query", - "name": "query", + "name": "id", "required": true, + "type": "integer", + "x-example": 243172 + }, + { + "description": "Condition filter", + "enum": [ + "near-mint", + "lightly-played", + "moderately-played", + "heavily-played", + "damaged" + ], + "in": "query", + "name": "condition", "type": "string", - "x-example": "pragmatic engineer" + "x-example": "near-mint" }, { - "default": 0, - "description": "Zero-based page", + "description": "Exact printing label such as Normal or Foil; see facets.printings", "in": "query", - "name": "page", - "type": "integer" + "name": "printing", + "type": "string", + "x-example": "Foil" + }, + { + "description": "Exact language label such as English; see facets.languages", + "in": "query", + "name": "language", + "type": "string", + "x-example": "English" + }, + { + "description": "Sort field; omit for TCGplayer's own order", + "enum": [ + "price", + "price-with-shipping" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "price" + }, + { + "description": "Sort direction, needs sort; default asc", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "order", + "type": "string", + "x-example": "asc" + }, + { + "description": "Page size, 1 to 50; defaults to 24", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 5 + }, + { + "description": "Listings to skip; offset plus limit must be 9999 or less", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -524441,7 +607333,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/substack.userSearchResponseDoc" + "$ref": "#/definitions/tcgplayer.listingsResponseDoc" } }, "400": { @@ -524450,6 +607342,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -524468,34 +607366,41 @@ "ApiKeyAuth": [] } ], - "summary": "Search public Substack writer profiles", + "summary": "List the sellers offering a TCGplayer product", "tags": [ - "Substack" + "TCGplayer" ] } }, - "/subway/available-times": { + "/tcgplayer/price-guide": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Subway store's forward-looking pickup schedule -- every time slot the store is currently accepting orders for, as RFC3339 UTC instants, earliest first. Slots begin at the store's next orderable time (roughly half an hour out, not immediately) and run through closing, so the list reflects real remaining capacity for today rather than the store's advertised opening hours. Store IDs come from a GET /subway/store or GET /subway/nearby result's store_id field. A store that is closed or past its last slot for the day returns an empty slots array, which is a valid answer rather than an error. interval_minutes reports the spacing between consecutive slots as measured from the response itself.", - "operationId": "subway-available-times", + "description": "Returns TCGplayer's price guide for one set, one row per card, condition and printing: card id, name, collector number, rarity, condition, printing, language, low price, market price and units sold. Page through a whole set (up to 500 rows per call) instead of fetching each card; the set_id comes from tcgplayer-sets.", + "operationId": "tcgplayer-price-guide", "parameters": [ { - "description": "Store ID from a /subway/store or /subway/nearby result's store_id", + "description": "Numeric set id from tcgplayer-sets (the id field)", "in": "query", - "name": "store_id", + "name": "set_id", "required": true, - "type": "string", - "x-example": "75376-0" + "type": "integer", + "x-example": 604 }, { - "description": "Maximum slots to return (1-200). Defaults to every slot the store offers.", + "description": "Page size, 1 to 500; defaults to 100", "in": "query", "name": "limit", "type": "integer", - "x-example": 20 + "x-example": 100 + }, + { + "description": "Rows to skip; use the previous response's next_offset", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -524505,7 +607410,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/subway.availableTimesResponseDoc" + "$ref": "#/definitions/tcgplayer.priceGuideResponseDoc" } }, "400": { @@ -524538,34 +607443,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Subway store's available pickup times", + "summary": "Get TCGplayer's price guide for a whole set", "tags": [ - "Subway" + "TCGplayer" ] } }, - "/subway/combos": { + "/tcgplayer/price-history": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Subway store's bundle and combo categories with the price ranges they advertise -- min_bundled_price (cheapest as a bundle) and a_la_carte_price (cheapest bought separately). Unlike GET /subway/menu, which is US-only, this works in other markets: confirmed against US, GB and DE stores. It is NOT an itemised menu -- the upstream route behind it carries categories and prices only, with no individual products, no nutrition panels and no allergen disclosures. Use GET /subway/menu for a full itemised menu where it is available. A store with no bundles configured returns an empty categories array, which is a valid answer rather than an error. Store IDs come from a GET /subway/store or GET /subway/nearby result's store_id field.", - "operationId": "subway-combos", + "description": "Returns a TCGplayer product's price history over a month, quarter, half year or year, per condition, printing and language: market price, quantity sold, transaction count and low/high sale price for each period, plus the average daily sales volume.", + "operationId": "tcgplayer-price-history", "parameters": [ { - "description": "Store ID from a /subway/store or /subway/nearby result's store_id", + "description": "TCGplayer product id from tcgplayer-search", "in": "query", - "name": "store_id", + "name": "id", "required": true, - "type": "string", - "x-example": "50916-0" + "type": "integer", + "x-example": 42382 }, { - "description": "Preferred translation culture for display names, e.g. en-US, en-GB, de-DE. Falls back to the category's default name.", + "description": "History window; defaults to quarter", + "enum": [ + "month", + "quarter", + "semi-annual", + "annual" + ], "in": "query", - "name": "culture", + "name": "range", "type": "string", - "x-example": "en-GB" + "x-example": "quarter" } ], "produces": [ @@ -524575,7 +607486,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/subway.combosResponseDoc" + "$ref": "#/definitions/tcgplayer.priceHistoryResponseDoc" } }, "400": { @@ -524584,12 +607495,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -524608,27 +607513,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Subway store's bundle/combo categories", + "summary": "Get a TCGplayer product's price history", "tags": [ - "Subway" + "TCGplayer" ] } }, - "/subway/menu": { + "/tcgplayer/product": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Subway store's complete menu: every category, every product, and for each purchasable size (Footlong, 6-inch, etc.) its price, full nutrition panel (calories, fat, sodium, protein and more) and allergen disclosures. Store IDs come from a GET /subway/store result's store_id field. This endpoint currently covers US stores only: the menu is not available for non-US stores, which return 404 -- see GET /subway/combos for the bundle/combo categories that are available in other markets. Categories carry is_main_category: true for human-browsable menu sections (Sandwiches, Drinks, Salads, ...) and false for Subway's own internal build/customization groupings, which are included for completeness but are not meant to be shown as menu sections on their own.", - "operationId": "subway-menu", + "description": "Returns one TCGplayer product in full: name, product line, set, rarity, card number, card text, attributes, the market, lowest and median prices, listing and seller counts, every purchasable condition/variant/language SKU, and TCGplayer's market and buylist price per printing.", + "operationId": "tcgplayer-product", "parameters": [ { - "description": "Store ID from a /subway/store result's store_id", + "description": "TCGplayer product id (the number in tcgplayer.com/product/), from tcgplayer-search", "in": "query", - "name": "store_id", + "name": "id", "required": true, - "type": "string", - "x-example": "75376-0" + "type": "integer", + "x-example": 243172 } ], "produces": [ @@ -524638,7 +607543,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/subway.menuResponseDoc" + "$ref": "#/definitions/tcgplayer.productResponseDoc" } }, "400": { @@ -524671,67 +607576,115 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Subway store's full menu", + "summary": "Get a TCGplayer product's detail and price points", "tags": [ - "Subway" + "TCGplayer" ] } }, - "/subway/nearby": { + "/tcgplayer/product-lines": { "get": { "consumes": [ "application/json" ], - "description": "Returns Subway stores nearest first to a coordinate or a free-text address/city/ZIP, with live open/closed status, payment methods, catering link, and feature flags. This is the proximity search GET /subway/sitemap cannot do directly -- the sitemap enumerates the whole world for bulk scraping, this answers \"what is near this point\" with distance and live attributes the sitemap/store locator does not carry. Each store's store_id is the same value GET /subway/menu takes, and can be passed back here as store_id to re-read one store's live attributes directly.", - "operationId": "subway-nearby", - "parameters": [ - { - "description": "Search center latitude. Set together with longitude, or set query or store_id instead -- exactly one search mode.", - "in": "query", - "name": "latitude", - "type": "number", - "x-example": 34.0549076 + "description": "Lists TCGplayer's product lines (games and product families such as Pokemon, Magic: The Gathering, Yu-Gi-Oh!, One Piece and Lorcana): id, name and the url_name that tcgplayer-search and tcgplayer-sets take as product_line.", + "operationId": "tcgplayer-product-lines", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/tcgplayer.productLinesResponseDoc" + } }, - { - "description": "Search center longitude.", - "in": "query", - "name": "longitude", - "type": "number", - "x-example": -118.242643 + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Free-text address, city or ZIP to search near. Alternative to latitude/longitude and store_id.", + "ApiKeyAuth": [] + } + ], + "summary": "List TCGplayer product lines", + "tags": [ + "TCGplayer" + ] + } + }, + "/tcgplayer/sales": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the five most recent completed sales of a TCGplayer product: condition, printing, language, quantity, sale price, shipping price and order time. Optionally restrict to one condition (near-mint, lightly-played, moderately-played, heavily-played, damaged or unopened), one printing (variant such as Normal, Foil or Reverse Holofoil), one language (such as English or Japanese) and whether the listing had photos. The printing and language values a product accepts come from tcgplayer-filters; an unlisted value returns invalid parameters. A variant or language filter makes one extra call to read the product line's filter values.", + "operationId": "tcgplayer-sales", + "parameters": [ + { + "description": "TCGplayer product id from tcgplayer-search", "in": "query", - "name": "query", - "type": "string", - "x-example": "Los Angeles, CA" + "name": "id", + "required": true, + "type": "integer", + "x-example": 42382 }, { - "description": "Look up one store directly by its store_id, from GET /subway/store or a prior /subway/nearby result. Alternative to latitude/longitude and query.", + "description": "Condition filter", + "enum": [ + "near-mint", + "lightly-played", + "moderately-played", + "heavily-played", + "damaged", + "unopened" + ], "in": "query", - "name": "store_id", + "name": "condition", "type": "string", - "x-example": "75376-0" + "x-example": "near-mint" }, { - "description": "Maximum stores to return, 1-20 (default 10)", + "description": "Printing label of the product's product line, such as Normal, Foil, Holofoil or Reverse Holofoil; see tcgplayer-filters", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "name": "variant", + "type": "string", + "x-example": "Reverse Holofoil" }, { - "description": "Opaque pagination cursor from a previous response's next_offset", + "description": "Language label: English, Chinese (S), Chinese (T), French, German, Italian, Japanese, Korean, Portuguese, Russian or Spanish, limited to the languages of the product's line; see tcgplayer-filters", "in": "query", - "name": "offset", - "type": "string" + "name": "language", + "type": "string", + "x-example": "Japanese" }, { - "description": "Comma-separated. Restricts results to stores with ALL listed features. Allowed values: HAS_BREAKFAST, IS_REMOTEORDER_ACCEPTED, HAS_HALAL, HAS_DRIVETHROUGH, HAS_CATERING, HAS_CURBSIDE, IS_OPERATING.", + "description": "Listing type filter; default all", + "enum": [ + "all", + "with-photos", + "without-photos" + ], "in": "query", - "name": "features", + "name": "listing_type", "type": "string", - "x-example": "HAS_BREAKFAST,IS_REMOTEORDER_ACCEPTED" + "x-example": "all" } ], "produces": [ @@ -524741,7 +607694,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/subway.nearbyResponseDoc" + "$ref": "#/definitions/tcgplayer.salesResponseDoc" } }, "400": { @@ -524750,6 +607703,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -524768,40 +607727,116 @@ "ApiKeyAuth": [] } ], - "summary": "Search Subway stores near a coordinate or address", + "summary": "Get a TCGplayer product's most recent sales", "tags": [ - "Subway" + "TCGplayer" ] } }, - "/subway/sitemap": { + "/tcgplayer/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of Subway's sitemap-declared store index -- 22,700+ URLs across 2 shards at time of writing, covering a country/region/city/street tree worldwide. This is the cheapest way to enumerate Subway locations. Each entry carries its URL, the locator path GET /subway/store takes, and a depth: the deepest entries are store pages, shallower ones are country, region and city directory pages listed in the same sitemap. A page past the end returns an empty list rather than an error, so a caller can walk to exhaustion.", - "operationId": "subway-sitemap", + "description": "Searches TCGplayer's catalog of trading-card and collectible products (Pokemon, Magic, Yu-Gi-Oh!, One Piece, Lorcana and about 70 other product lines) and returns one page of matches: product id, name, set, rarity, card number, market, lowest and median prices, listing count, links and filter facets. Filter by product line, set, product type, rarity, card type and price range, and sort by price, listings, sales or name.", + "operationId": "tcgplayer-search", "parameters": [ { - "description": "Sitemap shard index (default 0). shard_count in the response says how many exist.", + "description": "Search text, up to 100 characters; optional when product_line is set", "in": "query", - "name": "shard", - "type": "integer", - "x-example": 0 + "name": "q", + "type": "string", + "x-example": "charizard" }, { - "description": "1-based page within the shard (default 1)", + "description": "Product line url_name from tcgplayer-product-lines, for example pokemon, magic, yugioh", "in": "query", - "name": "page", + "name": "product_line", + "type": "string", + "x-example": "pokemon" + }, + { + "description": "Set url_name from tcgplayer-sets; needs product_line", + "in": "query", + "name": "set", + "type": "string", + "x-example": "base-set" + }, + { + "description": "Exact product type label such as Cards or Booster Box; see facets.product_types", + "in": "query", + "name": "product_type", + "type": "string", + "x-example": "Cards" + }, + { + "description": "Exact rarity label such as Holo Rare; see facets.rarities", + "in": "query", + "name": "rarity", + "type": "string", + "x-example": "Holo Rare" + }, + { + "description": "Exact card type label such as Pokemon; see facets.card_types", + "in": "query", + "name": "card_type", + "type": "string", + "x-example": "Pokemon" + }, + { + "description": "Minimum market price in US dollars", + "in": "query", + "name": "min_price", + "type": "number", + "x-example": 10 + }, + { + "description": "Maximum market price in US dollars", + "in": "query", + "name": "max_price", + "type": "number", + "x-example": 500 + }, + { + "description": "Sort field; omit for relevance", + "enum": [ + "market-price", + "lowest-price", + "lowest-price-with-shipping", + "median-price", + "listings", + "sales", + "product-name" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "market-price" + }, + { + "description": "Sort direction, needs sort; default desc (asc for product-name)", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "order", + "type": "string", + "x-example": "desc" + }, + { + "description": "Page size, 1 to 50; defaults to 24", + "in": "query", + "name": "limit", "type": "integer", - "x-example": 1 + "x-example": 5 }, { - "description": "Entries per page, 1-500 (default 100)", + "description": "Results to skip; offset plus limit must be 9999 or less", "in": "query", - "name": "page_size", + "name": "offset", "type": "integer", - "x-example": 100 + "x-example": 0 } ], "produces": [ @@ -524811,7 +607846,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/subway.sitemapResponseDoc" + "$ref": "#/definitions/tcgplayer.searchResponseDoc" } }, "400": { @@ -524820,12 +607855,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -524844,27 +607873,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Subway's global store-URL index", + "summary": "Search TCGplayer trading-card products", "tags": [ - "Subway" + "TCGplayer" ] } }, - "/subway/store": { + "/tcgplayer/sets": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Subway store's detail: address, coordinates, phone (display and E.164), opening hours, and the locator's own entity profile -- IANA timezone, Google Place ID and CID for joining to Google Maps data, franchise number, price range, published services and meal types, and explicit online-ordering/catering/drive-through flags. Boolean flags are omitted entirely when the locator does not publish them, so an absent flag is not a false one. open reflects the location's published status (a store flagged closed long-term), which is distinct from whether it is currently within its opening hours. store_id is the value GET /subway/menu and GET /subway/available-times take. Paths come from a GET /subway/sitemap entry.", - "operationId": "subway-store", + "description": "Lists the active sets (expansions) of one TCGplayer product line, newest first: name, the url_name that tcgplayer-search takes as set, abbreviation and release date.", + "operationId": "tcgplayer-sets", "parameters": [ { - "description": "Store path from a /subway/sitemap entry", + "description": "Product line url_name from tcgplayer-product-lines", "in": "query", - "name": "path", + "name": "product_line", "required": true, "type": "string", - "x-example": "united-states/ny/new-york/1-penn-plaza" + "x-example": "pokemon" } ], "produces": [ @@ -524874,7 +607903,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/subway.storeResponseDoc" + "$ref": "#/definitions/tcgplayer.setsResponseDoc" } }, "400": { @@ -524907,24 +607936,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Subway store's detail", + "summary": "List the sets of a TCGplayer product line", "tags": [ - "Subway" + "TCGplayer" ] } }, - "/sun/article": { + "/techcrunch/article": { "get": { - "description": "Returns one The Sun article by `url`, a canonical HTTPS article link. The response has the title, description, section, authors, publication and update times, lead image URL, body `paragraphs` and a `paywalled` flag. Subscriber-only or blocked pages return an error instead.", - "operationId": "sun-article", + "description": "Returns public TechCrunch article metadata (title, author(s), published/updated dates, dek, section, lead image) and body paragraphs from a canonical article URL.", + "operationId": "techcrunch-article", "parameters": [ { - "description": "Canonical The Sun article URL", + "description": "Canonical TechCrunch article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.thesun.co.uk/news/12345678/example/" + "x-example": "https://techcrunch.com/2026/09/22/discords-age-verification-era-is-upon-us-despite-community-backlash/" } ], "produces": [ @@ -524961,24 +607990,31 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Sun article content", + "summary": "Get TechCrunch article content", "tags": [ - "The Sun" + "TechCrunch" ] } }, - "/sun/author": { + "/techcrunch/author": { "get": { - "description": "Returns a Sun author's profile by `url`, a canonical `thesun.co.uk/author//` link: name, job title, bio and recent articles with title, URL, excerpt, category and category URL. `job_title` is often empty because most Sun bylines carry only a name and bio.", - "operationId": "sun-author", + "description": "Returns one TechCrunch staff writer or contributor's public profile: name, job title, headshot, biography, social links, and one page of their recent articles.", + "operationId": "techcrunch-author", "parameters": [ { - "description": "Canonical The Sun author URL", + "description": "Canonical techcrunch.com/author/ URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.thesun.co.uk/author/becky-pemberton/" + "x-example": "https://techcrunch.com/author/amanda-silberling/" + }, + { + "description": "1-based page of recent articles to return; defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -524988,7 +608024,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sunAuthorResponseDoc" + "$ref": "#/definitions/publicnews.techCrunchAuthorResponseDoc" } }, "400": { @@ -525015,36 +608051,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Sun author profile", + "summary": "Get a TechCrunch author profile", "tags": [ - "The Sun" + "TechCrunch" ] } }, - "/sun/headlines": { + "/techcrunch/headlines": { "get": { - "description": "Returns the current headlines for one The Sun section. `section` is required and takes one of `news`, `politics`, `royal-family`, `sport`, `showbiz`, `money`, `tech`, `fabulous`, `travel` or `health`. Every item has its title and URL. The `news` section also carries summary, author, publication time and image when the outlet provides them.", - "operationId": "sun-headlines", + "description": "Returns the latest TechCrunch stories for one category. `section` is required and takes one of 22 slugs such as `artificial-intelligence`, `startups`, `venture`, `security`, `fintech`, `space` or `cryptocurrency`. Each item has its title, URL, summary, publication time and author.", + "operationId": "techcrunch-headlines", "parameters": [ { - "description": "The Sun section slug", + "description": "TechCrunch category slug", "enum": [ - "news", - "politics", - "royal-family", - "sport", - "showbiz", - "money", - "tech", - "fabulous", - "travel", - "health" + "apps", + "artificial-intelligence", + "biotech-health", + "climate", + "commerce", + "cryptocurrency", + "enterprise", + "fintech", + "fundraising", + "gadgets", + "gaming", + "government-policy", + "hardware", + "media-entertainment", + "privacy", + "robotics", + "security", + "social", + "space", + "startups", + "transportation", + "venture" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "news" + "x-example": "apps" } ], "produces": [ @@ -525075,16 +608123,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Sun section headlines", + "summary": "Get TechCrunch category headlines", "tags": [ - "The Sun" + "TechCrunch" ] } }, - "/sun/news": { + "/techcrunch/news": { "get": { - "description": "Returns the current top stories from The Sun. It takes no parameters. Each item has its title, URL and, where available, a summary, author, publication time, image URL and `type`. Use the headlines endpoint to read one section.", - "operationId": "sun-news", + "description": "Returns the latest TechCrunch top stories from its home feed. Takes no parameters. Each item has its title, URL, summary, publication time and author name.", + "operationId": "techcrunch-news", "produces": [ "application/json" ], @@ -525095,6 +608143,12 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -525107,16 +608161,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Sun top stories", + "summary": "Get TechCrunch top stories", "tags": [ - "The Sun" + "TechCrunch" ] } }, - "/sun/sections": { + "/techcrunch/sections": { "get": { - "description": "Lists the The Sun sections that the headlines endpoint accepts, such as `news`, `politics`, `royal-family`, `sport`, `showbiz`, `money`, `tech`, `fabulous`, `travel` and `health`. Each entry has a `slug`, a display `name` and a section `url`.", - "operationId": "sun-sections", + "description": "Lists the 22 TechCrunch categories that `techcrunch-headlines` accepts, taken from the site's primary navigation dropdown. Each entry has a stable `slug`, a display `name` and the category's feed `url`. For example, `artificial-intelligence` is named AI.", + "operationId": "techcrunch-sections", "produces": [ "application/json" ], @@ -525133,35 +608187,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Sun sections", + "summary": "Get TechCrunch categories", "tags": [ - "The Sun" + "TechCrunch" ] } }, - "/swiggy/collections": { + "/techradar/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the curated dish/cuisine collections Swiggy's own homepage surfaces for a latitude/longitude (e.g. \"Idli\", \"Biryani\", \"Dosa\"). Each collection's id is the value /swiggy/search's collection_id param takes to browse restaurants within it. The response also carries is_serviceable, which says whether Swiggy delivers to the requested coordinates at all: false means the coordinates are outside Swiggy's delivery coverage, so the empty collections list is a coverage answer rather than a location that simply has no curated collections.", - "operationId": "swiggy-collections", + "description": "Returns a TechRadar article by canonical `url` on `techradar.com`: title, description, section, authors, publication and update times, lead image, the body `paragraphs` and a `paywalled` flag.", + "operationId": "techradar-article", "parameters": [ { - "description": "Search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 12.9716 - }, - { - "description": "Search center longitude", + "description": "Canonical TechRadar article URL", "in": "query", - "name": "longitude", + "name": "url", "required": true, - "type": "number", - "x-example": 77.5946 + "type": "string", + "x-example": "https://www.techradar.com/audio/wireless-headphones/sonos-ace-ultra-review" } ], "produces": [ @@ -525171,7 +608214,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/swiggy.collectionsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -525180,6 +608223,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -525192,43 +608241,37 @@ "ApiKeyAuth": [] } ], - "summary": "List Swiggy's curated collections for a location", + "summary": "Get TechRadar article content", "tags": [ - "Swiggy" + "TechRadar" ] } }, - "/swiggy/restaurant": { + "/techradar/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Swiggy restaurant's detail by id: name, city, area, address, postal code, coordinates, phone, cuisines, cost for two, rating and total rating count, delivery time, weekly opening hours with the current open/closed callout, plus the promotions Swiggy currently shows on that restaurant's page (headline discount, conditions, and coupon code when one is needed). Swiggy has no lighter restaurant-detail-only source -- this reads the same upstream as /swiggy/restaurant/menu, just without the menu items.", - "operationId": "swiggy-restaurant", + "description": "Returns a TechRadar author's profile, looked up by `slug` (for example `tom-power`) or canonical `url`, which may end in `/page/`; exactly one is required. `page` (1-based, default 1) overrides any page in `url`. The response has the name, `job_title`, biography, social links, one page of articles and `has_next_page`.", + "operationId": "techradar-author", "parameters": [ { - "description": "Restaurant id, from /swiggy/search's id field", + "description": "Author slug, e.g. tom-power", "in": "query", - "name": "restaurant_id", - "required": true, + "name": "slug", "type": "string", - "x-example": "5938" + "x-example": "tom-power" }, { - "description": "Caller latitude (required by Swiggy's own menu API)", + "description": "Canonical techradar.com/author/ URL, optionally with a /page/ segment; alternative to slug", "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 12.9716 + "name": "url", + "type": "string", + "x-example": "https://www.techradar.com/author/tom-power" }, { - "description": "Caller longitude (required by Swiggy's own menu API)", + "default": 1, + "description": "1-based page number; overrides any page number in url", "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": 77.5946 + "name": "page", + "type": "integer" } ], "produces": [ @@ -525238,7 +608281,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/swiggy.restaurantResponseDoc" + "$ref": "#/definitions/publicnews.techradarAuthorResponseDoc" } }, "400": { @@ -525247,6 +608290,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -525259,43 +608308,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Swiggy restaurant's detail", + "summary": "Get a TechRadar author profile", "tags": [ - "Swiggy" + "TechRadar" ] } }, - "/swiggy/restaurant/menu": { + "/techradar/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one restaurant's full menu grouped into categories, plus its restaurant summary. Every item carries a name, description, category, price, discounted_price when currently discounted, veg/non-veg flag, stock status, an image, and Swiggy's own per-dish rating and review count where it carries one. A category nested under a parent group on the live site (e.g. \"Whopper\" under \"Burgers, Wraps & Tacos\") is flattened to one level: its title is the parent's, with subcategory set to its own name. The response also carries the restaurant's current promotions in offers, the same block /swiggy/restaurant returns.", - "operationId": "swiggy-restaurant-menu", + "description": "Returns the latest TechRadar stories for one section hub. `section` is required and takes one of 25 slugs such as `computing`, `phones`, `audio`, `gaming`, `deals`, `reviews`, `news` or `vpn`. Each item has its title, URL, summary, publication time, author and image.", + "operationId": "techradar-headlines", "parameters": [ { - "description": "Restaurant id, from /swiggy/search's id field", + "description": "TechRadar section slug", + "enum": [ + "ai-platforms-assistants", + "audio", + "best", + "cameras", + "computing", + "deals", + "gaming", + "health-fitness", + "home", + "how-to", + "how-to-watch", + "news", + "opinion", + "phones", + "pro", + "reviews", + "seasonal-sales", + "streaming", + "tablets", + "tech", + "tech-events", + "televisions", + "vehicle-tech", + "versus", + "vpn" + ], "in": "query", - "name": "restaurant_id", + "name": "section", "required": true, "type": "string", - "x-example": "5938" - }, - { - "description": "Caller latitude (required by Swiggy's own menu API)", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 12.9716 - }, - { - "description": "Caller longitude (required by Swiggy's own menu API)", - "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": 77.5946 + "x-example": "ai-platforms-assistants" } ], "produces": [ @@ -525305,7 +608362,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/swiggy.menuResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -525326,103 +608383,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Swiggy restaurant's menu with prices", + "summary": "Get TechRadar section headlines", "tags": [ - "Swiggy" + "TechRadar" ] } }, - "/swiggy/search": { + "/techradar/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns restaurants delivering to a latitude/longitude, optionally filtered by a keyword or browsed within a curated collection. With no query and no collection_id this browses the nearby-restaurant listing; with a query it runs a keyword search across restaurant names, cuisines, and dishes; with a collection_id (from /swiggy/collections) it browses restaurants within that curated collection. query and collection_id are mutually exclusive. Keyword search has two result tabs, selected with tab: dish (the default) returns restaurants that serve a matching dish, each with the matching dishes, their prices, and Swiggy's own per-dish rating where it has one, in a dishes array; restaurant returns restaurants whose own name or cuisine matches, a wider set with no dishes. tab, veg, min_rating and offers are only valid together with query. sort works with either query (relevance, delivery_time, rating) or collection_id (those three plus cost_low_to_high and cost_high_to_low), and is rejected on a plain nearby browse. Each restaurant carries its id (the value the restaurant and menu endpoints take), name, cuisines, cost for two, rating, delivery time, open/closed status, a hero image, and, where one is shown, an external_rating block with the third-party aggregate score, count, and source. Where the result card advertises a promotion it also carries offers, the same title/description/tag shape /swiggy/restaurant returns (a listing card never carries a coupon code, and a card showing both a discount and a separate free-delivery benefit returns them as two entries). is_promoted is present and true only for a result Swiggy itself labels a sponsored placement rather than an organic one. unavailable_message is present only when Swiggy says the restaurant cannot currently be ordered from and carries its own reason; it is not the inverse of is_open, since Swiggy reports a restaurant as open while still refusing orders for the requested location. A plain nearby browse also returns is_serviceable, which says whether Swiggy delivers to the requested coordinates at all: false means the coordinates are outside Swiggy's delivery coverage, so the empty restaurants list is a coverage answer rather than a no-matches answer, while an empty list without the field means no matches in a served area. It is omitted on keyword search and on a collection_id browse, neither of which carries Swiggy's own coverage marker.", - "operationId": "swiggy-search", - "parameters": [ - { - "description": "Search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 12.9716 - }, - { - "description": "Search center longitude", - "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": 77.5946 - }, - { - "description": "Optional keyword to search restaurants and dishes by, at least 2 characters. Mutually exclusive with collection_id.", - "in": "query", - "name": "query", - "type": "string", - "x-example": "pizza" - }, - { - "description": "Optional curated collection id from /swiggy/collections's id field. Browses restaurants within that collection instead of the plain nearby listing. Mutually exclusive with query.", - "in": "query", - "name": "collection_id", - "type": "string", - "x-example": "80440" - }, - { - "description": "Optional sort order. With query: relevance, delivery_time, rating. With collection_id: those three plus cost_low_to_high and cost_high_to_low. Not valid on a plain nearby browse.", - "enum": [ - "relevance", - "delivery_time", - "rating", - "cost_low_to_high", - "cost_high_to_low" - ], - "in": "query", - "name": "sort", - "type": "string", - "x-example": "rating" - }, - { - "description": "Opaque pagination cursor from a prior response's next_offset (not meaningful when query is set)", - "in": "query", - "name": "offset", - "type": "string" - }, - { - "description": "Which keyword-search result tab to read: dish (default, restaurants serving a matching dish, each with a dishes array) or restaurant (restaurants whose own name/cuisine matches). Only valid together with query.", - "enum": [ - "dish", - "restaurant" - ], - "in": "query", - "name": "tab", - "type": "string", - "x-example": "restaurant" - }, - { - "description": "Only return vegetarian results: veg dishes on tab=dish, pure-veg restaurants on tab=restaurant. Only valid together with query.", - "in": "query", - "name": "veg", - "type": "boolean", - "x-example": true - }, - { - "description": "Only return restaurants rated at or above this score (0-5). Only valid together with query.", - "in": "query", - "name": "min_rating", - "type": "number", - "x-example": 4 - }, - { - "description": "Only return restaurants currently running an offer. Only valid together with query.", - "in": "query", - "name": "offers", - "type": "boolean", - "x-example": true - } - ], + "description": "Returns TechRadar's latest top stories across the site. Takes no parameters, and `techradar-headlines` narrows by section instead. Each item has its title, URL, summary, publication time, author and image.", + "operationId": "techradar-news", "produces": [ "application/json" ], @@ -525430,11 +608400,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/swiggy.searchResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -525451,29 +608421,16 @@ "ApiKeyAuth": [] } ], - "summary": "Search Swiggy restaurants near a location", + "summary": "Get TechRadar top stories", "tags": [ - "Swiggy" + "TechRadar" ] } }, - "/taco-bell/app-menu": { + "/techradar/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Taco Bell US restaurant's complete app-ordering catalog by store number: every category, every individually orderable product, AND every combo (kind \"bundle\") it carries. This is the only endpoint in this family that publishes combos at all -- each one resolved down to its full slot composition (choices[], each with min/max selections and the product codes it defaults to when not customized), not just a name and price. Also returns the store's named ordering windows (dayparts) and, per item, which dayparts it is orderable in. Store numbers come from GET /taco-bell/stores.", - "operationId": "taco-bell-app-menu", - "parameters": [ - { - "description": "Taco Bell store number, from /taco-bell/stores", - "in": "query", - "name": "store_number", - "required": true, - "type": "string", - "x-example": "034922" - } - ], + "description": "Lists the 25 top-level TechRadar sections that `techradar-headlines` accepts, such as `computing`, `phones`, `best`, `deals` and `how-to`. Each entry has a `slug`, a display `name` and the section page `url`.", + "operationId": "techradar-sections", "produces": [ "application/json" ], @@ -525481,31 +608438,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tacobell.appMenuResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -525514,19 +608447,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Taco Bell restaurant's full app-ordering catalog, combos included", + "summary": "Get TechRadar sections", "tags": [ - "TacoBell" + "TechRadar" ] } }, - "/taco-bell/categories": { + "/telegram/bot": { "get": { "consumes": [ "application/json" ], - "description": "Returns Taco Bell's US menu categories -- 17 at time of writing, including tacos, burritos, quesadillas, nachos, bowls, breakfast, drinks, snacks-sweets, specialties, party-packs, vegetarian, boxes-and-combos and the value menus. Each entry's slug is the value GET /taco-bell/menu takes. A category flagged hidden_from_menu is one Taco Bell does not surface in its own navigation; it is still fetchable. Takes no parameters.", - "operationId": "taco-bell-categories", + "description": "Returns a public Telegram bot's profile from its t.me page: name, verified flag, description, avatar link and, when Telegram shows it, the number of monthly users. username is the bot's public username, with or without a leading @ or a t.me URL prefix. A channel, group, person's account or invite link is reported as such so you can use the right endpoint; an unknown username returns not found. Only public profile text is read.", + "operationId": "telegram-bot", + "parameters": [ + { + "description": "Bot username, with or without a leading @ or a t.me URL prefix", + "in": "query", + "name": "username", + "required": true, + "type": "string", + "x-example": "notcoin_bot" + } + ], "produces": [ "application/json" ], @@ -525534,7 +608477,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tacobell.categoriesResponseDoc" + "$ref": "#/definitions/telegram.botResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -525555,27 +608510,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Taco Bell menu categories", + "summary": "Get a public Telegram bot's profile", "tags": [ - "TacoBell" + "Telegram" ] } }, - "/taco-bell/menu": { + "/telegram/channel": { "get": { "consumes": [ "application/json" ], - "description": "Returns the items in one Taco Bell US menu category, each with its product code, name, price, calorie count, product and food type, image, and flags for whether it is customizable, has a meatless variant, and is currently available in store. Category slugs come from GET /taco-bell/categories, and the endpoint accepts either the bare slug (`tacos`) or the full path form (`/food/tacos`). Taco Bell is one of the few brands publishing both price and calories in the same payload.", - "operationId": "taco-bell-menu", + "description": "Returns the public profile of a Telegram channel: title, description, verification badge, subscriber count, and the photo, video, file and link counters shown on the channel's public web preview (t.me/s/{username}). username is the channel's public username, with or without a leading @ or a t.me link; private channels, groups, bots, user accounts and invite links are not supported and return an error that says which kind of name was given. subscribers is the exact figure when available; subscribers_approximate is true when only the preview's abbreviated figure (for example 10.3M) could be read. The photo, video, file and link counters are the preview's abbreviated figures and are approximate for large channels. Only public content is read, no media files are returned, and Telegram's terms restrict using platform content to train AI or machine-learning systems, so results must not be used for that purpose.", + "operationId": "telegram-channel", "parameters": [ { - "description": "Category slug from /taco-bell/categories", + "description": "Public channel username, with or without @ or a t.me link", "in": "query", - "name": "category", + "name": "username", "required": true, "type": "string", - "x-example": "tacos" + "x-example": "durov" } ], "produces": [ @@ -525585,7 +608540,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tacobell.menuResponseDoc" + "$ref": "#/definitions/telegram.channelResponseDoc" } }, "400": { @@ -525618,42 +608573,41 @@ "ApiKeyAuth": [] } ], - "summary": "List one Taco Bell menu category's items with prices and calories", + "summary": "Get a public Telegram channel profile", "tags": [ - "TacoBell" + "Telegram" ] } }, - "/taco-bell/nutrition": { + "/telegram/channel-posts": { "get": { "consumes": [ "application/json" ], - "description": "Returns the complete nutrition-facts panel for one Taco Bell US menu item -- fats (total, saturated, trans, poly- and monounsaturated), cholesterol, sodium, potassium, carbohydrates, fiber, sugars including added sugars, protein, and the vitamin and mineral figures -- plus serving size and weight and the item's declared allergens. Values are unrounded as published, in the panel's own units: grams for fats, carbohydrates and protein, milligrams for cholesterol, sodium, potassium, calcium, iron and caffeine, and micrograms for vitamin D. This goes well beyond the calorie count on /taco-bell/menu and /taco-bell/product, which is all the menu pages themselves carry. The full component-by-component ingredient statement is available via include_ingredients; it runs to several kilobytes per item, so it is off by default.", - "operationId": "taco-bell-nutrition", + "description": "Returns one page of up to 20 posts from a public Telegram channel's web preview (t.me/s/{username}), newest first. Each post has its id, link, text, links found in the text, publish time, edited flag, view count, author signature, forwarded-from and reply references, photo and video thumbnails, link-preview card, and reaction tallies. Page backwards by passing the previous response's next_before as before; has_more is false and next_before is omitted on the last page. Pass query to search inside the channel instead of browsing; search pages use the same before cursor. A search with no matches returns an empty posts list. Views are the preview's abbreviated figures (for example 32.4K) and are approximate above 1,000. Media entries carry thumbnail references only, never playable file URLs. Polls, documents, voice notes and stickers appear as an unsupported media entry. Private channels, groups, bots, user accounts and channels that disabled their web preview are not supported. Telegram's terms restrict using platform content to train AI or machine-learning systems, so results must not be used for that purpose.", + "operationId": "telegram-channel-posts", "parameters": [ { - "description": "Category slug from /taco-bell/categories", + "description": "Public channel username, with or without @ or a t.me link", "in": "query", - "name": "category", + "name": "username", "required": true, "type": "string", - "x-example": "burritos" + "x-example": "durov" }, { - "description": "Product slug, the last segment of a /food/{category}/{product} URL", + "description": "Return only posts with an id lower than this; use the previous response's next_before. Omit for the newest page", "in": "query", - "name": "product", - "required": true, - "type": "string", - "x-example": "burrito-supreme" + "name": "before", + "type": "integer", + "x-example": 531 }, { - "description": "Include the full ingredient statement (default false -- it is long)", - "in": "query", - "name": "include_ingredients", - "type": "boolean", - "x-example": false + "description": "Search term to look for inside the channel, up to 128 characters", + "in": "query", + "name": "query", + "type": "string", + "x-example": "telegram" } ], "produces": [ @@ -525663,7 +608617,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tacobell.nutritionResponseDoc" + "$ref": "#/definitions/telegram.channelPostsResponseDoc" } }, "400": { @@ -525696,35 +608650,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Taco Bell menu item's full nutrition panel, allergens and ingredients", + "summary": "List posts from a public Telegram channel", "tags": [ - "TacoBell" + "Telegram" ] } }, - "/taco-bell/product": { + "/telegram/group": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Taco Bell US menu item in full: product code, name, description, price, rounded and unrounded calorie counts, every published image rendition, and cross-sell/upsell references. The distinguishing part is `customizations` -- the option groups the item accepts (proteins, included ingredients, add-ons, sauces, shells, upgrades, and Supreme/Fresco add and remove sets), each option carrying its own calorie delta and add-on price. Calorie deltas can be negative, since the Fresco style replaces sauces. Slugs come from GET /taco-bell/menu, and both the bare slug and the full path form are accepted.", - "operationId": "taco-bell-product", + "description": "Returns the public profile of a Telegram group from its public t.me page: title, description, member count and, when Telegram shows it, the number of members online. username is the group's public username, with or without a leading @ or a t.me link. Only the profile is available for groups; their messages are not readable here. Channels (use telegram-channel), bots, user accounts and invite links are not supported and return an error that says which kind of name was given; a username nobody owns returns not found. online is 0 when Telegram shows no online figure. avatar_url is omitted for groups without a profile photo. Only public content is read, and Telegram's terms restrict using platform content to train AI or machine-learning systems, so results must not be used for that purpose.", + "operationId": "telegram-group", "parameters": [ { - "description": "Category slug from /taco-bell/categories", - "in": "query", - "name": "category", - "required": true, - "type": "string", - "x-example": "burritos" - }, - { - "description": "Product slug, the last segment of a /food/{category}/{product} URL", + "description": "Public group username, with or without @ or a t.me link", "in": "query", - "name": "product", + "name": "username", "required": true, "type": "string", - "x-example": "burrito-supreme" + "x-example": "python" } ], "produces": [ @@ -525734,7 +608680,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tacobell.productResponseDoc" + "$ref": "#/definitions/telegram.groupResponseDoc" } }, "400": { @@ -525767,27 +608713,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Taco Bell menu item's full detail, including its customization matrix", + "summary": "Get a public Telegram group profile", "tags": [ - "TacoBell" + "Telegram" ] } }, - "/taco-bell/store": { + "/telegram/post": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Taco Bell US restaurant by store number: address and coordinates, phone, open status, timezone, delivery and online-ordering state, Taco Bell's per-store capability flags, mobile-pickup status and geofencing radius. Where GET /taco-bell/stores gives only today's window for each nearby restaurant, this returns the full published week, Monday-first, and each day's dayparts. Dayparts matter for ordering: Taco Bell's menu availability is daypart-scoped, so breakfast items and Balance Of Day items are orderable in different windows of the same day. Store numbers come from GET /taco-bell/stores.", - "operationId": "taco-bell-store", + "description": "Returns a single post from a public Telegram channel by username and post id, as Telegram's public embed widget shows it: text, links, publish time, edited flag, views, author signature, forwarded-from and reply references, photo and video thumbnails, link-preview card, and reaction tallies. The post id is the number at the end of a post link (t.me/durov/531 has id 531) or the id field of telegram-channel-posts. A post that does not exist, was deleted, or belongs to a channel that is not public returns not found. Telegram's terms restrict using platform content to train AI or machine-learning systems, so results must not be used for that purpose.", + "operationId": "telegram-post", "parameters": [ { - "description": "Taco Bell store number, from /taco-bell/stores", + "description": "Public channel username, with or without @ or a t.me link", "in": "query", - "name": "store_number", + "name": "username", "required": true, "type": "string", - "x-example": "040890" + "x-example": "durov" + }, + { + "description": "Post id, from a post link or telegram-channel-posts' own posts[].id field", + "in": "query", + "name": "id", + "required": true, + "type": "integer", + "x-example": 531 } ], "produces": [ @@ -525797,7 +608751,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tacobell.storeDetailResponseDoc" + "$ref": "#/definitions/telegram.postResponseDoc" } }, "400": { @@ -525830,27 +608784,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Taco Bell restaurant's full record, including the whole week's hours and dayparts", + "summary": "Get one public Telegram channel post", "tags": [ - "TacoBell" + "Telegram" ] } }, - "/taco-bell/store-menu": { + "/telegraph/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Taco Bell US restaurant's entire menu -- every category and item in one call, each with its price, calories, product and food type, image, and whether it is currently carried and displayed at THIS store. Where GET /taco-bell/menu returns one category's items from the national default catalog, this is store-scoped: some items are absent or hidden at some restaurants, and this is the only endpoint that shows that per store. Also returns the store's current happy-hour discount window, published nowhere else in this family. The response can be cached at the edge for up to 24 hours, so treat it as a recent snapshot of what the store carries rather than a live per-second signal; for a store's serving-time windows (breakfast vs. Balance Of Day, etc.) use GET /taco-bell/store instead. Store numbers come from GET /taco-bell/stores.", - "operationId": "taco-bell-store-menu", + "description": "Returns one The Telegraph article by `url`, a canonical HTTPS article link. The response has the title, description, section, authors, publication and update times, image URL, body `paragraphs` and a `paywalled` flag. Access is intermittent, and subscriber-only or blocked pages return an error.", + "operationId": "telegraph-article", "parameters": [ { - "description": "Taco Bell store number, from /taco-bell/stores", + "description": "Canonical The Telegraph article URL", "in": "query", - "name": "store_number", + "name": "url", "required": true, "type": "string", - "x-example": "040890" + "x-example": "https://www.telegraph.co.uk/world-news/example/" } ], "produces": [ @@ -525860,7 +608811,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tacobell.storeMenuResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -525875,12 +608826,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -525893,49 +608838,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Taco Bell restaurant's full live catalog in a single call", + "summary": "Get The Telegraph article content", "tags": [ - "TacoBell" + "The Telegraph" ] } }, - "/taco-bell/stores": { + "/telegraph/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Taco Bell US restaurants near a latitude/longitude, ordered by distance. Each store carries its store number, full postal address with coordinates, phone, distance, open status, timezone, today's published opening and closing hours, and Taco Bell's own per-store capability flags (breakfast, drive-thru, delivery, mobile ordering, open late, pickup shelves, Live Mas Cafe, online). A coordinate with no Taco Bell nearby returns an empty list rather than an error.", - "operationId": "taco-bell-stores", + "description": "Returns a Telegraph author's profile by `url`, a canonical `telegraph.co.uk/authors////` link: name, job title, bio and recent articles with title, URL, excerpt and ISO-8601 `published_at`. `job_title` can be empty for contributors without a masthead credit.", + "operationId": "telegraph-author", "parameters": [ { - "description": "Search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 34.0522 - }, - { - "description": "Search center longitude", + "description": "Canonical Telegraph author URL", "in": "query", - "name": "longitude", + "name": "url", "required": true, - "type": "number", - "x-example": -118.2437 - }, - { - "description": "Stores per page, 1-50 (default 10)", - "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 10 - }, - { - "description": "0-based page index (default 0)", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 0 + "type": "string", + "x-example": "https://www.telegraph.co.uk/authors/c/ck-co/con-coughlin/" } ], "produces": [ @@ -525945,7 +608865,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tacobell.storesResponseDoc" + "$ref": "#/definitions/publicnews.telegraphAuthorResponseDoc" } }, "400": { @@ -525960,12 +608880,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -525978,16 +608892,41 @@ "ApiKeyAuth": [] } ], - "summary": "Find Taco Bell restaurants near a location", + "summary": "Get a Telegraph author profile", "tags": [ - "TacoBell" + "The Telegraph" ] } }, - "/target/categories": { + "/telegraph/headlines": { "get": { - "description": "Lists Target's top-level category menu in `categories`, plus the grouped shop-all directory in `groups`. Each category has an `id` (the one used by `/target/category-products`), name, canonical URL and, when Target supplies one, an image URL. The response also gives `count` and `group_count`. Takes no parameters.", - "operationId": "target-categories", + "description": "Returns the current headlines for one The Telegraph section. `section` is required and takes one of `uk-news`, `world-news`, `politics`, `business`, `finance`, `technology`, `sport`, `culture`, `travel`, `lifestyle`, `health`, `science` or `opinion`. Each item has its title and URL.", + "operationId": "telegraph-headlines", + "parameters": [ + { + "description": "The Telegraph section slug", + "enum": [ + "uk-news", + "world-news", + "politics", + "business", + "finance", + "technology", + "sport", + "culture", + "travel", + "lifestyle", + "health", + "science", + "opinion" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "uk-news" + } + ], "produces": [ "application/json" ], @@ -525995,11 +608934,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/target.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -526016,66 +608955,16 @@ "ApiKeyAuth": [] } ], - "summary": "List all Target categories", + "summary": "Get The Telegraph section headlines", "tags": [ - "Target" + "The Telegraph" ] } }, - "/target/category-products": { + "/telegraph/news": { "get": { - "description": "Returns paginated products for any category id from target-categories. Each response also contains every available dynamic filter group and option. Pass selected option ids through filter_ids as a comma-separated list. The sort enum accepts `relevance`, `featured`, `price-low`, `price-high`, `rating`, `bestselling`, and `newest`.", - "operationId": "target-category-products", - "parameters": [ - { - "description": "Target category id", - "in": "query", - "name": "category_id", - "required": true, - "type": "string", - "x-example": "5q0ga" - }, - { - "default": 1, - "description": "One-based page (1-50)", - "in": "query", - "maximum": 50, - "minimum": 1, - "name": "page", - "type": "integer" - }, - { - "default": "featured", - "description": "Result order", - "enum": [ - "relevance", - "featured", - "price-low", - "price-high", - "rating", - "bestselling", - "newest" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "default": 2885, - "description": "Target store id used for pricing", - "in": "query", - "minimum": 1, - "name": "store_id", - "type": "integer" - }, - { - "description": "Comma-separated Target filter option ids", - "in": "query", - "name": "filter_ids", - "type": "string", - "x-example": "5tdv1,fwtfr" - } - ], + "description": "Returns the current top stories from The Telegraph. It takes no parameters. Each item has its title, URL and, where available, a summary, author, publication time, image URL and `type`. It can return an error when The Telegraph declines the request.", + "operationId": "telegraph-news", "produces": [ "application/json" ], @@ -526083,19 +608972,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/target.categoryProductsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { @@ -526110,45 +608987,53 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Target category products", + "summary": "Get The Telegraph top stories", "tags": [ - "Target" + "The Telegraph" ] } }, - "/target/filter-options": { + "/telegraph/sections": { "get": { - "description": "Returns every dynamic filter group and option for either a product query or category. Provide exactly one of q or category_id. Pass currently selected option ids through filter_ids to obtain the remaining context-aware options.", - "operationId": "target-filter-options", - "parameters": [ - { - "description": "Product search query; mutually exclusive with category_id", - "in": "query", - "name": "q", - "type": "string", - "x-example": "coffee" - }, - { - "description": "Target category id; mutually exclusive with q", - "in": "query", - "name": "category_id", - "type": "string", - "x-example": "5q0ga" - }, + "description": "Lists the The Telegraph sections that the headlines endpoint accepts, such as `uk-news`, `world-news`, `politics`, `finance`, `culture` and `opinion`. Each entry has a `slug`, a display `name` and a section `url`.", + "operationId": "telegraph-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "default": 2885, - "description": "Target store id used for pricing", - "in": "query", - "minimum": 1, - "name": "store_id", - "type": "integer" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get The Telegraph sections", + "tags": [ + "The Telegraph" + ] + } + }, + "/tes/jobs/detail": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns detail for one job posting by its numeric id (the id field returned by tes-job-search): employer, location, salary, contract terms/types, dates, and application contact/URL, plus a short excerpt of the listing description rather than the full long-form HTML copy.", + "operationId": "tes-job-detail", + "parameters": [ { - "description": "Comma-separated selected Target filter option ids", + "description": "Tes job id", "in": "query", - "name": "filter_ids", + "name": "id", + "required": true, "type": "string", - "x-example": "5tdv1,fwtfr" + "x-example": "2340998" } ], "produces": [ @@ -526158,7 +609043,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/target.filterOptionsResponseDoc" + "$ref": "#/definitions/tes.jobDetailResponseDoc" } }, "400": { @@ -526167,6 +609052,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -526185,35 +609076,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Target filter options", + "summary": "Get a Tes teaching job", "tags": [ - "Target" + "Tes" ] } }, - "/target/product": { + "/tes/jobs/employer": { "get": { "consumes": [ "application/json" ], - "description": "Returns product details for one Target item, including product content, images, price, rating, category, and availability flags for the selected store.", - "operationId": "target-product", + "description": "Returns detail for one jobs employer profile by its numeric id (the trailing id in tes-job-detail's employer_url field, e.g. .../jobs/employer/epsom-college-1039424 -- the 1039424): name, location, school type/phase/funding status/gender/age range, an about description, its postal address, and every currently-open position listed on the employer's own profile page (id, title, url -- call tes-job-detail with each id for the full posting).", + "operationId": "tes-job-employer", "parameters": [ { - "description": "Numeric Target item id (TCIN)", + "description": "Tes employer id", "in": "query", - "name": "tcin", + "name": "id", "required": true, "type": "string", - "x-example": "12954151" - }, - { - "default": 2885, - "description": "Target store id used for pricing and availability", - "in": "query", - "minimum": 1, - "name": "store_id", - "type": "integer" + "x-example": "1039424" } ], "produces": [ @@ -526223,7 +609106,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/target.productResponseDoc" + "$ref": "#/definitions/tes.employerDetailResponseDoc" } }, "400": { @@ -526256,41 +609139,136 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Target product", + "summary": "Get a Tes jobs employer profile", "tags": [ - "Target" + "Tes" ] } }, - "/target/questions": { + "/tes/jobs/search": { "get": { - "description": "Lists customer questions for a Target item given by its numeric `tcin`, each with its text, author, submission time, helpful votes and nested answers. `page` is zero-based and `per_page` runs 1 to 25. The response gives `total_pages` and `count` for paging.", - "operationId": "target-questions", + "consumes": [ + "application/json" + ], + "description": "Searches Tes's (tes.com) teaching-jobs board. Returns listing facts (title, employer, location, salary, contract terms/types) plus a short excerpt of the listing description, not the full long-form job-description copy, and the same live faceted-search breakdown (position/subject/workplace category trees with counts, plus contract type/term counts) the real search page renders as its filter sidebar. location is a free-text place name (a UK town/city, an international city, or a bare country name) resolved to coordinates; omit for Tes's own default market, \"United Kingdom\". radius_miles selects the search radius around location. contract_type and contract_term are validated against Tes's own small, closed label sets. position, subject, and workplace are comma-separated filters -- Tes's own category labels are numerous and can change, so read a prior response's own facets.positions[].value (and facets.positions[].children[].value)/facets.subjects[].value/facets.workplaces[].children[].value for the live, current set rather than guessing. salary_min filters to jobs with an advertised salary at or above that amount (in the searched market's local currency); Tes's own filter panel offers only a minimum, no maximum.", + "operationId": "tes-job-search", "parameters": [ { - "description": "Numeric Target item id", + "description": "Job title or keyword", "in": "query", - "name": "tcin", - "required": true, + "name": "keywords", "type": "string", - "x-example": "91940750" + "x-example": "maths teacher" }, { - "default": 0, - "description": "Zero-based page", + "default": "United Kingdom", + "description": "Free-text place name resolved via Tes's own location autocomplete", "in": "query", - "minimum": 0, + "name": "location", + "type": "string", + "x-example": "Manchester" + }, + { + "default": 30, + "description": "Search radius around location, in miles", + "enum": [ + 3, + 5, + 10, + 15, + 20, + 30, + 50, + 70, + 100, + 500 + ], + "in": "query", + "name": "radius_miles", + "type": "integer" + }, + { + "default": 1, + "description": "One-based page", + "in": "query", + "maximum": 500, + "minimum": 1, "name": "page", "type": "integer" }, { - "default": 25, - "description": "Questions per page", + "default": 20, + "description": "Results per page", "in": "query", - "maximum": 25, + "maximum": 50, "minimum": 1, - "name": "per_page", + "name": "page_size", "type": "integer" + }, + { + "default": "relevance", + "description": "Sort order", + "enum": [ + "relevance", + "newest", + "distance" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Contract type", + "enum": [ + "Full Time", + "Part Time" + ], + "in": "query", + "name": "contract_type", + "type": "string" + }, + { + "description": "Contract term", + "enum": [ + "Permanent", + "Fixed Term", + "Casual", + "Maternity Cover", + "Temporary", + "Supply" + ], + "in": "query", + "name": "contract_term", + "type": "string" + }, + { + "description": "Comma-separated position category label(s) -- see the endpoint markdown", + "in": "query", + "name": "position", + "type": "string", + "x-example": "Teaching and Lecturing" + }, + { + "description": "Comma-separated subject label(s) -- see the endpoint markdown", + "in": "query", + "name": "subject", + "type": "string", + "x-example": "Mathematics" + }, + { + "description": "Comma-separated workplace/organisation-type label(s) -- see the endpoint markdown", + "in": "query", + "name": "workplace", + "type": "string", + "x-example": "Secondary" + }, + { + "description": "Minimum advertised salary, in the searched market's local currency", + "in": "query", + "minimum": 0, + "name": "salary_min", + "type": "integer", + "x-example": 28000 } ], "produces": [ @@ -526300,7 +609278,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/target.questionsResponseDoc" + "$ref": "#/definitions/tes.jobSearchResponseDoc" } }, "400": { @@ -526309,6 +609287,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -526321,42 +609305,43 @@ "ApiKeyAuth": [] } ], - "summary": "List Target product questions and answers", + "summary": "Search Tes teaching jobs", "tags": [ - "Target" + "Tes" ] } }, - "/target/reviews": { + "/tes/resources/detail": { "get": { - "description": "Lists written reviews for a Target item given by its numeric `tcin`. Each review has its rating, title, text, author, submission time, helpful votes, and verified and syndicated flags. `page` is zero-based and stops at 50; `per_page` runs 1 to 25. The response gives `total` and `total_pages`.", - "operationId": "target-reviews", + "consumes": [ + "application/json" + ], + "description": "Returns detail for one teaching resource by its numeric id (the id field returned by tes-resource-search). Descriptive facts (title, subject, age range, resource type, author, price, rating, licence label), a per-file attachment list (file type, size, and a preview thumbnail -- metadata only), and the most recent page of reviews are returned -- not the downloadable resource file itself.", + "operationId": "tes-resource-detail", "parameters": [ { - "description": "Numeric Target item id", + "description": "Tes resource id", "in": "query", - "name": "tcin", + "name": "id", "required": true, "type": "string", - "x-example": "91940750" - }, - { - "default": 0, - "description": "Zero-based page", - "in": "query", - "maximum": 50, - "minimum": 0, - "name": "page", - "type": "integer" + "x-example": "13463100" }, { - "default": 25, - "description": "Reviews per page", + "default": "GB", + "description": "Storefront market for pricing/currency", + "enum": [ + "GB", + "US", + "AU", + "IE", + "CA", + "NZ", + "UN" + ], "in": "query", - "maximum": 25, - "minimum": 1, - "name": "per_page", - "type": "integer" + "name": "country", + "type": "string" } ], "produces": [ @@ -526366,7 +609351,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/target.reviewsResponseDoc" + "$ref": "#/definitions/tes.resourceDetailResponseDoc" } }, "400": { @@ -526375,6 +609360,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -526387,67 +609384,105 @@ "ApiKeyAuth": [] } ], - "summary": "List Target product reviews", + "summary": "Get a Tes teaching resource", "tags": [ - "Target" + "Tes" ] } }, - "/target/search": { + "/tes/resources/search": { "get": { "consumes": [ "application/json" ], - "description": "Searches Target products and returns products plus every filter group and option available for the current result set. Pass option ids back through filter_ids as a comma-separated list. A zero total with an empty products list is a valid no-results response. The sort enum accepts `relevance`, `featured`, `price-low`, `price-high`, `rating`, `bestselling`, and `newest`.", - "operationId": "target-search", + "description": "Searches Tes's (tes.com) teaching-resources marketplace. Returns listing facts (title, author, price, rating, downloads) -- not full listing descriptions. query is optional: omit it (alone, or combined with key_stage/subject/on_sale) for pure filter-driven or fully unfiltered browsing. sort mirrors the real search page's own Sort by dropdown; key_stage and subject mirror its left-hand Refine by filters (both closed, validated enums taken from Tes's own facet taxonomy, and always resolved against Tes's own single GB-taxonomy regardless of country). country controls result currency/localisation only (confirmed live for all seven values); it does not change which key_stage/subject values are valid.", + "operationId": "tes-resource-search", "parameters": [ { - "description": "Product search query", + "description": "Search keywords -- omit for filter-driven or unfiltered browsing", "in": "query", - "name": "q", - "required": true, + "name": "query", "type": "string", - "x-example": "coffee" + "x-example": "phonics" + }, + { + "default": "GB", + "description": "Storefront market", + "enum": [ + "GB", + "US", + "AU", + "IE", + "CA", + "NZ", + "UN" + ], + "in": "query", + "name": "country", + "type": "string" }, { "default": 1, - "description": "One-based page (1-50)", + "description": "One-based page", "in": "query", - "maximum": 50, + "maximum": 500, "minimum": 1, "name": "page", "type": "integer" }, + { + "default": 20, + "description": "Results per page", + "in": "query", + "maximum": 50, + "minimum": 1, + "name": "page_size", + "type": "integer" + }, { "default": "relevance", - "description": "Result order", + "description": "Sort order", "enum": [ "relevance", - "featured", - "price-low", - "price-high", - "rating", - "bestselling", - "newest" + "newest", + "highest_rated", + "lowest_price" ], "in": "query", "name": "sort", "type": "string" }, { - "default": 2885, - "description": "Target store id used for pricing", + "description": "Filter by age range", + "enum": [ + "3-5", + "5-7", + "7-11", + "11-14", + "14-16", + "16+", + "age_not_applicable" + ], "in": "query", - "minimum": 1, - "name": "store_id", - "type": "integer" + "name": "key_stage", + "type": "string" }, { - "description": "Comma-separated Target filter option ids", + "description": "Filter by subject -- one of Tes's own top-level subject facet labels; see the endpoint markdown for the full list (two of the 29 values contain a comma, which is why this parameter is not expressed as a Swagger Enums() list)", + "enum": [ + "" + ], "in": "query", - "name": "filter_ids", + "name": "subject", "type": "string", - "x-example": "5tdv1,fwtfr" + "x-example": "English" + }, + { + "default": false, + "description": "Filter to discounted resources only", + "in": "query", + "name": "on_sale", + "type": "boolean" } ], "produces": [ @@ -526457,7 +609492,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/target.searchResponseDoc" + "$ref": "#/definitions/tes.resourceSearchResponseDoc" } }, "400": { @@ -526484,41 +609519,42 @@ "ApiKeyAuth": [] } ], - "summary": "Search Target products", + "summary": "Search Tes teaching resources", "tags": [ - "Target" + "Tes" ] } }, - "/target/stores": { + "/tes/resources/shop": { "get": { - "description": "Returns Target's physical stores near a ZIP code, a free-text \"city, state\", or a \"latitude,longitude\" pair, including each store's store_id, status, distance, phone, address, service list, time zone, and two weeks of daily opening hours. Use the returned store_id values with the store_id parameter on target-search, target-category-products, target-filter-options, and target-product.", - "operationId": "target-stores", + "consumes": [ + "application/json" + ], + "description": "Returns detail for one teaching-resources author/seller shop by its username (from tes-resource-search/tes-resource-detail's author field, or the trailing path segment of author_url): display name, average rating, upload/view/download counts, a bio, and a page of that author's resource listing (id, title, price, thumbnail -- call tes-resource-detail with each id for subject/age-range/resource-type/rating/description). subject narrows the listing to one of the subject tabs shown on the shop's own page; these vary per author and are not a curated enum.", + "operationId": "tes-resource-shop", "parameters": [ { - "description": "ZIP code, city/state, or latitude,longitude", + "description": "Tes author username", "in": "query", - "name": "place", + "name": "username", "required": true, "type": "string", - "x-example": "95014" + "x-example": "jenpower16" }, { - "default": 20, - "description": "Maximum stores to return (1-20)", + "description": "Subject tab to filter the listing to -- see the shop's own page for the current set", "in": "query", - "maximum": 20, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "subject", + "type": "string", + "x-example": "Whole school" }, { - "default": 100, - "description": "Search radius in miles (1-5000)", + "default": 1, + "description": "One-based page", "in": "query", - "maximum": 5000, + "maximum": 500, "minimum": 1, - "name": "within", + "name": "page", "type": "integer" } ], @@ -526529,7 +609565,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/target.storesResponseDoc" + "$ref": "#/definitions/tes.resourceShopResponseDoc" } }, "400": { @@ -526562,33 +609598,45 @@ "ApiKeyAuth": [] } ], - "summary": "Find Target stores near a location", + "summary": "Get a Tes teaching-resources author shop", "tags": [ - "Target" + "Tes" ] } }, - "/tcgplayer/filters": { + "/tes/schools/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns the values the tcgplayer-sales filters accept for one TCGplayer product line: the printings (variants such as Normal, Foil, Holofoil or 1st Edition), the six conditions, the languages and the listing types, each with TCGplayer's id. Printings belong to one product line (Pokemon has Reverse Holofoil, Magic has Foil), while languages are shared. Give product_line (a url_name from tcgplayer-product-lines) or id (a TCGplayer product id, which uses that product's line). An unknown product line returns invalid parameters and an unknown product returns not found.", - "operationId": "tcgplayer-filters", + "description": "Searches Tes's (tes.com) public Schools Directory by school name or location. Returns listing facts (name, logo, a short description, address) for each matching school/employer. Each result's id is the same employer id tes-job-employer accepts, so a caller can go straight from a name/location search to a full employer profile (school type/phase/funding status/gender/age range, and its currently-open positions) without first needing a job posting to discover the id.", + "operationId": "tes-school-search", "parameters": [ { - "description": "Product line url_name from tcgplayer-product-lines; give this or id", + "description": "School name or location", "in": "query", - "name": "product_line", + "name": "query", + "required": true, "type": "string", - "x-example": "pokemon" + "x-example": "Epsom" }, { - "description": "TCGplayer product id from tcgplayer-search; give this or product_line", + "default": 1, + "description": "One-based page", "in": "query", - "name": "id", - "type": "integer", - "x-example": 684332 + "maximum": 500, + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "default": 20, + "description": "Results per page", + "in": "query", + "maximum": 50, + "minimum": 1, + "name": "page_size", + "type": "integer" } ], "produces": [ @@ -526598,7 +609646,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tcgplayer.filtersResponseDoc" + "$ref": "#/definitions/tes.schoolSearchResponseDoc" } }, "400": { @@ -526607,12 +609655,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -526631,91 +609673,27 @@ "ApiKeyAuth": [] } ], - "summary": "List the printing, condition and language filters of a TCGplayer product line", + "summary": "Search the Tes Schools Directory", "tags": [ - "TCGplayer" + "Tes" ] } }, - "/tcgplayer/listings": { + "/tesla-jobs/job": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of the current seller listings for a TCGplayer product: seller storefront name, rating and sales volume, condition, printing, language, quantity, price, shipping price and seller location. Filter by condition, printing and language, and sort by price or price with shipping.", - "operationId": "tcgplayer-listings", + "description": "Returns one Tesla Careers posting by its numeric job id (the `id` field returned by the list endpoint).", + "operationId": "tesla-jobs-job", "parameters": [ { - "description": "TCGplayer product id from tcgplayer-search", + "description": "Tesla job id", "in": "query", "name": "id", "required": true, - "type": "integer", - "x-example": 243172 - }, - { - "description": "Condition filter", - "enum": [ - "near-mint", - "lightly-played", - "moderately-played", - "heavily-played", - "damaged" - ], - "in": "query", - "name": "condition", - "type": "string", - "x-example": "near-mint" - }, - { - "description": "Exact printing label such as Normal or Foil; see facets.printings", - "in": "query", - "name": "printing", - "type": "string", - "x-example": "Foil" - }, - { - "description": "Exact language label such as English; see facets.languages", - "in": "query", - "name": "language", - "type": "string", - "x-example": "English" - }, - { - "description": "Sort field; omit for TCGplayer's own order", - "enum": [ - "price", - "price-with-shipping" - ], - "in": "query", - "name": "sort", - "type": "string", - "x-example": "price" - }, - { - "description": "Sort direction, needs sort; default asc", - "enum": [ - "asc", - "desc" - ], - "in": "query", - "name": "order", "type": "string", - "x-example": "asc" - }, - { - "description": "Page size, 1 to 50; defaults to 24", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 5 - }, - { - "description": "Listings to skip; offset plus limit must be 9999 or less", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "x-example": "224501" } ], "produces": [ @@ -526725,7 +609703,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tcgplayer.listingsResponseDoc" + "$ref": "#/definitions/teslajobs.jobResponseDoc" } }, "400": { @@ -526758,41 +609736,47 @@ "ApiKeyAuth": [] } ], - "summary": "List the sellers offering a TCGplayer product", + "summary": "Tesla Jobs single posting", "tags": [ - "TCGplayer" + "Tesla Jobs" ] } }, - "/tcgplayer/price-guide": { + "/tesla-jobs/list": { "get": { "consumes": [ "application/json" ], - "description": "Returns TCGplayer's price guide for one set, one row per card, condition and printing: card id, name, collector number, rarity, condition, printing, language, low price, market price and units sold. Page through a whole set (up to 500 rows per call) instead of fetching each card; the set_id comes from tcgplayer-sets.", - "operationId": "tcgplayer-price-guide", + "description": "Searches Tesla's public careers site (tesla.com/careers) via its own careers-state JSON endpoint. Tesla's own endpoint always returns its entire global job dataset regardless of query parameters; this filters and paginates that snapshot server-side. Listings carry identity/department/location metadata only — call the job endpoint for the full description, responsibilities, and requirements.", + "operationId": "tesla-jobs-list", "parameters": [ { - "description": "Numeric set id from tcgplayer-sets (the id field)", + "description": "Filter by title or department, case-insensitive substring match", "in": "query", - "name": "set_id", - "required": true, - "type": "integer", - "x-example": 604 + "name": "query", + "type": "string", + "x-example": "software engineer" }, { - "description": "Page size, 1 to 500; defaults to 100", + "description": "Filter by location, case-insensitive substring match", "in": "query", - "name": "limit", + "name": "location", + "type": "string", + "x-example": "Palo Alto" + }, + { + "description": "Page number, 1-based", + "in": "query", + "name": "page", "type": "integer", - "x-example": 100 + "x-example": 1 }, { - "description": "Rows to skip; use the previous response's next_offset", + "description": "Results per page, up to 100", "in": "query", - "name": "offset", + "name": "page_size", "type": "integer", - "x-example": 0 + "x-example": 20 } ], "produces": [ @@ -526802,7 +609786,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tcgplayer.priceGuideResponseDoc" + "$ref": "#/definitions/teslajobs.listResponseDoc" } }, "400": { @@ -526811,12 +609795,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -526835,40 +609813,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get TCGplayer's price guide for a whole set", + "summary": "Tesla Jobs listing", "tags": [ - "TCGplayer" + "Tesla Jobs" ] } }, - "/tcgplayer/price-history": { + "/theage/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a TCGplayer product's price history over a month, quarter, half year or year, per condition, printing and language: market price, quantity sold, transaction count and low/high sale price for each period, plus the average daily sales volume.", - "operationId": "tcgplayer-price-history", + "description": "Returns one The Age article's public metadata and the body paragraphs an anonymous visitor's page request is served, from a canonical article URL. The Age runs a metered subscription paywall; the response reports it with is_accessible_for_free (the page's own declaration), paywalled (the page marks the story as subscriber content), and is_truncated (the page served a shortened preview, or no body at all, instead of the full story). Paywalls are never bypassed and body text is never fabricated. Video-only pages are rejected with a 400.", + "operationId": "theage-article", "parameters": [ { - "description": "TCGplayer product id from tcgplayer-search", + "description": "Canonical The Age article URL", "in": "query", - "name": "id", + "name": "url", "required": true, - "type": "integer", - "x-example": 42382 - }, - { - "description": "History window; defaults to quarter", - "enum": [ - "month", - "quarter", - "semi-annual", - "annual" - ], - "in": "query", - "name": "range", "type": "string", - "x-example": "quarter" + "x-example": "https://www.theage.com.au/politics/federal/albanese-once-criticised-rivals-for-abusing-this-power-just-look-at-him-now-20260925-p60zxu.html" } ], "produces": [ @@ -526878,7 +609840,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tcgplayer.priceHistoryResponseDoc" + "$ref": "#/definitions/publicnews.theageArticleResponseDoc" } }, "400": { @@ -526887,8 +609849,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -526905,27 +609867,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a TCGplayer product's price history", + "summary": "Get The Age article content", "tags": [ - "TCGplayer" + "The Age" ] } }, - "/tcgplayer/product": { + "/theage/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one TCGplayer product in full: name, product line, set, rarity, card number, card text, attributes, the market, lowest and median prices, listing and seller counts, every purchasable condition/variant/language SKU, and TCGplayer's market and buylist price per printing.", - "operationId": "tcgplayer-product", + "description": "Returns an Age journalist's public profile -- name, short biography, headshot, contact email and social links where published -- plus their recent stories, from a canonical https://www.theage.com.au/by/- URL.", + "operationId": "theage-author", "parameters": [ { - "description": "TCGplayer product id (the number in tcgplayer.com/product/), from tcgplayer-search", + "description": "Canonical The Age journalist URL", "in": "query", - "name": "id", + "name": "url", "required": true, - "type": "integer", - "x-example": 243172 + "type": "string", + "x-example": "https://www.theage.com.au/by/chip-le-grand-p4yvib" } ], "produces": [ @@ -526935,7 +609894,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tcgplayer.productResponseDoc" + "$ref": "#/definitions/publicnews.theageAuthorResponseDoc" } }, "400": { @@ -526950,12 +609909,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -526968,19 +609921,124 @@ "ApiKeyAuth": [] } ], - "summary": "Get a TCGplayer product's detail and price points", + "summary": "Get an Age journalist profile", "tags": [ - "TCGplayer" + "The Age" ] } }, - "/tcgplayer/product-lines": { + "/theage/headlines": { "get": { - "consumes": [ - "application/json" + "description": "Returns the current stories for one The Age section: title, canonical URL, summary, author, publication time, and image where the section lists them. section must be one of the slugs returned by /theage/sections; any other value is rejected with a 400 before The Age is contacted.", + "operationId": "theage-headlines", + "parameters": [ + { + "description": "Section slug from /theage/sections", + "enum": [ + "melbourne-news", + "national/victoria", + "politics", + "politics/federal", + "politics/victoria", + "politics/nsw", + "politics/queensland", + "politics/western-australia", + "business", + "business/companies", + "business/markets", + "business/bullsnbears", + "business/the-economy", + "business/banking-and-finance", + "business/small-business", + "business/workplace", + "world", + "world/north-america", + "world/europe", + "world/asia", + "world/middle-east", + "world/south-america", + "world/africa", + "national", + "national/nsw", + "national/queensland", + "national/western-australia", + "opinion", + "property", + "property/news", + "property/living", + "sport", + "sport/afl", + "sport/cricket", + "sport/soccer", + "sport/racing", + "sport/tennis", + "sport/nrl", + "sport/rugby-union", + "sport/netball", + "sport/basketball", + "sport/motorsport", + "sport/cycling", + "sport/golf", + "sport/nfl", + "sport/athletics", + "sport/swimming", + "sport/boxing", + "goodfood", + "goodfood/melbourne-eating-out", + "goodfood/recipes", + "goodfood/tips-and-advice", + "goodfood/drinks", + "culture", + "culture/movies", + "culture/tv-and-radio", + "culture/music", + "culture/celebrity", + "culture/books", + "culture/comedy", + "culture/dance", + "culture/musicals", + "culture/opera", + "culture/theatre", + "culture/art-and-design", + "culture/live-reviews", + "lifestyle", + "lifestyle/health-and-wellness", + "lifestyle/fashion", + "lifestyle/life-and-relationships", + "lifestyle/beauty", + "traveller", + "traveller/inspiration/destination-guides", + "traveller/inspiration", + "traveller/reviews-and-advice", + "traveller/travel-news", + "good-weekend", + "sunday-life", + "money", + "money/super-and-retirement", + "money/investing", + "money/banking", + "money/borrowing", + "money/saving", + "money/tax", + "money/planning-and-budgeting", + "education", + "healthcare", + "environment", + "environment/conservation", + "environment/climate-change", + "environment/sustainability", + "environment/weather", + "technology", + "technology/video-games", + "australia-higher-education" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "politics/federal" + } ], - "description": "Lists TCGplayer's product lines (games and product families such as Pokemon, Magic: The Gathering, Yu-Gi-Oh!, One Piece and Lorcana): id, name and the url_name that tcgplayer-search and tcgplayer-sets take as product_line.", - "operationId": "tcgplayer-product-lines", "produces": [ "application/json" ], @@ -526988,7 +610046,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tcgplayer.productLinesResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -526997,6 +610055,38 @@ "$ref": "#/definitions/app.Response" } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The Age section headlines", + "tags": [ + "The Age" + ] + } + }, + "/theage/news": { + "get": { + "description": "Returns The Age's current \"Latest News\" public RSS feed: each story's title, canonical URL, summary, author, publication time, and lead image.", + "operationId": "theage-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -527015,68 +610105,50 @@ "ApiKeyAuth": [] } ], - "summary": "List TCGplayer product lines", + "summary": "Get The Age top stories", "tags": [ - "TCGplayer" + "The Age" ] } }, - "/tcgplayer/sales": { + "/theage/sections": { "get": { - "consumes": [ + "description": "Lists every The Age section accepted by /theage/headlines (96 sections from the site's own section menu), each with its slug, display name, and public section-front URL.", + "operationId": "theage-sections", + "produces": [ "application/json" ], - "description": "Returns the five most recent completed sales of a TCGplayer product: condition, printing, language, quantity, sale price, shipping price and order time. Optionally restrict to one condition (near-mint, lightly-played, moderately-played, heavily-played, damaged or unopened), one printing (variant such as Normal, Foil or Reverse Holofoil), one language (such as English or Japanese) and whether the listing had photos. The printing and language values a product accepts come from tcgplayer-filters; an unlisted value returns invalid parameters. A variant or language filter makes one extra call to read the product line's filter values.", - "operationId": "tcgplayer-sales", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The Age sections", + "tags": [ + "The Age" + ] + } + }, + "/theatlantic/article": { + "get": { + "description": "Returns one public Atlantic article's metadata and body paragraphs from a canonical article URL. `metered` reflects the site's own soft-paywall flag for that article; the body returned here is the same one the site's own page serves to an anonymous visitor and is never truncated because of it. An article whose page genuinely withholds its body is reported as a restricted-access error instead of a hollow response.", + "operationId": "theatlantic-article", "parameters": [ { - "description": "TCGplayer product id from tcgplayer-search", + "description": "Canonical The Atlantic article URL", "in": "query", - "name": "id", + "name": "url", "required": true, - "type": "integer", - "x-example": 42382 - }, - { - "description": "Condition filter", - "enum": [ - "near-mint", - "lightly-played", - "moderately-played", - "heavily-played", - "damaged", - "unopened" - ], - "in": "query", - "name": "condition", - "type": "string", - "x-example": "near-mint" - }, - { - "description": "Printing label of the product's product line, such as Normal, Foil, Holofoil or Reverse Holofoil; see tcgplayer-filters", - "in": "query", - "name": "variant", - "type": "string", - "x-example": "Reverse Holofoil" - }, - { - "description": "Language label: English, Chinese (S), Chinese (T), French, German, Italian, Japanese, Korean, Portuguese, Russian or Spanish, limited to the languages of the product's line; see tcgplayer-filters", - "in": "query", - "name": "language", - "type": "string", - "x-example": "Japanese" - }, - { - "description": "Listing type filter; default all", - "enum": [ - "all", - "with-photos", - "without-photos" - ], - "in": "query", - "name": "listing_type", "type": "string", - "x-example": "all" + "x-example": "https://www.theatlantic.com/politics/2026/09/example-slug/688738/" } ], "produces": [ @@ -527086,7 +610158,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tcgplayer.salesResponseDoc" + "$ref": "#/definitions/theatlantic.articleResponseDoc" } }, "400": { @@ -527095,6 +610167,12 @@ "$ref": "#/definitions/app.Response" } }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "404": { "description": "Not Found", "schema": { @@ -527119,116 +610197,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a TCGplayer product's most recent sales", + "summary": "Get an Atlantic article's content", "tags": [ - "TCGplayer" + "The Atlantic" ] } }, - "/tcgplayer/search": { + "/theatlantic/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches TCGplayer's catalog of trading-card and collectible products (Pokemon, Magic, Yu-Gi-Oh!, One Piece, Lorcana and about 70 other product lines) and returns one page of matches: product id, name, set, rarity, card number, market, lowest and median prices, listing count, links and filter facets. Filter by product line, set, product type, rarity, card type and price range, and sort by price, listings, sales or name.", - "operationId": "tcgplayer-search", + "description": "Returns one Atlantic staff author's public profile -- name, headshot, and biography -- plus their recent articles, from a canonical author URL.", + "operationId": "theatlantic-author", "parameters": [ { - "description": "Search text, up to 100 characters; optional when product_line is set", - "in": "query", - "name": "q", - "type": "string", - "x-example": "charizard" - }, - { - "description": "Product line url_name from tcgplayer-product-lines, for example pokemon, magic, yugioh", - "in": "query", - "name": "product_line", - "type": "string", - "x-example": "pokemon" - }, - { - "description": "Set url_name from tcgplayer-sets; needs product_line", - "in": "query", - "name": "set", - "type": "string", - "x-example": "base-set" - }, - { - "description": "Exact product type label such as Cards or Booster Box; see facets.product_types", - "in": "query", - "name": "product_type", - "type": "string", - "x-example": "Cards" - }, - { - "description": "Exact rarity label such as Holo Rare; see facets.rarities", - "in": "query", - "name": "rarity", - "type": "string", - "x-example": "Holo Rare" - }, - { - "description": "Exact card type label such as Pokemon; see facets.card_types", - "in": "query", - "name": "card_type", - "type": "string", - "x-example": "Pokemon" - }, - { - "description": "Minimum market price in US dollars", - "in": "query", - "name": "min_price", - "type": "number", - "x-example": 10 - }, - { - "description": "Maximum market price in US dollars", - "in": "query", - "name": "max_price", - "type": "number", - "x-example": 500 - }, - { - "description": "Sort field; omit for relevance", - "enum": [ - "market-price", - "lowest-price", - "lowest-price-with-shipping", - "median-price", - "listings", - "sales", - "product-name" - ], - "in": "query", - "name": "sort", - "type": "string", - "x-example": "market-price" - }, - { - "description": "Sort direction, needs sort; default desc (asc for product-name)", - "enum": [ - "asc", - "desc" - ], + "description": "Canonical theatlantic.com/author// URL", "in": "query", - "name": "order", + "name": "url", + "required": true, "type": "string", - "x-example": "desc" - }, - { - "description": "Page size, 1 to 50; defaults to 24", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 5 - }, - { - "description": "Results to skip; offset plus limit must be 9999 or less", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "x-example": "https://www.theatlantic.com/author/example-author/" } ], "produces": [ @@ -527238,7 +610224,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tcgplayer.searchResponseDoc" + "$ref": "#/definitions/theatlantic.authorResponseDoc" } }, "400": { @@ -527247,6 +610233,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -527265,27 +610257,39 @@ "ApiKeyAuth": [] } ], - "summary": "Search TCGplayer trading-card products", + "summary": "Get an Atlantic staff author profile", "tags": [ - "TCGplayer" + "The Atlantic" ] } }, - "/tcgplayer/sets": { + "/theatlantic/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the active sets (expansions) of one TCGplayer product line, newest first: name, the url_name that tcgplayer-search takes as set, abbreviation and release date.", - "operationId": "tcgplayer-sets", + "description": "Returns the current front-page article cards for one Atlantic section: each story's title, canonical URL, description, byline, publication time, and lead image. Section must be a slug returned by /theatlantic/sections.", + "operationId": "theatlantic-headlines", "parameters": [ { - "description": "Product line url_name from tcgplayer-product-lines", + "description": "Section slug from /theatlantic/sections", + "enum": [ + "ideas", + "politics", + "economy", + "international", + "national-security", + "technology", + "science", + "health", + "education", + "culture", + "family", + "books", + "photography" + ], "in": "query", - "name": "product_line", + "name": "section", "required": true, "type": "string", - "x-example": "pokemon" + "x-example": "politics" } ], "produces": [ @@ -527295,7 +610299,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tcgplayer.setsResponseDoc" + "$ref": "#/definitions/theatlantic.headlinesResponseDoc" } }, "400": { @@ -527328,24 +610332,62 @@ "ApiKeyAuth": [] } ], - "summary": "List the sets of a TCGplayer product line", + "summary": "Get the latest stories in an Atlantic section", "tags": [ - "TCGplayer" + "The Atlantic" ] } }, - "/techcrunch/article": { + "/theatlantic/sections": { "get": { - "description": "Returns public TechCrunch article metadata (title, author(s), published/updated dates, dek, section, lead image) and body paragraphs from a canonical article URL.", - "operationId": "techcrunch-article", + "description": "Lists every top-level Atlantic section accepted by /theatlantic/headlines, with its slug, display name, and landing-page URL. Values: `ideas`, `politics`, `economy`, `international`, `national-security`, `technology`, `science`, `health`, `education`, `culture`, `family`, `books`, `photography`.", + "operationId": "theatlantic-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/theatlantic.sectionsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List The Atlantic sections", + "tags": [ + "The Atlantic" + ] + } + }, + "/theblaze/article": { + "get": { + "description": "Returns one TheBlaze (Blaze Media) article by `url`, a canonical HTTPS editorial or show-story link on `theblaze.com`; non-editorial paths and off-site URLs are rejected. The response has the title, description, section, authors, publication and update times, image URL, body `paragraphs` and a `paywalled` flag.", + "operationId": "theblaze-article", "parameters": [ { - "description": "Canonical TechCrunch article URL", + "description": "Canonical theblaze.com article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://techcrunch.com/2026/09/22/discords-age-verification-era-is-upon-us-despite-community-backlash/" + "x-example": "https://www.theblaze.com/news/niaid-backed-an-experiment-aersolizing-lethal-ebola-then-fauci-panicked-about-what-it-exposed-about-vaccination" } ], "produces": [ @@ -527382,31 +610424,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get TechCrunch article content", + "summary": "Get a Blaze Media article", "tags": [ - "TechCrunch" + "TheBlaze" ] } }, - "/techcrunch/author": { + "/theblaze/author": { "get": { - "description": "Returns one TechCrunch staff writer or contributor's public profile: name, job title, headshot, biography, social links, and one page of their recent articles.", - "operationId": "techcrunch-author", + "description": "Returns a public /u/ profile and up to 30 recent article feed items. Provide exactly one of slug or canonical profile URL.", + "operationId": "theblaze-author", "parameters": [ { - "description": "Canonical techcrunch.com/author/ URL", + "description": "TheBlaze author username", "in": "query", - "name": "url", - "required": true, + "name": "slug", "type": "string", - "x-example": "https://techcrunch.com/author/amanda-silberling/" + "x-example": "josephmackinnon" }, { - "description": "1-based page of recent articles to return; defaults to 1", + "description": "Canonical HTTPS theblaze.com/u/ profile URL", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "url", + "type": "string", + "x-example": "https://www.theblaze.com/u/josephmackinnon" } ], "produces": [ @@ -527416,7 +610457,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.techCrunchAuthorResponseDoc" + "$ref": "#/definitions/publicnews.theBlazeAuthorResponseDoc" } }, "400": { @@ -527443,48 +610484,70 @@ "ApiKeyAuth": [] } ], - "summary": "Get a TechCrunch author profile", + "summary": "Get a Blaze Media contributor profile", "tags": [ - "TechCrunch" + "TheBlaze" ] } }, - "/techcrunch/headlines": { + "/theblaze/headlines": { "get": { - "description": "Returns the latest TechCrunch stories for one category. `section` is required and takes one of 22 slugs such as `artificial-intelligence`, `startups`, `venture`, `security`, `fintech`, `space` or `cryptocurrency`. Each item has its title, URL, summary, publication time and author.", - "operationId": "techcrunch-headlines", + "description": "Returns up to 30 recent stories from one TheBlaze (Blaze Media) section. `section` is required, case-sensitive and must match exactly, for example `news`, `columns/opinion`, `lifestyle/men`, `tech` or a show such as `shows/relatable`. Other values are rejected. Items have a title and URL, plus summary, author, publication time and image when the outlet provides them.", + "operationId": "theblaze-headlines", "parameters": [ { - "description": "TechCrunch category slug", + "description": "Exact Blaze Media section slug", "enum": [ - "apps", - "artificial-intelligence", - "biotech-health", - "climate", - "commerce", - "cryptocurrency", - "enterprise", - "fintech", - "fundraising", - "gadgets", - "gaming", - "government-policy", - "hardware", - "media-entertainment", - "privacy", - "robotics", - "security", - "social", - "space", - "startups", - "transportation", - "venture" + "news", + "columns", + "columns/opinion", + "columns/analysis", + "tech", + "lifestyle", + "lifestyle/men", + "lifestyle/women", + "lifestyle/provisions", + "fearless", + "exclusive", + "original", + "politics", + "your-opinion", + "shows", + "shows/back-to-the-people", + "shows/blaze-news-tonight", + "shows/blaze-originals", + "shows/blazetv-specials", + "shows/come-take-it-with-sara-gonzales", + "shows/conservative-review-with-daniel-horowitz", + "shows/dusty-bluffs", + "shows/fearless-with-jason-whitlock", + "shows/glenn-tv", + "shows/kibbe-on-liberty", + "shows/live-free-with-josh-howerton", + "shows/making-the-argument-with-nick-freitas", + "shows/pat-gray-unleashed", + "shows/relatable", + "shows/rufo-lomez", + "shows/sara-gonzales-unfiltered", + "shows/steve-deace-show", + "shows/strange-encounters", + "shows/stu-and-dave-do-america", + "shows/the-auron-macintyre-show", + "shows/the-coverup", + "shows/glenn-beck-podcast", + "shows/the-glenn-beck-program", + "shows/the-john-doyle-show", + "shows/the-liz-wheeler-show", + "shows/the-rick-burgess-show", + "shows/zero-hour", + "contributors", + "jan-6-truth" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "apps" + "x-example": "news" } ], "produces": [ @@ -527515,16 +610578,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get TechCrunch category headlines", + "summary": "Get Blaze Media section headlines", "tags": [ - "TechCrunch" + "TheBlaze" ] } }, - "/techcrunch/news": { + "/theblaze/news": { "get": { - "description": "Returns the latest TechCrunch top stories from its home feed. Takes no parameters. Each item has its title, URL, summary, publication time and author name.", - "operationId": "techcrunch-news", + "description": "Returns the latest site-wide stories from TheBlaze (Blaze Media), up to 30 items, covering news and opinion. Each item has a headline, canonical URL, publication time, byline, summary and image URL when published. It takes no parameters.", + "operationId": "theblaze-news", "produces": [ "application/json" ], @@ -527535,12 +610598,6 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -527553,16 +610610,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get TechCrunch top stories", + "summary": "Get Blaze Media top stories", "tags": [ - "TechCrunch" + "TheBlaze" ] } }, - "/techcrunch/sections": { + "/theblaze/sections": { "get": { - "description": "Lists the 22 TechCrunch categories that `techcrunch-headlines` accepts, taken from the site's primary navigation dropdown. Each entry has a stable `slug`, a display `name` and the category's feed `url`. For example, `artificial-intelligence` is named AI.", - "operationId": "techcrunch-sections", + "description": "Returns all verified article-bearing editorial and show sections accepted by the headlines endpoint. The contributors collection is included; the off-site Profile feed is excluded.", + "operationId": "theblaze-sections", "produces": [ "application/json" ], @@ -527572,6 +610629,12 @@ "schema": { "$ref": "#/definitions/publicnews.sectionsResponseDoc" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -527579,24 +610642,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get TechCrunch categories", + "summary": "List Blaze Media sections", "tags": [ - "TechCrunch" + "TheBlaze" ] } }, - "/techradar/article": { + "/thebodyshop/collections": { "get": { - "description": "Returns a TechRadar article by canonical `url` on `techradar.com`: title, description, section, authors, publication and update times, lead image, the body `paragraphs` and a `paywalled` flag.", - "operationId": "techradar-article", + "consumes": [ + "application/json" + ], + "description": "Returns collections from The Body Shop (https://www.thebodyshop.com). The storefront URL is fixed. Valid empty result pages return `200` with an empty collections array.", + "operationId": "thebodyshop-collections", "parameters": [ { - "description": "Canonical TechRadar article URL", + "description": "1-based page, defaults to 1", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.techradar.com/audio/wireless-headphones/sonos-ace-ultra-review" + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Maximum collections, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -527606,7 +610678,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" } }, "400": { @@ -527615,8 +610687,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -527633,37 +610705,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get TechRadar article content", + "summary": "List The Body Shop collections", "tags": [ - "TechRadar" + "The Body Shop" ] } }, - "/techradar/author": { + "/thebodyshop/collections/{handle}/products": { "get": { - "description": "Returns a TechRadar author's profile, looked up by `slug` (for example `tom-power`) or canonical `url`, which may end in `/page/`; exactly one is required. `page` (1-based, default 1) overrides any page in `url`. The response has the name, `job_title`, biography, social links, one page of articles and `has_next_page`.", - "operationId": "techradar-author", + "consumes": [ + "application/json" + ], + "description": "Returns products from one The Body Shop (https://www.thebodyshop.com) collection. The storefront URL is fixed; `handle` is the collection's URL slug.", + "operationId": "thebodyshop-collection-products", "parameters": [ { - "description": "Author slug, e.g. tom-power", - "in": "query", - "name": "slug", + "description": "Collection handle", + "in": "path", + "name": "handle", + "required": true, "type": "string", - "x-example": "tom-power" + "x-example": "collection-handle" }, { - "description": "Canonical techradar.com/author/ URL, optionally with a /page/ segment; alternative to slug", + "description": "1-based page, defaults to 1", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.techradar.com/author/tom-power" + "name": "page", + "type": "integer", + "x-example": 1 }, { - "default": 1, - "description": "1-based page number; overrides any page number in url", + "description": "Maximum products, defaults to 50 and supports up to 250", "in": "query", - "name": "page", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -527673,7 +610749,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.techradarAuthorResponseDoc" + "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" } }, "400": { @@ -527688,6 +610764,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -527700,51 +610782,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get a TechRadar author profile", + "summary": "List The Body Shop collection products", "tags": [ - "TechRadar" + "The Body Shop" ] } }, - "/techradar/headlines": { + "/thebodyshop/pages": { "get": { - "description": "Returns the latest TechRadar stories for one section hub. `section` is required and takes one of 25 slugs such as `computing`, `phones`, `audio`, `gaming`, `deals`, `reviews`, `news` or `vpn`. Each item has its title, URL, summary, publication time, author and image.", - "operationId": "techradar-headlines", + "consumes": [ + "application/json" + ], + "description": "Lists The Body Shop static pages, 50 per request by default (`limit` up to 250), with `page` starting at 1. Each page has its handle, title, URL, plain-text content and timestamps. An empty result is a normal 200. When `transport_mode` is `ssr_embedded`, items carry only `handle`, `url` and `updated_at`.", + "operationId": "thebodyshop-pages", "parameters": [ { - "description": "TechRadar section slug", - "enum": [ - "ai-platforms-assistants", - "audio", - "best", - "cameras", - "computing", - "deals", - "gaming", - "health-fitness", - "home", - "how-to", - "how-to-watch", - "news", - "opinion", - "phones", - "pro", - "reviews", - "seasonal-sales", - "streaming", - "tablets", - "tech", - "tech-events", - "televisions", - "vehicle-tech", - "versus", - "vpn" - ], + "description": "1-based page, defaults to 1", "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "ai-platforms-assistants" + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Maximum static pages, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -527754,7 +610818,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/shopifybrands.pagesResponseDoc" } }, "400": { @@ -527763,6 +610827,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -527775,16 +610845,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get TechRadar section headlines", + "summary": "List The Body Shop static pages", "tags": [ - "TechRadar" + "The Body Shop" ] } }, - "/techradar/news": { + "/thebodyshop/pages/{handle}": { "get": { - "description": "Returns TechRadar's latest top stories across the site. Takes no parameters, and `techradar-headlines` narrows by section instead. Each item has its title, URL, summary, publication time, author and image.", - "operationId": "techradar-news", + "consumes": [ + "application/json" + ], + "description": "Returns one The Body Shop static page by its `handle`: id, title, URL, plain-text `content` and the created, published and updated timestamps. Page text is cleaned, not raw HTML. An unknown handle returns 404. When the reduced form is served, `transport_mode` is `ssr_embedded` and `id` is omitted.", + "operationId": "thebodyshop-page", + "parameters": [ + { + "description": "Page handle", + "in": "path", + "name": "handle", + "required": true, + "type": "string", + "x-example": "page-handle" + } + ], "produces": [ "application/json" ], @@ -527792,7 +610875,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/shopifybrands.pageResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -527813,16 +610908,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get TechRadar top stories", + "summary": "Get a The Body Shop static page", "tags": [ - "TechRadar" + "The Body Shop" ] } }, - "/techradar/sections": { + "/thebodyshop/products": { "get": { - "description": "Lists the 25 top-level TechRadar sections that `techradar-headlines` accepts, such as `computing`, `phones`, `best`, `deals` and `how-to`. Each entry has a `slug`, a display `name` and the section page `url`.", - "operationId": "techradar-sections", + "consumes": [ + "application/json" + ], + "description": "Returns products from The Body Shop's (https://www.thebodyshop.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", + "operationId": "thebodyshop-products", + "parameters": [ + { + "description": "1-based page, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Maximum products, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 + } + ], "produces": [ "application/json" ], @@ -527830,7 +610944,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/shopifybrands.productsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -527839,27 +610971,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get TechRadar sections", + "summary": "List The Body Shop products", "tags": [ - "TechRadar" + "The Body Shop" ] } }, - "/telegram/bot": { + "/thebodyshop/products/{handle}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a public Telegram bot's profile from its t.me page: name, verified flag, description, avatar link and, when Telegram shows it, the number of monthly users. username is the bot's public username, with or without a leading @ or a t.me URL prefix. A channel, group, person's account or invite link is reported as such so you can use the right endpoint; an unknown username returns not found. Only public profile text is read.", - "operationId": "telegram-bot", + "description": "Returns product detail for one The Body Shop (https://www.thebodyshop.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", + "operationId": "thebodyshop-product", "parameters": [ { - "description": "Bot username, with or without a leading @ or a t.me URL prefix", - "in": "query", - "name": "username", + "description": "Product handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "notcoin_bot" + "x-example": "product-handle" } ], "produces": [ @@ -527869,7 +611001,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/telegram.botResponseDoc" + "$ref": "#/definitions/shopifybrands.productResponseDoc" } }, "400": { @@ -527902,27 +611034,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get a public Telegram bot's profile", + "summary": "Get a The Body Shop product", "tags": [ - "Telegram" + "The Body Shop" ] } }, - "/telegram/channel": { + "/thebodyshop/products/{handle}/recommendations": { "get": { "consumes": [ "application/json" ], - "description": "Returns the public profile of a Telegram channel: title, description, verification badge, subscriber count, and the photo, video, file and link counters shown on the channel's public web preview (t.me/s/{username}). username is the channel's public username, with or without a leading @ or a t.me link; private channels, groups, bots, user accounts and invite links are not supported and return an error that says which kind of name was given. subscribers is the exact figure when available; subscribers_approximate is true when only the preview's abbreviated figure (for example 10.3M) could be read. The photo, video, file and link counters are the preview's abbreviated figures and are approximate for large channels. Only public content is read, no media files are returned, and Telegram's terms restrict using platform content to train AI or machine-learning systems, so results must not be used for that purpose.", - "operationId": "telegram-channel", + "description": "Returns recommended products for one The Body Shop (https://www.thebodyshop.com) product handle. The storefront URL is fixed server-side.", + "operationId": "thebodyshop-product-recommendations", "parameters": [ { - "description": "Public channel username, with or without @ or a t.me link", - "in": "query", - "name": "username", + "description": "Product handle", + "in": "path", + "name": "handle", "required": true, "type": "string", - "x-example": "durov" + "x-example": "product-handle" + }, + { + "description": "Maximum products, defaults to 10 and supports up to 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 + }, + { + "description": "Recommendation intent. Allowed values: related, complementary", + "enum": [ + "related", + "complementary" + ], + "in": "query", + "name": "intent", + "type": "string", + "x-example": "related" } ], "produces": [ @@ -527932,7 +611082,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/telegram.channelResponseDoc" + "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" } }, "400": { @@ -527965,41 +611115,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a public Telegram channel profile", + "summary": "List The Body Shop product recommendations", "tags": [ - "Telegram" + "The Body Shop" ] } }, - "/telegram/channel-posts": { + "/thebodyshop/search/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of up to 20 posts from a public Telegram channel's web preview (t.me/s/{username}), newest first. Each post has its id, link, text, links found in the text, publish time, edited flag, view count, author signature, forwarded-from and reply references, photo and video thumbnails, link-preview card, and reaction tallies. Page backwards by passing the previous response's next_before as before; has_more is false and next_before is omitted on the last page. Pass query to search inside the channel instead of browsing; search pages use the same before cursor. A search with no matches returns an empty posts list. Views are the preview's abbreviated figures (for example 32.4K) and are approximate above 1,000. Media entries carry thumbnail references only, never playable file URLs. Polls, documents, voice notes and stickers appear as an unsupported media entry. Private channels, groups, bots, user accounts and channels that disabled their web preview are not supported. Telegram's terms restrict using platform content to train AI or machine-learning systems, so results must not be used for that purpose.", - "operationId": "telegram-channel-posts", + "description": "Returns products, collections, and query suggestions from The Body Shop's (https://www.thebodyshop.com) predictive search. The storefront URL is fixed server-side.", + "operationId": "thebodyshop-search-suggest", "parameters": [ { - "description": "Public channel username, with or without @ or a t.me link", + "description": "Search query", "in": "query", - "name": "username", + "name": "q", "required": true, "type": "string", - "x-example": "durov" + "x-example": "wool" }, { - "description": "Return only posts with an id lower than this; use the previous response's next_before. Omit for the newest page", + "description": "Comma-separated suggestion types. Allowed values: product, collection, query", "in": "query", - "name": "before", - "type": "integer", - "x-example": 531 + "name": "types", + "type": "string", + "x-example": "product,collection,query" }, { - "description": "Search term to look for inside the channel, up to 128 characters", + "description": "Maximum results per type, defaults to 10 and supports up to 20", "in": "query", - "name": "query", - "type": "string", - "x-example": "telegram" + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -528009,7 +611159,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/telegram.channelPostsResponseDoc" + "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" } }, "400": { @@ -528018,12 +611168,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -528042,27 +611186,42 @@ "ApiKeyAuth": [] } ], - "summary": "List posts from a public Telegram channel", + "summary": "Get The Body Shop search suggestions", "tags": [ - "Telegram" + "The Body Shop" ] } }, - "/telegram/group": { + "/thebodyshop/sitemap/urls": { "get": { "consumes": [ "application/json" ], - "description": "Returns the public profile of a Telegram group from its public t.me page: title, description, member count and, when Telegram shows it, the number of members online. username is the group's public username, with or without a leading @ or a t.me link. Only the profile is available for groups; their messages are not readable here. Channels (use telegram-channel), bots, user accounts and invite links are not supported and return an error that says which kind of name was given; a username nobody owns returns not found. online is 0 when Telegram shows no online figure. avatar_url is omitted for groups without a profile photo. Only public content is read, and Telegram's terms restrict using platform content to train AI or machine-learning systems, so results must not be used for that purpose.", - "operationId": "telegram-group", + "description": "Returns capped URL entries from The Body Shop's (https://www.thebodyshop.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", + "operationId": "thebodyshop-sitemap-urls", "parameters": [ { - "description": "Public group username, with or without @ or a t.me link", + "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", + "enum": [ + "all", + "products", + "collections", + "pages", + "blogs", + "agentic_discovery", + "other" + ], "in": "query", - "name": "username", - "required": true, + "name": "type", "type": "string", - "x-example": "python" + "x-example": "products" + }, + { + "description": "Maximum URL entries, defaults to 50 and supports up to 250", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 50 } ], "produces": [ @@ -528072,7 +611231,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/telegram.groupResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" } }, "400": { @@ -528081,12 +611240,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -528105,37 +611258,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a public Telegram group profile", + "summary": "List The Body Shop sitemap URLs", "tags": [ - "Telegram" + "The Body Shop" ] } }, - "/telegram/post": { + "/thebodyshop/sitemaps": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single post from a public Telegram channel by username and post id, as Telegram's public embed widget shows it: text, links, publish time, edited flag, views, author signature, forwarded-from and reply references, photo and video thumbnails, link-preview card, and reaction tallies. The post id is the number at the end of a post link (t.me/durov/531 has id 531) or the id field of telegram-channel-posts. A post that does not exist, was deleted, or belongs to a channel that is not public returns not found. Telegram's terms restrict using platform content to train AI or machine-learning systems, so results must not be used for that purpose.", - "operationId": "telegram-post", - "parameters": [ - { - "description": "Public channel username, with or without @ or a t.me link", - "in": "query", - "name": "username", - "required": true, - "type": "string", - "x-example": "durov" - }, - { - "description": "Post id, from a post link or telegram-channel-posts' own posts[].id field", - "in": "query", - "name": "id", - "required": true, - "type": "integer", - "x-example": 531 - } - ], + "description": "Returns child sitemap URLs from The Body Shop's (https://www.thebodyshop.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", + "operationId": "thebodyshop-sitemaps", "produces": [ "application/json" ], @@ -528143,7 +611278,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/telegram.postResponseDoc" + "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" } }, "400": { @@ -528152,8 +611287,49 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List The Body Shop sitemaps", + "tags": [ + "The Body Shop" + ] + } + }, + "/thebodyshop/store": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns storefront metadata for The Body Shop (https://www.thebodyshop.com). The storefront URL is fixed server-side, so no `url` parameter is accepted.", + "operationId": "thebodyshop-store", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/shopifybrands.storeResponseDoc" + } + }, + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } @@ -528176,24 +611352,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get one public Telegram channel post", + "summary": "Get The Body Shop store metadata", "tags": [ - "Telegram" + "The Body Shop" ] } }, - "/telegraph/article": { + "/thedailybeast/article": { "get": { - "description": "Returns one The Telegraph article by `url`, a canonical HTTPS article link. The response has the title, description, section, authors, publication and update times, image URL, body `paragraphs` and a `paywalled` flag. Access is intermittent, and subscriber-only or blocked pages return an error.", - "operationId": "telegraph-article", + "description": "Returns one The Daily Beast article by its canonical `url`, either a root-level slug or one under a single content vertical such as `obsessed`. The response has the title, description, section, authors, publication and update times, lead image URL, body `paragraphs` and a `paywalled` flag. Digest or index pages are not articles and return an error.", + "operationId": "thedailybeast-article", "parameters": [ { - "description": "Canonical The Telegraph article URL", + "description": "Canonical The Daily Beast article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.telegraph.co.uk/world-news/example/" + "x-example": "https://www.thedailybeast.com/murdoch-paper-predicts-trumps-panicked-plan-will-backfire/" } ], "produces": [ @@ -528230,24 +611406,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Telegraph article content", + "summary": "Get The Daily Beast article content", "tags": [ - "The Telegraph" + "The Daily Beast" ] } }, - "/telegraph/author": { + "/thedailybeast/author": { "get": { - "description": "Returns a Telegraph author's profile by `url`, a canonical `telegraph.co.uk/authors////` link: name, job title, bio and recent articles with title, URL, excerpt and ISO-8601 `published_at`. `job_title` can be empty for contributors without a masthead credit.", - "operationId": "telegraph-author", + "description": "Returns one The Daily Beast reporter's public profile: name, job title, biography, headshot, social link, and their recent articles, from a canonical author URL.", + "operationId": "thedailybeast-author", "parameters": [ { - "description": "Canonical Telegraph author URL", + "description": "Canonical thedailybeast.com/author/ URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.telegraph.co.uk/authors/c/ck-co/con-coughlin/" + "x-example": "https://www.thedailybeast.com/author/isabel-van-brugen/" } ], "produces": [ @@ -528257,7 +611433,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.telegraphAuthorResponseDoc" + "$ref": "#/definitions/publicnews.dailyBeastAuthorResponseDoc" } }, "400": { @@ -528284,39 +611460,103 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Telegraph author profile", + "summary": "Get a The Daily Beast author profile", "tags": [ - "The Telegraph" + "The Daily Beast" ] } }, - "/telegraph/headlines": { + "/thedailybeast/headlines": { "get": { - "description": "Returns the current headlines for one The Telegraph section. `section` is required and takes one of `uk-news`, `world-news`, `politics`, `business`, `finance`, `technology`, `sport`, `culture`, `travel`, `lifestyle`, `health`, `science` or `opinion`. Each item has its title and URL.", - "operationId": "telegraph-headlines", + "description": "Returns the current headlines of one The Daily Beast section. `section` is required and takes a slug such as `politics`, `politics/opinion`, `obsessed/reviews`, `scouted/home` or `world/china`. Each item can carry its title, URL, summary, author, publication time, lead image and `type`, and the response echoes the `section`.", + "operationId": "thedailybeast-headlines", "parameters": [ { - "description": "The Telegraph section slug", + "description": "The Daily Beast section slug", "enum": [ - "uk-news", - "world-news", - "politics", - "business", - "finance", - "technology", - "sport", - "culture", - "travel", "lifestyle", - "health", - "science", - "opinion" + "lifestyle/body", + "lifestyle/face", + "lifestyle/wellness", + "lifestyle/hair", + "lifestyle/style", + "travel", + "entertainment", + "entertainment/music", + "entertainment/tv", + "entertainment/movies", + "entertainment/comedy", + "entertainment/awards-shows", + "archive", + "media", + "tech", + "arts-and-culture", + "arts-and-culture/theater", + "arts-and-culture/royalist", + "arts-and-culture/fashion", + "arts-and-culture/books", + "innovation", + "innovation/science", + "obsessed", + "obsessed/shop", + "obsessed/hot-takes", + "obsessed/reviews", + "obsessed/recaps", + "obsessed/what-to-watch", + "obsessed/trailers", + "obsessed/interviews", + "obsessed/industry", + "obsessed/celebrity", + "obsessed/media", + "obsessed/media/shows", + "obsessed/media/movies", + "obsessed/media/music", + "obsessed/media/books", + "obsessed/rating", + "obsessed/rating/see", + "obsessed/rating/skip", + "obsessed/the-last-laugh", + "obsessed/obsessed-podcast", + "obsessed/obsessed-newsletter", + "politics", + "politics/biden-world", + "politics/congress", + "politics/elections", + "politics/national-security", + "politics/opinion", + "politics/trumpland", + "politics/pay-dirt", + "politics/trail-mix", + "politics/the-new-abnormal", + "scouted", + "scouted/fitness", + "scouted/wellness", + "scouted/beauty", + "scouted/bedroom", + "scouted/clothing", + "scouted/face-masks", + "scouted/home", + "scouted/kitchen", + "scouted/outdoors", + "scouted/technology", + "scouted/new-kids-on-the-block", + "scouted/the-case-for", + "scouted/thisthat", + "us-news", + "us-news/crime-and-justice", + "us-news/identities", + "us-news/sports", + "world", + "world/china", + "world/middle-east", + "world/europe", + "world/russia" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "uk-news" + "x-example": "lifestyle" } ], "produces": [ @@ -528347,16 +611587,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Telegraph section headlines", + "summary": "Get The Daily Beast section headlines", "tags": [ - "The Telegraph" + "The Daily Beast" ] } }, - "/telegraph/news": { + "/thedailybeast/news": { "get": { - "description": "Returns the current top stories from The Telegraph. It takes no parameters. Each item has its title, URL and, where available, a summary, author, publication time, image URL and `type`. It can return an error when The Telegraph declines the request.", - "operationId": "telegraph-news", + "description": "Returns the current top stories from The Daily Beast. It takes no parameters. Each item has its title, URL, summary, publication time, author and lead image, so it is a quick front-page view; use the headlines endpoint with a `section` slug for one category.", + "operationId": "thedailybeast-news", "produces": [ "application/json" ], @@ -528379,16 +611619,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Telegraph top stories", + "summary": "Get The Daily Beast top stories", "tags": [ - "The Telegraph" + "The Daily Beast" ] } }, - "/telegraph/sections": { + "/thedailybeast/sections": { "get": { - "description": "Lists the The Telegraph sections that the headlines endpoint accepts, such as `uk-news`, `world-news`, `politics`, `finance`, `culture` and `opinion`. Each entry has a `slug`, a display `name` and a section `url`.", - "operationId": "telegraph-sections", + "description": "Lists the sections of The Daily Beast that the headlines endpoint accepts, both top-level categories such as `politics` and `world` and child sub-sections such as `politics/opinion` and `world/middle-east`. Each entry has a `slug`, a display `name` and the section `url`.", + "operationId": "thedailybeast-sections", "produces": [ "application/json" ], @@ -528405,27 +611645,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Telegraph sections", + "summary": "Get The Daily Beast sections", "tags": [ - "The Telegraph" + "The Daily Beast" ] } }, - "/tes/jobs/detail": { + "/thehill/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns detail for one job posting by its numeric id (the id field returned by tes-job-search): employer, location, salary, contract terms/types, dates, and application contact/URL, plus a short excerpt of the listing description rather than the full long-form HTML copy.", - "operationId": "tes-job-detail", + "description": "Returns one The Hill article by `url`, which must be a canonical HTTPS `thehill.com` article link containing a numeric article id. The response has the title, description, section, authors, publication and update times, lead image URL, body `paragraphs` and a `paywalled` flag.", + "operationId": "thehill-article", "parameters": [ { - "description": "Tes job id", + "description": "Canonical The Hill article URL", "in": "query", - "name": "id", + "name": "url", "required": true, "type": "string", - "x-example": "2340998" + "x-example": "https://thehill.com/policy/1234567-example/" } ], "produces": [ @@ -528435,7 +611672,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tes.jobDetailResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -528450,12 +611687,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -528468,27 +611699,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Tes teaching job", + "summary": "Get The Hill article content", "tags": [ - "Tes" + "The Hill" ] } }, - "/tes/jobs/employer": { + "/thehill/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns detail for one jobs employer profile by its numeric id (the trailing id in tes-job-detail's employer_url field, e.g. .../jobs/employer/epsom-college-1039424 -- the 1039424): name, location, school type/phase/funding status/gender/age range, an about description, its postal address, and every currently-open position listed on the employer's own profile page (id, title, url -- call tes-job-detail with each id for the full posting).", - "operationId": "tes-job-employer", + "description": "Returns a The Hill author's profile by `url`, a canonical `thehill.com/author//` link: name, job title, bio, image URL and recent articles with title, URL, category and category URL. `job_title` and `image_url` may be missing, and each article's `published_at` is relative text such as `10 hours ago`, not a timestamp.", + "operationId": "thehill-author", "parameters": [ { - "description": "Tes employer id", + "description": "Canonical The Hill author URL", "in": "query", - "name": "id", + "name": "url", "required": true, "type": "string", - "x-example": "1039424" + "x-example": "https://thehill.com/author/alexander-bolton/" } ], "produces": [ @@ -528498,7 +611726,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tes.employerDetailResponseDoc" + "$ref": "#/definitions/publicnews.theHillAuthorResponseDoc" } }, "400": { @@ -528513,12 +611741,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -528531,136 +611753,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Tes jobs employer profile", + "summary": "Get a The Hill author profile", "tags": [ - "Tes" + "The Hill" ] } }, - "/tes/jobs/search": { + "/thehill/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Tes's (tes.com) teaching-jobs board. Returns listing facts (title, employer, location, salary, contract terms/types) plus a short excerpt of the listing description, not the full long-form job-description copy, and the same live faceted-search breakdown (position/subject/workplace category trees with counts, plus contract type/term counts) the real search page renders as its filter sidebar. location is a free-text place name (a UK town/city, an international city, or a bare country name) resolved to coordinates; omit for Tes's own default market, \"United Kingdom\". radius_miles selects the search radius around location. contract_type and contract_term are validated against Tes's own small, closed label sets. position, subject, and workplace are comma-separated filters -- Tes's own category labels are numerous and can change, so read a prior response's own facets.positions[].value (and facets.positions[].children[].value)/facets.subjects[].value/facets.workplaces[].children[].value for the live, current set rather than guessing. salary_min filters to jobs with an advertised salary at or above that amount (in the searched market's local currency); Tes's own filter panel offers only a minimum, no maximum.", - "operationId": "tes-job-search", + "description": "Returns the current headlines for one The Hill section. `section` is required and takes one of 19 slugs, including `home`, `policy`, `business`, `senate`, `national-security` and `technology`. Each item has its title and URL, plus summary, author, publication time and image when the outlet provides them, and the response echoes the `section`.", + "operationId": "thehill-headlines", "parameters": [ { - "description": "Job title or keyword", - "in": "query", - "name": "keywords", - "type": "string", - "x-example": "maths teacher" - }, - { - "default": "United Kingdom", - "description": "Free-text place name resolved via Tes's own location autocomplete", - "in": "query", - "name": "location", - "type": "string", - "x-example": "Manchester" - }, - { - "default": 30, - "description": "Search radius around location, in miles", - "enum": [ - 3, - 5, - 10, - 15, - 20, - 30, - 50, - 70, - 100, - 500 - ], - "in": "query", - "name": "radius_miles", - "type": "integer" - }, - { - "default": 1, - "description": "One-based page", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "page", - "type": "integer" - }, - { - "default": 20, - "description": "Results per page", - "in": "query", - "maximum": 50, - "minimum": 1, - "name": "page_size", - "type": "integer" - }, - { - "default": "relevance", - "description": "Sort order", - "enum": [ - "relevance", - "newest", - "distance" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Contract type", - "enum": [ - "Full Time", - "Part Time" - ], - "in": "query", - "name": "contract_type", - "type": "string" - }, - { - "description": "Contract term", + "description": "The Hill RSS section slug", "enum": [ - "Permanent", - "Fixed Term", - "Casual", - "Maternity Cover", - "Temporary", - "Supply" + "home", + "homenews", + "policy", + "business", + "opinion", + "healthcare", + "campaign", + "national-security", + "senate", + "house", + "administration", + "regulation", + "media", + "defense", + "technology", + "transportation", + "international", + "economy", + "policy-healthcare" ], "in": "query", - "name": "contract_term", - "type": "string" - }, - { - "description": "Comma-separated position category label(s) -- see the endpoint markdown", - "in": "query", - "name": "position", - "type": "string", - "x-example": "Teaching and Lecturing" - }, - { - "description": "Comma-separated subject label(s) -- see the endpoint markdown", - "in": "query", - "name": "subject", - "type": "string", - "x-example": "Mathematics" - }, - { - "description": "Comma-separated workplace/organisation-type label(s) -- see the endpoint markdown", - "in": "query", - "name": "workplace", + "name": "section", + "required": true, "type": "string", - "x-example": "Secondary" - }, - { - "description": "Minimum advertised salary, in the searched market's local currency", - "in": "query", - "minimum": 0, - "name": "salary_min", - "type": "integer", - "x-example": 28000 + "x-example": "home" } ], "produces": [ @@ -528670,7 +611801,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tes.jobSearchResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -528679,12 +611810,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -528697,45 +611822,16 @@ "ApiKeyAuth": [] } ], - "summary": "Search Tes teaching jobs", + "summary": "Get The Hill section headlines", "tags": [ - "Tes" + "The Hill" ] } }, - "/tes/resources/detail": { + "/thehill/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns detail for one teaching resource by its numeric id (the id field returned by tes-resource-search). Descriptive facts (title, subject, age range, resource type, author, price, rating, licence label), a per-file attachment list (file type, size, and a preview thumbnail -- metadata only), and the most recent page of reviews are returned -- not the downloadable resource file itself.", - "operationId": "tes-resource-detail", - "parameters": [ - { - "description": "Tes resource id", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "13463100" - }, - { - "default": "GB", - "description": "Storefront market for pricing/currency", - "enum": [ - "GB", - "US", - "AU", - "IE", - "CA", - "NZ", - "UN" - ], - "in": "query", - "name": "country", - "type": "string" - } - ], + "description": "Returns the current top stories from The Hill. It takes no parameters. Each item has its title, URL and, where the outlet gives them, a summary, author, publication time, image URL and `type`. Use the headlines endpoint to read one section instead.", + "operationId": "thehill-news", "produces": [ "application/json" ], @@ -528743,19 +611839,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tes.resourceDetailResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -528776,107 +611860,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Tes teaching resource", + "summary": "Get The Hill top stories", "tags": [ - "Tes" + "The Hill" ] } }, - "/tes/resources/search": { + "/thehill/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Tes's (tes.com) teaching-resources marketplace. Returns listing facts (title, author, price, rating, downloads) -- not full listing descriptions. query is optional: omit it (alone, or combined with key_stage/subject/on_sale) for pure filter-driven or fully unfiltered browsing. sort mirrors the real search page's own Sort by dropdown; key_stage and subject mirror its left-hand Refine by filters (both closed, validated enums taken from Tes's own facet taxonomy, and always resolved against Tes's own single GB-taxonomy regardless of country). country controls result currency/localisation only (confirmed live for all seven values); it does not change which key_stage/subject values are valid.", - "operationId": "tes-resource-search", - "parameters": [ - { - "description": "Search keywords -- omit for filter-driven or unfiltered browsing", - "in": "query", - "name": "query", - "type": "string", - "x-example": "phonics" - }, - { - "default": "GB", - "description": "Storefront market", - "enum": [ - "GB", - "US", - "AU", - "IE", - "CA", - "NZ", - "UN" - ], - "in": "query", - "name": "country", - "type": "string" - }, - { - "default": 1, - "description": "One-based page", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "page", - "type": "integer" - }, - { - "default": 20, - "description": "Results per page", - "in": "query", - "maximum": 50, - "minimum": 1, - "name": "page_size", - "type": "integer" - }, - { - "default": "relevance", - "description": "Sort order", - "enum": [ - "relevance", - "newest", - "highest_rated", - "lowest_price" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Filter by age range", - "enum": [ - "3-5", - "5-7", - "7-11", - "11-14", - "14-16", - "16+", - "age_not_applicable" - ], - "in": "query", - "name": "key_stage", - "type": "string" - }, - { - "description": "Filter by subject -- one of Tes's own top-level subject facet labels; see the endpoint markdown for the full list (two of the 29 values contain a comma, which is why this parameter is not expressed as a Swagger Enums() list)", - "enum": [ - "" - ], - "in": "query", - "name": "subject", - "type": "string", - "x-example": "English" - }, - { - "default": false, - "description": "Filter to discounted resources only", - "in": "query", - "name": "on_sale", - "type": "boolean" - } - ], + "description": "Lists the 19 The Hill section slugs that the headlines endpoint accepts, such as `home`, `policy`, `senate`, `defense` and `technology`. Each entry has the section `slug`, its display `name` and its `url`.", + "operationId": "thehill-sections", "produces": [ "application/json" ], @@ -528884,25 +611877,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tes.resourceSearchResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -528911,43 +611886,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search Tes teaching resources", + "summary": "Get The Hill RSS sections", "tags": [ - "Tes" + "The Hill" ] } }, - "/tes/resources/shop": { + "/thehindu/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns detail for one teaching-resources author/seller shop by its username (from tes-resource-search/tes-resource-detail's author field, or the trailing path segment of author_url): display name, average rating, upload/view/download counts, a bio, and a page of that author's resource listing (id, title, price, thumbnail -- call tes-resource-detail with each id for subject/age-range/resource-type/rating/description). subject narrows the listing to one of the subject tabs shown on the shop's own page; these vary per author and are not a curated enum.", - "operationId": "tes-resource-shop", + "description": "Returns public The Hindu article metadata and body paragraphs from a canonical article URL. A story The Hindu marks subscriber-only returns a permission error instead of a body.", + "operationId": "thehindu-article", "parameters": [ { - "description": "Tes author username", + "description": "Canonical The Hindu article URL", "in": "query", - "name": "username", + "name": "url", "required": true, "type": "string", - "x-example": "jenpower16" - }, - { - "description": "Subject tab to filter the listing to -- see the shop's own page for the current set", - "in": "query", - "name": "subject", - "type": "string", - "x-example": "Whole school" - }, - { - "default": 1, - "description": "One-based page", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "page", - "type": "integer" + "x-example": "https://www.thehindu.com/news/national/kerala/example-article-slug/article71505134.ece" } ], "produces": [ @@ -528957,7 +611913,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tes.resourceShopResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -528966,14 +611922,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Forbidden", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -528990,45 +611946,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Tes teaching-resources author shop", + "summary": "Get The Hindu article content", "tags": [ - "Tes" + "The Hindu" ] } }, - "/tes/schools/search": { + "/thehindu/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Tes's (tes.com) public Schools Directory by school name or location. Returns listing facts (name, logo, a short description, address) for each matching school/employer. Each result's id is the same employer id tes-job-employer accepts, so a caller can go straight from a name/location search to a full employer profile (school type/phase/funding status/gender/age range, and its currently-open positions) without first needing a job posting to discover the id.", - "operationId": "tes-school-search", + "description": "Returns a The Hindu author's byline metadata, biography, contact/social links, and their most recent articles from a canonical author URL.", + "operationId": "thehindu-author", "parameters": [ { - "description": "School name or location", + "description": "Canonical The Hindu author URL", "in": "query", - "name": "query", + "name": "url", "required": true, "type": "string", - "x-example": "Epsom" - }, - { - "default": 1, - "description": "One-based page", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "page", - "type": "integer" - }, - { - "default": 20, - "description": "Results per page", - "in": "query", - "maximum": 50, - "minimum": 1, - "name": "page_size", - "type": "integer" + "x-example": "https://www.thehindu.com/profile/author/devdutt-pattanaik-3563/" } ], "produces": [ @@ -529038,7 +611973,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tes.schoolSearchResponseDoc" + "$ref": "#/definitions/publicnews.theHinduAuthorResponseDoc" } }, "400": { @@ -529047,8 +611982,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -529065,27 +612000,94 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Tes Schools Directory", + "summary": "Get a The Hindu author profile", "tags": [ - "Tes" + "The Hindu" ] } }, - "/tesla-jobs/job": { + "/thehindu/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Tesla Careers posting by its numeric job id (the `id` field returned by the list endpoint).", - "operationId": "tesla-jobs-job", + "description": "Returns the current headlines for one The Hindu section. `section` is required and takes a slug such as `news-national`, `opinion-editorial`, `business-markets`, `sport-cricket` or `sci-tech-health`. Items carry the title, URL, summary, author, publication time and image, and the response echoes the `section`.", + "operationId": "thehindu-headlines", "parameters": [ { - "description": "Tesla job id", + "description": "The Hindu section slug", + "enum": [ + "news", + "news-national", + "news-international", + "news-states", + "news-cities", + "opinion", + "opinion-editorial", + "opinion-cartoon", + "opinion-columns", + "opinion-op-ed", + "opinion-interview", + "opinion-lead", + "opinion-letters", + "opinion-open-page", + "business", + "business-agri-business", + "business-economy", + "business-industry", + "business-markets", + "business-budget", + "sport", + "sport-cricket", + "sport-football", + "sport-hockey", + "sport-tennis", + "sport-athletics", + "sport-motorsport", + "sport-races", + "sport-other-sports", + "entertainment", + "entertainment-art", + "entertainment-dance", + "entertainment-movies", + "entertainment-music", + "entertainment-reviews", + "entertainment-theatre", + "data", + "sci-tech-health", + "sci-tech-science", + "sci-tech-technology", + "sci-tech-technology-gadgets", + "sci-tech-technology-internet", + "sci-tech-energy-and-environment", + "sci-tech-agriculture", + "education", + "education-careers", + "education-colleges", + "education-schools", + "life-and-style", + "life-and-style-fashion", + "life-and-style-fitness", + "life-and-style-homes-and-gardens", + "life-and-style-luxury", + "life-and-style-motoring", + "life-and-style-travel", + "society", + "society-faith", + "society-history-and-culture", + "books", + "books-books-authors", + "books-books-reviews", + "children", + "food", + "food-dining", + "food-features", + "food-guides", + "food-recipes", + "real-estate" + ], "in": "query", - "name": "id", + "name": "section", "required": true, "type": "string", - "x-example": "224501" + "x-example": "news" } ], "produces": [ @@ -529095,7 +612097,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/teslajobs.jobResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -529104,18 +612106,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -529128,49 +612118,16 @@ "ApiKeyAuth": [] } ], - "summary": "Tesla Jobs single posting", + "summary": "Get The Hindu section headlines", "tags": [ - "Tesla Jobs" + "The Hindu" ] } }, - "/tesla-jobs/list": { + "/thehindu/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Tesla's public careers site (tesla.com/careers) via its own careers-state JSON endpoint. Tesla's own endpoint always returns its entire global job dataset regardless of query parameters; this filters and paginates that snapshot server-side. Listings carry identity/department/location metadata only — call the job endpoint for the full description, responsibilities, and requirements.", - "operationId": "tesla-jobs-list", - "parameters": [ - { - "description": "Filter by title or department, case-insensitive substring match", - "in": "query", - "name": "query", - "type": "string", - "x-example": "software engineer" - }, - { - "description": "Filter by location, case-insensitive substring match", - "in": "query", - "name": "location", - "type": "string", - "x-example": "Palo Alto" - }, - { - "description": "Page number, 1-based", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Results per page, up to 100", - "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 20 - } - ], + "description": "Returns the current stories from The Hindu's Latest News listing. It takes no parameters. Each item has its title, URL and, where available, a summary, author, publication time, image URL and `type`. For a single desk such as cricket or business, use the headlines endpoint.", + "operationId": "thehindu-news", "produces": [ "application/json" ], @@ -529178,13 +612135,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/teslajobs.listResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -529205,24 +612156,50 @@ "ApiKeyAuth": [] } ], - "summary": "Tesla Jobs listing", + "summary": "Get The Hindu top stories", "tags": [ - "Tesla Jobs" + "The Hindu" ] } }, - "/theage/article": { + "/thehindu/sections": { "get": { - "description": "Returns one The Age article's public metadata and the body paragraphs an anonymous visitor's page request is served, from a canonical article URL. The Age runs a metered subscription paywall; the response reports it with is_accessible_for_free (the page's own declaration), paywalled (the page marks the story as subscriber content), and is_truncated (the page served a shortened preview, or no body at all, instead of the full story). Paywalls are never bypassed and body text is never fabricated. Video-only pages are rejected with a 400.", - "operationId": "theage-article", + "description": "Lists the The Hindu section slugs that the headlines endpoint accepts, covering news, opinion, business, sport, entertainment, sci-tech, education, life and style, society, books and food, for example `news-national`, `sport-cricket` and `food-recipes`. Each entry has a `slug`, `name` and `url`.", + "operationId": "thehindu-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The Hindu sections", + "tags": [ + "The Hindu" + ] + } + }, + "/thejournal/article": { + "get": { + "description": "Returns public TheJournal.ie article metadata and body paragraphs from a canonical article URL. Stories are served in full to anonymous readers, so paywalled is never set.", + "operationId": "thejournal-article", "parameters": [ { - "description": "Canonical The Age article URL", + "description": "Canonical TheJournal.ie article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.theage.com.au/politics/federal/albanese-once-criticised-rivals-for-abusing-this-power-just-look-at-him-now-20260925-p60zxu.html" + "x-example": "https://www.thejournal.ie/amazon-refunds-200-cheques-7170610-Sep2026/" } ], "produces": [ @@ -529232,7 +612209,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.theageArticleResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -529259,24 +612236,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Age article content", + "summary": "Get TheJournal.ie article content", "tags": [ - "The Age" + "TheJournal.ie" ] } }, - "/theage/author": { + "/thejournal/author": { "get": { - "description": "Returns an Age journalist's public profile -- name, short biography, headshot, contact email and social links where published -- plus their recent stories, from a canonical https://www.theage.com.au/by/- URL.", - "operationId": "theage-author", + "description": "Returns one TheJournal.ie author's public archive page: name, numeric author id, and the most recent articles the first page lists.", + "operationId": "thejournal-author", "parameters": [ { - "description": "Canonical The Age journalist URL", + "description": "Author slug, e.g. ottoline-spearman", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "ottoline-spearman" + }, + { + "description": "Canonical thejournal.ie/author// URL, optionally with the numeric author id; alternative to slug", "in": "query", "name": "url", - "required": true, "type": "string", - "x-example": "https://www.theage.com.au/by/chip-le-grand-p4yvib" + "x-example": "https://www.thejournal.ie/author/ottoline-spearman/9329/" } ], "produces": [ @@ -529286,7 +612269,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.theageAuthorResponseDoc" + "$ref": "#/definitions/publicnews.theJournalAuthorResponseDoc" } }, "400": { @@ -529313,122 +612296,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Age journalist profile", + "summary": "Get a TheJournal.ie author page", "tags": [ - "The Age" + "TheJournal.ie" ] } }, - "/theage/headlines": { + "/thejournal/headlines": { "get": { - "description": "Returns the current stories for one The Age section: title, canonical URL, summary, author, publication time, and image where the section lists them. section must be one of the slugs returned by /theage/sections; any other value is rejected with a 400 before The Age is contacted.", - "operationId": "theage-headlines", + "description": "Returns current headlines from one public TheJournal.ie section listing page, with the story type label, summary and image when the page shows them.", + "operationId": "thejournal-headlines", "parameters": [ { - "description": "Section slug from /theage/sections", + "description": "TheJournal.ie section slug", "enum": [ - "melbourne-news", - "national/victoria", + "irish", "politics", - "politics/federal", - "politics/victoria", - "politics/nsw", - "politics/queensland", - "politics/western-australia", + "international", "business", - "business/companies", - "business/markets", - "business/bullsnbears", - "business/the-economy", - "business/banking-and-finance", - "business/small-business", - "business/workplace", - "world", - "world/north-america", - "world/europe", - "world/asia", - "world/middle-east", - "world/south-america", - "world/africa", - "national", - "national/nsw", - "national/queensland", - "national/western-australia", - "opinion", - "property", - "property/news", - "property/living", - "sport", - "sport/afl", - "sport/cricket", - "sport/soccer", - "sport/racing", - "sport/tennis", - "sport/nrl", - "sport/rugby-union", - "sport/netball", - "sport/basketball", - "sport/motorsport", - "sport/cycling", - "sport/golf", - "sport/nfl", - "sport/athletics", - "sport/swimming", - "sport/boxing", - "goodfood", - "goodfood/melbourne-eating-out", - "goodfood/recipes", - "goodfood/tips-and-advice", - "goodfood/drinks", - "culture", - "culture/movies", - "culture/tv-and-radio", - "culture/music", - "culture/celebrity", - "culture/books", - "culture/comedy", - "culture/dance", - "culture/musicals", - "culture/opera", - "culture/theatre", - "culture/art-and-design", - "culture/live-reviews", - "lifestyle", - "lifestyle/health-and-wellness", - "lifestyle/fashion", - "lifestyle/life-and-relationships", - "lifestyle/beauty", - "traveller", - "traveller/inspiration/destination-guides", - "traveller/inspiration", - "traveller/reviews-and-advice", - "traveller/travel-news", - "good-weekend", - "sunday-life", - "money", - "money/super-and-retirement", - "money/investing", - "money/banking", - "money/borrowing", - "money/saving", - "money/tax", - "money/planning-and-budgeting", - "education", - "healthcare", + "tech", + "science", "environment", - "environment/conservation", - "environment/climate-change", - "environment/sustainability", - "environment/weather", - "technology", - "technology/video-games", - "australia-higher-education" + "voices", + "investigates", + "factcheck", + "explainer", + "gaeilge", + "sport", + "money-diaries", + "quiz", + "climate-change", + "housing", + "cost-of-living", + "road-safety", + "courts", + "ukraine", + "gaza" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "politics/federal" + "x-example": "irish" } ], "produces": [ @@ -529459,16 +612368,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Age section headlines", + "summary": "Get TheJournal.ie section headlines", "tags": [ - "The Age" + "TheJournal.ie" ] } }, - "/theage/news": { + "/thejournal/news": { "get": { - "description": "Returns The Age's current \"Latest News\" public RSS feed: each story's title, canonical URL, summary, author, publication time, and lead image.", - "operationId": "theage-news", + "description": "Returns the latest TheJournal.ie stories across all sections. Each item has a title, canonical URL, short summary, publication time (RFC 3339, UTC) and lead image. Items carry no author byline; the article endpoint supplies it. It takes no parameters.", + "operationId": "thejournal-news", "produces": [ "application/json" ], @@ -529479,12 +612388,6 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -529497,16 +612400,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Age top stories", + "summary": "Get TheJournal.ie top stories", "tags": [ - "The Age" + "TheJournal.ie" ] } }, - "/theage/sections": { + "/thejournal/sections": { "get": { - "description": "Lists every The Age section accepted by /theage/headlines (96 sections from the site's own section menu), each with its slug, display name, and public section-front URL.", - "operationId": "theage-sections", + "description": "Lists the 22 TheJournal.ie sections that the headlines endpoint accepts, verified 2026-09-25: nine category pages such as `irish`, `politics` and `business`, plus topic pages such as `housing`, `courts`, `ukraine` and `gaza`. Each entry has a `slug`, `name` and listing page `url`. Topic pages outside the site navigation are not served.", + "operationId": "thejournal-sections", "produces": [ "application/json" ], @@ -529523,24 +612426,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Age sections", + "summary": "Get TheJournal.ie sections", "tags": [ - "The Age" + "TheJournal.ie" ] } }, - "/theatlantic/article": { + "/thenextweb/article": { "get": { - "description": "Returns one public Atlantic article's metadata and body paragraphs from a canonical article URL. `metered` reflects the site's own soft-paywall flag for that article; the body returned here is the same one the site's own page serves to an anonymous visitor and is never truncated because of it. An article whose page genuinely withholds its body is reported as a restricted-access error instead of a hollow response.", - "operationId": "theatlantic-article", + "description": "Returns one The Next Web article by `url`, which must be a canonical HTTPS `thenextweb.com/news/` link; off-site URLs and non-article paths are rejected. The response has the title, description, section, authors, publication and update times, image URL, body `paragraphs` and a `paywalled` flag.", + "operationId": "thenextweb-article", "parameters": [ { - "description": "Canonical The Atlantic article URL", + "description": "Canonical thenextweb.com article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.theatlantic.com/politics/2026/09/example-slug/688738/" + "x-example": "https://thenextweb.com/news/netflix-wonka-golden-ticket-ai-gene-wilder-voice" } ], "produces": [ @@ -529550,7 +612453,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/theatlantic.articleResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -529559,24 +612462,12 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -529589,24 +612480,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Atlantic article's content", + "summary": "Get The Next Web article content", "tags": [ - "The Atlantic" + "The Next Web" ] } }, - "/theatlantic/author": { + "/thenextweb/author": { "get": { - "description": "Returns one Atlantic staff author's public profile -- name, headshot, and biography -- plus their recent articles, from a canonical author URL.", - "operationId": "theatlantic-author", + "description": "Returns a The Next Web author's name, image URL and the story cards on their archive page. Give `slug` or a canonical `thenextweb.com/author/` `url`; `slug` is required when `url` is omitted. Each article has a title, URL, summary, author, image, `type` and publication time.", + "operationId": "thenextweb-author", "parameters": [ { - "description": "Canonical theatlantic.com/author// URL", + "description": "Author slug from the public author sitemap or an article byline", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "darius-popa" + }, + { + "description": "Canonical thenextweb.com/author/ URL; alternative to slug", "in": "query", "name": "url", - "required": true, "type": "string", - "x-example": "https://www.theatlantic.com/author/example-author/" + "x-example": "https://thenextweb.com/author/darius-popa" } ], "produces": [ @@ -529616,7 +612513,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/theatlantic.authorResponseDoc" + "$ref": "#/definitions/publicnews.thenextwebAuthorResponseDoc" } }, "400": { @@ -529631,12 +612528,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -529649,39 +612540,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Atlantic staff author profile", + "summary": "Get a The Next Web author profile", "tags": [ - "The Atlantic" + "The Next Web" ] } }, - "/theatlantic/headlines": { + "/thenextweb/headlines": { "get": { - "description": "Returns the current front-page article cards for one Atlantic section: each story's title, canonical URL, description, byline, publication time, and lead image. Section must be a slug returned by /theatlantic/sections.", - "operationId": "theatlantic-headlines", + "description": "Returns the story cards of one The Next Web editorial section. `section` is required and must be one of `deep-tech`, `sustainability`, `ecosystems`, `data-security`, `fintech-ecommerce`, `future-of-work`, `startups-technology`, `investors-funding`, `government-policy` or `corporates-innovation`; other values return a 400.", + "operationId": "thenextweb-headlines", "parameters": [ { - "description": "Section slug from /theatlantic/sections", + "description": "Editorial section slug returned by thenextweb_sections", "enum": [ - "ideas", - "politics", - "economy", - "international", - "national-security", - "technology", - "science", - "health", - "education", - "culture", - "family", - "books", - "photography" + "deep-tech", + "sustainability", + "ecosystems", + "data-security", + "fintech-ecommerce", + "future-of-work", + "startups-technology", + "investors-funding", + "government-policy", + "corporates-innovation" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "politics" + "x-example": "deep-tech" } ], "produces": [ @@ -529691,7 +612579,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/theatlantic.headlinesResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -529700,18 +612588,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -529724,16 +612600,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get the latest stories in an Atlantic section", + "summary": "Get The Next Web section headlines", "tags": [ - "The Atlantic" + "The Next Web" ] } }, - "/theatlantic/sections": { + "/thenextweb/news": { "get": { - "description": "Lists every top-level Atlantic section accepted by /theatlantic/headlines, with its slug, display name, and landing-page URL. Values: `ideas`, `politics`, `economy`, `international`, `national-security`, `technology`, `science`, `health`, `education`, `culture`, `family`, `books`, `photography`.", - "operationId": "theatlantic-sections", + "description": "Returns the current top stories from The Next Web. It takes no parameters. Each item has the publisher's title, canonical URL, summary, publication time and author, plus the image URL when one is present.", + "operationId": "thenextweb-news", "produces": [ "application/json" ], @@ -529741,7 +612617,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/theatlantic.sectionsResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -529762,24 +612638,53 @@ "ApiKeyAuth": [] } ], - "summary": "List The Atlantic sections", + "summary": "Get The Next Web top stories", "tags": [ - "The Atlantic" + "The Next Web" ] } }, - "/theblaze/article": { + "/thenextweb/sections": { "get": { - "description": "Returns one TheBlaze (Blaze Media) article by `url`, a canonical HTTPS editorial or show-story link on `theblaze.com`; non-editorial paths and off-site URLs are rejected. The response has the title, description, section, authors, publication and update times, image URL, body `paragraphs` and a `paywalled` flag.", - "operationId": "theblaze-article", + "description": "Returns the ten editorial sections in The Next Web's current homepage navigation. Topic/tag archives, media, events and promotional categories are excluded.", + "operationId": "thenextweb-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The Next Web sections", + "tags": [ + "The Next Web" + ] + } + }, + "/therealreal/autocomplete": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns The RealReal's own search-box typeahead suggestions for a partial query.", + "operationId": "therealreal-autocomplete", "parameters": [ { - "description": "Canonical theblaze.com article URL", + "description": "Partial free-text query to get search-box suggestions for", "in": "query", - "name": "url", + "name": "term", "required": true, "type": "string", - "x-example": "https://www.theblaze.com/news/niaid-backed-an-experiment-aersolizing-lethal-ebola-then-fauci-panicked-about-what-it-exposed-about-vaccination" + "x-example": "gucci" } ], "produces": [ @@ -529789,7 +612694,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/therealreal.autocompleteResponseDoc" } }, "400": { @@ -529798,8 +612703,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -529816,32 +612721,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Blaze Media article", + "summary": "Get The RealReal search-box suggestions", "tags": [ - "TheBlaze" + "The RealReal" ] } }, - "/theblaze/author": { + "/therealreal/categories": { "get": { - "description": "Returns a public /u/ profile and up to 30 recent article feed items. Provide exactly one of slug or canonical profile URL.", - "operationId": "theblaze-author", - "parameters": [ - { - "description": "TheBlaze author username", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "josephmackinnon" - }, - { - "description": "Canonical HTTPS theblaze.com/u/ profile URL", - "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.theblaze.com/u/josephmackinnon" - } + "consumes": [ + "application/json" ], + "description": "Returns The RealReal's full category (taxon) browse taxonomy: every department, category, and subcategory, nested, with each entry's id (usable directly against search's category_id), permalink (usable directly against the category endpoint's path), and live matching item count. This is reference data that changes rarely, so responses are cached.", + "operationId": "therealreal-categories", "produces": [ "application/json" ], @@ -529849,17 +612741,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.theBlazeAuthorResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/therealreal.categoriesResponseDoc" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -529876,70 +612762,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Blaze Media contributor profile", + "summary": "Get The RealReal category browse taxonomy", "tags": [ - "TheBlaze" + "The RealReal" ] } }, - "/theblaze/headlines": { + "/therealreal/category": { "get": { - "description": "Returns up to 30 recent stories from one TheBlaze (Blaze Media) section. `section` is required, case-sensitive and must match exactly, for example `news`, `columns/opinion`, `lifestyle/men`, `tech` or a show such as `shows/relatable`. Other values are rejected. Items have a title and URL, plus summary, author, publication time and image when the outlet provides them.", - "operationId": "theblaze-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns a page of The RealReal listings browsed by category (taxon) permalink path, e.g. women/handbags. Pass a previous response's next_after back as after to fetch the next page.", + "operationId": "therealreal-category", "parameters": [ { - "description": "Exact Blaze Media section slug", - "enum": [ - "news", - "columns", - "columns/opinion", - "columns/analysis", - "tech", - "lifestyle", - "lifestyle/men", - "lifestyle/women", - "lifestyle/provisions", - "fearless", - "exclusive", - "original", - "politics", - "your-opinion", - "shows", - "shows/back-to-the-people", - "shows/blaze-news-tonight", - "shows/blaze-originals", - "shows/blazetv-specials", - "shows/come-take-it-with-sara-gonzales", - "shows/conservative-review-with-daniel-horowitz", - "shows/dusty-bluffs", - "shows/fearless-with-jason-whitlock", - "shows/glenn-tv", - "shows/kibbe-on-liberty", - "shows/live-free-with-josh-howerton", - "shows/making-the-argument-with-nick-freitas", - "shows/pat-gray-unleashed", - "shows/relatable", - "shows/rufo-lomez", - "shows/sara-gonzales-unfiltered", - "shows/steve-deace-show", - "shows/strange-encounters", - "shows/stu-and-dave-do-america", - "shows/the-auron-macintyre-show", - "shows/the-coverup", - "shows/glenn-beck-podcast", - "shows/the-glenn-beck-program", - "shows/the-john-doyle-show", - "shows/the-liz-wheeler-show", - "shows/the-rick-burgess-show", - "shows/zero-hour", - "contributors", - "jan-6-truth" - ], + "description": "Category permalink path, from the categories endpoint's permalink field", "in": "query", - "name": "section", + "name": "path", "required": true, "type": "string", - "x-example": "news" + "x-example": "women/handbags" + }, + { + "description": "Only return items currently marked down from their original price", + "in": "query", + "name": "on_sale", + "type": "boolean" + }, + { + "description": "Only return items currently available to purchase (excludes sold and waitlisted items)", + "in": "query", + "name": "available", + "type": "boolean" + }, + { + "description": "Opaque pagination cursor from a previous response's next_after. Omit for the first page", + "in": "query", + "name": "after", + "type": "string" } ], "produces": [ @@ -529949,7 +612810,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/therealreal.searchResponseDoc" } }, "400": { @@ -529958,6 +612819,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -529970,16 +612843,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get Blaze Media section headlines", + "summary": "Browse The RealReal listings by category", "tags": [ - "TheBlaze" + "The RealReal" ] } }, - "/theblaze/news": { + "/therealreal/collection": { "get": { - "description": "Returns the latest site-wide stories from TheBlaze (Blaze Media), up to 30 items, covering news and opinion. Each item has a headline, canonical URL, publication time, byline, summary and image URL when published. It takes no parameters.", - "operationId": "theblaze-news", + "consumes": [ + "application/json" + ], + "description": "Returns a page of The RealReal listings browsed by curated collection slug, e.g. on-sale-now -- sale campaigns, editor's picks, and similar merchandising collections distinct from category/designer browsing. Pass a previous response's next_after back as after to fetch the next page.", + "operationId": "therealreal-collection", + "parameters": [ + { + "description": "Collection slug, from the collections endpoint's slug field", + "in": "query", + "name": "slug", + "required": true, + "type": "string", + "x-example": "on-sale-now" + }, + { + "description": "Opaque pagination cursor from a previous response's next_after. Omit for the first page", + "in": "query", + "name": "after", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -529987,7 +612879,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/therealreal.searchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -530002,16 +612912,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Blaze Media top stories", + "summary": "Browse The RealReal listings by curated collection", "tags": [ - "TheBlaze" + "The RealReal" ] } }, - "/theblaze/sections": { + "/therealreal/collections": { "get": { - "description": "Returns all verified article-bearing editorial and show sections accepted by the headlines endpoint. The contributors collection is included; the off-site Profile feed is excluded.", - "operationId": "theblaze-sections", + "consumes": [ + "application/json" + ], + "description": "Returns The RealReal's full published set of curated editorial and sale-campaign collection slugs (e.g. on-sale-now, hermes-birkin-bag), each usable directly against the collection endpoint's own slug field. This is reference data that changes rarely, so responses are cached.", + "operationId": "therealreal-collections", "produces": [ "application/json" ], @@ -530019,7 +612932,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/therealreal.collectionsResponseDoc" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -530034,35 +612953,19 @@ "ApiKeyAuth": [] } ], - "summary": "List Blaze Media sections", + "summary": "Get The RealReal curated collection slugs", "tags": [ - "TheBlaze" + "The RealReal" ] } }, - "/thebodyshop/collections": { + "/therealreal/conditions": { "get": { "consumes": [ "application/json" ], - "description": "Returns collections from The Body Shop (https://www.thebodyshop.com). The storefront URL is fixed. Valid empty result pages return `200` with an empty collections array.", - "operationId": "thebodyshop-collections", - "parameters": [ - { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Maximum collections, defaults to 50 and supports up to 250", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 - } - ], + "description": "Returns The RealReal's full authentication condition-grading scale: the closed 6-tier set (Pristine, Excellent, Very Good, Good, Fair, As Is) it defines, each with an id (usable directly against search's condition_id) and live matching item count. This is reference data that changes rarely, so responses are cached.", + "operationId": "therealreal-conditions", "produces": [ "application/json" ], @@ -530070,17 +612973,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/therealreal.conditionsResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -530097,41 +612994,45 @@ "ApiKeyAuth": [] } ], - "summary": "List The Body Shop collections", + "summary": "Get The RealReal condition-grading value space", "tags": [ - "The Body Shop" + "The RealReal" ] } }, - "/thebodyshop/collections/{handle}/products": { + "/therealreal/designer": { "get": { "consumes": [ "application/json" ], - "description": "Returns products from one The Body Shop (https://www.thebodyshop.com) collection. The storefront URL is fixed; `handle` is the collection's URL slug.", - "operationId": "thebodyshop-collection-products", + "description": "Returns a page of The RealReal listings browsed by designer slug, e.g. gucci. Pass a previous response's next_after back as after to fetch the next page.", + "operationId": "therealreal-designer", "parameters": [ { - "description": "Collection handle", - "in": "path", - "name": "handle", + "description": "Designer slug, from the designers endpoint's slug field", + "in": "query", + "name": "slug", "required": true, "type": "string", - "x-example": "collection-handle" + "x-example": "gucci" }, { - "description": "1-based page, defaults to 1", + "description": "Only return items currently marked down from their original price", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "on_sale", + "type": "boolean" }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "description": "Only return items currently available to purchase (excludes sold and waitlisted items)", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "available", + "type": "boolean" + }, + { + "description": "Opaque pagination cursor from a previous response's next_after. Omit for the first page", + "in": "query", + "name": "after", + "type": "string" } ], "produces": [ @@ -530141,7 +613042,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.collectionProductsResponseDoc" + "$ref": "#/definitions/therealreal.searchResponseDoc" } }, "400": { @@ -530156,8 +613057,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -530174,33 +613075,26 @@ "ApiKeyAuth": [] } ], - "summary": "List The Body Shop collection products", + "summary": "Browse The RealReal listings by designer", "tags": [ - "The Body Shop" + "The RealReal" ] } }, - "/thebodyshop/pages": { + "/therealreal/designers": { "get": { "consumes": [ "application/json" ], - "description": "Lists The Body Shop static pages, 50 per request by default (`limit` up to 250), with `page` starting at 1. Each page has its handle, title, URL, plain-text content and timestamps. An empty result is a normal 200. When `transport_mode` is `ssr_embedded`, items carry only `handle`, `url` and `updated_at`.", - "operationId": "thebodyshop-pages", + "description": "Returns every designer The RealReal recognizes in one department (not just designers with currently active listings), each with an id (usable directly against search's designer_id) and slug (usable directly against the designer endpoint). The directory is segmented by department -- pass category to select one; the response's categories field lists every accepted value. This is reference data that changes rarely, so responses are cached.", + "operationId": "therealreal-designers", "parameters": [ { - "description": "1-based page, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Maximum static pages, defaults to 50 and supports up to 250", + "description": "Designer-directory department. One of: women, men, fine-jewelry, watches, art, home, kids. Defaults to women", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "category", + "type": "string", + "x-example": "women" } ], "produces": [ @@ -530210,7 +613104,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pagesResponseDoc" + "$ref": "#/definitions/therealreal.designersResponseDoc" } }, "400": { @@ -530219,8 +613113,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -530237,27 +613131,27 @@ "ApiKeyAuth": [] } ], - "summary": "List The Body Shop static pages", + "summary": "Get The RealReal designer directory", "tags": [ - "The Body Shop" + "The RealReal" ] } }, - "/thebodyshop/pages/{handle}": { + "/therealreal/listing": { "get": { "consumes": [ "application/json" ], - "description": "Returns one The Body Shop static page by its `handle`: id, title, URL, plain-text `content` and the created, published and updated timestamps. Page text is cleaned, not raw HTML. An unknown handle returns 404. When the reduced form is served, `transport_mode` is `ssr_embedded` and `id` is omitted.", - "operationId": "thebodyshop-page", + "description": "Returns a single The RealReal listing: description, condition detail, category context, and measurements, plus the shared summary fields (name, designer, condition, price, images). Looked up by the listing's full product URL, as returned in a search/category/designer response's url field.", + "operationId": "therealreal-listing", "parameters": [ { - "description": "Page handle", - "in": "path", - "name": "handle", + "description": "Full product URL, as returned in a search/category/designer response's url field", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "page-handle" + "x-example": "https://www.therealreal.com/products/women/handbags/crossbody-bags/chanel-denim-pearl-crush-wallet-on-chain-wdqhu" } ], "produces": [ @@ -530267,7 +613161,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.pageResponseDoc" + "$ref": "#/definitions/therealreal.listingResponseDoc" } }, "400": { @@ -530282,8 +613176,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -530300,33 +613194,80 @@ "ApiKeyAuth": [] } ], - "summary": "Get a The Body Shop static page", + "summary": "Get a The RealReal listing detail", "tags": [ - "The Body Shop" + "The RealReal" ] } }, - "/thebodyshop/products": { + "/therealreal/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns products from The Body Shop's (https://www.thebodyshop.com) public product catalog. The storefront URL is fixed server-side. Valid empty result pages return `200` with an empty products array.", - "operationId": "thebodyshop-products", + "description": "Searches The RealReal's authenticated luxury resale catalog by keyword, optionally combined with category, designer, condition-grade, and price-range filters, returning listing summaries (name, designer, condition, price, images) plus the total matching count and an opaque pagination cursor. Pass a previous response's next_after back as after to fetch the next page.", + "operationId": "therealreal-search", "parameters": [ { - "description": "1-based page, defaults to 1", + "description": "Free-text keyword search", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "query", + "required": true, + "type": "string", + "x-example": "gucci bag" }, { - "description": "Maximum products, defaults to 50 and supports up to 250", + "description": "Category (taxon) id, from the categories endpoint's id field", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "name": "category_id", + "type": "string", + "x-example": "493" + }, + { + "description": "Designer id, from the designers endpoint's id field", + "in": "query", + "name": "designer_id", + "type": "string", + "x-example": "127" + }, + { + "description": "Condition grade id, from the conditions endpoint's id field", + "in": "query", + "name": "condition_id", + "type": "string", + "x-example": "20" + }, + { + "description": "Minimum price in USD", + "in": "query", + "name": "price_from", + "type": "number", + "x-example": 100 + }, + { + "description": "Maximum price in USD", + "in": "query", + "name": "price_to", + "type": "number", + "x-example": 1000 + }, + { + "description": "Only return items currently marked down from their original price", + "in": "query", + "name": "on_sale", + "type": "boolean" + }, + { + "description": "Only return items currently available to purchase (excludes sold and waitlisted items)", + "in": "query", + "name": "available", + "type": "boolean" + }, + { + "description": "Opaque pagination cursor from a previous response's next_after. Omit for the first page", + "in": "query", + "name": "after", + "type": "string" } ], "produces": [ @@ -530336,7 +613277,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productsResponseDoc" + "$ref": "#/definitions/therealreal.searchResponseDoc" } }, "400": { @@ -530345,8 +613286,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -530363,27 +613304,27 @@ "ApiKeyAuth": [] } ], - "summary": "List The Body Shop products", + "summary": "Search The RealReal luxury consignment listings", "tags": [ - "The Body Shop" + "The RealReal" ] } }, - "/thebodyshop/products/{handle}": { + "/therealreal/similar": { "get": { "consumes": [ "application/json" ], - "description": "Returns product detail for one The Body Shop (https://www.thebodyshop.com) product handle. The storefront URL is fixed server-side; `handle` is the product's URL slug.", - "operationId": "thebodyshop-product", + "description": "Returns The RealReal's own \"Similar Items\" visual-similarity recommendations for one product, looked up by the product's numeric id (from any other The RealReal endpoint's listing response id field).", + "operationId": "therealreal-similar", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", + "description": "The RealReal numeric product id, from a search/category/designer/listing/collection response's id field", + "in": "query", + "name": "product_id", "required": true, "type": "string", - "x-example": "product-handle" + "x-example": "54388578" } ], "produces": [ @@ -530393,7 +613334,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productResponseDoc" + "$ref": "#/definitions/therealreal.similarResponseDoc" } }, "400": { @@ -530402,14 +613343,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -530426,45 +613361,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a The Body Shop product", + "summary": "Get The RealReal similar-item recommendations", "tags": [ - "The Body Shop" + "The RealReal" ] } }, - "/thebodyshop/products/{handle}/recommendations": { + "/thestarmy/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns recommended products for one The Body Shop (https://www.thebodyshop.com) product handle. The storefront URL is fixed server-side.", - "operationId": "thebodyshop-product-recommendations", + "description": "Returns public The Star (Malaysia) story metadata and body paragraphs from a canonical story URL. Metered and premium stories return only the public teaser paragraphs the server shows anonymous readers, flagged with paywalled; a story with no readable teaser returns a permission error.", + "operationId": "thestarmy-article", "parameters": [ { - "description": "Product handle", - "in": "path", - "name": "handle", - "required": true, - "type": "string", - "x-example": "product-handle" - }, - { - "description": "Maximum products, defaults to 10 and supports up to 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 - }, - { - "description": "Recommendation intent. Allowed values: related, complementary", - "enum": [ - "related", - "complementary" - ], + "description": "Canonical The Star (Malaysia) story URL", "in": "query", - "name": "intent", + "name": "url", + "required": true, "type": "string", - "x-example": "related" + "x-example": "https://www.thestar.com.my/news/nation/2026/09/25/ros-freeze-could-rattle-pn-prep" } ], "produces": [ @@ -530474,7 +613388,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.productRecommendationsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -530483,14 +613397,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Forbidden", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -530507,41 +613421,30 @@ "ApiKeyAuth": [] } ], - "summary": "List The Body Shop product recommendations", + "summary": "Get The Star (Malaysia) article content", "tags": [ - "The Body Shop" + "The Star Malaysia" ] } }, - "/thebodyshop/search/suggest": { + "/thestarmy/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns products, collections, and query suggestions from The Body Shop's (https://www.thebodyshop.com) predictive search. The storefront URL is fixed server-side.", - "operationId": "thebodyshop-search-suggest", + "description": "Returns one The Star (Malaysia) byline's public author page: display name, the public byline email, and their most recent stories.", + "operationId": "thestarmy-author", "parameters": [ { - "description": "Search query", + "description": "Byline name, matched case-insensitively, e.g. Ivan Loh", "in": "query", - "name": "q", - "required": true, + "name": "name", "type": "string", - "x-example": "wool" + "x-example": "Ivan Loh" }, { - "description": "Comma-separated suggestion types. Allowed values: product, collection, query", + "description": "Canonical thestar.com.my/authors?q= URL; alternative to name", "in": "query", - "name": "types", + "name": "url", "type": "string", - "x-example": "product,collection,query" - }, - { - "description": "Maximum results per type, defaults to 10 and supports up to 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "x-example": "https://www.thestar.com.my/authors?q=IVAN+LOH" } ], "produces": [ @@ -530551,7 +613454,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.searchSuggestResponseDoc" + "$ref": "#/definitions/publicnews.thestarmyAuthorResponseDoc" } }, "400": { @@ -530560,8 +613463,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -530578,42 +613481,120 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Body Shop search suggestions", + "summary": "Get a The Star (Malaysia) author page", "tags": [ - "The Body Shop" + "The Star Malaysia" ] } }, - "/thebodyshop/sitemap/urls": { + "/thestarmy/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns capped URL entries from The Body Shop's (https://www.thebodyshop.com) child sitemaps matching the requested type. The storefront URL is fixed server-side.", - "operationId": "thebodyshop-sitemap-urls", + "description": "Returns the current stories of one The Star (Malaysia) section page, usually 10 and up to 100 on column-style sections. `section` is required, for example `news-nation`, `latest-business`, `sport-badminton` or `latest-food`. Items have a title and URL, and when the page shows them a `type`, summary, byline, image and publication time. Older stories are not paginated.", + "operationId": "thestarmy-headlines", "parameters": [ { - "description": "Sitemap type. Allowed values: all, products, collections, pages, blogs, agentic_discovery, other", + "description": "The Star (Malaysia) section slug", "enum": [ - "all", - "products", - "collections", - "pages", - "blogs", - "agentic_discovery", - "other" + "news-latest", + "latest-nation", + "latest-business", + "latest-education", + "latest-aseanplus", + "latest-sport", + "latest-metro", + "latest-tech", + "latest-world", + "latest-lifestyle", + "latest-food", + "news-nation", + "news-world", + "news-environment", + "news-in-other-media", + "news-true-or-not", + "news-focus", + "aseanplus-aseanplus-news", + "business-insight", + "business-smebiz", + "business-premium", + "sport-athletics", + "sport-hockey", + "sport-football", + "sport-golf", + "sport-badminton", + "sport-tennis", + "sport-motorsport", + "sport-other-sport", + "sport-say-what", + "sport-archery", + "sport-basketball", + "sport-bowling", + "sport-boxing", + "sport-cricket", + "sport-cycling", + "sport-diving", + "sport-gymnastics", + "sport-others", + "sport-rugby", + "sport-shooting", + "sport-squash", + "sport-swimming", + "sport-wrestling", + "metro-metro-news", + "metro-community-sports", + "metro-views", + "lifestyle", + "lifestyle-entertainment-and-style", + "lifestyle-people-and-living", + "lifestyle-health-and-family", + "lifestyle-travel-and-culture", + "lifestyle-viewpoints", + "lifestyle-entertainment", + "lifestyle-living", + "lifestyle-style", + "lifestyle-people", + "lifestyle-health", + "lifestyle-family", + "lifestyle-travel", + "lifestyle-culture", + "lifestyle-design", + "lifestyle-science", + "lifestyle-wellness", + "lifestyle-fitness", + "lifestyle-mind", + "lifestyle-nutrition", + "lifestyle-animals", + "lifestyle-children", + "lifestyle-seniors", + "lifestyle-beauty", + "lifestyle-fashion", + "lifestyle-malaysia", + "lifestyle-global", + "lifestyle-asia-oceania", + "lifestyle-americas", + "lifestyle-europe", + "lifestyle-africa", + "lifestyle-arts", + "lifestyle-books", + "lifestyle-climate", + "lifestyle-movie-review", + "lifestyle-music-review", + "lifestyle-book-review", + "food", + "food-food-for-thought", + "food-food-news", + "food-eating-out", + "tech-tech-news", + "tech-tech-thoughts", + "education-news", + "opinion-columnists", + "opinion-letters", + "starpicks" ], "in": "query", - "name": "type", + "name": "section", + "required": true, "type": "string", - "x-example": "products" - }, - { - "description": "Maximum URL entries, defaults to 50 and supports up to 250", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 50 + "x-example": "news-latest" } ], "produces": [ @@ -530623,7 +613604,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapURLsResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -530632,11 +613613,37 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The Star (Malaysia) section headlines", + "tags": [ + "The Star Malaysia" + ] + } + }, + "/thestarmy/news": { + "get": { + "description": "Returns the current top stories on The Star (Malaysia) home page. It takes no parameters. Each item has a title and canonical URL, plus a short section label in `type`, a summary and a byline when the page shows them. `published_at` is omitted here; the section headlines endpoint carries it.", + "operationId": "thestarmy-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "503": { "description": "Service Unavailable", @@ -530650,19 +613657,52 @@ "ApiKeyAuth": [] } ], - "summary": "List The Body Shop sitemap URLs", + "summary": "Get The Star (Malaysia) top stories", "tags": [ - "The Body Shop" + "The Star Malaysia" ] } }, - "/thebodyshop/sitemaps": { + "/thestarmy/sections": { "get": { - "consumes": [ + "description": "Lists the 94 The Star (Malaysia) sections that returned at least one story to an anonymous reader when checked on 2026-09-25, and that the headlines endpoint accepts. Examples are `news-latest`, `latest-nation`, `business-smebiz` and `sport-football`. Each entry has a `slug`, a `name` and the section page `url`.", + "operationId": "thestarmy-sections", + "produces": [ "application/json" ], - "description": "Returns child sitemap URLs from The Body Shop's (https://www.thebodyshop.com) `/sitemap.xml` index with inferred sitemap types. The storefront URL is fixed server-side.", - "operationId": "thebodyshop-sitemaps", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The Star (Malaysia) sections", + "tags": [ + "The Star Malaysia" + ] + } + }, + "/theverge/article": { + "get": { + "description": "Returns one The Verge article by `url`, a canonical HTTPS article link. The response has the title, description, section, authors, publication and update times, lead image URL, body `paragraphs` and a `paywalled` flag. Subscriber-only or blocked pages return an error instead.", + "operationId": "theverge-article", + "parameters": [ + { + "description": "Canonical The Verge article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.theverge.com/news/998317/bungie-destiny-2-unvaulted-raids-campaigns-destinations" + } + ], "produces": [ "application/json" ], @@ -530670,7 +613710,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.sitemapIndexResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -530679,8 +613719,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -530697,19 +613737,26 @@ "ApiKeyAuth": [] } ], - "summary": "List The Body Shop sitemaps", + "summary": "Get The Verge article content", "tags": [ - "The Body Shop" + "The Verge" ] } }, - "/thebodyshop/store": { + "/theverge/author": { "get": { - "consumes": [ - "application/json" + "description": "Returns a The Verge author's profile by `url`, a canonical `theverge.com/authors/` link: name, job title such as Senior Reporter, bio and recent articles. Each article has a title, URL, excerpt, ISO-8601 `published_at` and `category`, the post's primary Verge vertical such as Tech.", + "operationId": "theverge-author", + "parameters": [ + { + "description": "Canonical The Verge author URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.theverge.com/authors/jay-peters" + } ], - "description": "Returns storefront metadata for The Body Shop (https://www.thebodyshop.com). The storefront URL is fixed server-side, so no `url` parameter is accepted.", - "operationId": "thebodyshop-store", "produces": [ "application/json" ], @@ -530717,7 +613764,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/shopifybrands.storeResponseDoc" + "$ref": "#/definitions/publicnews.thevergeAuthorResponseDoc" } }, "400": { @@ -530726,8 +613773,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -530744,24 +613791,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Body Shop store metadata", + "summary": "Get a The Verge author profile", "tags": [ - "The Body Shop" + "The Verge" ] } }, - "/thedailybeast/article": { + "/theverge/headlines": { "get": { - "description": "Returns one The Daily Beast article by its canonical `url`, either a root-level slug or one under a single content vertical such as `obsessed`. The response has the title, description, section, authors, publication and update times, lead image URL, body `paragraphs` and a `paywalled` flag. Digest or index pages are not articles and return an error.", - "operationId": "thedailybeast-article", + "description": "Returns the current headlines for one The Verge section. `section` is required and takes one of `tech`, `reviews`, `science`, `entertainment`, `ai`, `policy`, `gaming`, `mobile`, `apps` or `features`. Each item has its title, URL, summary, author and publication time.", + "operationId": "theverge-headlines", "parameters": [ { - "description": "Canonical The Daily Beast article URL", + "description": "The Verge section slug", + "enum": [ + "tech", + "reviews", + "science", + "entertainment", + "ai", + "policy", + "gaming", + "mobile", + "apps", + "features" + ], "in": "query", - "name": "url", + "name": "section", "required": true, "type": "string", - "x-example": "https://www.thedailybeast.com/murdoch-paper-predicts-trumps-panicked-plan-will-backfire/" + "x-example": "tech" } ], "produces": [ @@ -530771,7 +613830,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -530780,11 +613839,37 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The Verge section headlines", + "tags": [ + "The Verge" + ] + } + }, + "/theverge/news": { + "get": { + "description": "Returns the current top stories from The Verge. It takes no parameters. Each item has its title, URL and, where available, a summary, author, publication time, image URL and `type`. Use the headlines endpoint to read one section.", + "operationId": "theverge-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "503": { "description": "Service Unavailable", @@ -530798,24 +613883,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Daily Beast article content", + "summary": "Get The Verge top stories", "tags": [ - "The Daily Beast" + "The Verge" ] } }, - "/thedailybeast/author": { + "/theverge/sections": { "get": { - "description": "Returns one The Daily Beast reporter's public profile: name, job title, biography, headshot, social link, and their recent articles, from a canonical author URL.", - "operationId": "thedailybeast-author", + "description": "Lists the The Verge sections that the headlines endpoint accepts: `tech`, `reviews`, `science`, `entertainment`, `ai`, `policy`, `gaming`, `mobile`, `apps` and `features`. Each entry has a `slug`, a display `name` and a section `url`.", + "operationId": "theverge-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The Verge sections", + "tags": [ + "The Verge" + ] + } + }, + "/thisismoney/article": { + "get": { + "description": "Returns one This Is Money article by `url`, a canonical HTTPS article link. The response has the title, description, section, authors, publication and update times, image URL, body `paragraphs` and a `paywalled` flag. Pages that are subscriber-only or blocked return an error.", + "operationId": "thisismoney-article", "parameters": [ { - "description": "Canonical thedailybeast.com/author/ URL", + "description": "Canonical This Is Money article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.thedailybeast.com/author/isabel-van-brugen/" + "x-example": "https://www.thisismoney.co.uk/money/markets/article-123/example.html" } ], "produces": [ @@ -530825,7 +613936,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.dailyBeastAuthorResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -530852,103 +613963,90 @@ "ApiKeyAuth": [] } ], - "summary": "Get a The Daily Beast author profile", + "summary": "Get This Is Money article content", "tags": [ - "The Daily Beast" + "This Is Money" ] } }, - "/thedailybeast/headlines": { + "/thisismoney/author": { "get": { - "description": "Returns the current headlines of one The Daily Beast section. `section` is required and takes a slug such as `politics`, `politics/opinion`, `obsessed/reviews`, `scouted/home` or `world/china`. Each item can carry its title, URL, summary, author, publication time, lead image and `type`, and the response echoes the `section`.", - "operationId": "thedailybeast-headlines", + "description": "Returns a This Is Money author's profile by `url`, a canonical `thisismoney.co.uk/profile-/.html` link: name, job title, bio, coverage topic tags such as Money or Bills, and recent articles with title, URL, excerpt and ISO-8601 `published_at`. `job_title` and `coverage` can be empty.", + "operationId": "thisismoney-author", "parameters": [ { - "description": "The Daily Beast section slug", - "enum": [ - "lifestyle", - "lifestyle/body", - "lifestyle/face", - "lifestyle/wellness", - "lifestyle/hair", - "lifestyle/style", - "travel", - "entertainment", - "entertainment/music", - "entertainment/tv", - "entertainment/movies", - "entertainment/comedy", - "entertainment/awards-shows", - "archive", - "media", - "tech", - "arts-and-culture", - "arts-and-culture/theater", - "arts-and-culture/royalist", - "arts-and-culture/fashion", - "arts-and-culture/books", - "innovation", - "innovation/science", - "obsessed", - "obsessed/shop", - "obsessed/hot-takes", - "obsessed/reviews", - "obsessed/recaps", - "obsessed/what-to-watch", - "obsessed/trailers", - "obsessed/interviews", - "obsessed/industry", - "obsessed/celebrity", - "obsessed/media", - "obsessed/media/shows", - "obsessed/media/movies", - "obsessed/media/music", - "obsessed/media/books", - "obsessed/rating", - "obsessed/rating/see", - "obsessed/rating/skip", - "obsessed/the-last-laugh", - "obsessed/obsessed-podcast", - "obsessed/obsessed-newsletter", - "politics", - "politics/biden-world", - "politics/congress", - "politics/elections", - "politics/national-security", - "politics/opinion", - "politics/trumpland", - "politics/pay-dirt", - "politics/trail-mix", - "politics/the-new-abnormal", - "scouted", - "scouted/fitness", - "scouted/wellness", - "scouted/beauty", - "scouted/bedroom", - "scouted/clothing", - "scouted/face-masks", - "scouted/home", - "scouted/kitchen", - "scouted/outdoors", - "scouted/technology", - "scouted/new-kids-on-the-block", - "scouted/the-case-for", - "scouted/thisthat", - "us-news", - "us-news/crime-and-justice", - "us-news/identities", - "us-news/sports", - "world", - "world/china", - "world/middle-east", - "world/europe", - "world/russia" + "description": "Canonical This Is Money author URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.thisismoney.co.uk/profile-2242/toby-walne.html" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.thisIsMoneyAuthorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a This Is Money author profile", + "tags": [ + "This Is Money" + ] + } + }, + "/thisismoney/headlines": { + "get": { + "description": "Returns the current headlines for one This Is Money section. `section` is required and takes one of `money`, `markets`, `investing`, `savings`, `pensions`, `mortgages`, `property`, `cars`, `travel` or `consumer`. Each item has its title and URL, plus summary, author, publication time and image when the outlet provides them.", + "operationId": "thisismoney-headlines", + "parameters": [ + { + "description": "This Is Money section slug", + "enum": [ + "money", + "markets", + "investing", + "savings", + "pensions", + "mortgages", + "property", + "cars", + "travel", + "consumer" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "lifestyle" + "x-example": "money" } ], "produces": [ @@ -530979,16 +614077,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Daily Beast section headlines", + "summary": "Get This Is Money section headlines", "tags": [ - "The Daily Beast" + "This Is Money" ] } }, - "/thedailybeast/news": { + "/thisismoney/news": { "get": { - "description": "Returns the current top stories from The Daily Beast. It takes no parameters. Each item has its title, URL, summary, publication time, author and lead image, so it is a quick front-page view; use the headlines endpoint with a `section` slug for one category.", - "operationId": "thedailybeast-news", + "description": "Returns the current top stories from This Is Money. It takes no parameters. Each item has its title, URL and, where available, a summary, author, publication time, image URL and `type`. Use the headlines endpoint to read one section.", + "operationId": "thisismoney-news", "produces": [ "application/json" ], @@ -531011,16 +614109,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Daily Beast top stories", + "summary": "Get This Is Money top stories", "tags": [ - "The Daily Beast" + "This Is Money" ] } }, - "/thedailybeast/sections": { + "/thisismoney/sections": { "get": { - "description": "Lists the sections of The Daily Beast that the headlines endpoint accepts, both top-level categories such as `politics` and `world` and child sub-sections such as `politics/opinion` and `world/middle-east`. Each entry has a `slug`, a display `name` and the section `url`.", - "operationId": "thedailybeast-sections", + "description": "Lists the This Is Money sections that the headlines endpoint accepts, such as `money`, `markets`, `savings`, `pensions`, `mortgages`, `property` and `cars`. Each entry has a `slug`, a display `name` and a section `url`.", + "operationId": "thisismoney-sections", "produces": [ "application/json" ], @@ -531037,24 +614135,32 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Daily Beast sections", + "summary": "Get This Is Money sections", "tags": [ - "The Daily Beast" + "This Is Money" ] } }, - "/thehill/article": { + "/threads/post/{username}/{code}": { "get": { - "description": "Returns one The Hill article by `url`, which must be a canonical HTTPS `thehill.com` article link containing a numeric article id. The response has the title, description, section, authors, publication and update times, lead image URL, body `paragraphs` and a `paywalled` flag.", - "operationId": "thehill-article", + "description": "Returns one public Threads post by `username` (with or without a leading `@`) and the post `code` from its URL. The response has the post text, canonical URL, preview image URL, and the author's id, name and username. Replies and logged-in fields are not included. An unavailable post returns 404.", + "operationId": "threads-post", "parameters": [ { - "description": "Canonical The Hill article URL", - "in": "query", - "name": "url", + "description": "Threads username", + "in": "path", + "name": "username", "required": true, "type": "string", - "x-example": "https://thehill.com/policy/1234567-example/" + "x-example": "zuck" + }, + { + "description": "Threads post code", + "in": "path", + "name": "code", + "required": true, + "type": "string", + "x-example": "DakyAavlKLZ" } ], "produces": [ @@ -531062,25 +614168,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped post payload", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/threads.postResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid username or post code", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "Post not found", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or parser drift", "schema": { "$ref": "#/definitions/app.Response" } @@ -531091,24 +614197,32 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Hill article content", + "summary": "Retrieve a public Threads post", "tags": [ - "The Hill" + "Threads" ] } }, - "/thehill/author": { + "/threads/post/{username}/{code}/replies": { "get": { - "description": "Returns a The Hill author's profile by `url`, a canonical `thehill.com/author//` link: name, job title, bio, image URL and recent articles with title, URL, category and category URL. `job_title` and `image_url` may be missing, and each article's `published_at` is relative text such as `10 hours ago`, not a timestamp.", - "operationId": "thehill-author", + "description": "Returns the public replies currently exposed to logged-out visitors. The response identifies when Threads reports additional replies but withholds a usable continuation cursor.", + "operationId": "threads-post-replies", "parameters": [ { - "description": "Canonical The Hill author URL", - "in": "query", - "name": "url", + "description": "Threads username", + "in": "path", + "name": "username", "required": true, "type": "string", - "x-example": "https://thehill.com/author/alexander-bolton/" + "x-example": "zuck" + }, + { + "description": "Threads post code", + "in": "path", + "name": "code", + "required": true, + "type": "string", + "x-example": "DakyAavlKLZ" } ], "produces": [ @@ -531116,25 +614230,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped replies payload", "schema": { - "$ref": "#/definitions/publicnews.theHillAuthorResponseDoc" + "$ref": "#/definitions/threads.repliesResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid username or post code", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "Post not found", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or parser drift", "schema": { "$ref": "#/definitions/app.Response" } @@ -531145,45 +614259,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a The Hill author profile", + "summary": "Retrieve public replies to a Threads post", "tags": [ - "The Hill" + "Threads" ] } }, - "/thehill/headlines": { + "/threads/profile/{username}": { "get": { - "description": "Returns the current headlines for one The Hill section. `section` is required and takes one of 19 slugs, including `home`, `policy`, `business`, `senate`, `national-security` and `technology`. Each item has its title and URL, plus summary, author, publication time and image when the outlet provides them, and the response echoes the `section`.", - "operationId": "thehill-headlines", + "description": "Returns a public Threads profile by `username` (with or without a leading `@`): name, profile URL, biography, avatar URL, `followers_count` and `threads_count`. Counts are derived from the compact figures shown on the profile page. An unavailable profile returns 404.", + "operationId": "threads-profile", "parameters": [ { - "description": "The Hill RSS section slug", - "enum": [ - "home", - "homenews", - "policy", - "business", - "opinion", - "healthcare", - "campaign", - "national-security", - "senate", - "house", - "administration", - "regulation", - "media", - "defense", - "technology", - "transportation", - "international", - "economy", - "policy-healthcare" - ], - "in": "query", - "name": "section", + "description": "Threads username", + "in": "path", + "name": "username", "required": true, "type": "string", - "x-example": "home" + "x-example": "zuck" } ], "produces": [ @@ -531191,19 +614284,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped profile payload", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/threads.profileResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid username", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Profile not found", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or parser drift", "schema": { "$ref": "#/definitions/app.Response" } @@ -531214,34 +614313,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Hill section headlines", + "summary": "Retrieve a public Threads profile", "tags": [ - "The Hill" + "Threads" ] } }, - "/thehill/news": { + "/threads/profile/{username}/media": { "get": { - "description": "Returns the current top stories from The Hill. It takes no parameters. Each item has its title, URL and, where the outlet gives them, a summary, author, publication time, image URL and `type`. Use the headlines endpoint to read one section instead.", - "operationId": "thehill-news", + "description": "Returns the first public page shown on a profile's Media tab. Items include image and video URLs, including carousel attachments, plus post and topic metadata. The logged-out page exposes no continuation cursor or media-type filter; `pagination_limited` reports when additional results are gated by login or lack a supported cursor.", + "operationId": "threads-profile-media", + "parameters": [ + { + "description": "Threads username", + "in": "path", + "name": "username", + "required": true, + "type": "string", + "x-example": "zuck" + } + ], "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", + "description": "Wrapped profile media payload", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/threads.profileMediaResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Invalid username", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Profile not found", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or parser drift", "schema": { "$ref": "#/definitions/app.Response" } @@ -531252,24 +614367,58 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Hill top stories", + "summary": "Retrieve public media posts from a Threads profile", "tags": [ - "The Hill" + "Threads" ] } }, - "/thehill/sections": { + "/threads/profile/{username}/posts": { "get": { - "description": "Lists the 19 The Hill section slugs that the headlines endpoint accepts, such as `home`, `policy`, `senate`, `defense` and `technology`. Each entry has the section `slug`, its display `name` and its `url`.", - "operationId": "thehill-sections", + "description": "Lists public posts from the profile's Threads tab by `username`. Each item has its code, URL, text, creation time, image and video URLs, like, reply, repost and quote counts, reply flag and author. When `has_more` is true, pass `next_cursor` unchanged as `cursor` to fetch the next page; `pagination_limited` is true if Threads withholds a usable cursor.", + "operationId": "threads-profile-posts", + "parameters": [ + { + "description": "Threads username", + "in": "path", + "name": "username", + "required": true, + "type": "string", + "x-example": "zuck" + }, + { + "description": "Opaque cursor returned by the previous response", + "in": "query", + "name": "cursor", + "type": "string" + } + ], "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", + "description": "Wrapped profile posts payload", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/threads.profilePostsResponseDoc" + } + }, + "400": { + "description": "Invalid username or cursor", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Profile not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Upstream error or parser drift", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -531278,24 +614427,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Hill RSS sections", + "summary": "Retrieve public posts from a Threads profile", "tags": [ - "The Hill" + "Threads" ] } }, - "/thehindu/article": { + "/threads/profile/{username}/replies": { "get": { - "description": "Returns public The Hindu article metadata and body paragraphs from a canonical article URL. A story The Hindu marks subscriber-only returns a permission error instead of a body.", - "operationId": "thehindu-article", + "description": "Returns the first public page shown on a profile's Replies tab. Each item preserves its actual author and public reply metadata. The logged-out page has no continuation cursor; `pagination_limited` is true when Threads reports more items without a cursor or shows a login wall for additional items.", + "operationId": "threads-profile-replies", "parameters": [ { - "description": "Canonical The Hindu article URL", - "in": "query", - "name": "url", + "description": "Threads username", + "in": "path", + "name": "username", "required": true, "type": "string", - "x-example": "https://www.thehindu.com/news/national/kerala/example-article-slug/article71505134.ece" + "x-example": "zuck" } ], "produces": [ @@ -531303,31 +614452,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped profile replies payload", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/threads.profileRepliesResponseDoc" } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "403": { - "description": "Forbidden", + "description": "Invalid username", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "Profile not found", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or parser drift", "schema": { "$ref": "#/definitions/app.Response" } @@ -531338,24 +614481,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Hindu article content", + "summary": "Retrieve public items from a Threads profile's Replies tab", "tags": [ - "The Hindu" + "Threads" ] } }, - "/thehindu/author": { + "/threads/profile/{username}/reposts": { "get": { - "description": "Returns a The Hindu author's byline metadata, biography, contact/social links, and their most recent articles from a canonical author URL.", - "operationId": "thehindu-author", + "description": "Returns the first public page shown on a profile's Reposts tab. Each item preserves the original post author and metadata. `pagination_limited` is true when Threads gates more items behind login or reports more items without a supported cursor.", + "operationId": "threads-profile-reposts", "parameters": [ { - "description": "Canonical The Hindu author URL", - "in": "query", - "name": "url", + "description": "Threads username", + "in": "path", + "name": "username", "required": true, "type": "string", - "x-example": "https://www.thehindu.com/profile/author/devdutt-pattanaik-3563/" + "x-example": "zuck" } ], "produces": [ @@ -531363,25 +614506,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped profile reposts payload", "schema": { - "$ref": "#/definitions/publicnews.theHinduAuthorResponseDoc" + "$ref": "#/definitions/threads.profileRepostsResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid username", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "Profile not found", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or parser drift", "schema": { "$ref": "#/definitions/app.Response" } @@ -531392,94 +614535,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a The Hindu author profile", + "summary": "Retrieve public posts reposted by a Threads profile", "tags": [ - "The Hindu" + "Threads" ] } }, - "/thehindu/headlines": { + "/threads/profile/{username}/topics": { "get": { - "description": "Returns the current headlines for one The Hindu section. `section` is required and takes a slug such as `news-national`, `opinion-editorial`, `business-markets`, `sport-cricket` or `sci-tech-health`. Items carry the title, URL, summary, author, publication time and image, and the response echoes the `section`.", - "operationId": "thehindu-headlines", + "description": "Returns every topic tag listed on a public profile, including the numeric tag id and canonical `name` to pass as `q` to `/threads/search/topics`. Community topics include their community metadata.", + "operationId": "threads-profile-topics", "parameters": [ { - "description": "The Hindu section slug", - "enum": [ - "news", - "news-national", - "news-international", - "news-states", - "news-cities", - "opinion", - "opinion-editorial", - "opinion-cartoon", - "opinion-columns", - "opinion-op-ed", - "opinion-interview", - "opinion-lead", - "opinion-letters", - "opinion-open-page", - "business", - "business-agri-business", - "business-economy", - "business-industry", - "business-markets", - "business-budget", - "sport", - "sport-cricket", - "sport-football", - "sport-hockey", - "sport-tennis", - "sport-athletics", - "sport-motorsport", - "sport-races", - "sport-other-sports", - "entertainment", - "entertainment-art", - "entertainment-dance", - "entertainment-movies", - "entertainment-music", - "entertainment-reviews", - "entertainment-theatre", - "data", - "sci-tech-health", - "sci-tech-science", - "sci-tech-technology", - "sci-tech-technology-gadgets", - "sci-tech-technology-internet", - "sci-tech-energy-and-environment", - "sci-tech-agriculture", - "education", - "education-careers", - "education-colleges", - "education-schools", - "life-and-style", - "life-and-style-fashion", - "life-and-style-fitness", - "life-and-style-homes-and-gardens", - "life-and-style-luxury", - "life-and-style-motoring", - "life-and-style-travel", - "society", - "society-faith", - "society-history-and-culture", - "books", - "books-books-authors", - "books-books-reviews", - "children", - "food", - "food-dining", - "food-features", - "food-guides", - "food-recipes", - "real-estate" - ], - "in": "query", - "name": "section", + "description": "Threads username", + "in": "path", + "name": "username", "required": true, "type": "string", - "x-example": "news" + "x-example": "zuck" } ], "produces": [ @@ -531487,19 +614560,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped profile topics payload", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/threads.profileTopicsResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid username", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Profile not found", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or parser drift", "schema": { "$ref": "#/definitions/app.Response" } @@ -531510,34 +614589,54 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Hindu section headlines", + "summary": "Discover public topic tags on a Threads profile", "tags": [ - "The Hindu" + "Threads" ] } }, - "/thehindu/news": { + "/threads/search": { "get": { - "description": "Returns the current stories from The Hindu's Latest News listing. It takes no parameters. Each item has its title, URL and, where available, a summary, author, publication time, image URL and `type`. For a single desk such as cricket or business, use the headlines endpoint.", - "operationId": "thehindu-news", + "description": "Returns the public first page of Threads search results for a query. `sort` supports `top` and `recent`; `pagination_limited` marks the logged-out login wall because search has no continuation cursor. Author and date filters in Threads require login and are not exposed here.", + "operationId": "threads-search", + "parameters": [ + { + "description": "Search query (1-100 characters)", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "openai" + }, + { + "description": "Result order; defaults to top", + "enum": [ + "top", + "recent" + ], + "in": "query", + "name": "sort", + "type": "string" + } + ], "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", + "description": "Wrapped search payload", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/threads.searchResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Invalid query or sort", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or parser drift", "schema": { "$ref": "#/definitions/app.Response" } @@ -531548,24 +614647,54 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Hindu top stories", + "summary": "Search public Threads posts", "tags": [ - "The Hindu" + "Threads" ] } }, - "/thehindu/sections": { + "/threads/search/topics": { "get": { - "description": "Lists the The Hindu section slugs that the headlines endpoint accepts, covering news, opinion, business, sport, entertainment, sci-tech, education, life and style, society, books and food, for example `news-national`, `sport-cricket` and `food-recipes`. Each entry has a `slug`, `name` and `url`.", - "operationId": "thehindu-sections", + "description": "Returns the public first page of posts for a topic tag. Discover the required `tag_id` and its canonical query `name` from `/threads/profile/{username}/topics` or a post's `topic` metadata. Topic results have no logged-out continuation cursor; `pagination_limited` marks the login wall for more results.", + "operationId": "threads-topic-search", + "parameters": [ + { + "description": "Canonical topic query from a profile topic's `name` or a post topic's `search_query`", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "aithreads" + }, + { + "description": "Numeric Threads topic tag id", + "in": "query", + "name": "tag_id", + "required": true, + "type": "string", + "x-example": "18399895213044171" + } + ], "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", + "description": "Wrapped topic search payload", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/threads.topicSearchResponseDoc" + } + }, + "400": { + "description": "Invalid query or topic id", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Upstream error or parser drift", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -531574,24 +614703,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Hindu sections", + "summary": "Search posts for a public Threads topic tag", "tags": [ - "The Hindu" + "Threads" ] } }, - "/thejournal/article": { + "/ticketmaster/attraction": { "get": { - "description": "Returns public TheJournal.ie article metadata and body paragraphs from a canonical article URL. Stories are served in full to anonymous readers, so paywalled is never set.", - "operationId": "thejournal-article", + "consumes": [ + "application/json" + ], + "description": "Returns one Ticketmaster attraction (artist, team or other event entity) by numeric `id`: name, synopsis, image, URL, classification (segment, genre, sub-genre) and `has_artist_video`. Past performance `setlists` and `setlist_source_url` appear only when available. An unknown attraction returns 404.", + "operationId": "ticketmaster-attraction", "parameters": [ { - "description": "Canonical TheJournal.ie article URL", + "description": "Numeric Ticketmaster attraction id", "in": "query", - "name": "url", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.thejournal.ie/amazon-refunds-200-cheques-7170610-Sep2026/" + "x-example": "1688071" } ], "produces": [ @@ -531601,7 +614733,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/ticketmaster.attractionResponseDoc" } }, "400": { @@ -531616,6 +614748,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -531628,30 +614766,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get TheJournal.ie article content", + "summary": "Get a Ticketmaster attraction", "tags": [ - "TheJournal.ie" + "Ticketmaster" ] } }, - "/thejournal/author": { + "/ticketmaster/attraction-events": { "get": { - "description": "Returns one TheJournal.ie author's public archive page: name, numeric author id, and the most recent articles the first page lists.", - "operationId": "thejournal-author", + "consumes": [ + "application/json" + ], + "description": "Lists upcoming Ticketmaster events for the attraction with numeric `id`. `page` is zero-based, 0 to 49, default 0; `sort` is `relevance` or `date` (default). Each event has title, start time, time zone, venue, attractions, presales, seat map and status flags such as `sold_out` and `cancelled`. The response gives `total`.", + "operationId": "ticketmaster-attraction-events", "parameters": [ { - "description": "Author slug, e.g. ottoline-spearman", + "description": "Numeric Ticketmaster attraction id", "in": "query", - "name": "slug", + "name": "id", + "required": true, "type": "string", - "x-example": "ottoline-spearman" + "x-example": "1688071" }, { - "description": "Canonical thejournal.ie/author// URL, optionally with the numeric author id; alternative to slug", + "default": 0, + "description": "Zero-based page (0-49)", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.thejournal.ie/author/ottoline-spearman/9329/" + "maximum": 49, + "minimum": 0, + "name": "page", + "type": "integer" + }, + { + "default": "date", + "description": "Result order", + "enum": [ + "relevance", + "date" + ], + "in": "query", + "name": "sort", + "type": "string" } ], "produces": [ @@ -531661,7 +614816,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.theJournalAuthorResponseDoc" + "$ref": "#/definitions/ticketmaster.eventsResponseDoc" } }, "400": { @@ -531670,8 +614825,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -531688,48 +614843,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a TheJournal.ie author page", + "summary": "List an attraction's Ticketmaster events", "tags": [ - "TheJournal.ie" + "Ticketmaster" ] } }, - "/thejournal/headlines": { + "/ticketmaster/attraction-related": { "get": { - "description": "Returns current headlines from one public TheJournal.ie section listing page, with the story type label, summary and image when the page shows them.", - "operationId": "thejournal-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns the \"Fans Also Viewed\" attractions shown on one attraction's own page. An attraction with no recommendation data returns a valid empty list.", + "operationId": "ticketmaster-attraction-related", "parameters": [ { - "description": "TheJournal.ie section slug", - "enum": [ - "irish", - "politics", - "international", - "business", - "tech", - "science", - "environment", - "voices", - "investigates", - "factcheck", - "explainer", - "gaeilge", - "sport", - "money-diaries", - "quiz", - "climate-change", - "housing", - "cost-of-living", - "road-safety", - "courts", - "ukraine", - "gaza" - ], + "description": "Numeric Ticketmaster attraction id", "in": "query", - "name": "section", + "name": "id", "required": true, "type": "string", - "x-example": "irish" + "x-example": "1688071" } ], "produces": [ @@ -531739,7 +614873,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/ticketmaster.attractionRelatedResponseDoc" } }, "400": { @@ -531748,6 +614882,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -531760,16 +614906,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get TheJournal.ie section headlines", + "summary": "List a Ticketmaster attraction's related attractions", "tags": [ - "TheJournal.ie" + "Ticketmaster" ] } }, - "/thejournal/news": { + "/ticketmaster/attraction-reviews": { "get": { - "description": "Returns the latest TheJournal.ie stories across all sections. Each item has a title, canonical URL, short summary, publication time (RFC 3339, UTC) and lead image. Items carry no author byline; the article endpoint supplies it. It takes no parameters.", - "operationId": "thejournal-news", + "consumes": [ + "application/json" + ], + "description": "Lists fan reviews for the Ticketmaster attraction with numeric `id`, with its `average_rating`, `best_rating`, `total` and Ticketmaster's own `ai_review_summary`. Each review has a rating, title, text, nickname, city, venue and date. `offset` runs 0 to 9995 (default 0); `limit` runs 10 to 50 (default 10).", + "operationId": "ticketmaster-attraction-reviews", + "parameters": [ + { + "description": "Numeric Ticketmaster attraction id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "1688071" + }, + { + "default": 0, + "description": "Result offset (0-9995)", + "in": "query", + "maximum": 9995, + "minimum": 0, + "name": "offset", + "type": "integer" + }, + { + "default": 10, + "description": "Reviews per page (10-50)", + "in": "query", + "maximum": 50, + "minimum": 10, + "name": "limit", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -531777,7 +614954,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/ticketmaster.attractionReviewsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" } }, "503": { @@ -531792,16 +614987,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get TheJournal.ie top stories", + "summary": "List a Ticketmaster attraction's fan reviews", "tags": [ - "TheJournal.ie" + "Ticketmaster" ] } }, - "/thejournal/sections": { + "/ticketmaster/discover-categories": { "get": { - "description": "Lists the 22 TheJournal.ie sections that the headlines endpoint accepts, verified 2026-09-25: nine category pages such as `irish`, `politics` and `business`, plus topic pages such as `housing`, `courts`, `ukraine` and `gaza`. Each entry has a `slug`, `name` and listing page `url`. Topic pages outside the site navigation are not served.", - "operationId": "thejournal-sections", + "description": "Lists every current Concerts, Sports, Arts & Theater, and Family category with pagination. Section accepts `all`, `concerts`, `sports`, `arts-theater`, and `family`.", + "operationId": "ticketmaster-discover-categories", + "parameters": [ + { + "default": "all", + "description": "Discover section", + "enum": [ + "all", + "concerts", + "sports", + "arts-theater", + "family" + ], + "in": "query", + "name": "section", + "type": "string" + }, + { + "default": 1, + "description": "One-based page", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "default": 50, + "description": "Categories per page", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "per_page", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -531809,7 +615037,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/ticketmaster.categoriesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -531818,24 +615058,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get TheJournal.ie sections", + "summary": "List Ticketmaster discover categories", "tags": [ - "TheJournal.ie" + "Ticketmaster" ] } }, - "/thenextweb/article": { + "/ticketmaster/discover-category-events": { "get": { - "description": "Returns one The Next Web article by `url`, which must be a canonical HTTPS `thenextweb.com/news/` link; off-site URLs and non-article paths are rejected. The response has the title, description, section, authors, publication and update times, image URL, body `paragraphs` and a `paywalled` flag.", - "operationId": "thenextweb-article", + "description": "Lists events in a Ticketmaster discover category, identified by `category_id` from `ticketmaster-discover-categories`. `page` is zero-based, 0 to 49. Each event has title, start time, time zone, venue, attractions, presales, seat map and status flags such as `sold_out` and `cancelled`. The response gives `total` and `count`.", + "operationId": "ticketmaster-discover-category-events", "parameters": [ { - "description": "Canonical thenextweb.com article URL", + "description": "Ticketmaster discover category id", "in": "query", - "name": "url", + "name": "category_id", "required": true, "type": "string", - "x-example": "https://thenextweb.com/news/netflix-wonka-golden-ticket-ai-gene-wilder-voice" + "x-example": "KnvZfZ7vAeA" + }, + { + "default": 0, + "description": "Zero-based page", + "in": "query", + "maximum": 49, + "minimum": 0, + "name": "page", + "type": "integer" } ], "produces": [ @@ -531845,7 +615094,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/ticketmaster.eventsResponseDoc" } }, "400": { @@ -531854,12 +615103,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -531872,30 +615115,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Next Web article content", + "summary": "List events in a Ticketmaster discover category", "tags": [ - "The Next Web" + "Ticketmaster" ] } }, - "/thenextweb/author": { + "/ticketmaster/discover-cities": { "get": { - "description": "Returns a The Next Web author's name, image URL and the story cards on their archive page. Give `slug` or a canonical `thenextweb.com/author/` `url`; `slug` is required when `url` is omitted. Each article has a title, URL, summary, author, image, `type` and publication time.", - "operationId": "thenextweb-author", + "description": "Lists Ticketmaster's discover city destinations for a `country` (two-letter code, default `US`). Each city has a `slug`, name, canonical URL, locale and image. `page` starts at 1 and `per_page` runs 1 to 100. The response gives `total`. Pass a city `slug` to `ticketmaster-discover-city-events`.", + "operationId": "ticketmaster-discover-cities", "parameters": [ { - "description": "Author slug from the public author sitemap or an article byline", + "default": "US", + "description": "Two-letter country code", "in": "query", - "name": "slug", - "type": "string", - "x-example": "darius-popa" + "name": "country", + "type": "string" }, { - "description": "Canonical thenextweb.com/author/ URL; alternative to slug", + "default": 1, + "description": "One-based page", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://thenextweb.com/author/darius-popa" + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "default": 50, + "description": "Cities per page", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -531905,7 +615158,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.thenextwebAuthorResponseDoc" + "$ref": "#/definitions/ticketmaster.citiesResponseDoc" } }, "400": { @@ -531914,12 +615167,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -531932,36 +615179,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get a The Next Web author profile", + "summary": "List Ticketmaster discover cities", "tags": [ - "The Next Web" + "Ticketmaster" ] } }, - "/thenextweb/headlines": { + "/ticketmaster/discover-city-events": { "get": { - "description": "Returns the story cards of one The Next Web editorial section. `section` is required and must be one of `deep-tech`, `sustainability`, `ecosystems`, `data-security`, `fintech-ecommerce`, `future-of-work`, `startups-technology`, `investors-funding`, `government-policy` or `corporates-innovation`; other values return a 400.", - "operationId": "thenextweb-headlines", + "description": "Lists events for a Ticketmaster discover city, identified by `city` (a slug from `ticketmaster-discover-cities`) and `country` (two-letter code matching the city, default `US`). It covers all municipalities grouped under that destination. `page` is zero-based, 0 to 49. Each event has title, start time, venue, attractions and status flags.", + "operationId": "ticketmaster-discover-city-events", "parameters": [ { - "description": "Editorial section slug returned by thenextweb_sections", - "enum": [ - "deep-tech", - "sustainability", - "ecosystems", - "data-security", - "fintech-ecommerce", - "future-of-work", - "startups-technology", - "investors-funding", - "government-policy", - "corporates-innovation" - ], + "description": "Ticketmaster discover city slug", "in": "query", - "name": "section", + "name": "city", "required": true, "type": "string", - "x-example": "deep-tech" + "x-example": "new-york-city" + }, + { + "default": "US", + "description": "Two-letter country code matching the selected city", + "in": "query", + "name": "country", + "type": "string" + }, + { + "default": 0, + "description": "Zero-based page", + "in": "query", + "maximum": 49, + "minimum": 0, + "name": "page", + "type": "integer" } ], "produces": [ @@ -531971,7 +615222,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/ticketmaster.eventsResponseDoc" } }, "400": { @@ -531980,6 +615231,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -531992,16 +615249,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Next Web section headlines", + "summary": "List events in a Ticketmaster discover city", "tags": [ - "The Next Web" + "Ticketmaster" ] } }, - "/thenextweb/news": { + "/ticketmaster/event": { "get": { - "description": "Returns the current top stories from The Next Web. It takes no parameters. Each item has the publisher's title, canonical URL, summary, publication time and author, plus the image URL when one is present.", - "operationId": "thenextweb-news", + "consumes": [ + "application/json" + ], + "description": "Returns one Ticketmaster event by `id`: title, description, start time, time zone, currency, venue, attractions, classification, presales, on-sale time, seat map URL, and flags for sold out, cancelled, postponed, rescheduled and virtual. An unknown event returns 404; a concluded or removed event returns 410.", + "operationId": "ticketmaster-event", + "parameters": [ + { + "description": "Ticketmaster event id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "04006319DDEA2CD5" + } + ], "produces": [ "application/json" ], @@ -532009,7 +615279,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/ticketmaster.eventResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -532030,16 +615312,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Next Web top stories", + "summary": "Get a Ticketmaster event", "tags": [ - "The Next Web" + "Ticketmaster" ] } }, - "/thenextweb/sections": { + "/ticketmaster/search-events": { "get": { - "description": "Returns the ten editorial sections in The Next Web's current homepage navigation. Topic/tag archives, media, events and promotional categories are excluded.", - "operationId": "thenextweb-sections", + "consumes": [ + "application/json" + ], + "description": "Searches Ticketmaster events by artist, event, team, or venue. A zero total with an empty events list is a valid no-results response. The sort enum accepts `relevance` and `date`.", + "operationId": "ticketmaster-search-events", + "parameters": [ + { + "description": "Artist, event, team, or venue query", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "ariana grande" + }, + { + "default": 0, + "description": "Zero-based page (0-49)", + "in": "query", + "maximum": 49, + "minimum": 0, + "name": "page", + "type": "integer" + }, + { + "default": "relevance", + "description": "Result order", + "enum": [ + "relevance", + "date" + ], + "in": "query", + "name": "sort", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -532047,7 +615362,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/ticketmaster.eventsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -532056,27 +615389,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Next Web sections", + "summary": "Search Ticketmaster events", "tags": [ - "The Next Web" + "Ticketmaster" ] } }, - "/therealreal/autocomplete": { + "/ticketmaster/suggest": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns The RealReal's own search-box typeahead suggestions for a partial query.", - "operationId": "therealreal-autocomplete", + "description": "Returns autocomplete suggestions for a partial artist, event, team or venue name in `q`. Each suggestion has a title, `type`, category, URL, image and, when available, an `event_count`. The response also gives the echoed `query` and the `count` of suggestions.", + "operationId": "ticketmaster-suggest", "parameters": [ { - "description": "Partial free-text query to get search-box suggestions for", + "description": "Partial artist, event, team, or venue query", "in": "query", - "name": "term", + "name": "q", "required": true, "type": "string", - "x-example": "gucci" + "x-example": "arian" } ], "produces": [ @@ -532086,7 +615416,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/therealreal.autocompleteResponseDoc" + "$ref": "#/definitions/ticketmaster.suggestionsResponseDoc" } }, "400": { @@ -532095,12 +615425,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -532113,19 +615437,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get The RealReal search-box suggestions", + "summary": "Suggest Ticketmaster artists, events, and venues", "tags": [ - "The RealReal" + "Ticketmaster" ] } }, - "/therealreal/categories": { + "/ticketmaster/trending-attractions": { "get": { "consumes": [ "application/json" ], - "description": "Returns The RealReal's full category (taxon) browse taxonomy: every department, category, and subcategory, nested, with each entry's id (usable directly against search's category_id), permalink (usable directly against the category endpoint's path), and live matching item count. This is reference data that changes rarely, so responses are cached.", - "operationId": "therealreal-categories", + "description": "Returns a ranked list of currently-trending attractions across every segment (music, sports, arts and theater, family), not scoped to one category or city.", + "operationId": "ticketmaster-trending-attractions", "produces": [ "application/json" ], @@ -532133,11 +615457,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/therealreal.categoriesResponseDoc" + "$ref": "#/definitions/ticketmaster.trendingAttractionsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -532154,45 +615478,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get The RealReal category browse taxonomy", + "summary": "List trending Ticketmaster attractions", "tags": [ - "The RealReal" + "Ticketmaster" ] } }, - "/therealreal/category": { + "/ticketmaster/venue": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of The RealReal listings browsed by category (taxon) permalink path, e.g. women/handbags. Pass a previous response's next_after back as after to fetch the next page.", - "operationId": "therealreal-category", + "description": "Returns one Ticketmaster venue by numeric `id`: name, address, city, state, country, postal code, coordinates, time zone, image, URL and visitor information as name and text entries. `seat_maps` and `city_categories` are omitted when none exist. An unknown venue returns 404.", + "operationId": "ticketmaster-venue", "parameters": [ { - "description": "Category permalink path, from the categories endpoint's permalink field", + "description": "Numeric Ticketmaster venue id", "in": "query", - "name": "path", + "name": "id", "required": true, "type": "string", - "x-example": "women/handbags" - }, - { - "description": "Only return items currently marked down from their original price", - "in": "query", - "name": "on_sale", - "type": "boolean" - }, - { - "description": "Only return items currently available to purchase (excludes sold and waitlisted items)", - "in": "query", - "name": "available", - "type": "boolean" - }, - { - "description": "Opaque pagination cursor from a previous response's next_after. Omit for the first page", - "in": "query", - "name": "after", - "type": "string" + "x-example": "32882" } ], "produces": [ @@ -532202,7 +615508,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/therealreal.searchResponseDoc" + "$ref": "#/definitions/ticketmaster.venueResponseDoc" } }, "400": { @@ -532217,8 +615523,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -532235,33 +615541,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse The RealReal listings by category", + "summary": "Get a Ticketmaster venue", "tags": [ - "The RealReal" + "Ticketmaster" ] } }, - "/therealreal/collection": { + "/ticketmaster/venue-enhanced-details": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of The RealReal listings browsed by curated collection slug, e.g. on-sale-now -- sale campaigns, editor's picks, and similar merchandising collections distinct from category/designer browsing. Pass a previous response's next_after back as after to fetch the next page.", - "operationId": "therealreal-collection", + "description": "Returns header branding imagery and external links (the venue's own site, resident teams) for major venues. Smaller venues without enhanced content return 404.", + "operationId": "ticketmaster-venue-enhanced-details", "parameters": [ { - "description": "Collection slug, from the collections endpoint's slug field", + "description": "Numeric Ticketmaster venue id", "in": "query", - "name": "slug", + "name": "id", "required": true, "type": "string", - "x-example": "on-sale-now" - }, - { - "description": "Opaque pagination cursor from a previous response's next_after. Omit for the first page", - "in": "query", - "name": "after", - "type": "string" + "x-example": "32882" } ], "produces": [ @@ -532271,7 +615571,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/therealreal.searchResponseDoc" + "$ref": "#/definitions/ticketmaster.venueEnhancedDetailsResponseDoc" } }, "400": { @@ -532286,8 +615586,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -532304,19 +615604,49 @@ "ApiKeyAuth": [] } ], - "summary": "Browse The RealReal listings by curated collection", + "summary": "Get a Ticketmaster venue's enhanced branding details", "tags": [ - "The RealReal" + "Ticketmaster" ] } }, - "/therealreal/collections": { + "/ticketmaster/venue-events": { "get": { "consumes": [ "application/json" ], - "description": "Returns The RealReal's full published set of curated editorial and sale-campaign collection slugs (e.g. on-sale-now, hermes-birkin-bag), each usable directly against the collection endpoint's own slug field. This is reference data that changes rarely, so responses are cached.", - "operationId": "therealreal-collections", + "description": "Lists upcoming Ticketmaster events at the venue with numeric `id`. `page` is zero-based, 0 to 49, default 0; `sort` is `relevance` or `date` (default). Each event has title, start time, time zone, attractions, presales, seat map and status flags such as `sold_out` and `cancelled`. The response gives `total`.", + "operationId": "ticketmaster-venue-events", + "parameters": [ + { + "description": "Numeric Ticketmaster venue id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "32882" + }, + { + "default": 0, + "description": "Zero-based page (0-49)", + "in": "query", + "maximum": 49, + "minimum": 0, + "name": "page", + "type": "integer" + }, + { + "default": "date", + "description": "Result order", + "enum": [ + "relevance", + "date" + ], + "in": "query", + "name": "sort", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -532324,11 +615654,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/therealreal.collectionsResponseDoc" + "$ref": "#/definitions/ticketmaster.eventsResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -532345,19 +615681,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get The RealReal curated collection slugs", + "summary": "List a venue's Ticketmaster events", "tags": [ - "The RealReal" + "Ticketmaster" ] } }, - "/therealreal/conditions": { + "/ticketweb/event": { "get": { "consumes": [ "application/json" ], - "description": "Returns The RealReal's full authentication condition-grading scale: the closed 6-tier set (Pristine, Excellent, Very Good, Good, Fair, As Is) it defines, each with an id (usable directly against search's condition_id) and live matching item count. This is reference data that changes rarely, so responses are cached.", - "operationId": "therealreal-conditions", + "description": "Returns details for one TicketWeb event: venue, dates, age restriction, delivery methods, and per-tier ticket pricing (base price, fee breakdown, and total) when tickets are on sale. `has_tickets` is false and `sections` is empty for a free/RSVP event with no paid tickets, a sold-out event, or an access-code-gated event -- TicketWeb's own data does not reliably distinguish these three cases at this level, so the response reports the shared observable state (no purchasable sections) rather than guessing which applies.", + "operationId": "ticketweb-event", + "parameters": [ + { + "description": "Numeric TicketWeb event id", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "14241184" + } + ], "produces": [ "application/json" ], @@ -532365,11 +615711,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/therealreal.conditionsResponseDoc" + "$ref": "#/definitions/ticketweb.eventResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -532386,45 +615738,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get The RealReal condition-grading value space", + "summary": "Get a TicketWeb event", "tags": [ - "The RealReal" + "TicketWeb" ] } }, - "/therealreal/designer": { + "/ticketweb/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of The RealReal listings browsed by designer slug, e.g. gucci. Pass a previous response's next_after back as after to fetch the next page.", - "operationId": "therealreal-designer", + "description": "Searches TicketWeb events by artist, event, or venue. A zero count with an empty events list is a valid no-results response. availability is one of `in_stock`, `sold_out`, `unknown` per event.", + "operationId": "ticketweb-search", "parameters": [ { - "description": "Designer slug, from the designers endpoint's slug field", + "description": "Artist, event, or venue query", "in": "query", - "name": "slug", + "name": "q", "required": true, "type": "string", - "x-example": "gucci" - }, - { - "description": "Only return items currently marked down from their original price", - "in": "query", - "name": "on_sale", - "type": "boolean" - }, - { - "description": "Only return items currently available to purchase (excludes sold and waitlisted items)", - "in": "query", - "name": "available", - "type": "boolean" + "x-example": "comedy" }, { - "description": "Opaque pagination cursor from a previous response's next_after. Omit for the first page", + "default": 1, + "description": "One-based result page, 1-50", "in": "query", - "name": "after", - "type": "string" + "maximum": 50, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -532434,7 +615777,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/therealreal.searchResponseDoc" + "$ref": "#/definitions/ticketweb.searchResponseDoc" } }, "400": { @@ -532443,18 +615786,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -532467,26 +615798,36 @@ "ApiKeyAuth": [] } ], - "summary": "Browse The RealReal listings by designer", + "summary": "Search TicketWeb events", "tags": [ - "The RealReal" + "TicketWeb" ] } }, - "/therealreal/designers": { + "/ticketweb/venue": { "get": { "consumes": [ "application/json" ], - "description": "Returns every designer The RealReal recognizes in one department (not just designers with currently active listings), each with an id (usable directly against search's designer_id) and slug (usable directly against the designer endpoint). The directory is segmented by department -- pass category to select one; the response's categories field lists every accepted value. This is reference data that changes rarely, so responses are cached.", - "operationId": "therealreal-designers", + "description": "Returns one TicketWeb venue's detail (name, address) plus one page of its upcoming events. A zero count with an empty events list on page 1 is a valid \"no upcoming events\" response.", + "operationId": "ticketweb-venue", "parameters": [ { - "description": "Designer-directory department. One of: women, men, fine-jewelry, watches, art, home, kids. Defaults to women", + "description": "Numeric TicketWeb venue id", "in": "query", - "name": "category", + "name": "id", + "required": true, "type": "string", - "x-example": "women" + "x-example": "15005" + }, + { + "default": 1, + "description": "One-based page of upcoming events, 1-50", + "in": "query", + "maximum": 50, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -532496,7 +615837,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/therealreal.designersResponseDoc" + "$ref": "#/definitions/ticketweb.venueResponseDoc" } }, "400": { @@ -532505,8 +615846,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -532523,29 +615864,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get The RealReal designer directory", + "summary": "Get a TicketWeb venue", "tags": [ - "The RealReal" + "TicketWeb" ] } }, - "/therealreal/listing": { + "/tiffany/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single The RealReal listing: description, condition detail, category context, and measurements, plus the shared summary fields (name, designer, condition, price, images). Looked up by the listing's full product URL, as returned in a search/category/designer response's url field.", - "operationId": "therealreal-listing", - "parameters": [ - { - "description": "Full product URL, as returned in a search/category/designer response's url field", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.therealreal.com/products/women/handbags/crossbody-bags/chanel-denim-pearl-crush-wallet-on-chain-wdqhu" - } - ], + "description": "Lists every category id Tiffany & Co.'s own product catalog accepts, each with a human-readable label, a kind (category for a real navigable department/subcategory, curated_shop for a curated gift/merchandising shelf), and a live product count. Each id is exactly what tiffany-category's own category parameter accepts -- resolves the category-discovery gap that parameter would otherwise leave as \"find one from a storefront URL\".", + "operationId": "tiffany-categories", "produces": [ "application/json" ], @@ -532553,23 +615884,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/therealreal.listingResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/tiffany.categoriesResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -532586,80 +615905,100 @@ "ApiKeyAuth": [] } ], - "summary": "Get a The RealReal listing detail", + "summary": "List Tiffany & Co. categories", "tags": [ - "The RealReal" + "Tiffany & Co." ] } }, - "/therealreal/search": { + "/tiffany/category": { "get": { "consumes": [ "application/json" ], - "description": "Searches The RealReal's authenticated luxury resale catalog by keyword, optionally combined with category, designer, condition-grade, and price-range filters, returning listing summaries (name, designer, condition, price, images) plus the total matching count and an opaque pagination cursor. Pass a previous response's next_after back as after to fetch the next page.", - "operationId": "therealreal-search", + "description": "Returns one page of a Tiffany & Co. category/browse listing. category is a category id from tiffany-categories's own id field (e.g. ecommerce_us_jewelry_necklaces_and_pendants). sort selects recommended (default), price_asc, price_desc, or newest. material, gemstone, color, product_type, gender, and designer are optional single-value filters -- see tiffany-filters for the live covered value space for each. A hub-level or emptied-out category id, or a filter combination with no matches, returns a well-formed empty result rather than an error.", + "operationId": "tiffany-category", "parameters": [ { - "description": "Free-text keyword search", + "description": "Category id -- see tiffany-categories", "in": "query", - "name": "query", + "name": "category", "required": true, "type": "string", - "x-example": "gucci bag" + "x-example": "ecommerce_us_jewelry_necklaces_and_pendants" }, { - "description": "Category (taxon) id, from the categories endpoint's id field", + "default": "recommended", + "description": "Sort order", + "enum": [ + "recommended", + "price_asc", + "price_desc", + "newest" + ], "in": "query", - "name": "category_id", - "type": "string", - "x-example": "493" + "name": "sort", + "type": "string" }, { - "description": "Designer id, from the designers endpoint's id field", + "default": 1, + "description": "One-based page", "in": "query", - "name": "designer_id", - "type": "string", - "x-example": "127" + "maximum": 500, + "minimum": 1, + "name": "page", + "type": "integer" }, { - "description": "Condition grade id, from the conditions endpoint's id field", + "default": 24, + "description": "Results per page", "in": "query", - "name": "condition_id", + "maximum": 100, + "minimum": 1, + "name": "per_page", + "type": "integer" + }, + { + "description": "Material filter -- see tiffany-filters", + "in": "query", + "name": "material", "type": "string", - "x-example": "20" + "x-example": "Platinum" }, { - "description": "Minimum price in USD", + "description": "Gemstone filter -- see tiffany-filters", "in": "query", - "name": "price_from", - "type": "number", - "x-example": 100 + "name": "gemstone", + "type": "string", + "x-example": "Diamond" }, { - "description": "Maximum price in USD", + "description": "Color filter -- see tiffany-filters", "in": "query", - "name": "price_to", - "type": "number", - "x-example": 1000 + "name": "color", + "type": "string", + "x-example": "Yellow Gold" }, { - "description": "Only return items currently marked down from their original price", + "description": "Product type filter -- see tiffany-filters", "in": "query", - "name": "on_sale", - "type": "boolean" + "name": "product_type", + "type": "string", + "x-example": "Ring" }, { - "description": "Only return items currently available to purchase (excludes sold and waitlisted items)", + "description": "Gender filter -- see tiffany-filters", "in": "query", - "name": "available", - "type": "boolean" + "name": "gender", + "type": "string", + "x-example": "WOMENS" }, { - "description": "Opaque pagination cursor from a previous response's next_after. Omit for the first page", + "description": "Designer/collection filter -- see tiffany-filters", "in": "query", - "name": "after", - "type": "string" + "name": "designer", + "type": "string", + "x-example": "Elsa Peretti®" } ], "produces": [ @@ -532669,7 +616008,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/therealreal.searchResponseDoc" + "$ref": "#/definitions/tiffany.categoryResponseDoc" } }, "400": { @@ -532678,8 +616017,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -532696,27 +616035,45 @@ "ApiKeyAuth": [] } ], - "summary": "Search The RealReal luxury consignment listings", + "summary": "Browse a Tiffany & Co. category", "tags": [ - "The RealReal" + "Tiffany & Co." ] } }, - "/therealreal/similar": { + "/tiffany/content-search": { "get": { "consumes": [ "application/json" ], - "description": "Returns The RealReal's own \"Similar Items\" visual-similarity recommendations for one product, looked up by the product's numeric id (from any other The RealReal endpoint's listing response id field).", - "operationId": "therealreal-similar", + "description": "Searches Tiffany & Co.'s own editorial pages -- style guides, gift guides, and other \"World of Tiffany\" articles -- by free-text keyword. Not product data: no price, stock, or item id fields. A genuine non-matching keyword returns a well-formed empty result (zero total_results).", + "operationId": "tiffany-content-search", "parameters": [ { - "description": "The RealReal numeric product id, from a search/category/designer/listing/collection response's id field", + "description": "Search keyword", "in": "query", - "name": "product_id", + "name": "keyword", "required": true, "type": "string", - "x-example": "54388578" + "x-example": "engagement ring guide" + }, + { + "default": 1, + "description": "One-based page", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "default": 10, + "description": "Results per page", + "in": "query", + "maximum": 50, + "minimum": 1, + "name": "per_page", + "type": "integer" } ], "produces": [ @@ -532726,7 +616083,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/therealreal.similarResponseDoc" + "$ref": "#/definitions/tiffany.contentSearchResponseDoc" } }, "400": { @@ -532735,8 +616092,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -532753,26 +616110,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get The RealReal similar-item recommendations", + "summary": "Search Tiffany & Co. editorial content", "tags": [ - "The RealReal" + "Tiffany & Co." ] } }, - "/thestarmy/article": { + "/tiffany/filters": { "get": { - "description": "Returns public The Star (Malaysia) story metadata and body paragraphs from a canonical story URL. Metered and premium stories return only the public teaser paragraphs the server shows anonymous readers, flagged with paywalled; a story with no readable teaser returns a permission error.", - "operationId": "thestarmy-article", - "parameters": [ - { - "description": "Canonical The Star (Malaysia) story URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.thestar.com.my/news/nation/2026/09/25/ros-freeze-could-rattle-pn-prep" - } + "consumes": [ + "application/json" ], + "description": "Lists every value tiffany-search's and tiffany-category's material, gemstone, color, product_type, gender, and designer filter parameters accept, each with a live product count -- resolves the discovery gap those parameters would otherwise leave as \"find one on the live site's own filter sidebar\".", + "operationId": "tiffany-filters", "produces": [ "application/json" ], @@ -532780,23 +616130,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/tiffany.filtersResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -532813,30 +616151,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Star (Malaysia) article content", + "summary": "List Tiffany & Co. search/category filter values", "tags": [ - "The Star Malaysia" + "Tiffany & Co." ] } }, - "/thestarmy/author": { + "/tiffany/product": { "get": { - "description": "Returns one The Star (Malaysia) byline's public author page: display name, the public byline email, and their most recent stories.", - "operationId": "thestarmy-author", + "consumes": [ + "application/json" + ], + "description": "Returns full product detail for one item: name, description, brand, collection, designer, material, gemstone, USD price, live stock status, category tree, every color/style variation, and images. product_id is Tiffany & Co.'s own item id, as returned by tiffany-search's or tiffany-category's own products[].id field.", + "operationId": "tiffany-product", "parameters": [ { - "description": "Byline name, matched case-insensitively, e.g. Ivan Loh", - "in": "query", - "name": "name", - "type": "string", - "x-example": "Ivan Loh" - }, - { - "description": "Canonical thestar.com.my/authors?q= URL; alternative to name", + "description": "Item id, from a search or category result's id field", "in": "query", - "name": "url", + "name": "product_id", + "required": true, "type": "string", - "x-example": "https://www.thestar.com.my/authors?q=IVAN+LOH" + "x-example": "60957398" } ], "produces": [ @@ -532846,7 +616181,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.thestarmyAuthorResponseDoc" + "$ref": "#/definitions/tiffany.productResponseDoc" } }, "400": { @@ -532861,6 +616196,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -532873,120 +616214,100 @@ "ApiKeyAuth": [] } ], - "summary": "Get a The Star (Malaysia) author page", + "summary": "Get a Tiffany & Co. product", "tags": [ - "The Star Malaysia" + "Tiffany & Co." ] } }, - "/thestarmy/headlines": { + "/tiffany/search": { "get": { - "description": "Returns the current stories of one The Star (Malaysia) section page, usually 10 and up to 100 on column-style sections. `section` is required, for example `news-nation`, `latest-business`, `sport-badminton` or `latest-food`. Items have a title and URL, and when the page shows them a `type`, summary, byline, image and publication time. Older stories are not paginated.", - "operationId": "thestarmy-headlines", + "consumes": [ + "application/json" + ], + "description": "Searches Tiffany & Co.'s product catalog by free-text keyword. Returns product summaries with USD pricing, live stock status, material, gemstone, collection, and designer. sort selects recommended (default), price_asc, price_desc, or newest. material, gemstone, color, product_type, gender, and designer are optional single-value filters -- see tiffany-filters for the live covered value space for each. A genuine non-matching keyword, or a filter combination with no matches, returns a well-formed empty result (zero total_products).", + "operationId": "tiffany-search", "parameters": [ { - "description": "The Star (Malaysia) section slug", + "description": "Search keyword", + "in": "query", + "name": "keyword", + "required": true, + "type": "string", + "x-example": "necklace" + }, + { + "default": "recommended", + "description": "Sort order", "enum": [ - "news-latest", - "latest-nation", - "latest-business", - "latest-education", - "latest-aseanplus", - "latest-sport", - "latest-metro", - "latest-tech", - "latest-world", - "latest-lifestyle", - "latest-food", - "news-nation", - "news-world", - "news-environment", - "news-in-other-media", - "news-true-or-not", - "news-focus", - "aseanplus-aseanplus-news", - "business-insight", - "business-smebiz", - "business-premium", - "sport-athletics", - "sport-hockey", - "sport-football", - "sport-golf", - "sport-badminton", - "sport-tennis", - "sport-motorsport", - "sport-other-sport", - "sport-say-what", - "sport-archery", - "sport-basketball", - "sport-bowling", - "sport-boxing", - "sport-cricket", - "sport-cycling", - "sport-diving", - "sport-gymnastics", - "sport-others", - "sport-rugby", - "sport-shooting", - "sport-squash", - "sport-swimming", - "sport-wrestling", - "metro-metro-news", - "metro-community-sports", - "metro-views", - "lifestyle", - "lifestyle-entertainment-and-style", - "lifestyle-people-and-living", - "lifestyle-health-and-family", - "lifestyle-travel-and-culture", - "lifestyle-viewpoints", - "lifestyle-entertainment", - "lifestyle-living", - "lifestyle-style", - "lifestyle-people", - "lifestyle-health", - "lifestyle-family", - "lifestyle-travel", - "lifestyle-culture", - "lifestyle-design", - "lifestyle-science", - "lifestyle-wellness", - "lifestyle-fitness", - "lifestyle-mind", - "lifestyle-nutrition", - "lifestyle-animals", - "lifestyle-children", - "lifestyle-seniors", - "lifestyle-beauty", - "lifestyle-fashion", - "lifestyle-malaysia", - "lifestyle-global", - "lifestyle-asia-oceania", - "lifestyle-americas", - "lifestyle-europe", - "lifestyle-africa", - "lifestyle-arts", - "lifestyle-books", - "lifestyle-climate", - "lifestyle-movie-review", - "lifestyle-music-review", - "lifestyle-book-review", - "food", - "food-food-for-thought", - "food-food-news", - "food-eating-out", - "tech-tech-news", - "tech-tech-thoughts", - "education-news", - "opinion-columnists", - "opinion-letters", - "starpicks" + "recommended", + "price_asc", + "price_desc", + "newest" ], "in": "query", - "name": "section", - "required": true, + "name": "sort", + "type": "string" + }, + { + "default": 1, + "description": "One-based page", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "default": 24, + "description": "Results per page", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "per_page", + "type": "integer" + }, + { + "description": "Material filter -- see tiffany-filters", + "in": "query", + "name": "material", "type": "string", - "x-example": "news-latest" + "x-example": "Platinum" + }, + { + "description": "Gemstone filter -- see tiffany-filters", + "in": "query", + "name": "gemstone", + "type": "string", + "x-example": "Diamond" + }, + { + "description": "Color filter -- see tiffany-filters", + "in": "query", + "name": "color", + "type": "string", + "x-example": "Yellow Gold" + }, + { + "description": "Product type filter -- see tiffany-filters", + "in": "query", + "name": "product_type", + "type": "string", + "x-example": "Ring" + }, + { + "description": "Gender filter -- see tiffany-filters", + "in": "query", + "name": "gender", + "type": "string", + "x-example": "WOMENS" + }, + { + "description": "Designer/collection filter -- see tiffany-filters", + "in": "query", + "name": "designer", + "type": "string", + "x-example": "Elsa Peretti®" } ], "produces": [ @@ -532996,7 +616317,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/tiffany.searchResponseDoc" } }, "400": { @@ -533005,37 +616326,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get The Star (Malaysia) section headlines", - "tags": [ - "The Star Malaysia" - ] - } - }, - "/thestarmy/news": { - "get": { - "description": "Returns the current top stories on The Star (Malaysia) home page. It takes no parameters. Each item has a title and canonical URL, plus a short section label in `type`, a summary and a byline when the page shows them. `published_at` is omitted here; the section headlines endpoint carries it.", - "operationId": "thestarmy-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "503": { "description": "Service Unavailable", @@ -533049,50 +616344,53 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Star (Malaysia) top stories", + "summary": "Search Tiffany & Co. products", "tags": [ - "The Star Malaysia" + "Tiffany & Co." ] } }, - "/thestarmy/sections": { + "/tiffany/stores": { "get": { - "description": "Lists the 94 The Star (Malaysia) sections that returned at least one story to an anonymous reader when checked on 2026-09-25, and that the headlines endpoint accepts. Examples are `news-latest`, `latest-nation`, `business-smebiz` and `sport-football`. Each entry has a `slug`, a `name` and the section page `url`.", - "operationId": "thestarmy-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get The Star (Malaysia) sections", - "tags": [ - "The Star Malaysia" - ] - } - }, - "/theverge/article": { - "get": { - "description": "Returns one The Verge article by `url`, a canonical HTTPS article link. The response has the title, description, section, authors, publication and update times, lead image URL, body `paragraphs` and a `paywalled` flag. Subscriber-only or blocked pages return an error instead.", - "operationId": "theverge-article", + "description": "Finds Tiffany & Co. physical stores, boutiques, and cafes near a coordinate, ordered by distance. Each result includes address, phone, opening hours, in-store services and specialities, and live open/closed status.", + "operationId": "tiffany-stores", "parameters": [ { - "description": "Canonical The Verge article URL", + "description": "Latitude, -90 to 90", "in": "query", - "name": "url", + "name": "latitude", "required": true, - "type": "string", - "x-example": "https://www.theverge.com/news/998317/bungie-destiny-2-unvaulted-raids-campaigns-destinations" + "type": "number", + "x-example": 40.7128 + }, + { + "description": "Longitude, -180 to 180", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -74.006 + }, + { + "default": 50, + "description": "Search radius in miles", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "radius", + "type": "number" + }, + { + "default": 10, + "description": "Maximum stores to return", + "in": "query", + "maximum": 50, + "minimum": 1, + "name": "limit", + "type": "integer" } ], "produces": [ @@ -533102,7 +616400,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/tiffany.storesResponseDoc" } }, "400": { @@ -533111,8 +616409,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -533129,24 +616427,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Verge article content", + "summary": "Find Tiffany & Co. store locations", "tags": [ - "The Verge" + "Tiffany & Co." ] } }, - "/theverge/author": { + "/tiffany/suggest": { "get": { - "description": "Returns a The Verge author's profile by `url`, a canonical `theverge.com/authors/` link: name, job title such as Senior Reporter, bio and recent articles. Each article has a title, URL, excerpt, ISO-8601 `published_at` and `category`, the post's primary Verge vertical such as Tech.", - "operationId": "theverge-author", + "consumes": [ + "application/json" + ], + "description": "Returns Tiffany & Co.'s own search-box suggestions (typeahead) for a partial query -- a flat list of suggested search phrases, each with its own live total result count on the product catalog. Not product data.", + "operationId": "tiffany-suggest", "parameters": [ { - "description": "Canonical The Verge author URL", + "description": "Partial search query", "in": "query", - "name": "url", + "name": "query", "required": true, "type": "string", - "x-example": "https://www.theverge.com/authors/jay-peters" + "x-example": "ring" } ], "produces": [ @@ -533156,7 +616457,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.thevergeAuthorResponseDoc" + "$ref": "#/definitions/tiffany.suggestResponseDoc" } }, "400": { @@ -533165,8 +616466,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -533183,56 +616484,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get a The Verge author profile", + "summary": "Get Tiffany & Co. search-box suggestions", "tags": [ - "The Verge" + "Tiffany & Co." ] } }, - "/theverge/headlines": { + "/tiktok/category": { "get": { - "description": "Returns the current headlines for one The Verge section. `section` is required and takes one of `tech`, `reviews`, `science`, `entertainment`, `ai`, `policy`, `gaming`, `mobile`, `apps` or `features`. Each item has its title, URL, summary, author and publication time.", - "operationId": "theverge-headlines", - "parameters": [ - { - "description": "The Verge section slug", - "enum": [ - "tech", - "reviews", - "science", - "entertainment", - "ai", - "policy", - "gaming", - "mobile", - "apps", - "features" - ], - "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "tech" - } + "consumes": [ + "application/json" ], + "description": "Returns the content categories shown on TikTok's Explore page. Each entry has the category name and its numeric type code. Takes no parameters.", + "operationId": "tiktok-category", "produces": [ "application/json" ], "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/tiktok.categoryResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -533243,28 +616531,66 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Verge section headlines", + "summary": "List TikTok explore categories", "tags": [ - "The Verge" + "TikTok" ] } }, - "/theverge/news": { + "/tiktok/comments": { "get": { - "description": "Returns the current top stories from The Verge. It takes no parameters. Each item has its title, URL and, where available, a summary, author, publication time, image URL and `type`. Use the headlines endpoint to read one section.", - "operationId": "theverge-news", + "consumes": [ + "application/json" + ], + "description": "Returns the top-level comments on a TikTok video, by the video id from its URL (`aweme_id`). Results are paged by cursor: pass the `cursor` from one response to get the next page, and read `has_more` to see whether more remain. The response also carries the total comment count.", + "operationId": "tiktok-video-comments", + "parameters": [ + { + "description": "TikTok video id from the video URL", + "in": "query", + "name": "aweme_id", + "required": true, + "type": "string", + "x-example": "7304809083817774382" + }, + { + "default": 0, + "description": "Pagination cursor", + "in": "query", + "name": "cursor", + "type": "integer" + } + ], "produces": [ "application/json" ], "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/tiktok.commentsResponseDoc" } }, - "503": { - "description": "Service Unavailable", + "400": { + "description": "Invalid input", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -533275,24 +616601,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Verge top stories", + "summary": "Retrieve TikTok video comments", "tags": [ - "The Verge" + "TikTok" ] } }, - "/theverge/sections": { + "/tiktok/creative-center/filters": { "get": { - "description": "Lists the The Verge sections that the headlines endpoint accepts: `tech`, `reviews`, `science`, `entertainment`, `ai`, `policy`, `gaming`, `mobile`, `apps` and `features`. Each entry has a `slug`, a display `name` and a section `url`.", - "operationId": "theverge-sections", + "consumes": [ + "application/json" + ], + "description": "Returns the complete filter taxonomy for the Creative Center trend endpoints: the countries each trend tab reports, the industry ids and video content tags the filters accept, the supported lookback periods, and the video sort metrics. Use it to discover valid values for the hashtags endpoint's country_code, period, and industry_id parameters and the videos endpoint's country_code, period, sort_by, and content_label_ids parameters. This endpoint performs no upstream request and has no parameters.", + "operationId": "tiktok-creative-center-filters", "produces": [ "application/json" ], "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/creativecenter.filtersResponseDoc" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -533301,24 +616648,67 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Verge sections", + "summary": "Retrieve TikTok Creative Center filter taxonomy", "tags": [ - "The Verge" + "TikTok", + "TikTok Creative Center" ] } }, - "/thisismoney/article": { + "/tiktok/creative-center/hashtags": { "get": { - "description": "Returns one This Is Money article by `url`, a canonical HTTPS article link. The response has the title, description, section, authors, publication and update times, image URL, body `paragraphs` and a `paywalled` flag. Pages that are subscriber-only or blocked return an error.", - "operationId": "thisismoney-article", + "consumes": [ + "application/json" + ], + "description": "Returns TikTok Creative Center's ranked trending hashtags for a country, period, and optional industry. TikTok gates this endpoint's full result set behind a logged-in TikTok One account: an anonymous request always receives at most 3 hashtags per filter combination regardless of country, period, or industry, so selecting an industry returns that industry's own ranked top three. See the filters endpoint for the complete country, period, and industry value lists.", + "operationId": "tiktok-creative-center-hashtags", "parameters": [ { - "description": "Canonical This Is Money article URL", + "description": "ISO-2 country code", + "in": "query", + "name": "country_code", + "required": true, + "type": "string", + "x-example": "US" + }, + { + "default": 7, + "description": "Lookback window in days", + "enum": [ + 7, + 30, + 90 + ], + "in": "query", + "name": "period", + "type": "integer" + }, + { + "description": "Creative Center industry id to restrict the ranking to", + "enum": [ + "10000000000", + "11000000000", + "12000000000", + "13000000000", + "14000000000", + "15000000000", + "17000000000", + "18000000000", + "19000000000", + "21000000000", + "22000000000", + "23000000000", + "24000000000", + "25000000000", + "26000000000", + "27000000000", + "28000000000", + "29000000000" + ], "in": "query", - "name": "url", - "required": true, + "name": "industry_id", "type": "string", - "x-example": "https://www.thisismoney.co.uk/money/markets/article-123/example.html" + "x-example": "22000000000" } ], "produces": [ @@ -533327,24 +616717,36 @@ "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/creativecenter.trendingHashtagsResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream failure", "schema": { "$ref": "#/definitions/app.Response" } @@ -533355,24 +616757,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get This Is Money article content", + "summary": "Retrieve TikTok Creative Center trending hashtags", "tags": [ - "This Is Money" + "TikTok", + "TikTok Creative Center" ] } }, - "/thisismoney/author": { + "/tiktok/creative-center/top-content": { "get": { - "description": "Returns a This Is Money author's profile by `url`, a canonical `thisismoney.co.uk/profile-/.html` link: name, job title, bio, coverage topic tags such as Money or Bills, and recent articles with title, URL, excerpt and ISO-8601 `published_at`. `job_title` and `coverage` can be empty.", - "operationId": "thisismoney-author", + "consumes": [ + "application/json" + ], + "description": "Returns TikTok Creative Center's current Top Content set: four top-performing branded videos, each with the video object (anonymous MP4 and cover URLs), engagement metrics, the author profile and follower count, and (by default) the video's top comments plus keyword mention counts derived from them. The set is a daily snapshot and there is no pagination or historical query; the four titles rotate when the snapshot changes. Set include_comments=false for a smaller response with only video, author, and metrics.", + "operationId": "tiktok-creative-center-top-content", "parameters": [ { - "description": "Canonical This Is Money author URL", + "default": true, + "description": "Include each object's top comments and comment-keyword counts", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.thisismoney.co.uk/profile-2242/toby-walne.html" + "name": "include_comments", + "type": "boolean" } ], "produces": [ @@ -533381,24 +616786,36 @@ "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/publicnews.thisIsMoneyAuthorResponseDoc" + "$ref": "#/definitions/creativecenter.topContentResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream failure", "schema": { "$ref": "#/definitions/app.Response" } @@ -533409,36 +616826,83 @@ "ApiKeyAuth": [] } ], - "summary": "Get a This Is Money author profile", + "summary": "Retrieve TikTok Creative Center top content", "tags": [ - "This Is Money" + "TikTok", + "TikTok Creative Center" ] } }, - "/thisismoney/headlines": { + "/tiktok/creative-center/videos": { "get": { - "description": "Returns the current headlines for one This Is Money section. `section` is required and takes one of `money`, `markets`, `investing`, `savings`, `pensions`, `mortgages`, `property`, `cars`, `travel` or `consumer`. Each item has its title and URL, plus summary, author, publication time and image when the outlet provides them.", - "operationId": "thisismoney-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns TikTok Creative Center's ranked trending videos for a country, period, sort order, and optional content tags. TikTok reports the true result-set size (see total_count/page_count in the response) but gates access to it behind a logged-in TikTok One account: an anonymous request always receives page 1 (4 videos) regardless of sort order or period. Country coverage is uneven: only US, JP, ID, VN, and TH have a regional edge host that returns populated results; other countries return an empty videos array (a genuine no-data response, not an error). See the filters endpoint for the complete country, period, sort, and content tag value lists.", + "operationId": "tiktok-creative-center-videos", "parameters": [ { - "description": "This Is Money section slug", + "description": "ISO-2 country code", + "in": "query", + "name": "country_code", + "required": true, + "type": "string", + "x-example": "US" + }, + { + "default": 7, + "description": "Lookback window in days", "enum": [ - "money", - "markets", - "investing", - "savings", - "pensions", - "mortgages", - "property", - "cars", - "travel", - "consumer" + 7, + 30 ], "in": "query", - "name": "section", - "required": true, + "name": "period", + "type": "integer" + }, + { + "default": "views", + "description": "Sort order", + "enum": [ + "views", + "engagement", + "six_second_views" + ], + "in": "query", + "name": "sort_by", + "type": "string" + }, + { + "description": "Deprecated: single content tag id; use content_label_ids instead", + "in": "query", + "name": "content_label_id", "type": "string", - "x-example": "money" + "x-example": "11015" + }, + { + "collectionFormat": "multi", + "description": "Content tag ids to filter by, repeatable; matches videos carrying any selected tag", + "in": "query", + "items": { + "enum": [ + "11002", + "11003", + "11010", + "11013", + "11015" + ], + "type": "string" + }, + "name": "content_label_ids", + "type": "array", + "x-example": "11003,11015" + }, + { + "default": false, + "description": "Restrict to organic (non-paid) videos only", + "in": "query", + "name": "organic_only", + "type": "boolean" } ], "produces": [ @@ -533447,50 +616911,36 @@ "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/creativecenter.trendingVideosResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get This Is Money section headlines", - "tags": [ - "This Is Money" - ] - } - }, - "/thisismoney/news": { - "get": { - "description": "Returns the current top stories from This Is Money. It takes no parameters. Each item has its title, URL and, where available, a summary, author, publication time, image URL and `type`. Use the headlines endpoint to read one section.", - "operationId": "thisismoney-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "500": { + "description": "Internal server error", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream failure", "schema": { "$ref": "#/definitions/app.Response" } @@ -533501,58 +616951,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get This Is Money top stories", + "summary": "Retrieve TikTok Creative Center trending videos", "tags": [ - "This Is Money" + "TikTok", + "TikTok Creative Center" ] } }, - "/thisismoney/sections": { + "/tiktok/explore/{id}": { "get": { - "description": "Lists the This Is Money sections that the headlines endpoint accepts, such as `money`, `markets`, `savings`, `pensions`, `mortgages`, `property` and `cars`. Each entry has a `slug`, a display `name` and a section `url`.", - "operationId": "thisismoney-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get This Is Money sections", - "tags": [ - "This Is Money" - ] - } - }, - "/threads/post/{username}/{code}": { - "get": { - "description": "Returns one public Threads post by `username` (with or without a leading `@`) and the post `code` from its URL. The response has the post text, canonical URL, preview image URL, and the author's id, name and username. Replies and logged-in fields are not included. An unavailable post returns 404.", - "operationId": "threads-post", + "description": "Returns the TikTok explore feed for a category, given its category type `id` from the category endpoint. The response has `itemList` with the videos, `hasMore` and a `cursor`. A feed that comes back empty is reported as an upstream error, not as an empty list.", + "operationId": "tiktok-explore", "parameters": [ { - "description": "Threads username", - "in": "path", - "name": "username", - "required": true, - "type": "string", - "x-example": "zuck" - }, - { - "description": "Threads post code", + "description": "Category type id returned by the category endpoint", "in": "path", - "name": "code", + "name": "id", "required": true, - "type": "string", - "x-example": "DakyAavlKLZ" + "type": "integer", + "x-example": 120 } ], "produces": [ @@ -533560,25 +616980,31 @@ ], "responses": { "200": { - "description": "Wrapped post payload", + "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/threads.postResponseDoc" + "$ref": "#/definitions/tiktok.exploreResponseDoc" } }, "400": { - "description": "Invalid username or post code", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Post not found", + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Upstream error or parser drift", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -533589,32 +617015,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve a public Threads post", + "summary": "Retrieve the TikTok explore feed for a category", "tags": [ - "Threads" + "TikTok" ] } }, - "/threads/post/{username}/{code}/replies": { + "/tiktok/hashtag/{name}": { "get": { - "description": "Returns the public replies currently exposed to logged-out visitors. The response identifies when Threads reports additional replies but withholds a usable continuation cursor.", - "operationId": "threads-post-replies", + "consumes": [ + "application/json" + ], + "description": "Returns the details of a TikTok hashtag page by `name`, for example `christmas`. The response carries `challengeInfo` with the hashtag's metadata, such as cover images, and `shareMeta` with the share title and description. The hashtag id found here feeds `tiktok-challenge-list`.", + "operationId": "tiktok-challenge", "parameters": [ { - "description": "Threads username", - "in": "path", - "name": "username", - "required": true, - "type": "string", - "x-example": "zuck" - }, - { - "description": "Threads post code", + "description": "Hashtag name (e.g., 'christmas')", "in": "path", - "name": "code", + "name": "name", "required": true, "type": "string", - "x-example": "DakyAavlKLZ" + "x-example": "christmas" } ], "produces": [ @@ -533622,25 +617043,37 @@ ], "responses": { "200": { - "description": "Wrapped replies payload", + "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/threads.repliesResponseDoc" + "$ref": "#/definitions/tiktok.challengeResponseDoc" } }, "400": { - "description": "Invalid username or post code", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Post not found", + "description": "Hashtag does not exist", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Upstream error or parser drift", + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -533651,24 +617084,34 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve public replies to a Threads post", + "summary": "Retrieve TikTok hashtag details", "tags": [ - "Threads" + "TikTok" ] } }, - "/threads/profile/{username}": { + "/tiktok/hashtags": { "get": { - "description": "Returns a public Threads profile by `username` (with or without a leading `@`): name, profile URL, biography, avatar URL, `followers_count` and `threads_count`. Counts are derived from the compact figures shown on the profile page. An unavailable profile returns 404.", - "operationId": "threads-profile", + "consumes": [ + "application/json" + ], + "description": "Lists the videos posted under a TikTok hashtag, identified by the hashtag `id` from the hashtag detail endpoint. `cursor` defaults to 0. The response has `itemList`, `hasMore` and a `cursor`; pass that cursor back to fetch the next page.", + "operationId": "tiktok-challenge-list", "parameters": [ { - "description": "Threads username", - "in": "path", - "name": "username", + "description": "Hashtag id returned by the hashtag detail endpoint", + "in": "query", + "name": "id", "required": true, "type": "string", - "x-example": "zuck" + "x-example": "3242" + }, + { + "default": 0, + "description": "Pagination cursor", + "in": "query", + "name": "cursor", + "type": "integer" } ], "produces": [ @@ -533676,25 +617119,31 @@ ], "responses": { "200": { - "description": "Wrapped profile payload", + "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/threads.profileResponseDoc" + "$ref": "#/definitions/tiktok.challengeListResponseDoc" } }, "400": { - "description": "Invalid username", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Profile not found", + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Upstream error or parser drift", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -533705,50 +617154,37 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve a public Threads profile", + "summary": "Retrieve TikTok hashtag posts", "tags": [ - "Threads" + "TikTok" ] } }, - "/threads/profile/{username}/media": { + "/tiktok/mobile/anchor/list": { "get": { - "description": "Returns the first public page shown on a profile's Media tab. Items include image and video URLs, including carousel attachments, plus post and topic metadata. The logged-out page exposes no continuation cursor or media-type filter; `pagination_limited` reports when additional results are gated by login or lack a supported cursor.", - "operationId": "threads-profile-media", - "parameters": [ - { - "description": "Threads username", - "in": "path", - "name": "username", - "required": true, - "type": "string", - "x-example": "zuck" - } + "consumes": [ + "application/json" ], + "description": "Returns the anchor catalogue TikTok exposes for attaching a tag, product or place to a video. Entry shapes vary by anchor type, so each entry is returned as raw JSON rather than coerced into one schema.", + "operationId": "tiktok-mobile-anchor-list", "produces": [ "application/json" ], "responses": { "200": { - "description": "Wrapped profile media payload", - "schema": { - "$ref": "#/definitions/threads.profileMediaResponseDoc" - } - }, - "400": { - "description": "Invalid username", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/tiktokmobile.anchorListResponseDoc" } }, - "404": { - "description": "Profile not found", + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Upstream error or parser drift", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -533759,30 +617195,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve public media posts from a Threads profile", + "summary": "Anchor catalogue used by the video composer", "tags": [ - "Threads" + "TikTok" ] } }, - "/threads/profile/{username}/posts": { + "/tiktok/mobile/collection/detail": { "get": { - "description": "Lists public posts from the profile's Threads tab by `username`. Each item has its code, URL, text, creation time, image and video URLs, like, reply, repost and quote counts, reply flag and author. When `has_more` is true, pass `next_cursor` unchanged as `cursor` to fetch the next page; `pagination_limited` is true if Threads withholds a usable cursor.", - "operationId": "threads-profile-posts", + "consumes": [ + "application/json" + ], + "description": "Returns one collection's record unmodified in `item_archive`: name, cover images, creator (`uid`, `creator_name`), status and `statistic.total`. `collection_id` is the `item_archive_id` from the collection list endpoint; web playlist (`mix`) ids are a different namespace and are rejected upstream with a permission error.", + "operationId": "tiktok-mobile-collection-detail", "parameters": [ { - "description": "Threads username", - "in": "path", - "name": "username", + "description": "Collection id (`item_archive_id` from the collection list)", + "in": "query", + "name": "collection_id", "required": true, "type": "string", - "x-example": "zuck" - }, - { - "description": "Opaque cursor returned by the previous response", - "in": "query", - "name": "cursor", - "type": "string" + "x-example": "7394627756635573022" } ], "produces": [ @@ -533790,25 +617223,25 @@ ], "responses": { "200": { - "description": "Wrapped profile posts payload", + "description": "OK", "schema": { - "$ref": "#/definitions/threads.profilePostsResponseDoc" + "$ref": "#/definitions/tiktokmobile.collectionDetailResponseDoc" } }, "400": { - "description": "Invalid username or cursor", + "description": "Invalid input or unknown collection", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Profile not found", + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Upstream error or parser drift", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -533819,24 +617252,41 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve public posts from a Threads profile", + "summary": "Get TikTok collection detail on the mobile API", "tags": [ - "Threads" + "TikTok" ] } }, - "/threads/profile/{username}/replies": { + "/tiktok/mobile/collection/list": { "get": { - "description": "Returns the first public page shown on a profile's Replies tab. Each item preserves its actual author and public reply metadata. The logged-out page has no continuation cursor; `pagination_limited` is true when Threads reports more items without a cursor or shows a login wall for additional items.", - "operationId": "threads-profile-replies", + "consumes": [ + "application/json" + ], + "description": "Lists a creator's public collections (the profile's Collections tab) unmodified in `item_archive_detail_list`: each row carries the collection `id`, `name`, cover images and `statistic.total` video count. Use the returned `id` with the collection detail and collection videos endpoints. Requires the numeric `user_id` (a sec_user_id alone is rejected upstream).", + "operationId": "tiktok-mobile-collection-list", "parameters": [ { - "description": "Threads username", - "in": "path", - "name": "username", + "description": "Creator's numeric user id", + "in": "query", + "name": "user_id", "required": true, "type": "string", - "x-example": "zuck" + "x-example": "107955" + }, + { + "default": 0, + "description": "Pagination cursor (server token)", + "in": "query", + "name": "cursor", + "type": "integer" + }, + { + "default": 10, + "description": "Collections per page (max 30)", + "in": "query", + "name": "count", + "type": "integer" } ], "produces": [ @@ -533844,25 +617294,25 @@ ], "responses": { "200": { - "description": "Wrapped profile replies payload", + "description": "OK", "schema": { - "$ref": "#/definitions/threads.profileRepliesResponseDoc" + "$ref": "#/definitions/tiktokmobile.collectionListResponseDoc" } }, "400": { - "description": "Invalid username", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Profile not found", + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Upstream error or parser drift", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -533873,24 +617323,41 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve public items from a Threads profile's Replies tab", + "summary": "List TikTok collections on the mobile API", "tags": [ - "Threads" + "TikTok" ] } }, - "/threads/profile/{username}/reposts": { + "/tiktok/mobile/collection/videos": { "get": { - "description": "Returns the first public page shown on a profile's Reposts tab. Each item preserves the original post author and metadata. `pagination_limited` is true when Threads gates more items behind login or reports more items without a supported cursor.", - "operationId": "threads-profile-reposts", + "consumes": [ + "application/json" + ], + "description": "Pages one collection's videos in the creator's order, returning `items` (full video objects) unmodified with `min_cursor`, `max_cursor` and `has_more`. Pass `max_cursor` back as `cursor` while `has_more` is true. The server caps a page at about 30 rows, so `count` is a request hint.", + "operationId": "tiktok-mobile-collection-videos", "parameters": [ { - "description": "Threads username", - "in": "path", - "name": "username", + "description": "Collection id (`item_archive_id` from the collection list)", + "in": "query", + "name": "collection_id", "required": true, "type": "string", - "x-example": "zuck" + "x-example": "7394627756635573022" + }, + { + "default": 0, + "description": "Paging cursor; use the previous page's max_cursor", + "in": "query", + "name": "cursor", + "type": "integer" + }, + { + "default": 10, + "description": "Videos per page (max 30; the server serves about 30)", + "in": "query", + "name": "count", + "type": "integer" } ], "produces": [ @@ -533898,25 +617365,25 @@ ], "responses": { "200": { - "description": "Wrapped profile reposts payload", + "description": "OK", "schema": { - "$ref": "#/definitions/threads.profileRepostsResponseDoc" + "$ref": "#/definitions/tiktokmobile.collectionVideosResponseDoc" } }, "400": { - "description": "Invalid username", + "description": "Invalid input or unknown collection", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Profile not found", + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Upstream error or parser drift", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -533927,24 +617394,49 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve public posts reposted by a Threads profile", + "summary": "Get videos in a TikTok collection on the mobile API", "tags": [ - "Threads" + "TikTok" ] } }, - "/threads/profile/{username}/topics": { + "/tiktok/mobile/comment/replies": { "get": { - "description": "Returns every topic tag listed on a public profile, including the numeric tag id and canonical `name` to pass as `q` to `/threads/search/topics`. Community topics include their community metadata.", - "operationId": "threads-profile-topics", + "consumes": [ + "application/json" + ], + "description": "Returns the replies to one comment as the mobile app returns them, with `cursor`, `has_more` and `total`. The measured call sends both the video id and the comment id; this route answers even in windows where the top-level comment list is degraded.", + "operationId": "tiktok-mobile-comment-replies", "parameters": [ { - "description": "Threads username", - "in": "path", - "name": "username", + "description": "Video id the comment belongs to", + "in": "query", + "name": "aweme_id", "required": true, "type": "string", - "x-example": "zuck" + "x-example": "7680168962218511636" + }, + { + "description": "Comment id to list replies for", + "in": "query", + "name": "comment_id", + "required": true, + "type": "string", + "x-example": "7680523330713240340" + }, + { + "default": 0, + "description": "Pagination cursor", + "in": "query", + "name": "cursor", + "type": "integer" + }, + { + "default": 20, + "description": "Replies per page (max 50)", + "in": "query", + "name": "count", + "type": "integer" } ], "produces": [ @@ -533952,25 +617444,25 @@ ], "responses": { "200": { - "description": "Wrapped profile topics payload", + "description": "OK", "schema": { - "$ref": "#/definitions/threads.profileTopicsResponseDoc" + "$ref": "#/definitions/tiktokmobile.commentRepliesResponseDoc" } }, "400": { - "description": "Invalid username", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Profile not found", + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Upstream error or parser drift", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -533981,34 +617473,41 @@ "ApiKeyAuth": [] } ], - "summary": "Discover public topic tags on a Threads profile", + "summary": "Retrieve replies to a TikTok comment", "tags": [ - "Threads" + "TikTok" ] } }, - "/threads/search": { + "/tiktok/mobile/comments": { "get": { - "description": "Returns the public first page of Threads search results for a query. `sort` supports `top` and `recent`; `pagination_limited` marks the logged-out login wall because search has no continuation cursor. Author and date filters in Threads require login and are not exposed here.", - "operationId": "threads-search", + "consumes": [ + "application/json" + ], + "description": "Returns the top-level comments of one video as the mobile app returns them: each comment has its full `user` projection, `text`, `digg_count` and `reply_comment_total`, plus `cursor`, `has_more` and `total`. This route needs a signed-in app session and throttles independently of the replies route. A page with no comments (including an empty body) is returned as an empty result, because that is the documented degraded shape in a throttle window.", + "operationId": "tiktok-mobile-comments", "parameters": [ { - "description": "Search query (1-100 characters)", + "description": "Video id to list comments for", "in": "query", - "name": "q", + "name": "aweme_id", "required": true, "type": "string", - "x-example": "openai" + "x-example": "7681236055831416084" }, { - "description": "Result order; defaults to top", - "enum": [ - "top", - "recent" - ], + "default": 0, + "description": "Pagination cursor", "in": "query", - "name": "sort", - "type": "string" + "name": "cursor", + "type": "integer" + }, + { + "default": 20, + "description": "Comments per page (max 50)", + "in": "query", + "name": "count", + "type": "integer" } ], "produces": [ @@ -534016,19 +617515,25 @@ ], "responses": { "200": { - "description": "Wrapped search payload", + "description": "OK", "schema": { - "$ref": "#/definitions/threads.searchResponseDoc" + "$ref": "#/definitions/tiktokmobile.commentsResponseDoc" } }, "400": { - "description": "Invalid query or sort", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Upstream error or parser drift", + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -534039,32 +617544,33 @@ "ApiKeyAuth": [] } ], - "summary": "Search public Threads posts", + "summary": "Retrieve comments for a TikTok video", "tags": [ - "Threads" + "TikTok" ] } }, - "/threads/search/topics": { + "/tiktok/mobile/feed": { "get": { - "description": "Returns the public first page of posts for a topic tag. Discover the required `tag_id` and its canonical query `name` from `/threads/profile/{username}/topics` or a post's `topic` metadata. Topic results have no logged-out continuation cursor; `pagination_limited` marks the login wall for more results.", - "operationId": "threads-topic-search", + "consumes": [ + "application/json" + ], + "description": "Returns one page of videos from TikTok's mobile For You feed. Each item carries `aweme_id`, `create_time`, `author_id`, `share_url` and the verified statistics block (`play_count`, `digg_count`, `comment_count`, `share_count`, `collect_count`, `download_count`, `forward_count`, `lose_count`, `lose_comment_count`, `whatsapp_share_count`, `repost_count`). A zero `count` uses the app's default page size; `count` is capped at 50.", + "operationId": "tiktok-mobile-feed", "parameters": [ { - "description": "Canonical topic query from a profile topic's `name` or a post topic's `search_query`", + "default": 0, + "description": "Videos to request (0 = app default, max 50)", "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "aithreads" + "name": "count", + "type": "integer" }, { - "description": "Numeric Threads topic tag id", + "default": 0, + "description": "Pagination cursor", "in": "query", - "name": "tag_id", - "required": true, - "type": "string", - "x-example": "18399895213044171" + "name": "cursor", + "type": "integer" } ], "produces": [ @@ -534072,19 +617578,31 @@ ], "responses": { "200": { - "description": "Wrapped topic search payload", + "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/threads.topicSearchResponseDoc" + "$ref": "#/definitions/tiktokmobile.feedResponseDoc" } }, "400": { - "description": "Invalid query or topic id", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Upstream error or parser drift", + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -534095,27 +617613,33 @@ "ApiKeyAuth": [] } ], - "summary": "Search posts for a public Threads topic tag", + "summary": "Retrieve the TikTok mobile For You feed", "tags": [ - "Threads" + "TikTok" ] } }, - "/ticketmaster/attraction": { + "/tiktok/mobile/feed/offline": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Ticketmaster attraction (artist, team or other event entity) by numeric `id`: name, synopsis, image, URL, classification (segment, genre, sub-genre) and `has_artist_video`. Past performance `setlists` and `setlist_source_url` appear only when available. An unknown attraction returns 404.", - "operationId": "ticketmaster-attraction", + "description": "Calls the app's cached-pull feed route - `GET /tiktok/feed/offline/v2` - which answers protobuf, and returns a schema-free decode: field numbers become keys, printable length-delimited fields become strings and nested messages become objects, plus a flat list of every string leaf (`strings`), which is the fastest way to mine video ids and captions. Field numbering is inferred because TikTok publishes no schema for this message. This is the cached/offline pull variant, not the primary `POST /aweme/v2/feed/` feed already exposed as `/tiktok/mobile/feed/post`.", + "operationId": "tiktok-mobile-feed-offline", "parameters": [ { - "description": "Numeric Ticketmaster attraction id", + "description": "Pull type forwarded to the app route (measured 0 and 11; default 11)", "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "1688071" + "name": "pull_type", + "type": "integer", + "x-example": 11 + }, + { + "description": "Page size, bounded at 50 (upstream default when omitted)", + "in": "query", + "name": "count", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -534125,29 +617649,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ticketmaster.attractionResponseDoc" + "$ref": "#/definitions/tiktokmobile.offlineFeedResponseDoc" } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -534158,49 +617676,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Ticketmaster attraction", + "summary": "Fetch the app's cached-pull offline feed (protobuf) decoded without a schema", "tags": [ - "Ticketmaster" + "TikTok" ] } }, - "/ticketmaster/attraction-events": { + "/tiktok/mobile/feed/post": { "get": { "consumes": [ "application/json" ], - "description": "Lists upcoming Ticketmaster events for the attraction with numeric `id`. `page` is zero-based, 0 to 49, default 0; `sort` is `relevance` or `date` (default). Each event has title, start time, time zone, venue, attractions, presales, seat map and status flags such as `sold_out` and `cancelled`. The response gives `total`.", - "operationId": "ticketmaster-attraction-events", - "parameters": [ - { - "description": "Numeric Ticketmaster attraction id", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "1688071" - }, - { - "default": 0, - "description": "Zero-based page (0-49)", - "in": "query", - "maximum": 49, - "minimum": 0, - "name": "page", - "type": "integer" - }, - { - "default": "date", - "description": "Result order", - "enum": [ - "relevance", - "date" - ], - "in": "query", - "name": "sort", - "type": "string" - } - ], + "description": "Calls the app's primary feed route - `POST /aweme/v2/feed/`, which the Android client sends with a protobuf request body and answers with protobuf - and returns a schema-free decode: field numbers become keys, length-delimited fields become strings when printable, nested messages when they parse and base64 otherwise, plus a flat list of every string leaf. Field numbering is inferred because TikTok publishes no schema for this message; use the JSON `GET /tiktok/mobile/feed` route when you need the stable structured contract.", + "operationId": "tiktok-mobile-feed-post", "produces": [ "application/json" ], @@ -534208,23 +617696,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ticketmaster.eventsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/tiktokmobile.feedPostResponseDoc" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -534235,27 +617717,27 @@ "ApiKeyAuth": [] } ], - "summary": "List an attraction's Ticketmaster events", + "summary": "Fetch the app's primary feed call (POST, protobuf) decoded without a schema", "tags": [ - "Ticketmaster" + "TikTok" ] } }, - "/ticketmaster/attraction-related": { + "/tiktok/mobile/hashtag": { "get": { "consumes": [ "application/json" ], - "description": "Returns the \"Fans Also Viewed\" attractions shown on one attraction's own page. An attraction with no recommendation data returns a valid empty list.", - "operationId": "ticketmaster-attraction-related", + "description": "Returns one hashtag's detail by name: `challenge_info` (cid, hashtag_name, desc, ...) and `stats` (view and video counts), exactly as the mobile API returns them. Hashtags are addressed by name; an internal id is rejected upstream.", + "operationId": "tiktok-mobile-hashtag", "parameters": [ { - "description": "Numeric Ticketmaster attraction id", + "description": "Hashtag name without the leading #", "in": "query", - "name": "id", + "name": "name", "required": true, "type": "string", - "x-example": "1688071" + "x-example": "readingvlog" } ], "produces": [ @@ -534265,29 +617747,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ticketmaster.attractionRelatedResponseDoc" + "$ref": "#/definitions/tiktokmobile.hashtagInfoResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "Hashtag not found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -534298,44 +617780,51 @@ "ApiKeyAuth": [] } ], - "summary": "List a Ticketmaster attraction's related attractions", + "summary": "Retrieve a TikTok hashtag", "tags": [ - "Ticketmaster" + "TikTok" ] } }, - "/ticketmaster/attraction-reviews": { + "/tiktok/mobile/hashtag/posts": { "get": { "consumes": [ "application/json" ], - "description": "Lists fan reviews for the Ticketmaster attraction with numeric `id`, with its `average_rating`, `best_rating`, `total` and Ticketmaster's own `ai_review_summary`. Each review has a rating, title, text, nickname, city, venue and date. `offset` runs 0 to 9995 (default 0); `limit` runs 10 to 50 (default 10).", - "operationId": "ticketmaster-attraction-reviews", + "description": "Lists videos for one hashtag name as the mobile app returns them (`aweme_list` with author, music and statistics), plus `cursor` and `has_more`. `sort=fresh` is the newest list and works from any measured egress; `sort=popular` is the hot list and only answers from a US egress.", + "operationId": "tiktok-mobile-hashtag-posts", "parameters": [ { - "description": "Numeric Ticketmaster attraction id", + "description": "Hashtag name without the leading #", "in": "query", - "name": "id", + "name": "name", "required": true, "type": "string", - "x-example": "1688071" + "x-example": "readingvlog" }, { - "default": 0, - "description": "Result offset (0-9995)", + "default": "fresh", + "description": "Listing: fresh (newest) or popular (hot)", + "enum": [ + "fresh", + "popular" + ], "in": "query", - "maximum": 9995, - "minimum": 0, - "name": "offset", + "name": "sort", + "type": "string" + }, + { + "default": 20, + "description": "Videos per page (max 50)", + "in": "query", + "name": "count", "type": "integer" }, { - "default": 10, - "description": "Reviews per page (10-50)", + "default": 0, + "description": "Pagination cursor", "in": "query", - "maximum": 50, - "minimum": 10, - "name": "limit", + "name": "cursor", "type": "integer" } ], @@ -534346,29 +617835,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ticketmaster.attractionReviewsResponseDoc" + "$ref": "#/definitions/tiktokmobile.hashtagPostsResponseDoc" } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -534379,46 +617862,40 @@ "ApiKeyAuth": [] } ], - "summary": "List a Ticketmaster attraction's fan reviews", + "summary": "Retrieve videos for a TikTok hashtag", "tags": [ - "Ticketmaster" + "TikTok" ] } }, - "/ticketmaster/discover-categories": { + "/tiktok/mobile/hashtags": { "get": { - "description": "Lists every current Concerts, Sports, Arts & Theater, and Family category with pagination. Section accepts `all`, `concerts`, `sports`, `arts-theater`, and `family`.", - "operationId": "ticketmaster-discover-categories", + "consumes": [ + "application/json" + ], + "description": "Searches hashtags by keyword and returns the matching hashtag objects unmodified, with `cursor` and `has_more` for paging.", + "operationId": "tiktok-mobile-hashtags", "parameters": [ { - "default": "all", - "description": "Discover section", - "enum": [ - "all", - "concerts", - "sports", - "arts-theater", - "family" - ], + "description": "Keyword to search hashtags for", "in": "query", - "name": "section", - "type": "string" + "name": "keyword", + "required": true, + "type": "string", + "x-example": "reading" }, { - "default": 1, - "description": "One-based page", + "default": 20, + "description": "Results per page (max 50)", "in": "query", - "minimum": 1, - "name": "page", + "name": "count", "type": "integer" }, { - "default": 50, - "description": "Categories per page", + "default": 0, + "description": "Pagination cursor", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "per_page", + "name": "cursor", "type": "integer" } ], @@ -534429,17 +617906,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ticketmaster.categoriesResponseDoc" + "$ref": "#/definitions/tiktokmobile.hashtagSearchResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -534450,35 +617933,19 @@ "ApiKeyAuth": [] } ], - "summary": "List Ticketmaster discover categories", + "summary": "Search TikTok hashtags", "tags": [ - "Ticketmaster" + "TikTok" ] } }, - "/ticketmaster/discover-category-events": { + "/tiktok/mobile/live/effects": { "get": { - "description": "Lists events in a Ticketmaster discover category, identified by `category_id` from `ticketmaster-discover-categories`. `page` is zero-based, 0 to 49. Each event has title, start time, time zone, venue, attractions, presales, seat map and status flags such as `sold_out` and `cancelled`. The response gives `total` and `count`.", - "operationId": "ticketmaster-discover-category-events", - "parameters": [ - { - "description": "Ticketmaster discover category id", - "in": "query", - "name": "category_id", - "required": true, - "type": "string", - "x-example": "KnvZfZ7vAeA" - }, - { - "default": 0, - "description": "Zero-based page", - "in": "query", - "maximum": 49, - "minimum": 0, - "name": "page", - "type": "integer" - } + "consumes": [ + "application/json" ], + "description": "Returns the complete LIVE effects/sticker asset catalogue in one call: `data.assets` (2,032 assets, each with `id`, `name`, `describe`, `resource_url`, `resource_uri`, `md5`, `size`, `resource_type`, `download_type`, `model_requirements`, `sticker_asset_variant` and `video_resource_list`). There are no request parameters and no paging, and the body is large because the catalogue is complete.", + "operationId": "tiktok-mobile-live-effects", "produces": [ "application/json" ], @@ -534486,17 +617953,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ticketmaster.eventsResponseDoc" + "$ref": "#/definitions/tiktokmobile.liveEffectsResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -534507,42 +617980,19 @@ "ApiKeyAuth": [] } ], - "summary": "List events in a Ticketmaster discover category", + "summary": "Retrieve TikTok LIVE effects", "tags": [ - "Ticketmaster" + "TikTok" ] } }, - "/ticketmaster/discover-cities": { + "/tiktok/mobile/live/gifts": { "get": { - "description": "Lists Ticketmaster's discover city destinations for a `country` (two-letter code, default `US`). Each city has a `slug`, name, canonical URL, locale and image. `page` starts at 1 and `per_page` runs 1 to 100. The response gives `total`. Pass a city `slug` to `ticketmaster-discover-city-events`.", - "operationId": "ticketmaster-discover-cities", - "parameters": [ - { - "default": "US", - "description": "Two-letter country code", - "in": "query", - "name": "country", - "type": "string" - }, - { - "default": 1, - "description": "One-based page", - "in": "query", - "minimum": 1, - "name": "page", - "type": "integer" - }, - { - "default": 50, - "description": "Cities per page", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "per_page", - "type": "integer" - } + "consumes": [ + "application/json" ], + "description": "Returns the complete LIVE gift catalogue in one call: `data.gifts` (771 gift objects with `diamond_count`, `describe`, `duration`, `gift_resources`, `gift_skins`, `batch_gift_info` and `combo`) plus the gift config and resource maps (`gift_configs`, `gifts_info`, `doodle_templates`, `gift_name_group_map`, `gift_resource_group_map`). There are no request parameters and no paging: the response is a single complete catalogue.", + "operationId": "tiktok-mobile-live-gifts", "produces": [ "application/json" ], @@ -534550,17 +618000,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ticketmaster.citiesResponseDoc" + "$ref": "#/definitions/tiktokmobile.liveGiftsResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -534571,42 +618027,19 @@ "ApiKeyAuth": [] } ], - "summary": "List Ticketmaster discover cities", + "summary": "Retrieve TikTok LIVE gifts", "tags": [ - "Ticketmaster" + "TikTok" ] } }, - "/ticketmaster/discover-city-events": { + "/tiktok/mobile/live/hashtags": { "get": { - "description": "Lists events for a Ticketmaster discover city, identified by `city` (a slug from `ticketmaster-discover-cities`) and `country` (two-letter code matching the city, default `US`). It covers all municipalities grouped under that destination. `page` is zero-based, 0 to 49. Each event has title, start time, venue, attractions and status flags.", - "operationId": "ticketmaster-discover-city-events", - "parameters": [ - { - "description": "Ticketmaster discover city slug", - "in": "query", - "name": "city", - "required": true, - "type": "string", - "x-example": "new-york-city" - }, - { - "default": "US", - "description": "Two-letter country code matching the selected city", - "in": "query", - "name": "country", - "type": "string" - }, - { - "default": 0, - "description": "Zero-based page", - "in": "query", - "maximum": 49, - "minimum": 0, - "name": "page", - "type": "integer" - } + "consumes": [ + "application/json" ], + "description": "Returns the reference set the app's \"go LIVE\" flow uses to tag a stream: the general LIVE hashtags (`hashtags`, measured 18 entries of `{id, image, namespace, title}`, where `id` 0 is the \"None\" tag), the live-studio/live-voice/third-party hashtag subsets (`live_studio_hashtags` 16, `live_voice_hashtags` 16, `third_party_hashtags` 9), the single `game_hashtag`, and a 1,500-entry game catalogue (`game_tag_list`, `game_tag_count`) where every entry carries the same 12 keys: `id`, `short_name`, `show_name`, `full_name`, `bundle_id`, `package_name`, `game_category` (`[{game_type, title}]` with PC games/Mobile games/Console games/Others), `hashtag_id`, `hashtag_list`, `gar`, `landscape` (0/1/2) and `is_new_game`. The upstream is `/webcast/room/hashtag/list/` on the webcast edge host (no origin header); the measured body is 539,361 B and byte-identical on both working webcast hosts, `language`/`count` do not change it, and there is no cursor/has_more, so it is a one-shot reference dump. Measured 2026-10-22,", + "operationId": "tiktok-mobile-live-hashtags", "produces": [ "application/json" ], @@ -534614,23 +618047,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ticketmaster.eventsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/tiktokmobile.liveHashtagCatalogResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -534641,27 +618068,27 @@ "ApiKeyAuth": [] } ], - "summary": "List events in a Ticketmaster discover city", + "summary": "LIVE category/game reference catalogue (hashtags, live-studio/voice/third-party tags, game tags)", "tags": [ - "Ticketmaster" + "TikTok" ] } }, - "/ticketmaster/event": { + "/tiktok/mobile/live/room": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Ticketmaster event by `id`: title, description, start time, time zone, currency, venue, attractions, classification, presales, on-sale time, seat map URL, and flags for sold out, cancelled, postponed, rescheduled and virtual. An unknown event returns 404; a concluded or removed event returns 410.", - "operationId": "ticketmaster-event", + "description": "Returns one LIVE room's detail, keyed by `room_id` — the numeric id that `/api/v1/tiktok/mobile/live/search` returns under `data[].lives.author.room_id`. The upstream is `/webcast/room/info/` on the webcast edge host (no origin header), captured from the running 47.4.3 app's LIVE surface and reproduced against the live gateway. The response projects the fields callers key on — `title`, `status` (2 = live), `user_count` (concurrent viewers), `create_time`, `owner` (user id, nickname, avatar), `stats` (cumulative `enter_count`/`total_user`, `watch_user_count`, `like_count`, `comment_count`, `share_count`, `follow_count`, `replay_viewers`), `stream` (playable `flv_pull_url` per resolution plus `default_resolution`/`candidate_resolution` and the HLS/RTMP URLs) and `cover` — and keeps the upstream room object unmodified in `data` (it has ~500 keys, so a partial struct would drop fields). Measured 2026-10-22: one room returned 193-198 KB with 1,595-1,600 concurrent viewers, 27,916 cumulative viewers, 27,096 enters and FLV URLs for FULL_HD1/HD1/SD1/SD2. `anchor_id` is deliberately NOT forwarded: it was measured to suppress the audience-only `stats.total_user` (27,916 -> 0 on the same room). A missing, non-numeric or unknown room id answers the webcast envelope's status 10011 and is surfaced as a 400; a finished room (status 30003) is a 400 too.", + "operationId": "tiktok-mobile-live-room", "parameters": [ { - "description": "Ticketmaster event id", + "description": "Numeric LIVE room id from /api/v1/tiktok/mobile/live/search (data[].lives.author.room_id)", "in": "query", - "name": "id", + "name": "room_id", "required": true, "type": "string", - "x-example": "04006319DDEA2CD5" + "x-example": "7699174209096059678" } ], "produces": [ @@ -534671,29 +618098,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ticketmaster.eventResponseDoc" + "$ref": "#/definitions/tiktokmobile.liveRoomInfoResponseDoc" } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Invalid input, an unknown/not-live room, or a finished room", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -534704,47 +618125,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Ticketmaster event", + "summary": "LIVE room detail: status, viewers, owner, stream URLs, cover", "tags": [ - "Ticketmaster" + "TikTok" ] } }, - "/ticketmaster/search-events": { + "/tiktok/mobile/live/room-by-user": { "get": { "consumes": [ "application/json" ], - "description": "Searches Ticketmaster events by artist, event, team, or venue. A zero total with an empty events list is a valid no-results response. The sort enum accepts `relevance` and `date`.", - "operationId": "ticketmaster-search-events", + "description": "Returns the LIVE room a TikTok user is currently streaming, keyed by `user_id`. The upstream is `/webcast/room/info_by_user/` on the webcast edge host (no origin header) and returns the same room payload as `/api/v1/tiktok/mobile/live/room` (title, status, concurrent viewers, owner, cumulative stats, per-resolution FLV URLs, cover and the ~500-key room object in `data`), except that the caller addresses a user and the room id is filled from the payload (both `user_id` and `room_id` are echoed). Measured 2026-10-22: `user_id=6707748031095751686` answered 184,575 B (195,220 B on the second webcast host); `anchor_id` alone answers a 57-byte empty payload, so `user_id` is the address. A user with no live room answers status 30003 \"room has finished\" and is surfaced as a 400; a non-numeric user id is a 400 (status 10011); a bare call answers a 57-byte empty success envelope, which is why this endpoint requires `user_id`.", + "operationId": "tiktok-mobile-live-room-by-user", "parameters": [ { - "description": "Artist, event, team, or venue query", + "description": "Numeric TikTok user id (e.g. the owner id from a profile, video author or live search row)", "in": "query", - "name": "q", + "name": "user_id", "required": true, "type": "string", - "x-example": "ariana grande" - }, - { - "default": 0, - "description": "Zero-based page (0-49)", - "in": "query", - "maximum": 49, - "minimum": 0, - "name": "page", - "type": "integer" - }, - { - "default": "relevance", - "description": "Result order", - "enum": [ - "relevance", - "date" - ], - "in": "query", - "name": "sort", - "type": "string" + "x-example": "6707748031095751686" } ], "produces": [ @@ -534754,23 +618155,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ticketmaster.eventsResponseDoc" + "$ref": "#/definitions/tiktokmobile.liveRoomInfoResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input, or the user has no live room right now", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -534781,24 +618182,34 @@ "ApiKeyAuth": [] } ], - "summary": "Search Ticketmaster events", + "summary": "LIVE room by user: the room a user is currently streaming", "tags": [ - "Ticketmaster" + "TikTok" ] } }, - "/ticketmaster/suggest": { + "/tiktok/mobile/live/search": { "get": { - "description": "Returns autocomplete suggestions for a partial artist, event, team or venue name in `q`. Each suggestion has a title, `type`, category, URL, image and, when available, an `event_count`. The response also gives the echoed `query` and the `count` of suggestions.", - "operationId": "ticketmaster-suggest", + "consumes": [ + "application/json" + ], + "description": "Searches the mobile app's LIVE surface by keyword: `data` of `{type, anchor}` entries with `feedback_type` set to `live`, plus `cursor` and `has_more`. `keyword` is required; without it the gateway answers a valid but empty envelope. This is the API's first LIVE endpoint.", + "operationId": "tiktok-mobile-live-search", "parameters": [ { - "description": "Partial artist, event, team, or venue query", + "description": "Search keyword", "in": "query", - "name": "q", + "name": "keyword", "required": true, "type": "string", - "x-example": "arian" + "x-example": "lofi" + }, + { + "default": 0, + "description": "Results to request (0 = app default, max 50)", + "in": "query", + "name": "count", + "type": "integer" } ], "produces": [ @@ -534808,17 +618219,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ticketmaster.suggestionsResponseDoc" + "$ref": "#/definitions/tiktokmobile.liveSearchResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -534829,19 +618246,19 @@ "ApiKeyAuth": [] } ], - "summary": "Suggest Ticketmaster artists, events, and venues", + "summary": "Search TikTok LIVE streams", "tags": [ - "Ticketmaster" + "TikTok" ] } }, - "/ticketmaster/trending-attractions": { + "/tiktok/mobile/live/tabs": { "get": { "consumes": [ "application/json" ], - "description": "Returns a ranked list of currently-trending attractions across every segment (music, sports, arts and theater, family), not scoped to one category or city.", - "operationId": "ticketmaster-trending-attractions", + "description": "Returns the app's LIVE tab catalogue: `data[]` holds one entry per tab with the tab's `id`, `name`, `style`, `enable`/`event` flags and the exact `url`/`inter_url` feed template the client calls for that tab. The measured tab 1 (\"live\") points at `/webcast/feed/?content_type=0&style=2&channel_id=21&sub_channel_id=0&tab_id=1&type=live&sub_type=live&req_type=0&cate_id=0` on `webcast.tiktokv.com`. This closes the route round 553 could not find a host for; it is served by the webcast edge hosts (non-webcast hosts answer 403).", + "operationId": "tiktok-mobile-live-tabs", "produces": [ "application/json" ], @@ -534849,17 +618266,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ticketmaster.trendingAttractionsResponseDoc" + "$ref": "#/definitions/tiktokmobile.liveTabsResponseDoc" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -534870,27 +618287,26 @@ "ApiKeyAuth": [] } ], - "summary": "List trending Ticketmaster attractions", + "summary": "Fetch the LIVE tab catalogue", "tags": [ - "Ticketmaster" + "TikTok" ] } }, - "/ticketmaster/venue": { + "/tiktok/mobile/music/beats": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Ticketmaster venue by numeric `id`: name, address, city, state, country, postal code, coordinates, time zone, image, URL and visitor information as name and text entries. `seat_maps` and `city_categories` are omitted when none exist. An unknown venue returns 404.", - "operationId": "ticketmaster-venue", + "description": "Returns the mobile app's beats/songs chart unmodified: `music_list` of the same full sound objects the pick chart returns (`id_str`, `title`, `user_count`, `album`, `artists`, `cover_*`), ordered as the app's beats list. The measured envelope carries no paging fields.", + "operationId": "tiktok-mobile-music-beats", "parameters": [ { - "description": "Numeric Ticketmaster venue id", + "default": 0, + "description": "Accepted for compatibility; not measured to change the page (max 50)", "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "32882" + "name": "count", + "type": "integer" } ], "produces": [ @@ -534900,29 +618316,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ticketmaster.venueResponseDoc" + "$ref": "#/definitions/tiktokmobile.musicBeatsSongsResponseDoc" } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -534933,27 +618343,57 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Ticketmaster venue", + "summary": "Retrieve TikTok music beats", "tags": [ - "Ticketmaster" + "TikTok" ] } }, - "/ticketmaster/venue-enhanced-details": { + "/tiktok/mobile/music/chart": { "get": { "consumes": [ "application/json" ], - "description": "Returns header branding imagery and external links (the venue's own site, resident teams) for major venues. Smaller venues without enhanced content return 404.", - "operationId": "ticketmaster-venue-enhanced-details", + "description": "Returns one page of the app's regional sound chart: `chart_info` (chart id and update time), `cover_image_url` and a ranked `music_list` whose rows are a `music_info` sound object plus a `trend` entry; page with the returned `cursor` while `has_more` is true. `chart_region` selects the regional chart and accepts only `AE`, `BR`, `CA`, `DE`, `EG`, `FR`, `JP`, `KR`, `LB`, `MX`, `NG`, `SA`, `TR`, `US` and `ZA` (any other value returns an invalid-parameters error; omitting it returns the default chart, which equals `US`). `AE`, `EG`, `LB` and `SA` share one chart, as do `NG` and `ZA`. This is distinct from `music/pick`, which returns the creation panel's pick list with banners.", + "operationId": "tiktok-mobile-music-chart", "parameters": [ { - "description": "Numeric Ticketmaster venue id", + "description": "Region of the chart: AE, BR, CA, DE, EG, FR, JP, KR, LB, MX, NG, SA, TR, US or ZA; omit for the default chart (same as US)", + "enum": [ + "AE", + "BR", + "CA", + "DE", + "EG", + "FR", + "JP", + "KR", + "LB", + "MX", + "NG", + "SA", + "TR", + "US", + "ZA" + ], "in": "query", - "name": "id", - "required": true, + "name": "chart_region", "type": "string", - "x-example": "32882" + "x-example": "US" + }, + { + "default": 0, + "description": "Paging token from the previous response", + "in": "query", + "name": "cursor", + "type": "integer" + }, + { + "default": 10, + "description": "Rows per page (max 50)", + "in": "query", + "name": "count", + "type": "integer" } ], "produces": [ @@ -534963,29 +618403,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ticketmaster.venueEnhancedDetailsResponseDoc" + "$ref": "#/definitions/tiktokmobile.musicChartResponseDoc" } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -534996,49 +618430,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Ticketmaster venue's enhanced branding details", + "summary": "List a regional TikTok sound chart", "tags": [ - "Ticketmaster" + "TikTok" ] } }, - "/ticketmaster/venue-events": { + "/tiktok/mobile/music/choices": { "get": { "consumes": [ "application/json" ], - "description": "Lists upcoming Ticketmaster events at the venue with numeric `id`. `page` is zero-based, 0 to 49, default 0; `sort` is `relevance` or `date` (default). Each event has title, start time, time zone, attractions, presales, seat map and status flags such as `sold_out` and `cancelled`. The response gives `total`.", - "operationId": "ticketmaster-venue-events", - "parameters": [ - { - "description": "Numeric Ticketmaster venue id", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "32882" - }, - { - "default": 0, - "description": "Zero-based page (0-49)", - "in": "query", - "maximum": 49, - "minimum": 0, - "name": "page", - "type": "integer" - }, - { - "default": "date", - "description": "Result order", - "enum": [ - "relevance", - "date" - ], - "in": "query", - "name": "sort", - "type": "string" - } - ], + "description": "Returns the app's \"music choices\" list: the recommended sounds it offers on the video-creation page. The upstream is `/aweme/v1/music/choices/`; each `music_list` entry is the same full sound object the chart routes return (title, album, artists, covers, play URL, duration, ...). Measured 2026-10-21: 56,078 B / 6 full sound objects on one call and 7 on later calls (the same six at the front), and the payload carries NO paging fields (no cursor/has_more), so this is a one-shot recommendation list. The measured `item_id`, `music_id`, `count` and `scene` parameters did not deterministically change the list — the recommendations rotate — so none is exposed.", + "operationId": "tiktok-mobile-music-choices", "produces": [ "application/json" ], @@ -535046,23 +618450,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ticketmaster.eventsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/tiktokmobile.musicChoicesResponseDoc" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -535073,27 +618471,33 @@ "ApiKeyAuth": [] } ], - "summary": "List a venue's Ticketmaster events", + "summary": "Recommended sounds for video creation", "tags": [ - "Ticketmaster" + "TikTok" ] } }, - "/ticketweb/event": { + "/tiktok/mobile/music/collection-list": { "get": { "consumes": [ "application/json" ], - "description": "Returns details for one TicketWeb event: venue, dates, age restriction, delivery methods, and per-tier ticket pricing (base price, fee breakdown, and total) when tickets are on sale. `has_tickets` is false and `sections` is empty for a free/RSVP event with no paid tickets, a sold-out event, or an access-code-gated event -- TicketWeb's own data does not reliably distinguish these three cases at this level, so the response reports the shared observable state (no purchasable sections) rather than guessing which applies.", - "operationId": "ticketweb-event", + "description": "Returns the app's music-collection LIST (`mc_list` of collection objects with covers), the browse list of curated music collections. This is a different route from `/api/v1/tiktok/mobile/music/collections`, which is the collection FEED (`mcf_list`, with each entry's music inline). The upstream is `/aweme/v1/music/collection/`. Unlike the feed, this route PAGES for real: `count` is honoured (measured 1 -> 1 item with `cursor: 1, has_more: 1`; 5 -> 5 items with `cursor: 5`; 10/100 -> all 8 collections) and `cursor` advances (measured `count=5&cursor=5` -> the remaining 3 with `has_more: 0`). A negative count answers upstream status 5, which is rejected locally. Measured 2026-10-21: 8 collections total.", + "operationId": "tiktok-mobile-music-collection-list", "parameters": [ { - "description": "Numeric TicketWeb event id", + "description": "Page size: honoured (1-50 measured, capped by the collection set)", "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "14241184" + "name": "count", + "type": "integer", + "x-example": 5 + }, + { + "description": "Next-page token from the previous response (0 = first page)", + "in": "query", + "name": "cursor", + "type": "integer", + "x-example": 5 } ], "produces": [ @@ -535103,23 +618507,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ticketweb.eventResponseDoc" + "$ref": "#/definitions/tiktokmobile.musicCollectionListResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -535130,35 +618534,32 @@ "ApiKeyAuth": [] } ], - "summary": "Get a TicketWeb event", + "summary": "Music collection list (paged browse)", "tags": [ - "TicketWeb" + "TikTok" ] } }, - "/ticketweb/search": { + "/tiktok/mobile/music/collections": { "get": { "consumes": [ "application/json" ], - "description": "Searches TicketWeb events by artist, event, or venue. A zero count with an empty events list is a valid no-results response. availability is one of `in_stock`, `sold_out`, `unknown` per event.", - "operationId": "ticketweb-search", + "description": "Returns the mobile app's sound-collection feed unmodified: `mcf_list`, where each entry is `{collection, music_list}` (the measured default page holds 8 entries), plus `cursor` and `has_more`. This route is first-page only: the returned `cursor` is not a reusable page token, so callers should not page with it.", + "operationId": "tiktok-mobile-music-collections", "parameters": [ { - "description": "Artist, event, or venue query", + "default": 0, + "description": "Collections to request (0 = app default, max 50)", "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "comedy" + "name": "count", + "type": "integer" }, { - "default": 1, - "description": "One-based result page, 1-50", + "default": 0, + "description": "Accepted for shape compatibility only; not a verified page token", "in": "query", - "maximum": 50, - "minimum": 1, - "name": "page", + "name": "cursor", "type": "integer" } ], @@ -535169,17 +618570,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ticketweb.searchResponseDoc" + "$ref": "#/definitions/tiktokmobile.musicCollectionFeedResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -535190,36 +618597,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search TicketWeb events", + "summary": "Retrieve TikTok music collections", "tags": [ - "TicketWeb" + "TikTok" ] } }, - "/ticketweb/venue": { + "/tiktok/mobile/music/detail": { "get": { "consumes": [ "application/json" ], - "description": "Returns one TicketWeb venue's detail (name, address) plus one page of its upcoming events. A zero count with an empty events list on page 1 is a valid \"no upcoming events\" response.", - "operationId": "ticketweb-venue", + "description": "Returns one sound's page: `music_info` (id, title, author, `user_count`, duration, cover renditions, bound challenge and the other sound fields), its chart rank, similar sounds, recommendation blocks and the behind-the-song flag. `music_id` is required.", + "operationId": "tiktok-mobile-music-detail", "parameters": [ { - "description": "Numeric TicketWeb venue id", + "description": "Sound id", "in": "query", - "name": "id", + "name": "music_id", "required": true, "type": "string", - "x-example": "15005" - }, - { - "default": 1, - "description": "One-based page of upcoming events, 1-50", - "in": "query", - "maximum": 50, - "minimum": 1, - "name": "page", - "type": "integer" + "x-example": "7329791746055080709" } ], "produces": [ @@ -535229,23 +618627,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ticketweb.venueResponseDoc" + "$ref": "#/definitions/tiktokmobile.musicDetailResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -535256,19 +618654,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get a TicketWeb venue", + "summary": "Retrieve one TikTok sound", "tags": [ - "TicketWeb" + "TikTok" ] } }, - "/tiffany/categories": { + "/tiktok/mobile/music/pick": { "get": { "consumes": [ "application/json" ], - "description": "Lists every category id Tiffany & Co.'s own product catalog accepts, each with a human-readable label, a kind (category for a real navigable department/subcategory, curated_shop for a curated gift/merchandising shelf), and a live product count. Each id is exactly what tiffany-category's own category parameter accepts -- resolves the category-discovery gap that parameter would otherwise leave as \"find one from a storefront URL\".", - "operationId": "tiffany-categories", + "description": "Returns the mobile app's sound pick/chart list: `music_list` of full sound objects (id, title, author, user_count, duration, ...) plus the chart list `mc_list` and `radio_cursor`.", + "operationId": "tiktok-mobile-music-pick", + "parameters": [ + { + "default": 20, + "description": "Sounds per page (max 50)", + "in": "query", + "name": "count", + "type": "integer" + }, + { + "default": 0, + "description": "Pagination cursor", + "in": "query", + "name": "cursor", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -535276,17 +618690,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiffany.categoriesResponseDoc" + "$ref": "#/definitions/tiktokmobile.musicPickResponseDoc" + } + }, + "400": { + "description": "Invalid input", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -535297,100 +618717,52 @@ "ApiKeyAuth": [] } ], - "summary": "List Tiffany & Co. categories", + "summary": "Retrieve TikTok sound chart picks", "tags": [ - "Tiffany & Co." + "TikTok" ] } }, - "/tiffany/category": { + "/tiktok/mobile/music/posts": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a Tiffany & Co. category/browse listing. category is a category id from tiffany-categories's own id field (e.g. ecommerce_us_jewelry_necklaces_and_pendants). sort selects recommended (default), price_asc, price_desc, or newest. material, gemstone, color, product_type, gender, and designer are optional single-value filters -- see tiffany-filters for the live covered value space for each. A hub-level or emptied-out category id, or a filter combination with no matches, returns a well-formed empty result rather than an error.", - "operationId": "tiffany-category", + "description": "Lists the videos that use one sound, as the mobile app returns them: `aweme_list` of full video objects (with `author`, `statistics` and `added_sound_music_info`), plus `cursor` and `has_more`. `music_id` is required. `count` is accepted but ignored upstream - the server returns its own default page, so page with `cursor`.", + "operationId": "tiktok-mobile-music-posts", "parameters": [ { - "description": "Category id -- see tiffany-categories", + "description": "Sound (music) id", "in": "query", - "name": "category", + "name": "music_id", "required": true, "type": "string", - "x-example": "ecommerce_us_jewelry_necklaces_and_pendants" + "x-example": "6799585653702019073" }, { - "default": "recommended", - "description": "Sort order", + "default": "fresh", + "description": "Listing: fresh (newest, default) or popular (app canonical music.posts list)", "enum": [ - "recommended", - "price_asc", - "price_desc", - "newest" + "fresh", + "popular" ], "in": "query", "name": "sort", "type": "string" }, { - "default": 1, - "description": "One-based page", + "default": 0, + "description": "Accepted for compatibility; the server ignores it (max 50)", "in": "query", - "maximum": 500, - "minimum": 1, - "name": "page", + "name": "count", "type": "integer" }, { - "default": 24, - "description": "Results per page", + "default": 0, + "description": "Pagination cursor", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "per_page", + "name": "cursor", "type": "integer" - }, - { - "description": "Material filter -- see tiffany-filters", - "in": "query", - "name": "material", - "type": "string", - "x-example": "Platinum" - }, - { - "description": "Gemstone filter -- see tiffany-filters", - "in": "query", - "name": "gemstone", - "type": "string", - "x-example": "Diamond" - }, - { - "description": "Color filter -- see tiffany-filters", - "in": "query", - "name": "color", - "type": "string", - "x-example": "Yellow Gold" - }, - { - "description": "Product type filter -- see tiffany-filters", - "in": "query", - "name": "product_type", - "type": "string", - "x-example": "Ring" - }, - { - "description": "Gender filter -- see tiffany-filters", - "in": "query", - "name": "gender", - "type": "string", - "x-example": "WOMENS" - }, - { - "description": "Designer/collection filter -- see tiffany-filters", - "in": "query", - "name": "designer", - "type": "string", - "x-example": "Elsa Peretti®" } ], "produces": [ @@ -535400,23 +618772,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiffany.categoryResponseDoc" + "$ref": "#/definitions/tiktokmobile.musicFreshAwemeResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -535427,44 +618799,40 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Tiffany & Co. category", + "summary": "Retrieve videos for a TikTok sound", "tags": [ - "Tiffany & Co." + "TikTok" ] } }, - "/tiffany/content-search": { + "/tiktok/mobile/music/related": { "get": { "consumes": [ "application/json" ], - "description": "Searches Tiffany & Co.'s own editorial pages -- style guides, gift guides, and other \"World of Tiffany\" articles -- by free-text keyword. Not product data: no price, stock, or item id fields. A genuine non-matching keyword returns a well-formed empty result (zero total_results).", - "operationId": "tiffany-content-search", + "description": "Returns sounds related to one video: `music_list` of full sound objects, `recall_info_list` explaining why each was recalled, `similar_song_ids`, plus `cursor` and `has_more`.", + "operationId": "tiktok-mobile-music-related", "parameters": [ { - "description": "Search keyword", + "description": "Video id to find related sounds for", "in": "query", - "name": "keyword", + "name": "aweme_id", "required": true, "type": "string", - "x-example": "engagement ring guide" + "x-example": "7681236055831416084" }, { - "default": 1, - "description": "One-based page", + "default": 20, + "description": "Sounds per page (max 50)", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page", + "name": "count", "type": "integer" }, { - "default": 10, - "description": "Results per page", + "default": 0, + "description": "Pagination cursor", "in": "query", - "maximum": 50, - "minimum": 1, - "name": "per_page", + "name": "cursor", "type": "integer" } ], @@ -535475,23 +618843,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiffany.contentSearchResponseDoc" + "$ref": "#/definitions/tiktokmobile.musicRelatedResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -535502,19 +618870,35 @@ "ApiKeyAuth": [] } ], - "summary": "Search Tiffany & Co. editorial content", + "summary": "Retrieve sounds related to a TikTok video", "tags": [ - "Tiffany & Co." + "TikTok" ] } }, - "/tiffany/filters": { + "/tiktok/mobile/music/trending": { "get": { "consumes": [ "application/json" ], - "description": "Lists every value tiffany-search's and tiffany-category's material, gemstone, color, product_type, gender, and designer filter parameters accept, each with a live product count -- resolves the discovery gap those parameters would otherwise leave as \"find one on the live site's own filter sidebar\".", - "operationId": "tiffany-filters", + "description": "Returns the mobile app's trending sound chart: `music_list` of full sound objects (`id_str`, `title`, `user_count`, `album`, `artists`, `cover_large`/`cover_medium`/`cover_thumb`, `binded_challenge_id`, `collect_stat`, `audition_duration`) unmodified, plus `cursor` and `has_more` for paging. This is the chart behind `music.trending`.", + "operationId": "tiktok-mobile-music-trending", + "parameters": [ + { + "default": 20, + "description": "Sounds per page (max 50)", + "in": "query", + "name": "count", + "type": "integer" + }, + { + "default": 0, + "description": "Pagination cursor", + "in": "query", + "name": "cursor", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -535522,17 +618906,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiffany.filtersResponseDoc" + "$ref": "#/definitions/tiktokmobile.hotMusicResponseDoc" + } + }, + "400": { + "description": "Invalid input", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -535543,27 +618933,34 @@ "ApiKeyAuth": [] } ], - "summary": "List Tiffany & Co. search/category filter values", + "summary": "Retrieve TikTok trending sounds", "tags": [ - "Tiffany & Co." + "TikTok" ] } }, - "/tiffany/product": { + "/tiktok/mobile/mv/videos": { "get": { "consumes": [ "application/json" ], - "description": "Returns full product detail for one item: name, description, brand, collection, designer, material, gemstone, USD price, live stock status, category tree, every color/style variation, and images. product_id is Tiffany & Co.'s own item id, as returned by tiffany-search's or tiffany-category's own products[].id field.", - "operationId": "tiffany-product", + "description": "Returns one page of an MV channel feed, the app's music-video (\"MV\") tab. The upstream is `/aweme/v1/mv/aweme/`; `mv_id` is a small numeric CHANNEL index, NOT a video id — measured ids 0-10 each returned a 15-video page of full aweme objects (1.05-1.24 MB), while 100 returned a valid empty page and a real aweme id returned an empty list. The server's page size is 15 and `count` was measured IGNORED (`count=5` and `count=10` both returned 15 items), so `count` is not exposed; page with `cursor`. The returned `cursor` is a reusable next-page token (measured page 1 `cursor: 18, has_more: 1`; `cursor=18` returned a fresh page with `cursor: 38, has_more: 1`). The envelope's `top_awemes` (pinned entries), `original_aweme_id`, `page_extra` and `extra`/`log_pb` are kept as measured. Measured 2026-10-22, A missing or non-numeric `mv_id` is a 400; an unknown numeric channel is a valid empty page.", + "operationId": "tiktok-mobile-mv-videos", "parameters": [ { - "description": "Item id, from a search or category result's id field", + "description": "MV channel index (small integer; measured 0-10 populated, 100 empty)", "in": "query", - "name": "product_id", + "name": "mv_id", "required": true, "type": "string", - "x-example": "60957398" + "x-example": "1" + }, + { + "description": "Next-page token from the previous response (0 = first page)", + "in": "query", + "name": "cursor", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -535573,29 +618970,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiffany.productResponseDoc" + "$ref": "#/definitions/tiktokmobile.mvFeedResponseDoc" } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -535606,100 +618997,62 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Tiffany & Co. product", + "summary": "MV channel feed: the app's music-video tab, paged", "tags": [ - "Tiffany & Co." + "TikTok" ] } }, - "/tiffany/search": { + "/tiktok/mobile/place/detail": { "get": { "consumes": [ "application/json" ], - "description": "Searches Tiffany & Co.'s product catalog by free-text keyword. Returns product summaries with USD pricing, live stock status, material, gemstone, collection, and designer. sort selects recommended (default), price_asc, price_desc, or newest. material, gemstone, color, product_type, gender, and designer are optional single-value filters -- see tiffany-filters for the live covered value space for each. A genuine non-matching keyword, or a filter combination with no matches, returns a well-formed empty result (zero total_products).", - "operationId": "tiffany-search", + "description": "Returns one place detail page, keyed by the `poi_id` that the place search endpoint returns. The upstream is TikTok's server-driven UI (`/tiktok/poi/slash/v1`) frame stream, assembled here into the component map of the place-detail screen: `food_head_info` (place name, formatted address, category, phone, coordinates, opening hours, rating/score with mention count, price range, tags and photo album), `poi_top_videos` (top videos strip), `poi_limited_post` (posts about the place: full video items plus `aweme_cursor`/`has_more_aweme`), `poi_review` (review preview with `has_more`) and `ai_summary` when the place has one. `nodes` is opaque and complete, `frames` keeps the raw ordered frames, and the typed counters (`top_video_count`, `post_count`, `post_cursor`, `has_more_posts`, `review_count`, `has_more_reviews`) are convenience projections. The measured page-size controls are forwarded with the app's defaults but the server applies its own bounds.", + "operationId": "tiktok-mobile-place-detail", "parameters": [ { - "description": "Search keyword", + "description": "Place id from the place search endpoint", "in": "query", - "name": "keyword", + "name": "poi_id", "required": true, "type": "string", - "x-example": "necklace" - }, - { - "default": "recommended", - "description": "Sort order", - "enum": [ - "recommended", - "price_asc", - "price_desc", - "newest" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "default": 1, - "description": "One-based page", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "page", - "type": "integer" - }, - { - "default": 24, - "description": "Results per page", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "per_page", - "type": "integer" - }, - { - "description": "Material filter -- see tiffany-filters", - "in": "query", - "name": "material", - "type": "string", - "x-example": "Platinum" + "x-example": "42203861086875992" }, { - "description": "Gemstone filter -- see tiffany-filters", + "description": "Review preview size forwarded upstream (default 20, bounded at 50)", "in": "query", - "name": "gemstone", - "type": "string", - "x-example": "Diamond" + "name": "review_count", + "type": "integer", + "x-example": 20 }, { - "description": "Color filter -- see tiffany-filters", + "description": "Review cursor forwarded upstream (default 0)", "in": "query", - "name": "color", - "type": "string", - "x-example": "Yellow Gold" + "name": "review_cursor", + "type": "integer", + "x-example": 0 }, { - "description": "Product type filter -- see tiffany-filters", + "description": "Posts page size forwarded upstream (default 9, bounded at 50)", "in": "query", - "name": "product_type", - "type": "string", - "x-example": "Ring" + "name": "merged_count", + "type": "integer", + "x-example": 9 }, { - "description": "Gender filter -- see tiffany-filters", + "description": "Top-videos cursor forwarded upstream (default 0)", "in": "query", - "name": "gender", - "type": "string", - "x-example": "WOMENS" + "name": "video_cursor", + "type": "integer", + "x-example": 0 }, { - "description": "Designer/collection filter -- see tiffany-filters", + "description": "Forwarded analytics origin (default search_places)", "in": "query", - "name": "designer", + "name": "enter_from", "type": "string", - "x-example": "Elsa Peretti®" + "x-example": "search_places" } ], "produces": [ @@ -535709,23 +619062,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiffany.searchResponseDoc" + "$ref": "#/definitions/tiktokmobile.placeDetailResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -535736,53 +619089,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Tiffany & Co. products", + "summary": "Place (POI) detail from the mobile app's Places surface", "tags": [ - "Tiffany & Co." + "TikTok" ] } }, - "/tiffany/stores": { + "/tiktok/mobile/place/info": { "get": { "consumes": [ "application/json" ], - "description": "Finds Tiffany & Co. physical stores, boutiques, and cafes near a coordinate, ordered by distance. Each result includes address, phone, opening hours, in-store services and specialities, and live open/closed status.", - "operationId": "tiffany-stores", + "description": "Returns one place's compact record, keyed by the `poi_id` that the place search endpoint returns. The upstream is TikTok's POI read (`/tiktok/poi/get/v1`), the record behind a place card: `name`, `address`, `category`, `average_price`, `latitude`/`longitude`, `city_code`/`region_code`, `review_score` with `review_count`/`no_rating`, `video_count`, `favorite_count`, `opening_hours`/`opening_status`, `cover`, `share_url`/`share_desc` and `parent_poi`, plus the upstream POI object unmodified in `place` so a richer field is never lost. This is the cheap lookup to use instead of the ~1 MB slash detail page when only the place record is needed. A nonexistent id answers 400 (the upstream business status 3009009 \"poi not exist\" is a caller error, not an outage). Measured 2026-10-21: 4,594 B for a coffee shop (score 4.7 / 2 reviews, price \"$\", hours \"8:00 AM – 5:00 PM\", 11 videos), 4,623 B for a second location (score 4.8 / 13 reviews).", + "operationId": "tiktok-mobile-place-info", "parameters": [ { - "description": "Latitude, -90 to 90", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 40.7128 - }, - { - "description": "Longitude, -180 to 180", + "description": "Place id from the place search endpoint", "in": "query", - "name": "longitude", + "name": "poi_id", "required": true, - "type": "number", - "x-example": -74.006 - }, - { - "default": 50, - "description": "Search radius in miles", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "radius", - "type": "number" - }, - { - "default": 10, - "description": "Maximum stores to return", - "in": "query", - "maximum": 50, - "minimum": 1, - "name": "limit", - "type": "integer" + "type": "string", + "x-example": "42203861086875992" } ], "produces": [ @@ -535792,23 +619119,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiffany.storesResponseDoc" + "$ref": "#/definitions/tiktokmobile.placeInfoResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input, or the place id does not exist", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -535819,27 +619146,47 @@ "ApiKeyAuth": [] } ], - "summary": "Find Tiffany & Co. store locations", + "summary": "Compact place (POI) record: address, coordinates, rating, hours, counters", "tags": [ - "Tiffany & Co." + "TikTok" ] } }, - "/tiffany/suggest": { + "/tiktok/mobile/place/media": { "get": { "consumes": [ "application/json" ], - "description": "Returns Tiffany & Co.'s own search-box suggestions (typeahead) for a partial query -- a flat list of suggested search phrases, each with its own live total result count on the product catalog. Not product data.", - "operationId": "tiffany-suggest", + "description": "Returns one page of a place's mixed video/photo grid unmodified in `item_list`: each row carries an `aweme` video object or a photo entry plus `media_type`/`item_type`, an `aweme_cover`, topic tags and a crop cover. `next_cursor` is the opaque paging token to pass back as `cursor` (send the returned `data_version` with it; the endpoint defaults it to `v1`). `size` is the app's page hint (default 6, max 30; the server caps larger values).", + "operationId": "tiktok-mobile-place-media", "parameters": [ { - "description": "Partial search query", + "description": "Place id from the place search/detail endpoints", "in": "query", - "name": "query", + "name": "poi_id", "required": true, "type": "string", - "x-example": "ring" + "x-example": "42203861086875992" + }, + { + "description": "Opaque next_cursor token from the previous response", + "in": "query", + "name": "cursor", + "type": "string" + }, + { + "default": 6, + "description": "Rows per page hint (max 30)", + "in": "query", + "name": "size", + "type": "integer" + }, + { + "description": "Paging data version carried with cursor (defaults to v1)", + "in": "query", + "name": "data_version", + "type": "string", + "x-example": "v1" } ], "produces": [ @@ -535849,23 +619196,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiffany.suggestResponseDoc" + "$ref": "#/definitions/tiktokmobile.placeMediaResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -535876,33 +619223,43 @@ "ApiKeyAuth": [] } ], - "summary": "Get Tiffany & Co. search-box suggestions", + "summary": "List a TikTok place's mixed media", "tags": [ - "Tiffany & Co." + "TikTok" ] } }, - "/tiktok/category": { + "/tiktok/mobile/place/photos": { "get": { "consumes": [ "application/json" ], - "description": "Returns the content categories shown on TikTok's Explore page. Each entry has the category name and its numeric type code. Takes no parameters.", - "operationId": "tiktok-category", + "description": "Returns one place's photo album, keyed by the `poi_id` that the place search endpoint returns. The upstream is `/tiktok/poi/picture_album/v1`: `categories` holds each album tab (`name`, `pic_tab_typecode`, `pictures` of bare image URL lists and `pictures_v2`, the same photos with `author` attribution, `pic_id`, `source` and origin/compressed URL info), `photo_count` sums the categories' pictures, and `title` is the app's own header. Measured 2026-10-21: one place answered 5,368 B, title \"Gallery (3)\", 1 category with 3 photos whose `pictures_v2` entries name the Google-places contributor; another answered 24,196 B with more photos. The album is one-shot: `count` and `pic_tab_typecode` were measured and did not change the page. A nonexistent id answers 500 (the upstream answers status 4 \"Server is currently unavailable\" on this route, unlike the poi-not-exist code the other place routes use).", + "operationId": "tiktok-mobile-place-photos", + "parameters": [ + { + "description": "Place id from the place search endpoint", + "in": "query", + "name": "poi_id", + "required": true, + "type": "string", + "x-example": "42203861086875992" + } + ], "produces": [ "application/json" ], "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/tiktok.categoryResponseDoc" + "$ref": "#/definitions/tiktokmobile.placePhotosResponseDoc" + } + }, + "400": { + "description": "Invalid input", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -535912,7 +619269,7 @@ } }, "500": { - "description": "Internal server error", + "description": "Internal server error, including a place id that does not resolve", "schema": { "$ref": "#/definitions/app.Response" } @@ -535923,34 +619280,52 @@ "ApiKeyAuth": [] } ], - "summary": "List TikTok explore categories", + "summary": "Place photo album with per-photo attribution", "tags": [ "TikTok" ] } }, - "/tiktok/comments": { + "/tiktok/mobile/place/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns the top-level comments on a TikTok video, by the video id from its URL (`aweme_id`). Results are paged by cursor: pass the `cursor` from one response to get the next page, and read `has_more` to see whether more remain. The response also carries the total comment count.", - "operationId": "tiktok-video-comments", + "description": "Returns one page of a place's reviews (`reviews`, full review objects: author, content, rating, tags, `server_param`) together with the score summary (`review_summary`: score and score range), the review tags (`review_tags`) and the paging token (`cursor`/`has_more`). The route uses the review-landing tab scene (`scene=7`) that the app's own review interface sends; without that scene the upstream rejects the request with `status_code 5`, which is why this family was previously unusable. `poi_id` is the place id from the place search/detail endpoints.", + "operationId": "tiktok-mobile-place-reviews", "parameters": [ { - "description": "TikTok video id from the video URL", + "description": "Place id from the place search/detail endpoints", "in": "query", - "name": "aweme_id", + "name": "poi_id", "required": true, "type": "string", - "x-example": "7304809083817774382" + "x-example": "42203861086875992" }, { "default": 0, - "description": "Pagination cursor", + "description": "Paging token from the previous response", "in": "query", "name": "cursor", "type": "integer" + }, + { + "default": 20, + "description": "Reviews per page (max 30)", + "in": "query", + "name": "count", + "type": "integer" + }, + { + "default": 1, + "description": "Sort order: 1 = default, 2 = recent", + "enum": [ + 1, + 2 + ], + "in": "query", + "name": "sort_type", + "type": "integer" } ], "produces": [ @@ -535959,14 +619334,8 @@ "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/tiktok.commentsResponseDoc" + "$ref": "#/definitions/tiktokmobile.placeReviewsResponseDoc" } }, "400": { @@ -535993,33 +619362,57 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok video comments", + "summary": "List a TikTok place's reviews", "tags": [ "TikTok" ] } }, - "/tiktok/creative-center/filters": { + "/tiktok/mobile/place/videos": { "get": { "consumes": [ "application/json" ], - "description": "Returns the complete filter taxonomy for the Creative Center trend endpoints: the countries each trend tab reports, the industry ids and video content tags the filters accept, the supported lookback periods, and the video sort metrics. Use it to discover valid values for the hashtags endpoint's country_code, period, and industry_id parameters and the videos endpoint's country_code, period, sort_by, and content_label_ids parameters. This endpoint performs no upstream request and has no parameters.", - "operationId": "tiktok-creative-center-filters", + "description": "Returns one page of the videos posted at a place, keyed by the `poi_id` that the place search endpoint returns. The upstream is `/tiktok/poi/video/list/v1`: `aweme_list` holds the app's full video objects (id, description, author, statistics, media URLs, music, anchors, ...) and `item_count` is this page's size. Page with `cursor`: the returned `cursor` is a reusable next-page token (measured page 1 `cursor: 20` with `has_more: 1`, page 2 `cursor: 40`), never with arithmetic on `count`. `count` is a page-size hint, not a strict size: 1/2/5 returned exactly that many items on the first page, a later page returned 8 for count=5, and 10/20/50 were all server-capped at 17. Measured 2026-10-21: 11 videos (940-944 KB) on one place, 17 videos (1.4 MB) on another. The route exposes no sort control: `sort_type` and `order` were measured and did not change the page or its order. The upstream throttles bursts, so paced clients are expected.", + "operationId": "tiktok-mobile-place-videos", + "parameters": [ + { + "description": "Place id from the place search endpoint", + "in": "query", + "name": "poi_id", + "required": true, + "type": "string", + "x-example": "42203861086875992" + }, + { + "description": "Page-size hint: 1-50 measured, server caps larger pages (default is the app default)", + "in": "query", + "name": "count", + "type": "integer", + "x-example": 10 + }, + { + "description": "Next-page token from the previous response (0 = first page)", + "in": "query", + "name": "cursor", + "type": "integer", + "x-example": 0 + } + ], "produces": [ "application/json" ], "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/creativecenter.filtersResponseDoc" + "$ref": "#/definitions/tiktokmobile.placeVideosResponseDoc" + } + }, + "400": { + "description": "Invalid input, or the place id does not exist", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -536040,67 +619433,40 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok Creative Center filter taxonomy", + "summary": "Videos posted at one place (paged)", "tags": [ - "TikTok", - "TikTok Creative Center" + "TikTok" ] } }, - "/tiktok/creative-center/hashtags": { + "/tiktok/mobile/playlist/detail": { "get": { "consumes": [ "application/json" ], - "description": "Returns TikTok Creative Center's ranked trending hashtags for a country, period, and optional industry. TikTok gates this endpoint's full result set behind a logged-in TikTok One account: an anonymous request always receives at most 3 hashtags per filter combination regardless of country, period, or industry, so selecting an industry returns that industry's own ranked top three. See the filters endpoint for the complete country, period, and industry value lists.", - "operationId": "tiktok-creative-center-hashtags", + "description": "Returns one playlist's record unmodified in `mix`: `mix_id`, `name`, `mix_type`, `creator_name`, `author`, `share_info`, `statistic.total` and `status`, plus `is_collect`. `mix_id` is the web playlist id namespace; the owner identity selector (`user_id` or `sec_user_id`) is required as well (the mobile route rejects `mix_id` alone with `status_code 5`).", + "operationId": "tiktok-mobile-playlist-detail", "parameters": [ { - "description": "ISO-2 country code", + "description": "Playlist id (web playlist id namespace)", "in": "query", - "name": "country_code", + "name": "mix_id", "required": true, "type": "string", - "x-example": "US" + "x-example": "7681171537575824159" }, { - "default": 7, - "description": "Lookback window in days", - "enum": [ - 7, - 30, - 90 - ], + "description": "Playlist owner's numeric user id (one of user_id / sec_user_id is required)", "in": "query", - "name": "period", - "type": "integer" + "name": "user_id", + "type": "string", + "x-example": "107955" }, { - "description": "Creative Center industry id to restrict the ranking to", - "enum": [ - "10000000000", - "11000000000", - "12000000000", - "13000000000", - "14000000000", - "15000000000", - "17000000000", - "18000000000", - "19000000000", - "21000000000", - "22000000000", - "23000000000", - "24000000000", - "25000000000", - "26000000000", - "27000000000", - "28000000000", - "29000000000" - ], + "description": "Playlist owner's sec_user_id (one of user_id / sec_user_id is required)", "in": "query", - "name": "industry_id", - "type": "string", - "x-example": "22000000000" + "name": "sec_user_id", + "type": "string" } ], "produces": [ @@ -536109,14 +619475,8 @@ "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/creativecenter.trendingHashtagsResponseDoc" + "$ref": "#/definitions/tiktokmobile.playlistDetailResponseDoc" } }, "400": { @@ -536136,12 +619496,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Upstream failure", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -536149,27 +619503,39 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok Creative Center trending hashtags", + "summary": "Retrieve one TikTok playlist", "tags": [ - "TikTok", - "TikTok Creative Center" + "TikTok" ] } }, - "/tiktok/creative-center/top-content": { + "/tiktok/mobile/playlist/list": { "get": { "consumes": [ "application/json" ], - "description": "Returns TikTok Creative Center's current Top Content set: four top-performing branded videos, each with the video object (anonymous MP4 and cover URLs), engagement metrics, the author profile and follower count, and (by default) the video's top comments plus keyword mention counts derived from them. The set is a daily snapshot and there is no pagination or historical query; the four titles rotate when the snapshot changes. Set include_comments=false for a smaller response with only video, author, and metrics.", - "operationId": "tiktok-creative-center-top-content", + "description": "Lists the public playlists (\"mixes\") of one creator unmodified in `mix_list`: each row carries the playlist `mix_id` (the same id the web playlist URL uses), `name`, `mix_type`, `creator_name`, `statistic.total` and `last_add_video_timestamp`. Feed `mix_id` to the playlist detail endpoint. Requires one identity selector (`user_id` or `sec_user_id`).", + "operationId": "tiktok-mobile-playlist-list", "parameters": [ { - "default": true, - "description": "Include each object's top comments and comment-keyword counts", + "description": "Creator's numeric user id (one of user_id / sec_user_id is required)", "in": "query", - "name": "include_comments", - "type": "boolean" + "name": "user_id", + "type": "string", + "x-example": "107955" + }, + { + "description": "Creator's sec_user_id (one of user_id / sec_user_id is required)", + "in": "query", + "name": "sec_user_id", + "type": "string" + }, + { + "default": 0, + "description": "Paging token from the previous response", + "in": "query", + "name": "cursor", + "type": "integer" } ], "produces": [ @@ -536178,14 +619544,8 @@ "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/creativecenter.topContentResponseDoc" + "$ref": "#/definitions/tiktokmobile.playlistListResponseDoc" } }, "400": { @@ -536205,12 +619565,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Upstream failure", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -536218,83 +619572,41 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok Creative Center top content", + "summary": "List a creator's TikTok playlists", "tags": [ - "TikTok", - "TikTok Creative Center" + "TikTok" ] } }, - "/tiktok/creative-center/videos": { + "/tiktok/mobile/playlist/videos": { "get": { "consumes": [ "application/json" ], - "description": "Returns TikTok Creative Center's ranked trending videos for a country, period, sort order, and optional content tags. TikTok reports the true result-set size (see total_count/page_count in the response) but gates access to it behind a logged-in TikTok One account: an anonymous request always receives page 1 (4 videos) regardless of sort order or period. Country coverage is uneven: only US, JP, ID, VN, and TH have a regional edge host that returns populated results; other countries return an empty videos array (a genuine no-data response, not an error). See the filters endpoint for the complete country, period, sort, and content tag value lists.", - "operationId": "tiktok-creative-center-videos", + "description": "Lists one page of a playlist's videos unmodified in `item_list`: each entry is the full video object the app renders (author, statistics, music, cover renditions, description). `mix_id` is the playlist id from the playlist list/detail endpoints; pass the returned `cursor` back while `has_more` is true. This endpoint is served from the public web twin (`www.tiktok.com/api/mix/item_list/`) because the mobile item route is not usable.", + "operationId": "tiktok-mobile-playlist-videos", "parameters": [ { - "description": "ISO-2 country code", + "description": "Playlist id (web playlist id namespace)", "in": "query", - "name": "country_code", + "name": "mix_id", "required": true, "type": "string", - "x-example": "US" + "x-example": "7681171537575824159" }, { - "default": 7, - "description": "Lookback window in days", - "enum": [ - 7, - 30 - ], + "default": 0, + "description": "Paging token from the previous response", "in": "query", - "name": "period", + "name": "cursor", "type": "integer" }, { - "default": "views", - "description": "Sort order", - "enum": [ - "views", - "engagement", - "six_second_views" - ], - "in": "query", - "name": "sort_by", - "type": "string" - }, - { - "description": "Deprecated: single content tag id; use content_label_ids instead", - "in": "query", - "name": "content_label_id", - "type": "string", - "x-example": "11015" - }, - { - "collectionFormat": "multi", - "description": "Content tag ids to filter by, repeatable; matches videos carrying any selected tag", - "in": "query", - "items": { - "enum": [ - "11002", - "11003", - "11010", - "11013", - "11015" - ], - "type": "string" - }, - "name": "content_label_ids", - "type": "array", - "x-example": "11003,11015" - }, - { - "default": false, - "description": "Restrict to organic (non-paid) videos only", + "default": 10, + "description": "Videos per page (max 30)", "in": "query", - "name": "organic_only", - "type": "boolean" + "name": "count", + "type": "integer" } ], "produces": [ @@ -536303,14 +619615,8 @@ "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/creativecenter.trendingVideosResponseDoc" + "$ref": "#/definitions/tiktokmobile.playlistVideosResponseDoc" } }, "400": { @@ -536330,12 +619636,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Upstream failure", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -536343,28 +619643,47 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok Creative Center trending videos", + "summary": "List a playlist's videos", "tags": [ - "TikTok", - "TikTok Creative Center" + "TikTok" ] } }, - "/tiktok/explore/{id}": { + "/tiktok/mobile/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns the TikTok explore feed for a category, given its category type `id` from the category endpoint. The response has `itemList` with the videos, `hasMore` and a `cursor`. A feed that comes back empty is reported as an upstream error, not as an empty list.", - "operationId": "tiktok-explore", + "description": "Keyword search returning the mobile API result documents unmodified: each entry has `aweme_info` (a full video object with statistics), `card_profile` and search metadata, plus `cursor` and `has_more`. Keep `count` small (20 already exceeds one megabyte of upstream JSON).", + "operationId": "tiktok-mobile-search", "parameters": [ { - "description": "Category type id returned by the category endpoint", - "in": "path", - "name": "id", + "description": "Search keyword", + "in": "query", + "name": "keyword", "required": true, - "type": "integer", - "x-example": 120 + "type": "string", + "x-example": "lofi" + }, + { + "default": 5, + "description": "Results per page (max 20)", + "in": "query", + "name": "count", + "type": "integer" + }, + { + "default": 0, + "description": "Result offset; pass search_id with a non-zero offset", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "search_id returned by a previous page of the same search", + "in": "query", + "name": "search_id", + "type": "string" } ], "produces": [ @@ -536373,14 +619692,8 @@ "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/tiktok.exploreResponseDoc" + "$ref": "#/definitions/tiktokmobile.searchGeneralResponseDoc" } }, "400": { @@ -536407,27 +619720,48 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve the TikTok explore feed for a category", + "summary": "Search TikTok videos on the mobile API", "tags": [ "TikTok" ] } }, - "/tiktok/hashtag/{name}": { + "/tiktok/mobile/search/effects": { "get": { "consumes": [ "application/json" ], - "description": "Returns the details of a TikTok hashtag page by `name`, for example `christmas`. The response carries `challengeInfo` with the hashtag's metadata, such as cover images, and `shareMeta` with the share title and description. The hashtag id found here feeds `tiktok-challenge-list`.", - "operationId": "tiktok-challenge", + "description": "Searches TikTok's effect catalogue by `keyword`, returning the app's full effect objects (`name`, `hint`, `icon_url`, `file_url`, `effect_id`, `types`, `tags`, `parent`/`children`, `effect_type`, `music`, `source`, `designer_id`, `schema`). The upstream is `/aweme/v1/search/effect/`; the page is unfolded to the top level (`effects`, `cursor`, `has_more`, `search_id`, `use_hot`, plus `bind_effects`/`collection` on some queries). Paging is real but needs BOTH halves of the token: pass the previous response's `cursor` and `search_id` together (measured: page 1 `cursor: 100`, page 2 with `cursor=100&search_id=...` returned the final effect with `has_more: false`; a cursor without its `search_id` returns an empty page, which the service rejects as a 400). `count` and `offset` were measured as no-ops. Measured 2026-10-21: `keyword=green screen` -> 6 effects (11,831 B) + 1 on page 2, `green` -> 2, `字幕` -> 4; a keyword with no matches is a valid empty page.", + "operationId": "tiktok-mobile-search-effects", "parameters": [ { - "description": "Hashtag name (e.g., 'christmas')", - "in": "path", - "name": "name", + "description": "Effect name or text, e.g. green screen", + "in": "query", + "name": "keyword", "required": true, "type": "string", - "x-example": "christmas" + "x-example": "green screen" + }, + { + "description": "Accepted for shape parity; the server was measured to ignore it", + "in": "query", + "name": "count", + "type": "integer", + "x-example": 20 + }, + { + "description": "Next-page token from the previous response (0 = first page)", + "in": "query", + "name": "cursor", + "type": "integer", + "x-example": 100 + }, + { + "description": "Search-session token from the previous response; required together with cursor", + "in": "query", + "name": "search_id", + "type": "string", + "x-example": "20261021173221C8185FF1D4A1062AD97C" } ], "produces": [ @@ -536436,24 +619770,12 @@ "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/tiktok.challengeResponseDoc" + "$ref": "#/definitions/tiktokmobile.searchEffectsResponseDoc" } }, "400": { - "description": "Invalid input", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Hashtag does not exist", + "description": "Invalid input, including a cursor sent without its search_id", "schema": { "$ref": "#/definitions/app.Response" } @@ -536476,34 +619798,34 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok hashtag details", + "summary": "Search TikTok effects/stickers by keyword", "tags": [ "TikTok" ] } }, - "/tiktok/hashtags": { + "/tiktok/mobile/search/hashtags": { "get": { "consumes": [ "application/json" ], - "description": "Lists the videos posted under a TikTok hashtag, identified by the hashtag `id` from the hashtag detail endpoint. `cursor` defaults to 0. The response has `itemList`, `hasMore` and a `cursor`; pass that cursor back to fetch the next page.", - "operationId": "tiktok-challenge-list", + "description": "Returns the hashtag suggestions the app shows while typing in the search box, keyed by `keyword`. The upstream is `/aweme/v1/search/challengesug/`; each `sug_list` row carries `cha_name` (hashtag name), `view_count`, `use_count` and `cid` (the numeric hashtag id), so this is the discovery step for the hashtag endpoints (`hashtag info` is name-keyed). Measured 2026-10-21: `keyword=lofi` returned 10 rows (`lofi` 18.2B views / 1.9M uses, then `lofiasmr`, `lofihiphop`, ...), `coffee` and `ラーメン` also returned 10 rows, and a keyword with no suggestions is a valid empty page (`sug_list: []`). `count` is accepted for shape parity but the server was measured to ignore it (5/20/100 all returned 10 rows), and the route has no paging.", + "operationId": "tiktok-mobile-search-hashtags", "parameters": [ { - "description": "Hashtag id returned by the hashtag detail endpoint", + "description": "Text typed so far; the server also accepts prefixes (e.g. lofi -> lofihiphop)", "in": "query", - "name": "id", + "name": "keyword", "required": true, "type": "string", - "x-example": "3242" + "x-example": "lofi" }, { - "default": 0, - "description": "Pagination cursor", + "description": "Accepted for shape parity; the server was measured to ignore it (always up to 10 rows)", "in": "query", - "name": "cursor", - "type": "integer" + "name": "count", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -536512,14 +619834,8 @@ "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/tiktok.challengeListResponseDoc" + "$ref": "#/definitions/tiktokmobile.hashtagSuggestionsResponseDoc" } }, "400": { @@ -536546,19 +619862,43 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok hashtag posts", + "summary": "Hashtag suggestions for a keyword (hashtag typeahead)", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/anchor/list": { + "/tiktok/mobile/search/music": { "get": { "consumes": [ "application/json" ], - "description": "Returns the anchor catalogue TikTok exposes for attaching a tag, product or place to a video. Entry shapes vary by anchor type, so each entry is returned as raw JSON rather than coerced into one schema.", - "operationId": "tiktok-mobile-anchor-list", + "description": "Keyword search over sounds, returning `music_info_list` of full sound objects unmodified with `cursor`, `has_more` and `total`.", + "operationId": "tiktok-mobile-search-music", + "parameters": [ + { + "description": "Search keyword", + "in": "query", + "name": "keyword", + "required": true, + "type": "string", + "x-example": "lofi" + }, + { + "default": 20, + "description": "Sounds per page (max 50)", + "in": "query", + "name": "count", + "type": "integer" + }, + { + "default": 0, + "description": "Result offset", + "in": "query", + "name": "offset", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -536566,7 +619906,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.anchorListResponseDoc" + "$ref": "#/definitions/tiktokmobile.searchMusicResponseDoc" + } + }, + "400": { + "description": "Invalid input", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -536587,27 +619933,62 @@ "ApiKeyAuth": [] } ], - "summary": "Anchor catalogue used by the video composer", + "summary": "Search TikTok sounds on the mobile API", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/collection/detail": { + "/tiktok/mobile/search/photos": { "get": { "consumes": [ "application/json" ], - "description": "Returns one collection's record unmodified in `item_archive`: name, cover images, creator (`uid`, `creator_name`), status and `statistic.total`. `collection_id` is the `item_archive_id` from the collection list endpoint; web playlist (`mix`) ids are a different namespace and are rejected upstream with a permission error. Requires the device-backed signing service and returns a generic service-unavailable error without it.", - "operationId": "tiktok-mobile-collection-detail", + "description": "Searches TikTok photo posts with the app's own Photos-tab call and returns the page unmodified. Rows live in `search_item_list` (each row's `aweme_info` carries `image_post_info.images`, the carousel images) while `aweme_list` is an empty array; `feedback_type` is `\"photo_tab\"`. `keyword` is required; `count` is bounded at 50 (default 10, the app's value) and `offset` is forwarded as the app's row offset. `sort_type` (0 relevance, 1 like count, 3 date posted) and `publish_time` (recency window in days) are the app's filter-sheet controls.", + "operationId": "tiktok-mobile-search-photos", "parameters": [ { - "description": "Collection id (`item_archive_id` from the collection list)", + "description": "Search keyword", "in": "query", - "name": "collection_id", + "name": "keyword", "required": true, "type": "string", - "x-example": "7394627756635573022" + "x-example": "lofi" + }, + { + "description": "Rows per page, bounded at 50 (default 10)", + "in": "query", + "name": "count", + "type": "integer", + "x-example": 10 + }, + { + "description": "Row offset forwarded to the app route (first page only in guest mode)", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + }, + { + "description": "Sort: 0 relevance, 1 like count, 3 date posted", + "in": "query", + "name": "sort_type", + "type": "integer", + "x-example": 0 + }, + { + "description": "Recency window in days: 0 all, 1, 7, 30, 90, 180", + "in": "query", + "name": "publish_time", + "type": "integer", + "x-example": 0 + }, + { + "description": "Forwarded search source (default tab_search)", + "in": "query", + "name": "search_source", + "type": "string", + "x-example": "tab_search" } ], "produces": [ @@ -536617,11 +619998,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.collectionDetailResponseDoc" + "$ref": "#/definitions/tiktokmobile.searchPhotosResponseDoc" } }, "400": { - "description": "Invalid input or unknown collection", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } @@ -536644,38 +620025,31 @@ "ApiKeyAuth": [] } ], - "summary": "Get TikTok collection detail on the mobile API", + "summary": "Search the mobile app's photo-post tab", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/collection/list": { + "/tiktok/mobile/search/place": { "get": { "consumes": [ "application/json" ], - "description": "Lists a creator's public collections (the profile's Collections tab) unmodified in `item_archive_detail_list`: each row carries the collection `id`, `name`, cover images and `statistic.total` video count. Use the returned `id` with the collection detail and collection videos endpoints. Requires the numeric `user_id` (a sec_user_id alone is rejected upstream). Requires the device-backed signing service; without it the endpoint returns a generic service-unavailable error instead of an empty page.", - "operationId": "tiktok-mobile-collection-list", + "description": "Returns TikTok's place (POI) search results for a keyword, unmodified: each row carries `poi_name`, `poi_id`, `poi_type`, `video_count`, `poi_rating`, `poi_distance`, `poi_location`, `lat`/`lng`, `img_url`, `opening_time`, `price_level` and `parent_poi`. Useful for mapping a location or category to the places TikTok knows about, and for seeing how many videos each place carries. `keyword` is required. The page holds up to 30 rows (`count` 1-30 measured; a larger count makes the upstream answer an empty page, so the service rejects it) and the route is first-page-only — the returned `cursor` is not a reusable page token.", + "operationId": "tiktok-mobile-search-place", "parameters": [ { - "description": "Creator's numeric user id", + "description": "Place name or category to search for", "in": "query", - "name": "user_id", + "name": "keyword", "required": true, "type": "string", - "x-example": "107955" - }, - { - "default": 0, - "description": "Pagination cursor (server token)", - "in": "query", - "name": "cursor", - "type": "integer" + "x-example": "pizza" }, { "default": 10, - "description": "Collections per page (max 30)", + "description": "Rows to return, 1-30 measured (a larger count yields an empty upstream page and is rejected)", "in": "query", "name": "count", "type": "integer" @@ -536688,7 +620062,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.collectionListResponseDoc" + "$ref": "#/definitions/tiktokmobile.searchPlaceResponseDoc" } }, "400": { @@ -536715,38 +620089,30 @@ "ApiKeyAuth": [] } ], - "summary": "List TikTok collections on the mobile API", + "summary": "Search TikTok places", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/collection/videos": { + "/tiktok/mobile/search/pre-info": { "get": { "consumes": [ "application/json" ], - "description": "Pages one collection's videos in the creator's order, returning `items` (full video objects) unmodified with `min_cursor`, `max_cursor` and `has_more`. Pass `max_cursor` back as `cursor` while `has_more` is true. The server caps a page at about 30 rows, so `count` is a request hint. Requires the device-backed signing service and returns a generic service-unavailable error without it.", - "operationId": "tiktok-mobile-collection-videos", + "description": "Returns the `pre_info_id` token the app attaches to a search session (with its TTL). The token is short-lived; the app requests one before the search stream and reuses it for the following calls.", + "operationId": "tiktok-mobile-search-pre-info", "parameters": [ { - "description": "Collection id (`item_archive_id` from the collection list)", + "description": "Seed keyword (optional; the app also requests this with an empty keyword)", "in": "query", - "name": "collection_id", - "required": true, + "name": "keyword", "type": "string", - "x-example": "7394627756635573022" - }, - { - "default": 0, - "description": "Paging cursor; use the previous page's max_cursor", - "in": "query", - "name": "cursor", - "type": "integer" + "x-example": "lofi" }, { - "default": 10, - "description": "Videos per page (max 30; the server serves about 30)", + "default": 20, + "description": "Suggestion count (max 50)", "in": "query", "name": "count", "type": "integer" @@ -536759,11 +620125,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.collectionVideosResponseDoc" + "$ref": "#/definitions/tiktokmobile.searchPreInfoResponseDoc" } }, "400": { - "description": "Invalid input or unknown collection", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } @@ -536786,49 +620152,74 @@ "ApiKeyAuth": [] } ], - "summary": "Get videos in a TikTok collection on the mobile API", + "summary": "Pre-search info token for a search session", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/comment/replies": { + "/tiktok/mobile/search/stream": { "get": { "consumes": [ "application/json" ], - "description": "Returns the replies to one comment as the mobile app returns them, with `cursor`, `has_more` and `total`. The measured call sends both the video id and the comment id; this route answers even in windows where the top-level comment list is degraded.", - "operationId": "tiktok-mobile-comment-replies", + "description": "Calls the app's primary search route - a form POST to `/aweme/v2/search/general/stream/` whose response is a stream of length-prefixed JSON frames - and returns the frames assembled: `documents` (the flattened `data` entries from the result frame, each a full 145-key video item and other document types), `frames` (every frame in arrival order, opaque, so incremental card patches are preserved), plus `cursor`, `has_more` and `search_id`. Optional `sort_type`, `publish_time` and the app's raw `filter_selected` JSON blob are forwarded to the route and were measured to change the result set (sort_type=1 gave a stable most-liked ordering, publish_time=7 a recency-limited set). This is the high-value search surface: unlike the single-document general search route it supports the app's full result set.", + "operationId": "tiktok-mobile-search-stream", "parameters": [ { - "description": "Video id the comment belongs to", + "description": "Search keyword", "in": "query", - "name": "aweme_id", + "name": "keyword", "required": true, "type": "string", - "x-example": "7680168962218511636" + "x-example": "lofi" }, { - "description": "Comment id to list replies for", + "default": 10, + "description": "Requested page size (sanity bound: 50)", "in": "query", - "name": "comment_id", - "required": true, + "name": "count", + "type": "integer" + }, + { + "default": 0, + "description": "Row offset", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "Search source hint forwarded to upstream (measured: video)", + "in": "query", + "name": "search_source", "type": "string", - "x-example": "7680523330713240340" + "x-example": "video" }, { "default": 0, - "description": "Pagination cursor", + "description": "Sort order: 0 relevance, 1 like count (stable ordering measured), 3 date posted", + "enum": [ + 0, + 1, + 3 + ], "in": "query", - "name": "cursor", + "name": "sort_type", "type": "integer" }, { - "default": 20, - "description": "Replies per page (max 50)", + "default": 0, + "description": "Recency window in days (0 = unlimited; 7 measured)", "in": "query", - "name": "count", + "name": "publish_time", "type": "integer" + }, + { + "description": "Raw app filter blob as JSON; takes precedence over sort_type/publish_time", + "in": "query", + "name": "filter_selected", + "type": "string", + "x-example": "{\"sort_type\":\"1\",\"publish_time\":\"7\"}" } ], "produces": [ @@ -536838,7 +620229,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.commentRepliesResponseDoc" + "$ref": "#/definitions/tiktokmobile.searchStreamResponseDoc" } }, "400": { @@ -536865,38 +620256,31 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve replies to a TikTok comment", + "summary": "Run the app's primary (streaming) general search", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/comments": { + "/tiktok/mobile/search/sug": { "get": { "consumes": [ "application/json" ], - "description": "Returns the top-level comments of one video as the mobile app returns them: each comment has its full `user` projection, `text`, `digg_count` and `reply_comment_total`, plus `cursor`, `has_more` and `total`. This route needs a signed-in app session and throttles independently of the replies route. A page with no comments (including an empty body) is returned as an empty result, because that is the documented degraded shape in a throttle window.", - "operationId": "tiktok-mobile-comments", + "description": "Returns the mobile app's search typeahead for a seed keyword: `sug_list` of suggestions, each with `content`, `sug_type`, `word_record` (`group_id`, `words_position`, `words_content`, `words_source`) and positional fields, unmodified. Useful for query expansion and for seeing the phrases the app itself associates with a seed term. `keyword` is required; without it the upstream answers a well-formed but empty envelope.", + "operationId": "tiktok-mobile-search-sug", "parameters": [ { - "description": "Video id to list comments for", + "description": "Seed keyword to expand", "in": "query", - "name": "aweme_id", + "name": "keyword", "required": true, "type": "string", - "x-example": "7681236055831416084" - }, - { - "default": 0, - "description": "Pagination cursor", - "in": "query", - "name": "cursor", - "type": "integer" + "x-example": "lofi" }, { - "default": 20, - "description": "Comments per page (max 50)", + "default": 10, + "description": "Suggestions to return (max 50)", "in": "query", "name": "count", "type": "integer" @@ -536909,7 +620293,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.commentsResponseDoc" + "$ref": "#/definitions/tiktokmobile.searchSuggestionResponseDoc" } }, "400": { @@ -536936,33 +620320,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve comments for a TikTok video", + "summary": "Retrieve TikTok search suggestions", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/feed": { + "/tiktok/mobile/search/tabs": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of videos from TikTok's mobile For You feed, signed with well-formed mobile signature headers (no device or account needed). Each item carries `aweme_id`, `create_time`, `author_id`, `share_url` and the verified statistics block (`play_count`, `digg_count`, `comment_count`, `share_count`, `collect_count`, `download_count`, `forward_count`, `lose_count`, `lose_comment_count`, `whatsapp_share_count`, `repost_count`). A zero `count` uses the app's default page size; `count` is capped at 50.", - "operationId": "tiktok-mobile-feed", + "description": "Returns the tab keys the mobile search screen offers for a keyword (`general`, `video`, `photos`, `user`, `music`, `live`, `place`, `hashtag`), plus the gateway's `is_failed` flag. Measured on the mobile search edge with a form POST.", + "operationId": "tiktok-mobile-search-tabs", "parameters": [ { - "default": 0, - "description": "Videos to request (0 = app default, max 50)", - "in": "query", - "name": "count", - "type": "integer" - }, - { - "default": 0, - "description": "Pagination cursor", + "description": "Search keyword", "in": "query", - "name": "cursor", - "type": "integer" + "name": "keyword", + "required": true, + "type": "string", + "x-example": "lofi" } ], "produces": [ @@ -536971,14 +620349,8 @@ "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/tiktokmobile.feedResponseDoc" + "$ref": "#/definitions/tiktokmobile.searchTabsResponseDoc" } }, "400": { @@ -537005,33 +620377,41 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve the TikTok mobile For You feed", + "summary": "Search tabs available for a keyword", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/feed/offline": { + "/tiktok/mobile/search/user": { "get": { "consumes": [ "application/json" ], - "description": "Calls the app's cached-pull feed route - `GET /tiktok/feed/offline/v2` - which answers protobuf, and returns a schema-free decode: field numbers become keys, printable length-delimited fields become strings and nested messages become objects, plus a flat list of every string leaf (`strings`), which is the fastest way to mine video ids and captions. Field numbering is inferred because TikTok publishes no schema for this message. This is the cached/offline pull variant, not the primary `POST /aweme/v2/feed/` feed already exposed as `/tiktok/mobile/feed/post`. The route is signature-validated, so it needs device-backed request signing to be configured for the deployment and fails with an error when it is not.", - "operationId": "tiktok-mobile-feed-offline", + "description": "Keyword search over users, returning `user_list` unmodified. Each `user_info` carries the populated creator statistics (follower_count, following_count, total_favorited, aweme_count, custom_verify).", + "operationId": "tiktok-mobile-search-user", "parameters": [ { - "description": "Pull type forwarded to the app route (measured 0 and 11; default 11)", + "description": "Search keyword (a username or display name)", "in": "query", - "name": "pull_type", - "type": "integer", - "x-example": 11 + "name": "keyword", + "required": true, + "type": "string", + "x-example": "mrbeast" }, { - "description": "Page size, bounded at 50 (upstream default when omitted)", + "default": 20, + "description": "Users per page (max 50)", "in": "query", "name": "count", - "type": "integer", - "x-example": 10 + "type": "integer" + }, + { + "default": 0, + "description": "Pagination cursor", + "in": "query", + "name": "cursor", + "type": "integer" } ], "produces": [ @@ -537041,7 +620421,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.offlineFeedResponseDoc" + "$ref": "#/definitions/tiktokmobile.searchUsersResponseDoc" } }, "400": { @@ -537068,19 +620448,75 @@ "ApiKeyAuth": [] } ], - "summary": "Fetch the app's cached-pull offline feed (protobuf) decoded without a schema", + "summary": "Search TikTok users on the mobile API", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/feed/post": { + "/tiktok/mobile/search/videos": { "get": { "consumes": [ "application/json" ], - "description": "Calls the app's primary feed route - `POST /aweme/v2/feed/`, which the Android client sends with a protobuf request body and answers with protobuf - and returns a schema-free decode: field numbers become keys, length-delimited fields become strings when printable, nested messages when they parse and base64 otherwise, plus a flat list of every string leaf. Field numbering is inferred because TikTok publishes no schema for this message; use the JSON `GET /tiktok/mobile/feed` route when you need the stable structured contract.", - "operationId": "tiktok-mobile-feed-post", + "description": "Keyword search over videos. The videos are in `aweme_list` (each entry is the full video object); `search_item_list` is kept for compatibility and is `null`. `cursor`, `has_more` and `search_id` accompany the page. `keyword` is required, `count` is bounded at 50, `offset` is a row offset and `search_id` (returned by a previous page) scopes paging to the same search session. `sort_type` is one of `0` (relevance), `1` (like count) or `3` (date posted); `publish_time` is a recency window in days between `0` and `365` (the app uses `0`, `1`, `7`, `30`, `90`, `180`).", + "operationId": "tiktok-mobile-search-videos", + "parameters": [ + { + "description": "Search keyword", + "in": "query", + "name": "keyword", + "required": true, + "type": "string", + "x-example": "lofi" + }, + { + "default": 10, + "description": "Rows per page (sanity bound: 50)", + "in": "query", + "name": "count", + "type": "integer" + }, + { + "default": 0, + "description": "Row offset; pass search_id with a non-zero offset", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "default": 0, + "description": "Sort order: 0 relevance, 1 like count, 3 date posted", + "enum": [ + 0, + 1, + 3 + ], + "in": "query", + "name": "sort_type", + "type": "integer" + }, + { + "default": 0, + "description": "Date-posted window in days (0 to 365; the app uses 0, 1, 7, 30, 90, 180)", + "in": "query", + "name": "publish_time", + "type": "integer" + }, + { + "default": "tab_search", + "description": "Search source forwarded as the app sends it", + "in": "query", + "name": "search_source", + "type": "string" + }, + { + "description": "search_id returned by a previous page of the same search", + "in": "query", + "name": "search_id", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -537088,7 +620524,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.feedPostResponseDoc" + "$ref": "#/definitions/tiktokmobile.searchVideosResponseDoc" + } + }, + "400": { + "description": "Invalid input", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -537109,27 +620551,34 @@ "ApiKeyAuth": [] } ], - "summary": "Fetch the app's primary feed call (POST, protobuf) decoded without a schema", + "summary": "Search TikTok videos on the mobile API (video tab)", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/hashtag": { + "/tiktok/mobile/translation/description": { "get": { "consumes": [ "application/json" ], - "description": "Returns one hashtag's detail by name: `challenge_info` (cid, hashtag_name, desc, ...) and `stats` (view and video counts), exactly as the mobile API returns them. Hashtags are addressed by name; an internal id is rejected upstream.", - "operationId": "tiktok-mobile-hashtag", + "description": "Translates one video's caption with the app's own translation route and returns the translated caption both as the app's raw markup (`translated_client_text.client_text_v2.markup_text`, where line breaks are `
` and hashtags are wrapped in `...`) and as plain text in `text`. `item_id` is required; `target_lang` defaults to `en` and accepts the app's language codes (`en`, `ja`, `pt-BR`, `zh-Hans`, ...).", + "operationId": "tiktok-mobile-translation-description", "parameters": [ { - "description": "Hashtag name without the leading #", + "description": "Video id to translate", "in": "query", - "name": "name", + "name": "item_id", "required": true, "type": "string", - "x-example": "readingvlog" + "x-example": "7650052642089225493" + }, + { + "description": "Target language code (default en)", + "in": "query", + "name": "target_lang", + "type": "string", + "x-example": "en" } ], "produces": [ @@ -537139,7 +620588,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.hashtagInfoResponseDoc" + "$ref": "#/definitions/tiktokmobile.translationDescriptionResponseDoc" } }, "400": { @@ -537148,12 +620597,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Hashtag not found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Rate limit exceeded", "schema": { @@ -537172,42 +620615,23 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve a TikTok hashtag", + "summary": "Translate one TikTok video caption", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/hashtag/posts": { + "/tiktok/mobile/trending/categories": { "get": { "consumes": [ "application/json" ], - "description": "Lists videos for one hashtag name as the mobile app returns them (`aweme_list` with author, music and statistics), plus `cursor` and `has_more`. `sort=fresh` is the newest list and works from any measured egress; `sort=popular` is the hot list and only answers from a US egress.", - "operationId": "tiktok-mobile-hashtag-posts", + "description": "Returns the discover-category feed unmodified: each `category_list` entry is `{aweme_list, category_type, challenge_info, click_track_url_list, desc, track_url_list}`, with `cursor` and `has_more` for paging.", + "operationId": "tiktok-mobile-trending-categories", "parameters": [ - { - "description": "Hashtag name without the leading #", - "in": "query", - "name": "name", - "required": true, - "type": "string", - "x-example": "readingvlog" - }, - { - "default": "fresh", - "description": "Listing: fresh (newest) or popular (hot)", - "enum": [ - "fresh", - "popular" - ], - "in": "query", - "name": "sort", - "type": "string" - }, { "default": 20, - "description": "Videos per page (max 50)", + "description": "Categories per page (max 50)", "in": "query", "name": "count", "type": "integer" @@ -537227,7 +620651,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.hashtagPostsResponseDoc" + "$ref": "#/definitions/tiktokmobile.categoryListResponseDoc" } }, "400": { @@ -537254,31 +620678,23 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve videos for a TikTok hashtag", + "summary": "Retrieve TikTok trending categories", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/hashtags": { + "/tiktok/mobile/trending/effects": { "get": { "consumes": [ "application/json" ], - "description": "Searches hashtags by keyword and returns the matching hashtag objects unmodified, with `cursor` and `has_more` for paging.", - "operationId": "tiktok-mobile-hashtags", + "description": "Returns the effect/sticker discovery feed unmodified: `aweme_list` of full video objects, each additionally carrying `stickers` and `sticker_detail`, plus `feed_session_id`, `cursor` and `has_more`.", + "operationId": "tiktok-mobile-trending-effects", "parameters": [ - { - "description": "Keyword to search hashtags for", - "in": "query", - "name": "keyword", - "required": true, - "type": "string", - "x-example": "reading" - }, { "default": 20, - "description": "Results per page (max 50)", + "description": "Videos per page (max 50)", "in": "query", "name": "count", "type": "integer" @@ -537298,7 +620714,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.hashtagSearchResponseDoc" + "$ref": "#/definitions/tiktokmobile.stickerDiscoverResponseDoc" } }, "400": { @@ -537325,19 +620741,42 @@ "ApiKeyAuth": [] } ], - "summary": "Search TikTok hashtags", + "summary": "Retrieve TikTok trending effects", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/live/effects": { + "/tiktok/mobile/user/followers": { "get": { "consumes": [ "application/json" ], - "description": "Returns the complete LIVE effects/sticker asset catalogue in one call: `data.assets` (2,032 assets, each with `id`, `name`, `describe`, `resource_url`, `resource_uri`, `md5`, `size`, `resource_type`, `download_type`, `model_requirements`, `sticker_asset_variant` and `video_resource_list`). There are no request parameters and no paging, and the body is large because the catalogue is complete.", - "operationId": "tiktok-mobile-live-effects", + "description": "Lists one creator's followers: `followers` holds the full user objects, `total` is the account's follower total, and the envelope also carries `max_time`/`min_time`/`offset`, `next_page_token` and `myself_user_id`. `count` is the requested page size (20 and 30 were honoured). Measured caveat: the first pages came back with `has_more` false even though `total` reported 2,774,249, and the returned time/offset probes did not advance the window - treat those paging fields as observed values, not as a guaranteed paging contract.", + "operationId": "tiktok-mobile-user-followers", + "parameters": [ + { + "description": "Creator user id", + "in": "query", + "name": "user_id", + "required": true, + "type": "string", + "x-example": "7141011492116005914" + }, + { + "description": "Followers per page (sanity bound: 50; omitted = app default, not measured)", + "in": "query", + "name": "count", + "type": "integer" + }, + { + "default": 0, + "description": "Page token: the max_time returned by the previous page (omitted at 0 = first page)", + "in": "query", + "name": "cursor", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -537345,7 +620784,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.liveEffectsResponseDoc" + "$ref": "#/definitions/tiktokmobile.userFollowersResponseDoc" } }, "400": { @@ -537372,19 +620811,43 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok LIVE effects", + "summary": "Retrieve the followers of a TikTok creator", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/live/gifts": { + "/tiktok/mobile/user/following": { "get": { "consumes": [ "application/json" ], - "description": "Returns the complete LIVE gift catalogue in one call: `data.gifts` (771 gift objects with `diamond_count`, `describe`, `duration`, `gift_resources`, `gift_skins`, `batch_gift_info` and `combo`) plus the gift config and resource maps (`gift_configs`, `gifts_info`, `doodle_templates`, `gift_name_group_map`, `gift_resource_group_map`). There are no request parameters and no paging: the response is a single complete catalogue.", - "operationId": "tiktok-mobile-live-gifts", + "description": "Lists the accounts one creator follows (`followings`, full 120-key user objects) with the mobile API's paging envelope: `total`, `has_more`/`rec_has_more`, `max_time`/`min_time` and `next_page_token`. Some profiles hide their following list; that answers upstream `status_code 3002060` (\"Profile user is hiding following list\"), which surfaces as a typed upstream error.", + "operationId": "tiktok-mobile-user-following", + "parameters": [ + { + "description": "Creator's numeric user id", + "in": "query", + "name": "user_id", + "required": true, + "type": "string", + "x-example": "7343380121988285482" + }, + { + "default": 20, + "description": "Rows per page (sanity bound: 50)", + "in": "query", + "name": "count", + "type": "integer" + }, + { + "default": 0, + "description": "Page token: max_time returned by the previous page (omitted at 0)", + "in": "query", + "name": "cursor", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -537392,7 +620855,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.liveGiftsResponseDoc" + "$ref": "#/definitions/tiktokmobile.userFollowingResponseDoc" } }, "400": { @@ -537419,19 +620882,43 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok LIVE gifts", + "summary": "Retrieve the accounts a TikTok creator follows", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/live/hashtags": { + "/tiktok/mobile/user/original-effects": { "get": { "consumes": [ "application/json" ], - "description": "Returns the reference set the app's \"go LIVE\" flow uses to tag a stream: the general LIVE hashtags (`hashtags`, measured 18 entries of `{id, image, namespace, title}`, where `id` 0 is the \"None\" tag), the live-studio/live-voice/third-party hashtag subsets (`live_studio_hashtags` 16, `live_voice_hashtags` 16, `third_party_hashtags` 9), the single `game_hashtag`, and a 1,500-entry game catalogue (`game_tag_list`, `game_tag_count`) where every entry carries the same 12 keys: `id`, `short_name`, `show_name`, `full_name`, `bundle_id`, `package_name`, `game_category` (`[{game_type, title}]` with PC games/Mobile games/Console games/Others), `hashtag_id`, `hashtag_list`, `gar`, `landscape` (0/1/2) and `is_new_game`. The upstream is `/webcast/room/hashtag/list/` on the webcast edge host (no origin header); the measured body is 539,361 B and byte-identical on both working webcast hosts, `language`/`count` do not change it, and there is no cursor/has_more, so it is a one-shot reference dump. Measured 2026-10-22 with the pure-Go (device-free) signer, so it does not need the device-backed signer.", - "operationId": "tiktok-mobile-live-hashtags", + "description": "Lists the effects one creator published unmodified in `effect`: each row carries the `effect_id`, `name`, `desc`, `icon_url`, `effect_source`, attributions, linked anchors and moderation status, with cursor paging (`cursor`/`has_more`). `user_id` must be the numeric uid. A creator with no published effects returns an empty list.", + "operationId": "tiktok-mobile-user-original-effects", + "parameters": [ + { + "description": "Creator's numeric uid", + "in": "query", + "name": "user_id", + "required": true, + "type": "string", + "x-example": "107955" + }, + { + "default": 0, + "description": "Paging token from the previous response", + "in": "query", + "name": "cursor", + "type": "integer" + }, + { + "default": 10, + "description": "Effects per page (max 50)", + "in": "query", + "name": "count", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -537439,7 +620926,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.liveHashtagCatalogResponseDoc" + "$ref": "#/definitions/tiktokmobile.userOriginalEffectsResponseDoc" + } + }, + "400": { + "description": "Invalid input", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -537460,27 +620953,41 @@ "ApiKeyAuth": [] } ], - "summary": "LIVE category/game reference catalogue (hashtags, live-studio/voice/third-party tags, game tags)", + "summary": "List a creator's original TikTok effects", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/live/room": { + "/tiktok/mobile/user/original-music": { "get": { "consumes": [ "application/json" ], - "description": "Returns one LIVE room's detail, keyed by `room_id` — the numeric id that `/api/v1/tiktok/mobile/live/search` returns under `data[].lives.author.room_id`. The upstream is `/webcast/room/info/` on the webcast edge host (no origin header), captured from the running 47.4.3 app's LIVE surface and reproduced against the live gateway. The response projects the fields callers key on — `title`, `status` (2 = live), `user_count` (concurrent viewers), `create_time`, `owner` (user id, nickname, avatar), `stats` (cumulative `enter_count`/`total_user`, `watch_user_count`, `like_count`, `comment_count`, `share_count`, `follow_count`, `replay_viewers`), `stream` (playable `flv_pull_url` per resolution plus `default_resolution`/`candidate_resolution` and the HLS/RTMP URLs) and `cover` — and keeps the upstream room object unmodified in `data` (it has ~500 keys, so a partial struct would drop fields). Measured 2026-10-22 with the pure-Go (device-free) signer: one room returned 193-198 KB with 1,595-1,600 concurrent viewers, 27,916 cumulative viewers, 27,096 enters and FLV URLs for FULL_HD1/HD1/SD1/SD2. `anchor_id` is deliberately NOT forwarded: it was measured to suppress the audience-only `stats.total_user` (27,916 -> 0 on the same room). A missing, non-numeric or unknown room id answers the webcast envelope's status 10011 and is surfaced as a 400; a finished room (status 30003) is a 400 too. The route is not signature-gated, so it does not need the device-backed signer.", - "operationId": "tiktok-mobile-live-room", + "description": "Lists the \"original sounds\" groups of one creator unmodified in `groups`: each group carries the `music` sound object, a `similar_music_list` and the `source_music_id`; the envelope also carries the creator's `honor_label`, a flat `music` list and cursor paging (`cursor`/`has_more`). `user_id` must be the numeric uid (a `sec_user_id` alone is rejected upstream with `status_code 5`).", + "operationId": "tiktok-mobile-user-original-music", "parameters": [ { - "description": "Numeric LIVE room id from /api/v1/tiktok/mobile/live/search (data[].lives.author.room_id)", + "description": "Creator's numeric uid", "in": "query", - "name": "room_id", + "name": "user_id", "required": true, "type": "string", - "x-example": "7699174209096059678" + "x-example": "107955" + }, + { + "default": 0, + "description": "Paging token from the previous response", + "in": "query", + "name": "cursor", + "type": "integer" + }, + { + "default": 10, + "description": "Groups per page (max 50)", + "in": "query", + "name": "count", + "type": "integer" } ], "produces": [ @@ -537490,11 +620997,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.liveRoomInfoResponseDoc" + "$ref": "#/definitions/tiktokmobile.userOriginalMusicResponseDoc" } }, "400": { - "description": "Invalid input, an unknown/not-live room, or a finished room", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } @@ -537517,27 +621024,53 @@ "ApiKeyAuth": [] } ], - "summary": "LIVE room detail: status, viewers, owner, stream URLs, cover", + "summary": "List a creator's original TikTok sounds", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/live/room-by-user": { + "/tiktok/mobile/user/posts": { "get": { "consumes": [ "application/json" ], - "description": "Returns the LIVE room a TikTok user is currently streaming, keyed by `user_id`. The upstream is `/webcast/room/info_by_user/` on the webcast edge host (no origin header) and returns the same room payload as `/api/v1/tiktok/mobile/live/room` (title, status, concurrent viewers, owner, cumulative stats, per-resolution FLV URLs, cover and the ~500-key room object in `data`), except that the caller addresses a user and the room id is filled from the payload (both `user_id` and `room_id` are echoed). Measured 2026-10-22 with the pure-Go (device-free) signer: `user_id=6707748031095751686` answered 184,575 B (195,220 B on the second webcast host); `anchor_id` alone answers a 57-byte empty payload, so `user_id` is the address. A user with no live room answers status 30003 \"room has finished\" and is surfaced as a 400; a non-numeric user id is a 400 (status 10011); a bare call answers a 57-byte empty success envelope, which is why this endpoint requires `user_id`. The route is not signature-gated, so it does not need the device-backed signer.", - "operationId": "tiktok-mobile-live-room-by-user", + "description": "Lists one creator's videos newest-first: `aweme_list` holds the full video objects (author, statistics, music, video renditions, anchors), and the page is positioned by `max_cursor`/`min_cursor` with `has_more`. Paging is by `max_cursor`: pass the `max_cursor` returned by the previous page back as `cursor`. `count` is the requested page size (the app default returned 9 items; 20 and 30 were honoured).", + "operationId": "tiktok-mobile-user-posts", "parameters": [ { - "description": "Numeric TikTok user id (e.g. the owner id from a profile, video author or live search row)", + "description": "Creator user id; one of user_id or sec_user_id is required (user_id wins if both are sent)", "in": "query", "name": "user_id", - "required": true, "type": "string", - "x-example": "6707748031095751686" + "x-example": "7141011492116005914" + }, + { + "description": "Creator sec_user_id; one of user_id or sec_user_id is required", + "in": "query", + "name": "sec_user_id", + "type": "string" + }, + { + "default": 9, + "description": "Videos per page (sanity bound: 50; omitted = app default, measured 9)", + "in": "query", + "name": "count", + "type": "integer" + }, + { + "default": 0, + "description": "Page token: the max_cursor returned by the previous page (omitted at 0 = first page)", + "in": "query", + "name": "cursor", + "type": "integer" + }, + { + "default": 0, + "description": "Sort type (0 = the app default; always sent, non-zero values are forwarded as given)", + "in": "query", + "name": "sort_type", + "type": "integer" } ], "produces": [ @@ -537547,11 +621080,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.liveRoomInfoResponseDoc" + "$ref": "#/definitions/tiktokmobile.userPostsResponseDoc" } }, "400": { - "description": "Invalid input, or the user has no live room right now", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } @@ -537574,34 +621107,33 @@ "ApiKeyAuth": [] } ], - "summary": "LIVE room by user: the room a user is currently streaming", + "summary": "Retrieve the videos posted by a TikTok creator", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/live/search": { + "/tiktok/mobile/user/profile": { "get": { "consumes": [ "application/json" ], - "description": "Searches the mobile app's LIVE surface by keyword: `data` of `{type, anchor}` entries with `feedback_type` set to `live`, plus `cursor` and `has_more`. `keyword` is required; without it the gateway answers a valid but empty envelope. This is the API's first LIVE endpoint.", - "operationId": "tiktok-mobile-live-search", + "description": "Returns one creator's profile page: `common` (the identity, account and relation blocks: user_profile_info, user_account_info, user_relation_info, user_statics_info with the follower/following/heart counters), plus the `header`, `nav_bar` and `profile_tab` layout components and the app's status/provenance fields. Address the creator by `user_id` or by `sec_user_id`; at least one is required and `user_id` wins when both are supplied.", + "operationId": "tiktok-mobile-user-profile", "parameters": [ { - "description": "Search keyword", + "description": "Creator user id", "in": "query", - "name": "keyword", - "required": true, + "name": "user_id", "type": "string", - "x-example": "lofi" + "x-example": "7141011492116005914" }, { - "default": 0, - "description": "Results to request (0 = app default, max 50)", + "description": "Creator sec_user_id (alternate identifier; use instead of user_id)", "in": "query", - "name": "count", - "type": "integer" + "name": "sec_user_id", + "type": "string", + "x-example": "MS4wLjABAAAAexample" } ], "produces": [ @@ -537611,7 +621143,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.liveSearchResponseDoc" + "$ref": "#/definitions/tiktokmobile.userProfileResponseDoc" } }, "400": { @@ -537638,19 +621170,28 @@ "ApiKeyAuth": [] } ], - "summary": "Search TikTok LIVE streams", + "summary": "Retrieve a TikTok creator profile", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/live/tabs": { + "/tiktok/mobile/user/recommendations": { "get": { "consumes": [ "application/json" ], - "description": "Returns the app's LIVE tab catalogue: `data[]` holds one entry per tab with the tab's `id`, `name`, `style`, `enable`/`event` flags and the exact `url`/`inter_url` feed template the client calls for that tab. The measured tab 1 (\"live\") points at `/webcast/feed/?content_type=0&style=2&channel_id=21&sub_channel_id=0&tab_id=1&type=live&sub_type=live&req_type=0&cate_id=0` on `webcast.tiktokv.com`. This closes the route round 553 could not find a host for; it is served by the webcast edge hosts (non-webcast hosts answer 403) and is one of the few LIVE routes that answers device-free: measured with the pure-Go placeholder signer as well as the real device signer, so it does not need the device-backed signing service.", - "operationId": "tiktok-mobile-live-tabs", + "description": "Returns the app's suggested creators for the Following page unmodified: `user_list` entries are `{user, aweme_list}` where `user` is the full creator projection (uid, sec_uid, nickname, signature, avatars, follower/following counts, verification and privacy flags) and `aweme_list` holds up to three recent videos, so this is a creator-discovery surface rather than a bare id list. The route has no paging fields and returns one page of 13-17 creators (fresh recommendations differ per call). `count` is accepted for parity but the gateway was measured to ignore it.", + "operationId": "tiktok-mobile-user-recommendations", + "parameters": [ + { + "description": "Requested page size; forwarded when set, but the gateway was measured to ignore it", + "in": "query", + "name": "count", + "type": "integer", + "x-example": 10 + } + ], "produces": [ "application/json" ], @@ -537658,7 +621199,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.liveTabsResponseDoc" + "$ref": "#/definitions/tiktokmobile.userRecommendationsResponseDoc" + } + }, + "400": { + "description": "Invalid input", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -537679,26 +621226,27 @@ "ApiKeyAuth": [] } ], - "summary": "Fetch the LIVE tab catalogue", + "summary": "Recommended creators on the mobile app's Following page", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/music/beats": { + "/tiktok/mobile/video/detail": { "get": { "consumes": [ "application/json" ], - "description": "Returns the mobile app's beats/songs chart unmodified: `music_list` of the same full sound objects the pick chart returns (`id_str`, `title`, `user_count`, `album`, `artists`, `cover_*`), ordered as the app's beats list. The measured envelope carries no paging fields.", - "operationId": "tiktok-mobile-music-beats", + "description": "Returns one video's full item: author, statistics (`play_count`, `digg_count`, `comment_count` and the rest), music, video renditions, anchors and the other item fields - the complete object, not a projection. `aweme_id` is required.", + "operationId": "tiktok-mobile-video-detail", "parameters": [ { - "default": 0, - "description": "Accepted for compatibility; not measured to change the page (max 50)", + "description": "Video id", "in": "query", - "name": "count", - "type": "integer" + "name": "aweme_id", + "required": true, + "type": "string", + "x-example": "7329791719535283462" } ], "produces": [ @@ -537708,7 +621256,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.musicBeatsSongsResponseDoc" + "$ref": "#/definitions/tiktokmobile.videoDetailResponseDoc" } }, "400": { @@ -537735,57 +621283,35 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok music beats", + "summary": "Retrieve one TikTok video", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/music/chart": { + "/tiktok/mobile/video/subtitles": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of the app's regional sound chart: `chart_info` (chart id and update time), `cover_image_url` and a ranked `music_list` whose rows are a `music_info` sound object plus a `trend` entry; page with the returned `cursor` while `has_more` is true. `chart_region` selects the regional chart and accepts only `AE`, `BR`, `CA`, `DE`, `EG`, `FR`, `JP`, `KR`, `LB`, `MX`, `NG`, `SA`, `TR`, `US` and `ZA` (any other value returns an invalid-parameters error; omitting it returns the default chart, which equals `US`). `AE`, `EG`, `LB` and `SA` share one chart, as do `NG` and `ZA`. This is distinct from `music/pick`, which returns the creation panel's pick list with banners. Requires the device-backed signing service; without it the endpoint returns a generic service-unavailable error.", - "operationId": "tiktok-mobile-music-chart", + "description": "Returns one video's own captions translated into the requested language, as TikTok's caption/language (`cla`) service serves them. The response carries the track twice: `webvtt` is the upstream WebVTT text verbatim, and `cues` is the same track parsed into `{start_ms, end_ms, start, end, text}` records so a caller does not have to implement WebVTT. `video_id` is the aweme id returned by the feed, search, profile-posts and hashtag endpoints. Measured 2026-10-21: the Korean-caption video 7696141388324293918 answered 11 English cues for `language=en`, and the same video answered Japanese, Chinese, Spanish, French, German, Korean, Portuguese, Russian, Arabic, Hindi, Indonesian, Thai, Vietnamese, Turkish and Italian tracks; a Portuguese-lyrics video answered an 18,494-character English track (240 cues). Track size is a snapshot rather than a contract (the upstream re-translates from a cache), so assert a non-empty track in the requested language, not a byte count. A video with no captions answers 400 (upstream status 5); a nonexistent video answers 500 (upstream status 4).", + "operationId": "tiktok-mobile-video-subtitles", "parameters": [ { - "description": "Region of the chart: AE, BR, CA, DE, EG, FR, JP, KR, LB, MX, NG, SA, TR, US or ZA; omit for the default chart (same as US)", - "enum": [ - "AE", - "BR", - "CA", - "DE", - "EG", - "FR", - "JP", - "KR", - "LB", - "MX", - "NG", - "SA", - "TR", - "US", - "ZA" - ], + "description": "Numeric id of the video (aweme id)", "in": "query", - "name": "chart_region", + "name": "video_id", + "required": true, "type": "string", - "x-example": "US" - }, - { - "default": 0, - "description": "Paging token from the previous response", - "in": "query", - "name": "cursor", - "type": "integer" + "x-example": "7696141388324293918" }, { - "default": 10, - "description": "Rows per page (max 50)", + "description": "Target language code: ar, de, en, es, fr, hi, id, it, ja, ko, pt, ru, th, tr, vi, zh", "in": "query", - "name": "count", - "type": "integer" + "name": "language", + "required": true, + "type": "string", + "x-example": "en" } ], "produces": [ @@ -537795,11 +621321,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.musicChartResponseDoc" + "$ref": "#/definitions/tiktokmobile.videoSubtitlesResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Invalid input, or the video has no captions", "schema": { "$ref": "#/definitions/app.Response" } @@ -537822,27 +621348,33 @@ "ApiKeyAuth": [] } ], - "summary": "List a regional TikTok sound chart", + "summary": "Video captions translated into a target language", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/music/choices": { + "/tiktok/popular-trend/country-industry-meta": { "get": { "consumes": [ "application/json" ], - "description": "Returns the app's \"music choices\" list: the recommended sounds it offers on the video-creation page. The upstream is `/aweme/v1/music/choices/`; each `music_list` entry is the same full sound object the chart routes return (title, album, artists, covers, play URL, duration, ...). Measured 2026-10-21 with the pure-Go (device-free) signer: 56,078 B / 6 full sound objects on one call and 7 on later calls (the same six at the front), and the payload carries NO paging fields (no cursor/has_more), so this is a one-shot recommendation list. The measured `item_id`, `music_id`, `count` and `scene` parameters did not deterministically change the list — the recommendations rotate — so none is exposed. The route is not signature-gated, so it does not need the device-backed signer.", - "operationId": "tiktok-mobile-music-choices", + "description": "Lists the country and industry filter values used by the TikTok Creative Center popular-trend endpoints. Countries have an `id` such as `AR` and a name; industries have a numeric `id` and a name such as Apparel & Accessories. A maintained fallback list is returned if TikTok's own metadata is unavailable.", + "operationId": "tiktok-popular-trend-country-industry-meta", "produces": [ "application/json" ], "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/tiktokmobile.musicChoicesResponseDoc" + "$ref": "#/definitions/populartrend.countryIndustryMetaResponseDoc" } }, "429": { @@ -537863,33 +621395,28 @@ "ApiKeyAuth": [] } ], - "summary": "Recommended sounds for video creation", + "summary": "Retrieve TikTok popular-trend country and industry metadata", "tags": [ - "TikTok" + "TikTok", + "TikTok Popular Trend" ] } }, - "/tiktok/mobile/music/collection-list": { + "/tiktok/post/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns the app's music-collection LIST (`mc_list` of collection objects with covers), the browse list of curated music collections. This is a different route from `/api/v1/tiktok/mobile/music/collections`, which is the collection FEED (`mcf_list`, with each entry's music inline). The upstream is `/aweme/v1/music/collection/`. Unlike the feed, this route PAGES for real: `count` is honoured (measured 1 -> 1 item with `cursor: 1, has_more: 1`; 5 -> 5 items with `cursor: 5`; 10/100 -> all 8 collections) and `cursor` advances (measured `count=5&cursor=5` -> the remaining 3 with `has_more: 0`). A negative count answers upstream status 5, which is rejected locally. Measured 2026-10-21 with the pure-Go (device-free) signer: 8 collections total. The route is not signature-gated, so it does not need the device-backed signer.", - "operationId": "tiktok-mobile-music-collection-list", + "description": "Returns TikTok's detail record for one video by video id. `itemInfo.itemStruct` holds the video's description, the author's profile and the author's statistics (such as followers, following and hearts) along with the rest of TikTok's video object; `shareMeta` holds the share title and description.", + "operationId": "tiktok-post", "parameters": [ { - "description": "Page size: honoured (1-50 measured, capped by the collection set)", - "in": "query", - "name": "count", - "type": "integer", - "x-example": 5 - }, - { - "description": "Next-page token from the previous response (0 = first page)", - "in": "query", - "name": "cursor", - "type": "integer", - "x-example": 5 + "description": "TikTok video id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "7444278905264983342" } ], "produces": [ @@ -537898,8 +621425,14 @@ "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/tiktokmobile.musicCollectionListResponseDoc" + "$ref": "#/definitions/tiktok.postResponseDoc" } }, "400": { @@ -537926,32 +621459,45 @@ "ApiKeyAuth": [] } ], - "summary": "Music collection list (paged browse)", + "summary": "Retrieve TikTok video details", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/music/collections": { + "/tiktok/posts": { "get": { "consumes": [ "application/json" ], - "description": "Returns the mobile app's sound-collection feed unmodified: `mcf_list`, where each entry is `{collection, music_list}` (the measured default page holds 8 entries), plus `cursor` and `has_more`. This route is first-page only: the returned `cursor` is not a reusable page token, so callers should not page with it.", - "operationId": "tiktok-mobile-music-collections", + "description": "Lists posts from a TikTok profile identified by `secUid`. `sort_type` is `0` latest (default), `1` popular or `2` oldest. `cursor` defaults to 0. The response has `itemList`, `hasMore` and a `cursor` to pass back to fetch the next page.", + "operationId": "tiktok-profile-post", "parameters": [ + { + "description": "TikTok secUid for the profile", + "in": "query", + "name": "secUid", + "required": true, + "type": "string", + "x-example": "MS4wLjABAAAAT4vq3vsh9X-Vb_WtV6tz4QWTbKjliTKCiK5DqnJNtQEA2RUveHb7UdnL7xgPK2HB" + }, { "default": 0, - "description": "Collections to request (0 = app default, max 50)", + "description": "Pagination cursor", "in": "query", - "name": "count", + "name": "cursor", "type": "integer" }, { "default": 0, - "description": "Accepted for shape compatibility only; not a verified page token", + "description": "Sort mode: 0 latest, 1 popular, 2 oldest", + "enum": [ + 0, + 1, + 2 + ], "in": "query", - "name": "cursor", + "name": "sort_type", "type": "integer" } ], @@ -537961,8 +621507,14 @@ "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/tiktokmobile.musicCollectionFeedResponseDoc" + "$ref": "#/definitions/tiktok.profilePostResponseDoc" } }, "400": { @@ -537989,27 +621541,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok music collections", + "summary": "Retrieve posts from a TikTok profile", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/music/detail": { + "/tiktok/profile/{handler}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one sound's page: `music_info` (id, title, author, `user_count`, duration, cover renditions, bound challenge and the other sound fields), its chart rank, similar sounds, recommendation blocks and the behind-the-song flag. `music_id` is required. This endpoint needs device-backed request signing to be configured for the deployment; without it the request fails with an error instead of returning an empty page.", - "operationId": "tiktok-mobile-music-detail", + "description": "Returns a public TikTok profile by `handler`, the username without the leading `@`. The `user` object has the id, `uniqueId`, nickname, signature, verified and private flags, region, language, avatar, bio link and `secUid`; `stats` has follower, following, heart, video and friend counts. A missing, deleted or banned handle returns 404.", + "operationId": "tiktok-profile", "parameters": [ { - "description": "Sound id", - "in": "query", - "name": "music_id", + "description": "TikTok handle without the leading @", + "in": "path", + "name": "handler", "required": true, "type": "string", - "x-example": "7329791746055080709" + "x-example": "chatgpt" } ], "produces": [ @@ -538018,8 +621570,14 @@ "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/tiktokmobile.musicDetailResponseDoc" + "$ref": "#/definitions/tiktok.profileResponseDoc" } }, "400": { @@ -538028,6 +621586,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Profile not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Rate limit exceeded", "schema": { @@ -538046,26 +621610,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve one TikTok sound", + "summary": "Retrieve a TikTok profile", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/music/pick": { + "/tiktok/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns the mobile app's sound pick/chart list: `music_list` of full sound objects (id, title, author, user_count, duration, ...) plus the chart list `mc_list` and `radio_cursor`.", - "operationId": "tiktok-mobile-music-pick", + "description": "Searches TikTok videos for `keyword`. `cursor` defaults to 0 and `count` defaults to 20, capped at 50. The response has the matching video items, a `cursor` and `has_more` for paging. An empty, blocked or malformed result from TikTok returns an upstream error.", + "operationId": "tiktok-search", "parameters": [ { - "default": 20, - "description": "Sounds per page (max 50)", + "description": "Search keyword", "in": "query", - "name": "count", - "type": "integer" + "name": "keyword", + "required": true, + "type": "string", + "x-example": "dance" }, { "default": 0, @@ -538073,6 +621638,13 @@ "in": "query", "name": "cursor", "type": "integer" + }, + { + "default": 20, + "description": "Result count, clamped to 50", + "in": "query", + "name": "count", + "type": "integer" } ], "produces": [ @@ -538081,8 +621653,14 @@ "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/tiktokmobile.musicPickResponseDoc" + "$ref": "#/definitions/tiktok.searchResponseDoc" } }, "400": { @@ -538109,51 +621687,40 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok sound chart picks", + "summary": "Search TikTok videos", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/music/posts": { + "/tiktok/search/hashtag": { "get": { "consumes": [ "application/json" ], - "description": "Lists the videos that use one sound, as the mobile app returns them: `aweme_list` of full video objects (with `author`, `statistics` and `added_sound_music_info`), plus `cursor` and `has_more`. `music_id` is required. `count` is accepted but ignored upstream - the server returns its own default page, so page with `cursor`.", - "operationId": "tiktok-mobile-music-posts", + "description": "Searches TikTok hashtags (challenges) for `keyword`. `cursor` defaults to 0 and `count` defaults to 20, capped at 50. The response has `challenge_list` with each hashtag's name and id, plus a `cursor` and `has_more` for paging. An empty, blocked or malformed result returns an upstream error.", + "operationId": "tiktok-search-hashtag", "parameters": [ { - "description": "Sound (music) id", + "description": "Search keyword", "in": "query", - "name": "music_id", + "name": "keyword", "required": true, "type": "string", - "x-example": "6799585653702019073" - }, - { - "default": "fresh", - "description": "Listing: fresh (newest, default) or popular (app canonical music.posts list; requires the device-backed signer)", - "enum": [ - "fresh", - "popular" - ], - "in": "query", - "name": "sort", - "type": "string" + "x-example": "chatgpt" }, { "default": 0, - "description": "Accepted for compatibility; the server ignores it (max 50)", + "description": "Pagination cursor", "in": "query", - "name": "count", + "name": "cursor", "type": "integer" }, { - "default": 0, - "description": "Pagination cursor", + "default": 20, + "description": "Result count, clamped to 50", "in": "query", - "name": "cursor", + "name": "count", "type": "integer" } ], @@ -538163,8 +621730,14 @@ "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/tiktokmobile.musicFreshAwemeResponseDoc" + "$ref": "#/definitions/tiktok.searchHashtagResponseDoc" } }, "400": { @@ -538191,34 +621764,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve videos for a TikTok sound", + "summary": "Search TikTok hashtags", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/music/related": { + "/tiktok/search/user": { "get": { "consumes": [ "application/json" ], - "description": "Returns sounds related to one video: `music_list` of full sound objects, `recall_info_list` explaining why each was recalled, `similar_song_ids`, plus `cursor` and `has_more`.", - "operationId": "tiktok-mobile-music-related", + "description": "Searches TikTok users for `keyword`, with `cursor` (default 0) for paging. The response has `user_list` with the matching accounts, plus a `cursor` and `has_more` to continue. Pass the returned `cursor` back to fetch the next page.", + "operationId": "tiktok-search-user", "parameters": [ { - "description": "Video id to find related sounds for", + "description": "Search keyword", "in": "query", - "name": "aweme_id", + "name": "keyword", "required": true, "type": "string", - "x-example": "7681236055831416084" - }, - { - "default": 20, - "description": "Sounds per page (max 50)", - "in": "query", - "name": "count", - "type": "integer" + "x-example": "chatgpt" }, { "default": 0, @@ -538234,8 +621800,14 @@ "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/tiktokmobile.musicRelatedResponseDoc" + "$ref": "#/definitions/tiktok.searchUserResponseDoc" } }, "400": { @@ -538262,32 +621834,52 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve sounds related to a TikTok video", + "summary": "Search TikTok users", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/music/trending": { + "/tiktok/top-ads/analysis": { "get": { "consumes": [ "application/json" ], - "description": "Returns the mobile app's trending sound chart: `music_list` of full sound objects (`id_str`, `title`, `user_count`, `album`, `artists`, `cover_large`/`cover_medium`/`cover_thumb`, `binded_challenge_id`, `collect_stat`, `audition_duration`) unmodified, plus `cursor` and `has_more` for paging. This is the chart behind `music.trending`.", - "operationId": "tiktok-mobile-music-trending", + "description": "Returns the detail-page interactive time analysis chart and percentile for a Top Ads material. Metric values are `retain_ctr` (CTR), `retain_cvr` (CVR), `click_cnt` (Clicks), `convert_cnt` (Conversion), and `play_retain_cnt` (Remain).", + "operationId": "tiktok-top-ads-analysis", "parameters": [ { - "default": 20, - "description": "Sounds per page (max 50)", + "description": "Top Ads material id", "in": "query", - "name": "count", - "type": "integer" + "name": "material_id", + "required": true, + "type": "string", + "x-example": "7130614705291427842" }, { - "default": 0, - "description": "Pagination cursor", + "default": "retain_ctr", + "description": "Interactive time analysis metric", + "enum": [ + "retain_ctr", + "retain_cvr", + "click_cnt", + "convert_cnt", + "play_retain_cnt" + ], "in": "query", - "name": "cursor", + "name": "metric", + "type": "string" + }, + { + "default": 7, + "description": "Percentile lookback period in days", + "enum": [ + 7, + 30, + 180 + ], + "in": "query", + "name": "period_type", "type": "integer" } ], @@ -538297,8 +621889,14 @@ "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/tiktokmobile.hotMusicResponseDoc" + "$ref": "#/definitions/populartrend.topAdsAnalysisResponseDoc" } }, "400": { @@ -538325,34 +621923,28 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok trending sounds", + "summary": "Retrieve TikTok Top Ads interactive time analysis", "tags": [ - "TikTok" + "TikTok", + "TikTok Top Ads" ] } }, - "/tiktok/mobile/mv/videos": { + "/tiktok/top-ads/detail": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of an MV channel feed, the app's music-video (\"MV\") tab. The upstream is `/aweme/v1/mv/aweme/`; `mv_id` is a small numeric CHANNEL index, NOT a video id — measured ids 0-10 each returned a 15-video page of full aweme objects (1.05-1.24 MB), while 100 returned a valid empty page and a real aweme id returned an empty list. The server's page size is 15 and `count` was measured IGNORED (`count=5` and `count=10` both returned 15 items), so `count` is not exposed; page with `cursor`. The returned `cursor` is a reusable next-page token (measured page 1 `cursor: 18, has_more: 1`; `cursor=18` returned a fresh page with `cursor: 38, has_more: 1`). The envelope's `top_awemes` (pinned entries), `original_aweme_id`, `page_extra` and `extra`/`log_pb` are kept as measured. Measured 2026-10-22 with the pure-Go (device-free) signer, so it does not need the device-backed signer. A missing or non-numeric `mv_id` is a 400; an unknown numeric channel is a valid empty page.", - "operationId": "tiktok-mobile-mv-videos", + "description": "Returns detail for one TikTok Creative Center Top Ads material. Use `material_id`; the upstream does not accept `id` or `materialId`.", + "operationId": "tiktok-top-ads-detail", "parameters": [ { - "description": "MV channel index (small integer; measured 0-10 populated, 100 empty)", + "description": "Top Ads material id", "in": "query", - "name": "mv_id", + "name": "material_id", "required": true, "type": "string", - "x-example": "1" - }, - { - "description": "Next-page token from the previous response (0 = first page)", - "in": "query", - "name": "cursor", - "type": "integer", - "x-example": 0 + "x-example": "7631130810943897607" } ], "produces": [ @@ -538361,8 +621953,14 @@ "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/tiktokmobile.mvFeedResponseDoc" + "$ref": "#/definitions/populartrend.topAdsDetailResponseDoc" } }, "400": { @@ -538389,62 +621987,191 @@ "ApiKeyAuth": [] } ], - "summary": "MV channel feed: the app's music-video tab, paged", + "summary": "Retrieve TikTok Top Ads detail", "tags": [ - "TikTok" + "TikTok", + "TikTok Top Ads" ] } }, - "/tiktok/mobile/place/detail": { + "/tiktok/top-ads/filters": { "get": { "consumes": [ "application/json" ], - "description": "Returns one place detail page, keyed by the `poi_id` that the place search endpoint returns. The upstream is TikTok's server-driven UI (`/tiktok/poi/slash/v1`) frame stream, assembled here into the component map of the place-detail screen: `food_head_info` (place name, formatted address, category, phone, coordinates, opening hours, rating/score with mention count, price range, tags and photo album), `poi_top_videos` (top videos strip), `poi_limited_post` (posts about the place: full video items plus `aweme_cursor`/`has_more_aweme`), `poi_review` (review preview with `has_more`) and `ai_summary` when the place has one. `nodes` is opaque and complete, `frames` keeps the raw ordered frames, and the typed counters (`top_video_count`, `post_count`, `post_cursor`, `has_more_posts`, `review_count`, `has_more_reviews`) are convenience projections. The measured page-size controls are forwarded with the app's defaults but the server applies its own bounds. The route is not signature-gated, so it does not need the device-backed signer.", - "operationId": "tiktok-mobile-place-detail", + "description": "Returns filter metadata for TikTok Creative Center Top Ads. Dynamic values come from TikTok; static UI enums are included for `order_by`, `duration`, `like`, and `ad_format`.", + "operationId": "tiktok-top-ads-filters", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/populartrend.topAdsFiltersResponseDoc" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve TikTok Top Ads filters", + "tags": [ + "TikTok", + "TikTok Top Ads" + ] + } + }, + "/tiktok/top-ads/list": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns high-performing auction ads from TikTok Creative Center. The service defaults `period` to 30, `page` to 1, `limit` to 20, and `order_by` to `for_you`. Use `/tiktok/top-ads/filters` for dynamic enum values and static enums for order, duration, likes, and ad format.", + "operationId": "tiktok-top-ads-list", "parameters": [ { - "description": "Place id from the place search endpoint", + "default": 30, + "description": "Lookback period in days", + "enum": [ + 7, + 30, + 180 + ], "in": "query", - "name": "poi_id", - "required": true, + "name": "period", + "type": "integer" + }, + { + "default": 1, + "description": "Page number", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer" + }, + { + "default": 20, + "description": "Maximum number of ads to return", + "in": "query", + "maximum": 100, + "name": "limit", + "type": "integer" + }, + { + "default": "for_you", + "description": "Sort order", + "enum": [ + "for_you", + "impression", + "ctr", + "play_2s_rate", + "play_6s_rate", + "cvr", + "like" + ], + "in": "query", + "name": "order_by", + "type": "string" + }, + { + "description": "Country code or comma-separated country codes from /tiktok/top-ads/filters", + "in": "query", + "name": "country_code", "type": "string", - "x-example": "42203861086875992" + "x-example": "US" }, { - "description": "Review preview size forwarded upstream (default 20, bounded at 50)", + "description": "Brand or product keyword search", "in": "query", - "name": "review_count", - "type": "integer", - "x-example": 20 + "name": "keyword", + "type": "string", + "x-example": "coffee" }, { - "description": "Review cursor forwarded upstream (default 0)", + "description": "Industry filter id or comma-separated ids from /tiktok/top-ads/filters", "in": "query", - "name": "review_cursor", - "type": "integer", - "x-example": 0 + "name": "industry", + "type": "string", + "x-example": "23118000000" }, { - "description": "Posts page size forwarded upstream (default 9, bounded at 50)", + "description": "Objective filter id or comma-separated ids from /tiktok/top-ads/filters", "in": "query", - "name": "merged_count", - "type": "integer", - "x-example": 9 + "name": "objective", + "type": "string", + "x-example": "3" }, { - "description": "Top-videos cursor forwarded upstream (default 0)", + "description": "Ad language id or comma-separated ids from /tiktok/top-ads/filters", "in": "query", - "name": "video_cursor", - "type": "integer", - "x-example": 0 + "name": "ad_language", + "type": "string", + "x-example": "en" }, { - "description": "Forwarded analytics origin (default search_places)", + "description": "Pattern label id or comma-separated ids from /tiktok/top-ads/filters", "in": "query", - "name": "enter_from", + "name": "pattern_label", "type": "string", - "x-example": "search_places" + "x-example": "10100100000" + }, + { + "description": "Video duration bucket", + "enum": [ + "time-2", + "time-3", + "time-4", + "time-5", + "time-6", + "time-7" + ], + "in": "query", + "name": "duration", + "type": "string" + }, + { + "description": "Like percentile bucket id or comma-separated ids", + "enum": [ + "1", + "2", + "3", + "4", + "5" + ], + "in": "query", + "name": "like", + "type": "string" + }, + { + "description": "Ad format id", + "enum": [ + "1", + "2" + ], + "in": "query", + "name": "ad_format", + "type": "string" } ], "produces": [ @@ -538453,8 +622180,14 @@ "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/tiktokmobile.placeDetailResponseDoc" + "$ref": "#/definitions/populartrend.topAdsListResponseDoc" } }, "400": { @@ -538481,27 +622214,27 @@ "ApiKeyAuth": [] } ], - "summary": "Place (POI) detail from the mobile app's Places surface", + "summary": "Retrieve TikTok Top Ads", "tags": [ - "TikTok" + "TikTok", + "TikTok Top Ads" ] } }, - "/tiktok/mobile/place/info": { + "/tiktok/top-ads/location-info": { "get": { "consumes": [ "application/json" ], - "description": "Returns one place's compact record, keyed by the `poi_id` that the place search endpoint returns. The upstream is TikTok's POI read (`/tiktok/poi/get/v1`), the record behind a place card: `name`, `address`, `category`, `average_price`, `latitude`/`longitude`, `city_code`/`region_code`, `review_score` with `review_count`/`no_rating`, `video_count`, `favorite_count`, `opening_hours`/`opening_status`, `cover`, `share_url`/`share_desc` and `parent_poi`, plus the upstream POI object unmodified in `place` so a richer field is never lost. This is the cheap lookup to use instead of the ~1 MB slash detail page when only the place record is needed. A nonexistent id answers 400 (the upstream business status 3009009 \"poi not exist\" is a caller error, not an outage). Measured 2026-10-21 with the pure-Go (device-free) signer: 4,594 B for a coffee shop (score 4.7 / 2 reviews, price \"$\", hours \"8:00 AM – 5:00 PM\", 11 videos), 4,623 B for a second location (score 4.8 / 13 reviews). The route is not signature-gated, so it does not need the device-backed signer.", - "operationId": "tiktok-mobile-place-info", + "description": "Returns TikTok's inferred initial country and industry targeting context for Top Ads. Use it when you need starting targeting values; use the locations, filters, and list endpoints to choose criteria and retrieve ads.", + "operationId": "tiktok-top-ads-location-info", "parameters": [ { - "description": "Place id from the place search endpoint", + "default": 1, + "description": "Optional upstream Creative Center module identifier; omitted or 0 defaults to 1, other nonzero IDs are passed through without local range validation", "in": "query", - "name": "poi_id", - "required": true, - "type": "string", - "x-example": "42203861086875992" + "name": "module", + "type": "integer" } ], "produces": [ @@ -538510,12 +622243,18 @@ "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/tiktokmobile.placeInfoResponseDoc" + "$ref": "#/definitions/populartrend.topAdsLocationInfoResponseDoc" } }, "400": { - "description": "Invalid input, or the place id does not exist", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } @@ -538538,47 +622277,92 @@ "ApiKeyAuth": [] } ], - "summary": "Compact place (POI) record: address, coordinates, rating, hours, counters", + "summary": "Retrieve TikTok Top Ads location info", "tags": [ - "TikTok" + "TikTok", + "TikTok Top Ads" ] } }, - "/tiktok/mobile/place/media": { + "/tiktok/top-ads/locations": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a place's mixed video/photo grid unmodified in `item_list`: each row carries an `aweme` video object or a photo entry plus `media_type`/`item_type`, an `aweme_cover`, topic tags and a crop cover. `next_cursor` is the opaque paging token to pass back as `cursor` (send the returned `data_version` with it; the endpoint defaults it to `v1`). `size` is the app's page hint (default 6, max 30; the server caps larger values). Requires the device-backed signing service; without it the endpoint returns a generic service-unavailable error.", - "operationId": "tiktok-mobile-place-media", + "description": "Lists the country filters offered by TikTok Creative Center Top Ads. Each country has an `id` such as `US`, a `value` (the country name), a `label` and a `has_conversion` flag. Takes no parameters.", + "operationId": "tiktok-top-ads-locations", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/populartrend.topAdsLocationsResponseDoc" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve TikTok Top Ads locations", + "tags": [ + "TikTok", + "TikTok Top Ads" + ] + } + }, + "/tiktok/top-ads/recommend": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Lists Top Ads materials that TikTok Creative Center recommends as related to the ad with `material_id`. `page` starts at 1; `limit` defaults to 20 and is capped at 100. Each ad has its title, brand, likes, comments, shares, CTR, objectives and video info. The list can be empty for a valid id.", + "operationId": "tiktok-top-ads-recommend", "parameters": [ { - "description": "Place id from the place search/detail endpoints", + "description": "Top Ads material id", "in": "query", - "name": "poi_id", + "name": "material_id", "required": true, "type": "string", - "x-example": "42203861086875992" - }, - { - "description": "Opaque next_cursor token from the previous response", - "in": "query", - "name": "cursor", - "type": "string" + "x-example": "7631130810943897607" }, { - "default": 6, - "description": "Rows per page hint (max 30)", + "default": 1, + "description": "Page number", "in": "query", - "name": "size", + "minimum": 1, + "name": "page", "type": "integer" }, { - "description": "Paging data version carried with cursor (defaults to v1)", + "default": 20, + "description": "Maximum number of ads to return", "in": "query", - "name": "data_version", - "type": "string", - "x-example": "v1" + "maximum": 100, + "name": "limit", + "type": "integer" } ], "produces": [ @@ -538587,8 +622371,14 @@ "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/tiktokmobile.placeMediaResponseDoc" + "$ref": "#/definitions/populartrend.topAdsRecommendResponseDoc" } }, "400": { @@ -538615,43 +622405,34 @@ "ApiKeyAuth": [] } ], - "summary": "List a TikTok place's mixed media", + "summary": "Retrieve TikTok Top Ads recommendations", "tags": [ - "TikTok" + "TikTok", + "TikTok Top Ads" ] } }, - "/tiktok/mobile/place/photos": { + "/tiktok/top-ads/safety": { "get": { "consumes": [ "application/json" ], - "description": "Returns one place's photo album, keyed by the `poi_id` that the place search endpoint returns. The upstream is `/tiktok/poi/picture_album/v1`: `categories` holds each album tab (`name`, `pic_tab_typecode`, `pictures` of bare image URL lists and `pictures_v2`, the same photos with `author` attribution, `pic_id`, `source` and origin/compressed URL info), `photo_count` sums the categories' pictures, and `title` is the app's own header. Measured 2026-10-21 with the pure-Go (device-free) signer: one place answered 5,368 B, title \"Gallery (3)\", 1 category with 3 photos whose `pictures_v2` entries name the Google-places contributor; another answered 24,196 B with more photos. The album is one-shot: `count` and `pic_tab_typecode` were measured and did not change the page. A nonexistent id answers 500 (the upstream answers status 4 \"Server is currently unavailable\" on this route, unlike the poi-not-exist code the other place routes use). The route is not signature-gated, so it does not need the device-backed signer.", - "operationId": "tiktok-mobile-place-photos", - "parameters": [ - { - "description": "Place id from the place search endpoint", - "in": "query", - "name": "poi_id", - "required": true, - "type": "string", - "x-example": "42203861086875992" - } - ], + "description": "Returns the Creative Center safety configuration flags for search: `top_ads_search`, `keyword_search`, `hashtag_search`, `creator_search`, `sound_search` and `cc_banner_key`. It carries feature flags only, not ad materials. Takes no parameters.", + "operationId": "tiktok-top-ads-safety", "produces": [ "application/json" ], "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/tiktokmobile.placePhotosResponseDoc" - } - }, - "400": { - "description": "Invalid input", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/populartrend.topAdsSafetyResponseDoc" } }, "429": { @@ -538661,7 +622442,7 @@ } }, "500": { - "description": "Internal server error, including a place id that does not resolve", + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -538672,51 +622453,35 @@ "ApiKeyAuth": [] } ], - "summary": "Place photo album with per-photo attribution", + "summary": "Retrieve TikTok Top Ads safety configuration", "tags": [ - "TikTok" + "TikTok", + "TikTok Top Ads" ] } }, - "/tiktok/mobile/place/reviews": { + "/tiktok/top-ads/spotlight": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a place's reviews (`reviews`, full review objects: author, content, rating, tags, `server_param`) together with the score summary (`review_summary`: score and score range), the review tags (`review_tags`) and the paging token (`cursor`/`has_more`). The route uses the review-landing tab scene (`scene=7`) that the app's own review interface sends; without that scene the upstream rejects the request with `status_code 5`, which is why this family was previously unusable. `poi_id` is the place id from the place search/detail endpoints. Requires the device-backed signing service; without it the endpoint returns a generic service-unavailable error.", - "operationId": "tiktok-mobile-place-reviews", + "description": "Lists the Top Ads Spotlight materials that TikTok Creative Center hand-picks. `page` starts at 1; `limit` defaults to 20 and is capped at 100. Each ad has its title, brand, likes, comments, shares, CTR, objectives and video info. `data.pagination` gives the page, size, total and `has_more`.", + "operationId": "tiktok-top-ads-spotlight", "parameters": [ { - "description": "Place id from the place search/detail endpoints", - "in": "query", - "name": "poi_id", - "required": true, - "type": "string", - "x-example": "42203861086875992" - }, - { - "default": 0, - "description": "Paging token from the previous response", + "default": 1, + "description": "Page number", "in": "query", - "name": "cursor", + "minimum": 1, + "name": "page", "type": "integer" }, { "default": 20, - "description": "Reviews per page (max 30)", - "in": "query", - "name": "count", - "type": "integer" - }, - { - "default": 1, - "description": "Sort order: 1 = default, 2 = recent", - "enum": [ - 1, - 2 - ], + "description": "Maximum number of ads to return", "in": "query", - "name": "sort_type", + "maximum": 100, + "name": "limit", "type": "integer" } ], @@ -538726,8 +622491,14 @@ "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/tiktokmobile.placeReviewsResponseDoc" + "$ref": "#/definitions/populartrend.topAdsSpotlightResponseDoc" } }, "400": { @@ -538754,41 +622525,34 @@ "ApiKeyAuth": [] } ], - "summary": "List a TikTok place's reviews", + "summary": "Retrieve TikTok Top Ads Spotlight", "tags": [ - "TikTok" + "TikTok", + "TikTok Top Ads" ] } }, - "/tiktok/mobile/place/videos": { + "/tiktok/top-ads/suggestions": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of the videos posted at a place, keyed by the `poi_id` that the place search endpoint returns. The upstream is `/tiktok/poi/video/list/v1`: `aweme_list` holds the app's full video objects (id, description, author, statistics, media URLs, music, anchors, ...) and `item_count` is this page's size. Page with `cursor`: the returned `cursor` is a reusable next-page token (measured page 1 `cursor: 20` with `has_more: 1`, page 2 `cursor: 40`), never with arithmetic on `count`. `count` is a page-size hint, not a strict size: 1/2/5 returned exactly that many items on the first page, a later page returned 8 for count=5, and 10/20/50 were all server-capped at 17. Measured 2026-10-21 with the pure-Go (device-free) signer: 11 videos (940-944 KB) on one place, 17 videos (1.4 MB) on another. The route exposes no sort control: `sort_type` and `order` were measured and did not change the page or its order. The upstream throttles bursts, so paced clients are expected. The route is not signature-gated, so it does not need the device-backed signer.", - "operationId": "tiktok-mobile-place-videos", + "description": "Returns Top Ads search suggestions from TikTok Creative Center. `count` is the maximum number of suggestions (default 50) and `scenario` picks the suggestion scenario id (default 1). The `query` list can be empty for the default scenario.", + "operationId": "tiktok-top-ads-suggestions", "parameters": [ { - "description": "Place id from the place search endpoint", - "in": "query", - "name": "poi_id", - "required": true, - "type": "string", - "x-example": "42203861086875992" - }, - { - "description": "Page-size hint: 1-50 measured, server caps larger pages (default is the app default)", + "default": 50, + "description": "Maximum number of suggestions to return", "in": "query", "name": "count", - "type": "integer", - "x-example": 10 + "type": "integer" }, { - "description": "Next-page token from the previous response (0 = first page)", + "default": 1, + "description": "Suggestion scenario id", "in": "query", - "name": "cursor", - "type": "integer", - "x-example": 0 + "name": "scenario", + "type": "integer" } ], "produces": [ @@ -538797,12 +622561,18 @@ "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/tiktokmobile.placeVideosResponseDoc" + "$ref": "#/definitions/populartrend.topAdsSuggestionsResponseDoc" } }, "400": { - "description": "Invalid input, or the place id does not exist", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } @@ -538825,62 +622595,34 @@ "ApiKeyAuth": [] } ], - "summary": "Videos posted at one place (paged)", + "summary": "Retrieve TikTok Top Ads suggestions", "tags": [ - "TikTok" + "TikTok", + "TikTok Top Ads" ] } }, - "/tiktok/mobile/playlist/detail": { + "/tiktok/trending": { "get": { "consumes": [ "application/json" ], - "description": "Returns one playlist's record unmodified in `mix`: `mix_id`, `name`, `mix_type`, `creator_name`, `author`, `share_info`, `statistic.total` and `status`, plus `is_collect`. `mix_id` is the web playlist id namespace; the owner identity selector (`user_id` or `sec_user_id`) is required as well (the mobile route rejects `mix_id` alone with `status_code 5`). Requires the device-backed signing service; without it the endpoint returns a generic service-unavailable error.", - "operationId": "tiktok-mobile-playlist-detail", - "parameters": [ - { - "description": "Playlist id (web playlist id namespace)", - "in": "query", - "name": "mix_id", - "required": true, - "type": "string", - "x-example": "7681171537575824159" - }, - { - "description": "Playlist owner's numeric user id (one of user_id / sec_user_id is required)", - "in": "query", - "name": "user_id", - "type": "string", - "x-example": "107955" - }, - { - "description": "Playlist owner's sec_user_id (one of user_id / sec_user_id is required)", - "in": "query", - "name": "sec_user_id", - "type": "string" - } - ], + "description": "Returns the current TikTok trending feed: `itemList` holds the videos, and `hasMore` and `cursor` describe paging. The response also has a `trendingTopics` field. Takes no parameters.", + "operationId": "tiktok-trending", "produces": [ "application/json" ], "responses": { "200": { "description": "OK", + "headers": { + "X-RateLimit-Per-Second-Remaining": { + "description": "Number of remaining requests per second", + "type": "string" + } + }, "schema": { - "$ref": "#/definitions/tiktokmobile.playlistDetailResponseDoc" - } - }, - "400": { - "description": "Invalid input", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Rate limit exceeded", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/tiktok.trendingResponseDoc" } }, "500": { @@ -538895,39 +622637,24 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve one TikTok playlist", + "summary": "Retrieve TikTok trending posts", "tags": [ "TikTok" ] } }, - "/tiktok/mobile/playlist/list": { + "/time/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the public playlists (\"mixes\") of one creator unmodified in `mix_list`: each row carries the playlist `mix_id` (the same id the web playlist URL uses), `name`, `mix_type`, `creator_name`, `statistic.total` and `last_add_video_timestamp`. Feed `mix_id` to the playlist detail endpoint. Requires one identity selector (`user_id` or `sec_user_id`). Requires the device-backed signing service; without it the endpoint returns a generic service-unavailable error instead of an empty page.", - "operationId": "tiktok-mobile-playlist-list", + "description": "Returns one TIME article by `url`, which must be a canonical HTTPS dated `time.com` article link. The response has the title, description, section, authors, publication and update times, lead image URL, body `paragraphs` and a `paywalled` flag.", + "operationId": "time-article", "parameters": [ { - "description": "Creator's numeric user id (one of user_id / sec_user_id is required)", + "description": "Canonical TIME article URL", "in": "query", - "name": "user_id", + "name": "url", + "required": true, "type": "string", - "x-example": "107955" - }, - { - "description": "Creator's sec_user_id (one of user_id / sec_user_id is required)", - "in": "query", - "name": "sec_user_id", - "type": "string" - }, - { - "default": 0, - "description": "Paging token from the previous response", - "in": "query", - "name": "cursor", - "type": "integer" + "x-example": "https://time.com/article/2026/09/20/example-story/" } ], "produces": [ @@ -538937,23 +622664,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.playlistListResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -538964,41 +622691,24 @@ "ApiKeyAuth": [] } ], - "summary": "List a creator's TikTok playlists", + "summary": "Get TIME article content", "tags": [ - "TikTok" + "TIME" ] } }, - "/tiktok/mobile/playlist/videos": { + "/time/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists one page of a playlist's videos unmodified in `item_list`: each entry is the full video object the app renders (author, statistics, music, cover renditions, description). `mix_id` is the playlist id from the playlist list/detail endpoints; pass the returned `cursor` back while `has_more` is true. This endpoint is served from the public web twin (`www.tiktok.com/api/mix/item_list/`) because the mobile item route is not usable, so it is device-free: no signing service or cookie is required.", - "operationId": "tiktok-mobile-playlist-videos", + "description": "Returns a TIME author's profile by `url`, a canonical `time.com/author//` link: name, job title, bio, image URL, social account links and recent articles with title, URL, excerpt, section, section URL and ISO-8601 `published_at`. Not every author lists a social account.", + "operationId": "time-author", "parameters": [ { - "description": "Playlist id (web playlist id namespace)", + "description": "Canonical TIME author URL", "in": "query", - "name": "mix_id", + "name": "url", "required": true, "type": "string", - "x-example": "7681171537575824159" - }, - { - "default": 0, - "description": "Paging token from the previous response", - "in": "query", - "name": "cursor", - "type": "integer" - }, - { - "default": 10, - "description": "Videos per page (max 30)", - "in": "query", - "name": "count", - "type": "integer" + "x-example": "https://time.com/author/stephanie-zacharek/" } ], "produces": [ @@ -539008,23 +622718,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.playlistVideosResponseDoc" + "$ref": "#/definitions/publicnews.timeAuthorResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -539035,47 +622745,36 @@ "ApiKeyAuth": [] } ], - "summary": "List a playlist's videos", + "summary": "Get a TIME author profile", "tags": [ - "TikTok" + "TIME" ] } }, - "/tiktok/mobile/search": { + "/time/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Keyword search returning the mobile API result documents unmodified: each entry has `aweme_info` (a full video object with statistics), `card_profile` and search metadata, plus `cursor` and `has_more`. Keep `count` small (20 already exceeds one megabyte of upstream JSON). Requires the device-backed signing service; without it the endpoint returns a generic service-unavailable error instead of an empty page.", - "operationId": "tiktok-mobile-search", + "description": "Returns the current headlines for one TIME section. `section` is required and takes one of `news`, `politics`, `world`, `business`, `technology`, `health`, `entertainment`, `sports`, `ideas` or `climate`. Each item has its title and URL.", + "operationId": "time-headlines", "parameters": [ { - "description": "Search keyword", + "description": "TIME RSS section slug", + "enum": [ + "news", + "politics", + "world", + "business", + "technology", + "health", + "entertainment", + "sports", + "ideas", + "climate" + ], "in": "query", - "name": "keyword", + "name": "section", "required": true, "type": "string", - "x-example": "lofi" - }, - { - "default": 5, - "description": "Results per page (max 20)", - "in": "query", - "name": "count", - "type": "integer" - }, - { - "default": 0, - "description": "Result offset; pass search_id with a non-zero offset", - "in": "query", - "name": "offset", - "type": "integer" - }, - { - "description": "search_id returned by a previous page of the same search", - "in": "query", - "name": "search_id", - "type": "string" + "x-example": "news" } ], "produces": [ @@ -539085,23 +622784,55 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.searchGeneralResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get TIME section headlines", + "tags": [ + "TIME" + ] + } + }, + "/time/news": { + "get": { + "description": "Returns the current top stories from TIME. It takes no parameters. Each item has its title, URL and, where available, a summary, author, publication time, image URL and `type`. Use the headlines endpoint to read one section.", + "operationId": "time-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -539112,50 +622843,16 @@ "ApiKeyAuth": [] } ], - "summary": "Search TikTok videos on the mobile API", + "summary": "Get TIME top stories", "tags": [ - "TikTok" + "TIME" ] } }, - "/tiktok/mobile/search/effects": { + "/time/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches TikTok's effect catalogue by `keyword`, returning the app's full effect objects (`name`, `hint`, `icon_url`, `file_url`, `effect_id`, `types`, `tags`, `parent`/`children`, `effect_type`, `music`, `source`, `designer_id`, `schema`). The upstream is `/aweme/v1/search/effect/`; the page is unfolded to the top level (`effects`, `cursor`, `has_more`, `search_id`, `use_hot`, plus `bind_effects`/`collection` on some queries). Paging is real but needs BOTH halves of the token: pass the previous response's `cursor` and `search_id` together (measured: page 1 `cursor: 100`, page 2 with `cursor=100&search_id=...` returned the final effect with `has_more: false`; a cursor without its `search_id` returns an empty page, which the service rejects as a 400). `count` and `offset` were measured as no-ops. Measured 2026-10-21 with the pure-Go (device-free) signer: `keyword=green screen` -> 6 effects (11,831 B) + 1 on page 2, `green` -> 2, `字幕` -> 4; a keyword with no matches is a valid empty page. The route is not signature-gated, so it does not need the device-backed signer.", - "operationId": "tiktok-mobile-search-effects", - "parameters": [ - { - "description": "Effect name or text, e.g. green screen", - "in": "query", - "name": "keyword", - "required": true, - "type": "string", - "x-example": "green screen" - }, - { - "description": "Accepted for shape parity; the server was measured to ignore it", - "in": "query", - "name": "count", - "type": "integer", - "x-example": 20 - }, - { - "description": "Next-page token from the previous response (0 = first page)", - "in": "query", - "name": "cursor", - "type": "integer", - "x-example": 100 - }, - { - "description": "Search-session token from the previous response; required together with cursor", - "in": "query", - "name": "search_id", - "type": "string", - "x-example": "20261021173221C8185FF1D4A1062AD97C" - } - ], + "description": "Lists the 10 TIME section slugs that the headlines endpoint accepts: `news`, `politics`, `world`, `business`, `technology`, `health`, `entertainment`, `sports`, `ideas` and `climate`. Each entry has a `slug`, a display `name` and a `url`.", + "operationId": "time-sections", "produces": [ "application/json" ], @@ -539163,25 +622860,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.searchEffectsResponseDoc" - } - }, - "400": { - "description": "Invalid input, including a cursor sent without its search_id", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Rate limit exceeded", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -539190,34 +622869,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search TikTok effects/stickers by keyword", + "summary": "Get TIME RSS sections", "tags": [ - "TikTok" + "TIME" ] } }, - "/tiktok/mobile/search/hashtags": { + "/timeslive/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the hashtag suggestions the app shows while typing in the search box, keyed by `keyword`. The upstream is `/aweme/v1/search/challengesug/`; each `sug_list` row carries `cha_name` (hashtag name), `view_count`, `use_count` and `cid` (the numeric hashtag id), so this is the discovery step for the hashtag endpoints (`hashtag info` is name-keyed). Measured 2026-10-21 with the pure-Go (device-free) signer: `keyword=lofi` returned 10 rows (`lofi` 18.2B views / 1.9M uses, then `lofiasmr`, `lofihiphop`, ...), `coffee` and `ラーメン` also returned 10 rows, and a keyword with no suggestions is a valid empty page (`sug_list: []`). `count` is accepted for shape parity but the server was measured to ignore it (5/20/100 all returned 10 rows), and the route has no paging. The route is not signature-gated, so it does not need the device-backed signer.", - "operationId": "tiktok-mobile-search-hashtags", + "description": "Returns article metadata and body paragraphs for a canonical TimesLIVE editorial article URL. Some stories may have a publisher access gate; paywalled is set when the page's first-party access flags indicate restricted content.", + "operationId": "timeslive-article", "parameters": [ { - "description": "Text typed so far; the server also accepts prefixes (e.g. lofi -> lofihiphop)", + "description": "Canonical TimesLIVE article URL", "in": "query", - "name": "keyword", + "name": "url", "required": true, "type": "string", - "x-example": "lofi" - }, - { - "description": "Accepted for shape parity; the server was measured to ignore it (always up to 10 rows)", - "in": "query", - "name": "count", - "type": "integer", - "x-example": 10 + "x-example": "https://www.timeslive.co.za/news/sci-tech/2026-09-29-insight-chinas-ai-agents-can-lie-and-scheme-just-like-their-us-rivals/" } ], "produces": [ @@ -539227,23 +622896,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.hashtagSuggestionsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -539254,41 +622923,49 @@ "ApiKeyAuth": [] } ], - "summary": "Hashtag suggestions for a keyword (hashtag typeahead)", + "summary": "Get TimesLIVE article content", "tags": [ - "TikTok" + "TimesLIVE" ] } }, - "/tiktok/mobile/search/music": { + "/timeslive/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Keyword search over sounds, returning `music_info_list` of full sound objects unmodified with `cursor`, `has_more` and `total`.", - "operationId": "tiktok-mobile-search-music", + "description": "Returns current TimesLIVE stories for a section. Pass a slug from timeslive_sections; results are the first 15 items in the live section order.", + "operationId": "timeslive-headlines", "parameters": [ { - "description": "Search keyword", + "description": "TimesLIVE editorial section slug", + "enum": [ + "news", + "news/south-africa", + "news/africa", + "news/world", + "news/business", + "news/sci-tech", + "politics", + "opinion", + "ideas", + "investigations", + "tshisa-live", + "lifestyle", + "lifestyle/fashion", + "lifestyle/food", + "lifestyle/travel", + "lifestyle/books", + "lifestyle/spotlight", + "sport", + "sport/soccer", + "sport/rugby", + "sport/cricket", + "sport/arena-sports-show", + "motoring" + ], "in": "query", - "name": "keyword", + "name": "section", "required": true, "type": "string", - "x-example": "lofi" - }, - { - "default": 20, - "description": "Sounds per page (max 50)", - "in": "query", - "name": "count", - "type": "integer" - }, - { - "default": 0, - "description": "Result offset", - "in": "query", - "name": "offset", - "type": "integer" + "x-example": "news" } ], "produces": [ @@ -539298,23 +622975,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.searchMusicResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { - "description": "Invalid input", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Rate limit exceeded", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -539325,64 +622996,16 @@ "ApiKeyAuth": [] } ], - "summary": "Search TikTok sounds on the mobile API", + "summary": "Get TimesLIVE section headlines", "tags": [ - "TikTok" + "TimesLIVE" ] } }, - "/tiktok/mobile/search/photos": { + "/timeslive/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches TikTok photo posts with the app's own Photos-tab call and returns the page unmodified. Rows live in `search_item_list` (each row's `aweme_info` carries `image_post_info.images`, the carousel images) while `aweme_list` is an empty array; `feedback_type` is `\"photo_tab\"`. `keyword` is required; `count` is bounded at 50 (default 10, the app's value) and `offset` is forwarded as the app's row offset. `sort_type` (0 relevance, 1 like count, 3 date posted) and `publish_time` (recency window in days) are the app's filter-sheet controls. The route is signature-validated, so it needs device-backed request signing to be configured for the deployment and fails with an error instead of returning an empty page when it is not.", - "operationId": "tiktok-mobile-search-photos", - "parameters": [ - { - "description": "Search keyword", - "in": "query", - "name": "keyword", - "required": true, - "type": "string", - "x-example": "lofi" - }, - { - "description": "Rows per page, bounded at 50 (default 10)", - "in": "query", - "name": "count", - "type": "integer", - "x-example": 10 - }, - { - "description": "Row offset forwarded to the app route (first page only in guest mode)", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 - }, - { - "description": "Sort: 0 relevance, 1 like count, 3 date posted", - "in": "query", - "name": "sort_type", - "type": "integer", - "x-example": 0 - }, - { - "description": "Recency window in days: 0 all, 1, 7, 30, 90, 180", - "in": "query", - "name": "publish_time", - "type": "integer", - "x-example": 0 - }, - { - "description": "Forwarded search source (default tab_search)", - "in": "query", - "name": "search_source", - "type": "string", - "x-example": "tab_search" - } - ], + "description": "Returns current TimesLIVE stories, including section-specific headlines. Article access can vary by story.", + "operationId": "timeslive-news", "produces": [ "application/json" ], @@ -539390,23 +623013,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.searchPhotosResponseDoc" - } - }, - "400": { - "description": "Invalid input", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -539417,34 +623034,50 @@ "ApiKeyAuth": [] } ], - "summary": "Search the mobile app's photo-post tab", + "summary": "Get TimesLIVE top stories", "tags": [ - "TikTok" + "TimesLIVE" ] } }, - "/tiktok/mobile/search/place": { + "/timeslive/sections": { "get": { - "consumes": [ + "description": "Returns the complete public editorial navigation set accepted by the TimesLIVE headlines endpoint. External Sunday Times, partner, podcast, account, and link-only surfaces are excluded.", + "operationId": "timeslive-sections", + "produces": [ "application/json" ], - "description": "Returns TikTok's place (POI) search results for a keyword, unmodified: each row carries `poi_name`, `poi_id`, `poi_type`, `video_count`, `poi_rating`, `poi_distance`, `poi_location`, `lat`/`lng`, `img_url`, `opening_time`, `price_level` and `parent_poi`. Useful for mapping a location or category to the places TikTok knows about, and for seeing how many videos each place carries. `keyword` is required. The page holds up to 30 rows (`count` 1-30 measured; a larger count makes the upstream answer an empty page, so the service rejects it) and the route is first-page-only — the returned `cursor` is not a reusable page token.", - "operationId": "tiktok-mobile-search-place", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get TimesLIVE sections", + "tags": [ + "TimesLIVE" + ] + } + }, + "/timesofindia/article": { + "get": { + "description": "Returns public Times of India article metadata (title, author(s), published/updated dates, section, lead image) and body paragraphs from a canonical article URL. A story gated behind a subscription returns a permission error instead of a truncated or fabricated body.", + "operationId": "timesofindia-article", "parameters": [ { - "description": "Place name or category to search for", + "description": "Canonical Times of India article URL", "in": "query", - "name": "keyword", + "name": "url", "required": true, "type": "string", - "x-example": "pizza" - }, - { - "default": 10, - "description": "Rows to return, 1-30 measured (a larger count yields an empty upstream page and is rejected)", - "in": "query", - "name": "count", - "type": "integer" + "x-example": "https://timesofindia.indiatimes.com/business/india-business/example-story/articleshow/134456699.cms" } ], "produces": [ @@ -539454,23 +623087,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.searchPlaceResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "403": { + "description": "Forbidden", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -539481,33 +623120,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search TikTok places", + "summary": "Get The Times of India article content", "tags": [ - "TikTok" + "Times of India" ] } }, - "/tiktok/mobile/search/pre-info": { + "/timesofindia/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the `pre_info_id` token the app attaches to a search session (with its TTL). The token is short-lived; the app requests one before the search stream and reuses it for the following calls.", - "operationId": "tiktok-mobile-search-pre-info", + "description": "Returns a Times of India reporter's profile by `url`, a canonical `timesofindia.indiatimes.com/toireporter/author--.cms` link: name, job title, organization, location, email, biography, headshot and recent articles with title and URL. Fields the profile page does not publish may be empty.", + "operationId": "timesofindia-author", "parameters": [ { - "description": "Seed keyword (optional; the app also requests this with an empty keyword)", + "description": "Canonical Times of India author URL", "in": "query", - "name": "keyword", + "name": "url", + "required": true, "type": "string", - "x-example": "lofi" - }, - { - "default": 20, - "description": "Suggestion count (max 50)", - "in": "query", - "name": "count", - "type": "integer" + "x-example": "https://timesofindia.indiatimes.com/toireporter/author-Smriti-Jain-479254229.cms" } ], "produces": [ @@ -539517,23 +623147,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.searchPreInfoResponseDoc" + "$ref": "#/definitions/publicnews.timesOfIndiaAuthorResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -539544,74 +623174,81 @@ "ApiKeyAuth": [] } ], - "summary": "Pre-search info token for a search session", + "summary": "Get a Times of India author profile", "tags": [ - "TikTok" + "Times of India" ] } }, - "/tiktok/mobile/search/stream": { + "/timesofindia/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Calls the app's primary search route - a form POST to `/aweme/v2/search/general/stream/` whose response is a stream of length-prefixed JSON frames - and returns the frames assembled: `documents` (the flattened `data` entries from the result frame, each a full 145-key video item and other document types), `frames` (every frame in arrival order, opaque, so incremental card patches are preserved), plus `cursor`, `has_more` and `search_id`. Optional `sort_type`, `publish_time` and the app's raw `filter_selected` JSON blob are forwarded to the route and were measured to change the result set (sort_type=1 gave a stable most-liked ordering, publish_time=7 a recency-limited set). This is the high-value search surface: unlike the single-document general search route it supports the app's full result set. It requires the device-backed signing service and returns a generic service-unavailable error when that signer is not configured.", - "operationId": "tiktok-mobile-search-stream", + "description": "Returns the current headlines for one Times of India section or city edition. `section` is required, for example `top-stories`, `india`, `world`, `business`, `cricket`, `mumbai`, `delhi` or `bangalore`. Items carry the title and URL, plus summary, author, publication time and image when the outlet provides them.", + "operationId": "timesofindia-headlines", "parameters": [ { - "description": "Search keyword", - "in": "query", - "name": "keyword", - "required": true, - "type": "string", - "x-example": "lofi" - }, - { - "default": 10, - "description": "Requested page size (sanity bound: 50)", - "in": "query", - "name": "count", - "type": "integer" - }, - { - "default": 0, - "description": "Row offset", - "in": "query", - "name": "offset", - "type": "integer" - }, - { - "description": "Search source hint forwarded to upstream (measured: video)", - "in": "query", - "name": "search_source", - "type": "string", - "x-example": "video" - }, - { - "default": 0, - "description": "Sort order: 0 relevance, 1 like count (stable ordering measured), 3 date posted", + "description": "Times of India section slug", "enum": [ - 0, - 1, - 3 + "top-stories", + "india", + "world", + "nri", + "business", + "cricket", + "sports", + "science", + "environment", + "tech", + "education", + "entertainment", + "life-style", + "astrology", + "auto", + "mumbai", + "delhi", + "bangalore", + "hyderabad", + "chennai", + "ahmedabad", + "allahabad", + "bhubaneswar", + "coimbatore", + "gurgaon", + "guwahati", + "hubli", + "kanpur", + "kolkata", + "ludhiana", + "mangalore", + "mysore", + "noida", + "pune", + "goa", + "chandigarh", + "lucknow", + "patna", + "jaipur", + "nagpur", + "rajkot", + "ranchi", + "surat", + "vadodara", + "varanasi", + "thane", + "thiruvananthapuram", + "us", + "pakistan", + "south-asia", + "uk", + "europe", + "china", + "middle-east", + "rest-of-world" ], "in": "query", - "name": "sort_type", - "type": "integer" - }, - { - "default": 0, - "description": "Recency window in days (0 = unlimited; 7 measured)", - "in": "query", - "name": "publish_time", - "type": "integer" - }, - { - "description": "Raw app filter blob as JSON; takes precedence over sort_type/publish_time", - "in": "query", - "name": "filter_selected", + "name": "section", + "required": true, "type": "string", - "x-example": "{\"sort_type\":\"1\",\"publish_time\":\"7\"}" + "x-example": "top-stories" } ], "produces": [ @@ -539621,23 +623258,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.searchStreamResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { - "description": "Invalid input", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Rate limit exceeded", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -539648,36 +623279,16 @@ "ApiKeyAuth": [] } ], - "summary": "Run the app's primary (streaming) general search", + "summary": "Get The Times of India section headlines", "tags": [ - "TikTok" + "Times of India" ] } }, - "/tiktok/mobile/search/sug": { + "/timesofindia/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the mobile app's search typeahead for a seed keyword: `sug_list` of suggestions, each with `content`, `sug_type`, `word_record` (`group_id`, `words_position`, `words_content`, `words_source`) and positional fields, unmodified. Useful for query expansion and for seeing the phrases the app itself associates with a seed term. `keyword` is required; without it the upstream answers a well-formed but empty envelope.", - "operationId": "tiktok-mobile-search-sug", - "parameters": [ - { - "description": "Seed keyword to expand", - "in": "query", - "name": "keyword", - "required": true, - "type": "string", - "x-example": "lofi" - }, - { - "default": 10, - "description": "Suggestions to return (max 50)", - "in": "query", - "name": "count", - "type": "integer" - } - ], + "description": "Returns the current Times of India top stories. It takes no parameters. Each item has its title, URL, summary, publication time with its UTC offset, author and image URL. Use the headlines endpoint for a section or city edition.", + "operationId": "timesofindia-news", "produces": [ "application/json" ], @@ -539685,23 +623296,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.searchSuggestionResponseDoc" - } - }, - "400": { - "description": "Invalid input", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -539712,27 +623317,50 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok search suggestions", + "summary": "Get The Times of India top stories", "tags": [ - "TikTok" + "Times of India" ] } }, - "/tiktok/mobile/search/tabs": { + "/timesofindia/sections": { "get": { - "consumes": [ + "description": "Lists the 55 Times of India sections that the headlines endpoint accepts, covering national and international topics such as `india`, `world`, `business` and `cricket`, and India city editions such as `mumbai`, `delhi` and `bangalore`. Each entry has a `slug`, a display `name` and the section feed `url`.", + "operationId": "timesofindia-sections", + "produces": [ "application/json" ], - "description": "Returns the tab keys the mobile search screen offers for a keyword (`general`, `video`, `photos`, `user`, `music`, `live`, `place`, `hashtag`), plus the gateway's `is_failed` flag. Measured on the mobile search edge with a form POST.", - "operationId": "tiktok-mobile-search-tabs", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get The Times of India sections", + "tags": [ + "Times of India" + ] + } + }, + "/timesofisrael/article": { + "get": { + "description": "Returns public Times of Israel article metadata and body paragraphs from a canonical article URL. Both regular story pages and individual liveblog-update pages (/liveblog_entry//) are accepted.", + "operationId": "timesofisrael-article", "parameters": [ { - "description": "Search keyword", + "description": "Canonical Times of Israel article URL", "in": "query", - "name": "keyword", + "name": "url", "required": true, "type": "string", - "x-example": "lofi" + "x-example": "https://www.timesofisrael.com/example-article-slug/" } ], "produces": [ @@ -539742,23 +623370,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.searchTabsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -539769,41 +623397,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search tabs available for a keyword", + "summary": "Get Times of Israel article content", "tags": [ - "TikTok" + "Times of Israel" ] } }, - "/tiktok/mobile/search/user": { + "/timesofisrael/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Keyword search over users, returning `user_list` unmodified. Each `user_info` carries the populated creator statistics (follower_count, following_count, total_favorited, aweme_count, custom_verify). Requires the device-backed signing service; without it the endpoint returns a generic service-unavailable error instead of an empty page.", - "operationId": "tiktok-mobile-search-user", + "description": "Returns a Times of Israel writer's byline metadata, biography, social links, and recent articles from a canonical writer profile URL.", + "operationId": "timesofisrael-author", "parameters": [ { - "description": "Search keyword (a username or display name)", + "description": "Canonical Times of Israel author URL", "in": "query", - "name": "keyword", + "name": "url", "required": true, "type": "string", - "x-example": "mrbeast" - }, - { - "default": 20, - "description": "Users per page (max 50)", - "in": "query", - "name": "count", - "type": "integer" - }, - { - "default": 0, - "description": "Pagination cursor", - "in": "query", - "name": "cursor", - "type": "integer" + "x-example": "https://www.timesofisrael.com/writers/jane-doe/" } ], "produces": [ @@ -539813,23 +623424,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.searchUsersResponseDoc" + "$ref": "#/definitions/publicnews.timesOfIsraelAuthorResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -539840,73 +623451,31 @@ "ApiKeyAuth": [] } ], - "summary": "Search TikTok users on the mobile API", + "summary": "Get a Times of Israel author profile", "tags": [ - "TikTok" + "Times of Israel" ] } }, - "/tiktok/mobile/search/videos": { + "/timesofisrael/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Keyword search over videos. The videos are in `aweme_list` (each entry is the full video object); `search_item_list` is kept for compatibility and is `null`. `cursor`, `has_more` and `search_id` accompany the page. `keyword` is required, `count` is bounded at 50, `offset` is a row offset and `search_id` (returned by a previous page) scopes paging to the same search session. `sort_type` is one of `0` (relevance), `1` (like count) or `3` (date posted); `publish_time` is a recency window in days between `0` and `365` (the app uses `0`, `1`, `7`, `30`, `90`, `180`). This endpoint needs device-backed request signing to be configured for the deployment; without it the request fails with an error instead of returning an empty page.", - "operationId": "tiktok-mobile-search-videos", + "description": "Returns the current headlines for one Times of Israel section. `section` is required and takes one of `israel-and-the-region`, `israel-inside`, `jewish-times`, `real-estate-israel` or `tech-israel`. Each item has its title and URL.", + "operationId": "timesofisrael-headlines", "parameters": [ { - "description": "Search keyword", - "in": "query", - "name": "keyword", - "required": true, - "type": "string", - "x-example": "lofi" - }, - { - "default": 10, - "description": "Rows per page (sanity bound: 50)", - "in": "query", - "name": "count", - "type": "integer" - }, - { - "default": 0, - "description": "Row offset; pass search_id with a non-zero offset", - "in": "query", - "name": "offset", - "type": "integer" - }, - { - "default": 0, - "description": "Sort order: 0 relevance, 1 like count, 3 date posted", + "description": "Times of Israel section slug", "enum": [ - 0, - 1, - 3 + "israel-and-the-region", + "israel-inside", + "jewish-times", + "real-estate-israel", + "tech-israel" ], "in": "query", - "name": "sort_type", - "type": "integer" - }, - { - "default": 0, - "description": "Date-posted window in days (0 to 365; the app uses 0, 1, 7, 30, 90, 180)", - "in": "query", - "name": "publish_time", - "type": "integer" - }, - { - "default": "tab_search", - "description": "Search source forwarded as the app sends it", - "in": "query", - "name": "search_source", - "type": "string" - }, - { - "description": "search_id returned by a previous page of the same search", - "in": "query", - "name": "search_id", - "type": "string" + "name": "section", + "required": true, + "type": "string", + "x-example": "israel-and-the-region" } ], "produces": [ @@ -539916,23 +623485,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.searchVideosResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { - "description": "Invalid input", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Rate limit exceeded", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -539943,36 +623506,16 @@ "ApiKeyAuth": [] } ], - "summary": "Search TikTok videos on the mobile API (video tab)", + "summary": "Get Times of Israel section headlines", "tags": [ - "TikTok" + "Times of Israel" ] } }, - "/tiktok/mobile/translation/description": { + "/timesofisrael/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Translates one video's caption with the app's own translation route and returns the translated caption both as the app's raw markup (`translated_client_text.client_text_v2.markup_text`, where line breaks are `
` and hashtags are wrapped in `...`) and as plain text in `text`. `item_id` is required; `target_lang` defaults to `en` and accepts the app's language codes (`en`, `ja`, `pt-BR`, `zh-Hans`, ...). The route is signature-validated, so it needs device-backed request signing to be configured for the deployment and fails with an error instead of returning a stub when it is not.", - "operationId": "tiktok-mobile-translation-description", - "parameters": [ - { - "description": "Video id to translate", - "in": "query", - "name": "item_id", - "required": true, - "type": "string", - "x-example": "7650052642089225493" - }, - { - "description": "Target language code (default en)", - "in": "query", - "name": "target_lang", - "type": "string", - "x-example": "en" - } - ], + "description": "Returns the latest Times of Israel stories. It takes no parameters. Each item has a title, URL and publication time. The list includes both regular story pages and individual liveblog-update pages, so expect some entries to be short updates.", + "operationId": "timesofisrael-news", "produces": [ "application/json" ], @@ -539980,25 +623523,45 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.translationDescriptionResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "400": { - "description": "Invalid input", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } - }, - "500": { - "description": "Internal server error", + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Times of Israel top stories", + "tags": [ + "Times of Israel" + ] + } + }, + "/timesofisrael/sections": { + "get": { + "description": "Lists the five Times of Israel sections that the headlines endpoint accepts: `israel-and-the-region`, `israel-inside`, `jewish-times`, `real-estate-israel` and `tech-israel`. Each entry has a `slug`, a display `name` and a section `url`.", + "operationId": "timesofisrael-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -540007,33 +623570,27 @@ "ApiKeyAuth": [] } ], - "summary": "Translate one TikTok video caption", + "summary": "Get Times of Israel sections", "tags": [ - "TikTok" + "Times of Israel" ] } }, - "/tiktok/mobile/trending/categories": { + "/tmdb/collection/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns the discover-category feed unmodified: each `category_list` entry is `{aweme_list, category_type, challenge_info, click_track_url_list, desc, track_url_list}`, with `cursor` and `has_more` for paging.", - "operationId": "tiktok-mobile-trending-categories", + "description": "Returns a TMDB collection (a movie franchise grouping) by `id`, which can be the collection id or an id-slug. The response has the collection title, overview, `uri` and `source_url`, plus its member movies, each with id, title, overview, poster URL, release date and `uri`.", + "operationId": "tmdb-collection", "parameters": [ { - "default": 20, - "description": "Categories per page (max 50)", - "in": "query", - "name": "count", - "type": "integer" - }, - { - "default": 0, - "description": "Pagination cursor", - "in": "query", - "name": "cursor", - "type": "integer" + "description": "TMDB collection id or id-slug", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "263" } ], "produces": [ @@ -540043,23 +623600,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.categoryListResponseDoc" + "$ref": "#/definitions/tmdb.collectionResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -540070,35 +623633,19 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok trending categories", + "summary": "Get a TMDB collection", "tags": [ - "TikTok" + "TMDB" ] } }, - "/tiktok/mobile/trending/effects": { + "/tmdb/genres": { "get": { "consumes": [ "application/json" ], - "description": "Returns the effect/sticker discovery feed unmodified: `aweme_list` of full video objects, each additionally carrying `stickers` and `sticker_detail`, plus `feed_session_id`, `cursor` and `has_more`.", - "operationId": "tiktok-mobile-trending-effects", - "parameters": [ - { - "default": 20, - "description": "Videos per page (max 50)", - "in": "query", - "name": "count", - "type": "integer" - }, - { - "default": 0, - "description": "Pagination cursor", - "in": "query", - "name": "cursor", - "type": "integer" - } - ], + "description": "Returns every genre ID for TMDB movie and TV browse pages. Use movie values only with movie list filters and TV values only with TV list filters.", + "operationId": "tmdb-genres", "produces": [ "application/json" ], @@ -540106,23 +623653,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.stickerDiscoverResponseDoc" - } - }, - "400": { - "description": "Invalid input", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/tmdb.genresResponseDoc" } }, - "429": { - "description": "Rate limit exceeded", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -540133,39 +623674,120 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok trending effects", + "summary": "List TMDB browse genres", "tags": [ - "TikTok" + "TMDB" ] } }, - "/tiktok/mobile/user/followers": { + "/tmdb/movie/list": { "get": { "consumes": [ "application/json" ], - "description": "Lists one creator's followers: `followers` holds the full user objects, `total` is the account's follower total, and the envelope also carries `max_time`/`min_time`/`offset`, `next_page_token` and `myself_user_id`. `count` is the requested page size (20 and 30 were honoured). Measured caveat: the first pages came back with `has_more` false even though `total` reported 2,774,249, and the returned time/offset probes did not advance the window - treat those paging fields as observed values, not as a guaranteed paging contract. This endpoint needs device-backed request signing to be configured for the deployment; without it the request fails with an error instead of returning an empty page.", - "operationId": "tiktok-mobile-user-followers", + "description": "Returns a page of TMDB movies from the `category` chart (`popular` by default, or `top_rated`, `now_playing`, `upcoming`), optionally refined by `sort_by`, `with_genres`, `original_language`, release dates, rating, votes and runtime. `limit` defaults to 10 (max 20). Each movie has id, title, overview, poster, release date and `uri`; `has_next_page` signals more pages.", + "operationId": "tmdb-movie-list", "parameters": [ { - "description": "Creator user id", + "description": "Movie chart, default popular", + "enum": [ + "popular", + "top_rated", + "now_playing", + "upcoming" + ], "in": "query", - "name": "user_id", - "required": true, + "name": "category", + "type": "string" + }, + { + "description": "1-based page, default 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Sort order", + "enum": [ + "popularity.desc", + "popularity.asc", + "vote_average.desc", + "vote_average.asc", + "primary_release_date.desc", + "primary_release_date.asc", + "title.asc", + "title.desc" + ], + "in": "query", + "name": "sort_by", + "type": "string" + }, + { + "description": "Comma- or pipe-separated movie genre ids: 28,12,16,35,80,99,18,10751,14,36,27,10402,9648,10749,878,10770,53,10752,37", + "in": "query", + "name": "with_genres", "type": "string", - "x-example": "7141011492116005914" + "x-example": "18,878" }, { - "description": "Followers per page (sanity bound: 50; omitted = app default, not measured)", + "description": "Two-letter original-language code", "in": "query", - "name": "count", + "name": "original_language", + "type": "string", + "x-example": "en" + }, + { + "description": "Release date lower bound (YYYY-MM-DD)", + "in": "query", + "name": "date_from", + "type": "string" + }, + { + "description": "Release date upper bound (YYYY-MM-DD)", + "in": "query", + "name": "date_to", + "type": "string" + }, + { + "description": "Minimum rating, 0-10", + "in": "query", + "name": "min_rating", + "type": "number" + }, + { + "description": "Maximum rating, 0-10", + "in": "query", + "name": "max_rating", + "type": "number" + }, + { + "description": "Minimum vote count", + "in": "query", + "name": "min_votes", "type": "integer" }, { - "default": 0, - "description": "Page token: the max_time returned by the previous page (omitted at 0 = first page)", + "description": "Minimum runtime in minutes", "in": "query", - "name": "cursor", + "name": "min_runtime", + "type": "integer" + }, + { + "description": "Maximum runtime in minutes", + "in": "query", + "name": "max_runtime", + "type": "integer" + }, + { + "description": "Include adult titles", + "in": "query", + "name": "include_adult", + "type": "boolean" + }, + { + "description": "Max movies, default 10, max 20", + "in": "query", + "name": "limit", "type": "integer" } ], @@ -540176,23 +623798,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.userFollowersResponseDoc" + "$ref": "#/definitions/tmdb.movieListResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -540203,41 +623825,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve the followers of a TikTok creator", + "summary": "Get a TMDB movie chart", "tags": [ - "TikTok" + "TMDB" ] } }, - "/tiktok/mobile/user/following": { + "/tmdb/movie/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Lists the accounts one creator follows (`followings`, full 120-key user objects) with the mobile API's paging envelope: `total`, `has_more`/`rec_has_more`, `max_time`/`min_time` and `next_page_token`. Some profiles hide their following list; that answers upstream `status_code 3002060` (\"Profile user is hiding following list\"), which surfaces as a typed upstream error. Requires the device-backed signing service and returns a generic service-unavailable error when it is not configured.", - "operationId": "tiktok-mobile-user-following", + "description": "Returns a TMDB movie: overview, tagline, genres, countries, runtime, budget/revenue, top-billed cast, top crew (director/writer), and aggregate rating.", + "operationId": "tmdb-movie", "parameters": [ { - "description": "Creator's numeric user id", - "in": "query", - "name": "user_id", + "description": "TMDB movie id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "7343380121988285482" - }, - { - "default": 20, - "description": "Rows per page (sanity bound: 50)", - "in": "query", - "name": "count", - "type": "integer" - }, - { - "default": 0, - "description": "Page token: max_time returned by the previous page (omitted at 0)", - "in": "query", - "name": "cursor", - "type": "integer" + "x-example": "27205" } ], "produces": [ @@ -540247,23 +623855,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.userFollowingResponseDoc" + "$ref": "#/definitions/tmdb.movieResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -540274,40 +623888,30 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve the accounts a TikTok creator follows", + "summary": "Get a TMDB movie", "tags": [ - "TikTok" + "TMDB" ] } }, - "/tiktok/mobile/user/original-effects": { + "/tmdb/person/list": { "get": { "consumes": [ "application/json" ], - "description": "Lists the effects one creator published unmodified in `effect`: each row carries the `effect_id`, `name`, `desc`, `icon_url`, `effect_source`, attributions, linked anchors and moderation status, with cursor paging (`cursor`/`has_more`). `user_id` must be the numeric uid. A creator with no published effects returns an empty list. Requires the device-backed signing service; without it the endpoint returns a generic service-unavailable error.", - "operationId": "tiktok-mobile-user-original-effects", + "description": "Returns one page from TMDB's Popular People directory, including each person's id, name, known-for titles, profile image, and detail URL.", + "operationId": "tmdb-person-list", "parameters": [ { - "description": "Creator's numeric uid", - "in": "query", - "name": "user_id", - "required": true, - "type": "string", - "x-example": "107955" - }, - { - "default": 0, - "description": "Paging token from the previous response", + "description": "1-based page, default 1", "in": "query", - "name": "cursor", + "name": "page", "type": "integer" }, { - "default": 10, - "description": "Effects per page (max 50)", + "description": "Max people, default 10, max 20", "in": "query", - "name": "count", + "name": "limit", "type": "integer" } ], @@ -540318,23 +623922,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.userOriginalEffectsResponseDoc" + "$ref": "#/definitions/tmdb.personListResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -540345,40 +623949,32 @@ "ApiKeyAuth": [] } ], - "summary": "List a creator's original TikTok effects", + "summary": "List popular people on TMDB", "tags": [ - "TikTok" + "TMDB" ] } }, - "/tiktok/mobile/user/original-music": { + "/tmdb/person/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Lists the \"original sounds\" groups of one creator unmodified in `groups`: each group carries the `music` sound object, a `similar_music_list` and the `source_music_id`; the envelope also carries the creator's `honor_label`, a flat `music` list and cursor paging (`cursor`/`has_more`). `user_id` must be the numeric uid (a `sec_user_id` alone is rejected upstream with `status_code 5`). Requires the device-backed signing service; without it the endpoint returns a generic service-unavailable error.", - "operationId": "tiktok-mobile-user-original-music", + "description": "Returns a TMDB person by `id`: name, biography, birth date, photo URL and a filmography of movie and TV credits, most prominent first. `limit` caps the credits (default 10, max 20). Each credit has its `type` (`movie` or `tv`), id, title and `uri`. The biography may include a Wikipedia CC-BY-SA attribution note.", + "operationId": "tmdb-person", "parameters": [ { - "description": "Creator's numeric uid", - "in": "query", - "name": "user_id", + "description": "TMDB person id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "107955" - }, - { - "default": 0, - "description": "Paging token from the previous response", - "in": "query", - "name": "cursor", - "type": "integer" + "x-example": "31" }, { - "default": 10, - "description": "Groups per page (max 50)", + "description": "Max filmography credits, default 10, max 20", "in": "query", - "name": "count", + "name": "limit", "type": "integer" } ], @@ -540389,23 +623985,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.userOriginalMusicResponseDoc" + "$ref": "#/definitions/tmdb.personResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -540416,52 +624018,50 @@ "ApiKeyAuth": [] } ], - "summary": "List a creator's original TikTok sounds", + "summary": "Get a TMDB person", "tags": [ - "TikTok" + "TMDB" ] } }, - "/tiktok/mobile/user/posts": { + "/tmdb/search": { "get": { "consumes": [ "application/json" ], - "description": "Lists one creator's videos newest-first: `aweme_list` holds the full video objects (author, statistics, music, video renditions, anchors), and the page is positioned by `max_cursor`/`min_cursor` with `has_more`. Paging is by `max_cursor`: pass the `max_cursor` returned by the previous page back as `cursor`. `count` is the requested page size (the app default returned 9 items; 20 and 30 were honoured). This endpoint needs device-backed request signing to be configured for the deployment; without it the request fails with an error instead of returning an empty page.", - "operationId": "tiktok-mobile-user-posts", + "description": "Searches TMDB movies, TV shows, people, and collections. An unscoped query interleaves results across all four types rather than returning whichever type happens to rank first.", + "operationId": "tmdb-search", "parameters": [ { - "description": "Creator user id; one of user_id or sec_user_id is required (user_id wins if both are sent)", + "description": "Search query", "in": "query", - "name": "user_id", + "name": "query", + "required": true, "type": "string", - "x-example": "7141011492116005914" + "x-example": "Inception" }, { - "description": "Creator sec_user_id; one of user_id or sec_user_id is required", + "description": "Optional result type filter", + "enum": [ + "movie", + "tv", + "person", + "collection" + ], "in": "query", - "name": "sec_user_id", + "name": "type", "type": "string" }, { - "default": 9, - "description": "Videos per page (sanity bound: 50; omitted = app default, measured 9)", - "in": "query", - "name": "count", - "type": "integer" - }, - { - "default": 0, - "description": "Page token: the max_cursor returned by the previous page (omitted at 0 = first page)", + "description": "1-based results page, default 1", "in": "query", - "name": "cursor", + "name": "page", "type": "integer" }, { - "default": 0, - "description": "Sort type (0 = the app default; always sent, non-zero values are forwarded as given)", + "description": "Max results, default 10, max 20", "in": "query", - "name": "sort_type", + "name": "limit", "type": "integer" } ], @@ -540472,23 +624072,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.userPostsResponseDoc" + "$ref": "#/definitions/tmdb.searchResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -540499,33 +624099,121 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve the videos posted by a TikTok creator", + "summary": "Search TMDB", "tags": [ - "TikTok" + "TMDB" ] } }, - "/tiktok/mobile/user/profile": { + "/tmdb/tv/list": { "get": { "consumes": [ "application/json" ], - "description": "Returns one creator's profile page: `common` (the identity, account and relation blocks: user_profile_info, user_account_info, user_relation_info, user_statics_info with the follower/following/heart counters), plus the `header`, `nav_bar` and `profile_tab` layout components and the app's status/provenance fields. Address the creator by `user_id` or by `sec_user_id`; at least one is required and `user_id` wins when both are supplied. This endpoint needs device-backed request signing to be configured for the deployment; without it the request fails with an error instead of returning an empty page.", - "operationId": "tiktok-mobile-user-profile", + "description": "Returns a page of TMDB TV shows from the `category` chart (`popular` by default, or `top_rated`, `airing_today`, `on_the_air`), optionally refined by `sort_by`, `with_genres`, `original_language`, first-air-date bounds `date_from` and `date_to`, rating, votes and runtime. `limit` defaults to 10 (max 20). A filtered page with no matches returns an empty `shows` array.", + "operationId": "tmdb-tv-list", "parameters": [ { - "description": "Creator user id", + "description": "TV chart, default popular", + "enum": [ + "popular", + "top_rated", + "airing_today", + "on_the_air" + ], "in": "query", - "name": "user_id", + "name": "category", + "type": "string" + }, + { + "description": "1-based page, default 1", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Sort order", + "enum": [ + "popularity.desc", + "popularity.asc", + "vote_average.desc", + "vote_average.asc", + "first_air_date.desc", + "first_air_date.asc", + "name.asc", + "name.desc" + ], + "in": "query", + "name": "sort_by", + "type": "string" + }, + { + "description": "Comma- or pipe-separated TV genre ids: 10759,16,35,80,99,18,10751,10762,9648,10763,10764,10765,10766,10767,10768,37", + "in": "query", + "name": "with_genres", "type": "string", - "x-example": "7141011492116005914" + "x-example": "18,10765" }, { - "description": "Creator sec_user_id (alternate identifier; use instead of user_id)", + "description": "Two-letter original-language code", "in": "query", - "name": "sec_user_id", + "name": "original_language", "type": "string", - "x-example": "MS4wLjABAAAAexample" + "x-example": "en" + }, + { + "description": "First-air date lower bound (YYYY-MM-DD)", + "in": "query", + "name": "date_from", + "type": "string" + }, + { + "description": "First-air date upper bound (YYYY-MM-DD)", + "in": "query", + "name": "date_to", + "type": "string" + }, + { + "description": "Minimum rating, 0-10", + "in": "query", + "name": "min_rating", + "type": "number" + }, + { + "description": "Maximum rating, 0-10", + "in": "query", + "name": "max_rating", + "type": "number" + }, + { + "description": "Minimum vote count", + "in": "query", + "name": "min_votes", + "type": "integer" + }, + { + "description": "Minimum runtime in minutes", + "in": "query", + "name": "min_runtime", + "type": "integer" + }, + { + "description": "Maximum runtime in minutes", + "in": "query", + "name": "max_runtime", + "type": "integer" + }, + { + "description": "Include adult titles", + "in": "query", + "name": "include_adult", + "type": "boolean" + }, + { + "description": "Max shows, default 10, max 20", + "in": "query", + "name": "limit", + "type": "integer" } ], "produces": [ @@ -540535,23 +624223,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.userProfileResponseDoc" + "$ref": "#/definitions/tmdb.tvListResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -540562,26 +624250,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve a TikTok creator profile", + "summary": "Get a TMDB TV chart", "tags": [ - "TikTok" + "TMDB" ] } }, - "/tiktok/mobile/user/recommendations": { + "/tmdb/tv/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns the app's suggested creators for the Following page unmodified: `user_list` entries are `{user, aweme_list}` where `user` is the full creator projection (uid, sec_uid, nickname, signature, avatars, follower/following counts, verification and privacy flags) and `aweme_list` holds up to three recent videos, so this is a creator-discovery surface rather than a bare id list. The route has no paging fields and returns one page of 13-17 creators (fresh recommendations differ per call). `count` is accepted for parity but the gateway was measured to ignore it. The route is not signature-value gated, so unlike the profile/posts routes it does not need the device-backed signer.", - "operationId": "tiktok-mobile-user-recommendations", + "description": "Returns a TMDB TV show: overview, tagline, genres, countries, episode count, first/last air year, top-billed cast, top crew (creator), and aggregate rating.", + "operationId": "tmdb-tv", "parameters": [ { - "description": "Requested page size; forwarded when set, but the gateway was measured to ignore it", - "in": "query", - "name": "count", - "type": "integer", - "x-example": 10 + "description": "TMDB TV show id", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "1396" } ], "produces": [ @@ -540591,23 +624280,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.userRecommendationsResponseDoc" + "$ref": "#/definitions/tmdb.tvResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -540618,27 +624313,24 @@ "ApiKeyAuth": [] } ], - "summary": "Recommended creators on the mobile app's Following page", + "summary": "Get a TMDB TV show", "tags": [ - "TikTok" + "TMDB" ] } }, - "/tiktok/mobile/video/detail": { + "/tmz/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one video's full item: author, statistics (`play_count`, `digg_count`, `comment_count` and the rest), music, video renditions, anchors and the other item fields - the complete object, not a projection. `aweme_id` is required. This endpoint needs device-backed request signing to be configured for the deployment; without it the request fails with an error instead of returning an empty page.", - "operationId": "tiktok-mobile-video-detail", + "description": "Returns one TMZ article by `url`, a canonical HTTPS `tmz.com` link of the form `/////`. The response has the title, description, section, authors, publication and update times, image URL, body `paragraphs` and a `paywalled` flag.", + "operationId": "tmz-article", "parameters": [ { - "description": "Video id", + "description": "Canonical TMZ article URL", "in": "query", - "name": "aweme_id", + "name": "url", "required": true, "type": "string", - "x-example": "7329791719535283462" + "x-example": "https://www.tmz.com/2026/09/23/example-story/" } ], "produces": [ @@ -540648,23 +624340,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.videoDetailResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -540675,35 +624367,37 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve one TikTok video", + "summary": "Get TMZ article content", "tags": [ - "TikTok" + "TMZ" ] } }, - "/tiktok/mobile/video/subtitles": { + "/tmz/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one video's own captions translated into the requested language, as TikTok's caption/language (`cla`) service serves them. The response carries the track twice: `webvtt` is the upstream WebVTT text verbatim, and `cues` is the same track parsed into `{start_ms, end_ms, start, end, text}` records so a caller does not have to implement WebVTT. `video_id` is the aweme id returned by the feed, search, profile-posts and hashtag endpoints. Measured 2026-10-21 with the pure-Go (device-free) signer: the Korean-caption video 7696141388324293918 answered 11 English cues for `language=en`, and the same video answered Japanese, Chinese, Spanish, French, German, Korean, Portuguese, Russian, Arabic, Hindi, Indonesian, Thai, Vietnamese, Turkish and Italian tracks; a Portuguese-lyrics video answered an 18,494-character English track (240 cues). Track size is a snapshot rather than a contract (the upstream re-translates from a cache), so assert a non-empty track in the requested language, not a byte count. The route is not signature-gated, so it does not need the device-backed signer. A video with no captions answers 400 (upstream status 5); a nonexistent video answers 500 (upstream status 4).", - "operationId": "tiktok-mobile-video-subtitles", + "description": "Returns a named person's TMZ profile hub: their name and their most recent TMZ coverage, from a canonical person-hub URL or slug. TMZ credits virtually all of its editorial content to a single \"TMZ Staff\" byline with no individual journalist profile pages, so this endpoint surfaces TMZ's own public per-person coverage hub (used for both celebrities and other newsmakers TMZ covers) as the closest available \"profile + recent articles\" surface.", + "operationId": "tmz-author", "parameters": [ { - "description": "Numeric id of the video (aweme id)", + "description": "Person slug, e.g. dolly-parton", "in": "query", - "name": "video_id", - "required": true, + "name": "slug", "type": "string", - "x-example": "7696141388324293918" + "x-example": "dolly-parton" }, { - "description": "Target language code: ar, de, en, es, fr, hi, id, it, ja, ko, pt, ru, th, tr, vi, zh", + "description": "Canonical tmz.com/people/ URL, optionally with a ?page= query parameter; alternative to slug", "in": "query", - "name": "language", - "required": true, + "name": "url", "type": "string", - "x-example": "en" + "x-example": "https://www.tmz.com/people/dolly-parton/" + }, + { + "default": 1, + "description": "1-based page number; overrides any page number in url", + "in": "query", + "name": "page", + "type": "integer" } ], "produces": [ @@ -540713,23 +624407,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tiktokmobile.videoSubtitlesResponseDoc" + "$ref": "#/definitions/publicnews.tmzAuthorResponseDoc" } }, "400": { - "description": "Invalid input, or the video has no captions", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -540740,43 +624434,48 @@ "ApiKeyAuth": [] } ], - "summary": "Video captions translated into a target language", + "summary": "Get a TMZ person profile", "tags": [ - "TikTok" + "TMZ" ] } }, - "/tiktok/popular-trend/country-industry-meta": { + "/tmz/headlines": { "get": { - "consumes": [ - "application/json" + "description": "Returns the current headlines for one TMZ section. `section` is required and must be `news` or `sports`. Each item has its title, URL and, where available, a summary, author, publication time, image and `type`, and the response echoes the `section`.", + "operationId": "tmz-headlines", + "parameters": [ + { + "description": "TMZ section slug", + "enum": [ + "news", + "sports" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "news" + } ], - "description": "Lists the country and industry filter values used by the TikTok Creative Center popular-trend endpoints. Countries have an `id` such as `AR` and a name; industries have a numeric `id` and a name such as Apparel & Accessories. A maintained fallback list is returned if TikTok's own metadata is unavailable.", - "operationId": "tiktok-popular-trend-country-industry-meta", "produces": [ "application/json" ], "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/populartrend.countryIndustryMetaResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, - "429": { - "description": "Rate limit exceeded", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -540787,60 +624486,34 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok popular-trend country and industry metadata", + "summary": "Get TMZ section headlines", "tags": [ - "TikTok", - "TikTok Popular Trend" + "TMZ" ] } }, - "/tiktok/post/{id}": { + "/tmz/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns TikTok's detail record for one video by video id. `itemInfo.itemStruct` holds the video's description, the author's profile and the author's statistics (such as followers, following and hearts) along with the rest of TikTok's video object; `shareMeta` holds the share title and description.", - "operationId": "tiktok-post", - "parameters": [ - { - "description": "TikTok video id", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "7444278905264983342" - } - ], + "description": "Returns the current TMZ celebrity news top stories. It takes no parameters. Each item has its title, URL and, where available, an author such as TMZ Staff, a summary, publication time and image URL. Use the headlines endpoint with `sports` for sports stories.", + "operationId": "tmz-news", "produces": [ "application/json" ], "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, - "schema": { - "$ref": "#/definitions/tiktok.postResponseDoc" - } - }, - "400": { - "description": "Invalid input", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -540851,80 +624524,24 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok video details", + "summary": "Get TMZ top stories", "tags": [ - "TikTok" + "TMZ" ] } }, - "/tiktok/posts": { + "/tmz/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists posts from a TikTok profile identified by `secUid`. `sort_type` is `0` latest (default), `1` popular or `2` oldest. `cursor` defaults to 0. The response has `itemList`, `hasMore` and a `cursor` to pass back to fetch the next page.", - "operationId": "tiktok-profile-post", - "parameters": [ - { - "description": "TikTok secUid for the profile", - "in": "query", - "name": "secUid", - "required": true, - "type": "string", - "x-example": "MS4wLjABAAAAT4vq3vsh9X-Vb_WtV6tz4QWTbKjliTKCiK5DqnJNtQEA2RUveHb7UdnL7xgPK2HB" - }, - { - "default": 0, - "description": "Pagination cursor", - "in": "query", - "name": "cursor", - "type": "integer" - }, - { - "default": 0, - "description": "Sort mode: 0 latest, 1 popular, 2 oldest", - "enum": [ - 0, - 1, - 2 - ], - "in": "query", - "name": "sort_type", - "type": "integer" - } - ], + "description": "Returns the TMZ section inventory accepted by tmz-headlines: News (the home feed) and Sports. TMZ's public site has no broader stable editorial-category taxonomy beyond its own small main navigation -- see tmz-headlines for details.", + "operationId": "tmz-sections", "produces": [ "application/json" ], "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, - "schema": { - "$ref": "#/definitions/tiktok.profilePostResponseDoc" - } - }, - "400": { - "description": "Invalid input", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Rate limit exceeded", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal server error", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } } }, @@ -540933,27 +624550,24 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve posts from a TikTok profile", + "summary": "Get TMZ sections", "tags": [ - "TikTok" + "TMZ" ] } }, - "/tiktok/profile/{handler}": { + "/tokopedia/autocomplete": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a public TikTok profile by `handler`, the username without the leading `@`. The `user` object has the id, `uniqueId`, nickname, signature, verified and private flags, region, language, avatar, bio link and `secUid`; `stats` has follower, following, heart, video and friend counts. A missing, deleted or banned handle returns 404.", - "operationId": "tiktok-profile", + "description": "Returns current public Tokopedia search suggestions for a partial keyword. Suggestions include canonical product-search URLs and are not product-search results.", + "operationId": "tokopedia-autocomplete", "parameters": [ { - "description": "TikTok handle without the leading @", - "in": "path", - "name": "handler", + "description": "Partial product keyword, up to 100 characters", + "in": "query", + "name": "q", "required": true, "type": "string", - "x-example": "chatgpt" + "x-example": "iph" } ], "produces": [ @@ -540962,36 +624576,24 @@ "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/tiktok.profileResponseDoc" + "$ref": "#/definitions/tokopedia.autocompleteResponseDoc" } }, "400": { - "description": "Invalid input", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Profile not found", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -541002,41 +624604,24 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve a TikTok profile", + "summary": "Autocomplete Tokopedia product searches", "tags": [ - "TikTok" + "Tokopedia" ] } }, - "/tiktok/search": { + "/tokopedia/category": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches TikTok videos for `keyword`. `cursor` defaults to 0 and `count` defaults to 20, capped at 50. The response has the matching video items, a `cursor` and `has_more` for paging. An empty, blocked or malformed result from TikTok returns an upstream error.", - "operationId": "tiktok-search", + "description": "Returns public product cards from a canonical Tokopedia category path. `path` must begin with `/p/`; use the category page path, not a product or search URL.", + "operationId": "tokopedia-category", "parameters": [ { - "description": "Search keyword", + "description": "Canonical Tokopedia category path beginning with /p/", "in": "query", - "name": "keyword", + "name": "path", "required": true, "type": "string", - "x-example": "dance" - }, - { - "default": 0, - "description": "Pagination cursor", - "in": "query", - "name": "cursor", - "type": "integer" - }, - { - "default": 20, - "description": "Result count, clamped to 50", - "in": "query", - "name": "count", - "type": "integer" + "x-example": "/p/handphone-tablet/handphone" } ], "produces": [ @@ -541045,30 +624630,30 @@ "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/tiktok.searchResponseDoc" + "$ref": "#/definitions/tokopedia.categoryResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -541079,40 +624664,29 @@ "ApiKeyAuth": [] } ], - "summary": "Search TikTok videos", + "summary": "Browse a Tokopedia category", "tags": [ - "TikTok" + "Tokopedia" ] } }, - "/tiktok/search/hashtag": { + "/tokopedia/home": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches TikTok hashtags (challenges) for `keyword`. `cursor` defaults to 0 and `count` defaults to 20, capped at 50. The response has `challenge_list` with each hashtag's name and id, plus a `cursor` and `has_more` for paging. An empty, blocked or malformed result returns an upstream error.", - "operationId": "tiktok-search-hashtag", + "description": "Returns public product-card recommendations for a current Tokopedia home tab. Omit `tab_id` for the first available tab; discover other tabs through `/tokopedia/home/tabs`.", + "operationId": "tokopedia-home", "parameters": [ { - "description": "Search keyword", + "description": "Current ID from /tokopedia/home/tabs", "in": "query", - "name": "keyword", - "required": true, + "name": "tab_id", "type": "string", - "x-example": "chatgpt" - }, - { - "default": 0, - "description": "Pagination cursor", - "in": "query", - "name": "cursor", - "type": "integer" + "x-example": "1" }, { - "default": 20, - "description": "Result count, clamped to 50", + "default": 1, + "description": "Recommendation page from 1 through 5", "in": "query", - "name": "count", + "name": "page", "type": "integer" } ], @@ -541122,30 +624696,24 @@ "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/tiktok.searchHashtagResponseDoc" + "$ref": "#/definitions/tokopedia.homeResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -541156,66 +624724,34 @@ "ApiKeyAuth": [] } ], - "summary": "Search TikTok hashtags", + "summary": "Get Tokopedia home recommendations", "tags": [ - "TikTok" + "Tokopedia" ] } }, - "/tiktok/search/user": { + "/tokopedia/home/tabs": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches TikTok users for `keyword`, with `cursor` (default 0) for paging. The response has `user_list` with the matching accounts, plus a `cursor` and `has_more` to continue. Pass the returned `cursor` back to fetch the next page.", - "operationId": "tiktok-search-user", - "parameters": [ - { - "description": "Search keyword", - "in": "query", - "name": "keyword", - "required": true, - "type": "string", - "x-example": "chatgpt" - }, - { - "default": 0, - "description": "Pagination cursor", - "in": "query", - "name": "cursor", - "type": "integer" - } - ], + "description": "Lists the current Tokopedia home recommendation tabs, each with its `id`, `name` and an optional image URL, plus a `fetched_at` timestamp. It takes no parameters. Pass a returned `id` as `tab_id` to `/tokopedia/home` to load that tab.", + "operationId": "tokopedia-home-tabs", "produces": [ "application/json" ], "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, - "schema": { - "$ref": "#/definitions/tiktok.searchUserResponseDoc" - } - }, - "400": { - "description": "Invalid input", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/tokopedia.homeTabsResponseDoc" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -541226,53 +624762,32 @@ "ApiKeyAuth": [] } ], - "summary": "Search TikTok users", + "summary": "List Tokopedia home recommendation tabs", "tags": [ - "TikTok" + "Tokopedia" ] } }, - "/tiktok/top-ads/analysis": { + "/tokopedia/product": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the detail-page interactive time analysis chart and percentile for a Top Ads material. Metric values are `retain_ctr` (CTR), `retain_cvr` (CVR), `click_cnt` (Clicks), `convert_cnt` (Conversion), and `play_retain_cnt` (Remain).", - "operationId": "tiktok-top-ads-analysis", + "description": "Returns public product detail from a canonical Tokopedia shop domain and product key. This endpoint does not accept arbitrary URLs; numeric product IDs are returned when the product page exposes them but cannot be used as lookup input.", + "operationId": "tokopedia-product", "parameters": [ { - "description": "Top Ads material id", + "description": "Canonical Tokopedia shop domain", "in": "query", - "name": "material_id", + "name": "shop_domain", "required": true, "type": "string", - "x-example": "7130614705291427842" - }, - { - "default": "retain_ctr", - "description": "Interactive time analysis metric", - "enum": [ - "retain_ctr", - "retain_cvr", - "click_cnt", - "convert_cnt", - "play_retain_cnt" - ], - "in": "query", - "name": "metric", - "type": "string" + "x-example": "ismile-indonesia" }, { - "default": 7, - "description": "Percentile lookback period in days", - "enum": [ - 7, - 30, - 180 - ], + "description": "Canonical Tokopedia product key", "in": "query", - "name": "period_type", - "type": "integer" + "name": "product_key", + "required": true, + "type": "string", + "x-example": "apple-iphone-17-pro-max-garansi-resmi-256gb-512gb-1tb-2tb-1733012454966462347" } ], "produces": [ @@ -541281,30 +624796,30 @@ "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/populartrend.topAdsAnalysisResponseDoc" + "$ref": "#/definitions/tokopedia.productResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -541315,28 +624830,24 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok Top Ads interactive time analysis", + "summary": "Get a Tokopedia product's public detail", "tags": [ - "TikTok", - "TikTok Top Ads" + "Tokopedia" ] } }, - "/tiktok/top-ads/detail": { + "/tokopedia/product/review-filters": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns detail for one TikTok Creative Center Top Ads material. Use `material_id`; the upstream does not accept `id` or `materialId`.", - "operationId": "tiktok-top-ads-detail", + "description": "Returns which public review media, rating, and topic filters are available for a numeric product ID. It does not return review text, review media, or a review archive.", + "operationId": "tokopedia-product-review-filters", "parameters": [ { - "description": "Top Ads material id", + "description": "Numeric Tokopedia product ID", "in": "query", - "name": "material_id", + "name": "product_id", "required": true, "type": "string", - "x-example": "7631130810943897607" + "x-example": "102491859263" } ], "produces": [ @@ -541345,78 +624856,24 @@ "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/populartrend.topAdsDetailResponseDoc" + "$ref": "#/definitions/tokopedia.reviewFiltersResponseDoc" } }, "400": { - "description": "Invalid input", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Rate limit exceeded", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal server error", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Retrieve TikTok Top Ads detail", - "tags": [ - "TikTok", - "TikTok Top Ads" - ] - } - }, - "/tiktok/top-ads/filters": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns filter metadata for TikTok Creative Center Top Ads. Dynamic values come from TikTok; static UI enums are included for `order_by`, `duration`, `like`, and `ad_format`.", - "operationId": "tiktok-top-ads-filters", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, - "schema": { - "$ref": "#/definitions/populartrend.topAdsFiltersResponseDoc" - } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -541427,143 +624884,55 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok Top Ads filters", + "summary": "Get Tokopedia product review-filter metadata", "tags": [ - "TikTok", - "TikTok Top Ads" + "Tokopedia" ] } }, - "/tiktok/top-ads/list": { + "/tokopedia/search": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns high-performing auction ads from TikTok Creative Center. The service defaults `period` to 30, `page` to 1, `limit` to 20, and `order_by` to `for_you`. Use `/tiktok/top-ads/filters` for dynamic enum values and static enums for order, duration, likes, and ad format.", - "operationId": "tiktok-top-ads-list", + "description": "Returns public Tokopedia product cards for a keyword from Tokopedia's public product-search operation. `sort` accepts `3` (lowest price), `4` (highest price), `5` (most reviewed), `9` (newest), or `23` (most relevant). Repeat `filter` as `key:value` using values from `/tokopedia/search/filters`.", + "operationId": "tokopedia-search", "parameters": [ { - "default": 30, - "description": "Lookback period in days", - "enum": [ - 7, - 30, - 180 - ], + "description": "Product keyword", "in": "query", - "name": "period", - "type": "integer" + "name": "q", + "required": true, + "type": "string", + "x-example": "sepatu lari" }, { "default": 1, - "description": "Page number", + "description": "Search page from 1 through 5", "in": "query", - "minimum": 1, "name": "page", "type": "integer" }, { - "default": 20, - "description": "Maximum number of ads to return", - "in": "query", - "maximum": 100, - "name": "limit", - "type": "integer" - }, - { - "default": "for_you", - "description": "Sort order", - "enum": [ - "for_you", - "impression", - "ctr", - "play_2s_rate", - "play_6s_rate", - "cvr", - "like" - ], - "in": "query", - "name": "order_by", - "type": "string" - }, - { - "description": "Country code or comma-separated country codes from /tiktok/top-ads/filters", - "in": "query", - "name": "country_code", - "type": "string", - "x-example": "US" - }, - { - "description": "Brand or product keyword search", - "in": "query", - "name": "keyword", - "type": "string", - "x-example": "coffee" - }, - { - "description": "Industry filter id or comma-separated ids from /tiktok/top-ads/filters", - "in": "query", - "name": "industry", - "type": "string", - "x-example": "23118000000" - }, - { - "description": "Objective filter id or comma-separated ids from /tiktok/top-ads/filters", - "in": "query", - "name": "objective", - "type": "string", - "x-example": "3" - }, - { - "description": "Ad language id or comma-separated ids from /tiktok/top-ads/filters", - "in": "query", - "name": "ad_language", - "type": "string", - "x-example": "en" - }, - { - "description": "Pattern label id or comma-separated ids from /tiktok/top-ads/filters", - "in": "query", - "name": "pattern_label", - "type": "string", - "x-example": "10100100000" - }, - { - "description": "Video duration bucket", - "enum": [ - "time-2", - "time-3", - "time-4", - "time-5", - "time-6", - "time-7" - ], - "in": "query", - "name": "duration", - "type": "string" - }, - { - "description": "Like percentile bucket id or comma-separated ids", + "default": 23, + "description": "Sort: 3 lowest price, 4 highest price, 5 most reviewed, 9 newest, 23 most relevant", "enum": [ - "1", - "2", - "3", - "4", - "5" + 3, + 4, + 5, + 9, + 23 ], "in": "query", - "name": "like", - "type": "string" + "name": "sort", + "type": "integer" }, { - "description": "Ad format id", - "enum": [ - "1", - "2" - ], + "collectionFormat": "multi", + "description": "Repeat live key:value filter selections from /tokopedia/search/filters", "in": "query", - "name": "ad_format", - "type": "string" + "items": { + "type": "string" + }, + "name": "filter", + "type": "array" } ], "produces": [ @@ -541572,30 +624941,24 @@ "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/populartrend.topAdsListResponseDoc" + "$ref": "#/definitions/tokopedia.searchResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -541606,27 +624969,24 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok Top Ads", + "summary": "Search Tokopedia products", "tags": [ - "TikTok", - "TikTok Top Ads" + "Tokopedia" ] } }, - "/tiktok/top-ads/location-info": { + "/tokopedia/search/filters": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns TikTok's inferred initial country and industry targeting context for Top Ads. Use it when you need starting targeting values; use the locations, filters, and list endpoints to choose criteria and retrieve ads.", - "operationId": "tiktok-top-ads-location-info", + "description": "Returns the live filter tree and supported sort choices for a Tokopedia product search. The response includes categories when the current query exposes them, store type, delivery location, price, rating, offer, condition, recency, shipping, and stock options as applicable.", + "operationId": "tokopedia-search-filters", "parameters": [ { - "default": 1, - "description": "Optional upstream Creative Center module identifier; omitted or 0 defaults to 1, other nonzero IDs are passed through without local range validation", + "description": "Product keyword", "in": "query", - "name": "module", - "type": "integer" + "name": "q", + "required": true, + "type": "string", + "x-example": "sepatu" } ], "produces": [ @@ -541635,30 +624995,24 @@ "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/populartrend.topAdsLocationInfoResponseDoc" + "$ref": "#/definitions/tokopedia.searchFiltersResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -541669,44 +625023,50 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok Top Ads location info", + "summary": "Get Tokopedia search filters and sorts", "tags": [ - "TikTok", - "TikTok Top Ads" + "Tokopedia" ] } }, - "/tiktok/top-ads/locations": { + "/tomsguide/article": { "get": { - "consumes": [ - "application/json" + "description": "Returns one Tom's Guide article by `url`, a canonical HTTPS `tomsguide.com` link such as `tomsguide.com/
/`. The response has the title, description, section, authors, publication and update times, image URL, body `paragraphs` and a `paywalled` flag. On some product reviews `authors` may be empty.", + "operationId": "tomsguide-article", + "parameters": [ + { + "description": "Canonical Tom's Guide article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.tomsguide.com/audio/over-ear-headphones/noble-audio-fokus-artemis-review" + } ], - "description": "Lists the country filters offered by TikTok Creative Center Top Ads. Each country has an `id` such as `US`, a `value` (the country name), a `label` and a `has_conversion` flag. Takes no parameters.", - "operationId": "tiktok-top-ads-locations", "produces": [ "application/json" ], "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/populartrend.topAdsLocationsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, - "429": { - "description": "Rate limit exceeded", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -541717,43 +625077,36 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok Top Ads locations", + "summary": "Get Tom's Guide article content", "tags": [ - "TikTok", - "TikTok Top Ads" + "Tom's Guide" ] } }, - "/tiktok/top-ads/recommend": { + "/tomsguide/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists Top Ads materials that TikTok Creative Center recommends as related to the ad with `material_id`. `page` starts at 1; `limit` defaults to 20 and is capped at 100. Each ad has its title, brand, likes, comments, shares, CTR, objectives and video info. The list can be empty for a valid id.", - "operationId": "tiktok-top-ads-recommend", + "description": "Returns a Tom's Guide author's name, job title, biography, social links and one page of recent articles. Give exactly one of `slug` or `url`; `page` is 1-based, defaults to 1 and overrides any page in `url`. The response also has `page` and `has_next_page`.", + "operationId": "tomsguide-author", "parameters": [ { - "description": "Top Ads material id", + "description": "Author slug, e.g. tom-pritchard", "in": "query", - "name": "material_id", - "required": true, + "name": "slug", "type": "string", - "x-example": "7631130810943897607" + "x-example": "tom-pritchard" }, { - "default": 1, - "description": "Page number", + "description": "Canonical tomsguide.com/author/ URL, optionally with a /page/ segment; alternative to slug", "in": "query", - "minimum": 1, - "name": "page", - "type": "integer" + "name": "url", + "type": "string", + "x-example": "https://www.tomsguide.com/author/tom-pritchard" }, { - "default": 20, - "description": "Maximum number of ads to return", + "default": 1, + "description": "1-based page number; overrides any page number in url", "in": "query", - "maximum": 100, - "name": "limit", + "name": "page", "type": "integer" } ], @@ -541763,30 +625116,24 @@ "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/populartrend.topAdsRecommendResponseDoc" + "$ref": "#/definitions/publicnews.tomsguideAuthorResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -541797,44 +625144,106 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok Top Ads recommendations", + "summary": "Get a Tom's Guide author profile", "tags": [ - "TikTok", - "TikTok Top Ads" + "Tom's Guide" ] } }, - "/tiktok/top-ads/safety": { + "/tomsguide/headlines": { "get": { - "consumes": [ + "description": "Returns the current headlines for one Tom's Guide section. `section` is required and takes one of 22 slugs, such as `ai`, `audio`, `deals`, `how-to`, `news`, `reviews`, `tvs` or `phones`. Each item has its title, URL, summary, author, publication time and image.", + "operationId": "tomsguide-headlines", + "parameters": [ + { + "description": "Tom's Guide section slug", + "enum": [ + "ai", + "audio", + "best-picks", + "cameras-photography", + "computing", + "deals", + "entertainment", + "face-off", + "gaming", + "home", + "how-to", + "mattresses", + "news", + "reference", + "reviews", + "sales-events", + "tech", + "tech-events", + "tvs", + "vehicle-tech", + "wellness", + "phones" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "ai" + } + ], + "produces": [ "application/json" ], - "description": "Returns the Creative Center safety configuration flags for search: `top_ads_search`, `keyword_search`, `hashtag_search`, `creator_search`, `sound_search` and `cc_banner_key`. It carries feature flags only, not ad materials. Takes no parameters.", - "operationId": "tiktok-top-ads-safety", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Tom's Guide section headlines", + "tags": [ + "Tom's Guide" + ] + } + }, + "/tomsguide/news": { + "get": { + "description": "Returns the current top stories from Tom's Guide. It takes no parameters. Each item has its title, URL and, where available, a summary, author, publication time, image URL and `type`. Use the headlines endpoint to read one section.", + "operationId": "tomsguide-news", "produces": [ "application/json" ], "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/populartrend.topAdsSafetyResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -541845,36 +625254,50 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok Top Ads safety configuration", + "summary": "Get Tom's Guide top stories", "tags": [ - "TikTok", - "TikTok Top Ads" + "Tom's Guide" ] } }, - "/tiktok/top-ads/spotlight": { + "/tomsguide/sections": { "get": { - "consumes": [ + "description": "Lists the 22 top-level Tom's Guide content verticals that the headlines endpoint accepts, such as `ai`, `best-picks`, `how-to`, `mattresses`, `reviews`, `vehicle-tech` and `phones`. Each entry has a `slug`, a display `name` and a `url`.", + "operationId": "tomsguide-sections", + "produces": [ "application/json" ], - "description": "Lists the Top Ads Spotlight materials that TikTok Creative Center hand-picks. `page` starts at 1; `limit` defaults to 20 and is capped at 100. Each ad has its title, brand, likes, comments, shares, CTR, objectives and video info. `data.pagination` gives the page, size, total and `has_more`.", - "operationId": "tiktok-top-ads-spotlight", - "parameters": [ + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "default": 1, - "description": "Page number", - "in": "query", - "minimum": 1, - "name": "page", - "type": "integer" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get Tom's Guide sections", + "tags": [ + "Tom's Guide" + ] + } + }, + "/tomshardware/article": { + "get": { + "description": "Returns one Tom's Hardware article by its canonical `url`, either the current `tomshardware.com/
//` form or the legacy `/reviews/,.html` form. The response has the title, description, authors, section, published and updated times, lead image, the body `paragraphs` and a `paywalled` flag.", + "operationId": "tomshardware-article", + "parameters": [ { - "default": 20, - "description": "Maximum number of ads to return", + "description": "Canonical Tom's Hardware article URL", "in": "query", - "maximum": 100, - "name": "limit", - "type": "integer" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.tomshardware.com/monitors/gaming-monitors/sony-inzone-m10s-ii-27-inch-540-hz-qhd-oled-gaming-monitor-review" } ], "produces": [ @@ -541883,30 +625306,24 @@ "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/populartrend.topAdsSpotlightResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -541917,33 +625334,36 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok Top Ads Spotlight", + "summary": "Get Tom's Hardware article content", "tags": [ - "TikTok", - "TikTok Top Ads" + "Tom's Hardware" ] } }, - "/tiktok/top-ads/suggestions": { + "/tomshardware/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Top Ads search suggestions from TikTok Creative Center. `count` is the maximum number of suggestions (default 50) and `scenario` picks the suggestion scenario id (default 1). The `query` list can be empty for the default scenario.", - "operationId": "tiktok-top-ads-suggestions", + "description": "Returns a Tom's Hardware author profile with name, job title, biography, social links and one page of recent articles. Identify the author with `slug` (such as `christian-eberle`) or an author `url`; `page` (default 1) overrides any page in the URL. `has_next_page` tells you whether more articles exist.", + "operationId": "tomshardware-author", "parameters": [ { - "default": 50, - "description": "Maximum number of suggestions to return", + "description": "Author slug, e.g. christian-eberle", "in": "query", - "name": "count", - "type": "integer" + "name": "slug", + "type": "string", + "x-example": "christian-eberle" + }, + { + "description": "Canonical tomshardware.com/author/ URL, optionally with a /page/ segment; alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.tomshardware.com/author/christian-eberle" }, { "default": 1, - "description": "Suggestion scenario id", + "description": "1-based page number; overrides any page number in url", "in": "query", - "name": "scenario", + "name": "page", "type": "integer" } ], @@ -541953,30 +625373,24 @@ "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/populartrend.topAdsSuggestionsResponseDoc" + "$ref": "#/definitions/publicnews.tomshardwareAuthorResponseDoc" } }, "400": { - "description": "Invalid input", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -541987,38 +625401,104 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok Top Ads suggestions", + "summary": "Get a Tom's Hardware author profile", "tags": [ - "TikTok", - "TikTok Top Ads" + "Tom's Hardware" ] } }, - "/tiktok/trending": { + "/tomshardware/headlines": { "get": { - "consumes": [ + "description": "Lists the current headlines for one Tom's Hardware section. `section` is required and takes a slug such as `gpus`, `cpus`, `laptops`, `deals`, `reviews` or `news`; use `tomshardware-sections` for the full set. Each item has its title, URL, author, publication time and lead image, plus a summary when the section's listing provides one.", + "operationId": "tomshardware-headlines", + "parameters": [ + { + "description": "Tom's Hardware section slug", + "enum": [ + "3d-printing", + "best-picks", + "cpus", + "deals", + "desktops", + "features", + "gpus", + "laptops", + "maker-stem", + "monitors", + "networking", + "news", + "news-analysis", + "pc-components", + "peripherals", + "phones", + "reviews", + "service-providers", + "software", + "tech-industry" + ], + "in": "query", + "name": "section", + "required": true, + "type": "string", + "x-example": "3d-printing" + } + ], + "produces": [ "application/json" ], - "description": "Returns the current TikTok trending feed: `itemList` holds the videos, and `hasMore` and `cursor` describe paging. The response also has a `trendingTopics` field. Takes no parameters.", - "operationId": "tiktok-trending", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.headlinesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Tom's Hardware section headlines", + "tags": [ + "Tom's Hardware" + ] + } + }, + "/tomshardware/news": { + "get": { + "description": "Returns the latest Tom's Hardware top stories with no parameters. Each item has its title, URL, summary, author, publication time and lead image. Use the item URLs with `tomshardware-article` to read the body.", + "operationId": "tomshardware-news", "produces": [ "application/json" ], "responses": { "200": { "description": "OK", - "headers": { - "X-RateLimit-Per-Second-Remaining": { - "description": "Number of remaining requests per second", - "type": "string" - } - }, "schema": { - "$ref": "#/definitions/tiktok.trendingResponseDoc" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "500": { - "description": "Internal server error", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -542029,24 +625509,50 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve TikTok trending posts", + "summary": "Get Tom's Hardware top stories", "tags": [ - "TikTok" + "Tom's Hardware" ] } }, - "/time/article": { + "/tomshardware/sections": { "get": { - "description": "Returns one TIME article by `url`, which must be a canonical HTTPS dated `time.com` article link. The response has the title, description, section, authors, publication and update times, lead image URL, body `paragraphs` and a `paywalled` flag.", - "operationId": "time-article", + "description": "Lists the 20 Tom's Hardware top-level sections that `tomshardware-headlines` accepts, including `3d-printing`, `cpus`, `gpus`, `monitors`, `news` and `reviews`. Each section carries its `slug`, display `name` and page `url`. Takes no parameters.", + "operationId": "tomshardware-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Tom's Hardware sections", + "tags": [ + "Tom's Hardware" + ] + } + }, + "/torontostar/article": { + "get": { + "description": "Returns public Toronto Star article metadata and the body paragraphs shown to an anonymous reader from a canonical article URL. The Star meters its articles, so paywalled is true and paragraphs holds only the public teaser (typically the first two paragraphs) whenever the page hides the rest from non-subscribers.", + "operationId": "torontostar-article", "parameters": [ { - "description": "Canonical TIME article URL", + "description": "Canonical Toronto Star article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://time.com/article/2026/09/20/example-story/" + "x-example": "https://www.thestar.com/news/gta/court-set-to-hear-from-victims-families-in-case-of-international-poison-seller-kenneth-law/article_e760a06a-60da-49b6-ae00-fe14e1b5eb5b.html" } ], "produces": [ @@ -542083,24 +625589,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get TIME article content", + "summary": "Get Toronto Star article content", "tags": [ - "TIME" + "Toronto Star" ] } }, - "/time/author": { + "/torontostar/author": { "get": { - "description": "Returns a TIME author's profile by `url`, a canonical `time.com/author//` link: name, job title, bio, image URL, social account links and recent articles with title, URL, excerpt, section, section URL and ISO-8601 `published_at`. Not every author lists a social account.", - "operationId": "time-author", + "description": "Returns one Toronto Star author's public profile: name, job title, biography, location and topic focus, avatar, and their recent articles.", + "operationId": "torontostar-author", "parameters": [ { - "description": "Canonical TIME author URL", + "description": "Author profile slug (thestar.com/users/profile/); use this or url", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "omar-mosleh" + }, + { + "description": "Canonical thestar.com/users/profile/ URL; alternative to slug", "in": "query", "name": "url", - "required": true, "type": "string", - "x-example": "https://time.com/author/stephanie-zacharek/" + "x-example": "https://www.thestar.com/users/profile/omar-mosleh/" } ], "produces": [ @@ -542110,7 +625622,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.timeAuthorResponseDoc" + "$ref": "#/definitions/publicnews.torontoStarAuthorResponseDoc" } }, "400": { @@ -542137,30 +625649,89 @@ "ApiKeyAuth": [] } ], - "summary": "Get a TIME author profile", + "summary": "Get a Toronto Star author profile", "tags": [ - "TIME" + "Toronto Star" ] } }, - "/time/headlines": { + "/torontostar/headlines": { "get": { - "description": "Returns the current headlines for one TIME section. `section` is required and takes one of `news`, `politics`, `world`, `business`, `technology`, `health`, `entertainment`, `sports`, `ideas` or `climate`. Each item has its title and URL.", - "operationId": "time-headlines", + "description": "Returns fresh Toronto Star headlines from one public section page, with summary, publish time and image when the page shows them.", + "operationId": "torontostar-headlines", "parameters": [ { - "description": "TIME RSS section slug", + "description": "Toronto Star section path", "enum": [ "news", + "news/gta", + "news/toronto-election", + "news/police/project-south", + "news/car-thefts", + "news/canada", + "news/ontario", + "news/canada/british-columbia", + "news/canada/alberta", + "news/canada/quebec", + "news/canada/nova-scotia", + "news/investigations", + "news/world", + "news/world/united-states", + "news/world/americas", + "news/world/europe", + "news/world/asia", + "news/world/africa", + "news/world/australia", + "news/world/middle-east", + "news/world/royals", "politics", - "world", - "business", - "technology", - "health", - "entertainment", + "politics/federal", + "politics/provincial", + "politics/political-opinion", + "opinion", + "opinion/star-columnists", + "opinion/editorials", + "opinion/contributors", + "opinion/letters-to-the-editor", + "opinion/editorial-cartoons", + "life", + "life/relationships", + "life/food-and-drink", + "life/beauty-and-fashion", + "life/health-wellness", + "life/home-and-garden", + "life/autos", + "life/horoscopes", "sports", - "ideas", - "climate" + "sports/hockey", + "sports/hockey/pwhl", + "sports/basketball", + "sports/basketball/wnba", + "sports/baseball", + "sports/football", + "sports/football/cfl", + "sports/golf", + "sports/soccer", + "sports/tennis", + "sports/auto-racing", + "sports/cricket", + "sports/olympics-and-paralympics", + "real-estate", + "entertainment", + "entertainment/stage", + "entertainment/books", + "entertainment/music", + "entertainment/movies", + "entertainment/television", + "business", + "business/small-business", + "business/technology", + "business/mars", + "podcasts", + "podcasts/this-matters", + "podcasts/its-political", + "podcasts/billionaire-murders", + "podcasts/deep-left-field" ], "in": "query", "name": "section", @@ -542197,16 +625768,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get TIME section headlines", + "summary": "Get Toronto Star section headlines", "tags": [ - "TIME" + "Toronto Star" ] } }, - "/time/news": { + "/torontostar/news": { "get": { - "description": "Returns the current top stories from TIME. It takes no parameters. Each item has its title, URL and, where available, a summary, author, publication time, image URL and `type`. Use the headlines endpoint to read one section.", - "operationId": "time-news", + "description": "Returns the newest Toronto Star editorial stories (up to 50, newest first) from the public news sitemap. Press-release and sponsored pages are excluded.", + "operationId": "torontostar-news", "produces": [ "application/json" ], @@ -542217,12 +625788,6 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -542235,16 +625800,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get TIME top stories", + "summary": "Get Toronto Star top stories", "tags": [ - "TIME" + "Toronto Star" ] } }, - "/time/sections": { + "/torontostar/sections": { "get": { - "description": "Lists the 10 TIME section slugs that the headlines endpoint accepts: `news`, `politics`, `world`, `business`, `technology`, `health`, `entertainment`, `sports`, `ideas` and `climate`. Each entry has a `slug`, a display `name` and a `url`.", - "operationId": "time-sections", + "description": "Lists the 69 Toronto Star sections accepted by the headlines endpoint, taken from thestar.com's main navigation. Each has a `slug`, a display `name` and a `url`. Nested sections use slash paths such as `news/gta`, `sports/hockey/pwhl` and `business/technology`. Takes no parameters.", + "operationId": "torontostar-sections", "produces": [ "application/json" ], @@ -542261,24 +625826,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get TIME RSS sections", + "summary": "Get Toronto Star sections", "tags": [ - "TIME" + "Toronto Star" ] } }, - "/timeslive/article": { + "/townhall/article": { "get": { - "description": "Returns article metadata and body paragraphs for a canonical TimesLIVE editorial article URL. Some stories may have a publisher access gate; paywalled is set when the page's first-party access flags indicate restricted content.", - "operationId": "timeslive-article", + "description": "Returns public Townhall article metadata and body paragraphs from a canonical news or column URL. VIP stories are flagged with paywalled and return only the free lead paragraphs.", + "operationId": "townhall-article", "parameters": [ { - "description": "Canonical TimesLIVE article URL", + "description": "Canonical Townhall article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.timeslive.co.za/news/sci-tech/2026-09-29-insight-chinas-ai-agents-can-lie-and-scheme-just-like-their-us-rivals/" + "x-example": "https://townhall.com/news/amy-curtis/2026/09/24/second-man-arrested-in-mississippi-hanging-ap-ignores-race-n2683524" } ], "produces": [ @@ -542315,43 +625880,90 @@ "ApiKeyAuth": [] } ], - "summary": "Get TimesLIVE article content", + "summary": "Get Townhall article content", "tags": [ - "TimesLIVE" + "Townhall" ] } }, - "/timeslive/headlines": { + "/townhall/author": { "get": { - "description": "Returns current TimesLIVE stories for a section. Pass a slug from timeslive_sections; results are the first 15 items in the live section order.", - "operationId": "timeslive-headlines", + "description": "Returns a Townhall author profile by `slug` (such as `amy-curtis`) or by an author `url`; exactly one is required. The response has the name, photo, bio, X profile link and the first page of the author's archive, about 50 stories, each with its section label and a `vip` flag. Unknown authors return a not-found error.", + "operationId": "townhall-author", "parameters": [ { - "description": "TimesLIVE editorial section slug", + "description": "Author slug, e.g. amy-curtis", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "amy-curtis" + }, + { + "description": "Canonical townhall.com/author/ URL; alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://townhall.com/author/amy-curtis" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.townhallAuthorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Townhall author profile", + "tags": [ + "Townhall" + ] + } + }, + "/townhall/headlines": { + "get": { + "description": "Lists headlines for one Townhall section. `section` is required: `news` and `columnists` return the 20 most recent stories, while the topic sections (such as `congress`, `economy` or `iran`) return up to 30 stories mixing news and columns. Items carry title, URL, image and, when available, author, time and summary.", + "operationId": "townhall-headlines", + "parameters": [ + { + "description": "Townhall section slug", "enum": [ "news", - "news/south-africa", - "news/africa", - "news/world", - "news/business", - "news/sci-tech", - "politics", - "opinion", - "ideas", - "investigations", - "tshisa-live", - "lifestyle", - "lifestyle/fashion", - "lifestyle/food", - "lifestyle/travel", - "lifestyle/books", - "lifestyle/spotlight", - "sport", - "sport/soccer", - "sport/rugby", - "sport/cricket", - "sport/arena-sports-show", - "motoring" + "columnists", + "2026-elections", + "congress", + "donald-trump", + "economy", + "foreign-policy", + "illegal-immigration", + "iran", + "supreme-court" ], "in": "query", "name": "section", @@ -542388,16 +626000,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get TimesLIVE section headlines", + "summary": "Get Townhall section headlines", "tags": [ - "TimesLIVE" + "Townhall" ] } }, - "/timeslive/news": { + "/townhall/news": { "get": { - "description": "Returns current TimesLIVE stories, including section-specific headlines. Article access can vary by story.", - "operationId": "timeslive-news", + "description": "Returns the latest Townhall stories, news and opinion columns mixed, newest first, about 50 items. Each has its title, URL, short summary, publication time, author byline and lead image. Video pages are left out. Takes no parameters.", + "operationId": "townhall-news", "produces": [ "application/json" ], @@ -542408,12 +626020,6 @@ "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -542426,16 +626032,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get TimesLIVE top stories", + "summary": "Get Townhall top stories", "tags": [ - "TimesLIVE" + "Townhall" ] } }, - "/timeslive/sections": { + "/townhall/sections": { "get": { - "description": "Returns the complete public editorial navigation set accepted by the TimesLIVE headlines endpoint. External Sunday Times, partner, podcast, account, and link-only surfaces are excluded.", - "operationId": "timeslive-sections", + "description": "Returns the public Townhall section inventory: the site-wide news and column feeds plus the editorial topic hubs the site promotes.", + "operationId": "townhall-sections", "produces": [ "application/json" ], @@ -542452,24 +626058,73 @@ "ApiKeyAuth": [] } ], - "summary": "Get TimesLIVE sections", + "summary": "Get Townhall sections", "tags": [ - "TimesLIVE" + "Townhall" ] } }, - "/timesofindia/article": { + "/tripadvisor/autocomplete": { "get": { - "description": "Returns public Times of India article metadata (title, author(s), published/updated dates, section, lead image) and body paragraphs from a canonical article URL. A story gated behind a subscription returns a permission error instead of a truncated or fabricated body.", - "operationId": "timesofindia-article", + "consumes": [ + "application/json" + ], + "description": "Returns TripAdvisor typeahead suggestions for the required query `q`, optionally narrowed by `limit`, `locale`, `scope_geo_id` and a `type` hint. Each result has its id, title, type, URL, image, parent location and coordinates, and may carry nested search shortcuts. Results can be locations, hotels, restaurants or attractions.", + "operationId": "tripadvisor-autocomplete", "parameters": [ { - "description": "Canonical Times of India article URL", + "description": "Autocomplete query", "in": "query", - "name": "url", + "name": "q", "required": true, "type": "string", - "x-example": "https://timesofindia.indiatimes.com/business/india-business/example-story/articleshow/134456699.cms" + "x-example": "hong kong" + }, + { + "description": "Maximum results", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 5 + }, + { + "description": "TripAdvisor locale", + "in": "query", + "name": "locale", + "type": "string", + "x-example": "en-HK" + }, + { + "description": "Optional scoped geo id", + "in": "query", + "name": "scope_geo_id", + "type": "integer", + "x-example": 294217 + }, + { + "description": "Optional result type hint", + "in": "query", + "name": "type", + "type": "string", + "x-example": "attraction" + }, + { + "description": "Optional captured search session id", + "in": "query", + "name": "search_session_id", + "type": "string" + }, + { + "description": "Optional captured typeahead id", + "in": "query", + "name": "typeahead_id", + "type": "string" + }, + { + "description": "Optional captured route uid", + "in": "query", + "name": "route_uid", + "type": "string" } ], "produces": [ @@ -542479,7 +626134,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/tripadvisor.tripadvisorAutocompleteResponseDoc" } }, "400": { @@ -542488,20 +626143,52 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Autocomplete TripAdvisor locations and places", + "tags": [ + "TripAdvisor" + ] + } + }, + "/tripadvisor/enums": { + "get": { + "description": "Returns the values TripAdvisor place and listing filters accept: `locales`, `currencies`, `languages`, `listing_types`, `sorts`, `pricing_modes`, `hotel_classes`, `hotel_amenities`, `restaurant_types`, `restaurant_options`, attraction categories with their ids, and `filter_ids`. It also lists `unsupported_entity_types`. Takes no parameters.", + "operationId": "tripadvisor-enums", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/tripadvisor.tripadvisorEnumsResponseDoc" + } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -542512,24 +626199,112 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Times of India article content", + "summary": "Get TripAdvisor enum metadata", "tags": [ - "Times of India" + "TripAdvisor" ] } }, - "/timesofindia/author": { + "/tripadvisor/hotels": { "get": { - "description": "Returns a Times of India reporter's profile by `url`, a canonical `timesofindia.indiatimes.com/toireporter/author--.cms` link: name, job title, organization, location, email, biography, headshot and recent articles with title and URL. Fields the profile page does not publish may be empty.", - "operationId": "timesofindia-author", + "consumes": [ + "application/json" + ], + "description": "Searches TripAdvisor hotels in the area given by the required `geo_id`. Filter with `class`, `amenities`, `price_min`, `price_max`, `pricing_mode`, `travelers_choice` and `currency`; page with `offset` and `limit`; order with `sort`. Each hotel has its title, URL, image, rating, review count, star rating, rank, price, provider, location and a review snippet when TripAdvisor supplies them.", + "operationId": "tripadvisor-hotels", "parameters": [ { - "description": "Canonical Times of India author URL", + "description": "TripAdvisor geo id", "in": "query", - "name": "url", + "name": "geo_id", "required": true, + "type": "integer", + "x-example": 294217 + }, + { + "description": "Optional filter id such as class or ufe", + "in": "query", + "name": "filter_id", "type": "string", - "x-example": "https://timesofindia.indiatimes.com/toireporter/author-Smriti-Jain-479254229.cms" + "x-example": "ufe" + }, + { + "description": "Hotel class filter", + "in": "query", + "name": "class", + "type": "integer", + "x-example": 5 + }, + { + "collectionFormat": "multi", + "description": "Amenity filter ids", + "in": "query", + "items": { + "type": "integer" + }, + "name": "amenities", + "type": "array" + }, + { + "description": "Minimum price filter", + "in": "query", + "name": "price_min", + "type": "integer", + "x-example": 1000 + }, + { + "description": "Maximum price filter", + "in": "query", + "name": "price_max", + "type": "integer", + "x-example": 3205 + }, + { + "description": "Pricing mode", + "in": "query", + "name": "pricing_mode", + "type": "string", + "x-example": "ALL_IN_RATE" + }, + { + "description": "Filter Travelers' Choice properties", + "in": "query", + "name": "travelers_choice", + "type": "boolean" + }, + { + "description": "Filter Best of the Best properties", + "in": "query", + "name": "travelers_choice_botb", + "type": "boolean" + }, + { + "description": "Currency code", + "in": "query", + "name": "currency", + "type": "string", + "x-example": "HKD" + }, + { + "description": "Zero-based result offset", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + }, + { + "description": "Maximum results", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 3 + }, + { + "description": "Sort value", + "in": "query", + "name": "sort", + "type": "string", + "x-example": "BEST_VALUE" } ], "produces": [ @@ -542539,7 +626314,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.timesOfIndiaAuthorResponseDoc" + "$ref": "#/definitions/tripadvisor.tripadvisorHotelsResponseDoc" } }, "400": { @@ -542548,8 +626323,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -542566,81 +626341,31 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Times of India author profile", + "summary": "Search TripAdvisor hotels", "tags": [ - "Times of India" + "TripAdvisor" ] } }, - "/timesofindia/headlines": { + "/tripadvisor/place": { "get": { - "description": "Returns the current headlines for one Times of India section or city edition. `section` is required, for example `top-stories`, `india`, `world`, `business`, `cricket`, `mumbai`, `delhi` or `bangalore`. Items carry the title and URL, plus summary, author, publication time and image when the outlet provides them.", - "operationId": "timesofindia-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns a rich TripAdvisor place profile.", + "operationId": "tripadvisor-place", "parameters": [ { - "description": "Times of India section slug", - "enum": [ - "top-stories", - "india", - "world", - "nri", - "business", - "cricket", - "sports", - "science", - "environment", - "tech", - "education", - "entertainment", - "life-style", - "astrology", - "auto", - "mumbai", - "delhi", - "bangalore", - "hyderabad", - "chennai", - "ahmedabad", - "allahabad", - "bhubaneswar", - "coimbatore", - "gurgaon", - "guwahati", - "hubli", - "kanpur", - "kolkata", - "ludhiana", - "mangalore", - "mysore", - "noida", - "pune", - "goa", - "chandigarh", - "lucknow", - "patna", - "jaipur", - "nagpur", - "rajkot", - "ranchi", - "surat", - "vadodara", - "varanasi", - "thane", - "thiruvananthapuram", - "us", - "pakistan", - "south-asia", - "uk", - "europe", - "china", - "middle-east", - "rest-of-world" - ], + "description": "TripAdvisor place URL", "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "top-stories" + "name": "url", + "type": "string" + }, + { + "description": "TripAdvisor location id fallback", + "in": "query", + "name": "id", + "type": "string" } ], "produces": [ @@ -542650,7 +626375,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/tripadvisor.PlaceResponse" } }, "400": { @@ -542659,6 +626384,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -542671,16 +626408,107 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Times of India section headlines", + "summary": "Get TripAdvisor place", "tags": [ - "Times of India" + "TripAdvisor" ] } }, - "/timesofindia/news": { + "/tripadvisor/reviews": { "get": { - "description": "Returns the current Times of India top stories. It takes no parameters. Each item has its title, URL, summary, publication time with its UTC offset, author and image URL. Use the headlines endpoint for a section or city edition.", - "operationId": "timesofindia-news", + "consumes": [ + "application/json" + ], + "description": "Returns reviews for a TripAdvisor place identified by `id` (location id) or `url`. `limit` defaults to 20 (max 50); `page` is 1-based; `language`, `ratings` (1 to 5) and `sort_by` refine the list. Each review has author, title, text, dates, rating, language, helpful votes, photos and URL. A page beyond `total` returns an empty `reviews` array.", + "operationId": "tripadvisor-reviews", + "parameters": [ + { + "description": "TripAdvisor location id", + "in": "query", + "name": "id", + "type": "string", + "x-example": "113311" + }, + { + "description": "TripAdvisor place URL", + "in": "query", + "name": "url", + "type": "string" + }, + { + "description": "1-based review page", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Maximum reviews", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 3 + }, + { + "description": "Review language", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" + }, + { + "description": "Legacy sort type; DEFAULT selects newest first, ML_SORTED uses upstream order unless sort_by is DATE", + "enum": [ + "ML_SORTED", + "DEFAULT" + ], + "in": "query", + "name": "sort_type", + "type": "string", + "x-example": "DEFAULT" + }, + { + "description": "Legacy sort field; DATE selects newest first, FAVORABLE_RATING uses upstream order", + "enum": [ + "FAVORABLE_RATING", + "DATE" + ], + "in": "query", + "name": "sort_by", + "type": "string", + "x-example": "DATE" + }, + { + "collectionFormat": "multi", + "description": "Rating filters", + "in": "query", + "items": { + "enum": [ + 1, + 2, + 3, + 4, + 5 + ], + "type": "integer" + }, + "name": "ratings", + "type": "array" + }, + { + "description": "Enable upstream machine translation", + "in": "query", + "name": "do_machine_translation", + "type": "boolean" + }, + { + "description": "Maximum photos per review", + "in": "query", + "name": "photos_per_review_limit", + "type": "integer", + "x-example": 7 + } + ], "produces": [ "application/json" ], @@ -542688,7 +626516,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/tripadvisor.tripadvisorReviewsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -542709,16 +626549,170 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Times of India top stories", + "summary": "Get TripAdvisor reviews", "tags": [ - "Times of India" + "TripAdvisor" ] } }, - "/timesofindia/sections": { + "/tripadvisor/search": { "get": { - "description": "Lists the 55 Times of India sections that the headlines endpoint accepts, covering national and international topics such as `india`, `world`, `business` and `cricket`, and India city editions such as `mumbai`, `delhi` and `bangalore`. Each entry has a `slug`, a display `name` and the section feed `url`.", - "operationId": "timesofindia-sections", + "consumes": [ + "application/json" + ], + "description": "Searches TripAdvisor places in the area given by the required `geo_id`, for the required `type`: `hotel`, `restaurant`, `attraction`, `all`, or an attraction category type from `/tripadvisor/enums`. Hotel and restaurant filters, `offset`, `limit`, `locale`, `currency` and `sort` are optional. Each result has title, URL, rating, review count, rank, price and location. Unsupported entity-only types return a validation error.", + "operationId": "tripadvisor-search", + "parameters": [ + { + "description": "TripAdvisor geo id", + "in": "query", + "name": "geo_id", + "required": true, + "type": "integer", + "x-example": 294217 + }, + { + "description": "Listing type", + "in": "query", + "name": "type", + "required": true, + "type": "string", + "x-example": "restaurant" + }, + { + "description": "Optional hotel filter id", + "in": "query", + "name": "filter_id", + "type": "string", + "x-example": "ufe" + }, + { + "description": "Hotel class filter", + "in": "query", + "name": "class", + "type": "integer", + "x-example": 5 + }, + { + "collectionFormat": "multi", + "description": "Hotel amenity filter ids", + "in": "query", + "items": { + "type": "integer" + }, + "name": "amenities", + "type": "array" + }, + { + "description": "Minimum hotel price filter", + "in": "query", + "name": "price_min", + "type": "integer", + "x-example": 1000 + }, + { + "description": "Maximum hotel price filter", + "in": "query", + "name": "price_max", + "type": "integer", + "x-example": 3205 + }, + { + "description": "Hotel pricing mode", + "in": "query", + "name": "pricing_mode", + "type": "string", + "x-example": "ALL_IN_RATE" + }, + { + "description": "Filter Travelers' Choice hotels", + "in": "query", + "name": "travelers_choice", + "type": "boolean" + }, + { + "description": "Filter Best of the Best hotels", + "in": "query", + "name": "travelers_choice_botb", + "type": "boolean" + }, + { + "description": "Restaurant availability date", + "in": "query", + "name": "restaurant_date", + "type": "string", + "x-example": "2026-05-20" + }, + { + "description": "Restaurant availability time", + "in": "query", + "name": "restaurant_time", + "type": "string", + "x-example": "1900" + }, + { + "description": "Restaurant guest count", + "in": "query", + "name": "restaurant_guests", + "type": "integer", + "x-example": 3 + }, + { + "collectionFormat": "multi", + "description": "Restaurant establishment type ids", + "in": "query", + "items": { + "type": "integer" + }, + "name": "establishment_types", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Restaurant online option ids", + "in": "query", + "items": { + "type": "integer" + }, + "name": "online_options", + "type": "array" + }, + { + "description": "Zero-based result offset", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + }, + { + "description": "Maximum results", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 3 + }, + { + "description": "TripAdvisor locale", + "in": "query", + "name": "locale", + "type": "string", + "x-example": "en-HK" + }, + { + "description": "Currency code", + "in": "query", + "name": "currency", + "type": "string", + "x-example": "HKD" + }, + { + "description": "Sort value", + "in": "query", + "name": "sort", + "type": "string", + "x-example": "POPULARITY" + } + ], "produces": [ "application/json" ], @@ -542726,7 +626720,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/tripadvisor.tripadvisorSearchResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -542735,24 +626747,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get The Times of India sections", + "summary": "Search TripAdvisor places", "tags": [ - "Times of India" + "TripAdvisor" ] } }, - "/timesofisrael/article": { + "/tripcom/hotels/search": { "get": { - "description": "Returns public Times of Israel article metadata and body paragraphs from a canonical article URL. Both regular story pages and individual liveblog-update pages (/liveblog_entry//) are accepted.", - "operationId": "timesofisrael-article", + "consumes": [ + "application/json" + ], + "description": "Returns Trip.com's own top-hotels page for a city: hotel summaries (name, location, star rating, guest rating, review count, image, display price) for the hotels Trip.com features on that city's hotel-list page. Trip.com does not expose a free-text city search, so callers supply the exact city_slug and city_id pair from a known Trip.com hotel-list URL of the form https://www.trip.com/hotels/{city_slug}-hotels-list-{city_id}/.", + "operationId": "tripcom-hotels-search", "parameters": [ { - "description": "Canonical Times of Israel article URL", + "description": "Trip.com city slug, the text segment of a /hotels/{city_slug}-hotels-list-{city_id}/ URL", "in": "query", - "name": "url", + "name": "city_slug", "required": true, "type": "string", - "x-example": "https://www.timesofisrael.com/example-article-slug/" + "x-example": "bangkok" + }, + { + "description": "Trip.com numeric city id, the trailing number of a /hotels/{city_slug}-hotels-list-{city_id}/ URL", + "in": "query", + "name": "city_id", + "required": true, + "type": "string", + "x-example": "359" } ], "produces": [ @@ -542762,7 +626785,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/tripcom.searchResponseDoc" } }, "400": { @@ -542777,6 +626800,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -542789,24 +626818,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get Times of Israel article content", + "summary": "Search Trip.com hotels by city", "tags": [ - "Times of Israel" + "Trip.com" ] } }, - "/timesofisrael/author": { + "/tripcom/hotels/{id}": { "get": { - "description": "Returns a Times of Israel writer's byline metadata, biography, social links, and recent articles from a canonical writer profile URL.", - "operationId": "timesofisrael-author", + "consumes": [ + "application/json" + ], + "description": "Returns a Trip.com hotel-detail page: identity (name, local name, star rating, city/province/country), location (address, zone, latitude/longitude, nearby-transport description), guest rating (overall score plus cleanliness/amenities/location/service breakdown), images, description, check-in/check-out and child policy summaries, and popular facilities. Pricing is not included: Trip.com's detail page only returns per-night rates alongside check-in/check-out dates, which this endpoint does not take as input -- use the search endpoint for a city's current display prices.", + "operationId": "tripcom-hotel-detail", "parameters": [ { - "description": "Canonical Times of Israel author URL", - "in": "query", - "name": "url", + "description": "Trip.com hotel id, from a prior search call's hotel_id field", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.timesofisrael.com/writers/jane-doe/" + "x-example": "39371462" + }, + { + "description": "Optional slug segment for a nicer canonical source URL (e.g. the district/city slug from a search result's url). Not required and not validated by Trip.com.", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "bang-sao-thong-district" } ], "produces": [ @@ -542816,7 +626855,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.timesOfIsraelAuthorResponseDoc" + "$ref": "#/definitions/tripcom.DetailResponse" } }, "400": { @@ -542831,6 +626870,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -542843,33 +626888,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Times of Israel author profile", + "summary": "Get Trip.com hotel detail", "tags": [ - "Times of Israel" + "Trip.com" ] } }, - "/timesofisrael/headlines": { + "/trustmrr/acquire": { "get": { - "description": "Returns the current headlines for one Times of Israel section. `section` is required and takes one of `israel-and-the-region`, `israel-inside`, `jewish-times`, `real-estate-israel` or `tech-israel`. Each item has its title and URL.", - "operationId": "timesofisrael-headlines", - "parameters": [ - { - "description": "Times of Israel section slug", - "enum": [ - "israel-and-the-region", - "israel-inside", - "jewish-times", - "real-estate-israel", - "tech-israel" - ], - "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "israel-and-the-region" - } + "consumes": [ + "application/json" ], + "description": "Returns the for-sale startups rendered on the public TrustMRR /acquire marketplace page, with deal metrics (asking price, revenue, multiple, growth). Verified revenue figures come from supported payment providers.", + "operationId": "trustmrr-acquire", "produces": [ "application/json" ], @@ -542877,17 +626908,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/trustmrr.acquireResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "TrustMRR upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -542898,16 +626935,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Times of Israel section headlines", + "summary": "Get TrustMRR acquisition listings", "tags": [ - "Times of Israel" + "TrustMRR" ] } }, - "/timesofisrael/news": { + "/trustmrr/categories": { "get": { - "description": "Returns the latest Times of Israel stories. It takes no parameters. Each item has a title, URL and publication time. The list includes both regular story pages and individual liveblog-update pages, so expect some entries to be short updates.", - "operationId": "timesofisrael-news", + "consumes": [ + "application/json" + ], + "description": "Lists the TrustMRR startup categories, with the total `count`. Each category has its `slug`, `label`, short label, icon name, description, keywords and TrustMRR URL. Pass a category `slug` to `/trustmrr/category/{slug}` to list the startups in it.", + "operationId": "trustmrr-categories", "produces": [ "application/json" ], @@ -542915,17 +626955,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/trustmrr.categoriesResponseDoc" } }, "429": { - "description": "Too Many Requests", + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "TrustMRR upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -542936,16 +626982,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get Times of Israel top stories", + "summary": "Get TrustMRR categories", "tags": [ - "Times of Israel" + "TrustMRR" ] } }, - "/timesofisrael/sections": { + "/trustmrr/category/{slug}": { "get": { - "description": "Lists the five Times of Israel sections that the headlines endpoint accepts: `israel-and-the-region`, `israel-inside`, `jewish-times`, `real-estate-israel` and `tech-israel`. Each entry has a `slug`, a display `name` and a section `url`.", - "operationId": "timesofisrael-sections", + "consumes": [ + "application/json" + ], + "description": "Returns one TrustMRR category by `slug` (lowercase letters, digits and hyphens, for example `saas`) with the startups listed in it. Each startup has its name, slug, URL, description, current MRR, total revenue and last-30-days revenue, all in USD, plus the `on_sale` flag for startups listed for sale. Valid slugs come from `/trustmrr/categories`.", + "operationId": "trustmrr-category", + "parameters": [ + { + "description": "TrustMRR category slug", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "saas" + } + ], "produces": [ "application/json" ], @@ -542953,7 +627012,37 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/trustmrr.categoryResponseDoc" + } + }, + "400": { + "description": "Missing or invalid path parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Category not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "TrustMRR upstream request failed", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -542962,27 +627051,33 @@ "ApiKeyAuth": [] } ], - "summary": "Get Times of Israel sections", + "summary": "Get TrustMRR category detail", "tags": [ - "Times of Israel" + "TrustMRR" ] } }, - "/tmdb/collection/{id}": { + "/trustmrr/leaderboard": { "get": { "consumes": [ "application/json" ], - "description": "Returns a TMDB collection (a movie franchise grouping) by `id`, which can be the collection id or an id-slug. The response has the collection title, overview, `uri` and `source_url`, plus its member movies, each with id, title, overview, poster URL, release date and `uri`.", - "operationId": "tmdb-collection", + "description": "Returns the top 100 startups ranked by the selected metric from the public TrustMRR leaderboard. Revenue and MRR figures are verified through supported payment providers.", + "operationId": "trustmrr-leaderboard", "parameters": [ { - "description": "TMDB collection id or id-slug", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "263" + "description": "Leaderboard metric to rank by (default mrr)", + "enum": [ + "mrr", + "last_30_days_revenue", + "all_time_revenue", + "growth", + "traffic", + "revenue_per_visitor" + ], + "in": "query", + "name": "metric", + "type": "string" } ], "produces": [ @@ -542992,29 +627087,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tmdb.collectionResponseDoc" + "$ref": "#/definitions/trustmrr.leaderboardResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid metric parameter", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "TrustMRR upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -543025,19 +627120,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a TMDB collection", + "summary": "Get TrustMRR revenue leaderboard", "tags": [ - "TMDB" + "TrustMRR" ] } }, - "/tmdb/genres": { + "/trustmrr/marketplace": { "get": { "consumes": [ "application/json" ], - "description": "Returns every genre ID for TMDB movie and TV browse pages. Use movie values only with movie list filters and TV values only with TV list filters.", - "operationId": "tmdb-genres", + "description": "Returns the public TrustMRR marketplace snapshot: the 25 most recently listed startups for sale and the current 25 best deals ranked by TrustMRR's recency-aware deal score. Revenue figures are verified through supported payment providers.", + "operationId": "trustmrr-marketplace", "produces": [ "application/json" ], @@ -543045,17 +627140,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tmdb.genresResponseDoc" + "$ref": "#/definitions/trustmrr.marketplaceResponseDoc" + } + }, + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "TrustMRR upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -543066,121 +627167,181 @@ "ApiKeyAuth": [] } ], - "summary": "List TMDB browse genres", + "summary": "Get TrustMRR marketplace snapshot", "tags": [ - "TMDB" + "TrustMRR" ] } }, - "/tmdb/movie/list": { + "/trustmrr/startup/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of TMDB movies from the `category` chart (`popular` by default, or `top_rated`, `now_playing`, `upcoming`), optionally refined by `sort_by`, `with_genres`, `original_language`, release dates, rating, votes and runtime. `limit` defaults to 10 (max 20). Each movie has id, title, overview, poster, release date and `uri`; `has_next_page` signals more pages.", - "operationId": "tmdb-movie-list", + "description": "Returns the full verified profile for a single TrustMRR startup by slug: revenue and MRR, growth, asking price and marketplace status, tech stack, marketing channels, and TrustMRR's AI-generated business summary.", + "operationId": "trustmrr-startup", "parameters": [ { - "description": "Movie chart, default popular", - "enum": [ - "popular", - "top_rated", - "now_playing", - "upcoming" - ], - "in": "query", - "name": "category", - "type": "string" + "description": "TrustMRR startup slug", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "trackai" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/trustmrr.startupResponseDoc" + } }, - { - "description": "1-based page, default 1", - "in": "query", - "name": "page", - "type": "integer" + "400": { + "description": "Missing or invalid path parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Sort order", - "enum": [ - "popularity.desc", - "popularity.asc", - "vote_average.desc", - "vote_average.asc", - "primary_release_date.desc", - "primary_release_date.asc", - "title.asc", - "title.desc" - ], - "in": "query", - "name": "sort_by", - "type": "string" + "404": { + "description": "Startup not found", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Comma- or pipe-separated movie genre ids: 28,12,16,35,80,99,18,10751,14,36,27,10402,9648,10749,878,10770,53,10752,37", - "in": "query", - "name": "with_genres", - "type": "string", - "x-example": "18,878" + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Two-letter original-language code", - "in": "query", - "name": "original_language", - "type": "string", - "x-example": "en" + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "TrustMRR upstream request failed", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Release date lower bound (YYYY-MM-DD)", - "in": "query", - "name": "date_from", - "type": "string" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get TrustMRR startup detail", + "tags": [ + "TrustMRR" + ] + } + }, + "/trustmrr/startups": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a paginated list of every startup in the TrustMRR directory. Each entry is a slug you can pass to /trustmrr/startup/{slug} for the full verified profile — together these two endpoints let you enumerate the entire directory.", + "operationId": "trustmrr-startups", + "parameters": [ { - "description": "Release date upper bound (YYYY-MM-DD)", + "description": "1-based page number (default 1)", "in": "query", - "name": "date_to", - "type": "string" + "name": "page", + "type": "integer" }, { - "description": "Minimum rating, 0-10", + "description": "Items per page (default 100, max 1000)", "in": "query", - "name": "min_rating", - "type": "number" + "name": "page_size", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/trustmrr.startupsResponseDoc" + } }, - { - "description": "Maximum rating, 0-10", - "in": "query", - "name": "max_rating", - "type": "number" + "429": { + "description": "Rate limit exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - { - "description": "Minimum vote count", - "in": "query", - "name": "min_votes", - "type": "integer" + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "TrustMRR upstream request failed", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Minimum runtime in minutes", + "ApiKeyAuth": [] + } + ], + "summary": "List all TrustMRR startups", + "tags": [ + "TrustMRR" + ] + } + }, + "/trustpilot/business-units/search": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches Trustpilot for businesses matching a query, for a country (default `US`), with `page` and `page_size` (default 20, max 100). Each result has the display name, identifying name, TrustScore, star rating, review count, categories, website, email, phone, address and Trustpilot URL; `total_hits` gives the full match count.", + "operationId": "trustpilot-business-search", + "parameters": [ + { + "description": "Search query", "in": "query", - "name": "min_runtime", - "type": "integer" + "name": "q", + "required": true, + "type": "string", + "x-example": "openai" }, { - "description": "Maximum runtime in minutes", + "description": "Two-letter country code; defaults to US", "in": "query", - "name": "max_runtime", - "type": "integer" + "name": "country", + "type": "string", + "x-example": "US" }, { - "description": "Include adult titles", + "description": "1-based page number; defaults to 1", "in": "query", - "name": "include_adult", - "type": "boolean" + "minimum": 1, + "name": "page", + "type": "integer", + "x-example": 1 }, { - "description": "Max movies, default 10, max 20", + "description": "Results per page; defaults to 20, maximum 100", "in": "query", - "name": "limit", - "type": "integer" + "maximum": 100, + "minimum": 1, + "name": "page_size", + "type": "integer", + "x-example": 5 } ], "produces": [ @@ -543190,23 +627351,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tmdb.movieListResponseDoc" + "$ref": "#/definitions/trustpilot.businessSearchResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid query parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "No results found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Trustpilot upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -543217,27 +627390,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a TMDB movie chart", + "summary": "Search Trustpilot business units", "tags": [ - "TMDB" + "Trustpilot" ] } }, - "/tmdb/movie/{id}": { + "/trustpilot/business/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a TMDB movie: overview, tagline, genres, countries, runtime, budget/revenue, top-billed cast, top crew (director/writer), and aggregate rating.", - "operationId": "tmdb-movie", + "description": "Returns a Trustpilot business profile by `slug`, such as `openai.com`. The profile has the name, `trust_score`, `review_count`, rating histogram, review summary and topics, categories, claimed status, website URL, reply metrics, company activity and verification flags, and an about section with description and contact details.", + "operationId": "trustpilot-business", "parameters": [ { - "description": "TMDB movie id", + "description": "Trustpilot business slug", "in": "path", - "name": "id", + "name": "slug", "required": true, "type": "string", - "x-example": "27205" + "x-example": "openai.com" } ], "produces": [ @@ -543247,29 +627420,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tmdb.movieResponseDoc" + "$ref": "#/definitions/trustpilot.businessProfileResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid path parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "Business not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Trustpilot upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -543280,31 +627459,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a TMDB movie", + "summary": "Get Trustpilot business profile", "tags": [ - "TMDB" + "Trustpilot" ] } }, - "/tmdb/person/list": { + "/trustpilot/business/{slug}/related": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page from TMDB's Popular People directory, including each person's id, name, known-for titles, profile image, and detail URL.", - "operationId": "tmdb-person-list", + "description": "Returns the businesses Trustpilot shows as related to a given business slug such as `openai.com`. Each related business has its display name, identifying name, logo, star rating, TrustScore, review count and Trustpilot URL; the response also includes a summary of the business you asked about.", + "operationId": "trustpilot-business-related", "parameters": [ { - "description": "1-based page, default 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Max people, default 10, max 20", - "in": "query", - "name": "limit", - "type": "integer" + "description": "Trustpilot business slug", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "openai.com" } ], "produces": [ @@ -543314,23 +627489,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tmdb.personListResponseDoc" + "$ref": "#/definitions/trustpilot.businessRelatedResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid path parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Business not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Trustpilot upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -543341,33 +627528,84 @@ "ApiKeyAuth": [] } ], - "summary": "List popular people on TMDB", + "summary": "Get Trustpilot related businesses", "tags": [ - "TMDB" + "Trustpilot" ] } }, - "/tmdb/person/{id}": { + "/trustpilot/business/{slug}/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns a TMDB person by `id`: name, biography, birth date, photo URL and a filmography of movie and TV credits, most prominent first. `limit` caps the credits (default 10, max 20). Each credit has its `type` (`movie` or `tv`), id, title and `uri`. The biography may include a Wikipedia CC-BY-SA attribution note.", - "operationId": "tmdb-person", + "description": "Returns one page of Trustpilot reviews for a business slug such as `openai.com`, with filters for star rating, verified reviews, reviews with a company reply, language and text search. Each review has its rating, title, body, author name, country and review count, dates, and any company reply; the response also carries the business summary and pagination totals.", + "operationId": "trustpilot-business-reviews", "parameters": [ { - "description": "TMDB person id", + "description": "Trustpilot business slug", "in": "path", - "name": "id", + "name": "slug", "required": true, "type": "string", - "x-example": "31" + "x-example": "openai.com" + }, + { + "description": "1-based page number; defaults to 1", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Filter by star rating from 1 to 5", + "in": "query", + "maximum": 5, + "minimum": 1, + "name": "stars", + "type": "integer", + "x-example": 1 + }, + { + "description": "Filter to verified reviews", + "in": "query", + "name": "verified", + "type": "boolean" + }, + { + "description": "Filter to reviews with business replies", + "in": "query", + "name": "replied", + "type": "boolean" + }, + { + "description": "Review language code used by Trustpilot", + "in": "query", + "name": "language", + "type": "string", + "x-example": "en" + }, + { + "description": "Text search within reviews", + "in": "query", + "name": "q", + "type": "string", + "x-example": "refund" + }, + { + "description": "Date range start in YYYY-MM-DD; currently rejected by upstream", + "in": "query", + "name": "date_from", + "type": "string", + "x-example": "2026-03-01" }, { - "description": "Max filmography credits, default 10, max 20", + "description": "Date range end in YYYY-MM-DD; currently rejected by upstream", "in": "query", - "name": "limit", - "type": "integer" + "name": "date_to", + "type": "string", + "x-example": "2026-03-30" } ], "produces": [ @@ -543377,29 +627615,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tmdb.personResponseDoc" + "$ref": "#/definitions/trustpilot.businessReviewsResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid path/query parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "Business not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Trustpilot upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -543410,53 +627654,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a TMDB person", + "summary": "Get Trustpilot business reviews", "tags": [ - "TMDB" + "Trustpilot" ] } }, - "/tmdb/search": { + "/trustpilot/categories": { "get": { "consumes": [ "application/json" ], - "description": "Searches TMDB movies, TV shows, people, and collections. An unscoped query interleaves results across all four types rather than returning whichever type happens to rank first.", - "operationId": "tmdb-search", - "parameters": [ - { - "description": "Search query", - "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "Inception" - }, - { - "description": "Optional result type filter", - "enum": [ - "movie", - "tv", - "person", - "collection" - ], - "in": "query", - "name": "type", - "type": "string" - }, - { - "description": "1-based results page, default 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Max results, default 10, max 20", - "in": "query", - "name": "limit", - "type": "integer" - } - ], + "description": "Lists the Trustpilot category index grouped by top-level category. Each group has its name, slug and URL, and an `items` list of subcategories with their own name, slug and URL. It takes no parameters.", + "operationId": "trustpilot-categories", "produces": [ "application/json" ], @@ -543464,23 +627674,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tmdb.searchResponseDoc" + "$ref": "#/definitions/trustpilot.categoriesResponseDoc" } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Categories not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Trustpilot upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -543491,121 +627707,50 @@ "ApiKeyAuth": [] } ], - "summary": "Search TMDB", + "summary": "Get Trustpilot categories", "tags": [ - "TMDB" + "Trustpilot" ] } }, - "/tmdb/tv/list": { + "/trustpilot/categories/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of TMDB TV shows from the `category` chart (`popular` by default, or `top_rated`, `airing_today`, `on_the_air`), optionally refined by `sort_by`, `with_genres`, `original_language`, first-air-date bounds `date_from` and `date_to`, rating, votes and runtime. `limit` defaults to 10 (max 20). A filtered page with no matches returns an empty `shows` array.", - "operationId": "tmdb-tv-list", + "description": "Searches Trustpilot categories for the required `q`. `size` sets the maximum number of categories (default 20, from 1 to 100), `country` is a two-letter code (default US) and `locale` uses `ll-CC` format (default `en-US`). Each category has its `category_id`, `display_name` and `top_level_category_id`.", + "operationId": "trustpilot-category-search", "parameters": [ { - "description": "TV chart, default popular", - "enum": [ - "popular", - "top_rated", - "airing_today", - "on_the_air" - ], - "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "1-based page, default 1", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Sort order", - "enum": [ - "popularity.desc", - "popularity.asc", - "vote_average.desc", - "vote_average.asc", - "first_air_date.desc", - "first_air_date.asc", - "name.asc", - "name.desc" - ], - "in": "query", - "name": "sort_by", - "type": "string" - }, - { - "description": "Comma- or pipe-separated TV genre ids: 10759,16,35,80,99,18,10751,10762,9648,10763,10764,10765,10766,10767,10768,37", + "description": "Search query", "in": "query", - "name": "with_genres", + "name": "q", + "required": true, "type": "string", - "x-example": "18,10765" + "x-example": "openai" }, { - "description": "Two-letter original-language code", + "description": "Two-letter country code; defaults to US", "in": "query", - "name": "original_language", + "name": "country", "type": "string", - "x-example": "en" - }, - { - "description": "First-air date lower bound (YYYY-MM-DD)", - "in": "query", - "name": "date_from", - "type": "string" - }, - { - "description": "First-air date upper bound (YYYY-MM-DD)", - "in": "query", - "name": "date_to", - "type": "string" - }, - { - "description": "Minimum rating, 0-10", - "in": "query", - "name": "min_rating", - "type": "number" - }, - { - "description": "Maximum rating, 0-10", - "in": "query", - "name": "max_rating", - "type": "number" - }, - { - "description": "Minimum vote count", - "in": "query", - "name": "min_votes", - "type": "integer" - }, - { - "description": "Minimum runtime in minutes", - "in": "query", - "name": "min_runtime", - "type": "integer" - }, - { - "description": "Maximum runtime in minutes", - "in": "query", - "name": "max_runtime", - "type": "integer" + "x-example": "US" }, { - "description": "Include adult titles", + "description": "Locale in ll-CC format; defaults to en-US", "in": "query", - "name": "include_adult", - "type": "boolean" + "name": "locale", + "type": "string", + "x-example": "en-US" }, { - "description": "Max shows, default 10, max 20", + "description": "Maximum number of categories; defaults to 20", "in": "query", - "name": "limit", - "type": "integer" + "maximum": 100, + "minimum": 1, + "name": "size", + "type": "integer", + "x-example": 3 } ], "produces": [ @@ -543615,23 +627760,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tmdb.tvListResponseDoc" + "$ref": "#/definitions/trustpilot.categorySearchResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid query parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "No results found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Trustpilot upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -543642,27 +627799,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get a TMDB TV chart", + "summary": "Search Trustpilot categories", "tags": [ - "TMDB" + "Trustpilot" ] } }, - "/tmdb/tv/{id}": { + "/trustpilot/category/{slug}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a TMDB TV show: overview, tagline, genres, countries, episode count, first/last air year, top-billed cast, top crew (creator), and aggregate rating.", - "operationId": "tmdb-tv", + "description": "Returns a Trustpilot category by `slug` (for example `software_company`), with the companies listed on one page; `page` is 1-based and defaults to 1. Each company has its display name, `identifying_name`, `trust_score`, `stars`, `review_count`, location, contact details, categories and Trustpilot URL. Also returns breadcrumbs, newest companies and `pagination.has_next_page`.", + "operationId": "trustpilot-category", "parameters": [ { - "description": "TMDB TV show id", + "description": "Trustpilot category slug", "in": "path", - "name": "id", + "name": "slug", "required": true, "type": "string", - "x-example": "1396" + "x-example": "software_company" + }, + { + "description": "1-based page number; defaults to 1", + "in": "query", + "minimum": 1, + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -543672,29 +627837,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tmdb.tvResponseDoc" + "$ref": "#/definitions/trustpilot.categoryResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid path/query parameters", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "Category not found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Rate limit exceeded", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Trustpilot upstream request failed", "schema": { "$ref": "#/definitions/app.Response" } @@ -543705,24 +627876,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a TMDB TV show", + "summary": "Get Trustpilot category detail", "tags": [ - "TMDB" + "Trustpilot" ] } }, - "/tmz/article": { + "/twitch/channel": { "get": { - "description": "Returns one TMZ article by `url`, a canonical HTTPS `tmz.com` link of the form `/////`. The response has the title, description, section, authors, publication and update times, image URL, body `paragraphs` and a `paywalled` flag.", - "operationId": "tmz-article", + "consumes": [ + "application/json" + ], + "description": "Returns a Twitch channel's profile (partner status, team, last broadcast title) plus its current live status (started time and game/category, when live).", + "operationId": "twitch-channel", "parameters": [ { - "description": "Canonical TMZ article URL", + "description": "Twitch channel login (the lowercase URL slug, e.g. caedrel for twitch.tv/caedrel)", "in": "query", - "name": "url", + "name": "login", "required": true, "type": "string", - "x-example": "https://www.tmz.com/2026/09/23/example-story/" + "x-example": "caedrel" } ], "produces": [ @@ -543732,7 +627906,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/twitch.channelResponseDoc" } }, "400": { @@ -543747,6 +627921,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -543759,37 +627939,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get TMZ article content", + "summary": "Get a Twitch channel's profile and live status", "tags": [ - "TMZ" + "Twitch" ] } }, - "/tmz/author": { + "/twitch/clips": { "get": { - "description": "Returns a named person's TMZ profile hub: their name and their most recent TMZ coverage, from a canonical person-hub URL or slug. TMZ credits virtually all of its editorial content to a single \"TMZ Staff\" byline with no individual journalist profile pages, so this endpoint surfaces TMZ's own public per-person coverage hub (used for both celebrities and other newsmakers TMZ covers) as the closest available \"profile + recent articles\" surface.", - "operationId": "tmz-author", + "consumes": [ + "application/json" + ], + "description": "Returns a Twitch channel's clips (last 7 days), most-viewed first: title, view count, duration, curator, and the game it was recorded under.", + "operationId": "twitch-clips", "parameters": [ { - "description": "Person slug, e.g. dolly-parton", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "dolly-parton" - }, - { - "description": "Canonical tmz.com/people/ URL, optionally with a ?page= query parameter; alternative to slug", + "description": "Twitch channel login (the lowercase URL slug, e.g. caedrel for twitch.tv/caedrel)", "in": "query", - "name": "url", + "name": "login", + "required": true, "type": "string", - "x-example": "https://www.tmz.com/people/dolly-parton/" + "x-example": "caedrel" }, { - "default": 1, - "description": "1-based page number; overrides any page number in url", + "description": "Number of clips to return (default 20, max 100)", "in": "query", - "name": "page", - "type": "integer" + "name": "limit", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -543799,7 +627976,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.tmzAuthorResponseDoc" + "$ref": "#/definitions/twitch.clipsResponseDoc" } }, "400": { @@ -543814,6 +627991,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -543826,28 +628009,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get a TMZ person profile", + "summary": "Get a Twitch channel's clips", "tags": [ - "TMZ" + "Twitch" ] } }, - "/tmz/headlines": { + "/twitch/schedule": { "get": { - "description": "Returns the current headlines for one TMZ section. `section` is required and must be `news` or `sports`. Each item has its title, URL and, where available, a summary, author, publication time, image and `type`, and the response echoes the `section`.", - "operationId": "tmz-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns a Twitch channel's upcoming broadcast schedule -- planned segments with title, start/end time, and game/category -- starting today. A channel with no schedule configured returns an empty segments list, not an error.", + "operationId": "twitch-schedule", "parameters": [ { - "description": "TMZ section slug", - "enum": [ - "news", - "sports" - ], + "description": "Twitch channel login (the lowercase URL slug)", "in": "query", - "name": "section", + "name": "channel", "required": true, "type": "string", - "x-example": "news" + "x-example": "caedrel" + }, + { + "description": "Number of weeks ahead to return, starting today (default 1, max 4)", + "in": "query", + "name": "weeks", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -543857,7 +628046,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/twitch.scheduleResponseDoc" } }, "400": { @@ -543866,37 +628055,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get TMZ section headlines", - "tags": [ - "TMZ" - ] - } - }, - "/tmz/news": { - "get": { - "description": "Returns the current TMZ celebrity news top stories. It takes no parameters. Each item has its title, URL and, where available, an author such as TMZ Staff, a summary, publication time and image URL. Use the headlines endpoint with `sports` for sports stories.", - "operationId": "tmz-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -543916,50 +628079,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get TMZ top stories", + "summary": "Get a Twitch channel's broadcast schedule", "tags": [ - "TMZ" + "Twitch" ] } }, - "/tmz/sections": { + "/twitch/search": { "get": { - "description": "Returns the TMZ section inventory accepted by tmz-headlines: News (the home feed) and Sports. TMZ's public site has no broader stable editorial-category taxonomy beyond its own small main navigation -- see tmz-headlines for details.", - "operationId": "tmz-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get TMZ sections", - "tags": [ - "TMZ" - ] - } - }, - "/tokopedia/autocomplete": { - "get": { - "description": "Returns current public Tokopedia search suggestions for a partial keyword. Suggestions include canonical product-search URLs and are not product-search results.", - "operationId": "tokopedia-autocomplete", + "description": "Returns mixed category and channel matches for a query -- live channels include current viewer count and stream title. Sourced from Twitch's own search-typeahead surface (a capped suggestion list, not a fully paginated results page).", + "operationId": "twitch-search", "parameters": [ { - "description": "Partial product keyword, up to 100 characters", + "description": "Search text (category/game name or channel name)", "in": "query", - "name": "q", + "name": "query", "required": true, "type": "string", - "x-example": "iph" + "x-example": "valorant" + }, + { + "description": "Number of results to return (default 10, max 30)", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -543969,7 +628116,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tokopedia.autocompleteResponseDoc" + "$ref": "#/definitions/twitch.searchResponseDoc" } }, "400": { @@ -543996,24 +628143,34 @@ "ApiKeyAuth": [] } ], - "summary": "Autocomplete Tokopedia product searches", + "summary": "Search Twitch channels and games/categories", "tags": [ - "Tokopedia" + "Twitch" ] } }, - "/tokopedia/category": { + "/twitch/streams": { "get": { - "description": "Returns public product cards from a canonical Tokopedia category path. `path` must begin with `/p/`; use the category page path, not a product or search URL.", - "operationId": "tokopedia-category", + "consumes": [ + "application/json" + ], + "description": "Returns the top currently-live streams for a Twitch game/category, ranked by viewer count: title, viewer count, broadcaster, and tags.", + "operationId": "twitch-streams", "parameters": [ { - "description": "Canonical Tokopedia category path beginning with /p/", + "description": "Twitch game/category slug (the lowercase URL slug from twitch.tv/directory/category/{slug})", "in": "query", - "name": "path", + "name": "game", "required": true, "type": "string", - "x-example": "/p/handphone-tablet/handphone" + "x-example": "league-of-legends" + }, + { + "description": "Number of streams to return (default 20, max 100)", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -544023,7 +628180,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tokopedia.categoryResponseDoc" + "$ref": "#/definitions/twitch.streamsResponseDoc" } }, "400": { @@ -544056,30 +628213,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Tokopedia category", + "summary": "Get the top live streams for a Twitch game/category", "tags": [ - "Tokopedia" + "Twitch" ] } }, - "/tokopedia/home": { + "/twitch/team": { "get": { - "description": "Returns public product-card recommendations for a current Tokopedia home tab. Omit `tab_id` for the first available tab; discover other tabs through `/tokopedia/home/tabs`.", - "operationId": "tokopedia-home", + "consumes": [ + "application/json" + ], + "description": "Returns a Twitch team's full member roster, with live status and viewer count for whoever is currently live, plus team-level metadata (banner, logo, description, owner).", + "operationId": "twitch-team", "parameters": [ { - "description": "Current ID from /tokopedia/home/tabs", + "description": "Twitch team slug (the lowercase URL slug from twitch.tv/team/{slug})", "in": "query", - "name": "tab_id", + "name": "team", + "required": true, "type": "string", - "x-example": "1" - }, - { - "default": 1, - "description": "Recommendation page from 1 through 5", - "in": "query", - "name": "page", - "type": "integer" + "x-example": "yumetalent" } ], "produces": [ @@ -544089,7 +628243,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tokopedia.homeResponseDoc" + "$ref": "#/definitions/twitch.teamResponseDoc" } }, "400": { @@ -544098,6 +628252,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -544116,16 +628276,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get Tokopedia home recommendations", + "summary": "Get a Twitch team's roster", "tags": [ - "Tokopedia" + "Twitch" ] } }, - "/tokopedia/home/tabs": { + "/twitch/top-games": { "get": { - "description": "Lists the current Tokopedia home recommendation tabs, each with its `id`, `name` and an optional image URL, plus a `fetched_at` timestamp. It takes no parameters. Pass a returned `id` as `tab_id` to `/tokopedia/home` to load that tab.", - "operationId": "tokopedia-home-tabs", + "consumes": [ + "application/json" + ], + "description": "Returns the top games/categories site-wide, ranked by total current viewers across all live streams under each one.", + "operationId": "twitch-top-games", + "parameters": [ + { + "description": "Number of games to return (default 20, max 100)", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 20 + } + ], "produces": [ "application/json" ], @@ -544133,7 +628305,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tokopedia.homeTabsResponseDoc" + "$ref": "#/definitions/twitch.topGamesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -544154,32 +628332,34 @@ "ApiKeyAuth": [] } ], - "summary": "List Tokopedia home recommendation tabs", + "summary": "Get Twitch's top games/categories", "tags": [ - "Tokopedia" + "Twitch" ] } }, - "/tokopedia/product": { + "/twitch/videos": { "get": { - "description": "Returns public product detail from a canonical Tokopedia shop domain and product key. This endpoint does not accept arbitrary URLs; numeric product IDs are returned when the product page exposes them but cannot be used as lookup input.", - "operationId": "tokopedia-product", + "consumes": [ + "application/json" + ], + "description": "Returns a Twitch channel's past-broadcast videos (VODs), ranked by view count: title, view count, length, publish date, and the game it was recorded under.", + "operationId": "twitch-videos", "parameters": [ { - "description": "Canonical Tokopedia shop domain", + "description": "Twitch channel login (the lowercase URL slug, e.g. lck for twitch.tv/lck)", "in": "query", - "name": "shop_domain", + "name": "login", "required": true, "type": "string", - "x-example": "ismile-indonesia" + "x-example": "lck" }, { - "description": "Canonical Tokopedia product key", + "description": "Number of videos to return (default 20, max 100)", "in": "query", - "name": "product_key", - "required": true, - "type": "string", - "x-example": "apple-iphone-17-pro-max-garansi-resmi-256gb-512gb-1tb-2tb-1733012454966462347" + "name": "limit", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -544189,7 +628369,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tokopedia.productResponseDoc" + "$ref": "#/definitions/twitch.videosResponseDoc" } }, "400": { @@ -544222,24 +628402,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Tokopedia product's public detail", + "summary": "Get a Twitch channel's videos (VODs)", "tags": [ - "Tokopedia" + "Twitch" ] } }, - "/tokopedia/product/review-filters": { + "/twitch/vod-comments": { "get": { - "description": "Returns which public review media, rating, and topic filters are available for a numeric product ID. It does not return review text, review media, or a review archive.", - "operationId": "tokopedia-product-review-filters", + "consumes": [ + "application/json" + ], + "description": "Returns one page of a Twitch VOD's chat replay (past-broadcast chat messages), starting at a given point in the video's timeline. Paginate forward by re-requesting with the last returned comment's offset_seconds.", + "operationId": "twitch-vod-comments", "parameters": [ { - "description": "Numeric Tokopedia product ID", + "description": "Twitch VOD/video id (the numeric id from twitch.tv/videos/{id})", "in": "query", - "name": "product_id", + "name": "video", "required": true, "type": "string", - "x-example": "102491859263" + "x-example": "2845804307" + }, + { + "description": "Start the page from this point in the VOD's timeline, in seconds (default 0)", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -544249,7 +628439,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tokopedia.reviewFiltersResponseDoc" + "$ref": "#/definitions/twitch.vodCommentsResponseDoc" } }, "400": { @@ -544258,6 +628448,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -544276,55 +628472,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get Tokopedia product review-filter metadata", + "summary": "Get a Twitch VOD's chat replay", "tags": [ - "Tokopedia" + "Twitch" ] } }, - "/tokopedia/search": { + "/ubereats/feed": { "get": { - "description": "Returns public Tokopedia product cards for a keyword from Tokopedia's public product-search operation. `sort` accepts `3` (lowest price), `4` (highest price), `5` (most reviewed), `9` (newest), or `23` (most relevant). Repeat `filter` as `key:value` using values from `/tokopedia/search/filters`.", - "operationId": "tokopedia-search", + "consumes": [ + "application/json" + ], + "description": "Returns restaurants delivering to a specific location: name, rating, review count, delivery estimate, cuisine tags, and cover image.", + "operationId": "ubereats-feed", "parameters": [ { - "description": "Product keyword", + "description": "Delivery search center latitude", "in": "query", - "name": "q", + "name": "latitude", "required": true, - "type": "string", - "x-example": "sepatu lari" + "type": "number", + "x-example": 37.7749 }, { - "default": 1, - "description": "Search page from 1 through 5", + "description": "Delivery search center longitude", "in": "query", - "name": "page", - "type": "integer" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -122.4194 }, { - "default": 23, - "description": "Sort: 3 lowest price, 4 highest price, 5 most reviewed, 9 newest, 23 most relevant", - "enum": [ - 3, - 4, - 5, - 9, - 23 - ], + "description": "Result offset for the location feed. Default 0", "in": "query", - "name": "sort", + "name": "offset", "type": "integer" }, { - "collectionFormat": "multi", - "description": "Repeat live key:value filter selections from /tokopedia/search/filters", + "description": "Number of restaurants to return, clamped to 50. Default 20", "in": "query", - "items": { - "type": "string" - }, - "name": "filter", - "type": "array" + "name": "limit", + "type": "integer" } ], "produces": [ @@ -544334,7 +628522,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tokopedia.searchResponseDoc" + "$ref": "#/definitions/ubereats.feedResponseDoc" } }, "400": { @@ -544343,8 +628531,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -544361,24 +628549,60 @@ "ApiKeyAuth": [] } ], - "summary": "Search Tokopedia products", + "summary": "Browse UberEats location feed", "tags": [ - "Tokopedia" + "UberEats" ] } }, - "/tokopedia/search/filters": { + "/ubereats/search": { "get": { - "description": "Returns the live filter tree and supported sort choices for a Tokopedia product search. The response includes categories when the current query exposes them, store type, delivery location, price, rating, offer, condition, recency, shipping, and stock options as applicable.", - "operationId": "tokopedia-search-filters", + "consumes": [ + "application/json" + ], + "description": "Returns restaurants delivering to a location: name, rating, review count, delivery estimate, cuisine tags, and image. Pass a keyword to search by name/cuisine/dish, or omit it to browse the general feed for that location.", + "operationId": "ubereats-search", "parameters": [ { - "description": "Product keyword", + "description": "Delivery search center latitude", "in": "query", - "name": "q", + "name": "latitude", + "required": true, + "type": "number", + "x-example": 37.7749 + }, + { + "description": "Delivery search center longitude", + "in": "query", + "name": "longitude", "required": true, + "type": "number", + "x-example": -122.4194 + }, + { + "description": "Keyword — restaurant name, cuisine, or dish", + "in": "query", + "name": "query", "type": "string", - "x-example": "sepatu" + "x-example": "pizza" + }, + { + "description": "Result offset for the location feed (used only when query is omitted). Default 0", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "Number of restaurants to return, clamped to 50. Default 20", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Opaque pagination cursor from a previous keyword-search response", + "in": "query", + "name": "cursor", + "type": "string" } ], "produces": [ @@ -544388,7 +628612,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tokopedia.searchFiltersResponseDoc" + "$ref": "#/definitions/ubereats.searchResponseDoc" } }, "400": { @@ -544397,8 +628621,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -544415,24 +628639,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Tokopedia search filters and sorts", + "summary": "Search UberEats restaurants", "tags": [ - "Tokopedia" + "UberEats" ] } }, - "/tomsguide/article": { + "/ubereats/store/{store_id}": { "get": { - "description": "Returns one Tom's Guide article by `url`, a canonical HTTPS `tomsguide.com` link such as `tomsguide.com/
/`. The response has the title, description, section, authors, publication and update times, image URL, body `paragraphs` and a `paywalled` flag. On some product reviews `authors` may be empty.", - "operationId": "tomsguide-article", + "consumes": [ + "application/json" + ], + "description": "Returns an UberEats store: address, phone, rating, cuisine tags, hours tagline, and the full menu (sections with items, descriptions, and prices).", + "operationId": "ubereats-store", "parameters": [ { - "description": "Canonical Tom's Guide article URL", - "in": "query", - "name": "url", + "description": "UberEats store UUID, as returned by the search endpoint's storeUuid field", + "in": "path", + "name": "store_id", "required": true, "type": "string", - "x-example": "https://www.tomsguide.com/audio/over-ear-headphones/noble-audio-fokus-artemis-review" + "x-example": "259fe6e9-9e3a-429d-ae24-be5eda54ba64" } ], "produces": [ @@ -544442,7 +628669,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/ubereats.storeResponseDoc" } }, "400": { @@ -544457,6 +628684,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -544469,37 +628702,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Tom's Guide article content", + "summary": "Get an UberEats store", "tags": [ - "Tom's Guide" + "UberEats" ] } }, - "/tomsguide/author": { + "/ubereats/store/{store_id}/menu": { "get": { - "description": "Returns a Tom's Guide author's name, job title, biography, social links and one page of recent articles. Give exactly one of `slug` or `url`; `page` is 1-based, defaults to 1 and overrides any page in `url`. The response also has `page` and `has_next_page`.", - "operationId": "tomsguide-author", + "consumes": [ + "application/json" + ], + "description": "Returns the full menu for an UberEats store: section titles, items, item descriptions, prices, and availability status.", + "operationId": "ubereats-store-menu", "parameters": [ { - "description": "Author slug, e.g. tom-pritchard", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "tom-pritchard" - }, - { - "description": "Canonical tomsguide.com/author/ URL, optionally with a /page/ segment; alternative to slug", - "in": "query", - "name": "url", + "description": "UberEats store UUID, as returned by the search endpoint's storeUuid field", + "in": "path", + "name": "store_id", + "required": true, "type": "string", - "x-example": "https://www.tomsguide.com/author/tom-pritchard" - }, - { - "default": 1, - "description": "1-based page number; overrides any page number in url", - "in": "query", - "name": "page", - "type": "integer" + "x-example": "259fe6e9-9e3a-429d-ae24-be5eda54ba64" } ], "produces": [ @@ -544509,7 +628732,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.tomsguideAuthorResponseDoc" + "$ref": "#/definitions/ubereats.menuResponseDoc" } }, "400": { @@ -544524,6 +628747,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -544536,48 +628765,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Tom's Guide author profile", + "summary": "Get an UberEats store menu", "tags": [ - "Tom's Guide" + "UberEats" ] } }, - "/tomsguide/headlines": { + "/ubereats/store/{store_id}/reviews": { "get": { - "description": "Returns the current headlines for one Tom's Guide section. `section` is required and takes one of 22 slugs, such as `ai`, `audio`, `deals`, `how-to`, `news`, `reviews`, `tvs` or `phones`. Each item has its title, URL, summary, author, publication time and image.", - "operationId": "tomsguide-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns the reviews snapshot embedded in an UberEats store page: aggregate rating, review count, and a sample of recent reviews (reviewer name, text, and relative/absolute date). This is a single on-page snapshot, not a full paginated feed. A store with no written reviews returns an empty reviews list.", + "operationId": "ubereats-store-reviews", "parameters": [ { - "description": "Tom's Guide section slug", - "enum": [ - "ai", - "audio", - "best-picks", - "cameras-photography", - "computing", - "deals", - "entertainment", - "face-off", - "gaming", - "home", - "how-to", - "mattresses", - "news", - "reference", - "reviews", - "sales-events", - "tech", - "tech-events", - "tvs", - "vehicle-tech", - "wellness", - "phones" - ], - "in": "query", - "name": "section", + "description": "UberEats store UUID, as returned by the search endpoint's storeUuid field", + "in": "path", + "name": "store_id", "required": true, "type": "string", - "x-example": "ai" + "x-example": "259fe6e9-9e3a-429d-ae24-be5eda54ba64" } ], "produces": [ @@ -544587,7 +628795,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/ubereats.storeReviewsResponseDoc" } }, "400": { @@ -544596,40 +628804,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Tom's Guide section headlines", - "tags": [ - "Tom's Guide" - ] - } - }, - "/tomsguide/news": { - "get": { - "description": "Returns the current top stories from Tom's Guide. It takes no parameters. Each item has its title, URL and, where available, a summary, author, publication time, image URL and `type`. Use the headlines endpoint to read one section.", - "operationId": "tomsguide-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -544646,50 +628828,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get Tom's Guide top stories", + "summary": "Get UberEats store reviews", "tags": [ - "Tom's Guide" + "UberEats" ] } }, - "/tomsguide/sections": { + "/ulta/categories": { "get": { - "description": "Lists the 22 top-level Tom's Guide content verticals that the headlines endpoint accepts, such as `ai`, `best-picks`, `how-to`, `mattresses`, `reviews`, `vehicle-tech` and `phones`. Each entry has a `slug`, a display `name` and a `url`.", - "operationId": "tomsguide-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Tom's Guide sections", - "tags": [ - "Tom's Guide" - ] - } - }, - "/tomshardware/article": { - "get": { - "description": "Returns one Tom's Hardware article by its canonical `url`, either the current `tomshardware.com/
//` form or the legacy `/reviews/,.html` form. The response has the title, description, authors, section, published and updated times, lead image, the body `paragraphs` and a `paywalled` flag.", - "operationId": "tomshardware-article", + "description": "Lists Ulta Beauty's own storefront category navigation: department, group, name, and a URL usable directly as GET /ulta/category's own category parameter. Closes the discovery gap of not already knowing a category path. department, if set, filters to just that department's entries. group is empty for a department's own top-level link or a group's own heading link, and set to that group's name for the leaf categories nested under it. The exact same real category can legitimately appear more than once under a different department/group when the site's own navigation cross-lists it.", + "operationId": "ulta-categories", "parameters": [ { - "description": "Canonical Tom's Hardware article URL", + "description": "Filter to one department", + "enum": [ + "makeup-nails", + "skin-care", + "hair-care", + "fragrance", + "body-care", + "wellness", + "mens-care", + "tools-brushes" + ], "in": "query", - "name": "url", - "required": true, + "name": "department", "type": "string", - "x-example": "https://www.tomshardware.com/monitors/gaming-monitors/sony-inzone-m10s-ii-27-inch-540-hz-qhd-oled-gaming-monitor-review" + "x-example": "makeup-nails" } ], "produces": [ @@ -544699,7 +628867,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/ulta.categoriesResponseDoc" } }, "400": { @@ -544708,8 +628876,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -544726,37 +628894,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get Tom's Hardware article content", + "summary": "List Ulta Beauty storefront categories", "tags": [ - "Tom's Hardware" + "Ulta Beauty" ] } }, - "/tomshardware/author": { + "/ulta/category": { "get": { - "description": "Returns a Tom's Hardware author profile with name, job title, biography, social links and one page of recent articles. Identify the author with `slug` (such as `christian-eberle`) or an author `url`; `page` (default 1) overrides any page in the URL. `has_next_page` tells you whether more articles exist.", - "operationId": "tomshardware-author", + "consumes": [ + "application/json" + ], + "description": "Browses an Ulta Beauty category page's product grid, with real page-based pagination and the category's own guided-navigation refinement options. category accepts a category path or full URL copied from Ulta's own site navigation (e.g. shop/makeup/eyes/mascara). filter narrows results using Ulta's own guided-navigation facet-code shape (e.g. BENEFIT--WATERPROOF, or a comma-joined combination of codes) -- discover valid codes for a category from that category's own response facets field, whose value is ready to use directly as this parameter. An unrecognized category returns 404.", + "operationId": "ulta-category", "parameters": [ { - "description": "Author slug, e.g. christian-eberle", + "description": "Ulta category path or URL", "in": "query", - "name": "slug", + "name": "category", + "required": true, "type": "string", - "x-example": "christian-eberle" + "x-example": "shop/makeup/eyes/mascara" }, { - "description": "Canonical tomshardware.com/author/ URL, optionally with a /page/ segment; alternative to slug", + "description": "Guided-navigation facet code(s), comma-joined for multiple", "in": "query", - "name": "url", + "name": "filter", "type": "string", - "x-example": "https://www.tomshardware.com/author/christian-eberle" + "x-example": "BENEFIT--WATERPROOF" }, { - "default": 1, - "description": "1-based page number; overrides any page number in url", + "description": "Result page, 1-based, defaults to 1", "in": "query", "name": "page", - "type": "integer" + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -544766,7 +628938,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.tomshardwareAuthorResponseDoc" + "$ref": "#/definitions/ulta.categoryResponseDoc" } }, "400": { @@ -544781,6 +628953,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -544793,46 +628971,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Tom's Hardware author profile", + "summary": "Browse an Ulta Beauty category page", "tags": [ - "Tom's Hardware" + "Ulta Beauty" ] } }, - "/tomshardware/headlines": { + "/ulta/product/questions": { "get": { - "description": "Lists the current headlines for one Tom's Hardware section. `section` is required and takes a slug such as `gpus`, `cpus`, `laptops`, `deals`, `reviews` or `news`; use `tomshardware-sections` for the full set. Each item has its title, URL, author, publication time and lead image, plus a summary when the section's listing provides one.", - "operationId": "tomshardware-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns one page of an Ulta Beauty product's customer questions, each with every answer it received. product_id is taken from a search result's product_id field or a product page's URL. A product with zero questions, or a well-formed but unrecognized product_id, returns a normal, empty result rather than an error.", + "operationId": "ulta-product-questions", "parameters": [ { - "description": "Tom's Hardware section slug", - "enum": [ - "3d-printing", - "best-picks", - "cpus", - "deals", - "desktops", - "features", - "gpus", - "laptops", - "maker-stem", - "monitors", - "networking", - "news", - "news-analysis", - "pc-components", - "peripherals", - "phones", - "reviews", - "service-providers", - "software", - "tech-industry" - ], + "description": "Ulta product id, from a search result's product_id field", "in": "query", - "name": "section", + "name": "product_id", "required": true, "type": "string", - "x-example": "3d-printing" + "x-example": "pimprod2020260" + }, + { + "description": "Result page, 1-based, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -544842,7 +629008,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/ulta.productQuestionsResponseDoc" } }, "400": { @@ -544851,6 +629017,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -544863,16 +629035,36 @@ "ApiKeyAuth": [] } ], - "summary": "Get Tom's Hardware section headlines", + "summary": "Get an Ulta Beauty product's customer questions and answers", "tags": [ - "Tom's Hardware" + "Ulta Beauty" ] } }, - "/tomshardware/news": { + "/ulta/product/reviews": { "get": { - "description": "Returns the latest Tom's Hardware top stories with no parameters. Each item has its title, URL, summary, author, publication time and lead image. Use the item URLs with `tomshardware-article` to read the body.", - "operationId": "tomshardware-news", + "consumes": [ + "application/json" + ], + "description": "Returns one page of an Ulta Beauty product's customer reviews, plus the retailer's own site-wide rating summary (rating count, average rating, recommended ratio, rating histogram) for the product. product_id is taken from a search result's product_id field or a product page's URL. A product with zero reviews, or a well-formed but unrecognized product_id, returns a normal, empty result rather than an error.", + "operationId": "ulta-product-reviews", + "parameters": [ + { + "description": "Ulta product id, from a search result's product_id field", + "in": "query", + "name": "product_id", + "required": true, + "type": "string", + "x-example": "pimprod2020260" + }, + { + "description": "Result page, 1-based, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + } + ], "produces": [ "application/json" ], @@ -544880,7 +629072,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/ulta.productReviewsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -544901,50 +629099,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get Tom's Hardware top stories", + "summary": "Get an Ulta Beauty product's customer reviews", "tags": [ - "Tom's Hardware" + "Ulta Beauty" ] } }, - "/tomshardware/sections": { + "/ulta/product/{productId}": { "get": { - "description": "Lists the 20 Tom's Hardware top-level sections that `tomshardware-headlines` accepts, including `3d-printing`, `cpus`, `gpus`, `monitors`, `news` and `reviews`. Each section carries its `slug`, display `name` and page `url`. Takes no parameters.", - "operationId": "tomshardware-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Tom's Hardware sections", - "tags": [ - "Tom's Hardware" - ] - } - }, - "/torontostar/article": { - "get": { - "description": "Returns public Toronto Star article metadata and the body paragraphs shown to an anonymous reader from a canonical article URL. The Star meters its articles, so paywalled is true and paragraphs holds only the public teaser (typically the first two paragraphs) whenever the page hides the rest from non-subscribers.", - "operationId": "torontostar-article", + "description": "Returns one Ulta Beauty product's full detail: name, brand, description, category, pricing, rating, review count, images, and every purchasable color/shade variant. productId is taken from a search result's product_id field or a product page's URL (e.g. pimprod2020260). sku is optional and selects a specific color/shade variant; an omitted or invalid sku still resolves the base product using its own default variant. An unrecognized productId returns 404.", + "operationId": "ulta-product", "parameters": [ { - "description": "Canonical Toronto Star article URL", - "in": "query", - "name": "url", + "description": "Ulta product id, from a search result's product_id field", + "in": "path", + "name": "productId", "required": true, "type": "string", - "x-example": "https://www.thestar.com/news/gta/court-set-to-hear-from-victims-families-in-case-of-international-poison-seller-kenneth-law/article_e760a06a-60da-49b6-ae00-fe14e1b5eb5b.html" + "x-example": "pimprod2020260" + }, + { + "description": "Numeric Ulta sku id selecting a specific color/shade variant", + "in": "query", + "name": "sku", + "type": "string", + "x-example": "2574523" } ], "produces": [ @@ -544954,7 +629136,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/ulta.productDetailResponseDoc" } }, "400": { @@ -544969,6 +629151,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -544981,30 +629169,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get Toronto Star article content", + "summary": "Get an Ulta Beauty product's full detail", "tags": [ - "Toronto Star" + "Ulta Beauty" ] } }, - "/torontostar/author": { + "/ulta/search": { "get": { - "description": "Returns one Toronto Star author's public profile: name, job title, biography, location and topic focus, avatar, and their recent articles.", - "operationId": "torontostar-author", + "consumes": [ + "application/json" + ], + "description": "Searches Ulta Beauty's product catalog by keyword, with real page-based pagination. Returns products with brand, pricing, rating, and review count. An unrecognized/nonsense keyword returns a genuine empty result rather than a fallback set. Requesting a page beyond the available results returns a normal, empty result rather than an error.", + "operationId": "ulta-search", "parameters": [ { - "description": "Author profile slug (thestar.com/users/profile/); use this or url", + "description": "Search keyword", "in": "query", - "name": "slug", + "name": "query", + "required": true, "type": "string", - "x-example": "omar-mosleh" + "x-example": "mascara" }, { - "description": "Canonical thestar.com/users/profile/ URL; alternative to slug", + "description": "Result page, 1-based, defaults to 1", "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.thestar.com/users/profile/omar-mosleh/" + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -545014,7 +629206,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.torontoStarAuthorResponseDoc" + "$ref": "#/definitions/ulta.searchResponseDoc" } }, "400": { @@ -545023,8 +629215,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -545041,95 +629233,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Toronto Star author profile", + "summary": "Search Ulta Beauty products", "tags": [ - "Toronto Star" + "Ulta Beauty" ] } }, - "/torontostar/headlines": { + "/ulta/stores": { "get": { - "description": "Returns fresh Toronto Star headlines from one public section page, with summary, publish time and image when the page shows them.", - "operationId": "torontostar-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns Ulta Beauty physical retail store locations near a point: name, phone, full address, hours, services, and coordinates. Either search, or both lat and lng, is required. search is a free-text zip code, city, or address that is first resolved to coordinates; if it does not resolve to any location, a well-formed empty result is returned rather than an error. lat and lng, when given directly, skip that resolution step. radius_meters is optional (1000 to 50000, defaults to 25000). A location with no stores within the radius returns a well-formed empty result rather than an error.", + "operationId": "ulta-stores", "parameters": [ { - "description": "Toronto Star section path", - "enum": [ - "news", - "news/gta", - "news/toronto-election", - "news/police/project-south", - "news/car-thefts", - "news/canada", - "news/ontario", - "news/canada/british-columbia", - "news/canada/alberta", - "news/canada/quebec", - "news/canada/nova-scotia", - "news/investigations", - "news/world", - "news/world/united-states", - "news/world/americas", - "news/world/europe", - "news/world/asia", - "news/world/africa", - "news/world/australia", - "news/world/middle-east", - "news/world/royals", - "politics", - "politics/federal", - "politics/provincial", - "politics/political-opinion", - "opinion", - "opinion/star-columnists", - "opinion/editorials", - "opinion/contributors", - "opinion/letters-to-the-editor", - "opinion/editorial-cartoons", - "life", - "life/relationships", - "life/food-and-drink", - "life/beauty-and-fashion", - "life/health-wellness", - "life/home-and-garden", - "life/autos", - "life/horoscopes", - "sports", - "sports/hockey", - "sports/hockey/pwhl", - "sports/basketball", - "sports/basketball/wnba", - "sports/baseball", - "sports/football", - "sports/football/cfl", - "sports/golf", - "sports/soccer", - "sports/tennis", - "sports/auto-racing", - "sports/cricket", - "sports/olympics-and-paralympics", - "real-estate", - "entertainment", - "entertainment/stage", - "entertainment/books", - "entertainment/music", - "entertainment/movies", - "entertainment/television", - "business", - "business/small-business", - "business/technology", - "business/mars", - "podcasts", - "podcasts/this-matters", - "podcasts/its-political", - "podcasts/billionaire-murders", - "podcasts/deep-left-field" - ], + "description": "Free-text zip code, city, or address to resolve to coordinates", "in": "query", - "name": "section", - "required": true, + "name": "search", "type": "string", - "x-example": "news" + "x-example": "60601" + }, + { + "description": "Latitude, requires lng", + "in": "query", + "name": "lat", + "type": "number", + "x-example": 41.8781 + }, + { + "description": "Longitude, requires lat", + "in": "query", + "name": "lng", + "type": "number", + "x-example": -87.6298 + }, + { + "description": "Search radius in meters, 1000 to 50000, defaults to 25000", + "in": "query", + "name": "radius_meters", + "type": "integer", + "x-example": 25000 } ], "produces": [ @@ -545139,7 +629283,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/ulta.storesResponseDoc" } }, "400": { @@ -545148,37 +629292,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Toronto Star section headlines", - "tags": [ - "Toronto Star" - ] - } - }, - "/torontostar/news": { - "get": { - "description": "Returns the newest Toronto Star editorial stories (up to 50, newest first) from the public news sitemap. Press-release and sponsored pages are excluded.", - "operationId": "torontostar-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "503": { "description": "Service Unavailable", @@ -545192,50 +629310,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Toronto Star top stories", + "summary": "Find nearby Ulta Beauty physical stores", "tags": [ - "Toronto Star" + "Ulta Beauty" ] } }, - "/torontostar/sections": { + "/ulta/suggest": { "get": { - "description": "Lists the 69 Toronto Star sections accepted by the headlines endpoint, taken from thestar.com's main navigation. Each has a `slug`, a display `name` and a `url`. Nested sections use slash paths such as `news/gta`, `sports/hockey/pwhl` and `business/technology`. Takes no parameters.", - "operationId": "torontostar-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Toronto Star sections", - "tags": [ - "Toronto Star" - ] - } - }, - "/townhall/article": { - "get": { - "description": "Returns public Townhall article metadata and body paragraphs from a canonical news or column URL. VIP stories are flagged with paywalled and return only the free lead paragraphs.", - "operationId": "townhall-article", + "description": "Returns Ulta Beauty's own search-suggestion (typeahead) result for a partial search term: suggested search terms, each with its own top product matches, plus a featured top result matching what a real user sees at the top of the dropdown. A partial term with no matches returns a normal, empty result rather than an error.", + "operationId": "ulta-suggest", "parameters": [ { - "description": "Canonical Townhall article URL", + "description": "Partial search term", "in": "query", - "name": "url", + "name": "query", "required": true, "type": "string", - "x-example": "https://townhall.com/news/amy-curtis/2026/09/24/second-man-arrested-in-mississippi-hanging-ap-ignores-race-n2683524" + "x-example": "masc" } ], "produces": [ @@ -545245,7 +629340,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/ulta.suggestResponseDoc" } }, "400": { @@ -545254,8 +629349,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -545272,30 +629367,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Townhall article content", + "summary": "Get Ulta Beauty search suggestions", "tags": [ - "Townhall" + "Ulta Beauty" ] } }, - "/townhall/author": { + "/upwork/freelancer/{id}": { "get": { - "description": "Returns a Townhall author profile by `slug` (such as `amy-curtis`) or by an author `url`; exactly one is required. The response has the name, photo, bio, X profile link and the first page of the author's archive, about 50 stories, each with its section label and a `vip` flag. Unknown authors return a not-found error.", - "operationId": "townhall-author", + "consumes": [ + "application/json" + ], + "description": "Returns an Upwork freelancer profile: name, title, verification badge, overview, hourly rate, rating and review count, Job Success Score, location and local time, total jobs/hours worked, and recent client feedback (title, comment, date, client name, rating).", + "operationId": "upwork-freelancer", "parameters": [ { - "description": "Author slug, e.g. amy-curtis", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "amy-curtis" - }, - { - "description": "Canonical townhall.com/author/ URL; alternative to slug", - "in": "query", - "name": "url", + "description": "Upwork freelancer id, the value after \\", + "in": "path", + "name": "id", + "required": true, "type": "string", - "x-example": "https://townhall.com/author/amy-curtis" + "x-example": "0157e03059a690281f" } ], "produces": [ @@ -545305,7 +629397,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.townhallAuthorResponseDoc" + "$ref": "#/definitions/upwork.freelancerResponseDoc" } }, "400": { @@ -545320,6 +629412,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -545332,36 +629430,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Townhall author profile", + "summary": "Get Upwork freelancer profile", "tags": [ - "Townhall" + "Upwork" ] } }, - "/townhall/headlines": { + "/upwork/job/{id}": { "get": { - "description": "Lists headlines for one Townhall section. `section` is required: `news` and `columnists` return the 20 most recent stories, while the topic sections (such as `congress`, `economy` or `iran`) return up to 30 stories mixing news and columns. Items carry title, URL, image and, when available, author, time and summary.", - "operationId": "townhall-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns an Upwork job posting: title, full description, employment type, budget (hourly range or fixed amount), location/remote type, experience level, duration, project type, proposal count, allowed applicant countries, and a summary of the posting client (member since, location, total spend, hires, hours, industry, company size).", + "operationId": "upwork-job", "parameters": [ { - "description": "Townhall section slug", - "enum": [ - "news", - "columnists", - "2026-elections", - "congress", - "donald-trump", - "economy", - "foreign-policy", - "illegal-immigration", - "iran", - "supreme-court" - ], - "in": "query", - "name": "section", + "description": "Upwork job id, e.g. from a search result's id field", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "news" + "x-example": "022085006288356888767" } ], "produces": [ @@ -545371,7 +629460,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/upwork.jobResponseDoc" } }, "400": { @@ -545380,36 +629469,16 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Townhall section headlines", - "tags": [ - "Townhall" - ] - } - }, - "/townhall/news": { - "get": { - "description": "Returns the latest Townhall stories, news and opinion columns mixed, newest first, about 50 items. Each has its title, URL, short summary, publication time, author byline and lead image. Video pages are left out. Takes no parameters.", - "operationId": "townhall-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "500": { + "description": "Internal Server Error", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/app.Response" } }, "503": { @@ -545424,99 +629493,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get Townhall top stories", - "tags": [ - "Townhall" - ] - } - }, - "/townhall/sections": { - "get": { - "description": "Returns the public Townhall section inventory: the site-wide news and column feeds plus the editorial topic hubs the site promotes.", - "operationId": "townhall-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Townhall sections", + "summary": "Get Upwork job posting detail", "tags": [ - "Townhall" + "Upwork" ] } }, - "/tripadvisor/autocomplete": { + "/upwork/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns TripAdvisor typeahead suggestions for the required query `q`, optionally narrowed by `limit`, `locale`, `scope_geo_id` and a `type` hint. Each result has its id, title, type, URL, image, parent location and coordinates, and may carry nested search shortcuts. Results can be locations, hotels, restaurants or attractions.", - "operationId": "tripadvisor-autocomplete", + "description": "Searches Upwork's public job listings by free-text keyword, returning job summaries (title, budget, experience level, duration, posted date, description snippet, skill tags).", + "operationId": "upwork-search", "parameters": [ { - "description": "Autocomplete query", + "description": "Free-text job search keyword", "in": "query", "name": "q", "required": true, "type": "string", - "x-example": "hong kong" - }, - { - "description": "Maximum results", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 5 - }, - { - "description": "TripAdvisor locale", - "in": "query", - "name": "locale", - "type": "string", - "x-example": "en-HK" + "x-example": "python developer" }, { - "description": "Optional scoped geo id", + "description": "1-based result page. Defaults to 1.", "in": "query", - "name": "scope_geo_id", + "name": "page", "type": "integer", - "x-example": 294217 - }, - { - "description": "Optional result type hint", - "in": "query", - "name": "type", - "type": "string", - "x-example": "attraction" - }, - { - "description": "Optional captured search session id", - "in": "query", - "name": "search_session_id", - "type": "string" - }, - { - "description": "Optional captured typeahead id", - "in": "query", - "name": "typeahead_id", - "type": "string" - }, - { - "description": "Optional captured route uid", - "in": "query", - "name": "route_uid", - "type": "string" + "x-example": 2 } ], "produces": [ @@ -545526,7 +629530,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tripadvisor.tripadvisorAutocompleteResponseDoc" + "$ref": "#/definitions/upwork.searchResponseDoc" } }, "400": { @@ -545535,8 +629539,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -545553,28 +629557,74 @@ "ApiKeyAuth": [] } ], - "summary": "Autocomplete TripAdvisor locations and places", + "summary": "Search Upwork job postings", "tags": [ - "TripAdvisor" + "Upwork" ] } }, - "/tripadvisor/enums": { + "/usage/me/endpoints": { "get": { - "description": "Returns the values TripAdvisor place and listing filters accept: `locales`, `currencies`, `languages`, `listing_types`, `sorts`, `pricing_modes`, `hotel_classes`, `hotel_amenities`, `restaurant_types`, `restaurant_options`, attraction categories with their ids, and `filter_ids`. It also lists `unsupported_entity_types`. Takes no parameters.", - "operationId": "tripadvisor-enums", + "consumes": [ + "application/json" + ], + "description": "Returns the signed-in user's usage broken down by endpoint, ordered by request volume. `range` is `period` (the current billing period, default), `day`, `week`, `month` or `custom`, which takes RFC3339 `from` and `to`. `limit` defaults to 20 (max 100). Each item has `requests`, `charged_requests`, `failed_requests`, `non_billable_requests`, `credits` and `overage`. Authenticated with a dashboard JWT.", + "operationId": "usage-me-endpoints", + "parameters": [ + { + "description": "Time range preset. Defaults to the current billing period.", + "enum": [ + "period", + "day", + "week", + "month", + "custom" + ], + "in": "query", + "name": "range", + "type": "string" + }, + { + "description": "Maximum endpoints to return. Defaults to 20 and clamps to 100.", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "description": "Custom lower bound in RFC3339 format when range=custom", + "in": "query", + "name": "from", + "type": "string", + "x-example": "2026-04-01T00:00:00Z" + }, + { + "description": "Custom upper bound in RFC3339 format when range=custom", + "in": "query", + "name": "to", + "type": "string", + "x-example": "2026-04-22T00:00:00Z" + } + ], "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", + "description": "Endpoint usage breakdown", "schema": { - "$ref": "#/definitions/tripadvisor.tripadvisorEnumsResponseDoc" + "$ref": "#/definitions/usage.usageEndpointsResponseDoc" } }, - "429": { - "description": "Rate limit exceeded", + "400": { + "description": "Invalid query parameters", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "401": { + "description": "Authentication required", "schema": { "$ref": "#/definitions/app.Response" } @@ -545591,112 +629641,46 @@ "ApiKeyAuth": [] } ], - "summary": "Get TripAdvisor enum metadata", + "summary": "Get current user's endpoint usage breakdown", "tags": [ - "TripAdvisor" + "Usage" ] } }, - "/tripadvisor/hotels": { + "/usage/me/overview": { "get": { "consumes": [ "application/json" ], - "description": "Searches TripAdvisor hotels in the area given by the required `geo_id`. Filter with `class`, `amenities`, `price_min`, `price_max`, `pricing_mode`, `travelers_choice` and `currency`; page with `offset` and `limit`; order with `sort`. Each hotel has its title, URL, image, rating, review count, star rating, rank, price, provider, location and a review snippet when TripAdvisor supplies them.", - "operationId": "tripadvisor-hotels", + "description": "Returns a JWT-authenticated user's current billing snapshot plus recent request and credit consumption metrics for the selected UTC time range. The `requests` summary is limited to product API traffic and excludes console, billing, usage, and user-management endpoints.", + "operationId": "usage-me-overview", "parameters": [ { - "description": "TripAdvisor geo id", - "in": "query", - "name": "geo_id", - "required": true, - "type": "integer", - "x-example": 294217 - }, - { - "description": "Optional filter id such as class or ufe", - "in": "query", - "name": "filter_id", - "type": "string", - "x-example": "ufe" - }, - { - "description": "Hotel class filter", - "in": "query", - "name": "class", - "type": "integer", - "x-example": 5 - }, - { - "collectionFormat": "multi", - "description": "Amenity filter ids", - "in": "query", - "items": { - "type": "integer" - }, - "name": "amenities", - "type": "array" - }, - { - "description": "Minimum price filter", - "in": "query", - "name": "price_min", - "type": "integer", - "x-example": 1000 - }, - { - "description": "Maximum price filter", - "in": "query", - "name": "price_max", - "type": "integer", - "x-example": 3205 - }, - { - "description": "Pricing mode", - "in": "query", - "name": "pricing_mode", - "type": "string", - "x-example": "ALL_IN_RATE" - }, - { - "description": "Filter Travelers' Choice properties", - "in": "query", - "name": "travelers_choice", - "type": "boolean" - }, - { - "description": "Filter Best of the Best properties", + "description": "Time range preset. Defaults to the current billing period.", + "enum": [ + "period", + "day", + "week", + "month", + "custom" + ], "in": "query", - "name": "travelers_choice_botb", - "type": "boolean" + "name": "range", + "type": "string" }, { - "description": "Currency code", + "description": "Custom lower bound in RFC3339 format when range=custom", "in": "query", - "name": "currency", + "name": "from", "type": "string", - "x-example": "HKD" - }, - { - "description": "Zero-based result offset", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 - }, - { - "description": "Maximum results", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 3 + "x-example": "2026-04-01T00:00:00Z" }, { - "description": "Sort value", + "description": "Custom upper bound in RFC3339 format when range=custom", "in": "query", - "name": "sort", + "name": "to", "type": "string", - "x-example": "BEST_VALUE" + "x-example": "2026-04-22T00:00:00Z" } ], "produces": [ @@ -545704,25 +629688,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Usage overview", "schema": { - "$ref": "#/definitions/tripadvisor.tripadvisorHotelsResponseDoc" + "$ref": "#/definitions/usage.usageOverviewResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid query parameters", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "401": { + "description": "Authentication required", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -545733,31 +629717,54 @@ "ApiKeyAuth": [] } ], - "summary": "Search TripAdvisor hotels", + "summary": "Get current user's usage overview", "tags": [ - "TripAdvisor" + "Usage" ] } }, - "/tripadvisor/place": { + "/usage/me/recent-ips": { "get": { "consumes": [ "application/json" ], - "description": "Returns a rich TripAdvisor place profile.", - "operationId": "tripadvisor-place", + "description": "Returns recent client IP addresses observed for the JWT-authenticated user's product API traffic, ordered by last seen time. Console, billing, usage, and user-management endpoints are excluded.", + "operationId": "usage-me-recent-ips", "parameters": [ { - "description": "TripAdvisor place URL", + "description": "Time range preset. Defaults to the current billing period.", + "enum": [ + "period", + "day", + "week", + "month", + "custom" + ], "in": "query", - "name": "url", + "name": "range", "type": "string" }, { - "description": "TripAdvisor location id fallback", + "description": "Maximum IPs to return. Defaults to 20 and clamps to 100.", "in": "query", - "name": "id", - "type": "string" + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer" + }, + { + "description": "Custom lower bound in RFC3339 format when range=custom", + "in": "query", + "name": "from", + "type": "string", + "x-example": "2026-04-01T00:00:00Z" + }, + { + "description": "Custom upper bound in RFC3339 format when range=custom", + "in": "query", + "name": "to", + "type": "string", + "x-example": "2026-04-22T00:00:00Z" } ], "produces": [ @@ -545765,31 +629772,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Recent API client IPs", "schema": { - "$ref": "#/definitions/tripadvisor.PlaceResponse" + "$ref": "#/definitions/usage.usageRecentIPsResponseDoc" } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Invalid query parameters", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "401": { + "description": "Authentication required", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -545800,105 +629801,63 @@ "ApiKeyAuth": [] } ], - "summary": "Get TripAdvisor place", + "summary": "Get current user's recent API client IPs", "tags": [ - "TripAdvisor" + "Usage" ] } }, - "/tripadvisor/reviews": { + "/usage/me/timeseries": { "get": { "consumes": [ "application/json" ], - "description": "Returns reviews for a TripAdvisor place identified by `id` (location id) or `url`. `limit` defaults to 20 (max 50); `page` is 1-based; `language`, `ratings` (1 to 5) and `sort_by` refine the list. Each review has author, title, text, dates, rating, language, helpful votes, photos and URL. A page beyond `total` returns an empty `reviews` array.", - "operationId": "tripadvisor-reviews", + "description": "Returns the signed-in user's request usage as UTC time buckets for charts. `range` is `period` (default), `day`, `week`, `month` or `custom` (with RFC3339 `from` and `to`); `bucket` is `hour` or `day`; `endpoint` filters to one endpoint such as `google/search`. Each bucket has start, end, `requests`, `charged_requests`, `credits` and `overage`. Empty buckets are filled with zeros.", + "operationId": "usage-me-timeseries", "parameters": [ { - "description": "TripAdvisor location id", - "in": "query", - "name": "id", - "type": "string", - "x-example": "113311" - }, - { - "description": "TripAdvisor place URL", - "in": "query", - "name": "url", - "type": "string" - }, - { - "description": "1-based review page", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Maximum reviews", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 3 - }, - { - "description": "Review language", - "in": "query", - "name": "language", - "type": "string", - "x-example": "en" - }, - { - "description": "Legacy sort type; DEFAULT selects newest first, ML_SORTED uses upstream order unless sort_by is DATE", + "description": "Time range preset. Defaults to the current billing period.", "enum": [ - "ML_SORTED", - "DEFAULT" + "period", + "day", + "week", + "month", + "custom" ], "in": "query", - "name": "sort_type", - "type": "string", - "x-example": "DEFAULT" + "name": "range", + "type": "string" }, { - "description": "Legacy sort field; DATE selects newest first, FAVORABLE_RATING uses upstream order", + "description": "Bucket size. Defaults to hour for day range and day otherwise.", "enum": [ - "FAVORABLE_RATING", - "DATE" + "hour", + "day" ], "in": "query", - "name": "sort_by", - "type": "string", - "x-example": "DATE" + "name": "bucket", + "type": "string" }, { - "collectionFormat": "multi", - "description": "Rating filters", + "description": "Optional endpoint filter", "in": "query", - "items": { - "enum": [ - 1, - 2, - 3, - 4, - 5 - ], - "type": "integer" - }, - "name": "ratings", - "type": "array" + "name": "endpoint", + "type": "string", + "x-example": "google/search" }, { - "description": "Enable upstream machine translation", + "description": "Custom lower bound in RFC3339 format when range=custom", "in": "query", - "name": "do_machine_translation", - "type": "boolean" + "name": "from", + "type": "string", + "x-example": "2026-04-01T00:00:00Z" }, { - "description": "Maximum photos per review", + "description": "Custom upper bound in RFC3339 format when range=custom", "in": "query", - "name": "photos_per_review_limit", - "type": "integer", - "x-example": 7 + "name": "to", + "type": "string", + "x-example": "2026-04-22T00:00:00Z" } ], "produces": [ @@ -545906,31 +629865,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Usage timeseries", "schema": { - "$ref": "#/definitions/tripadvisor.tripadvisorReviewsResponseDoc" + "$ref": "#/definitions/usage.usageTimeseriesResponseDoc" } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", + "description": "Invalid query parameters", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "401": { + "description": "Authentication required", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -545941,168 +629894,65 @@ "ApiKeyAuth": [] } ], - "summary": "Get TripAdvisor reviews", + "summary": "Get current user's usage timeseries", "tags": [ - "TripAdvisor" + "Usage" ] } }, - "/tripadvisor/search": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Searches TripAdvisor places in the area given by the required `geo_id`, for the required `type`: `hotel`, `restaurant`, `attraction`, `all`, or an attraction category type from `/tripadvisor/enums`. Hotel and restaurant filters, `offset`, `limit`, `locale`, `currency` and `sort` are optional. Each result has title, URL, rating, review count, rank, price and location. Unsupported entity-only types return a validation error.", - "operationId": "tripadvisor-search", - "parameters": [ - { - "description": "TripAdvisor geo id", - "in": "query", - "name": "geo_id", - "required": true, - "type": "integer", - "x-example": 294217 - }, - { - "description": "Listing type", - "in": "query", - "name": "type", - "required": true, - "type": "string", - "x-example": "restaurant" - }, - { - "description": "Optional hotel filter id", - "in": "query", - "name": "filter_id", - "type": "string", - "x-example": "ufe" - }, - { - "description": "Hotel class filter", - "in": "query", - "name": "class", - "type": "integer", - "x-example": 5 - }, - { - "collectionFormat": "multi", - "description": "Hotel amenity filter ids", - "in": "query", - "items": { - "type": "integer" - }, - "name": "amenities", - "type": "array" - }, - { - "description": "Minimum hotel price filter", - "in": "query", - "name": "price_min", - "type": "integer", - "x-example": 1000 - }, - { - "description": "Maximum hotel price filter", - "in": "query", - "name": "price_max", - "type": "integer", - "x-example": 3205 - }, - { - "description": "Hotel pricing mode", - "in": "query", - "name": "pricing_mode", - "type": "string", - "x-example": "ALL_IN_RATE" - }, - { - "description": "Filter Travelers' Choice hotels", - "in": "query", - "name": "travelers_choice", - "type": "boolean" - }, - { - "description": "Filter Best of the Best hotels", - "in": "query", - "name": "travelers_choice_botb", - "type": "boolean" - }, - { - "description": "Restaurant availability date", - "in": "query", - "name": "restaurant_date", - "type": "string", - "x-example": "2026-05-20" - }, - { - "description": "Restaurant availability time", - "in": "query", - "name": "restaurant_time", - "type": "string", - "x-example": "1900" - }, - { - "description": "Restaurant guest count", - "in": "query", - "name": "restaurant_guests", - "type": "integer", - "x-example": 3 - }, - { - "collectionFormat": "multi", - "description": "Restaurant establishment type ids", - "in": "query", - "items": { - "type": "integer" - }, - "name": "establishment_types", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Restaurant online option ids", - "in": "query", - "items": { - "type": "integer" - }, - "name": "online_options", - "type": "array" - }, - { - "description": "Zero-based result offset", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 - }, - { - "description": "Maximum results", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 3 + "/usage/platform-adjacency": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns, per platform, how many real users have used it (lifetime, successful requests only), its request volume, top entry endpoints, and which other platforms those users also use. Aggregated across all customers with non-customer, static, and console traffic excluded; recomputed at most once per 24 hours and served from cache. Powers the console dashboard's \"Explore more\" recommendation.", + "operationId": "usage-platform-adjacency", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Platform reach and co-usage aggregate", + "schema": { + "$ref": "#/definitions/usage.usagePlatformAdjacencyResponseDoc" + } }, - { - "description": "TripAdvisor locale", - "in": "query", - "name": "locale", - "type": "string", - "x-example": "en-HK" + "401": { + "description": "Authentication required", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Currency code", - "in": "query", - "name": "currency", - "type": "string", - "x-example": "HKD" - }, + "ApiKeyAuth": [] + } + ], + "summary": "Get cross-user platform reach and co-usage", + "tags": [ + "Usage" + ] + } + }, + "/usatoday/article": { + "get": { + "description": "Returns one normal USA Today article's public metadata and body paragraphs from a canonical article URL. Video, gallery, and other non-article routes are not supported.", + "operationId": "usatoday-article", + "parameters": [ { - "description": "Sort value", + "description": "Canonical USA Today article URL", "in": "query", - "name": "sort", + "name": "url", + "required": true, "type": "string", - "x-example": "POPULARITY" + "x-example": "https://www.usatoday.com/story/sports/mlb/dodgers/2026/09/23/shohei-ohtani-return-from-il/91899080007/" } ], "produces": [ @@ -546112,7 +629962,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tripadvisor.tripadvisorSearchResponseDoc" + "$ref": "#/definitions/usatoday.articleResponseDoc" } }, "400": { @@ -546121,6 +629971,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -546139,35 +629995,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search TripAdvisor places", + "summary": "Get a USA Today article's content", "tags": [ - "TripAdvisor" + "USA Today" ] } }, - "/tripcom/hotels/search": { + "/usatoday/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Trip.com's own top-hotels page for a city: hotel summaries (name, location, star rating, guest rating, review count, image, display price) for the hotels Trip.com features on that city's hotel-list page. Trip.com does not expose a free-text city search, so callers supply the exact city_slug and city_id pair from a known Trip.com hotel-list URL of the form https://www.trip.com/hotels/{city_slug}-hotels-list-{city_id}/.", - "operationId": "tripcom-hotels-search", + "description": "Returns one USA Today staff writer's public profile: name, bio, social accounts, and their recent articles, from a canonical staff page URL.", + "operationId": "usatoday-author", "parameters": [ { - "description": "Trip.com city slug, the text segment of a /hotels/{city_slug}-hotels-list-{city_id}/ URL", - "in": "query", - "name": "city_slug", - "required": true, - "type": "string", - "x-example": "bangkok" - }, - { - "description": "Trip.com numeric city id, the trailing number of a /hotels/{city_slug}-hotels-list-{city_id}/ URL", + "description": "Canonical USA Today staff URL", "in": "query", - "name": "city_id", + "name": "url", "required": true, "type": "string", - "x-example": "359" + "x-example": "https://www.usatoday.com/staff/87951836007/andres-soto/" } ], "produces": [ @@ -546177,7 +630022,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tripcom.searchResponseDoc" + "$ref": "#/definitions/usatoday.authorResponseDoc" } }, "400": { @@ -546192,8 +630037,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -546210,34 +630055,39 @@ "ApiKeyAuth": [] } ], - "summary": "Search Trip.com hotels by city", + "summary": "Get a USA Today staff/author profile", "tags": [ - "Trip.com" + "USA Today" ] } }, - "/tripcom/hotels/{id}": { + "/usatoday/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a Trip.com hotel-detail page: identity (name, local name, star rating, city/province/country), location (address, zone, latitude/longitude, nearby-transport description), guest rating (overall score plus cleanliness/amenities/location/service breakdown), images, description, check-in/check-out and child policy summaries, and popular facilities. Pricing is not included: Trip.com's detail page only returns per-night rates alongside check-in/check-out dates, which this endpoint does not take as input -- use the search endpoint for a city's current display prices.", - "operationId": "tripcom-hotel-detail", + "description": "Returns the newest USA Today items for one top-level section, up to 100. `section` is required and takes `news`, `sports`, `entertainment`, `life`, `money`, `tech`, `travel`, `opinion`, `cars`, `shopping`, `weather`, `politics` or `grocery`. Each item has its title, URL, published and updated times, and lead image when there is one.", + "operationId": "usatoday-headlines", "parameters": [ { - "description": "Trip.com hotel id, from a prior search call's hotel_id field", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "39371462" - }, - { - "description": "Optional slug segment for a nicer canonical source URL (e.g. the district/city slug from a search result's url). Not required and not validated by Trip.com.", + "description": "Top-level USA Today section", + "enum": [ + "news", + "sports", + "entertainment", + "life", + "money", + "tech", + "travel", + "opinion", + "cars", + "shopping", + "weather", + "politics", + "grocery" + ], "in": "query", - "name": "slug", + "name": "section", + "required": true, "type": "string", - "x-example": "bang-sao-thong-district" + "x-example": "news" } ], "produces": [ @@ -546247,7 +630097,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/tripcom.DetailResponse" + "$ref": "#/definitions/usatoday.headlinesResponseDoc" } }, "400": { @@ -546256,14 +630106,46 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get USA Today section headlines", + "tags": [ + "USA Today" + ] + } + }, + "/usatoday/news": { + "get": { + "description": "Returns the newest window of USA Today's public news feed: title, canonical URL, publication and update times, and the lead image when USA Today publishes one.", + "operationId": "usatoday-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/usatoday.newsResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -546280,19 +630162,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Trip.com hotel detail", + "summary": "Get fresh USA Today headlines", "tags": [ - "Trip.com" + "USA Today" ] } }, - "/trustmrr/acquire": { + "/usatoday/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the for-sale startups rendered on the public TrustMRR /acquire marketplace page, with deal metrics (asking price, revenue, multiple, growth). Verified revenue figures come from supported payment providers.", - "operationId": "trustmrr-acquire", + "description": "Lists the 13 top-level USA Today sections accepted by `usatoday-headlines`, from `news` and `sports` to `politics` and `grocery`. Each has a `slug`, a display `name` and a landing-page `url`. Takes no parameters.", + "operationId": "usatoday-sections", "produces": [ "application/json" ], @@ -546300,23 +630179,52 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trustmrr.acquireResponseDoc" + "$ref": "#/definitions/usatoday.sectionsResponseDoc" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List USA Today sections", + "tags": [ + "USA Today" + ] + } + }, + "/user/me": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the profile of the user who owns the `Token ` in the `Authorization` header: `id`, `username`, `email` and `plan`. Password hashes, activation tokens, API keys and billing identifiers are never returned, which makes it a quick check that a session token is valid.", + "operationId": "user-me", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Current user", + "schema": { + "$ref": "#/definitions/user.userMeResponseDoc" + } }, - "503": { - "description": "TrustMRR upstream request failed", + "401": { + "description": "Authentication required", "schema": { "$ref": "#/definitions/app.Response" } @@ -546324,34 +630232,34 @@ }, "security": [ { - "ApiKeyAuth": [] + "JWTAuth": [] } ], - "summary": "Get TrustMRR acquisition listings", + "summary": "Get current user", "tags": [ - "TrustMRR" + "User" ] } }, - "/trustmrr/categories": { + "/user/me/api-keys": { "get": { "consumes": [ "application/json" ], - "description": "Lists the TrustMRR startup categories, with the total `count`. Each category has its `slug`, `label`, short label, icon name, description, keywords and TrustMRR URL. Pass a category `slug` to `/trustmrr/category/{slug}` to list the startups in it.", - "operationId": "trustmrr-categories", + "description": "Lists the signed-in user's API keys in masked form. Each item has `id`, `masked_key`, `key_prefix`, `key_suffix`, `status` (`active`, `grace` or `revoked`), `source`, and created, updated, rotated, expiry and last-used timestamps with the last-used IP. Raw keys are not returned; the reveal endpoint, `POST /api/v1/user/me/api-keys/{id}/reveal`, retrieves one.", + "operationId": "user-me-api-keys", "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", + "description": "API keys", "schema": { - "$ref": "#/definitions/trustmrr.categoriesResponseDoc" + "$ref": "#/definitions/user.userAPIKeysResponseDoc" } }, - "429": { - "description": "Rate limit exceeded", + "401": { + "description": "Authentication required", "schema": { "$ref": "#/definitions/app.Response" } @@ -546361,9 +630269,44 @@ "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "JWTAuth": [] + } + ], + "summary": "List current user's API keys", + "tags": [ + "User" + ] + } + }, + "/user/me/api-keys/rotate": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Generates a new active API key for the JWT-authenticated user and places the previous key into a 24 hour grace period.", + "operationId": "user-me-api-keys-rotate", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Rotated API key", + "schema": { + "$ref": "#/definitions/user.userRotateAPIKeyResponseDoc" + } + }, + "401": { + "description": "Authentication required", + "schema": { + "$ref": "#/definitions/app.Response" + } }, - "503": { - "description": "TrustMRR upstream request failed", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -546371,30 +630314,29 @@ }, "security": [ { - "ApiKeyAuth": [] + "JWTAuth": [] } ], - "summary": "Get TrustMRR categories", + "summary": "Rotate current user's API key", "tags": [ - "TrustMRR" + "User" ] } }, - "/trustmrr/category/{slug}": { - "get": { + "/user/me/api-keys/{id}/reveal": { + "post": { "consumes": [ "application/json" ], - "description": "Returns one TrustMRR category by `slug` (lowercase letters, digits and hyphens, for example `saas`) with the startups listed in it. Each startup has its name, slug, URL, description, current MRR, total revenue and last-30-days revenue, all in USD, plus the `on_sale` flag for startups listed for sale. Valid slugs come from `/trustmrr/categories`.", - "operationId": "trustmrr-category", + "description": "Returns the raw value for a selected active or unexpired grace API key owned by the JWT-authenticated user when raw key material is available.", + "operationId": "user-me-api-keys-reveal", "parameters": [ { - "description": "TrustMRR category slug", + "description": "API key id", "in": "path", - "name": "slug", + "name": "id", "required": true, - "type": "string", - "x-example": "saas" + "type": "string" } ], "produces": [ @@ -546402,37 +630344,77 @@ ], "responses": { "200": { - "description": "OK", + "description": "Raw API key", "schema": { - "$ref": "#/definitions/trustmrr.categoryResponseDoc" + "$ref": "#/definitions/user.userRevealAPIKeyResponseDoc" } }, - "400": { - "description": "Missing or invalid path parameters", + "401": { + "description": "Authentication required", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Category not found", + "description": "API key not found or raw value unavailable", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "JWTAuth": [] + } + ], + "summary": "Reveal current user's API key", + "tags": [ + "User" + ] + } + }, + "/user/me/browser-language": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Captures the Accept-Language header from a live dashboard visit and, only if the caller's signup Accept-Language was never recorded, saves it and its derived primary subtag. A no-op for a caller who already has a value on file.", + "operationId": "user-me-browser-language", + "parameters": [ + { + "description": "Accept-Language header captured from the visit", + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/user.userBrowserLanguageReq" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Backfill result", + "schema": { + "$ref": "#/definitions/user.userBrowserLanguageResponseDoc" + } }, - "500": { - "description": "Internal server error", + "401": { + "description": "Authentication required", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "TrustMRR upstream request failed", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } @@ -546440,56 +630422,40 @@ }, "security": [ { - "ApiKeyAuth": [] + "JWTAuth": [] } ], - "summary": "Get TrustMRR category detail", + "summary": "Backfill current user's browser language", "tags": [ - "TrustMRR" + "User" ] } }, - "/trustmrr/leaderboard": { - "get": { + "/user/me/deletion-request": { + "delete": { "consumes": [ "application/json" ], - "description": "Returns the top 100 startups ranked by the selected metric from the public TrustMRR leaderboard. Revenue and MRR figures are verified through supported payment providers.", - "operationId": "trustmrr-leaderboard", - "parameters": [ - { - "description": "Leaderboard metric to rank by (default mrr)", - "enum": [ - "mrr", - "last_30_days_revenue", - "all_time_revenue", - "growth", - "traffic", - "revenue_per_visitor" - ], - "in": "query", - "name": "metric", - "type": "string" - } - ], + "description": "Withdraws the authenticated user's own pending or approved deletion request before purge. If this request scheduled Stripe cancellation and the paid-through date has not arrived, the renewal cancellation is reversed.", + "operationId": "account-deletion-cancel", "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", + "description": "Cancelled deletion request", "schema": { - "$ref": "#/definitions/trustmrr.leaderboardResponseDoc" + "$ref": "#/definitions/accountdeletion.accountDeletionResponseDoc" } }, "400": { - "description": "Invalid metric parameter", + "description": "No active deletion request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "401": { + "description": "Authentication required", "schema": { "$ref": "#/definitions/app.Response" } @@ -546499,44 +630465,36 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "TrustMRR upstream request failed", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ { - "ApiKeyAuth": [] + "JWTAuth": [] } ], - "summary": "Get TrustMRR revenue leaderboard", + "summary": "Cancel current user's account deletion request", "tags": [ - "TrustMRR" + "Account Deletion" ] - } - }, - "/trustmrr/marketplace": { + }, "get": { "consumes": [ "application/json" ], - "description": "Returns the public TrustMRR marketplace snapshot: the 25 most recently listed startups for sale and the current 25 best deals ranked by TrustMRR's recency-aware deal score. Revenue figures are verified through supported payment providers.", - "operationId": "trustmrr-marketplace", + "description": "Returns the signed-in user's active account deletion request (`pending` or `approved`), including its `status`, request time, `scheduled_purge_at`, `subscription_period_end` and the Stripe cancellation flags. A user with no active request gets a 200 with an empty request (empty `id`), not an error.", + "operationId": "account-deletion-my-request", "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", + "description": "Deletion request, empty if none active", "schema": { - "$ref": "#/definitions/trustmrr.marketplaceResponseDoc" + "$ref": "#/definitions/accountdeletion.accountDeletionResponseDoc" } }, - "429": { - "description": "Rate limit exceeded", + "401": { + "description": "Authentication required", "schema": { "$ref": "#/definitions/app.Response" } @@ -546546,40 +630504,32 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "TrustMRR upstream request failed", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ { - "ApiKeyAuth": [] + "JWTAuth": [] } ], - "summary": "Get TrustMRR marketplace snapshot", + "summary": "Get current user's account deletion request", "tags": [ - "TrustMRR" + "Account Deletion" ] - } - }, - "/trustmrr/startup/{slug}": { - "get": { + }, + "post": { "consumes": [ "application/json" ], - "description": "Returns the full verified profile for a single TrustMRR startup by slug: revenue and MRR, growth, asking price and marketplace status, tech stack, marketing channels, and TrustMRR's AI-generated business summary.", - "operationId": "trustmrr-startup", + "description": "Records the authenticated user's request to delete their account. If approved with a live Stripe subscription, renewal is stopped at the current paid-through date; account access continues until expiry, then deletion runs after the existing 72-hour minimum review window. Account deletion never issues refunds or prorated credits. Idempotent — repeat calls while a request is pending or approved return the existing request.", + "operationId": "account-deletion-request", "parameters": [ { - "description": "TrustMRR startup slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "trackai" + "description": "Optional reason for the request", + "in": "body", + "name": "request", + "schema": { + "$ref": "#/definitions/accountdeletion.accountDeletionRequestBodyDoc" + } } ], "produces": [ @@ -546587,25 +630537,19 @@ ], "responses": { "200": { - "description": "OK", + "description": "Deletion request", "schema": { - "$ref": "#/definitions/trustmrr.startupResponseDoc" + "$ref": "#/definitions/accountdeletion.accountDeletionResponseDoc" } }, - "400": { - "description": "Missing or invalid path parameters", + "401": { + "description": "Authentication required", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Startup not found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Rate limit exceeded", + "description": "User not found", "schema": { "$ref": "#/definitions/app.Response" } @@ -546615,44 +630559,31 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "TrustMRR upstream request failed", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ { - "ApiKeyAuth": [] + "JWTAuth": [] } ], - "summary": "Get TrustMRR startup detail", + "summary": "Request account deletion", "tags": [ - "TrustMRR" + "Account Deletion" ] } }, - "/trustmrr/startups": { + "/usmagazine/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a paginated list of every startup in the TrustMRR directory. Each entry is a slug you can pass to /trustmrr/startup/{slug} for the full verified profile — together these two endpoints let you enumerate the entire directory.", - "operationId": "trustmrr-startups", + "description": "Returns one Us Weekly article by its canonical `url`, in the form `/
/news//`. The response has the title, description, published and updated times, section, authors, lead image and the body `paragraphs`, without sub-headings or embeds. Photo-gallery URLs and non-article pages return a 400 error.", + "operationId": "usmagazine-article", "parameters": [ { - "description": "1-based page number (default 1)", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Items per page (default 100, max 1000)", + "description": "Canonical Us Weekly article URL", "in": "query", - "name": "page_size", - "type": "integer" + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.usmagazine.com/celebrity-news/news/example-article-slug/" } ], "produces": [ @@ -546662,23 +630593,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trustmrr.startupsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, - "429": { - "description": "Rate limit exceeded", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "TrustMRR upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -546689,51 +630620,24 @@ "ApiKeyAuth": [] } ], - "summary": "List all TrustMRR startups", + "summary": "Get Us Weekly article content", "tags": [ - "TrustMRR" + "Us Weekly" ] } }, - "/trustpilot/business-units/search": { + "/usmagazine/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Trustpilot for businesses matching a query, for a country (default `US`), with `page` and `page_size` (default 20, max 100). Each result has the display name, identifying name, TrustScore, star rating, review count, categories, website, email, phone, address and Trustpilot URL; `total_hits` gives the full match count.", - "operationId": "trustpilot-business-search", + "description": "Returns a Us Weekly author's profile from their canonical `url` (`/author//`, required): name, biography, contact links and the newest articles, about 20. Staff and desk bylines may have no biography or links. Photo galleries are skipped and `published_at` is not set on the articles.", + "operationId": "usmagazine-author", "parameters": [ { - "description": "Search query", + "description": "Canonical Us Weekly author URL", "in": "query", - "name": "q", + "name": "url", "required": true, "type": "string", - "x-example": "openai" - }, - { - "description": "Two-letter country code; defaults to US", - "in": "query", - "name": "country", - "type": "string", - "x-example": "US" - }, - { - "description": "1-based page number; defaults to 1", - "in": "query", - "minimum": 1, - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Results per page; defaults to 20, maximum 100", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "page_size", - "type": "integer", - "x-example": 5 + "x-example": "https://www.usmagazine.com/author/jane-doe/" } ], "produces": [ @@ -546743,35 +630647,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trustpilot.businessSearchResponseDoc" + "$ref": "#/definitions/publicnews.usmagazineAuthorResponseDoc" } }, "400": { - "description": "Missing or invalid query parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "No results found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Rate limit exceeded", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal server error", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Trustpilot upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -546782,27 +630674,38 @@ "ApiKeyAuth": [] } ], - "summary": "Search Trustpilot business units", + "summary": "Get a Us Weekly author profile", "tags": [ - "Trustpilot" + "Us Weekly" ] } }, - "/trustpilot/business/{slug}": { + "/usmagazine/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a Trustpilot business profile by `slug`, such as `openai.com`. The profile has the name, `trust_score`, `review_count`, rating histogram, review summary and topics, categories, claimed status, website URL, reply metrics, company activity and verification flags, and an about section with description and contact details.", - "operationId": "trustpilot-business", + "description": "Lists recent Us Weekly headlines for one section. `section` is required and takes `celebrity-news`, `entertainment`, `sports`, `shopping`, `crime-news`, `stylish`, `celebrity-moms`, `celebrity-body`, `food`, `reviews`, `reality-tv` or `royal-family`. Returns up to about 20 items, with photo galleries excluded; `reviews` holds only a few.", + "operationId": "usmagazine-headlines", "parameters": [ { - "description": "Trustpilot business slug", - "in": "path", - "name": "slug", + "description": "Us Weekly RSS section slug", + "enum": [ + "celebrity-news", + "entertainment", + "sports", + "shopping", + "crime-news", + "stylish", + "celebrity-moms", + "celebrity-body", + "food", + "reviews", + "reality-tv", + "royal-family" + ], + "in": "query", + "name": "section", "required": true, "type": "string", - "x-example": "openai.com" + "x-example": "celebrity-news" } ], "produces": [ @@ -546812,35 +630715,55 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trustpilot.businessProfileResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { - "description": "Missing or invalid path parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Business not found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } - }, - "429": { - "description": "Rate limit exceeded", + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Us Weekly section headlines", + "tags": [ + "Us Weekly" + ] + } + }, + "/usmagazine/news": { + "get": { + "description": "Returns the latest Us Weekly top stories with no parameters. Each item has its title and URL, plus summary, publication time, author and image when the outlet provides them. Only article URLs of the form `/
/news//` appear; photo galleries are left out.", + "operationId": "usmagazine-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, - "500": { - "description": "Internal server error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Trustpilot upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -546851,27 +630774,61 @@ "ApiKeyAuth": [] } ], - "summary": "Get Trustpilot business profile", + "summary": "Get Us Weekly top stories", "tags": [ - "Trustpilot" + "Us Weekly" ] } }, - "/trustpilot/business/{slug}/related": { + "/usmagazine/sections": { + "get": { + "description": "Lists the 12 Us Weekly sections accepted by `usmagazine-headlines`, from `celebrity-news` and `entertainment` to `reality-tv` and `royal-family`. Each entry has a `slug`, display `name` and section feed `url`. Takes no parameters.", + "operationId": "usmagazine-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Us Weekly RSS sections", + "tags": [ + "Us Weekly" + ] + } + }, + "/usptoppubs/detail": { "get": { "consumes": [ "application/json" ], - "description": "Returns the businesses Trustpilot shows as related to a given business slug such as `openai.com`. Each related business has its display name, identifying name, logo, star rating, TrustScore, review count and Trustpilot URL; the response also includes a summary of the business you asked about.", - "operationId": "trustpilot-business-related", + "description": "Fetches a single USPTO Patent Public Search record's full text -- bibliographic data, abstract, description, and claims -- by GUID and source database. guid and source normally come straight from a prior /usptoppubs/search result's guid and database fields. Public data, sourced from USPTO's own official search tool.", + "operationId": "usptoppubs-detail", "parameters": [ { - "description": "Trustpilot business slug", - "in": "path", - "name": "slug", + "description": "Document GUID, e.g. from a prior search result's guid field", + "in": "query", + "name": "guid", "required": true, "type": "string", - "x-example": "openai.com" + "x-example": "US-20260238009-A1" + }, + { + "description": "Source database. Allowed values: US-PGPUB, USPAT, USOCR", + "in": "query", + "name": "source", + "required": true, + "type": "string", + "x-example": "US-PGPUB" } ], "produces": [ @@ -546881,35 +630838,35 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trustpilot.businessRelatedResponseDoc" + "$ref": "#/definitions/usptoppubs.detailResponseDoc" } }, "400": { - "description": "Missing or invalid path parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Business not found", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Trustpilot upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -546920,84 +630877,48 @@ "ApiKeyAuth": [] } ], - "summary": "Get Trustpilot related businesses", + "summary": "Fetch a document's full bibliographic data, abstract, description, and claims", "tags": [ - "Trustpilot" + "USPTO Patent Public Search" ] } }, - "/trustpilot/business/{slug}/reviews": { + "/usptoppubs/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of Trustpilot reviews for a business slug such as `openai.com`, with filters for star rating, verified reviews, reviews with a company reply, language and text search. Each review has its rating, title, body, author name, country and review count, dates, and any company reply; the response also carries the business summary and pagination totals.", - "operationId": "trustpilot-business-reviews", + "description": "Searches USPTO Patent Public Search's full-text index of granted patents and published applications, returning bibliographic results (title, applicant/assignee, inventors, filing and publication dates, application number, IPC/CPC classifications, page count). q accepts USPTO's full Advanced Search query syntax -- field-specific search (e.g. battery.ti., Microsoft.as.), date ranges (@pd>=20200101<=20241231), boolean and proximity operators, and wildcards -- see the markdown doc for the full field-code table and syntax reference.", + "operationId": "usptoppubs-search", "parameters": [ { - "description": "Trustpilot business slug", - "in": "path", - "name": "slug", - "required": true, - "type": "string", - "x-example": "openai.com" - }, - { - "description": "1-based page number; defaults to 1", - "in": "query", - "minimum": 1, - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Filter by star rating from 1 to 5", - "in": "query", - "maximum": 5, - "minimum": 1, - "name": "stars", - "type": "integer", - "x-example": 1 - }, - { - "description": "Filter to verified reviews", - "in": "query", - "name": "verified", - "type": "boolean" - }, - { - "description": "Filter to reviews with business replies", - "in": "query", - "name": "replied", - "type": "boolean" - }, - { - "description": "Review language code used by Trustpilot", + "description": "Search query text -- accepts USPTO's full Advanced Search (BRS) query syntax: field codes, date ranges, boolean/proximity operators, wildcards", "in": "query", - "name": "language", + "name": "q", + "required": true, "type": "string", - "x-example": "en" + "x-example": "battery" }, { - "description": "Text search within reviews", + "description": "Comma-separated subset of databases to search. Allowed values: US-PGPUB, USPAT, USOCR. Defaults to all three", "in": "query", - "name": "q", + "name": "databases", "type": "string", - "x-example": "refund" + "x-example": "US-PGPUB,USPAT,USOCR" }, { - "description": "Date range start in YYYY-MM-DD; currently rejected by upstream", + "description": "Results to return, default 20, max 100", "in": "query", - "name": "date_from", - "type": "string", - "x-example": "2026-03-01" + "name": "num", + "type": "integer", + "x-example": 20 }, { - "description": "Date range end in YYYY-MM-DD; currently rejected by upstream", + "description": "Results page, 0-indexed, default 0", "in": "query", - "name": "date_to", - "type": "string", - "x-example": "2026-03-30" + "name": "page", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -547007,35 +630928,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trustpilot.businessReviewsResponseDoc" + "$ref": "#/definitions/usptoppubs.searchResponseDoc" } }, "400": { - "description": "Missing or invalid path/query parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Business not found", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Rate limit exceeded", + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Trustpilot upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -547046,19 +630961,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get Trustpilot business reviews", + "summary": "Search USPTO's own patent full-text search index", "tags": [ - "Trustpilot" + "USPTO Patent Public Search" ] } }, - "/trustpilot/categories": { + "/vanguardng/article": { "get": { - "consumes": [ - "application/json" + "description": "Returns one Vanguard (Nigeria) story by its `url`, a vanguardngr.com link in the `/YYYY/MM//` form; section pages and feeds are rejected. The response has the title, description, times, section, authors, lead image and body `paragraphs`. Vanguard has no paywall, so `paywalled` is never set.", + "operationId": "vanguardng-article", + "parameters": [ + { + "description": "Canonical Vanguard article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.vanguardngr.com/2026/09/nigerias-trauma-burden-calls-for-coordinated-care-orthopaedic-surgeons/" + } ], - "description": "Lists the Trustpilot category index grouped by top-level category. Each group has its name, slug and URL, and an `items` list of subcategories with their own name, slug and URL. It takes no parameters.", - "operationId": "trustpilot-categories", "produces": [ "application/json" ], @@ -547066,29 +630988,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trustpilot.categoriesResponseDoc" - } - }, - "404": { - "description": "Categories not found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, - "429": { - "description": "Rate limit exceeded", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Trustpilot upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -547099,50 +631015,74 @@ "ApiKeyAuth": [] } ], - "summary": "Get Trustpilot categories", + "summary": "Get Vanguard article content", "tags": [ - "Trustpilot" + "Vanguard" ] } }, - "/trustpilot/categories/search": { + "/vanguardng/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Searches Trustpilot categories for the required `q`. `size` sets the maximum number of categories (default 20, from 1 to 100), `country` is a two-letter code (default US) and `locale` uses `ll-CC` format (default `en-US`). Each category has its `category_id`, `display_name` and `top_level_category_id`.", - "operationId": "trustpilot-category-search", + "description": "Vanguard publishes no author profile pages, so this returns the recent articles in one public feed (site-wide by default, or one section) credited to a byline, matched on the on-page \"By \" line or the site's creator field.", + "operationId": "vanguardng-author", "parameters": [ { - "description": "Search query", + "description": "Byline to look for (3 to 80 characters), e.g. Chioma Obinna", "in": "query", - "name": "q", + "name": "name", "required": true, "type": "string", - "x-example": "openai" - }, - { - "description": "Two-letter country code; defaults to US", - "in": "query", - "name": "country", - "type": "string", - "x-example": "US" - }, - { - "description": "Locale in ll-CC format; defaults to en-US", - "in": "query", - "name": "locale", - "type": "string", - "x-example": "en-US" + "x-example": "Chioma Obinna" }, { - "description": "Maximum number of categories; defaults to 20", + "description": "Optional section slug to scan instead of the site-wide feed", + "enum": [ + "national-news", + "top-stories", + "more-news", + "politics", + "business", + "business/energy", + "business/insurance-and-you", + "sports", + "entertainment", + "health", + "education-2", + "technology", + "innovation-2", + "aviation", + "agric", + "motoring", + "pension", + "foreign", + "editorial", + "opinion", + "columns", + "viewpoints", + "discourse", + "features", + "special-reports", + "thearts", + "cartoons", + "romance-an-relationships", + "homes-property", + "travel-and-tourism", + "style/allure/interviews", + "tribute", + "promoted", + "videos", + "top-podcasts", + "national-news/icymi", + "more", + "more/education", + "more/interview", + "more/labour", + "more/law-and-human-rights", + "more/metro" + ], "in": "query", - "maximum": 100, - "minimum": 1, - "name": "size", - "type": "integer", - "x-example": 3 + "name": "section", + "type": "string" } ], "produces": [ @@ -547152,35 +631092,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trustpilot.categorySearchResponseDoc" + "$ref": "#/definitions/publicnews.vanguardngAuthorResponseDoc" } }, "400": { - "description": "Missing or invalid query parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "No results found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Rate limit exceeded", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal server error", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Trustpilot upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -547191,35 +631119,68 @@ "ApiKeyAuth": [] } ], - "summary": "Search Trustpilot categories", + "summary": "Find recent Vanguard articles by byline", "tags": [ - "Trustpilot" + "Vanguard" ] } }, - "/trustpilot/category/{slug}": { + "/vanguardng/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a Trustpilot category by `slug` (for example `software_company`), with the companies listed on one page; `page` is 1-based and defaults to 1. Each company has its display name, `identifying_name`, `trust_score`, `stars`, `review_count`, location, contact details, categories and Trustpilot URL. Also returns breadcrumbs, newest companies and `pagination.has_next_page`.", - "operationId": "trustpilot-category", + "description": "Lists up to 20 recent Vanguard stories from one category. `section` is required and takes one of 42 slugs such as `national-news`, `politics`, `business`, `sports`, `business/energy` or `more/metro`. Items carry title, URL, summary, author and publication time. An unknown section returns an invalid-params error.", + "operationId": "vanguardng-headlines", "parameters": [ { - "description": "Trustpilot category slug", - "in": "path", - "name": "slug", + "description": "Vanguard section slug", + "enum": [ + "national-news", + "top-stories", + "more-news", + "politics", + "business", + "business/energy", + "business/insurance-and-you", + "sports", + "entertainment", + "health", + "education-2", + "technology", + "innovation-2", + "aviation", + "agric", + "motoring", + "pension", + "foreign", + "editorial", + "opinion", + "columns", + "viewpoints", + "discourse", + "features", + "special-reports", + "thearts", + "cartoons", + "romance-an-relationships", + "homes-property", + "travel-and-tourism", + "style/allure/interviews", + "tribute", + "promoted", + "videos", + "top-podcasts", + "national-news/icymi", + "more", + "more/education", + "more/interview", + "more/labour", + "more/law-and-human-rights", + "more/metro" + ], + "in": "query", + "name": "section", "required": true, "type": "string", - "x-example": "software_company" - }, - { - "description": "1-based page number; defaults to 1", - "in": "query", - "minimum": 1, - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "national-news" } ], "produces": [ @@ -547229,35 +631190,49 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/trustpilot.categoryResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { - "description": "Missing or invalid path/query parameters", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Category not found", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Rate limit exceeded", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } - }, - "500": { - "description": "Internal server error", + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Vanguard section headlines", + "tags": [ + "Vanguard" + ] + } + }, + "/vanguardng/news": { + "get": { + "description": "Returns the latest 20 Vanguard (Nigeria) stories with no parameters. Each has a title, URL, summary, publication time and image where available. `author` is the site's account name, often a desk account such as `Nwafor`; use `vanguardng-article` for the on-page byline.", + "operationId": "vanguardng-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "503": { - "description": "Trustpilot upstream request failed", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -547268,27 +631243,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get Trustpilot category detail", + "summary": "Get Vanguard top stories", "tags": [ - "Trustpilot" + "Vanguard" ] } }, - "/twitch/channel": { + "/vanguardng/sections": { "get": { - "consumes": [ + "description": "Lists the 42 Vanguard sections accepted by `vanguardng-headlines`. Each has a `slug` (nested categories contain a `/`, as in `business/energy`), a display `name` and a feed `url`. `national-news` is the site's News category and `promoted` is sponsored content. Takes no parameters.", + "operationId": "vanguardng-sections", + "produces": [ "application/json" ], - "description": "Returns a Twitch channel's profile (partner status, team, last broadcast title) plus its current live status (started time and game/category, when live).", - "operationId": "twitch-channel", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Vanguard sections", + "tags": [ + "Vanguard" + ] + } + }, + "/vanityfair/article": { + "get": { + "description": "Returns public Vanity Fair article metadata and body paragraphs from a canonical article URL. A story Vanity Fair marks as subscriber-only in its own page metadata is reported as a permission error instead of a partial or fabricated body.", + "operationId": "vanityfair-article", "parameters": [ { - "description": "Twitch channel login (the lowercase URL slug, e.g. caedrel for twitch.tv/caedrel)", + "description": "Canonical Vanity Fair article URL", "in": "query", - "name": "login", + "name": "url", "required": true, "type": "string", - "x-example": "caedrel" + "x-example": "https://www.vanityfair.com/story/example-article" } ], "produces": [ @@ -547298,7 +631296,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/twitch.channelResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -547307,14 +631305,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Forbidden", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -547331,34 +631329,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Twitch channel's profile and live status", + "summary": "Get Vanity Fair article content", "tags": [ - "Twitch" + "Vanity Fair" ] } }, - "/twitch/clips": { + "/vanityfair/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a Twitch channel's clips (last 7 days), most-viewed first: title, view count, duration, curator, and the game it was recorded under.", - "operationId": "twitch-clips", + "description": "Returns a Vanity Fair contributor profile from their canonical `url` (`www.vanityfair.com/contributor/`, required). The response has the name, job title when present, biography, headshot, social links and recent articles with title, URL and publication time.", + "operationId": "vanityfair-author", "parameters": [ { - "description": "Twitch channel login (the lowercase URL slug, e.g. caedrel for twitch.tv/caedrel)", + "description": "Canonical Vanity Fair contributor URL", "in": "query", - "name": "login", + "name": "url", "required": true, "type": "string", - "x-example": "caedrel" - }, - { - "description": "Number of clips to return (default 20, max 100)", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "x-example": "https://www.vanityfair.com/contributor/example-writer" } ], "produces": [ @@ -547368,7 +631356,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/twitch.clipsResponseDoc" + "$ref": "#/definitions/publicnews.vanityFairAuthorResponseDoc" } }, "400": { @@ -547383,12 +631371,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -547401,34 +631383,38 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Twitch channel's clips", + "summary": "Get a Vanity Fair contributor profile", "tags": [ - "Twitch" + "Vanity Fair" ] } }, - "/twitch/schedule": { + "/vanityfair/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a Twitch channel's upcoming broadcast schedule -- planned segments with title, start/end time, and game/category -- starting today. A channel with no schedule configured returns an empty segments list, not an error.", - "operationId": "twitch-schedule", + "description": "Lists the current headlines for one Vanity Fair section. `section` is required and takes `hollywood`, `movies`, `television`, `award-season`, `what-is-cinema`, `culture`, `politics`, `business`, `style`, `beauty`, `fashion` or `royals`. Each item has its title and URL.", + "operationId": "vanityfair-headlines", "parameters": [ { - "description": "Twitch channel login (the lowercase URL slug)", + "description": "Vanity Fair section slug", + "enum": [ + "hollywood", + "movies", + "television", + "award-season", + "what-is-cinema", + "culture", + "politics", + "business", + "style", + "beauty", + "fashion", + "royals" + ], "in": "query", - "name": "channel", + "name": "section", "required": true, "type": "string", - "x-example": "caedrel" - }, - { - "description": "Number of weeks ahead to return, starting today (default 1, max 4)", - "in": "query", - "name": "weeks", - "type": "integer", - "x-example": 1 + "x-example": "hollywood" } ], "produces": [ @@ -547438,7 +631424,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/twitch.scheduleResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -547447,11 +631433,37 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Vanity Fair section headlines", + "tags": [ + "Vanity Fair" + ] + } + }, + "/vanityfair/news": { + "get": { + "description": "Returns the latest Vanity Fair top stories and takes no parameters. Each item has its title, canonical URL, summary, author, publication time and lead image.", + "operationId": "vanityfair-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -547471,34 +631483,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Twitch channel's broadcast schedule", + "summary": "Get Vanity Fair top stories", "tags": [ - "Twitch" + "Vanity Fair" ] } }, - "/twitch/search": { + "/vanityfair/sections": { "get": { - "consumes": [ + "description": "Returns the Vanity Fair section inventory: Hollywood (plus its Movies, Television, and Award Season sub-verticals), Arts & Culture, Politics, Business, and Style (plus its Beauty, Fashion, and Royals sub-verticals), each linking to its public listing page.", + "operationId": "vanityfair-sections", + "produces": [ "application/json" ], - "description": "Returns mixed category and channel matches for a query -- live channels include current viewer count and stream title. Sourced from Twitch's own search-typeahead surface (a capped suggestion list, not a fully paginated results page).", - "operationId": "twitch-search", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Vanity Fair sections", + "tags": [ + "Vanity Fair" + ] + } + }, + "/variety/article": { + "get": { + "description": "Returns one Variety article by its canonical `variety.com` `url`, in the form `////-/`. The response has the title, description, authors, section, published and updated times, lead image, body `paragraphs` and a `paywalled` flag.", + "operationId": "variety-article", "parameters": [ { - "description": "Search text (category/game name or channel name)", + "description": "Canonical Variety article URL", "in": "query", - "name": "query", + "name": "url", "required": true, "type": "string", - "x-example": "valorant" - }, - { - "description": "Number of results to return (default 10, max 30)", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 10 + "x-example": "https://variety.com/2026/music/global/oasis-more-live-27-shows-uk-italy-germany-1236873146/" } ], "produces": [ @@ -547508,7 +631536,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/twitch.searchResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -547517,8 +631545,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -547535,34 +631563,37 @@ "ApiKeyAuth": [] } ], - "summary": "Search Twitch channels and games/categories", + "summary": "Get Variety article content", "tags": [ - "Twitch" + "Variety" ] } }, - "/twitch/streams": { + "/variety/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the top currently-live streams for a Twitch game/category, ranked by viewer count: title, viewer count, broadcaster, and tags.", - "operationId": "twitch-streams", + "description": "Returns a Variety author profile with name, biography, photo, social links and one page of recent articles. Give either `slug` (such as `ellise-shafer`) or an author `url`, which may include a `/page//` segment; `page` (default 1) overrides it. `has_next_page` shows whether another page exists.", + "operationId": "variety-author", "parameters": [ { - "description": "Twitch game/category slug (the lowercase URL slug from twitch.tv/directory/category/{slug})", + "description": "Author slug, e.g. ellise-shafer", "in": "query", - "name": "game", - "required": true, + "name": "slug", "type": "string", - "x-example": "league-of-legends" + "x-example": "ellise-shafer" }, { - "description": "Number of streams to return (default 20, max 100)", + "description": "Canonical variety.com/author/ URL, optionally with a /page// segment; alternative to slug", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "name": "url", + "type": "string", + "x-example": "https://variety.com/author/ellise-shafer/" + }, + { + "default": 1, + "description": "1-based page number; overrides any page number in url", + "in": "query", + "name": "page", + "type": "integer" } ], "produces": [ @@ -547572,7 +631603,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/twitch.streamsResponseDoc" + "$ref": "#/definitions/publicnews.varietyAuthorResponseDoc" } }, "400": { @@ -547587,12 +631618,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -547605,27 +631630,50 @@ "ApiKeyAuth": [] } ], - "summary": "Get the top live streams for a Twitch game/category", + "summary": "Get a Variety author profile", "tags": [ - "Twitch" + "Variety" ] } }, - "/twitch/team": { + "/variety/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns a Twitch team's full member roster, with live status and viewer count for whoever is currently live, plus team-level metadata (banner, logo, description, owner).", - "operationId": "twitch-team", + "description": "Lists fresh Variety headlines for one vertical. `section` is required and takes a slug such as `film`, `music`, `tv`, `biz`, `awards`, `gaming`, `global`, `legit` or `vip`; `variety-sections` lists all 24. Each item has its title and URL, plus summary, author, publication time and image when the outlet provides them.", + "operationId": "variety-headlines", "parameters": [ { - "description": "Twitch team slug (the lowercase URL slug from twitch.tv/team/{slug})", + "description": "Variety vertical slug", + "enum": [ + "artisans", + "awards", + "biz", + "data", + "digital", + "dirt", + "film", + "gaming", + "global", + "legit", + "music", + "politics", + "scene", + "shopping", + "sports", + "streaming", + "theater", + "tune-in", + "tv", + "video", + "vintage", + "vip", + "vivant", + "voices" + ], "in": "query", - "name": "team", + "name": "section", "required": true, "type": "string", - "x-example": "yumetalent" + "x-example": "artisans" } ], "produces": [ @@ -547635,7 +631683,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/twitch.teamResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -547644,11 +631692,37 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Variety section headlines", + "tags": [ + "Variety" + ] + } + }, + "/variety/news": { + "get": { + "description": "Returns the latest Variety top stories with no parameters. Each item has its title, URL, summary, author, publication time and image. Item URLs can be passed to `variety-article` for the body.", + "operationId": "variety-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -547668,28 +631742,45 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Twitch team's roster", + "summary": "Get Variety top stories", "tags": [ - "Twitch" + "Variety" ] } }, - "/twitch/top-games": { + "/variety/sections": { "get": { - "consumes": [ + "description": "Lists the 24 Variety verticals accepted by `variety-headlines`, such as `film`, `tv`, `music`, `biz`, `awards`, `legit` and `voices`. Each has a `slug`, a display `name` and a `url`. Takes no parameters.", + "operationId": "variety-sections", + "produces": [ "application/json" ], - "description": "Returns the top games/categories site-wide, ranked by total current viewers across all live streams under each one.", - "operationId": "twitch-top-games", - "parameters": [ + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ { - "description": "Number of games to return (default 20, max 100)", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "ApiKeyAuth": [] } ], + "summary": "Get Variety sections", + "tags": [ + "Variety" + ] + } + }, + "/vestiaire/brands": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns Vestiaire Collective's full brand directory (id, name, url), not just brands with active listings for a given search -- resolves search's otherwise-opaque brand_id filter, and a search response's facets.brands, to the complete set of valid ids. Public data, sourced from Vestiaire Collective's own brand-directory page.", + "operationId": "vestiaire-brands", "produces": [ "application/json" ], @@ -547697,17 +631788,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/twitch.topGamesResponseDoc" + "$ref": "#/definitions/vestiaire.brandsResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -547724,36 +631815,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get Twitch's top games/categories", + "summary": "Vestiaire Collective's full brand directory", "tags": [ - "Twitch" + "Vestiaire" ] } }, - "/twitch/videos": { + "/vestiaire/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Twitch channel's past-broadcast videos (VODs), ranked by view count: title, view count, length, publish date, and the game it was recorded under.", - "operationId": "twitch-videos", - "parameters": [ - { - "description": "Twitch channel login (the lowercase URL slug, e.g. lck for twitch.tv/lck)", - "in": "query", - "name": "login", - "required": true, - "type": "string", - "x-example": "lck" - }, - { - "description": "Number of videos to return (default 20, max 100)", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 - } - ], + "description": "Returns the full Vestiaire Collective category taxonomy: universes (Women, Men, Kids) at the root, with up to three nested category levels beneath each. Every id returned here is accepted by /vestiaire/search's category_id filter.", + "operationId": "vestiaire-categories", "produces": [ "application/json" ], @@ -547761,20 +631835,55 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/twitch.videosResponseDoc" + "$ref": "#/definitions/vestiaire.categoriesResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Vestiaire Collective category taxonomy", + "tags": [ + "Vestiaire" + ] + } + }, + "/vestiaire/conditions": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the fixed set of condition ids accepted by /vestiaire/search's condition_id filter, with each id's display name and current listing count.", + "operationId": "vestiaire-conditions", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/vestiaire.conditionsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -547782,6 +631891,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -547794,34 +631909,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Twitch channel's videos (VODs)", + "summary": "Vestiaire Collective condition values", "tags": [ - "Twitch" + "Vestiaire" ] } }, - "/twitch/vod-comments": { + "/vestiaire/product": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a Twitch VOD's chat replay (past-broadcast chat messages), starting at a given point in the video's timeline. Paginate forward by re-requesting with the last returned comment's offset_seconds.", - "operationId": "twitch-vod-comments", + "description": "Returns a single Vestiaire Collective listing's public detail: price, brand, category, condition, material, color, size, seller summary, and photos. `path` is the listing's URL or site-relative path, as returned by /vestiaire/search's `url` field -- the numeric id alone cannot be resolved to a page. Public data, sourced from Vestiaire Collective's own listing page.", + "operationId": "vestiaire-product", "parameters": [ { - "description": "Twitch VOD/video id (the numeric id from twitch.tv/videos/{id})", + "description": "Listing URL or path, from a search result's url field", "in": "query", - "name": "video", + "name": "path", "required": true, "type": "string", - "x-example": "2845804307" - }, - { - "description": "Start the page from this point in the VOD's timeline, in seconds (default 0)", - "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "x-example": "/women-clothing/biker-jackets/off-white/black-leather-off-white-biker-jacket-70860454.shtml" } ], "produces": [ @@ -547831,7 +631939,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/twitch.vodCommentsResponseDoc" + "$ref": "#/definitions/vestiaire.productResponseDoc" } }, "400": { @@ -547852,6 +631960,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -547864,47 +631978,81 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Twitch VOD's chat replay", + "summary": "Vestiaire Collective listing detail", "tags": [ - "Twitch" + "Vestiaire" ] } }, - "/ubereats/feed": { + "/vestiaire/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns restaurants delivering to a specific location: name, rating, review count, delivery estimate, cuisine tags, and cover image.", - "operationId": "ubereats-feed", + "description": "Searches Vestiaire Collective's public pre-owned luxury resale catalog by keyword, category, brand, and condition, with sort and pagination. `sort` values: `relevance`, `price_asc`, `price_desc`, `recency`. `category_id` and `condition_id` come from /vestiaire/categories and /vestiaire/conditions. `page` * `per_page` cannot exceed an offset of 1000 (the upstream service's own pagination limit) -- narrow the query instead of paging deeper. Public data, sourced from Vestiaire Collective's own search service.", + "operationId": "vestiaire-search", "parameters": [ { - "description": "Delivery search center latitude", + "description": "Keyword search text", "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 37.7749 + "name": "q", + "type": "string", + "x-example": "chanel bag" }, { - "description": "Delivery search center longitude", + "description": "Category id, from /vestiaire/categories", "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -122.4194 + "name": "category_id", + "type": "string", + "x-example": "5" }, { - "description": "Result offset for the location feed. Default 0", + "description": "Brand id, from a prior search's facets.brands", "in": "query", - "name": "offset", - "type": "integer" + "name": "brand_id", + "type": "string", + "x-example": "50" }, { - "description": "Number of restaurants to return, clamped to 50. Default 20", + "description": "Condition id. Allowed values: 1, 2, 3, 4, 5", + "enum": [ + "1", + "2", + "3", + "4", + "5" + ], "in": "query", - "name": "limit", - "type": "integer" + "name": "condition_id", + "type": "string", + "x-example": "3" + }, + { + "description": "Sort order. Allowed values: relevance, price_asc, price_desc, recency", + "enum": [ + "relevance", + "price_asc", + "price_desc", + "recency" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "price_asc" + }, + { + "description": "Page number, starting at 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Results per page, up to 60", + "in": "query", + "name": "per_page", + "type": "integer", + "x-example": 24 } ], "produces": [ @@ -547914,7 +632062,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ubereats.feedResponseDoc" + "$ref": "#/definitions/vestiaire.searchResponseDoc" } }, "400": { @@ -547923,6 +632071,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -547941,60 +632101,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse UberEats location feed", + "summary": "Vestiaire Collective listing search", "tags": [ - "UberEats" + "Vestiaire" ] } }, - "/ubereats/search": { + "/vestiaire/search-sellers": { "get": { "consumes": [ "application/json" ], - "description": "Returns restaurants delivering to a location: name, rating, review count, delivery estimate, cuisine tags, and image. Pass a keyword to search by name/cuisine/dish, or omit it to browse the general feed for that location.", - "operationId": "ubereats-search", + "description": "Finds Vestiaire Collective sellers by username or first name. A matched result's id can be passed directly to GET /vestiaire/seller for that seller's full public storefront profile. Public data, sourced from Vestiaire Collective's own member-search service.", + "operationId": "vestiaire-search-sellers", "parameters": [ { - "description": "Delivery search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 37.7749 - }, - { - "description": "Delivery search center longitude", + "description": "Seller username or first name to search for", "in": "query", - "name": "longitude", + "name": "q", "required": true, - "type": "number", - "x-example": -122.4194 - }, - { - "description": "Keyword — restaurant name, cuisine, or dish", - "in": "query", - "name": "query", "type": "string", - "x-example": "pizza" - }, - { - "description": "Result offset for the location feed (used only when query is omitted). Default 0", - "in": "query", - "name": "offset", - "type": "integer" - }, - { - "description": "Number of restaurants to return, clamped to 50. Default 20", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Opaque pagination cursor from a previous keyword-search response", - "in": "query", - "name": "cursor", - "type": "string" + "x-example": "michelle" } ], "produces": [ @@ -548004,7 +632131,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ubereats.searchResponseDoc" + "$ref": "#/definitions/vestiaire.searchSellersResponseDoc" } }, "400": { @@ -548013,6 +632140,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -548031,27 +632164,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search UberEats restaurants", + "summary": "Search Vestiaire Collective sellers by name", "tags": [ - "UberEats" + "Vestiaire" ] } }, - "/ubereats/store/{store_id}": { + "/vestiaire/seller": { "get": { "consumes": [ "application/json" ], - "description": "Returns an UberEats store: address, phone, rating, cuisine tags, hours tagline, and the full menu (sections with items, descriptions, and prices).", - "operationId": "ubereats-store", + "description": "Returns a Vestiaire Collective seller's public storefront profile: username, country, segment, aggregate sold/listed/bought counts, and follower/following counts. `id` is the numeric seller id, as returned by /vestiaire/search's `seller_id` field or /vestiaire/product's `seller.id`. Public data, sourced from Vestiaire Collective's own seller profile page.", + "operationId": "vestiaire-seller", "parameters": [ { - "description": "UberEats store UUID, as returned by the search endpoint's storeUuid field", - "in": "path", - "name": "store_id", + "description": "Seller id", + "in": "query", + "name": "id", "required": true, "type": "string", - "x-example": "259fe6e9-9e3a-429d-ae24-be5eda54ba64" + "x-example": "36526194" } ], "produces": [ @@ -548061,7 +632194,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ubereats.storeResponseDoc" + "$ref": "#/definitions/vestiaire.sellerResponseDoc" } }, "400": { @@ -548076,6 +632209,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -548094,27 +632233,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get an UberEats store", + "summary": "Vestiaire Collective seller profile", "tags": [ - "UberEats" + "Vestiaire" ] } }, - "/ubereats/store/{store_id}/menu": { + "/vestiaire/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns the full menu for an UberEats store: section titles, items, item descriptions, prices, and availability status.", - "operationId": "ubereats-store-menu", + "description": "Returns Vestiaire Collective's own search-box autocomplete suggestions for a partial query: matching brands plus completed search phrases. Public data, sourced from Vestiaire Collective's own search-suggestions service.", + "operationId": "vestiaire-suggest", "parameters": [ { - "description": "UberEats store UUID, as returned by the search endpoint's storeUuid field", - "in": "path", - "name": "store_id", + "description": "Partial search query to autocomplete", + "in": "query", + "name": "q", "required": true, "type": "string", - "x-example": "259fe6e9-9e3a-429d-ae24-be5eda54ba64" + "x-example": "chane" } ], "produces": [ @@ -548124,7 +632263,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ubereats.menuResponseDoc" + "$ref": "#/definitions/vestiaire.suggestResponseDoc" } }, "400": { @@ -548133,8 +632272,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -548157,27 +632296,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get an UberEats store menu", + "summary": "Vestiaire Collective search-box autocomplete", "tags": [ - "UberEats" + "Vestiaire" ] } }, - "/ubereats/store/{store_id}/reviews": { + "/vice/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the reviews snapshot embedded in an UberEats store page: aggregate rating, review count, and a sample of recent reviews (reviewer name, text, and relative/absolute date). This is a single on-page snapshot, not a full paginated feed. A store with no written reviews returns an empty reviews list.", - "operationId": "ubereats-store-reviews", + "description": "Returns one VICE article by its canonical `url`, in the form `www.vice.com/en/article/`. The response has the title, description, authors, section, published and updated times, lead image and body `paragraphs`, plus a `paywalled` flag.", + "operationId": "vice-article", "parameters": [ { - "description": "UberEats store UUID, as returned by the search endpoint's storeUuid field", - "in": "path", - "name": "store_id", + "description": "Canonical VICE article URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "259fe6e9-9e3a-429d-ae24-be5eda54ba64" + "x-example": "https://www.vice.com/en/article/example-article/" } ], "produces": [ @@ -548187,7 +632323,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ubereats.storeReviewsResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -548202,8 +632338,56 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get VICE article content", + "tags": [ + "VICE" + ] + } + }, + "/vice/author": { + "get": { + "description": "Returns a VICE contributor profile from their canonical `url` (`www.vice.com/en/contributor/`, required). The response has the name and headshot when present, the biography paragraphs and recent articles with title, URL, summary, author, publication time and image.", + "operationId": "vice-author", + "parameters": [ + { + "description": "Canonical VICE contributor URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://www.vice.com/en/contributor/example-writer/" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.viceAuthorResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -548220,36 +632404,38 @@ "ApiKeyAuth": [] } ], - "summary": "Get UberEats store reviews", + "summary": "Get a VICE contributor profile", "tags": [ - "UberEats" + "VICE" ] } }, - "/ulta/categories": { + "/vice/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Lists Ulta Beauty's own storefront category navigation: department, group, name, and a URL usable directly as GET /ulta/category's own category parameter. Closes the discovery gap of not already knowing a category path. department, if set, filters to just that department's entries. group is empty for a department's own top-level link or a group's own heading link, and set to that group's name for the leaf categories nested under it. The exact same real category can legitimately appear more than once under a different department/group when the site's own navigation cross-lists it.", - "operationId": "ulta-categories", + "description": "Returns fresh headlines from one VICE section, either its public RSS feed (News, Life, Tech, Music) or its public listing page for the remaining sections.", + "operationId": "vice-headlines", "parameters": [ { - "description": "Filter to one department", + "description": "VICE section slug", "enum": [ - "makeup-nails", - "skin-care", - "hair-care", - "fragrance", - "body-care", - "wellness", - "mens-care", - "tools-brushes" + "news", + "life", + "tech", + "music", + "munchies", + "waypoint", + "rec-room", + "membership", + "via-vice", + "spotlights", + "theunstoppables", + "eu" ], "in": "query", - "name": "department", + "name": "section", + "required": true, "type": "string", - "x-example": "makeup-nails" + "x-example": "news" } ], "produces": [ @@ -548259,7 +632445,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ulta.categoriesResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -548268,6 +632454,38 @@ "$ref": "#/definitions/app.Response" } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get VICE section headlines", + "tags": [ + "VICE" + ] + } + }, + "/vice/news": { + "get": { + "description": "Returns the latest VICE stories with no parameters. Each item has its title and URL, plus summary, author, publication time and lead image when the outlet provides them. Pass an item URL to `vice-article` to read the story.", + "operationId": "vice-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -548286,37 +632504,83 @@ "ApiKeyAuth": [] } ], - "summary": "List Ulta Beauty storefront categories", + "summary": "Get VICE top stories", "tags": [ - "Ulta Beauty" + "VICE" ] } }, - "/ulta/category": { + "/vice/sections": { + "get": { + "description": "Returns the VICE section inventory: the site's own 12 curated sections (News, Life, Tech, Music, and others), each linking to its public listing page.", + "operationId": "vice-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get VICE sections", + "tags": [ + "VICE" + ] + } + }, + "/vinted/brand": { "get": { "consumes": [ "application/json" ], - "description": "Browses an Ulta Beauty category page's product grid, with real page-based pagination and the category's own guided-navigation refinement options. category accepts a category path or full URL copied from Ulta's own site navigation (e.g. shop/makeup/eyes/mascara). filter narrows results using Ulta's own guided-navigation facet-code shape (e.g. BENEFIT--WATERPROOF, or a comma-joined combination of codes) -- discover valid codes for a category from that category's own response facets field, whose value is ready to use directly as this parameter. An unrecognized category returns 404.", - "operationId": "ulta-category", + "description": "Returns Vinted listings for a specific brand, with optional price filtering and sort order. `order` values: `relevance`, `newest_first`, `price_high_to_low`, `price_low_to_high`. Public data, sourced from Vinted's own server-rendered brand page.", + "operationId": "vinted-brand", "parameters": [ { - "description": "Ulta category path or URL", + "description": "Numeric Vinted brand ID, from a /vinted/item result's brand link", "in": "query", - "name": "category", + "name": "id", "required": true, "type": "string", - "x-example": "shop/makeup/eyes/mascara" + "x-example": "386688" }, { - "description": "Guided-navigation facet code(s), comma-joined for multiple", + "description": "Minimum price", "in": "query", - "name": "filter", + "name": "price_from", + "type": "number", + "x-example": 10 + }, + { + "description": "Maximum price", + "in": "query", + "name": "price_to", + "type": "number", + "x-example": 50 + }, + { + "description": "Sort order. Allowed values: relevance, newest_first, price_high_to_low, price_low_to_high", + "enum": [ + "relevance", + "newest_first", + "price_high_to_low", + "price_low_to_high" + ], + "in": "query", + "name": "order", "type": "string", - "x-example": "BENEFIT--WATERPROOF" + "x-example": "price_low_to_high" }, { - "description": "Result page, 1-based, defaults to 1", + "description": "Page number, starting at 1", "in": "query", "name": "page", "type": "integer", @@ -548330,7 +632594,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ulta.categoryResponseDoc" + "$ref": "#/definitions/vinted.brandResponseDoc" } }, "400": { @@ -548351,6 +632615,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -548363,36 +632633,19 @@ "ApiKeyAuth": [] } ], - "summary": "Browse an Ulta Beauty category page", + "summary": "Vinted listings for a brand", "tags": [ - "Ulta Beauty" + "Vinted" ] } }, - "/ulta/product/questions": { + "/vinted/brands": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of an Ulta Beauty product's customer questions, each with every answer it received. product_id is taken from a search result's product_id field or a product page's URL. A product with zero questions, or a well-formed but unrecognized product_id, returns a normal, empty result rather than an error.", - "operationId": "ulta-product-questions", - "parameters": [ - { - "description": "Ulta product id, from a search result's product_id field", - "in": "query", - "name": "product_id", - "required": true, - "type": "string", - "x-example": "pimprod2020260" - }, - { - "description": "Result page, 1-based, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - } - ], + "description": "Returns Vinted's \"Popular brands\" directory. This is Vinted's own curated list, not an exhaustive list of every brand in its catalog. Each entry's `id` is usable directly as the `id` query parameter to /vinted/brand. Public data, sourced from Vinted's own server-rendered brands page.", + "operationId": "vinted-brands", "produces": [ "application/json" ], @@ -548400,17 +632653,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ulta.productQuestionsResponseDoc" + "$ref": "#/definitions/vinted.brandsResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -548427,30 +632680,57 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Ulta Beauty product's customer questions and answers", + "summary": "Vinted popular-brands directory", "tags": [ - "Ulta Beauty" + "Vinted" ] } }, - "/ulta/product/reviews": { + "/vinted/catalog": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of an Ulta Beauty product's customer reviews, plus the retailer's own site-wide rating summary (rating count, average rating, recommended ratio, rating histogram) for the product. product_id is taken from a search result's product_id field or a product page's URL. A product with zero reviews, or a well-formed but unrecognized product_id, returns a normal, empty result rather than an error.", - "operationId": "ulta-product-reviews", + "description": "Returns Vinted resale listings matching a text search, with optional price filtering and sort order. `order` values: `relevance`, `newest_first`, `price_high_to_low`, `price_low_to_high`. Public data, sourced from Vinted's own server-rendered catalog page.", + "operationId": "vinted-catalog", "parameters": [ { - "description": "Ulta product id, from a search result's product_id field", + "description": "Search text", "in": "query", - "name": "product_id", + "name": "search_text", "required": true, "type": "string", - "x-example": "pimprod2020260" + "x-example": "jacket" }, { - "description": "Result page, 1-based, defaults to 1", + "description": "Minimum price", + "in": "query", + "name": "price_from", + "type": "number", + "x-example": 10 + }, + { + "description": "Maximum price", + "in": "query", + "name": "price_to", + "type": "number", + "x-example": 50 + }, + { + "description": "Sort order. Allowed values: relevance, newest_first, price_high_to_low, price_low_to_high", + "enum": [ + "relevance", + "newest_first", + "price_high_to_low", + "price_low_to_high" + ], + "in": "query", + "name": "order", + "type": "string", + "x-example": "price_low_to_high" + }, + { + "description": "Page number, starting at 1", "in": "query", "name": "page", "type": "integer", @@ -548464,7 +632744,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ulta.productReviewsResponseDoc" + "$ref": "#/definitions/vinted.catalogResponseDoc" } }, "400": { @@ -548473,12 +632753,24 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -548491,36 +632783,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Ulta Beauty product's customer reviews", + "summary": "Vinted listing search", "tags": [ - "Ulta Beauty" + "Vinted" ] } }, - "/ulta/product/{productId}": { + "/vinted/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Ulta Beauty product's full detail: name, brand, description, category, pricing, rating, review count, images, and every purchasable color/shade variant. productId is taken from a search result's product_id field or a product page's URL (e.g. pimprod2020260). sku is optional and selects a specific color/shade variant; an omitted or invalid sku still resolves the base product using its own default variant. An unrecognized productId returns 404.", - "operationId": "ulta-product", - "parameters": [ - { - "description": "Ulta product id, from a search result's product_id field", - "in": "path", - "name": "productId", - "required": true, - "type": "string", - "x-example": "pimprod2020260" - }, - { - "description": "Numeric Ulta sku id selecting a specific color/shade variant", - "in": "query", - "name": "sku", - "type": "string", - "x-example": "2574523" - } - ], + "description": "Returns Vinted's top-level catalog categories (e.g. Women, Men, Kids, Home, Electronics, Sports, Entertainment, Hobbies & collectibles). This is the root level only -- Vinted's full category tree goes several levels deeper on the live site, but deeper levels aren't server-rendered so aren't covered here. Each entry's `id` is usable directly as the `id` query parameter to /vinted/category. Public data, sourced from Vinted's own server-rendered catalog navigation.", + "operationId": "vinted-categories", "produces": [ "application/json" ], @@ -548528,23 +632803,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ulta.productDetailResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/vinted.categoriesResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -548561,30 +632830,57 @@ "ApiKeyAuth": [] } ], - "summary": "Get an Ulta Beauty product's full detail", + "summary": "Vinted top-level catalog categories", "tags": [ - "Ulta Beauty" + "Vinted" ] } }, - "/ulta/search": { + "/vinted/category": { "get": { "consumes": [ "application/json" ], - "description": "Searches Ulta Beauty's product catalog by keyword, with real page-based pagination. Returns products with brand, pricing, rating, and review count. An unrecognized/nonsense keyword returns a genuine empty result rather than a fallback set. Requesting a page beyond the available results returns a normal, empty result rather than an error.", - "operationId": "ulta-search", + "description": "Returns Vinted listings for a specific category, with optional price filtering and sort order. `order` values: `relevance`, `newest_first`, `price_high_to_low`, `price_low_to_high`. Public data, sourced from Vinted's own server-rendered category page.", + "operationId": "vinted-category", "parameters": [ { - "description": "Search keyword", + "description": "Numeric Vinted category ID, from a /vinted/item result's categories breadcrumb link", "in": "query", - "name": "query", + "name": "id", "required": true, "type": "string", - "x-example": "mascara" + "x-example": "1904" }, { - "description": "Result page, 1-based, defaults to 1", + "description": "Minimum price", + "in": "query", + "name": "price_from", + "type": "number", + "x-example": 10 + }, + { + "description": "Maximum price", + "in": "query", + "name": "price_to", + "type": "number", + "x-example": 50 + }, + { + "description": "Sort order. Allowed values: relevance, newest_first, price_high_to_low, price_low_to_high", + "enum": [ + "relevance", + "newest_first", + "price_high_to_low", + "price_low_to_high" + ], + "in": "query", + "name": "order", + "type": "string", + "x-example": "price_low_to_high" + }, + { + "description": "Page number, starting at 1", "in": "query", "name": "page", "type": "integer", @@ -548598,7 +632894,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ulta.searchResponseDoc" + "$ref": "#/definitions/vinted.categoryResponseDoc" } }, "400": { @@ -548607,12 +632903,24 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -548625,47 +632933,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Ulta Beauty products", + "summary": "Vinted listings for a category", "tags": [ - "Ulta Beauty" + "Vinted" ] } }, - "/ulta/stores": { + "/vinted/item": { "get": { "consumes": [ "application/json" ], - "description": "Returns Ulta Beauty physical retail store locations near a point: name, phone, full address, hours, services, and coordinates. Either search, or both lat and lng, is required. search is a free-text zip code, city, or address that is first resolved to coordinates; if it does not resolve to any location, a well-formed empty result is returned rather than an error. lat and lng, when given directly, skip that resolution step. radius_meters is optional (1000 to 50000, defaults to 25000). A location with no stores within the radius returns a well-formed empty result rather than an error.", - "operationId": "ulta-stores", + "description": "Returns a single Vinted listing's detail: title, description, brand, size, condition, material, color, price, category breadcrumb, and photos. Public data, sourced from Vinted's own server-rendered item page.", + "operationId": "vinted-item", "parameters": [ { - "description": "Free-text zip code, city, or address to resolve to coordinates", + "description": "Numeric Vinted item ID, from a /vinted/catalog result's id field", "in": "query", - "name": "search", + "name": "id", + "required": true, "type": "string", - "x-example": "60601" - }, - { - "description": "Latitude, requires lng", - "in": "query", - "name": "lat", - "type": "number", - "x-example": 41.8781 - }, - { - "description": "Longitude, requires lat", - "in": "query", - "name": "lng", - "type": "number", - "x-example": -87.6298 - }, - { - "description": "Search radius in meters, 1000 to 50000, defaults to 25000", - "in": "query", - "name": "radius_meters", - "type": "integer", - "x-example": 25000 + "x-example": "9595406652" } ], "produces": [ @@ -548675,7 +632963,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ulta.storesResponseDoc" + "$ref": "#/definitions/vinted.itemResponseDoc" } }, "400": { @@ -548684,12 +632972,24 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -548702,27 +633002,27 @@ "ApiKeyAuth": [] } ], - "summary": "Find nearby Ulta Beauty physical stores", + "summary": "A single Vinted listing's detail", "tags": [ - "Ulta Beauty" + "Vinted" ] } }, - "/ulta/suggest": { + "/vinted/member": { "get": { "consumes": [ "application/json" ], - "description": "Returns Ulta Beauty's own search-suggestion (typeahead) result for a partial search term: suggested search terms, each with its own top product matches, plus a featured top result matching what a real user sees at the top of the dropdown. A partial term with no matches returns a normal, empty result rather than an error.", - "operationId": "ulta-suggest", + "description": "Returns a Vinted seller's public storefront profile: username, self-disclosed coarse location, rating, and follower/following counts. Deliberately excludes online-presence and activity data (last-seen timestamps, upload-frequency badges) present on the live page. Public data, sourced from Vinted's own server-rendered member page.", + "operationId": "vinted-member", "parameters": [ { - "description": "Partial search term", + "description": "Numeric Vinted member ID, from a /vinted/item result's seller link", "in": "query", - "name": "query", + "name": "id", "required": true, "type": "string", - "x-example": "masc" + "x-example": "3159465141" } ], "produces": [ @@ -548732,7 +633032,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/ulta.suggestResponseDoc" + "$ref": "#/definitions/vinted.memberResponseDoc" } }, "400": { @@ -548741,12 +633041,24 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -548759,27 +633071,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Ulta Beauty search suggestions", + "summary": "A Vinted seller's public storefront profile", "tags": [ - "Ulta Beauty" + "Vinted" ] } }, - "/upwork/freelancer/{id}": { + "/vlr/event": { "get": { "consumes": [ "application/json" ], - "description": "Returns an Upwork freelancer profile: name, title, verification badge, overview, hourly rate, rating and review count, Job Success Score, location and local time, total jobs/hours worked, and recent client feedback (title, comment, date, client name, rating).", - "operationId": "upwork-freelancer", + "description": "Returns one VLR.gg event: name, series, dates, prize, location and the participating teams with ids. Use vlr-event-matches for its matches and vlr-team for a team.", + "operationId": "vlr-event", "parameters": [ { - "description": "Upwork freelancer id, the value after \\", - "in": "path", + "description": "Numeric VLR event id from vlr-events", + "in": "query", "name": "id", "required": true, "type": "string", - "x-example": "0157e03059a690281f" + "x-example": "3166" } ], "produces": [ @@ -548789,7 +633101,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/upwork.freelancerResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/vlr.EventDetail" + } + }, + "type": "object" + } + ] } }, "400": { @@ -548804,8 +633128,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -548822,27 +633146,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Upwork freelancer profile", + "summary": "VLR.gg Valorant event detail and participating teams", "tags": [ - "Upwork" + "VLR" ] } }, - "/upwork/job/{id}": { + "/vlr/event-agents": { "get": { "consumes": [ "application/json" ], - "description": "Returns an Upwork job posting: title, full description, employment type, budget (hourly range or fixed amount), location/remote type, experience level, duration, project type, proposal count, allowed applicant countries, and a summary of the posting client (member since, location, total spend, hires, hours, industry, company size).", - "operationId": "upwork-job", + "description": "Returns the agent pick-rate matrix of one VLR.gg event: for the whole event and for each map, the number of games, the attack-side and defense-side round win rates and the share of games in which each agent was played. Also returns, per map, each team's agents used and the agents picked in each of its matches (compositions). Use it to see an event's meta; vlr-stats gives per-player agent usage.", + "operationId": "vlr-event-agents", "parameters": [ { - "description": "Upwork job id, e.g. from a search result's id field", - "in": "path", + "description": "Numeric VLR event id from vlr-events", + "in": "query", "name": "id", "required": true, "type": "string", - "x-example": "022085006288356888767" + "x-example": "3166" } ], "produces": [ @@ -548852,7 +633176,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/upwork.jobResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/vlr.EventAgentsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -548867,8 +633203,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -548885,34 +633221,44 @@ "ApiKeyAuth": [] } ], - "summary": "Get Upwork job posting detail", + "summary": "VLR.gg Valorant event agent pick rates by map", "tags": [ - "Upwork" + "VLR" ] } }, - "/upwork/search": { + "/vlr/event-matches": { "get": { "consumes": [ "application/json" ], - "description": "Searches Upwork's public job listings by free-text keyword, returning job summaries (title, budget, experience level, duration, posted date, description snippet, skill tags).", - "operationId": "upwork-search", + "description": "Returns every match of one VLR.gg event (upcoming, live and completed) with teams, scores, stage and whether stats or VODs exist. Use vlr-match with a returned `id` for map detail.", + "operationId": "vlr-event-matches", "parameters": [ { - "description": "Free-text job search keyword", + "description": "Numeric VLR event id from vlr-events", "in": "query", - "name": "q", + "name": "id", "required": true, "type": "string", - "x-example": "python developer" + "x-example": "3166" }, { - "description": "1-based result page. Defaults to 1.", + "description": "Stage id from the stages list of an earlier response (a week, group or bracket round); omit for every stage", "in": "query", - "name": "page", - "type": "integer", - "x-example": 2 + "name": "series_id", + "type": "string", + "x-example": "6080" + }, + { + "description": "Match group; one of completed, upcoming; omit for both", + "enum": [ + "completed", + "upcoming" + ], + "in": "query", + "name": "group", + "type": "string" } ], "produces": [ @@ -548922,7 +633268,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/upwork.searchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/vlr.EventMatchesResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -548931,8 +633289,14 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -548949,54 +633313,90 @@ "ApiKeyAuth": [] } ], - "summary": "Search Upwork job postings", + "summary": "VLR.gg Valorant event match list", "tags": [ - "Upwork" + "VLR" ] } }, - "/usage/me/endpoints": { + "/vlr/event-stats": { "get": { "consumes": [ "application/json" ], - "description": "Returns the signed-in user's usage broken down by endpoint, ordered by request volume. `range` is `period` (the current billing period, default), `day`, `week`, `month` or `custom`, which takes RFC3339 `from` and `to`. `limit` defaults to 20 (max 100). Each item has `requests`, `charged_requests`, `failed_requests`, `non_billable_requests`, `credits` and `overage`. Authenticated with a dashboard JWT.", - "operationId": "usage-me-endpoints", + "description": "Returns the player statistics table of one VLR.gg event (rating, ACS, K:D, KAST, ADR, per-round rates, first kills, clutches, totals) for every player who appeared, optionally for one `side` (`all`, `t` attack, `ct` defend). For league-wide filtered statistics use vlr-stats.", + "operationId": "vlr-event-stats", "parameters": [ { - "description": "Time range preset. Defaults to the current billing period.", + "description": "Numeric VLR event id from vlr-events", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "3166" + }, + { + "description": "Side; one of all, t, ct; defaults to all", "enum": [ - "period", - "day", - "week", - "month", - "custom" + "all", + "t", + "ct" ], "in": "query", - "name": "range", + "name": "side", "type": "string" }, { - "description": "Maximum endpoints to return. Defaults to 20 and clamps to 100.", + "description": "Comma-separated agent roles; any of controller, initiator, sentinel, duelist", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "role", + "type": "string", + "x-example": "duelist" }, { - "description": "Custom lower bound in RFC3339 format when range=custom", + "description": "Comma-separated agents, for example jett,sage; the same 29 agents as vlr-stats", "in": "query", - "name": "from", + "name": "agent", "type": "string", - "x-example": "2026-04-01T00:00:00Z" + "x-example": "jett" }, { - "description": "Custom upper bound in RFC3339 format when range=custom", + "description": "Comma-separated map names, for example ascent,bind; the same 13 maps as vlr-stats", "in": "query", - "name": "to", + "name": "map", "type": "string", - "x-example": "2026-04-22T00:00:00Z" + "x-example": "ascent" + }, + { + "description": "Comma-separated stage ids from the stages list of vlr-event-matches", + "in": "query", + "name": "stage", + "type": "string", + "x-example": "6080" + }, + { + "description": "Minimum rounds played; 0 to 100000", + "in": "query", + "maximum": 100000, + "minimum": 0, + "name": "min_rounds", + "type": "integer" + }, + { + "description": "Sort column, the same set as vlr-stats; defaults to rating", + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Sort direction; one of desc, asc; defaults to desc", + "enum": [ + "desc", + "asc" + ], + "in": "query", + "name": "dir", + "type": "string" } ], "produces": [ @@ -549004,25 +633404,43 @@ ], "responses": { "200": { - "description": "Endpoint usage breakdown", + "description": "OK", "schema": { - "$ref": "#/definitions/usage.usageEndpointsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/vlr.EventStatsResponse" + } + }, + "type": "object" + } + ] } }, "400": { - "description": "Invalid query parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "401": { - "description": "Authentication required", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -549033,46 +633451,55 @@ "ApiKeyAuth": [] } ], - "summary": "Get current user's endpoint usage breakdown", + "summary": "VLR.gg Valorant event player statistics", "tags": [ - "Usage" + "VLR" ] } }, - "/usage/me/overview": { + "/vlr/events": { "get": { "consumes": [ "application/json" ], - "description": "Returns a JWT-authenticated user's current billing snapshot plus recent request and credit consumption metrics for the selected UTC time range. The `requests` summary is limited to product API traffic and excludes console, billing, usage, and user-management endpoints.", - "operationId": "usage-me-overview", + "description": "Returns Valorant events from VLR.gg: ongoing, upcoming and completed events with prize pool, dates and region flag. Filter by `tier` (`all`, `vct`, `vcl`, `t3`, `gc`, `cg`, `off`) and `region` (`all`, `americas`, `emea`, `pacific`, `china`); `page` pages through completed events. Use vlr-event with a returned `id`.", + "operationId": "vlr-events", "parameters": [ { - "description": "Time range preset. Defaults to the current billing period.", + "description": "Event tier; one of all, vct, vcl, t3, gc, cg, off; defaults to all", "enum": [ - "period", - "day", - "week", - "month", - "custom" + "all", + "vct", + "vcl", + "t3", + "gc", + "cg", + "off" ], "in": "query", - "name": "range", + "name": "tier", "type": "string" }, { - "description": "Custom lower bound in RFC3339 format when range=custom", + "description": "Event region; one of all, americas, emea, pacific, china; defaults to all", + "enum": [ + "all", + "americas", + "emea", + "pacific", + "china" + ], "in": "query", - "name": "from", - "type": "string", - "x-example": "2026-04-01T00:00:00Z" + "name": "region", + "type": "string" }, { - "description": "Custom upper bound in RFC3339 format when range=custom", + "description": "1-based page number; defaults to 1", "in": "query", - "name": "to", - "type": "string", - "x-example": "2026-04-22T00:00:00Z" + "maximum": 500, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -549080,25 +633507,37 @@ ], "responses": { "200": { - "description": "Usage overview", + "description": "OK", "schema": { - "$ref": "#/definitions/usage.usageOverviewResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/vlr.EventsResponse" + } + }, + "type": "object" + } + ] } }, "400": { - "description": "Invalid query parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "401": { - "description": "Authentication required", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -549109,80 +633548,55 @@ "ApiKeyAuth": [] } ], - "summary": "Get current user's usage overview", + "summary": "VLR.gg Valorant events", "tags": [ - "Usage" + "VLR" ] } }, - "/usage/me/recent-ips": { + "/vlr/forum-categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns recent client IP addresses observed for the JWT-authenticated user's product API traffic, ordered by last seen time. Console, billing, usage, and user-management endpoints are excluded.", - "operationId": "usage-me-recent-ips", - "parameters": [ - { - "description": "Time range preset. Defaults to the current billing period.", - "enum": [ - "period", - "day", - "week", - "month", - "custom" - ], - "in": "query", - "name": "range", - "type": "string" - }, - { - "description": "Maximum IPs to return. Defaults to 20 and clamps to 100.", - "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", - "type": "integer" - }, - { - "description": "Custom lower bound in RFC3339 format when range=custom", - "in": "query", - "name": "from", - "type": "string", - "x-example": "2026-04-01T00:00:00Z" - }, - { - "description": "Custom upper bound in RFC3339 format when range=custom", - "in": "query", - "name": "to", - "type": "string", - "x-example": "2026-04-22T00:00:00Z" - } - ], + "description": "Returns the VLR.gg forum directory: each category with slug, name, group, description, thread and post counts and the last poster, time and thread. `slug` is one of `valorant-discussion`, `off-topic`, `site-feedback`; use it as `category` in vlr-forum-threads.", + "operationId": "vlr-forum-categories", "produces": [ "application/json" ], "responses": { "200": { - "description": "Recent API client IPs", + "description": "OK", "schema": { - "$ref": "#/definitions/usage.usageRecentIPsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/vlr.ForumCategoriesResponse" + } + }, + "type": "object" + } + ] } }, "400": { - "description": "Invalid query parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "401": { - "description": "Authentication required", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -549193,63 +633607,49 @@ "ApiKeyAuth": [] } ], - "summary": "Get current user's recent API client IPs", + "summary": "VLR.gg forum categories", "tags": [ - "Usage" + "VLR" ] } }, - "/usage/me/timeseries": { + "/vlr/forum-threads": { "get": { "consumes": [ "application/json" ], - "description": "Returns the signed-in user's request usage as UTC time buckets for charts. `range` is `period` (default), `day`, `week`, `month` or `custom` (with RFC3339 `from` and `to`); `bucket` is `hour` or `day`; `endpoint` filters to one endpoint such as `google/search`. Each bucket has start, end, `requests`, `charged_requests`, `credits` and `overage`. Empty buckets are filled with zeros.", - "operationId": "usage-me-timeseries", + "description": "Returns a page (30) of VLR.gg forum threads, newest activity first, for one `category` (`valorant-discussion`, `off-topic`, `site-feedback`) or the combined list: title, reply count, pinned flag, category, author, post age, frags (score) and the last poster. Thread titles and usernames are public community content; thread bodies and replies are not returned.", + "operationId": "vlr-forum-threads", "parameters": [ { - "description": "Time range preset. Defaults to the current billing period.", - "enum": [ - "period", - "day", - "week", - "month", - "custom" - ], - "in": "query", - "name": "range", - "type": "string" - }, - { - "description": "Bucket size. Defaults to hour for day range and day otherwise.", + "description": "Forum category; one of valorant-discussion, off-topic, site-feedback; omit for the combined list", "enum": [ - "hour", - "day" + "valorant-discussion", + "off-topic", + "site-feedback" ], "in": "query", - "name": "bucket", + "name": "category", "type": "string" }, { - "description": "Optional endpoint filter", - "in": "query", - "name": "endpoint", - "type": "string", - "x-example": "google/search" - }, - { - "description": "Custom lower bound in RFC3339 format when range=custom", + "description": "1-based page number; defaults to 1", "in": "query", - "name": "from", - "type": "string", - "x-example": "2026-04-01T00:00:00Z" + "maximum": 500, + "minimum": 1, + "name": "page", + "type": "integer" }, { - "description": "Custom upper bound in RFC3339 format when range=custom", + "description": "Order; one of hot, new, top; omit for the site default (recent activity)", + "enum": [ + "hot", + "new", + "top" + ], "in": "query", - "name": "to", - "type": "string", - "x-example": "2026-04-22T00:00:00Z" + "name": "sort", + "type": "string" } ], "produces": [ @@ -549257,25 +633657,37 @@ ], "responses": { "200": { - "description": "Usage timeseries", + "description": "OK", "schema": { - "$ref": "#/definitions/usage.usageTimeseriesResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/vlr.ForumThreadsResponse" + } + }, + "type": "object" + } + ] } }, "400": { - "description": "Invalid query parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "401": { - "description": "Authentication required", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -549286,37 +633698,71 @@ "ApiKeyAuth": [] } ], - "summary": "Get current user's usage timeseries", + "summary": "VLR.gg forum thread list", "tags": [ - "Usage" + "VLR" ] } }, - "/usage/platform-adjacency": { + "/vlr/match": { "get": { "consumes": [ "application/json" ], - "description": "Returns, per platform, how many real users have used it (lifetime, successful requests only), its request volume, top entry endpoints, and which other platforms those users also use. Aggregated across all customers with non-customer, static, and console traffic excluded; recomputed at most once per 24 hours and served from cache. Powers the console dashboard's \"Explore more\" recommendation.", - "operationId": "usage-platform-adjacency", + "description": "Returns one VLR.gg match: event and stage, exact UTC start time, status (`final`, `live`, `upcoming`), format such as `Bo3`, both teams with series score, the pick/ban note, and every map with picker, round scores split into attack, defend and overtime, duration and per-player lines (agents, rating, ACS, K/D/A, KAST, ADR, headshot percent, first kills and deaths). `all_maps_players` holds the aggregate across maps. Also returns the teams' head-to-head history and each team's recent results. Player fields are omitted when VLR has not published them yet. Use vlr-match-economy, vlr-match-performance and vlr-match-rounds for the economy, kill-matrix and round-by-round tabs.", + "operationId": "vlr-match", + "parameters": [ + { + "description": "Numeric VLR match id from vlr-matches, vlr-results or vlr-event-matches", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "777956" + } + ], "produces": [ "application/json" ], "responses": { "200": { - "description": "Platform reach and co-usage aggregate", + "description": "OK", "schema": { - "$ref": "#/definitions/usage.usagePlatformAdjacencyResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/vlr.MatchDetail" + } + }, + "type": "object" + } + ] } }, - "401": { - "description": "Authentication required", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -549327,24 +633773,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get cross-user platform reach and co-usage", + "summary": "VLR.gg Valorant match detail and player statistics", "tags": [ - "Usage" + "VLR" ] } }, - "/usatoday/article": { + "/vlr/match-economy": { "get": { - "description": "Returns one normal USA Today article's public metadata and body paragraphs from a canonical article URL. Video, gallery, and other non-article routes are not supported.", - "operationId": "usatoday-article", + "consumes": [ + "application/json" + ], + "description": "Returns the Economy tab of one VLR.gg match for every map and for the whole match: each team's pistol rounds, pistol conversion and bonus-round records, win records by buy level (`eco` under 10k, `half` 10k to 18k, `full` 18k and over) against each opponent buy level, and round by round banks, loadout values, buy levels, the winner and the winning side. `available` is false while VLR has not published the tab, which is normal for a match that just ended.", + "operationId": "vlr-match-economy", "parameters": [ { - "description": "Canonical USA Today article URL", + "description": "Numeric VLR match id from vlr-matches, vlr-results or vlr-event-matches", "in": "query", - "name": "url", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.usatoday.com/story/sports/mlb/dodgers/2026/09/23/shohei-ohtani-return-from-il/91899080007/" + "x-example": "754737" } ], "produces": [ @@ -549354,7 +633803,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/usatoday.articleResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/vlr.MatchEconomy" + } + }, + "type": "object" + } + ] } }, "400": { @@ -549387,24 +633848,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a USA Today article's content", + "summary": "VLR.gg Valorant match economy", "tags": [ - "USA Today" + "VLR" ] } }, - "/usatoday/author": { + "/vlr/match-performance": { "get": { - "description": "Returns one USA Today staff writer's public profile: name, bio, social accounts, and their recent articles, from a canonical staff page URL.", - "operationId": "usatoday-author", + "consumes": [ + "application/json" + ], + "description": "Returns the Performance tab of one VLR.gg match for every map and for the whole match: player-versus-player kill matrices (overall kills and deaths, first kills and deaths, and Operator kills and deaths) and per-player advanced stats (2K to 5K multi-kills, 1v1 to 1v5 clutches, econ rating, spike plants and defuses). `available` is false while VLR has not published the tab.", + "operationId": "vlr-match-performance", "parameters": [ { - "description": "Canonical USA Today staff URL", + "description": "Numeric VLR match id from vlr-matches, vlr-results or vlr-event-matches", "in": "query", - "name": "url", + "name": "id", "required": true, "type": "string", - "x-example": "https://www.usatoday.com/staff/87951836007/andres-soto/" + "x-example": "754737" } ], "produces": [ @@ -549414,7 +633878,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/usatoday.authorResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/vlr.MatchPerformance" + } + }, + "type": "object" + } + ] } }, "400": { @@ -549447,39 +633923,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a USA Today staff/author profile", + "summary": "VLR.gg Valorant match performance", "tags": [ - "USA Today" + "VLR" ] } }, - "/usatoday/headlines": { + "/vlr/match-rounds": { "get": { - "description": "Returns the newest USA Today items for one top-level section, up to 100. `section` is required and takes `news`, `sports`, `entertainment`, `life`, `money`, `tech`, `travel`, `opinion`, `cars`, `shopping`, `weather`, `politics` or `grocery`. Each item has its title, URL, published and updated times, and lead image when there is one.", - "operationId": "usatoday-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns the round log (the 2D replay data) of one VLR.gg match for every map that has one: for each round the score after it, the winner, the attacking team, every player's agent, credits left, spend, armor and weapon, and the ordered events (kills with weapon, spike plants and defuses) with their round clock. `available` is false when VLR has no replay for the match.", + "operationId": "vlr-match-rounds", "parameters": [ { - "description": "Top-level USA Today section", - "enum": [ - "news", - "sports", - "entertainment", - "life", - "money", - "tech", - "travel", - "opinion", - "cars", - "shopping", - "weather", - "politics", - "grocery" - ], + "description": "Numeric VLR match id from vlr-matches, vlr-results or vlr-event-matches", "in": "query", - "name": "section", + "name": "id", "required": true, "type": "string", - "x-example": "news" + "x-example": "754737" } ], "produces": [ @@ -549489,7 +633953,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/usatoday.headlinesResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/vlr.MatchRounds" + } + }, + "type": "object" + } + ] } }, "400": { @@ -549498,6 +633974,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -549516,16 +633998,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get USA Today section headlines", + "summary": "VLR.gg Valorant match round-by-round log", "tags": [ - "USA Today" + "VLR" ] } }, - "/usatoday/news": { + "/vlr/matches": { "get": { - "description": "Returns the newest window of USA Today's public news feed: title, canonical URL, publication and update times, and the lead image when USA Today publishes one.", - "operationId": "usatoday-news", + "consumes": [ + "application/json" + ], + "description": "Returns the Valorant match schedule from VLR.gg: upcoming and live matches grouped by day with both teams, country flags, event, stage, ETA and whether stats or VODs exist. `status` is `upcoming`, `live` or `completed`. `time_label` is the time shown on the site, whose timezone is not guaranteed; use vlr-match for an exact UTC start time. Use vlr-results for finished matches.", + "operationId": "vlr-matches", + "parameters": [ + { + "description": "1-based page number; defaults to 1", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "page", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -549533,7 +634028,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/usatoday.newsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/vlr.MatchListResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -549554,16 +634067,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get fresh USA Today headlines", + "summary": "VLR.gg upcoming and live Valorant matches", "tags": [ - "USA Today" + "VLR" ] } }, - "/usatoday/sections": { + "/vlr/news": { "get": { - "description": "Lists the 13 top-level USA Today sections accepted by `usatoday-headlines`, from `news` and `sports` to `politics` and `grocery`. Each has a `slug`, a display `name` and a landing-page `url`. Takes no parameters.", - "operationId": "usatoday-sections", + "consumes": [ + "application/json" + ], + "description": "Returns the latest Valorant esports news headlines from VLR.gg, 30 per page, with title, summary line, date, author and country flag. Page back through older news with `page`.", + "operationId": "vlr-news", + "parameters": [ + { + "description": "1-based page number; defaults to 1", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "page", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -549571,7 +634097,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/usatoday.sectionsResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/vlr.NewsResponse" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -549592,113 +634136,71 @@ "ApiKeyAuth": [] } ], - "summary": "List USA Today sections", + "summary": "VLR.gg Valorant esports news", "tags": [ - "USA Today" + "VLR" ] } }, - "/user/me": { + "/vlr/news-article": { "get": { "consumes": [ "application/json" ], - "description": "Returns the profile of the user who owns the `Token ` in the `Authorization` header: `id`, `username`, `email` and `plan`. Password hashes, activation tokens, API keys and billing identifiers are never returned, which makes it a quick check that a session token is valid.", - "operationId": "user-me", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "Current user", - "schema": { - "$ref": "#/definitions/user.userMeResponseDoc" - } - }, - "401": { - "description": "Authentication required", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ + "description": "Returns one VLR.gg news article: title, author, UTC publish time, the body as plain-text paragraphs, the teams, players and events it links to (type `team`, `player` or `event`, with id, slug and name), external links and image URLs. Reader comments are not included. Forum threads share the same numeric id space, so an id that is a thread, or does not exist, returns not found. Take `id` from vlr-news.", + "operationId": "vlr-news-article", + "parameters": [ { - "JWTAuth": [] + "description": "Numeric VLR news article id from vlr-news", + "in": "query", + "name": "id", + "required": true, + "type": "string", + "x-example": "781119" } ], - "summary": "Get current user", - "tags": [ - "User" - ] - } - }, - "/user/me/api-keys": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Lists the signed-in user's API keys in masked form. Each item has `id`, `masked_key`, `key_prefix`, `key_suffix`, `status` (`active`, `grace` or `revoked`), `source`, and created, updated, rotated, expiry and last-used timestamps with the last-used IP. Raw keys are not returned; the reveal endpoint, `POST /api/v1/user/me/api-keys/{id}/reveal`, retrieves one.", - "operationId": "user-me-api-keys", "produces": [ "application/json" ], "responses": { "200": { - "description": "API keys", + "description": "OK", "schema": { - "$ref": "#/definitions/user.userAPIKeysResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/vlr.ArticleDetail" + } + }, + "type": "object" + } + ] } }, - "401": { - "description": "Authentication required", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "JWTAuth": [] - } - ], - "summary": "List current user's API keys", - "tags": [ - "User" - ] - } - }, - "/user/me/api-keys/rotate": { - "post": { - "consumes": [ - "application/json" - ], - "description": "Generates a new active API key for the JWT-authenticated user and places the previous key into a 24 hour grace period.", - "operationId": "user-me-api-keys-rotate", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "Rotated API key", - "schema": { - "$ref": "#/definitions/user.userRotateAPIKeyResponseDoc" - } }, - "401": { - "description": "Authentication required", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -549706,28 +634208,41 @@ }, "security": [ { - "JWTAuth": [] + "ApiKeyAuth": [] } ], - "summary": "Rotate current user's API key", + "summary": "VLR.gg news article", "tags": [ - "User" + "VLR" ] } }, - "/user/me/api-keys/{id}/reveal": { - "post": { + "/vlr/player": { + "get": { "consumes": [ "application/json" ], - "description": "Returns the raw value for a selected active or unexpired grace API key owned by the JWT-authenticated user when raw key material is available.", - "operationId": "user-me-api-keys-reveal", + "description": "Returns one VLR.gg player: alias, real name, country, social links, agent-by-agent statistics (use, rounds, rating, ACS, K:D, KAST, ADR, KPR, APR and first kills), current and past teams and recent results.", + "operationId": "vlr-player", "parameters": [ { - "description": "API key id", - "in": "path", + "description": "Numeric VLR player id from vlr-team or vlr-stats", + "in": "query", "name": "id", "required": true, + "type": "string", + "x-example": "9780" + }, + { + "description": "Window of the agent statistics; one of all, 30d, 60d, 90d; omit for the site default", + "enum": [ + "all", + "30d", + "60d", + "90d" + ], + "in": "query", + "name": "timespan", "type": "string" } ], @@ -549736,25 +634251,43 @@ ], "responses": { "200": { - "description": "Raw API key", + "description": "OK", "schema": { - "$ref": "#/definitions/user.userRevealAPIKeyResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/vlr.PlayerDetail" + } + }, + "type": "object" + } + ] } }, - "401": { - "description": "Authentication required", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "API key not found or raw value unavailable", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -549762,31 +634295,38 @@ }, "security": [ { - "JWTAuth": [] + "ApiKeyAuth": [] } ], - "summary": "Reveal current user's API key", + "summary": "VLR.gg Valorant player profile and agent statistics", "tags": [ - "User" + "VLR" ] } }, - "/user/me/browser-language": { - "post": { + "/vlr/player-matches": { + "get": { "consumes": [ "application/json" ], - "description": "Captures the Accept-Language header from a live dashboard visit and, only if the caller's signup Accept-Language was never recorded, saves it and its derived primary subtag. A no-op for a caller who already has a value on file.", - "operationId": "user-me-browser-language", + "description": "Returns a player's match history from VLR.gg, 50 per page, newest first: event, stage, the player's team and opponent, series score, win or loss and date. Use vlr-match with a returned `id` for the player's map statistics.", + "operationId": "vlr-player-matches", "parameters": [ { - "description": "Accept-Language header captured from the visit", - "in": "body", - "name": "body", + "description": "Numeric VLR player id from vlr-team or vlr-stats", + "in": "query", + "name": "id", "required": true, - "schema": { - "$ref": "#/definitions/user.userBrowserLanguageReq" - } + "type": "string", + "x-example": "9780" + }, + { + "description": "1-based page number; defaults to 1", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -549794,66 +634334,43 @@ ], "responses": { "200": { - "description": "Backfill result", - "schema": { - "$ref": "#/definitions/user.userBrowserLanguageResponseDoc" - } - }, - "401": { - "description": "Authentication required", + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/vlr.HistoryResponse" + } + }, + "type": "object" + } + ] } }, - "500": { - "description": "Internal server error", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "JWTAuth": [] - } - ], - "summary": "Backfill current user's browser language", - "tags": [ - "User" - ] - } - }, - "/user/me/deletion-request": { - "delete": { - "consumes": [ - "application/json" - ], - "description": "Withdraws the authenticated user's own pending or approved deletion request before purge. If this request scheduled Stripe cancellation and the paid-through date has not arrived, the renewal cancellation is reversed.", - "operationId": "account-deletion-cancel", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "Cancelled deletion request", - "schema": { - "$ref": "#/definitions/accountdeletion.accountDeletionResponseDoc" - } }, - "400": { - "description": "No active deletion request", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "401": { - "description": "Authentication required", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -549861,38 +634378,89 @@ }, "security": [ { - "JWTAuth": [] + "ApiKeyAuth": [] } ], - "summary": "Cancel current user's account deletion request", + "summary": "VLR.gg Valorant player match history", "tags": [ - "Account Deletion" + "VLR" ] - }, + } + }, + "/vlr/rankings": { "get": { "consumes": [ "application/json" ], - "description": "Returns the signed-in user's active account deletion request (`pending` or `approved`), including its `status`, request time, `scheduled_purge_at`, `subscription_period_end` and the Stripe cancellation flags. A user with no active request gets a 200 with an empty request (empty `id`), not an error.", - "operationId": "account-deletion-my-request", + "description": "Returns VLR.gg's team ranking for one region: rank, team, country, rating, record, streak, earnings and last match. `region` is one of north-america, europe, brazil, asia-pacific, korea, china, japan, la-s, la-n, oceania, mena, gc, collegiate. `limit` returns the top 1 to 250 teams (default 50).", + "operationId": "vlr-rankings", + "parameters": [ + { + "description": "Ranking region; one of north-america, europe, brazil, asia-pacific, korea, china, japan, la-s, la-n, oceania, mena, gc, collegiate; defaults to north-america", + "enum": [ + "north-america", + "europe", + "brazil", + "asia-pacific", + "korea", + "china", + "japan", + "la-s", + "la-n", + "oceania", + "mena", + "gc", + "collegiate" + ], + "in": "query", + "name": "region", + "type": "string" + }, + { + "description": "Number of top teams to return, 1 to 250; defaults to 50", + "in": "query", + "maximum": 250, + "minimum": 1, + "name": "limit", + "type": "integer" + } + ], "produces": [ "application/json" ], "responses": { "200": { - "description": "Deletion request, empty if none active", + "description": "OK", "schema": { - "$ref": "#/definitions/accountdeletion.accountDeletionResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/vlr.RankingsResponse" + } + }, + "type": "object" + } + ] } }, - "401": { - "description": "Authentication required", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -549900,28 +634468,30 @@ }, "security": [ { - "JWTAuth": [] + "ApiKeyAuth": [] } ], - "summary": "Get current user's account deletion request", + "summary": "VLR.gg Valorant team rankings by region", "tags": [ - "Account Deletion" + "VLR" ] - }, - "post": { + } + }, + "/vlr/results": { + "get": { "consumes": [ "application/json" ], - "description": "Records the authenticated user's request to delete their account. If approved with a live Stripe subscription, renewal is stopped at the current paid-through date; account access continues until expiry, then deletion runs after the existing 72-hour minimum review window. Account deletion never issues refunds or prorated credits. Idempotent — repeat calls while a request is pending or approved return the existing request.", - "operationId": "account-deletion-request", + "description": "Returns completed Valorant matches from VLR.gg, newest first, 50 per page, with final series scores, winner flags, event, stage and whether stats or VODs are listed. For a completed match `eta` is the time since it ended. Use vlr-match with a returned `id` for map-by-map player statistics.", + "operationId": "vlr-results", "parameters": [ { - "description": "Optional reason for the request", - "in": "body", - "name": "request", - "schema": { - "$ref": "#/definitions/accountdeletion.accountDeletionRequestBodyDoc" - } + "description": "1-based page number; defaults to 1", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -549929,25 +634499,37 @@ ], "responses": { "200": { - "description": "Deletion request", + "description": "OK", "schema": { - "$ref": "#/definitions/accountdeletion.accountDeletionResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/vlr.MatchListResponse" + } + }, + "type": "object" + } + ] } }, - "401": { - "description": "Authentication required", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "User not found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal server error", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -549955,27 +634537,42 @@ }, "security": [ { - "JWTAuth": [] + "ApiKeyAuth": [] } ], - "summary": "Request account deletion", + "summary": "VLR.gg completed Valorant match results", "tags": [ - "Account Deletion" + "VLR" ] } }, - "/usmagazine/article": { + "/vlr/search": { "get": { - "description": "Returns one Us Weekly article by its canonical `url`, in the form `/
/news//`. The response has the title, description, published and updated times, section, authors, lead image and the body `paragraphs`, without sub-headings or embeds. Photo-gallery URLs and non-article pages return a 400 error.", - "operationId": "usmagazine-article", + "consumes": [ + "application/json" + ], + "description": "Searches VLR.gg for teams, events and players by name and returns every match on one page: kind, id, name, canonical URL and logo, plus the event date range and prize pool and, for retired teams, the `inactive` flag and the team that replaced them (`successor`). `type` limits the search to `teams`, `events` or `players`; the default `all` returns all three groups with per-group counts. Use the returned id with vlr-team, vlr-event or vlr-player.", + "operationId": "vlr-search", "parameters": [ { - "description": "Canonical Us Weekly article URL", + "description": "Search text, 1 to 100 characters", "in": "query", - "name": "url", + "name": "q", "required": true, "type": "string", - "x-example": "https://www.usmagazine.com/celebrity-news/news/example-article-slug/" + "x-example": "sentinels" + }, + { + "description": "Result group; one of all, teams, events, players; defaults to all", + "enum": [ + "all", + "teams", + "events", + "players" + ], + "in": "query", + "name": "type", + "type": "string" } ], "produces": [ @@ -549985,7 +634582,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/vlr.SearchResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -549994,8 +634603,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -550012,24 +634621,150 @@ "ApiKeyAuth": [] } ], - "summary": "Get Us Weekly article content", + "summary": "VLR.gg search for teams, events and players", "tags": [ - "Us Weekly" + "VLR" ] } }, - "/usmagazine/author": { + "/vlr/stats": { "get": { - "description": "Returns a Us Weekly author's profile from their canonical `url` (`/author//`, required): name, biography, contact links and the newest articles, about 20. Staff and desk bylines may have no biography or links. Photo galleries are skipped and `published_at` is not set on the articles.", - "operationId": "usmagazine-author", + "consumes": [ + "application/json" + ], + "description": "Returns VLR.gg's player statistics table (100 rows per page): agents played, maps, rounds, rating, ACS, K:D, KAST, ADR, KPR, APR, first-kill and clutch rates and totals. Filter with comma-separated `tier` (vct, vcl, t3, gc, cg, off), `region` (americas, emea, pacific, china, intl), `role` (controller, initiator, sentinel, duelist), `agent` and `map` names, plus `timespan` (all, 30d, 60d, 90d or a season year from 2020 up to the current year), `side` (all, t, ct), `min_rounds` and `min_rating`; sort with `sort` and `dir`.", + "operationId": "vlr-stats", "parameters": [ { - "description": "Canonical Us Weekly author URL", + "description": "Comma-separated tiers from vct, vcl, t3, gc, cg, off; site default vct", "in": "query", - "name": "url", - "required": true, + "name": "tier", + "type": "string" + }, + { + "description": "Comma-separated regions from americas, emea, pacific, china, intl", + "in": "query", + "name": "region", + "type": "string" + }, + { + "description": "Timespan; one of all, 30d, 60d, 90d or a four-digit season year from 2020 up to the current year (2020, 2021, 2022, 2023, 2024, 2025, 2026 today; a new year is accepted when it starts); site default 60d", + "in": "query", + "name": "timespan", + "type": "string" + }, + { + "description": "Side; one of all, t, ct", + "enum": [ + "all", + "t", + "ct" + ], + "in": "query", + "name": "side", + "type": "string" + }, + { + "description": "Comma-separated roles from controller, initiator, sentinel, duelist", + "in": "query", + "name": "role", + "type": "string" + }, + { + "description": "Comma-separated agents from astra, brimstone, clove, harbor, miks, omen, viper, breach, fade, gekko, kayo, skye, sova, tejo, chamber, cypher, deadlock, killjoy, sage, veto, vyse, iso, jett, neon, phoenix, raze, reyna, waylay, yoru", + "in": "query", + "name": "agent", + "type": "string" + }, + { + "description": "Comma-separated maps from abyss, bind, corrode, haven, lotus, summit, sunset, ascent, breeze, fracture, icebox, pearl, split", + "in": "query", + "name": "map", + "type": "string" + }, + { + "description": "Minimum rounds played; site default 100", + "in": "query", + "minimum": 0, + "name": "min_rounds", + "type": "integer" + }, + { + "description": "First day of a custom date range, YYYY-MM-DD (UTC); requires to and replaces timespan", + "in": "query", + "name": "from", "type": "string", - "x-example": "https://www.usmagazine.com/author/jane-doe/" + "x-example": "2026-09-01" + }, + { + "description": "Last day of a custom date range, YYYY-MM-DD (UTC); requires from and replaces timespan", + "in": "query", + "name": "to", + "type": "string", + "x-example": "2026-10-01" + }, + { + "description": "Minimum player rating; one of 0, 1300, 1400, 1500, 1550, 1650, 1750, 1850", + "enum": [ + 0, + 1300, + 1400, + 1500, + 1550, + 1650, + 1750, + 1850 + ], + "in": "query", + "name": "min_rating", + "type": "integer" + }, + { + "description": "Sort column; one of rating, maps, rnd, acs, kd, kast, adr, kpr, apr, fkfd, fkpr, fdpr, hsp, clp, cl, kmax, k, d, a, fk, fd; defaults to rating", + "enum": [ + "rating", + "maps", + "rnd", + "acs", + "kd", + "kast", + "adr", + "kpr", + "apr", + "fkfd", + "fkpr", + "fdpr", + "hsp", + "clp", + "cl", + "kmax", + "k", + "d", + "a", + "fk", + "fd" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "description": "Sort direction; one of asc, desc; defaults to desc", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "dir", + "type": "string" + }, + { + "description": "1-based page number; defaults to 1", + "in": "query", + "maximum": 500, + "minimum": 1, + "name": "page", + "type": "integer" } ], "produces": [ @@ -550039,7 +634774,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.usmagazineAuthorResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/vlr.StatsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -550048,8 +634795,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -550066,38 +634813,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Us Weekly author profile", + "summary": "VLR.gg Valorant player statistics with filters", "tags": [ - "Us Weekly" + "VLR" ] } }, - "/usmagazine/headlines": { + "/vlr/team": { "get": { - "description": "Lists recent Us Weekly headlines for one section. `section` is required and takes `celebrity-news`, `entertainment`, `sports`, `shopping`, `crime-news`, `stylish`, `celebrity-moms`, `celebrity-body`, `food`, `reviews`, `reality-tv` or `royal-family`. Returns up to about 20 items, with photo galleries excluded; `reviews` holds only a few.", - "operationId": "usmagazine-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns one VLR.gg team: name, tag, country, links, the roster (players with captain flag, plus coach, manager and analyst staff, each with a player id) and recent matches with scores and results, plus related news. Use vlr-player with a roster `id`.", + "operationId": "vlr-team", "parameters": [ { - "description": "Us Weekly RSS section slug", - "enum": [ - "celebrity-news", - "entertainment", - "sports", - "shopping", - "crime-news", - "stylish", - "celebrity-moms", - "celebrity-body", - "food", - "reviews", - "reality-tv", - "royal-family" - ], + "description": "Numeric VLR team id from vlr-rankings, vlr-event or vlr-match", "in": "query", - "name": "section", + "name": "id", "required": true, "type": "string", - "x-example": "celebrity-news" + "x-example": "2059" } ], "produces": [ @@ -550107,7 +634843,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/vlr.TeamDetail" + } + }, + "type": "object" + } + ] } }, "400": { @@ -550116,37 +634864,11 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Us Weekly section headlines", - "tags": [ - "Us Weekly" - ] - } - }, - "/usmagazine/news": { - "get": { - "description": "Returns the latest Us Weekly top stories with no parameters. Each item has its title and URL, plus summary, publication time, author and image when the outlet provides them. Only article URLs of the form `/
/news//` appear; photo galleries are left out.", - "operationId": "usmagazine-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } }, "429": { "description": "Too Many Requests", @@ -550166,61 +634888,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Us Weekly top stories", - "tags": [ - "Us Weekly" - ] - } - }, - "/usmagazine/sections": { - "get": { - "description": "Lists the 12 Us Weekly sections accepted by `usmagazine-headlines`, from `celebrity-news` and `entertainment` to `reality-tv` and `royal-family`. Each entry has a `slug`, display `name` and section feed `url`. Takes no parameters.", - "operationId": "usmagazine-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Us Weekly RSS sections", + "summary": "VLR.gg Valorant team profile and roster", "tags": [ - "Us Weekly" + "VLR" ] } }, - "/usptoppubs/detail": { + "/vlr/team-maps": { "get": { "consumes": [ "application/json" ], - "description": "Fetches a single USPTO Patent Public Search record's full text -- bibliographic data, abstract, description, and claims -- by GUID and source database. guid and source normally come straight from a prior /usptoppubs/search result's guid and database fields. Public data, sourced from USPTO's own official search tool.", - "operationId": "usptoppubs-detail", + "description": "Returns a team's per-map record from VLR.gg: maps played, win percent, wins and losses, plus attack-side and defense-side round win percent, rounds won and lost and first-round counts. Use it to compare map strengths; vlr-team-matches lists the underlying matches.", + "operationId": "vlr-team-maps", "parameters": [ { - "description": "Document GUID, e.g. from a prior search result's guid field", - "in": "query", - "name": "guid", - "required": true, - "type": "string", - "x-example": "US-20260238009-A1" - }, - { - "description": "Source database. Allowed values: US-PGPUB, USPAT, USOCR", + "description": "Numeric VLR team id from vlr-rankings, vlr-event or vlr-match", "in": "query", - "name": "source", + "name": "id", "required": true, "type": "string", - "x-example": "US-PGPUB" + "x-example": "2059" } ], "produces": [ @@ -550230,7 +634918,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/usptoppubs.detailResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/vlr.TeamMapsResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -550251,12 +634951,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -550269,48 +634963,45 @@ "ApiKeyAuth": [] } ], - "summary": "Fetch a document's full bibliographic data, abstract, description, and claims", + "summary": "VLR.gg Valorant team map win rates", "tags": [ - "USPTO Patent Public Search" + "VLR" ] } }, - "/usptoppubs/search": { + "/vlr/team-matches": { "get": { "consumes": [ "application/json" ], - "description": "Searches USPTO Patent Public Search's full-text index of granted patents and published applications, returning bibliographic results (title, applicant/assignee, inventors, filing and publication dates, application number, IPC/CPC classifications, page count). q accepts USPTO's full Advanced Search query syntax -- field-specific search (e.g. battery.ti., Microsoft.as.), date ranges (@pd>=20200101<=20241231), boolean and proximity operators, and wildcards -- see the markdown doc for the full field-code table and syntax reference.", - "operationId": "usptoppubs-search", + "description": "Returns a team's complete match history from VLR.gg, 50 per page, newest first: event, stage, opponent, series score, win or loss and date. Use vlr-match with a returned `id` for map detail, or vlr-team for the roster.", + "operationId": "vlr-team-matches", "parameters": [ { - "description": "Search query text -- accepts USPTO's full Advanced Search (BRS) query syntax: field codes, date ranges, boolean/proximity operators, wildcards", + "description": "Numeric VLR team id from vlr-rankings, vlr-event or vlr-match", "in": "query", - "name": "q", + "name": "id", "required": true, "type": "string", - "x-example": "battery" - }, - { - "description": "Comma-separated subset of databases to search. Allowed values: US-PGPUB, USPAT, USOCR. Defaults to all three", - "in": "query", - "name": "databases", - "type": "string", - "x-example": "US-PGPUB,USPAT,USOCR" + "x-example": "2059" }, { - "description": "Results to return, default 20, max 100", + "description": "1-based page number; defaults to 1", "in": "query", - "name": "num", - "type": "integer", - "x-example": 20 + "maximum": 500, + "minimum": 1, + "name": "page", + "type": "integer" }, { - "description": "Results page, 0-indexed, default 0", + "description": "Match group; one of completed (default), upcoming", + "enum": [ + "completed", + "upcoming" + ], "in": "query", - "name": "page", - "type": "integer", - "x-example": 0 + "name": "group", + "type": "string" } ], "produces": [ @@ -550320,7 +635011,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/usptoppubs.searchResponseDoc" + "allOf": [ + { + "$ref": "#/definitions/app.Response" + }, + { + "properties": { + "data": { + "$ref": "#/definitions/vlr.HistoryResponse" + } + }, + "type": "object" + } + ] } }, "400": { @@ -550329,14 +635032,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -550353,24 +635056,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search USPTO's own patent full-text search index", + "summary": "VLR.gg Valorant team match history", "tags": [ - "USPTO Patent Public Search" + "VLR" ] } }, - "/vanguardng/article": { + "/vox/article": { "get": { - "description": "Returns one Vanguard (Nigeria) story by its `url`, a vanguardngr.com link in the `/YYYY/MM//` form; section pages and feeds are rejected. The response has the title, description, times, section, authors, lead image and body `paragraphs`. Vanguard has no paywall, so `paywalled` is never set.", - "operationId": "vanguardng-article", + "description": "Returns one Vox article by its canonical `url`: title, description, authors, section, published and updated times, lead image and the body `paragraphs`. Only public content is returned; a subscriber-only or blocked article comes back as an upstream error rather than a partial body.", + "operationId": "vox-article", "parameters": [ { - "description": "Canonical Vanguard article URL", + "description": "Canonical Vox article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.vanguardngr.com/2026/09/nigerias-trauma-burden-calls-for-coordinated-care-orthopaedic-surgeons/" + "x-example": "https://www.vox.com/politics/example" } ], "produces": [ @@ -550407,74 +635110,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Vanguard article content", + "summary": "Get Vox article content", "tags": [ - "Vanguard" + "Vox" ] } }, - "/vanguardng/author": { + "/vox/author": { "get": { - "description": "Vanguard publishes no author profile pages, so this returns the recent articles in one public feed (site-wide by default, or one section) credited to a byline, matched on the on-page \"By \" line or the site's creator field.", - "operationId": "vanguardng-author", + "description": "Returns a Vox author profile from their canonical `url` (`www.vox.com/authors/`, required). The response has the name, `job_title` from the masthead (such as Senior Politics Correspondent), `bio` and recent articles, each with title, URL, excerpt, category and an ISO-8601 `published_at`.", + "operationId": "vox-author", "parameters": [ { - "description": "Byline to look for (3 to 80 characters), e.g. Chioma Obinna", + "description": "Canonical Vox author URL", "in": "query", - "name": "name", + "name": "url", "required": true, "type": "string", - "x-example": "Chioma Obinna" - }, - { - "description": "Optional section slug to scan instead of the site-wide feed", - "enum": [ - "national-news", - "top-stories", - "more-news", - "politics", - "business", - "business/energy", - "business/insurance-and-you", - "sports", - "entertainment", - "health", - "education-2", - "technology", - "innovation-2", - "aviation", - "agric", - "motoring", - "pension", - "foreign", - "editorial", - "opinion", - "columns", - "viewpoints", - "discourse", - "features", - "special-reports", - "thearts", - "cartoons", - "romance-an-relationships", - "homes-property", - "travel-and-tourism", - "style/allure/interviews", - "tribute", - "promoted", - "videos", - "top-podcasts", - "national-news/icymi", - "more", - "more/education", - "more/interview", - "more/labour", - "more/law-and-human-rights", - "more/metro" - ], - "in": "query", - "name": "section", - "type": "string" + "x-example": "https://www.vox.com/authors/andrew-prokop" } ], "produces": [ @@ -550484,7 +635137,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.vanguardngAuthorResponseDoc" + "$ref": "#/definitions/publicnews.voxAuthorResponseDoc" } }, "400": { @@ -550511,68 +635164,36 @@ "ApiKeyAuth": [] } ], - "summary": "Find recent Vanguard articles by byline", + "summary": "Get a Vox author profile", "tags": [ - "Vanguard" + "Vox" ] } }, - "/vanguardng/headlines": { + "/vox/headlines": { "get": { - "description": "Lists up to 20 recent Vanguard stories from one category. `section` is required and takes one of 42 slugs such as `national-news`, `politics`, `business`, `sports`, `business/energy` or `more/metro`. Items carry title, URL, summary, author and publication time. An unknown section returns an invalid-params error.", - "operationId": "vanguardng-headlines", + "description": "Lists the current Vox headlines for one section. `section` is required and takes `politics`, `culture`, `policy`, `world`, `money`, `technology`, `science-and-health`, `climate`, `future-perfect` or `explainers`. Each item has its title, URL, summary, author and publication time.", + "operationId": "vox-headlines", "parameters": [ { - "description": "Vanguard section slug", + "description": "Vox section slug", "enum": [ - "national-news", - "top-stories", - "more-news", "politics", - "business", - "business/energy", - "business/insurance-and-you", - "sports", - "entertainment", - "health", - "education-2", + "culture", + "policy", + "world", + "money", "technology", - "innovation-2", - "aviation", - "agric", - "motoring", - "pension", - "foreign", - "editorial", - "opinion", - "columns", - "viewpoints", - "discourse", - "features", - "special-reports", - "thearts", - "cartoons", - "romance-an-relationships", - "homes-property", - "travel-and-tourism", - "style/allure/interviews", - "tribute", - "promoted", - "videos", - "top-podcasts", - "national-news/icymi", - "more", - "more/education", - "more/interview", - "more/labour", - "more/law-and-human-rights", - "more/metro" + "science-and-health", + "climate", + "future-perfect", + "explainers" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "national-news" + "x-example": "politics" } ], "produces": [ @@ -550603,16 +635224,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Vanguard section headlines", + "summary": "Get Vox section headlines", "tags": [ - "Vanguard" + "Vox" ] } }, - "/vanguardng/news": { + "/vox/news": { "get": { - "description": "Returns the latest 20 Vanguard (Nigeria) stories with no parameters. Each has a title, URL, summary, publication time and image where available. `author` is the site's account name, often a desk account such as `Nwafor`; use `vanguardng-article` for the on-page byline.", - "operationId": "vanguardng-news", + "description": "Returns the latest Vox top stories with no parameters. Each item has its title, URL, summary, author and publication time. Item URLs can be passed to `vox-article` for the body.", + "operationId": "vox-news", "produces": [ "application/json" ], @@ -550635,16 +635256,100 @@ "ApiKeyAuth": [] } ], - "summary": "Get Vanguard top stories", + "summary": "Get Vox top stories", "tags": [ - "Vanguard" + "Vox" ] } }, - "/vanguardng/sections": { + "/vox/sections": { "get": { - "description": "Lists the 42 Vanguard sections accepted by `vanguardng-headlines`. Each has a `slug` (nested categories contain a `/`, as in `business/energy`), a display `name` and a feed `url`. `national-news` is the site's News category and `promoted` is sponsored content. Takes no parameters.", - "operationId": "vanguardng-sections", + "description": "Lists the Vox editorial sections accepted by `vox-headlines`, each with a stable `slug`, a display `name` and the section `url`. Use the slugs as the `section` value. Takes no parameters.", + "operationId": "vox-sections", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Vox sections", + "tags": [ + "Vox" + ] + } + }, + "/vrbo/locations/search": { + "get": { + "description": "Returns public destination suggestions, including region IDs and location types when Vrbo provides them. The verified search term is sent with Vrbo's observed lodging, destination, and entry-page criteria.", + "operationId": "vrbo-location-suggestions", + "parameters": [ + { + "description": "Destination text to suggest", + "in": "query", + "name": "search_term", + "required": true, + "type": "string", + "x-example": "Miami%20Beach" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/vrbo.vrboLocationSuggestionsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Suggest Vrbo destinations", + "tags": [ + "Vrbo" + ] + } + }, + "/vrbo/properties/{property_id}": { + "get": { + "description": "Reads public traveler-facing property details, grouped amenities, photos, content sections, FAQs, and aggregate rating.", + "operationId": "vrbo-property", + "parameters": [ + { + "description": "Vrbo property ID (optionally ending in ha)", + "in": "path", + "name": "property_id", + "required": true, + "type": "string", + "x-example": "961219" + } + ], "produces": [ "application/json" ], @@ -550652,7 +635357,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/vrbo.vrboPropertyResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -550661,24 +635378,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Vanguard sections", + "summary": "Get Vrbo property details", "tags": [ - "Vanguard" + "Vrbo" ] } }, - "/vanityfair/article": { + "/vrbo/properties/{property_id}/rate-calendar": { "get": { - "description": "Returns public Vanity Fair article metadata and body paragraphs from a canonical article URL. A story Vanity Fair marks as subscriber-only in its own page metadata is reported as a permission error instead of a partial or fabricated body.", - "operationId": "vanityfair-article", + "description": "Returns public calendar dates, nightly display prices when provided, availability, check-in/out validity, and stay constraints.", + "operationId": "vrbo-rate-calendar", "parameters": [ { - "description": "Canonical Vanity Fair article URL", - "in": "query", - "name": "url", + "description": "Vrbo property ID (optionally ending in ha)", + "in": "path", + "name": "property_id", "required": true, "type": "string", - "x-example": "https://www.vanityfair.com/story/example-article" + "x-example": "961219" } ], "produces": [ @@ -550688,7 +635405,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/vrbo.vrboRateCalendarResponseDoc" } }, "400": { @@ -550697,18 +635414,6 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -550721,24 +635426,68 @@ "ApiKeyAuth": [] } ], - "summary": "Get Vanity Fair article content", + "summary": "Get a Vrbo property rate calendar", "tags": [ - "Vanity Fair" + "Vrbo" ] } }, - "/vanityfair/author": { + "/vrbo/properties/{property_id}/reviews": { "get": { - "description": "Returns a Vanity Fair contributor profile from their canonical `url` (`www.vanityfair.com/contributor/`, required). The response has the name, job title when present, biography, headshot, social links and recent articles with title, URL and publication time.", - "operationId": "vanityfair-author", + "description": "Returns one page of public traveler reviews, aggregate count, and current sort choices. Pagination and sort values follow the public reviews query.", + "operationId": "vrbo-property-reviews", "parameters": [ { - "description": "Canonical Vanity Fair contributor URL", - "in": "query", - "name": "url", + "description": "Vrbo property ID (optionally ending in ha)", + "in": "path", + "name": "property_id", "required": true, "type": "string", - "x-example": "https://www.vanityfair.com/contributor/example-writer" + "x-example": "11458735ha" + }, + { + "default": 0, + "description": "Zero-based review offset", + "in": "query", + "minimum": 0, + "name": "start_index", + "type": "integer" + }, + { + "default": 10, + "description": "Page size from 1 to 50", + "in": "query", + "maximum": 50, + "minimum": 1, + "name": "size", + "type": "integer" + }, + { + "description": "Sort value from the response's sort_options", + "enum": [ + "HIGHEST_TO_LOWEST_RATED", + "LOWEST_TO_HIGHEST_RATED", + "NEWEST_TO_OLDEST", + "NEWEST_TO_OLDEST_BY_LANGUAGE", + "NEWEST_TO_OLDEST_BY_RELEVANCY" + ], + "in": "query", + "name": "sort_by", + "type": "string" + }, + { + "default": true, + "description": "Include recent reviews", + "in": "query", + "name": "include_recent_reviews", + "type": "boolean" + }, + { + "default": true, + "description": "Include rating-only reviews", + "in": "query", + "name": "include_ratings_only_reviews", + "type": "boolean" } ], "produces": [ @@ -550748,7 +635497,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.vanityFairAuthorResponseDoc" + "$ref": "#/definitions/vrbo.vrboReviewsResponseDoc" } }, "400": { @@ -550757,12 +635506,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -550775,38 +635518,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Vanity Fair contributor profile", + "summary": "Get Vrbo property reviews", "tags": [ - "Vanity Fair" + "Vrbo" ] } }, - "/vanityfair/headlines": { - "get": { - "description": "Lists the current headlines for one Vanity Fair section. `section` is required and takes `hollywood`, `movies`, `television`, `award-season`, `what-is-cinema`, `culture`, `politics`, `business`, `style`, `beauty`, `fashion` or `royals`. Each item has its title and URL.", - "operationId": "vanityfair-headlines", + "/vrbo/search": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Searches public Vrbo rental listings for a selected destination and dates. Obtain destination, region_id, and lat_long from Vrbo's destination suggestion UI. Supports date flexibility, per-room adult and child-age inputs, current filter selections and ranges, and observed sort values. Copy filter IDs and option values from the returned filters.", + "operationId": "vrbo-search", "parameters": [ { - "description": "Vanity Fair section slug", - "enum": [ - "hollywood", - "movies", - "television", - "award-season", - "what-is-cinema", - "culture", - "politics", - "business", - "style", - "beauty", - "fashion", - "royals" - ], - "in": "query", - "name": "section", + "description": "Search criteria", + "in": "body", + "name": "request", "required": true, - "type": "string", - "x-example": "hollywood" + "schema": { + "$ref": "#/definitions/vrbo.SearchOption" + } } ], "produces": [ @@ -550816,7 +635549,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/vrbo.vrboSearchResponseDoc" } }, "400": { @@ -550837,16 +635570,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Vanity Fair section headlines", + "summary": "Search Vrbo vacation rentals", "tags": [ - "Vanity Fair" + "Vrbo" ] } }, - "/vanityfair/news": { + "/vrbo/travel-pages": { "get": { - "description": "Returns the latest Vanity Fair top stories and takes no parameters. Each item has its title, canonical URL, summary, author, publication time and lead image.", - "operationId": "vanityfair-news", + "description": "Lists the public stay-type and travel-theme pages linked from Vrbo's vacation-rental index. These are editorial browse pages, not a complete search-filter enumeration.", + "operationId": "vrbo-travel-pages", "produces": [ "application/json" ], @@ -550854,13 +635587,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/vrbo.vrboTravelPagesResponseDoc" } }, "503": { @@ -550875,16 +635602,26 @@ "ApiKeyAuth": [] } ], - "summary": "Get Vanity Fair top stories", + "summary": "List Vrbo travel pages", "tags": [ - "Vanity Fair" + "Vrbo" ] } }, - "/vanityfair/sections": { + "/vrbo/travel-pages/{slug}": { "get": { - "description": "Returns the Vanity Fair section inventory: Hollywood (plus its Movies, Television, and Award Season sub-verticals), Arts & Culture, Politics, Business, and Style (plus its Beauty, Fashion, and Royals sub-verticals), each linking to its public listing page.", - "operationId": "vanityfair-sections", + "description": "Returns public editorial sections, visible rental cards, and related travel-page links for a /travel/{slug} page. Date-scoped prices are omitted; page slugs are not search-filter values.", + "operationId": "vrbo-travel-page-detail", + "parameters": [ + { + "description": "Vrbo travel-page slug returned by /vrbo/travel-pages", + "in": "path", + "name": "slug", + "required": true, + "type": "string", + "x-example": "cabins" + } + ], "produces": [ "application/json" ], @@ -550892,7 +635629,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/vrbo.vrboTravelPageDetailResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -550901,24 +635650,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get Vanity Fair sections", + "summary": "Get a Vrbo travel page", "tags": [ - "Vanity Fair" + "Vrbo" ] } }, - "/variety/article": { + "/walesonline/article": { "get": { - "description": "Returns one Variety article by its canonical `variety.com` `url`, in the form `////-/`. The response has the title, description, authors, section, published and updated times, lead image, body `paragraphs` and a `paywalled` flag.", - "operationId": "variety-article", + "description": "Returns public WalesOnline article metadata (including the section) and body paragraphs from a canonical article URL, including live blogs. Photo-gallery URLs are rejected.", + "operationId": "walesonline-article", "parameters": [ { - "description": "Canonical Variety article URL", + "description": "Canonical WalesOnline article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://variety.com/2026/music/global/oasis-more-live-27-shows-uk-italy-germany-1236873146/" + "x-example": "https://www.walesonline.co.uk/news/wales-news/major-welsh-theatre-figure-who-34653727" } ], "produces": [ @@ -550943,6 +635692,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -550955,34 +635710,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get Variety article content", + "summary": "Get WalesOnline article content", "tags": [ - "Variety" + "WalesOnline" ] } }, - "/variety/author": { + "/walesonline/author": { "get": { - "description": "Returns a Variety author profile with name, biography, photo, social links and one page of recent articles. Give either `slug` (such as `ellise-shafer`) or an author `url`, which may include a `/page//` segment; `page` (default 1) overrides it. `has_next_page` shows whether another page exists.", - "operationId": "variety-author", + "description": "Returns one WalesOnline author's public profile (name, plus job title, bio, email and X/Twitter handle when the author lists them) and one page of their recent articles.", + "operationId": "walesonline-author", "parameters": [ { - "description": "Author slug, e.g. ellise-shafer", + "description": "Author slug, e.g. rahaf-ali", "in": "query", "name": "slug", "type": "string", - "x-example": "ellise-shafer" + "x-example": "rahaf-ali" }, { - "description": "Canonical variety.com/author/ URL, optionally with a /page// segment; alternative to slug", + "description": "Canonical walesonline.co.uk/authors// URL; alternative to slug", "in": "query", "name": "url", "type": "string", - "x-example": "https://variety.com/author/ellise-shafer/" + "x-example": "https://www.walesonline.co.uk/authors/rahaf-ali/" }, { "default": 1, - "description": "1-based page number; overrides any page number in url", + "description": "1-based page number of the author's article list (1 to 100); overrides any pageNumber in url", "in": "query", "name": "page", "type": "integer" @@ -550995,7 +635750,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.varietyAuthorResponseDoc" + "$ref": "#/definitions/publicnews.reachAuthorResponseDoc" } }, "400": { @@ -551010,6 +635765,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -551022,50 +635783,63 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Variety author profile", + "summary": "Get a WalesOnline author profile", "tags": [ - "Variety" + "WalesOnline" ] } }, - "/variety/headlines": { + "/walesonline/headlines": { "get": { - "description": "Lists fresh Variety headlines for one vertical. `section` is required and takes a slug such as `film`, `music`, `tv`, `biz`, `awards`, `gaming`, `global`, `legit` or `vip`; `variety-sections` lists all 24. Each item has its title and URL, plus summary, author, publication time and image when the outlet provides them.", - "operationId": "variety-headlines", + "description": "Lists recent WalesOnline headlines for one section, up to about 25 items. `section` is required and takes a slug such as `news/wales-news`, `news/politics`, `sport/rugby`, `sport/football` or `whats-on`; `walesonline-sections` lists all 37. Photo galleries are omitted, and an invalid value returns a 400 error.", + "operationId": "walesonline-headlines", "parameters": [ { - "description": "Variety vertical slug", + "description": "WalesOnline section slug", "enum": [ - "artisans", - "awards", - "biz", - "data", - "digital", - "dirt", - "film", - "gaming", - "global", - "legit", - "music", - "politics", - "scene", - "shopping", - "sports", - "streaming", - "theater", - "tune-in", - "tv", - "video", - "vintage", - "vip", - "vivant", - "voices" + "news", + "news/wales-news", + "news/uk-news", + "news/world-news", + "news/politics", + "news/local-news", + "news/education", + "news/health", + "news/cost-of-living", + "news/homes-property", + "news/motoring", + "news/motoring/motoring-news", + "news/news-opinion", + "sport", + "sport/football", + "sport/football/football-news", + "sport/football/transfer-news", + "sport/rugby", + "sport/rugby/rugby-news", + "sport/boxing", + "sport/other-sport", + "sport/other-sport/athletics", + "whats-on", + "whats-on/whats-on-news", + "whats-on/arts-culture-news", + "whats-on/family-kids-news", + "whats-on/food-drink-news", + "whats-on/music-nightlife-news", + "whats-on/restaurants-bars", + "whats-on/shopping", + "whats-on/travel", + "lifestyle", + "lifestyle/showbiz", + "lifestyle/tv", + "lifestyle/welsh-homes", + "special-features", + "in-your-area" ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "artisans" + "x-example": "news" } ], "produces": [ @@ -551084,6 +635858,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -551096,16 +635876,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Variety section headlines", + "summary": "Get WalesOnline section headlines", "tags": [ - "Variety" + "WalesOnline" ] } }, - "/variety/news": { + "/walesonline/news": { "get": { - "description": "Returns the latest Variety top stories with no parameters. Each item has its title, URL, summary, author, publication time and image. Item URLs can be passed to `variety-article` for the body.", - "operationId": "variety-news", + "description": "Returns fresh WalesOnline top stories from the public home RSS feed. Photo galleries are omitted because they have no readable article body.", + "operationId": "walesonline-news", "produces": [ "application/json" ], @@ -551134,16 +635914,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Variety top stories", + "summary": "Get WalesOnline top stories", "tags": [ - "Variety" + "WalesOnline" ] } }, - "/variety/sections": { + "/walesonline/sections": { "get": { - "description": "Lists the 24 Variety verticals accepted by `variety-headlines`, such as `film`, `tv`, `music`, `biz`, `awards`, `legit` and `voices`. Each has a `slug`, a display `name` and a `url`. Takes no parameters.", - "operationId": "variety-sections", + "description": "Lists the 37 WalesOnline sections accepted by `walesonline-headlines`, with nested slugs such as `news/wales-news`, `sport/rugby` and `whats-on/food-drink-news`. Each has a `slug`, a display `name` and a feed `url`. Takes no parameters.", + "operationId": "walesonline-sections", "produces": [ "application/json" ], @@ -551160,19 +635940,42 @@ "ApiKeyAuth": [] } ], - "summary": "Get Variety sections", + "summary": "Get WalesOnline sections", "tags": [ - "Variety" + "WalesOnline" ] } }, - "/vestiaire/brands": { + "/walgreens/stores": { "get": { "consumes": [ "application/json" ], - "description": "Returns Vestiaire Collective's full brand directory (id, name, url), not just brands with active listings for a given search -- resolves search's otherwise-opaque brand_id filter, and a search response's facets.brands, to the complete set of valid ids. Public data, sourced from Vestiaire Collective's own brand-directory page.", - "operationId": "vestiaire-brands", + "description": "Returns Walgreens stores near a latitude/longitude or a zip code, nearest first: name, address, phone, hours, and in-store services (pharmacy, clinic, photo, and more) for each. Public data sourced from Walgreens' own store locator.", + "operationId": "walgreens-stores", + "parameters": [ + { + "description": "Latitude; provide with longitude, or provide zip instead", + "in": "query", + "name": "latitude", + "type": "number", + "x-example": 41.8781 + }, + { + "description": "Longitude; provide with latitude, or provide zip instead", + "in": "query", + "name": "longitude", + "type": "number", + "x-example": -87.6298 + }, + { + "description": "US ZIP code; used when latitude/longitude are omitted", + "in": "query", + "name": "zip", + "type": "string", + "x-example": "60601" + } + ], "produces": [ "application/json" ], @@ -551180,7 +635983,54 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/vestiaire.brandsResponseDoc" + "$ref": "#/definitions/walgreens.storesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Find nearby Walgreens stores", + "tags": [ + "Walgreens" + ] + } + }, + "/wallapop/categories": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns the complete live search taxonomy as a flat parent-linked list, including all descendant IDs used by /wallapop/search. Only IDs from this search taxonomy are accepted; legacy navigation-only IDs are excluded. Re-fetch periodically because the upstream taxonomy changes.", + "operationId": "wallapop-categories", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/wallapop.categoriesResponseDoc" } }, "429": { @@ -551207,19 +636057,78 @@ "ApiKeyAuth": [] } ], - "summary": "Vestiaire Collective's full brand directory", + "summary": "Discover Wallapop search categories", "tags": [ - "Vestiaire" + "Wallapop" ] } }, - "/vestiaire/categories": { + "/wallapop/filter-options": { "get": { "consumes": [ "application/json" ], - "description": "Returns the full Vestiaire Collective category taxonomy: universes (Women, Men, Kids) at the root, with up to three nested category levels beneath each. Every id returned here is accepted by /vestiaire/search's category_id filter.", - "operationId": "vestiaire-categories", + "description": "Returns one page from a remote option list advertised by /wallapop/filters. Use its exact filter_id and category_id. brand/model lists use a root category ID; category-specific lists use the selected category ID. Model discovery requires brand. Multi-select options such as size map to the live search parameter fashion_size. q and sort provide listing context; options_query narrows the option list. Follow next_cursor while repeating the same context; an empty terminal page has no next_cursor. Option IDs are accepted by /wallapop/search's filter parameter.", + "operationId": "wallapop-filter-options", + "parameters": [ + { + "description": "Remote filter ID advertised by /wallapop/filters for this category", + "in": "query", + "name": "filter_id", + "required": true, + "type": "string", + "x-example": "item_language" + }, + { + "description": "Live category ID from /wallapop/categories. Use a root for brand/model or the selected category for category-specific remote options.", + "in": "query", + "name": "category_id", + "required": true, + "type": "integer", + "x-example": 24100 + }, + { + "description": "Required with filter_id=model; a brand option ID", + "in": "query", + "name": "brand", + "type": "string", + "x-example": "BMW" + }, + { + "description": "Optional listing search context", + "in": "query", + "name": "q", + "type": "string", + "x-example": "iphone" + }, + { + "description": "Optional listing sort context", + "enum": [ + "closest", + "most_relevance", + "newest", + "price_low_to_high", + "price_high_to_low" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "most_relevance" + }, + { + "description": "Optional text search inside the dynamic option list", + "in": "query", + "name": "options_query", + "type": "string", + "x-example": "BMW" + }, + { + "description": "Opaque next_cursor returned by this endpoint", + "in": "query", + "name": "cursor", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -551227,7 +636136,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/vestiaire.categoriesResponseDoc" + "$ref": "#/definitions/wallapop.filterOptionsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -551254,19 +636175,35 @@ "ApiKeyAuth": [] } ], - "summary": "Vestiaire Collective category taxonomy", + "summary": "Discover Wallapop remote filter values", "tags": [ - "Vestiaire" + "Wallapop" ] } }, - "/vestiaire/conditions": { + "/wallapop/filters": { "get": { "consumes": [ "application/json" ], - "description": "Returns the fixed set of condition ids accepted by /vestiaire/search's condition_id filter, with each id's display name and current listing count.", - "operationId": "vestiaire-conditions", + "description": "Returns Wallapop's live search filter schema for a query and optional category. Each filter includes its current type, the upstream search-enabled flag when provided, accepted parameter names, inline option values or slider bounds, and a category-scoped /wallapop/filter-options link for remote value lists.", + "operationId": "wallapop-filters", + "parameters": [ + { + "description": "Optional search phrase used to select relevant filters", + "in": "query", + "name": "q", + "type": "string", + "x-example": "iphone" + }, + { + "description": "Any live search taxonomy ID from /wallapop/categories", + "in": "query", + "name": "category_id", + "type": "integer", + "x-example": 100 + } + ], "produces": [ "application/json" ], @@ -551274,7 +636211,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/vestiaire.conditionsResponseDoc" + "$ref": "#/definitions/wallapop.filtersResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" } }, "429": { @@ -551301,27 +636250,27 @@ "ApiKeyAuth": [] } ], - "summary": "Vestiaire Collective condition values", + "summary": "Discover Wallapop search filters", "tags": [ - "Vestiaire" + "Wallapop" ] } }, - "/vestiaire/product": { + "/wallapop/item": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single Vestiaire Collective listing's public detail: price, brand, category, condition, material, color, size, seller summary, and photos. `path` is the listing's URL or site-relative path, as returned by /vestiaire/search's `url` field -- the numeric id alone cannot be resolved to a page. Public data, sourced from Vestiaire Collective's own listing page.", - "operationId": "vestiaire-product", + "description": "Returns public listing details parsed from the anonymous server-rendered item page: description, price, taxonomy, condition, images, coarse location, shipping, category attributes, hashtags, and related-search links. Pass a clean https item URL returned by /wallapop/search, using es.wallapop.com, it.wallapop.com, or pt.wallapop.com. Seller/profile/contact data, exact coordinates, postal codes, favorites, and view-tracking state are omitted. The upstream may rate-limit or block requests; this endpoint retries automatically (up to three attempts).", + "operationId": "wallapop-item-detail", "parameters": [ { - "description": "Listing URL or path, from a search result's url field", + "description": "Clean https public item URL from /wallapop/search on es.wallapop.com, it.wallapop.com, or pt.wallapop.com", "in": "query", - "name": "path", + "name": "url", "required": true, "type": "string", - "x-example": "/women-clothing/biker-jackets/off-white/black-leather-off-white-biker-jacket-70860454.shtml" + "x-example": "https%3A%2F%2Fes.wallapop.com%2Fitem%2Fchaqueta-1183989904" } ], "produces": [ @@ -551331,7 +636280,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/vestiaire.productResponseDoc" + "$ref": "#/definitions/wallapop.itemDetailResponseDoc" } }, "400": { @@ -551370,81 +636319,132 @@ "ApiKeyAuth": [] } ], - "summary": "Vestiaire Collective listing detail", + "summary": "Fetch a public Wallapop listing detail page", "tags": [ - "Vestiaire" + "Wallapop" ] } }, - "/vestiaire/search": { + "/wallapop/search": { "get": { "consumes": [ "application/json" ], - "description": "Searches Vestiaire Collective's public pre-owned luxury resale catalog by keyword, category, brand, and condition, with sort and pagination. `sort` values: `relevance`, `price_asc`, `price_desc`, `recency`. `category_id` and `condition_id` come from /vestiaire/categories and /vestiaire/conditions. `page` * `per_page` cannot exceed an offset of 1000 (the upstream service's own pagination limit) -- narrow the query instead of paging deeper. Public data, sourced from Vestiaire Collective's own search service.", - "operationId": "vestiaire-search", + "description": "Returns one page of public Wallapop listing cards with title, price, currency, images, coarse location, taxonomy, shipping state, and a public item URL. q is a free-text search. latitude and longitude are required caller-provided coordinates because Wallapop otherwise infers location from the server's network location. category_id accepts any ID returned by /wallapop/categories, including descendants. sort is one of closest, most_relevance, newest, price_low_to_high, or price_high_to_low. When category_id is supplied, discover condition values from /wallapop/filters; categories can add values beyond the base set. Use /wallapop/filter-options for remote filter values. Pass next_cursor back as cursor by itself to fetch the next page.", + "operationId": "wallapop-search", "parameters": [ { - "description": "Keyword search text", + "description": "Free-text listing search, 2 to 200 characters", "in": "query", "name": "q", + "required": true, "type": "string", - "x-example": "chanel bag" + "x-example": "iphone" }, { - "description": "Category id, from /vestiaire/categories", + "description": "Caller-provided search latitude, -90 through 90", + "in": "query", + "name": "latitude", + "required": true, + "type": "number", + "x-example": 40.4168 + }, + { + "description": "Caller-provided search longitude, -180 through 180", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": -3.7038 + }, + { + "description": "Any live search taxonomy ID from /wallapop/categories", "in": "query", "name": "category_id", + "type": "integer", + "x-example": 24200 + }, + { + "description": "Wallapop sort order", + "enum": [ + "closest", + "most_relevance", + "newest", + "price_low_to_high", + "price_high_to_low" + ], + "in": "query", + "name": "sort", "type": "string", - "x-example": "5" + "x-example": "most_relevance" }, { - "description": "Brand id, from a prior search's facets.brands", + "description": "Minimum sale price", "in": "query", - "name": "brand_id", + "name": "min_price", + "type": "number", + "x-example": 10 + }, + { + "description": "Maximum sale price", + "in": "query", + "name": "max_price", + "type": "number", + "x-example": 500 + }, + { + "description": "Repeatable or comma-separated condition values. With category_id, use the current values from /wallapop/filters; without category_id, base values are new, as_good_as_new, good, fair, and has_given_it_all.", + "in": "query", + "name": "condition", "type": "string", - "x-example": "50" + "x-example": "new,good" }, { - "description": "Condition id. Allowed values: 1, 2, 3, 4, 5", + "description": "Pass true to limit to shipping-capable listings; omit to include all. false is rejected because Wallapop ignores it.", "enum": [ - "1", - "2", - "3", - "4", - "5" + "true" ], "in": "query", - "name": "condition_id", + "name": "is_shippable", "type": "string", - "x-example": "3" + "x-example": "true" }, { - "description": "Sort order. Allowed values: relevance, price_asc, price_desc, recency", + "description": "Listing date window", "enum": [ - "relevance", - "price_asc", - "price_desc", - "recency" + "today", + "lastWeek", + "lastMonth" ], "in": "query", - "name": "sort", + "name": "time_filter", "type": "string", - "x-example": "price_asc" + "x-example": "lastWeek" }, { - "description": "Page number, starting at 1", + "description": "Maximum distance from the supplied coordinates, 0 through 1000 km", "in": "query", - "name": "page", + "name": "distance_in_km", "type": "integer", - "x-example": 1 + "x-example": 25 }, { - "description": "Results per page, up to 60", + "collectionFormat": "csv", + "description": "Repeatable category-specific key:value pair discovered from /wallapop/filters, e.g. brand:BMW, color:Black, has_warranty:true, storage_capacity:128gb, item_language:english, or fashion_size:3,4. For remote values use IDs returned by /wallapop/filter-options.", "in": "query", - "name": "per_page", - "type": "integer", - "x-example": 24 + "items": { + "type": "string" + }, + "name": "filter", + "type": "array", + "x-example": "storage_capacity:128gb" + }, + { + "description": "Opaque next_cursor returned by a previous response. Use it alone, without initial search parameters.", + "in": "query", + "name": "cursor", + "type": "string", + "x-example": "eyJ2IjoxLCJuZXh0X3BhZ2UiOiJ..." } ], "produces": [ @@ -551454,7 +636454,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/vestiaire.searchResponseDoc" + "$ref": "#/definitions/wallapop.searchResponseDoc" } }, "400": { @@ -551493,27 +636493,27 @@ "ApiKeyAuth": [] } ], - "summary": "Vestiaire Collective listing search", + "summary": "Search Wallapop public listings", "tags": [ - "Vestiaire" + "Wallapop" ] } }, - "/vestiaire/search-sellers": { + "/walmart/product/{item_id}": { "get": { "consumes": [ "application/json" ], - "description": "Finds Vestiaire Collective sellers by username or first name. A matched result's id can be passed directly to GET /vestiaire/seller for that seller's full public storefront profile. Public data, sourced from Vestiaire Collective's own member-search service.", - "operationId": "vestiaire-search-sellers", + "description": "Returns a Walmart product: price, availability, brand, images, rating, seller, description, highlights, specifications, and variants.", + "operationId": "walmart-product", "parameters": [ { - "description": "Seller username or first name to search for", - "in": "query", - "name": "q", + "description": "Walmart item id (the numeric id in a /ip/{id} URL)", + "in": "path", + "name": "item_id", "required": true, "type": "string", - "x-example": "michelle" + "x-example": "5689919121" } ], "produces": [ @@ -551523,7 +636523,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/vestiaire.searchSellersResponseDoc" + "$ref": "#/definitions/walmart.productResponseDoc" } }, "400": { @@ -551532,8 +636532,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -551556,27 +636556,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Vestiaire Collective sellers by name", + "summary": "Get a Walmart product", "tags": [ - "Vestiaire" + "Walmart" ] } }, - "/vestiaire/seller": { + "/walmart/product/{item_id}/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Vestiaire Collective seller's public storefront profile: username, country, segment, aggregate sold/listed/bought counts, and follower/following counts. `id` is the numeric seller id, as returned by /vestiaire/search's `seller_id` field or /vestiaire/product's `seller.id`. Public data, sourced from Vestiaire Collective's own seller profile page.", - "operationId": "vestiaire-seller", + "description": "Returns the reviews snapshot embedded in a Walmart product page: average rating, total review count, the per-star rating breakdown, the recommended percentage, the top positive and top negative review, and a sample of recent reviews. This is a single on-page snapshot, not a full paginated feed. A product that exists but has no reviews returns zero counts and an empty reviews list.", + "operationId": "walmart-product-reviews", "parameters": [ { - "description": "Seller id", - "in": "query", - "name": "id", + "description": "Walmart item id (the numeric id in a /ip/{id} URL)", + "in": "path", + "name": "item_id", "required": true, "type": "string", - "x-example": "36526194" + "x-example": "5689919121" } ], "produces": [ @@ -551586,7 +636586,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/vestiaire.sellerResponseDoc" + "$ref": "#/definitions/walmart.reviewsResponseDoc" } }, "400": { @@ -551601,12 +636601,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -551625,27 +636619,47 @@ "ApiKeyAuth": [] } ], - "summary": "Vestiaire Collective seller profile", + "summary": "Get Walmart product reviews", "tags": [ - "Vestiaire" + "Walmart" ] } }, - "/vestiaire/suggest": { + "/walmart/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns Vestiaire Collective's own search-box autocomplete suggestions for a partial query: matching brands plus completed search phrases. Public data, sourced from Vestiaire Collective's own search-suggestions service.", - "operationId": "vestiaire-suggest", + "description": "Returns Walmart search results: item id, title, brand, price, image, availability, seller, and rating per product.", + "operationId": "walmart-search", "parameters": [ { - "description": "Partial search query to autocomplete", + "description": "Search query", "in": "query", "name": "q", "required": true, "type": "string", - "x-example": "chane" + "x-example": "wireless earbuds" + }, + { + "description": "1-based page number (default 1)", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "description": "Sort order", + "enum": [ + "best_match", + "price_low", + "price_high", + "best_seller", + "new_arrivals", + "rating_high" + ], + "in": "query", + "name": "sort", + "type": "string" } ], "produces": [ @@ -551655,7 +636669,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/vestiaire.suggestResponseDoc" + "$ref": "#/definitions/walmart.searchResponseDoc" } }, "400": { @@ -551664,8 +636678,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -551688,24 +636702,24 @@ "ApiKeyAuth": [] } ], - "summary": "Vestiaire Collective search-box autocomplete", + "summary": "Search Walmart products", "tags": [ - "Vestiaire" + "Walmart" ] } }, - "/vice/article": { + "/wapo/article": { "get": { - "description": "Returns one VICE article by its canonical `url`, in the form `www.vice.com/en/article/`. The response has the title, description, authors, section, published and updated times, lead image and body `paragraphs`, plus a `paywalled` flag.", - "operationId": "vice-article", + "description": "Returns one public Washington Post article's metadata and body paragraphs from a canonical article URL. Metered articles that the site truncates are not available.", + "operationId": "wapo-article", "parameters": [ { - "description": "Canonical VICE article URL", + "description": "Canonical Washington Post article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.vice.com/en/article/example-article/" + "x-example": "https://www.washingtonpost.com/business/2026/09/17/example-slug/" } ], "produces": [ @@ -551715,7 +636729,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/wapo.articleResponseDoc" } }, "400": { @@ -551724,12 +636738,24 @@ "$ref": "#/definitions/app.Response" } }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -551742,24 +636768,37 @@ "ApiKeyAuth": [] } ], - "summary": "Get VICE article content", + "summary": "Get a Washington Post article's content", "tags": [ - "VICE" + "Washington Post" ] } }, - "/vice/author": { + "/wapo/author": { "get": { - "description": "Returns a VICE contributor profile from their canonical `url` (`www.vice.com/en/contributor/`, required). The response has the name and headshot when present, the biography paragraphs and recent articles with title, URL, summary, author, publication time and image.", - "operationId": "vice-author", + "description": "Returns one Washington Post staff author's public profile: byline metadata, bio, contact/social links, and one page of their recent articles.", + "operationId": "wapo-author", "parameters": [ { - "description": "Canonical VICE contributor URL", + "description": "Washington Post people slug, e.g. adam-taylor", + "in": "query", + "name": "slug", + "type": "string", + "x-example": "adam-taylor" + }, + { + "description": "Canonical washingtonpost.com/people// URL, optionally with a ?page= query; alternative to slug", "in": "query", "name": "url", - "required": true, "type": "string", - "x-example": "https://www.vice.com/en/contributor/example-writer/" + "x-example": "https://www.washingtonpost.com/people/adam-taylor/?page=2" + }, + { + "default": 1, + "description": "1-based page number; overrides any page number in url", + "in": "query", + "name": "page", + "type": "integer" } ], "produces": [ @@ -551769,7 +636808,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.viceAuthorResponseDoc" + "$ref": "#/definitions/wapo.authorResponseDoc" } }, "400": { @@ -551784,6 +636823,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -551796,38 +636841,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a VICE contributor profile", + "summary": "Get a Washington Post staff author profile", "tags": [ - "VICE" + "Washington Post" ] } }, - "/vice/headlines": { + "/wapo/headlines": { "get": { - "description": "Returns fresh headlines from one VICE section, either its public RSS feed (News, Life, Tech, Music) or its public listing page for the remaining sections.", - "operationId": "vice-headlines", + "description": "Returns the first page of a Washington Post section front: each story's title, canonical URL, description, section, publication time, and lead image. Section must be a path returned by /wapo/sections.", + "operationId": "wapo-headlines", "parameters": [ { - "description": "VICE section slug", - "enum": [ - "news", - "life", - "tech", - "music", - "munchies", - "waypoint", - "rec-room", - "membership", - "via-vice", - "spotlights", - "theunstoppables", - "eu" - ], + "description": "Section path from /wapo/sections", "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "news" + "x-example": "world" } ], "produces": [ @@ -551837,7 +636868,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/wapo.headlinesResponseDoc" } }, "400": { @@ -551846,6 +636877,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -551858,16 +636901,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get VICE section headlines", + "summary": "Get the latest stories in a Washington Post section", "tags": [ - "VICE" + "Washington Post" ] } }, - "/vice/news": { + "/wapo/news": { "get": { - "description": "Returns the latest VICE stories with no parameters. Each item has its title and URL, plus summary, author, publication time and lead image when the outlet provides them. Pass an item URL to `vice-article` to read the story.", - "operationId": "vice-news", + "description": "Returns the current Washington Post news list with no parameters. Each item has its `title`, canonical `url`, `published_at` and `last_modified`, the last when the publisher supplies it. Items do not include summaries or authors.", + "operationId": "wapo-news", "produces": [ "application/json" ], @@ -551875,7 +636918,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/wapo.newsResponseDoc" } }, "429": { @@ -551896,16 +636939,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get VICE top stories", + "summary": "Get the latest Washington Post stories", "tags": [ - "VICE" + "Washington Post" ] } }, - "/vice/sections": { + "/wapo/sections": { "get": { - "description": "Returns the VICE section inventory: the site's own 12 curated sections (News, Life, Tech, Music, and others), each linking to its public listing page.", - "operationId": "vice-sections", + "description": "Lists the Washington Post sections accepted by `wapo-headlines`. Each has a path `slug` such as `politics` or `business/technology`, a display `name` and a landing-page `url`. Use it to find valid `section` values. Takes no parameters.", + "operationId": "wapo-sections", "produces": [ "application/json" ], @@ -551913,7 +636956,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/wapo.sectionsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" } } }, @@ -551922,63 +636983,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get VICE sections", + "summary": "List Washington Post sections", "tags": [ - "VICE" + "Washington Post" ] } }, - "/vinted/brand": { + "/wattpad/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns Vinted listings for a specific brand, with optional price filtering and sort order. `order` values: `relevance`, `newest_first`, `price_high_to_low`, `price_low_to_high`. Public data, sourced from Vinted's own server-rendered brand page.", - "operationId": "vinted-brand", - "parameters": [ - { - "description": "Numeric Vinted brand ID, from a /vinted/item result's brand link", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "386688" - }, - { - "description": "Minimum price", - "in": "query", - "name": "price_from", - "type": "number", - "x-example": 10 - }, - { - "description": "Maximum price", - "in": "query", - "name": "price_to", - "type": "number", - "x-example": 50 - }, - { - "description": "Sort order. Allowed values: relevance, newest_first, price_high_to_low, price_low_to_high", - "enum": [ - "relevance", - "newest_first", - "price_high_to_low", - "price_low_to_high" - ], - "in": "query", - "name": "order", - "type": "string", - "x-example": "price_low_to_high" - }, - { - "description": "Page number, starting at 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - } - ], + "description": "Returns Wattpad's story categories (Romance, Fantasy, Fanfiction, Werewolf, ...) with id, name and English name. These ids are the values the category parameter of wattpad-search takes and the values in every story's category_ids. The list is read live from Wattpad.", + "operationId": "wattpad-categories", "produces": [ "application/json" ], @@ -551986,7 +637003,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/vinted.brandResponseDoc" + "$ref": "#/definitions/wattpad.categoriesResponseDoc" } }, "400": { @@ -551995,24 +637012,12 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -552025,19 +637030,19 @@ "ApiKeyAuth": [] } ], - "summary": "Vinted listings for a brand", + "summary": "List Wattpad story categories", "tags": [ - "Vinted" + "Wattpad" ] } }, - "/vinted/brands": { + "/wattpad/languages": { "get": { "consumes": [ "application/json" ], - "description": "Returns Vinted's \"Popular brands\" directory. This is Vinted's own curated list, not an exhaustive list of every brand in its catalog. Each entry's `id` is usable directly as the `id` query parameter to /vinted/brand. Public data, sourced from Vinted's own server-rendered brands page.", - "operationId": "vinted-brands", + "description": "Returns the story languages Wattpad's search can filter by, each with its numeric id and native-script name (50 at the time of writing). These ids are the values the language parameter of wattpad-search takes.", + "operationId": "wattpad-languages", "produces": [ "application/json" ], @@ -552045,17 +637050,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/vinted.brandsResponseDoc" + "$ref": "#/definitions/wattpad.languagesResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -552072,61 +637077,27 @@ "ApiKeyAuth": [] } ], - "summary": "Vinted popular-brands directory", + "summary": "List Wattpad story languages", "tags": [ - "Vinted" + "Wattpad" ] } }, - "/vinted/catalog": { + "/wattpad/part": { "get": { "consumes": [ "application/json" ], - "description": "Returns Vinted resale listings matching a text search, with optional price filtering and sort order. `order` values: `relevance`, `newest_first`, `price_high_to_low`, `price_low_to_high`. Public data, sourced from Vinted's own server-rendered catalog page.", - "operationId": "vinted-catalog", + "description": "Returns one Wattpad chapter's metadata: id, title, link, word count, reads, votes, comments, length, dates and the story it belongs to (id and title). part_id is the numeric chapter id from wattpad-story-parts. A chapter that does not exist returns not found. Chapter text is never returned.", + "operationId": "wattpad-part", "parameters": [ { - "description": "Search text", + "description": "Numeric chapter id from the id field of wattpad-story-parts", "in": "query", - "name": "search_text", + "name": "part_id", "required": true, "type": "string", - "x-example": "jacket" - }, - { - "description": "Minimum price", - "in": "query", - "name": "price_from", - "type": "number", - "x-example": 10 - }, - { - "description": "Maximum price", - "in": "query", - "name": "price_to", - "type": "number", - "x-example": 50 - }, - { - "description": "Sort order. Allowed values: relevance, newest_first, price_high_to_low, price_low_to_high", - "enum": [ - "relevance", - "newest_first", - "price_high_to_low", - "price_low_to_high" - ], - "in": "query", - "name": "order", - "type": "string", - "x-example": "price_low_to_high" - }, - { - "description": "Page number, starting at 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "1353317758" } ], "produces": [ @@ -552136,7 +637107,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/vinted.catalogResponseDoc" + "$ref": "#/definitions/wattpad.partResponseDoc" } }, "400": { @@ -552157,12 +637128,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -552175,19 +637140,43 @@ "ApiKeyAuth": [] } ], - "summary": "Vinted listing search", + "summary": "Get a Wattpad chapter", "tags": [ - "Vinted" + "Wattpad" ] } }, - "/vinted/categories": { + "/wattpad/part-comments": { "get": { "consumes": [ "application/json" ], - "description": "Returns Vinted's top-level catalog categories (e.g. Women, Men, Kids, Home, Electronics, Sports, Entertainment, Hobbies & collectibles). This is the root level only -- Vinted's full category tree goes several levels deeper on the live site, but deeper levels aren't server-rendered so aren't covered here. Each entry's `id` is usable directly as the `id` query parameter to /vinted/category. Public data, sourced from Vinted's own server-rendered catalog navigation.", - "operationId": "vinted-categories", + "description": "Returns one page of the public reader comments on a Wattpad chapter, newest first: id, text, commenter username and avatar, reply count, whether it is a reply, parent id, link and creation time. part_id is the numeric chapter id from wattpad-story-parts. limit is 1 to 100 (default 20) and offset pages the list; next_offset is absent on the last page. A chapter with no comments, or an unknown chapter, returns an empty list.", + "operationId": "wattpad-part-comments", + "parameters": [ + { + "description": "Numeric chapter id from the id field of wattpad-story-parts", + "in": "query", + "name": "part_id", + "required": true, + "type": "string", + "x-example": "1353317758" + }, + { + "description": "Page size, 1 to 100; defaults to 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 5 + }, + { + "description": "Zero-based result offset, below 100000; defaults to 0", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + } + ], "produces": [ "application/json" ], @@ -552195,17 +637184,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/vinted.categoriesResponseDoc" + "$ref": "#/definitions/wattpad.partCommentsResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -552222,61 +637211,118 @@ "ApiKeyAuth": [] } ], - "summary": "Vinted top-level catalog categories", + "summary": "List reader comments on a Wattpad chapter", "tags": [ - "Vinted" + "Wattpad" ] } }, - "/vinted/category": { + "/wattpad/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns Vinted listings for a specific category, with optional price filtering and sort order. `order` values: `relevance`, `newest_first`, `price_high_to_low`, `price_low_to_high`. Public data, sourced from Vinted's own server-rendered category page.", - "operationId": "vinted-category", + "description": "Searches Wattpad's story catalog by text or browses it by ranking, category and language, and returns one page of stories: id, title, description, cover, link, author, votes, reads, comments, chapter count, completed and mature flags, language, category ids, tags and dates. Give at least one of query, filter, category or language. filter is hot, new or featured; category is an id from wattpad-categories; language is an id from wattpad-languages. limit is 1 to 100 (default 20) and offset pages the results: a text search reaches offset 9999, while browsing without a query is capped at 1500 results. Browse pages can hold fewer stories than limit (or none) because Wattpad filters after paging, so advance with next_offset rather than the item count.", + "operationId": "wattpad-search", "parameters": [ { - "description": "Numeric Vinted category ID, from a /vinted/item result's categories breadcrumb link", + "description": "Text to search for in story titles, descriptions and tags, up to 200 characters", "in": "query", - "name": "id", - "required": true, + "name": "query", "type": "string", - "x-example": "1904" + "x-example": "romance" }, { - "description": "Minimum price", + "description": "Ranking: hot is currently popular, new is recently published, featured is Wattpad's featured stories", + "enum": [ + "hot", + "new", + "featured" + ], "in": "query", - "name": "price_from", - "type": "number", - "x-example": 10 + "name": "filter", + "type": "string", + "x-example": "hot" }, { - "description": "Maximum price", + "description": "Category id from wattpad-categories, for example 4 for Romance", "in": "query", - "name": "price_to", - "type": "number", - "x-example": 50 + "name": "category", + "type": "integer", + "x-example": 4 }, { - "description": "Sort order. Allowed values: relevance, newest_first, price_high_to_low, price_low_to_high", + "description": "Story language id from wattpad-languages, for example 1 for English", "enum": [ - "relevance", - "newest_first", - "price_high_to_low", - "price_low_to_high" + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 46, + 47, + 48, + 49, + 50, + 51, + 53 ], "in": "query", - "name": "order", - "type": "string", - "x-example": "price_low_to_high" + "name": "language", + "type": "integer", + "x-example": 1 }, { - "description": "Page number, starting at 1", + "description": "Page size, 1 to 100; defaults to 20", "in": "query", - "name": "page", + "name": "limit", "type": "integer", - "x-example": 1 + "x-example": 20 + }, + { + "description": "Zero-based result offset; below 10000 with query, below 1500 without", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -552286,7 +637332,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/vinted.categoryResponseDoc" + "$ref": "#/definitions/wattpad.searchResponseDoc" } }, "400": { @@ -552295,20 +637341,79 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Search and browse Wattpad stories", + "tags": [ + "Wattpad" + ] + } + }, + "/wattpad/search-users": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Searches Wattpad's authors by username or name and returns one page: username, display name, bio, avatar, verified flag, published story count and follower count. limit is 1 to 100 (default 20) and offset pages the results. Authors with a private profile or who have opted out of crawling are left out, so a page can hold fewer authors than limit; advance with next_offset.", + "operationId": "wattpad-search-users", + "parameters": [ + { + "description": "Author name to search for, up to 200 characters", + "in": "query", + "name": "query", + "required": true, + "type": "string", + "x-example": "notjust" }, - "500": { - "description": "Internal Server Error", + { + "description": "Page size, 1 to 100; defaults to 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 5 + }, + { + "description": "Zero-based result offset, below 10000; defaults to 0", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/wattpad.searchUsersResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -552325,27 +637430,27 @@ "ApiKeyAuth": [] } ], - "summary": "Vinted listings for a category", + "summary": "Search Wattpad authors by name", "tags": [ - "Vinted" + "Wattpad" ] } }, - "/vinted/item": { + "/wattpad/story": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single Vinted listing's detail: title, description, brand, size, condition, material, color, price, category breadcrumb, and photos. Public data, sourced from Vinted's own server-rendered item page.", - "operationId": "vinted-item", + "description": "Returns one Wattpad story's public details: title, description, cover, link, author, votes, reads, comments, chapter count, completed and mature flags, language, category ids, tags, first chapter id, last published date, rating and copyright codes, paywall flag and dates. story_id is the numeric id from the story's wattpad.com link; the full link is also accepted. A story that does not exist returns not found. Chapter text is never returned.", + "operationId": "wattpad-story", "parameters": [ { - "description": "Numeric Vinted item ID, from a /vinted/catalog result's id field", + "description": "Numeric Wattpad story id, such as 344352588; a wattpad.com/story link is also accepted", "in": "query", - "name": "id", + "name": "story_id", "required": true, "type": "string", - "x-example": "9595406652" + "x-example": "344352588" } ], "produces": [ @@ -552355,7 +637460,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/vinted.itemResponseDoc" + "$ref": "#/definitions/wattpad.storyResponseDoc" } }, "400": { @@ -552376,12 +637481,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -552394,27 +637493,27 @@ "ApiKeyAuth": [] } ], - "summary": "A single Vinted listing's detail", + "summary": "Get a Wattpad story", "tags": [ - "Vinted" + "Wattpad" ] } }, - "/vinted/member": { + "/wattpad/story-parts": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Vinted seller's public storefront profile: username, self-disclosed coarse location, rating, and follower/following counts. Deliberately excludes online-presence and activity data (last-seen timestamps, upload-frequency badges) present on the live page. Public data, sourced from Vinted's own server-rendered member page.", - "operationId": "vinted-member", + "description": "Returns a Wattpad story's chapter list, in reading order: id, title, link, word count, reads, votes, comments, length, and created and modified dates for every chapter. The per-chapter reads show where readers drop off. Use it to see how a story is paced and which chapters readers react to. story_id is the numeric story id, or its wattpad.com link. Chapter text is never returned.", + "operationId": "wattpad-story-parts", "parameters": [ { - "description": "Numeric Vinted member ID, from a /vinted/item result's seller link", + "description": "Numeric Wattpad story id, such as 344352588; a wattpad.com/story link is also accepted", "in": "query", - "name": "id", + "name": "story_id", "required": true, "type": "string", - "x-example": "3159465141" + "x-example": "344352588" } ], "produces": [ @@ -552424,7 +637523,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/vinted.memberResponseDoc" + "$ref": "#/definitions/wattpad.storyPartsResponseDoc" } }, "400": { @@ -552445,12 +637544,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -552463,27 +637556,34 @@ "ApiKeyAuth": [] } ], - "summary": "A Vinted seller's public storefront profile", + "summary": "List a Wattpad story's chapters", "tags": [ - "Vinted" + "Wattpad" ] } }, - "/vlr/event": { + "/wattpad/story-recommendations": { "get": { "consumes": [ "application/json" ], - "description": "Returns one VLR.gg event: name, series, dates, prize, location and the participating teams with ids. Use vlr-event-matches for its matches and vlr-team for a team.", - "operationId": "vlr-event", + "description": "Returns the stories Wattpad recommends alongside one story (readers of this also read these), with the same fields as wattpad-search: id, title, description, cover, link, author, votes, reads, comments, chapter count, completed and mature flags, language, category ids, tags and dates. story_id is the numeric story id or its wattpad.com link. Wattpad returns at most 18 recommendations and does not page; limit is 1 to 20.", + "operationId": "wattpad-story-recommendations", "parameters": [ { - "description": "Numeric VLR event id from vlr-events", + "description": "Numeric Wattpad story id, such as 344352588; a wattpad.com/story link is also accepted", "in": "query", - "name": "id", + "name": "story_id", "required": true, "type": "string", - "x-example": "3166" + "x-example": "344352588" + }, + { + "description": "Maximum recommendations to return, 1 to 20; defaults to 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 5 } ], "produces": [ @@ -552493,19 +637593,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/vlr.EventDetail" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/wattpad.recommendationsResponseDoc" } }, "400": { @@ -552538,27 +637626,27 @@ "ApiKeyAuth": [] } ], - "summary": "VLR.gg Valorant event detail and participating teams", + "summary": "List stories Wattpad recommends for a story", "tags": [ - "VLR" + "Wattpad" ] } }, - "/vlr/event-agents": { + "/wattpad/user": { "get": { "consumes": [ "application/json" ], - "description": "Returns the agent pick-rate matrix of one VLR.gg event: for the whole event and for each map, the number of games, the attack-side and defense-side round win rates and the share of games in which each agent was played. Also returns, per map, each team's agents used and the agents picked in each of its matches (compositions). Use it to see an event's meta; vlr-stats gives per-player agent usage.", - "operationId": "vlr-event-agents", + "description": "Returns a Wattpad author's public profile: username, display name, bio, avatar, location, website, verified and ambassador flags, follower and following counts, votes received, published story count, reading list count and join date. username is the name from the author's wattpad.com/user/ link, case-insensitive. Authors with a private profile or who have opted out of crawling are not returned. An unknown author returns not found.", + "operationId": "wattpad-user", "parameters": [ { - "description": "Numeric VLR event id from vlr-events", + "description": "Wattpad username from wattpad.com/user/{username}; a profile link or @name is also accepted", "in": "query", - "name": "id", + "name": "username", "required": true, "type": "string", - "x-example": "3166" + "x-example": "notjustarandomgirl" } ], "produces": [ @@ -552568,19 +637656,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/vlr.EventAgentsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/wattpad.userResponseDoc" } }, "400": { @@ -552613,27 +637689,41 @@ "ApiKeyAuth": [] } ], - "summary": "VLR.gg Valorant event agent pick rates by map", + "summary": "Get a Wattpad author profile", "tags": [ - "VLR" + "Wattpad" ] } }, - "/vlr/event-matches": { + "/wattpad/user-stories": { "get": { "consumes": [ "application/json" ], - "description": "Returns every match of one VLR.gg event (upcoming, live and completed) with teams, scores, stage and whether stats or VODs exist. Use vlr-match with a returned `id` for map detail.", - "operationId": "vlr-event-matches", + "description": "Returns one page of the stories a Wattpad author has published, with the same fields as wattpad-search: id, title, description, cover, link, votes, reads, comments, chapter count, completed and mature flags, language, category ids, tags and dates. username is the name from the author's wattpad.com/user/ link. limit is 1 to 100 (default 20) and offset pages the list; next_offset is absent on the last page. Authors with a private profile or who have opted out of crawling are not returned. This call reads the author's access settings first, so it costs two requests.", + "operationId": "wattpad-user-stories", "parameters": [ { - "description": "Numeric VLR event id from vlr-events", + "description": "Wattpad username from wattpad.com/user/{username}; a profile link or @name is also accepted", "in": "query", - "name": "id", + "name": "username", "required": true, "type": "string", - "x-example": "3166" + "x-example": "notjustarandomgirl" + }, + { + "description": "Page size, 1 to 100; defaults to 20", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 5 + }, + { + "description": "Zero-based result offset; defaults to 0", + "in": "query", + "name": "offset", + "type": "integer", + "x-example": 0 } ], "produces": [ @@ -552643,19 +637733,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/vlr.EventMatchesResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/wattpad.userStoriesResponseDoc" } }, "400": { @@ -552688,38 +637766,40 @@ "ApiKeyAuth": [] } ], - "summary": "VLR.gg Valorant event match list", + "summary": "List a Wattpad author's stories", "tags": [ - "VLR" + "Wattpad" ] } }, - "/vlr/event-stats": { + "/wayfair/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns the player statistics table of one VLR.gg event (rating, ACS, K:D, KAST, ADR, per-round rates, first kills, clutches, totals) for every player who appeared, optionally for one `side` (`all`, `t` attack, `ct` defend). For league-wide filtered statistics use vlr-stats.", - "operationId": "vlr-event-stats", + "description": "Returns a page of Wayfair categories discovered from Wayfair's own published sitemap, closing the discovery gap where a category id otherwise has to be found elsewhere. Pair a returned id with GET /wayfair/category to browse that category's product grid. name is derived from the category's own URL slug (title-cased), not an authoritative site-provided label. q, if set, case-insensitively filters to categories whose derived name or department contains it.", + "operationId": "wayfair-categories", "parameters": [ { - "description": "Numeric VLR event id from vlr-events", + "description": "Case-insensitive substring filter on name or department", "in": "query", - "name": "id", - "required": true, + "name": "q", "type": "string", - "x-example": "3166" + "x-example": "chair" }, { - "description": "Side; one of all, t, ct; defaults to all", - "enum": [ - "all", - "t", - "ct" - ], + "description": "Result page, 1-based, defaults to 1", "in": "query", - "name": "side", - "type": "string" + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Results per page, defaults to 100, max 1000", + "in": "query", + "name": "page_size", + "type": "integer", + "x-example": 100 } ], "produces": [ @@ -552729,19 +637809,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/vlr.EventStatsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/wayfair.categoriesResponseDoc" } }, "400": { @@ -552750,12 +637818,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -552774,55 +637836,34 @@ "ApiKeyAuth": [] } ], - "summary": "VLR.gg Valorant event player statistics", + "summary": "List Wayfair categories", "tags": [ - "VLR" + "Wayfair" ] } }, - "/vlr/events": { + "/wayfair/category": { "get": { "consumes": [ "application/json" ], - "description": "Returns Valorant events from VLR.gg: ongoing, upcoming and completed events with prize pool, dates and region flag. Filter by `tier` (`all`, `vct`, `vcl`, `t3`, `gc`, `cg`, `off`) and `region` (`all`, `americas`, `emea`, `pacific`, `china`); `page` pages through completed events. Use vlr-event with a returned `id`.", - "operationId": "vlr-events", + "description": "Returns a Wayfair category page's product grid, with real page-based pagination. category accepts a bare Wayfair category id (\"478390\"), a \"c\"-prefixed id (\"c478390\"), a category slug (\"office-chairs-c478390\"), or a full category URL copied from wayfair.com. Returns products with name, brand, pricing, and image.", + "operationId": "wayfair-category", "parameters": [ { - "description": "Event tier; one of all, vct, vcl, t3, gc, cg, off; defaults to all", - "enum": [ - "all", - "vct", - "vcl", - "t3", - "gc", - "cg", - "off" - ], - "in": "query", - "name": "tier", - "type": "string" - }, - { - "description": "Event region; one of all, americas, emea, pacific, china; defaults to all", - "enum": [ - "all", - "americas", - "emea", - "pacific", - "china" - ], + "description": "Wayfair category id, slug, or URL", "in": "query", - "name": "region", - "type": "string" + "name": "category", + "required": true, + "type": "string", + "x-example": "office-chairs-c478390" }, { - "description": "1-based page number; defaults to 1", + "description": "Result page, 1-based, defaults to 1", "in": "query", - "maximum": 500, - "minimum": 1, "name": "page", - "type": "integer" + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -552832,19 +637873,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/vlr.EventsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/wayfair.categoryResponseDoc" } }, "400": { @@ -552853,6 +637882,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -552871,19 +637906,29 @@ "ApiKeyAuth": [] } ], - "summary": "VLR.gg Valorant events", + "summary": "Browse a Wayfair category", "tags": [ - "VLR" + "Wayfair" ] } }, - "/vlr/forum-categories": { + "/wayfair/product/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns the VLR.gg forum directory: each category with slug, name, group, description, thread and post counts and the last poster, time and thread. `slug` is one of `valorant-discussion`, `off-topic`, `site-feedback`; use it as `category` in vlr-forum-threads.", - "operationId": "vlr-forum-categories", + "description": "Returns one Wayfair product's full detail: name, brand, price, stock status, aggregate rating with a 1-5 star breakdown, images, every selectable variant option (e.g. color, finish), and site-selected feature highlights. id is the product's own \"W\"-prefixed id (e.g. W100794312), taken from a category result's product_id field or a product page's URL. An unrecognized id returns 404.", + "operationId": "wayfair-product", + "parameters": [ + { + "description": "Wayfair product id, starting with W", + "in": "path", + "name": "id", + "required": true, + "type": "string", + "x-example": "W100794312" + } + ], "produces": [ "application/json" ], @@ -552891,19 +637936,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/vlr.ForumCategoriesResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/wayfair.productDetailResponseDoc" } }, "400": { @@ -552912,6 +637945,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -552930,38 +637969,84 @@ "ApiKeyAuth": [] } ], - "summary": "VLR.gg forum categories", + "summary": "Get a Wayfair product's full detail", "tags": [ - "VLR" + "Wayfair" ] } }, - "/vlr/forum-threads": { + "/wccftech/article": { "get": { - "consumes": [ + "description": "Returns one Wccftech article by its canonical `url` on `wccftech.com` or `www.wccftech.com`, covering news, reviews, how-tos, roundups and best-of pages. The response has the title, description, authors, section, times, lead image and body `paragraphs` where the site serves them, plus a `paywalled` flag.", + "operationId": "wccftech-article", + "parameters": [ + { + "description": "Canonical Wccftech article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://wccftech.com/gigabyte-intros-three-ddr4-motherboards-for-amd-and-intel-processors-in-japan/" + } + ], + "produces": [ "application/json" ], - "description": "Returns a page (30) of VLR.gg forum threads, newest activity first, for one `category` (`valorant-discussion`, `off-topic`, `site-feedback`) or the combined list: title, reply count, pinned flag, category, author, post age, frags (score) and the last poster. Thread titles and usernames are public community content; thread bodies and replies are not returned.", - "operationId": "vlr-forum-threads", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.articleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a Wccftech article", + "tags": [ + "Wccftech" + ] + } + }, + "/wccftech/author": { + "get": { + "description": "Returns a Wccftech author profile with name, role, bio, photo and recent article cards (title, URL, summary, image, publication time). Identify the author with `slug` (such as `sarfraz`) or a canonical `/author//` `url`; one of the two is required.", + "operationId": "wccftech-author", "parameters": [ { - "description": "Forum category; one of valorant-discussion, off-topic, site-feedback; omit for the combined list", - "enum": [ - "valorant-discussion", - "off-topic", - "site-feedback" - ], + "description": "Wccftech author slug, e.g. sarfraz", "in": "query", - "name": "category", - "type": "string" + "name": "slug", + "type": "string", + "x-example": "sarfraz" }, { - "description": "1-based page number; defaults to 1", + "description": "Canonical Wccftech author page URL", "in": "query", - "maximum": 500, - "minimum": 1, - "name": "page", - "type": "integer" + "name": "url", + "type": "string", + "x-example": "https://wccftech.com/author/sarfraz/" } ], "produces": [ @@ -552971,19 +638056,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/vlr.ForumThreadsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/publicnews.wccftechAuthorResponseDoc" } }, "400": { @@ -552992,8 +638065,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -553010,27 +638083,24 @@ "ApiKeyAuth": [] } ], - "summary": "VLR.gg forum thread list", + "summary": "Get a Wccftech author profile", "tags": [ - "VLR" + "Wccftech" ] } }, - "/vlr/match": { + "/wccftech/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one VLR.gg match: event and stage, exact UTC start time, status (`final`, `live`, `upcoming`), format such as `Bo3`, both teams with series score, the pick/ban note, and every map with picker, round scores split into attack, defend and overtime, duration and per-player lines (agents, rating, ACS, K/D/A, KAST, ADR, headshot percent, first kills and deaths). `all_maps_players` holds the aggregate across maps. Also returns the teams' head-to-head history and each team's recent results. Player fields are omitted when VLR has not published them yet. Use vlr-match-economy, vlr-match-performance and vlr-match-rounds for the economy, kill-matrix and round-by-round tabs.", - "operationId": "vlr-match", + "description": "Returns current articles from one Wccftech topic, category, or editorial archive. Pass a slug from wccftech-sections, such as topic:hardware, category:news, or archive:videos.", + "operationId": "wccftech-headlines", "parameters": [ { - "description": "Numeric VLR match id from vlr-matches, vlr-results or vlr-event-matches", + "description": "Wccftech section slug returned by /wccftech/sections", "in": "query", - "name": "id", + "name": "section", "required": true, "type": "string", - "x-example": "777956" + "x-example": "topic:hardware" } ], "produces": [ @@ -553040,19 +638110,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/vlr.MatchDetail" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -553061,11 +638119,37 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Wccftech section headlines", + "tags": [ + "Wccftech" + ] + } + }, + "/wccftech/news": { + "get": { + "description": "Returns current top stories from Wccftech's public RSS feed, including title, canonical URL, summary, byline, publication time, and image when available.", + "operationId": "wccftech-news", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.newsResponseDoc" + } }, "429": { "description": "Too Many Requests", @@ -553085,29 +638169,48 @@ "ApiKeyAuth": [] } ], - "summary": "VLR.gg Valorant match detail and player statistics", + "summary": "Get current Wccftech news", "tags": [ - "VLR" + "Wccftech" ] } }, - "/vlr/match-economy": { + "/wccftech/sections": { "get": { - "consumes": [ + "description": "Lists all non-empty public category and topic sections, plus the Reviews, Videos, How To, and Roundups archives. Use a returned slug with wccftech-headlines.", + "operationId": "wccftech-sections", + "produces": [ "application/json" ], - "description": "Returns the Economy tab of one VLR.gg match for every map and for the whole match: each team's pistol rounds, pistol conversion and bonus-round records, win records by buy level (`eco` under 10k, `half` 10k to 18k, `full` 18k and over) against each opponent buy level, and round by round banks, loadout values, buy levels, the winner and the winning side. `available` is false while VLR has not published the tab, which is normal for a match that just ended.", - "operationId": "vlr-match-economy", - "parameters": [ + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/publicnews.sectionsResponseDoc" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "description": "Numeric VLR match id from vlr-matches, vlr-results or vlr-event-matches", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "754737" + "ApiKeyAuth": [] } ], + "summary": "Discover Wccftech sections", + "tags": [ + "Wccftech" + ] + } + }, + "/web/capabilities": { + "get": { + "description": "Returns the account's effective web retrieval limits and options: `available_operations`, `crawl_available`, `research_available`, `search_max_results`, `map_max_urls`, `crawl_max_pages`, `max_active_jobs`, and the accepted `render_modes`, `sitemap_modes` and `query_policies`. The operations list is empty while retrieval setup is incomplete.", + "operationId": "web-capabilities", "produces": [ "application/json" ], @@ -553122,7 +638225,7 @@ { "properties": { "data": { - "$ref": "#/definitions/vlr.MatchEconomy" + "$ref": "#/definitions/retrievalplatform.CapabilitiesResponse" } }, "type": "object" @@ -553136,20 +638239,100 @@ "$ref": "#/definitions/app.Response" } }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get web retrieval capabilities and limits", + "tags": [ + "Retrieval" + ] + } + }, + "/web/crawl": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Accepts an owner-scoped durable crawl job. `max_credits` is required; the accepted request and active reader/source revisions are frozen for idempotent replay. A repeated matching idempotency key returns the original job without preparing another reservation.", + "operationId": "web-crawl", + "parameters": [ + { + "description": "Bounded crawl request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/crawlretrieval.crawlRequestDoc" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "202": { + "description": "Durable crawl job accepted", + "headers": { + "Location": { + "description": "Configured public status URL", + "type": "string" + }, + "Retry-After": { + "description": "Suggested poll interval in seconds", + "type": "integer" + } + }, + "schema": { + "$ref": "#/definitions/crawlretrieval.crawlSubmissionEnvelope" + } + }, + "400": { + "description": "Invalid request or idempotency conflict", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "401": { + "description": "Authentication required", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "402": { + "description": "Insufficient credits or daily budget", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "404": { - "description": "Not Found", + "description": "Resource not found", "schema": { "$ref": "#/definitions/app.Response" } }, "429": { - "description": "Too Many Requests", + "description": "Rate or active job quota exceeded", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal configuration or storage error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Required backend or source profile unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -553160,27 +638343,92 @@ "ApiKeyAuth": [] } ], - "summary": "VLR.gg Valorant match economy", + "summary": "Submit a bounded resumable web crawl", "tags": [ - "VLR" + "Retrieval" ] } }, - "/vlr/match-performance": { + "/web/crawl/{job_id}": { "get": { - "consumes": [ + "description": "Returns status for a crawl job owned by the authenticated principal. This control call does not reserve or settle credits.", + "operationId": "web-crawl-status", + "parameters": [ + { + "description": "Owned crawl job ID", + "in": "path", + "maxLength": 128, + "name": "job_id", + "required": true, + "type": "string", + "x-example": "job-123" + } + ], + "produces": [ "application/json" ], - "description": "Returns the Performance tab of one VLR.gg match for every map and for the whole match: player-versus-player kill matrices (overall kills and deaths, first kills and deaths, and Operator kills and deaths) and per-player advanced stats (2K to 5K multi-kills, 1v1 to 1v5 clutches, econ rating, spike plants and defuses). `available` is false while VLR has not published the tab.", - "operationId": "vlr-match-performance", + "responses": { + "200": { + "description": "Crawl job status", + "schema": { + "$ref": "#/definitions/crawlretrieval.crawlStatusEnvelope" + } + }, + "400": { + "description": "Invalid job ID", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "401": { + "description": "Authentication required", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Unknown, unowned, or non-crawl job", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal accounting or storage error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Required backend unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Read crawl job status and cumulative accounting", + "tags": [ + "Retrieval" + ] + } + }, + "/web/crawl/{job_id}/cancel": { + "post": { + "description": "Requests cancellation of an owned crawl job. This control call does not reserve, charge, or settle credits; retained successful work is reconciled by the job settlement worker.", + "operationId": "web-crawl-cancel", "parameters": [ { - "description": "Numeric VLR match id from vlr-matches, vlr-results or vlr-event-matches", - "in": "query", - "name": "id", + "description": "Owned crawl job ID", + "in": "path", + "maxLength": 128, + "name": "job_id", "required": true, "type": "string", - "x-example": "754737" + "x-example": "job-123" } ], "produces": [ @@ -553188,43 +638436,43 @@ ], "responses": { "200": { - "description": "OK", + "description": "Current crawl status", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/vlr.MatchPerformance" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/crawlretrieval.crawlStatusEnvelope" } }, "400": { - "description": "Bad Request", + "description": "Invalid job ID or query parameter", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "401": { + "description": "Authentication required", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "Unknown, unowned, or non-crawl job", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "410": { + "description": "Expired retained crawl data", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal accounting or storage error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Required backend unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -553235,27 +638483,41 @@ "ApiKeyAuth": [] } ], - "summary": "VLR.gg Valorant match performance", + "summary": "Request cooperative crawl cancellation", "tags": [ - "VLR" + "Retrieval" ] } }, - "/vlr/match-rounds": { + "/web/crawl/{job_id}/results": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the round log (the 2D replay data) of one VLR.gg match for every map that has one: for each round the score after it, the winner, the attacking team, every player's agent, credits left, spend, armor and weapon, and the ordered events (kills with weapon, spike plants and defuses) with their round clock. `available` is false when VLR has no replay for the match.", - "operationId": "vlr-match-rounds", + "description": "Reads committed outcomes in stable publication order. While running, `has_more=false` only means the job is currently drained; poll again with `next_cursor` to observe later outcomes. Each response is bounded to 1 MiB.", + "operationId": "web-crawl-results", "parameters": [ { - "description": "Numeric VLR match id from vlr-matches, vlr-results or vlr-event-matches", - "in": "query", - "name": "id", + "description": "Owned crawl job ID", + "in": "path", + "maxLength": 128, + "name": "job_id", "required": true, "type": "string", - "x-example": "754737" + "x-example": "job-123" + }, + { + "description": "Opaque owner-bound cursor", + "in": "query", + "maxLength": 2048, + "name": "cursor", + "type": "string" + }, + { + "default": 50, + "description": "Outcomes per page", + "in": "query", + "maximum": 100, + "minimum": 1, + "name": "limit", + "type": "integer" } ], "produces": [ @@ -553263,43 +638525,43 @@ ], "responses": { "200": { - "description": "OK", + "description": "Committed crawl outcomes", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/vlr.MatchRounds" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/crawlretrieval.crawlResultsEnvelope" } }, "400": { - "description": "Bad Request", + "description": "Invalid job ID, cursor, limit, or query parameter", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "401": { + "description": "Authentication required", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Not Found", + "description": "Unknown, unowned, or non-crawl job", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "410": { + "description": "Expired cursor or retained result", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal storage error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Required backend unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -553310,27 +638572,28 @@ "ApiKeyAuth": [] } ], - "summary": "VLR.gg Valorant match round-by-round log", + "summary": "Read committed crawl outcomes", "tags": [ - "VLR" + "Retrieval" ] } }, - "/vlr/matches": { - "get": { + "/web/map": { + "post": { "consumes": [ "application/json" ], - "description": "Returns the Valorant match schedule from VLR.gg: upcoming and live matches grouped by day with both teams, country flags, event, stage, ETA and whether stats or VODs exist. `status` is `upcoming`, `live` or `completed`. `time_label` is the time shown on the site, whose timezone is not guaranteed; use vlr-match for an exact UTC start time. Use vlr-results for finished matches.", - "operationId": "vlr-matches", + "description": "Maps a public site into a bounded, approximate URL list from its sitemaps and the seed page's links. The first request needs `url`; options are `scope`, `sitemap` (`include`, `only`, `skip`), `max_urls` (1 to 5000, default 1000) and `page_size` (1 to 500, default 100). Continue with `cursor`, optionally with `page_size`; the first page's snapshot lasts 30 minutes.", + "operationId": "web-map", "parameters": [ { - "description": "1-based page number; defaults to 1", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "page", - "type": "integer" + "description": "Map request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/retrievalplatform.MapRequest" + } } ], "produces": [ @@ -553347,7 +638610,7 @@ { "properties": { "data": { - "$ref": "#/definitions/vlr.MatchListResponse" + "$ref": "#/definitions/retrievalplatform.MapResponse" } }, "type": "object" @@ -553361,12 +638624,36 @@ "$ref": "#/definitions/app.Response" } }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "402": { + "description": "Payment Required", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "410": { + "description": "Gone", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -553379,27 +638666,28 @@ "ApiKeyAuth": [] } ], - "summary": "VLR.gg upcoming and live Valorant matches", + "summary": "Map a public site", "tags": [ - "VLR" + "Retrieval" ] } }, - "/vlr/news": { - "get": { + "/web/scrape": { + "post": { "consumes": [ "application/json" ], - "description": "Returns the latest Valorant esports news headlines from VLR.gg, 30 per page, with title, summary line, date, author and country flag. Page back through older news with `page`.", - "operationId": "vlr-news", + "description": "Fetches a single public URL and returns clean content in the requested formats (markdown, html, raw_html, links, metadata). The request body IS the ScrapeOption object itself — e.g. {\"url\": \"https://example.com\"} — do not wrap it in an extra key. With render=auto the request starts as a fast HTTP fetch and escalates to a real browser when the page is blocked or rendered with JavaScript. only_main_content (default true) strips navigation, headers, footers and other boilerplate before conversion. Only public pages are supported; respect each site's terms of use and robots directives. A handful of popular sites (Amazon, Reddit, Yelp, LinkedIn, and others) already have a dedicated, more reliable endpoint elsewhere in this API — a failed scrape against one of them names it. A Reddit URL that maps onto a dedicated Reddit endpoint (listings, search, comment threads, user and domain pages) is answered by that endpoint instead, and its response is returned as-is in data with an X-Routed-To header; send dedicated=false to always get the scraped page.", + "operationId": "web-scrape", "parameters": [ { - "description": "1-based page number; defaults to 1", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "page", - "type": "integer" + "description": "Scrape options", + "in": "body", + "name": "scrapeOption", + "required": true, + "schema": { + "$ref": "#/definitions/web.ScrapeOption" + } } ], "produces": [ @@ -553409,35 +638697,35 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/vlr.NewsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/web.scrapeResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "schema": { "$ref": "#/definitions/app.Response" } }, + "402": { + "description": "Out of credits, or the plan's daily credit limit is used up. The body reports which limit was hit, when it resets, and how to raise it; retry_after_seconds matches the Retry-After header. Returned the same way by every credit-billed endpoint.", + "schema": { + "$ref": "#/definitions/web.billingRejectionResponseDoc" + } + }, "429": { - "description": "Too Many Requests", + "description": "Request rate exceeded for the plan. The body reports the plan's per-minute rate and how long to wait; retry_after_seconds matches the Retry-After header. Returned the same way by every credit-billed endpoint.", + "schema": { + "$ref": "#/definitions/web.billingRejectionResponseDoc" + } + }, + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "All fetch tiers were blocked or failed for the target URL", "schema": { "$ref": "#/definitions/app.Response" } @@ -553448,27 +638736,28 @@ "ApiKeyAuth": [] } ], - "summary": "VLR.gg Valorant esports news", + "summary": "Scrape a URL into markdown, HTML, links or metadata", "tags": [ - "VLR" + "Web" ] } }, - "/vlr/news-article": { - "get": { + "/web/search": { + "post": { "consumes": [ "application/json" ], - "description": "Returns one VLR.gg news article: title, author, UTC publish time, the body as plain-text paragraphs, the teams, players and events it links to (type `team`, `player` or `event`, with id, slug and name), external links and image URLs. Reader comments are not included. Forum threads share the same numeric id space, so an id that is a thread, or does not exist, returns not found. Take `id` from vlr-news.", - "operationId": "vlr-news-article", + "description": "Search Brave's public web results. limit (1-50, default 10) is honoured by reading up to 3 result pages; each successful result page read costs 3 credits, and optional page reads (5 credits each) remain scoped to each result host. country and language select the result locale (defaults us and en-us).", + "operationId": "web-search", "parameters": [ { - "description": "Numeric VLR news article id from vlr-news", - "in": "query", - "name": "id", + "description": "Search request", + "in": "body", + "name": "request", "required": true, - "type": "string", - "x-example": "781119" + "schema": { + "$ref": "#/definitions/retrievalplatform.WebSearchRequest" + } } ], "produces": [ @@ -553485,7 +638774,7 @@ { "properties": { "data": { - "$ref": "#/definitions/vlr.ArticleDetail" + "$ref": "#/definitions/retrievalplatform.WebSearchResponse" } }, "type": "object" @@ -553499,8 +638788,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "402": { + "description": "Payment Required", "schema": { "$ref": "#/definitions/app.Response" } @@ -553511,6 +638806,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -553523,27 +638824,28 @@ "ApiKeyAuth": [] } ], - "summary": "VLR.gg news article", + "summary": "Search the public web", "tags": [ - "VLR" + "Retrieval" ] } }, - "/vlr/player": { - "get": { + "/web/techstack": { + "post": { "consumes": [ "application/json" ], - "description": "Returns one VLR.gg player: alias, real name, country, social links, agent-by-agent statistics (use, rounds, rating, ACS, K:D, KAST, ADR, KPR, APR and first kills), current and past teams and recent results.", - "operationId": "vlr-player", + "description": "Fetches a public URL and fingerprints the web technologies it is built with — a BuiltWith / Wappalyzer-style detector. Returns a list of detected `technologies`, each with its `categories`, a `confidence` (`high`, `medium`, `low`), an optional `version`, and the `evidence` that matched. Covers JavaScript frameworks and libraries (React, Vue.js, Angular, Svelte, jQuery), web frameworks / static site generators (Next.js, Nuxt.js, Gatsby, Remix, SvelteKit, Astro, Hugo), CMS and website builders (WordPress, Drupal, Joomla, Ghost, Wix, Squarespace, Webflow), e-commerce (Shopify, WooCommerce, Magento, BigCommerce), analytics, ad pixels, and tag managers (Google Analytics, Google Tag Manager, Meta Pixel, LinkedIn, Bing, TikTok/Pinterest/Reddit pixels, Segment, Hotjar, Microsoft Clarity), CDNs, UI frameworks and fonts, payments (Stripe, PayPal, Klarna), live chat, marketing automation, A/B testing, consent management, CAPTCHAs (reCAPTCHA, hCaptcha, Turnstile), video, and search. It also inspects response headers to identify the web server (nginx, Apache, IIS), the CDN / hosting provider (Cloudflare, CloudFront, Fastly, Vercel, Netlify), and the server-side language / framework (PHP, ASP.NET, Ruby on Rails, Django, Laravel, Express). Results are directional, not exhaustive. The `render` fetch strategy is one of `browser` (headless browser that executes JavaScript — the default, so client-injected scripts like analytics, tag managers and pixels are detected), `auto` (HTTP, escalating to a real browser only when blocked or JS-rendered), or `http` (HTTP only, no JavaScript — fastest, but sees only the server HTML); defaults to `browser`. Only public pages are supported; respect each site's terms of use and robots directives. Also returns `unmatched_evidence` (when present) — third-party script/stylesheet host domains and a `` value the detector saw on the page but doesn't yet have a named signature for; useful for spotting a vendor worth requesting coverage for. `is_infrastructure` flags a URL whose host looks like backend CDN/DNS/cloud-vendor infrastructure rather than a real, human-navigable website. `reachable` is false only when the target could not be fetched at all (even after an automatic www./plain-HTTP retry) — `technologies` may still be partially populated from DNS-based signals alone in that case, and `failure_reason` explains what happened.", + "operationId": "web-techstack", "parameters": [ { - "description": "Numeric VLR player id from vlr-team or vlr-stats", - "in": "query", - "name": "id", + "description": "Target URL (and optional render strategy)", + "in": "body", + "name": "request", "required": true, - "type": "string", - "x-example": "9780" + "schema": { + "$ref": "#/definitions/web.TechStackOption" + } } ], "produces": [ @@ -553553,41 +638855,29 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/vlr.PlayerDetail" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/web.techStackResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Invalid or missing URL / render value", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal server error", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "502": { + "description": "Upstream fetch failed", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Target blocked the fetch or could not be retrieved", "schema": { "$ref": "#/definitions/app.Response" } @@ -553598,35 +638888,58 @@ "ApiKeyAuth": [] } ], - "summary": "VLR.gg Valorant player profile and agent statistics", + "summary": "Tech stack — detect what a website is built with", "tags": [ - "VLR" + "Web" ] } }, - "/vlr/player-matches": { + "/webtoon/genre": { "get": { "consumes": [ "application/json" ], - "description": "Returns a player's match history from VLR.gg, 50 per page, newest first: event, stage, the player's team and opponent, series score, win or loss and date. Use vlr-match with a returned `id` for the player's map statistics.", - "operationId": "vlr-player-matches", + "description": "Returns one WEBTOON (webtoons.com) genre listing: every series the site lists for that genre in one document, with each series' title number, title, genre label, authors when the card prints them, thumbnail, canonical URL, the site's own counter and the UP badge. The response carries the site's own series total for the genre when the page prints it. Genres come from webtoon-genres; sort is WEBTOON's own ordering control.", + "operationId": "webtoon-genre", "parameters": [ { - "description": "Numeric VLR player id from vlr-team or vlr-stats", + "description": "Genre slug from webtoon-genres", + "enum": [ + "action", + "comedy", + "drama", + "fantasy", + "graphic_novel", + "heartwarming", + "historical", + "horror", + "mystery", + "romance", + "sf", + "slice_of_life", + "super_hero", + "sports", + "supernatural", + "thriller", + "tiptoon" + ], "in": "query", - "name": "id", + "name": "genre", "required": true, "type": "string", - "x-example": "9780" + "x-example": "romance" }, { - "description": "1-based page number; defaults to 1", + "description": "Result ordering", + "enum": [ + "MANA", + "LIKEIT", + "UPDATE" + ], "in": "query", - "maximum": 500, - "minimum": 1, - "name": "page", - "type": "integer" + "name": "sort", + "type": "string", + "x-example": "MANA" } ], "produces": [ @@ -553636,19 +638949,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/vlr.HistoryResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/webtoon.genreResponseDoc" } }, "400": { @@ -553657,12 +638958,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -553681,50 +638976,19 @@ "ApiKeyAuth": [] } ], - "summary": "VLR.gg Valorant player match history", + "summary": "List every series in one WEBTOON genre", "tags": [ - "VLR" + "WEBTOON" ] } }, - "/vlr/rankings": { + "/webtoon/genres": { "get": { "consumes": [ "application/json" ], - "description": "Returns VLR.gg's team ranking for one region: rank, team, country, rating, record, streak, earnings and last match. `region` is one of north-america, europe, brazil, asia-pacific, korea, china, japan, la-s, la-n, oceania, mena, gc, collegiate. `limit` returns the top 1 to 250 teams (default 50).", - "operationId": "vlr-rankings", - "parameters": [ - { - "description": "Ranking region; one of north-america, europe, brazil, asia-pacific, korea, china, japan, la-s, la-n, oceania, mena, gc, collegiate; defaults to north-america", - "enum": [ - "north-america", - "europe", - "brazil", - "asia-pacific", - "korea", - "china", - "japan", - "la-s", - "la-n", - "oceania", - "mena", - "gc", - "collegiate" - ], - "in": "query", - "name": "region", - "type": "string" - }, - { - "description": "Number of top teams to return, 1 to 250; defaults to 50", - "in": "query", - "maximum": 250, - "minimum": 1, - "name": "limit", - "type": "integer" - } - ], + "description": "Returns the complete WEBTOON (webtoons.com) genre list: 17 genres, each with its slug (pass it to webtoon-genre), display label and listing URL. This is the discovery endpoint for the genre parameter, so a caller never has to hard-code the set.", + "operationId": "webtoon-genres", "produces": [ "application/json" ], @@ -553732,25 +638996,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/vlr.RankingsResponse" - } - }, - "type": "object" - } - ] - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/webtoon.genresResponseDoc" } }, "429": { @@ -553771,27 +639017,49 @@ "ApiKeyAuth": [] } ], - "summary": "VLR.gg Valorant team rankings by region", + "summary": "List WEBTOON's complete genre taxonomy", "tags": [ - "VLR" + "WEBTOON" ] } }, - "/vlr/results": { + "/webtoon/originals": { "get": { "consumes": [ "application/json" ], - "description": "Returns completed Valorant matches from VLR.gg, newest first, 50 per page, with final series scores, winner flags, event, stage and whether stats or VODs are listed. For a completed match `eta` is the time since it ended. Use vlr-match with a returned `id` for map-by-map player statistics.", - "operationId": "vlr-results", + "description": "Returns one day of WEBTOON's (webtoons.com) Originals release calendar: every series updating that day, with each series' title number, title, genre, authors, thumbnail, canonical URL, the site's own counter and the UP badge. The complete day is one document, so there is no paging. Use the complete tab for finished series.", + "operationId": "webtoon-originals", "parameters": [ { - "description": "1-based page number; defaults to 1", + "description": "Release day tab", + "enum": [ + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday", + "sunday", + "complete" + ], "in": "query", - "maximum": 500, - "minimum": 1, - "name": "page", - "type": "integer" + "name": "day", + "required": true, + "type": "string", + "x-example": "saturday" + }, + { + "description": "Result ordering", + "enum": [ + "MANA", + "LIKEIT", + "UPDATE" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "MANA" } ], "produces": [ @@ -553801,19 +639069,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/vlr.MatchListResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/webtoon.originalsResponseDoc" } }, "400": { @@ -553840,39 +639096,32 @@ "ApiKeyAuth": [] } ], - "summary": "VLR.gg completed Valorant match results", + "summary": "List one day of WEBTOON's release calendar", "tags": [ - "VLR" + "WEBTOON" ] } }, - "/vlr/search": { + "/webtoon/rankings": { "get": { "consumes": [ "application/json" ], - "description": "Searches VLR.gg for teams, events and players by name and returns every match on one page: kind, id, name, canonical URL and logo, plus the event date range and prize pool and, for retired teams, the `inactive` flag and the team that replaced them (`successor`). `type` limits the search to `teams`, `events` or `players`; the default `all` returns all three groups with per-group counts. Use the returned id with vlr-team, vlr-event or vlr-player.", - "operationId": "vlr-search", + "description": "Returns one fixed WEBTOON (webtoons.com) chart: thirty ranked series with rank position, title number, title, genre, thumbnail, canonical URL and the site's own counter. Four tabs exist; the chart size is fixed and there is no paging.", + "operationId": "webtoon-rankings", "parameters": [ { - "description": "Search text, 1 to 100 characters", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "sentinels" - }, - { - "description": "Result group; one of all, teams, events, players; defaults to all", + "description": "Ranking tab, defaults to trending", "enum": [ - "all", - "teams", - "events", - "players" + "trending", + "popular", + "originals", + "canvas" ], "in": "query", - "name": "type", - "type": "string" + "name": "tab", + "type": "string", + "x-example": "popular" } ], "produces": [ @@ -553882,19 +639131,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/vlr.SearchResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/webtoon.rankingsResponseDoc" } }, "400": { @@ -553921,163 +639158,46 @@ "ApiKeyAuth": [] } ], - "summary": "VLR.gg search for teams, events and players", + "summary": "List one WEBTOON chart", "tags": [ - "VLR" + "WEBTOON" ] } }, - "/vlr/stats": { + "/webtoon/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns VLR.gg's player statistics table (100 rows per page): agents played, maps, rounds, rating, ACS, K:D, KAST, ADR, KPR, APR, first-kill and clutch rates and totals. Filter with comma-separated `tier` (vct, vcl, t3, gc, cg, off), `region` (americas, emea, pacific, china, intl), `role` (controller, initiator, sentinel, duelist), `agent` and `map` names, plus `timespan` (all, 30d, 60d, 90d or a year 2020 to 2026), `side` (all, t, ct), `min_rounds` and `min_rating`; sort with `sort` and `dir`.", - "operationId": "vlr-stats", + "description": "Returns one page of WEBTOON (webtoons.com) search results, grouped into the page's own ORIGINALS and CANVAS sections. Each card carries its title number, title, authors, genre path segment, absolute URL, thumbnail, WEBTOON's own view counter, UP badge, adult flag and normalized webtoon_type; pass a card's title_no to webtoon-series for episode metadata. scope selects the site's own tab: all (the default) is a combined preview of at most 12 cards per section and cannot be paged, while originals and canvas serve up to 30 cards per page and return an empty sections list for a page past the end. A keyword that matches nothing is a valid 200 with no sections. Search cards carry no genre label, so genre is the hyphenated path segment from the card's own href (map it through webtoon-genres for webtoon-genre) and is empty for canvas cards.", + "operationId": "webtoon-search", "parameters": [ { - "description": "Comma-separated tiers from vct, vcl, t3, gc, cg, off; site default vct", - "in": "query", - "name": "tier", - "type": "string" - }, - { - "description": "Comma-separated regions from americas, emea, pacific, china, intl", - "in": "query", - "name": "region", - "type": "string" - }, - { - "description": "Timespan; one of all, 30d, 60d, 90d, 2026, 2025, 2024, 2023, 2022, 2021, 2020; site default 60d", - "enum": [ - "all", - "30d", - "60d", - "90d", - "2026", - "2025", - "2024", - "2023", - "2022", - "2021", - "2020" - ], + "description": "Keyword to search series titles and creators for", "in": "query", - "name": "timespan", - "type": "string" + "name": "keyword", + "required": true, + "type": "string", + "x-example": "tower" }, { - "description": "Side; one of all, t, ct", + "description": "Search scope: the site's own ALL, ORIGINALS or CANVAS tab", "enum": [ "all", - "t", - "ct" + "originals", + "canvas" ], "in": "query", - "name": "side", - "type": "string" - }, - { - "description": "Comma-separated roles from controller, initiator, sentinel, duelist", - "in": "query", - "name": "role", - "type": "string" - }, - { - "description": "Comma-separated agents from astra, brimstone, clove, harbor, miks, omen, viper, breach, fade, gekko, kayo, skye, sova, tejo, chamber, cypher, deadlock, killjoy, sage, veto, vyse, iso, jett, neon, phoenix, raze, reyna, waylay, yoru", - "in": "query", - "name": "agent", - "type": "string" - }, - { - "description": "Comma-separated maps from abyss, bind, corrode, haven, lotus, summit, sunset, ascent, breeze, fracture, icebox, pearl, split", - "in": "query", - "name": "map", - "type": "string" - }, - { - "description": "Minimum rounds played; site default 100", - "in": "query", - "minimum": 0, - "name": "min_rounds", - "type": "integer" - }, - { - "description": "First day of a custom date range, YYYY-MM-DD (UTC); requires to and replaces timespan", - "in": "query", - "name": "from", - "type": "string", - "x-example": "2026-09-01" - }, - { - "description": "Last day of a custom date range, YYYY-MM-DD (UTC); requires from and replaces timespan", - "in": "query", - "name": "to", + "name": "scope", "type": "string", - "x-example": "2026-10-01" - }, - { - "description": "Minimum player rating; one of 0, 1300, 1400, 1500, 1550, 1650, 1750, 1850", - "enum": [ - 0, - 1300, - 1400, - 1500, - 1550, - 1650, - 1750, - 1850 - ], - "in": "query", - "name": "min_rating", - "type": "integer" - }, - { - "description": "Sort column; one of rating, maps, rnd, acs, kd, kast, adr, kpr, apr, fkfd, fkpr, fdpr, hsp, clp, cl, kmax, k, d, a, fk, fd; defaults to rating", - "enum": [ - "rating", - "maps", - "rnd", - "acs", - "kd", - "kast", - "adr", - "kpr", - "apr", - "fkfd", - "fkpr", - "fdpr", - "hsp", - "clp", - "cl", - "kmax", - "k", - "d", - "a", - "fk", - "fd" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "description": "Sort direction; one of asc, desc; defaults to desc", - "enum": [ - "asc", - "desc" - ], - "in": "query", - "name": "dir", - "type": "string" + "x-example": "all" }, { - "description": "1-based page number; defaults to 1", + "description": "1-based results page; page above 1 requires scope=originals or scope=canvas", "in": "query", - "maximum": 500, - "minimum": 1, "name": "page", - "type": "integer" + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -554087,19 +639207,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/vlr.StatsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/webtoon.searchResponseDoc" } }, "400": { @@ -554126,27 +639234,34 @@ "ApiKeyAuth": [] } ], - "summary": "VLR.gg Valorant player statistics with filters", + "summary": "Search WEBTOON series by keyword", "tags": [ - "VLR" + "WEBTOON" ] } }, - "/vlr/team": { + "/webtoon/series": { "get": { "consumes": [ "application/json" ], - "description": "Returns one VLR.gg team: name, tag, country, links, the roster (players with captain flag, plus coach, manager and analyst staff, each with a player id) and recent matches with scores and results, plus related news. Use vlr-player with a roster `id`.", - "operationId": "vlr-team", + "description": "Returns one WEBTOON (webtoons.com) series: title, genre, authors, summary, cover, the site's own view and subscribe counters, the release-day line, and a ten-episode page window (episode number, title, release date, thumbnail, viewer URL, UP badge). Take title_no from any listing endpoint's card. The page window is fixed at ten episodes and WEBTOON publishes no total episode count, so has_next_page is a window-size signal, not an exact remaining count. An unknown title number is a 404. Panel images and Fast Pass state are never returned.", + "operationId": "webtoon-series", "parameters": [ { - "description": "Numeric VLR team id from vlr-rankings, vlr-event or vlr-match", + "description": "WEBTOON title number from any listing card", "in": "query", - "name": "id", + "name": "title_no", "required": true, - "type": "string", - "x-example": "2059" + "type": "integer", + "x-example": 7830 + }, + { + "description": "1-based episode page, ten episodes per page; defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -554156,19 +639271,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/vlr.TeamDetail" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/webtoon.seriesResponseDoc" } }, "400": { @@ -554201,29 +639304,19 @@ "ApiKeyAuth": [] } ], - "summary": "VLR.gg Valorant team profile and roster", + "summary": "Get a WEBTOON series with a page of its episode list", "tags": [ - "VLR" + "WEBTOON" ] } }, - "/vlr/team-maps": { + "/wendys/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns a team's per-map record from VLR.gg: maps played, win percent, wins and losses, plus attack-side and defense-side round win percent, rounds won and lost and first-round counts. Use it to compare map strengths; vlr-team-matches lists the underlying matches.", - "operationId": "vlr-team-maps", - "parameters": [ - { - "description": "Numeric VLR team id from vlr-rankings, vlr-event or vlr-match", - "in": "query", - "name": "id", - "required": true, - "type": "string", - "x-example": "2059" - } - ], + "description": "Returns every category on Wendy's national (restaurant-agnostic) menu, grouped by which of Wendy's own top-level day-parts (Lunch/Dinner, Breakfast) it appears under -- a few categories such as Coffee and Beverages appear under both. No restaurant selection is required; this is the same catalog a signed-out visitor sees before ever picking a location. Each category's slug is what GET /wendys/menu takes.", + "operationId": "wendys-categories", "produces": [ "application/json" ], @@ -554231,19 +639324,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/vlr.TeamMapsResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/wendys.categoriesResponseDoc" } }, "400": { @@ -554252,12 +639333,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -554276,35 +639351,26 @@ "ApiKeyAuth": [] } ], - "summary": "VLR.gg Valorant team map win rates", + "summary": "List Wendy's national menu categories", "tags": [ - "VLR" + "Wendys" ] } }, - "/vlr/team-matches": { + "/wendys/directory": { "get": { "consumes": [ "application/json" ], - "description": "Returns a team's complete match history from VLR.gg, 50 per page, newest first: event, stage, opponent, series score, win or loss and date. Use vlr-match with a returned `id` for map detail, or vlr-team for the roster.", - "operationId": "vlr-team-matches", + "description": "Returns one level of Wendy's store directory tree. Omit path for the root, which lists Canada and the United States; pass a child's path to descend (country to states, state to cities, city to stores -- a single-store city links directly to its store page one level early). Each child carries its name, path, URL and, at the country/state/city levels, how many stores sit under that branch. A child with is_store true is a store page rather than another directory level -- pass its path to GET /wendys/store.", + "operationId": "wendys-directory", "parameters": [ { - "description": "Numeric VLR team id from vlr-rankings, vlr-event or vlr-match", + "description": "Directory path from a previous response's children[].path, e.g. united-states/oh. Omit for the root country index.", "in": "query", - "name": "id", - "required": true, + "name": "path", "type": "string", - "x-example": "2059" - }, - { - "description": "1-based page number; defaults to 1", - "in": "query", - "maximum": 500, - "minimum": 1, - "name": "page", - "type": "integer" + "x-example": "united-states/oh" } ], "produces": [ @@ -554314,19 +639380,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/vlr.HistoryResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/wendys.directoryResponseDoc" } }, "400": { @@ -554359,24 +639413,35 @@ "ApiKeyAuth": [] } ], - "summary": "VLR.gg Valorant team match history", + "summary": "Browse the Wendy's store directory", "tags": [ - "VLR" + "Wendys" ] } }, - "/vox/article": { + "/wendys/item": { "get": { - "description": "Returns one Vox article by its canonical `url`: title, description, authors, section, published and updated times, lead image and the body `paragraphs`. Only public content is returned; a subscriber-only or blocked article comes back as an upstream error rather than a partial body.", - "operationId": "vox-article", + "consumes": [ + "application/json" + ], + "description": "Returns one item's full detail. A simple item (is_combo false) returns its description, base price, calories, every size/weight variant (e.g. Small/Medium/Large fries, each with its own price and calories, with is_default marking the one Wendy's own page pre-selects), and every modifier component -- default (comes with the item), extra (a paid add-on) and required (the caller must pick one option from a named group, e.g. a salad's dressing) -- each with its own ingredient description and allergen list, since Wendy's publishes allergens per-component rather than as one whole-item field. The top-level allergens field is the union across default components and each required group's default-selected option only. A combo (is_combo true) instead returns combo_slots: its entree/side/drink composition and every product each slot can be built from, since a combo's own price and calories vary by what is chosen. A combo slot's product ids are the same items sold standalone in their own categories -- call this endpoint again on one of those for its own full component/allergen detail. Category and item slugs come from GET /wendys/categories and GET /wendys/menu.", + "operationId": "wendys-item", "parameters": [ { - "description": "Canonical Vox article URL", + "description": "Category slug from /wendys/categories", "in": "query", - "name": "url", + "name": "category", "required": true, "type": "string", - "x-example": "https://www.vox.com/politics/example" + "x-example": "hamburgers" + }, + { + "description": "Item slug from /wendys/menu's items[].slug", + "in": "query", + "name": "item", + "required": true, + "type": "string", + "x-example": "daves-combo" } ], "produces": [ @@ -554386,7 +639451,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/wendys.itemResponseDoc" } }, "400": { @@ -554401,6 +639466,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -554413,24 +639484,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Vox article content", + "summary": "Get one Wendy's menu item's (or combo's) detail", "tags": [ - "Vox" + "Wendys" ] } }, - "/vox/author": { + "/wendys/menu": { "get": { - "description": "Returns a Vox author profile from their canonical `url` (`www.vox.com/authors/`, required). The response has the name, `job_title` from the masthead (such as Senior Politics Correspondent), `bio` and recent articles, each with title, URL, excerpt, category and an ISO-8601 `published_at`.", - "operationId": "vox-author", + "consumes": [ + "application/json" + ], + "description": "Returns every item in one category of Wendy's national menu: id, name, slug, Wendy's own displayed price and calorie strings, whether it is a combo (its GET /wendys/item response returns combo_slots instead of components/variants), a limited-time-offer flag, and whether it has required customization (e.g. a salad's dressing choice). Category slugs come from GET /wendys/categories.", + "operationId": "wendys-menu", "parameters": [ { - "description": "Canonical Vox author URL", + "description": "Category slug from /wendys/categories", "in": "query", - "name": "url", + "name": "category", "required": true, "type": "string", - "x-example": "https://www.vox.com/authors/andrew-prokop" + "x-example": "hamburgers" } ], "produces": [ @@ -554440,7 +639514,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.voxAuthorResponseDoc" + "$ref": "#/definitions/wendys.menuResponseDoc" } }, "400": { @@ -554449,8 +639523,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -554467,36 +639541,54 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Vox author profile", + "summary": "List one Wendy's menu category's items", "tags": [ - "Vox" + "Wendys" ] } }, - "/vox/headlines": { + "/wendys/nearby": { "get": { - "description": "Lists the current Vox headlines for one section. `section` is required and takes `politics`, `culture`, `policy`, `world`, `money`, `technology`, `science-and-health`, `climate`, `future-perfect` or `explainers`. Each item has its title, URL, summary, author and publication time.", - "operationId": "vox-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns Wendy's stores within a radius of a search location, nearest first, via order.wendys.com's own restaurant-selector proximity search (the \"Use Current Location\" / \"City, State, or Zipcode\" flow at order.wendys.com's start-an-order screen) -- a materially richer, real-distance source than locations.wendys.com's classic-Yext locator (GET /wendys/directory, /wendys/store), which publishes no geosearch of its own. The search location is either a latitude/longitude pair or a free-text address query param (city/state, zip code, or full street address) that Wendy's own service geocodes server-side -- exactly one form is required; address takes priority if both are given. Each store carries its address, coordinates, phone, distance in miles, open/closed status, its published week of general and breakfast hours, and a few order-availability flags (breakfast, carry-out, mobile order, drive-thru, delivery, wifi) the ordering app itself uses to decide whether to offer the store for the current order type.", + "operationId": "wendys-nearby", "parameters": [ { - "description": "Vox section slug", - "enum": [ - "politics", - "culture", - "policy", - "world", - "money", - "technology", - "science-and-health", - "climate", - "future-perfect", - "explainers" - ], + "description": "Search center latitude. Required unless address is given.", "in": "query", - "name": "section", - "required": true, + "name": "latitude", + "type": "number", + "x-example": 40.7128 + }, + { + "description": "Search center longitude. Required unless address is given.", + "in": "query", + "name": "longitude", + "type": "number", + "x-example": -74.006 + }, + { + "description": "Free-text city/state, zip code, or street address to search near. An alternative to latitude/longitude -- required unless both of those are given.", + "in": "query", + "name": "address", "type": "string", - "x-example": "politics" + "x-example": "10001" + }, + { + "description": "Search radius in miles, 1-100, default 20", + "in": "query", + "name": "radius", + "type": "integer", + "x-example": 20 + }, + { + "description": "Maximum stores to return, 1-50, default 25", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 25 } ], "produces": [ @@ -554506,7 +639598,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/wendys.nearbyResponseDoc" } }, "400": { @@ -554515,36 +639607,16 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Vox section headlines", - "tags": [ - "Vox" - ] - } - }, - "/vox/news": { - "get": { - "description": "Returns the latest Vox top stories with no parameters. Each item has its title, URL, summary, author and publication time. Item URLs can be passed to `vox-article` for the body.", - "operationId": "vox-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "429": { + "description": "Too Many Requests", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/app.Response" } }, "503": { @@ -554559,50 +639631,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get Vox top stories", + "summary": "Find Wendy's stores near a coordinate or address", "tags": [ - "Vox" + "Wendys" ] } }, - "/vox/sections": { + "/wendys/nutrition": { "get": { - "description": "Lists the Vox editorial sections accepted by `vox-headlines`, each with a stable `slug`, a display `name` and the section `url`. Use the slugs as the `section` value. Takes no parameters.", - "operationId": "vox-sections", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get Vox sections", - "tags": [ - "Vox" - ] - } - }, - "/vrbo/locations/search": { - "get": { - "description": "Returns public destination suggestions, including region IDs and location types when Vrbo provides them. The verified search term is sent with Vrbo's observed lodging, destination, and entry-page criteria.", - "operationId": "vrbo-location-suggestions", + "description": "Returns one item's (or combo's) complete nutrition-facts panel -- calories, fat, cholesterol, sodium, carbohydrate, protein, vitamins and minerals -- as real numbers, plus declared allergens. A simple item's panel is for its default configuration (default bun/size, default condiments, no extras, no required-group substitutions). A combo's panel (is_combo true) is the *combined* total across every slot's default option in one request, the same way a caller building the full order would sum it themselves -- combo_selections lists which option each slot was computed for. GET /wendys/item and GET /wendys/menu only ever carry a calorie count, because that is all Wendy's own menu pages themselves publish inline; the full panel is fetched separately by Wendy's own \"Nutrition\" tab, and this endpoint resolves and calls that same source so a caller does not have to reverse-engineer it. A nutrient Wendy's does not publish is omitted from the response rather than reported as zero. Category and item slugs come from GET /wendys/categories and GET /wendys/menu.", + "operationId": "wendys-nutrition", "parameters": [ { - "description": "Destination text to suggest", + "description": "Category slug from /wendys/categories", "in": "query", - "name": "search_term", + "name": "category", "required": true, "type": "string", - "x-example": "Miami%20Beach" + "x-example": "hamburgers" + }, + { + "description": "Item slug from /wendys/menu's items[].slug -- a combo slug is accepted", + "in": "query", + "name": "item", + "required": true, + "type": "string", + "x-example": "daves-single" } ], "produces": [ @@ -554612,7 +639669,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/vrbo.vrboLocationSuggestionsResponseDoc" + "$ref": "#/definitions/wendys.nutritionResponseDoc" } }, "400": { @@ -554621,50 +639678,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Suggest Vrbo destinations", - "tags": [ - "Vrbo" - ] - } - }, - "/vrbo/properties/{property_id}": { - "get": { - "description": "Reads public traveler-facing property details, grouped amenities, photos, content sections, FAQs, and aggregate rating.", - "operationId": "vrbo-property", - "parameters": [ - { - "description": "Vrbo property ID (optionally ending in ha)", - "in": "path", - "name": "property_id", - "required": true, - "type": "string", - "x-example": "961219" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/vrbo.vrboPropertyResponseDoc" - } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -554681,24 +639702,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Vrbo property details", + "summary": "Get one Wendy's menu item's full nutrition-facts panel", "tags": [ - "Vrbo" + "Wendys" ] } }, - "/vrbo/properties/{property_id}/rate-calendar": { + "/wendys/restaurant": { "get": { - "description": "Returns public calendar dates, nightly display prices when provided, availability, check-in/out validity, and stay constraints.", - "operationId": "vrbo-rate-calendar", + "consumes": [ + "application/json" + ], + "description": "Returns one restaurant's detail looked up by its numeric store id -- the same id GET /wendys/nearby's stores[].store_id returns -- via order.wendys.com's own restaurant-selector API, rather than a locations.wendys.com Yext locator path (see GET /wendys/store, which needs a directory path instead). Publishes richer per-store data than the Yext locator: whether each fulfillment mode (carry-out, dine-in, drive-thru) is physically offered at all (not just currently open, as GET /wendys/nearby's flags reflect), plus feature flags (wifi, mobile order/pay, Coke Freestyle, digital coupons, loyalty, gift cards) and the published week of general and breakfast hours.", + "operationId": "wendys-restaurant", "parameters": [ { - "description": "Vrbo property ID (optionally ending in ha)", - "in": "path", - "name": "property_id", + "description": "Numeric store id, e.g. from /wendys/nearby's stores[].store_id", + "in": "query", + "name": "store_id", "required": true, "type": "string", - "x-example": "961219" + "x-example": "12921" } ], "produces": [ @@ -554708,7 +639732,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/vrbo.vrboRateCalendarResponseDoc" + "$ref": "#/definitions/wendys.restaurantResponseDoc" } }, "400": { @@ -554717,6 +639741,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -554729,68 +639765,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Vrbo property rate calendar", + "summary": "Get one Wendy's restaurant's detail by store id", "tags": [ - "Vrbo" + "Wendys" ] } }, - "/vrbo/properties/{property_id}/reviews": { + "/wendys/store": { "get": { - "description": "Returns one page of public traveler reviews, aggregate count, and current sort choices. Pagination and sort values follow the public reviews query.", - "operationId": "vrbo-property-reviews", + "consumes": [ + "application/json" + ], + "description": "Returns one Wendy's store: name, full postal address, phone, coordinates, the published week of general restaurant hours and, separately, drive-thru hours (Wendy's often publishes these on different schedules), which third-party delivery platforms the store's own page links to, and the restaurant id and ordering URL used to start an order there. Store paths come from GET /wendys/directory entries whose is_store is true. Passing a directory path here returns a 404 rather than a hollow record.", + "operationId": "wendys-store", "parameters": [ { - "description": "Vrbo property ID (optionally ending in ha)", - "in": "path", - "name": "property_id", + "description": "Store path from a /wendys/directory child with is_store true", + "in": "query", + "name": "path", "required": true, "type": "string", - "x-example": "11458735ha" - }, - { - "default": 0, - "description": "Zero-based review offset", - "in": "query", - "minimum": 0, - "name": "start_index", - "type": "integer" - }, - { - "default": 10, - "description": "Page size from 1 to 50", - "in": "query", - "maximum": 50, - "minimum": 1, - "name": "size", - "type": "integer" - }, - { - "description": "Sort value from the response's sort_options", - "enum": [ - "HIGHEST_TO_LOWEST_RATED", - "LOWEST_TO_HIGHEST_RATED", - "NEWEST_TO_OLDEST", - "NEWEST_TO_OLDEST_BY_LANGUAGE", - "NEWEST_TO_OLDEST_BY_RELEVANCY" - ], - "in": "query", - "name": "sort_by", - "type": "string" - }, - { - "default": true, - "description": "Include recent reviews", - "in": "query", - "name": "include_recent_reviews", - "type": "boolean" - }, - { - "default": true, - "description": "Include rating-only reviews", - "in": "query", - "name": "include_ratings_only_reviews", - "type": "boolean" + "x-example": "united-states/oh/alliance/1833-w-state-st" } ], "produces": [ @@ -554800,7 +639795,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/vrbo.vrboReviewsResponseDoc" + "$ref": "#/definitions/wendys.storeResponseDoc" } }, "400": { @@ -554809,6 +639804,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -554821,28 +639828,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Vrbo property reviews", + "summary": "Get one Wendy's store's detail", "tags": [ - "Vrbo" + "Wendys" ] } }, - "/vrbo/search": { - "post": { + "/wendys/store-menu": { + "get": { "consumes": [ "application/json" ], - "description": "Searches public Vrbo rental listings for a selected destination and dates. Obtain destination, region_id, and lat_long from Vrbo's destination suggestion UI. Supports date flexibility, per-room adult and child-age inputs, current filter selections and ranges, and observed sort values. Copy filter IDs and option values from the returned filters.", - "operationId": "vrbo-search", + "description": "Returns one restaurant's own priced, offered item list -- real local pricing (including full combo bundle prices, which GET /wendys/item deliberately does not compute, since a combo's own price varies by what's chosen in each slot) and any store-specific promotional items, rather than Wendy's own generic/average national-menu listing (GET /wendys/menu, /wendys/item). A request with just a store id returns real data, no session or account required.", + "operationId": "wendys-store-menu", "parameters": [ { - "description": "Search criteria", - "in": "body", - "name": "request", + "description": "Numeric store id, e.g. from /wendys/nearby's stores[].store_id or /wendys/restaurant's store_id", + "in": "query", + "name": "store_id", "required": true, - "schema": { - "$ref": "#/definitions/vrbo.SearchOption" - } + "type": "string", + "x-example": "12921" } ], "produces": [ @@ -554852,7 +639858,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/vrbo.vrboSearchResponseDoc" + "$ref": "#/definitions/wendys.storeMenuResponseDoc" } }, "400": { @@ -554861,36 +639867,16 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Search Vrbo vacation rentals", - "tags": [ - "Vrbo" - ] - } - }, - "/vrbo/travel-pages": { - "get": { - "description": "Lists the public stay-type and travel-theme pages linked from Vrbo's vacation-rental index. These are editorial browse pages, not a complete search-filter enumeration.", - "operationId": "vrbo-travel-pages", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", + }, + "429": { + "description": "Too Many Requests", "schema": { - "$ref": "#/definitions/vrbo.vrboTravelPagesResponseDoc" + "$ref": "#/definitions/app.Response" } }, "503": { @@ -554905,24 +639891,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Vrbo travel pages", + "summary": "Get one Wendy's restaurant's full priced/offered menu", "tags": [ - "Vrbo" + "Wendys" ] } }, - "/vrbo/travel-pages/{slug}": { + "/wendys/time-slots": { "get": { - "description": "Returns public editorial sections, visible rental cards, and related travel-page links for a /travel/{slug} page. Date-scoped prices are omitted; page slugs are not search-filter values.", - "operationId": "vrbo-travel-page-detail", + "consumes": [ + "application/json" + ], + "description": "Returns one restaurant's available mobile-order arrival (\"check-in\") time slots -- the times a caller can schedule a mobile pickup order for, distinct from the restaurant's general open/close hours (GET /wendys/restaurant, /wendys/store). A request with just a store id returns real available slots, no session or account required.", + "operationId": "wendys-time-slots", "parameters": [ { - "description": "Vrbo travel-page slug returned by /vrbo/travel-pages", - "in": "path", - "name": "slug", + "description": "Numeric store id, e.g. from /wendys/nearby's stores[].store_id or /wendys/restaurant's store_id", + "in": "query", + "name": "store_id", "required": true, "type": "string", - "x-example": "cabins" + "x-example": "12921" } ], "produces": [ @@ -554932,7 +639921,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/vrbo.vrboTravelPageDetailResponseDoc" + "$ref": "#/definitions/wendys.timeSlotsResponseDoc" } }, "400": { @@ -554941,6 +639930,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -554953,24 +639954,46 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Vrbo travel page", + "summary": "Get one Wendy's restaurant's available mobile-order time slots", "tags": [ - "Vrbo" + "Wendys" ] } }, - "/walesonline/article": { + "/whataburger/sitemap": { "get": { - "description": "Returns public WalesOnline article metadata (including the section) and body paragraphs from a canonical article URL, including live blogs. Photo-gallery URLs are rejected.", - "operationId": "walesonline-article", + "consumes": [ + "application/json" + ], + "description": "Returns one page of Whataburger's sitemap-declared store index -- about 3,950 URLs at time of writing. Unlike some other store locators in this API, Whataburger publishes a single flat sitemap file rather than a sharded index. Each entry carries a kind: \"store\" is a restaurant's canonical detail page, \"curbside\" and \"delivery\" are separate pages Whataburger publishes for that same restaurant's curbside or delivery service, and \"directory\" is a state- or city-level listing page with no address of its own. Filter with kind to enumerate one page variant. A page past the end returns an empty list rather than an error, so a caller can walk to exhaustion.", + "operationId": "whataburger-sitemap", "parameters": [ { - "description": "Canonical WalesOnline article URL", + "description": "1-based page (default 1)", "in": "query", - "name": "url", - "required": true, + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Entries per page, 1-500 (default 100)", + "in": "query", + "name": "page_size", + "type": "integer", + "x-example": 100 + }, + { + "description": "Filter by page kind. One of store, curbside, delivery, directory. Default all.", + "enum": [ + "store", + "curbside", + "delivery", + "directory" + ], + "in": "query", + "name": "kind", "type": "string", - "x-example": "https://www.walesonline.co.uk/news/wales-news/major-welsh-theatre-figure-who-34653727" + "x-example": "store" } ], "produces": [ @@ -554980,7 +640003,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/whataburger.sitemapResponseDoc" } }, "400": { @@ -555013,37 +640036,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get WalesOnline article content", + "summary": "Browse Whataburger's store-URL index", "tags": [ - "WalesOnline" + "Whataburger" ] } }, - "/walesonline/author": { + "/whataburger/store": { "get": { - "description": "Returns one WalesOnline author's public profile (name, plus job title, bio, email and X/Twitter handle when the author lists them) and one page of their recent articles.", - "operationId": "walesonline-author", + "consumes": [ + "application/json" + ], + "description": "Returns one Whataburger store: postal address, coordinates, phone, published week of opening hours, the restaurant services (curbside, delivery) Whataburger lists for it, and a per-channel hours breakdown (dine-in, drive-thru, curbside, delivery) where the channel's hours genuinely differ from the store's top-level hours. Store paths come from GET /whataburger/sitemap -- a store's canonical, curbside and delivery page paths all describe the same physical restaurant and return the same address; the response's own path field always reports the canonical page. Passing a state or city directory path returns a 404 rather than a hollow record. Note there is no menu source, so this family is a locator only.", + "operationId": "whataburger-store", "parameters": [ { - "description": "Author slug, e.g. rahaf-ali", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "rahaf-ali" - }, - { - "description": "Canonical walesonline.co.uk/authors// URL; alternative to slug", + "description": "Store path from a /whataburger/sitemap entry", "in": "query", - "name": "url", + "name": "path", + "required": true, "type": "string", - "x-example": "https://www.walesonline.co.uk/authors/rahaf-ali/" - }, - { - "default": 1, - "description": "1-based page number of the author's article list (1 to 100); overrides any pageNumber in url", - "in": "query", - "name": "page", - "type": "integer" + "x-example": "tx/abilene/1625-tx-hwy-351.html" } ], "produces": [ @@ -555053,7 +640066,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.reachAuthorResponseDoc" + "$ref": "#/definitions/whataburger.storeResponseDoc" } }, "400": { @@ -555086,63 +640099,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a WalesOnline author profile", + "summary": "Get one Whataburger store's detail", "tags": [ - "WalesOnline" + "Whataburger" ] } }, - "/walesonline/headlines": { + "/whatnot/browse": { "get": { - "description": "Lists recent WalesOnline headlines for one section, up to about 25 items. `section` is required and takes a slug such as `news/wales-news`, `news/politics`, `sport/rugby`, `sport/football` or `whats-on`; `walesonline-sections` lists all 37. Photo galleries are omitted, and an invalid value returns a 400 error.", - "operationId": "walesonline-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns the live and upcoming shows currently listed under a Whatnot category: seller, title, status, start time, thumbnail, and tags.", + "operationId": "whatnot-browse", "parameters": [ { - "description": "WalesOnline section slug", - "enum": [ - "news", - "news/wales-news", - "news/uk-news", - "news/world-news", - "news/politics", - "news/local-news", - "news/education", - "news/health", - "news/cost-of-living", - "news/homes-property", - "news/motoring", - "news/motoring/motoring-news", - "news/news-opinion", - "sport", - "sport/football", - "sport/football/football-news", - "sport/football/transfer-news", - "sport/rugby", - "sport/rugby/rugby-news", - "sport/boxing", - "sport/other-sport", - "sport/other-sport/athletics", - "whats-on", - "whats-on/whats-on-news", - "whats-on/arts-culture-news", - "whats-on/family-kids-news", - "whats-on/food-drink-news", - "whats-on/music-nightlife-news", - "whats-on/restaurants-bars", - "whats-on/shopping", - "whats-on/travel", - "lifestyle", - "lifestyle/showbiz", - "lifestyle/tv", - "lifestyle/welsh-homes", - "special-features", - "in-your-area" - ], + "description": "Whatnot category slug. See GET /whatnot/categories for the full list.", "in": "query", - "name": "section", + "name": "category", "required": true, "type": "string", - "x-example": "news" + "x-example": "trading_card_games" } ], "produces": [ @@ -555152,7 +640129,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/whatnot.browseResponseDoc" } }, "400": { @@ -555161,8 +640138,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -555179,16 +640162,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get WalesOnline section headlines", + "summary": "Browse Whatnot live shows by category", "tags": [ - "WalesOnline" + "Whatnot" ] } }, - "/walesonline/news": { + "/whatnot/categories": { "get": { - "description": "Returns fresh WalesOnline top stories from the public home RSS feed. Photo galleries are omitted because they have no readable article body.", - "operationId": "walesonline-news", + "consumes": [ + "application/json" + ], + "description": "Returns Whatnot's full top-level category list (e.g. \"Trading Card Games\", \"Sneakers & Streetwear\"). Each entry's slug is usable directly with /whatnot/browse's category filter.", + "operationId": "whatnot-categories", "produces": [ "application/json" ], @@ -555196,11 +640182,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/whatnot.categoriesResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -555217,66 +640203,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get WalesOnline top stories", - "tags": [ - "WalesOnline" - ] - } - }, - "/walesonline/sections": { - "get": { - "description": "Lists the 37 WalesOnline sections accepted by `walesonline-headlines`, with nested slugs such as `news/wales-news`, `sport/rugby` and `whats-on/food-drink-news`. Each has a `slug`, a display `name` and a feed `url`. Takes no parameters.", - "operationId": "walesonline-sections", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get WalesOnline sections", + "summary": "Get Whatnot's category list", "tags": [ - "WalesOnline" + "Whatnot" ] } }, - "/walgreens/stores": { + "/whatnot/live/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns Walgreens stores near a latitude/longitude or a zip code, nearest first: name, address, phone, hours, and in-store services (pharmacy, clinic, photo, and more) for each. Public data sourced from Walgreens' own store locator.", - "operationId": "walgreens-stores", + "description": "Returns a Whatnot live show's current shop feed: every product, auction, and giveaway listing currently visible in the show, each with its seller's rating.", + "operationId": "whatnot-live", "parameters": [ { - "description": "Latitude; provide with longitude, or provide zip instead", - "in": "query", - "name": "latitude", - "type": "number", - "x-example": 41.8781 - }, - { - "description": "Longitude; provide with latitude, or provide zip instead", - "in": "query", - "name": "longitude", - "type": "number", - "x-example": -87.6298 - }, - { - "description": "US ZIP code; used when latitude/longitude are omitted", - "in": "query", - "name": "zip", + "description": "Whatnot live show id, e.g. from a browse result's id field", + "in": "path", + "name": "id", + "required": true, "type": "string", - "x-example": "60601" + "x-example": "6ddb7fd2-43bb-44e0-8ee8-6656e82fa26a" } ], "produces": [ @@ -555286,7 +640233,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/walgreens.storesResponseDoc" + "$ref": "#/definitions/whatnot.liveResponseDoc" } }, "400": { @@ -555313,19 +640260,35 @@ "ApiKeyAuth": [] } ], - "summary": "Find nearby Walgreens stores", + "summary": "Get a Whatnot live show's current shop feed", "tags": [ - "Walgreens" + "Whatnot" ] } }, - "/wallapop/categories": { + "/whatnot/seller/{username}": { "get": { "consumes": [ "application/json" ], - "description": "Returns the complete live search taxonomy as a flat parent-linked list, including all descendant IDs used by /wallapop/search. Only IDs from this search taxonomy are accepted; legacy navigation-only IDs are excluded. Re-fetch periodically because the upstream taxonomy changes.", - "operationId": "wallapop-categories", + "description": "Returns public seller profile details and one page of the seller's livestreams. Use next_cursor as cursor to continue while has_more is true. The endpoint does not include shop products.", + "operationId": "whatnot-seller", + "parameters": [ + { + "description": "Whatnot seller username", + "in": "path", + "name": "username", + "required": true, + "type": "string", + "x-example": "fluffcardhouse" + }, + { + "description": "Opaque cursor from a prior response's next_cursor", + "in": "query", + "name": "cursor", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -555333,11 +640296,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wallapop.categoriesResponseDoc" + "$ref": "#/definitions/whatnot.sellerResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -555360,76 +640329,74 @@ "ApiKeyAuth": [] } ], - "summary": "Discover Wallapop search categories", + "summary": "Get a Whatnot seller profile and shows", "tags": [ - "Wallapop" + "Whatnot" ] } }, - "/wallapop/filter-options": { + "/wingstop/delivery-store": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page from a remote option list advertised by /wallapop/filters. Use its exact filter_id and category_id. brand/model lists use a root category ID; category-specific lists use the selected category ID. Model discovery requires brand. Multi-select options such as size map to the live search parameter fashion_size. q and sort provide listing context; options_query narrows the option list. Follow next_cursor while repeating the same context; an empty terminal page has no next_cursor. Option IDs are accepted by /wallapop/search's filter parameter.", - "operationId": "wallapop-filter-options", + "description": "Given a delivery address, returns the single Wingstop store that will deliver there, plus its drive time. Returns 404 when no Wingstop store delivers to that address. The returned slug can be passed directly as GET /wingstop/menu's path with service_mode=delivery.", + "operationId": "wingstop-delivery-store", "parameters": [ { - "description": "Remote filter ID advertised by /wallapop/filters for this category", + "description": "Delivery address line 1", "in": "query", - "name": "filter_id", + "name": "address1", "required": true, "type": "string", - "x-example": "item_language" + "x-example": "9804 Jones Rd" }, { - "description": "Live category ID from /wallapop/categories. Use a root for brand/model or the selected category for category-specific remote options.", + "description": "Delivery address city", "in": "query", - "name": "category_id", + "name": "city", "required": true, - "type": "integer", - "x-example": 24100 + "type": "string", + "x-example": "Houston" }, { - "description": "Required with filter_id=model; a brand option ID", + "description": "Delivery address state (region)", "in": "query", - "name": "brand", + "name": "state", + "required": true, "type": "string", - "x-example": "BMW" + "x-example": "TX" }, { - "description": "Optional listing search context", + "description": "Delivery address postal code", "in": "query", - "name": "q", + "name": "postal_code", + "required": true, "type": "string", - "x-example": "iphone" + "x-example": "77065" }, { - "description": "Optional listing sort context", - "enum": [ - "closest", - "most_relevance", - "newest", - "price_low_to_high", - "price_high_to_low" - ], + "description": "Delivery address country code. Defaults to US.", "in": "query", - "name": "sort", + "name": "country_code", "type": "string", - "x-example": "most_relevance" + "x-example": "US" }, { - "description": "Optional text search inside the dynamic option list", + "description": "Delivery address latitude", "in": "query", - "name": "options_query", - "type": "string", - "x-example": "BMW" + "name": "latitude", + "required": true, + "type": "number", + "x-example": 29.913115 }, { - "description": "Opaque next_cursor returned by this endpoint", + "description": "Delivery address longitude", "in": "query", - "name": "cursor", - "type": "string" + "name": "longitude", + "required": true, + "type": "number", + "x-example": -95.584729 } ], "produces": [ @@ -555439,7 +640406,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wallapop.filterOptionsResponseDoc" + "$ref": "#/definitions/wingstop.deliveryStoreResponseDoc" } }, "400": { @@ -555460,12 +640427,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -555478,33 +640439,26 @@ "ApiKeyAuth": [] } ], - "summary": "Discover Wallapop remote filter values", + "summary": "Find the Wingstop store that delivers to an address", "tags": [ - "Wallapop" + "Wingstop" ] } }, - "/wallapop/filters": { + "/wingstop/directory": { "get": { "consumes": [ "application/json" ], - "description": "Returns Wallapop's live search filter schema for a query and optional category. Each filter includes its current type, the upstream search-enabled flag when provided, accepted parameter names, inline option values or slider bounds, and a category-scoped /wallapop/filter-options link for remote value lists.", - "operationId": "wallapop-filters", + "description": "Returns one level of Wingstop's store directory tree. Omit path for the root, which lists the single US country node; descend country to states, states to cities, cities to stores. Each child carries its name, path, url and kind (country, state, city, or store). A child with is_store true (kind store) is a store record rather than another directory level -- pass its path to GET /wingstop/store.", + "operationId": "wingstop-directory", "parameters": [ { - "description": "Optional search phrase used to select relevant filters", + "description": "Directory path from a previous response's children[].path, e.g. us/tx. Omit for the root.", "in": "query", - "name": "q", + "name": "path", "type": "string", - "x-example": "iphone" - }, - { - "description": "Any live search taxonomy ID from /wallapop/categories", - "in": "query", - "name": "category_id", - "type": "integer", - "x-example": 100 + "x-example": "us/tx" } ], "produces": [ @@ -555514,7 +640468,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wallapop.filtersResponseDoc" + "$ref": "#/definitions/wingstop.directoryResponseDoc" } }, "400": { @@ -555535,12 +640489,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -555553,29 +640501,19 @@ "ApiKeyAuth": [] } ], - "summary": "Discover Wallapop search filters", + "summary": "Browse the Wingstop store directory", "tags": [ - "Wallapop" + "Wingstop" ] } }, - "/wallapop/item": { + "/wingstop/flavors": { "get": { "consumes": [ "application/json" ], - "description": "Returns public listing details parsed from the anonymous server-rendered item page: description, price, taxonomy, condition, images, coarse location, shipping, category attributes, hashtags, and related-search links. Pass a clean https item URL returned by /wallapop/search, using es.wallapop.com, it.wallapop.com, or pt.wallapop.com. Seller/profile/contact data, exact coordinates, postal codes, favorites, and view-tracking state are omitted. The upstream may rate-limit or block requests; this endpoint uses the measured browser_android_native@fresh profile and retries up to three times.", - "operationId": "wallapop-item-detail", - "parameters": [ - { - "description": "Clean https public item URL from /wallapop/search on es.wallapop.com, it.wallapop.com, or pt.wallapop.com", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https%3A%2F%2Fes.wallapop.com%2Fitem%2Fchaqueta-1183989904" - } - ], + "description": "Returns Wingstop's full sauce and dry-rub flavor catalog: name, description, image, a 0 (no heat) to 5 (hottest) heat scale, whether it's a dry rub or wet sauce, and new/popular/limited-time badges. Includes retired flavors (is_active false) still present in Wingstop's own feed.", + "operationId": "wingstop-flavors", "produces": [ "application/json" ], @@ -555583,19 +640521,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wallapop.itemDetailResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/wingstop.flavorsResponseDoc" } }, "429": { @@ -555604,12 +640530,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -555622,132 +640542,34 @@ "ApiKeyAuth": [] } ], - "summary": "Fetch a public Wallapop listing detail page", + "summary": "Get Wingstop's flavor catalog", "tags": [ - "Wallapop" + "Wingstop" ] } }, - "/wallapop/search": { + "/wingstop/menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of public Wallapop listing cards with title, price, currency, images, coarse location, taxonomy, shipping state, and a public item URL. q is a free-text search. latitude and longitude are required caller-provided coordinates because Wallapop otherwise resolves location from the request egress. category_id accepts any ID returned by /wallapop/categories, including descendants. sort is one of closest, most_relevance, newest, price_low_to_high, or price_high_to_low. When category_id is supplied, discover condition values from /wallapop/filters; categories can add values beyond the base set. Use /wallapop/filter-options for remote filter values. Pass next_cursor back as cursor by itself to fetch the next page.", - "operationId": "wallapop-search", + "description": "Returns one Wingstop store's full priced, categorized menu for carryout or delivery: every category, each listing's variants (a standalone item has one variant; a size/flavor family such as \"6 pc Wing Combo\" has one variant per size or preparation) with price, description and calorie range, plus store-level pricing context (currency, tax rate, prep lead time). Store paths come from GET /wingstop/directory entries whose is_store is true, or a GET /wingstop/store response's own path.", + "operationId": "wingstop-menu", "parameters": [ { - "description": "Free-text listing search, 2 to 200 characters", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "iphone" - }, - { - "description": "Caller-provided search latitude, -90 through 90", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 40.4168 - }, - { - "description": "Caller-provided search longitude, -180 through 180", + "description": "Store path from a /wingstop/directory child with is_store true, or a /wingstop/store response's own path", "in": "query", - "name": "longitude", + "name": "path", "required": true, - "type": "number", - "x-example": -3.7038 - }, - { - "description": "Any live search taxonomy ID from /wallapop/categories", - "in": "query", - "name": "category_id", - "type": "integer", - "x-example": 24200 - }, - { - "description": "Wallapop sort order", - "enum": [ - "closest", - "most_relevance", - "newest", - "price_low_to_high", - "price_high_to_low" - ], - "in": "query", - "name": "sort", - "type": "string", - "x-example": "most_relevance" - }, - { - "description": "Minimum sale price", - "in": "query", - "name": "min_price", - "type": "number", - "x-example": 10 - }, - { - "description": "Maximum sale price", - "in": "query", - "name": "max_price", - "type": "number", - "x-example": 500 - }, - { - "description": "Repeatable or comma-separated condition values. With category_id, use the current values from /wallapop/filters; without category_id, base values are new, as_good_as_new, good, fair, and has_given_it_all.", - "in": "query", - "name": "condition", "type": "string", - "x-example": "new,good" - }, - { - "description": "Pass true to limit to shipping-capable listings; omit to include all. false is rejected because Wallapop ignores it.", - "enum": [ - "true" - ], - "in": "query", - "name": "is_shippable", - "type": "string", - "x-example": "true" - }, - { - "description": "Listing date window", - "enum": [ - "today", - "lastWeek", - "lastMonth" - ], - "in": "query", - "name": "time_filter", - "type": "string", - "x-example": "lastWeek" - }, - { - "description": "Maximum distance from the supplied coordinates, 0 through 1000 km", - "in": "query", - "name": "distance_in_km", - "type": "integer", - "x-example": 25 - }, - { - "collectionFormat": "csv", - "description": "Repeatable category-specific key:value pair discovered from /wallapop/filters, e.g. brand:BMW, color:Black, has_warranty:true, storage_capacity:128gb, item_language:english, or fashion_size:3,4. For remote values use IDs returned by /wallapop/filter-options.", - "in": "query", - "items": { - "type": "string" - }, - "name": "filter", - "type": "array", - "x-example": "storage_capacity:128gb" + "x-example": "tx/houston/wingstop-128-houston-tx-77065" }, { - "description": "Opaque next_cursor returned by a previous response. Use it alone, without initial search parameters.", + "description": "One of: carryout, delivery. Defaults to carryout.", "in": "query", - "name": "cursor", + "name": "service_mode", "type": "string", - "x-example": "eyJ2IjoxLCJuZXh0X3BhZ2UiOiJ..." + "x-example": "carryout" } ], "produces": [ @@ -555757,7 +640579,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wallapop.searchResponseDoc" + "$ref": "#/definitions/wingstop.menuResponseDoc" } }, "400": { @@ -555778,12 +640600,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -555796,90 +640612,42 @@ "ApiKeyAuth": [] } ], - "summary": "Search Wallapop public listings", + "summary": "Get one Wingstop store's priced menu", "tags": [ - "Wallapop" + "Wingstop" ] } }, - "/walmart/product/{item_id}": { + "/wingstop/nearby": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Walmart product: price, availability, brand, images, rating, seller, description, highlights, specifications, and variants.", - "operationId": "walmart-product", + "description": "Returns Wingstop stores within a radius of a coordinate, sorted nearest first, with enough detail per store (address, phone, general hours, fulfillment channels) that a follow-up GET /wingstop/store call is often unnecessary. Each result's slug can be passed directly as GET /wingstop/menu's path.", + "operationId": "wingstop-nearby", "parameters": [ { - "description": "Walmart item id (the numeric id in a /ip/{id} URL)", - "in": "path", - "name": "item_id", + "description": "Search center latitude", + "in": "query", + "name": "latitude", "required": true, - "type": "string", - "x-example": "5689919121" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/walmart.productResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } + "type": "number", + "x-example": 29.913115 }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get a Walmart product", - "tags": [ - "Walmart" - ] - } - }, - "/walmart/product/{item_id}/reviews": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the reviews snapshot embedded in a Walmart product page: average rating, total review count, the per-star rating breakdown, the recommended percentage, the top positive and top negative review, and a sample of recent reviews. This is a single on-page snapshot, not a full paginated feed. A product that exists but has no reviews returns zero counts and an empty reviews list.", - "operationId": "walmart-product-reviews", - "parameters": [ { - "description": "Walmart item id (the numeric id in a /ip/{id} URL)", - "in": "path", - "name": "item_id", + "description": "Search center longitude", + "in": "query", + "name": "longitude", "required": true, - "type": "string", - "x-example": "5689919121" + "type": "number", + "x-example": -95.584729 + }, + { + "description": "Search radius in miles, 1-100. Defaults to 20.", + "in": "query", + "name": "radius", + "type": "integer", + "x-example": 20 } ], "produces": [ @@ -555889,7 +640657,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/walmart.reviewsResponseDoc" + "$ref": "#/definitions/wingstop.nearbyResponseDoc" } }, "400": { @@ -555898,14 +640666,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -555922,47 +640684,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Walmart product reviews", + "summary": "Search Wingstop stores near a coordinate", "tags": [ - "Walmart" + "Wingstop" ] } }, - "/walmart/search": { + "/wingstop/store": { "get": { "consumes": [ "application/json" ], - "description": "Returns Walmart search results: item id, title, brand, price, image, availability, seller, and rating per product.", - "operationId": "walmart-search", + "description": "Returns one Wingstop store: name, full postal address, phone, coordinates, its general weekly hours plus a per-channel breakdown (pickup, delivery, takeout, drive-through), which pickup/delivery services it offers, its operating status, price tier and Google Place id. Store paths come from GET /wingstop/directory entries whose is_store is true. Passing a directory path here returns a 404 rather than a hollow record.", + "operationId": "wingstop-store", "parameters": [ { - "description": "Search query", + "description": "Store path from a /wingstop/directory child with is_store true", "in": "query", - "name": "q", + "name": "path", "required": true, "type": "string", - "x-example": "wireless earbuds" - }, - { - "description": "1-based page number (default 1)", - "in": "query", - "name": "page", - "type": "integer" - }, - { - "description": "Sort order", - "enum": [ - "best_match", - "price_low", - "price_high", - "best_seller", - "new_arrivals", - "rating_high" - ], - "in": "query", - "name": "sort", - "type": "string" + "x-example": "tx/houston/wingstop-128-houston-tx-77065" } ], "produces": [ @@ -555972,7 +640714,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/walmart.searchResponseDoc" + "$ref": "#/definitions/wingstop.storeResponseDoc" } }, "400": { @@ -555987,8 +640729,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -556005,24 +640747,24 @@ "ApiKeyAuth": [] } ], - "summary": "Search Walmart products", + "summary": "Get one Wingstop store's detail", "tags": [ - "Walmart" + "Wingstop" ] } }, - "/wapo/article": { + "/wired/article": { "get": { - "description": "Returns one public Washington Post article's metadata and body paragraphs from a canonical article URL. Metered articles that the site truncates are not available.", - "operationId": "wapo-article", + "description": "Returns one public WIRED article's metadata and full body paragraphs from a canonical article URL. WIRED marks some stories subscriber-only in the page's own metadata; those return a 403 permission error rather than a truncated or fabricated body -- see the endpoint markdown for the exact detection method.", + "operationId": "wired-article", "parameters": [ { - "description": "Canonical Washington Post article URL", + "description": "Canonical WIRED article URL", "in": "query", "name": "url", "required": true, "type": "string", - "x-example": "https://www.washingtonpost.com/business/2026/09/17/example-slug/" + "x-example": "https://www.wired.com/story/example-story/" } ], "produces": [ @@ -556032,7 +640774,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wapo.articleResponseDoc" + "$ref": "#/definitions/wired.articleResponseDoc" } }, "400": { @@ -556071,37 +640813,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Washington Post article's content", + "summary": "Get a WIRED article's content", "tags": [ - "Washington Post" + "WIRED" ] } }, - "/wapo/author": { + "/wired/author": { "get": { - "description": "Returns one Washington Post staff author's public profile: byline metadata, bio, contact/social links, and one page of their recent articles.", - "operationId": "wapo-author", + "description": "Returns one WIRED contributor's public profile: name, job title, biography, headshot, social links, and their recent articles from a canonical author URL.", + "operationId": "wired-author", "parameters": [ { - "description": "Washington Post people slug, e.g. adam-taylor", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "adam-taylor" - }, - { - "description": "Canonical washingtonpost.com/people// URL, optionally with a ?page= query; alternative to slug", + "description": "Canonical WIRED author URL", "in": "query", "name": "url", + "required": true, "type": "string", - "x-example": "https://www.washingtonpost.com/people/adam-taylor/?page=2" - }, - { - "default": 1, - "description": "1-based page number; overrides any page number in url", - "in": "query", - "name": "page", - "type": "integer" + "x-example": "https://www.wired.com/author/lauren-goode/" } ], "produces": [ @@ -556111,7 +640840,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wapo.authorResponseDoc" + "$ref": "#/definitions/wired.authorResponseDoc" } }, "400": { @@ -556144,24 +640873,32 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Washington Post staff author profile", + "summary": "Get a WIRED contributor profile", "tags": [ - "Washington Post" + "WIRED" ] } }, - "/wapo/headlines": { + "/wired/headlines": { "get": { - "description": "Returns the first page of a Washington Post section front: each story's title, canonical URL, description, section, publication time, and lead image. Section must be a path returned by /wapo/sections.", - "operationId": "wapo-headlines", + "description": "Returns the current public RSS feed for one WIRED section: each story's title, canonical URL, summary, author, publication time, and lead image. Section must be one of the slugs returned by /wired/sections: `business`, `culture`, `gear`, `politics`, `science`, `security`.", + "operationId": "wired-headlines", "parameters": [ { - "description": "Section path from /wapo/sections", + "description": "WIRED section slug from /wired/sections", + "enum": [ + "business", + "culture", + "gear", + "politics", + "science", + "security" + ], "in": "query", "name": "section", "required": true, "type": "string", - "x-example": "world" + "x-example": "security" } ], "produces": [ @@ -556171,7 +640908,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wapo.headlinesResponseDoc" + "$ref": "#/definitions/wired.headlinesResponseDoc" } }, "400": { @@ -556204,54 +640941,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get the latest stories in a Washington Post section", - "tags": [ - "Washington Post" - ] - } - }, - "/wapo/news": { - "get": { - "description": "Returns the current Washington Post news list with no parameters. Each item has its `title`, canonical `url`, `published_at` and `last_modified`, the last when the publisher supplies it. Items do not include summaries or authors.", - "operationId": "wapo-news", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/wapo.newsResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Get the latest Washington Post stories", + "summary": "Get the latest stories in a WIRED section", "tags": [ - "Washington Post" + "WIRED" ] } }, - "/wapo/sections": { + "/wired/news": { "get": { - "description": "Lists the Washington Post sections accepted by `wapo-headlines`. Each has a path `slug` such as `politics` or `business/technology`, a display `name` and a landing-page `url`. Use it to find valid `section` values. Takes no parameters.", - "operationId": "wapo-sections", + "description": "Returns WIRED's current top stories with no parameters. Each item has its title, canonical URL, summary, author, publication time and lead image, plus a type label for the item.", + "operationId": "wired-news", "produces": [ "application/json" ], @@ -556259,13 +640958,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wapo.sectionsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/wired.newsResponseDoc" } }, "429": { @@ -556286,19 +640979,16 @@ "ApiKeyAuth": [] } ], - "summary": "List Washington Post sections", + "summary": "Get the latest WIRED stories", "tags": [ - "Washington Post" + "WIRED" ] } }, - "/wattpad/categories": { + "/wired/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Wattpad's story categories (Romance, Fantasy, Fanfiction, Werewolf, ...) with id, name and English name. These ids are the values the category parameter of wattpad-search takes and the values in every story's category_ids. The list is read live from Wattpad.", - "operationId": "wattpad-categories", + "description": "Lists every WIRED section accepted by /wired/headlines, with its slug, display name, and landing-page URL. This is the full public, RSS-backed section taxonomy -- see the endpoint markdown for the one primary-nav link (Big Story) that is excluded and why.", + "operationId": "wired-sections", "produces": [ "application/json" ], @@ -556306,13 +640996,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wattpad.categoriesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/wired.sectionsResponseDoc" } }, "429": { @@ -556333,19 +641017,19 @@ "ApiKeyAuth": [] } ], - "summary": "List Wattpad story categories", + "summary": "List WIRED sections", "tags": [ - "Wattpad" + "WIRED" ] } }, - "/wattpad/languages": { + "/wish/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns the story languages Wattpad's search can filter by, each with its numeric id and native-script name (50 at the time of writing). These ids are the values the language parameter of wattpad-search takes.", - "operationId": "wattpad-languages", + "description": "Returns Wish's own top navigation/category tree (e.g. \"Popular\", \"Deals Hub\", \"Fashion\", \"Gadgets\") plus each category's nested filter groups (e.g. Color, Rating) where present. This is a static, site-wide taxonomy -- it takes no input and its result does not vary by search term or category.", + "operationId": "wish-categories", "produces": [ "application/json" ], @@ -556353,13 +641037,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wattpad.languagesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/wish.categoriesResponseDoc" } }, "429": { @@ -556380,27 +641058,27 @@ "ApiKeyAuth": [] } ], - "summary": "List Wattpad story languages", + "summary": "Get Wish's category and filter navigation tree", "tags": [ - "Wattpad" + "Wish" ] } }, - "/wattpad/part": { + "/wish/product/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Wattpad chapter's metadata: id, title, link, word count, reads, votes, comments, length, dates and the story it belongs to (id and title). part_id is the numeric chapter id from wattpad-story-parts. A chapter that does not exist returns not found. Chapter text is never returned.", - "operationId": "wattpad-part", + "description": "Returns one Wish product's full detail: name, description, sold-out state, aggregate rating, image URLs, and every purchasable variation with its own price, currency, inventory, and merchant. id is taken from a search result's product_id field or a product page's URL. An unrecognized id returns 404.", + "operationId": "wish-product", "parameters": [ { - "description": "Numeric chapter id from the id field of wattpad-story-parts", - "in": "query", - "name": "part_id", + "description": "Wish product id, a 24-character hex id from a search result's product_id field", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "1353317758" + "x-example": "68b46c0356ea5dba05e9f755" } ], "produces": [ @@ -556410,7 +641088,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wattpad.partResponseDoc" + "$ref": "#/definitions/wish.productDetailResponseDoc" } }, "400": { @@ -556443,41 +641121,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Wattpad chapter", + "summary": "Get a Wish product's full detail", "tags": [ - "Wattpad" + "Wish" ] } }, - "/wattpad/part-comments": { + "/wish/product/{id}/related": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of the public reader comments on a Wattpad chapter, newest first: id, text, commenter username and avatar, reply count, whether it is a reply, parent id, link and creation time. part_id is the numeric chapter id from wattpad-story-parts. limit is 1 to 100 (default 20) and offset pages the list; next_offset is absent on the last page. A chapter with no comments, or an unknown chapter, returns an empty list.", - "operationId": "wattpad-part-comments", + "description": "Returns a Wish product's related-item rails: shelves of similar products, grouped by rail (e.g. general similar items, a faster-shipping-eligible subset). id is taken from a search result's product_id field or a product page's URL. A faster-shipping rail with no eligible items, or a nonexistent id, returns a normal, empty result rather than an error.", + "operationId": "wish-product-related", "parameters": [ { - "description": "Numeric chapter id from the id field of wattpad-story-parts", - "in": "query", - "name": "part_id", + "description": "Wish product id, a 24-character hex id from a search result's product_id field", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "1353317758" - }, - { - "description": "Page size, 1 to 100; defaults to 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 5 + "x-example": "68b46c0356ea5dba05e9f755" }, { - "description": "Zero-based result offset, below 100000; defaults to 0", + "description": "Number of items to return per rail, 1 to 70, defaults to 10", "in": "query", - "name": "offset", + "name": "count", "type": "integer", - "x-example": 0 + "x-example": 10 } ], "produces": [ @@ -556487,7 +641158,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wattpad.partCommentsResponseDoc" + "$ref": "#/definitions/wish.relatedItemsResponseDoc" } }, "400": { @@ -556514,118 +641185,34 @@ "ApiKeyAuth": [] } ], - "summary": "List reader comments on a Wattpad chapter", + "summary": "Get a Wish product's related items", "tags": [ - "Wattpad" + "Wish" ] } }, - "/wattpad/search": { + "/wish/product/{id}/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Searches Wattpad's story catalog by text or browses it by ranking, category and language, and returns one page of stories: id, title, description, cover, link, author, votes, reads, comments, chapter count, completed and mature flags, language, category ids, tags and dates. Give at least one of query, filter, category or language. filter is hot, new or featured; category is an id from wattpad-categories; language is an id from wattpad-languages. limit is 1 to 100 (default 20) and offset pages the results: a text search reaches offset 9999, while browsing without a query is capped at 1500 results. Browse pages can hold fewer stories than limit (or none) because Wattpad filters after paging, so advance with next_offset rather than the item count.", - "operationId": "wattpad-search", + "description": "Returns a Wish product's customer reviews. id is taken from a search result's product_id field or a product page's URL. A product with zero reviews returns a normal, empty result rather than an error. A caller wanting more reviews should re-request with a larger count -- this endpoint does not support an offset/cursor parameter.", + "operationId": "wish-product-reviews", "parameters": [ { - "description": "Text to search for in story titles, descriptions and tags, up to 200 characters", - "in": "query", - "name": "query", - "type": "string", - "x-example": "romance" - }, - { - "description": "Ranking: hot is currently popular, new is recently published, featured is Wattpad's featured stories", - "enum": [ - "hot", - "new", - "featured" - ], - "in": "query", - "name": "filter", + "description": "Wish product id, a 24-character hex id from a search result's product_id field", + "in": "path", + "name": "id", + "required": true, "type": "string", - "x-example": "hot" - }, - { - "description": "Category id from wattpad-categories, for example 4 for Romance", - "in": "query", - "name": "category", - "type": "integer", - "x-example": 4 - }, - { - "description": "Story language id from wattpad-languages, for example 1 for English", - "enum": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 46, - 47, - 48, - 49, - 50, - 51, - 53 - ], - "in": "query", - "name": "language", - "type": "integer", - "x-example": 1 - }, - { - "description": "Page size, 1 to 100; defaults to 20", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 20 + "x-example": "5c204af997fd253055250a4d" }, { - "description": "Zero-based result offset; below 10000 with query, below 1500 without", + "description": "Number of reviews to return, 1 to 200, defaults to 10", "in": "query", - "name": "offset", + "name": "count", "type": "integer", - "x-example": 0 + "x-example": 10 } ], "produces": [ @@ -556635,7 +641222,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wattpad.searchResponseDoc" + "$ref": "#/definitions/wish.productReviewsResponseDoc" } }, "400": { @@ -556644,6 +641231,12 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -556662,37 +641255,37 @@ "ApiKeyAuth": [] } ], - "summary": "Search and browse Wattpad stories", + "summary": "Get a Wish product's customer reviews", "tags": [ - "Wattpad" + "Wish" ] } }, - "/wattpad/search-users": { + "/wish/search": { "get": { "consumes": [ "application/json" ], - "description": "Searches Wattpad's authors by username or name and returns one page: username, display name, bio, avatar, verified flag, published story count and follower count. limit is 1 to 100 (default 20) and offset pages the results. Authors with a private profile or who have opted out of crawling are left out, so a page can hold fewer authors than limit; advance with next_offset.", - "operationId": "wattpad-search-users", + "description": "Searches Wish's product catalog by keyword, with real offset-based pagination. Returns products with price, currency, rating, review count, and merchant id. A query with no matches returns a normal, empty result rather than an error.", + "operationId": "wish-search", "parameters": [ { - "description": "Author name to search for, up to 200 characters", + "description": "Search keyword", "in": "query", "name": "query", "required": true, "type": "string", - "x-example": "notjust" + "x-example": "shoes" }, { - "description": "Page size, 1 to 100; defaults to 20", + "description": "Number of results per page, 1 to 70, defaults to 30", "in": "query", - "name": "limit", + "name": "count", "type": "integer", - "x-example": 5 + "x-example": 30 }, { - "description": "Zero-based result offset, below 10000; defaults to 0", + "description": "Result offset, 0-based, defaults to 0, must be an exact multiple of count up to 3 * count", "in": "query", "name": "offset", "type": "integer", @@ -556706,7 +641299,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wattpad.searchUsersResponseDoc" + "$ref": "#/definitions/wish.searchResponseDoc" } }, "400": { @@ -556733,27 +641326,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Wattpad authors by name", + "summary": "Search Wish products", "tags": [ - "Wattpad" + "Wish" ] } }, - "/wattpad/story": { + "/wish/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Wattpad story's public details: title, description, cover, link, author, votes, reads, comments, chapter count, completed and mature flags, language, category ids, tags, first chapter id, last published date, rating and copyright codes, paywall flag and dates. story_id is the numeric id from the story's wattpad.com link; the full link is also accepted. A story that does not exist returns not found. Chapter text is never returned.", - "operationId": "wattpad-story", + "description": "Returns Wish's own search-suggestion (typeahead) result for a partial search term: a flat list of suggested search terms, no product data. A partial term with no matches returns a normal, empty result rather than an error.", + "operationId": "wish-suggest", "parameters": [ { - "description": "Numeric Wattpad story id, such as 344352588; a wattpad.com/story link is also accepted", + "description": "Partial search term", "in": "query", - "name": "story_id", + "name": "query", "required": true, "type": "string", - "x-example": "344352588" + "x-example": "shoe" } ], "produces": [ @@ -556763,7 +641356,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wattpad.storyResponseDoc" + "$ref": "#/definitions/wish.suggestResponseDoc" } }, "400": { @@ -556772,12 +641365,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -556796,27 +641383,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Wattpad story", + "summary": "Get Wish search suggestions", "tags": [ - "Wattpad" + "Wish" ] } }, - "/wattpad/story-parts": { + "/wolt/cities": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Wattpad story's chapter list, in reading order: id, title, link, word count, reads, votes, comments, length, and created and modified dates for every chapter. The per-chapter reads show where readers drop off. Use it to see how a story is paced and which chapters readers react to. story_id is the numeric story id, or its wattpad.com link. Chapter text is never returned.", - "operationId": "wattpad-story-parts", + "description": "Returns Wolt's own live directory of every city it operates in, each with the coordinate pair the rest of the Wolt endpoints take, plus its slug, country codes, and timezone. Every other Wolt endpoint is resolved purely from a coordinate, so this is the discovery step that makes them usable without an external geocoder. Optionally restrict to one country, or pass a reference coordinate to have each city carry its distance and the list returned nearest-first.", + "operationId": "wolt-cities", "parameters": [ { - "description": "Numeric Wattpad story id, such as 344352588; a wattpad.com/story link is also accepted", + "description": "Optional ISO 3166-1 country code to restrict the directory to, alpha-2 (FI) or alpha-3 (FIN), case-insensitive.", "in": "query", - "name": "story_id", - "required": true, + "name": "country", "type": "string", - "x-example": "344352588" + "x-example": "FI" + }, + { + "description": "Optional reference latitude. Must be given together with longitude.", + "in": "query", + "name": "latitude", + "type": "number", + "x-example": 60.1699 + }, + { + "description": "Optional reference longitude. Must be given together with latitude.", + "in": "query", + "name": "longitude", + "type": "number", + "x-example": 24.9384 } ], "produces": [ @@ -556826,7 +641426,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wattpad.storyPartsResponseDoc" + "$ref": "#/definitions/wolt.citiesResponseDoc" } }, "400": { @@ -556835,18 +641435,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -556859,34 +641447,35 @@ "ApiKeyAuth": [] } ], - "summary": "List a Wattpad story's chapters", + "summary": "List every city Wolt operates in, with coordinates", "tags": [ - "Wattpad" + "Wolt" ] } }, - "/wattpad/story-recommendations": { + "/wolt/collections": { "get": { "consumes": [ "application/json" ], - "description": "Returns the stories Wattpad recommends alongside one story (readers of this also read these), with the same fields as wattpad-search: id, title, description, cover, link, author, votes, reads, comments, chapter count, completed and mature flags, language, category ids, tags and dates. story_id is the numeric story id or its wattpad.com link. Wattpad returns at most 18 recommendations and does not page; limit is 1 to 20.", - "operationId": "wattpad-story-recommendations", + "description": "Returns Wolt's own curated homepage restaurant/store lists for a location (e.g. top-rated, newest, hot-this-week -- whichever collections Wolt's own ops team currently curates for that market), read from Wolt's anonymous homepage endpoint. Each restaurant carries the same fields /wolt/search returns. The response also carries is_serviceable, which says whether Wolt delivers to the requested coordinates at all: false means the coordinates are outside Wolt's delivery coverage, so the empty collections list is a coverage answer rather than a served location whose homepage happens to carry no curated lists.", + "operationId": "wolt-collections", "parameters": [ { - "description": "Numeric Wattpad story id, such as 344352588; a wattpad.com/story link is also accepted", + "description": "Search center latitude", "in": "query", - "name": "story_id", + "name": "latitude", "required": true, - "type": "string", - "x-example": "344352588" + "type": "number", + "x-example": 60.1699 }, { - "description": "Maximum recommendations to return, 1 to 20; defaults to 20", + "description": "Search center longitude", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 5 + "name": "longitude", + "required": true, + "type": "number", + "x-example": 24.9384 } ], "produces": [ @@ -556896,7 +641485,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wattpad.recommendationsResponseDoc" + "$ref": "#/definitions/wolt.collectionsResponseDoc" } }, "400": { @@ -556905,18 +641494,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -556929,27 +641506,27 @@ "ApiKeyAuth": [] } ], - "summary": "List stories Wattpad recommends for a story", + "summary": "Get Wolt's curated homepage restaurant/store collections for a location", "tags": [ - "Wattpad" + "Wolt" ] } }, - "/wattpad/user": { + "/wolt/restaurant": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Wattpad author's public profile: username, display name, bio, avatar, location, website, verified and ambassador flags, follower and following counts, votes received, published story count, reading list count and join date. username is the name from the author's wattpad.com/user/ link, case-insensitive. Authors with a private profile or who have opted out of crawling are not returned. An unknown author returns not found.", - "operationId": "wattpad-user", + "description": "Returns one Wolt restaurant or store's public detail by its slug: name, address, coordinates, timezone, phone, website, rating, currency, price range, cuisine tags, category ids (the values /wolt/search's category parameter accepts), opening hours, delivery hours, delivery methods, pickup availability, order minimum, and service fee estimate.", + "operationId": "wolt-restaurant", "parameters": [ { - "description": "Wattpad username from wattpad.com/user/{username}; a profile link or @name is also accepted", + "description": "Wolt restaurant/store slug, from /wolt/search's slug field", "in": "query", - "name": "username", + "name": "slug", "required": true, "type": "string", - "x-example": "notjustarandomgirl" + "x-example": "mcdonalds-forum-katutaso" } ], "produces": [ @@ -556959,7 +641536,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wattpad.userResponseDoc" + "$ref": "#/definitions/wolt.restaurantResponseDoc" } }, "400": { @@ -556974,12 +641551,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -556992,41 +641563,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Wattpad author profile", + "summary": "Get one Wolt restaurant or store's detail", "tags": [ - "Wattpad" + "Wolt" ] } }, - "/wattpad/user-stories": { + "/wolt/restaurant/availability": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of the stories a Wattpad author has published, with the same fields as wattpad-search: id, title, description, cover, link, votes, reads, comments, chapter count, completed and mature flags, language, category ids, tags and dates. username is the name from the author's wattpad.com/user/ link. limit is 1 to 100 (default 20) and offset pages the list; next_offset is absent on the last page. Authors with a private profile or who have opted out of crawling are not returned. This call reads the author's access settings first, so it costs two requests.", - "operationId": "wattpad-user-stories", + "description": "Returns one restaurant/store's live availability for a delivery coordinate: whether it is open and online right now, the next open and close times, delivery and pickup time estimates in minutes, the delivery fee, the order minimum, the venue's distance, and any discount campaign labels Wolt currently shows on its public page. Coordinates are optional but change the answer materially -- Wolt resolves delivery availability, the fee, the estimate, and the distance against them; without coordinates the venue's generic, location-independent status is returned and delivery_method_default is UNAVAILABLE.", + "operationId": "wolt-restaurant-availability", "parameters": [ { - "description": "Wattpad username from wattpad.com/user/{username}; a profile link or @name is also accepted", + "description": "Wolt restaurant/store slug, from /wolt/search's slug field", "in": "query", - "name": "username", + "name": "slug", "required": true, "type": "string", - "x-example": "notjustarandomgirl" + "x-example": "kotipizza-kamppi" }, { - "description": "Page size, 1 to 100; defaults to 20", + "description": "Optional delivery-address latitude. Must be given together with longitude.", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 5 + "name": "latitude", + "type": "number", + "x-example": 60.1699 }, { - "description": "Zero-based result offset; defaults to 0", + "description": "Optional delivery-address longitude. Must be given together with latitude.", "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "name": "longitude", + "type": "number", + "x-example": 24.9384 } ], "produces": [ @@ -557036,7 +641607,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wattpad.userStoriesResponseDoc" + "$ref": "#/definitions/wolt.availabilityResponseDoc" } }, "400": { @@ -557051,12 +641622,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -557069,40 +641634,27 @@ "ApiKeyAuth": [] } ], - "summary": "List a Wattpad author's stories", + "summary": "Get one Wolt restaurant or store's live availability and delivery estimate", "tags": [ - "Wattpad" + "Wolt" ] } }, - "/wayfair/categories": { + "/wolt/restaurant/menu": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of Wayfair categories discovered from Wayfair's own published sitemap, closing the discovery gap where a category id otherwise has to be found elsewhere. Pair a returned id with GET /wayfair/category to browse that category's product grid. name is derived from the category's own URL slug (title-cased), not an authoritative site-provided label. q, if set, case-insensitively filters to categories whose derived name or department contains it.", - "operationId": "wayfair-categories", + "description": "Returns one restaurant/store's menu grouped into categories, plus its restaurant summary. Each item carries a name, description, price, dietary tags, and image, read from Wolt's own anonymous menu API in a single call. The response's loading_strategy field reports whether the items are included: full means every category carries its items, while partial means Wolt does not bulk-load this venue's assortment, so the categories come back real but with empty item lists and the venue's items are reachable only by keyword through /wolt/restaurant/menu/search. Large stores of any type -- supermarkets, pharmacies, drugstores, DIY and toy stores -- are commonly partial; restaurants are full.", + "operationId": "wolt-restaurant-menu", "parameters": [ { - "description": "Case-insensitive substring filter on name or department", + "description": "Wolt restaurant/store slug, from /wolt/search's slug field", "in": "query", - "name": "q", + "name": "slug", + "required": true, "type": "string", - "x-example": "chair" - }, - { - "description": "Result page, 1-based, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Results per page, defaults to 100, max 1000", - "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 100 + "x-example": "mcdonalds-forum-katutaso" } ], "produces": [ @@ -557112,7 +641664,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wayfair.categoriesResponseDoc" + "$ref": "#/definitions/wolt.menuResponseDoc" } }, "400": { @@ -557121,8 +641673,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -557139,34 +641691,42 @@ "ApiKeyAuth": [] } ], - "summary": "List Wayfair categories", + "summary": "Get one Wolt restaurant or store's menu", "tags": [ - "Wayfair" + "Wolt" ] } }, - "/wayfair/category": { + "/wolt/restaurant/menu/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Wayfair category page's product grid, with real page-based pagination. category accepts a bare Wayfair category id (\"478390\"), a \"c\"-prefixed id (\"c478390\"), a category slug (\"office-chairs-c478390\"), or a full category URL copied from wayfair.com. Returns products with name, brand, pricing, and image.", - "operationId": "wayfair-category", + "description": "Searches one restaurant's or store's own items by keyword, using Wolt's own in-venue item search. This is the only way to reach the items of a large grocery or retail store: /wolt/restaurant/menu returns those venues' categories with no items, because Wolt itself only loads such an assortment a slice at a time. Matching works across languages, so an English keyword finds locally-named products. Each item carries a name, description, price, dietary tags, image, and -- for packaged retail products -- a barcode, pack size, and per-unit comparison price. A keyword is required; a no-match keyword returns an empty item list rather than an error.", + "operationId": "wolt-restaurant-menu-search", "parameters": [ { - "description": "Wayfair category id, slug, or URL", + "description": "Wolt restaurant/store slug, from /wolt/search's slug field", "in": "query", - "name": "category", + "name": "slug", "required": true, "type": "string", - "x-example": "office-chairs-c478390" + "x-example": "mcdonalds-forum-katutaso" }, { - "description": "Result page, 1-based, defaults to 1", + "description": "Keyword to match against this venue's own item names and descriptions", "in": "query", - "name": "page", + "name": "query", + "required": true, + "type": "string", + "x-example": "burger" + }, + { + "description": "Max items returned. Defaults to 30, maximum 100.", + "in": "query", + "name": "limit", "type": "integer", - "x-example": 1 + "x-example": 30 } ], "produces": [ @@ -557176,7 +641736,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wayfair.categoryResponseDoc" + "$ref": "#/definitions/wolt.menuSearchResponseDoc" } }, "400": { @@ -557191,12 +641751,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -557209,27 +641763,101 @@ "ApiKeyAuth": [] } ], - "summary": "Browse a Wayfair category", + "summary": "Search one Wolt restaurant or store's menu by keyword", "tags": [ - "Wayfair" + "Wolt" ] } }, - "/wayfair/product/{id}": { + "/wolt/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Wayfair product's full detail: name, brand, price, stock status, aggregate rating with a 1-5 star breakdown, images, every selectable variant option (e.g. color, finish), and site-selected feature highlights. id is the product's own \"W\"-prefixed id (e.g. W100794312), taken from a category result's product_id field or a product page's URL. An unrecognized id returns 404.", - "operationId": "wayfair-product", + "description": "Returns restaurants and stores near a coordinate, optionally filtered by a keyword or browsed by category. With none of those, this reads Wolt's own plain location browse; with a query it uses Wolt's own keyword search across restaurant/store names, dishes, and cuisines; with a category it browses Wolt's own per-category listing (the same page a homepage cuisine tile links to) -- call /wolt/search/filters for the current, complete, location-scoped list of valid category values. category and query cannot be combined. A keyword search additionally accepts sort, product_line, and open_now; those three apply to keyword search only and return a 400 without query. Each result carries its slug (the value the restaurant and menu endpoints take), name, address, coordinates, tags, price range, rating, and delivery estimate; the two browse modes additionally carry each venue's own category ids. The response also carries is_serviceable, which says whether Wolt delivers to the requested coordinates at all: false means the coordinates are outside Wolt's delivery coverage, so the empty results list is a coverage answer rather than a no-matches answer. A keyword that simply matches nothing inside a covered area returns an empty list with is_serviceable true. Call /wolt/cities for the coordinates of every city Wolt operates in.", + "operationId": "wolt-search", "parameters": [ { - "description": "Wayfair product id, starting with W", - "in": "path", - "name": "id", + "description": "Search center latitude", + "in": "query", + "name": "latitude", + "required": true, + "type": "number", + "x-example": 60.1699 + }, + { + "description": "Search center longitude", + "in": "query", + "name": "longitude", "required": true, + "type": "number", + "x-example": 24.9384 + }, + { + "description": "Optional keyword to search restaurant/store names, dishes, or cuisines by. Cannot be combined with category.", + "in": "query", + "name": "query", "type": "string", - "x-example": "W100794312" + "x-example": "pizza" + }, + { + "description": "Optional Wolt category id to browse by instead of a keyword search, e.g. pizza, sushi, vegan. Call /wolt/search/filters for the current, complete, location-scoped list of valid values. Cannot be combined with query. A value Wolt does not recognize at all returns a 404; a real category this particular market does not use returns an empty list, since the taxonomy is location-scoped and markets differ.", + "in": "query", + "name": "category", + "type": "string", + "x-example": "pizza" + }, + { + "description": "Max restaurants/stores returned. Defaults to 30, maximum 100.", + "in": "query", + "name": "limit", + "type": "integer", + "x-example": 30 + }, + { + "description": "Optional result ordering. Only applies together with query -- Wolt exposes sorting on its keyword search only, not on its plain browse or category listings.", + "enum": [ + "recommended", + "distance", + "rating", + "delivery_fee", + "delivery_estimate" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "rating" + }, + { + "description": "Optional store-type filter. Only applies together with query. Which store types a market actually stocks varies by country; one absent from the searched market returns no results rather than an error.", + "enum": [ + "restaurant", + "grocery", + "alcohol", + "pharmacy", + "pet_supply", + "health_and_beauty", + "electronics", + "toys_games_and_kids", + "home_and_diy", + "florist", + "general_merchandise", + "gift_card", + "charity", + "subscription", + "other" + ], + "in": "query", + "name": "product_line", + "type": "string", + "x-example": "restaurant" + }, + { + "description": "When true, restrict results to venues currently delivering. Only applies together with query.", + "in": "query", + "name": "open_now", + "type": "boolean", + "x-example": true } ], "produces": [ @@ -557239,7 +641867,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wayfair.productDetailResponseDoc" + "$ref": "#/definitions/wolt.searchResponseDoc" } }, "400": { @@ -557254,12 +641882,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -557272,24 +641894,35 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Wayfair product's full detail", + "summary": "Search Wolt restaurants and stores near a coordinate", "tags": [ - "Wayfair" + "Wolt" ] } }, - "/wccftech/article": { + "/wolt/search/filters": { "get": { - "description": "Returns one Wccftech article by its canonical `url` on `wccftech.com` or `www.wccftech.com`, covering news, reviews, how-tos, roundups and best-of pages. The response has the title, description, authors, section, times, lead image and body `paragraphs` where the site serves them, plus a `paywalled` flag.", - "operationId": "wccftech-article", + "consumes": [ + "application/json" + ], + "description": "Returns the current, location-scoped catalog of every value /wolt/search's category parameter accepts, each with a live restaurant count when Wolt's own homepage currently features that category as one of its curated tiles -- the same data Wolt's own search page's cuisine tiles are populated from.", + "operationId": "wolt-search-filters", "parameters": [ { - "description": "Canonical Wccftech article URL", + "description": "Search center latitude", "in": "query", - "name": "url", + "name": "latitude", "required": true, - "type": "string", - "x-example": "https://wccftech.com/gigabyte-intros-three-ddr4-motherboards-for-amd-and-intel-processors-in-japan/" + "type": "number", + "x-example": 60.1699 + }, + { + "description": "Search center longitude", + "in": "query", + "name": "longitude", + "required": true, + "type": "number", + "x-example": 24.9384 } ], "produces": [ @@ -557299,7 +641932,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/wolt.filtersResponseDoc" } }, "400": { @@ -557308,12 +641941,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -557326,30 +641953,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Wccftech article", + "summary": "Get Wolt's live search category catalog for a location", "tags": [ - "Wccftech" + "Wolt" ] } }, - "/wccftech/author": { + "/wsj/article": { "get": { - "description": "Returns a Wccftech author profile with name, role, bio, photo and recent article cards (title, URL, summary, image, publication time). Identify the author with `slug` (such as `sarfraz`) or a canonical `/author//` `url`; one of the two is required.", - "operationId": "wccftech-author", + "description": "Returns one Wall Street Journal article's title, byline, publication time, word count, and body paragraphs, recovered from a public web-archive snapshot of the article. WSJ serves only the first paragraphs of premium articles at the origin, so an article is returned only when a full-text archive snapshot exists; an article without one returns 404.", + "operationId": "wsj-article", "parameters": [ { - "description": "Wccftech author slug, e.g. sarfraz", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "sarfraz" - }, - { - "description": "Canonical Wccftech author page URL", + "description": "Canonical WSJ article URL", "in": "query", "name": "url", + "required": true, "type": "string", - "x-example": "https://wccftech.com/author/sarfraz/" + "x-example": "https://www.wsj.com/articles/cpi-inflation-report-july-2026-6381275d" } ], "produces": [ @@ -557359,7 +641980,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.wccftechAuthorResponseDoc" + "$ref": "#/definitions/wsj.articleResponseDoc" } }, "400": { @@ -557368,12 +641989,24 @@ "$ref": "#/definitions/app.Response" } }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -557386,24 +642019,30 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Wccftech author profile", + "summary": "Get a Wall Street Journal article's content", "tags": [ - "Wccftech" + "Wall Street Journal" ] } }, - "/wccftech/headlines": { + "/wsj/author": { "get": { - "description": "Returns current articles from one Wccftech topic, category, or editorial archive. Pass a slug from wccftech-sections, such as topic:hardware, category:news, or archive:videos.", - "operationId": "wccftech-headlines", + "description": "Returns one Wall Street Journal author's profile (name, job title, bio, and social links when available) and the recent articles listed on their author page, read directly from the live page. The author page sits behind the same access wall as article pages, so a nonexistent author slug returns 404.", + "operationId": "wsj-author", "parameters": [ { - "description": "Wccftech section slug returned by /wccftech/sections", + "description": "WSJ author slug", "in": "query", - "name": "section", - "required": true, + "name": "slug", "type": "string", - "x-example": "topic:hardware" + "x-example": "matt-grossman" + }, + { + "description": "Canonical https://www.wsj.com/news/author/ URL, as an alternative to slug", + "in": "query", + "name": "url", + "type": "string", + "x-example": "https://www.wsj.com/news/author/matt-grossman" } ], "produces": [ @@ -557413,7 +642052,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/wsj.authorResponseDoc" } }, "400": { @@ -557422,6 +642061,24 @@ "$ref": "#/definitions/app.Response" } }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -557434,16 +642091,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get Wccftech section headlines", + "summary": "Get a Wall Street Journal author's profile and recent articles", "tags": [ - "Wccftech" + "Wall Street Journal" ] } }, - "/wccftech/news": { + "/wta/countries": { "get": { - "description": "Returns current top stories from Wccftech's public RSS feed, including title, canonical URL, summary, byline, publication time, and image when available.", - "operationId": "wccftech-news", + "description": "Returns the source codes and labels used by player rankings. ALL omits the nationality filter. Team race rankings do not have a country selector.", + "operationId": "wta-countries", "produces": [ "application/json" ], @@ -557451,13 +642108,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/wta.CountriesResponseDoc" } }, "503": { @@ -557472,16 +642123,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get current Wccftech news", + "summary": "Discover WTA ranking country and region codes", "tags": [ - "Wccftech" + "WTA" ] } }, - "/wccftech/sections": { + "/wta/match-states": { "get": { - "description": "Lists all non-empty public category and topic sections, plus the Reviews, Videos, How To, and Roundups archives. Use a returned slug with wccftech-headlines.", - "operationId": "wccftech-sections", + "description": "Lists the accepted native state query values and labels. Query states U,L,C differ from raw response MatchState values; response values are retained unchanged.", + "operationId": "wta-match-states", "produces": [ "application/json" ], @@ -557489,13 +642140,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/wta.MatchStatesResponseDoc" } } }, @@ -557504,16 +642149,88 @@ "ApiKeyAuth": [] } ], - "summary": "Discover Wccftech sections", + "summary": "Discover WTA match-feed state selectors", "tags": [ - "Wccftech" + "WTA" ] } }, - "/web/capabilities": { + "/wta/rankings/{view}": { "get": { - "description": "Returns the account's effective web retrieval limits and options: `available_operations`, `crawl_available`, `research_available`, `search_max_results`, `map_max_urls`, `crawl_max_pages`, `max_active_jobs`, and the accepted `render_modes`, `sitemap_modes` and `query_policies`. The operations list is empty while retrieval setup is incomplete.", - "operationId": "web-capabilities", + "description": "Returns native ranks, points, tournament counts, movement and player identity. Player views preserve the actual published rankedAt value. Team rows retain both players and do not fabricate a ranking date.", + "operationId": "wta-rankings", + "parameters": [ + { + "description": "Native ranking view", + "enum": [ + "singles", + "doubles", + "race-singles", + "race-doubles" + ], + "in": "path", + "name": "view", + "required": true, + "type": "string" + }, + { + "description": "WTA code from country discovery; player views only; ALL omits nationality", + "in": "query", + "name": "country", + "type": "string" + }, + { + "description": "Requested date YYYY-MM-DD; player views only; omission uses latest publication", + "in": "query", + "name": "at", + "type": "string" + }, + { + "description": "Native sort key; supported values depend on view", + "enum": [ + "rankSingles", + "rankDoubles", + "RankChampSingles", + "LastName", + "BirthDate", + "TournCountSingles", + "TournCountDoubles", + "TournCountChamps", + "PointsSingles", + "PointsDoubles", + "PointsChamps", + "rank", + "points" + ], + "in": "query", + "name": "type", + "type": "string" + }, + { + "description": "Sort direction; defaults to asc for players or desc for teams", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "default": 0, + "description": "Zero-based native page", + "in": "query", + "name": "page", + "type": "integer" + }, + { + "default": 50, + "description": "API page size, 1 to 50", + "in": "query", + "name": "page_size", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -557521,19 +642238,7 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/retrievalplatform.CapabilitiesResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/wta.RankingsResponseDoc" } }, "400": { @@ -557542,8 +642247,14 @@ "$ref": "#/definitions/app.Response" } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -557554,88 +642265,145 @@ "ApiKeyAuth": [] } ], - "summary": "Get web retrieval capabilities and limits", + "summary": "Get WTA player or team rankings", "tags": [ - "Retrieval" + "WTA" ] } }, - "/web/crawl": { - "post": { - "consumes": [ - "application/json" - ], - "description": "Accepts an owner-scoped durable crawl job. `max_credits` is required; the accepted request and active reader/source revisions are frozen for idempotent replay. A repeated matching idempotency key returns the original job without preparing another reservation.", - "operationId": "web-crawl", - "parameters": [ - { - "description": "Bounded crawl request", - "in": "body", - "name": "request", - "required": true, - "schema": { - "$ref": "#/definitions/crawlretrieval.crawlRequestDoc" - } - } - ], + "/wta/tournament-seasons": { + "get": { + "description": "Returns every season currently offered by the tournament calendar, preserving source order. Historical calendar availability does not imply ranking-date availability.", + "operationId": "wta-tournament-seasons", "produces": [ "application/json" ], "responses": { - "202": { - "description": "Durable crawl job accepted", - "headers": { - "Location": { - "description": "Configured public status URL", - "type": "string" - }, - "Retry-After": { - "description": "Suggested poll interval in seconds", - "type": "integer" - } - }, + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/crawlretrieval.crawlSubmissionEnvelope" + "$ref": "#/definitions/wta.TournamentSeasonsResponseDoc" } }, - "400": { - "description": "Invalid request or idempotency conflict", + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Discover WTA tournament calendar seasons", + "tags": [ + "WTA" + ] + } + }, + "/wta/tournaments": { + "get": { + "description": "Returns one native page of up to100 events for a discovered calendar season, including lower tiers when no level is supplied. Level and surface filter the upstream resource. Event levels can differ from tournament-group defaults. Raw pageInfo is preserved even when numPages is zero with additional entries. Winners, player biographies and match details are outside this metadata response.", + "operationId": "wta-tournaments", + "parameters": [ + { + "description": "Season from discovery; mutually exclusive with from/to", + "in": "query", + "name": "season", + "type": "integer" }, - "401": { - "description": "Authentication required", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Inclusive YYYY-MM-DD start, required with to when season omitted", + "in": "query", + "name": "from", + "type": "string" }, - "402": { - "description": "Insufficient credits or daily budget", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Inclusive YYYY-MM-DD end, required with from when season omitted", + "in": "query", + "name": "to", + "type": "string" }, - "404": { - "description": "Resource not found", + { + "default": 100, + "description": "Positive native page size, default100; source caps at100", + "in": "query", + "name": "page_size", + "type": "integer" + }, + { + "collectionFormat": "csv", + "description": "Native season-specific levels, comma-separated OR", + "in": "query", + "items": { + "enum": [ + "WTA 500", + "WTA 250", + "Grand Slam", + "WTA 1000", + "Finals", + "International", + "Premier", + "Premier 5", + "Premier Mandatory", + "ITF", + "WTA 125" + ], + "type": "string" + }, + "name": "level", + "type": "array" + }, + { + "collectionFormat": "csv", + "description": "Native court surfaces, comma-separated OR", + "in": "query", + "items": { + "enum": [ + "Hard", + "Clay", + "Grass", + "Carpet" + ], + "type": "string" + }, + "name": "surface", + "type": "array" + }, + { + "default": 0, + "description": "Zero-based native page", + "in": "query", + "name": "page", + "type": "integer" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/wta.TournamentsResponseDoc" } }, - "429": { - "description": "Rate or active job quota exceeded", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal configuration or storage error", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Required backend or source profile unavailable", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -557646,25 +642414,30 @@ "ApiKeyAuth": [] } ], - "summary": "Submit a bounded resumable web crawl", + "summary": "Get WTA tournament calendar events", "tags": [ - "Retrieval" + "WTA" ] } }, - "/web/crawl/{job_id}": { + "/wta/tournaments/{group_id}/{year}": { "get": { - "description": "Returns status for a crawl job owned by the authenticated principal. This control call does not reserve or settle credits.", - "operationId": "web-crawl-status", + "description": "Returns the tournament's native season metadata, live scoring identifier and published singles/doubles champions. Group and season-specific levels remain separate. Use the tournament calendar and season discovery for IDs and years.", + "operationId": "wta-tournament", "parameters": [ { - "description": "Owned crawl job ID", + "description": "Native tournament group ID from the calendar", "in": "path", - "maxLength": 128, - "name": "job_id", + "name": "group_id", "required": true, - "type": "string", - "x-example": "job-123" + "type": "integer" + }, + { + "description": "Native season from tournament season discovery", + "in": "path", + "name": "year", + "required": true, + "type": "integer" } ], "produces": [ @@ -557672,39 +642445,27 @@ ], "responses": { "200": { - "description": "Crawl job status", + "description": "OK", "schema": { - "$ref": "#/definitions/crawlretrieval.crawlStatusEnvelope" + "$ref": "#/definitions/wta.TournamentResourceResponseDoc" } }, "400": { - "description": "Invalid job ID", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "401": { - "description": "Authentication required", + "description": "Bad Request", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/wta.TournamentResourceResponseDoc" } }, "404": { - "description": "Unknown, unowned, or non-crawl job", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal accounting or storage error", + "description": "Not Found", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/wta.TournamentResourceResponseDoc" } }, "503": { - "description": "Required backend unavailable", + "description": "Service Unavailable", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/wta.TournamentResourceResponseDoc" } } }, @@ -557713,25 +642474,30 @@ "ApiKeyAuth": [] } ], - "summary": "Read crawl job status and cumulative accounting", + "summary": "Read a WTA tournament season", "tags": [ - "Retrieval" + "WTA" ] } }, - "/web/crawl/{job_id}/cancel": { - "post": { - "description": "Requests cancellation of an owned crawl job. This control call does not reserve, charge, or settle credits; retained successful work is reconciled by the job settlement worker.", - "operationId": "web-crawl-cancel", + "/wta/tournaments/{group_id}/{year}/draws": { + "get": { + "description": "Returns all event draws published in the native tournament resource, including available singles, doubles and qualifying draws. Decodes the native nested JSON into objects while preserving field case, cardinality, scores, seeds, byes, groups and source round data. Native null draw data remains null. UI tab/round choices do not add server filters or computed bracket advancement.", + "operationId": "wta-tournament-draws", "parameters": [ { - "description": "Owned crawl job ID", + "description": "Native tournament group ID from the calendar", "in": "path", - "maxLength": 128, - "name": "job_id", + "name": "group_id", "required": true, - "type": "string", - "x-example": "job-123" + "type": "integer" + }, + { + "description": "Native season from tournament season discovery", + "in": "path", + "name": "year", + "required": true, + "type": "integer" } ], "produces": [ @@ -557739,45 +642505,27 @@ ], "responses": { "200": { - "description": "Current crawl status", + "description": "OK", "schema": { - "$ref": "#/definitions/crawlretrieval.crawlStatusEnvelope" + "$ref": "#/definitions/wta.TournamentResourceResponseDoc" } }, "400": { - "description": "Invalid job ID or query parameter", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "401": { - "description": "Authentication required", + "description": "Bad Request", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/wta.TournamentResourceResponseDoc" } }, "404": { - "description": "Unknown, unowned, or non-crawl job", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "410": { - "description": "Expired retained crawl data", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal accounting or storage error", + "description": "Not Found", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/wta.TournamentResourceResponseDoc" } }, "503": { - "description": "Required backend unavailable", + "description": "Service Unavailable", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/wta.TournamentResourceResponseDoc" } } }, @@ -557786,41 +642534,36 @@ "ApiKeyAuth": [] } ], - "summary": "Request cooperative crawl cancellation", + "summary": "Read a WTA tournament draw resource", "tags": [ - "Retrieval" + "WTA" ] } }, - "/web/crawl/{job_id}/results": { + "/wta/tournaments/{group_id}/{year}/matches": { "get": { - "description": "Reads committed outcomes in stable publication order. While running, `has_more=false` only means the job is currently drained; poll again with `next_cursor` to observe later outcomes. Each response is bounded to 1 MiB.", - "operationId": "web-crawl-results", + "description": "Returns all rows in the published native response with professional match, score, timing and participant fields. Optional states is a unique CSV of U,L,C from match-state discovery. No local date/type filtering, sorting, bracket updates or incremental cursor is added. Raw MatchState codes and padded EventID/MatchID strings are preserved.", + "operationId": "wta-tournament-matches", "parameters": [ { - "description": "Owned crawl job ID", + "description": "Native tournament group ID from the calendar", "in": "path", - "maxLength": 128, - "name": "job_id", + "name": "group_id", "required": true, - "type": "string", - "x-example": "job-123" + "type": "integer" }, { - "description": "Opaque owner-bound cursor", - "in": "query", - "maxLength": 2048, - "name": "cursor", - "type": "string" + "description": "Native season from tournament season discovery", + "in": "path", + "name": "year", + "required": true, + "type": "integer" }, { - "default": 50, - "description": "Outcomes per page", + "description": "Unique comma-separated native query states U,L,C; omit for the source default", "in": "query", - "maximum": 100, - "minimum": 1, - "name": "limit", - "type": "integer" + "name": "states", + "type": "string" } ], "produces": [ @@ -557828,45 +642571,27 @@ ], "responses": { "200": { - "description": "Committed crawl outcomes", + "description": "OK", "schema": { - "$ref": "#/definitions/crawlretrieval.crawlResultsEnvelope" + "$ref": "#/definitions/wta.TournamentResourceResponseDoc" } }, "400": { - "description": "Invalid job ID, cursor, limit, or query parameter", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "401": { - "description": "Authentication required", + "description": "Bad Request", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/wta.TournamentResourceResponseDoc" } }, "404": { - "description": "Unknown, unowned, or non-crawl job", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "410": { - "description": "Expired cursor or retained result", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal storage error", + "description": "Not Found", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/wta.TournamentResourceResponseDoc" } }, "503": { - "description": "Required backend unavailable", + "description": "Service Unavailable", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/wta.TournamentResourceResponseDoc" } } }, @@ -557875,28 +642600,30 @@ "ApiKeyAuth": [] } ], - "summary": "Read committed crawl outcomes", + "summary": "Read a WTA tournament match-feed snapshot", "tags": [ - "Retrieval" + "WTA" ] } }, - "/web/map": { - "post": { - "consumes": [ - "application/json" - ], - "description": "Maps a public site into a bounded, approximate URL list from its sitemaps and the seed page's links. The first request needs `url`; options are `scope`, `sitemap` (`include`, `only`, `skip`), `max_urls` (1 to 5000, default 1000) and `page_size` (1 to 500, default 100). Continue with `cursor`, optionally with `page_size`; the first page's snapshot lasts 30 minutes.", - "operationId": "web-map", + "/wta/tournaments/{group_id}/{year}/order-of-play": { + "get": { + "description": "Decodes the whole native order-of-play resource into structured objects, preserving source days, courts, match order, participant structures, display/ISO dates and court UTC offsets. Native null schedules remain null. Personnel and unreviewed fields are excluded. No generated calendar, latest-day calculation or timezone conversion is performed.", + "operationId": "wta-tournament-order-of-play", "parameters": [ { - "description": "Map request", - "in": "body", - "name": "request", + "description": "Native tournament group ID from the calendar", + "in": "path", + "name": "group_id", "required": true, - "schema": { - "$ref": "#/definitions/retrievalplatform.MapRequest" - } + "type": "integer" + }, + { + "description": "Native season from tournament season discovery", + "in": "path", + "name": "year", + "required": true, + "type": "integer" } ], "produces": [ @@ -557906,61 +642633,25 @@ "200": { "description": "OK", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/retrievalplatform.MapResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/wta.TournamentResourceResponseDoc" } }, "400": { "description": "Bad Request", "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "402": { - "description": "Payment Required", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "410": { - "description": "Gone", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/wta.TournamentResourceResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/wta.TournamentResourceResponseDoc" } }, "503": { "description": "Service Unavailable", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/wta.TournamentResourceResponseDoc" } } }, @@ -557969,28 +642660,30 @@ "ApiKeyAuth": [] } ], - "summary": "Map a public site", + "summary": "Read a WTA tournament order of play", "tags": [ - "Retrieval" + "WTA" ] } }, - "/web/scrape": { - "post": { - "consumes": [ - "application/json" - ], - "description": "Fetches a single public URL and returns clean content in the requested formats (markdown, html, raw_html, links, metadata). The request body IS the ScrapeOption object itself — e.g. {\"url\": \"https://example.com\"} — do not wrap it in an extra key. With render=auto the request starts as a fast HTTP fetch and escalates to a real browser when the page is blocked or rendered with JavaScript. only_main_content (default true) strips navigation, headers, footers and other boilerplate before conversion. Only public pages are supported; respect each site's terms of use and robots directives. A handful of popular sites (Amazon, Reddit, Yelp, LinkedIn, and others) already have a dedicated, more reliable endpoint elsewhere in this API — a failed scrape against one of them names it. A Reddit URL that maps onto a dedicated Reddit endpoint (listings, search, comment threads, user and domain pages) is answered by that endpoint instead, and its response is returned as-is in data with an X-Routed-To header; send dedicated=false to always get the scraped page.", - "operationId": "web-scrape", + "/wta/tournaments/{group_id}/{year}/players": { + "get": { + "description": "Returns every published event and entry in source order, preserving singles, doubles teams, qualifying entries, string seeds and native status flags. Only professional participant IDs/names/country codes are retained. The native tournament context is validated before accepting this context-less roster resource. No draw reconciliation, active-player filtering or inferred winner status is added.", + "operationId": "wta-tournament-players", "parameters": [ { - "description": "Scrape options", - "in": "body", - "name": "scrapeOption", + "description": "Native tournament group ID from the calendar", + "in": "path", + "name": "group_id", "required": true, - "schema": { - "$ref": "#/definitions/web.ScrapeOption" - } + "type": "integer" + }, + { + "description": "Native season from tournament season discovery", + "in": "path", + "name": "year", + "required": true, + "type": "integer" } ], "produces": [ @@ -558000,37 +642693,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/web.scrapeResponseDoc" + "$ref": "#/definitions/wta.TournamentResourceResponseDoc" } }, "400": { - "description": "Invalid input", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "402": { - "description": "Out of credits, or the plan's daily credit limit is used up. The body reports which limit was hit, when it resets, and how to raise it; retry_after_seconds matches the Retry-After header. Returned the same way by every credit-billed endpoint.", - "schema": { - "$ref": "#/definitions/web.billingRejectionResponseDoc" - } - }, - "429": { - "description": "Request rate exceeded for the plan. The body reports the plan's per-minute rate and how long to wait; retry_after_seconds matches the Retry-After header. Returned the same way by every credit-billed endpoint.", + "description": "Bad Request", "schema": { - "$ref": "#/definitions/web.billingRejectionResponseDoc" + "$ref": "#/definitions/wta.TournamentResourceResponseDoc" } }, - "500": { - "description": "Internal server error", + "404": { + "description": "Not Found", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/wta.TournamentResourceResponseDoc" } }, "503": { - "description": "All fetch tiers were blocked or failed for the target URL", + "description": "Service Unavailable", "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/wta.TournamentResourceResponseDoc" } } }, @@ -558039,28 +642720,33 @@ "ApiKeyAuth": [] } ], - "summary": "Scrape a URL into markdown, HTML, links or metadata", + "summary": "Read a WTA tournament's published entry list", "tags": [ - "Web" + "WTA" ] } }, - "/web/search": { - "post": { + "/x/post/{id}": { + "get": { "consumes": [ "application/json" ], - "description": "Search Brave's public web results. limit (1-50, default 10) is honoured by reading up to 3 result pages; each successful result page read costs 3 credits, and optional page reads (5 credits each) remain scoped to each result host. country and language select the result locale (defaults us and en-us).", - "operationId": "web-search", + "description": "Returns a public X post by numeric post id, including author, text, visible metrics, and a quoted post preview when present.", + "operationId": "x-post", "parameters": [ { - "description": "Search request", - "in": "body", - "name": "request", + "description": "X post id", + "in": "path", + "name": "id", "required": true, - "schema": { - "$ref": "#/definitions/retrievalplatform.WebSearchRequest" - } + "type": "string", + "x-example": "2071148560779976947" + }, + { + "description": "Expected author username. When provided, mismatched authors return 404.", + "in": "query", + "name": "username", + "type": "string" } ], "produces": [ @@ -558068,55 +642754,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped post payload", "schema": { - "allOf": [ - { - "$ref": "#/definitions/app.Response" - }, - { - "properties": { - "data": { - "$ref": "#/definitions/retrievalplatform.WebSearchResponse" - } - }, - "type": "object" - } - ] + "$ref": "#/definitions/x.postResponseDoc" } }, "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "402": { - "description": "Payment Required", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Post not found", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or parser drift", "schema": { "$ref": "#/definitions/app.Response" } @@ -558127,28 +642783,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search the public web", + "summary": "Retrieve an X post", "tags": [ - "Retrieval" + "X" ] } }, - "/web/techstack": { - "post": { + "/x/profile/{username}": { + "get": { "consumes": [ "application/json" ], - "description": "Fetches a public URL and fingerprints the web technologies it is built with — a BuiltWith / Wappalyzer-style detector. Returns a list of detected `technologies`, each with its `categories`, a `confidence` (`high`, `medium`, `low`), an optional `version`, and the `evidence` that matched. Covers JavaScript frameworks and libraries (React, Vue.js, Angular, Svelte, jQuery), web frameworks / static site generators (Next.js, Nuxt.js, Gatsby, Remix, SvelteKit, Astro, Hugo), CMS and website builders (WordPress, Drupal, Joomla, Ghost, Wix, Squarespace, Webflow), e-commerce (Shopify, WooCommerce, Magento, BigCommerce), analytics, ad pixels, and tag managers (Google Analytics, Google Tag Manager, Meta Pixel, LinkedIn, Bing, TikTok/Pinterest/Reddit pixels, Segment, Hotjar, Microsoft Clarity), CDNs, UI frameworks and fonts, payments (Stripe, PayPal, Klarna), live chat, marketing automation, A/B testing, consent management, CAPTCHAs (reCAPTCHA, hCaptcha, Turnstile), video, and search. It also inspects response headers to identify the web server (nginx, Apache, IIS), the CDN / hosting provider (Cloudflare, CloudFront, Fastly, Vercel, Netlify), and the server-side language / framework (PHP, ASP.NET, Ruby on Rails, Django, Laravel, Express). Results are directional, not exhaustive. The `render` fetch strategy is one of `browser` (headless browser that executes JavaScript — the default, so client-injected scripts like analytics, tag managers and pixels are detected), `auto` (HTTP, escalating to a real browser only when blocked or JS-rendered), or `http` (HTTP only, no JavaScript — fastest, but sees only the server HTML); defaults to `browser`. Only public pages are supported; respect each site's terms of use and robots directives. Also returns `unmatched_evidence` (when present) — third-party script/stylesheet host domains and a `` value the detector saw on the page but doesn't yet have a named signature for; useful for spotting a vendor worth requesting coverage for. `is_infrastructure` flags a URL whose host looks like backend CDN/DNS/cloud-vendor infrastructure rather than a real, human-navigable website. `reachable` is false only when the target could not be fetched at all (even after an automatic www./plain-HTTP retry) — `technologies` may still be partially populated from DNS-based signals alone in that case, and `failure_reason` explains what happened.", - "operationId": "web-techstack", + "description": "Returns the public profile of an X account by `username`, with or without a leading `@`: name, description, location, avatar and banner images, creation date, verification flags, and `metrics` for followers, following, posts, likes, listed and media. `verified_type` and `affiliate_label` appear only when the account has them. Returns 404 when the profile is not public.", + "operationId": "x-profile", "parameters": [ { - "description": "Target URL (and optional render strategy)", - "in": "body", - "name": "request", + "description": "X username", + "in": "path", + "name": "username", "required": true, - "schema": { - "$ref": "#/definitions/web.TechStackOption" - } + "type": "string", + "x-example": "Ansel_Flipradio" } ], "produces": [ @@ -558156,31 +642811,25 @@ ], "responses": { "200": { - "description": "OK", + "description": "Wrapped profile payload", "schema": { - "$ref": "#/definitions/web.techStackResponseDoc" + "$ref": "#/definitions/x.profileResponseDoc" } }, "400": { - "description": "Invalid or missing URL / render value", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal server error", + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, - "502": { - "description": "Upstream fetch failed", + "404": { + "description": "Profile not found", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Target blocked the fetch or could not be retrieved", + "description": "Upstream error or parser drift", "schema": { "$ref": "#/definitions/app.Response" } @@ -558191,43 +642840,59 @@ "ApiKeyAuth": [] } ], - "summary": "Tech stack — detect what a website is built with", + "summary": "Retrieve an X profile", "tags": [ - "Web" + "X" ] } }, - "/wendys/categories": { + "/x/profile/{username}/posts": { "get": { "consumes": [ "application/json" ], - "description": "Returns every category on Wendy's national (restaurant-agnostic) menu, grouped by which of Wendy's own top-level day-parts (Lunch/Dinner, Breakfast) it appears under -- a few categories such as Coffee and Beverages appear under both. No restaurant selection is required; this is the same catalog a signed-out visitor sees before ever picking a location. Each category's slug is what GET /wendys/menu takes.", - "operationId": "wendys-categories", + "description": "Returns posts present in the first public profile page payload for an X username. The endpoint does not paginate replies, media-only tabs, or search results.", + "operationId": "x-profile-posts", + "parameters": [ + { + "description": "X username", + "in": "path", + "name": "username", + "required": true, + "type": "string", + "x-example": "Ansel_Flipradio" + }, + { + "description": "Maximum posts returned from the first page payload. Defaults to 20 and must be 1-50.", + "in": "query", + "name": "limit", + "type": "integer" + } + ], "produces": [ "application/json" ], "responses": { "200": { - "description": "OK", + "description": "Wrapped profile posts payload", "schema": { - "$ref": "#/definitions/wendys.categoriesResponseDoc" + "$ref": "#/definitions/x.profilePostsResponseDoc" } }, "400": { - "description": "Bad Request", + "description": "Missing or invalid parameters", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Profile not found", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Service Unavailable", + "description": "Upstream error or parser drift", "schema": { "$ref": "#/definitions/app.Response" } @@ -558238,26 +642903,297 @@ "ApiKeyAuth": [] } ], - "summary": "List Wendy's national menu categories", + "summary": "List public X profile posts", "tags": [ - "Wendys" + "X" ] } }, - "/wendys/directory": { + "/xbox/browse": { "get": { "consumes": [ "application/json" ], - "description": "Returns one level of Wendy's store directory tree. Omit path for the root, which lists Canada and the United States; pass a child's path to descend (country to states, state to cities, city to stores -- a single-store city links directly to its store page one level early). Each child carries its name, path, URL and, at the country/state/city levels, how many stores sit under that branch. A child with is_store true is a store page rather than another directory level -- pass its path to GET /wendys/store.", - "operationId": "wendys-directory", + "description": "Returns one page of the full Xbox storefront catalog (games, add-ons, and subscriptions), optionally sorted and/or filtered. With no sort/filter parameters, returns the store's own default (relevance) order. Multiple values for a repeatable filter (genre, price, platform, subscription, age_rating, multiplayer, technical_features, handheld_compatibility) match ANY of them (logical OR); different filter fields combine as logical AND. Cursor-paginated, fixed at 25 items per page.", + "operationId": "xbox-browse", "parameters": [ { - "description": "Directory path from a previous response's children[].path, e.g. united-states/oh. Omit for the root country index.", + "description": "Opaque pagination cursor from a previous response's next_cursor", "in": "query", - "name": "path", - "type": "string", - "x-example": "united-states/oh" + "name": "cursor", + "type": "string" + }, + { + "default": "relevance", + "description": "Sort order", + "enum": [ + "relevance", + "release_date_desc", + "most_popular", + "price_asc", + "price_desc", + "most_wishlisted", + "discount_desc", + "title_asc", + "title_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "collectionFormat": "multi", + "description": "Genre filter (repeatable)", + "in": "query", + "items": { + "enum": [ + "Action & adventure", + "Card & board", + "Casino", + "Classics", + "Companion", + "Educational", + "Family & kids", + "Fighting", + "Multi-Player Online Battle Arena", + "Music", + "Other", + "Platformer", + "Puzzle & trivia", + "Racing & flying", + "Role playing", + "Shooter", + "Simulation", + "Sports", + "Strategy", + "Tools", + "Word" + ], + "type": "string" + }, + "name": "genre", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Price-band filter (repeatable)", + "in": "query", + "items": { + "enum": [ + "OnSale", + "0", + "0.01To5", + "5To10", + "10To20", + "20To40", + "40To60", + "60To" + ], + "type": "string" + }, + "name": "price", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Platform filter (repeatable)", + "in": "query", + "items": { + "enum": [ + "XboxSeriesX|S", + "XboxOne", + "PC", + "Handheld", + "CloudGaming", + "XboxPlayAnywhere" + ], + "type": "string" + }, + "name": "platform", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Subscription filter, by the subscription's own product id (repeatable)", + "in": "query", + "items": { + "enum": [ + "CFQ7TTC0KHS0", + "CFQ7TTC0P85B", + "CFQ7TTC0K5DJ", + "CFQ7TTC0K6L8", + "CFQ7TTC0KGQ8", + "CFQ7TTC0K5DH", + "CFQ7TTC0QH5H" + ], + "type": "string" + }, + "name": "subscription", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "ESRB age-rating filter (repeatable)", + "in": "query", + "items": { + "enum": [ + "ESRB:EC", + "ESRB:E", + "ESRB:E10", + "ESRB:T", + "ESRB:M", + "ESRB:AO", + "ESRB:RPEveryone", + "ESRB:RPMature", + "ESRB:RPTeen", + "ESRB:UR" + ], + "type": "string" + }, + "name": "age_rating", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Multiplayer-mode filter (repeatable)", + "in": "query", + "items": { + "enum": [ + "CrossPlatformMultiplayer", + "CrossPlatformCoop", + "SinglePlayer", + "OnlineMultiplayerWithGold", + "CoopSupportOnline", + "CoopSupportLocal", + "LocalMultiplayer" + ], + "type": "string" + }, + "name": "multiplayer", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Technical-feature filter (repeatable)", + "in": "query", + "items": { + "enum": [ + "CapabilityXboxEnhanced", + "ConsoleGen9Optimized", + "ConsoleCrossGen", + "Capability4k", + "CapabilityHDR", + "60fps", + "120fps", + "RayTracing" + ], + "type": "string" + }, + "name": "technical_features", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Handheld compatibility filter (repeatable)", + "in": "query", + "items": { + "enum": [ + "VERIFIED", + "PLAYABLE", + "UNSUPPORTED", + "UNKNOWN" + ], + "type": "string" + }, + "name": "handheld_compatibility", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Supported-language filter, by BCP-47 tag (repeatable)", + "in": "query", + "items": { + "enum": [ + "ar-SA", + "zh-CN", + "zh-TW", + "cs-CZ", + "da-DK", + "nl-NL", + "en-GB", + "en-US", + "fi-FI", + "fr-FR", + "de-DE", + "el-GR", + "he-IL", + "hu-HU", + "it-IT", + "ja-JP", + "ko-KR", + "nb-NO", + "pl-PL", + "pt-BR", + "pt-PT", + "ru-RU", + "sk-SK", + "es-MX", + "es-ES", + "sv-SE", + "tr-TR" + ], + "type": "string" + }, + "name": "supported_language", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Accessibility-feature filter (repeatable)", + "in": "query", + "items": { + "enum": [ + "AccessibilityOnLaunch", + "AdjustableDifficulty", + "OnDemandTutorials", + "Pausable", + "ProgressSavingOptions", + "MonoSound", + "CustomVolumeControls", + "NarratedGameMenus", + "StereoSound", + "SpatialAudio", + "SteadyCamera", + "ContrastOptions", + "ColorOptions", + "SubtitleOptions", + "AdjustableTextSize", + "AdjustableInputSensitivity", + "BasicInputRemapping", + "TtsSttCommunications", + "InputRemapping", + "PlayableWithButtonsOnly", + "FullKeyboardSupport", + "PlayableWithMouseOnly", + "PlayableWithTouchOnly", + "NoButtonHolds", + "PlayableWithoutMotionControls", + "NoQuickTimeEvents", + "PlayableWithoutTouchControls", + "SingleStickGameplay", + "StickInversion" + ], + "type": "string" + }, + "name": "accessibility", + "type": "array" + }, + { + "default": "en-US", + "description": "Display locale (BCP-47)", + "in": "query", + "name": "locale", + "type": "string" } ], "produces": [ @@ -558267,7 +643203,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wendys.directoryResponseDoc" + "$ref": "#/definitions/xbox.browseResponseDoc" } }, "400": { @@ -558276,18 +643212,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -558300,35 +643224,46 @@ "ApiKeyAuth": [] } ], - "summary": "Browse the Wendy's store directory", + "summary": "Browse the Xbox catalog, with optional sort and filters", "tags": [ - "Wendys" + "Xbox" ] } }, - "/wendys/item": { + "/xbox/collection": { "get": { "consumes": [ "application/json" ], - "description": "Returns one item's full detail. A simple item (is_combo false) returns its description, base price, calories, every size/weight variant (e.g. Small/Medium/Large fries, each with its own price and calories, with is_default marking the one Wendy's own page pre-selects), and every modifier component -- default (comes with the item), extra (a paid add-on) and required (the caller must pick one option from a named group, e.g. a salad's dressing) -- each with its own ingredient description and allergen list, since Wendy's publishes allergens per-component rather than as one whole-item field. The top-level allergens field is the union across default components and each required group's default-selected option only. A combo (is_combo true) instead returns combo_slots: its entree/side/drink composition and every product each slot can be built from, since a combo's own price and calories vary by what is chosen. A combo slot's product ids are the same items sold standalone in their own categories -- call this endpoint again on one of those for its own full component/allergen detail. Category and item slugs come from GET /wendys/categories and GET /wendys/menu.", - "operationId": "wendys-item", + "description": "Returns one page of a named, editorially curated Xbox collection (e.g. Top Free Games, Top Paid Games, Optimized for Series X|S, Xbox Play Anywhere). Pages forward via an opaque cursor: pass the previous response's next_cursor to fetch the next page. This is a partial, non-exhaustive list of known collection ids -- there is no discovery endpoint for the full set.", + "operationId": "xbox-collection", "parameters": [ { - "description": "Category slug from /wendys/categories", + "description": "Curated collection to fetch", + "enum": [ + "TopFreeGames", + "TopPaidGames", + "OptimizedSeriesXS", + "XboxPlayAnywhere" + ], "in": "query", - "name": "category", + "name": "id", "required": true, "type": "string", - "x-example": "hamburgers" + "x-example": "TopFreeGames" }, { - "description": "Item slug from /wendys/menu's items[].slug", + "description": "Opaque pagination cursor from a previous response's next_cursor", "in": "query", - "name": "item", - "required": true, - "type": "string", - "x-example": "daves-combo" + "name": "cursor", + "type": "string" + }, + { + "default": "en-US", + "description": "Display locale (BCP-47)", + "in": "query", + "name": "locale", + "type": "string" } ], "produces": [ @@ -558338,7 +643273,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wendys.itemResponseDoc" + "$ref": "#/definitions/xbox.collectionResponseDoc" } }, "400": { @@ -558347,18 +643282,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -558371,27 +643294,34 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Wendy's menu item's (or combo's) detail", + "summary": "Get one page of a curated Xbox collection", "tags": [ - "Wendys" + "Xbox" ] } }, - "/wendys/menu": { + "/xbox/game": { "get": { "consumes": [ "application/json" ], - "description": "Returns every item in one category of Wendy's national menu: id, name, slug, Wendy's own displayed price and calorie strings, whether it is a combo (its GET /wendys/item response returns combo_slots instead of components/variants), a limited-time-offer flag, and whether it has required customization (e.g. a salad's dressing choice). Category slugs come from GET /wendys/categories.", - "operationId": "wendys-menu", + "description": "Returns Xbox catalog details for a single product id: title, description, publisher, categories, supported platforms, content rating, price, preorder status, media (box art, poster, hero art), trailers, and which subscriptions (e.g. Game Pass) include it.", + "operationId": "xbox-game", "parameters": [ { - "description": "Category slug from /wendys/categories", + "description": "Xbox catalog product id", "in": "query", - "name": "category", + "name": "product_id", "required": true, "type": "string", - "x-example": "hamburgers" + "x-example": "9PK3G146XXVF" + }, + { + "default": "en-US", + "description": "Display locale (BCP-47)", + "in": "query", + "name": "locale", + "type": "string" } ], "produces": [ @@ -558401,7 +643331,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wendys.menuResponseDoc" + "$ref": "#/definitions/xbox.gameResponseDoc" } }, "400": { @@ -558410,8 +643340,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -558428,54 +643358,58 @@ "ApiKeyAuth": [] } ], - "summary": "List one Wendy's menu category's items", + "summary": "Get Xbox catalog details for a single product", "tags": [ - "Wendys" + "Xbox" ] } }, - "/wendys/nearby": { + "/xbox/reviews": { "get": { "consumes": [ "application/json" ], - "description": "Returns Wendy's stores within a radius of a search location, nearest first, via order.wendys.com's own restaurant-selector proximity search (the \"Use Current Location\" / \"City, State, or Zipcode\" flow at order.wendys.com's start-an-order screen) -- a materially richer, real-distance source than locations.wendys.com's classic-Yext locator (GET /wendys/directory, /wendys/store), which publishes no geosearch of its own. The search location is either a latitude/longitude pair or a free-text address query param (city/state, zip code, or full street address) that Wendy's own service geocodes server-side -- exactly one form is required; address takes priority if both are given. Each store carries its address, coordinates, phone, distance in miles, open/closed status, its published week of general and breakfast hours, and a few order-availability flags (breakfast, carry-out, mobile order, drive-thru, delivery, wifi) the ordering app itself uses to decide whether to offer the store for the current order type.", - "operationId": "wendys-nearby", + "description": "Returns a product's aggregate star-rating breakdown (average, total, and per-star counts) and up to item_count written reviews, optionally sorted and/or filtered to one star rating. A product with no reviews yet (e.g. a pre-order) returns a null ratings summary and an empty reviews list, not an error.", + "operationId": "xbox-reviews", "parameters": [ { - "description": "Search center latitude. Required unless address is given.", + "description": "Xbox catalog product id", "in": "query", - "name": "latitude", - "type": "number", - "x-example": 40.7128 + "name": "product_id", + "required": true, + "type": "string", + "x-example": "BT5P2X999VH2" }, { - "description": "Search center longitude. Required unless address is given.", + "default": 10, + "description": "Number of reviews to return (1-25)", "in": "query", - "name": "longitude", - "type": "number", - "x-example": -74.006 + "name": "item_count", + "type": "integer" }, { - "description": "Free-text city/state, zip code, or street address to search near. An alternative to latitude/longitude -- required unless both of those are given.", + "default": "MostHelpful", + "description": "Review sort order", + "enum": [ + "MostHelpful", + "MostRecent" + ], "in": "query", - "name": "address", - "type": "string", - "x-example": "10001" + "name": "order_by", + "type": "string" }, { - "description": "Search radius in miles, 1-100, default 20", + "description": "Only return reviews with this exact star rating (1-5); omit for all ratings", "in": "query", - "name": "radius", - "type": "integer", - "x-example": 20 + "name": "star_filter", + "type": "integer" }, { - "description": "Maximum stores to return, 1-50, default 25", + "default": "en-US", + "description": "Display locale (BCP-47)", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 25 + "name": "locale", + "type": "string" } ], "produces": [ @@ -558485,7 +643419,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wendys.nearbyResponseDoc" + "$ref": "#/definitions/xbox.reviewsResponseDoc" } }, "400": { @@ -558494,18 +643428,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -558518,35 +643440,317 @@ "ApiKeyAuth": [] } ], - "summary": "Find Wendy's stores near a coordinate or address", + "summary": "Get ratings and reviews for an Xbox catalog product", "tags": [ - "Wendys" + "Xbox" ] } }, - "/wendys/nutrition": { + "/xbox/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns one item's (or combo's) complete nutrition-facts panel -- calories, fat, cholesterol, sodium, carbohydrate, protein, vitamins and minerals -- as real numbers, plus declared allergens. A simple item's panel is for its default configuration (default bun/size, default condiments, no extras, no required-group substitutions). A combo's panel (is_combo true) is the *combined* total across every slot's default option in one request, the same way a caller building the full order would sum it themselves -- combo_selections lists which option each slot was computed for. GET /wendys/item and GET /wendys/menu only ever carry a calorie count, because that is all Wendy's own menu pages themselves publish inline; the full panel is fetched separately by Wendy's own \"Nutrition\" tab, and this endpoint resolves and calls that same source so a caller does not have to reverse-engineer it. A nutrient Wendy's does not publish is omitted from the response rather than reported as zero. Category and item slugs come from GET /wendys/categories and GET /wendys/menu.", - "operationId": "wendys-nutrition", + "description": "Returns one page of Xbox search results for a keyword, scoped to a category (games, add-ons, or hardware) and optionally sorted/filtered with the same parameters as /xbox/browse. Cursor-paginated.", + "operationId": "xbox-search", "parameters": [ { - "description": "Category slug from /wendys/categories", + "description": "Search keyword", "in": "query", - "name": "category", + "name": "query", "required": true, "type": "string", - "x-example": "hamburgers" + "x-example": "halo" }, { - "description": "Item slug from /wendys/menu's items[].slug -- a combo slug is accepted", + "default": "games", + "description": "Result category", + "enum": [ + "games", + "addons", + "hardware" + ], "in": "query", - "name": "item", - "required": true, - "type": "string", - "x-example": "daves-single" + "name": "category", + "type": "string" + }, + { + "description": "Opaque pagination cursor from a previous response's next_cursor", + "in": "query", + "name": "cursor", + "type": "string" + }, + { + "default": "relevance", + "description": "Sort order", + "enum": [ + "relevance", + "release_date_desc", + "most_popular", + "price_asc", + "price_desc", + "most_wishlisted", + "discount_desc", + "title_asc", + "title_desc" + ], + "in": "query", + "name": "sort", + "type": "string" + }, + { + "collectionFormat": "multi", + "description": "Genre filter (repeatable)", + "in": "query", + "items": { + "enum": [ + "Action & adventure", + "Card & board", + "Casino", + "Classics", + "Companion", + "Educational", + "Family & kids", + "Fighting", + "Multi-Player Online Battle Arena", + "Music", + "Other", + "Platformer", + "Puzzle & trivia", + "Racing & flying", + "Role playing", + "Shooter", + "Simulation", + "Sports", + "Strategy", + "Tools", + "Word" + ], + "type": "string" + }, + "name": "genre", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Price-band filter (repeatable)", + "in": "query", + "items": { + "enum": [ + "OnSale", + "0", + "0.01To5", + "5To10", + "10To20", + "20To40", + "40To60", + "60To" + ], + "type": "string" + }, + "name": "price", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Platform filter (repeatable)", + "in": "query", + "items": { + "enum": [ + "XboxSeriesX|S", + "XboxOne", + "PC", + "Handheld", + "CloudGaming", + "XboxPlayAnywhere" + ], + "type": "string" + }, + "name": "platform", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Subscription filter, by the subscription's own product id (repeatable)", + "in": "query", + "items": { + "enum": [ + "CFQ7TTC0KHS0", + "CFQ7TTC0P85B", + "CFQ7TTC0K5DJ", + "CFQ7TTC0K6L8", + "CFQ7TTC0KGQ8", + "CFQ7TTC0K5DH", + "CFQ7TTC0QH5H" + ], + "type": "string" + }, + "name": "subscription", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "ESRB age-rating filter (repeatable)", + "in": "query", + "items": { + "enum": [ + "ESRB:EC", + "ESRB:E", + "ESRB:E10", + "ESRB:T", + "ESRB:M", + "ESRB:AO", + "ESRB:RPEveryone", + "ESRB:RPMature", + "ESRB:RPTeen", + "ESRB:UR" + ], + "type": "string" + }, + "name": "age_rating", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Multiplayer-mode filter (repeatable)", + "in": "query", + "items": { + "enum": [ + "CrossPlatformMultiplayer", + "CrossPlatformCoop", + "SinglePlayer", + "OnlineMultiplayerWithGold", + "CoopSupportOnline", + "CoopSupportLocal", + "LocalMultiplayer" + ], + "type": "string" + }, + "name": "multiplayer", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Technical-feature filter (repeatable)", + "in": "query", + "items": { + "enum": [ + "CapabilityXboxEnhanced", + "ConsoleGen9Optimized", + "ConsoleCrossGen", + "Capability4k", + "CapabilityHDR", + "60fps", + "120fps", + "RayTracing" + ], + "type": "string" + }, + "name": "technical_features", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Handheld compatibility filter (repeatable)", + "in": "query", + "items": { + "enum": [ + "VERIFIED", + "PLAYABLE", + "UNSUPPORTED", + "UNKNOWN" + ], + "type": "string" + }, + "name": "handheld_compatibility", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Supported-language filter, by BCP-47 tag (repeatable)", + "in": "query", + "items": { + "enum": [ + "ar-SA", + "zh-CN", + "zh-TW", + "cs-CZ", + "da-DK", + "nl-NL", + "en-GB", + "en-US", + "fi-FI", + "fr-FR", + "de-DE", + "el-GR", + "he-IL", + "hu-HU", + "it-IT", + "ja-JP", + "ko-KR", + "nb-NO", + "pl-PL", + "pt-BR", + "pt-PT", + "ru-RU", + "sk-SK", + "es-MX", + "es-ES", + "sv-SE", + "tr-TR" + ], + "type": "string" + }, + "name": "supported_language", + "type": "array" + }, + { + "collectionFormat": "multi", + "description": "Accessibility-feature filter (repeatable)", + "in": "query", + "items": { + "enum": [ + "AccessibilityOnLaunch", + "AdjustableDifficulty", + "OnDemandTutorials", + "Pausable", + "ProgressSavingOptions", + "MonoSound", + "CustomVolumeControls", + "NarratedGameMenus", + "StereoSound", + "SpatialAudio", + "SteadyCamera", + "ContrastOptions", + "ColorOptions", + "SubtitleOptions", + "AdjustableTextSize", + "AdjustableInputSensitivity", + "BasicInputRemapping", + "TtsSttCommunications", + "InputRemapping", + "PlayableWithButtonsOnly", + "FullKeyboardSupport", + "PlayableWithMouseOnly", + "PlayableWithTouchOnly", + "NoButtonHolds", + "PlayableWithoutMotionControls", + "NoQuickTimeEvents", + "PlayableWithoutTouchControls", + "SingleStickGameplay", + "StickInversion" + ], + "type": "string" + }, + "name": "accessibility", + "type": "array" + }, + { + "default": "en-US", + "description": "Display locale (BCP-47)", + "in": "query", + "name": "locale", + "type": "string" } ], "produces": [ @@ -558556,7 +643760,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wendys.nutritionResponseDoc" + "$ref": "#/definitions/xbox.searchResponseDoc" } }, "400": { @@ -558565,18 +643769,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -558589,27 +643781,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Wendy's menu item's full nutrition-facts panel", + "summary": "Search the Xbox catalog, with optional sort and filters", "tags": [ - "Wendys" + "Xbox" ] } }, - "/wendys/restaurant": { + "/xda/article": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one restaurant's detail looked up by its numeric store id -- the same id GET /wendys/nearby's stores[].store_id returns -- via order.wendys.com's own restaurant-selector API, rather than a locations.wendys.com Yext locator path (see GET /wendys/store, which needs a directory path instead). Publishes richer per-store data than the Yext locator: whether each fulfillment mode (carry-out, dine-in, drive-thru) is physically offered at all (not just currently open, as GET /wendys/nearby's flags reflect), plus feature flags (wifi, mobile order/pay, Coke Freestyle, digital coupons, loyalty, gift cards) and the published week of general and breakfast hours.", - "operationId": "wendys-restaurant", + "description": "Returns one XDA article by its `url`, which must be a `www.xda-developers.com//` link; section hubs, author pages and the bare `xda-developers.com` host are rejected. The response has the title, description, times, section, authors, lead image and body `paragraphs`. `paywalled` is set to `true` only if the page declares the article not free.", + "operationId": "xda-article", "parameters": [ { - "description": "Numeric store id, e.g. from /wendys/nearby's stores[].store_id", + "description": "Canonical XDA article URL", "in": "query", - "name": "store_id", + "name": "url", "required": true, "type": "string", - "x-example": "12921" + "x-example": "https://www.xda-developers.com/qualcomm-isnt-ruling-out-snapdragon-x2-powered-gaming-handhelds/" } ], "produces": [ @@ -558619,7 +643808,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wendys.restaurantResponseDoc" + "$ref": "#/definitions/publicnews.articleResponseDoc" } }, "400": { @@ -558652,27 +643841,24 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Wendy's restaurant's detail by store id", + "summary": "Get XDA article content", "tags": [ - "Wendys" + "XDA" ] } }, - "/wendys/store": { + "/xda/author": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one Wendy's store: name, full postal address, phone, coordinates, the published week of general restaurant hours and, separately, drive-thru hours (Wendy's often publishes these on different schedules), which third-party delivery platforms the store's own page links to, and the restaurant id and ordering URL used to start an order there. Store paths come from GET /wendys/directory entries whose is_store is true. Passing a directory path here returns a 404 rather than a hollow record.", - "operationId": "wendys-store", + "description": "Returns an XDA author profile from their `https://www.xda-developers.com/author//` `url` (required; paginated author URLs are rejected). The response has the name, title, biography, image, social links and the profile's latest articles, about 20, with no older pages.", + "operationId": "xda-author", "parameters": [ { - "description": "Store path from a /wendys/directory child with is_store true", + "description": "Canonical XDA author URL", "in": "query", - "name": "path", + "name": "url", "required": true, "type": "string", - "x-example": "united-states/oh/alliance/1833-w-state-st" + "x-example": "https://www.xda-developers.com/author/patrick-orourke/" } ], "produces": [ @@ -558682,7 +643868,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wendys.storeResponseDoc" + "$ref": "#/definitions/publicnews.xdaAuthorResponseDoc" } }, "400": { @@ -558697,12 +643883,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -558715,27 +643895,88 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Wendy's store's detail", + "summary": "Get an XDA author profile", "tags": [ - "Wendys" + "XDA" ] } }, - "/wendys/store-menu": { + "/xda/headlines": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one restaurant's own priced, offered item list -- real local pricing (including full combo bundle prices, which GET /wendys/item deliberately does not compute, since a combo's own price varies by what's chosen in each slot) and any store-specific promotional items, rather than Wendy's own generic/average national-menu listing (GET /wendys/menu, /wendys/item). A request with just a store id returns real data, no session or account required.", - "operationId": "wendys-store-menu", + "description": "Lists 10 recent XDA items for one section. `section` is required and takes a slug such as `news`, `reviews`, `buying-guides`, `gpu`, `laptops`, `windows`, `linux-hub` or `ai-tools`; `xda-sections` lists them all. Dormant sections such as `editorials` or `beats` return old items. Other values are rejected.", + "operationId": "xda-headlines", "parameters": [ { - "description": "Numeric store id, e.g. from /wendys/nearby's stores[].store_id or /wendys/restaurant's store_id", + "description": "XDA RSS section slug", + "enum": [ + "news", + "features", + "reviews", + "buying-guides", + "tutorials", + "editorials", + "editor-columns", + "deals", + "commerce", + "evergreen", + "performance", + "beats", + "awards", + "hardware", + "processor", + "gpu", + "storage", + "monitors", + "input-devices", + "laptops", + "devices", + "single-board-computers", + "gaming-handhelds", + "prebuilt-pc", + "networking", + "smart-home", + "home", + "other-hardware", + "headset", + "cpu-cooler", + "printer", + "home-internet", + "other-computing-devices", + "phone-reviews", + "3d-printing", + "esp32", + "home-lab", + "self-hosting", + "software", + "software-and-services", + "apps", + "ai-tools", + "claude", + "notebooklm", + "productivity", + "os", + "windows", + "windows-tutorials", + "linux-hub", + "linux-tutorials", + "macos", + "macos-tutorials", + "chromeos-tutorials", + "microsoft-edge", + "opera", + "spotify", + "bing", + "gaming", + "gaming-news", + "gaming-reviews", + "entertainment", + "entertainment-segment" + ], "in": "query", - "name": "store_id", + "name": "section", "required": true, "type": "string", - "x-example": "12921" + "x-example": "news" } ], "produces": [ @@ -558745,7 +643986,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wendys.storeMenuResponseDoc" + "$ref": "#/definitions/publicnews.headlinesResponseDoc" } }, "400": { @@ -558754,12 +643995,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -558778,29 +644013,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Wendy's restaurant's full priced/offered menu", + "summary": "Get XDA section headlines", "tags": [ - "Wendys" + "XDA" ] } }, - "/wendys/time-slots": { + "/xda/news": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one restaurant's available mobile-order arrival (\"check-in\") time slots -- the times a caller can schedule a mobile pickup order for, distinct from the restaurant's general open/close hours (GET /wendys/restaurant, /wendys/store). A request with just a store id returns real available slots, no session or account required.", - "operationId": "wendys-time-slots", - "parameters": [ - { - "description": "Numeric store id, e.g. from /wendys/nearby's stores[].store_id or /wendys/restaurant's store_id", - "in": "query", - "name": "store_id", - "required": true, - "type": "string", - "x-example": "12921" - } - ], + "description": "Returns about 10 of the latest XDA top stories with no parameters. Each item has its title, canonical URL, summary, publication time, author names (co-authors joined with a comma) and lead image.", + "operationId": "xda-news", "produces": [ "application/json" ], @@ -558808,19 +644030,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wendys.timeSlotsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.newsResponseDoc" } }, "429": { @@ -558841,48 +644051,16 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Wendy's restaurant's available mobile-order time slots", + "summary": "Get XDA top stories", "tags": [ - "Wendys" + "XDA" ] } }, - "/whataburger/sitemap": { + "/xda/sections": { "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of Whataburger's sitemap-declared store index -- about 3,950 URLs at time of writing. Unlike some other store locators in this API, Whataburger publishes a single flat sitemap file rather than a sharded index. Each entry carries a kind: \"store\" is a restaurant's canonical detail page, \"curbside\" and \"delivery\" are separate pages Whataburger publishes for that same restaurant's curbside or delivery service, and \"directory\" is a state- or city-level listing page with no address of its own. Filter with kind to enumerate one page variant. A page past the end returns an empty list rather than an error, so a caller can walk to exhaustion.", - "operationId": "whataburger-sitemap", - "parameters": [ - { - "description": "1-based page (default 1)", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Entries per page, 1-500 (default 100)", - "in": "query", - "name": "page_size", - "type": "integer", - "x-example": 100 - }, - { - "description": "Filter by page kind. One of store, curbside, delivery, directory. Default all.", - "enum": [ - "store", - "curbside", - "delivery", - "directory" - ], - "in": "query", - "name": "kind", - "type": "string", - "x-example": "store" - } - ], + "description": "Lists the XDA sections accepted by `xda-headlines`, including `news`, `reviews`, `buying-guides`, `gpu`, `laptops`, `gaming-handhelds`, `windows`, `linux-hub` and `ai-tools`. Each has a `slug`, a display `name` and a feed `url`. Takes no parameters.", + "operationId": "xda-sections", "produces": [ "application/json" ], @@ -558890,19 +644068,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/whataburger.sitemapResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/publicnews.sectionsResponseDoc" } }, "429": { @@ -558910,12 +644076,6 @@ "schema": { "$ref": "#/definitions/app.Response" } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } } }, "security": [ @@ -558923,27 +644083,26 @@ "ApiKeyAuth": [] } ], - "summary": "Browse Whataburger's store-URL index", + "summary": "Get XDA RSS sections", "tags": [ - "Whataburger" + "XDA" ] } }, - "/whataburger/store": { + "/xiaohongshu/explore": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Whataburger store: postal address, coordinates, phone, published week of opening hours, the restaurant services (curbside, delivery) Whataburger lists for it, and a per-channel hours breakdown (dine-in, drive-thru, curbside, delivery) where the channel's hours genuinely differ from the store's top-level hours. Store paths come from GET /whataburger/sitemap -- a store's canonical, curbside and delivery page paths all describe the same physical restaurant and return the same address; the response's own path field always reports the canonical page. Passing a state or city directory path returns a 404 rather than a hollow record. Note there is no menu source, so this family is a locator only.", - "operationId": "whataburger-store", + "description": "Returns one page of the anonymous Xiaohongshu explore feed as normalized note cards: note id, a ready-to-call note_url carrying its short-lived xsec_token, type, title, cover image, like count, and a public author card. Omit channel_id for the upstream default recommendation feed; use channel_id with an id from the channels list returned by this endpoint for a category feed. The upstream serves one server-rendered page per channel (typically 20-33 cards) and has no credential-free cursor, so there is no pagination. Search, user profiles, comments, and note detail without a feed token are not available on this anonymous surface. The xsec_token in note_url is short-lived; call /xiaohongshu/note promptly with the returned note_url, and re-run this endpoint for a fresh token when it expires.", + "operationId": "xiaohongshu-explore", "parameters": [ { - "description": "Store path from a /whataburger/sitemap entry", + "description": "Optional explore channel id from the channels list in a previous response. Unknown values are rejected; omit for the default feed.", "in": "query", - "name": "path", - "required": true, + "name": "channel_id", "type": "string", - "x-example": "tx/abilene/1625-tx-hwy-351.html" + "x-example": "homefeed.food_v3" } ], "produces": [ @@ -558953,7 +644112,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/whataburger.storeResponseDoc" + "$ref": "#/definitions/xiaohongshu.exploreResponseDoc" } }, "400": { @@ -558974,6 +644133,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -558986,27 +644151,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Whataburger store's detail", + "summary": "Anonymous Xiaohongshu explore/channel feed", "tags": [ - "Whataburger" + "Xiaohongshu" ] } }, - "/whatnot/browse": { + "/xiaohongshu/note": { "get": { "consumes": [ "application/json" ], - "description": "Returns the live and upcoming shows currently listed under a Whatnot category: seller, title, status, start time, thumbnail, and tags.", - "operationId": "whatnot-browse", + "description": "Returns one public Xiaohongshu note normalized from the site's server-rendered page state: note id, type, title, description text (including hashtags), topic tags, image URLs, an optional stable video URL with duration, publish time, author card, and public interaction counters. Pass url with the note_url returned by /xiaohongshu/explore. The URL must be an xiaohongshu.com /explore/ or /discovery/item/ link carrying its xsec_token; a note id alone is not accessible anonymously, and a stale token returns not-found, so re-run /xiaohongshu/explore to mint a fresh one. Comments are not included because the anonymous page state does not carry them.", + "operationId": "xiaohongshu-note", "parameters": [ { - "description": "Whatnot category slug. See GET /whatnot/categories for the full list.", + "description": "Note URL carrying xsec_token, normally the note_url returned by /xiaohongshu/explore. Pass url, or both note_id and xsec_token.", "in": "query", - "name": "category", - "required": true, + "name": "url", "type": "string", - "x-example": "trading_card_games" + "x-example": "https://www.xiaohongshu.com/explore/0123456789abcdef01234567?xsec_token=SYNTHETIC-EXAMPLE-TOKEN-0001&xsec_source=pc_feed" + }, + { + "description": "24-character hex note id from an explore card (requires xsec_token)", + "in": "query", + "name": "note_id", + "type": "string", + "x-example": "0123456789abcdef01234567" + }, + { + "description": "Short-lived feed-issued token that accompanies note_id", + "in": "query", + "name": "xsec_token", + "type": "string", + "x-example": "SYNTHETIC-EXAMPLE-TOKEN-0001" } ], "produces": [ @@ -559016,7 +644194,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/whatnot.browseResponseDoc" + "$ref": "#/definitions/xiaohongshu.noteResponseDoc" } }, "400": { @@ -559031,46 +644209,11 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Browse Whatnot live shows by category", - "tags": [ - "Whatnot" - ] - } - }, - "/whatnot/categories": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Whatnot's full top-level category list (e.g. \"Trading Card Games\", \"Sneakers & Streetwear\"). Each entry's slug is usable directly with /whatnot/browse's category filter.", - "operationId": "whatnot-categories", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/whatnot.categoriesResponseDoc" - } }, "500": { "description": "Internal Server Error", @@ -559090,90 +644233,47 @@ "ApiKeyAuth": [] } ], - "summary": "Get Whatnot's category list", + "summary": "Anonymous Xiaohongshu note detail", "tags": [ - "Whatnot" + "Xiaohongshu" ] } }, - "/whatnot/live/{id}": { + "/xiaohongshu/note-comments": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Whatnot live show's current shop feed: every product, auction, and giveaway listing currently visible in the show, each with its seller's rating.", - "operationId": "whatnot-live", + "description": "Returns one page of a public note's comments using a browser-minted signed request, with no account or login. Pass the note_url returned by /xiaohongshu/explore (it carries the required xsec_token). Each item includes the comment id, text, like/sub-comment counters, creation time, IP location when the site exposes it, a public author card, and up to five replies. has_more and cursor continue pagination: pass the returned cursor to fetch the next page. Comments are read from the anonymous signed API, so a stale note token returns an upstream error; re-run /xiaohongshu/explore for a fresh note_url. Search results and profiles are not exposed because they require login.", + "operationId": "xiaohongshu-note-comments", "parameters": [ { - "description": "Whatnot live show id, e.g. from a browse result's id field", - "in": "path", - "name": "id", - "required": true, + "description": "Note URL carrying xsec_token, normally the note_url returned by /xiaohongshu/explore. Pass url, or both note_id and xsec_token.", + "in": "query", + "name": "url", "type": "string", - "x-example": "6ddb7fd2-43bb-44e0-8ee8-6656e82fa26a" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/whatnot.liveResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } + "x-example": "https://www.xiaohongshu.com/explore/0123456789abcdef01234567?xsec_token=SYNTHETIC-EXAMPLE-TOKEN-0001&xsec_source=pc_feed" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get a Whatnot live show's current shop feed", - "tags": [ - "Whatnot" - ] - } - }, - "/whatnot/seller/{username}": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns public seller profile details and one page of the seller's livestreams. Use next_cursor as cursor to continue while has_more is true. The endpoint does not include shop products.", - "operationId": "whatnot-seller", - "parameters": [ + "description": "24-character hex note id from an explore card (requires xsec_token)", + "in": "query", + "name": "note_id", + "type": "string", + "x-example": "0123456789abcdef01234567" + }, { - "description": "Whatnot seller username", - "in": "path", - "name": "username", - "required": true, + "description": "Short-lived feed-issued token that accompanies note_id", + "in": "query", + "name": "xsec_token", "type": "string", - "x-example": "fluffcardhouse" + "x-example": "SYNTHETIC-EXAMPLE-TOKEN-0001" }, { - "description": "Opaque cursor from a prior response's next_cursor", + "description": "Pagination cursor from a previous response", "in": "query", "name": "cursor", - "type": "string" + "type": "string", + "x-example": "cursor-1" } ], "produces": [ @@ -559183,7 +644283,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/whatnot.sellerResponseDoc" + "$ref": "#/definitions/xiaohongshu.commentsResponseDoc" } }, "400": { @@ -559198,6 +644298,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -559216,74 +644322,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Whatnot seller profile and shows", + "summary": "Anonymous Xiaohongshu note comments", "tags": [ - "Whatnot" + "Xiaohongshu" ] } }, - "/wingstop/delivery-store": { + "/xiaohongshu/search-suggest": { "get": { "consumes": [ "application/json" ], - "description": "Given a delivery address, returns the single Wingstop store that will deliver there, plus its drive time. Returns 404 when no Wingstop store delivers to that address. The returned slug can be passed directly as GET /wingstop/menu's path with service_mode=delivery.", - "operationId": "wingstop-delivery-store", + "description": "Returns search suggestions for a partially typed keyword using a browser-minted signed request. Suggestions come from the site's own anonymous suggestion API and require no account or login. Each item carries the suggested text plus optional highlight flags and the suggestion's search type. Only the suggestion list is returned; search *results* need a logged-in session and are not exposed. The signer is a shared browser worker, so this endpoint is slower than the plain page endpoints (roughly a browser-backed request, not a single HTTP call); if no signer worker is available it returns 503.", + "operationId": "xiaohongshu-search-suggest", "parameters": [ { - "description": "Delivery address line 1", - "in": "query", - "name": "address1", - "required": true, - "type": "string", - "x-example": "9804 Jones Rd" - }, - { - "description": "Delivery address city", - "in": "query", - "name": "city", - "required": true, - "type": "string", - "x-example": "Houston" - }, - { - "description": "Delivery address state (region)", - "in": "query", - "name": "state", - "required": true, - "type": "string", - "x-example": "TX" - }, - { - "description": "Delivery address postal code", + "description": "Partially typed search keyword", "in": "query", - "name": "postal_code", + "name": "keyword", "required": true, "type": "string", - "x-example": "77065" - }, - { - "description": "Delivery address country code. Defaults to US.", - "in": "query", - "name": "country_code", - "type": "string", - "x-example": "US" - }, - { - "description": "Delivery address latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 29.913115 - }, - { - "description": "Delivery address longitude", - "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -95.584729 + "x-example": "coffee" } ], "produces": [ @@ -559293,7 +644352,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wingstop.deliveryStoreResponseDoc" + "$ref": "#/definitions/xiaohongshu.suggestResponseDoc" } }, "400": { @@ -559302,14 +644361,14 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -559326,26 +644385,27 @@ "ApiKeyAuth": [] } ], - "summary": "Find the Wingstop store that delivers to an address", + "summary": "Anonymous Xiaohongshu search suggestions", "tags": [ - "Wingstop" + "Xiaohongshu" ] } }, - "/wingstop/directory": { + "/yahoo-autos/article": { "get": { "consumes": [ "application/json" ], - "description": "Returns one level of Wingstop's store directory tree. Omit path for the root, which lists the single US country node; descend country to states, states to cities, cities to stores. Each child carries its name, path, url and kind (country, state, city, or store). A child with is_store true (kind store) is a store record rather than another directory level -- pass its path to GET /wingstop/store.", - "operationId": "wingstop-directory", + "description": "Returns a single Yahoo Autos article's full content: title, description, author, publish/update time, section, image, keywords, original publisher, and body paragraphs. Accepts a canonical autos.yahoo.com article URL, such as one returned by the home or category story streams.", + "operationId": "yahoo-autos-article", "parameters": [ { - "description": "Directory path from a previous response's children[].path, e.g. us/tx. Omit for the root.", + "description": "Canonical autos.yahoo.com article URL", "in": "query", - "name": "path", + "name": "url", + "required": true, "type": "string", - "x-example": "us/tx" + "x-example": "https://autos.yahoo.com/auto-shows/articles/example-headline-000000000.html" } ], "produces": [ @@ -559355,7 +644415,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wingstop.directoryResponseDoc" + "$ref": "#/definitions/yahooautos.articleResponseDoc" } }, "400": { @@ -559376,43 +644436,8 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Browse the Wingstop store directory", - "tags": [ - "Wingstop" - ] - } - }, - "/wingstop/flavors": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Wingstop's full sauce and dry-rub flavor catalog: name, description, image, a 0 (no heat) to 5 (hottest) heat scale, whether it's a dry rub or wet sauce, and new/popular/limited-time badges. Includes retired flavors (is_active false) still present in Wingstop's own feed.", - "operationId": "wingstop-flavors", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/wingstop.flavorsResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -559429,34 +644454,46 @@ "ApiKeyAuth": [] } ], - "summary": "Get Wingstop's flavor catalog", + "summary": "Yahoo Autos article content", "tags": [ - "Wingstop" + "Yahoo Autos" ] } }, - "/wingstop/menu": { + "/yahoo-autos/category": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Wingstop store's full priced, categorized menu for carryout or delivery: every category, each listing's variants (a standalone item has one variant; a size/flavor family such as \"6 pc Wing Combo\" has one variant per size or preparation) with price, description and calorie range, plus store-level pricing context (currency, tax rate, prep lead time). Store paths come from GET /wingstop/directory entries whose is_store is true, or a GET /wingstop/store response's own path.", - "operationId": "wingstop-menu", + "description": "Returns a Yahoo Autos section's editorial story feed: title, destination URL, category, and thumbnail image for each story, with page-based pagination. Sourced from Yahoo Autos's own server-rendered section pages.", + "operationId": "yahoo-autos-category", "parameters": [ { - "description": "Store path from a /wingstop/directory child with is_store true, or a /wingstop/store response's own path", + "description": "Yahoo Autos section", + "enum": [ + "auto-shows", + "classic-and-collector", + "deals-and-buying-guides", + "ev-and-future-tech", + "general", + "new-vehicles-and-reviews", + "ownership", + "people-and-culture", + "policy-and-environment", + "safety-and-recalls" + ], "in": "query", - "name": "path", + "name": "category", "required": true, "type": "string", - "x-example": "tx/houston/wingstop-128-houston-tx-77065" + "x-example": "auto-shows" }, { - "description": "One of: carryout, delivery. Defaults to carryout.", + "description": "1-based page number, defaults to 1", "in": "query", - "name": "service_mode", - "type": "string", - "x-example": "carryout" + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -559466,7 +644503,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wingstop.menuResponseDoc" + "$ref": "#/definitions/yahooautos.categoryResponseDoc" } }, "400": { @@ -559487,6 +644524,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -559499,44 +644542,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Wingstop store's priced menu", + "summary": "Yahoo Autos section story stream", "tags": [ - "Wingstop" + "Yahoo Autos" ] } }, - "/wingstop/nearby": { + "/yahoo-autos/home": { "get": { "consumes": [ "application/json" ], - "description": "Returns Wingstop stores within a radius of a coordinate, sorted nearest first, with enough detail per store (address, phone, general hours, fulfillment channels) that a follow-up GET /wingstop/store call is often unnecessary. Each result's slug can be passed directly as GET /wingstop/menu's path.", - "operationId": "wingstop-nearby", - "parameters": [ - { - "description": "Search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 29.913115 - }, - { - "description": "Search center longitude", - "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": -95.584729 - }, - { - "description": "Search radius in miles, 1-100. Defaults to 20.", - "in": "query", - "name": "radius", - "type": "integer", - "x-example": 20 - } - ], + "description": "Returns Yahoo Autos's homepage editorial story feed: title, destination URL, category, and thumbnail image for each story. Sourced from Yahoo Autos's own server-rendered homepage.", + "operationId": "yahoo-autos-home", "produces": [ "application/json" ], @@ -559544,17 +644562,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wingstop.nearbyResponseDoc" + "$ref": "#/definitions/yahooautos.homeResponseDoc" } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -559571,27 +644589,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Wingstop stores near a coordinate", + "summary": "Yahoo Autos homepage story stream", "tags": [ - "Wingstop" + "Yahoo Autos" ] } }, - "/wingstop/store": { + "/yahoo-entertainment/article": { "get": { "consumes": [ "application/json" ], - "description": "Returns one Wingstop store: name, full postal address, phone, coordinates, its general weekly hours plus a per-channel breakdown (pickup, delivery, takeout, drive-through), which pickup/delivery services it offers, its operating status, price tier and Google Place id. Store paths come from GET /wingstop/directory entries whose is_store is true. Passing a directory path here returns a 404 rather than a hollow record.", - "operationId": "wingstop-store", + "description": "Returns a single Yahoo Entertainment article's full content: title, description, author, publish/update time, section, image, keywords, original publisher, and body paragraphs. Accepts a canonical www.yahoo.com/entertainment/ article URL, such as one returned by the home or category story streams.", + "operationId": "yahoo-entertainment-article", "parameters": [ { - "description": "Store path from a /wingstop/directory child with is_store true", + "description": "Canonical www.yahoo.com/entertainment/ article URL", "in": "query", - "name": "path", + "name": "url", "required": true, "type": "string", - "x-example": "tx/houston/wingstop-128-houston-tx-77065" + "x-example": "https://www.yahoo.com/entertainment/celebrity/articles/example-headline-000000000.html" } ], "produces": [ @@ -559601,7 +644619,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wingstop.storeResponseDoc" + "$ref": "#/definitions/yahooentertainment.articleResponseDoc" } }, "400": { @@ -559622,6 +644640,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -559634,24 +644658,40 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Wingstop store's detail", + "summary": "Yahoo Entertainment article content", "tags": [ - "Wingstop" + "Yahoo Entertainment" ] } }, - "/wired/article": { + "/yahoo-entertainment/category": { "get": { - "description": "Returns one public WIRED article's metadata and full body paragraphs from a canonical article URL. WIRED marks some stories subscriber-only in the page's own metadata; those return a 403 permission error rather than a truncated or fabricated body -- see the endpoint markdown for the exact detection method.", - "operationId": "wired-article", + "consumes": [ + "application/json" + ], + "description": "Returns a Yahoo Entertainment section's editorial story feed: title, destination URL, category, and thumbnail image for each story, with page-based pagination. Sourced from Yahoo Entertainment's own server-rendered section pages.", + "operationId": "yahoo-entertainment-category", "parameters": [ { - "description": "Canonical WIRED article URL", + "description": "Yahoo Entertainment section", + "enum": [ + "celebrity", + "movies", + "music", + "tv" + ], "in": "query", - "name": "url", + "name": "category", "required": true, "type": "string", - "x-example": "https://www.wired.com/story/example-story/" + "x-example": "celebrity" + }, + { + "description": "1-based page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -559661,7 +644701,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wired.articleResponseDoc" + "$ref": "#/definitions/yahooentertainment.categoryResponseDoc" } }, "400": { @@ -559670,12 +644710,6 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "404": { "description": "Not Found", "schema": { @@ -559688,6 +644722,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -559700,26 +644740,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a WIRED article's content", + "summary": "Yahoo Entertainment section story stream", "tags": [ - "WIRED" + "Yahoo Entertainment" ] } }, - "/wired/author": { + "/yahoo-entertainment/home": { "get": { - "description": "Returns one WIRED contributor's public profile: name, job title, biography, headshot, social links, and their recent articles from a canonical author URL.", - "operationId": "wired-author", - "parameters": [ - { - "description": "Canonical WIRED author URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.wired.com/author/lauren-goode/" - } + "consumes": [ + "application/json" ], + "description": "Returns Yahoo Entertainment's homepage editorial story feed: title, destination URL, category, and thumbnail image for each story. Sourced from Yahoo Entertainment's own server-rendered homepage.", + "operationId": "yahoo-entertainment-home", "produces": [ "application/json" ], @@ -559727,23 +644760,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wired.authorResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/yahooentertainment.homeResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -559760,34 +644787,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a WIRED contributor profile", + "summary": "Yahoo Entertainment homepage story stream", "tags": [ - "WIRED" + "Yahoo Entertainment" ] } }, - "/wired/headlines": { + "/yahoo-finance/calendars": { "get": { - "description": "Returns the current public RSS feed for one WIRED section: each story's title, canonical URL, summary, author, publication time, and lead image. Section must be one of the slugs returned by /wired/sections: `business`, `culture`, `gear`, `politics`, `science`, `security`.", - "operationId": "wired-headlines", - "parameters": [ - { - "description": "WIRED section slug from /wired/sections", - "enum": [ - "business", - "culture", - "gear", - "politics", - "science", - "security" - ], - "in": "query", - "name": "section", - "required": true, - "type": "string", - "x-example": "security" - } + "consumes": [ + "application/json" ], + "description": "Lists the Yahoo Finance calendar types available through the API: `earnings`, `ipo`, `economic-events` and `splits`. The list is static. Takes no parameters.", + "operationId": "yahoo-finance-calendars", "produces": [ "application/json" ], @@ -559795,29 +644807,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wired.headlinesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/yahoofinance.calendarsResponseDoc" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -559828,54 +644822,71 @@ "ApiKeyAuth": [] } ], - "summary": "Get the latest stories in a WIRED section", + "summary": "Yahoo Finance calendar types", "tags": [ - "WIRED" + "Yahoo Finance" ] } }, - "/wired/news": { + "/yahoo-finance/calendars/{type}": { "get": { - "description": "Returns WIRED's current top stories with no parameters. Each item has its title, canonical URL, summary, author, publication time and lead image, plus a type label for the item.", - "operationId": "wired-news", - "produces": [ + "consumes": [ "application/json" ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/wired.newsResponseDoc" - } + "description": "Returns Yahoo Finance calendar rows for the path `type`: `earnings`, `ipo`, `economic-events` or `splits`. Narrow with `start` and `end` (YYYY-MM-DD, RFC3339 or Unix seconds) and page with `limit` (max 100) and `offset`. For `earnings` only, `market_cap` sets a minimum and `filter_most_active` (default true) filters. The response echoes the window and paging with the `rows`.", + "operationId": "yahoo-finance-calendar", + "parameters": [ + { + "description": "Calendar type: earnings, ipo, economic-events, or splits", + "enum": [ + "earnings", + "ipo", + "economic-events", + "splits" + ], + "in": "path", + "name": "type", + "required": true, + "type": "string", + "x-example": "earnings" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } + { + "description": "Start date as YYYY-MM-DD, RFC3339, or Unix seconds", + "in": "query", + "name": "start", + "type": "string" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] + "description": "End date as YYYY-MM-DD, RFC3339, or Unix seconds", + "in": "query", + "name": "end", + "type": "string" + }, + { + "description": "Result count, max 100", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "Result offset", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "Earnings-only market cap minimum", + "in": "query", + "name": "market_cap", + "type": "number" + }, + { + "description": "Earnings-only most-active filter, default true", + "in": "query", + "name": "filter_most_active", + "type": "boolean" } ], - "summary": "Get the latest WIRED stories", - "tags": [ - "WIRED" - ] - } - }, - "/wired/sections": { - "get": { - "description": "Lists every WIRED section accepted by /wired/headlines, with its slug, display name, and landing-page URL. This is the full public, RSS-backed section taxonomy -- see the endpoint markdown for the one primary-nav link (Big Story) that is excluded and why.", - "operationId": "wired-sections", "produces": [ "application/json" ], @@ -559883,52 +644894,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wired.sectionsResponseDoc" + "$ref": "#/definitions/yahoofinance.calendarResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "List WIRED sections", - "tags": [ - "WIRED" - ] - } - }, - "/wish/categories": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Wish's own top navigation/category tree (e.g. \"Popular\", \"Deals Hub\", \"Fashion\", \"Gadgets\") plus each category's nested filter groups (e.g. Color, Rating) where present. This is a static, site-wide taxonomy -- it takes no input and its result does not vary by search term or category.", - "operationId": "wish-categories", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/wish.categoriesResponseDoc" - } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -559945,27 +644927,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get Wish's category and filter navigation tree", + "summary": "Yahoo Finance calendar results", "tags": [ - "Wish" + "Yahoo Finance" ] } }, - "/wish/product/{id}": { - "get": { + "/yahoo-finance/download": { + "post": { "consumes": [ "application/json" ], - "description": "Returns one Wish product's full detail: name, description, sold-out state, aggregate rating, image URLs, and every purchasable variation with its own price, currency, inventory, and merchant. id is taken from a search result's product_id field or a product page's URL. An unrecognized id returns 404.", - "operationId": "wish-product", + "description": "Returns historical prices for up to 25 symbols in one POST. The body requires `symbols`; `period`, `start`, `end`, `interval`, `include_prepost` and `include_actions` are optional. Each result is one symbol, with price points (open, high, low, close, adjusted close, volume) and dividend, split and capital-gain events, or an `error` for that symbol.", + "operationId": "yahoo-finance-download", "parameters": [ { - "description": "Wish product id, a 24-character hex id from a search result's product_id field", - "in": "path", - "name": "id", + "description": "Batch download request", + "in": "body", + "name": "request", "required": true, - "type": "string", - "x-example": "68b46c0356ea5dba05e9f755" + "schema": { + "$ref": "#/definitions/yahoofinance.DownloadRequest" + } } ], "produces": [ @@ -559975,7 +644958,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wish.productDetailResponseDoc" + "$ref": "#/definitions/yahoofinance.downloadResponseDoc" } }, "400": { @@ -559990,8 +644973,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -560008,36 +644991,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Wish product's full detail", + "summary": "Yahoo Finance batch historical prices", "tags": [ - "Wish" + "Yahoo Finance" ] } }, - "/wish/product/{id}/related": { + "/yahoo-finance/industries": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Wish product's related-item rails: shelves of similar products, grouped by rail (e.g. general similar items, a faster-shipping-eligible subset). id is taken from a search result's product_id field or a product page's URL. A faster-shipping rail with no eligible items, or a nonexistent id, returns a normal, empty result rather than an error.", - "operationId": "wish-product-related", - "parameters": [ - { - "description": "Wish product id, a 24-character hex id from a search result's product_id field", - "in": "path", - "name": "id", - "required": true, - "type": "string", - "x-example": "68b46c0356ea5dba05e9f755" - }, - { - "description": "Number of items to return per rail, 1 to 70, defaults to 10", - "in": "query", - "name": "count", - "type": "integer", - "x-example": 10 - } - ], + "description": "Lists the Yahoo Finance industries, each with a `key` and a `name`. It takes no parameters. Pass a returned `key` to `/yahoo-finance/industries/{key}` for that industry's detail.", + "operationId": "yahoo-finance-industries", "produces": [ "application/json" ], @@ -560045,23 +645011,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wish.relatedItemsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/yahoofinance.domainListResponseDoc" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -560072,34 +645026,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Wish product's related items", + "summary": "Yahoo Finance industries", "tags": [ - "Wish" + "Yahoo Finance" ] } }, - "/wish/product/{id}/reviews": { + "/yahoo-finance/industries/{key}": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Wish product's customer reviews. id is taken from a search result's product_id field or a product page's URL. A product with zero reviews returns a normal, empty result rather than an error. A caller wanting more reviews should re-request with a larger count -- this endpoint does not support an offset/cursor parameter.", - "operationId": "wish-product-reviews", + "description": "Returns Yahoo Finance detail for one industry `key` such as `semiconductors`: name, overview, its parent sector (`sector_key`, `sector_name`), top companies, top performing companies, top growth companies and research reports. Valid keys come from `/yahoo-finance/industries`.", + "operationId": "yahoo-finance-industry", "parameters": [ { - "description": "Wish product id, a 24-character hex id from a search result's product_id field", + "description": "Industry key such as semiconductors", "in": "path", - "name": "id", + "name": "key", "required": true, "type": "string", - "x-example": "5c204af997fd253055250a4d" - }, - { - "description": "Number of reviews to return, 1 to 200, defaults to 10", - "in": "query", - "name": "count", - "type": "integer", - "x-example": 10 + "x-example": "semiconductors" } ], "produces": [ @@ -560109,7 +645056,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wish.productReviewsResponseDoc" + "$ref": "#/definitions/yahoofinance.industryResponseDoc" } }, "400": { @@ -560124,8 +645071,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -560142,41 +645089,55 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Wish product's customer reviews", + "summary": "Yahoo Finance industry detail", "tags": [ - "Wish" + "Yahoo Finance" ] } }, - "/wish/search": { + "/yahoo-finance/lookup": { "get": { "consumes": [ "application/json" ], - "description": "Searches Wish's product catalog by keyword, with real offset-based pagination. Returns products with price, currency, rating, review count, and merchant id. A query with no matches returns a normal, empty result rather than an error.", - "operationId": "wish-search", + "description": "Looks up instruments on Yahoo Finance by ticker symbol or company name, optionally filtered to one type: equity, ETF, mutual fund, index, future, currency or cryptocurrency. Page with `count` and `start`. Returns the matching instruments, each with its symbol, short name, quote type and exchange, and the total.", + "operationId": "yahoo-finance-lookup", "parameters": [ { - "description": "Search keyword", + "description": "Ticker symbol or company name", "in": "query", "name": "query", "required": true, "type": "string", - "x-example": "shoes" + "x-example": "apple" }, { - "description": "Number of results per page, 1 to 70, defaults to 30", + "description": "Instrument type filter", + "enum": [ + "all", + "equity", + "etf", + "mutualfund", + "index", + "future", + "currency", + "cryptocurrency" + ], + "in": "query", + "name": "type", + "type": "string" + }, + { + "description": "Result count", "in": "query", "name": "count", - "type": "integer", - "x-example": 30 + "type": "integer" }, { - "description": "Result offset, 0-based, defaults to 0, must be an exact multiple of count up to 3 * count", + "description": "Result offset", "in": "query", - "name": "offset", - "type": "integer", - "x-example": 0 + "name": "start", + "type": "integer" } ], "produces": [ @@ -560186,7 +645147,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wish.searchResponseDoc" + "$ref": "#/definitions/yahoofinance.lookupResponseDoc" } }, "400": { @@ -560195,8 +645156,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -560213,27 +645180,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search Wish products", + "summary": "Yahoo Finance lookup", "tags": [ - "Wish" + "Yahoo Finance" ] } }, - "/wish/suggest": { + "/yahoo-finance/market/{market}/status": { "get": { "consumes": [ "application/json" ], - "description": "Returns Wish's own search-suggestion (typeahead) result for a partial search term: a flat list of suggested search terms, no product data. A partial term with no matches returns a normal, empty result rather than an error.", - "operationId": "wish-suggest", + "description": "Returns whether a Yahoo Finance market is open or closed, for the path `market` such as `US`. The response has `market` and a `status` object with the market id, name and its current open or closed state.", + "operationId": "yahoo-finance-market-status", "parameters": [ { - "description": "Partial search term", - "in": "query", - "name": "query", + "description": "Market such as US", + "in": "path", + "name": "market", "required": true, "type": "string", - "x-example": "shoe" + "x-example": "US" } ], "produces": [ @@ -560243,7 +645210,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wish.suggestResponseDoc" + "$ref": "#/definitions/yahoofinance.marketStatusResponseDoc" } }, "400": { @@ -560252,8 +645219,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -560270,40 +645243,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Wish search suggestions", + "summary": "Yahoo Finance market status", "tags": [ - "Wish" + "Yahoo Finance" ] } }, - "/wolt/cities": { + "/yahoo-finance/market/{market}/summary": { "get": { "consumes": [ "application/json" ], - "description": "Returns Wolt's own live directory of every city it operates in, each with the coordinate pair the rest of the Wolt endpoints take, plus its slug, country codes, and timezone. Every other Wolt endpoint is resolved purely from a coordinate, so this is the discovery step that makes them usable without an external geocoder. Optionally restrict to one country, or pass a reference coordinate to have each city carry its distance and the list returned nearest-first.", - "operationId": "wolt-cities", + "description": "Returns the market summary rows for a Yahoo Finance `market` such as `US`, as a `summary` list of instruments, each with fields such as `symbol` and `shortName`.", + "operationId": "yahoo-finance-market-summary", "parameters": [ { - "description": "Optional ISO 3166-1 country code to restrict the directory to, alpha-2 (FI) or alpha-3 (FIN), case-insensitive.", - "in": "query", - "name": "country", + "description": "Market such as US", + "in": "path", + "name": "market", + "required": true, "type": "string", - "x-example": "FI" - }, - { - "description": "Optional reference latitude. Must be given together with longitude.", - "in": "query", - "name": "latitude", - "type": "number", - "x-example": 60.1699 - }, - { - "description": "Optional reference longitude. Must be given together with latitude.", - "in": "query", - "name": "longitude", - "type": "number", - "x-example": 24.9384 + "x-example": "US" } ], "produces": [ @@ -560313,7 +645273,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wolt.citiesResponseDoc" + "$ref": "#/definitions/yahoofinance.marketSummaryResponseDoc" } }, "400": { @@ -560322,61 +645282,14 @@ "$ref": "#/definitions/app.Response" } }, - "503": { - "description": "Service Unavailable", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "List every city Wolt operates in, with coordinates", - "tags": [ - "Wolt" - ] - } - }, - "/wolt/collections": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns Wolt's own curated homepage restaurant/store lists for a location (e.g. top-rated, newest, hot-this-week -- whichever collections Wolt's own ops team currently curates for that market), read from Wolt's anonymous homepage endpoint. Each restaurant carries the same fields /wolt/search returns. The response also carries is_serviceable, which says whether Wolt delivers to the requested coordinates at all: false means the coordinates are outside Wolt's delivery coverage, so the empty collections list is a coverage answer rather than a served location whose homepage happens to carry no curated lists.", - "operationId": "wolt-collections", - "parameters": [ - { - "description": "Search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 60.1699 - }, - { - "description": "Search center longitude", - "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": 24.9384 - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/wolt.collectionsResponseDoc" - } }, - "400": { - "description": "Bad Request", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -560393,27 +645306,28 @@ "ApiKeyAuth": [] } ], - "summary": "Get Wolt's curated homepage restaurant/store collections for a location", + "summary": "Yahoo Finance market summary", "tags": [ - "Wolt" + "Yahoo Finance" ] } }, - "/wolt/restaurant": { - "get": { + "/yahoo-finance/screener": { + "post": { "consumes": [ "application/json" ], - "description": "Returns one Wolt restaurant or store's public detail by its slug: name, address, coordinates, timezone, phone, website, rating, currency, price range, cuisine tags, category ids (the values /wolt/search's category parameter accepts), opening hours, delivery hours, delivery methods, pickup availability, order minimum, and service fee estimate.", - "operationId": "wolt-restaurant", + "description": "Runs a custom Yahoo Finance screen from a JSON body. `query` is a tree of `operator` and `operands`: combine conditions with `AND` or `OR`, and compare a field to a value with operators such as `EQ` or `GT`. Screen equities (default), ETFs or mutual funds with `quote_type`, and page and sort with `count`, `offset`, `sort_field` and `sort_asc`. Returns the matching quotes and the total.", + "operationId": "yahoo-finance-screener-custom", "parameters": [ { - "description": "Wolt restaurant/store slug, from /wolt/search's slug field", - "in": "query", - "name": "slug", + "description": "JSON body for a custom screen. The query field is required; quote_type, count, offset, sort_field, and sort_asc are optional.", + "in": "body", + "name": "request", "required": true, - "type": "string", - "x-example": "mcdonalds-forum-katutaso" + "schema": { + "$ref": "#/definitions/yahoofinance.ScreenerRequest" + } } ], "produces": [ @@ -560423,7 +645337,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wolt.restaurantResponseDoc" + "$ref": "#/definitions/yahoofinance.screenerResponseDoc" } }, "400": { @@ -560438,6 +645352,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -560450,98 +645370,51 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Wolt restaurant or store's detail", + "summary": "Yahoo Finance custom screener", "tags": [ - "Wolt" + "Yahoo Finance" ] } }, - "/wolt/restaurant/availability": { + "/yahoo-finance/screener/{id}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one restaurant/store's live availability for a delivery coordinate: whether it is open and online right now, the next open and close times, delivery and pickup time estimates in minutes, the delivery fee, the order minimum, the venue's distance, and any discount campaign labels Wolt currently shows on its public page. Coordinates are optional but change the answer materially -- Wolt resolves delivery availability, the fee, the estimate, and the distance against them; without coordinates the venue's generic, location-independent status is returned and delivery_method_default is UNAVAILABLE.", - "operationId": "wolt-restaurant-availability", + "description": "Runs a predefined Yahoo Finance screener by `id`, such as `day_gainers` or `most_actives`. `count` and `offset` page the results; `sort_field` and `sort_asc` change the order. The response has the screener `title`, `description`, `total`, `meta` and the matching `quotes`. Valid ids come from `/yahoo-finance/screeners`.", + "operationId": "yahoo-finance-screener", "parameters": [ { - "description": "Wolt restaurant/store slug, from /wolt/search's slug field", - "in": "query", - "name": "slug", + "description": "Predefined screener id", + "in": "path", + "name": "id", "required": true, "type": "string", - "x-example": "kotipizza-kamppi" + "x-example": "day_gainers" }, { - "description": "Optional delivery-address latitude. Must be given together with longitude.", + "description": "Result count", "in": "query", - "name": "latitude", - "type": "number", - "x-example": 60.1699 + "name": "count", + "type": "integer" }, { - "description": "Optional delivery-address longitude. Must be given together with latitude.", + "description": "Result offset", "in": "query", - "name": "longitude", - "type": "number", - "x-example": 24.9384 - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/wolt.availabilityResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } + "name": "offset", + "type": "integer" }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ { - "ApiKeyAuth": [] - } - ], - "summary": "Get one Wolt restaurant or store's live availability and delivery estimate", - "tags": [ - "Wolt" - ] - } - }, - "/wolt/restaurant/menu": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one restaurant/store's menu grouped into categories, plus its restaurant summary. Each item carries a name, description, price, dietary tags, and image, read from Wolt's own anonymous menu API in a single call. The response's loading_strategy field reports whether the items are included: full means every category carries its items, while partial means Wolt does not bulk-load this venue's assortment, so the categories come back real but with empty item lists and the venue's items are reachable only by keyword through /wolt/restaurant/menu/search. Large stores of any type -- supermarkets, pharmacies, drugstores, DIY and toy stores -- are commonly partial; restaurants are full.", - "operationId": "wolt-restaurant-menu", - "parameters": [ + "description": "Sort field for offset/customized runs", + "in": "query", + "name": "sort_field", + "type": "string" + }, { - "description": "Wolt restaurant/store slug, from /wolt/search's slug field", + "description": "Sort ascending", "in": "query", - "name": "slug", - "required": true, - "type": "string", - "x-example": "mcdonalds-forum-katutaso" + "name": "sort_asc", + "type": "boolean" } ], "produces": [ @@ -560551,7 +645424,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wolt.menuResponseDoc" + "$ref": "#/definitions/yahoofinance.screenerResponseDoc" } }, "400": { @@ -560566,6 +645439,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -560578,44 +645457,19 @@ "ApiKeyAuth": [] } ], - "summary": "Get one Wolt restaurant or store's menu", + "summary": "Yahoo Finance predefined screener results", "tags": [ - "Wolt" + "Yahoo Finance" ] } }, - "/wolt/restaurant/menu/search": { + "/yahoo-finance/screeners": { "get": { "consumes": [ "application/json" ], - "description": "Searches one restaurant's or store's own items by keyword, using Wolt's own in-venue item search. This is the only way to reach the items of a large grocery or retail store: /wolt/restaurant/menu returns those venues' categories with no items, because Wolt itself only loads such an assortment a slice at a time. Matching works across languages, so an English keyword finds locally-named products. Each item carries a name, description, price, dietary tags, image, and -- for packaged retail products -- a barcode, pack size, and per-unit comparison price. A keyword is required; a no-match keyword returns an empty item list rather than an error.", - "operationId": "wolt-restaurant-menu-search", - "parameters": [ - { - "description": "Wolt restaurant/store slug, from /wolt/search's slug field", - "in": "query", - "name": "slug", - "required": true, - "type": "string", - "x-example": "mcdonalds-forum-katutaso" - }, - { - "description": "Keyword to match against this venue's own item names and descriptions", - "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "burger" - }, - { - "description": "Max items returned. Defaults to 30, maximum 100.", - "in": "query", - "name": "limit", - "type": "integer", - "x-example": 30 - } - ], + "description": "Lists the predefined Yahoo Finance screeners that can be run, such as `day_gainers`, `day_losers` and `most_actives`, as a `screeners` list of ids. It takes no parameters. Pass an id to `/yahoo-finance/screener/{id}`.", + "operationId": "yahoo-finance-screeners", "produces": [ "application/json" ], @@ -560623,23 +645477,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wolt.menuSearchResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/yahoofinance.screenersResponseDoc" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -560650,101 +645492,57 @@ "ApiKeyAuth": [] } ], - "summary": "Search one Wolt restaurant or store's menu by keyword", + "summary": "Yahoo Finance predefined screeners", "tags": [ - "Wolt" + "Yahoo Finance" ] } }, - "/wolt/search": { + "/yahoo-finance/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns restaurants and stores near a coordinate, optionally filtered by a keyword or browsed by category. With none of those, this reads Wolt's own plain location browse; with a query it uses Wolt's own keyword search across restaurant/store names, dishes, and cuisines; with a category it browses Wolt's own per-category listing (the same page a homepage cuisine tile links to) -- call /wolt/search/filters for the current, complete, location-scoped list of valid category values. category and query cannot be combined. A keyword search additionally accepts sort, product_line, and open_now; those three apply to keyword search only and return a 400 without query. Each result carries its slug (the value the restaurant and menu endpoints take), name, address, coordinates, tags, price range, rating, and delivery estimate; the two browse modes additionally carry each venue's own category ids. The response also carries is_serviceable, which says whether Wolt delivers to the requested coordinates at all: false means the coordinates are outside Wolt's delivery coverage, so the empty results list is a coverage answer rather than a no-matches answer. A keyword that simply matches nothing inside a covered area returns an empty list with is_serviceable true. Call /wolt/cities for the coordinates of every city Wolt operates in.", - "operationId": "wolt-search", + "description": "Searches Yahoo Finance for the required `q`, a ticker symbol or company name, and returns matching `quotes`, `news` and `lists`, plus `research` reports when `include_research` is set and Yahoo returns them. `quotes_count`, `news_count` and `lists_count` set how many of each; `enable_fuzzy_query` turns on fuzzy matching.", + "operationId": "yahoo-finance-search", "parameters": [ { - "description": "Search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 60.1699 - }, - { - "description": "Search center longitude", + "description": "Ticker symbol or company name", "in": "query", - "name": "longitude", + "name": "q", "required": true, - "type": "number", - "x-example": 24.9384 - }, - { - "description": "Optional keyword to search restaurant/store names, dishes, or cuisines by. Cannot be combined with category.", - "in": "query", - "name": "query", "type": "string", - "x-example": "pizza" + "x-example": "apple" }, { - "description": "Optional Wolt category id to browse by instead of a keyword search, e.g. pizza, sushi, vegan. Call /wolt/search/filters for the current, complete, location-scoped list of valid values. Cannot be combined with query. A value Wolt does not recognize at all returns a 404; a real category this particular market does not use returns an empty list, since the taxonomy is location-scoped and markets differ.", + "description": "Quote result count", "in": "query", - "name": "category", - "type": "string", - "x-example": "pizza" + "name": "quotes_count", + "type": "integer" }, { - "description": "Max restaurants/stores returned. Defaults to 30, maximum 100.", + "description": "News result count", "in": "query", - "name": "limit", - "type": "integer", - "x-example": 30 + "name": "news_count", + "type": "integer" }, { - "description": "Optional result ordering. Only applies together with query -- Wolt exposes sorting on its keyword search only, not on its plain browse or category listings.", - "enum": [ - "recommended", - "distance", - "rating", - "delivery_fee", - "delivery_estimate" - ], + "description": "List result count", "in": "query", - "name": "sort", - "type": "string", - "x-example": "rating" + "name": "lists_count", + "type": "integer" }, { - "description": "Optional store-type filter. Only applies together with query. Which store types a market actually stocks varies by country; one absent from the searched market returns no results rather than an error.", - "enum": [ - "restaurant", - "grocery", - "alcohol", - "pharmacy", - "pet_supply", - "health_and_beauty", - "electronics", - "toys_games_and_kids", - "home_and_diy", - "florist", - "general_merchandise", - "gift_card", - "charity", - "subscription", - "other" - ], + "description": "Include research reports when Yahoo returns them", "in": "query", - "name": "product_line", - "type": "string", - "x-example": "restaurant" + "name": "include_research", + "type": "boolean" }, { - "description": "When true, restrict results to venues currently delivering. Only applies together with query.", + "description": "Enable fuzzy matching", "in": "query", - "name": "open_now", - "type": "boolean", - "x-example": true + "name": "enable_fuzzy_query", + "type": "boolean" } ], "produces": [ @@ -560754,7 +645552,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wolt.searchResponseDoc" + "$ref": "#/definitions/yahoofinance.searchResponseDoc" } }, "400": { @@ -560769,6 +645567,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -560781,37 +645585,19 @@ "ApiKeyAuth": [] } ], - "summary": "Search Wolt restaurants and stores near a coordinate", + "summary": "Yahoo Finance search", "tags": [ - "Wolt" + "Yahoo Finance" ] } }, - "/wolt/search/filters": { + "/yahoo-finance/sectors": { "get": { "consumes": [ "application/json" ], - "description": "Returns the current, location-scoped catalog of every value /wolt/search's category parameter accepts, each with a live restaurant count when Wolt's own homepage currently features that category as one of its curated tiles -- the same data Wolt's own search page's cuisine tiles are populated from.", - "operationId": "wolt-search-filters", - "parameters": [ - { - "description": "Search center latitude", - "in": "query", - "name": "latitude", - "required": true, - "type": "number", - "x-example": 60.1699 - }, - { - "description": "Search center longitude", - "in": "query", - "name": "longitude", - "required": true, - "type": "number", - "x-example": 24.9384 - } - ], + "description": "Lists the Yahoo Finance sectors, each with a `key` and a `name`. It takes no parameters. Use a returned `key` with `/yahoo-finance/sectors/{key}` to get that sector's companies, funds and industries.", + "operationId": "yahoo-finance-sectors", "produces": [ "application/json" ], @@ -560819,17 +645605,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wolt.filtersResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/yahoofinance.domainListResponseDoc" } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -560840,24 +645620,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get Wolt's live search category catalog for a location", + "summary": "Yahoo Finance sectors", "tags": [ - "Wolt" + "Yahoo Finance" ] } }, - "/wsj/article": { + "/yahoo-finance/sectors/{key}": { "get": { - "description": "Returns one Wall Street Journal article's title, byline, publication time, word count, and body paragraphs, recovered from a public web-archive snapshot of the article. WSJ serves only the first paragraphs of premium articles at the origin, so an article is returned only when a full-text archive snapshot exists; an article without one returns 404.", - "operationId": "wsj-article", + "consumes": [ + "application/json" + ], + "description": "Returns Yahoo Finance detail for one sector `key` such as `technology`: name, overview, top companies, top ETFs, top mutual funds, the sector's industries and research reports. Valid keys come from `/yahoo-finance/sectors`.", + "operationId": "yahoo-finance-sector", "parameters": [ { - "description": "Canonical WSJ article URL", - "in": "query", - "name": "url", + "description": "Sector key such as technology", + "in": "path", + "name": "key", "required": true, "type": "string", - "x-example": "https://www.wsj.com/articles/cpi-inflation-report-july-2026-6381275d" + "x-example": "technology" } ], "produces": [ @@ -560867,7 +645650,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wsj.articleResponseDoc" + "$ref": "#/definitions/yahoofinance.sectorResponseDoc" } }, "400": { @@ -560876,20 +645659,14 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -560906,30 +645683,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Wall Street Journal article's content", + "summary": "Yahoo Finance sector detail", "tags": [ - "Wall Street Journal" + "Yahoo Finance" ] } }, - "/wsj/author": { + "/yahoo-finance/ticker/{symbol}/actions": { "get": { - "description": "Returns one Wall Street Journal author's profile (name, job title, bio, and social links when available) and the recent articles listed on their author page, read directly from the live page. The author page sits behind the same access wall as article pages, so a nonexistent author slug returns 404.", - "operationId": "wsj-author", + "consumes": [ + "application/json" + ], + "description": "Returns the corporate actions for a Yahoo Finance `symbol` such as `AAPL`: `dividends`, `splits` and `capital_gains`. Dividend and capital-gain entries carry a Unix timestamp and an amount; split entries carry a ratio such as `4:1`.", + "operationId": "yahoo-finance-ticker-actions", "parameters": [ { - "description": "WSJ author slug", - "in": "query", - "name": "slug", - "type": "string", - "x-example": "matt-grossman" - }, - { - "description": "Canonical https://www.wsj.com/news/author/ URL, as an alternative to slug", - "in": "query", - "name": "url", + "description": "Yahoo Finance symbol such as AAPL", + "in": "path", + "name": "symbol", + "required": true, "type": "string", - "x-example": "https://www.wsj.com/news/author/matt-grossman" + "x-example": "AAPL" } ], "produces": [ @@ -560939,7 +645713,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/wsj.authorResponseDoc" + "$ref": "#/definitions/yahoofinance.actionsResponseDoc" } }, "400": { @@ -560948,20 +645722,14 @@ "$ref": "#/definitions/app.Response" } }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -560978,33 +645746,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get a Wall Street Journal author's profile and recent articles", + "summary": "Yahoo Finance corporate actions", "tags": [ - "Wall Street Journal" + "Yahoo Finance" ] } }, - "/x/post/{id}": { + "/yahoo-finance/ticker/{symbol}/analysts": { "get": { "consumes": [ "application/json" ], - "description": "Returns a public X post by numeric post id, including author, text, visible metrics, and a quoted post preview when present.", - "operationId": "x-post", + "description": "Returns analyst data for a Yahoo Finance `symbol` such as `AAPL`, as `modules` keyed by Yahoo module name: recommendation trend, upgrade and downgrade history, price targets and estimates, where Yahoo provides them.", + "operationId": "yahoo-finance-ticker-analysts", "parameters": [ { - "description": "X post id", + "description": "Yahoo Finance symbol such as AAPL", "in": "path", - "name": "id", + "name": "symbol", "required": true, "type": "string", - "x-example": "2071148560779976947" - }, - { - "description": "Expected author username. When provided, mismatched authors return 404.", - "in": "query", - "name": "username", - "type": "string" + "x-example": "AAPL" } ], "produces": [ @@ -561012,82 +645774,31 @@ ], "responses": { "200": { - "description": "Wrapped post payload", + "description": "OK", "schema": { - "$ref": "#/definitions/x.postResponseDoc" + "$ref": "#/definitions/yahoofinance.moduleResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Post not found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Upstream error or parser drift", - "schema": { - "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "Retrieve an X post", - "tags": [ - "X" - ] - } - }, - "/x/profile/{username}": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns the public profile of an X account by `username`, with or without a leading `@`: name, description, location, avatar and banner images, creation date, verification flags, and `metrics` for followers, following, posts, likes, listed and media. `verified_type` and `affiliate_label` appear only when the account has them. Returns 404 when the profile is not public.", - "operationId": "x-profile", - "parameters": [ - { - "description": "X username", - "in": "path", - "name": "username", - "required": true, - "type": "string", - "x-example": "Ansel_Flipradio" - } - ], - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "Wrapped profile payload", - "schema": { - "$ref": "#/definitions/x.profileResponseDoc" - } - }, - "400": { - "description": "Missing or invalid parameters", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Profile not found", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } }, "503": { - "description": "Upstream error or parser drift", + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -561098,33 +645809,27 @@ "ApiKeyAuth": [] } ], - "summary": "Retrieve an X profile", + "summary": "Yahoo Finance analyst data", "tags": [ - "X" + "Yahoo Finance" ] } }, - "/x/profile/{username}/posts": { + "/yahoo-finance/ticker/{symbol}/calendar": { "get": { "consumes": [ "application/json" ], - "description": "Returns posts present in the first public profile page payload for an X username. The endpoint does not paginate replies, media-only tabs, or search results.", - "operationId": "x-profile-posts", + "description": "Returns the calendar events Yahoo Finance holds for a `symbol` such as `AAPL`, under `modules.calendarEvents`. The response echoes the `symbol`, and the symbol is the only input.", + "operationId": "yahoo-finance-ticker-calendar", "parameters": [ { - "description": "X username", + "description": "Yahoo Finance symbol such as AAPL", "in": "path", - "name": "username", + "name": "symbol", "required": true, "type": "string", - "x-example": "Ansel_Flipradio" - }, - { - "description": "Maximum posts returned from the first page payload. Defaults to 20 and must be 1-50.", - "in": "query", - "name": "limit", - "type": "integer" + "x-example": "AAPL" } ], "produces": [ @@ -561132,326 +645837,62 @@ ], "responses": { "200": { - "description": "Wrapped profile posts payload", + "description": "OK", "schema": { - "$ref": "#/definitions/x.profilePostsResponseDoc" + "$ref": "#/definitions/yahoofinance.moduleResponseDoc" } }, "400": { - "description": "Missing or invalid parameters", + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, "404": { - "description": "Profile not found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Upstream error or parser drift", + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ], - "summary": "List public X profile posts", - "tags": [ - "X" - ] - } - }, - "/xbox/browse": { - "get": { - "consumes": [ - "application/json" - ], - "description": "Returns one page of the full Xbox storefront catalog (games, add-ons, and subscriptions), optionally sorted and/or filtered. With no sort/filter parameters, returns the store's own default (relevance) order. Multiple values for a repeatable filter (genre, price, platform, subscription, age_rating, multiplayer, technical_features, handheld_compatibility) match ANY of them (logical OR); different filter fields combine as logical AND. Cursor-paginated, fixed at 25 items per page.", - "operationId": "xbox-browse", - "parameters": [ - { - "description": "Opaque pagination cursor from a previous response's next_cursor", - "in": "query", - "name": "cursor", - "type": "string" - }, - { - "default": "relevance", - "description": "Sort order", - "enum": [ - "relevance", - "release_date_desc", - "most_popular", - "price_asc", - "price_desc", - "most_wishlisted", - "discount_desc", - "title_asc", - "title_desc" - ], - "in": "query", - "name": "sort", - "type": "string" - }, - { - "collectionFormat": "multi", - "description": "Genre filter (repeatable)", - "in": "query", - "items": { - "enum": [ - "Action & adventure", - "Card & board", - "Casino", - "Classics", - "Companion", - "Educational", - "Family & kids", - "Fighting", - "Multi-Player Online Battle Arena", - "Music", - "Other", - "Platformer", - "Puzzle & trivia", - "Racing & flying", - "Role playing", - "Shooter", - "Simulation", - "Sports", - "Strategy", - "Tools", - "Word" - ], - "type": "string" - }, - "name": "genre", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Price-band filter (repeatable)", - "in": "query", - "items": { - "enum": [ - "OnSale", - "0", - "0.01To5", - "5To10", - "10To20", - "20To40", - "40To60", - "60To" - ], - "type": "string" - }, - "name": "price", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Platform filter (repeatable)", - "in": "query", - "items": { - "enum": [ - "XboxSeriesX|S", - "XboxOne", - "PC", - "Handheld", - "CloudGaming", - "XboxPlayAnywhere" - ], - "type": "string" - }, - "name": "platform", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Subscription filter, by the subscription's own product id (repeatable)", - "in": "query", - "items": { - "enum": [ - "CFQ7TTC0KHS0", - "CFQ7TTC0P85B", - "CFQ7TTC0K5DJ", - "CFQ7TTC0K6L8", - "CFQ7TTC0KGQ8", - "CFQ7TTC0K5DH", - "CFQ7TTC0QH5H" - ], - "type": "string" - }, - "name": "subscription", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "ESRB age-rating filter (repeatable)", - "in": "query", - "items": { - "enum": [ - "ESRB:EC", - "ESRB:E", - "ESRB:E10", - "ESRB:T", - "ESRB:M", - "ESRB:AO", - "ESRB:RPEveryone", - "ESRB:RPMature", - "ESRB:RPTeen", - "ESRB:UR" - ], - "type": "string" - }, - "name": "age_rating", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Multiplayer-mode filter (repeatable)", - "in": "query", - "items": { - "enum": [ - "CrossPlatformMultiplayer", - "CrossPlatformCoop", - "SinglePlayer", - "OnlineMultiplayerWithGold", - "CoopSupportOnline", - "CoopSupportLocal", - "LocalMultiplayer" - ], - "type": "string" - }, - "name": "multiplayer", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Technical-feature filter (repeatable)", - "in": "query", - "items": { - "enum": [ - "CapabilityXboxEnhanced", - "ConsoleGen9Optimized", - "ConsoleCrossGen", - "Capability4k", - "CapabilityHDR", - "60fps", - "120fps", - "RayTracing" - ], - "type": "string" - }, - "name": "technical_features", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Handheld compatibility filter (repeatable)", - "in": "query", - "items": { - "enum": [ - "VERIFIED", - "PLAYABLE", - "UNSUPPORTED", - "UNKNOWN" - ], - "type": "string" - }, - "name": "handheld_compatibility", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Supported-language filter, by BCP-47 tag (repeatable)", - "in": "query", - "items": { - "enum": [ - "ar-SA", - "zh-CN", - "zh-TW", - "cs-CZ", - "da-DK", - "nl-NL", - "en-GB", - "en-US", - "fi-FI", - "fr-FR", - "de-DE", - "el-GR", - "he-IL", - "hu-HU", - "it-IT", - "ja-JP", - "ko-KR", - "nb-NO", - "pl-PL", - "pt-BR", - "pt-PT", - "ru-RU", - "sk-SK", - "es-MX", - "es-ES", - "sv-SE", - "tr-TR" - ], - "type": "string" - }, - "name": "supported_language", - "type": "array" - }, - { - "collectionFormat": "multi", - "description": "Accessibility-feature filter (repeatable)", - "in": "query", - "items": { - "enum": [ - "AccessibilityOnLaunch", - "AdjustableDifficulty", - "OnDemandTutorials", - "Pausable", - "ProgressSavingOptions", - "MonoSound", - "CustomVolumeControls", - "NarratedGameMenus", - "StereoSound", - "SpatialAudio", - "SteadyCamera", - "ContrastOptions", - "ColorOptions", - "SubtitleOptions", - "AdjustableTextSize", - "AdjustableInputSensitivity", - "BasicInputRemapping", - "TtsSttCommunications", - "InputRemapping", - "PlayableWithButtonsOnly", - "FullKeyboardSupport", - "PlayableWithMouseOnly", - "PlayableWithTouchOnly", - "NoButtonHolds", - "PlayableWithoutMotionControls", - "NoQuickTimeEvents", - "PlayableWithoutTouchControls", - "SingleStickGameplay", - "StickInversion" - ], - "type": "string" - }, - "name": "accessibility", - "type": "array" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "default": "en-US", - "description": "Display locale (BCP-47)", - "in": "query", - "name": "locale", - "type": "string" + "ApiKeyAuth": [] + } + ], + "summary": "Yahoo Finance calendar", + "tags": [ + "Yahoo Finance" + ] + } + }, + "/yahoo-finance/ticker/{symbol}/capital-gains": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns capital gain events for a Yahoo Finance `symbol`, mainly ETFs and mutual funds such as `SPY`, each with a Unix timestamp and an amount, when Yahoo provides them. The response object also has `dividends` and `splits` fields.", + "operationId": "yahoo-finance-ticker-capital-gains", + "parameters": [ + { + "description": "Yahoo Finance symbol such as SPY", + "in": "path", + "name": "symbol", + "required": true, + "type": "string", + "x-example": "SPY" } ], "produces": [ @@ -561461,7 +645902,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/xbox.browseResponseDoc" + "$ref": "#/definitions/yahoofinance.actionsResponseDoc" } }, "400": { @@ -561470,6 +645911,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -561482,46 +645935,27 @@ "ApiKeyAuth": [] } ], - "summary": "Browse the Xbox catalog, with optional sort and filters", + "summary": "Yahoo Finance capital gains", "tags": [ - "Xbox" + "Yahoo Finance" ] } }, - "/xbox/collection": { + "/yahoo-finance/ticker/{symbol}/dividends": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a named, editorially curated Xbox collection (e.g. Top Free Games, Top Paid Games, Optimized for Series X|S, Xbox Play Anywhere). Pages forward via an opaque cursor: pass the previous response's next_cursor to fetch the next page. This is a partial, non-exhaustive list of known collection ids -- there is no discovery endpoint for the full set.", - "operationId": "xbox-collection", + "description": "Returns the dividend events for a Yahoo Finance `symbol` such as `AAPL`, each with a Unix timestamp and an amount. The response object also has `splits` and `capital_gains` fields.", + "operationId": "yahoo-finance-ticker-dividends", "parameters": [ { - "description": "Curated collection to fetch", - "enum": [ - "TopFreeGames", - "TopPaidGames", - "OptimizedSeriesXS", - "XboxPlayAnywhere" - ], - "in": "query", - "name": "id", + "description": "Yahoo Finance symbol such as AAPL", + "in": "path", + "name": "symbol", "required": true, "type": "string", - "x-example": "TopFreeGames" - }, - { - "description": "Opaque pagination cursor from a previous response's next_cursor", - "in": "query", - "name": "cursor", - "type": "string" - }, - { - "default": "en-US", - "description": "Display locale (BCP-47)", - "in": "query", - "name": "locale", - "type": "string" + "x-example": "AAPL" } ], "produces": [ @@ -561531,7 +645965,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/xbox.collectionResponseDoc" + "$ref": "#/definitions/yahoofinance.actionsResponseDoc" } }, "400": { @@ -561540,6 +645974,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -561552,34 +645998,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get one page of a curated Xbox collection", + "summary": "Yahoo Finance dividends", "tags": [ - "Xbox" + "Yahoo Finance" ] } }, - "/xbox/game": { + "/yahoo-finance/ticker/{symbol}/earnings": { "get": { "consumes": [ "application/json" ], - "description": "Returns Xbox catalog details for a single product id: title, description, publisher, categories, supported platforms, content rating, price, preorder status, media (box art, poster, hero art), trailers, and which subscriptions (e.g. Game Pass) include it.", - "operationId": "xbox-game", + "description": "Returns the Yahoo Finance earnings modules for a `symbol` such as `AAPL`, including `earnings` and `earningsTrend`, under `modules`. The response echoes the `symbol`, and the symbol is the only input.", + "operationId": "yahoo-finance-ticker-earnings", "parameters": [ { - "description": "Xbox catalog product id", - "in": "query", - "name": "product_id", + "description": "Yahoo Finance symbol such as AAPL", + "in": "path", + "name": "symbol", "required": true, "type": "string", - "x-example": "9PK3G146XXVF" - }, - { - "default": "en-US", - "description": "Display locale (BCP-47)", - "in": "query", - "name": "locale", - "type": "string" + "x-example": "AAPL" } ], "produces": [ @@ -561589,7 +646028,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/xbox.gameResponseDoc" + "$ref": "#/definitions/yahoofinance.moduleResponseDoc" } }, "400": { @@ -561604,6 +646043,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -561616,58 +646061,39 @@ "ApiKeyAuth": [] } ], - "summary": "Get Xbox catalog details for a single product", + "summary": "Yahoo Finance earnings", "tags": [ - "Xbox" + "Yahoo Finance" ] } }, - "/xbox/reviews": { + "/yahoo-finance/ticker/{symbol}/earnings-dates": { "get": { "consumes": [ "application/json" ], - "description": "Returns a product's aggregate star-rating breakdown (average, total, and per-star counts) and up to item_count written reviews, optionally sorted and/or filtered to one star rating. A product with no reviews yet (e.g. a pre-order) returns a null ratings summary and an empty reviews list, not an error.", - "operationId": "xbox-reviews", + "description": "Returns earnings-date rows for a Yahoo Finance `symbol`, taken from Yahoo's earnings calendar table. `limit` (max 100) and `offset` page the rows. Each row is keyed by the table's column names, such as `Earnings Date`. Returns an upstream error when Yahoo does not serve the table.", + "operationId": "yahoo-finance-ticker-earnings-dates", "parameters": [ { - "description": "Xbox catalog product id", - "in": "query", - "name": "product_id", + "description": "Yahoo Finance symbol such as AAPL", + "in": "path", + "name": "symbol", "required": true, "type": "string", - "x-example": "BT5P2X999VH2" + "x-example": "AAPL" }, { - "default": 10, - "description": "Number of reviews to return (1-25)", + "description": "Result count, max 100", "in": "query", - "name": "item_count", + "name": "limit", "type": "integer" }, { - "default": "MostHelpful", - "description": "Review sort order", - "enum": [ - "MostHelpful", - "MostRecent" - ], - "in": "query", - "name": "order_by", - "type": "string" - }, - { - "description": "Only return reviews with this exact star rating (1-5); omit for all ratings", + "description": "Result offset", "in": "query", - "name": "star_filter", + "name": "offset", "type": "integer" - }, - { - "default": "en-US", - "description": "Display locale (BCP-47)", - "in": "query", - "name": "locale", - "type": "string" } ], "produces": [ @@ -561677,7 +646103,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/xbox.reviewsResponseDoc" + "$ref": "#/definitions/yahoofinance.earningsDatesResponseDoc" } }, "400": { @@ -561686,6 +646112,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -561698,317 +646136,238 @@ "ApiKeyAuth": [] } ], - "summary": "Get ratings and reviews for an Xbox catalog product", + "summary": "Yahoo Finance earnings dates", "tags": [ - "Xbox" + "Yahoo Finance" ] } }, - "/xbox/search": { + "/yahoo-finance/ticker/{symbol}/financials": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of Xbox search results for a keyword, scoped to a category (games, add-ons, or hardware) and optionally sorted/filtered with the same parameters as /xbox/browse. Cursor-paginated.", - "operationId": "xbox-search", + "description": "Returns financial statement data for a Yahoo Finance `symbol`. `statement` picks `income`, `balance-sheet` or `cash-flow` (aliases `income-statement`, `balance` and `cashflow` also work) and `period` picks `annual`, `quarterly` or `trailing`; trailing is supported for income and cash flow only. The response echoes `statement` and `period`, with the data under `modules`.", + "operationId": "yahoo-finance-ticker-financials", "parameters": [ { - "description": "Search keyword", - "in": "query", - "name": "query", + "description": "Yahoo Finance symbol such as AAPL", + "in": "path", + "name": "symbol", "required": true, "type": "string", - "x-example": "halo" + "x-example": "AAPL" }, { - "default": "games", - "description": "Result category", + "description": "Statement type. Allowed values: income (alias income-statement), balance-sheet (alias balance), cash-flow (alias cashflow)", "enum": [ - "games", - "addons", - "hardware" + "income", + "income-statement", + "balance-sheet", + "balance", + "cash-flow", + "cashflow" ], "in": "query", - "name": "category", - "type": "string" - }, - { - "description": "Opaque pagination cursor from a previous response's next_cursor", - "in": "query", - "name": "cursor", + "name": "statement", "type": "string" }, { - "default": "relevance", - "description": "Sort order", + "description": "annual, quarterly, or trailing", "enum": [ - "relevance", - "release_date_desc", - "most_popular", - "price_asc", - "price_desc", - "most_wishlisted", - "discount_desc", - "title_asc", - "title_desc" + "annual", + "quarterly", + "trailing" ], "in": "query", - "name": "sort", + "name": "period", "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/yahoofinance.financialsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ { - "collectionFormat": "multi", - "description": "Genre filter (repeatable)", - "in": "query", - "items": { - "enum": [ - "Action & adventure", - "Card & board", - "Casino", - "Classics", - "Companion", - "Educational", - "Family & kids", - "Fighting", - "Multi-Player Online Battle Arena", - "Music", - "Other", - "Platformer", - "Puzzle & trivia", - "Racing & flying", - "Role playing", - "Shooter", - "Simulation", - "Sports", - "Strategy", - "Tools", - "Word" - ], - "type": "string" - }, - "name": "genre", - "type": "array" + "ApiKeyAuth": [] + } + ], + "summary": "Yahoo Finance financial statements", + "tags": [ + "Yahoo Finance" + ] + } + }, + "/yahoo-finance/ticker/{symbol}/funds": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns fund data for an ETF or mutual fund `symbol` such as `SPY`, under `modules`: the fund profile, top holdings, equity holdings, bond holdings and sector weightings.", + "operationId": "yahoo-finance-ticker-funds", + "parameters": [ + { + "description": "Yahoo Finance symbol such as SPY", + "in": "path", + "name": "symbol", + "required": true, + "type": "string", + "x-example": "SPY" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/yahoofinance.moduleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Yahoo Finance fund data", + "tags": [ + "Yahoo Finance" + ] + } + }, + "/yahoo-finance/ticker/{symbol}/history": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns price points for a Yahoo Finance `symbol`: open, high, low, close, adjusted close and volume with timestamps. Use `period` (default `1mo`, up to `max`) or `start` and `end`, which override it. `interval` sets the candle size (default `1d`; intraday covers recent ranges only). `include_actions` adds dividend, split and capital-gain `events`.", + "operationId": "yahoo-finance-ticker-history", + "parameters": [ + { + "description": "Yahoo Finance symbol such as AAPL", + "in": "path", + "name": "symbol", + "required": true, + "type": "string", + "x-example": "AAPL" }, { - "collectionFormat": "multi", - "description": "Price-band filter (repeatable)", + "description": "Range such as 1d, 1mo, 1y, max", "in": "query", - "items": { - "enum": [ - "OnSale", - "0", - "0.01To5", - "5To10", - "10To20", - "20To40", - "40To60", - "60To" - ], - "type": "string" - }, - "name": "price", - "type": "array" + "name": "period", + "type": "string" }, { - "collectionFormat": "multi", - "description": "Platform filter (repeatable)", + "description": "Unix seconds, RFC3339, or YYYY-MM-DD", "in": "query", - "items": { - "enum": [ - "XboxSeriesX|S", - "XboxOne", - "PC", - "Handheld", - "CloudGaming", - "XboxPlayAnywhere" - ], - "type": "string" - }, - "name": "platform", - "type": "array" + "name": "start", + "type": "string" }, { - "collectionFormat": "multi", - "description": "Subscription filter, by the subscription's own product id (repeatable)", + "description": "Unix seconds, RFC3339, or YYYY-MM-DD", "in": "query", - "items": { - "enum": [ - "CFQ7TTC0KHS0", - "CFQ7TTC0P85B", - "CFQ7TTC0K5DJ", - "CFQ7TTC0K6L8", - "CFQ7TTC0KGQ8", - "CFQ7TTC0K5DH", - "CFQ7TTC0QH5H" - ], - "type": "string" - }, - "name": "subscription", - "type": "array" + "name": "end", + "type": "string" }, { - "collectionFormat": "multi", - "description": "ESRB age-rating filter (repeatable)", + "description": "Interval such as 1d, 1h, 5m", "in": "query", - "items": { - "enum": [ - "ESRB:EC", - "ESRB:E", - "ESRB:E10", - "ESRB:T", - "ESRB:M", - "ESRB:AO", - "ESRB:RPEveryone", - "ESRB:RPMature", - "ESRB:RPTeen", - "ESRB:UR" - ], - "type": "string" - }, - "name": "age_rating", - "type": "array" + "name": "interval", + "type": "string" }, { - "collectionFormat": "multi", - "description": "Multiplayer-mode filter (repeatable)", + "description": "Include pre/post market data", "in": "query", - "items": { - "enum": [ - "CrossPlatformMultiplayer", - "CrossPlatformCoop", - "SinglePlayer", - "OnlineMultiplayerWithGold", - "CoopSupportOnline", - "CoopSupportLocal", - "LocalMultiplayer" - ], - "type": "string" - }, - "name": "multiplayer", - "type": "array" + "name": "include_prepost", + "type": "boolean" }, { - "collectionFormat": "multi", - "description": "Technical-feature filter (repeatable)", + "description": "Include dividends, splits, and capital gains", "in": "query", - "items": { - "enum": [ - "CapabilityXboxEnhanced", - "ConsoleGen9Optimized", - "ConsoleCrossGen", - "Capability4k", - "CapabilityHDR", - "60fps", - "120fps", - "RayTracing" - ], - "type": "string" - }, - "name": "technical_features", - "type": "array" + "name": "include_actions", + "type": "boolean" }, { - "collectionFormat": "multi", - "description": "Handheld compatibility filter (repeatable)", + "description": "Adjust OHLC prices with adjusted close", "in": "query", - "items": { - "enum": [ - "VERIFIED", - "PLAYABLE", - "UNSUPPORTED", - "UNKNOWN" - ], - "type": "string" - }, - "name": "handheld_compatibility", - "type": "array" + "name": "auto_adjust", + "type": "boolean" }, { - "collectionFormat": "multi", - "description": "Supported-language filter, by BCP-47 tag (repeatable)", + "description": "Back-adjust OHLC prices while keeping close", "in": "query", - "items": { - "enum": [ - "ar-SA", - "zh-CN", - "zh-TW", - "cs-CZ", - "da-DK", - "nl-NL", - "en-GB", - "en-US", - "fi-FI", - "fr-FR", - "de-DE", - "el-GR", - "he-IL", - "hu-HU", - "it-IT", - "ja-JP", - "ko-KR", - "nb-NO", - "pl-PL", - "pt-BR", - "pt-PT", - "ru-RU", - "sk-SK", - "es-MX", - "es-ES", - "sv-SE", - "tr-TR" - ], - "type": "string" - }, - "name": "supported_language", - "type": "array" + "name": "back_adjust", + "type": "boolean" }, { - "collectionFormat": "multi", - "description": "Accessibility-feature filter (repeatable)", + "description": "Keep fully empty chart rows", "in": "query", - "items": { - "enum": [ - "AccessibilityOnLaunch", - "AdjustableDifficulty", - "OnDemandTutorials", - "Pausable", - "ProgressSavingOptions", - "MonoSound", - "CustomVolumeControls", - "NarratedGameMenus", - "StereoSound", - "SpatialAudio", - "SteadyCamera", - "ContrastOptions", - "ColorOptions", - "SubtitleOptions", - "AdjustableTextSize", - "AdjustableInputSensitivity", - "BasicInputRemapping", - "TtsSttCommunications", - "InputRemapping", - "PlayableWithButtonsOnly", - "FullKeyboardSupport", - "PlayableWithMouseOnly", - "PlayableWithTouchOnly", - "NoButtonHolds", - "PlayableWithoutMotionControls", - "NoQuickTimeEvents", - "PlayableWithoutTouchControls", - "SingleStickGameplay", - "StickInversion" - ], - "type": "string" - }, - "name": "accessibility", - "type": "array" + "name": "keepna", + "type": "boolean" }, { - "default": "en-US", - "description": "Display locale (BCP-47)", + "description": "Round prices to two decimals", "in": "query", - "name": "locale", - "type": "string" + "name": "rounding", + "type": "boolean" } ], "produces": [ @@ -562018,7 +646377,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/xbox.searchResponseDoc" + "$ref": "#/definitions/yahoofinance.historyResponseDoc" } }, "400": { @@ -562027,6 +646386,18 @@ "$ref": "#/definitions/app.Response" } }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -562039,24 +646410,27 @@ "ApiKeyAuth": [] } ], - "summary": "Search the Xbox catalog, with optional sort and filters", + "summary": "Yahoo Finance historical prices", "tags": [ - "Xbox" + "Yahoo Finance" ] } }, - "/xda/article": { + "/yahoo-finance/ticker/{symbol}/history-metadata": { "get": { - "description": "Returns one XDA article by its `url`, which must be a `www.xda-developers.com//` link; section hubs, author pages and the bare `xda-developers.com` host are rejected. The response has the title, description, times, section, authors, lead image and body `paragraphs`. `paywalled` is set to `true` only if the page declares the article not free.", - "operationId": "xda-article", + "consumes": [ + "application/json" + ], + "description": "Returns the chart metadata Yahoo Finance holds for a `symbol` such as `AAPL`, in `meta`, for example `currency` and `exchangeName`. The symbol is the only input.", + "operationId": "yahoo-finance-ticker-history-metadata", "parameters": [ { - "description": "Canonical XDA article URL", - "in": "query", - "name": "url", + "description": "Yahoo Finance symbol such as AAPL", + "in": "path", + "name": "symbol", "required": true, "type": "string", - "x-example": "https://www.xda-developers.com/qualcomm-isnt-ruling-out-snapdragon-x2-powered-gaming-handhelds/" + "x-example": "AAPL" } ], "produces": [ @@ -562066,7 +646440,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.articleResponseDoc" + "$ref": "#/definitions/yahoofinance.historyMetadataResponseDoc" } }, "400": { @@ -562081,8 +646455,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -562099,24 +646473,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get XDA article content", + "summary": "Yahoo Finance history metadata", "tags": [ - "XDA" + "Yahoo Finance" ] } }, - "/xda/author": { + "/yahoo-finance/ticker/{symbol}/holders": { "get": { - "description": "Returns an XDA author profile from their `https://www.xda-developers.com/author//` `url` (required; paginated author URLs are rejected). The response has the name, title, biography, image, social links and the profile's latest articles, about 20, with no older pages.", - "operationId": "xda-author", + "consumes": [ + "application/json" + ], + "description": "Returns holder data for a Yahoo Finance `symbol` such as `AAPL`, under `modules`: the major holders breakdown (`majorHoldersBreakdown`), institutional ownership, and the fund and insider holder modules.", + "operationId": "yahoo-finance-ticker-holders", "parameters": [ { - "description": "Canonical XDA author URL", - "in": "query", - "name": "url", + "description": "Yahoo Finance symbol such as AAPL", + "in": "path", + "name": "symbol", "required": true, "type": "string", - "x-example": "https://www.xda-developers.com/author/patrick-orourke/" + "x-example": "AAPL" } ], "produces": [ @@ -562126,7 +646503,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.xdaAuthorResponseDoc" + "$ref": "#/definitions/yahoofinance.moduleResponseDoc" } }, "400": { @@ -562141,6 +646518,12 @@ "$ref": "#/definitions/app.Response" } }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "503": { "description": "Service Unavailable", "schema": { @@ -562153,88 +646536,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get an XDA author profile", + "summary": "Yahoo Finance holders", "tags": [ - "XDA" + "Yahoo Finance" ] } }, - "/xda/headlines": { + "/yahoo-finance/ticker/{symbol}/info": { "get": { - "description": "Lists 10 recent XDA items for one section. `section` is required and takes a slug such as `news`, `reviews`, `buying-guides`, `gpu`, `laptops`, `windows`, `linux-hub` or `ai-tools`; `xda-sections` lists them all. Dormant sections such as `editorials` or `beats` return old items. Other values are rejected.", - "operationId": "xda-headlines", + "consumes": [ + "application/json" + ], + "description": "Returns profile and quote information for a Yahoo Finance `symbol` such as `AAPL`, under `modules`: the profile, quote type (`quoteType`), price, statistics and summary modules. The symbol is the only input.", + "operationId": "yahoo-finance-ticker-info", "parameters": [ { - "description": "XDA RSS section slug", - "enum": [ - "news", - "features", - "reviews", - "buying-guides", - "tutorials", - "editorials", - "editor-columns", - "deals", - "commerce", - "evergreen", - "performance", - "beats", - "awards", - "hardware", - "processor", - "gpu", - "storage", - "monitors", - "input-devices", - "laptops", - "devices", - "single-board-computers", - "gaming-handhelds", - "prebuilt-pc", - "networking", - "smart-home", - "home", - "other-hardware", - "headset", - "cpu-cooler", - "printer", - "home-internet", - "other-computing-devices", - "phone-reviews", - "3d-printing", - "esp32", - "home-lab", - "self-hosting", - "software", - "software-and-services", - "apps", - "ai-tools", - "claude", - "notebooklm", - "productivity", - "os", - "windows", - "windows-tutorials", - "linux-hub", - "linux-tutorials", - "macos", - "macos-tutorials", - "chromeos-tutorials", - "microsoft-edge", - "opera", - "spotify", - "bing", - "gaming", - "gaming-news", - "gaming-reviews", - "entertainment", - "entertainment-segment" - ], - "in": "query", - "name": "section", + "description": "Yahoo Finance symbol such as AAPL", + "in": "path", + "name": "symbol", "required": true, "type": "string", - "x-example": "news" + "x-example": "AAPL" } ], "produces": [ @@ -562244,7 +646566,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.headlinesResponseDoc" + "$ref": "#/definitions/yahoofinance.infoResponseDoc" } }, "400": { @@ -562253,8 +646575,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -562271,16 +646599,29 @@ "ApiKeyAuth": [] } ], - "summary": "Get XDA section headlines", + "summary": "Yahoo Finance ticker info", "tags": [ - "XDA" + "Yahoo Finance" ] } }, - "/xda/news": { + "/yahoo-finance/ticker/{symbol}/isin": { "get": { - "description": "Returns about 10 of the latest XDA top stories with no parameters. Each item has its title, canonical URL, summary, publication time, author names (co-authors joined with a comma) and lead image.", - "operationId": "xda-news", + "consumes": [ + "application/json" + ], + "description": "Returns the ISIN for a Yahoo Finance `symbol`, for example `US0378331005` for `AAPL`. The lookup is experimental, and the `isin` field is `-` when none can be found.", + "operationId": "yahoo-finance-ticker-isin", + "parameters": [ + { + "description": "Yahoo Finance symbol such as AAPL", + "in": "path", + "name": "symbol", + "required": true, + "type": "string", + "x-example": "AAPL" + } + ], "produces": [ "application/json" ], @@ -562288,11 +646629,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.newsResponseDoc" + "$ref": "#/definitions/yahoofinance.isinResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", "schema": { "$ref": "#/definitions/app.Response" } @@ -562309,16 +646662,41 @@ "ApiKeyAuth": [] } ], - "summary": "Get XDA top stories", + "summary": "Yahoo Finance ticker ISIN", "tags": [ - "XDA" + "Yahoo Finance" ] } }, - "/xda/sections": { + "/yahoo-finance/ticker/{symbol}/news": { "get": { - "description": "Lists the XDA sections accepted by `xda-headlines`, including `news`, `reviews`, `buying-guides`, `gpu`, `laptops`, `gaming-handhelds`, `windows`, `linux-hub` and `ai-tools`. Each has a `slug`, a display `name` and a feed `url`. Takes no parameters.", - "operationId": "xda-sections", + "consumes": [ + "application/json" + ], + "description": "Returns the Yahoo Finance news stream for the ticker in the `symbol` path parameter, such as `AAPL`. `count` limits the items (default 8, max 250) and `tab` picks `news` (default), `all` or `press_releases`. Stories have title, provider, dates and URLs. A valid empty stream returns `news: []`.", + "operationId": "yahoo-finance-ticker-news", + "parameters": [ + { + "description": "Yahoo Finance symbol such as AAPL", + "in": "path", + "name": "symbol", + "required": true, + "type": "string", + "x-example": "AAPL" + }, + { + "description": "News result count", + "in": "query", + "name": "count", + "type": "integer" + }, + { + "description": "News tab: news, all, or press_releases", + "in": "query", + "name": "tab", + "type": "string" + } + ], "produces": [ "application/json" ], @@ -562326,11 +646704,29 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/publicnews.sectionsResponseDoc" + "$ref": "#/definitions/yahoofinance.searchResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", "schema": { "$ref": "#/definitions/app.Response" } @@ -562341,26 +646737,27 @@ "ApiKeyAuth": [] } ], - "summary": "Get XDA RSS sections", + "summary": "Yahoo Finance ticker news", "tags": [ - "XDA" + "Yahoo Finance" ] } }, - "/xiaohongshu/explore": { + "/yahoo-finance/ticker/{symbol}/options": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of the anonymous Xiaohongshu explore feed as normalized note cards: note id, a ready-to-call note_url carrying its short-lived xsec_token, type, title, cover image, like count, and a public author card. Omit channel_id for the upstream default recommendation feed; use channel_id with an id from the channels list returned by this endpoint for a category feed. The upstream serves one server-rendered page per channel (typically 20-33 cards) and has no credential-free cursor, so there is no pagination. Search, user profiles, comments, and note detail without a feed token are not available on this anonymous surface. The xsec_token in note_url is short-lived; call /xiaohongshu/note promptly with the returned note_url, and re-run this endpoint for a fresh token when it expires.", - "operationId": "xiaohongshu-explore", + "description": "Returns the option expiration dates (`expiration_dates`, as Unix timestamps) and the current option chain for a Yahoo Finance `symbol` such as `AAPL`. Each `options` entry has an `expiration_date` with its `calls` and `puts`; `underlying` describes the underlying security.", + "operationId": "yahoo-finance-ticker-options", "parameters": [ { - "description": "Optional explore channel id from the channels list in a previous response. Unknown values are rejected; omit for the default feed.", - "in": "query", - "name": "channel_id", + "description": "Yahoo Finance symbol such as AAPL", + "in": "path", + "name": "symbol", + "required": true, "type": "string", - "x-example": "homefeed.food_v3" + "x-example": "AAPL" } ], "produces": [ @@ -562370,7 +646767,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/xiaohongshu.exploreResponseDoc" + "$ref": "#/definitions/yahoofinance.optionsResponseDoc" } }, "400": { @@ -562385,12 +646782,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -562409,40 +646800,35 @@ "ApiKeyAuth": [] } ], - "summary": "Anonymous Xiaohongshu explore/channel feed", + "summary": "Yahoo Finance options chain", "tags": [ - "Xiaohongshu" + "Yahoo Finance" ] } }, - "/xiaohongshu/note": { + "/yahoo-finance/ticker/{symbol}/options/{expiration}": { "get": { "consumes": [ "application/json" ], - "description": "Returns one public Xiaohongshu note normalized from the site's server-rendered page state: note id, type, title, description text (including hashtags), topic tags, image URLs, an optional stable video URL with duration, publish time, author card, and public interaction counters. Pass url with the note_url returned by /xiaohongshu/explore. The URL must be an xiaohongshu.com /explore/ or /discovery/item/ link carrying its xsec_token; a note id alone is not accessible anonymously, and a stale token returns not-found, so re-run /xiaohongshu/explore to mint a fresh one. Comments are not included because the anonymous page state does not carry them.", - "operationId": "xiaohongshu-note", + "description": "Returns the calls and puts for one expiration of a Yahoo Finance `symbol`. `expiration` is a Unix timestamp, and the options endpoint lists the available ones in `expiration_dates`. The result is an `options` entry with `expiration_date`, `calls` and `puts`.", + "operationId": "yahoo-finance-ticker-options-expiration", "parameters": [ { - "description": "Note URL carrying xsec_token, normally the note_url returned by /xiaohongshu/explore. Pass url, or both note_id and xsec_token.", - "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.xiaohongshu.com/explore/0123456789abcdef01234567?xsec_token=SYNTHETIC-EXAMPLE-TOKEN-0001&xsec_source=pc_feed" - }, - { - "description": "24-character hex note id from an explore card (requires xsec_token)", - "in": "query", - "name": "note_id", + "description": "Yahoo Finance symbol such as AAPL", + "in": "path", + "name": "symbol", + "required": true, "type": "string", - "x-example": "0123456789abcdef01234567" + "x-example": "AAPL" }, { - "description": "Short-lived feed-issued token that accompanies note_id", - "in": "query", - "name": "xsec_token", + "description": "Unix expiration timestamp", + "in": "path", + "name": "expiration", + "required": true, "type": "string", - "x-example": "SYNTHETIC-EXAMPLE-TOKEN-0001" + "x-example": "1863475200" } ], "produces": [ @@ -562452,7 +646838,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/xiaohongshu.noteResponseDoc" + "$ref": "#/definitions/yahoofinance.optionsResponseDoc" } }, "400": { @@ -562467,12 +646853,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -562491,47 +646871,27 @@ "ApiKeyAuth": [] } ], - "summary": "Anonymous Xiaohongshu note detail", + "summary": "Yahoo Finance options chain by expiration", "tags": [ - "Xiaohongshu" + "Yahoo Finance" ] } }, - "/xiaohongshu/note-comments": { + "/yahoo-finance/ticker/{symbol}/quote": { "get": { "consumes": [ "application/json" ], - "description": "Returns one page of a public note's comments using a browser-minted signed request, with no account or login. Pass the note_url returned by /xiaohongshu/explore (it carries the required xsec_token). Each item includes the comment id, text, like/sub-comment counters, creation time, IP location when the site exposes it, a public author card, and up to five replies. has_more and cursor continue pagination: pass the returned cursor to fetch the next page. Comments are read from the anonymous signed API, so a stale note token returns an upstream error; re-run /xiaohongshu/explore for a fresh note_url. Search results and profiles are not exposed because they require login.", - "operationId": "xiaohongshu-note-comments", + "description": "Returns fast quote fields for one Yahoo Finance `symbol` such as `AAPL`, for example `regularMarketPrice`, in a `quotes` list alongside the requested `symbols`. The symbol is the only input.", + "operationId": "yahoo-finance-ticker-quote", "parameters": [ { - "description": "Note URL carrying xsec_token, normally the note_url returned by /xiaohongshu/explore. Pass url, or both note_id and xsec_token.", - "in": "query", - "name": "url", - "type": "string", - "x-example": "https://www.xiaohongshu.com/explore/0123456789abcdef01234567?xsec_token=SYNTHETIC-EXAMPLE-TOKEN-0001&xsec_source=pc_feed" - }, - { - "description": "24-character hex note id from an explore card (requires xsec_token)", - "in": "query", - "name": "note_id", - "type": "string", - "x-example": "0123456789abcdef01234567" - }, - { - "description": "Short-lived feed-issued token that accompanies note_id", - "in": "query", - "name": "xsec_token", - "type": "string", - "x-example": "SYNTHETIC-EXAMPLE-TOKEN-0001" - }, - { - "description": "Pagination cursor from a previous response", - "in": "query", - "name": "cursor", + "description": "Yahoo Finance symbol such as AAPL", + "in": "path", + "name": "symbol", + "required": true, "type": "string", - "x-example": "cursor-1" + "x-example": "AAPL" } ], "produces": [ @@ -562541,7 +646901,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/xiaohongshu.commentsResponseDoc" + "$ref": "#/definitions/yahoofinance.quoteResponseDoc" } }, "400": { @@ -562556,12 +646916,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -562580,27 +646934,27 @@ "ApiKeyAuth": [] } ], - "summary": "Anonymous Xiaohongshu note comments", + "summary": "Yahoo Finance ticker quote", "tags": [ - "Xiaohongshu" + "Yahoo Finance" ] } }, - "/xiaohongshu/search-suggest": { + "/yahoo-finance/ticker/{symbol}/sec-filings": { "get": { "consumes": [ "application/json" ], - "description": "Returns search suggestions for a partially typed keyword using a browser-minted signed request. Suggestions come from the site's own anonymous suggestion API and require no account or login. Each item carries the suggested text plus optional highlight flags and the suggestion's search type. Only the suggestion list is returned; search *results* need a logged-in session and are not exposed. The signer is a shared browser worker, so this endpoint is slower than the plain page endpoints (roughly a browser-backed request, not a single HTTP call); if no signer worker is available it returns 503.", - "operationId": "xiaohongshu-search-suggest", + "description": "Returns the SEC filing summaries Yahoo Finance lists for a `symbol` such as `AAPL`, under `modules.secFilings`. The response echoes the `symbol`, and the symbol is the only input.", + "operationId": "yahoo-finance-ticker-sec-filings", "parameters": [ { - "description": "Partially typed search keyword", - "in": "query", - "name": "keyword", + "description": "Yahoo Finance symbol such as AAPL", + "in": "path", + "name": "symbol", "required": true, "type": "string", - "x-example": "coffee" + "x-example": "AAPL" } ], "produces": [ @@ -562610,7 +646964,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/xiaohongshu.suggestResponseDoc" + "$ref": "#/definitions/yahoofinance.moduleResponseDoc" } }, "400": { @@ -562619,8 +646973,8 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -562643,27 +646997,27 @@ "ApiKeyAuth": [] } ], - "summary": "Anonymous Xiaohongshu search suggestions", + "summary": "Yahoo Finance SEC filings", "tags": [ - "Xiaohongshu" + "Yahoo Finance" ] } }, - "/yahoo-autos/article": { + "/yahoo-finance/ticker/{symbol}/shares": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single Yahoo Autos article's full content: title, description, author, publish/update time, section, image, keywords, original publisher, and body paragraphs. Accepts a canonical autos.yahoo.com article URL, such as one returned by the home or category story streams.", - "operationId": "yahoo-autos-article", + "description": "Returns the current share-count fields for a Yahoo Finance `symbol` such as `AAPL`, for example `sharesOutstanding`, in `shares`. The symbol is the only input, and the response echoes it as `symbol`.", + "operationId": "yahoo-finance-ticker-shares", "parameters": [ { - "description": "Canonical autos.yahoo.com article URL", - "in": "query", - "name": "url", + "description": "Yahoo Finance symbol such as AAPL", + "in": "path", + "name": "symbol", "required": true, "type": "string", - "x-example": "https://autos.yahoo.com/auto-shows/articles/example-headline-000000000.html" + "x-example": "AAPL" } ], "produces": [ @@ -562673,7 +647027,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahooautos.articleResponseDoc" + "$ref": "#/definitions/yahoofinance.sharesResponseDoc" } }, "400": { @@ -562688,12 +647042,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -562712,46 +647060,39 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Autos article content", + "summary": "Yahoo Finance share counts", "tags": [ - "Yahoo Autos" + "Yahoo Finance" ] } }, - "/yahoo-autos/category": { + "/yahoo-finance/ticker/{symbol}/shares-full": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Yahoo Autos section's editorial story feed: title, destination URL, category, and thumbnail image for each story, with page-based pagination. Sourced from Yahoo Autos's own server-rendered section pages.", - "operationId": "yahoo-autos-category", + "description": "Returns the historical shares-outstanding series for a Yahoo Finance `symbol`. `start` and `end` accept YYYY-MM-DD, RFC3339 or Unix seconds; without them the last 18 months are returned. Each point has `timestamp`, `datetime` and `shares_out`.", + "operationId": "yahoo-finance-ticker-shares-full", "parameters": [ { - "description": "Yahoo Autos section", - "enum": [ - "auto-shows", - "classic-and-collector", - "deals-and-buying-guides", - "ev-and-future-tech", - "general", - "new-vehicles-and-reviews", - "ownership", - "people-and-culture", - "policy-and-environment", - "safety-and-recalls" - ], - "in": "query", - "name": "category", + "description": "Yahoo Finance symbol such as AAPL", + "in": "path", + "name": "symbol", "required": true, "type": "string", - "x-example": "auto-shows" + "x-example": "AAPL" }, { - "description": "1-based page number, defaults to 1", + "description": "Start date as YYYY-MM-DD, RFC3339, or Unix seconds", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "start", + "type": "string" + }, + { + "description": "End date as YYYY-MM-DD, RFC3339, or Unix seconds", + "in": "query", + "name": "end", + "type": "string" } ], "produces": [ @@ -562761,7 +647102,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahooautos.categoryResponseDoc" + "$ref": "#/definitions/yahoofinance.sharesFullResponseDoc" } }, "400": { @@ -562776,12 +647117,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -562800,19 +647135,29 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Autos section story stream", + "summary": "Yahoo Finance historical share counts", "tags": [ - "Yahoo Autos" + "Yahoo Finance" ] } }, - "/yahoo-autos/home": { + "/yahoo-finance/ticker/{symbol}/splits": { "get": { "consumes": [ "application/json" ], - "description": "Returns Yahoo Autos's homepage editorial story feed: title, destination URL, category, and thumbnail image for each story. Sourced from Yahoo Autos's own server-rendered homepage.", - "operationId": "yahoo-autos-home", + "description": "Returns the stock split events for a Yahoo Finance `symbol` such as `AAPL`, each with a Unix timestamp and a split ratio such as `4:1`. The response object also has `dividends` and `capital_gains` fields.", + "operationId": "yahoo-finance-ticker-splits", + "parameters": [ + { + "description": "Yahoo Finance symbol such as AAPL", + "in": "path", + "name": "symbol", + "required": true, + "type": "string", + "x-example": "AAPL" + } + ], "produces": [ "application/json" ], @@ -562820,11 +647165,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahooautos.homeResponseDoc" + "$ref": "#/definitions/yahoofinance.actionsResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -562847,27 +647198,27 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Autos homepage story stream", + "summary": "Yahoo Finance splits", "tags": [ - "Yahoo Autos" + "Yahoo Finance" ] } }, - "/yahoo-entertainment/article": { + "/yahoo-finance/ticker/{symbol}/sustainability": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single Yahoo Entertainment article's full content: title, description, author, publish/update time, section, image, keywords, original publisher, and body paragraphs. Accepts a canonical www.yahoo.com/entertainment/ article URL, such as one returned by the home or category story streams.", - "operationId": "yahoo-entertainment-article", + "description": "Returns ESG and sustainability scores for a Yahoo Finance `symbol` such as `AAPL`, under `modules.esgScores`. When Yahoo recognises the ticker but has no ESG data, `esgScores` comes back empty instead of an error.", + "operationId": "yahoo-finance-ticker-sustainability", "parameters": [ { - "description": "Canonical www.yahoo.com/entertainment/ article URL", - "in": "query", - "name": "url", + "description": "Yahoo Finance symbol such as AAPL", + "in": "path", + "name": "symbol", "required": true, "type": "string", - "x-example": "https://www.yahoo.com/entertainment/celebrity/articles/example-headline-000000000.html" + "x-example": "AAPL" } ], "produces": [ @@ -562877,7 +647228,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahooentertainment.articleResponseDoc" + "$ref": "#/definitions/yahoofinance.moduleResponseDoc" } }, "400": { @@ -562892,12 +647243,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -562916,40 +647261,27 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Entertainment article content", + "summary": "Yahoo Finance sustainability", "tags": [ - "Yahoo Entertainment" + "Yahoo Finance" ] } }, - "/yahoo-entertainment/category": { + "/yahoo-finance/ticker/{symbol}/valuation": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Yahoo Entertainment section's editorial story feed: title, destination URL, category, and thumbnail image for each story, with page-based pagination. Sourced from Yahoo Entertainment's own server-rendered section pages.", - "operationId": "yahoo-entertainment-category", + "description": "Returns the valuation measures table from Yahoo Finance key statistics for a `symbol` such as `AAPL`, as `headers` and `rows` keyed by column, for example Market Cap. Returns an upstream error when Yahoo does not serve the table.", + "operationId": "yahoo-finance-ticker-valuation", "parameters": [ { - "description": "Yahoo Entertainment section", - "enum": [ - "celebrity", - "movies", - "music", - "tv" - ], - "in": "query", - "name": "category", + "description": "Yahoo Finance symbol such as AAPL", + "in": "path", + "name": "symbol", "required": true, "type": "string", - "x-example": "celebrity" - }, - { - "description": "1-based page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "x-example": "AAPL" } ], "produces": [ @@ -562959,7 +647291,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahooentertainment.categoryResponseDoc" + "$ref": "#/definitions/yahoofinance.valuationResponseDoc" } }, "400": { @@ -562974,12 +647306,6 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "500": { "description": "Internal Server Error", "schema": { @@ -562998,19 +647324,35 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Entertainment section story stream", + "summary": "Yahoo Finance valuation measures", "tags": [ - "Yahoo Entertainment" + "Yahoo Finance" ] } }, - "/yahoo-entertainment/home": { + "/yahoo-finance/trending/{region}": { "get": { "consumes": [ "application/json" ], - "description": "Returns Yahoo Entertainment's homepage editorial story feed: title, destination URL, category, and thumbnail image for each story. Sourced from Yahoo Entertainment's own server-rendered homepage.", - "operationId": "yahoo-entertainment-home", + "description": "Returns the symbols Yahoo Finance lists as trending in a `region` such as `US`. `count` sets how many. The response has `region`, `count`, the `symbols`, and the `job_timestamp` and `start_interval` fields.", + "operationId": "yahoo-finance-trending", + "parameters": [ + { + "description": "Region such as US", + "in": "path", + "name": "region", + "required": true, + "type": "string", + "x-example": "US" + }, + { + "description": "Symbol count", + "in": "query", + "name": "count", + "type": "integer" + } + ], "produces": [ "application/json" ], @@ -563018,11 +647360,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahooentertainment.homeResponseDoc" + "$ref": "#/definitions/yahoofinance.trendingResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } @@ -563045,19 +647393,29 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Entertainment homepage story stream", + "summary": "Yahoo Finance trending symbols", "tags": [ - "Yahoo Entertainment" + "Yahoo Finance" ] } }, - "/yahoo-finance/calendars": { + "/yahoo-health/article": { "get": { "consumes": [ "application/json" ], - "description": "Lists the Yahoo Finance calendar types available through the API: `earnings`, `ipo`, `economic-events` and `splits`. The list is static. Takes no parameters.", - "operationId": "yahoo-finance-calendars", + "description": "Returns a single Yahoo Health article's full content: title, description, author, publish/update time, section, image, keywords, original publisher, and body paragraphs. Accepts a canonical health.yahoo.com article URL, such as one returned by the home or category story streams.", + "operationId": "yahoo-health-article", + "parameters": [ + { + "description": "Canonical health.yahoo.com article URL", + "in": "query", + "name": "url", + "required": true, + "type": "string", + "x-example": "https://health.yahoo.com/wellness/article/example-headline-000000000.html" + } + ], "produces": [ "application/json" ], @@ -563065,7 +647423,25 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.calendarsResponseDoc" + "$ref": "#/definitions/yahoohealth.articleResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" } }, "500": { @@ -563073,6 +647449,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -563080,69 +647462,42 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance calendar types", + "summary": "Yahoo Health article content", "tags": [ - "Yahoo Finance" + "Yahoo Health" ] } }, - "/yahoo-finance/calendars/{type}": { + "/yahoo-health/category": { "get": { "consumes": [ "application/json" ], - "description": "Returns Yahoo Finance calendar rows for the path `type`: `earnings`, `ipo`, `economic-events` or `splits`. Narrow with `start` and `end` (YYYY-MM-DD, RFC3339 or Unix seconds) and page with `limit` (max 100) and `offset`. For `earnings` only, `market_cap` sets a minimum and `filter_most_active` (default true) filters. The response echoes the window and paging with the `rows`.", - "operationId": "yahoo-finance-calendar", + "description": "Returns a Yahoo Health section's editorial story feed: title, destination URL, category, and thumbnail image for each story, with page-based pagination. Sourced from Yahoo Health's own server-rendered section pages.", + "operationId": "yahoo-health-category", "parameters": [ { - "description": "Calendar type: earnings, ipo, economic-events, or splits", + "description": "Yahoo Health section", "enum": [ - "earnings", - "ipo", - "economic-events", - "splits" + "conditions", + "general", + "healthcare", + "treatments", + "wellness", + "your-body" ], - "in": "path", - "name": "type", + "in": "query", + "name": "category", "required": true, "type": "string", - "x-example": "earnings" - }, - { - "description": "Start date as YYYY-MM-DD, RFC3339, or Unix seconds", - "in": "query", - "name": "start", - "type": "string" - }, - { - "description": "End date as YYYY-MM-DD, RFC3339, or Unix seconds", - "in": "query", - "name": "end", - "type": "string" - }, - { - "description": "Result count, max 100", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Result offset", - "in": "query", - "name": "offset", - "type": "integer" - }, - { - "description": "Earnings-only market cap minimum", - "in": "query", - "name": "market_cap", - "type": "number" + "x-example": "wellness" }, { - "description": "Earnings-only most-active filter, default true", + "description": "1-based page number, defaults to 1", "in": "query", - "name": "filter_most_active", - "type": "boolean" + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -563152,7 +647507,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.calendarResponseDoc" + "$ref": "#/definitions/yahoohealth.categoryResponseDoc" } }, "400": { @@ -563167,6 +647522,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -563185,28 +647546,74 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance calendar results", + "summary": "Yahoo Health section story stream", "tags": [ - "Yahoo Finance" + "Yahoo Health" ] } }, - "/yahoo-finance/download": { - "post": { + "/yahoo-health/home": { + "get": { "consumes": [ "application/json" ], - "description": "Returns historical prices for up to 25 symbols in one POST. The body requires `symbols`; `period`, `start`, `end`, `interval`, `include_prepost` and `include_actions` are optional. Each result is one symbol, with price points (open, high, low, close, adjusted close, volume) and dividend, split and capital-gain events, or an `error` for that symbol.", - "operationId": "yahoo-finance-download", + "description": "Returns Yahoo Health's homepage editorial story feed: title, destination URL, category, and thumbnail image for each story. Sourced from Yahoo Health's own server-rendered homepage.", + "operationId": "yahoo-health-home", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/yahoohealth.homeResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Yahoo Health homepage story stream", + "tags": [ + "Yahoo Health" + ] + } + }, + "/yahoo-life/article": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a single Yahoo Life article's full content: title, description, author, publish/update time, section, image, keywords, original publisher, and body paragraphs. Accepts a canonical www.yahoo.com/lifestyle article URL, such as one returned by the home story stream.", + "operationId": "yahoo-life-article", "parameters": [ { - "description": "Batch download request", - "in": "body", - "name": "request", + "description": "Canonical www.yahoo.com/lifestyle article URL", + "in": "query", + "name": "url", "required": true, - "schema": { - "$ref": "#/definitions/yahoofinance.DownloadRequest" - } + "type": "string", + "x-example": "https://www.yahoo.com/lifestyle/article/example-headline-000000000.html" } ], "produces": [ @@ -563216,7 +647623,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.downloadResponseDoc" + "$ref": "#/definitions/yahoolife.articleResponseDoc" } }, "400": { @@ -563231,6 +647638,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -563249,19 +647662,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance batch historical prices", + "summary": "Yahoo Life article content", "tags": [ - "Yahoo Finance" + "Yahoo Life" ] } }, - "/yahoo-finance/industries": { + "/yahoo-life/home": { "get": { "consumes": [ "application/json" ], - "description": "Lists the Yahoo Finance industries, each with a `key` and a `name`. It takes no parameters. Pass a returned `key` to `/yahoo-finance/industries/{key}` for that industry's detail.", - "operationId": "yahoo-finance-industries", + "description": "Returns Yahoo Life's homepage editorial story feed: title, destination URL, and thumbnail image for each story. Sourced from Yahoo Life's own server-rendered homepage.", + "operationId": "yahoo-life-home", "produces": [ "application/json" ], @@ -563269,7 +647682,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.domainListResponseDoc" + "$ref": "#/definitions/yahoolife.homeResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" } }, "500": { @@ -563277,6 +647696,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -563284,27 +647709,27 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance industries", + "summary": "Yahoo Life homepage story stream", "tags": [ - "Yahoo Finance" + "Yahoo Life" ] } }, - "/yahoo-finance/industries/{key}": { + "/yahoo-news/article": { "get": { "consumes": [ "application/json" ], - "description": "Returns Yahoo Finance detail for one industry `key` such as `semiconductors`: name, overview, its parent sector (`sector_key`, `sector_name`), top companies, top performing companies, top growth companies and research reports. Valid keys come from `/yahoo-finance/industries`.", - "operationId": "yahoo-finance-industry", + "description": "Returns a single Yahoo News article's full content: headline, description, author, publish/update time, section, image, keywords, original publisher, and body paragraphs. Accepts a canonical yahoo.com/news article URL, such as one returned by the home or category story streams.", + "operationId": "yahoo-news-article", "parameters": [ { - "description": "Industry key such as semiconductors", - "in": "path", - "name": "key", + "description": "Canonical www.yahoo.com/news article URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "semiconductors" + "x-example": "https://www.yahoo.com/news/politics/articles/example-headline-000000000.html" } ], "produces": [ @@ -563314,7 +647739,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.industryResponseDoc" + "$ref": "#/definitions/yahoonews.articleResponseDoc" } }, "400": { @@ -563329,6 +647754,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -563347,55 +647778,35 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance industry detail", + "summary": "Yahoo News article content", "tags": [ - "Yahoo Finance" + "Yahoo News" ] } }, - "/yahoo-finance/lookup": { + "/yahoo-news/category": { "get": { "consumes": [ "application/json" ], - "description": "Looks up instruments on Yahoo Finance by ticker symbol or company name, optionally filtered to one type: equity, ETF, mutual fund, index, future, currency or cryptocurrency. Page with `count` and `start`. Returns the matching instruments, each with its symbol, short name, quote type and exchange, and the total.", - "operationId": "yahoo-finance-lookup", + "description": "Returns a Yahoo News section's story stream: title, destination URL, summary, source, publish time, comment count, and thumbnail images for each story. Sourced from Yahoo News's own server-rendered section pages.", + "operationId": "yahoo-news-category", "parameters": [ { - "description": "Ticker symbol or company name", - "in": "query", - "name": "query", - "required": true, - "type": "string", - "x-example": "apple" - }, - { - "description": "Instrument type filter", + "description": "Yahoo News section", "enum": [ - "all", - "equity", - "etf", - "mutualfund", - "index", - "future", - "currency", - "cryptocurrency" + "us", + "world", + "politics", + "science", + "weather-news", + "originals" ], "in": "query", - "name": "type", - "type": "string" - }, - { - "description": "Result count", - "in": "query", - "name": "count", - "type": "integer" - }, - { - "description": "Result offset", - "in": "query", - "name": "start", - "type": "integer" + "name": "category", + "required": true, + "type": "string", + "x-example": "politics" } ], "produces": [ @@ -563405,7 +647816,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.lookupResponseDoc" + "$ref": "#/definitions/yahoonews.categoryResponseDoc" } }, "400": { @@ -563420,6 +647831,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -563438,27 +647855,53 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance lookup", + "summary": "Yahoo News section story stream", "tags": [ - "Yahoo Finance" + "Yahoo News" ] } }, - "/yahoo-finance/market/{market}/status": { + "/yahoo-news/comments": { "get": { "consumes": [ "application/json" ], - "description": "Returns whether a Yahoo Finance market is open or closed, for the path `market` such as `US`. The response has `market` and a `status` object with the market id, name and its current open or closed state.", - "operationId": "yahoo-finance-market-status", + "description": "Returns a page of an article's top-level comments: author, body, reaction counts, reply count, and pin status, with sort order and cursor-based pagination. Sourced from Yahoo's own comment platform gateway.", + "operationId": "yahoo-news-comments", "parameters": [ { - "description": "Market such as US", - "in": "path", - "name": "market", + "description": "Article id (the id field returned by home/category/article)", + "in": "query", + "name": "content_id", "required": true, "type": "string", - "x-example": "US" + "x-example": "70253ef0-7509-31ec-aabf-d8e369db3f73" + }, + { + "description": "Sort order, defaults to top", + "enum": [ + "top", + "popular", + "newest", + "oldest" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "top" + }, + { + "description": "Pagination cursor from a previous response's next_cursor", + "in": "query", + "name": "cursor", + "type": "string" + }, + { + "description": "Number of comments to return, default 10, clamped to 1..50", + "in": "query", + "name": "count", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -563468,7 +647911,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.marketStatusResponseDoc" + "$ref": "#/definitions/yahoonews.commentsResponseDoc" } }, "400": { @@ -563477,8 +647920,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -563501,27 +647944,59 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance market status", + "summary": "Yahoo News article comments", "tags": [ - "Yahoo Finance" + "Yahoo News" ] } }, - "/yahoo-finance/market/{market}/summary": { + "/yahoo-news/comments/replies": { "get": { "consumes": [ "application/json" ], - "description": "Returns the market summary rows for a Yahoo Finance `market` such as `US`, as a `summary` list of instruments, each with fields such as `symbol` and `shortName`.", - "operationId": "yahoo-finance-market-summary", + "description": "Returns a page of a comment's replies: author, body, reaction counts, and pin status, with sort order and cursor-based pagination. Sourced from Yahoo's own comment platform gateway.", + "operationId": "yahoo-news-comment-replies", "parameters": [ { - "description": "Market such as US", - "in": "path", - "name": "market", + "description": "Article id (the id field returned by home/category/article)", + "in": "query", + "name": "content_id", "required": true, "type": "string", - "x-example": "US" + "x-example": "afd0da86-88c7-320f-a3c9-d1dcad7920c7" + }, + { + "description": "Parent comment id (the id field returned by /yahoo-news/comments)", + "in": "query", + "name": "comment_id", + "required": true, + "type": "string", + "x-example": "f1168670-2356-4bcf-bfb9-240b8e4964b1" + }, + { + "description": "Sort order, defaults to newest", + "enum": [ + "newest", + "oldest" + ], + "in": "query", + "name": "sort", + "type": "string", + "x-example": "newest" + }, + { + "description": "Pagination cursor from a previous response's next_cursor", + "in": "query", + "name": "cursor", + "type": "string" + }, + { + "description": "Number of replies to return, default 10, clamped to 1..50", + "in": "query", + "name": "count", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -563531,7 +648006,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.marketSummaryResponseDoc" + "$ref": "#/definitions/yahoonews.repliesResponseDoc" } }, "400": { @@ -563540,8 +648015,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -563564,28 +648039,87 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance market summary", + "summary": "Yahoo News comment replies", "tags": [ - "Yahoo Finance" + "Yahoo News" ] } }, - "/yahoo-finance/screener": { - "post": { + "/yahoo-news/home": { + "get": { "consumes": [ "application/json" ], - "description": "Runs a custom Yahoo Finance screen from a JSON body. `query` is a tree of `operator` and `operands`: combine conditions with `AND` or `OR`, and compare a field to a value with operators such as `EQ` or `GT`. Screen equities (default), ETFs or mutual funds with `quote_type`, and page and sort with `count`, `offset`, `sort_field` and `sort_asc`. Returns the matching quotes and the total.", - "operationId": "yahoo-finance-screener-custom", + "description": "Returns Yahoo News's homepage \"need to know\" story stream: title, destination URL, summary, source, publish time, comment count, and thumbnail images for each story. Sourced from Yahoo News's own server-rendered homepage.", + "operationId": "yahoo-news-home", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/yahoonews.homeResponseDoc" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Yahoo News homepage story stream", + "tags": [ + "Yahoo News" + ] + } + }, + "/yahoo-news/related": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Returns a page of articles Yahoo recommends alongside a given article -- the \"you may also like\" strip at the bottom of an article page -- with cursor-based pagination. Sourced from Yahoo's own recommendation gateway.", + "operationId": "yahoo-news-related", "parameters": [ { - "description": "JSON body for a custom screen. The query field is required; quote_type, count, offset, sort_field, and sort_asc are optional.", - "in": "body", - "name": "request", + "description": "Article id (the id field returned by home/category/article)", + "in": "query", + "name": "content_id", "required": true, - "schema": { - "$ref": "#/definitions/yahoofinance.ScreenerRequest" - } + "type": "string", + "x-example": "6463c2b7-dfa6-3313-9e0d-a0b1cb5e6506" + }, + { + "description": "Pagination cursor from a previous response's next_cursor", + "in": "query", + "name": "cursor", + "type": "string" + }, + { + "description": "Number of related articles to return, default 10, clamped to 1..50", + "in": "query", + "name": "count", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -563595,7 +648129,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.screenerResponseDoc" + "$ref": "#/definitions/yahoonews.relatedResponseDoc" } }, "400": { @@ -563604,8 +648138,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -563628,51 +648162,34 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance custom screener", + "summary": "Yahoo News related articles", "tags": [ - "Yahoo Finance" + "Yahoo News" ] } }, - "/yahoo-finance/screener/{id}": { + "/yahoo-news/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Runs a predefined Yahoo Finance screener by `id`, such as `day_gainers` or `most_actives`. `count` and `offset` page the results; `sort_field` and `sort_asc` change the order. The response has the screener `title`, `description`, `total`, `meta` and the matching `quotes`. Valid ids come from `/yahoo-finance/screeners`.", - "operationId": "yahoo-finance-screener", + "description": "Returns Yahoo News search-box autocomplete suggestions for the required partial query `q`, as a flat list of suggested news search terms in `suggestions`. `count` sets how many (default 10, clamped to 1 to 20). A query with no matches returns an empty array, not an error. The response also has `query` and `fetched_at`.", + "operationId": "yahoo-news-suggest", "parameters": [ { - "description": "Predefined screener id", - "in": "path", - "name": "id", + "description": "Partial search query to autocomplete", + "in": "query", + "name": "q", "required": true, "type": "string", - "x-example": "day_gainers" + "x-example": "chatgpt" }, { - "description": "Result count", + "description": "Number of suggestions to return, default 10, clamped to 1..20", "in": "query", "name": "count", - "type": "integer" - }, - { - "description": "Result offset", - "in": "query", - "name": "offset", - "type": "integer" - }, - { - "description": "Sort field for offset/customized runs", - "in": "query", - "name": "sort_field", - "type": "string" - }, - { - "description": "Sort ascending", - "in": "query", - "name": "sort_asc", - "type": "boolean" + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -563682,7 +648199,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.screenerResponseDoc" + "$ref": "#/definitions/yahoonews.suggestResponseDoc" } }, "400": { @@ -563691,8 +648208,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -563715,19 +648232,29 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance predefined screener results", + "summary": "Yahoo News search autocomplete suggestions", "tags": [ - "Yahoo Finance" + "Yahoo News" ] } }, - "/yahoo-finance/screeners": { + "/yahoo-search/images": { "get": { "consumes": [ "application/json" ], - "description": "Lists the predefined Yahoo Finance screeners that can be run, such as `day_gainers`, `day_losers` and `most_actives`, as a `screeners` list of ids. It takes no parameters. Pass an id to `/yahoo-finance/screener/{id}`.", - "operationId": "yahoo-finance-screeners", + "description": "Returns Yahoo's image-search results for a query: title, direct image URL, the page hosting the image, source domain, thumbnail, and original image dimensions when available. Results are fetched from Yahoo's own server-rendered image-search page.", + "operationId": "yahoo-search-images", + "parameters": [ + { + "description": "Search query", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "chatgpt" + } + ], "produces": [ "application/json" ], @@ -563735,7 +648262,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.screenersResponseDoc" + "$ref": "#/definitions/yahoosearch.imagesResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" } }, "500": { @@ -563743,6 +648282,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -563750,57 +648295,27 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance predefined screeners", + "summary": "Search Yahoo image results", "tags": [ - "Yahoo Finance" + "Yahoo Search" ] } }, - "/yahoo-finance/search": { + "/yahoo-search/local": { "get": { "consumes": [ "application/json" ], - "description": "Searches Yahoo Finance for the required `q`, a ticker symbol or company name, and returns matching `quotes`, `news` and `lists`, plus `research` reports when `include_research` is set and Yahoo returns them. `quotes_count`, `news_count` and `lists_count` set how many of each; `enable_fuzzy_query` turns on fuzzy matching.", - "operationId": "yahoo-finance-search", + "description": "Returns Yahoo's local-business-search results for a query: name, category, price range, address, phone, open status, rating, and review count. Location is resolved from the query text itself, the same way a user would type into Yahoo's own local search box (e.g. \"pizza near seattle wa\"), not a separate coordinate parameter. Results are fetched from Yahoo's own server-rendered local-search page.", + "operationId": "yahoo-search-local", "parameters": [ { - "description": "Ticker symbol or company name", + "description": "Search query, including any location intent", "in": "query", "name": "q", "required": true, "type": "string", - "x-example": "apple" - }, - { - "description": "Quote result count", - "in": "query", - "name": "quotes_count", - "type": "integer" - }, - { - "description": "News result count", - "in": "query", - "name": "news_count", - "type": "integer" - }, - { - "description": "List result count", - "in": "query", - "name": "lists_count", - "type": "integer" - }, - { - "description": "Include research reports when Yahoo returns them", - "in": "query", - "name": "include_research", - "type": "boolean" - }, - { - "description": "Enable fuzzy matching", - "in": "query", - "name": "enable_fuzzy_query", - "type": "boolean" + "x-example": "pizza near seattle wa" } ], "produces": [ @@ -563810,7 +648325,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.searchResponseDoc" + "$ref": "#/definitions/yahoosearch.localResponseDoc" } }, "400": { @@ -563819,8 +648334,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -563843,19 +648358,29 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance search", + "summary": "Search Yahoo local business results", "tags": [ - "Yahoo Finance" + "Yahoo Search" ] } }, - "/yahoo-finance/sectors": { + "/yahoo-search/news": { "get": { "consumes": [ "application/json" ], - "description": "Lists the Yahoo Finance sectors, each with a `key` and a `name`. It takes no parameters. Use a returned `key` with `/yahoo-finance/sectors/{key}` to get that sector's companies, funds and industries.", - "operationId": "yahoo-finance-sectors", + "description": "Returns Yahoo's news-search results for a query: title, destination URL, description, source, and relative publish age. Results are fetched from Yahoo's own server-rendered news-search page (news.search.yahoo.com) -- a distinct product from the yahoo-news family, which covers the www.yahoo.com/news portal itself. Yahoo wraps every result link in its own click-tracking redirect; this endpoint always returns the decoded destination URL, never the raw redirect link.", + "operationId": "yahoo-search-news", + "parameters": [ + { + "description": "Search query", + "in": "query", + "name": "q", + "required": true, + "type": "string", + "x-example": "chatgpt" + } + ], "produces": [ "application/json" ], @@ -563863,7 +648388,19 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.domainListResponseDoc" + "$ref": "#/definitions/yahoosearch.newsResponseDoc" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" } }, "500": { @@ -563871,6 +648408,12 @@ "schema": { "$ref": "#/definitions/app.Response" } + }, + "503": { + "description": "Service Unavailable", + "schema": { + "$ref": "#/definitions/app.Response" + } } }, "security": [ @@ -563878,27 +648421,46 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance sectors", + "summary": "Search Yahoo news results", "tags": [ - "Yahoo Finance" + "Yahoo Search" ] } }, - "/yahoo-finance/sectors/{key}": { + "/yahoo-search/search": { "get": { "consumes": [ "application/json" ], - "description": "Returns Yahoo Finance detail for one sector `key` such as `technology`: name, overview, top companies, top ETFs, top mutual funds, the sector's industries and research reports. Valid keys come from `/yahoo-finance/sectors`.", - "operationId": "yahoo-finance-sector", + "description": "Returns Yahoo web search results for a query string: title, destination URL, description, and hostname, plus page-based pagination. Yahoo wraps every result link in its own click-tracking redirect; this endpoint always returns the decoded destination URL, never the raw redirect link.", + "operationId": "yahoo-search", "parameters": [ { - "description": "Sector key such as technology", - "in": "path", - "name": "key", + "description": "Search query", + "in": "query", + "name": "q", "required": true, "type": "string", - "x-example": "technology" + "x-example": "openai" + }, + { + "description": "1-based page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 + }, + { + "description": "Restrict results by recency. Omit for unfiltered ('Anytime').", + "enum": [ + "day", + "week", + "month" + ], + "in": "query", + "name": "time_range", + "type": "string", + "x-example": "week" } ], "produces": [ @@ -563908,7 +648470,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.sectorResponseDoc" + "$ref": "#/definitions/yahoosearch.searchResponseDoc" } }, "400": { @@ -563923,6 +648485,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -563941,27 +648509,34 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance sector detail", + "summary": "Search Yahoo web results", "tags": [ - "Yahoo Finance" + "Yahoo Search" ] } }, - "/yahoo-finance/ticker/{symbol}/actions": { + "/yahoo-search/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns the corporate actions for a Yahoo Finance `symbol` such as `AAPL`: `dividends`, `splits` and `capital_gains`. Dividend and capital-gain entries carry a Unix timestamp and an amount; split entries carry a ratio such as `4:1`.", - "operationId": "yahoo-finance-ticker-actions", + "description": "Returns Yahoo's own search-box autocomplete suggestions for a partial query: a flat list of suggested search terms, each optionally carrying knowledge-panel entity metadata (type, image, subtitle, description) when Yahoo resolves the term to a known company, place, product, or similar entity rather than a plain phrase.", + "operationId": "yahoo-search-suggest", "parameters": [ { - "description": "Yahoo Finance symbol such as AAPL", - "in": "path", - "name": "symbol", + "description": "Partial search query to autocomplete", + "in": "query", + "name": "q", "required": true, "type": "string", - "x-example": "AAPL" + "x-example": "chatgpt" + }, + { + "description": "Number of suggestions to return, default 10, clamped to 1..20", + "in": "query", + "name": "count", + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -563971,7 +648546,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.actionsResponseDoc" + "$ref": "#/definitions/yahoosearch.suggestResponseDoc" } }, "400": { @@ -563980,8 +648555,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -564004,27 +648579,27 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance corporate actions", + "summary": "Yahoo web search autocomplete suggestions", "tags": [ - "Yahoo Finance" + "Yahoo Search" ] } }, - "/yahoo-finance/ticker/{symbol}/analysts": { + "/yahoo-search/videos": { "get": { "consumes": [ "application/json" ], - "description": "Returns analyst data for a Yahoo Finance `symbol` such as `AAPL`, as `modules` keyed by Yahoo module name: recommendation trend, upgrade and downgrade history, price targets and estimates, where Yahoo provides them.", - "operationId": "yahoo-finance-ticker-analysts", + "description": "Returns Yahoo's video-search results for a query: title, destination page URL, source domain, description, thumbnail, and duration. Results are fetched from Yahoo's own server-rendered video-search page.", + "operationId": "yahoo-search-videos", "parameters": [ { - "description": "Yahoo Finance symbol such as AAPL", - "in": "path", - "name": "symbol", + "description": "Search query", + "in": "query", + "name": "q", "required": true, "type": "string", - "x-example": "AAPL" + "x-example": "chatgpt" } ], "produces": [ @@ -564034,7 +648609,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.moduleResponseDoc" + "$ref": "#/definitions/yahoosearch.videosResponseDoc" } }, "400": { @@ -564043,8 +648618,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -564067,27 +648642,27 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance analyst data", + "summary": "Search Yahoo video results", "tags": [ - "Yahoo Finance" + "Yahoo Search" ] } }, - "/yahoo-finance/ticker/{symbol}/calendar": { + "/yahoo-shopping/article": { "get": { "consumes": [ "application/json" ], - "description": "Returns the calendar events Yahoo Finance holds for a `symbol` such as `AAPL`, under `modules.calendarEvents`. The response echoes the `symbol`, and the symbol is the only input.", - "operationId": "yahoo-finance-ticker-calendar", + "description": "Returns a single Yahoo Shopping article's full content: title, description, author, publish/update time, section, image, keywords, original publisher, and body paragraphs. Accepts a canonical shopping.yahoo.com article URL, such as one returned by the home or category story streams.", + "operationId": "yahoo-shopping-article", "parameters": [ { - "description": "Yahoo Finance symbol such as AAPL", - "in": "path", - "name": "symbol", + "description": "Canonical shopping.yahoo.com article URL", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "AAPL" + "x-example": "https://shopping.yahoo.com/style/clothing/article/example-headline-000000000.html" } ], "produces": [ @@ -564097,7 +648672,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.moduleResponseDoc" + "$ref": "#/definitions/yahooshopping.articleResponseDoc" } }, "400": { @@ -564112,6 +648687,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -564130,27 +648711,34 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance calendar", + "summary": "Yahoo Shopping article content", "tags": [ - "Yahoo Finance" + "Yahoo Shopping" ] } }, - "/yahoo-finance/ticker/{symbol}/capital-gains": { + "/yahoo-shopping/author": { "get": { "consumes": [ "application/json" ], - "description": "Returns capital gain events for a Yahoo Finance `symbol`, mainly ETFs and mutual funds such as `SPY`, each with a Unix timestamp and an amount, when Yahoo provides them. The response object also has `dividends` and `splits` fields.", - "operationId": "yahoo-finance-ticker-capital-gains", + "description": "Fetches one Yahoo Shopping contributor profile and a page of the author's article archive. Use the author slug from author_url in /yahoo-shopping/article; page follows Yahoo's path-segment pagination. Article cards may link to sibling publishers such as AOL.", + "operationId": "yahoo-shopping-author", "parameters": [ { - "description": "Yahoo Finance symbol such as SPY", - "in": "path", - "name": "symbol", + "description": "Yahoo Shopping author slug; use author_url from /yahoo-shopping/article", + "in": "query", + "name": "author", "required": true, "type": "string", - "x-example": "SPY" + "x-example": "rebecca-carhart" + }, + { + "description": "1-based article archive page, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -564160,7 +648748,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.actionsResponseDoc" + "$ref": "#/definitions/yahooshopping.authorResponseDoc" } }, "400": { @@ -564175,6 +648763,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -564193,29 +648787,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance capital gains", + "summary": "Yahoo Shopping author profile and article archive", "tags": [ - "Yahoo Finance" + "Yahoo Shopping" ] } }, - "/yahoo-finance/ticker/{symbol}/dividends": { + "/yahoo-shopping/categories": { "get": { "consumes": [ "application/json" ], - "description": "Returns the dividend events for a Yahoo Finance `symbol` such as `AAPL`, each with a Unix timestamp and an amount. The response object also has `splits` and `capital_gains` fields.", - "operationId": "yahoo-finance-ticker-dividends", - "parameters": [ - { - "description": "Yahoo Finance symbol such as AAPL", - "in": "path", - "name": "symbol", - "required": true, - "type": "string", - "x-example": "AAPL" - } - ], + "description": "Returns the live editorial sections and nested topics accepted by /yahoo-shopping/category, plus the current direct article shortcuts in the Gift Ideas and Shopping Guides menus. Those article links are not extra category or filter values. Stores and Shopping Lists have separate directory endpoints.", + "operationId": "yahoo-shopping-categories", "produces": [ "application/json" ], @@ -564223,17 +648807,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.actionsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/yahooshopping.categoriesResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -564256,27 +648834,55 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance dividends", + "summary": "Yahoo Shopping navigation and article shortcuts", "tags": [ - "Yahoo Finance" + "Yahoo Shopping" ] } }, - "/yahoo-finance/ticker/{symbol}/earnings": { + "/yahoo-shopping/category": { "get": { "consumes": [ "application/json" ], - "description": "Returns the Yahoo Finance earnings modules for a `symbol` such as `AAPL`, including `earnings` and `earningsTrend`, under `modules`. The response echoes the `symbol`, and the symbol is the only input.", - "operationId": "yahoo-finance-ticker-earnings", + "description": "Returns the story cards displayed by a Yahoo Shopping section or nested topic, with page-based pagination. Some curated sections include cross-category or sibling Yahoo links. Use /yahoo-shopping/categories to discover the complete parent/topic taxonomy.", + "operationId": "yahoo-shopping-category", "parameters": [ { - "description": "Yahoo Finance symbol such as AAPL", - "in": "path", - "name": "symbol", + "description": "Yahoo Shopping section", + "enum": [ + "style", + "beauty", + "health", + "home-garden", + "tech", + "gift-ideas", + "guides", + "code-orange", + "deals", + "toys-games", + "general", + "pets" + ], + "in": "query", + "name": "category", "required": true, "type": "string", - "x-example": "AAPL" + "x-example": "style" + }, + { + "description": "Nested topic slug valid under its parent category; see /yahoo-shopping/categories", + "in": "query", + "name": "subcategory", + "type": "string", + "x-example": "shoes" + }, + { + "description": "1-based page number, defaults to 1", + "in": "query", + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -564286,7 +648892,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.moduleResponseDoc" + "$ref": "#/definitions/yahooshopping.categoryResponseDoc" } }, "400": { @@ -564301,6 +648907,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -564319,41 +648931,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance earnings", + "summary": "Yahoo Shopping section story stream", "tags": [ - "Yahoo Finance" + "Yahoo Shopping" ] } }, - "/yahoo-finance/ticker/{symbol}/earnings-dates": { + "/yahoo-shopping/experts": { "get": { "consumes": [ "application/json" ], - "description": "Returns earnings-date rows for a Yahoo Finance `symbol`, taken from Yahoo's earnings calendar table. `limit` (max 100) and `offset` page the rows. Each row is keyed by the table's column names, such as `Earnings Date`. Returns an upstream error when Yahoo does not serve the table.", - "operationId": "yahoo-finance-ticker-earnings-dates", - "parameters": [ - { - "description": "Yahoo Finance symbol such as AAPL", - "in": "path", - "name": "symbol", - "required": true, - "type": "string", - "x-example": "AAPL" - }, - { - "description": "Result count, max 100", - "in": "query", - "name": "limit", - "type": "integer" - }, - { - "description": "Result offset", - "in": "query", - "name": "offset", - "type": "integer" - } - ], + "description": "Returns the contributor cards in the public \"More Yahoo experts\" carousel on Yahoo Shopping's team profile. Use yahoo-shopping-author for one contributor's profile and paginated article archive.", + "operationId": "yahoo-shopping-experts", "produces": [ "application/json" ], @@ -564361,17 +648951,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.earningsDatesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/yahooshopping.expertsResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -564394,52 +648978,26 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance earnings dates", + "summary": "Yahoo Shopping featured expert roster", "tags": [ - "Yahoo Finance" + "Yahoo Shopping" ] } }, - "/yahoo-finance/ticker/{symbol}/financials": { + "/yahoo-shopping/home": { "get": { "consumes": [ "application/json" ], - "description": "Returns financial statement data for a Yahoo Finance `symbol`. `statement` picks `income`, `balance-sheet` or `cash-flow` (aliases `income-statement`, `balance` and `cashflow` also work) and `period` picks `annual`, `quarterly` or `trailing`; trailing is supported for income and cash flow only. The response echoes `statement` and `period`, with the data under `modules`.", - "operationId": "yahoo-finance-ticker-financials", + "description": "Returns Yahoo Shopping's homepage editorial story feed: title, destination URL, category, and thumbnail image for each story. Page follows Yahoo's own path-segment pagination. This is Yahoo's shopping buying-guide/deals content site, not a product-results API.", + "operationId": "yahoo-shopping-home", "parameters": [ { - "description": "Yahoo Finance symbol such as AAPL", - "in": "path", - "name": "symbol", - "required": true, - "type": "string", - "x-example": "AAPL" - }, - { - "description": "Statement type. Allowed values: income (alias income-statement), balance-sheet (alias balance), cash-flow (alias cashflow)", - "enum": [ - "income", - "income-statement", - "balance-sheet", - "balance", - "cash-flow", - "cashflow" - ], - "in": "query", - "name": "statement", - "type": "string" - }, - { - "description": "annual, quarterly, or trailing", - "enum": [ - "annual", - "quarterly", - "trailing" - ], + "description": "1-based page number, defaults to 1", "in": "query", - "name": "period", - "type": "string" + "name": "page", + "type": "integer", + "x-example": 1 } ], "produces": [ @@ -564449,17 +649007,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.financialsResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/yahooshopping.homeResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -564482,27 +649034,27 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance financial statements", + "summary": "Yahoo Shopping homepage story stream", "tags": [ - "Yahoo Finance" + "Yahoo Shopping" ] } }, - "/yahoo-finance/ticker/{symbol}/funds": { + "/yahoo-shopping/shopping-list": { "get": { "consumes": [ "application/json" ], - "description": "Returns fund data for an ETF or mutual fund `symbol` such as `SPY`, under `modules`: the fund profile, top holdings, equity holdings, bond holdings and sector weightings.", - "operationId": "yahoo-finance-ticker-funds", + "description": "Returns one curated Yahoo Shopping list's items: product title, direct destination URL, image, seller, currency, price, and sale price for each item. Sourced from the list page's own product cards. Use GET /yahoo-shopping/shopping-lists to find a list's slug.", + "operationId": "yahoo-shopping-shopping-list", "parameters": [ { - "description": "Yahoo Finance symbol such as SPY", - "in": "path", - "name": "symbol", + "description": "List slug from GET /yahoo-shopping/shopping-lists", + "in": "query", + "name": "list", "required": true, "type": "string", - "x-example": "SPY" + "x-example": "cooling-essentials" } ], "produces": [ @@ -564512,7 +649064,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.moduleResponseDoc" + "$ref": "#/definitions/yahooshopping.shoppingListResponseDoc" } }, "400": { @@ -564527,6 +649079,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -564545,89 +649103,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance fund data", + "summary": "Yahoo Shopping curated list items", "tags": [ - "Yahoo Finance" + "Yahoo Shopping" ] } }, - "/yahoo-finance/ticker/{symbol}/history": { + "/yahoo-shopping/shopping-lists": { "get": { "consumes": [ "application/json" ], - "description": "Returns price points for a Yahoo Finance `symbol`: open, high, low, close, adjusted close and volume with timestamps. Use `period` (default `1mo`, up to `max`) or `start` and `end`, which override it. `interval` sets the candle size (default `1d`; intraday covers recent ranges only). `include_actions` adds dividend, split and capital-gain `events`.", - "operationId": "yahoo-finance-ticker-history", - "parameters": [ - { - "description": "Yahoo Finance symbol such as AAPL", - "in": "path", - "name": "symbol", - "required": true, - "type": "string", - "x-example": "AAPL" - }, - { - "description": "Range such as 1d, 1mo, 1y, max", - "in": "query", - "name": "period", - "type": "string" - }, - { - "description": "Unix seconds, RFC3339, or YYYY-MM-DD", - "in": "query", - "name": "start", - "type": "string" - }, - { - "description": "Unix seconds, RFC3339, or YYYY-MM-DD", - "in": "query", - "name": "end", - "type": "string" - }, - { - "description": "Interval such as 1d, 1h, 5m", - "in": "query", - "name": "interval", - "type": "string" - }, - { - "description": "Include pre/post market data", - "in": "query", - "name": "include_prepost", - "type": "boolean" - }, - { - "description": "Include dividends, splits, and capital gains", - "in": "query", - "name": "include_actions", - "type": "boolean" - }, - { - "description": "Adjust OHLC prices with adjusted close", - "in": "query", - "name": "auto_adjust", - "type": "boolean" - }, - { - "description": "Back-adjust OHLC prices while keeping close", - "in": "query", - "name": "back_adjust", - "type": "boolean" - }, - { - "description": "Keep fully empty chart rows", - "in": "query", - "name": "keepna", - "type": "boolean" - }, - { - "description": "Round prices to two decimals", - "in": "query", - "name": "rounding", - "type": "boolean" - } - ], + "description": "Returns Yahoo Shopping's curated shopping-lists directory: a slug, title, and image for each themed list (e.g. \"Cooling Essentials\", \"Back to School\"). Use a list's slug with GET /yahoo-shopping/shopping-list to read its items.", + "operationId": "yahoo-shopping-shopping-lists", "produces": [ "application/json" ], @@ -564635,17 +649123,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.historyResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/yahooshopping.shoppingListsResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -564668,27 +649150,27 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance historical prices", + "summary": "Yahoo Shopping curated shopping-lists directory", "tags": [ - "Yahoo Finance" + "Yahoo Shopping" ] } }, - "/yahoo-finance/ticker/{symbol}/history-metadata": { + "/yahoo-shopping/sitemap": { "get": { "consumes": [ "application/json" ], - "description": "Returns the chart metadata Yahoo Finance holds for a `symbol` such as `AAPL`, in `meta`, for example `currency` and `exchangeName`. The symbol is the only input.", - "operationId": "yahoo-finance-ticker-history-metadata", + "description": "Reads a canonical Yahoo Shopping sitemap index, section archive, or date page. Responses contain section archives, monthly archive links, day links, or article links depending on the page. Yahoo's date pages currently have broken previous/next links; this endpoint reports observed links and does not synthesize continuation.", + "operationId": "yahoo-shopping-sitemap", "parameters": [ { - "description": "Yahoo Finance symbol such as AAPL", - "in": "path", - "name": "symbol", + "description": "Canonical shopping.yahoo.com sitemap page URL from /yahoo-shopping/sitemaps or a prior response", + "in": "query", + "name": "url", "required": true, "type": "string", - "x-example": "AAPL" + "x-example": "https://shopping.yahoo.com/sitemap/style/" } ], "produces": [ @@ -564698,7 +649180,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.historyMetadataResponseDoc" + "$ref": "#/definitions/yahooshopping.sitemapPageResponseDoc" } }, "400": { @@ -564713,6 +649195,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -564731,29 +649219,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance history metadata", + "summary": "Yahoo Shopping sitemap archive or date page", "tags": [ - "Yahoo Finance" + "Yahoo Shopping" ] } }, - "/yahoo-finance/ticker/{symbol}/holders": { + "/yahoo-shopping/sitemaps": { "get": { "consumes": [ "application/json" ], - "description": "Returns holder data for a Yahoo Finance `symbol` such as `AAPL`, under `modules`: the major holders breakdown (`majorHoldersBreakdown`), institutional ownership, and the fund and insider holder modules.", - "operationId": "yahoo-finance-ticker-holders", - "parameters": [ - { - "description": "Yahoo Finance symbol such as AAPL", - "in": "path", - "name": "symbol", - "required": true, - "type": "string", - "x-example": "AAPL" - } - ], + "description": "Returns the public sitemap's full set of section and seasonal archive links. Use /yahoo-shopping/sitemap to read an archive or date page.", + "operationId": "yahoo-shopping-sitemaps", "produces": [ "application/json" ], @@ -564761,17 +649239,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.moduleResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/yahooshopping.sitemapsResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -564794,27 +649266,27 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance holders", + "summary": "Yahoo Shopping sitemap section index", "tags": [ - "Yahoo Finance" + "Yahoo Shopping" ] } }, - "/yahoo-finance/ticker/{symbol}/info": { + "/yahoo-shopping/store": { "get": { "consumes": [ "application/json" ], - "description": "Returns profile and quote information for a Yahoo Finance `symbol` such as `AAPL`, under `modules`: the profile, quote type (`quoteType`), price, statistics and summary modules. The symbol is the only input.", - "operationId": "yahoo-finance-ticker-info", + "description": "Returns one retailer's current deals on Yahoo Shopping: product title, direct retailer product URL, image, brand, currency, price, and sale price for each offer. Sourced from the retailer's shopping.yahoo.com store page's own structured product data -- not a keyword search, a fixed set of currently-featured deals for that retailer. Use GET /yahoo-shopping/stores to find a retailer's slug.", + "operationId": "yahoo-shopping-store", "parameters": [ { - "description": "Yahoo Finance symbol such as AAPL", - "in": "path", - "name": "symbol", + "description": "Retailer slug from GET /yahoo-shopping/stores", + "in": "query", + "name": "store", "required": true, "type": "string", - "x-example": "AAPL" + "x-example": "target" } ], "produces": [ @@ -564824,7 +649296,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.infoResponseDoc" + "$ref": "#/definitions/yahooshopping.storeResponseDoc" } }, "400": { @@ -564839,6 +649311,12 @@ "$ref": "#/definitions/app.Response" } }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, "500": { "description": "Internal Server Error", "schema": { @@ -564857,29 +649335,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance ticker info", + "summary": "Yahoo Shopping retailer store deals", "tags": [ - "Yahoo Finance" + "Yahoo Shopping" ] } }, - "/yahoo-finance/ticker/{symbol}/isin": { + "/yahoo-shopping/stores": { "get": { "consumes": [ "application/json" ], - "description": "Returns the ISIN for a Yahoo Finance `symbol`, for example `US0378331005` for `AAPL`. The lookup is experimental, and the `isin` field is `-` when none can be found.", - "operationId": "yahoo-finance-ticker-isin", - "parameters": [ - { - "description": "Yahoo Finance symbol such as AAPL", - "in": "path", - "name": "symbol", - "required": true, - "type": "string", - "x-example": "AAPL" - } - ], + "description": "Returns Yahoo Shopping's retailer store directory: a slug, display name, and logo image for each retailer with a dedicated store page (e.g. Amazon, Target, Best Buy). Use a store's slug with GET /yahoo-shopping/store to read its current deals.", + "operationId": "yahoo-shopping-stores", "produces": [ "application/json" ], @@ -564887,17 +649355,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.isinResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/yahooshopping.storesResponseDoc" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -564920,39 +649382,34 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance ticker ISIN", + "summary": "Yahoo Shopping retailer store directory", "tags": [ - "Yahoo Finance" + "Yahoo Shopping" ] } }, - "/yahoo-finance/ticker/{symbol}/news": { + "/yahoo-shopping/suggest": { "get": { "consumes": [ "application/json" ], - "description": "Returns the Yahoo Finance news stream for the ticker in the `symbol` path parameter, such as `AAPL`. `count` limits the items (default 8, max 250) and `tab` picks `news` (default), `all` or `press_releases`. Stories have title, provider, dates and URLs. A valid empty stream returns `news: []`.", - "operationId": "yahoo-finance-ticker-news", + "description": "Returns suggestions from the typeahead endpoint used by Yahoo Shopping's search box. Yahoo does not expose a working Shopping product-results grid or product filters; this route provides autocomplete only.", + "operationId": "yahoo-shopping-suggest", "parameters": [ { - "description": "Yahoo Finance symbol such as AAPL", - "in": "path", - "name": "symbol", + "description": "Partial search query", + "in": "query", + "name": "q", "required": true, "type": "string", - "x-example": "AAPL" + "x-example": "robot vacuum" }, { - "description": "News result count", + "description": "Upstream suggestion count; omitted defaults to 10, zero/negative values preserve Yahoo's empty-result behavior, and values above 20 are capped", "in": "query", "name": "count", - "type": "integer" - }, - { - "description": "News tab: news, all, or press_releases", - "in": "query", - "name": "tab", - "type": "string" + "type": "integer", + "x-example": 10 } ], "produces": [ @@ -564962,7 +649419,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.searchResponseDoc" + "$ref": "#/definitions/yahooshopping.suggestResponseDoc" } }, "400": { @@ -564971,8 +649428,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -564995,27 +649452,53 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance ticker news", + "summary": "Yahoo Shopping autocomplete suggestions", "tags": [ - "Yahoo Finance" + "Yahoo Shopping" ] } }, - "/yahoo-finance/ticker/{symbol}/options": { + "/yahoo-sports/college-rankings": { "get": { "consumes": [ "application/json" ], - "description": "Returns the option expiration dates (`expiration_dates`, as Unix timestamps) and the current option chain for a Yahoo Finance `symbol` such as `AAPL`. Each `options` entry has an `expiration_date` with its `calls` and `puts`; `underlying` describes the underlying security.", - "operationId": "yahoo-finance-ticker-options", + "description": "Returns rankings from Yahoo's public NCAAF, NCAAB, or NCAAW rankings page using the page's own public Graphite rankings operation. Poll Type and Poll Date are validated against the live filter catalog returned in this response. Conference filters are also returned, but are client-side on Yahoo's page and are not applied by this endpoint.", + "operationId": "yahoo-sports-college-rankings", "parameters": [ { - "description": "Yahoo Finance symbol such as AAPL", - "in": "path", - "name": "symbol", + "description": "College ranking league", + "enum": [ + "college-football", + "college-basketball", + "college-womens-basketball" + ], + "in": "query", + "name": "league", "required": true, "type": "string", - "x-example": "AAPL" + "x-example": "college-football" + }, + { + "description": "Exact Poll Type value from the live rankings filter catalog; defaults to the page's current poll", + "in": "query", + "name": "poll_type", + "type": "string", + "x-example": "AP_TOP_25" + }, + { + "description": "Exact Poll Date selector value from the live catalog (college football only)", + "in": "query", + "name": "date", + "type": "string", + "x-example": "2026-10-25-07:00" + }, + { + "description": "Optional IANA timezone for game times embedded in ranking rows; defaults to UTC", + "in": "query", + "name": "tz", + "type": "string", + "x-example": "Asia/Shanghai" } ], "produces": [ @@ -565025,7 +649508,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.optionsResponseDoc" + "$ref": "#/definitions/yahoosports.collegeRankingsResponseDoc" } }, "400": { @@ -565034,14 +649517,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -565058,35 +649535,44 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance options chain", + "summary": "Yahoo Sports college football and basketball rankings", "tags": [ - "Yahoo Finance" + "Yahoo Sports" ] } }, - "/yahoo-finance/ticker/{symbol}/options/{expiration}": { + "/yahoo-sports/draft": { "get": { "consumes": [ "application/json" ], - "description": "Returns the calls and puts for one expiration of a Yahoo Finance `symbol`. `expiration` is a Unix timestamp, and the options endpoint lists the available ones in `expiration_dates`. The result is an `options` entry with `expiration_date`, `calls` and `puts`.", - "operationId": "yahoo-finance-ticker-options-expiration", + "description": "Returns Yahoo's Drafted Players, Mock Draft, Big Board, or News tab for NFL or NBA, together with the live tab list and exact client-side round/team/position/school/attribute/board selectors shown by that page. The selectors filter data in the browser, so this endpoint returns the complete upstream page data and exposes filter values without applying server-side filters.", + "operationId": "yahoo-sports-draft", "parameters": [ { - "description": "Yahoo Finance symbol such as AAPL", - "in": "path", - "name": "symbol", + "description": "Yahoo draft league; use yahoo-sports-leagues (draft=true)", + "enum": [ + "nfl", + "nba" + ], + "in": "query", + "name": "league", "required": true, "type": "string", - "x-example": "AAPL" + "x-example": "nfl" }, { - "description": "Unix expiration timestamp", - "in": "path", - "name": "expiration", - "required": true, + "description": "Yahoo Draft page: results, mock, big-board, or news; defaults to results", + "enum": [ + "results", + "mock", + "big-board", + "news" + ], + "in": "query", + "name": "view", "type": "string", - "x-example": "1863475200" + "x-example": "results" } ], "produces": [ @@ -565096,7 +649582,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.optionsResponseDoc" + "$ref": "#/definitions/yahoosports.nflDraftResponseDoc" } }, "400": { @@ -565105,14 +649591,8 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -565129,29 +649609,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance options chain by expiration", + "summary": "Yahoo Sports NFL and NBA Draft hub", "tags": [ - "Yahoo Finance" + "Yahoo Sports" ] } }, - "/yahoo-finance/ticker/{symbol}/quote": { + "/yahoo-sports/dropdown-catalog": { "get": { "consumes": [ "application/json" ], - "description": "Returns fast quote fields for one Yahoo Finance `symbol` such as `AAPL`, for example `regularMarketPrice`, in a `quotes` list alongside the requested `symbols`. The symbol is the only input.", - "operationId": "yahoo-finance-ticker-quote", - "parameters": [ - { - "description": "Yahoo Finance symbol such as AAPL", - "in": "path", - "name": "symbol", - "required": true, - "type": "string", - "x-example": "AAPL" - } - ], + "description": "Returns Yahoo's full current menu data for NFL, NHL, NBA, MLB, WNBA, college rank polls, all soccer leagues exposed by the public dropdown operation, and sportsbook-legal states. Team and league objects retain Yahoo's IDs and links for use with matching Yahoo Sports endpoints.", + "operationId": "yahoo-sports-dropdown-catalog", "produces": [ "application/json" ], @@ -565159,23 +649629,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.quoteResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/yahoosports.dropdownCatalogResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -565192,27 +649650,71 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance ticker quote", + "summary": "Yahoo Sports team and category dropdown data", "tags": [ - "Yahoo Finance" + "Yahoo Sports" ] } }, - "/yahoo-finance/ticker/{symbol}/sec-filings": { + "/yahoo-sports/game": { "get": { "consumes": [ "application/json" ], - "description": "Returns the SEC filing summaries Yahoo Finance lists for a `symbol` such as `AAPL`, under `modules.secFilings`. The response echoes the `symbol`, and the symbol is the only input.", - "operationId": "yahoo-finance-ticker-sec-filings", + "description": "Returns one source game boxscore with matchup, line score and team stat totals, plus Yahoo's play-by-play and win-probability timeline when available. Event objects retain Yahoo's sport-specific fields. Use league plus game for direct league pages, or league=soccer with the exact game_url from a soccer scoreboard for competitions whose game path is published per match.", + "operationId": "yahoo-sports-game", "parameters": [ { - "description": "Yahoo Finance symbol such as AAPL", - "in": "path", - "name": "symbol", + "description": "League key", + "enum": [ + "nfl", + "nba", + "wnba", + "mlb", + "nhl", + "college-football", + "college-basketball", + "college-womens-basketball", + "soccer", + "mls", + "premier-league", + "la-liga", + "serie-a", + "bundesliga", + "ligue-1", + "champions-league", + "nwsl", + "ligamx-apertura", + "ligamx-clausura", + "copa-america", + "club-world-cup", + "world-cup", + "concacaf-champions-cup", + "concacaf-gold-cup", + "concacaf-league", + "womens-world-cup", + "europa-league", + "euro-championship" + ], + "in": "query", + "name": "league", "required": true, "type": "string", - "x-example": "AAPL" + "x-example": "mlb" + }, + { + "description": "Yahoo game slug for direct league pages; supply game or game_url", + "in": "query", + "name": "game", + "type": "string", + "x-example": "cleveland-guardians-detroit-tigers-460811106" + }, + { + "description": "Exact game.url from a soccer scoreboard; requires league=soccer and cannot be combined with game", + "in": "query", + "name": "game_url", + "type": "string", + "x-example": "https://sports.yahoo.com/soccer/european-championship-finals/belgium-france-13514469/" } ], "produces": [ @@ -565222,7 +649724,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.moduleResponseDoc" + "$ref": "#/definitions/yahoosports.gameResponseDoc" } }, "400": { @@ -565237,8 +649739,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -565255,27 +649757,34 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance SEC filings", + "summary": "Yahoo Sports game boxscore", "tags": [ - "Yahoo Finance" + "Yahoo Sports" ] } }, - "/yahoo-finance/ticker/{symbol}/shares": { + "/yahoo-sports/golf-leaderboard": { "get": { "consumes": [ "application/json" ], - "description": "Returns the current share-count fields for a Yahoo Finance `symbol` such as `AAPL`, for example `sharesOutstanding`, in `shares`. The symbol is the only input, and the response echoes it as `symbol`.", - "operationId": "yahoo-finance-ticker-shares", + "description": "Returns one golf tournament's full leaderboard (every golfer's rank, to-par score, status, holes-completed-in-current-round, per-round strokes, and a fixed stat set: earnings, eagles, birdies, pars, bogeys, double bogeys), from Yahoo Sports' own public tournament-leaderboard JSON API. Get the `tournament` id from a golf-schedule response's `id` field, e.g. `golf.e.23`.", + "operationId": "yahoo-sports-golf-leaderboard", "parameters": [ { - "description": "Yahoo Finance symbol such as AAPL", - "in": "path", - "name": "symbol", + "description": "Yahoo Sports golf tournament id from a golf-schedule response's id field", + "in": "query", + "name": "tournament", "required": true, "type": "string", - "x-example": "AAPL" + "x-example": "golf.e.23" + }, + { + "description": "4-digit season year (a tournament id is reused across years); defaults to the tournament's most recent season", + "in": "query", + "name": "season", + "type": "integer", + "x-example": 2026 } ], "produces": [ @@ -565285,7 +649794,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.sharesResponseDoc" + "$ref": "#/definitions/yahoosports.golfLeaderboardResponseDoc" } }, "400": { @@ -565300,8 +649809,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -565318,39 +649827,27 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance share counts", + "summary": "Yahoo Sports golf tournament leaderboard", "tags": [ - "Yahoo Finance" + "Yahoo Sports" ] } }, - "/yahoo-finance/ticker/{symbol}/shares-full": { + "/yahoo-sports/golf-player": { "get": { "consumes": [ "application/json" ], - "description": "Returns the historical shares-outstanding series for a Yahoo Finance `symbol`. `start` and `end` accept YYYY-MM-DD, RFC3339 or Unix seconds; without them the last 18 months are returned. Each point has `timestamp`, `datetime` and `shares_out`.", - "operationId": "yahoo-finance-ticker-shares-full", + "description": "Returns one golfer's profile, current-season stats, and tournament-by-tournament history from Yahoo's public player page. Supply the canonical player URL from golf-players or another Yahoo golf response.", + "operationId": "yahoo-sports-golf-player", "parameters": [ { - "description": "Yahoo Finance symbol such as AAPL", - "in": "path", - "name": "symbol", + "description": "Canonical Yahoo Golf player profile URL", + "in": "query", + "name": "player_url", "required": true, "type": "string", - "x-example": "AAPL" - }, - { - "description": "Start date as YYYY-MM-DD, RFC3339, or Unix seconds", - "in": "query", - "name": "start", - "type": "string" - }, - { - "description": "End date as YYYY-MM-DD, RFC3339, or Unix seconds", - "in": "query", - "name": "end", - "type": "string" + "x-example": "https://sports.yahoo.com/golf/players/Ludvig+Aberg/22880/" } ], "produces": [ @@ -565360,7 +649857,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.sharesFullResponseDoc" + "$ref": "#/definitions/yahoosports.golfPlayerResponseDoc" } }, "400": { @@ -565375,8 +649872,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -565393,27 +649890,44 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance historical share counts", + "summary": "Yahoo Sports golf player profile", "tags": [ - "Yahoo Finance" + "Yahoo Sports" ] } }, - "/yahoo-finance/ticker/{symbol}/splits": { + "/yahoo-sports/golf-player-news": { "get": { "consumes": [ "application/json" ], - "description": "Returns the stock split events for a Yahoo Finance `symbol` such as `AAPL`, each with a Unix timestamp and a split ratio such as `4:1`. The response object also has `dividends` and `capital_gains` fields.", - "operationId": "yahoo-finance-ticker-splits", + "description": "Returns the story and video edges in one golfer's News tab. Latest mode returns Yahoo's opaque cursor and supports the same upstream cursor POST for subsequent pages.", + "operationId": "yahoo-sports-golf-player-news", "parameters": [ { - "description": "Yahoo Finance symbol such as AAPL", - "in": "path", - "name": "symbol", + "description": "Canonical Yahoo Golf player URL", + "in": "query", + "name": "player_url", "required": true, "type": "string", - "x-example": "AAPL" + "x-example": "https://sports.yahoo.com/golf/players/Ludvig+Aberg/22880/" + }, + { + "description": "Top News or Latest", + "enum": [ + "top", + "latest" + ], + "in": "query", + "name": "mode", + "type": "string", + "x-example": "latest" + }, + { + "description": "Opaque next_cursor returned by a previous latest response", + "in": "query", + "name": "cursor", + "type": "string" } ], "produces": [ @@ -565423,7 +649937,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.actionsResponseDoc" + "$ref": "#/definitions/yahoosports.playerNewsResponseDoc" } }, "400": { @@ -565438,8 +649952,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -565456,29 +649970,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance splits", + "summary": "Yahoo Sports golf player news", "tags": [ - "Yahoo Finance" + "Yahoo Sports" ] } }, - "/yahoo-finance/ticker/{symbol}/sustainability": { + "/yahoo-sports/golf-players": { "get": { "consumes": [ "application/json" ], - "description": "Returns ESG and sustainability scores for a Yahoo Finance `symbol` such as `AAPL`, under `modules.esgScores`. When Yahoo recognises the ticker but has no ESG data, `esgScores` comes back empty instead of an error.", - "operationId": "yahoo-finance-ticker-sustainability", - "parameters": [ - { - "description": "Yahoo Finance symbol such as AAPL", - "in": "path", - "name": "symbol", - "required": true, - "type": "string", - "x-example": "AAPL" - } - ], + "description": "Returns Yahoo's full current-and-retired golfers directory, grouped by last-name initial. The site's A-Z buttons filter the already-loaded list in the browser, so this endpoint returns the complete source list.", + "operationId": "yahoo-sports-golf-players", "produces": [ "application/json" ], @@ -565486,23 +649990,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.moduleResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/yahoosports.golfPlayersResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -565519,27 +650011,42 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance sustainability", + "summary": "Yahoo Sports golf player directory", "tags": [ - "Yahoo Finance" + "Yahoo Sports" ] } }, - "/yahoo-finance/ticker/{symbol}/valuation": { + "/yahoo-sports/golf-schedule": { "get": { "consumes": [ "application/json" ], - "description": "Returns the valuation measures table from Yahoo Finance key statistics for a `symbol` such as `AAPL`, as `headers` and `rows` keyed by column, for example Market Cap. Returns an upstream error when Yahoo does not serve the table.", - "operationId": "yahoo-finance-ticker-valuation", + "description": "Returns a golf tour's tournament schedule for a season (name, dates, status, purse, and venue), from Yahoo Sports' own public sources. The `tour` enum accepts `pga-tour`, `pga-european-tours`, `lpga-tour`, `champions-tour`, `european-tour`, and `korn-ferry-tour`. Korn Ferry Tour schedule data comes from the Golf page's own server-rendered schedule; the other tours use Yahoo's public tournament-schedule JSON API. Each tournament's `id` feeds the golf-leaderboard endpoint's `tournament` parameter.", + "operationId": "yahoo-sports-golf-schedule", "parameters": [ { - "description": "Yahoo Finance symbol such as AAPL", - "in": "path", - "name": "symbol", + "description": "Golf tour key", + "enum": [ + "pga-tour", + "pga-european-tours", + "lpga-tour", + "champions-tour", + "european-tour", + "korn-ferry-tour" + ], + "in": "query", + "name": "tour", "required": true, "type": "string", - "x-example": "AAPL" + "x-example": "pga-tour" + }, + { + "description": "4-digit season year; defaults to the tour's current season", + "in": "query", + "name": "season", + "type": "integer", + "x-example": 2026 } ], "produces": [ @@ -565549,7 +650056,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.valuationResponseDoc" + "$ref": "#/definitions/yahoosports.golfScheduleResponseDoc" } }, "400": { @@ -565564,8 +650071,8 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -565582,35 +650089,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance valuation measures", + "summary": "Yahoo Sports golf tournament schedule", "tags": [ - "Yahoo Finance" + "Yahoo Sports" ] } }, - "/yahoo-finance/trending/{region}": { + "/yahoo-sports/home": { "get": { "consumes": [ "application/json" ], - "description": "Returns the symbols Yahoo Finance lists as trending in a `region` such as `US`. `count` sets how many. The response has `region`, `count`, the `symbols`, and the `job_timestamp` and `start_interval` fields.", - "operationId": "yahoo-finance-trending", - "parameters": [ - { - "description": "Region such as US", - "in": "path", - "name": "region", - "required": true, - "type": "string", - "x-example": "US" - }, - { - "description": "Symbol count", - "in": "query", - "name": "count", - "type": "integer" - } - ], + "description": "Returns the article cards currently embedded on the Yahoo Sports home page, including each card's title, summary, publisher, publication time, canonical URL, and complete upstream tag list.", + "operationId": "yahoo-sports-home", "produces": [ "application/json" ], @@ -565618,23 +650109,11 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoofinance.trendingResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/yahoosports.homeResponseDoc" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -565651,27 +650130,40 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Finance trending symbols", + "summary": "Yahoo Sports home-page stories", "tags": [ - "Yahoo Finance" + "Yahoo Sports" ] } }, - "/yahoo-health/article": { + "/yahoo-sports/injury-report": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single Yahoo Health article's full content: title, description, author, publish/update time, section, image, keywords, original publisher, and body paragraphs. Accepts a canonical health.yahoo.com article URL, such as one returned by the home or category story streams.", - "operationId": "yahoo-health-article", + "description": "Returns Yahoo's current injury table for NFL, NBA, MLB, or NHL. Omit team_id for the page's All Teams view, or provide a Yahoo team ID from yahoo-sports-dropdown-catalog. Each injury row preserves Yahoo's player, position, status, injury description, and start date.", + "operationId": "yahoo-sports-injury-report", "parameters": [ { - "description": "Canonical health.yahoo.com article URL", + "description": "League with an injury page", + "enum": [ + "nfl", + "nba", + "mlb", + "nhl" + ], "in": "query", - "name": "url", + "name": "league", "required": true, "type": "string", - "x-example": "https://health.yahoo.com/wellness/article/example-headline-000000000.html" + "x-example": "nba" + }, + { + "description": "Optional Yahoo team ID from yahoo-sports-dropdown-catalog; omit for All Teams", + "in": "query", + "name": "team_id", + "type": "string", + "x-example": "nba.t.21" } ], "produces": [ @@ -565681,7 +650173,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoohealth.articleResponseDoc" + "$ref": "#/definitions/yahoosports.injuryReportResponseDoc" } }, "400": { @@ -565702,12 +650194,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -565720,42 +650206,76 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Health article content", + "summary": "Yahoo Sports injury report", "tags": [ - "Yahoo Health" + "Yahoo Sports" ] } }, - "/yahoo-health/category": { + "/yahoo-sports/league-schedule": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Yahoo Health section's editorial story feed: title, destination URL, category, and thumbnail image for each story, with page-based pagination. Sourced from Yahoo Health's own server-rendered section pages.", - "operationId": "yahoo-health-category", + "description": "Returns full game records for the selected date or week from Yahoo's league schedule page. Use yahoo-sports-schedule-catalog for the current seasons, week/phase pairs and NCAA conference/division filter values. The page's own leagueFilter query is applied by Yahoo before the response is parsed.", + "operationId": "yahoo-sports-league-schedule", "parameters": [ { - "description": "Yahoo Health section", + "description": "Yahoo league key", "enum": [ - "conditions", - "general", - "healthcare", - "treatments", - "wellness", - "your-body" + "nfl", + "nba", + "mlb", + "nhl", + "wnba", + "college-football", + "college-basketball", + "college-womens-basketball" ], "in": "query", - "name": "category", + "name": "league", "required": true, "type": "string", - "x-example": "wellness" + "x-example": "nfl" }, { - "description": "1-based page number, defaults to 1", + "description": "Optional season year from yahoo-sports-schedule-catalog", "in": "query", - "name": "page", + "name": "season", "type": "integer", - "x-example": 1 + "x-example": 2026 + }, + { + "description": "Optional date filter in YYYY-MM-DD form; for schedule pages with date tabs", + "in": "query", + "name": "date", + "type": "string", + "x-example": "2026-10-04" + }, + { + "description": "Optional week value from yahoo-sports-schedule-catalog", + "in": "query", + "name": "week", + "type": "integer", + "x-example": 9 + }, + { + "description": "Optional week phase from the catalog", + "enum": [ + "PRESEASON", + "REGULAR_SEASON", + "POSTSEASON" + ], + "in": "query", + "name": "seasonPhase", + "type": "string", + "x-example": "REGULAR_SEASON" + }, + { + "description": "Exact leagueFilter value from the schedule catalog (NCAAF/NCAAB/NCAAW conference, division or Top 25 option)", + "in": "query", + "name": "leagueFilter", + "type": "string" } ], "produces": [ @@ -565765,7 +650285,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoohealth.categoryResponseDoc" + "$ref": "#/definitions/yahoosports.leagueScheduleResponseDoc" } }, "400": { @@ -565786,12 +650306,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -565804,19 +650318,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Health section story stream", + "summary": "Yahoo Sports league schedule games", "tags": [ - "Yahoo Health" + "Yahoo Sports" ] } }, - "/yahoo-health/home": { + "/yahoo-sports/leagues": { "get": { "consumes": [ "application/json" ], - "description": "Returns Yahoo Health's homepage editorial story feed: title, destination URL, category, and thumbnail image for each story. Sourced from Yahoo Health's own server-rendered homepage.", - "operationId": "yahoo-health-home", + "description": "Returns all 24 core league keys, source namespaces, and feature flags, plus the complete supported value sets for player search, injuries, NFL/NBA Draft, college rankings, golf tours, tennis ranking types, and motorsports series. Use dedicated soccer scoreboard, rankings, stats, schedule, bracket, sportsbook, RSS, and dropdown catalogs for live filter values.", + "operationId": "yahoo-sports-leagues", "produces": [ "application/json" ], @@ -565824,25 +650338,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoohealth.homeResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/yahoosports.leagueCatalogResponseDoc" } } }, @@ -565851,29 +650347,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Health homepage story stream", + "summary": "Yahoo Sports league catalog", "tags": [ - "Yahoo Health" + "Yahoo Sports" ] } }, - "/yahoo-life/article": { + "/yahoo-sports/mma-fight-card": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single Yahoo Life article's full content: title, description, author, publish/update time, section, image, keywords, original publisher, and body paragraphs. Accepts a canonical www.yahoo.com/lifestyle article URL, such as one returned by the home story stream.", - "operationId": "yahoo-life-article", - "parameters": [ - { - "description": "Canonical www.yahoo.com/lifestyle article URL", - "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.yahoo.com/lifestyle/article/example-headline-000000000.html" - } - ], + "description": "Returns the current/next UFC event's full fight card (each bout's fighters, records, rankings, weight class, and card position), from Yahoo Sports' own server-rendered MMA schedule page. This endpoint takes no parameters -- it always returns whichever event Yahoo currently features as next up, not a caller-selected one.", + "operationId": "yahoo-sports-mma-fight-card", "produces": [ "application/json" ], @@ -565881,7 +650367,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoolife.articleResponseDoc" + "$ref": "#/definitions/yahoosports.mmaFightCardResponseDoc" } }, "400": { @@ -565902,12 +650388,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -565920,19 +650400,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Life article content", + "summary": "Yahoo Sports MMA fight card", "tags": [ - "Yahoo Life" + "Yahoo Sports" ] } }, - "/yahoo-life/home": { + "/yahoo-sports/mma-schedule": { "get": { "consumes": [ "application/json" ], - "description": "Returns Yahoo Life's homepage editorial story feed: title, destination URL, and thumbnail image for each story. Sourced from Yahoo Life's own server-rendered homepage.", - "operationId": "yahoo-life-home", + "description": "Returns the known UFC event calendar (name, date, status), from Yahoo Sports' own server-rendered MMA schedule page. This endpoint is UFC-only and takes no parameters -- Yahoo's own page does not expose Bellator, PFL, ONE Championship, or other promotions from this URL.", + "operationId": "yahoo-sports-mma-schedule", "produces": [ "application/json" ], @@ -565940,17 +650420,23 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoolife.homeResponseDoc" + "$ref": "#/definitions/yahoosports.mmaScheduleResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/app.Response" + } + }, + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -565967,27 +650453,28 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Life homepage story stream", + "summary": "Yahoo Sports MMA event schedule", "tags": [ - "Yahoo Life" + "Yahoo Sports" ] } }, - "/yahoo-news/article": { + "/yahoo-sports/more-news": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single Yahoo News article's full content: headline, description, author, publish/update time, section, image, keywords, original publisher, and body paragraphs. Accepts a canonical yahoo.com/news article URL, such as one returned by the home or category story streams.", - "operationId": "yahoo-news-article", + "description": "Returns one page from Yahoo Sports' public More News feed using its page-number routes. Story items preserve the source fields as raw objects. The page exposes no server-side tag, sort, or topic filter; use yahoo-sports-topic-news for a topic-specific page.", + "operationId": "yahoo-sports-more-news", "parameters": [ { - "description": "Canonical www.yahoo.com/news article URL", + "default": 1, + "description": "1-based Yahoo More News page number; defaults to 1", "in": "query", - "name": "url", - "required": true, - "type": "string", - "x-example": "https://www.yahoo.com/news/politics/articles/example-headline-000000000.html" + "minimum": 1, + "name": "page", + "type": "integer", + "x-example": 2 } ], "produces": [ @@ -565997,7 +650484,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoonews.articleResponseDoc" + "$ref": "#/definitions/yahoosports.moreNewsResponseDoc" } }, "400": { @@ -566018,12 +650505,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -566036,35 +650517,39 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo News article content", + "summary": "Yahoo Sports More News feed", "tags": [ - "Yahoo News" + "Yahoo Sports" ] } }, - "/yahoo-news/category": { + "/yahoo-sports/motorsports-race": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Yahoo News section's story stream: title, destination URL, summary, source, publish time, comment count, and thumbnail images for each story. Sourced from Yahoo News's own server-rendered section pages.", - "operationId": "yahoo-news-category", + "description": "Returns one race's full driver-by-driver results (finishing position, driver, car/team, points, laps, time), from Yahoo Sports' own server-rendered race page. The `series` enum accepts `f1` and `nascar`. Get the `race` slug from a motorsports-schedule response's race `url` (the last path segment), e.g. `australian-grand-prix-2026-2961`.", + "operationId": "yahoo-sports-motorsports-race", "parameters": [ { - "description": "Yahoo News section", + "description": "Motorsports series key", "enum": [ - "us", - "world", - "politics", - "science", - "weather-news", - "originals" + "f1", + "nascar" ], "in": "query", - "name": "category", + "name": "series", "required": true, "type": "string", - "x-example": "politics" + "x-example": "f1" + }, + { + "description": "Yahoo Sports race slug from a motorsports-schedule response's race url", + "in": "query", + "name": "race", + "required": true, + "type": "string", + "x-example": "australian-grand-prix-2026-2961" } ], "produces": [ @@ -566074,7 +650559,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoonews.categoryResponseDoc" + "$ref": "#/definitions/yahoosports.motorsportsRaceResponseDoc" } }, "400": { @@ -566095,12 +650580,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -566113,53 +650592,38 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo News section story stream", + "summary": "Yahoo Sports motorsports race results", "tags": [ - "Yahoo News" + "Yahoo Sports" ] } }, - "/yahoo-news/comments": { + "/yahoo-sports/motorsports-schedule": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of an article's top-level comments: author, body, reaction counts, reply count, and pin status, with sort order and cursor-based pagination. Sourced from Yahoo's own comment platform gateway.", - "operationId": "yahoo-news-comments", + "description": "Returns a series' season race list (name, date, status, laps, distance, pole/race winner, venue), from Yahoo Sports' own server-rendered motorsports schedule page. The `series` enum accepts `f1` and `nascar`.", + "operationId": "yahoo-sports-motorsports-schedule", "parameters": [ { - "description": "Article id (the id field returned by home/category/article)", - "in": "query", - "name": "content_id", - "required": true, - "type": "string", - "x-example": "70253ef0-7509-31ec-aabf-d8e369db3f73" - }, - { - "description": "Sort order, defaults to top", + "description": "Motorsports series key", "enum": [ - "top", - "popular", - "newest", - "oldest" + "f1", + "nascar" ], "in": "query", - "name": "sort", + "name": "series", + "required": true, "type": "string", - "x-example": "top" - }, - { - "description": "Pagination cursor from a previous response's next_cursor", - "in": "query", - "name": "cursor", - "type": "string" + "x-example": "f1" }, { - "description": "Number of comments to return, default 10, clamped to 1..50", + "description": "4-digit season year; defaults to the current season", "in": "query", - "name": "count", + "name": "season", "type": "integer", - "x-example": 10 + "x-example": 2026 } ], "produces": [ @@ -566169,7 +650633,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoonews.commentsResponseDoc" + "$ref": "#/definitions/yahoosports.motorsportsScheduleResponseDoc" } }, "400": { @@ -566178,14 +650642,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -566202,59 +650666,26 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo News article comments", + "summary": "Yahoo Sports motorsports season schedule", "tags": [ - "Yahoo News" + "Yahoo Sports" ] } }, - "/yahoo-news/comments/replies": { + "/yahoo-sports/navigation": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of a comment's replies: author, body, reaction counts, and pin status, with sort order and cursor-based pagination. Sourced from Yahoo's own comment platform gateway.", - "operationId": "yahoo-news-comment-replies", + "description": "Returns the exact navcat label and URL links Yahoo renders on the home page or one public sports section page. Use section_url from yahoo-sports-home or this response to discover sport-scoped topics and filters.", + "operationId": "yahoo-sports-navigation", "parameters": [ { - "description": "Article id (the id field returned by home/category/article)", - "in": "query", - "name": "content_id", - "required": true, - "type": "string", - "x-example": "afd0da86-88c7-320f-a3c9-d1dcad7920c7" - }, - { - "description": "Parent comment id (the id field returned by /yahoo-news/comments)", - "in": "query", - "name": "comment_id", - "required": true, - "type": "string", - "x-example": "f1168670-2356-4bcf-bfb9-240b8e4964b1" - }, - { - "description": "Sort order, defaults to newest", - "enum": [ - "newest", - "oldest" - ], + "description": "Full Yahoo Sports page URL; leave blank for home navigation", "in": "query", - "name": "sort", + "name": "section_url", "type": "string", - "x-example": "newest" - }, - { - "description": "Pagination cursor from a previous response's next_cursor", - "in": "query", - "name": "cursor", - "type": "string" - }, - { - "description": "Number of replies to return, default 10, clamped to 1..50", - "in": "query", - "name": "count", - "type": "integer", - "x-example": 10 + "x-example": "https://sports.yahoo.com/golf/" } ], "produces": [ @@ -566264,7 +650695,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoonews.repliesResponseDoc" + "$ref": "#/definitions/yahoosports.navigationResponseDoc" } }, "400": { @@ -566273,14 +650704,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -566297,19 +650728,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo News comment replies", + "summary": "Yahoo Sports section navigation", "tags": [ - "Yahoo News" + "Yahoo Sports" ] } }, - "/yahoo-news/home": { + "/yahoo-sports/network-catalog": { "get": { "consumes": [ "application/json" ], - "description": "Returns Yahoo News's homepage \"need to know\" story stream: title, destination URL, summary, source, publish time, comment count, and thumbnail images for each story. Sourced from Yahoo News's own server-rendered homepage.", - "operationId": "yahoo-news-home", + "description": "Returns every current partner entry from the Yahoo Sports Network menu, including disabled entries, nested destinations and partner attribution, plus the homepage's featured Watch show cards. Each show's list_id is accepted by yahoo-sports-video-headlines.", + "operationId": "yahoo-sports-network-catalog", "produces": [ "application/json" ], @@ -566317,7 +650748,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoonews.homeResponseDoc" + "$ref": "#/definitions/yahoosports.networkCatalogResponseDoc" } }, "429": { @@ -566326,12 +650757,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -566344,40 +650769,57 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo News homepage story stream", + "summary": "Yahoo Sports Network and Watch catalog", "tags": [ - "Yahoo News" + "Yahoo Sports" ] } }, - "/yahoo-news/related": { + "/yahoo-sports/news": { "get": { "consumes": [ "application/json" ], - "description": "Returns a page of articles Yahoo recommends alongside a given article -- the \"you may also like\" strip at the bottom of an article page -- with cursor-based pagination. Sourced from Yahoo's own recommendation gateway.", - "operationId": "yahoo-news-related", + "description": "Returns source news articles. For league=soccer, Yahoo exposes a shared cross-competition /soccer/news/ feed and no competition-specific news filter; article tags are preserved verbatim.", + "operationId": "yahoo-sports-news", "parameters": [ { - "description": "Article id (the id field returned by home/category/article)", + "description": "League key", + "enum": [ + "nfl", + "nba", + "wnba", + "mlb", + "nhl", + "college-football", + "college-basketball", + "college-womens-basketball", + "soccer", + "mls", + "premier-league", + "la-liga", + "serie-a", + "bundesliga", + "ligue-1", + "champions-league", + "nwsl", + "ligamx-apertura", + "ligamx-clausura", + "copa-america", + "club-world-cup", + "world-cup", + "concacaf-champions-cup", + "concacaf-gold-cup", + "concacaf-league", + "womens-world-cup", + "europa-league", + "euro-championship" + ], "in": "query", - "name": "content_id", + "name": "league", "required": true, "type": "string", - "x-example": "6463c2b7-dfa6-3313-9e0d-a0b1cb5e6506" - }, - { - "description": "Pagination cursor from a previous response's next_cursor", - "in": "query", - "name": "cursor", - "type": "string" - }, - { - "description": "Number of related articles to return, default 10, clamped to 1..50", - "in": "query", - "name": "count", - "type": "integer", - "x-example": 10 + "x-example": "nfl" } ], "produces": [ @@ -566387,7 +650829,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoonews.relatedResponseDoc" + "$ref": "#/definitions/yahoosports.newsResponseDoc" } }, "400": { @@ -566396,14 +650838,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -566420,34 +650862,36 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo News related articles", + "summary": "Yahoo Sports league news", "tags": [ - "Yahoo News" + "Yahoo Sports" ] } }, - "/yahoo-news/suggest": { + "/yahoo-sports/newsletter-archive": { "get": { "consumes": [ "application/json" ], - "description": "Returns Yahoo News search-box autocomplete suggestions for the required partial query `q`, as a flat list of suggested news search terms in `suggestions`. `count` sets how many (default 10, clamped to 1 to 20). A query with no matches returns an empty array, not an error. The response also has `query` and `fetched_at`.", - "operationId": "yahoo-news-suggest", + "description": "Returns one page of articles from a newsletter's public archive. Discover current slugs with yahoo-sports-newsletters. The page number maps to Yahoo's own /page/{n}/ archive route; article tags are preserved from the source. Yahoo exposes no archive sort or tag filter. This endpoint does not submit the email subscription form.", + "operationId": "yahoo-sports-newsletter-archive", "parameters": [ { - "description": "Partial search query to autocomplete", + "description": "Newsletter slug from yahoo-sports-newsletters", "in": "query", - "name": "q", + "name": "newsletter", "required": true, "type": "string", - "x-example": "chatgpt" + "x-example": "yahoo-sports-am" }, { - "description": "Number of suggestions to return, default 10, clamped to 1..20", + "default": 1, + "description": "1-based Yahoo archive page number; defaults to 1", "in": "query", - "name": "count", + "minimum": 1, + "name": "page", "type": "integer", - "x-example": 10 + "x-example": 2 } ], "produces": [ @@ -566457,7 +650901,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoonews.suggestResponseDoc" + "$ref": "#/definitions/yahoosports.newsletterArchiveResponseDoc" } }, "400": { @@ -566466,14 +650910,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -566490,29 +650934,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo News search autocomplete suggestions", + "summary": "Yahoo Sports newsletter article archive", "tags": [ - "Yahoo News" + "Yahoo Sports" ] } }, - "/yahoo-search/images": { + "/yahoo-sports/newsletters": { "get": { "consumes": [ "application/json" ], - "description": "Returns Yahoo's image-search results for a query: title, direct image URL, the page hosting the image, source domain, thumbnail, and original image dimensions when available. Results are fetched from Yahoo's own server-rendered image-search page.", - "operationId": "yahoo-search-images", - "parameters": [ - { - "description": "Search query", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "chatgpt" - } - ], + "description": "Lists the current public Yahoo Sports newsletter cards, including each newsletter slug, archive URL, and the schedule/description text shown by the site. This is a read-only catalog; it does not subscribe an email address.", + "operationId": "yahoo-sports-newsletters", "produces": [ "application/json" ], @@ -566520,13 +650954,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosearch.imagesResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/yahoosports.newsletterCatalogResponseDoc" } }, "429": { @@ -566535,12 +650963,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -566553,29 +650975,19 @@ "ApiKeyAuth": [] } ], - "summary": "Search Yahoo image results", + "summary": "Yahoo Sports newsletter catalog", "tags": [ - "Yahoo Search" + "Yahoo Sports" ] } }, - "/yahoo-search/local": { + "/yahoo-sports/odds-featured": { "get": { "consumes": [ "application/json" ], - "description": "Returns Yahoo's local-business-search results for a query: name, category, price range, address, phone, open status, rating, and review count. Location is resolved from the query text itself, the same way a user would type into Yahoo's own local search box (e.g. \"pizza near seattle wa\"), not a separate coordinate parameter. Results are fetched from Yahoo's own server-rendered local-search page.", - "operationId": "yahoo-search-local", - "parameters": [ - { - "description": "Search query, including any location intent", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "pizza near seattle wa" - } - ], + "description": "Returns the current featured game cards from Yahoo's public Graphite featuredGameIds operation, including each source game ID for use with yahoo-sports-odds-game.", + "operationId": "yahoo-sports-odds-featured", "produces": [ "application/json" ], @@ -566583,13 +650995,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosearch.localResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/yahoosports.sportsbookOddsResponseDoc" } }, "429": { @@ -566598,12 +651004,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -566616,27 +651016,34 @@ "ApiKeyAuth": [] } ], - "summary": "Search Yahoo local business results", + "summary": "Yahoo Sports featured odds games", "tags": [ - "Yahoo Search" + "Yahoo Sports" ] } }, - "/yahoo-search/news": { + "/yahoo-sports/odds-game": { "get": { "consumes": [ "application/json" ], - "description": "Returns Yahoo's news-search results for a query: title, destination URL, description, source, and relative publish age. Results are fetched from Yahoo's own server-rendered news-search page (news.search.yahoo.com) -- a distinct product from the yahoo-news family, which covers the www.yahoo.com/news portal itself. Yahoo wraps every result link in its own click-tracking redirect; this endpoint always returns the decoded destination URL, never the raw redirect link.", - "operationId": "yahoo-search-news", + "description": "Returns the available moneyline, spread and over/under markets and selections for one game using Yahoo's public Graphite playbookGame operation. Get game_id from yahoo-sports-odds-games, yahoo-sports-odds-trending, or yahoo-sports-odds-featured.", + "operationId": "yahoo-sports-odds-game", "parameters": [ { - "description": "Search query", + "description": "Yahoo game ID from an odds game list", "in": "query", - "name": "q", + "name": "game_id", "required": true, "type": "string", - "x-example": "chatgpt" + "x-example": "nfl.g.20261101002" + }, + { + "description": "Optional IANA timezone for game time display; defaults to UTC", + "in": "query", + "name": "tz", + "type": "string", + "x-example": "Asia/Shanghai" } ], "produces": [ @@ -566646,7 +651053,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosearch.newsResponseDoc" + "$ref": "#/definitions/yahoosports.sportsbookOddsResponseDoc" } }, "400": { @@ -566661,12 +651068,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -566679,46 +651080,44 @@ "ApiKeyAuth": [] } ], - "summary": "Search Yahoo news results", + "summary": "Yahoo Sports game odds markets", "tags": [ - "Yahoo Search" + "Yahoo Sports" ] } }, - "/yahoo-search/search": { + "/yahoo-sports/odds-games": { "get": { "consumes": [ "application/json" ], - "description": "Returns Yahoo web search results for a query string: title, destination URL, description, and hostname, plus page-based pagination. Yahoo wraps every result link in its own click-tracking redirect; this endpoint always returns the decoded destination URL, never the raw redirect link.", - "operationId": "yahoo-search", + "description": "Returns the current games and their Yahoo game IDs from the public Graphite leagueGameIds operation. A valid current league can return an empty games array during its off-season. Use the sportsbook catalog for the complete league value space.", + "operationId": "yahoo-sports-odds-games", "parameters": [ { - "description": "Search query", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "openai" - }, - { - "description": "1-based page number, defaults to 1", - "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 - }, - { - "description": "Restrict results by recency. Omit for unfiltered ('Anytime').", + "description": "Exact Graphite league value from yahoo-sports-sportsbook-catalog", "enum": [ - "day", - "week", - "month" + "nfl", + "ncaaf", + "nba", + "mlb", + "nhl", + "ncaab", + "ncaaw", + "wnba", + "soccer.l.fbgb", + "soccer.l.fbchampions", + "soccer.l.mls", + "soccer.l.fbes", + "soccer.l.fbwcup", + "golf", + "ten" ], "in": "query", - "name": "time_range", + "name": "league", + "required": true, "type": "string", - "x-example": "week" + "x-example": "nfl" } ], "produces": [ @@ -566728,7 +651127,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosearch.searchResponseDoc" + "$ref": "#/definitions/yahoosports.sportsbookOddsResponseDoc" } }, "400": { @@ -566737,24 +651136,12 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -566767,36 +651154,19 @@ "ApiKeyAuth": [] } ], - "summary": "Search Yahoo web results", + "summary": "Yahoo Sports current game IDs for an odds league", "tags": [ - "Yahoo Search" + "Yahoo Sports" ] } }, - "/yahoo-search/suggest": { + "/yahoo-sports/odds-trending": { "get": { "consumes": [ "application/json" ], - "description": "Returns Yahoo's own search-box autocomplete suggestions for a partial query: a flat list of suggested search terms, each optionally carrying knowledge-panel entity metadata (type, image, subtitle, description) when Yahoo resolves the term to a known company, place, product, or similar entity rather than a plain phrase.", - "operationId": "yahoo-search-suggest", - "parameters": [ - { - "description": "Partial search query to autocomplete", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "chatgpt" - }, - { - "description": "Number of suggestions to return, default 10, clamped to 1..20", - "in": "query", - "name": "count", - "type": "integer", - "x-example": 10 - } - ], + "description": "Returns the current trending game cards from Yahoo's public Graphite trendingGameIds operation, including each source game ID for use with yahoo-sports-odds-game.", + "operationId": "yahoo-sports-odds-trending", "produces": [ "application/json" ], @@ -566804,13 +651174,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosearch.suggestResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/yahoosports.sportsbookOddsResponseDoc" } }, "429": { @@ -566819,12 +651183,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -566837,29 +651195,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo web search autocomplete suggestions", + "summary": "Yahoo Sports trending odds games", "tags": [ - "Yahoo Search" + "Yahoo Sports" ] } }, - "/yahoo-search/videos": { + "/yahoo-sports/olympics-medals": { "get": { "consumes": [ "application/json" ], - "description": "Returns Yahoo's video-search results for a query: title, destination page URL, source domain, description, thumbnail, and duration. Results are fetched from Yahoo's own server-rendered video-search page.", - "operationId": "yahoo-search-videos", - "parameters": [ - { - "description": "Search query", - "in": "query", - "name": "q", - "required": true, - "type": "string", - "x-example": "chatgpt" - } - ], + "description": "Returns the current Olympic games' full medal count by country (gold/silver/bronze/total, ranked), from Yahoo Sports' own server-rendered Olympics medals page. This endpoint takes no parameters -- it always returns whichever Olympic games Yahoo currently has medal data for, not a caller-selected prior edition.", + "operationId": "yahoo-sports-olympics-medals", "produces": [ "application/json" ], @@ -566867,7 +651215,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosearch.videosResponseDoc" + "$ref": "#/definitions/yahoosports.olympicsMedalsResponseDoc" } }, "400": { @@ -566876,14 +651224,14 @@ "$ref": "#/definitions/app.Response" } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -566900,27 +651248,65 @@ "ApiKeyAuth": [] } ], - "summary": "Search Yahoo video results", + "summary": "Yahoo Sports Olympics medal count", "tags": [ - "Yahoo Search" + "Yahoo Sports" ] } }, - "/yahoo-shopping/article": { + "/yahoo-sports/player": { "get": { "consumes": [ "application/json" ], - "description": "Returns a single Yahoo Shopping article's full content: title, description, author, publish/update time, section, image, keywords, original publisher, and body paragraphs. Accepts a canonical shopping.yahoo.com article URL, such as one returned by the home or category story streams.", - "operationId": "yahoo-shopping-article", + "description": "Returns one player bio and current-season stats. Use league=soccer for Yahoo's flat soccer player namespace, or a league key from yahoo-sports-leagues; get the numeric player id from a roster record.", + "operationId": "yahoo-sports-player", "parameters": [ { - "description": "Canonical shopping.yahoo.com article URL", + "description": "League key", + "enum": [ + "nfl", + "nba", + "wnba", + "mlb", + "nhl", + "college-football", + "college-basketball", + "college-womens-basketball", + "soccer", + "mls", + "premier-league", + "la-liga", + "serie-a", + "bundesliga", + "ligue-1", + "champions-league", + "nwsl", + "ligamx-apertura", + "ligamx-clausura", + "copa-america", + "club-world-cup", + "world-cup", + "concacaf-champions-cup", + "concacaf-gold-cup", + "concacaf-league", + "womens-world-cup", + "europa-league", + "euro-championship" + ], "in": "query", - "name": "url", + "name": "league", "required": true, "type": "string", - "x-example": "https://shopping.yahoo.com/style/clothing/article/example-headline-000000000.html" + "x-example": "nfl" + }, + { + "description": "Numeric Yahoo Sports player id", + "in": "query", + "name": "player", + "required": true, + "type": "string", + "x-example": "42019" } ], "produces": [ @@ -566930,7 +651316,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahooshopping.articleResponseDoc" + "$ref": "#/definitions/yahoosports.playerResponseDoc" } }, "400": { @@ -566951,12 +651337,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -566969,42 +651349,41 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Shopping article content", + "summary": "Yahoo Sports player detail", "tags": [ - "Yahoo Shopping" + "Yahoo Sports" ] } }, - "/yahoo-shopping/category": { + "/yahoo-sports/player-search": { "get": { "consumes": [ "application/json" ], - "description": "Returns a Yahoo Shopping section's editorial story feed: title, destination URL, category, and thumbnail image for each story, with page-based pagination. Sourced from Yahoo Shopping's own server-rendered section pages.", - "operationId": "yahoo-shopping-category", + "description": "Searches Yahoo's public playerSearch operation, as used by the NFL, NBA, MLB, and Golf player pages. Yahoo requires at least three characters and currently hard-codes onActiveRosterOnly=false in these search boxes.", + "operationId": "yahoo-sports-player-search", "parameters": [ { - "description": "Yahoo Shopping section", + "description": "Player-search page key", "enum": [ - "beauty", - "deals", - "general", - "gift-ideas", - "home-garden", - "style" + "nfl", + "nba", + "mlb", + "golf" ], "in": "query", - "name": "category", + "name": "league", "required": true, "type": "string", - "x-example": "style" + "x-example": "nba" }, { - "description": "1-based page number, defaults to 1", + "description": "Player name or prefix (at least three characters)", "in": "query", - "name": "page", - "type": "integer", - "x-example": 1 + "name": "name", + "required": true, + "type": "string", + "x-example": "LeBron" } ], "produces": [ @@ -567014,7 +651393,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahooshopping.categoryResponseDoc" + "$ref": "#/definitions/yahoosports.playerSearchResponseDoc" } }, "400": { @@ -567023,24 +651402,12 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -567053,19 +651420,45 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Shopping section story stream", + "summary": "Yahoo Sports player search", "tags": [ - "Yahoo Shopping" + "Yahoo Sports" ] } }, - "/yahoo-shopping/home": { + "/yahoo-sports/playoff-bracket": { "get": { "consumes": [ "application/json" ], - "description": "Returns Yahoo Shopping's homepage editorial story feed: title, destination URL, category, and thumbnail image for each story. Sourced from Yahoo Shopping's own server-rendered homepage. This is Yahoo's shopping buying-guide/deals content site, not a product-search API -- shopping.yahoo.com no longer exposes a searchable product catalog.", - "operationId": "yahoo-shopping-home", + "description": "Returns Yahoo's public bracket slots, seeds, series and game records for NFL, NBA, MLB, WNBA, college football, men's college basketball or women's college basketball. NBA also includes the page's separate Play-In Tournament bracket. Use yahoo-sports-playoff-bracket-catalog to discover the current season values.", + "operationId": "yahoo-sports-playoff-bracket", + "parameters": [ + { + "description": "Yahoo league key", + "enum": [ + "nfl", + "nba", + "mlb", + "wnba", + "college-football", + "college-basketball", + "college-womens-basketball" + ], + "in": "query", + "name": "league", + "required": true, + "type": "string", + "x-example": "nba" + }, + { + "description": "Optional season year from yahoo-sports-playoff-bracket-catalog; defaults to Yahoo's current season", + "in": "query", + "name": "season", + "type": "integer", + "x-example": 2025 + } + ], "produces": [ "application/json" ], @@ -567073,17 +651466,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahooshopping.homeResponseDoc" + "$ref": "#/definitions/yahoosports.playoffBracketResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -567100,27 +651493,36 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Shopping homepage story stream", + "summary": "Yahoo Sports playoff bracket data", "tags": [ - "Yahoo Shopping" + "Yahoo Sports" ] } }, - "/yahoo-shopping/shopping-list": { + "/yahoo-sports/playoff-bracket-catalog": { "get": { "consumes": [ "application/json" ], - "description": "Returns one curated Yahoo Shopping list's items: product title, direct destination URL, image, seller, currency, price, and sale price for each item. Sourced from the list page's own product cards. Use GET /yahoo-shopping/shopping-lists to find a list's slug.", - "operationId": "yahoo-shopping-shopping-list", + "description": "Returns the season choices and any separate tournament selector published by the selected Yahoo playoff bracket page. The supported league set is NFL, NBA, MLB, WNBA, NCAAF, NCAAB and NCAAW.", + "operationId": "yahoo-sports-playoff-bracket-catalog", "parameters": [ { - "description": "List slug from GET /yahoo-shopping/shopping-lists", + "description": "Yahoo league key", + "enum": [ + "nfl", + "nba", + "mlb", + "wnba", + "college-football", + "college-basketball", + "college-womens-basketball" + ], "in": "query", - "name": "list", + "name": "league", "required": true, "type": "string", - "x-example": "cooling-essentials" + "x-example": "nba" } ], "produces": [ @@ -567130,7 +651532,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahooshopping.shoppingListResponseDoc" + "$ref": "#/definitions/yahoosports.playoffBracketCatalogResponseDoc" } }, "400": { @@ -567139,24 +651541,12 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -567169,19 +651559,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Shopping curated list items", + "summary": "Yahoo Sports playoff bracket season options", "tags": [ - "Yahoo Shopping" + "Yahoo Sports" ] } }, - "/yahoo-shopping/shopping-lists": { + "/yahoo-sports/rss-catalog": { "get": { "consumes": [ "application/json" ], - "description": "Returns Yahoo Shopping's curated shopping-lists directory: a slug, title, and image for each themed list (e.g. \"Cooling Essentials\", \"Back to School\"). Use a list's slug with GET /yahoo-shopping/shopping-list to read its items.", - "operationId": "yahoo-shopping-shopping-lists", + "description": "Returns the complete list of RSS feed keys currently listed on Yahoo Sports' syndication page. Use a key with yahoo-sports-rss-feed.", + "operationId": "yahoo-sports-rss-catalog", "produces": [ "application/json" ], @@ -567189,25 +651579,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahooshopping.shoppingListsResponseDoc" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/yahoosports.rssCatalogResponseDoc" } } }, @@ -567216,27 +651588,27 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Shopping curated shopping-lists directory", + "summary": "Yahoo Sports RSS feed catalog", "tags": [ - "Yahoo Shopping" + "Yahoo Sports" ] } }, - "/yahoo-shopping/store": { + "/yahoo-sports/rss-feed": { "get": { "consumes": [ "application/json" ], - "description": "Returns one retailer's current deals on Yahoo Shopping: product title, direct retailer product URL, image, brand, currency, price, and sale price for each offer. Sourced from the retailer's shopping.yahoo.com store page's own structured product data -- not a keyword search, a fixed set of currently-featured deals for that retailer. Use GET /yahoo-shopping/stores to find a retailer's slug.", - "operationId": "yahoo-shopping-store", + "description": "Returns every item in one Yahoo Sports RSS feed, including full content:encoded HTML and creator/publisher metadata when present. Feed keys come from yahoo-sports-rss-catalog; no caller limit or date filter is added.", + "operationId": "yahoo-sports-rss-feed", "parameters": [ { - "description": "Retailer slug from GET /yahoo-shopping/stores", + "description": "Feed key from yahoo-sports-rss-catalog", "in": "query", - "name": "store", + "name": "feed", "required": true, "type": "string", - "x-example": "target" + "x-example": "general-news" } ], "produces": [ @@ -567246,7 +651618,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahooshopping.storeResponseDoc" + "$ref": "#/definitions/yahoosports.rssFeedResponseDoc" } }, "400": { @@ -567267,12 +651639,6 @@ "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "503": { "description": "Service Unavailable", "schema": { @@ -567285,19 +651651,39 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Shopping retailer store deals", + "summary": "Yahoo Sports RSS feed", "tags": [ - "Yahoo Shopping" + "Yahoo Sports" ] } }, - "/yahoo-shopping/stores": { + "/yahoo-sports/schedule-catalog": { "get": { "consumes": [ "application/json" ], - "description": "Returns Yahoo Shopping's retailer store directory: a slug, display name, and logo image for each retailer with a dedicated store page (e.g. Amazon, Target, Best Buy). Use a store's slug with GET /yahoo-shopping/store to read its current deals.", - "operationId": "yahoo-shopping-stores", + "description": "Returns the current season choices, week/phase pairs and conference/division filters shown by one Yahoo league schedule page. League keys are NFL, NBA, MLB, NHL, WNBA, NCAAF, NCAAB and NCAAW.", + "operationId": "yahoo-sports-schedule-catalog", + "parameters": [ + { + "description": "Yahoo league key", + "enum": [ + "nfl", + "nba", + "mlb", + "nhl", + "wnba", + "college-football", + "college-basketball", + "college-womens-basketball" + ], + "in": "query", + "name": "league", + "required": true, + "type": "string", + "x-example": "nfl" + } + ], "produces": [ "application/json" ], @@ -567305,17 +651691,17 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahooshopping.storesResponseDoc" + "$ref": "#/definitions/yahoosports.leagueScheduleCatalogResponseDoc" } }, - "429": { - "description": "Too Many Requests", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/app.Response" } }, - "500": { - "description": "Internal Server Error", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/app.Response" } @@ -567332,19 +651718,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Shopping retailer store directory", + "summary": "Yahoo Sports league schedule filter catalog", "tags": [ - "Yahoo Shopping" + "Yahoo Sports" ] } }, - "/yahoo-sports/game": { + "/yahoo-sports/scoreboard": { "get": { "consumes": [ "application/json" ], - "description": "Returns one game's boxscore (matchup, line score by period, and team stat totals) from sports.yahoo.com's own server-rendered game page. The `league` enum accepts `nfl`, `nba`, `wnba`, `mlb`, `nhl`, `college-football`, `college-basketball`, `college-womens-basketball`, `mls`, `premier-league`, `la-liga`, `serie-a`, `bundesliga`, `ligue-1`, `nwsl`, `ligamx-apertura`, `ligamx-clausura`, `copa-america`, `club-world-cup`, `world-cup`, `concacaf-champions-cup`, `concacaf-gold-cup`, `concacaf-league`, and `champions-league`. Get the `game` slug from a scoreboard or team-schedule response's game `url` (the last path segment), e.g. `cleveland-guardians-detroit-tigers-460811106`.", - "operationId": "yahoo-sports-game", + "description": "Returns games with teams, score, status, venue and broadcasts from Yahoo Sports. Use a direct league page key from yahoo-sports-leagues, or league=soccer with competition_id from yahoo-sports-soccer-scoreboard to mirror the root competition selector. Root mode supports date and month; direct competition pages support season.", + "operationId": "yahoo-sports-scoreboard", "parameters": [ { "description": "League key", @@ -567357,6 +651743,7 @@ "college-football", "college-basketball", "college-womens-basketball", + "soccer", "mls", "premier-league", "la-liga", @@ -567372,21 +651759,44 @@ "world-cup", "concacaf-champions-cup", "concacaf-gold-cup", - "concacaf-league" + "concacaf-league", + "womens-world-cup", + "europa-league", + "euro-championship" ], "in": "query", "name": "league", "required": true, "type": "string", - "x-example": "mlb" + "x-example": "nfl" }, { - "description": "Yahoo Sports game slug from a scoreboard/team-schedule response's game url", + "description": "Date as YYYY-MM-DD; defaults to Yahoo Sports' current scoreboard date", "in": "query", - "name": "game", - "required": true, + "name": "date", "type": "string", - "x-example": "cleveland-guardians-detroit-tigers-460811106" + "x-example": "2026-08-13" + }, + { + "description": "Optional root soccer scoreboard month from 1 to 12; only with league=soccer", + "in": "query", + "name": "month", + "type": "integer", + "x-example": 11 + }, + { + "description": "Exact source competition id from yahoo-sports-soccer-scoreboard; only with league=soccer", + "in": "query", + "name": "competition_id", + "type": "string", + "x-example": "soccer.l.fbgb" + }, + { + "description": "Optional season year for a direct soccer competition page; discover values from yahoo-sports-soccer-scoreboard", + "in": "query", + "name": "season", + "type": "integer", + "x-example": 2025 } ], "produces": [ @@ -567396,7 +651806,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.gameResponseDoc" + "$ref": "#/definitions/yahoosports.scoreboardResponseDoc" } }, "400": { @@ -567429,34 +651839,34 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports game boxscore", + "summary": "Yahoo Sports scoreboard", "tags": [ "Yahoo Sports" ] } }, - "/yahoo-sports/golf-leaderboard": { + "/yahoo-sports/section-stream": { "get": { "consumes": [ "application/json" ], - "description": "Returns one golf tournament's full leaderboard (every golfer's rank, to-par score, status, holes-completed-in-current-round, per-round strokes, and a fixed stat set: earnings, eagles, birdies, pars, bogeys, double bogeys), from Yahoo Sports' own public tournament-leaderboard JSON API. Get the `tournament` id from a golf-schedule response's `id` field, e.g. `golf.e.23`.", - "operationId": "yahoo-sports-golf-leaderboard", + "description": "Returns one page from the public article stream embedded by a Yahoo Sports section page. The service reads the page's current list ID and source parameters from Flight data, then mirrors Yahoo's POST /api/content/ request. Items remain raw AssetRef objects, preserving nested content, tags, provider metadata, and new upstream fields. Use a section_url discovered from yahoo-sports-navigation; current examples include /indycar/ and /motogp/. Pages without an article stream are rejected. The only exposed page selector is Yahoo's integer pageOffset; it defaults to the page's embedded initial offset. Use page_info.start + page_info.count to request the next page. No server-side tag, sort, or category filter is added because the page does not expose one on this stream.", + "operationId": "yahoo-sports-section-stream", "parameters": [ { - "description": "Yahoo Sports golf tournament id from a golf-schedule response's id field", + "description": "Full HTTPS Yahoo Sports article-list URL from yahoo-sports-navigation", "in": "query", - "name": "tournament", + "name": "section_url", "required": true, "type": "string", - "x-example": "golf.e.23" + "x-example": "https://sports.yahoo.com/indycar/" }, { - "description": "4-digit season year (a tournament id is reused across years); defaults to the tournament's most recent season", + "description": "Exact upstream pageOffset. Defaults to the section page's initial offset; use page_info.start + page_info.count for the next page", "in": "query", - "name": "season", + "name": "page_offset", "type": "integer", - "x-example": 2026 + "x-example": 10 } ], "produces": [ @@ -567466,7 +651876,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.golfLeaderboardResponseDoc" + "$ref": "#/definitions/yahoosports.sectionStreamResponseDoc" } }, "400": { @@ -567499,41 +651909,40 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports golf tournament leaderboard", + "summary": "Yahoo Sports public section article stream", "tags": [ "Yahoo Sports" ] } }, - "/yahoo-sports/golf-schedule": { + "/yahoo-sports/soccer-scoreboard": { "get": { "consumes": [ "application/json" ], - "description": "Returns a golf tour's tournament schedule for a season (name, dates, status, purse, and venue), from Yahoo Sports' own public tournament-schedule JSON API. The `tour` enum accepts `pga-tour`, `pga-european-tours`, `lpga-tour`, `champions-tour`, and `european-tour`. Each tournament's `id` feeds the golf-leaderboard endpoint's `tournament` parameter.", - "operationId": "yahoo-sports-golf-schedule", + "description": "Returns games and the live competition/season selector from Yahoo's combined soccer scoreboard. The optional competition_id mirrors Yahoo's client-side competition dropdown over the preloaded game list; it is not sent upstream. Use the returned id values rather than inventing a competition filter.", + "operationId": "yahoo-sports-soccer-scoreboard", "parameters": [ { - "description": "Golf tour key", - "enum": [ - "pga-tour", - "pga-european-tours", - "lpga-tour", - "champions-tour", - "european-tour" - ], + "description": "Date as YYYY-MM-DD; defaults to Yahoo Sports' current soccer scoreboard date", "in": "query", - "name": "tour", - "required": true, + "name": "date", "type": "string", - "x-example": "pga-tour" + "x-example": "2026-11-01" }, { - "description": "4-digit season year; defaults to the tour's current season", + "description": "Optional Yahoo soccer scoreboard month number (1–12); may be combined with date", "in": "query", - "name": "season", + "name": "month", "type": "integer", - "x-example": 2026 + "x-example": 10 + }, + { + "description": "Exact source competition id from this response's competitions catalog; mirrors the page's client-side selector", + "in": "query", + "name": "competition_id", + "type": "string", + "x-example": "soccer.l.fbgb" } ], "produces": [ @@ -567543,7 +651952,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.golfScheduleResponseDoc" + "$ref": "#/definitions/yahoosports.soccerScoreboardResponseDoc" } }, "400": { @@ -567552,12 +651961,6 @@ "$ref": "#/definitions/app.Response" } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -567576,19 +651979,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports golf tournament schedule", + "summary": "Yahoo Sports all-competition soccer scoreboard", "tags": [ "Yahoo Sports" ] } }, - "/yahoo-sports/mma-fight-card": { + "/yahoo-sports/sportsbook-catalog": { "get": { "consumes": [ "application/json" ], - "description": "Returns the current/next UFC event's full fight card (each bout's fighters, records, rankings, weight class, and card position), from Yahoo Sports' own server-rendered MMA schedule page. This endpoint takes no parameters -- it always returns whichever event Yahoo currently features as next up, not a caller-selected one.", - "operationId": "yahoo-sports-mma-fight-card", + "description": "Returns every league option displayed by Yahoo's public odds page and distinguishes the page's client-side Trending/Soccer groups from the 15 Graphite leagueGameIds values. Use odds-games for one league's game IDs, odds-trending-games or odds-featured-games for those feeds, and odds-game for one game's available markets.", + "operationId": "yahoo-sports-sportsbook-catalog", "produces": [ "application/json" ], @@ -567596,19 +651999,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.mmaFightCardResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/yahoosports.sportsbookCatalogResponseDoc" } }, "429": { @@ -567629,19 +652020,57 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports MMA fight card", + "summary": "Yahoo Sports odds page filter catalog", "tags": [ "Yahoo Sports" ] } }, - "/yahoo-sports/mma-schedule": { + "/yahoo-sports/standings": { "get": { "consumes": [ "application/json" ], - "description": "Returns the known UFC event calendar (name, date, status), from Yahoo Sports' own server-rendered MMA schedule page. This endpoint is UFC-only and takes no parameters -- Yahoo's own page does not expose Bellator, PFL, ONE Championship, or other promotions from this URL.", - "operationId": "yahoo-sports-mma-schedule", + "description": "Returns grouped standings from a Yahoo Sports standings page. Use a league whose standings flag is true in yahoo-sports-leagues. Soccer standings can use a season from yahoo-sports-soccer-scoreboard; competitions without a source table are excluded.", + "operationId": "yahoo-sports-standings", + "parameters": [ + { + "description": "League key", + "enum": [ + "nfl", + "nba", + "wnba", + "mlb", + "nhl", + "college-football", + "college-basketball", + "mls", + "premier-league", + "la-liga", + "serie-a", + "bundesliga", + "ligue-1", + "champions-league", + "nwsl", + "ligamx-apertura", + "ligamx-clausura", + "world-cup", + "europa-league" + ], + "in": "query", + "name": "league", + "required": true, + "type": "string", + "x-example": "mlb" + }, + { + "description": "Optional soccer standings season from yahoo-sports-soccer-scoreboard", + "in": "query", + "name": "season", + "type": "integer", + "x-example": 2026 + } + ], "produces": [ "application/json" ], @@ -567649,7 +652078,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.mmaScheduleResponseDoc" + "$ref": "#/definitions/yahoosports.standingsResponseDoc" } }, "400": { @@ -567682,39 +652111,108 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports MMA event schedule", + "summary": "Yahoo Sports standings", "tags": [ "Yahoo Sports" ] } }, - "/yahoo-sports/motorsports-race": { + "/yahoo-sports/stats": { "get": { "consumes": [ "application/json" ], - "description": "Returns one race's full driver-by-driver results (finishing position, driver, car/team, points, laps, time), from Yahoo Sports' own server-rendered race page. The `series` enum accepts `f1` and `nascar`. Get the `race` slug from a motorsports-schedule response's race `url` (the last path segment), e.g. `australian-grand-prix-2026-2961`.", - "operationId": "yahoo-sports-motorsports-race", + "description": "Returns one complete Yahoo stats table (the embedded data can contain up to 200 rows), plus the live tabs, filters and sort-stat catalog. Pagination in Yahoo's table is client-side; no page or offset parameter is added.", + "operationId": "yahoo-sports-stats", "parameters": [ { - "description": "Motorsports series key", + "description": "Stats league key", "enum": [ - "f1", - "nascar" + "nfl", + "nba", + "mlb", + "nhl", + "wnba", + "college-football", + "college-basketball", + "mls", + "premier-league", + "la-liga", + "serie-a", + "bundesliga", + "ligue-1", + "ligamx-clausura", + "world-cup", + "concacaf-gold-cup", + "golf" ], "in": "query", - "name": "series", + "name": "league", "required": true, "type": "string", - "x-example": "f1" + "x-example": "nba" }, { - "description": "Yahoo Sports race slug from a motorsports-schedule response's race url", + "description": "Stats page type; defaults to individual", + "enum": [ + "individual", + "weekly", + "team" + ], "in": "query", - "name": "race", - "required": true, + "name": "pageType", "type": "string", - "x-example": "australian-grand-prix-2026-2961" + "x-example": "individual" + }, + { + "description": "Tab id from the response's tabs list; defaults to 0", + "in": "query", + "name": "selectedTable", + "type": "integer", + "x-example": 0 + }, + { + "description": "Qualified leaders filter, when listed by stats-discovery", + "in": "query", + "name": "qualified", + "type": "boolean", + "x-example": false + }, + { + "description": "Structure id from stats-discovery, e.g. nba.struct.conf.1", + "in": "query", + "name": "leagueStructure", + "type": "string" + }, + { + "description": "Position id from stats-discovery, e.g. POINT_GUARD", + "in": "query", + "name": "positionIds", + "type": "string" + }, + { + "description": "Split/situation id from stats-discovery, e.g. HOME", + "in": "query", + "name": "cutTypeIds", + "type": "string" + }, + { + "description": "Sort id from the response's sort_stat_ids, e.g. TOTAL_REBOUNDS_PER_GAME", + "in": "query", + "name": "sortStatId", + "type": "string" + }, + { + "description": "Week number from stats-discovery; pair with weekSeasonPhase", + "in": "query", + "name": "week", + "type": "integer" + }, + { + "description": "Phase value paired with week, e.g. REGULAR_SEASON or POSTSEASON", + "in": "query", + "name": "weekSeasonPhase", + "type": "string" } ], "produces": [ @@ -567724,7 +652222,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.motorsportsRaceResponseDoc" + "$ref": "#/definitions/yahoosports.statsResponseDoc" } }, "400": { @@ -567757,40 +652255,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports motorsports race results", + "summary": "Yahoo Sports league stats table", "tags": [ "Yahoo Sports" ] } }, - "/yahoo-sports/motorsports-schedule": { + "/yahoo-sports/stats-catalog": { "get": { "consumes": [ "application/json" ], - "description": "Returns a series' season race list (name, date, status, laps, distance, pole/race winner, venue), from Yahoo Sports' own server-rendered motorsports schedule page. The `series` enum accepts `f1` and `nascar`.", - "operationId": "yahoo-sports-motorsports-schedule", - "parameters": [ - { - "description": "Motorsports series key", - "enum": [ - "f1", - "nascar" - ], - "in": "query", - "name": "series", - "required": true, - "type": "string", - "x-example": "f1" - }, - { - "description": "4-digit season year; defaults to the current season", - "in": "query", - "name": "season", - "type": "integer", - "x-example": 2026 - } - ], + "description": "Lists the exact league keys and stats page templates with current embedded stats data. Use this catalog before yahoo-sports-stats-discovery and yahoo-sports-stats.", + "operationId": "yahoo-sports-stats-catalog", "produces": [ "application/json" ], @@ -567798,31 +652275,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.motorsportsScheduleResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/app.Response" - } - }, - "503": { - "description": "Service Unavailable", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/yahoosports.statsCatalogResponseDoc" } } }, @@ -567831,53 +652284,58 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports motorsports season schedule", + "summary": "Yahoo Sports stats league catalog", "tags": [ "Yahoo Sports" ] } }, - "/yahoo-sports/news": { + "/yahoo-sports/stats-discovery": { "get": { "consumes": [ "application/json" ], - "description": "Returns recent news articles (title, summary, author, published time, and link) for a league from sports.yahoo.com's own server-rendered news page. The `league` enum accepts `nfl`, `nba`, `wnba`, `mlb`, `nhl`, `college-football`, `college-basketball`, `college-womens-basketball`, `mls`, `premier-league`, `la-liga`, `serie-a`, `bundesliga`, `ligue-1`, `nwsl`, `ligamx-apertura`, `ligamx-clausura`, `copa-america`, `club-world-cup`, `world-cup`, `concacaf-champions-cup`, `concacaf-gold-cup`, `concacaf-league`, and `champions-league`.", - "operationId": "yahoo-sports-news", + "description": "Returns the live tab ids, filter parameters and values, and sort-stat ids for one Yahoo league stats page. This is the discovery surface for selectedTable, qualified, leagueStructure, positionIds, cutTypeIds, sortStatId, week, and weekSeasonPhase.", + "operationId": "yahoo-sports-stats-discovery", "parameters": [ { - "description": "League key", + "description": "Stats league key", "enum": [ "nfl", "nba", - "wnba", "mlb", "nhl", + "wnba", "college-football", "college-basketball", - "college-womens-basketball", "mls", "premier-league", "la-liga", "serie-a", "bundesliga", "ligue-1", - "champions-league", - "nwsl", - "ligamx-apertura", "ligamx-clausura", - "copa-america", - "club-world-cup", "world-cup", - "concacaf-champions-cup", "concacaf-gold-cup", - "concacaf-league" + "golf" ], "in": "query", "name": "league", "required": true, "type": "string", - "x-example": "nfl" + "x-example": "nba" + }, + { + "description": "Stats page type; defaults to individual", + "enum": [ + "individual", + "weekly", + "team" + ], + "in": "query", + "name": "pageType", + "type": "string", + "x-example": "individual" } ], "produces": [ @@ -567887,7 +652345,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.newsResponseDoc" + "$ref": "#/definitions/yahoosports.statsDiscoveryResponseDoc" } }, "400": { @@ -567920,19 +652378,67 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports league news", + "summary": "Yahoo Sports stats tabs and filters", "tags": [ "Yahoo Sports" ] } }, - "/yahoo-sports/olympics-medals": { + "/yahoo-sports/team": { "get": { "consumes": [ "application/json" ], - "description": "Returns the current Olympic games' full medal count by country (gold/silver/bronze/total, ranked), from Yahoo Sports' own server-rendered Olympics medals page. This endpoint takes no parameters -- it always returns whichever Olympic games Yahoo currently has medal data for, not a caller-selected prior edition.", - "operationId": "yahoo-sports-olympics-medals", + "description": "Returns one team detail record. Use league=soccer for Yahoo's flat soccer team namespace, or a league key from yahoo-sports-leagues for its own team page. Team slugs come from scoreboard or standings records.", + "operationId": "yahoo-sports-team", + "parameters": [ + { + "description": "League key", + "enum": [ + "nfl", + "nba", + "wnba", + "mlb", + "nhl", + "college-football", + "college-basketball", + "college-womens-basketball", + "soccer", + "mls", + "premier-league", + "la-liga", + "serie-a", + "bundesliga", + "ligue-1", + "champions-league", + "nwsl", + "ligamx-apertura", + "ligamx-clausura", + "copa-america", + "club-world-cup", + "world-cup", + "concacaf-champions-cup", + "concacaf-gold-cup", + "concacaf-league", + "womens-world-cup", + "europa-league", + "euro-championship" + ], + "in": "query", + "name": "league", + "required": true, + "type": "string", + "x-example": "nfl" + }, + { + "description": "Yahoo Sports team slug", + "in": "query", + "name": "team", + "required": true, + "type": "string", + "x-example": "green-bay" + } + ], "produces": [ "application/json" ], @@ -567940,7 +652446,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.olympicsMedalsResponseDoc" + "$ref": "#/definitions/yahoosports.teamResponseDoc" } }, "400": { @@ -567973,19 +652479,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports Olympics medal count", + "summary": "Yahoo Sports team detail", "tags": [ "Yahoo Sports" ] } }, - "/yahoo-sports/player": { + "/yahoo-sports/team-roster": { "get": { "consumes": [ "application/json" ], - "description": "Returns one player's bio/overview (position, jersey, status, injury, physicals, college, draft position) plus current-season stats by category, from sports.yahoo.com's own server-rendered player page. The `league` enum accepts `nfl`, `nba`, `wnba`, `mlb`, `nhl`, `college-football`, `college-basketball`, `college-womens-basketball`, `mls`, `premier-league`, `la-liga`, `serie-a`, `bundesliga`, `ligue-1`, `nwsl`, `ligamx-apertura`, `ligamx-clausura`, `copa-america`, `club-world-cup`, `world-cup`, `concacaf-champions-cup`, `concacaf-gold-cup`, `concacaf-league`, and `champions-league`. Get a numeric player id from a roster response's player `url` (the last path segment).", - "operationId": "yahoo-sports-player", + "description": "Returns one team roster. Use league=soccer for Yahoo's flat soccer team namespace, or a league key from yahoo-sports-leagues. Team slugs come from team or scoreboard records.", + "operationId": "yahoo-sports-team-roster", "parameters": [ { "description": "League key", @@ -567998,6 +652504,7 @@ "college-football", "college-basketball", "college-womens-basketball", + "soccer", "mls", "premier-league", "la-liga", @@ -568013,7 +652520,10 @@ "world-cup", "concacaf-champions-cup", "concacaf-gold-cup", - "concacaf-league" + "concacaf-league", + "womens-world-cup", + "europa-league", + "euro-championship" ], "in": "query", "name": "league", @@ -568022,12 +652532,12 @@ "x-example": "nfl" }, { - "description": "Numeric Yahoo Sports player id", + "description": "Yahoo Sports team slug", "in": "query", - "name": "player", + "name": "team", "required": true, "type": "string", - "x-example": "42019" + "x-example": "green-bay" } ], "produces": [ @@ -568037,7 +652547,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.playerResponseDoc" + "$ref": "#/definitions/yahoosports.rosterResponseDoc" } }, "400": { @@ -568070,19 +652580,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports player detail", + "summary": "Yahoo Sports team roster", "tags": [ "Yahoo Sports" ] } }, - "/yahoo-sports/scoreboard": { + "/yahoo-sports/team-schedule": { "get": { "consumes": [ "application/json" ], - "description": "Returns games (teams, score, status, venue, and broadcast info) for a league on a date, from sports.yahoo.com's own server-rendered scoreboard page. The `league` enum accepts `nfl`, `nba`, `wnba`, `mlb`, `nhl`, `college-football`, `college-basketball`, `college-womens-basketball`, `mls`, `premier-league`, `la-liga`, `serie-a`, `bundesliga`, `ligue-1`, `nwsl`, `ligamx-apertura`, `ligamx-clausura`, `copa-america`, `club-world-cup`, `world-cup`, `concacaf-champions-cup`, `concacaf-gold-cup`, `concacaf-league`, and `champions-league`.", - "operationId": "yahoo-sports-scoreboard", + "description": "Returns one team schedule. Use league=soccer for Yahoo's flat soccer team namespace, or a league key from yahoo-sports-leagues. Team slugs come from team or scoreboard records.", + "operationId": "yahoo-sports-team-schedule", "parameters": [ { "description": "League key", @@ -568095,6 +652605,7 @@ "college-football", "college-basketball", "college-womens-basketball", + "soccer", "mls", "premier-league", "la-liga", @@ -568110,7 +652621,10 @@ "world-cup", "concacaf-champions-cup", "concacaf-gold-cup", - "concacaf-league" + "concacaf-league", + "womens-world-cup", + "europa-league", + "euro-championship" ], "in": "query", "name": "league", @@ -568119,11 +652633,12 @@ "x-example": "nfl" }, { - "description": "Date as YYYY-MM-DD; defaults to Yahoo Sports' current scoreboard date", + "description": "Yahoo Sports team slug", "in": "query", - "name": "date", + "name": "team", + "required": true, "type": "string", - "x-example": "2026-08-13" + "x-example": "green-bay" } ], "produces": [ @@ -568133,7 +652648,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.scoreboardResponseDoc" + "$ref": "#/definitions/yahoosports.teamScheduleResponseDoc" } }, "400": { @@ -568166,47 +652681,33 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports scoreboard", + "summary": "Yahoo Sports team schedule", "tags": [ "Yahoo Sports" ] } }, - "/yahoo-sports/standings": { + "/yahoo-sports/tennis-rankings": { "get": { "consumes": [ "application/json" ], - "description": "Returns league standings (record, streak, games back, and clinch status) grouped by conference/division, from sports.yahoo.com's own server-rendered standings page. The `league` enum accepts `nfl`, `nba`, `wnba`, `mlb`, `nhl`, `college-football`, `college-basketball`, `mls`, `premier-league`, `la-liga`, `serie-a`, `bundesliga`, `ligue-1`, `nwsl`, `ligamx-apertura`, `ligamx-clausura`, `world-cup`, and `champions-league` (not `college-womens-basketball`, whose standings page does not embed a full grouped table). Soccer leagues return a single ungrouped table (no conference/division) and each entry's `record.points` is populated (3 per win, 1 per draw).", - "operationId": "yahoo-sports-standings", + "description": "Returns an ATP/WTA singles/doubles ranking list (rank, points, player name, country, age), from Yahoo Sports' own server-rendered rankings page. The `type` enum accepts `mens-singles`, `womens-singles`, `mens-doubles`, and `womens-doubles`. No stable player id is available in this list.", + "operationId": "yahoo-sports-tennis-rankings", "parameters": [ { - "description": "League key", + "description": "Rankings type", "enum": [ - "nfl", - "nba", - "wnba", - "mlb", - "nhl", - "college-football", - "college-basketball", - "mls", - "premier-league", - "la-liga", - "serie-a", - "bundesliga", - "ligue-1", - "champions-league", - "nwsl", - "ligamx-apertura", - "ligamx-clausura", - "world-cup" + "mens-singles", + "womens-singles", + "mens-doubles", + "womens-doubles" ], "in": "query", - "name": "league", + "name": "type", "required": true, "type": "string", - "x-example": "mlb" + "x-example": "mens-singles" } ], "produces": [ @@ -568216,7 +652717,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.standingsResponseDoc" + "$ref": "#/definitions/yahoosports.tennisRankingsResponseDoc" } }, "400": { @@ -568249,63 +652750,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports standings", + "summary": "Yahoo Sports tennis rankings", "tags": [ "Yahoo Sports" ] } }, - "/yahoo-sports/team": { + "/yahoo-sports/tennis-schedule": { "get": { "consumes": [ "application/json" ], - "description": "Returns one team's detail (identity, colors, conference/division, and current standing summary) from sports.yahoo.com's own server-rendered team page. The `league` enum accepts `nfl`, `nba`, `wnba`, `mlb`, `nhl`, `college-football`, `college-basketball`, `college-womens-basketball`, `mls`, `premier-league`, `la-liga`, `serie-a`, `bundesliga`, `ligue-1`, `nwsl`, `ligamx-apertura`, `ligamx-clausura`, `copa-america`, `club-world-cup`, `world-cup`, `concacaf-champions-cup`, `concacaf-gold-cup`, `concacaf-league`, and `champions-league`. Get a team slug from the scoreboard or standings response (e.g. `green-bay`, `la-lakers`).", - "operationId": "yahoo-sports-team", - "parameters": [ - { - "description": "League key", - "enum": [ - "nfl", - "nba", - "wnba", - "mlb", - "nhl", - "college-football", - "college-basketball", - "college-womens-basketball", - "mls", - "premier-league", - "la-liga", - "serie-a", - "bundesliga", - "ligue-1", - "champions-league", - "nwsl", - "ligamx-apertura", - "ligamx-clausura", - "copa-america", - "club-world-cup", - "world-cup", - "concacaf-champions-cup", - "concacaf-gold-cup", - "concacaf-league" - ], - "in": "query", - "name": "league", - "required": true, - "type": "string", - "x-example": "nfl" - }, - { - "description": "Yahoo Sports team slug", - "in": "query", - "name": "team", - "required": true, - "type": "string", - "x-example": "green-bay" - } - ], + "description": "Returns the full season tennis tournament calendar (name, gender, match type, surface, dates, status, venue, and champion where decided), from Yahoo Sports' own server-rendered tournaments page. This endpoint takes no parameters -- it always returns Yahoo's current full-season snapshot (season/gender/match-type filtering happens client-side on Yahoo's own page, not server-side).", + "operationId": "yahoo-sports-tennis-schedule", "produces": [ "application/json" ], @@ -568313,7 +652770,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.teamResponseDoc" + "$ref": "#/definitions/yahoosports.tennisScheduleResponseDoc" } }, "400": { @@ -568346,63 +652803,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports team detail", + "summary": "Yahoo Sports tennis tournament schedule", "tags": [ "Yahoo Sports" ] } }, - "/yahoo-sports/team-roster": { + "/yahoo-sports/tennis-scoreboard": { "get": { "consumes": [ "application/json" ], - "description": "Returns a team's full roster (position, jersey number, status, injury, physicals, college, and experience) from sports.yahoo.com's own server-rendered roster page. The `league` enum accepts `nfl`, `nba`, `wnba`, `mlb`, `nhl`, `college-football`, `college-basketball`, `college-womens-basketball`, `mls`, `premier-league`, `la-liga`, `serie-a`, `bundesliga`, `ligue-1`, `nwsl`, `ligamx-apertura`, `ligamx-clausura`, `copa-america`, `club-world-cup`, `world-cup`, `concacaf-champions-cup`, `concacaf-gold-cup`, `concacaf-league`, and `champions-league`. Get a team slug from the scoreboard or standings response (e.g. `green-bay`, `la-lakers`).", - "operationId": "yahoo-sports-team-roster", - "parameters": [ - { - "description": "League key", - "enum": [ - "nfl", - "nba", - "wnba", - "mlb", - "nhl", - "college-football", - "college-basketball", - "college-womens-basketball", - "mls", - "premier-league", - "la-liga", - "serie-a", - "bundesliga", - "ligue-1", - "champions-league", - "nwsl", - "ligamx-apertura", - "ligamx-clausura", - "copa-america", - "club-world-cup", - "world-cup", - "concacaf-champions-cup", - "concacaf-gold-cup", - "concacaf-league" - ], - "in": "query", - "name": "league", - "required": true, - "type": "string", - "x-example": "nfl" - }, - { - "description": "Yahoo Sports team slug", - "in": "query", - "name": "team", - "required": true, - "type": "string", - "x-example": "green-bay" - } - ], + "description": "Returns a snapshot of current/recently-completed tennis matches across the tour (tournament, round, players, per-set scores, winner, and status), from Yahoo Sports' own server-rendered tournaments page. This endpoint takes no parameters -- it is a fixed-size \"what's happening right now\" snapshot, not a by-date query.", + "operationId": "yahoo-sports-tennis-scoreboard", "produces": [ "application/json" ], @@ -568410,7 +652823,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.rosterResponseDoc" + "$ref": "#/definitions/yahoosports.tennisScoreboardResponseDoc" } }, "400": { @@ -568443,61 +652856,32 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports team roster", + "summary": "Yahoo Sports tennis scoreboard", "tags": [ "Yahoo Sports" ] } }, - "/yahoo-sports/team-schedule": { + "/yahoo-sports/topic-news": { "get": { "consumes": [ "application/json" ], - "description": "Returns a team's full schedule (regular season plus any already-played/scheduled playoff games), with the same per-game fields as the scoreboard, from sports.yahoo.com's own server-rendered team schedule page. The `league` enum accepts `nfl`, `nba`, `wnba`, `mlb`, `nhl`, `college-football`, `college-basketball`, `college-womens-basketball`, `mls`, `premier-league`, `la-liga`, `serie-a`, `bundesliga`, `ligue-1`, `nwsl`, `ligamx-apertura`, `ligamx-clausura`, `copa-america`, `club-world-cup`, `world-cup`, `concacaf-champions-cup`, `concacaf-gold-cup`, `concacaf-league`, and `champions-league`. Get a team slug from the scoreboard or standings response (e.g. `green-bay`, `la-lakers`).", - "operationId": "yahoo-sports-team-schedule", + "description": "Returns the current article list for a public Yahoo Sports root or sport-scoped topic page. Topic slugs are open-ended; article tags are returned exactly as Yahoo embeds them.", + "operationId": "yahoo-sports-topic-news", "parameters": [ { - "description": "League key", - "enum": [ - "nfl", - "nba", - "wnba", - "mlb", - "nhl", - "college-football", - "college-basketball", - "college-womens-basketball", - "mls", - "premier-league", - "la-liga", - "serie-a", - "bundesliga", - "ligue-1", - "champions-league", - "nwsl", - "ligamx-apertura", - "ligamx-clausura", - "copa-america", - "club-world-cup", - "world-cup", - "concacaf-champions-cup", - "concacaf-gold-cup", - "concacaf-league" - ], + "description": "Open-ended root topic slug", "in": "query", - "name": "league", - "required": true, + "name": "topic", "type": "string", - "x-example": "nfl" + "x-example": "how-to-watch" }, { - "description": "Yahoo Sports team slug", + "description": "Full Yahoo Sports topic URL, including sport-scoped topic pages such as /golf/topic/lpga-tour/", "in": "query", - "name": "team", - "required": true, - "type": "string", - "x-example": "green-bay" + "name": "topic_url", + "type": "string" } ], "produces": [ @@ -568507,7 +652891,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.teamScheduleResponseDoc" + "$ref": "#/definitions/yahoosports.topicNewsResponseDoc" } }, "400": { @@ -568540,33 +652924,38 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports team schedule", + "summary": "Yahoo Sports topic news", "tags": [ "Yahoo Sports" ] } }, - "/yahoo-sports/tennis-rankings": { + "/yahoo-sports/video-headlines": { "get": { "consumes": [ "application/json" ], - "description": "Returns an ATP/WTA singles/doubles ranking list (rank, points, player name, country, age), from Yahoo Sports' own server-rendered rankings page. The `type` enum accepts `mens-singles`, `womens-singles`, `mens-doubles`, and `womens-doubles`. No stable player id is available in this list.", - "operationId": "yahoo-sports-tennis-rankings", + "description": "Returns video cards from Yahoo's public storyheadlines list. Use a list_id from yahoo-sports-video-list-catalog or a Yahoo video-show page; count supports the page's observed values 1 and 6.", + "operationId": "yahoo-sports-video-headlines", "parameters": [ { - "description": "Rankings type", - "enum": [ - "mens-singles", - "womens-singles", - "mens-doubles", - "womens-doubles" - ], + "description": "Yahoo video list UUID from a Watch or video-show page", "in": "query", - "name": "type", + "name": "list_id", "required": true, "type": "string", - "x-example": "mens-singles" + "x-example": "dcb9fa54-438f-4388-ab6c-4ac34fea3df9" + }, + { + "description": "Yahoo page request count: 1 or 6. Defaults to 6.", + "enum": [ + 1, + 6 + ], + "in": "query", + "name": "count", + "type": "integer", + "x-example": 6 } ], "produces": [ @@ -568576,7 +652965,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.tennisRankingsResponseDoc" + "$ref": "#/definitions/yahoosports.videoHeadlinesResponseDoc" } }, "400": { @@ -568609,19 +652998,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports tennis rankings", + "summary": "Yahoo Sports video headlines", "tags": [ "Yahoo Sports" ] } }, - "/yahoo-sports/tennis-schedule": { + "/yahoo-sports/video-list-catalog": { "get": { "consumes": [ "application/json" ], - "description": "Returns the full season tennis tournament calendar (name, gender, match type, surface, dates, status, venue, and champion where decided), from Yahoo Sports' own server-rendered tournaments page. This endpoint takes no parameters -- it always returns Yahoo's current full-season snapshot (season/gender/match-type filtering happens client-side on Yahoo's own page, not server-side).", - "operationId": "yahoo-sports-tennis-schedule", + "description": "Lists the current video-list IDs embedded in Yahoo Sports' desktop Watch page. Use each list_id with yahoo-sports-video-headlines; IDs are discovered dynamically and may change.", + "operationId": "yahoo-sports-video-list-catalog", "produces": [ "application/json" ], @@ -568629,13 +653018,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.tennisScheduleResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/yahoosports.videoListCatalogResponseDoc" } }, "404": { @@ -568662,19 +653045,19 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports tennis tournament schedule", + "summary": "Yahoo Sports video-list catalog", "tags": [ "Yahoo Sports" ] } }, - "/yahoo-sports/tennis-scoreboard": { + "/yahoo-sports/watch-schedule": { "get": { "consumes": [ "application/json" ], - "description": "Returns a snapshot of current/recently-completed tennis matches across the tour (tournament, round, players, per-set scores, winner, and status), from Yahoo Sports' own server-rendered tournaments page. This endpoint takes no parameters -- it is a fixed-size \"what's happening right now\" snapshot, not a by-date query.", - "operationId": "yahoo-sports-tennis-scoreboard", + "description": "Returns the current program schedule exposed by Yahoo Sports' Watch page. The source request has no date, league, season, sort, or pagination parameter.", + "operationId": "yahoo-sports-watch-schedule", "produces": [ "application/json" ], @@ -568682,13 +653065,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/yahoosports.tennisScoreboardResponseDoc" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/app.Response" + "$ref": "#/definitions/yahoosports.watchScheduleResponseDoc" } }, "404": { @@ -568715,7 +653092,7 @@ "ApiKeyAuth": [] } ], - "summary": "Yahoo Sports tennis scoreboard", + "summary": "Yahoo Sports TV schedule", "tags": [ "Yahoo Sports" ] diff --git a/pom.xml b/pom.xml index 13b61d9..f2c54de 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ net.crawlora crawlora-sdk - 1.50.0 + 1.51.0 jar Crawlora Java SDK diff --git a/scripts/generate.py b/scripts/generate.py index b09eedd..f74d90e 100644 --- a/scripts/generate.py +++ b/scripts/generate.py @@ -200,24 +200,33 @@ def render_operations(model): lines.append(f" m.put({java_string(operation_id)}, {_operation_literal(op)});") lines.append(" }") lines.append("") + group_items = list(model.groups.items()) + group_chunk_size = 30 + group_chunk_count = (len(group_items) + group_chunk_size - 1) // group_chunk_size lines.extend([ "", " private static Map> buildGroups() {", " Map> g = new LinkedHashMap<>();", ]) - for group_name, methods in model.groups.items(): - lines.append(" {") - lines.append(" Map group = new LinkedHashMap<>();") - for method_name, operation_id in methods.items(): - lines.append(f" group.put({java_string(method_name)}, {java_string(operation_id)});") - lines.append(f" g.put({java_string(group_name)}, Map.copyOf(group));") - lines.append(" }") + for chunk_index in range(group_chunk_count): + lines.append(f" putGroups{chunk_index}(g);") lines.extend([ " return Map.copyOf(g);", " }", - "}", "", ]) + for chunk_index in range(group_chunk_count): + lines.append(f" private static void putGroups{chunk_index}(Map> g) {{") + for group_name, methods in group_items[chunk_index * group_chunk_size:(chunk_index + 1) * group_chunk_size]: + lines.append(" {") + lines.append(" Map group = new LinkedHashMap<>();") + for method_name, operation_id in methods.items(): + lines.append(f" group.put({java_string(method_name)}, {java_string(operation_id)});") + lines.append(f" g.put({java_string(group_name)}, Map.copyOf(group));") + lines.append(" }") + lines.append(" }") + lines.append("") + lines.extend(["}", ""]) return "\n".join(lines) diff --git a/scripts/test_generate.py b/scripts/test_generate.py new file mode 100644 index 0000000..3beeb42 --- /dev/null +++ b/scripts/test_generate.py @@ -0,0 +1,31 @@ +"""Regression tests for Java SDK generation edge cases.""" +import unittest + +import generate +from _sdkgen import core + + +class RenderOperationsTests(unittest.TestCase): + def test_group_metadata_is_split_into_jvm_safe_helpers(self): + groups = { + f"platform-{index}": {"lookup": f"platform-{index}-lookup"} + for index in range(61) + } + model = core.Model( + groups=groups, + operations={}, + meta={}, + definitions={}, + operation_count=61, + ) + + source = generate.render_operations(model) + + self.assertIn("putGroups0(g);", source) + self.assertIn("putGroups1(g);", source) + self.assertIn("putGroups2(g);", source) + self.assertIn('g.put("platform-60", Map.copyOf(group));', source) + + +if __name__ == "__main__": + unittest.main() diff --git a/src/main/java/net/crawlora/ClientGroups.java b/src/main/java/net/crawlora/ClientGroups.java index bb280ef..8ca0d30 100644 --- a/src/main/java/net/crawlora/ClientGroups.java +++ b/src/main/java/net/crawlora/ClientGroups.java @@ -266,6 +266,14 @@ public BalenciagaGroup balenciaga() { return new BalenciagaGroup((CrawloraClient) this); } + /** + * Typed accessor for the "bandcamp" operation group. + * @return a new {@link BandcampGroup} bound to this client + */ + public BandcampGroup bandcamp() { + return new BandcampGroup((CrawloraClient) this); + } + /** * Typed accessor for the "barrons" operation group. * @return a new {@link BarronsGroup} bound to this client @@ -386,6 +394,14 @@ public Bo3Group bo3() { return new Bo3Group((CrawloraClient) this); } + /** + * Typed accessor for the "boardGameGeek" operation group. + * @return a new {@link BoardGameGeekGroup} bound to this client + */ + public BoardGameGeekGroup boardGameGeek() { + return new BoardGameGeekGroup((CrawloraClient) this); + } + /** * Typed accessor for the "bonhams" operation group. * @return a new {@link BonhamsGroup} bound to this client @@ -402,6 +418,14 @@ public BookingGroup booking() { return new BookingGroup((CrawloraClient) this); } + /** + * Typed accessor for the "booksy" operation group. + * @return a new {@link BooksyGroup} bound to this client + */ + public BooksyGroup booksy() { + return new BooksyGroup((CrawloraClient) this); + } + /** * Typed accessor for the "boots" operation group. * @return a new {@link BootsGroup} bound to this client @@ -450,6 +474,14 @@ public BreitbartGroup breitbart() { return new BreitbartGroup((CrawloraClient) this); } + /** + * Typed accessor for the "bringATrailer" operation group. + * @return a new {@link BringAtrailerGroup} bound to this client + */ + public BringAtrailerGroup bringATrailer() { + return new BringAtrailerGroup((CrawloraClient) this); + } + /** * Typed accessor for the "brisbaneTimes" operation group. * @return a new {@link BrisbaneTimesGroup} bound to this client @@ -506,6 +538,14 @@ public CapterraGroup capterra() { return new CapterraGroup((CrawloraClient) this); } + /** + * Typed accessor for the "cardmarket" operation group. + * @return a new {@link CardmarketGroup} bound to this client + */ + public CardmarketGroup cardmarket() { + return new CardmarketGroup((CrawloraClient) this); + } + /** * Typed accessor for the "carMax" operation group. * @return a new {@link CarMaxGroup} bound to this client @@ -706,6 +746,14 @@ public CourtListenerGroup courtListener() { return new CourtListenerGroup((CrawloraClient) this); } + /** + * Typed accessor for the "cricbuzz" operation group. + * @return a new {@link CricbuzzGroup} bound to this client + */ + public CricbuzzGroup cricbuzz() { + return new CricbuzzGroup((CrawloraClient) this); + } + /** * Typed accessor for the "cricinfo" operation group. * @return a new {@link CricinfoGroup} bound to this client @@ -866,6 +914,22 @@ public DiscogsGroup discogs() { return new DiscogsGroup((CrawloraClient) this); } + /** + * Typed accessor for the "dollarTree" operation group. + * @return a new {@link DollarTreeGroup} bound to this client + */ + public DollarTreeGroup dollarTree() { + return new DollarTreeGroup((CrawloraClient) this); + } + + /** + * Typed accessor for the "domain" operation group. + * @return a new {@link DomainGroup} bound to this client + */ + public DomainGroup domain() { + return new DomainGroup((CrawloraClient) this); + } + /** * Typed accessor for the "dominos" operation group. * @return a new {@link DominosGroup} bound to this client @@ -1058,6 +1122,14 @@ public FacebookGroup facebook() { return new FacebookGroup((CrawloraClient) this); } + /** + * Typed accessor for the "faceit" operation group. + * @return a new {@link FaceitGroup} bound to this client + */ + public FaceitGroup faceit() { + return new FaceitGroup((CrawloraClient) this); + } + /** * Typed accessor for the "fanatics" operation group. * @return a new {@link FanaticsGroup} bound to this client @@ -1122,6 +1194,14 @@ public FastCompanyGroup fastCompany() { return new FastCompanyGroup((CrawloraClient) this); } + /** + * Typed accessor for the "fever" operation group. + * @return a new {@link FeverGroup} bound to this client + */ + public FeverGroup fever() { + return new FeverGroup((CrawloraClient) this); + } + /** * Typed accessor for the "fiveGuys" operation group. * @return a new {@link FiveGuysGroup} bound to this client @@ -1146,6 +1226,14 @@ public FlashscoreGroup flashscore() { return new FlashscoreGroup((CrawloraClient) this); } + /** + * Typed accessor for the "flickReels" operation group. + * @return a new {@link FlickReelsGroup} bound to this client + */ + public FlickReelsGroup flickReels() { + return new FlickReelsGroup((CrawloraClient) this); + } + /** * Typed accessor for the "foodpanda" operation group. * @return a new {@link FoodpandaGroup} bound to this client @@ -1178,6 +1266,14 @@ public ForeignPolicyGroup foreignPolicy() { return new ForeignPolicyGroup((CrawloraClient) this); } + /** + * Typed accessor for the "formula1" operation group. + * @return a new {@link Formula1Group} bound to this client + */ + public Formula1Group formula1() { + return new Formula1Group((CrawloraClient) this); + } + /** * Typed accessor for the "fortune" operation group. * @return a new {@link FortuneGroup} bound to this client @@ -1226,6 +1322,14 @@ public FreeMalaysiaTodayGroup freeMalaysiaToday() { return new FreeMalaysiaTodayGroup((CrawloraClient) this); } + /** + * Typed accessor for the "fresha" operation group. + * @return a new {@link FreshaGroup} bound to this client + */ + public FreshaGroup fresha() { + return new FreshaGroup((CrawloraClient) this); + } + /** * Typed accessor for the "ft" operation group. * @return a new {@link FtGroup} bound to this client @@ -1242,6 +1346,14 @@ public FussballDeGroup fussballDe() { return new FussballDeGroup((CrawloraClient) this); } + /** + * Typed accessor for the "futGg" operation group. + * @return a new {@link FutGgGroup} bound to this client + */ + public FutGgGroup futGg() { + return new FutGgGroup((CrawloraClient) this); + } + /** * Typed accessor for the "gameRant" operation group. * @return a new {@link GameRantGroup} bound to this client @@ -1322,6 +1434,14 @@ public GlobeAndMailGroup globeAndMail() { return new GlobeAndMailGroup((CrawloraClient) this); } + /** + * Typed accessor for the "glovo" operation group. + * @return a new {@link GlovoGroup} bound to this client + */ + public GlovoGroup glovo() { + return new GlovoGroup((CrawloraClient) this); + } + /** * Typed accessor for the "gmaNews" operation group. * @return a new {@link GmaNewsGroup} bound to this client @@ -1498,6 +1618,14 @@ public HindustanTimesGroup hindustanTimes() { return new HindustanTimesGroup((CrawloraClient) this); } + /** + * Typed accessor for the "hltv" operation group. + * @return a new {@link HltvGroup} bound to this client + */ + public HltvGroup hltv() { + return new HltvGroup((CrawloraClient) this); + } + /** * Typed accessor for the "hM" operation group. * @return a new {@link HMGroup} bound to this client @@ -1690,6 +1818,14 @@ public IrishTimesGroup irishTimes() { return new IrishTimesGroup((CrawloraClient) this); } + /** + * Typed accessor for the "itchIo" operation group. + * @return a new {@link ItchIoGroup} bound to this client + */ + public ItchIoGroup itchIo() { + return new ItchIoGroup((CrawloraClient) this); + } + /** * Typed accessor for the "theJapanTimes" operation group. * @return a new {@link TheJapanTimesGroup} bound to this client @@ -1794,6 +1930,14 @@ public KickstarterGroup kickstarter() { return new KickstarterGroup((CrawloraClient) this); } + /** + * Typed accessor for the "klook" operation group. + * @return a new {@link KlookGroup} bound to this client + */ + public KlookGroup klook() { + return new KlookGroup((CrawloraClient) this); + } + /** * Typed accessor for the "kohlS" operation group. * @return a new {@link KohlSGroup} bound to this client @@ -1914,6 +2058,14 @@ public LululemonGroup lululemon() { return new LululemonGroup((CrawloraClient) this); } + /** + * Typed accessor for the "luma" operation group. + * @return a new {@link LumaGroup} bound to this client + */ + public LumaGroup luma() { + return new LumaGroup((CrawloraClient) this); + } + /** * Typed accessor for the "macRumors" operation group. * @return a new {@link MacRumorsGroup} bound to this client @@ -1970,6 +2122,14 @@ public MashableGroup mashable() { return new MashableGroup((CrawloraClient) this); } + /** + * Typed accessor for the "maxPreps" operation group. + * @return a new {@link MaxPrepsGroup} bound to this client + */ + public MaxPrepsGroup maxPreps() { + return new MaxPrepsGroup((CrawloraClient) this); + } + /** * Typed accessor for the "mcDonalds" operation group. * @return a new {@link McDonaldsGroup} bound to this client @@ -2082,6 +2242,14 @@ public ModaOperandiGroup modaOperandi() { return new ModaOperandiGroup((CrawloraClient) this); } + /** + * Typed accessor for the "modrinth" operation group. + * @return a new {@link ModrinthGroup} bound to this client + */ + public ModrinthGroup modrinth() { + return new ModrinthGroup((CrawloraClient) this); + } + /** * Typed accessor for the "moncler" operation group. * @return a new {@link MonclerGroup} bound to this client @@ -2114,6 +2282,22 @@ public TheMotleyFoolGroup theMotleyFool() { return new TheMotleyFoolGroup((CrawloraClient) this); } + /** + * Typed accessor for the "motoGp" operation group. + * @return a new {@link MotoGpGroup} bound to this client + */ + public MotoGpGroup motoGp() { + return new MotoGpGroup((CrawloraClient) this); + } + + /** + * Typed accessor for the "nascar" operation group. + * @return a new {@link NascarGroup} bound to this client + */ + public NascarGroup nascar() { + return new NascarGroup((CrawloraClient) this); + } + /** * Typed accessor for the "nationAfrica" operation group. * @return a new {@link NationAfricaGroup} bound to this client @@ -2138,6 +2322,14 @@ public NationalPostGroup nationalPost() { return new NationalPostGroup((CrawloraClient) this); } + /** + * Typed accessor for the "nba" operation group. + * @return a new {@link NbaGroup} bound to this client + */ + public NbaGroup nba() { + return new NbaGroup((CrawloraClient) this); + } + /** * Typed accessor for the "nbcNews" operation group. * @return a new {@link NbcNewsGroup} bound to this client @@ -2154,6 +2346,14 @@ public NdtvGroup ndtv() { return new NdtvGroup((CrawloraClient) this); } + /** + * Typed accessor for the "netShort" operation group. + * @return a new {@link NetShortGroup} bound to this client + */ + public NetShortGroup netShort() { + return new NetShortGroup((CrawloraClient) this); + } + /** * Typed accessor for the "news18" operation group. * @return a new {@link News18Group} bound to this client @@ -2202,6 +2402,14 @@ public TheNewYorkerGroup theNewYorker() { return new TheNewYorkerGroup((CrawloraClient) this); } + /** + * Typed accessor for the "nfhs" operation group. + * @return a new {@link NfhsGroup} bound to this client + */ + public NfhsGroup nfhs() { + return new NfhsGroup((CrawloraClient) this); + } + /** * Typed accessor for the "nike" operation group. * @return a new {@link NikeGroup} bound to this client @@ -2314,6 +2522,22 @@ public OpenDotaGroup openDota() { return new OpenDotaGroup((CrawloraClient) this); } + /** + * Typed accessor for the "openF1" operation group. + * @return a new {@link OpenF1Group} bound to this client + */ + public OpenF1Group openF1() { + return new OpenF1Group((CrawloraClient) this); + } + + /** + * Typed accessor for the "openLigaDb" operation group. + * @return a new {@link OpenLigaDbGroup} bound to this client + */ + public OpenLigaDbGroup openLigaDb() { + return new OpenLigaDbGroup((CrawloraClient) this); + } + /** * Typed accessor for the "openSea" operation group. * @return a new {@link OpenSeaGroup} bound to this client @@ -2370,6 +2594,14 @@ public PapaJohnSGroup papaJohnS() { return new PapaJohnSGroup((CrawloraClient) this); } + /** + * Typed accessor for the "partiful" operation group. + * @return a new {@link PartifulGroup} bound to this client + */ + public PartifulGroup partiful() { + return new PartifulGroup((CrawloraClient) this); + } + /** * Typed accessor for the "patreon" operation group. * @return a new {@link PatreonGroup} bound to this client @@ -2402,6 +2634,22 @@ public PeopleGroup people() { return new PeopleGroup((CrawloraClient) this); } + /** + * Typed accessor for the "petSmart" operation group. + * @return a new {@link PetSmartGroup} bound to this client + */ + public PetSmartGroup petSmart() { + return new PetSmartGroup((CrawloraClient) this); + } + + /** + * Typed accessor for the "pgaTour" operation group. + * @return a new {@link PgaTourGroup} bound to this client + */ + public PgaTourGroup pgaTour() { + return new PgaTourGroup((CrawloraClient) this); + } + /** * Typed accessor for the "philadelphiaInquirer" operation group. * @return a new {@link PhiladelphiaInquirerGroup} bound to this client @@ -3034,6 +3282,14 @@ public SparkFunGroup sparkFun() { return new SparkFunGroup((CrawloraClient) this); } + /** + * Typed accessor for the "speedrunCom" operation group. + * @return a new {@link SpeedrunComGroup} bound to this client + */ + public SpeedrunComGroup speedrunCom() { + return new SpeedrunComGroup((CrawloraClient) this); + } + /** * Typed accessor for the "sportingNews" operation group. * @return a new {@link SportingNewsGroup} bound to this client @@ -3746,6 +4002,14 @@ public WccftechGroup wccftech() { return new WccftechGroup((CrawloraClient) this); } + /** + * Typed accessor for the "webtoon" operation group. + * @return a new {@link WebtoonGroup} bound to this client + */ + public WebtoonGroup webtoon() { + return new WebtoonGroup((CrawloraClient) this); + } + /** * Typed accessor for the "wendys" operation group. * @return a new {@link WendysGroup} bound to this client @@ -3810,6 +4074,14 @@ public WallStreetJournalGroup wallStreetJournal() { return new WallStreetJournalGroup((CrawloraClient) this); } + /** + * Typed accessor for the "wta" operation group. + * @return a new {@link WtaGroup} bound to this client + */ + public WtaGroup wta() { + return new WtaGroup((CrawloraClient) this); + } + /** * Typed accessor for the "x" operation group. * @return a new {@link XGroup} bound to this client diff --git a/src/main/java/net/crawlora/OperationId.java b/src/main/java/net/crawlora/OperationId.java index 13dcb29..4715bd8 100644 --- a/src/main/java/net/crawlora/OperationId.java +++ b/src/main/java/net/crawlora/OperationId.java @@ -142,6 +142,7 @@ private OperationId() {} public static final String APP_STORE_SUGGEST = "appstore-suggest"; public static final String APP_STORE_VERSION_HISTORY = "appstore-version-history"; public static final String APPLE_BOOKS_AUDIOBOOK = "apple-books-audiobook"; + public static final String APPLE_BOOKS_AUDIOBOOK_CHARTS = "apple-books-audiobook-charts"; public static final String APPLE_BOOKS_AUDIOBOOK_REVIEWS = "apple-books-audiobook-reviews"; public static final String APPLE_BOOKS_AUDIOBOOK_SEARCH = "apple-books-audiobook-search"; public static final String APPLE_BOOKS_AUDIOBOOK_SERIES = "apple-books-audiobook-series"; @@ -151,6 +152,7 @@ private OperationId() {} public static final String APPLE_BOOKS_BOOK_REVIEWS = "apple-books-book-reviews"; public static final String APPLE_BOOKS_BOOK_SIMILAR = "apple-books-book-similar"; public static final String APPLE_BOOKS_CHARTS = "apple-books-charts"; + public static final String APPLE_BOOKS_GENRES = "apple-books-genres"; public static final String APPLE_BOOKS_SEARCH = "apple-books-search"; public static final String APPLE_BOOKS_SERIES = "apple-books-series"; public static final String APPLE_JOBS_JOB = "apple-jobs-job"; @@ -219,6 +221,12 @@ private OperationId() {} public static final String BALENCIAGA_SEARCH = "balenciaga-search"; public static final String BALENCIAGA_STORE_COUNTRIES = "balenciaga-store-countries"; public static final String BALENCIAGA_STORES = "balenciaga-stores"; + public static final String BANDCAMP_ARTIST = "bandcamp-artist"; + public static final String BANDCAMP_DISCOVER = "bandcamp-discover"; + public static final String BANDCAMP_FILTERS = "bandcamp-filters"; + public static final String BANDCAMP_RELATED_TAGS = "bandcamp-related-tags"; + public static final String BANDCAMP_RELEASE = "bandcamp-release"; + public static final String BANDCAMP_SEARCH = "bandcamp-search"; public static final String BARRONS_ARTICLE = "barrons-article"; public static final String BARRONS_HEADLINES = "barrons-headlines"; public static final String BARRONS_NEWS = "barrons-news"; @@ -349,6 +357,20 @@ private OperationId() {} public static final String BO3_TOURNAMENTS = "bo3-tournaments"; public static final String BO3_TRANSFERS = "bo3-transfers"; public static final String BO3_VALORANT_LEADERBOARD = "bo3-valorant-leaderboard"; + public static final String BOARD_GAME_GEEK_BOARDGAMEGEEK_CARDSETS = "boardgamegeek-cardsets"; + public static final String BOARD_GAME_GEEK_BOARDGAMEGEEK_ENTITY = "boardgamegeek-entity"; + public static final String BOARD_GAME_GEEK_BOARDGAMEGEEK_GAME = "boardgamegeek-game"; + public static final String BOARD_GAME_GEEK_BOARDGAMEGEEK_GEEKLIST = "boardgamegeek-geeklist"; + public static final String BOARD_GAME_GEEK_BOARDGAMEGEEK_GEEKLIST_ITEMS = "boardgamegeek-geeklist-items"; + public static final String BOARD_GAME_GEEK_BOARDGAMEGEEK_GEEKLISTS = "boardgamegeek-geeklists"; + public static final String BOARD_GAME_GEEK_BOARDGAMEGEEK_HOTNESS = "boardgamegeek-hotness"; + public static final String BOARD_GAME_GEEK_BOARDGAMEGEEK_LINKS = "boardgamegeek-links"; + public static final String BOARD_GAME_GEEK_BOARDGAMEGEEK_MEDIA = "boardgamegeek-media"; + public static final String BOARD_GAME_GEEK_BOARDGAMEGEEK_RECOMMENDATIONS = "boardgamegeek-recommendations"; + public static final String BOARD_GAME_GEEK_BOARDGAMEGEEK_REVIEWS = "boardgamegeek-reviews"; + public static final String BOARD_GAME_GEEK_BOARDGAMEGEEK_TAXONOMY = "boardgamegeek-taxonomy"; + public static final String BOARD_GAME_GEEK_BOARDGAMEGEEK_THREAD = "boardgamegeek-thread"; + public static final String BOARD_GAME_GEEK_BOARDGAMEGEEK_THREADS = "boardgamegeek-threads"; public static final String BONHAMS_AUCTION_DETAIL = "bonhams-auction-detail"; public static final String BONHAMS_AUCTION_LOTS = "bonhams-auction-lots"; public static final String BONHAMS_AUCTION_SEARCH = "bonhams-auction-search"; @@ -362,6 +384,10 @@ private OperationId() {} public static final String BOOKING_HOTEL_DETAIL = "booking-hotel-detail"; public static final String BOOKING_REVIEWS = "booking-reviews"; public static final String BOOKING_SEARCH = "booking-search"; + public static final String BOOKSY_BUSINESS = "booksy-business"; + public static final String BOOKSY_BUSINESSES = "booksy-businesses"; + public static final String BOOKSY_CATEGORIES = "booksy-categories"; + public static final String BOOKSY_TREATMENT_HINTS = "booksy-treatment-hints"; public static final String BOOTS_SEARCH = "boots-search"; public static final String BOOTS_SUGGEST = "boots-suggest"; public static final String BOSTON_GLOBE_BOSTONGLOBE_NEWS = "bostonglobe-news"; @@ -397,6 +423,14 @@ private OperationId() {} public static final String BREITBART_HEADLINES = "breitbart-headlines"; public static final String BREITBART_NEWS = "breitbart-news"; public static final String BREITBART_SECTIONS = "breitbart-sections"; + public static final String BRING_ATRAILER_BRINGATRAILER_FILTERS = "bringatrailer-filters"; + public static final String BRING_ATRAILER_BRINGATRAILER_LISTING = "bringatrailer-listing"; + public static final String BRING_ATRAILER_BRINGATRAILER_LIVE = "bringatrailer-live"; + public static final String BRING_ATRAILER_BRINGATRAILER_MAKES = "bringatrailer-makes"; + public static final String BRING_ATRAILER_BRINGATRAILER_PRICE_HISTORY = "bringatrailer-price-history"; + public static final String BRING_ATRAILER_BRINGATRAILER_RESULTS = "bringatrailer-results"; + public static final String BRING_ATRAILER_BRINGATRAILER_SEARCH = "bringatrailer-search"; + public static final String BRING_ATRAILER_BRINGATRAILER_SUGGEST = "bringatrailer-suggest"; public static final String BRISBANE_TIMES_BRISBANETIMES_ARTICLE = "brisbanetimes-article"; public static final String BRISBANE_TIMES_BRISBANETIMES_AUTHOR = "brisbanetimes-author"; public static final String BRISBANE_TIMES_BRISBANETIMES_HEADLINES = "brisbanetimes-headlines"; @@ -443,6 +477,11 @@ private OperationId() {} public static final String CAR_MAX_CARMAX_STORES = "carmax-stores"; public static final String CAR_MAX_CARMAX_VEHICLE = "carmax-vehicle"; public static final String CAR_MAX_CARMAX_VEHICLE_RECOMMENDATIONS = "carmax-vehicle-recommendations"; + public static final String CARDMARKET_CATALOG = "cardmarket-catalog"; + public static final String CARDMARKET_CATALOG_CATEGORIES = "cardmarket-catalog-categories"; + public static final String CARDMARKET_GAMES = "cardmarket-games"; + public static final String CARDMARKET_PRICE_GUIDE = "cardmarket-price-guide"; + public static final String CARDMARKET_PRICE_GUIDE_CATEGORIES = "cardmarket-price-guide-categories"; public static final String CARS_COM_CARSDOTCOM_SEARCH = "carsdotcom-search"; public static final String CARS_COM_CARSDOTCOM_VEHICLE = "carsdotcom-vehicle"; public static final String CBC_NEWS_CALL = "cbc-news"; @@ -590,6 +629,41 @@ private OperationId() {} public static final String COURT_LISTENER_COURTLISTENER_COURTS = "courtlistener-courts"; public static final String COURT_LISTENER_COURTLISTENER_PEOPLE = "courtlistener-people"; public static final String COURT_LISTENER_COURTLISTENER_SEARCH = "courtlistener-search"; + public static final String CRICBUZZ_ARCHIVES = "cricbuzz-archives"; + public static final String CRICBUZZ_AUCTION_INFO = "cricbuzz-auction-info"; + public static final String CRICBUZZ_AUCTION_LIVE = "cricbuzz-auction-live"; + public static final String CRICBUZZ_AUCTION_LIVE_BLOG = "cricbuzz-auction-live-blog"; + public static final String CRICBUZZ_AUCTION_NEWS = "cricbuzz-auction-news"; + public static final String CRICBUZZ_AUCTION_OPTIONS = "cricbuzz-auction-options"; + public static final String CRICBUZZ_AUCTION_PLAYER_DETAIL = "cricbuzz-auction-player-detail"; + public static final String CRICBUZZ_AUCTION_PLAYER_SEARCH = "cricbuzz-auction-player-search"; + public static final String CRICBUZZ_AUCTION_RESULTS = "cricbuzz-auction-results"; + public static final String CRICBUZZ_AUCTION_SEASONS = "cricbuzz-auction-seasons"; + public static final String CRICBUZZ_AUCTION_TEAM_DETAIL = "cricbuzz-auction-team-detail"; + public static final String CRICBUZZ_AUCTION_TEAMS = "cricbuzz-auction-teams"; + public static final String CRICBUZZ_AUCTION_TEAMS_OPTIONS = "cricbuzz-auction-teams-options"; + public static final String CRICBUZZ_AUCTION_UPCOMING = "cricbuzz-auction-upcoming"; + public static final String CRICBUZZ_AUCTION_UPCOMING_OPTIONS = "cricbuzz-auction-upcoming-options"; + public static final String CRICBUZZ_AUCTION_VIDEOS = "cricbuzz-auction-videos"; + public static final String CRICBUZZ_MATCH_FACTS = "cricbuzz-match-facts"; + public static final String CRICBUZZ_MATCH_GRAPHS = "cricbuzz-match-graphs"; + public static final String CRICBUZZ_MATCH_OVERS = "cricbuzz-match-overs"; + public static final String CRICBUZZ_MATCHES = "cricbuzz-matches"; + public static final String CRICBUZZ_NAVIGATION = "cricbuzz-navigation"; + public static final String CRICBUZZ_NEWS_STORY = "cricbuzz-news-story"; + public static final String CRICBUZZ_NEWS_TOPICS = "cricbuzz-news-topics"; + public static final String CRICBUZZ_RANKINGS = "cricbuzz-rankings"; + public static final String CRICBUZZ_RECORDS = "cricbuzz-records"; + public static final String CRICBUZZ_SCHEDULE = "cricbuzz-schedule"; + public static final String CRICBUZZ_SCORECARD = "cricbuzz-scorecard"; + public static final String CRICBUZZ_SERIES = "cricbuzz-series"; + public static final String CRICBUZZ_SERIES_STATS = "cricbuzz-series-stats"; + public static final String CRICBUZZ_TEAM_STATS = "cricbuzz-team-stats"; + public static final String CRICBUZZ_TEAM_STATS_OPTIONS = "cricbuzz-team-stats-options"; + public static final String CRICBUZZ_TEAMS = "cricbuzz-teams"; + public static final String CRICBUZZ_VIDEO_CATEGORIES = "cricbuzz-video-categories"; + public static final String CRICBUZZ_VIDEO_PLAYLISTS = "cricbuzz-video-playlists"; + public static final String CRICBUZZ_WTC = "cricbuzz-wtc"; public static final String CRICINFO_CALENDAR = "cricinfo-calendar"; public static final String CRICINFO_COMMENTARY = "cricinfo-commentary"; public static final String CRICINFO_GROUNDS = "cricinfo-grounds"; @@ -664,10 +738,16 @@ private OperationId() {} public static final String DAILY_WIRE_DAILYWIRE_HEADLINES = "dailywire-headlines"; public static final String DAILY_WIRE_DAILYWIRE_NEWS = "dailywire-news"; public static final String DAILY_WIRE_DAILYWIRE_SECTIONS = "dailywire-sections"; + public static final String DATASETS_AIRBNB_HOSTS_FACETS = "datasets-airbnb-hosts-facets"; + public static final String DATASETS_AIRBNB_HOSTS_ITEM = "datasets-airbnb-hosts-item"; + public static final String DATASETS_AIRBNB_HOSTS_SEARCH = "datasets-airbnb-hosts-search"; public static final String DATASETS_AIRBNB_MARKETS_FACETS = "datasets-airbnb-markets-facets"; public static final String DATASETS_AIRBNB_MARKETS_ITEM = "datasets-airbnb-markets-item"; public static final String DATASETS_AIRBNB_MARKETS_NEARBY = "datasets-airbnb-markets-nearby"; public static final String DATASETS_AIRBNB_MARKETS_SEARCH = "datasets-airbnb-markets-search"; + public static final String DATASETS_APPLE_BOOKS_FACETS = "datasets-apple-books-facets"; + public static final String DATASETS_APPLE_BOOKS_ITEM = "datasets-apple-books-item"; + public static final String DATASETS_APPLE_BOOKS_SEARCH = "datasets-apple-books-search"; public static final String DATASETS_APPLE_MAPS_PLACES_FACETS = "datasets-apple-maps-places-facets"; public static final String DATASETS_APPLE_MAPS_PLACES_ITEM = "datasets-apple-maps-places-item"; public static final String DATASETS_APPLE_MAPS_PLACES_NEARBY = "datasets-apple-maps-places-nearby"; @@ -675,7 +755,13 @@ private OperationId() {} public static final String DATASETS_APPLE_PODCASTS_SHOWS_FACETS = "datasets-apple-podcasts-shows-facets"; public static final String DATASETS_APPLE_PODCASTS_SHOWS_ITEM = "datasets-apple-podcasts-shows-item"; public static final String DATASETS_APPLE_PODCASTS_SHOWS_SEARCH = "datasets-apple-podcasts-shows-search"; + public static final String DATASETS_APPS_CHARTS_FACETS = "datasets-apps-charts-facets"; + public static final String DATASETS_APPS_CHARTS_ITEM = "datasets-apps-charts-item"; public static final String DATASETS_APPS_CHARTS_SEARCH = "datasets-apps-charts-search"; + public static final String DATASETS_APPS_FACETS = "datasets-apps-facets"; + public static final String DATASETS_APPS_ITEM = "datasets-apps-item"; + public static final String DATASETS_APPS_REVIEWS_FACETS = "datasets-apps-reviews-facets"; + public static final String DATASETS_APPS_REVIEWS_ITEM = "datasets-apps-reviews-item"; public static final String DATASETS_APPS_REVIEWS_SEARCH = "datasets-apps-reviews-search"; public static final String DATASETS_APPS_SEARCH = "datasets-apps-search"; public static final String DATASETS_BBB_BUSINESSES_FACETS = "datasets-bbb-businesses-facets"; @@ -694,6 +780,8 @@ private OperationId() {} public static final String DATASETS_CHROME_EXTENSIONS_METRICS = "datasets-chrome-extensions-metrics"; public static final String DATASETS_CHROME_EXTENSIONS_SEARCH = "datasets-chrome-extensions-search"; public static final String DATASETS_CHROME_EXTENSIONS_TRENDING = "datasets-chrome-extensions-trending"; + public static final String DATASETS_CREATORS_FACETS = "datasets-creators-facets"; + public static final String DATASETS_CREATORS_ITEM = "datasets-creators-item"; public static final String DATASETS_CREATORS_SEARCH = "datasets-creators-search"; public static final String DATASETS_DOORDASH_STORES_FACETS = "datasets-doordash-stores-facets"; public static final String DATASETS_DOORDASH_STORES_ITEM = "datasets-doordash-stores-item"; @@ -766,6 +854,8 @@ private OperationId() {} public static final String DATASETS_PRODUCTHUNT_PRODUCTS_SEARCH = "datasets-producthunt-products-search"; public static final String DATASETS_PRODUCTHUNT_TRENDS_FACETS = "datasets-producthunt-trends-facets"; public static final String DATASETS_PRODUCTHUNT_TRENDS_SEARCH = "datasets-producthunt-trends-search"; + public static final String DATASETS_REDDIT_TRENDING_FACETS = "datasets-reddit-trending-facets"; + public static final String DATASETS_REDDIT_TRENDING_ITEM = "datasets-reddit-trending-item"; public static final String DATASETS_REDDIT_TRENDING_SEARCH = "datasets-reddit-trending-search"; public static final String DATASETS_SEC_COMPANIES_FACETS = "datasets-sec-companies-facets"; public static final String DATASETS_SEC_COMPANIES_FINANCIALS = "datasets-sec-companies-financials"; @@ -778,15 +868,30 @@ private OperationId() {} public static final String DATASETS_STARBUCKS_STORES_ITEM = "datasets-starbucks-stores-item"; public static final String DATASETS_STARBUCKS_STORES_NEARBY = "datasets-starbucks-stores-nearby"; public static final String DATASETS_STARBUCKS_STORES_SEARCH = "datasets-starbucks-stores-search"; + public static final String DATASETS_STEAM_ACHIEVEMENTS_FACETS = "datasets-steam-achievements-facets"; + public static final String DATASETS_STEAM_ACHIEVEMENTS_ITEM = "datasets-steam-achievements-item"; public static final String DATASETS_STEAM_ACHIEVEMENTS_SEARCH = "datasets-steam-achievements-search"; + public static final String DATASETS_STEAM_CHARTS_FACETS = "datasets-steam-charts-facets"; + public static final String DATASETS_STEAM_CHARTS_ITEM = "datasets-steam-charts-item"; public static final String DATASETS_STEAM_CHARTS_SEARCH = "datasets-steam-charts-search"; public static final String DATASETS_STEAM_GAMES_FACETS = "datasets-steam-games-facets"; public static final String DATASETS_STEAM_GAMES_ITEM = "datasets-steam-games-item"; public static final String DATASETS_STEAM_GAMES_SEARCH = "datasets-steam-games-search"; + public static final String DATASETS_STEAM_NEWS_FACETS = "datasets-steam-news-facets"; + public static final String DATASETS_STEAM_NEWS_ITEM = "datasets-steam-news-item"; public static final String DATASETS_STEAM_NEWS_SEARCH = "datasets-steam-news-search"; + public static final String DATASETS_STEAM_PLAYERCOUNTS_FACETS = "datasets-steam-playercounts-facets"; + public static final String DATASETS_STEAM_PLAYERCOUNTS_ITEM = "datasets-steam-playercounts-item"; public static final String DATASETS_STEAM_PLAYERCOUNTS_SEARCH = "datasets-steam-playercounts-search"; + public static final String DATASETS_STEAM_PRICES_FACETS = "datasets-steam-prices-facets"; + public static final String DATASETS_STEAM_PRICES_ITEM = "datasets-steam-prices-item"; public static final String DATASETS_STEAM_PRICES_SEARCH = "datasets-steam-prices-search"; + public static final String DATASETS_STEAM_REVIEWS_FACETS = "datasets-steam-reviews-facets"; + public static final String DATASETS_STEAM_REVIEWS_ITEM = "datasets-steam-reviews-item"; public static final String DATASETS_STEAM_REVIEWS_SEARCH = "datasets-steam-reviews-search"; + public static final String DATASETS_SUBSTACK_FACETS = "datasets-substack-facets"; + public static final String DATASETS_SUBSTACK_ITEM = "datasets-substack-item"; + public static final String DATASETS_SUBSTACK_SEARCH = "datasets-substack-search"; public static final String DATASETS_TECHSTACK_FACETS = "datasets-techstack-facets"; public static final String DATASETS_TECHSTACK_ITEM = "datasets-techstack-item"; public static final String DATASETS_TECHSTACK_SEARCH = "datasets-techstack-search"; @@ -836,6 +941,24 @@ private OperationId() {} public static final String DISCOGS_MASTER = "discogs-master"; public static final String DISCOGS_RELEASE = "discogs-release"; public static final String DISCOGS_SEARCH = "discogs-search"; + public static final String DOLLAR_TREE_DOLLARTREE_BLOG_ARTICLE = "dollartree-blog-article"; + public static final String DOLLAR_TREE_DOLLARTREE_CATEGORIES = "dollartree-categories"; + public static final String DOLLAR_TREE_DOLLARTREE_KEYWORD_TYPEAHEAD = "dollartree-keyword-typeahead"; + public static final String DOLLAR_TREE_DOLLARTREE_PRICE = "dollartree-price"; + public static final String DOLLAR_TREE_DOLLARTREE_PRODUCT = "dollartree-product"; + public static final String DOLLAR_TREE_DOLLARTREE_PRODUCT_TYPEAHEAD = "dollartree-product-typeahead"; + public static final String DOLLAR_TREE_DOLLARTREE_PRODUCTS = "dollartree-products"; + public static final String DOLLAR_TREE_DOLLARTREE_SEARCH = "dollartree-search"; + public static final String DOLLAR_TREE_DOLLARTREE_STOCK_STATUS = "dollartree-stock-status"; + public static final String DOMAIN_DNS_RECORD_TYPES = "domain-dns-record-types"; + public static final String DOMAIN_DNS_RESOLVE = "domain-dns-resolve"; + public static final String DOMAIN_RDAP_DOMAIN = "domain-rdap-domain"; + public static final String DOMAIN_RDAP_IP = "domain-rdap-ip"; + public static final String DOMAIN_ROBOTS = "domain-robots"; + public static final String DOMAIN_SITE = "domain-site"; + public static final String DOMAIN_SUBDOMAINS = "domain-subdomains"; + public static final String DOMAIN_WAYBACK_AVAILABILITY = "domain-wayback-availability"; + public static final String DOMAIN_WAYBACK_CDX = "domain-wayback-cdx"; public static final String DOMINOS_COUPONS = "dominos-coupons"; public static final String DOMINOS_CUSTOMIZATION = "dominos-customization"; public static final String DOMINOS_MENU = "dominos-menu"; @@ -992,6 +1115,41 @@ private OperationId() {} public static final String EXPEDIA_PROPERTIES_SEARCH = "expedia-properties-search"; public static final String FACEBOOK_MARKETPLACE_SEARCH = "facebook-marketplace-search"; public static final String FACEBOOK_PAGE = "facebook-page"; + public static final String FACEIT_BAN_REASONS = "faceit-ban-reasons"; + public static final String FACEIT_BANLIST = "faceit-banlist"; + public static final String FACEIT_BANLIST_STATS = "faceit-banlist-stats"; + public static final String FACEIT_BEST_CLIPS = "faceit-best-clips"; + public static final String FACEIT_CHAMPIONSHIP = "faceit-championship"; + public static final String FACEIT_CHAMPIONSHIP_BRACKET = "faceit-championship-bracket"; + public static final String FACEIT_CHAMPIONSHIP_PARTICIPANTS = "faceit-championship-participants"; + public static final String FACEIT_CHAMPIONSHIP_SEARCH = "faceit-championship-search"; + public static final String FACEIT_CLIP = "faceit-clip"; + public static final String FACEIT_CLIPS = "faceit-clips"; + public static final String FACEIT_COMPETITION_MATCHES = "faceit-competition-matches"; + public static final String FACEIT_FPL = "faceit-fpl"; + public static final String FACEIT_GAME_MODES = "faceit-game-modes"; + public static final String FACEIT_GAMES = "faceit-games"; + public static final String FACEIT_HUB = "faceit-hub"; + public static final String FACEIT_HUB_CATEGORIES = "faceit-hub-categories"; + public static final String FACEIT_HUB_MEMBERSHIPS = "faceit-hub-memberships"; + public static final String FACEIT_HUBS = "faceit-hubs"; + public static final String FACEIT_HUBS_DETAILED = "faceit-hubs-detailed"; + public static final String FACEIT_LEADERBOARD = "faceit-leaderboard"; + public static final String FACEIT_LEADERBOARD_DETAIL = "faceit-leaderboard-detail"; + public static final String FACEIT_LEADERBOARD_STATUSES = "faceit-leaderboard-statuses"; + public static final String FACEIT_MAPS = "faceit-maps"; + public static final String FACEIT_MATCH_CLIPS = "faceit-match-clips"; + public static final String FACEIT_ORGANIZER = "faceit-organizer"; + public static final String FACEIT_PLAYER = "faceit-player"; + public static final String FACEIT_PLAYER_RANK = "faceit-player-rank"; + public static final String FACEIT_REGIONS = "faceit-regions"; + public static final String FACEIT_RULE = "faceit-rule"; + public static final String FACEIT_RULES = "faceit-rules"; + public static final String FACEIT_SKILL_LEVELS = "faceit-skill-levels"; + public static final String FACEIT_STANDINGS = "faceit-standings"; + public static final String FACEIT_TEAM = "faceit-team"; + public static final String FACEIT_TOURNAMENTS_PAST = "faceit-tournaments-past"; + public static final String FACEIT_USER_SKILLS = "faceit-user-skills"; public static final String FAN_DUEL_FANDUEL_CASINO_CATEGORIES = "fanduel-casino-categories"; public static final String FAN_DUEL_FANDUEL_CASINO_CATEGORY = "fanduel-casino-category"; public static final String FAN_DUEL_FANDUEL_CASINO_GAME = "fanduel-casino-game"; @@ -1068,8 +1226,16 @@ private OperationId() {} public static final String FANATICS_CATEGORY = "fanatics-category"; public static final String FANATICS_COLLECT_FANATICSCOLLECT_AUCTIONS = "fanaticscollect-auctions"; public static final String FANATICS_COLLECT_FANATICSCOLLECT_CATEGORIES = "fanaticscollect-categories"; + public static final String FANATICS_COLLECT_FANATICSCOLLECT_INSTANT_PACK_RELEASE = "fanaticscollect-instant-pack-release"; + public static final String FANATICS_COLLECT_FANATICSCOLLECT_INSTANT_PACK_RELEASES = "fanaticscollect-instant-pack-releases"; public static final String FANATICS_COLLECT_FANATICSCOLLECT_INSTANT_RIPS_CATEGORIES = "fanaticscollect-instant-rips-categories"; + public static final String FANATICS_COLLECT_FANATICSCOLLECT_INSTANT_RIPS_PACK_CATEGORIES = "fanaticscollect-instant-rips-pack-categories"; + public static final String FANATICS_COLLECT_FANATICSCOLLECT_INSTANT_RIPS_PACK_CHECKLIST = "fanaticscollect-instant-rips-pack-checklist"; + public static final String FANATICS_COLLECT_FANATICSCOLLECT_INSTANT_RIPS_PACKS = "fanaticscollect-instant-rips-packs"; public static final String FANATICS_COLLECT_FANATICSCOLLECT_LISTING = "fanaticscollect-listing"; + public static final String FANATICS_COLLECT_FANATICSCOLLECT_NEWSROOM = "fanaticscollect-newsroom"; + public static final String FANATICS_COLLECT_FANATICSCOLLECT_NEWSROOM_FILTERS = "fanaticscollect-newsroom-filters"; + public static final String FANATICS_COLLECT_FANATICSCOLLECT_RECENTLY_RIPPED = "fanaticscollect-recently-ripped"; public static final String FANATICS_COLLECT_FANATICSCOLLECT_SEARCH = "fanaticscollect-search"; public static final String FANATICS_COLLECT_FANATICSCOLLECT_SOLD_ITEMS = "fanaticscollect-sold-items"; public static final String FANATICS_COLLECT_FANATICSCOLLECT_TRENDING_SEARCHES = "fanaticscollect-trending-searches"; @@ -1115,6 +1281,12 @@ private OperationId() {} public static final String FAST_COMPANY_FASTCOMPANY_HEADLINES = "fastcompany-headlines"; public static final String FAST_COMPANY_FASTCOMPANY_NEWS = "fastcompany-news"; public static final String FAST_COMPANY_FASTCOMPANY_SECTIONS = "fastcompany-sections"; + public static final String FEVER_CITIES = "fever-cities"; + public static final String FEVER_FEED = "fever-feed"; + public static final String FEVER_FILTERS = "fever-filters"; + public static final String FEVER_PLAN = "fever-plan"; + public static final String FEVER_PLANS = "fever-plans"; + public static final String FEVER_TOP_CITIES = "fever-top-cities"; public static final String FIRST_DIBS_CATEGORIES = "firstdibs-categories"; public static final String FIRST_DIBS_DESIGNERS = "firstdibs-designers"; public static final String FIRST_DIBS_PRODUCT = "firstdibs-product"; @@ -1137,9 +1309,11 @@ private OperationId() {} public static final String FLASHSCORE_COMPETITIONS = "flashscore-competitions"; public static final String FLASHSCORE_ENTITY_NEWS = "flashscore-entity-news"; public static final String FLASHSCORE_MATCH_BOX_SCORE = "flashscore-match-box-score"; + public static final String FLASHSCORE_MATCH_COMMENTARY = "flashscore-match-commentary"; public static final String FLASHSCORE_MATCH_DARTS = "flashscore-match-darts"; public static final String FLASHSCORE_MATCH_H2H = "flashscore-match-h2h"; public static final String FLASHSCORE_MATCH_HIGHLIGHTS = "flashscore-match-highlights"; + public static final String FLASHSCORE_MATCH_INCIDENTS = "flashscore-match-incidents"; public static final String FLASHSCORE_MATCH_INFO = "flashscore-match-info"; public static final String FLASHSCORE_MATCH_LINEUPS = "flashscore-match-lineups"; public static final String FLASHSCORE_MATCH_MISSING_PLAYERS = "flashscore-match-missing-players"; @@ -1149,6 +1323,7 @@ private OperationId() {} public static final String FLASHSCORE_MATCH_PLAYER_STATS = "flashscore-match-player-stats"; public static final String FLASHSCORE_MATCH_POINT_BY_POINT = "flashscore-match-point-by-point"; public static final String FLASHSCORE_MATCH_PREDICTED_LINEUPS = "flashscore-match-predicted-lineups"; + public static final String FLASHSCORE_MATCH_PREMATCH_SCORERS = "flashscore-match-prematch-scorers"; public static final String FLASHSCORE_MATCH_REPORT = "flashscore-match-report"; public static final String FLASHSCORE_MATCH_STANDINGS = "flashscore-match-standings"; public static final String FLASHSCORE_MATCH_STATS = "flashscore-match-stats"; @@ -1181,11 +1356,17 @@ private OperationId() {} public static final String FLASHSCORE_TEAM_TRANSFERS = "flashscore-team-transfers"; public static final String FLASHSCORE_TOP_SEARCH = "flashscore-top-search"; public static final String FLASHSCORE_TOURNAMENT_ARCHIVE_SEASONS = "flashscore-tournament-archive-seasons"; + public static final String FLASHSCORE_TOURNAMENT_DRAW = "flashscore-tournament-draw"; public static final String FLASHSCORE_TOURNAMENT_EVENTS = "flashscore-tournament-events"; public static final String FLASHSCORE_TOURNAMENT_OUTRIGHT_ODDS = "flashscore-tournament-outright-odds"; public static final String FLASHSCORE_TOURNAMENT_SEASONS = "flashscore-tournament-seasons"; public static final String FLASHSCORE_TOURNAMENT_STANDINGS = "flashscore-tournament-standings"; public static final String FLASHSCORE_TOURNAMENT_STANDINGS_VIEWS = "flashscore-tournament-standings-views"; + public static final String FLICK_REELS_FLICKREELS_CLASSIFY = "flickreels-classify"; + public static final String FLICK_REELS_FLICKREELS_GENRES = "flickreels-genres"; + public static final String FLICK_REELS_FLICKREELS_HOME = "flickreels-home"; + public static final String FLICK_REELS_FLICKREELS_MOVIE = "flickreels-movie"; + public static final String FLICK_REELS_FLICKREELS_SHELF = "flickreels-shelf"; public static final String FOODPANDA_RESTAURANT = "foodpanda-restaurant"; public static final String FOODPANDA_RESTAURANT_MENU = "foodpanda-restaurant-menu"; public static final String FOODPANDA_RESTAURANT_REVIEWS = "foodpanda-restaurant-reviews"; @@ -1210,6 +1391,34 @@ private OperationId() {} public static final String FOREIGN_POLICY_FOREIGNPOLICY_PROJECT = "foreignpolicy-project"; public static final String FOREIGN_POLICY_FOREIGNPOLICY_PROJECTS = "foreignpolicy-projects"; public static final String FOREIGN_POLICY_FOREIGNPOLICY_TOPIC = "foreignpolicy-topic"; + public static final String FORMULA1_DRIVER = "formula1-driver"; + public static final String FORMULA1_DRIVER_GRID = "formula1-driver-grid"; + public static final String FORMULA1_DRIVER_SEASON_RESULTS = "formula1-driver-season-results"; + public static final String FORMULA1_DRIVER_STANDINGS = "formula1-driver-standings"; + public static final String FORMULA1_FILTERS = "formula1-filters"; + public static final String FORMULA1_JSON_AWARDS = "formula1-json-awards"; + public static final String FORMULA1_JSON_CONSTRUCTORS = "formula1-json-constructors"; + public static final String FORMULA1_JSON_DRIVER_ASSEMBLY = "formula1-json-driver-assembly"; + public static final String FORMULA1_JSON_DRIVERS = "formula1-json-drivers"; + public static final String FORMULA1_JSON_EDITORIAL = "formula1-json-editorial"; + public static final String FORMULA1_JSON_EVENT_TRACKER = "formula1-json-event-tracker"; + public static final String FORMULA1_JSON_MEETING_DATASETS = "formula1-json-meeting-datasets"; + public static final String FORMULA1_JSON_MEETINGS = "formula1-json-meetings"; + public static final String FORMULA1_JSON_RACE_ASSEMBLY = "formula1-json-race-assembly"; + public static final String FORMULA1_JSON_RESULTS = "formula1-json-results"; + public static final String FORMULA1_JSON_SEASON_AWARD = "formula1-json-season-award"; + public static final String FORMULA1_JSON_TEAM_ASSEMBLY = "formula1-json-team-assembly"; + public static final String FORMULA1_MEETINGS = "formula1-meetings"; + public static final String FORMULA1_RACE_CALENDAR = "formula1-race-calendar"; + public static final String FORMULA1_RACE_HUB = "formula1-race-hub"; + public static final String FORMULA1_SEASON_AWARDS = "formula1-season-awards"; + public static final String FORMULA1_SEASON_RESULTS = "formula1-season-results"; + public static final String FORMULA1_SEASONS = "formula1-seasons"; + public static final String FORMULA1_SESSION_RESULTS = "formula1-session-results"; + public static final String FORMULA1_TEAM = "formula1-team"; + public static final String FORMULA1_TEAM_GRID = "formula1-team-grid"; + public static final String FORMULA1_TEAM_SEASON_RESULTS = "formula1-team-season-results"; + public static final String FORMULA1_TEAM_STANDINGS = "formula1-team-standings"; public static final String FORTUNE_ARTICLE = "fortune-article"; public static final String FORTUNE_AUTHOR = "fortune-author"; public static final String FORTUNE_COMPANIES = "fortune-companies"; @@ -1270,6 +1479,10 @@ private OperationId() {} public static final String FRANCE24_FRANCE24_SECTIONS = "france24-sections"; public static final String FREE_MALAYSIA_TODAY_FREEMALAYSIATODAY_NEWS = "freemalaysiatoday-news"; public static final String FREE_MALAYSIA_TODAY_FREEMALAYSIATODAY_SECTIONS = "freemalaysiatoday-sections"; + public static final String FRESHA_LANDING_VENUES = "fresha-landing-venues"; + public static final String FRESHA_SEARCH_VENUES = "fresha-search-venues"; + public static final String FRESHA_TAXONOMY = "fresha-taxonomy"; + public static final String FRESHA_VENUE = "fresha-venue"; public static final String FT_ARTICLE = "ft-article"; public static final String FT_AUTHOR = "ft-author"; public static final String FT_CATEGORIES = "ft-categories"; @@ -1303,6 +1516,27 @@ private OperationId() {} public static final String FUSSBALL_DE_FUSSBALLDE_TEAM_MATCHES = "fussballde-team-matches"; public static final String FUSSBALL_DE_FUSSBALLDE_TEAM_SQUAD = "fussballde-team-squad"; public static final String FUSSBALL_DE_FUSSBALLDE_TOP_SCORERS = "fussballde-top-scorers"; + public static final String FUT_GG_FUTGG_FC27_CATALOG = "futgg-fc27-catalog"; + public static final String FUT_GG_FUTGG_FC27_DEFINITIONS = "futgg-fc27-definitions"; + public static final String FUT_GG_FUTGG_FC27_EVOLUTION = "futgg-fc27-evolution"; + public static final String FUT_GG_FUTGG_FC27_EVOLUTIONS = "futgg-fc27-evolutions"; + public static final String FUT_GG_FUTGG_FC27_GG_RATING_RANKS = "futgg-fc27-gg-rating-ranks"; + public static final String FUT_GG_FUTGG_FC27_GG_RATINGS = "futgg-fc27-gg-ratings"; + public static final String FUT_GG_FUTGG_FC27_OBJECTIVE_CATEGORIES = "futgg-fc27-objective-categories"; + public static final String FUT_GG_FUTGG_FC27_OBJECTIVE_GROUP = "futgg-fc27-objective-group"; + public static final String FUT_GG_FUTGG_FC27_OBJECTIVE_GROUP_BY_EA = "futgg-fc27-objective-group-by-ea"; + public static final String FUT_GG_FUTGG_FC27_OBJECTIVE_GROUP_BY_OBJECTIVE = "futgg-fc27-objective-group-by-objective"; + public static final String FUT_GG_FUTGG_FC27_OBJECTIVE_GROUPS = "futgg-fc27-objective-groups"; + public static final String FUT_GG_FUTGG_FC27_PLAYER_SORTS = "futgg-fc27-player-sorts"; + public static final String FUT_GG_FUTGG_FC27_PLAYERS = "futgg-fc27-players"; + public static final String FUT_GG_FUTGG_FC27_PRICE_INDEX = "futgg-fc27-price-index"; + public static final String FUT_GG_FUTGG_FC27_PRICES = "futgg-fc27-prices"; + public static final String FUT_GG_FUTGG_FC27_SBC_CATEGORIES = "futgg-fc27-sbc-categories"; + public static final String FUT_GG_FUTGG_FC27_SBC_SET = "futgg-fc27-sbc-set"; + public static final String FUT_GG_FUTGG_FC27_SBC_SET_BY_CHALLENGE = "futgg-fc27-sbc-set-by-challenge"; + public static final String FUT_GG_FUTGG_FC27_SBC_SET_BY_EA = "futgg-fc27-sbc-set-by-ea"; + public static final String FUT_GG_FUTGG_FC27_SBC_SETS = "futgg-fc27-sbc-sets"; + public static final String FUT_GG_FUTGG_FC27_SEASON_PASS = "futgg-fc27-season-pass"; public static final String GAME_RANT_GAMERANT_ARTICLE = "gamerant-article"; public static final String GAME_RANT_GAMERANT_AUTHOR = "gamerant-author"; public static final String GAME_RANT_GAMERANT_HEADLINES = "gamerant-headlines"; @@ -1374,6 +1608,16 @@ private OperationId() {} public static final String GLOBE_AND_MAIL_GLOBEANDMAIL_HEADLINES = "globeandmail-headlines"; public static final String GLOBE_AND_MAIL_GLOBEANDMAIL_NEWS = "globeandmail-news"; public static final String GLOBE_AND_MAIL_GLOBEANDMAIL_SECTIONS = "globeandmail-sections"; + public static final String GLOVO_CATEGORIES = "glovo-categories"; + public static final String GLOVO_CITIES = "glovo-cities"; + public static final String GLOVO_CITY = "glovo-city"; + public static final String GLOVO_STORE = "glovo-store"; + public static final String GLOVO_STORE_FEES = "glovo-store-fees"; + public static final String GLOVO_STORE_MENU = "glovo-store-menu"; + public static final String GLOVO_STORE_PRODUCTS = "glovo-store-products"; + public static final String GLOVO_STORE_SEARCH = "glovo-store-search"; + public static final String GLOVO_STORES = "glovo-stores"; + public static final String GLOVO_STORES_FILTERS = "glovo-stores-filters"; public static final String GMA_NEWS_GMANEWS_ARTICLE = "gmanews-article"; public static final String GMA_NEWS_GMANEWS_HEADLINES = "gmanews-headlines"; public static final String GMA_NEWS_GMANEWS_NEWS = "gmanews-news"; @@ -1482,6 +1726,8 @@ private OperationId() {} public static final String GOOGLE_TRENDS_TRENDING = "google-trends-trending"; public static final String GOOGLE_TRENDS_TRENDING_DETAIL = "google-trends-trending-detail"; public static final String GOOGLE_VIDEOS = "google-videos"; + public static final String GOSU_GAMERS_GOSUGAMERS_ARTICLE = "gosugamers-article"; + public static final String GOSU_GAMERS_GOSUGAMERS_ARTICLES = "gosugamers-articles"; public static final String GOSU_GAMERS_GOSUGAMERS_ENCOUNTERS = "gosugamers-encounters"; public static final String GOSU_GAMERS_GOSUGAMERS_GAMES = "gosugamers-games"; public static final String GOSU_GAMERS_GOSUGAMERS_MATCH = "gosugamers-match"; @@ -1601,6 +1847,15 @@ private OperationId() {} public static final String HINDUSTAN_TIMES_HINDUSTANTIMES_HEADLINES = "hindustantimes-headlines"; public static final String HINDUSTAN_TIMES_HINDUSTANTIMES_NEWS = "hindustantimes-news"; public static final String HINDUSTAN_TIMES_HINDUSTANTIMES_SECTIONS = "hindustantimes-sections"; + public static final String HLTV_EVENT = "hltv-event"; + public static final String HLTV_EVENTS = "hltv-events"; + public static final String HLTV_MATCH = "hltv-match"; + public static final String HLTV_MATCHES = "hltv-matches"; + public static final String HLTV_PLAYER = "hltv-player"; + public static final String HLTV_RANKINGS = "hltv-rankings"; + public static final String HLTV_RESULTS = "hltv-results"; + public static final String HLTV_SEARCH = "hltv-search"; + public static final String HLTV_TEAM = "hltv-team"; public static final String HOLLYWOOD_REPORTER_HOLLYWOODREPORTER_ARTICLE = "hollywoodreporter-article"; public static final String HOLLYWOOD_REPORTER_HOLLYWOODREPORTER_AUTHOR = "hollywoodreporter-author"; public static final String HOLLYWOOD_REPORTER_HOLLYWOODREPORTER_HEADLINES = "hollywoodreporter-headlines"; @@ -1725,6 +1980,20 @@ private OperationId() {} public static final String IRISH_TIMES_IRISHTIMES_HEADLINES = "irishtimes-headlines"; public static final String IRISH_TIMES_IRISHTIMES_NEWS = "irishtimes-news"; public static final String IRISH_TIMES_IRISHTIMES_SECTIONS = "irishtimes-sections"; + public static final String ITCH_IO_ITCHIO_BROWSE = "itchio-browse"; + public static final String ITCH_IO_ITCHIO_BROWSE_OPTIONS = "itchio-browse-options"; + public static final String ITCH_IO_ITCHIO_CATALOG = "itchio-catalog"; + public static final String ITCH_IO_ITCHIO_JAM_CALENDAR = "itchio-jam-calendar"; + public static final String ITCH_IO_ITCHIO_JAMS_BROWSE = "itchio-jams-browse"; + public static final String ITCH_IO_ITCHIO_JAMS_ENTRIES = "itchio-jams-entries"; + public static final String ITCH_IO_ITCHIO_JAMS_OPTIONS = "itchio-jams-options"; + public static final String ITCH_IO_ITCHIO_JAMS_OVERVIEW = "itchio-jams-overview"; + public static final String ITCH_IO_ITCHIO_JAMS_RESULTS = "itchio-jams-results"; + public static final String ITCH_IO_ITCHIO_JAMS_RESULTS_OPTIONS = "itchio-jams-results-options"; + public static final String ITCH_IO_ITCHIO_JAMS_SUBMISSION = "itchio-jams-submission"; + public static final String ITCH_IO_ITCHIO_PROJECT = "itchio-project"; + public static final String ITCH_IO_ITCHIO_TAGS = "itchio-tags"; + public static final String ITCH_IO_ITCHIO_TOP_RATED = "itchio-top-rated"; public static final String JCREW_JCREW_CATEGORIES = "jcrew-categories"; public static final String JCREW_JCREW_CATEGORY = "jcrew-category"; public static final String JCREW_JCREW_PRODUCT = "jcrew-product"; @@ -1865,6 +2134,24 @@ private OperationId() {} public static final String KICKSTARTER_DISCOVER = "kickstarter-discover"; public static final String KICKSTARTER_PROJECT = "kickstarter-project"; public static final String KICKSTARTER_UPDATES = "kickstarter-updates"; + public static final String KLOOK_ACTIVITY = "klook-activity"; + public static final String KLOOK_ATTRACTIONS_CATEGORIES = "klook-attractions-categories"; + public static final String KLOOK_ATTRACTIONS_DESTINATIONS = "klook-attractions-destinations"; + public static final String KLOOK_ATTRACTIONS_HIGHLIGHTS = "klook-attractions-highlights"; + public static final String KLOOK_ATTRACTIONS_SEARCH = "klook-attractions-search"; + public static final String KLOOK_ATTRACTIONS_SUGGEST = "klook-attractions-suggest"; + public static final String KLOOK_CATEGORIES = "klook-categories"; + public static final String KLOOK_DESTINATIONS = "klook-destinations"; + public static final String KLOOK_HOT = "klook-hot"; + public static final String KLOOK_INTERESTS = "klook-interests"; + public static final String KLOOK_RECOMMENDATIONS = "klook-recommendations"; + public static final String KLOOK_REVIEWS = "klook-reviews"; + public static final String KLOOK_SEARCH = "klook-search"; + public static final String KLOOK_SEARCH_FILTERS = "klook-search-filters"; + public static final String KLOOK_SEARCH_HOT_KEYWORDS = "klook-search-hot-keywords"; + public static final String KLOOK_SEARCH_UNIFIED = "klook-search-unified"; + public static final String KLOOK_SUGGEST = "klook-suggest"; + public static final String KLOOK_VERTICALS = "klook-verticals"; public static final String KOHL_SKOHLS_CATEGORY = "kohls-category"; public static final String KOHL_SKOHLS_PRODUCT_REVIEWS = "kohls-product-reviews"; public static final String KOHL_SKOHLS_STORES = "kohls-stores"; @@ -1963,6 +2250,15 @@ private OperationId() {} public static final String LULULEMON_OUTFIT = "lululemon-outfit"; public static final String LULULEMON_PRODUCT = "lululemon-product"; public static final String LULULEMON_STORES = "lululemon-stores"; + public static final String LUMA_CALENDAR = "luma-calendar"; + public static final String LUMA_CALENDAR_EVENTS = "luma-calendar-events"; + public static final String LUMA_CATEGORIES = "luma-categories"; + public static final String LUMA_CATEGORY = "luma-category"; + public static final String LUMA_CATEGORY_EVENTS = "luma-category-events"; + public static final String LUMA_EVENT = "luma-event"; + public static final String LUMA_PLACE = "luma-place"; + public static final String LUMA_PLACE_CALENDARS = "luma-place-calendars"; + public static final String LUMA_PLACE_EVENTS = "luma-place-events"; public static final String MAC_RUMORS_MACRUMORS_ARTICLE = "macrumors-article"; public static final String MAC_RUMORS_MACRUMORS_AUTHOR = "macrumors-author"; public static final String MAC_RUMORS_MACRUMORS_HEADLINES = "macrumors-headlines"; @@ -2001,6 +2297,26 @@ private OperationId() {} public static final String MASHABLE_HEADLINES = "mashable-headlines"; public static final String MASHABLE_NEWS = "mashable-news"; public static final String MASHABLE_SECTIONS = "mashable-sections"; + public static final String MAX_PREPS_MAXPREPS_RANKINGS_GROUPINGS = "maxpreps-rankings-groupings"; + public static final String MAX_PREPS_MAXPREPS_REQUEST_ENUMS = "maxpreps-request-enums"; + public static final String MAX_PREPS_MAXPREPS_SCHOOL = "maxpreps-school"; + public static final String MAX_PREPS_MAXPREPS_SCHOOL_CONTESTS = "maxpreps-school-contests"; + public static final String MAX_PREPS_MAXPREPS_SCHOOL_PROXIMAL = "maxpreps-school-proximal"; + public static final String MAX_PREPS_MAXPREPS_SCHOOL_SEARCH = "maxpreps-school-search"; + public static final String MAX_PREPS_MAXPREPS_SCHOOL_SEASONS = "maxpreps-school-seasons"; + public static final String MAX_PREPS_MAXPREPS_SCHOOL_ZIP_SEARCH = "maxpreps-school-zip-search"; + public static final String MAX_PREPS_MAXPREPS_SCOREBOARD = "maxpreps-scoreboard"; + public static final String MAX_PREPS_MAXPREPS_SEASON_NAVIGATION = "maxpreps-season-navigation"; + public static final String MAX_PREPS_MAXPREPS_SPORTS = "maxpreps-sports"; + public static final String MAX_PREPS_MAXPREPS_STATES = "maxpreps-states"; + public static final String MAX_PREPS_MAXPREPS_TEAM = "maxpreps-team"; + public static final String MAX_PREPS_MAXPREPS_TEAM_CONTEXT = "maxpreps-team-context"; + public static final String MAX_PREPS_MAXPREPS_TEAM_NEXT_CONTEST = "maxpreps-team-next-contest"; + public static final String MAX_PREPS_MAXPREPS_TEAM_RANKINGS = "maxpreps-team-rankings"; + public static final String MAX_PREPS_MAXPREPS_TEAM_ROSTER_SUMMARY = "maxpreps-team-roster-summary"; + public static final String MAX_PREPS_MAXPREPS_TEAM_SCHEDULE = "maxpreps-team-schedule"; + public static final String MAX_PREPS_MAXPREPS_TEAM_STAT_LEADERS = "maxpreps-team-stat-leaders"; + public static final String MAX_PREPS_MAXPREPS_TOURNAMENT_SPORTS = "maxpreps-tournament-sports"; public static final String MC_DONALDS_MCDONALDS_CATEGORIES = "mcdonalds-categories"; public static final String MC_DONALDS_MCDONALDS_ITEM = "mcdonalds-item"; public static final String MC_DONALDS_MCDONALDS_ITEM_LIST = "mcdonalds-item-list"; @@ -2154,6 +2470,40 @@ private OperationId() {} public static final String MODA_OPERANDI_MODAOPERANDI_DESIGNERS = "modaoperandi-designers"; public static final String MODA_OPERANDI_MODAOPERANDI_PRODUCT = "modaoperandi-product"; public static final String MODA_OPERANDI_MODAOPERANDI_SEARCH = "modaoperandi-search"; + public static final String MODRINTH_CHECK_PROJECT = "modrinth-check-project"; + public static final String MODRINTH_COLLECTION = "modrinth-collection"; + public static final String MODRINTH_COLLECTIONS = "modrinth-collections"; + public static final String MODRINTH_DEPENDENCIES = "modrinth-dependencies"; + public static final String MODRINTH_FILE_PROJECTS = "modrinth-file-projects"; + public static final String MODRINTH_FILE_UPDATE = "modrinth-file-update"; + public static final String MODRINTH_FILE_VERSION = "modrinth-file-version"; + public static final String MODRINTH_FILE_VERSIONS = "modrinth-file-versions"; + public static final String MODRINTH_FILES_UPDATE = "modrinth-files-update"; + public static final String MODRINTH_FILES_UPDATE_INDIVIDUAL = "modrinth-files-update-individual"; + public static final String MODRINTH_FILES_UPDATE_MANY = "modrinth-files-update-many"; + public static final String MODRINTH_FORGE_UPDATES = "modrinth-forge-updates"; + public static final String MODRINTH_LICENSE = "modrinth-license"; + public static final String MODRINTH_METADATA_LINK_PLATFORMS = "modrinth-metadata-link-platforms"; + public static final String MODRINTH_METADATA_LOADER_FIELD_VALUES = "modrinth-metadata-loader-field-values"; + public static final String MODRINTH_METADATA_LOADER_FIELDS = "modrinth-metadata-loader-fields"; + public static final String MODRINTH_METADATA_LOADERS = "modrinth-metadata-loaders"; + public static final String MODRINTH_ORGANIZATION = "modrinth-organization"; + public static final String MODRINTH_ORGANIZATION_PROJECTS = "modrinth-organization-projects"; + public static final String MODRINTH_ORGANIZATIONS = "modrinth-organizations"; + public static final String MODRINTH_PROJECT = "modrinth-project"; + public static final String MODRINTH_PROJECT_DISCLOSURES = "modrinth-project-disclosures"; + public static final String MODRINTH_PROJECT_VERSION = "modrinth-project-version"; + public static final String MODRINTH_PROJECT_VERSIONS = "modrinth-project-versions"; + public static final String MODRINTH_PROJECTS = "modrinth-projects"; + public static final String MODRINTH_RANDOM_PROJECTS = "modrinth-random-projects"; + public static final String MODRINTH_SEARCH = "modrinth-search"; + public static final String MODRINTH_SEARCH_V3 = "modrinth-search-v3"; + public static final String MODRINTH_SEARCH_V3_BODY = "modrinth-search-v3-body"; + public static final String MODRINTH_SEARCH_V3_OPTIONS = "modrinth-search-v3-options"; + public static final String MODRINTH_STATISTICS = "modrinth-statistics"; + public static final String MODRINTH_TAGS = "modrinth-tags"; + public static final String MODRINTH_VERSION = "modrinth-version"; + public static final String MODRINTH_VERSIONS = "modrinth-versions"; public static final String MONCLER_CATEGORIES = "moncler-categories"; public static final String MONCLER_CATEGORY = "moncler-category"; public static final String MONCLER_PRODUCT = "moncler-product"; @@ -2171,6 +2521,31 @@ private OperationId() {} public static final String MONITORS_GET = "monitors-get"; public static final String MONITORS_LIST = "monitors-list"; public static final String MONITORS_UPDATE = "monitors-update"; + public static final String MOTO_GP_MOTOGP_BMW_AWARD = "motogp-bmw-award"; + public static final String MOTO_GP_MOTOGP_CATEGORIES = "motogp-categories"; + public static final String MOTO_GP_MOTOGP_CIRCUIT_POLES = "motogp-circuit-poles"; + public static final String MOTO_GP_MOTOGP_CIRCUIT_RECORDS = "motogp-circuit-records"; + public static final String MOTO_GP_MOTOGP_CIRCUIT_WINS = "motogp-circuit-wins"; + public static final String MOTO_GP_MOTOGP_CLASSIFICATIONS = "motogp-classifications"; + public static final String MOTO_GP_MOTOGP_CONTENT_CATEGORIES = "motogp-content-categories"; + public static final String MOTO_GP_MOTOGP_CONTENT_EVENT = "motogp-content-event"; + public static final String MOTO_GP_MOTOGP_CONTENT_EVENTS = "motogp-content-events"; + public static final String MOTO_GP_MOTOGP_ENTRY_GRID_OPTIONS = "motogp-entry-grid-options"; + public static final String MOTO_GP_MOTOGP_ENTRY_LIST = "motogp-entry-list"; + public static final String MOTO_GP_MOTOGP_EVENT_FILES = "motogp-event-files"; + public static final String MOTO_GP_MOTOGP_EVENTS = "motogp-events"; + public static final String MOTO_GP_MOTOGP_LATEST_SESSION = "motogp-latest-session"; + public static final String MOTO_GP_MOTOGP_NEXT_LIVE_SESSION = "motogp-next-live-session"; + public static final String MOTO_GP_MOTOGP_SEASONS = "motogp-seasons"; + public static final String MOTO_GP_MOTOGP_SESSIONS = "motogp-sessions"; + public static final String MOTO_GP_MOTOGP_STANDINGS = "motogp-standings"; + public static final String MOTO_GP_MOTOGP_STANDINGS_FILES = "motogp-standings-files"; + public static final String MOTO_GP_MOTOGP_STARTING_GRID = "motogp-starting-grid"; + public static final String NASCAR_LIVE_FEED = "nascar-live-feed"; + public static final String NASCAR_RACE_WEEKEND = "nascar-race-weekend"; + public static final String NASCAR_RACES = "nascar-races"; + public static final String NASCAR_SEASON_RACES = "nascar-season-races"; + public static final String NASCAR_SERIES = "nascar-series"; public static final String NATION_AFRICA_NATIONAFRICA_ARTICLE = "nationafrica-article"; public static final String NATION_AFRICA_NATIONAFRICA_AUTHOR = "nationafrica-author"; public static final String NATION_AFRICA_NATIONAFRICA_HEADLINES = "nationafrica-headlines"; @@ -2181,6 +2556,43 @@ private OperationId() {} public static final String NATIONAL_POST_NATIONALPOST_HEADLINES = "nationalpost-headlines"; public static final String NATIONAL_POST_NATIONALPOST_NEWS = "nationalpost-news"; public static final String NATIONAL_POST_NATIONALPOST_SECTIONS = "nationalpost-sections"; + public static final String NBA_BOX_SCORE = "nba-box-score"; + public static final String NBA_BOX_SCORE_ADVANCED = "nba-box-score-advanced"; + public static final String NBA_BOX_SCORE_FOUR_FACTORS = "nba-box-score-four-factors"; + public static final String NBA_BOX_SCORE_MISC = "nba-box-score-misc"; + public static final String NBA_BOX_SCORE_PLAYER_TRACK = "nba-box-score-player-track"; + public static final String NBA_BOX_SCORE_SCORING = "nba-box-score-scoring"; + public static final String NBA_BOX_SCORE_USAGE = "nba-box-score-usage"; + public static final String NBA_COMMON_ALL_PLAYERS = "nba-common-all-players"; + public static final String NBA_DRAFT_COMBINE_ANTHRO = "nba-draft-combine-anthro"; + public static final String NBA_ENUMS = "nba-enums"; + public static final String NBA_FRANCHISE_HISTORY = "nba-franchise-history"; + public static final String NBA_GAME_DETAIL = "nba-game-detail"; + public static final String NBA_GAMES = "nba-games"; + public static final String NBA_HOMEPAGE_LEADERS = "nba-homepage-leaders"; + public static final String NBA_HUSTLE_STATS = "nba-hustle-stats"; + public static final String NBA_LEAGUE_GAME_LOG = "nba-league-game-log"; + public static final String NBA_LINEUPS = "nba-lineups"; + public static final String NBA_NEWS = "nba-news"; + public static final String NBA_PLAY_BY_PLAY = "nba-play-by-play"; + public static final String NBA_PLAYER_AWARDS = "nba-player-awards"; + public static final String NBA_PLAYER_BIO_STATS = "nba-player-bio-stats"; + public static final String NBA_PLAYER_CAREER_STATS = "nba-player-career-stats"; + public static final String NBA_PLAYER_DASH_PT_SHOTS = "nba-player-dash-pt-shots"; + public static final String NBA_PLAYER_INFO = "nba-player-info"; + public static final String NBA_PLAYER_STATS = "nba-player-stats"; + public static final String NBA_PLAYERS = "nba-players"; + public static final String NBA_PLAYOFF_PICTURE = "nba-playoff-picture"; + public static final String NBA_PT_DEFEND = "nba-pt-defend"; + public static final String NBA_PT_STATS = "nba-pt-stats"; + public static final String NBA_SCOREBOARD = "nba-scoreboard"; + public static final String NBA_STANDINGS = "nba-standings"; + public static final String NBA_SYNERGY_PLAY_TYPES = "nba-synergy-play-types"; + public static final String NBA_TEAM_DETAILS = "nba-team-details"; + public static final String NBA_TEAM_ROSTER = "nba-team-roster"; + public static final String NBA_TEAM_SHOT_LOCATIONS = "nba-team-shot-locations"; + public static final String NBA_TEAM_STATS = "nba-team-stats"; + public static final String NBA_TEAM_STATS_LEADERS = "nba-team-stats-leaders"; public static final String NBC_NEWS_CALL = "nbc-news"; public static final String NBC_NEWS_NBC_ARTICLE = "nbc-article"; public static final String NBC_NEWS_NBC_AUTHOR = "nbc-author"; @@ -2198,6 +2610,14 @@ private OperationId() {} public static final String NDTV_VIDEO = "ndtv-video"; public static final String NDTV_VIDEO_CATEGORIES = "ndtv-video-categories"; public static final String NDTV_VIDEOS = "ndtv-videos"; + public static final String NET_SHORT_NETSHORT_BROWSE = "netshort-browse"; + public static final String NET_SHORT_NETSHORT_GENRES = "netshort-genres"; + public static final String NET_SHORT_NETSHORT_HOME = "netshort-home"; + public static final String NET_SHORT_NETSHORT_LABEL = "netshort-label"; + public static final String NET_SHORT_NETSHORT_PLOTS = "netshort-plots"; + public static final String NET_SHORT_NETSHORT_SEARCH = "netshort-search"; + public static final String NET_SHORT_NETSHORT_TITLE = "netshort-title"; + public static final String NET_SHORT_NETSHORT_TOPLIST = "netshort-toplist"; public static final String NEW_YORK_DAILY_NEWS_NYDAILYNEWS_ARTICLE = "nydailynews-article"; public static final String NEW_YORK_DAILY_NEWS_NYDAILYNEWS_AUTHOR = "nydailynews-author"; public static final String NEW_YORK_DAILY_NEWS_NYDAILYNEWS_HEADLINES = "nydailynews-headlines"; @@ -2242,6 +2662,23 @@ private OperationId() {} public static final String NEWSWEEK_HEADLINES = "newsweek-headlines"; public static final String NEWSWEEK_NEWS = "newsweek-news"; public static final String NEWSWEEK_SECTIONS = "newsweek-sections"; + public static final String NFHS_ACTIVITIES = "nfhs-activities"; + public static final String NFHS_AFFILIATE = "nfhs-affiliate"; + public static final String NFHS_AFFILIATES = "nfhs-affiliates"; + public static final String NFHS_ASSOCIATION = "nfhs-association"; + public static final String NFHS_ASSOCIATIONS = "nfhs-associations"; + public static final String NFHS_EVENT = "nfhs-event"; + public static final String NFHS_EVENTS = "nfhs-events"; + public static final String NFHS_FILTERS = "nfhs-filters"; + public static final String NFHS_HIGHLIGHTS = "nfhs-highlights"; + public static final String NFHS_PRODUCER = "nfhs-producer"; + public static final String NFHS_PUBLISHER = "nfhs-publisher"; + public static final String NFHS_SCHOOL = "nfhs-school"; + public static final String NFHS_SCHOOLS = "nfhs-schools"; + public static final String NFHS_SEARCH = "nfhs-search"; + public static final String NFHS_SPORTS = "nfhs-sports"; + public static final String NFHS_STATES = "nfhs-states"; + public static final String NFHS_SUGGEST = "nfhs-suggest"; public static final String NIKE_CATEGORIES = "nike-categories"; public static final String NIKE_PRODUCT = "nike-product"; public static final String NIKE_PRODUCT_AVAILABILITY = "nike-product-availability"; @@ -2301,8 +2738,11 @@ private OperationId() {} public static final String OPEN_DOTA_OPENDOTA_ABILITIES = "opendota-abilities"; public static final String OPEN_DOTA_OPENDOTA_BENCHMARKS = "opendota-benchmarks"; public static final String OPEN_DOTA_OPENDOTA_CONSTANTS = "opendota-constants"; + public static final String OPEN_DOTA_OPENDOTA_FIND_MATCHES = "opendota-find-matches"; + public static final String OPEN_DOTA_OPENDOTA_HERO_DESCRIPTIONS = "opendota-hero-descriptions"; public static final String OPEN_DOTA_OPENDOTA_HERO_DURATIONS = "opendota-hero-durations"; public static final String OPEN_DOTA_OPENDOTA_HERO_ITEMS = "opendota-hero-items"; + public static final String OPEN_DOTA_OPENDOTA_HERO_MATCHES = "opendota-hero-matches"; public static final String OPEN_DOTA_OPENDOTA_HERO_MATCHUPS = "opendota-hero-matchups"; public static final String OPEN_DOTA_OPENDOTA_HERO_STATS = "opendota-hero-stats"; public static final String OPEN_DOTA_OPENDOTA_HEROES = "opendota-heroes"; @@ -2316,6 +2756,7 @@ private OperationId() {} public static final String OPEN_DOTA_OPENDOTA_PATCH_NOTES = "opendota-patch-notes"; public static final String OPEN_DOTA_OPENDOTA_PRO_MATCHES = "opendota-pro-matches"; public static final String OPEN_DOTA_OPENDOTA_PRO_PLAYERS = "opendota-pro-players"; + public static final String OPEN_DOTA_OPENDOTA_PUBLIC_MATCHES = "opendota-public-matches"; public static final String OPEN_DOTA_OPENDOTA_RANK_DISTRIBUTION = "opendota-rank-distribution"; public static final String OPEN_DOTA_OPENDOTA_RECORDS = "opendota-records"; public static final String OPEN_DOTA_OPENDOTA_SCENARIOS = "opendota-scenarios"; @@ -2324,6 +2765,46 @@ private OperationId() {} public static final String OPEN_DOTA_OPENDOTA_TEAM_MATCHES = "opendota-team-matches"; public static final String OPEN_DOTA_OPENDOTA_TEAM_PLAYERS = "opendota-team-players"; public static final String OPEN_DOTA_OPENDOTA_TEAMS = "opendota-teams"; + public static final String OPEN_F1_OPENF1_CAR_DATA = "openf1-car-data"; + public static final String OPEN_F1_OPENF1_CHAMPIONSHIP_DRIVERS = "openf1-championship-drivers"; + public static final String OPEN_F1_OPENF1_CHAMPIONSHIP_TEAMS = "openf1-championship-teams"; + public static final String OPEN_F1_OPENF1_DRIVERS = "openf1-drivers"; + public static final String OPEN_F1_OPENF1_INTERVALS = "openf1-intervals"; + public static final String OPEN_F1_OPENF1_LAPS = "openf1-laps"; + public static final String OPEN_F1_OPENF1_LOCATION = "openf1-location"; + public static final String OPEN_F1_OPENF1_MEETINGS = "openf1-meetings"; + public static final String OPEN_F1_OPENF1_OVERTAKES = "openf1-overtakes"; + public static final String OPEN_F1_OPENF1_PIT = "openf1-pit"; + public static final String OPEN_F1_OPENF1_POSITION = "openf1-position"; + public static final String OPEN_F1_OPENF1_RACE_CONTROL = "openf1-race-control"; + public static final String OPEN_F1_OPENF1_SESSION_RESULT = "openf1-session-result"; + public static final String OPEN_F1_OPENF1_SESSIONS = "openf1-sessions"; + public static final String OPEN_F1_OPENF1_STARTING_GRID = "openf1-starting-grid"; + public static final String OPEN_F1_OPENF1_STINTS = "openf1-stints"; + public static final String OPEN_F1_OPENF1_TEAM_RADIO = "openf1-team-radio"; + public static final String OPEN_F1_OPENF1_WEATHER = "openf1-weather"; + public static final String OPEN_LIGA_DB_OPENLIGADB_CURRENT_GROUP = "openligadb-current-group"; + public static final String OPEN_LIGA_DB_OPENLIGADB_CURRENT_MATCHDAY = "openligadb-current-matchday"; + public static final String OPEN_LIGA_DB_OPENLIGADB_GOAL_GETTERS = "openligadb-goal-getters"; + public static final String OPEN_LIGA_DB_OPENLIGADB_GROUPS = "openligadb-groups"; + public static final String OPEN_LIGA_DB_OPENLIGADB_LAST_CHANGED = "openligadb-last-changed"; + public static final String OPEN_LIGA_DB_OPENLIGADB_LAST_MATCH = "openligadb-last-match"; + public static final String OPEN_LIGA_DB_OPENLIGADB_LAST_TEAM_MATCH = "openligadb-last-team-match"; + public static final String OPEN_LIGA_DB_OPENLIGADB_LEAGUE_MATCHES = "openligadb-league-matches"; + public static final String OPEN_LIGA_DB_OPENLIGADB_LEAGUE_TEAM_MATCHES = "openligadb-league-team-matches"; + public static final String OPEN_LIGA_DB_OPENLIGADB_LEAGUES = "openligadb-leagues"; + public static final String OPEN_LIGA_DB_OPENLIGADB_MATCH = "openligadb-match"; + public static final String OPEN_LIGA_DB_OPENLIGADB_MATCHDAY_MATCHES = "openligadb-matchday-matches"; + public static final String OPEN_LIGA_DB_OPENLIGADB_MATCHES_BY_TEAM = "openligadb-matches-by-team"; + public static final String OPEN_LIGA_DB_OPENLIGADB_MATCHES_BY_TEAM_ID = "openligadb-matches-by-team-id"; + public static final String OPEN_LIGA_DB_OPENLIGADB_NEXT_MATCH = "openligadb-next-match"; + public static final String OPEN_LIGA_DB_OPENLIGADB_NEXT_TEAM_MATCH = "openligadb-next-team-match"; + public static final String OPEN_LIGA_DB_OPENLIGADB_RESULT_INFOS = "openligadb-result-infos"; + public static final String OPEN_LIGA_DB_OPENLIGADB_RESULT_TYPES = "openligadb-result-types"; + public static final String OPEN_LIGA_DB_OPENLIGADB_SPORTS = "openligadb-sports"; + public static final String OPEN_LIGA_DB_OPENLIGADB_TABLE = "openligadb-table"; + public static final String OPEN_LIGA_DB_OPENLIGADB_TEAM_PAIR_MATCHES = "openligadb-team-pair-matches"; + public static final String OPEN_LIGA_DB_OPENLIGADB_TEAMS = "openligadb-teams"; public static final String OPEN_SEA_OPENSEA_ACTIVITY = "opensea-activity"; public static final String OPEN_SEA_OPENSEA_CATEGORIES = "opensea-categories"; public static final String OPEN_SEA_OPENSEA_CHAINS = "opensea-chains"; @@ -2414,6 +2895,10 @@ private OperationId() {} public static final String PAPA_JOHN_SPAPAJOHNS_POLAND_MENU = "papajohns-poland-menu"; public static final String PAPA_JOHN_SPAPAJOHNS_RUSSIA_MENU = "papajohns-russia-menu"; public static final String PAPA_JOHN_SPAPAJOHNS_STORE = "papajohns-store"; + public static final String PARTIFUL_CITY_FACETS = "partiful-city-facets"; + public static final String PARTIFUL_CITY_FEED = "partiful-city-feed"; + public static final String PARTIFUL_EVENT = "partiful-event"; + public static final String PARTIFUL_EXPLORE_CITIES = "partiful-explore-cities"; public static final String PATREON_CREATOR = "patreon-creator"; public static final String PATREON_CREATOR_TIERS = "patreon-creator-tiers"; public static final String PATREON_EXPLORE = "patreon-explore"; @@ -2433,6 +2918,27 @@ private OperationId() {} public static final String PEOPLE_HEADLINES = "people-headlines"; public static final String PEOPLE_NEWS = "people-news"; public static final String PEOPLE_SECTIONS = "people-sections"; + public static final String PET_SMART_PETSMART_CATEGORIES = "petsmart-categories"; + public static final String PET_SMART_PETSMART_PRODUCT = "petsmart-product"; + public static final String PET_SMART_PETSMART_PRODUCT_INVENTORY = "petsmart-product-inventory"; + public static final String PET_SMART_PETSMART_SEARCH = "petsmart-search"; + public static final String PET_SMART_PETSMART_SEARCH_FILTERS = "petsmart-search-filters"; + public static final String PET_SMART_PETSMART_SUGGEST = "petsmart-suggest"; + public static final String PGA_TOUR_PGATOUR_LEADERBOARD = "pgatour-leaderboard"; + public static final String PGA_TOUR_PGATOUR_PLAYERS = "pgatour-players"; + public static final String PGA_TOUR_PGATOUR_SCHEDULE = "pgatour-schedule"; + public static final String PGA_TOUR_PGATOUR_SCHEDULE_SEASONS = "pgatour-schedule-seasons"; + public static final String PGA_TOUR_PGATOUR_STAT_DETAIL = "pgatour-stat-detail"; + public static final String PGA_TOUR_PGATOUR_STAT_OPTIONS = "pgatour-stat-options"; + public static final String PGA_TOUR_PGATOUR_STATS = "pgatour-stats"; + public static final String PGA_TOUR_PGATOUR_TOURNAMENT_BROADCAST = "pgatour-tournament-broadcast"; + public static final String PGA_TOUR_PGATOUR_TOURNAMENT_COURSE_STATS = "pgatour-tournament-course-stats"; + public static final String PGA_TOUR_PGATOUR_TOURNAMENT_FIELD = "pgatour-tournament-field"; + public static final String PGA_TOUR_PGATOUR_TOURNAMENT_LINKS = "pgatour-tournament-links"; + public static final String PGA_TOUR_PGATOUR_TOURNAMENT_OVERVIEW = "pgatour-tournament-overview"; + public static final String PGA_TOUR_PGATOUR_TOURNAMENT_PAST_RESULTS = "pgatour-tournament-past-results"; + public static final String PGA_TOUR_PGATOUR_TOURNAMENT_TEE_TIMES = "pgatour-tournament-tee-times"; + public static final String PGA_TOUR_PGATOUR_TOURNAMENT_WEATHER = "pgatour-tournament-weather"; public static final String PHILADELPHIA_INQUIRER_PHILLYINQUIRER_ARTICLE = "phillyinquirer-article"; public static final String PHILADELPHIA_INQUIRER_PHILLYINQUIRER_AUTHOR = "phillyinquirer-author"; public static final String PHILADELPHIA_INQUIRER_PHILLYINQUIRER_HEADLINES = "phillyinquirer-headlines"; @@ -2827,6 +3333,9 @@ private OperationId() {} public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_BROWSE_FILTERS = "rottentomatoes-browse-filters"; public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_BROWSE_MOVIES = "rottentomatoes-browse-movies"; public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_BROWSE_TV = "rottentomatoes-browse-tv"; + public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_CRITIC = "rottentomatoes-critic"; + public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_CRITIC_PUBLICATIONS = "rottentomatoes-critic-publications"; + public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_CRITIC_REVIEWS = "rottentomatoes-critic-reviews"; public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_CRITICS_AUTHORS = "rottentomatoes-critics-authors"; public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_EDITORIAL_CONTENT = "rottentomatoes-editorial-content"; public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_EDITORIAL_DETAIL = "rottentomatoes-editorial-detail"; @@ -2836,11 +3345,17 @@ private OperationId() {} public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_EDITORIAL_TERMS = "rottentomatoes-editorial-terms"; public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_EDITORIAL_TYPES = "rottentomatoes-editorial-types"; public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_EPISODE = "rottentomatoes-episode"; + public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_EPISODE_REVIEWS = "rottentomatoes-episode-reviews"; public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_MOVIE = "rottentomatoes-movie"; public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_MOVIE_REVIEWS = "rottentomatoes-movie-reviews"; + public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_MOVIE_VIDEOS = "rottentomatoes-movie-videos"; + public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_MOVIES = "rottentomatoes-movies"; public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_PERSON = "rottentomatoes-person"; + public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_PUBLICATION = "rottentomatoes-publication"; + public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_PUBLICATION_REVIEWS = "rottentomatoes-publication-reviews"; public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_SEARCH = "rottentomatoes-search"; public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_SEASON = "rottentomatoes-season"; + public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_SEASON_REVIEWS = "rottentomatoes-season-reviews"; public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_SERIES = "rottentomatoes-series"; public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_SITEMAP_URLS = "rottentomatoes-sitemap-urls"; public static final String ROTTEN_TOMATOES_ROTTENTOMATOES_SITEMAPS = "rottentomatoes-sitemaps"; @@ -3062,6 +3577,7 @@ private OperationId() {} public static final String SOFA_SCORE_SOFASCORE_EVENT_LINEUPS = "sofascore-event-lineups"; public static final String SOFA_SCORE_SOFASCORE_EVENT_MANAGERS = "sofascore-event-managers"; public static final String SOFA_SCORE_SOFASCORE_EVENT_ODDS = "sofascore-event-odds"; + public static final String SOFA_SCORE_SOFASCORE_EVENT_PLAYER_ACTIONS = "sofascore-event-player-actions"; public static final String SOFA_SCORE_SOFASCORE_EVENT_PLAYER_HEATMAP = "sofascore-event-player-heatmap"; public static final String SOFA_SCORE_SOFASCORE_EVENT_PLAYER_STATISTICS = "sofascore-event-player-statistics"; public static final String SOFA_SCORE_SOFASCORE_EVENT_POINT_BY_POINT = "sofascore-event-point-by-point"; @@ -3069,6 +3585,7 @@ private OperationId() {} public static final String SOFA_SCORE_SOFASCORE_EVENT_SHOTMAP = "sofascore-event-shotmap"; public static final String SOFA_SCORE_SOFASCORE_EVENT_STATISTICS = "sofascore-event-statistics"; public static final String SOFA_SCORE_SOFASCORE_EVENT_TEAM_HEATMAP = "sofascore-event-team-heatmap"; + public static final String SOFA_SCORE_SOFASCORE_EVENT_TEAM_SHOTMAP = "sofascore-event-team-shotmap"; public static final String SOFA_SCORE_SOFASCORE_EVENT_TEAM_STREAKS = "sofascore-event-team-streaks"; public static final String SOFA_SCORE_SOFASCORE_EVENT_TENNIS_POWER = "sofascore-event-tennis-power"; public static final String SOFA_SCORE_SOFASCORE_EVENT_TV_CHANNELS = "sofascore-event-tv-channels"; @@ -3176,6 +3693,23 @@ private OperationId() {} public static final String SPARK_FUN_SPARKFUN_CATEGORY = "sparkfun-category"; public static final String SPARK_FUN_SPARKFUN_PRODUCT = "sparkfun-product"; public static final String SPARK_FUN_SPARKFUN_SEARCH = "sparkfun-search"; + public static final String SPEEDRUN_COM_SPEEDRUN_CATALOG = "speedrun-catalog"; + public static final String SPEEDRUN_COM_SPEEDRUN_CATEGORIES = "speedrun-categories"; + public static final String SPEEDRUN_COM_SPEEDRUN_CATEGORY_DETAIL = "speedrun-category-detail"; + public static final String SPEEDRUN_COM_SPEEDRUN_CATEGORY_RECORDS = "speedrun-category-records"; + public static final String SPEEDRUN_COM_SPEEDRUN_CATEGORY_VARIABLES = "speedrun-category-variables"; + public static final String SPEEDRUN_COM_SPEEDRUN_GAME_DETAIL = "speedrun-game-detail"; + public static final String SPEEDRUN_COM_SPEEDRUN_GAME_LEADERBOARD = "speedrun-game-leaderboard"; + public static final String SPEEDRUN_COM_SPEEDRUN_GAMES = "speedrun-games"; + public static final String SPEEDRUN_COM_SPEEDRUN_LEVEL_CATEGORIES = "speedrun-level-categories"; + public static final String SPEEDRUN_COM_SPEEDRUN_LEVEL_DETAIL = "speedrun-level-detail"; + public static final String SPEEDRUN_COM_SPEEDRUN_LEVEL_LEADERBOARD = "speedrun-level-leaderboard"; + public static final String SPEEDRUN_COM_SPEEDRUN_LEVEL_RECORDS = "speedrun-level-records"; + public static final String SPEEDRUN_COM_SPEEDRUN_LEVEL_VARIABLES = "speedrun-level-variables"; + public static final String SPEEDRUN_COM_SPEEDRUN_LEVELS = "speedrun-levels"; + public static final String SPEEDRUN_COM_SPEEDRUN_RECORDS = "speedrun-records"; + public static final String SPEEDRUN_COM_SPEEDRUN_RESOURCE_OPTIONS = "speedrun-resource-options"; + public static final String SPEEDRUN_COM_SPEEDRUN_VARIABLES = "speedrun-variables"; public static final String SPORTING_NEWS_SPORTINGNEWS_ARTICLE = "sportingnews-article"; public static final String SPORTING_NEWS_SPORTINGNEWS_AUTHOR = "sportingnews-author"; public static final String SPORTING_NEWS_SPORTINGNEWS_HEADLINES = "sportingnews-headlines"; @@ -3932,6 +4466,12 @@ private OperationId() {} public static final String WEB_EXTRACT = "extract"; public static final String WEB_SCRAPE = "web-scrape"; public static final String WEB_TECHSTACK = "web-techstack"; + public static final String WEBTOON_GENRE = "webtoon-genre"; + public static final String WEBTOON_GENRES = "webtoon-genres"; + public static final String WEBTOON_ORIGINALS = "webtoon-originals"; + public static final String WEBTOON_RANKINGS = "webtoon-rankings"; + public static final String WEBTOON_SEARCH = "webtoon-search"; + public static final String WEBTOON_SERIES = "webtoon-series"; public static final String WENDYS_CATEGORIES = "wendys-categories"; public static final String WENDYS_DIRECTORY = "wendys-directory"; public static final String WENDYS_ITEM = "wendys-item"; @@ -3973,6 +4513,16 @@ private OperationId() {} public static final String WOLT_RESTAURANT_MENU_SEARCH = "wolt-restaurant-menu-search"; public static final String WOLT_SEARCH = "wolt-search"; public static final String WOLT_SEARCH_FILTERS = "wolt-search-filters"; + public static final String WTA_COUNTRIES = "wta-countries"; + public static final String WTA_MATCH_STATES = "wta-match-states"; + public static final String WTA_RANKINGS = "wta-rankings"; + public static final String WTA_TOURNAMENT = "wta-tournament"; + public static final String WTA_TOURNAMENT_DRAWS = "wta-tournament-draws"; + public static final String WTA_TOURNAMENT_MATCHES = "wta-tournament-matches"; + public static final String WTA_TOURNAMENT_ORDER_OF_PLAY = "wta-tournament-order-of-play"; + public static final String WTA_TOURNAMENT_PLAYERS = "wta-tournament-players"; + public static final String WTA_TOURNAMENT_SEASONS = "wta-tournament-seasons"; + public static final String WTA_TOURNAMENTS = "wta-tournaments"; public static final String XPOST = "x-post"; public static final String XPROFILE = "x-profile"; public static final String XPROFILE_POSTS = "x-profile-posts"; @@ -4054,30 +4604,71 @@ private OperationId() {} public static final String YAHOO_SEARCH_SUGGEST = "yahoo-search-suggest"; public static final String YAHOO_SEARCH_VIDEOS = "yahoo-search-videos"; public static final String YAHOO_SHOPPING_ARTICLE = "yahoo-shopping-article"; + public static final String YAHOO_SHOPPING_AUTHOR = "yahoo-shopping-author"; + public static final String YAHOO_SHOPPING_CATEGORIES = "yahoo-shopping-categories"; public static final String YAHOO_SHOPPING_CATEGORY = "yahoo-shopping-category"; + public static final String YAHOO_SHOPPING_EXPERTS = "yahoo-shopping-experts"; public static final String YAHOO_SHOPPING_HOME = "yahoo-shopping-home"; public static final String YAHOO_SHOPPING_SHOPPING_LIST = "yahoo-shopping-shopping-list"; public static final String YAHOO_SHOPPING_SHOPPING_LISTS = "yahoo-shopping-shopping-lists"; + public static final String YAHOO_SHOPPING_SITEMAP = "yahoo-shopping-sitemap"; + public static final String YAHOO_SHOPPING_SITEMAPS = "yahoo-shopping-sitemaps"; public static final String YAHOO_SHOPPING_STORE = "yahoo-shopping-store"; public static final String YAHOO_SHOPPING_STORES = "yahoo-shopping-stores"; + public static final String YAHOO_SHOPPING_SUGGEST = "yahoo-shopping-suggest"; + public static final String YAHOO_SPORTS_COLLEGE_RANKINGS = "yahoo-sports-college-rankings"; + public static final String YAHOO_SPORTS_DRAFT = "yahoo-sports-draft"; + public static final String YAHOO_SPORTS_DROPDOWN_CATALOG = "yahoo-sports-dropdown-catalog"; public static final String YAHOO_SPORTS_GAME = "yahoo-sports-game"; public static final String YAHOO_SPORTS_GOLF_LEADERBOARD = "yahoo-sports-golf-leaderboard"; + public static final String YAHOO_SPORTS_GOLF_PLAYER = "yahoo-sports-golf-player"; + public static final String YAHOO_SPORTS_GOLF_PLAYER_NEWS = "yahoo-sports-golf-player-news"; + public static final String YAHOO_SPORTS_GOLF_PLAYERS = "yahoo-sports-golf-players"; public static final String YAHOO_SPORTS_GOLF_SCHEDULE = "yahoo-sports-golf-schedule"; + public static final String YAHOO_SPORTS_HOME = "yahoo-sports-home"; + public static final String YAHOO_SPORTS_INJURY_REPORT = "yahoo-sports-injury-report"; + public static final String YAHOO_SPORTS_LEAGUE_SCHEDULE = "yahoo-sports-league-schedule"; + public static final String YAHOO_SPORTS_LEAGUES = "yahoo-sports-leagues"; public static final String YAHOO_SPORTS_MMA_FIGHT_CARD = "yahoo-sports-mma-fight-card"; public static final String YAHOO_SPORTS_MMA_SCHEDULE = "yahoo-sports-mma-schedule"; + public static final String YAHOO_SPORTS_MORE_NEWS = "yahoo-sports-more-news"; public static final String YAHOO_SPORTS_MOTORSPORTS_RACE = "yahoo-sports-motorsports-race"; public static final String YAHOO_SPORTS_MOTORSPORTS_SCHEDULE = "yahoo-sports-motorsports-schedule"; + public static final String YAHOO_SPORTS_NAVIGATION = "yahoo-sports-navigation"; + public static final String YAHOO_SPORTS_NETWORK_CATALOG = "yahoo-sports-network-catalog"; public static final String YAHOO_SPORTS_NEWS = "yahoo-sports-news"; + public static final String YAHOO_SPORTS_NEWSLETTER_ARCHIVE = "yahoo-sports-newsletter-archive"; + public static final String YAHOO_SPORTS_NEWSLETTERS = "yahoo-sports-newsletters"; + public static final String YAHOO_SPORTS_ODDS_FEATURED = "yahoo-sports-odds-featured"; + public static final String YAHOO_SPORTS_ODDS_GAME = "yahoo-sports-odds-game"; + public static final String YAHOO_SPORTS_ODDS_GAMES = "yahoo-sports-odds-games"; + public static final String YAHOO_SPORTS_ODDS_TRENDING = "yahoo-sports-odds-trending"; public static final String YAHOO_SPORTS_OLYMPICS_MEDALS = "yahoo-sports-olympics-medals"; public static final String YAHOO_SPORTS_PLAYER = "yahoo-sports-player"; + public static final String YAHOO_SPORTS_PLAYER_SEARCH = "yahoo-sports-player-search"; + public static final String YAHOO_SPORTS_PLAYOFF_BRACKET = "yahoo-sports-playoff-bracket"; + public static final String YAHOO_SPORTS_PLAYOFF_BRACKET_CATALOG = "yahoo-sports-playoff-bracket-catalog"; + public static final String YAHOO_SPORTS_RSS_CATALOG = "yahoo-sports-rss-catalog"; + public static final String YAHOO_SPORTS_RSS_FEED = "yahoo-sports-rss-feed"; + public static final String YAHOO_SPORTS_SCHEDULE_CATALOG = "yahoo-sports-schedule-catalog"; public static final String YAHOO_SPORTS_SCOREBOARD = "yahoo-sports-scoreboard"; + public static final String YAHOO_SPORTS_SECTION_STREAM = "yahoo-sports-section-stream"; + public static final String YAHOO_SPORTS_SOCCER_SCOREBOARD = "yahoo-sports-soccer-scoreboard"; + public static final String YAHOO_SPORTS_SPORTSBOOK_CATALOG = "yahoo-sports-sportsbook-catalog"; public static final String YAHOO_SPORTS_STANDINGS = "yahoo-sports-standings"; + public static final String YAHOO_SPORTS_STATS = "yahoo-sports-stats"; + public static final String YAHOO_SPORTS_STATS_CATALOG = "yahoo-sports-stats-catalog"; + public static final String YAHOO_SPORTS_STATS_DISCOVERY = "yahoo-sports-stats-discovery"; public static final String YAHOO_SPORTS_TEAM = "yahoo-sports-team"; public static final String YAHOO_SPORTS_TEAM_ROSTER = "yahoo-sports-team-roster"; public static final String YAHOO_SPORTS_TEAM_SCHEDULE = "yahoo-sports-team-schedule"; public static final String YAHOO_SPORTS_TENNIS_RANKINGS = "yahoo-sports-tennis-rankings"; public static final String YAHOO_SPORTS_TENNIS_SCHEDULE = "yahoo-sports-tennis-schedule"; public static final String YAHOO_SPORTS_TENNIS_SCOREBOARD = "yahoo-sports-tennis-scoreboard"; + public static final String YAHOO_SPORTS_TOPIC_NEWS = "yahoo-sports-topic-news"; + public static final String YAHOO_SPORTS_VIDEO_HEADLINES = "yahoo-sports-video-headlines"; + public static final String YAHOO_SPORTS_VIDEO_LIST_CATALOG = "yahoo-sports-video-list-catalog"; + public static final String YAHOO_SPORTS_WATCH_SCHEDULE = "yahoo-sports-watch-schedule"; public static final String YAHOO_TECH_ARTICLE = "yahoo-tech-article"; public static final String YAHOO_TECH_CATEGORY = "yahoo-tech-category"; public static final String YAHOO_TECH_HOME = "yahoo-tech-home"; diff --git a/src/main/java/net/crawlora/Operations.java b/src/main/java/net/crawlora/Operations.java index 6603a96..5be0483 100644 --- a/src/main/java/net/crawlora/Operations.java +++ b/src/main/java/net/crawlora/Operations.java @@ -15,7 +15,7 @@ public final class Operations { private Operations() {} /** Total number of operations in the contract. */ - public static final int OPERATION_COUNT = 4140; + public static final int OPERATION_COUNT = 4731; /** Immutable map of operation id to its runtime metadata. */ public static final Map OPERATIONS = buildOperations(); @@ -94,6 +94,16 @@ private static Map buildOperations() { putOperations66(m); putOperations67(m); putOperations68(m); + putOperations69(m); + putOperations70(m); + putOperations71(m); + putOperations72(m); + putOperations73(m); + putOperations74(m); + putOperations75(m); + putOperations76(m); + putOperations77(m); + putOperations78(m); return Map.copyOf(m); } @@ -1410,6 +1420,25 @@ private static void putOperations1(Map m) { new QueryParam("category", false, "string", List.of("BASEBALL_CARDS", "POKEMON_CARDS", "FOOTBALL_CARDS", "BASKETBALL_CARDS", "POP-CULTURE_CARDS", "HOCKEY_CARDS", "SOCCER_CARDS", "ONE_PIECE_CARDS", "OTHER_CARDS", "TCG_CARDS", "COMBAT_SPORTS_CARDS", "RACING_CARDS", "MAGIC_CARDS", "YUGIOH_CARDS", "GOLF_CARDS", "TENNIS_CARDS")), new QueryParam("auction_house", false, "string", List.of("eBay", "Fanatics Collect", "Alt", "Pristine Auction", "Goldin", "CardHobby", "Memory Lane")), new QueryParam("grading_company", false, "string", List.of("PSA", "CGC", "BGS", "CSG", "SGC", "PSA/DNA", "BVG", "BCCG", "Factory Sealed", "BAS", "AUTHENTIC", "TAG", "RELABEL", "RECASE", "JSA/BVG", "REVIEW", "INTERNAL", "NEW/", "BULK", "OTHERS", "UNGRADED")), + new QueryParam("listing_type", false, "string", List.of("AUCTION", "FIXED_PRICE", "EXTERNAL_AUCTION", "EXTERNAL_FIXED_PRICE")), + new QueryParam("grade", false, "string", List.of("1", "1.5", "2", "2.5", "3", "3.5", "4", "4.5", "5", "5.5", "6", "6.5", "7", "7.5", "8", "8.5", "9", "9.5", "10", "Auth", "PRI", "BL")), + new QueryParam("subject", false, "string", List.of()), + new QueryParam("brand", false, "string", List.of()), + new QueryParam("card_number", false, "string", List.of()), + new QueryParam("sold_from", false, "string", List.of()), + new QueryParam("sold_to", false, "string", List.of()), + new QueryParam("added_from", false, "string", List.of()), + new QueryParam("added_to", false, "string", List.of()), + new QueryParam("year_min", false, "integer", List.of()), + new QueryParam("year_max", false, "integer", List.of()), + new QueryParam("price_min", false, "number", List.of()), + new QueryParam("price_max", false, "number", List.of()), + new QueryParam("pop_min", false, "integer", List.of()), + new QueryParam("pop_max", false, "integer", List.of()), + new QueryParam("has_serial", false, "boolean", List.of()), + new QueryParam("has_print_run", false, "boolean", List.of()), + new QueryParam("rookie_year_card", false, "boolean", List.of()), + new QueryParam("sort", false, "string", List.of("recommended", "sold_date_desc", "sold_date_asc", "added_desc", "added_asc", "price_desc", "price_asc", "pop_desc", "pop_asc", "year_desc", "year_asc")), new QueryParam("page", false, "integer", List.of()), new QueryParam("per_page", false, "integer", List.of())), List.of(), @@ -1962,6 +1991,20 @@ private static void putOperations2(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("apple-books-audiobook-charts", new Operation( + "apple-books-audiobook-charts", + "GET", + "/apple-books/audiobook/charts", + List.of(), + List.of( + new QueryParam("country", false, "string", List.of()), + new QueryParam("genre_id", false, "string", List.of("50000042", "50000043", "50000040", "50000049", "50000044", "50000051", "50000052", "50000053", "50000069", "50000055", "50000054", "50000056"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("apple-books-audiobook-search", new Operation( "apple-books-audiobook-search", "GET", @@ -2088,7 +2131,7 @@ private static void putOperations2(Map m) { List.of(), List.of( new QueryParam("collection", false, "string", List.of("top-free", "top-paid")), - new QueryParam("genre", false, "integer", List.of()), + new QueryParam("genre", false, "integer", List.of("9008", "9009", "9026", "9027", "9028", "9031", "9025", "9015", "11086", "9032", "9002", "9034", "9018", "9003", "9020", "9035", "11165")), new QueryParam("country", false, "string", List.of()), new QueryParam("limit", false, "integer", List.of())), List.of(), @@ -2097,6 +2140,20 @@ private static void putOperations2(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("apple-books-genres", new Operation( + "apple-books-genres", + "GET", + "/apple-books/genres", + List.of(), + List.of( + new QueryParam("media", true, "string", List.of("book", "audiobook")), + new QueryParam("country", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("apple-books-search", new Operation( "apple-books-search", "GET", @@ -2687,6 +2744,9 @@ private static void putOperations2(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations3(Map m) { m.put("appstore-editorial", new Operation( "appstore-editorial", "GET", @@ -2719,9 +2779,6 @@ private static void putOperations2(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations3(Map m) { m.put("appstore-list", new Operation( "appstore-list", "GET", @@ -3350,6 +3407,91 @@ private static void putOperations3(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("bandcamp-artist", new Operation( + "bandcamp-artist", + "GET", + "/bandcamp/artist", + List.of(), + List.of( + new QueryParam("artist", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("bandcamp-discover", new Operation( + "bandcamp-discover", + "GET", + "/bandcamp/discover", + List.of(), + List.of( + new QueryParam("tags", false, "string", List.of()), + new QueryParam("format", false, "string", List.of("all", "vinyl", "cd", "cassette")), + new QueryParam("sort", false, "string", List.of("best_selling", "new", "random")), + new QueryParam("time_facet", false, "integer", List.of()), + new QueryParam("geoname_id", false, "integer", List.of()), + new QueryParam("cursor", false, "string", List.of()), + new QueryParam("size", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of("cursor"))); + m.put("bandcamp-filters", new Operation( + "bandcamp-filters", + "GET", + "/bandcamp/filters", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("bandcamp-related-tags", new Operation( + "bandcamp-related-tags", + "GET", + "/bandcamp/related-tags", + List.of(), + List.of( + new QueryParam("tag", true, "string", List.of()), + new QueryParam("size", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("bandcamp-release", new Operation( + "bandcamp-release", + "GET", + "/bandcamp/release", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("bandcamp-search", new Operation( + "bandcamp-search", + "GET", + "/bandcamp/search", + List.of(), + List.of( + new QueryParam("q", true, "string", List.of()), + new QueryParam("type", false, "string", List.of("all", "artists", "albums", "tracks"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("barrons-article", new Operation( "barrons-article", "GET", @@ -3454,6 +3596,9 @@ private static void putOperations3(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations4(Map m) { m.put("bbb-business-reviews", new Operation( "bbb-business-reviews", "GET", @@ -3568,9 +3713,6 @@ private static void putOperations3(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations4(Map m) { m.put("bbb-scamtracker-search", new Operation( "bbb-scamtracker-search", "GET", @@ -4273,6 +4415,9 @@ private static void putOperations4(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations5(Map m) { m.put("billing-me-subscription-change-cancel", new Operation( "billing-me-subscription-change-cancel", "POST", @@ -4395,9 +4540,6 @@ private static void putOperations4(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations5(Map m) { m.put("birminghammail-author", new Operation( "birminghammail-author", "GET", @@ -4821,7 +4963,7 @@ private static void putOperations5(Map m) { List.of(), List.of( new QueryParam("game", false, "string", List.of("cs2", "valorant", "lol", "dota2", "r6siege", "mlbb")), - new QueryParam("status", false, "string", List.of("finished", "defwin", "upcoming", "current")), + new QueryParam("status", false, "string", List.of("finished", "defwin", "upcoming", "current", "canceled", "postponed")), new QueryParam("tier", false, "string", List.of("s", "a", "b", "c", "d")), new QueryParam("from", false, "string", List.of()), new QueryParam("to", false, "string", List.of()), @@ -4865,8 +5007,10 @@ private static void putOperations5(Map m) { "/bo3/news-feed", List.of(), List.of( - new QueryParam("game", false, "string", List.of("cs2", "valorant", "lol", "dota2", "r6siege", "mlbb")), - new QueryParam("section", false, "string", List.of("news", "article", "wiki", "predictions")), + new QueryParam("game", false, "string", List.of("cs2", "valorant", "lol", "dota2", "r6siege", "mlbb", "games")), + new QueryParam("section", false, "string", List.of("news", "article", "wiki", "predictions", "reviews")), + new QueryParam("tag", false, "string", List.of()), + new QueryParam("locale", false, "string", List.of("en", "ru", "pt", "es", "de", "fr", "tr", "pl", "id", "vi", "ja", "ko", "ua", "ms", "tl", "da")), new QueryParam("category", false, "integer", List.of()), new QueryParam("sort", false, "string", List.of("newest", "oldest")), new QueryParam("offset", false, "integer", List.of()), @@ -5133,7 +5277,7 @@ private static void putOperations5(Map m) { List.of(), List.of( new QueryParam("game", false, "string", List.of("cs2", "valorant", "lol", "dota2", "r6siege", "mlbb")), - new QueryParam("status", false, "string", List.of("current", "upcoming", "finished")), + new QueryParam("status", false, "string", List.of("current", "upcoming", "finished", "canceled", "postponed")), new QueryParam("tier", false, "string", List.of("s", "a", "b", "c", "d")), new QueryParam("event_type", false, "string", List.of("lan", "online")), new QueryParam("sort", false, "string", List.of("newest", "oldest", "prize")), @@ -5145,6 +5289,9 @@ private static void putOperations5(Map m) { List.of("ApiKeyAuth"), true, List.of())); + } + + private static void putOperations6(Map m) { m.put("bo3-transfers", new Operation( "bo3-transfers", "GET", @@ -5182,6 +5329,205 @@ private static void putOperations5(Map m) { List.of("ApiKeyAuth"), true, List.of())); + m.put("boardgamegeek-cardsets", new Operation( + "boardgamegeek-cardsets", + "GET", + "/boardgamegeek/cardsets/{id}", + List.of("id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("boardgamegeek-entity", new Operation( + "boardgamegeek-entity", + "GET", + "/boardgamegeek/entity/{type}/{id}", + List.of("type", "id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("boardgamegeek-game", new Operation( + "boardgamegeek-game", + "GET", + "/boardgamegeek/game/{id}", + List.of("id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("boardgamegeek-geeklist", new Operation( + "boardgamegeek-geeklist", + "GET", + "/boardgamegeek/geeklist/{id}", + List.of("id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("boardgamegeek-geeklist-items", new Operation( + "boardgamegeek-geeklist-items", + "GET", + "/boardgamegeek/geeklist/{id}/items", + List.of("id"), + List.of( + new QueryParam("page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("boardgamegeek-geeklists", new Operation( + "boardgamegeek-geeklists", + "GET", + "/boardgamegeek/geeklists", + List.of(), + List.of( + new QueryParam("objecttype", false, "string", List.of("thing", "family", "person", "company", "property", "version")), + new QueryParam("objectid", true, "integer", List.of()), + new QueryParam("category", false, "string", List.of("all", "trade", "general")), + new QueryParam("sort", false, "string", List.of("hot", "recent")), + new QueryParam("showcount", false, "integer", List.of()), + new QueryParam("pageid", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("boardgamegeek-hotness", new Operation( + "boardgamegeek-hotness", + "GET", + "/boardgamegeek/hotness", + List.of(), + List.of( + new QueryParam("objecttype", false, "string", List.of("thing", "person", "company")), + new QueryParam("showcount", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("boardgamegeek-links", new Operation( + "boardgamegeek-links", + "GET", + "/boardgamegeek/links", + List.of(), + List.of( + new QueryParam("objecttype", true, "string", List.of("thing", "family", "person", "company", "property", "version")), + new QueryParam("objectid", true, "integer", List.of()), + new QueryParam("linktype", true, "string", List.of("boardgame", "boardgameaccessory", "boardgameaccessoryartist", "boardgameaccessorydesigner", "boardgameartist", "boardgamecategory", "boardgamedesigner", "boardgamedeveloper", "boardgameeditor", "boardgameexpansion", "boardgamefamily", "boardgamegraphicdesigner", "boardgamehonor", "boardgameinsertdesigner", "boardgameintegration", "boardgameissue", "boardgameissueartist", "boardgameissueauthor", "boardgamemechanic", "boardgamepublisher", "boardgamesculptor", "boardgamesolodesigner", "boardgamesubdomain", "boardgameversion", "boardgameversionartist", "boardgamewriter", "cardset", "containedin", "contains", "expandsboardgame", "expandsvideogame", "languages", "reimplementation", "reimplements", "rpgartist", "rpgdesigner", "rpghonor", "rpgissuearticleauthor", "rpgissueartist", "rpgissuedesigner", "rpgissueproducer", "rpgproducer", "videogamebg", "videogamedeveloper", "videogameexpansion", "videogamefranchise", "videogamegenre", "videogamemode", "videogameplatform", "videogamepublisher", "videogameseries", "videogametheme")), + new QueryParam("showcount", false, "integer", List.of()), + new QueryParam("pageid", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("boardgamegeek-media", new Operation( + "boardgamegeek-media", + "GET", + "/boardgamegeek/media/{id}", + List.of("id"), + List.of( + new QueryParam("type", false, "string", List.of("image", "video", "file")), + new QueryParam("showcount", false, "integer", List.of()), + new QueryParam("pageid", false, "integer", List.of()), + new QueryParam("sort", false, "string", List.of("hot", "recent")), + new QueryParam("interval", false, "string", List.of("alltime", "today", "twodays", "last7", "last30", "year")), + new QueryParam("gallery", false, "string", List.of("all", "game", "person", "creative", "review", "session", "instructional", "interview", "unboxing", "humor", "other")), + new QueryParam("tag", false, "string", List.of("BoxFront", "BoxBack", "Components", "Customized", "Play", "Miscellaneous", "uncat")), + new QueryParam("license", false, "string", List.of("reuse", "commercial", "modify")), + new QueryParam("languageid", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("boardgamegeek-recommendations", new Operation( + "boardgamegeek-recommendations", + "GET", + "/boardgamegeek/recommendations/{id}", + List.of("id"), + List.of( + new QueryParam("showcount", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("boardgamegeek-reviews", new Operation( + "boardgamegeek-reviews", + "GET", + "/boardgamegeek/reviews/{type}/{id}", + List.of("type", "id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("boardgamegeek-taxonomy", new Operation( + "boardgamegeek-taxonomy", + "GET", + "/boardgamegeek/taxonomy", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("boardgamegeek-thread", new Operation( + "boardgamegeek-thread", + "GET", + "/boardgamegeek/thread/{id}", + List.of("id"), + List.of( + new QueryParam("pageid", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("boardgamegeek-threads", new Operation( + "boardgamegeek-threads", + "GET", + "/boardgamegeek/threads", + List.of(), + List.of( + new QueryParam("objecttype", false, "string", List.of("thing", "family", "person", "company", "property", "version")), + new QueryParam("objectid", true, "integer", List.of()), + new QueryParam("forumid", false, "integer", List.of()), + new QueryParam("sort", false, "string", List.of("hot", "recent", "active")), + new QueryParam("showcount", false, "integer", List.of()), + new QueryParam("pageid", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("bonhams-auction-search", new Operation( "bonhams-auction-search", "GET", @@ -5275,9 +5621,6 @@ private static void putOperations5(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations6(Map m) { m.put("booking-attractions-reviews", new Operation( "booking-attractions-reviews", "GET", @@ -5402,6 +5745,72 @@ private static void putOperations6(Map m) { List.of("ApiKeyAuth"), true, List.of())); + m.put("booksy-business", new Operation( + "booksy-business", + "GET", + "/booksy/business", + List.of(), + List.of( + new QueryParam("id", true, "integer", List.of()), + new QueryParam("country", false, "string", List.of("ar", "au", "br", "ca", "cl", "co", "de", "es", "fr", "gb", "ie", "it", "mx", "nl", "pl", "pt", "us", "za"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("booksy-businesses", new Operation( + "booksy-businesses", + "GET", + "/booksy/businesses", + List.of(), + List.of( + new QueryParam("country", false, "string", List.of("ar", "au", "br", "ca", "cl", "co", "de", "es", "fr", "gb", "ie", "it", "mx", "nl", "pl", "pt", "us", "za")), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of()), + new QueryParam("category", false, "integer", List.of()), + new QueryParam("treatment", false, "integer", List.of()), + new QueryParam("query", false, "string", List.of()), + new QueryParam("location_id", false, "integer", List.of()), + new QueryParam("location_name", false, "string", List.of()), + new QueryParam("sort_order", false, "string", List.of("distance", "score", "top_rated", "by_ids")), + new QueryParam("gender", false, "string", List.of("M", "F", "R")), + new QueryParam("open_now", false, "boolean", List.of()), + new QueryParam("has_special_offers", false, "boolean", List.of()), + new QueryParam("business_ids", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("booksy-categories", new Operation( + "booksy-categories", + "GET", + "/booksy/categories", + List.of(), + List.of( + new QueryParam("country", false, "string", List.of("ar", "au", "br", "ca", "cl", "co", "de", "es", "fr", "gb", "ie", "it", "mx", "nl", "pl", "pt", "us", "za"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("booksy-treatment-hints", new Operation( + "booksy-treatment-hints", + "GET", + "/booksy/treatment-hints", + List.of(), + List.of( + new QueryParam("query", true, "string", List.of()), + new QueryParam("country", false, "string", List.of("ar", "au", "br", "ca", "cl", "co", "de", "es", "fr", "gb", "ie", "it", "mx", "nl", "pl", "pt", "us", "za"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("boots-search", new Operation( "boots-search", "GET", @@ -5805,6 +6214,9 @@ private static void putOperations6(Map m) { List.of("ApiKeyAuth"), true, List.of())); + } + + private static void putOperations7(Map m) { m.put("brave-search", new Operation( "brave-search", "GET", @@ -5926,6 +6338,153 @@ private static void putOperations6(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("bringatrailer-filters", new Operation( + "bringatrailer-filters", + "GET", + "/bringatrailer/filters", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("bringatrailer-listing", new Operation( + "bringatrailer-listing", + "GET", + "/bringatrailer/listing", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of()), + new QueryParam("bid_history", false, "boolean", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("bringatrailer-live", new Operation( + "bringatrailer-live", + "GET", + "/bringatrailer/live", + List.of(), + List.of( + new QueryParam("q", false, "string", List.of()), + new QueryParam("category", false, "string", List.of()), + new QueryParam("era", false, "string", List.of()), + new QueryParam("country", false, "string", List.of()), + new QueryParam("ending_within", false, "integer", List.of("1", "4", "24", "120", "168")), + new QueryParam("max_bid", false, "integer", List.of()), + new QueryParam("no_reserve", false, "boolean", List.of()), + new QueryParam("premium", false, "boolean", List.of()), + new QueryParam("sort", false, "string", List.of("ending_soon", "highest_bid", "lowest_bid")), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("per_page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("bringatrailer-makes", new Operation( + "bringatrailer-makes", + "GET", + "/bringatrailer/makes", + List.of(), + List.of( + new QueryParam("q", false, "string", List.of()), + new QueryParam("make", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("bringatrailer-price-history", new Operation( + "bringatrailer-price-history", + "GET", + "/bringatrailer/price-history", + List.of(), + List.of( + new QueryParam("make", false, "string", List.of()), + new QueryParam("model_id", false, "integer", List.of()), + new QueryParam("q", false, "string", List.of()), + new QueryParam("exclude", false, "string", List.of()), + new QueryParam("category", false, "string", List.of()), + new QueryParam("era", false, "string", List.of()), + new QueryParam("origin", false, "string", List.of()), + new QueryParam("country", false, "string", List.of()), + new QueryParam("type", false, "string", List.of("premium", "noreserve")), + new QueryParam("recency", false, "string", List.of("7D", "30D", "1Y", "2Y", "5Y")), + new QueryParam("min_year", false, "integer", List.of()), + new QueryParam("max_year", false, "integer", List.of()), + new QueryParam("max_bid", false, "integer", List.of()), + new QueryParam("points_limit", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("bringatrailer-results", new Operation( + "bringatrailer-results", + "GET", + "/bringatrailer/results", + List.of(), + List.of( + new QueryParam("make", false, "string", List.of()), + new QueryParam("model_id", false, "integer", List.of()), + new QueryParam("q", false, "string", List.of()), + new QueryParam("exclude", false, "string", List.of()), + new QueryParam("category", false, "string", List.of()), + new QueryParam("era", false, "string", List.of()), + new QueryParam("origin", false, "string", List.of()), + new QueryParam("country", false, "string", List.of()), + new QueryParam("result", false, "string", List.of("sold", "unsold")), + new QueryParam("type", false, "string", List.of("premium", "noreserve")), + new QueryParam("recency", false, "string", List.of("7D", "30D", "1Y", "2Y", "5Y")), + new QueryParam("min_year", false, "integer", List.of()), + new QueryParam("max_year", false, "integer", List.of()), + new QueryParam("max_bid", false, "integer", List.of()), + new QueryParam("sort", false, "string", List.of("recent", "oldest", "popular", "highest_bid")), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("per_page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("bringatrailer-search", new Operation( + "bringatrailer-search", + "GET", + "/bringatrailer/search", + List.of(), + List.of( + new QueryParam("q", true, "string", List.of()), + new QueryParam("phrase", false, "boolean", List.of()), + new QueryParam("section", false, "string", List.of("all", "live_listings", "models", "previous_auctions", "events", "stories")), + new QueryParam("page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("bringatrailer-suggest", new Operation( + "bringatrailer-suggest", + "GET", + "/bringatrailer/suggest", + List.of(), + List.of( + new QueryParam("term", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("brisbanetimes-article", new Operation( "brisbanetimes-article", "GET", @@ -6165,9 +6724,6 @@ private static void putOperations6(Map m) { List.of("ApiKeyAuth"), true, List.of())); - } - - private static void putOperations7(Map m) { m.put("burberry-product", new Operation( "burberry-product", "GET", @@ -6453,6 +7009,86 @@ private static void putOperations7(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("cardmarket-catalog", new Operation( + "cardmarket-catalog", + "GET", + "/cardmarket/catalog", + List.of(), + List.of( + new QueryParam("kind", false, "string", List.of("singles", "nonsingles", "accessories")), + new QueryParam("game_id", false, "integer", List.of("1", "2", "3", "5", "6", "7", "8", "9", "10", "11", "12", "13", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25")), + new QueryParam("category_id", false, "integer", List.of()), + new QueryParam("expansion_id", false, "integer", List.of()), + new QueryParam("q", false, "string", List.of()), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("cardmarket-catalog-categories", new Operation( + "cardmarket-catalog-categories", + "GET", + "/cardmarket/catalog/categories", + List.of(), + List.of( + new QueryParam("kind", false, "string", List.of("singles", "nonsingles", "accessories")), + new QueryParam("game_id", false, "integer", List.of("1", "2", "3", "5", "6", "7", "8", "9", "10", "11", "12", "13", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("cardmarket-games", new Operation( + "cardmarket-games", + "GET", + "/cardmarket/games", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("cardmarket-price-guide", new Operation( + "cardmarket-price-guide", + "GET", + "/cardmarket/price-guide", + List.of(), + List.of( + new QueryParam("kind", false, "string", List.of("game", "accessories")), + new QueryParam("game_id", false, "integer", List.of("1", "2", "3", "5", "6", "7", "8", "9", "10", "11", "12", "13", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33")), + new QueryParam("category_id", false, "integer", List.of()), + new QueryParam("product_id", false, "integer", List.of()), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("cardmarket-price-guide-categories", new Operation( + "cardmarket-price-guide-categories", + "GET", + "/cardmarket/price-guide/categories", + List.of(), + List.of( + new QueryParam("kind", false, "string", List.of("game", "accessories")), + new QueryParam("game_id", false, "integer", List.of("1", "2", "3", "5", "6", "7", "8", "9", "10", "11", "12", "13", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + } + + private static void putOperations8(Map m) { m.put("carmax-search", new Operation( "carmax-search", "GET", @@ -6983,9 +7619,6 @@ private static void putOperations7(Map m) { List.of("ApiKeyAuth"), true, List.of())); - } - - private static void putOperations8(Map m) { m.put("chewy-products", new Operation( "chewy-products", "GET", @@ -7282,6 +7915,9 @@ private static void putOperations8(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations9(Map m) { m.put("chipotle-restaurant", new Operation( "chipotle-restaurant", "GET", @@ -7839,9 +8475,6 @@ private static void putOperations8(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations9(Map m) { m.put("cnn-article", new Operation( "cnn-article", "GET", @@ -8138,6 +8771,9 @@ private static void putOperations9(Map m) { List.of("ApiKeyAuth"), true, List.of())); + } + + private static void putOperations10(Map m) { m.put("coingecko-search", new Operation( "coingecko-search", "GET", @@ -8624,133 +9260,149 @@ private static void putOperations9(Map m) { List.of("ApiKeyAuth"), true, List.of("cursor"))); - m.put("cricinfo-calendar", new Operation( - "cricinfo-calendar", + m.put("cricbuzz-archives", new Operation( + "cricbuzz-archives", "GET", - "/cricinfo/calendar", - List.of(), + "/cricbuzz/archives", List.of(), + List.of( + new QueryParam("year", false, "integer", List.of()), + new QueryParam("category", false, "string", List.of("international", "league", "domestic", "women")), + new QueryParam("q", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("cricinfo-commentary", new Operation( - "cricinfo-commentary", + m.put("cricbuzz-auction-info", new Operation( + "cricbuzz-auction-info", "GET", - "/cricinfo/commentary", + "/cricbuzz/auction/info", List.of(), List.of( - new QueryParam("url", true, "string", List.of()), - new QueryParam("limit", false, "integer", List.of())), + new QueryParam("tournament", false, "string", List.of()), + new QueryParam("year", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("cricinfo-grounds", new Operation( - "cricinfo-grounds", + m.put("cricbuzz-auction-live", new Operation( + "cricbuzz-auction-live", "GET", - "/cricinfo/grounds", + "/cricbuzz/auction/live", List.of(), List.of( - new QueryParam("limit", false, "integer", List.of())), + new QueryParam("tournament", true, "string", List.of()), + new QueryParam("year", true, "string", List.of()), + new QueryParam("currency", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("cricinfo-live-matches", new Operation( - "cricinfo-live-matches", + m.put("cricbuzz-auction-live-blog", new Operation( + "cricbuzz-auction-live-blog", "GET", - "/cricinfo/live", - List.of(), + "/cricbuzz/auction/live-blog", List.of(), + List.of( + new QueryParam("tournament", true, "string", List.of()), + new QueryParam("year", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations10(Map m) { - m.put("cricinfo-match", new Operation( - "cricinfo-match", + m.put("cricbuzz-auction-news", new Operation( + "cricbuzz-auction-news", "GET", - "/cricinfo/match", + "/cricbuzz/auction/news", List.of(), List.of( - new QueryParam("url", true, "string", List.of())), + new QueryParam("tournament", true, "string", List.of()), + new QueryParam("year", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("cricinfo-news", new Operation( - "cricinfo-news", + m.put("cricbuzz-auction-options", new Operation( + "cricbuzz-auction-options", "GET", - "/cricinfo/news", + "/cricbuzz/auction/options", List.of(), List.of( - new QueryParam("limit", false, "integer", List.of())), + new QueryParam("tournament", false, "string", List.of()), + new QueryParam("year", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("cricinfo-photos", new Operation( - "cricinfo-photos", + m.put("cricbuzz-auction-player-detail", new Operation( + "cricbuzz-auction-player-detail", "GET", - "/cricinfo/photos", + "/cricbuzz/auction/player", List.of(), List.of( - new QueryParam("limit", false, "integer", List.of())), + new QueryParam("tournament", true, "string", List.of()), + new QueryParam("year", true, "string", List.of()), + new QueryParam("currency", true, "string", List.of()), + new QueryParam("player_id", true, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("cricinfo-rankings", new Operation( - "cricinfo-rankings", + m.put("cricbuzz-auction-player-search", new Operation( + "cricbuzz-auction-player-search", "GET", - "/cricinfo/rankings", + "/cricbuzz/auction/player-search", List.of(), List.of( - new QueryParam("url", true, "string", List.of())), + new QueryParam("tournament", true, "string", List.of()), + new QueryParam("year", true, "string", List.of()), + new QueryParam("q", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("cricinfo-records", new Operation( - "cricinfo-records", + m.put("cricbuzz-auction-results", new Operation( + "cricbuzz-auction-results", "GET", - "/cricinfo/records", + "/cricbuzz/auction/results", List.of(), List.of( - new QueryParam("record", true, "string", List.of()), - new QueryParam("class", true, "integer", List.of("1", "2", "3", "4", "5", "6", "8", "9", "10", "11", "12", "20", "21", "22", "23")), - new QueryParam("id", false, "string", List.of()), - new QueryParam("type", false, "string", List.of()), - new QueryParam("current", false, "string", List.of())), + new QueryParam("tournament", true, "string", List.of()), + new QueryParam("year", true, "string", List.of()), + new QueryParam("currency", true, "string", List.of()), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("country_ids", false, "string", List.of()), + new QueryParam("statuses", false, "string", List.of()), + new QueryParam("team_id", false, "string", List.of()), + new QueryParam("role", false, "string", List.of()), + new QueryParam("cap", false, "string", List.of()), + new QueryParam("sort", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), - false, + true, List.of())); - m.put("cricinfo-records-index", new Operation( - "cricinfo-records-index", + m.put("cricbuzz-auction-seasons", new Operation( + "cricbuzz-auction-seasons", "GET", - "/cricinfo/records/index", + "/cricbuzz/auction/seasons", List.of(), List.of(), List.of(), @@ -8759,332 +9411,357 @@ private static void putOperations10(Map m) { List.of("ApiKeyAuth"), false, List.of())); - m.put("cricinfo-rss", new Operation( - "cricinfo-rss", + m.put("cricbuzz-auction-team-detail", new Operation( + "cricbuzz-auction-team-detail", "GET", - "/cricinfo/rss", + "/cricbuzz/auction/team", List.of(), List.of( - new QueryParam("url", true, "string", List.of())), + new QueryParam("tournament", true, "string", List.of()), + new QueryParam("year", true, "string", List.of()), + new QueryParam("currency", true, "string", List.of()), + new QueryParam("team_id", true, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("cricinfo-scores", new Operation( - "cricinfo-scores", + m.put("cricbuzz-auction-teams", new Operation( + "cricbuzz-auction-teams", "GET", - "/cricinfo/scores", - List.of(), + "/cricbuzz/auction/teams", List.of(), + List.of( + new QueryParam("tournament", true, "string", List.of()), + new QueryParam("year", true, "string", List.of()), + new QueryParam("currency", true, "string", List.of()), + new QueryParam("sort", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("cricinfo-series", new Operation( - "cricinfo-series", + m.put("cricbuzz-auction-teams-options", new Operation( + "cricbuzz-auction-teams-options", "GET", - "/cricinfo/series", + "/cricbuzz/auction/teams/options", List.of(), List.of( - new QueryParam("series_id", true, "string", List.of())), + new QueryParam("tournament", false, "string", List.of()), + new QueryParam("year", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("cricinfo-squads", new Operation( - "cricinfo-squads", + m.put("cricbuzz-auction-upcoming", new Operation( + "cricbuzz-auction-upcoming", "GET", - "/cricinfo/squads", + "/cricbuzz/auction/upcoming", List.of(), List.of( - new QueryParam("url", true, "string", List.of())), + new QueryParam("tournament", true, "string", List.of()), + new QueryParam("year", true, "string", List.of()), + new QueryParam("currency", true, "string", List.of()), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("country_ids", false, "string", List.of()), + new QueryParam("role", false, "string", List.of()), + new QueryParam("cap", false, "string", List.of()), + new QueryParam("sort", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), - false, + true, List.of())); - m.put("cricinfo-stats", new Operation( - "cricinfo-stats", + m.put("cricbuzz-auction-upcoming-options", new Operation( + "cricbuzz-auction-upcoming-options", "GET", - "/cricinfo/stats", + "/cricbuzz/auction/upcoming/options", List.of(), List.of( - new QueryParam("class", true, "integer", List.of("1", "2", "3", "4", "5", "6", "8", "9", "10", "11", "12", "20", "21", "22", "23")), - new QueryParam("type", true, "string", List.of("batting", "bowling", "fielding", "allround", "fow", "team", "official", "aggregate")), - new QueryParam("player", false, "string", List.of()), - new QueryParam("team", false, "string", List.of()), - new QueryParam("opposition", false, "string", List.of()), - new QueryParam("host", false, "string", List.of()), - new QueryParam("ground", false, "string", List.of()), - new QueryParam("season", false, "string", List.of()), - new QueryParam("span_min", false, "string", List.of()), - new QueryParam("span_max", false, "string", List.of()), - new QueryParam("view", false, "string", List.of("innings", "match", "series", "ground", "host", "opposition", "year", "season")), - new QueryParam("orderby", false, "string", List.of()), - new QueryParam("orderby_desc", false, "boolean", List.of()), - new QueryParam("limit", false, "integer", List.of())), + new QueryParam("tournament", false, "string", List.of()), + new QueryParam("year", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("cricinfo-story", new Operation( - "cricinfo-story", + m.put("cricbuzz-auction-videos", new Operation( + "cricbuzz-auction-videos", "GET", - "/cricinfo/story", + "/cricbuzz/auction/videos", List.of(), List.of( - new QueryParam("url", true, "string", List.of())), + new QueryParam("tournament", true, "string", List.of()), + new QueryParam("year", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("cricinfo-team", new Operation( - "cricinfo-team", + m.put("cricbuzz-match-facts", new Operation( + "cricbuzz-match-facts", "GET", - "/cricinfo/team", + "/cricbuzz/match-facts", List.of(), List.of( - new QueryParam("url", true, "string", List.of())), + new QueryParam("match_url", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("cricinfo-team-schedule", new Operation( - "cricinfo-team-schedule", + m.put("cricbuzz-match-graphs", new Operation( + "cricbuzz-match-graphs", "GET", - "/cricinfo/team/schedule", + "/cricbuzz/match-graphs", List.of(), List.of( - new QueryParam("url", true, "string", List.of())), + new QueryParam("match_url", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("cricinfo-teams", new Operation( - "cricinfo-teams", + m.put("cricbuzz-match-overs", new Operation( + "cricbuzz-match-overs", "GET", - "/cricinfo/teams", - List.of(), + "/cricbuzz/match-overs", List.of(), + List.of( + new QueryParam("match_url", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("cricinfo-venue", new Operation( - "cricinfo-venue", + m.put("cricbuzz-matches", new Operation( + "cricbuzz-matches", "GET", - "/cricinfo/venue", + "/cricbuzz/matches", List.of(), List.of( - new QueryParam("url", true, "string", List.of())), + new QueryParam("status", false, "string", List.of("live", "recent", "upcoming")), + new QueryParam("category", false, "string", List.of("all", "international", "league", "domestic", "women"))), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("cricinfo-venue-matches", new Operation( - "cricinfo-venue-matches", + m.put("cricbuzz-navigation", new Operation( + "cricbuzz-navigation", "GET", - "/cricinfo/venue/matches", + "/cricbuzz/navigation", + List.of(), List.of(), - List.of( - new QueryParam("url", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("cricinfo-videos", new Operation( - "cricinfo-videos", + m.put("cricbuzz-news-story", new Operation( + "cricbuzz-news-story", "GET", - "/cricinfo/videos", + "/cricbuzz/news/story", List.of(), List.of( - new QueryParam("limit", false, "integer", List.of())), + new QueryParam("url", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("ctvnews-article", new Operation( - "ctvnews-article", + m.put("cricbuzz-news-topics", new Operation( + "cricbuzz-news-topics", "GET", - "/ctvnews/article", + "/cricbuzz/news/topics", List.of(), List.of( - new QueryParam("url", true, "string", List.of())), + new QueryParam("q", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("ctvnews-author", new Operation( - "ctvnews-author", + m.put("cricbuzz-rankings", new Operation( + "cricbuzz-rankings", "GET", - "/ctvnews/author", + "/cricbuzz/rankings", List.of(), List.of( - new QueryParam("url", true, "string", List.of())), + new QueryParam("gender", false, "string", List.of("men", "women")), + new QueryParam("type", false, "string", List.of("batting", "bowling", "all-rounder", "teams")), + new QueryParam("format", false, "string", List.of("test", "odi", "t20"))), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("ctvnews-headlines", new Operation( - "ctvnews-headlines", + m.put("cricbuzz-records", new Operation( + "cricbuzz-records", "GET", - "/ctvnews/headlines", + "/cricbuzz/records", List.of(), List.of( - new QueryParam("section", true, "string", List.of("canada", "politics", "world", "business", "health", "entertainment", "lifestyle", "climate-and-environment", "sci-tech", "sports", "opinion", "highly-engaged", "atlantic", "barrie", "calgary", "edmonton", "kitchener", "london", "montreal", "northern-ontario", "ottawa", "regina", "saskatoon", "toronto", "vancouver", "windsor", "winnipeg"))), + new QueryParam("stat", false, "string", List.of("mostRuns", "highestScore", "highestAvg", "highestSr", "mostHundreds", "mostFifties", "mostFours", "mostSixes", "mostNineties", "mostWickets", "lowestAvg", "bestBowlingInnings", "mostFiveWickets", "lowestEcon", "lowestSr")), + new QueryParam("format", false, "string", List.of("test", "odi", "t20")), + new QueryParam("year", false, "string", List.of()), + new QueryParam("team", false, "string", List.of()), + new QueryParam("opponent", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("ctvnews-news", new Operation( - "ctvnews-news", + } + + private static void putOperations11(Map m) { + m.put("cricbuzz-schedule", new Operation( + "cricbuzz-schedule", "GET", - "/ctvnews/news", - List.of(), + "/cricbuzz/schedule", List.of(), + List.of( + new QueryParam("category", false, "string", List.of("all", "international", "league", "domestic", "women")), + new QueryParam("q", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("ctvnews-sections", new Operation( - "ctvnews-sections", + m.put("cricbuzz-scorecard", new Operation( + "cricbuzz-scorecard", "GET", - "/ctvnews/sections", - List.of(), + "/cricbuzz/scorecard", List.of(), + List.of( + new QueryParam("match_url", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("culvers-calendar", new Operation( - "culvers-calendar", + m.put("cricbuzz-series", new Operation( + "cricbuzz-series", "GET", - "/culvers/calendar", + "/cricbuzz/series", List.of(), List.of( - new QueryParam("slug", true, "string", List.of())), + new QueryParam("category", false, "string", List.of("all", "international", "domestic", "league", "women")), + new QueryParam("live_stream", false, "boolean", List.of()), + new QueryParam("q", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("culvers-categories", new Operation( - "culvers-categories", + m.put("cricbuzz-series-stats", new Operation( + "cricbuzz-series-stats", "GET", - "/culvers/categories", - List.of(), + "/cricbuzz/series/stats", List.of(), + List.of( + new QueryParam("series_url", true, "string", List.of()), + new QueryParam("stat", false, "string", List.of("mostRuns", "highestScore", "highestAvg", "highestSr", "mostHundreds", "mostFifties", "mostFours", "mostSixes", "mostNineties", "mostWickets", "lowestAvg", "bestBowlingInnings", "mostFiveWickets", "lowestEcon", "lowestSr")), + new QueryParam("format", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("culvers-directory", new Operation( - "culvers-directory", + m.put("cricbuzz-team-stats", new Operation( + "cricbuzz-team-stats", "GET", - "/culvers/directory", + "/cricbuzz/team/stats", List.of(), List.of( - new QueryParam("page", false, "integer", List.of()), - new QueryParam("page_size", false, "integer", List.of())), + new QueryParam("category", true, "string", List.of("international", "domestic", "league", "women")), + new QueryParam("team_id", true, "integer", List.of()), + new QueryParam("stat", true, "string", List.of()), + new QueryParam("format_id", true, "string", List.of()), + new QueryParam("year", true, "string", List.of()), + new QueryParam("opponent_id", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), - true, + false, List.of())); - m.put("culvers-flavor", new Operation( - "culvers-flavor", + m.put("cricbuzz-team-stats-options", new Operation( + "cricbuzz-team-stats-options", "GET", - "/culvers/flavor", + "/cricbuzz/team/stats/options", List.of(), List.of( - new QueryParam("slug", true, "string", List.of())), + new QueryParam("category", true, "string", List.of("international", "domestic", "league", "women")), + new QueryParam("team_id", true, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("culvers-item", new Operation( - "culvers-item", + m.put("cricbuzz-teams", new Operation( + "cricbuzz-teams", "GET", - "/culvers/item", + "/cricbuzz/teams", List.of(), List.of( - new QueryParam("category", true, "string", List.of()), - new QueryParam("item", true, "string", List.of())), + new QueryParam("category", false, "string", List.of("international", "domestic", "league", "women")), + new QueryParam("q", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("culvers-menu", new Operation( - "culvers-menu", + m.put("cricbuzz-video-categories", new Operation( + "cricbuzz-video-categories", "GET", - "/culvers/menu", + "/cricbuzz/videos/categories", + List.of(), List.of(), - List.of( - new QueryParam("category", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("culvers-store", new Operation( - "culvers-store", + m.put("cricbuzz-video-playlists", new Operation( + "cricbuzz-video-playlists", "GET", - "/culvers/store", + "/cricbuzz/videos/playlists", + List.of(), List.of(), - List.of( - new QueryParam("slug", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("cvs-brands", new Operation( - "cvs-brands", + m.put("cricbuzz-wtc", new Operation( + "cricbuzz-wtc", "GET", - "/cvs/brands", + "/cricbuzz/wtc", List.of(), List.of(), List.of(), @@ -9093,10 +9770,10 @@ private static void putOperations10(Map m) { List.of("ApiKeyAuth"), false, List.of())); - m.put("cvs-categories", new Operation( - "cvs-categories", + m.put("cricinfo-calendar", new Operation( + "cricinfo-calendar", "GET", - "/cvs/categories", + "/cricinfo/calendar", List.of(), List.of(), List.of(), @@ -9105,38 +9782,38 @@ private static void putOperations10(Map m) { List.of("ApiKeyAuth"), false, List.of())); - m.put("cvs-category", new Operation( - "cvs-category", + m.put("cricinfo-commentary", new Operation( + "cricinfo-commentary", "GET", - "/cvs/category", + "/cricinfo/commentary", List.of(), List.of( - new QueryParam("path", true, "string", List.of()), - new QueryParam("page", false, "integer", List.of()), - new QueryParam("sort", false, "string", List.of("pa", "pd", "tr", "rc", "az", "za"))), + new QueryParam("url", true, "string", List.of()), + new QueryParam("limit", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), - true, + false, List.of())); - m.put("cvs-product-ingredients", new Operation( - "cvs-product-ingredients", + m.put("cricinfo-grounds", new Operation( + "cricinfo-grounds", "GET", - "/cvs/product-ingredients/{slug}", - List.of("slug"), + "/cricinfo/grounds", List.of(), + List.of( + new QueryParam("limit", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("cvs-product", new Operation( - "cvs-product", + m.put("cricinfo-live-matches", new Operation( + "cricinfo-live-matches", "GET", - "/cvs/product/{slug}", - List.of("slug"), + "/cricinfo/live", + List.of(), List.of(), List.of(), null, @@ -9144,55 +9821,49 @@ private static void putOperations10(Map m) { List.of("ApiKeyAuth"), false, List.of())); - m.put("cvs-search", new Operation( - "cvs-search", + m.put("cricinfo-match", new Operation( + "cricinfo-match", "GET", - "/cvs/search", + "/cricinfo/match", List.of(), List.of( - new QueryParam("q", true, "string", List.of()), - new QueryParam("page", false, "integer", List.of()), - new QueryParam("sort", false, "string", List.of("pa", "pd", "tr", "rc", "az", "za"))), + new QueryParam("url", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), - true, + false, List.of())); - m.put("cvs-store-locator", new Operation( - "cvs-store-locator", + m.put("cricinfo-news", new Operation( + "cricinfo-news", "GET", - "/cvs/store-locator", + "/cricinfo/news", List.of(), List.of( - new QueryParam("zip", false, "string", List.of()), - new QueryParam("address", false, "string", List.of()), - new QueryParam("latitude", false, "number", List.of()), - new QueryParam("longitude", false, "number", List.of()), - new QueryParam("service", false, "string", List.of("HH_HealthHub_Ind", "MC_MinuteClinic_Ind", "HS_OakStreetHealth_Ind", "IM_Immunization_Ind", "RX_OTCH_Ind", "IM_Covax_Ind", "CL_CovidTest_Ind", "RX_24Hours_Ind", "RX_DriveThru_Ind", "RX_Pharmacy_Ind", "RX_DrugDisposal_Ind", "RS_24Hours_Ind", "PH_Photo_Ind", "RS_AcceptsWic_Ind", "RS_AcceptsSnap_Ind", "GN_UPSAccessPoint_Ind", "RS_BOPIS_Ind", "GN_YMas_Ind", "BT_BeautyIRL_Ind", "GN_SmileDirectClub_Ind"))), + new QueryParam("limit", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("dailycaller-article", new Operation( - "dailycaller-article", + m.put("cricinfo-photos", new Operation( + "cricinfo-photos", "GET", - "/dailycaller/article", + "/cricinfo/photos", List.of(), List.of( - new QueryParam("url", true, "string", List.of())), + new QueryParam("limit", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("dailycaller-author", new Operation( - "dailycaller-author", + m.put("cricinfo-rankings", new Operation( + "cricinfo-rankings", "GET", - "/dailycaller/author", + "/cricinfo/rankings", List.of(), List.of( new QueryParam("url", true, "string", List.of())), @@ -9202,23 +9873,27 @@ private static void putOperations10(Map m) { List.of("ApiKeyAuth"), false, List.of())); - m.put("dailycaller-headlines", new Operation( - "dailycaller-headlines", + m.put("cricinfo-records", new Operation( + "cricinfo-records", "GET", - "/dailycaller/headlines", + "/cricinfo/records", List.of(), List.of( - new QueryParam("section", true, "string", List.of("politics", "us", "world", "national-security", "elections", "business", "energy", "education", "health", "tech", "media", "entertainment", "sports", "guns-and-gear", "investigative-group", "opinion", "analysis", "two-sides", "big-tent-ideas", "patriots", "satire", "video"))), + new QueryParam("record", true, "string", List.of()), + new QueryParam("class", true, "integer", List.of("1", "2", "3", "4", "5", "6", "8", "9", "10", "11", "12", "20", "21", "22", "23")), + new QueryParam("id", false, "string", List.of()), + new QueryParam("type", false, "string", List.of()), + new QueryParam("current", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("dailycaller-news", new Operation( - "dailycaller-news", + m.put("cricinfo-records-index", new Operation( + "cricinfo-records-index", "GET", - "/dailycaller/news", + "/cricinfo/records/index", List.of(), List.of(), List.of(), @@ -9227,24 +9902,492 @@ private static void putOperations10(Map m) { List.of("ApiKeyAuth"), false, List.of())); - m.put("dailycaller-sections", new Operation( - "dailycaller-sections", + m.put("cricinfo-rss", new Operation( + "cricinfo-rss", "GET", - "/dailycaller/sections", - List.of(), + "/cricinfo/rss", List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("dailyexpress-article", new Operation( - "dailyexpress-article", + m.put("cricinfo-scores", new Operation( + "cricinfo-scores", "GET", - "/dailyexpress/article", + "/cricinfo/scores", List.of(), - List.of( + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("cricinfo-series", new Operation( + "cricinfo-series", + "GET", + "/cricinfo/series", + List.of(), + List.of( + new QueryParam("series_id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("cricinfo-squads", new Operation( + "cricinfo-squads", + "GET", + "/cricinfo/squads", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("cricinfo-stats", new Operation( + "cricinfo-stats", + "GET", + "/cricinfo/stats", + List.of(), + List.of( + new QueryParam("class", true, "integer", List.of("1", "2", "3", "4", "5", "6", "8", "9", "10", "11", "12", "20", "21", "22", "23")), + new QueryParam("type", true, "string", List.of("batting", "bowling", "fielding", "allround", "fow", "team", "official", "aggregate")), + new QueryParam("player", false, "string", List.of()), + new QueryParam("team", false, "string", List.of()), + new QueryParam("opposition", false, "string", List.of()), + new QueryParam("host", false, "string", List.of()), + new QueryParam("ground", false, "string", List.of()), + new QueryParam("season", false, "string", List.of()), + new QueryParam("span_min", false, "string", List.of()), + new QueryParam("span_max", false, "string", List.of()), + new QueryParam("view", false, "string", List.of("innings", "match", "series", "ground", "host", "opposition", "year", "season")), + new QueryParam("orderby", false, "string", List.of()), + new QueryParam("orderby_desc", false, "boolean", List.of()), + new QueryParam("limit", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("cricinfo-story", new Operation( + "cricinfo-story", + "GET", + "/cricinfo/story", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("cricinfo-team", new Operation( + "cricinfo-team", + "GET", + "/cricinfo/team", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("cricinfo-team-schedule", new Operation( + "cricinfo-team-schedule", + "GET", + "/cricinfo/team/schedule", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("cricinfo-teams", new Operation( + "cricinfo-teams", + "GET", + "/cricinfo/teams", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("cricinfo-venue", new Operation( + "cricinfo-venue", + "GET", + "/cricinfo/venue", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("cricinfo-venue-matches", new Operation( + "cricinfo-venue-matches", + "GET", + "/cricinfo/venue/matches", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("cricinfo-videos", new Operation( + "cricinfo-videos", + "GET", + "/cricinfo/videos", + List.of(), + List.of( + new QueryParam("limit", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("ctvnews-article", new Operation( + "ctvnews-article", + "GET", + "/ctvnews/article", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("ctvnews-author", new Operation( + "ctvnews-author", + "GET", + "/ctvnews/author", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("ctvnews-headlines", new Operation( + "ctvnews-headlines", + "GET", + "/ctvnews/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of("canada", "politics", "world", "business", "health", "entertainment", "lifestyle", "climate-and-environment", "sci-tech", "sports", "opinion", "highly-engaged", "atlantic", "barrie", "calgary", "edmonton", "kitchener", "london", "montreal", "northern-ontario", "ottawa", "regina", "saskatoon", "toronto", "vancouver", "windsor", "winnipeg"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("ctvnews-news", new Operation( + "ctvnews-news", + "GET", + "/ctvnews/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("ctvnews-sections", new Operation( + "ctvnews-sections", + "GET", + "/ctvnews/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("culvers-calendar", new Operation( + "culvers-calendar", + "GET", + "/culvers/calendar", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("culvers-categories", new Operation( + "culvers-categories", + "GET", + "/culvers/categories", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("culvers-directory", new Operation( + "culvers-directory", + "GET", + "/culvers/directory", + List.of(), + List.of( + new QueryParam("page", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("culvers-flavor", new Operation( + "culvers-flavor", + "GET", + "/culvers/flavor", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("culvers-item", new Operation( + "culvers-item", + "GET", + "/culvers/item", + List.of(), + List.of( + new QueryParam("category", true, "string", List.of()), + new QueryParam("item", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("culvers-menu", new Operation( + "culvers-menu", + "GET", + "/culvers/menu", + List.of(), + List.of( + new QueryParam("category", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("culvers-store", new Operation( + "culvers-store", + "GET", + "/culvers/store", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("cvs-brands", new Operation( + "cvs-brands", + "GET", + "/cvs/brands", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("cvs-categories", new Operation( + "cvs-categories", + "GET", + "/cvs/categories", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("cvs-category", new Operation( + "cvs-category", + "GET", + "/cvs/category", + List.of(), + List.of( + new QueryParam("path", true, "string", List.of()), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("sort", false, "string", List.of("pa", "pd", "tr", "rc", "az", "za"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("cvs-product-ingredients", new Operation( + "cvs-product-ingredients", + "GET", + "/cvs/product-ingredients/{slug}", + List.of("slug"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("cvs-product", new Operation( + "cvs-product", + "GET", + "/cvs/product/{slug}", + List.of("slug"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("cvs-search", new Operation( + "cvs-search", + "GET", + "/cvs/search", + List.of(), + List.of( + new QueryParam("q", true, "string", List.of()), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("sort", false, "string", List.of("pa", "pd", "tr", "rc", "az", "za"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("cvs-store-locator", new Operation( + "cvs-store-locator", + "GET", + "/cvs/store-locator", + List.of(), + List.of( + new QueryParam("zip", false, "string", List.of()), + new QueryParam("address", false, "string", List.of()), + new QueryParam("latitude", false, "number", List.of()), + new QueryParam("longitude", false, "number", List.of()), + new QueryParam("service", false, "string", List.of("HH_HealthHub_Ind", "MC_MinuteClinic_Ind", "HS_OakStreetHealth_Ind", "IM_Immunization_Ind", "RX_OTCH_Ind", "IM_Covax_Ind", "CL_CovidTest_Ind", "RX_24Hours_Ind", "RX_DriveThru_Ind", "RX_Pharmacy_Ind", "RX_DrugDisposal_Ind", "RS_24Hours_Ind", "PH_Photo_Ind", "RS_AcceptsWic_Ind", "RS_AcceptsSnap_Ind", "GN_UPSAccessPoint_Ind", "RS_BOPIS_Ind", "GN_YMas_Ind", "BT_BeautyIRL_Ind", "GN_SmileDirectClub_Ind"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("dailycaller-article", new Operation( + "dailycaller-article", + "GET", + "/dailycaller/article", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("dailycaller-author", new Operation( + "dailycaller-author", + "GET", + "/dailycaller/author", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("dailycaller-headlines", new Operation( + "dailycaller-headlines", + "GET", + "/dailycaller/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of("politics", "us", "world", "national-security", "elections", "business", "energy", "education", "health", "tech", "media", "entertainment", "sports", "guns-and-gear", "investigative-group", "opinion", "analysis", "two-sides", "big-tent-ideas", "patriots", "satire", "video"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("dailycaller-news", new Operation( + "dailycaller-news", + "GET", + "/dailycaller/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("dailycaller-sections", new Operation( + "dailycaller-sections", + "GET", + "/dailycaller/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("dailyexpress-article", new Operation( + "dailyexpress-article", + "GET", + "/dailyexpress/article", + List.of(), + List.of( new QueryParam("url", true, "string", List.of())), List.of(), null, @@ -9290,6 +10433,9 @@ private static void putOperations10(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations12(Map m) { m.put("dailyexpress-sections", new Operation( "dailyexpress-sections", "GET", @@ -9466,9 +10612,6 @@ private static void putOperations10(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations11(Map m) { m.put("dailyrecord-article", new Operation( "dailyrecord-article", "GET", @@ -9674,6 +10817,68 @@ private static void putOperations11(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("datasets-airbnb-hosts-facets", new Operation( + "datasets-airbnb-hosts-facets", + "GET", + "/datasets/airbnb-hosts/facets", + List.of(), + List.of( + new QueryParam("facet", true, "string", List.of("superhost", "identity_verified", "listing_count_band", "hosting_years_band", "interest", "verification", "location")), + new QueryParam("q", false, "string", List.of()), + new QueryParam("location", false, "string", List.of()), + new QueryParam("interest", false, "string", List.of()), + new QueryParam("verification", false, "string", List.of()), + new QueryParam("is_superhost", false, "boolean", List.of()), + new QueryParam("is_home_host", false, "boolean", List.of()), + new QueryParam("identity_verified", false, "boolean", List.of()), + new QueryParam("min_listings", false, "integer", List.of()), + new QueryParam("max_listings", false, "integer", List.of()), + new QueryParam("min_reviews", false, "integer", List.of()), + new QueryParam("min_hosting_years", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("datasets-airbnb-hosts-item", new Operation( + "datasets-airbnb-hosts-item", + "GET", + "/datasets/airbnb-hosts/items/{id}", + List.of("id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("datasets-airbnb-hosts-search", new Operation( + "datasets-airbnb-hosts-search", + "GET", + "/datasets/airbnb-hosts/search", + List.of(), + List.of( + new QueryParam("q", false, "string", List.of()), + new QueryParam("location", false, "string", List.of()), + new QueryParam("interest", false, "string", List.of()), + new QueryParam("verification", false, "string", List.of()), + new QueryParam("is_superhost", false, "boolean", List.of()), + new QueryParam("is_home_host", false, "boolean", List.of()), + new QueryParam("identity_verified", false, "boolean", List.of()), + new QueryParam("min_listings", false, "integer", List.of()), + new QueryParam("max_listings", false, "integer", List.of()), + new QueryParam("min_reviews", false, "integer", List.of()), + new QueryParam("min_hosting_years", false, "integer", List.of()), + new QueryParam("sort", false, "string", List.of("review_count_desc", "listing_count_desc", "hosting_years_desc", "relevance")), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); m.put("datasets-airbnb-markets-facets", new Operation( "datasets-airbnb-markets-facets", "GET", @@ -9753,7 +10958,77 @@ private static void putOperations11(Map m) { List.of("ApiKeyAuth"), true, List.of())); - m.put("datasets-apple-maps-places-facets", new Operation( + m.put("datasets-apple-books-facets", new Operation( + "datasets-apple-books-facets", + "GET", + "/datasets/apple-books/facets", + List.of(), + List.of( + new QueryParam("facet", true, "string", List.of("kind", "genres", "artist_name", "publisher", "series_name", "narrator", "provider", "currency", "discovery_country", "discovery_source", "free")), + new QueryParam("q", false, "string", List.of()), + new QueryParam("kind", false, "string", List.of("book", "audiobook", "author", "series", "audiobook_series")), + new QueryParam("genre", false, "string", List.of()), + new QueryParam("artist", false, "string", List.of()), + new QueryParam("artist_id", false, "string", List.of()), + new QueryParam("publisher", false, "string", List.of()), + new QueryParam("series", false, "string", List.of()), + new QueryParam("narrator", false, "string", List.of()), + new QueryParam("provider", false, "string", List.of()), + new QueryParam("currency", false, "string", List.of()), + new QueryParam("country", false, "string", List.of()), + new QueryParam("discovery_source", false, "string", List.of()), + new QueryParam("free", false, "boolean", List.of()), + new QueryParam("min_rating", false, "number", List.of()), + new QueryParam("min_rating_count", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("datasets-apple-books-item", new Operation( + "datasets-apple-books-item", + "GET", + "/datasets/apple-books/items/{kind}/{id}", + List.of("kind", "id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("datasets-apple-books-search", new Operation( + "datasets-apple-books-search", + "GET", + "/datasets/apple-books/search", + List.of(), + List.of( + new QueryParam("q", false, "string", List.of()), + new QueryParam("kind", false, "string", List.of("book", "audiobook", "author", "series", "audiobook_series")), + new QueryParam("genre", false, "string", List.of()), + new QueryParam("artist", false, "string", List.of()), + new QueryParam("artist_id", false, "string", List.of()), + new QueryParam("publisher", false, "string", List.of()), + new QueryParam("series", false, "string", List.of()), + new QueryParam("narrator", false, "string", List.of()), + new QueryParam("provider", false, "string", List.of()), + new QueryParam("currency", false, "string", List.of()), + new QueryParam("country", false, "string", List.of()), + new QueryParam("discovery_source", false, "string", List.of()), + new QueryParam("free", false, "boolean", List.of()), + new QueryParam("min_rating", false, "number", List.of()), + new QueryParam("min_rating_count", false, "integer", List.of()), + new QueryParam("sort", false, "string", List.of("relevance", "rating_count_desc", "rating_desc", "release_date_desc", "name_asc", "crawled_at_desc")), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("datasets-apple-maps-places-facets", new Operation( "datasets-apple-maps-places-facets", "GET", "/datasets/apple-maps-places/facets", @@ -9893,6 +11168,44 @@ private static void putOperations11(Map m) { List.of("ApiKeyAuth"), true, List.of())); + m.put("datasets-apps-charts-facets", new Operation( + "datasets-apps-charts-facets", + "GET", + "/datasets/apps-charts/facets", + List.of(), + List.of( + new QueryParam("facet", true, "string", List.of("store", "collection", "chart_type", "platform", "category", "country", "app_id", "snapshot_date", "free")), + new QueryParam("q", false, "string", List.of()), + new QueryParam("store", false, "string", List.of("ios", "android")), + new QueryParam("collection", false, "string", List.of()), + new QueryParam("chart_type", false, "string", List.of("top_free", "top_paid", "top_grossing", "new")), + new QueryParam("platform", false, "string", List.of("phone", "pad", "mac")), + new QueryParam("category", false, "string", List.of()), + new QueryParam("country", false, "string", List.of()), + new QueryParam("app_id", false, "string", List.of()), + new QueryParam("date", false, "string", List.of()), + new QueryParam("free", false, "boolean", List.of()), + new QueryParam("sort", false, "string", List.of("rank", "rank_desc", "date_desc")), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("datasets-apps-charts-item", new Operation( + "datasets-apps-charts-item", + "GET", + "/datasets/apps-charts/items/{chart_uid}", + List.of("chart_uid"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("datasets-apps-charts-search", new Operation( "datasets-apps-charts-search", "GET", @@ -9917,6 +11230,39 @@ private static void putOperations11(Map m) { List.of("ApiKeyAuth"), true, List.of())); + m.put("datasets-apps-reviews-facets", new Operation( + "datasets-apps-reviews-facets", + "GET", + "/datasets/apps-reviews/facets", + List.of(), + List.of( + new QueryParam("facet", true, "string", List.of("store", "app_id", "country", "score")), + new QueryParam("q", false, "string", List.of()), + new QueryParam("store", false, "string", List.of("ios", "android")), + new QueryParam("app_id", false, "string", List.of()), + new QueryParam("country", false, "string", List.of()), + new QueryParam("min_score", false, "integer", List.of()), + new QueryParam("sort", false, "string", List.of("recent", "score_desc", "score_asc", "helpful_desc")), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("datasets-apps-reviews-item", new Operation( + "datasets-apps-reviews-item", + "GET", + "/datasets/apps-reviews/items/{review_uid}", + List.of("review_uid"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("datasets-apps-reviews-search", new Operation( "datasets-apps-reviews-search", "GET", @@ -9937,6 +11283,43 @@ private static void putOperations11(Map m) { List.of("ApiKeyAuth"), true, List.of())); + m.put("datasets-apps-facets", new Operation( + "datasets-apps-facets", + "GET", + "/datasets/apps/facets", + List.of(), + List.of( + new QueryParam("facet", true, "string", List.of("store", "platforms", "category", "country", "developer", "free")), + new QueryParam("q", false, "string", List.of()), + new QueryParam("store", false, "string", List.of("ios", "android", "both")), + new QueryParam("platforms", false, "array", List.of("phone", "pad", "tablet", "mac", "tv", "chromebook", "watch", "vision", "xr", "car", "windows")), + new QueryParam("category", false, "string", List.of()), + new QueryParam("country", false, "string", List.of()), + new QueryParam("developer", false, "string", List.of()), + new QueryParam("free", false, "boolean", List.of()), + new QueryParam("min_rating", false, "number", List.of()), + new QueryParam("min_reviews", false, "integer", List.of()), + new QueryParam("sort", false, "string", List.of("relevance", "rating_desc", "reviews_desc", "installs_desc", "updated_at_desc", "popularity_desc")), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("datasets-apps-item", new Operation( + "datasets-apps-item", + "GET", + "/datasets/apps/items/{app_uid}", + List.of("app_uid"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("datasets-apps-search", new Operation( "datasets-apps-search", "GET", @@ -9945,7 +11328,7 @@ private static void putOperations11(Map m) { List.of( new QueryParam("q", false, "string", List.of()), new QueryParam("store", false, "string", List.of("ios", "android", "both")), - new QueryParam("platforms", false, "array", List.of()), + new QueryParam("platforms", false, "array", List.of("phone", "pad", "tablet", "mac", "tv", "chromebook", "watch", "vision", "xr", "car", "windows")), new QueryParam("category", false, "string", List.of()), new QueryParam("country", false, "string", List.of()), new QueryParam("developer", false, "string", List.of()), @@ -10052,6 +11435,9 @@ private static void putOperations11(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations13(Map m) { m.put("datasets-bbb-scamtracker-reports-item", new Operation( "datasets-bbb-scamtracker-reports-item", "GET", @@ -10296,6 +11682,44 @@ private static void putOperations11(Map m) { List.of("ApiKeyAuth"), true, List.of())); + m.put("datasets-creators-facets", new Operation( + "datasets-creators-facets", + "GET", + "/datasets/creators/facets", + List.of(), + List.of( + new QueryParam("facet", true, "string", List.of("niche", "country", "verified")), + new QueryParam("q", false, "string", List.of()), + new QueryParam("handle", false, "string", List.of()), + new QueryParam("niche", false, "string", List.of()), + new QueryParam("country", false, "string", List.of()), + new QueryParam("verified", false, "boolean", List.of()), + new QueryParam("min_followers", false, "integer", List.of()), + new QueryParam("has_email", false, "boolean", List.of()), + new QueryParam("include_inactive", false, "boolean", List.of()), + new QueryParam("sort", false, "string", List.of("followers_desc", "engagement_desc", "engagement_qualified_desc", "likes_desc", "relevance")), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("datasets-creators-item", new Operation( + "datasets-creators-item", + "GET", + "/datasets/creators/items/{creator_uid}", + List.of("creator_uid"), + List.of( + new QueryParam("include_inactive", false, "boolean", List.of()), + new QueryParam("include_email", false, "boolean", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("datasets-creators-search", new Operation( "datasets-creators-search", "GET", @@ -10618,9 +12042,6 @@ private static void putOperations11(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations12(Map m) { m.put("datasets-goodreads-authors-search", new Operation( "datasets-goodreads-authors-search", "GET", @@ -11351,6 +12772,9 @@ private static void putOperations12(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations14(Map m) { m.put("datasets-pitchbook-advisors-item", new Operation( "datasets-pitchbook-advisors-item", "GET", @@ -11847,6 +13271,37 @@ private static void putOperations12(Map m) { List.of("ApiKeyAuth"), true, List.of())); + m.put("datasets-reddit-trending-facets", new Operation( + "datasets-reddit-trending-facets", + "GET", + "/datasets/reddit-trending/facets", + List.of(), + List.of( + new QueryParam("facet", true, "string", List.of("subreddit", "domain", "snapshot_date")), + new QueryParam("q", false, "string", List.of()), + new QueryParam("subreddit", false, "string", List.of()), + new QueryParam("date", false, "string", List.of()), + new QueryParam("sort", false, "string", List.of("rank", "date_desc")), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("datasets-reddit-trending-item", new Operation( + "datasets-reddit-trending-item", + "GET", + "/datasets/reddit-trending/items/{post_uid}", + List.of("post_uid"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("datasets-reddit-trending-search", new Operation( "datasets-reddit-trending-search", "GET", @@ -11905,9 +13360,6 @@ private static void putOperations12(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations13(Map m) { m.put("datasets-sec-companies-insider", new Operation( "datasets-sec-companies-insider", "GET", @@ -12075,6 +13527,35 @@ private static void putOperations13(Map m) { List.of("ApiKeyAuth"), true, List.of())); + m.put("datasets-steam-achievements-facets", new Operation( + "datasets-steam-achievements-facets", + "GET", + "/datasets/steam-achievements/facets", + List.of(), + List.of( + new QueryParam("facet", true, "string", List.of("app_id")), + new QueryParam("app_id", false, "string", List.of()), + new QueryParam("sort", false, "string", List.of("percent_desc", "percent_asc", "rank_asc")), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("datasets-steam-achievements-item", new Operation( + "datasets-steam-achievements-item", + "GET", + "/datasets/steam-achievements/items/{app_id}/{name}", + List.of("app_id", "name"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("datasets-steam-achievements-search", new Operation( "datasets-steam-achievements-search", "GET", @@ -12091,12 +13572,13 @@ private static void putOperations13(Map m) { List.of("ApiKeyAuth"), true, List.of())); - m.put("datasets-steam-charts-search", new Operation( - "datasets-steam-charts-search", + m.put("datasets-steam-charts-facets", new Operation( + "datasets-steam-charts-facets", "GET", - "/datasets/steam-charts/search", + "/datasets/steam-charts/facets", List.of(), List.of( + new QueryParam("facet", true, "string", List.of("chart", "country", "app_id", "snapshot_date")), new QueryParam("q", false, "string", List.of()), new QueryParam("chart", false, "string", List.of("most_played", "concurrent", "top_sellers")), new QueryParam("country", false, "string", List.of()), @@ -12111,61 +13593,93 @@ private static void putOperations13(Map m) { List.of("ApiKeyAuth"), true, List.of())); - m.put("datasets-steam-games-facets", new Operation( - "datasets-steam-games-facets", + m.put("datasets-steam-charts-item", new Operation( + "datasets-steam-charts-item", "GET", - "/datasets/steam-games/facets", + "/datasets/steam-charts/items/{chart_uid}", + List.of("chart_uid"), List.of(), - List.of( - new QueryParam("facet", true, "string", List.of("type", "developer", "publisher", "genres", "categories", "tags", "primary_tag", "price_tier", "review_tier", "owners_bucket", "release_year", "run_id", "is_free", "coming_soon", "platform_windows", "platform_mac", "platform_linux")), - new QueryParam("q", false, "string", List.of()), - new QueryParam("type", false, "string", List.of()), - new QueryParam("developer", false, "string", List.of()), - new QueryParam("publisher", false, "string", List.of()), - new QueryParam("genre", false, "string", List.of()), - new QueryParam("category", false, "string", List.of()), - new QueryParam("tag", false, "string", List.of()), - new QueryParam("price_tier", false, "string", List.of("free", "under5", "5to15", "15to30", "30to60", "over60")), - new QueryParam("review_tier", false, "string", List.of("overwhelmingly_positive", "very_positive", "positive", "mostly_positive", "mixed", "mostly_negative", "negative", "very_negative", "overwhelmingly_negative", "insufficient")), - new QueryParam("owners_bucket", false, "string", List.of()), - new QueryParam("run_id", false, "string", List.of()), - new QueryParam("is_free", false, "boolean", List.of()), - new QueryParam("windows", false, "boolean", List.of()), - new QueryParam("mac", false, "boolean", List.of()), - new QueryParam("linux", false, "boolean", List.of()), - new QueryParam("on_sale", false, "boolean", List.of()), - new QueryParam("min_price_cents", false, "integer", List.of()), - new QueryParam("max_price_cents", false, "integer", List.of()), - new QueryParam("min_owners", false, "integer", List.of()), - new QueryParam("min_positive", false, "integer", List.of()), - new QueryParam("min_total_reviews", false, "integer", List.of()), - new QueryParam("min_review_score", false, "number", List.of()), - new QueryParam("min_metacritic", false, "integer", List.of()), - new QueryParam("min_ccu", false, "integer", List.of()), - new QueryParam("min_release_year", false, "integer", List.of()), - new QueryParam("max_release_year", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("datasets-steam-games-item", new Operation( - "datasets-steam-games-item", + m.put("datasets-steam-charts-search", new Operation( + "datasets-steam-charts-search", "GET", - "/datasets/steam-games/items/{appid}", - List.of("appid"), + "/datasets/steam-charts/search", List.of(), + List.of( + new QueryParam("q", false, "string", List.of()), + new QueryParam("chart", false, "string", List.of("most_played", "concurrent", "top_sellers")), + new QueryParam("country", false, "string", List.of()), + new QueryParam("app_id", false, "string", List.of()), + new QueryParam("date", false, "string", List.of()), + new QueryParam("sort", false, "string", List.of("rank", "rank_desc", "date_desc")), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), - false, + true, List.of())); - m.put("datasets-steam-games-search", new Operation( - "datasets-steam-games-search", + m.put("datasets-steam-games-facets", new Operation( + "datasets-steam-games-facets", "GET", - "/datasets/steam-games/search", + "/datasets/steam-games/facets", + List.of(), + List.of( + new QueryParam("facet", true, "string", List.of("type", "developer", "publisher", "genres", "categories", "tags", "primary_tag", "price_tier", "review_tier", "owners_bucket", "release_year", "run_id", "is_free", "coming_soon", "platform_windows", "platform_mac", "platform_linux")), + new QueryParam("q", false, "string", List.of()), + new QueryParam("type", false, "string", List.of()), + new QueryParam("developer", false, "string", List.of()), + new QueryParam("publisher", false, "string", List.of()), + new QueryParam("genre", false, "string", List.of()), + new QueryParam("category", false, "string", List.of()), + new QueryParam("tag", false, "string", List.of()), + new QueryParam("price_tier", false, "string", List.of("free", "under5", "5to15", "15to30", "30to60", "over60")), + new QueryParam("review_tier", false, "string", List.of("overwhelmingly_positive", "very_positive", "positive", "mostly_positive", "mixed", "mostly_negative", "negative", "very_negative", "overwhelmingly_negative", "insufficient")), + new QueryParam("owners_bucket", false, "string", List.of()), + new QueryParam("run_id", false, "string", List.of()), + new QueryParam("is_free", false, "boolean", List.of()), + new QueryParam("windows", false, "boolean", List.of()), + new QueryParam("mac", false, "boolean", List.of()), + new QueryParam("linux", false, "boolean", List.of()), + new QueryParam("on_sale", false, "boolean", List.of()), + new QueryParam("min_price_cents", false, "integer", List.of()), + new QueryParam("max_price_cents", false, "integer", List.of()), + new QueryParam("min_owners", false, "integer", List.of()), + new QueryParam("min_positive", false, "integer", List.of()), + new QueryParam("min_total_reviews", false, "integer", List.of()), + new QueryParam("min_review_score", false, "number", List.of()), + new QueryParam("min_metacritic", false, "integer", List.of()), + new QueryParam("min_ccu", false, "integer", List.of()), + new QueryParam("min_release_year", false, "integer", List.of()), + new QueryParam("max_release_year", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("datasets-steam-games-item", new Operation( + "datasets-steam-games-item", + "GET", + "/datasets/steam-games/items/{appid}", + List.of("appid"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("datasets-steam-games-search", new Operation( + "datasets-steam-games-search", + "GET", + "/datasets/steam-games/search", List.of(), List.of( new QueryParam("q", false, "string", List.of()), @@ -12203,6 +13717,36 @@ private static void putOperations13(Map m) { List.of("ApiKeyAuth"), true, List.of())); + m.put("datasets-steam-news-facets", new Operation( + "datasets-steam-news-facets", + "GET", + "/datasets/steam-news/facets", + List.of(), + List.of( + new QueryParam("facet", true, "string", List.of("app_id")), + new QueryParam("q", false, "string", List.of()), + new QueryParam("app_id", false, "string", List.of()), + new QueryParam("sort", false, "string", List.of("date_desc", "date_asc")), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("datasets-steam-news-item", new Operation( + "datasets-steam-news-item", + "GET", + "/datasets/steam-news/items/{app_id}/{gid}", + List.of("app_id", "gid"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("datasets-steam-news-search", new Operation( "datasets-steam-news-search", "GET", @@ -12220,6 +13764,36 @@ private static void putOperations13(Map m) { List.of("ApiKeyAuth"), true, List.of())); + m.put("datasets-steam-playercounts-facets", new Operation( + "datasets-steam-playercounts-facets", + "GET", + "/datasets/steam-playercounts/facets", + List.of(), + List.of( + new QueryParam("facet", true, "string", List.of("app_id", "snapshot_date")), + new QueryParam("app_id", false, "string", List.of()), + new QueryParam("date", false, "string", List.of()), + new QueryParam("sort", false, "string", List.of("date_desc", "date_asc", "players_desc")), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("datasets-steam-playercounts-item", new Operation( + "datasets-steam-playercounts-item", + "GET", + "/datasets/steam-playercounts/items/{app_id}/{snapshot_date}", + List.of("app_id", "snapshot_date"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("datasets-steam-playercounts-search", new Operation( "datasets-steam-playercounts-search", "GET", @@ -12237,6 +13811,36 @@ private static void putOperations13(Map m) { List.of("ApiKeyAuth"), true, List.of())); + m.put("datasets-steam-prices-facets", new Operation( + "datasets-steam-prices-facets", + "GET", + "/datasets/steam-prices/facets", + List.of(), + List.of( + new QueryParam("facet", true, "string", List.of("app_id", "snapshot_date")), + new QueryParam("app_id", false, "string", List.of()), + new QueryParam("date", false, "string", List.of()), + new QueryParam("sort", false, "string", List.of("date_desc", "date_asc", "price_asc", "price_desc", "discount_desc")), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("datasets-steam-prices-item", new Operation( + "datasets-steam-prices-item", + "GET", + "/datasets/steam-prices/items/{app_id}/{snapshot_date}", + List.of("app_id", "snapshot_date"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("datasets-steam-prices-search", new Operation( "datasets-steam-prices-search", "GET", @@ -12254,6 +13858,38 @@ private static void putOperations13(Map m) { List.of("ApiKeyAuth"), true, List.of())); + m.put("datasets-steam-reviews-facets", new Operation( + "datasets-steam-reviews-facets", + "GET", + "/datasets/steam-reviews/facets", + List.of(), + List.of( + new QueryParam("facet", true, "string", List.of("app_id", "language", "voted_up")), + new QueryParam("q", false, "string", List.of()), + new QueryParam("app_id", false, "string", List.of()), + new QueryParam("language", false, "string", List.of()), + new QueryParam("voted_up", false, "boolean", List.of()), + new QueryParam("sort", false, "string", List.of("votes_desc", "weighted_desc", "date_desc")), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("datasets-steam-reviews-item", new Operation( + "datasets-steam-reviews-item", + "GET", + "/datasets/steam-reviews/items/{app_id}/{recommendation_id}", + List.of("app_id", "recommendation_id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("datasets-steam-reviews-search", new Operation( "datasets-steam-reviews-search", "GET", @@ -12273,6 +13909,60 @@ private static void putOperations13(Map m) { List.of("ApiKeyAuth"), true, List.of())); + } + + private static void putOperations15(Map m) { + m.put("datasets-substack-facets", new Operation( + "datasets-substack-facets", + "GET", + "/datasets/substack/facets", + List.of(), + List.of( + new QueryParam("facet", true, "string", List.of("kind", "language")), + new QueryParam("q", false, "string", List.of()), + new QueryParam("kind", false, "string", List.of("user", "publication")), + new QueryParam("identifier", false, "string", List.of()), + new QueryParam("language", false, "string", List.of()), + new QueryParam("sort", false, "string", List.of("relevance", "name_asc", "hydrated_at_desc", "hydrated_at_asc")), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("datasets-substack-item", new Operation( + "datasets-substack-item", + "GET", + "/datasets/substack/items/{uid}", + List.of("uid"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("datasets-substack-search", new Operation( + "datasets-substack-search", + "GET", + "/datasets/substack/search", + List.of(), + List.of( + new QueryParam("q", false, "string", List.of()), + new QueryParam("kind", false, "string", List.of("user", "publication")), + new QueryParam("identifier", false, "string", List.of()), + new QueryParam("language", false, "string", List.of()), + new QueryParam("sort", false, "string", List.of("relevance", "name_asc", "hydrated_at_desc", "hydrated_at_asc")), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); m.put("datasets-techstack-facets", new Operation( "datasets-techstack-facets", "GET", @@ -13023,9 +14713,6 @@ private static void putOperations13(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations14(Map m) { m.put("depop-search-sellers", new Operation( "depop-search-sellers", "GET", @@ -13228,6 +14915,245 @@ private static void putOperations14(Map m) { List.of("ApiKeyAuth"), true, List.of())); + } + + private static void putOperations16(Map m) { + m.put("dollartree-blog-article", new Operation( + "dollartree-blog-article", + "GET", + "/dollartree/blog/article", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of()), + new QueryParam("article_id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("dollartree-categories", new Operation( + "dollartree-categories", + "GET", + "/dollartree/categories", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("dollartree-price", new Operation( + "dollartree-price", + "GET", + "/dollartree/price", + List.of(), + List.of( + new QueryParam("product_id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("dollartree-product", new Operation( + "dollartree-product", + "GET", + "/dollartree/product", + List.of(), + List.of( + new QueryParam("product_id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("dollartree-products", new Operation( + "dollartree-products", + "GET", + "/dollartree/products", + List.of(), + List.of( + new QueryParam("product_ids", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("dollartree-search", new Operation( + "dollartree-search", + "GET", + "/dollartree/search", + List.of(), + List.of( + new QueryParam("q", false, "string", List.of()), + new QueryParam("navigation_id", false, "string", List.of()), + new QueryParam("navigation_state", false, "string", List.of()), + new QueryParam("offset", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of("48", "72", "96")), + new QueryParam("sort", false, "string", List.of("product.x_unitPriceNumeric|0", "product.x_unitPriceNumeric|1", "DollarProductType.new|1", "DollarProductType.averageRating|1", "product.displayName|0", "product.displayName|1", "product.casePrice|1", "DollarProductType.numberOfReviews|1"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("dollartree-stock-status", new Operation( + "dollartree-stock-status", + "GET", + "/dollartree/stock-status", + List.of(), + List.of( + new QueryParam("product_id", true, "string", List.of()), + new QueryParam("sku_id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("dollartree-keyword-typeahead", new Operation( + "dollartree-keyword-typeahead", + "GET", + "/dollartree/typeahead/keywords", + List.of(), + List.of( + new QueryParam("q", true, "string", List.of()), + new QueryParam("viewport", false, "string", List.of("xs", "sm", "md", "lg"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("dollartree-product-typeahead", new Operation( + "dollartree-product-typeahead", + "GET", + "/dollartree/typeahead/products", + List.of(), + List.of( + new QueryParam("q", true, "string", List.of()), + new QueryParam("viewport", false, "string", List.of("xs", "sm", "md", "lg"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("domain-dns-record-types", new Operation( + "domain-dns-record-types", + "GET", + "/domain/dns/record-types", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("domain-dns-resolve", new Operation( + "domain-dns-resolve", + "GET", + "/domain/dns/resolve", + List.of(), + List.of( + new QueryParam("name", true, "string", List.of()), + new QueryParam("type", true, "string", List.of("A", "AAAA", "CAA", "CNAME", "DS", "HTTPS", "MX", "NS", "SOA", "TXT"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("domain-rdap-domain", new Operation( + "domain-rdap-domain", + "GET", + "/domain/rdap/domain/{domain}", + List.of("domain"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("domain-rdap-ip", new Operation( + "domain-rdap-ip", + "GET", + "/domain/rdap/ip", + List.of(), + List.of( + new QueryParam("ip", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("domain-robots", new Operation( + "domain-robots", + "GET", + "/domain/robots/{domain}", + List.of("domain"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("domain-site", new Operation( + "domain-site", + "GET", + "/domain/site/{domain}", + List.of("domain"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("domain-subdomains", new Operation( + "domain-subdomains", + "GET", + "/domain/subdomains/{domain}", + List.of("domain"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("domain-wayback-availability", new Operation( + "domain-wayback-availability", + "GET", + "/domain/wayback/availability/{domain}", + List.of("domain"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("domain-wayback-cdx", new Operation( + "domain-wayback-cdx", + "GET", + "/domain/wayback/cdx/{domain}", + List.of("domain"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("dominos-coupons", new Operation( "dominos-coupons", "GET", @@ -13791,6 +15717,9 @@ private static void putOperations14(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations17(Map m) { m.put("draftkings-league-events", new Operation( "draftkings-league-events", "GET", @@ -13828,9 +15757,6 @@ private static void putOperations14(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations15(Map m) { m.put("draftkings-odds", new Operation( "draftkings-odds", "GET", @@ -14597,6 +16523,9 @@ private static void putOperations15(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations18(Map m) { m.put("eonline-author", new Operation( "eonline-author", "GET", @@ -14635,9 +16564,6 @@ private static void putOperations15(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations16(Map m) { m.put("eonline-sections", new Operation( "eonline-sections", "GET", @@ -15346,6 +17272,511 @@ private static void putOperations16(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("faceit-ban-reasons", new Operation( + "faceit-ban-reasons", + "GET", + "/faceit/ban-reasons", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("faceit-banlist", new Operation( + "faceit-banlist", + "GET", + "/faceit/banlist", + List.of(), + List.of( + new QueryParam("size", false, "integer", List.of()), + new QueryParam("cursor", false, "string", List.of()), + new QueryParam("reason", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of("cursor"))); + m.put("faceit-banlist-stats", new Operation( + "faceit-banlist-stats", + "GET", + "/faceit/banlist-stats", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("faceit-best-clips", new Operation( + "faceit-best-clips", + "GET", + "/faceit/best-clips", + List.of(), + List.of( + new QueryParam("game", true, "string", List.of("cs2")), + new QueryParam("user_id", true, "string", List.of()), + new QueryParam("from", true, "string", List.of()), + new QueryParam("to", true, "string", List.of()), + new QueryParam("limit", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + } + + private static void putOperations19(Map m) { + m.put("faceit-championship", new Operation( + "faceit-championship", + "GET", + "/faceit/championship", + List.of(), + List.of( + new QueryParam("id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("faceit-championship-bracket", new Operation( + "faceit-championship-bracket", + "GET", + "/faceit/championship-bracket", + List.of(), + List.of( + new QueryParam("id", true, "string", List.of()), + new QueryParam("group", true, "integer", List.of()), + new QueryParam("round", true, "integer", List.of()), + new QueryParam("start", false, "integer", List.of()), + new QueryParam("end", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of("start"))); + m.put("faceit-championship-participants", new Operation( + "faceit-championship-participants", + "GET", + "/faceit/championship-participants", + List.of(), + List.of( + new QueryParam("id", true, "string", List.of()), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("faceit-championship-search", new Operation( + "faceit-championship-search", + "GET", + "/faceit/championship-search", + List.of(), + List.of( + new QueryParam("entity_type", false, "string", List.of()), + new QueryParam("type", false, "string", List.of()), + new QueryParam("status", false, "string", List.of("ONGOING", "UPCOMING", "FINISHED")), + new QueryParam("subtype", false, "string", List.of()), + new QueryParam("country", false, "string", List.of()), + new QueryParam("game", false, "string", List.of("cs2", "csgo", "ow2", "valorant", "pubg", "tf2", "krunker", "pubgmobile", "apex", "fortnite", "wow", "brawl_stars", "insidia", "dota2", "hearthstone", "wildrift", "clash_royale", "smite", "lol_NA", "lol_EUW", "lol_EUN", "overwatch_EU", "wot_EU", "wot_RU", "rainbow_6", "csdz", "battalion")), + new QueryParam("has_drops", false, "boolean", List.of()), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("faceit-clip", new Operation( + "faceit-clip", + "GET", + "/faceit/clip", + List.of(), + List.of( + new QueryParam("id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("faceit-clips", new Operation( + "faceit-clips", + "GET", + "/faceit/clips", + List.of(), + List.of( + new QueryParam("game", true, "string", List.of("cs2")), + new QueryParam("user_id", true, "string", List.of()), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("faceit-competition-matches", new Operation( + "faceit-competition-matches", + "GET", + "/faceit/competition-matches", + List.of(), + List.of( + new QueryParam("id", true, "string", List.of()), + new QueryParam("type", true, "string", List.of()), + new QueryParam("player_id", false, "string", List.of()), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("size", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("faceit-fpl", new Operation( + "faceit-fpl", + "GET", + "/faceit/fpl", + List.of(), + List.of( + new QueryParam("game", false, "string", List.of("cs2", "csgo", "ow2", "valorant", "pubg", "tf2", "krunker", "pubgmobile", "apex", "fortnite", "wow", "brawl_stars", "insidia", "dota2", "hearthstone", "wildrift", "clash_royale", "smite", "lol_NA", "lol_EUW", "lol_EUN", "overwatch_EU", "wot_EU", "wot_RU", "rainbow_6", "csdz", "battalion")), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("faceit-game-modes", new Operation( + "faceit-game-modes", + "GET", + "/faceit/game-modes", + List.of(), + List.of( + new QueryParam("game", true, "string", List.of("cs2", "csgo", "ow2", "valorant", "pubg", "tf2", "krunker", "pubgmobile", "apex", "fortnite", "wow", "brawl_stars", "insidia", "dota2", "hearthstone", "wildrift", "clash_royale", "smite", "lol_NA", "lol_EUW", "lol_EUN", "overwatch_EU", "wot_EU", "wot_RU", "rainbow_6", "csdz", "battalion")), + new QueryParam("region", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("faceit-games", new Operation( + "faceit-games", + "GET", + "/faceit/games", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("faceit-hub", new Operation( + "faceit-hub", + "GET", + "/faceit/hub", + List.of(), + List.of( + new QueryParam("id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("faceit-hub-categories", new Operation( + "faceit-hub-categories", + "GET", + "/faceit/hub-categories", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("faceit-hub-memberships", new Operation( + "faceit-hub-memberships", + "GET", + "/faceit/hub-memberships", + List.of(), + List.of( + new QueryParam("user_id", true, "string", List.of()), + new QueryParam("category", false, "string", List.of("community", "chat", "ihl")), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("faceit-hubs", new Operation( + "faceit-hubs", + "GET", + "/faceit/hubs", + List.of(), + List.of( + new QueryParam("ids", true, "array", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("faceit-hubs-detailed", new Operation( + "faceit-hubs-detailed", + "GET", + "/faceit/hubs-detailed", + List.of(), + List.of( + new QueryParam("ids", true, "array", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("faceit-leaderboard", new Operation( + "faceit-leaderboard", + "GET", + "/faceit/leaderboard", + List.of(), + List.of( + new QueryParam("game", true, "string", List.of("cs2", "csgo", "ow2", "valorant", "pubg", "tf2", "krunker", "pubgmobile", "apex", "fortnite", "wow", "brawl_stars", "insidia", "dota2", "hearthstone", "wildrift", "clash_royale", "smite", "lol_NA", "lol_EUW", "lol_EUN", "overwatch_EU", "wot_EU", "wot_RU", "rainbow_6", "csdz", "battalion")), + new QueryParam("region", true, "string", List.of()), + new QueryParam("season", false, "integer", List.of()), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("faceit-leaderboard-detail", new Operation( + "faceit-leaderboard-detail", + "GET", + "/faceit/leaderboard-detail", + List.of(), + List.of( + new QueryParam("id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("faceit-leaderboard-statuses", new Operation( + "faceit-leaderboard-statuses", + "GET", + "/faceit/leaderboard-statuses", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("faceit-maps", new Operation( + "faceit-maps", + "GET", + "/faceit/maps", + List.of(), + List.of( + new QueryParam("game", true, "string", List.of("cs2", "csgo", "ow2", "valorant", "pubg", "tf2", "krunker", "pubgmobile", "apex", "fortnite", "wow", "brawl_stars", "insidia", "dota2", "hearthstone", "wildrift", "clash_royale", "smite", "lol_NA", "lol_EUW", "lol_EUN", "overwatch_EU", "wot_EU", "wot_RU", "rainbow_6", "csdz", "battalion"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("faceit-match-clips", new Operation( + "faceit-match-clips", + "GET", + "/faceit/match-clips", + List.of(), + List.of( + new QueryParam("game", true, "string", List.of("cs2")), + new QueryParam("match_id", true, "string", List.of()), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("faceit-organizer", new Operation( + "faceit-organizer", + "GET", + "/faceit/organizer", + List.of(), + List.of( + new QueryParam("id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("faceit-player", new Operation( + "faceit-player", + "GET", + "/faceit/player", + List.of(), + List.of( + new QueryParam("nickname", false, "string", List.of()), + new QueryParam("user_id", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("faceit-player-rank", new Operation( + "faceit-player-rank", + "GET", + "/faceit/player-rank", + List.of(), + List.of( + new QueryParam("game", true, "string", List.of("cs2", "csgo", "ow2", "valorant", "pubg", "tf2", "krunker", "pubgmobile", "apex", "fortnite", "wow", "brawl_stars", "insidia", "dota2", "hearthstone", "wildrift", "clash_royale", "smite", "lol_NA", "lol_EUW", "lol_EUN", "overwatch_EU", "wot_EU", "wot_RU", "rainbow_6", "csdz", "battalion")), + new QueryParam("region", true, "string", List.of()), + new QueryParam("nickname", false, "string", List.of()), + new QueryParam("user_id", false, "string", List.of()), + new QueryParam("season", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("faceit-regions", new Operation( + "faceit-regions", + "GET", + "/faceit/regions", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("faceit-rule", new Operation( + "faceit-rule", + "GET", + "/faceit/rule", + List.of(), + List.of( + new QueryParam("id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("faceit-rules", new Operation( + "faceit-rules", + "GET", + "/faceit/rules", + List.of(), + List.of( + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("faceit-skill-levels", new Operation( + "faceit-skill-levels", + "GET", + "/faceit/skill-levels", + List.of(), + List.of( + new QueryParam("game", true, "string", List.of("cs2", "csgo", "ow2", "valorant", "pubg", "tf2", "krunker", "pubgmobile", "apex", "fortnite", "wow", "brawl_stars", "insidia", "dota2", "hearthstone", "wildrift", "clash_royale", "smite", "lol_NA", "lol_EUW", "lol_EUN", "overwatch_EU", "wot_EU", "wot_RU", "rainbow_6", "csdz", "battalion"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("faceit-standings", new Operation( + "faceit-standings", + "GET", + "/faceit/standings", + List.of(), + List.of( + new QueryParam("entity_id", true, "string", List.of()), + new QueryParam("group", true, "integer", List.of()), + new QueryParam("round", true, "string", List.of()), + new QueryParam("segment", false, "integer", List.of()), + new QueryParam("match", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("faceit-team", new Operation( + "faceit-team", + "GET", + "/faceit/team", + List.of(), + List.of( + new QueryParam("id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("faceit-tournaments-past", new Operation( + "faceit-tournaments-past", + "GET", + "/faceit/tournaments-past", + List.of(), + List.of( + new QueryParam("nickname", true, "string", List.of()), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("faceit-user-skills", new Operation( + "faceit-user-skills", + "GET", + "/faceit/user-skills", + List.of(), + List.of( + new QueryParam("user_ids", true, "array", List.of()), + new QueryParam("game", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("fanatics-categories", new Operation( "fanatics-categories", "GET", @@ -15427,6 +17858,31 @@ private static void putOperations16(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("fanaticscollect-instant-pack-release", new Operation( + "fanaticscollect-instant-pack-release", + "GET", + "/fanaticscollect/instant-packs/release", + List.of(), + List.of( + new QueryParam("checklist_id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fanaticscollect-instant-pack-releases", new Operation( + "fanaticscollect-instant-pack-releases", + "GET", + "/fanaticscollect/instant-packs/releases", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("fanaticscollect-instant-rips-categories", new Operation( "fanaticscollect-instant-rips-categories", "GET", @@ -15439,9 +17895,59 @@ private static void putOperations16(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations17(Map m) { + m.put("fanaticscollect-instant-rips-pack-categories", new Operation( + "fanaticscollect-instant-rips-pack-categories", + "GET", + "/fanaticscollect/instant-rips/pack-categories", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fanaticscollect-instant-rips-pack-checklist", new Operation( + "fanaticscollect-instant-rips-pack-checklist", + "GET", + "/fanaticscollect/instant-rips/pack-checklist", + List.of(), + List.of( + new QueryParam("checklist_id", true, "string", List.of()), + new QueryParam("tier", false, "string", List.of("BASE", "CHASE", "GRAIL")), + new QueryParam("cursor", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of("cursor"))); + m.put("fanaticscollect-instant-rips-packs", new Operation( + "fanaticscollect-instant-rips-packs", + "GET", + "/fanaticscollect/instant-rips/packs", + List.of(), + List.of( + new QueryParam("category_id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fanaticscollect-recently-ripped", new Operation( + "fanaticscollect-recently-ripped", + "GET", + "/fanaticscollect/instant-rips/recently-ripped", + List.of(), + List.of( + new QueryParam("checklist_id", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("fanaticscollect-listing", new Operation( "fanaticscollect-listing", "GET", @@ -15455,6 +17961,34 @@ private static void putOperations17(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("fanaticscollect-newsroom", new Operation( + "fanaticscollect-newsroom", + "GET", + "/fanaticscollect/newsroom", + List.of(), + List.of( + new QueryParam("page", false, "integer", List.of()), + new QueryParam("category", false, "string", List.of()), + new QueryParam("tags", false, "string", List.of()), + new QueryParam("sort_by", false, "string", List.of("newest", "oldest"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("fanaticscollect-newsroom-filters", new Operation( + "fanaticscollect-newsroom-filters", + "GET", + "/fanaticscollect/newsroom/filters", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("fanaticscollect-search", new Operation( "fanaticscollect-search", "GET", @@ -15657,6 +18191,9 @@ private static void putOperations17(Map m) { List.of("ApiKeyAuth"), true, List.of())); + } + + private static void putOperations20(Map m) { m.put("fanduel-casino-game", new Operation( "fanduel-casino-game", "GET", @@ -16358,9 +18895,6 @@ private static void putOperations17(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations18(Map m) { m.put("fanduel-sportsbook-live-scores", new Operation( "fanduel-sportsbook-live-scores", "GET", @@ -16582,6 +19116,9 @@ private static void putOperations18(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations21(Map m) { m.put("fanduel-sportsbook-standings", new Operation( "fanduel-sportsbook-standings", "GET", @@ -17154,6 +19691,95 @@ private static void putOperations18(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("fever-cities", new Operation( + "fever-cities", + "GET", + "/fever/cities", + List.of(), + List.of( + new QueryParam("query", true, "string", List.of()), + new QueryParam("locale", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fever-feed", new Operation( + "fever-feed", + "GET", + "/fever/feed", + List.of(), + List.of( + new QueryParam("city_code", true, "string", List.of()), + new QueryParam("pill_id", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fever-filters", new Operation( + "fever-filters", + "GET", + "/fever/filters", + List.of(), + List.of( + new QueryParam("city_code", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fever-plan", new Operation( + "fever-plan", + "GET", + "/fever/plan", + List.of(), + List.of( + new QueryParam("plan_id", true, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fever-plans", new Operation( + "fever-plans", + "GET", + "/fever/plans", + List.of(), + List.of( + new QueryParam("city_code", true, "string", List.of()), + new QueryParam("query", false, "string", List.of()), + new QueryParam("locale", false, "string", List.of()), + new QueryParam("latitude", false, "number", List.of()), + new QueryParam("longitude", false, "number", List.of()), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of()), + new QueryParam("whatplanfilter_id", false, "string", List.of()), + new QueryParam("date_start", false, "integer", List.of()), + new QueryParam("date_end", false, "integer", List.of()), + new QueryParam("sort_type", false, "string", List.of("popularity", "price", "rating", "closest_session", "distance", "random", "id"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("fever-top-cities", new Operation( + "fever-top-cities", + "GET", + "/fever/top-cities", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("fiveguys-directory", new Operation( "fiveguys-directory", "GET", @@ -17211,9 +19837,6 @@ private static void putOperations18(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations19(Map m) { m.put("fiveguys-nearby", new Operation( "fiveguys-nearby", "GET", @@ -17329,6 +19952,9 @@ private static void putOperations19(Map m) { List.of("ApiKeyAuth"), true, List.of())); + } + + private static void putOperations22(Map m) { m.put("fiverr-seller", new Operation( "fiverr-seller", "GET", @@ -17407,6 +20033,19 @@ private static void putOperations19(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("flashscore-match-commentary", new Operation( + "flashscore-match-commentary", + "GET", + "/flashscore/match-commentary", + List.of(), + List.of( + new QueryParam("id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("flashscore-match-darts", new Operation( "flashscore-match-darts", "GET", @@ -17446,6 +20085,19 @@ private static void putOperations19(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("flashscore-match-incidents", new Operation( + "flashscore-match-incidents", + "GET", + "/flashscore/match-incidents", + List.of(), + List.of( + new QueryParam("id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("flashscore-match-info", new Operation( "flashscore-match-info", "GET", @@ -17569,6 +20221,19 @@ private static void putOperations19(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("flashscore-match-prematch-scorers", new Operation( + "flashscore-match-prematch-scorers", + "GET", + "/flashscore/match-prematch-scorers", + List.of(), + List.of( + new QueryParam("id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("flashscore-match-report", new Operation( "flashscore-match-report", "GET", @@ -17997,6 +20662,20 @@ private static void putOperations19(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("flashscore-tournament-draw", new Operation( + "flashscore-tournament-draw", + "GET", + "/flashscore/tournament-draw", + List.of(), + List.of( + new QueryParam("tournament_id", true, "string", List.of()), + new QueryParam("stage_id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("flashscore-tournament-events", new Operation( "flashscore-tournament-events", "GET", @@ -18026,9 +20705,6 @@ private static void putOperations19(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations20(Map m) { m.put("flashscore-tournament-seasons", new Operation( "flashscore-tournament-seasons", "GET", @@ -18069,6 +20745,82 @@ private static void putOperations20(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("flickreels-classify", new Operation( + "flickreels-classify", + "GET", + "/flickreels/classify", + List.of(), + List.of( + new QueryParam("tag_id", true, "integer", List.of()), + new QueryParam("slug", true, "string", List.of()), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("language", false, "string", List.of("en", "ja", "ko", "tc", "es", "id", "th", "de", "pt", "fr"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + } + + private static void putOperations23(Map m) { + m.put("flickreels-genres", new Operation( + "flickreels-genres", + "GET", + "/flickreels/genres", + List.of(), + List.of( + new QueryParam("language", false, "string", List.of("en", "ja", "ko", "tc", "es", "id", "th", "de", "pt", "fr"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("flickreels-home", new Operation( + "flickreels-home", + "GET", + "/flickreels/home", + List.of(), + List.of( + new QueryParam("language", false, "string", List.of("en", "ja", "ko", "tc", "es", "id", "th", "de", "pt", "fr"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("flickreels-movie", new Operation( + "flickreels-movie", + "GET", + "/flickreels/movie", + List.of(), + List.of( + new QueryParam("title_id", true, "integer", List.of()), + new QueryParam("slug", true, "string", List.of()), + new QueryParam("language", false, "string", List.of("en", "ja", "ko", "tc", "es", "id", "th", "de", "pt", "fr"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("flickreels-shelf", new Operation( + "flickreels-shelf", + "GET", + "/flickreels/shelf", + List.of(), + List.of( + new QueryParam("shelf_id", true, "integer", List.of()), + new QueryParam("slug", false, "string", List.of()), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("language", false, "string", List.of("en", "ja", "ko", "tc", "es", "id", "th", "de", "pt", "fr"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); m.put("foodpanda-restaurant", new Operation( "foodpanda-restaurant", "GET", @@ -18395,174 +21147,142 @@ private static void putOperations20(Map m) { List.of("ApiKeyAuth"), true, List.of())); - m.put("fortune-article", new Operation( - "fortune-article", + m.put("formula1-driver", new Operation( + "formula1-driver", "GET", - "/fortune/article", + "/formula1/driver", List.of(), List.of( - new QueryParam("url", true, "string", List.of())), + new QueryParam("driver_slug", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fortune-author", new Operation( - "fortune-author", + m.put("formula1-driver-grid", new Operation( + "formula1-driver-grid", "GET", - "/fortune/author", - List.of(), - List.of( - new QueryParam("slug", false, "string", List.of()), - new QueryParam("url", false, "string", List.of()), - new QueryParam("page", false, "integer", List.of())), + "/formula1/driver-grid", List.of(), - null, - false, - List.of("ApiKeyAuth"), - true, - List.of())); - m.put("fortune-companies", new Operation( - "fortune-companies", - "GET", - "/fortune/companies", List.of(), - List.of( - new QueryParam("search", false, "string", List.of()), - new QueryParam("country", false, "string", List.of()), - new QueryParam("industry", false, "string", List.of()), - new QueryParam("ranking", false, "string", List.of()), - new QueryParam("year", false, "string", List.of()), - new QueryParam("min_revenue", false, "integer", List.of()), - new QueryParam("max_revenue", false, "integer", List.of()), - new QueryParam("min_employees", false, "integer", List.of()), - new QueryParam("max_employees", false, "integer", List.of()), - new QueryParam("page", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), - true, + false, List.of())); - m.put("fortune-company-filters", new Operation( - "fortune-company-filters", + m.put("formula1-driver-season-results", new Operation( + "formula1-driver-season-results", "GET", - "/fortune/companies/filters", - List.of(), + "/formula1/driver-season-results", List.of(), + List.of( + new QueryParam("driver_code", true, "string", List.of()), + new QueryParam("season", false, "integer", List.of()), + new QueryParam("driver_slug", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fortune-company", new Operation( - "fortune-company", + m.put("formula1-driver-standings", new Operation( + "formula1-driver-standings", "GET", - "/fortune/company", + "/formula1/driver-standings", List.of(), List.of( - new QueryParam("slug", false, "string", List.of()), - new QueryParam("url", false, "string", List.of())), + new QueryParam("season", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fortune-headlines", new Operation( - "fortune-headlines", + m.put("formula1-filters", new Operation( + "formula1-filters", "GET", - "/fortune/headlines", + "/formula1/filters", + List.of(), List.of(), - List.of( - new QueryParam("section", true, "string", List.of("latest", "fortune-500", "finance", "tech", "leadership", "lifestyle", "economy", "newsletters", "success", "magazine", "real-estate", "investing", "asia", "politics", "artificial-intelligence", "workplace-culture", "personal-finance", "middle-east", "big-tech", "travel-and-leisure", "c-suite", "crypto", "health", "commentary", "retail", "mpw", "features", "conferences", "europe", "environment", "arts-and-entertainment", "cybersecurity", "global", "innovation", "news", "north-america"))), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fortune-news", new Operation( - "fortune-news", + m.put("formula1-json-awards", new Operation( + "formula1-json-awards", "GET", - "/fortune/news", - List.of(), + "/formula1/json/awards", List.of(), + List.of( + new QueryParam("season", true, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fortune-ranking", new Operation( - "fortune-ranking", + m.put("formula1-json-constructors", new Operation( + "formula1-json-constructors", "GET", - "/fortune/ranking", + "/formula1/json/constructors", List.of(), List.of( - new QueryParam("list", false, "string", List.of()), - new QueryParam("year", false, "string", List.of()), - new QueryParam("search", false, "string", List.of()), - new QueryParam("filter", false, "array", List.of()), - new QueryParam("sector", false, "string", List.of()), - new QueryParam("industry", false, "string", List.of()), - new QueryParam("state", false, "string", List.of()), - new QueryParam("profitable", false, "string", List.of()), - new QueryParam("sort_by", false, "string", List.of()), - new QueryParam("sort_order", false, "string", List.of("asc", "desc")), - new QueryParam("offset", false, "integer", List.of()), - new QueryParam("limit", false, "integer", List.of())), + new QueryParam("season", true, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), - true, + false, List.of())); - m.put("fortune-ranking-filters", new Operation( - "fortune-ranking-filters", + m.put("formula1-json-driver-assembly", new Operation( + "formula1-json-driver-assembly", "GET", - "/fortune/ranking/filters", + "/formula1/json/driver-assembly", List.of(), List.of( - new QueryParam("list", false, "string", List.of()), - new QueryParam("year", false, "string", List.of())), + new QueryParam("reference", false, "string", List.of()), + new QueryParam("identifier", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fortune-ranking-lists", new Operation( - "fortune-ranking-lists", + m.put("formula1-json-drivers", new Operation( + "formula1-json-drivers", "GET", - "/fortune/ranking/lists", - List.of(), + "/formula1/json/drivers", List.of(), + List.of( + new QueryParam("season", true, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fortune-ranking-years", new Operation( - "fortune-ranking-years", + m.put("formula1-json-editorial", new Operation( + "formula1-json-editorial", "GET", - "/fortune/ranking/years", + "/formula1/json/editorial", List.of(), List.of( - new QueryParam("list", false, "string", List.of())), + new QueryParam("resource", true, "string", List.of("events", "driver-listing", "constructor-listing", "race-calendar", "results-archive")), + new QueryParam("season", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fortune-sections", new Operation( - "fortune-sections", + m.put("formula1-json-event-tracker", new Operation( + "formula1-json-event-tracker", "GET", - "/fortune/sections", + "/formula1/json/event-tracker", List.of(), List.of(), List.of(), @@ -18571,289 +21291,294 @@ private static void putOperations20(Map m) { List.of("ApiKeyAuth"), false, List.of())); - m.put("fotmob-audio-matches", new Operation( - "fotmob-audio-matches", + m.put("formula1-json-meeting-datasets", new Operation( + "formula1-json-meeting-datasets", "GET", - "/fotmob/audio-matches", - List.of(), + "/formula1/json/meeting-datasets", List.of(), + List.of( + new QueryParam("season", true, "integer", List.of()), + new QueryParam("meeting", true, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fotmob-fifa-ranking-periods", new Operation( - "fotmob-fifa-ranking-periods", + m.put("formula1-json-meetings", new Operation( + "formula1-json-meetings", "GET", - "/fotmob/fifa-ranking-periods", + "/formula1/json/meetings", List.of(), List.of( - new QueryParam("gender", true, "string", List.of("men", "women"))), + new QueryParam("season", true, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fotmob-fifa-rankings", new Operation( - "fotmob-fifa-rankings", + m.put("formula1-json-race-assembly", new Operation( + "formula1-json-race-assembly", "GET", - "/fotmob/fifa-rankings", + "/formula1/json/race-assembly", List.of(), List.of( - new QueryParam("gender", true, "string", List.of("men", "women")), - new QueryParam("period_id", true, "string", List.of())), + new QueryParam("meeting", false, "integer", List.of()), + new QueryParam("season", false, "integer", List.of()), + new QueryParam("identifier", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fotmob-latest-news", new Operation( - "fotmob-latest-news", + m.put("formula1-json-results", new Operation( + "formula1-json-results", "GET", - "/fotmob/latest-news", + "/formula1/json/results", List.of(), List.of( - new QueryParam("start_index", false, "integer", List.of())), + new QueryParam("meeting", true, "integer", List.of()), + new QueryParam("dataset", true, "string", List.of("race", "qualifying", "starting-grid", "pitstops", "fastestlaps", "sprint", "sprint-grid", "sprint-shootout", "practice")), + new QueryParam("session", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fotmob-league", new Operation( - "fotmob-league", + m.put("formula1-json-season-award", new Operation( + "formula1-json-season-award", "GET", - "/fotmob/league", + "/formula1/json/season-award", List.of(), List.of( - new QueryParam("league_id", true, "integer", List.of()), - new QueryParam("season", false, "string", List.of()), - new QueryParam("shotmap", false, "boolean", List.of())), + new QueryParam("season", true, "integer", List.of()), + new QueryParam("award", true, "string", List.of("fastest-laps", "pole-positions", "fastest-pit-stops", "driver-of-the-day"))), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fotmob-leagues", new Operation( - "fotmob-leagues", + m.put("formula1-json-team-assembly", new Operation( + "formula1-json-team-assembly", "GET", - "/fotmob/leagues", - List.of(), + "/formula1/json/team-assembly", List.of(), + List.of( + new QueryParam("key", false, "string", List.of()), + new QueryParam("identifier", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fotmob-lineup-builder-players", new Operation( - "fotmob-lineup-builder-players", + m.put("formula1-meetings", new Operation( + "formula1-meetings", "GET", - "/fotmob/lineup-builder-players", + "/formula1/meetings", List.of(), List.of( - new QueryParam("player_ids", true, "string", List.of())), + new QueryParam("season", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fotmob-lineup-builder-team", new Operation( - "fotmob-lineup-builder-team", + m.put("formula1-race-calendar", new Operation( + "formula1-race-calendar", "GET", - "/fotmob/lineup-builder-team", + "/formula1/race-calendar", List.of(), List.of( - new QueryParam("team_id", true, "string", List.of())), + new QueryParam("season", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fotmob-match", new Operation( - "fotmob-match", + m.put("formula1-race-hub", new Operation( + "formula1-race-hub", "GET", - "/fotmob/match", + "/formula1/race-hub", List.of(), List.of( - new QueryParam("id", true, "string", List.of())), + new QueryParam("event_slug", true, "string", List.of()), + new QueryParam("season", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fotmob-match-media", new Operation( - "fotmob-match-media", + m.put("formula1-season-awards", new Operation( + "formula1-season-awards", "GET", - "/fotmob/match-media", + "/formula1/season-awards", List.of(), List.of( - new QueryParam("id", true, "string", List.of())), + new QueryParam("season", false, "integer", List.of()), + new QueryParam("award", true, "string", List.of("fastest-laps", "pole-positions", "fastest-pit-stops", "driver-of-the-day"))), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fotmob-matches", new Operation( - "fotmob-matches", + m.put("formula1-season-results", new Operation( + "formula1-season-results", "GET", - "/fotmob/matches", + "/formula1/season-results", List.of(), List.of( - new QueryParam("date", true, "string", List.of()), - new QueryParam("timezone", false, "string", List.of())), + new QueryParam("season", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fotmob-news", new Operation( - "fotmob-news", + m.put("formula1-seasons", new Operation( + "formula1-seasons", "GET", - "/fotmob/news", + "/formula1/seasons", + List.of(), List.of(), - List.of( - new QueryParam("league_id", true, "string", List.of()), - new QueryParam("start_index", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fotmob-news-article", new Operation( - "fotmob-news-article", + m.put("formula1-session-results", new Operation( + "formula1-session-results", "GET", - "/fotmob/news-article", + "/formula1/session-results", List.of(), List.of( - new QueryParam("id", true, "string", List.of())), + new QueryParam("meeting_id", true, "integer", List.of()), + new QueryParam("session", true, "string", List.of("race-result", "qualifying", "starting-grid", "practice-1", "practice-2", "practice-3", "pit-stop-summary", "fastest-laps", "sprint-results", "sprint-grid", "sprint-qualifying")), + new QueryParam("season", false, "integer", List.of()), + new QueryParam("meeting_slug", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fotmob-player", new Operation( - "fotmob-player", + m.put("formula1-team", new Operation( + "formula1-team", "GET", - "/fotmob/player", + "/formula1/team", List.of(), List.of( - new QueryParam("id", true, "string", List.of()), - new QueryParam("include_market_values", false, "boolean", List.of())), + new QueryParam("team_slug", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fotmob-player-match-stats", new Operation( - "fotmob-player-match-stats", + m.put("formula1-team-grid", new Operation( + "formula1-team-grid", "GET", - "/fotmob/player-match-stats", + "/formula1/team-grid", + List.of(), List.of(), - List.of( - new QueryParam("player_id", true, "string", List.of()), - new QueryParam("match_id", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fotmob-player-matches", new Operation( - "fotmob-player-matches", + m.put("formula1-team-season-results", new Operation( + "formula1-team-season-results", "GET", - "/fotmob/player-matches", + "/formula1/team-season-results", List.of(), List.of( - new QueryParam("player_id", true, "string", List.of()), - new QueryParam("league_id", false, "string", List.of()), - new QueryParam("team_id", false, "string", List.of()), - new QueryParam("before", false, "string", List.of())), + new QueryParam("team", true, "string", List.of()), + new QueryParam("season", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fotmob-player-stats", new Operation( - "fotmob-player-stats", + m.put("formula1-team-standings", new Operation( + "formula1-team-standings", "GET", - "/fotmob/player-stats", + "/formula1/team-standings", List.of(), List.of( - new QueryParam("player_id", true, "string", List.of()), - new QueryParam("season_id", true, "string", List.of())), + new QueryParam("season", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fotmob-search", new Operation( - "fotmob-search", + m.put("fortune-article", new Operation( + "fortune-article", "GET", - "/fotmob/search", + "/fortune/article", List.of(), List.of( - new QueryParam("term", true, "string", List.of())), + new QueryParam("url", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("fotmob-seasons", new Operation( - "fotmob-seasons", + m.put("fortune-author", new Operation( + "fortune-author", "GET", - "/fotmob/seasons", + "/fortune/author", List.of(), List.of( - new QueryParam("league_id", true, "integer", List.of())), + new QueryParam("slug", false, "string", List.of()), + new QueryParam("url", false, "string", List.of()), + new QueryParam("page", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), - false, + true, List.of())); - m.put("fotmob-stats", new Operation( - "fotmob-stats", + m.put("fortune-companies", new Operation( + "fortune-companies", "GET", - "/fotmob/stats", + "/fortune/companies", List.of(), List.of( - new QueryParam("league_id", true, "string", List.of()), - new QueryParam("season_id", false, "string", List.of()), - new QueryParam("type", true, "string", List.of("players", "teams")), - new QueryParam("stat", true, "string", List.of()), - new QueryParam("team_id", false, "string", List.of()), - new QueryParam("position", false, "string", List.of("all", "striker", "winger", "attackingMidfielder", "midfielder", "fullback", "centerBack"))), + new QueryParam("search", false, "string", List.of()), + new QueryParam("country", false, "string", List.of()), + new QueryParam("industry", false, "string", List.of()), + new QueryParam("ranking", false, "string", List.of()), + new QueryParam("year", false, "string", List.of()), + new QueryParam("min_revenue", false, "integer", List.of()), + new QueryParam("max_revenue", false, "integer", List.of()), + new QueryParam("min_employees", false, "integer", List.of()), + new QueryParam("max_employees", false, "integer", List.of()), + new QueryParam("page", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), - false, + true, List.of())); - m.put("fotmob-stats-categories", new Operation( - "fotmob-stats-categories", + m.put("fortune-company-filters", new Operation( + "fortune-company-filters", "GET", - "/fotmob/stats-categories", + "/fortune/companies/filters", + List.of(), List.of(), - List.of( - new QueryParam("league_id", true, "string", List.of()), - new QueryParam("season_id", false, "string", List.of()), - new QueryParam("type", true, "string", List.of("players", "teams"))), List.of(), null, false, @@ -18862,14 +21587,417 @@ private static void putOperations20(Map m) { List.of())); } - private static void putOperations21(Map m) { - m.put("fotmob-table", new Operation( - "fotmob-table", + private static void putOperations24(Map m) { + m.put("fortune-company", new Operation( + "fortune-company", "GET", - "/fotmob/table", + "/fortune/company", List.of(), List.of( - new QueryParam("league_id", true, "string", List.of())), + new QueryParam("slug", false, "string", List.of()), + new QueryParam("url", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fortune-headlines", new Operation( + "fortune-headlines", + "GET", + "/fortune/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of("latest", "fortune-500", "finance", "tech", "leadership", "lifestyle", "economy", "newsletters", "success", "magazine", "real-estate", "investing", "asia", "politics", "artificial-intelligence", "workplace-culture", "personal-finance", "middle-east", "big-tech", "travel-and-leisure", "c-suite", "crypto", "health", "commentary", "retail", "mpw", "features", "conferences", "europe", "environment", "arts-and-entertainment", "cybersecurity", "global", "innovation", "news", "north-america"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fortune-news", new Operation( + "fortune-news", + "GET", + "/fortune/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fortune-ranking", new Operation( + "fortune-ranking", + "GET", + "/fortune/ranking", + List.of(), + List.of( + new QueryParam("list", false, "string", List.of()), + new QueryParam("year", false, "string", List.of()), + new QueryParam("search", false, "string", List.of()), + new QueryParam("filter", false, "array", List.of()), + new QueryParam("sector", false, "string", List.of()), + new QueryParam("industry", false, "string", List.of()), + new QueryParam("state", false, "string", List.of()), + new QueryParam("profitable", false, "string", List.of()), + new QueryParam("sort_by", false, "string", List.of()), + new QueryParam("sort_order", false, "string", List.of("asc", "desc")), + new QueryParam("offset", false, "integer", List.of()), + new QueryParam("limit", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("fortune-ranking-filters", new Operation( + "fortune-ranking-filters", + "GET", + "/fortune/ranking/filters", + List.of(), + List.of( + new QueryParam("list", false, "string", List.of()), + new QueryParam("year", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fortune-ranking-lists", new Operation( + "fortune-ranking-lists", + "GET", + "/fortune/ranking/lists", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fortune-ranking-years", new Operation( + "fortune-ranking-years", + "GET", + "/fortune/ranking/years", + List.of(), + List.of( + new QueryParam("list", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fortune-sections", new Operation( + "fortune-sections", + "GET", + "/fortune/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fotmob-audio-matches", new Operation( + "fotmob-audio-matches", + "GET", + "/fotmob/audio-matches", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fotmob-fifa-ranking-periods", new Operation( + "fotmob-fifa-ranking-periods", + "GET", + "/fotmob/fifa-ranking-periods", + List.of(), + List.of( + new QueryParam("gender", true, "string", List.of("men", "women"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fotmob-fifa-rankings", new Operation( + "fotmob-fifa-rankings", + "GET", + "/fotmob/fifa-rankings", + List.of(), + List.of( + new QueryParam("gender", true, "string", List.of("men", "women")), + new QueryParam("period_id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fotmob-latest-news", new Operation( + "fotmob-latest-news", + "GET", + "/fotmob/latest-news", + List.of(), + List.of( + new QueryParam("start_index", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fotmob-league", new Operation( + "fotmob-league", + "GET", + "/fotmob/league", + List.of(), + List.of( + new QueryParam("league_id", true, "integer", List.of()), + new QueryParam("season", false, "string", List.of()), + new QueryParam("shotmap", false, "boolean", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fotmob-leagues", new Operation( + "fotmob-leagues", + "GET", + "/fotmob/leagues", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fotmob-lineup-builder-players", new Operation( + "fotmob-lineup-builder-players", + "GET", + "/fotmob/lineup-builder-players", + List.of(), + List.of( + new QueryParam("player_ids", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fotmob-lineup-builder-team", new Operation( + "fotmob-lineup-builder-team", + "GET", + "/fotmob/lineup-builder-team", + List.of(), + List.of( + new QueryParam("team_id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fotmob-match", new Operation( + "fotmob-match", + "GET", + "/fotmob/match", + List.of(), + List.of( + new QueryParam("id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fotmob-match-media", new Operation( + "fotmob-match-media", + "GET", + "/fotmob/match-media", + List.of(), + List.of( + new QueryParam("id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fotmob-matches", new Operation( + "fotmob-matches", + "GET", + "/fotmob/matches", + List.of(), + List.of( + new QueryParam("date", true, "string", List.of()), + new QueryParam("timezone", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fotmob-news", new Operation( + "fotmob-news", + "GET", + "/fotmob/news", + List.of(), + List.of( + new QueryParam("league_id", true, "string", List.of()), + new QueryParam("start_index", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fotmob-news-article", new Operation( + "fotmob-news-article", + "GET", + "/fotmob/news-article", + List.of(), + List.of( + new QueryParam("id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fotmob-player", new Operation( + "fotmob-player", + "GET", + "/fotmob/player", + List.of(), + List.of( + new QueryParam("id", true, "string", List.of()), + new QueryParam("include_market_values", false, "boolean", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fotmob-player-match-stats", new Operation( + "fotmob-player-match-stats", + "GET", + "/fotmob/player-match-stats", + List.of(), + List.of( + new QueryParam("player_id", true, "string", List.of()), + new QueryParam("match_id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fotmob-player-matches", new Operation( + "fotmob-player-matches", + "GET", + "/fotmob/player-matches", + List.of(), + List.of( + new QueryParam("player_id", true, "string", List.of()), + new QueryParam("league_id", false, "string", List.of()), + new QueryParam("team_id", false, "string", List.of()), + new QueryParam("before", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fotmob-player-stats", new Operation( + "fotmob-player-stats", + "GET", + "/fotmob/player-stats", + List.of(), + List.of( + new QueryParam("player_id", true, "string", List.of()), + new QueryParam("season_id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fotmob-search", new Operation( + "fotmob-search", + "GET", + "/fotmob/search", + List.of(), + List.of( + new QueryParam("term", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fotmob-seasons", new Operation( + "fotmob-seasons", + "GET", + "/fotmob/seasons", + List.of(), + List.of( + new QueryParam("league_id", true, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fotmob-stats", new Operation( + "fotmob-stats", + "GET", + "/fotmob/stats", + List.of(), + List.of( + new QueryParam("league_id", true, "string", List.of()), + new QueryParam("season_id", false, "string", List.of()), + new QueryParam("type", true, "string", List.of("players", "teams")), + new QueryParam("stat", true, "string", List.of()), + new QueryParam("team_id", false, "string", List.of()), + new QueryParam("position", false, "string", List.of("all", "striker", "winger", "attackingMidfielder", "midfielder", "fullback", "centerBack"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fotmob-stats-categories", new Operation( + "fotmob-stats-categories", + "GET", + "/fotmob/stats-categories", + List.of(), + List.of( + new QueryParam("league_id", true, "string", List.of()), + new QueryParam("season_id", false, "string", List.of()), + new QueryParam("type", true, "string", List.of("players", "teams"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fotmob-table", new Operation( + "fotmob-table", + "GET", + "/fotmob/table", + List.of(), + List.of( + new QueryParam("league_id", true, "string", List.of())), List.of(), null, false, @@ -19219,6 +22347,76 @@ private static void putOperations21(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("fresha-landing-venues", new Operation( + "fresha-landing-venues", + "GET", + "/fresha/landing-venues", + List.of(), + List.of( + new QueryParam("city", true, "string", List.of()), + new QueryParam("business_type", false, "string", List.of()), + new QueryParam("treatment_type", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fresha-search-venues", new Operation( + "fresha-search-venues", + "GET", + "/fresha/search-venues", + List.of(), + List.of( + new QueryParam("query", false, "string", List.of()), + new QueryParam("latitude", false, "number", List.of()), + new QueryParam("longitude", false, "number", List.of()), + new QueryParam("sort", false, "string", List.of("DISTANCE", "RATING", "RECOMMENDED")), + new QueryParam("min_price", false, "number", List.of()), + new QueryParam("service_gender", false, "string", List.of("EVERYONE", "MALE", "FEMALE")), + new QueryParam("awards", false, "string", List.of("BEST_IN_CLASS", "HIGHLY_RECOMMENDED")), + new QueryParam("treatment_category_id", false, "string", List.of()), + new QueryParam("treatment_tag_id", false, "string", List.of()), + new QueryParam("treatment_type_id", false, "string", List.of()), + new QueryParam("first", false, "integer", List.of()), + new QueryParam("after", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("fresha-taxonomy", new Operation( + "fresha-taxonomy", + "GET", + "/fresha/taxonomy", + List.of(), + List.of( + new QueryParam("query", false, "string", List.of()), + new QueryParam("first", false, "integer", List.of()), + new QueryParam("start", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of("start"))); + m.put("fresha-venue", new Operation( + "fresha-venue", + "GET", + "/fresha/venue", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + } + + private static void putOperations25(Map m) { m.put("ft-article", new Operation( "ft-article", "GET", @@ -19711,52 +22909,65 @@ private static void putOperations21(Map m) { List.of("ApiKeyAuth"), true, List.of())); - } - - private static void putOperations22(Map m) { - m.put("gamerant-article", new Operation( - "gamerant-article", + m.put("futgg-fc27-catalog", new Operation( + "futgg-fc27-catalog", "GET", - "/gamerant/article", + "/futgg/fc27/catalog", + List.of(), List.of(), - List.of( - new QueryParam("url", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("gamerant-author", new Operation( - "gamerant-author", + m.put("futgg-fc27-definitions", new Operation( + "futgg-fc27-definitions", "GET", - "/gamerant/author", + "/futgg/fc27/definitions", List.of(), List.of( - new QueryParam("url", true, "string", List.of())), + new QueryParam("ids", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("gamerant-headlines", new Operation( - "gamerant-headlines", + m.put("futgg-fc27-evolutions", new Operation( + "futgg-fc27-evolutions", "GET", - "/gamerant/headlines", + "/futgg/fc27/evolutions", List.of(), List.of( - new QueryParam("section", true, "string", List.of("games", "gaming", "pc-news", "steam-news", "core-news", "xbox-series-xs-news", "xbox-news", "xbox-one-news", "platforms", "lists", "strategy-guide", "anime", "anime-news", "nintendo-news", "legend-of-zelda-news", "originals", "features", "gaming-features", "exclusives", "ps5-news", "bethesda-news", "playstation-news", "pokemon-news", "animal-crossing-news", "activision-news", "call-of-duty-news", "grand-theft-auto-news", "epic-games-store-news", "nintendo-switch-news", "fortnite-news", "one-piece-news", "anime-editorial", "diablo-news", "pokemon-go-news", "mobile-news", "ios-news", "android-news", "tabletop", "dc-news", "mortal-kombat-news", "latest-videos", "game-rant-series", "gamerant-gaming-videos-original", "videos", "disney-news", "movies-tv", "movies-tv-news", "movies-tv-lists", "movies-tv-features", "giveaways-contests", "stardew-valley-articles", "grand-theft-auto-5-news", "cd-projekt-red-news", "halo-news", "persona-news", "death-stranding-news", "dragon-ball-z-news", "genshin-impact-guides", "lord-of-the-rings-news", "world-of-warcraft-news", "streaming", "the-witcher-franchise-news", "final-fantasy-news", "resident-evil-news", "final-fantasy-7-news", "ps4-news", "call-of-duty-warzone-news", "the-elder-scrolls-news", "destiny-news", "fallout-news", "red-dead-redemption-news", "game-reviews", "final-fantasy-14-news", "the-last-of-us-news", "nintendo-3ds-news", "fallout-76-news", "marvel-news", "featured", "editorial", "ps3-news", "xbox-360-news", "video-interviews", "assassins-creed-news", "pause-for-thought", "star-wars-news", "pokemon-scarlet-violet-news", "theme-parks", "bloodborne-news", "review-roundup", "apex-legends-news", "dungeons-and-dragons-news", "kingdom-hearts-franchise-news", "dragon-age-news", "overwatch-news", "overwatch-2-news", "pokemon-legends-z-a-news", "pokemon-videos", "minecraft-news", "game-previews", "elden-ring-news", "amazon-news", "doom-news", "no-mans-sky-news", "metroid-franchise-news", "league-of-legends-news", "borderlands-news", "super-smash-bros-news", "valheim-news", "spider-man-news", "wii-news", "pokemon-go-guides", "the-witcher-3-news", "red-dead-redemption-2-news", "battlefield-franchise-news", "gta-online-news", "cod-modern-warfare-news", "video-lists", "playstation-videos", "xbox-videos", "dark-souls-news", "video-originals", "genshin-impact-news", "elden-ring-videos", "mass-effect-news", "rainbow-six-siege-news", "rainbow-six-franchise-news", "god-of-war-news", "persona-5-news", "the-last-of-us-2-news", "explainer", "stardew-valley-guides", "halo-infinite-news", "hardware-reviews", "movie-review", "dead-by-daylight-news", "far-cry-franchise-news", "zelda-breath-of-the-wild-news", "pokemon-go-reading", "365-days-later", "dead-space-news", "acnh-news", "game-rant-advance", "nintendo-switch-reviews", "pokemon-scarlet-and-violet-features", "red-dead-online-news", "game-deals", "steam-videos", "psn-news", "complete-guides-walkthroughs", "horizon-forbidden-west-news", "tv-review", "game-trailers", "assassins-creed-videos", "wii-u-news", "pc-videos", "pubg-news", "buyers-guides", "cyberpunk-videos", "baldurs-gate-3-videos", "pokemon-legends-z-a-guides", "rantable", "pokemon-scarlet-and-violet-guides", "fallout-videos", "fallout-4-videos", "game-rant-mailbag", "video-news", "star-wars-outlaws-videos", "hype-train-videos", "borderlands-3-news", "bite-size-lore", "open-world-videos", "gamers-said", "red-dead-redemption-2-videos", "stardew-valley-videos", "have-you-heard-of", "creators-on-game-rant", "movies-tv-trailers", "indie-videos"))), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of()), + new QueryParam("name", false, "string", List.of()), + new QueryParam("only_expired", false, "boolean", List.of()), + new QueryParam("include_cosmetics", false, "boolean", List.of()), + new QueryParam("no_pagination", false, "boolean", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("futgg-fc27-evolution", new Operation( + "futgg-fc27-evolution", + "GET", + "/futgg/fc27/evolutions/{slug}", + List.of("slug"), + List.of(), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("gamerant-news", new Operation( - "gamerant-news", + m.put("futgg-fc27-gg-rating-ranks", new Operation( + "futgg-fc27-gg-rating-ranks", "GET", - "/gamerant/news", + "/futgg/fc27/gg-rating-ranks", List.of(), List.of(), List.of(), @@ -19765,10 +22976,10 @@ private static void putOperations22(Map m) { List.of("ApiKeyAuth"), false, List.of())); - m.put("gamerant-sections", new Operation( - "gamerant-sections", + m.put("futgg-fc27-gg-ratings", new Operation( + "futgg-fc27-gg-ratings", "GET", - "/gamerant/sections", + "/futgg/fc27/gg-ratings", List.of(), List.of(), List.of(), @@ -19777,51 +22988,347 @@ private static void putOperations22(Map m) { List.of("ApiKeyAuth"), false, List.of())); - m.put("gamesradar-article", new Operation( - "gamesradar-article", + m.put("futgg-fc27-objective-categories", new Operation( + "futgg-fc27-objective-categories", "GET", - "/gamesradar/article", + "/futgg/fc27/objective-categories", + List.of(), List.of(), - List.of( - new QueryParam("url", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("gamesradar-author", new Operation( - "gamesradar-author", + m.put("futgg-fc27-objective-groups", new Operation( + "futgg-fc27-objective-groups", "GET", - "/gamesradar/author", + "/futgg/fc27/objectives", List.of(), List.of( - new QueryParam("slug", false, "string", List.of()), - new QueryParam("url", false, "string", List.of()), - new QueryParam("page", false, "integer", List.of())), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of()), + new QueryParam("category_slug", false, "string", List.of("coming-soon", "foundations", "seasonal", "campaigns", "live-events", "milestones", "mastery", "fc-pro")), + new QueryParam("no_pagination", false, "boolean", List.of()), + new QueryParam("hide_expired", false, "boolean", List.of()), + new QueryParam("include_unreleased", false, "boolean", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), true, List.of())); - m.put("gamesradar-headlines", new Operation( - "gamesradar-headlines", + m.put("futgg-fc27-objective-group-by-ea", new Operation( + "futgg-fc27-objective-group-by-ea", "GET", - "/gamesradar/headlines", + "/futgg/fc27/objectives/by-ea/{id}", + List.of("id"), List.of(), - List.of( - new QueryParam("section", true, "string", List.of("games", "platforms", "entertainment", "comics", "hardware", "toys-collectibles", "tabletop-gaming", "buying-guides", "lego", "dungeons-and-dragons", "videos", "games-news", "games-features", "games-reviews", "games-guides", "hardware-news", "hardware-reviews", "hardware-features", "entertainment-tv", "entertainment-movies", "entertainment-streaming"))), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("gamesradar-news", new Operation( - "gamesradar-news", + m.put("futgg-fc27-objective-group-by-objective", new Operation( + "futgg-fc27-objective-group-by-objective", "GET", - "/gamesradar/news", + "/futgg/fc27/objectives/by-objective/{id}", + List.of("id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("futgg-fc27-objective-group", new Operation( + "futgg-fc27-objective-group", + "GET", + "/futgg/fc27/objectives/{slug}", + List.of("slug"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("futgg-fc27-player-sorts", new Operation( + "futgg-fc27-player-sorts", + "GET", + "/futgg/fc27/player-sorts", + List.of(), + List.of( + new QueryParam("platform", false, "string", List.of("console", "pc"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("futgg-fc27-players", new Operation( + "futgg-fc27-players", + "GET", + "/futgg/fc27/players", + List.of(), + List.of( + new QueryParam("nation_id", false, "integer", List.of()), + new QueryParam("league_id", false, "integer", List.of()), + new QueryParam("club_id", false, "integer", List.of()), + new QueryParam("rarity_id", false, "integer", List.of()), + new QueryParam("positions", false, "array", List.of("0", "3", "5", "7", "10", "12", "14", "16", "18", "23", "25", "27")), + new QueryParam("foot", false, "array", List.of("1", "2")), + new QueryParam("gender", false, "array", List.of("1", "2")), + new QueryParam("body_types", false, "array", List.of("1", "2", "3", "4", "5", "6", "7", "8", "9", "10")), + new QueryParam("accelerate_types", false, "array", List.of("1", "2", "3")), + new QueryParam("name", false, "string", List.of()), + new QueryParam("skill_moves", false, "array", List.of("1", "2", "3", "4", "5")), + new QueryParam("weak_foot", false, "array", List.of("1", "2", "3", "4", "5")), + new QueryParam("holographic_type", false, "array", List.of("1", "2")), + new QueryParam("show_holographics", false, "string", List.of("true", "only")), + new QueryParam("overall__gte", false, "integer", List.of()), + new QueryParam("overall__lte", false, "integer", List.of()), + new QueryParam("grading_score__gte", false, "integer", List.of()), + new QueryParam("grading_score__lte", false, "integer", List.of()), + new QueryParam("price__gte", false, "integer", List.of()), + new QueryParam("price__lte", false, "integer", List.of()), + new QueryParam("number_of_positions__gte", false, "integer", List.of()), + new QueryParam("number_of_positions__lte", false, "integer", List.of()), + new QueryParam("playstyles_count__gte", false, "integer", List.of()), + new QueryParam("playstyles_count__lte", false, "integer", List.of()), + new QueryParam("playstyles_plus_count__gte", false, "integer", List.of()), + new QueryParam("playstyles_plus_count__lte", false, "integer", List.of()), + new QueryParam("role_plus_count__gte", false, "integer", List.of()), + new QueryParam("role_plus_count__lte", false, "integer", List.of()), + new QueryParam("role_plus_plus_count__gte", false, "integer", List.of()), + new QueryParam("role_plus_plus_count__lte", false, "integer", List.of()), + new QueryParam("pc_price__gte", false, "integer", List.of()), + new QueryParam("pc_price__lte", false, "integer", List.of()), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("count", false, "integer", List.of()), + new QueryParam("sorts", false, "string", List.of("-attribute_acceleration", "-attribute_aggression", "-attribute_agility", "-attribute_balance", "-attribute_ball_control", "-attribute_composure", "-attribute_crossing", "-attribute_curve", "-attribute_defensive_awareness", "-attribute_dribbling", "-attribute_finishing", "-attribute_fk_accuracy", "-attribute_gk_diving", "-attribute_gk_handling", "-attribute_gk_kicking", "-attribute_gk_positioning", "-attribute_gk_reflexes", "-attribute_heading_accuracy", "-attribute_interceptions", "-attribute_jumping", "-attribute_long_passing", "-attribute_long_shots", "-attribute_penalties", "-attribute_positioning", "-attribute_reactions", "-attribute_short_passing", "-attribute_shot_power", "-attribute_sliding_tackle", "-attribute_sprint_speed", "-attribute_stamina", "-attribute_standing_tackle", "-attribute_strength", "-attribute_vision", "-attribute_volleys", "-created_at", "-current_price", "-face_defending", "-face_dribbling", "-face_pace", "-face_passing", "-face_physicality", "-face_shooting", "-gg_rating", "-gk_face_diving", "-gk_face_handling", "-gk_face_kicking", "-gk_face_positioning", "-gk_face_reflexes", "-gk_face_speed", "-grading_score", "-number_of_all_playstyles", "-number_of_playstyles", "-number_of_playstyles_plus", "-overall", "-pc_current_price", "-pos_0_gg_rating", "-pos_10_gg_rating", "-pos_12_gg_rating", "-pos_14_gg_rating", "-pos_16_gg_rating", "-pos_18_gg_rating", "-pos_23_gg_rating", "-pos_25_gg_rating", "-pos_27_gg_rating", "-pos_3_gg_rating", "-pos_5_gg_rating", "-pos_7_gg_rating", "-role_10_gg_rating", "-role_11_gg_rating", "-role_12_gg_rating", "-role_13_gg_rating", "-role_14_gg_rating", "-role_15_gg_rating", "-role_16_gg_rating", "-role_17_gg_rating", "-role_1_gg_rating", "-role_23_gg_rating", "-role_24_gg_rating", "-role_25_gg_rating", "-role_26_gg_rating", "-role_27_gg_rating", "-role_2_gg_rating", "-role_37_gg_rating", "-role_38_gg_rating", "-role_39_gg_rating", "-role_3_gg_rating", "-role_40_gg_rating", "-role_45_gg_rating", "-role_46_gg_rating", "-role_47_gg_rating", "-role_48_gg_rating", "-role_49_gg_rating", "-role_4_gg_rating", "-role_50_gg_rating", "-role_51_gg_rating", "-role_52_gg_rating", "-role_53_gg_rating", "-role_54_gg_rating", "-role_55_gg_rating", "-role_56_gg_rating", "-role_57_gg_rating", "-role_58_gg_rating", "-role_5_gg_rating", "-role_63_gg_rating", "-role_64_gg_rating", "-role_65_gg_rating", "-role_66_gg_rating", "-role_6_gg_rating", "-role_71_gg_rating", "-role_72_gg_rating", "-role_74_gg_rating", "-role_75_gg_rating", "-role_7_gg_rating", "-role_8_gg_rating", "-role_9_gg_rating", "-total_face_stats", "-total_igs", "attribute_acceleration", "attribute_aggression", "attribute_agility", "attribute_balance", "attribute_ball_control", "attribute_composure", "attribute_crossing", "attribute_curve", "attribute_defensive_awareness", "attribute_dribbling", "attribute_finishing", "attribute_fk_accuracy", "attribute_gk_diving", "attribute_gk_handling", "attribute_gk_kicking", "attribute_gk_positioning", "attribute_gk_reflexes", "attribute_heading_accuracy", "attribute_interceptions", "attribute_jumping", "attribute_long_passing", "attribute_long_shots", "attribute_penalties", "attribute_positioning", "attribute_reactions", "attribute_short_passing", "attribute_shot_power", "attribute_sliding_tackle", "attribute_sprint_speed", "attribute_stamina", "attribute_standing_tackle", "attribute_strength", "attribute_vision", "attribute_volleys", "created_at", "current_price", "face_defending", "face_dribbling", "face_pace", "face_passing", "face_physicality", "face_shooting", "gg_rating", "gk_face_diving", "gk_face_handling", "gk_face_kicking", "gk_face_positioning", "gk_face_reflexes", "gk_face_speed", "grading_score", "number_of_all_playstyles", "number_of_playstyles", "number_of_playstyles_plus", "overall", "pc_current_price", "pos_0_gg_rating", "pos_10_gg_rating", "pos_12_gg_rating", "pos_14_gg_rating", "pos_16_gg_rating", "pos_18_gg_rating", "pos_23_gg_rating", "pos_25_gg_rating", "pos_27_gg_rating", "pos_3_gg_rating", "pos_5_gg_rating", "pos_7_gg_rating", "role_10_gg_rating", "role_11_gg_rating", "role_12_gg_rating", "role_13_gg_rating", "role_14_gg_rating", "role_15_gg_rating", "role_16_gg_rating", "role_17_gg_rating", "role_1_gg_rating", "role_23_gg_rating", "role_24_gg_rating", "role_25_gg_rating", "role_26_gg_rating", "role_27_gg_rating", "role_2_gg_rating", "role_37_gg_rating", "role_38_gg_rating", "role_39_gg_rating", "role_3_gg_rating", "role_40_gg_rating", "role_45_gg_rating", "role_46_gg_rating", "role_47_gg_rating", "role_48_gg_rating", "role_49_gg_rating", "role_4_gg_rating", "role_50_gg_rating", "role_51_gg_rating", "role_52_gg_rating", "role_53_gg_rating", "role_54_gg_rating", "role_55_gg_rating", "role_56_gg_rating", "role_57_gg_rating", "role_58_gg_rating", "role_5_gg_rating", "role_63_gg_rating", "role_64_gg_rating", "role_65_gg_rating", "role_66_gg_rating", "role_6_gg_rating", "role_71_gg_rating", "role_72_gg_rating", "role_74_gg_rating", "role_75_gg_rating", "role_7_gg_rating", "role_8_gg_rating", "role_9_gg_rating", "total_face_stats", "total_igs"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("futgg-fc27-price-index", new Operation( + "futgg-fc27-price-index", + "GET", + "/futgg/fc27/price-index", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("futgg-fc27-prices", new Operation( + "futgg-fc27-prices", + "GET", + "/futgg/fc27/prices", + List.of(), + List.of( + new QueryParam("dataset", false, "string", List.of("player-prices-ps5", "player-prices-pc", "player-prices-ps5-dyn", "player-prices-pc-dyn"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("futgg-fc27-sbc-categories", new Operation( + "futgg-fc27-sbc-categories", + "GET", + "/futgg/fc27/sbc/categories", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("futgg-fc27-sbc-sets", new Operation( + "futgg-fc27-sbc-sets", + "GET", + "/futgg/fc27/sbc/sets", + List.of(), + List.of( + new QueryParam("page", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of()), + new QueryParam("category_slug", false, "string", List.of("players", "upgrades", "challenges", "foundations")), + new QueryParam("search", false, "string", List.of()), + new QueryParam("expired_only", false, "boolean", List.of()), + new QueryParam("expiring_soon", false, "boolean", List.of()), + new QueryParam("no_pagination", false, "boolean", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("futgg-fc27-sbc-set-by-challenge", new Operation( + "futgg-fc27-sbc-set-by-challenge", + "GET", + "/futgg/fc27/sbc/sets/by-challenge/{id}", + List.of("id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("futgg-fc27-sbc-set-by-ea", new Operation( + "futgg-fc27-sbc-set-by-ea", + "GET", + "/futgg/fc27/sbc/sets/by-ea/{id}", + List.of("id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("futgg-fc27-sbc-set", new Operation( + "futgg-fc27-sbc-set", + "GET", + "/futgg/fc27/sbc/sets/{slug}", + List.of("slug"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("futgg-fc27-season-pass", new Operation( + "futgg-fc27-season-pass", + "GET", + "/futgg/fc27/season-pass", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("gamerant-article", new Operation( + "gamerant-article", + "GET", + "/gamerant/article", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("gamerant-author", new Operation( + "gamerant-author", + "GET", + "/gamerant/author", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("gamerant-headlines", new Operation( + "gamerant-headlines", + "GET", + "/gamerant/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of("games", "gaming", "pc-news", "steam-news", "core-news", "xbox-series-xs-news", "xbox-news", "xbox-one-news", "platforms", "lists", "strategy-guide", "anime", "anime-news", "nintendo-news", "legend-of-zelda-news", "originals", "features", "gaming-features", "exclusives", "ps5-news", "bethesda-news", "playstation-news", "pokemon-news", "animal-crossing-news", "activision-news", "call-of-duty-news", "grand-theft-auto-news", "epic-games-store-news", "nintendo-switch-news", "fortnite-news", "one-piece-news", "anime-editorial", "diablo-news", "pokemon-go-news", "mobile-news", "ios-news", "android-news", "tabletop", "dc-news", "mortal-kombat-news", "latest-videos", "game-rant-series", "gamerant-gaming-videos-original", "videos", "disney-news", "movies-tv", "movies-tv-news", "movies-tv-lists", "movies-tv-features", "giveaways-contests", "stardew-valley-articles", "grand-theft-auto-5-news", "cd-projekt-red-news", "halo-news", "persona-news", "death-stranding-news", "dragon-ball-z-news", "genshin-impact-guides", "lord-of-the-rings-news", "world-of-warcraft-news", "streaming", "the-witcher-franchise-news", "final-fantasy-news", "resident-evil-news", "final-fantasy-7-news", "ps4-news", "call-of-duty-warzone-news", "the-elder-scrolls-news", "destiny-news", "fallout-news", "red-dead-redemption-news", "game-reviews", "final-fantasy-14-news", "the-last-of-us-news", "nintendo-3ds-news", "fallout-76-news", "marvel-news", "featured", "editorial", "ps3-news", "xbox-360-news", "video-interviews", "assassins-creed-news", "pause-for-thought", "star-wars-news", "pokemon-scarlet-violet-news", "theme-parks", "bloodborne-news", "review-roundup", "apex-legends-news", "dungeons-and-dragons-news", "kingdom-hearts-franchise-news", "dragon-age-news", "overwatch-news", "overwatch-2-news", "pokemon-legends-z-a-news", "pokemon-videos", "minecraft-news", "game-previews", "elden-ring-news", "amazon-news", "doom-news", "no-mans-sky-news", "metroid-franchise-news", "league-of-legends-news", "borderlands-news", "super-smash-bros-news", "valheim-news", "spider-man-news", "wii-news", "pokemon-go-guides", "the-witcher-3-news", "red-dead-redemption-2-news", "battlefield-franchise-news", "gta-online-news", "cod-modern-warfare-news", "video-lists", "playstation-videos", "xbox-videos", "dark-souls-news", "video-originals", "genshin-impact-news", "elden-ring-videos", "mass-effect-news", "rainbow-six-siege-news", "rainbow-six-franchise-news", "god-of-war-news", "persona-5-news", "the-last-of-us-2-news", "explainer", "stardew-valley-guides", "halo-infinite-news", "hardware-reviews", "movie-review", "dead-by-daylight-news", "far-cry-franchise-news", "zelda-breath-of-the-wild-news", "pokemon-go-reading", "365-days-later", "dead-space-news", "acnh-news", "game-rant-advance", "nintendo-switch-reviews", "pokemon-scarlet-and-violet-features", "red-dead-online-news", "game-deals", "steam-videos", "psn-news", "complete-guides-walkthroughs", "horizon-forbidden-west-news", "tv-review", "game-trailers", "assassins-creed-videos", "wii-u-news", "pc-videos", "pubg-news", "buyers-guides", "cyberpunk-videos", "baldurs-gate-3-videos", "pokemon-legends-z-a-guides", "rantable", "pokemon-scarlet-and-violet-guides", "fallout-videos", "fallout-4-videos", "game-rant-mailbag", "video-news", "star-wars-outlaws-videos", "hype-train-videos", "borderlands-3-news", "bite-size-lore", "open-world-videos", "gamers-said", "red-dead-redemption-2-videos", "stardew-valley-videos", "have-you-heard-of", "creators-on-game-rant", "movies-tv-trailers", "indie-videos"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("gamerant-news", new Operation( + "gamerant-news", + "GET", + "/gamerant/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("gamerant-sections", new Operation( + "gamerant-sections", + "GET", + "/gamerant/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("gamesradar-article", new Operation( + "gamesradar-article", + "GET", + "/gamesradar/article", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + } + + private static void putOperations26(Map m) { + m.put("gamesradar-author", new Operation( + "gamesradar-author", + "GET", + "/gamesradar/author", + List.of(), + List.of( + new QueryParam("slug", false, "string", List.of()), + new QueryParam("url", false, "string", List.of()), + new QueryParam("page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("gamesradar-headlines", new Operation( + "gamesradar-headlines", + "GET", + "/gamesradar/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of("games", "platforms", "entertainment", "comics", "hardware", "toys-collectibles", "tabletop-gaming", "buying-guides", "lego", "dungeons-and-dragons", "videos", "games-news", "games-features", "games-reviews", "games-guides", "hardware-news", "hardware-reviews", "hardware-features", "entertainment-tv", "entertainment-movies", "entertainment-streaming"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("gamesradar-news", new Operation( + "gamesradar-news", + "GET", + "/gamesradar/news", List.of(), List.of(), List.of(), @@ -20634,9 +24141,6 @@ private static void putOperations22(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations23(Map m) { m.put("gizmodo-sections", new Operation( "gizmodo-sections", "GET", @@ -20712,6 +24216,9 @@ private static void putOperations23(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations27(Map m) { m.put("globeandmail-article", new Operation( "globeandmail-article", "GET", @@ -20775,6 +24282,171 @@ private static void putOperations23(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("glovo-categories", new Operation( + "glovo-categories", + "GET", + "/glovo/categories", + List.of(), + List.of( + new QueryParam("country", true, "string", List.of()), + new QueryParam("city", true, "string", List.of()), + new QueryParam("language", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("glovo-cities", new Operation( + "glovo-cities", + "GET", + "/glovo/cities", + List.of(), + List.of( + new QueryParam("country", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("glovo-city", new Operation( + "glovo-city", + "GET", + "/glovo/city", + List.of(), + List.of( + new QueryParam("country", true, "string", List.of()), + new QueryParam("city", true, "string", List.of()), + new QueryParam("language", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("glovo-store", new Operation( + "glovo-store", + "GET", + "/glovo/store", + List.of(), + List.of( + new QueryParam("country", true, "string", List.of()), + new QueryParam("city", true, "string", List.of()), + new QueryParam("store_id", true, "integer", List.of()), + new QueryParam("language", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("glovo-store-fees", new Operation( + "glovo-store-fees", + "GET", + "/glovo/store/fees", + List.of(), + List.of( + new QueryParam("country", true, "string", List.of()), + new QueryParam("city", true, "string", List.of()), + new QueryParam("store_id", true, "integer", List.of()), + new QueryParam("address_id", false, "integer", List.of()), + new QueryParam("language", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("glovo-store-menu", new Operation( + "glovo-store-menu", + "GET", + "/glovo/store/menu", + List.of(), + List.of( + new QueryParam("country", true, "string", List.of()), + new QueryParam("city", true, "string", List.of()), + new QueryParam("store_id", true, "integer", List.of()), + new QueryParam("address_id", false, "integer", List.of()), + new QueryParam("language", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("glovo-store-products", new Operation( + "glovo-store-products", + "GET", + "/glovo/store/products", + List.of(), + List.of( + new QueryParam("country", true, "string", List.of()), + new QueryParam("city", true, "string", List.of()), + new QueryParam("store_id", true, "integer", List.of()), + new QueryParam("address_id", false, "integer", List.of()), + new QueryParam("collection", false, "string", List.of()), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("language", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("glovo-store-search", new Operation( + "glovo-store-search", + "GET", + "/glovo/store/search", + List.of(), + List.of( + new QueryParam("country", true, "string", List.of()), + new QueryParam("city", true, "string", List.of()), + new QueryParam("store_id", true, "integer", List.of()), + new QueryParam("query", true, "string", List.of()), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("address_id", false, "integer", List.of()), + new QueryParam("language", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("glovo-stores", new Operation( + "glovo-stores", + "GET", + "/glovo/stores", + List.of(), + List.of( + new QueryParam("country", true, "string", List.of()), + new QueryParam("city", true, "string", List.of()), + new QueryParam("category_id", true, "integer", List.of()), + new QueryParam("filter_id", false, "integer", List.of()), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("language", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("glovo-stores-filters", new Operation( + "glovo-stores-filters", + "GET", + "/glovo/stores/filters", + List.of(), + List.of( + new QueryParam("country", true, "string", List.of()), + new QueryParam("city", true, "string", List.of()), + new QueryParam("category_id", true, "integer", List.of()), + new QueryParam("language", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("gmanews-article", new Operation( "gmanews-article", "GET", @@ -21391,6 +25063,9 @@ private static void putOperations23(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations28(Map m) { m.put("goodrx-health-article", new Operation( "goodrx-health-article", "GET", @@ -21445,9 +25120,6 @@ private static void putOperations23(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations24(Map m) { m.put("google-jobs-job", new Operation( "google-jobs-job", "GET", @@ -22216,6 +25888,9 @@ private static void putOperations24(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations29(Map m) { m.put("googleplay-search", new Operation( "googleplay-search", "GET", @@ -22265,6 +25940,35 @@ private static void putOperations24(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("gosugamers-article", new Operation( + "gosugamers-article", + "GET", + "/gosugamers/article", + List.of(), + List.of( + new QueryParam("id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("gosugamers-articles", new Operation( + "gosugamers-articles", + "GET", + "/gosugamers/articles", + List.of(), + List.of( + new QueryParam("section", false, "string", List.of("dota2", "counterstrike", "lol", "valorant", "mobile-legends", "pubg-mobile", "wild-rift", "free-fire", "battlegrounds-mobile-india", "entertainment", "genshin-impact", "honkai-star-rail", "zenless-zone-zero", "honor-of-kings", "umamusume-pretty-derby")), + new QueryParam("type", false, "string", List.of("news", "features")), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); m.put("gosugamers-encounters", new Operation( "gosugamers-encounters", "GET", @@ -22281,9 +25985,6 @@ private static void putOperations24(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations25(Map m) { m.put("gosugamers-games", new Operation( "gosugamers-games", "GET", @@ -23078,6 +26779,9 @@ private static void putOperations25(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations30(Map m) { m.put("gucci-category", new Operation( "gucci-category", "GET", @@ -23161,9 +26865,6 @@ private static void putOperations25(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations26(Map m) { m.put("gucci-stores", new Operation( "gucci-stores", "GET", @@ -23881,6 +27582,130 @@ private static void putOperations26(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("hltv-event", new Operation( + "hltv-event", + "GET", + "/hltv/event", + List.of(), + List.of( + new QueryParam("id", true, "integer", List.of()), + new QueryParam("slug", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("hltv-events", new Operation( + "hltv-events", + "GET", + "/hltv/events", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("hltv-match", new Operation( + "hltv-match", + "GET", + "/hltv/match", + List.of(), + List.of( + new QueryParam("id", true, "integer", List.of()), + new QueryParam("slug", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + } + + private static void putOperations31(Map m) { + m.put("hltv-matches", new Operation( + "hltv-matches", + "GET", + "/hltv/matches", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("hltv-player", new Operation( + "hltv-player", + "GET", + "/hltv/player", + List.of(), + List.of( + new QueryParam("id", true, "integer", List.of()), + new QueryParam("slug", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("hltv-rankings", new Operation( + "hltv-rankings", + "GET", + "/hltv/rankings", + List.of(), + List.of( + new QueryParam("date", false, "string", List.of()), + new QueryParam("country", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("hltv-results", new Operation( + "hltv-results", + "GET", + "/hltv/results", + List.of(), + List.of( + new QueryParam("offset", false, "integer", List.of()), + new QueryParam("event", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("hltv-search", new Operation( + "hltv-search", + "GET", + "/hltv/search", + List.of(), + List.of( + new QueryParam("query", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("hltv-team", new Operation( + "hltv-team", + "GET", + "/hltv/team", + List.of(), + List.of( + new QueryParam("id", true, "integer", List.of()), + new QueryParam("slug", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("hm-categories", new Operation( "hm-categories", "GET", @@ -24006,9 +27831,6 @@ private static void putOperations26(Map m) { List.of("ApiKeyAuth"), true, List.of())); - } - - private static void putOperations27(Map m) { m.put("hollywoodreporter-headlines", new Operation( "hollywoodreporter-headlines", "GET", @@ -24604,6 +28426,9 @@ private static void putOperations27(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations32(Map m) { m.put("imdb-name-credits", new Operation( "imdb-name-credits", "GET", @@ -24848,9 +28673,6 @@ private static void putOperations27(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations28(Map m) { m.put("imdb-title-keywords", new Operation( "imdb-title-keywords", "GET", @@ -25448,6 +29270,9 @@ private static void putOperations28(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations33(Map m) { m.put("inquirer-sections", new Operation( "inquirer-sections", "GET", @@ -25650,9 +29475,6 @@ private static void putOperations28(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations29(Map m) { m.put("investopedia-news", new Operation( "investopedia-news", "GET", @@ -25867,6 +29689,188 @@ private static void putOperations29(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("itchio-browse", new Operation( + "itchio-browse", + "GET", + "/itchio/browse", + List.of(), + List.of( + new QueryParam("path", true, "string", List.of()), + new QueryParam("page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("itchio-browse-options", new Operation( + "itchio-browse-options", + "GET", + "/itchio/browse/options", + List.of(), + List.of( + new QueryParam("path", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("itchio-catalog", new Operation( + "itchio-catalog", + "GET", + "/itchio/catalogs/{classification}", + List.of("classification"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("itchio-top-rated", new Operation( + "itchio-top-rated", + "GET", + "/itchio/games/top-rated", + List.of(), + List.of( + new QueryParam("page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("itchio-jams-browse", new Operation( + "itchio-jams-browse", + "GET", + "/itchio/jams/browse", + List.of(), + List.of( + new QueryParam("path", false, "string", List.of()), + new QueryParam("page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("itchio-jam-calendar", new Operation( + "itchio-jam-calendar", + "GET", + "/itchio/jams/calendar", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("itchio-jams-entries", new Operation( + "itchio-jams-entries", + "GET", + "/itchio/jams/entries", + List.of(), + List.of( + new QueryParam("path", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("itchio-jams-options", new Operation( + "itchio-jams-options", + "GET", + "/itchio/jams/options", + List.of(), + List.of( + new QueryParam("path", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("itchio-jams-overview", new Operation( + "itchio-jams-overview", + "GET", + "/itchio/jams/overview", + List.of(), + List.of( + new QueryParam("path", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("itchio-jams-results", new Operation( + "itchio-jams-results", + "GET", + "/itchio/jams/results", + List.of(), + List.of( + new QueryParam("path", true, "string", List.of()), + new QueryParam("page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("itchio-jams-results-options", new Operation( + "itchio-jams-results-options", + "GET", + "/itchio/jams/results/options", + List.of(), + List.of( + new QueryParam("path", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("itchio-jams-submission", new Operation( + "itchio-jams-submission", + "GET", + "/itchio/jams/submission", + List.of(), + List.of( + new QueryParam("path", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("itchio-project", new Operation( + "itchio-project", + "GET", + "/itchio/project", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("itchio-tags", new Operation( + "itchio-tags", + "GET", + "/itchio/tags/{classification}", + List.of("classification"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("japantimes-article", new Operation( "japantimes-article", "GET", @@ -26062,6 +30066,9 @@ private static void putOperations29(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations34(Map m) { m.put("jerusalempost-author", new Operation( "jerusalempost-author", "GET", @@ -26488,9 +30495,6 @@ private static void putOperations29(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations30(Map m) { m.put("jobs-recruitee-offers", new Operation( "jobs-recruitee-offers", "GET", @@ -26961,6 +30965,9 @@ private static void putOperations30(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations35(Map m) { m.put("justwatch-popular", new Operation( "justwatch-popular", "GET", @@ -27391,9 +31398,6 @@ private static void putOperations30(Map m) { List.of("ApiKeyAuth"), true, List.of("cursor"))); - } - - private static void putOperations31(Map m) { m.put("kalshi-markets-history", new Operation( "kalshi-markets-history", "GET", @@ -27829,6 +31833,9 @@ private static void putOperations31(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations36(Map m) { m.put("kick-livestreams", new Operation( "kick-livestreams", "GET", @@ -27988,6 +31995,262 @@ private static void putOperations31(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("klook-activity", new Operation( + "klook-activity", + "GET", + "/klook/activities/{activity_id}", + List.of("activity_id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("klook-attractions-categories", new Operation( + "klook-attractions-categories", + "GET", + "/klook/attractions/categories", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("klook-attractions-destinations", new Operation( + "klook-attractions-destinations", + "GET", + "/klook/attractions/destinations", + List.of(), + List.of( + new QueryParam("city_id", false, "integer", List.of()), + new QueryParam("country_id", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("klook-attractions-highlights", new Operation( + "klook-attractions-highlights", + "GET", + "/klook/attractions/highlights", + List.of(), + List.of( + new QueryParam("city_id", false, "integer", List.of()), + new QueryParam("country_id", false, "integer", List.of()), + new QueryParam("type", false, "string", List.of("city", "country"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("klook-attractions-search", new Operation( + "klook-attractions-search", + "GET", + "/klook/attractions/search", + List.of(), + List.of( + new QueryParam("city_id", false, "integer", List.of()), + new QueryParam("category_id", false, "integer", List.of()), + new QueryParam("sort", false, "string", List.of("recommended", "bestselling", "top_rated", "price_low_to_high", "newest")), + new QueryParam("price_min", false, "integer", List.of()), + new QueryParam("price_max", false, "integer", List.of()), + new QueryParam("service_lang_tag", false, "integer", List.of()), + new QueryParam("duration_tag", false, "integer", List.of()), + new QueryParam("other_filters_tag", false, "integer", List.of()), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("per_page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("klook-attractions-suggest", new Operation( + "klook-attractions-suggest", + "GET", + "/klook/attractions/suggest", + List.of(), + List.of( + new QueryParam("query", true, "string", List.of()), + new QueryParam("limit", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("klook-categories", new Operation( + "klook-categories", + "GET", + "/klook/categories", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("klook-destinations", new Operation( + "klook-destinations", + "GET", + "/klook/destinations", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("klook-hot", new Operation( + "klook-hot", + "GET", + "/klook/hot", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("klook-interests", new Operation( + "klook-interests", + "GET", + "/klook/interests", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("klook-recommendations", new Operation( + "klook-recommendations", + "GET", + "/klook/recommendations", + List.of(), + List.of( + new QueryParam("city_id", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("klook-reviews", new Operation( + "klook-reviews", + "GET", + "/klook/reviews", + List.of(), + List.of( + new QueryParam("city_id", true, "integer", List.of()), + new QueryParam("vertical", false, "string", List.of("experiences", "attractions"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("klook-search", new Operation( + "klook-search", + "GET", + "/klook/search", + List.of(), + List.of( + new QueryParam("query", false, "string", List.of()), + new QueryParam("city_id", false, "integer", List.of()), + new QueryParam("category_id", false, "integer", List.of()), + new QueryParam("sort", false, "string", List.of("recommended", "bestselling", "top_rated", "price_low_to_high", "newest")), + new QueryParam("price_min", false, "integer", List.of()), + new QueryParam("price_max", false, "integer", List.of()), + new QueryParam("interest_tag", false, "integer", List.of()), + new QueryParam("service_lang_tag", false, "integer", List.of()), + new QueryParam("duration_tag", false, "integer", List.of()), + new QueryParam("other_filters_tag", false, "integer", List.of()), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("per_page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("klook-search-filters", new Operation( + "klook-search-filters", + "GET", + "/klook/search/filters", + List.of(), + List.of( + new QueryParam("vertical", false, "string", List.of("experiences", "attractions")), + new QueryParam("city_id", false, "integer", List.of()), + new QueryParam("category_id", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("klook-search-hot-keywords", new Operation( + "klook-search-hot-keywords", + "GET", + "/klook/search/hot-keywords", + List.of(), + List.of( + new QueryParam("city_id", false, "integer", List.of()), + new QueryParam("country_id", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("klook-search-unified", new Operation( + "klook-search-unified", + "GET", + "/klook/search/unified", + List.of(), + List.of( + new QueryParam("query", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("klook-suggest", new Operation( + "klook-suggest", + "GET", + "/klook/suggest", + List.of(), + List.of( + new QueryParam("query", true, "string", List.of()), + new QueryParam("limit", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("klook-verticals", new Operation( + "klook-verticals", + "GET", + "/klook/verticals", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("kohls-category", new Operation( "kohls-category", "GET", @@ -28249,9 +32512,6 @@ private static void putOperations31(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations32(Map m) { m.put("kroger-suggest", new Operation( "kroger-suggest", "GET", @@ -28426,6 +32686,9 @@ private static void putOperations32(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations37(Map m) { m.put("latimes-author", new Operation( "latimes-author", "GET", @@ -29047,9 +33310,6 @@ private static void putOperations32(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations33(Map m) { m.put("livescore-news-publishers", new Operation( "livescore-news-publishers", "GET", @@ -29211,7 +33471,7 @@ private static void putOperations33(Map m) { "/lolesports/gpr", List.of(), List.of( - new QueryParam("season", false, "string", List.of("current", "2025", "2024")), + new QueryParam("season", false, "string", List.of()), new QueryParam("league", false, "string", List.of()), new QueryParam("limit", false, "integer", List.of()), new QueryParam("history", false, "boolean", List.of())), @@ -29234,6 +33494,9 @@ private static void putOperations33(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations38(Map m) { m.put("lolesports-live", new Operation( "lolesports-live", "GET", @@ -29299,7 +33562,8 @@ private static void putOperations33(Map m) { List.of(), List.of( new QueryParam("hl", false, "string", List.of("cs-CZ", "de-DE", "en-US", "es-ES", "es-MX", "fr-FR", "hu-HU", "ja-JP", "ko-KR", "pl-PL", "pt-BR", "th-TH", "tr-TR", "vi-VN", "zh-TW")), - new QueryParam("tournament_id", true, "string", List.of())), + new QueryParam("tournament_id", true, "string", List.of()), + new QueryParam("rounds", false, "boolean", List.of("True", "False"))), List.of(), null, false, @@ -29410,6 +33674,135 @@ private static void putOperations33(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("luma-calendar", new Operation( + "luma-calendar", + "GET", + "/luma/calendar", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("luma-calendar-events", new Operation( + "luma-calendar-events", + "GET", + "/luma/calendar-events", + List.of(), + List.of( + new QueryParam("calendar_api_id", true, "string", List.of()), + new QueryParam("period", false, "string", List.of("future", "past", "specific")), + new QueryParam("after", false, "string", List.of()), + new QueryParam("before", false, "string", List.of()), + new QueryParam("pagination_limit", false, "integer", List.of()), + new QueryParam("pagination_cursor", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("luma-categories", new Operation( + "luma-categories", + "GET", + "/luma/categories", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("luma-category", new Operation( + "luma-category", + "GET", + "/luma/category", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of("family", "books", "games", "tech", "food", "ai", "running", "arts", "climate", "fitness", "wellness", "crypto"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("luma-category-events", new Operation( + "luma-category-events", + "GET", + "/luma/category-events", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of("family", "books", "games", "tech", "food", "ai", "running", "arts", "climate", "fitness", "wellness", "crypto")), + new QueryParam("query", false, "string", List.of()), + new QueryParam("pagination_limit", false, "integer", List.of()), + new QueryParam("pagination_cursor", false, "string", List.of()), + new QueryParam("latitude", false, "number", List.of()), + new QueryParam("longitude", false, "number", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("luma-event", new Operation( + "luma-event", + "GET", + "/luma/event", + List.of(), + List.of( + new QueryParam("event_api_id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("luma-place", new Operation( + "luma-place", + "GET", + "/luma/place", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("luma-place-calendars", new Operation( + "luma-place-calendars", + "GET", + "/luma/place-calendars", + List.of(), + List.of( + new QueryParam("slug", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("luma-place-events", new Operation( + "luma-place-events", + "GET", + "/luma/place-events", + List.of(), + List.of( + new QueryParam("place_slug", true, "string", List.of()), + new QueryParam("query", false, "string", List.of()), + new QueryParam("pagination_limit", false, "integer", List.of()), + new QueryParam("pagination_cursor", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("macrumors-article", new Operation( "macrumors-article", "GET", @@ -29844,6 +34237,318 @@ private static void putOperations33(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("maxpreps-rankings-groupings", new Operation( + "maxpreps-rankings-groupings", + "GET", + "/maxpreps/rankings-groupings", + List.of(), + List.of( + new QueryParam("stateCode", true, "string", List.of("AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "FL", "GA", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VA", "WA", "DC", "WV", "WI", "WY", "NN", "PS")), + new QueryParam("sportSeasonId", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("maxpreps-request-enums", new Operation( + "maxpreps-request-enums", + "GET", + "/maxpreps/request-enums", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("maxpreps-school", new Operation( + "maxpreps-school", + "GET", + "/maxpreps/school", + List.of(), + List.of( + new QueryParam("schoolId", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("maxpreps-school-contests", new Operation( + "maxpreps-school-contests", + "GET", + "/maxpreps/school-contests", + List.of(), + List.of( + new QueryParam("schoolId", true, "string", List.of()), + new QueryParam("maxLimit", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("maxpreps-school-proximal", new Operation( + "maxpreps-school-proximal", + "GET", + "/maxpreps/school-proximal", + List.of(), + List.of( + new QueryParam("schoolId", true, "string", List.of()), + new QueryParam("searchText", false, "string", List.of()), + new QueryParam("maxDistance", false, "integer", List.of()), + new QueryParam("sortOrder", false, "string", List.of("Distance", "Name")), + new QueryParam("allSeasonId", false, "string", List.of()), + new QueryParam("sportSeasonId", false, "string", List.of()), + new QueryParam("zipCode", false, "string", List.of()), + new QueryParam("byState", false, "boolean", List.of()), + new QueryParam("includeDeleted", false, "boolean", List.of()), + new QueryParam("historicalOnly", false, "boolean", List.of()), + new QueryParam("publishedOnly", false, "boolean", List.of()), + new QueryParam("maxResults", false, "integer", List.of()), + new QueryParam("startFrom", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("maxpreps-school-search", new Operation( + "maxpreps-school-search", + "GET", + "/maxpreps/school-search", + List.of(), + List.of( + new QueryParam("query", true, "string", List.of()), + new QueryParam("sortOrder", false, "string", List.of("Distance", "Name")), + new QueryParam("schoolId", false, "string", List.of()), + new QueryParam("allSeasonId", false, "string", List.of()), + new QueryParam("zipCode", false, "string", List.of()), + new QueryParam("includeDeleted", false, "boolean", List.of()), + new QueryParam("historicalOnly", false, "boolean", List.of()), + new QueryParam("publishedOnly", false, "boolean", List.of()), + new QueryParam("maxResults", false, "integer", List.of()), + new QueryParam("startFrom", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + } + + private static void putOperations39(Map m) { + m.put("maxpreps-school-seasons", new Operation( + "maxpreps-school-seasons", + "GET", + "/maxpreps/school-seasons", + List.of(), + List.of( + new QueryParam("schoolId", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("maxpreps-school-zip-search", new Operation( + "maxpreps-school-zip-search", + "GET", + "/maxpreps/school-zip-search", + List.of(), + List.of( + new QueryParam("zipCode", true, "string", List.of()), + new QueryParam("searchText", false, "string", List.of()), + new QueryParam("maxDistance", false, "integer", List.of()), + new QueryParam("allSeasonId", false, "string", List.of()), + new QueryParam("sportSeasonId", false, "string", List.of()), + new QueryParam("searchByState", false, "boolean", List.of()), + new QueryParam("searchCity", false, "string", List.of()), + new QueryParam("includeDeleted", false, "boolean", List.of()), + new QueryParam("historicalOnly", false, "boolean", List.of()), + new QueryParam("publishedOnly", false, "boolean", List.of()), + new QueryParam("startFrom", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("maxpreps-scoreboard", new Operation( + "maxpreps-scoreboard", + "GET", + "/maxpreps/scoreboard", + List.of(), + List.of( + new QueryParam("context", true, "string", List.of("National", "State", "Section", "StateDivision", "Association", "League", "DMA")), + new QueryParam("id", false, "string", List.of()), + new QueryParam("genderSport", true, "string", List.of()), + new QueryParam("level", true, "string", List.of("Varsity", "JV", "Freshman")), + new QueryParam("excludeTbaDate", false, "boolean", List.of()), + new QueryParam("nationalTeamCount", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("maxpreps-season-navigation", new Operation( + "maxpreps-season-navigation", + "GET", + "/maxpreps/season-navigation", + List.of(), + List.of( + new QueryParam("allSeasonId", true, "string", List.of()), + new QueryParam("season", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("maxpreps-sports", new Operation( + "maxpreps-sports", + "GET", + "/maxpreps/sports", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("maxpreps-states", new Operation( + "maxpreps-states", + "GET", + "/maxpreps/states", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("maxpreps-team", new Operation( + "maxpreps-team", + "GET", + "/maxpreps/team", + List.of(), + List.of( + new QueryParam("teamId", true, "string", List.of()), + new QueryParam("sportSeasonId", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("maxpreps-team-context", new Operation( + "maxpreps-team-context", + "GET", + "/maxpreps/team-context", + List.of(), + List.of( + new QueryParam("teamId", true, "string", List.of()), + new QueryParam("sportSeasonId", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("maxpreps-team-next-contest", new Operation( + "maxpreps-team-next-contest", + "GET", + "/maxpreps/team-next-contest", + List.of(), + List.of( + new QueryParam("teamId", true, "string", List.of()), + new QueryParam("sportSeasonId", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("maxpreps-team-rankings", new Operation( + "maxpreps-team-rankings", + "GET", + "/maxpreps/team-rankings", + List.of(), + List.of( + new QueryParam("type", true, "string", List.of("national", "state", "section")), + new QueryParam("allSeasonId", true, "string", List.of()), + new QueryParam("sportSeasonId", true, "string", List.of()), + new QueryParam("stateCode", false, "string", List.of("AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "FL", "GA", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VA", "WA", "DC", "WV", "WI", "WY", "NN", "PS")), + new QueryParam("sectionId", false, "string", List.of()), + new QueryParam("count", false, "integer", List.of()), + new QueryParam("teamSize", false, "integer", List.of()), + new QueryParam("page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("maxpreps-team-roster-summary", new Operation( + "maxpreps-team-roster-summary", + "GET", + "/maxpreps/team-roster-summary", + List.of(), + List.of( + new QueryParam("teamId", true, "string", List.of()), + new QueryParam("sportSeasonId", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("maxpreps-team-schedule", new Operation( + "maxpreps-team-schedule", + "GET", + "/maxpreps/team-schedule", + List.of(), + List.of( + new QueryParam("teamId", true, "string", List.of()), + new QueryParam("sportSeasonId", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("maxpreps-team-stat-leaders", new Operation( + "maxpreps-team-stat-leaders", + "GET", + "/maxpreps/team-stat-leaders", + List.of(), + List.of( + new QueryParam("teamId", true, "string", List.of()), + new QueryParam("sportSeasonId", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("maxpreps-tournament-sports", new Operation( + "maxpreps-tournament-sports", + "GET", + "/maxpreps/tournament-sports", + List.of(), + List.of( + new QueryParam("stateCode", false, "string", List.of("AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "FL", "GA", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VA", "WA", "DC", "WV", "WI", "WY", "NN", "PS"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("mcdonalds-categories", new Operation( "mcdonalds-categories", "GET", @@ -29871,9 +34576,6 @@ private static void putOperations33(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations34(Map m) { m.put("mcdonalds-item-list", new Operation( "mcdonalds-item-list", "GET", @@ -30465,6 +35167,9 @@ private static void putOperations34(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations40(Map m) { m.put("metaculus-question-options", new Operation( "metaculus-question-options", "GET", @@ -30698,9 +35403,6 @@ private static void putOperations34(Map m) { List.of("ApiKeyAuth"), true, List.of("cursor"))); - } - - private static void putOperations35(Map m) { m.put("microsoftstore-recommended", new Operation( "microsoftstore-recommended", "GET", @@ -31565,6 +36267,9 @@ private static void putOperations35(Map m) { List.of("ApiKeyAuth"), true, List.of())); + } + + private static void putOperations41(Map m) { m.put("mlb-statcast-catcher-throwing-details", new Operation( "mlb-statcast-catcher-throwing-details", "GET", @@ -31937,9 +36642,6 @@ private static void putOperations35(Map m) { List.of("ApiKeyAuth"), true, List.of())); - } - - private static void putOperations36(Map m) { m.put("mlb-statcast-pitch-tempo-player", new Operation( "mlb-statcast-pitch-tempo-player", "GET", @@ -32061,476 +36763,1734 @@ private static void putOperations36(Map m) { null, false, List.of("ApiKeyAuth"), - true, + true, + List.of())); + m.put("mlb-statcast-running-game-details", new Operation( + "mlb-statcast-running-game-details", + "GET", + "/mlb/statcast-running-game-details", + List.of(), + List.of( + new QueryParam("entity_id", true, "integer", List.of()), + new QueryParam("type", false, "string", List.of("Pit", "Pitching Team")), + new QueryParam("game_type", false, "string", List.of("Regular", "Playoff", "All")), + new QueryParam("pitch_hand", false, "string", List.of("all", "L", "R")), + new QueryParam("runner_moved", false, "string", List.of("All", "Advance", "Out", "Hold")), + new QueryParam("target_base", false, "string", List.of("All", "2B", "3B")), + new QueryParam("prior_pk", false, "string", List.of("All", "0", "1", "2", "3")), + new QueryParam("n", false, "string", List.of("q", "1", "50", "100", "200", "500", "1000", "1500", "2000")), + new QueryParam("season_start", false, "integer", List.of("2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("season_end", false, "integer", List.of("2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("split", false, "string", List.of("yes", "no")), + new QueryParam("team", false, "string", List.of("108", "117", "133", "141", "144", "158", "138", "112", "109", "119", "137", "114", "136", "146", "121", "120", "110", "135", "143", "134", "140", "139", "113", "111", "115", "118", "116", "142", "145", "147")), + new QueryParam("with_team_only", false, "boolean", List.of()), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("mlb-statcast-sprint-speed", new Operation( + "mlb-statcast-sprint-speed", + "GET", + "/mlb/statcast-sprint-speed", + List.of(), + List.of( + new QueryParam("min_season", false, "string", List.of("2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("max_season", false, "string", List.of("2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), + new QueryParam("position", false, "string", List.of("all", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10")), + new QueryParam("team_id", false, "string", List.of("108", "117", "133", "141", "144", "158", "138", "112", "109", "119", "137", "114", "136", "146", "121", "120", "110", "135", "143", "134", "140", "139", "113", "111", "115", "118", "116", "142", "145", "147")), + new QueryParam("minimum_runs", false, "string", List.of("0", "5", "10", "25", "50", "75", "100", "150", "200", "250")), + new QueryParam("sort", false, "string", List.of("player", "team", "position", "age", "competitive_runs", "bolts", "home_to_first", "sprint_speed")), + new QueryParam("sort_dir", false, "string", List.of("asc", "desc")), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("mlb-statcast-sprint-speed-teams", new Operation( + "mlb-statcast-sprint-speed-teams", + "GET", + "/mlb/statcast-sprint-speed-teams", + List.of(), + List.of( + new QueryParam("season", false, "string", List.of("2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026", "all")), + new QueryParam("team", false, "string", List.of("LAA", "HOU", "OAK", "TOR", "ATL", "MIL", "STL", "CHC", "ARI", "LAD", "SF", "CLE", "SEA", "MIA", "NYM", "WSH", "BAL", "SD", "PHI", "PIT", "TEX", "TB", "BOS", "CIN", "COL", "KC", "DET", "MIN", "CWS", "NYY")), + new QueryParam("sort", false, "string", List.of("season", "team", "players", "competitive_runs", "average_sprint_speed", "fastest_sprint_speed", "slowest_sprint_speed", "bolts", "average_home_to_first")), + new QueryParam("sort_dir", false, "string", List.of("asc", "desc")), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("mlb-statcast-swing-path", new Operation( + "mlb-statcast-swing-path", + "GET", + "/mlb/statcast-swing-path", + List.of(), + List.of( + new QueryParam("type", false, "string", List.of("batter", "batting-team", "league")), + new QueryParam("season_start", false, "string", List.of("2023", "2024", "2025", "2026")), + new QueryParam("season_end", false, "string", List.of("2023", "2024", "2025", "2026")), + new QueryParam("game_type", false, "string", List.of("Any", "Exhibition", "Playoff", "Regular")), + new QueryParam("min_swings", false, "string", List.of("q", "1", "5", "10", "25", "50", "100", "200", "500", "1000")), + new QueryParam("min_group_swings", false, "string", List.of("1", "5", "10", "25", "50", "100", "200", "500", "1000")), + new QueryParam("team_id", false, "string", List.of("108", "109", "110", "111", "112", "113", "114", "115", "116", "117", "118", "119", "120", "121", "133", "134", "135", "136", "137", "138", "139", "140", "141", "142", "143", "144", "145", "146", "147", "158")), + new QueryParam("date_start", false, "string", List.of()), + new QueryParam("date_end", false, "string", List.of()), + new QueryParam("bat_side", false, "string", List.of("L", "R")), + new QueryParam("contact_type", false, "string", List.of("2", "4", "9")), + new QueryParam("is_hard_hit", false, "string", List.of("1", "0")), + new QueryParam("attack_zone", false, "string", List.of("0", "1", "1.1", "2", "3")), + new QueryParam("pitch_hand", false, "string", List.of("L", "R")), + new QueryParam("sort", false, "string", List.of("name", "team_name", "avg_sweetspot_speed_mph", "avg_plane_vertical_angle", "attack_angle", "attack_direction_pullopp", "rate_ideal_attack_angle", "avg_intercept_y_vs_plate", "avg_intercept_y_vs_batter", "avg_batter_y_position", "avg_batter_x_position", "avg_foot_sep0", "avg_foot_angle0", "n_swings")), + new QueryParam("sort_dir", false, "string", List.of("asc", "desc")), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("mlb-statcast-swing-timing", new Operation( + "mlb-statcast-swing-timing", + "GET", + "/mlb/statcast-swing-timing", + List.of(), + List.of( + new QueryParam("type", false, "string", List.of("batter", "batting-team", "pitcher", "pitching-team", "league")), + new QueryParam("seasons", false, "array", List.of("2023", "2024", "2025", "2026")), + new QueryParam("game_types", false, "array", List.of("R", "A", "F", "D", "L", "W")), + new QueryParam("splits", false, "array", List.of("api_pitch_type_group03", "api_pitch_type_group09", "api_game_date_month_text", "bat_contact_code", "game_type", "is_hit_into_play_hardhit", "is_best_speed", "timing_x_tiedupflail", "timing_y_earlylate", "timing_z_overunder", "pitch_hand", "bat_side", "is_pre_ball_count_3", "is_pre_strike_count_2", "pitchzone_height_code", "is_starter_pitcher")), + new QueryParam("min_swings", false, "string", List.of("q", "1", "5", "10", "25", "50", "100", "200", "500", "1000")), + new QueryParam("min_split", false, "string", List.of("1", "5", "10", "25", "50", "100", "200", "500", "1000")), + new QueryParam("split_year", false, "string", List.of("1", "0")), + new QueryParam("teams", false, "array", List.of("108", "109", "110", "111", "112", "113", "114", "115", "116", "117", "118", "119", "120", "121", "133", "134", "135", "136", "137", "138", "139", "140", "141", "142", "143", "144", "145", "146", "147", "158")), + new QueryParam("date_start", false, "string", List.of()), + new QueryParam("date_end", false, "string", List.of()), + new QueryParam("bat_side", false, "string", List.of("L", "R")), + new QueryParam("contact_type", false, "string", List.of("2", "4", "9")), + new QueryParam("attack_zone", false, "string", List.of("0", "1", "1.1", "2", "3")), + new QueryParam("pitch_hand", false, "string", List.of("L", "R")), + new QueryParam("pitch_types", false, "array", List.of("FF", "SI", "FC", "CH", "FS", "FO", "SC", "CU", "SL", "ST", "SV", "KN")), + new QueryParam("counts", false, "array", List.of("00", "01", "02", "10", "11", "12", "20", "21", "22", "30", "31", "32")), + new QueryParam("swing_timing_x", false, "array", List.of("Tiedup", "Centered", "Flail")), + new QueryParam("swing_timing_y", false, "array", List.of("Early", "OnTime", "Late")), + new QueryParam("swing_timing_z", false, "array", List.of("Under", "Linedup", "Over")), + new QueryParam("flags", false, "array", List.of("is_timing_xyz_flawed", "is_timing_xyz_perfect")), + new QueryParam("not_flags", false, "array", List.of("is_timing_xyz_flawed", "is_timing_xyz_perfect")), + new QueryParam("sort", false, "string", List.of("name", "team_name", "pitch_hand_type", "bat_side_type", "n_swings", "competitive_swings", "strikes_swinging", "miss_distance", "flails", "centers", "tied_ups", "earlys", "on_times", "lates", "unders", "lined_ups", "overs", "delta_run_exp", "whiff_rate", "competitive_percent", "perfect_percent", "flawed_percent")), + new QueryParam("sort_dir", false, "string", List.of("asc", "desc")), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("mlb-statcast-swing-timing-details", new Operation( + "mlb-statcast-swing-timing-details", + "GET", + "/mlb/statcast-swing-timing-details", + List.of(), + List.of( + new QueryParam("row_id", true, "string", List.of()), + new QueryParam("type", true, "string", List.of("batter", "pitcher")), + new QueryParam("seasons", false, "array", List.of("2023", "2024", "2025", "2026")), + new QueryParam("game_types", false, "array", List.of("R", "A", "F", "D", "L", "W")), + new QueryParam("splits", false, "array", List.of("api_pitch_type_group03", "api_pitch_type_group09", "api_game_date_month_text", "bat_contact_code", "game_type", "is_hit_into_play_hardhit", "is_best_speed", "timing_x_tiedupflail", "timing_y_earlylate", "timing_z_overunder", "pitch_hand", "bat_side", "is_pre_ball_count_3", "is_pre_strike_count_2", "pitchzone_height_code", "is_starter_pitcher")), + new QueryParam("min_swings", false, "string", List.of("q", "1", "5", "10", "25", "50", "100", "200", "500", "1000")), + new QueryParam("min_split", false, "string", List.of("1", "5", "10", "25", "50", "100", "200", "500", "1000")), + new QueryParam("split_year", false, "string", List.of("0", "1")), + new QueryParam("teams", false, "array", List.of("108", "117", "133", "141", "144", "158", "138", "112", "109", "119", "137", "114", "136", "146", "121", "120", "110", "135", "143", "134", "113", "111", "115", "118", "116", "142", "145", "147")), + new QueryParam("date_start", false, "string", List.of()), + new QueryParam("date_end", false, "string", List.of()), + new QueryParam("bat_side", false, "string", List.of("L", "R")), + new QueryParam("contact_type", false, "string", List.of("2", "4", "9")), + new QueryParam("attack_zone", false, "string", List.of("0", "1", "1.1", "2", "3")), + new QueryParam("pitch_hand", false, "string", List.of("L", "R")), + new QueryParam("pitch_types", false, "array", List.of("FF", "SI", "FC", "CH", "FS", "FO", "SC", "CU", "SL", "ST", "SV", "KN")), + new QueryParam("counts", false, "array", List.of("00", "01", "02", "10", "11", "12", "20", "21", "22", "30", "31", "32")), + new QueryParam("swing_timing_x", false, "array", List.of("Tiedup", "Centered", "Flail")), + new QueryParam("swing_timing_y", false, "array", List.of("Early", "OnTime", "Late")), + new QueryParam("swing_timing_z", false, "array", List.of("Under", "Linedup", "Over")), + new QueryParam("flags", false, "array", List.of("is_timing_xyz_flawed", "is_timing_xyz_perfect")), + new QueryParam("not_flags", false, "array", List.of("is_timing_xyz_flawed", "is_timing_xyz_perfect"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("mlb-statcast-top-performers", new Operation( + "mlb-statcast-top-performers", + "GET", + "/mlb/statcast-top-performers", + List.of(), + List.of( + new QueryParam("year", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("mlb-statcast-year-to-year", new Operation( + "mlb-statcast-year-to-year", + "GET", + "/mlb/statcast-year-to-year", + List.of(), + List.of( + new QueryParam("group", false, "string", List.of("Batter", "Pitcher", "Batter Team", "Pitcher Team")), + new QueryParam("type", false, "string", List.of("ba", "xba", "obp", "xobp", "slg", "xslg", "iso", "xiso", "babip", "woba", "xwoba", "wobacon", "xwobacon", "bacon", "xbacon", "hard_hit_percent", "exit_velocity_avg", "sweet_spot_percent", "barrel_batted_rate", "launch_angle_avg", "avg_swing_speed", "attack_angle", "ideal_angle_rate", "attack_direction", "vertical_swing_path", "avg_swing_length", "fastball_velo", "breaking_velo", "offspeed_velo", "barrels", "popups_percent", "flyballs_percent", "linedrives_percent", "groundballs_percent", "pull_percent", "straightaway_percent", "opposite_percent", "poorlyweak_percent", "pull_percent_airballs", "poorlytopped_percent", "poorlyunder_percent", "flareburner_percent", "solidcontact_percent", "hr_flyballs_percent", "popups", "flyballs", "linedrives", "groundballs", "in_zone_percent", "out_zone_percent", "edge_percent", "z_swing_percent", "oz_swing_percent", "iz_contact_percent", "oz_contact_percent", "whiff_percent", "f_strike_percent", "f_swing_percent", "swing_percent", "meatball_swing_percent", "meatball_percent", "z_swing_miss_percent", "oz_swing_miss_percent", "in_zone", "out_zone", "edge", "in_zone_swing", "out_zone_swing", "in_zone_swing_miss", "out_zone_swing_miss", "pitch_count", "pa", "ab", "hit", "single", "double", "triple", "home_run", "walk", "strikeout", "k_percent", "bb_percent", "hbp", "batted_ball", "pitch_usage_fastball", "pitch_usage_offspeed", "pitch_usage_breaking", "pitch_count_fastball", "pitch_count_offspeed", "pitch_count_breaking")), + new QueryParam("year", false, "string", List.of("2025", "2024", "2023", "2022", "2021", "2020", "2019", "2018", "2017")), + new QueryParam("sort", false, "string", List.of()), + new QueryParam("sort_dir", false, "string", List.of("asc", "desc")), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("mlb-team-roster", new Operation( + "mlb-team-roster", + "GET", + "/mlb/team-roster", + List.of(), + List.of( + new QueryParam("team_id", true, "string", List.of()), + new QueryParam("season", false, "integer", List.of()), + new QueryParam("roster_type", false, "string", List.of("40Man", "fullSeason", "fullRoster", "nonRosterInvitees", "active", "allTime", "depthChart", "gameday", "coach"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("mlb-team-stats", new Operation( + "mlb-team-stats", + "GET", + "/mlb/team-stats", + List.of(), + List.of( + new QueryParam("team_id", true, "string", List.of()), + new QueryParam("season", false, "integer", List.of()), + new QueryParam("group", true, "string", List.of("hitting", "pitching", "fielding", "catching", "running", "game", "team", "streak")), + new QueryParam("stat_type", false, "string", List.of("projected", "projectedRos", "yearByYear", "yearByYearAdvanced", "yearByYearPlayoffs", "season", "standard", "advanced", "career", "careerRegularSeason", "careerAdvanced", "seasonAdvanced", "careerStatSplits", "careerPlayoffs", "gameLog", "playLog", "pitchLog", "pitchArsenal", "outsAboveAverage", "expectedStatistics", "sabermetrics", "sprayChart", "tracking", "vsPlayer", "vsPlayerTotal", "vsPlayer5Y", "vsTeam", "vsTeam5Y", "vsTeamTotal", "lastXGames", "byDateRange", "byDateRangeAdvanced", "byMonth", "byMonthPlayoffs", "byDayOfWeek", "byDayOfWeekPlayoffs", "homeAndAway", "homeAndAwayPlayoffs", "winLoss", "winLossPlayoffs", "rankings", "rankingsByYear", "statsSingleSeason", "statsSingleSeasonAdvanced", "hotColdZones", "availableStats", "opponentsFaced", "gameTypeStats", "firstYearStats", "lastYearStats", "statSplits", "statSplitsAdvanced", "atGameStart", "vsOpponents", "sabermetricsMultiTeam", "projected_Zips", "projected_ZipsRos", "projected_Zips2YR", "projected_Zips3YR")), + new QueryParam("game_type", false, "string", List.of("S", "R", "F", "D", "L", "W", "C", "P", "A", "I", "E")), + new QueryParam("start_date", false, "string", List.of()), + new QueryParam("end_date", false, "string", List.of()), + new QueryParam("opponent_team_id", false, "string", List.of()), + new QueryParam("opponent_player_id", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("mlb-teams", new Operation( + "mlb-teams", + "GET", + "/mlb/teams", + List.of(), + List.of( + new QueryParam("season", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("mlb-transactions", new Operation( + "mlb-transactions", + "GET", + "/mlb/transactions", + List.of(), + List.of( + new QueryParam("start_date", true, "string", List.of()), + new QueryParam("end_date", true, "string", List.of()), + new QueryParam("team_id", false, "string", List.of()), + new QueryParam("player_id", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("mlive-news", new Operation( + "mlive-news", + "GET", + "/mlive/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modaoperandi-categories", new Operation( + "modaoperandi-categories", + "GET", + "/modaoperandi/categories", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modaoperandi-designers", new Operation( + "modaoperandi-designers", + "GET", + "/modaoperandi/designers", + List.of(), + List.of( + new QueryParam("gender", true, "string", List.of("women", "men"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modaoperandi-product", new Operation( + "modaoperandi-product", + "GET", + "/modaoperandi/product", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modaoperandi-search", new Operation( + "modaoperandi-search", + "GET", + "/modaoperandi/search", + List.of(), + List.of( + new QueryParam("gender", true, "string", List.of("women", "men")), + new QueryParam("q", false, "string", List.of()), + new QueryParam("category", false, "string", List.of()), + new QueryParam("designer", false, "string", List.of()), + new QueryParam("color", false, "string", List.of()), + new QueryParam("size", false, "string", List.of()), + new QueryParam("attribute", false, "string", List.of()), + new QueryParam("availability", false, "string", List.of("available_now", "preorder", "trunkshow")), + new QueryParam("price_min", false, "number", List.of()), + new QueryParam("price_max", false, "number", List.of()), + new QueryParam("on_sale", false, "boolean", List.of()), + new QueryParam("sort", false, "string", List.of("default", "price_low_to_high", "price_high_to_low", "newest")), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("limit", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("modrinth-collection", new Operation( + "modrinth-collection", + "GET", + "/modrinth/collection/{id}", + List.of("id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-collections", new Operation( + "modrinth-collections", + "GET", + "/modrinth/collections", + List.of(), + List.of( + new QueryParam("ids", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-metadata-link-platforms", new Operation( + "modrinth-metadata-link-platforms", + "GET", + "/modrinth/metadata/link-platforms", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-metadata-loader-fields", new Operation( + "modrinth-metadata-loader-fields", + "GET", + "/modrinth/metadata/loader-fields", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-metadata-loader-field-values", new Operation( + "modrinth-metadata-loader-field-values", + "GET", + "/modrinth/metadata/loader-fields/{field}", + List.of("field"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-metadata-loaders", new Operation( + "modrinth-metadata-loaders", + "GET", + "/modrinth/metadata/loaders", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-organization", new Operation( + "modrinth-organization", + "GET", + "/modrinth/organization/{id}", + List.of("id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-organization-projects", new Operation( + "modrinth-organization-projects", + "GET", + "/modrinth/organization/{id}/projects", + List.of("id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-organizations", new Operation( + "modrinth-organizations", + "GET", + "/modrinth/organizations", + List.of(), + List.of( + new QueryParam("ids", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-project", new Operation( + "modrinth-project", + "GET", + "/modrinth/project/{id}", + List.of("id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-check-project", new Operation( + "modrinth-check-project", + "GET", + "/modrinth/project/{id}/check", + List.of("id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-dependencies", new Operation( + "modrinth-dependencies", + "GET", + "/modrinth/project/{id}/dependencies", + List.of("id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-project-disclosures", new Operation( + "modrinth-project-disclosures", + "GET", + "/modrinth/project/{id}/disclosures", + List.of("id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-project-versions", new Operation( + "modrinth-project-versions", + "GET", + "/modrinth/project/{id}/version", + List.of("id"), + List.of( + new QueryParam("loaders", false, "string", List.of()), + new QueryParam("game_versions", false, "string", List.of()), + new QueryParam("featured", false, "boolean", List.of()), + new QueryParam("include_changelog", false, "boolean", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-project-version", new Operation( + "modrinth-project-version", + "GET", + "/modrinth/project/{id}/version/{number}", + List.of("id", "number"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-projects", new Operation( + "modrinth-projects", + "GET", + "/modrinth/projects", + List.of(), + List.of( + new QueryParam("ids", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-random-projects", new Operation( + "modrinth-random-projects", + "GET", + "/modrinth/projects_random", + List.of(), + List.of( + new QueryParam("count", true, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-search", new Operation( + "modrinth-search", + "GET", + "/modrinth/search", + List.of(), + List.of( + new QueryParam("query", false, "string", List.of()), + new QueryParam("facets", false, "string", List.of()), + new QueryParam("index", false, "string", List.of("relevance", "downloads", "follows", "newest", "updated")), + new QueryParam("offset", false, "integer", List.of()), + new QueryParam("limit", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("modrinth-statistics", new Operation( + "modrinth-statistics", + "GET", + "/modrinth/statistics", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-license", new Operation( + "modrinth-license", + "GET", + "/modrinth/tag/license/{id}", + List.of("id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-tags", new Operation( + "modrinth-tags", + "GET", + "/modrinth/tag/{type}", + List.of("type"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + } + + private static void putOperations42(Map m) { + m.put("modrinth-forge-updates", new Operation( + "modrinth-forge-updates", + "GET", + "/modrinth/updates/{id}/forge_updates.json", + List.of("id"), + List.of( + new QueryParam("neoforge", false, "string", List.of("include", "only"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-search-v3", new Operation( + "modrinth-search-v3", + "GET", + "/modrinth/v3/search", + List.of(), + List.of( + new QueryParam("query", false, "string", List.of()), + new QueryParam("index", false, "string", List.of("relevance", "downloads", "follows", "newest", "updated", "date_created", "date_modified", "minecraft_java_server.verified_plays_2w", "minecraft_java_server.ping.data.players_online")), + new QueryParam("offset", false, "integer", List.of()), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("new_filters", false, "string", List.of()), + new QueryParam("facets", false, "string", List.of()), + new QueryParam("filters", false, "string", List.of()), + new QueryParam("version", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("modrinth-search-v3-body", new Operation( + "modrinth-search-v3-body", + "POST", + "/modrinth/v3/search", + List.of(), + List.of(), + List.of(), + "body", + true, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-search-v3-options", new Operation( + "modrinth-search-v3-options", + "GET", + "/modrinth/v3/search/options", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-version", new Operation( + "modrinth-version", + "GET", + "/modrinth/version/{id}", + List.of("id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-file-projects", new Operation( + "modrinth-file-projects", + "POST", + "/modrinth/version_file/project", + List.of(), + List.of(), + List.of(), + "body", + true, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-file-version", new Operation( + "modrinth-file-version", + "GET", + "/modrinth/version_file/{hash}", + List.of("hash"), + List.of( + new QueryParam("algorithm", false, "string", List.of("sha1", "sha512"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-file-update", new Operation( + "modrinth-file-update", + "POST", + "/modrinth/version_file/{hash}/update", + List.of("hash"), + List.of( + new QueryParam("algorithm", false, "string", List.of("sha1", "sha512"))), + List.of(), + "body", + true, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-file-versions", new Operation( + "modrinth-file-versions", + "POST", + "/modrinth/version_files", + List.of(), + List.of(), + List.of(), + "body", + true, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-files-update", new Operation( + "modrinth-files-update", + "POST", + "/modrinth/version_files/update", + List.of(), + List.of(), + List.of(), + "body", + true, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-files-update-individual", new Operation( + "modrinth-files-update-individual", + "POST", + "/modrinth/version_files/update_individual", + List.of(), + List.of(), + List.of(), + "body", + true, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-files-update-many", new Operation( + "modrinth-files-update-many", + "POST", + "/modrinth/version_files/update_many", + List.of(), + List.of(), + List.of(), + "body", + true, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("modrinth-versions", new Operation( + "modrinth-versions", + "GET", + "/modrinth/versions", + List.of(), + List.of( + new QueryParam("ids", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("moncler-categories", new Operation( + "moncler-categories", + "GET", + "/moncler/categories", + List.of(), + List.of( + new QueryParam("levels", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("moncler-category", new Operation( + "moncler-category", + "GET", + "/moncler/category", + List.of(), + List.of( + new QueryParam("category_id", true, "string", List.of()), + new QueryParam("sort", false, "string", List.of("price-high-to-low", "price-low-to-high")), + new QueryParam("filter", false, "array", List.of()), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("moncler-product", new Operation( + "moncler-product", + "GET", + "/moncler/product", + List.of(), + List.of( + new QueryParam("product_id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("moncler-search", new Operation( + "moncler-search", + "GET", + "/moncler/search", + List.of(), + List.of( + new QueryParam("q", true, "string", List.of()), + new QueryParam("sort", false, "string", List.of("price-high-to-low", "price-low-to-high")), + new QueryParam("filter", false, "array", List.of()), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("moncler-stores", new Operation( + "moncler-stores", + "GET", + "/moncler/stores", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("moncler-suggest", new Operation( + "moncler-suggest", + "GET", + "/moncler/suggest", + List.of(), + List.of( + new QueryParam("q", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("moneycontrol-article", new Operation( + "moneycontrol-article", + "GET", + "/moneycontrol/article", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("moneycontrol-author", new Operation( + "moneycontrol-author", + "GET", + "/moneycontrol/author", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("moneycontrol-headlines", new Operation( + "moneycontrol-headlines", + "GET", + "/moneycontrol/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of("business", "markets", "economy", "companies", "personal-finance", "ipo", "startup", "commodities", "earnings", "insurance", "banks", "stocks", "mutual-funds", "real-estate", "funding", "information-technology", "india", "politics", "trends", "interview", "opinion", "currency", "telecom", "world", "city", "banking", "explainers", "technology", "automobile", "sports", "cricket", "football", "entertainment", "bollywood", "hollywood", "ott", "tv", "regional", "music", "lifestyle", "beauty", "parenting", "relationship", "home-garden", "health-and-fitness", "education", "science", "astrology", "religion", "travel", "artificial-intelligence", "books"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("moneycontrol-news", new Operation( + "moneycontrol-news", + "GET", + "/moneycontrol/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("moneycontrol-sections", new Operation( + "moneycontrol-sections", + "GET", + "/moneycontrol/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("monitors-list", new Operation( + "monitors-list", + "GET", + "/monitors", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("monitors-create", new Operation( + "monitors-create", + "POST", + "/monitors", + List.of(), + List.of(), + List.of(), + "request", + true, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("monitors-delete", new Operation( + "monitors-delete", + "DELETE", + "/monitors/{id}", + List.of("id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("monitors-get", new Operation( + "monitors-get", + "GET", + "/monitors/{id}", + List.of("id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("monitors-update", new Operation( + "monitors-update", + "PATCH", + "/monitors/{id}", + List.of("id"), + List.of(), + List.of(), + "request", + true, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("monitors-checks", new Operation( + "monitors-checks", + "GET", + "/monitors/{id}/checks", + List.of("id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motleyfool-article", new Operation( + "motleyfool-article", + "GET", + "/motleyfool/article", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motleyfool-author", new Operation( + "motleyfool-author", + "GET", + "/motleyfool/author", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motleyfool-headlines", new Operation( + "motleyfool-headlines", + "GET", + "/motleyfool/headlines", + List.of(), + List.of( + new QueryParam("section", true, "string", List.of("trending-news", "news", "market-movers", "tech-stock-news", "market-trends", "crypto-news", "markets", "most-active-stocks", "top-stock-gainers", "top-stock-losers"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motleyfool-news", new Operation( + "motleyfool-news", + "GET", + "/motleyfool/news", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motleyfool-sections", new Operation( + "motleyfool-sections", + "GET", + "/motleyfool/sections", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motogp-bmw-award", new Operation( + "motogp-bmw-award", + "GET", + "/motogp/bmw-award", + List.of(), + List.of( + new QueryParam("season_year", true, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motogp-categories", new Operation( + "motogp-categories", + "GET", + "/motogp/categories", + List.of(), + List.of( + new QueryParam("season_uuid", false, "string", List.of()), + new QueryParam("event_uuid", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motogp-circuit-poles", new Operation( + "motogp-circuit-poles", + "GET", + "/motogp/circuit-poles", + List.of(), + List.of( + new QueryParam("circuit_uuid", true, "string", List.of()), + new QueryParam("category_name", true, "string", List.of("motogp", "moto2", "moto3", "motoe"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motogp-circuit-records", new Operation( + "motogp-circuit-records", + "GET", + "/motogp/circuit-records", + List.of(), + List.of( + new QueryParam("circuit_uuid", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motogp-circuit-wins", new Operation( + "motogp-circuit-wins", + "GET", + "/motogp/circuit-wins", + List.of(), + List.of( + new QueryParam("circuit_uuid", true, "string", List.of()), + new QueryParam("category_name", true, "string", List.of("motogp", "moto2", "moto3", "motoe"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motogp-classifications", new Operation( + "motogp-classifications", + "GET", + "/motogp/classifications", + List.of(), + List.of( + new QueryParam("session_uuid", true, "string", List.of()), + new QueryParam("test", false, "boolean", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motogp-content-categories", new Operation( + "motogp-content-categories", + "GET", + "/motogp/content/categories", + List.of(), + List.of( + new QueryParam("season_year", true, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motogp-content-events", new Operation( + "motogp-content-events", + "GET", + "/motogp/content/events", + List.of(), + List.of( + new QueryParam("season_year", true, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motogp-content-event", new Operation( + "motogp-content-event", + "GET", + "/motogp/content/events/{id}", + List.of("id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motogp-latest-session", new Operation( + "motogp-latest-session", + "GET", + "/motogp/content/sessions/latest", + List.of(), + List.of( + new QueryParam("category_legacy_id", false, "integer", List.of("-1", "1", "2", "3", "5", "7", "8", "9", "10", "19")), + new QueryParam("event_kind", false, "string", List.of("gp", "test"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motogp-next-live-session", new Operation( + "motogp-next-live-session", + "GET", + "/motogp/content/sessions/next-live", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motogp-entry-list", new Operation( + "motogp-entry-list", + "GET", + "/motogp/entries", + List.of(), + List.of( + new QueryParam("event_uuid", true, "string", List.of()), + new QueryParam("category_uuid", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motogp-entry-grid-options", new Operation( + "motogp-entry-grid-options", + "GET", + "/motogp/entry-grid-options/{id}", + List.of("id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motogp-event-files", new Operation( + "motogp-event-files", + "GET", + "/motogp/event-files", + List.of(), + List.of( + new QueryParam("event_uuid", true, "string", List.of()), + new QueryParam("category_uuid", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motogp-events", new Operation( + "motogp-events", + "GET", + "/motogp/events", + List.of(), + List.of( + new QueryParam("season_uuid", true, "string", List.of()), + new QueryParam("is_finished", false, "boolean", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motogp-seasons", new Operation( + "motogp-seasons", + "GET", + "/motogp/seasons", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motogp-sessions", new Operation( + "motogp-sessions", + "GET", + "/motogp/sessions", + List.of(), + List.of( + new QueryParam("event_uuid", true, "string", List.of()), + new QueryParam("category_uuid", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motogp-standings", new Operation( + "motogp-standings", + "GET", + "/motogp/standings", + List.of(), + List.of( + new QueryParam("season_uuid", true, "string", List.of()), + new QueryParam("category_uuid", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motogp-standings-files", new Operation( + "motogp-standings-files", + "GET", + "/motogp/standings-files", + List.of(), + List.of( + new QueryParam("season_uuid", true, "string", List.of()), + new QueryParam("category_uuid", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("motogp-starting-grid", new Operation( + "motogp-starting-grid", + "GET", + "/motogp/starting-grid", + List.of(), + List.of( + new QueryParam("season_year", true, "integer", List.of()), + new QueryParam("shortname", true, "string", List.of()), + new QueryParam("category_name", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("nascar-live-feed", new Operation( + "nascar-live-feed", + "GET", + "/nascar/live-feed", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("nascar-races", new Operation( + "nascar-races", + "GET", + "/nascar/races", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("nascar-season-races", new Operation( + "nascar-season-races", + "GET", + "/nascar/races/{season}", + List.of("season"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, List.of())); - m.put("mlb-statcast-running-game-details", new Operation( - "mlb-statcast-running-game-details", + m.put("nascar-series", new Operation( + "nascar-series", "GET", - "/mlb/statcast-running-game-details", + "/nascar/series", List.of(), List.of( - new QueryParam("entity_id", true, "integer", List.of()), - new QueryParam("type", false, "string", List.of("Pit", "Pitching Team")), - new QueryParam("game_type", false, "string", List.of("Regular", "Playoff", "All")), - new QueryParam("pitch_hand", false, "string", List.of("all", "L", "R")), - new QueryParam("runner_moved", false, "string", List.of("All", "Advance", "Out", "Hold")), - new QueryParam("target_base", false, "string", List.of("All", "2B", "3B")), - new QueryParam("prior_pk", false, "string", List.of("All", "0", "1", "2", "3")), - new QueryParam("n", false, "string", List.of("q", "1", "50", "100", "200", "500", "1000", "1500", "2000")), - new QueryParam("season_start", false, "integer", List.of("2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), - new QueryParam("season_end", false, "integer", List.of("2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), - new QueryParam("split", false, "string", List.of("yes", "no")), - new QueryParam("team", false, "string", List.of("108", "117", "133", "141", "144", "158", "138", "112", "109", "119", "137", "114", "136", "146", "121", "120", "110", "135", "143", "134", "140", "139", "113", "111", "115", "118", "116", "142", "145", "147")), - new QueryParam("with_team_only", false, "boolean", List.of()), - new QueryParam("limit", false, "integer", List.of()), - new QueryParam("offset", false, "integer", List.of())), + new QueryParam("season", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), - true, + false, List.of())); - m.put("mlb-statcast-sprint-speed", new Operation( - "mlb-statcast-sprint-speed", + m.put("nascar-race-weekend", new Operation( + "nascar-race-weekend", "GET", - "/mlb/statcast-sprint-speed", + "/nascar/weekend/{season}/{series}/{race}", + List.of("season", "series", "race"), List.of(), - List.of( - new QueryParam("min_season", false, "string", List.of("2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), - new QueryParam("max_season", false, "string", List.of("2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026")), - new QueryParam("position", false, "string", List.of("all", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10")), - new QueryParam("team_id", false, "string", List.of("108", "117", "133", "141", "144", "158", "138", "112", "109", "119", "137", "114", "136", "146", "121", "120", "110", "135", "143", "134", "140", "139", "113", "111", "115", "118", "116", "142", "145", "147")), - new QueryParam("minimum_runs", false, "string", List.of("0", "5", "10", "25", "50", "75", "100", "150", "200", "250")), - new QueryParam("sort", false, "string", List.of("player", "team", "position", "age", "competitive_runs", "bolts", "home_to_first", "sprint_speed")), - new QueryParam("sort_dir", false, "string", List.of("asc", "desc")), - new QueryParam("limit", false, "integer", List.of()), - new QueryParam("offset", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), - true, + false, List.of())); - m.put("mlb-statcast-sprint-speed-teams", new Operation( - "mlb-statcast-sprint-speed-teams", + } + + private static void putOperations43(Map m) { + m.put("nationafrica-article", new Operation( + "nationafrica-article", "GET", - "/mlb/statcast-sprint-speed-teams", + "/nationafrica/article", List.of(), List.of( - new QueryParam("season", false, "string", List.of("2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026", "all")), - new QueryParam("team", false, "string", List.of("LAA", "HOU", "OAK", "TOR", "ATL", "MIL", "STL", "CHC", "ARI", "LAD", "SF", "CLE", "SEA", "MIA", "NYM", "WSH", "BAL", "SD", "PHI", "PIT", "TEX", "TB", "BOS", "CIN", "COL", "KC", "DET", "MIN", "CWS", "NYY")), - new QueryParam("sort", false, "string", List.of("season", "team", "players", "competitive_runs", "average_sprint_speed", "fastest_sprint_speed", "slowest_sprint_speed", "bolts", "average_home_to_first")), - new QueryParam("sort_dir", false, "string", List.of("asc", "desc")), - new QueryParam("limit", false, "integer", List.of()), - new QueryParam("offset", false, "integer", List.of())), + new QueryParam("url", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), - true, + false, List.of())); - m.put("mlb-statcast-swing-path", new Operation( - "mlb-statcast-swing-path", + m.put("nationafrica-author", new Operation( + "nationafrica-author", "GET", - "/mlb/statcast-swing-path", + "/nationafrica/author", List.of(), List.of( - new QueryParam("type", false, "string", List.of("batter", "batting-team", "league")), - new QueryParam("season_start", false, "string", List.of("2023", "2024", "2025", "2026")), - new QueryParam("season_end", false, "string", List.of("2023", "2024", "2025", "2026")), - new QueryParam("game_type", false, "string", List.of("Any", "Exhibition", "Playoff", "Regular")), - new QueryParam("min_swings", false, "string", List.of("q", "1", "5", "10", "25", "50", "100", "200", "500", "1000")), - new QueryParam("min_group_swings", false, "string", List.of("1", "5", "10", "25", "50", "100", "200", "500", "1000")), - new QueryParam("team_id", false, "string", List.of("108", "109", "110", "111", "112", "113", "114", "115", "116", "117", "118", "119", "120", "121", "133", "134", "135", "136", "137", "138", "139", "140", "141", "142", "143", "144", "145", "146", "147", "158")), - new QueryParam("date_start", false, "string", List.of()), - new QueryParam("date_end", false, "string", List.of()), - new QueryParam("bat_side", false, "string", List.of("L", "R")), - new QueryParam("contact_type", false, "string", List.of("2", "4", "9")), - new QueryParam("is_hard_hit", false, "string", List.of("1", "0")), - new QueryParam("attack_zone", false, "string", List.of("0", "1", "1.1", "2", "3")), - new QueryParam("pitch_hand", false, "string", List.of("L", "R")), - new QueryParam("sort", false, "string", List.of("name", "team_name", "avg_sweetspot_speed_mph", "avg_plane_vertical_angle", "attack_angle", "attack_direction_pullopp", "rate_ideal_attack_angle", "avg_intercept_y_vs_plate", "avg_intercept_y_vs_batter", "avg_batter_y_position", "avg_batter_x_position", "avg_foot_sep0", "avg_foot_angle0", "n_swings")), - new QueryParam("sort_dir", false, "string", List.of("asc", "desc")), - new QueryParam("limit", false, "integer", List.of()), - new QueryParam("offset", false, "integer", List.of())), + new QueryParam("slug", false, "string", List.of()), + new QueryParam("url", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), - true, + false, List.of())); - m.put("mlb-statcast-swing-timing", new Operation( - "mlb-statcast-swing-timing", + m.put("nationafrica-headlines", new Operation( + "nationafrica-headlines", "GET", - "/mlb/statcast-swing-timing", + "/nationafrica/headlines", List.of(), List.of( - new QueryParam("type", false, "string", List.of("batter", "batting-team", "pitcher", "pitching-team", "league")), - new QueryParam("seasons", false, "array", List.of("2023", "2024", "2025", "2026")), - new QueryParam("game_types", false, "array", List.of("R", "A", "F", "D", "L", "W")), - new QueryParam("splits", false, "array", List.of("api_pitch_type_group03", "api_pitch_type_group09", "api_game_date_month_text", "bat_contact_code", "game_type", "is_hit_into_play_hardhit", "is_best_speed", "timing_x_tiedupflail", "timing_y_earlylate", "timing_z_overunder", "pitch_hand", "bat_side", "is_pre_ball_count_3", "is_pre_strike_count_2", "pitchzone_height_code", "is_starter_pitcher")), - new QueryParam("min_swings", false, "string", List.of("q", "1", "5", "10", "25", "50", "100", "200", "500", "1000")), - new QueryParam("min_split", false, "string", List.of("1", "5", "10", "25", "50", "100", "200", "500", "1000")), - new QueryParam("split_year", false, "string", List.of("1", "0")), - new QueryParam("teams", false, "array", List.of("108", "109", "110", "111", "112", "113", "114", "115", "116", "117", "118", "119", "120", "121", "133", "134", "135", "136", "137", "138", "139", "140", "141", "142", "143", "144", "145", "146", "147", "158")), - new QueryParam("date_start", false, "string", List.of()), - new QueryParam("date_end", false, "string", List.of()), - new QueryParam("bat_side", false, "string", List.of("L", "R")), - new QueryParam("contact_type", false, "string", List.of("2", "4", "9")), - new QueryParam("attack_zone", false, "string", List.of("0", "1", "1.1", "2", "3")), - new QueryParam("pitch_hand", false, "string", List.of("L", "R")), - new QueryParam("pitch_types", false, "array", List.of("FF", "SI", "FC", "CH", "FS", "FO", "SC", "CU", "SL", "ST", "SV", "KN")), - new QueryParam("counts", false, "array", List.of("00", "01", "02", "10", "11", "12", "20", "21", "22", "30", "31", "32")), - new QueryParam("swing_timing_x", false, "array", List.of("Tiedup", "Centered", "Flail")), - new QueryParam("swing_timing_y", false, "array", List.of("Early", "OnTime", "Late")), - new QueryParam("swing_timing_z", false, "array", List.of("Under", "Linedup", "Over")), - new QueryParam("flags", false, "array", List.of("is_timing_xyz_flawed", "is_timing_xyz_perfect")), - new QueryParam("not_flags", false, "array", List.of("is_timing_xyz_flawed", "is_timing_xyz_perfect")), - new QueryParam("sort", false, "string", List.of("name", "team_name", "pitch_hand_type", "bat_side_type", "n_swings", "competitive_swings", "strikes_swinging", "miss_distance", "flails", "centers", "tied_ups", "earlys", "on_times", "lates", "unders", "lined_ups", "overs", "delta_run_exp", "whiff_rate", "competitive_percent", "perfect_percent", "flawed_percent")), - new QueryParam("sort_dir", false, "string", List.of("asc", "desc")), - new QueryParam("limit", false, "integer", List.of()), - new QueryParam("offset", false, "integer", List.of())), + new QueryParam("section", true, "string", List.of("news", "politics", "world", "gender", "education", "business", "companies", "enterprise", "finance-and-markets", "seeds-of-gold", "sports", "football", "athletics", "rugby", "motorsports", "other-sports", "talkup", "counties", "coast", "lake-region", "mountain", "nairobi-metro", "northern", "rift-valley", "blogs-opinion", "opinion", "editorials", "letters", "blogs", "cutting-edge", "life-and-style", "wellness", "travel", "relationships", "motoring", "family", "culture", "art-books", "health", "healthy-nation", "elections", "elections-news", "presidential", "governor-race", "constituencies", "explainers", "fact-checks"))), List.of(), null, false, List.of("ApiKeyAuth"), - true, + false, List.of())); - m.put("mlb-statcast-swing-timing-details", new Operation( - "mlb-statcast-swing-timing-details", + m.put("nationafrica-news", new Operation( + "nationafrica-news", "GET", - "/mlb/statcast-swing-timing-details", + "/nationafrica/news", + List.of(), List.of(), - List.of( - new QueryParam("row_id", true, "string", List.of()), - new QueryParam("type", true, "string", List.of("batter", "pitcher")), - new QueryParam("seasons", false, "array", List.of("2023", "2024", "2025", "2026")), - new QueryParam("game_types", false, "array", List.of("R", "A", "F", "D", "L", "W")), - new QueryParam("splits", false, "array", List.of("api_pitch_type_group03", "api_pitch_type_group09", "api_game_date_month_text", "bat_contact_code", "game_type", "is_hit_into_play_hardhit", "is_best_speed", "timing_x_tiedupflail", "timing_y_earlylate", "timing_z_overunder", "pitch_hand", "bat_side", "is_pre_ball_count_3", "is_pre_strike_count_2", "pitchzone_height_code", "is_starter_pitcher")), - new QueryParam("min_swings", false, "string", List.of("q", "1", "5", "10", "25", "50", "100", "200", "500", "1000")), - new QueryParam("min_split", false, "string", List.of("1", "5", "10", "25", "50", "100", "200", "500", "1000")), - new QueryParam("split_year", false, "string", List.of("0", "1")), - new QueryParam("teams", false, "array", List.of("108", "117", "133", "141", "144", "158", "138", "112", "109", "119", "137", "114", "136", "146", "121", "120", "110", "135", "143", "134", "113", "111", "115", "118", "116", "142", "145", "147")), - new QueryParam("date_start", false, "string", List.of()), - new QueryParam("date_end", false, "string", List.of()), - new QueryParam("bat_side", false, "string", List.of("L", "R")), - new QueryParam("contact_type", false, "string", List.of("2", "4", "9")), - new QueryParam("attack_zone", false, "string", List.of("0", "1", "1.1", "2", "3")), - new QueryParam("pitch_hand", false, "string", List.of("L", "R")), - new QueryParam("pitch_types", false, "array", List.of("FF", "SI", "FC", "CH", "FS", "FO", "SC", "CU", "SL", "ST", "SV", "KN")), - new QueryParam("counts", false, "array", List.of("00", "01", "02", "10", "11", "12", "20", "21", "22", "30", "31", "32")), - new QueryParam("swing_timing_x", false, "array", List.of("Tiedup", "Centered", "Flail")), - new QueryParam("swing_timing_y", false, "array", List.of("Early", "OnTime", "Late")), - new QueryParam("swing_timing_z", false, "array", List.of("Under", "Linedup", "Over")), - new QueryParam("flags", false, "array", List.of("is_timing_xyz_flawed", "is_timing_xyz_perfect")), - new QueryParam("not_flags", false, "array", List.of("is_timing_xyz_flawed", "is_timing_xyz_perfect"))), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("mlb-statcast-top-performers", new Operation( - "mlb-statcast-top-performers", + m.put("nationafrica-sections", new Operation( + "nationafrica-sections", "GET", - "/mlb/statcast-top-performers", + "/nationafrica/sections", + List.of(), List.of(), - List.of( - new QueryParam("year", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("mlb-statcast-year-to-year", new Operation( - "mlb-statcast-year-to-year", + m.put("national-article", new Operation( + "national-article", "GET", - "/mlb/statcast-year-to-year", + "/national/article", List.of(), List.of( - new QueryParam("group", false, "string", List.of("Batter", "Pitcher", "Batter Team", "Pitcher Team")), - new QueryParam("type", false, "string", List.of("ba", "xba", "obp", "xobp", "slg", "xslg", "iso", "xiso", "babip", "woba", "xwoba", "wobacon", "xwobacon", "bacon", "xbacon", "hard_hit_percent", "exit_velocity_avg", "sweet_spot_percent", "barrel_batted_rate", "launch_angle_avg", "avg_swing_speed", "attack_angle", "ideal_angle_rate", "attack_direction", "vertical_swing_path", "avg_swing_length", "fastball_velo", "breaking_velo", "offspeed_velo", "barrels", "popups_percent", "flyballs_percent", "linedrives_percent", "groundballs_percent", "pull_percent", "straightaway_percent", "opposite_percent", "poorlyweak_percent", "pull_percent_airballs", "poorlytopped_percent", "poorlyunder_percent", "flareburner_percent", "solidcontact_percent", "hr_flyballs_percent", "popups", "flyballs", "linedrives", "groundballs", "in_zone_percent", "out_zone_percent", "edge_percent", "z_swing_percent", "oz_swing_percent", "iz_contact_percent", "oz_contact_percent", "whiff_percent", "f_strike_percent", "f_swing_percent", "swing_percent", "meatball_swing_percent", "meatball_percent", "z_swing_miss_percent", "oz_swing_miss_percent", "in_zone", "out_zone", "edge", "in_zone_swing", "out_zone_swing", "in_zone_swing_miss", "out_zone_swing_miss", "pitch_count", "pa", "ab", "hit", "single", "double", "triple", "home_run", "walk", "strikeout", "k_percent", "bb_percent", "hbp", "batted_ball", "pitch_usage_fastball", "pitch_usage_offspeed", "pitch_usage_breaking", "pitch_count_fastball", "pitch_count_offspeed", "pitch_count_breaking")), - new QueryParam("year", false, "string", List.of("2025", "2024", "2023", "2022", "2021", "2020", "2019", "2018", "2017")), - new QueryParam("sort", false, "string", List.of()), - new QueryParam("sort_dir", false, "string", List.of("asc", "desc")), - new QueryParam("limit", false, "integer", List.of()), - new QueryParam("offset", false, "integer", List.of())), + new QueryParam("url", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), - true, + false, List.of())); - m.put("mlb-team-roster", new Operation( - "mlb-team-roster", + m.put("national-author", new Operation( + "national-author", "GET", - "/mlb/team-roster", + "/national/author", List.of(), List.of( - new QueryParam("team_id", true, "string", List.of()), - new QueryParam("season", false, "integer", List.of()), - new QueryParam("roster_type", false, "string", List.of("40Man", "fullSeason", "fullRoster", "nonRosterInvitees", "active", "allTime", "depthChart", "gameday", "coach"))), + new QueryParam("slug", false, "string", List.of()), + new QueryParam("url", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("mlb-team-stats", new Operation( - "mlb-team-stats", + m.put("national-headlines", new Operation( + "national-headlines", "GET", - "/mlb/team-stats", + "/national/headlines", List.of(), List.of( - new QueryParam("team_id", true, "string", List.of()), - new QueryParam("season", false, "integer", List.of()), - new QueryParam("group", true, "string", List.of("hitting", "pitching", "fielding", "catching", "running", "game", "team", "streak")), - new QueryParam("stat_type", false, "string", List.of("projected", "projectedRos", "yearByYear", "yearByYearAdvanced", "yearByYearPlayoffs", "season", "standard", "advanced", "career", "careerRegularSeason", "careerAdvanced", "seasonAdvanced", "careerStatSplits", "careerPlayoffs", "gameLog", "playLog", "pitchLog", "pitchArsenal", "outsAboveAverage", "expectedStatistics", "sabermetrics", "sprayChart", "tracking", "vsPlayer", "vsPlayerTotal", "vsPlayer5Y", "vsTeam", "vsTeam5Y", "vsTeamTotal", "lastXGames", "byDateRange", "byDateRangeAdvanced", "byMonth", "byMonthPlayoffs", "byDayOfWeek", "byDayOfWeekPlayoffs", "homeAndAway", "homeAndAwayPlayoffs", "winLoss", "winLossPlayoffs", "rankings", "rankingsByYear", "statsSingleSeason", "statsSingleSeasonAdvanced", "hotColdZones", "availableStats", "opponentsFaced", "gameTypeStats", "firstYearStats", "lastYearStats", "statSplits", "statSplitsAdvanced", "atGameStart", "vsOpponents", "sabermetricsMultiTeam", "projected_Zips", "projected_ZipsRos", "projected_Zips2YR", "projected_Zips3YR")), - new QueryParam("game_type", false, "string", List.of("S", "R", "F", "D", "L", "W", "C", "P", "A", "I", "E")), - new QueryParam("start_date", false, "string", List.of()), - new QueryParam("end_date", false, "string", List.of()), - new QueryParam("opponent_team_id", false, "string", List.of()), - new QueryParam("opponent_player_id", false, "string", List.of())), + new QueryParam("section", true, "string", List.of("news", "news/uae", "news/gulf", "news/mena", "mena/arab-showcase", "news/us", "news/uk", "news/europe", "news/asia", "business", "business/aviation", "business/economy", "business/energy", "business/money", "business/property", "business/banking", "business/uk", "business/markets", "in-focus", "opinion", "opinion/comment", "opinion/editorial", "opinion/obituaries", "opinion/cartoon", "opinion/feedback", "future", "future/science", "future/space", "future/technology", "climate", "climate/environment", "climate/road-to-net-zero", "health", "arts-culture", "arts-culture/art-design", "arts-culture/books", "arts-culture/film-tv", "arts-culture/music-stage", "arts-culture/pop-culture", "lifestyle", "travel", "lifestyle/fashion-beauty", "lifestyle/food", "lifestyle/motoring", "magazine", "lifestyle/luxury", "lifestyle/home-garden", "lifestyle/wellbeing", "lifestyle/things-to-do", "sport", "sport/football", "sport/cricket", "sport/f1", "sport/tennis", "sport/combat-sports", "sport/cycling", "weekend"))), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("mlb-teams", new Operation( - "mlb-teams", + m.put("national-news", new Operation( + "national-news", "GET", - "/mlb/teams", + "/national/news", + List.of(), List.of(), - List.of( - new QueryParam("season", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("mlb-transactions", new Operation( - "mlb-transactions", + m.put("national-sections", new Operation( + "national-sections", "GET", - "/mlb/transactions", + "/national/sections", + List.of(), List.of(), - List.of( - new QueryParam("start_date", true, "string", List.of()), - new QueryParam("end_date", true, "string", List.of()), - new QueryParam("team_id", false, "string", List.of()), - new QueryParam("player_id", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("mlive-news", new Operation( - "mlive-news", + m.put("nationalpost-article", new Operation( + "nationalpost-article", "GET", - "/mlive/news", - List.of(), + "/nationalpost/article", List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("modaoperandi-categories", new Operation( - "modaoperandi-categories", + m.put("nationalpost-author", new Operation( + "nationalpost-author", "GET", - "/modaoperandi/categories", - List.of(), + "/nationalpost/author", List.of(), + List.of( + new QueryParam("slug", false, "string", List.of()), + new QueryParam("url", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("modaoperandi-designers", new Operation( - "modaoperandi-designers", + m.put("nationalpost-headlines", new Operation( + "nationalpost-headlines", "GET", - "/modaoperandi/designers", + "/nationalpost/headlines", List.of(), List.of( - new QueryParam("gender", true, "string", List.of("women", "men"))), + new QueryParam("section", true, "string", List.of("canada", "true-crime", "politics", "health", "world", "israel-middle-east", "opinion", "longreads", "modern-life", "food", "horoscopes", "style-beauty", "travel", "travel-canada", "travel-usa", "travel-international", "travel-cruises", "travel-guide", "entertainment", "books", "celebrity", "movies", "music", "theatre", "television", "business-essentials", "shopping-essentials", "buy-canadian", "home-living", "outdoor-living", "kitchen-dining", "tech", "personal-care", "entertainment-hobbies", "gift-guide", "deals", "sports", "hockey", "baseball", "basketball", "football", "soccer", "golf", "tennis", "driving"))), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("modaoperandi-product", new Operation( - "modaoperandi-product", + m.put("nationalpost-news", new Operation( + "nationalpost-news", "GET", - "/modaoperandi/product", + "/nationalpost/news", + List.of(), List.of(), - List.of( - new QueryParam("url", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("modaoperandi-search", new Operation( - "modaoperandi-search", + m.put("nationalpost-sections", new Operation( + "nationalpost-sections", "GET", - "/modaoperandi/search", + "/nationalpost/sections", + List.of(), List.of(), - List.of( - new QueryParam("gender", true, "string", List.of("women", "men")), - new QueryParam("q", false, "string", List.of()), - new QueryParam("category", false, "string", List.of()), - new QueryParam("designer", false, "string", List.of()), - new QueryParam("color", false, "string", List.of()), - new QueryParam("size", false, "string", List.of()), - new QueryParam("attribute", false, "string", List.of()), - new QueryParam("availability", false, "string", List.of("available_now", "preorder", "trunkshow")), - new QueryParam("price_min", false, "number", List.of()), - new QueryParam("price_max", false, "number", List.of()), - new QueryParam("on_sale", false, "boolean", List.of()), - new QueryParam("sort", false, "string", List.of("default", "price_low_to_high", "price_high_to_low", "newest")), - new QueryParam("page", false, "integer", List.of()), - new QueryParam("limit", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), - true, + false, List.of())); - m.put("moncler-categories", new Operation( - "moncler-categories", + m.put("nba-box-score", new Operation( + "nba-box-score", "GET", - "/moncler/categories", + "/nba/box-score", List.of(), List.of( - new QueryParam("levels", false, "integer", List.of())), + new QueryParam("game_id", true, "string", List.of()), + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("start_period", false, "integer", List.of()), + new QueryParam("end_period", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("moncler-category", new Operation( - "moncler-category", + m.put("nba-box-score-advanced", new Operation( + "nba-box-score-advanced", "GET", - "/moncler/category", + "/nba/box-score-advanced", List.of(), List.of( - new QueryParam("category_id", true, "string", List.of()), - new QueryParam("sort", false, "string", List.of("price-high-to-low", "price-low-to-high")), - new QueryParam("filter", false, "array", List.of()), - new QueryParam("limit", false, "integer", List.of()), - new QueryParam("offset", false, "integer", List.of())), + new QueryParam("game_id", true, "string", List.of()), + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("start_period", false, "integer", List.of()), + new QueryParam("end_period", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), - true, + false, List.of())); - m.put("moncler-product", new Operation( - "moncler-product", + m.put("nba-box-score-four-factors", new Operation( + "nba-box-score-four-factors", "GET", - "/moncler/product", + "/nba/box-score-four-factors", List.of(), List.of( - new QueryParam("product_id", true, "string", List.of())), + new QueryParam("game_id", true, "string", List.of()), + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("start_period", false, "integer", List.of()), + new QueryParam("end_period", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("moncler-search", new Operation( - "moncler-search", + m.put("nba-box-score-misc", new Operation( + "nba-box-score-misc", "GET", - "/moncler/search", + "/nba/box-score-misc", List.of(), List.of( - new QueryParam("q", true, "string", List.of()), - new QueryParam("sort", false, "string", List.of("price-high-to-low", "price-low-to-high")), - new QueryParam("filter", false, "array", List.of()), - new QueryParam("limit", false, "integer", List.of()), - new QueryParam("offset", false, "integer", List.of())), + new QueryParam("game_id", true, "string", List.of()), + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("start_period", false, "integer", List.of()), + new QueryParam("end_period", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), - true, + false, List.of())); - m.put("moncler-stores", new Operation( - "moncler-stores", + m.put("nba-box-score-player-track", new Operation( + "nba-box-score-player-track", "GET", - "/moncler/stores", - List.of(), + "/nba/box-score-player-track", List.of(), + List.of( + new QueryParam("game_id", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("moncler-suggest", new Operation( - "moncler-suggest", + m.put("nba-box-score-scoring", new Operation( + "nba-box-score-scoring", "GET", - "/moncler/suggest", + "/nba/box-score-scoring", List.of(), List.of( - new QueryParam("q", true, "string", List.of())), + new QueryParam("game_id", true, "string", List.of()), + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("start_period", false, "integer", List.of()), + new QueryParam("end_period", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("moneycontrol-article", new Operation( - "moneycontrol-article", + m.put("nba-box-score-usage", new Operation( + "nba-box-score-usage", "GET", - "/moneycontrol/article", + "/nba/box-score-usage", List.of(), List.of( - new QueryParam("url", true, "string", List.of())), + new QueryParam("game_id", true, "string", List.of()), + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("start_period", false, "integer", List.of()), + new QueryParam("end_period", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("moneycontrol-author", new Operation( - "moneycontrol-author", + m.put("nba-common-all-players", new Operation( + "nba-common-all-players", "GET", - "/moneycontrol/author", + "/nba/common-all-players", List.of(), List.of( - new QueryParam("url", true, "string", List.of())), + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("season", false, "string", List.of()), + new QueryParam("is_only_current_season", false, "boolean", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("moneycontrol-headlines", new Operation( - "moneycontrol-headlines", + m.put("nba-draft-combine-anthro", new Operation( + "nba-draft-combine-anthro", "GET", - "/moneycontrol/headlines", + "/nba/draft-combine-anthro", List.of(), List.of( - new QueryParam("section", true, "string", List.of("business", "markets", "economy", "companies", "personal-finance", "ipo", "startup", "commodities", "earnings", "insurance", "banks", "stocks", "mutual-funds", "real-estate", "funding", "information-technology", "india", "politics", "trends", "interview", "opinion", "currency", "telecom", "world", "city", "banking", "explainers", "technology", "automobile", "sports", "cricket", "football", "entertainment", "bollywood", "hollywood", "ott", "tv", "regional", "music", "lifestyle", "beauty", "parenting", "relationship", "home-garden", "health-and-fitness", "education", "science", "astrology", "religion", "travel", "artificial-intelligence", "books"))), + new QueryParam("season_year", true, "string", List.of()), + new QueryParam("league_id", false, "string", List.of("00"))), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("moneycontrol-news", new Operation( - "moneycontrol-news", + m.put("nba-enums", new Operation( + "nba-enums", "GET", - "/moneycontrol/news", + "/nba/enums", List.of(), List.of(), List.of(), @@ -32539,348 +38499,425 @@ private static void putOperations36(Map m) { List.of("ApiKeyAuth"), false, List.of())); - m.put("moneycontrol-sections", new Operation( - "moneycontrol-sections", + m.put("nba-franchise-history", new Operation( + "nba-franchise-history", "GET", - "/moneycontrol/sections", - List.of(), + "/nba/franchise-history", List.of(), + List.of( + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("team_id", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("monitors-list", new Operation( - "monitors-list", + m.put("nba-game-detail", new Operation( + "nba-game-detail", "GET", - "/monitors", - List.of(), + "/nba/game-detail", List.of(), + List.of( + new QueryParam("game_id", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("monitors-create", new Operation( - "monitors-create", - "POST", - "/monitors", + m.put("nba-games", new Operation( + "nba-games", + "GET", + "/nba/games", List.of(), List.of(), List.of(), - "request", - true, + null, + false, List.of("ApiKeyAuth"), false, List.of())); - m.put("monitors-delete", new Operation( - "monitors-delete", - "DELETE", - "/monitors/{id}", - List.of("id"), + m.put("nba-homepage-leaders", new Operation( + "nba-homepage-leaders", + "GET", + "/nba/homepage-leaders", List.of(), + List.of( + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("stat_category", false, "string", List.of("Points", "Rebounds")), + new QueryParam("player_or_team", false, "string", List.of("Team")), + new QueryParam("player_scope", false, "string", List.of()), + new QueryParam("game_scope", false, "string", List.of("Season"))), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("monitors-get", new Operation( - "monitors-get", + m.put("nba-hustle-stats", new Operation( + "nba-hustle-stats", "GET", - "/monitors/{id}", - List.of("id"), + "/nba/hustle-stats", List.of(), + List.of( + new QueryParam("game_id", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("monitors-update", new Operation( - "monitors-update", - "PATCH", - "/monitors/{id}", - List.of("id"), + m.put("nba-league-game-log", new Operation( + "nba-league-game-log", + "GET", + "/nba/league-game-log", List.of(), + List.of( + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("season", false, "string", List.of()), + new QueryParam("season_type", false, "string", List.of("Regular Season")), + new QueryParam("direction", false, "string", List.of("DESC")), + new QueryParam("player_or_team", false, "string", List.of("T")), + new QueryParam("sorter", false, "string", List.of("DATE"))), List.of(), - "request", - true, + null, + false, List.of("ApiKeyAuth"), false, List.of())); - m.put("monitors-checks", new Operation( - "monitors-checks", + m.put("nba-lineups", new Operation( + "nba-lineups", "GET", - "/monitors/{id}/checks", - List.of("id"), + "/nba/lineups", List.of(), + List.of( + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("season", false, "string", List.of()), + new QueryParam("season_type", false, "string", List.of("Regular Season")), + new QueryParam("measure_type", false, "string", List.of("Base")), + new QueryParam("per_mode", false, "string", List.of("PerGame")), + new QueryParam("group_quantity", false, "integer", List.of("5"))), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("motleyfool-article", new Operation( - "motleyfool-article", + m.put("nba-news", new Operation( + "nba-news", "GET", - "/motleyfool/article", + "/nba/news", + List.of(), List.of(), - List.of( - new QueryParam("url", true, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("motleyfool-author", new Operation( - "motleyfool-author", + m.put("nba-play-by-play", new Operation( + "nba-play-by-play", "GET", - "/motleyfool/author", + "/nba/play-by-play", List.of(), List.of( - new QueryParam("url", true, "string", List.of())), + new QueryParam("game_id", true, "string", List.of()), + new QueryParam("start_period", false, "integer", List.of()), + new QueryParam("end_period", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("motleyfool-headlines", new Operation( - "motleyfool-headlines", + m.put("nba-player-awards", new Operation( + "nba-player-awards", "GET", - "/motleyfool/headlines", + "/nba/player-awards", List.of(), List.of( - new QueryParam("section", true, "string", List.of("trending-news", "news", "market-movers", "tech-stock-news", "market-trends", "crypto-news", "markets", "most-active-stocks", "top-stock-gainers", "top-stock-losers"))), + new QueryParam("player_id", true, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("motleyfool-news", new Operation( - "motleyfool-news", + m.put("nba-player-bio-stats", new Operation( + "nba-player-bio-stats", "GET", - "/motleyfool/news", - List.of(), + "/nba/player-bio-stats", List.of(), + List.of( + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("season", false, "string", List.of()), + new QueryParam("season_type", false, "string", List.of("Regular Season")), + new QueryParam("per_mode", false, "string", List.of("PerGame"))), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("motleyfool-sections", new Operation( - "motleyfool-sections", + m.put("nba-player-career-stats", new Operation( + "nba-player-career-stats", "GET", - "/motleyfool/sections", - List.of(), + "/nba/player-career-stats", List.of(), + List.of( + new QueryParam("player_id", true, "integer", List.of()), + new QueryParam("per_mode", false, "string", List.of("PerGame")), + new QueryParam("league_id", false, "string", List.of("00"))), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("nationafrica-article", new Operation( - "nationafrica-article", + m.put("nba-player-dash-pt-shots", new Operation( + "nba-player-dash-pt-shots", "GET", - "/nationafrica/article", + "/nba/player-dash-pt-shots", List.of(), List.of( - new QueryParam("url", true, "string", List.of())), + new QueryParam("player_id", true, "integer", List.of()), + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("season", false, "string", List.of()), + new QueryParam("season_type", false, "string", List.of("Regular Season")), + new QueryParam("per_mode", false, "string", List.of("PerGame"))), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("nationafrica-author", new Operation( - "nationafrica-author", + m.put("nba-player-info", new Operation( + "nba-player-info", "GET", - "/nationafrica/author", + "/nba/player-info", List.of(), List.of( - new QueryParam("slug", false, "string", List.of()), - new QueryParam("url", false, "string", List.of())), + new QueryParam("player_id", true, "integer", List.of()), + new QueryParam("league_id", false, "string", List.of("00"))), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("nationafrica-headlines", new Operation( - "nationafrica-headlines", + m.put("nba-player-stats", new Operation( + "nba-player-stats", "GET", - "/nationafrica/headlines", + "/nba/player-stats", List.of(), List.of( - new QueryParam("section", true, "string", List.of("news", "politics", "world", "gender", "education", "business", "companies", "enterprise", "finance-and-markets", "seeds-of-gold", "sports", "football", "athletics", "rugby", "motorsports", "other-sports", "talkup", "counties", "coast", "lake-region", "mountain", "nairobi-metro", "northern", "rift-valley", "blogs-opinion", "opinion", "editorials", "letters", "blogs", "cutting-edge", "life-and-style", "wellness", "travel", "relationships", "motoring", "family", "culture", "art-books", "health", "healthy-nation", "elections", "elections-news", "presidential", "governor-race", "constituencies", "explainers", "fact-checks"))), + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("season", false, "string", List.of()), + new QueryParam("season_type", false, "string", List.of("Regular Season", "Playoffs", "Pre Season", "All Star")), + new QueryParam("measure_type", false, "string", List.of("Base", "Advanced", "Misc", "Scoring", "Defense", "Opponent")), + new QueryParam("per_mode", false, "string", List.of("PerGame", "Totals", "Per36", "Per48", "Per100Possessions", "MinutesPer", "PerPossession"))), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("nationafrica-news", new Operation( - "nationafrica-news", + m.put("nba-players", new Operation( + "nba-players", "GET", - "/nationafrica/news", - List.of(), + "/nba/players", List.of(), + List.of( + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("season", false, "string", List.of()), + new QueryParam("team_id", false, "integer", List.of()), + new QueryParam("active", false, "boolean", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("nationafrica-sections", new Operation( - "nationafrica-sections", + m.put("nba-playoff-picture", new Operation( + "nba-playoff-picture", "GET", - "/nationafrica/sections", - List.of(), + "/nba/playoff-picture", List.of(), + List.of( + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("season_id", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("national-article", new Operation( - "national-article", + m.put("nba-pt-defend", new Operation( + "nba-pt-defend", "GET", - "/national/article", + "/nba/pt-defend", List.of(), List.of( - new QueryParam("url", true, "string", List.of())), + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("season", false, "string", List.of()), + new QueryParam("season_type", false, "string", List.of("Regular Season")), + new QueryParam("per_mode", false, "string", List.of("PerGame")), + new QueryParam("defense_category", false, "string", List.of("Overall", "3 Pointers"))), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("national-author", new Operation( - "national-author", + m.put("nba-pt-stats", new Operation( + "nba-pt-stats", "GET", - "/national/author", + "/nba/pt-stats", List.of(), List.of( - new QueryParam("slug", false, "string", List.of()), - new QueryParam("url", false, "string", List.of())), + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("season", false, "string", List.of()), + new QueryParam("season_type", false, "string", List.of("Regular Season")), + new QueryParam("per_mode", false, "string", List.of("PerGame")), + new QueryParam("pt_measure_type", false, "string", List.of("SpeedDistance"))), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("national-headlines", new Operation( - "national-headlines", + m.put("nba-scoreboard", new Operation( + "nba-scoreboard", "GET", - "/national/headlines", + "/nba/scoreboard", List.of(), List.of( - new QueryParam("section", true, "string", List.of("news", "news/uae", "news/gulf", "news/mena", "mena/arab-showcase", "news/us", "news/uk", "news/europe", "news/asia", "business", "business/aviation", "business/economy", "business/energy", "business/money", "business/property", "business/banking", "business/uk", "business/markets", "in-focus", "opinion", "opinion/comment", "opinion/editorial", "opinion/obituaries", "opinion/cartoon", "opinion/feedback", "future", "future/science", "future/space", "future/technology", "climate", "climate/environment", "climate/road-to-net-zero", "health", "arts-culture", "arts-culture/art-design", "arts-culture/books", "arts-culture/film-tv", "arts-culture/music-stage", "arts-culture/pop-culture", "lifestyle", "travel", "lifestyle/fashion-beauty", "lifestyle/food", "lifestyle/motoring", "magazine", "lifestyle/luxury", "lifestyle/home-garden", "lifestyle/wellbeing", "lifestyle/things-to-do", "sport", "sport/football", "sport/cricket", "sport/f1", "sport/tennis", "sport/combat-sports", "sport/cycling", "weekend"))), + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("game_date", false, "string", List.of()), + new QueryParam("day_offset", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("national-news", new Operation( - "national-news", + m.put("nba-standings", new Operation( + "nba-standings", "GET", - "/national/news", - List.of(), + "/nba/standings", List.of(), + List.of( + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("season", false, "string", List.of()), + new QueryParam("season_type", false, "string", List.of("Regular Season", "Playoffs", "Pre Season", "All Star"))), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("national-sections", new Operation( - "national-sections", + m.put("nba-synergy-play-types", new Operation( + "nba-synergy-play-types", "GET", - "/national/sections", - List.of(), + "/nba/synergy-play-types", List.of(), + List.of( + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("season_year", false, "string", List.of()), + new QueryParam("season_type", false, "string", List.of("Regular Season")), + new QueryParam("play_type", false, "string", List.of("Isolation")), + new QueryParam("per_mode", false, "string", List.of("PerGame")), + new QueryParam("player_or_team", false, "string", List.of("T")), + new QueryParam("type_grouping", false, "string", List.of("offensive"))), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("nationalpost-article", new Operation( - "nationalpost-article", + m.put("nba-team-details", new Operation( + "nba-team-details", "GET", - "/nationalpost/article", + "/nba/team-details", List.of(), List.of( - new QueryParam("url", true, "string", List.of())), + new QueryParam("team_id", true, "integer", List.of()), + new QueryParam("league_id", false, "string", List.of("00"))), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("nationalpost-author", new Operation( - "nationalpost-author", + m.put("nba-team-roster", new Operation( + "nba-team-roster", "GET", - "/nationalpost/author", + "/nba/team-roster", List.of(), List.of( - new QueryParam("slug", false, "string", List.of()), - new QueryParam("url", false, "string", List.of())), + new QueryParam("team_id", true, "integer", List.of()), + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("season", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("nationalpost-headlines", new Operation( - "nationalpost-headlines", + m.put("nba-team-shot-locations", new Operation( + "nba-team-shot-locations", "GET", - "/nationalpost/headlines", + "/nba/team-shot-locations", List.of(), List.of( - new QueryParam("section", true, "string", List.of("canada", "true-crime", "politics", "health", "world", "israel-middle-east", "opinion", "longreads", "modern-life", "food", "horoscopes", "style-beauty", "travel", "travel-canada", "travel-usa", "travel-international", "travel-cruises", "travel-guide", "entertainment", "books", "celebrity", "movies", "music", "theatre", "television", "business-essentials", "shopping-essentials", "buy-canadian", "home-living", "outdoor-living", "kitchen-dining", "tech", "personal-care", "entertainment-hobbies", "gift-guide", "deals", "sports", "hockey", "baseball", "basketball", "football", "soccer", "golf", "tennis", "driving"))), + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("season", false, "string", List.of()), + new QueryParam("season_type", false, "string", List.of("Regular Season")), + new QueryParam("measure_type", false, "string", List.of("Base")), + new QueryParam("per_mode", false, "string", List.of("PerGame")), + new QueryParam("distance_range", false, "string", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("nationalpost-news", new Operation( - "nationalpost-news", + m.put("nba-team-stats", new Operation( + "nba-team-stats", "GET", - "/nationalpost/news", - List.of(), + "/nba/team-stats", List.of(), + List.of( + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("season", false, "string", List.of()), + new QueryParam("season_type", false, "string", List.of("Regular Season", "Playoffs", "Pre Season", "All Star")), + new QueryParam("measure_type", false, "string", List.of("Base", "Advanced", "Misc", "Scoring", "Defense", "Opponent")), + new QueryParam("per_mode", false, "string", List.of("PerGame", "Totals", "Per36", "Per48", "Per100Possessions", "MinutesPer", "PerPossession"))), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - m.put("nationalpost-sections", new Operation( - "nationalpost-sections", + m.put("nba-team-stats-leaders", new Operation( + "nba-team-stats-leaders", "GET", - "/nationalpost/sections", - List.of(), + "/nba/team-stats-leaders", List.of(), + List.of( + new QueryParam("stat_category", true, "string", List.of("PTS", "REB", "AST", "BLK", "STL", "TOV")), + new QueryParam("league_id", false, "string", List.of("00")), + new QueryParam("season", false, "string", List.of()), + new QueryParam("season_type", false, "string", List.of("Regular Season", "Playoffs", "Pre Season", "All Star")), + new QueryParam("per_mode", false, "string", List.of("PerGame", "Totals", "Per36", "Per48", "Per100Possessions", "MinutesPer", "PerPossession")), + new QueryParam("scope", false, "string", List.of("S"))), List.of(), null, false, List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations37(Map m) { m.put("nbc-article", new Operation( "nbc-article", "GET", @@ -32984,6 +39021,9 @@ private static void putOperations37(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations44(Map m) { m.put("ndtv-latest-videos", new Operation( "ndtv-latest-videos", "GET", @@ -33100,6 +39140,118 @@ private static void putOperations37(Map m) { List.of("ApiKeyAuth"), true, List.of())); + m.put("netshort-browse", new Operation( + "netshort-browse", + "GET", + "/netshort/browse", + List.of(), + List.of( + new QueryParam("language", false, "string", List.of("en", "ar", "cn", "de", "es", "fr", "hi", "id", "it", "ja", "ko", "ms", "pt", "th", "tr", "vi", "zh")), + new QueryParam("page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("netshort-genres", new Operation( + "netshort-genres", + "GET", + "/netshort/genres", + List.of(), + List.of( + new QueryParam("language", false, "string", List.of("en", "ar", "cn", "de", "es", "fr", "hi", "id", "it", "ja", "ko", "ms", "pt", "th", "tr", "vi", "zh"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("netshort-home", new Operation( + "netshort-home", + "GET", + "/netshort/home", + List.of(), + List.of( + new QueryParam("language", false, "string", List.of("en", "ar", "cn", "de", "es", "fr", "hi", "id", "it", "ja", "ko", "ms", "pt", "th", "tr", "vi", "zh"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("netshort-label", new Operation( + "netshort-label", + "GET", + "/netshort/label", + List.of(), + List.of( + new QueryParam("label_id", true, "string", List.of()), + new QueryParam("name", true, "string", List.of()), + new QueryParam("page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("netshort-plots", new Operation( + "netshort-plots", + "GET", + "/netshort/plots", + List.of(), + List.of( + new QueryParam("language", false, "string", List.of("en", "ar", "cn", "de", "es", "fr", "hi", "id", "it", "ja", "ko", "ms", "pt", "th", "tr", "vi", "zh")), + new QueryParam("page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("netshort-search", new Operation( + "netshort-search", + "GET", + "/netshort/search", + List.of(), + List.of( + new QueryParam("query", true, "string", List.of()), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of()), + new QueryParam("language", false, "string", List.of("en_US", "ja_JP"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("netshort-title", new Operation( + "netshort-title", + "GET", + "/netshort/title", + List.of(), + List.of( + new QueryParam("title_id", true, "string", List.of()), + new QueryParam("slug", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("netshort-toplist", new Operation( + "netshort-toplist", + "GET", + "/netshort/toplist", + List.of(), + List.of( + new QueryParam("board", true, "string", List.of("trending-short-dramas", "new-short-drama-releases", "recommended-short-dramas", "exclusive-original-short-dramas"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("news18-article", new Operation( "news18-article", "GET", @@ -33467,6 +39619,268 @@ private static void putOperations37(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("nfhs-activities", new Operation( + "nfhs-activities", + "GET", + "/nfhs/activities", + List.of(), + List.of( + new QueryParam("is_sport", false, "boolean", List.of()), + new QueryParam("is_top_sport", false, "boolean", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("nfhs-affiliates", new Operation( + "nfhs-affiliates", + "GET", + "/nfhs/affiliates", + List.of(), + List.of( + new QueryParam("search_term", false, "string", List.of()), + new QueryParam("state", false, "string", List.of()), + new QueryParam("is_network", false, "boolean", List.of()), + new QueryParam("start", false, "integer", List.of()), + new QueryParam("size", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of("start"))); + m.put("nfhs-affiliate", new Operation( + "nfhs-affiliate", + "GET", + "/nfhs/affiliates/{key}", + List.of("key"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("nfhs-associations", new Operation( + "nfhs-associations", + "GET", + "/nfhs/associations", + List.of(), + List.of( + new QueryParam("search_term", false, "string", List.of()), + new QueryParam("state", false, "string", List.of()), + new QueryParam("is_network", false, "boolean", List.of()), + new QueryParam("start", false, "integer", List.of()), + new QueryParam("size", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of("start"))); + m.put("nfhs-association", new Operation( + "nfhs-association", + "GET", + "/nfhs/associations/{key}", + List.of("key"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("nfhs-events", new Operation( + "nfhs-events", + "GET", + "/nfhs/events", + List.of(), + List.of( + new QueryParam("type", false, "string", List.of()), + new QueryParam("activity", false, "string", List.of()), + new QueryParam("state", false, "string", List.of()), + new QueryParam("gender", false, "string", List.of()), + new QueryParam("level", false, "string", List.of()), + new QueryParam("school_key", false, "string", List.of()), + new QueryParam("publisher_key", false, "string", List.of()), + new QueryParam("is_postseason", false, "boolean", List.of()), + new QueryParam("download_to_own", false, "boolean", List.of()), + new QueryParam("search_term", false, "string", List.of()), + new QueryParam("from", false, "string", List.of()), + new QueryParam("to", false, "string", List.of()), + new QueryParam("sort", false, "string", List.of()), + new QueryParam("start", false, "integer", List.of()), + new QueryParam("size", false, "integer", List.of()), + new QueryParam("cursor", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of("start", "cursor"))); + m.put("nfhs-event", new Operation( + "nfhs-event", + "GET", + "/nfhs/events/{key}", + List.of("key"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("nfhs-filters", new Operation( + "nfhs-filters", + "GET", + "/nfhs/filters", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("nfhs-highlights", new Operation( + "nfhs-highlights", + "GET", + "/nfhs/highlights", + List.of(), + List.of( + new QueryParam("activity", false, "string", List.of()), + new QueryParam("state", false, "string", List.of()), + new QueryParam("gender", false, "string", List.of()), + new QueryParam("level", false, "string", List.of()), + new QueryParam("school_key", false, "string", List.of()), + new QueryParam("search_term", false, "string", List.of()), + new QueryParam("from", false, "string", List.of()), + new QueryParam("to", false, "string", List.of()), + new QueryParam("sort", false, "string", List.of()), + new QueryParam("start", false, "integer", List.of()), + new QueryParam("size", false, "integer", List.of()), + new QueryParam("cursor", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of("start", "cursor"))); + m.put("nfhs-producer", new Operation( + "nfhs-producer", + "GET", + "/nfhs/producers/{key}", + List.of("key"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("nfhs-publisher", new Operation( + "nfhs-publisher", + "GET", + "/nfhs/publishers/{key}", + List.of("key"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("nfhs-schools", new Operation( + "nfhs-schools", + "GET", + "/nfhs/schools", + List.of(), + List.of( + new QueryParam("state", false, "string", List.of()), + new QueryParam("search_term", false, "string", List.of()), + new QueryParam("sort", false, "string", List.of()), + new QueryParam("is_network", false, "boolean", List.of()), + new QueryParam("start", false, "integer", List.of()), + new QueryParam("size", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of("start"))); + m.put("nfhs-school", new Operation( + "nfhs-school", + "GET", + "/nfhs/schools/{key}", + List.of("key"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("nfhs-search", new Operation( + "nfhs-search", + "GET", + "/nfhs/search", + List.of(), + List.of( + new QueryParam("search_term", true, "string", List.of()), + new QueryParam("state", false, "string", List.of()), + new QueryParam("activity", false, "string", List.of()), + new QueryParam("start", false, "integer", List.of()), + new QueryParam("size", false, "integer", List.of()), + new QueryParam("cursor", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of("start", "cursor"))); + } + + private static void putOperations45(Map m) { + m.put("nfhs-sports", new Operation( + "nfhs-sports", + "GET", + "/nfhs/sports", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("nfhs-states", new Operation( + "nfhs-states", + "GET", + "/nfhs/states", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("nfhs-suggest", new Operation( + "nfhs-suggest", + "GET", + "/nfhs/suggest", + List.of(), + List.of( + new QueryParam("search_term", true, "string", List.of()), + new QueryParam("scope", false, "string", List.of()), + new QueryParam("size", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("nike-categories", new Operation( "nike-categories", "GET", @@ -33654,9 +40068,6 @@ private static void putOperations37(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations38(Map m) { m.put("ninetofivemac-article", new Operation( "ninetofivemac-article", "GET", @@ -34205,6 +40616,9 @@ private static void putOperations38(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations46(Map m) { m.put("nzherald-sections", new Operation( "nzherald-sections", "GET", @@ -34440,9 +40854,6 @@ private static void putOperations38(Map m) { List.of("ApiKeyAuth"), true, List.of())); - } - - private static void putOperations39(Map m) { m.put("oldnavy-search", new Operation( "oldnavy-search", "GET", @@ -34494,7 +40905,9 @@ private static void putOperations39(Map m) { "/opendota/benchmarks", List.of(), List.of( - new QueryParam("hero_id", true, "integer", List.of())), + new QueryParam("hero_id", true, "integer", List.of()), + new QueryParam("bracket", false, "integer", List.of()), + new QueryParam("role", false, "string", List.of("core", "support"))), List.of(), null, false, @@ -34507,7 +40920,35 @@ private static void putOperations39(Map m) { "/opendota/constants", List.of(), List.of( - new QueryParam("resource", true, "string", List.of("game_mode", "lobby_type", "patch", "region", "cluster", "item_ids", "ability_ids", "permanent_buffs", "xp_level", "countries", "order_types", "player_colors"))), + new QueryParam("resource", true, "string", List.of("game_mode", "lobby_type", "patch", "region", "cluster", "item_ids", "ability_ids", "permanent_buffs", "xp_level", "countries", "order_types", "player_colors", "chat_wheel", "item_colors", "ancients", "skillshots"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("opendota-find-matches", new Operation( + "opendota-find-matches", + "GET", + "/opendota/find-matches", + List.of(), + List.of( + new QueryParam("team_a", false, "string", List.of()), + new QueryParam("team_b", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("opendota-hero-descriptions", new Operation( + "opendota-hero-descriptions", + "GET", + "/opendota/hero-descriptions", + List.of(), + List.of( + new QueryParam("hero_id", false, "integer", List.of()), + new QueryParam("include_lore", false, "boolean", List.of())), List.of(), null, false, @@ -34540,6 +40981,19 @@ private static void putOperations39(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("opendota-hero-matches", new Operation( + "opendota-hero-matches", + "GET", + "/opendota/hero-matches", + List.of(), + List.of( + new QueryParam("hero_id", true, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("opendota-hero-matchups", new Operation( "opendota-hero-matchups", "GET", @@ -34718,6 +41172,21 @@ private static void putOperations39(Map m) { List.of("ApiKeyAuth"), true, List.of())); + m.put("opendota-public-matches", new Operation( + "opendota-public-matches", + "GET", + "/opendota/public-matches", + List.of(), + List.of( + new QueryParam("min_rank", false, "integer", List.of("11", "12", "13", "14", "15", "21", "22", "23", "24", "25", "31", "32", "33", "34", "35", "41", "42", "43", "44", "45", "51", "52", "53", "54", "55", "61", "62", "63", "64", "65", "71", "72", "73", "74", "75", "81", "82", "83", "84", "85")), + new QueryParam("max_rank", false, "integer", List.of("11", "12", "13", "14", "15", "21", "22", "23", "24", "25", "31", "32", "33", "34", "35", "41", "42", "43", "44", "45", "51", "52", "53", "54", "55", "61", "62", "63", "64", "65", "71", "72", "73", "74", "75", "81", "82", "83", "84", "85")), + new QueryParam("less_than_match_id", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("opendota-rank-distribution", new Operation( "opendota-rank-distribution", "GET", @@ -34826,6 +41295,697 @@ private static void putOperations39(Map m) { List.of("ApiKeyAuth"), true, List.of())); + m.put("openf1-car-data", new Operation( + "openf1-car-data", + "GET", + "/openf1/car-data", + List.of(), + List.of( + new QueryParam("session_key", false, "string", List.of()), + new QueryParam("meeting_key", false, "string", List.of()), + new QueryParam("driver_number", false, "integer", List.of()), + new QueryParam("date_from", false, "string", List.of()), + new QueryParam("date_to", false, "string", List.of()), + new QueryParam("speed_gte", false, "integer", List.of()), + new QueryParam("speed_lte", false, "integer", List.of()), + new QueryParam("rpm_gte", false, "integer", List.of()), + new QueryParam("rpm_lte", false, "integer", List.of()), + new QueryParam("throttle_gte", false, "integer", List.of()), + new QueryParam("throttle_lte", false, "integer", List.of()), + new QueryParam("n_gear", false, "integer", List.of()), + new QueryParam("drs", false, "integer", List.of()), + new QueryParam("brake", false, "integer", List.of()), + new QueryParam("filter", false, "array", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openf1-championship-drivers", new Operation( + "openf1-championship-drivers", + "GET", + "/openf1/championship-drivers", + List.of(), + List.of( + new QueryParam("session_key", false, "string", List.of()), + new QueryParam("meeting_key", false, "string", List.of()), + new QueryParam("driver_number", false, "integer", List.of()), + new QueryParam("filter", false, "array", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openf1-championship-teams", new Operation( + "openf1-championship-teams", + "GET", + "/openf1/championship-teams", + List.of(), + List.of( + new QueryParam("session_key", false, "string", List.of()), + new QueryParam("meeting_key", false, "string", List.of()), + new QueryParam("team_name", false, "string", List.of()), + new QueryParam("filter", false, "array", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openf1-drivers", new Operation( + "openf1-drivers", + "GET", + "/openf1/drivers", + List.of(), + List.of( + new QueryParam("session_key", false, "string", List.of()), + new QueryParam("meeting_key", false, "string", List.of()), + new QueryParam("driver_number", false, "integer", List.of()), + new QueryParam("team_name", false, "string", List.of()), + new QueryParam("name_acronym", false, "string", List.of()), + new QueryParam("full_name", false, "string", List.of()), + new QueryParam("country_code", false, "string", List.of()), + new QueryParam("filter", false, "array", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openf1-intervals", new Operation( + "openf1-intervals", + "GET", + "/openf1/intervals", + List.of(), + List.of( + new QueryParam("session_key", false, "string", List.of()), + new QueryParam("meeting_key", false, "string", List.of()), + new QueryParam("driver_number", false, "integer", List.of()), + new QueryParam("date_from", false, "string", List.of()), + new QueryParam("date_to", false, "string", List.of()), + new QueryParam("interval_gt", false, "number", List.of()), + new QueryParam("interval_lt", false, "number", List.of()), + new QueryParam("gap_to_leader_gt", false, "number", List.of()), + new QueryParam("gap_to_leader_lt", false, "number", List.of()), + new QueryParam("filter", false, "array", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openf1-laps", new Operation( + "openf1-laps", + "GET", + "/openf1/laps", + List.of(), + List.of( + new QueryParam("session_key", false, "string", List.of()), + new QueryParam("meeting_key", false, "string", List.of()), + new QueryParam("driver_number", false, "integer", List.of()), + new QueryParam("lap_number", false, "integer", List.of()), + new QueryParam("is_pit_out_lap", false, "boolean", List.of()), + new QueryParam("lap_duration_gte", false, "number", List.of()), + new QueryParam("lap_duration_lte", false, "number", List.of()), + new QueryParam("date_from", false, "string", List.of()), + new QueryParam("date_to", false, "string", List.of()), + new QueryParam("filter", false, "array", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openf1-location", new Operation( + "openf1-location", + "GET", + "/openf1/location", + List.of(), + List.of( + new QueryParam("session_key", false, "string", List.of()), + new QueryParam("meeting_key", false, "string", List.of()), + new QueryParam("driver_number", false, "integer", List.of()), + new QueryParam("date_from", false, "string", List.of()), + new QueryParam("date_to", false, "string", List.of()), + new QueryParam("filter", false, "array", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openf1-meetings", new Operation( + "openf1-meetings", + "GET", + "/openf1/meetings", + List.of(), + List.of( + new QueryParam("year", false, "integer", List.of()), + new QueryParam("country_name", false, "string", List.of()), + new QueryParam("country_code", false, "string", List.of()), + new QueryParam("meeting_name", false, "string", List.of()), + new QueryParam("circuit_key", false, "integer", List.of()), + new QueryParam("circuit_short_name", false, "string", List.of()), + new QueryParam("circuit_type", false, "string", List.of("Permanent", "Temporary - Road", "Temporary - Street")), + new QueryParam("location", false, "string", List.of()), + new QueryParam("is_cancelled", false, "boolean", List.of()), + new QueryParam("date_from", false, "string", List.of()), + new QueryParam("date_to", false, "string", List.of()), + new QueryParam("filter", false, "array", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openf1-overtakes", new Operation( + "openf1-overtakes", + "GET", + "/openf1/overtakes", + List.of(), + List.of( + new QueryParam("session_key", false, "string", List.of()), + new QueryParam("meeting_key", false, "string", List.of()), + new QueryParam("overtaking_driver_number", false, "integer", List.of()), + new QueryParam("overtaken_driver_number", false, "integer", List.of()), + new QueryParam("position", false, "integer", List.of()), + new QueryParam("date_from", false, "string", List.of()), + new QueryParam("date_to", false, "string", List.of()), + new QueryParam("filter", false, "array", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openf1-pit", new Operation( + "openf1-pit", + "GET", + "/openf1/pit", + List.of(), + List.of( + new QueryParam("session_key", false, "string", List.of()), + new QueryParam("meeting_key", false, "string", List.of()), + new QueryParam("driver_number", false, "integer", List.of()), + new QueryParam("lap_number", false, "integer", List.of()), + new QueryParam("date_from", false, "string", List.of()), + new QueryParam("date_to", false, "string", List.of()), + new QueryParam("stop_duration_lt", false, "number", List.of()), + new QueryParam("stop_duration_lte", false, "number", List.of()), + new QueryParam("lane_duration_gte", false, "number", List.of()), + new QueryParam("lane_duration_lte", false, "number", List.of()), + new QueryParam("filter", false, "array", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openf1-position", new Operation( + "openf1-position", + "GET", + "/openf1/position", + List.of(), + List.of( + new QueryParam("session_key", false, "string", List.of()), + new QueryParam("meeting_key", false, "string", List.of()), + new QueryParam("driver_number", false, "integer", List.of()), + new QueryParam("position_gte", false, "integer", List.of()), + new QueryParam("position_lte", false, "integer", List.of()), + new QueryParam("date_from", false, "string", List.of()), + new QueryParam("date_to", false, "string", List.of()), + new QueryParam("filter", false, "array", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + } + + private static void putOperations47(Map m) { + m.put("openf1-race-control", new Operation( + "openf1-race-control", + "GET", + "/openf1/race-control", + List.of(), + List.of( + new QueryParam("session_key", false, "string", List.of()), + new QueryParam("meeting_key", false, "string", List.of()), + new QueryParam("driver_number", false, "integer", List.of()), + new QueryParam("category", false, "string", List.of("CarEvent", "Drs", "Flag", "Other", "SafetyCar", "SessionStatus")), + new QueryParam("flag", false, "string", List.of("BLACK AND WHITE", "BLUE", "CHEQUERED", "CLEAR", "DOUBLE YELLOW", "GREEN", "RED", "YELLOW")), + new QueryParam("scope", false, "string", List.of("Track", "Driver", "Sector")), + new QueryParam("sector", false, "integer", List.of()), + new QueryParam("lap_number", false, "integer", List.of()), + new QueryParam("qualifying_phase", false, "integer", List.of()), + new QueryParam("date_from", false, "string", List.of()), + new QueryParam("date_to", false, "string", List.of()), + new QueryParam("filter", false, "array", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openf1-session-result", new Operation( + "openf1-session-result", + "GET", + "/openf1/session-result", + List.of(), + List.of( + new QueryParam("session_key", false, "string", List.of()), + new QueryParam("meeting_key", false, "string", List.of()), + new QueryParam("driver_number", false, "integer", List.of()), + new QueryParam("position_gte", false, "integer", List.of()), + new QueryParam("position_lte", false, "integer", List.of()), + new QueryParam("dnf", false, "boolean", List.of()), + new QueryParam("dns", false, "boolean", List.of()), + new QueryParam("dsq", false, "boolean", List.of()), + new QueryParam("filter", false, "array", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openf1-sessions", new Operation( + "openf1-sessions", + "GET", + "/openf1/sessions", + List.of(), + List.of( + new QueryParam("year", false, "integer", List.of()), + new QueryParam("country_name", false, "string", List.of()), + new QueryParam("country_code", false, "string", List.of()), + new QueryParam("session_name", false, "string", List.of()), + new QueryParam("session_type", false, "string", List.of("Practice", "Qualifying", "Race")), + new QueryParam("meeting_key", false, "string", List.of()), + new QueryParam("circuit_key", false, "integer", List.of()), + new QueryParam("is_cancelled", false, "boolean", List.of()), + new QueryParam("date_from", false, "string", List.of()), + new QueryParam("date_to", false, "string", List.of()), + new QueryParam("filter", false, "array", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openf1-starting-grid", new Operation( + "openf1-starting-grid", + "GET", + "/openf1/starting-grid", + List.of(), + List.of( + new QueryParam("session_key", false, "string", List.of()), + new QueryParam("meeting_key", false, "string", List.of()), + new QueryParam("driver_number", false, "integer", List.of()), + new QueryParam("position_gte", false, "integer", List.of()), + new QueryParam("position_lte", false, "integer", List.of()), + new QueryParam("filter", false, "array", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openf1-stints", new Operation( + "openf1-stints", + "GET", + "/openf1/stints", + List.of(), + List.of( + new QueryParam("session_key", false, "string", List.of()), + new QueryParam("meeting_key", false, "string", List.of()), + new QueryParam("driver_number", false, "integer", List.of()), + new QueryParam("compound", false, "string", List.of("SOFT", "MEDIUM", "HARD", "INTERMEDIATE", "WET")), + new QueryParam("stint_number", false, "integer", List.of()), + new QueryParam("tyre_age_at_start_gte", false, "integer", List.of()), + new QueryParam("tyre_age_at_start_lte", false, "integer", List.of()), + new QueryParam("lap_start_gte", false, "integer", List.of()), + new QueryParam("lap_start_lte", false, "integer", List.of()), + new QueryParam("lap_end_gte", false, "integer", List.of()), + new QueryParam("lap_end_lte", false, "integer", List.of()), + new QueryParam("filter", false, "array", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openf1-team-radio", new Operation( + "openf1-team-radio", + "GET", + "/openf1/team-radio", + List.of(), + List.of( + new QueryParam("session_key", false, "string", List.of()), + new QueryParam("meeting_key", false, "string", List.of()), + new QueryParam("driver_number", false, "integer", List.of()), + new QueryParam("date_from", false, "string", List.of()), + new QueryParam("date_to", false, "string", List.of()), + new QueryParam("filter", false, "array", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openf1-weather", new Operation( + "openf1-weather", + "GET", + "/openf1/weather", + List.of(), + List.of( + new QueryParam("session_key", false, "string", List.of()), + new QueryParam("meeting_key", false, "string", List.of()), + new QueryParam("date_from", false, "string", List.of()), + new QueryParam("date_to", false, "string", List.of()), + new QueryParam("air_temperature_gte", false, "number", List.of()), + new QueryParam("air_temperature_lte", false, "number", List.of()), + new QueryParam("track_temperature_gte", false, "number", List.of()), + new QueryParam("track_temperature_lte", false, "number", List.of()), + new QueryParam("humidity_gte", false, "number", List.of()), + new QueryParam("humidity_lte", false, "number", List.of()), + new QueryParam("pressure_gte", false, "number", List.of()), + new QueryParam("pressure_lte", false, "number", List.of()), + new QueryParam("wind_direction_gte", false, "number", List.of()), + new QueryParam("wind_direction_lte", false, "number", List.of()), + new QueryParam("wind_speed_gte", false, "number", List.of()), + new QueryParam("wind_speed_lte", false, "number", List.of()), + new QueryParam("rainfall", false, "integer", List.of()), + new QueryParam("filter", false, "array", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openligadb-current-group", new Operation( + "openligadb-current-group", + "GET", + "/openligadb/current-group", + List.of(), + List.of( + new QueryParam("league_shortcut", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openligadb-current-matchday", new Operation( + "openligadb-current-matchday", + "GET", + "/openligadb/current-matchday", + List.of(), + List.of( + new QueryParam("league_shortcut", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openligadb-goal-getters", new Operation( + "openligadb-goal-getters", + "GET", + "/openligadb/goal-getters", + List.of(), + List.of( + new QueryParam("league_shortcut", true, "string", List.of()), + new QueryParam("season", true, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openligadb-groups", new Operation( + "openligadb-groups", + "GET", + "/openligadb/groups", + List.of(), + List.of( + new QueryParam("league_shortcut", true, "string", List.of()), + new QueryParam("season", true, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openligadb-last-changed", new Operation( + "openligadb-last-changed", + "GET", + "/openligadb/last-changed", + List.of(), + List.of( + new QueryParam("league_shortcut", true, "string", List.of()), + new QueryParam("season", true, "integer", List.of()), + new QueryParam("group_order_id", true, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openligadb-last-match", new Operation( + "openligadb-last-match", + "GET", + "/openligadb/last-match", + List.of(), + List.of( + new QueryParam("league_shortcut", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openligadb-last-team-match", new Operation( + "openligadb-last-team-match", + "GET", + "/openligadb/last-team-match", + List.of(), + List.of( + new QueryParam("league_id", true, "integer", List.of()), + new QueryParam("team_id", true, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openligadb-league-team-matches", new Operation( + "openligadb-league-team-matches", + "GET", + "/openligadb/league-team-matches", + List.of(), + List.of( + new QueryParam("league_shortcut", true, "string", List.of()), + new QueryParam("season", true, "integer", List.of()), + new QueryParam("team_filter", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openligadb-leagues", new Operation( + "openligadb-leagues", + "GET", + "/openligadb/leagues", + List.of(), + List.of( + new QueryParam("season", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openligadb-match", new Operation( + "openligadb-match", + "GET", + "/openligadb/match", + List.of(), + List.of( + new QueryParam("match_id", true, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openligadb-matchday-matches", new Operation( + "openligadb-matchday-matches", + "GET", + "/openligadb/matchday-matches", + List.of(), + List.of( + new QueryParam("league_shortcut", true, "string", List.of()), + new QueryParam("season", true, "integer", List.of()), + new QueryParam("group_order_id", true, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openligadb-league-matches", new Operation( + "openligadb-league-matches", + "GET", + "/openligadb/matches", + List.of(), + List.of( + new QueryParam("league_shortcut", true, "string", List.of()), + new QueryParam("season", true, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openligadb-matches-by-team", new Operation( + "openligadb-matches-by-team", + "GET", + "/openligadb/matches-by-team", + List.of(), + List.of( + new QueryParam("team_filter", true, "string", List.of()), + new QueryParam("weeks_past", true, "integer", List.of()), + new QueryParam("weeks_future", true, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openligadb-matches-by-team-id", new Operation( + "openligadb-matches-by-team-id", + "GET", + "/openligadb/matches-by-team-id", + List.of(), + List.of( + new QueryParam("team_id", true, "integer", List.of()), + new QueryParam("weeks_past", true, "integer", List.of()), + new QueryParam("weeks_future", true, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openligadb-next-match", new Operation( + "openligadb-next-match", + "GET", + "/openligadb/next-match", + List.of(), + List.of( + new QueryParam("league_shortcut", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openligadb-next-team-match", new Operation( + "openligadb-next-team-match", + "GET", + "/openligadb/next-team-match", + List.of(), + List.of( + new QueryParam("league_id", true, "integer", List.of()), + new QueryParam("team_id", true, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openligadb-result-infos", new Operation( + "openligadb-result-infos", + "GET", + "/openligadb/result-infos", + List.of(), + List.of( + new QueryParam("league_id", true, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openligadb-result-types", new Operation( + "openligadb-result-types", + "GET", + "/openligadb/result-types", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openligadb-sports", new Operation( + "openligadb-sports", + "GET", + "/openligadb/sports", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openligadb-table", new Operation( + "openligadb-table", + "GET", + "/openligadb/table", + List.of(), + List.of( + new QueryParam("league_shortcut", true, "string", List.of()), + new QueryParam("season", true, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openligadb-team-pair-matches", new Operation( + "openligadb-team-pair-matches", + "GET", + "/openligadb/team-pair-matches", + List.of(), + List.of( + new QueryParam("team_id_1", true, "integer", List.of()), + new QueryParam("team_id_2", true, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("openligadb-teams", new Operation( + "openligadb-teams", + "GET", + "/openligadb/teams", + List.of(), + List.of( + new QueryParam("league_shortcut", true, "string", List.of()), + new QueryParam("season", true, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("opensea-activity", new Operation( "opensea-activity", "GET", @@ -35253,6 +42413,9 @@ private static void putOperations39(Map m) { List.of("ApiKeyAuth"), true, List.of("cursor"))); + } + + private static void putOperations48(Map m) { m.put("opensea-profile-items", new Operation( "opensea-profile-items", "GET", @@ -35268,9 +42431,6 @@ private static void putOperations39(Map m) { List.of("ApiKeyAuth"), true, List.of("cursor"))); - } - - private static void putOperations40(Map m) { m.put("opensea-profile-search-items", new Operation( "opensea-profile-search-items", "GET", @@ -36082,6 +43242,61 @@ private static void putOperations40(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("partiful-city-facets", new Operation( + "partiful-city-facets", + "GET", + "/partiful/city-facets", + List.of(), + List.of( + new QueryParam("region", true, "string", List.of("NYC", "LA", "SF", "CHI", "ATX", "BOS", "DC", "MIA", "LON")), + new QueryParam("facet", true, "string", List.of("events", "today", "tomorrow", "this-week", "this-weekend", "thanksgiving", "fall", "popups", "food", "free-events", "live-music", "parties", "run-clubs", "trivia", "lgbtq"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + } + + private static void putOperations49(Map m) { + m.put("partiful-city-feed", new Operation( + "partiful-city-feed", + "GET", + "/partiful/city-feed", + List.of(), + List.of( + new QueryParam("region", true, "string", List.of("NYC", "LA", "SF", "CHI", "ATX", "BOS", "DC", "MIA", "LON"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("partiful-event", new Operation( + "partiful-event", + "GET", + "/partiful/event", + List.of(), + List.of( + new QueryParam("event_id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("partiful-explore-cities", new Operation( + "partiful-explore-cities", + "GET", + "/partiful/explore-cities", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("patreon-creator", new Operation( "patreon-creator", "GET", @@ -36108,9 +43323,6 @@ private static void putOperations40(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations41(Map m) { m.put("patreon-explore", new Operation( "patreon-explore", "GET", @@ -36330,6 +43542,307 @@ private static void putOperations41(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("petsmart-categories", new Operation( + "petsmart-categories", + "GET", + "/petsmart/categories", + List.of(), + List.of( + new QueryParam("country", false, "string", List.of("us", "ca")), + new QueryParam("query", false, "string", List.of()), + new QueryParam("parent", false, "string", List.of()), + new QueryParam("depth", false, "integer", List.of()), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("limit", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("petsmart-product", new Operation( + "petsmart-product", + "GET", + "/petsmart/product", + List.of(), + List.of( + new QueryParam("country", false, "string", List.of("us", "ca")), + new QueryParam("id", true, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("petsmart-product-inventory", new Operation( + "petsmart-product-inventory", + "GET", + "/petsmart/product/inventory", + List.of(), + List.of( + new QueryParam("id", true, "integer", List.of()), + new QueryParam("store_id", false, "integer", List.of()), + new QueryParam("min_quantity", false, "integer", List.of()), + new QueryParam("limit", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("petsmart-search", new Operation( + "petsmart-search", + "GET", + "/petsmart/search", + List.of(), + List.of( + new QueryParam("country", false, "string", List.of("us", "ca")), + new QueryParam("query", false, "string", List.of()), + new QueryParam("category", false, "string", List.of()), + new QueryParam("brand", false, "string", List.of()), + new QueryParam("filter", false, "string", List.of()), + new QueryParam("min_price", false, "number", List.of()), + new QueryParam("max_price", false, "number", List.of()), + new QueryParam("min_rating", false, "number", List.of()), + new QueryParam("sort", false, "string", List.of("relevance", "price_asc", "price_desc", "best_sellers", "top_rated", "new_arrivals")), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("limit", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("petsmart-search-filters", new Operation( + "petsmart-search-filters", + "GET", + "/petsmart/search/filters", + List.of(), + List.of( + new QueryParam("country", false, "string", List.of("us", "ca")), + new QueryParam("query", false, "string", List.of()), + new QueryParam("category", false, "string", List.of()), + new QueryParam("brand", false, "string", List.of()), + new QueryParam("filter", false, "string", List.of()), + new QueryParam("min_price", false, "number", List.of()), + new QueryParam("max_price", false, "number", List.of()), + new QueryParam("min_rating", false, "number", List.of()), + new QueryParam("facet", false, "string", List.of()), + new QueryParam("facet_query", false, "string", List.of()), + new QueryParam("limit", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("petsmart-suggest", new Operation( + "petsmart-suggest", + "GET", + "/petsmart/suggest", + List.of(), + List.of( + new QueryParam("country", false, "string", List.of("us", "ca")), + new QueryParam("query", true, "string", List.of()), + new QueryParam("limit", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("pgatour-leaderboard", new Operation( + "pgatour-leaderboard", + "GET", + "/pgatour/leaderboard", + List.of(), + List.of( + new QueryParam("tour", false, "string", List.of("R", "S", "H", "Y"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("pgatour-players", new Operation( + "pgatour-players", + "GET", + "/pgatour/players", + List.of(), + List.of( + new QueryParam("tour", false, "string", List.of("R", "S", "H", "Y"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("pgatour-schedule", new Operation( + "pgatour-schedule", + "GET", + "/pgatour/schedule", + List.of(), + List.of( + new QueryParam("tour", false, "string", List.of("R", "S", "H", "Y")), + new QueryParam("season", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("pgatour-schedule-seasons", new Operation( + "pgatour-schedule-seasons", + "GET", + "/pgatour/schedule/seasons", + List.of(), + List.of( + new QueryParam("tour", false, "string", List.of("R", "S", "H", "Y"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("pgatour-stats", new Operation( + "pgatour-stats", + "GET", + "/pgatour/stats", + List.of(), + List.of( + new QueryParam("tour", false, "string", List.of("R", "S", "H", "Y"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("pgatour-stat-detail", new Operation( + "pgatour-stat-detail", + "GET", + "/pgatour/stats/{stat_id}", + List.of("stat_id"), + List.of( + new QueryParam("tour", false, "string", List.of("R", "S", "H", "Y")), + new QueryParam("year", false, "integer", List.of()), + new QueryParam("query_type", false, "string", List.of("THROUGH_EVENT", "EVENT_ONLY")), + new QueryParam("tournament_id", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("pgatour-stat-options", new Operation( + "pgatour-stat-options", + "GET", + "/pgatour/stats/{stat_id}/options", + List.of("stat_id"), + List.of( + new QueryParam("tour", false, "string", List.of("R", "S", "H", "Y")), + new QueryParam("year", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("pgatour-tournament-links", new Operation( + "pgatour-tournament-links", + "GET", + "/pgatour/tournament-links", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("pgatour-tournament-broadcast", new Operation( + "pgatour-tournament-broadcast", + "GET", + "/pgatour/tournaments/{year}/{slug}/{id}/broadcast", + List.of("year", "slug", "id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("pgatour-tournament-course-stats", new Operation( + "pgatour-tournament-course-stats", + "GET", + "/pgatour/tournaments/{year}/{slug}/{id}/course-stats", + List.of("year", "slug", "id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("pgatour-tournament-field", new Operation( + "pgatour-tournament-field", + "GET", + "/pgatour/tournaments/{year}/{slug}/{id}/field", + List.of("year", "slug", "id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("pgatour-tournament-overview", new Operation( + "pgatour-tournament-overview", + "GET", + "/pgatour/tournaments/{year}/{slug}/{id}/overview", + List.of("year", "slug", "id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("pgatour-tournament-past-results", new Operation( + "pgatour-tournament-past-results", + "GET", + "/pgatour/tournaments/{year}/{slug}/{id}/past-results", + List.of("year", "slug", "id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("pgatour-tournament-tee-times", new Operation( + "pgatour-tournament-tee-times", + "GET", + "/pgatour/tournaments/{year}/{slug}/{id}/tee-times", + List.of("year", "slug", "id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("pgatour-tournament-weather", new Operation( + "pgatour-tournament-weather", + "GET", + "/pgatour/tournaments/{year}/{slug}/{id}/weather", + List.of("year", "slug", "id"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("phillyinquirer-article", new Operation( "phillyinquirer-article", "GET", @@ -36548,6 +44061,9 @@ private static void putOperations41(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations50(Map m) { m.put("physorg-news", new Operation( "physorg-news", "GET", @@ -36920,9 +44436,6 @@ private static void putOperations41(Map m) { List.of("ApiKeyAuth"), true, List.of())); - } - - private static void putOperations42(Map m) { m.put("playstation-deals", new Operation( "playstation-deals", "GET", @@ -37418,6 +44931,9 @@ private static void putOperations42(Map m) { List.of("ApiKeyAuth"), true, List.of())); + } + + private static void putOperations51(Map m) { m.put("polymarket-market-detail-by-condition", new Operation( "polymarket-market-detail-by-condition", "GET", @@ -37771,9 +45287,6 @@ private static void putOperations42(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations43(Map m) { m.put("polymarket-related-tag-rows-by-slug", new Operation( "polymarket-related-tag-rows-by-slug", "GET", @@ -38242,6 +45755,9 @@ private static void putOperations43(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations52(Map m) { m.put("poshmark-closet", new Operation( "poshmark-closet", "GET", @@ -38616,9 +46132,6 @@ private static void putOperations43(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations44(Map m) { m.put("pristine-marketplace-reviews", new Operation( "pristine-marketplace-reviews", "GET", @@ -39086,6 +46599,9 @@ private static void putOperations44(Map m) { List.of("ApiKeyAuth"), true, List.of())); + } + + private static void putOperations53(Map m) { m.put("psa-probatfacts-categories", new Operation( "psa-probatfacts-categories", "GET", @@ -39422,9 +46938,6 @@ private static void putOperations44(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations45(Map m) { m.put("quince-product", new Operation( "quince-product", "GET", @@ -39885,6 +47398,9 @@ private static void putOperations45(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations54(Map m) { m.put("rebag-sitemap-urls", new Operation( "rebag-sitemap-urls", "GET", @@ -40292,9 +47808,6 @@ private static void putOperations45(Map m) { List.of("ApiKeyAuth"), true, List.of())); - } - - private static void putOperations46(Map m) { m.put("redfin-similar", new Operation( "redfin-similar", "GET", @@ -40758,6 +48271,9 @@ private static void putOperations46(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations55(Map m) { m.put("resy-restaurant", new Operation( "resy-restaurant", "GET", @@ -41110,9 +48626,6 @@ private static void putOperations46(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations47(Map m) { m.put("reverb-search", new Operation( "reverb-search", "GET", @@ -41606,6 +49119,9 @@ private static void putOperations47(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations56(Map m) { m.put("rothys-sitemaps", new Operation( "rothys-sitemaps", "GET", @@ -41685,6 +49201,50 @@ private static void putOperations47(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("rottentomatoes-critic", new Operation( + "rottentomatoes-critic", + "GET", + "/rottentomatoes/critic", + List.of(), + List.of( + new QueryParam("path", false, "string", List.of()), + new QueryParam("url", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("rottentomatoes-critic-publications", new Operation( + "rottentomatoes-critic-publications", + "GET", + "/rottentomatoes/critic/publications", + List.of(), + List.of( + new QueryParam("path", false, "string", List.of()), + new QueryParam("url", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("rottentomatoes-critic-reviews", new Operation( + "rottentomatoes-critic-reviews", + "GET", + "/rottentomatoes/critic/reviews", + List.of(), + List.of( + new QueryParam("path", false, "string", List.of()), + new QueryParam("url", false, "string", List.of()), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("after", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("rottentomatoes-critics-authors", new Operation( "rottentomatoes-critics-authors", "GET", @@ -41828,6 +49388,23 @@ private static void putOperations47(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("rottentomatoes-episode-reviews", new Operation( + "rottentomatoes-episode-reviews", + "GET", + "/rottentomatoes/episode/reviews", + List.of(), + List.of( + new QueryParam("path", false, "string", List.of()), + new QueryParam("url", false, "string", List.of()), + new QueryParam("type", false, "string", List.of("critics", "top-critics", "audience")), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("after", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("rottentomatoes-movie", new Operation( "rottentomatoes-movie", "GET", @@ -41859,6 +49436,34 @@ private static void putOperations47(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("rottentomatoes-movie-videos", new Operation( + "rottentomatoes-movie-videos", + "GET", + "/rottentomatoes/movie/videos", + List.of(), + List.of( + new QueryParam("path", false, "string", List.of()), + new QueryParam("url", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("rottentomatoes-movies", new Operation( + "rottentomatoes-movies", + "GET", + "/rottentomatoes/movies", + List.of(), + List.of( + new QueryParam("ids", false, "string", List.of()), + new QueryParam("paths", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("rottentomatoes-person", new Operation( "rottentomatoes-person", "GET", @@ -41866,7 +49471,39 @@ private static void putOperations47(Map m) { List.of(), List.of( new QueryParam("path", false, "string", List.of()), - new QueryParam("url", false, "string", List.of())), + new QueryParam("url", false, "string", List.of()), + new QueryParam("media_type", false, "string", List.of("movie", "tv")), + new QueryParam("sort", false, "string", List.of("newest", "oldest", "audience_highest", "audience_lowest", "critic_highest", "critic_lowest")), + new QueryParam("after", false, "string", List.of()), + new QueryParam("limit", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("rottentomatoes-publication", new Operation( + "rottentomatoes-publication", + "GET", + "/rottentomatoes/publication", + List.of(), + List.of( + new QueryParam("id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("rottentomatoes-publication-reviews", new Operation( + "rottentomatoes-publication-reviews", + "GET", + "/rottentomatoes/publication/reviews", + List.of(), + List.of( + new QueryParam("id", true, "string", List.of()), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("after", false, "string", List.of())), List.of(), null, false, @@ -41901,6 +49538,23 @@ private static void putOperations47(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("rottentomatoes-season-reviews", new Operation( + "rottentomatoes-season-reviews", + "GET", + "/rottentomatoes/season/reviews", + List.of(), + List.of( + new QueryParam("path", false, "string", List.of()), + new QueryParam("url", false, "string", List.of()), + new QueryParam("type", false, "string", List.of("critics", "top-critics", "audience")), + new QueryParam("limit", false, "integer", List.of()), + new QueryParam("after", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("rottentomatoes-series", new Operation( "rottentomatoes-series", "GET", @@ -41998,9 +49652,6 @@ private static void putOperations47(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations48(Map m) { m.put("rte-article", new Operation( "rte-article", "GET", @@ -42316,6 +49967,9 @@ private static void putOperations48(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations57(Map m) { m.put("scmp-article", new Operation( "scmp-article", "GET", @@ -42810,9 +50464,6 @@ private static void putOperations48(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations49(Map m) { m.put("sephora-brands", new Operation( "sephora-brands", "GET", @@ -43158,6 +50809,9 @@ private static void putOperations49(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations58(Map m) { m.put("shein-category-filters", new Operation( "shein-category-filters", "GET", @@ -43640,9 +51294,6 @@ private static void putOperations49(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations50(Map m) { m.put("shopee-home", new Operation( "shopee-home", "GET", @@ -44006,6 +51657,9 @@ private static void putOperations50(Map m) { List.of("ApiKeyAuth"), true, List.of())); + } + + private static void putOperations59(Map m) { m.put("skims-pages", new Operation( "skims-pages", "GET", @@ -44466,9 +52120,6 @@ private static void putOperations50(Map m) { List.of("ApiKeyAuth"), true, List.of())); - } - - private static void putOperations51(Map m) { m.put("sloanreview-article", new Operation( "sloanreview-article", "GET", @@ -44796,6 +52447,9 @@ private static void putOperations51(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations60(Map m) { m.put("sofascore-event-highlights", new Operation( "sofascore-event-highlights", "GET", @@ -44874,6 +52528,20 @@ private static void putOperations51(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("sofascore-event-player-actions", new Operation( + "sofascore-event-player-actions", + "GET", + "/sofascore/event-player-actions", + List.of(), + List.of( + new QueryParam("id", true, "string", List.of()), + new QueryParam("player_id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("sofascore-event-player-heatmap", new Operation( "sofascore-event-player-heatmap", "GET", @@ -44968,6 +52636,20 @@ private static void putOperations51(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("sofascore-event-team-shotmap", new Operation( + "sofascore-event-team-shotmap", + "GET", + "/sofascore/event-team-shotmap", + List.of(), + List.of( + new QueryParam("id", true, "string", List.of()), + new QueryParam("team_id", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("sofascore-event-team-streaks", new Operation( "sofascore-event-team-streaks", "GET", @@ -45270,9 +52952,6 @@ private static void putOperations51(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations52(Map m) { m.put("sofascore-player-tournaments", new Operation( "sofascore-player-tournaments", "GET", @@ -45589,6 +53268,9 @@ private static void putOperations52(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations61(Map m) { m.put("sofascore-team", new Operation( "sofascore-team", "GET", @@ -46122,9 +53804,6 @@ private static void putOperations52(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations53(Map m) { m.put("sonic-categories", new Operation( "sonic-categories", "GET", @@ -46435,6 +54114,9 @@ private static void putOperations53(Map m) { List.of("ApiKeyAuth"), true, List.of())); + } + + private static void putOperations62(Map m) { m.put("sparkfun-product", new Operation( "sparkfun-product", "GET", @@ -46464,6 +54146,285 @@ private static void putOperations53(Map m) { List.of("ApiKeyAuth"), true, List.of())); + m.put("speedrun-catalog", new Operation( + "speedrun-catalog", + "GET", + "/speedrun/catalogs/{kind}", + List.of("kind"), + List.of( + new QueryParam("max", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("speedrun-category-detail", new Operation( + "speedrun-category-detail", + "GET", + "/speedrun/categories/{id}", + List.of("id"), + List.of( + new QueryParam("embed", false, "array", List.of("game", "variables"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("speedrun-category-records", new Operation( + "speedrun-category-records", + "GET", + "/speedrun/categories/{id}/records", + List.of("id"), + List.of( + new QueryParam("embed", false, "array", List.of("game", "category", "level", "platforms", "regions", "variables")), + new QueryParam("top", false, "integer", List.of()), + new QueryParam("skip_empty", false, "boolean", List.of()), + new QueryParam("max", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("speedrun-category-variables", new Operation( + "speedrun-category-variables", + "GET", + "/speedrun/categories/{id}/variables", + List.of("id"), + List.of( + new QueryParam("embed", false, "array", List.of("game")), + new QueryParam("orderby", false, "string", List.of("name", "mandatory", "user-defined", "pos")), + new QueryParam("direction", false, "string", List.of("asc", "desc"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("speedrun-games", new Operation( + "speedrun-games", + "GET", + "/speedrun/games", + List.of(), + List.of( + new QueryParam("name", false, "string", List.of()), + new QueryParam("platform", false, "string", List.of()), + new QueryParam("region", false, "string", List.of()), + new QueryParam("gametype", false, "string", List.of()), + new QueryParam("max", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of()), + new QueryParam("abbreviation", false, "string", List.of()), + new QueryParam("released", false, "integer", List.of()), + new QueryParam("genre", false, "string", List.of()), + new QueryParam("engine", false, "string", List.of()), + new QueryParam("developer", false, "string", List.of()), + new QueryParam("publisher", false, "string", List.of()), + new QueryParam("orderby", false, "string", List.of("name.int", "name.jap", "abbreviation", "released", "created", "similarity")), + new QueryParam("direction", false, "string", List.of("asc", "desc")), + new QueryParam("_bulk", false, "boolean", List.of()), + new QueryParam("romhack", false, "boolean", List.of()), + new QueryParam("embed", false, "array", List.of("categories", "levels", "variables", "platforms", "regions", "gametypes", "genres", "engines", "developers", "publishers"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("speedrun-game-detail", new Operation( + "speedrun-game-detail", + "GET", + "/speedrun/games/{id}", + List.of("id"), + List.of( + new QueryParam("embed", false, "array", List.of("categories", "levels", "variables", "platforms", "regions", "gametypes", "genres", "engines", "developers", "publishers"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("speedrun-categories", new Operation( + "speedrun-categories", + "GET", + "/speedrun/games/{id}/categories", + List.of("id"), + List.of( + new QueryParam("miscellaneous", false, "boolean", List.of()), + new QueryParam("orderby", false, "string", List.of("name", "miscellaneous", "pos")), + new QueryParam("direction", false, "string", List.of("asc", "desc")), + new QueryParam("embed", false, "array", List.of("game", "variables"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("speedrun-levels", new Operation( + "speedrun-levels", + "GET", + "/speedrun/games/{id}/levels", + List.of("id"), + List.of( + new QueryParam("orderby", false, "string", List.of("name", "pos")), + new QueryParam("direction", false, "string", List.of("asc", "desc")), + new QueryParam("embed", false, "array", List.of("categories", "variables"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("speedrun-records", new Operation( + "speedrun-records", + "GET", + "/speedrun/games/{id}/records", + List.of("id"), + List.of( + new QueryParam("max", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of()), + new QueryParam("top", false, "integer", List.of()), + new QueryParam("skip_empty", false, "boolean", List.of()), + new QueryParam("embed", false, "array", List.of("game", "category", "level", "platforms", "regions", "variables"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("speedrun-variables", new Operation( + "speedrun-variables", + "GET", + "/speedrun/games/{id}/variables", + List.of("id"), + List.of( + new QueryParam("orderby", false, "string", List.of("name", "mandatory", "user-defined", "pos")), + new QueryParam("direction", false, "string", List.of("asc", "desc")), + new QueryParam("embed", false, "array", List.of("game"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("speedrun-game-leaderboard", new Operation( + "speedrun-game-leaderboard", + "GET", + "/speedrun/leaderboards/{game}/category/{category}", + List.of("game", "category"), + List.of( + new QueryParam("embed", false, "array", List.of("game", "category", "level", "platforms", "regions", "variables")), + new QueryParam("top", false, "integer", List.of()), + new QueryParam("platform", false, "string", List.of()), + new QueryParam("region", false, "string", List.of()), + new QueryParam("emulators", false, "boolean", List.of()), + new QueryParam("video_only", false, "boolean", List.of()), + new QueryParam("timing", false, "string", List.of("realtime", "realtime_noloads", "ingame")), + new QueryParam("date", false, "string", List.of()), + new QueryParam("variables", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("speedrun-level-leaderboard", new Operation( + "speedrun-level-leaderboard", + "GET", + "/speedrun/leaderboards/{game}/level/{level}/{category}", + List.of("game", "category", "level"), + List.of( + new QueryParam("embed", false, "array", List.of("game", "category", "level", "platforms", "regions", "variables")), + new QueryParam("top", false, "integer", List.of()), + new QueryParam("platform", false, "string", List.of()), + new QueryParam("region", false, "string", List.of()), + new QueryParam("emulators", false, "boolean", List.of()), + new QueryParam("video_only", false, "boolean", List.of()), + new QueryParam("timing", false, "string", List.of("realtime", "realtime_noloads", "ingame")), + new QueryParam("date", false, "string", List.of()), + new QueryParam("variables", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("speedrun-level-detail", new Operation( + "speedrun-level-detail", + "GET", + "/speedrun/levels/{id}", + List.of("id"), + List.of( + new QueryParam("embed", false, "array", List.of("categories", "variables"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("speedrun-level-categories", new Operation( + "speedrun-level-categories", + "GET", + "/speedrun/levels/{id}/categories", + List.of("id"), + List.of( + new QueryParam("embed", false, "array", List.of("game", "variables")), + new QueryParam("orderby", false, "string", List.of("name", "miscellaneous", "pos")), + new QueryParam("direction", false, "string", List.of("asc", "desc")), + new QueryParam("miscellaneous", false, "boolean", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("speedrun-level-records", new Operation( + "speedrun-level-records", + "GET", + "/speedrun/levels/{id}/records", + List.of("id"), + List.of( + new QueryParam("embed", false, "array", List.of("game", "category", "level", "platforms", "regions", "variables")), + new QueryParam("top", false, "integer", List.of()), + new QueryParam("skip_empty", false, "boolean", List.of()), + new QueryParam("max", false, "integer", List.of()), + new QueryParam("offset", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("speedrun-level-variables", new Operation( + "speedrun-level-variables", + "GET", + "/speedrun/levels/{id}/variables", + List.of("id"), + List.of( + new QueryParam("embed", false, "array", List.of("game")), + new QueryParam("orderby", false, "string", List.of("name", "mandatory", "user-defined", "pos")), + new QueryParam("direction", false, "string", List.of("asc", "desc"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("speedrun-resource-options", new Operation( + "speedrun-resource-options", + "GET", + "/speedrun/options", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("sportingnews-article", new Operation( "sportingnews-article", "GET", @@ -46943,9 +54904,6 @@ private static void putOperations53(Map m) { List.of("ApiKeyAuth"), true, List.of())); - } - - private static void putOperations54(Map m) { m.put("sportskeeda-sitemaps", new Operation( "sportskeeda-sitemaps", "GET", @@ -47030,6 +54988,9 @@ private static void putOperations54(Map m) { List.of("ApiKeyAuth"), true, List.of())); + } + + private static void putOperations63(Map m) { m.put("sportskeeda-transactions", new Operation( "sportskeeda-transactions", "GET", @@ -47889,9 +55850,6 @@ private static void putOperations54(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations55(Map m) { m.put("standard-sections", new Operation( "standard-sections", "GET", @@ -47975,6 +55933,9 @@ private static void putOperations55(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations64(Map m) { m.put("startpage-suggest", new Operation( "startpage-suggest", "GET", @@ -48751,9 +56712,6 @@ private static void putOperations55(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations56(Map m) { m.put("streeteasy-quick-search", new Operation( "streeteasy-quick-search", "GET", @@ -48891,6 +56849,9 @@ private static void putOperations56(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations65(Map m) { m.put("stubhub-categories", new Operation( "stubhub-categories", "GET", @@ -49658,9 +57619,6 @@ private static void putOperations56(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations57(Map m) { m.put("taco-bell-store", new Operation( "taco-bell-store", "GET", @@ -49748,6 +57706,9 @@ private static void putOperations57(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations66(Map m) { m.put("target-product", new Operation( "target-product", "GET", @@ -50510,9 +58471,6 @@ private static void putOperations57(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations58(Map m) { m.put("theblaze-headlines", new Operation( "theblaze-headlines", "GET", @@ -50592,6 +58550,9 @@ private static void putOperations58(Map m) { List.of("ApiKeyAuth"), true, List.of())); + } + + private static void putOperations67(Map m) { m.put("thebodyshop-page", new Operation( "thebodyshop-page", "GET", @@ -51296,9 +59257,6 @@ private static void putOperations58(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations59(Map m) { m.put("thisismoney-article", new Operation( "thisismoney-article", "GET", @@ -51374,6 +59332,9 @@ private static void putOperations59(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations68(Map m) { m.put("threads-post-replies", new Operation( "threads-post-replies", "GET", @@ -52123,9 +60084,6 @@ private static void putOperations59(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations60(Map m) { m.put("tiktok-mobile-hashtag-posts", new Operation( "tiktok-mobile-hashtag-posts", "GET", @@ -52206,6 +60164,9 @@ private static void putOperations60(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations69(Map m) { m.put("tiktok-mobile-live-room-by-user", new Operation( "tiktok-mobile-live-room-by-user", "GET", @@ -52990,9 +60951,6 @@ private static void putOperations60(Map m) { List.of("ApiKeyAuth"), true, List.of("cursor"))); - } - - private static void putOperations61(Map m) { m.put("tiktok-top-ads-analysis", new Operation( "tiktok-top-ads-analysis", "GET", @@ -53083,6 +61041,9 @@ private static void putOperations61(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations70(Map m) { m.put("tiktok-top-ads-recommend", new Operation( "tiktok-top-ads-recommend", "GET", @@ -53811,9 +61772,6 @@ private static void putOperations61(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations62(Map m) { m.put("tomshardware-news", new Operation( "tomshardware-news", "GET", @@ -53890,6 +61848,9 @@ private static void putOperations62(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations71(Map m) { m.put("torontostar-sections", new Operation( "torontostar-sections", "GET", @@ -54665,9 +62626,6 @@ private static void putOperations62(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations63(Map m) { m.put("usage-me-overview", new Operation( "usage-me-overview", "GET", @@ -54754,6 +62712,9 @@ private static void putOperations63(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations72(Map m) { m.put("usatoday-headlines", new Operation( "usatoday-headlines", "GET", @@ -55456,9 +63417,6 @@ private static void putOperations63(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations64(Map m) { m.put("vlr-event-agents", new Operation( "vlr-event-agents", "GET", @@ -55478,7 +63436,9 @@ private static void putOperations64(Map m) { "/vlr/event-matches", List.of(), List.of( - new QueryParam("id", true, "string", List.of())), + new QueryParam("id", true, "string", List.of()), + new QueryParam("series_id", false, "string", List.of()), + new QueryParam("group", false, "string", List.of("completed", "upcoming"))), List.of(), null, false, @@ -55492,7 +63452,14 @@ private static void putOperations64(Map m) { List.of(), List.of( new QueryParam("id", true, "string", List.of()), - new QueryParam("side", false, "string", List.of("all", "t", "ct"))), + new QueryParam("side", false, "string", List.of("all", "t", "ct")), + new QueryParam("role", false, "string", List.of()), + new QueryParam("agent", false, "string", List.of()), + new QueryParam("map", false, "string", List.of()), + new QueryParam("stage", false, "string", List.of()), + new QueryParam("min_rounds", false, "integer", List.of()), + new QueryParam("sort", false, "string", List.of()), + new QueryParam("dir", false, "string", List.of("desc", "asc"))), List.of(), null, false, @@ -55533,13 +63500,17 @@ private static void putOperations64(Map m) { List.of(), List.of( new QueryParam("category", false, "string", List.of("valorant-discussion", "off-topic", "site-feedback")), - new QueryParam("page", false, "integer", List.of())), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("sort", false, "string", List.of("hot", "new", "top"))), List.of(), null, false, List.of("ApiKeyAuth"), true, List.of())); + } + + private static void putOperations73(Map m) { m.put("vlr-match", new Operation( "vlr-match", "GET", @@ -55637,7 +63608,8 @@ private static void putOperations64(Map m) { "/vlr/player", List.of(), List.of( - new QueryParam("id", true, "string", List.of())), + new QueryParam("id", true, "string", List.of()), + new QueryParam("timespan", false, "string", List.of("all", "30d", "60d", "90d"))), List.of(), null, false, @@ -55707,7 +63679,7 @@ private static void putOperations64(Map m) { List.of( new QueryParam("tier", false, "string", List.of()), new QueryParam("region", false, "string", List.of()), - new QueryParam("timespan", false, "string", List.of("all", "30d", "60d", "90d", "2026", "2025", "2024", "2023", "2022", "2021", "2020")), + new QueryParam("timespan", false, "string", List.of()), new QueryParam("side", false, "string", List.of("all", "t", "ct")), new QueryParam("role", false, "string", List.of()), new QueryParam("agent", false, "string", List.of()), @@ -55758,7 +63730,8 @@ private static void putOperations64(Map m) { List.of(), List.of( new QueryParam("id", true, "string", List.of()), - new QueryParam("page", false, "integer", List.of())), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("group", false, "string", List.of("completed", "upcoming"))), List.of(), null, false, @@ -56283,9 +64256,6 @@ private static void putOperations64(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations65(Map m) { m.put("wattpad-story-parts", new Operation( "wattpad-story-parts", "GET", @@ -56370,6 +64340,9 @@ private static void putOperations65(Map m) { List.of("ApiKeyAuth"), true, List.of())); + } + + private static void putOperations74(Map m) { m.put("wayfair-product", new Operation( "wayfair-product", "GET", @@ -56556,6 +64529,88 @@ private static void putOperations65(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("webtoon-genre", new Operation( + "webtoon-genre", + "GET", + "/webtoon/genre", + List.of(), + List.of( + new QueryParam("genre", true, "string", List.of("action", "comedy", "drama", "fantasy", "graphic_novel", "heartwarming", "historical", "horror", "mystery", "romance", "sf", "slice_of_life", "super_hero", "sports", "supernatural", "thriller", "tiptoon")), + new QueryParam("sort", false, "string", List.of("MANA", "LIKEIT", "UPDATE"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("webtoon-genres", new Operation( + "webtoon-genres", + "GET", + "/webtoon/genres", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("webtoon-originals", new Operation( + "webtoon-originals", + "GET", + "/webtoon/originals", + List.of(), + List.of( + new QueryParam("day", true, "string", List.of("monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday", "complete")), + new QueryParam("sort", false, "string", List.of("MANA", "LIKEIT", "UPDATE"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("webtoon-rankings", new Operation( + "webtoon-rankings", + "GET", + "/webtoon/rankings", + List.of(), + List.of( + new QueryParam("tab", false, "string", List.of("trending", "popular", "originals", "canvas"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("webtoon-search", new Operation( + "webtoon-search", + "GET", + "/webtoon/search", + List.of(), + List.of( + new QueryParam("keyword", true, "string", List.of()), + new QueryParam("scope", false, "string", List.of("all", "originals", "canvas")), + new QueryParam("page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("webtoon-series", new Operation( + "webtoon-series", + "GET", + "/webtoon/series", + List.of(), + List.of( + new QueryParam("title_no", true, "integer", List.of()), + new QueryParam("page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); m.put("wendys-categories", new Operation( "wendys-categories", "GET", @@ -57083,7 +65138,7 @@ private static void putOperations65(Map m) { List.of())); } - private static void putOperations66(Map m) { + private static void putOperations75(Map m) { m.put("wolt-search", new Operation( "wolt-search", "GET", @@ -57145,6 +65200,140 @@ private static void putOperations66(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("wta-countries", new Operation( + "wta-countries", + "GET", + "/wta/countries", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("wta-match-states", new Operation( + "wta-match-states", + "GET", + "/wta/match-states", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("wta-rankings", new Operation( + "wta-rankings", + "GET", + "/wta/rankings/{view}", + List.of("view"), + List.of( + new QueryParam("country", false, "string", List.of()), + new QueryParam("at", false, "string", List.of()), + new QueryParam("type", false, "string", List.of("rankSingles", "rankDoubles", "RankChampSingles", "LastName", "BirthDate", "TournCountSingles", "TournCountDoubles", "TournCountChamps", "PointsSingles", "PointsDoubles", "PointsChamps", "rank", "points")), + new QueryParam("sort", false, "string", List.of("asc", "desc")), + new QueryParam("page", false, "integer", List.of()), + new QueryParam("page_size", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("wta-tournament-seasons", new Operation( + "wta-tournament-seasons", + "GET", + "/wta/tournament-seasons", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("wta-tournaments", new Operation( + "wta-tournaments", + "GET", + "/wta/tournaments", + List.of(), + List.of( + new QueryParam("season", false, "integer", List.of()), + new QueryParam("from", false, "string", List.of()), + new QueryParam("to", false, "string", List.of()), + new QueryParam("page_size", false, "integer", List.of()), + new QueryParam("level", false, "array", List.of("WTA 500", "WTA 250", "Grand Slam", "WTA 1000", "Finals", "International", "Premier", "Premier 5", "Premier Mandatory", "ITF", "WTA 125")), + new QueryParam("surface", false, "array", List.of("Hard", "Clay", "Grass", "Carpet")), + new QueryParam("page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("wta-tournament", new Operation( + "wta-tournament", + "GET", + "/wta/tournaments/{group_id}/{year}", + List.of("group_id", "year"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("wta-tournament-draws", new Operation( + "wta-tournament-draws", + "GET", + "/wta/tournaments/{group_id}/{year}/draws", + List.of("group_id", "year"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("wta-tournament-matches", new Operation( + "wta-tournament-matches", + "GET", + "/wta/tournaments/{group_id}/{year}/matches", + List.of("group_id", "year"), + List.of( + new QueryParam("states", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("wta-tournament-order-of-play", new Operation( + "wta-tournament-order-of-play", + "GET", + "/wta/tournaments/{group_id}/{year}/order-of-play", + List.of("group_id", "year"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("wta-tournament-players", new Operation( + "wta-tournament-players", + "GET", + "/wta/tournaments/{group_id}/{year}/players", + List.of("group_id", "year"), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("x-post", new Operation( "x-post", "GET", @@ -57779,6 +65968,9 @@ private static void putOperations66(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations76(Map m) { m.put("yahoo-finance-ticker-history", new Operation( "yahoo-finance-ticker-history", "GET", @@ -57911,9 +66103,6 @@ private static void putOperations66(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations67(Map m) { m.put("yahoo-finance-ticker-shares", new Operation( "yahoo-finance-ticker-shares", "GET", @@ -58247,13 +66436,40 @@ private static void putOperations67(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("yahoo-shopping-author", new Operation( + "yahoo-shopping-author", + "GET", + "/yahoo-shopping/author", + List.of(), + List.of( + new QueryParam("author", true, "string", List.of()), + new QueryParam("page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("yahoo-shopping-categories", new Operation( + "yahoo-shopping-categories", + "GET", + "/yahoo-shopping/categories", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("yahoo-shopping-category", new Operation( "yahoo-shopping-category", "GET", "/yahoo-shopping/category", List.of(), List.of( - new QueryParam("category", true, "string", List.of("beauty", "deals", "general", "gift-ideas", "home-garden", "style")), + new QueryParam("category", true, "string", List.of("style", "beauty", "health", "home-garden", "tech", "gift-ideas", "guides", "code-orange", "deals", "toys-games", "general", "pets")), + new QueryParam("subcategory", false, "string", List.of()), new QueryParam("page", false, "integer", List.of())), List.of(), null, @@ -58261,17 +66477,30 @@ private static void putOperations67(Map m) { List.of("ApiKeyAuth"), true, List.of())); + m.put("yahoo-shopping-experts", new Operation( + "yahoo-shopping-experts", + "GET", + "/yahoo-shopping/experts", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("yahoo-shopping-home", new Operation( "yahoo-shopping-home", "GET", "/yahoo-shopping/home", List.of(), - List.of(), + List.of( + new QueryParam("page", false, "integer", List.of())), List.of(), null, false, List.of("ApiKeyAuth"), - false, + true, List.of())); m.put("yahoo-shopping-shopping-list", new Operation( "yahoo-shopping-shopping-list", @@ -58298,6 +66527,31 @@ private static void putOperations67(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("yahoo-shopping-sitemap", new Operation( + "yahoo-shopping-sitemap", + "GET", + "/yahoo-shopping/sitemap", + List.of(), + List.of( + new QueryParam("url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-shopping-sitemaps", new Operation( + "yahoo-shopping-sitemaps", + "GET", + "/yahoo-shopping/sitemaps", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("yahoo-shopping-store", new Operation( "yahoo-shopping-store", "GET", @@ -58323,14 +66577,71 @@ private static void putOperations67(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("yahoo-shopping-suggest", new Operation( + "yahoo-shopping-suggest", + "GET", + "/yahoo-shopping/suggest", + List.of(), + List.of( + new QueryParam("q", true, "string", List.of()), + new QueryParam("count", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-college-rankings", new Operation( + "yahoo-sports-college-rankings", + "GET", + "/yahoo-sports/college-rankings", + List.of(), + List.of( + new QueryParam("league", true, "string", List.of("college-football", "college-basketball", "college-womens-basketball")), + new QueryParam("poll_type", false, "string", List.of()), + new QueryParam("date", false, "string", List.of()), + new QueryParam("tz", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-draft", new Operation( + "yahoo-sports-draft", + "GET", + "/yahoo-sports/draft", + List.of(), + List.of( + new QueryParam("league", true, "string", List.of("nfl", "nba")), + new QueryParam("view", false, "string", List.of("results", "mock", "big-board", "news"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-dropdown-catalog", new Operation( + "yahoo-sports-dropdown-catalog", + "GET", + "/yahoo-sports/dropdown-catalog", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("yahoo-sports-game", new Operation( "yahoo-sports-game", "GET", "/yahoo-sports/game", List.of(), List.of( - new QueryParam("league", true, "string", List.of("nfl", "nba", "wnba", "mlb", "nhl", "college-football", "college-basketball", "college-womens-basketball", "mls", "premier-league", "la-liga", "serie-a", "bundesliga", "ligue-1", "champions-league", "nwsl", "ligamx-apertura", "ligamx-clausura", "copa-america", "club-world-cup", "world-cup", "concacaf-champions-cup", "concacaf-gold-cup", "concacaf-league")), - new QueryParam("game", true, "string", List.of())), + new QueryParam("league", true, "string", List.of("nfl", "nba", "wnba", "mlb", "nhl", "college-football", "college-basketball", "college-womens-basketball", "soccer", "mls", "premier-league", "la-liga", "serie-a", "bundesliga", "ligue-1", "champions-league", "nwsl", "ligamx-apertura", "ligamx-clausura", "copa-america", "club-world-cup", "world-cup", "concacaf-champions-cup", "concacaf-gold-cup", "concacaf-league", "womens-world-cup", "europa-league", "euro-championship")), + new QueryParam("game", false, "string", List.of()), + new QueryParam("game_url", false, "string", List.of())), List.of(), null, false, @@ -58351,13 +66662,53 @@ private static void putOperations67(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("yahoo-sports-golf-player", new Operation( + "yahoo-sports-golf-player", + "GET", + "/yahoo-sports/golf-player", + List.of(), + List.of( + new QueryParam("player_url", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-golf-player-news", new Operation( + "yahoo-sports-golf-player-news", + "GET", + "/yahoo-sports/golf-player-news", + List.of(), + List.of( + new QueryParam("player_url", true, "string", List.of()), + new QueryParam("mode", false, "string", List.of("top", "latest")), + new QueryParam("cursor", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of("cursor"))); + m.put("yahoo-sports-golf-players", new Operation( + "yahoo-sports-golf-players", + "GET", + "/yahoo-sports/golf-players", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("yahoo-sports-golf-schedule", new Operation( "yahoo-sports-golf-schedule", "GET", "/yahoo-sports/golf-schedule", List.of(), List.of( - new QueryParam("tour", true, "string", List.of("pga-tour", "pga-european-tours", "lpga-tour", "champions-tour", "european-tour")), + new QueryParam("tour", true, "string", List.of("pga-tour", "pga-european-tours", "lpga-tour", "champions-tour", "european-tour", "korn-ferry-tour")), new QueryParam("season", false, "integer", List.of())), List.of(), null, @@ -58365,6 +66716,65 @@ private static void putOperations67(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("yahoo-sports-home", new Operation( + "yahoo-sports-home", + "GET", + "/yahoo-sports/home", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-injury-report", new Operation( + "yahoo-sports-injury-report", + "GET", + "/yahoo-sports/injury-report", + List.of(), + List.of( + new QueryParam("league", true, "string", List.of("nfl", "nba", "mlb", "nhl")), + new QueryParam("team_id", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-league-schedule", new Operation( + "yahoo-sports-league-schedule", + "GET", + "/yahoo-sports/league-schedule", + List.of(), + List.of( + new QueryParam("league", true, "string", List.of("nfl", "nba", "mlb", "nhl", "wnba", "college-football", "college-basketball", "college-womens-basketball")), + new QueryParam("season", false, "integer", List.of()), + new QueryParam("date", false, "string", List.of()), + new QueryParam("week", false, "integer", List.of()), + new QueryParam("seasonPhase", false, "string", List.of("PRESEASON", "REGULAR_SEASON", "POSTSEASON")), + new QueryParam("leagueFilter", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-leagues", new Operation( + "yahoo-sports-leagues", + "GET", + "/yahoo-sports/leagues", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + } + + private static void putOperations77(Map m) { m.put("yahoo-sports-mma-fight-card", new Operation( "yahoo-sports-mma-fight-card", "GET", @@ -58389,6 +66799,19 @@ private static void putOperations67(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("yahoo-sports-more-news", new Operation( + "yahoo-sports-more-news", + "GET", + "/yahoo-sports/more-news", + List.of(), + List.of( + new QueryParam("page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); m.put("yahoo-sports-motorsports-race", new Operation( "yahoo-sports-motorsports-race", "GET", @@ -58417,13 +66840,115 @@ private static void putOperations67(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("yahoo-sports-navigation", new Operation( + "yahoo-sports-navigation", + "GET", + "/yahoo-sports/navigation", + List.of(), + List.of( + new QueryParam("section_url", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-network-catalog", new Operation( + "yahoo-sports-network-catalog", + "GET", + "/yahoo-sports/network-catalog", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("yahoo-sports-news", new Operation( "yahoo-sports-news", "GET", "/yahoo-sports/news", List.of(), List.of( - new QueryParam("league", true, "string", List.of("nfl", "nba", "wnba", "mlb", "nhl", "college-football", "college-basketball", "college-womens-basketball", "mls", "premier-league", "la-liga", "serie-a", "bundesliga", "ligue-1", "champions-league", "nwsl", "ligamx-apertura", "ligamx-clausura", "copa-america", "club-world-cup", "world-cup", "concacaf-champions-cup", "concacaf-gold-cup", "concacaf-league"))), + new QueryParam("league", true, "string", List.of("nfl", "nba", "wnba", "mlb", "nhl", "college-football", "college-basketball", "college-womens-basketball", "soccer", "mls", "premier-league", "la-liga", "serie-a", "bundesliga", "ligue-1", "champions-league", "nwsl", "ligamx-apertura", "ligamx-clausura", "copa-america", "club-world-cup", "world-cup", "concacaf-champions-cup", "concacaf-gold-cup", "concacaf-league", "womens-world-cup", "europa-league", "euro-championship"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-newsletter-archive", new Operation( + "yahoo-sports-newsletter-archive", + "GET", + "/yahoo-sports/newsletter-archive", + List.of(), + List.of( + new QueryParam("newsletter", true, "string", List.of()), + new QueryParam("page", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + true, + List.of())); + m.put("yahoo-sports-newsletters", new Operation( + "yahoo-sports-newsletters", + "GET", + "/yahoo-sports/newsletters", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-odds-featured", new Operation( + "yahoo-sports-odds-featured", + "GET", + "/yahoo-sports/odds-featured", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-odds-game", new Operation( + "yahoo-sports-odds-game", + "GET", + "/yahoo-sports/odds-game", + List.of(), + List.of( + new QueryParam("game_id", true, "string", List.of()), + new QueryParam("tz", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-odds-games", new Operation( + "yahoo-sports-odds-games", + "GET", + "/yahoo-sports/odds-games", + List.of(), + List.of( + new QueryParam("league", true, "string", List.of("nfl", "ncaaf", "nba", "mlb", "nhl", "ncaab", "ncaaw", "wnba", "soccer.l.fbgb", "soccer.l.fbchampions", "soccer.l.mls", "soccer.l.fbes", "soccer.l.fbwcup", "golf", "ten"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-odds-trending", new Operation( + "yahoo-sports-odds-trending", + "GET", + "/yahoo-sports/odds-trending", + List.of(), + List.of(), List.of(), null, false, @@ -58448,7 +66973,7 @@ private static void putOperations67(Map m) { "/yahoo-sports/player", List.of(), List.of( - new QueryParam("league", true, "string", List.of("nfl", "nba", "wnba", "mlb", "nhl", "college-football", "college-basketball", "college-womens-basketball", "mls", "premier-league", "la-liga", "serie-a", "bundesliga", "ligue-1", "champions-league", "nwsl", "ligamx-apertura", "ligamx-clausura", "copa-america", "club-world-cup", "world-cup", "concacaf-champions-cup", "concacaf-gold-cup", "concacaf-league")), + new QueryParam("league", true, "string", List.of("nfl", "nba", "wnba", "mlb", "nhl", "college-football", "college-basketball", "college-womens-basketball", "soccer", "mls", "premier-league", "la-liga", "serie-a", "bundesliga", "ligue-1", "champions-league", "nwsl", "ligamx-apertura", "ligamx-clausura", "copa-america", "club-world-cup", "world-cup", "concacaf-champions-cup", "concacaf-gold-cup", "concacaf-league", "womens-world-cup", "europa-league", "euro-championship")), new QueryParam("player", true, "string", List.of())), List.of(), null, @@ -58456,14 +66981,137 @@ private static void putOperations67(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("yahoo-sports-player-search", new Operation( + "yahoo-sports-player-search", + "GET", + "/yahoo-sports/player-search", + List.of(), + List.of( + new QueryParam("league", true, "string", List.of("nfl", "nba", "mlb", "golf")), + new QueryParam("name", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-playoff-bracket", new Operation( + "yahoo-sports-playoff-bracket", + "GET", + "/yahoo-sports/playoff-bracket", + List.of(), + List.of( + new QueryParam("league", true, "string", List.of("nfl", "nba", "mlb", "wnba", "college-football", "college-basketball", "college-womens-basketball")), + new QueryParam("season", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-playoff-bracket-catalog", new Operation( + "yahoo-sports-playoff-bracket-catalog", + "GET", + "/yahoo-sports/playoff-bracket-catalog", + List.of(), + List.of( + new QueryParam("league", true, "string", List.of("nfl", "nba", "mlb", "wnba", "college-football", "college-basketball", "college-womens-basketball"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-rss-catalog", new Operation( + "yahoo-sports-rss-catalog", + "GET", + "/yahoo-sports/rss-catalog", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-rss-feed", new Operation( + "yahoo-sports-rss-feed", + "GET", + "/yahoo-sports/rss-feed", + List.of(), + List.of( + new QueryParam("feed", true, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-schedule-catalog", new Operation( + "yahoo-sports-schedule-catalog", + "GET", + "/yahoo-sports/schedule-catalog", + List.of(), + List.of( + new QueryParam("league", true, "string", List.of("nfl", "nba", "mlb", "nhl", "wnba", "college-football", "college-basketball", "college-womens-basketball"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("yahoo-sports-scoreboard", new Operation( "yahoo-sports-scoreboard", "GET", "/yahoo-sports/scoreboard", List.of(), List.of( - new QueryParam("league", true, "string", List.of("nfl", "nba", "wnba", "mlb", "nhl", "college-football", "college-basketball", "college-womens-basketball", "mls", "premier-league", "la-liga", "serie-a", "bundesliga", "ligue-1", "champions-league", "nwsl", "ligamx-apertura", "ligamx-clausura", "copa-america", "club-world-cup", "world-cup", "concacaf-champions-cup", "concacaf-gold-cup", "concacaf-league")), - new QueryParam("date", false, "string", List.of())), + new QueryParam("league", true, "string", List.of("nfl", "nba", "wnba", "mlb", "nhl", "college-football", "college-basketball", "college-womens-basketball", "soccer", "mls", "premier-league", "la-liga", "serie-a", "bundesliga", "ligue-1", "champions-league", "nwsl", "ligamx-apertura", "ligamx-clausura", "copa-america", "club-world-cup", "world-cup", "concacaf-champions-cup", "concacaf-gold-cup", "concacaf-league", "womens-world-cup", "europa-league", "euro-championship")), + new QueryParam("date", false, "string", List.of()), + new QueryParam("month", false, "integer", List.of()), + new QueryParam("competition_id", false, "string", List.of()), + new QueryParam("season", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-section-stream", new Operation( + "yahoo-sports-section-stream", + "GET", + "/yahoo-sports/section-stream", + List.of(), + List.of( + new QueryParam("section_url", true, "string", List.of()), + new QueryParam("page_offset", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-soccer-scoreboard", new Operation( + "yahoo-sports-soccer-scoreboard", + "GET", + "/yahoo-sports/soccer-scoreboard", + List.of(), + List.of( + new QueryParam("date", false, "string", List.of()), + new QueryParam("month", false, "integer", List.of()), + new QueryParam("competition_id", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-sportsbook-catalog", new Operation( + "yahoo-sports-sportsbook-catalog", + "GET", + "/yahoo-sports/sportsbook-catalog", + List.of(), + List.of(), List.of(), null, false, @@ -58476,7 +67124,56 @@ private static void putOperations67(Map m) { "/yahoo-sports/standings", List.of(), List.of( - new QueryParam("league", true, "string", List.of("nfl", "nba", "wnba", "mlb", "nhl", "college-football", "college-basketball", "mls", "premier-league", "la-liga", "serie-a", "bundesliga", "ligue-1", "champions-league", "nwsl", "ligamx-apertura", "ligamx-clausura", "world-cup"))), + new QueryParam("league", true, "string", List.of("nfl", "nba", "wnba", "mlb", "nhl", "college-football", "college-basketball", "mls", "premier-league", "la-liga", "serie-a", "bundesliga", "ligue-1", "champions-league", "nwsl", "ligamx-apertura", "ligamx-clausura", "world-cup", "europa-league")), + new QueryParam("season", false, "integer", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-stats", new Operation( + "yahoo-sports-stats", + "GET", + "/yahoo-sports/stats", + List.of(), + List.of( + new QueryParam("league", true, "string", List.of("nfl", "nba", "mlb", "nhl", "wnba", "college-football", "college-basketball", "mls", "premier-league", "la-liga", "serie-a", "bundesliga", "ligue-1", "ligamx-clausura", "world-cup", "concacaf-gold-cup", "golf")), + new QueryParam("pageType", false, "string", List.of("individual", "weekly", "team")), + new QueryParam("selectedTable", false, "integer", List.of()), + new QueryParam("qualified", false, "boolean", List.of()), + new QueryParam("leagueStructure", false, "string", List.of()), + new QueryParam("positionIds", false, "string", List.of()), + new QueryParam("cutTypeIds", false, "string", List.of()), + new QueryParam("sortStatId", false, "string", List.of()), + new QueryParam("week", false, "integer", List.of()), + new QueryParam("weekSeasonPhase", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-stats-catalog", new Operation( + "yahoo-sports-stats-catalog", + "GET", + "/yahoo-sports/stats-catalog", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-stats-discovery", new Operation( + "yahoo-sports-stats-discovery", + "GET", + "/yahoo-sports/stats-discovery", + List.of(), + List.of( + new QueryParam("league", true, "string", List.of("nfl", "nba", "mlb", "nhl", "wnba", "college-football", "college-basketball", "mls", "premier-league", "la-liga", "serie-a", "bundesliga", "ligue-1", "ligamx-clausura", "world-cup", "concacaf-gold-cup", "golf")), + new QueryParam("pageType", false, "string", List.of("individual", "weekly", "team"))), List.of(), null, false, @@ -58489,7 +67186,7 @@ private static void putOperations67(Map m) { "/yahoo-sports/team", List.of(), List.of( - new QueryParam("league", true, "string", List.of("nfl", "nba", "wnba", "mlb", "nhl", "college-football", "college-basketball", "college-womens-basketball", "mls", "premier-league", "la-liga", "serie-a", "bundesliga", "ligue-1", "champions-league", "nwsl", "ligamx-apertura", "ligamx-clausura", "copa-america", "club-world-cup", "world-cup", "concacaf-champions-cup", "concacaf-gold-cup", "concacaf-league")), + new QueryParam("league", true, "string", List.of("nfl", "nba", "wnba", "mlb", "nhl", "college-football", "college-basketball", "college-womens-basketball", "soccer", "mls", "premier-league", "la-liga", "serie-a", "bundesliga", "ligue-1", "champions-league", "nwsl", "ligamx-apertura", "ligamx-clausura", "copa-america", "club-world-cup", "world-cup", "concacaf-champions-cup", "concacaf-gold-cup", "concacaf-league", "womens-world-cup", "europa-league", "euro-championship")), new QueryParam("team", true, "string", List.of())), List.of(), null, @@ -58503,7 +67200,7 @@ private static void putOperations67(Map m) { "/yahoo-sports/team-roster", List.of(), List.of( - new QueryParam("league", true, "string", List.of("nfl", "nba", "wnba", "mlb", "nhl", "college-football", "college-basketball", "college-womens-basketball", "mls", "premier-league", "la-liga", "serie-a", "bundesliga", "ligue-1", "champions-league", "nwsl", "ligamx-apertura", "ligamx-clausura", "copa-america", "club-world-cup", "world-cup", "concacaf-champions-cup", "concacaf-gold-cup", "concacaf-league")), + new QueryParam("league", true, "string", List.of("nfl", "nba", "wnba", "mlb", "nhl", "college-football", "college-basketball", "college-womens-basketball", "soccer", "mls", "premier-league", "la-liga", "serie-a", "bundesliga", "ligue-1", "champions-league", "nwsl", "ligamx-apertura", "ligamx-clausura", "copa-america", "club-world-cup", "world-cup", "concacaf-champions-cup", "concacaf-gold-cup", "concacaf-league", "womens-world-cup", "europa-league", "euro-championship")), new QueryParam("team", true, "string", List.of())), List.of(), null, @@ -58517,7 +67214,7 @@ private static void putOperations67(Map m) { "/yahoo-sports/team-schedule", List.of(), List.of( - new QueryParam("league", true, "string", List.of("nfl", "nba", "wnba", "mlb", "nhl", "college-football", "college-basketball", "college-womens-basketball", "mls", "premier-league", "la-liga", "serie-a", "bundesliga", "ligue-1", "champions-league", "nwsl", "ligamx-apertura", "ligamx-clausura", "copa-america", "club-world-cup", "world-cup", "concacaf-champions-cup", "concacaf-gold-cup", "concacaf-league")), + new QueryParam("league", true, "string", List.of("nfl", "nba", "wnba", "mlb", "nhl", "college-football", "college-basketball", "college-womens-basketball", "soccer", "mls", "premier-league", "la-liga", "serie-a", "bundesliga", "ligue-1", "champions-league", "nwsl", "ligamx-apertura", "ligamx-clausura", "copa-america", "club-world-cup", "world-cup", "concacaf-champions-cup", "concacaf-gold-cup", "concacaf-league", "womens-world-cup", "europa-league", "euro-championship")), new QueryParam("team", true, "string", List.of())), List.of(), null, @@ -58562,6 +67259,58 @@ private static void putOperations67(Map m) { List.of("ApiKeyAuth"), false, List.of())); + m.put("yahoo-sports-topic-news", new Operation( + "yahoo-sports-topic-news", + "GET", + "/yahoo-sports/topic-news", + List.of(), + List.of( + new QueryParam("topic", false, "string", List.of()), + new QueryParam("topic_url", false, "string", List.of())), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-video-headlines", new Operation( + "yahoo-sports-video-headlines", + "GET", + "/yahoo-sports/video-headlines", + List.of(), + List.of( + new QueryParam("list_id", true, "string", List.of()), + new QueryParam("count", false, "integer", List.of("1", "6"))), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-video-list-catalog", new Operation( + "yahoo-sports-video-list-catalog", + "GET", + "/yahoo-sports/video-list-catalog", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); + m.put("yahoo-sports-watch-schedule", new Operation( + "yahoo-sports-watch-schedule", + "GET", + "/yahoo-sports/watch-schedule", + List.of(), + List.of(), + List.of(), + null, + false, + List.of("ApiKeyAuth"), + false, + List.of())); m.put("yahoo-tech-article", new Operation( "yahoo-tech-article", "GET", @@ -58705,9 +67454,6 @@ private static void putOperations67(Map m) { List.of("ApiKeyAuth"), false, List.of())); - } - - private static void putOperations68(Map m) { m.put("yelp-business-menu", new Operation( "yelp-business-menu", "GET", @@ -58827,6 +67573,9 @@ private static void putOperations68(Map m) { List.of("ApiKeyAuth"), false, List.of())); + } + + private static void putOperations78(Map m) { m.put("yoox-product", new Operation( "yoox-product", "GET", @@ -59549,6 +68298,28 @@ private static void putOperations68(Map m) { private static Map> buildGroups() { Map> g = new LinkedHashMap<>(); + putGroups0(g); + putGroups1(g); + putGroups2(g); + putGroups3(g); + putGroups4(g); + putGroups5(g); + putGroups6(g); + putGroups7(g); + putGroups8(g); + putGroups9(g); + putGroups10(g); + putGroups11(g); + putGroups12(g); + putGroups13(g); + putGroups14(g); + putGroups15(g); + putGroups16(g); + putGroups17(g); + return Map.copyOf(g); + } + + private static void putGroups0(Map> g) { { Map group = new LinkedHashMap<>(); group.put("categories", "firstdibs-categories"); @@ -59763,6 +68534,7 @@ private static Map> buildGroups() { { Map group = new LinkedHashMap<>(); group.put("audiobookSeries", "apple-books-audiobook-series"); + group.put("audiobookCharts", "apple-books-audiobook-charts"); group.put("audiobookSearch", "apple-books-audiobook-search"); group.put("audiobook", "apple-books-audiobook"); group.put("audiobookReviews", "apple-books-audiobook-reviews"); @@ -59772,6 +68544,7 @@ private static Map> buildGroups() { group.put("bookReviews", "apple-books-book-reviews"); group.put("bookSimilar", "apple-books-book-similar"); group.put("charts", "apple-books-charts"); + group.put("genres", "apple-books-genres"); group.put("search", "apple-books-search"); group.put("series", "apple-books-series"); g.put("appleBooks", Map.copyOf(group)); @@ -59884,6 +68657,9 @@ private static Map> buildGroups() { group.put("headlines", "axios-headlines"); g.put("axios", Map.copyOf(group)); } + } + + private static void putGroups1(Map> g) { { Map group = new LinkedHashMap<>(); group.put("search", "baidu-search"); @@ -59901,6 +68677,16 @@ private static Map> buildGroups() { group.put("stores", "balenciaga-stores"); g.put("balenciaga", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("artist", "bandcamp-artist"); + group.put("discover", "bandcamp-discover"); + group.put("filters", "bandcamp-filters"); + group.put("relatedTags", "bandcamp-related-tags"); + group.put("release", "bandcamp-release"); + group.put("search", "bandcamp-search"); + g.put("bandcamp", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("article", "barrons-article"); @@ -60091,6 +68877,24 @@ private static Map> buildGroups() { group.put("valorantLeaderboard", "bo3-valorant-leaderboard"); g.put("bo3", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("boardgamegeekCardsets", "boardgamegeek-cardsets"); + group.put("boardgamegeekEntity", "boardgamegeek-entity"); + group.put("boardgamegeekGame", "boardgamegeek-game"); + group.put("boardgamegeekGeeklist", "boardgamegeek-geeklist"); + group.put("boardgamegeekGeeklistItems", "boardgamegeek-geeklist-items"); + group.put("boardgamegeekGeeklists", "boardgamegeek-geeklists"); + group.put("boardgamegeekHotness", "boardgamegeek-hotness"); + group.put("boardgamegeekLinks", "boardgamegeek-links"); + group.put("boardgamegeekMedia", "boardgamegeek-media"); + group.put("boardgamegeekRecommendations", "boardgamegeek-recommendations"); + group.put("boardgamegeekReviews", "boardgamegeek-reviews"); + group.put("boardgamegeekTaxonomy", "boardgamegeek-taxonomy"); + group.put("boardgamegeekThread", "boardgamegeek-thread"); + group.put("boardgamegeekThreads", "boardgamegeek-threads"); + g.put("boardGameGeek", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("auctionSearch", "bonhams-auction-search"); @@ -60112,6 +68916,14 @@ private static Map> buildGroups() { group.put("search", "booking-search"); g.put("booking", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("business", "booksy-business"); + group.put("businesses", "booksy-businesses"); + group.put("categories", "booksy-categories"); + group.put("treatmentHints", "booksy-treatment-hints"); + g.put("booksy", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("search", "boots-search"); @@ -60171,6 +68983,18 @@ private static Map> buildGroups() { group.put("sections", "breitbart-sections"); g.put("breitbart", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("bringatrailerFilters", "bringatrailer-filters"); + group.put("bringatrailerListing", "bringatrailer-listing"); + group.put("bringatrailerLive", "bringatrailer-live"); + group.put("bringatrailerMakes", "bringatrailer-makes"); + group.put("bringatrailerPriceHistory", "bringatrailer-price-history"); + group.put("bringatrailerResults", "bringatrailer-results"); + group.put("bringatrailerSearch", "bringatrailer-search"); + group.put("bringatrailerSuggest", "bringatrailer-suggest"); + g.put("bringATrailer", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("brisbanetimesArticle", "brisbanetimes-article"); @@ -60180,6 +69004,9 @@ private static Map> buildGroups() { group.put("brisbanetimesSections", "brisbanetimes-sections"); g.put("brisbaneTimes", Map.copyOf(group)); } + } + + private static void putGroups2(Map> g) { { Map group = new LinkedHashMap<>(); group.put("collections", "brooklinen-collections"); @@ -60238,6 +69065,15 @@ private static Map> buildGroups() { group.put("search", "capterra-search"); g.put("capterra", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("catalog", "cardmarket-catalog"); + group.put("catalogCategories", "cardmarket-catalog-categories"); + group.put("games", "cardmarket-games"); + group.put("priceGuide", "cardmarket-price-guide"); + group.put("priceGuideCategories", "cardmarket-price-guide-categories"); + g.put("cardmarket", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("carmaxSearch", "carmax-search"); @@ -60481,6 +69317,9 @@ private static Map> buildGroups() { group.put("techstack", "web-techstack"); g.put("web", Map.copyOf(group)); } + } + + private static void putGroups3(Map> g) { { Map group = new LinkedHashMap<>(); group.put("categories", "costco-categories"); @@ -60498,6 +69337,45 @@ private static Map> buildGroups() { group.put("courtlistenerSearch", "courtlistener-search"); g.put("courtListener", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("archives", "cricbuzz-archives"); + group.put("auctionInfo", "cricbuzz-auction-info"); + group.put("auctionLive", "cricbuzz-auction-live"); + group.put("auctionLiveBlog", "cricbuzz-auction-live-blog"); + group.put("auctionNews", "cricbuzz-auction-news"); + group.put("auctionOptions", "cricbuzz-auction-options"); + group.put("auctionPlayerDetail", "cricbuzz-auction-player-detail"); + group.put("auctionPlayerSearch", "cricbuzz-auction-player-search"); + group.put("auctionResults", "cricbuzz-auction-results"); + group.put("auctionSeasons", "cricbuzz-auction-seasons"); + group.put("auctionTeamDetail", "cricbuzz-auction-team-detail"); + group.put("auctionTeams", "cricbuzz-auction-teams"); + group.put("auctionTeamsOptions", "cricbuzz-auction-teams-options"); + group.put("auctionUpcoming", "cricbuzz-auction-upcoming"); + group.put("auctionUpcomingOptions", "cricbuzz-auction-upcoming-options"); + group.put("auctionVideos", "cricbuzz-auction-videos"); + group.put("matchFacts", "cricbuzz-match-facts"); + group.put("matchGraphs", "cricbuzz-match-graphs"); + group.put("matchOvers", "cricbuzz-match-overs"); + group.put("matches", "cricbuzz-matches"); + group.put("navigation", "cricbuzz-navigation"); + group.put("newsStory", "cricbuzz-news-story"); + group.put("newsTopics", "cricbuzz-news-topics"); + group.put("rankings", "cricbuzz-rankings"); + group.put("records", "cricbuzz-records"); + group.put("schedule", "cricbuzz-schedule"); + group.put("scorecard", "cricbuzz-scorecard"); + group.put("series", "cricbuzz-series"); + group.put("seriesStats", "cricbuzz-series-stats"); + group.put("teamStats", "cricbuzz-team-stats"); + group.put("teamStatsOptions", "cricbuzz-team-stats-options"); + group.put("teams", "cricbuzz-teams"); + group.put("videoCategories", "cricbuzz-video-categories"); + group.put("videoPlaylists", "cricbuzz-video-playlists"); + group.put("wtc", "cricbuzz-wtc"); + g.put("cricbuzz", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("calendar", "cricinfo-calendar"); @@ -60628,10 +69506,16 @@ private static Map> buildGroups() { { Map group = new LinkedHashMap<>(); group.put("list", "datasets-list"); + group.put("airbnbHostsFacets", "datasets-airbnb-hosts-facets"); + group.put("airbnbHostsItem", "datasets-airbnb-hosts-item"); + group.put("airbnbHostsSearch", "datasets-airbnb-hosts-search"); group.put("airbnbMarketsFacets", "datasets-airbnb-markets-facets"); group.put("airbnbMarketsItem", "datasets-airbnb-markets-item"); group.put("airbnbMarketsNearby", "datasets-airbnb-markets-nearby"); group.put("airbnbMarketsSearch", "datasets-airbnb-markets-search"); + group.put("appleBooksFacets", "datasets-apple-books-facets"); + group.put("appleBooksItem", "datasets-apple-books-item"); + group.put("appleBooksSearch", "datasets-apple-books-search"); group.put("appleMapsPlacesFacets", "datasets-apple-maps-places-facets"); group.put("appleMapsPlacesItem", "datasets-apple-maps-places-item"); group.put("appleMapsPlacesNearby", "datasets-apple-maps-places-nearby"); @@ -60639,8 +69523,14 @@ private static Map> buildGroups() { group.put("applePodcastsShowsFacets", "datasets-apple-podcasts-shows-facets"); group.put("applePodcastsShowsItem", "datasets-apple-podcasts-shows-item"); group.put("applePodcastsShowsSearch", "datasets-apple-podcasts-shows-search"); + group.put("appsChartsFacets", "datasets-apps-charts-facets"); + group.put("appsChartsItem", "datasets-apps-charts-item"); group.put("appsChartsSearch", "datasets-apps-charts-search"); + group.put("appsReviewsFacets", "datasets-apps-reviews-facets"); + group.put("appsReviewsItem", "datasets-apps-reviews-item"); group.put("appsReviewsSearch", "datasets-apps-reviews-search"); + group.put("appsFacets", "datasets-apps-facets"); + group.put("appsItem", "datasets-apps-item"); group.put("appsSearch", "datasets-apps-search"); group.put("bbbBusinessesFacets", "datasets-bbb-businesses-facets"); group.put("bbbBusinessesItem", "datasets-bbb-businesses-item"); @@ -60658,6 +69548,8 @@ private static Map> buildGroups() { group.put("chromeExtensionsMetrics", "datasets-chrome-extensions-metrics"); group.put("chromeExtensionsSearch", "datasets-chrome-extensions-search"); group.put("chromeExtensionsTrending", "datasets-chrome-extensions-trending"); + group.put("creatorsFacets", "datasets-creators-facets"); + group.put("creatorsItem", "datasets-creators-item"); group.put("creatorsSearch", "datasets-creators-search"); group.put("doordashStoresFacets", "datasets-doordash-stores-facets"); group.put("doordashStoresItem", "datasets-doordash-stores-item"); @@ -60729,6 +69621,8 @@ private static Map> buildGroups() { group.put("producthuntProductsSearch", "datasets-producthunt-products-search"); group.put("producthuntTrendsFacets", "datasets-producthunt-trends-facets"); group.put("producthuntTrendsSearch", "datasets-producthunt-trends-search"); + group.put("redditTrendingFacets", "datasets-reddit-trending-facets"); + group.put("redditTrendingItem", "datasets-reddit-trending-item"); group.put("redditTrendingSearch", "datasets-reddit-trending-search"); group.put("secCompaniesFacets", "datasets-sec-companies-facets"); group.put("secCompaniesFinancials", "datasets-sec-companies-financials"); @@ -60741,15 +69635,30 @@ private static Map> buildGroups() { group.put("starbucksStoresItem", "datasets-starbucks-stores-item"); group.put("starbucksStoresNearby", "datasets-starbucks-stores-nearby"); group.put("starbucksStoresSearch", "datasets-starbucks-stores-search"); + group.put("steamAchievementsFacets", "datasets-steam-achievements-facets"); + group.put("steamAchievementsItem", "datasets-steam-achievements-item"); group.put("steamAchievementsSearch", "datasets-steam-achievements-search"); + group.put("steamChartsFacets", "datasets-steam-charts-facets"); + group.put("steamChartsItem", "datasets-steam-charts-item"); group.put("steamChartsSearch", "datasets-steam-charts-search"); group.put("steamGamesFacets", "datasets-steam-games-facets"); group.put("steamGamesItem", "datasets-steam-games-item"); group.put("steamGamesSearch", "datasets-steam-games-search"); + group.put("steamNewsFacets", "datasets-steam-news-facets"); + group.put("steamNewsItem", "datasets-steam-news-item"); group.put("steamNewsSearch", "datasets-steam-news-search"); + group.put("steamPlayercountsFacets", "datasets-steam-playercounts-facets"); + group.put("steamPlayercountsItem", "datasets-steam-playercounts-item"); group.put("steamPlayercountsSearch", "datasets-steam-playercounts-search"); + group.put("steamPricesFacets", "datasets-steam-prices-facets"); + group.put("steamPricesItem", "datasets-steam-prices-item"); group.put("steamPricesSearch", "datasets-steam-prices-search"); + group.put("steamReviewsFacets", "datasets-steam-reviews-facets"); + group.put("steamReviewsItem", "datasets-steam-reviews-item"); group.put("steamReviewsSearch", "datasets-steam-reviews-search"); + group.put("substackFacets", "datasets-substack-facets"); + group.put("substackItem", "datasets-substack-item"); + group.put("substackSearch", "datasets-substack-search"); group.put("techstackFacets", "datasets-techstack-facets"); group.put("techstackItem", "datasets-techstack-item"); group.put("techstackSearch", "datasets-techstack-search"); @@ -60843,6 +69752,32 @@ private static Map> buildGroups() { group.put("search", "discogs-search"); g.put("discogs", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("dollartreeBlogArticle", "dollartree-blog-article"); + group.put("dollartreeCategories", "dollartree-categories"); + group.put("dollartreePrice", "dollartree-price"); + group.put("dollartreeProduct", "dollartree-product"); + group.put("dollartreeProducts", "dollartree-products"); + group.put("dollartreeSearch", "dollartree-search"); + group.put("dollartreeStockStatus", "dollartree-stock-status"); + group.put("dollartreeKeywordTypeahead", "dollartree-keyword-typeahead"); + group.put("dollartreeProductTypeahead", "dollartree-product-typeahead"); + g.put("dollarTree", Map.copyOf(group)); + } + { + Map group = new LinkedHashMap<>(); + group.put("dnsRecordTypes", "domain-dns-record-types"); + group.put("dnsResolve", "domain-dns-resolve"); + group.put("rdapDomain", "domain-rdap-domain"); + group.put("rdapIp", "domain-rdap-ip"); + group.put("robots", "domain-robots"); + group.put("site", "domain-site"); + group.put("subdomains", "domain-subdomains"); + group.put("waybackAvailability", "domain-wayback-availability"); + group.put("waybackCdx", "domain-wayback-cdx"); + g.put("domain", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("coupons", "dominos-coupons"); @@ -60894,6 +69829,9 @@ private static Map> buildGroups() { group.put("draftkingsPick6Sports", "draftkings-pick6-sports"); g.put("draftKingsPick6", Map.copyOf(group)); } + } + + private static void putGroups4(Map> g) { { Map group = new LinkedHashMap<>(); group.put("draftkingsPredictionsAvailability", "draftkings-predictions-availability"); @@ -61095,6 +70033,45 @@ private static Map> buildGroups() { group.put("page", "facebook-page"); g.put("facebook", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("banReasons", "faceit-ban-reasons"); + group.put("banlist", "faceit-banlist"); + group.put("banlistStats", "faceit-banlist-stats"); + group.put("bestClips", "faceit-best-clips"); + group.put("championship", "faceit-championship"); + group.put("championshipBracket", "faceit-championship-bracket"); + group.put("championshipParticipants", "faceit-championship-participants"); + group.put("championshipSearch", "faceit-championship-search"); + group.put("clip", "faceit-clip"); + group.put("clips", "faceit-clips"); + group.put("competitionMatches", "faceit-competition-matches"); + group.put("fpl", "faceit-fpl"); + group.put("gameModes", "faceit-game-modes"); + group.put("games", "faceit-games"); + group.put("hub", "faceit-hub"); + group.put("hubCategories", "faceit-hub-categories"); + group.put("hubMemberships", "faceit-hub-memberships"); + group.put("hubs", "faceit-hubs"); + group.put("hubsDetailed", "faceit-hubs-detailed"); + group.put("leaderboard", "faceit-leaderboard"); + group.put("leaderboardDetail", "faceit-leaderboard-detail"); + group.put("leaderboardStatuses", "faceit-leaderboard-statuses"); + group.put("maps", "faceit-maps"); + group.put("matchClips", "faceit-match-clips"); + group.put("organizer", "faceit-organizer"); + group.put("player", "faceit-player"); + group.put("playerRank", "faceit-player-rank"); + group.put("regions", "faceit-regions"); + group.put("rule", "faceit-rule"); + group.put("rules", "faceit-rules"); + group.put("skillLevels", "faceit-skill-levels"); + group.put("standings", "faceit-standings"); + group.put("team", "faceit-team"); + group.put("tournamentsPast", "faceit-tournaments-past"); + group.put("userSkills", "faceit-user-skills"); + g.put("faceit", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("categories", "fanatics-categories"); @@ -61107,8 +70084,16 @@ private static Map> buildGroups() { Map group = new LinkedHashMap<>(); group.put("fanaticscollectAuctions", "fanaticscollect-auctions"); group.put("fanaticscollectCategories", "fanaticscollect-categories"); + group.put("fanaticscollectInstantPackRelease", "fanaticscollect-instant-pack-release"); + group.put("fanaticscollectInstantPackReleases", "fanaticscollect-instant-pack-releases"); group.put("fanaticscollectInstantRipsCategories", "fanaticscollect-instant-rips-categories"); + group.put("fanaticscollectInstantRipsPackCategories", "fanaticscollect-instant-rips-pack-categories"); + group.put("fanaticscollectInstantRipsPackChecklist", "fanaticscollect-instant-rips-pack-checklist"); + group.put("fanaticscollectInstantRipsPacks", "fanaticscollect-instant-rips-packs"); + group.put("fanaticscollectRecentlyRipped", "fanaticscollect-recently-ripped"); group.put("fanaticscollectListing", "fanaticscollect-listing"); + group.put("fanaticscollectNewsroom", "fanaticscollect-newsroom"); + group.put("fanaticscollectNewsroomFilters", "fanaticscollect-newsroom-filters"); group.put("fanaticscollectSearch", "fanaticscollect-search"); group.put("fanaticscollectSoldItems", "fanaticscollect-sold-items"); group.put("fanaticscollectTrendingSearches", "fanaticscollect-trending-searches"); @@ -61250,6 +70235,16 @@ private static Map> buildGroups() { group.put("fastcompanySections", "fastcompany-sections"); g.put("fastCompany", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("cities", "fever-cities"); + group.put("feed", "fever-feed"); + group.put("filters", "fever-filters"); + group.put("plan", "fever-plan"); + group.put("plans", "fever-plans"); + group.put("topCities", "fever-top-cities"); + g.put("fever", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("fiveguysDirectory", "fiveguys-directory"); @@ -61264,6 +70259,9 @@ private static Map> buildGroups() { group.put("fiveguysStore", "fiveguys-store"); g.put("fiveGuys", Map.copyOf(group)); } + } + + private static void putGroups5(Map> g) { { Map group = new LinkedHashMap<>(); group.put("gig", "fiverr-gig"); @@ -61278,9 +70276,11 @@ private static Map> buildGroups() { group.put("competitions", "flashscore-competitions"); group.put("entityNews", "flashscore-entity-news"); group.put("matchBoxScore", "flashscore-match-box-score"); + group.put("matchCommentary", "flashscore-match-commentary"); group.put("matchDarts", "flashscore-match-darts"); group.put("matchH2h", "flashscore-match-h2h"); group.put("matchHighlights", "flashscore-match-highlights"); + group.put("matchIncidents", "flashscore-match-incidents"); group.put("matchInfo", "flashscore-match-info"); group.put("matchLineups", "flashscore-match-lineups"); group.put("matchMissingPlayers", "flashscore-match-missing-players"); @@ -61290,6 +70290,7 @@ private static Map> buildGroups() { group.put("matchPlayerStats", "flashscore-match-player-stats"); group.put("matchPointByPoint", "flashscore-match-point-by-point"); group.put("matchPredictedLineups", "flashscore-match-predicted-lineups"); + group.put("matchPrematchScorers", "flashscore-match-prematch-scorers"); group.put("matchReport", "flashscore-match-report"); group.put("matchStandings", "flashscore-match-standings"); group.put("matchStats", "flashscore-match-stats"); @@ -61322,6 +70323,7 @@ private static Map> buildGroups() { group.put("teamTransfers", "flashscore-team-transfers"); group.put("topSearch", "flashscore-top-search"); group.put("tournamentArchiveSeasons", "flashscore-tournament-archive-seasons"); + group.put("tournamentDraw", "flashscore-tournament-draw"); group.put("tournamentEvents", "flashscore-tournament-events"); group.put("tournamentOutrightOdds", "flashscore-tournament-outright-odds"); group.put("tournamentSeasons", "flashscore-tournament-seasons"); @@ -61329,6 +70331,15 @@ private static Map> buildGroups() { group.put("tournamentStandingsViews", "flashscore-tournament-standings-views"); g.put("flashscore", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("flickreelsClassify", "flickreels-classify"); + group.put("flickreelsGenres", "flickreels-genres"); + group.put("flickreelsHome", "flickreels-home"); + group.put("flickreelsMovie", "flickreels-movie"); + group.put("flickreelsShelf", "flickreels-shelf"); + g.put("flickReels", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("restaurant", "foodpanda-restaurant"); @@ -61369,6 +70380,38 @@ private static Map> buildGroups() { group.put("foreignpolicyTopic", "foreignpolicy-topic"); g.put("foreignPolicy", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("driver", "formula1-driver"); + group.put("driverGrid", "formula1-driver-grid"); + group.put("driverSeasonResults", "formula1-driver-season-results"); + group.put("driverStandings", "formula1-driver-standings"); + group.put("filters", "formula1-filters"); + group.put("jsonAwards", "formula1-json-awards"); + group.put("jsonConstructors", "formula1-json-constructors"); + group.put("jsonDriverAssembly", "formula1-json-driver-assembly"); + group.put("jsonDrivers", "formula1-json-drivers"); + group.put("jsonEditorial", "formula1-json-editorial"); + group.put("jsonEventTracker", "formula1-json-event-tracker"); + group.put("jsonMeetingDatasets", "formula1-json-meeting-datasets"); + group.put("jsonMeetings", "formula1-json-meetings"); + group.put("jsonRaceAssembly", "formula1-json-race-assembly"); + group.put("jsonResults", "formula1-json-results"); + group.put("jsonSeasonAward", "formula1-json-season-award"); + group.put("jsonTeamAssembly", "formula1-json-team-assembly"); + group.put("meetings", "formula1-meetings"); + group.put("raceCalendar", "formula1-race-calendar"); + group.put("raceHub", "formula1-race-hub"); + group.put("seasonAwards", "formula1-season-awards"); + group.put("seasonResults", "formula1-season-results"); + group.put("seasons", "formula1-seasons"); + group.put("sessionResults", "formula1-session-results"); + group.put("team", "formula1-team"); + group.put("teamGrid", "formula1-team-grid"); + group.put("teamSeasonResults", "formula1-team-season-results"); + group.put("teamStandings", "formula1-team-standings"); + g.put("formula1", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("article", "fortune-article"); @@ -61453,6 +70496,14 @@ private static Map> buildGroups() { group.put("freemalaysiatodaySections", "freemalaysiatoday-sections"); g.put("freeMalaysiaToday", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("landingVenues", "fresha-landing-venues"); + group.put("searchVenues", "fresha-search-venues"); + group.put("taxonomy", "fresha-taxonomy"); + group.put("venue", "fresha-venue"); + g.put("fresha", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("article", "ft-article"); @@ -61494,6 +70545,31 @@ private static Map> buildGroups() { group.put("fussballdeTopScorers", "fussballde-top-scorers"); g.put("fussballDe", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("futggFc27Catalog", "futgg-fc27-catalog"); + group.put("futggFc27Definitions", "futgg-fc27-definitions"); + group.put("futggFc27Evolutions", "futgg-fc27-evolutions"); + group.put("futggFc27Evolution", "futgg-fc27-evolution"); + group.put("futggFc27GgRatingRanks", "futgg-fc27-gg-rating-ranks"); + group.put("futggFc27GgRatings", "futgg-fc27-gg-ratings"); + group.put("futggFc27ObjectiveCategories", "futgg-fc27-objective-categories"); + group.put("futggFc27ObjectiveGroups", "futgg-fc27-objective-groups"); + group.put("futggFc27ObjectiveGroupByEa", "futgg-fc27-objective-group-by-ea"); + group.put("futggFc27ObjectiveGroupByObjective", "futgg-fc27-objective-group-by-objective"); + group.put("futggFc27ObjectiveGroup", "futgg-fc27-objective-group"); + group.put("futggFc27PlayerSorts", "futgg-fc27-player-sorts"); + group.put("futggFc27Players", "futgg-fc27-players"); + group.put("futggFc27PriceIndex", "futgg-fc27-price-index"); + group.put("futggFc27Prices", "futgg-fc27-prices"); + group.put("futggFc27SbcCategories", "futgg-fc27-sbc-categories"); + group.put("futggFc27SbcSets", "futgg-fc27-sbc-sets"); + group.put("futggFc27SbcSetByChallenge", "futgg-fc27-sbc-set-by-challenge"); + group.put("futggFc27SbcSetByEa", "futgg-fc27-sbc-set-by-ea"); + group.put("futggFc27SbcSet", "futgg-fc27-sbc-set"); + group.put("futggFc27SeasonPass", "futgg-fc27-season-pass"); + g.put("futGg", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("gamerantArticle", "gamerant-article"); @@ -61605,6 +70681,20 @@ private static Map> buildGroups() { group.put("globeandmailSections", "globeandmail-sections"); g.put("globeAndMail", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("categories", "glovo-categories"); + group.put("cities", "glovo-cities"); + group.put("city", "glovo-city"); + group.put("store", "glovo-store"); + group.put("storeFees", "glovo-store-fees"); + group.put("storeMenu", "glovo-store-menu"); + group.put("storeProducts", "glovo-store-products"); + group.put("storeSearch", "glovo-store-search"); + group.put("stores", "glovo-stores"); + group.put("storesFilters", "glovo-stores-filters"); + g.put("glovo", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("gmanewsArticle", "gmanews-article"); @@ -61613,6 +70703,9 @@ private static Map> buildGroups() { group.put("gmanewsSections", "gmanews-sections"); g.put("gmaNews", Map.copyOf(group)); } + } + + private static void putGroups6(Map> g) { { Map group = new LinkedHashMap<>(); group.put("collection", "goat-collection"); @@ -61751,6 +70844,8 @@ private static Map> buildGroups() { } { Map group = new LinkedHashMap<>(); + group.put("gosugamersArticle", "gosugamers-article"); + group.put("gosugamersArticles", "gosugamers-articles"); group.put("gosugamersEncounters", "gosugamers-encounters"); group.put("gosugamersGames", "gosugamers-games"); group.put("gosugamersMatch", "gosugamers-match"); @@ -61913,6 +71008,19 @@ private static Map> buildGroups() { group.put("hindustantimesSections", "hindustantimes-sections"); g.put("hindustanTimes", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("event", "hltv-event"); + group.put("events", "hltv-events"); + group.put("match", "hltv-match"); + group.put("matches", "hltv-matches"); + group.put("player", "hltv-player"); + group.put("rankings", "hltv-rankings"); + group.put("results", "hltv-results"); + group.put("search", "hltv-search"); + group.put("team", "hltv-team"); + g.put("hltv", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("hmCategories", "hm-categories"); @@ -61986,6 +71094,9 @@ private static Map> buildGroups() { group.put("sections", "ign-sections"); g.put("ign", Map.copyOf(group)); } + } + + private static void putGroups7(Map> g) { { Map group = new LinkedHashMap<>(); group.put("availability", "ikea-availability"); @@ -62155,6 +71266,24 @@ private static Map> buildGroups() { group.put("irishtimesSections", "irishtimes-sections"); g.put("irishTimes", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("itchioBrowse", "itchio-browse"); + group.put("itchioBrowseOptions", "itchio-browse-options"); + group.put("itchioCatalog", "itchio-catalog"); + group.put("itchioTopRated", "itchio-top-rated"); + group.put("itchioJamsBrowse", "itchio-jams-browse"); + group.put("itchioJamCalendar", "itchio-jam-calendar"); + group.put("itchioJamsEntries", "itchio-jams-entries"); + group.put("itchioJamsOptions", "itchio-jams-options"); + group.put("itchioJamsOverview", "itchio-jams-overview"); + group.put("itchioJamsResults", "itchio-jams-results"); + group.put("itchioJamsResultsOptions", "itchio-jams-results-options"); + group.put("itchioJamsSubmission", "itchio-jams-submission"); + group.put("itchioProject", "itchio-project"); + group.put("itchioTags", "itchio-tags"); + g.put("itchIo", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("japantimesArticle", "japantimes-article"); @@ -62352,6 +71481,31 @@ private static Map> buildGroups() { group.put("updates", "kickstarter-updates"); g.put("kickstarter", Map.copyOf(group)); } + } + + private static void putGroups8(Map> g) { + { + Map group = new LinkedHashMap<>(); + group.put("activity", "klook-activity"); + group.put("attractionsCategories", "klook-attractions-categories"); + group.put("attractionsDestinations", "klook-attractions-destinations"); + group.put("attractionsHighlights", "klook-attractions-highlights"); + group.put("attractionsSearch", "klook-attractions-search"); + group.put("attractionsSuggest", "klook-attractions-suggest"); + group.put("categories", "klook-categories"); + group.put("destinations", "klook-destinations"); + group.put("hot", "klook-hot"); + group.put("interests", "klook-interests"); + group.put("recommendations", "klook-recommendations"); + group.put("reviews", "klook-reviews"); + group.put("search", "klook-search"); + group.put("searchFilters", "klook-search-filters"); + group.put("searchHotKeywords", "klook-search-hot-keywords"); + group.put("searchUnified", "klook-search-unified"); + group.put("suggest", "klook-suggest"); + group.put("verticals", "klook-verticals"); + g.put("klook", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("kohlsCategory", "kohls-category"); @@ -62515,6 +71669,19 @@ private static Map> buildGroups() { group.put("stores", "lululemon-stores"); g.put("lululemon", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("calendar", "luma-calendar"); + group.put("calendarEvents", "luma-calendar-events"); + group.put("categories", "luma-categories"); + group.put("category", "luma-category"); + group.put("categoryEvents", "luma-category-events"); + group.put("event", "luma-event"); + group.put("place", "luma-place"); + group.put("placeCalendars", "luma-place-calendars"); + group.put("placeEvents", "luma-place-events"); + g.put("luma", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("macrumorsArticle", "macrumors-article"); @@ -62576,6 +71743,30 @@ private static Map> buildGroups() { group.put("sections", "mashable-sections"); g.put("mashable", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("maxprepsRankingsGroupings", "maxpreps-rankings-groupings"); + group.put("maxprepsRequestEnums", "maxpreps-request-enums"); + group.put("maxprepsSchool", "maxpreps-school"); + group.put("maxprepsSchoolContests", "maxpreps-school-contests"); + group.put("maxprepsSchoolProximal", "maxpreps-school-proximal"); + group.put("maxprepsSchoolSearch", "maxpreps-school-search"); + group.put("maxprepsSchoolSeasons", "maxpreps-school-seasons"); + group.put("maxprepsSchoolZipSearch", "maxpreps-school-zip-search"); + group.put("maxprepsScoreboard", "maxpreps-scoreboard"); + group.put("maxprepsSeasonNavigation", "maxpreps-season-navigation"); + group.put("maxprepsSports", "maxpreps-sports"); + group.put("maxprepsStates", "maxpreps-states"); + group.put("maxprepsTeam", "maxpreps-team"); + group.put("maxprepsTeamContext", "maxpreps-team-context"); + group.put("maxprepsTeamNextContest", "maxpreps-team-next-contest"); + group.put("maxprepsTeamRankings", "maxpreps-team-rankings"); + group.put("maxprepsTeamRosterSummary", "maxpreps-team-roster-summary"); + group.put("maxprepsTeamSchedule", "maxpreps-team-schedule"); + group.put("maxprepsTeamStatLeaders", "maxpreps-team-stat-leaders"); + group.put("maxprepsTournamentSports", "maxpreps-tournament-sports"); + g.put("maxPreps", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("mcdonaldsCategories", "mcdonalds-categories"); @@ -62622,6 +71813,9 @@ private static Map> buildGroups() { group.put("search", "mercari-search"); g.put("mercari", Map.copyOf(group)); } + } + + private static void putGroups9(Map> g) { { Map group = new LinkedHashMap<>(); group.put("job", "meta-jobs-job"); @@ -62777,6 +71971,44 @@ private static Map> buildGroups() { group.put("modaoperandiSearch", "modaoperandi-search"); g.put("modaOperandi", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("collection", "modrinth-collection"); + group.put("collections", "modrinth-collections"); + group.put("metadataLinkPlatforms", "modrinth-metadata-link-platforms"); + group.put("metadataLoaderFields", "modrinth-metadata-loader-fields"); + group.put("metadataLoaderFieldValues", "modrinth-metadata-loader-field-values"); + group.put("metadataLoaders", "modrinth-metadata-loaders"); + group.put("organization", "modrinth-organization"); + group.put("organizationProjects", "modrinth-organization-projects"); + group.put("organizations", "modrinth-organizations"); + group.put("project", "modrinth-project"); + group.put("checkProject", "modrinth-check-project"); + group.put("dependencies", "modrinth-dependencies"); + group.put("projectDisclosures", "modrinth-project-disclosures"); + group.put("projectVersions", "modrinth-project-versions"); + group.put("projectVersion", "modrinth-project-version"); + group.put("projects", "modrinth-projects"); + group.put("randomProjects", "modrinth-random-projects"); + group.put("search", "modrinth-search"); + group.put("statistics", "modrinth-statistics"); + group.put("license", "modrinth-license"); + group.put("tags", "modrinth-tags"); + group.put("forgeUpdates", "modrinth-forge-updates"); + group.put("searchV3", "modrinth-search-v3"); + group.put("searchV3Body", "modrinth-search-v3-body"); + group.put("searchV3Options", "modrinth-search-v3-options"); + group.put("version", "modrinth-version"); + group.put("fileProjects", "modrinth-file-projects"); + group.put("fileVersion", "modrinth-file-version"); + group.put("fileUpdate", "modrinth-file-update"); + group.put("fileVersions", "modrinth-file-versions"); + group.put("filesUpdate", "modrinth-files-update"); + group.put("filesUpdateIndividual", "modrinth-files-update-individual"); + group.put("filesUpdateMany", "modrinth-files-update-many"); + group.put("versions", "modrinth-versions"); + g.put("modrinth", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("categories", "moncler-categories"); @@ -62815,6 +72047,39 @@ private static Map> buildGroups() { group.put("motleyfoolSections", "motleyfool-sections"); g.put("theMotleyFool", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("motogpBmwAward", "motogp-bmw-award"); + group.put("motogpCategories", "motogp-categories"); + group.put("motogpCircuitPoles", "motogp-circuit-poles"); + group.put("motogpCircuitRecords", "motogp-circuit-records"); + group.put("motogpCircuitWins", "motogp-circuit-wins"); + group.put("motogpClassifications", "motogp-classifications"); + group.put("motogpContentCategories", "motogp-content-categories"); + group.put("motogpContentEvents", "motogp-content-events"); + group.put("motogpContentEvent", "motogp-content-event"); + group.put("motogpLatestSession", "motogp-latest-session"); + group.put("motogpNextLiveSession", "motogp-next-live-session"); + group.put("motogpEntryList", "motogp-entry-list"); + group.put("motogpEntryGridOptions", "motogp-entry-grid-options"); + group.put("motogpEventFiles", "motogp-event-files"); + group.put("motogpEvents", "motogp-events"); + group.put("motogpSeasons", "motogp-seasons"); + group.put("motogpSessions", "motogp-sessions"); + group.put("motogpStandings", "motogp-standings"); + group.put("motogpStandingsFiles", "motogp-standings-files"); + group.put("motogpStartingGrid", "motogp-starting-grid"); + g.put("motoGp", Map.copyOf(group)); + } + { + Map group = new LinkedHashMap<>(); + group.put("liveFeed", "nascar-live-feed"); + group.put("races", "nascar-races"); + group.put("seasonRaces", "nascar-season-races"); + group.put("series", "nascar-series"); + group.put("raceWeekend", "nascar-race-weekend"); + g.put("nascar", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("nationafricaArticle", "nationafrica-article"); @@ -62842,6 +72107,47 @@ private static Map> buildGroups() { group.put("nationalpostSections", "nationalpost-sections"); g.put("nationalPost", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("boxScore", "nba-box-score"); + group.put("boxScoreAdvanced", "nba-box-score-advanced"); + group.put("boxScoreFourFactors", "nba-box-score-four-factors"); + group.put("boxScoreMisc", "nba-box-score-misc"); + group.put("boxScorePlayerTrack", "nba-box-score-player-track"); + group.put("boxScoreScoring", "nba-box-score-scoring"); + group.put("boxScoreUsage", "nba-box-score-usage"); + group.put("commonAllPlayers", "nba-common-all-players"); + group.put("draftCombineAnthro", "nba-draft-combine-anthro"); + group.put("enums", "nba-enums"); + group.put("franchiseHistory", "nba-franchise-history"); + group.put("gameDetail", "nba-game-detail"); + group.put("games", "nba-games"); + group.put("homepageLeaders", "nba-homepage-leaders"); + group.put("hustleStats", "nba-hustle-stats"); + group.put("leagueGameLog", "nba-league-game-log"); + group.put("lineups", "nba-lineups"); + group.put("news", "nba-news"); + group.put("playByPlay", "nba-play-by-play"); + group.put("playerAwards", "nba-player-awards"); + group.put("playerBioStats", "nba-player-bio-stats"); + group.put("playerCareerStats", "nba-player-career-stats"); + group.put("playerDashPtShots", "nba-player-dash-pt-shots"); + group.put("playerInfo", "nba-player-info"); + group.put("playerStats", "nba-player-stats"); + group.put("players", "nba-players"); + group.put("playoffPicture", "nba-playoff-picture"); + group.put("ptDefend", "nba-pt-defend"); + group.put("ptStats", "nba-pt-stats"); + group.put("scoreboard", "nba-scoreboard"); + group.put("standings", "nba-standings"); + group.put("synergyPlayTypes", "nba-synergy-play-types"); + group.put("teamDetails", "nba-team-details"); + group.put("teamRoster", "nba-team-roster"); + group.put("teamShotLocations", "nba-team-shot-locations"); + group.put("teamStats", "nba-team-stats"); + group.put("teamStatsLeaders", "nba-team-stats-leaders"); + g.put("nba", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("nbcArticle", "nbc-article"); @@ -62867,6 +72173,18 @@ private static Map> buildGroups() { group.put("videos", "ndtv-videos"); g.put("ndtv", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("netshortBrowse", "netshort-browse"); + group.put("netshortGenres", "netshort-genres"); + group.put("netshortHome", "netshort-home"); + group.put("netshortLabel", "netshort-label"); + group.put("netshortPlots", "netshort-plots"); + group.put("netshortSearch", "netshort-search"); + group.put("netshortTitle", "netshort-title"); + group.put("netshortToplist", "netshort-toplist"); + g.put("netShort", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("article", "news18-article"); @@ -62920,6 +72238,30 @@ private static Map> buildGroups() { group.put("newyorkerSections", "newyorker-sections"); g.put("theNewYorker", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("activities", "nfhs-activities"); + group.put("affiliates", "nfhs-affiliates"); + group.put("affiliate", "nfhs-affiliate"); + group.put("associations", "nfhs-associations"); + group.put("association", "nfhs-association"); + group.put("events", "nfhs-events"); + group.put("event", "nfhs-event"); + group.put("filters", "nfhs-filters"); + group.put("highlights", "nfhs-highlights"); + group.put("producer", "nfhs-producer"); + group.put("publisher", "nfhs-publisher"); + group.put("schools", "nfhs-schools"); + group.put("school", "nfhs-school"); + group.put("search", "nfhs-search"); + group.put("sports", "nfhs-sports"); + group.put("states", "nfhs-states"); + group.put("suggest", "nfhs-suggest"); + g.put("nfhs", Map.copyOf(group)); + } + } + + private static void putGroups10(Map> g) { { Map group = new LinkedHashMap<>(); group.put("categories", "nike-categories"); @@ -63053,8 +72395,11 @@ private static Map> buildGroups() { group.put("opendotaAbilities", "opendota-abilities"); group.put("opendotaBenchmarks", "opendota-benchmarks"); group.put("opendotaConstants", "opendota-constants"); + group.put("opendotaFindMatches", "opendota-find-matches"); + group.put("opendotaHeroDescriptions", "opendota-hero-descriptions"); group.put("opendotaHeroDurations", "opendota-hero-durations"); group.put("opendotaHeroItems", "opendota-hero-items"); + group.put("opendotaHeroMatches", "opendota-hero-matches"); group.put("opendotaHeroMatchups", "opendota-hero-matchups"); group.put("opendotaHeroStats", "opendota-hero-stats"); group.put("opendotaHeroes", "opendota-heroes"); @@ -63068,6 +72413,7 @@ private static Map> buildGroups() { group.put("opendotaPatchNotes", "opendota-patch-notes"); group.put("opendotaProMatches", "opendota-pro-matches"); group.put("opendotaProPlayers", "opendota-pro-players"); + group.put("opendotaPublicMatches", "opendota-public-matches"); group.put("opendotaRankDistribution", "opendota-rank-distribution"); group.put("opendotaRecords", "opendota-records"); group.put("opendotaScenarios", "opendota-scenarios"); @@ -63078,6 +72424,54 @@ private static Map> buildGroups() { group.put("opendotaTeams", "opendota-teams"); g.put("openDota", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("openf1CarData", "openf1-car-data"); + group.put("openf1ChampionshipDrivers", "openf1-championship-drivers"); + group.put("openf1ChampionshipTeams", "openf1-championship-teams"); + group.put("openf1Drivers", "openf1-drivers"); + group.put("openf1Intervals", "openf1-intervals"); + group.put("openf1Laps", "openf1-laps"); + group.put("openf1Location", "openf1-location"); + group.put("openf1Meetings", "openf1-meetings"); + group.put("openf1Overtakes", "openf1-overtakes"); + group.put("openf1Pit", "openf1-pit"); + group.put("openf1Position", "openf1-position"); + group.put("openf1RaceControl", "openf1-race-control"); + group.put("openf1SessionResult", "openf1-session-result"); + group.put("openf1Sessions", "openf1-sessions"); + group.put("openf1StartingGrid", "openf1-starting-grid"); + group.put("openf1Stints", "openf1-stints"); + group.put("openf1TeamRadio", "openf1-team-radio"); + group.put("openf1Weather", "openf1-weather"); + g.put("openF1", Map.copyOf(group)); + } + { + Map group = new LinkedHashMap<>(); + group.put("openligadbCurrentGroup", "openligadb-current-group"); + group.put("openligadbCurrentMatchday", "openligadb-current-matchday"); + group.put("openligadbGoalGetters", "openligadb-goal-getters"); + group.put("openligadbGroups", "openligadb-groups"); + group.put("openligadbLastChanged", "openligadb-last-changed"); + group.put("openligadbLastMatch", "openligadb-last-match"); + group.put("openligadbLastTeamMatch", "openligadb-last-team-match"); + group.put("openligadbLeagueTeamMatches", "openligadb-league-team-matches"); + group.put("openligadbLeagues", "openligadb-leagues"); + group.put("openligadbMatch", "openligadb-match"); + group.put("openligadbMatchdayMatches", "openligadb-matchday-matches"); + group.put("openligadbLeagueMatches", "openligadb-league-matches"); + group.put("openligadbMatchesByTeam", "openligadb-matches-by-team"); + group.put("openligadbMatchesByTeamId", "openligadb-matches-by-team-id"); + group.put("openligadbNextMatch", "openligadb-next-match"); + group.put("openligadbNextTeamMatch", "openligadb-next-team-match"); + group.put("openligadbResultInfos", "openligadb-result-infos"); + group.put("openligadbResultTypes", "openligadb-result-types"); + group.put("openligadbSports", "openligadb-sports"); + group.put("openligadbTable", "openligadb-table"); + group.put("openligadbTeamPairMatches", "openligadb-team-pair-matches"); + group.put("openligadbTeams", "openligadb-teams"); + g.put("openLigaDb", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("openseaActivity", "opensea-activity"); @@ -63196,6 +72590,14 @@ private static Map> buildGroups() { group.put("papajohnsStore", "papajohns-store"); g.put("papaJohnS", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("cityFacets", "partiful-city-facets"); + group.put("cityFeed", "partiful-city-feed"); + group.put("event", "partiful-event"); + group.put("exploreCities", "partiful-explore-cities"); + g.put("partiful", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("creator", "patreon-creator"); @@ -63231,6 +72633,38 @@ private static Map> buildGroups() { group.put("sections", "people-sections"); g.put("people", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("petsmartCategories", "petsmart-categories"); + group.put("petsmartProduct", "petsmart-product"); + group.put("petsmartProductInventory", "petsmart-product-inventory"); + group.put("petsmartSearch", "petsmart-search"); + group.put("petsmartSearchFilters", "petsmart-search-filters"); + group.put("petsmartSuggest", "petsmart-suggest"); + g.put("petSmart", Map.copyOf(group)); + } + { + Map group = new LinkedHashMap<>(); + group.put("pgatourLeaderboard", "pgatour-leaderboard"); + group.put("pgatourPlayers", "pgatour-players"); + group.put("pgatourSchedule", "pgatour-schedule"); + group.put("pgatourScheduleSeasons", "pgatour-schedule-seasons"); + group.put("pgatourStats", "pgatour-stats"); + group.put("pgatourStatDetail", "pgatour-stat-detail"); + group.put("pgatourStatOptions", "pgatour-stat-options"); + group.put("pgatourTournamentLinks", "pgatour-tournament-links"); + group.put("pgatourTournamentBroadcast", "pgatour-tournament-broadcast"); + group.put("pgatourTournamentCourseStats", "pgatour-tournament-course-stats"); + group.put("pgatourTournamentField", "pgatour-tournament-field"); + group.put("pgatourTournamentOverview", "pgatour-tournament-overview"); + group.put("pgatourTournamentPastResults", "pgatour-tournament-past-results"); + group.put("pgatourTournamentTeeTimes", "pgatour-tournament-tee-times"); + group.put("pgatourTournamentWeather", "pgatour-tournament-weather"); + g.put("pgaTour", Map.copyOf(group)); + } + } + + private static void putGroups11(Map> g) { { Map group = new LinkedHashMap<>(); group.put("phillyinquirerArticle", "phillyinquirer-article"); @@ -63611,6 +73045,9 @@ private static Map> buildGroups() { group.put("store", "rebag-store"); g.put("rebag", Map.copyOf(group)); } + } + + private static void putGroups12(Map> g) { { Map group = new LinkedHashMap<>(); group.put("archiveCommentsIds", "reddit-archive-comments-ids"); @@ -63799,6 +73236,9 @@ private static Map> buildGroups() { group.put("rottentomatoesBrowseFilters", "rottentomatoes-browse-filters"); group.put("rottentomatoesBrowseMovies", "rottentomatoes-browse-movies"); group.put("rottentomatoesBrowseTv", "rottentomatoes-browse-tv"); + group.put("rottentomatoesCritic", "rottentomatoes-critic"); + group.put("rottentomatoesCriticPublications", "rottentomatoes-critic-publications"); + group.put("rottentomatoesCriticReviews", "rottentomatoes-critic-reviews"); group.put("rottentomatoesCriticsAuthors", "rottentomatoes-critics-authors"); group.put("rottentomatoesEditorialContent", "rottentomatoes-editorial-content"); group.put("rottentomatoesEditorialDetail", "rottentomatoes-editorial-detail"); @@ -63808,11 +73248,17 @@ private static Map> buildGroups() { group.put("rottentomatoesEditorialTerms", "rottentomatoes-editorial-terms"); group.put("rottentomatoesEditorialTypes", "rottentomatoes-editorial-types"); group.put("rottentomatoesEpisode", "rottentomatoes-episode"); + group.put("rottentomatoesEpisodeReviews", "rottentomatoes-episode-reviews"); group.put("rottentomatoesMovie", "rottentomatoes-movie"); group.put("rottentomatoesMovieReviews", "rottentomatoes-movie-reviews"); + group.put("rottentomatoesMovieVideos", "rottentomatoes-movie-videos"); + group.put("rottentomatoesMovies", "rottentomatoes-movies"); group.put("rottentomatoesPerson", "rottentomatoes-person"); + group.put("rottentomatoesPublication", "rottentomatoes-publication"); + group.put("rottentomatoesPublicationReviews", "rottentomatoes-publication-reviews"); group.put("rottentomatoesSearch", "rottentomatoes-search"); group.put("rottentomatoesSeason", "rottentomatoes-season"); + group.put("rottentomatoesSeasonReviews", "rottentomatoes-season-reviews"); group.put("rottentomatoesSeries", "rottentomatoes-series"); group.put("rottentomatoesSitemapUrls", "rottentomatoes-sitemap-urls"); group.put("rottentomatoesSitemaps", "rottentomatoes-sitemaps"); @@ -63948,6 +73394,9 @@ private static Map> buildGroups() { group.put("sections", "sevennewsau-sections"); g.put("sevenNewsAustralia", Map.copyOf(group)); } + } + + private static void putGroups13(Map> g) { { Map group = new LinkedHashMap<>(); group.put("article", "sfgate-article"); @@ -64143,6 +73592,7 @@ private static Map> buildGroups() { group.put("sofascoreEventLineups", "sofascore-event-lineups"); group.put("sofascoreEventManagers", "sofascore-event-managers"); group.put("sofascoreEventOdds", "sofascore-event-odds"); + group.put("sofascoreEventPlayerActions", "sofascore-event-player-actions"); group.put("sofascoreEventPlayerHeatmap", "sofascore-event-player-heatmap"); group.put("sofascoreEventPlayerStatistics", "sofascore-event-player-statistics"); group.put("sofascoreEventPointByPoint", "sofascore-event-point-by-point"); @@ -64150,6 +73600,7 @@ private static Map> buildGroups() { group.put("sofascoreEventShotmap", "sofascore-event-shotmap"); group.put("sofascoreEventStatistics", "sofascore-event-statistics"); group.put("sofascoreEventTeamHeatmap", "sofascore-event-team-heatmap"); + group.put("sofascoreEventTeamShotmap", "sofascore-event-team-shotmap"); group.put("sofascoreEventTeamStreaks", "sofascore-event-team-streaks"); group.put("sofascoreEventTennisPower", "sofascore-event-tennis-power"); group.put("sofascoreEventTvChannels", "sofascore-event-tv-channels"); @@ -64275,6 +73726,27 @@ private static Map> buildGroups() { group.put("sparkfunSearch", "sparkfun-search"); g.put("sparkFun", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("speedrunCatalog", "speedrun-catalog"); + group.put("speedrunCategoryDetail", "speedrun-category-detail"); + group.put("speedrunCategoryRecords", "speedrun-category-records"); + group.put("speedrunCategoryVariables", "speedrun-category-variables"); + group.put("speedrunGames", "speedrun-games"); + group.put("speedrunGameDetail", "speedrun-game-detail"); + group.put("speedrunCategories", "speedrun-categories"); + group.put("speedrunLevels", "speedrun-levels"); + group.put("speedrunRecords", "speedrun-records"); + group.put("speedrunVariables", "speedrun-variables"); + group.put("speedrunGameLeaderboard", "speedrun-game-leaderboard"); + group.put("speedrunLevelLeaderboard", "speedrun-level-leaderboard"); + group.put("speedrunLevelDetail", "speedrun-level-detail"); + group.put("speedrunLevelCategories", "speedrun-level-categories"); + group.put("speedrunLevelRecords", "speedrun-level-records"); + group.put("speedrunLevelVariables", "speedrun-level-variables"); + group.put("speedrunResourceOptions", "speedrun-resource-options"); + g.put("speedrunCom", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("sportingnewsArticle", "sportingnews-article"); @@ -64450,6 +73922,9 @@ private static Map> buildGroups() { group.put("stevemaddenStore", "stevemadden-store"); g.put("steveMadden", Map.copyOf(group)); } + } + + private static void putGroups14(Map> g) { { Map group = new LinkedHashMap<>(); group.put("stockxBrands", "stockx-brands"); @@ -64765,6 +74240,9 @@ private static Map> buildGroups() { group.put("thestarmySections", "thestarmy-sections"); g.put("theStarMalaysia", Map.copyOf(group)); } + } + + private static void putGroups15(Map> g) { { Map group = new LinkedHashMap<>(); group.put("thevergeArticle", "theverge-article"); @@ -65147,6 +74625,9 @@ private static Map> buildGroups() { group.put("request", "account-deletion-request"); g.put("accountDeletion", Map.copyOf(group)); } + } + + private static void putGroups16(Map> g) { { Map group = new LinkedHashMap<>(); group.put("usmagazineArticle", "usmagazine-article"); @@ -65338,6 +74819,16 @@ private static Map> buildGroups() { group.put("sections", "wccftech-sections"); g.put("wccftech", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("genre", "webtoon-genre"); + group.put("genres", "webtoon-genres"); + group.put("originals", "webtoon-originals"); + group.put("rankings", "webtoon-rankings"); + group.put("search", "webtoon-search"); + group.put("series", "webtoon-series"); + g.put("webtoon", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("categories", "wendys-categories"); @@ -65413,6 +74904,20 @@ private static Map> buildGroups() { group.put("wsjAuthor", "wsj-author"); g.put("wallStreetJournal", Map.copyOf(group)); } + { + Map group = new LinkedHashMap<>(); + group.put("countries", "wta-countries"); + group.put("matchStates", "wta-match-states"); + group.put("rankings", "wta-rankings"); + group.put("tournamentSeasons", "wta-tournament-seasons"); + group.put("tournaments", "wta-tournaments"); + group.put("tournament", "wta-tournament"); + group.put("tournamentDraws", "wta-tournament-draws"); + group.put("tournamentMatches", "wta-tournament-matches"); + group.put("tournamentOrderOfPlay", "wta-tournament-order-of-play"); + group.put("tournamentPlayers", "wta-tournament-players"); + g.put("wta", Map.copyOf(group)); + } { Map group = new LinkedHashMap<>(); group.put("post", "x-post"); @@ -65420,6 +74925,9 @@ private static Map> buildGroups() { group.put("profilePosts", "x-profile-posts"); g.put("x", Map.copyOf(group)); } + } + + private static void putGroups17(Map> g) { { Map group = new LinkedHashMap<>(); group.put("browse", "xbox-browse"); @@ -65540,34 +75048,75 @@ private static Map> buildGroups() { { Map group = new LinkedHashMap<>(); group.put("article", "yahoo-shopping-article"); + group.put("author", "yahoo-shopping-author"); + group.put("categories", "yahoo-shopping-categories"); group.put("category", "yahoo-shopping-category"); + group.put("experts", "yahoo-shopping-experts"); group.put("home", "yahoo-shopping-home"); group.put("shoppingList", "yahoo-shopping-shopping-list"); group.put("shoppingLists", "yahoo-shopping-shopping-lists"); + group.put("sitemap", "yahoo-shopping-sitemap"); + group.put("sitemaps", "yahoo-shopping-sitemaps"); group.put("store", "yahoo-shopping-store"); group.put("stores", "yahoo-shopping-stores"); + group.put("suggest", "yahoo-shopping-suggest"); g.put("yahooShopping", Map.copyOf(group)); } { Map group = new LinkedHashMap<>(); + group.put("collegeRankings", "yahoo-sports-college-rankings"); + group.put("draft", "yahoo-sports-draft"); + group.put("dropdownCatalog", "yahoo-sports-dropdown-catalog"); group.put("game", "yahoo-sports-game"); group.put("golfLeaderboard", "yahoo-sports-golf-leaderboard"); + group.put("golfPlayer", "yahoo-sports-golf-player"); + group.put("golfPlayerNews", "yahoo-sports-golf-player-news"); + group.put("golfPlayers", "yahoo-sports-golf-players"); group.put("golfSchedule", "yahoo-sports-golf-schedule"); + group.put("home", "yahoo-sports-home"); + group.put("injuryReport", "yahoo-sports-injury-report"); + group.put("leagueSchedule", "yahoo-sports-league-schedule"); + group.put("leagues", "yahoo-sports-leagues"); group.put("mmaFightCard", "yahoo-sports-mma-fight-card"); group.put("mmaSchedule", "yahoo-sports-mma-schedule"); + group.put("moreNews", "yahoo-sports-more-news"); group.put("motorsportsRace", "yahoo-sports-motorsports-race"); group.put("motorsportsSchedule", "yahoo-sports-motorsports-schedule"); + group.put("navigation", "yahoo-sports-navigation"); + group.put("networkCatalog", "yahoo-sports-network-catalog"); group.put("news", "yahoo-sports-news"); + group.put("newsletterArchive", "yahoo-sports-newsletter-archive"); + group.put("newsletters", "yahoo-sports-newsletters"); + group.put("oddsFeatured", "yahoo-sports-odds-featured"); + group.put("oddsGame", "yahoo-sports-odds-game"); + group.put("oddsGames", "yahoo-sports-odds-games"); + group.put("oddsTrending", "yahoo-sports-odds-trending"); group.put("olympicsMedals", "yahoo-sports-olympics-medals"); group.put("player", "yahoo-sports-player"); + group.put("playerSearch", "yahoo-sports-player-search"); + group.put("playoffBracket", "yahoo-sports-playoff-bracket"); + group.put("playoffBracketCatalog", "yahoo-sports-playoff-bracket-catalog"); + group.put("rssCatalog", "yahoo-sports-rss-catalog"); + group.put("rssFeed", "yahoo-sports-rss-feed"); + group.put("scheduleCatalog", "yahoo-sports-schedule-catalog"); group.put("scoreboard", "yahoo-sports-scoreboard"); + group.put("sectionStream", "yahoo-sports-section-stream"); + group.put("soccerScoreboard", "yahoo-sports-soccer-scoreboard"); + group.put("sportsbookCatalog", "yahoo-sports-sportsbook-catalog"); group.put("standings", "yahoo-sports-standings"); + group.put("stats", "yahoo-sports-stats"); + group.put("statsCatalog", "yahoo-sports-stats-catalog"); + group.put("statsDiscovery", "yahoo-sports-stats-discovery"); group.put("team", "yahoo-sports-team"); group.put("teamRoster", "yahoo-sports-team-roster"); group.put("teamSchedule", "yahoo-sports-team-schedule"); group.put("tennisRankings", "yahoo-sports-tennis-rankings"); group.put("tennisSchedule", "yahoo-sports-tennis-schedule"); group.put("tennisScoreboard", "yahoo-sports-tennis-scoreboard"); + group.put("topicNews", "yahoo-sports-topic-news"); + group.put("videoHeadlines", "yahoo-sports-video-headlines"); + group.put("videoListCatalog", "yahoo-sports-video-list-catalog"); + group.put("watchSchedule", "yahoo-sports-watch-schedule"); g.put("yahooSports", Map.copyOf(group)); } { @@ -65693,6 +75242,6 @@ private static Map> buildGroups() { group.put("search", "zomato-search"); g.put("zomato", Map.copyOf(group)); } - return Map.copyOf(g); } + } diff --git a/src/main/java/net/crawlora/Version.java b/src/main/java/net/crawlora/Version.java index d921f94..3afbded 100644 --- a/src/main/java/net/crawlora/Version.java +++ b/src/main/java/net/crawlora/Version.java @@ -5,5 +5,5 @@ public final class Version { private Version() {} /** The released SDK version. */ - public static final String VERSION = "1.50.0"; + public static final String VERSION = "1.51.0"; } diff --git a/src/main/java/net/crawlora/groups/AppleBooksGroup.java b/src/main/java/net/crawlora/groups/AppleBooksGroup.java index d3489ff..a912165 100644 --- a/src/main/java/net/crawlora/groups/AppleBooksGroup.java +++ b/src/main/java/net/crawlora/groups/AppleBooksGroup.java @@ -40,6 +40,37 @@ public Object audiobookSeries(Map params, RequestOptions options return client.request("apple-books-audiobook-series", params, options); } + /** + * apple-books-audiobook-charts (GET /apple-books/audiobook/charts). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object audiobookCharts(Map params) { + return audiobookCharts(params, null); + } + + /** + * apple-books-audiobook-charts (GET /apple-books/audiobook/charts). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object audiobookCharts(Map params, RequestOptions options) { + OperationGroup.checkParams("apple-books-audiobook-charts", params); + return client.request("apple-books-audiobook-charts", params, options); + } + + /** + * apple-books-audiobook-charts (GET /apple-books/audiobook/charts). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object audiobookCharts() { + return audiobookCharts(Map.of(), null); + } + /** * apple-books-audiobook-search (GET /apple-books/audiobook/search). * @@ -247,6 +278,28 @@ public Object charts() { return charts(Map.of(), null); } + /** + * apple-books-genres (GET /apple-books/genres). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object genres(Map params) { + return genres(params, null); + } + + /** + * apple-books-genres (GET /apple-books/genres). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object genres(Map params, RequestOptions options) { + OperationGroup.checkParams("apple-books-genres", params); + return client.request("apple-books-genres", params, options); + } + /** * apple-books-search (GET /apple-books/search). * diff --git a/src/main/java/net/crawlora/groups/BandcampGroup.java b/src/main/java/net/crawlora/groups/BandcampGroup.java new file mode 100644 index 0000000..9c5230c --- /dev/null +++ b/src/main/java/net/crawlora/groups/BandcampGroup.java @@ -0,0 +1,171 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "bandcamp" operation group. + * Reach it via {@code client.bandcamp()}. + */ +public final class BandcampGroup { + private final CrawloraClient client; + + public BandcampGroup(CrawloraClient client) { + this.client = client; + } + + /** + * bandcamp-artist (GET /bandcamp/artist). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object artist(Map params) { + return artist(params, null); + } + + /** + * bandcamp-artist (GET /bandcamp/artist). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object artist(Map params, RequestOptions options) { + OperationGroup.checkParams("bandcamp-artist", params); + return client.request("bandcamp-artist", params, options); + } + + /** + * bandcamp-discover (GET /bandcamp/discover). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object discover(Map params) { + return discover(params, null); + } + + /** + * bandcamp-discover (GET /bandcamp/discover). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object discover(Map params, RequestOptions options) { + OperationGroup.checkParams("bandcamp-discover", params); + return client.request("bandcamp-discover", params, options); + } + + /** + * bandcamp-discover (GET /bandcamp/discover). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object discover() { + return discover(Map.of(), null); + } + + /** + * bandcamp-filters (GET /bandcamp/filters). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object filters(Map params) { + return filters(params, null); + } + + /** + * bandcamp-filters (GET /bandcamp/filters). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object filters(Map params, RequestOptions options) { + OperationGroup.checkParams("bandcamp-filters", params); + return client.request("bandcamp-filters", params, options); + } + + /** + * bandcamp-filters (GET /bandcamp/filters). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object filters() { + return filters(Map.of(), null); + } + + /** + * bandcamp-related-tags (GET /bandcamp/related-tags). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object relatedTags(Map params) { + return relatedTags(params, null); + } + + /** + * bandcamp-related-tags (GET /bandcamp/related-tags). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object relatedTags(Map params, RequestOptions options) { + OperationGroup.checkParams("bandcamp-related-tags", params); + return client.request("bandcamp-related-tags", params, options); + } + + /** + * bandcamp-release (GET /bandcamp/release). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object release(Map params) { + return release(params, null); + } + + /** + * bandcamp-release (GET /bandcamp/release). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object release(Map params, RequestOptions options) { + OperationGroup.checkParams("bandcamp-release", params); + return client.request("bandcamp-release", params, options); + } + + /** + * bandcamp-search (GET /bandcamp/search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object search(Map params) { + return search(params, null); + } + + /** + * bandcamp-search (GET /bandcamp/search). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object search(Map params, RequestOptions options) { + OperationGroup.checkParams("bandcamp-search", params); + return client.request("bandcamp-search", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/BoardGameGeekGroup.java b/src/main/java/net/crawlora/groups/BoardGameGeekGroup.java new file mode 100644 index 0000000..7049366 --- /dev/null +++ b/src/main/java/net/crawlora/groups/BoardGameGeekGroup.java @@ -0,0 +1,347 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "boardGameGeek" operation group. + * Reach it via {@code client.boardGameGeek()}. + */ +public final class BoardGameGeekGroup { + private final CrawloraClient client; + + public BoardGameGeekGroup(CrawloraClient client) { + this.client = client; + } + + /** + * boardgamegeek-cardsets (GET /boardgamegeek/cardsets/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekCardsets(Map params) { + return boardgamegeekCardsets(params, null); + } + + /** + * boardgamegeek-cardsets (GET /boardgamegeek/cardsets/{id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekCardsets(Map params, RequestOptions options) { + OperationGroup.checkParams("boardgamegeek-cardsets", params); + return client.request("boardgamegeek-cardsets", params, options); + } + + /** + * boardgamegeek-entity (GET /boardgamegeek/entity/{type}/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekEntity(Map params) { + return boardgamegeekEntity(params, null); + } + + /** + * boardgamegeek-entity (GET /boardgamegeek/entity/{type}/{id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekEntity(Map params, RequestOptions options) { + OperationGroup.checkParams("boardgamegeek-entity", params); + return client.request("boardgamegeek-entity", params, options); + } + + /** + * boardgamegeek-game (GET /boardgamegeek/game/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekGame(Map params) { + return boardgamegeekGame(params, null); + } + + /** + * boardgamegeek-game (GET /boardgamegeek/game/{id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekGame(Map params, RequestOptions options) { + OperationGroup.checkParams("boardgamegeek-game", params); + return client.request("boardgamegeek-game", params, options); + } + + /** + * boardgamegeek-geeklist (GET /boardgamegeek/geeklist/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekGeeklist(Map params) { + return boardgamegeekGeeklist(params, null); + } + + /** + * boardgamegeek-geeklist (GET /boardgamegeek/geeklist/{id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekGeeklist(Map params, RequestOptions options) { + OperationGroup.checkParams("boardgamegeek-geeklist", params); + return client.request("boardgamegeek-geeklist", params, options); + } + + /** + * boardgamegeek-geeklist-items (GET /boardgamegeek/geeklist/{id}/items). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekGeeklistItems(Map params) { + return boardgamegeekGeeklistItems(params, null); + } + + /** + * boardgamegeek-geeklist-items (GET /boardgamegeek/geeklist/{id}/items). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekGeeklistItems(Map params, RequestOptions options) { + OperationGroup.checkParams("boardgamegeek-geeklist-items", params); + return client.request("boardgamegeek-geeklist-items", params, options); + } + + /** + * boardgamegeek-geeklists (GET /boardgamegeek/geeklists). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekGeeklists(Map params) { + return boardgamegeekGeeklists(params, null); + } + + /** + * boardgamegeek-geeklists (GET /boardgamegeek/geeklists). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekGeeklists(Map params, RequestOptions options) { + OperationGroup.checkParams("boardgamegeek-geeklists", params); + return client.request("boardgamegeek-geeklists", params, options); + } + + /** + * boardgamegeek-hotness (GET /boardgamegeek/hotness). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekHotness(Map params) { + return boardgamegeekHotness(params, null); + } + + /** + * boardgamegeek-hotness (GET /boardgamegeek/hotness). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekHotness(Map params, RequestOptions options) { + OperationGroup.checkParams("boardgamegeek-hotness", params); + return client.request("boardgamegeek-hotness", params, options); + } + + /** + * boardgamegeek-hotness (GET /boardgamegeek/hotness). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekHotness() { + return boardgamegeekHotness(Map.of(), null); + } + + /** + * boardgamegeek-links (GET /boardgamegeek/links). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekLinks(Map params) { + return boardgamegeekLinks(params, null); + } + + /** + * boardgamegeek-links (GET /boardgamegeek/links). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekLinks(Map params, RequestOptions options) { + OperationGroup.checkParams("boardgamegeek-links", params); + return client.request("boardgamegeek-links", params, options); + } + + /** + * boardgamegeek-media (GET /boardgamegeek/media/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekMedia(Map params) { + return boardgamegeekMedia(params, null); + } + + /** + * boardgamegeek-media (GET /boardgamegeek/media/{id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekMedia(Map params, RequestOptions options) { + OperationGroup.checkParams("boardgamegeek-media", params); + return client.request("boardgamegeek-media", params, options); + } + + /** + * boardgamegeek-recommendations (GET /boardgamegeek/recommendations/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekRecommendations(Map params) { + return boardgamegeekRecommendations(params, null); + } + + /** + * boardgamegeek-recommendations (GET /boardgamegeek/recommendations/{id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekRecommendations(Map params, RequestOptions options) { + OperationGroup.checkParams("boardgamegeek-recommendations", params); + return client.request("boardgamegeek-recommendations", params, options); + } + + /** + * boardgamegeek-reviews (GET /boardgamegeek/reviews/{type}/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekReviews(Map params) { + return boardgamegeekReviews(params, null); + } + + /** + * boardgamegeek-reviews (GET /boardgamegeek/reviews/{type}/{id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekReviews(Map params, RequestOptions options) { + OperationGroup.checkParams("boardgamegeek-reviews", params); + return client.request("boardgamegeek-reviews", params, options); + } + + /** + * boardgamegeek-taxonomy (GET /boardgamegeek/taxonomy). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekTaxonomy(Map params) { + return boardgamegeekTaxonomy(params, null); + } + + /** + * boardgamegeek-taxonomy (GET /boardgamegeek/taxonomy). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekTaxonomy(Map params, RequestOptions options) { + OperationGroup.checkParams("boardgamegeek-taxonomy", params); + return client.request("boardgamegeek-taxonomy", params, options); + } + + /** + * boardgamegeek-taxonomy (GET /boardgamegeek/taxonomy). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekTaxonomy() { + return boardgamegeekTaxonomy(Map.of(), null); + } + + /** + * boardgamegeek-thread (GET /boardgamegeek/thread/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekThread(Map params) { + return boardgamegeekThread(params, null); + } + + /** + * boardgamegeek-thread (GET /boardgamegeek/thread/{id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekThread(Map params, RequestOptions options) { + OperationGroup.checkParams("boardgamegeek-thread", params); + return client.request("boardgamegeek-thread", params, options); + } + + /** + * boardgamegeek-threads (GET /boardgamegeek/threads). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekThreads(Map params) { + return boardgamegeekThreads(params, null); + } + + /** + * boardgamegeek-threads (GET /boardgamegeek/threads). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boardgamegeekThreads(Map params, RequestOptions options) { + OperationGroup.checkParams("boardgamegeek-threads", params); + return client.request("boardgamegeek-threads", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/BooksyGroup.java b/src/main/java/net/crawlora/groups/BooksyGroup.java new file mode 100644 index 0000000..917056d --- /dev/null +++ b/src/main/java/net/crawlora/groups/BooksyGroup.java @@ -0,0 +1,127 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "booksy" operation group. + * Reach it via {@code client.booksy()}. + */ +public final class BooksyGroup { + private final CrawloraClient client; + + public BooksyGroup(CrawloraClient client) { + this.client = client; + } + + /** + * booksy-business (GET /booksy/business). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object business(Map params) { + return business(params, null); + } + + /** + * booksy-business (GET /booksy/business). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object business(Map params, RequestOptions options) { + OperationGroup.checkParams("booksy-business", params); + return client.request("booksy-business", params, options); + } + + /** + * booksy-businesses (GET /booksy/businesses). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object businesses(Map params) { + return businesses(params, null); + } + + /** + * booksy-businesses (GET /booksy/businesses). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object businesses(Map params, RequestOptions options) { + OperationGroup.checkParams("booksy-businesses", params); + return client.request("booksy-businesses", params, options); + } + + /** + * booksy-businesses (GET /booksy/businesses). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object businesses() { + return businesses(Map.of(), null); + } + + /** + * booksy-categories (GET /booksy/categories). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object categories(Map params) { + return categories(params, null); + } + + /** + * booksy-categories (GET /booksy/categories). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object categories(Map params, RequestOptions options) { + OperationGroup.checkParams("booksy-categories", params); + return client.request("booksy-categories", params, options); + } + + /** + * booksy-categories (GET /booksy/categories). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object categories() { + return categories(Map.of(), null); + } + + /** + * booksy-treatment-hints (GET /booksy/treatment-hints). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object treatmentHints(Map params) { + return treatmentHints(params, null); + } + + /** + * booksy-treatment-hints (GET /booksy/treatment-hints). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object treatmentHints(Map params, RequestOptions options) { + OperationGroup.checkParams("booksy-treatment-hints", params); + return client.request("booksy-treatment-hints", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/BringAtrailerGroup.java b/src/main/java/net/crawlora/groups/BringAtrailerGroup.java new file mode 100644 index 0000000..3e9c823 --- /dev/null +++ b/src/main/java/net/crawlora/groups/BringAtrailerGroup.java @@ -0,0 +1,242 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "bringATrailer" operation group. + * Reach it via {@code client.bringATrailer()}. + */ +public final class BringAtrailerGroup { + private final CrawloraClient client; + + public BringAtrailerGroup(CrawloraClient client) { + this.client = client; + } + + /** + * bringatrailer-filters (GET /bringatrailer/filters). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object bringatrailerFilters(Map params) { + return bringatrailerFilters(params, null); + } + + /** + * bringatrailer-filters (GET /bringatrailer/filters). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object bringatrailerFilters(Map params, RequestOptions options) { + OperationGroup.checkParams("bringatrailer-filters", params); + return client.request("bringatrailer-filters", params, options); + } + + /** + * bringatrailer-filters (GET /bringatrailer/filters). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object bringatrailerFilters() { + return bringatrailerFilters(Map.of(), null); + } + + /** + * bringatrailer-listing (GET /bringatrailer/listing). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object bringatrailerListing(Map params) { + return bringatrailerListing(params, null); + } + + /** + * bringatrailer-listing (GET /bringatrailer/listing). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object bringatrailerListing(Map params, RequestOptions options) { + OperationGroup.checkParams("bringatrailer-listing", params); + return client.request("bringatrailer-listing", params, options); + } + + /** + * bringatrailer-live (GET /bringatrailer/live). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object bringatrailerLive(Map params) { + return bringatrailerLive(params, null); + } + + /** + * bringatrailer-live (GET /bringatrailer/live). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object bringatrailerLive(Map params, RequestOptions options) { + OperationGroup.checkParams("bringatrailer-live", params); + return client.request("bringatrailer-live", params, options); + } + + /** + * bringatrailer-live (GET /bringatrailer/live). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object bringatrailerLive() { + return bringatrailerLive(Map.of(), null); + } + + /** + * bringatrailer-makes (GET /bringatrailer/makes). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object bringatrailerMakes(Map params) { + return bringatrailerMakes(params, null); + } + + /** + * bringatrailer-makes (GET /bringatrailer/makes). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object bringatrailerMakes(Map params, RequestOptions options) { + OperationGroup.checkParams("bringatrailer-makes", params); + return client.request("bringatrailer-makes", params, options); + } + + /** + * bringatrailer-makes (GET /bringatrailer/makes). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object bringatrailerMakes() { + return bringatrailerMakes(Map.of(), null); + } + + /** + * bringatrailer-price-history (GET /bringatrailer/price-history). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object bringatrailerPriceHistory(Map params) { + return bringatrailerPriceHistory(params, null); + } + + /** + * bringatrailer-price-history (GET /bringatrailer/price-history). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object bringatrailerPriceHistory(Map params, RequestOptions options) { + OperationGroup.checkParams("bringatrailer-price-history", params); + return client.request("bringatrailer-price-history", params, options); + } + + /** + * bringatrailer-price-history (GET /bringatrailer/price-history). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object bringatrailerPriceHistory() { + return bringatrailerPriceHistory(Map.of(), null); + } + + /** + * bringatrailer-results (GET /bringatrailer/results). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object bringatrailerResults(Map params) { + return bringatrailerResults(params, null); + } + + /** + * bringatrailer-results (GET /bringatrailer/results). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object bringatrailerResults(Map params, RequestOptions options) { + OperationGroup.checkParams("bringatrailer-results", params); + return client.request("bringatrailer-results", params, options); + } + + /** + * bringatrailer-results (GET /bringatrailer/results). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object bringatrailerResults() { + return bringatrailerResults(Map.of(), null); + } + + /** + * bringatrailer-search (GET /bringatrailer/search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object bringatrailerSearch(Map params) { + return bringatrailerSearch(params, null); + } + + /** + * bringatrailer-search (GET /bringatrailer/search). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object bringatrailerSearch(Map params, RequestOptions options) { + OperationGroup.checkParams("bringatrailer-search", params); + return client.request("bringatrailer-search", params, options); + } + + /** + * bringatrailer-suggest (GET /bringatrailer/suggest). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object bringatrailerSuggest(Map params) { + return bringatrailerSuggest(params, null); + } + + /** + * bringatrailer-suggest (GET /bringatrailer/suggest). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object bringatrailerSuggest(Map params, RequestOptions options) { + OperationGroup.checkParams("bringatrailer-suggest", params); + return client.request("bringatrailer-suggest", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/CardmarketGroup.java b/src/main/java/net/crawlora/groups/CardmarketGroup.java new file mode 100644 index 0000000..3098b57 --- /dev/null +++ b/src/main/java/net/crawlora/groups/CardmarketGroup.java @@ -0,0 +1,176 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "cardmarket" operation group. + * Reach it via {@code client.cardmarket()}. + */ +public final class CardmarketGroup { + private final CrawloraClient client; + + public CardmarketGroup(CrawloraClient client) { + this.client = client; + } + + /** + * cardmarket-catalog (GET /cardmarket/catalog). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object catalog(Map params) { + return catalog(params, null); + } + + /** + * cardmarket-catalog (GET /cardmarket/catalog). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object catalog(Map params, RequestOptions options) { + OperationGroup.checkParams("cardmarket-catalog", params); + return client.request("cardmarket-catalog", params, options); + } + + /** + * cardmarket-catalog (GET /cardmarket/catalog). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object catalog() { + return catalog(Map.of(), null); + } + + /** + * cardmarket-catalog-categories (GET /cardmarket/catalog/categories). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object catalogCategories(Map params) { + return catalogCategories(params, null); + } + + /** + * cardmarket-catalog-categories (GET /cardmarket/catalog/categories). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object catalogCategories(Map params, RequestOptions options) { + OperationGroup.checkParams("cardmarket-catalog-categories", params); + return client.request("cardmarket-catalog-categories", params, options); + } + + /** + * cardmarket-catalog-categories (GET /cardmarket/catalog/categories). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object catalogCategories() { + return catalogCategories(Map.of(), null); + } + + /** + * cardmarket-games (GET /cardmarket/games). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object games(Map params) { + return games(params, null); + } + + /** + * cardmarket-games (GET /cardmarket/games). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object games(Map params, RequestOptions options) { + OperationGroup.checkParams("cardmarket-games", params); + return client.request("cardmarket-games", params, options); + } + + /** + * cardmarket-games (GET /cardmarket/games). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object games() { + return games(Map.of(), null); + } + + /** + * cardmarket-price-guide (GET /cardmarket/price-guide). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object priceGuide(Map params) { + return priceGuide(params, null); + } + + /** + * cardmarket-price-guide (GET /cardmarket/price-guide). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object priceGuide(Map params, RequestOptions options) { + OperationGroup.checkParams("cardmarket-price-guide", params); + return client.request("cardmarket-price-guide", params, options); + } + + /** + * cardmarket-price-guide (GET /cardmarket/price-guide). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object priceGuide() { + return priceGuide(Map.of(), null); + } + + /** + * cardmarket-price-guide-categories (GET /cardmarket/price-guide/categories). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object priceGuideCategories(Map params) { + return priceGuideCategories(params, null); + } + + /** + * cardmarket-price-guide-categories (GET /cardmarket/price-guide/categories). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object priceGuideCategories(Map params, RequestOptions options) { + OperationGroup.checkParams("cardmarket-price-guide-categories", params); + return client.request("cardmarket-price-guide-categories", params, options); + } + + /** + * cardmarket-price-guide-categories (GET /cardmarket/price-guide/categories). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object priceGuideCategories() { + return priceGuideCategories(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/CricbuzzGroup.java b/src/main/java/net/crawlora/groups/CricbuzzGroup.java new file mode 100644 index 0000000..92c0607 --- /dev/null +++ b/src/main/java/net/crawlora/groups/CricbuzzGroup.java @@ -0,0 +1,944 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "cricbuzz" operation group. + * Reach it via {@code client.cricbuzz()}. + */ +public final class CricbuzzGroup { + private final CrawloraClient client; + + public CricbuzzGroup(CrawloraClient client) { + this.client = client; + } + + /** + * cricbuzz-archives (GET /cricbuzz/archives). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object archives(Map params) { + return archives(params, null); + } + + /** + * cricbuzz-archives (GET /cricbuzz/archives). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object archives(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-archives", params); + return client.request("cricbuzz-archives", params, options); + } + + /** + * cricbuzz-archives (GET /cricbuzz/archives). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object archives() { + return archives(Map.of(), null); + } + + /** + * cricbuzz-auction-info (GET /cricbuzz/auction/info). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionInfo(Map params) { + return auctionInfo(params, null); + } + + /** + * cricbuzz-auction-info (GET /cricbuzz/auction/info). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionInfo(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-auction-info", params); + return client.request("cricbuzz-auction-info", params, options); + } + + /** + * cricbuzz-auction-info (GET /cricbuzz/auction/info). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionInfo() { + return auctionInfo(Map.of(), null); + } + + /** + * cricbuzz-auction-live (GET /cricbuzz/auction/live). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionLive(Map params) { + return auctionLive(params, null); + } + + /** + * cricbuzz-auction-live (GET /cricbuzz/auction/live). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionLive(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-auction-live", params); + return client.request("cricbuzz-auction-live", params, options); + } + + /** + * cricbuzz-auction-live-blog (GET /cricbuzz/auction/live-blog). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionLiveBlog(Map params) { + return auctionLiveBlog(params, null); + } + + /** + * cricbuzz-auction-live-blog (GET /cricbuzz/auction/live-blog). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionLiveBlog(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-auction-live-blog", params); + return client.request("cricbuzz-auction-live-blog", params, options); + } + + /** + * cricbuzz-auction-news (GET /cricbuzz/auction/news). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionNews(Map params) { + return auctionNews(params, null); + } + + /** + * cricbuzz-auction-news (GET /cricbuzz/auction/news). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionNews(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-auction-news", params); + return client.request("cricbuzz-auction-news", params, options); + } + + /** + * cricbuzz-auction-options (GET /cricbuzz/auction/options). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionOptions(Map params) { + return auctionOptions(params, null); + } + + /** + * cricbuzz-auction-options (GET /cricbuzz/auction/options). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionOptions(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-auction-options", params); + return client.request("cricbuzz-auction-options", params, options); + } + + /** + * cricbuzz-auction-options (GET /cricbuzz/auction/options). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionOptions() { + return auctionOptions(Map.of(), null); + } + + /** + * cricbuzz-auction-player-detail (GET /cricbuzz/auction/player). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionPlayerDetail(Map params) { + return auctionPlayerDetail(params, null); + } + + /** + * cricbuzz-auction-player-detail (GET /cricbuzz/auction/player). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionPlayerDetail(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-auction-player-detail", params); + return client.request("cricbuzz-auction-player-detail", params, options); + } + + /** + * cricbuzz-auction-player-search (GET /cricbuzz/auction/player-search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionPlayerSearch(Map params) { + return auctionPlayerSearch(params, null); + } + + /** + * cricbuzz-auction-player-search (GET /cricbuzz/auction/player-search). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionPlayerSearch(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-auction-player-search", params); + return client.request("cricbuzz-auction-player-search", params, options); + } + + /** + * cricbuzz-auction-results (GET /cricbuzz/auction/results). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionResults(Map params) { + return auctionResults(params, null); + } + + /** + * cricbuzz-auction-results (GET /cricbuzz/auction/results). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionResults(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-auction-results", params); + return client.request("cricbuzz-auction-results", params, options); + } + + /** + * cricbuzz-auction-seasons (GET /cricbuzz/auction/seasons). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionSeasons(Map params) { + return auctionSeasons(params, null); + } + + /** + * cricbuzz-auction-seasons (GET /cricbuzz/auction/seasons). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionSeasons(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-auction-seasons", params); + return client.request("cricbuzz-auction-seasons", params, options); + } + + /** + * cricbuzz-auction-seasons (GET /cricbuzz/auction/seasons). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionSeasons() { + return auctionSeasons(Map.of(), null); + } + + /** + * cricbuzz-auction-team-detail (GET /cricbuzz/auction/team). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionTeamDetail(Map params) { + return auctionTeamDetail(params, null); + } + + /** + * cricbuzz-auction-team-detail (GET /cricbuzz/auction/team). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionTeamDetail(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-auction-team-detail", params); + return client.request("cricbuzz-auction-team-detail", params, options); + } + + /** + * cricbuzz-auction-teams (GET /cricbuzz/auction/teams). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionTeams(Map params) { + return auctionTeams(params, null); + } + + /** + * cricbuzz-auction-teams (GET /cricbuzz/auction/teams). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionTeams(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-auction-teams", params); + return client.request("cricbuzz-auction-teams", params, options); + } + + /** + * cricbuzz-auction-teams-options (GET /cricbuzz/auction/teams/options). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionTeamsOptions(Map params) { + return auctionTeamsOptions(params, null); + } + + /** + * cricbuzz-auction-teams-options (GET /cricbuzz/auction/teams/options). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionTeamsOptions(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-auction-teams-options", params); + return client.request("cricbuzz-auction-teams-options", params, options); + } + + /** + * cricbuzz-auction-teams-options (GET /cricbuzz/auction/teams/options). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionTeamsOptions() { + return auctionTeamsOptions(Map.of(), null); + } + + /** + * cricbuzz-auction-upcoming (GET /cricbuzz/auction/upcoming). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionUpcoming(Map params) { + return auctionUpcoming(params, null); + } + + /** + * cricbuzz-auction-upcoming (GET /cricbuzz/auction/upcoming). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionUpcoming(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-auction-upcoming", params); + return client.request("cricbuzz-auction-upcoming", params, options); + } + + /** + * cricbuzz-auction-upcoming-options (GET /cricbuzz/auction/upcoming/options). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionUpcomingOptions(Map params) { + return auctionUpcomingOptions(params, null); + } + + /** + * cricbuzz-auction-upcoming-options (GET /cricbuzz/auction/upcoming/options). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionUpcomingOptions(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-auction-upcoming-options", params); + return client.request("cricbuzz-auction-upcoming-options", params, options); + } + + /** + * cricbuzz-auction-upcoming-options (GET /cricbuzz/auction/upcoming/options). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionUpcomingOptions() { + return auctionUpcomingOptions(Map.of(), null); + } + + /** + * cricbuzz-auction-videos (GET /cricbuzz/auction/videos). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionVideos(Map params) { + return auctionVideos(params, null); + } + + /** + * cricbuzz-auction-videos (GET /cricbuzz/auction/videos). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object auctionVideos(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-auction-videos", params); + return client.request("cricbuzz-auction-videos", params, options); + } + + /** + * cricbuzz-match-facts (GET /cricbuzz/match-facts). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object matchFacts(Map params) { + return matchFacts(params, null); + } + + /** + * cricbuzz-match-facts (GET /cricbuzz/match-facts). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object matchFacts(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-match-facts", params); + return client.request("cricbuzz-match-facts", params, options); + } + + /** + * cricbuzz-match-graphs (GET /cricbuzz/match-graphs). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object matchGraphs(Map params) { + return matchGraphs(params, null); + } + + /** + * cricbuzz-match-graphs (GET /cricbuzz/match-graphs). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object matchGraphs(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-match-graphs", params); + return client.request("cricbuzz-match-graphs", params, options); + } + + /** + * cricbuzz-match-overs (GET /cricbuzz/match-overs). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object matchOvers(Map params) { + return matchOvers(params, null); + } + + /** + * cricbuzz-match-overs (GET /cricbuzz/match-overs). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object matchOvers(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-match-overs", params); + return client.request("cricbuzz-match-overs", params, options); + } + + /** + * cricbuzz-matches (GET /cricbuzz/matches). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object matches(Map params) { + return matches(params, null); + } + + /** + * cricbuzz-matches (GET /cricbuzz/matches). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object matches(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-matches", params); + return client.request("cricbuzz-matches", params, options); + } + + /** + * cricbuzz-matches (GET /cricbuzz/matches). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object matches() { + return matches(Map.of(), null); + } + + /** + * cricbuzz-navigation (GET /cricbuzz/navigation). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object navigation(Map params) { + return navigation(params, null); + } + + /** + * cricbuzz-navigation (GET /cricbuzz/navigation). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object navigation(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-navigation", params); + return client.request("cricbuzz-navigation", params, options); + } + + /** + * cricbuzz-navigation (GET /cricbuzz/navigation). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object navigation() { + return navigation(Map.of(), null); + } + + /** + * cricbuzz-news-story (GET /cricbuzz/news/story). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object newsStory(Map params) { + return newsStory(params, null); + } + + /** + * cricbuzz-news-story (GET /cricbuzz/news/story). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object newsStory(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-news-story", params); + return client.request("cricbuzz-news-story", params, options); + } + + /** + * cricbuzz-news-topics (GET /cricbuzz/news/topics). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object newsTopics(Map params) { + return newsTopics(params, null); + } + + /** + * cricbuzz-news-topics (GET /cricbuzz/news/topics). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object newsTopics(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-news-topics", params); + return client.request("cricbuzz-news-topics", params, options); + } + + /** + * cricbuzz-news-topics (GET /cricbuzz/news/topics). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object newsTopics() { + return newsTopics(Map.of(), null); + } + + /** + * cricbuzz-rankings (GET /cricbuzz/rankings). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rankings(Map params) { + return rankings(params, null); + } + + /** + * cricbuzz-rankings (GET /cricbuzz/rankings). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rankings(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-rankings", params); + return client.request("cricbuzz-rankings", params, options); + } + + /** + * cricbuzz-rankings (GET /cricbuzz/rankings). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rankings() { + return rankings(Map.of(), null); + } + + /** + * cricbuzz-records (GET /cricbuzz/records). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object records(Map params) { + return records(params, null); + } + + /** + * cricbuzz-records (GET /cricbuzz/records). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object records(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-records", params); + return client.request("cricbuzz-records", params, options); + } + + /** + * cricbuzz-records (GET /cricbuzz/records). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object records() { + return records(Map.of(), null); + } + + /** + * cricbuzz-schedule (GET /cricbuzz/schedule). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object schedule(Map params) { + return schedule(params, null); + } + + /** + * cricbuzz-schedule (GET /cricbuzz/schedule). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object schedule(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-schedule", params); + return client.request("cricbuzz-schedule", params, options); + } + + /** + * cricbuzz-schedule (GET /cricbuzz/schedule). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object schedule() { + return schedule(Map.of(), null); + } + + /** + * cricbuzz-scorecard (GET /cricbuzz/scorecard). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object scorecard(Map params) { + return scorecard(params, null); + } + + /** + * cricbuzz-scorecard (GET /cricbuzz/scorecard). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object scorecard(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-scorecard", params); + return client.request("cricbuzz-scorecard", params, options); + } + + /** + * cricbuzz-series (GET /cricbuzz/series). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object series(Map params) { + return series(params, null); + } + + /** + * cricbuzz-series (GET /cricbuzz/series). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object series(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-series", params); + return client.request("cricbuzz-series", params, options); + } + + /** + * cricbuzz-series (GET /cricbuzz/series). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object series() { + return series(Map.of(), null); + } + + /** + * cricbuzz-series-stats (GET /cricbuzz/series/stats). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object seriesStats(Map params) { + return seriesStats(params, null); + } + + /** + * cricbuzz-series-stats (GET /cricbuzz/series/stats). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object seriesStats(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-series-stats", params); + return client.request("cricbuzz-series-stats", params, options); + } + + /** + * cricbuzz-team-stats (GET /cricbuzz/team/stats). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teamStats(Map params) { + return teamStats(params, null); + } + + /** + * cricbuzz-team-stats (GET /cricbuzz/team/stats). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teamStats(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-team-stats", params); + return client.request("cricbuzz-team-stats", params, options); + } + + /** + * cricbuzz-team-stats-options (GET /cricbuzz/team/stats/options). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teamStatsOptions(Map params) { + return teamStatsOptions(params, null); + } + + /** + * cricbuzz-team-stats-options (GET /cricbuzz/team/stats/options). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teamStatsOptions(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-team-stats-options", params); + return client.request("cricbuzz-team-stats-options", params, options); + } + + /** + * cricbuzz-teams (GET /cricbuzz/teams). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teams(Map params) { + return teams(params, null); + } + + /** + * cricbuzz-teams (GET /cricbuzz/teams). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teams(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-teams", params); + return client.request("cricbuzz-teams", params, options); + } + + /** + * cricbuzz-teams (GET /cricbuzz/teams). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teams() { + return teams(Map.of(), null); + } + + /** + * cricbuzz-video-categories (GET /cricbuzz/videos/categories). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object videoCategories(Map params) { + return videoCategories(params, null); + } + + /** + * cricbuzz-video-categories (GET /cricbuzz/videos/categories). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object videoCategories(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-video-categories", params); + return client.request("cricbuzz-video-categories", params, options); + } + + /** + * cricbuzz-video-categories (GET /cricbuzz/videos/categories). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object videoCategories() { + return videoCategories(Map.of(), null); + } + + /** + * cricbuzz-video-playlists (GET /cricbuzz/videos/playlists). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object videoPlaylists(Map params) { + return videoPlaylists(params, null); + } + + /** + * cricbuzz-video-playlists (GET /cricbuzz/videos/playlists). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object videoPlaylists(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-video-playlists", params); + return client.request("cricbuzz-video-playlists", params, options); + } + + /** + * cricbuzz-video-playlists (GET /cricbuzz/videos/playlists). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object videoPlaylists() { + return videoPlaylists(Map.of(), null); + } + + /** + * cricbuzz-wtc (GET /cricbuzz/wtc). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object wtc(Map params) { + return wtc(params, null); + } + + /** + * cricbuzz-wtc (GET /cricbuzz/wtc). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object wtc(Map params, RequestOptions options) { + OperationGroup.checkParams("cricbuzz-wtc", params); + return client.request("cricbuzz-wtc", params, options); + } + + /** + * cricbuzz-wtc (GET /cricbuzz/wtc). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object wtc() { + return wtc(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/DatasetsGroup.java b/src/main/java/net/crawlora/groups/DatasetsGroup.java index 73dad95..63b1a2d 100644 --- a/src/main/java/net/crawlora/groups/DatasetsGroup.java +++ b/src/main/java/net/crawlora/groups/DatasetsGroup.java @@ -49,6 +49,81 @@ public Object list() { return list(Map.of(), null); } + /** + * datasets-airbnb-hosts-facets (GET /datasets/airbnb-hosts/facets). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object airbnbHostsFacets(Map params) { + return airbnbHostsFacets(params, null); + } + + /** + * datasets-airbnb-hosts-facets (GET /datasets/airbnb-hosts/facets). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object airbnbHostsFacets(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-airbnb-hosts-facets", params); + return client.request("datasets-airbnb-hosts-facets", params, options); + } + + /** + * datasets-airbnb-hosts-item (GET /datasets/airbnb-hosts/items/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object airbnbHostsItem(Map params) { + return airbnbHostsItem(params, null); + } + + /** + * datasets-airbnb-hosts-item (GET /datasets/airbnb-hosts/items/{id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object airbnbHostsItem(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-airbnb-hosts-item", params); + return client.request("datasets-airbnb-hosts-item", params, options); + } + + /** + * datasets-airbnb-hosts-search (GET /datasets/airbnb-hosts/search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object airbnbHostsSearch(Map params) { + return airbnbHostsSearch(params, null); + } + + /** + * datasets-airbnb-hosts-search (GET /datasets/airbnb-hosts/search). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object airbnbHostsSearch(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-airbnb-hosts-search", params); + return client.request("datasets-airbnb-hosts-search", params, options); + } + + /** + * datasets-airbnb-hosts-search (GET /datasets/airbnb-hosts/search). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object airbnbHostsSearch() { + return airbnbHostsSearch(Map.of(), null); + } + /** * datasets-airbnb-markets-facets (GET /datasets/airbnb-markets/facets). * @@ -146,6 +221,81 @@ public Object airbnbMarketsSearch() { return airbnbMarketsSearch(Map.of(), null); } + /** + * datasets-apple-books-facets (GET /datasets/apple-books/facets). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object appleBooksFacets(Map params) { + return appleBooksFacets(params, null); + } + + /** + * datasets-apple-books-facets (GET /datasets/apple-books/facets). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object appleBooksFacets(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-apple-books-facets", params); + return client.request("datasets-apple-books-facets", params, options); + } + + /** + * datasets-apple-books-item (GET /datasets/apple-books/items/{kind}/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object appleBooksItem(Map params) { + return appleBooksItem(params, null); + } + + /** + * datasets-apple-books-item (GET /datasets/apple-books/items/{kind}/{id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object appleBooksItem(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-apple-books-item", params); + return client.request("datasets-apple-books-item", params, options); + } + + /** + * datasets-apple-books-search (GET /datasets/apple-books/search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object appleBooksSearch(Map params) { + return appleBooksSearch(params, null); + } + + /** + * datasets-apple-books-search (GET /datasets/apple-books/search). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object appleBooksSearch(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-apple-books-search", params); + return client.request("datasets-apple-books-search", params, options); + } + + /** + * datasets-apple-books-search (GET /datasets/apple-books/search). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object appleBooksSearch() { + return appleBooksSearch(Map.of(), null); + } + /** * datasets-apple-maps-places-facets (GET /datasets/apple-maps-places/facets). * @@ -318,6 +468,50 @@ public Object applePodcastsShowsSearch() { return applePodcastsShowsSearch(Map.of(), null); } + /** + * datasets-apps-charts-facets (GET /datasets/apps-charts/facets). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object appsChartsFacets(Map params) { + return appsChartsFacets(params, null); + } + + /** + * datasets-apps-charts-facets (GET /datasets/apps-charts/facets). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object appsChartsFacets(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-apps-charts-facets", params); + return client.request("datasets-apps-charts-facets", params, options); + } + + /** + * datasets-apps-charts-item (GET /datasets/apps-charts/items/{chart_uid}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object appsChartsItem(Map params) { + return appsChartsItem(params, null); + } + + /** + * datasets-apps-charts-item (GET /datasets/apps-charts/items/{chart_uid}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object appsChartsItem(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-apps-charts-item", params); + return client.request("datasets-apps-charts-item", params, options); + } + /** * datasets-apps-charts-search (GET /datasets/apps-charts/search). * @@ -349,6 +543,50 @@ public Object appsChartsSearch() { return appsChartsSearch(Map.of(), null); } + /** + * datasets-apps-reviews-facets (GET /datasets/apps-reviews/facets). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object appsReviewsFacets(Map params) { + return appsReviewsFacets(params, null); + } + + /** + * datasets-apps-reviews-facets (GET /datasets/apps-reviews/facets). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object appsReviewsFacets(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-apps-reviews-facets", params); + return client.request("datasets-apps-reviews-facets", params, options); + } + + /** + * datasets-apps-reviews-item (GET /datasets/apps-reviews/items/{review_uid}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object appsReviewsItem(Map params) { + return appsReviewsItem(params, null); + } + + /** + * datasets-apps-reviews-item (GET /datasets/apps-reviews/items/{review_uid}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object appsReviewsItem(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-apps-reviews-item", params); + return client.request("datasets-apps-reviews-item", params, options); + } + /** * datasets-apps-reviews-search (GET /datasets/apps-reviews/search). * @@ -380,6 +618,50 @@ public Object appsReviewsSearch() { return appsReviewsSearch(Map.of(), null); } + /** + * datasets-apps-facets (GET /datasets/apps/facets). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object appsFacets(Map params) { + return appsFacets(params, null); + } + + /** + * datasets-apps-facets (GET /datasets/apps/facets). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object appsFacets(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-apps-facets", params); + return client.request("datasets-apps-facets", params, options); + } + + /** + * datasets-apps-item (GET /datasets/apps/items/{app_uid}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object appsItem(Map params) { + return appsItem(params, null); + } + + /** + * datasets-apps-item (GET /datasets/apps/items/{app_uid}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object appsItem(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-apps-item", params); + return client.request("datasets-apps-item", params, options); + } + /** * datasets-apps-search (GET /datasets/apps/search). * @@ -826,6 +1108,50 @@ public Object chromeExtensionsTrending() { return chromeExtensionsTrending(Map.of(), null); } + /** + * datasets-creators-facets (GET /datasets/creators/facets). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object creatorsFacets(Map params) { + return creatorsFacets(params, null); + } + + /** + * datasets-creators-facets (GET /datasets/creators/facets). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object creatorsFacets(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-creators-facets", params); + return client.request("datasets-creators-facets", params, options); + } + + /** + * datasets-creators-item (GET /datasets/creators/items/{creator_uid}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object creatorsItem(Map params) { + return creatorsItem(params, null); + } + + /** + * datasets-creators-item (GET /datasets/creators/items/{creator_uid}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object creatorsItem(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-creators-item", params); + return client.request("datasets-creators-item", params, options); + } + /** * datasets-creators-search (GET /datasets/creators/search). * @@ -2613,6 +2939,50 @@ public Object producthuntTrendsSearch() { return producthuntTrendsSearch(Map.of(), null); } + /** + * datasets-reddit-trending-facets (GET /datasets/reddit-trending/facets). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object redditTrendingFacets(Map params) { + return redditTrendingFacets(params, null); + } + + /** + * datasets-reddit-trending-facets (GET /datasets/reddit-trending/facets). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object redditTrendingFacets(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-reddit-trending-facets", params); + return client.request("datasets-reddit-trending-facets", params, options); + } + + /** + * datasets-reddit-trending-item (GET /datasets/reddit-trending/items/{post_uid}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object redditTrendingItem(Map params) { + return redditTrendingItem(params, null); + } + + /** + * datasets-reddit-trending-item (GET /datasets/reddit-trending/items/{post_uid}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object redditTrendingItem(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-reddit-trending-item", params); + return client.request("datasets-reddit-trending-item", params, options); + } + /** * datasets-reddit-trending-search (GET /datasets/reddit-trending/search). * @@ -2913,6 +3283,50 @@ public Object starbucksStoresSearch() { return starbucksStoresSearch(Map.of(), null); } + /** + * datasets-steam-achievements-facets (GET /datasets/steam-achievements/facets). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object steamAchievementsFacets(Map params) { + return steamAchievementsFacets(params, null); + } + + /** + * datasets-steam-achievements-facets (GET /datasets/steam-achievements/facets). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object steamAchievementsFacets(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-steam-achievements-facets", params); + return client.request("datasets-steam-achievements-facets", params, options); + } + + /** + * datasets-steam-achievements-item (GET /datasets/steam-achievements/items/{app_id}/{name}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object steamAchievementsItem(Map params) { + return steamAchievementsItem(params, null); + } + + /** + * datasets-steam-achievements-item (GET /datasets/steam-achievements/items/{app_id}/{name}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object steamAchievementsItem(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-steam-achievements-item", params); + return client.request("datasets-steam-achievements-item", params, options); + } + /** * datasets-steam-achievements-search (GET /datasets/steam-achievements/search). * @@ -2944,6 +3358,50 @@ public Object steamAchievementsSearch() { return steamAchievementsSearch(Map.of(), null); } + /** + * datasets-steam-charts-facets (GET /datasets/steam-charts/facets). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object steamChartsFacets(Map params) { + return steamChartsFacets(params, null); + } + + /** + * datasets-steam-charts-facets (GET /datasets/steam-charts/facets). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object steamChartsFacets(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-steam-charts-facets", params); + return client.request("datasets-steam-charts-facets", params, options); + } + + /** + * datasets-steam-charts-item (GET /datasets/steam-charts/items/{chart_uid}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object steamChartsItem(Map params) { + return steamChartsItem(params, null); + } + + /** + * datasets-steam-charts-item (GET /datasets/steam-charts/items/{chart_uid}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object steamChartsItem(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-steam-charts-item", params); + return client.request("datasets-steam-charts-item", params, options); + } + /** * datasets-steam-charts-search (GET /datasets/steam-charts/search). * @@ -3050,6 +3508,50 @@ public Object steamGamesSearch() { return steamGamesSearch(Map.of(), null); } + /** + * datasets-steam-news-facets (GET /datasets/steam-news/facets). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object steamNewsFacets(Map params) { + return steamNewsFacets(params, null); + } + + /** + * datasets-steam-news-facets (GET /datasets/steam-news/facets). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object steamNewsFacets(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-steam-news-facets", params); + return client.request("datasets-steam-news-facets", params, options); + } + + /** + * datasets-steam-news-item (GET /datasets/steam-news/items/{app_id}/{gid}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object steamNewsItem(Map params) { + return steamNewsItem(params, null); + } + + /** + * datasets-steam-news-item (GET /datasets/steam-news/items/{app_id}/{gid}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object steamNewsItem(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-steam-news-item", params); + return client.request("datasets-steam-news-item", params, options); + } + /** * datasets-steam-news-search (GET /datasets/steam-news/search). * @@ -3081,6 +3583,50 @@ public Object steamNewsSearch() { return steamNewsSearch(Map.of(), null); } + /** + * datasets-steam-playercounts-facets (GET /datasets/steam-playercounts/facets). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object steamPlayercountsFacets(Map params) { + return steamPlayercountsFacets(params, null); + } + + /** + * datasets-steam-playercounts-facets (GET /datasets/steam-playercounts/facets). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object steamPlayercountsFacets(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-steam-playercounts-facets", params); + return client.request("datasets-steam-playercounts-facets", params, options); + } + + /** + * datasets-steam-playercounts-item (GET /datasets/steam-playercounts/items/{app_id}/{snapshot_date}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object steamPlayercountsItem(Map params) { + return steamPlayercountsItem(params, null); + } + + /** + * datasets-steam-playercounts-item (GET /datasets/steam-playercounts/items/{app_id}/{snapshot_date}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object steamPlayercountsItem(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-steam-playercounts-item", params); + return client.request("datasets-steam-playercounts-item", params, options); + } + /** * datasets-steam-playercounts-search (GET /datasets/steam-playercounts/search). * @@ -3112,6 +3658,50 @@ public Object steamPlayercountsSearch() { return steamPlayercountsSearch(Map.of(), null); } + /** + * datasets-steam-prices-facets (GET /datasets/steam-prices/facets). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object steamPricesFacets(Map params) { + return steamPricesFacets(params, null); + } + + /** + * datasets-steam-prices-facets (GET /datasets/steam-prices/facets). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object steamPricesFacets(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-steam-prices-facets", params); + return client.request("datasets-steam-prices-facets", params, options); + } + + /** + * datasets-steam-prices-item (GET /datasets/steam-prices/items/{app_id}/{snapshot_date}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object steamPricesItem(Map params) { + return steamPricesItem(params, null); + } + + /** + * datasets-steam-prices-item (GET /datasets/steam-prices/items/{app_id}/{snapshot_date}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object steamPricesItem(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-steam-prices-item", params); + return client.request("datasets-steam-prices-item", params, options); + } + /** * datasets-steam-prices-search (GET /datasets/steam-prices/search). * @@ -3143,6 +3733,50 @@ public Object steamPricesSearch() { return steamPricesSearch(Map.of(), null); } + /** + * datasets-steam-reviews-facets (GET /datasets/steam-reviews/facets). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object steamReviewsFacets(Map params) { + return steamReviewsFacets(params, null); + } + + /** + * datasets-steam-reviews-facets (GET /datasets/steam-reviews/facets). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object steamReviewsFacets(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-steam-reviews-facets", params); + return client.request("datasets-steam-reviews-facets", params, options); + } + + /** + * datasets-steam-reviews-item (GET /datasets/steam-reviews/items/{app_id}/{recommendation_id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object steamReviewsItem(Map params) { + return steamReviewsItem(params, null); + } + + /** + * datasets-steam-reviews-item (GET /datasets/steam-reviews/items/{app_id}/{recommendation_id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object steamReviewsItem(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-steam-reviews-item", params); + return client.request("datasets-steam-reviews-item", params, options); + } + /** * datasets-steam-reviews-search (GET /datasets/steam-reviews/search). * @@ -3174,6 +3808,81 @@ public Object steamReviewsSearch() { return steamReviewsSearch(Map.of(), null); } + /** + * datasets-substack-facets (GET /datasets/substack/facets). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object substackFacets(Map params) { + return substackFacets(params, null); + } + + /** + * datasets-substack-facets (GET /datasets/substack/facets). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object substackFacets(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-substack-facets", params); + return client.request("datasets-substack-facets", params, options); + } + + /** + * datasets-substack-item (GET /datasets/substack/items/{uid}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object substackItem(Map params) { + return substackItem(params, null); + } + + /** + * datasets-substack-item (GET /datasets/substack/items/{uid}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object substackItem(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-substack-item", params); + return client.request("datasets-substack-item", params, options); + } + + /** + * datasets-substack-search (GET /datasets/substack/search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object substackSearch(Map params) { + return substackSearch(params, null); + } + + /** + * datasets-substack-search (GET /datasets/substack/search). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object substackSearch(Map params, RequestOptions options) { + OperationGroup.checkParams("datasets-substack-search", params); + return client.request("datasets-substack-search", params, options); + } + + /** + * datasets-substack-search (GET /datasets/substack/search). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object substackSearch() { + return substackSearch(Map.of(), null); + } + /** * datasets-techstack-facets (GET /datasets/techstack/facets). * diff --git a/src/main/java/net/crawlora/groups/DollarTreeGroup.java b/src/main/java/net/crawlora/groups/DollarTreeGroup.java new file mode 100644 index 0000000..a7725dd --- /dev/null +++ b/src/main/java/net/crawlora/groups/DollarTreeGroup.java @@ -0,0 +1,237 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "dollarTree" operation group. + * Reach it via {@code client.dollarTree()}. + */ +public final class DollarTreeGroup { + private final CrawloraClient client; + + public DollarTreeGroup(CrawloraClient client) { + this.client = client; + } + + /** + * dollartree-blog-article (GET /dollartree/blog/article). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dollartreeBlogArticle(Map params) { + return dollartreeBlogArticle(params, null); + } + + /** + * dollartree-blog-article (GET /dollartree/blog/article). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dollartreeBlogArticle(Map params, RequestOptions options) { + OperationGroup.checkParams("dollartree-blog-article", params); + return client.request("dollartree-blog-article", params, options); + } + + /** + * dollartree-categories (GET /dollartree/categories). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dollartreeCategories(Map params) { + return dollartreeCategories(params, null); + } + + /** + * dollartree-categories (GET /dollartree/categories). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dollartreeCategories(Map params, RequestOptions options) { + OperationGroup.checkParams("dollartree-categories", params); + return client.request("dollartree-categories", params, options); + } + + /** + * dollartree-categories (GET /dollartree/categories). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dollartreeCategories() { + return dollartreeCategories(Map.of(), null); + } + + /** + * dollartree-price (GET /dollartree/price). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dollartreePrice(Map params) { + return dollartreePrice(params, null); + } + + /** + * dollartree-price (GET /dollartree/price). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dollartreePrice(Map params, RequestOptions options) { + OperationGroup.checkParams("dollartree-price", params); + return client.request("dollartree-price", params, options); + } + + /** + * dollartree-product (GET /dollartree/product). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dollartreeProduct(Map params) { + return dollartreeProduct(params, null); + } + + /** + * dollartree-product (GET /dollartree/product). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dollartreeProduct(Map params, RequestOptions options) { + OperationGroup.checkParams("dollartree-product", params); + return client.request("dollartree-product", params, options); + } + + /** + * dollartree-products (GET /dollartree/products). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dollartreeProducts(Map params) { + return dollartreeProducts(params, null); + } + + /** + * dollartree-products (GET /dollartree/products). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dollartreeProducts(Map params, RequestOptions options) { + OperationGroup.checkParams("dollartree-products", params); + return client.request("dollartree-products", params, options); + } + + /** + * dollartree-search (GET /dollartree/search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dollartreeSearch(Map params) { + return dollartreeSearch(params, null); + } + + /** + * dollartree-search (GET /dollartree/search). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dollartreeSearch(Map params, RequestOptions options) { + OperationGroup.checkParams("dollartree-search", params); + return client.request("dollartree-search", params, options); + } + + /** + * dollartree-search (GET /dollartree/search). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dollartreeSearch() { + return dollartreeSearch(Map.of(), null); + } + + /** + * dollartree-stock-status (GET /dollartree/stock-status). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dollartreeStockStatus(Map params) { + return dollartreeStockStatus(params, null); + } + + /** + * dollartree-stock-status (GET /dollartree/stock-status). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dollartreeStockStatus(Map params, RequestOptions options) { + OperationGroup.checkParams("dollartree-stock-status", params); + return client.request("dollartree-stock-status", params, options); + } + + /** + * dollartree-keyword-typeahead (GET /dollartree/typeahead/keywords). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dollartreeKeywordTypeahead(Map params) { + return dollartreeKeywordTypeahead(params, null); + } + + /** + * dollartree-keyword-typeahead (GET /dollartree/typeahead/keywords). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dollartreeKeywordTypeahead(Map params, RequestOptions options) { + OperationGroup.checkParams("dollartree-keyword-typeahead", params); + return client.request("dollartree-keyword-typeahead", params, options); + } + + /** + * dollartree-product-typeahead (GET /dollartree/typeahead/products). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dollartreeProductTypeahead(Map params) { + return dollartreeProductTypeahead(params, null); + } + + /** + * dollartree-product-typeahead (GET /dollartree/typeahead/products). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dollartreeProductTypeahead(Map params, RequestOptions options) { + OperationGroup.checkParams("dollartree-product-typeahead", params); + return client.request("dollartree-product-typeahead", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/DomainGroup.java b/src/main/java/net/crawlora/groups/DomainGroup.java new file mode 100644 index 0000000..0042442 --- /dev/null +++ b/src/main/java/net/crawlora/groups/DomainGroup.java @@ -0,0 +1,228 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "domain" operation group. + * Reach it via {@code client.domain()}. + */ +public final class DomainGroup { + private final CrawloraClient client; + + public DomainGroup(CrawloraClient client) { + this.client = client; + } + + /** + * domain-dns-record-types (GET /domain/dns/record-types). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dnsRecordTypes(Map params) { + return dnsRecordTypes(params, null); + } + + /** + * domain-dns-record-types (GET /domain/dns/record-types). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dnsRecordTypes(Map params, RequestOptions options) { + OperationGroup.checkParams("domain-dns-record-types", params); + return client.request("domain-dns-record-types", params, options); + } + + /** + * domain-dns-record-types (GET /domain/dns/record-types). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dnsRecordTypes() { + return dnsRecordTypes(Map.of(), null); + } + + /** + * domain-dns-resolve (GET /domain/dns/resolve). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dnsResolve(Map params) { + return dnsResolve(params, null); + } + + /** + * domain-dns-resolve (GET /domain/dns/resolve). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dnsResolve(Map params, RequestOptions options) { + OperationGroup.checkParams("domain-dns-resolve", params); + return client.request("domain-dns-resolve", params, options); + } + + /** + * domain-rdap-domain (GET /domain/rdap/domain/{domain}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rdapDomain(Map params) { + return rdapDomain(params, null); + } + + /** + * domain-rdap-domain (GET /domain/rdap/domain/{domain}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rdapDomain(Map params, RequestOptions options) { + OperationGroup.checkParams("domain-rdap-domain", params); + return client.request("domain-rdap-domain", params, options); + } + + /** + * domain-rdap-ip (GET /domain/rdap/ip). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rdapIp(Map params) { + return rdapIp(params, null); + } + + /** + * domain-rdap-ip (GET /domain/rdap/ip). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rdapIp(Map params, RequestOptions options) { + OperationGroup.checkParams("domain-rdap-ip", params); + return client.request("domain-rdap-ip", params, options); + } + + /** + * domain-robots (GET /domain/robots/{domain}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object robots(Map params) { + return robots(params, null); + } + + /** + * domain-robots (GET /domain/robots/{domain}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object robots(Map params, RequestOptions options) { + OperationGroup.checkParams("domain-robots", params); + return client.request("domain-robots", params, options); + } + + /** + * domain-site (GET /domain/site/{domain}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object site(Map params) { + return site(params, null); + } + + /** + * domain-site (GET /domain/site/{domain}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object site(Map params, RequestOptions options) { + OperationGroup.checkParams("domain-site", params); + return client.request("domain-site", params, options); + } + + /** + * domain-subdomains (GET /domain/subdomains/{domain}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object subdomains(Map params) { + return subdomains(params, null); + } + + /** + * domain-subdomains (GET /domain/subdomains/{domain}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object subdomains(Map params, RequestOptions options) { + OperationGroup.checkParams("domain-subdomains", params); + return client.request("domain-subdomains", params, options); + } + + /** + * domain-wayback-availability (GET /domain/wayback/availability/{domain}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object waybackAvailability(Map params) { + return waybackAvailability(params, null); + } + + /** + * domain-wayback-availability (GET /domain/wayback/availability/{domain}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object waybackAvailability(Map params, RequestOptions options) { + OperationGroup.checkParams("domain-wayback-availability", params); + return client.request("domain-wayback-availability", params, options); + } + + /** + * domain-wayback-cdx (GET /domain/wayback/cdx/{domain}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object waybackCdx(Map params) { + return waybackCdx(params, null); + } + + /** + * domain-wayback-cdx (GET /domain/wayback/cdx/{domain}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object waybackCdx(Map params, RequestOptions options) { + OperationGroup.checkParams("domain-wayback-cdx", params); + return client.request("domain-wayback-cdx", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/FaceitGroup.java b/src/main/java/net/crawlora/groups/FaceitGroup.java new file mode 100644 index 0000000..96f4810 --- /dev/null +++ b/src/main/java/net/crawlora/groups/FaceitGroup.java @@ -0,0 +1,890 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "faceit" operation group. + * Reach it via {@code client.faceit()}. + */ +public final class FaceitGroup { + private final CrawloraClient client; + + public FaceitGroup(CrawloraClient client) { + this.client = client; + } + + /** + * faceit-ban-reasons (GET /faceit/ban-reasons). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object banReasons(Map params) { + return banReasons(params, null); + } + + /** + * faceit-ban-reasons (GET /faceit/ban-reasons). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object banReasons(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-ban-reasons", params); + return client.request("faceit-ban-reasons", params, options); + } + + /** + * faceit-ban-reasons (GET /faceit/ban-reasons). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object banReasons() { + return banReasons(Map.of(), null); + } + + /** + * faceit-banlist (GET /faceit/banlist). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object banlist(Map params) { + return banlist(params, null); + } + + /** + * faceit-banlist (GET /faceit/banlist). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object banlist(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-banlist", params); + return client.request("faceit-banlist", params, options); + } + + /** + * faceit-banlist (GET /faceit/banlist). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object banlist() { + return banlist(Map.of(), null); + } + + /** + * faceit-banlist-stats (GET /faceit/banlist-stats). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object banlistStats(Map params) { + return banlistStats(params, null); + } + + /** + * faceit-banlist-stats (GET /faceit/banlist-stats). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object banlistStats(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-banlist-stats", params); + return client.request("faceit-banlist-stats", params, options); + } + + /** + * faceit-banlist-stats (GET /faceit/banlist-stats). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object banlistStats() { + return banlistStats(Map.of(), null); + } + + /** + * faceit-best-clips (GET /faceit/best-clips). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object bestClips(Map params) { + return bestClips(params, null); + } + + /** + * faceit-best-clips (GET /faceit/best-clips). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object bestClips(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-best-clips", params); + return client.request("faceit-best-clips", params, options); + } + + /** + * faceit-championship (GET /faceit/championship). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object championship(Map params) { + return championship(params, null); + } + + /** + * faceit-championship (GET /faceit/championship). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object championship(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-championship", params); + return client.request("faceit-championship", params, options); + } + + /** + * faceit-championship-bracket (GET /faceit/championship-bracket). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object championshipBracket(Map params) { + return championshipBracket(params, null); + } + + /** + * faceit-championship-bracket (GET /faceit/championship-bracket). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object championshipBracket(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-championship-bracket", params); + return client.request("faceit-championship-bracket", params, options); + } + + /** + * faceit-championship-participants (GET /faceit/championship-participants). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object championshipParticipants(Map params) { + return championshipParticipants(params, null); + } + + /** + * faceit-championship-participants (GET /faceit/championship-participants). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object championshipParticipants(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-championship-participants", params); + return client.request("faceit-championship-participants", params, options); + } + + /** + * faceit-championship-search (GET /faceit/championship-search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object championshipSearch(Map params) { + return championshipSearch(params, null); + } + + /** + * faceit-championship-search (GET /faceit/championship-search). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object championshipSearch(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-championship-search", params); + return client.request("faceit-championship-search", params, options); + } + + /** + * faceit-championship-search (GET /faceit/championship-search). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object championshipSearch() { + return championshipSearch(Map.of(), null); + } + + /** + * faceit-clip (GET /faceit/clip). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object clip(Map params) { + return clip(params, null); + } + + /** + * faceit-clip (GET /faceit/clip). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object clip(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-clip", params); + return client.request("faceit-clip", params, options); + } + + /** + * faceit-clips (GET /faceit/clips). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object clips(Map params) { + return clips(params, null); + } + + /** + * faceit-clips (GET /faceit/clips). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object clips(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-clips", params); + return client.request("faceit-clips", params, options); + } + + /** + * faceit-competition-matches (GET /faceit/competition-matches). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object competitionMatches(Map params) { + return competitionMatches(params, null); + } + + /** + * faceit-competition-matches (GET /faceit/competition-matches). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object competitionMatches(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-competition-matches", params); + return client.request("faceit-competition-matches", params, options); + } + + /** + * faceit-fpl (GET /faceit/fpl). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fpl(Map params) { + return fpl(params, null); + } + + /** + * faceit-fpl (GET /faceit/fpl). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fpl(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-fpl", params); + return client.request("faceit-fpl", params, options); + } + + /** + * faceit-fpl (GET /faceit/fpl). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fpl() { + return fpl(Map.of(), null); + } + + /** + * faceit-game-modes (GET /faceit/game-modes). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object gameModes(Map params) { + return gameModes(params, null); + } + + /** + * faceit-game-modes (GET /faceit/game-modes). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object gameModes(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-game-modes", params); + return client.request("faceit-game-modes", params, options); + } + + /** + * faceit-games (GET /faceit/games). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object games(Map params) { + return games(params, null); + } + + /** + * faceit-games (GET /faceit/games). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object games(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-games", params); + return client.request("faceit-games", params, options); + } + + /** + * faceit-games (GET /faceit/games). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object games() { + return games(Map.of(), null); + } + + /** + * faceit-hub (GET /faceit/hub). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object hub(Map params) { + return hub(params, null); + } + + /** + * faceit-hub (GET /faceit/hub). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object hub(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-hub", params); + return client.request("faceit-hub", params, options); + } + + /** + * faceit-hub-categories (GET /faceit/hub-categories). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object hubCategories(Map params) { + return hubCategories(params, null); + } + + /** + * faceit-hub-categories (GET /faceit/hub-categories). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object hubCategories(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-hub-categories", params); + return client.request("faceit-hub-categories", params, options); + } + + /** + * faceit-hub-categories (GET /faceit/hub-categories). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object hubCategories() { + return hubCategories(Map.of(), null); + } + + /** + * faceit-hub-memberships (GET /faceit/hub-memberships). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object hubMemberships(Map params) { + return hubMemberships(params, null); + } + + /** + * faceit-hub-memberships (GET /faceit/hub-memberships). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object hubMemberships(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-hub-memberships", params); + return client.request("faceit-hub-memberships", params, options); + } + + /** + * faceit-hubs (GET /faceit/hubs). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object hubs(Map params) { + return hubs(params, null); + } + + /** + * faceit-hubs (GET /faceit/hubs). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object hubs(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-hubs", params); + return client.request("faceit-hubs", params, options); + } + + /** + * faceit-hubs-detailed (GET /faceit/hubs-detailed). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object hubsDetailed(Map params) { + return hubsDetailed(params, null); + } + + /** + * faceit-hubs-detailed (GET /faceit/hubs-detailed). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object hubsDetailed(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-hubs-detailed", params); + return client.request("faceit-hubs-detailed", params, options); + } + + /** + * faceit-leaderboard (GET /faceit/leaderboard). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object leaderboard(Map params) { + return leaderboard(params, null); + } + + /** + * faceit-leaderboard (GET /faceit/leaderboard). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object leaderboard(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-leaderboard", params); + return client.request("faceit-leaderboard", params, options); + } + + /** + * faceit-leaderboard-detail (GET /faceit/leaderboard-detail). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object leaderboardDetail(Map params) { + return leaderboardDetail(params, null); + } + + /** + * faceit-leaderboard-detail (GET /faceit/leaderboard-detail). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object leaderboardDetail(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-leaderboard-detail", params); + return client.request("faceit-leaderboard-detail", params, options); + } + + /** + * faceit-leaderboard-statuses (GET /faceit/leaderboard-statuses). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object leaderboardStatuses(Map params) { + return leaderboardStatuses(params, null); + } + + /** + * faceit-leaderboard-statuses (GET /faceit/leaderboard-statuses). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object leaderboardStatuses(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-leaderboard-statuses", params); + return client.request("faceit-leaderboard-statuses", params, options); + } + + /** + * faceit-leaderboard-statuses (GET /faceit/leaderboard-statuses). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object leaderboardStatuses() { + return leaderboardStatuses(Map.of(), null); + } + + /** + * faceit-maps (GET /faceit/maps). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maps(Map params) { + return maps(params, null); + } + + /** + * faceit-maps (GET /faceit/maps). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maps(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-maps", params); + return client.request("faceit-maps", params, options); + } + + /** + * faceit-match-clips (GET /faceit/match-clips). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object matchClips(Map params) { + return matchClips(params, null); + } + + /** + * faceit-match-clips (GET /faceit/match-clips). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object matchClips(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-match-clips", params); + return client.request("faceit-match-clips", params, options); + } + + /** + * faceit-organizer (GET /faceit/organizer). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object organizer(Map params) { + return organizer(params, null); + } + + /** + * faceit-organizer (GET /faceit/organizer). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object organizer(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-organizer", params); + return client.request("faceit-organizer", params, options); + } + + /** + * faceit-player (GET /faceit/player). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object player(Map params) { + return player(params, null); + } + + /** + * faceit-player (GET /faceit/player). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object player(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-player", params); + return client.request("faceit-player", params, options); + } + + /** + * faceit-player (GET /faceit/player). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object player() { + return player(Map.of(), null); + } + + /** + * faceit-player-rank (GET /faceit/player-rank). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object playerRank(Map params) { + return playerRank(params, null); + } + + /** + * faceit-player-rank (GET /faceit/player-rank). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object playerRank(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-player-rank", params); + return client.request("faceit-player-rank", params, options); + } + + /** + * faceit-regions (GET /faceit/regions). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object regions(Map params) { + return regions(params, null); + } + + /** + * faceit-regions (GET /faceit/regions). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object regions(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-regions", params); + return client.request("faceit-regions", params, options); + } + + /** + * faceit-regions (GET /faceit/regions). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object regions() { + return regions(Map.of(), null); + } + + /** + * faceit-rule (GET /faceit/rule). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rule(Map params) { + return rule(params, null); + } + + /** + * faceit-rule (GET /faceit/rule). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rule(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-rule", params); + return client.request("faceit-rule", params, options); + } + + /** + * faceit-rules (GET /faceit/rules). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rules(Map params) { + return rules(params, null); + } + + /** + * faceit-rules (GET /faceit/rules). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rules(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-rules", params); + return client.request("faceit-rules", params, options); + } + + /** + * faceit-rules (GET /faceit/rules). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rules() { + return rules(Map.of(), null); + } + + /** + * faceit-skill-levels (GET /faceit/skill-levels). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object skillLevels(Map params) { + return skillLevels(params, null); + } + + /** + * faceit-skill-levels (GET /faceit/skill-levels). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object skillLevels(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-skill-levels", params); + return client.request("faceit-skill-levels", params, options); + } + + /** + * faceit-standings (GET /faceit/standings). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object standings(Map params) { + return standings(params, null); + } + + /** + * faceit-standings (GET /faceit/standings). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object standings(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-standings", params); + return client.request("faceit-standings", params, options); + } + + /** + * faceit-team (GET /faceit/team). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object team(Map params) { + return team(params, null); + } + + /** + * faceit-team (GET /faceit/team). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object team(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-team", params); + return client.request("faceit-team", params, options); + } + + /** + * faceit-tournaments-past (GET /faceit/tournaments-past). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object tournamentsPast(Map params) { + return tournamentsPast(params, null); + } + + /** + * faceit-tournaments-past (GET /faceit/tournaments-past). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object tournamentsPast(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-tournaments-past", params); + return client.request("faceit-tournaments-past", params, options); + } + + /** + * faceit-user-skills (GET /faceit/user-skills). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object userSkills(Map params) { + return userSkills(params, null); + } + + /** + * faceit-user-skills (GET /faceit/user-skills). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object userSkills(Map params, RequestOptions options) { + OperationGroup.checkParams("faceit-user-skills", params); + return client.request("faceit-user-skills", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/FanaticsCollectGroup.java b/src/main/java/net/crawlora/groups/FanaticsCollectGroup.java index 339ebef..e88eada 100644 --- a/src/main/java/net/crawlora/groups/FanaticsCollectGroup.java +++ b/src/main/java/net/crawlora/groups/FanaticsCollectGroup.java @@ -80,6 +80,59 @@ public Object fanaticscollectCategories() { return fanaticscollectCategories(Map.of(), null); } + /** + * fanaticscollect-instant-pack-release (GET /fanaticscollect/instant-packs/release). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fanaticscollectInstantPackRelease(Map params) { + return fanaticscollectInstantPackRelease(params, null); + } + + /** + * fanaticscollect-instant-pack-release (GET /fanaticscollect/instant-packs/release). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fanaticscollectInstantPackRelease(Map params, RequestOptions options) { + OperationGroup.checkParams("fanaticscollect-instant-pack-release", params); + return client.request("fanaticscollect-instant-pack-release", params, options); + } + + /** + * fanaticscollect-instant-pack-releases (GET /fanaticscollect/instant-packs/releases). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fanaticscollectInstantPackReleases(Map params) { + return fanaticscollectInstantPackReleases(params, null); + } + + /** + * fanaticscollect-instant-pack-releases (GET /fanaticscollect/instant-packs/releases). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fanaticscollectInstantPackReleases(Map params, RequestOptions options) { + OperationGroup.checkParams("fanaticscollect-instant-pack-releases", params); + return client.request("fanaticscollect-instant-pack-releases", params, options); + } + + /** + * fanaticscollect-instant-pack-releases (GET /fanaticscollect/instant-packs/releases). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fanaticscollectInstantPackReleases() { + return fanaticscollectInstantPackReleases(Map.of(), null); + } + /** * fanaticscollect-instant-rips-categories (GET /fanaticscollect/instant-rips/categories). * @@ -111,6 +164,112 @@ public Object fanaticscollectInstantRipsCategories() { return fanaticscollectInstantRipsCategories(Map.of(), null); } + /** + * fanaticscollect-instant-rips-pack-categories (GET /fanaticscollect/instant-rips/pack-categories). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fanaticscollectInstantRipsPackCategories(Map params) { + return fanaticscollectInstantRipsPackCategories(params, null); + } + + /** + * fanaticscollect-instant-rips-pack-categories (GET /fanaticscollect/instant-rips/pack-categories). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fanaticscollectInstantRipsPackCategories(Map params, RequestOptions options) { + OperationGroup.checkParams("fanaticscollect-instant-rips-pack-categories", params); + return client.request("fanaticscollect-instant-rips-pack-categories", params, options); + } + + /** + * fanaticscollect-instant-rips-pack-categories (GET /fanaticscollect/instant-rips/pack-categories). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fanaticscollectInstantRipsPackCategories() { + return fanaticscollectInstantRipsPackCategories(Map.of(), null); + } + + /** + * fanaticscollect-instant-rips-pack-checklist (GET /fanaticscollect/instant-rips/pack-checklist). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fanaticscollectInstantRipsPackChecklist(Map params) { + return fanaticscollectInstantRipsPackChecklist(params, null); + } + + /** + * fanaticscollect-instant-rips-pack-checklist (GET /fanaticscollect/instant-rips/pack-checklist). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fanaticscollectInstantRipsPackChecklist(Map params, RequestOptions options) { + OperationGroup.checkParams("fanaticscollect-instant-rips-pack-checklist", params); + return client.request("fanaticscollect-instant-rips-pack-checklist", params, options); + } + + /** + * fanaticscollect-instant-rips-packs (GET /fanaticscollect/instant-rips/packs). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fanaticscollectInstantRipsPacks(Map params) { + return fanaticscollectInstantRipsPacks(params, null); + } + + /** + * fanaticscollect-instant-rips-packs (GET /fanaticscollect/instant-rips/packs). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fanaticscollectInstantRipsPacks(Map params, RequestOptions options) { + OperationGroup.checkParams("fanaticscollect-instant-rips-packs", params); + return client.request("fanaticscollect-instant-rips-packs", params, options); + } + + /** + * fanaticscollect-recently-ripped (GET /fanaticscollect/instant-rips/recently-ripped). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fanaticscollectRecentlyRipped(Map params) { + return fanaticscollectRecentlyRipped(params, null); + } + + /** + * fanaticscollect-recently-ripped (GET /fanaticscollect/instant-rips/recently-ripped). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fanaticscollectRecentlyRipped(Map params, RequestOptions options) { + OperationGroup.checkParams("fanaticscollect-recently-ripped", params); + return client.request("fanaticscollect-recently-ripped", params, options); + } + + /** + * fanaticscollect-recently-ripped (GET /fanaticscollect/instant-rips/recently-ripped). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fanaticscollectRecentlyRipped() { + return fanaticscollectRecentlyRipped(Map.of(), null); + } + /** * fanaticscollect-listing (GET /fanaticscollect/listing/{id}). * @@ -133,6 +292,68 @@ public Object fanaticscollectListing(Map params, RequestOptions return client.request("fanaticscollect-listing", params, options); } + /** + * fanaticscollect-newsroom (GET /fanaticscollect/newsroom). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fanaticscollectNewsroom(Map params) { + return fanaticscollectNewsroom(params, null); + } + + /** + * fanaticscollect-newsroom (GET /fanaticscollect/newsroom). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fanaticscollectNewsroom(Map params, RequestOptions options) { + OperationGroup.checkParams("fanaticscollect-newsroom", params); + return client.request("fanaticscollect-newsroom", params, options); + } + + /** + * fanaticscollect-newsroom (GET /fanaticscollect/newsroom). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fanaticscollectNewsroom() { + return fanaticscollectNewsroom(Map.of(), null); + } + + /** + * fanaticscollect-newsroom-filters (GET /fanaticscollect/newsroom/filters). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fanaticscollectNewsroomFilters(Map params) { + return fanaticscollectNewsroomFilters(params, null); + } + + /** + * fanaticscollect-newsroom-filters (GET /fanaticscollect/newsroom/filters). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fanaticscollectNewsroomFilters(Map params, RequestOptions options) { + OperationGroup.checkParams("fanaticscollect-newsroom-filters", params); + return client.request("fanaticscollect-newsroom-filters", params, options); + } + + /** + * fanaticscollect-newsroom-filters (GET /fanaticscollect/newsroom/filters). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fanaticscollectNewsroomFilters() { + return fanaticscollectNewsroomFilters(Map.of(), null); + } + /** * fanaticscollect-search (GET /fanaticscollect/search). * diff --git a/src/main/java/net/crawlora/groups/FeverGroup.java b/src/main/java/net/crawlora/groups/FeverGroup.java new file mode 100644 index 0000000..57e1859 --- /dev/null +++ b/src/main/java/net/crawlora/groups/FeverGroup.java @@ -0,0 +1,162 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "fever" operation group. + * Reach it via {@code client.fever()}. + */ +public final class FeverGroup { + private final CrawloraClient client; + + public FeverGroup(CrawloraClient client) { + this.client = client; + } + + /** + * fever-cities (GET /fever/cities). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object cities(Map params) { + return cities(params, null); + } + + /** + * fever-cities (GET /fever/cities). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object cities(Map params, RequestOptions options) { + OperationGroup.checkParams("fever-cities", params); + return client.request("fever-cities", params, options); + } + + /** + * fever-feed (GET /fever/feed). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object feed(Map params) { + return feed(params, null); + } + + /** + * fever-feed (GET /fever/feed). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object feed(Map params, RequestOptions options) { + OperationGroup.checkParams("fever-feed", params); + return client.request("fever-feed", params, options); + } + + /** + * fever-filters (GET /fever/filters). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object filters(Map params) { + return filters(params, null); + } + + /** + * fever-filters (GET /fever/filters). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object filters(Map params, RequestOptions options) { + OperationGroup.checkParams("fever-filters", params); + return client.request("fever-filters", params, options); + } + + /** + * fever-plan (GET /fever/plan). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object plan(Map params) { + return plan(params, null); + } + + /** + * fever-plan (GET /fever/plan). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object plan(Map params, RequestOptions options) { + OperationGroup.checkParams("fever-plan", params); + return client.request("fever-plan", params, options); + } + + /** + * fever-plans (GET /fever/plans). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object plans(Map params) { + return plans(params, null); + } + + /** + * fever-plans (GET /fever/plans). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object plans(Map params, RequestOptions options) { + OperationGroup.checkParams("fever-plans", params); + return client.request("fever-plans", params, options); + } + + /** + * fever-top-cities (GET /fever/top-cities). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object topCities(Map params) { + return topCities(params, null); + } + + /** + * fever-top-cities (GET /fever/top-cities). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object topCities(Map params, RequestOptions options) { + OperationGroup.checkParams("fever-top-cities", params); + return client.request("fever-top-cities", params, options); + } + + /** + * fever-top-cities (GET /fever/top-cities). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object topCities() { + return topCities(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/FlashscoreGroup.java b/src/main/java/net/crawlora/groups/FlashscoreGroup.java index 5146331..f3587c9 100644 --- a/src/main/java/net/crawlora/groups/FlashscoreGroup.java +++ b/src/main/java/net/crawlora/groups/FlashscoreGroup.java @@ -137,6 +137,28 @@ public Object matchBoxScore(Map params, RequestOptions options) return client.request("flashscore-match-box-score", params, options); } + /** + * flashscore-match-commentary (GET /flashscore/match-commentary). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object matchCommentary(Map params) { + return matchCommentary(params, null); + } + + /** + * flashscore-match-commentary (GET /flashscore/match-commentary). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object matchCommentary(Map params, RequestOptions options) { + OperationGroup.checkParams("flashscore-match-commentary", params); + return client.request("flashscore-match-commentary", params, options); + } + /** * flashscore-match-darts (GET /flashscore/match-darts). * @@ -203,6 +225,28 @@ public Object matchHighlights(Map params, RequestOptions options return client.request("flashscore-match-highlights", params, options); } + /** + * flashscore-match-incidents (GET /flashscore/match-incidents). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object matchIncidents(Map params) { + return matchIncidents(params, null); + } + + /** + * flashscore-match-incidents (GET /flashscore/match-incidents). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object matchIncidents(Map params, RequestOptions options) { + OperationGroup.checkParams("flashscore-match-incidents", params); + return client.request("flashscore-match-incidents", params, options); + } + /** * flashscore-match-info (GET /flashscore/match-info). * @@ -401,6 +445,28 @@ public Object matchPredictedLineups(Map params, RequestOptions o return client.request("flashscore-match-predicted-lineups", params, options); } + /** + * flashscore-match-prematch-scorers (GET /flashscore/match-prematch-scorers). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object matchPrematchScorers(Map params) { + return matchPrematchScorers(params, null); + } + + /** + * flashscore-match-prematch-scorers (GET /flashscore/match-prematch-scorers). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object matchPrematchScorers(Map params, RequestOptions options) { + OperationGroup.checkParams("flashscore-match-prematch-scorers", params); + return client.request("flashscore-match-prematch-scorers", params, options); + } + /** * flashscore-match-report (GET /flashscore/match-report). * @@ -1177,6 +1243,28 @@ public Object tournamentArchiveSeasons(Map params, RequestOption return client.request("flashscore-tournament-archive-seasons", params, options); } + /** + * flashscore-tournament-draw (GET /flashscore/tournament-draw). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object tournamentDraw(Map params) { + return tournamentDraw(params, null); + } + + /** + * flashscore-tournament-draw (GET /flashscore/tournament-draw). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object tournamentDraw(Map params, RequestOptions options) { + OperationGroup.checkParams("flashscore-tournament-draw", params); + return client.request("flashscore-tournament-draw", params, options); + } + /** * flashscore-tournament-events (GET /flashscore/tournament-events). * diff --git a/src/main/java/net/crawlora/groups/FlickReelsGroup.java b/src/main/java/net/crawlora/groups/FlickReelsGroup.java new file mode 100644 index 0000000..0c16802 --- /dev/null +++ b/src/main/java/net/crawlora/groups/FlickReelsGroup.java @@ -0,0 +1,149 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "flickReels" operation group. + * Reach it via {@code client.flickReels()}. + */ +public final class FlickReelsGroup { + private final CrawloraClient client; + + public FlickReelsGroup(CrawloraClient client) { + this.client = client; + } + + /** + * flickreels-classify (GET /flickreels/classify). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object flickreelsClassify(Map params) { + return flickreelsClassify(params, null); + } + + /** + * flickreels-classify (GET /flickreels/classify). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object flickreelsClassify(Map params, RequestOptions options) { + OperationGroup.checkParams("flickreels-classify", params); + return client.request("flickreels-classify", params, options); + } + + /** + * flickreels-genres (GET /flickreels/genres). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object flickreelsGenres(Map params) { + return flickreelsGenres(params, null); + } + + /** + * flickreels-genres (GET /flickreels/genres). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object flickreelsGenres(Map params, RequestOptions options) { + OperationGroup.checkParams("flickreels-genres", params); + return client.request("flickreels-genres", params, options); + } + + /** + * flickreels-genres (GET /flickreels/genres). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object flickreelsGenres() { + return flickreelsGenres(Map.of(), null); + } + + /** + * flickreels-home (GET /flickreels/home). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object flickreelsHome(Map params) { + return flickreelsHome(params, null); + } + + /** + * flickreels-home (GET /flickreels/home). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object flickreelsHome(Map params, RequestOptions options) { + OperationGroup.checkParams("flickreels-home", params); + return client.request("flickreels-home", params, options); + } + + /** + * flickreels-home (GET /flickreels/home). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object flickreelsHome() { + return flickreelsHome(Map.of(), null); + } + + /** + * flickreels-movie (GET /flickreels/movie). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object flickreelsMovie(Map params) { + return flickreelsMovie(params, null); + } + + /** + * flickreels-movie (GET /flickreels/movie). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object flickreelsMovie(Map params, RequestOptions options) { + OperationGroup.checkParams("flickreels-movie", params); + return client.request("flickreels-movie", params, options); + } + + /** + * flickreels-shelf (GET /flickreels/shelf). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object flickreelsShelf(Map params) { + return flickreelsShelf(params, null); + } + + /** + * flickreels-shelf (GET /flickreels/shelf). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object flickreelsShelf(Map params, RequestOptions options) { + OperationGroup.checkParams("flickreels-shelf", params); + return client.request("flickreels-shelf", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/Formula1Group.java b/src/main/java/net/crawlora/groups/Formula1Group.java new file mode 100644 index 0000000..ee86fd6 --- /dev/null +++ b/src/main/java/net/crawlora/groups/Formula1Group.java @@ -0,0 +1,754 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "formula1" operation group. + * Reach it via {@code client.formula1()}. + */ +public final class Formula1Group { + private final CrawloraClient client; + + public Formula1Group(CrawloraClient client) { + this.client = client; + } + + /** + * formula1-driver (GET /formula1/driver). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object driver(Map params) { + return driver(params, null); + } + + /** + * formula1-driver (GET /formula1/driver). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object driver(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-driver", params); + return client.request("formula1-driver", params, options); + } + + /** + * formula1-driver-grid (GET /formula1/driver-grid). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object driverGrid(Map params) { + return driverGrid(params, null); + } + + /** + * formula1-driver-grid (GET /formula1/driver-grid). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object driverGrid(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-driver-grid", params); + return client.request("formula1-driver-grid", params, options); + } + + /** + * formula1-driver-grid (GET /formula1/driver-grid). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object driverGrid() { + return driverGrid(Map.of(), null); + } + + /** + * formula1-driver-season-results (GET /formula1/driver-season-results). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object driverSeasonResults(Map params) { + return driverSeasonResults(params, null); + } + + /** + * formula1-driver-season-results (GET /formula1/driver-season-results). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object driverSeasonResults(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-driver-season-results", params); + return client.request("formula1-driver-season-results", params, options); + } + + /** + * formula1-driver-standings (GET /formula1/driver-standings). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object driverStandings(Map params) { + return driverStandings(params, null); + } + + /** + * formula1-driver-standings (GET /formula1/driver-standings). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object driverStandings(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-driver-standings", params); + return client.request("formula1-driver-standings", params, options); + } + + /** + * formula1-driver-standings (GET /formula1/driver-standings). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object driverStandings() { + return driverStandings(Map.of(), null); + } + + /** + * formula1-filters (GET /formula1/filters). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object filters(Map params) { + return filters(params, null); + } + + /** + * formula1-filters (GET /formula1/filters). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object filters(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-filters", params); + return client.request("formula1-filters", params, options); + } + + /** + * formula1-filters (GET /formula1/filters). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object filters() { + return filters(Map.of(), null); + } + + /** + * formula1-json-awards (GET /formula1/json/awards). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonAwards(Map params) { + return jsonAwards(params, null); + } + + /** + * formula1-json-awards (GET /formula1/json/awards). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonAwards(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-json-awards", params); + return client.request("formula1-json-awards", params, options); + } + + /** + * formula1-json-constructors (GET /formula1/json/constructors). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonConstructors(Map params) { + return jsonConstructors(params, null); + } + + /** + * formula1-json-constructors (GET /formula1/json/constructors). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonConstructors(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-json-constructors", params); + return client.request("formula1-json-constructors", params, options); + } + + /** + * formula1-json-driver-assembly (GET /formula1/json/driver-assembly). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonDriverAssembly(Map params) { + return jsonDriverAssembly(params, null); + } + + /** + * formula1-json-driver-assembly (GET /formula1/json/driver-assembly). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonDriverAssembly(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-json-driver-assembly", params); + return client.request("formula1-json-driver-assembly", params, options); + } + + /** + * formula1-json-driver-assembly (GET /formula1/json/driver-assembly). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonDriverAssembly() { + return jsonDriverAssembly(Map.of(), null); + } + + /** + * formula1-json-drivers (GET /formula1/json/drivers). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonDrivers(Map params) { + return jsonDrivers(params, null); + } + + /** + * formula1-json-drivers (GET /formula1/json/drivers). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonDrivers(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-json-drivers", params); + return client.request("formula1-json-drivers", params, options); + } + + /** + * formula1-json-editorial (GET /formula1/json/editorial). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonEditorial(Map params) { + return jsonEditorial(params, null); + } + + /** + * formula1-json-editorial (GET /formula1/json/editorial). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonEditorial(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-json-editorial", params); + return client.request("formula1-json-editorial", params, options); + } + + /** + * formula1-json-event-tracker (GET /formula1/json/event-tracker). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonEventTracker(Map params) { + return jsonEventTracker(params, null); + } + + /** + * formula1-json-event-tracker (GET /formula1/json/event-tracker). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonEventTracker(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-json-event-tracker", params); + return client.request("formula1-json-event-tracker", params, options); + } + + /** + * formula1-json-event-tracker (GET /formula1/json/event-tracker). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonEventTracker() { + return jsonEventTracker(Map.of(), null); + } + + /** + * formula1-json-meeting-datasets (GET /formula1/json/meeting-datasets). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonMeetingDatasets(Map params) { + return jsonMeetingDatasets(params, null); + } + + /** + * formula1-json-meeting-datasets (GET /formula1/json/meeting-datasets). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonMeetingDatasets(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-json-meeting-datasets", params); + return client.request("formula1-json-meeting-datasets", params, options); + } + + /** + * formula1-json-meetings (GET /formula1/json/meetings). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonMeetings(Map params) { + return jsonMeetings(params, null); + } + + /** + * formula1-json-meetings (GET /formula1/json/meetings). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonMeetings(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-json-meetings", params); + return client.request("formula1-json-meetings", params, options); + } + + /** + * formula1-json-race-assembly (GET /formula1/json/race-assembly). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonRaceAssembly(Map params) { + return jsonRaceAssembly(params, null); + } + + /** + * formula1-json-race-assembly (GET /formula1/json/race-assembly). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonRaceAssembly(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-json-race-assembly", params); + return client.request("formula1-json-race-assembly", params, options); + } + + /** + * formula1-json-race-assembly (GET /formula1/json/race-assembly). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonRaceAssembly() { + return jsonRaceAssembly(Map.of(), null); + } + + /** + * formula1-json-results (GET /formula1/json/results). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonResults(Map params) { + return jsonResults(params, null); + } + + /** + * formula1-json-results (GET /formula1/json/results). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonResults(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-json-results", params); + return client.request("formula1-json-results", params, options); + } + + /** + * formula1-json-season-award (GET /formula1/json/season-award). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonSeasonAward(Map params) { + return jsonSeasonAward(params, null); + } + + /** + * formula1-json-season-award (GET /formula1/json/season-award). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonSeasonAward(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-json-season-award", params); + return client.request("formula1-json-season-award", params, options); + } + + /** + * formula1-json-team-assembly (GET /formula1/json/team-assembly). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonTeamAssembly(Map params) { + return jsonTeamAssembly(params, null); + } + + /** + * formula1-json-team-assembly (GET /formula1/json/team-assembly). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonTeamAssembly(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-json-team-assembly", params); + return client.request("formula1-json-team-assembly", params, options); + } + + /** + * formula1-json-team-assembly (GET /formula1/json/team-assembly). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object jsonTeamAssembly() { + return jsonTeamAssembly(Map.of(), null); + } + + /** + * formula1-meetings (GET /formula1/meetings). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object meetings(Map params) { + return meetings(params, null); + } + + /** + * formula1-meetings (GET /formula1/meetings). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object meetings(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-meetings", params); + return client.request("formula1-meetings", params, options); + } + + /** + * formula1-meetings (GET /formula1/meetings). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object meetings() { + return meetings(Map.of(), null); + } + + /** + * formula1-race-calendar (GET /formula1/race-calendar). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object raceCalendar(Map params) { + return raceCalendar(params, null); + } + + /** + * formula1-race-calendar (GET /formula1/race-calendar). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object raceCalendar(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-race-calendar", params); + return client.request("formula1-race-calendar", params, options); + } + + /** + * formula1-race-calendar (GET /formula1/race-calendar). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object raceCalendar() { + return raceCalendar(Map.of(), null); + } + + /** + * formula1-race-hub (GET /formula1/race-hub). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object raceHub(Map params) { + return raceHub(params, null); + } + + /** + * formula1-race-hub (GET /formula1/race-hub). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object raceHub(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-race-hub", params); + return client.request("formula1-race-hub", params, options); + } + + /** + * formula1-season-awards (GET /formula1/season-awards). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object seasonAwards(Map params) { + return seasonAwards(params, null); + } + + /** + * formula1-season-awards (GET /formula1/season-awards). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object seasonAwards(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-season-awards", params); + return client.request("formula1-season-awards", params, options); + } + + /** + * formula1-season-results (GET /formula1/season-results). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object seasonResults(Map params) { + return seasonResults(params, null); + } + + /** + * formula1-season-results (GET /formula1/season-results). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object seasonResults(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-season-results", params); + return client.request("formula1-season-results", params, options); + } + + /** + * formula1-season-results (GET /formula1/season-results). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object seasonResults() { + return seasonResults(Map.of(), null); + } + + /** + * formula1-seasons (GET /formula1/seasons). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object seasons(Map params) { + return seasons(params, null); + } + + /** + * formula1-seasons (GET /formula1/seasons). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object seasons(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-seasons", params); + return client.request("formula1-seasons", params, options); + } + + /** + * formula1-seasons (GET /formula1/seasons). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object seasons() { + return seasons(Map.of(), null); + } + + /** + * formula1-session-results (GET /formula1/session-results). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sessionResults(Map params) { + return sessionResults(params, null); + } + + /** + * formula1-session-results (GET /formula1/session-results). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sessionResults(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-session-results", params); + return client.request("formula1-session-results", params, options); + } + + /** + * formula1-team (GET /formula1/team). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object team(Map params) { + return team(params, null); + } + + /** + * formula1-team (GET /formula1/team). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object team(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-team", params); + return client.request("formula1-team", params, options); + } + + /** + * formula1-team-grid (GET /formula1/team-grid). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teamGrid(Map params) { + return teamGrid(params, null); + } + + /** + * formula1-team-grid (GET /formula1/team-grid). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teamGrid(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-team-grid", params); + return client.request("formula1-team-grid", params, options); + } + + /** + * formula1-team-grid (GET /formula1/team-grid). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teamGrid() { + return teamGrid(Map.of(), null); + } + + /** + * formula1-team-season-results (GET /formula1/team-season-results). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teamSeasonResults(Map params) { + return teamSeasonResults(params, null); + } + + /** + * formula1-team-season-results (GET /formula1/team-season-results). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teamSeasonResults(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-team-season-results", params); + return client.request("formula1-team-season-results", params, options); + } + + /** + * formula1-team-standings (GET /formula1/team-standings). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teamStandings(Map params) { + return teamStandings(params, null); + } + + /** + * formula1-team-standings (GET /formula1/team-standings). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teamStandings(Map params, RequestOptions options) { + OperationGroup.checkParams("formula1-team-standings", params); + return client.request("formula1-team-standings", params, options); + } + + /** + * formula1-team-standings (GET /formula1/team-standings). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teamStandings() { + return teamStandings(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/FreshaGroup.java b/src/main/java/net/crawlora/groups/FreshaGroup.java new file mode 100644 index 0000000..03c2054 --- /dev/null +++ b/src/main/java/net/crawlora/groups/FreshaGroup.java @@ -0,0 +1,127 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "fresha" operation group. + * Reach it via {@code client.fresha()}. + */ +public final class FreshaGroup { + private final CrawloraClient client; + + public FreshaGroup(CrawloraClient client) { + this.client = client; + } + + /** + * fresha-landing-venues (GET /fresha/landing-venues). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object landingVenues(Map params) { + return landingVenues(params, null); + } + + /** + * fresha-landing-venues (GET /fresha/landing-venues). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object landingVenues(Map params, RequestOptions options) { + OperationGroup.checkParams("fresha-landing-venues", params); + return client.request("fresha-landing-venues", params, options); + } + + /** + * fresha-search-venues (GET /fresha/search-venues). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object searchVenues(Map params) { + return searchVenues(params, null); + } + + /** + * fresha-search-venues (GET /fresha/search-venues). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object searchVenues(Map params, RequestOptions options) { + OperationGroup.checkParams("fresha-search-venues", params); + return client.request("fresha-search-venues", params, options); + } + + /** + * fresha-search-venues (GET /fresha/search-venues). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object searchVenues() { + return searchVenues(Map.of(), null); + } + + /** + * fresha-taxonomy (GET /fresha/taxonomy). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object taxonomy(Map params) { + return taxonomy(params, null); + } + + /** + * fresha-taxonomy (GET /fresha/taxonomy). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object taxonomy(Map params, RequestOptions options) { + OperationGroup.checkParams("fresha-taxonomy", params); + return client.request("fresha-taxonomy", params, options); + } + + /** + * fresha-taxonomy (GET /fresha/taxonomy). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object taxonomy() { + return taxonomy(Map.of(), null); + } + + /** + * fresha-venue (GET /fresha/venue). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object venue(Map params) { + return venue(params, null); + } + + /** + * fresha-venue (GET /fresha/venue). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object venue(Map params, RequestOptions options) { + OperationGroup.checkParams("fresha-venue", params); + return client.request("fresha-venue", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/FutGgGroup.java b/src/main/java/net/crawlora/groups/FutGgGroup.java new file mode 100644 index 0000000..4304743 --- /dev/null +++ b/src/main/java/net/crawlora/groups/FutGgGroup.java @@ -0,0 +1,600 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "futGg" operation group. + * Reach it via {@code client.futGg()}. + */ +public final class FutGgGroup { + private final CrawloraClient client; + + public FutGgGroup(CrawloraClient client) { + this.client = client; + } + + /** + * futgg-fc27-catalog (GET /futgg/fc27/catalog). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27Catalog(Map params) { + return futggFc27Catalog(params, null); + } + + /** + * futgg-fc27-catalog (GET /futgg/fc27/catalog). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27Catalog(Map params, RequestOptions options) { + OperationGroup.checkParams("futgg-fc27-catalog", params); + return client.request("futgg-fc27-catalog", params, options); + } + + /** + * futgg-fc27-catalog (GET /futgg/fc27/catalog). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27Catalog() { + return futggFc27Catalog(Map.of(), null); + } + + /** + * futgg-fc27-definitions (GET /futgg/fc27/definitions). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27Definitions(Map params) { + return futggFc27Definitions(params, null); + } + + /** + * futgg-fc27-definitions (GET /futgg/fc27/definitions). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27Definitions(Map params, RequestOptions options) { + OperationGroup.checkParams("futgg-fc27-definitions", params); + return client.request("futgg-fc27-definitions", params, options); + } + + /** + * futgg-fc27-evolutions (GET /futgg/fc27/evolutions). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27Evolutions(Map params) { + return futggFc27Evolutions(params, null); + } + + /** + * futgg-fc27-evolutions (GET /futgg/fc27/evolutions). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27Evolutions(Map params, RequestOptions options) { + OperationGroup.checkParams("futgg-fc27-evolutions", params); + return client.request("futgg-fc27-evolutions", params, options); + } + + /** + * futgg-fc27-evolutions (GET /futgg/fc27/evolutions). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27Evolutions() { + return futggFc27Evolutions(Map.of(), null); + } + + /** + * futgg-fc27-evolution (GET /futgg/fc27/evolutions/{slug}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27Evolution(Map params) { + return futggFc27Evolution(params, null); + } + + /** + * futgg-fc27-evolution (GET /futgg/fc27/evolutions/{slug}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27Evolution(Map params, RequestOptions options) { + OperationGroup.checkParams("futgg-fc27-evolution", params); + return client.request("futgg-fc27-evolution", params, options); + } + + /** + * futgg-fc27-gg-rating-ranks (GET /futgg/fc27/gg-rating-ranks). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27GgRatingRanks(Map params) { + return futggFc27GgRatingRanks(params, null); + } + + /** + * futgg-fc27-gg-rating-ranks (GET /futgg/fc27/gg-rating-ranks). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27GgRatingRanks(Map params, RequestOptions options) { + OperationGroup.checkParams("futgg-fc27-gg-rating-ranks", params); + return client.request("futgg-fc27-gg-rating-ranks", params, options); + } + + /** + * futgg-fc27-gg-rating-ranks (GET /futgg/fc27/gg-rating-ranks). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27GgRatingRanks() { + return futggFc27GgRatingRanks(Map.of(), null); + } + + /** + * futgg-fc27-gg-ratings (GET /futgg/fc27/gg-ratings). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27GgRatings(Map params) { + return futggFc27GgRatings(params, null); + } + + /** + * futgg-fc27-gg-ratings (GET /futgg/fc27/gg-ratings). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27GgRatings(Map params, RequestOptions options) { + OperationGroup.checkParams("futgg-fc27-gg-ratings", params); + return client.request("futgg-fc27-gg-ratings", params, options); + } + + /** + * futgg-fc27-gg-ratings (GET /futgg/fc27/gg-ratings). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27GgRatings() { + return futggFc27GgRatings(Map.of(), null); + } + + /** + * futgg-fc27-objective-categories (GET /futgg/fc27/objective-categories). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27ObjectiveCategories(Map params) { + return futggFc27ObjectiveCategories(params, null); + } + + /** + * futgg-fc27-objective-categories (GET /futgg/fc27/objective-categories). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27ObjectiveCategories(Map params, RequestOptions options) { + OperationGroup.checkParams("futgg-fc27-objective-categories", params); + return client.request("futgg-fc27-objective-categories", params, options); + } + + /** + * futgg-fc27-objective-categories (GET /futgg/fc27/objective-categories). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27ObjectiveCategories() { + return futggFc27ObjectiveCategories(Map.of(), null); + } + + /** + * futgg-fc27-objective-groups (GET /futgg/fc27/objectives). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27ObjectiveGroups(Map params) { + return futggFc27ObjectiveGroups(params, null); + } + + /** + * futgg-fc27-objective-groups (GET /futgg/fc27/objectives). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27ObjectiveGroups(Map params, RequestOptions options) { + OperationGroup.checkParams("futgg-fc27-objective-groups", params); + return client.request("futgg-fc27-objective-groups", params, options); + } + + /** + * futgg-fc27-objective-groups (GET /futgg/fc27/objectives). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27ObjectiveGroups() { + return futggFc27ObjectiveGroups(Map.of(), null); + } + + /** + * futgg-fc27-objective-group-by-ea (GET /futgg/fc27/objectives/by-ea/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27ObjectiveGroupByEa(Map params) { + return futggFc27ObjectiveGroupByEa(params, null); + } + + /** + * futgg-fc27-objective-group-by-ea (GET /futgg/fc27/objectives/by-ea/{id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27ObjectiveGroupByEa(Map params, RequestOptions options) { + OperationGroup.checkParams("futgg-fc27-objective-group-by-ea", params); + return client.request("futgg-fc27-objective-group-by-ea", params, options); + } + + /** + * futgg-fc27-objective-group-by-objective (GET /futgg/fc27/objectives/by-objective/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27ObjectiveGroupByObjective(Map params) { + return futggFc27ObjectiveGroupByObjective(params, null); + } + + /** + * futgg-fc27-objective-group-by-objective (GET /futgg/fc27/objectives/by-objective/{id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27ObjectiveGroupByObjective(Map params, RequestOptions options) { + OperationGroup.checkParams("futgg-fc27-objective-group-by-objective", params); + return client.request("futgg-fc27-objective-group-by-objective", params, options); + } + + /** + * futgg-fc27-objective-group (GET /futgg/fc27/objectives/{slug}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27ObjectiveGroup(Map params) { + return futggFc27ObjectiveGroup(params, null); + } + + /** + * futgg-fc27-objective-group (GET /futgg/fc27/objectives/{slug}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27ObjectiveGroup(Map params, RequestOptions options) { + OperationGroup.checkParams("futgg-fc27-objective-group", params); + return client.request("futgg-fc27-objective-group", params, options); + } + + /** + * futgg-fc27-player-sorts (GET /futgg/fc27/player-sorts). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27PlayerSorts(Map params) { + return futggFc27PlayerSorts(params, null); + } + + /** + * futgg-fc27-player-sorts (GET /futgg/fc27/player-sorts). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27PlayerSorts(Map params, RequestOptions options) { + OperationGroup.checkParams("futgg-fc27-player-sorts", params); + return client.request("futgg-fc27-player-sorts", params, options); + } + + /** + * futgg-fc27-player-sorts (GET /futgg/fc27/player-sorts). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27PlayerSorts() { + return futggFc27PlayerSorts(Map.of(), null); + } + + /** + * futgg-fc27-players (GET /futgg/fc27/players). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27Players(Map params) { + return futggFc27Players(params, null); + } + + /** + * futgg-fc27-players (GET /futgg/fc27/players). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27Players(Map params, RequestOptions options) { + OperationGroup.checkParams("futgg-fc27-players", params); + return client.request("futgg-fc27-players", params, options); + } + + /** + * futgg-fc27-players (GET /futgg/fc27/players). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27Players() { + return futggFc27Players(Map.of(), null); + } + + /** + * futgg-fc27-price-index (GET /futgg/fc27/price-index). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27PriceIndex(Map params) { + return futggFc27PriceIndex(params, null); + } + + /** + * futgg-fc27-price-index (GET /futgg/fc27/price-index). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27PriceIndex(Map params, RequestOptions options) { + OperationGroup.checkParams("futgg-fc27-price-index", params); + return client.request("futgg-fc27-price-index", params, options); + } + + /** + * futgg-fc27-price-index (GET /futgg/fc27/price-index). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27PriceIndex() { + return futggFc27PriceIndex(Map.of(), null); + } + + /** + * futgg-fc27-prices (GET /futgg/fc27/prices). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27Prices(Map params) { + return futggFc27Prices(params, null); + } + + /** + * futgg-fc27-prices (GET /futgg/fc27/prices). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27Prices(Map params, RequestOptions options) { + OperationGroup.checkParams("futgg-fc27-prices", params); + return client.request("futgg-fc27-prices", params, options); + } + + /** + * futgg-fc27-prices (GET /futgg/fc27/prices). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27Prices() { + return futggFc27Prices(Map.of(), null); + } + + /** + * futgg-fc27-sbc-categories (GET /futgg/fc27/sbc/categories). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27SbcCategories(Map params) { + return futggFc27SbcCategories(params, null); + } + + /** + * futgg-fc27-sbc-categories (GET /futgg/fc27/sbc/categories). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27SbcCategories(Map params, RequestOptions options) { + OperationGroup.checkParams("futgg-fc27-sbc-categories", params); + return client.request("futgg-fc27-sbc-categories", params, options); + } + + /** + * futgg-fc27-sbc-categories (GET /futgg/fc27/sbc/categories). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27SbcCategories() { + return futggFc27SbcCategories(Map.of(), null); + } + + /** + * futgg-fc27-sbc-sets (GET /futgg/fc27/sbc/sets). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27SbcSets(Map params) { + return futggFc27SbcSets(params, null); + } + + /** + * futgg-fc27-sbc-sets (GET /futgg/fc27/sbc/sets). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27SbcSets(Map params, RequestOptions options) { + OperationGroup.checkParams("futgg-fc27-sbc-sets", params); + return client.request("futgg-fc27-sbc-sets", params, options); + } + + /** + * futgg-fc27-sbc-sets (GET /futgg/fc27/sbc/sets). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27SbcSets() { + return futggFc27SbcSets(Map.of(), null); + } + + /** + * futgg-fc27-sbc-set-by-challenge (GET /futgg/fc27/sbc/sets/by-challenge/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27SbcSetByChallenge(Map params) { + return futggFc27SbcSetByChallenge(params, null); + } + + /** + * futgg-fc27-sbc-set-by-challenge (GET /futgg/fc27/sbc/sets/by-challenge/{id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27SbcSetByChallenge(Map params, RequestOptions options) { + OperationGroup.checkParams("futgg-fc27-sbc-set-by-challenge", params); + return client.request("futgg-fc27-sbc-set-by-challenge", params, options); + } + + /** + * futgg-fc27-sbc-set-by-ea (GET /futgg/fc27/sbc/sets/by-ea/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27SbcSetByEa(Map params) { + return futggFc27SbcSetByEa(params, null); + } + + /** + * futgg-fc27-sbc-set-by-ea (GET /futgg/fc27/sbc/sets/by-ea/{id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27SbcSetByEa(Map params, RequestOptions options) { + OperationGroup.checkParams("futgg-fc27-sbc-set-by-ea", params); + return client.request("futgg-fc27-sbc-set-by-ea", params, options); + } + + /** + * futgg-fc27-sbc-set (GET /futgg/fc27/sbc/sets/{slug}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27SbcSet(Map params) { + return futggFc27SbcSet(params, null); + } + + /** + * futgg-fc27-sbc-set (GET /futgg/fc27/sbc/sets/{slug}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27SbcSet(Map params, RequestOptions options) { + OperationGroup.checkParams("futgg-fc27-sbc-set", params); + return client.request("futgg-fc27-sbc-set", params, options); + } + + /** + * futgg-fc27-season-pass (GET /futgg/fc27/season-pass). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27SeasonPass(Map params) { + return futggFc27SeasonPass(params, null); + } + + /** + * futgg-fc27-season-pass (GET /futgg/fc27/season-pass). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27SeasonPass(Map params, RequestOptions options) { + OperationGroup.checkParams("futgg-fc27-season-pass", params); + return client.request("futgg-fc27-season-pass", params, options); + } + + /** + * futgg-fc27-season-pass (GET /futgg/fc27/season-pass). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object futggFc27SeasonPass() { + return futggFc27SeasonPass(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/GlovoGroup.java b/src/main/java/net/crawlora/groups/GlovoGroup.java new file mode 100644 index 0000000..8f72b65 --- /dev/null +++ b/src/main/java/net/crawlora/groups/GlovoGroup.java @@ -0,0 +1,250 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "glovo" operation group. + * Reach it via {@code client.glovo()}. + */ +public final class GlovoGroup { + private final CrawloraClient client; + + public GlovoGroup(CrawloraClient client) { + this.client = client; + } + + /** + * glovo-categories (GET /glovo/categories). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object categories(Map params) { + return categories(params, null); + } + + /** + * glovo-categories (GET /glovo/categories). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object categories(Map params, RequestOptions options) { + OperationGroup.checkParams("glovo-categories", params); + return client.request("glovo-categories", params, options); + } + + /** + * glovo-cities (GET /glovo/cities). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object cities(Map params) { + return cities(params, null); + } + + /** + * glovo-cities (GET /glovo/cities). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object cities(Map params, RequestOptions options) { + OperationGroup.checkParams("glovo-cities", params); + return client.request("glovo-cities", params, options); + } + + /** + * glovo-cities (GET /glovo/cities). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object cities() { + return cities(Map.of(), null); + } + + /** + * glovo-city (GET /glovo/city). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object city(Map params) { + return city(params, null); + } + + /** + * glovo-city (GET /glovo/city). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object city(Map params, RequestOptions options) { + OperationGroup.checkParams("glovo-city", params); + return client.request("glovo-city", params, options); + } + + /** + * glovo-store (GET /glovo/store). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object store(Map params) { + return store(params, null); + } + + /** + * glovo-store (GET /glovo/store). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object store(Map params, RequestOptions options) { + OperationGroup.checkParams("glovo-store", params); + return client.request("glovo-store", params, options); + } + + /** + * glovo-store-fees (GET /glovo/store/fees). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object storeFees(Map params) { + return storeFees(params, null); + } + + /** + * glovo-store-fees (GET /glovo/store/fees). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object storeFees(Map params, RequestOptions options) { + OperationGroup.checkParams("glovo-store-fees", params); + return client.request("glovo-store-fees", params, options); + } + + /** + * glovo-store-menu (GET /glovo/store/menu). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object storeMenu(Map params) { + return storeMenu(params, null); + } + + /** + * glovo-store-menu (GET /glovo/store/menu). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object storeMenu(Map params, RequestOptions options) { + OperationGroup.checkParams("glovo-store-menu", params); + return client.request("glovo-store-menu", params, options); + } + + /** + * glovo-store-products (GET /glovo/store/products). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object storeProducts(Map params) { + return storeProducts(params, null); + } + + /** + * glovo-store-products (GET /glovo/store/products). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object storeProducts(Map params, RequestOptions options) { + OperationGroup.checkParams("glovo-store-products", params); + return client.request("glovo-store-products", params, options); + } + + /** + * glovo-store-search (GET /glovo/store/search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object storeSearch(Map params) { + return storeSearch(params, null); + } + + /** + * glovo-store-search (GET /glovo/store/search). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object storeSearch(Map params, RequestOptions options) { + OperationGroup.checkParams("glovo-store-search", params); + return client.request("glovo-store-search", params, options); + } + + /** + * glovo-stores (GET /glovo/stores). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object stores(Map params) { + return stores(params, null); + } + + /** + * glovo-stores (GET /glovo/stores). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object stores(Map params, RequestOptions options) { + OperationGroup.checkParams("glovo-stores", params); + return client.request("glovo-stores", params, options); + } + + /** + * glovo-stores-filters (GET /glovo/stores/filters). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object storesFilters(Map params) { + return storesFilters(params, null); + } + + /** + * glovo-stores-filters (GET /glovo/stores/filters). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object storesFilters(Map params, RequestOptions options) { + OperationGroup.checkParams("glovo-stores-filters", params); + return client.request("glovo-stores-filters", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/GosuGamersGroup.java b/src/main/java/net/crawlora/groups/GosuGamersGroup.java index 21c7852..a025701 100644 --- a/src/main/java/net/crawlora/groups/GosuGamersGroup.java +++ b/src/main/java/net/crawlora/groups/GosuGamersGroup.java @@ -18,6 +18,59 @@ public GosuGamersGroup(CrawloraClient client) { this.client = client; } + /** + * gosugamers-article (GET /gosugamers/article). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object gosugamersArticle(Map params) { + return gosugamersArticle(params, null); + } + + /** + * gosugamers-article (GET /gosugamers/article). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object gosugamersArticle(Map params, RequestOptions options) { + OperationGroup.checkParams("gosugamers-article", params); + return client.request("gosugamers-article", params, options); + } + + /** + * gosugamers-articles (GET /gosugamers/articles). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object gosugamersArticles(Map params) { + return gosugamersArticles(params, null); + } + + /** + * gosugamers-articles (GET /gosugamers/articles). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object gosugamersArticles(Map params, RequestOptions options) { + OperationGroup.checkParams("gosugamers-articles", params); + return client.request("gosugamers-articles", params, options); + } + + /** + * gosugamers-articles (GET /gosugamers/articles). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object gosugamersArticles() { + return gosugamersArticles(Map.of(), null); + } + /** * gosugamers-encounters (GET /gosugamers/encounters). * diff --git a/src/main/java/net/crawlora/groups/HltvGroup.java b/src/main/java/net/crawlora/groups/HltvGroup.java new file mode 100644 index 0000000..fb38284 --- /dev/null +++ b/src/main/java/net/crawlora/groups/HltvGroup.java @@ -0,0 +1,255 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "hltv" operation group. + * Reach it via {@code client.hltv()}. + */ +public final class HltvGroup { + private final CrawloraClient client; + + public HltvGroup(CrawloraClient client) { + this.client = client; + } + + /** + * hltv-event (GET /hltv/event). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object event(Map params) { + return event(params, null); + } + + /** + * hltv-event (GET /hltv/event). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object event(Map params, RequestOptions options) { + OperationGroup.checkParams("hltv-event", params); + return client.request("hltv-event", params, options); + } + + /** + * hltv-events (GET /hltv/events). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object events(Map params) { + return events(params, null); + } + + /** + * hltv-events (GET /hltv/events). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object events(Map params, RequestOptions options) { + OperationGroup.checkParams("hltv-events", params); + return client.request("hltv-events", params, options); + } + + /** + * hltv-events (GET /hltv/events). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object events() { + return events(Map.of(), null); + } + + /** + * hltv-match (GET /hltv/match). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object match(Map params) { + return match(params, null); + } + + /** + * hltv-match (GET /hltv/match). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object match(Map params, RequestOptions options) { + OperationGroup.checkParams("hltv-match", params); + return client.request("hltv-match", params, options); + } + + /** + * hltv-matches (GET /hltv/matches). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object matches(Map params) { + return matches(params, null); + } + + /** + * hltv-matches (GET /hltv/matches). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object matches(Map params, RequestOptions options) { + OperationGroup.checkParams("hltv-matches", params); + return client.request("hltv-matches", params, options); + } + + /** + * hltv-matches (GET /hltv/matches). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object matches() { + return matches(Map.of(), null); + } + + /** + * hltv-player (GET /hltv/player). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object player(Map params) { + return player(params, null); + } + + /** + * hltv-player (GET /hltv/player). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object player(Map params, RequestOptions options) { + OperationGroup.checkParams("hltv-player", params); + return client.request("hltv-player", params, options); + } + + /** + * hltv-rankings (GET /hltv/rankings). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rankings(Map params) { + return rankings(params, null); + } + + /** + * hltv-rankings (GET /hltv/rankings). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rankings(Map params, RequestOptions options) { + OperationGroup.checkParams("hltv-rankings", params); + return client.request("hltv-rankings", params, options); + } + + /** + * hltv-rankings (GET /hltv/rankings). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rankings() { + return rankings(Map.of(), null); + } + + /** + * hltv-results (GET /hltv/results). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object results(Map params) { + return results(params, null); + } + + /** + * hltv-results (GET /hltv/results). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object results(Map params, RequestOptions options) { + OperationGroup.checkParams("hltv-results", params); + return client.request("hltv-results", params, options); + } + + /** + * hltv-results (GET /hltv/results). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object results() { + return results(Map.of(), null); + } + + /** + * hltv-search (GET /hltv/search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object search(Map params) { + return search(params, null); + } + + /** + * hltv-search (GET /hltv/search). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object search(Map params, RequestOptions options) { + OperationGroup.checkParams("hltv-search", params); + return client.request("hltv-search", params, options); + } + + /** + * hltv-team (GET /hltv/team). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object team(Map params) { + return team(params, null); + } + + /** + * hltv-team (GET /hltv/team). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object team(Map params, RequestOptions options) { + OperationGroup.checkParams("hltv-team", params); + return client.request("hltv-team", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/ItchIoGroup.java b/src/main/java/net/crawlora/groups/ItchIoGroup.java new file mode 100644 index 0000000..95f0ab7 --- /dev/null +++ b/src/main/java/net/crawlora/groups/ItchIoGroup.java @@ -0,0 +1,365 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "itchIo" operation group. + * Reach it via {@code client.itchIo()}. + */ +public final class ItchIoGroup { + private final CrawloraClient client; + + public ItchIoGroup(CrawloraClient client) { + this.client = client; + } + + /** + * itchio-browse (GET /itchio/browse). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioBrowse(Map params) { + return itchioBrowse(params, null); + } + + /** + * itchio-browse (GET /itchio/browse). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioBrowse(Map params, RequestOptions options) { + OperationGroup.checkParams("itchio-browse", params); + return client.request("itchio-browse", params, options); + } + + /** + * itchio-browse-options (GET /itchio/browse/options). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioBrowseOptions(Map params) { + return itchioBrowseOptions(params, null); + } + + /** + * itchio-browse-options (GET /itchio/browse/options). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioBrowseOptions(Map params, RequestOptions options) { + OperationGroup.checkParams("itchio-browse-options", params); + return client.request("itchio-browse-options", params, options); + } + + /** + * itchio-catalog (GET /itchio/catalogs/{classification}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioCatalog(Map params) { + return itchioCatalog(params, null); + } + + /** + * itchio-catalog (GET /itchio/catalogs/{classification}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioCatalog(Map params, RequestOptions options) { + OperationGroup.checkParams("itchio-catalog", params); + return client.request("itchio-catalog", params, options); + } + + /** + * itchio-top-rated (GET /itchio/games/top-rated). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioTopRated(Map params) { + return itchioTopRated(params, null); + } + + /** + * itchio-top-rated (GET /itchio/games/top-rated). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioTopRated(Map params, RequestOptions options) { + OperationGroup.checkParams("itchio-top-rated", params); + return client.request("itchio-top-rated", params, options); + } + + /** + * itchio-top-rated (GET /itchio/games/top-rated). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioTopRated() { + return itchioTopRated(Map.of(), null); + } + + /** + * itchio-jams-browse (GET /itchio/jams/browse). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioJamsBrowse(Map params) { + return itchioJamsBrowse(params, null); + } + + /** + * itchio-jams-browse (GET /itchio/jams/browse). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioJamsBrowse(Map params, RequestOptions options) { + OperationGroup.checkParams("itchio-jams-browse", params); + return client.request("itchio-jams-browse", params, options); + } + + /** + * itchio-jams-browse (GET /itchio/jams/browse). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioJamsBrowse() { + return itchioJamsBrowse(Map.of(), null); + } + + /** + * itchio-jam-calendar (GET /itchio/jams/calendar). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioJamCalendar(Map params) { + return itchioJamCalendar(params, null); + } + + /** + * itchio-jam-calendar (GET /itchio/jams/calendar). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioJamCalendar(Map params, RequestOptions options) { + OperationGroup.checkParams("itchio-jam-calendar", params); + return client.request("itchio-jam-calendar", params, options); + } + + /** + * itchio-jam-calendar (GET /itchio/jams/calendar). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioJamCalendar() { + return itchioJamCalendar(Map.of(), null); + } + + /** + * itchio-jams-entries (GET /itchio/jams/entries). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioJamsEntries(Map params) { + return itchioJamsEntries(params, null); + } + + /** + * itchio-jams-entries (GET /itchio/jams/entries). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioJamsEntries(Map params, RequestOptions options) { + OperationGroup.checkParams("itchio-jams-entries", params); + return client.request("itchio-jams-entries", params, options); + } + + /** + * itchio-jams-options (GET /itchio/jams/options). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioJamsOptions(Map params) { + return itchioJamsOptions(params, null); + } + + /** + * itchio-jams-options (GET /itchio/jams/options). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioJamsOptions(Map params, RequestOptions options) { + OperationGroup.checkParams("itchio-jams-options", params); + return client.request("itchio-jams-options", params, options); + } + + /** + * itchio-jams-options (GET /itchio/jams/options). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioJamsOptions() { + return itchioJamsOptions(Map.of(), null); + } + + /** + * itchio-jams-overview (GET /itchio/jams/overview). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioJamsOverview(Map params) { + return itchioJamsOverview(params, null); + } + + /** + * itchio-jams-overview (GET /itchio/jams/overview). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioJamsOverview(Map params, RequestOptions options) { + OperationGroup.checkParams("itchio-jams-overview", params); + return client.request("itchio-jams-overview", params, options); + } + + /** + * itchio-jams-results (GET /itchio/jams/results). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioJamsResults(Map params) { + return itchioJamsResults(params, null); + } + + /** + * itchio-jams-results (GET /itchio/jams/results). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioJamsResults(Map params, RequestOptions options) { + OperationGroup.checkParams("itchio-jams-results", params); + return client.request("itchio-jams-results", params, options); + } + + /** + * itchio-jams-results-options (GET /itchio/jams/results/options). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioJamsResultsOptions(Map params) { + return itchioJamsResultsOptions(params, null); + } + + /** + * itchio-jams-results-options (GET /itchio/jams/results/options). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioJamsResultsOptions(Map params, RequestOptions options) { + OperationGroup.checkParams("itchio-jams-results-options", params); + return client.request("itchio-jams-results-options", params, options); + } + + /** + * itchio-jams-submission (GET /itchio/jams/submission). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioJamsSubmission(Map params) { + return itchioJamsSubmission(params, null); + } + + /** + * itchio-jams-submission (GET /itchio/jams/submission). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioJamsSubmission(Map params, RequestOptions options) { + OperationGroup.checkParams("itchio-jams-submission", params); + return client.request("itchio-jams-submission", params, options); + } + + /** + * itchio-project (GET /itchio/project). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioProject(Map params) { + return itchioProject(params, null); + } + + /** + * itchio-project (GET /itchio/project). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioProject(Map params, RequestOptions options) { + OperationGroup.checkParams("itchio-project", params); + return client.request("itchio-project", params, options); + } + + /** + * itchio-tags (GET /itchio/tags/{classification}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioTags(Map params) { + return itchioTags(params, null); + } + + /** + * itchio-tags (GET /itchio/tags/{classification}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object itchioTags(Map params, RequestOptions options) { + OperationGroup.checkParams("itchio-tags", params); + return client.request("itchio-tags", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/KlookGroup.java b/src/main/java/net/crawlora/groups/KlookGroup.java new file mode 100644 index 0000000..dffbb7e --- /dev/null +++ b/src/main/java/net/crawlora/groups/KlookGroup.java @@ -0,0 +1,534 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "klook" operation group. + * Reach it via {@code client.klook()}. + */ +public final class KlookGroup { + private final CrawloraClient client; + + public KlookGroup(CrawloraClient client) { + this.client = client; + } + + /** + * klook-activity (GET /klook/activities/{activity_id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object activity(Map params) { + return activity(params, null); + } + + /** + * klook-activity (GET /klook/activities/{activity_id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object activity(Map params, RequestOptions options) { + OperationGroup.checkParams("klook-activity", params); + return client.request("klook-activity", params, options); + } + + /** + * klook-attractions-categories (GET /klook/attractions/categories). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object attractionsCategories(Map params) { + return attractionsCategories(params, null); + } + + /** + * klook-attractions-categories (GET /klook/attractions/categories). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object attractionsCategories(Map params, RequestOptions options) { + OperationGroup.checkParams("klook-attractions-categories", params); + return client.request("klook-attractions-categories", params, options); + } + + /** + * klook-attractions-categories (GET /klook/attractions/categories). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object attractionsCategories() { + return attractionsCategories(Map.of(), null); + } + + /** + * klook-attractions-destinations (GET /klook/attractions/destinations). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object attractionsDestinations(Map params) { + return attractionsDestinations(params, null); + } + + /** + * klook-attractions-destinations (GET /klook/attractions/destinations). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object attractionsDestinations(Map params, RequestOptions options) { + OperationGroup.checkParams("klook-attractions-destinations", params); + return client.request("klook-attractions-destinations", params, options); + } + + /** + * klook-attractions-destinations (GET /klook/attractions/destinations). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object attractionsDestinations() { + return attractionsDestinations(Map.of(), null); + } + + /** + * klook-attractions-highlights (GET /klook/attractions/highlights). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object attractionsHighlights(Map params) { + return attractionsHighlights(params, null); + } + + /** + * klook-attractions-highlights (GET /klook/attractions/highlights). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object attractionsHighlights(Map params, RequestOptions options) { + OperationGroup.checkParams("klook-attractions-highlights", params); + return client.request("klook-attractions-highlights", params, options); + } + + /** + * klook-attractions-highlights (GET /klook/attractions/highlights). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object attractionsHighlights() { + return attractionsHighlights(Map.of(), null); + } + + /** + * klook-attractions-search (GET /klook/attractions/search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object attractionsSearch(Map params) { + return attractionsSearch(params, null); + } + + /** + * klook-attractions-search (GET /klook/attractions/search). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object attractionsSearch(Map params, RequestOptions options) { + OperationGroup.checkParams("klook-attractions-search", params); + return client.request("klook-attractions-search", params, options); + } + + /** + * klook-attractions-search (GET /klook/attractions/search). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object attractionsSearch() { + return attractionsSearch(Map.of(), null); + } + + /** + * klook-attractions-suggest (GET /klook/attractions/suggest). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object attractionsSuggest(Map params) { + return attractionsSuggest(params, null); + } + + /** + * klook-attractions-suggest (GET /klook/attractions/suggest). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object attractionsSuggest(Map params, RequestOptions options) { + OperationGroup.checkParams("klook-attractions-suggest", params); + return client.request("klook-attractions-suggest", params, options); + } + + /** + * klook-categories (GET /klook/categories). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object categories(Map params) { + return categories(params, null); + } + + /** + * klook-categories (GET /klook/categories). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object categories(Map params, RequestOptions options) { + OperationGroup.checkParams("klook-categories", params); + return client.request("klook-categories", params, options); + } + + /** + * klook-categories (GET /klook/categories). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object categories() { + return categories(Map.of(), null); + } + + /** + * klook-destinations (GET /klook/destinations). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object destinations(Map params) { + return destinations(params, null); + } + + /** + * klook-destinations (GET /klook/destinations). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object destinations(Map params, RequestOptions options) { + OperationGroup.checkParams("klook-destinations", params); + return client.request("klook-destinations", params, options); + } + + /** + * klook-destinations (GET /klook/destinations). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object destinations() { + return destinations(Map.of(), null); + } + + /** + * klook-hot (GET /klook/hot). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object hot(Map params) { + return hot(params, null); + } + + /** + * klook-hot (GET /klook/hot). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object hot(Map params, RequestOptions options) { + OperationGroup.checkParams("klook-hot", params); + return client.request("klook-hot", params, options); + } + + /** + * klook-hot (GET /klook/hot). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object hot() { + return hot(Map.of(), null); + } + + /** + * klook-interests (GET /klook/interests). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object interests(Map params) { + return interests(params, null); + } + + /** + * klook-interests (GET /klook/interests). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object interests(Map params, RequestOptions options) { + OperationGroup.checkParams("klook-interests", params); + return client.request("klook-interests", params, options); + } + + /** + * klook-interests (GET /klook/interests). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object interests() { + return interests(Map.of(), null); + } + + /** + * klook-recommendations (GET /klook/recommendations). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object recommendations(Map params) { + return recommendations(params, null); + } + + /** + * klook-recommendations (GET /klook/recommendations). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object recommendations(Map params, RequestOptions options) { + OperationGroup.checkParams("klook-recommendations", params); + return client.request("klook-recommendations", params, options); + } + + /** + * klook-recommendations (GET /klook/recommendations). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object recommendations() { + return recommendations(Map.of(), null); + } + + /** + * klook-reviews (GET /klook/reviews). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object reviews(Map params) { + return reviews(params, null); + } + + /** + * klook-reviews (GET /klook/reviews). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object reviews(Map params, RequestOptions options) { + OperationGroup.checkParams("klook-reviews", params); + return client.request("klook-reviews", params, options); + } + + /** + * klook-search (GET /klook/search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object search(Map params) { + return search(params, null); + } + + /** + * klook-search (GET /klook/search). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object search(Map params, RequestOptions options) { + OperationGroup.checkParams("klook-search", params); + return client.request("klook-search", params, options); + } + + /** + * klook-search (GET /klook/search). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object search() { + return search(Map.of(), null); + } + + /** + * klook-search-filters (GET /klook/search/filters). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object searchFilters(Map params) { + return searchFilters(params, null); + } + + /** + * klook-search-filters (GET /klook/search/filters). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object searchFilters(Map params, RequestOptions options) { + OperationGroup.checkParams("klook-search-filters", params); + return client.request("klook-search-filters", params, options); + } + + /** + * klook-search-filters (GET /klook/search/filters). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object searchFilters() { + return searchFilters(Map.of(), null); + } + + /** + * klook-search-hot-keywords (GET /klook/search/hot-keywords). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object searchHotKeywords(Map params) { + return searchHotKeywords(params, null); + } + + /** + * klook-search-hot-keywords (GET /klook/search/hot-keywords). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object searchHotKeywords(Map params, RequestOptions options) { + OperationGroup.checkParams("klook-search-hot-keywords", params); + return client.request("klook-search-hot-keywords", params, options); + } + + /** + * klook-search-hot-keywords (GET /klook/search/hot-keywords). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object searchHotKeywords() { + return searchHotKeywords(Map.of(), null); + } + + /** + * klook-search-unified (GET /klook/search/unified). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object searchUnified(Map params) { + return searchUnified(params, null); + } + + /** + * klook-search-unified (GET /klook/search/unified). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object searchUnified(Map params, RequestOptions options) { + OperationGroup.checkParams("klook-search-unified", params); + return client.request("klook-search-unified", params, options); + } + + /** + * klook-suggest (GET /klook/suggest). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object suggest(Map params) { + return suggest(params, null); + } + + /** + * klook-suggest (GET /klook/suggest). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object suggest(Map params, RequestOptions options) { + OperationGroup.checkParams("klook-suggest", params); + return client.request("klook-suggest", params, options); + } + + /** + * klook-verticals (GET /klook/verticals). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object verticals(Map params) { + return verticals(params, null); + } + + /** + * klook-verticals (GET /klook/verticals). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object verticals(Map params, RequestOptions options) { + OperationGroup.checkParams("klook-verticals", params); + return client.request("klook-verticals", params, options); + } + + /** + * klook-verticals (GET /klook/verticals). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object verticals() { + return verticals(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/LumaGroup.java b/src/main/java/net/crawlora/groups/LumaGroup.java new file mode 100644 index 0000000..e93dc6b --- /dev/null +++ b/src/main/java/net/crawlora/groups/LumaGroup.java @@ -0,0 +1,228 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "luma" operation group. + * Reach it via {@code client.luma()}. + */ +public final class LumaGroup { + private final CrawloraClient client; + + public LumaGroup(CrawloraClient client) { + this.client = client; + } + + /** + * luma-calendar (GET /luma/calendar). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object calendar(Map params) { + return calendar(params, null); + } + + /** + * luma-calendar (GET /luma/calendar). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object calendar(Map params, RequestOptions options) { + OperationGroup.checkParams("luma-calendar", params); + return client.request("luma-calendar", params, options); + } + + /** + * luma-calendar-events (GET /luma/calendar-events). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object calendarEvents(Map params) { + return calendarEvents(params, null); + } + + /** + * luma-calendar-events (GET /luma/calendar-events). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object calendarEvents(Map params, RequestOptions options) { + OperationGroup.checkParams("luma-calendar-events", params); + return client.request("luma-calendar-events", params, options); + } + + /** + * luma-categories (GET /luma/categories). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object categories(Map params) { + return categories(params, null); + } + + /** + * luma-categories (GET /luma/categories). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object categories(Map params, RequestOptions options) { + OperationGroup.checkParams("luma-categories", params); + return client.request("luma-categories", params, options); + } + + /** + * luma-categories (GET /luma/categories). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object categories() { + return categories(Map.of(), null); + } + + /** + * luma-category (GET /luma/category). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object category(Map params) { + return category(params, null); + } + + /** + * luma-category (GET /luma/category). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object category(Map params, RequestOptions options) { + OperationGroup.checkParams("luma-category", params); + return client.request("luma-category", params, options); + } + + /** + * luma-category-events (GET /luma/category-events). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object categoryEvents(Map params) { + return categoryEvents(params, null); + } + + /** + * luma-category-events (GET /luma/category-events). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object categoryEvents(Map params, RequestOptions options) { + OperationGroup.checkParams("luma-category-events", params); + return client.request("luma-category-events", params, options); + } + + /** + * luma-event (GET /luma/event). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object event(Map params) { + return event(params, null); + } + + /** + * luma-event (GET /luma/event). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object event(Map params, RequestOptions options) { + OperationGroup.checkParams("luma-event", params); + return client.request("luma-event", params, options); + } + + /** + * luma-place (GET /luma/place). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object place(Map params) { + return place(params, null); + } + + /** + * luma-place (GET /luma/place). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object place(Map params, RequestOptions options) { + OperationGroup.checkParams("luma-place", params); + return client.request("luma-place", params, options); + } + + /** + * luma-place-calendars (GET /luma/place-calendars). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object placeCalendars(Map params) { + return placeCalendars(params, null); + } + + /** + * luma-place-calendars (GET /luma/place-calendars). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object placeCalendars(Map params, RequestOptions options) { + OperationGroup.checkParams("luma-place-calendars", params); + return client.request("luma-place-calendars", params, options); + } + + /** + * luma-place-events (GET /luma/place-events). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object placeEvents(Map params) { + return placeEvents(params, null); + } + + /** + * luma-place-events (GET /luma/place-events). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object placeEvents(Map params, RequestOptions options) { + OperationGroup.checkParams("luma-place-events", params); + return client.request("luma-place-events", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/MaxPrepsGroup.java b/src/main/java/net/crawlora/groups/MaxPrepsGroup.java new file mode 100644 index 0000000..2f9868d --- /dev/null +++ b/src/main/java/net/crawlora/groups/MaxPrepsGroup.java @@ -0,0 +1,497 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "maxPreps" operation group. + * Reach it via {@code client.maxPreps()}. + */ +public final class MaxPrepsGroup { + private final CrawloraClient client; + + public MaxPrepsGroup(CrawloraClient client) { + this.client = client; + } + + /** + * maxpreps-rankings-groupings (GET /maxpreps/rankings-groupings). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsRankingsGroupings(Map params) { + return maxprepsRankingsGroupings(params, null); + } + + /** + * maxpreps-rankings-groupings (GET /maxpreps/rankings-groupings). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsRankingsGroupings(Map params, RequestOptions options) { + OperationGroup.checkParams("maxpreps-rankings-groupings", params); + return client.request("maxpreps-rankings-groupings", params, options); + } + + /** + * maxpreps-request-enums (GET /maxpreps/request-enums). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsRequestEnums(Map params) { + return maxprepsRequestEnums(params, null); + } + + /** + * maxpreps-request-enums (GET /maxpreps/request-enums). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsRequestEnums(Map params, RequestOptions options) { + OperationGroup.checkParams("maxpreps-request-enums", params); + return client.request("maxpreps-request-enums", params, options); + } + + /** + * maxpreps-request-enums (GET /maxpreps/request-enums). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsRequestEnums() { + return maxprepsRequestEnums(Map.of(), null); + } + + /** + * maxpreps-school (GET /maxpreps/school). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsSchool(Map params) { + return maxprepsSchool(params, null); + } + + /** + * maxpreps-school (GET /maxpreps/school). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsSchool(Map params, RequestOptions options) { + OperationGroup.checkParams("maxpreps-school", params); + return client.request("maxpreps-school", params, options); + } + + /** + * maxpreps-school-contests (GET /maxpreps/school-contests). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsSchoolContests(Map params) { + return maxprepsSchoolContests(params, null); + } + + /** + * maxpreps-school-contests (GET /maxpreps/school-contests). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsSchoolContests(Map params, RequestOptions options) { + OperationGroup.checkParams("maxpreps-school-contests", params); + return client.request("maxpreps-school-contests", params, options); + } + + /** + * maxpreps-school-proximal (GET /maxpreps/school-proximal). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsSchoolProximal(Map params) { + return maxprepsSchoolProximal(params, null); + } + + /** + * maxpreps-school-proximal (GET /maxpreps/school-proximal). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsSchoolProximal(Map params, RequestOptions options) { + OperationGroup.checkParams("maxpreps-school-proximal", params); + return client.request("maxpreps-school-proximal", params, options); + } + + /** + * maxpreps-school-search (GET /maxpreps/school-search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsSchoolSearch(Map params) { + return maxprepsSchoolSearch(params, null); + } + + /** + * maxpreps-school-search (GET /maxpreps/school-search). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsSchoolSearch(Map params, RequestOptions options) { + OperationGroup.checkParams("maxpreps-school-search", params); + return client.request("maxpreps-school-search", params, options); + } + + /** + * maxpreps-school-seasons (GET /maxpreps/school-seasons). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsSchoolSeasons(Map params) { + return maxprepsSchoolSeasons(params, null); + } + + /** + * maxpreps-school-seasons (GET /maxpreps/school-seasons). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsSchoolSeasons(Map params, RequestOptions options) { + OperationGroup.checkParams("maxpreps-school-seasons", params); + return client.request("maxpreps-school-seasons", params, options); + } + + /** + * maxpreps-school-zip-search (GET /maxpreps/school-zip-search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsSchoolZipSearch(Map params) { + return maxprepsSchoolZipSearch(params, null); + } + + /** + * maxpreps-school-zip-search (GET /maxpreps/school-zip-search). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsSchoolZipSearch(Map params, RequestOptions options) { + OperationGroup.checkParams("maxpreps-school-zip-search", params); + return client.request("maxpreps-school-zip-search", params, options); + } + + /** + * maxpreps-scoreboard (GET /maxpreps/scoreboard). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsScoreboard(Map params) { + return maxprepsScoreboard(params, null); + } + + /** + * maxpreps-scoreboard (GET /maxpreps/scoreboard). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsScoreboard(Map params, RequestOptions options) { + OperationGroup.checkParams("maxpreps-scoreboard", params); + return client.request("maxpreps-scoreboard", params, options); + } + + /** + * maxpreps-season-navigation (GET /maxpreps/season-navigation). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsSeasonNavigation(Map params) { + return maxprepsSeasonNavigation(params, null); + } + + /** + * maxpreps-season-navigation (GET /maxpreps/season-navigation). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsSeasonNavigation(Map params, RequestOptions options) { + OperationGroup.checkParams("maxpreps-season-navigation", params); + return client.request("maxpreps-season-navigation", params, options); + } + + /** + * maxpreps-sports (GET /maxpreps/sports). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsSports(Map params) { + return maxprepsSports(params, null); + } + + /** + * maxpreps-sports (GET /maxpreps/sports). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsSports(Map params, RequestOptions options) { + OperationGroup.checkParams("maxpreps-sports", params); + return client.request("maxpreps-sports", params, options); + } + + /** + * maxpreps-sports (GET /maxpreps/sports). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsSports() { + return maxprepsSports(Map.of(), null); + } + + /** + * maxpreps-states (GET /maxpreps/states). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsStates(Map params) { + return maxprepsStates(params, null); + } + + /** + * maxpreps-states (GET /maxpreps/states). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsStates(Map params, RequestOptions options) { + OperationGroup.checkParams("maxpreps-states", params); + return client.request("maxpreps-states", params, options); + } + + /** + * maxpreps-states (GET /maxpreps/states). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsStates() { + return maxprepsStates(Map.of(), null); + } + + /** + * maxpreps-team (GET /maxpreps/team). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsTeam(Map params) { + return maxprepsTeam(params, null); + } + + /** + * maxpreps-team (GET /maxpreps/team). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsTeam(Map params, RequestOptions options) { + OperationGroup.checkParams("maxpreps-team", params); + return client.request("maxpreps-team", params, options); + } + + /** + * maxpreps-team-context (GET /maxpreps/team-context). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsTeamContext(Map params) { + return maxprepsTeamContext(params, null); + } + + /** + * maxpreps-team-context (GET /maxpreps/team-context). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsTeamContext(Map params, RequestOptions options) { + OperationGroup.checkParams("maxpreps-team-context", params); + return client.request("maxpreps-team-context", params, options); + } + + /** + * maxpreps-team-next-contest (GET /maxpreps/team-next-contest). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsTeamNextContest(Map params) { + return maxprepsTeamNextContest(params, null); + } + + /** + * maxpreps-team-next-contest (GET /maxpreps/team-next-contest). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsTeamNextContest(Map params, RequestOptions options) { + OperationGroup.checkParams("maxpreps-team-next-contest", params); + return client.request("maxpreps-team-next-contest", params, options); + } + + /** + * maxpreps-team-rankings (GET /maxpreps/team-rankings). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsTeamRankings(Map params) { + return maxprepsTeamRankings(params, null); + } + + /** + * maxpreps-team-rankings (GET /maxpreps/team-rankings). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsTeamRankings(Map params, RequestOptions options) { + OperationGroup.checkParams("maxpreps-team-rankings", params); + return client.request("maxpreps-team-rankings", params, options); + } + + /** + * maxpreps-team-roster-summary (GET /maxpreps/team-roster-summary). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsTeamRosterSummary(Map params) { + return maxprepsTeamRosterSummary(params, null); + } + + /** + * maxpreps-team-roster-summary (GET /maxpreps/team-roster-summary). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsTeamRosterSummary(Map params, RequestOptions options) { + OperationGroup.checkParams("maxpreps-team-roster-summary", params); + return client.request("maxpreps-team-roster-summary", params, options); + } + + /** + * maxpreps-team-schedule (GET /maxpreps/team-schedule). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsTeamSchedule(Map params) { + return maxprepsTeamSchedule(params, null); + } + + /** + * maxpreps-team-schedule (GET /maxpreps/team-schedule). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsTeamSchedule(Map params, RequestOptions options) { + OperationGroup.checkParams("maxpreps-team-schedule", params); + return client.request("maxpreps-team-schedule", params, options); + } + + /** + * maxpreps-team-stat-leaders (GET /maxpreps/team-stat-leaders). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsTeamStatLeaders(Map params) { + return maxprepsTeamStatLeaders(params, null); + } + + /** + * maxpreps-team-stat-leaders (GET /maxpreps/team-stat-leaders). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsTeamStatLeaders(Map params, RequestOptions options) { + OperationGroup.checkParams("maxpreps-team-stat-leaders", params); + return client.request("maxpreps-team-stat-leaders", params, options); + } + + /** + * maxpreps-tournament-sports (GET /maxpreps/tournament-sports). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsTournamentSports(Map params) { + return maxprepsTournamentSports(params, null); + } + + /** + * maxpreps-tournament-sports (GET /maxpreps/tournament-sports). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsTournamentSports(Map params, RequestOptions options) { + OperationGroup.checkParams("maxpreps-tournament-sports", params); + return client.request("maxpreps-tournament-sports", params, options); + } + + /** + * maxpreps-tournament-sports (GET /maxpreps/tournament-sports). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object maxprepsTournamentSports() { + return maxprepsTournamentSports(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/ModrinthGroup.java b/src/main/java/net/crawlora/groups/ModrinthGroup.java new file mode 100644 index 0000000..02902c9 --- /dev/null +++ b/src/main/java/net/crawlora/groups/ModrinthGroup.java @@ -0,0 +1,832 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "modrinth" operation group. + * Reach it via {@code client.modrinth()}. + */ +public final class ModrinthGroup { + private final CrawloraClient client; + + public ModrinthGroup(CrawloraClient client) { + this.client = client; + } + + /** + * modrinth-collection (GET /modrinth/collection/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object collection(Map params) { + return collection(params, null); + } + + /** + * modrinth-collection (GET /modrinth/collection/{id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object collection(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-collection", params); + return client.request("modrinth-collection", params, options); + } + + /** + * modrinth-collections (GET /modrinth/collections). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object collections(Map params) { + return collections(params, null); + } + + /** + * modrinth-collections (GET /modrinth/collections). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object collections(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-collections", params); + return client.request("modrinth-collections", params, options); + } + + /** + * modrinth-metadata-link-platforms (GET /modrinth/metadata/link-platforms). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object metadataLinkPlatforms(Map params) { + return metadataLinkPlatforms(params, null); + } + + /** + * modrinth-metadata-link-platforms (GET /modrinth/metadata/link-platforms). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object metadataLinkPlatforms(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-metadata-link-platforms", params); + return client.request("modrinth-metadata-link-platforms", params, options); + } + + /** + * modrinth-metadata-link-platforms (GET /modrinth/metadata/link-platforms). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object metadataLinkPlatforms() { + return metadataLinkPlatforms(Map.of(), null); + } + + /** + * modrinth-metadata-loader-fields (GET /modrinth/metadata/loader-fields). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object metadataLoaderFields(Map params) { + return metadataLoaderFields(params, null); + } + + /** + * modrinth-metadata-loader-fields (GET /modrinth/metadata/loader-fields). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object metadataLoaderFields(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-metadata-loader-fields", params); + return client.request("modrinth-metadata-loader-fields", params, options); + } + + /** + * modrinth-metadata-loader-fields (GET /modrinth/metadata/loader-fields). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object metadataLoaderFields() { + return metadataLoaderFields(Map.of(), null); + } + + /** + * modrinth-metadata-loader-field-values (GET /modrinth/metadata/loader-fields/{field}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object metadataLoaderFieldValues(Map params) { + return metadataLoaderFieldValues(params, null); + } + + /** + * modrinth-metadata-loader-field-values (GET /modrinth/metadata/loader-fields/{field}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object metadataLoaderFieldValues(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-metadata-loader-field-values", params); + return client.request("modrinth-metadata-loader-field-values", params, options); + } + + /** + * modrinth-metadata-loaders (GET /modrinth/metadata/loaders). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object metadataLoaders(Map params) { + return metadataLoaders(params, null); + } + + /** + * modrinth-metadata-loaders (GET /modrinth/metadata/loaders). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object metadataLoaders(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-metadata-loaders", params); + return client.request("modrinth-metadata-loaders", params, options); + } + + /** + * modrinth-metadata-loaders (GET /modrinth/metadata/loaders). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object metadataLoaders() { + return metadataLoaders(Map.of(), null); + } + + /** + * modrinth-organization (GET /modrinth/organization/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object organization(Map params) { + return organization(params, null); + } + + /** + * modrinth-organization (GET /modrinth/organization/{id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object organization(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-organization", params); + return client.request("modrinth-organization", params, options); + } + + /** + * modrinth-organization-projects (GET /modrinth/organization/{id}/projects). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object organizationProjects(Map params) { + return organizationProjects(params, null); + } + + /** + * modrinth-organization-projects (GET /modrinth/organization/{id}/projects). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object organizationProjects(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-organization-projects", params); + return client.request("modrinth-organization-projects", params, options); + } + + /** + * modrinth-organizations (GET /modrinth/organizations). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object organizations(Map params) { + return organizations(params, null); + } + + /** + * modrinth-organizations (GET /modrinth/organizations). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object organizations(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-organizations", params); + return client.request("modrinth-organizations", params, options); + } + + /** + * modrinth-project (GET /modrinth/project/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object project(Map params) { + return project(params, null); + } + + /** + * modrinth-project (GET /modrinth/project/{id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object project(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-project", params); + return client.request("modrinth-project", params, options); + } + + /** + * modrinth-check-project (GET /modrinth/project/{id}/check). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object checkProject(Map params) { + return checkProject(params, null); + } + + /** + * modrinth-check-project (GET /modrinth/project/{id}/check). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object checkProject(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-check-project", params); + return client.request("modrinth-check-project", params, options); + } + + /** + * modrinth-dependencies (GET /modrinth/project/{id}/dependencies). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dependencies(Map params) { + return dependencies(params, null); + } + + /** + * modrinth-dependencies (GET /modrinth/project/{id}/dependencies). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dependencies(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-dependencies", params); + return client.request("modrinth-dependencies", params, options); + } + + /** + * modrinth-project-disclosures (GET /modrinth/project/{id}/disclosures). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object projectDisclosures(Map params) { + return projectDisclosures(params, null); + } + + /** + * modrinth-project-disclosures (GET /modrinth/project/{id}/disclosures). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object projectDisclosures(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-project-disclosures", params); + return client.request("modrinth-project-disclosures", params, options); + } + + /** + * modrinth-project-versions (GET /modrinth/project/{id}/version). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object projectVersions(Map params) { + return projectVersions(params, null); + } + + /** + * modrinth-project-versions (GET /modrinth/project/{id}/version). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object projectVersions(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-project-versions", params); + return client.request("modrinth-project-versions", params, options); + } + + /** + * modrinth-project-version (GET /modrinth/project/{id}/version/{number}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object projectVersion(Map params) { + return projectVersion(params, null); + } + + /** + * modrinth-project-version (GET /modrinth/project/{id}/version/{number}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object projectVersion(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-project-version", params); + return client.request("modrinth-project-version", params, options); + } + + /** + * modrinth-projects (GET /modrinth/projects). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object projects(Map params) { + return projects(params, null); + } + + /** + * modrinth-projects (GET /modrinth/projects). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object projects(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-projects", params); + return client.request("modrinth-projects", params, options); + } + + /** + * modrinth-random-projects (GET /modrinth/projects_random). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object randomProjects(Map params) { + return randomProjects(params, null); + } + + /** + * modrinth-random-projects (GET /modrinth/projects_random). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object randomProjects(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-random-projects", params); + return client.request("modrinth-random-projects", params, options); + } + + /** + * modrinth-search (GET /modrinth/search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object search(Map params) { + return search(params, null); + } + + /** + * modrinth-search (GET /modrinth/search). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object search(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-search", params); + return client.request("modrinth-search", params, options); + } + + /** + * modrinth-search (GET /modrinth/search). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object search() { + return search(Map.of(), null); + } + + /** + * modrinth-statistics (GET /modrinth/statistics). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statistics(Map params) { + return statistics(params, null); + } + + /** + * modrinth-statistics (GET /modrinth/statistics). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statistics(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-statistics", params); + return client.request("modrinth-statistics", params, options); + } + + /** + * modrinth-statistics (GET /modrinth/statistics). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statistics() { + return statistics(Map.of(), null); + } + + /** + * modrinth-license (GET /modrinth/tag/license/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object license(Map params) { + return license(params, null); + } + + /** + * modrinth-license (GET /modrinth/tag/license/{id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object license(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-license", params); + return client.request("modrinth-license", params, options); + } + + /** + * modrinth-tags (GET /modrinth/tag/{type}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object tags(Map params) { + return tags(params, null); + } + + /** + * modrinth-tags (GET /modrinth/tag/{type}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object tags(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-tags", params); + return client.request("modrinth-tags", params, options); + } + + /** + * modrinth-forge-updates (GET /modrinth/updates/{id}/forge_updates.json). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object forgeUpdates(Map params) { + return forgeUpdates(params, null); + } + + /** + * modrinth-forge-updates (GET /modrinth/updates/{id}/forge_updates.json). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object forgeUpdates(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-forge-updates", params); + return client.request("modrinth-forge-updates", params, options); + } + + /** + * modrinth-search-v3 (GET /modrinth/v3/search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object searchV3(Map params) { + return searchV3(params, null); + } + + /** + * modrinth-search-v3 (GET /modrinth/v3/search). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object searchV3(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-search-v3", params); + return client.request("modrinth-search-v3", params, options); + } + + /** + * modrinth-search-v3 (GET /modrinth/v3/search). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object searchV3() { + return searchV3(Map.of(), null); + } + + /** + * modrinth-search-v3-body (POST /modrinth/v3/search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object searchV3Body(Map params) { + return searchV3Body(params, null); + } + + /** + * modrinth-search-v3-body (POST /modrinth/v3/search). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object searchV3Body(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-search-v3-body", params); + return client.request("modrinth-search-v3-body", params, options); + } + + /** + * modrinth-search-v3-options (GET /modrinth/v3/search/options). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object searchV3Options(Map params) { + return searchV3Options(params, null); + } + + /** + * modrinth-search-v3-options (GET /modrinth/v3/search/options). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object searchV3Options(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-search-v3-options", params); + return client.request("modrinth-search-v3-options", params, options); + } + + /** + * modrinth-search-v3-options (GET /modrinth/v3/search/options). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object searchV3Options() { + return searchV3Options(Map.of(), null); + } + + /** + * modrinth-version (GET /modrinth/version/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object version(Map params) { + return version(params, null); + } + + /** + * modrinth-version (GET /modrinth/version/{id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object version(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-version", params); + return client.request("modrinth-version", params, options); + } + + /** + * modrinth-file-projects (POST /modrinth/version_file/project). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fileProjects(Map params) { + return fileProjects(params, null); + } + + /** + * modrinth-file-projects (POST /modrinth/version_file/project). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fileProjects(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-file-projects", params); + return client.request("modrinth-file-projects", params, options); + } + + /** + * modrinth-file-version (GET /modrinth/version_file/{hash}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fileVersion(Map params) { + return fileVersion(params, null); + } + + /** + * modrinth-file-version (GET /modrinth/version_file/{hash}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fileVersion(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-file-version", params); + return client.request("modrinth-file-version", params, options); + } + + /** + * modrinth-file-update (POST /modrinth/version_file/{hash}/update). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fileUpdate(Map params) { + return fileUpdate(params, null); + } + + /** + * modrinth-file-update (POST /modrinth/version_file/{hash}/update). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fileUpdate(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-file-update", params); + return client.request("modrinth-file-update", params, options); + } + + /** + * modrinth-file-versions (POST /modrinth/version_files). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fileVersions(Map params) { + return fileVersions(params, null); + } + + /** + * modrinth-file-versions (POST /modrinth/version_files). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object fileVersions(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-file-versions", params); + return client.request("modrinth-file-versions", params, options); + } + + /** + * modrinth-files-update (POST /modrinth/version_files/update). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object filesUpdate(Map params) { + return filesUpdate(params, null); + } + + /** + * modrinth-files-update (POST /modrinth/version_files/update). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object filesUpdate(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-files-update", params); + return client.request("modrinth-files-update", params, options); + } + + /** + * modrinth-files-update-individual (POST /modrinth/version_files/update_individual). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object filesUpdateIndividual(Map params) { + return filesUpdateIndividual(params, null); + } + + /** + * modrinth-files-update-individual (POST /modrinth/version_files/update_individual). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object filesUpdateIndividual(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-files-update-individual", params); + return client.request("modrinth-files-update-individual", params, options); + } + + /** + * modrinth-files-update-many (POST /modrinth/version_files/update_many). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object filesUpdateMany(Map params) { + return filesUpdateMany(params, null); + } + + /** + * modrinth-files-update-many (POST /modrinth/version_files/update_many). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object filesUpdateMany(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-files-update-many", params); + return client.request("modrinth-files-update-many", params, options); + } + + /** + * modrinth-versions (GET /modrinth/versions). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object versions(Map params) { + return versions(params, null); + } + + /** + * modrinth-versions (GET /modrinth/versions). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object versions(Map params, RequestOptions options) { + OperationGroup.checkParams("modrinth-versions", params); + return client.request("modrinth-versions", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/MotoGpGroup.java b/src/main/java/net/crawlora/groups/MotoGpGroup.java new file mode 100644 index 0000000..79c69e2 --- /dev/null +++ b/src/main/java/net/crawlora/groups/MotoGpGroup.java @@ -0,0 +1,497 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "motoGp" operation group. + * Reach it via {@code client.motoGp()}. + */ +public final class MotoGpGroup { + private final CrawloraClient client; + + public MotoGpGroup(CrawloraClient client) { + this.client = client; + } + + /** + * motogp-bmw-award (GET /motogp/bmw-award). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpBmwAward(Map params) { + return motogpBmwAward(params, null); + } + + /** + * motogp-bmw-award (GET /motogp/bmw-award). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpBmwAward(Map params, RequestOptions options) { + OperationGroup.checkParams("motogp-bmw-award", params); + return client.request("motogp-bmw-award", params, options); + } + + /** + * motogp-categories (GET /motogp/categories). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpCategories(Map params) { + return motogpCategories(params, null); + } + + /** + * motogp-categories (GET /motogp/categories). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpCategories(Map params, RequestOptions options) { + OperationGroup.checkParams("motogp-categories", params); + return client.request("motogp-categories", params, options); + } + + /** + * motogp-categories (GET /motogp/categories). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpCategories() { + return motogpCategories(Map.of(), null); + } + + /** + * motogp-circuit-poles (GET /motogp/circuit-poles). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpCircuitPoles(Map params) { + return motogpCircuitPoles(params, null); + } + + /** + * motogp-circuit-poles (GET /motogp/circuit-poles). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpCircuitPoles(Map params, RequestOptions options) { + OperationGroup.checkParams("motogp-circuit-poles", params); + return client.request("motogp-circuit-poles", params, options); + } + + /** + * motogp-circuit-records (GET /motogp/circuit-records). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpCircuitRecords(Map params) { + return motogpCircuitRecords(params, null); + } + + /** + * motogp-circuit-records (GET /motogp/circuit-records). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpCircuitRecords(Map params, RequestOptions options) { + OperationGroup.checkParams("motogp-circuit-records", params); + return client.request("motogp-circuit-records", params, options); + } + + /** + * motogp-circuit-wins (GET /motogp/circuit-wins). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpCircuitWins(Map params) { + return motogpCircuitWins(params, null); + } + + /** + * motogp-circuit-wins (GET /motogp/circuit-wins). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpCircuitWins(Map params, RequestOptions options) { + OperationGroup.checkParams("motogp-circuit-wins", params); + return client.request("motogp-circuit-wins", params, options); + } + + /** + * motogp-classifications (GET /motogp/classifications). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpClassifications(Map params) { + return motogpClassifications(params, null); + } + + /** + * motogp-classifications (GET /motogp/classifications). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpClassifications(Map params, RequestOptions options) { + OperationGroup.checkParams("motogp-classifications", params); + return client.request("motogp-classifications", params, options); + } + + /** + * motogp-content-categories (GET /motogp/content/categories). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpContentCategories(Map params) { + return motogpContentCategories(params, null); + } + + /** + * motogp-content-categories (GET /motogp/content/categories). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpContentCategories(Map params, RequestOptions options) { + OperationGroup.checkParams("motogp-content-categories", params); + return client.request("motogp-content-categories", params, options); + } + + /** + * motogp-content-events (GET /motogp/content/events). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpContentEvents(Map params) { + return motogpContentEvents(params, null); + } + + /** + * motogp-content-events (GET /motogp/content/events). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpContentEvents(Map params, RequestOptions options) { + OperationGroup.checkParams("motogp-content-events", params); + return client.request("motogp-content-events", params, options); + } + + /** + * motogp-content-event (GET /motogp/content/events/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpContentEvent(Map params) { + return motogpContentEvent(params, null); + } + + /** + * motogp-content-event (GET /motogp/content/events/{id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpContentEvent(Map params, RequestOptions options) { + OperationGroup.checkParams("motogp-content-event", params); + return client.request("motogp-content-event", params, options); + } + + /** + * motogp-latest-session (GET /motogp/content/sessions/latest). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpLatestSession(Map params) { + return motogpLatestSession(params, null); + } + + /** + * motogp-latest-session (GET /motogp/content/sessions/latest). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpLatestSession(Map params, RequestOptions options) { + OperationGroup.checkParams("motogp-latest-session", params); + return client.request("motogp-latest-session", params, options); + } + + /** + * motogp-latest-session (GET /motogp/content/sessions/latest). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpLatestSession() { + return motogpLatestSession(Map.of(), null); + } + + /** + * motogp-next-live-session (GET /motogp/content/sessions/next-live). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpNextLiveSession(Map params) { + return motogpNextLiveSession(params, null); + } + + /** + * motogp-next-live-session (GET /motogp/content/sessions/next-live). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpNextLiveSession(Map params, RequestOptions options) { + OperationGroup.checkParams("motogp-next-live-session", params); + return client.request("motogp-next-live-session", params, options); + } + + /** + * motogp-next-live-session (GET /motogp/content/sessions/next-live). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpNextLiveSession() { + return motogpNextLiveSession(Map.of(), null); + } + + /** + * motogp-entry-list (GET /motogp/entries). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpEntryList(Map params) { + return motogpEntryList(params, null); + } + + /** + * motogp-entry-list (GET /motogp/entries). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpEntryList(Map params, RequestOptions options) { + OperationGroup.checkParams("motogp-entry-list", params); + return client.request("motogp-entry-list", params, options); + } + + /** + * motogp-entry-grid-options (GET /motogp/entry-grid-options/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpEntryGridOptions(Map params) { + return motogpEntryGridOptions(params, null); + } + + /** + * motogp-entry-grid-options (GET /motogp/entry-grid-options/{id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpEntryGridOptions(Map params, RequestOptions options) { + OperationGroup.checkParams("motogp-entry-grid-options", params); + return client.request("motogp-entry-grid-options", params, options); + } + + /** + * motogp-event-files (GET /motogp/event-files). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpEventFiles(Map params) { + return motogpEventFiles(params, null); + } + + /** + * motogp-event-files (GET /motogp/event-files). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpEventFiles(Map params, RequestOptions options) { + OperationGroup.checkParams("motogp-event-files", params); + return client.request("motogp-event-files", params, options); + } + + /** + * motogp-events (GET /motogp/events). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpEvents(Map params) { + return motogpEvents(params, null); + } + + /** + * motogp-events (GET /motogp/events). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpEvents(Map params, RequestOptions options) { + OperationGroup.checkParams("motogp-events", params); + return client.request("motogp-events", params, options); + } + + /** + * motogp-seasons (GET /motogp/seasons). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpSeasons(Map params) { + return motogpSeasons(params, null); + } + + /** + * motogp-seasons (GET /motogp/seasons). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpSeasons(Map params, RequestOptions options) { + OperationGroup.checkParams("motogp-seasons", params); + return client.request("motogp-seasons", params, options); + } + + /** + * motogp-seasons (GET /motogp/seasons). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpSeasons() { + return motogpSeasons(Map.of(), null); + } + + /** + * motogp-sessions (GET /motogp/sessions). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpSessions(Map params) { + return motogpSessions(params, null); + } + + /** + * motogp-sessions (GET /motogp/sessions). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpSessions(Map params, RequestOptions options) { + OperationGroup.checkParams("motogp-sessions", params); + return client.request("motogp-sessions", params, options); + } + + /** + * motogp-standings (GET /motogp/standings). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpStandings(Map params) { + return motogpStandings(params, null); + } + + /** + * motogp-standings (GET /motogp/standings). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpStandings(Map params, RequestOptions options) { + OperationGroup.checkParams("motogp-standings", params); + return client.request("motogp-standings", params, options); + } + + /** + * motogp-standings-files (GET /motogp/standings-files). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpStandingsFiles(Map params) { + return motogpStandingsFiles(params, null); + } + + /** + * motogp-standings-files (GET /motogp/standings-files). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpStandingsFiles(Map params, RequestOptions options) { + OperationGroup.checkParams("motogp-standings-files", params); + return client.request("motogp-standings-files", params, options); + } + + /** + * motogp-starting-grid (GET /motogp/starting-grid). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpStartingGrid(Map params) { + return motogpStartingGrid(params, null); + } + + /** + * motogp-starting-grid (GET /motogp/starting-grid). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motogpStartingGrid(Map params, RequestOptions options) { + OperationGroup.checkParams("motogp-starting-grid", params); + return client.request("motogp-starting-grid", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/NascarGroup.java b/src/main/java/net/crawlora/groups/NascarGroup.java new file mode 100644 index 0000000..2e3c729 --- /dev/null +++ b/src/main/java/net/crawlora/groups/NascarGroup.java @@ -0,0 +1,158 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "nascar" operation group. + * Reach it via {@code client.nascar()}. + */ +public final class NascarGroup { + private final CrawloraClient client; + + public NascarGroup(CrawloraClient client) { + this.client = client; + } + + /** + * nascar-live-feed (GET /nascar/live-feed). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object liveFeed(Map params) { + return liveFeed(params, null); + } + + /** + * nascar-live-feed (GET /nascar/live-feed). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object liveFeed(Map params, RequestOptions options) { + OperationGroup.checkParams("nascar-live-feed", params); + return client.request("nascar-live-feed", params, options); + } + + /** + * nascar-live-feed (GET /nascar/live-feed). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object liveFeed() { + return liveFeed(Map.of(), null); + } + + /** + * nascar-races (GET /nascar/races). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object races(Map params) { + return races(params, null); + } + + /** + * nascar-races (GET /nascar/races). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object races(Map params, RequestOptions options) { + OperationGroup.checkParams("nascar-races", params); + return client.request("nascar-races", params, options); + } + + /** + * nascar-races (GET /nascar/races). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object races() { + return races(Map.of(), null); + } + + /** + * nascar-season-races (GET /nascar/races/{season}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object seasonRaces(Map params) { + return seasonRaces(params, null); + } + + /** + * nascar-season-races (GET /nascar/races/{season}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object seasonRaces(Map params, RequestOptions options) { + OperationGroup.checkParams("nascar-season-races", params); + return client.request("nascar-season-races", params, options); + } + + /** + * nascar-series (GET /nascar/series). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object series(Map params) { + return series(params, null); + } + + /** + * nascar-series (GET /nascar/series). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object series(Map params, RequestOptions options) { + OperationGroup.checkParams("nascar-series", params); + return client.request("nascar-series", params, options); + } + + /** + * nascar-series (GET /nascar/series). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object series() { + return series(Map.of(), null); + } + + /** + * nascar-race-weekend (GET /nascar/weekend/{season}/{series}/{race}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object raceWeekend(Map params) { + return raceWeekend(params, null); + } + + /** + * nascar-race-weekend (GET /nascar/weekend/{season}/{series}/{race}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object raceWeekend(Map params, RequestOptions options) { + OperationGroup.checkParams("nascar-race-weekend", params); + return client.request("nascar-race-weekend", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/NbaGroup.java b/src/main/java/net/crawlora/groups/NbaGroup.java new file mode 100644 index 0000000..6306aa0 --- /dev/null +++ b/src/main/java/net/crawlora/groups/NbaGroup.java @@ -0,0 +1,1006 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "nba" operation group. + * Reach it via {@code client.nba()}. + */ +public final class NbaGroup { + private final CrawloraClient client; + + public NbaGroup(CrawloraClient client) { + this.client = client; + } + + /** + * nba-box-score (GET /nba/box-score). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boxScore(Map params) { + return boxScore(params, null); + } + + /** + * nba-box-score (GET /nba/box-score). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boxScore(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-box-score", params); + return client.request("nba-box-score", params, options); + } + + /** + * nba-box-score-advanced (GET /nba/box-score-advanced). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boxScoreAdvanced(Map params) { + return boxScoreAdvanced(params, null); + } + + /** + * nba-box-score-advanced (GET /nba/box-score-advanced). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boxScoreAdvanced(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-box-score-advanced", params); + return client.request("nba-box-score-advanced", params, options); + } + + /** + * nba-box-score-four-factors (GET /nba/box-score-four-factors). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boxScoreFourFactors(Map params) { + return boxScoreFourFactors(params, null); + } + + /** + * nba-box-score-four-factors (GET /nba/box-score-four-factors). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boxScoreFourFactors(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-box-score-four-factors", params); + return client.request("nba-box-score-four-factors", params, options); + } + + /** + * nba-box-score-misc (GET /nba/box-score-misc). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boxScoreMisc(Map params) { + return boxScoreMisc(params, null); + } + + /** + * nba-box-score-misc (GET /nba/box-score-misc). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boxScoreMisc(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-box-score-misc", params); + return client.request("nba-box-score-misc", params, options); + } + + /** + * nba-box-score-player-track (GET /nba/box-score-player-track). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boxScorePlayerTrack(Map params) { + return boxScorePlayerTrack(params, null); + } + + /** + * nba-box-score-player-track (GET /nba/box-score-player-track). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boxScorePlayerTrack(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-box-score-player-track", params); + return client.request("nba-box-score-player-track", params, options); + } + + /** + * nba-box-score-scoring (GET /nba/box-score-scoring). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boxScoreScoring(Map params) { + return boxScoreScoring(params, null); + } + + /** + * nba-box-score-scoring (GET /nba/box-score-scoring). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boxScoreScoring(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-box-score-scoring", params); + return client.request("nba-box-score-scoring", params, options); + } + + /** + * nba-box-score-usage (GET /nba/box-score-usage). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boxScoreUsage(Map params) { + return boxScoreUsage(params, null); + } + + /** + * nba-box-score-usage (GET /nba/box-score-usage). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object boxScoreUsage(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-box-score-usage", params); + return client.request("nba-box-score-usage", params, options); + } + + /** + * nba-common-all-players (GET /nba/common-all-players). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object commonAllPlayers(Map params) { + return commonAllPlayers(params, null); + } + + /** + * nba-common-all-players (GET /nba/common-all-players). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object commonAllPlayers(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-common-all-players", params); + return client.request("nba-common-all-players", params, options); + } + + /** + * nba-common-all-players (GET /nba/common-all-players). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object commonAllPlayers() { + return commonAllPlayers(Map.of(), null); + } + + /** + * nba-draft-combine-anthro (GET /nba/draft-combine-anthro). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object draftCombineAnthro(Map params) { + return draftCombineAnthro(params, null); + } + + /** + * nba-draft-combine-anthro (GET /nba/draft-combine-anthro). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object draftCombineAnthro(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-draft-combine-anthro", params); + return client.request("nba-draft-combine-anthro", params, options); + } + + /** + * nba-enums (GET /nba/enums). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object enums(Map params) { + return enums(params, null); + } + + /** + * nba-enums (GET /nba/enums). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object enums(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-enums", params); + return client.request("nba-enums", params, options); + } + + /** + * nba-enums (GET /nba/enums). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object enums() { + return enums(Map.of(), null); + } + + /** + * nba-franchise-history (GET /nba/franchise-history). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object franchiseHistory(Map params) { + return franchiseHistory(params, null); + } + + /** + * nba-franchise-history (GET /nba/franchise-history). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object franchiseHistory(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-franchise-history", params); + return client.request("nba-franchise-history", params, options); + } + + /** + * nba-franchise-history (GET /nba/franchise-history). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object franchiseHistory() { + return franchiseHistory(Map.of(), null); + } + + /** + * nba-game-detail (GET /nba/game-detail). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object gameDetail(Map params) { + return gameDetail(params, null); + } + + /** + * nba-game-detail (GET /nba/game-detail). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object gameDetail(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-game-detail", params); + return client.request("nba-game-detail", params, options); + } + + /** + * nba-games (GET /nba/games). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object games(Map params) { + return games(params, null); + } + + /** + * nba-games (GET /nba/games). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object games(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-games", params); + return client.request("nba-games", params, options); + } + + /** + * nba-games (GET /nba/games). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object games() { + return games(Map.of(), null); + } + + /** + * nba-homepage-leaders (GET /nba/homepage-leaders). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object homepageLeaders(Map params) { + return homepageLeaders(params, null); + } + + /** + * nba-homepage-leaders (GET /nba/homepage-leaders). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object homepageLeaders(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-homepage-leaders", params); + return client.request("nba-homepage-leaders", params, options); + } + + /** + * nba-homepage-leaders (GET /nba/homepage-leaders). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object homepageLeaders() { + return homepageLeaders(Map.of(), null); + } + + /** + * nba-hustle-stats (GET /nba/hustle-stats). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object hustleStats(Map params) { + return hustleStats(params, null); + } + + /** + * nba-hustle-stats (GET /nba/hustle-stats). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object hustleStats(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-hustle-stats", params); + return client.request("nba-hustle-stats", params, options); + } + + /** + * nba-league-game-log (GET /nba/league-game-log). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object leagueGameLog(Map params) { + return leagueGameLog(params, null); + } + + /** + * nba-league-game-log (GET /nba/league-game-log). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object leagueGameLog(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-league-game-log", params); + return client.request("nba-league-game-log", params, options); + } + + /** + * nba-league-game-log (GET /nba/league-game-log). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object leagueGameLog() { + return leagueGameLog(Map.of(), null); + } + + /** + * nba-lineups (GET /nba/lineups). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object lineups(Map params) { + return lineups(params, null); + } + + /** + * nba-lineups (GET /nba/lineups). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object lineups(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-lineups", params); + return client.request("nba-lineups", params, options); + } + + /** + * nba-lineups (GET /nba/lineups). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object lineups() { + return lineups(Map.of(), null); + } + + /** + * nba-news (GET /nba/news). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object news(Map params) { + return news(params, null); + } + + /** + * nba-news (GET /nba/news). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object news(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-news", params); + return client.request("nba-news", params, options); + } + + /** + * nba-news (GET /nba/news). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object news() { + return news(Map.of(), null); + } + + /** + * nba-play-by-play (GET /nba/play-by-play). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object playByPlay(Map params) { + return playByPlay(params, null); + } + + /** + * nba-play-by-play (GET /nba/play-by-play). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object playByPlay(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-play-by-play", params); + return client.request("nba-play-by-play", params, options); + } + + /** + * nba-player-awards (GET /nba/player-awards). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object playerAwards(Map params) { + return playerAwards(params, null); + } + + /** + * nba-player-awards (GET /nba/player-awards). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object playerAwards(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-player-awards", params); + return client.request("nba-player-awards", params, options); + } + + /** + * nba-player-bio-stats (GET /nba/player-bio-stats). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object playerBioStats(Map params) { + return playerBioStats(params, null); + } + + /** + * nba-player-bio-stats (GET /nba/player-bio-stats). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object playerBioStats(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-player-bio-stats", params); + return client.request("nba-player-bio-stats", params, options); + } + + /** + * nba-player-bio-stats (GET /nba/player-bio-stats). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object playerBioStats() { + return playerBioStats(Map.of(), null); + } + + /** + * nba-player-career-stats (GET /nba/player-career-stats). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object playerCareerStats(Map params) { + return playerCareerStats(params, null); + } + + /** + * nba-player-career-stats (GET /nba/player-career-stats). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object playerCareerStats(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-player-career-stats", params); + return client.request("nba-player-career-stats", params, options); + } + + /** + * nba-player-dash-pt-shots (GET /nba/player-dash-pt-shots). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object playerDashPtShots(Map params) { + return playerDashPtShots(params, null); + } + + /** + * nba-player-dash-pt-shots (GET /nba/player-dash-pt-shots). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object playerDashPtShots(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-player-dash-pt-shots", params); + return client.request("nba-player-dash-pt-shots", params, options); + } + + /** + * nba-player-info (GET /nba/player-info). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object playerInfo(Map params) { + return playerInfo(params, null); + } + + /** + * nba-player-info (GET /nba/player-info). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object playerInfo(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-player-info", params); + return client.request("nba-player-info", params, options); + } + + /** + * nba-player-stats (GET /nba/player-stats). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object playerStats(Map params) { + return playerStats(params, null); + } + + /** + * nba-player-stats (GET /nba/player-stats). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object playerStats(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-player-stats", params); + return client.request("nba-player-stats", params, options); + } + + /** + * nba-player-stats (GET /nba/player-stats). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object playerStats() { + return playerStats(Map.of(), null); + } + + /** + * nba-players (GET /nba/players). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object players(Map params) { + return players(params, null); + } + + /** + * nba-players (GET /nba/players). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object players(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-players", params); + return client.request("nba-players", params, options); + } + + /** + * nba-players (GET /nba/players). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object players() { + return players(Map.of(), null); + } + + /** + * nba-playoff-picture (GET /nba/playoff-picture). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object playoffPicture(Map params) { + return playoffPicture(params, null); + } + + /** + * nba-playoff-picture (GET /nba/playoff-picture). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object playoffPicture(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-playoff-picture", params); + return client.request("nba-playoff-picture", params, options); + } + + /** + * nba-playoff-picture (GET /nba/playoff-picture). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object playoffPicture() { + return playoffPicture(Map.of(), null); + } + + /** + * nba-pt-defend (GET /nba/pt-defend). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object ptDefend(Map params) { + return ptDefend(params, null); + } + + /** + * nba-pt-defend (GET /nba/pt-defend). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object ptDefend(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-pt-defend", params); + return client.request("nba-pt-defend", params, options); + } + + /** + * nba-pt-defend (GET /nba/pt-defend). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object ptDefend() { + return ptDefend(Map.of(), null); + } + + /** + * nba-pt-stats (GET /nba/pt-stats). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object ptStats(Map params) { + return ptStats(params, null); + } + + /** + * nba-pt-stats (GET /nba/pt-stats). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object ptStats(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-pt-stats", params); + return client.request("nba-pt-stats", params, options); + } + + /** + * nba-pt-stats (GET /nba/pt-stats). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object ptStats() { + return ptStats(Map.of(), null); + } + + /** + * nba-scoreboard (GET /nba/scoreboard). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object scoreboard(Map params) { + return scoreboard(params, null); + } + + /** + * nba-scoreboard (GET /nba/scoreboard). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object scoreboard(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-scoreboard", params); + return client.request("nba-scoreboard", params, options); + } + + /** + * nba-scoreboard (GET /nba/scoreboard). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object scoreboard() { + return scoreboard(Map.of(), null); + } + + /** + * nba-standings (GET /nba/standings). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object standings(Map params) { + return standings(params, null); + } + + /** + * nba-standings (GET /nba/standings). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object standings(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-standings", params); + return client.request("nba-standings", params, options); + } + + /** + * nba-standings (GET /nba/standings). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object standings() { + return standings(Map.of(), null); + } + + /** + * nba-synergy-play-types (GET /nba/synergy-play-types). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object synergyPlayTypes(Map params) { + return synergyPlayTypes(params, null); + } + + /** + * nba-synergy-play-types (GET /nba/synergy-play-types). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object synergyPlayTypes(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-synergy-play-types", params); + return client.request("nba-synergy-play-types", params, options); + } + + /** + * nba-synergy-play-types (GET /nba/synergy-play-types). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object synergyPlayTypes() { + return synergyPlayTypes(Map.of(), null); + } + + /** + * nba-team-details (GET /nba/team-details). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teamDetails(Map params) { + return teamDetails(params, null); + } + + /** + * nba-team-details (GET /nba/team-details). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teamDetails(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-team-details", params); + return client.request("nba-team-details", params, options); + } + + /** + * nba-team-roster (GET /nba/team-roster). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teamRoster(Map params) { + return teamRoster(params, null); + } + + /** + * nba-team-roster (GET /nba/team-roster). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teamRoster(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-team-roster", params); + return client.request("nba-team-roster", params, options); + } + + /** + * nba-team-shot-locations (GET /nba/team-shot-locations). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teamShotLocations(Map params) { + return teamShotLocations(params, null); + } + + /** + * nba-team-shot-locations (GET /nba/team-shot-locations). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teamShotLocations(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-team-shot-locations", params); + return client.request("nba-team-shot-locations", params, options); + } + + /** + * nba-team-shot-locations (GET /nba/team-shot-locations). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teamShotLocations() { + return teamShotLocations(Map.of(), null); + } + + /** + * nba-team-stats (GET /nba/team-stats). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teamStats(Map params) { + return teamStats(params, null); + } + + /** + * nba-team-stats (GET /nba/team-stats). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teamStats(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-team-stats", params); + return client.request("nba-team-stats", params, options); + } + + /** + * nba-team-stats (GET /nba/team-stats). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teamStats() { + return teamStats(Map.of(), null); + } + + /** + * nba-team-stats-leaders (GET /nba/team-stats-leaders). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teamStatsLeaders(Map params) { + return teamStatsLeaders(params, null); + } + + /** + * nba-team-stats-leaders (GET /nba/team-stats-leaders). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object teamStatsLeaders(Map params, RequestOptions options) { + OperationGroup.checkParams("nba-team-stats-leaders", params); + return client.request("nba-team-stats-leaders", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/NetShortGroup.java b/src/main/java/net/crawlora/groups/NetShortGroup.java new file mode 100644 index 0000000..8c3f9ac --- /dev/null +++ b/src/main/java/net/crawlora/groups/NetShortGroup.java @@ -0,0 +1,233 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "netShort" operation group. + * Reach it via {@code client.netShort()}. + */ +public final class NetShortGroup { + private final CrawloraClient client; + + public NetShortGroup(CrawloraClient client) { + this.client = client; + } + + /** + * netshort-browse (GET /netshort/browse). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object netshortBrowse(Map params) { + return netshortBrowse(params, null); + } + + /** + * netshort-browse (GET /netshort/browse). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object netshortBrowse(Map params, RequestOptions options) { + OperationGroup.checkParams("netshort-browse", params); + return client.request("netshort-browse", params, options); + } + + /** + * netshort-browse (GET /netshort/browse). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object netshortBrowse() { + return netshortBrowse(Map.of(), null); + } + + /** + * netshort-genres (GET /netshort/genres). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object netshortGenres(Map params) { + return netshortGenres(params, null); + } + + /** + * netshort-genres (GET /netshort/genres). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object netshortGenres(Map params, RequestOptions options) { + OperationGroup.checkParams("netshort-genres", params); + return client.request("netshort-genres", params, options); + } + + /** + * netshort-genres (GET /netshort/genres). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object netshortGenres() { + return netshortGenres(Map.of(), null); + } + + /** + * netshort-home (GET /netshort/home). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object netshortHome(Map params) { + return netshortHome(params, null); + } + + /** + * netshort-home (GET /netshort/home). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object netshortHome(Map params, RequestOptions options) { + OperationGroup.checkParams("netshort-home", params); + return client.request("netshort-home", params, options); + } + + /** + * netshort-home (GET /netshort/home). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object netshortHome() { + return netshortHome(Map.of(), null); + } + + /** + * netshort-label (GET /netshort/label). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object netshortLabel(Map params) { + return netshortLabel(params, null); + } + + /** + * netshort-label (GET /netshort/label). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object netshortLabel(Map params, RequestOptions options) { + OperationGroup.checkParams("netshort-label", params); + return client.request("netshort-label", params, options); + } + + /** + * netshort-plots (GET /netshort/plots). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object netshortPlots(Map params) { + return netshortPlots(params, null); + } + + /** + * netshort-plots (GET /netshort/plots). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object netshortPlots(Map params, RequestOptions options) { + OperationGroup.checkParams("netshort-plots", params); + return client.request("netshort-plots", params, options); + } + + /** + * netshort-plots (GET /netshort/plots). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object netshortPlots() { + return netshortPlots(Map.of(), null); + } + + /** + * netshort-search (GET /netshort/search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object netshortSearch(Map params) { + return netshortSearch(params, null); + } + + /** + * netshort-search (GET /netshort/search). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object netshortSearch(Map params, RequestOptions options) { + OperationGroup.checkParams("netshort-search", params); + return client.request("netshort-search", params, options); + } + + /** + * netshort-title (GET /netshort/title). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object netshortTitle(Map params) { + return netshortTitle(params, null); + } + + /** + * netshort-title (GET /netshort/title). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object netshortTitle(Map params, RequestOptions options) { + OperationGroup.checkParams("netshort-title", params); + return client.request("netshort-title", params, options); + } + + /** + * netshort-toplist (GET /netshort/toplist). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object netshortToplist(Map params) { + return netshortToplist(params, null); + } + + /** + * netshort-toplist (GET /netshort/toplist). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object netshortToplist(Map params, RequestOptions options) { + OperationGroup.checkParams("netshort-toplist", params); + return client.request("netshort-toplist", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/NfhsGroup.java b/src/main/java/net/crawlora/groups/NfhsGroup.java new file mode 100644 index 0000000..48880a7 --- /dev/null +++ b/src/main/java/net/crawlora/groups/NfhsGroup.java @@ -0,0 +1,476 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "nfhs" operation group. + * Reach it via {@code client.nfhs()}. + */ +public final class NfhsGroup { + private final CrawloraClient client; + + public NfhsGroup(CrawloraClient client) { + this.client = client; + } + + /** + * nfhs-activities (GET /nfhs/activities). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object activities(Map params) { + return activities(params, null); + } + + /** + * nfhs-activities (GET /nfhs/activities). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object activities(Map params, RequestOptions options) { + OperationGroup.checkParams("nfhs-activities", params); + return client.request("nfhs-activities", params, options); + } + + /** + * nfhs-activities (GET /nfhs/activities). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object activities() { + return activities(Map.of(), null); + } + + /** + * nfhs-affiliates (GET /nfhs/affiliates). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object affiliates(Map params) { + return affiliates(params, null); + } + + /** + * nfhs-affiliates (GET /nfhs/affiliates). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object affiliates(Map params, RequestOptions options) { + OperationGroup.checkParams("nfhs-affiliates", params); + return client.request("nfhs-affiliates", params, options); + } + + /** + * nfhs-affiliates (GET /nfhs/affiliates). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object affiliates() { + return affiliates(Map.of(), null); + } + + /** + * nfhs-affiliate (GET /nfhs/affiliates/{key}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object affiliate(Map params) { + return affiliate(params, null); + } + + /** + * nfhs-affiliate (GET /nfhs/affiliates/{key}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object affiliate(Map params, RequestOptions options) { + OperationGroup.checkParams("nfhs-affiliate", params); + return client.request("nfhs-affiliate", params, options); + } + + /** + * nfhs-associations (GET /nfhs/associations). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object associations(Map params) { + return associations(params, null); + } + + /** + * nfhs-associations (GET /nfhs/associations). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object associations(Map params, RequestOptions options) { + OperationGroup.checkParams("nfhs-associations", params); + return client.request("nfhs-associations", params, options); + } + + /** + * nfhs-associations (GET /nfhs/associations). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object associations() { + return associations(Map.of(), null); + } + + /** + * nfhs-association (GET /nfhs/associations/{key}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object association(Map params) { + return association(params, null); + } + + /** + * nfhs-association (GET /nfhs/associations/{key}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object association(Map params, RequestOptions options) { + OperationGroup.checkParams("nfhs-association", params); + return client.request("nfhs-association", params, options); + } + + /** + * nfhs-events (GET /nfhs/events). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object events(Map params) { + return events(params, null); + } + + /** + * nfhs-events (GET /nfhs/events). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object events(Map params, RequestOptions options) { + OperationGroup.checkParams("nfhs-events", params); + return client.request("nfhs-events", params, options); + } + + /** + * nfhs-events (GET /nfhs/events). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object events() { + return events(Map.of(), null); + } + + /** + * nfhs-event (GET /nfhs/events/{key}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object event(Map params) { + return event(params, null); + } + + /** + * nfhs-event (GET /nfhs/events/{key}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object event(Map params, RequestOptions options) { + OperationGroup.checkParams("nfhs-event", params); + return client.request("nfhs-event", params, options); + } + + /** + * nfhs-filters (GET /nfhs/filters). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object filters(Map params) { + return filters(params, null); + } + + /** + * nfhs-filters (GET /nfhs/filters). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object filters(Map params, RequestOptions options) { + OperationGroup.checkParams("nfhs-filters", params); + return client.request("nfhs-filters", params, options); + } + + /** + * nfhs-filters (GET /nfhs/filters). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object filters() { + return filters(Map.of(), null); + } + + /** + * nfhs-highlights (GET /nfhs/highlights). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object highlights(Map params) { + return highlights(params, null); + } + + /** + * nfhs-highlights (GET /nfhs/highlights). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object highlights(Map params, RequestOptions options) { + OperationGroup.checkParams("nfhs-highlights", params); + return client.request("nfhs-highlights", params, options); + } + + /** + * nfhs-highlights (GET /nfhs/highlights). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object highlights() { + return highlights(Map.of(), null); + } + + /** + * nfhs-producer (GET /nfhs/producers/{key}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object producer(Map params) { + return producer(params, null); + } + + /** + * nfhs-producer (GET /nfhs/producers/{key}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object producer(Map params, RequestOptions options) { + OperationGroup.checkParams("nfhs-producer", params); + return client.request("nfhs-producer", params, options); + } + + /** + * nfhs-publisher (GET /nfhs/publishers/{key}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object publisher(Map params) { + return publisher(params, null); + } + + /** + * nfhs-publisher (GET /nfhs/publishers/{key}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object publisher(Map params, RequestOptions options) { + OperationGroup.checkParams("nfhs-publisher", params); + return client.request("nfhs-publisher", params, options); + } + + /** + * nfhs-schools (GET /nfhs/schools). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object schools(Map params) { + return schools(params, null); + } + + /** + * nfhs-schools (GET /nfhs/schools). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object schools(Map params, RequestOptions options) { + OperationGroup.checkParams("nfhs-schools", params); + return client.request("nfhs-schools", params, options); + } + + /** + * nfhs-schools (GET /nfhs/schools). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object schools() { + return schools(Map.of(), null); + } + + /** + * nfhs-school (GET /nfhs/schools/{key}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object school(Map params) { + return school(params, null); + } + + /** + * nfhs-school (GET /nfhs/schools/{key}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object school(Map params, RequestOptions options) { + OperationGroup.checkParams("nfhs-school", params); + return client.request("nfhs-school", params, options); + } + + /** + * nfhs-search (GET /nfhs/search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object search(Map params) { + return search(params, null); + } + + /** + * nfhs-search (GET /nfhs/search). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object search(Map params, RequestOptions options) { + OperationGroup.checkParams("nfhs-search", params); + return client.request("nfhs-search", params, options); + } + + /** + * nfhs-sports (GET /nfhs/sports). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sports(Map params) { + return sports(params, null); + } + + /** + * nfhs-sports (GET /nfhs/sports). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sports(Map params, RequestOptions options) { + OperationGroup.checkParams("nfhs-sports", params); + return client.request("nfhs-sports", params, options); + } + + /** + * nfhs-sports (GET /nfhs/sports). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sports() { + return sports(Map.of(), null); + } + + /** + * nfhs-states (GET /nfhs/states). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object states(Map params) { + return states(params, null); + } + + /** + * nfhs-states (GET /nfhs/states). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object states(Map params, RequestOptions options) { + OperationGroup.checkParams("nfhs-states", params); + return client.request("nfhs-states", params, options); + } + + /** + * nfhs-states (GET /nfhs/states). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object states() { + return states(Map.of(), null); + } + + /** + * nfhs-suggest (GET /nfhs/suggest). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object suggest(Map params) { + return suggest(params, null); + } + + /** + * nfhs-suggest (GET /nfhs/suggest). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object suggest(Map params, RequestOptions options) { + OperationGroup.checkParams("nfhs-suggest", params); + return client.request("nfhs-suggest", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/OpenDotaGroup.java b/src/main/java/net/crawlora/groups/OpenDotaGroup.java index 744b63c..d125254 100644 --- a/src/main/java/net/crawlora/groups/OpenDotaGroup.java +++ b/src/main/java/net/crawlora/groups/OpenDotaGroup.java @@ -93,6 +93,68 @@ public Object opendotaConstants(Map params, RequestOptions optio return client.request("opendota-constants", params, options); } + /** + * opendota-find-matches (GET /opendota/find-matches). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object opendotaFindMatches(Map params) { + return opendotaFindMatches(params, null); + } + + /** + * opendota-find-matches (GET /opendota/find-matches). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object opendotaFindMatches(Map params, RequestOptions options) { + OperationGroup.checkParams("opendota-find-matches", params); + return client.request("opendota-find-matches", params, options); + } + + /** + * opendota-find-matches (GET /opendota/find-matches). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object opendotaFindMatches() { + return opendotaFindMatches(Map.of(), null); + } + + /** + * opendota-hero-descriptions (GET /opendota/hero-descriptions). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object opendotaHeroDescriptions(Map params) { + return opendotaHeroDescriptions(params, null); + } + + /** + * opendota-hero-descriptions (GET /opendota/hero-descriptions). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object opendotaHeroDescriptions(Map params, RequestOptions options) { + OperationGroup.checkParams("opendota-hero-descriptions", params); + return client.request("opendota-hero-descriptions", params, options); + } + + /** + * opendota-hero-descriptions (GET /opendota/hero-descriptions). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object opendotaHeroDescriptions() { + return opendotaHeroDescriptions(Map.of(), null); + } + /** * opendota-hero-durations (GET /opendota/hero-durations). * @@ -137,6 +199,28 @@ public Object opendotaHeroItems(Map params, RequestOptions optio return client.request("opendota-hero-items", params, options); } + /** + * opendota-hero-matches (GET /opendota/hero-matches). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object opendotaHeroMatches(Map params) { + return opendotaHeroMatches(params, null); + } + + /** + * opendota-hero-matches (GET /opendota/hero-matches). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object opendotaHeroMatches(Map params, RequestOptions options) { + OperationGroup.checkParams("opendota-hero-matches", params); + return client.request("opendota-hero-matches", params, options); + } + /** * opendota-hero-matchups (GET /opendota/hero-matchups). * @@ -495,6 +579,37 @@ public Object opendotaProPlayers() { return opendotaProPlayers(Map.of(), null); } + /** + * opendota-public-matches (GET /opendota/public-matches). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object opendotaPublicMatches(Map params) { + return opendotaPublicMatches(params, null); + } + + /** + * opendota-public-matches (GET /opendota/public-matches). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object opendotaPublicMatches(Map params, RequestOptions options) { + OperationGroup.checkParams("opendota-public-matches", params); + return client.request("opendota-public-matches", params, options); + } + + /** + * opendota-public-matches (GET /opendota/public-matches). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object opendotaPublicMatches() { + return opendotaPublicMatches(Map.of(), null); + } + /** * opendota-rank-distribution (GET /opendota/rank-distribution). * diff --git a/src/main/java/net/crawlora/groups/OpenF1Group.java b/src/main/java/net/crawlora/groups/OpenF1Group.java new file mode 100644 index 0000000..d931a45 --- /dev/null +++ b/src/main/java/net/crawlora/groups/OpenF1Group.java @@ -0,0 +1,579 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "openF1" operation group. + * Reach it via {@code client.openF1()}. + */ +public final class OpenF1Group { + private final CrawloraClient client; + + public OpenF1Group(CrawloraClient client) { + this.client = client; + } + + /** + * openf1-car-data (GET /openf1/car-data). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1CarData(Map params) { + return openf1CarData(params, null); + } + + /** + * openf1-car-data (GET /openf1/car-data). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1CarData(Map params, RequestOptions options) { + OperationGroup.checkParams("openf1-car-data", params); + return client.request("openf1-car-data", params, options); + } + + /** + * openf1-car-data (GET /openf1/car-data). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1CarData() { + return openf1CarData(Map.of(), null); + } + + /** + * openf1-championship-drivers (GET /openf1/championship-drivers). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1ChampionshipDrivers(Map params) { + return openf1ChampionshipDrivers(params, null); + } + + /** + * openf1-championship-drivers (GET /openf1/championship-drivers). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1ChampionshipDrivers(Map params, RequestOptions options) { + OperationGroup.checkParams("openf1-championship-drivers", params); + return client.request("openf1-championship-drivers", params, options); + } + + /** + * openf1-championship-drivers (GET /openf1/championship-drivers). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1ChampionshipDrivers() { + return openf1ChampionshipDrivers(Map.of(), null); + } + + /** + * openf1-championship-teams (GET /openf1/championship-teams). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1ChampionshipTeams(Map params) { + return openf1ChampionshipTeams(params, null); + } + + /** + * openf1-championship-teams (GET /openf1/championship-teams). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1ChampionshipTeams(Map params, RequestOptions options) { + OperationGroup.checkParams("openf1-championship-teams", params); + return client.request("openf1-championship-teams", params, options); + } + + /** + * openf1-championship-teams (GET /openf1/championship-teams). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1ChampionshipTeams() { + return openf1ChampionshipTeams(Map.of(), null); + } + + /** + * openf1-drivers (GET /openf1/drivers). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Drivers(Map params) { + return openf1Drivers(params, null); + } + + /** + * openf1-drivers (GET /openf1/drivers). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Drivers(Map params, RequestOptions options) { + OperationGroup.checkParams("openf1-drivers", params); + return client.request("openf1-drivers", params, options); + } + + /** + * openf1-drivers (GET /openf1/drivers). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Drivers() { + return openf1Drivers(Map.of(), null); + } + + /** + * openf1-intervals (GET /openf1/intervals). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Intervals(Map params) { + return openf1Intervals(params, null); + } + + /** + * openf1-intervals (GET /openf1/intervals). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Intervals(Map params, RequestOptions options) { + OperationGroup.checkParams("openf1-intervals", params); + return client.request("openf1-intervals", params, options); + } + + /** + * openf1-intervals (GET /openf1/intervals). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Intervals() { + return openf1Intervals(Map.of(), null); + } + + /** + * openf1-laps (GET /openf1/laps). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Laps(Map params) { + return openf1Laps(params, null); + } + + /** + * openf1-laps (GET /openf1/laps). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Laps(Map params, RequestOptions options) { + OperationGroup.checkParams("openf1-laps", params); + return client.request("openf1-laps", params, options); + } + + /** + * openf1-laps (GET /openf1/laps). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Laps() { + return openf1Laps(Map.of(), null); + } + + /** + * openf1-location (GET /openf1/location). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Location(Map params) { + return openf1Location(params, null); + } + + /** + * openf1-location (GET /openf1/location). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Location(Map params, RequestOptions options) { + OperationGroup.checkParams("openf1-location", params); + return client.request("openf1-location", params, options); + } + + /** + * openf1-location (GET /openf1/location). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Location() { + return openf1Location(Map.of(), null); + } + + /** + * openf1-meetings (GET /openf1/meetings). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Meetings(Map params) { + return openf1Meetings(params, null); + } + + /** + * openf1-meetings (GET /openf1/meetings). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Meetings(Map params, RequestOptions options) { + OperationGroup.checkParams("openf1-meetings", params); + return client.request("openf1-meetings", params, options); + } + + /** + * openf1-meetings (GET /openf1/meetings). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Meetings() { + return openf1Meetings(Map.of(), null); + } + + /** + * openf1-overtakes (GET /openf1/overtakes). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Overtakes(Map params) { + return openf1Overtakes(params, null); + } + + /** + * openf1-overtakes (GET /openf1/overtakes). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Overtakes(Map params, RequestOptions options) { + OperationGroup.checkParams("openf1-overtakes", params); + return client.request("openf1-overtakes", params, options); + } + + /** + * openf1-overtakes (GET /openf1/overtakes). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Overtakes() { + return openf1Overtakes(Map.of(), null); + } + + /** + * openf1-pit (GET /openf1/pit). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Pit(Map params) { + return openf1Pit(params, null); + } + + /** + * openf1-pit (GET /openf1/pit). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Pit(Map params, RequestOptions options) { + OperationGroup.checkParams("openf1-pit", params); + return client.request("openf1-pit", params, options); + } + + /** + * openf1-pit (GET /openf1/pit). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Pit() { + return openf1Pit(Map.of(), null); + } + + /** + * openf1-position (GET /openf1/position). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Position(Map params) { + return openf1Position(params, null); + } + + /** + * openf1-position (GET /openf1/position). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Position(Map params, RequestOptions options) { + OperationGroup.checkParams("openf1-position", params); + return client.request("openf1-position", params, options); + } + + /** + * openf1-position (GET /openf1/position). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Position() { + return openf1Position(Map.of(), null); + } + + /** + * openf1-race-control (GET /openf1/race-control). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1RaceControl(Map params) { + return openf1RaceControl(params, null); + } + + /** + * openf1-race-control (GET /openf1/race-control). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1RaceControl(Map params, RequestOptions options) { + OperationGroup.checkParams("openf1-race-control", params); + return client.request("openf1-race-control", params, options); + } + + /** + * openf1-race-control (GET /openf1/race-control). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1RaceControl() { + return openf1RaceControl(Map.of(), null); + } + + /** + * openf1-session-result (GET /openf1/session-result). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1SessionResult(Map params) { + return openf1SessionResult(params, null); + } + + /** + * openf1-session-result (GET /openf1/session-result). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1SessionResult(Map params, RequestOptions options) { + OperationGroup.checkParams("openf1-session-result", params); + return client.request("openf1-session-result", params, options); + } + + /** + * openf1-session-result (GET /openf1/session-result). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1SessionResult() { + return openf1SessionResult(Map.of(), null); + } + + /** + * openf1-sessions (GET /openf1/sessions). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Sessions(Map params) { + return openf1Sessions(params, null); + } + + /** + * openf1-sessions (GET /openf1/sessions). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Sessions(Map params, RequestOptions options) { + OperationGroup.checkParams("openf1-sessions", params); + return client.request("openf1-sessions", params, options); + } + + /** + * openf1-sessions (GET /openf1/sessions). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Sessions() { + return openf1Sessions(Map.of(), null); + } + + /** + * openf1-starting-grid (GET /openf1/starting-grid). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1StartingGrid(Map params) { + return openf1StartingGrid(params, null); + } + + /** + * openf1-starting-grid (GET /openf1/starting-grid). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1StartingGrid(Map params, RequestOptions options) { + OperationGroup.checkParams("openf1-starting-grid", params); + return client.request("openf1-starting-grid", params, options); + } + + /** + * openf1-starting-grid (GET /openf1/starting-grid). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1StartingGrid() { + return openf1StartingGrid(Map.of(), null); + } + + /** + * openf1-stints (GET /openf1/stints). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Stints(Map params) { + return openf1Stints(params, null); + } + + /** + * openf1-stints (GET /openf1/stints). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Stints(Map params, RequestOptions options) { + OperationGroup.checkParams("openf1-stints", params); + return client.request("openf1-stints", params, options); + } + + /** + * openf1-stints (GET /openf1/stints). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Stints() { + return openf1Stints(Map.of(), null); + } + + /** + * openf1-team-radio (GET /openf1/team-radio). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1TeamRadio(Map params) { + return openf1TeamRadio(params, null); + } + + /** + * openf1-team-radio (GET /openf1/team-radio). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1TeamRadio(Map params, RequestOptions options) { + OperationGroup.checkParams("openf1-team-radio", params); + return client.request("openf1-team-radio", params, options); + } + + /** + * openf1-team-radio (GET /openf1/team-radio). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1TeamRadio() { + return openf1TeamRadio(Map.of(), null); + } + + /** + * openf1-weather (GET /openf1/weather). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Weather(Map params) { + return openf1Weather(params, null); + } + + /** + * openf1-weather (GET /openf1/weather). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Weather(Map params, RequestOptions options) { + OperationGroup.checkParams("openf1-weather", params); + return client.request("openf1-weather", params, options); + } + + /** + * openf1-weather (GET /openf1/weather). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openf1Weather() { + return openf1Weather(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/OpenLigaDbGroup.java b/src/main/java/net/crawlora/groups/OpenLigaDbGroup.java new file mode 100644 index 0000000..f78ef24 --- /dev/null +++ b/src/main/java/net/crawlora/groups/OpenLigaDbGroup.java @@ -0,0 +1,532 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "openLigaDb" operation group. + * Reach it via {@code client.openLigaDb()}. + */ +public final class OpenLigaDbGroup { + private final CrawloraClient client; + + public OpenLigaDbGroup(CrawloraClient client) { + this.client = client; + } + + /** + * openligadb-current-group (GET /openligadb/current-group). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbCurrentGroup(Map params) { + return openligadbCurrentGroup(params, null); + } + + /** + * openligadb-current-group (GET /openligadb/current-group). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbCurrentGroup(Map params, RequestOptions options) { + OperationGroup.checkParams("openligadb-current-group", params); + return client.request("openligadb-current-group", params, options); + } + + /** + * openligadb-current-matchday (GET /openligadb/current-matchday). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbCurrentMatchday(Map params) { + return openligadbCurrentMatchday(params, null); + } + + /** + * openligadb-current-matchday (GET /openligadb/current-matchday). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbCurrentMatchday(Map params, RequestOptions options) { + OperationGroup.checkParams("openligadb-current-matchday", params); + return client.request("openligadb-current-matchday", params, options); + } + + /** + * openligadb-goal-getters (GET /openligadb/goal-getters). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbGoalGetters(Map params) { + return openligadbGoalGetters(params, null); + } + + /** + * openligadb-goal-getters (GET /openligadb/goal-getters). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbGoalGetters(Map params, RequestOptions options) { + OperationGroup.checkParams("openligadb-goal-getters", params); + return client.request("openligadb-goal-getters", params, options); + } + + /** + * openligadb-groups (GET /openligadb/groups). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbGroups(Map params) { + return openligadbGroups(params, null); + } + + /** + * openligadb-groups (GET /openligadb/groups). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbGroups(Map params, RequestOptions options) { + OperationGroup.checkParams("openligadb-groups", params); + return client.request("openligadb-groups", params, options); + } + + /** + * openligadb-last-changed (GET /openligadb/last-changed). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbLastChanged(Map params) { + return openligadbLastChanged(params, null); + } + + /** + * openligadb-last-changed (GET /openligadb/last-changed). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbLastChanged(Map params, RequestOptions options) { + OperationGroup.checkParams("openligadb-last-changed", params); + return client.request("openligadb-last-changed", params, options); + } + + /** + * openligadb-last-match (GET /openligadb/last-match). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbLastMatch(Map params) { + return openligadbLastMatch(params, null); + } + + /** + * openligadb-last-match (GET /openligadb/last-match). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbLastMatch(Map params, RequestOptions options) { + OperationGroup.checkParams("openligadb-last-match", params); + return client.request("openligadb-last-match", params, options); + } + + /** + * openligadb-last-team-match (GET /openligadb/last-team-match). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbLastTeamMatch(Map params) { + return openligadbLastTeamMatch(params, null); + } + + /** + * openligadb-last-team-match (GET /openligadb/last-team-match). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbLastTeamMatch(Map params, RequestOptions options) { + OperationGroup.checkParams("openligadb-last-team-match", params); + return client.request("openligadb-last-team-match", params, options); + } + + /** + * openligadb-league-team-matches (GET /openligadb/league-team-matches). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbLeagueTeamMatches(Map params) { + return openligadbLeagueTeamMatches(params, null); + } + + /** + * openligadb-league-team-matches (GET /openligadb/league-team-matches). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbLeagueTeamMatches(Map params, RequestOptions options) { + OperationGroup.checkParams("openligadb-league-team-matches", params); + return client.request("openligadb-league-team-matches", params, options); + } + + /** + * openligadb-leagues (GET /openligadb/leagues). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbLeagues(Map params) { + return openligadbLeagues(params, null); + } + + /** + * openligadb-leagues (GET /openligadb/leagues). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbLeagues(Map params, RequestOptions options) { + OperationGroup.checkParams("openligadb-leagues", params); + return client.request("openligadb-leagues", params, options); + } + + /** + * openligadb-leagues (GET /openligadb/leagues). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbLeagues() { + return openligadbLeagues(Map.of(), null); + } + + /** + * openligadb-match (GET /openligadb/match). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbMatch(Map params) { + return openligadbMatch(params, null); + } + + /** + * openligadb-match (GET /openligadb/match). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbMatch(Map params, RequestOptions options) { + OperationGroup.checkParams("openligadb-match", params); + return client.request("openligadb-match", params, options); + } + + /** + * openligadb-matchday-matches (GET /openligadb/matchday-matches). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbMatchdayMatches(Map params) { + return openligadbMatchdayMatches(params, null); + } + + /** + * openligadb-matchday-matches (GET /openligadb/matchday-matches). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbMatchdayMatches(Map params, RequestOptions options) { + OperationGroup.checkParams("openligadb-matchday-matches", params); + return client.request("openligadb-matchday-matches", params, options); + } + + /** + * openligadb-league-matches (GET /openligadb/matches). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbLeagueMatches(Map params) { + return openligadbLeagueMatches(params, null); + } + + /** + * openligadb-league-matches (GET /openligadb/matches). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbLeagueMatches(Map params, RequestOptions options) { + OperationGroup.checkParams("openligadb-league-matches", params); + return client.request("openligadb-league-matches", params, options); + } + + /** + * openligadb-matches-by-team (GET /openligadb/matches-by-team). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbMatchesByTeam(Map params) { + return openligadbMatchesByTeam(params, null); + } + + /** + * openligadb-matches-by-team (GET /openligadb/matches-by-team). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbMatchesByTeam(Map params, RequestOptions options) { + OperationGroup.checkParams("openligadb-matches-by-team", params); + return client.request("openligadb-matches-by-team", params, options); + } + + /** + * openligadb-matches-by-team-id (GET /openligadb/matches-by-team-id). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbMatchesByTeamId(Map params) { + return openligadbMatchesByTeamId(params, null); + } + + /** + * openligadb-matches-by-team-id (GET /openligadb/matches-by-team-id). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbMatchesByTeamId(Map params, RequestOptions options) { + OperationGroup.checkParams("openligadb-matches-by-team-id", params); + return client.request("openligadb-matches-by-team-id", params, options); + } + + /** + * openligadb-next-match (GET /openligadb/next-match). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbNextMatch(Map params) { + return openligadbNextMatch(params, null); + } + + /** + * openligadb-next-match (GET /openligadb/next-match). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbNextMatch(Map params, RequestOptions options) { + OperationGroup.checkParams("openligadb-next-match", params); + return client.request("openligadb-next-match", params, options); + } + + /** + * openligadb-next-team-match (GET /openligadb/next-team-match). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbNextTeamMatch(Map params) { + return openligadbNextTeamMatch(params, null); + } + + /** + * openligadb-next-team-match (GET /openligadb/next-team-match). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbNextTeamMatch(Map params, RequestOptions options) { + OperationGroup.checkParams("openligadb-next-team-match", params); + return client.request("openligadb-next-team-match", params, options); + } + + /** + * openligadb-result-infos (GET /openligadb/result-infos). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbResultInfos(Map params) { + return openligadbResultInfos(params, null); + } + + /** + * openligadb-result-infos (GET /openligadb/result-infos). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbResultInfos(Map params, RequestOptions options) { + OperationGroup.checkParams("openligadb-result-infos", params); + return client.request("openligadb-result-infos", params, options); + } + + /** + * openligadb-result-types (GET /openligadb/result-types). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbResultTypes(Map params) { + return openligadbResultTypes(params, null); + } + + /** + * openligadb-result-types (GET /openligadb/result-types). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbResultTypes(Map params, RequestOptions options) { + OperationGroup.checkParams("openligadb-result-types", params); + return client.request("openligadb-result-types", params, options); + } + + /** + * openligadb-result-types (GET /openligadb/result-types). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbResultTypes() { + return openligadbResultTypes(Map.of(), null); + } + + /** + * openligadb-sports (GET /openligadb/sports). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbSports(Map params) { + return openligadbSports(params, null); + } + + /** + * openligadb-sports (GET /openligadb/sports). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbSports(Map params, RequestOptions options) { + OperationGroup.checkParams("openligadb-sports", params); + return client.request("openligadb-sports", params, options); + } + + /** + * openligadb-sports (GET /openligadb/sports). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbSports() { + return openligadbSports(Map.of(), null); + } + + /** + * openligadb-table (GET /openligadb/table). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbTable(Map params) { + return openligadbTable(params, null); + } + + /** + * openligadb-table (GET /openligadb/table). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbTable(Map params, RequestOptions options) { + OperationGroup.checkParams("openligadb-table", params); + return client.request("openligadb-table", params, options); + } + + /** + * openligadb-team-pair-matches (GET /openligadb/team-pair-matches). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbTeamPairMatches(Map params) { + return openligadbTeamPairMatches(params, null); + } + + /** + * openligadb-team-pair-matches (GET /openligadb/team-pair-matches). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbTeamPairMatches(Map params, RequestOptions options) { + OperationGroup.checkParams("openligadb-team-pair-matches", params); + return client.request("openligadb-team-pair-matches", params, options); + } + + /** + * openligadb-teams (GET /openligadb/teams). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbTeams(Map params) { + return openligadbTeams(params, null); + } + + /** + * openligadb-teams (GET /openligadb/teams). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object openligadbTeams(Map params, RequestOptions options) { + OperationGroup.checkParams("openligadb-teams", params); + return client.request("openligadb-teams", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/PartifulGroup.java b/src/main/java/net/crawlora/groups/PartifulGroup.java new file mode 100644 index 0000000..9e047b9 --- /dev/null +++ b/src/main/java/net/crawlora/groups/PartifulGroup.java @@ -0,0 +1,118 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "partiful" operation group. + * Reach it via {@code client.partiful()}. + */ +public final class PartifulGroup { + private final CrawloraClient client; + + public PartifulGroup(CrawloraClient client) { + this.client = client; + } + + /** + * partiful-city-facets (GET /partiful/city-facets). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object cityFacets(Map params) { + return cityFacets(params, null); + } + + /** + * partiful-city-facets (GET /partiful/city-facets). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object cityFacets(Map params, RequestOptions options) { + OperationGroup.checkParams("partiful-city-facets", params); + return client.request("partiful-city-facets", params, options); + } + + /** + * partiful-city-feed (GET /partiful/city-feed). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object cityFeed(Map params) { + return cityFeed(params, null); + } + + /** + * partiful-city-feed (GET /partiful/city-feed). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object cityFeed(Map params, RequestOptions options) { + OperationGroup.checkParams("partiful-city-feed", params); + return client.request("partiful-city-feed", params, options); + } + + /** + * partiful-event (GET /partiful/event). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object event(Map params) { + return event(params, null); + } + + /** + * partiful-event (GET /partiful/event). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object event(Map params, RequestOptions options) { + OperationGroup.checkParams("partiful-event", params); + return client.request("partiful-event", params, options); + } + + /** + * partiful-explore-cities (GET /partiful/explore-cities). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object exploreCities(Map params) { + return exploreCities(params, null); + } + + /** + * partiful-explore-cities (GET /partiful/explore-cities). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object exploreCities(Map params, RequestOptions options) { + OperationGroup.checkParams("partiful-explore-cities", params); + return client.request("partiful-explore-cities", params, options); + } + + /** + * partiful-explore-cities (GET /partiful/explore-cities). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object exploreCities() { + return exploreCities(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/PetSmartGroup.java b/src/main/java/net/crawlora/groups/PetSmartGroup.java new file mode 100644 index 0000000..7e3c3e9 --- /dev/null +++ b/src/main/java/net/crawlora/groups/PetSmartGroup.java @@ -0,0 +1,180 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "petSmart" operation group. + * Reach it via {@code client.petSmart()}. + */ +public final class PetSmartGroup { + private final CrawloraClient client; + + public PetSmartGroup(CrawloraClient client) { + this.client = client; + } + + /** + * petsmart-categories (GET /petsmart/categories). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object petsmartCategories(Map params) { + return petsmartCategories(params, null); + } + + /** + * petsmart-categories (GET /petsmart/categories). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object petsmartCategories(Map params, RequestOptions options) { + OperationGroup.checkParams("petsmart-categories", params); + return client.request("petsmart-categories", params, options); + } + + /** + * petsmart-categories (GET /petsmart/categories). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object petsmartCategories() { + return petsmartCategories(Map.of(), null); + } + + /** + * petsmart-product (GET /petsmart/product). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object petsmartProduct(Map params) { + return petsmartProduct(params, null); + } + + /** + * petsmart-product (GET /petsmart/product). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object petsmartProduct(Map params, RequestOptions options) { + OperationGroup.checkParams("petsmart-product", params); + return client.request("petsmart-product", params, options); + } + + /** + * petsmart-product-inventory (GET /petsmart/product/inventory). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object petsmartProductInventory(Map params) { + return petsmartProductInventory(params, null); + } + + /** + * petsmart-product-inventory (GET /petsmart/product/inventory). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object petsmartProductInventory(Map params, RequestOptions options) { + OperationGroup.checkParams("petsmart-product-inventory", params); + return client.request("petsmart-product-inventory", params, options); + } + + /** + * petsmart-search (GET /petsmart/search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object petsmartSearch(Map params) { + return petsmartSearch(params, null); + } + + /** + * petsmart-search (GET /petsmart/search). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object petsmartSearch(Map params, RequestOptions options) { + OperationGroup.checkParams("petsmart-search", params); + return client.request("petsmart-search", params, options); + } + + /** + * petsmart-search (GET /petsmart/search). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object petsmartSearch() { + return petsmartSearch(Map.of(), null); + } + + /** + * petsmart-search-filters (GET /petsmart/search/filters). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object petsmartSearchFilters(Map params) { + return petsmartSearchFilters(params, null); + } + + /** + * petsmart-search-filters (GET /petsmart/search/filters). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object petsmartSearchFilters(Map params, RequestOptions options) { + OperationGroup.checkParams("petsmart-search-filters", params); + return client.request("petsmart-search-filters", params, options); + } + + /** + * petsmart-search-filters (GET /petsmart/search/filters). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object petsmartSearchFilters() { + return petsmartSearchFilters(Map.of(), null); + } + + /** + * petsmart-suggest (GET /petsmart/suggest). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object petsmartSuggest(Map params) { + return petsmartSuggest(params, null); + } + + /** + * petsmart-suggest (GET /petsmart/suggest). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object petsmartSuggest(Map params, RequestOptions options) { + OperationGroup.checkParams("petsmart-suggest", params); + return client.request("petsmart-suggest", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/PgaTourGroup.java b/src/main/java/net/crawlora/groups/PgaTourGroup.java new file mode 100644 index 0000000..55062a8 --- /dev/null +++ b/src/main/java/net/crawlora/groups/PgaTourGroup.java @@ -0,0 +1,405 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "pgaTour" operation group. + * Reach it via {@code client.pgaTour()}. + */ +public final class PgaTourGroup { + private final CrawloraClient client; + + public PgaTourGroup(CrawloraClient client) { + this.client = client; + } + + /** + * pgatour-leaderboard (GET /pgatour/leaderboard). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourLeaderboard(Map params) { + return pgatourLeaderboard(params, null); + } + + /** + * pgatour-leaderboard (GET /pgatour/leaderboard). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourLeaderboard(Map params, RequestOptions options) { + OperationGroup.checkParams("pgatour-leaderboard", params); + return client.request("pgatour-leaderboard", params, options); + } + + /** + * pgatour-leaderboard (GET /pgatour/leaderboard). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourLeaderboard() { + return pgatourLeaderboard(Map.of(), null); + } + + /** + * pgatour-players (GET /pgatour/players). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourPlayers(Map params) { + return pgatourPlayers(params, null); + } + + /** + * pgatour-players (GET /pgatour/players). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourPlayers(Map params, RequestOptions options) { + OperationGroup.checkParams("pgatour-players", params); + return client.request("pgatour-players", params, options); + } + + /** + * pgatour-players (GET /pgatour/players). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourPlayers() { + return pgatourPlayers(Map.of(), null); + } + + /** + * pgatour-schedule (GET /pgatour/schedule). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourSchedule(Map params) { + return pgatourSchedule(params, null); + } + + /** + * pgatour-schedule (GET /pgatour/schedule). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourSchedule(Map params, RequestOptions options) { + OperationGroup.checkParams("pgatour-schedule", params); + return client.request("pgatour-schedule", params, options); + } + + /** + * pgatour-schedule (GET /pgatour/schedule). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourSchedule() { + return pgatourSchedule(Map.of(), null); + } + + /** + * pgatour-schedule-seasons (GET /pgatour/schedule/seasons). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourScheduleSeasons(Map params) { + return pgatourScheduleSeasons(params, null); + } + + /** + * pgatour-schedule-seasons (GET /pgatour/schedule/seasons). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourScheduleSeasons(Map params, RequestOptions options) { + OperationGroup.checkParams("pgatour-schedule-seasons", params); + return client.request("pgatour-schedule-seasons", params, options); + } + + /** + * pgatour-schedule-seasons (GET /pgatour/schedule/seasons). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourScheduleSeasons() { + return pgatourScheduleSeasons(Map.of(), null); + } + + /** + * pgatour-stats (GET /pgatour/stats). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourStats(Map params) { + return pgatourStats(params, null); + } + + /** + * pgatour-stats (GET /pgatour/stats). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourStats(Map params, RequestOptions options) { + OperationGroup.checkParams("pgatour-stats", params); + return client.request("pgatour-stats", params, options); + } + + /** + * pgatour-stats (GET /pgatour/stats). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourStats() { + return pgatourStats(Map.of(), null); + } + + /** + * pgatour-stat-detail (GET /pgatour/stats/{stat_id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourStatDetail(Map params) { + return pgatourStatDetail(params, null); + } + + /** + * pgatour-stat-detail (GET /pgatour/stats/{stat_id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourStatDetail(Map params, RequestOptions options) { + OperationGroup.checkParams("pgatour-stat-detail", params); + return client.request("pgatour-stat-detail", params, options); + } + + /** + * pgatour-stat-options (GET /pgatour/stats/{stat_id}/options). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourStatOptions(Map params) { + return pgatourStatOptions(params, null); + } + + /** + * pgatour-stat-options (GET /pgatour/stats/{stat_id}/options). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourStatOptions(Map params, RequestOptions options) { + OperationGroup.checkParams("pgatour-stat-options", params); + return client.request("pgatour-stat-options", params, options); + } + + /** + * pgatour-tournament-links (GET /pgatour/tournament-links). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourTournamentLinks(Map params) { + return pgatourTournamentLinks(params, null); + } + + /** + * pgatour-tournament-links (GET /pgatour/tournament-links). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourTournamentLinks(Map params, RequestOptions options) { + OperationGroup.checkParams("pgatour-tournament-links", params); + return client.request("pgatour-tournament-links", params, options); + } + + /** + * pgatour-tournament-links (GET /pgatour/tournament-links). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourTournamentLinks() { + return pgatourTournamentLinks(Map.of(), null); + } + + /** + * pgatour-tournament-broadcast (GET /pgatour/tournaments/{year}/{slug}/{id}/broadcast). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourTournamentBroadcast(Map params) { + return pgatourTournamentBroadcast(params, null); + } + + /** + * pgatour-tournament-broadcast (GET /pgatour/tournaments/{year}/{slug}/{id}/broadcast). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourTournamentBroadcast(Map params, RequestOptions options) { + OperationGroup.checkParams("pgatour-tournament-broadcast", params); + return client.request("pgatour-tournament-broadcast", params, options); + } + + /** + * pgatour-tournament-course-stats (GET /pgatour/tournaments/{year}/{slug}/{id}/course-stats). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourTournamentCourseStats(Map params) { + return pgatourTournamentCourseStats(params, null); + } + + /** + * pgatour-tournament-course-stats (GET /pgatour/tournaments/{year}/{slug}/{id}/course-stats). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourTournamentCourseStats(Map params, RequestOptions options) { + OperationGroup.checkParams("pgatour-tournament-course-stats", params); + return client.request("pgatour-tournament-course-stats", params, options); + } + + /** + * pgatour-tournament-field (GET /pgatour/tournaments/{year}/{slug}/{id}/field). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourTournamentField(Map params) { + return pgatourTournamentField(params, null); + } + + /** + * pgatour-tournament-field (GET /pgatour/tournaments/{year}/{slug}/{id}/field). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourTournamentField(Map params, RequestOptions options) { + OperationGroup.checkParams("pgatour-tournament-field", params); + return client.request("pgatour-tournament-field", params, options); + } + + /** + * pgatour-tournament-overview (GET /pgatour/tournaments/{year}/{slug}/{id}/overview). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourTournamentOverview(Map params) { + return pgatourTournamentOverview(params, null); + } + + /** + * pgatour-tournament-overview (GET /pgatour/tournaments/{year}/{slug}/{id}/overview). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourTournamentOverview(Map params, RequestOptions options) { + OperationGroup.checkParams("pgatour-tournament-overview", params); + return client.request("pgatour-tournament-overview", params, options); + } + + /** + * pgatour-tournament-past-results (GET /pgatour/tournaments/{year}/{slug}/{id}/past-results). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourTournamentPastResults(Map params) { + return pgatourTournamentPastResults(params, null); + } + + /** + * pgatour-tournament-past-results (GET /pgatour/tournaments/{year}/{slug}/{id}/past-results). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourTournamentPastResults(Map params, RequestOptions options) { + OperationGroup.checkParams("pgatour-tournament-past-results", params); + return client.request("pgatour-tournament-past-results", params, options); + } + + /** + * pgatour-tournament-tee-times (GET /pgatour/tournaments/{year}/{slug}/{id}/tee-times). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourTournamentTeeTimes(Map params) { + return pgatourTournamentTeeTimes(params, null); + } + + /** + * pgatour-tournament-tee-times (GET /pgatour/tournaments/{year}/{slug}/{id}/tee-times). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourTournamentTeeTimes(Map params, RequestOptions options) { + OperationGroup.checkParams("pgatour-tournament-tee-times", params); + return client.request("pgatour-tournament-tee-times", params, options); + } + + /** + * pgatour-tournament-weather (GET /pgatour/tournaments/{year}/{slug}/{id}/weather). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourTournamentWeather(Map params) { + return pgatourTournamentWeather(params, null); + } + + /** + * pgatour-tournament-weather (GET /pgatour/tournaments/{year}/{slug}/{id}/weather). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object pgatourTournamentWeather(Map params, RequestOptions options) { + OperationGroup.checkParams("pgatour-tournament-weather", params); + return client.request("pgatour-tournament-weather", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/RottenTomatoesGroup.java b/src/main/java/net/crawlora/groups/RottenTomatoesGroup.java index e7ecfce..690e878 100644 --- a/src/main/java/net/crawlora/groups/RottenTomatoesGroup.java +++ b/src/main/java/net/crawlora/groups/RottenTomatoesGroup.java @@ -111,6 +111,99 @@ public Object rottentomatoesBrowseTv() { return rottentomatoesBrowseTv(Map.of(), null); } + /** + * rottentomatoes-critic (GET /rottentomatoes/critic). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesCritic(Map params) { + return rottentomatoesCritic(params, null); + } + + /** + * rottentomatoes-critic (GET /rottentomatoes/critic). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesCritic(Map params, RequestOptions options) { + OperationGroup.checkParams("rottentomatoes-critic", params); + return client.request("rottentomatoes-critic", params, options); + } + + /** + * rottentomatoes-critic (GET /rottentomatoes/critic). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesCritic() { + return rottentomatoesCritic(Map.of(), null); + } + + /** + * rottentomatoes-critic-publications (GET /rottentomatoes/critic/publications). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesCriticPublications(Map params) { + return rottentomatoesCriticPublications(params, null); + } + + /** + * rottentomatoes-critic-publications (GET /rottentomatoes/critic/publications). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesCriticPublications(Map params, RequestOptions options) { + OperationGroup.checkParams("rottentomatoes-critic-publications", params); + return client.request("rottentomatoes-critic-publications", params, options); + } + + /** + * rottentomatoes-critic-publications (GET /rottentomatoes/critic/publications). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesCriticPublications() { + return rottentomatoesCriticPublications(Map.of(), null); + } + + /** + * rottentomatoes-critic-reviews (GET /rottentomatoes/critic/reviews). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesCriticReviews(Map params) { + return rottentomatoesCriticReviews(params, null); + } + + /** + * rottentomatoes-critic-reviews (GET /rottentomatoes/critic/reviews). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesCriticReviews(Map params, RequestOptions options) { + OperationGroup.checkParams("rottentomatoes-critic-reviews", params); + return client.request("rottentomatoes-critic-reviews", params, options); + } + + /** + * rottentomatoes-critic-reviews (GET /rottentomatoes/critic/reviews). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesCriticReviews() { + return rottentomatoesCriticReviews(Map.of(), null); + } + /** * rottentomatoes-critics-authors (GET /rottentomatoes/critics/authors). * @@ -345,6 +438,37 @@ public Object rottentomatoesEpisode() { return rottentomatoesEpisode(Map.of(), null); } + /** + * rottentomatoes-episode-reviews (GET /rottentomatoes/episode/reviews). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesEpisodeReviews(Map params) { + return rottentomatoesEpisodeReviews(params, null); + } + + /** + * rottentomatoes-episode-reviews (GET /rottentomatoes/episode/reviews). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesEpisodeReviews(Map params, RequestOptions options) { + OperationGroup.checkParams("rottentomatoes-episode-reviews", params); + return client.request("rottentomatoes-episode-reviews", params, options); + } + + /** + * rottentomatoes-episode-reviews (GET /rottentomatoes/episode/reviews). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesEpisodeReviews() { + return rottentomatoesEpisodeReviews(Map.of(), null); + } + /** * rottentomatoes-movie (GET /rottentomatoes/movie). * @@ -407,6 +531,68 @@ public Object rottentomatoesMovieReviews() { return rottentomatoesMovieReviews(Map.of(), null); } + /** + * rottentomatoes-movie-videos (GET /rottentomatoes/movie/videos). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesMovieVideos(Map params) { + return rottentomatoesMovieVideos(params, null); + } + + /** + * rottentomatoes-movie-videos (GET /rottentomatoes/movie/videos). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesMovieVideos(Map params, RequestOptions options) { + OperationGroup.checkParams("rottentomatoes-movie-videos", params); + return client.request("rottentomatoes-movie-videos", params, options); + } + + /** + * rottentomatoes-movie-videos (GET /rottentomatoes/movie/videos). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesMovieVideos() { + return rottentomatoesMovieVideos(Map.of(), null); + } + + /** + * rottentomatoes-movies (GET /rottentomatoes/movies). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesMovies(Map params) { + return rottentomatoesMovies(params, null); + } + + /** + * rottentomatoes-movies (GET /rottentomatoes/movies). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesMovies(Map params, RequestOptions options) { + OperationGroup.checkParams("rottentomatoes-movies", params); + return client.request("rottentomatoes-movies", params, options); + } + + /** + * rottentomatoes-movies (GET /rottentomatoes/movies). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesMovies() { + return rottentomatoesMovies(Map.of(), null); + } + /** * rottentomatoes-person (GET /rottentomatoes/person). * @@ -438,6 +624,50 @@ public Object rottentomatoesPerson() { return rottentomatoesPerson(Map.of(), null); } + /** + * rottentomatoes-publication (GET /rottentomatoes/publication). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesPublication(Map params) { + return rottentomatoesPublication(params, null); + } + + /** + * rottentomatoes-publication (GET /rottentomatoes/publication). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesPublication(Map params, RequestOptions options) { + OperationGroup.checkParams("rottentomatoes-publication", params); + return client.request("rottentomatoes-publication", params, options); + } + + /** + * rottentomatoes-publication-reviews (GET /rottentomatoes/publication/reviews). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesPublicationReviews(Map params) { + return rottentomatoesPublicationReviews(params, null); + } + + /** + * rottentomatoes-publication-reviews (GET /rottentomatoes/publication/reviews). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesPublicationReviews(Map params, RequestOptions options) { + OperationGroup.checkParams("rottentomatoes-publication-reviews", params); + return client.request("rottentomatoes-publication-reviews", params, options); + } + /** * rottentomatoes-search (GET /rottentomatoes/search). * @@ -491,6 +721,37 @@ public Object rottentomatoesSeason() { return rottentomatoesSeason(Map.of(), null); } + /** + * rottentomatoes-season-reviews (GET /rottentomatoes/season/reviews). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesSeasonReviews(Map params) { + return rottentomatoesSeasonReviews(params, null); + } + + /** + * rottentomatoes-season-reviews (GET /rottentomatoes/season/reviews). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesSeasonReviews(Map params, RequestOptions options) { + OperationGroup.checkParams("rottentomatoes-season-reviews", params); + return client.request("rottentomatoes-season-reviews", params, options); + } + + /** + * rottentomatoes-season-reviews (GET /rottentomatoes/season/reviews). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rottentomatoesSeasonReviews() { + return rottentomatoesSeasonReviews(Map.of(), null); + } + /** * rottentomatoes-series (GET /rottentomatoes/series). * diff --git a/src/main/java/net/crawlora/groups/SofaScoreGroup.java b/src/main/java/net/crawlora/groups/SofaScoreGroup.java index 9ef1029..a520eb3 100644 --- a/src/main/java/net/crawlora/groups/SofaScoreGroup.java +++ b/src/main/java/net/crawlora/groups/SofaScoreGroup.java @@ -480,6 +480,28 @@ public Object sofascoreEventOdds(Map params, RequestOptions opti return client.request("sofascore-event-odds", params, options); } + /** + * sofascore-event-player-actions (GET /sofascore/event-player-actions). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sofascoreEventPlayerActions(Map params) { + return sofascoreEventPlayerActions(params, null); + } + + /** + * sofascore-event-player-actions (GET /sofascore/event-player-actions). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sofascoreEventPlayerActions(Map params, RequestOptions options) { + OperationGroup.checkParams("sofascore-event-player-actions", params); + return client.request("sofascore-event-player-actions", params, options); + } + /** * sofascore-event-player-heatmap (GET /sofascore/event-player-heatmap). * @@ -634,6 +656,28 @@ public Object sofascoreEventTeamHeatmap(Map params, RequestOptio return client.request("sofascore-event-team-heatmap", params, options); } + /** + * sofascore-event-team-shotmap (GET /sofascore/event-team-shotmap). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sofascoreEventTeamShotmap(Map params) { + return sofascoreEventTeamShotmap(params, null); + } + + /** + * sofascore-event-team-shotmap (GET /sofascore/event-team-shotmap). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sofascoreEventTeamShotmap(Map params, RequestOptions options) { + OperationGroup.checkParams("sofascore-event-team-shotmap", params); + return client.request("sofascore-event-team-shotmap", params, options); + } + /** * sofascore-event-team-streaks (GET /sofascore/event-team-streaks). * diff --git a/src/main/java/net/crawlora/groups/SpeedrunComGroup.java b/src/main/java/net/crawlora/groups/SpeedrunComGroup.java new file mode 100644 index 0000000..53b178b --- /dev/null +++ b/src/main/java/net/crawlora/groups/SpeedrunComGroup.java @@ -0,0 +1,413 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "speedrunCom" operation group. + * Reach it via {@code client.speedrunCom()}. + */ +public final class SpeedrunComGroup { + private final CrawloraClient client; + + public SpeedrunComGroup(CrawloraClient client) { + this.client = client; + } + + /** + * speedrun-catalog (GET /speedrun/catalogs/{kind}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunCatalog(Map params) { + return speedrunCatalog(params, null); + } + + /** + * speedrun-catalog (GET /speedrun/catalogs/{kind}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunCatalog(Map params, RequestOptions options) { + OperationGroup.checkParams("speedrun-catalog", params); + return client.request("speedrun-catalog", params, options); + } + + /** + * speedrun-category-detail (GET /speedrun/categories/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunCategoryDetail(Map params) { + return speedrunCategoryDetail(params, null); + } + + /** + * speedrun-category-detail (GET /speedrun/categories/{id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunCategoryDetail(Map params, RequestOptions options) { + OperationGroup.checkParams("speedrun-category-detail", params); + return client.request("speedrun-category-detail", params, options); + } + + /** + * speedrun-category-records (GET /speedrun/categories/{id}/records). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunCategoryRecords(Map params) { + return speedrunCategoryRecords(params, null); + } + + /** + * speedrun-category-records (GET /speedrun/categories/{id}/records). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunCategoryRecords(Map params, RequestOptions options) { + OperationGroup.checkParams("speedrun-category-records", params); + return client.request("speedrun-category-records", params, options); + } + + /** + * speedrun-category-variables (GET /speedrun/categories/{id}/variables). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunCategoryVariables(Map params) { + return speedrunCategoryVariables(params, null); + } + + /** + * speedrun-category-variables (GET /speedrun/categories/{id}/variables). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunCategoryVariables(Map params, RequestOptions options) { + OperationGroup.checkParams("speedrun-category-variables", params); + return client.request("speedrun-category-variables", params, options); + } + + /** + * speedrun-games (GET /speedrun/games). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunGames(Map params) { + return speedrunGames(params, null); + } + + /** + * speedrun-games (GET /speedrun/games). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunGames(Map params, RequestOptions options) { + OperationGroup.checkParams("speedrun-games", params); + return client.request("speedrun-games", params, options); + } + + /** + * speedrun-games (GET /speedrun/games). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunGames() { + return speedrunGames(Map.of(), null); + } + + /** + * speedrun-game-detail (GET /speedrun/games/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunGameDetail(Map params) { + return speedrunGameDetail(params, null); + } + + /** + * speedrun-game-detail (GET /speedrun/games/{id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunGameDetail(Map params, RequestOptions options) { + OperationGroup.checkParams("speedrun-game-detail", params); + return client.request("speedrun-game-detail", params, options); + } + + /** + * speedrun-categories (GET /speedrun/games/{id}/categories). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunCategories(Map params) { + return speedrunCategories(params, null); + } + + /** + * speedrun-categories (GET /speedrun/games/{id}/categories). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunCategories(Map params, RequestOptions options) { + OperationGroup.checkParams("speedrun-categories", params); + return client.request("speedrun-categories", params, options); + } + + /** + * speedrun-levels (GET /speedrun/games/{id}/levels). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunLevels(Map params) { + return speedrunLevels(params, null); + } + + /** + * speedrun-levels (GET /speedrun/games/{id}/levels). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunLevels(Map params, RequestOptions options) { + OperationGroup.checkParams("speedrun-levels", params); + return client.request("speedrun-levels", params, options); + } + + /** + * speedrun-records (GET /speedrun/games/{id}/records). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunRecords(Map params) { + return speedrunRecords(params, null); + } + + /** + * speedrun-records (GET /speedrun/games/{id}/records). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunRecords(Map params, RequestOptions options) { + OperationGroup.checkParams("speedrun-records", params); + return client.request("speedrun-records", params, options); + } + + /** + * speedrun-variables (GET /speedrun/games/{id}/variables). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunVariables(Map params) { + return speedrunVariables(params, null); + } + + /** + * speedrun-variables (GET /speedrun/games/{id}/variables). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunVariables(Map params, RequestOptions options) { + OperationGroup.checkParams("speedrun-variables", params); + return client.request("speedrun-variables", params, options); + } + + /** + * speedrun-game-leaderboard (GET /speedrun/leaderboards/{game}/category/{category}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunGameLeaderboard(Map params) { + return speedrunGameLeaderboard(params, null); + } + + /** + * speedrun-game-leaderboard (GET /speedrun/leaderboards/{game}/category/{category}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunGameLeaderboard(Map params, RequestOptions options) { + OperationGroup.checkParams("speedrun-game-leaderboard", params); + return client.request("speedrun-game-leaderboard", params, options); + } + + /** + * speedrun-level-leaderboard (GET /speedrun/leaderboards/{game}/level/{level}/{category}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunLevelLeaderboard(Map params) { + return speedrunLevelLeaderboard(params, null); + } + + /** + * speedrun-level-leaderboard (GET /speedrun/leaderboards/{game}/level/{level}/{category}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunLevelLeaderboard(Map params, RequestOptions options) { + OperationGroup.checkParams("speedrun-level-leaderboard", params); + return client.request("speedrun-level-leaderboard", params, options); + } + + /** + * speedrun-level-detail (GET /speedrun/levels/{id}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunLevelDetail(Map params) { + return speedrunLevelDetail(params, null); + } + + /** + * speedrun-level-detail (GET /speedrun/levels/{id}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunLevelDetail(Map params, RequestOptions options) { + OperationGroup.checkParams("speedrun-level-detail", params); + return client.request("speedrun-level-detail", params, options); + } + + /** + * speedrun-level-categories (GET /speedrun/levels/{id}/categories). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunLevelCategories(Map params) { + return speedrunLevelCategories(params, null); + } + + /** + * speedrun-level-categories (GET /speedrun/levels/{id}/categories). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunLevelCategories(Map params, RequestOptions options) { + OperationGroup.checkParams("speedrun-level-categories", params); + return client.request("speedrun-level-categories", params, options); + } + + /** + * speedrun-level-records (GET /speedrun/levels/{id}/records). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunLevelRecords(Map params) { + return speedrunLevelRecords(params, null); + } + + /** + * speedrun-level-records (GET /speedrun/levels/{id}/records). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunLevelRecords(Map params, RequestOptions options) { + OperationGroup.checkParams("speedrun-level-records", params); + return client.request("speedrun-level-records", params, options); + } + + /** + * speedrun-level-variables (GET /speedrun/levels/{id}/variables). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunLevelVariables(Map params) { + return speedrunLevelVariables(params, null); + } + + /** + * speedrun-level-variables (GET /speedrun/levels/{id}/variables). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunLevelVariables(Map params, RequestOptions options) { + OperationGroup.checkParams("speedrun-level-variables", params); + return client.request("speedrun-level-variables", params, options); + } + + /** + * speedrun-resource-options (GET /speedrun/options). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunResourceOptions(Map params) { + return speedrunResourceOptions(params, null); + } + + /** + * speedrun-resource-options (GET /speedrun/options). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunResourceOptions(Map params, RequestOptions options) { + OperationGroup.checkParams("speedrun-resource-options", params); + return client.request("speedrun-resource-options", params, options); + } + + /** + * speedrun-resource-options (GET /speedrun/options). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object speedrunResourceOptions() { + return speedrunResourceOptions(Map.of(), null); + } + +} diff --git a/src/main/java/net/crawlora/groups/WebtoonGroup.java b/src/main/java/net/crawlora/groups/WebtoonGroup.java new file mode 100644 index 0000000..d412f1e --- /dev/null +++ b/src/main/java/net/crawlora/groups/WebtoonGroup.java @@ -0,0 +1,171 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "webtoon" operation group. + * Reach it via {@code client.webtoon()}. + */ +public final class WebtoonGroup { + private final CrawloraClient client; + + public WebtoonGroup(CrawloraClient client) { + this.client = client; + } + + /** + * webtoon-genre (GET /webtoon/genre). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object genre(Map params) { + return genre(params, null); + } + + /** + * webtoon-genre (GET /webtoon/genre). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object genre(Map params, RequestOptions options) { + OperationGroup.checkParams("webtoon-genre", params); + return client.request("webtoon-genre", params, options); + } + + /** + * webtoon-genres (GET /webtoon/genres). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object genres(Map params) { + return genres(params, null); + } + + /** + * webtoon-genres (GET /webtoon/genres). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object genres(Map params, RequestOptions options) { + OperationGroup.checkParams("webtoon-genres", params); + return client.request("webtoon-genres", params, options); + } + + /** + * webtoon-genres (GET /webtoon/genres). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object genres() { + return genres(Map.of(), null); + } + + /** + * webtoon-originals (GET /webtoon/originals). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object originals(Map params) { + return originals(params, null); + } + + /** + * webtoon-originals (GET /webtoon/originals). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object originals(Map params, RequestOptions options) { + OperationGroup.checkParams("webtoon-originals", params); + return client.request("webtoon-originals", params, options); + } + + /** + * webtoon-rankings (GET /webtoon/rankings). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rankings(Map params) { + return rankings(params, null); + } + + /** + * webtoon-rankings (GET /webtoon/rankings). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rankings(Map params, RequestOptions options) { + OperationGroup.checkParams("webtoon-rankings", params); + return client.request("webtoon-rankings", params, options); + } + + /** + * webtoon-rankings (GET /webtoon/rankings). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rankings() { + return rankings(Map.of(), null); + } + + /** + * webtoon-search (GET /webtoon/search). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object search(Map params) { + return search(params, null); + } + + /** + * webtoon-search (GET /webtoon/search). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object search(Map params, RequestOptions options) { + OperationGroup.checkParams("webtoon-search", params); + return client.request("webtoon-search", params, options); + } + + /** + * webtoon-series (GET /webtoon/series). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object series(Map params) { + return series(params, null); + } + + /** + * webtoon-series (GET /webtoon/series). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object series(Map params, RequestOptions options) { + OperationGroup.checkParams("webtoon-series", params); + return client.request("webtoon-series", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/WtaGroup.java b/src/main/java/net/crawlora/groups/WtaGroup.java new file mode 100644 index 0000000..59aa6e7 --- /dev/null +++ b/src/main/java/net/crawlora/groups/WtaGroup.java @@ -0,0 +1,277 @@ +package net.crawlora.groups; + +// Generated by scripts/generate.py. Do not edit manually. + +import java.util.Map; +import net.crawlora.CrawloraClient; +import net.crawlora.OperationGroup; +import net.crawlora.RequestOptions; + +/** + * Generated typed accessor for the "wta" operation group. + * Reach it via {@code client.wta()}. + */ +public final class WtaGroup { + private final CrawloraClient client; + + public WtaGroup(CrawloraClient client) { + this.client = client; + } + + /** + * wta-countries (GET /wta/countries). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object countries(Map params) { + return countries(params, null); + } + + /** + * wta-countries (GET /wta/countries). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object countries(Map params, RequestOptions options) { + OperationGroup.checkParams("wta-countries", params); + return client.request("wta-countries", params, options); + } + + /** + * wta-countries (GET /wta/countries). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object countries() { + return countries(Map.of(), null); + } + + /** + * wta-match-states (GET /wta/match-states). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object matchStates(Map params) { + return matchStates(params, null); + } + + /** + * wta-match-states (GET /wta/match-states). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object matchStates(Map params, RequestOptions options) { + OperationGroup.checkParams("wta-match-states", params); + return client.request("wta-match-states", params, options); + } + + /** + * wta-match-states (GET /wta/match-states). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object matchStates() { + return matchStates(Map.of(), null); + } + + /** + * wta-rankings (GET /wta/rankings/{view}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rankings(Map params) { + return rankings(params, null); + } + + /** + * wta-rankings (GET /wta/rankings/{view}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rankings(Map params, RequestOptions options) { + OperationGroup.checkParams("wta-rankings", params); + return client.request("wta-rankings", params, options); + } + + /** + * wta-tournament-seasons (GET /wta/tournament-seasons). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object tournamentSeasons(Map params) { + return tournamentSeasons(params, null); + } + + /** + * wta-tournament-seasons (GET /wta/tournament-seasons). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object tournamentSeasons(Map params, RequestOptions options) { + OperationGroup.checkParams("wta-tournament-seasons", params); + return client.request("wta-tournament-seasons", params, options); + } + + /** + * wta-tournament-seasons (GET /wta/tournament-seasons). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object tournamentSeasons() { + return tournamentSeasons(Map.of(), null); + } + + /** + * wta-tournaments (GET /wta/tournaments). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object tournaments(Map params) { + return tournaments(params, null); + } + + /** + * wta-tournaments (GET /wta/tournaments). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object tournaments(Map params, RequestOptions options) { + OperationGroup.checkParams("wta-tournaments", params); + return client.request("wta-tournaments", params, options); + } + + /** + * wta-tournaments (GET /wta/tournaments). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object tournaments() { + return tournaments(Map.of(), null); + } + + /** + * wta-tournament (GET /wta/tournaments/{group_id}/{year}). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object tournament(Map params) { + return tournament(params, null); + } + + /** + * wta-tournament (GET /wta/tournaments/{group_id}/{year}). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object tournament(Map params, RequestOptions options) { + OperationGroup.checkParams("wta-tournament", params); + return client.request("wta-tournament", params, options); + } + + /** + * wta-tournament-draws (GET /wta/tournaments/{group_id}/{year}/draws). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object tournamentDraws(Map params) { + return tournamentDraws(params, null); + } + + /** + * wta-tournament-draws (GET /wta/tournaments/{group_id}/{year}/draws). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object tournamentDraws(Map params, RequestOptions options) { + OperationGroup.checkParams("wta-tournament-draws", params); + return client.request("wta-tournament-draws", params, options); + } + + /** + * wta-tournament-matches (GET /wta/tournaments/{group_id}/{year}/matches). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object tournamentMatches(Map params) { + return tournamentMatches(params, null); + } + + /** + * wta-tournament-matches (GET /wta/tournaments/{group_id}/{year}/matches). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object tournamentMatches(Map params, RequestOptions options) { + OperationGroup.checkParams("wta-tournament-matches", params); + return client.request("wta-tournament-matches", params, options); + } + + /** + * wta-tournament-order-of-play (GET /wta/tournaments/{group_id}/{year}/order-of-play). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object tournamentOrderOfPlay(Map params) { + return tournamentOrderOfPlay(params, null); + } + + /** + * wta-tournament-order-of-play (GET /wta/tournaments/{group_id}/{year}/order-of-play). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object tournamentOrderOfPlay(Map params, RequestOptions options) { + OperationGroup.checkParams("wta-tournament-order-of-play", params); + return client.request("wta-tournament-order-of-play", params, options); + } + + /** + * wta-tournament-players (GET /wta/tournaments/{group_id}/{year}/players). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object tournamentPlayers(Map params) { + return tournamentPlayers(params, null); + } + + /** + * wta-tournament-players (GET /wta/tournaments/{group_id}/{year}/players). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object tournamentPlayers(Map params, RequestOptions options) { + OperationGroup.checkParams("wta-tournament-players", params); + return client.request("wta-tournament-players", params, options); + } + +} diff --git a/src/main/java/net/crawlora/groups/YahooShoppingGroup.java b/src/main/java/net/crawlora/groups/YahooShoppingGroup.java index fdc2d66..a0ada9d 100644 --- a/src/main/java/net/crawlora/groups/YahooShoppingGroup.java +++ b/src/main/java/net/crawlora/groups/YahooShoppingGroup.java @@ -40,6 +40,59 @@ public Object article(Map params, RequestOptions options) { return client.request("yahoo-shopping-article", params, options); } + /** + * yahoo-shopping-author (GET /yahoo-shopping/author). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object author(Map params) { + return author(params, null); + } + + /** + * yahoo-shopping-author (GET /yahoo-shopping/author). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object author(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-shopping-author", params); + return client.request("yahoo-shopping-author", params, options); + } + + /** + * yahoo-shopping-categories (GET /yahoo-shopping/categories). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object categories(Map params) { + return categories(params, null); + } + + /** + * yahoo-shopping-categories (GET /yahoo-shopping/categories). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object categories(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-shopping-categories", params); + return client.request("yahoo-shopping-categories", params, options); + } + + /** + * yahoo-shopping-categories (GET /yahoo-shopping/categories). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object categories() { + return categories(Map.of(), null); + } + /** * yahoo-shopping-category (GET /yahoo-shopping/category). * @@ -62,6 +115,37 @@ public Object category(Map params, RequestOptions options) { return client.request("yahoo-shopping-category", params, options); } + /** + * yahoo-shopping-experts (GET /yahoo-shopping/experts). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object experts(Map params) { + return experts(params, null); + } + + /** + * yahoo-shopping-experts (GET /yahoo-shopping/experts). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object experts(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-shopping-experts", params); + return client.request("yahoo-shopping-experts", params, options); + } + + /** + * yahoo-shopping-experts (GET /yahoo-shopping/experts). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object experts() { + return experts(Map.of(), null); + } + /** * yahoo-shopping-home (GET /yahoo-shopping/home). * @@ -146,6 +230,59 @@ public Object shoppingLists() { return shoppingLists(Map.of(), null); } + /** + * yahoo-shopping-sitemap (GET /yahoo-shopping/sitemap). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sitemap(Map params) { + return sitemap(params, null); + } + + /** + * yahoo-shopping-sitemap (GET /yahoo-shopping/sitemap). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sitemap(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-shopping-sitemap", params); + return client.request("yahoo-shopping-sitemap", params, options); + } + + /** + * yahoo-shopping-sitemaps (GET /yahoo-shopping/sitemaps). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sitemaps(Map params) { + return sitemaps(params, null); + } + + /** + * yahoo-shopping-sitemaps (GET /yahoo-shopping/sitemaps). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sitemaps(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-shopping-sitemaps", params); + return client.request("yahoo-shopping-sitemaps", params, options); + } + + /** + * yahoo-shopping-sitemaps (GET /yahoo-shopping/sitemaps). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sitemaps() { + return sitemaps(Map.of(), null); + } + /** * yahoo-shopping-store (GET /yahoo-shopping/store). * @@ -199,4 +336,26 @@ public Object stores() { return stores(Map.of(), null); } + /** + * yahoo-shopping-suggest (GET /yahoo-shopping/suggest). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object suggest(Map params) { + return suggest(params, null); + } + + /** + * yahoo-shopping-suggest (GET /yahoo-shopping/suggest). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object suggest(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-shopping-suggest", params); + return client.request("yahoo-shopping-suggest", params, options); + } + } diff --git a/src/main/java/net/crawlora/groups/YahooSportsGroup.java b/src/main/java/net/crawlora/groups/YahooSportsGroup.java index caf1093..c4558e8 100644 --- a/src/main/java/net/crawlora/groups/YahooSportsGroup.java +++ b/src/main/java/net/crawlora/groups/YahooSportsGroup.java @@ -18,273 +18,1006 @@ public YahooSportsGroup(CrawloraClient client) { this.client = client; } + /** + * yahoo-sports-college-rankings (GET /yahoo-sports/college-rankings). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object collegeRankings(Map params) { + return collegeRankings(params, null); + } + + /** + * yahoo-sports-college-rankings (GET /yahoo-sports/college-rankings). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object collegeRankings(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-college-rankings", params); + return client.request("yahoo-sports-college-rankings", params, options); + } + + /** + * yahoo-sports-draft (GET /yahoo-sports/draft). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object draft(Map params) { + return draft(params, null); + } + + /** + * yahoo-sports-draft (GET /yahoo-sports/draft). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object draft(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-draft", params); + return client.request("yahoo-sports-draft", params, options); + } + + /** + * yahoo-sports-dropdown-catalog (GET /yahoo-sports/dropdown-catalog). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dropdownCatalog(Map params) { + return dropdownCatalog(params, null); + } + + /** + * yahoo-sports-dropdown-catalog (GET /yahoo-sports/dropdown-catalog). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dropdownCatalog(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-dropdown-catalog", params); + return client.request("yahoo-sports-dropdown-catalog", params, options); + } + + /** + * yahoo-sports-dropdown-catalog (GET /yahoo-sports/dropdown-catalog). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object dropdownCatalog() { + return dropdownCatalog(Map.of(), null); + } + /** * yahoo-sports-game (GET /yahoo-sports/game). * * @param params operation parameters * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object game(Map params) { - return game(params, null); + public Object game(Map params) { + return game(params, null); + } + + /** + * yahoo-sports-game (GET /yahoo-sports/game). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object game(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-game", params); + return client.request("yahoo-sports-game", params, options); + } + + /** + * yahoo-sports-golf-leaderboard (GET /yahoo-sports/golf-leaderboard). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object golfLeaderboard(Map params) { + return golfLeaderboard(params, null); + } + + /** + * yahoo-sports-golf-leaderboard (GET /yahoo-sports/golf-leaderboard). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object golfLeaderboard(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-golf-leaderboard", params); + return client.request("yahoo-sports-golf-leaderboard", params, options); + } + + /** + * yahoo-sports-golf-player (GET /yahoo-sports/golf-player). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object golfPlayer(Map params) { + return golfPlayer(params, null); + } + + /** + * yahoo-sports-golf-player (GET /yahoo-sports/golf-player). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object golfPlayer(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-golf-player", params); + return client.request("yahoo-sports-golf-player", params, options); + } + + /** + * yahoo-sports-golf-player-news (GET /yahoo-sports/golf-player-news). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object golfPlayerNews(Map params) { + return golfPlayerNews(params, null); + } + + /** + * yahoo-sports-golf-player-news (GET /yahoo-sports/golf-player-news). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object golfPlayerNews(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-golf-player-news", params); + return client.request("yahoo-sports-golf-player-news", params, options); + } + + /** + * yahoo-sports-golf-players (GET /yahoo-sports/golf-players). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object golfPlayers(Map params) { + return golfPlayers(params, null); + } + + /** + * yahoo-sports-golf-players (GET /yahoo-sports/golf-players). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object golfPlayers(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-golf-players", params); + return client.request("yahoo-sports-golf-players", params, options); + } + + /** + * yahoo-sports-golf-players (GET /yahoo-sports/golf-players). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object golfPlayers() { + return golfPlayers(Map.of(), null); + } + + /** + * yahoo-sports-golf-schedule (GET /yahoo-sports/golf-schedule). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object golfSchedule(Map params) { + return golfSchedule(params, null); + } + + /** + * yahoo-sports-golf-schedule (GET /yahoo-sports/golf-schedule). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object golfSchedule(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-golf-schedule", params); + return client.request("yahoo-sports-golf-schedule", params, options); + } + + /** + * yahoo-sports-home (GET /yahoo-sports/home). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object home(Map params) { + return home(params, null); + } + + /** + * yahoo-sports-home (GET /yahoo-sports/home). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object home(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-home", params); + return client.request("yahoo-sports-home", params, options); + } + + /** + * yahoo-sports-home (GET /yahoo-sports/home). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object home() { + return home(Map.of(), null); + } + + /** + * yahoo-sports-injury-report (GET /yahoo-sports/injury-report). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object injuryReport(Map params) { + return injuryReport(params, null); + } + + /** + * yahoo-sports-injury-report (GET /yahoo-sports/injury-report). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object injuryReport(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-injury-report", params); + return client.request("yahoo-sports-injury-report", params, options); + } + + /** + * yahoo-sports-league-schedule (GET /yahoo-sports/league-schedule). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object leagueSchedule(Map params) { + return leagueSchedule(params, null); + } + + /** + * yahoo-sports-league-schedule (GET /yahoo-sports/league-schedule). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object leagueSchedule(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-league-schedule", params); + return client.request("yahoo-sports-league-schedule", params, options); + } + + /** + * yahoo-sports-leagues (GET /yahoo-sports/leagues). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object leagues(Map params) { + return leagues(params, null); + } + + /** + * yahoo-sports-leagues (GET /yahoo-sports/leagues). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object leagues(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-leagues", params); + return client.request("yahoo-sports-leagues", params, options); + } + + /** + * yahoo-sports-leagues (GET /yahoo-sports/leagues). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object leagues() { + return leagues(Map.of(), null); + } + + /** + * yahoo-sports-mma-fight-card (GET /yahoo-sports/mma-fight-card). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object mmaFightCard(Map params) { + return mmaFightCard(params, null); + } + + /** + * yahoo-sports-mma-fight-card (GET /yahoo-sports/mma-fight-card). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object mmaFightCard(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-mma-fight-card", params); + return client.request("yahoo-sports-mma-fight-card", params, options); + } + + /** + * yahoo-sports-mma-fight-card (GET /yahoo-sports/mma-fight-card). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object mmaFightCard() { + return mmaFightCard(Map.of(), null); + } + + /** + * yahoo-sports-mma-schedule (GET /yahoo-sports/mma-schedule). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object mmaSchedule(Map params) { + return mmaSchedule(params, null); + } + + /** + * yahoo-sports-mma-schedule (GET /yahoo-sports/mma-schedule). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object mmaSchedule(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-mma-schedule", params); + return client.request("yahoo-sports-mma-schedule", params, options); + } + + /** + * yahoo-sports-mma-schedule (GET /yahoo-sports/mma-schedule). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object mmaSchedule() { + return mmaSchedule(Map.of(), null); + } + + /** + * yahoo-sports-more-news (GET /yahoo-sports/more-news). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object moreNews(Map params) { + return moreNews(params, null); + } + + /** + * yahoo-sports-more-news (GET /yahoo-sports/more-news). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object moreNews(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-more-news", params); + return client.request("yahoo-sports-more-news", params, options); + } + + /** + * yahoo-sports-more-news (GET /yahoo-sports/more-news). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object moreNews() { + return moreNews(Map.of(), null); + } + + /** + * yahoo-sports-motorsports-race (GET /yahoo-sports/motorsports-race). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motorsportsRace(Map params) { + return motorsportsRace(params, null); + } + + /** + * yahoo-sports-motorsports-race (GET /yahoo-sports/motorsports-race). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motorsportsRace(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-motorsports-race", params); + return client.request("yahoo-sports-motorsports-race", params, options); + } + + /** + * yahoo-sports-motorsports-schedule (GET /yahoo-sports/motorsports-schedule). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motorsportsSchedule(Map params) { + return motorsportsSchedule(params, null); + } + + /** + * yahoo-sports-motorsports-schedule (GET /yahoo-sports/motorsports-schedule). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object motorsportsSchedule(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-motorsports-schedule", params); + return client.request("yahoo-sports-motorsports-schedule", params, options); + } + + /** + * yahoo-sports-navigation (GET /yahoo-sports/navigation). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object navigation(Map params) { + return navigation(params, null); + } + + /** + * yahoo-sports-navigation (GET /yahoo-sports/navigation). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object navigation(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-navigation", params); + return client.request("yahoo-sports-navigation", params, options); + } + + /** + * yahoo-sports-navigation (GET /yahoo-sports/navigation). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object navigation() { + return navigation(Map.of(), null); + } + + /** + * yahoo-sports-network-catalog (GET /yahoo-sports/network-catalog). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object networkCatalog(Map params) { + return networkCatalog(params, null); + } + + /** + * yahoo-sports-network-catalog (GET /yahoo-sports/network-catalog). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object networkCatalog(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-network-catalog", params); + return client.request("yahoo-sports-network-catalog", params, options); + } + + /** + * yahoo-sports-network-catalog (GET /yahoo-sports/network-catalog). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object networkCatalog() { + return networkCatalog(Map.of(), null); + } + + /** + * yahoo-sports-news (GET /yahoo-sports/news). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object news(Map params) { + return news(params, null); + } + + /** + * yahoo-sports-news (GET /yahoo-sports/news). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object news(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-news", params); + return client.request("yahoo-sports-news", params, options); + } + + /** + * yahoo-sports-newsletter-archive (GET /yahoo-sports/newsletter-archive). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object newsletterArchive(Map params) { + return newsletterArchive(params, null); + } + + /** + * yahoo-sports-newsletter-archive (GET /yahoo-sports/newsletter-archive). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object newsletterArchive(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-newsletter-archive", params); + return client.request("yahoo-sports-newsletter-archive", params, options); + } + + /** + * yahoo-sports-newsletters (GET /yahoo-sports/newsletters). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object newsletters(Map params) { + return newsletters(params, null); + } + + /** + * yahoo-sports-newsletters (GET /yahoo-sports/newsletters). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object newsletters(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-newsletters", params); + return client.request("yahoo-sports-newsletters", params, options); + } + + /** + * yahoo-sports-newsletters (GET /yahoo-sports/newsletters). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object newsletters() { + return newsletters(Map.of(), null); + } + + /** + * yahoo-sports-odds-featured (GET /yahoo-sports/odds-featured). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object oddsFeatured(Map params) { + return oddsFeatured(params, null); + } + + /** + * yahoo-sports-odds-featured (GET /yahoo-sports/odds-featured). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object oddsFeatured(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-odds-featured", params); + return client.request("yahoo-sports-odds-featured", params, options); + } + + /** + * yahoo-sports-odds-featured (GET /yahoo-sports/odds-featured). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object oddsFeatured() { + return oddsFeatured(Map.of(), null); + } + + /** + * yahoo-sports-odds-game (GET /yahoo-sports/odds-game). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object oddsGame(Map params) { + return oddsGame(params, null); + } + + /** + * yahoo-sports-odds-game (GET /yahoo-sports/odds-game). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object oddsGame(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-odds-game", params); + return client.request("yahoo-sports-odds-game", params, options); + } + + /** + * yahoo-sports-odds-games (GET /yahoo-sports/odds-games). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object oddsGames(Map params) { + return oddsGames(params, null); + } + + /** + * yahoo-sports-odds-games (GET /yahoo-sports/odds-games). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object oddsGames(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-odds-games", params); + return client.request("yahoo-sports-odds-games", params, options); + } + + /** + * yahoo-sports-odds-trending (GET /yahoo-sports/odds-trending). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object oddsTrending(Map params) { + return oddsTrending(params, null); + } + + /** + * yahoo-sports-odds-trending (GET /yahoo-sports/odds-trending). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object oddsTrending(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-odds-trending", params); + return client.request("yahoo-sports-odds-trending", params, options); + } + + /** + * yahoo-sports-odds-trending (GET /yahoo-sports/odds-trending). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object oddsTrending() { + return oddsTrending(Map.of(), null); + } + + /** + * yahoo-sports-olympics-medals (GET /yahoo-sports/olympics-medals). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object olympicsMedals(Map params) { + return olympicsMedals(params, null); + } + + /** + * yahoo-sports-olympics-medals (GET /yahoo-sports/olympics-medals). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object olympicsMedals(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-olympics-medals", params); + return client.request("yahoo-sports-olympics-medals", params, options); } /** - * yahoo-sports-game (GET /yahoo-sports/game). with explicit request options. + * yahoo-sports-olympics-medals (GET /yahoo-sports/olympics-medals). with no parameters. * - * @param params operation parameters - * @param options per-request options, or {@code null} for defaults * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object game(Map params, RequestOptions options) { - OperationGroup.checkParams("yahoo-sports-game", params); - return client.request("yahoo-sports-game", params, options); + public Object olympicsMedals() { + return olympicsMedals(Map.of(), null); } /** - * yahoo-sports-golf-leaderboard (GET /yahoo-sports/golf-leaderboard). + * yahoo-sports-player (GET /yahoo-sports/player). * * @param params operation parameters * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object golfLeaderboard(Map params) { - return golfLeaderboard(params, null); + public Object player(Map params) { + return player(params, null); } /** - * yahoo-sports-golf-leaderboard (GET /yahoo-sports/golf-leaderboard). with explicit request options. + * yahoo-sports-player (GET /yahoo-sports/player). with explicit request options. * * @param params operation parameters * @param options per-request options, or {@code null} for defaults * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object golfLeaderboard(Map params, RequestOptions options) { - OperationGroup.checkParams("yahoo-sports-golf-leaderboard", params); - return client.request("yahoo-sports-golf-leaderboard", params, options); + public Object player(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-player", params); + return client.request("yahoo-sports-player", params, options); } /** - * yahoo-sports-golf-schedule (GET /yahoo-sports/golf-schedule). + * yahoo-sports-player-search (GET /yahoo-sports/player-search). * * @param params operation parameters * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object golfSchedule(Map params) { - return golfSchedule(params, null); + public Object playerSearch(Map params) { + return playerSearch(params, null); } /** - * yahoo-sports-golf-schedule (GET /yahoo-sports/golf-schedule). with explicit request options. + * yahoo-sports-player-search (GET /yahoo-sports/player-search). with explicit request options. * * @param params operation parameters * @param options per-request options, or {@code null} for defaults * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object golfSchedule(Map params, RequestOptions options) { - OperationGroup.checkParams("yahoo-sports-golf-schedule", params); - return client.request("yahoo-sports-golf-schedule", params, options); + public Object playerSearch(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-player-search", params); + return client.request("yahoo-sports-player-search", params, options); } /** - * yahoo-sports-mma-fight-card (GET /yahoo-sports/mma-fight-card). + * yahoo-sports-playoff-bracket (GET /yahoo-sports/playoff-bracket). * * @param params operation parameters * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object mmaFightCard(Map params) { - return mmaFightCard(params, null); + public Object playoffBracket(Map params) { + return playoffBracket(params, null); } /** - * yahoo-sports-mma-fight-card (GET /yahoo-sports/mma-fight-card). with explicit request options. + * yahoo-sports-playoff-bracket (GET /yahoo-sports/playoff-bracket). with explicit request options. * * @param params operation parameters * @param options per-request options, or {@code null} for defaults * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object mmaFightCard(Map params, RequestOptions options) { - OperationGroup.checkParams("yahoo-sports-mma-fight-card", params); - return client.request("yahoo-sports-mma-fight-card", params, options); + public Object playoffBracket(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-playoff-bracket", params); + return client.request("yahoo-sports-playoff-bracket", params, options); } /** - * yahoo-sports-mma-fight-card (GET /yahoo-sports/mma-fight-card). with no parameters. + * yahoo-sports-playoff-bracket-catalog (GET /yahoo-sports/playoff-bracket-catalog). * + * @param params operation parameters * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object mmaFightCard() { - return mmaFightCard(Map.of(), null); + public Object playoffBracketCatalog(Map params) { + return playoffBracketCatalog(params, null); } /** - * yahoo-sports-mma-schedule (GET /yahoo-sports/mma-schedule). + * yahoo-sports-playoff-bracket-catalog (GET /yahoo-sports/playoff-bracket-catalog). with explicit request options. * * @param params operation parameters + * @param options per-request options, or {@code null} for defaults * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object mmaSchedule(Map params) { - return mmaSchedule(params, null); + public Object playoffBracketCatalog(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-playoff-bracket-catalog", params); + return client.request("yahoo-sports-playoff-bracket-catalog", params, options); } /** - * yahoo-sports-mma-schedule (GET /yahoo-sports/mma-schedule). with explicit request options. + * yahoo-sports-rss-catalog (GET /yahoo-sports/rss-catalog). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object rssCatalog(Map params) { + return rssCatalog(params, null); + } + + /** + * yahoo-sports-rss-catalog (GET /yahoo-sports/rss-catalog). with explicit request options. * * @param params operation parameters * @param options per-request options, or {@code null} for defaults * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object mmaSchedule(Map params, RequestOptions options) { - OperationGroup.checkParams("yahoo-sports-mma-schedule", params); - return client.request("yahoo-sports-mma-schedule", params, options); + public Object rssCatalog(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-rss-catalog", params); + return client.request("yahoo-sports-rss-catalog", params, options); } /** - * yahoo-sports-mma-schedule (GET /yahoo-sports/mma-schedule). with no parameters. + * yahoo-sports-rss-catalog (GET /yahoo-sports/rss-catalog). with no parameters. * * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object mmaSchedule() { - return mmaSchedule(Map.of(), null); + public Object rssCatalog() { + return rssCatalog(Map.of(), null); } /** - * yahoo-sports-motorsports-race (GET /yahoo-sports/motorsports-race). + * yahoo-sports-rss-feed (GET /yahoo-sports/rss-feed). * * @param params operation parameters * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object motorsportsRace(Map params) { - return motorsportsRace(params, null); + public Object rssFeed(Map params) { + return rssFeed(params, null); } /** - * yahoo-sports-motorsports-race (GET /yahoo-sports/motorsports-race). with explicit request options. + * yahoo-sports-rss-feed (GET /yahoo-sports/rss-feed). with explicit request options. * * @param params operation parameters * @param options per-request options, or {@code null} for defaults * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object motorsportsRace(Map params, RequestOptions options) { - OperationGroup.checkParams("yahoo-sports-motorsports-race", params); - return client.request("yahoo-sports-motorsports-race", params, options); + public Object rssFeed(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-rss-feed", params); + return client.request("yahoo-sports-rss-feed", params, options); } /** - * yahoo-sports-motorsports-schedule (GET /yahoo-sports/motorsports-schedule). + * yahoo-sports-schedule-catalog (GET /yahoo-sports/schedule-catalog). * * @param params operation parameters * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object motorsportsSchedule(Map params) { - return motorsportsSchedule(params, null); + public Object scheduleCatalog(Map params) { + return scheduleCatalog(params, null); } /** - * yahoo-sports-motorsports-schedule (GET /yahoo-sports/motorsports-schedule). with explicit request options. + * yahoo-sports-schedule-catalog (GET /yahoo-sports/schedule-catalog). with explicit request options. * * @param params operation parameters * @param options per-request options, or {@code null} for defaults * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object motorsportsSchedule(Map params, RequestOptions options) { - OperationGroup.checkParams("yahoo-sports-motorsports-schedule", params); - return client.request("yahoo-sports-motorsports-schedule", params, options); + public Object scheduleCatalog(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-schedule-catalog", params); + return client.request("yahoo-sports-schedule-catalog", params, options); } /** - * yahoo-sports-news (GET /yahoo-sports/news). + * yahoo-sports-scoreboard (GET /yahoo-sports/scoreboard). * * @param params operation parameters * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object news(Map params) { - return news(params, null); + public Object scoreboard(Map params) { + return scoreboard(params, null); } /** - * yahoo-sports-news (GET /yahoo-sports/news). with explicit request options. + * yahoo-sports-scoreboard (GET /yahoo-sports/scoreboard). with explicit request options. * * @param params operation parameters * @param options per-request options, or {@code null} for defaults * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object news(Map params, RequestOptions options) { - OperationGroup.checkParams("yahoo-sports-news", params); - return client.request("yahoo-sports-news", params, options); + public Object scoreboard(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-scoreboard", params); + return client.request("yahoo-sports-scoreboard", params, options); } /** - * yahoo-sports-olympics-medals (GET /yahoo-sports/olympics-medals). + * yahoo-sports-section-stream (GET /yahoo-sports/section-stream). * * @param params operation parameters * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object olympicsMedals(Map params) { - return olympicsMedals(params, null); + public Object sectionStream(Map params) { + return sectionStream(params, null); } /** - * yahoo-sports-olympics-medals (GET /yahoo-sports/olympics-medals). with explicit request options. + * yahoo-sports-section-stream (GET /yahoo-sports/section-stream). with explicit request options. * * @param params operation parameters * @param options per-request options, or {@code null} for defaults * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object olympicsMedals(Map params, RequestOptions options) { - OperationGroup.checkParams("yahoo-sports-olympics-medals", params); - return client.request("yahoo-sports-olympics-medals", params, options); + public Object sectionStream(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-section-stream", params); + return client.request("yahoo-sports-section-stream", params, options); } /** - * yahoo-sports-olympics-medals (GET /yahoo-sports/olympics-medals). with no parameters. + * yahoo-sports-soccer-scoreboard (GET /yahoo-sports/soccer-scoreboard). * + * @param params operation parameters * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object olympicsMedals() { - return olympicsMedals(Map.of(), null); + public Object soccerScoreboard(Map params) { + return soccerScoreboard(params, null); } /** - * yahoo-sports-player (GET /yahoo-sports/player). + * yahoo-sports-soccer-scoreboard (GET /yahoo-sports/soccer-scoreboard). with explicit request options. * * @param params operation parameters + * @param options per-request options, or {@code null} for defaults * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object player(Map params) { - return player(params, null); + public Object soccerScoreboard(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-soccer-scoreboard", params); + return client.request("yahoo-sports-soccer-scoreboard", params, options); } /** - * yahoo-sports-player (GET /yahoo-sports/player). with explicit request options. + * yahoo-sports-soccer-scoreboard (GET /yahoo-sports/soccer-scoreboard). with no parameters. * - * @param params operation parameters - * @param options per-request options, or {@code null} for defaults * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object player(Map params, RequestOptions options) { - OperationGroup.checkParams("yahoo-sports-player", params); - return client.request("yahoo-sports-player", params, options); + public Object soccerScoreboard() { + return soccerScoreboard(Map.of(), null); } /** - * yahoo-sports-scoreboard (GET /yahoo-sports/scoreboard). + * yahoo-sports-sportsbook-catalog (GET /yahoo-sports/sportsbook-catalog). * * @param params operation parameters * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object scoreboard(Map params) { - return scoreboard(params, null); + public Object sportsbookCatalog(Map params) { + return sportsbookCatalog(params, null); } /** - * yahoo-sports-scoreboard (GET /yahoo-sports/scoreboard). with explicit request options. + * yahoo-sports-sportsbook-catalog (GET /yahoo-sports/sportsbook-catalog). with explicit request options. * * @param params operation parameters * @param options per-request options, or {@code null} for defaults * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode */ - public Object scoreboard(Map params, RequestOptions options) { - OperationGroup.checkParams("yahoo-sports-scoreboard", params); - return client.request("yahoo-sports-scoreboard", params, options); + public Object sportsbookCatalog(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-sportsbook-catalog", params); + return client.request("yahoo-sports-sportsbook-catalog", params, options); + } + + /** + * yahoo-sports-sportsbook-catalog (GET /yahoo-sports/sportsbook-catalog). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object sportsbookCatalog() { + return sportsbookCatalog(Map.of(), null); } /** @@ -309,6 +1042,81 @@ public Object standings(Map params, RequestOptions options) { return client.request("yahoo-sports-standings", params, options); } + /** + * yahoo-sports-stats (GET /yahoo-sports/stats). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object stats(Map params) { + return stats(params, null); + } + + /** + * yahoo-sports-stats (GET /yahoo-sports/stats). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object stats(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-stats", params); + return client.request("yahoo-sports-stats", params, options); + } + + /** + * yahoo-sports-stats-catalog (GET /yahoo-sports/stats-catalog). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statsCatalog(Map params) { + return statsCatalog(params, null); + } + + /** + * yahoo-sports-stats-catalog (GET /yahoo-sports/stats-catalog). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statsCatalog(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-stats-catalog", params); + return client.request("yahoo-sports-stats-catalog", params, options); + } + + /** + * yahoo-sports-stats-catalog (GET /yahoo-sports/stats-catalog). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statsCatalog() { + return statsCatalog(Map.of(), null); + } + + /** + * yahoo-sports-stats-discovery (GET /yahoo-sports/stats-discovery). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statsDiscovery(Map params) { + return statsDiscovery(params, null); + } + + /** + * yahoo-sports-stats-discovery (GET /yahoo-sports/stats-discovery). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object statsDiscovery(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-stats-discovery", params); + return client.request("yahoo-sports-stats-discovery", params, options); + } + /** * yahoo-sports-team (GET /yahoo-sports/team). * @@ -459,4 +1267,119 @@ public Object tennisScoreboard() { return tennisScoreboard(Map.of(), null); } + /** + * yahoo-sports-topic-news (GET /yahoo-sports/topic-news). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object topicNews(Map params) { + return topicNews(params, null); + } + + /** + * yahoo-sports-topic-news (GET /yahoo-sports/topic-news). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object topicNews(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-topic-news", params); + return client.request("yahoo-sports-topic-news", params, options); + } + + /** + * yahoo-sports-topic-news (GET /yahoo-sports/topic-news). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object topicNews() { + return topicNews(Map.of(), null); + } + + /** + * yahoo-sports-video-headlines (GET /yahoo-sports/video-headlines). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object videoHeadlines(Map params) { + return videoHeadlines(params, null); + } + + /** + * yahoo-sports-video-headlines (GET /yahoo-sports/video-headlines). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object videoHeadlines(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-video-headlines", params); + return client.request("yahoo-sports-video-headlines", params, options); + } + + /** + * yahoo-sports-video-list-catalog (GET /yahoo-sports/video-list-catalog). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object videoListCatalog(Map params) { + return videoListCatalog(params, null); + } + + /** + * yahoo-sports-video-list-catalog (GET /yahoo-sports/video-list-catalog). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object videoListCatalog(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-video-list-catalog", params); + return client.request("yahoo-sports-video-list-catalog", params, options); + } + + /** + * yahoo-sports-video-list-catalog (GET /yahoo-sports/video-list-catalog). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object videoListCatalog() { + return videoListCatalog(Map.of(), null); + } + + /** + * yahoo-sports-watch-schedule (GET /yahoo-sports/watch-schedule). + * + * @param params operation parameters + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object watchSchedule(Map params) { + return watchSchedule(params, null); + } + + /** + * yahoo-sports-watch-schedule (GET /yahoo-sports/watch-schedule). with explicit request options. + * + * @param params operation parameters + * @param options per-request options, or {@code null} for defaults + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object watchSchedule(Map params, RequestOptions options) { + OperationGroup.checkParams("yahoo-sports-watch-schedule", params); + return client.request("yahoo-sports-watch-schedule", params, options); + } + + /** + * yahoo-sports-watch-schedule (GET /yahoo-sports/watch-schedule). with no parameters. + * + * @return the parsed JSON response (Map/List/String/Number/Boolean), or an InputStream in stream mode + */ + public Object watchSchedule() { + return watchSchedule(Map.of(), null); + } + }